@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.
- package/CHANGELOG.md +53 -0
- package/README.md +85 -15
- package/consumer-ai/SKILL.md +12 -0
- package/consumer-ai/api-index.json +103754 -0
- package/consumer-ai/package-context.json +409 -0
- package/dist/ai/action/ExecutionHistory.cjs.map +1 -1
- package/dist/ai/action/ExecutionHistory.d.cts +32 -2
- package/dist/ai/action/ExecutionHistory.d.ts +32 -2
- package/dist/ai/action/ExecutionHistory.js.map +1 -1
- package/dist/ai/action/ScreenActionContext.cjs.map +1 -1
- package/dist/ai/action/ScreenActionContext.d.cts +15 -2
- package/dist/ai/action/ScreenActionContext.d.ts +15 -2
- package/dist/ai/action/ScreenActionContext.js.map +1 -1
- package/dist/ai/action/context.cjs.map +1 -1
- package/dist/ai/action/context.d.cts +19 -3
- package/dist/ai/action/context.d.ts +19 -3
- package/dist/ai/action/context.js.map +1 -1
- package/dist/ai/action/types.d.cts +35 -3
- package/dist/ai/action/types.d.ts +35 -3
- package/dist/ai/action/use-execution-session.cjs.map +1 -1
- package/dist/ai/action/use-execution-session.d.cts +17 -1
- package/dist/ai/action/use-execution-session.d.ts +17 -1
- package/dist/ai/action/use-execution-session.js.map +1 -1
- package/dist/ai/action/use-screen-action-registry.cjs.map +1 -1
- package/dist/ai/action/use-screen-action-registry.d.cts +77 -8
- package/dist/ai/action/use-screen-action-registry.d.ts +77 -8
- package/dist/ai/action/use-screen-action-registry.js.map +1 -1
- package/dist/ai/action/use-screen-action.cjs.map +1 -1
- package/dist/ai/action/use-screen-action.d.cts +23 -6
- package/dist/ai/action/use-screen-action.d.ts +23 -6
- package/dist/ai/action/use-screen-action.js.map +1 -1
- package/dist/ai/action/use-screen-context.cjs.map +1 -1
- package/dist/ai/action/use-screen-context.d.cts +42 -5
- package/dist/ai/action/use-screen-context.d.ts +42 -5
- package/dist/ai/action/use-screen-context.js.map +1 -1
- package/dist/ai/ai-chat/transport.cjs.map +1 -1
- package/dist/ai/ai-chat/transport.d.cts +35 -8
- package/dist/ai/ai-chat/transport.d.ts +35 -8
- package/dist/ai/ai-chat/transport.js.map +1 -1
- package/dist/ai/generative-ui/GenerativeUIRenderer.cjs.map +1 -1
- package/dist/ai/generative-ui/GenerativeUIRenderer.d.cts +21 -3
- package/dist/ai/generative-ui/GenerativeUIRenderer.d.ts +21 -3
- package/dist/ai/generative-ui/GenerativeUIRenderer.js.map +1 -1
- package/dist/ai/generative-ui/error-boundary.cjs.map +1 -1
- package/dist/ai/generative-ui/error-boundary.d.cts +98 -2
- package/dist/ai/generative-ui/error-boundary.d.ts +98 -2
- package/dist/ai/generative-ui/error-boundary.js.map +1 -1
- package/dist/ai/generative-ui/registry.cjs.map +1 -1
- package/dist/ai/generative-ui/registry.d.cts +96 -7
- package/dist/ai/generative-ui/registry.d.ts +96 -7
- package/dist/ai/generative-ui/registry.js.map +1 -1
- package/dist/ai/proposal/ProposalFieldReview.cjs.map +1 -1
- package/dist/ai/proposal/ProposalFieldReview.d.cts +170 -8
- package/dist/ai/proposal/ProposalFieldReview.d.ts +170 -8
- package/dist/ai/proposal/ProposalFieldReview.js.map +1 -1
- package/dist/ai/proposal/types.d.cts +97 -26
- package/dist/ai/proposal/types.d.ts +97 -26
- package/dist/ai/proposal/use-proposal-batch-review.cjs.map +1 -1
- package/dist/ai/proposal/use-proposal-batch-review.d.cts +133 -7
- package/dist/ai/proposal/use-proposal-batch-review.d.ts +133 -7
- package/dist/ai/proposal/use-proposal-batch-review.js.map +1 -1
- package/dist/ai/proposal/use-proposal-review.cjs.map +1 -1
- package/dist/ai/proposal/use-proposal-review.d.cts +47 -5
- package/dist/ai/proposal/use-proposal-review.d.ts +47 -5
- package/dist/ai/proposal/use-proposal-review.js.map +1 -1
- package/dist/avatar.svg +1 -0
- package/dist/consumer-ai/SKILL.md +6 -0
- package/dist/consumer-ai/api-index.json +103754 -0
- package/dist/consumer-ai/package-context.json +5 -3
- package/dist/mockServiceWorker.js +361 -0
- package/dist/styles.css +1 -1
- package/dist/tools/components/auth/AuthForms.cjs.map +1 -1
- package/dist/tools/components/auth/AuthForms.d.cts +131 -81
- package/dist/tools/components/auth/AuthForms.d.ts +131 -81
- package/dist/tools/components/auth/AuthForms.js.map +1 -1
- package/dist/tools/components/auth/AuthGuard.cjs.map +1 -1
- package/dist/tools/components/auth/AuthGuard.d.cts +31 -4
- package/dist/tools/components/auth/AuthGuard.d.ts +31 -4
- package/dist/tools/components/auth/AuthGuard.js.map +1 -1
- package/dist/tools/components/auth/AuthProvider.cjs.map +1 -1
- package/dist/tools/components/auth/AuthProvider.d.cts +39 -42
- package/dist/tools/components/auth/AuthProvider.d.ts +39 -42
- package/dist/tools/components/auth/AuthProvider.js.map +1 -1
- package/dist/tools/components/auth/ProtectedRoute.cjs.map +1 -1
- package/dist/tools/components/auth/ProtectedRoute.d.cts +75 -60
- package/dist/tools/components/auth/ProtectedRoute.d.ts +75 -60
- package/dist/tools/components/auth/ProtectedRoute.js.map +1 -1
- package/dist/tools/components/auth/SignInButton.cjs.map +1 -1
- package/dist/tools/components/auth/SignInButton.d.cts +26 -18
- package/dist/tools/components/auth/SignInButton.d.ts +26 -18
- package/dist/tools/components/auth/SignInButton.js.map +1 -1
- package/dist/tools/components/auth/UserProfileProvider.cjs.map +1 -1
- package/dist/tools/components/auth/UserProfileProvider.d.cts +48 -20
- package/dist/tools/components/auth/UserProfileProvider.d.ts +48 -20
- package/dist/tools/components/auth/UserProfileProvider.js.map +1 -1
- package/dist/tools/components/auth/adapters/better-auth-adapter.cjs.map +1 -1
- package/dist/tools/components/auth/adapters/better-auth-adapter.d.cts +371 -51
- package/dist/tools/components/auth/adapters/better-auth-adapter.d.ts +371 -51
- package/dist/tools/components/auth/adapters/better-auth-adapter.js.map +1 -1
- package/dist/tools/components/auth/adapters/mock-adapter.cjs.map +1 -1
- package/dist/tools/components/auth/adapters/mock-adapter.d.cts +149 -28
- package/dist/tools/components/auth/adapters/mock-adapter.d.ts +149 -28
- package/dist/tools/components/auth/adapters/mock-adapter.js.map +1 -1
- package/dist/tools/components/auth/auth-session.cjs.map +1 -1
- package/dist/tools/components/auth/auth-session.d.cts +147 -1
- package/dist/tools/components/auth/auth-session.d.ts +147 -1
- package/dist/tools/components/auth/auth-session.js.map +1 -1
- package/dist/tools/components/auth/session-cache.cjs.map +1 -1
- package/dist/tools/components/auth/session-cache.d.cts +88 -24
- package/dist/tools/components/auth/session-cache.d.ts +88 -24
- package/dist/tools/components/auth/session-cache.js.map +1 -1
- package/dist/tools/components/auth/types.cjs.map +1 -1
- package/dist/tools/components/auth/types.d.cts +329 -106
- package/dist/tools/components/auth/types.d.ts +329 -106
- package/dist/tools/components/auth/types.js.map +1 -1
- package/dist/tools/components/auth/useAuth.cjs.map +1 -1
- package/dist/tools/components/auth/useAuth.d.cts +110 -17
- package/dist/tools/components/auth/useAuth.d.ts +110 -17
- package/dist/tools/components/auth/useAuth.js.map +1 -1
- package/dist/tools/components/auth/useAuthGuard.cjs.map +1 -1
- package/dist/tools/components/auth/useAuthGuard.d.cts +49 -38
- package/dist/tools/components/auth/useAuthGuard.d.ts +49 -38
- package/dist/tools/components/auth/useAuthGuard.js.map +1 -1
- package/dist/tools/components/auth/useRoleCheck.cjs.map +1 -1
- package/dist/tools/components/auth/useRoleCheck.d.cts +48 -1
- package/dist/tools/components/auth/useRoleCheck.d.ts +48 -1
- package/dist/tools/components/auth/useRoleCheck.js.map +1 -1
- package/dist/tools/components/auth/useUserProfile.cjs.map +1 -1
- package/dist/tools/components/auth/useUserProfile.d.cts +66 -1
- package/dist/tools/components/auth/useUserProfile.d.ts +66 -1
- package/dist/tools/components/auth/useUserProfile.js.map +1 -1
- package/dist/tools/components/barcode/BarcodeGenerator.cjs.map +1 -1
- package/dist/tools/components/barcode/BarcodeGenerator.d.cts +32 -18
- package/dist/tools/components/barcode/BarcodeGenerator.d.ts +32 -18
- package/dist/tools/components/barcode/BarcodeGenerator.js.map +1 -1
- package/dist/tools/components/barcode/QRCodeGenerator.cjs +1 -1
- package/dist/tools/components/barcode/QRCodeGenerator.cjs.map +1 -1
- package/dist/tools/components/barcode/QRCodeGenerator.d.cts +20 -13
- package/dist/tools/components/barcode/QRCodeGenerator.d.ts +20 -13
- package/dist/tools/components/barcode/QRCodeGenerator.js +1 -1
- package/dist/tools/components/barcode/QRCodeGenerator.js.map +1 -1
- package/dist/tools/components/barcode/QRCodeScanner.cjs.map +1 -1
- package/dist/tools/components/barcode/QRCodeScanner.d.cts +32 -1
- package/dist/tools/components/barcode/QRCodeScanner.d.ts +32 -1
- package/dist/tools/components/barcode/QRCodeScanner.js.map +1 -1
- package/dist/tools/components/calendar/ResourceCalendar.cjs.map +1 -1
- package/dist/tools/components/calendar/ResourceCalendar.d.cts +17 -42
- package/dist/tools/components/calendar/ResourceCalendar.d.ts +17 -42
- package/dist/tools/components/calendar/ResourceCalendar.js.map +1 -1
- package/dist/tools/components/calendar/views/ResourceView.cjs +1 -1
- package/dist/tools/components/calendar/views/ResourceView.cjs.map +1 -1
- package/dist/tools/components/calendar/views/ResourceView.js +2 -2
- package/dist/tools/components/calendar/views/ResourceView.js.map +1 -1
- package/dist/tools/components/chart/ComposedChart.cjs.map +1 -1
- package/dist/tools/components/chart/ComposedChart.d.cts +54 -1
- package/dist/tools/components/chart/ComposedChart.d.ts +54 -1
- package/dist/tools/components/chart/ComposedChart.js.map +1 -1
- package/dist/tools/components/chart/SimpleAreaChart.cjs.map +1 -1
- package/dist/tools/components/chart/SimpleAreaChart.d.cts +41 -1
- package/dist/tools/components/chart/SimpleAreaChart.d.ts +41 -1
- package/dist/tools/components/chart/SimpleAreaChart.js.map +1 -1
- package/dist/tools/components/chart/SimpleBarChart.cjs.map +1 -1
- package/dist/tools/components/chart/SimpleBarChart.d.cts +34 -24
- package/dist/tools/components/chart/SimpleBarChart.d.ts +34 -24
- package/dist/tools/components/chart/SimpleBarChart.js.map +1 -1
- package/dist/tools/components/chart/SimpleLineChart.cjs.map +1 -1
- package/dist/tools/components/chart/SimpleLineChart.d.cts +31 -28
- package/dist/tools/components/chart/SimpleLineChart.d.ts +31 -28
- package/dist/tools/components/chart/SimpleLineChart.js.map +1 -1
- package/dist/tools/components/chart/SimplePieChart.cjs.map +1 -1
- package/dist/tools/components/chart/SimplePieChart.d.cts +28 -22
- package/dist/tools/components/chart/SimplePieChart.d.ts +28 -22
- package/dist/tools/components/chart/SimplePieChart.js.map +1 -1
- package/dist/tools/components/chart/SimpleRadarChart.cjs.map +1 -1
- package/dist/tools/components/chart/SimpleRadarChart.d.cts +38 -1
- package/dist/tools/components/chart/SimpleRadarChart.d.ts +38 -1
- package/dist/tools/components/chart/SimpleRadarChart.js.map +1 -1
- package/dist/tools/components/chart/SimpleScatterChart.cjs.map +1 -1
- package/dist/tools/components/chart/SimpleScatterChart.d.cts +44 -1
- package/dist/tools/components/chart/SimpleScatterChart.d.ts +44 -1
- package/dist/tools/components/chart/SimpleScatterChart.js.map +1 -1
- package/dist/tools/components/chart/StackedBarChart.cjs.map +1 -1
- package/dist/tools/components/chart/StackedBarChart.d.cts +38 -1
- package/dist/tools/components/chart/StackedBarChart.d.ts +38 -1
- package/dist/tools/components/chart/StackedBarChart.js.map +1 -1
- package/dist/tools/components/data-table/data-table.cjs +1 -1
- package/dist/tools/components/data-table/data-table.cjs.map +1 -1
- package/dist/tools/components/data-table/data-table.js +286 -263
- package/dist/tools/components/data-table/data-table.js.map +1 -1
- package/dist/tools/components/data-table/table-utils.cjs.map +1 -1
- package/dist/tools/components/data-table/table-utils.d.cts +45 -35
- package/dist/tools/components/data-table/table-utils.d.ts +45 -35
- package/dist/tools/components/data-table/table-utils.js.map +1 -1
- package/dist/tools/components/editable-table/editable-table.cjs +1 -1
- package/dist/tools/components/editable-table/editable-table.cjs.map +1 -1
- package/dist/tools/components/editable-table/editable-table.js +15 -2
- package/dist/tools/components/editable-table/editable-table.js.map +1 -1
- package/dist/tools/components/error/ErrorDialog.cjs +1 -1
- package/dist/tools/components/error/ErrorDialog.cjs.map +1 -1
- package/dist/tools/components/error/ErrorDialog.js +1 -1
- package/dist/tools/components/error/ErrorDialog.js.map +1 -1
- package/dist/tools/components/error/ErrorInline.cjs +1 -1
- package/dist/tools/components/error/ErrorInline.cjs.map +1 -1
- package/dist/tools/components/error/ErrorInline.js +1 -1
- package/dist/tools/components/error/ErrorInline.js.map +1 -1
- package/dist/tools/components/error/ErrorNotification.cjs +1 -1
- package/dist/tools/components/error/ErrorNotification.cjs.map +1 -1
- package/dist/tools/components/error/ErrorNotification.js +10 -10
- package/dist/tools/components/error/ErrorNotification.js.map +1 -1
- package/dist/tools/components/file-browser/FilePreview.cjs +1 -1
- package/dist/tools/components/file-browser/FilePreview.cjs.map +1 -1
- package/dist/tools/components/file-browser/FilePreview.js +28 -26
- package/dist/tools/components/file-browser/FilePreview.js.map +1 -1
- package/dist/tools/components/filter/filter.cjs.map +1 -1
- package/dist/tools/components/filter/filter.d.cts +23 -34
- package/dist/tools/components/filter/filter.d.ts +23 -34
- package/dist/tools/components/filter/filter.js.map +1 -1
- package/dist/tools/components/form/EnhancedDetailPage.cjs.map +1 -1
- package/dist/tools/components/form/EnhancedDetailPage.d.cts +47 -42
- package/dist/tools/components/form/EnhancedDetailPage.d.ts +47 -42
- package/dist/tools/components/form/EnhancedDetailPage.js.map +1 -1
- package/dist/tools/components/form/form-grid.cjs.map +1 -1
- package/dist/tools/components/form/form-grid.d.cts +44 -22
- package/dist/tools/components/form/form-grid.d.ts +44 -22
- package/dist/tools/components/form/form-grid.js.map +1 -1
- package/dist/tools/components/gantt/GanttChart.cjs +1 -1
- package/dist/tools/components/gantt/GanttChart.cjs.map +1 -1
- package/dist/tools/components/gantt/GanttChart.d.cts +20 -1
- package/dist/tools/components/gantt/GanttChart.d.ts +20 -1
- package/dist/tools/components/gantt/GanttChart.js +3 -0
- package/dist/tools/components/gantt/GanttChart.js.map +1 -1
- package/dist/tools/components/gantt/components/GanttTaskBar.cjs +1 -1
- package/dist/tools/components/gantt/components/GanttTaskBar.cjs.map +1 -1
- package/dist/tools/components/gantt/components/GanttTaskBar.js +2 -1
- package/dist/tools/components/gantt/components/GanttTaskBar.js.map +1 -1
- package/dist/tools/components/header/header.cjs +1 -1
- package/dist/tools/components/header/header.cjs.map +1 -1
- package/dist/tools/components/header/header.d.cts +103 -40
- package/dist/tools/components/header/header.d.ts +103 -40
- package/dist/tools/components/header/header.js +1 -1
- package/dist/tools/components/header/header.js.map +1 -1
- package/dist/tools/components/i18n/LanguageSwitcher.cjs.map +1 -1
- package/dist/tools/components/i18n/LanguageSwitcher.d.cts +18 -14
- package/dist/tools/components/i18n/LanguageSwitcher.d.ts +18 -14
- package/dist/tools/components/i18n/LanguageSwitcher.js.map +1 -1
- package/dist/tools/components/kanban/KanbanBoard.cjs +1 -1
- package/dist/tools/components/kanban/KanbanBoard.cjs.map +1 -1
- package/dist/tools/components/kanban/KanbanBoard.d.cts +16 -34
- package/dist/tools/components/kanban/KanbanBoard.d.ts +16 -34
- package/dist/tools/components/kanban/KanbanBoard.js +3 -0
- package/dist/tools/components/kanban/KanbanBoard.js.map +1 -1
- package/dist/tools/components/kanban/KanbanColumn.cjs +1 -1
- package/dist/tools/components/kanban/KanbanColumn.cjs.map +1 -1
- package/dist/tools/components/kanban/KanbanColumn.js +1 -1
- package/dist/tools/components/kanban/KanbanColumn.js.map +1 -1
- package/dist/tools/components/kanban/kanban-compound.cjs +1 -1
- package/dist/tools/components/kanban/kanban-compound.cjs.map +1 -1
- package/dist/tools/components/kanban/kanban-compound.js +4 -1
- package/dist/tools/components/kanban/kanban-compound.js.map +1 -1
- package/dist/tools/components/kanban/kanban-primitives.cjs +1 -1
- package/dist/tools/components/kanban/kanban-primitives.cjs.map +1 -1
- package/dist/tools/components/kanban/kanban-primitives.js +0 -1
- package/dist/tools/components/kanban/kanban-primitives.js.map +1 -1
- package/dist/tools/components/priority-queue/PriorityCard.cjs +1 -1
- package/dist/tools/components/priority-queue/PriorityCard.cjs.map +1 -1
- package/dist/tools/components/priority-queue/PriorityCard.js +3 -1
- package/dist/tools/components/priority-queue/PriorityCard.js.map +1 -1
- package/dist/tools/components/sidebar/SmartSidebar.cjs.map +1 -1
- package/dist/tools/components/sidebar/SmartSidebar.d.cts +41 -43
- package/dist/tools/components/sidebar/SmartSidebar.d.ts +41 -43
- package/dist/tools/components/sidebar/SmartSidebar.js.map +1 -1
- package/dist/tools/components/splash/SplashScreen.cjs.map +1 -1
- package/dist/tools/components/splash/SplashScreen.d.cts +43 -68
- package/dist/tools/components/splash/SplashScreen.d.ts +43 -68
- package/dist/tools/components/splash/SplashScreen.js.map +1 -1
- package/dist/tools/components/workflow/WorkflowStatusPanel.cjs +1 -1
- package/dist/tools/components/workflow/WorkflowStatusPanel.cjs.map +1 -1
- package/dist/tools/components/workflow/WorkflowStatusPanel.js +2 -2
- package/dist/tools/components/workflow/WorkflowStatusPanel.js.map +1 -1
- package/dist/tools/lib/data-access/data-access-context.cjs.map +1 -1
- package/dist/tools/lib/data-access/data-access-context.d.cts +15 -6
- package/dist/tools/lib/data-access/data-access-context.d.ts +15 -6
- package/dist/tools/lib/data-access/data-access-context.js.map +1 -1
- package/dist/tools/lib/data-access/react-query-provider.cjs.map +1 -1
- package/dist/tools/lib/data-access/react-query-provider.d.cts +19 -2
- package/dist/tools/lib/data-access/react-query-provider.d.ts +19 -2
- package/dist/tools/lib/data-access/react-query-provider.js.map +1 -1
- package/dist/tools/lib/data-access/react-query.cjs.map +1 -1
- package/dist/tools/lib/data-access/react-query.d.cts +365 -90
- package/dist/tools/lib/data-access/react-query.d.ts +365 -90
- package/dist/tools/lib/data-access/react-query.js.map +1 -1
- package/dist/tools/lib/error/AppError.cjs.map +1 -1
- package/dist/tools/lib/error/AppError.d.cts +157 -63
- package/dist/tools/lib/error/AppError.d.ts +157 -63
- package/dist/tools/lib/error/AppError.js.map +1 -1
- package/dist/tools/lib/hooks/useAsyncWithTimeout.cjs.map +1 -1
- package/dist/tools/lib/hooks/useAsyncWithTimeout.d.cts +79 -26
- package/dist/tools/lib/hooks/useAsyncWithTimeout.d.ts +79 -26
- package/dist/tools/lib/hooks/useAsyncWithTimeout.js.map +1 -1
- package/dist/tools/lib/hooks/useError.cjs.map +1 -1
- package/dist/tools/lib/hooks/useError.d.cts +51 -16
- package/dist/tools/lib/hooks/useError.d.ts +51 -16
- package/dist/tools/lib/hooks/useError.js.map +1 -1
- package/dist/tools/lib/schema/ajv.cjs +1 -1
- package/dist/tools/lib/schema/ajv.cjs.map +1 -1
- package/dist/tools/lib/schema/ajv.d.cts +19 -8
- package/dist/tools/lib/schema/ajv.d.ts +19 -8
- package/dist/tools/lib/schema/ajv.js +2 -1
- package/dist/tools/lib/schema/ajv.js.map +1 -1
- package/dist/tools/lib/state/error-store.cjs.map +1 -1
- package/dist/tools/lib/state/error-store.d.cts +61 -10
- package/dist/tools/lib/state/error-store.d.ts +61 -10
- package/dist/tools/lib/state/error-store.js.map +1 -1
- package/dist/tools/lib/state/store-factory.cjs.map +1 -1
- package/dist/tools/lib/state/store-factory.d.cts +25 -4
- package/dist/tools/lib/state/store-factory.d.ts +25 -4
- package/dist/tools/lib/state/store-factory.js.map +1 -1
- package/dist/tools/lib/state/ui-store.cjs.map +1 -1
- package/dist/tools/lib/state/ui-store.d.cts +39 -0
- package/dist/tools/lib/state/ui-store.d.ts +39 -0
- package/dist/tools/lib/state/ui-store.js.map +1 -1
- package/dist/ui/components/theme/theme-context.cjs.map +1 -1
- package/dist/ui/components/theme/theme-context.d.cts +171 -1
- package/dist/ui/components/theme/theme-context.d.ts +171 -1
- package/dist/ui/components/theme/theme-context.js.map +1 -1
- package/dist/ui/components/theme/theme-provider.cjs.map +1 -1
- package/dist/ui/components/theme/theme-provider.d.cts +31 -19
- package/dist/ui/components/theme/theme-provider.d.ts +31 -19
- package/dist/ui/components/theme/theme-provider.js.map +1 -1
- package/dist/ui/components/theme/theme-script.cjs.map +1 -1
- package/dist/ui/components/theme/theme-script.d.cts +16 -1
- package/dist/ui/components/theme/theme-script.d.ts +16 -1
- package/dist/ui/components/theme/theme-script.js.map +1 -1
- package/dist/ui/components/theme/theme-switcher.cjs +1 -1
- package/dist/ui/components/theme/theme-switcher.cjs.map +1 -1
- package/dist/ui/components/theme/theme-switcher.d.cts +82 -13
- package/dist/ui/components/theme/theme-switcher.d.ts +82 -13
- package/dist/ui/components/theme/theme-switcher.js +8 -0
- package/dist/ui/components/theme/theme-switcher.js.map +1 -1
- package/dist/ui/components/ui/accordion.cjs.map +1 -1
- package/dist/ui/components/ui/accordion.d.cts +60 -0
- package/dist/ui/components/ui/accordion.d.ts +60 -0
- package/dist/ui/components/ui/accordion.js.map +1 -1
- package/dist/ui/components/ui/adjustable-pane.cjs.map +1 -1
- package/dist/ui/components/ui/adjustable-pane.d.cts +44 -26
- package/dist/ui/components/ui/adjustable-pane.d.ts +44 -26
- package/dist/ui/components/ui/adjustable-pane.js.map +1 -1
- package/dist/ui/components/ui/alert-dialog.cjs.map +1 -1
- package/dist/ui/components/ui/alert-dialog.d.cts +179 -2
- package/dist/ui/components/ui/alert-dialog.d.ts +179 -2
- package/dist/ui/components/ui/alert-dialog.js.map +1 -1
- package/dist/ui/components/ui/alert.cjs.map +1 -1
- package/dist/ui/components/ui/alert.d.cts +52 -4
- package/dist/ui/components/ui/alert.d.ts +52 -4
- package/dist/ui/components/ui/alert.js.map +1 -1
- package/dist/ui/components/ui/aspect-ratio.cjs.map +1 -1
- package/dist/ui/components/ui/aspect-ratio.d.cts +16 -1
- package/dist/ui/components/ui/aspect-ratio.d.ts +16 -1
- package/dist/ui/components/ui/aspect-ratio.js.map +1 -1
- package/dist/ui/components/ui/avatar.cjs.map +1 -1
- package/dist/ui/components/ui/avatar.d.cts +87 -3
- package/dist/ui/components/ui/avatar.d.ts +87 -3
- package/dist/ui/components/ui/avatar.js.map +1 -1
- package/dist/ui/components/ui/badge-components.cjs.map +1 -1
- package/dist/ui/components/ui/badge-components.d.cts +13 -1
- package/dist/ui/components/ui/badge-components.d.ts +13 -1
- package/dist/ui/components/ui/badge-components.js.map +1 -1
- package/dist/ui/components/ui/badge-variants.cjs.map +1 -1
- package/dist/ui/components/ui/badge-variants.d.cts +15 -0
- package/dist/ui/components/ui/badge-variants.d.ts +15 -0
- package/dist/ui/components/ui/badge-variants.js.map +1 -1
- package/dist/ui/components/ui/breadcrumb.cjs.map +1 -1
- package/dist/ui/components/ui/breadcrumb.d.cts +91 -7
- package/dist/ui/components/ui/breadcrumb.d.ts +91 -7
- package/dist/ui/components/ui/breadcrumb.js.map +1 -1
- package/dist/ui/components/ui/button-components.cjs.map +1 -1
- package/dist/ui/components/ui/button-components.d.cts +18 -6
- package/dist/ui/components/ui/button-components.d.ts +18 -6
- package/dist/ui/components/ui/button-components.js.map +1 -1
- package/dist/ui/components/ui/button-group-components.cjs.map +1 -1
- package/dist/ui/components/ui/button-group-components.d.cts +39 -3
- package/dist/ui/components/ui/button-group-components.d.ts +39 -3
- package/dist/ui/components/ui/button-group-components.js.map +1 -1
- package/dist/ui/components/ui/button-group-variants.cjs.map +1 -1
- package/dist/ui/components/ui/button-group-variants.d.cts +15 -0
- package/dist/ui/components/ui/button-group-variants.d.ts +15 -0
- package/dist/ui/components/ui/button-group-variants.js.map +1 -1
- package/dist/ui/components/ui/button-variants.cjs.map +1 -1
- package/dist/ui/components/ui/button-variants.d.cts +13 -2
- package/dist/ui/components/ui/button-variants.d.ts +13 -2
- package/dist/ui/components/ui/button-variants.js.map +1 -1
- package/dist/ui/components/ui/card.cjs.map +1 -1
- package/dist/ui/components/ui/card.d.cts +106 -2
- package/dist/ui/components/ui/card.d.ts +106 -2
- package/dist/ui/components/ui/card.js.map +1 -1
- package/dist/ui/components/ui/checkbox-group.cjs.map +1 -1
- package/dist/ui/components/ui/checkbox-group.d.cts +13 -1
- package/dist/ui/components/ui/checkbox-group.d.ts +13 -1
- package/dist/ui/components/ui/checkbox-group.js.map +1 -1
- package/dist/ui/components/ui/checkbox.cjs.map +1 -1
- package/dist/ui/components/ui/checkbox.d.cts +17 -6
- package/dist/ui/components/ui/checkbox.d.ts +17 -6
- package/dist/ui/components/ui/checkbox.js.map +1 -1
- package/dist/ui/components/ui/collapsible.cjs.map +1 -1
- package/dist/ui/components/ui/collapsible.d.cts +39 -3
- package/dist/ui/components/ui/collapsible.d.ts +39 -3
- package/dist/ui/components/ui/collapsible.js.map +1 -1
- package/dist/ui/components/ui/combobox-components.cjs.map +1 -1
- package/dist/ui/components/ui/combobox-components.d.cts +209 -14
- package/dist/ui/components/ui/combobox-components.d.ts +209 -14
- package/dist/ui/components/ui/combobox-components.js.map +1 -1
- package/dist/ui/components/ui/combobox-hooks.cjs.map +1 -1
- package/dist/ui/components/ui/combobox-hooks.d.cts +13 -1
- package/dist/ui/components/ui/combobox-hooks.d.ts +13 -1
- package/dist/ui/components/ui/combobox-hooks.js.map +1 -1
- package/dist/ui/components/ui/command.cjs.map +1 -1
- package/dist/ui/components/ui/command.d.cts +132 -9
- package/dist/ui/components/ui/command.d.ts +132 -9
- package/dist/ui/components/ui/command.js.map +1 -1
- package/dist/ui/components/ui/context-menu.cjs.map +1 -1
- package/dist/ui/components/ui/context-menu.d.cts +233 -2
- package/dist/ui/components/ui/context-menu.d.ts +233 -2
- package/dist/ui/components/ui/context-menu.js.map +1 -1
- package/dist/ui/components/ui/dialog.cjs.map +1 -1
- package/dist/ui/components/ui/dialog.d.cts +157 -5
- package/dist/ui/components/ui/dialog.d.ts +157 -5
- package/dist/ui/components/ui/dialog.js.map +1 -1
- package/dist/ui/components/ui/drawer.cjs.map +1 -1
- package/dist/ui/components/ui/drawer.d.cts +130 -10
- package/dist/ui/components/ui/drawer.d.ts +130 -10
- package/dist/ui/components/ui/drawer.js.map +1 -1
- package/dist/ui/components/ui/dropdown-menu.cjs.map +1 -1
- package/dist/ui/components/ui/dropdown-menu.d.cts +225 -6
- package/dist/ui/components/ui/dropdown-menu.d.ts +225 -6
- package/dist/ui/components/ui/dropdown-menu.js.map +1 -1
- package/dist/ui/components/ui/empty.cjs.map +1 -1
- package/dist/ui/components/ui/empty.d.cts +78 -6
- package/dist/ui/components/ui/empty.d.ts +78 -6
- package/dist/ui/components/ui/empty.js.map +1 -1
- package/dist/ui/components/ui/field.cjs.map +1 -1
- package/dist/ui/components/ui/field.d.cts +180 -6
- package/dist/ui/components/ui/field.d.ts +180 -6
- package/dist/ui/components/ui/field.js.map +1 -1
- package/dist/ui/components/ui/file-icon.cjs.map +1 -1
- package/dist/ui/components/ui/file-icon.d.cts +32 -4
- package/dist/ui/components/ui/file-icon.d.ts +32 -4
- package/dist/ui/components/ui/file-icon.js.map +1 -1
- package/dist/ui/components/ui/hover-card.cjs.map +1 -1
- package/dist/ui/components/ui/hover-card.d.cts +39 -3
- package/dist/ui/components/ui/hover-card.d.ts +39 -3
- package/dist/ui/components/ui/hover-card.js.map +1 -1
- package/dist/ui/components/ui/input-group.cjs.map +1 -1
- package/dist/ui/components/ui/input-group.d.cts +84 -6
- package/dist/ui/components/ui/input-group.d.ts +84 -6
- package/dist/ui/components/ui/input-group.js.map +1 -1
- package/dist/ui/components/ui/input-otp.cjs.map +1 -1
- package/dist/ui/components/ui/input-otp.d.cts +58 -4
- package/dist/ui/components/ui/input-otp.d.ts +58 -4
- package/dist/ui/components/ui/input-otp.js.map +1 -1
- package/dist/ui/components/ui/input.cjs.map +1 -1
- package/dist/ui/components/ui/input.d.cts +18 -10
- package/dist/ui/components/ui/input.d.ts +18 -10
- package/dist/ui/components/ui/input.js.map +1 -1
- package/dist/ui/components/ui/item.cjs.map +1 -1
- package/dist/ui/components/ui/item.d.cts +130 -10
- package/dist/ui/components/ui/item.d.ts +130 -10
- package/dist/ui/components/ui/item.js.map +1 -1
- package/dist/ui/components/ui/kbd.cjs.map +1 -1
- package/dist/ui/components/ui/kbd.d.cts +26 -2
- package/dist/ui/components/ui/kbd.d.ts +26 -2
- package/dist/ui/components/ui/kbd.js.map +1 -1
- package/dist/ui/components/ui/label.cjs.map +1 -1
- package/dist/ui/components/ui/label.d.cts +15 -0
- package/dist/ui/components/ui/label.d.ts +15 -0
- package/dist/ui/components/ui/label.js.map +1 -1
- package/dist/ui/components/ui/layout.cjs +1 -1
- package/dist/ui/components/ui/layout.cjs.map +1 -1
- package/dist/ui/components/ui/layout.d.cts +45 -11
- package/dist/ui/components/ui/layout.d.ts +45 -11
- package/dist/ui/components/ui/layout.js +22 -20
- package/dist/ui/components/ui/layout.js.map +1 -1
- package/dist/ui/components/ui/menubar.cjs.map +1 -1
- package/dist/ui/components/ui/menubar.d.cts +220 -16
- package/dist/ui/components/ui/menubar.d.ts +220 -16
- package/dist/ui/components/ui/menubar.js.map +1 -1
- package/dist/ui/components/ui/meter.cjs.map +1 -1
- package/dist/ui/components/ui/meter.d.cts +52 -4
- package/dist/ui/components/ui/meter.d.ts +52 -4
- package/dist/ui/components/ui/meter.js.map +1 -1
- package/dist/ui/components/ui/mobile-form-variants.cjs.map +1 -1
- package/dist/ui/components/ui/mobile-form-variants.d.cts +30 -0
- package/dist/ui/components/ui/mobile-form-variants.d.ts +30 -0
- package/dist/ui/components/ui/mobile-form-variants.js.map +1 -1
- package/dist/ui/components/ui/mobile-form.cjs.map +1 -1
- package/dist/ui/components/ui/mobile-form.d.cts +186 -9
- package/dist/ui/components/ui/mobile-form.d.ts +186 -9
- package/dist/ui/components/ui/mobile-form.js.map +1 -1
- package/dist/ui/components/ui/navigation-menu-components.cjs.map +1 -1
- package/dist/ui/components/ui/navigation-menu-components.d.cts +104 -8
- package/dist/ui/components/ui/navigation-menu-components.d.ts +104 -8
- package/dist/ui/components/ui/navigation-menu-components.js.map +1 -1
- package/dist/ui/components/ui/navigation-menu-variants.cjs.map +1 -1
- package/dist/ui/components/ui/navigation-menu-variants.d.cts +15 -0
- package/dist/ui/components/ui/navigation-menu-variants.d.ts +15 -0
- package/dist/ui/components/ui/navigation-menu-variants.js.map +1 -1
- package/dist/ui/components/ui/number-field.cjs.map +1 -1
- package/dist/ui/components/ui/number-field.d.cts +78 -6
- package/dist/ui/components/ui/number-field.d.ts +78 -6
- package/dist/ui/components/ui/number-field.js.map +1 -1
- package/dist/ui/components/ui/pagination.cjs.map +1 -1
- package/dist/ui/components/ui/pagination.d.cts +99 -7
- package/dist/ui/components/ui/pagination.d.ts +99 -7
- package/dist/ui/components/ui/pagination.js.map +1 -1
- package/dist/ui/components/ui/password-input.cjs.map +1 -1
- package/dist/ui/components/ui/password-input.d.cts +10 -7
- package/dist/ui/components/ui/password-input.d.ts +10 -7
- package/dist/ui/components/ui/password-input.js.map +1 -1
- package/dist/ui/components/ui/popover.cjs.map +1 -1
- package/dist/ui/components/ui/popover.d.cts +86 -2
- package/dist/ui/components/ui/popover.d.ts +86 -2
- package/dist/ui/components/ui/popover.js.map +1 -1
- package/dist/ui/components/ui/progress.cjs.map +1 -1
- package/dist/ui/components/ui/progress.d.cts +72 -2
- package/dist/ui/components/ui/progress.d.ts +72 -2
- package/dist/ui/components/ui/progress.js.map +1 -1
- package/dist/ui/components/ui/radio-card.cjs.map +1 -1
- package/dist/ui/components/ui/radio-card.d.cts +32 -4
- package/dist/ui/components/ui/radio-card.d.ts +32 -4
- package/dist/ui/components/ui/radio-card.js.map +1 -1
- package/dist/ui/components/ui/radio-group.cjs.map +1 -1
- package/dist/ui/components/ui/radio-group.d.cts +28 -2
- package/dist/ui/components/ui/radio-group.d.ts +28 -2
- package/dist/ui/components/ui/radio-group.js.map +1 -1
- package/dist/ui/components/ui/resizable.cjs.map +1 -1
- package/dist/ui/components/ui/resizable.d.cts +42 -3
- package/dist/ui/components/ui/resizable.d.ts +42 -3
- package/dist/ui/components/ui/resizable.js.map +1 -1
- package/dist/ui/components/ui/responsive-list.cjs.map +1 -1
- package/dist/ui/components/ui/responsive-list.d.cts +176 -13
- package/dist/ui/components/ui/responsive-list.d.ts +176 -13
- package/dist/ui/components/ui/responsive-list.js.map +1 -1
- package/dist/ui/components/ui/scroll-area.cjs.map +1 -1
- package/dist/ui/components/ui/scroll-area.d.cts +28 -1
- package/dist/ui/components/ui/scroll-area.d.ts +28 -1
- package/dist/ui/components/ui/scroll-area.js.map +1 -1
- package/dist/ui/components/ui/searchable-select-input.cjs.map +1 -1
- package/dist/ui/components/ui/searchable-select-input.d.cts +199 -49
- package/dist/ui/components/ui/searchable-select-input.d.ts +199 -49
- package/dist/ui/components/ui/searchable-select-input.js.map +1 -1
- package/dist/ui/components/ui/select.cjs.map +1 -1
- package/dist/ui/components/ui/select.d.cts +205 -40
- package/dist/ui/components/ui/select.d.ts +205 -40
- package/dist/ui/components/ui/select.js.map +1 -1
- package/dist/ui/components/ui/separator.cjs.map +1 -1
- package/dist/ui/components/ui/separator.d.cts +13 -2
- package/dist/ui/components/ui/separator.d.ts +13 -2
- package/dist/ui/components/ui/separator.js.map +1 -1
- package/dist/ui/components/ui/sheet.cjs.map +1 -1
- package/dist/ui/components/ui/sheet.d.cts +128 -3
- package/dist/ui/components/ui/sheet.d.ts +128 -3
- package/dist/ui/components/ui/sheet.js.map +1 -1
- package/dist/ui/components/ui/skeleton.cjs.map +1 -1
- package/dist/ui/components/ui/skeleton.d.cts +13 -1
- package/dist/ui/components/ui/skeleton.d.ts +13 -1
- package/dist/ui/components/ui/skeleton.js.map +1 -1
- package/dist/ui/components/ui/slider.cjs.map +1 -1
- package/dist/ui/components/ui/slider.d.cts +13 -7
- package/dist/ui/components/ui/slider.d.ts +13 -7
- package/dist/ui/components/ui/slider.js.map +1 -1
- package/dist/ui/components/ui/spinner.cjs.map +1 -1
- package/dist/ui/components/ui/spinner.d.cts +13 -1
- package/dist/ui/components/ui/spinner.d.ts +13 -1
- package/dist/ui/components/ui/spinner.js.map +1 -1
- package/dist/ui/components/ui/switch.cjs.map +1 -1
- package/dist/ui/components/ui/switch.d.cts +26 -0
- package/dist/ui/components/ui/switch.d.ts +26 -0
- package/dist/ui/components/ui/switch.js.map +1 -1
- package/dist/ui/components/ui/table.cjs.map +1 -1
- package/dist/ui/components/ui/table.d.cts +118 -2
- package/dist/ui/components/ui/table.d.ts +118 -2
- package/dist/ui/components/ui/table.js.map +1 -1
- package/dist/ui/components/ui/tabs-components.cjs.map +1 -1
- package/dist/ui/components/ui/tabs-components.d.cts +52 -5
- package/dist/ui/components/ui/tabs-components.d.ts +52 -5
- package/dist/ui/components/ui/tabs-components.js.map +1 -1
- package/dist/ui/components/ui/tabs-variants.cjs.map +1 -1
- package/dist/ui/components/ui/tabs-variants.d.cts +15 -0
- package/dist/ui/components/ui/tabs-variants.d.ts +15 -0
- package/dist/ui/components/ui/tabs-variants.js.map +1 -1
- package/dist/ui/components/ui/textarea.cjs.map +1 -1
- package/dist/ui/components/ui/textarea.d.cts +23 -0
- package/dist/ui/components/ui/textarea.d.ts +23 -0
- package/dist/ui/components/ui/textarea.js.map +1 -1
- package/dist/ui/components/ui/toast.cjs.map +1 -1
- package/dist/ui/components/ui/toast.d.cts +136 -0
- package/dist/ui/components/ui/toast.d.ts +136 -0
- package/dist/ui/components/ui/toast.js.map +1 -1
- package/dist/ui/components/ui/toaster.cjs.map +1 -1
- package/dist/ui/components/ui/toaster.d.cts +12 -3
- package/dist/ui/components/ui/toaster.d.ts +12 -3
- package/dist/ui/components/ui/toaster.js.map +1 -1
- package/dist/ui/components/ui/toggle-components.cjs.map +1 -1
- package/dist/ui/components/ui/toggle-components.d.cts +15 -0
- package/dist/ui/components/ui/toggle-components.d.ts +15 -0
- package/dist/ui/components/ui/toggle-components.js.map +1 -1
- package/dist/ui/components/ui/toggle-group.cjs.map +1 -1
- package/dist/ui/components/ui/toggle-group.d.cts +33 -0
- package/dist/ui/components/ui/toggle-group.d.ts +33 -0
- package/dist/ui/components/ui/toggle-group.js.map +1 -1
- package/dist/ui/components/ui/toggle-variants.cjs.map +1 -1
- package/dist/ui/components/ui/toggle-variants.d.cts +15 -0
- package/dist/ui/components/ui/toggle-variants.d.ts +15 -0
- package/dist/ui/components/ui/toggle-variants.js.map +1 -1
- package/dist/ui/components/ui/toolbar.cjs.map +1 -1
- package/dist/ui/components/ui/toolbar.d.cts +94 -7
- package/dist/ui/components/ui/toolbar.d.ts +94 -7
- package/dist/ui/components/ui/toolbar.js.map +1 -1
- package/dist/ui/components/ui/tooltip.cjs.map +1 -1
- package/dist/ui/components/ui/tooltip.d.cts +54 -3
- package/dist/ui/components/ui/tooltip.d.ts +54 -3
- package/dist/ui/components/ui/tooltip.js.map +1 -1
- package/dist/ui/lib/hooks/use-gps.cjs.map +1 -1
- package/dist/ui/lib/hooks/use-gps.d.cts +29 -4
- package/dist/ui/lib/hooks/use-gps.d.ts +29 -4
- package/dist/ui/lib/hooks/use-gps.js.map +1 -1
- package/dist/ui/lib/hooks/use-is-client.cjs.map +1 -1
- package/dist/ui/lib/hooks/use-is-client.d.cts +11 -2
- package/dist/ui/lib/hooks/use-is-client.d.ts +11 -2
- package/dist/ui/lib/hooks/use-is-client.js.map +1 -1
- package/dist/ui/lib/hooks/use-keyboard-shortcut.cjs.map +1 -1
- package/dist/ui/lib/hooks/use-keyboard-shortcut.d.cts +48 -18
- package/dist/ui/lib/hooks/use-keyboard-shortcut.d.ts +48 -18
- package/dist/ui/lib/hooks/use-keyboard-shortcut.js.map +1 -1
- package/dist/ui/lib/hooks/use-mobile.cjs.map +1 -1
- package/dist/ui/lib/hooks/use-mobile.d.cts +11 -3
- package/dist/ui/lib/hooks/use-mobile.d.ts +11 -3
- package/dist/ui/lib/hooks/use-mobile.js.map +1 -1
- package/dist/ui/lib/hooks/use-toast.cjs.map +1 -1
- package/dist/ui/lib/hooks/use-toast.d.cts +184 -15
- package/dist/ui/lib/hooks/use-toast.d.ts +184 -15
- package/dist/ui/lib/hooks/use-toast.js.map +1 -1
- package/dist/ui/lib/ime-utils.cjs.map +1 -1
- package/dist/ui/lib/ime-utils.d.cts +40 -13
- package/dist/ui/lib/ime-utils.d.ts +40 -13
- package/dist/ui/lib/ime-utils.js.map +1 -1
- package/dist/ui/lib/utils.cjs.map +1 -1
- package/dist/ui/lib/utils.d.cts +9 -6
- package/dist/ui/lib/utils.d.ts +9 -6
- package/dist/ui/lib/utils.js.map +1 -1
- package/docs/ai.md +34 -1
- package/docs/exports.md +5 -1
- package/docs/index.md +89 -16
- package/docs/migration.md +268 -0
- package/docs/request-form.md +4 -1
- package/docs/tools.md +4 -1
- package/docs/ui.md +4 -1
- package/llms-full.txt +499 -36
- package/llms.txt +4 -0
- package/package.json +35 -5
|
@@ -1,58 +1,129 @@
|
|
|
1
1
|
import { ApplyProposalPayload, CandidateValidationResult, FieldDecision, FieldKey, ProposalReviewStatus, RecordProposal, ReviewDecisions } from '@alneas/appkit-core/ai';
|
|
2
|
-
/**
|
|
2
|
+
/**
|
|
3
|
+
* Single-record review presentation and host apply inputs.
|
|
4
|
+
*
|
|
5
|
+
* @typeParam TRecord - Current record shape; defaults to a string-keyed record.
|
|
6
|
+
*
|
|
7
|
+
* @remarks These shared inputs are consumed by useProposalReview; persistence is host-owned.
|
|
8
|
+
*
|
|
9
|
+
* @see useProposalReview for a complete input example.
|
|
10
|
+
*/
|
|
3
11
|
export interface ProposalReviewCardProps<TRecord extends Record<string, any> = Record<string, any>> {
|
|
4
|
-
/**
|
|
12
|
+
/**
|
|
13
|
+
* Immutable validated change proposal; changing id resets the review decisions.
|
|
14
|
+
*/
|
|
5
15
|
proposal: RecordProposal<TRecord>;
|
|
6
|
-
/**
|
|
16
|
+
/**
|
|
17
|
+
* Latest host record used to compose accepted changes and detect conflicts.
|
|
18
|
+
*/
|
|
7
19
|
currentRecord: TRecord;
|
|
8
|
-
/**
|
|
20
|
+
/**
|
|
21
|
+
* Current host version compared with the proposal base version.
|
|
22
|
+
*/
|
|
9
23
|
currentVersion: string | number;
|
|
10
24
|
/**
|
|
11
|
-
*
|
|
12
|
-
* 候補レコード(現在値+採用分)全体を検証します。
|
|
25
|
+
* Optional synchronous validation of the complete composed candidate; thrown errors propagate from render.
|
|
13
26
|
*/
|
|
14
27
|
validateCandidate?: (candidate: TRecord) => CandidateValidationResult;
|
|
15
28
|
/**
|
|
16
|
-
*
|
|
29
|
+
* Optional host apply callback receiving a payload; await persistence before resolving. Rejection becomes saveError.
|
|
17
30
|
*/
|
|
18
31
|
onApply?: (payload: ApplyProposalPayload<TRecord>) => void | Promise<void>;
|
|
19
|
-
/**
|
|
32
|
+
/**
|
|
33
|
+
* Optional host dismissal callback; the headless hook does not call this member.
|
|
34
|
+
*/
|
|
20
35
|
onDismiss?: () => void;
|
|
21
|
-
/**
|
|
36
|
+
/**
|
|
37
|
+
* Optional presentation label; not used by the headless hook.
|
|
38
|
+
*/
|
|
22
39
|
applyLabel?: string;
|
|
23
|
-
/**
|
|
40
|
+
/**
|
|
41
|
+
* Optional presentation title; not used by the headless hook.
|
|
42
|
+
*/
|
|
24
43
|
title?: string;
|
|
25
|
-
/**
|
|
44
|
+
/**
|
|
45
|
+
* Optional presentation classes; not used by the headless hook.
|
|
46
|
+
*/
|
|
26
47
|
className?: string;
|
|
27
|
-
/**
|
|
48
|
+
/**
|
|
49
|
+
* Optional presentation test marker; not used by the headless hook.
|
|
50
|
+
*/
|
|
28
51
|
testId?: string;
|
|
29
52
|
}
|
|
30
|
-
/**
|
|
53
|
+
/**
|
|
54
|
+
* Derived review state and explicit field-decision/apply controls.
|
|
55
|
+
*
|
|
56
|
+
* @typeParam TRecord - Record shape retained by candidate composition; defaults to a string-keyed record.
|
|
57
|
+
*
|
|
58
|
+
* @see useProposalReview for usage.
|
|
59
|
+
*/
|
|
31
60
|
export interface UseProposalReviewReturn<TRecord extends Record<string, any> = Record<string, any>> {
|
|
32
|
-
/**
|
|
61
|
+
/**
|
|
62
|
+
* Per-field pending/accepted/rejected choices; missing entries behave as pending.
|
|
63
|
+
*/
|
|
33
64
|
decisions: ReviewDecisions<TRecord>;
|
|
34
|
-
/**
|
|
65
|
+
/**
|
|
66
|
+
* Set one field choice and clear the save error.
|
|
67
|
+
*
|
|
68
|
+
* @param field - Record key to decide.
|
|
69
|
+
*
|
|
70
|
+
* @param decision - Pending, accepted or rejected choice.
|
|
71
|
+
*
|
|
72
|
+
* @returns No value after scheduling state.
|
|
73
|
+
*/
|
|
35
74
|
setDecision: (field: FieldKey<TRecord>, decision: FieldDecision) => void;
|
|
36
|
-
/**
|
|
75
|
+
/**
|
|
76
|
+
* Mark every proposed change accepted.
|
|
77
|
+
*
|
|
78
|
+
* @returns No value after scheduling choices and clearing the save error.
|
|
79
|
+
*/
|
|
37
80
|
acceptAll: () => void;
|
|
38
|
-
/**
|
|
81
|
+
/**
|
|
82
|
+
* Mark every proposed change rejected.
|
|
83
|
+
*
|
|
84
|
+
* @returns No value after scheduling choices and clearing the save error.
|
|
85
|
+
*/
|
|
39
86
|
rejectAll: () => void;
|
|
40
|
-
/**
|
|
87
|
+
/**
|
|
88
|
+
* Remove explicit choices so every change returns to pending.
|
|
89
|
+
*
|
|
90
|
+
* @returns No value after scheduling choices and clearing the save error.
|
|
91
|
+
*/
|
|
41
92
|
resetDecisions: () => void;
|
|
42
|
-
/**
|
|
93
|
+
/**
|
|
94
|
+
* Current record with accepted proposal changes composed into a new candidate.
|
|
95
|
+
*/
|
|
43
96
|
candidateRecord: TRecord;
|
|
44
|
-
/**
|
|
97
|
+
/**
|
|
98
|
+
* Derived aggregate decision status.
|
|
99
|
+
*/
|
|
45
100
|
reviewStatus: ProposalReviewStatus;
|
|
46
|
-
/**
|
|
101
|
+
/**
|
|
102
|
+
* Current-value/version compatibility check for the selected changes.
|
|
103
|
+
*/
|
|
47
104
|
consistency: ReturnType<typeof import('@alneas/appkit-core/ai/proposal').verifyCurrentState<TRecord>>;
|
|
48
|
-
/**
|
|
105
|
+
/**
|
|
106
|
+
* Optional complete-candidate validation result; undefined when no validator is supplied.
|
|
107
|
+
*/
|
|
49
108
|
candidateValidation?: CandidateValidationResult;
|
|
50
|
-
/**
|
|
109
|
+
/**
|
|
110
|
+
* Whether decisions/consistency/validation permit application and onApply exists.
|
|
111
|
+
*/
|
|
51
112
|
canApply: boolean;
|
|
52
|
-
/**
|
|
113
|
+
/**
|
|
114
|
+
* Whether this displayed review is awaiting host apply completion.
|
|
115
|
+
*/
|
|
53
116
|
isSubmitting: boolean;
|
|
54
|
-
/**
|
|
117
|
+
/**
|
|
118
|
+
* Last current-generation apply failure message, or null.
|
|
119
|
+
*/
|
|
55
120
|
saveError: string | null;
|
|
56
|
-
/**
|
|
121
|
+
/**
|
|
122
|
+
* Apply a prepared payload through the host callback at most once concurrently per displayed generation.
|
|
123
|
+
*
|
|
124
|
+
* @returns True after current-generation success; false when blocked, failed or completed for an older generation.
|
|
125
|
+
*
|
|
126
|
+
* @remarks Errors from payload/application are caught as saveError; the host owns durable side effects and rollback.
|
|
127
|
+
*/
|
|
57
128
|
handleApply: () => Promise<boolean>;
|
|
58
129
|
}
|
|
@@ -1,58 +1,129 @@
|
|
|
1
1
|
import { ApplyProposalPayload, CandidateValidationResult, FieldDecision, FieldKey, ProposalReviewStatus, RecordProposal, ReviewDecisions } from '@alneas/appkit-core/ai';
|
|
2
|
-
/**
|
|
2
|
+
/**
|
|
3
|
+
* Single-record review presentation and host apply inputs.
|
|
4
|
+
*
|
|
5
|
+
* @typeParam TRecord - Current record shape; defaults to a string-keyed record.
|
|
6
|
+
*
|
|
7
|
+
* @remarks These shared inputs are consumed by useProposalReview; persistence is host-owned.
|
|
8
|
+
*
|
|
9
|
+
* @see useProposalReview for a complete input example.
|
|
10
|
+
*/
|
|
3
11
|
export interface ProposalReviewCardProps<TRecord extends Record<string, any> = Record<string, any>> {
|
|
4
|
-
/**
|
|
12
|
+
/**
|
|
13
|
+
* Immutable validated change proposal; changing id resets the review decisions.
|
|
14
|
+
*/
|
|
5
15
|
proposal: RecordProposal<TRecord>;
|
|
6
|
-
/**
|
|
16
|
+
/**
|
|
17
|
+
* Latest host record used to compose accepted changes and detect conflicts.
|
|
18
|
+
*/
|
|
7
19
|
currentRecord: TRecord;
|
|
8
|
-
/**
|
|
20
|
+
/**
|
|
21
|
+
* Current host version compared with the proposal base version.
|
|
22
|
+
*/
|
|
9
23
|
currentVersion: string | number;
|
|
10
24
|
/**
|
|
11
|
-
*
|
|
12
|
-
* 候補レコード(現在値+採用分)全体を検証します。
|
|
25
|
+
* Optional synchronous validation of the complete composed candidate; thrown errors propagate from render.
|
|
13
26
|
*/
|
|
14
27
|
validateCandidate?: (candidate: TRecord) => CandidateValidationResult;
|
|
15
28
|
/**
|
|
16
|
-
*
|
|
29
|
+
* Optional host apply callback receiving a payload; await persistence before resolving. Rejection becomes saveError.
|
|
17
30
|
*/
|
|
18
31
|
onApply?: (payload: ApplyProposalPayload<TRecord>) => void | Promise<void>;
|
|
19
|
-
/**
|
|
32
|
+
/**
|
|
33
|
+
* Optional host dismissal callback; the headless hook does not call this member.
|
|
34
|
+
*/
|
|
20
35
|
onDismiss?: () => void;
|
|
21
|
-
/**
|
|
36
|
+
/**
|
|
37
|
+
* Optional presentation label; not used by the headless hook.
|
|
38
|
+
*/
|
|
22
39
|
applyLabel?: string;
|
|
23
|
-
/**
|
|
40
|
+
/**
|
|
41
|
+
* Optional presentation title; not used by the headless hook.
|
|
42
|
+
*/
|
|
24
43
|
title?: string;
|
|
25
|
-
/**
|
|
44
|
+
/**
|
|
45
|
+
* Optional presentation classes; not used by the headless hook.
|
|
46
|
+
*/
|
|
26
47
|
className?: string;
|
|
27
|
-
/**
|
|
48
|
+
/**
|
|
49
|
+
* Optional presentation test marker; not used by the headless hook.
|
|
50
|
+
*/
|
|
28
51
|
testId?: string;
|
|
29
52
|
}
|
|
30
|
-
/**
|
|
53
|
+
/**
|
|
54
|
+
* Derived review state and explicit field-decision/apply controls.
|
|
55
|
+
*
|
|
56
|
+
* @typeParam TRecord - Record shape retained by candidate composition; defaults to a string-keyed record.
|
|
57
|
+
*
|
|
58
|
+
* @see useProposalReview for usage.
|
|
59
|
+
*/
|
|
31
60
|
export interface UseProposalReviewReturn<TRecord extends Record<string, any> = Record<string, any>> {
|
|
32
|
-
/**
|
|
61
|
+
/**
|
|
62
|
+
* Per-field pending/accepted/rejected choices; missing entries behave as pending.
|
|
63
|
+
*/
|
|
33
64
|
decisions: ReviewDecisions<TRecord>;
|
|
34
|
-
/**
|
|
65
|
+
/**
|
|
66
|
+
* Set one field choice and clear the save error.
|
|
67
|
+
*
|
|
68
|
+
* @param field - Record key to decide.
|
|
69
|
+
*
|
|
70
|
+
* @param decision - Pending, accepted or rejected choice.
|
|
71
|
+
*
|
|
72
|
+
* @returns No value after scheduling state.
|
|
73
|
+
*/
|
|
35
74
|
setDecision: (field: FieldKey<TRecord>, decision: FieldDecision) => void;
|
|
36
|
-
/**
|
|
75
|
+
/**
|
|
76
|
+
* Mark every proposed change accepted.
|
|
77
|
+
*
|
|
78
|
+
* @returns No value after scheduling choices and clearing the save error.
|
|
79
|
+
*/
|
|
37
80
|
acceptAll: () => void;
|
|
38
|
-
/**
|
|
81
|
+
/**
|
|
82
|
+
* Mark every proposed change rejected.
|
|
83
|
+
*
|
|
84
|
+
* @returns No value after scheduling choices and clearing the save error.
|
|
85
|
+
*/
|
|
39
86
|
rejectAll: () => void;
|
|
40
|
-
/**
|
|
87
|
+
/**
|
|
88
|
+
* Remove explicit choices so every change returns to pending.
|
|
89
|
+
*
|
|
90
|
+
* @returns No value after scheduling choices and clearing the save error.
|
|
91
|
+
*/
|
|
41
92
|
resetDecisions: () => void;
|
|
42
|
-
/**
|
|
93
|
+
/**
|
|
94
|
+
* Current record with accepted proposal changes composed into a new candidate.
|
|
95
|
+
*/
|
|
43
96
|
candidateRecord: TRecord;
|
|
44
|
-
/**
|
|
97
|
+
/**
|
|
98
|
+
* Derived aggregate decision status.
|
|
99
|
+
*/
|
|
45
100
|
reviewStatus: ProposalReviewStatus;
|
|
46
|
-
/**
|
|
101
|
+
/**
|
|
102
|
+
* Current-value/version compatibility check for the selected changes.
|
|
103
|
+
*/
|
|
47
104
|
consistency: ReturnType<typeof import('@alneas/appkit-core/ai/proposal').verifyCurrentState<TRecord>>;
|
|
48
|
-
/**
|
|
105
|
+
/**
|
|
106
|
+
* Optional complete-candidate validation result; undefined when no validator is supplied.
|
|
107
|
+
*/
|
|
49
108
|
candidateValidation?: CandidateValidationResult;
|
|
50
|
-
/**
|
|
109
|
+
/**
|
|
110
|
+
* Whether decisions/consistency/validation permit application and onApply exists.
|
|
111
|
+
*/
|
|
51
112
|
canApply: boolean;
|
|
52
|
-
/**
|
|
113
|
+
/**
|
|
114
|
+
* Whether this displayed review is awaiting host apply completion.
|
|
115
|
+
*/
|
|
53
116
|
isSubmitting: boolean;
|
|
54
|
-
/**
|
|
117
|
+
/**
|
|
118
|
+
* Last current-generation apply failure message, or null.
|
|
119
|
+
*/
|
|
55
120
|
saveError: string | null;
|
|
56
|
-
/**
|
|
121
|
+
/**
|
|
122
|
+
* Apply a prepared payload through the host callback at most once concurrently per displayed generation.
|
|
123
|
+
*
|
|
124
|
+
* @returns True after current-generation success; false when blocked, failed or completed for an older generation.
|
|
125
|
+
*
|
|
126
|
+
* @remarks Errors from payload/application are caught as saveError; the host owns durable side effects and rollback.
|
|
127
|
+
*/
|
|
57
128
|
handleApply: () => Promise<boolean>;
|
|
58
129
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-proposal-batch-review.cjs","names":["createExecutionSession","useState","useRef","useSyncExternalStore","prepareProposalBatch","react","_alneas_appkit_core_ai","initial","useProposalBatchReview","key","options","item","stored","setStored","state","session","live","latest","current","history","busy","record","update","change","entries","items","applied","preparation","editable","id","next","value","selected","field","decision","planned","outcome","context","completed","payload","checked","fraction","progress"],"sources":["../../../src/ai/proposal/use-proposal-batch-review.ts"],"sourcesContent":["import { useLayoutEffect, useRef, useState, useSyncExternalStore } from 'react';\nimport { createExecutionSession, type ExecutionContext, type ExecutionRecord, type ExecutionSession } from \"@alneas/appkit-core/ai\";\nimport {\n prepareProposalBatch,\n type ApplyProposalPayload,\n type FieldDecision,\n type FieldKey,\n type PreparedProposalBatch,\n type ProposalBatchEntry,\n type ProposalBatchItem,\n type ProposalBatchValidator,\n type ReviewDecisions,\n} from \"@alneas/appkit-core/ai\";\n\n/** Multi-record review. Each item must have a unique validated immutable proposal. */\nexport interface UseProposalBatchReviewOptions<TRecord extends Record<string, any> = Record<string, any>> {\n /** Change for a new review session, including an intentional replay of the same proposals. */\n batchId: string;\n items: readonly ProposalBatchItem<TRecord>[];\n validateCandidate?: ProposalBatchValidator<TRecord>;\n /** Called sequentially. Resolve only when this row is applied; reject to stop the batch. */\n onApply?: (payload: ApplyProposalPayload<TRecord>, context: ExecutionContext) => void | Promise<void>;\n}\n\n/** Headless controller shared by batch lists and custom application layouts. */\nexport interface UseProposalBatchReviewReturn<TRecord extends Record<string, any> = Record<string, any>> {\n selectedIds: ReadonlySet<string>;\n appliedIds: ReadonlySet<string>;\n decisions: ReadonlyMap<string, ReviewDecisions<TRecord>>;\n preparation: PreparedProposalBatch<TRecord>;\n canApply: boolean;\n isSubmitting: boolean;\n activeProposalId: string | null;\n error: string | null;\n history: readonly ExecutionRecord[];\n setSelected(id: string, selected: boolean): void;\n selectAll(selected: boolean): void;\n setDecision(id: string, field: FieldKey<TRecord>, decision: FieldDecision): void;\n decideAll(id: string, decision: FieldDecision): void;\n apply(): Promise<boolean>;\n cancel(): void;\n clearHistory(): void;\n}\n\ninterface ReviewState<TRecord extends Record<string, any>> {\n key: string;\n session: ExecutionSession;\n selected: ReadonlySet<string>;\n applied: ReadonlySet<string>;\n decisions: ReadonlyMap<string, ReviewDecisions<TRecord>>;\n running: boolean;\n active: string | null;\n error: string | null;\n}\n\nfunction initial<TRecord extends Record<string, any>>(key: string): ReviewState<TRecord> {\n return {\n key,\n session: createExecutionSession(),\n selected: new Set(),\n applied: new Set(),\n decisions: new Map(),\n running: false,\n active: null,\n error: null,\n };\n}\n\n/**\n * Reviews multiple records without implicit field acceptance. Preflights the entire\n * selection, then rechecks each latest committed record immediately before applying it.\n * Stops on first failure or cancellation; confirmed successes are never retried within\n * this session.\n */\nexport function useProposalBatchReview<TRecord extends Record<string, any> = Record<string, any>>(\n options: UseProposalBatchReviewOptions<TRecord>\n): UseProposalBatchReviewReturn<TRecord> {\n const key = JSON.stringify([options.batchId, options.items.map(item => JSON.stringify(item.proposal)).sort()]);\n const [stored, setStored] = useState(() => initial<TRecord>(key));\n let state = stored;\n if (state.key !== key) {\n state = initial<TRecord>(key);\n setStored(state);\n }\n const session = state.session;\n const live = useRef<{ session: ExecutionSession; applied: Set<string> } | null>(null);\n const latest = useRef(options);\n useLayoutEffect(() => {\n latest.current = options;\n });\n useLayoutEffect(() => {\n const current = { session, applied: new Set<string>() };\n live.current = current;\n return () => {\n session.cancel();\n if (live.current === current) live.current = null;\n };\n }, [session]);\n\n const history = useSyncExternalStore(session.subscribe, session.getSnapshot, session.getSnapshot);\n const busy = () => session.getSnapshot().some(record => record.status === 'running' || record.status === 'cancelling');\n const update = (change: (current: ReviewState<TRecord>) => ReviewState<TRecord>) => {\n setStored(current => (current.session === session ? change(current) : current));\n };\n\n const entries = (\n items: readonly ProposalBatchItem<TRecord>[],\n applied: ReadonlySet<string>\n ): ProposalBatchEntry<TRecord>[] =>\n items.map(item => ({\n ...item,\n decisions: state.decisions.get(item.proposal.id) ?? ({} as ReviewDecisions<TRecord>),\n selected: state.selected.has(item.proposal.id) && !applied.has(item.proposal.id),\n }));\n\n const preparation = prepareProposalBatch(entries(options.items, state.applied), options.validateCandidate);\n const editable = (id: string) =>\n live.current?.session === session && !busy() && !live.current.applied.has(id) && options.items.some(item => item.proposal.id === id);\n\n const apply = async (): Promise<boolean> => {\n const current = live.current;\n if (!current || current.session !== session || busy() || !latest.current.onApply) return false;\n const planned = prepareProposalBatch(entries(latest.current.items, current.applied), latest.current.validateCandidate);\n if (!planned.canApply) return false;\n update(value => ({ ...value, running: true, error: null }));\n const outcome = await session.run(`一括適用 ${planned.payloads.length} 件`, async context => {\n context.reportProgress({ completed: 0, total: planned.payloads.length });\n let completed = 0;\n for (const payload of planned.payloads) {\n context.signal.throwIfAborted();\n if (live.current !== current) throw new DOMException('Review session changed', 'AbortError');\n const item = latest.current.items.find(value => value.proposal.id === payload.proposalId);\n if (!item) throw new Error('対象の提案が見つかりません。再確認してください。');\n const checked = prepareProposalBatch(\n [{ ...item, selected: true, decisions: state.decisions.get(payload.proposalId) ?? ({} as ReviewDecisions<TRecord>) }],\n latest.current.validateCandidate\n );\n if (!checked.canApply || !latest.current.onApply) {\n throw new Error('適用前にデータが変更されたため停止しました。再確認してください。');\n }\n update(value => ({ ...value, active: payload.proposalId }));\n await latest.current.onApply(checked.payloads[0], {\n signal: context.signal,\n reportProgress(progress) {\n const fraction =\n progress.total && Number.isFinite(progress.total) && Number.isFinite(progress.completed)\n ? Math.max(0, Math.min(1, progress.completed / progress.total))\n : 0;\n context.reportProgress({\n completed: completed + fraction,\n total: planned.payloads.length,\n message: progress.message,\n });\n },\n });\n if (live.current !== current) throw new DOMException('Review session changed', 'AbortError');\n current.applied.add(payload.proposalId);\n update(value => ({ ...value, applied: new Set(current.applied) }));\n context.reportProgress({ completed: ++completed, total: planned.payloads.length });\n }\n });\n if (live.current !== current) return false;\n update(value => ({\n ...value,\n running: false,\n active: null,\n error: outcome.status === 'failed' ? '適用に失敗しました。成功済みの提案を除いて再試行できます。' : null,\n }));\n return outcome.status === 'succeeded';\n };\n\n return {\n selectedIds: state.selected,\n appliedIds: state.applied,\n decisions: state.decisions,\n preparation,\n canApply: !!options.onApply && preparation.canApply && !state.running,\n isSubmitting: state.running,\n activeProposalId: state.active,\n error: state.error,\n history,\n setSelected(id, selected) {\n if (!editable(id)) return;\n update(value => {\n const next = new Set(value.selected);\n if (selected) next.add(id);\n else next.delete(id);\n return { ...value, selected: next, error: null };\n });\n },\n selectAll(selected) {\n if (busy()) return;\n update(value => ({\n ...value,\n selected: new Set(selected ? options.items.map(item => item.proposal.id) : value.applied),\n error: null,\n }));\n },\n setDecision(id, field, decision) {\n if (!editable(id) || !options.items.find(item => item.proposal.id === id)?.proposal.changes.some(change => change.field === field)) return;\n update(value => ({\n ...value,\n decisions: new Map(value.decisions).set(id, {\n ...value.decisions.get(id),\n [field]: decision,\n } as ReviewDecisions<TRecord>),\n error: null,\n }));\n },\n decideAll(id, decision) {\n if (!editable(id)) return;\n const item = options.items.find(value => value.proposal.id === id)!;\n update(value => ({\n ...value,\n decisions: new Map(value.decisions).set(\n id,\n Object.fromEntries(item.proposal.changes.map(change => [change.field, decision])) as ReviewDecisions<TRecord>\n ),\n error: null,\n }));\n },\n apply,\n cancel: session.cancel,\n clearHistory: session.clearHistory,\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"use-proposal-batch-review.cjs","names":["createExecutionSession","useState","useRef","useSyncExternalStore","prepareProposalBatch","react","_alneas_appkit_core_ai","initial","useProposalBatchReview","key","options","item","stored","setStored","state","session","live","latest","current","history","busy","record","update","change","entries","items","applied","preparation","editable","id","next","value","selected","field","decision","planned","outcome","context","completed","payload","checked","fraction","progress"],"sources":["../../../src/ai/proposal/use-proposal-batch-review.ts"],"sourcesContent":["import { useLayoutEffect, useRef, useState, useSyncExternalStore } from 'react';\nimport { createExecutionSession, type ExecutionContext, type ExecutionRecord, type ExecutionSession } from \"@alneas/appkit-core/ai\";\nimport {\n prepareProposalBatch,\n type ApplyProposalPayload,\n type FieldDecision,\n type FieldKey,\n type PreparedProposalBatch,\n type ProposalBatchEntry,\n type ProposalBatchItem,\n type ProposalBatchValidator,\n type ReviewDecisions,\n} from \"@alneas/appkit-core/ai\";\n\n/**\n * Host inputs for reviewing unique immutable proposals across multiple records.\n *\n * @typeParam TRecord - Record shape; defaults to a string-keyed record.\n *\n * @see useProposalBatchReview for usage.\n */\nexport interface UseProposalBatchReviewOptions<TRecord extends Record<string, any> = Record<string, any>> {\n /** Change for a new review session, including an intentional replay of the same proposals. */\n batchId: string;\n /**\n * Validated proposals and latest records/versions; proposal IDs must be unique.\n */\n items: readonly ProposalBatchItem<TRecord>[];\n /**\n * Optional synchronous validator passed to Core batch preparation; thrown errors become invalid_candidate issues.\n */\n validateCandidate?: ProposalBatchValidator<TRecord>;\n /**\n * Sequential host callback receiving one prepared payload and cooperative abort/progress context.\n *\n * @param payload - Validated candidate and decisions for one proposal.\n *\n * @param context - Abort signal and fractional-progress reporting for this row.\n *\n * @returns No value after the host confirms application; reject to stop later rows.\n */\n onApply?: (payload: ApplyProposalPayload<TRecord>, context: ExecutionContext) => void | Promise<void>;\n}\n\n/**\n * Batch selection/decision state and explicit execution controls.\n *\n * @typeParam TRecord - Shared record shape; defaults to a string-keyed record.\n *\n * @see useProposalBatchReview for usage.\n */\nexport interface UseProposalBatchReviewReturn<TRecord extends Record<string, any> = Record<string, any>> {\n /**\n * Current selected proposal IDs; applied IDs are excluded from preparation.\n */\n selectedIds: ReadonlySet<string>;\n /**\n * Host-confirmed successes in this review session.\n */\n appliedIds: ReadonlySet<string>;\n /**\n * Per-proposal field decisions; absent choices remain pending.\n */\n decisions: ReadonlyMap<string, ReviewDecisions<TRecord>>;\n /**\n * Core batch preflight result for current selection and latest input props.\n */\n preparation: PreparedProposalBatch<TRecord>;\n /**\n * Whether a handler exists, preparation passes and state is not submitting.\n */\n canApply: boolean;\n /**\n * Whether the displayed batch is currently running.\n */\n isSubmitting: boolean;\n /**\n * Current row being applied, or null outside active row work.\n */\n activeProposalId: string | null;\n /**\n * Generic current-session batch failure message, or null; raw host exceptions are not exposed.\n */\n error: string | null;\n /**\n * Read-only execution history for this batch session.\n */\n history: readonly ExecutionRecord[];\n /**\n * Select or deselect an editable known proposal.\n *\n * @param id - Proposal identifier.\n *\n * @param selected - Desired selection state.\n *\n * @returns No value; unknown/applied/busy proposals are ignored.\n */\n setSelected(id: string, selected: boolean): void;\n /**\n * Change selection for the current items when idle.\n *\n * @param selected - True selects all current IDs; false retains only applied IDs in the selection set.\n *\n * @returns No value; calls while execution is busy are ignored.\n */\n selectAll(selected: boolean): void;\n /**\n * Change one existing proposed field while editable.\n *\n * @param id - Proposal identifier.\n *\n * @param field - Field present in that proposal.\n *\n * @param decision - Pending, accepted or rejected choice.\n *\n * @returns No value; invalid IDs/fields and busy/applied proposals are ignored.\n */\n setDecision(id: string, field: FieldKey<TRecord>, decision: FieldDecision): void;\n /**\n * Change every proposed field choice for one editable proposal.\n *\n * @param id - Proposal identifier.\n *\n * @param decision - Choice applied to all its changes.\n *\n * @returns No value; unknown/applied/busy proposals are ignored.\n */\n decideAll(id: string, decision: FieldDecision): void;\n /**\n * Preflight the selection, then apply rows sequentially with latest-record rechecks.\n *\n * @returns True only for current-session complete success; false when blocked, failed, cancelled or superseded.\n *\n * @remarks Confirmed successes are retained and skipped on retry; unconfirmed backend effects may still exist.\n */\n apply(): Promise<boolean>;\n /**\n * Request cooperative cancellation of current execution.\n *\n * @returns No value; does not roll back previously applied rows or force host work to stop.\n */\n cancel(): void;\n /**\n * Clear settled execution history using the session policy.\n *\n * @returns No value; does not clear review choices or confirmed applied IDs.\n */\n clearHistory(): void;\n}\n\ninterface ReviewState<TRecord extends Record<string, any>> {\n key: string;\n session: ExecutionSession;\n selected: ReadonlySet<string>;\n applied: ReadonlySet<string>;\n decisions: ReadonlyMap<string, ReviewDecisions<TRecord>>;\n running: boolean;\n active: string | null;\n error: string | null;\n}\n\nfunction initial<TRecord extends Record<string, any>>(key: string): ReviewState<TRecord> {\n return {\n key,\n session: createExecutionSession(),\n selected: new Set(),\n applied: new Set(),\n decisions: new Map(),\n running: false,\n active: null,\n error: null,\n };\n}\n\n/**\n * Reviews a batch with explicit field decisions and sequential host application.\n *\n * @typeParam TRecord - Record shape; defaults to a string-keyed record.\n *\n * @param options - Batch identity, unique immutable proposals/latest records, validation and optional host apply callback.\n *\n * @returns Selection/decision controls, preflight state, bounded execution history and cooperative cancellation.\n *\n * @remarks Requires React; no context/styles. Changing batchId or serialized proposal\n * content starts a new session; unmount/session changes request cancellation. Each row\n * is rechecked against latest committed host inputs before apply. Stops at the first\n * failure/cancellation; successes remain excluded from retries. Cancellation cannot\n * undo host effects, so persist idempotently and enforce concurrency/authorization in\n * the backend. A row that changed the backend before rejecting has an uncertain outcome.\n *\n * @example\n * ```tsx\n * import { useProposalBatchReview, type UseProposalBatchReviewOptions } from '@alneas/appkit-react/ai/proposal';\n * type RecordData = { title: string };\n * export function Batch({ options }: { options: UseProposalBatchReviewOptions<RecordData> }) {\n * const review = useProposalBatchReview(options);\n * return <button disabled={!review.canApply} onClick={() => { void review.apply(); }}>Apply selected records</button>;\n * }\n * ```\n */\nexport function useProposalBatchReview<TRecord extends Record<string, any> = Record<string, any>>(\n options: UseProposalBatchReviewOptions<TRecord>\n): UseProposalBatchReviewReturn<TRecord> {\n const key = JSON.stringify([options.batchId, options.items.map(item => JSON.stringify(item.proposal)).sort()]);\n const [stored, setStored] = useState(() => initial<TRecord>(key));\n let state = stored;\n if (state.key !== key) {\n state = initial<TRecord>(key);\n setStored(state);\n }\n const session = state.session;\n const live = useRef<{ session: ExecutionSession; applied: Set<string> } | null>(null);\n const latest = useRef(options);\n useLayoutEffect(() => {\n latest.current = options;\n });\n useLayoutEffect(() => {\n const current = { session, applied: new Set<string>() };\n live.current = current;\n return () => {\n session.cancel();\n if (live.current === current) live.current = null;\n };\n }, [session]);\n\n const history = useSyncExternalStore(session.subscribe, session.getSnapshot, session.getSnapshot);\n const busy = () => session.getSnapshot().some(record => record.status === 'running' || record.status === 'cancelling');\n const update = (change: (current: ReviewState<TRecord>) => ReviewState<TRecord>) => {\n setStored(current => (current.session === session ? change(current) : current));\n };\n\n const entries = (\n items: readonly ProposalBatchItem<TRecord>[],\n applied: ReadonlySet<string>\n ): ProposalBatchEntry<TRecord>[] =>\n items.map(item => ({\n ...item,\n decisions: state.decisions.get(item.proposal.id) ?? ({} as ReviewDecisions<TRecord>),\n selected: state.selected.has(item.proposal.id) && !applied.has(item.proposal.id),\n }));\n\n const preparation = prepareProposalBatch(entries(options.items, state.applied), options.validateCandidate);\n const editable = (id: string) =>\n live.current?.session === session && !busy() && !live.current.applied.has(id) && options.items.some(item => item.proposal.id === id);\n\n const apply = async (): Promise<boolean> => {\n const current = live.current;\n if (!current || current.session !== session || busy() || !latest.current.onApply) return false;\n const planned = prepareProposalBatch(entries(latest.current.items, current.applied), latest.current.validateCandidate);\n if (!planned.canApply) return false;\n update(value => ({ ...value, running: true, error: null }));\n const outcome = await session.run(`一括適用 ${planned.payloads.length} 件`, async context => {\n context.reportProgress({ completed: 0, total: planned.payloads.length });\n let completed = 0;\n for (const payload of planned.payloads) {\n context.signal.throwIfAborted();\n if (live.current !== current) throw new DOMException('Review session changed', 'AbortError');\n const item = latest.current.items.find(value => value.proposal.id === payload.proposalId);\n if (!item) throw new Error('対象の提案が見つかりません。再確認してください。');\n const checked = prepareProposalBatch(\n [{ ...item, selected: true, decisions: state.decisions.get(payload.proposalId) ?? ({} as ReviewDecisions<TRecord>) }],\n latest.current.validateCandidate\n );\n if (!checked.canApply || !latest.current.onApply) {\n throw new Error('適用前にデータが変更されたため停止しました。再確認してください。');\n }\n update(value => ({ ...value, active: payload.proposalId }));\n await latest.current.onApply(checked.payloads[0], {\n signal: context.signal,\n reportProgress(progress) {\n const fraction =\n progress.total && Number.isFinite(progress.total) && Number.isFinite(progress.completed)\n ? Math.max(0, Math.min(1, progress.completed / progress.total))\n : 0;\n context.reportProgress({\n completed: completed + fraction,\n total: planned.payloads.length,\n message: progress.message,\n });\n },\n });\n if (live.current !== current) throw new DOMException('Review session changed', 'AbortError');\n current.applied.add(payload.proposalId);\n update(value => ({ ...value, applied: new Set(current.applied) }));\n context.reportProgress({ completed: ++completed, total: planned.payloads.length });\n }\n });\n if (live.current !== current) return false;\n update(value => ({\n ...value,\n running: false,\n active: null,\n error: outcome.status === 'failed' ? '適用に失敗しました。成功済みの提案を除いて再試行できます。' : null,\n }));\n return outcome.status === 'succeeded';\n };\n\n return {\n selectedIds: state.selected,\n appliedIds: state.applied,\n decisions: state.decisions,\n preparation,\n canApply: !!options.onApply && preparation.canApply && !state.running,\n isSubmitting: state.running,\n activeProposalId: state.active,\n error: state.error,\n history,\n setSelected(id, selected) {\n if (!editable(id)) return;\n update(value => {\n const next = new Set(value.selected);\n if (selected) next.add(id);\n else next.delete(id);\n return { ...value, selected: next, error: null };\n });\n },\n selectAll(selected) {\n if (busy()) return;\n update(value => ({\n ...value,\n selected: new Set(selected ? options.items.map(item => item.proposal.id) : value.applied),\n error: null,\n }));\n },\n setDecision(id, field, decision) {\n if (!editable(id) || !options.items.find(item => item.proposal.id === id)?.proposal.changes.some(change => change.field === field)) return;\n update(value => ({\n ...value,\n decisions: new Map(value.decisions).set(id, {\n ...value.decisions.get(id),\n [field]: decision,\n } as ReviewDecisions<TRecord>),\n error: null,\n }));\n },\n decideAll(id, decision) {\n if (!editable(id)) return;\n const item = options.items.find(value => value.proposal.id === id)!;\n update(value => ({\n ...value,\n decisions: new Map(value.decisions).set(\n id,\n Object.fromEntries(item.proposal.changes.map(change => [change.field, decision])) as ReviewDecisions<TRecord>\n ),\n error: null,\n }));\n },\n apply,\n cancel: session.cancel,\n clearHistory: session.clearHistory,\n };\n}\n"],"mappings":"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"}
|
|
@@ -1,36 +1,162 @@
|
|
|
1
1
|
import { ExecutionContext, ExecutionRecord, ApplyProposalPayload, FieldDecision, FieldKey, PreparedProposalBatch, ProposalBatchItem, ProposalBatchValidator, ReviewDecisions } from '@alneas/appkit-core/ai';
|
|
2
|
-
/**
|
|
2
|
+
/**
|
|
3
|
+
* Host inputs for reviewing unique immutable proposals across multiple records.
|
|
4
|
+
*
|
|
5
|
+
* @typeParam TRecord - Record shape; defaults to a string-keyed record.
|
|
6
|
+
*
|
|
7
|
+
* @see useProposalBatchReview for usage.
|
|
8
|
+
*/
|
|
3
9
|
export interface UseProposalBatchReviewOptions<TRecord extends Record<string, any> = Record<string, any>> {
|
|
4
10
|
/** Change for a new review session, including an intentional replay of the same proposals. */
|
|
5
11
|
batchId: string;
|
|
12
|
+
/**
|
|
13
|
+
* Validated proposals and latest records/versions; proposal IDs must be unique.
|
|
14
|
+
*/
|
|
6
15
|
items: readonly ProposalBatchItem<TRecord>[];
|
|
16
|
+
/**
|
|
17
|
+
* Optional synchronous validator passed to Core batch preparation; thrown errors become invalid_candidate issues.
|
|
18
|
+
*/
|
|
7
19
|
validateCandidate?: ProposalBatchValidator<TRecord>;
|
|
8
|
-
/**
|
|
20
|
+
/**
|
|
21
|
+
* Sequential host callback receiving one prepared payload and cooperative abort/progress context.
|
|
22
|
+
*
|
|
23
|
+
* @param payload - Validated candidate and decisions for one proposal.
|
|
24
|
+
*
|
|
25
|
+
* @param context - Abort signal and fractional-progress reporting for this row.
|
|
26
|
+
*
|
|
27
|
+
* @returns No value after the host confirms application; reject to stop later rows.
|
|
28
|
+
*/
|
|
9
29
|
onApply?: (payload: ApplyProposalPayload<TRecord>, context: ExecutionContext) => void | Promise<void>;
|
|
10
30
|
}
|
|
11
|
-
/**
|
|
31
|
+
/**
|
|
32
|
+
* Batch selection/decision state and explicit execution controls.
|
|
33
|
+
*
|
|
34
|
+
* @typeParam TRecord - Shared record shape; defaults to a string-keyed record.
|
|
35
|
+
*
|
|
36
|
+
* @see useProposalBatchReview for usage.
|
|
37
|
+
*/
|
|
12
38
|
export interface UseProposalBatchReviewReturn<TRecord extends Record<string, any> = Record<string, any>> {
|
|
39
|
+
/**
|
|
40
|
+
* Current selected proposal IDs; applied IDs are excluded from preparation.
|
|
41
|
+
*/
|
|
13
42
|
selectedIds: ReadonlySet<string>;
|
|
43
|
+
/**
|
|
44
|
+
* Host-confirmed successes in this review session.
|
|
45
|
+
*/
|
|
14
46
|
appliedIds: ReadonlySet<string>;
|
|
47
|
+
/**
|
|
48
|
+
* Per-proposal field decisions; absent choices remain pending.
|
|
49
|
+
*/
|
|
15
50
|
decisions: ReadonlyMap<string, ReviewDecisions<TRecord>>;
|
|
51
|
+
/**
|
|
52
|
+
* Core batch preflight result for current selection and latest input props.
|
|
53
|
+
*/
|
|
16
54
|
preparation: PreparedProposalBatch<TRecord>;
|
|
55
|
+
/**
|
|
56
|
+
* Whether a handler exists, preparation passes and state is not submitting.
|
|
57
|
+
*/
|
|
17
58
|
canApply: boolean;
|
|
59
|
+
/**
|
|
60
|
+
* Whether the displayed batch is currently running.
|
|
61
|
+
*/
|
|
18
62
|
isSubmitting: boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Current row being applied, or null outside active row work.
|
|
65
|
+
*/
|
|
19
66
|
activeProposalId: string | null;
|
|
67
|
+
/**
|
|
68
|
+
* Generic current-session batch failure message, or null; raw host exceptions are not exposed.
|
|
69
|
+
*/
|
|
20
70
|
error: string | null;
|
|
71
|
+
/**
|
|
72
|
+
* Read-only execution history for this batch session.
|
|
73
|
+
*/
|
|
21
74
|
history: readonly ExecutionRecord[];
|
|
75
|
+
/**
|
|
76
|
+
* Select or deselect an editable known proposal.
|
|
77
|
+
*
|
|
78
|
+
* @param id - Proposal identifier.
|
|
79
|
+
*
|
|
80
|
+
* @param selected - Desired selection state.
|
|
81
|
+
*
|
|
82
|
+
* @returns No value; unknown/applied/busy proposals are ignored.
|
|
83
|
+
*/
|
|
22
84
|
setSelected(id: string, selected: boolean): void;
|
|
85
|
+
/**
|
|
86
|
+
* Change selection for the current items when idle.
|
|
87
|
+
*
|
|
88
|
+
* @param selected - True selects all current IDs; false retains only applied IDs in the selection set.
|
|
89
|
+
*
|
|
90
|
+
* @returns No value; calls while execution is busy are ignored.
|
|
91
|
+
*/
|
|
23
92
|
selectAll(selected: boolean): void;
|
|
93
|
+
/**
|
|
94
|
+
* Change one existing proposed field while editable.
|
|
95
|
+
*
|
|
96
|
+
* @param id - Proposal identifier.
|
|
97
|
+
*
|
|
98
|
+
* @param field - Field present in that proposal.
|
|
99
|
+
*
|
|
100
|
+
* @param decision - Pending, accepted or rejected choice.
|
|
101
|
+
*
|
|
102
|
+
* @returns No value; invalid IDs/fields and busy/applied proposals are ignored.
|
|
103
|
+
*/
|
|
24
104
|
setDecision(id: string, field: FieldKey<TRecord>, decision: FieldDecision): void;
|
|
105
|
+
/**
|
|
106
|
+
* Change every proposed field choice for one editable proposal.
|
|
107
|
+
*
|
|
108
|
+
* @param id - Proposal identifier.
|
|
109
|
+
*
|
|
110
|
+
* @param decision - Choice applied to all its changes.
|
|
111
|
+
*
|
|
112
|
+
* @returns No value; unknown/applied/busy proposals are ignored.
|
|
113
|
+
*/
|
|
25
114
|
decideAll(id: string, decision: FieldDecision): void;
|
|
115
|
+
/**
|
|
116
|
+
* Preflight the selection, then apply rows sequentially with latest-record rechecks.
|
|
117
|
+
*
|
|
118
|
+
* @returns True only for current-session complete success; false when blocked, failed, cancelled or superseded.
|
|
119
|
+
*
|
|
120
|
+
* @remarks Confirmed successes are retained and skipped on retry; unconfirmed backend effects may still exist.
|
|
121
|
+
*/
|
|
26
122
|
apply(): Promise<boolean>;
|
|
123
|
+
/**
|
|
124
|
+
* Request cooperative cancellation of current execution.
|
|
125
|
+
*
|
|
126
|
+
* @returns No value; does not roll back previously applied rows or force host work to stop.
|
|
127
|
+
*/
|
|
27
128
|
cancel(): void;
|
|
129
|
+
/**
|
|
130
|
+
* Clear settled execution history using the session policy.
|
|
131
|
+
*
|
|
132
|
+
* @returns No value; does not clear review choices or confirmed applied IDs.
|
|
133
|
+
*/
|
|
28
134
|
clearHistory(): void;
|
|
29
135
|
}
|
|
30
136
|
/**
|
|
31
|
-
* Reviews
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
137
|
+
* Reviews a batch with explicit field decisions and sequential host application.
|
|
138
|
+
*
|
|
139
|
+
* @typeParam TRecord - Record shape; defaults to a string-keyed record.
|
|
140
|
+
*
|
|
141
|
+
* @param options - Batch identity, unique immutable proposals/latest records, validation and optional host apply callback.
|
|
142
|
+
*
|
|
143
|
+
* @returns Selection/decision controls, preflight state, bounded execution history and cooperative cancellation.
|
|
144
|
+
*
|
|
145
|
+
* @remarks Requires React; no context/styles. Changing batchId or serialized proposal
|
|
146
|
+
* content starts a new session; unmount/session changes request cancellation. Each row
|
|
147
|
+
* is rechecked against latest committed host inputs before apply. Stops at the first
|
|
148
|
+
* failure/cancellation; successes remain excluded from retries. Cancellation cannot
|
|
149
|
+
* undo host effects, so persist idempotently and enforce concurrency/authorization in
|
|
150
|
+
* the backend. A row that changed the backend before rejecting has an uncertain outcome.
|
|
151
|
+
*
|
|
152
|
+
* @example
|
|
153
|
+
* ```tsx
|
|
154
|
+
* import { useProposalBatchReview, type UseProposalBatchReviewOptions } from '@alneas/appkit-react/ai/proposal';
|
|
155
|
+
* type RecordData = { title: string };
|
|
156
|
+
* export function Batch({ options }: { options: UseProposalBatchReviewOptions<RecordData> }) {
|
|
157
|
+
* const review = useProposalBatchReview(options);
|
|
158
|
+
* return <button disabled={!review.canApply} onClick={() => { void review.apply(); }}>Apply selected records</button>;
|
|
159
|
+
* }
|
|
160
|
+
* ```
|
|
35
161
|
*/
|
|
36
162
|
export declare function useProposalBatchReview<TRecord extends Record<string, any> = Record<string, any>>(options: UseProposalBatchReviewOptions<TRecord>): UseProposalBatchReviewReturn<TRecord>;
|