@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,41 +1,30 @@
|
|
|
1
1
|
import { FilterProps, FilterResult } from './filter-types.cjs';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* - Pattern: `{testId}`, `{testId}-apply`, `{testId}-reset`
|
|
13
|
-
* - Filter inputs auto-generate testId from field name
|
|
14
|
-
*
|
|
15
|
-
* @example Basic usage with testId
|
|
3
|
+
* Renders schema-derived filter inputs and emits a MongoDB-style filter object.
|
|
4
|
+
* @param props - Field specifications, optional collection schema, labels and change callback; see {@link FilterProps}.
|
|
5
|
+
* @returns A responsive filter grid with apply/reset buttons when autoApply is false.
|
|
6
|
+
* @remarks Import Appkit CSS. This component creates local filter state; the host must apply the
|
|
7
|
+
* emitted filter to its own data query. autoApply defaults to true; false defers onChange
|
|
8
|
+
* until Apply or Reset. Reset emits an empty filter in manual mode. layout is currently ignored.
|
|
9
|
+
* With testId, the root uses data-testid=testId and field wrappers use `${testId}-${field}`.
|
|
10
|
+
* Manual apply/reset buttons use `${testId}-apply` and `${testId}-reset`; they are absent in auto mode.
|
|
11
|
+
* @example
|
|
16
12
|
* ```tsx
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* fields={['name', 'age', 'status']}
|
|
21
|
-
* showPlaceholderOnAll={true}
|
|
22
|
-
* onChange={(filter) => setQueryFilter(filter)}
|
|
23
|
-
* />
|
|
24
|
-
* // Container: data-testid="user-filter"
|
|
25
|
-
* // Apply button: data-testid="user-filter-apply"
|
|
26
|
-
* // Reset button: data-testid="user-filter-reset"
|
|
27
|
-
* // Filter inputs auto-generate testId from field name
|
|
13
|
+
* import { useState } from 'react';
|
|
14
|
+
* import { SchemaFilter, type CollectionSchema, type FilterResult } from '@alneas/appkit-react/tools/filter';
|
|
15
|
+
* import '@alneas/appkit-react/styles';
|
|
28
16
|
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
17
|
+
* const schema: CollectionSchema = {
|
|
18
|
+
* name: { type: 'string', label: 'Name' },
|
|
19
|
+
* status: { type: 'enum', enum: ['active', 'inactive'], label: 'Status' },
|
|
20
|
+
* };
|
|
21
|
+
* export function UserFilter() {
|
|
22
|
+
* const [filter, setFilter] = useState<FilterResult>({});
|
|
23
|
+
* return <><SchemaFilter testId="user-filter" schema={schema} autoApply={false}
|
|
24
|
+
* fields={[{ field: 'name', className: 'min-w-[300px]' }, 'status']}
|
|
25
|
+
* inputClassName="min-w-[200px]" onChange={setFilter} />
|
|
26
|
+
* <pre>{JSON.stringify(filter)}</pre></>;
|
|
27
|
+
* }
|
|
39
28
|
* ```
|
|
40
29
|
*/
|
|
41
30
|
export declare function SchemaFilter({ testId, schema, fields: fieldSpecs, defaultValues, onChange, autoApply, applyLabel, resetLabel, className, labelPosition: globalLabelPosition, labelWidth: globalLabelWidth, overlappingLabel: globalOverlappingLabel, showPlaceholderOnAll: globalShowPlaceholderOnAll, inputClassName: globalInputClassName, locale, // Add locale to destructured props
|
|
@@ -1,41 +1,30 @@
|
|
|
1
1
|
import { FilterProps, FilterResult } from './filter-types.js';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* - Pattern: `{testId}`, `{testId}-apply`, `{testId}-reset`
|
|
13
|
-
* - Filter inputs auto-generate testId from field name
|
|
14
|
-
*
|
|
15
|
-
* @example Basic usage with testId
|
|
3
|
+
* Renders schema-derived filter inputs and emits a MongoDB-style filter object.
|
|
4
|
+
* @param props - Field specifications, optional collection schema, labels and change callback; see {@link FilterProps}.
|
|
5
|
+
* @returns A responsive filter grid with apply/reset buttons when autoApply is false.
|
|
6
|
+
* @remarks Import Appkit CSS. This component creates local filter state; the host must apply the
|
|
7
|
+
* emitted filter to its own data query. autoApply defaults to true; false defers onChange
|
|
8
|
+
* until Apply or Reset. Reset emits an empty filter in manual mode. layout is currently ignored.
|
|
9
|
+
* With testId, the root uses data-testid=testId and field wrappers use `${testId}-${field}`.
|
|
10
|
+
* Manual apply/reset buttons use `${testId}-apply` and `${testId}-reset`; they are absent in auto mode.
|
|
11
|
+
* @example
|
|
16
12
|
* ```tsx
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* fields={['name', 'age', 'status']}
|
|
21
|
-
* showPlaceholderOnAll={true}
|
|
22
|
-
* onChange={(filter) => setQueryFilter(filter)}
|
|
23
|
-
* />
|
|
24
|
-
* // Container: data-testid="user-filter"
|
|
25
|
-
* // Apply button: data-testid="user-filter-apply"
|
|
26
|
-
* // Reset button: data-testid="user-filter-reset"
|
|
27
|
-
* // Filter inputs auto-generate testId from field name
|
|
13
|
+
* import { useState } from 'react';
|
|
14
|
+
* import { SchemaFilter, type CollectionSchema, type FilterResult } from '@alneas/appkit-react/tools/filter';
|
|
15
|
+
* import '@alneas/appkit-react/styles';
|
|
28
16
|
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
17
|
+
* const schema: CollectionSchema = {
|
|
18
|
+
* name: { type: 'string', label: 'Name' },
|
|
19
|
+
* status: { type: 'enum', enum: ['active', 'inactive'], label: 'Status' },
|
|
20
|
+
* };
|
|
21
|
+
* export function UserFilter() {
|
|
22
|
+
* const [filter, setFilter] = useState<FilterResult>({});
|
|
23
|
+
* return <><SchemaFilter testId="user-filter" schema={schema} autoApply={false}
|
|
24
|
+
* fields={[{ field: 'name', className: 'min-w-[300px]' }, 'status']}
|
|
25
|
+
* inputClassName="min-w-[200px]" onChange={setFilter} />
|
|
26
|
+
* <pre>{JSON.stringify(filter)}</pre></>;
|
|
27
|
+
* }
|
|
39
28
|
* ```
|
|
40
29
|
*/
|
|
41
30
|
export declare function SchemaFilter({ testId, schema, fields: fieldSpecs, defaultValues, onChange, autoApply, applyLabel, resetLabel, className, labelPosition: globalLabelPosition, labelWidth: globalLabelWidth, overlappingLabel: globalOverlappingLabel, showPlaceholderOnAll: globalShowPlaceholderOnAll, inputClassName: globalInputClassName, locale, // Add locale to destructured props
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter.js","names":["m.filter_apply","m.filter_reset","SchemaFilter","fieldSpecs","globalLabelPosition","globalLabelWidth","globalOverlappingLabel","globalShowPlaceholderOnAll","globalInputClassName","useFilter","autoApply","onChange","displayApplyLabel","applyLabel","filter_apply","displayResetLabel","resetLabel","filter_reset","handleApply","filter","handleReset","reset","testId","cn","className","fields","FieldFactory","field","FilterInput","values","setField","value","debounceMs","Button","isEmpty"],"sources":["../../../../src/tools/components/filter/filter.tsx"],"sourcesContent":["/**\n * @fileoverview フィルターUIコンポーネント\n *\n * スキーマベースのフィルターUIを提供します。\n * useFilterフックと各種フィルター入力を組み合わせて、\n * 完全なフィルタリングUIを構築します。\n *\n * @module filter/filter\n */\n\n'use client';\n\nimport * as m from '../../paraglide/messages.js';\nimport { cn } from \"../../lib/utils\";\nimport { Button } from '../ui/button';\nimport { FilterInput } from './filter-inputs';\nimport { useFilter } from './use-filter';\nimport { FilterProps, FilterResult } from './filter-types';\nimport { FieldFactory } from '../ui/field';\n\n// =============================================================================\n// Filter Component\n// =============================================================================\n\n/**\n *
|
|
1
|
+
{"version":3,"file":"filter.js","names":["m.filter_apply","m.filter_reset","SchemaFilter","fieldSpecs","globalLabelPosition","globalLabelWidth","globalOverlappingLabel","globalShowPlaceholderOnAll","globalInputClassName","useFilter","autoApply","onChange","displayApplyLabel","applyLabel","filter_apply","displayResetLabel","resetLabel","filter_reset","handleApply","filter","handleReset","reset","testId","cn","className","fields","FieldFactory","field","FilterInput","values","setField","value","debounceMs","Button","isEmpty"],"sources":["../../../../src/tools/components/filter/filter.tsx"],"sourcesContent":["/**\n * @fileoverview フィルターUIコンポーネント\n *\n * スキーマベースのフィルターUIを提供します。\n * useFilterフックと各種フィルター入力を組み合わせて、\n * 完全なフィルタリングUIを構築します。\n *\n * @module filter/filter\n */\n\n'use client';\n\nimport * as m from '../../paraglide/messages.js';\nimport { cn } from \"../../lib/utils\";\nimport { Button } from '../ui/button';\nimport { FilterInput } from './filter-inputs';\nimport { useFilter } from './use-filter';\nimport { FilterProps, FilterResult } from './filter-types';\nimport { FieldFactory } from '../ui/field';\n\n// =============================================================================\n// Filter Component\n// =============================================================================\n\n/**\n * Renders schema-derived filter inputs and emits a MongoDB-style filter object.\n * @param props - Field specifications, optional collection schema, labels and change callback; see {@link FilterProps}.\n * @returns A responsive filter grid with apply/reset buttons when autoApply is false.\n * @remarks Import Appkit CSS. This component creates local filter state; the host must apply the\n * emitted filter to its own data query. autoApply defaults to true; false defers onChange\n * until Apply or Reset. Reset emits an empty filter in manual mode. layout is currently ignored.\n * With testId, the root uses data-testid=testId and field wrappers use `${testId}-${field}`.\n * Manual apply/reset buttons use `${testId}-apply` and `${testId}-reset`; they are absent in auto mode.\n * @example\n * ```tsx\n * import { useState } from 'react';\n * import { SchemaFilter, type CollectionSchema, type FilterResult } from '@alneas/appkit-react/tools/filter';\n * import '@alneas/appkit-react/styles';\n *\n * const schema: CollectionSchema = {\n * name: { type: 'string', label: 'Name' },\n * status: { type: 'enum', enum: ['active', 'inactive'], label: 'Status' },\n * };\n * export function UserFilter() {\n * const [filter, setFilter] = useState<FilterResult>({});\n * return <><SchemaFilter testId=\"user-filter\" schema={schema} autoApply={false}\n * fields={[{ field: 'name', className: 'min-w-[300px]' }, 'status']}\n * inputClassName=\"min-w-[200px]\" onChange={setFilter} />\n * <pre>{JSON.stringify(filter)}</pre></>;\n * }\n * ```\n */\nexport function SchemaFilter({\n testId,\n schema,\n fields: fieldSpecs,\n defaultValues,\n onChange,\n autoApply = true,\n applyLabel = '適用',\n resetLabel,\n className,\n labelPosition: globalLabelPosition,\n labelWidth: globalLabelWidth,\n overlappingLabel: globalOverlappingLabel,\n showPlaceholderOnAll: globalShowPlaceholderOnAll,\n inputClassName: globalInputClassName,\n locale, // Add locale to destructured props\n debounceMs,\n}: FilterProps) {\n const { values, filter, fields, setField, reset, isEmpty } = useFilter({\n schema,\n fields: fieldSpecs,\n defaultValues,\n onChange: autoApply ? onChange : undefined,\n debounceMs,\n });\n\n const displayApplyLabel = applyLabel || m.filter_apply();\n const displayResetLabel = resetLabel || m.filter_reset();\n\n /**\n * 適用ボタンのハンドラー\n */\n const handleApply = () => {\n onChange?.(filter);\n };\n\n /**\n * リセットボタンのハンドラー\n */\n const handleReset = () => {\n reset();\n if (!autoApply) {\n onChange?.({});\n }\n };\n\n return (\n <div\n data-testid={testId}\n className={cn(\n 'w-full',\n 'grid gap-x-4 gap-y-2',\n // Responsive grid: 1 column on small screens, 2 columns on sm+\n 'grid-cols-1 sm:grid-cols-2',\n className,\n )}\n >\n {fields.map((field) => (\n <FieldFactory\n key={field.field}\n data-testid={testId ? `${testId}-${field.field}` : undefined}\n label={field.label}\n labelPosition={field.labelPosition || globalLabelPosition || 'responsive'}\n labelWidth={field.labelWidth || globalLabelWidth}\n overlappingLabel={\n field.overlappingLabel !== undefined ? field.overlappingLabel : globalOverlappingLabel\n }\n showPlaceholderOnAll={\n field.showPlaceholderOnAll !== undefined\n ? field.showPlaceholderOnAll\n : globalShowPlaceholderOnAll\n }\n >\n <FilterInput\n field={field}\n value={values[field.field]}\n onChange={(value) => setField(field.field, value)}\n showPlaceholderOnAll={\n field.showPlaceholderOnAll !== undefined\n ? field.showPlaceholderOnAll\n : globalShowPlaceholderOnAll\n }\n className={field.className || globalInputClassName}\n locale={locale} // Pass locale down\n debounceMs={field.debounceMs !== undefined ? field.debounceMs : debounceMs}\n />\n </FieldFactory>\n ))}\n\n {/* ボタン(autoApply=falseの場合のみ表示) */}\n {!autoApply && (\n <div className='flex items-end gap-2'>\n <Button\n testId={testId ? `${testId}-apply` : undefined}\n onClick={handleApply}\n variant='default'\n >\n {displayApplyLabel}\n </Button>\n <Button\n testId={testId ? `${testId}-reset` : undefined}\n onClick={handleReset}\n variant='outline'\n disabled={isEmpty}\n >\n {displayResetLabel}\n </Button>\n </div>\n )}\n\n {/* autoApply時のリセットボタン */}\n {autoApply && !isEmpty && (\n <div className='flex items-end'>\n <Button\n testId={testId ? `${testId}-reset` : undefined}\n onClick={handleReset}\n variant='ghost'\n size='sm'\n >\n {displayResetLabel}\n </Button>\n </div>\n )}\n </div>\n );\n}\nSchemaFilter.displayName = 'SchemaFilter';\n\n// =============================================================================\n// Exports\n// =============================================================================\n\nexport type { FilterProps, FilterResult };\n"],"mappings":";;;;;;;;;;;AAoDA,SAAgBE,EAAa,EAC3B,WACA,WACA,QAAQC,GACR,kBACA,aACA,eAAY,IACZ,gBAAa,MACb,eACA,cACA,eAAeC,GACf,YAAYC,GACZ,kBAAkBC,GAClB,sBAAsBC,GACtB,gBAAgBC,GAChB,WACA,iBACc;CACd,IAAM,EAAE,WAAQ,WAAQ,WAAQ,aAAU,UAAO,eAAYC,EAAU;EACrE;EACA,QAAQN;EACR;EACA,UAAUO,IAAYC,IAAW,KAAA;EACjC;CACF,CAAC,GAEKC,IAAoBC,KAAcb,EAAe,GACjDe,IAAoBC,KAAcf,EAAe,GAKjDiB,UAAoB;EACxB,IAAWC,CAAM;CACnB,GAKMC,UAAoB;EAExB,AADAC,EAAM,GACDX,KACHC,IAAW,CAAC,CAAC;CAEjB;CAEA,OACE,kBAAC,OAAD;EACE,eAAaW;EACb,WAAWC,EACT,UACA,wBAEA,8BACAC,CACF;EARF,UAAA;GAUGC,EAAO,KAAK,MACX,kBAACC,GAAD;IAEE,eAAaJ,IAAS,GAAGA,EAAO,GAAGK,EAAM,UAAU,KAAA;IACnD,OAAOA,EAAM;IACb,eAAeA,EAAM,iBAAiBvB,KAAuB;IAC7D,YAAYuB,EAAM,cAActB;IAChC,kBACEsB,EAAM,qBAAqB,KAAA,IAAqCrB,IAAzBqB,EAAM;IAE/C,sBACEA,EAAM,yBAAyB,KAAA,IAE3BpB,IADAoB,EAAM;IAIZ,UAAA,kBAACC,GAAD;KACS;KACP,OAAOC,EAAOF,EAAM;KACpB,WAAW,MAAUG,EAASH,EAAM,OAAOI,CAAK;KAChD,sBACEJ,EAAM,yBAAyB,KAAA,IAE3BpB,IADAoB,EAAM;KAGZ,WAAWA,EAAM,aAAanB;KACtB;KACR,YAAYmB,EAAM,eAAe,KAAA,IAA+BK,IAAnBL,EAAM;IACpD,CAAA;GACW,GA3BPA,EAAM,KA2BC,CACf;GAGA,CAACjB,KACA,kBAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACE,kBAACuB,GAAD;KACE,QAAQX,IAAS,GAAGA,EAAO,UAAU,KAAA;KACrC,SAASJ;KACT,SAAQ;KAEP,UAAAN;IACK,CAAA,GACR,kBAACqB,GAAD;KACE,QAAQX,IAAS,GAAGA,EAAO,UAAU,KAAA;KACrC,SAASF;KACT,SAAQ;KACR,UAAUc;KAET,UAAAnB;IACK,CAAA,CACL;;GAINL,KAAa,CAACwB,KACb,kBAAC,OAAD;IAAK,WAAU;IACb,UAAA,kBAACD,GAAD;KACE,QAAQX,IAAS,GAAGA,EAAO,UAAU,KAAA;KACrC,SAASF;KACT,SAAQ;KACR,MAAK;KAEJ,UAAAL;IACK,CAAA;GACL,CAAA;EAEJ;;AAET;AACA,EAAa,cAAc"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EnhancedDetailPage.cjs","names":["useForm","createAjvResolver","React","_Fragment","SchemaDetailPage","Collapsible","CollapsibleTrigger","ChevronDown","CollapsibleContent","FormActionBar","Button","FormProvider","FormContainer","require_runtime","require_ui_components_ui_button_components","require_ui_components_ui_collapsible","require_common_actions_create","require_common_actions_delete","require_common_actions_edit","require_common_actions_update","require_common_advanced","require_tools_components_form_form_container","require_tools_components_form_form_action_bar","require_tools_lib_schema_ajv","require_tools_components_schema_SchemaDetailPage","react_jsx_runtime","react","lucide_react","react_hook_form","separateAdvancedFields","standardProps","advancedProps","properties","schema","key","prop","EnhancedDetailPage","form","values","validation","advancedOpen","setAdvancedOpen","containerRef","hasAdvancedFields","advanced","renderContent","children","progressiveDisclosure","standard","stickyActions","showEditButton","useGrid","mode","submitLabel","onCancel","onDelete","onEdit","content","onSubmit","data","containerLayout"],"sources":["../../../../src/tools/components/form/EnhancedDetailPage.tsx"],"sourcesContent":["import * as React from 'react';\nimport { FormProvider, useForm, type FieldValues, type DefaultValues } from 'react-hook-form';\nimport { createAjvResolver, type SchemaFormValidationOptions } from '../../lib/schema/ajv';\nimport * as m from '../../paraglide/messages.js';\nimport { ChevronDown } from 'lucide-react';\n\nimport type { JSONSchema, JSONSchemaProperty } from '../../lib/schema/types';\nimport { FormContainer, type FormContainerWidth } from './form-container';\nimport { FormActionBar, type SaveStatus } from './form-action-bar';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '../ui/collapsible';\nimport { Button } from '../ui/button';\nimport { SchemaDetailPage } from '../schema/SchemaDetailPage';\nimport type { RelatedFieldConfig } from '../ui/form';\n\ntype DetailMode = 'view' | 'edit';\ntype GroupDisplay = 'heading' | 'card' | 'dropdown';\n\ninterface EnhancedDetailPageProps<TFieldValues extends FieldValues> {\n /** Opt into whole-record schema validation. */\n validation?: SchemaFormValidationOptions;\n /** JSON Schema definition with vendor extensions (x-ui, x-db, x-zod) */\n schema: JSONSchema;\n /** 表示モード */\n mode: DetailMode;\n /** 現在の値 */\n values?: Partial<TFieldValues>;\n /** 送信ボタンのラベル */\n submitLabel?: 'create' | 'update';\n /** フォーム送信時のハンドラ */\n onSubmit?: (values: TFieldValues) => void | Promise<void>;\n /** キャンセル時のハンドラ */\n onCancel?: () => void;\n /** 削除時のハンドラ */\n onDelete?: () => void;\n /** 編集モード切り替えハンドラ */\n onEdit?: () => void;\n /** 編集ボタンを表示 */\n showEditButton?: boolean;\n /** グループ表示スタイル */\n groupDisplay?: GroupDisplay;\n /** リレーションデータ */\n relations?: Record<string, RelatedFieldConfig>;\n\n // 新しいレイアウトオプション\n\n /**\n * 中央揃えコンテナレイアウトを使用\n * @default true\n */\n containerLayout?: boolean;\n /**\n * コンテナの最大幅\n * @default \"4xl\"\n */\n maxWidth?: FormContainerWidth;\n /**\n * スティッキーアクションバーを有効化\n * @default false\n */\n stickyActions?: boolean;\n /**\n * プログレッシブディスクロージャー (advanced フィールドを折りたたみ)\n * @default true\n */\n progressiveDisclosure?: boolean;\n /**\n * 保存状態インジケーター\n */\n saveStatus?: SaveStatus;\n /**\n * レスポンシブグリッドを使用 (field.width を考慮)\n * @default true\n */\n useGrid?: boolean;\n /**\n * グリッドの列数\n * @default 2\n */\n gridColumns?: 1 | 2 | 3;\n\n /**\n * カスタムフォームコンテンツ (schema による自動生成を上書き)\n */\n children?: React.ReactNode;\n\n className?: string;\n}\n\n/**\n * 拡張されたフィールドを通常と高度に分離 (JSONSchema版)\n */\nconst separateAdvancedFields = (\n schema: JSONSchema,\n): { standard: JSONSchema; advanced: JSONSchema } => {\n const standardProps: Record<string, JSONSchemaProperty> = {};\n const advancedProps: Record<string, JSONSchemaProperty> = {};\n\n const properties = schema.properties || {};\n\n for (const [key, prop] of Object.entries(properties)) {\n if (prop['x-ui']?.advanced) {\n advancedProps[key] = prop;\n } else {\n standardProps[key] = prop;\n }\n }\n\n return {\n standard: { ...schema, properties: standardProps },\n advanced: { ...schema, title: `${schema.title || ''}_advanced`, properties: advancedProps },\n };\n};\n\n/**\n * デスクトップ最適化された詳細/編集ページコンポーネント\n *\n * UXベストプラクティスに基づく拡張レイアウト機能:\n * - 中央揃えの読みやすいコンテナ幅\n * - レスポンシブグリッドレイアウト (モバイル1列、デスクトップ2列)\n * - プログレッシブディスクロージャー (advanced フィールドの折りたたみ)\n * - スティッキーアクションバー\n * - 保存状態インジケーター\n *\n * @example\n * ```tsx\n * <EnhancedDetailPage\n * schema={userSchema}\n * mode=\"edit\"\n * values={userData}\n * onSubmit={handleSave}\n * containerLayout\n * stickyActions\n * progressiveDisclosure\n * />\n * ```\n */\nexport function EnhancedDetailPage<TFieldValues extends FieldValues>({\n schema,\n validation,\n mode,\n values,\n submitLabel = 'update',\n onSubmit,\n onCancel,\n onDelete,\n onEdit,\n showEditButton = false,\n groupDisplay,\n relations,\n containerLayout = true,\n maxWidth = '4xl',\n stickyActions = false,\n progressiveDisclosure = true,\n saveStatus = 'idle',\n useGrid = true,\n children,\n className,\n}: EnhancedDetailPageProps<TFieldValues>) {\n const form = useForm<TFieldValues>({\n defaultValues: values as DefaultValues<TFieldValues>,\n resolver: validation ? createAjvResolver<TFieldValues>(schema, validation) : undefined,\n });\n const { dirtyFields } = form.formState;\n React.useEffect(() => { if (values) form.reset(values as TFieldValues, { keepDirtyValues: true }); }, [values, form]);\n void dirtyFields;\n const [advancedOpen, setAdvancedOpen] = React.useState(false);\n const containerRef = React.useRef<HTMLDivElement>(null);\n\n // プログレッシブディスクロージャー: 通常/高度フィールドを分離\n const { standard, advanced } = React.useMemo(() => separateAdvancedFields(schema), [schema]);\n const hasAdvancedFields = Object.keys(advanced.properties || {}).length > 0;\n\n const renderContent = () => (\n <>\n {/* カスタムコンテンツがある場合はそれを優先、ない場合はスキーマ駆動フォームを表示 */}\n {children ? (\n <div className='space-y-6'>{children}</div>\n ) : (\n <>\n {/* 標準フィールド */}\n <SchemaDetailPage\n form={form}\n schema={progressiveDisclosure ? standard : schema}\n mode={mode}\n values={values}\n submitLabel={submitLabel}\n onSubmit={onSubmit}\n onCancel={onCancel}\n onDelete={onDelete}\n onEdit={onEdit}\n showEditButton={!stickyActions && showEditButton}\n hideActions={stickyActions}\n groupDisplay={groupDisplay}\n groupLayout={useGrid ? 'full' : 'column'}\n columnMinWidth={useGrid ? 300 : undefined}\n relations={relations}\n />\n\n {/* 高度なフィールド (折りたたみ) */}\n {progressiveDisclosure && hasAdvancedFields && (\n <Collapsible\n open={advancedOpen}\n onOpenChange={setAdvancedOpen}\n className='mt-6 border-t pt-4'\n >\n <CollapsibleTrigger className='flex w-full items-center justify-between py-2 text-sm font-medium text-muted-foreground hover:text-foreground transition-colors'>\n <span>{m.common_advanced({ defaultValue: 'Advanced Settings' })}</span>\n <ChevronDown\n className={`h-4 w-4 transition-transform ${advancedOpen ? 'rotate-180' : ''}`}\n />\n </CollapsibleTrigger>\n <CollapsibleContent className='pt-4'>\n <SchemaDetailPage\n form={form}\n schema={advanced}\n mode={mode}\n values={values}\n groupDisplay={groupDisplay}\n groupLayout={useGrid ? 'full' : 'column'}\n columnMinWidth={useGrid ? 300 : undefined}\n relations={relations}\n />\n </CollapsibleContent>\n </Collapsible>\n )}\n </>\n )}\n\n {/* スティッキーアクションバー */}\n {stickyActions && mode === 'edit' && (\n <FormActionBar\n primaryLabel={\n submitLabel === 'create'\n ? m.common_actions_create({ defaultValue: 'Create' })\n : m.common_actions_update({ defaultValue: 'Update' })\n }\n onPrimary={children ? () => containerRef.current?.querySelector('form')?.requestSubmit() : undefined}\n onSecondary={onCancel}\n saveStatus={saveStatus}\n sticky\n tertiaryAction={\n onDelete && (\n <Button type='button' variant='destructive' onClick={onDelete}>\n {m.common_actions_delete({ defaultValue: 'Delete' })}\n </Button>\n )\n }\n />\n )}\n\n {/* View モードのアクション */}\n {stickyActions && mode === 'view' && showEditButton && (\n <FormActionBar\n primaryLabel={m.common_actions_edit({ defaultValue: 'Edit' })}\n onPrimary={onEdit}\n onSecondary={onCancel}\n sticky\n />\n )}\n </>\n );\n\n const content = mode === 'edit' && !children ? (\n <FormProvider {...form}>\n <form onSubmit={form.handleSubmit(data => onSubmit?.(data))}>{renderContent()}</form>\n </FormProvider>\n ) : renderContent();\n\n if (containerLayout) {\n return (\n <FormContainer ref={containerRef} maxWidth={maxWidth} className={className}>\n {content}\n </FormContainer>\n );\n }\n\n return (\n <div ref={containerRef} className={className}>\n {content}\n </div>\n );\n}\n"],"mappings":"A,g1BA2FA,IAAM6B,EACJ,GACmD,CACnD,IAAMC,EAAoD,CAAC,EACrDC,EAAoD,CAAC,EAErDC,EAAaC,EAAO,YAAc,CAAC,EAEzC,IAAK,GAAM,CAACC,EAAKC,KAAS,OAAO,QAAQH,CAAU,EAC7CG,EAAK,OAAO,EAAE,SAChB,EAAcD,GAAOC,EAErB,EAAcD,GAAOC,EAIzB,MAAO,CACL,SAAU,CAAE,GAAGF,EAAQ,WAAYH,CAAc,EACjD,SAAU,CAAE,GAAGG,EAAQ,MAAO,GAAGA,EAAO,OAAS,GAAG,WAAY,WAAYF,CAAc,CAC5F,CACF,EAyBA,SAAgBK,EAAqD,CACnE,SACA,aACA,OACA,SACA,cAAc,SACd,WACA,WACA,WACA,SACA,iBAAiB,GACjB,eACA,YACA,kBAAkB,GAClB,WAAW,MACX,gBAAgB,GAChB,wBAAwB,GACxB,aAAa,OACb,UAAU,GACV,WACA,aACwC,CACxC,IAAMC,GAAA,EAAOrC,EAAAA,QAAAA,CAAsB,CACjC,cAAesC,EACf,SAAUC,EAAatC,EAAAA,kBAAgCgC,EAAQM,CAAU,EAAI,IAAA,EAC/E,CAAC,EACK,CAAE,eAAgBF,EAAK,UAC7BX,EAAM,cAAgB,CAAMY,GAAQD,EAAK,MAAMC,EAAwB,CAAE,gBAAiB,EAAK,CAAC,CAAG,EAAG,CAACA,EAAQD,CAAI,CAAC,EAEpH,GAAM,CAACG,EAAcC,GAAmBvC,EAAM,SAAS,EAAK,EACtDwC,EAAexC,EAAM,OAAuB,IAAI,EAGhD,CAAE,WAAU,YAAaA,EAAM,YAAc2B,EAAuBI,CAAM,EAAG,CAACA,CAAM,CAAC,EACrFU,EAAoB,OAAO,KAAKC,EAAS,YAAc,CAAC,CAAC,CAAC,CAAC,OAAS,EAEpEC,OACJ,EAAApB,EAAA,KAAA,CAAAtB,EAAAA,SAAA,CAAA,SAAA,CAEG2C,GACC,EAAArB,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,YAAa,UAAc,CAAA,GAE1C,EAAAA,EAAA,KAAA,CAAAtB,EAAAA,SAAA,CAAA,SAAA,EAEE,EAAAsB,EAAA,IAAA,CAACrB,EAAAA,iBAAD,CACQ,OACN,OAAQ2C,EAAwBC,EAAWf,EACrC,OACE,SACK,cACH,WACA,WACA,WACF,SACR,eAAgB,CAACgB,GAAiBC,EAClC,YAAaD,EACC,eACd,YAAaE,EAAU,OAAS,SAChC,eAAgBA,EAAU,IAAM,IAAA,GACrB,WACZ,CAAA,EAGAJ,GAAyBJ,IACxB,EAAAlB,EAAA,KAAA,CAACpB,EAAAA,YAAD,CACE,KAAMmC,EACN,aAAcC,EACd,UAAU,qBAHZ,SAAA,EAKE,EAAAhB,EAAA,KAAA,CAACnB,EAAAA,mBAAD,CAAoB,UAAU,kIAA9B,SAAA,EACE,EAAAmB,EAAA,IAAA,CAAC,OAAD,CAAA,SAAAL,EAAA,gBAAyB,CAAE,aAAc,mBAAoB,CAAC,CAAQ,CAAA,GACtE,EAAAK,EAAA,IAAA,CAAClB,EAAAA,YAAD,CACE,UAAW,gCAAgCiC,EAAe,aAAe,IAC1E,CAAA,CACiB,CACpB,CAAA,GAAA,EAAAf,EAAA,IAAA,CAACjB,EAAAA,mBAAD,CAAoB,UAAU,OAC5B,UAAA,EAAAiB,EAAA,IAAA,CAACrB,EAAAA,iBAAD,CACQ,OACN,OAAQwC,EACF,OACE,SACM,eACd,YAAaO,EAAU,OAAS,SAChC,eAAgBA,EAAU,IAAM,IAAA,GACrB,WACZ,CAAA,CACiB,CAAA,CACT,CAEf,CAAA,CAAA,CAAA,CAAA,EAIHF,GAAiBG,IAAS,SACzB,EAAA3B,EAAA,IAAA,CAAChB,EAAAA,cAAD,CACE,aACE4C,IAAgB,SAAArC,EAAA,sBACY,CAAE,aAAc,QAAS,CAAC,EAAAG,EAAA,sBAC1B,CAAE,aAAc,QAAS,CAAC,EAExD,UAAW2B,MAAiBJ,EAAa,SAAS,cAAc,MAAM,CAAC,EAAE,cAAc,EAAI,IAAA,GAC3F,YAAaY,EACD,aACZ,OAAA,GACA,eACEC,IACE,EAAA9B,EAAA,IAAA,CAACf,EAAAA,OAAD,CAAQ,KAAK,SAAS,QAAQ,cAAc,QAAS6C,EAClD,SAAAtC,EAAA,sBAAwB,CAAE,aAAc,QAAS,CAAC,CAC7C,CAAA,CAGb,CAAA,EAIFgC,GAAiBG,IAAS,QAAUF,IACnC,EAAAzB,EAAA,IAAA,CAAChB,EAAAA,cAAD,CACE,aAAAS,EAAA,oBAAoC,CAAE,aAAc,MAAO,CAAC,EAC5D,UAAWsC,EACX,YAAaF,EACb,OAAA,EACD,CAAA,CAEH,CAAA,CAAA,EAGEG,EAAUL,IAAS,QAAU,CAACN,GAClC,EAAArB,EAAA,IAAA,CAACd,EAAAA,aAAD,CAAc,GAAI0B,EAChB,UAAA,EAAAZ,EAAA,IAAA,CAAC,OAAD,CAAM,SAAUY,EAAK,aAAa,GAAQqB,IAAWC,CAAI,CAAC,EAAI,SAAAd,EAAc,CAAQ,CAAA,CACxE,CAAA,EACZA,EAAc,EAUlB,OARIe,GAEA,EAAAnC,EAAA,IAAA,CAACb,EAAAA,cAAD,CAAe,IAAK8B,EAAwB,WAAqB,YAC9D,SAAAe,CACY,CAAA,GAKjB,EAAAhC,EAAA,IAAA,CAAC,MAAD,CAAK,IAAKiB,EAAyB,YAChC,SAAAe,CACE,CAAA,CAET,C"}
|
|
1
|
+
{"version":3,"file":"EnhancedDetailPage.cjs","names":["useForm","createAjvResolver","React","_Fragment","SchemaDetailPage","Collapsible","CollapsibleTrigger","ChevronDown","CollapsibleContent","FormActionBar","Button","FormProvider","FormContainer","require_runtime","require_ui_components_ui_button_components","require_ui_components_ui_collapsible","require_common_actions_create","require_common_actions_delete","require_common_actions_edit","require_common_actions_update","require_common_advanced","require_tools_components_form_form_container","require_tools_components_form_form_action_bar","require_tools_lib_schema_ajv","require_tools_components_schema_SchemaDetailPage","react_jsx_runtime","react","lucide_react","react_hook_form","separateAdvancedFields","standardProps","advancedProps","properties","schema","key","prop","EnhancedDetailPage","form","values","validation","advancedOpen","setAdvancedOpen","containerRef","hasAdvancedFields","advanced","renderContent","children","progressiveDisclosure","standard","stickyActions","showEditButton","useGrid","mode","submitLabel","onCancel","onDelete","onEdit","content","onSubmit","data","containerLayout"],"sources":["../../../../src/tools/components/form/EnhancedDetailPage.tsx"],"sourcesContent":["import * as React from 'react';\nimport { FormProvider, useForm, type FieldValues, type DefaultValues } from 'react-hook-form';\nimport { createAjvResolver, type SchemaFormValidationOptions } from '../../lib/schema/ajv';\nimport * as m from '../../paraglide/messages.js';\nimport { ChevronDown } from 'lucide-react';\n\nimport type { JSONSchema, JSONSchemaProperty } from '../../lib/schema/types';\nimport { FormContainer, type FormContainerWidth } from './form-container';\nimport { FormActionBar, type SaveStatus } from './form-action-bar';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '../ui/collapsible';\nimport { Button } from '../ui/button';\nimport { SchemaDetailPage } from '../schema/SchemaDetailPage';\nimport type { RelatedFieldConfig } from '../ui/form';\n\ntype DetailMode = 'view' | 'edit';\ntype GroupDisplay = 'heading' | 'card' | 'dropdown';\n\n/**\n * Form values, schema and presentation settings for {@link EnhancedDetailPage}.\n * @typeParam TFieldValues - React Hook Form field-value shape supplied to onSubmit.\n */\ninterface EnhancedDetailPageProps<TFieldValues extends FieldValues> {\n /** Opt into whole-record schema validation. */\n validation?: SchemaFormValidationOptions;\n /** JSON Schema definition with vendor extensions (x-ui, x-db, x-zod) */\n schema: JSONSchema;\n /** View renders details; edit renders form inputs. */\n mode: DetailMode;\n /** Initial values and later reset values; later updates preserve dirty fields. */\n values?: Partial<TFieldValues>;\n /** Submit action wording; defaults to update. */\n submitLabel?: 'create' | 'update';\n /** Called with form values after configured validation on submit; the host performs persistence. */\n onSubmit?: (values: TFieldValues) => void | Promise<void>;\n /** Called by the cancel action; the host handles navigation or rollback. */\n onCancel?: () => void;\n /** Called by the delete action; the host performs deletion. */\n onDelete?: () => void;\n /** Called by the edit action; the host updates mode. */\n onEdit?: () => void;\n /** Shows the view-mode edit action when true; defaults to false. */\n showEditButton?: boolean;\n /** Group presentation forwarded to SchemaDetailPage; omitted uses its default. */\n groupDisplay?: GroupDisplay;\n /** Related-field display and selection configuration forwarded to SchemaDetailPage. */\n relations?: Record<string, RelatedFieldConfig>;\n\n // 新しいレイアウトオプション\n\n /**\n * Wrap content in a centered FormContainer.\n * @defaultValue true\n */\n containerLayout?: boolean;\n /**\n * Maximum width preset when containerLayout is enabled.\n * @defaultValue \"4xl\"\n */\n maxWidth?: FormContainerWidth;\n /**\n * Use the sticky FormActionBar and hide ordinary generated actions.\n * @defaultValue false\n */\n stickyActions?: boolean;\n /**\n * Separate fields marked x-ui.advanced into a section initially collapsed.\n * @defaultValue true\n */\n progressiveDisclosure?: boolean;\n /**\n * Host-supplied save indicator; defaults to idle and does not track persistence automatically.\n */\n saveStatus?: SaveStatus;\n /**\n * Use SchemaDetailPage groupLayout full and columnMinWidth 300; false uses column layout.\n * @defaultValue true\n */\n useGrid?: boolean;\n /**\n * Reserved compatibility option; currently ignored. Changing it does not set columns.\n * Use useGrid to select the supported layout behavior.\n */\n gridColumns?: 1 | 2 | 3;\n\n /**\n * Replace generated content. The caller supplies its own form, submission wiring and providers.\n */\n children?: React.ReactNode;\n\n /** Additional classes on the outer container. */\n className?: string;\n}\n\n/**\n * 拡張されたフィールドを通常と高度に分離 (JSONSchema版)\n */\nconst separateAdvancedFields = (\n schema: JSONSchema,\n): { standard: JSONSchema; advanced: JSONSchema } => {\n const standardProps: Record<string, JSONSchemaProperty> = {};\n const advancedProps: Record<string, JSONSchemaProperty> = {};\n\n const properties = schema.properties || {};\n\n for (const [key, prop] of Object.entries(properties)) {\n if (prop['x-ui']?.advanced) {\n advancedProps[key] = prop;\n } else {\n standardProps[key] = prop;\n }\n }\n\n return {\n standard: { ...schema, properties: standardProps },\n advanced: { ...schema, title: `${schema.title || ''}_advanced`, properties: advancedProps },\n };\n};\n\n/**\n * Renders schema-driven view/edit content with an optional container, advanced fields and action bar.\n * @typeParam TFieldValues - React Hook Form value shape passed to the submit callback.\n * @param props - Schema, host-owned values/actions and layout settings; see EnhancedDetailPageProps.\n * @returns The detail content inside a centered container or plain div.\n * @remarks Import Appkit CSS. Generated edit content supplies its own React Hook Form provider\n * and form element; validation is opt-in via validation. Later values updates preserve dirty fields.\n * The host owns persistence, saveStatus, mode changes and errors from async onSubmit.\n * Custom children replace generated content and must supply their own form/provider wiring.\n * gridColumns is ignored; useGrid selects SchemaDetailPage layout and a 300px column minimum,\n * without guaranteeing an exact number of columns. No fixed two-column default is implemented.\n * @example\n * ```tsx\n * import { EnhancedDetailPage } from '@alneas/appkit-react/tools/form';\n * import '@alneas/appkit-react/styles';\n *\n * export function UserDetails() {\n * return <EnhancedDetailPage<{ name: string }> mode=\"view\"\n * schema={{ type: 'object', properties: { name: { type: 'string', title: 'Name' } } }}\n * values={{ name: 'Ada' }} />;\n * }\n * ```\n */\nexport function EnhancedDetailPage<TFieldValues extends FieldValues>({\n schema,\n validation,\n mode,\n values,\n submitLabel = 'update',\n onSubmit,\n onCancel,\n onDelete,\n onEdit,\n showEditButton = false,\n groupDisplay,\n relations,\n containerLayout = true,\n maxWidth = '4xl',\n stickyActions = false,\n progressiveDisclosure = true,\n saveStatus = 'idle',\n useGrid = true,\n children,\n className,\n}: EnhancedDetailPageProps<TFieldValues>) {\n const form = useForm<TFieldValues>({\n defaultValues: values as DefaultValues<TFieldValues>,\n resolver: validation ? createAjvResolver<TFieldValues>(schema, validation) : undefined,\n });\n const { dirtyFields } = form.formState;\n React.useEffect(() => { if (values) form.reset(values as TFieldValues, { keepDirtyValues: true }); }, [values, form]);\n void dirtyFields;\n const [advancedOpen, setAdvancedOpen] = React.useState(false);\n const containerRef = React.useRef<HTMLDivElement>(null);\n\n // プログレッシブディスクロージャー: 通常/高度フィールドを分離\n const { standard, advanced } = React.useMemo(() => separateAdvancedFields(schema), [schema]);\n const hasAdvancedFields = Object.keys(advanced.properties || {}).length > 0;\n\n const renderContent = () => (\n <>\n {/* カスタムコンテンツがある場合はそれを優先、ない場合はスキーマ駆動フォームを表示 */}\n {children ? (\n <div className='space-y-6'>{children}</div>\n ) : (\n <>\n {/* 標準フィールド */}\n <SchemaDetailPage\n form={form}\n schema={progressiveDisclosure ? standard : schema}\n mode={mode}\n values={values}\n submitLabel={submitLabel}\n onSubmit={onSubmit}\n onCancel={onCancel}\n onDelete={onDelete}\n onEdit={onEdit}\n showEditButton={!stickyActions && showEditButton}\n hideActions={stickyActions}\n groupDisplay={groupDisplay}\n groupLayout={useGrid ? 'full' : 'column'}\n columnMinWidth={useGrid ? 300 : undefined}\n relations={relations}\n />\n\n {/* 高度なフィールド (折りたたみ) */}\n {progressiveDisclosure && hasAdvancedFields && (\n <Collapsible\n open={advancedOpen}\n onOpenChange={setAdvancedOpen}\n className='mt-6 border-t pt-4'\n >\n <CollapsibleTrigger className='flex w-full items-center justify-between py-2 text-sm font-medium text-muted-foreground hover:text-foreground transition-colors'>\n <span>{m.common_advanced({ defaultValue: 'Advanced Settings' })}</span>\n <ChevronDown\n className={`h-4 w-4 transition-transform ${advancedOpen ? 'rotate-180' : ''}`}\n />\n </CollapsibleTrigger>\n <CollapsibleContent className='pt-4'>\n <SchemaDetailPage\n form={form}\n schema={advanced}\n mode={mode}\n values={values}\n groupDisplay={groupDisplay}\n groupLayout={useGrid ? 'full' : 'column'}\n columnMinWidth={useGrid ? 300 : undefined}\n relations={relations}\n />\n </CollapsibleContent>\n </Collapsible>\n )}\n </>\n )}\n\n {/* スティッキーアクションバー */}\n {stickyActions && mode === 'edit' && (\n <FormActionBar\n primaryLabel={\n submitLabel === 'create'\n ? m.common_actions_create({ defaultValue: 'Create' })\n : m.common_actions_update({ defaultValue: 'Update' })\n }\n onPrimary={children ? () => containerRef.current?.querySelector('form')?.requestSubmit() : undefined}\n onSecondary={onCancel}\n saveStatus={saveStatus}\n sticky\n tertiaryAction={\n onDelete && (\n <Button type='button' variant='destructive' onClick={onDelete}>\n {m.common_actions_delete({ defaultValue: 'Delete' })}\n </Button>\n )\n }\n />\n )}\n\n {/* View モードのアクション */}\n {stickyActions && mode === 'view' && showEditButton && (\n <FormActionBar\n primaryLabel={m.common_actions_edit({ defaultValue: 'Edit' })}\n onPrimary={onEdit}\n onSecondary={onCancel}\n sticky\n />\n )}\n </>\n );\n\n const content = mode === 'edit' && !children ? (\n <FormProvider {...form}>\n <form onSubmit={form.handleSubmit(data => onSubmit?.(data))}>{renderContent()}</form>\n </FormProvider>\n ) : renderContent();\n\n if (containerLayout) {\n return (\n <FormContainer ref={containerRef} maxWidth={maxWidth} className={className}>\n {content}\n </FormContainer>\n );\n }\n\n return (\n <div ref={containerRef} className={className}>\n {content}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -7,92 +7,97 @@ import { RelatedFieldConfig } from '../ui/form.cjs';
|
|
|
7
7
|
import * as React from 'react';
|
|
8
8
|
type DetailMode = 'view' | 'edit';
|
|
9
9
|
type GroupDisplay = 'heading' | 'card' | 'dropdown';
|
|
10
|
+
/**
|
|
11
|
+
* Form values, schema and presentation settings for {@link EnhancedDetailPage}.
|
|
12
|
+
* @typeParam TFieldValues - React Hook Form field-value shape supplied to onSubmit.
|
|
13
|
+
*/
|
|
10
14
|
interface EnhancedDetailPageProps<TFieldValues extends FieldValues> {
|
|
11
15
|
/** Opt into whole-record schema validation. */
|
|
12
16
|
validation?: SchemaFormValidationOptions;
|
|
13
17
|
/** JSON Schema definition with vendor extensions (x-ui, x-db, x-zod) */
|
|
14
18
|
schema: JSONSchema;
|
|
15
|
-
/**
|
|
19
|
+
/** View renders details; edit renders form inputs. */
|
|
16
20
|
mode: DetailMode;
|
|
17
|
-
/**
|
|
21
|
+
/** Initial values and later reset values; later updates preserve dirty fields. */
|
|
18
22
|
values?: Partial<TFieldValues>;
|
|
19
|
-
/**
|
|
23
|
+
/** Submit action wording; defaults to update. */
|
|
20
24
|
submitLabel?: 'create' | 'update';
|
|
21
|
-
/**
|
|
25
|
+
/** Called with form values after configured validation on submit; the host performs persistence. */
|
|
22
26
|
onSubmit?: (values: TFieldValues) => void | Promise<void>;
|
|
23
|
-
/**
|
|
27
|
+
/** Called by the cancel action; the host handles navigation or rollback. */
|
|
24
28
|
onCancel?: () => void;
|
|
25
|
-
/**
|
|
29
|
+
/** Called by the delete action; the host performs deletion. */
|
|
26
30
|
onDelete?: () => void;
|
|
27
|
-
/**
|
|
31
|
+
/** Called by the edit action; the host updates mode. */
|
|
28
32
|
onEdit?: () => void;
|
|
29
|
-
/**
|
|
33
|
+
/** Shows the view-mode edit action when true; defaults to false. */
|
|
30
34
|
showEditButton?: boolean;
|
|
31
|
-
/**
|
|
35
|
+
/** Group presentation forwarded to SchemaDetailPage; omitted uses its default. */
|
|
32
36
|
groupDisplay?: GroupDisplay;
|
|
33
|
-
/**
|
|
37
|
+
/** Related-field display and selection configuration forwarded to SchemaDetailPage. */
|
|
34
38
|
relations?: Record<string, RelatedFieldConfig>;
|
|
35
39
|
/**
|
|
36
|
-
*
|
|
37
|
-
* @
|
|
40
|
+
* Wrap content in a centered FormContainer.
|
|
41
|
+
* @defaultValue true
|
|
38
42
|
*/
|
|
39
43
|
containerLayout?: boolean;
|
|
40
44
|
/**
|
|
41
|
-
*
|
|
42
|
-
* @
|
|
45
|
+
* Maximum width preset when containerLayout is enabled.
|
|
46
|
+
* @defaultValue "4xl"
|
|
43
47
|
*/
|
|
44
48
|
maxWidth?: FormContainerWidth;
|
|
45
49
|
/**
|
|
46
|
-
*
|
|
47
|
-
* @
|
|
50
|
+
* Use the sticky FormActionBar and hide ordinary generated actions.
|
|
51
|
+
* @defaultValue false
|
|
48
52
|
*/
|
|
49
53
|
stickyActions?: boolean;
|
|
50
54
|
/**
|
|
51
|
-
*
|
|
52
|
-
* @
|
|
55
|
+
* Separate fields marked x-ui.advanced into a section initially collapsed.
|
|
56
|
+
* @defaultValue true
|
|
53
57
|
*/
|
|
54
58
|
progressiveDisclosure?: boolean;
|
|
55
59
|
/**
|
|
56
|
-
*
|
|
60
|
+
* Host-supplied save indicator; defaults to idle and does not track persistence automatically.
|
|
57
61
|
*/
|
|
58
62
|
saveStatus?: SaveStatus;
|
|
59
63
|
/**
|
|
60
|
-
*
|
|
61
|
-
* @
|
|
64
|
+
* Use SchemaDetailPage groupLayout full and columnMinWidth 300; false uses column layout.
|
|
65
|
+
* @defaultValue true
|
|
62
66
|
*/
|
|
63
67
|
useGrid?: boolean;
|
|
64
68
|
/**
|
|
65
|
-
*
|
|
66
|
-
*
|
|
69
|
+
* Reserved compatibility option; currently ignored. Changing it does not set columns.
|
|
70
|
+
* Use useGrid to select the supported layout behavior.
|
|
67
71
|
*/
|
|
68
72
|
gridColumns?: 1 | 2 | 3;
|
|
69
73
|
/**
|
|
70
|
-
*
|
|
74
|
+
* Replace generated content. The caller supplies its own form, submission wiring and providers.
|
|
71
75
|
*/
|
|
72
76
|
children?: React.ReactNode;
|
|
77
|
+
/** Additional classes on the outer container. */
|
|
73
78
|
className?: string;
|
|
74
79
|
}
|
|
75
80
|
/**
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
* -
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
*
|
|
81
|
+
* Renders schema-driven view/edit content with an optional container, advanced fields and action bar.
|
|
82
|
+
* @typeParam TFieldValues - React Hook Form value shape passed to the submit callback.
|
|
83
|
+
* @param props - Schema, host-owned values/actions and layout settings; see EnhancedDetailPageProps.
|
|
84
|
+
* @returns The detail content inside a centered container or plain div.
|
|
85
|
+
* @remarks Import Appkit CSS. Generated edit content supplies its own React Hook Form provider
|
|
86
|
+
* and form element; validation is opt-in via validation. Later values updates preserve dirty fields.
|
|
87
|
+
* The host owns persistence, saveStatus, mode changes and errors from async onSubmit.
|
|
88
|
+
* Custom children replace generated content and must supply their own form/provider wiring.
|
|
89
|
+
* gridColumns is ignored; useGrid selects SchemaDetailPage layout and a 300px column minimum,
|
|
90
|
+
* without guaranteeing an exact number of columns. No fixed two-column default is implemented.
|
|
85
91
|
* @example
|
|
86
92
|
* ```tsx
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
* />
|
|
93
|
+
* import { EnhancedDetailPage } from '@alneas/appkit-react/tools/form';
|
|
94
|
+
* import '@alneas/appkit-react/styles';
|
|
95
|
+
*
|
|
96
|
+
* export function UserDetails() {
|
|
97
|
+
* return <EnhancedDetailPage<{ name: string }> mode="view"
|
|
98
|
+
* schema={{ type: 'object', properties: { name: { type: 'string', title: 'Name' } } }}
|
|
99
|
+
* values={{ name: 'Ada' }} />;
|
|
100
|
+
* }
|
|
96
101
|
* ```
|
|
97
102
|
*/
|
|
98
103
|
export declare function EnhancedDetailPage<TFieldValues extends FieldValues>({ schema, validation, mode, values, submitLabel, onSubmit, onCancel, onDelete, onEdit, showEditButton, groupDisplay, relations, containerLayout, maxWidth, stickyActions, progressiveDisclosure, saveStatus, useGrid, children, className, }: EnhancedDetailPageProps<TFieldValues>): React.JSX.Element;
|
|
@@ -7,92 +7,97 @@ import { RelatedFieldConfig } from '../ui/form.js';
|
|
|
7
7
|
import * as React from 'react';
|
|
8
8
|
type DetailMode = 'view' | 'edit';
|
|
9
9
|
type GroupDisplay = 'heading' | 'card' | 'dropdown';
|
|
10
|
+
/**
|
|
11
|
+
* Form values, schema and presentation settings for {@link EnhancedDetailPage}.
|
|
12
|
+
* @typeParam TFieldValues - React Hook Form field-value shape supplied to onSubmit.
|
|
13
|
+
*/
|
|
10
14
|
interface EnhancedDetailPageProps<TFieldValues extends FieldValues> {
|
|
11
15
|
/** Opt into whole-record schema validation. */
|
|
12
16
|
validation?: SchemaFormValidationOptions;
|
|
13
17
|
/** JSON Schema definition with vendor extensions (x-ui, x-db, x-zod) */
|
|
14
18
|
schema: JSONSchema;
|
|
15
|
-
/**
|
|
19
|
+
/** View renders details; edit renders form inputs. */
|
|
16
20
|
mode: DetailMode;
|
|
17
|
-
/**
|
|
21
|
+
/** Initial values and later reset values; later updates preserve dirty fields. */
|
|
18
22
|
values?: Partial<TFieldValues>;
|
|
19
|
-
/**
|
|
23
|
+
/** Submit action wording; defaults to update. */
|
|
20
24
|
submitLabel?: 'create' | 'update';
|
|
21
|
-
/**
|
|
25
|
+
/** Called with form values after configured validation on submit; the host performs persistence. */
|
|
22
26
|
onSubmit?: (values: TFieldValues) => void | Promise<void>;
|
|
23
|
-
/**
|
|
27
|
+
/** Called by the cancel action; the host handles navigation or rollback. */
|
|
24
28
|
onCancel?: () => void;
|
|
25
|
-
/**
|
|
29
|
+
/** Called by the delete action; the host performs deletion. */
|
|
26
30
|
onDelete?: () => void;
|
|
27
|
-
/**
|
|
31
|
+
/** Called by the edit action; the host updates mode. */
|
|
28
32
|
onEdit?: () => void;
|
|
29
|
-
/**
|
|
33
|
+
/** Shows the view-mode edit action when true; defaults to false. */
|
|
30
34
|
showEditButton?: boolean;
|
|
31
|
-
/**
|
|
35
|
+
/** Group presentation forwarded to SchemaDetailPage; omitted uses its default. */
|
|
32
36
|
groupDisplay?: GroupDisplay;
|
|
33
|
-
/**
|
|
37
|
+
/** Related-field display and selection configuration forwarded to SchemaDetailPage. */
|
|
34
38
|
relations?: Record<string, RelatedFieldConfig>;
|
|
35
39
|
/**
|
|
36
|
-
*
|
|
37
|
-
* @
|
|
40
|
+
* Wrap content in a centered FormContainer.
|
|
41
|
+
* @defaultValue true
|
|
38
42
|
*/
|
|
39
43
|
containerLayout?: boolean;
|
|
40
44
|
/**
|
|
41
|
-
*
|
|
42
|
-
* @
|
|
45
|
+
* Maximum width preset when containerLayout is enabled.
|
|
46
|
+
* @defaultValue "4xl"
|
|
43
47
|
*/
|
|
44
48
|
maxWidth?: FormContainerWidth;
|
|
45
49
|
/**
|
|
46
|
-
*
|
|
47
|
-
* @
|
|
50
|
+
* Use the sticky FormActionBar and hide ordinary generated actions.
|
|
51
|
+
* @defaultValue false
|
|
48
52
|
*/
|
|
49
53
|
stickyActions?: boolean;
|
|
50
54
|
/**
|
|
51
|
-
*
|
|
52
|
-
* @
|
|
55
|
+
* Separate fields marked x-ui.advanced into a section initially collapsed.
|
|
56
|
+
* @defaultValue true
|
|
53
57
|
*/
|
|
54
58
|
progressiveDisclosure?: boolean;
|
|
55
59
|
/**
|
|
56
|
-
*
|
|
60
|
+
* Host-supplied save indicator; defaults to idle and does not track persistence automatically.
|
|
57
61
|
*/
|
|
58
62
|
saveStatus?: SaveStatus;
|
|
59
63
|
/**
|
|
60
|
-
*
|
|
61
|
-
* @
|
|
64
|
+
* Use SchemaDetailPage groupLayout full and columnMinWidth 300; false uses column layout.
|
|
65
|
+
* @defaultValue true
|
|
62
66
|
*/
|
|
63
67
|
useGrid?: boolean;
|
|
64
68
|
/**
|
|
65
|
-
*
|
|
66
|
-
*
|
|
69
|
+
* Reserved compatibility option; currently ignored. Changing it does not set columns.
|
|
70
|
+
* Use useGrid to select the supported layout behavior.
|
|
67
71
|
*/
|
|
68
72
|
gridColumns?: 1 | 2 | 3;
|
|
69
73
|
/**
|
|
70
|
-
*
|
|
74
|
+
* Replace generated content. The caller supplies its own form, submission wiring and providers.
|
|
71
75
|
*/
|
|
72
76
|
children?: React.ReactNode;
|
|
77
|
+
/** Additional classes on the outer container. */
|
|
73
78
|
className?: string;
|
|
74
79
|
}
|
|
75
80
|
/**
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
* -
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
*
|
|
81
|
+
* Renders schema-driven view/edit content with an optional container, advanced fields and action bar.
|
|
82
|
+
* @typeParam TFieldValues - React Hook Form value shape passed to the submit callback.
|
|
83
|
+
* @param props - Schema, host-owned values/actions and layout settings; see EnhancedDetailPageProps.
|
|
84
|
+
* @returns The detail content inside a centered container or plain div.
|
|
85
|
+
* @remarks Import Appkit CSS. Generated edit content supplies its own React Hook Form provider
|
|
86
|
+
* and form element; validation is opt-in via validation. Later values updates preserve dirty fields.
|
|
87
|
+
* The host owns persistence, saveStatus, mode changes and errors from async onSubmit.
|
|
88
|
+
* Custom children replace generated content and must supply their own form/provider wiring.
|
|
89
|
+
* gridColumns is ignored; useGrid selects SchemaDetailPage layout and a 300px column minimum,
|
|
90
|
+
* without guaranteeing an exact number of columns. No fixed two-column default is implemented.
|
|
85
91
|
* @example
|
|
86
92
|
* ```tsx
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
* />
|
|
93
|
+
* import { EnhancedDetailPage } from '@alneas/appkit-react/tools/form';
|
|
94
|
+
* import '@alneas/appkit-react/styles';
|
|
95
|
+
*
|
|
96
|
+
* export function UserDetails() {
|
|
97
|
+
* return <EnhancedDetailPage<{ name: string }> mode="view"
|
|
98
|
+
* schema={{ type: 'object', properties: { name: { type: 'string', title: 'Name' } } }}
|
|
99
|
+
* values={{ name: 'Ada' }} />;
|
|
100
|
+
* }
|
|
96
101
|
* ```
|
|
97
102
|
*/
|
|
98
103
|
export declare function EnhancedDetailPage<TFieldValues extends FieldValues>({ schema, validation, mode, values, submitLabel, onSubmit, onCancel, onDelete, onEdit, showEditButton, groupDisplay, relations, containerLayout, maxWidth, stickyActions, progressiveDisclosure, saveStatus, useGrid, children, className, }: EnhancedDetailPageProps<TFieldValues>): React.JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EnhancedDetailPage.js","names":["React","_Fragment","m.common_advanced","m.common_actions_create","m.common_actions_update","m.common_actions_delete","m.common_actions_edit","React$1","separateAdvancedFields","standardProps","advancedProps","properties","schema","key","prop","EnhancedDetailPage","form","useForm","values","validation","createAjvResolver","advancedOpen","setAdvancedOpen","containerRef","hasAdvancedFields","advanced","renderContent","Fragment","children","SchemaDetailPage","progressiveDisclosure","standard","stickyActions","showEditButton","useGrid","Collapsible","CollapsibleTrigger","common_advanced","ChevronDown","CollapsibleContent","mode","FormActionBar","submitLabel","common_actions_create","common_actions_update","onCancel","onDelete","Button","common_actions_delete","common_actions_edit","onEdit","content","FormProvider","onSubmit","data","containerLayout","FormContainer"],"sources":["../../../../src/tools/components/form/EnhancedDetailPage.tsx"],"sourcesContent":["import * as React from 'react';\nimport { FormProvider, useForm, type FieldValues, type DefaultValues } from 'react-hook-form';\nimport { createAjvResolver, type SchemaFormValidationOptions } from '../../lib/schema/ajv';\nimport * as m from '../../paraglide/messages.js';\nimport { ChevronDown } from 'lucide-react';\n\nimport type { JSONSchema, JSONSchemaProperty } from '../../lib/schema/types';\nimport { FormContainer, type FormContainerWidth } from './form-container';\nimport { FormActionBar, type SaveStatus } from './form-action-bar';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '../ui/collapsible';\nimport { Button } from '../ui/button';\nimport { SchemaDetailPage } from '../schema/SchemaDetailPage';\nimport type { RelatedFieldConfig } from '../ui/form';\n\ntype DetailMode = 'view' | 'edit';\ntype GroupDisplay = 'heading' | 'card' | 'dropdown';\n\ninterface EnhancedDetailPageProps<TFieldValues extends FieldValues> {\n /** Opt into whole-record schema validation. */\n validation?: SchemaFormValidationOptions;\n /** JSON Schema definition with vendor extensions (x-ui, x-db, x-zod) */\n schema: JSONSchema;\n /** 表示モード */\n mode: DetailMode;\n /** 現在の値 */\n values?: Partial<TFieldValues>;\n /** 送信ボタンのラベル */\n submitLabel?: 'create' | 'update';\n /** フォーム送信時のハンドラ */\n onSubmit?: (values: TFieldValues) => void | Promise<void>;\n /** キャンセル時のハンドラ */\n onCancel?: () => void;\n /** 削除時のハンドラ */\n onDelete?: () => void;\n /** 編集モード切り替えハンドラ */\n onEdit?: () => void;\n /** 編集ボタンを表示 */\n showEditButton?: boolean;\n /** グループ表示スタイル */\n groupDisplay?: GroupDisplay;\n /** リレーションデータ */\n relations?: Record<string, RelatedFieldConfig>;\n\n // 新しいレイアウトオプション\n\n /**\n * 中央揃えコンテナレイアウトを使用\n * @default true\n */\n containerLayout?: boolean;\n /**\n * コンテナの最大幅\n * @default \"4xl\"\n */\n maxWidth?: FormContainerWidth;\n /**\n * スティッキーアクションバーを有効化\n * @default false\n */\n stickyActions?: boolean;\n /**\n * プログレッシブディスクロージャー (advanced フィールドを折りたたみ)\n * @default true\n */\n progressiveDisclosure?: boolean;\n /**\n * 保存状態インジケーター\n */\n saveStatus?: SaveStatus;\n /**\n * レスポンシブグリッドを使用 (field.width を考慮)\n * @default true\n */\n useGrid?: boolean;\n /**\n * グリッドの列数\n * @default 2\n */\n gridColumns?: 1 | 2 | 3;\n\n /**\n * カスタムフォームコンテンツ (schema による自動生成を上書き)\n */\n children?: React.ReactNode;\n\n className?: string;\n}\n\n/**\n * 拡張されたフィールドを通常と高度に分離 (JSONSchema版)\n */\nconst separateAdvancedFields = (\n schema: JSONSchema,\n): { standard: JSONSchema; advanced: JSONSchema } => {\n const standardProps: Record<string, JSONSchemaProperty> = {};\n const advancedProps: Record<string, JSONSchemaProperty> = {};\n\n const properties = schema.properties || {};\n\n for (const [key, prop] of Object.entries(properties)) {\n if (prop['x-ui']?.advanced) {\n advancedProps[key] = prop;\n } else {\n standardProps[key] = prop;\n }\n }\n\n return {\n standard: { ...schema, properties: standardProps },\n advanced: { ...schema, title: `${schema.title || ''}_advanced`, properties: advancedProps },\n };\n};\n\n/**\n * デスクトップ最適化された詳細/編集ページコンポーネント\n *\n * UXベストプラクティスに基づく拡張レイアウト機能:\n * - 中央揃えの読みやすいコンテナ幅\n * - レスポンシブグリッドレイアウト (モバイル1列、デスクトップ2列)\n * - プログレッシブディスクロージャー (advanced フィールドの折りたたみ)\n * - スティッキーアクションバー\n * - 保存状態インジケーター\n *\n * @example\n * ```tsx\n * <EnhancedDetailPage\n * schema={userSchema}\n * mode=\"edit\"\n * values={userData}\n * onSubmit={handleSave}\n * containerLayout\n * stickyActions\n * progressiveDisclosure\n * />\n * ```\n */\nexport function EnhancedDetailPage<TFieldValues extends FieldValues>({\n schema,\n validation,\n mode,\n values,\n submitLabel = 'update',\n onSubmit,\n onCancel,\n onDelete,\n onEdit,\n showEditButton = false,\n groupDisplay,\n relations,\n containerLayout = true,\n maxWidth = '4xl',\n stickyActions = false,\n progressiveDisclosure = true,\n saveStatus = 'idle',\n useGrid = true,\n children,\n className,\n}: EnhancedDetailPageProps<TFieldValues>) {\n const form = useForm<TFieldValues>({\n defaultValues: values as DefaultValues<TFieldValues>,\n resolver: validation ? createAjvResolver<TFieldValues>(schema, validation) : undefined,\n });\n const { dirtyFields } = form.formState;\n React.useEffect(() => { if (values) form.reset(values as TFieldValues, { keepDirtyValues: true }); }, [values, form]);\n void dirtyFields;\n const [advancedOpen, setAdvancedOpen] = React.useState(false);\n const containerRef = React.useRef<HTMLDivElement>(null);\n\n // プログレッシブディスクロージャー: 通常/高度フィールドを分離\n const { standard, advanced } = React.useMemo(() => separateAdvancedFields(schema), [schema]);\n const hasAdvancedFields = Object.keys(advanced.properties || {}).length > 0;\n\n const renderContent = () => (\n <>\n {/* カスタムコンテンツがある場合はそれを優先、ない場合はスキーマ駆動フォームを表示 */}\n {children ? (\n <div className='space-y-6'>{children}</div>\n ) : (\n <>\n {/* 標準フィールド */}\n <SchemaDetailPage\n form={form}\n schema={progressiveDisclosure ? standard : schema}\n mode={mode}\n values={values}\n submitLabel={submitLabel}\n onSubmit={onSubmit}\n onCancel={onCancel}\n onDelete={onDelete}\n onEdit={onEdit}\n showEditButton={!stickyActions && showEditButton}\n hideActions={stickyActions}\n groupDisplay={groupDisplay}\n groupLayout={useGrid ? 'full' : 'column'}\n columnMinWidth={useGrid ? 300 : undefined}\n relations={relations}\n />\n\n {/* 高度なフィールド (折りたたみ) */}\n {progressiveDisclosure && hasAdvancedFields && (\n <Collapsible\n open={advancedOpen}\n onOpenChange={setAdvancedOpen}\n className='mt-6 border-t pt-4'\n >\n <CollapsibleTrigger className='flex w-full items-center justify-between py-2 text-sm font-medium text-muted-foreground hover:text-foreground transition-colors'>\n <span>{m.common_advanced({ defaultValue: 'Advanced Settings' })}</span>\n <ChevronDown\n className={`h-4 w-4 transition-transform ${advancedOpen ? 'rotate-180' : ''}`}\n />\n </CollapsibleTrigger>\n <CollapsibleContent className='pt-4'>\n <SchemaDetailPage\n form={form}\n schema={advanced}\n mode={mode}\n values={values}\n groupDisplay={groupDisplay}\n groupLayout={useGrid ? 'full' : 'column'}\n columnMinWidth={useGrid ? 300 : undefined}\n relations={relations}\n />\n </CollapsibleContent>\n </Collapsible>\n )}\n </>\n )}\n\n {/* スティッキーアクションバー */}\n {stickyActions && mode === 'edit' && (\n <FormActionBar\n primaryLabel={\n submitLabel === 'create'\n ? m.common_actions_create({ defaultValue: 'Create' })\n : m.common_actions_update({ defaultValue: 'Update' })\n }\n onPrimary={children ? () => containerRef.current?.querySelector('form')?.requestSubmit() : undefined}\n onSecondary={onCancel}\n saveStatus={saveStatus}\n sticky\n tertiaryAction={\n onDelete && (\n <Button type='button' variant='destructive' onClick={onDelete}>\n {m.common_actions_delete({ defaultValue: 'Delete' })}\n </Button>\n )\n }\n />\n )}\n\n {/* View モードのアクション */}\n {stickyActions && mode === 'view' && showEditButton && (\n <FormActionBar\n primaryLabel={m.common_actions_edit({ defaultValue: 'Edit' })}\n onPrimary={onEdit}\n onSecondary={onCancel}\n sticky\n />\n )}\n </>\n );\n\n const content = mode === 'edit' && !children ? (\n <FormProvider {...form}>\n <form onSubmit={form.handleSubmit(data => onSubmit?.(data))}>{renderContent()}</form>\n </FormProvider>\n ) : renderContent();\n\n if (containerLayout) {\n return (\n <FormContainer ref={containerRef} maxWidth={maxWidth} className={className}>\n {content}\n </FormContainer>\n );\n }\n\n return (\n <div ref={containerRef} className={className}>\n {content}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AA2FA,IAAMQ,KACJ,MACmD;CACnD,IAAMC,IAAoD,CAAC,GACrDC,IAAoD,CAAC,GAErDC,IAAaC,EAAO,cAAc,CAAC;CAEzC,KAAK,IAAM,CAACC,GAAKC,MAAS,OAAO,QAAQH,CAAU,GACjD,AAAIG,EAAK,OAAO,EAAE,WAChB,EAAcD,KAAOC,IAErB,EAAcD,KAAOC;CAIzB,OAAO;EACL,UAAU;GAAE,GAAGF;GAAQ,YAAYH;EAAc;EACjD,UAAU;GAAE,GAAGG;GAAQ,OAAO,GAAGA,EAAO,SAAS,GAAG;GAAY,YAAYF;EAAc;CAC5F;AACF;AAyBA,SAAgBK,EAAqD,EACnE,WACA,eACA,SACA,WACA,iBAAc,UACd,aACA,aACA,aACA,WACA,oBAAiB,IACjB,iBACA,cACA,qBAAkB,IAClB,cAAW,OACX,mBAAgB,IAChB,2BAAwB,IACxB,gBAAa,QACb,aAAU,IACV,aACA,gBACwC;CACxC,IAAMC,IAAOC,EAAsB;EACjC,eAAeC;EACf,UAAUC,IAAaC,EAAgCR,GAAQO,CAAU,IAAI,KAAA;CAC/E,CAAC,GACK,EAAE,mBAAgBH,EAAK;CAC7B,EAAM,gBAAgB;EAAE,AAAIE,KAAQF,EAAK,MAAME,GAAwB,EAAE,iBAAiB,GAAK,CAAC;CAAG,GAAG,CAACA,GAAQF,CAAI,CAAC;CAEpH,IAAM,CAACK,GAAcC,KAAmBtB,EAAM,SAAS,EAAK,GACtDuB,IAAevB,EAAM,OAAuB,IAAI,GAGhD,EAAE,aAAU,gBAAaA,EAAM,cAAcQ,EAAuBI,CAAM,GAAG,CAACA,CAAM,CAAC,GACrFY,IAAoB,OAAO,KAAKC,EAAS,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,GAEpEC,UACJ,kBAAAzB,GAAA,EAAA,UAAA;EAEG2B,IACC,kBAAC,OAAD;GAAK,WAAU;GAAa;EAAc,CAAA,IAE1C,kBAAA3B,GAAA,EAAA,UAAA,CAEE,kBAAC4B,GAAD;GACQ;GACN,QAAQC,IAAwBC,IAAWnB;GACrC;GACE;GACK;GACH;GACA;GACA;GACF;GACR,gBAAgB,CAACoB,KAAiBC;GAClC,aAAaD;GACC;GACd,aAAaE,IAAU,SAAS;GAChC,gBAAgBA,IAAU,MAAM,KAAA;GACrB;EACZ,CAAA,GAGAJ,KAAyBN,KACxB,kBAACW,GAAD;GACE,MAAMd;GACN,cAAcC;GACd,WAAU;GAHZ,UAAA,CAKE,kBAACc,GAAD;IAAoB,WAAU;IAA9B,UAAA,CACE,kBAAC,QAAD,EAAA,UAAOlC,EAAkB,EAAE,cAAc,oBAAoB,CAAC,EAAQ,CAAA,GACtE,kBAACoC,GAAD,EACE,WAAW,gCAAgCjB,IAAe,eAAe,KAC1E,CAAA,CACiB;GACpB,CAAA,GAAA,kBAACkB,GAAD;IAAoB,WAAU;IAC5B,UAAA,kBAACV,GAAD;KACQ;KACN,QAAQJ;KACF;KACE;KACM;KACd,aAAaS,IAAU,SAAS;KAChC,gBAAgBA,IAAU,MAAM,KAAA;KACrB;IACZ,CAAA;GACiB,CAAA,CACT;EAEf,CAAA,CAAA,EAAA,CAAA;EAIHF,KAAiBQ,MAAS,UACzB,kBAACC,GAAD;GACE,cACEC,MAAgB,WACZvC,EAAwB,EAAE,cAAc,SAAS,CAAC,IAClDC,EAAwB,EAAE,cAAc,SAAS,CAAC;GAExD,WAAWwB,UAAiBL,EAAa,SAAS,cAAc,MAAM,CAAC,EAAE,cAAc,IAAI,KAAA;GAC3F,aAAasB;GACD;GACZ,QAAA;GACA,gBACEC,KACE,kBAACC,GAAD;IAAQ,MAAK;IAAS,SAAQ;IAAc,SAASD;IAClD,UAAAzC,EAAwB,EAAE,cAAc,SAAS,CAAC;GAC7C,CAAA;EAGb,CAAA;EAIF2B,KAAiBQ,MAAS,UAAUP,KACnC,kBAACQ,GAAD;GACE,cAAcnC,EAAsB,EAAE,cAAc,OAAO,CAAC;GAC5D,WAAW4C;GACX,aAAaL;GACb,QAAA;EACD,CAAA;CAEH,EAAA,CAAA,GAGEM,IAAUX,MAAS,UAAU,CAACZ,IAClC,kBAACwB,GAAD;EAAc,GAAIpC;EAChB,UAAA,kBAAC,QAAD;GAAM,UAAUA,EAAK,cAAa,MAAQqC,IAAWC,CAAI,CAAC;GAAI,UAAA5B,EAAc;EAAQ,CAAA;CACxE,CAAA,IACZA,EAAc;CAUlB,OARI6B,IAEA,kBAACC,GAAD;EAAe,KAAKjC;EAAwB;EAAqB;EAC9D,UAAA4B;CACY,CAAA,IAKjB,kBAAC,OAAD;EAAK,KAAK5B;EAAyB;EAChC,UAAA4B;CACE,CAAA;AAET"}
|
|
1
|
+
{"version":3,"file":"EnhancedDetailPage.js","names":["React","_Fragment","m.common_advanced","m.common_actions_create","m.common_actions_update","m.common_actions_delete","m.common_actions_edit","React$1","separateAdvancedFields","standardProps","advancedProps","properties","schema","key","prop","EnhancedDetailPage","form","useForm","values","validation","createAjvResolver","advancedOpen","setAdvancedOpen","containerRef","hasAdvancedFields","advanced","renderContent","Fragment","children","SchemaDetailPage","progressiveDisclosure","standard","stickyActions","showEditButton","useGrid","Collapsible","CollapsibleTrigger","common_advanced","ChevronDown","CollapsibleContent","mode","FormActionBar","submitLabel","common_actions_create","common_actions_update","onCancel","onDelete","Button","common_actions_delete","common_actions_edit","onEdit","content","FormProvider","onSubmit","data","containerLayout","FormContainer"],"sources":["../../../../src/tools/components/form/EnhancedDetailPage.tsx"],"sourcesContent":["import * as React from 'react';\nimport { FormProvider, useForm, type FieldValues, type DefaultValues } from 'react-hook-form';\nimport { createAjvResolver, type SchemaFormValidationOptions } from '../../lib/schema/ajv';\nimport * as m from '../../paraglide/messages.js';\nimport { ChevronDown } from 'lucide-react';\n\nimport type { JSONSchema, JSONSchemaProperty } from '../../lib/schema/types';\nimport { FormContainer, type FormContainerWidth } from './form-container';\nimport { FormActionBar, type SaveStatus } from './form-action-bar';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '../ui/collapsible';\nimport { Button } from '../ui/button';\nimport { SchemaDetailPage } from '../schema/SchemaDetailPage';\nimport type { RelatedFieldConfig } from '../ui/form';\n\ntype DetailMode = 'view' | 'edit';\ntype GroupDisplay = 'heading' | 'card' | 'dropdown';\n\n/**\n * Form values, schema and presentation settings for {@link EnhancedDetailPage}.\n * @typeParam TFieldValues - React Hook Form field-value shape supplied to onSubmit.\n */\ninterface EnhancedDetailPageProps<TFieldValues extends FieldValues> {\n /** Opt into whole-record schema validation. */\n validation?: SchemaFormValidationOptions;\n /** JSON Schema definition with vendor extensions (x-ui, x-db, x-zod) */\n schema: JSONSchema;\n /** View renders details; edit renders form inputs. */\n mode: DetailMode;\n /** Initial values and later reset values; later updates preserve dirty fields. */\n values?: Partial<TFieldValues>;\n /** Submit action wording; defaults to update. */\n submitLabel?: 'create' | 'update';\n /** Called with form values after configured validation on submit; the host performs persistence. */\n onSubmit?: (values: TFieldValues) => void | Promise<void>;\n /** Called by the cancel action; the host handles navigation or rollback. */\n onCancel?: () => void;\n /** Called by the delete action; the host performs deletion. */\n onDelete?: () => void;\n /** Called by the edit action; the host updates mode. */\n onEdit?: () => void;\n /** Shows the view-mode edit action when true; defaults to false. */\n showEditButton?: boolean;\n /** Group presentation forwarded to SchemaDetailPage; omitted uses its default. */\n groupDisplay?: GroupDisplay;\n /** Related-field display and selection configuration forwarded to SchemaDetailPage. */\n relations?: Record<string, RelatedFieldConfig>;\n\n // 新しいレイアウトオプション\n\n /**\n * Wrap content in a centered FormContainer.\n * @defaultValue true\n */\n containerLayout?: boolean;\n /**\n * Maximum width preset when containerLayout is enabled.\n * @defaultValue \"4xl\"\n */\n maxWidth?: FormContainerWidth;\n /**\n * Use the sticky FormActionBar and hide ordinary generated actions.\n * @defaultValue false\n */\n stickyActions?: boolean;\n /**\n * Separate fields marked x-ui.advanced into a section initially collapsed.\n * @defaultValue true\n */\n progressiveDisclosure?: boolean;\n /**\n * Host-supplied save indicator; defaults to idle and does not track persistence automatically.\n */\n saveStatus?: SaveStatus;\n /**\n * Use SchemaDetailPage groupLayout full and columnMinWidth 300; false uses column layout.\n * @defaultValue true\n */\n useGrid?: boolean;\n /**\n * Reserved compatibility option; currently ignored. Changing it does not set columns.\n * Use useGrid to select the supported layout behavior.\n */\n gridColumns?: 1 | 2 | 3;\n\n /**\n * Replace generated content. The caller supplies its own form, submission wiring and providers.\n */\n children?: React.ReactNode;\n\n /** Additional classes on the outer container. */\n className?: string;\n}\n\n/**\n * 拡張されたフィールドを通常と高度に分離 (JSONSchema版)\n */\nconst separateAdvancedFields = (\n schema: JSONSchema,\n): { standard: JSONSchema; advanced: JSONSchema } => {\n const standardProps: Record<string, JSONSchemaProperty> = {};\n const advancedProps: Record<string, JSONSchemaProperty> = {};\n\n const properties = schema.properties || {};\n\n for (const [key, prop] of Object.entries(properties)) {\n if (prop['x-ui']?.advanced) {\n advancedProps[key] = prop;\n } else {\n standardProps[key] = prop;\n }\n }\n\n return {\n standard: { ...schema, properties: standardProps },\n advanced: { ...schema, title: `${schema.title || ''}_advanced`, properties: advancedProps },\n };\n};\n\n/**\n * Renders schema-driven view/edit content with an optional container, advanced fields and action bar.\n * @typeParam TFieldValues - React Hook Form value shape passed to the submit callback.\n * @param props - Schema, host-owned values/actions and layout settings; see EnhancedDetailPageProps.\n * @returns The detail content inside a centered container or plain div.\n * @remarks Import Appkit CSS. Generated edit content supplies its own React Hook Form provider\n * and form element; validation is opt-in via validation. Later values updates preserve dirty fields.\n * The host owns persistence, saveStatus, mode changes and errors from async onSubmit.\n * Custom children replace generated content and must supply their own form/provider wiring.\n * gridColumns is ignored; useGrid selects SchemaDetailPage layout and a 300px column minimum,\n * without guaranteeing an exact number of columns. No fixed two-column default is implemented.\n * @example\n * ```tsx\n * import { EnhancedDetailPage } from '@alneas/appkit-react/tools/form';\n * import '@alneas/appkit-react/styles';\n *\n * export function UserDetails() {\n * return <EnhancedDetailPage<{ name: string }> mode=\"view\"\n * schema={{ type: 'object', properties: { name: { type: 'string', title: 'Name' } } }}\n * values={{ name: 'Ada' }} />;\n * }\n * ```\n */\nexport function EnhancedDetailPage<TFieldValues extends FieldValues>({\n schema,\n validation,\n mode,\n values,\n submitLabel = 'update',\n onSubmit,\n onCancel,\n onDelete,\n onEdit,\n showEditButton = false,\n groupDisplay,\n relations,\n containerLayout = true,\n maxWidth = '4xl',\n stickyActions = false,\n progressiveDisclosure = true,\n saveStatus = 'idle',\n useGrid = true,\n children,\n className,\n}: EnhancedDetailPageProps<TFieldValues>) {\n const form = useForm<TFieldValues>({\n defaultValues: values as DefaultValues<TFieldValues>,\n resolver: validation ? createAjvResolver<TFieldValues>(schema, validation) : undefined,\n });\n const { dirtyFields } = form.formState;\n React.useEffect(() => { if (values) form.reset(values as TFieldValues, { keepDirtyValues: true }); }, [values, form]);\n void dirtyFields;\n const [advancedOpen, setAdvancedOpen] = React.useState(false);\n const containerRef = React.useRef<HTMLDivElement>(null);\n\n // プログレッシブディスクロージャー: 通常/高度フィールドを分離\n const { standard, advanced } = React.useMemo(() => separateAdvancedFields(schema), [schema]);\n const hasAdvancedFields = Object.keys(advanced.properties || {}).length > 0;\n\n const renderContent = () => (\n <>\n {/* カスタムコンテンツがある場合はそれを優先、ない場合はスキーマ駆動フォームを表示 */}\n {children ? (\n <div className='space-y-6'>{children}</div>\n ) : (\n <>\n {/* 標準フィールド */}\n <SchemaDetailPage\n form={form}\n schema={progressiveDisclosure ? standard : schema}\n mode={mode}\n values={values}\n submitLabel={submitLabel}\n onSubmit={onSubmit}\n onCancel={onCancel}\n onDelete={onDelete}\n onEdit={onEdit}\n showEditButton={!stickyActions && showEditButton}\n hideActions={stickyActions}\n groupDisplay={groupDisplay}\n groupLayout={useGrid ? 'full' : 'column'}\n columnMinWidth={useGrid ? 300 : undefined}\n relations={relations}\n />\n\n {/* 高度なフィールド (折りたたみ) */}\n {progressiveDisclosure && hasAdvancedFields && (\n <Collapsible\n open={advancedOpen}\n onOpenChange={setAdvancedOpen}\n className='mt-6 border-t pt-4'\n >\n <CollapsibleTrigger className='flex w-full items-center justify-between py-2 text-sm font-medium text-muted-foreground hover:text-foreground transition-colors'>\n <span>{m.common_advanced({ defaultValue: 'Advanced Settings' })}</span>\n <ChevronDown\n className={`h-4 w-4 transition-transform ${advancedOpen ? 'rotate-180' : ''}`}\n />\n </CollapsibleTrigger>\n <CollapsibleContent className='pt-4'>\n <SchemaDetailPage\n form={form}\n schema={advanced}\n mode={mode}\n values={values}\n groupDisplay={groupDisplay}\n groupLayout={useGrid ? 'full' : 'column'}\n columnMinWidth={useGrid ? 300 : undefined}\n relations={relations}\n />\n </CollapsibleContent>\n </Collapsible>\n )}\n </>\n )}\n\n {/* スティッキーアクションバー */}\n {stickyActions && mode === 'edit' && (\n <FormActionBar\n primaryLabel={\n submitLabel === 'create'\n ? m.common_actions_create({ defaultValue: 'Create' })\n : m.common_actions_update({ defaultValue: 'Update' })\n }\n onPrimary={children ? () => containerRef.current?.querySelector('form')?.requestSubmit() : undefined}\n onSecondary={onCancel}\n saveStatus={saveStatus}\n sticky\n tertiaryAction={\n onDelete && (\n <Button type='button' variant='destructive' onClick={onDelete}>\n {m.common_actions_delete({ defaultValue: 'Delete' })}\n </Button>\n )\n }\n />\n )}\n\n {/* View モードのアクション */}\n {stickyActions && mode === 'view' && showEditButton && (\n <FormActionBar\n primaryLabel={m.common_actions_edit({ defaultValue: 'Edit' })}\n onPrimary={onEdit}\n onSecondary={onCancel}\n sticky\n />\n )}\n </>\n );\n\n const content = mode === 'edit' && !children ? (\n <FormProvider {...form}>\n <form onSubmit={form.handleSubmit(data => onSubmit?.(data))}>{renderContent()}</form>\n </FormProvider>\n ) : renderContent();\n\n if (containerLayout) {\n return (\n <FormContainer ref={containerRef} maxWidth={maxWidth} className={className}>\n {content}\n </FormContainer>\n );\n }\n\n return (\n <div ref={containerRef} className={className}>\n {content}\n </div>\n );\n}\n"],"mappings":"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"}
|