@wakastellar/ui 2.3.5 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (332) hide show
  1. package/dist/blocks/antivirus-dashboard/index.d.ts +44 -0
  2. package/dist/blocks/clamav-service-status/index.d.ts +35 -0
  3. package/dist/blocks/file-scan-uploader/index.d.ts +29 -0
  4. package/dist/blocks/index.d.ts +18 -9
  5. package/dist/blocks/quarantine-manager/index.d.ts +27 -0
  6. package/dist/blocks/scan-history-log/index.d.ts +28 -0
  7. package/dist/blocks/scan-policy-editor/index.d.ts +27 -0
  8. package/dist/blocks/scan-report-generator/index.d.ts +47 -0
  9. package/dist/blocks/signature-database-manager/index.d.ts +39 -0
  10. package/dist/blocks/threat-alert-banner/index.d.ts +26 -0
  11. package/dist/components/index.d.ts +4 -4
  12. package/dist/components/waka-signature-pad/index.d.ts +1 -1
  13. package/dist/exceljs.min-BcLLX0PC.js +29 -0
  14. package/dist/exceljs.min-KOayaaQ4.mjs +23013 -0
  15. package/dist/export.cjs.js +1 -1
  16. package/dist/export.d.ts +2 -2
  17. package/dist/export.es.js +1 -1
  18. package/dist/index.cjs.js +136 -136
  19. package/dist/index.es.js +29978 -27215
  20. package/dist/stories/Button.d.ts +14 -0
  21. package/dist/stories/Button.stories.d.ts +8 -0
  22. package/dist/stories/Header.d.ts +11 -0
  23. package/dist/stories/Header.stories.d.ts +6 -0
  24. package/dist/stories/Page.d.ts +2 -0
  25. package/dist/stories/Page.stories.d.ts +6 -0
  26. package/dist/useDataTableImport-COVnvslz.js +9 -0
  27. package/dist/useDataTableImport-DAlxBY8w.mjs +237 -0
  28. package/dist/utils/index.d.ts +1 -0
  29. package/dist/utils/logger.d.ts +9 -0
  30. package/package.json +14 -6
  31. package/src/blocks/activity-timeline/ActivityTimeline.stories.tsx +460 -0
  32. package/src/blocks/antivirus-dashboard/AntivirusDashboard.stories.tsx +291 -0
  33. package/src/blocks/antivirus-dashboard/index.tsx +525 -0
  34. package/src/blocks/apm-overview/APMOverview.stories.tsx +435 -0
  35. package/src/blocks/auth-2fa/Auth2FA.stories.tsx +308 -0
  36. package/src/blocks/calendar-view/CalendarView.stories.tsx +398 -0
  37. package/src/blocks/chat/Chat.stories.tsx +466 -0
  38. package/src/blocks/chat-interface/ChatInterface.stories.tsx +412 -0
  39. package/src/blocks/checkout-flow/CheckoutFlow.stories.tsx +408 -0
  40. package/src/blocks/cicd-builder/CICDBuilder.stories.tsx +499 -0
  41. package/src/blocks/clamav-service-status/ClamAVServiceStatus.stories.tsx +195 -0
  42. package/src/blocks/clamav-service-status/index.tsx +370 -0
  43. package/src/blocks/cloud-cost-dashboard/CloudCostDashboard.stories.tsx +356 -0
  44. package/src/blocks/container-orchestrator/ContainerOrchestrator.stories.tsx +461 -0
  45. package/src/blocks/dashboard/Dashboard.stories.tsx +559 -0
  46. package/src/blocks/dashboard-kpi/DashboardKPI.stories.tsx +422 -0
  47. package/src/blocks/database-admin/DatabaseAdmin.stories.tsx +393 -0
  48. package/src/blocks/deployment-dashboard/DeploymentDashboard.stories.tsx +457 -0
  49. package/src/blocks/empty-states/EmptyStates.stories.tsx +467 -0
  50. package/src/blocks/error-pages/ErrorPages.stories.tsx +401 -0
  51. package/src/blocks/faq/FAQ.stories.tsx +416 -0
  52. package/src/blocks/file-manager/FileManager.stories.tsx +413 -0
  53. package/src/blocks/file-scan-uploader/FileScanUploader.stories.tsx +257 -0
  54. package/src/blocks/file-scan-uploader/index.tsx +311 -0
  55. package/src/blocks/footer/Footer.stories.tsx +328 -0
  56. package/src/blocks/gitops-sync-status/GitOpsSyncStatus.stories.tsx +529 -0
  57. package/src/blocks/header/WakaHeader.stories.tsx +455 -0
  58. package/src/blocks/headtab/Headtab.stories.tsx +369 -0
  59. package/src/blocks/i18n-editor/I18nEditor.stories.tsx +451 -0
  60. package/src/blocks/incident-manager/IncidentManager.stories.tsx +464 -0
  61. package/src/blocks/index.ts +163 -11
  62. package/src/blocks/infrastructure-map/InfrastructureMap.stories.tsx +533 -0
  63. package/src/blocks/kanban-board/KanbanBoard.stories.tsx +494 -0
  64. package/src/blocks/landing/WakaLanding.stories.tsx +449 -0
  65. package/src/blocks/language-selector/LanguageSelector.stories.tsx +345 -0
  66. package/src/blocks/layout/Layout.stories.tsx +373 -0
  67. package/src/blocks/login/Login.stories.tsx +443 -0
  68. package/src/blocks/on-call-schedule/OnCallSchedule.stories.tsx +381 -0
  69. package/src/blocks/player-profile/PlayerProfile.stories.tsx +316 -0
  70. package/src/blocks/pricing/WakaPricing.stories.tsx +530 -0
  71. package/src/blocks/profile/Profile.stories.tsx +371 -0
  72. package/src/blocks/quarantine-manager/QuarantineManager.stories.tsx +209 -0
  73. package/src/blocks/quarantine-manager/index.tsx +435 -0
  74. package/src/blocks/release-notes/ReleaseNotes.stories.tsx +431 -0
  75. package/src/blocks/scan-history-log/ScanHistoryLog.stories.tsx +231 -0
  76. package/src/blocks/scan-history-log/index.tsx +406 -0
  77. package/src/blocks/scan-policy-editor/ScanPolicyEditor.stories.tsx +106 -0
  78. package/src/blocks/scan-policy-editor/index.tsx +418 -0
  79. package/src/blocks/scan-report-generator/ScanReportGenerator.stories.tsx +232 -0
  80. package/src/blocks/scan-report-generator/index.tsx +612 -0
  81. package/src/blocks/settings/Settings.stories.tsx +520 -0
  82. package/src/blocks/sidebar/WakaSidebar.stories.tsx +513 -0
  83. package/src/blocks/sidebar/index.tsx +2 -1
  84. package/src/blocks/signature-database-manager/SignatureDatabaseManager.stories.tsx +279 -0
  85. package/src/blocks/signature-database-manager/index.tsx +470 -0
  86. package/src/blocks/theme-creator-block/ThemeCreatorBlock.stories.tsx +370 -0
  87. package/src/blocks/theme-creator-block/index.tsx +16 -2
  88. package/src/blocks/threat-alert-banner/ThreatAlertBanner.stories.tsx +152 -0
  89. package/src/blocks/threat-alert-banner/index.tsx +320 -0
  90. package/src/blocks/user-management/UserManagement.stories.tsx +411 -0
  91. package/src/blocks/wizard/Wizard.stories.tsx +683 -0
  92. package/src/components/DataTable/DataTable.stories.tsx +203 -0
  93. package/src/components/DataTable/hooks/useDataTableExport.ts +38 -31
  94. package/src/components/DataTable/hooks/useDataTableImport.ts +31 -20
  95. package/src/components/accordion/Accordion.stories.tsx +93 -0
  96. package/src/components/alert/Alert.stories.tsx +95 -0
  97. package/src/components/alert-dialog/AlertDialog.stories.tsx +126 -0
  98. package/src/components/aspect-ratio/AspectRatio.stories.tsx +118 -0
  99. package/src/components/avatar/Avatar.stories.tsx +104 -0
  100. package/src/components/button/Button.stories.tsx +12 -1
  101. package/src/components/calendar/Calendar.stories.tsx +102 -0
  102. package/src/components/card/Card.stories.tsx +125 -0
  103. package/src/components/checkbox/Checkbox.stories.tsx +100 -0
  104. package/src/components/code/Code.stories.tsx +402 -0
  105. package/src/components/collapsible/Collapsible.stories.tsx +123 -0
  106. package/src/components/command/Command.stories.tsx +207 -0
  107. package/src/components/context-menu/ContextMenu.stories.tsx +220 -0
  108. package/src/components/dialog/Dialog.stories.tsx +157 -0
  109. package/src/components/dropdown-menu/DropdownMenu.stories.tsx +225 -0
  110. package/src/components/error-boundary/ErrorBoundary.stories.tsx +125 -0
  111. package/src/components/form/Form.stories.tsx +413 -0
  112. package/src/components/hover-card/HoverCard.stories.tsx +148 -0
  113. package/src/components/index.ts +45 -4
  114. package/src/components/input-otp/InputOTP.stories.tsx +255 -0
  115. package/src/components/label/Label.stories.tsx +68 -0
  116. package/src/components/language-selector/LanguageSelector.stories.tsx +112 -0
  117. package/src/components/menubar/Menubar.stories.tsx +278 -0
  118. package/src/components/navigation-menu/NavigationMenu.stories.tsx +202 -0
  119. package/src/components/popover/Popover.stories.tsx +199 -0
  120. package/src/components/progress/Progress.stories.tsx +104 -0
  121. package/src/components/radio-group/RadioGroup.stories.tsx +138 -0
  122. package/src/components/scroll-area/ScrollArea.stories.tsx +153 -0
  123. package/src/components/select/Select.stories.tsx +146 -0
  124. package/src/components/separator/Separator.stories.tsx +117 -0
  125. package/src/components/sheet/Sheet.stories.tsx +195 -0
  126. package/src/components/skeleton/Skeleton.stories.tsx +114 -0
  127. package/src/components/slider/Slider.stories.tsx +157 -0
  128. package/src/components/switch/Switch.stories.tsx +114 -0
  129. package/src/components/table/Table.stories.tsx +153 -0
  130. package/src/components/tabs/Tabs.stories.tsx +155 -0
  131. package/src/components/textarea/Textarea.stories.tsx +116 -0
  132. package/src/components/theme-selector/ThemeSelector.stories.tsx +77 -0
  133. package/src/components/toast/Toast.stories.tsx +160 -0
  134. package/src/components/toaster/Toaster.stories.tsx +67 -0
  135. package/src/components/toggle/Toggle.stories.tsx +125 -0
  136. package/src/components/tooltip/Tooltip.stories.tsx +133 -0
  137. package/src/components/typography/Typography.stories.tsx +207 -0
  138. package/src/components/waka-3d-pie-chart/Waka3DPieChart.stories.tsx +308 -0
  139. package/src/components/waka-achievement-unlock/WakaAchievementUnlock.stories.tsx +353 -0
  140. package/src/components/waka-activity-feed/WakaActivityFeed.stories.tsx +116 -0
  141. package/src/components/waka-ad-banner/WakaAdBanner.stories.tsx +102 -0
  142. package/src/components/waka-ad-fallback/WakaAdFallback.stories.tsx +117 -0
  143. package/src/components/waka-ad-inline/WakaAdInline.stories.tsx +105 -0
  144. package/src/components/waka-ad-interstitial/WakaAdInterstitial.stories.tsx +92 -0
  145. package/src/components/waka-ad-placeholder/WakaAdPlaceholder.stories.tsx +89 -0
  146. package/src/components/waka-ad-provider/WakaAdProvider.stories.tsx +110 -0
  147. package/src/components/waka-ad-sidebar/WakaAdSidebar.stories.tsx +89 -0
  148. package/src/components/waka-ad-sidebar/index.tsx +3 -2
  149. package/src/components/waka-ad-sticky-footer/WakaAdStickyFooter.stories.tsx +88 -0
  150. package/src/components/waka-address-autocomplete/WakaAddressAutocomplete.stories.tsx +46 -0
  151. package/src/components/waka-admincrumb/WakaAdmincrumb.stories.tsx +166 -0
  152. package/src/components/waka-alert-panel/WakaAlertPanel.stories.tsx +45 -0
  153. package/src/components/waka-alert-stack/WakaAlertStack.stories.tsx +62 -0
  154. package/src/components/waka-allocation-matrix/WakaAllocationMatrix.stories.tsx +68 -0
  155. package/src/components/waka-approval-chain/WakaApprovalChain.stories.tsx +63 -0
  156. package/src/components/waka-artifact-list/WakaArtifactList.stories.tsx +258 -0
  157. package/src/components/waka-audit-log/WakaAuditLog.stories.tsx +73 -0
  158. package/src/components/waka-autocomplete/WakaAutocomplete.stories.tsx +184 -0
  159. package/src/components/waka-badge-showcase/WakaBadgeShowcase.stories.tsx +269 -0
  160. package/src/components/waka-barcode/WakaBarcode.stories.tsx +227 -0
  161. package/src/components/waka-biometric-prompt/WakaBiometricPrompt.stories.tsx +48 -0
  162. package/src/components/waka-bottom-sheet/WakaBottomSheet.stories.tsx +408 -0
  163. package/src/components/waka-breadcrumb/WakaBreadcrumb.stories.tsx +120 -0
  164. package/src/components/waka-breadcrumb-path/WakaBreadcrumbPath.stories.tsx +40 -0
  165. package/src/components/waka-budget-burn/WakaBudgetBurn.stories.tsx +86 -0
  166. package/src/components/waka-build-matrix/WakaBuildMatrix.stories.tsx +328 -0
  167. package/src/components/waka-capacity-planner/WakaCapacityPlanner.stories.tsx +273 -0
  168. package/src/components/waka-carousel/WakaCarousel.stories.tsx +296 -0
  169. package/src/components/waka-cart-summary/WakaCartSummary.stories.tsx +176 -0
  170. package/src/components/waka-cart-summary/index.tsx +19 -10
  171. package/src/components/waka-challenge-timer/WakaChallengeTimer.stories.tsx +98 -0
  172. package/src/components/waka-charts/WakaCharts.stories.tsx +519 -0
  173. package/src/components/waka-chat-bubble/WakaChatBubble.stories.tsx +118 -0
  174. package/src/components/waka-checklist/WakaChecklist.stories.tsx +71 -0
  175. package/src/components/waka-checkout-stepper/WakaCheckoutStepper.stories.tsx +102 -0
  176. package/src/components/waka-cohort-table/WakaCohortTable.stories.tsx +56 -0
  177. package/src/components/waka-color-picker/WakaColorPicker.stories.tsx +144 -0
  178. package/src/components/waka-combo-counter/WakaComboCounter.stories.tsx +128 -0
  179. package/src/components/waka-combobox/WakaCombobox.stories.tsx +250 -0
  180. package/src/components/waka-command-bar/WakaCommandBar.stories.tsx +45 -0
  181. package/src/components/waka-compare-period/WakaComparePeriod.stories.tsx +76 -0
  182. package/src/components/waka-config-comparator/WakaConfigComparator.stories.tsx +143 -0
  183. package/src/components/waka-connection-matrix/WakaConnectionMatrix.stories.tsx +52 -0
  184. package/src/components/waka-container-list/WakaContainerList.stories.tsx +315 -0
  185. package/src/components/waka-content-recommendation/WakaContentRecommendation.stories.tsx +41 -0
  186. package/src/components/waka-contribution-graph/WakaContributionGraph.stories.tsx +354 -0
  187. package/src/components/waka-cost-breakdown/WakaCostBreakdown.stories.tsx +348 -0
  188. package/src/components/waka-coupon-input/WakaCouponInput.stories.tsx +126 -0
  189. package/src/components/waka-credit-card-input/WakaCreditCardInput.stories.tsx +120 -0
  190. package/src/components/waka-daily-reward/WakaDailyReward.stories.tsx +365 -0
  191. package/src/components/waka-database-card/WakaDatabaseCard.stories.tsx +306 -0
  192. package/src/components/waka-date-range-picker/WakaDateRangePicker.stories.tsx +339 -0
  193. package/src/components/waka-datetime-picker/WakaDateTimePicker.stories.tsx +317 -0
  194. package/src/components/waka-datetime-picker.form-integration/WakaDateTimePickerForm.stories.tsx +79 -0
  195. package/src/components/waka-dependency-tree/WakaDependencyTree.stories.tsx +72 -0
  196. package/src/components/waka-deployment-lane/WakaDeploymentLane.stories.tsx +292 -0
  197. package/src/components/waka-device-trust/WakaDeviceTrust.stories.tsx +109 -0
  198. package/src/components/waka-dock/WakaDock.stories.tsx +332 -0
  199. package/src/components/waka-drawer/WakaDrawer.stories.tsx +437 -0
  200. package/src/components/waka-empty-state/WakaEmptyState.stories.tsx +87 -0
  201. package/src/components/waka-env-var-editor/WakaEnvVarEditor.stories.tsx +263 -0
  202. package/src/components/waka-error-shake/WakaErrorShake.stories.tsx +410 -0
  203. package/src/components/waka-feature-announcement/WakaFeatureAnnouncement.stories.tsx +47 -0
  204. package/src/components/waka-feature-flag-row/WakaFeatureFlagRow.stories.tsx +188 -0
  205. package/src/components/waka-file-upload/WakaFileUpload.stories.tsx +183 -0
  206. package/src/components/waka-floating-nav/WakaFloatingNav.stories.tsx +53 -0
  207. package/src/components/waka-flow-diagram/WakaFlowDiagram.stories.tsx +365 -0
  208. package/src/components/waka-funnel-chart/WakaFunnelChart.stories.tsx +281 -0
  209. package/src/components/waka-glow-card/WakaGlowCard.stories.tsx +274 -0
  210. package/src/components/waka-goal-progress/WakaGoalProgress.stories.tsx +137 -0
  211. package/src/components/waka-haptic-button/WakaHapticButton.stories.tsx +349 -0
  212. package/src/components/waka-health-pulse/WakaHealthPulse.stories.tsx +293 -0
  213. package/src/components/waka-heatmap/WakaHeatmap.stories.tsx +376 -0
  214. package/src/components/waka-hotspot/WakaHotspot.stories.tsx +56 -0
  215. package/src/components/waka-image/WakaImage.stories.tsx +255 -0
  216. package/src/components/waka-incident-timeline/WakaIncidentTimeline.stories.tsx +300 -0
  217. package/src/components/waka-invoice-preview/WakaInvoicePreview.stories.tsx +169 -0
  218. package/src/components/waka-kanban/WakaKanban.stories.tsx +399 -0
  219. package/src/components/waka-kpi-dashboard/WakaKpiDashboard.stories.tsx +46 -0
  220. package/src/components/waka-kubernetes-overview/WakaKubernetesOverview.stories.tsx +281 -0
  221. package/src/components/waka-leaderboard/WakaLeaderboard.stories.tsx +300 -0
  222. package/src/components/waka-level-progress/WakaLevelProgress.stories.tsx +332 -0
  223. package/src/components/waka-liquid-button/WakaLiquidButton.stories.tsx +45 -0
  224. package/src/components/waka-loading-orbit/WakaLoadingOrbit.stories.tsx +413 -0
  225. package/src/components/waka-log-viewer/WakaLogViewer.stories.tsx +312 -0
  226. package/src/components/waka-loot-box/WakaLootBox.stories.tsx +374 -0
  227. package/src/components/waka-magic-link/WakaMagicLink.stories.tsx +61 -0
  228. package/src/components/waka-magnetic-button/WakaMagneticButton.stories.tsx +40 -0
  229. package/src/components/waka-mention-input/WakaMentionInput.stories.tsx +140 -0
  230. package/src/components/waka-metric-sparkline/WakaMetricSparkline.stories.tsx +312 -0
  231. package/src/components/waka-migration-list/WakaMigrationList.stories.tsx +289 -0
  232. package/src/components/waka-milestone-road/WakaMilestoneRoad.stories.tsx +143 -0
  233. package/src/components/waka-modal/WakaModal.stories.tsx +434 -0
  234. package/src/components/waka-morph-button/WakaMorphButton.stories.tsx +405 -0
  235. package/src/components/waka-network-topology/WakaNetworkTopology.stories.tsx +364 -0
  236. package/src/components/waka-notifications/WakaNotifications.stories.tsx +290 -0
  237. package/src/components/waka-number-input/WakaNumberInput.stories.tsx +282 -0
  238. package/src/components/waka-orbital-menu/WakaOrbitalMenu.stories.tsx +54 -0
  239. package/src/components/waka-order-tracker/WakaOrderTracker.stories.tsx +163 -0
  240. package/src/components/waka-outstream-video/WakaOutstreamVideo.stories.tsx +94 -0
  241. package/src/components/waka-pagination/WakaPagination.stories.tsx +158 -0
  242. package/src/components/waka-password-strength/WakaPasswordStrength.stories.tsx +182 -0
  243. package/src/components/waka-payment-method-picker/WakaPaymentMethodPicker.stories.tsx +141 -0
  244. package/src/components/waka-permission-matrix/WakaPermissionMatrix.stories.tsx +124 -0
  245. package/src/components/waka-phone-input/WakaPhoneInput.stories.tsx +56 -0
  246. package/src/components/waka-pipeline-view/WakaPipelineView.stories.tsx +386 -0
  247. package/src/components/waka-player-card/WakaPlayerCard.stories.tsx +333 -0
  248. package/src/components/waka-pod-card/WakaPodCard.stories.tsx +435 -0
  249. package/src/components/waka-points-popup/WakaPointsPopup.stories.tsx +96 -0
  250. package/src/components/waka-power-up/WakaPowerUp.stories.tsx +121 -0
  251. package/src/components/waka-presence-indicator/WakaPresenceIndicator.stories.tsx +49 -0
  252. package/src/components/waka-pricing-table/WakaPricingTable.stories.tsx +159 -0
  253. package/src/components/waka-product-card/WakaProductCard.stories.tsx +202 -0
  254. package/src/components/waka-progress-onboarding/WakaProgressOnboarding.stories.tsx +57 -0
  255. package/src/components/waka-pull-to-refresh/WakaPullToRefresh.stories.tsx +51 -0
  256. package/src/components/waka-qrcode/WakaQRCode.stories.tsx +232 -0
  257. package/src/components/waka-query-explain/WakaQueryExplain.stories.tsx +407 -0
  258. package/src/components/waka-quest-card/WakaQuestCard.stories.tsx +394 -0
  259. package/src/components/waka-quota-bar/WakaQuotaBar.stories.tsx +435 -0
  260. package/src/components/waka-radar-score/WakaRadarScore.stories.tsx +372 -0
  261. package/src/components/waka-rank-badge/WakaRankBadge.stories.tsx +108 -0
  262. package/src/components/waka-rating-input/WakaRatingInput.stories.tsx +51 -0
  263. package/src/components/waka-reaction-picker/WakaReactionPicker.stories.tsx +52 -0
  264. package/src/components/waka-region-map/WakaRegionMap.stories.tsx +181 -0
  265. package/src/components/waka-resource-gauge/WakaResourceGauge.stories.tsx +366 -0
  266. package/src/components/waka-resource-pool/WakaResourcePool.stories.tsx +70 -0
  267. package/src/components/waka-rich-text-editor/WakaRichTextEditor.stories.tsx +149 -0
  268. package/src/components/waka-rollback-slider/WakaRollbackSlider.stories.tsx +41 -0
  269. package/src/components/waka-sankey-diagram/WakaSankeyDiagram.stories.tsx +389 -0
  270. package/src/components/waka-schedule-picker/WakaSchedulePicker.stories.tsx +64 -0
  271. package/src/components/waka-scratch-card/WakaScratchCard.stories.tsx +388 -0
  272. package/src/components/waka-season-pass/WakaSeasonPass.stories.tsx +107 -0
  273. package/src/components/waka-secret-card/WakaSecretCard.stories.tsx +314 -0
  274. package/src/components/waka-security-scan-result/WakaSecurityScanResult.stories.tsx +146 -0
  275. package/src/components/waka-security-score/WakaSecurityScore.stories.tsx +63 -0
  276. package/src/components/waka-segmented-control/WakaSegmentedControl.stories.tsx +309 -0
  277. package/src/components/waka-server-rack/WakaServerRack.stories.tsx +382 -0
  278. package/src/components/waka-service-graph/WakaServiceGraph.stories.tsx +262 -0
  279. package/src/components/waka-session-manager/WakaSessionManager.stories.tsx +68 -0
  280. package/src/components/waka-signature-pad/WakaSignaturePad.stories.tsx +159 -0
  281. package/src/components/waka-signature-pad/index.tsx +5 -3
  282. package/src/components/waka-skeleton-wave/WakaSkeletonWave.stories.tsx +321 -0
  283. package/src/components/waka-skill-tree/WakaSkillTree.stories.tsx +308 -0
  284. package/src/components/waka-sla-tracker/WakaSlaTracker.stories.tsx +65 -0
  285. package/src/components/waka-slider-range/WakaSliderRange.stories.tsx +66 -0
  286. package/src/components/waka-spin-wheel/WakaSpinWheel.stories.tsx +368 -0
  287. package/src/components/waka-spinner/WakaSpinner.stories.tsx +156 -0
  288. package/src/components/waka-sponsored-badge/WakaSponsoredBadge.stories.tsx +60 -0
  289. package/src/components/waka-sponsored-card/WakaSponsoredCard.stories.tsx +64 -0
  290. package/src/components/waka-sponsored-feed/WakaSponsoredFeed.stories.tsx +58 -0
  291. package/src/components/waka-spotlight/WakaSpotlight.stories.tsx +53 -0
  292. package/src/components/waka-stat/WakaStat.stories.tsx +334 -0
  293. package/src/components/waka-stats-hexagon/WakaStatsHexagon.stories.tsx +161 -0
  294. package/src/components/waka-status-matrix/WakaStatusMatrix.stories.tsx +331 -0
  295. package/src/components/waka-stepper/WakaStepper.stories.tsx +195 -0
  296. package/src/components/waka-streak-counter/WakaStreakCounter.stories.tsx +235 -0
  297. package/src/components/waka-success-explosion/WakaSuccessExplosion.stories.tsx +389 -0
  298. package/src/components/waka-swipe-card/WakaSwipeCard.stories.tsx +51 -0
  299. package/src/components/waka-tabs-morph/WakaTabsMorph.stories.tsx +471 -0
  300. package/src/components/waka-tag-input/WakaTagInput.stories.tsx +224 -0
  301. package/src/components/waka-team-banner/WakaTeamBanner.stories.tsx +50 -0
  302. package/src/components/waka-terminal-output/WakaTerminalOutput.stories.tsx +351 -0
  303. package/src/components/waka-test-report/WakaTestReport.stories.tsx +322 -0
  304. package/src/components/waka-theme-creator/WakaThemeCreator.stories.tsx +58 -0
  305. package/src/components/waka-theme-manager/WakaThemeManager.stories.tsx +298 -0
  306. package/src/components/waka-theme-manager/index.tsx +6 -11
  307. package/src/components/waka-thread-view/WakaThreadView.stories.tsx +143 -0
  308. package/src/components/waka-tilt-card/WakaTiltCard.stories.tsx +300 -0
  309. package/src/components/waka-time-picker/WakaTimePicker.stories.tsx +227 -0
  310. package/src/components/waka-timeline/WakaTimeline.stories.tsx +230 -0
  311. package/src/components/waka-tooltip-tour/WakaTooltipTour.stories.tsx +92 -0
  312. package/src/components/waka-tour-guide/WakaTourGuide.stories.tsx +89 -0
  313. package/src/components/waka-tournament-bracket/WakaTournamentBracket.stories.tsx +375 -0
  314. package/src/components/waka-trace-viewer/WakaTraceViewer.stories.tsx +445 -0
  315. package/src/components/waka-tree/WakaTree.stories.tsx +359 -0
  316. package/src/components/waka-treemap-chart/WakaTreemapChart.stories.tsx +483 -0
  317. package/src/components/waka-treemap-chart/index.tsx +2 -2
  318. package/src/components/waka-two-factor-setup/WakaTwoFactorSetup.stories.tsx +142 -0
  319. package/src/components/waka-typewriter/WakaTypewriter.stories.tsx +366 -0
  320. package/src/components/waka-typing-indicator/WakaTypingIndicator.stories.tsx +134 -0
  321. package/src/components/waka-versus-card/WakaVersusCard.stories.tsx +530 -0
  322. package/src/components/waka-video/WakaVideo.stories.tsx +203 -0
  323. package/src/components/waka-video-ad/WakaVideoAd.stories.tsx +138 -0
  324. package/src/components/waka-video-call/WakaVideoCall.stories.tsx +186 -0
  325. package/src/components/waka-video-overlay/WakaVideoOverlay.stories.tsx +100 -0
  326. package/src/components/waka-virtual-list/WakaVirtualList.stories.tsx +273 -0
  327. package/src/components/waka-voice-message/WakaVoiceMessage.stories.tsx +190 -0
  328. package/src/components/waka-welcome-modal/WakaWelcomeModal.stories.tsx +87 -0
  329. package/src/components/waka-xp-bar/WakaXPBar.stories.tsx +305 -0
  330. package/dist/useDataTableImport-D8R2HQl6.mjs +0 -229
  331. package/dist/useDataTableImport-S_hhA5Wo.js +0 -9
  332. package/src/components/DataTable/README.md +0 -446
