@burdenoff/microfe-kadaikodi 2026.704.4 → 2026.710.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/generated/global-operations.d.ts +2 -0
- package/dist/generated/global-operations.d.ts.map +1 -0
- package/dist/generated/global-types.d.ts +23527 -0
- package/dist/generated/global-types.d.ts.map +1 -0
- package/dist/generated/wspace-operations.d.ts +2 -0
- package/dist/generated/wspace-operations.d.ts.map +1 -0
- package/dist/generated/wspace-types.d.ts +57851 -0
- package/dist/generated/wspace-types.d.ts.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -1
- package/dist/kadaikodi/KadaikodiRoot.d.ts +5 -0
- package/dist/kadaikodi/KadaikodiRoot.d.ts.map +1 -0
- package/dist/kadaikodi/KadaikodiRoutes.d.ts +4 -0
- package/dist/kadaikodi/KadaikodiRoutes.d.ts.map +1 -0
- package/dist/kadaikodi/KadaikodiRoutes.js +30 -26
- package/dist/kadaikodi/KadaikodiRoutes.js.map +1 -1
- package/dist/kadaikodi/components/CartCard.d.ts +18 -0
- package/dist/kadaikodi/components/CartCard.d.ts.map +1 -0
- package/dist/kadaikodi/components/EmptyState.d.ts +17 -0
- package/dist/kadaikodi/components/EmptyState.d.ts.map +1 -0
- package/dist/kadaikodi/components/InvestmentCard.d.ts +18 -0
- package/dist/kadaikodi/components/InvestmentCard.d.ts.map +1 -0
- package/dist/kadaikodi/components/MetricsCard.d.ts +16 -0
- package/dist/kadaikodi/components/MetricsCard.d.ts.map +1 -0
- package/dist/kadaikodi/components/OrderCard.d.ts +18 -0
- package/dist/kadaikodi/components/OrderCard.d.ts.map +1 -0
- package/dist/kadaikodi/components/PageLayout.d.ts +12 -0
- package/dist/kadaikodi/components/PageLayout.d.ts.map +1 -0
- package/dist/kadaikodi/components/RatingDisplay.d.ts +12 -0
- package/dist/kadaikodi/components/RatingDisplay.d.ts.map +1 -0
- package/dist/kadaikodi/components/StatusBadge.d.ts +9 -0
- package/dist/kadaikodi/components/StatusBadge.d.ts.map +1 -0
- package/dist/kadaikodi/components/index.d.ts +13 -0
- package/dist/kadaikodi/components/index.d.ts.map +1 -0
- package/dist/kadaikodi/components/viz/AllocationBar.d.ts +21 -0
- package/dist/kadaikodi/components/viz/AllocationBar.d.ts.map +1 -0
- package/dist/kadaikodi/components/viz/AllocationBar.js +68 -0
- package/dist/kadaikodi/components/viz/AllocationBar.js.map +1 -0
- package/dist/kadaikodi/components/viz/AreaChart.d.ts +18 -0
- package/dist/kadaikodi/components/viz/AreaChart.d.ts.map +1 -0
- package/dist/kadaikodi/components/viz/AreaChart.js +102 -0
- package/dist/kadaikodi/components/viz/AreaChart.js.map +1 -0
- package/dist/kadaikodi/components/viz/AvatarStack.d.ts +13 -0
- package/dist/kadaikodi/components/viz/AvatarStack.d.ts.map +1 -0
- package/dist/kadaikodi/components/viz/AvatarStack.js +36 -0
- package/dist/kadaikodi/components/viz/AvatarStack.js.map +1 -0
- package/dist/kadaikodi/components/viz/BarChart.d.ts +17 -0
- package/dist/kadaikodi/components/viz/BarChart.d.ts.map +1 -0
- package/dist/kadaikodi/components/viz/BarChart.js +83 -0
- package/dist/kadaikodi/components/viz/BarChart.js.map +1 -0
- package/dist/kadaikodi/components/viz/CertificateCard.d.ts +14 -0
- package/dist/kadaikodi/components/viz/CertificateCard.d.ts.map +1 -0
- package/dist/kadaikodi/components/viz/CertificateCard.js +4 -0
- package/dist/kadaikodi/components/viz/DonutChart.d.ts +20 -0
- package/dist/kadaikodi/components/viz/DonutChart.d.ts.map +1 -0
- package/dist/kadaikodi/components/viz/DonutChart.js +109 -0
- package/dist/kadaikodi/components/viz/DonutChart.js.map +1 -0
- package/dist/kadaikodi/components/viz/HBarFunnel.d.ts +17 -0
- package/dist/kadaikodi/components/viz/HBarFunnel.d.ts.map +1 -0
- package/dist/kadaikodi/components/viz/HBarFunnel.js +54 -0
- package/dist/kadaikodi/components/viz/HBarFunnel.js.map +1 -0
- package/dist/kadaikodi/components/viz/Heatmap.d.ts +26 -0
- package/dist/kadaikodi/components/viz/Heatmap.d.ts.map +1 -0
- package/dist/kadaikodi/components/viz/Heatmap.js +3 -0
- package/dist/kadaikodi/components/viz/KanbanBoard.d.ts +17 -0
- package/dist/kadaikodi/components/viz/KanbanBoard.d.ts.map +1 -0
- package/dist/kadaikodi/components/viz/KanbanBoard.js +50 -0
- package/dist/kadaikodi/components/viz/KanbanBoard.js.map +1 -0
- package/dist/kadaikodi/components/viz/LineChart.d.ts +20 -0
- package/dist/kadaikodi/components/viz/LineChart.d.ts.map +1 -0
- package/dist/kadaikodi/components/viz/LineChart.js +4 -0
- package/dist/kadaikodi/components/viz/OrgTree.d.ts +14 -0
- package/dist/kadaikodi/components/viz/OrgTree.d.ts.map +1 -0
- package/dist/kadaikodi/components/viz/OrgTree.js +2 -0
- package/dist/kadaikodi/components/viz/PathSteps.d.ts +17 -0
- package/dist/kadaikodi/components/viz/PathSteps.d.ts.map +1 -0
- package/dist/kadaikodi/components/viz/PathSteps.js +3 -0
- package/dist/kadaikodi/components/viz/ProgressRing.d.ts +20 -0
- package/dist/kadaikodi/components/viz/ProgressRing.d.ts.map +1 -0
- package/dist/kadaikodi/components/viz/ProgressRing.js +68 -0
- package/dist/kadaikodi/components/viz/ProgressRing.js.map +1 -0
- package/dist/kadaikodi/components/viz/RatingStars.d.ts +14 -0
- package/dist/kadaikodi/components/viz/RatingStars.d.ts.map +1 -0
- package/dist/kadaikodi/components/viz/RatingStars.js +51 -0
- package/dist/kadaikodi/components/viz/RatingStars.js.map +1 -0
- package/dist/kadaikodi/components/viz/SegmentedTabs.d.ts +26 -0
- package/dist/kadaikodi/components/viz/SegmentedTabs.d.ts.map +1 -0
- package/dist/kadaikodi/components/viz/SegmentedTabs.js +69 -0
- package/dist/kadaikodi/components/viz/SegmentedTabs.js.map +1 -0
- package/dist/kadaikodi/components/viz/SkillBar.d.ts +17 -0
- package/dist/kadaikodi/components/viz/SkillBar.d.ts.map +1 -0
- package/dist/kadaikodi/components/viz/SkillBar.js +3 -0
- package/dist/kadaikodi/components/viz/Sparkline.d.ts +16 -0
- package/dist/kadaikodi/components/viz/Sparkline.d.ts.map +1 -0
- package/dist/kadaikodi/components/viz/Sparkline.js +74 -0
- package/dist/kadaikodi/components/viz/Sparkline.js.map +1 -0
- package/dist/kadaikodi/components/viz/StatCard.d.ts +22 -0
- package/dist/kadaikodi/components/viz/StatCard.d.ts.map +1 -0
- package/dist/kadaikodi/components/viz/StatCard.js +60 -0
- package/dist/kadaikodi/components/viz/StatCard.js.map +1 -0
- package/dist/kadaikodi/components/viz/StepProgress.d.ts +17 -0
- package/dist/kadaikodi/components/viz/StepProgress.d.ts.map +1 -0
- package/dist/kadaikodi/components/viz/StepProgress.js +64 -0
- package/dist/kadaikodi/components/viz/StepProgress.js.map +1 -0
- package/dist/kadaikodi/components/viz/Timeline.d.ts +21 -0
- package/dist/kadaikodi/components/viz/Timeline.d.ts.map +1 -0
- package/dist/kadaikodi/components/viz/Timeline.js +66 -0
- package/dist/kadaikodi/components/viz/Timeline.js.map +1 -0
- package/dist/kadaikodi/components/viz/index.d.ts +35 -0
- package/dist/kadaikodi/components/viz/index.d.ts.map +1 -0
- package/dist/kadaikodi/components/viz/index.js +23 -0
- package/dist/kadaikodi/components/viz/lib/Avatar.d.ts +15 -0
- package/dist/kadaikodi/components/viz/lib/Avatar.d.ts.map +1 -0
- package/dist/kadaikodi/components/viz/lib/Avatar.js +30 -0
- package/dist/kadaikodi/components/viz/lib/Avatar.js.map +1 -0
- package/dist/kadaikodi/components/viz/lib/CartesianFrame.d.ts +44 -0
- package/dist/kadaikodi/components/viz/lib/CartesianFrame.d.ts.map +1 -0
- package/dist/kadaikodi/components/viz/lib/CartesianFrame.js +119 -0
- package/dist/kadaikodi/components/viz/lib/CartesianFrame.js.map +1 -0
- package/dist/kadaikodi/components/viz/lib/ResponsiveSvg.d.ts +27 -0
- package/dist/kadaikodi/components/viz/lib/ResponsiveSvg.d.ts.map +1 -0
- package/dist/kadaikodi/components/viz/lib/ResponsiveSvg.js +35 -0
- package/dist/kadaikodi/components/viz/lib/ResponsiveSvg.js.map +1 -0
- package/dist/kadaikodi/components/viz/lib/format.d.ts +10 -0
- package/dist/kadaikodi/components/viz/lib/format.d.ts.map +1 -0
- package/dist/kadaikodi/components/viz/lib/format.js +21 -0
- package/dist/kadaikodi/components/viz/lib/format.js.map +1 -0
- package/dist/kadaikodi/components/viz/lib/geometry.d.ts +41 -0
- package/dist/kadaikodi/components/viz/lib/geometry.d.ts.map +1 -0
- package/dist/kadaikodi/components/viz/lib/geometry.js +61 -0
- package/dist/kadaikodi/components/viz/lib/geometry.js.map +1 -0
- package/dist/kadaikodi/components/viz/lib/hooks.d.ts +18 -0
- package/dist/kadaikodi/components/viz/lib/hooks.d.ts.map +1 -0
- package/dist/kadaikodi/components/viz/lib/hooks.js +39 -0
- package/dist/kadaikodi/components/viz/lib/hooks.js.map +1 -0
- package/dist/kadaikodi/components/viz/lib/palette.d.ts +31 -0
- package/dist/kadaikodi/components/viz/lib/palette.d.ts.map +1 -0
- package/dist/kadaikodi/components/viz/lib/palette.js +27 -0
- package/dist/kadaikodi/components/viz/lib/palette.js.map +1 -0
- package/dist/kadaikodi/components/viz/lib/types.d.ts +27 -0
- package/dist/kadaikodi/components/viz/lib/types.d.ts.map +1 -0
- package/dist/kadaikodi/context/KadaikodiContext.d.ts +16 -0
- package/dist/kadaikodi/context/KadaikodiContext.d.ts.map +1 -0
- package/dist/kadaikodi/context/index.d.ts +6 -0
- package/dist/kadaikodi/context/index.d.ts.map +1 -0
- package/dist/kadaikodi/hooks/index.d.ts +2 -0
- package/dist/kadaikodi/hooks/index.d.ts.map +1 -0
- package/dist/kadaikodi/hooks/useKadaikodiApi.d.ts +169 -0
- package/dist/kadaikodi/hooks/useKadaikodiApi.d.ts.map +1 -0
- package/dist/kadaikodi/hooks/useKadaikodiApi.js +18 -10
- package/dist/kadaikodi/hooks/useKadaikodiApi.js.map +1 -1
- package/dist/kadaikodi/index.d.ts +11 -0
- package/dist/kadaikodi/index.d.ts.map +1 -0
- package/dist/kadaikodi/pages/HomePage.d.ts +14 -0
- package/dist/kadaikodi/pages/HomePage.d.ts.map +1 -0
- package/dist/kadaikodi/pages/HomePage.js +373 -631
- package/dist/kadaikodi/pages/HomePage.js.map +1 -1
- package/dist/kadaikodi/pages/admin/AdminAnalyticsPage.d.ts +13 -0
- package/dist/kadaikodi/pages/admin/AdminAnalyticsPage.d.ts.map +1 -0
- package/dist/kadaikodi/pages/admin/AdminAnalyticsPage.js +304 -169
- package/dist/kadaikodi/pages/admin/AdminAnalyticsPage.js.map +1 -1
- package/dist/kadaikodi/pages/admin/AdminDashboard.d.ts +13 -0
- package/dist/kadaikodi/pages/admin/AdminDashboard.d.ts.map +1 -0
- package/dist/kadaikodi/pages/admin/AdminDashboard.js +255 -271
- package/dist/kadaikodi/pages/admin/AdminDashboard.js.map +1 -1
- package/dist/kadaikodi/pages/admin/AdminFinancialPage.d.ts +12 -0
- package/dist/kadaikodi/pages/admin/AdminFinancialPage.d.ts.map +1 -0
- package/dist/kadaikodi/pages/admin/AdminFinancialPage.js +185 -125
- package/dist/kadaikodi/pages/admin/AdminFinancialPage.js.map +1 -1
- package/dist/kadaikodi/pages/admin/AdminOrdersPage.d.ts +11 -0
- package/dist/kadaikodi/pages/admin/AdminOrdersPage.d.ts.map +1 -0
- package/dist/kadaikodi/pages/admin/AdminOrdersPage.js +141 -102
- package/dist/kadaikodi/pages/admin/AdminOrdersPage.js.map +1 -1
- package/dist/kadaikodi/pages/admin/AdminProfilePage.d.ts +11 -0
- package/dist/kadaikodi/pages/admin/AdminProfilePage.d.ts.map +1 -0
- package/dist/kadaikodi/pages/admin/AdminSettingsPage.d.ts +10 -0
- package/dist/kadaikodi/pages/admin/AdminSettingsPage.d.ts.map +1 -0
- package/dist/kadaikodi/pages/admin/CartManagementPage.d.ts +13 -0
- package/dist/kadaikodi/pages/admin/CartManagementPage.d.ts.map +1 -0
- package/dist/kadaikodi/pages/admin/CartManagementPage.js +558 -718
- package/dist/kadaikodi/pages/admin/CartManagementPage.js.map +1 -1
- package/dist/kadaikodi/pages/admin/UserManagementPage.d.ts +10 -0
- package/dist/kadaikodi/pages/admin/UserManagementPage.d.ts.map +1 -0
- package/dist/kadaikodi/pages/admin/UserManagementPage.js.map +1 -1
- package/dist/kadaikodi/pages/cart-owner/AnalyticsDashboard.d.ts +13 -0
- package/dist/kadaikodi/pages/cart-owner/AnalyticsDashboard.d.ts.map +1 -0
- package/dist/kadaikodi/pages/cart-owner/AnalyticsDashboard.js +142 -55
- package/dist/kadaikodi/pages/cart-owner/AnalyticsDashboard.js.map +1 -1
- package/dist/kadaikodi/pages/cart-owner/BusinessSettingsPage.d.ts +11 -0
- package/dist/kadaikodi/pages/cart-owner/BusinessSettingsPage.d.ts.map +1 -0
- package/dist/kadaikodi/pages/cart-owner/CartOwnerDashboard.d.ts +12 -0
- package/dist/kadaikodi/pages/cart-owner/CartOwnerDashboard.d.ts.map +1 -0
- package/dist/kadaikodi/pages/cart-owner/CartOwnerDashboard.js +129 -164
- package/dist/kadaikodi/pages/cart-owner/CartOwnerDashboard.js.map +1 -1
- package/dist/kadaikodi/pages/cart-owner/CartOwnerProfilePage.d.ts +12 -0
- package/dist/kadaikodi/pages/cart-owner/CartOwnerProfilePage.d.ts.map +1 -0
- package/dist/kadaikodi/pages/cart-owner/CartServiceConfigPage.d.ts +11 -0
- package/dist/kadaikodi/pages/cart-owner/CartServiceConfigPage.d.ts.map +1 -0
- package/dist/kadaikodi/pages/cart-owner/InventoryManagementPage.d.ts +11 -0
- package/dist/kadaikodi/pages/cart-owner/InventoryManagementPage.d.ts.map +1 -0
- package/dist/kadaikodi/pages/cart-owner/InventoryManagementPage.js +379 -361
- package/dist/kadaikodi/pages/cart-owner/InventoryManagementPage.js.map +1 -1
- package/dist/kadaikodi/pages/cart-owner/InvestmentListingPage.d.ts +2 -0
- package/dist/kadaikodi/pages/cart-owner/InvestmentListingPage.d.ts.map +1 -0
- package/dist/kadaikodi/pages/cart-owner/InvestmentListingPage.js +266 -166
- package/dist/kadaikodi/pages/cart-owner/InvestmentListingPage.js.map +1 -1
- package/dist/kadaikodi/pages/cart-owner/MerchantOnboardingPage.d.ts +2 -0
- package/dist/kadaikodi/pages/cart-owner/MerchantOnboardingPage.d.ts.map +1 -0
- package/dist/kadaikodi/pages/cart-owner/MerchantOnboardingPage.js +373 -0
- package/dist/kadaikodi/pages/cart-owner/MerchantOnboardingPage.js.map +1 -0
- package/dist/kadaikodi/pages/cart-owner/OrderManagementPage.d.ts +10 -0
- package/dist/kadaikodi/pages/cart-owner/OrderManagementPage.d.ts.map +1 -0
- package/dist/kadaikodi/pages/cart-owner/OrderManagementPage.js +288 -161
- package/dist/kadaikodi/pages/cart-owner/OrderManagementPage.js.map +1 -1
- package/dist/kadaikodi/pages/cart-owner/StaffManagementPage.d.ts +12 -0
- package/dist/kadaikodi/pages/cart-owner/StaffManagementPage.d.ts.map +1 -0
- package/dist/kadaikodi/pages/cart-owner/StaffManagementPage.js +180 -181
- package/dist/kadaikodi/pages/cart-owner/StaffManagementPage.js.map +1 -1
- package/dist/kadaikodi/pages/common/HelpSupportPage.d.ts +11 -0
- package/dist/kadaikodi/pages/common/HelpSupportPage.d.ts.map +1 -0
- package/dist/kadaikodi/pages/common/HelpSupportPage.js.map +1 -1
- package/dist/kadaikodi/pages/common/NotificationCenterPage.d.ts +10 -0
- package/dist/kadaikodi/pages/common/NotificationCenterPage.d.ts.map +1 -0
- package/dist/kadaikodi/pages/common/SettingsPage.d.ts +19 -0
- package/dist/kadaikodi/pages/common/SettingsPage.d.ts.map +1 -0
- package/dist/kadaikodi/pages/common/SettingsPage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/BookingDetailsPage.d.ts +12 -0
- package/dist/kadaikodi/pages/customer/BookingDetailsPage.d.ts.map +1 -0
- package/dist/kadaikodi/pages/customer/BookingDetailsPage.js +17 -34
- package/dist/kadaikodi/pages/customer/BookingDetailsPage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/CartDetailPage.d.ts +13 -0
- package/dist/kadaikodi/pages/customer/CartDetailPage.d.ts.map +1 -0
- package/dist/kadaikodi/pages/customer/CartDetailPage.js +405 -248
- package/dist/kadaikodi/pages/customer/CartDetailPage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/CartDiscoveryPage.d.ts +11 -0
- package/dist/kadaikodi/pages/customer/CartDiscoveryPage.d.ts.map +1 -0
- package/dist/kadaikodi/pages/customer/CartDiscoveryPage.js +258 -232
- package/dist/kadaikodi/pages/customer/CartDiscoveryPage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/CheckoutPage.d.ts +9 -0
- package/dist/kadaikodi/pages/customer/CheckoutPage.d.ts.map +1 -0
- package/dist/kadaikodi/pages/customer/CheckoutPage.js +254 -205
- package/dist/kadaikodi/pages/customer/CheckoutPage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/CustomerDashboard.d.ts +10 -0
- package/dist/kadaikodi/pages/customer/CustomerDashboard.d.ts.map +1 -0
- package/dist/kadaikodi/pages/customer/CustomerProfilePage.d.ts +10 -0
- package/dist/kadaikodi/pages/customer/CustomerProfilePage.d.ts.map +1 -0
- package/dist/kadaikodi/pages/customer/DirectServiceBookingPage.d.ts +12 -0
- package/dist/kadaikodi/pages/customer/DirectServiceBookingPage.d.ts.map +1 -0
- package/dist/kadaikodi/pages/customer/DirectServiceBookingPage.js +270 -230
- package/dist/kadaikodi/pages/customer/DirectServiceBookingPage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/FavoritesPage.d.ts +11 -0
- package/dist/kadaikodi/pages/customer/FavoritesPage.d.ts.map +1 -0
- package/dist/kadaikodi/pages/customer/FavoritesPage.js +149 -412
- package/dist/kadaikodi/pages/customer/FavoritesPage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/OrderHistoryPage.d.ts +9 -0
- package/dist/kadaikodi/pages/customer/OrderHistoryPage.d.ts.map +1 -0
- package/dist/kadaikodi/pages/customer/OrderHistoryPage.js +173 -134
- package/dist/kadaikodi/pages/customer/OrderHistoryPage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/OrderTrackingPage.d.ts +9 -0
- package/dist/kadaikodi/pages/customer/OrderTrackingPage.d.ts.map +1 -0
- package/dist/kadaikodi/pages/customer/OrderTrackingPage.js +176 -175
- package/dist/kadaikodi/pages/customer/OrderTrackingPage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/PaymentMethodsPage.d.ts +11 -0
- package/dist/kadaikodi/pages/customer/PaymentMethodsPage.d.ts.map +1 -0
- package/dist/kadaikodi/pages/customer/ReviewsPage.d.ts +12 -0
- package/dist/kadaikodi/pages/customer/ReviewsPage.d.ts.map +1 -0
- package/dist/kadaikodi/pages/customer/ReviewsPage.js +295 -438
- package/dist/kadaikodi/pages/customer/ReviewsPage.js.map +1 -1
- package/dist/kadaikodi/pages/customer/SavedAddressesPage.d.ts +10 -0
- package/dist/kadaikodi/pages/customer/SavedAddressesPage.d.ts.map +1 -0
- package/dist/kadaikodi/pages/customer/shared.d.ts +41 -0
- package/dist/kadaikodi/pages/customer/shared.d.ts.map +1 -0
- package/dist/kadaikodi/pages/customer/shared.js +181 -0
- package/dist/kadaikodi/pages/customer/shared.js.map +1 -0
- package/dist/kadaikodi/pages/investor/InvestmentDetailsPage.d.ts +13 -0
- package/dist/kadaikodi/pages/investor/InvestmentDetailsPage.d.ts.map +1 -0
- package/dist/kadaikodi/pages/investor/InvestmentDetailsPage.js +438 -311
- package/dist/kadaikodi/pages/investor/InvestmentDetailsPage.js.map +1 -1
- package/dist/kadaikodi/pages/investor/InvestmentOpportunitiesPage.d.ts +10 -0
- package/dist/kadaikodi/pages/investor/InvestmentOpportunitiesPage.d.ts.map +1 -0
- package/dist/kadaikodi/pages/investor/InvestmentOpportunitiesPage.js +320 -293
- package/dist/kadaikodi/pages/investor/InvestmentOpportunitiesPage.js.map +1 -1
- package/dist/kadaikodi/pages/investor/InvestorAnalyticsPage.d.ts +11 -0
- package/dist/kadaikodi/pages/investor/InvestorAnalyticsPage.d.ts.map +1 -0
- package/dist/kadaikodi/pages/investor/InvestorAnalyticsPage.js +159 -91
- package/dist/kadaikodi/pages/investor/InvestorAnalyticsPage.js.map +1 -1
- package/dist/kadaikodi/pages/investor/InvestorDashboard.d.ts +10 -0
- package/dist/kadaikodi/pages/investor/InvestorDashboard.d.ts.map +1 -0
- package/dist/kadaikodi/pages/investor/InvestorDashboard.js +137 -107
- package/dist/kadaikodi/pages/investor/InvestorDashboard.js.map +1 -1
- package/dist/kadaikodi/pages/investor/InvestorInvestmentsPage.d.ts +10 -0
- package/dist/kadaikodi/pages/investor/InvestorInvestmentsPage.d.ts.map +1 -0
- package/dist/kadaikodi/pages/investor/InvestorInvestmentsPage.js +157 -135
- package/dist/kadaikodi/pages/investor/InvestorInvestmentsPage.js.map +1 -1
- package/dist/kadaikodi/pages/investor/InvestorPortfolioPage.d.ts +11 -0
- package/dist/kadaikodi/pages/investor/InvestorPortfolioPage.d.ts.map +1 -0
- package/dist/kadaikodi/pages/investor/InvestorPortfolioPage.js +280 -206
- package/dist/kadaikodi/pages/investor/InvestorPortfolioPage.js.map +1 -1
- package/dist/kadaikodi/pages/investor/InvestorProfilePage.d.ts +20 -0
- package/dist/kadaikodi/pages/investor/InvestorProfilePage.d.ts.map +1 -0
- package/dist/kadaikodi/pages/investor/InvestorProfilePage.js.map +1 -1
- package/dist/kadaikodi/pages/worker/TaskDetailsPage.d.ts +18 -0
- package/dist/kadaikodi/pages/worker/TaskDetailsPage.d.ts.map +1 -0
- package/dist/kadaikodi/pages/worker/TaskDetailsPage.js +424 -448
- package/dist/kadaikodi/pages/worker/TaskDetailsPage.js.map +1 -1
- package/dist/kadaikodi/pages/worker/WorkerDashboard.d.ts +14 -0
- package/dist/kadaikodi/pages/worker/WorkerDashboard.d.ts.map +1 -0
- package/dist/kadaikodi/pages/worker/WorkerDashboard.js +328 -445
- package/dist/kadaikodi/pages/worker/WorkerDashboard.js.map +1 -1
- package/dist/kadaikodi/pages/worker/WorkerOrdersPage.d.ts +18 -0
- package/dist/kadaikodi/pages/worker/WorkerOrdersPage.d.ts.map +1 -0
- package/dist/kadaikodi/pages/worker/WorkerOrdersPage.js +141 -164
- package/dist/kadaikodi/pages/worker/WorkerOrdersPage.js.map +1 -1
- package/dist/kadaikodi/pages/worker/WorkerProfilePage.d.ts +18 -0
- package/dist/kadaikodi/pages/worker/WorkerProfilePage.d.ts.map +1 -0
- package/dist/kadaikodi/pages/worker/WorkerProfilePage.js +300 -296
- package/dist/kadaikodi/pages/worker/WorkerProfilePage.js.map +1 -1
- package/dist/kadaikodi/pages/worker/WorkerSchedulePage.d.ts +16 -0
- package/dist/kadaikodi/pages/worker/WorkerSchedulePage.d.ts.map +1 -0
- package/dist/kadaikodi/pages/worker/WorkerSchedulePage.js +284 -309
- package/dist/kadaikodi/pages/worker/WorkerSchedulePage.js.map +1 -1
- package/dist/kadaikodi/store/index.d.ts +6 -0
- package/dist/kadaikodi/store/index.d.ts.map +1 -0
- package/dist/kadaikodi/store/kadaikodiStore.d.ts +60 -0
- package/dist/kadaikodi/store/kadaikodiStore.d.ts.map +1 -0
- package/dist/kadaikodi/types/index.d.ts +464 -0
- package/dist/kadaikodi/types/index.d.ts.map +1 -0
- package/dist/kadaikodi/utils/cn.d.ts +4 -0
- package/dist/kadaikodi/utils/cn.d.ts.map +1 -0
- package/dist/kadaikodi/utils/formatters.d.ts +78 -0
- package/dist/kadaikodi/utils/formatters.d.ts.map +1 -0
- package/dist/kadaikodi/utils/index.d.ts +8 -0
- package/dist/kadaikodi/utils/index.d.ts.map +1 -0
- package/dist/kadaikodi/utils/navigation.d.ts +20 -0
- package/dist/kadaikodi/utils/navigation.d.ts.map +1 -0
- package/dist/services/createSandboxAssistantTransport.d.ts +43 -0
- package/dist/services/createSandboxAssistantTransport.d.ts.map +1 -0
- package/dist/services/createSandboxAssistantTransport.js +15 -0
- package/dist/services/createSandboxAssistantTransport.js.map +1 -0
- package/package.json +5 -1
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { LabeledValue } from './lib/types';
|
|
2
|
+
|
|
3
|
+
export interface AreaChartProps {
|
|
4
|
+
series: LabeledValue[];
|
|
5
|
+
/** Pixel height of the plot. */
|
|
6
|
+
height?: number;
|
|
7
|
+
/** Formats axis + tooltip values. Defaults to compact notation. */
|
|
8
|
+
valueFormatter?: (value: number) => string;
|
|
9
|
+
/** Accessible title; defaults to a generic description. */
|
|
10
|
+
title?: string;
|
|
11
|
+
className?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Gradient-fill area chart with x/y axes, faint grid and a pointer/keyboard
|
|
15
|
+
* hover readout. Draws itself in on mount unless reduced-motion is requested.
|
|
16
|
+
*/
|
|
17
|
+
export declare function AreaChart({ series, height, valueFormatter, title, className, }: AreaChartProps): import("react").JSX.Element | null;
|
|
18
|
+
//# sourceMappingURL=AreaChart.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AreaChart.d.ts","sourceRoot":"","sources":["../../../../src/kadaikodi/components/viz/AreaChart.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,gCAAgC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3C,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,EACxB,MAAM,EACN,MAAY,EACZ,cAA8B,EAC9B,KAAK,EACL,SAAS,GACV,EAAE,cAAc,sCA8FhB"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { ACCENT as e } from "./lib/palette.js";
|
|
2
|
+
import { useMounted as t, usePrefersReducedMotion as n, useVizId as r } from "./lib/hooks.js";
|
|
3
|
+
import { buildAreaPath as i, buildLinePath as a } from "./lib/geometry.js";
|
|
4
|
+
import { CartesianFrame as o } from "./lib/CartesianFrame.js";
|
|
5
|
+
import { formatCompact as s } from "./lib/format.js";
|
|
6
|
+
import { jsx as c, jsxs as l } from "react/jsx-runtime";
|
|
7
|
+
//#region src/kadaikodi/components/viz/AreaChart.tsx
|
|
8
|
+
function u({ series: u, height: d = 200, valueFormatter: f = s, title: p, className: m }) {
|
|
9
|
+
let h = r("area-grad"), g = t(), _ = n();
|
|
10
|
+
if (u.length === 0) return null;
|
|
11
|
+
let v = u.map((e) => e.value), y = u.map((e) => e.label), b = Math.min(...v), x = Math.max(...v), S = x - b || Math.abs(x) || 1;
|
|
12
|
+
return /* @__PURE__ */ c(o, {
|
|
13
|
+
labels: y,
|
|
14
|
+
domain: [b - S * .12, x + S * .12],
|
|
15
|
+
height: d,
|
|
16
|
+
title: p ?? `Area chart of ${u.length} points`,
|
|
17
|
+
formatValue: f,
|
|
18
|
+
className: m,
|
|
19
|
+
tooltip: (e) => /* @__PURE__ */ l("span", { children: [/* @__PURE__ */ l("span", {
|
|
20
|
+
className: "text-text-secondary",
|
|
21
|
+
children: [y[e], ": "]
|
|
22
|
+
}), /* @__PURE__ */ c("span", {
|
|
23
|
+
className: "font-semibold tabular-nums",
|
|
24
|
+
children: f(v[e])
|
|
25
|
+
})] }),
|
|
26
|
+
children: ({ px: t, py: n, plotBottom: r, activeIndex: o }) => {
|
|
27
|
+
let s = v.map((e, r) => ({
|
|
28
|
+
x: t(r),
|
|
29
|
+
y: n(e)
|
|
30
|
+
})), u = a(s), d = i(s, r), f = s[s.length - 1];
|
|
31
|
+
return /* @__PURE__ */ l("g", {
|
|
32
|
+
style: { color: e },
|
|
33
|
+
children: [
|
|
34
|
+
/* @__PURE__ */ c("defs", { children: /* @__PURE__ */ l("linearGradient", {
|
|
35
|
+
id: h,
|
|
36
|
+
x1: "0",
|
|
37
|
+
y1: "0",
|
|
38
|
+
x2: "0",
|
|
39
|
+
y2: "1",
|
|
40
|
+
children: [/* @__PURE__ */ c("stop", {
|
|
41
|
+
offset: "0%",
|
|
42
|
+
stopColor: "currentColor",
|
|
43
|
+
stopOpacity: .34
|
|
44
|
+
}), /* @__PURE__ */ c("stop", {
|
|
45
|
+
offset: "100%",
|
|
46
|
+
stopColor: "currentColor",
|
|
47
|
+
stopOpacity: .02
|
|
48
|
+
})]
|
|
49
|
+
}) }),
|
|
50
|
+
/* @__PURE__ */ c("path", {
|
|
51
|
+
d,
|
|
52
|
+
fill: `url(#${h})`,
|
|
53
|
+
stroke: "none",
|
|
54
|
+
style: {
|
|
55
|
+
opacity: g || _ ? 1 : 0,
|
|
56
|
+
transition: _ ? void 0 : "opacity 700ms ease"
|
|
57
|
+
}
|
|
58
|
+
}),
|
|
59
|
+
/* @__PURE__ */ c("path", {
|
|
60
|
+
d: u,
|
|
61
|
+
fill: "none",
|
|
62
|
+
stroke: "currentColor",
|
|
63
|
+
strokeWidth: 2,
|
|
64
|
+
strokeLinecap: "round",
|
|
65
|
+
strokeLinejoin: "round",
|
|
66
|
+
vectorEffect: "non-scaling-stroke",
|
|
67
|
+
pathLength: 1,
|
|
68
|
+
style: {
|
|
69
|
+
strokeDasharray: 1,
|
|
70
|
+
strokeDashoffset: g || _ ? 0 : 1,
|
|
71
|
+
transition: _ ? void 0 : "stroke-dashoffset 900ms ease"
|
|
72
|
+
}
|
|
73
|
+
}),
|
|
74
|
+
/* @__PURE__ */ c("circle", {
|
|
75
|
+
cx: f.x,
|
|
76
|
+
cy: f.y,
|
|
77
|
+
r: 3.5,
|
|
78
|
+
fill: "currentColor"
|
|
79
|
+
}),
|
|
80
|
+
o === null ? null : /* @__PURE__ */ l("g", { children: [/* @__PURE__ */ c("circle", {
|
|
81
|
+
cx: t(o),
|
|
82
|
+
cy: n(v[o]),
|
|
83
|
+
r: 7,
|
|
84
|
+
fill: "currentColor",
|
|
85
|
+
opacity: .16
|
|
86
|
+
}), /* @__PURE__ */ c("circle", {
|
|
87
|
+
cx: t(o),
|
|
88
|
+
cy: n(v[o]),
|
|
89
|
+
r: 3.5,
|
|
90
|
+
fill: "currentColor",
|
|
91
|
+
stroke: "var(--color-bg-surface)",
|
|
92
|
+
strokeWidth: 1.5
|
|
93
|
+
})] })
|
|
94
|
+
]
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
//#endregion
|
|
100
|
+
export { u as AreaChart };
|
|
101
|
+
|
|
102
|
+
//# sourceMappingURL=AreaChart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AreaChart.js","names":[],"sources":["../../../../src/kadaikodi/components/viz/AreaChart.tsx"],"sourcesContent":["import { ACCENT } from './lib/palette';\nimport { CartesianFrame } from './lib/CartesianFrame';\nimport { buildAreaPath, buildLinePath } from './lib/geometry';\nimport { formatCompact } from './lib/format';\nimport { useMounted, usePrefersReducedMotion, useVizId } from './lib/hooks';\nimport type { LabeledValue } from './lib/types';\n\nexport interface AreaChartProps {\n series: LabeledValue[];\n /** Pixel height of the plot. */\n height?: number;\n /** Formats axis + tooltip values. Defaults to compact notation. */\n valueFormatter?: (value: number) => string;\n /** Accessible title; defaults to a generic description. */\n title?: string;\n className?: string;\n}\n\n/**\n * Gradient-fill area chart with x/y axes, faint grid and a pointer/keyboard\n * hover readout. Draws itself in on mount unless reduced-motion is requested.\n */\nexport function AreaChart({\n series,\n height = 200,\n valueFormatter = formatCompact,\n title,\n className,\n}: AreaChartProps) {\n const gradientId = useVizId('area-grad');\n const mounted = useMounted();\n const reduced = usePrefersReducedMotion();\n\n if (series.length === 0) {\n return null;\n }\n\n const values = series.map((s) => s.value);\n const labels = series.map((s) => s.label);\n const min = Math.min(...values);\n const max = Math.max(...values);\n const span = max - min || Math.abs(max) || 1;\n const domain: [number, number] = [min - span * 0.12, max + span * 0.12];\n const chartTitle = title ?? `Area chart of ${series.length} points`;\n\n return (\n <CartesianFrame\n labels={labels}\n domain={domain}\n height={height}\n title={chartTitle}\n formatValue={valueFormatter}\n className={className}\n tooltip={(i) => (\n <span>\n <span className=\"text-text-secondary\">{labels[i]}: </span>\n <span className=\"font-semibold tabular-nums\">{valueFormatter(values[i])}</span>\n </span>\n )}\n >\n {({ px, py, plotBottom, activeIndex }) => {\n const points = values.map((v, i) => ({ x: px(i), y: py(v) }));\n const line = buildLinePath(points);\n const area = buildAreaPath(points, plotBottom);\n const last = points[points.length - 1];\n return (\n <g style={{ color: ACCENT }}>\n <defs>\n <linearGradient id={gradientId} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor=\"currentColor\" stopOpacity={0.34} />\n <stop offset=\"100%\" stopColor=\"currentColor\" stopOpacity={0.02} />\n </linearGradient>\n </defs>\n <path\n d={area}\n fill={`url(#${gradientId})`}\n stroke=\"none\"\n style={{\n opacity: mounted || reduced ? 1 : 0,\n transition: reduced ? undefined : 'opacity 700ms ease',\n }}\n />\n <path\n d={line}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n vectorEffect=\"non-scaling-stroke\"\n pathLength={1}\n style={{\n strokeDasharray: 1,\n strokeDashoffset: mounted || reduced ? 0 : 1,\n transition: reduced ? undefined : 'stroke-dashoffset 900ms ease',\n }}\n />\n <circle cx={last.x} cy={last.y} r={3.5} fill=\"currentColor\" />\n {activeIndex !== null ? (\n <g>\n <circle\n cx={px(activeIndex)}\n cy={py(values[activeIndex])}\n r={7}\n fill=\"currentColor\"\n opacity={0.16}\n />\n <circle\n cx={px(activeIndex)}\n cy={py(values[activeIndex])}\n r={3.5}\n fill=\"currentColor\"\n stroke=\"var(--color-bg-surface)\"\n strokeWidth={1.5}\n />\n </g>\n ) : null}\n </g>\n );\n }}\n </CartesianFrame>\n );\n}\n"],"mappings":";;;;;;;AAsBA,SAAgB,EAAU,EACxB,WACA,YAAS,KACT,oBAAiB,GACjB,UACA,gBACiB;CACjB,IAAM,IAAa,EAAS,YAAY,EAClC,IAAU,GAAY,EACtB,IAAU,GAAyB;AAEzC,KAAI,EAAO,WAAW,EACpB,QAAO;CAGT,IAAM,IAAS,EAAO,KAAK,MAAM,EAAE,MAAM,EACnC,IAAS,EAAO,KAAK,MAAM,EAAE,MAAM,EACnC,IAAM,KAAK,IAAI,GAAG,EAAO,EACzB,IAAM,KAAK,IAAI,GAAG,EAAO,EACzB,IAAO,IAAM,KAAO,KAAK,IAAI,EAAI,IAAI;AAI3C,QACE,kBAAC,GAAD;EACU;EACA,QANqB,CAAC,IAAM,IAAO,KAAM,IAAM,IAAO,IAAK;EAO3D;EACR,OAPe,KAAS,iBAAiB,EAAO,OAAO;EAQvD,aAAa;EACF;EACX,UAAU,MACR,kBAAC,QAAD,EAAA,UAAA,CACE,kBAAC,QAAD;GAAM,WAAU;aAAhB,CAAuC,EAAO,IAAG,KAAS;MAC1D,kBAAC,QAAD;GAAM,WAAU;aAA8B,EAAe,EAAO,GAAG;GAAQ,CAAA,CAC1E,EAAA,CAAA;aAGP,EAAE,OAAI,OAAI,eAAY,qBAAkB;GACxC,IAAM,IAAS,EAAO,KAAK,GAAG,OAAO;IAAE,GAAG,EAAG,EAAE;IAAE,GAAG,EAAG,EAAE;IAAE,EAAE,EACvD,IAAO,EAAc,EAAO,EAC5B,IAAO,EAAc,GAAQ,EAAW,EACxC,IAAO,EAAO,EAAO,SAAS;AACpC,UACE,kBAAC,KAAD;IAAG,OAAO,EAAE,OAAO,GAAQ;cAA3B;KACE,kBAAC,QAAD,EAAA,UACE,kBAAC,kBAAD;MAAgB,IAAI;MAAY,IAAG;MAAI,IAAG;MAAI,IAAG;MAAI,IAAG;gBAAxD,CACE,kBAAC,QAAD;OAAM,QAAO;OAAK,WAAU;OAAe,aAAa;OAAQ,CAAA,EAChE,kBAAC,QAAD;OAAM,QAAO;OAAO,WAAU;OAAe,aAAa;OAAQ,CAAA,CACnD;SACZ,CAAA;KACP,kBAAC,QAAD;MACK;MACH,MAAM,QAAQ,EAAW;MACzB,QAAO;MACP,OAAO;OACL,SAAS,KAAW,IAAU,IAAI;OAClC,YAAY,IAAU,KAAA,IAAY;OACnC;MACD,CAAA;KACF,kBAAC,QAAD;MACE,GAAG;MACH,MAAK;MACL,QAAO;MACP,aAAa;MACb,eAAc;MACd,gBAAe;MACf,cAAa;MACb,YAAY;MACZ,OAAO;OACL,iBAAiB;OACjB,kBAAkB,KAAW,IAAU,IAAI;OAC3C,YAAY,IAAU,KAAA,IAAY;OACnC;MACD,CAAA;KACF,kBAAC,UAAD;MAAQ,IAAI,EAAK;MAAG,IAAI,EAAK;MAAG,GAAG;MAAK,MAAK;MAAiB,CAAA;KAC7D,MAAgB,OAkBb,OAjBF,kBAAC,KAAD,EAAA,UAAA,CACE,kBAAC,UAAD;MACE,IAAI,EAAG,EAAY;MACnB,IAAI,EAAG,EAAO,GAAa;MAC3B,GAAG;MACH,MAAK;MACL,SAAS;MACT,CAAA,EACF,kBAAC,UAAD;MACE,IAAI,EAAG,EAAY;MACnB,IAAI,EAAG,EAAO,GAAa;MAC3B,GAAG;MACH,MAAK;MACL,QAAO;MACP,aAAa;MACb,CAAA,CACA,EAAA,CAAA;KAEJ;;;EAGO,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Person } from './lib/types';
|
|
2
|
+
|
|
3
|
+
export interface AvatarStackProps {
|
|
4
|
+
people: Person[];
|
|
5
|
+
/** Maximum avatars shown before collapsing into a "+N" chip. */
|
|
6
|
+
max?: number;
|
|
7
|
+
/** Pixel diameter of each avatar. */
|
|
8
|
+
size?: number;
|
|
9
|
+
className?: string;
|
|
10
|
+
}
|
|
11
|
+
/** Overlapping avatars with a "+N" overflow chip. */
|
|
12
|
+
export declare function AvatarStack({ people, max, size, className }: AvatarStackProps): import("react").JSX.Element | null;
|
|
13
|
+
//# sourceMappingURL=AvatarStack.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AvatarStack.d.ts","sourceRoot":"","sources":["../../../../src/kadaikodi/components/viz/AvatarStack.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,gEAAgE;IAChE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qDAAqD;AACrD,wBAAgB,WAAW,CAAC,EAAE,MAAM,EAAE,GAAO,EAAE,IAAS,EAAE,SAAS,EAAE,EAAE,gBAAgB,sCAmCtF"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { cn as e } from "../../utils/cn.js";
|
|
2
|
+
import { VizAvatar as t } from "./lib/Avatar.js";
|
|
3
|
+
import { jsx as n, jsxs as r } from "react/jsx-runtime";
|
|
4
|
+
//#region src/kadaikodi/components/viz/AvatarStack.tsx
|
|
5
|
+
function i({ people: i, max: a = 5, size: o = 32, className: s }) {
|
|
6
|
+
if (i.length === 0) return null;
|
|
7
|
+
let c = i.slice(0, a), l = i.length - c.length, u = Math.round(o * .32);
|
|
8
|
+
return /* @__PURE__ */ r("div", {
|
|
9
|
+
className: e("flex items-center", s),
|
|
10
|
+
role: "img",
|
|
11
|
+
"aria-label": `${i.length} people: ${i.map((e) => e.name).join(", ")}`,
|
|
12
|
+
children: [c.map((e, r) => /* @__PURE__ */ n("span", {
|
|
13
|
+
style: { marginLeft: r === 0 ? 0 : -u },
|
|
14
|
+
children: /* @__PURE__ */ n(t, {
|
|
15
|
+
name: e.name,
|
|
16
|
+
src: e.avatarUrl,
|
|
17
|
+
size: o,
|
|
18
|
+
ring: !0
|
|
19
|
+
})
|
|
20
|
+
}, `${e.name}-${r}`)), l > 0 ? /* @__PURE__ */ r("span", {
|
|
21
|
+
className: "inline-flex items-center justify-center rounded-full border border-border-subtle bg-bg-elevated font-medium text-text-secondary ring-2 ring-[var(--color-bg-surface)]",
|
|
22
|
+
style: {
|
|
23
|
+
width: o,
|
|
24
|
+
height: o,
|
|
25
|
+
marginLeft: -u,
|
|
26
|
+
fontSize: Math.round(o * .34)
|
|
27
|
+
},
|
|
28
|
+
"aria-hidden": "true",
|
|
29
|
+
children: ["+", l]
|
|
30
|
+
}) : null]
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
//#endregion
|
|
34
|
+
export { i as AvatarStack };
|
|
35
|
+
|
|
36
|
+
//# sourceMappingURL=AvatarStack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AvatarStack.js","names":[],"sources":["../../../../src/kadaikodi/components/viz/AvatarStack.tsx"],"sourcesContent":["import { cn } from '../../utils/cn';\nimport { VizAvatar } from './lib/Avatar';\nimport type { Person } from './lib/types';\n\nexport interface AvatarStackProps {\n people: Person[];\n /** Maximum avatars shown before collapsing into a \"+N\" chip. */\n max?: number;\n /** Pixel diameter of each avatar. */\n size?: number;\n className?: string;\n}\n\n/** Overlapping avatars with a \"+N\" overflow chip. */\nexport function AvatarStack({ people, max = 5, size = 32, className }: AvatarStackProps) {\n if (people.length === 0) {\n return null;\n }\n const shown = people.slice(0, max);\n const overflow = people.length - shown.length;\n const overlap = Math.round(size * 0.32);\n\n return (\n <div\n className={cn('flex items-center', className)}\n role=\"img\"\n aria-label={`${people.length} people: ${people.map((p) => p.name).join(', ')}`}\n >\n {shown.map((person, i) => (\n <span key={`${person.name}-${i}`} style={{ marginLeft: i === 0 ? 0 : -overlap }}>\n <VizAvatar name={person.name} src={person.avatarUrl} size={size} ring />\n </span>\n ))}\n {overflow > 0 ? (\n <span\n className=\"inline-flex items-center justify-center rounded-full border border-border-subtle bg-bg-elevated font-medium text-text-secondary ring-2 ring-[var(--color-bg-surface)]\"\n style={{\n width: size,\n height: size,\n marginLeft: -overlap,\n fontSize: Math.round(size * 0.34),\n }}\n aria-hidden=\"true\"\n >\n +{overflow}\n </span>\n ) : null}\n </div>\n );\n}\n"],"mappings":";;;;AAcA,SAAgB,EAAY,EAAE,WAAQ,SAAM,GAAG,UAAO,IAAI,gBAA+B;AACvF,KAAI,EAAO,WAAW,EACpB,QAAO;CAET,IAAM,IAAQ,EAAO,MAAM,GAAG,EAAI,EAC5B,IAAW,EAAO,SAAS,EAAM,QACjC,IAAU,KAAK,MAAM,IAAO,IAAK;AAEvC,QACE,kBAAC,OAAD;EACE,WAAW,EAAG,qBAAqB,EAAU;EAC7C,MAAK;EACL,cAAY,GAAG,EAAO,OAAO,WAAW,EAAO,KAAK,MAAM,EAAE,KAAK,CAAC,KAAK,KAAK;YAH9E,CAKG,EAAM,KAAK,GAAQ,MAClB,kBAAC,QAAD;GAAkC,OAAO,EAAE,YAAY,MAAM,IAAI,IAAI,CAAC,GAAS;aAC7E,kBAAC,GAAD;IAAW,MAAM,EAAO;IAAM,KAAK,EAAO;IAAiB;IAAM,MAAA;IAAO,CAAA;GACnE,EAFI,GAAG,EAAO,KAAK,GAAG,IAEtB,CACP,EACD,IAAW,IACV,kBAAC,QAAD;GACE,WAAU;GACV,OAAO;IACL,OAAO;IACP,QAAQ;IACR,YAAY,CAAC;IACb,UAAU,KAAK,MAAM,IAAO,IAAK;IAClC;GACD,eAAY;aARd,CASC,KACG,EACG;OACL,KACA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Segment } from './lib/types';
|
|
2
|
+
|
|
3
|
+
export interface BarChartProps {
|
|
4
|
+
/** Bars to render. A `color` on a datum overrides the palette. */
|
|
5
|
+
series: Segment[];
|
|
6
|
+
height?: number;
|
|
7
|
+
valueFormatter?: (value: number) => string;
|
|
8
|
+
/** Color each bar from the categorical palette instead of a single accent. */
|
|
9
|
+
colorful?: boolean;
|
|
10
|
+
/** Hide the value label above each bar. */
|
|
11
|
+
hideValues?: boolean;
|
|
12
|
+
title?: string;
|
|
13
|
+
className?: string;
|
|
14
|
+
}
|
|
15
|
+
/** Vertical bar chart with value labels and an animated grow-in. */
|
|
16
|
+
export declare function BarChart({ series, height, valueFormatter, colorful, hideValues, title, className, }: BarChartProps): import("react").JSX.Element | null;
|
|
17
|
+
//# sourceMappingURL=BarChart.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BarChart.d.ts","sourceRoot":"","sources":["../../../../src/kadaikodi/components/viz/BarChart.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,WAAW,aAAa;IAC5B,kEAAkE;IAClE,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3C,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2CAA2C;IAC3C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID,oEAAoE;AACpE,wBAAgB,QAAQ,CAAC,EACvB,MAAM,EACN,MAAY,EACZ,cAA8B,EAC9B,QAAgB,EAChB,UAAkB,EAClB,KAAK,EACL,SAAS,GACV,EAAE,aAAa,sCAoGf"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { chartPalette as e } from "./lib/palette.js";
|
|
2
|
+
import { useMounted as t, usePrefersReducedMotion as n } from "./lib/hooks.js";
|
|
3
|
+
import { ResponsiveSvg as r } from "./lib/ResponsiveSvg.js";
|
|
4
|
+
import { scaleLinear as i } from "./lib/geometry.js";
|
|
5
|
+
import { formatCompact as a } from "./lib/format.js";
|
|
6
|
+
import { jsx as o, jsxs as s } from "react/jsx-runtime";
|
|
7
|
+
//#region src/kadaikodi/components/viz/BarChart.tsx
|
|
8
|
+
var c = {
|
|
9
|
+
top: 20,
|
|
10
|
+
bottom: 26,
|
|
11
|
+
left: 8,
|
|
12
|
+
right: 8
|
|
13
|
+
};
|
|
14
|
+
function l({ series: l, height: u = 220, valueFormatter: d = a, colorful: f = !1, hideValues: p = !1, title: m, className: h }) {
|
|
15
|
+
let g = t(), _ = n();
|
|
16
|
+
if (l.length === 0) return null;
|
|
17
|
+
let v = l.map((e) => e.value), y = Math.max(...v, 0) || 1, b = e(l.length);
|
|
18
|
+
return /* @__PURE__ */ o(r, {
|
|
19
|
+
height: u,
|
|
20
|
+
title: m ?? `Bar chart of ${l.length} categories`,
|
|
21
|
+
className: h,
|
|
22
|
+
desc: l.map((e) => `${e.label}: ${d(e.value)}`).join(", "),
|
|
23
|
+
children: ({ width: e }) => {
|
|
24
|
+
let t = c.left, n = e - c.right, r = c.top, a = u - c.bottom, m = a - r, h = (n - t) / l.length, v = Math.min(56, h * .62);
|
|
25
|
+
return /* @__PURE__ */ s("g", { children: [/* @__PURE__ */ o("line", {
|
|
26
|
+
x1: t,
|
|
27
|
+
x2: n,
|
|
28
|
+
y1: a,
|
|
29
|
+
y2: a,
|
|
30
|
+
stroke: "var(--color-chart-axis)",
|
|
31
|
+
strokeWidth: 1,
|
|
32
|
+
vectorEffect: "non-scaling-stroke",
|
|
33
|
+
opacity: .5
|
|
34
|
+
}), l.map((e, n) => {
|
|
35
|
+
let r = i(e.value, 0, y, 0, m), c = t + h * n + h / 2, l = c - v / 2, x = a - r, S = e.color ?? (f ? b[n] : "var(--color-accent-primary)");
|
|
36
|
+
return /* @__PURE__ */ s("g", { children: [
|
|
37
|
+
/* @__PURE__ */ o("title", { children: `${e.label}: ${d(e.value)}` }),
|
|
38
|
+
/* @__PURE__ */ o("rect", {
|
|
39
|
+
x: l,
|
|
40
|
+
y: x,
|
|
41
|
+
width: v,
|
|
42
|
+
height: Math.max(0, r),
|
|
43
|
+
rx: 4,
|
|
44
|
+
fill: S,
|
|
45
|
+
style: {
|
|
46
|
+
transformBox: "fill-box",
|
|
47
|
+
transformOrigin: "bottom",
|
|
48
|
+
transform: g || _ ? "scaleY(1)" : "scaleY(0)",
|
|
49
|
+
transition: _ ? void 0 : "transform 620ms cubic-bezier(0.22,1,0.36,1)",
|
|
50
|
+
transitionDelay: _ ? void 0 : `${n * 45}ms`
|
|
51
|
+
}
|
|
52
|
+
}),
|
|
53
|
+
p ? null : /* @__PURE__ */ o("text", {
|
|
54
|
+
x: c,
|
|
55
|
+
y: x - 6,
|
|
56
|
+
textAnchor: "middle",
|
|
57
|
+
fontSize: 10,
|
|
58
|
+
fontWeight: 600,
|
|
59
|
+
fill: "var(--color-text-secondary)",
|
|
60
|
+
style: {
|
|
61
|
+
opacity: g || _ ? 1 : 0,
|
|
62
|
+
transition: _ ? void 0 : "opacity 400ms ease",
|
|
63
|
+
transitionDelay: _ ? void 0 : `${n * 45 + 220}ms`
|
|
64
|
+
},
|
|
65
|
+
children: d(e.value)
|
|
66
|
+
}),
|
|
67
|
+
/* @__PURE__ */ o("text", {
|
|
68
|
+
x: c,
|
|
69
|
+
y: u - 8,
|
|
70
|
+
textAnchor: "middle",
|
|
71
|
+
fontSize: 10,
|
|
72
|
+
fill: "var(--color-chart-axis)",
|
|
73
|
+
children: e.label
|
|
74
|
+
})
|
|
75
|
+
] }, `${e.label}-${n}`);
|
|
76
|
+
})] });
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
//#endregion
|
|
81
|
+
export { l as BarChart };
|
|
82
|
+
|
|
83
|
+
//# sourceMappingURL=BarChart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BarChart.js","names":[],"sources":["../../../../src/kadaikodi/components/viz/BarChart.tsx"],"sourcesContent":["import { ACCENT, chartPalette } from './lib/palette';\nimport { ResponsiveSvg } from './lib/ResponsiveSvg';\nimport { scaleLinear } from './lib/geometry';\nimport { formatCompact } from './lib/format';\nimport { useMounted, usePrefersReducedMotion } from './lib/hooks';\nimport type { Segment } from './lib/types';\n\nexport interface BarChartProps {\n /** Bars to render. A `color` on a datum overrides the palette. */\n series: Segment[];\n height?: number;\n valueFormatter?: (value: number) => string;\n /** Color each bar from the categorical palette instead of a single accent. */\n colorful?: boolean;\n /** Hide the value label above each bar. */\n hideValues?: boolean;\n title?: string;\n className?: string;\n}\n\nconst PAD = { top: 20, bottom: 26, left: 8, right: 8 };\n\n/** Vertical bar chart with value labels and an animated grow-in. */\nexport function BarChart({\n series,\n height = 220,\n valueFormatter = formatCompact,\n colorful = false,\n hideValues = false,\n title,\n className,\n}: BarChartProps) {\n const mounted = useMounted();\n const reduced = usePrefersReducedMotion();\n\n if (series.length === 0) {\n return null;\n }\n\n const values = series.map((s) => s.value);\n const max = Math.max(...values, 0) || 1;\n const palette = chartPalette(series.length);\n const chartTitle = title ?? `Bar chart of ${series.length} categories`;\n\n return (\n <ResponsiveSvg\n height={height}\n title={chartTitle}\n className={className}\n desc={series.map((s) => `${s.label}: ${valueFormatter(s.value)}`).join(', ')}\n >\n {({ width }) => {\n const plotLeft = PAD.left;\n const plotRight = width - PAD.right;\n const plotTop = PAD.top;\n const plotBottom = height - PAD.bottom;\n const plotH = plotBottom - plotTop;\n const slot = (plotRight - plotLeft) / series.length;\n const barWidth = Math.min(56, slot * 0.62);\n return (\n <g>\n <line\n x1={plotLeft}\n x2={plotRight}\n y1={plotBottom}\n y2={plotBottom}\n stroke=\"var(--color-chart-axis)\"\n strokeWidth={1}\n vectorEffect=\"non-scaling-stroke\"\n opacity={0.5}\n />\n {series.map((datum, i) => {\n const barH = scaleLinear(datum.value, 0, max, 0, plotH);\n const cx = plotLeft + slot * i + slot / 2;\n const x = cx - barWidth / 2;\n const y = plotBottom - barH;\n const color = datum.color ?? (colorful ? palette[i] : ACCENT);\n return (\n <g key={`${datum.label}-${i}`}>\n <title>{`${datum.label}: ${valueFormatter(datum.value)}`}</title>\n <rect\n x={x}\n y={y}\n width={barWidth}\n height={Math.max(0, barH)}\n rx={4}\n fill={color}\n style={{\n transformBox: 'fill-box',\n transformOrigin: 'bottom',\n transform: mounted || reduced ? 'scaleY(1)' : 'scaleY(0)',\n transition: reduced\n ? undefined\n : 'transform 620ms cubic-bezier(0.22,1,0.36,1)',\n transitionDelay: reduced ? undefined : `${i * 45}ms`,\n }}\n />\n {hideValues ? null : (\n <text\n x={cx}\n y={y - 6}\n textAnchor=\"middle\"\n fontSize={10}\n fontWeight={600}\n fill=\"var(--color-text-secondary)\"\n style={{\n opacity: mounted || reduced ? 1 : 0,\n transition: reduced ? undefined : 'opacity 400ms ease',\n transitionDelay: reduced ? undefined : `${i * 45 + 220}ms`,\n }}\n >\n {valueFormatter(datum.value)}\n </text>\n )}\n <text\n x={cx}\n y={height - 8}\n textAnchor=\"middle\"\n fontSize={10}\n fill=\"var(--color-chart-axis)\"\n >\n {datum.label}\n </text>\n </g>\n );\n })}\n </g>\n );\n }}\n </ResponsiveSvg>\n );\n}\n"],"mappings":";;;;;;;AAoBA,IAAM,IAAM;CAAE,KAAK;CAAI,QAAQ;CAAI,MAAM;CAAG,OAAO;CAAG;AAGtD,SAAgB,EAAS,EACvB,WACA,YAAS,KACT,oBAAiB,GACjB,cAAW,IACX,gBAAa,IACb,UACA,gBACgB;CAChB,IAAM,IAAU,GAAY,EACtB,IAAU,GAAyB;AAEzC,KAAI,EAAO,WAAW,EACpB,QAAO;CAGT,IAAM,IAAS,EAAO,KAAK,MAAM,EAAE,MAAM,EACnC,IAAM,KAAK,IAAI,GAAG,GAAQ,EAAE,IAAI,GAChC,IAAU,EAAa,EAAO,OAAO;AAG3C,QACE,kBAAC,GAAD;EACU;EACR,OALe,KAAS,gBAAgB,EAAO,OAAO;EAM3C;EACX,MAAM,EAAO,KAAK,MAAM,GAAG,EAAE,MAAM,IAAI,EAAe,EAAE,MAAM,GAAG,CAAC,KAAK,KAAK;aAE1E,EAAE,eAAY;GACd,IAAM,IAAW,EAAI,MACf,IAAY,IAAQ,EAAI,OACxB,IAAU,EAAI,KACd,IAAa,IAAS,EAAI,QAC1B,IAAQ,IAAa,GACrB,KAAQ,IAAY,KAAY,EAAO,QACvC,IAAW,KAAK,IAAI,IAAI,IAAO,IAAK;AAC1C,UACE,kBAAC,KAAD,EAAA,UAAA,CACE,kBAAC,QAAD;IACE,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,QAAO;IACP,aAAa;IACb,cAAa;IACb,SAAS;IACT,CAAA,EACD,EAAO,KAAK,GAAO,MAAM;IACxB,IAAM,IAAO,EAAY,EAAM,OAAO,GAAG,GAAK,GAAG,EAAM,EACjD,IAAK,IAAW,IAAO,IAAI,IAAO,GAClC,IAAI,IAAK,IAAW,GACpB,IAAI,IAAa,GACjB,IAAQ,EAAM,UAAU,IAAW,EAAQ,KAAA;AACjD,WACE,kBAAC,KAAD,EAAA,UAAA;KACE,kBAAC,SAAD,EAAA,UAAQ,GAAG,EAAM,MAAM,IAAI,EAAe,EAAM,MAAM,IAAW,CAAA;KACjE,kBAAC,QAAD;MACK;MACA;MACH,OAAO;MACP,QAAQ,KAAK,IAAI,GAAG,EAAK;MACzB,IAAI;MACJ,MAAM;MACN,OAAO;OACL,cAAc;OACd,iBAAiB;OACjB,WAAW,KAAW,IAAU,cAAc;OAC9C,YAAY,IACR,KAAA,IACA;OACJ,iBAAiB,IAAU,KAAA,IAAY,GAAG,IAAI,GAAG;OAClD;MACD,CAAA;KACD,IAAa,OACZ,kBAAC,QAAD;MACE,GAAG;MACH,GAAG,IAAI;MACP,YAAW;MACX,UAAU;MACV,YAAY;MACZ,MAAK;MACL,OAAO;OACL,SAAS,KAAW,IAAU,IAAI;OAClC,YAAY,IAAU,KAAA,IAAY;OAClC,iBAAiB,IAAU,KAAA,IAAY,GAAG,IAAI,KAAK,IAAI;OACxD;gBAEA,EAAe,EAAM,MAAM;MACvB,CAAA;KAET,kBAAC,QAAD;MACE,GAAG;MACH,GAAG,IAAS;MACZ,YAAW;MACX,UAAU;MACV,MAAK;gBAEJ,EAAM;MACF,CAAA;KACL,EAAA,EA7CI,GAAG,EAAM,MAAM,GAAG,IA6CtB;KAEN,CACA,EAAA,CAAA;;EAGM,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface CertificateCardProps {
|
|
2
|
+
title: string;
|
|
3
|
+
recipient: string;
|
|
4
|
+
date: string;
|
|
5
|
+
issuer?: string;
|
|
6
|
+
credentialId?: string;
|
|
7
|
+
/** When provided, renders a download button wired to this handler. */
|
|
8
|
+
onDownload?: () => void;
|
|
9
|
+
downloadLabel?: string;
|
|
10
|
+
className?: string;
|
|
11
|
+
}
|
|
12
|
+
/** Landscape certificate tile with seal, recipient, date and download affordance. */
|
|
13
|
+
export declare function CertificateCard({ title, recipient, date, issuer, credentialId, onDownload, downloadLabel, className, }: CertificateCardProps): import("react").JSX.Element;
|
|
14
|
+
//# sourceMappingURL=CertificateCard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CertificateCard.d.ts","sourceRoot":"","sources":["../../../../src/kadaikodi/components/viz/CertificateCard.tsx"],"names":[],"mappings":"AAMA,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sEAAsE;IACtE,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA6BD,qFAAqF;AACrF,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,SAAS,EACT,IAAI,EACJ,MAAM,EACN,YAAY,EACZ,UAAU,EACV,aAA0B,EAC1B,SAAS,GACV,EAAE,oBAAoB,+BAkDtB"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { Segment } from './lib/types';
|
|
3
|
+
|
|
4
|
+
export interface DonutChartProps {
|
|
5
|
+
segments: Segment[];
|
|
6
|
+
centerLabel?: ReactNode;
|
|
7
|
+
/** Small caption under the center label. */
|
|
8
|
+
centerCaption?: ReactNode;
|
|
9
|
+
/** Pixel diameter (scales down responsively). */
|
|
10
|
+
size?: number;
|
|
11
|
+
/** Ring thickness as a fraction of the radius (0–1). */
|
|
12
|
+
thickness?: number;
|
|
13
|
+
valueFormatter?: (value: number) => string;
|
|
14
|
+
showLegend?: boolean;
|
|
15
|
+
title?: string;
|
|
16
|
+
className?: string;
|
|
17
|
+
}
|
|
18
|
+
/** Donut chart with a center label and an optional legend. */
|
|
19
|
+
export declare function DonutChart({ segments, centerLabel, centerCaption, size, thickness, valueFormatter, showLegend, title, className, }: DonutChartProps): import("react").JSX.Element | null;
|
|
20
|
+
//# sourceMappingURL=DonutChart.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DonutChart.d.ts","sourceRoot":"","sources":["../../../../src/kadaikodi/components/viz/DonutChart.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMvC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,4CAA4C;IAC5C,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,iDAAiD;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAMD,8DAA8D;AAC9D,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,WAAW,EACX,aAAa,EACb,IAAU,EACV,SAAgB,EAChB,cAA8B,EAC9B,UAAiB,EACjB,KAAK,EACL,SAAS,GACV,EAAE,eAAe,sCAyHjB"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { cn as e } from "../../utils/cn.js";
|
|
2
|
+
import { chartPalette as t } from "./lib/palette.js";
|
|
3
|
+
import { useMounted as n, usePrefersReducedMotion as r } from "./lib/hooks.js";
|
|
4
|
+
import { donutSegmentPath as i } from "./lib/geometry.js";
|
|
5
|
+
import { formatCompact as a, toPercent as o } from "./lib/format.js";
|
|
6
|
+
import { jsx as s, jsxs as c } from "react/jsx-runtime";
|
|
7
|
+
//#region src/kadaikodi/components/viz/DonutChart.tsx
|
|
8
|
+
var l = 100, u = l / 2, d = 46;
|
|
9
|
+
function f({ segments: f, centerLabel: p, centerCaption: m, size: h = 168, thickness: g = .28, valueFormatter: _ = a, showLegend: v = !0, title: y, className: b }) {
|
|
10
|
+
let x = n(), S = r();
|
|
11
|
+
if (f.length === 0) return null;
|
|
12
|
+
let C = f.reduce((e, t) => e + Math.max(0, t.value), 0), w = t(f.length), T = d * (1 - g), E = y ?? `Donut chart of ${f.length} segments`, D = f.map((e) => C > 0 ? Math.max(0, e.value) / C : 0), O = D.map((e, t) => D.slice(0, t).reduce((e, t) => e + t, 0)), k = f.map((e, t) => {
|
|
13
|
+
let n = D[t], r = O[t] * 360, i = Math.min((O[t] + n) * 360, 359.999);
|
|
14
|
+
return {
|
|
15
|
+
segment: e,
|
|
16
|
+
color: e.color ?? w[t],
|
|
17
|
+
startAngle: r,
|
|
18
|
+
endAngle: i,
|
|
19
|
+
fraction: n,
|
|
20
|
+
isFull: n >= .9999
|
|
21
|
+
};
|
|
22
|
+
});
|
|
23
|
+
return /* @__PURE__ */ c("div", {
|
|
24
|
+
className: e("flex flex-wrap items-center gap-5", b),
|
|
25
|
+
children: [/* @__PURE__ */ c("div", {
|
|
26
|
+
className: "relative shrink-0",
|
|
27
|
+
style: {
|
|
28
|
+
width: h,
|
|
29
|
+
height: h,
|
|
30
|
+
maxWidth: "100%"
|
|
31
|
+
},
|
|
32
|
+
children: [/* @__PURE__ */ c("svg", {
|
|
33
|
+
viewBox: `0 0 ${l} ${l}`,
|
|
34
|
+
width: h,
|
|
35
|
+
height: h,
|
|
36
|
+
role: "img",
|
|
37
|
+
"aria-label": E,
|
|
38
|
+
style: {
|
|
39
|
+
display: "block",
|
|
40
|
+
maxWidth: "100%",
|
|
41
|
+
height: "auto"
|
|
42
|
+
},
|
|
43
|
+
children: [
|
|
44
|
+
/* @__PURE__ */ s("title", { children: E }),
|
|
45
|
+
/* @__PURE__ */ s("desc", { children: f.map((e) => `${e.label}: ${_(e.value)} (${o(e.value, C)}%)`).join(", ") }),
|
|
46
|
+
/* @__PURE__ */ s("g", {
|
|
47
|
+
style: {
|
|
48
|
+
transformOrigin: "center",
|
|
49
|
+
transform: x || S ? "scale(1)" : "scale(0.86)",
|
|
50
|
+
transition: S ? void 0 : "transform 520ms cubic-bezier(0.22,1,0.36,1)"
|
|
51
|
+
},
|
|
52
|
+
children: k.map((e, t) => {
|
|
53
|
+
let n = {
|
|
54
|
+
fill: e.color,
|
|
55
|
+
style: {
|
|
56
|
+
opacity: x || S ? 1 : 0,
|
|
57
|
+
transition: S ? void 0 : "opacity 460ms ease",
|
|
58
|
+
transitionDelay: S ? void 0 : `${t * 70}ms`
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
return e.isFull ? /* @__PURE__ */ s("path", {
|
|
62
|
+
d: `M ${u} ${u - d} A ${d} ${d} 0 1 0 ${u} ${u + d} A ${d} ${d} 0 1 0 ${u} ${u - d} M ${u} ${u - T} A ${T} ${T} 0 1 1 ${u} ${u + T} A ${T} ${T} 0 1 1 ${u} ${u - T} Z`,
|
|
63
|
+
fillRule: "evenodd",
|
|
64
|
+
...n
|
|
65
|
+
}, `${e.segment.label}-${t}`) : /* @__PURE__ */ s("path", {
|
|
66
|
+
d: i(u, u, d, T, e.startAngle, e.endAngle),
|
|
67
|
+
...n,
|
|
68
|
+
children: /* @__PURE__ */ s("title", { children: `${e.segment.label}: ${_(e.segment.value)}` })
|
|
69
|
+
}, `${e.segment.label}-${t}`);
|
|
70
|
+
})
|
|
71
|
+
})
|
|
72
|
+
]
|
|
73
|
+
}), p !== void 0 || m !== void 0 ? /* @__PURE__ */ c("div", {
|
|
74
|
+
className: "pointer-events-none absolute inset-0 flex flex-col items-center justify-center text-center",
|
|
75
|
+
children: [/* @__PURE__ */ s("span", {
|
|
76
|
+
className: "text-xl font-semibold leading-none text-text-primary",
|
|
77
|
+
children: p
|
|
78
|
+
}), m === void 0 ? null : /* @__PURE__ */ s("span", {
|
|
79
|
+
className: "mt-1 text-xs text-text-muted",
|
|
80
|
+
children: m
|
|
81
|
+
})]
|
|
82
|
+
}) : null]
|
|
83
|
+
}), v ? /* @__PURE__ */ s("ul", {
|
|
84
|
+
className: "flex min-w-[8rem] flex-1 flex-col gap-1.5 text-sm",
|
|
85
|
+
children: k.map((e, t) => /* @__PURE__ */ c("li", {
|
|
86
|
+
className: "flex items-center gap-2",
|
|
87
|
+
children: [
|
|
88
|
+
/* @__PURE__ */ s("span", {
|
|
89
|
+
"aria-hidden": "true",
|
|
90
|
+
className: "inline-block h-2.5 w-2.5 shrink-0 rounded-full",
|
|
91
|
+
style: { backgroundColor: e.color }
|
|
92
|
+
}),
|
|
93
|
+
/* @__PURE__ */ s("span", {
|
|
94
|
+
className: "flex-1 truncate text-text-secondary",
|
|
95
|
+
children: e.segment.label
|
|
96
|
+
}),
|
|
97
|
+
/* @__PURE__ */ c("span", {
|
|
98
|
+
className: "tabular-nums text-text-muted",
|
|
99
|
+
children: [o(e.segment.value, C), "%"]
|
|
100
|
+
})
|
|
101
|
+
]
|
|
102
|
+
}, `${e.segment.label}-${t}`))
|
|
103
|
+
}) : null]
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
//#endregion
|
|
107
|
+
export { f as DonutChart };
|
|
108
|
+
|
|
109
|
+
//# sourceMappingURL=DonutChart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DonutChart.js","names":[],"sources":["../../../../src/kadaikodi/components/viz/DonutChart.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport { cn } from '../../utils/cn';\nimport { chartPalette } from './lib/palette';\nimport { donutSegmentPath } from './lib/geometry';\nimport { formatCompact, toPercent } from './lib/format';\nimport { useMounted, usePrefersReducedMotion } from './lib/hooks';\nimport type { Segment } from './lib/types';\n\nexport interface DonutChartProps {\n segments: Segment[];\n centerLabel?: ReactNode;\n /** Small caption under the center label. */\n centerCaption?: ReactNode;\n /** Pixel diameter (scales down responsively). */\n size?: number;\n /** Ring thickness as a fraction of the radius (0–1). */\n thickness?: number;\n valueFormatter?: (value: number) => string;\n showLegend?: boolean;\n title?: string;\n className?: string;\n}\n\nconst VIEW = 100;\nconst CENTER = VIEW / 2;\nconst R_OUTER = 46;\n\n/** Donut chart with a center label and an optional legend. */\nexport function DonutChart({\n segments,\n centerLabel,\n centerCaption,\n size = 168,\n thickness = 0.28,\n valueFormatter = formatCompact,\n showLegend = true,\n title,\n className,\n}: DonutChartProps) {\n const mounted = useMounted();\n const reduced = usePrefersReducedMotion();\n\n if (segments.length === 0) {\n return null;\n }\n\n const total = segments.reduce((acc, s) => acc + Math.max(0, s.value), 0);\n const palette = chartPalette(segments.length);\n const rInner = R_OUTER * (1 - thickness);\n const chartTitle = title ?? `Donut chart of ${segments.length} segments`;\n\n const fractions = segments.map((s) => (total > 0 ? Math.max(0, s.value) / total : 0));\n const starts = fractions.map((_, i) => fractions.slice(0, i).reduce((a, b) => a + b, 0));\n const arcs = segments.map((segment, i) => {\n const fraction = fractions[i];\n const startAngle = starts[i] * 360;\n const endAngle = Math.min((starts[i] + fraction) * 360, 359.999);\n const color = segment.color ?? palette[i];\n return { segment, color, startAngle, endAngle, fraction, isFull: fraction >= 0.9999 };\n });\n\n return (\n <div className={cn('flex flex-wrap items-center gap-5', className)}>\n <div className=\"relative shrink-0\" style={{ width: size, height: size, maxWidth: '100%' }}>\n <svg\n viewBox={`0 0 ${VIEW} ${VIEW}`}\n width={size}\n height={size}\n role=\"img\"\n aria-label={chartTitle}\n style={{ display: 'block', maxWidth: '100%', height: 'auto' }}\n >\n <title>{chartTitle}</title>\n <desc>\n {segments\n .map((s) => `${s.label}: ${valueFormatter(s.value)} (${toPercent(s.value, total)}%)`)\n .join(', ')}\n </desc>\n <g\n style={{\n transformOrigin: 'center',\n transform: mounted || reduced ? 'scale(1)' : 'scale(0.86)',\n transition: reduced ? undefined : 'transform 520ms cubic-bezier(0.22,1,0.36,1)',\n }}\n >\n {arcs.map((arc, i) => {\n const shared = {\n fill: arc.color,\n style: {\n opacity: mounted || reduced ? 1 : 0,\n transition: reduced ? undefined : 'opacity 460ms ease',\n transitionDelay: reduced ? undefined : `${i * 70}ms`,\n },\n } as const;\n if (arc.isFull) {\n return (\n <path\n key={`${arc.segment.label}-${i}`}\n d={`M ${CENTER} ${CENTER - R_OUTER} A ${R_OUTER} ${R_OUTER} 0 1 0 ${CENTER} ${\n CENTER + R_OUTER\n } A ${R_OUTER} ${R_OUTER} 0 1 0 ${CENTER} ${CENTER - R_OUTER} M ${CENTER} ${\n CENTER - rInner\n } A ${rInner} ${rInner} 0 1 1 ${CENTER} ${CENTER + rInner} A ${rInner} ${rInner} 0 1 1 ${CENTER} ${\n CENTER - rInner\n } Z`}\n fillRule=\"evenodd\"\n {...shared}\n />\n );\n }\n return (\n <path\n key={`${arc.segment.label}-${i}`}\n d={donutSegmentPath(\n CENTER,\n CENTER,\n R_OUTER,\n rInner,\n arc.startAngle,\n arc.endAngle\n )}\n {...shared}\n >\n <title>{`${arc.segment.label}: ${valueFormatter(arc.segment.value)}`}</title>\n </path>\n );\n })}\n </g>\n </svg>\n {centerLabel !== undefined || centerCaption !== undefined ? (\n <div className=\"pointer-events-none absolute inset-0 flex flex-col items-center justify-center text-center\">\n <span className=\"text-xl font-semibold leading-none text-text-primary\">\n {centerLabel}\n </span>\n {centerCaption !== undefined ? (\n <span className=\"mt-1 text-xs text-text-muted\">{centerCaption}</span>\n ) : null}\n </div>\n ) : null}\n </div>\n {showLegend ? (\n <ul className=\"flex min-w-[8rem] flex-1 flex-col gap-1.5 text-sm\">\n {arcs.map((arc, i) => (\n <li key={`${arc.segment.label}-${i}`} className=\"flex items-center gap-2\">\n <span\n aria-hidden=\"true\"\n className=\"inline-block h-2.5 w-2.5 shrink-0 rounded-full\"\n style={{ backgroundColor: arc.color }}\n />\n <span className=\"flex-1 truncate text-text-secondary\">{arc.segment.label}</span>\n <span className=\"tabular-nums text-text-muted\">\n {toPercent(arc.segment.value, total)}%\n </span>\n </li>\n ))}\n </ul>\n ) : null}\n </div>\n );\n}\n"],"mappings":";;;;;;;AAuBA,IAAM,IAAO,KACP,IAAS,IAAO,GAChB,IAAU;AAGhB,SAAgB,EAAW,EACzB,aACA,gBACA,kBACA,UAAO,KACP,eAAY,KACZ,oBAAiB,GACjB,gBAAa,IACb,UACA,gBACkB;CAClB,IAAM,IAAU,GAAY,EACtB,IAAU,GAAyB;AAEzC,KAAI,EAAS,WAAW,EACtB,QAAO;CAGT,IAAM,IAAQ,EAAS,QAAQ,GAAK,MAAM,IAAM,KAAK,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,EAClE,IAAU,EAAa,EAAS,OAAO,EACvC,IAAS,KAAW,IAAI,IACxB,IAAa,KAAS,kBAAkB,EAAS,OAAO,YAExD,IAAY,EAAS,KAAK,MAAO,IAAQ,IAAI,KAAK,IAAI,GAAG,EAAE,MAAM,GAAG,IAAQ,EAAG,EAC/E,IAAS,EAAU,KAAK,GAAG,MAAM,EAAU,MAAM,GAAG,EAAE,CAAC,QAAQ,GAAG,MAAM,IAAI,GAAG,EAAE,CAAC,EAClF,IAAO,EAAS,KAAK,GAAS,MAAM;EACxC,IAAM,IAAW,EAAU,IACrB,IAAa,EAAO,KAAK,KACzB,IAAW,KAAK,KAAK,EAAO,KAAK,KAAY,KAAK,QAAQ;AAEhE,SAAO;GAAE;GAAS,OADJ,EAAQ,SAAS,EAAQ;GACd;GAAY;GAAU;GAAU,QAAQ,KAAY;GAAQ;GACrF;AAEF,QACE,kBAAC,OAAD;EAAK,WAAW,EAAG,qCAAqC,EAAU;YAAlE,CACE,kBAAC,OAAD;GAAK,WAAU;GAAoB,OAAO;IAAE,OAAO;IAAM,QAAQ;IAAM,UAAU;IAAQ;aAAzF,CACE,kBAAC,OAAD;IACE,SAAS,OAAO,EAAK,GAAG;IACxB,OAAO;IACP,QAAQ;IACR,MAAK;IACL,cAAY;IACZ,OAAO;KAAE,SAAS;KAAS,UAAU;KAAQ,QAAQ;KAAQ;cAN/D;KAQE,kBAAC,SAAD,EAAA,UAAQ,GAAmB,CAAA;KAC3B,kBAAC,QAAD,EAAA,UACG,EACE,KAAK,MAAM,GAAG,EAAE,MAAM,IAAI,EAAe,EAAE,MAAM,CAAC,IAAI,EAAU,EAAE,OAAO,EAAM,CAAC,IAAI,CACpF,KAAK,KAAK,EACR,CAAA;KACP,kBAAC,KAAD;MACE,OAAO;OACL,iBAAiB;OACjB,WAAW,KAAW,IAAU,aAAa;OAC7C,YAAY,IAAU,KAAA,IAAY;OACnC;gBAEA,EAAK,KAAK,GAAK,MAAM;OACpB,IAAM,IAAS;QACb,MAAM,EAAI;QACV,OAAO;SACL,SAAS,KAAW,IAAU,IAAI;SAClC,YAAY,IAAU,KAAA,IAAY;SAClC,iBAAiB,IAAU,KAAA,IAAY,GAAG,IAAI,GAAG;SAClD;QACF;AAiBD,cAhBI,EAAI,SAEJ,kBAAC,QAAD;QAEE,GAAG,KAAK,EAAO,GAAG,IAAS,EAAQ,KAAK,EAAQ,GAAG,EAAQ,SAAS,EAAO,GACzE,IAAS,EACV,KAAK,EAAQ,GAAG,EAAQ,SAAS,EAAO,GAAG,IAAS,EAAQ,KAAK,EAAO,GACvE,IAAS,EACV,KAAK,EAAO,GAAG,EAAO,SAAS,EAAO,GAAG,IAAS,EAAO,KAAK,EAAO,GAAG,EAAO,SAAS,EAAO,GAC9F,IAAS,EACV;QACD,UAAS;QACT,GAAI;QACJ,EAVK,GAAG,EAAI,QAAQ,MAAM,GAAG,IAU7B,GAIJ,kBAAC,QAAD;QAEE,GAAG,EACD,GACA,GACA,GACA,GACA,EAAI,YACJ,EAAI,SACL;QACD,GAAI;kBAEJ,kBAAC,SAAD,EAAA,UAAQ,GAAG,EAAI,QAAQ,MAAM,IAAI,EAAe,EAAI,QAAQ,MAAM,IAAW,CAAA;QACxE,EAZA,GAAG,EAAI,QAAQ,MAAM,GAAG,IAYxB;QAET;MACA,CAAA;KACA;OACL,MAAgB,KAAA,KAAa,MAAkB,KAAA,IAC9C,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,QAAD;KAAM,WAAU;eACb;KACI,CAAA,EACN,MAAkB,KAAA,IAEf,OADF,kBAAC,QAAD;KAAM,WAAU;eAAgC;KAAqB,CAAA,CAEnE;QACJ,KACA;MACL,IACC,kBAAC,MAAD;GAAI,WAAU;aACX,EAAK,KAAK,GAAK,MACd,kBAAC,MAAD;IAAsC,WAAU;cAAhD;KACE,kBAAC,QAAD;MACE,eAAY;MACZ,WAAU;MACV,OAAO,EAAE,iBAAiB,EAAI,OAAO;MACrC,CAAA;KACF,kBAAC,QAAD;MAAM,WAAU;gBAAuC,EAAI,QAAQ;MAAa,CAAA;KAChF,kBAAC,QAAD;MAAM,WAAU;gBAAhB,CACG,EAAU,EAAI,QAAQ,OAAO,EAAM,EAAC,IAChC;;KACJ;MAVI,GAAG,EAAI,QAAQ,MAAM,GAAG,IAU5B,CACL;GACC,CAAA,GACH,KACA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { LabeledValue } from './lib/types';
|
|
2
|
+
|
|
3
|
+
export interface HBarFunnelProps {
|
|
4
|
+
/** Ordered funnel stages, largest first. */
|
|
5
|
+
stages: LabeledValue[];
|
|
6
|
+
valueFormatter?: (value: number) => string;
|
|
7
|
+
/** Show conversion % relative to the first stage. */
|
|
8
|
+
showConversion?: boolean;
|
|
9
|
+
className?: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Horizontal descending funnel. Each stage renders as a bar whose width is
|
|
13
|
+
* proportional to the top-of-funnel value; the accent fades down the funnel so
|
|
14
|
+
* the drop-off reads at a glance. Built with CSS bars for crisp, real text.
|
|
15
|
+
*/
|
|
16
|
+
export declare function HBarFunnel({ stages, valueFormatter, showConversion, className, }: HBarFunnelProps): import("react").JSX.Element | null;
|
|
17
|
+
//# sourceMappingURL=HBarFunnel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HBarFunnel.d.ts","sourceRoot":"","sources":["../../../../src/kadaikodi/components/viz/HBarFunnel.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,eAAe;IAC9B,4CAA4C;IAC5C,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3C,qDAAqD;IACrD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,EACzB,MAAM,EACN,cAA8B,EAC9B,cAAqB,EACrB,SAAS,GACV,EAAE,eAAe,sCAmDjB"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { cn as e } from "../../utils/cn.js";
|
|
2
|
+
import { ACCENT as t } from "./lib/palette.js";
|
|
3
|
+
import { useMounted as n, usePrefersReducedMotion as r } from "./lib/hooks.js";
|
|
4
|
+
import { formatCompact as i, toPercent as a } from "./lib/format.js";
|
|
5
|
+
import { jsx as o, jsxs as s } from "react/jsx-runtime";
|
|
6
|
+
//#region src/kadaikodi/components/viz/HBarFunnel.tsx
|
|
7
|
+
function c({ stages: c, valueFormatter: l = i, showConversion: u = !0, className: d }) {
|
|
8
|
+
let f = n(), p = r();
|
|
9
|
+
if (c.length === 0) return null;
|
|
10
|
+
let m = Math.max(c[0]?.value ?? 0, 1);
|
|
11
|
+
return /* @__PURE__ */ o("ol", {
|
|
12
|
+
className: e("flex flex-col gap-2", d),
|
|
13
|
+
children: c.map((e, n) => {
|
|
14
|
+
let r = a(e.value, m, 1), i = n === 0 ? 100 : a(e.value, c[n - 1].value, 1), d = 1 - n / Math.max(c.length, 2) * .62;
|
|
15
|
+
return /* @__PURE__ */ s("li", {
|
|
16
|
+
className: "flex flex-col gap-1",
|
|
17
|
+
children: [/* @__PURE__ */ s("div", {
|
|
18
|
+
className: "flex items-baseline justify-between text-sm",
|
|
19
|
+
children: [/* @__PURE__ */ o("span", {
|
|
20
|
+
className: "font-medium text-text-primary",
|
|
21
|
+
children: e.label
|
|
22
|
+
}), /* @__PURE__ */ s("span", {
|
|
23
|
+
className: "tabular-nums text-text-secondary",
|
|
24
|
+
children: [l(e.value), u && n > 0 ? /* @__PURE__ */ s("span", {
|
|
25
|
+
className: "ml-2 text-xs text-text-muted",
|
|
26
|
+
children: [i, "%"]
|
|
27
|
+
}) : null]
|
|
28
|
+
})]
|
|
29
|
+
}), /* @__PURE__ */ o("div", {
|
|
30
|
+
className: "h-7 w-full overflow-hidden rounded-[var(--radius-input)] bg-bg-sunken",
|
|
31
|
+
role: "progressbar",
|
|
32
|
+
"aria-valuenow": Math.round(r),
|
|
33
|
+
"aria-valuemin": 0,
|
|
34
|
+
"aria-valuemax": 100,
|
|
35
|
+
"aria-label": `${e.label}: ${l(e.value)}`,
|
|
36
|
+
children: /* @__PURE__ */ o("div", {
|
|
37
|
+
className: "h-full rounded-[var(--radius-input)]",
|
|
38
|
+
style: {
|
|
39
|
+
width: f || p ? `${r}%` : "0%",
|
|
40
|
+
backgroundColor: t,
|
|
41
|
+
opacity: d,
|
|
42
|
+
transition: p ? void 0 : "width 720ms cubic-bezier(0.22,1,0.36,1)",
|
|
43
|
+
transitionDelay: p ? void 0 : `${n * 70}ms`
|
|
44
|
+
}
|
|
45
|
+
})
|
|
46
|
+
})]
|
|
47
|
+
}, `${e.label}-${n}`);
|
|
48
|
+
})
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
//#endregion
|
|
52
|
+
export { c as HBarFunnel };
|
|
53
|
+
|
|
54
|
+
//# sourceMappingURL=HBarFunnel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HBarFunnel.js","names":[],"sources":["../../../../src/kadaikodi/components/viz/HBarFunnel.tsx"],"sourcesContent":["import { cn } from '../../utils/cn';\nimport { ACCENT } from './lib/palette';\nimport { formatCompact, toPercent } from './lib/format';\nimport { useMounted, usePrefersReducedMotion } from './lib/hooks';\nimport type { LabeledValue } from './lib/types';\n\nexport interface HBarFunnelProps {\n /** Ordered funnel stages, largest first. */\n stages: LabeledValue[];\n valueFormatter?: (value: number) => string;\n /** Show conversion % relative to the first stage. */\n showConversion?: boolean;\n className?: string;\n}\n\n/**\n * Horizontal descending funnel. Each stage renders as a bar whose width is\n * proportional to the top-of-funnel value; the accent fades down the funnel so\n * the drop-off reads at a glance. Built with CSS bars for crisp, real text.\n */\nexport function HBarFunnel({\n stages,\n valueFormatter = formatCompact,\n showConversion = true,\n className,\n}: HBarFunnelProps) {\n const mounted = useMounted();\n const reduced = usePrefersReducedMotion();\n\n if (stages.length === 0) {\n return null;\n }\n\n const top = Math.max(stages[0]?.value ?? 0, 1);\n\n return (\n <ol className={cn('flex flex-col gap-2', className)}>\n {stages.map((stage, i) => {\n const pct = toPercent(stage.value, top, 1);\n const conversion = i === 0 ? 100 : toPercent(stage.value, stages[i - 1].value, 1);\n const fillOpacity = 1 - (i / Math.max(stages.length, 2)) * 0.62;\n return (\n <li key={`${stage.label}-${i}`} className=\"flex flex-col gap-1\">\n <div className=\"flex items-baseline justify-between text-sm\">\n <span className=\"font-medium text-text-primary\">{stage.label}</span>\n <span className=\"tabular-nums text-text-secondary\">\n {valueFormatter(stage.value)}\n {showConversion && i > 0 ? (\n <span className=\"ml-2 text-xs text-text-muted\">{conversion}%</span>\n ) : null}\n </span>\n </div>\n <div\n className=\"h-7 w-full overflow-hidden rounded-[var(--radius-input)] bg-bg-sunken\"\n role=\"progressbar\"\n aria-valuenow={Math.round(pct)}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={`${stage.label}: ${valueFormatter(stage.value)}`}\n >\n <div\n className=\"h-full rounded-[var(--radius-input)]\"\n style={{\n width: mounted || reduced ? `${pct}%` : '0%',\n backgroundColor: ACCENT,\n opacity: fillOpacity,\n transition: reduced ? undefined : 'width 720ms cubic-bezier(0.22,1,0.36,1)',\n transitionDelay: reduced ? undefined : `${i * 70}ms`,\n }}\n />\n </div>\n </li>\n );\n })}\n </ol>\n );\n}\n"],"mappings":";;;;;;AAoBA,SAAgB,EAAW,EACzB,WACA,oBAAiB,GACjB,oBAAiB,IACjB,gBACkB;CAClB,IAAM,IAAU,GAAY,EACtB,IAAU,GAAyB;AAEzC,KAAI,EAAO,WAAW,EACpB,QAAO;CAGT,IAAM,IAAM,KAAK,IAAI,EAAO,IAAI,SAAS,GAAG,EAAE;AAE9C,QACE,kBAAC,MAAD;EAAI,WAAW,EAAG,uBAAuB,EAAU;YAChD,EAAO,KAAK,GAAO,MAAM;GACxB,IAAM,IAAM,EAAU,EAAM,OAAO,GAAK,EAAE,EACpC,IAAa,MAAM,IAAI,MAAM,EAAU,EAAM,OAAO,EAAO,IAAI,GAAG,OAAO,EAAE,EAC3E,IAAc,IAAK,IAAI,KAAK,IAAI,EAAO,QAAQ,EAAE,GAAI;AAC3D,UACE,kBAAC,MAAD;IAAgC,WAAU;cAA1C,CACE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,QAAD;MAAM,WAAU;gBAAiC,EAAM;MAAa,CAAA,EACpE,kBAAC,QAAD;MAAM,WAAU;gBAAhB,CACG,EAAe,EAAM,MAAM,EAC3B,KAAkB,IAAI,IACrB,kBAAC,QAAD;OAAM,WAAU;iBAAhB,CAAgD,GAAW,IAAQ;WACjE,KACC;QACH;QACN,kBAAC,OAAD;KACE,WAAU;KACV,MAAK;KACL,iBAAe,KAAK,MAAM,EAAI;KAC9B,iBAAe;KACf,iBAAe;KACf,cAAY,GAAG,EAAM,MAAM,IAAI,EAAe,EAAM,MAAM;eAE1D,kBAAC,OAAD;MACE,WAAU;MACV,OAAO;OACL,OAAO,KAAW,IAAU,GAAG,EAAI,KAAK;OACxC,iBAAiB;OACjB,SAAS;OACT,YAAY,IAAU,KAAA,IAAY;OAClC,iBAAiB,IAAU,KAAA,IAAY,GAAG,IAAI,GAAG;OAClD;MACD,CAAA;KACE,CAAA,CACH;MA7BI,GAAG,EAAM,MAAM,GAAG,IA6BtB;IAEP;EACC,CAAA"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export interface HeatmapCell {
|
|
2
|
+
value: number;
|
|
3
|
+
/** Per-cell max; otherwise the grid-wide max is used. */
|
|
4
|
+
max?: number;
|
|
5
|
+
}
|
|
6
|
+
export interface HeatmapRow {
|
|
7
|
+
label: string;
|
|
8
|
+
cells: HeatmapCell[];
|
|
9
|
+
}
|
|
10
|
+
export interface HeatmapProps {
|
|
11
|
+
rows: HeatmapRow[];
|
|
12
|
+
colLabels?: string[];
|
|
13
|
+
/** Show the intensity legend below the grid. */
|
|
14
|
+
legend?: boolean;
|
|
15
|
+
/** Show the numeric value inside each cell. */
|
|
16
|
+
showValues?: boolean;
|
|
17
|
+
valueFormatter?: (value: number) => string;
|
|
18
|
+
title?: string;
|
|
19
|
+
className?: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Row × column grid with accent-shaded cells. Rendered as a real table (row +
|
|
23
|
+
* column headers) and horizontally scrollable so wide grids never push the page.
|
|
24
|
+
*/
|
|
25
|
+
export declare function Heatmap({ rows, colLabels, legend, showValues, valueFormatter, title, className, }: HeatmapProps): import("react").JSX.Element | null;
|
|
26
|
+
//# sourceMappingURL=Heatmap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Heatmap.d.ts","sourceRoot":"","sources":["../../../../src/kadaikodi/components/viz/Heatmap.tsx"],"names":[],"mappings":"AAKA,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,yDAAyD;IACzD,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,WAAW,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,gDAAgD;IAChD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,+CAA+C;IAC/C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAUD;;;GAGG;AACH,wBAAgB,OAAO,CAAC,EACtB,IAAI,EACJ,SAAS,EACT,MAAa,EACb,UAAkB,EAClB,cAAiC,EACjC,KAAK,EACL,SAAS,GACV,EAAE,YAAY,sCAwGd"}
|