@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,67 +1,230 @@
|
|
|
1
|
+
/** Responsive record presentation and touch interaction wrappers; the host owns data loading and actions. */
|
|
2
|
+
import * as React from 'react';
|
|
1
3
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* - testId prop 対応
|
|
7
|
-
* - data-slot 属性
|
|
4
|
+
* One desktop-table/mobile-card column and optional row renderer.
|
|
5
|
+
* @typeParam T - Complete row shape used by record keys, renderers and callbacks.
|
|
6
|
+
* @remarks Inherited native or primitive props keep their upstream types and behavior; this declaration documents only the wrapper-owned options.
|
|
7
|
+
* @see DataList
|
|
8
8
|
*/
|
|
9
|
-
import * as React from 'react';
|
|
10
9
|
export interface DataListColumn<T> {
|
|
10
|
+
/**
|
|
11
|
+
* Row property or dot-separated lookup path used for default rendering and column keys.
|
|
12
|
+
*/
|
|
11
13
|
key: keyof T | string;
|
|
14
|
+
/**
|
|
15
|
+
* Column heading, also used as a mobile card label unless mobileLabel=false.
|
|
16
|
+
*/
|
|
12
17
|
header: string;
|
|
18
|
+
/**
|
|
19
|
+
* Custom renderer receiving the complete row; may run for both desktop and mobile markup.
|
|
20
|
+
* @param item - Complete row supplied by the renderer/click handler.
|
|
21
|
+
* @returns Content rendered for this row/option.
|
|
22
|
+
*/
|
|
13
23
|
render?: (item: T) => React.ReactNode;
|
|
24
|
+
/**
|
|
25
|
+
* Additional classes merged with wrapper styling; see the component for the targeted element.
|
|
26
|
+
*/
|
|
14
27
|
className?: string;
|
|
15
|
-
/**
|
|
28
|
+
/**
|
|
29
|
+
* Hides this column only in mobile cards; omitted/false keeps it visible.
|
|
30
|
+
*/
|
|
16
31
|
mobileHidden?: boolean;
|
|
17
|
-
/**
|
|
32
|
+
/**
|
|
33
|
+
* Shows the column header beside the mobile value unless explicitly false.
|
|
34
|
+
*/
|
|
18
35
|
mobileLabel?: boolean;
|
|
19
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Records, stable row keys and responsive rendering behavior for DataList.
|
|
39
|
+
* @typeParam T - Complete row shape used by record keys, renderers and callbacks.
|
|
40
|
+
* @remarks Inherited native or primitive props keep their upstream types and behavior; this declaration documents only the wrapper-owned options.
|
|
41
|
+
* @see DataList
|
|
42
|
+
*/
|
|
20
43
|
export interface DataListProps<T> {
|
|
44
|
+
/**
|
|
45
|
+
* Rows in display order; an empty array renders only emptyMessage.
|
|
46
|
+
*/
|
|
21
47
|
data: T[];
|
|
48
|
+
/**
|
|
49
|
+
* Column definitions in display order; reused for desktop and mobile markup.
|
|
50
|
+
*/
|
|
22
51
|
columns: DataListColumn<T>[];
|
|
52
|
+
/**
|
|
53
|
+
* Row field whose String(value) supplies React keys; provide unique stable values.
|
|
54
|
+
*/
|
|
23
55
|
keyField: keyof T;
|
|
56
|
+
/**
|
|
57
|
+
* Called with the row on desktop-row or mobile-card click; adds pointer styling but no keyboard activation.
|
|
58
|
+
* @param item - Complete row supplied by the renderer/click handler.
|
|
59
|
+
* @returns No value; complete the host callback action.
|
|
60
|
+
*/
|
|
24
61
|
onRowClick?: (item: T) => void;
|
|
62
|
+
/**
|
|
63
|
+
* Text shown when data is empty.
|
|
64
|
+
* @defaultValue データがありません
|
|
65
|
+
*/
|
|
25
66
|
emptyMessage?: string;
|
|
67
|
+
/**
|
|
68
|
+
* Additional classes merged with wrapper styling; see the component for the targeted element.
|
|
69
|
+
*/
|
|
26
70
|
className?: string;
|
|
71
|
+
/**
|
|
72
|
+
* Additional classes on each mobile card.
|
|
73
|
+
*/
|
|
27
74
|
mobileCardClassName?: string;
|
|
75
|
+
/**
|
|
76
|
+
* Root data-testid for nonempty data; the empty state uses `${testId}-empty`.
|
|
77
|
+
*/
|
|
28
78
|
testId?: string;
|
|
29
79
|
}
|
|
30
80
|
/**
|
|
31
|
-
*
|
|
81
|
+
* Renders the same records as a desktop table and mobile cards using responsive visibility classes.
|
|
82
|
+
* @typeParam T - Record shape used by data, column render callbacks and row-click callbacks; must extend Record<string, unknown>.
|
|
83
|
+
* @param props - Component attributes and children accepted by the declared native/underlying prop type; className customizes wrapper styling. Wrapper defaults: emptyMessage='データがありません'.
|
|
84
|
+
* @returns The rendered DataList composition.
|
|
85
|
+
* @remarks Import @alneas/appkit-react/styles in the rendering host. DataList mounts both desktop/mobile representations; CSS switches visibility at md, so custom render callbacks may execute for both. It does not virtualize or add keyboard row activation. keyField must give stable unique stringifiable keys. ResponsiveGrid creates dynamic Tailwind classes: the host CSS must include the requested classes. Touch helpers do not add mouse/keyboard equivalents or persistence.
|
|
86
|
+
* @example
|
|
87
|
+
* ```tsx
|
|
88
|
+
* import type { ComponentProps } from 'react';
|
|
89
|
+
* import { DataList, ResponsiveGrid, SwipeableItem, PullToRefresh } from '@alneas/appkit-react/ui';
|
|
90
|
+
* import '@alneas/appkit-react/styles';
|
|
91
|
+
*
|
|
92
|
+
* export function Example({ refresh }: { refresh: () => Promise<void> }) {
|
|
93
|
+
* return (<PullToRefresh onRefresh={async () => { await refresh(); }}><ResponsiveGrid><SwipeableItem onSwipeLeft={() => console.log("Left swipe")}><DataList data={[{ id: "one", title: "Draft" }]} keyField="id" columns={[{ key: "title", header: "Title" }]} /></SwipeableItem></ResponsiveGrid></PullToRefresh>);
|
|
94
|
+
* }
|
|
95
|
+
* ```
|
|
32
96
|
*/
|
|
33
97
|
declare function DataList<T extends Record<string, unknown>>({ data, columns, keyField, onRowClick, emptyMessage, className, mobileCardClassName, testId, }: DataListProps<T>): React.JSX.Element;
|
|
98
|
+
/**
|
|
99
|
+
* Native div attributes and dynamically constructed breakpoint column classes.
|
|
100
|
+
* @remarks Inherited native or primitive props keep their upstream types and behavior; this declaration documents only the wrapper-owned options.
|
|
101
|
+
* @see ResponsiveGrid
|
|
102
|
+
*/
|
|
34
103
|
export interface ResponsiveGridProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
104
|
+
/**
|
|
105
|
+
* Breakpoint column counts; defaults to { default: 1, md: 2, lg: 3 }. A supplied object replaces the default, with no merging. Requested dynamic utility classes must exist in host CSS.
|
|
106
|
+
*/
|
|
35
107
|
cols?: {
|
|
108
|
+
/**
|
|
109
|
+
* Column count below the sm breakpoint; if omitted in a supplied cols object, no base column class is added.
|
|
110
|
+
*/
|
|
36
111
|
default?: number;
|
|
112
|
+
/**
|
|
113
|
+
* Column count from the sm breakpoint; a requested utility class must exist in the host CSS.
|
|
114
|
+
*/
|
|
37
115
|
sm?: number;
|
|
116
|
+
/**
|
|
117
|
+
* Column count from the md breakpoint; a requested utility class must exist in the host CSS.
|
|
118
|
+
*/
|
|
38
119
|
md?: number;
|
|
120
|
+
/**
|
|
121
|
+
* Column count from the lg breakpoint; a requested utility class must exist in the host CSS.
|
|
122
|
+
*/
|
|
39
123
|
lg?: number;
|
|
124
|
+
/**
|
|
125
|
+
* Column count from the xl breakpoint; a requested utility class must exist in the host CSS.
|
|
126
|
+
*/
|
|
40
127
|
xl?: number;
|
|
41
128
|
};
|
|
129
|
+
/**
|
|
130
|
+
* Gap preset: none=gap-0, sm=gap-2, default=gap-4, lg=gap-6; defaults to default.
|
|
131
|
+
*/
|
|
42
132
|
gap?: 'none' | 'sm' | 'default' | 'lg';
|
|
43
133
|
}
|
|
44
134
|
/**
|
|
45
|
-
*
|
|
135
|
+
* Builds grid-column utility classes for caller-selected breakpoints.
|
|
136
|
+
* @param props - Component attributes and children accepted by the declared native/underlying prop type; className customizes wrapper styling. Wrapper defaults: cols={ default: 1, md: 2, lg: 3 }, gap='default'.
|
|
137
|
+
* @returns The rendered ResponsiveGrid composition.
|
|
138
|
+
* @remarks Import @alneas/appkit-react/styles in the rendering host. DataList mounts both desktop/mobile representations; CSS switches visibility at md, so custom render callbacks may execute for both. It does not virtualize or add keyboard row activation. keyField must give stable unique stringifiable keys. ResponsiveGrid creates dynamic Tailwind classes: the host CSS must include the requested classes. Touch helpers do not add mouse/keyboard equivalents or persistence. cols defaults to { default: 1, md: 2, lg: 3 }; supplying cols replaces that object without merging omitted breakpoints.
|
|
139
|
+
* @example
|
|
140
|
+
* ```tsx
|
|
141
|
+
* import type { ComponentProps } from 'react';
|
|
142
|
+
* import { DataList, ResponsiveGrid, SwipeableItem, PullToRefresh } from '@alneas/appkit-react/ui';
|
|
143
|
+
* import '@alneas/appkit-react/styles';
|
|
144
|
+
*
|
|
145
|
+
* export function Example({ refresh }: { refresh: () => Promise<void> }) {
|
|
146
|
+
* return (<PullToRefresh onRefresh={async () => { await refresh(); }}><ResponsiveGrid><SwipeableItem onSwipeLeft={() => console.log("Left swipe")}><DataList data={[{ id: "one", title: "Draft" }]} keyField="id" columns={[{ key: "title", header: "Title" }]} /></SwipeableItem></ResponsiveGrid></PullToRefresh>);
|
|
147
|
+
* }
|
|
148
|
+
* ```
|
|
46
149
|
*/
|
|
47
150
|
declare function ResponsiveGrid({ children, cols, gap, className, ...props }: ResponsiveGridProps): React.JSX.Element;
|
|
151
|
+
/**
|
|
152
|
+
* Native outer div attributes and touch-swipe action configuration.
|
|
153
|
+
* @remarks Inherited native or primitive props keep their upstream types and behavior; this declaration documents only the wrapper-owned options.
|
|
154
|
+
* @see SwipeableItem
|
|
155
|
+
*/
|
|
48
156
|
export interface SwipeableItemProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
157
|
+
/**
|
|
158
|
+
* Called at touch end when left displacement exceeds threshold; the wrapper then resets translation.
|
|
159
|
+
* @returns No value; complete the host callback action.
|
|
160
|
+
*/
|
|
49
161
|
onSwipeLeft?: () => void;
|
|
162
|
+
/**
|
|
163
|
+
* Called at touch end when right displacement exceeds threshold; the wrapper then resets translation.
|
|
164
|
+
* @returns No value; complete the host callback action.
|
|
165
|
+
*/
|
|
50
166
|
onSwipeRight?: () => void;
|
|
167
|
+
/**
|
|
168
|
+
* Background content revealed by a leftward swipe.
|
|
169
|
+
*/
|
|
51
170
|
leftAction?: React.ReactNode;
|
|
171
|
+
/**
|
|
172
|
+
* Background content revealed by a rightward swipe.
|
|
173
|
+
*/
|
|
52
174
|
rightAction?: React.ReactNode;
|
|
175
|
+
/**
|
|
176
|
+
* Strict activation threshold in CSS pixels; defaults to 50. Translation is capped at ±100, so thresholds >=100 never activate.
|
|
177
|
+
*/
|
|
53
178
|
threshold?: number;
|
|
54
179
|
}
|
|
55
180
|
/**
|
|
56
|
-
*
|
|
181
|
+
* Reveals side actions during a horizontal touch swipe and notifies the host after a threshold.
|
|
182
|
+
* @param props - Component attributes and children accepted by the declared native/underlying prop type; className customizes wrapper styling. Wrapper defaults: threshold=50.
|
|
183
|
+
* @returns The rendered SwipeableItem composition.
|
|
184
|
+
* @remarks Import @alneas/appkit-react/styles in the rendering host. DataList mounts both desktop/mobile representations; CSS switches visibility at md, so custom render callbacks may execute for both. It does not virtualize or add keyboard row activation. keyField must give stable unique stringifiable keys. ResponsiveGrid creates dynamic Tailwind classes: the host CSS must include the requested classes. Touch helpers do not add mouse/keyboard equivalents or persistence. threshold defaults to 50 CSS pixels; displacement is clamped to ±100px and resets after touch end. leftAction appears during a left swipe, rightAction during a right swipe. Callbacks run only when displacement strictly exceeds the threshold.
|
|
185
|
+
* @example
|
|
186
|
+
* ```tsx
|
|
187
|
+
* import type { ComponentProps } from 'react';
|
|
188
|
+
* import { DataList, ResponsiveGrid, SwipeableItem, PullToRefresh } from '@alneas/appkit-react/ui';
|
|
189
|
+
* import '@alneas/appkit-react/styles';
|
|
190
|
+
*
|
|
191
|
+
* export function Example({ refresh }: { refresh: () => Promise<void> }) {
|
|
192
|
+
* return (<PullToRefresh onRefresh={async () => { await refresh(); }}><ResponsiveGrid><SwipeableItem onSwipeLeft={() => console.log("Left swipe")}><DataList data={[{ id: "one", title: "Draft" }]} keyField="id" columns={[{ key: "title", header: "Title" }]} /></SwipeableItem></ResponsiveGrid></PullToRefresh>);
|
|
193
|
+
* }
|
|
194
|
+
* ```
|
|
57
195
|
*/
|
|
58
196
|
declare function SwipeableItem({ children, onSwipeLeft, onSwipeRight, leftAction, rightAction, threshold, className, ...props }: SwipeableItemProps): React.JSX.Element;
|
|
197
|
+
/**
|
|
198
|
+
* Native outer div attributes and asynchronous downward-pull refresh configuration.
|
|
199
|
+
* @remarks Inherited native or primitive props keep their upstream types and behavior; this declaration documents only the wrapper-owned options.
|
|
200
|
+
* @see PullToRefresh
|
|
201
|
+
*/
|
|
59
202
|
export interface PullToRefreshProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
203
|
+
/**
|
|
204
|
+
* Called and awaited after an eligible downward pull; the host performs refresh and handles errors. Rejection leaves the local refreshing state set.
|
|
205
|
+
* @returns A promise resolving when host refresh work completes; rejection is not caught by the wrapper.
|
|
206
|
+
*/
|
|
60
207
|
onRefresh: () => Promise<void>;
|
|
208
|
+
/**
|
|
209
|
+
* Visual pull distance in CSS pixels required for refresh; defaults to 80. Visual distance is half touch displacement capped at 100; values >100 cannot activate.
|
|
210
|
+
*/
|
|
61
211
|
pullThreshold?: number;
|
|
62
212
|
}
|
|
63
213
|
/**
|
|
64
|
-
*
|
|
214
|
+
* Tracks downward touch motion and requests an asynchronous refresh after a threshold.
|
|
215
|
+
* @param props - Component attributes and children accepted by the declared native/underlying prop type; className customizes wrapper styling. Wrapper defaults: pullThreshold=80.
|
|
216
|
+
* @returns The rendered PullToRefresh composition.
|
|
217
|
+
* @remarks Import @alneas/appkit-react/styles in the rendering host. DataList mounts both desktop/mobile representations; CSS switches visibility at md, so custom render callbacks may execute for both. It does not virtualize or add keyboard row activation. keyField must give stable unique stringifiable keys. ResponsiveGrid creates dynamic Tailwind classes: the host CSS must include the requested classes. Touch helpers do not add mouse/keyboard equivalents or persistence. A pull starts only when window.scrollY is zero. Visual distance is half the pointer displacement, capped at 100 CSS pixels; pullThreshold defaults to 80. Refresh is awaited, but there is no concurrency guard or finally cleanup: rejection leaves refreshing/pull state set. Handle errors inside onRefresh when recovery is needed. Native touch handlers supplied in props override the wrapper handlers.
|
|
218
|
+
* @example
|
|
219
|
+
* ```tsx
|
|
220
|
+
* import type { ComponentProps } from 'react';
|
|
221
|
+
* import { DataList, ResponsiveGrid, SwipeableItem, PullToRefresh } from '@alneas/appkit-react/ui';
|
|
222
|
+
* import '@alneas/appkit-react/styles';
|
|
223
|
+
*
|
|
224
|
+
* export function Example({ refresh }: { refresh: () => Promise<void> }) {
|
|
225
|
+
* return (<PullToRefresh onRefresh={async () => { await refresh(); }}><ResponsiveGrid><SwipeableItem onSwipeLeft={() => console.log("Left swipe")}><DataList data={[{ id: "one", title: "Draft" }]} keyField="id" columns={[{ key: "title", header: "Title" }]} /></SwipeableItem></ResponsiveGrid></PullToRefresh>);
|
|
226
|
+
* }
|
|
227
|
+
* ```
|
|
65
228
|
*/
|
|
66
229
|
declare function PullToRefresh({ children, onRefresh, pullThreshold, className, ...props }: PullToRefreshProps): React.JSX.Element;
|
|
67
230
|
export { DataList, ResponsiveGrid, SwipeableItem, PullToRefresh };
|
|
@@ -1,67 +1,230 @@
|
|
|
1
|
+
/** Responsive record presentation and touch interaction wrappers; the host owns data loading and actions. */
|
|
2
|
+
import * as React from 'react';
|
|
1
3
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* - testId prop 対応
|
|
7
|
-
* - data-slot 属性
|
|
4
|
+
* One desktop-table/mobile-card column and optional row renderer.
|
|
5
|
+
* @typeParam T - Complete row shape used by record keys, renderers and callbacks.
|
|
6
|
+
* @remarks Inherited native or primitive props keep their upstream types and behavior; this declaration documents only the wrapper-owned options.
|
|
7
|
+
* @see DataList
|
|
8
8
|
*/
|
|
9
|
-
import * as React from 'react';
|
|
10
9
|
export interface DataListColumn<T> {
|
|
10
|
+
/**
|
|
11
|
+
* Row property or dot-separated lookup path used for default rendering and column keys.
|
|
12
|
+
*/
|
|
11
13
|
key: keyof T | string;
|
|
14
|
+
/**
|
|
15
|
+
* Column heading, also used as a mobile card label unless mobileLabel=false.
|
|
16
|
+
*/
|
|
12
17
|
header: string;
|
|
18
|
+
/**
|
|
19
|
+
* Custom renderer receiving the complete row; may run for both desktop and mobile markup.
|
|
20
|
+
* @param item - Complete row supplied by the renderer/click handler.
|
|
21
|
+
* @returns Content rendered for this row/option.
|
|
22
|
+
*/
|
|
13
23
|
render?: (item: T) => React.ReactNode;
|
|
24
|
+
/**
|
|
25
|
+
* Additional classes merged with wrapper styling; see the component for the targeted element.
|
|
26
|
+
*/
|
|
14
27
|
className?: string;
|
|
15
|
-
/**
|
|
28
|
+
/**
|
|
29
|
+
* Hides this column only in mobile cards; omitted/false keeps it visible.
|
|
30
|
+
*/
|
|
16
31
|
mobileHidden?: boolean;
|
|
17
|
-
/**
|
|
32
|
+
/**
|
|
33
|
+
* Shows the column header beside the mobile value unless explicitly false.
|
|
34
|
+
*/
|
|
18
35
|
mobileLabel?: boolean;
|
|
19
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Records, stable row keys and responsive rendering behavior for DataList.
|
|
39
|
+
* @typeParam T - Complete row shape used by record keys, renderers and callbacks.
|
|
40
|
+
* @remarks Inherited native or primitive props keep their upstream types and behavior; this declaration documents only the wrapper-owned options.
|
|
41
|
+
* @see DataList
|
|
42
|
+
*/
|
|
20
43
|
export interface DataListProps<T> {
|
|
44
|
+
/**
|
|
45
|
+
* Rows in display order; an empty array renders only emptyMessage.
|
|
46
|
+
*/
|
|
21
47
|
data: T[];
|
|
48
|
+
/**
|
|
49
|
+
* Column definitions in display order; reused for desktop and mobile markup.
|
|
50
|
+
*/
|
|
22
51
|
columns: DataListColumn<T>[];
|
|
52
|
+
/**
|
|
53
|
+
* Row field whose String(value) supplies React keys; provide unique stable values.
|
|
54
|
+
*/
|
|
23
55
|
keyField: keyof T;
|
|
56
|
+
/**
|
|
57
|
+
* Called with the row on desktop-row or mobile-card click; adds pointer styling but no keyboard activation.
|
|
58
|
+
* @param item - Complete row supplied by the renderer/click handler.
|
|
59
|
+
* @returns No value; complete the host callback action.
|
|
60
|
+
*/
|
|
24
61
|
onRowClick?: (item: T) => void;
|
|
62
|
+
/**
|
|
63
|
+
* Text shown when data is empty.
|
|
64
|
+
* @defaultValue データがありません
|
|
65
|
+
*/
|
|
25
66
|
emptyMessage?: string;
|
|
67
|
+
/**
|
|
68
|
+
* Additional classes merged with wrapper styling; see the component for the targeted element.
|
|
69
|
+
*/
|
|
26
70
|
className?: string;
|
|
71
|
+
/**
|
|
72
|
+
* Additional classes on each mobile card.
|
|
73
|
+
*/
|
|
27
74
|
mobileCardClassName?: string;
|
|
75
|
+
/**
|
|
76
|
+
* Root data-testid for nonempty data; the empty state uses `${testId}-empty`.
|
|
77
|
+
*/
|
|
28
78
|
testId?: string;
|
|
29
79
|
}
|
|
30
80
|
/**
|
|
31
|
-
*
|
|
81
|
+
* Renders the same records as a desktop table and mobile cards using responsive visibility classes.
|
|
82
|
+
* @typeParam T - Record shape used by data, column render callbacks and row-click callbacks; must extend Record<string, unknown>.
|
|
83
|
+
* @param props - Component attributes and children accepted by the declared native/underlying prop type; className customizes wrapper styling. Wrapper defaults: emptyMessage='データがありません'.
|
|
84
|
+
* @returns The rendered DataList composition.
|
|
85
|
+
* @remarks Import @alneas/appkit-react/styles in the rendering host. DataList mounts both desktop/mobile representations; CSS switches visibility at md, so custom render callbacks may execute for both. It does not virtualize or add keyboard row activation. keyField must give stable unique stringifiable keys. ResponsiveGrid creates dynamic Tailwind classes: the host CSS must include the requested classes. Touch helpers do not add mouse/keyboard equivalents or persistence.
|
|
86
|
+
* @example
|
|
87
|
+
* ```tsx
|
|
88
|
+
* import type { ComponentProps } from 'react';
|
|
89
|
+
* import { DataList, ResponsiveGrid, SwipeableItem, PullToRefresh } from '@alneas/appkit-react/ui';
|
|
90
|
+
* import '@alneas/appkit-react/styles';
|
|
91
|
+
*
|
|
92
|
+
* export function Example({ refresh }: { refresh: () => Promise<void> }) {
|
|
93
|
+
* return (<PullToRefresh onRefresh={async () => { await refresh(); }}><ResponsiveGrid><SwipeableItem onSwipeLeft={() => console.log("Left swipe")}><DataList data={[{ id: "one", title: "Draft" }]} keyField="id" columns={[{ key: "title", header: "Title" }]} /></SwipeableItem></ResponsiveGrid></PullToRefresh>);
|
|
94
|
+
* }
|
|
95
|
+
* ```
|
|
32
96
|
*/
|
|
33
97
|
declare function DataList<T extends Record<string, unknown>>({ data, columns, keyField, onRowClick, emptyMessage, className, mobileCardClassName, testId, }: DataListProps<T>): React.JSX.Element;
|
|
98
|
+
/**
|
|
99
|
+
* Native div attributes and dynamically constructed breakpoint column classes.
|
|
100
|
+
* @remarks Inherited native or primitive props keep their upstream types and behavior; this declaration documents only the wrapper-owned options.
|
|
101
|
+
* @see ResponsiveGrid
|
|
102
|
+
*/
|
|
34
103
|
export interface ResponsiveGridProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
104
|
+
/**
|
|
105
|
+
* Breakpoint column counts; defaults to { default: 1, md: 2, lg: 3 }. A supplied object replaces the default, with no merging. Requested dynamic utility classes must exist in host CSS.
|
|
106
|
+
*/
|
|
35
107
|
cols?: {
|
|
108
|
+
/**
|
|
109
|
+
* Column count below the sm breakpoint; if omitted in a supplied cols object, no base column class is added.
|
|
110
|
+
*/
|
|
36
111
|
default?: number;
|
|
112
|
+
/**
|
|
113
|
+
* Column count from the sm breakpoint; a requested utility class must exist in the host CSS.
|
|
114
|
+
*/
|
|
37
115
|
sm?: number;
|
|
116
|
+
/**
|
|
117
|
+
* Column count from the md breakpoint; a requested utility class must exist in the host CSS.
|
|
118
|
+
*/
|
|
38
119
|
md?: number;
|
|
120
|
+
/**
|
|
121
|
+
* Column count from the lg breakpoint; a requested utility class must exist in the host CSS.
|
|
122
|
+
*/
|
|
39
123
|
lg?: number;
|
|
124
|
+
/**
|
|
125
|
+
* Column count from the xl breakpoint; a requested utility class must exist in the host CSS.
|
|
126
|
+
*/
|
|
40
127
|
xl?: number;
|
|
41
128
|
};
|
|
129
|
+
/**
|
|
130
|
+
* Gap preset: none=gap-0, sm=gap-2, default=gap-4, lg=gap-6; defaults to default.
|
|
131
|
+
*/
|
|
42
132
|
gap?: 'none' | 'sm' | 'default' | 'lg';
|
|
43
133
|
}
|
|
44
134
|
/**
|
|
45
|
-
*
|
|
135
|
+
* Builds grid-column utility classes for caller-selected breakpoints.
|
|
136
|
+
* @param props - Component attributes and children accepted by the declared native/underlying prop type; className customizes wrapper styling. Wrapper defaults: cols={ default: 1, md: 2, lg: 3 }, gap='default'.
|
|
137
|
+
* @returns The rendered ResponsiveGrid composition.
|
|
138
|
+
* @remarks Import @alneas/appkit-react/styles in the rendering host. DataList mounts both desktop/mobile representations; CSS switches visibility at md, so custom render callbacks may execute for both. It does not virtualize or add keyboard row activation. keyField must give stable unique stringifiable keys. ResponsiveGrid creates dynamic Tailwind classes: the host CSS must include the requested classes. Touch helpers do not add mouse/keyboard equivalents or persistence. cols defaults to { default: 1, md: 2, lg: 3 }; supplying cols replaces that object without merging omitted breakpoints.
|
|
139
|
+
* @example
|
|
140
|
+
* ```tsx
|
|
141
|
+
* import type { ComponentProps } from 'react';
|
|
142
|
+
* import { DataList, ResponsiveGrid, SwipeableItem, PullToRefresh } from '@alneas/appkit-react/ui';
|
|
143
|
+
* import '@alneas/appkit-react/styles';
|
|
144
|
+
*
|
|
145
|
+
* export function Example({ refresh }: { refresh: () => Promise<void> }) {
|
|
146
|
+
* return (<PullToRefresh onRefresh={async () => { await refresh(); }}><ResponsiveGrid><SwipeableItem onSwipeLeft={() => console.log("Left swipe")}><DataList data={[{ id: "one", title: "Draft" }]} keyField="id" columns={[{ key: "title", header: "Title" }]} /></SwipeableItem></ResponsiveGrid></PullToRefresh>);
|
|
147
|
+
* }
|
|
148
|
+
* ```
|
|
46
149
|
*/
|
|
47
150
|
declare function ResponsiveGrid({ children, cols, gap, className, ...props }: ResponsiveGridProps): React.JSX.Element;
|
|
151
|
+
/**
|
|
152
|
+
* Native outer div attributes and touch-swipe action configuration.
|
|
153
|
+
* @remarks Inherited native or primitive props keep their upstream types and behavior; this declaration documents only the wrapper-owned options.
|
|
154
|
+
* @see SwipeableItem
|
|
155
|
+
*/
|
|
48
156
|
export interface SwipeableItemProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
157
|
+
/**
|
|
158
|
+
* Called at touch end when left displacement exceeds threshold; the wrapper then resets translation.
|
|
159
|
+
* @returns No value; complete the host callback action.
|
|
160
|
+
*/
|
|
49
161
|
onSwipeLeft?: () => void;
|
|
162
|
+
/**
|
|
163
|
+
* Called at touch end when right displacement exceeds threshold; the wrapper then resets translation.
|
|
164
|
+
* @returns No value; complete the host callback action.
|
|
165
|
+
*/
|
|
50
166
|
onSwipeRight?: () => void;
|
|
167
|
+
/**
|
|
168
|
+
* Background content revealed by a leftward swipe.
|
|
169
|
+
*/
|
|
51
170
|
leftAction?: React.ReactNode;
|
|
171
|
+
/**
|
|
172
|
+
* Background content revealed by a rightward swipe.
|
|
173
|
+
*/
|
|
52
174
|
rightAction?: React.ReactNode;
|
|
175
|
+
/**
|
|
176
|
+
* Strict activation threshold in CSS pixels; defaults to 50. Translation is capped at ±100, so thresholds >=100 never activate.
|
|
177
|
+
*/
|
|
53
178
|
threshold?: number;
|
|
54
179
|
}
|
|
55
180
|
/**
|
|
56
|
-
*
|
|
181
|
+
* Reveals side actions during a horizontal touch swipe and notifies the host after a threshold.
|
|
182
|
+
* @param props - Component attributes and children accepted by the declared native/underlying prop type; className customizes wrapper styling. Wrapper defaults: threshold=50.
|
|
183
|
+
* @returns The rendered SwipeableItem composition.
|
|
184
|
+
* @remarks Import @alneas/appkit-react/styles in the rendering host. DataList mounts both desktop/mobile representations; CSS switches visibility at md, so custom render callbacks may execute for both. It does not virtualize or add keyboard row activation. keyField must give stable unique stringifiable keys. ResponsiveGrid creates dynamic Tailwind classes: the host CSS must include the requested classes. Touch helpers do not add mouse/keyboard equivalents or persistence. threshold defaults to 50 CSS pixels; displacement is clamped to ±100px and resets after touch end. leftAction appears during a left swipe, rightAction during a right swipe. Callbacks run only when displacement strictly exceeds the threshold.
|
|
185
|
+
* @example
|
|
186
|
+
* ```tsx
|
|
187
|
+
* import type { ComponentProps } from 'react';
|
|
188
|
+
* import { DataList, ResponsiveGrid, SwipeableItem, PullToRefresh } from '@alneas/appkit-react/ui';
|
|
189
|
+
* import '@alneas/appkit-react/styles';
|
|
190
|
+
*
|
|
191
|
+
* export function Example({ refresh }: { refresh: () => Promise<void> }) {
|
|
192
|
+
* return (<PullToRefresh onRefresh={async () => { await refresh(); }}><ResponsiveGrid><SwipeableItem onSwipeLeft={() => console.log("Left swipe")}><DataList data={[{ id: "one", title: "Draft" }]} keyField="id" columns={[{ key: "title", header: "Title" }]} /></SwipeableItem></ResponsiveGrid></PullToRefresh>);
|
|
193
|
+
* }
|
|
194
|
+
* ```
|
|
57
195
|
*/
|
|
58
196
|
declare function SwipeableItem({ children, onSwipeLeft, onSwipeRight, leftAction, rightAction, threshold, className, ...props }: SwipeableItemProps): React.JSX.Element;
|
|
197
|
+
/**
|
|
198
|
+
* Native outer div attributes and asynchronous downward-pull refresh configuration.
|
|
199
|
+
* @remarks Inherited native or primitive props keep their upstream types and behavior; this declaration documents only the wrapper-owned options.
|
|
200
|
+
* @see PullToRefresh
|
|
201
|
+
*/
|
|
59
202
|
export interface PullToRefreshProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
203
|
+
/**
|
|
204
|
+
* Called and awaited after an eligible downward pull; the host performs refresh and handles errors. Rejection leaves the local refreshing state set.
|
|
205
|
+
* @returns A promise resolving when host refresh work completes; rejection is not caught by the wrapper.
|
|
206
|
+
*/
|
|
60
207
|
onRefresh: () => Promise<void>;
|
|
208
|
+
/**
|
|
209
|
+
* Visual pull distance in CSS pixels required for refresh; defaults to 80. Visual distance is half touch displacement capped at 100; values >100 cannot activate.
|
|
210
|
+
*/
|
|
61
211
|
pullThreshold?: number;
|
|
62
212
|
}
|
|
63
213
|
/**
|
|
64
|
-
*
|
|
214
|
+
* Tracks downward touch motion and requests an asynchronous refresh after a threshold.
|
|
215
|
+
* @param props - Component attributes and children accepted by the declared native/underlying prop type; className customizes wrapper styling. Wrapper defaults: pullThreshold=80.
|
|
216
|
+
* @returns The rendered PullToRefresh composition.
|
|
217
|
+
* @remarks Import @alneas/appkit-react/styles in the rendering host. DataList mounts both desktop/mobile representations; CSS switches visibility at md, so custom render callbacks may execute for both. It does not virtualize or add keyboard row activation. keyField must give stable unique stringifiable keys. ResponsiveGrid creates dynamic Tailwind classes: the host CSS must include the requested classes. Touch helpers do not add mouse/keyboard equivalents or persistence. A pull starts only when window.scrollY is zero. Visual distance is half the pointer displacement, capped at 100 CSS pixels; pullThreshold defaults to 80. Refresh is awaited, but there is no concurrency guard or finally cleanup: rejection leaves refreshing/pull state set. Handle errors inside onRefresh when recovery is needed. Native touch handlers supplied in props override the wrapper handlers.
|
|
218
|
+
* @example
|
|
219
|
+
* ```tsx
|
|
220
|
+
* import type { ComponentProps } from 'react';
|
|
221
|
+
* import { DataList, ResponsiveGrid, SwipeableItem, PullToRefresh } from '@alneas/appkit-react/ui';
|
|
222
|
+
* import '@alneas/appkit-react/styles';
|
|
223
|
+
*
|
|
224
|
+
* export function Example({ refresh }: { refresh: () => Promise<void> }) {
|
|
225
|
+
* return (<PullToRefresh onRefresh={async () => { await refresh(); }}><ResponsiveGrid><SwipeableItem onSwipeLeft={() => console.log("Left swipe")}><DataList data={[{ id: "one", title: "Draft" }]} keyField="id" columns={[{ key: "title", header: "Title" }]} /></SwipeableItem></ResponsiveGrid></PullToRefresh>);
|
|
226
|
+
* }
|
|
227
|
+
* ```
|
|
65
228
|
*/
|
|
66
229
|
declare function PullToRefresh({ children, onRefresh, pullThreshold, className, ...props }: PullToRefreshProps): React.JSX.Element;
|
|
67
230
|
export { DataList, ResponsiveGrid, SwipeableItem, PullToRefresh };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"responsive-list.js","names":["React","React$1","DataList","getValue","keys","key","value","item","k","data","testId","emptyMessage","cn","className","columns","col","onRowClick","keyField","mobileCardClassName","idx","gapClasses","ResponsiveGrid","props","colClasses","cols","gap","SwipeableItem","translateX","setTranslateX","startX","setStartX","isDragging","setIsDragging","handleTouchStart","handleTouchMove","diff","handleTouchEnd","threshold","onSwipeRight","onSwipeLeft","rightAction","leftAction","PullToRefresh","isPulling","setIsPulling","isRefreshing","setIsRefreshing","pullDistance","setPullDistance","startY","distance","pullThreshold","onRefresh"],"sources":["../../../../src/ui/components/ui/responsive-list.tsx"],"sourcesContent":["/**\n * レスポンシブデータリストコンポーネント\n *\n * shadcn/ui パターンに準拠:\n * - テーマトークン使用 (bg-card, text-muted-foreground など)\n * - testId prop 対応\n * - data-slot 属性\n */\n\nimport * as React from 'react';\nimport { cn } from '../../lib/utils';\n\n// ============================================================================\n// DataList - Table on desktop, Cards on mobile\n// ============================================================================\n\nexport interface DataListColumn<T> {\n key: keyof T | string;\n header: string;\n render?: (item: T) => React.ReactNode;\n className?: string;\n /** Hide this column on mobile */\n mobileHidden?: boolean;\n /** Show label on mobile card (default: true) */\n mobileLabel?: boolean;\n}\n\nexport interface DataListProps<T> {\n data: T[];\n columns: DataListColumn<T>[];\n keyField: keyof T;\n onRowClick?: (item: T) => void;\n emptyMessage?: string;\n className?: string;\n mobileCardClassName?: string;\n testId?: string;\n}\n\n/**\n * PCサイズではテーブル形式、モバイルサイズではカード形式でデータを表示するレスポンシブなデータリストコンポーネント。\n */\nfunction DataList<T extends Record<string, unknown>>({\n data,\n columns,\n keyField,\n onRowClick,\n emptyMessage = 'データがありません',\n className,\n mobileCardClassName,\n testId,\n}: DataListProps<T>) {\n const getValue = (item: T, key: string): unknown => {\n const keys = key.split('.');\n let value: unknown = item;\n for (const k of keys) {\n value = (value as Record<string, unknown>)?.[k];\n }\n return value;\n };\n\n if (data.length === 0) {\n return (\n <div\n data-slot='data-list-empty'\n data-testid={testId ? `${testId}-empty` : undefined}\n className='flex items-center justify-center py-12 text-muted-foreground'\n >\n {emptyMessage}\n </div>\n );\n }\n\n return (\n <div data-slot='data-list' data-testid={testId} className={cn('w-full', className)}>\n {/* Desktop Table */}\n <div className='hidden md:block overflow-x-auto'>\n <table className='w-full text-sm'>\n <thead>\n <tr className='border-b bg-muted/50'>\n {columns.map((col) => (\n <th\n key={String(col.key)}\n className={cn('py-3 px-4 text-left font-medium text-foreground', col.className)}\n >\n {col.header}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {data.map((item) => (\n <tr\n key={String(item[keyField])}\n data-slot='data-list-row'\n className={cn(\n 'border-b transition-colors hover:bg-muted/50',\n onRowClick && 'cursor-pointer',\n )}\n onClick={() => onRowClick?.(item)}\n >\n {columns.map((col) => (\n <td key={String(col.key)} className={cn('py-3 px-4', col.className)}>\n {col.render ? col.render(item) : String(getValue(item, String(col.key)) ?? '')}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n\n {/* Mobile Cards */}\n <div className='md:hidden space-y-3'>\n {data.map((item) => (\n <div\n key={String(item[keyField])}\n data-slot='data-list-card'\n className={cn(\n 'p-4 border rounded-lg bg-card text-card-foreground shadow-sm',\n onRowClick && 'cursor-pointer active:bg-muted/50',\n mobileCardClassName,\n )}\n onClick={() => onRowClick?.(item)}\n >\n {columns\n .filter((col) => !col.mobileHidden)\n .map((col, idx) => (\n <div\n key={String(col.key)}\n className={cn(\n 'flex justify-between items-center',\n idx > 0 && 'mt-2 pt-2 border-t border-dashed border-border',\n )}\n >\n {col.mobileLabel !== false && (\n <span className='text-sm text-muted-foreground'>{col.header}</span>\n )}\n <span className={cn('font-medium', col.className)}>\n {col.render ? col.render(item) : String(getValue(item, String(col.key)) ?? '')}\n </span>\n </div>\n ))}\n </div>\n ))}\n </div>\n </div>\n );\n}\n\n// ============================================================================\n// ResponsiveGrid\n// ============================================================================\n\nexport interface ResponsiveGridProps extends React.HTMLAttributes<HTMLDivElement> {\n cols?: {\n default?: number;\n sm?: number;\n md?: number;\n lg?: number;\n xl?: number;\n };\n gap?: 'none' | 'sm' | 'default' | 'lg';\n}\n\nconst gapClasses = {\n none: 'gap-0',\n sm: 'gap-2',\n default: 'gap-4',\n lg: 'gap-6',\n};\n\n/**\n * デバイスの画面幅に合わせてカラム数を切り替えることができるレスポンシブグリッドレイアウト。\n */\nfunction ResponsiveGrid({\n children,\n cols = { default: 1, md: 2, lg: 3 },\n gap = 'default',\n className,\n ...props\n}: ResponsiveGridProps) {\n // Build grid classes dynamically\n const colClasses = [\n cols.default && `grid-cols-${cols.default}`,\n cols.sm && `sm:grid-cols-${cols.sm}`,\n cols.md && `md:grid-cols-${cols.md}`,\n cols.lg && `lg:grid-cols-${cols.lg}`,\n cols.xl && `xl:grid-cols-${cols.xl}`,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div\n data-slot='responsive-grid'\n className={cn('grid', gapClasses[gap], colClasses, className)}\n {...props}\n >\n {children}\n </div>\n );\n}\n\n// ============================================================================\n// SwipeableItem\n// ============================================================================\n\nexport interface SwipeableItemProps extends React.HTMLAttributes<HTMLDivElement> {\n onSwipeLeft?: () => void;\n onSwipeRight?: () => void;\n leftAction?: React.ReactNode;\n rightAction?: React.ReactNode;\n threshold?: number;\n}\n\n/**\n * タッチデバイスなどで左右スワイプ操作によるアクション(削除や編集など)を実行できるコンポーネント。\n */\nfunction SwipeableItem({\n children,\n onSwipeLeft,\n onSwipeRight,\n leftAction,\n rightAction,\n threshold = 50,\n className,\n ...props\n}: SwipeableItemProps) {\n const [translateX, setTranslateX] = React.useState(0);\n const [startX, setStartX] = React.useState(0);\n const [isDragging, setIsDragging] = React.useState(false);\n\n const handleTouchStart = (e: React.TouchEvent) => {\n setStartX(e.touches[0].clientX);\n setIsDragging(true);\n };\n\n const handleTouchMove = (e: React.TouchEvent) => {\n if (!isDragging) return;\n const diff = e.touches[0].clientX - startX;\n const maxSwipe = 100;\n setTranslateX(Math.max(-maxSwipe, Math.min(maxSwipe, diff)));\n };\n\n const handleTouchEnd = () => {\n setIsDragging(false);\n if (translateX > threshold && onSwipeRight) {\n onSwipeRight();\n } else if (translateX < -threshold && onSwipeLeft) {\n onSwipeLeft();\n }\n setTranslateX(0);\n };\n\n return (\n <div\n data-slot='swipeable-item'\n className={cn('relative overflow-hidden', className)}\n {...props}\n >\n {/* Background actions */}\n <div className='absolute inset-0 flex'>\n <div className='flex-1 flex items-center justify-start px-4 bg-green-500 text-white'>\n {rightAction}\n </div>\n <div className='flex-1 flex items-center justify-end px-4 bg-destructive text-destructive-foreground'>\n {leftAction}\n </div>\n </div>\n\n {/* Swipeable content */}\n <div\n className='relative bg-background transition-transform'\n style={{\n transform: `translateX(${translateX}px)`,\n transition: isDragging ? 'none' : 'transform 0.2s',\n }}\n onTouchStart={handleTouchStart}\n onTouchMove={handleTouchMove}\n onTouchEnd={handleTouchEnd}\n >\n {children}\n </div>\n </div>\n );\n}\n\n// ============================================================================\n// PullToRefresh\n// ============================================================================\n\nexport interface PullToRefreshProps extends React.HTMLAttributes<HTMLDivElement> {\n onRefresh: () => Promise<void>;\n pullThreshold?: number;\n}\n\n/**\n * モバイル端末などで画面上部を下に引っ張ってデータを更新する(Pull to Refresh)機能を実装するコンポーネント。\n */\nfunction PullToRefresh({\n children,\n onRefresh,\n pullThreshold = 80,\n className,\n ...props\n}: PullToRefreshProps) {\n const [isPulling, setIsPulling] = React.useState(false);\n const [isRefreshing, setIsRefreshing] = React.useState(false);\n const [pullDistance, setPullDistance] = React.useState(0);\n const startY = React.useRef(0);\n\n const handleTouchStart = (e: React.TouchEvent) => {\n if (window.scrollY === 0) {\n startY.current = e.touches[0].clientY;\n setIsPulling(true);\n }\n };\n\n const handleTouchMove = (e: React.TouchEvent) => {\n if (!isPulling) return;\n const distance = e.touches[0].clientY - startY.current;\n if (distance > 0) {\n setPullDistance(Math.min(distance * 0.5, 100));\n }\n };\n\n const handleTouchEnd = async () => {\n if (pullDistance >= pullThreshold) {\n setIsRefreshing(true);\n await onRefresh();\n setIsRefreshing(false);\n }\n setIsPulling(false);\n setPullDistance(0);\n };\n\n return (\n <div\n data-slot='pull-to-refresh'\n className={cn('relative', className)}\n onTouchStart={handleTouchStart}\n onTouchMove={handleTouchMove}\n onTouchEnd={handleTouchEnd}\n {...props}\n >\n {/* Pull indicator */}\n <div\n className='absolute left-1/2 -translate-x-1/2 flex items-center justify-center transition-all'\n style={{\n top: pullDistance - 40,\n opacity: pullDistance / pullThreshold,\n }}\n >\n <div\n className={cn(\n 'w-6 h-6 border-2 border-primary border-t-transparent rounded-full',\n isRefreshing && 'animate-spin',\n )}\n />\n </div>\n\n {/* Content */}\n <div\n style={{\n transform: `translateY(${pullDistance}px)`,\n transition: isPulling ? 'none' : 'transform 0.2s',\n }}\n >\n {children}\n </div>\n </div>\n );\n}\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nexport { DataList, ResponsiveGrid, SwipeableItem, PullToRefresh };\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"responsive-list.js","names":["React","React$1","DataList","getValue","keys","key","value","item","k","data","testId","emptyMessage","cn","className","columns","col","onRowClick","keyField","mobileCardClassName","idx","gapClasses","ResponsiveGrid","props","colClasses","cols","gap","SwipeableItem","translateX","setTranslateX","startX","setStartX","isDragging","setIsDragging","handleTouchStart","handleTouchMove","diff","handleTouchEnd","threshold","onSwipeRight","onSwipeLeft","rightAction","leftAction","PullToRefresh","isPulling","setIsPulling","isRefreshing","setIsRefreshing","pullDistance","setPullDistance","startY","distance","pullThreshold","onRefresh"],"sources":["../../../../src/ui/components/ui/responsive-list.tsx"],"sourcesContent":["/** Responsive record presentation and touch interaction wrappers; the host owns data loading and actions. */\n\nimport * as React from 'react';\nimport { cn } from '../../lib/utils';\n\n// ============================================================================\n// DataList - Table on desktop, Cards on mobile\n// ============================================================================\n\n/**\n * One desktop-table/mobile-card column and optional row renderer.\n * @typeParam T - Complete row shape used by record keys, renderers and callbacks.\n * @remarks Inherited native or primitive props keep their upstream types and behavior; this declaration documents only the wrapper-owned options.\n * @see DataList\n */\nexport interface DataListColumn<T> {\n /**\n * Row property or dot-separated lookup path used for default rendering and column keys.\n */\n key: keyof T | string;\n /**\n * Column heading, also used as a mobile card label unless mobileLabel=false.\n */\n header: string;\n /**\n * Custom renderer receiving the complete row; may run for both desktop and mobile markup.\n * @param item - Complete row supplied by the renderer/click handler.\n * @returns Content rendered for this row/option.\n */\n render?: (item: T) => React.ReactNode;\n /**\n * Additional classes merged with wrapper styling; see the component for the targeted element.\n */\n className?: string;\n /**\n * Hides this column only in mobile cards; omitted/false keeps it visible.\n */\n mobileHidden?: boolean;\n /**\n * Shows the column header beside the mobile value unless explicitly false.\n */\n mobileLabel?: boolean;\n}\n\n/**\n * Records, stable row keys and responsive rendering behavior for DataList.\n * @typeParam T - Complete row shape used by record keys, renderers and callbacks.\n * @remarks Inherited native or primitive props keep their upstream types and behavior; this declaration documents only the wrapper-owned options.\n * @see DataList\n */\nexport interface DataListProps<T> {\n /**\n * Rows in display order; an empty array renders only emptyMessage.\n */\n data: T[];\n /**\n * Column definitions in display order; reused for desktop and mobile markup.\n */\n columns: DataListColumn<T>[];\n /**\n * Row field whose String(value) supplies React keys; provide unique stable values.\n */\n keyField: keyof T;\n /**\n * Called with the row on desktop-row or mobile-card click; adds pointer styling but no keyboard activation.\n * @param item - Complete row supplied by the renderer/click handler.\n * @returns No value; complete the host callback action.\n */\n onRowClick?: (item: T) => void;\n /**\n * Text shown when data is empty.\n * @defaultValue データがありません\n */\n emptyMessage?: string;\n /**\n * Additional classes merged with wrapper styling; see the component for the targeted element.\n */\n className?: string;\n /**\n * Additional classes on each mobile card.\n */\n mobileCardClassName?: string;\n /**\n * Root data-testid for nonempty data; the empty state uses `${testId}-empty`.\n */\n testId?: string;\n}\n\n/**\n * Renders the same records as a desktop table and mobile cards using responsive visibility classes.\n * @typeParam T - Record shape used by data, column render callbacks and row-click callbacks; must extend Record<string, unknown>.\n * @param props - Component attributes and children accepted by the declared native/underlying prop type; className customizes wrapper styling. Wrapper defaults: emptyMessage='データがありません'.\n * @returns The rendered DataList composition.\n * @remarks Import @alneas/appkit-react/styles in the rendering host. DataList mounts both desktop/mobile representations; CSS switches visibility at md, so custom render callbacks may execute for both. It does not virtualize or add keyboard row activation. keyField must give stable unique stringifiable keys. ResponsiveGrid creates dynamic Tailwind classes: the host CSS must include the requested classes. Touch helpers do not add mouse/keyboard equivalents or persistence.\n * @example\n * ```tsx\n * import type { ComponentProps } from 'react';\n * import { DataList, ResponsiveGrid, SwipeableItem, PullToRefresh } from '@alneas/appkit-react/ui';\n * import '@alneas/appkit-react/styles';\n *\n * export function Example({ refresh }: { refresh: () => Promise<void> }) {\n * return (<PullToRefresh onRefresh={async () => { await refresh(); }}><ResponsiveGrid><SwipeableItem onSwipeLeft={() => console.log(\"Left swipe\")}><DataList data={[{ id: \"one\", title: \"Draft\" }]} keyField=\"id\" columns={[{ key: \"title\", header: \"Title\" }]} /></SwipeableItem></ResponsiveGrid></PullToRefresh>);\n * }\n * ```\n */\nfunction DataList<T extends Record<string, unknown>>({\n data,\n columns,\n keyField,\n onRowClick,\n emptyMessage = 'データがありません',\n className,\n mobileCardClassName,\n testId,\n}: DataListProps<T>) {\n const getValue = (item: T, key: string): unknown => {\n const keys = key.split('.');\n let value: unknown = item;\n for (const k of keys) {\n value = (value as Record<string, unknown>)?.[k];\n }\n return value;\n };\n\n if (data.length === 0) {\n return (\n <div\n data-slot='data-list-empty'\n data-testid={testId ? `${testId}-empty` : undefined}\n className='flex items-center justify-center py-12 text-muted-foreground'\n >\n {emptyMessage}\n </div>\n );\n }\n\n return (\n <div data-slot='data-list' data-testid={testId} className={cn('w-full', className)}>\n {/* Desktop Table */}\n <div className='hidden md:block overflow-x-auto'>\n <table className='w-full text-sm'>\n <thead>\n <tr className='border-b bg-muted/50'>\n {columns.map((col) => (\n <th\n key={String(col.key)}\n className={cn('py-3 px-4 text-left font-medium text-foreground', col.className)}\n >\n {col.header}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {data.map((item) => (\n <tr\n key={String(item[keyField])}\n data-slot='data-list-row'\n className={cn(\n 'border-b transition-colors hover:bg-muted/50',\n onRowClick && 'cursor-pointer',\n )}\n onClick={() => onRowClick?.(item)}\n >\n {columns.map((col) => (\n <td key={String(col.key)} className={cn('py-3 px-4', col.className)}>\n {col.render ? col.render(item) : String(getValue(item, String(col.key)) ?? '')}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n\n {/* Mobile Cards */}\n <div className='md:hidden space-y-3'>\n {data.map((item) => (\n <div\n key={String(item[keyField])}\n data-slot='data-list-card'\n className={cn(\n 'p-4 border rounded-lg bg-card text-card-foreground shadow-sm',\n onRowClick && 'cursor-pointer active:bg-muted/50',\n mobileCardClassName,\n )}\n onClick={() => onRowClick?.(item)}\n >\n {columns\n .filter((col) => !col.mobileHidden)\n .map((col, idx) => (\n <div\n key={String(col.key)}\n className={cn(\n 'flex justify-between items-center',\n idx > 0 && 'mt-2 pt-2 border-t border-dashed border-border',\n )}\n >\n {col.mobileLabel !== false && (\n <span className='text-sm text-muted-foreground'>{col.header}</span>\n )}\n <span className={cn('font-medium', col.className)}>\n {col.render ? col.render(item) : String(getValue(item, String(col.key)) ?? '')}\n </span>\n </div>\n ))}\n </div>\n ))}\n </div>\n </div>\n );\n}\n\n// ============================================================================\n// ResponsiveGrid\n// ============================================================================\n\n/**\n * Native div attributes and dynamically constructed breakpoint column classes.\n * @remarks Inherited native or primitive props keep their upstream types and behavior; this declaration documents only the wrapper-owned options.\n * @see ResponsiveGrid\n */\nexport interface ResponsiveGridProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Breakpoint column counts; defaults to { default: 1, md: 2, lg: 3 }. A supplied object replaces the default, with no merging. Requested dynamic utility classes must exist in host CSS.\n */\n cols?: {\n /**\n * Column count below the sm breakpoint; if omitted in a supplied cols object, no base column class is added.\n */\n default?: number;\n /**\n * Column count from the sm breakpoint; a requested utility class must exist in the host CSS.\n */\n sm?: number;\n /**\n * Column count from the md breakpoint; a requested utility class must exist in the host CSS.\n */\n md?: number;\n /**\n * Column count from the lg breakpoint; a requested utility class must exist in the host CSS.\n */\n lg?: number;\n /**\n * Column count from the xl breakpoint; a requested utility class must exist in the host CSS.\n */\n xl?: number;\n };\n /**\n * Gap preset: none=gap-0, sm=gap-2, default=gap-4, lg=gap-6; defaults to default.\n */\n gap?: 'none' | 'sm' | 'default' | 'lg';\n}\n\nconst gapClasses = {\n none: 'gap-0',\n sm: 'gap-2',\n default: 'gap-4',\n lg: 'gap-6',\n};\n\n/**\n * Builds grid-column utility classes for caller-selected breakpoints.\n * @param props - Component attributes and children accepted by the declared native/underlying prop type; className customizes wrapper styling. Wrapper defaults: cols={ default: 1, md: 2, lg: 3 }, gap='default'.\n * @returns The rendered ResponsiveGrid composition.\n * @remarks Import @alneas/appkit-react/styles in the rendering host. DataList mounts both desktop/mobile representations; CSS switches visibility at md, so custom render callbacks may execute for both. It does not virtualize or add keyboard row activation. keyField must give stable unique stringifiable keys. ResponsiveGrid creates dynamic Tailwind classes: the host CSS must include the requested classes. Touch helpers do not add mouse/keyboard equivalents or persistence. cols defaults to { default: 1, md: 2, lg: 3 }; supplying cols replaces that object without merging omitted breakpoints.\n * @example\n * ```tsx\n * import type { ComponentProps } from 'react';\n * import { DataList, ResponsiveGrid, SwipeableItem, PullToRefresh } from '@alneas/appkit-react/ui';\n * import '@alneas/appkit-react/styles';\n *\n * export function Example({ refresh }: { refresh: () => Promise<void> }) {\n * return (<PullToRefresh onRefresh={async () => { await refresh(); }}><ResponsiveGrid><SwipeableItem onSwipeLeft={() => console.log(\"Left swipe\")}><DataList data={[{ id: \"one\", title: \"Draft\" }]} keyField=\"id\" columns={[{ key: \"title\", header: \"Title\" }]} /></SwipeableItem></ResponsiveGrid></PullToRefresh>);\n * }\n * ```\n */\nfunction ResponsiveGrid({\n children,\n cols = { default: 1, md: 2, lg: 3 },\n gap = 'default',\n className,\n ...props\n}: ResponsiveGridProps) {\n // Build grid classes dynamically\n const colClasses = [\n cols.default && `grid-cols-${cols.default}`,\n cols.sm && `sm:grid-cols-${cols.sm}`,\n cols.md && `md:grid-cols-${cols.md}`,\n cols.lg && `lg:grid-cols-${cols.lg}`,\n cols.xl && `xl:grid-cols-${cols.xl}`,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div\n data-slot='responsive-grid'\n className={cn('grid', gapClasses[gap], colClasses, className)}\n {...props}\n >\n {children}\n </div>\n );\n}\n\n// ============================================================================\n// SwipeableItem\n// ============================================================================\n\n/**\n * Native outer div attributes and touch-swipe action configuration.\n * @remarks Inherited native or primitive props keep their upstream types and behavior; this declaration documents only the wrapper-owned options.\n * @see SwipeableItem\n */\nexport interface SwipeableItemProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Called at touch end when left displacement exceeds threshold; the wrapper then resets translation.\n * @returns No value; complete the host callback action.\n */\n onSwipeLeft?: () => void;\n /**\n * Called at touch end when right displacement exceeds threshold; the wrapper then resets translation.\n * @returns No value; complete the host callback action.\n */\n onSwipeRight?: () => void;\n /**\n * Background content revealed by a leftward swipe.\n */\n leftAction?: React.ReactNode;\n /**\n * Background content revealed by a rightward swipe.\n */\n rightAction?: React.ReactNode;\n /**\n * Strict activation threshold in CSS pixels; defaults to 50. Translation is capped at ±100, so thresholds >=100 never activate.\n */\n threshold?: number;\n}\n\n/**\n * Reveals side actions during a horizontal touch swipe and notifies the host after a threshold.\n * @param props - Component attributes and children accepted by the declared native/underlying prop type; className customizes wrapper styling. Wrapper defaults: threshold=50.\n * @returns The rendered SwipeableItem composition.\n * @remarks Import @alneas/appkit-react/styles in the rendering host. DataList mounts both desktop/mobile representations; CSS switches visibility at md, so custom render callbacks may execute for both. It does not virtualize or add keyboard row activation. keyField must give stable unique stringifiable keys. ResponsiveGrid creates dynamic Tailwind classes: the host CSS must include the requested classes. Touch helpers do not add mouse/keyboard equivalents or persistence. threshold defaults to 50 CSS pixels; displacement is clamped to ±100px and resets after touch end. leftAction appears during a left swipe, rightAction during a right swipe. Callbacks run only when displacement strictly exceeds the threshold.\n * @example\n * ```tsx\n * import type { ComponentProps } from 'react';\n * import { DataList, ResponsiveGrid, SwipeableItem, PullToRefresh } from '@alneas/appkit-react/ui';\n * import '@alneas/appkit-react/styles';\n *\n * export function Example({ refresh }: { refresh: () => Promise<void> }) {\n * return (<PullToRefresh onRefresh={async () => { await refresh(); }}><ResponsiveGrid><SwipeableItem onSwipeLeft={() => console.log(\"Left swipe\")}><DataList data={[{ id: \"one\", title: \"Draft\" }]} keyField=\"id\" columns={[{ key: \"title\", header: \"Title\" }]} /></SwipeableItem></ResponsiveGrid></PullToRefresh>);\n * }\n * ```\n */\nfunction SwipeableItem({\n children,\n onSwipeLeft,\n onSwipeRight,\n leftAction,\n rightAction,\n threshold = 50,\n className,\n ...props\n}: SwipeableItemProps) {\n const [translateX, setTranslateX] = React.useState(0);\n const [startX, setStartX] = React.useState(0);\n const [isDragging, setIsDragging] = React.useState(false);\n\n const handleTouchStart = (e: React.TouchEvent) => {\n setStartX(e.touches[0].clientX);\n setIsDragging(true);\n };\n\n const handleTouchMove = (e: React.TouchEvent) => {\n if (!isDragging) return;\n const diff = e.touches[0].clientX - startX;\n const maxSwipe = 100;\n setTranslateX(Math.max(-maxSwipe, Math.min(maxSwipe, diff)));\n };\n\n const handleTouchEnd = () => {\n setIsDragging(false);\n if (translateX > threshold && onSwipeRight) {\n onSwipeRight();\n } else if (translateX < -threshold && onSwipeLeft) {\n onSwipeLeft();\n }\n setTranslateX(0);\n };\n\n return (\n <div\n data-slot='swipeable-item'\n className={cn('relative overflow-hidden', className)}\n {...props}\n >\n {/* Background actions */}\n <div className='absolute inset-0 flex'>\n <div className='flex-1 flex items-center justify-start px-4 bg-green-500 text-white'>\n {rightAction}\n </div>\n <div className='flex-1 flex items-center justify-end px-4 bg-destructive text-destructive-foreground'>\n {leftAction}\n </div>\n </div>\n\n {/* Swipeable content */}\n <div\n className='relative bg-background transition-transform'\n style={{\n transform: `translateX(${translateX}px)`,\n transition: isDragging ? 'none' : 'transform 0.2s',\n }}\n onTouchStart={handleTouchStart}\n onTouchMove={handleTouchMove}\n onTouchEnd={handleTouchEnd}\n >\n {children}\n </div>\n </div>\n );\n}\n\n// ============================================================================\n// PullToRefresh\n// ============================================================================\n\n/**\n * Native outer div attributes and asynchronous downward-pull refresh configuration.\n * @remarks Inherited native or primitive props keep their upstream types and behavior; this declaration documents only the wrapper-owned options.\n * @see PullToRefresh\n */\nexport interface PullToRefreshProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Called and awaited after an eligible downward pull; the host performs refresh and handles errors. Rejection leaves the local refreshing state set.\n * @returns A promise resolving when host refresh work completes; rejection is not caught by the wrapper.\n */\n onRefresh: () => Promise<void>;\n /**\n * Visual pull distance in CSS pixels required for refresh; defaults to 80. Visual distance is half touch displacement capped at 100; values >100 cannot activate.\n */\n pullThreshold?: number;\n}\n\n/**\n * Tracks downward touch motion and requests an asynchronous refresh after a threshold.\n * @param props - Component attributes and children accepted by the declared native/underlying prop type; className customizes wrapper styling. Wrapper defaults: pullThreshold=80.\n * @returns The rendered PullToRefresh composition.\n * @remarks Import @alneas/appkit-react/styles in the rendering host. DataList mounts both desktop/mobile representations; CSS switches visibility at md, so custom render callbacks may execute for both. It does not virtualize or add keyboard row activation. keyField must give stable unique stringifiable keys. ResponsiveGrid creates dynamic Tailwind classes: the host CSS must include the requested classes. Touch helpers do not add mouse/keyboard equivalents or persistence. A pull starts only when window.scrollY is zero. Visual distance is half the pointer displacement, capped at 100 CSS pixels; pullThreshold defaults to 80. Refresh is awaited, but there is no concurrency guard or finally cleanup: rejection leaves refreshing/pull state set. Handle errors inside onRefresh when recovery is needed. Native touch handlers supplied in props override the wrapper handlers.\n * @example\n * ```tsx\n * import type { ComponentProps } from 'react';\n * import { DataList, ResponsiveGrid, SwipeableItem, PullToRefresh } from '@alneas/appkit-react/ui';\n * import '@alneas/appkit-react/styles';\n *\n * export function Example({ refresh }: { refresh: () => Promise<void> }) {\n * return (<PullToRefresh onRefresh={async () => { await refresh(); }}><ResponsiveGrid><SwipeableItem onSwipeLeft={() => console.log(\"Left swipe\")}><DataList data={[{ id: \"one\", title: \"Draft\" }]} keyField=\"id\" columns={[{ key: \"title\", header: \"Title\" }]} /></SwipeableItem></ResponsiveGrid></PullToRefresh>);\n * }\n * ```\n */\nfunction PullToRefresh({\n children,\n onRefresh,\n pullThreshold = 80,\n className,\n ...props\n}: PullToRefreshProps) {\n const [isPulling, setIsPulling] = React.useState(false);\n const [isRefreshing, setIsRefreshing] = React.useState(false);\n const [pullDistance, setPullDistance] = React.useState(0);\n const startY = React.useRef(0);\n\n const handleTouchStart = (e: React.TouchEvent) => {\n if (window.scrollY === 0) {\n startY.current = e.touches[0].clientY;\n setIsPulling(true);\n }\n };\n\n const handleTouchMove = (e: React.TouchEvent) => {\n if (!isPulling) return;\n const distance = e.touches[0].clientY - startY.current;\n if (distance > 0) {\n setPullDistance(Math.min(distance * 0.5, 100));\n }\n };\n\n const handleTouchEnd = async () => {\n if (pullDistance >= pullThreshold) {\n setIsRefreshing(true);\n await onRefresh();\n setIsRefreshing(false);\n }\n setIsPulling(false);\n setPullDistance(0);\n };\n\n return (\n <div\n data-slot='pull-to-refresh'\n className={cn('relative', className)}\n onTouchStart={handleTouchStart}\n onTouchMove={handleTouchMove}\n onTouchEnd={handleTouchEnd}\n {...props}\n >\n {/* Pull indicator */}\n <div\n className='absolute left-1/2 -translate-x-1/2 flex items-center justify-center transition-all'\n style={{\n top: pullDistance - 40,\n opacity: pullDistance / pullThreshold,\n }}\n >\n <div\n className={cn(\n 'w-6 h-6 border-2 border-primary border-t-transparent rounded-full',\n isRefreshing && 'animate-spin',\n )}\n />\n </div>\n\n {/* Content */}\n <div\n style={{\n transform: `translateY(${pullDistance}px)`,\n transition: isPulling ? 'none' : 'transform 0.2s',\n }}\n >\n {children}\n </div>\n </div>\n );\n}\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nexport { DataList, ResponsiveGrid, SwipeableItem, PullToRefresh };\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scroll-area.cjs","names":["React","ScrollAreaPrimitive","cn","require_runtime","require_ui_lib_utils","react_jsx_runtime","react","_base_ui_react_scroll_area","ScrollArea","props","className","ScrollBar","orientation"],"sources":["../../../../src/ui/components/ui/scroll-area.tsx"],"sourcesContent":["'use client';\nimport * as React from 'react';\n\nimport { ScrollArea as ScrollAreaPrimitive } from '@base-ui/react/scroll-area';\n\nimport { cn } from '../../lib/utils';\n\nconst ScrollArea = React.forwardRef<HTMLDivElement, ScrollAreaPrimitive.Root.Props>(\n ({ className, children, ...props }, ref) => (\n <ScrollAreaPrimitive.Root\n ref={ref}\n data-slot='scroll-area'\n className={cn('relative', className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n data-slot='scroll-area-viewport'\n className='focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1'\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n ),\n);\nScrollArea.displayName = 'ScrollArea';\n\n/**\n *
|
|
1
|
+
{"version":3,"file":"scroll-area.cjs","names":["React","ScrollAreaPrimitive","cn","require_runtime","require_ui_lib_utils","react_jsx_runtime","react","_base_ui_react_scroll_area","ScrollArea","props","className","ScrollBar","orientation"],"sources":["../../../../src/ui/components/ui/scroll-area.tsx"],"sourcesContent":["'use client';\nimport * as React from 'react';\n\nimport { ScrollArea as ScrollAreaPrimitive } from '@base-ui/react/scroll-area';\n\nimport { cn } from '../../lib/utils';\n\n/**\n * Renders a scroll viewport with a vertical scrollbar and corner.\n * @param props - Component attributes and children accepted by the declared Base UI or native prop type; className customizes wrapper styling.\n * @returns The rendered ScrollArea composition.\n * @remarks Import @alneas/appkit-react/styles in the rendering host. Constrain the root size so content can overflow. ScrollArea already inserts the vertical scrollbar and corner; it passes children into its viewport. ScrollBar requires Base UI scroll-area root context and defaults to vertical; an extra ScrollBar passed as ScrollArea children is placed inside the viewport, not as a root sibling. The ref prop forwards to the rendered control or container declared by the component ref type.\n * @example\n * ```tsx\n * import { ScrollArea } from '@alneas/appkit-react/ui';\n * import '@alneas/appkit-react/styles';\n *\n * export function Example() {\n * return (<ScrollArea className=\"h-32 w-64\"><div className=\"h-96\">Scrollable content</div></ScrollArea>);\n * }\n * ```\n */\nconst ScrollArea = React.forwardRef<HTMLDivElement, ScrollAreaPrimitive.Root.Props>(\n ({ className, children, ...props }, ref) => (\n <ScrollAreaPrimitive.Root\n ref={ref}\n data-slot='scroll-area'\n className={cn('relative', className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n data-slot='scroll-area-viewport'\n className='focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1'\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n ),\n);\nScrollArea.displayName = 'ScrollArea';\n\n/**\n * Renders a scrollbar track and thumb for the surrounding scroll-area root.\n * @param props - Component attributes and children accepted by the declared Base UI or native prop type; className customizes wrapper styling. Wrapper defaults: orientation='vertical'.\n * @returns The rendered ScrollBar composition.\n * @remarks Import @alneas/appkit-react/styles in the rendering host. Constrain the root size so content can overflow. ScrollArea already inserts the vertical scrollbar and corner; it passes children into its viewport. ScrollBar requires Base UI scroll-area root context and defaults to vertical; an extra ScrollBar passed as ScrollArea children is placed inside the viewport, not as a root sibling.\n * @example\n * ```tsx\n * import { ScrollArea } from '@alneas/appkit-react/ui';\n * import '@alneas/appkit-react/styles';\n *\n * export function Example() {\n * return (<ScrollArea className=\"h-32 w-64\"><div className=\"h-96\">Scrollable content</div></ScrollArea>);\n * }\n * ```\n */\nfunction ScrollBar({\n className,\n orientation = 'vertical',\n ...props\n}: ScrollAreaPrimitive.Scrollbar.Props) {\n return (\n <ScrollAreaPrimitive.Scrollbar\n data-slot='scroll-area-scrollbar'\n data-orientation={orientation}\n orientation={orientation}\n className={cn(\n 'data-horizontal:h-2.5 data-horizontal:flex-col data-horizontal:border-t data-horizontal:border-t-transparent data-vertical:h-full data-vertical:w-2.5 data-vertical:border-l data-vertical:border-l-transparent flex touch-none p-px transition-colors select-none',\n className,\n )}\n {...props}\n >\n <ScrollAreaPrimitive.Thumb\n data-slot='scroll-area-thumb'\n className='rounded-full bg-border relative flex-1'\n />\n </ScrollAreaPrimitive.Scrollbar>\n );\n}\n\nexport { ScrollArea, ScrollBar };\n"],"mappings":"A,4SAsBA,IAAMQ,EAAaR,EAAM,YACtB,CAAE,YAAW,WAAU,GAAGS,GAAS,KAClC,EAAAJ,EAAA,KAAA,CAACJ,EAAAA,WAAoB,KAArB,CACO,MACL,YAAU,cACV,UAAWC,EAAAA,GAAG,WAAYQ,CAAS,EACnC,GAAID,EAJN,SAAA,EAME,EAAAJ,EAAA,IAAA,CAACJ,EAAAA,WAAoB,SAArB,CACE,YAAU,uBACV,UAAU,qJAET,UAC2B,CAAA,GAC9B,EAAAI,EAAA,IAAA,CAACM,EAAD,CAAY,CAAA,GACZ,EAAAN,EAAA,IAAA,CAACJ,EAAAA,WAAoB,OAArB,CAA6B,CAAA,CACL,CAE9B,CAAA,CAAA,EACA,EAAW,YAAc,aAiBzB,SAASU,EAAU,CACjB,YACA,cAAc,WACd,GAAGF,GACmC,CACtC,OACE,EAAAJ,EAAA,IAAA,CAACJ,EAAAA,WAAoB,UAArB,CACE,YAAU,wBACV,mBAAkBW,EACL,cACb,UAAWV,EAAAA,GACT,qQACAQ,CACF,EACA,GAAID,EAEJ,UAAA,EAAAJ,EAAA,IAAA,CAACJ,EAAAA,WAAoB,MAArB,CACE,YAAU,oBACV,UAAU,wCACX,CAAA,CAC4B,CAAA,CAEnC,C"}
|