@@ -0,0 +1,418 @@
1
+ "use client"
2
+
3
+ import { useState } from "react"
4
+ import { Shield, Plus, X, RotateCcw } from "lucide-react"
5
+ import { Badge } from "../../components/badge"
6
+ import { Button } from "../../components/button"
7
+ import { Card } from "../../components/card"
8
+ import { Input } from "../../components/input"
9
+ import { Label } from "../../components/label"
10
+ import { Switch } from "../../components/switch"
11
+ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "../../components/select"
12
+ import { Tabs, TabsList, TabsTrigger, TabsContent } from "../../components/tabs"
13
+ import { cn } from "../../utils/cn"
14
+
15
+ export type DetectionAction = "quarantine" | "delete" | "notify_only" | "block_and_notify"
16
+
17
+ export interface ScanPolicy {
18
+ autoScanOnUpload: boolean
19
+ maxFileSize: number // bytes
20
+ maxFileSizeUnit: "MB" | "GB"
21
+ scanTimeout: number // seconds
22
+ maxConcurrentScans: number
23
+ scanArchives: boolean
24
+ maxArchiveDepth: number
25
+ excludedExtensions: string[]
26
+ excludedPaths: string[]
27
+ whitelistedHashes: string[]
28
+ detectionAction: DetectionAction
29
+ notifyAdmin: boolean
30
+ notifyUser: boolean
31
+ auditLog: boolean
32
+ }
33
+
34
+ export interface ScanPolicyEditorProps {
35
+ policy?: ScanPolicy
36
+ isLoading?: boolean
37
+ onSave?: (policy: ScanPolicy) => void
38
+ onCancel?: () => void
39
+ onResetDefaults?: () => void
40
+ className?: string
41
+ }
42
+
43
+ export const defaultScanPolicy: ScanPolicy = {
44
+ autoScanOnUpload: true,
45
+ maxFileSize: 100,
46
+ maxFileSizeUnit: "MB",
47
+ scanTimeout: 120,
48
+ maxConcurrentScans: 4,
49
+ scanArchives: true,
50
+ maxArchiveDepth: 3,
51
+ excludedExtensions: [".log", ".tmp", ".lock"],
52
+ excludedPaths: ["/tmp", "/var/cache"],
53
+ whitelistedHashes: [],
54
+ detectionAction: "quarantine",
55
+ notifyAdmin: true,
56
+ notifyUser: true,
57
+ auditLog: true,
58
+ }
59
+
60
+ const detectionActionOptions = [
61
+ { value: "quarantine", label: "Quarantaine" },
62
+ { value: "delete", label: "Suppression" },
63
+ { value: "notify_only", label: "Notification seule" },
64
+ { value: "block_and_notify", label: "Bloquer + notifier" },
65
+ ]
66
+
67
+ const fileSizeUnitOptions = [
68
+ { value: "MB", label: "MB" },
69
+ { value: "GB", label: "GB" },
70
+ ]
71
+
72
+ export function ScanPolicyEditor({
73
+ policy = defaultScanPolicy,
74
+ isLoading = false,
75
+ onSave,
76
+ onCancel,
77
+ onResetDefaults,
78
+ className,
79
+ }: ScanPolicyEditorProps) {
80
+ const [localPolicy, setLocalPolicy] = useState<ScanPolicy>(policy)
81
+ const [newExtension, setNewExtension] = useState("")
82
+ const [newPath, setNewPath] = useState("")
83
+ const [newHash, setNewHash] = useState("")
84
+
85
+ const updatePolicy = (updates: Partial<ScanPolicy>) => {
86
+ setLocalPolicy((prev) => ({ ...prev, ...updates }))
87
+ }
88
+
89
+ const addExtension = () => {
90
+ if (newExtension.trim() && !localPolicy.excludedExtensions.includes(newExtension.trim())) {
91
+ updatePolicy({
92
+ excludedExtensions: [...localPolicy.excludedExtensions, newExtension.trim()],
93
+ })
94
+ setNewExtension("")
95
+ }
96
+ }
97
+
98
+ const removeExtension = (ext: string) => {
99
+ updatePolicy({
100
+ excludedExtensions: localPolicy.excludedExtensions.filter((e) => e !== ext),
101
+ })
102
+ }
103
+
104
+ const addPath = () => {
105
+ if (newPath.trim() && !localPolicy.excludedPaths.includes(newPath.trim())) {
106
+ updatePolicy({
107
+ excludedPaths: [...localPolicy.excludedPaths, newPath.trim()],
108
+ })
109
+ setNewPath("")
110
+ }
111
+ }
112
+
113
+ const removePath = (path: string) => {
114
+ updatePolicy({
115
+ excludedPaths: localPolicy.excludedPaths.filter((p) => p !== path),
116
+ })
117
+ }
118
+
119
+ const addHash = () => {
120
+ if (newHash.trim() && !localPolicy.whitelistedHashes.includes(newHash.trim())) {
121
+ updatePolicy({
122
+ whitelistedHashes: [...localPolicy.whitelistedHashes, newHash.trim()],
123
+ })
124
+ setNewHash("")
125
+ }
126
+ }
127
+
128
+ const removeHash = (hash: string) => {
129
+ updatePolicy({
130
+ whitelistedHashes: localPolicy.whitelistedHashes.filter((h) => h !== hash),
131
+ })
132
+ }
133
+
134
+ const handleSave = () => {
135
+ onSave?.(localPolicy)
136
+ }
137
+
138
+ const handleResetDefaults = () => {
139
+ setLocalPolicy(defaultScanPolicy)
140
+ onResetDefaults?.()
141
+ }
142
+
143
+ return (
144
+ <Card className={cn("w-full", className)}>
145
+ <div className="flex items-center gap-3 p-6 border-b border-border/50">
146
+ <Shield className="w-5 h-5 text-primary" />
147
+ <div>
148
+ <h3 className="font-semibold text-foreground">Configuration des politiques de scan</h3>
149
+ <p className="text-sm text-muted-foreground">Definissez les regles de scan antivirus</p>
150
+ </div>
151
+ </div>
152
+
153
+ <Tabs defaultValue="general" className="w-full">
154
+ <TabsList className="w-full justify-start border-b border-border/50 rounded-none px-6">
155
+ <TabsTrigger value="general">Regles generales</TabsTrigger>
156
+ <TabsTrigger value="exclusions">Exclusions</TabsTrigger>
157
+ <TabsTrigger value="actions">Actions</TabsTrigger>
158
+ <TabsTrigger value="notifications">Notifications</TabsTrigger>
159
+ </TabsList>
160
+
161
+ <TabsContent value="general" className="p-6 space-y-6">
162
+ <div className="flex items-center justify-between">
163
+ <div className="space-y-0.5">
164
+ <Label>Scan automatique a l'upload</Label>
165
+ <p className="text-sm text-muted-foreground">Scanner tous les fichiers lors de l'envoi</p>
166
+ </div>
167
+ <Switch
168
+ checked={localPolicy.autoScanOnUpload}
169
+ onCheckedChange={(checked) => updatePolicy({ autoScanOnUpload: checked })}
170
+ disabled={isLoading}
171
+ />
172
+ </div>
173
+
174
+ <div className="grid grid-cols-2 gap-4">
175
+ <div className="space-y-2">
176
+ <Label>Taille maximale de fichier</Label>
177
+ <div className="flex gap-2">
178
+ <Input
179
+ type="number"
180
+ value={localPolicy.maxFileSize}
181
+ onChange={(e) => updatePolicy({ maxFileSize: parseInt(e.target.value) || 0 })}
182
+ disabled={isLoading}
183
+ className="flex-1"
184
+ />
185
+ <Select
186
+ value={localPolicy.maxFileSizeUnit}
187
+ onValueChange={(value) => updatePolicy({ maxFileSizeUnit: value as "MB" | "GB" })}
188
+ disabled={isLoading}
189
+ >
190
+ <SelectTrigger className="w-24">
191
+ <SelectValue />
192
+ </SelectTrigger>
193
+ <SelectContent>
194
+ {fileSizeUnitOptions.map((opt) => (
195
+ <SelectItem key={opt.value} value={opt.value}>{opt.label}</SelectItem>
196
+ ))}
197
+ </SelectContent>
198
+ </Select>
199
+ </div>
200
+ </div>
201
+
202
+ <div className="space-y-2">
203
+ <Label>Timeout de scan (secondes)</Label>
204
+ <Input
205
+ type="number"
206
+ value={localPolicy.scanTimeout}
207
+ onChange={(e) => updatePolicy({ scanTimeout: parseInt(e.target.value) || 0 })}
208
+ disabled={isLoading}
209
+ />
210
+ </div>
211
+ </div>
212
+
213
+ <div className="space-y-2">
214
+ <Label>Nombre maximum de scans concurrents</Label>
215
+ <Input
216
+ type="number"
217
+ value={localPolicy.maxConcurrentScans}
218
+ onChange={(e) => updatePolicy({ maxConcurrentScans: parseInt(e.target.value) || 1 })}
219
+ disabled={isLoading}
220
+ />
221
+ </div>
222
+
223
+ <div className="flex items-center justify-between">
224
+ <div className="space-y-0.5">
225
+ <Label>Scanner les archives (zip, tar, 7z)</Label>
226
+ <p className="text-sm text-muted-foreground">Analyser le contenu des fichiers archives</p>
227
+ </div>
228
+ <Switch
229
+ checked={localPolicy.scanArchives}
230
+ onCheckedChange={(checked) => updatePolicy({ scanArchives: checked })}
231
+ disabled={isLoading}
232
+ />
233
+ </div>
234
+
235
+ {localPolicy.scanArchives && (
236
+ <div className="space-y-2 pl-6">
237
+ <Label>Profondeur maximale d'archives imbriquees</Label>
238
+ <Input
239
+ type="number"
240
+ value={localPolicy.maxArchiveDepth}
241
+ onChange={(e) => updatePolicy({ maxArchiveDepth: parseInt(e.target.value) || 1 })}
242
+ disabled={isLoading}
243
+ />
244
+ </div>
245
+ )}
246
+ </TabsContent>
247
+
248
+ <TabsContent value="exclusions" className="p-6 space-y-6">
249
+ <div className="space-y-3">
250
+ <Label>Extensions exclues</Label>
251
+ <div className="flex gap-2">
252
+ <Input
253
+ placeholder=".ext"
254
+ value={newExtension}
255
+ onChange={(e) => setNewExtension(e.target.value)}
256
+ onKeyDown={(e) => e.key === "Enter" && addExtension()}
257
+ disabled={isLoading}
258
+ className="flex-1"
259
+ />
260
+ <Button onClick={addExtension} disabled={isLoading} size="sm">
261
+ <Plus className="w-4 h-4" />
262
+ </Button>
263
+ </div>
264
+ <div className="flex flex-wrap gap-2">
265
+ {localPolicy.excludedExtensions.map((ext) => (
266
+ <Badge key={ext} variant="secondary" className="flex items-center gap-1">
267
+ {ext}
268
+ <button
269
+ onClick={() => removeExtension(ext)}
270
+ disabled={isLoading}
271
+ className="ml-1 hover:text-destructive"
272
+ >
273
+ <X className="w-3 h-3" />
274
+ </button>
275
+ </Badge>
276
+ ))}
277
+ </div>
278
+ </div>
279
+
280
+ <div className="space-y-3">
281
+ <Label>Chemins exclus</Label>
282
+ <div className="flex gap-2">
283
+ <Input
284
+ placeholder="/path/to/exclude"
285
+ value={newPath}
286
+ onChange={(e) => setNewPath(e.target.value)}
287
+ onKeyDown={(e) => e.key === "Enter" && addPath()}
288
+ disabled={isLoading}
289
+ className="flex-1"
290
+ />
291
+ <Button onClick={addPath} disabled={isLoading} size="sm">
292
+ <Plus className="w-4 h-4" />
293
+ </Button>
294
+ </div>
295
+ <div className="flex flex-wrap gap-2">
296
+ {localPolicy.excludedPaths.map((path) => (
297
+ <Badge key={path} variant="secondary" className="flex items-center gap-1">
298
+ {path}
299
+ <button
300
+ onClick={() => removePath(path)}
301
+ disabled={isLoading}
302
+ className="ml-1 hover:text-destructive"
303
+ >
304
+ <X className="w-3 h-3" />
305
+ </button>
306
+ </Badge>
307
+ ))}
308
+ </div>
309
+ </div>
310
+
311
+ <div className="space-y-3">
312
+ <Label>Hash exclus (whitelist)</Label>
313
+ <div className="flex gap-2">
314
+ <Input
315
+ placeholder="SHA256 hash"
316
+ value={newHash}
317
+ onChange={(e) => setNewHash(e.target.value)}
318
+ onKeyDown={(e) => e.key === "Enter" && addHash()}
319
+ disabled={isLoading}
320
+ className="flex-1"
321
+ />
322
+ <Button onClick={addHash} disabled={isLoading} size="sm">
323
+ <Plus className="w-4 h-4" />
324
+ </Button>
325
+ </div>
326
+ <div className="flex flex-wrap gap-2">
327
+ {localPolicy.whitelistedHashes.map((hash) => (
328
+ <Badge key={hash} variant="secondary" className="flex items-center gap-1">
329
+ {hash.substring(0, 12)}...
330
+ <button
331
+ onClick={() => removeHash(hash)}
332
+ disabled={isLoading}
333
+ className="ml-1 hover:text-destructive"
334
+ >
335
+ <X className="w-3 h-3" />
336
+ </button>
337
+ </Badge>
338
+ ))}
339
+ </div>
340
+ </div>
341
+ </TabsContent>
342
+
343
+ <TabsContent value="actions" className="p-6 space-y-6">
344
+ <div className="space-y-2">
345
+ <Label>Action sur detection</Label>
346
+ <Select
347
+ value={localPolicy.detectionAction}
348
+ onValueChange={(value) => updatePolicy({ detectionAction: value as DetectionAction })}
349
+ disabled={isLoading}
350
+ >
351
+ <SelectTrigger>
352
+ <SelectValue />
353
+ </SelectTrigger>
354
+ <SelectContent>
355
+ {detectionActionOptions.map((opt) => (
356
+ <SelectItem key={opt.value} value={opt.value}>{opt.label}</SelectItem>
357
+ ))}
358
+ </SelectContent>
359
+ </Select>
360
+ </div>
361
+
362
+ <div className="flex items-center justify-between">
363
+ <div className="space-y-0.5">
364
+ <Label>Logger dans l'audit trail</Label>
365
+ <p className="text-sm text-muted-foreground">Enregistrer toutes les detections</p>
366
+ </div>
367
+ <Switch
368
+ checked={localPolicy.auditLog}
369
+ onCheckedChange={(checked) => updatePolicy({ auditLog: checked })}
370
+ disabled={isLoading}
371
+ />
372
+ </div>
373
+ </TabsContent>
374
+
375
+ <TabsContent value="notifications" className="p-6 space-y-6">
376
+ <div className="flex items-center justify-between">
377
+ <div className="space-y-0.5">
378
+ <Label>Notifier l'administrateur</Label>
379
+ <p className="text-sm text-muted-foreground">Alerter en cas de menace detectee</p>
380
+ </div>
381
+ <Switch
382
+ checked={localPolicy.notifyAdmin}
383
+ onCheckedChange={(checked) => updatePolicy({ notifyAdmin: checked })}
384
+ disabled={isLoading}
385
+ />
386
+ </div>
387
+
388
+ <div className="flex items-center justify-between">
389
+ <div className="space-y-0.5">
390
+ <Label>Notifier l'utilisateur</Label>
391
+ <p className="text-sm text-muted-foreground">Informer l'utilisateur de l'action prise</p>
392
+ </div>
393
+ <Switch
394
+ checked={localPolicy.notifyUser}
395
+ onCheckedChange={(checked) => updatePolicy({ notifyUser: checked })}
396
+ disabled={isLoading}
397
+ />
398
+ </div>
399
+ </TabsContent>
400
+ </Tabs>
401
+
402
+ <div className="flex items-center justify-between p-6 border-t border-border/50">
403
+ <Button variant="outline" onClick={handleResetDefaults} disabled={isLoading}>
404
+ <RotateCcw className="w-4 h-4 mr-2" />
405
+ Restaurer defauts
406
+ </Button>
407
+ <div className="flex gap-3">
408
+ <Button variant="outline" onClick={onCancel} disabled={isLoading}>
409
+ Annuler
410
+ </Button>
411
+ <Button onClick={handleSave} disabled={isLoading}>
412
+ Sauvegarder
413
+ </Button>
414
+ </div>
415
+ </div>
416
+ </Card>
417
+ )
418
+ }
@@ -0,0 +1,232 @@
1
+ import type { Meta, StoryObj } from "@storybook/react"
2
+ import { ScanReportGenerator } from "./index"
3
+
4
+ const meta = {
5
+ title: "Blocks/Antivirus/ScanReportGenerator",
6
+ component: ScanReportGenerator,
7
+ parameters: {
8
+ layout: "padded",
9
+ },
10
+ tags: ["autodocs"],
11
+ } satisfies Meta<typeof ScanReportGenerator>
12
+
13
+ export default meta
14
+ type Story = StoryObj<typeof meta>
15
+
16
+ const defaultPreview = {
17
+ totalScans: 1247,
18
+ totalThreats: 34,
19
+ detectionRate: 98.5,
20
+ quarantinedFiles: 28,
21
+ threatsBySeverity: [
22
+ { severity: "critical", count: 3 },
23
+ { severity: "high", count: 8 },
24
+ { severity: "medium", count: 15 },
25
+ { severity: "low", count: 8 },
26
+ ],
27
+ complianceChecks: [
28
+ {
29
+ name: "Antivirus actif",
30
+ passed: true,
31
+ details: "ClamAV opérationnel avec dernière mise à jour il y a 2h",
32
+ },
33
+ {
34
+ name: "Scans automatisés",
35
+ passed: true,
36
+ details: "Planification quotidienne configurée et active",
37
+ },
38
+ {
39
+ name: "Quarantaine sécurisée",
40
+ passed: true,
41
+ details: "Isolation cryptographique AES-256-GCM activée",
42
+ },
43
+ {
44
+ name: "Audit trail",
45
+ passed: true,
46
+ details: "Logs immutables avec blockchain interne",
47
+ },
48
+ ],
49
+ weeklyTrend: [
50
+ { week: "S1", scans: 280, threats: 7 },
51
+ { week: "S2", scans: 295, threats: 9 },
52
+ { week: "S3", scans: 340, threats: 11 },
53
+ { week: "S4", scans: 332, threats: 7 },
54
+ ],
55
+ }
56
+
57
+ export const Default: Story = {
58
+ args: {
59
+ preview: defaultPreview,
60
+ onGenerate: (config: any) => {
61
+ console.log("Generating report with config:", config)
62
+ },
63
+ onSchedule: (config: any, frequency: string) => {
64
+ console.log("Scheduling report:", { config, frequency })
65
+ },
66
+ onSendEmail: (config: any, email: string) => {
67
+ console.log("Sending report to:", email)
68
+ },
69
+ },
70
+ }
71
+
72
+ export const Generating: Story = {
73
+ args: {
74
+ ...Default.args,
75
+ isGenerating: true,
76
+ generationProgress: 65,
77
+ },
78
+ }
79
+
80
+ export const ISO27001Report: Story = {
81
+ args: {
82
+ ...Default.args,
83
+ config: {
84
+ startDate: new Date(Date.now() - 30 * 24 * 60 * 60 * 1000),
85
+ endDate: new Date(),
86
+ format: "pdf",
87
+ type: "iso27001_compliance",
88
+ includeSections: {
89
+ generalStats: true,
90
+ threatDetails: true,
91
+ scannedFiles: true,
92
+ actionsTaken: true,
93
+ recommendations: true,
94
+ },
95
+ },
96
+ },
97
+ }
98
+
99
+ export const HDSAudit: Story = {
100
+ args: {
101
+ ...Default.args,
102
+ config: {
103
+ startDate: new Date(Date.now() - 90 * 24 * 60 * 60 * 1000),
104
+ endDate: new Date(),
105
+ format: "pdf",
106
+ type: "hds_audit",
107
+ includeSections: {
108
+ generalStats: true,
109
+ threatDetails: true,
110
+ scannedFiles: false,
111
+ actionsTaken: true,
112
+ recommendations: true,
113
+ },
114
+ },
115
+ preview: {
116
+ ...defaultPreview,
117
+ totalScans: 3842,
118
+ totalThreats: 127,
119
+ detectionRate: 99.2,
120
+ quarantinedFiles: 103,
121
+ },
122
+ },
123
+ }
124
+
125
+ export const DetailedReport: Story = {
126
+ args: {
127
+ ...Default.args,
128
+ config: {
129
+ startDate: new Date(Date.now() - 7 * 24 * 60 * 60 * 1000),
130
+ endDate: new Date(),
131
+ format: "csv",
132
+ type: "detailed",
133
+ includeSections: {
134
+ generalStats: true,
135
+ threatDetails: true,
136
+ scannedFiles: true,
137
+ actionsTaken: true,
138
+ recommendations: true,
139
+ },
140
+ },
141
+ preview: {
142
+ totalScans: 287,
143
+ totalThreats: 8,
144
+ detectionRate: 97.8,
145
+ quarantinedFiles: 6,
146
+ threatsBySeverity: [
147
+ { severity: "critical", count: 1 },
148
+ { severity: "high", count: 2 },
149
+ { severity: "medium", count: 3 },
150
+ { severity: "low", count: 2 },
151
+ ],
152
+ complianceChecks: defaultPreview.complianceChecks,
153
+ weeklyTrend: [{ week: "S1", scans: 287, threats: 8 }],
154
+ },
155
+ },
156
+ }
157
+
158
+ export const JSONExport: Story = {
159
+ args: {
160
+ ...Default.args,
161
+ config: {
162
+ startDate: new Date(Date.now() - 30 * 24 * 60 * 60 * 1000),
163
+ endDate: new Date(),
164
+ format: "json",
165
+ type: "executive_summary",
166
+ includeSections: {
167
+ generalStats: true,
168
+ threatDetails: false,
169
+ scannedFiles: false,
170
+ actionsTaken: false,
171
+ recommendations: true,
172
+ },
173
+ },
174
+ },
175
+ }
176
+
177
+ export const NoThreats: Story = {
178
+ args: {
179
+ ...Default.args,
180
+ preview: {
181
+ totalScans: 1050,
182
+ totalThreats: 0,
183
+ detectionRate: 100,
184
+ quarantinedFiles: 0,
185
+ threatsBySeverity: [
186
+ { severity: "critical", count: 0 },
187
+ { severity: "high", count: 0 },
188
+ { severity: "medium", count: 0 },
189
+ { severity: "low", count: 0 },
190
+ ],
191
+ complianceChecks: defaultPreview.complianceChecks,
192
+ weeklyTrend: [
193
+ { week: "S1", scans: 250, threats: 0 },
194
+ { week: "S2", scans: 260, threats: 0 },
195
+ { week: "S3", scans: 270, threats: 0 },
196
+ { week: "S4", scans: 270, threats: 0 },
197
+ ],
198
+ },
199
+ },
200
+ }
201
+
202
+ export const HighThreatActivity: Story = {
203
+ args: {
204
+ ...Default.args,
205
+ preview: {
206
+ totalScans: 892,
207
+ totalThreats: 156,
208
+ detectionRate: 94.3,
209
+ quarantinedFiles: 142,
210
+ threatsBySeverity: [
211
+ { severity: "critical", count: 12 },
212
+ { severity: "high", count: 38 },
213
+ { severity: "medium", count: 67 },
214
+ { severity: "low", count: 39 },
215
+ ],
216
+ complianceChecks: [
217
+ ...defaultPreview.complianceChecks.slice(0, 3),
218
+ {
219
+ name: "Taux de détection",
220
+ passed: false,
221
+ details: "Taux inférieur au seuil requis de 95%",
222
+ },
223
+ ],
224
+ weeklyTrend: [
225
+ { week: "S1", scans: 220, threats: 28 },
226
+ { week: "S2", scans: 218, threats: 42 },
227
+ { week: "S3", scans: 225, threats: 51 },
228
+ { week: "S4", scans: 229, threats: 35 },
229
+ ],
230
+ },
231
+ },
232
+ }