@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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"header.cjs","names":["Sheet","SheetTrigger","cn","buttonVariants","Menu","SheetContent","SheetHeader","SheetTitle","React","Button","_Fragment","ThemeSwitcherGroup","LanguageSwitcher","SpacingThemeSwitcher","ColorThemeSwitcher","ThemeModeSwitcher","DropdownMenu","DropdownMenuTrigger","Avatar","AvatarImage","AvatarFallback","DropdownMenuContent","DropdownMenuGroup","DropdownMenuLabel","DropdownMenuSeparator","DropdownMenuItem","SidebarTrigger","require_runtime","require_ui_lib_utils","require_ui_components_ui_button_variants","require_ui_components_ui_button_components","require_ui_components_ui_avatar","require_ui_components_ui_dropdown_menu","require_ui_components_ui_sheet","require_ui_components_theme_theme_switcher","require_tools_components_i18n_LanguageSwitcher","require_tools_components_sidebar_sidebar","react_jsx_runtime","react","lucide_react","MobileMenu","isMenuLeft","menuItems","item","index","showThemeToggle","showColorToggle","showSpaceToggle","showLanguageToggle","Header","props","menuPosition","className","logo","title","navItems","user","userMenuItems","onLogout","actions"],"sources":["../../../../src/tools/components/header/header.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Menu } from 'lucide-react';\nimport { Button, buttonVariants } from '../ui/button';\nimport { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from '../ui';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../ui/dropdown-menu';\nimport { Avatar, AvatarFallback, AvatarImage } from '../ui/avatar';\nimport {\n ThemeSwitcherGroup,\n ThemeModeSwitcher,\n ColorThemeSwitcher,\n SpacingThemeSwitcher,\n} from \"../theme\";\nimport { LanguageSwitcher } from \"../i18n/LanguageSwitcher\";\nimport { cn } from \"../../lib/utils\";\nimport { SidebarTrigger } from \"../sidebar/sidebar\";\nimport type { Locale } from '../../paraglide/runtime.js';\n\n/**\n * ヘッダーのプロップス\n */\nexport interface HeaderProps extends React.HTMLAttributes<HTMLElement> {\n /** ロゴ要素 */\n logo?: React.ReactNode;\n /** タイトル */\n title?: string;\n /** メニュー位置 */\n menuPosition?: 'left' | 'right';\n /** メニューアイテム */\n menuItems?: { label: string; onClick?: () => void; href?: string; icon?: React.ReactNode }[];\n /** ナビゲーションアイテム */\n navItems?: { label: string; onClick?: () => void; href?: string; active?: boolean }[];\n /** ユーザー情報 */\n user?: {\n name: string;\n email?: string;\n image?: string;\n initials?: string;\n };\n /** ユーザーメニューアイテム */\n userMenuItems?: { label: string; onClick?: () => void; href?: string; icon?: React.ReactNode }[];\n /** ログアウトコールバック */\n onLogout?: () => void;\n /** ダーク/ライトモード切替ボタン表示 */\n showThemeToggle?: boolean;\n /** カラーテーマ切替ボタン表示 */\n showColorToggle?: boolean;\n /** スペーシング切替ボタン表示 */\n showSpaceToggle?: boolean;\n /** 言語切替ボタン表示 */\n showLanguageToggle?: boolean;\n /** 言語変更時のコールバック */\n onLanguageChange?: (lang: Locale) => void;\n /** 現在の言語 */\n currentLanguage?: Locale;\n /** 追加アクション */\n actions?: React.ReactNode;\n}\n\ntype MenuItem = NonNullable<HeaderProps['menuItems']>[number];\n\nconst MobileMenu: React.FC<{\n menuItems: MenuItem[];\n isMenuLeft: boolean;\n showThemeToggle: boolean;\n showColorToggle: boolean;\n showSpaceToggle: boolean;\n showLanguageToggle: boolean;\n}> = ({\n menuItems,\n isMenuLeft,\n showThemeToggle,\n showColorToggle,\n showSpaceToggle,\n showLanguageToggle,\n}) => (\n <Sheet>\n <SheetTrigger className={cn(buttonVariants({ variant: 'ghost', size: 'icon' }), 'shrink-0')}>\n <Menu className='h-5 w-5' />\n <span className='sr-only'>Toggle menu</span>\n </SheetTrigger>\n <SheetContent side={isMenuLeft ? 'left' : 'right'}>\n <SheetHeader>\n <SheetTitle>Menu</SheetTitle>\n </SheetHeader>\n <div className='grid gap-4 py-4'>\n {menuItems.map((item, index) => (\n <React.Fragment key={index}>\n {item.href ? (\n <a\n href={item.href}\n className={cn(buttonVariants({ variant: 'ghost' }), 'justify-start')}\n onClick={item.onClick}\n >\n {item.icon && <span className='mr-2'>{item.icon}</span>}\n {item.label}\n </a>\n ) : (\n <Button variant='ghost' className='justify-start' onClick={item.onClick}>\n {item.icon && <span className='mr-2'>{item.icon}</span>}\n {item.label}\n </Button>\n )}\n </React.Fragment>\n ))}\n {(showThemeToggle || showColorToggle || showSpaceToggle) && (\n <>\n <div className='h-px bg-border my-2' />\n <div className='px-2'>\n <ThemeSwitcherGroup\n showThemeMode={showThemeToggle}\n showColorTheme={showColorToggle}\n showSpacingTheme={showSpaceToggle}\n modeVariant='icon-group'\n colorVariant='icon-group'\n spacingVariant='icon-group'\n />\n </div>\n </>\n )}\n {showLanguageToggle && (\n <div className='px-2'>\n <LanguageSwitcher />\n </div>\n )}\n </div>\n </SheetContent>\n </Sheet>\n);\n\n/**\n * ヘッダーコンポーネント\n *\n * ロゴ、ナビゲーション、テーマ切り替え、ユーザーメニューを含む\n * レスポンシブなヘッダーコンポーネント。\n *\n * @example\n * ```tsx\n * import { Header } from '@alneas/appkit-react/tools/header';\n *\n * <Header\n * logo={<img src=\"/logo.svg\" alt=\"Logo\" />}\n * title=\"My App\"\n * navItems={[\n * { label: 'ホーム', href: '/', active: true },\n * { label: '設定', href: '/settings' },\n * ]}\n * user={{ name: '山田太郎', email: 'yamada@example.com' }}\n * onLogout={() => handleLogout()}\n * />\n * ```\n */\nexport function Header({\n className,\n logo,\n title,\n menuPosition = 'right',\n menuItems = [],\n navItems = [],\n user,\n userMenuItems = [],\n onLogout,\n showThemeToggle = true,\n showColorToggle = true,\n showSpaceToggle = true,\n showLanguageToggle = true,\n onLanguageChange,\n currentLanguage,\n actions,\n ...props\n}: HeaderProps) {\n // If logo is on the left (default/implied), menu icon should be on the right by default?\n // Requirement 4: \"menu icon in left or right end(choosable. in right if logo is in left)\"\n // If logo is provided, it usually sits on the left. So menuPosition default 'right' makes sense.\n // If menuPosition is 'left', we should probably ensure logo isn't conflicting or logo is hidden?\n // Let's assume user handles logic or we prioritize menuPosition.\n // However, \"in right if logo is in left\" implies conditional default.\n // We already defaulted menuPosition to 'right' in props.\n\n // Determine effective menu position.\n // If logo is present and menuPosition is undefined, it defaults to right.\n\n const isMenuLeft = menuPosition === 'left';\n\n return (\n <header\n className={cn(\n 'sticky top-0 z-40 w-full border-b bg-primary text-primary-foreground shadow-sm',\n className,\n )}\n {...props}\n >\n <div className='flex h-16 items-center justify-between px-4 gap-4 overflow-hidden'>\n <div className='flex items-center gap-4 min-w-0 flex-shrink-0 relative z-10 bg-primary pr-4'>\n {/* Left Section */}\n {isMenuLeft && menuItems.length > 0 && (\n <div className='flex-shrink-0'>\n <MobileMenu\n menuItems={menuItems}\n isMenuLeft={isMenuLeft}\n showThemeToggle={showThemeToggle}\n showColorToggle={showColorToggle}\n showSpaceToggle={showSpaceToggle}\n showLanguageToggle={showLanguageToggle}\n />\n </div>\n )}\n\n {logo && (\n <div className='flex items-center gap-2 min-w-0'>\n {logo}\n {title && (\n <span className='text-lg font-bold hidden md:inline-block truncate'>{title}</span>\n )}\n </div>\n )}\n {/* Title without logo if applicable */}\n {!logo && title && (\n <div className='flex items-center gap-2 min-w-0'>\n <span className='text-lg font-bold truncate'>{title}</span>\n </div>\n )}\n\n {/* Center/Nav Section - hidden on mobile */}\n <nav className='flex items-center gap-6 text-sm font-medium hidden md:flex'>\n {navItems.map((item, index) => (\n <a\n key={index}\n href={item.href}\n onClick={item.onClick}\n className={cn(\n 'transition-colors hover:text-primary-foreground/80',\n item.active\n ? 'text-primary-foreground font-bold underline underline-offset-4'\n : 'text-primary-foreground/60',\n )}\n >\n {item.label}\n </a>\n ))}\n </nav>\n </div>\n\n {/* Right Section - flex-row-reverse ensures essential items stay at right edge */}\n <div className='ml-auto flex items-center justify-end gap-2 min-w-0 flex-shrink'>\n {/* Switchers - shrink before title */}\n <div className='flex items-center gap-2 min-w-0 flex-shrink overflow-hidden justify-end'>\n {showSpaceToggle && <SpacingThemeSwitcher variant='toggle' withBackground />}\n {showColorToggle && <ColorThemeSwitcher variant='toggle' withBackground />}\n {showThemeToggle && <ThemeModeSwitcher variant='toggle' withBackground />}\n {showLanguageToggle && (\n <LanguageSwitcher\n onLanguageChange={onLanguageChange}\n currentLanguage={currentLanguage}\n />\n )}\n </div>\n\n {/* Essential actions - always visible */}\n <div className='flex items-center gap-2 flex-none relative z-20 bg-primary pl-2'>\n {/* User Profile */}\n {user && (\n <DropdownMenu>\n <DropdownMenuTrigger\n aria-label='ユーザーメニュー'\n className={cn(\n buttonVariants({ variant: 'ghost' }),\n 'relative h-8 w-8 rounded-full p-0 flex items-center justify-center',\n )}\n >\n <Avatar className='h-8 w-8'>\n <AvatarImage src={user.image} alt={user.name} />\n <AvatarFallback>\n {user.initials || user.name.slice(0, 2).toUpperCase()}\n </AvatarFallback>\n </Avatar>\n </DropdownMenuTrigger>\n <DropdownMenuContent className='w-56' align='end'>\n <DropdownMenuGroup>\n <DropdownMenuLabel className='font-normal'>\n <div className='flex flex-col space-y-1'>\n <p className='text-sm font-medium leading-none'>{user.name}</p>\n <p className='text-xs leading-none text-muted-foreground'>{user.email}</p>\n </div>\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n {userMenuItems.map((item, index) => (\n <DropdownMenuItem key={index} onClick={item.onClick}>\n {item.href ? (\n <a href={item.href} className='w-full h-full flex items-center'>\n {item.label}\n </a>\n ) : (\n item.label\n )}\n </DropdownMenuItem>\n ))}\n {onLogout && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuItem onClick={onLogout}>Log out</DropdownMenuItem>\n </>\n )}\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n\n {actions}\n\n {/* Mobile Menu Trigger (Right side) */}\n {!isMenuLeft && menuItems.length > 0 && (\n <MobileMenu\n menuItems={menuItems}\n isMenuLeft={isMenuLeft}\n showThemeToggle={showThemeToggle}\n showColorToggle={showColorToggle}\n showSpaceToggle={showSpaceToggle}\n showLanguageToggle={showLanguageToggle}\n />\n )}\n\n {/* Mobile Sidebar Trigger (rightmost when no menu icon) */}\n <SidebarTrigger className='md:hidden' />\n </div>\n </div>\n </div>\n </header>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"header.cjs","names":["Sheet","SheetTrigger","cn","buttonVariants","Menu","SheetContent","SheetHeader","SheetTitle","React","Button","_Fragment","ThemeSwitcherGroup","LanguageSwitcher","SpacingThemeSwitcher","ColorThemeSwitcher","ThemeModeSwitcher","DropdownMenu","DropdownMenuTrigger","Avatar","AvatarImage","AvatarFallback","DropdownMenuContent","DropdownMenuGroup","DropdownMenuLabel","DropdownMenuSeparator","DropdownMenuItem","SidebarTrigger","require_runtime","require_ui_lib_utils","require_ui_components_ui_button_variants","require_ui_components_ui_button_components","require_ui_components_ui_avatar","require_ui_components_ui_dropdown_menu","require_ui_components_ui_sheet","require_ui_components_theme_theme_switcher","require_tools_components_i18n_LanguageSwitcher","require_tools_components_sidebar_sidebar","react_jsx_runtime","react","lucide_react","MobileMenu","isMenuLeft","menuItems","item","index","showThemeToggle","showColorToggle","showSpaceToggle","showLanguageToggle","Header","props","menuPosition","className","logo","title","navItems","user","userMenuItems","onLogout","actions"],"sources":["../../../../src/tools/components/header/header.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Menu } from 'lucide-react';\nimport { Button, buttonVariants } from '../ui/button';\nimport { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from '../ui';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../ui/dropdown-menu';\nimport { Avatar, AvatarFallback, AvatarImage } from '../ui/avatar';\nimport {\n ThemeSwitcherGroup,\n ThemeModeSwitcher,\n ColorThemeSwitcher,\n SpacingThemeSwitcher,\n} from \"../theme\";\nimport { LanguageSwitcher } from \"../i18n/LanguageSwitcher\";\nimport { cn } from \"../../lib/utils\";\nimport { SidebarTrigger } from \"../sidebar/sidebar\";\nimport type { Locale } from '../../paraglide/runtime.js';\n\n/**\n * Host inputs and presentation settings for Header.\n * @remarks Inherited native or primitive props keep their upstream types and behavior; this declaration documents only the wrapper-owned options.\n * @see Header\n */\nexport interface HeaderProps extends React.HTMLAttributes<HTMLElement> {\n /**\n * Optional logo content shown beside title.\n */\n logo?: React.ReactNode;\n /**\n * Application title; hidden below md when logo is present.\n */\n title?: string;\n /**\n * Sheet-menu placement; defaults to right.\n */\n menuPosition?: 'left' | 'right';\n /**\n * Sheet-menu entries; empty/omitted means no sheet trigger. href entries use anchors, otherwise Buttons.\n */\n menuItems?: { /**\n * Visible text for the navigation/menu entry.\n */\n label: string; /**\n * Host action invoked when this entry is clicked; the host owns any navigation or asynchronous work.\n * @returns No value; complete the host callback action.\n */\n onClick?: () => void; /**\n * Optional anchor destination; no router integration or authorization checks are installed.\n */\n href?: string; /**\n * Optional leading sheet-menu icon; user-menu icon fields are currently ignored.\n */\n icon?: React.ReactNode }[];\n /**\n * Desktop-only navigation anchors; the host supplies href/onClick and active state.\n */\n navItems?: { /**\n * Visible text for the navigation/menu entry.\n */\n label: string; /**\n * Host action invoked when this entry is clicked; the host owns any navigation or asynchronous work.\n * @returns No value; complete the host callback action.\n */\n onClick?: () => void; /**\n * Optional anchor destination; no router integration or authorization checks are installed.\n */\n href?: string; /**\n * Adds desktop navigation active styling when true; omitted/false uses inactive styling.\n */\n active?: boolean }[];\n /**\n * Host-supplied profile display data; omitted hides the avatar menu. It is not validated as authenticated identity.\n */\n user?: {\n /**\n * User display name; also supplies the two-character uppercase avatar fallback.\n */\n name: string;\n /**\n * Optional user email shown in the avatar menu.\n */\n email?: string;\n /**\n * Optional avatar image URL; missing/failing images use the fallback.\n */\n image?: string;\n /**\n * Optional avatar fallback text; falsy values use the first two name characters.\n */\n initials?: string;\n };\n /**\n * Avatar dropdown entries; href creates an anchor and onClick is attached to the menu item. Accepted icon fields are currently ignored.\n */\n userMenuItems?: { /**\n * Visible text for the navigation/menu entry.\n */\n label: string; /**\n * Host action invoked when this entry is clicked; the host owns any navigation or asynchronous work.\n * @returns No value; complete the host callback action.\n */\n onClick?: () => void; /**\n * Optional anchor destination; no router integration or authorization checks are installed.\n */\n href?: string; /**\n * Optional leading sheet-menu icon; user-menu icon fields are currently ignored.\n */\n icon?: React.ReactNode }[];\n /**\n * Called from the optional logout menu item; the host performs logout and invalidates its own session/cache.\n * @returns No value; complete the host callback action.\n */\n onLogout?: () => void;\n /**\n * Shows the main and sheet theme-mode controls; defaults to true.\n */\n showThemeToggle?: boolean;\n /**\n * Shows the main and sheet palette controls; defaults to true.\n */\n showColorToggle?: boolean;\n /**\n * Shows the main and sheet spacing controls; defaults to true.\n */\n showSpaceToggle?: boolean;\n /**\n * Shows the main and sheet locale toggles; defaults to true.\n */\n showLanguageToggle?: boolean;\n /**\n * Controlled locale callback forwarded only to the main header toggle; the sheet toggle uses global runtime behavior.\n * @param lang - Host callback input described above.\n * @returns No value; complete the host callback action.\n */\n onLanguageChange?: (lang: Locale) => void;\n /**\n * Locale override forwarded only to the main header toggle; omitted reads runtime state.\n */\n currentLanguage?: Locale;\n /**\n * Additional action content displayed in the right action group.\n */\n actions?: React.ReactNode;\n}\n\ntype MenuItem = NonNullable<HeaderProps['menuItems']>[number];\n\nconst MobileMenu: React.FC<{\n menuItems: MenuItem[];\n isMenuLeft: boolean;\n showThemeToggle: boolean;\n showColorToggle: boolean;\n showSpaceToggle: boolean;\n showLanguageToggle: boolean;\n}> = ({\n menuItems,\n isMenuLeft,\n showThemeToggle,\n showColorToggle,\n showSpaceToggle,\n showLanguageToggle,\n}) => (\n <Sheet>\n <SheetTrigger className={cn(buttonVariants({ variant: 'ghost', size: 'icon' }), 'shrink-0')}>\n <Menu className='h-5 w-5' />\n <span className='sr-only'>Toggle menu</span>\n </SheetTrigger>\n <SheetContent side={isMenuLeft ? 'left' : 'right'}>\n <SheetHeader>\n <SheetTitle>Menu</SheetTitle>\n </SheetHeader>\n <div className='grid gap-4 py-4'>\n {menuItems.map((item, index) => (\n <React.Fragment key={index}>\n {item.href ? (\n <a\n href={item.href}\n className={cn(buttonVariants({ variant: 'ghost' }), 'justify-start')}\n onClick={item.onClick}\n >\n {item.icon && <span className='mr-2'>{item.icon}</span>}\n {item.label}\n </a>\n ) : (\n <Button variant='ghost' className='justify-start' onClick={item.onClick}>\n {item.icon && <span className='mr-2'>{item.icon}</span>}\n {item.label}\n </Button>\n )}\n </React.Fragment>\n ))}\n {(showThemeToggle || showColorToggle || showSpaceToggle) && (\n <>\n <div className='h-px bg-border my-2' />\n <div className='px-2'>\n <ThemeSwitcherGroup\n showThemeMode={showThemeToggle}\n showColorTheme={showColorToggle}\n showSpacingTheme={showSpaceToggle}\n modeVariant='icon-group'\n colorVariant='icon-group'\n spacingVariant='icon-group'\n />\n </div>\n </>\n )}\n {showLanguageToggle && (\n <div className='px-2'>\n <LanguageSwitcher />\n </div>\n )}\n </div>\n </SheetContent>\n </Sheet>\n);\n\n/**\n * Renders a sticky application header with navigation, theme/locale controls and an optional user menu.\n * @param props - Header configuration and native header attributes; className customizes styling, and children are replaced by the built-in layout. Wrapper defaults: menuPosition='right', menuItems=[], navItems=[], userMenuItems=[], showThemeToggle=true, showColorToggle=true, showSpaceToggle=true, showLanguageToggle=true.\n * @returns The rendered Header composition.\n * @remarks Import @alneas/appkit-react/styles in the rendering host. Import Appkit CSS. SidebarProvider is required because the header always renders SidebarTrigger, even when hidden by desktop CSS. ThemeProvider supplies working theme controls; locale updates follow LanguageSwitcher. The host owns routing, identity data and logout effects; user is display data, not proof of an authenticated session. Header children are replaced by its built-in layout. navItems are desktop-only anchors; menuItems populate the sheet menu. The sheet language switcher does not receive currentLanguage/onLanguageChange, so those props control only the main header switcher. userMenuItems.icon is accepted but not rendered.\n * @example\n * ```tsx\n * import { ThemeProvider } from '@alneas/appkit-react/ui/theme';\n * import { SidebarProvider } from '@alneas/appkit-react/tools/sidebar';\n * import { Header } from '@alneas/appkit-react/tools/header';\n * import '@alneas/appkit-react/styles';\n *\n * export function Example() {\n * return (<ThemeProvider><SidebarProvider><Header title=\"Project\" navItems={[{ label: \"Home\", href: \"/\", active: true }]} menuItems={[{ label: \"Help\", href: \"/help\" }]} /></SidebarProvider></ThemeProvider>);\n * }\n * ```\n */\nexport function Header({\n className,\n logo,\n title,\n menuPosition = 'right',\n menuItems = [],\n navItems = [],\n user,\n userMenuItems = [],\n onLogout,\n showThemeToggle = true,\n showColorToggle = true,\n showSpaceToggle = true,\n showLanguageToggle = true,\n onLanguageChange,\n currentLanguage,\n actions,\n ...props\n}: HeaderProps) {\n // If logo is on the left (default/implied), menu icon should be on the right by default?\n // Requirement 4: \"menu icon in left or right end(choosable. in right if logo is in left)\"\n // If logo is provided, it usually sits on the left. So menuPosition default 'right' makes sense.\n // If menuPosition is 'left', we should probably ensure logo isn't conflicting or logo is hidden?\n // Let's assume user handles logic or we prioritize menuPosition.\n // However, \"in right if logo is in left\" implies conditional default.\n // We already defaulted menuPosition to 'right' in props.\n\n // Determine effective menu position.\n // If logo is present and menuPosition is undefined, it defaults to right.\n\n const isMenuLeft = menuPosition === 'left';\n\n return (\n <header\n className={cn(\n 'sticky top-0 z-40 w-full border-b bg-primary text-primary-foreground shadow-sm',\n className,\n )}\n {...props}\n >\n <div className='flex h-16 items-center justify-between px-4 gap-4 overflow-hidden'>\n <div className='flex items-center gap-4 min-w-0 flex-shrink-0 relative z-10 bg-primary pr-4'>\n {/* Left Section */}\n {isMenuLeft && menuItems.length > 0 && (\n <div className='flex-shrink-0'>\n <MobileMenu\n menuItems={menuItems}\n isMenuLeft={isMenuLeft}\n showThemeToggle={showThemeToggle}\n showColorToggle={showColorToggle}\n showSpaceToggle={showSpaceToggle}\n showLanguageToggle={showLanguageToggle}\n />\n </div>\n )}\n\n {logo && (\n <div className='flex items-center gap-2 min-w-0'>\n {logo}\n {title && (\n <span className='text-lg font-bold hidden md:inline-block truncate'>{title}</span>\n )}\n </div>\n )}\n {/* Title without logo if applicable */}\n {!logo && title && (\n <div className='flex items-center gap-2 min-w-0'>\n <span className='text-lg font-bold truncate'>{title}</span>\n </div>\n )}\n\n {/* Center/Nav Section - hidden on mobile */}\n <nav className='flex items-center gap-6 text-sm font-medium hidden md:flex'>\n {navItems.map((item, index) => (\n <a\n key={index}\n href={item.href}\n onClick={item.onClick}\n className={cn(\n 'transition-colors hover:text-primary-foreground/80',\n item.active\n ? 'text-primary-foreground font-bold underline underline-offset-4'\n : 'text-primary-foreground/60',\n )}\n >\n {item.label}\n </a>\n ))}\n </nav>\n </div>\n\n {/* Right Section - flex-row-reverse ensures essential items stay at right edge */}\n <div className='ml-auto flex items-center justify-end gap-2 min-w-0 flex-shrink'>\n {/* Switchers - shrink before title */}\n <div className='flex items-center gap-2 min-w-0 flex-shrink overflow-hidden justify-end'>\n {showSpaceToggle && <SpacingThemeSwitcher variant='toggle' withBackground />}\n {showColorToggle && <ColorThemeSwitcher variant='toggle' withBackground />}\n {showThemeToggle && <ThemeModeSwitcher variant='toggle' withBackground />}\n {showLanguageToggle && (\n <LanguageSwitcher\n onLanguageChange={onLanguageChange}\n currentLanguage={currentLanguage}\n />\n )}\n </div>\n\n {/* Essential actions - always visible */}\n <div className='flex items-center gap-2 flex-none relative z-20 bg-primary pl-2'>\n {/* User Profile */}\n {user && (\n <DropdownMenu>\n <DropdownMenuTrigger\n aria-label={`${user.initials || user.name.slice(0, 2).toUpperCase()} ${user.name} ユーザーメニュー`}\n className={cn(\n buttonVariants({ variant: 'ghost' }),\n 'relative h-8 w-8 rounded-full p-0 flex items-center justify-center',\n )}\n >\n <Avatar className='h-8 w-8'>\n <AvatarImage src={user.image} alt={user.name} />\n <AvatarFallback>\n {user.initials || user.name.slice(0, 2).toUpperCase()}\n </AvatarFallback>\n </Avatar>\n </DropdownMenuTrigger>\n <DropdownMenuContent className='w-56' align='end'>\n <DropdownMenuGroup>\n <DropdownMenuLabel className='font-normal'>\n <div className='flex flex-col space-y-1'>\n <p className='text-sm font-medium leading-none'>{user.name}</p>\n <p className='text-xs leading-none text-muted-foreground'>{user.email}</p>\n </div>\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n {userMenuItems.map((item, index) => (\n <DropdownMenuItem key={index} onClick={item.onClick}>\n {item.href ? (\n <a href={item.href} className='w-full h-full flex items-center'>\n {item.label}\n </a>\n ) : (\n item.label\n )}\n </DropdownMenuItem>\n ))}\n {onLogout && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuItem onClick={onLogout}>Log out</DropdownMenuItem>\n </>\n )}\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n\n {actions}\n\n {/* Mobile Menu Trigger (Right side) */}\n {!isMenuLeft && menuItems.length > 0 && (\n <MobileMenu\n menuItems={menuItems}\n isMenuLeft={isMenuLeft}\n showThemeToggle={showThemeToggle}\n showColorToggle={showColorToggle}\n showSpaceToggle={showSpaceToggle}\n showLanguageToggle={showLanguageToggle}\n />\n )}\n\n {/* Mobile Sidebar Trigger (rightmost when no menu icon) */}\n <SidebarTrigger className='md:hidden' />\n </div>\n </div>\n </div>\n </header>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,80 +1,143 @@
|
|
|
1
1
|
import { Locale } from '../../paraglide/runtime.cjs';
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* Host inputs and presentation settings for Header.
|
|
5
|
+
* @remarks Inherited native or primitive props keep their upstream types and behavior; this declaration documents only the wrapper-owned options.
|
|
6
|
+
* @see Header
|
|
5
7
|
*/
|
|
6
8
|
export interface HeaderProps extends React.HTMLAttributes<HTMLElement> {
|
|
7
|
-
/**
|
|
9
|
+
/**
|
|
10
|
+
* Optional logo content shown beside title.
|
|
11
|
+
*/
|
|
8
12
|
logo?: React.ReactNode;
|
|
9
|
-
/**
|
|
13
|
+
/**
|
|
14
|
+
* Application title; hidden below md when logo is present.
|
|
15
|
+
*/
|
|
10
16
|
title?: string;
|
|
11
|
-
/**
|
|
17
|
+
/**
|
|
18
|
+
* Sheet-menu placement; defaults to right.
|
|
19
|
+
*/
|
|
12
20
|
menuPosition?: 'left' | 'right';
|
|
13
|
-
/**
|
|
21
|
+
/**
|
|
22
|
+
* Sheet-menu entries; empty/omitted means no sheet trigger. href entries use anchors, otherwise Buttons.
|
|
23
|
+
*/
|
|
14
24
|
menuItems?: {
|
|
15
|
-
label: string;
|
|
16
|
-
|
|
17
|
-
|
|
25
|
+
label: string; /**
|
|
26
|
+
* Host action invoked when this entry is clicked; the host owns any navigation or asynchronous work.
|
|
27
|
+
* @returns No value; complete the host callback action.
|
|
28
|
+
*/
|
|
29
|
+
onClick?: () => void; /**
|
|
30
|
+
* Optional anchor destination; no router integration or authorization checks are installed.
|
|
31
|
+
*/
|
|
32
|
+
href?: string; /**
|
|
33
|
+
* Optional leading sheet-menu icon; user-menu icon fields are currently ignored.
|
|
34
|
+
*/
|
|
18
35
|
icon?: React.ReactNode;
|
|
19
36
|
}[];
|
|
20
|
-
/**
|
|
37
|
+
/**
|
|
38
|
+
* Desktop-only navigation anchors; the host supplies href/onClick and active state.
|
|
39
|
+
*/
|
|
21
40
|
navItems?: {
|
|
22
|
-
label: string;
|
|
23
|
-
|
|
24
|
-
|
|
41
|
+
label: string; /**
|
|
42
|
+
* Host action invoked when this entry is clicked; the host owns any navigation or asynchronous work.
|
|
43
|
+
* @returns No value; complete the host callback action.
|
|
44
|
+
*/
|
|
45
|
+
onClick?: () => void; /**
|
|
46
|
+
* Optional anchor destination; no router integration or authorization checks are installed.
|
|
47
|
+
*/
|
|
48
|
+
href?: string; /**
|
|
49
|
+
* Adds desktop navigation active styling when true; omitted/false uses inactive styling.
|
|
50
|
+
*/
|
|
25
51
|
active?: boolean;
|
|
26
52
|
}[];
|
|
27
|
-
/**
|
|
53
|
+
/**
|
|
54
|
+
* Host-supplied profile display data; omitted hides the avatar menu. It is not validated as authenticated identity.
|
|
55
|
+
*/
|
|
28
56
|
user?: {
|
|
57
|
+
/**
|
|
58
|
+
* User display name; also supplies the two-character uppercase avatar fallback.
|
|
59
|
+
*/
|
|
29
60
|
name: string;
|
|
61
|
+
/**
|
|
62
|
+
* Optional user email shown in the avatar menu.
|
|
63
|
+
*/
|
|
30
64
|
email?: string;
|
|
65
|
+
/**
|
|
66
|
+
* Optional avatar image URL; missing/failing images use the fallback.
|
|
67
|
+
*/
|
|
31
68
|
image?: string;
|
|
69
|
+
/**
|
|
70
|
+
* Optional avatar fallback text; falsy values use the first two name characters.
|
|
71
|
+
*/
|
|
32
72
|
initials?: string;
|
|
33
73
|
};
|
|
34
|
-
/**
|
|
74
|
+
/**
|
|
75
|
+
* Avatar dropdown entries; href creates an anchor and onClick is attached to the menu item. Accepted icon fields are currently ignored.
|
|
76
|
+
*/
|
|
35
77
|
userMenuItems?: {
|
|
36
|
-
label: string;
|
|
37
|
-
|
|
38
|
-
|
|
78
|
+
label: string; /**
|
|
79
|
+
* Host action invoked when this entry is clicked; the host owns any navigation or asynchronous work.
|
|
80
|
+
* @returns No value; complete the host callback action.
|
|
81
|
+
*/
|
|
82
|
+
onClick?: () => void; /**
|
|
83
|
+
* Optional anchor destination; no router integration or authorization checks are installed.
|
|
84
|
+
*/
|
|
85
|
+
href?: string; /**
|
|
86
|
+
* Optional leading sheet-menu icon; user-menu icon fields are currently ignored.
|
|
87
|
+
*/
|
|
39
88
|
icon?: React.ReactNode;
|
|
40
89
|
}[];
|
|
41
|
-
/**
|
|
90
|
+
/**
|
|
91
|
+
* Called from the optional logout menu item; the host performs logout and invalidates its own session/cache.
|
|
92
|
+
* @returns No value; complete the host callback action.
|
|
93
|
+
*/
|
|
42
94
|
onLogout?: () => void;
|
|
43
|
-
/**
|
|
95
|
+
/**
|
|
96
|
+
* Shows the main and sheet theme-mode controls; defaults to true.
|
|
97
|
+
*/
|
|
44
98
|
showThemeToggle?: boolean;
|
|
45
|
-
/**
|
|
99
|
+
/**
|
|
100
|
+
* Shows the main and sheet palette controls; defaults to true.
|
|
101
|
+
*/
|
|
46
102
|
showColorToggle?: boolean;
|
|
47
|
-
/**
|
|
103
|
+
/**
|
|
104
|
+
* Shows the main and sheet spacing controls; defaults to true.
|
|
105
|
+
*/
|
|
48
106
|
showSpaceToggle?: boolean;
|
|
49
|
-
/**
|
|
107
|
+
/**
|
|
108
|
+
* Shows the main and sheet locale toggles; defaults to true.
|
|
109
|
+
*/
|
|
50
110
|
showLanguageToggle?: boolean;
|
|
51
|
-
/**
|
|
111
|
+
/**
|
|
112
|
+
* Controlled locale callback forwarded only to the main header toggle; the sheet toggle uses global runtime behavior.
|
|
113
|
+
* @param lang - Host callback input described above.
|
|
114
|
+
* @returns No value; complete the host callback action.
|
|
115
|
+
*/
|
|
52
116
|
onLanguageChange?: (lang: Locale) => void;
|
|
53
|
-
/**
|
|
117
|
+
/**
|
|
118
|
+
* Locale override forwarded only to the main header toggle; omitted reads runtime state.
|
|
119
|
+
*/
|
|
54
120
|
currentLanguage?: Locale;
|
|
55
|
-
/**
|
|
121
|
+
/**
|
|
122
|
+
* Additional action content displayed in the right action group.
|
|
123
|
+
*/
|
|
56
124
|
actions?: React.ReactNode;
|
|
57
125
|
}
|
|
58
126
|
/**
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
127
|
+
* Renders a sticky application header with navigation, theme/locale controls and an optional user menu.
|
|
128
|
+
* @param props - Header configuration and native header attributes; className customizes styling, and children are replaced by the built-in layout. Wrapper defaults: menuPosition='right', menuItems=[], navItems=[], userMenuItems=[], showThemeToggle=true, showColorToggle=true, showSpaceToggle=true, showLanguageToggle=true.
|
|
129
|
+
* @returns The rendered Header composition.
|
|
130
|
+
* @remarks Import @alneas/appkit-react/styles in the rendering host. Import Appkit CSS. SidebarProvider is required because the header always renders SidebarTrigger, even when hidden by desktop CSS. ThemeProvider supplies working theme controls; locale updates follow LanguageSwitcher. The host owns routing, identity data and logout effects; user is display data, not proof of an authenticated session. Header children are replaced by its built-in layout. navItems are desktop-only anchors; menuItems populate the sheet menu. The sheet language switcher does not receive currentLanguage/onLanguageChange, so those props control only the main header switcher. userMenuItems.icon is accepted but not rendered.
|
|
64
131
|
* @example
|
|
65
132
|
* ```tsx
|
|
133
|
+
* import { ThemeProvider } from '@alneas/appkit-react/ui/theme';
|
|
134
|
+
* import { SidebarProvider } from '@alneas/appkit-react/tools/sidebar';
|
|
66
135
|
* import { Header } from '@alneas/appkit-react/tools/header';
|
|
136
|
+
* import '@alneas/appkit-react/styles';
|
|
67
137
|
*
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
* navItems={[
|
|
72
|
-
* { label: 'ホーム', href: '/', active: true },
|
|
73
|
-
* { label: '設定', href: '/settings' },
|
|
74
|
-
* ]}
|
|
75
|
-
* user={{ name: '山田太郎', email: 'yamada@example.com' }}
|
|
76
|
-
* onLogout={() => handleLogout()}
|
|
77
|
-
* />
|
|
138
|
+
* export function Example() {
|
|
139
|
+
* return (<ThemeProvider><SidebarProvider><Header title="Project" navItems={[{ label: "Home", href: "/", active: true }]} menuItems={[{ label: "Help", href: "/help" }]} /></SidebarProvider></ThemeProvider>);
|
|
140
|
+
* }
|
|
78
141
|
* ```
|
|
79
142
|
*/
|
|
80
143
|
export declare function Header({ className, logo, title, menuPosition, menuItems, navItems, user, userMenuItems, onLogout, showThemeToggle, showColorToggle, showSpaceToggle, showLanguageToggle, onLanguageChange, currentLanguage, actions, ...props }: HeaderProps): React.JSX.Element;
|
|
@@ -1,80 +1,143 @@
|
|
|
1
1
|
import { Locale } from '../../paraglide/runtime.js';
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* Host inputs and presentation settings for Header.
|
|
5
|
+
* @remarks Inherited native or primitive props keep their upstream types and behavior; this declaration documents only the wrapper-owned options.
|
|
6
|
+
* @see Header
|
|
5
7
|
*/
|
|
6
8
|
export interface HeaderProps extends React.HTMLAttributes<HTMLElement> {
|
|
7
|
-
/**
|
|
9
|
+
/**
|
|
10
|
+
* Optional logo content shown beside title.
|
|
11
|
+
*/
|
|
8
12
|
logo?: React.ReactNode;
|
|
9
|
-
/**
|
|
13
|
+
/**
|
|
14
|
+
* Application title; hidden below md when logo is present.
|
|
15
|
+
*/
|
|
10
16
|
title?: string;
|
|
11
|
-
/**
|
|
17
|
+
/**
|
|
18
|
+
* Sheet-menu placement; defaults to right.
|
|
19
|
+
*/
|
|
12
20
|
menuPosition?: 'left' | 'right';
|
|
13
|
-
/**
|
|
21
|
+
/**
|
|
22
|
+
* Sheet-menu entries; empty/omitted means no sheet trigger. href entries use anchors, otherwise Buttons.
|
|
23
|
+
*/
|
|
14
24
|
menuItems?: {
|
|
15
|
-
label: string;
|
|
16
|
-
|
|
17
|
-
|
|
25
|
+
label: string; /**
|
|
26
|
+
* Host action invoked when this entry is clicked; the host owns any navigation or asynchronous work.
|
|
27
|
+
* @returns No value; complete the host callback action.
|
|
28
|
+
*/
|
|
29
|
+
onClick?: () => void; /**
|
|
30
|
+
* Optional anchor destination; no router integration or authorization checks are installed.
|
|
31
|
+
*/
|
|
32
|
+
href?: string; /**
|
|
33
|
+
* Optional leading sheet-menu icon; user-menu icon fields are currently ignored.
|
|
34
|
+
*/
|
|
18
35
|
icon?: React.ReactNode;
|
|
19
36
|
}[];
|
|
20
|
-
/**
|
|
37
|
+
/**
|
|
38
|
+
* Desktop-only navigation anchors; the host supplies href/onClick and active state.
|
|
39
|
+
*/
|
|
21
40
|
navItems?: {
|
|
22
|
-
label: string;
|
|
23
|
-
|
|
24
|
-
|
|
41
|
+
label: string; /**
|
|
42
|
+
* Host action invoked when this entry is clicked; the host owns any navigation or asynchronous work.
|
|
43
|
+
* @returns No value; complete the host callback action.
|
|
44
|
+
*/
|
|
45
|
+
onClick?: () => void; /**
|
|
46
|
+
* Optional anchor destination; no router integration or authorization checks are installed.
|
|
47
|
+
*/
|
|
48
|
+
href?: string; /**
|
|
49
|
+
* Adds desktop navigation active styling when true; omitted/false uses inactive styling.
|
|
50
|
+
*/
|
|
25
51
|
active?: boolean;
|
|
26
52
|
}[];
|
|
27
|
-
/**
|
|
53
|
+
/**
|
|
54
|
+
* Host-supplied profile display data; omitted hides the avatar menu. It is not validated as authenticated identity.
|
|
55
|
+
*/
|
|
28
56
|
user?: {
|
|
57
|
+
/**
|
|
58
|
+
* User display name; also supplies the two-character uppercase avatar fallback.
|
|
59
|
+
*/
|
|
29
60
|
name: string;
|
|
61
|
+
/**
|
|
62
|
+
* Optional user email shown in the avatar menu.
|
|
63
|
+
*/
|
|
30
64
|
email?: string;
|
|
65
|
+
/**
|
|
66
|
+
* Optional avatar image URL; missing/failing images use the fallback.
|
|
67
|
+
*/
|
|
31
68
|
image?: string;
|
|
69
|
+
/**
|
|
70
|
+
* Optional avatar fallback text; falsy values use the first two name characters.
|
|
71
|
+
*/
|
|
32
72
|
initials?: string;
|
|
33
73
|
};
|
|
34
|
-
/**
|
|
74
|
+
/**
|
|
75
|
+
* Avatar dropdown entries; href creates an anchor and onClick is attached to the menu item. Accepted icon fields are currently ignored.
|
|
76
|
+
*/
|
|
35
77
|
userMenuItems?: {
|
|
36
|
-
label: string;
|
|
37
|
-
|
|
38
|
-
|
|
78
|
+
label: string; /**
|
|
79
|
+
* Host action invoked when this entry is clicked; the host owns any navigation or asynchronous work.
|
|
80
|
+
* @returns No value; complete the host callback action.
|
|
81
|
+
*/
|
|
82
|
+
onClick?: () => void; /**
|
|
83
|
+
* Optional anchor destination; no router integration or authorization checks are installed.
|
|
84
|
+
*/
|
|
85
|
+
href?: string; /**
|
|
86
|
+
* Optional leading sheet-menu icon; user-menu icon fields are currently ignored.
|
|
87
|
+
*/
|
|
39
88
|
icon?: React.ReactNode;
|
|
40
89
|
}[];
|
|
41
|
-
/**
|
|
90
|
+
/**
|
|
91
|
+
* Called from the optional logout menu item; the host performs logout and invalidates its own session/cache.
|
|
92
|
+
* @returns No value; complete the host callback action.
|
|
93
|
+
*/
|
|
42
94
|
onLogout?: () => void;
|
|
43
|
-
/**
|
|
95
|
+
/**
|
|
96
|
+
* Shows the main and sheet theme-mode controls; defaults to true.
|
|
97
|
+
*/
|
|
44
98
|
showThemeToggle?: boolean;
|
|
45
|
-
/**
|
|
99
|
+
/**
|
|
100
|
+
* Shows the main and sheet palette controls; defaults to true.
|
|
101
|
+
*/
|
|
46
102
|
showColorToggle?: boolean;
|
|
47
|
-
/**
|
|
103
|
+
/**
|
|
104
|
+
* Shows the main and sheet spacing controls; defaults to true.
|
|
105
|
+
*/
|
|
48
106
|
showSpaceToggle?: boolean;
|
|
49
|
-
/**
|
|
107
|
+
/**
|
|
108
|
+
* Shows the main and sheet locale toggles; defaults to true.
|
|
109
|
+
*/
|
|
50
110
|
showLanguageToggle?: boolean;
|
|
51
|
-
/**
|
|
111
|
+
/**
|
|
112
|
+
* Controlled locale callback forwarded only to the main header toggle; the sheet toggle uses global runtime behavior.
|
|
113
|
+
* @param lang - Host callback input described above.
|
|
114
|
+
* @returns No value; complete the host callback action.
|
|
115
|
+
*/
|
|
52
116
|
onLanguageChange?: (lang: Locale) => void;
|
|
53
|
-
/**
|
|
117
|
+
/**
|
|
118
|
+
* Locale override forwarded only to the main header toggle; omitted reads runtime state.
|
|
119
|
+
*/
|
|
54
120
|
currentLanguage?: Locale;
|
|
55
|
-
/**
|
|
121
|
+
/**
|
|
122
|
+
* Additional action content displayed in the right action group.
|
|
123
|
+
*/
|
|
56
124
|
actions?: React.ReactNode;
|
|
57
125
|
}
|
|
58
126
|
/**
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
127
|
+
* Renders a sticky application header with navigation, theme/locale controls and an optional user menu.
|
|
128
|
+
* @param props - Header configuration and native header attributes; className customizes styling, and children are replaced by the built-in layout. Wrapper defaults: menuPosition='right', menuItems=[], navItems=[], userMenuItems=[], showThemeToggle=true, showColorToggle=true, showSpaceToggle=true, showLanguageToggle=true.
|
|
129
|
+
* @returns The rendered Header composition.
|
|
130
|
+
* @remarks Import @alneas/appkit-react/styles in the rendering host. Import Appkit CSS. SidebarProvider is required because the header always renders SidebarTrigger, even when hidden by desktop CSS. ThemeProvider supplies working theme controls; locale updates follow LanguageSwitcher. The host owns routing, identity data and logout effects; user is display data, not proof of an authenticated session. Header children are replaced by its built-in layout. navItems are desktop-only anchors; menuItems populate the sheet menu. The sheet language switcher does not receive currentLanguage/onLanguageChange, so those props control only the main header switcher. userMenuItems.icon is accepted but not rendered.
|
|
64
131
|
* @example
|
|
65
132
|
* ```tsx
|
|
133
|
+
* import { ThemeProvider } from '@alneas/appkit-react/ui/theme';
|
|
134
|
+
* import { SidebarProvider } from '@alneas/appkit-react/tools/sidebar';
|
|
66
135
|
* import { Header } from '@alneas/appkit-react/tools/header';
|
|
136
|
+
* import '@alneas/appkit-react/styles';
|
|
67
137
|
*
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
* navItems={[
|
|
72
|
-
* { label: 'ホーム', href: '/', active: true },
|
|
73
|
-
* { label: '設定', href: '/settings' },
|
|
74
|
-
* ]}
|
|
75
|
-
* user={{ name: '山田太郎', email: 'yamada@example.com' }}
|
|
76
|
-
* onLogout={() => handleLogout()}
|
|
77
|
-
* />
|
|
138
|
+
* export function Example() {
|
|
139
|
+
* return (<ThemeProvider><SidebarProvider><Header title="Project" navItems={[{ label: "Home", href: "/", active: true }]} menuItems={[{ label: "Help", href: "/help" }]} /></SidebarProvider></ThemeProvider>);
|
|
140
|
+
* }
|
|
78
141
|
* ```
|
|
79
142
|
*/
|
|
80
143
|
export declare function Header({ className, logo, title, menuPosition, menuItems, navItems, user, userMenuItems, onLogout, showThemeToggle, showColorToggle, showSpaceToggle, showLanguageToggle, onLanguageChange, currentLanguage, actions, ...props }: HeaderProps): React.JSX.Element;
|
|
@@ -132,7 +132,7 @@ function A({ className: n, logo: p, title: m, menuPosition: h = "right", menuIte
|
|
|
132
132
|
className: "flex items-center gap-2 flex-none relative z-20 bg-primary pl-2",
|
|
133
133
|
children: [
|
|
134
134
|
x && /* @__PURE__ */ E(o, { children: [/* @__PURE__ */ T(f, {
|
|
135
|
-
"aria-label":
|
|
135
|
+
"aria-label": `${x.initials || x.name.slice(0, 2).toUpperCase()} ${x.name} ユーザーメニュー`,
|
|
136
136
|
className: e(t({ variant: "ghost" }), "relative h-8 w-8 rounded-full p-0 flex items-center justify-center"),
|
|
137
137
|
children: /* @__PURE__ */ E(r, {
|
|
138
138
|
className: "h-8 w-8",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"header.js","names":["React","_Fragment","React$1","MobileMenu","Sheet","SheetTrigger","cn","buttonVariants","Menu","SheetContent","isMenuLeft","SheetHeader","SheetTitle","menuItems","item","Button","index","showThemeToggle","showColorToggle","showSpaceToggle","Fragment","ThemeSwitcherGroup","showLanguageToggle","LanguageSwitcher","Header","props","menuPosition","className","logo","title","navItems","SpacingThemeSwitcher","ColorThemeSwitcher","ThemeModeSwitcher","user","DropdownMenu","DropdownMenuTrigger","Avatar","AvatarImage","AvatarFallback","DropdownMenuContent","DropdownMenuGroup","DropdownMenuLabel","DropdownMenuSeparator","userMenuItems","DropdownMenuItem","onLogout","actions","SidebarTrigger"],"sources":["../../../../src/tools/components/header/header.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Menu } from 'lucide-react';\nimport { Button, buttonVariants } from '../ui/button';\nimport { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from '../ui';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../ui/dropdown-menu';\nimport { Avatar, AvatarFallback, AvatarImage } from '../ui/avatar';\nimport {\n ThemeSwitcherGroup,\n ThemeModeSwitcher,\n ColorThemeSwitcher,\n SpacingThemeSwitcher,\n} from \"../theme\";\nimport { LanguageSwitcher } from \"../i18n/LanguageSwitcher\";\nimport { cn } from \"../../lib/utils\";\nimport { SidebarTrigger } from \"../sidebar/sidebar\";\nimport type { Locale } from '../../paraglide/runtime.js';\n\n/**\n * ヘッダーのプロップス\n */\nexport interface HeaderProps extends React.HTMLAttributes<HTMLElement> {\n /** ロゴ要素 */\n logo?: React.ReactNode;\n /** タイトル */\n title?: string;\n /** メニュー位置 */\n menuPosition?: 'left' | 'right';\n /** メニューアイテム */\n menuItems?: { label: string; onClick?: () => void; href?: string; icon?: React.ReactNode }[];\n /** ナビゲーションアイテム */\n navItems?: { label: string; onClick?: () => void; href?: string; active?: boolean }[];\n /** ユーザー情報 */\n user?: {\n name: string;\n email?: string;\n image?: string;\n initials?: string;\n };\n /** ユーザーメニューアイテム */\n userMenuItems?: { label: string; onClick?: () => void; href?: string; icon?: React.ReactNode }[];\n /** ログアウトコールバック */\n onLogout?: () => void;\n /** ダーク/ライトモード切替ボタン表示 */\n showThemeToggle?: boolean;\n /** カラーテーマ切替ボタン表示 */\n showColorToggle?: boolean;\n /** スペーシング切替ボタン表示 */\n showSpaceToggle?: boolean;\n /** 言語切替ボタン表示 */\n showLanguageToggle?: boolean;\n /** 言語変更時のコールバック */\n onLanguageChange?: (lang: Locale) => void;\n /** 現在の言語 */\n currentLanguage?: Locale;\n /** 追加アクション */\n actions?: React.ReactNode;\n}\n\ntype MenuItem = NonNullable<HeaderProps['menuItems']>[number];\n\nconst MobileMenu: React.FC<{\n menuItems: MenuItem[];\n isMenuLeft: boolean;\n showThemeToggle: boolean;\n showColorToggle: boolean;\n showSpaceToggle: boolean;\n showLanguageToggle: boolean;\n}> = ({\n menuItems,\n isMenuLeft,\n showThemeToggle,\n showColorToggle,\n showSpaceToggle,\n showLanguageToggle,\n}) => (\n <Sheet>\n <SheetTrigger className={cn(buttonVariants({ variant: 'ghost', size: 'icon' }), 'shrink-0')}>\n <Menu className='h-5 w-5' />\n <span className='sr-only'>Toggle menu</span>\n </SheetTrigger>\n <SheetContent side={isMenuLeft ? 'left' : 'right'}>\n <SheetHeader>\n <SheetTitle>Menu</SheetTitle>\n </SheetHeader>\n <div className='grid gap-4 py-4'>\n {menuItems.map((item, index) => (\n <React.Fragment key={index}>\n {item.href ? (\n <a\n href={item.href}\n className={cn(buttonVariants({ variant: 'ghost' }), 'justify-start')}\n onClick={item.onClick}\n >\n {item.icon && <span className='mr-2'>{item.icon}</span>}\n {item.label}\n </a>\n ) : (\n <Button variant='ghost' className='justify-start' onClick={item.onClick}>\n {item.icon && <span className='mr-2'>{item.icon}</span>}\n {item.label}\n </Button>\n )}\n </React.Fragment>\n ))}\n {(showThemeToggle || showColorToggle || showSpaceToggle) && (\n <>\n <div className='h-px bg-border my-2' />\n <div className='px-2'>\n <ThemeSwitcherGroup\n showThemeMode={showThemeToggle}\n showColorTheme={showColorToggle}\n showSpacingTheme={showSpaceToggle}\n modeVariant='icon-group'\n colorVariant='icon-group'\n spacingVariant='icon-group'\n />\n </div>\n </>\n )}\n {showLanguageToggle && (\n <div className='px-2'>\n <LanguageSwitcher />\n </div>\n )}\n </div>\n </SheetContent>\n </Sheet>\n);\n\n/**\n * ヘッダーコンポーネント\n *\n * ロゴ、ナビゲーション、テーマ切り替え、ユーザーメニューを含む\n * レスポンシブなヘッダーコンポーネント。\n *\n * @example\n * ```tsx\n * import { Header } from '@alneas/appkit-react/tools/header';\n *\n * <Header\n * logo={<img src=\"/logo.svg\" alt=\"Logo\" />}\n * title=\"My App\"\n * navItems={[\n * { label: 'ホーム', href: '/', active: true },\n * { label: '設定', href: '/settings' },\n * ]}\n * user={{ name: '山田太郎', email: 'yamada@example.com' }}\n * onLogout={() => handleLogout()}\n * />\n * ```\n */\nexport function Header({\n className,\n logo,\n title,\n menuPosition = 'right',\n menuItems = [],\n navItems = [],\n user,\n userMenuItems = [],\n onLogout,\n showThemeToggle = true,\n showColorToggle = true,\n showSpaceToggle = true,\n showLanguageToggle = true,\n onLanguageChange,\n currentLanguage,\n actions,\n ...props\n}: HeaderProps) {\n // If logo is on the left (default/implied), menu icon should be on the right by default?\n // Requirement 4: \"menu icon in left or right end(choosable. in right if logo is in left)\"\n // If logo is provided, it usually sits on the left. So menuPosition default 'right' makes sense.\n // If menuPosition is 'left', we should probably ensure logo isn't conflicting or logo is hidden?\n // Let's assume user handles logic or we prioritize menuPosition.\n // However, \"in right if logo is in left\" implies conditional default.\n // We already defaulted menuPosition to 'right' in props.\n\n // Determine effective menu position.\n // If logo is present and menuPosition is undefined, it defaults to right.\n\n const isMenuLeft = menuPosition === 'left';\n\n return (\n <header\n className={cn(\n 'sticky top-0 z-40 w-full border-b bg-primary text-primary-foreground shadow-sm',\n className,\n )}\n {...props}\n >\n <div className='flex h-16 items-center justify-between px-4 gap-4 overflow-hidden'>\n <div className='flex items-center gap-4 min-w-0 flex-shrink-0 relative z-10 bg-primary pr-4'>\n {/* Left Section */}\n {isMenuLeft && menuItems.length > 0 && (\n <div className='flex-shrink-0'>\n <MobileMenu\n menuItems={menuItems}\n isMenuLeft={isMenuLeft}\n showThemeToggle={showThemeToggle}\n showColorToggle={showColorToggle}\n showSpaceToggle={showSpaceToggle}\n showLanguageToggle={showLanguageToggle}\n />\n </div>\n )}\n\n {logo && (\n <div className='flex items-center gap-2 min-w-0'>\n {logo}\n {title && (\n <span className='text-lg font-bold hidden md:inline-block truncate'>{title}</span>\n )}\n </div>\n )}\n {/* Title without logo if applicable */}\n {!logo && title && (\n <div className='flex items-center gap-2 min-w-0'>\n <span className='text-lg font-bold truncate'>{title}</span>\n </div>\n )}\n\n {/* Center/Nav Section - hidden on mobile */}\n <nav className='flex items-center gap-6 text-sm font-medium hidden md:flex'>\n {navItems.map((item, index) => (\n <a\n key={index}\n href={item.href}\n onClick={item.onClick}\n className={cn(\n 'transition-colors hover:text-primary-foreground/80',\n item.active\n ? 'text-primary-foreground font-bold underline underline-offset-4'\n : 'text-primary-foreground/60',\n )}\n >\n {item.label}\n </a>\n ))}\n </nav>\n </div>\n\n {/* Right Section - flex-row-reverse ensures essential items stay at right edge */}\n <div className='ml-auto flex items-center justify-end gap-2 min-w-0 flex-shrink'>\n {/* Switchers - shrink before title */}\n <div className='flex items-center gap-2 min-w-0 flex-shrink overflow-hidden justify-end'>\n {showSpaceToggle && <SpacingThemeSwitcher variant='toggle' withBackground />}\n {showColorToggle && <ColorThemeSwitcher variant='toggle' withBackground />}\n {showThemeToggle && <ThemeModeSwitcher variant='toggle' withBackground />}\n {showLanguageToggle && (\n <LanguageSwitcher\n onLanguageChange={onLanguageChange}\n currentLanguage={currentLanguage}\n />\n )}\n </div>\n\n {/* Essential actions - always visible */}\n <div className='flex items-center gap-2 flex-none relative z-20 bg-primary pl-2'>\n {/* User Profile */}\n {user && (\n <DropdownMenu>\n <DropdownMenuTrigger\n aria-label='ユーザーメニュー'\n className={cn(\n buttonVariants({ variant: 'ghost' }),\n 'relative h-8 w-8 rounded-full p-0 flex items-center justify-center',\n )}\n >\n <Avatar className='h-8 w-8'>\n <AvatarImage src={user.image} alt={user.name} />\n <AvatarFallback>\n {user.initials || user.name.slice(0, 2).toUpperCase()}\n </AvatarFallback>\n </Avatar>\n </DropdownMenuTrigger>\n <DropdownMenuContent className='w-56' align='end'>\n <DropdownMenuGroup>\n <DropdownMenuLabel className='font-normal'>\n <div className='flex flex-col space-y-1'>\n <p className='text-sm font-medium leading-none'>{user.name}</p>\n <p className='text-xs leading-none text-muted-foreground'>{user.email}</p>\n </div>\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n {userMenuItems.map((item, index) => (\n <DropdownMenuItem key={index} onClick={item.onClick}>\n {item.href ? (\n <a href={item.href} className='w-full h-full flex items-center'>\n {item.label}\n </a>\n ) : (\n item.label\n )}\n </DropdownMenuItem>\n ))}\n {onLogout && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuItem onClick={onLogout}>Log out</DropdownMenuItem>\n </>\n )}\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n\n {actions}\n\n {/* Mobile Menu Trigger (Right side) */}\n {!isMenuLeft && menuItems.length > 0 && (\n <MobileMenu\n menuItems={menuItems}\n isMenuLeft={isMenuLeft}\n showThemeToggle={showThemeToggle}\n showColorToggle={showColorToggle}\n showSpaceToggle={showSpaceToggle}\n showLanguageToggle={showLanguageToggle}\n />\n )}\n\n {/* Mobile Sidebar Trigger (rightmost when no menu icon) */}\n <SidebarTrigger className='md:hidden' />\n </div>\n </div>\n </div>\n </header>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"header.js","names":["React","_Fragment","React$1","MobileMenu","Sheet","SheetTrigger","cn","buttonVariants","Menu","SheetContent","isMenuLeft","SheetHeader","SheetTitle","menuItems","item","Button","index","showThemeToggle","showColorToggle","showSpaceToggle","Fragment","ThemeSwitcherGroup","showLanguageToggle","LanguageSwitcher","Header","props","menuPosition","className","logo","title","navItems","SpacingThemeSwitcher","ColorThemeSwitcher","ThemeModeSwitcher","user","DropdownMenu","DropdownMenuTrigger","Avatar","AvatarImage","AvatarFallback","DropdownMenuContent","DropdownMenuGroup","DropdownMenuLabel","DropdownMenuSeparator","userMenuItems","DropdownMenuItem","onLogout","actions","SidebarTrigger"],"sources":["../../../../src/tools/components/header/header.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Menu } from 'lucide-react';\nimport { Button, buttonVariants } from '../ui/button';\nimport { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from '../ui';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../ui/dropdown-menu';\nimport { Avatar, AvatarFallback, AvatarImage } from '../ui/avatar';\nimport {\n ThemeSwitcherGroup,\n ThemeModeSwitcher,\n ColorThemeSwitcher,\n SpacingThemeSwitcher,\n} from \"../theme\";\nimport { LanguageSwitcher } from \"../i18n/LanguageSwitcher\";\nimport { cn } from \"../../lib/utils\";\nimport { SidebarTrigger } from \"../sidebar/sidebar\";\nimport type { Locale } from '../../paraglide/runtime.js';\n\n/**\n * Host inputs and presentation settings for Header.\n * @remarks Inherited native or primitive props keep their upstream types and behavior; this declaration documents only the wrapper-owned options.\n * @see Header\n */\nexport interface HeaderProps extends React.HTMLAttributes<HTMLElement> {\n /**\n * Optional logo content shown beside title.\n */\n logo?: React.ReactNode;\n /**\n * Application title; hidden below md when logo is present.\n */\n title?: string;\n /**\n * Sheet-menu placement; defaults to right.\n */\n menuPosition?: 'left' | 'right';\n /**\n * Sheet-menu entries; empty/omitted means no sheet trigger. href entries use anchors, otherwise Buttons.\n */\n menuItems?: { /**\n * Visible text for the navigation/menu entry.\n */\n label: string; /**\n * Host action invoked when this entry is clicked; the host owns any navigation or asynchronous work.\n * @returns No value; complete the host callback action.\n */\n onClick?: () => void; /**\n * Optional anchor destination; no router integration or authorization checks are installed.\n */\n href?: string; /**\n * Optional leading sheet-menu icon; user-menu icon fields are currently ignored.\n */\n icon?: React.ReactNode }[];\n /**\n * Desktop-only navigation anchors; the host supplies href/onClick and active state.\n */\n navItems?: { /**\n * Visible text for the navigation/menu entry.\n */\n label: string; /**\n * Host action invoked when this entry is clicked; the host owns any navigation or asynchronous work.\n * @returns No value; complete the host callback action.\n */\n onClick?: () => void; /**\n * Optional anchor destination; no router integration or authorization checks are installed.\n */\n href?: string; /**\n * Adds desktop navigation active styling when true; omitted/false uses inactive styling.\n */\n active?: boolean }[];\n /**\n * Host-supplied profile display data; omitted hides the avatar menu. It is not validated as authenticated identity.\n */\n user?: {\n /**\n * User display name; also supplies the two-character uppercase avatar fallback.\n */\n name: string;\n /**\n * Optional user email shown in the avatar menu.\n */\n email?: string;\n /**\n * Optional avatar image URL; missing/failing images use the fallback.\n */\n image?: string;\n /**\n * Optional avatar fallback text; falsy values use the first two name characters.\n */\n initials?: string;\n };\n /**\n * Avatar dropdown entries; href creates an anchor and onClick is attached to the menu item. Accepted icon fields are currently ignored.\n */\n userMenuItems?: { /**\n * Visible text for the navigation/menu entry.\n */\n label: string; /**\n * Host action invoked when this entry is clicked; the host owns any navigation or asynchronous work.\n * @returns No value; complete the host callback action.\n */\n onClick?: () => void; /**\n * Optional anchor destination; no router integration or authorization checks are installed.\n */\n href?: string; /**\n * Optional leading sheet-menu icon; user-menu icon fields are currently ignored.\n */\n icon?: React.ReactNode }[];\n /**\n * Called from the optional logout menu item; the host performs logout and invalidates its own session/cache.\n * @returns No value; complete the host callback action.\n */\n onLogout?: () => void;\n /**\n * Shows the main and sheet theme-mode controls; defaults to true.\n */\n showThemeToggle?: boolean;\n /**\n * Shows the main and sheet palette controls; defaults to true.\n */\n showColorToggle?: boolean;\n /**\n * Shows the main and sheet spacing controls; defaults to true.\n */\n showSpaceToggle?: boolean;\n /**\n * Shows the main and sheet locale toggles; defaults to true.\n */\n showLanguageToggle?: boolean;\n /**\n * Controlled locale callback forwarded only to the main header toggle; the sheet toggle uses global runtime behavior.\n * @param lang - Host callback input described above.\n * @returns No value; complete the host callback action.\n */\n onLanguageChange?: (lang: Locale) => void;\n /**\n * Locale override forwarded only to the main header toggle; omitted reads runtime state.\n */\n currentLanguage?: Locale;\n /**\n * Additional action content displayed in the right action group.\n */\n actions?: React.ReactNode;\n}\n\ntype MenuItem = NonNullable<HeaderProps['menuItems']>[number];\n\nconst MobileMenu: React.FC<{\n menuItems: MenuItem[];\n isMenuLeft: boolean;\n showThemeToggle: boolean;\n showColorToggle: boolean;\n showSpaceToggle: boolean;\n showLanguageToggle: boolean;\n}> = ({\n menuItems,\n isMenuLeft,\n showThemeToggle,\n showColorToggle,\n showSpaceToggle,\n showLanguageToggle,\n}) => (\n <Sheet>\n <SheetTrigger className={cn(buttonVariants({ variant: 'ghost', size: 'icon' }), 'shrink-0')}>\n <Menu className='h-5 w-5' />\n <span className='sr-only'>Toggle menu</span>\n </SheetTrigger>\n <SheetContent side={isMenuLeft ? 'left' : 'right'}>\n <SheetHeader>\n <SheetTitle>Menu</SheetTitle>\n </SheetHeader>\n <div className='grid gap-4 py-4'>\n {menuItems.map((item, index) => (\n <React.Fragment key={index}>\n {item.href ? (\n <a\n href={item.href}\n className={cn(buttonVariants({ variant: 'ghost' }), 'justify-start')}\n onClick={item.onClick}\n >\n {item.icon && <span className='mr-2'>{item.icon}</span>}\n {item.label}\n </a>\n ) : (\n <Button variant='ghost' className='justify-start' onClick={item.onClick}>\n {item.icon && <span className='mr-2'>{item.icon}</span>}\n {item.label}\n </Button>\n )}\n </React.Fragment>\n ))}\n {(showThemeToggle || showColorToggle || showSpaceToggle) && (\n <>\n <div className='h-px bg-border my-2' />\n <div className='px-2'>\n <ThemeSwitcherGroup\n showThemeMode={showThemeToggle}\n showColorTheme={showColorToggle}\n showSpacingTheme={showSpaceToggle}\n modeVariant='icon-group'\n colorVariant='icon-group'\n spacingVariant='icon-group'\n />\n </div>\n </>\n )}\n {showLanguageToggle && (\n <div className='px-2'>\n <LanguageSwitcher />\n </div>\n )}\n </div>\n </SheetContent>\n </Sheet>\n);\n\n/**\n * Renders a sticky application header with navigation, theme/locale controls and an optional user menu.\n * @param props - Header configuration and native header attributes; className customizes styling, and children are replaced by the built-in layout. Wrapper defaults: menuPosition='right', menuItems=[], navItems=[], userMenuItems=[], showThemeToggle=true, showColorToggle=true, showSpaceToggle=true, showLanguageToggle=true.\n * @returns The rendered Header composition.\n * @remarks Import @alneas/appkit-react/styles in the rendering host. Import Appkit CSS. SidebarProvider is required because the header always renders SidebarTrigger, even when hidden by desktop CSS. ThemeProvider supplies working theme controls; locale updates follow LanguageSwitcher. The host owns routing, identity data and logout effects; user is display data, not proof of an authenticated session. Header children are replaced by its built-in layout. navItems are desktop-only anchors; menuItems populate the sheet menu. The sheet language switcher does not receive currentLanguage/onLanguageChange, so those props control only the main header switcher. userMenuItems.icon is accepted but not rendered.\n * @example\n * ```tsx\n * import { ThemeProvider } from '@alneas/appkit-react/ui/theme';\n * import { SidebarProvider } from '@alneas/appkit-react/tools/sidebar';\n * import { Header } from '@alneas/appkit-react/tools/header';\n * import '@alneas/appkit-react/styles';\n *\n * export function Example() {\n * return (<ThemeProvider><SidebarProvider><Header title=\"Project\" navItems={[{ label: \"Home\", href: \"/\", active: true }]} menuItems={[{ label: \"Help\", href: \"/help\" }]} /></SidebarProvider></ThemeProvider>);\n * }\n * ```\n */\nexport function Header({\n className,\n logo,\n title,\n menuPosition = 'right',\n menuItems = [],\n navItems = [],\n user,\n userMenuItems = [],\n onLogout,\n showThemeToggle = true,\n showColorToggle = true,\n showSpaceToggle = true,\n showLanguageToggle = true,\n onLanguageChange,\n currentLanguage,\n actions,\n ...props\n}: HeaderProps) {\n // If logo is on the left (default/implied), menu icon should be on the right by default?\n // Requirement 4: \"menu icon in left or right end(choosable. in right if logo is in left)\"\n // If logo is provided, it usually sits on the left. So menuPosition default 'right' makes sense.\n // If menuPosition is 'left', we should probably ensure logo isn't conflicting or logo is hidden?\n // Let's assume user handles logic or we prioritize menuPosition.\n // However, \"in right if logo is in left\" implies conditional default.\n // We already defaulted menuPosition to 'right' in props.\n\n // Determine effective menu position.\n // If logo is present and menuPosition is undefined, it defaults to right.\n\n const isMenuLeft = menuPosition === 'left';\n\n return (\n <header\n className={cn(\n 'sticky top-0 z-40 w-full border-b bg-primary text-primary-foreground shadow-sm',\n className,\n )}\n {...props}\n >\n <div className='flex h-16 items-center justify-between px-4 gap-4 overflow-hidden'>\n <div className='flex items-center gap-4 min-w-0 flex-shrink-0 relative z-10 bg-primary pr-4'>\n {/* Left Section */}\n {isMenuLeft && menuItems.length > 0 && (\n <div className='flex-shrink-0'>\n <MobileMenu\n menuItems={menuItems}\n isMenuLeft={isMenuLeft}\n showThemeToggle={showThemeToggle}\n showColorToggle={showColorToggle}\n showSpaceToggle={showSpaceToggle}\n showLanguageToggle={showLanguageToggle}\n />\n </div>\n )}\n\n {logo && (\n <div className='flex items-center gap-2 min-w-0'>\n {logo}\n {title && (\n <span className='text-lg font-bold hidden md:inline-block truncate'>{title}</span>\n )}\n </div>\n )}\n {/* Title without logo if applicable */}\n {!logo && title && (\n <div className='flex items-center gap-2 min-w-0'>\n <span className='text-lg font-bold truncate'>{title}</span>\n </div>\n )}\n\n {/* Center/Nav Section - hidden on mobile */}\n <nav className='flex items-center gap-6 text-sm font-medium hidden md:flex'>\n {navItems.map((item, index) => (\n <a\n key={index}\n href={item.href}\n onClick={item.onClick}\n className={cn(\n 'transition-colors hover:text-primary-foreground/80',\n item.active\n ? 'text-primary-foreground font-bold underline underline-offset-4'\n : 'text-primary-foreground/60',\n )}\n >\n {item.label}\n </a>\n ))}\n </nav>\n </div>\n\n {/* Right Section - flex-row-reverse ensures essential items stay at right edge */}\n <div className='ml-auto flex items-center justify-end gap-2 min-w-0 flex-shrink'>\n {/* Switchers - shrink before title */}\n <div className='flex items-center gap-2 min-w-0 flex-shrink overflow-hidden justify-end'>\n {showSpaceToggle && <SpacingThemeSwitcher variant='toggle' withBackground />}\n {showColorToggle && <ColorThemeSwitcher variant='toggle' withBackground />}\n {showThemeToggle && <ThemeModeSwitcher variant='toggle' withBackground />}\n {showLanguageToggle && (\n <LanguageSwitcher\n onLanguageChange={onLanguageChange}\n currentLanguage={currentLanguage}\n />\n )}\n </div>\n\n {/* Essential actions - always visible */}\n <div className='flex items-center gap-2 flex-none relative z-20 bg-primary pl-2'>\n {/* User Profile */}\n {user && (\n <DropdownMenu>\n <DropdownMenuTrigger\n aria-label={`${user.initials || user.name.slice(0, 2).toUpperCase()} ${user.name} ユーザーメニュー`}\n className={cn(\n buttonVariants({ variant: 'ghost' }),\n 'relative h-8 w-8 rounded-full p-0 flex items-center justify-center',\n )}\n >\n <Avatar className='h-8 w-8'>\n <AvatarImage src={user.image} alt={user.name} />\n <AvatarFallback>\n {user.initials || user.name.slice(0, 2).toUpperCase()}\n </AvatarFallback>\n </Avatar>\n </DropdownMenuTrigger>\n <DropdownMenuContent className='w-56' align='end'>\n <DropdownMenuGroup>\n <DropdownMenuLabel className='font-normal'>\n <div className='flex flex-col space-y-1'>\n <p className='text-sm font-medium leading-none'>{user.name}</p>\n <p className='text-xs leading-none text-muted-foreground'>{user.email}</p>\n </div>\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n {userMenuItems.map((item, index) => (\n <DropdownMenuItem key={index} onClick={item.onClick}>\n {item.href ? (\n <a href={item.href} className='w-full h-full flex items-center'>\n {item.label}\n </a>\n ) : (\n item.label\n )}\n </DropdownMenuItem>\n ))}\n {onLogout && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuItem onClick={onLogout}>Log out</DropdownMenuItem>\n </>\n )}\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n\n {actions}\n\n {/* Mobile Menu Trigger (Right side) */}\n {!isMenuLeft && menuItems.length > 0 && (\n <MobileMenu\n menuItems={menuItems}\n isMenuLeft={isMenuLeft}\n showThemeToggle={showThemeToggle}\n showColorToggle={showColorToggle}\n showSpaceToggle={showSpaceToggle}\n showLanguageToggle={showLanguageToggle}\n />\n )}\n\n {/* Mobile Sidebar Trigger (rightmost when no menu icon) */}\n <SidebarTrigger className='md:hidden' />\n </div>\n </div>\n </div>\n </header>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LanguageSwitcher.cjs","names":["getLocale","Button","Globe","require_ui_components_ui_button_components","require_runtime","react_jsx_runtime","lucide_react","LanguageSwitcher","activeLang","currentLanguage","displayLang","newLang","onLanguageChange"],"sources":["../../../../src/tools/components/i18n/LanguageSwitcher.tsx"],"sourcesContent":["import { Button } from '../ui/button';\nimport { Globe } from 'lucide-react';\nimport { getLocale, setLocale, Locale } from '../../paraglide/runtime.js';\n\n/**\n *
|
|
1
|
+
{"version":3,"file":"LanguageSwitcher.cjs","names":["getLocale","Button","Globe","require_ui_components_ui_button_components","require_runtime","react_jsx_runtime","lucide_react","LanguageSwitcher","activeLang","currentLanguage","displayLang","newLang","onLanguageChange"],"sources":["../../../../src/tools/components/i18n/LanguageSwitcher.tsx"],"sourcesContent":["import { Button } from '../ui/button';\nimport { Globe } from 'lucide-react';\nimport { getLocale, setLocale, Locale } from '../../paraglide/runtime.js';\n\n/**\n * Host inputs and presentation settings for LanguageSwitcher.\n * @see LanguageSwitcher\n */\nexport interface LanguageSwitcherProps {\n /**\n * Called with en when the current locale is ja, otherwise ja. When supplied, suppresses the built-in global setLocale call; the host must update controlled state.\n * @param lang - Host callback input described above.\n * @returns No value; complete the host callback action.\n */\n onLanguageChange?: (lang: Locale) => void;\n\n /**\n * Current locale; omitted reads getLocale from the configured Paraglide runtime.\n */\n currentLanguage?: Locale;\n\n /**\n * Additional classes on the language toggle button.\n */\n className?: string;\n}\n\n/**\n * Displays the current locale and toggles Japanese to English or any other locale to Japanese.\n * @param props - Optional controlled locale, change callback and button classes; see LanguageSwitcherProps.\n * @returns The rendered LanguageSwitcher composition.\n * @remarks Import @alneas/appkit-react/styles in the rendering host. Import Appkit CSS. currentLanguage overrides getLocale; onLanguageChange suppresses the built-in setLocale call, so the host must update controlled locale state. Without the callback the Paraglide runtime performs its configured locale update/navigation. Locale state during SSR is host-owned and must be isolated per request and initialized consistently before hydration. The label displays Japanese/Chinese/English, but the toggle does not cycle through Chinese.\n * @example\n * ```tsx\n * import { useState } from 'react';\n * import { LanguageSwitcher } from '@alneas/appkit-react/tools/i18n';\n * import '@alneas/appkit-react/styles';\n *\n * export function Example() {\n * const [locale, setLocale] = useState<\"en\" | \"ja\" | \"zh\">(\"en\");\n * return (<LanguageSwitcher currentLanguage={locale} onLanguageChange={setLocale} />);\n * }\n * ```\n */\nexport function LanguageSwitcher({\n onLanguageChange,\n currentLanguage,\n className,\n}: LanguageSwitcherProps) {\n const activeLang = currentLanguage ?? getLocale();\n const displayLang = activeLang;\n\n const toggleLanguage = () => {\n const newLang: Locale = activeLang === 'ja' ? 'en' : 'ja';\n\n if (onLanguageChange) {\n onLanguageChange(newLang);\n } else {\n setLocale(newLang);\n }\n };\n\n return (\n <Button\n variant='ghost'\n size='sm'\n className={className}\n onClick={toggleLanguage}\n title={displayLang === 'ja' ? 'Switch to English' : '日本語に切り替え'}\n >\n <Globe className='w-4 h-4 mr-2' />\n {displayLang === 'ja' ? '日本語' : displayLang === 'zh' ? '中文' : 'English'}\n </Button>\n );\n}\n"],"mappings":"A,yPA4CA,SAAgBO,EAAiB,CAC/B,mBACA,kBACA,aACwB,CACxB,IAAMC,EAAaC,GAAmBT,EAAAA,UAAU,EAC1CU,EAAcF,EAYpB,OACE,EAAAH,EAAA,KAAA,CAACJ,EAAAA,OAAD,CACE,QAAQ,QACR,KAAK,KACM,YACX,YAfyB,CAC3B,IAAMU,EAAkBH,IAAe,KAAO,KAAO,KAEjDI,EACFA,EAAiBD,CAAO,EAExBP,EAAA,UAAUO,CAAO,CAErB,EAQI,MAAOD,IAAgB,KAAO,oBAAsB,WALtD,SAAA,EAOE,EAAAL,EAAA,IAAA,CAACH,EAAAA,MAAD,CAAO,UAAU,cAAgB,CAAA,EAChCQ,IAAgB,KAAO,MAAQA,IAAgB,KAAO,KAAO,SACxD,C,EAEZ,C"}
|