@wakastellar/ui 4.0.1 → 4.1.1
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/dist/blocks/_shared/identity/InviteUserPanel.cjs.js +1 -1
- package/dist/blocks/_shared/identity/RoleSelect.cjs.js +1 -1
- package/dist/blocks/_shared/identity/SidePushLayout.cjs.js +1 -1
- package/dist/blocks/activity-timeline/index.cjs.js +1 -1
- package/dist/blocks/activity-timeline/index.es.js +1 -1
- package/dist/blocks/antivirus-dashboard/index.cjs.js +1 -1
- package/dist/blocks/antivirus-dashboard/index.es.js +1 -1
- package/dist/blocks/api-keys-manager/index.cjs.js +1 -1
- package/dist/blocks/apm-overview/index.cjs.js +1 -1
- package/dist/blocks/auth-2fa/index.cjs.js +2 -2
- package/dist/blocks/auth-2fa/index.es.js +1 -1
- package/dist/blocks/avatar-upload/index.cjs.js +1 -1
- package/dist/blocks/avatar-upload/index.es.js +13 -13
- package/dist/blocks/calendar-view/index.cjs.js +1 -1
- package/dist/blocks/calendar-view/index.es.js +1 -1
- package/dist/blocks/chat/index.cjs.js +1 -1
- package/dist/blocks/chat/index.es.js +162 -162
- package/dist/blocks/chat/widget.cjs.js +1 -1
- package/dist/blocks/chat/widget.es.js +19 -13
- package/dist/blocks/chat-interface/index.cjs.js +1 -1
- package/dist/blocks/chat-interface/index.es.js +1 -1
- package/dist/blocks/checkout-flow/index.cjs.js +1 -1
- package/dist/blocks/checkout-flow/index.es.js +1 -1
- package/dist/blocks/cicd-builder/index.cjs.js +1 -1
- package/dist/blocks/clamav-service-status/index.cjs.js +1 -1
- package/dist/blocks/cloud-cost-dashboard/index.cjs.js +1 -1
- package/dist/blocks/container-orchestrator/index.cjs.js +1 -1
- package/dist/blocks/container-orchestrator/index.es.js +2 -1
- package/dist/blocks/dashboard/index.cjs.js +1 -1
- package/dist/blocks/dashboard/index.es.js +2 -2
- package/dist/blocks/dashboard-kpi/index.cjs.js +1 -1
- package/dist/blocks/dashboard-kpi/index.es.js +1 -1
- package/dist/blocks/database-admin/index.cjs.js +1 -1
- package/dist/blocks/deployment-dashboard/index.cjs.js +1 -1
- package/dist/blocks/deployment-dashboard/index.es.js +1 -1
- package/dist/blocks/empty-states/index.cjs.js +1 -1
- package/dist/blocks/empty-states/index.es.js +1 -1
- package/dist/blocks/error-pages/index.cjs.js +1 -1
- package/dist/blocks/error-pages/index.es.js +1 -1
- package/dist/blocks/faq/index.cjs.js +1 -1
- package/dist/blocks/faq/index.es.js +1 -1
- package/dist/blocks/file-manager/index.cjs.js +1 -1
- package/dist/blocks/file-manager/index.es.js +1 -1
- package/dist/blocks/file-scan-uploader/index.cjs.js +1 -1
- package/dist/blocks/file-scan-uploader/index.es.js +2 -2
- package/dist/blocks/footer/index.cjs.js +1 -1
- package/dist/blocks/gitops-sync-status/index.cjs.js +1 -1
- package/dist/blocks/header/index.cjs.js +1 -1
- package/dist/blocks/header/index.es.js +1 -1
- package/dist/blocks/headtab/index.cjs.js +1 -1
- package/dist/blocks/i18n-editor/index.cjs.js +1 -1
- package/dist/blocks/i18n-editor/index.es.js +127 -127
- package/dist/blocks/incident-manager/index.cjs.js +1 -1
- package/dist/blocks/infrastructure-map/index.cjs.js +1 -1
- package/dist/blocks/kanban-board/index.cjs.js +1 -1
- package/dist/blocks/kanban-board/index.es.js +1 -1
- package/dist/blocks/landing/index.cjs.js +1 -1
- package/dist/blocks/landing/index.es.js +1 -1
- package/dist/blocks/language-selector/index.cjs.js +1 -1
- package/dist/blocks/layout/index.cjs.js +1 -1
- package/dist/blocks/login/index.cjs.js +1 -1
- package/dist/blocks/on-call-schedule/index.cjs.js +1 -1
- package/dist/blocks/player-profile/index.cjs.js +1 -1
- package/dist/blocks/player-profile/index.es.js +1 -1
- package/dist/blocks/pricing/index.cjs.js +1 -1
- package/dist/blocks/pricing/index.es.js +1 -1
- package/dist/blocks/profile/index.cjs.js +1 -1
- package/dist/blocks/profile/index.es.js +1 -1
- package/dist/blocks/profile-list/index.cjs.js +1 -1
- package/dist/blocks/quarantine-manager/index.cjs.js +1 -1
- package/dist/blocks/quarantine-manager/index.es.js +1 -1
- package/dist/blocks/release-notes/index.cjs.js +1 -1
- package/dist/blocks/scan-history-log/index.cjs.js +1 -1
- package/dist/blocks/scan-history-log/index.es.js +1 -1
- package/dist/blocks/scan-policy-editor/index.cjs.js +1 -1
- package/dist/blocks/scan-report-generator/index.cjs.js +1 -1
- package/dist/blocks/settings/index.cjs.js +1 -1
- package/dist/blocks/settings/index.es.js +1 -1
- package/dist/blocks/sidebar/index.cjs.js +1 -1
- package/dist/blocks/sidebar/index.es.js +1 -1
- package/dist/blocks/signature-database-manager/index.cjs.js +1 -1
- package/dist/blocks/team-form/index.cjs.js +1 -1
- package/dist/blocks/threat-alert-banner/index.cjs.js +1 -1
- package/dist/blocks/user-management/index.cjs.js +1 -1
- package/dist/blocks/waka-doc-shell/index.cjs.js +1 -1
- package/dist/blocks/wizard/index.cjs.js +1 -1
- package/dist/blocks/wizard/index.es.js +37 -37
- package/dist/charts.cjs.js +1 -1
- package/dist/charts.es.js +8 -8
- package/dist/cli/index.cjs +5 -1
- package/dist/components/DataTable/DataTable.cjs.js +1 -1
- package/dist/components/DataTable/DataTable.es.js +68 -66
- package/dist/components/DataTable/DataTableAdvanced.cjs.js +1 -1
- package/dist/components/DataTable/DataTableColumnResizer.cjs.js +1 -1
- package/dist/components/DataTable/DataTableContextMenu.cjs.js +1 -1
- package/dist/components/DataTable/DataTableEditCell.cjs.js +1 -1
- package/dist/components/DataTable/DataTableFilters.cjs.js +1 -1
- package/dist/components/DataTable/DataTableGrouping.cjs.js +1 -1
- package/dist/components/DataTable/DataTablePagination.cjs.js +1 -1
- package/dist/components/DataTable/DataTablePagination.d.ts +3 -1
- package/dist/components/DataTable/DataTablePagination.es.js +38 -27
- package/dist/components/DataTable/DataTableSelection.cjs.js +1 -1
- package/dist/components/DataTable/DataTableToolbar.cjs.js +1 -1
- package/dist/components/DataTable/hooks/useDataTable.cjs.js +1 -1
- package/dist/components/DataTable/hooks/useDataTable.es.js +5 -1
- package/dist/components/DataTable/hooks/useDataTableAdvanced.cjs.js +1 -1
- package/dist/components/DataTable/hooks/useDataTableEdit.cjs.js +1 -1
- package/dist/components/DataTable/hooks/useDataTableExport.cjs.js +2 -2
- package/dist/components/DataTable/hooks/useDataTableImport.cjs.js +2 -2
- package/dist/components/DataTable/hooks/useDataTableImport.es.js +2 -1
- package/dist/components/DataTable/hooks/useDataTableTheme.cjs.js +1 -1
- package/dist/components/DataTable/hooks/useDataTableVirtualization.cjs.js +1 -1
- package/dist/components/DataTable/hooks/useTableLayout.cjs.js +1 -1
- package/dist/components/DataTable/utils.cjs.js +1 -1
- package/dist/components/accordion/index.cjs.js +1 -1
- package/dist/components/alert/index.cjs.js +1 -1
- package/dist/components/alert-dialog/index.cjs.js +1 -1
- package/dist/components/aspect-ratio/index.cjs.js +1 -1
- package/dist/components/avatar/index.cjs.js +1 -1
- package/dist/components/badge/index.cjs.js +1 -1
- package/dist/components/button/index.cjs.js +1 -1
- package/dist/components/calendar/index.cjs.js +1 -1
- package/dist/components/card/index.cjs.js +1 -1
- package/dist/components/checkbox/index.cjs.js +1 -1
- package/dist/components/code/index.cjs.js +2 -2
- package/dist/components/code/index.es.js +3 -2
- package/dist/components/collapsible/index.cjs.js +1 -1
- package/dist/components/command/index.cjs.js +1 -1
- package/dist/components/context-menu/index.cjs.js +1 -1
- package/dist/components/dialog/index.cjs.js +1 -1
- package/dist/components/dropdown-menu/index.cjs.js +1 -1
- package/dist/components/editor/blocks/index.cjs.js +1 -1
- package/dist/components/editor/blocks/index.es.js +12 -12
- package/dist/components/editor/blocks/waka-acceptance-criteria-block.cjs.js +1 -1
- package/dist/components/editor/blocks/waka-ai-assist-block.cjs.js +1 -1
- package/dist/components/editor/blocks/waka-api-endpoint-block.cjs.js +1 -1
- package/dist/components/editor/blocks/waka-code-playground-block.cjs.js +1 -1
- package/dist/components/editor/blocks/waka-comment-thread-block.cjs.js +1 -1
- package/dist/components/editor/blocks/waka-diagram-block.cjs.js +3 -3
- package/dist/components/editor/blocks/waka-diagram-block.es.js +21 -40
- package/dist/components/editor/blocks/waka-embed-block.cjs.js +1 -1
- package/dist/components/editor/blocks/waka-slash-menu-block.cjs.js +1 -1
- package/dist/components/editor/blocks/waka-user-story-block.cjs.js +1 -1
- package/dist/components/editor/blocks/waka-version-diff-block.cjs.js +1 -1
- package/dist/components/editor/waka-ai-writer.cjs.js +1 -1
- package/dist/components/editor/waka-collaborative-editor.cjs.js +1 -1
- package/dist/components/editor/waka-diff-viewer.cjs.js +1 -1
- package/dist/components/editor/waka-dnd-editor.cjs.js +1 -1
- package/dist/components/editor/waka-document-editor.cjs.js +1 -1
- package/dist/components/editor/waka-document-editor.es.js +1 -1
- package/dist/components/editor/waka-editor-elements.cjs.js +1 -1
- package/dist/components/editor/waka-editor-leaves.cjs.js +1 -1
- package/dist/components/editor/waka-editor-toolbar.cjs.js +1 -1
- package/dist/components/editor/waka-editor.cjs.js +1 -1
- package/dist/components/editor/waka-floating-toolbar.cjs.js +1 -1
- package/dist/components/editor/waka-markdown-editor.cjs.js +1 -1
- package/dist/components/editor/waka-mention-editor.cjs.js +1 -1
- package/dist/components/editor/waka-mention-editor.es.js +2 -2
- package/dist/components/editor/waka-slash-menu.cjs.js +1 -1
- package/dist/components/editor/waka-spec-editor.cjs.js +1 -1
- package/dist/components/form/index.cjs.js +1 -1
- package/dist/components/hover-card/index.cjs.js +1 -1
- package/dist/components/input/index.cjs.js +1 -1
- package/dist/components/input-otp/index.cjs.js +1 -1
- package/dist/components/input-otp/index.es.js +2 -1
- package/dist/components/label/index.cjs.js +1 -1
- package/dist/components/language-selector/index.cjs.js +1 -1
- package/dist/components/menubar/index.cjs.js +1 -1
- package/dist/components/navigation-menu/index.cjs.js +1 -1
- package/dist/components/popover/index.cjs.js +1 -1
- package/dist/components/progress/index.cjs.js +1 -1
- package/dist/components/radio-group/index.cjs.js +1 -1
- package/dist/components/resizable/index.cjs.js +1 -1
- package/dist/components/resizable/index.es.js +9 -9
- package/dist/components/scroll-area/index.cjs.js +1 -1
- package/dist/components/select/index.cjs.js +1 -1
- package/dist/components/separator/index.cjs.js +1 -1
- package/dist/components/sheet/index.cjs.js +1 -1
- package/dist/components/skeleton/index.cjs.js +1 -1
- package/dist/components/slider/index.cjs.js +1 -1
- package/dist/components/switch/index.cjs.js +1 -1
- package/dist/components/table/index.cjs.js +1 -1
- package/dist/components/tabs/index.cjs.js +1 -1
- package/dist/components/textarea/index.cjs.js +1 -1
- package/dist/components/theme-selector/index.cjs.js +1 -1
- package/dist/components/toast/index.cjs.js +1 -1
- package/dist/components/toaster/index.cjs.js +1 -1
- package/dist/components/toggle/index.cjs.js +1 -1
- package/dist/components/toggle-group/index.cjs.js +1 -1
- package/dist/components/tooltip/index.cjs.js +1 -1
- package/dist/components/typography/index.cjs.js +1 -1
- package/dist/components/waka-3d-pie-chart/index.cjs.js +1 -1
- package/dist/components/waka-3d-pie-chart/index.es.js +1 -1
- package/dist/components/waka-achievement-unlock/index.cjs.js +1 -1
- package/dist/components/waka-achievement-unlock/index.es.js +1 -1
- package/dist/components/waka-activity-feed/index.cjs.js +2 -2
- package/dist/components/waka-activity-feed/index.es.js +1 -1
- package/dist/components/waka-ad-banner/index.cjs.js +1 -1
- package/dist/components/waka-ad-banner/index.es.js +18 -15
- package/dist/components/waka-ad-fallback/index.cjs.js +1 -1
- package/dist/components/waka-ad-fallback/index.es.js +1 -1
- package/dist/components/waka-ad-inline/index.cjs.js +1 -1
- package/dist/components/waka-ad-inline/index.es.js +2 -2
- package/dist/components/waka-ad-interstitial/index.cjs.js +1 -1
- package/dist/components/waka-ad-interstitial/index.es.js +3 -3
- package/dist/components/waka-ad-placeholder/index.cjs.js +2 -2
- package/dist/components/waka-ad-placeholder/index.es.js +1 -1
- package/dist/components/waka-ad-provider/index.cjs.js +1 -1
- package/dist/components/waka-ad-provider/index.es.js +1 -1
- package/dist/components/waka-ad-sidebar/index.cjs.js +1 -1
- package/dist/components/waka-ad-sidebar/index.es.js +2 -2
- package/dist/components/waka-ad-sticky-footer/index.cjs.js +1 -1
- package/dist/components/waka-ad-sticky-footer/index.es.js +2 -2
- package/dist/components/waka-address-autocomplete/index.cjs.js +2 -2
- package/dist/components/waka-address-autocomplete/index.es.js +10 -6
- package/dist/components/waka-admincrumb/index.cjs.js +1 -1
- package/dist/components/waka-alert-panel/index.cjs.js +1 -1
- package/dist/components/waka-alert-stack/index.cjs.js +1 -1
- package/dist/components/waka-alert-stack/index.es.js +1 -1
- package/dist/components/waka-allocation-matrix/index.cjs.js +2 -2
- package/dist/components/waka-allocation-matrix/index.es.js +1 -1
- package/dist/components/waka-approval-chain/index.cjs.js +1 -1
- package/dist/components/waka-approval-chain/index.es.js +1 -1
- package/dist/components/waka-artifact-list/index.cjs.js +1 -1
- package/dist/components/waka-artifact-list/index.es.js +1 -1
- package/dist/components/waka-audit-log/index.cjs.js +2 -2
- package/dist/components/waka-audit-log/index.es.js +1 -1
- package/dist/components/waka-autocomplete/index.cjs.js +1 -1
- package/dist/components/waka-autocomplete/index.es.js +3 -2
- package/dist/components/waka-badge-showcase/index.cjs.js +1 -1
- package/dist/components/waka-barcode/index.cjs.js +1 -1
- package/dist/components/waka-barcode/index.es.js +1 -1
- package/dist/components/waka-biometric-prompt/index.cjs.js +2 -2
- package/dist/components/waka-biometric-prompt/index.es.js +1 -1
- package/dist/components/waka-bottom-sheet/index.cjs.js +1 -1
- package/dist/components/waka-bottom-sheet/index.es.js +12 -7
- package/dist/components/waka-breadcrumb/index.cjs.js +1 -1
- package/dist/components/waka-breadcrumb/index.es.js +1 -1
- package/dist/components/waka-breadcrumb-path/index.cjs.js +1 -1
- package/dist/components/waka-breadcrumb-path/index.es.js +1 -1
- package/dist/components/waka-budget-burn/index.cjs.js +2 -2
- package/dist/components/waka-budget-burn/index.es.js +3 -3
- package/dist/components/waka-build-matrix/index.cjs.js +1 -1
- package/dist/components/waka-capacity-planner/index.cjs.js +2 -2
- package/dist/components/waka-capacity-planner/index.es.js +1 -1
- package/dist/components/waka-carousel/index.cjs.js +1 -1
- package/dist/components/waka-carousel/index.es.js +2 -2
- package/dist/components/waka-cart-summary/index.cjs.js +1 -1
- package/dist/components/waka-cart-summary/index.es.js +2 -2
- package/dist/components/waka-challenge-timer/index.cjs.js +1 -1
- package/dist/components/waka-charts/WakaAreaChart.cjs.js +1 -1
- package/dist/components/waka-charts/WakaAreaChart.es.js +2 -2
- package/dist/components/waka-charts/WakaBarChart.cjs.js +1 -1
- package/dist/components/waka-charts/WakaBarChart.es.js +2 -2
- package/dist/components/waka-charts/WakaChart.cjs.js +1 -1
- package/dist/components/waka-charts/WakaChart.es.js +1 -1
- package/dist/components/waka-charts/WakaLineChart.cjs.js +1 -1
- package/dist/components/waka-charts/WakaLineChart.es.js +2 -2
- package/dist/components/waka-charts/WakaMiniChart.cjs.js +1 -1
- package/dist/components/waka-charts/WakaMiniChart.es.js +2 -2
- package/dist/components/waka-charts/WakaPieChart.cjs.js +1 -1
- package/dist/components/waka-charts/WakaPieChart.es.js +2 -2
- package/dist/components/waka-charts/WakaSparkline.cjs.js +1 -1
- package/dist/components/waka-charts/WakaSparkline.es.js +1 -1
- package/dist/components/waka-charts/dataTableHelpers.cjs.js +1 -1
- package/dist/components/waka-charts/dataTableHelpers.es.js +1 -1
- package/dist/components/waka-charts/hooks/useChartTheme.cjs.js +1 -1
- package/dist/components/waka-charts/hooks/useChartTheme.es.js +1 -1
- package/dist/components/waka-charts/hooks/useRechartsLoader.cjs.js +1 -1
- package/dist/components/waka-charts/hooks/useRechartsLoader.es.js +1 -1
- package/dist/components/waka-chat-bubble/index.cjs.js +1 -1
- package/dist/components/waka-checklist/index.cjs.js +2 -2
- package/dist/components/waka-checklist/index.es.js +1 -1
- package/dist/components/waka-checkout-stepper/index.cjs.js +1 -1
- package/dist/components/waka-checkout-stepper/index.es.js +1 -1
- package/dist/components/waka-cohort-table/index.cjs.js +2 -2
- package/dist/components/waka-cohort-table/index.es.js +1 -1
- package/dist/components/waka-color-picker/index.cjs.js +2 -2
- package/dist/components/waka-color-picker/index.es.js +1 -1
- package/dist/components/waka-combo-counter/index.cjs.js +1 -1
- package/dist/components/waka-combobox/index.cjs.js +1 -1
- package/dist/components/waka-combobox/index.es.js +3 -2
- package/dist/components/waka-command-bar/index.cjs.js +1 -1
- package/dist/components/waka-compare-period/index.cjs.js +2 -2
- package/dist/components/waka-compare-period/index.es.js +7 -5
- package/dist/components/waka-config-comparator/index.cjs.js +1 -1
- package/dist/components/waka-config-comparator/index.es.js +1 -1
- package/dist/components/waka-connection-matrix/index.cjs.js +1 -1
- package/dist/components/waka-connection-matrix/index.es.js +1 -1
- package/dist/components/waka-container-list/index.cjs.js +1 -1
- package/dist/components/waka-container-list/index.es.js +1 -1
- package/dist/components/waka-content-recommendation/index.cjs.js +1 -1
- package/dist/components/waka-content-recommendation/index.es.js +2 -2
- package/dist/components/waka-contribution-graph/index.cjs.js +1 -1
- package/dist/components/waka-contribution-graph/index.es.js +4 -4
- package/dist/components/waka-cost-breakdown/index.cjs.js +1 -1
- package/dist/components/waka-cost-breakdown/index.es.js +7 -7
- package/dist/components/waka-coupon-input/index.cjs.js +2 -2
- package/dist/components/waka-coupon-input/index.es.js +1 -1
- package/dist/components/waka-credit-activity-feed/index.cjs.js +2 -2
- package/dist/components/waka-credit-activity-feed/index.es.js +1 -1
- package/dist/components/waka-credit-alert/index.cjs.js +1 -1
- package/dist/components/waka-credit-alert/index.es.js +1 -1
- package/dist/components/waka-credit-balance/index.cjs.js +1 -1
- package/dist/components/waka-credit-balance/index.es.js +3 -3
- package/dist/components/waka-credit-breakdown/index.cjs.js +1 -1
- package/dist/components/waka-credit-breakdown/index.es.js +1 -1
- package/dist/components/waka-credit-burn-rate/index.cjs.js +1 -1
- package/dist/components/waka-credit-burn-rate/index.es.js +1 -1
- package/dist/components/waka-credit-card-input/index.cjs.js +1 -1
- package/dist/components/waka-credit-card-input/index.es.js +1 -1
- package/dist/components/waka-credit-history/index.cjs.js +1 -1
- package/dist/components/waka-credit-history/index.es.js +1 -1
- package/dist/components/waka-credit-meter/index.cjs.js +2 -2
- package/dist/components/waka-credit-meter/index.es.js +3 -3
- package/dist/components/waka-credit-pricing-pack/index.cjs.js +1 -1
- package/dist/components/waka-credit-pricing-pack/index.es.js +1 -1
- package/dist/components/waka-credit-projection/index.cjs.js +1 -1
- package/dist/components/waka-credit-projection/index.es.js +1 -1
- package/dist/components/waka-credit-quota/index.cjs.js +1 -1
- package/dist/components/waka-credit-quota/index.es.js +3 -3
- package/dist/components/waka-credit-receipt/index.cjs.js +1 -1
- package/dist/components/waka-credit-receipt/index.es.js +1 -1
- package/dist/components/waka-credit-top-up/index.cjs.js +1 -1
- package/dist/components/waka-credit-top-up/index.es.js +1 -1
- package/dist/components/waka-credit-transaction/index.cjs.js +1 -1
- package/dist/components/waka-credit-transaction/index.es.js +1 -1
- package/dist/components/waka-credit-transfer-form/index.cjs.js +1 -1
- package/dist/components/waka-credit-transfer-form/index.es.js +1 -1
- package/dist/components/waka-credit-usage-chart/index.cjs.js +1 -1
- package/dist/components/waka-credit-usage-chart/index.es.js +1 -1
- package/dist/components/waka-daily-reward/index.cjs.js +1 -1
- package/dist/components/waka-database-card/index.cjs.js +1 -1
- package/dist/components/waka-database-card/index.es.js +1 -1
- package/dist/components/waka-date-range-picker/index.cjs.js +1 -1
- package/dist/components/waka-date-range-picker/index.es.js +3 -2
- package/dist/components/waka-datetime-picker/index.cjs.js +1 -1
- package/dist/components/waka-datetime-picker/index.es.js +4 -1
- package/dist/components/waka-datetime-picker.form-integration/index.cjs.js +1 -1
- package/dist/components/waka-dependency-tree/index.cjs.js +1 -1
- package/dist/components/waka-dependency-tree/index.es.js +1 -1
- package/dist/components/waka-deployment-lane/index.cjs.js +1 -1
- package/dist/components/waka-deployment-lane/index.es.js +1 -1
- package/dist/components/waka-device-trust/index.cjs.js +2 -2
- package/dist/components/waka-device-trust/index.es.js +1 -1
- package/dist/components/waka-doc-breadcrumb/index.cjs.js +1 -1
- package/dist/components/waka-doc-callout/index.cjs.js +1 -1
- package/dist/components/waka-doc-code-block/index.cjs.js +1 -1
- package/dist/components/waka-doc-nav/index.cjs.js +1 -1
- package/dist/components/waka-doc-renderer/index.cjs.js +1 -1
- package/dist/components/waka-doc-search/index.cjs.js +1 -1
- package/dist/components/waka-doc-table/index.cjs.js +1 -1
- package/dist/components/waka-doc-toc/index.cjs.js +1 -1
- package/dist/components/waka-doc-toolbar/index.cjs.js +1 -1
- package/dist/components/waka-doc-version/index.cjs.js +1 -1
- package/dist/components/waka-dock/index.cjs.js +1 -1
- package/dist/components/waka-dock/index.es.js +2 -2
- package/dist/components/waka-drawer/index.cjs.js +1 -1
- package/dist/components/waka-drawer/index.es.js +1 -1
- package/dist/components/waka-empty-state/index.cjs.js +1 -1
- package/dist/components/waka-env-var-editor/index.cjs.js +1 -1
- package/dist/components/waka-error-shake/index.cjs.js +1 -1
- package/dist/components/waka-feature-announcement/index.cjs.js +2 -2
- package/dist/components/waka-feature-announcement/index.es.js +1 -1
- package/dist/components/waka-feature-flag-row/index.cjs.js +1 -1
- package/dist/components/waka-file-upload/index.cjs.js +1 -1
- package/dist/components/waka-file-upload/index.es.js +2 -2
- package/dist/components/waka-floating-nav/index.cjs.js +1 -1
- package/dist/components/waka-floating-nav/index.es.js +1 -1
- package/dist/components/waka-flow-diagram/index.cjs.js +1 -1
- package/dist/components/waka-funnel-chart/index.cjs.js +2 -2
- package/dist/components/waka-funnel-chart/index.es.js +1 -1
- package/dist/components/waka-glow-card/index.cjs.js +1 -1
- package/dist/components/waka-glow-card/index.es.js +3 -3
- package/dist/components/waka-goal-progress/index.cjs.js +3 -3
- package/dist/components/waka-goal-progress/index.es.js +3 -3
- package/dist/components/waka-haptic-button/index.cjs.js +1 -1
- package/dist/components/waka-health-pulse/index.cjs.js +2 -2
- package/dist/components/waka-health-pulse/index.es.js +1 -1
- package/dist/components/waka-heatmap/index.cjs.js +1 -1
- package/dist/components/waka-heatmap/index.es.js +3 -3
- package/dist/components/waka-hotspot/index.cjs.js +1 -1
- package/dist/components/waka-image/index.cjs.js +1 -1
- package/dist/components/waka-image/index.es.js +1 -1
- package/dist/components/waka-incident-timeline/index.cjs.js +1 -1
- package/dist/components/waka-incident-timeline/index.es.js +3 -2
- package/dist/components/waka-invoice-preview/index.cjs.js +1 -1
- package/dist/components/waka-invoice-preview/index.es.js +1 -1
- package/dist/components/waka-kanban/index.cjs.js +1 -1
- package/dist/components/waka-kanban/index.es.js +1 -1
- package/dist/components/waka-kpi-dashboard/index.cjs.js +1 -1
- package/dist/components/waka-kpi-dashboard/index.es.js +6 -4
- package/dist/components/waka-kubernetes-overview/index.cjs.js +1 -1
- package/dist/components/waka-kubernetes-overview/index.es.js +1 -1
- package/dist/components/waka-leaderboard/index.cjs.js +1 -1
- package/dist/components/waka-level-progress/index.cjs.js +2 -2
- package/dist/components/waka-level-progress/index.es.js +2 -2
- package/dist/components/waka-liquid-button/index.cjs.js +1 -1
- package/dist/components/waka-loading-orbit/index.cjs.js +1 -1
- package/dist/components/waka-log-viewer/index.cjs.js +1 -1
- package/dist/components/waka-loot-box/index.cjs.js +2 -2
- package/dist/components/waka-loot-box/index.es.js +1 -1
- package/dist/components/waka-magic-link/index.cjs.js +2 -2
- package/dist/components/waka-magnetic-button/index.cjs.js +1 -1
- package/dist/components/waka-mention-input/index.cjs.js +1 -1
- package/dist/components/waka-mention-input/index.es.js +52 -40
- package/dist/components/waka-metric-sparkline/index.cjs.js +1 -1
- package/dist/components/waka-metric-sparkline/index.es.js +1 -1
- package/dist/components/waka-migration-list/index.cjs.js +1 -1
- package/dist/components/waka-milestone-road/index.cjs.js +2 -2
- package/dist/components/waka-milestone-road/index.es.js +5 -5
- package/dist/components/waka-modal/index.cjs.js +1 -1
- package/dist/components/waka-modal/index.es.js +1 -1
- package/dist/components/waka-morph-button/index.cjs.js +2 -2
- package/dist/components/waka-morph-button/index.es.js +6 -2
- package/dist/components/waka-network-topology/index.cjs.js +1 -1
- package/dist/components/waka-network-topology/index.es.js +4 -2
- package/dist/components/waka-notifications/index.cjs.js +1 -1
- package/dist/components/waka-number-input/index.cjs.js +1 -1
- package/dist/components/waka-number-input/index.es.js +1 -1
- package/dist/components/waka-orbital-menu/index.cjs.js +1 -1
- package/dist/components/waka-orbital-menu/index.es.js +1 -1
- package/dist/components/waka-order-tracker/index.cjs.js +1 -1
- package/dist/components/waka-order-tracker/index.es.js +3 -2
- package/dist/components/waka-outstream-video/index.cjs.js +1 -1
- package/dist/components/waka-outstream-video/index.es.js +2 -2
- package/dist/components/waka-pagination/index.cjs.js +1 -1
- package/dist/components/waka-pagination/index.es.js +1 -1
- package/dist/components/waka-password-strength/index.cjs.js +2 -2
- package/dist/components/waka-password-strength/index.es.js +3 -3
- package/dist/components/waka-payment-method-picker/index.cjs.js +1 -1
- package/dist/components/waka-payment-method-picker/index.es.js +1 -1
- package/dist/components/waka-permission-matrix/index.cjs.js +2 -2
- package/dist/components/waka-permission-matrix/index.es.js +3 -2
- package/dist/components/waka-phone-input/index.cjs.js +1 -1
- package/dist/components/waka-phone-input/index.es.js +5 -3
- package/dist/components/waka-pipeline-view/index.cjs.js +2 -2
- package/dist/components/waka-pipeline-view/index.es.js +1 -1
- package/dist/components/waka-player-card/index.cjs.js +2 -2
- package/dist/components/waka-player-card/index.es.js +4 -4
- package/dist/components/waka-pod-card/index.cjs.js +1 -1
- package/dist/components/waka-pod-card/index.es.js +1 -1
- package/dist/components/waka-points-popup/index.cjs.js +1 -1
- package/dist/components/waka-points-popup/index.es.js +5 -1
- package/dist/components/waka-power-up/index.cjs.js +1 -1
- package/dist/components/waka-presence-indicator/index.cjs.js +2 -2
- package/dist/components/waka-presence-indicator/index.es.js +1 -1
- package/dist/components/waka-pricing-table/index.cjs.js +2 -2
- package/dist/components/waka-pricing-table/index.es.js +1 -1
- package/dist/components/waka-product-card/index.cjs.js +1 -1
- package/dist/components/waka-progress-onboarding/index.cjs.js +3 -3
- package/dist/components/waka-progress-onboarding/index.es.js +1 -1
- package/dist/components/waka-pull-to-refresh/index.cjs.js +1 -1
- package/dist/components/waka-qrcode/index.cjs.js +1 -1
- package/dist/components/waka-qrcode/index.es.js +1 -1
- package/dist/components/waka-query-explain/index.cjs.js +1 -1
- package/dist/components/waka-quest-card/index.cjs.js +2 -2
- package/dist/components/waka-quest-card/index.es.js +4 -1
- package/dist/components/waka-quota-bar/index.cjs.js +2 -2
- package/dist/components/waka-quota-bar/index.es.js +11 -4
- package/dist/components/waka-radar-score/index.cjs.js +1 -1
- package/dist/components/waka-radar-score/index.es.js +6 -6
- package/dist/components/waka-rank-badge/index.cjs.js +2 -2
- package/dist/components/waka-rank-badge/index.es.js +1 -1
- package/dist/components/waka-rating-input/index.cjs.js +2 -2
- package/dist/components/waka-rating-input/index.es.js +1 -1
- package/dist/components/waka-reaction-picker/index.cjs.js +1 -1
- package/dist/components/waka-reaction-picker/index.es.js +7 -4
- package/dist/components/waka-region-map/index.cjs.js +1 -1
- package/dist/components/waka-region-map/index.es.js +1 -1
- package/dist/components/waka-resource-gauge/index.cjs.js +2 -2
- package/dist/components/waka-resource-gauge/index.es.js +3 -3
- package/dist/components/waka-resource-pool/index.cjs.js +2 -2
- package/dist/components/waka-resource-pool/index.es.js +1 -1
- package/dist/components/waka-rich-text-editor/index.cjs.js +1 -1
- package/dist/components/waka-rich-text-editor/index.es.js +1 -1
- package/dist/components/waka-rollback-slider/index.cjs.js +2 -2
- package/dist/components/waka-rollback-slider/index.es.js +5 -3
- package/dist/components/waka-sankey-diagram/index.cjs.js +2 -2
- package/dist/components/waka-sankey-diagram/index.es.js +5 -5
- package/dist/components/waka-schedule-picker/index.cjs.js +1 -1
- package/dist/components/waka-schedule-picker/index.es.js +3 -2
- package/dist/components/waka-scratch-card/index.cjs.js +2 -2
- package/dist/components/waka-scratch-card/index.es.js +1 -1
- package/dist/components/waka-season-pass/index.cjs.js +1 -1
- package/dist/components/waka-secret-card/index.cjs.js +1 -1
- package/dist/components/waka-security-scan-result/index.cjs.js +1 -1
- package/dist/components/waka-security-score/index.cjs.js +2 -2
- package/dist/components/waka-security-score/index.es.js +5 -5
- package/dist/components/waka-segmented-control/index.cjs.js +1 -1
- package/dist/components/waka-segmented-control/index.es.js +1 -1
- package/dist/components/waka-server-rack/index.cjs.js +1 -1
- package/dist/components/waka-service-graph/index.cjs.js +1 -1
- package/dist/components/waka-session-manager/index.cjs.js +1 -1
- package/dist/components/waka-session-manager/index.es.js +3 -2
- package/dist/components/waka-signature-pad/index.cjs.js +1 -1
- package/dist/components/waka-signature-pad/index.es.js +1 -1
- package/dist/components/waka-skeleton-wave/index.cjs.js +1 -1
- package/dist/components/waka-skill-tree/index.cjs.js +2 -2
- package/dist/components/waka-skill-tree/index.es.js +32 -32
- package/dist/components/waka-sla-tracker/index.cjs.js +1 -1
- package/dist/components/waka-sla-tracker/index.es.js +1 -1
- package/dist/components/waka-slider-range/index.cjs.js +1 -1
- package/dist/components/waka-slider-range/index.es.js +3 -3
- package/dist/components/waka-spin-wheel/index.cjs.js +2 -2
- package/dist/components/waka-spin-wheel/index.es.js +6 -6
- package/dist/components/waka-spinner/index.cjs.js +1 -1
- package/dist/components/waka-sponsored-badge/index.cjs.js +1 -1
- package/dist/components/waka-sponsored-badge/index.es.js +1 -1
- package/dist/components/waka-sponsored-card/index.cjs.js +1 -1
- package/dist/components/waka-sponsored-card/index.es.js +2 -2
- package/dist/components/waka-sponsored-feed/index.cjs.js +1 -1
- package/dist/components/waka-sponsored-feed/index.es.js +2 -2
- package/dist/components/waka-spotlight/index.cjs.js +1 -1
- package/dist/components/waka-spotlight/index.es.js +2 -1
- package/dist/components/waka-stat/index.cjs.js +1 -1
- package/dist/components/waka-stat/index.es.js +1 -1
- package/dist/components/waka-stats-hexagon/index.cjs.js +1 -1
- package/dist/components/waka-stats-hexagon/index.es.js +9 -9
- package/dist/components/waka-status-matrix/index.cjs.js +1 -1
- package/dist/components/waka-status-matrix/index.es.js +1 -1
- package/dist/components/waka-stepper/index.cjs.js +1 -1
- package/dist/components/waka-stepper/index.es.js +1 -1
- package/dist/components/waka-streak-counter/index.cjs.js +1 -1
- package/dist/components/waka-success-explosion/index.cjs.js +1 -1
- package/dist/components/waka-swipe-card/index.cjs.js +1 -1
- package/dist/components/waka-swipe-card/index.es.js +2 -2
- package/dist/components/waka-tabs-morph/index.cjs.js +1 -1
- package/dist/components/waka-tabs-morph/index.es.js +1 -1
- package/dist/components/waka-tag-input/index.cjs.js +1 -1
- package/dist/components/waka-tag-input/index.es.js +3 -2
- package/dist/components/waka-team-banner/index.cjs.js +2 -2
- package/dist/components/waka-team-banner/index.es.js +1 -1
- package/dist/components/waka-terminal-output/index.cjs.js +2 -2
- package/dist/components/waka-terminal-output/index.es.js +5 -3
- package/dist/components/waka-test-report/index.cjs.js +1 -1
- package/dist/components/waka-theme-creator/index.cjs.js +1 -1
- package/dist/components/waka-theme-manager/index.cjs.js +1 -1
- package/dist/components/waka-theme-manager/index.es.js +5 -2
- package/dist/components/waka-thread-view/index.cjs.js +2 -2
- package/dist/components/waka-thread-view/index.es.js +1 -1
- package/dist/components/waka-tilt-card/index.cjs.js +1 -1
- package/dist/components/waka-tilt-card/index.es.js +8 -6
- package/dist/components/waka-time-picker/index.cjs.js +1 -1
- package/dist/components/waka-time-picker/index.es.js +10 -6
- package/dist/components/waka-timeline/index.cjs.js +1 -1
- package/dist/components/waka-timeline/index.es.js +1 -1
- package/dist/components/waka-tooltip-tour/index.cjs.js +3 -3
- package/dist/components/waka-tooltip-tour/index.es.js +53 -51
- package/dist/components/waka-tour-guide/index.cjs.js +2 -2
- package/dist/components/waka-tour-guide/index.es.js +1 -1
- package/dist/components/waka-tournament-bracket/index.cjs.js +2 -2
- package/dist/components/waka-tournament-bracket/index.es.js +1 -1
- package/dist/components/waka-trace-viewer/index.cjs.js +1 -1
- package/dist/components/waka-tree/index.cjs.js +1 -1
- package/dist/components/waka-tree/index.es.js +1 -1
- package/dist/components/waka-treemap-chart/index.cjs.js +1 -1
- package/dist/components/waka-treemap-chart/index.es.js +1 -1
- package/dist/components/waka-two-factor-setup/index.cjs.js +2 -2
- package/dist/components/waka-two-factor-setup/index.es.js +5 -4
- package/dist/components/waka-typewriter/index.cjs.js +1 -1
- package/dist/components/waka-typewriter/index.es.js +7 -2
- package/dist/components/waka-typing-indicator/index.cjs.js +2 -2
- package/dist/components/waka-typing-indicator/index.es.js +1 -1
- package/dist/components/waka-versus-card/index.cjs.js +3 -3
- package/dist/components/waka-versus-card/index.es.js +5 -4
- package/dist/components/waka-video/index.cjs.js +1 -1
- package/dist/components/waka-video/index.es.js +1 -1
- package/dist/components/waka-video-ad/index.cjs.js +1 -1
- package/dist/components/waka-video-ad/index.es.js +3 -3
- package/dist/components/waka-video-call/index.cjs.js +2 -2
- package/dist/components/waka-video-call/index.es.js +1 -1
- package/dist/components/waka-video-overlay/index.cjs.js +1 -1
- package/dist/components/waka-video-overlay/index.es.js +2 -2
- package/dist/components/waka-virtual-list/index.cjs.js +1 -1
- package/dist/components/waka-virtual-list/index.es.js +1 -1
- package/dist/components/waka-voice-message/index.cjs.js +1 -1
- package/dist/components/waka-voice-message/index.es.js +6 -5
- package/dist/components/waka-welcome-modal/index.cjs.js +2 -2
- package/dist/components/waka-welcome-modal/index.es.js +1 -1
- package/dist/components/waka-xp-bar/index.cjs.js +1 -1
- package/dist/components/waka-xp-bar/index.es.js +2 -2
- package/dist/context/admincrumb-context.cjs.js +1 -1
- package/dist/context/language-context.cjs.js +1 -1
- package/dist/context/language-context.es.js +2 -2
- package/dist/context/theme-context.cjs.js +1 -1
- package/dist/context/theme-provider.cjs.js +1 -1
- package/dist/context/theme-provider.es.js +9 -6
- package/dist/context/waka-provider.cjs.js +1 -1
- package/dist/context/waka-provider.es.js +57 -53
- package/dist/doc.cjs.js +1 -1
- package/dist/editor.cjs.js +1 -1
- package/dist/export.cjs.js +1 -1
- package/dist/hooks/use-toast.cjs.js +1 -1
- package/dist/hooks/use-translation.cjs.js +1 -1
- package/dist/index.cjs.js +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.es.js +279 -278
- package/dist/lib/i18n.cjs.js +1 -1
- package/dist/lib/i18n.es.js +11 -9
- package/dist/locales/default-resources.cjs.js +1 -0
- package/dist/locales/default-resources.d.ts +155 -0
- package/dist/locales/default-resources.es.js +150 -0
- package/dist/node_modules/.pnpm/exceljs@4.4.0/node_modules/exceljs/dist/exceljs.min.cjs.js +13 -13
- package/dist/node_modules/.pnpm/exceljs@4.4.0/node_modules/exceljs/dist/exceljs.min.es.js +13 -13
- package/dist/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-docker.cjs.js +1 -1
- package/dist/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-docker.es.js +19 -19
- package/dist/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-markdown.cjs.js +1 -1
- package/dist/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-markdown.es.js +24 -25
- package/dist/node_modules/.pnpm/react-resizable-panels@4.11.2_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-resizable-panels/dist/react-resizable-panels.cjs.js +1 -1
- package/dist/node_modules/.pnpm/react-resizable-panels@4.11.2_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-resizable-panels/dist/react-resizable-panels.es.js +26 -23
- package/dist/rich-text.cjs.js +1 -1
- package/dist/ui.css +1 -1
- package/dist/utils/cn.cjs.js +1 -1
- package/dist/utils/datetime-helpers.cjs.js +1 -1
- package/dist/utils/theme-loader.cjs.js +1 -1
- package/dist/utils/tweak.cjs.js +1 -1
- package/package.json +28 -27
- package/src/components/DataTable/DataTable.tsx +2 -0
- package/src/components/DataTable/DataTablePagination.tsx +28 -8
- package/src/components/DataTable/hooks/useDataTable.ts +13 -0
- package/src/components/editor/blocks/waka-diagram-block.tsx +7 -36
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";"use client";const e=require(`../../_virtual/_rolldown/runtime.cjs.js`),t=require(`../../utils/cn.cjs.js`);let n=require(`react`);n=e.__toESM(n);let r=require(`lucide-react`),i=require(`react/jsx-runtime`);var a={critical:{icon:r.AlertTriangle,color:`text-red-600 dark:text-red-300`,bgColor:`bg-red-50 dark:bg-red-900/40`,borderColor:`border-red-500 dark:border-red-400`,ringColor:`ring-red-500/20 dark:ring-red-400/30`,label:`Critical`,priority:3},warning:{icon:r.AlertCircle,color:`text-amber-600 dark:text-amber-300`,bgColor:`bg-amber-50 dark:bg-amber-900/40`,borderColor:`border-amber-500 dark:border-amber-400`,ringColor:`ring-amber-500/20 dark:ring-amber-400/30`,label:`Warning`,priority:2},info:{icon:r.Info,color:`text-blue-600 dark:text-blue-300`,bgColor:`bg-blue-50 dark:bg-blue-900/40`,borderColor:`border-blue-500 dark:border-blue-400`,ringColor:`ring-blue-500/20 dark:ring-blue-400/30`,label:`Info`,priority:1}},o=[{label:`5 min`,value:300*1e3},{label:`15 min`,value:900*1e3},{label:`30 min`,value:1800*1e3},{label:`1 hour`,value:3600*1e3},{label:`4 hours`,value:14400*1e3}];function s(e){let t=new Date().getTime()-e.getTime(),n=Math.floor(t/6e4),r=Math.floor(t/36e5),i=Math.floor(t/864e5);return n<1?`Just now`:n<60?`${n}m ago`:r<24?`${r}h ago`:i<7?`${i}d ago`:e.toLocaleDateString()}function c(e){let t=new Date().getTime()-e.getTime(),n=Math.floor(t/6e4),r=Math.floor(t/36e5);return n<60?`${n}m`:r<24?`${r}h ${n%60}m`:`${Math.floor(r/24)}d ${r%24}h`}function l(e){let t=new Date,n=e.getTime()-t.getTime();if(n<=0)return`Expired`;let r=Math.floor(n/6e4),i=Math.floor(n/36e5);return r<60?`${r}m remaining`:`${i}h ${r%60}m remaining`}function u(e=[],t={}){let[r,i]=n.useState(e),{onNewAlert:a,playSoundOnCritical:o=!0}=t,s=n.useRef(new Set(e.map(e=>e.id))),c=n.useCallback(e=>{let t={...e,id:`alert-${Date.now()}-${Math.random().toString(36).slice(2)}`,timestamp:new Date};return i(e=>[t,...e]),a?.(t),t},[a]),l=n.useCallback((e,t)=>{i(n=>n.map(n=>n.id===e?{...n,acknowledged:!0,acknowledgedBy:t}:n))},[]),u=n.useCallback((e,t)=>{let n=new Date(Date.now()+t);i(t=>t.map(t=>t.id===e?{...t,snoozedUntil:n}:t))},[]),d=n.useCallback(e=>{i(t=>t.filter(t=>t.id!==e))},[]),f=n.useCallback(()=>{i(e=>e.filter(e=>!e.acknowledged))},[]),p=n.useCallback(()=>{i([])},[]);return n.useEffect(()=>{let e=new Set(r.map(e=>e.id)),t=r.filter(e=>!s.current.has(e.id));o&&t.some(e=>e.severity===`critical`),s.current=e},[r,o]),{alerts:r,activeAlerts:n.useMemo(()=>{let e=new Date;return r.filter(t=>!(t.snoozedUntil&&t.snoozedUntil>e))},[r]),snoozedAlerts:n.useMemo(()=>{let e=new Date;return r.filter(t=>t.snoozedUntil&&t.snoozedUntil>e)},[r]),addAlert:c,acknowledgeAlert:l,snoozeAlert:u,dismissAlert:d,clearAcknowledged:f,clearAll:p}}function d({alert:e,onAcknowledge:u,onSnooze:d,onDismiss:f,isStacked:p=!1,stackIndex:m=0,animated:h=!0}){let[g,_]=n.useState(!1),[v,y]=n.useState(!1),b=n.useRef(null),x=a[e.severity],S=x.icon,C=e.snoozedUntil&&e.snoozedUntil>new Date;n.useEffect(()=>{function e(e){b.current&&!b.current.contains(e.target)&&y(!1)}return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[]);let w=p?{transform:`translateY(${m*8}px) scale(${1-m*.02})`,zIndex:100-m,opacity:1-m*.15}:{};return(0,i.jsx)(`div`,{className:t.cn(`relative w-full rounded-lg border-l-4 shadow-lg transition-all duration-300`,x.borderColor,x.bgColor,`ring-1`,x.ringColor,e.acknowledged&&`opacity-60`,C&&`opacity-50`,h&&`animate-in slide-in-from-right-5 fade-in duration-300`,p&&m>0&&`absolute top-0 left-0`),style:w,children:(0,i.jsxs)(`div`,{className:`p-4`,children:[(0,i.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,i.jsx)(`div`,{className:t.cn(`flex-shrink-0 w-10 h-10 rounded-full flex items-center justify-center`,x.bgColor,`ring-2`,x.ringColor),children:(0,i.jsx)(S,{className:t.cn(`h-5 w-5`,x.color)})}),(0,i.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,i.jsxs)(`div`,{className:`flex items-start justify-between gap-2`,children:[(0,i.jsxs)(`div`,{className:`flex-1`,children:[(0,i.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,i.jsx)(`h4`,{className:`font-semibold text-sm text-foreground`,children:e.title}),e.count&&e.count>1&&(0,i.jsx)(`span`,{className:t.cn(`inline-flex items-center justify-center min-w-[20px] h-5 px-1.5 rounded-full text-xs font-medium`,x.bgColor,x.color,`ring-1`,x.ringColor),children:e.count})]}),e.source&&(0,i.jsx)(`p`,{className:`text-xs text-muted-foreground mt-0.5`,children:e.source})]}),f&&(0,i.jsx)(`button`,{onClick:()=>f(e.id),className:`flex-shrink-0 p-1 rounded hover:bg-black/10 dark:hover:bg-white/10 transition-colors`,"aria-label":`Dismiss alert`,children:(0,i.jsx)(r.X,{className:`h-4 w-4 text-muted-foreground`})})]}),(0,i.jsxs)(`div`,{className:`flex items-center gap-2 mt-1 text-xs text-muted-foreground`,children:[(0,i.jsx)(`span`,{children:s(e.timestamp)}),(0,i.jsx)(`span`,{className:`text-muted-foreground/50`,children:`|`}),(0,i.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,i.jsx)(r.Clock,{className:`h-3 w-3`}),c(e.timestamp)]}),C&&e.snoozedUntil&&(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(`span`,{className:`text-muted-foreground/50`,children:`|`}),(0,i.jsxs)(`span`,{className:`flex items-center gap-1 text-amber-600 dark:text-amber-400`,children:[(0,i.jsx)(r.BellOff,{className:`h-3 w-3`}),l(e.snoozedUntil)]})]})]}),e.acknowledged&&(0,i.jsxs)(`div`,{className:`flex items-center gap-1 mt-1 text-xs text-green-600 dark:text-green-400`,children:[(0,i.jsx)(r.Check,{className:`h-3 w-3`}),(0,i.jsxs)(`span`,{children:[`Acknowledged`,e.acknowledgedBy&&` by ${e.acknowledgedBy}`]})]})]})]}),e.description&&(0,i.jsxs)(`div`,{className:`mt-3`,children:[(0,i.jsxs)(`button`,{onClick:()=>_(!g),className:`flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground transition-colors`,children:[g?(0,i.jsx)(r.ChevronUp,{className:`h-3 w-3`}):(0,i.jsx)(r.ChevronDown,{className:`h-3 w-3`}),g?`Hide details`:`Show details`]}),g&&(0,i.jsx)(`div`,{className:`mt-2 p-3 rounded-md bg-black/5 dark:bg-white/5 animate-in slide-in-from-top-2 fade-in duration-200`,children:(0,i.jsx)(`p`,{className:`text-sm text-muted-foreground whitespace-pre-wrap`,children:e.description})})]}),(!e.acknowledged||d)&&(0,i.jsxs)(`div`,{className:`flex items-center gap-2 mt-3`,children:[u&&!e.acknowledged&&(0,i.jsxs)(`button`,{onClick:()=>u(e.id),className:t.cn(`inline-flex items-center gap-1.5 px-3 py-1.5 rounded-md text-xs font-medium transition-colors`,`bg-green-100 text-green-700 hover:bg-green-200`,`dark:bg-green-900/50 dark:text-green-300 dark:hover:bg-green-900/70`),children:[(0,i.jsx)(r.Check,{className:`h-3.5 w-3.5`}),`Acknowledge`]}),d&&!C&&(0,i.jsxs)(`div`,{className:`relative`,ref:b,children:[(0,i.jsxs)(`button`,{onClick:()=>y(!v),className:t.cn(`inline-flex items-center gap-1.5 px-3 py-1.5 rounded-md text-xs font-medium transition-colors`,`bg-amber-100 text-amber-700 hover:bg-amber-200`,`dark:bg-amber-900/50 dark:text-amber-300 dark:hover:bg-amber-900/70`),children:[(0,i.jsx)(r.BellOff,{className:`h-3.5 w-3.5`}),`Snooze`,(0,i.jsx)(r.ChevronDown,{className:`h-3 w-3`})]}),v&&(0,i.jsx)(`div`,{className:`absolute bottom-full left-0 mb-1 py-1 bg-popover border rounded-md shadow-lg min-w-[120px] z-50 animate-in slide-in-from-bottom-2 fade-in duration-150`,children:o.map(t=>(0,i.jsx)(`button`,{onClick:()=>{d(e.id,t.value),y(!1)},className:`w-full px-3 py-1.5 text-xs text-left hover:bg-muted transition-colors`,children:t.label},t.value))})]})]})]})})}function f({alerts:e,maxVisible:n,onExpand:r}){let o=e.slice(0,n),c=e.length-n;return(0,i.jsxs)(`div`,{className:`relative`,children:[(0,i.jsx)(`div`,{className:`relative`,style:{height:`${56+(Math.min(n,e.length)-1)*8}px`},children:o.map((e,n)=>{let o=a[e.severity],c=o.icon;return(0,i.jsx)(`div`,{className:t.cn(`absolute left-0 right-0 h-14 rounded-lg border-l-4 shadow-md transition-all duration-300`,o.borderColor,o.bgColor,`ring-1`,o.ringColor,`cursor-pointer hover:translate-y-[-2px]`),style:{transform:`translateY(${n*8}px) scale(${1-n*.02})`,zIndex:100-n,opacity:1-n*.15},onClick:r,children:(0,i.jsxs)(`div`,{className:`flex items-center gap-3 p-3 h-full`,children:[(0,i.jsx)(c,{className:t.cn(`h-5 w-5 flex-shrink-0`,o.color)}),(0,i.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,i.jsx)(`p`,{className:`text-sm font-medium truncate`,children:e.title}),(0,i.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:s(e.timestamp)})]}),e.count&&e.count>1&&(0,i.jsx)(`span`,{className:t.cn(`flex-shrink-0 inline-flex items-center justify-center min-w-[20px] h-5 px-1.5 rounded-full text-xs font-medium`,o.color),children:e.count})]})},e.id)})}),c>0&&(0,i.jsxs)(`button`,{onClick:r,className:`absolute -bottom-2 left-1/2 -translate-x-1/2 px-2 py-0.5 bg-muted rounded-full text-xs font-medium text-muted-foreground hover:bg-muted/80 transition-colors shadow-sm`,children:[`+`,c,` more`]})]})}function p({alerts:e,onAcknowledge:o,onSnooze:s,onDismiss:c,maxVisible:l=5,groupSimilar:u=!0,animated:p=!0,className:m}){let[h,g]=n.useState(!1),_=n.useMemo(()=>{let t=new Date,n=e.filter(e=>!(e.snoozedUntil&&e.snoozedUntil>t));if(u){let e=new Map;n.forEach(t=>{let n=`${t.severity}-${t.title}-${t.source||``}`,r=e.get(n);r?e.set(n,{...r,count:(r.count||1)+1,timestamp:t.timestamp>r.timestamp?t.timestamp:r.timestamp}):e.set(n,{...t,count:t.count||1})}),n=Array.from(e.values())}return n.sort((e,t)=>{let n=a[t.severity].priority-a[e.severity].priority;return n===0?t.timestamp.getTime()-e.timestamp.getTime():n})},[e,u]),v=n.useMemo(()=>{let t=new Date;return e.filter(e=>e.snoozedUntil&&e.snoozedUntil>t)},[e]),y=n.useMemo(()=>({critical:_.filter(e=>e.severity===`critical`).length,warning:_.filter(e=>e.severity===`warning`).length,info:_.filter(e=>e.severity===`info`).length,snoozed:v.length}),[_,v]);return e.length===0?(0,i.jsxs)(`div`,{className:t.cn(`flex flex-col items-center justify-center py-8 text-center rounded-lg border border-dashed`,m),children:[(0,i.jsx)(r.Bell,{className:`h-10 w-10 text-muted-foreground/50 mb-3`}),(0,i.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`No active alerts`})]}):(0,i.jsxs)(`div`,{className:t.cn(`w-full`,m),children:[(0,i.jsxs)(`div`,{className:`flex items-center justify-between mb-4`,children:[(0,i.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,i.jsx)(`h3`,{className:`font-semibold text-sm`,children:`Alerts`}),(0,i.jsxs)(`div`,{className:`flex items-center gap-2`,children:[y.critical>0&&(0,i.jsxs)(`span`,{className:`inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-xs font-medium bg-red-100 text-red-700 dark:bg-red-900/50 dark:text-red-300`,children:[(0,i.jsx)(r.AlertTriangle,{className:`h-3 w-3`}),y.critical]}),y.warning>0&&(0,i.jsxs)(`span`,{className:`inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-xs font-medium bg-amber-100 text-amber-700 dark:bg-amber-900/50 dark:text-amber-300`,children:[(0,i.jsx)(r.AlertCircle,{className:`h-3 w-3`}),y.warning]}),y.info>0&&(0,i.jsxs)(`span`,{className:`inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-xs font-medium bg-blue-100 text-blue-700 dark:bg-blue-900/50 dark:text-blue-300`,children:[(0,i.jsx)(r.Info,{className:`h-3 w-3`}),y.info]}),y.snoozed>0&&(0,i.jsxs)(`span`,{className:`inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-xs font-medium bg-muted text-muted-foreground`,children:[(0,i.jsx)(r.BellOff,{className:`h-3 w-3`}),y.snoozed]})]})]}),_.length>1&&(0,i.jsx)(`button`,{onClick:()=>g(!h),className:`text-xs text-muted-foreground hover:text-foreground transition-colors flex items-center gap-1`,children:h?(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(r.ChevronUp,{className:`h-3 w-3`}),`Collapse`]}):(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(r.ChevronDown,{className:`h-3 w-3`}),`Expand all`]})})]}),h?(0,i.jsxs)(`div`,{className:`space-y-3`,children:[_.map((e,t)=>(0,i.jsx)(d,{alert:e,onAcknowledge:o,onSnooze:s,onDismiss:c,animated:p},e.id)),v.length>0&&(0,i.jsxs)(`div`,{className:`pt-3 border-t`,children:[(0,i.jsxs)(`p`,{className:`text-xs text-muted-foreground mb-2 flex items-center gap-1`,children:[(0,i.jsx)(r.BellOff,{className:`h-3 w-3`}),`Snoozed (`,v.length,`)`]}),(0,i.jsx)(`div`,{className:`space-y-2`,children:v.map(e=>(0,i.jsx)(d,{alert:e,onAcknowledge:o,onSnooze:s,onDismiss:c,animated:!1},e.id))})]})]}):(0,i.jsx)(i.Fragment,{children:_.length===1?(0,i.jsx)(d,{alert:_[0],onAcknowledge:o,onSnooze:s,onDismiss:c,animated:p}):(0,i.jsx)(f,{alerts:_,maxVisible:l,onExpand:()=>g(!0)})})]})}exports.default=p,exports.useAlertStack=u;
|
|
1
|
+
"use client";"use client";const e=require("../../_virtual/_rolldown/runtime.cjs.js"),t=require("../../utils/cn.cjs.js");let n=require("react");n=e.__toESM(n);let r=require("lucide-react"),i=require("react/jsx-runtime");var a={critical:{icon:r.AlertTriangle,color:`text-red-600 dark:text-red-300`,bgColor:`bg-red-50 dark:bg-red-900/40`,borderColor:`border-red-500 dark:border-red-400`,ringColor:`ring-red-500/20 dark:ring-red-400/30`,label:`Critical`,priority:3},warning:{icon:r.AlertCircle,color:`text-amber-600 dark:text-amber-300`,bgColor:`bg-amber-50 dark:bg-amber-900/40`,borderColor:`border-amber-500 dark:border-amber-400`,ringColor:`ring-amber-500/20 dark:ring-amber-400/30`,label:`Warning`,priority:2},info:{icon:r.Info,color:`text-blue-600 dark:text-blue-300`,bgColor:`bg-blue-50 dark:bg-blue-900/40`,borderColor:`border-blue-500 dark:border-blue-400`,ringColor:`ring-blue-500/20 dark:ring-blue-400/30`,label:`Info`,priority:1}},o=[{label:`5 min`,value:300*1e3},{label:`15 min`,value:900*1e3},{label:`30 min`,value:1800*1e3},{label:`1 hour`,value:3600*1e3},{label:`4 hours`,value:14400*1e3}];function s(e){let t=new Date().getTime()-e.getTime(),n=Math.floor(t/6e4),r=Math.floor(t/36e5),i=Math.floor(t/864e5);return n<1?`Just now`:n<60?`${n}m ago`:r<24?`${r}h ago`:i<7?`${i}d ago`:e.toLocaleDateString()}function c(e){let t=new Date().getTime()-e.getTime(),n=Math.floor(t/6e4),r=Math.floor(t/36e5);return n<60?`${n}m`:r<24?`${r}h ${n%60}m`:`${Math.floor(r/24)}d ${r%24}h`}function l(e){let t=new Date,n=e.getTime()-t.getTime();if(n<=0)return`Expired`;let r=Math.floor(n/6e4),i=Math.floor(n/36e5);return r<60?`${r}m remaining`:`${i}h ${r%60}m remaining`}function u(e=[],t={}){let[r,i]=n.useState(e),{onNewAlert:a,playSoundOnCritical:o=!0}=t,s=n.useRef(new Set(e.map(e=>e.id))),c=n.useCallback(e=>{let t={...e,id:`alert-${Date.now()}-${Math.random().toString(36).slice(2)}`,timestamp:new Date};return i(e=>[t,...e]),a?.(t),t},[a]),l=n.useCallback((e,t)=>{i(n=>n.map(n=>n.id===e?{...n,acknowledged:!0,acknowledgedBy:t}:n))},[]),u=n.useCallback((e,t)=>{let n=new Date(Date.now()+t);i(t=>t.map(t=>t.id===e?{...t,snoozedUntil:n}:t))},[]),d=n.useCallback(e=>{i(t=>t.filter(t=>t.id!==e))},[]),f=n.useCallback(()=>{i(e=>e.filter(e=>!e.acknowledged))},[]),p=n.useCallback(()=>{i([])},[]);return n.useEffect(()=>{let e=new Set(r.map(e=>e.id)),t=r.filter(e=>!s.current.has(e.id));o&&t.some(e=>e.severity===`critical`),s.current=e},[r,o]),{alerts:r,activeAlerts:n.useMemo(()=>{let e=new Date;return r.filter(t=>!(t.snoozedUntil&&t.snoozedUntil>e))},[r]),snoozedAlerts:n.useMemo(()=>{let e=new Date;return r.filter(t=>t.snoozedUntil&&t.snoozedUntil>e)},[r]),addAlert:c,acknowledgeAlert:l,snoozeAlert:u,dismissAlert:d,clearAcknowledged:f,clearAll:p}}function d({alert:e,onAcknowledge:u,onSnooze:d,onDismiss:f,isStacked:p=!1,stackIndex:m=0,animated:h=!0}){let[g,_]=n.useState(!1),[v,y]=n.useState(!1),b=n.useRef(null),x=a[e.severity],S=x.icon,C=e.snoozedUntil&&e.snoozedUntil>new Date;n.useEffect(()=>{function e(e){b.current&&!b.current.contains(e.target)&&y(!1)}return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[]);let w=p?{transform:`translateY(${m*8}px) scale(${1-m*.02})`,zIndex:100-m,opacity:1-m*.15}:{};return(0,i.jsx)(`div`,{className:t.cn(`relative w-full rounded-lg border-l-4 shadow-lg transition-all duration-300`,x.borderColor,x.bgColor,`ring-1`,x.ringColor,e.acknowledged&&`opacity-60`,C&&`opacity-50`,h&&`animate-in slide-in-from-right-5 fade-in duration-300`,p&&m>0&&`absolute top-0 left-0`),style:w,children:(0,i.jsxs)(`div`,{className:`p-4`,children:[(0,i.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,i.jsx)(`div`,{className:t.cn(`flex-shrink-0 w-10 h-10 rounded-full flex items-center justify-center`,x.bgColor,`ring-2`,x.ringColor),children:(0,i.jsx)(S,{className:t.cn(`h-5 w-5`,x.color)})}),(0,i.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,i.jsxs)(`div`,{className:`flex items-start justify-between gap-2`,children:[(0,i.jsxs)(`div`,{className:`flex-1`,children:[(0,i.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,i.jsx)(`h4`,{className:`font-semibold text-sm text-foreground`,children:e.title}),e.count&&e.count>1&&(0,i.jsx)(`span`,{className:t.cn(`inline-flex items-center justify-center min-w-[20px] h-5 px-1.5 rounded-full text-xs font-medium`,x.bgColor,x.color,`ring-1`,x.ringColor),children:e.count})]}),e.source&&(0,i.jsx)(`p`,{className:`text-xs text-muted-foreground mt-0.5`,children:e.source})]}),f&&(0,i.jsx)(`button`,{onClick:()=>f(e.id),className:`flex-shrink-0 p-1 rounded hover:bg-black/10 dark:hover:bg-white/10 transition-colors`,"aria-label":`Dismiss alert`,children:(0,i.jsx)(r.X,{className:`h-4 w-4 text-muted-foreground`})})]}),(0,i.jsxs)(`div`,{className:`flex items-center gap-2 mt-1 text-xs text-muted-foreground`,children:[(0,i.jsx)(`span`,{children:s(e.timestamp)}),(0,i.jsx)(`span`,{className:`text-muted-foreground/50`,children:`|`}),(0,i.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,i.jsx)(r.Clock,{className:`h-3 w-3`}),c(e.timestamp)]}),C&&e.snoozedUntil&&(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(`span`,{className:`text-muted-foreground/50`,children:`|`}),(0,i.jsxs)(`span`,{className:`flex items-center gap-1 text-amber-600 dark:text-amber-400`,children:[(0,i.jsx)(r.BellOff,{className:`h-3 w-3`}),l(e.snoozedUntil)]})]})]}),e.acknowledged&&(0,i.jsxs)(`div`,{className:`flex items-center gap-1 mt-1 text-xs text-green-600 dark:text-green-400`,children:[(0,i.jsx)(r.Check,{className:`h-3 w-3`}),(0,i.jsxs)(`span`,{children:[`Acknowledged`,e.acknowledgedBy&&` by ${e.acknowledgedBy}`]})]})]})]}),e.description&&(0,i.jsxs)(`div`,{className:`mt-3`,children:[(0,i.jsxs)(`button`,{onClick:()=>_(!g),className:`flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground transition-colors`,children:[g?(0,i.jsx)(r.ChevronUp,{className:`h-3 w-3`}):(0,i.jsx)(r.ChevronDown,{className:`h-3 w-3`}),g?`Hide details`:`Show details`]}),g&&(0,i.jsx)(`div`,{className:`mt-2 p-3 rounded-md bg-black/5 dark:bg-white/5 animate-in slide-in-from-top-2 fade-in duration-200`,children:(0,i.jsx)(`p`,{className:`text-sm text-muted-foreground whitespace-pre-wrap`,children:e.description})})]}),(!e.acknowledged||d)&&(0,i.jsxs)(`div`,{className:`flex items-center gap-2 mt-3`,children:[u&&!e.acknowledged&&(0,i.jsxs)(`button`,{onClick:()=>u(e.id),className:t.cn(`inline-flex items-center gap-1.5 px-3 py-1.5 rounded-md text-xs font-medium transition-colors`,`bg-green-100 text-green-700 hover:bg-green-200`,`dark:bg-green-900/50 dark:text-green-300 dark:hover:bg-green-900/70`),children:[(0,i.jsx)(r.Check,{className:`h-3.5 w-3.5`}),`Acknowledge`]}),d&&!C&&(0,i.jsxs)(`div`,{className:`relative`,ref:b,children:[(0,i.jsxs)(`button`,{onClick:()=>y(!v),className:t.cn(`inline-flex items-center gap-1.5 px-3 py-1.5 rounded-md text-xs font-medium transition-colors`,`bg-amber-100 text-amber-700 hover:bg-amber-200`,`dark:bg-amber-900/50 dark:text-amber-300 dark:hover:bg-amber-900/70`),children:[(0,i.jsx)(r.BellOff,{className:`h-3.5 w-3.5`}),`Snooze`,(0,i.jsx)(r.ChevronDown,{className:`h-3 w-3`})]}),v&&(0,i.jsx)(`div`,{className:`absolute bottom-full left-0 mb-1 py-1 bg-popover border rounded-md shadow-lg min-w-[120px] z-50 animate-in slide-in-from-bottom-2 fade-in duration-150`,children:o.map(t=>(0,i.jsx)(`button`,{onClick:()=>{d(e.id,t.value),y(!1)},className:`w-full px-3 py-1.5 text-xs text-left hover:bg-muted transition-colors`,children:t.label},t.value))})]})]})]})})}function f({alerts:e,maxVisible:n,onExpand:r}){let o=e.slice(0,n),c=e.length-n;return(0,i.jsxs)(`div`,{className:`relative`,children:[(0,i.jsx)(`div`,{className:`relative`,style:{height:`${56+(Math.min(n,e.length)-1)*8}px`},children:o.map((e,n)=>{let o=a[e.severity],c=o.icon;return(0,i.jsx)(`div`,{className:t.cn(`absolute left-0 right-0 h-14 rounded-lg border-l-4 shadow-md transition-all duration-300`,o.borderColor,o.bgColor,`ring-1`,o.ringColor,`cursor-pointer hover:translate-y-[-2px]`),style:{transform:`translateY(${n*8}px) scale(${1-n*.02})`,zIndex:100-n,opacity:1-n*.15},onClick:r,children:(0,i.jsxs)(`div`,{className:`flex items-center gap-3 p-3 h-full`,children:[(0,i.jsx)(c,{className:t.cn(`h-5 w-5 flex-shrink-0`,o.color)}),(0,i.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,i.jsx)(`p`,{className:`text-sm font-medium truncate`,children:e.title}),(0,i.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:s(e.timestamp)})]}),e.count&&e.count>1&&(0,i.jsx)(`span`,{className:t.cn(`flex-shrink-0 inline-flex items-center justify-center min-w-[20px] h-5 px-1.5 rounded-full text-xs font-medium`,o.color),children:e.count})]})},e.id)})}),c>0&&(0,i.jsxs)(`button`,{onClick:r,className:`absolute -bottom-2 left-1/2 -translate-x-1/2 px-2 py-0.5 bg-muted rounded-full text-xs font-medium text-muted-foreground hover:bg-muted/80 transition-colors shadow-sm`,children:[`+`,c,` more`]})]})}function p({alerts:e,onAcknowledge:o,onSnooze:s,onDismiss:c,maxVisible:l=5,groupSimilar:u=!0,animated:p=!0,className:m}){let[h,g]=n.useState(!1),_=n.useMemo(()=>{let t=new Date,n=e.filter(e=>!(e.snoozedUntil&&e.snoozedUntil>t));if(u){let e=new Map;n.forEach(t=>{let n=`${t.severity}-${t.title}-${t.source||``}`,r=e.get(n);r?e.set(n,{...r,count:(r.count||1)+1,timestamp:t.timestamp>r.timestamp?t.timestamp:r.timestamp}):e.set(n,{...t,count:t.count||1})}),n=Array.from(e.values())}return n.sort((e,t)=>{let n=a[t.severity].priority-a[e.severity].priority;return n===0?t.timestamp.getTime()-e.timestamp.getTime():n})},[e,u]),v=n.useMemo(()=>{let t=new Date;return e.filter(e=>e.snoozedUntil&&e.snoozedUntil>t)},[e]),y=n.useMemo(()=>({critical:_.filter(e=>e.severity===`critical`).length,warning:_.filter(e=>e.severity===`warning`).length,info:_.filter(e=>e.severity===`info`).length,snoozed:v.length}),[_,v]);return e.length===0?(0,i.jsxs)(`div`,{className:t.cn(`flex flex-col items-center justify-center py-8 text-center rounded-lg border border-dashed`,m),children:[(0,i.jsx)(r.Bell,{className:`h-10 w-10 text-muted-foreground/50 mb-3`}),(0,i.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`No active alerts`})]}):(0,i.jsxs)(`div`,{className:t.cn(`w-full`,m),children:[(0,i.jsxs)(`div`,{className:`flex items-center justify-between mb-4`,children:[(0,i.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,i.jsx)(`h3`,{className:`font-semibold text-sm`,children:`Alerts`}),(0,i.jsxs)(`div`,{className:`flex items-center gap-2`,children:[y.critical>0&&(0,i.jsxs)(`span`,{className:`inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-xs font-medium bg-red-100 text-red-700 dark:bg-red-900/50 dark:text-red-300`,children:[(0,i.jsx)(r.AlertTriangle,{className:`h-3 w-3`}),y.critical]}),y.warning>0&&(0,i.jsxs)(`span`,{className:`inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-xs font-medium bg-amber-100 text-amber-700 dark:bg-amber-900/50 dark:text-amber-300`,children:[(0,i.jsx)(r.AlertCircle,{className:`h-3 w-3`}),y.warning]}),y.info>0&&(0,i.jsxs)(`span`,{className:`inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-xs font-medium bg-blue-100 text-blue-700 dark:bg-blue-900/50 dark:text-blue-300`,children:[(0,i.jsx)(r.Info,{className:`h-3 w-3`}),y.info]}),y.snoozed>0&&(0,i.jsxs)(`span`,{className:`inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-xs font-medium bg-muted text-muted-foreground`,children:[(0,i.jsx)(r.BellOff,{className:`h-3 w-3`}),y.snoozed]})]})]}),_.length>1&&(0,i.jsx)(`button`,{onClick:()=>g(!h),className:`text-xs text-muted-foreground hover:text-foreground transition-colors flex items-center gap-1`,children:h?(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(r.ChevronUp,{className:`h-3 w-3`}),`Collapse`]}):(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(r.ChevronDown,{className:`h-3 w-3`}),`Expand all`]})})]}),h?(0,i.jsxs)(`div`,{className:`space-y-3`,children:[_.map((e,t)=>(0,i.jsx)(d,{alert:e,onAcknowledge:o,onSnooze:s,onDismiss:c,animated:p},e.id)),v.length>0&&(0,i.jsxs)(`div`,{className:`pt-3 border-t`,children:[(0,i.jsxs)(`p`,{className:`text-xs text-muted-foreground mb-2 flex items-center gap-1`,children:[(0,i.jsx)(r.BellOff,{className:`h-3 w-3`}),`Snoozed (`,v.length,`)`]}),(0,i.jsx)(`div`,{className:`space-y-2`,children:v.map(e=>(0,i.jsx)(d,{alert:e,onAcknowledge:o,onSnooze:s,onDismiss:c,animated:!1},e.id))})]})]}):(0,i.jsx)(i.Fragment,{children:_.length===1?(0,i.jsx)(d,{alert:_[0],onAcknowledge:o,onSnooze:s,onDismiss:c,animated:p}):(0,i.jsx)(f,{alerts:_,maxVisible:l,onExpand:()=>g(!0)})})]})}exports.WakaAlertStack=p,exports.default=p,exports.useAlertStack=u;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use client";"use client";const e=require(`../../_virtual/_rolldown/runtime.cjs.js`),t=require(`../../utils/cn.cjs.js`);let n=require(`react`);n=e.__toESM(n);let r=require(`lucide-react`),i=require(`react/jsx-runtime`);var a={sm:{cell:`w-12 h-12`,header:`w-12 h-10`,text:`text-xs`,headerText:`text-xs`,padding:`p-1`,icon:`h-3 w-3`},md:{cell:`w-16 h-16`,header:`w-16 h-12`,text:`text-sm`,headerText:`text-sm`,padding:`p-2`,icon:`h-4 w-4`},lg:{cell:`w-20 h-20`,header:`w-20 h-14`,text:`text-base`,headerText:`text-base`,padding:`p-3`,icon:`h-5 w-5`}},o={blue:{light:[`bg-blue-50`,`bg-blue-100`,`bg-blue-200`,`bg-blue-300`,`bg-blue-400`,`bg-blue-500`],dark:[`dark:bg-blue-950`,`dark:bg-blue-900`,`dark:bg-blue-800`,`dark:bg-blue-700`,`dark:bg-blue-600`,`dark:bg-blue-500`],text:[`text-blue-900`,`text-blue-900`,`text-blue-900`,`text-white`,`text-white`,`text-white`],darkText:[`dark:text-blue-100`,`dark:text-blue-100`,`dark:text-blue-100`,`dark:text-white`,`dark:text-white`,`dark:text-white`]},green:{light:[`bg-green-50`,`bg-green-100`,`bg-green-200`,`bg-green-300`,`bg-green-400`,`bg-green-500`],dark:[`dark:bg-green-950`,`dark:bg-green-900`,`dark:bg-green-800`,`dark:bg-green-700`,`dark:bg-green-600`,`dark:bg-green-500`],text:[`text-green-900`,`text-green-900`,`text-green-900`,`text-white`,`text-white`,`text-white`],darkText:[`dark:text-green-100`,`dark:text-green-100`,`dark:text-green-100`,`dark:text-white`,`dark:text-white`,`dark:text-white`]},purple:{light:[`bg-purple-50`,`bg-purple-100`,`bg-purple-200`,`bg-purple-300`,`bg-purple-400`,`bg-purple-500`],dark:[`dark:bg-purple-950`,`dark:bg-purple-900`,`dark:bg-purple-800`,`dark:bg-purple-700`,`dark:bg-purple-600`,`dark:bg-purple-500`],text:[`text-purple-900`,`text-purple-900`,`text-purple-900`,`text-white`,`text-white`,`text-white`],darkText:[`dark:text-purple-100`,`dark:text-purple-100`,`dark:text-purple-100`,`dark:text-white`,`dark:text-white`,`dark:text-white`]},orange:{light:[`bg-orange-50`,`bg-orange-100`,`bg-orange-200`,`bg-orange-300`,`bg-orange-400`,`bg-orange-500`],dark:[`dark:bg-orange-950`,`dark:bg-orange-900`,`dark:bg-orange-800`,`dark:bg-orange-700`,`dark:bg-orange-600`,`dark:bg-orange-500`],text:[`text-orange-900`,`text-orange-900`,`text-orange-900`,`text-white`,`text-white`,`text-white`],darkText:[`dark:text-orange-100`,`dark:text-orange-100`,`dark:text-orange-100`,`dark:text-white`,`dark:text-white`,`dark:text-white`]}},s={low:`bg-gray-100 dark:bg-gray-800 text-gray-600 dark:text-gray-400`,medium:`bg-blue-100 dark:bg-blue-900 text-blue-600 dark:text-blue-400`,high:`bg-orange-100 dark:bg-orange-900 text-orange-600 dark:text-orange-400`,critical:`bg-red-100 dark:bg-red-900 text-red-600 dark:text-red-400`};function c(e,t){return`${e}:${t}`}function l(e,t=100){if(e===0)return 0;let n=e/t*100;return n<=20?1:n<=40?2:n<=60?3:n<=80?4:5}function u(e,t,n){return t.reduce((t,r)=>{let i=c(e,r.id);return t+(n.get(i)||0)},0)}function d(e,t,n){return t.reduce((t,r)=>{let i=c(r.id,e);return t+(n.get(i)||0)},0)}function f(e,t,n,r){let i=0,a=0,o=0,s=0,c=0;e.forEach(e=>{let l=u(e.id,t,n);i+=l;let d=e.capacity||r;l===0?c++:l>d?a++:l===d?s++:o++});let l=e.length*t.length,d=l>0?i/l:0,f=e.reduce((e,t)=>e+(t.capacity||r),0),p=f>0?Math.min(100,i/f*100):0;return{totalAllocations:i,averageAllocation:d,overAllocatedCount:a,underAllocatedCount:o,fullyAllocatedCount:s,unallocatedCount:c,utilizationEfficiency:p}}function p({resources:e,consumers:t,initialAllocations:r=[],overAllocationThreshold:i=100,onAllocationChange:a}){let[o,s]=n.useState(()=>{let e=new Map;return r.forEach(t=>{let n=c(t.resourceId,t.consumerId);e.set(n,t.value)}),e}),[l,p]=n.useState(null),[m,h]=n.useState({field:`name`,direction:`asc`}),[g,_]=n.useState({field:`name`,direction:`asc`}),[v,y]=n.useState(`all`),[b,x]=n.useState(``),S=n.useRef(r),C=n.useCallback((e,t,n)=>{let r=c(e,t),i=Math.max(0,n);s(e=>{let t=new Map(e);return i===0?t.delete(r):t.set(r,i),t}),a?.(e,t,i)},[a]),w=n.useCallback((e,t)=>{let n=c(e,t);return o.get(n)||0},[o]),T=n.useCallback(e=>u(e,t,o),[t,o]),E=n.useCallback(t=>d(t,e,o),[e,o]),D=n.useCallback(t=>{let n=e.find(e=>e.id===t)?.capacity||i;return T(t)>n},[e,T,i]);return{allocations:o,setAllocation:C,getAllocation:w,getRowTotal:T,getColumnTotal:E,isOverAllocated:D,getSummary:n.useCallback(()=>f(e,t,o,i),[e,t,o,i]),clearAll:n.useCallback(()=>{s(new Map)},[]),reset:n.useCallback(()=>{let e=new Map;S.current.forEach(t=>{let n=c(t.resourceId,t.consumerId);e.set(n,t.value)}),s(e)},[]),exportAllocations:n.useCallback(()=>{let e=[];return o.forEach((t,n)=>{let[r,i]=n.split(`:`);e.push({resourceId:r,consumerId:i,value:t})}),e},[o]),importAllocations:n.useCallback(e=>{let t=new Map;e.forEach(e=>{let n=c(e.resourceId,e.consumerId);t.set(n,e.value)}),s(t)},[]),selectedCell:l,setSelectedCell:p,rowSort:m,setRowSort:h,columnSort:g,setColumnSort:_,filterMode:v,setFilterMode:y,searchQuery:b,setSearchQuery:x,filteredResources:n.useMemo(()=>{let t=[...e];if(b){let e=b.toLowerCase();t=t.filter(t=>t.name.toLowerCase().includes(e)||t.category?.toLowerCase().includes(e))}switch(v){case`over-allocated`:t=t.filter(e=>D(e.id));break;case`under-allocated`:t=t.filter(e=>{let t=T(e.id),n=e.capacity||i;return t>0&&t<n});break;case`unallocated`:t=t.filter(e=>T(e.id)===0);break}return t.sort((e,t)=>{let n=0;switch(m.field){case`name`:n=e.name.localeCompare(t.name);break;case`total`:n=T(e.id)-T(t.id);break}return m.direction===`asc`?n:-n}),t},[e,b,v,m,D,T,i]),sortedConsumers:n.useMemo(()=>{let e=[...t];return e.sort((e,t)=>{let n=0;switch(g.field){case`name`:n=e.name.localeCompare(t.name);break;case`total`:n=E(e.id)-E(t.id);break}return g.direction===`asc`?n:-n}),e},[t,g,E])}}function m({value:e,isSelected:s,isEditable:c,enableDrag:u,isOverAllocated:d,colorScheme:f,size:p,onSelect:m,onChange:h,onDragStart:g,onDrag:_,onDragEnd:v}){let[y,b]=n.useState(e.toString()),[x,S]=n.useState(!1),C=n.useRef(0),w=n.useRef(null),T=a[p],E=o[f],D=l(e);n.useEffect(()=>{b(e.toString())},[e]),n.useEffect(()=>{s&&w.current&&(w.current.focus(),w.current.select())},[s]);let O=t=>{t.key===`Enter`?(h(Math.max(0,parseInt(y)||0)),m()):t.key===`Escape`&&(b(e.toString()),m())},k=()=>{let t=Math.max(0,parseInt(y)||0);t!==e&&h(t)},A=t=>{!u||!c||(S(!0),C.current=t.clientY,g(e))},j=n.useCallback(e=>{x&&_(C.current-e.clientY)},[x,_]),M=n.useCallback(()=>{x&&(S(!1),v())},[x,v]);return n.useEffect(()=>{if(x)return window.addEventListener(`mousemove`,j),window.addEventListener(`mouseup`,M),()=>{window.removeEventListener(`mousemove`,j),window.removeEventListener(`mouseup`,M)}},[x,j,M]),(0,i.jsxs)(`div`,{className:t.cn(`relative flex items-center justify-center border border-border/50 transition-all duration-200`,T.cell,T.padding,E.light[D],E.dark[D],E.text[D],E.darkText[D],c&&`cursor-pointer hover:ring-2 hover:ring-primary/50`,s&&`ring-2 ring-primary z-10`,x&&`cursor-ns-resize`,d&&e>0&&`ring-2 ring-red-500 ring-inset`),onClick:c&&!s?m:void 0,onMouseDown:A,children:[s&&c?(0,i.jsx)(`input`,{ref:w,type:`number`,min:`0`,max:`200`,value:y,onChange:e=>b(e.target.value),onKeyDown:O,onBlur:k,"aria-label":`Allocation value (percent)`,className:t.cn(`w-full h-full text-center bg-transparent outline-none`,T.text,`font-medium tabular-nums`,`[appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none`)}):(0,i.jsx)(`span`,{className:t.cn(T.text,`font-medium tabular-nums select-none`),children:e>0?`${e}%`:`-`}),u&&c&&!s&&(0,i.jsx)(`div`,{className:`absolute bottom-0.5 left-1/2 -translate-x-1/2 opacity-0 group-hover:opacity-50 transition-opacity`,children:(0,i.jsx)(r.GripHorizontal,{className:t.cn(T.icon,`text-current`)})})]})}function h({label:e,subtitle:n,priority:o,isColumn:c,isSortable:l,sortDirection:u,size:d,onSort:f}){let p=a[d];return(0,i.jsxs)(`div`,{className:t.cn(`flex flex-col items-center justify-center bg-muted/50 border border-border/50`,p.header,p.padding,c&&`min-w-max`,l&&`cursor-pointer hover:bg-muted transition-colors`),onClick:f,children:[(0,i.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,i.jsx)(`span`,{className:t.cn(p.headerText,`font-medium truncate max-w-full`,c&&`writing-mode-vertical-rl rotate-180`),style:c?{writingMode:`vertical-rl`}:void 0,title:e,children:e}),l&&u&&(u===`asc`?(0,i.jsx)(r.ChevronUp,{className:p.icon}):(0,i.jsx)(r.ChevronDown,{className:p.icon}))]}),n&&(0,i.jsx)(`span`,{className:t.cn(`text-muted-foreground`,d===`sm`?`text-[10px]`:`text-xs`),children:n}),o&&(0,i.jsx)(`span`,{className:t.cn(`mt-0.5 px-1 rounded text-[10px] font-medium`,s[o]),children:o})]})}function g({value:e,isOverAllocated:n,maxValue:o=100,size:s,isRow:c}){let l=a[s],u=e/o*100;return(0,i.jsxs)(`div`,{className:t.cn(`flex flex-col items-center justify-center border border-border/50`,c?`bg-muted/30`:`bg-muted/50`,l.cell,l.padding,n&&`bg-red-100 dark:bg-red-900/30`),children:[(0,i.jsxs)(`span`,{className:t.cn(l.text,`font-bold tabular-nums`,n?`text-red-600 dark:text-red-400`:`text-foreground`),children:[e,`%`]}),c&&(0,i.jsx)(`div`,{className:`w-full mt-1 h-1 bg-muted rounded-full overflow-hidden`,children:(0,i.jsx)(`div`,{className:t.cn(`h-full rounded-full transition-all duration-300`,n?`bg-red-500`:u>=80?`bg-yellow-500`:`bg-green-500`),style:{width:`${Math.min(u,100)}%`}})}),n&&(0,i.jsx)(r.AlertTriangle,{className:t.cn(l.icon,`text-red-500 mt-0.5`)})]})}function _({summary:e,size:n}){let r=a[n];return(0,i.jsx)(`div`,{className:`flex flex-wrap gap-4 p-4 bg-muted/30 rounded-lg border border-border`,children:[{label:`Total Allocated`,value:`${e.totalAllocations.toFixed(0)}%`,color:`text-foreground`},{label:`Avg per Cell`,value:`${e.averageAllocation.toFixed(1)}%`,color:`text-foreground`},{label:`Utilization`,value:`${e.utilizationEfficiency.toFixed(1)}%`,color:`text-blue-600`},{label:`Over-allocated`,value:e.overAllocatedCount.toString(),color:e.overAllocatedCount>0?`text-red-600`:`text-green-600`},{label:`Fully Allocated`,value:e.fullyAllocatedCount.toString(),color:`text-green-600`},{label:`Under-allocated`,value:e.underAllocatedCount.toString(),color:`text-yellow-600`},{label:`Unallocated`,value:e.unallocatedCount.toString(),color:`text-muted-foreground`}].map(e=>(0,i.jsxs)(`div`,{className:`flex flex-col`,children:[(0,i.jsx)(`span`,{className:t.cn(`text-muted-foreground`,r.headerText),children:e.label}),(0,i.jsx)(`span`,{className:t.cn(`font-bold tabular-nums`,r.text,e.color),children:e.value})]},e.label))})}function v({resources:e,consumers:o,allocations:s=[],editable:c=!0,enableDrag:l=!0,showRowTotals:u=!0,showColumnTotals:d=!0,showSummary:f=!0,showFilters:v=!0,showSearch:y=!0,overAllocationThreshold:b=100,cellSize:x=`md`,colorScheme:S=`blue`,onAllocationChange:C,onSave:w,formatValue:T,className:E}){let D=p({resources:e,consumers:o,initialAllocations:s,overAllocationThreshold:b,onAllocationChange:C}),[O,k]=n.useState(0),[A,j]=n.useState(null),M=a[x],N=(e,t,n)=>{k(n),j({resourceId:e,consumerId:t})},P=(e,t,n)=>{if(!A)return;let r=Math.max(0,Math.min(200,O+Math.round(n/5)));D.setAllocation(e,t,r)},F=()=>{j(null)},I=()=>{w?.(D.exportAllocations())},L=()=>{D.setRowSort({field:D.rowSort.field===`name`?`total`:`name`,direction:D.rowSort.field===D.rowSort.field&&D.rowSort.direction===`asc`?`desc`:`asc`})},R=()=>{D.setColumnSort({field:D.columnSort.field===`name`?`total`:`name`,direction:D.columnSort.field===D.columnSort.field&&D.columnSort.direction===`asc`?`desc`:`asc`})},z=D.getSummary();return(0,i.jsxs)(`div`,{className:t.cn(`space-y-4`,E),children:[(v||y)&&(0,i.jsxs)(`div`,{className:`flex flex-wrap items-center gap-4`,children:[y&&(0,i.jsxs)(`div`,{className:`relative`,children:[(0,i.jsx)(r.Search,{className:t.cn(M.icon,`absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground`)}),(0,i.jsx)(`input`,{type:`text`,placeholder:`Search resources...`,"aria-label":`Search resources`,value:D.searchQuery,onChange:e=>D.setSearchQuery(e.target.value),className:t.cn(`pl-10 pr-4 py-2 border border-border rounded-lg bg-background`,M.text,`focus:outline-none focus:ring-2 focus:ring-primary/50`)}),D.searchQuery&&(0,i.jsx)(`button`,{type:`button`,onClick:()=>D.setSearchQuery(``),className:`absolute right-3 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground`,children:(0,i.jsx)(r.X,{className:M.icon})})]}),v&&(0,i.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,i.jsx)(r.Filter,{className:t.cn(M.icon,`text-muted-foreground`)}),(0,i.jsx)(`div`,{className:`flex rounded-lg border border-border overflow-hidden`,children:[`all`,`over-allocated`,`under-allocated`,`unallocated`].map(e=>(0,i.jsx)(`button`,{type:`button`,onClick:()=>D.setFilterMode(e),className:t.cn(`px-3 py-1.5 transition-colors`,M.text,D.filterMode===e?`bg-primary text-primary-foreground`:`bg-background hover:bg-muted`),children:e===`all`?`All`:e===`over-allocated`?`Over`:e===`under-allocated`?`Under`:`None`},e))})]}),(0,i.jsxs)(`div`,{className:`flex items-center gap-2 ml-auto`,children:[(0,i.jsxs)(`button`,{type:`button`,onClick:L,className:t.cn(`flex items-center gap-1 px-3 py-1.5 border border-border rounded-lg`,`bg-background hover:bg-muted transition-colors`,M.text),children:[(0,i.jsx)(r.ArrowUpDown,{className:M.icon}),`Rows: `,D.rowSort.field]}),(0,i.jsxs)(`button`,{type:`button`,onClick:R,className:t.cn(`flex items-center gap-1 px-3 py-1.5 border border-border rounded-lg`,`bg-background hover:bg-muted transition-colors`,M.text),children:[(0,i.jsx)(r.ArrowUpDown,{className:M.icon}),`Columns: `,D.columnSort.field]})]})]}),f&&(0,i.jsx)(_,{summary:z,size:x}),(0,i.jsx)(`div`,{className:`overflow-auto`,children:(0,i.jsxs)(`div`,{className:`inline-block min-w-full`,children:[(0,i.jsxs)(`div`,{className:`flex`,children:[(0,i.jsx)(`div`,{className:t.cn(`flex items-center justify-center bg-muted/50 border border-border/50 sticky left-0 z-20`,M.header,M.padding),children:(0,i.jsx)(r.Percent,{className:t.cn(M.icon,`text-muted-foreground`)})}),D.sortedConsumers.map(e=>(0,i.jsx)(h,{label:e.name,priority:e.priority,isColumn:!0,isSortable:!0,sortDirection:D.columnSort.field===`name`?D.columnSort.direction:null,size:x,onSort:R},e.id)),u&&(0,i.jsx)(`div`,{className:t.cn(`flex items-center justify-center bg-muted/50 border border-border/50`,M.header,M.padding),children:(0,i.jsx)(`span`,{className:t.cn(M.headerText,`font-bold`),children:`Total`})})]}),D.filteredResources.map(e=>{let t=D.getRowTotal(e.id),n=e.capacity||b,r=t>n;return(0,i.jsxs)(`div`,{className:`flex group`,children:[(0,i.jsx)(h,{label:e.name,subtitle:e.category,isSortable:!0,sortDirection:D.rowSort.field===`name`?D.rowSort.direction:null,size:x,onSort:L}),D.sortedConsumers.map(t=>{let n=D.getAllocation(e.id,t.id),a=D.selectedCell?.resourceId===e.id&&D.selectedCell?.consumerId===t.id;return(0,i.jsx)(m,{resourceId:e.id,consumerId:t.id,value:n,isSelected:a,isEditable:c,enableDrag:l,isOverAllocated:r,colorScheme:S,size:x,onSelect:()=>D.setSelectedCell(a?null:{resourceId:e.id,consumerId:t.id}),onChange:n=>D.setAllocation(e.id,t.id,n),onDragStart:n=>N(e.id,t.id,n),onDrag:n=>P(e.id,t.id,n),onDragEnd:F},`${e.id}-${t.id}`)}),u&&(0,i.jsx)(g,{value:t,isOverAllocated:r,maxValue:n,size:x,isRow:!0})]},e.id)}),d&&(0,i.jsxs)(`div`,{className:`flex`,children:[(0,i.jsx)(`div`,{className:t.cn(`flex items-center justify-center bg-muted/50 border border-border/50`,M.header,M.padding),children:(0,i.jsx)(`span`,{className:t.cn(M.headerText,`font-bold`),children:`Total`})}),D.sortedConsumers.map(e=>(0,i.jsx)(g,{value:D.getColumnTotal(e.id),size:x},`total-${e.id}`)),u&&(0,i.jsxs)(`div`,{className:t.cn(`flex items-center justify-center bg-muted border border-border/50 font-bold`,M.cell,M.padding,M.text),children:[z.totalAllocations.toFixed(0),`%`]})]})]})}),c&&w&&(0,i.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,i.jsx)(`button`,{type:`button`,onClick:D.reset,className:t.cn(`px-4 py-2 border border-border rounded-lg`,`bg-background hover:bg-muted transition-colors`,M.text),children:`Reset`}),(0,i.jsx)(`button`,{type:`button`,onClick:D.clearAll,className:t.cn(`px-4 py-2 border border-border rounded-lg`,`bg-background hover:bg-muted transition-colors`,M.text),children:`Clear All`}),(0,i.jsx)(`button`,{type:`button`,onClick:I,className:t.cn(`px-4 py-2 rounded-lg`,`bg-primary text-primary-foreground hover:bg-primary/90 transition-colors`,M.text),children:`Save Allocations`})]}),(0,i.jsx)(`style`,{children:`
|
|
1
|
+
"use client";"use client";const e=require("../../_virtual/_rolldown/runtime.cjs.js"),t=require("../../utils/cn.cjs.js");let n=require("react");n=e.__toESM(n);let r=require("lucide-react"),i=require("react/jsx-runtime");var a={sm:{cell:`w-12 h-12`,header:`w-12 h-10`,text:`text-xs`,headerText:`text-xs`,padding:`p-1`,icon:`h-3 w-3`},md:{cell:`w-16 h-16`,header:`w-16 h-12`,text:`text-sm`,headerText:`text-sm`,padding:`p-2`,icon:`h-4 w-4`},lg:{cell:`w-20 h-20`,header:`w-20 h-14`,text:`text-base`,headerText:`text-base`,padding:`p-3`,icon:`h-5 w-5`}},o={blue:{light:[`bg-blue-50`,`bg-blue-100`,`bg-blue-200`,`bg-blue-300`,`bg-blue-400`,`bg-blue-500`],dark:[`dark:bg-blue-950`,`dark:bg-blue-900`,`dark:bg-blue-800`,`dark:bg-blue-700`,`dark:bg-blue-600`,`dark:bg-blue-500`],text:[`text-blue-900`,`text-blue-900`,`text-blue-900`,`text-white`,`text-white`,`text-white`],darkText:[`dark:text-blue-100`,`dark:text-blue-100`,`dark:text-blue-100`,`dark:text-white`,`dark:text-white`,`dark:text-white`]},green:{light:[`bg-green-50`,`bg-green-100`,`bg-green-200`,`bg-green-300`,`bg-green-400`,`bg-green-500`],dark:[`dark:bg-green-950`,`dark:bg-green-900`,`dark:bg-green-800`,`dark:bg-green-700`,`dark:bg-green-600`,`dark:bg-green-500`],text:[`text-green-900`,`text-green-900`,`text-green-900`,`text-white`,`text-white`,`text-white`],darkText:[`dark:text-green-100`,`dark:text-green-100`,`dark:text-green-100`,`dark:text-white`,`dark:text-white`,`dark:text-white`]},purple:{light:[`bg-purple-50`,`bg-purple-100`,`bg-purple-200`,`bg-purple-300`,`bg-purple-400`,`bg-purple-500`],dark:[`dark:bg-purple-950`,`dark:bg-purple-900`,`dark:bg-purple-800`,`dark:bg-purple-700`,`dark:bg-purple-600`,`dark:bg-purple-500`],text:[`text-purple-900`,`text-purple-900`,`text-purple-900`,`text-white`,`text-white`,`text-white`],darkText:[`dark:text-purple-100`,`dark:text-purple-100`,`dark:text-purple-100`,`dark:text-white`,`dark:text-white`,`dark:text-white`]},orange:{light:[`bg-orange-50`,`bg-orange-100`,`bg-orange-200`,`bg-orange-300`,`bg-orange-400`,`bg-orange-500`],dark:[`dark:bg-orange-950`,`dark:bg-orange-900`,`dark:bg-orange-800`,`dark:bg-orange-700`,`dark:bg-orange-600`,`dark:bg-orange-500`],text:[`text-orange-900`,`text-orange-900`,`text-orange-900`,`text-white`,`text-white`,`text-white`],darkText:[`dark:text-orange-100`,`dark:text-orange-100`,`dark:text-orange-100`,`dark:text-white`,`dark:text-white`,`dark:text-white`]}},s={low:`bg-gray-100 dark:bg-gray-800 text-gray-600 dark:text-gray-400`,medium:`bg-blue-100 dark:bg-blue-900 text-blue-600 dark:text-blue-400`,high:`bg-orange-100 dark:bg-orange-900 text-orange-600 dark:text-orange-400`,critical:`bg-red-100 dark:bg-red-900 text-red-600 dark:text-red-400`};function c(e,t){return`${e}:${t}`}function l(e,t=100){if(e===0)return 0;let n=e/t*100;return n<=20?1:n<=40?2:n<=60?3:n<=80?4:5}function u(e,t,n){return t.reduce((t,r)=>{let i=c(e,r.id);return t+(n.get(i)||0)},0)}function d(e,t,n){return t.reduce((t,r)=>{let i=c(r.id,e);return t+(n.get(i)||0)},0)}function f(e,t,n,r){let i=0,a=0,o=0,s=0,c=0;e.forEach(e=>{let l=u(e.id,t,n);i+=l;let d=e.capacity||r;l===0?c++:l>d?a++:l===d?s++:o++});let l=e.length*t.length,d=l>0?i/l:0,f=e.reduce((e,t)=>e+(t.capacity||r),0),p=f>0?Math.min(100,i/f*100):0;return{totalAllocations:i,averageAllocation:d,overAllocatedCount:a,underAllocatedCount:o,fullyAllocatedCount:s,unallocatedCount:c,utilizationEfficiency:p}}function p({resources:e,consumers:t,initialAllocations:r=[],overAllocationThreshold:i=100,onAllocationChange:a}){let[o,s]=n.useState(()=>{let e=new Map;return r.forEach(t=>{let n=c(t.resourceId,t.consumerId);e.set(n,t.value)}),e}),[l,p]=n.useState(null),[m,h]=n.useState({field:`name`,direction:`asc`}),[g,_]=n.useState({field:`name`,direction:`asc`}),[v,y]=n.useState(`all`),[b,x]=n.useState(``),S=n.useRef(r),C=n.useCallback((e,t,n)=>{let r=c(e,t),i=Math.max(0,n);s(e=>{let t=new Map(e);return i===0?t.delete(r):t.set(r,i),t}),a?.(e,t,i)},[a]),w=n.useCallback((e,t)=>{let n=c(e,t);return o.get(n)||0},[o]),T=n.useCallback(e=>u(e,t,o),[t,o]),E=n.useCallback(t=>d(t,e,o),[e,o]),D=n.useCallback(t=>{let n=e.find(e=>e.id===t)?.capacity||i;return T(t)>n},[e,T,i]);return{allocations:o,setAllocation:C,getAllocation:w,getRowTotal:T,getColumnTotal:E,isOverAllocated:D,getSummary:n.useCallback(()=>f(e,t,o,i),[e,t,o,i]),clearAll:n.useCallback(()=>{s(new Map)},[]),reset:n.useCallback(()=>{let e=new Map;S.current.forEach(t=>{let n=c(t.resourceId,t.consumerId);e.set(n,t.value)}),s(e)},[]),exportAllocations:n.useCallback(()=>{let e=[];return o.forEach((t,n)=>{let[r,i]=n.split(`:`);e.push({resourceId:r,consumerId:i,value:t})}),e},[o]),importAllocations:n.useCallback(e=>{let t=new Map;e.forEach(e=>{let n=c(e.resourceId,e.consumerId);t.set(n,e.value)}),s(t)},[]),selectedCell:l,setSelectedCell:p,rowSort:m,setRowSort:h,columnSort:g,setColumnSort:_,filterMode:v,setFilterMode:y,searchQuery:b,setSearchQuery:x,filteredResources:n.useMemo(()=>{let t=[...e];if(b){let e=b.toLowerCase();t=t.filter(t=>t.name.toLowerCase().includes(e)||t.category?.toLowerCase().includes(e))}switch(v){case`over-allocated`:t=t.filter(e=>D(e.id));break;case`under-allocated`:t=t.filter(e=>{let t=T(e.id),n=e.capacity||i;return t>0&&t<n});break;case`unallocated`:t=t.filter(e=>T(e.id)===0);break}return t.sort((e,t)=>{let n=0;switch(m.field){case`name`:n=e.name.localeCompare(t.name);break;case`total`:n=T(e.id)-T(t.id);break}return m.direction===`asc`?n:-n}),t},[e,b,v,m,D,T,i]),sortedConsumers:n.useMemo(()=>{let e=[...t];return e.sort((e,t)=>{let n=0;switch(g.field){case`name`:n=e.name.localeCompare(t.name);break;case`total`:n=E(e.id)-E(t.id);break}return g.direction===`asc`?n:-n}),e},[t,g,E])}}function m({value:e,isSelected:s,isEditable:c,enableDrag:u,isOverAllocated:d,colorScheme:f,size:p,onSelect:m,onChange:h,onDragStart:g,onDrag:_,onDragEnd:v}){let[y,b]=n.useState(e.toString()),[x,S]=n.useState(!1),C=n.useRef(0),w=n.useRef(null),T=a[p],E=o[f],D=l(e);n.useEffect(()=>{b(e.toString())},[e]),n.useEffect(()=>{s&&w.current&&(w.current.focus(),w.current.select())},[s]);let O=t=>{t.key===`Enter`?(h(Math.max(0,parseInt(y)||0)),m()):t.key===`Escape`&&(b(e.toString()),m())},k=()=>{let t=Math.max(0,parseInt(y)||0);t!==e&&h(t)},A=t=>{!u||!c||(S(!0),C.current=t.clientY,g(e))},j=n.useCallback(e=>{x&&_(C.current-e.clientY)},[x,_]),M=n.useCallback(()=>{x&&(S(!1),v())},[x,v]);return n.useEffect(()=>{if(x)return window.addEventListener(`mousemove`,j),window.addEventListener(`mouseup`,M),()=>{window.removeEventListener(`mousemove`,j),window.removeEventListener(`mouseup`,M)}},[x,j,M]),(0,i.jsxs)(`div`,{className:t.cn(`relative flex items-center justify-center border border-border/50 transition-all duration-200`,T.cell,T.padding,E.light[D],E.dark[D],E.text[D],E.darkText[D],c&&`cursor-pointer hover:ring-2 hover:ring-primary/50`,s&&`ring-2 ring-primary z-10`,x&&`cursor-ns-resize`,d&&e>0&&`ring-2 ring-red-500 ring-inset`),onClick:c&&!s?m:void 0,onMouseDown:A,children:[s&&c?(0,i.jsx)(`input`,{ref:w,type:`number`,min:`0`,max:`200`,value:y,onChange:e=>b(e.target.value),onKeyDown:O,onBlur:k,"aria-label":`Allocation value (percent)`,className:t.cn(`w-full h-full text-center bg-transparent outline-none`,T.text,`font-medium tabular-nums`,`[appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none`)}):(0,i.jsx)(`span`,{className:t.cn(T.text,`font-medium tabular-nums select-none`),children:e>0?`${e}%`:`-`}),u&&c&&!s&&(0,i.jsx)(`div`,{className:`absolute bottom-0.5 left-1/2 -translate-x-1/2 opacity-0 group-hover:opacity-50 transition-opacity`,children:(0,i.jsx)(r.GripHorizontal,{className:t.cn(T.icon,`text-current`)})})]})}function h({label:e,subtitle:n,priority:o,isColumn:c,isSortable:l,sortDirection:u,size:d,onSort:f}){let p=a[d];return(0,i.jsxs)(`div`,{className:t.cn(`flex flex-col items-center justify-center bg-muted/50 border border-border/50`,p.header,p.padding,c&&`min-w-max`,l&&`cursor-pointer hover:bg-muted transition-colors`),onClick:f,children:[(0,i.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,i.jsx)(`span`,{className:t.cn(p.headerText,`font-medium truncate max-w-full`,c&&`writing-mode-vertical-rl rotate-180`),style:c?{writingMode:`vertical-rl`}:void 0,title:e,children:e}),l&&u&&(u===`asc`?(0,i.jsx)(r.ChevronUp,{className:p.icon}):(0,i.jsx)(r.ChevronDown,{className:p.icon}))]}),n&&(0,i.jsx)(`span`,{className:t.cn(`text-muted-foreground`,d===`sm`?`text-[10px]`:`text-xs`),children:n}),o&&(0,i.jsx)(`span`,{className:t.cn(`mt-0.5 px-1 rounded text-[10px] font-medium`,s[o]),children:o})]})}function g({value:e,isOverAllocated:n,maxValue:o=100,size:s,isRow:c}){let l=a[s],u=e/o*100;return(0,i.jsxs)(`div`,{className:t.cn(`flex flex-col items-center justify-center border border-border/50`,c?`bg-muted/30`:`bg-muted/50`,l.cell,l.padding,n&&`bg-red-100 dark:bg-red-900/30`),children:[(0,i.jsxs)(`span`,{className:t.cn(l.text,`font-bold tabular-nums`,n?`text-red-600 dark:text-red-400`:`text-foreground`),children:[e,`%`]}),c&&(0,i.jsx)(`div`,{className:`w-full mt-1 h-1 bg-muted rounded-full overflow-hidden`,children:(0,i.jsx)(`div`,{className:t.cn(`h-full rounded-full transition-all duration-300`,n?`bg-red-500`:u>=80?`bg-yellow-500`:`bg-green-500`),style:{width:`${Math.min(u,100)}%`}})}),n&&(0,i.jsx)(r.AlertTriangle,{className:t.cn(l.icon,`text-red-500 mt-0.5`)})]})}function _({summary:e,size:n}){let r=a[n];return(0,i.jsx)(`div`,{className:`flex flex-wrap gap-4 p-4 bg-muted/30 rounded-lg border border-border`,children:[{label:`Total Allocated`,value:`${e.totalAllocations.toFixed(0)}%`,color:`text-foreground`},{label:`Avg per Cell`,value:`${e.averageAllocation.toFixed(1)}%`,color:`text-foreground`},{label:`Utilization`,value:`${e.utilizationEfficiency.toFixed(1)}%`,color:`text-blue-600`},{label:`Over-allocated`,value:e.overAllocatedCount.toString(),color:e.overAllocatedCount>0?`text-red-600`:`text-green-600`},{label:`Fully Allocated`,value:e.fullyAllocatedCount.toString(),color:`text-green-600`},{label:`Under-allocated`,value:e.underAllocatedCount.toString(),color:`text-yellow-600`},{label:`Unallocated`,value:e.unallocatedCount.toString(),color:`text-muted-foreground`}].map(e=>(0,i.jsxs)(`div`,{className:`flex flex-col`,children:[(0,i.jsx)(`span`,{className:t.cn(`text-muted-foreground`,r.headerText),children:e.label}),(0,i.jsx)(`span`,{className:t.cn(`font-bold tabular-nums`,r.text,e.color),children:e.value})]},e.label))})}function v({resources:e,consumers:o,allocations:s=[],editable:c=!0,enableDrag:l=!0,showRowTotals:u=!0,showColumnTotals:d=!0,showSummary:f=!0,showFilters:v=!0,showSearch:y=!0,overAllocationThreshold:b=100,cellSize:x=`md`,colorScheme:S=`blue`,onAllocationChange:C,onSave:w,formatValue:T,className:E}){let D=p({resources:e,consumers:o,initialAllocations:s,overAllocationThreshold:b,onAllocationChange:C}),[O,k]=n.useState(0),[A,j]=n.useState(null),M=a[x],N=(e,t,n)=>{k(n),j({resourceId:e,consumerId:t})},P=(e,t,n)=>{if(!A)return;let r=Math.max(0,Math.min(200,O+Math.round(n/5)));D.setAllocation(e,t,r)},F=()=>{j(null)},I=()=>{w?.(D.exportAllocations())},L=()=>{D.setRowSort({field:D.rowSort.field===`name`?`total`:`name`,direction:D.rowSort.field===D.rowSort.field&&D.rowSort.direction===`asc`?`desc`:`asc`})},R=()=>{D.setColumnSort({field:D.columnSort.field===`name`?`total`:`name`,direction:D.columnSort.field===D.columnSort.field&&D.columnSort.direction===`asc`?`desc`:`asc`})},z=D.getSummary();return(0,i.jsxs)(`div`,{className:t.cn(`space-y-4`,E),children:[(v||y)&&(0,i.jsxs)(`div`,{className:`flex flex-wrap items-center gap-4`,children:[y&&(0,i.jsxs)(`div`,{className:`relative`,children:[(0,i.jsx)(r.Search,{className:t.cn(M.icon,`absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground`)}),(0,i.jsx)(`input`,{type:`text`,placeholder:`Search resources...`,"aria-label":`Search resources`,value:D.searchQuery,onChange:e=>D.setSearchQuery(e.target.value),className:t.cn(`pl-10 pr-4 py-2 border border-border rounded-lg bg-background`,M.text,`focus:outline-none focus:ring-2 focus:ring-primary/50`)}),D.searchQuery&&(0,i.jsx)(`button`,{type:`button`,onClick:()=>D.setSearchQuery(``),className:`absolute right-3 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground`,children:(0,i.jsx)(r.X,{className:M.icon})})]}),v&&(0,i.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,i.jsx)(r.Filter,{className:t.cn(M.icon,`text-muted-foreground`)}),(0,i.jsx)(`div`,{className:`flex rounded-lg border border-border overflow-hidden`,children:[`all`,`over-allocated`,`under-allocated`,`unallocated`].map(e=>(0,i.jsx)(`button`,{type:`button`,onClick:()=>D.setFilterMode(e),className:t.cn(`px-3 py-1.5 transition-colors`,M.text,D.filterMode===e?`bg-primary text-primary-foreground`:`bg-background hover:bg-muted`),children:e===`all`?`All`:e===`over-allocated`?`Over`:e===`under-allocated`?`Under`:`None`},e))})]}),(0,i.jsxs)(`div`,{className:`flex items-center gap-2 ml-auto`,children:[(0,i.jsxs)(`button`,{type:`button`,onClick:L,className:t.cn(`flex items-center gap-1 px-3 py-1.5 border border-border rounded-lg`,`bg-background hover:bg-muted transition-colors`,M.text),children:[(0,i.jsx)(r.ArrowUpDown,{className:M.icon}),`Rows: `,D.rowSort.field]}),(0,i.jsxs)(`button`,{type:`button`,onClick:R,className:t.cn(`flex items-center gap-1 px-3 py-1.5 border border-border rounded-lg`,`bg-background hover:bg-muted transition-colors`,M.text),children:[(0,i.jsx)(r.ArrowUpDown,{className:M.icon}),`Columns: `,D.columnSort.field]})]})]}),f&&(0,i.jsx)(_,{summary:z,size:x}),(0,i.jsx)(`div`,{className:`overflow-auto`,children:(0,i.jsxs)(`div`,{className:`inline-block min-w-full`,children:[(0,i.jsxs)(`div`,{className:`flex`,children:[(0,i.jsx)(`div`,{className:t.cn(`flex items-center justify-center bg-muted/50 border border-border/50 sticky left-0 z-20`,M.header,M.padding),children:(0,i.jsx)(r.Percent,{className:t.cn(M.icon,`text-muted-foreground`)})}),D.sortedConsumers.map(e=>(0,i.jsx)(h,{label:e.name,priority:e.priority,isColumn:!0,isSortable:!0,sortDirection:D.columnSort.field===`name`?D.columnSort.direction:null,size:x,onSort:R},e.id)),u&&(0,i.jsx)(`div`,{className:t.cn(`flex items-center justify-center bg-muted/50 border border-border/50`,M.header,M.padding),children:(0,i.jsx)(`span`,{className:t.cn(M.headerText,`font-bold`),children:`Total`})})]}),D.filteredResources.map(e=>{let t=D.getRowTotal(e.id),n=e.capacity||b,r=t>n;return(0,i.jsxs)(`div`,{className:`flex group`,children:[(0,i.jsx)(h,{label:e.name,subtitle:e.category,isSortable:!0,sortDirection:D.rowSort.field===`name`?D.rowSort.direction:null,size:x,onSort:L}),D.sortedConsumers.map(t=>{let n=D.getAllocation(e.id,t.id),a=D.selectedCell?.resourceId===e.id&&D.selectedCell?.consumerId===t.id;return(0,i.jsx)(m,{resourceId:e.id,consumerId:t.id,value:n,isSelected:a,isEditable:c,enableDrag:l,isOverAllocated:r,colorScheme:S,size:x,onSelect:()=>D.setSelectedCell(a?null:{resourceId:e.id,consumerId:t.id}),onChange:n=>D.setAllocation(e.id,t.id,n),onDragStart:n=>N(e.id,t.id,n),onDrag:n=>P(e.id,t.id,n),onDragEnd:F},`${e.id}-${t.id}`)}),u&&(0,i.jsx)(g,{value:t,isOverAllocated:r,maxValue:n,size:x,isRow:!0})]},e.id)}),d&&(0,i.jsxs)(`div`,{className:`flex`,children:[(0,i.jsx)(`div`,{className:t.cn(`flex items-center justify-center bg-muted/50 border border-border/50`,M.header,M.padding),children:(0,i.jsx)(`span`,{className:t.cn(M.headerText,`font-bold`),children:`Total`})}),D.sortedConsumers.map(e=>(0,i.jsx)(g,{value:D.getColumnTotal(e.id),size:x},`total-${e.id}`)),u&&(0,i.jsxs)(`div`,{className:t.cn(`flex items-center justify-center bg-muted border border-border/50 font-bold`,M.cell,M.padding,M.text),children:[z.totalAllocations.toFixed(0),`%`]})]})]})}),c&&w&&(0,i.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,i.jsx)(`button`,{type:`button`,onClick:D.reset,className:t.cn(`px-4 py-2 border border-border rounded-lg`,`bg-background hover:bg-muted transition-colors`,M.text),children:`Reset`}),(0,i.jsx)(`button`,{type:`button`,onClick:D.clearAll,className:t.cn(`px-4 py-2 border border-border rounded-lg`,`bg-background hover:bg-muted transition-colors`,M.text),children:`Clear All`}),(0,i.jsx)(`button`,{type:`button`,onClick:I,className:t.cn(`px-4 py-2 rounded-lg`,`bg-primary text-primary-foreground hover:bg-primary/90 transition-colors`,M.text),children:`Save Allocations`})]}),(0,i.jsx)(`style`,{children:`
|
|
2
2
|
@keyframes allocation-pulse {
|
|
3
3
|
0%, 100% { opacity: 1; }
|
|
4
4
|
50% { opacity: 0.7; }
|
|
@@ -16,4 +16,4 @@
|
|
|
16
16
|
.over-allocated-cell {
|
|
17
17
|
animation: over-allocation-warning 2s ease-in-out infinite;
|
|
18
18
|
}
|
|
19
|
-
`})]})}exports.default=v,exports.useAllocationMatrix=p;
|
|
19
|
+
`})]})}exports.WakaAllocationMatrix=v,exports.default=v,exports.useAllocationMatrix=p;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";"use client";const e=require(
|
|
1
|
+
"use client";"use client";const e=require("../../_virtual/_rolldown/runtime.cjs.js"),t=require("../../utils/cn.cjs.js");let n=require("react");n=e.__toESM(n);let r=require("lucide-react"),i=require("react/jsx-runtime");var a={pending:{icon:r.Clock,color:`text-amber-600`,bgColor:`bg-amber-100 dark:bg-amber-900/30`,borderColor:`border-amber-300 dark:border-amber-700`,label:`Pending`},approved:{icon:r.Check,color:`text-green-600`,bgColor:`bg-green-100 dark:bg-green-900/30`,borderColor:`border-green-300 dark:border-green-700`,label:`Approved`},rejected:{icon:r.X,color:`text-red-600`,bgColor:`bg-red-100 dark:bg-red-900/30`,borderColor:`border-red-300 dark:border-red-700`,label:`Rejected`},skipped:{icon:r.SkipForward,color:`text-gray-500`,bgColor:`bg-gray-100 dark:bg-gray-800`,borderColor:`border-gray-300 dark:border-gray-600`,label:`Skipped`}},o={sm:{avatar:`h-8 w-8`,avatarText:`text-xs`,icon:`h-3 w-3`,statusIcon:`h-4 w-4`,name:`text-xs`,role:`text-[10px]`,time:`text-[10px]`,comment:`text-xs`,button:`px-2 py-1 text-xs`,connector:`w-6`,connectorVertical:`h-6`,hoverCard:`w-48`},md:{avatar:`h-10 w-10`,avatarText:`text-sm`,icon:`h-4 w-4`,statusIcon:`h-5 w-5`,name:`text-sm`,role:`text-xs`,time:`text-xs`,comment:`text-sm`,button:`px-3 py-1.5 text-sm`,connector:`w-8`,connectorVertical:`h-8`,hoverCard:`w-56`},lg:{avatar:`h-12 w-12`,avatarText:`text-base`,icon:`h-5 w-5`,statusIcon:`h-6 w-6`,name:`text-base`,role:`text-sm`,time:`text-sm`,comment:`text-base`,button:`px-4 py-2 text-base`,connector:`w-10`,connectorVertical:`h-10`,hoverCard:`w-64`}};function s(e){let t=Math.floor((new Date().getTime()-e.getTime())/1e3);if(t<60)return`just now`;let n=Math.floor(t/60);if(n<60)return`${n}m ago`;let r=Math.floor(n/60);if(r<24)return`${r}h ago`;let i=Math.floor(r/24);if(i<7)return`${i}d ago`;let a=Math.floor(i/7);if(a<4)return`${a}w ago`;let o=Math.floor(i/30);return o<12?`${o}mo ago`:`${Math.floor(i/365)}y ago`}function c(e){return e.split(` `).map(e=>e[0]).join(``).toUpperCase().slice(0,2)}function l({approver:e,status:n,size:r,isCurrent:s}){let l=o[r],u=a[n],d=u.icon;return(0,i.jsxs)(`div`,{className:`relative`,children:[(0,i.jsx)(`div`,{className:t.cn(`relative rounded-full overflow-hidden border-2 transition-all duration-200`,l.avatar,s&&`ring-2 ring-primary ring-offset-2`,u.borderColor),children:e.avatar?(0,i.jsx)(`img`,{src:e.avatar,alt:e.name,className:`h-full w-full object-cover`}):(0,i.jsx)(`div`,{className:t.cn(`h-full w-full flex items-center justify-center bg-muted`,l.avatarText,`font-medium text-muted-foreground`),children:c(e.name)})}),(0,i.jsx)(`div`,{className:t.cn(`absolute -bottom-1 -right-1 rounded-full p-0.5`,u.bgColor,`border border-background`),children:(0,i.jsx)(d,{className:t.cn(l.icon,u.color)})})]})}function u({status:e,previousStatus:n,orientation:r,size:a}){let s=o[a],c=n===`approved`,l=n===`rejected`,u=c?`bg-green-400`:l?`bg-red-400`:`bg-gray-300 dark:bg-gray-600`;return r===`horizontal`?(0,i.jsxs)(`div`,{className:t.cn(`flex items-center`,s.connector),children:[(0,i.jsx)(`div`,{className:t.cn(`flex-1 h-0.5`,u)}),(0,i.jsx)(`div`,{className:t.cn(`h-0 w-0 border-t-4 border-b-4 border-l-4 border-transparent`,c?`border-l-green-400`:l?`border-l-red-400`:`border-l-gray-300 dark:border-l-gray-600`)})]}):(0,i.jsxs)(`div`,{className:t.cn(`flex flex-col items-center`,s.connectorVertical),children:[(0,i.jsx)(`div`,{className:t.cn(`flex-1 w-0.5`,u)}),(0,i.jsx)(`div`,{className:t.cn(`w-0 h-0 border-l-4 border-r-4 border-t-4 border-transparent`,c?`border-t-green-400`:l?`border-t-red-400`:`border-t-gray-300 dark:border-t-gray-600`)})]})}function d({step:e,size:l,showComments:u,isCurrentUser:d,onApprove:f,onReject:p,children:m}){let[h,g]=n.useState(!1),[_,v]=n.useState(``),[y,b]=n.useState(!1),x=o[l],S=a[e.status];return(0,i.jsxs)(`div`,{className:`relative`,onMouseEnter:()=>g(!0),onMouseLeave:()=>{y||g(!1)},children:[m,h&&(0,i.jsxs)(`div`,{className:t.cn(`absolute z-50 rounded-lg border bg-popover p-3 shadow-lg`,`animate-in fade-in-0 zoom-in-95`,x.hoverCard,`top-full left-1/2 -translate-x-1/2 mt-2`),onMouseEnter:()=>g(!0),onMouseLeave:()=>{y||g(!1)},children:[(0,i.jsx)(`div`,{className:`absolute -top-2 left-1/2 -translate-x-1/2 w-0 h-0 border-l-8 border-r-8 border-b-8 border-transparent border-b-popover`}),(0,i.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,i.jsx)(`div`,{className:t.cn(`rounded-full overflow-hidden flex-shrink-0`,x.avatar),children:e.approver.avatar?(0,i.jsx)(`img`,{src:e.approver.avatar,alt:e.approver.name,className:`h-full w-full object-cover`}):(0,i.jsx)(`div`,{className:t.cn(`h-full w-full flex items-center justify-center bg-muted`,x.avatarText,`font-medium text-muted-foreground`),children:c(e.approver.name)})}),(0,i.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,i.jsx)(`p`,{className:t.cn(`font-medium truncate`,x.name),children:e.approver.name}),e.approver.role&&(0,i.jsx)(`p`,{className:t.cn(`text-muted-foreground truncate`,x.role),children:e.approver.role})]})]}),(0,i.jsxs)(`div`,{className:`mt-2 flex items-center justify-between`,children:[(0,i.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,i.jsx)(S.icon,{className:t.cn(x.icon,S.color)}),(0,i.jsx)(`span`,{className:t.cn(x.role,S.color,`font-medium`),children:S.label})]}),e.timestamp&&(0,i.jsx)(`span`,{className:t.cn(`text-muted-foreground`,x.time),children:s(e.timestamp)})]}),u&&e.comment&&(0,i.jsx)(`div`,{className:`mt-2 p-2 rounded bg-muted/50`,children:(0,i.jsxs)(`div`,{className:`flex items-start gap-1.5`,children:[(0,i.jsx)(r.MessageSquare,{className:t.cn(x.icon,`text-muted-foreground mt-0.5`)}),(0,i.jsx)(`p`,{className:t.cn(`text-muted-foreground`,x.comment),children:e.comment})]})}),d&&e.status===`pending`&&(f||p)&&(0,i.jsx)(`div`,{className:`mt-3 pt-3 border-t`,children:y?(0,i.jsxs)(`div`,{className:`space-y-2`,children:[(0,i.jsx)(`textarea`,{value:_,onChange:e=>v(e.target.value),placeholder:`Add a comment (optional)`,className:t.cn(`w-full px-2 py-1.5 rounded border bg-background resize-none`,x.comment),rows:2,autoFocus:!0}),(0,i.jsxs)(`div`,{className:`flex gap-2`,children:[f&&(0,i.jsx)(`button`,{onClick:()=>{f?.(_||void 0),v(``),b(!1),g(!1)},className:t.cn(`flex-1 rounded font-medium transition-colors`,`bg-green-600 text-white hover:bg-green-700`,x.button),children:`Approve`}),p&&(0,i.jsx)(`button`,{onClick:()=>{p?.(_||void 0),v(``),b(!1),g(!1)},className:t.cn(`flex-1 rounded font-medium transition-colors`,`bg-red-600 text-white hover:bg-red-700`,x.button),children:`Reject`})]}),(0,i.jsx)(`button`,{onClick:()=>{b(!1),v(``)},className:t.cn(`w-full rounded font-medium transition-colors`,`text-muted-foreground hover:text-foreground`,x.button),children:`Cancel`})]}):(0,i.jsxs)(`div`,{className:`flex gap-2`,children:[f&&(0,i.jsxs)(`button`,{onClick:()=>b(!0),className:t.cn(`flex-1 rounded font-medium transition-colors`,`bg-green-600 text-white hover:bg-green-700`,x.button),children:[(0,i.jsx)(r.Check,{className:t.cn(x.icon,`inline-block mr-1`)}),`Approve`]}),p&&(0,i.jsxs)(`button`,{onClick:()=>b(!0),className:t.cn(`flex-1 rounded font-medium transition-colors`,`bg-red-600 text-white hover:bg-red-700`,x.button),children:[(0,i.jsx)(r.X,{className:t.cn(x.icon,`inline-block mr-1`)}),`Reject`]})]})})]})]})}function f({step:e,index:n,isLast:r,previousStatus:c,size:f,orientation:p,showComments:m,isCurrentUser:h,isCurrent:g,onApprove:_,onReject:v}){let y=o[f];return p===`horizontal`?(0,i.jsxs)(`div`,{className:`flex items-center`,children:[(0,i.jsx)(d,{step:e,size:f,showComments:m,isCurrentUser:h,onApprove:_,onReject:v,children:(0,i.jsxs)(`div`,{className:`flex flex-col items-center gap-1`,children:[(0,i.jsx)(l,{approver:e.approver,status:e.status,size:f,isCurrent:g}),(0,i.jsx)(`span`,{className:t.cn(`text-center max-w-[80px] truncate`,y.name,g?`text-foreground font-medium`:`text-muted-foreground`),children:e.approver.name.split(` `)[0]})]})}),!r&&(0,i.jsx)(u,{status:e.status,previousStatus:e.status,orientation:`horizontal`,size:f})]}):(0,i.jsxs)(`div`,{className:`flex`,children:[(0,i.jsxs)(`div`,{className:`flex flex-col items-center`,children:[(0,i.jsx)(d,{step:e,size:f,showComments:m,isCurrentUser:h,onApprove:_,onReject:v,children:(0,i.jsx)(l,{approver:e.approver,status:e.status,size:f,isCurrent:g})}),!r&&(0,i.jsx)(u,{status:e.status,previousStatus:e.status,orientation:`vertical`,size:f})]}),(0,i.jsxs)(`div`,{className:`ml-3 pb-4`,children:[(0,i.jsx)(`p`,{className:t.cn(`font-medium`,y.name,g?`text-foreground`:`text-muted-foreground`),children:e.approver.name}),e.approver.role&&(0,i.jsx)(`p`,{className:t.cn(`text-muted-foreground`,y.role),children:e.approver.role}),(0,i.jsxs)(`div`,{className:`flex items-center gap-2 mt-1`,children:[(0,i.jsx)(`span`,{className:t.cn(y.role,a[e.status].color,`font-medium`),children:a[e.status].label}),e.timestamp&&(0,i.jsx)(`span`,{className:t.cn(`text-muted-foreground`,y.time),children:s(e.timestamp)})]}),m&&e.comment&&(0,i.jsx)(`div`,{className:`mt-2 p-2 rounded bg-muted/50 max-w-xs`,children:(0,i.jsxs)(`p`,{className:t.cn(`text-muted-foreground`,y.comment),children:[`"`,e.comment,`"`]})})]})]})}function p({steps:e,currentUserId:r,onApprove:a,onReject:o,variant:s=`horizontal`,size:c=`md`,showComments:l=!1,className:u}){let d=n.useMemo(()=>e.findIndex(e=>e.status===`pending`),[e]);return(0,i.jsx)(`div`,{className:t.cn(s===`horizontal`?`flex items-start overflow-x-auto py-4`:`flex flex-col`,u),role:`list`,"aria-label":`Approval chain`,children:e.map((t,n)=>{let u=r===t.approver.id,p=n===d,m=n>0?e[n-1].status:void 0;return(0,i.jsx)(f,{step:t,index:n,isLast:n===e.length-1,previousStatus:m,size:c,orientation:s,showComments:l,isCurrentUser:u,isCurrent:p,onApprove:u&&t.status===`pending`&&a?e=>a(t.id,e):void 0,onReject:u&&t.status===`pending`&&o?e=>o(t.id,e):void 0},t.id)})})}exports.WakaApprovalChain=p,exports.default=p;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";"use client";const e=require(
|
|
1
|
+
"use client";"use client";const e=require("../../_virtual/_rolldown/runtime.cjs.js"),t=require("../../utils/cn.cjs.js"),n=require("../badge/index.cjs.js"),r=require("../button/index.cjs.js"),i=require("../input/index.cjs.js"),a=require("../scroll-area/index.cjs.js"),o=require("../tooltip/index.cjs.js");let s=require("react");s=e.__toESM(s);let c=require("lucide-react"),l=require("react/jsx-runtime");var u={archive:{icon:c.FileArchive,color:`text-orange-500`},binary:{icon:c.Package,color:`text-blue-500`},log:{icon:c.FileText,color:`text-gray-500`},report:{icon:c.FileText,color:`text-green-500`},image:{icon:c.Image,color:`text-purple-500`},other:{icon:c.File,color:`text-muted-foreground`}};function d(e){if(e===0)return`0 B`;let t=1024,n=[`B`,`KB`,`MB`,`GB`],r=Math.floor(Math.log(e)/Math.log(t));return parseFloat((e/t**r).toFixed(2))+` `+n[r]}function f(e){return e.toLocaleDateString(`fr-FR`,{day:`2-digit`,month:`short`,hour:`2-digit`,minute:`2-digit`})}function p(e){if(!e)return!1;let t=e.getTime()-Date.now();return t>0&&t<1440*60*1e3}function m({artifact:e,onDownload:i,onDelete:a,onView:m,showExpiration:h,allowDelete:g}){let[_,v]=s.useState(!1),y=u[e.type],b=y.icon,x=p(e.expiresAt);return(0,l.jsxs)(`div`,{className:`flex items-center gap-4 p-3 border-b hover:bg-muted/30 transition-colors`,children:[(0,l.jsx)(b,{className:t.cn(`h-8 w-8 shrink-0`,y.color)}),(0,l.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,l.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,l.jsx)(`span`,{className:`font-medium truncate cursor-pointer hover:text-primary`,onClick:()=>m?.(e),children:e.name}),(0,l.jsx)(n.Badge,{variant:`outline`,className:`text-xs capitalize`,children:e.type})]}),(0,l.jsxs)(`div`,{className:`flex items-center gap-3 text-xs text-muted-foreground mt-1`,children:[(0,l.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,l.jsx)(c.HardDrive,{className:`h-3 w-3`}),d(e.size)]}),(0,l.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,l.jsx)(c.Clock,{className:`h-3 w-3`}),f(e.createdAt)]}),h&&e.expiresAt&&(0,l.jsxs)(`span`,{className:t.cn(`flex items-center gap-1`,x&&`text-yellow-500`),children:[`Expires: `,f(e.expiresAt)]})]})]}),e.sha256&&(0,l.jsx)(o.TooltipProvider,{children:(0,l.jsxs)(o.Tooltip,{children:[(0,l.jsx)(o.TooltipTrigger,{asChild:!0,children:(0,l.jsxs)(`button`,{className:`hidden md:flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground`,onClick:()=>{e.sha256&&(navigator.clipboard.writeText(e.sha256),v(!0),setTimeout(()=>v(!1),2e3))},children:[_?(0,l.jsx)(c.CheckCircle2,{className:`h-3 w-3 text-green-500`}):(0,l.jsx)(c.Copy,{className:`h-3 w-3`}),(0,l.jsxs)(`code`,{className:`truncate max-w-[100px]`,children:[e.sha256.slice(0,12),`...`]})]})}),(0,l.jsx)(o.TooltipContent,{children:(0,l.jsxs)(`div`,{className:`space-y-1`,children:[(0,l.jsx)(`div`,{className:`text-xs font-medium`,children:`SHA256`}),(0,l.jsx)(`code`,{className:`text-xs break-all`,children:e.sha256})]})})]})}),(0,l.jsxs)(`div`,{className:`flex items-center gap-1 shrink-0`,children:[e.downloadUrl&&(0,l.jsx)(o.TooltipProvider,{children:(0,l.jsxs)(o.Tooltip,{children:[(0,l.jsx)(o.TooltipTrigger,{asChild:!0,children:(0,l.jsx)(r.Button,{variant:`ghost`,size:`sm`,className:`h-8 w-8 p-0`,onClick:()=>i?.(e),children:(0,l.jsx)(c.Download,{className:`h-4 w-4`})})}),(0,l.jsx)(o.TooltipContent,{children:`Download`})]})}),(0,l.jsx)(o.TooltipProvider,{children:(0,l.jsxs)(o.Tooltip,{children:[(0,l.jsx)(o.TooltipTrigger,{asChild:!0,children:(0,l.jsx)(r.Button,{variant:`ghost`,size:`sm`,className:`h-8 w-8 p-0`,onClick:()=>m?.(e),children:(0,l.jsx)(c.ExternalLink,{className:`h-4 w-4`})})}),(0,l.jsx)(o.TooltipContent,{children:`View Details`})]})}),g&&(0,l.jsx)(o.TooltipProvider,{children:(0,l.jsxs)(o.Tooltip,{children:[(0,l.jsx)(o.TooltipTrigger,{asChild:!0,children:(0,l.jsx)(r.Button,{variant:`ghost`,size:`sm`,className:`h-8 w-8 p-0 text-destructive hover:text-destructive`,onClick:()=>a?.(e),children:(0,l.jsx)(c.Trash2,{className:`h-4 w-4`})})}),(0,l.jsx)(o.TooltipContent,{children:`Delete`})]})})]})]})}function h({artifacts:e,onDownload:o,onDelete:f,onView:p,title:h=`Artifacts`,showExpiration:g=!0,allowDelete:_=!1,className:v}){let[y,b]=s.useState(``),[x,S]=s.useState(`all`),C=s.useMemo(()=>e.filter(e=>x!==`all`&&e.type!==x?!1:y?e.name.toLowerCase().includes(y.toLowerCase()):!0),[e,x,y]),w=e.reduce((e,t)=>e+t.size,0),T=s.useMemo(()=>e.reduce((e,t)=>(e[t.type]=(e[t.type]||0)+1,e),{}),[e]);return(0,l.jsxs)(`div`,{className:t.cn(`flex flex-col border rounded-lg bg-background`,v),children:[(0,l.jsxs)(`div`,{className:`flex items-center justify-between gap-4 p-3 border-b`,children:[(0,l.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,l.jsx)(c.Package,{className:`h-5 w-5`}),(0,l.jsx)(`h3`,{className:`font-semibold`,children:h}),(0,l.jsx)(n.Badge,{variant:`secondary`,children:e.length})]}),(0,l.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-muted-foreground`,children:[(0,l.jsx)(c.HardDrive,{className:`h-4 w-4`}),`Total: `,d(w)]})]}),(0,l.jsxs)(`div`,{className:`flex items-center gap-2 p-2 border-b bg-muted/30`,children:[(0,l.jsxs)(`div`,{className:`relative flex-1 max-w-sm`,children:[(0,l.jsx)(c.Search,{className:`absolute left-2.5 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground`}),(0,l.jsx)(i.Input,{placeholder:`Search artifacts...`,value:y,onChange:e=>b(e.target.value),className:`pl-8 h-8`})]}),(0,l.jsxs)(`div`,{className:`flex items-center gap-1 flex-wrap`,children:[(0,l.jsx)(r.Button,{variant:x===`all`?`default`:`ghost`,size:`sm`,className:`h-7 text-xs`,onClick:()=>S(`all`),children:`All`}),Object.entries(T).map(([e,n])=>{let i=u[e],a=i.icon;return(0,l.jsxs)(r.Button,{variant:x===e?`default`:`ghost`,size:`sm`,className:`h-7 text-xs`,onClick:()=>S(e),children:[(0,l.jsx)(a,{className:t.cn(`h-3 w-3 mr-1`,i.color)}),e,` (`,n,`)`]},e)})]})]}),(0,l.jsx)(a.ScrollArea,{className:`flex-1 max-h-[400px]`,children:C.length===0?(0,l.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-32 text-muted-foreground`,children:[(0,l.jsx)(c.Folder,{className:`h-8 w-8 mb-2`}),(0,l.jsx)(`span`,{children:`No artifacts found`})]}):C.map(e=>(0,l.jsx)(m,{artifact:e,onDownload:o,onDelete:f,onView:p,showExpiration:g,allowDelete:_},e.id))})]})}var g=[{id:`1`,name:`build-linux-x64.tar.gz`,type:`archive`,size:45*1024*1024,createdAt:new Date(Date.now()-2*36e5),expiresAt:new Date(Date.now()+168*36e5),downloadUrl:`#`,sha256:`a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6`},{id:`2`,name:`build-darwin-arm64.tar.gz`,type:`archive`,size:42*1024*1024,createdAt:new Date(Date.now()-2*36e5),expiresAt:new Date(Date.now()+168*36e5),downloadUrl:`#`,sha256:`b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6a1`},{id:`3`,name:`test-results.xml`,type:`report`,size:256*1024,createdAt:new Date(Date.now()-2*36e5),downloadUrl:`#`},{id:`4`,name:`coverage-report.html`,type:`report`,size:1.2*1024*1024,createdAt:new Date(Date.now()-2*36e5),downloadUrl:`#`},{id:`5`,name:`build.log`,type:`log`,size:512*1024,createdAt:new Date(Date.now()-2*36e5),downloadUrl:`#`},{id:`6`,name:`docker-image.tar`,type:`image`,size:250*1024*1024,createdAt:new Date(Date.now()-2*36e5),expiresAt:new Date(Date.now()+12*36e5),downloadUrl:`#`,sha256:`c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6a1b2`}];exports.WakaArtifactList=h,exports.defaultArtifacts=g;
|
|
@@ -44,7 +44,7 @@ function D(e) {
|
|
|
44
44
|
"MB",
|
|
45
45
|
"GB"
|
|
46
46
|
], r = Math.floor(Math.log(e) / Math.log(t));
|
|
47
|
-
return parseFloat((e / t **
|
|
47
|
+
return parseFloat((e / t ** r).toFixed(2)) + " " + n[r];
|
|
48
48
|
}
|
|
49
49
|
function O(e) {
|
|
50
50
|
return e.toLocaleDateString("fr-FR", {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use client";"use client";const e=require(`../../_virtual/_rolldown/runtime.cjs.js`),t=require(`../../utils/cn.cjs.js`),n=require(`../../utils/local-date.cjs.js`);let r=require(`react`);r=e.__toESM(r);let i=require(`lucide-react`),a=require(`react/jsx-runtime`);var o={login:{icon:i.LogIn,color:`text-green-600 dark:text-green-400`,bgColor:`bg-green-100 dark:bg-green-900/30`,label:`Login`},logout:{icon:i.LogOut,color:`text-gray-600 dark:text-gray-400`,bgColor:`bg-gray-100 dark:bg-gray-900/30`,label:`Logout`},create:{icon:i.Plus,color:`text-blue-600 dark:text-blue-400`,bgColor:`bg-blue-100 dark:bg-blue-900/30`,label:`Create`},update:{icon:i.Edit,color:`text-amber-600 dark:text-amber-400`,bgColor:`bg-amber-100 dark:bg-amber-900/30`,label:`Update`},delete:{icon:i.Trash2,color:`text-red-600 dark:text-red-400`,bgColor:`bg-red-100 dark:bg-red-900/30`,label:`Delete`},view:{icon:i.Eye,color:`text-purple-600 dark:text-purple-400`,bgColor:`bg-purple-100 dark:bg-purple-900/30`,label:`View`},export:{icon:i.Download,color:`text-indigo-600 dark:text-indigo-400`,bgColor:`bg-indigo-100 dark:bg-indigo-900/30`,label:`Export`},import:{icon:i.Upload,color:`text-indigo-600 dark:text-indigo-400`,bgColor:`bg-indigo-100 dark:bg-indigo-900/30`,label:`Import`},settings_change:{icon:i.Settings,color:`text-slate-600 dark:text-slate-400`,bgColor:`bg-slate-100 dark:bg-slate-900/30`,label:`Settings`},permission_change:{icon:i.Shield,color:`text-orange-600 dark:text-orange-400`,bgColor:`bg-orange-100 dark:bg-orange-900/30`,label:`Permission`},password_change:{icon:i.Key,color:`text-yellow-600 dark:text-yellow-400`,bgColor:`bg-yellow-100 dark:bg-yellow-900/30`,label:`Password`},user_invite:{icon:i.UserPlus,color:`text-teal-600 dark:text-teal-400`,bgColor:`bg-teal-100 dark:bg-teal-900/30`,label:`Invite`},user_remove:{icon:i.UserMinus,color:`text-rose-600 dark:text-rose-400`,bgColor:`bg-rose-100 dark:bg-rose-900/30`,label:`Remove`},api_key_create:{icon:i.Key,color:`text-cyan-600 dark:text-cyan-400`,bgColor:`bg-cyan-100 dark:bg-cyan-900/30`,label:`API Key Create`},api_key_revoke:{icon:i.Key,color:`text-red-600 dark:text-red-400`,bgColor:`bg-red-100 dark:bg-red-900/30`,label:`API Key Revoke`},mfa_enable:{icon:i.Lock,color:`text-emerald-600 dark:text-emerald-400`,bgColor:`bg-emerald-100 dark:bg-emerald-900/30`,label:`MFA Enable`},mfa_disable:{icon:i.Unlock,color:`text-orange-600 dark:text-orange-400`,bgColor:`bg-orange-100 dark:bg-orange-900/30`,label:`MFA Disable`},session_revoke:{icon:i.RefreshCw,color:`text-pink-600 dark:text-pink-400`,bgColor:`bg-pink-100 dark:bg-pink-900/30`,label:`Session Revoke`},file_upload:{icon:i.Upload,color:`text-violet-600 dark:text-violet-400`,bgColor:`bg-violet-100 dark:bg-violet-900/30`,label:`Upload`},file_download:{icon:i.Download,color:`text-violet-600 dark:text-violet-400`,bgColor:`bg-violet-100 dark:bg-violet-900/30`,label:`Download`},payment:{icon:i.CreditCard,color:`text-green-600 dark:text-green-400`,bgColor:`bg-green-100 dark:bg-green-900/30`,label:`Payment`},subscription_change:{icon:i.CreditCard,color:`text-blue-600 dark:text-blue-400`,bgColor:`bg-blue-100 dark:bg-blue-900/30`,label:`Subscription`},data_export:{icon:i.Database,color:`text-fuchsia-600 dark:text-fuchsia-400`,bgColor:`bg-fuchsia-100 dark:bg-fuchsia-900/30`,label:`Data Export`},backup:{icon:i.Server,color:`text-sky-600 dark:text-sky-400`,bgColor:`bg-sky-100 dark:bg-sky-900/30`,label:`Backup`},restore:{icon:i.RefreshCw,color:`text-sky-600 dark:text-sky-400`,bgColor:`bg-sky-100 dark:bg-sky-900/30`,label:`Restore`}},s={info:{icon:i.Info,color:`text-blue-600 dark:text-blue-400`,bgColor:`bg-blue-100 dark:bg-blue-900/30`,borderColor:`border-blue-200 dark:border-blue-800`,label:`Info`},warning:{icon:i.AlertTriangle,color:`text-amber-600 dark:text-amber-400`,bgColor:`bg-amber-100 dark:bg-amber-900/30`,borderColor:`border-amber-200 dark:border-amber-800`,label:`Warning`},critical:{icon:i.AlertCircle,color:`text-red-600 dark:text-red-400`,bgColor:`bg-red-100 dark:bg-red-900/30`,borderColor:`border-red-200 dark:border-red-800`,label:`Critical`}};function c(e){let t=Math.floor((new Date().getTime()-e.getTime())/1e3);if(t<60)return`just now`;let n=Math.floor(t/60);if(n<60)return`${n}m ago`;let r=Math.floor(n/60);if(r<24)return`${r}h ago`;let i=Math.floor(r/24);if(i<7)return`${i}d ago`;let a=Math.floor(i/7);return a<4?`${a}w ago`:e.toLocaleDateString()}function l(e){return e.toLocaleString(void 0,{year:`numeric`,month:`short`,day:`numeric`,hour:`2-digit`,minute:`2-digit`,second:`2-digit`})}function u(e){if(!e)return null;let t=[];return e.city&&t.push(e.city),e.country&&t.push(e.country),t.length>0?t.join(`, `):null}function d({user:e,size:n=`md`,className:r}){return(0,a.jsx)(`div`,{className:t.cn(`relative flex items-center justify-center rounded-full font-semibold flex-shrink-0`,{sm:`h-6 w-6 text-[10px]`,md:`h-10 w-10 text-sm`,lg:`h-12 w-12 text-base`}[n],e.avatar?``:`bg-muted text-muted-foreground`,r),children:e.avatar?(0,a.jsx)(`img`,{src:e.avatar,alt:e.name,className:`h-full w-full rounded-full object-cover`}):(e=>e.split(` `).map(e=>e[0]).join(``).toUpperCase().slice(0,2))(e.name)})}function f({type:e,severity:n,className:r}){let i=o[e],c=i.icon,l=n===`info`?i.color:s[n].color;return(0,a.jsx)(`div`,{className:t.cn(`flex h-9 w-9 items-center justify-center rounded-full flex-shrink-0`,n===`info`?i.bgColor:s[n].bgColor,r),children:(0,a.jsx)(c,{className:t.cn(`h-4 w-4`,l)})})}function p({severity:e,className:n}){let r=s[e];return(0,a.jsx)(`span`,{className:t.cn(`inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-xs font-medium`,r.bgColor,r.color,n),children:r.label})}function m({event:e}){let t=u(e.location);return(0,a.jsxs)(`div`,{className:`mt-3 p-3 bg-muted/50 rounded-lg text-sm space-y-2 animate-in slide-in-from-top-2 fade-in duration-200`,children:[(0,a.jsxs)(`div`,{className:`flex items-center gap-2 text-muted-foreground`,children:[(0,a.jsx)(i.Calendar,{className:`h-3.5 w-3.5`}),(0,a.jsx)(`span`,{children:l(new Date(e.timestamp))})]}),e.ipAddress&&(0,a.jsxs)(`div`,{className:`flex items-center gap-2 text-muted-foreground`,children:[(0,a.jsx)(i.Globe,{className:`h-3.5 w-3.5`}),(0,a.jsxs)(`span`,{children:[`IP: `,e.ipAddress]})]}),t&&(0,a.jsxs)(`div`,{className:`flex items-center gap-2 text-muted-foreground`,children:[(0,a.jsx)(i.MapPin,{className:`h-3.5 w-3.5`}),(0,a.jsx)(`span`,{children:t})]}),e.resource&&(0,a.jsxs)(`div`,{className:`flex items-center gap-2 text-muted-foreground`,children:[(0,a.jsx)(i.FileText,{className:`h-3.5 w-3.5`}),(0,a.jsxs)(`span`,{children:[`Resource: `,e.resource]})]}),e.sessionId&&(0,a.jsxs)(`div`,{className:`flex items-center gap-2 text-muted-foreground`,children:[(0,a.jsx)(i.Key,{className:`h-3.5 w-3.5`}),(0,a.jsxs)(`span`,{className:`font-mono text-xs`,children:[`Session: `,e.sessionId]})]}),e.requestId&&(0,a.jsxs)(`div`,{className:`flex items-center gap-2 text-muted-foreground`,children:[(0,a.jsx)(i.Activity,{className:`h-3.5 w-3.5`}),(0,a.jsxs)(`span`,{className:`font-mono text-xs`,children:[`Request: `,e.requestId]})]}),e.userAgent&&(0,a.jsx)(`div`,{className:`text-muted-foreground`,children:(0,a.jsx)(`span`,{className:`text-xs break-all`,children:e.userAgent})}),e.details&&Object.keys(e.details).length>0&&(0,a.jsxs)(`div`,{className:`pt-2 border-t border-border`,children:[(0,a.jsx)(`div`,{className:`text-xs font-medium text-muted-foreground mb-2`,children:`Details`}),(0,a.jsx)(`div`,{className:`space-y-1`,children:Object.entries(e.details).map(([e,t])=>(0,a.jsxs)(`div`,{className:`flex items-start gap-2 text-xs`,children:[(0,a.jsxs)(`span`,{className:`text-muted-foreground font-medium min-w-[80px]`,children:[e,`:`]}),(0,a.jsx)(`span`,{className:`text-foreground break-all`,children:typeof t==`object`?JSON.stringify(t):String(t)})]},e))})]})]})}function h({event:e,onEventClick:n,isNew:l}){let[h,g]=r.useState(!1),_=o[e.type];s[e.severity];let v=u(e.location),y=e.details||e.ipAddress||e.userAgent||e.sessionId||e.requestId||e.location;return(0,a.jsxs)(`div`,{className:t.cn(`relative flex gap-3 p-4 rounded-lg border bg-card transition-all duration-300`,`hover:bg-accent/50 hover:shadow-sm`,e.severity===`critical`&&`border-l-4 border-l-red-500`,e.severity===`warning`&&`border-l-4 border-l-amber-500`,l&&`animate-in slide-in-from-left-5 fade-in duration-500`),children:[(0,a.jsxs)(`div`,{className:`flex flex-col items-center gap-2`,children:[(0,a.jsx)(f,{type:e.type,severity:e.severity}),(0,a.jsx)(`div`,{className:`flex-1 w-px bg-border`})]}),(0,a.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,a.jsxs)(`div`,{className:`flex items-start justify-between gap-2 mb-1`,children:[(0,a.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,a.jsx)(`span`,{className:t.cn(`inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-xs font-medium`,_.bgColor,_.color),children:_.label}),e.severity!==`info`&&(0,a.jsx)(p,{severity:e.severity})]}),(0,a.jsx)(`span`,{className:`flex-shrink-0 text-xs text-muted-foreground`,children:c(new Date(e.timestamp))})]}),(0,a.jsx)(`p`,{className:`text-sm text-foreground mb-2`,children:e.description}),(0,a.jsxs)(`div`,{className:`flex items-center gap-2 mb-2`,children:[(0,a.jsx)(d,{user:e.user,size:`sm`}),(0,a.jsxs)(`div`,{className:`flex flex-col`,children:[(0,a.jsx)(`span`,{className:`text-sm font-medium`,children:e.user.name}),e.user.email&&(0,a.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:e.user.email})]}),e.user.role&&(0,a.jsx)(`span`,{className:`ml-2 text-xs text-muted-foreground bg-muted px-2 py-0.5 rounded`,children:e.user.role})]}),(0,a.jsxs)(`div`,{className:`flex items-center gap-3 text-xs text-muted-foreground flex-wrap`,children:[e.ipAddress&&(0,a.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,a.jsx)(i.Globe,{className:`h-3 w-3`}),e.ipAddress]}),v&&(0,a.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,a.jsx)(i.MapPin,{className:`h-3 w-3`}),v]}),e.resource&&(0,a.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,a.jsx)(i.FileText,{className:`h-3 w-3`}),e.resource]})]}),y&&(0,a.jsxs)(`div`,{className:`mt-2`,children:[(0,a.jsxs)(`button`,{type:`button`,className:`flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground transition-colors`,onClick:e=>{e.stopPropagation(),g(!h)},children:[h?(0,a.jsx)(i.ChevronUp,{className:`h-3 w-3`}):(0,a.jsx)(i.ChevronDown,{className:`h-3 w-3`}),h?`Hide details`:`Show details`]}),h&&(0,a.jsx)(m,{event:e})]})]}),n&&(0,a.jsx)(`button`,{type:`button`,className:`absolute inset-0 opacity-0`,onClick:()=>n(e),"aria-label":`View details for ${e.description}`})]})}function g({filters:e,onFilterChange:c,users:l,showSearch:u}){let[f,p]=r.useState(!1),[m,h]=r.useState(e.search||``),g=t=>{let n=t.target.value;h(n),c({...e,search:n||void 0})},_=t=>{let n=e.eventTypes||[],r=n.includes(t)?n.filter(e=>e!==t):[...n,t];c({...e,eventTypes:r.length>0?r:void 0})},v=t=>{let n=e.severities||[],r=n.includes(t)?n.filter(e=>e!==t):[...n,t];c({...e,severities:r.length>0?r:void 0})},y=t=>{let n=e.userIds||[],r=n.includes(t)?n.filter(e=>e!==t):[...n,t];c({...e,userIds:r.length>0?r:void 0})},b=()=>{h(``),c({})},x=e.eventTypes&&e.eventTypes.length>0||e.severities&&e.severities.length>0||e.userIds&&e.userIds.length>0||e.search||e.startDate||e.endDate;return(0,a.jsxs)(`div`,{className:`space-y-3 mb-4`,children:[(0,a.jsxs)(`div`,{className:`flex items-center gap-2`,children:[u&&(0,a.jsxs)(`div`,{className:`relative flex-1`,children:[(0,a.jsx)(i.Search,{className:`absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground`}),(0,a.jsx)(`input`,{type:`text`,placeholder:`Search audit logs...`,"aria-label":`Search audit logs`,value:m,onChange:g,className:`w-full pl-9 pr-4 py-2 text-sm rounded-lg border bg-background focus:outline-none focus:ring-2 focus:ring-ring`})]}),(0,a.jsxs)(`button`,{type:`button`,className:t.cn(`inline-flex items-center gap-2 px-3 py-2 text-sm font-medium rounded-lg border transition-colors`,f||x?`bg-primary text-primary-foreground`:`bg-background hover:bg-muted`),onClick:()=>p(!f),children:[(0,a.jsx)(i.Filter,{className:`h-4 w-4`}),`Filters`,x&&(0,a.jsx)(`span`,{className:`inline-flex items-center justify-center h-5 w-5 rounded-full bg-primary-foreground text-primary text-xs`,children:(e.eventTypes?.length||0)+(e.severities?.length||0)+(e.userIds?.length||0)})]}),x&&(0,a.jsxs)(`button`,{type:`button`,className:`inline-flex items-center gap-1 px-3 py-2 text-sm font-medium rounded-lg border bg-background hover:bg-muted transition-colors`,onClick:b,children:[(0,a.jsx)(i.X,{className:`h-4 w-4`}),`Clear`]})]}),f&&(0,a.jsxs)(`div`,{className:`p-4 bg-muted/50 rounded-lg border space-y-4 animate-in slide-in-from-top-2 fade-in duration-200`,children:[(0,a.jsxs)(`div`,{children:[(0,a.jsx)(`div`,{className:`text-xs font-medium text-muted-foreground mb-2`,children:`Severity`}),(0,a.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:Object.keys(s).map(n=>{let r=s[n],i=e.severities?.includes(n);return(0,a.jsx)(`button`,{type:`button`,className:t.cn(`px-3 py-1.5 rounded-lg text-xs font-medium transition-all`,i?t.cn(r.bgColor,r.color,`ring-2 ring-offset-1`,r.borderColor):`bg-background hover:bg-muted text-muted-foreground border`),onClick:()=>v(n),children:r.label},n)})})]}),(0,a.jsxs)(`div`,{children:[(0,a.jsx)(`div`,{className:`text-xs font-medium text-muted-foreground mb-2`,children:`Event Types`}),(0,a.jsx)(`div`,{className:`space-y-3`,children:[{label:`Authentication`,types:[`login`,`logout`,`password_change`,`mfa_enable`,`mfa_disable`,`session_revoke`]},{label:`Data`,types:[`create`,`update`,`delete`,`view`,`export`,`import`,`data_export`]},{label:`Users`,types:[`user_invite`,`user_remove`,`permission_change`]},{label:`System`,types:[`settings_change`,`api_key_create`,`api_key_revoke`,`backup`,`restore`]},{label:`Files`,types:[`file_upload`,`file_download`]},{label:`Billing`,types:[`payment`,`subscription_change`]}].map(n=>(0,a.jsxs)(`div`,{children:[(0,a.jsx)(`div`,{className:`text-xs text-muted-foreground mb-1.5`,children:n.label}),(0,a.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:n.types.map(n=>{let r=o[n],i=e.eventTypes?.includes(n);return(0,a.jsx)(`button`,{type:`button`,className:t.cn(`px-2 py-1 rounded text-xs font-medium transition-all`,i?t.cn(r.bgColor,r.color):`bg-background hover:bg-muted text-muted-foreground border`),onClick:()=>_(n),children:r.label},n)})})]},n.label))})]}),l&&l.length>0&&(0,a.jsxs)(`div`,{children:[(0,a.jsx)(`div`,{className:`text-xs font-medium text-muted-foreground mb-2`,children:`Users`}),(0,a.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:l.map(n=>{let r=e.userIds?.includes(n.id);return(0,a.jsxs)(`button`,{type:`button`,className:t.cn(`inline-flex items-center gap-2 px-2 py-1 rounded-lg text-xs font-medium transition-all`,r?`bg-primary text-primary-foreground`:`bg-background hover:bg-muted text-muted-foreground border`),onClick:()=>y(n.id),children:[(0,a.jsx)(d,{user:n,size:`sm`,className:`h-4 w-4 text-[8px]`}),n.name]},n.id)})})]}),(0,a.jsxs)(`div`,{children:[(0,a.jsx)(`div`,{className:`text-xs font-medium text-muted-foreground mb-2`,children:`Date Range`}),(0,a.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,a.jsx)(`input`,{type:`date`,"aria-label":`Start date`,value:e.startDate?n.localDateKey(e.startDate):``,onChange:t=>c({...e,startDate:t.target.value?new Date(t.target.value):void 0}),className:`px-3 py-1.5 text-xs rounded-lg border bg-background focus:outline-none focus:ring-2 focus:ring-ring`}),(0,a.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`to`}),(0,a.jsx)(`input`,{type:`date`,"aria-label":`End date`,value:e.endDate?n.localDateKey(e.endDate):``,onChange:t=>c({...e,endDate:t.target.value?new Date(t.target.value):void 0}),className:`px-3 py-1.5 text-xs rounded-lg border bg-background focus:outline-none focus:ring-2 focus:ring-ring`})]})]})]})]})}function _({onExport:e}){let[n,o]=r.useState(!1);return(0,a.jsxs)(`div`,{className:`relative`,children:[(0,a.jsxs)(`button`,{type:`button`,className:`inline-flex items-center gap-2 px-3 py-2 text-sm font-medium rounded-lg border bg-background hover:bg-muted transition-colors`,onClick:()=>o(!n),children:[(0,a.jsx)(i.Download,{className:`h-4 w-4`}),`Export`,(0,a.jsx)(i.ChevronDown,{className:t.cn(`h-4 w-4 transition-transform`,n&&`rotate-180`)})]}),n&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(`div`,{className:`fixed inset-0 z-10`,onClick:()=>o(!1)}),(0,a.jsxs)(`div`,{className:`absolute right-0 top-full mt-1 z-20 w-40 bg-popover border rounded-lg shadow-lg overflow-hidden animate-in fade-in slide-in-from-top-2 duration-200`,children:[(0,a.jsxs)(`button`,{type:`button`,className:`w-full px-3 py-2 text-sm text-left hover:bg-muted transition-colors flex items-center gap-2`,onClick:()=>{e(`csv`),o(!1)},children:[(0,a.jsx)(i.FileText,{className:`h-4 w-4`}),`Export as CSV`]}),(0,a.jsxs)(`button`,{type:`button`,className:`w-full px-3 py-2 text-sm text-left hover:bg-muted transition-colors flex items-center gap-2`,onClick:()=>{e(`json`),o(!1)},children:[(0,a.jsx)(i.FileText,{className:`h-4 w-4`}),`Export as JSON`]})]})]})]})}function v({events:e,onEventClick:n,onFilterChange:o,onLoadMore:s,onExport:c,hasMore:l=!1,loading:u=!1,showFilters:d=!0,showSearch:f=!0,showExport:p=!0,infiniteScroll:m=!1,maxItems:v,users:y,className:b}){let[x,S]=r.useState({}),[C,w]=r.useState(new Set),T=r.useRef(new Set),E=r.useRef(null),D=r.useRef(null);r.useEffect(()=>{let t=new Set(e.map(e=>e.id)),n=new Set;if(t.forEach(e=>{T.current.has(e)||n.add(e)}),n.size>0&&T.current.size>0){w(n);let e=setTimeout(()=>w(new Set),500);return()=>clearTimeout(e)}T.current=t},[e]);let O=r.useCallback(e=>{S(e),o?.(e)},[o]),k=r.useMemo(()=>{let t=e;if(x.eventTypes&&x.eventTypes.length>0&&(t=t.filter(e=>x.eventTypes.includes(e.type))),x.severities&&x.severities.length>0&&(t=t.filter(e=>x.severities.includes(e.severity))),x.userIds&&x.userIds.length>0&&(t=t.filter(e=>x.userIds.includes(e.user.id))),x.search){let e=x.search.toLowerCase();t=t.filter(t=>t.description.toLowerCase().includes(e)||t.user.name.toLowerCase().includes(e)||t.user.email?.toLowerCase().includes(e)||t.resource?.toLowerCase().includes(e)||t.ipAddress?.includes(e))}if(x.startDate&&(t=t.filter(e=>new Date(e.timestamp)>=x.startDate)),x.endDate){let e=new Date(x.endDate);e.setHours(23,59,59,999),t=t.filter(t=>new Date(t.timestamp)<=e)}return v&&v>0&&(t=t.slice(0,v)),t},[e,x,v]);return r.useEffect(()=>{if(!(!m||!s||!l))return E.current=new IntersectionObserver(e=>{e[0].isIntersecting&&!u&&s()},{threshold:.1}),D.current&&E.current.observe(D.current),()=>{E.current?.disconnect()}},[m,s,l,u]),e.length===0&&!u?(0,a.jsxs)(`div`,{className:t.cn(`flex flex-col items-center justify-center py-12 text-center`,b),children:[(0,a.jsx)(i.Activity,{className:`h-12 w-12 text-muted-foreground/50 mb-4`}),(0,a.jsx)(`h3`,{className:`text-lg font-medium text-muted-foreground`,children:`No audit events`}),(0,a.jsx)(`p`,{className:`text-sm text-muted-foreground/70 mt-1`,children:`Activity will appear here when events are logged.`})]}):(0,a.jsxs)(`div`,{className:t.cn(`w-full`,b),children:[(0,a.jsxs)(`div`,{className:`flex items-start justify-between gap-4 mb-4`,children:[(0,a.jsx)(`div`,{className:`flex-1`,children:(d||f)&&(0,a.jsx)(g,{filters:x,onFilterChange:O,users:y,showSearch:f})}),p&&c&&(0,a.jsx)(_,{onExport:c})]}),(0,a.jsx)(`div`,{className:`space-y-3`,children:k.map(e=>(0,a.jsx)(h,{event:e,onEventClick:n,isNew:C.has(e.id)},e.id))}),u&&(0,a.jsx)(`div`,{className:`flex items-center justify-center py-6`,children:(0,a.jsx)(i.Loader2,{className:`h-6 w-6 animate-spin text-muted-foreground`})}),!u&&l&&(0,a.jsx)(a.Fragment,{children:m?(0,a.jsx)(`div`,{ref:D,className:`h-1`}):(0,a.jsx)(`div`,{className:`flex justify-center pt-4`,children:(0,a.jsxs)(`button`,{type:`button`,className:`inline-flex items-center gap-2 px-4 py-2 text-sm font-medium rounded-lg border bg-background hover:bg-muted transition-colors`,onClick:s,children:[(0,a.jsx)(i.ChevronDown,{className:`h-4 w-4`}),`Load more`]})})}),k.length===0&&e.length>0&&!u&&(0,a.jsxs)(`div`,{className:`flex flex-col items-center justify-center py-12 text-center`,children:[(0,a.jsx)(i.Filter,{className:`h-8 w-8 text-muted-foreground mb-3`}),(0,a.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`No events match the current filters`})]})]})}function y({initialEvents:e=[],maxEvents:t=1e3,initialFilters:n={}}={}){let[i,a]=r.useState(e),[o,s]=r.useState(n),[c,l]=r.useState(!1),[d,f]=r.useState(!1),p=r.useCallback(e=>{a(n=>[e,...n].slice(0,t))},[t]),m=r.useCallback(e=>{a(n=>[...e,...n].slice(0,t))},[t]),h=r.useCallback(e=>{a(t=>t.filter(t=>t.id!==e))},[]),g=r.useCallback(()=>{s({})},[]),_=r.useCallback(async e=>{l(!0);try{let n=await e();a(e=>{let r=new Set(e.map(e=>e.id)),i=n.events.filter(e=>!r.has(e.id));return[...e,...i].slice(0,t)}),f(n.hasMore)}finally{l(!1)}},[t]),v=r.useCallback(e=>{a(e)},[]),y=r.useCallback(()=>{a([])},[]),b=r.useCallback(()=>{let e=i;if(o.eventTypes&&o.eventTypes.length>0&&(e=e.filter(e=>o.eventTypes.includes(e.type))),o.severities&&o.severities.length>0&&(e=e.filter(e=>o.severities.includes(e.severity))),o.userIds&&o.userIds.length>0&&(e=e.filter(e=>o.userIds.includes(e.user.id))),o.search){let t=o.search.toLowerCase();e=e.filter(e=>e.description.toLowerCase().includes(t)||e.user.name.toLowerCase().includes(t)||e.user.email?.toLowerCase().includes(t))}if(o.startDate&&(e=e.filter(e=>new Date(e.timestamp)>=o.startDate)),o.endDate){let t=new Date(o.endDate);t.setHours(23,59,59,999),e=e.filter(e=>new Date(e.timestamp)<=t)}return e},[i,o]);return{events:i,filters:o,loading:c,hasMore:d,addEvent:p,addEvents:m,removeEvent:h,setFilters:s,clearFilters:g,loadMore:_,refresh:v,clear:y,setLoading:l,setHasMore:f,exportEvents:r.useCallback(e=>{let t=b();if(e===`json`)return JSON.stringify(t,null,2);let n=[`ID`,`Type`,`Severity`,`Description`,`User Name`,`User Email`,`IP Address`,`Location`,`Resource`,`Timestamp`],r=t.map(e=>[e.id,e.type,e.severity,`"${e.description.replace(/"/g,`""`)}"`,e.user.name,e.user.email||``,e.ipAddress||``,u(e.location)||``,e.resource||``,new Date(e.timestamp).toISOString()]);return[n.join(`,`),...r.map(e=>e.join(`,`))].join(`
|
|
2
|
-
`)},[b]),getFilteredEvents:b}}exports.default=v,exports.useAuditLog=y;
|
|
1
|
+
"use client";"use client";const e=require("../../_virtual/_rolldown/runtime.cjs.js"),t=require("../../utils/cn.cjs.js"),n=require("../../utils/local-date.cjs.js");let r=require("react");r=e.__toESM(r);let i=require("lucide-react"),a=require("react/jsx-runtime");var o={login:{icon:i.LogIn,color:`text-green-600 dark:text-green-400`,bgColor:`bg-green-100 dark:bg-green-900/30`,label:`Login`},logout:{icon:i.LogOut,color:`text-gray-600 dark:text-gray-400`,bgColor:`bg-gray-100 dark:bg-gray-900/30`,label:`Logout`},create:{icon:i.Plus,color:`text-blue-600 dark:text-blue-400`,bgColor:`bg-blue-100 dark:bg-blue-900/30`,label:`Create`},update:{icon:i.Edit,color:`text-amber-600 dark:text-amber-400`,bgColor:`bg-amber-100 dark:bg-amber-900/30`,label:`Update`},delete:{icon:i.Trash2,color:`text-red-600 dark:text-red-400`,bgColor:`bg-red-100 dark:bg-red-900/30`,label:`Delete`},view:{icon:i.Eye,color:`text-purple-600 dark:text-purple-400`,bgColor:`bg-purple-100 dark:bg-purple-900/30`,label:`View`},export:{icon:i.Download,color:`text-indigo-600 dark:text-indigo-400`,bgColor:`bg-indigo-100 dark:bg-indigo-900/30`,label:`Export`},import:{icon:i.Upload,color:`text-indigo-600 dark:text-indigo-400`,bgColor:`bg-indigo-100 dark:bg-indigo-900/30`,label:`Import`},settings_change:{icon:i.Settings,color:`text-slate-600 dark:text-slate-400`,bgColor:`bg-slate-100 dark:bg-slate-900/30`,label:`Settings`},permission_change:{icon:i.Shield,color:`text-orange-600 dark:text-orange-400`,bgColor:`bg-orange-100 dark:bg-orange-900/30`,label:`Permission`},password_change:{icon:i.Key,color:`text-yellow-600 dark:text-yellow-400`,bgColor:`bg-yellow-100 dark:bg-yellow-900/30`,label:`Password`},user_invite:{icon:i.UserPlus,color:`text-teal-600 dark:text-teal-400`,bgColor:`bg-teal-100 dark:bg-teal-900/30`,label:`Invite`},user_remove:{icon:i.UserMinus,color:`text-rose-600 dark:text-rose-400`,bgColor:`bg-rose-100 dark:bg-rose-900/30`,label:`Remove`},api_key_create:{icon:i.Key,color:`text-cyan-600 dark:text-cyan-400`,bgColor:`bg-cyan-100 dark:bg-cyan-900/30`,label:`API Key Create`},api_key_revoke:{icon:i.Key,color:`text-red-600 dark:text-red-400`,bgColor:`bg-red-100 dark:bg-red-900/30`,label:`API Key Revoke`},mfa_enable:{icon:i.Lock,color:`text-emerald-600 dark:text-emerald-400`,bgColor:`bg-emerald-100 dark:bg-emerald-900/30`,label:`MFA Enable`},mfa_disable:{icon:i.Unlock,color:`text-orange-600 dark:text-orange-400`,bgColor:`bg-orange-100 dark:bg-orange-900/30`,label:`MFA Disable`},session_revoke:{icon:i.RefreshCw,color:`text-pink-600 dark:text-pink-400`,bgColor:`bg-pink-100 dark:bg-pink-900/30`,label:`Session Revoke`},file_upload:{icon:i.Upload,color:`text-violet-600 dark:text-violet-400`,bgColor:`bg-violet-100 dark:bg-violet-900/30`,label:`Upload`},file_download:{icon:i.Download,color:`text-violet-600 dark:text-violet-400`,bgColor:`bg-violet-100 dark:bg-violet-900/30`,label:`Download`},payment:{icon:i.CreditCard,color:`text-green-600 dark:text-green-400`,bgColor:`bg-green-100 dark:bg-green-900/30`,label:`Payment`},subscription_change:{icon:i.CreditCard,color:`text-blue-600 dark:text-blue-400`,bgColor:`bg-blue-100 dark:bg-blue-900/30`,label:`Subscription`},data_export:{icon:i.Database,color:`text-fuchsia-600 dark:text-fuchsia-400`,bgColor:`bg-fuchsia-100 dark:bg-fuchsia-900/30`,label:`Data Export`},backup:{icon:i.Server,color:`text-sky-600 dark:text-sky-400`,bgColor:`bg-sky-100 dark:bg-sky-900/30`,label:`Backup`},restore:{icon:i.RefreshCw,color:`text-sky-600 dark:text-sky-400`,bgColor:`bg-sky-100 dark:bg-sky-900/30`,label:`Restore`}},s={info:{icon:i.Info,color:`text-blue-600 dark:text-blue-400`,bgColor:`bg-blue-100 dark:bg-blue-900/30`,borderColor:`border-blue-200 dark:border-blue-800`,label:`Info`},warning:{icon:i.AlertTriangle,color:`text-amber-600 dark:text-amber-400`,bgColor:`bg-amber-100 dark:bg-amber-900/30`,borderColor:`border-amber-200 dark:border-amber-800`,label:`Warning`},critical:{icon:i.AlertCircle,color:`text-red-600 dark:text-red-400`,bgColor:`bg-red-100 dark:bg-red-900/30`,borderColor:`border-red-200 dark:border-red-800`,label:`Critical`}};function c(e){let t=Math.floor((new Date().getTime()-e.getTime())/1e3);if(t<60)return`just now`;let n=Math.floor(t/60);if(n<60)return`${n}m ago`;let r=Math.floor(n/60);if(r<24)return`${r}h ago`;let i=Math.floor(r/24);if(i<7)return`${i}d ago`;let a=Math.floor(i/7);return a<4?`${a}w ago`:e.toLocaleDateString()}function l(e){return e.toLocaleString(void 0,{year:`numeric`,month:`short`,day:`numeric`,hour:`2-digit`,minute:`2-digit`,second:`2-digit`})}function u(e){if(!e)return null;let t=[];return e.city&&t.push(e.city),e.country&&t.push(e.country),t.length>0?t.join(`, `):null}function d({user:e,size:n=`md`,className:r}){return(0,a.jsx)(`div`,{className:t.cn(`relative flex items-center justify-center rounded-full font-semibold flex-shrink-0`,{sm:`h-6 w-6 text-[10px]`,md:`h-10 w-10 text-sm`,lg:`h-12 w-12 text-base`}[n],e.avatar?``:`bg-muted text-muted-foreground`,r),children:e.avatar?(0,a.jsx)(`img`,{src:e.avatar,alt:e.name,className:`h-full w-full rounded-full object-cover`}):(e=>e.split(` `).map(e=>e[0]).join(``).toUpperCase().slice(0,2))(e.name)})}function f({type:e,severity:n,className:r}){let i=o[e],c=i.icon,l=n===`info`?i.color:s[n].color;return(0,a.jsx)(`div`,{className:t.cn(`flex h-9 w-9 items-center justify-center rounded-full flex-shrink-0`,n===`info`?i.bgColor:s[n].bgColor,r),children:(0,a.jsx)(c,{className:t.cn(`h-4 w-4`,l)})})}function p({severity:e,className:n}){let r=s[e];return(0,a.jsx)(`span`,{className:t.cn(`inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-xs font-medium`,r.bgColor,r.color,n),children:r.label})}function m({event:e}){let t=u(e.location);return(0,a.jsxs)(`div`,{className:`mt-3 p-3 bg-muted/50 rounded-lg text-sm space-y-2 animate-in slide-in-from-top-2 fade-in duration-200`,children:[(0,a.jsxs)(`div`,{className:`flex items-center gap-2 text-muted-foreground`,children:[(0,a.jsx)(i.Calendar,{className:`h-3.5 w-3.5`}),(0,a.jsx)(`span`,{children:l(new Date(e.timestamp))})]}),e.ipAddress&&(0,a.jsxs)(`div`,{className:`flex items-center gap-2 text-muted-foreground`,children:[(0,a.jsx)(i.Globe,{className:`h-3.5 w-3.5`}),(0,a.jsxs)(`span`,{children:[`IP: `,e.ipAddress]})]}),t&&(0,a.jsxs)(`div`,{className:`flex items-center gap-2 text-muted-foreground`,children:[(0,a.jsx)(i.MapPin,{className:`h-3.5 w-3.5`}),(0,a.jsx)(`span`,{children:t})]}),e.resource&&(0,a.jsxs)(`div`,{className:`flex items-center gap-2 text-muted-foreground`,children:[(0,a.jsx)(i.FileText,{className:`h-3.5 w-3.5`}),(0,a.jsxs)(`span`,{children:[`Resource: `,e.resource]})]}),e.sessionId&&(0,a.jsxs)(`div`,{className:`flex items-center gap-2 text-muted-foreground`,children:[(0,a.jsx)(i.Key,{className:`h-3.5 w-3.5`}),(0,a.jsxs)(`span`,{className:`font-mono text-xs`,children:[`Session: `,e.sessionId]})]}),e.requestId&&(0,a.jsxs)(`div`,{className:`flex items-center gap-2 text-muted-foreground`,children:[(0,a.jsx)(i.Activity,{className:`h-3.5 w-3.5`}),(0,a.jsxs)(`span`,{className:`font-mono text-xs`,children:[`Request: `,e.requestId]})]}),e.userAgent&&(0,a.jsx)(`div`,{className:`text-muted-foreground`,children:(0,a.jsx)(`span`,{className:`text-xs break-all`,children:e.userAgent})}),e.details&&Object.keys(e.details).length>0&&(0,a.jsxs)(`div`,{className:`pt-2 border-t border-border`,children:[(0,a.jsx)(`div`,{className:`text-xs font-medium text-muted-foreground mb-2`,children:`Details`}),(0,a.jsx)(`div`,{className:`space-y-1`,children:Object.entries(e.details).map(([e,t])=>(0,a.jsxs)(`div`,{className:`flex items-start gap-2 text-xs`,children:[(0,a.jsxs)(`span`,{className:`text-muted-foreground font-medium min-w-[80px]`,children:[e,`:`]}),(0,a.jsx)(`span`,{className:`text-foreground break-all`,children:typeof t==`object`?JSON.stringify(t):String(t)})]},e))})]})]})}function h({event:e,onEventClick:n,isNew:l}){let[h,g]=r.useState(!1),_=o[e.type];s[e.severity];let v=u(e.location),y=e.details||e.ipAddress||e.userAgent||e.sessionId||e.requestId||e.location;return(0,a.jsxs)(`div`,{className:t.cn(`relative flex gap-3 p-4 rounded-lg border bg-card transition-all duration-300`,`hover:bg-accent/50 hover:shadow-sm`,e.severity===`critical`&&`border-l-4 border-l-red-500`,e.severity===`warning`&&`border-l-4 border-l-amber-500`,l&&`animate-in slide-in-from-left-5 fade-in duration-500`),children:[(0,a.jsxs)(`div`,{className:`flex flex-col items-center gap-2`,children:[(0,a.jsx)(f,{type:e.type,severity:e.severity}),(0,a.jsx)(`div`,{className:`flex-1 w-px bg-border`})]}),(0,a.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,a.jsxs)(`div`,{className:`flex items-start justify-between gap-2 mb-1`,children:[(0,a.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,a.jsx)(`span`,{className:t.cn(`inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-xs font-medium`,_.bgColor,_.color),children:_.label}),e.severity!==`info`&&(0,a.jsx)(p,{severity:e.severity})]}),(0,a.jsx)(`span`,{className:`flex-shrink-0 text-xs text-muted-foreground`,children:c(new Date(e.timestamp))})]}),(0,a.jsx)(`p`,{className:`text-sm text-foreground mb-2`,children:e.description}),(0,a.jsxs)(`div`,{className:`flex items-center gap-2 mb-2`,children:[(0,a.jsx)(d,{user:e.user,size:`sm`}),(0,a.jsxs)(`div`,{className:`flex flex-col`,children:[(0,a.jsx)(`span`,{className:`text-sm font-medium`,children:e.user.name}),e.user.email&&(0,a.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:e.user.email})]}),e.user.role&&(0,a.jsx)(`span`,{className:`ml-2 text-xs text-muted-foreground bg-muted px-2 py-0.5 rounded`,children:e.user.role})]}),(0,a.jsxs)(`div`,{className:`flex items-center gap-3 text-xs text-muted-foreground flex-wrap`,children:[e.ipAddress&&(0,a.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,a.jsx)(i.Globe,{className:`h-3 w-3`}),e.ipAddress]}),v&&(0,a.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,a.jsx)(i.MapPin,{className:`h-3 w-3`}),v]}),e.resource&&(0,a.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,a.jsx)(i.FileText,{className:`h-3 w-3`}),e.resource]})]}),y&&(0,a.jsxs)(`div`,{className:`mt-2`,children:[(0,a.jsxs)(`button`,{type:`button`,className:`flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground transition-colors`,onClick:e=>{e.stopPropagation(),g(!h)},children:[h?(0,a.jsx)(i.ChevronUp,{className:`h-3 w-3`}):(0,a.jsx)(i.ChevronDown,{className:`h-3 w-3`}),h?`Hide details`:`Show details`]}),h&&(0,a.jsx)(m,{event:e})]})]}),n&&(0,a.jsx)(`button`,{type:`button`,className:`absolute inset-0 opacity-0`,onClick:()=>n(e),"aria-label":`View details for ${e.description}`})]})}function g({filters:e,onFilterChange:c,users:l,showSearch:u}){let[f,p]=r.useState(!1),[m,h]=r.useState(e.search||``),g=t=>{let n=t.target.value;h(n),c({...e,search:n||void 0})},_=t=>{let n=e.eventTypes||[],r=n.includes(t)?n.filter(e=>e!==t):[...n,t];c({...e,eventTypes:r.length>0?r:void 0})},v=t=>{let n=e.severities||[],r=n.includes(t)?n.filter(e=>e!==t):[...n,t];c({...e,severities:r.length>0?r:void 0})},y=t=>{let n=e.userIds||[],r=n.includes(t)?n.filter(e=>e!==t):[...n,t];c({...e,userIds:r.length>0?r:void 0})},b=()=>{h(``),c({})},x=e.eventTypes&&e.eventTypes.length>0||e.severities&&e.severities.length>0||e.userIds&&e.userIds.length>0||e.search||e.startDate||e.endDate;return(0,a.jsxs)(`div`,{className:`space-y-3 mb-4`,children:[(0,a.jsxs)(`div`,{className:`flex items-center gap-2`,children:[u&&(0,a.jsxs)(`div`,{className:`relative flex-1`,children:[(0,a.jsx)(i.Search,{className:`absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground`}),(0,a.jsx)(`input`,{type:`text`,placeholder:`Search audit logs...`,"aria-label":`Search audit logs`,value:m,onChange:g,className:`w-full pl-9 pr-4 py-2 text-sm rounded-lg border bg-background focus:outline-none focus:ring-2 focus:ring-ring`})]}),(0,a.jsxs)(`button`,{type:`button`,className:t.cn(`inline-flex items-center gap-2 px-3 py-2 text-sm font-medium rounded-lg border transition-colors`,f||x?`bg-primary text-primary-foreground`:`bg-background hover:bg-muted`),onClick:()=>p(!f),children:[(0,a.jsx)(i.Filter,{className:`h-4 w-4`}),`Filters`,x&&(0,a.jsx)(`span`,{className:`inline-flex items-center justify-center h-5 w-5 rounded-full bg-primary-foreground text-primary text-xs`,children:(e.eventTypes?.length||0)+(e.severities?.length||0)+(e.userIds?.length||0)})]}),x&&(0,a.jsxs)(`button`,{type:`button`,className:`inline-flex items-center gap-1 px-3 py-2 text-sm font-medium rounded-lg border bg-background hover:bg-muted transition-colors`,onClick:b,children:[(0,a.jsx)(i.X,{className:`h-4 w-4`}),`Clear`]})]}),f&&(0,a.jsxs)(`div`,{className:`p-4 bg-muted/50 rounded-lg border space-y-4 animate-in slide-in-from-top-2 fade-in duration-200`,children:[(0,a.jsxs)(`div`,{children:[(0,a.jsx)(`div`,{className:`text-xs font-medium text-muted-foreground mb-2`,children:`Severity`}),(0,a.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:Object.keys(s).map(n=>{let r=s[n],i=e.severities?.includes(n);return(0,a.jsx)(`button`,{type:`button`,className:t.cn(`px-3 py-1.5 rounded-lg text-xs font-medium transition-all`,i?t.cn(r.bgColor,r.color,`ring-2 ring-offset-1`,r.borderColor):`bg-background hover:bg-muted text-muted-foreground border`),onClick:()=>v(n),children:r.label},n)})})]}),(0,a.jsxs)(`div`,{children:[(0,a.jsx)(`div`,{className:`text-xs font-medium text-muted-foreground mb-2`,children:`Event Types`}),(0,a.jsx)(`div`,{className:`space-y-3`,children:[{label:`Authentication`,types:[`login`,`logout`,`password_change`,`mfa_enable`,`mfa_disable`,`session_revoke`]},{label:`Data`,types:[`create`,`update`,`delete`,`view`,`export`,`import`,`data_export`]},{label:`Users`,types:[`user_invite`,`user_remove`,`permission_change`]},{label:`System`,types:[`settings_change`,`api_key_create`,`api_key_revoke`,`backup`,`restore`]},{label:`Files`,types:[`file_upload`,`file_download`]},{label:`Billing`,types:[`payment`,`subscription_change`]}].map(n=>(0,a.jsxs)(`div`,{children:[(0,a.jsx)(`div`,{className:`text-xs text-muted-foreground mb-1.5`,children:n.label}),(0,a.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:n.types.map(n=>{let r=o[n],i=e.eventTypes?.includes(n);return(0,a.jsx)(`button`,{type:`button`,className:t.cn(`px-2 py-1 rounded text-xs font-medium transition-all`,i?t.cn(r.bgColor,r.color):`bg-background hover:bg-muted text-muted-foreground border`),onClick:()=>_(n),children:r.label},n)})})]},n.label))})]}),l&&l.length>0&&(0,a.jsxs)(`div`,{children:[(0,a.jsx)(`div`,{className:`text-xs font-medium text-muted-foreground mb-2`,children:`Users`}),(0,a.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:l.map(n=>{let r=e.userIds?.includes(n.id);return(0,a.jsxs)(`button`,{type:`button`,className:t.cn(`inline-flex items-center gap-2 px-2 py-1 rounded-lg text-xs font-medium transition-all`,r?`bg-primary text-primary-foreground`:`bg-background hover:bg-muted text-muted-foreground border`),onClick:()=>y(n.id),children:[(0,a.jsx)(d,{user:n,size:`sm`,className:`h-4 w-4 text-[8px]`}),n.name]},n.id)})})]}),(0,a.jsxs)(`div`,{children:[(0,a.jsx)(`div`,{className:`text-xs font-medium text-muted-foreground mb-2`,children:`Date Range`}),(0,a.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,a.jsx)(`input`,{type:`date`,"aria-label":`Start date`,value:e.startDate?n.localDateKey(e.startDate):``,onChange:t=>c({...e,startDate:t.target.value?new Date(t.target.value):void 0}),className:`px-3 py-1.5 text-xs rounded-lg border bg-background focus:outline-none focus:ring-2 focus:ring-ring`}),(0,a.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`to`}),(0,a.jsx)(`input`,{type:`date`,"aria-label":`End date`,value:e.endDate?n.localDateKey(e.endDate):``,onChange:t=>c({...e,endDate:t.target.value?new Date(t.target.value):void 0}),className:`px-3 py-1.5 text-xs rounded-lg border bg-background focus:outline-none focus:ring-2 focus:ring-ring`})]})]})]})]})}function _({onExport:e}){let[n,o]=r.useState(!1);return(0,a.jsxs)(`div`,{className:`relative`,children:[(0,a.jsxs)(`button`,{type:`button`,className:`inline-flex items-center gap-2 px-3 py-2 text-sm font-medium rounded-lg border bg-background hover:bg-muted transition-colors`,onClick:()=>o(!n),children:[(0,a.jsx)(i.Download,{className:`h-4 w-4`}),`Export`,(0,a.jsx)(i.ChevronDown,{className:t.cn(`h-4 w-4 transition-transform`,n&&`rotate-180`)})]}),n&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(`div`,{className:`fixed inset-0 z-10`,onClick:()=>o(!1)}),(0,a.jsxs)(`div`,{className:`absolute right-0 top-full mt-1 z-20 w-40 bg-popover border rounded-lg shadow-lg overflow-hidden animate-in fade-in slide-in-from-top-2 duration-200`,children:[(0,a.jsxs)(`button`,{type:`button`,className:`w-full px-3 py-2 text-sm text-left hover:bg-muted transition-colors flex items-center gap-2`,onClick:()=>{e(`csv`),o(!1)},children:[(0,a.jsx)(i.FileText,{className:`h-4 w-4`}),`Export as CSV`]}),(0,a.jsxs)(`button`,{type:`button`,className:`w-full px-3 py-2 text-sm text-left hover:bg-muted transition-colors flex items-center gap-2`,onClick:()=>{e(`json`),o(!1)},children:[(0,a.jsx)(i.FileText,{className:`h-4 w-4`}),`Export as JSON`]})]})]})]})}function v({events:e,onEventClick:n,onFilterChange:o,onLoadMore:s,onExport:c,hasMore:l=!1,loading:u=!1,showFilters:d=!0,showSearch:f=!0,showExport:p=!0,infiniteScroll:m=!1,maxItems:v,users:y,className:b}){let[x,S]=r.useState({}),[C,w]=r.useState(new Set),T=r.useRef(new Set),E=r.useRef(null),D=r.useRef(null);r.useEffect(()=>{let t=new Set(e.map(e=>e.id)),n=new Set;if(t.forEach(e=>{T.current.has(e)||n.add(e)}),n.size>0&&T.current.size>0){w(n);let e=setTimeout(()=>w(new Set),500);return()=>clearTimeout(e)}T.current=t},[e]);let O=r.useCallback(e=>{S(e),o?.(e)},[o]),k=r.useMemo(()=>{let t=e;if(x.eventTypes&&x.eventTypes.length>0&&(t=t.filter(e=>x.eventTypes.includes(e.type))),x.severities&&x.severities.length>0&&(t=t.filter(e=>x.severities.includes(e.severity))),x.userIds&&x.userIds.length>0&&(t=t.filter(e=>x.userIds.includes(e.user.id))),x.search){let e=x.search.toLowerCase();t=t.filter(t=>t.description.toLowerCase().includes(e)||t.user.name.toLowerCase().includes(e)||t.user.email?.toLowerCase().includes(e)||t.resource?.toLowerCase().includes(e)||t.ipAddress?.includes(e))}if(x.startDate&&(t=t.filter(e=>new Date(e.timestamp)>=x.startDate)),x.endDate){let e=new Date(x.endDate);e.setHours(23,59,59,999),t=t.filter(t=>new Date(t.timestamp)<=e)}return v&&v>0&&(t=t.slice(0,v)),t},[e,x,v]);return r.useEffect(()=>{if(!(!m||!s||!l))return E.current=new IntersectionObserver(e=>{e[0].isIntersecting&&!u&&s()},{threshold:.1}),D.current&&E.current.observe(D.current),()=>{E.current?.disconnect()}},[m,s,l,u]),e.length===0&&!u?(0,a.jsxs)(`div`,{className:t.cn(`flex flex-col items-center justify-center py-12 text-center`,b),children:[(0,a.jsx)(i.Activity,{className:`h-12 w-12 text-muted-foreground/50 mb-4`}),(0,a.jsx)(`h3`,{className:`text-lg font-medium text-muted-foreground`,children:`No audit events`}),(0,a.jsx)(`p`,{className:`text-sm text-muted-foreground/70 mt-1`,children:`Activity will appear here when events are logged.`})]}):(0,a.jsxs)(`div`,{className:t.cn(`w-full`,b),children:[(0,a.jsxs)(`div`,{className:`flex items-start justify-between gap-4 mb-4`,children:[(0,a.jsx)(`div`,{className:`flex-1`,children:(d||f)&&(0,a.jsx)(g,{filters:x,onFilterChange:O,users:y,showSearch:f})}),p&&c&&(0,a.jsx)(_,{onExport:c})]}),(0,a.jsx)(`div`,{className:`space-y-3`,children:k.map(e=>(0,a.jsx)(h,{event:e,onEventClick:n,isNew:C.has(e.id)},e.id))}),u&&(0,a.jsx)(`div`,{className:`flex items-center justify-center py-6`,children:(0,a.jsx)(i.Loader2,{className:`h-6 w-6 animate-spin text-muted-foreground`})}),!u&&l&&(0,a.jsx)(a.Fragment,{children:m?(0,a.jsx)(`div`,{ref:D,className:`h-1`}):(0,a.jsx)(`div`,{className:`flex justify-center pt-4`,children:(0,a.jsxs)(`button`,{type:`button`,className:`inline-flex items-center gap-2 px-4 py-2 text-sm font-medium rounded-lg border bg-background hover:bg-muted transition-colors`,onClick:s,children:[(0,a.jsx)(i.ChevronDown,{className:`h-4 w-4`}),`Load more`]})})}),k.length===0&&e.length>0&&!u&&(0,a.jsxs)(`div`,{className:`flex flex-col items-center justify-center py-12 text-center`,children:[(0,a.jsx)(i.Filter,{className:`h-8 w-8 text-muted-foreground mb-3`}),(0,a.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`No events match the current filters`})]})]})}function y({initialEvents:e=[],maxEvents:t=1e3,initialFilters:n={}}={}){let[i,a]=r.useState(e),[o,s]=r.useState(n),[c,l]=r.useState(!1),[d,f]=r.useState(!1),p=r.useCallback(e=>{a(n=>[e,...n].slice(0,t))},[t]),m=r.useCallback(e=>{a(n=>[...e,...n].slice(0,t))},[t]),h=r.useCallback(e=>{a(t=>t.filter(t=>t.id!==e))},[]),g=r.useCallback(()=>{s({})},[]),_=r.useCallback(async e=>{l(!0);try{let n=await e();a(e=>{let r=new Set(e.map(e=>e.id)),i=n.events.filter(e=>!r.has(e.id));return[...e,...i].slice(0,t)}),f(n.hasMore)}finally{l(!1)}},[t]),v=r.useCallback(e=>{a(e)},[]),y=r.useCallback(()=>{a([])},[]),b=r.useCallback(()=>{let e=i;if(o.eventTypes&&o.eventTypes.length>0&&(e=e.filter(e=>o.eventTypes.includes(e.type))),o.severities&&o.severities.length>0&&(e=e.filter(e=>o.severities.includes(e.severity))),o.userIds&&o.userIds.length>0&&(e=e.filter(e=>o.userIds.includes(e.user.id))),o.search){let t=o.search.toLowerCase();e=e.filter(e=>e.description.toLowerCase().includes(t)||e.user.name.toLowerCase().includes(t)||e.user.email?.toLowerCase().includes(t))}if(o.startDate&&(e=e.filter(e=>new Date(e.timestamp)>=o.startDate)),o.endDate){let t=new Date(o.endDate);t.setHours(23,59,59,999),e=e.filter(e=>new Date(e.timestamp)<=t)}return e},[i,o]);return{events:i,filters:o,loading:c,hasMore:d,addEvent:p,addEvents:m,removeEvent:h,setFilters:s,clearFilters:g,loadMore:_,refresh:v,clear:y,setLoading:l,setHasMore:f,exportEvents:r.useCallback(e=>{let t=b();if(e===`json`)return JSON.stringify(t,null,2);let n=[`ID`,`Type`,`Severity`,`Description`,`User Name`,`User Email`,`IP Address`,`Location`,`Resource`,`Timestamp`],r=t.map(e=>[e.id,e.type,e.severity,`"${e.description.replace(/"/g,`""`)}"`,e.user.name,e.user.email||``,e.ipAddress||``,u(e.location)||``,e.resource||``,new Date(e.timestamp).toISOString()]);return[n.join(`,`),...r.map(e=>e.join(`,`))].join(`
|
|
2
|
+
`)},[b]),getFilteredEvents:b}}exports.WakaAuditLog=v,exports.default=v,exports.useAuditLog=y;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";"use client";const e=require(
|
|
1
|
+
"use client";"use client";const e=require("../../_virtual/_rolldown/runtime.cjs.js"),t=require("../../utils/cn.cjs.js"),n=require("../badge/index.cjs.js"),r=require("../button/index.cjs.js"),i=require("../command/index.cjs.js"),a=require("../label/index.cjs.js"),o=require("../popover/index.cjs.js");let s=require("react");s=e.__toESM(s);let c=require("lucide-react"),l=require("react/jsx-runtime");var u=s.forwardRef(({options:e,value:u,onChange:d,onSearch:f,multiple:p=!1,creatable:m=!1,onCreate:h,placeholder:g=`Sélectionner...`,emptyMessage:_=`Aucun résultat.`,loading:v=!1,disabled:y=!1,error:b,className:x,label:S,description:C,maxSelections:w,sortOptions:T=!1,searchDebounce:E=300},D)=>{let[O,k]=s.useState(!1),[A,j]=s.useState(``),[M,N]=s.useState(e),[P,F]=s.useState(!1),I=s.useRef(void 0);s.useEffect(()=>{f||N(e)},[e,f]);let L=s.useMemo(()=>u?Array.isArray(u)?u:[u]:[],[u]);s.useEffect(()=>{if(f){if(I.current&&clearTimeout(I.current),!A.trim()){N(e);return}return I.current=setTimeout(async()=>{F(!0);try{let e=await f(A);N(e)}catch{N([])}finally{F(!1)}},E),()=>{I.current&&clearTimeout(I.current)}}},[A,f,E,e]);let R=s.useMemo(()=>{let e=M;if(!f&&A.trim()){let t=A.toLowerCase();e=M.filter(e=>e.label.toLowerCase().includes(t)||e.value.toLowerCase().includes(t))}return T&&(e=[...e].sort((e,t)=>e.label.localeCompare(t.label))),e},[M,A,f,T]),z=s.useMemo(()=>{let e={_ungrouped:[]};for(let t of R){let n=t.group||`_ungrouped`;e[n]||(e[n]=[]),e[n].push(t)}return e},[R]),B=m&&A.trim()&&!M.some(e=>e.value.toLowerCase()===A.toLowerCase()),V=e=>{if(p){let t=L.includes(e)?L.filter(t=>t!==e):w&&L.length>=w?L:[...L,e];d?.(t.length>0?t:null)}else d?.(e===u?null:e),k(!1);j(``)},H=()=>{if(!A.trim())return;let e={value:A.trim(),label:A.trim()};N(t=>[...t,e]),V(e.value),h?.(e.value)},U=(e,t)=>{t.stopPropagation();let n=L.filter(t=>t!==e);d?.(n.length>0?n:null)},W=e=>M.find(t=>t.value===e)?.label||e,G=P||v;return(0,l.jsxs)(`div`,{className:t.cn(`space-y-1.5`,x),children:[S&&(0,l.jsx)(a.Label,{children:S}),C&&(0,l.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:C}),(0,l.jsxs)(o.Popover,{open:O,onOpenChange:k,children:[(0,l.jsx)(o.PopoverTrigger,{asChild:!0,children:(0,l.jsxs)(r.Button,{ref:D,variant:`outline`,role:`combobox`,"aria-expanded":O,disabled:y,className:t.cn(`w-full justify-between font-normal`,!u&&`text-muted-foreground`,b&&`border-destructive`),children:[p?(0,l.jsx)(`div`,{className:`flex flex-wrap gap-1 flex-1 min-w-0`,children:L.length>0?L.map(e=>(0,l.jsxs)(n.Badge,{variant:`secondary`,className:`text-xs`,children:[W(e),(0,l.jsx)(`button`,{className:`ml-1 hover:text-destructive`,onClick:t=>U(e,t),children:(0,l.jsx)(c.X,{className:`h-3 w-3`})})]},e)):(0,l.jsx)(`span`,{children:g})}):(0,l.jsx)(`span`,{className:`truncate`,children:u?W(u):g}),G?(0,l.jsx)(c.Loader2,{className:`ml-2 h-4 w-4 shrink-0 animate-spin`}):(0,l.jsx)(c.ChevronsUpDown,{className:`ml-2 h-4 w-4 shrink-0 opacity-50`})]})}),(0,l.jsx)(o.PopoverContent,{className:`w-[var(--radix-popover-trigger-width)] p-0`,align:`start`,children:(0,l.jsxs)(i.Command,{shouldFilter:!1,children:[(0,l.jsx)(i.CommandInput,{placeholder:`Rechercher...`,value:A,onValueChange:j}),(0,l.jsxs)(i.CommandList,{children:[G&&(0,l.jsxs)(`div`,{className:`py-6 text-center text-sm`,children:[(0,l.jsx)(c.Loader2,{className:`h-4 w-4 animate-spin mx-auto mb-2`}),`Chargement...`]}),!G&&R.length===0&&!B&&(0,l.jsx)(i.CommandEmpty,{children:_}),B&&(0,l.jsx)(i.CommandGroup,{children:(0,l.jsxs)(i.CommandItem,{onSelect:H,className:`cursor-pointer`,children:[(0,l.jsx)(c.Plus,{className:`mr-2 h-4 w-4`}),`Créer "`,A,`"`]})}),Object.entries(z).map(([e,n])=>n.length===0?null:(0,l.jsx)(i.CommandGroup,{heading:e===`_ungrouped`?void 0:e,children:n.map(e=>(0,l.jsxs)(i.CommandItem,{value:e.value,onSelect:()=>V(e.value),disabled:e.disabled,className:`cursor-pointer`,children:[(0,l.jsx)(c.Check,{className:t.cn(`mr-2 h-4 w-4`,L.includes(e.value)?`opacity-100`:`opacity-0`)}),e.label]},e.value))},e))]})]})})]}),b&&(0,l.jsx)(`p`,{className:`text-sm text-destructive`,children:b})]})});u.displayName=`WakaAutocomplete`;var d=s.forwardRef((e,t)=>(0,l.jsx)(u,{ref:t,...e}));d.displayName=`WakaAutocompleteForm`,exports.WakaAutocomplete=u,exports.default=u,exports.WakaAutocompleteForm=d;
|
|
@@ -25,7 +25,8 @@ var y = d.forwardRef(({ options: y, value: b, onChange: x, onSearch: S, multiple
|
|
|
25
25
|
return K.current = setTimeout(async () => {
|
|
26
26
|
G(!0);
|
|
27
27
|
try {
|
|
28
|
-
|
|
28
|
+
let e = await S(B);
|
|
29
|
+
U(e);
|
|
29
30
|
} catch {
|
|
30
31
|
U([]);
|
|
31
32
|
} finally {
|
|
@@ -167,4 +168,4 @@ var b = d.forwardRef((e, t) => /* @__PURE__ */ _(y, {
|
|
|
167
168
|
}));
|
|
168
169
|
b.displayName = "WakaAutocompleteForm";
|
|
169
170
|
//#endregion
|
|
170
|
-
export {
|
|
171
|
+
export { y as WakaAutocomplete, y as default, b as WakaAutocompleteForm };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use client";"use client";const e=require(
|
|
1
|
+
"use client";"use client";const e=require("../../_virtual/_rolldown/runtime.cjs.js"),t=require("../../utils/cn.cjs.js");let n=require("react");n=e.__toESM(n);let r=require("react/jsx-runtime");var i={common:{gradient:`from-slate-400 to-slate-500`,glow:`hsl(var(--muted-foreground))`,border:`border-slate-400`,bg:`bg-slate-100 dark:bg-slate-800`,text:`text-slate-600 dark:text-slate-300`,shine:`hsl(var(--muted-foreground) / 0.6)`,label:`Common`},rare:{gradient:`from-blue-400 to-blue-600`,glow:`hsl(var(--info))`,border:`border-blue-400`,bg:`bg-blue-100 dark:bg-blue-900`,text:`text-blue-600 dark:text-blue-300`,shine:`hsl(var(--info) / 0.6)`,label:`Rare`},epic:{gradient:`from-purple-400 to-purple-600`,glow:`hsl(var(--chart-3))`,border:`border-purple-400`,bg:`bg-purple-100 dark:bg-purple-900`,text:`text-purple-600 dark:text-purple-300`,shine:`hsl(var(--chart-3) / 0.6)`,label:`Epic`},legendary:{gradient:`from-amber-400 via-orange-500 to-red-500`,glow:`hsl(var(--warning))`,border:`border-amber-400`,bg:`bg-amber-100 dark:bg-amber-900`,text:`text-amber-600 dark:text-amber-300`,shine:`hsl(var(--warning) / 0.8)`,label:`Legendary`}},a={sm:{badge:`h-12 w-12`,icon:`h-6 w-6`,text:`text-xs`,gap:`gap-2`},md:{badge:`h-16 w-16`,icon:`h-8 w-8`,text:`text-sm`,gap:`gap-3`},lg:{badge:`h-24 w-24`,icon:`h-12 w-12`,text:`text-base`,gap:`gap-4`}};function o({active:e,color:t}){return e?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(`div`,{className:`absolute inset-0 overflow-hidden rounded-full`,children:(0,r.jsx)(`div`,{className:`absolute inset-0 animate-badge-shine`,style:{background:`linear-gradient(
|
|
2
2
|
90deg,
|
|
3
3
|
transparent 0%,
|
|
4
4
|
${t} 50%,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";"use client";const e=require(
|
|
1
|
+
"use client";"use client";const e=require("../../_virtual/_rolldown/runtime.cjs.js"),t=require("../../utils/cn.cjs.js"),n=require("../button/index.cjs.js");let r=require("react");r=e.__toESM(r);let i=require("lucide-react"),a=require("react/jsx-runtime");var o={" ":`11011001100`,"!":`11001101100`,'"':`11001100110`,"#":`10010011000`,$:`10010001100`,"%":`10001001100`,"&":`10011001000`,"'":`10011000100`,"(":`10001100100`,")":`11001001000`,"*":`11001000100`,"+":`11000100100`,",":`10110011100`,"-":`10011011100`,".":`10011001110`,"/":`10111001100`,0:`10011101100`,1:`10011100110`,2:`11001110010`,3:`11001011100`,4:`11001001110`,5:`11011100100`,6:`11001110100`,7:`11101101110`,8:`11101001100`,9:`11100101100`,":":`11100100110`,";":`11101100100`,"<":`11100110100`,"=":`11100110010`,">":`11011011000`,"?":`11011000110`,"@":`11000110110`,A:`10100011000`,B:`10001011000`,C:`10001000110`,D:`10110001000`,E:`10001101000`,F:`10001100010`,G:`11010001000`,H:`11000101000`,I:`11000100010`,J:`10110111000`,K:`10110001110`,L:`10001101110`,M:`10111011000`,N:`10111000110`,O:`10001110110`,P:`11101110110`,Q:`11010001110`,R:`11000101110`,S:`11011101000`,T:`11011100010`,U:`11011101110`,V:`11101011000`,W:`11101000110`,X:`11100010110`,Y:`11101101000`,Z:`11101100010`},s=`11010000100`,c=`1100011101011`;function l(e){let t=s;for(let n of e.toUpperCase()){let e=o[n];e?t+=e:t+=o[`?`]}return t+=s,t+=c,t}var u={0:`101001101101`,1:`110100101011`,2:`101100101011`,3:`110110010101`,4:`101001101011`,5:`110100110101`,6:`101100110101`,7:`101001011011`,8:`110100101101`,9:`101100101101`,A:`110101001011`,B:`101101001011`,C:`110110100101`,D:`101011001011`,E:`110101100101`,F:`101101100101`,G:`101010011011`,H:`110101001101`,I:`101101001101`,J:`101011001101`,K:`110101010011`,L:`101101010011`,M:`110110101001`,N:`101011010011`,O:`110101101001`,P:`101101101001`,Q:`101010110011`,R:`110101011001`,S:`101101011001`,T:`101011011001`,U:`110010101011`,V:`100110101011`,W:`110011010101`,X:`100101101011`,Y:`110010110101`,Z:`100110110101`,"-":`100101011011`,".":`110010101101`," ":`100110101101`,"*":`100101101101`};function d(e){let t=u[`*`]+`0`;for(let n of e.toUpperCase()){let e=u[n];e&&(t+=e+`0`)}return t+=u[`*`],t}function f(e,t){switch(t){case`CODE128`:return l(e);case`CODE39`:return d(e);case`EAN13`:case`EAN8`:case`UPC`:case`ITF14`:return l(e);default:return l(e)}}function p({value:e,format:o=`CODE128`,width:s=200,height:c=80,displayValue:l=!0,lineColor:u=`#000000`,background:d=`#FFFFFF`,fontSize:p=14,margin:m=10,showActions:h=!1,className:g}){let _=r.useRef(null),[v,y]=r.useState(!1);return r.useEffect(()=>{let t=_.current;if(!t||!e)return;let n=t.getContext(`2d`);if(!n)return;let r=f(e,o),i=c-(l?p+4:0)-m*2,a=(s-m*2)/r.length;n.fillStyle=d,n.fillRect(0,0,s,c),n.fillStyle=u;for(let e=0;e<r.length;e++)r[e]===`1`&&n.fillRect(m+e*a,m,a,i);l&&(n.fillStyle=u,n.font=`${p}px monospace`,n.textAlign=`center`,n.textBaseline=`bottom`,n.fillText(e,s/2,c-m+2))},[e,o,s,c,l,u,d,p,m]),(0,a.jsxs)(`div`,{className:t.cn(`inline-flex flex-col items-center gap-2`,g),children:[(0,a.jsx)(`canvas`,{ref:_,width:s,height:c,className:`rounded border`,style:{width:s,height:c}}),h&&(0,a.jsxs)(`div`,{className:`flex gap-2`,children:[(0,a.jsxs)(n.Button,{variant:`outline`,size:`sm`,onClick:()=>{let t=_.current;if(!t)return;let n=document.createElement(`a`);n.download=`barcode-${e}-${Date.now()}.png`,n.href=t.toDataURL(`image/png`),n.click()},children:[(0,a.jsx)(i.Download,{className:`h-4 w-4 mr-1`}),`Télécharger`]}),(0,a.jsxs)(n.Button,{variant:`outline`,size:`sm`,onClick:async()=>{let e=_.current;if(e)try{let t=await new Promise(t=>{e.toBlob(e=>{e&&t(e)},`image/png`)});await navigator.clipboard.write([new ClipboardItem({"image/png":t})]),y(!0),setTimeout(()=>y(!1),2e3)}catch(e){console.error(`Failed to copy barcode:`,e)}},children:[v?(0,a.jsx)(i.Check,{className:`h-4 w-4 mr-1`}):(0,a.jsx)(i.Copy,{className:`h-4 w-4 mr-1`}),v?`Copié`:`Copier`]})]})]})}exports.WakaBarcode=p,exports.default=p;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use client";"use client";const e=require(
|
|
1
|
+
"use client";"use client";const e=require("../../_virtual/_rolldown/runtime.cjs.js"),t=require("../../utils/cn.cjs.js");let n=require("react");n=e.__toESM(n);let r=require("lucide-react"),i=require("react/jsx-runtime");function a(e={}){let{initialType:t=`fingerprint`,scanningDuration:r=2e3,successRate:i=.9,onSuccess:a,onError:o,authenticate:s}=e,[c,l]=n.useState(`idle`),[u,d]=n.useState(t),[f,p]=n.useState(null),m=n.useRef(null),h=n.useCallback(()=>{m.current&&=(clearTimeout(m.current),null)},[]),g=n.useCallback(()=>{h(),l(`idle`),p(null)},[h]),_=n.useCallback(()=>{h(),l(`idle`),p(null)},[h]),v=n.useCallback(async()=>{h(),l(`scanning`),p(null);try{if(s)if(await s())l(`success`),a?.();else{l(`error`);let e=`Authentication failed. Please try again.`;p(e),o?.(e)}else await new Promise(e=>{m.current=setTimeout(()=>{if(Math.random()<i)l(`success`),a?.();else{l(`error`);let e=`Authentication failed. Please try again.`;p(e),o?.(e)}e()},r)})}catch(e){l(`error`);let t=e instanceof Error?e.message:`An unexpected error occurred.`;p(t),o?.(t)}},[s,h,o,a,r,i]),y=n.useCallback(()=>{v()},[v]);return n.useEffect(()=>()=>{h()},[h]),{state:c,selectedType:u,errorMessage:f,setSelectedType:d,startAuthentication:v,retry:y,reset:g,cancel:_}}var o=[{type:`fingerprint`,label:`Fingerprint`},{type:`face`,label:`Face ID`}],s={fingerprint:(0,i.jsx)(r.Fingerprint,{className:`h-full w-full`}),face:(0,i.jsx)(r.ScanFace,{className:`h-full w-full`}),iris:(0,i.jsx)(r.ScanFace,{className:`h-full w-full`}),voice:(0,i.jsx)(r.ScanFace,{className:`h-full w-full`})},c={sm:{container:`p-4 max-w-xs`,icon:`h-12 w-12`,iconInner:`h-8 w-8`,title:`text-base`,description:`text-xs`,button:`h-8 px-3 text-xs`,typeButton:`h-8 w-8`},md:{container:`p-6 max-w-sm`,icon:`h-20 w-20`,iconInner:`h-12 w-12`,title:`text-lg`,description:`text-sm`,button:`h-10 px-4 text-sm`,typeButton:`h-10 w-10`},lg:{container:`p-8 max-w-md`,icon:`h-28 w-28`,iconInner:`h-16 w-16`,title:`text-xl`,description:`text-base`,button:`h-12 px-6 text-base`,typeButton:`h-12 w-12`}},l={default:{background:`bg-background`,text:`text-foreground`,muted:`text-muted-foreground`,primary:`text-primary`,success:`text-green-500`,error:`text-destructive`,iconBg:`bg-muted`,iconBgScanning:`bg-primary/10`,iconBgSuccess:`bg-green-500/10`,iconBgError:`bg-destructive/10`,button:`bg-primary text-primary-foreground hover:bg-primary/90`,buttonOutline:`border border-input bg-background hover:bg-accent hover:text-accent-foreground`,buttonGhost:`hover:bg-accent hover:text-accent-foreground`},primary:{background:`bg-primary`,text:`text-primary-foreground`,muted:`text-primary-foreground/70`,primary:`text-primary-foreground`,success:`text-green-300`,error:`text-red-300`,iconBg:`bg-primary-foreground/10`,iconBgScanning:`bg-primary-foreground/20`,iconBgSuccess:`bg-green-400/20`,iconBgError:`bg-red-400/20`,button:`bg-primary-foreground text-primary hover:bg-primary-foreground/90`,buttonOutline:`border border-primary-foreground/30 bg-transparent hover:bg-primary-foreground/10`,buttonGhost:`hover:bg-primary-foreground/10`},dark:{background:`bg-zinc-900`,text:`text-zinc-100`,muted:`text-zinc-400`,primary:`text-blue-400`,success:`text-green-400`,error:`text-red-400`,iconBg:`bg-zinc-800`,iconBgScanning:`bg-blue-500/20`,iconBgSuccess:`bg-green-500/20`,iconBgError:`bg-red-500/20`,button:`bg-blue-500 text-white hover:bg-blue-600`,buttonOutline:`border border-zinc-700 bg-transparent hover:bg-zinc-800`,buttonGhost:`hover:bg-zinc-800`}};function u({type:e,size:n,colorScheme:r}){let a=l[r],o=c[n];return(0,i.jsxs)(`div`,{className:`absolute inset-0 flex items-center justify-center`,children:[(0,i.jsx)(`div`,{className:t.cn(`absolute rounded-full animate-ping`,a.iconBgScanning,o.icon),style:{animationDuration:`1.5s`}}),(0,i.jsx)(`div`,{className:t.cn(`absolute rounded-full animate-ping`,a.iconBgScanning,o.icon),style:{animationDuration:`1.5s`,animationDelay:`0.5s`}}),e===`fingerprint`&&(0,i.jsx)(`div`,{className:t.cn(`absolute h-0.5 rounded-full animate-scan-line`,r==="default"?`bg-primary`:r===`primary`?`bg-primary-foreground`:`bg-blue-400`),style:{width:`70%`}}),e===`face`&&(0,i.jsx)(`div`,{className:`absolute inset-2 border-2 border-dashed rounded-lg animate-pulse`,style:{borderColor:r==="default"?`hsl(var(--primary))`:r===`primary`?`hsl(var(--primary-foreground))`:`#60a5fa`}})]})}function d({size:e,colorScheme:n}){let a=l[n],o=c[e];return(0,i.jsx)(`div`,{className:t.cn(`flex items-center justify-center rounded-full animate-success-pop`,a.iconBgSuccess,o.icon),children:(0,i.jsx)(r.Check,{className:t.cn(o.iconInner,a.success),strokeWidth:3})})}function f({size:e,colorScheme:n}){let a=l[n],o=c[e];return(0,i.jsx)(`div`,{className:t.cn(`flex items-center justify-center rounded-full animate-error-shake`,a.iconBgError,o.icon),children:(0,i.jsx)(r.AlertCircle,{className:t.cn(o.iconInner,a.error),strokeWidth:2})})}function p({types:e,selectedType:n,onTypeChange:r,disabled:a,size:o,colorScheme:u}){let d=l[u],f=c[o];return e.length<=1?null:(0,i.jsx)(`div`,{className:`flex items-center justify-center gap-2 mt-4`,role:`radiogroup`,"aria-label":`Biometric type selection`,children:e.map(e=>{let c=e.type===n,l=e.icon||s[e.type];return(0,i.jsx)(`button`,{type:`button`,role:`radio`,"aria-checked":c,"aria-label":e.label||e.type,disabled:a,onClick:()=>r(e.type),className:t.cn(`flex items-center justify-center rounded-full transition-all`,`focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2`,f.typeButton,c?t.cn(d.button):t.cn(d.buttonGhost,d.muted),a&&`opacity-50 cursor-not-allowed`),children:(0,i.jsx)(`div`,{className:t.cn(o===`sm`?`h-4 w-4`:o===`md`?`h-5 w-5`:`h-6 w-6`),children:l})},e.type)})})}var m=n.forwardRef(({biometricTypes:e=o,selectedType:a,onTypeChange:m,title:h=`Use biometrics`,description:g=`Authenticate using your biometric data`,state:_=`idle`,errorMessage:v,onAuthenticate:y,onRetry:b,onCancel:x,onFallbackToPassword:S,showPasswordFallback:C=!0,showCancel:w=!0,successMessage:T=`Authentication successful`,className:E,size:D=`md`,colorScheme:O=`default`},k)=>{let[A,j]=n.useState(e[0]?.type||`fingerprint`),M=a??A,N=m??j,P=l[O],F=c[D],I=e.find(e=>e.type===M)||e[0],L=I?.icon||s[M],R=_===`scanning`||_===`success`;return(0,i.jsxs)(`div`,{ref:k,className:t.cn(`flex flex-col items-center rounded-2xl shadow-lg`,P.background,F.container,E),role:`dialog`,"aria-labelledby":`biometric-title`,"aria-describedby":`biometric-description`,onKeyDown:e=>{e.key===`Enter`||e.key===` `?(e.preventDefault(),_===`idle`?y?.():_===`error`&&b?.()):e.key===`Escape`&&(e.preventDefault(),x?.())},children:[(0,i.jsxs)(`div`,{className:`relative flex items-center justify-center mb-4`,children:[_===`idle`&&(0,i.jsx)(`button`,{type:`button`,onClick:y,disabled:R,className:t.cn(`flex items-center justify-center rounded-full transition-all`,`focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2`,`hover:scale-105 active:scale-95`,P.iconBg,P.primary,F.icon),"aria-label":`Authenticate with ${I?.label||M}`,children:(0,i.jsx)(`div`,{className:F.iconInner,children:L})}),_===`scanning`&&(0,i.jsxs)(`div`,{className:t.cn(`relative flex items-center justify-center rounded-full`,P.iconBgScanning,P.primary,F.icon),children:[(0,i.jsx)(`div`,{className:t.cn(F.iconInner,`animate-pulse`),children:L}),(0,i.jsx)(u,{type:M,size:D,colorScheme:O})]}),_===`success`&&(0,i.jsx)(d,{size:D,colorScheme:O}),_===`error`&&(0,i.jsx)(f,{size:D,colorScheme:O})]}),(0,i.jsx)(`h2`,{id:`biometric-title`,className:t.cn(`font-semibold text-center`,P.text,F.title),children:_===`success`?T:_===`error`?`Authentication failed`:h}),(0,i.jsxs)(`p`,{id:`biometric-description`,className:t.cn(`text-center mt-1`,P.muted,F.description),children:[_===`scanning`&&`Scanning ${I?.label||M}...`,_===`error`&&(v||`Please try again`),_===`success`&&`You can now proceed`,_===`idle`&&g]}),_===`idle`&&(0,i.jsx)(p,{types:e,selectedType:M,onTypeChange:N,disabled:R,size:D,colorScheme:O}),_===`scanning`&&(0,i.jsxs)(`div`,{className:t.cn(`flex items-center gap-2 mt-4`,P.muted),children:[(0,i.jsx)(r.Loader2,{className:`h-4 w-4 animate-spin`}),(0,i.jsx)(`span`,{className:F.description,children:`Processing...`})]}),(0,i.jsxs)(`div`,{className:`flex flex-col items-center gap-2 mt-6 w-full`,children:[_===`error`&&b&&(0,i.jsxs)(`button`,{type:`button`,onClick:b,className:t.cn(`inline-flex items-center justify-center gap-2 rounded-lg font-medium transition-colors`,`focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2`,P.button,F.button,`w-full`),"aria-label":`Retry authentication`,children:[(0,i.jsx)(r.RefreshCw,{className:`h-4 w-4`}),`Try again`]}),_===`idle`&&C&&S&&(0,i.jsxs)(`button`,{type:`button`,onClick:S,className:t.cn(`inline-flex items-center justify-center gap-2 rounded-lg font-medium transition-colors`,`focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2`,P.buttonOutline,F.button,`w-full`),"aria-label":`Use password instead`,children:[(0,i.jsx)(r.KeyRound,{className:`h-4 w-4`}),`Use password instead`]}),(_===`idle`||_===`error`)&&w&&x&&(0,i.jsxs)(`button`,{type:`button`,onClick:x,className:t.cn(`inline-flex items-center justify-center gap-2 rounded-lg font-medium transition-colors`,`focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2`,P.buttonGhost,P.muted,F.button),"aria-label":`Cancel authentication`,children:[(0,i.jsx)(r.X,{className:`h-4 w-4`}),`Cancel`]})]})]})});if(m.displayName=`WakaBiometricPrompt`,typeof document<`u`){let e=`waka-biometric-prompt-styles`;if(!document.getElementById(e)){let t=document.createElement(`style`);t.id=e,t.textContent=`
|
|
2
2
|
@keyframes scan-line {
|
|
3
3
|
0%, 100% {
|
|
4
4
|
transform: translateY(-200%);
|
|
@@ -49,4 +49,4 @@
|
|
|
49
49
|
.animate-error-shake {
|
|
50
50
|
animation: error-shake 0.5s ease-in-out;
|
|
51
51
|
}
|
|
52
|
-
`,document.head.appendChild(t)}}exports.default=m,exports.useBiometricPrompt=a;
|
|
52
|
+
`,document.head.appendChild(t)}}exports.WakaBiometricPrompt=m,exports.default=m,exports.useBiometricPrompt=a;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";"use client";const e=require(
|
|
1
|
+
"use client";"use client";const e=require("../../_virtual/_rolldown/runtime.cjs.js"),t=require("../../utils/cn.cjs.js");let n=require("react");n=e.__toESM(n);let r=require("class-variance-authority"),i=require("react/jsx-runtime");var a=(0,r.cva)(`fixed inset-x-0 bottom-0 z-50 flex flex-col bg-background touch-none`,{variants:{variant:{default:`rounded-t-2xl shadow-2xl border-t border-border`,flat:`shadow-lg`,glass:`rounded-t-2xl bg-background/80 backdrop-blur-xl border-t border-white/20`}},defaultVariants:{variant:`default`}}),o=(0,r.cva)(`fixed inset-0 z-40 transition-opacity`,{variants:{variant:{default:`bg-black/50`,blur:`bg-black/30 backdrop-blur-sm`,none:`bg-transparent pointer-events-none`}},defaultVariants:{variant:`default`}}),s=(0,r.cva)(`mx-auto mt-3 mb-2 rounded-full bg-muted transition-colors`,{variants:{size:{sm:`w-8 h-1`,default:`w-12 h-1.5`,lg:`w-16 h-2`}},defaultVariants:{size:`default`}});function c(e=`light`){typeof window<`u`&&`vibrate`in navigator&&navigator.vibrate({light:10,medium:20,heavy:30}[e])}function l(e,t,n){return Math.min(Math.max(e,t),n)}var u=n.forwardRef(({open:e,onOpenChange:r,snapPoints:u=[25,50,90],defaultSnapPoint:d=0,snapPoint:f,onSnapPointChange:p,showBackdrop:m=!0,closeOnBackdropClick:h=!0,showHandle:g=!0,blockScroll:_=!0,hapticFeedback:v=!0,header:y,footer:b,children:x,onDragStart:S,onDragEnd:C,animationDuration:w=300,closeOnEscape:T=!0,variant:E,className:D,...O},k)=>{let A=n.useRef(null),j=n.useRef(null),[M,N]=n.useState(d),[P,F]=n.useState(!1),[I,L]=n.useState({y:0,height:0}),[R,z]=n.useState(0),[B,ee]=n.useState(0),[V,H]=n.useState(!1),U=f??M,W=n.useCallback(e=>{N(e),p?.(e)},[p]);n.useImperativeHandle(k,()=>A.current);let G=n.useCallback(e=>e===`full`?B:e===`content`?j.current?.scrollHeight??B*.5:e/100*B,[B]),K=n.useMemo(()=>u.map(G),[u,G]);n.useEffect(()=>{let e=()=>ee(window.innerHeight);return e(),window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[]),n.useEffect(()=>{if(e&&B>0){let e=K[U]??K[0];z(e)}},[e,B,K,U]),n.useEffect(()=>{if(_&&e){let e=document.body.style.overflow;return document.body.style.overflow=`hidden`,()=>{document.body.style.overflow=e}}},[_,e]),n.useEffect(()=>{if(!T||!e)return;let t=e=>{e.key===`Escape`&&r(!1)};return document.addEventListener(`keydown`,t),()=>document.removeEventListener(`keydown`,t)},[T,e,r]);let q=n.useCallback(e=>{let t=0,n=1/0;return K.forEach((r,i)=>{let a=Math.abs(e-r);a<n&&(n=a,t=i)}),t},[K]),J=n.useCallback(e=>{V||(F(!0),L({y:e,height:R}),S?.())},[V,R,S]),Y=n.useCallback(e=>{if(!P)return;let t=I.y-e,n=l(I.height+t,0,B);z(n)},[P,I,B]),X=n.useCallback(()=>{if(!P)return;F(!1);let e=K[0]*.5;if(R<e){H(!0),z(0),setTimeout(()=>{r(!1),H(!1)},w),C?.(-1);return}let t=q(R),n=K[t];v&&t!==U&&c(`light`),H(!0),z(n),W(t),setTimeout(()=>{H(!1)},w),C?.(t)},[P,R,K,q,v,U,w,r,C,W]),Z=n.useCallback(e=>{J(e.touches[0].clientY)},[J]),Q=n.useCallback(e=>{Y(e.touches[0].clientY)},[Y]),$=n.useCallback(()=>{X()},[X]),te=n.useCallback(e=>{J(e.clientY),e.preventDefault()},[J]);n.useEffect(()=>{if(!P)return;let e=e=>{Y(e.clientY)},t=()=>{X()};return document.addEventListener(`mousemove`,e),document.addEventListener(`mouseup`,t),()=>{document.removeEventListener(`mousemove`,e),document.removeEventListener(`mouseup`,t)}},[P,Y,X]);let ne=n.useCallback(()=>{h&&r(!1)},[h,r]);n.useCallback(e=>{if(e<0||e>=u.length)return;let t=K[e];H(!0),z(t),W(e),v&&c(`light`),setTimeout(()=>{H(!1)},w)},[u.length,K,v,w,W]);let re=e?l(R/(B*.5),0,1):0;return!e&&R===0?null:(0,i.jsxs)(i.Fragment,{children:[m&&(0,i.jsx)(`div`,{className:t.cn(o({variant:`default`})),style:{opacity:re,transition:V||!P?`opacity ${w}ms ease-out`:`none`},onClick:ne,"aria-hidden":`true`}),(0,i.jsxs)(`div`,{ref:A,role:`dialog`,"aria-modal":`true`,className:t.cn(a({variant:E}),D),style:{height:R,maxHeight:B,transition:V||!P?`height ${w}ms ease-out`:`none`},...O,children:[g&&(0,i.jsx)(`div`,{className:`flex-shrink-0 cursor-grab active:cursor-grabbing`,onTouchStart:Z,onTouchMove:Q,onTouchEnd:$,onTouchCancel:$,onMouseDown:te,children:(0,i.jsx)(`div`,{className:t.cn(s({size:`default`}))})}),y&&(0,i.jsx)(`div`,{className:`flex-shrink-0 px-4 pb-2 border-b border-border`,children:y}),(0,i.jsx)(`div`,{ref:j,className:`flex-1 overflow-auto overscroll-contain px-4 py-2`,children:x}),b&&(0,i.jsx)(`div`,{className:`flex-shrink-0 px-4 pt-2 pb-4 border-t border-border safe-area-inset-bottom`,children:b})]})]})});u.displayName=`WakaBottomSheet`;function d(e={}){let{defaultOpen:t=!1,defaultSnapPoint:r=0,onOpenChange:i,onSnapPointChange:a}=e,[o,s]=n.useState(t),[c,l]=n.useState(r);return{open:o,snapPoint:c,onOpenChange:n.useCallback(e=>{s(e),i?.(e)},[i]),onSnapPointChange:n.useCallback(e=>{l(e),a?.(e)},[a]),openSheet:n.useCallback(e=>{e!==void 0&&l(e),s(!0)},[]),closeSheet:n.useCallback(()=>{s(!1)},[]),toggleSheet:n.useCallback(()=>{s(e=>!e)},[])}}exports.WakaBottomSheet=u,exports.useBottomSheet=d;
|