@datum-cloud/activity-ui 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +334 -0
- package/dist/api/client.d.ts +264 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/components/ActionMultiSelect.d.ts +25 -0
- package/dist/components/ActionMultiSelect.d.ts.map +1 -0
- package/dist/components/ActionToggle.d.ts +16 -0
- package/dist/components/ActionToggle.d.ts.map +1 -0
- package/dist/components/ActivityExpandedDetails.d.ts +21 -0
- package/dist/components/ActivityExpandedDetails.d.ts.map +1 -0
- package/dist/components/ActivityFeed.d.ts +60 -0
- package/dist/components/ActivityFeed.d.ts.map +1 -0
- package/dist/components/ActivityFeedFilters.d.ts +26 -0
- package/dist/components/ActivityFeedFilters.d.ts.map +1 -0
- package/dist/components/ActivityFeedItem.d.ts +39 -0
- package/dist/components/ActivityFeedItem.d.ts.map +1 -0
- package/dist/components/ActivityFeedItemSkeleton.d.ts +11 -0
- package/dist/components/ActivityFeedItemSkeleton.d.ts.map +1 -0
- package/dist/components/ActivityFeedSummary.d.ts +23 -0
- package/dist/components/ActivityFeedSummary.d.ts.map +1 -0
- package/dist/components/ApiErrorAlert.d.ts +10 -0
- package/dist/components/ApiErrorAlert.d.ts.map +1 -0
- package/dist/components/AuditEventViewer.d.ts +14 -0
- package/dist/components/AuditEventViewer.d.ts.map +1 -0
- package/dist/components/AuditLogExpandedDetails.d.ts +20 -0
- package/dist/components/AuditLogExpandedDetails.d.ts.map +1 -0
- package/dist/components/AuditLogFeedItem.d.ts +22 -0
- package/dist/components/AuditLogFeedItem.d.ts.map +1 -0
- package/dist/components/AuditLogFilters.d.ts +50 -0
- package/dist/components/AuditLogFilters.d.ts.map +1 -0
- package/dist/components/AuditLogQueryComponent.d.ts +18 -0
- package/dist/components/AuditLogQueryComponent.d.ts.map +1 -0
- package/dist/components/CelEditor.d.ts +31 -0
- package/dist/components/CelEditor.d.ts.map +1 -0
- package/dist/components/ChangeSourceToggle.d.ts +17 -0
- package/dist/components/ChangeSourceToggle.d.ts.map +1 -0
- package/dist/components/DateTimeRangePicker.d.ts +15 -0
- package/dist/components/DateTimeRangePicker.d.ts.map +1 -0
- package/dist/components/EventExpandedDetails.d.ts +17 -0
- package/dist/components/EventExpandedDetails.d.ts.map +1 -0
- package/dist/components/EventFeedItem.d.ts +29 -0
- package/dist/components/EventFeedItem.d.ts.map +1 -0
- package/dist/components/EventFeedItemSkeleton.d.ts +11 -0
- package/dist/components/EventFeedItemSkeleton.d.ts.map +1 -0
- package/dist/components/EventTypeToggle.d.ts +17 -0
- package/dist/components/EventTypeToggle.d.ts.map +1 -0
- package/dist/components/EventsFeed.d.ts +51 -0
- package/dist/components/EventsFeed.d.ts.map +1 -0
- package/dist/components/EventsFeedFilters.d.ts +28 -0
- package/dist/components/EventsFeedFilters.d.ts.map +1 -0
- package/dist/components/FilterBuilder.d.ts +12 -0
- package/dist/components/FilterBuilder.d.ts.map +1 -0
- package/dist/components/FilterBuilderWithAutocomplete.d.ts +12 -0
- package/dist/components/FilterBuilderWithAutocomplete.d.ts.map +1 -0
- package/dist/components/PolicyActivityView.d.ts +25 -0
- package/dist/components/PolicyActivityView.d.ts.map +1 -0
- package/dist/components/PolicyActivityViewSkeleton.d.ts +9 -0
- package/dist/components/PolicyActivityViewSkeleton.d.ts.map +1 -0
- package/dist/components/PolicyDetailView.d.ts +22 -0
- package/dist/components/PolicyDetailView.d.ts.map +1 -0
- package/dist/components/PolicyEditView.d.ts +22 -0
- package/dist/components/PolicyEditView.d.ts.map +1 -0
- package/dist/components/PolicyEditor.d.ts +24 -0
- package/dist/components/PolicyEditor.d.ts.map +1 -0
- package/dist/components/PolicyList.d.ts +23 -0
- package/dist/components/PolicyList.d.ts.map +1 -0
- package/dist/components/PolicyPreviewPanel.d.ts +23 -0
- package/dist/components/PolicyPreviewPanel.d.ts.map +1 -0
- package/dist/components/PolicyPreviewResult.d.ts +17 -0
- package/dist/components/PolicyPreviewResult.d.ts.map +1 -0
- package/dist/components/PolicyResourceForm.d.ts +19 -0
- package/dist/components/PolicyResourceForm.d.ts.map +1 -0
- package/dist/components/PolicyRuleEditor.d.ts +22 -0
- package/dist/components/PolicyRuleEditor.d.ts.map +1 -0
- package/dist/components/PolicyRuleEditorDialog.d.ts +30 -0
- package/dist/components/PolicyRuleEditorDialog.d.ts.map +1 -0
- package/dist/components/PolicyRuleList.d.ts +26 -0
- package/dist/components/PolicyRuleList.d.ts.map +1 -0
- package/dist/components/PolicyRuleListItem.d.ts +29 -0
- package/dist/components/PolicyRuleListItem.d.ts.map +1 -0
- package/dist/components/ReindexJobCreate.d.ts +21 -0
- package/dist/components/ReindexJobCreate.d.ts.map +1 -0
- package/dist/components/ReindexJobDetailView.d.ts +21 -0
- package/dist/components/ReindexJobDetailView.d.ts.map +1 -0
- package/dist/components/ReindexJobDialog.d.ts +21 -0
- package/dist/components/ReindexJobDialog.d.ts.map +1 -0
- package/dist/components/ReindexJobList.d.ts +21 -0
- package/dist/components/ReindexJobList.d.ts.map +1 -0
- package/dist/components/ResourceHistoryView.d.ts +54 -0
- package/dist/components/ResourceHistoryView.d.ts.map +1 -0
- package/dist/components/RulePreviewPanel.d.ts +23 -0
- package/dist/components/RulePreviewPanel.d.ts.map +1 -0
- package/dist/components/SampleInputTemplates.d.ts +26 -0
- package/dist/components/SampleInputTemplates.d.ts.map +1 -0
- package/dist/components/SimpleQueryBuilder.d.ts +12 -0
- package/dist/components/SimpleQueryBuilder.d.ts.map +1 -0
- package/dist/components/TenantBadge.d.ts +17 -0
- package/dist/components/TenantBadge.d.ts.map +1 -0
- package/dist/components/UserSelect.d.ts +24 -0
- package/dist/components/UserSelect.d.ts.map +1 -0
- package/dist/components/VerbToggle.d.ts +16 -0
- package/dist/components/VerbToggle.d.ts.map +1 -0
- package/dist/components/ui/add-filter-dropdown.d.ts +26 -0
- package/dist/components/ui/add-filter-dropdown.d.ts.map +1 -0
- package/dist/components/ui/alert.d.ts +9 -0
- package/dist/components/ui/alert.d.ts.map +1 -0
- package/dist/components/ui/badge.d.ts +10 -0
- package/dist/components/ui/badge.d.ts.map +1 -0
- package/dist/components/ui/button.d.ts +12 -0
- package/dist/components/ui/button.d.ts.map +1 -0
- package/dist/components/ui/card.d.ts +9 -0
- package/dist/components/ui/card.d.ts.map +1 -0
- package/dist/components/ui/checkbox.d.ts +5 -0
- package/dist/components/ui/checkbox.d.ts.map +1 -0
- package/dist/components/ui/combobox.d.ts +27 -0
- package/dist/components/ui/combobox.d.ts.map +1 -0
- package/dist/components/ui/dialog.d.ts +20 -0
- package/dist/components/ui/dialog.d.ts.map +1 -0
- package/dist/components/ui/filter-chip.d.ts +37 -0
- package/dist/components/ui/filter-chip.d.ts.map +1 -0
- package/dist/components/ui/input.d.ts +6 -0
- package/dist/components/ui/input.d.ts.map +1 -0
- package/dist/components/ui/label.d.ts +8 -0
- package/dist/components/ui/label.d.ts.map +1 -0
- package/dist/components/ui/multi-combobox.d.ts +24 -0
- package/dist/components/ui/multi-combobox.d.ts.map +1 -0
- package/dist/components/ui/select.d.ts +14 -0
- package/dist/components/ui/select.d.ts.map +1 -0
- package/dist/components/ui/separator.d.ts +5 -0
- package/dist/components/ui/separator.d.ts.map +1 -0
- package/dist/components/ui/sheet.d.ts +23 -0
- package/dist/components/ui/sheet.d.ts.map +1 -0
- package/dist/components/ui/skeleton.d.ts +3 -0
- package/dist/components/ui/skeleton.d.ts.map +1 -0
- package/dist/components/ui/tabs.d.ts +8 -0
- package/dist/components/ui/tabs.d.ts.map +1 -0
- package/dist/components/ui/textarea.d.ts +6 -0
- package/dist/components/ui/textarea.d.ts.map +1 -0
- package/dist/components/ui/time-range-dropdown.d.ts +29 -0
- package/dist/components/ui/time-range-dropdown.d.ts.map +1 -0
- package/dist/components/ui/tooltip.d.ts +8 -0
- package/dist/components/ui/tooltip.d.ts.map +1 -0
- package/dist/hooks/useActivityFeed.d.ts +101 -0
- package/dist/hooks/useActivityFeed.d.ts.map +1 -0
- package/dist/hooks/useAuditLogFacets.d.ts +33 -0
- package/dist/hooks/useAuditLogFacets.d.ts.map +1 -0
- package/dist/hooks/useAuditLogQuery.d.ts +21 -0
- package/dist/hooks/useAuditLogQuery.d.ts.map +1 -0
- package/dist/hooks/useEventFacets.d.ts +30 -0
- package/dist/hooks/useEventFacets.d.ts.map +1 -0
- package/dist/hooks/useEventsFeed.d.ts +93 -0
- package/dist/hooks/useEventsFeed.d.ts.map +1 -0
- package/dist/hooks/useFacets.d.ts +29 -0
- package/dist/hooks/useFacets.d.ts.map +1 -0
- package/dist/hooks/usePolicyEditor.d.ts +71 -0
- package/dist/hooks/usePolicyEditor.d.ts.map +1 -0
- package/dist/hooks/usePolicyList.d.ts +35 -0
- package/dist/hooks/usePolicyList.d.ts.map +1 -0
- package/dist/hooks/usePolicyPreview.d.ts +72 -0
- package/dist/hooks/usePolicyPreview.d.ts.map +1 -0
- package/dist/hooks/useReindexJobs.d.ts +37 -0
- package/dist/hooks/useReindexJobs.d.ts.map +1 -0
- package/dist/index.d.ts +150 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.esm.js +16224 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/index.js +16377 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/errors.d.ts +50 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/extractFieldPaths.d.ts +33 -0
- package/dist/lib/extractFieldPaths.d.ts.map +1 -0
- package/dist/lib/utils.d.ts +3 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/types/activity.d.ts +366 -0
- package/dist/types/activity.d.ts.map +1 -0
- package/dist/types/index.d.ts +117 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/k8s-event.d.ts +224 -0
- package/dist/types/k8s-event.d.ts.map +1 -0
- package/dist/types/policy.d.ts +333 -0
- package/dist/types/policy.d.ts.map +1 -0
- package/dist/types/reindex.d.ts +102 -0
- package/dist/types/reindex.d.ts.map +1 -0
- package/package.json +87 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/types/index.ts","../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs","../node_modules/.pnpm/class-variance-authority@0.7.1/node_modules/class-variance-authority/dist/index.mjs","../node_modules/.pnpm/tailwind-merge@3.5.0/node_modules/tailwind-merge/dist/bundle-mjs.mjs","../src/lib/utils.ts","../src/components/ui/button.tsx","../src/components/ui/card.tsx","../src/components/ui/input.tsx","../src/components/ui/label.tsx","../src/components/ui/separator.tsx","../src/components/ui/textarea.tsx","../src/components/FilterBuilder.tsx","../src/components/ui/badge.tsx","../src/components/FilterBuilderWithAutocomplete.tsx","../src/hooks/useAuditLogFacets.ts","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/toDate.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/constructFrom.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/addDays.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/addMilliseconds.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/constants.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/addHours.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/_lib/defaultOptions.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/startOfWeek.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/startOfISOWeek.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getISOWeekYear.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/startOfDay.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/differenceInCalendarDays.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/startOfISOWeekYear.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/addMinutes.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/compareAsc.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/constructNow.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isDate.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isValid.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/differenceInCalendarMonths.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/_lib/getRoundingMethod.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/differenceInMilliseconds.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/endOfDay.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/endOfMonth.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isLastDayOfMonth.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/differenceInMonths.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/differenceInSeconds.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/startOfYear.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/locale/en-US/_lib/formatDistance.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/locale/_lib/buildFormatLongFn.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/locale/en-US/_lib/formatLong.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/locale/en-US/_lib/formatRelative.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/locale/_lib/buildLocalizeFn.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/locale/en-US/_lib/localize.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/locale/_lib/buildMatchFn.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/locale/_lib/buildMatchPatternFn.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/locale/en-US/_lib/match.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/locale/en-US.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getDayOfYear.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getISOWeek.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getWeekYear.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/startOfWeekYear.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getWeek.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/_lib/addLeadingZeros.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/_lib/format/lightFormatters.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/_lib/format/formatters.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/_lib/format/longFormatters.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/_lib/protectedTokens.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/format.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/formatDistance.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/formatDistanceToNow.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/formatISO.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/subDays.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/subHours.mjs","../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/subMinutes.mjs","../node_modules/.pnpm/lucide-react@0.563.0_react@19.2.4/node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js","../node_modules/.pnpm/lucide-react@0.563.0_react@19.2.4/node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.js","../node_modules/.pnpm/lucide-react@0.563.0_react@19.2.4/node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.js","../node_modules/.pnpm/lucide-react@0.563.0_react@19.2.4/node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.js","../node_modules/.pnpm/lucide-react@0.563.0_react@19.2.4/node_modules/lucide-react/dist/esm/defaultAttributes.js","../node_modules/.pnpm/lucide-react@0.563.0_react@19.2.4/node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.js","../node_modules/.pnpm/lucide-react@0.563.0_react@19.2.4/node_modules/lucide-react/dist/esm/Icon.js","../node_modules/.pnpm/lucide-react@0.563.0_react@19.2.4/node_modules/lucide-react/dist/esm/createLucideIcon.js","../node_modules/.pnpm/lucide-react@0.563.0_react@19.2.4/node_modules/lucide-react/dist/esm/icons/calendar.js","../node_modules/.pnpm/lucide-react@0.563.0_react@19.2.4/node_modules/lucide-react/dist/esm/icons/check.js","../node_modules/.pnpm/lucide-react@0.563.0_react@19.2.4/node_modules/lucide-react/dist/esm/icons/chevron-down.js","../node_modules/.pnpm/lucide-react@0.563.0_react@19.2.4/node_modules/lucide-react/dist/esm/icons/chevron-right.js","../node_modules/.pnpm/lucide-react@0.563.0_react@19.2.4/node_modules/lucide-react/dist/esm/icons/chevron-up.js","../node_modules/.pnpm/lucide-react@0.563.0_react@19.2.4/node_modules/lucide-react/dist/esm/icons/chevrons-up-down.js","../node_modules/.pnpm/lucide-react@0.563.0_react@19.2.4/node_modules/lucide-react/dist/esm/icons/circle-alert.js","../node_modules/.pnpm/lucide-react@0.563.0_react@19.2.4/node_modules/lucide-react/dist/esm/icons/circle-check-big.js","../node_modules/.pnpm/lucide-react@0.563.0_react@19.2.4/node_modules/lucide-react/dist/esm/icons/circle-check.js","../node_modules/.pnpm/lucide-react@0.563.0_react@19.2.4/node_modules/lucide-react/dist/esm/icons/circle-x.js","../node_modules/.pnpm/lucide-react@0.563.0_react@19.2.4/node_modules/lucide-react/dist/esm/icons/clock.js","../node_modules/.pnpm/lucide-react@0.563.0_react@19.2.4/node_modules/lucide-react/dist/esm/icons/copy.js","../node_modules/.pnpm/lucide-react@0.563.0_react@19.2.4/node_modules/lucide-react/dist/esm/icons/eye.js","../node_modules/.pnpm/lucide-react@0.563.0_react@19.2.4/node_modules/lucide-react/dist/esm/icons/loader-circle.js","../node_modules/.pnpm/lucide-react@0.563.0_react@19.2.4/node_modules/lucide-react/dist/esm/icons/plus.js","../node_modules/.pnpm/lucide-react@0.563.0_react@19.2.4/node_modules/lucide-react/dist/esm/icons/refresh-cw.js","../node_modules/.pnpm/lucide-react@0.563.0_react@19.2.4/node_modules/lucide-react/dist/esm/icons/rotate-cw.js","../node_modules/.pnpm/lucide-react@0.563.0_react@19.2.4/node_modules/lucide-react/dist/esm/icons/search.js","../node_modules/.pnpm/lucide-react@0.563.0_react@19.2.4/node_modules/lucide-react/dist/esm/icons/square-pen.js","../node_modules/.pnpm/lucide-react@0.563.0_react@19.2.4/node_modules/lucide-react/dist/esm/icons/trash-2.js","../node_modules/.pnpm/lucide-react@0.563.0_react@19.2.4/node_modules/lucide-react/dist/esm/icons/triangle-alert.js","../node_modules/.pnpm/lucide-react@0.563.0_react@19.2.4/node_modules/lucide-react/dist/esm/icons/user.js","../node_modules/.pnpm/lucide-react@0.563.0_react@19.2.4/node_modules/lucide-react/dist/esm/icons/x.js","../src/components/ui/combobox.tsx","../src/components/ui/checkbox.tsx","../src/components/ui/time-range-dropdown.tsx","../src/components/SimpleQueryBuilder.tsx","../src/components/TenantBadge.tsx","../src/components/AuditEventViewer.tsx","../src/components/ui/filter-chip.tsx","../src/components/ui/add-filter-dropdown.tsx","../src/components/ActionMultiSelect.tsx","../src/components/UserSelect.tsx","../src/components/AuditLogFilters.tsx","../src/components/AuditLogExpandedDetails.tsx","../src/components/AuditLogFeedItem.tsx","../src/hooks/useAuditLogQuery.ts","../src/components/ui/alert.tsx","../src/lib/errors.ts","../src/components/ApiErrorAlert.tsx","../src/components/AuditLogQueryComponent.tsx","../src/components/DateTimeRangePicker.tsx","../src/components/ActionToggle.tsx","../src/hooks/useActivityFeed.ts","../src/components/ActivityFeedSummary.tsx","../src/components/ui/tooltip.tsx","../src/components/ActivityExpandedDetails.tsx","../src/components/ActivityFeedItem.tsx","../src/components/ui/skeleton.tsx","../src/components/ActivityFeedItemSkeleton.tsx","../src/hooks/useFacets.ts","../src/components/ChangeSourceToggle.tsx","../src/components/ActivityFeedFilters.tsx","../src/components/ActivityFeed.tsx","../src/components/ResourceHistoryView.tsx","../src/types/k8s-event.ts","../src/hooks/useEventsFeed.ts","../src/components/EventExpandedDetails.tsx","../src/components/EventFeedItem.tsx","../src/components/EventFeedItemSkeleton.tsx","../src/hooks/useEventFacets.ts","../src/components/EventTypeToggle.tsx","../src/components/EventsFeedFilters.tsx","../src/components/EventsFeed.tsx","../src/hooks/usePolicyList.ts","../src/components/PolicyList.tsx","../src/hooks/usePolicyEditor.ts","../src/components/ui/select.tsx","../src/components/PolicyResourceForm.tsx","../src/components/PolicyRuleListItem.tsx","../src/components/ui/sheet.tsx","../src/components/PolicyPreviewResult.tsx","../src/components/PolicyPreviewPanel.tsx","../src/components/CelEditor.tsx","../src/lib/extractFieldPaths.ts","../src/components/PolicyRuleEditorDialog.tsx","../src/components/ui/tabs.tsx","../src/components/PolicyRuleList.tsx","../src/components/PolicyActivityView.tsx","../src/components/ui/dialog.tsx","../src/components/PolicyEditor.tsx","../src/components/PolicyActivityViewSkeleton.tsx","../src/components/PolicyDetailView.tsx","../src/components/PolicyEditView.tsx","../src/components/PolicyRuleEditor.tsx","../src/components/SampleInputTemplates.tsx","../src/components/RulePreviewPanel.tsx","../src/hooks/useReindexJobs.ts","../src/types/reindex.ts","../src/components/ReindexJobList.tsx","../src/components/ReindexJobDetailView.tsx","../src/components/ReindexJobCreate.tsx","../src/components/ReindexJobDialog.tsx","../src/components/ui/multi-combobox.tsx","../src/hooks/usePolicyPreview.ts","../src/api/client.ts","../src/types/activity.ts","../src/types/policy.ts"],"sourcesContent":["/**\n * TypeScript types for the Activity API (activity.miloapis.com/v1alpha1)\n * Based on Kubernetes audit events and custom query resources\n */\n\n// Kubernetes Audit Event types\nexport interface ObjectReference {\n resource?: string;\n namespace?: string;\n name?: string;\n uid?: string;\n apiGroup?: string;\n apiVersion?: string;\n resourceVersion?: string;\n subresource?: string;\n}\n\nexport interface UserInfo {\n username?: string;\n uid?: string;\n groups?: string[];\n extra?: Record<string, string[]>;\n}\n\nexport interface Event {\n level?: string;\n auditID?: string;\n stage?: string;\n requestURI?: string;\n verb?: string;\n user?: UserInfo;\n impersonatedUser?: UserInfo;\n sourceIPs?: string[];\n userAgent?: string;\n objectRef?: ObjectReference;\n responseStatus?: {\n metadata?: Record<string, unknown>;\n status?: string;\n message?: string;\n reason?: string;\n code?: number;\n };\n requestObject?: unknown;\n responseObject?: unknown;\n requestReceivedTimestamp?: string;\n stageTimestamp?: string;\n annotations?: Record<string, string>;\n}\n\n// Activity API specific types\nexport type QueryPhase = 'Pending' | 'Running' | 'Completed' | 'Failed';\n\nexport interface AuditLogQuerySpec {\n /**\n * CEL expression for filtering audit events\n * Available fields:\n * - timestamp: time.Time\n * - ns: string (namespace)\n * - verb: string\n * - resource: string\n * - user: string\n * - level: string\n * - stage: string\n * - uid: string\n * - requestURI: string\n * - sourceIPs: []string\n */\n filter?: string;\n\n /**\n * Maximum number of results (default: 100, max: 1000)\n */\n limit?: number;\n\n /**\n * Cursor for pagination (copy from previous query's status.continue)\n */\n continue?: string;\n\n /**\n * Start time for the query (ISO 8601 timestamp)\n * Required by the API\n */\n startTime?: string;\n\n /**\n * End time for the query (ISO 8601 timestamp)\n * Required by the API\n */\n endTime?: string;\n}\n\nexport interface AuditLogQueryStatus {\n phase?: QueryPhase;\n results?: Event[];\n /** Pagination cursor - copy to spec.continue to get the next page */\n continue?: string;\n message?: string;\n}\n\nexport interface ObjectMeta {\n name?: string;\n namespace?: string;\n uid?: string;\n resourceVersion?: string;\n creationTimestamp?: string;\n labels?: Record<string, string>;\n annotations?: Record<string, string>;\n}\n\nexport interface AuditLogQuery {\n apiVersion: 'activity.miloapis.com/v1alpha1';\n kind: 'AuditLogQuery';\n metadata?: ObjectMeta;\n spec: AuditLogQuerySpec;\n status?: AuditLogQueryStatus;\n}\n\nexport interface AuditLog {\n apiVersion: 'activity.miloapis.com/v1alpha1';\n kind: 'AuditLog';\n metadata?: ObjectMeta;\n event: Event;\n}\n\n// Filter helper types\nexport interface FilterField {\n name: string;\n type: 'string' | 'timestamp' | 'array' | 'number';\n description: string;\n examples?: string[];\n}\n\nexport const FILTER_FIELDS: FilterField[] = [\n // Top-level fields\n {\n name: 'auditID',\n type: 'string',\n description: 'Unique audit event ID',\n examples: [\n 'auditID == \"abc-123-def-456\"'\n ]\n },\n {\n name: 'verb',\n type: 'string',\n description: 'HTTP verb (get, list, create, update, delete, patch, watch)',\n examples: [\n 'verb == \"delete\"',\n 'verb in [\"create\", \"update\", \"delete\"]'\n ]\n },\n {\n name: 'level',\n type: 'string',\n description: 'Audit level (Metadata, Request, RequestResponse)',\n examples: [\n 'level == \"RequestResponse\"'\n ]\n },\n {\n name: 'stage',\n type: 'string',\n description: 'Event stage (RequestReceived, ResponseStarted, ResponseComplete, Panic)',\n examples: [\n 'stage == \"ResponseComplete\"'\n ]\n },\n {\n name: 'requestURI',\n type: 'string',\n description: 'The request URI path',\n examples: [\n 'requestURI.contains(\"/api/v1\")',\n 'requestURI.startsWith(\"/apis/\")'\n ]\n },\n {\n name: 'userAgent',\n type: 'string',\n description: 'Client user agent string',\n examples: [\n 'userAgent.contains(\"kubectl\")',\n 'userAgent.startsWith(\"Mozilla\")'\n ]\n },\n {\n name: 'sourceIPs',\n type: 'array',\n description: 'Source IP addresses',\n examples: [\n 'sourceIPs.exists(ip, ip.startsWith(\"10.\"))'\n ]\n },\n {\n name: 'requestReceivedTimestamp',\n type: 'timestamp',\n description: 'Event timestamp',\n examples: [\n 'requestReceivedTimestamp >= timestamp(\"2024-01-01T00:00:00Z\")',\n 'requestReceivedTimestamp <= timestamp(\"2024-12-31T23:59:59Z\")'\n ]\n },\n\n // Nested objectRef fields (use dot notation)\n {\n name: 'objectRef.namespace',\n type: 'string',\n description: 'Kubernetes namespace of the resource',\n examples: [\n 'objectRef.namespace == \"production\"',\n 'objectRef.namespace in [\"prod\", \"staging\"]'\n ]\n },\n {\n name: 'objectRef.resource',\n type: 'string',\n description: 'Resource type (pods, deployments, secrets, etc.)',\n examples: [\n 'objectRef.resource == \"secrets\"',\n 'objectRef.resource in [\"secrets\", \"configmaps\"]'\n ]\n },\n {\n name: 'objectRef.name',\n type: 'string',\n description: 'Name of the resource',\n examples: [\n 'objectRef.name == \"my-secret\"',\n 'objectRef.name.startsWith(\"prod-\")'\n ]\n },\n {\n name: 'objectRef.uid',\n type: 'string',\n description: 'UID of the resource',\n examples: [\n 'objectRef.uid == \"abc-123-def-456\"'\n ]\n },\n {\n name: 'objectRef.apiGroup',\n type: 'string',\n description: 'API group of the resource',\n examples: [\n 'objectRef.apiGroup == \"apps\"',\n 'objectRef.apiGroup == \"\"'\n ]\n },\n\n // Nested user fields (use dot notation)\n {\n name: 'user.username',\n type: 'string',\n description: 'Username who performed the action',\n examples: [\n 'user.username.startsWith(\"system:\")',\n 'user.username.contains(\"admin\")',\n 'user.username == \"kubernetes-admin\"'\n ]\n },\n {\n name: 'user.groups',\n type: 'array',\n description: 'User groups',\n examples: [\n 'user.groups.exists(g, g == \"system:masters\")'\n ]\n },\n\n // Nested responseStatus fields (use dot notation)\n {\n name: 'responseStatus.code',\n type: 'number',\n description: 'HTTP response status code',\n examples: [\n 'responseStatus.code >= 400',\n 'responseStatus.code == 200',\n 'responseStatus.code >= 200 && responseStatus.code < 300'\n ]\n }\n];\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","/**\n * Copyright 2022 Joe Bell. All rights reserved.\n *\n * This file is licensed to you under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with the\n * License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */ import { clsx } from \"clsx\";\nconst falsyToString = (value)=>typeof value === \"boolean\" ? `${value}` : value === 0 ? \"0\" : value;\nexport const cx = clsx;\nexport const cva = (base, config)=>(props)=>{\n var _config_compoundVariants;\n if ((config === null || config === void 0 ? void 0 : config.variants) == null) return cx(base, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n const { variants, defaultVariants } = config;\n const getVariantClassNames = Object.keys(variants).map((variant)=>{\n const variantProp = props === null || props === void 0 ? void 0 : props[variant];\n const defaultVariantProp = defaultVariants === null || defaultVariants === void 0 ? void 0 : defaultVariants[variant];\n if (variantProp === null) return null;\n const variantKey = falsyToString(variantProp) || falsyToString(defaultVariantProp);\n return variants[variant][variantKey];\n });\n const propsWithoutUndefined = props && Object.entries(props).reduce((acc, param)=>{\n let [key, value] = param;\n if (value === undefined) {\n return acc;\n }\n acc[key] = value;\n return acc;\n }, {});\n const getCompoundVariantClassNames = config === null || config === void 0 ? void 0 : (_config_compoundVariants = config.compoundVariants) === null || _config_compoundVariants === void 0 ? void 0 : _config_compoundVariants.reduce((acc, param)=>{\n let { class: cvClass, className: cvClassName, ...compoundVariantOptions } = param;\n return Object.entries(compoundVariantOptions).every((param)=>{\n let [key, value] = param;\n return Array.isArray(value) ? value.includes({\n ...defaultVariants,\n ...propsWithoutUndefined\n }[key]) : ({\n ...defaultVariants,\n ...propsWithoutUndefined\n })[key] === value;\n }) ? [\n ...acc,\n cvClass,\n cvClassName\n ] : acc;\n }, []);\n return cx(base, getVariantClassNames, getCompoundVariantClassNames, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n };\n\n","/**\n * Concatenates two arrays faster than the array spread operator.\n */\nconst concatArrays = (array1, array2) => {\n // Pre-allocate for better V8 optimization\n const combinedArray = new Array(array1.length + array2.length);\n for (let i = 0; i < array1.length; i++) {\n combinedArray[i] = array1[i];\n }\n for (let i = 0; i < array2.length; i++) {\n combinedArray[array1.length + i] = array2[i];\n }\n return combinedArray;\n};\n\n// Factory function ensures consistent object shapes\nconst createClassValidatorObject = (classGroupId, validator) => ({\n classGroupId,\n validator\n});\n// Factory ensures consistent ClassPartObject shape\nconst createClassPartObject = (nextPart = new Map(), validators = null, classGroupId) => ({\n nextPart,\n validators,\n classGroupId\n});\nconst CLASS_PART_SEPARATOR = '-';\nconst EMPTY_CONFLICTS = [];\n// I use two dots here because one dot is used as prefix for class groups in plugins\nconst ARBITRARY_PROPERTY_PREFIX = 'arbitrary..';\nconst createClassGroupUtils = config => {\n const classMap = createClassMap(config);\n const {\n conflictingClassGroups,\n conflictingClassGroupModifiers\n } = config;\n const getClassGroupId = className => {\n if (className.startsWith('[') && className.endsWith(']')) {\n return getGroupIdForArbitraryProperty(className);\n }\n const classParts = className.split(CLASS_PART_SEPARATOR);\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and skip it.\n const startIndex = classParts[0] === '' && classParts.length > 1 ? 1 : 0;\n return getGroupRecursive(classParts, startIndex, classMap);\n };\n const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {\n if (hasPostfixModifier) {\n const modifierConflicts = conflictingClassGroupModifiers[classGroupId];\n const baseConflicts = conflictingClassGroups[classGroupId];\n if (modifierConflicts) {\n if (baseConflicts) {\n // Merge base conflicts with modifier conflicts\n return concatArrays(baseConflicts, modifierConflicts);\n }\n // Only modifier conflicts\n return modifierConflicts;\n }\n // Fall back to without postfix if no modifier conflicts\n return baseConflicts || EMPTY_CONFLICTS;\n }\n return conflictingClassGroups[classGroupId] || EMPTY_CONFLICTS;\n };\n return {\n getClassGroupId,\n getConflictingClassGroupIds\n };\n};\nconst getGroupRecursive = (classParts, startIndex, classPartObject) => {\n const classPathsLength = classParts.length - startIndex;\n if (classPathsLength === 0) {\n return classPartObject.classGroupId;\n }\n const currentClassPart = classParts[startIndex];\n const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);\n if (nextClassPartObject) {\n const result = getGroupRecursive(classParts, startIndex + 1, nextClassPartObject);\n if (result) return result;\n }\n const validators = classPartObject.validators;\n if (validators === null) {\n return undefined;\n }\n // Build classRest string efficiently by joining from startIndex onwards\n const classRest = startIndex === 0 ? classParts.join(CLASS_PART_SEPARATOR) : classParts.slice(startIndex).join(CLASS_PART_SEPARATOR);\n const validatorsLength = validators.length;\n for (let i = 0; i < validatorsLength; i++) {\n const validatorObj = validators[i];\n if (validatorObj.validator(classRest)) {\n return validatorObj.classGroupId;\n }\n }\n return undefined;\n};\n/**\n * Get the class group ID for an arbitrary property.\n *\n * @param className - The class name to get the group ID for. Is expected to be string starting with `[` and ending with `]`.\n */\nconst getGroupIdForArbitraryProperty = className => className.slice(1, -1).indexOf(':') === -1 ? undefined : (() => {\n const content = className.slice(1, -1);\n const colonIndex = content.indexOf(':');\n const property = content.slice(0, colonIndex);\n return property ? ARBITRARY_PROPERTY_PREFIX + property : undefined;\n})();\n/**\n * Exported for testing only\n */\nconst createClassMap = config => {\n const {\n theme,\n classGroups\n } = config;\n return processClassGroups(classGroups, theme);\n};\n// Split into separate functions to maintain monomorphic call sites\nconst processClassGroups = (classGroups, theme) => {\n const classMap = createClassPartObject();\n for (const classGroupId in classGroups) {\n const group = classGroups[classGroupId];\n processClassesRecursively(group, classMap, classGroupId, theme);\n }\n return classMap;\n};\nconst processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {\n const len = classGroup.length;\n for (let i = 0; i < len; i++) {\n const classDefinition = classGroup[i];\n processClassDefinition(classDefinition, classPartObject, classGroupId, theme);\n }\n};\n// Split into separate functions for each type to maintain monomorphic call sites\nconst processClassDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n if (typeof classDefinition === 'string') {\n processStringDefinition(classDefinition, classPartObject, classGroupId);\n return;\n }\n if (typeof classDefinition === 'function') {\n processFunctionDefinition(classDefinition, classPartObject, classGroupId, theme);\n return;\n }\n processObjectDefinition(classDefinition, classPartObject, classGroupId, theme);\n};\nconst processStringDefinition = (classDefinition, classPartObject, classGroupId) => {\n const classPartObjectToEdit = classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition);\n classPartObjectToEdit.classGroupId = classGroupId;\n};\nconst processFunctionDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);\n return;\n }\n if (classPartObject.validators === null) {\n classPartObject.validators = [];\n }\n classPartObject.validators.push(createClassValidatorObject(classGroupId, classDefinition));\n};\nconst processObjectDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n const entries = Object.entries(classDefinition);\n const len = entries.length;\n for (let i = 0; i < len; i++) {\n const [key, value] = entries[i];\n processClassesRecursively(value, getPart(classPartObject, key), classGroupId, theme);\n }\n};\nconst getPart = (classPartObject, path) => {\n let current = classPartObject;\n const parts = path.split(CLASS_PART_SEPARATOR);\n const len = parts.length;\n for (let i = 0; i < len; i++) {\n const part = parts[i];\n let next = current.nextPart.get(part);\n if (!next) {\n next = createClassPartObject();\n current.nextPart.set(part, next);\n }\n current = next;\n }\n return current;\n};\n// Type guard maintains monomorphic check\nconst isThemeGetter = func => 'isThemeGetter' in func && func.isThemeGetter === true;\n\n// LRU cache implementation using plain objects for simplicity\nconst createLruCache = maxCacheSize => {\n if (maxCacheSize < 1) {\n return {\n get: () => undefined,\n set: () => {}\n };\n }\n let cacheSize = 0;\n let cache = Object.create(null);\n let previousCache = Object.create(null);\n const update = (key, value) => {\n cache[key] = value;\n cacheSize++;\n if (cacheSize > maxCacheSize) {\n cacheSize = 0;\n previousCache = cache;\n cache = Object.create(null);\n }\n };\n return {\n get(key) {\n let value = cache[key];\n if (value !== undefined) {\n return value;\n }\n if ((value = previousCache[key]) !== undefined) {\n update(key, value);\n return value;\n }\n },\n set(key, value) {\n if (key in cache) {\n cache[key] = value;\n } else {\n update(key, value);\n }\n }\n };\n};\nconst IMPORTANT_MODIFIER = '!';\nconst MODIFIER_SEPARATOR = ':';\nconst EMPTY_MODIFIERS = [];\n// Pre-allocated result object shape for consistency\nconst createResultObject = (modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition, isExternal) => ({\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition,\n isExternal\n});\nconst createParseClassName = config => {\n const {\n prefix,\n experimentalParseClassName\n } = config;\n /**\n * Parse class name into parts.\n *\n * Inspired by `splitAtTopLevelOnly` used in Tailwind CSS\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n */\n let parseClassName = className => {\n // Use simple array with push for better performance\n const modifiers = [];\n let bracketDepth = 0;\n let parenDepth = 0;\n let modifierStart = 0;\n let postfixModifierPosition;\n const len = className.length;\n for (let index = 0; index < len; index++) {\n const currentCharacter = className[index];\n if (bracketDepth === 0 && parenDepth === 0) {\n if (currentCharacter === MODIFIER_SEPARATOR) {\n modifiers.push(className.slice(modifierStart, index));\n modifierStart = index + 1;\n continue;\n }\n if (currentCharacter === '/') {\n postfixModifierPosition = index;\n continue;\n }\n }\n if (currentCharacter === '[') bracketDepth++;else if (currentCharacter === ']') bracketDepth--;else if (currentCharacter === '(') parenDepth++;else if (currentCharacter === ')') parenDepth--;\n }\n const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.slice(modifierStart);\n // Inline important modifier check\n let baseClassName = baseClassNameWithImportantModifier;\n let hasImportantModifier = false;\n if (baseClassNameWithImportantModifier.endsWith(IMPORTANT_MODIFIER)) {\n baseClassName = baseClassNameWithImportantModifier.slice(0, -1);\n hasImportantModifier = true;\n } else if (\n /**\n * In Tailwind CSS v3 the important modifier was at the start of the base class name. This is still supported for legacy reasons.\n * @see https://github.com/dcastil/tailwind-merge/issues/513#issuecomment-2614029864\n */\n baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER)) {\n baseClassName = baseClassNameWithImportantModifier.slice(1);\n hasImportantModifier = true;\n }\n const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;\n return createResultObject(modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition);\n };\n if (prefix) {\n const fullPrefix = prefix + MODIFIER_SEPARATOR;\n const parseClassNameOriginal = parseClassName;\n parseClassName = className => className.startsWith(fullPrefix) ? parseClassNameOriginal(className.slice(fullPrefix.length)) : createResultObject(EMPTY_MODIFIERS, false, className, undefined, true);\n }\n if (experimentalParseClassName) {\n const parseClassNameOriginal = parseClassName;\n parseClassName = className => experimentalParseClassName({\n className,\n parseClassName: parseClassNameOriginal\n });\n }\n return parseClassName;\n};\n\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nconst createSortModifiers = config => {\n // Pre-compute weights for all known modifiers for O(1) comparison\n const modifierWeights = new Map();\n // Assign weights to sensitive modifiers (highest priority, but preserve order)\n config.orderSensitiveModifiers.forEach((mod, index) => {\n modifierWeights.set(mod, 1000000 + index); // High weights for sensitive mods\n });\n return modifiers => {\n const result = [];\n let currentSegment = [];\n // Process modifiers in one pass\n for (let i = 0; i < modifiers.length; i++) {\n const modifier = modifiers[i];\n // Check if modifier is sensitive (starts with '[' or in orderSensitiveModifiers)\n const isArbitrary = modifier[0] === '[';\n const isOrderSensitive = modifierWeights.has(modifier);\n if (isArbitrary || isOrderSensitive) {\n // Sort and flush current segment alphabetically\n if (currentSegment.length > 0) {\n currentSegment.sort();\n result.push(...currentSegment);\n currentSegment = [];\n }\n result.push(modifier);\n } else {\n // Regular modifier - add to current segment for batch sorting\n currentSegment.push(modifier);\n }\n }\n // Sort and add any remaining segment items\n if (currentSegment.length > 0) {\n currentSegment.sort();\n result.push(...currentSegment);\n }\n return result;\n };\n};\nconst createConfigUtils = config => ({\n cache: createLruCache(config.cacheSize),\n parseClassName: createParseClassName(config),\n sortModifiers: createSortModifiers(config),\n ...createClassGroupUtils(config)\n});\nconst SPLIT_CLASSES_REGEX = /\\s+/;\nconst mergeClassList = (classList, configUtils) => {\n const {\n parseClassName,\n getClassGroupId,\n getConflictingClassGroupIds,\n sortModifiers\n } = configUtils;\n /**\n * Set of classGroupIds in following format:\n * `{importantModifier}{variantModifiers}{classGroupId}`\n * @example 'float'\n * @example 'hover:focus:bg-color'\n * @example 'md:!pr'\n */\n const classGroupsInConflict = [];\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);\n let result = '';\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\n const originalClassName = classNames[index];\n const {\n isExternal,\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n } = parseClassName(originalClassName);\n if (isExternal) {\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n let hasPostfixModifier = !!maybePostfixModifierPosition;\n let classGroupId = getClassGroupId(hasPostfixModifier ? baseClassName.substring(0, maybePostfixModifierPosition) : baseClassName);\n if (!classGroupId) {\n if (!hasPostfixModifier) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n classGroupId = getClassGroupId(baseClassName);\n if (!classGroupId) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n hasPostfixModifier = false;\n }\n // Fast path: skip sorting for empty or single modifier\n const variantModifier = modifiers.length === 0 ? '' : modifiers.length === 1 ? modifiers[0] : sortModifiers(modifiers).join(':');\n const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;\n const classId = modifierId + classGroupId;\n if (classGroupsInConflict.indexOf(classId) > -1) {\n // Tailwind class omitted due to conflict\n continue;\n }\n classGroupsInConflict.push(classId);\n const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);\n for (let i = 0; i < conflictGroups.length; ++i) {\n const group = conflictGroups[i];\n classGroupsInConflict.push(modifierId + group);\n }\n // Tailwind class not in conflict\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n }\n return result;\n};\n\n/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n */\nconst twJoin = (...classLists) => {\n let index = 0;\n let argument;\n let resolvedValue;\n let string = '';\n while (index < classLists.length) {\n if (argument = classLists[index++]) {\n if (resolvedValue = toValue(argument)) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nconst toValue = mix => {\n // Fast path for strings\n if (typeof mix === 'string') {\n return mix;\n }\n let resolvedValue;\n let string = '';\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if (resolvedValue = toValue(mix[k])) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nconst createTailwindMerge = (createConfigFirst, ...createConfigRest) => {\n let configUtils;\n let cacheGet;\n let cacheSet;\n let functionToCall;\n const initTailwindMerge = classList => {\n const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());\n configUtils = createConfigUtils(config);\n cacheGet = configUtils.cache.get;\n cacheSet = configUtils.cache.set;\n functionToCall = tailwindMerge;\n return tailwindMerge(classList);\n };\n const tailwindMerge = classList => {\n const cachedResult = cacheGet(classList);\n if (cachedResult) {\n return cachedResult;\n }\n const result = mergeClassList(classList, configUtils);\n cacheSet(classList, result);\n return result;\n };\n functionToCall = initTailwindMerge;\n return (...args) => functionToCall(twJoin(...args));\n};\nconst fallbackThemeArr = [];\nconst fromTheme = key => {\n const themeGetter = theme => theme[key] || fallbackThemeArr;\n themeGetter.isThemeGetter = true;\n return themeGetter;\n};\nconst arbitraryValueRegex = /^\\[(?:(\\w[\\w-]*):)?(.+)\\]$/i;\nconst arbitraryVariableRegex = /^\\((?:(\\w[\\w-]*):)?(.+)\\)$/i;\nconst fractionRegex = /^\\d+(?:\\.\\d+)?\\/\\d+(?:\\.\\d+)?$/;\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/;\nconst lengthUnitRegex = /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/;\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\\(.+\\)$/;\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/;\nconst imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/;\nconst isFraction = value => fractionRegex.test(value);\nconst isNumber = value => !!value && !Number.isNaN(Number(value));\nconst isInteger = value => !!value && Number.isInteger(Number(value));\nconst isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1));\nconst isTshirtSize = value => tshirtUnitRegex.test(value);\nconst isAny = () => true;\nconst isLengthOnly = value =>\n// `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n// For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n// I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\nlengthUnitRegex.test(value) && !colorFunctionRegex.test(value);\nconst isNever = () => false;\nconst isShadow = value => shadowRegex.test(value);\nconst isImage = value => imageRegex.test(value);\nconst isAnyNonArbitrary = value => !isArbitraryValue(value) && !isArbitraryVariable(value);\nconst isArbitrarySize = value => getIsArbitraryValue(value, isLabelSize, isNever);\nconst isArbitraryValue = value => arbitraryValueRegex.test(value);\nconst isArbitraryLength = value => getIsArbitraryValue(value, isLabelLength, isLengthOnly);\nconst isArbitraryNumber = value => getIsArbitraryValue(value, isLabelNumber, isNumber);\nconst isArbitraryWeight = value => getIsArbitraryValue(value, isLabelWeight, isAny);\nconst isArbitraryFamilyName = value => getIsArbitraryValue(value, isLabelFamilyName, isNever);\nconst isArbitraryPosition = value => getIsArbitraryValue(value, isLabelPosition, isNever);\nconst isArbitraryImage = value => getIsArbitraryValue(value, isLabelImage, isImage);\nconst isArbitraryShadow = value => getIsArbitraryValue(value, isLabelShadow, isShadow);\nconst isArbitraryVariable = value => arbitraryVariableRegex.test(value);\nconst isArbitraryVariableLength = value => getIsArbitraryVariable(value, isLabelLength);\nconst isArbitraryVariableFamilyName = value => getIsArbitraryVariable(value, isLabelFamilyName);\nconst isArbitraryVariablePosition = value => getIsArbitraryVariable(value, isLabelPosition);\nconst isArbitraryVariableSize = value => getIsArbitraryVariable(value, isLabelSize);\nconst isArbitraryVariableImage = value => getIsArbitraryVariable(value, isLabelImage);\nconst isArbitraryVariableShadow = value => getIsArbitraryVariable(value, isLabelShadow, true);\nconst isArbitraryVariableWeight = value => getIsArbitraryVariable(value, isLabelWeight, true);\n// Helpers\nconst getIsArbitraryValue = (value, testLabel, testValue) => {\n const result = arbitraryValueRegex.exec(value);\n if (result) {\n if (result[1]) {\n return testLabel(result[1]);\n }\n return testValue(result[2]);\n }\n return false;\n};\nconst getIsArbitraryVariable = (value, testLabel, shouldMatchNoLabel = false) => {\n const result = arbitraryVariableRegex.exec(value);\n if (result) {\n if (result[1]) {\n return testLabel(result[1]);\n }\n return shouldMatchNoLabel;\n }\n return false;\n};\n// Labels\nconst isLabelPosition = label => label === 'position' || label === 'percentage';\nconst isLabelImage = label => label === 'image' || label === 'url';\nconst isLabelSize = label => label === 'length' || label === 'size' || label === 'bg-size';\nconst isLabelLength = label => label === 'length';\nconst isLabelNumber = label => label === 'number';\nconst isLabelFamilyName = label => label === 'family-name';\nconst isLabelWeight = label => label === 'number' || label === 'weight';\nconst isLabelShadow = label => label === 'shadow';\nconst validators = /*#__PURE__*/Object.defineProperty({\n __proto__: null,\n isAny,\n isAnyNonArbitrary,\n isArbitraryFamilyName,\n isArbitraryImage,\n isArbitraryLength,\n isArbitraryNumber,\n isArbitraryPosition,\n isArbitraryShadow,\n isArbitrarySize,\n isArbitraryValue,\n isArbitraryVariable,\n isArbitraryVariableFamilyName,\n isArbitraryVariableImage,\n isArbitraryVariableLength,\n isArbitraryVariablePosition,\n isArbitraryVariableShadow,\n isArbitraryVariableSize,\n isArbitraryVariableWeight,\n isArbitraryWeight,\n isFraction,\n isInteger,\n isNumber,\n isPercent,\n isTshirtSize\n}, Symbol.toStringTag, {\n value: 'Module'\n});\nconst getDefaultConfig = () => {\n /**\n * Theme getters for theme variable namespaces\n * @see https://tailwindcss.com/docs/theme#theme-variable-namespaces\n */\n /***/\n const themeColor = fromTheme('color');\n const themeFont = fromTheme('font');\n const themeText = fromTheme('text');\n const themeFontWeight = fromTheme('font-weight');\n const themeTracking = fromTheme('tracking');\n const themeLeading = fromTheme('leading');\n const themeBreakpoint = fromTheme('breakpoint');\n const themeContainer = fromTheme('container');\n const themeSpacing = fromTheme('spacing');\n const themeRadius = fromTheme('radius');\n const themeShadow = fromTheme('shadow');\n const themeInsetShadow = fromTheme('inset-shadow');\n const themeTextShadow = fromTheme('text-shadow');\n const themeDropShadow = fromTheme('drop-shadow');\n const themeBlur = fromTheme('blur');\n const themePerspective = fromTheme('perspective');\n const themeAspect = fromTheme('aspect');\n const themeEase = fromTheme('ease');\n const themeAnimate = fromTheme('animate');\n /**\n * Helpers to avoid repeating the same scales\n *\n * We use functions that create a new array every time they're called instead of static arrays.\n * This ensures that users who modify any scale by mutating the array (e.g. with `array.push(element)`) don't accidentally mutate arrays in other parts of the config.\n */\n /***/\n const scaleBreak = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];\n const scalePosition = () => ['center', 'top', 'bottom', 'left', 'right', 'top-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-top', 'top-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-top', 'bottom-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-bottom', 'bottom-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-bottom'];\n const scalePositionWithArbitrary = () => [...scalePosition(), isArbitraryVariable, isArbitraryValue];\n const scaleOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'];\n const scaleOverscroll = () => ['auto', 'contain', 'none'];\n const scaleUnambiguousSpacing = () => [isArbitraryVariable, isArbitraryValue, themeSpacing];\n const scaleInset = () => [isFraction, 'full', 'auto', ...scaleUnambiguousSpacing()];\n const scaleGridTemplateColsRows = () => [isInteger, 'none', 'subgrid', isArbitraryVariable, isArbitraryValue];\n const scaleGridColRowStartAndEnd = () => ['auto', {\n span: ['full', isInteger, isArbitraryVariable, isArbitraryValue]\n }, isInteger, isArbitraryVariable, isArbitraryValue];\n const scaleGridColRowStartOrEnd = () => [isInteger, 'auto', isArbitraryVariable, isArbitraryValue];\n const scaleGridAutoColsRows = () => ['auto', 'min', 'max', 'fr', isArbitraryVariable, isArbitraryValue];\n const scaleAlignPrimaryAxis = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch', 'baseline', 'center-safe', 'end-safe'];\n const scaleAlignSecondaryAxis = () => ['start', 'end', 'center', 'stretch', 'center-safe', 'end-safe'];\n const scaleMargin = () => ['auto', ...scaleUnambiguousSpacing()];\n const scaleSizing = () => [isFraction, 'auto', 'full', 'dvw', 'dvh', 'lvw', 'lvh', 'svw', 'svh', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleSizingInline = () => [isFraction, 'screen', 'full', 'dvw', 'lvw', 'svw', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleSizingBlock = () => [isFraction, 'screen', 'full', 'lh', 'dvh', 'lvh', 'svh', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleColor = () => [themeColor, isArbitraryVariable, isArbitraryValue];\n const scaleBgPosition = () => [...scalePosition(), isArbitraryVariablePosition, isArbitraryPosition, {\n position: [isArbitraryVariable, isArbitraryValue]\n }];\n const scaleBgRepeat = () => ['no-repeat', {\n repeat: ['', 'x', 'y', 'space', 'round']\n }];\n const scaleBgSize = () => ['auto', 'cover', 'contain', isArbitraryVariableSize, isArbitrarySize, {\n size: [isArbitraryVariable, isArbitraryValue]\n }];\n const scaleGradientStopPosition = () => [isPercent, isArbitraryVariableLength, isArbitraryLength];\n const scaleRadius = () => [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', 'full', themeRadius, isArbitraryVariable, isArbitraryValue];\n const scaleBorderWidth = () => ['', isNumber, isArbitraryVariableLength, isArbitraryLength];\n const scaleLineStyle = () => ['solid', 'dashed', 'dotted', 'double'];\n const scaleBlendMode = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];\n const scaleMaskImagePosition = () => [isNumber, isPercent, isArbitraryVariablePosition, isArbitraryPosition];\n const scaleBlur = () => [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeBlur, isArbitraryVariable, isArbitraryValue];\n const scaleRotate = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleScale = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleSkew = () => [isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleTranslate = () => [isFraction, 'full', ...scaleUnambiguousSpacing()];\n return {\n cacheSize: 500,\n theme: {\n animate: ['spin', 'ping', 'pulse', 'bounce'],\n aspect: ['video'],\n blur: [isTshirtSize],\n breakpoint: [isTshirtSize],\n color: [isAny],\n container: [isTshirtSize],\n 'drop-shadow': [isTshirtSize],\n ease: ['in', 'out', 'in-out'],\n font: [isAnyNonArbitrary],\n 'font-weight': ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black'],\n 'inset-shadow': [isTshirtSize],\n leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose'],\n perspective: ['dramatic', 'near', 'normal', 'midrange', 'distant', 'none'],\n radius: [isTshirtSize],\n shadow: [isTshirtSize],\n spacing: ['px', isNumber],\n text: [isTshirtSize],\n 'text-shadow': [isTshirtSize],\n tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest']\n },\n classGroups: {\n // --------------\n // --- Layout ---\n // --------------\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [{\n aspect: ['auto', 'square', isFraction, isArbitraryValue, isArbitraryVariable, themeAspect]\n }],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n * @deprecated since Tailwind CSS v4.0.0\n */\n container: ['container'],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [{\n columns: [isNumber, isArbitraryValue, isArbitraryVariable, themeContainer]\n }],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n 'break-after': [{\n 'break-after': scaleBreak()\n }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{\n 'break-before': scaleBreak()\n }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{\n 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column']\n }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{\n 'box-decoration': ['slice', 'clone']\n }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{\n box: ['border', 'content']\n }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: ['block', 'inline-block', 'inline', 'flex', 'inline-flex', 'table', 'inline-table', 'table-caption', 'table-cell', 'table-column', 'table-column-group', 'table-footer-group', 'table-header-group', 'table-row-group', 'table-row', 'flow-root', 'grid', 'inline-grid', 'contents', 'list-item', 'hidden'],\n /**\n * Screen Reader Only\n * @see https://tailwindcss.com/docs/display#screen-reader-only\n */\n sr: ['sr-only', 'not-sr-only'],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n float: [{\n float: ['right', 'left', 'none', 'start', 'end']\n }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{\n clear: ['left', 'right', 'both', 'none', 'start', 'end']\n }],\n /**\n * Isolation\n * @see https://tailwindcss.com/docs/isolation\n */\n isolation: ['isolate', 'isolation-auto'],\n /**\n * Object Fit\n * @see https://tailwindcss.com/docs/object-fit\n */\n 'object-fit': [{\n object: ['contain', 'cover', 'fill', 'none', 'scale-down']\n }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [{\n object: scalePositionWithArbitrary()\n }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{\n overflow: scaleOverflow()\n }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{\n 'overflow-x': scaleOverflow()\n }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{\n 'overflow-y': scaleOverflow()\n }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{\n overscroll: scaleOverscroll()\n }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{\n 'overscroll-x': scaleOverscroll()\n }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{\n 'overscroll-y': scaleOverscroll()\n }],\n /**\n * Position\n * @see https://tailwindcss.com/docs/position\n */\n position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n /**\n * Inset\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n inset: [{\n inset: scaleInset()\n }],\n /**\n * Inset Inline\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{\n 'inset-x': scaleInset()\n }],\n /**\n * Inset Block\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{\n 'inset-y': scaleInset()\n }],\n /**\n * Inset Inline Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n * @todo class group will be renamed to `inset-s` in next major release\n */\n start: [{\n 'inset-s': scaleInset(),\n /**\n * @deprecated since Tailwind CSS v4.2.0 in favor of `inset-s-*` utilities.\n * @see https://github.com/tailwindlabs/tailwindcss/pull/19613\n */\n start: scaleInset()\n }],\n /**\n * Inset Inline End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n * @todo class group will be renamed to `inset-e` in next major release\n */\n end: [{\n 'inset-e': scaleInset(),\n /**\n * @deprecated since Tailwind CSS v4.2.0 in favor of `inset-e-*` utilities.\n * @see https://github.com/tailwindlabs/tailwindcss/pull/19613\n */\n end: scaleInset()\n }],\n /**\n * Inset Block Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-bs': [{\n 'inset-bs': scaleInset()\n }],\n /**\n * Inset Block End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-be': [{\n 'inset-be': scaleInset()\n }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{\n top: scaleInset()\n }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{\n right: scaleInset()\n }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{\n bottom: scaleInset()\n }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{\n left: scaleInset()\n }],\n /**\n * Visibility\n * @see https://tailwindcss.com/docs/visibility\n */\n visibility: ['visible', 'invisible', 'collapse'],\n /**\n * Z-Index\n * @see https://tailwindcss.com/docs/z-index\n */\n z: [{\n z: [isInteger, 'auto', isArbitraryVariable, isArbitraryValue]\n }],\n // ------------------------\n // --- Flexbox and Grid ---\n // ------------------------\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [{\n basis: [isFraction, 'full', 'auto', themeContainer, ...scaleUnambiguousSpacing()]\n }],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{\n flex: ['row', 'row-reverse', 'col', 'col-reverse']\n }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{\n flex: ['nowrap', 'wrap', 'wrap-reverse']\n }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{\n flex: [isNumber, isFraction, 'auto', 'initial', 'none', isArbitraryValue]\n }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{\n grow: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{\n shrink: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [{\n order: [isInteger, 'first', 'last', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{\n 'grid-cols': scaleGridTemplateColsRows()\n }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [{\n col: scaleGridColRowStartAndEnd()\n }],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{\n 'col-start': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{\n 'col-end': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{\n 'grid-rows': scaleGridTemplateColsRows()\n }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [{\n row: scaleGridColRowStartAndEnd()\n }],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{\n 'row-start': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{\n 'row-end': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{\n 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense']\n }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{\n 'auto-cols': scaleGridAutoColsRows()\n }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{\n 'auto-rows': scaleGridAutoColsRows()\n }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{\n gap: scaleUnambiguousSpacing()\n }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{\n 'gap-x': scaleUnambiguousSpacing()\n }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{\n 'gap-y': scaleUnambiguousSpacing()\n }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{\n justify: [...scaleAlignPrimaryAxis(), 'normal']\n }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{\n 'justify-items': [...scaleAlignSecondaryAxis(), 'normal']\n }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{\n 'justify-self': ['auto', ...scaleAlignSecondaryAxis()]\n }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{\n content: ['normal', ...scaleAlignPrimaryAxis()]\n }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{\n items: [...scaleAlignSecondaryAxis(), {\n baseline: ['', 'last']\n }]\n }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [{\n self: ['auto', ...scaleAlignSecondaryAxis(), {\n baseline: ['', 'last']\n }]\n }],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{\n 'place-content': scaleAlignPrimaryAxis()\n }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{\n 'place-items': [...scaleAlignSecondaryAxis(), 'baseline']\n }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{\n 'place-self': ['auto', ...scaleAlignSecondaryAxis()]\n }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{\n p: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Inline\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{\n px: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Block\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{\n py: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Inline Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{\n ps: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Inline End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{\n pe: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Block Start\n * @see https://tailwindcss.com/docs/padding\n */\n pbs: [{\n pbs: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Block End\n * @see https://tailwindcss.com/docs/padding\n */\n pbe: [{\n pbe: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{\n pt: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{\n pr: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{\n pb: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{\n pl: scaleUnambiguousSpacing()\n }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{\n m: scaleMargin()\n }],\n /**\n * Margin Inline\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{\n mx: scaleMargin()\n }],\n /**\n * Margin Block\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{\n my: scaleMargin()\n }],\n /**\n * Margin Inline Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{\n ms: scaleMargin()\n }],\n /**\n * Margin Inline End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{\n me: scaleMargin()\n }],\n /**\n * Margin Block Start\n * @see https://tailwindcss.com/docs/margin\n */\n mbs: [{\n mbs: scaleMargin()\n }],\n /**\n * Margin Block End\n * @see https://tailwindcss.com/docs/margin\n */\n mbe: [{\n mbe: scaleMargin()\n }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{\n mt: scaleMargin()\n }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{\n mr: scaleMargin()\n }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{\n mb: scaleMargin()\n }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{\n ml: scaleMargin()\n }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x': [{\n 'space-x': scaleUnambiguousSpacing()\n }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x-reverse': ['space-x-reverse'],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y': [{\n 'space-y': scaleUnambiguousSpacing()\n }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y-reverse': ['space-y-reverse'],\n // --------------\n // --- Sizing ---\n // --------------\n /**\n * Size\n * @see https://tailwindcss.com/docs/width#setting-both-width-and-height\n */\n size: [{\n size: scaleSizing()\n }],\n /**\n * Inline Size\n * @see https://tailwindcss.com/docs/width\n */\n 'inline-size': [{\n inline: ['auto', ...scaleSizingInline()]\n }],\n /**\n * Min-Inline Size\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-inline-size': [{\n 'min-inline': ['auto', ...scaleSizingInline()]\n }],\n /**\n * Max-Inline Size\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-inline-size': [{\n 'max-inline': ['none', ...scaleSizingInline()]\n }],\n /**\n * Block Size\n * @see https://tailwindcss.com/docs/height\n */\n 'block-size': [{\n block: ['auto', ...scaleSizingBlock()]\n }],\n /**\n * Min-Block Size\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-block-size': [{\n 'min-block': ['auto', ...scaleSizingBlock()]\n }],\n /**\n * Max-Block Size\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-block-size': [{\n 'max-block': ['none', ...scaleSizingBlock()]\n }],\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [{\n w: [themeContainer, 'screen', ...scaleSizing()]\n }],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [{\n 'min-w': [themeContainer, 'screen', /** Deprecated. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'none', ...scaleSizing()]\n }],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [{\n 'max-w': [themeContainer, 'screen', 'none', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'prose', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n {\n screen: [themeBreakpoint]\n }, ...scaleSizing()]\n }],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [{\n h: ['screen', 'lh', ...scaleSizing()]\n }],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [{\n 'min-h': ['screen', 'lh', 'none', ...scaleSizing()]\n }],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [{\n 'max-h': ['screen', 'lh', ...scaleSizing()]\n }],\n // ------------------\n // --- Typography ---\n // ------------------\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n 'font-size': [{\n text: ['base', themeText, isArbitraryVariableLength, isArbitraryLength]\n }],\n /**\n * Font Smoothing\n * @see https://tailwindcss.com/docs/font-smoothing\n */\n 'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n /**\n * Font Style\n * @see https://tailwindcss.com/docs/font-style\n */\n 'font-style': ['italic', 'not-italic'],\n /**\n * Font Weight\n * @see https://tailwindcss.com/docs/font-weight\n */\n 'font-weight': [{\n font: [themeFontWeight, isArbitraryVariableWeight, isArbitraryWeight]\n }],\n /**\n * Font Stretch\n * @see https://tailwindcss.com/docs/font-stretch\n */\n 'font-stretch': [{\n 'font-stretch': ['ultra-condensed', 'extra-condensed', 'condensed', 'semi-condensed', 'normal', 'semi-expanded', 'expanded', 'extra-expanded', 'ultra-expanded', isPercent, isArbitraryValue]\n }],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n 'font-family': [{\n font: [isArbitraryVariableFamilyName, isArbitraryFamilyName, themeFont]\n }],\n /**\n * Font Feature Settings\n * @see https://tailwindcss.com/docs/font-feature-settings\n */\n 'font-features': [{\n 'font-features': [isArbitraryValue]\n }],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-normal': ['normal-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-ordinal': ['ordinal'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-slashed-zero': ['slashed-zero'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [{\n tracking: [themeTracking, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n 'line-clamp': [{\n 'line-clamp': [isNumber, 'none', isArbitraryVariable, isArbitraryNumber]\n }],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [{\n leading: [/** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n themeLeading, ...scaleUnambiguousSpacing()]\n }],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{\n 'list-image': ['none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{\n list: ['inside', 'outside']\n }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n 'list-style-type': [{\n list: ['disc', 'decimal', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n 'text-alignment': [{\n text: ['left', 'center', 'right', 'justify', 'start', 'end']\n }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://v3.tailwindcss.com/docs/placeholder-color\n */\n 'placeholder-color': [{\n placeholder: scaleColor()\n }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{\n text: scaleColor()\n }],\n /**\n * Text Decoration\n * @see https://tailwindcss.com/docs/text-decoration\n */\n 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n /**\n * Text Decoration Style\n * @see https://tailwindcss.com/docs/text-decoration-style\n */\n 'text-decoration-style': [{\n decoration: [...scaleLineStyle(), 'wavy']\n }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [{\n decoration: [isNumber, 'from-font', 'auto', isArbitraryVariable, isArbitraryLength]\n }],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{\n decoration: scaleColor()\n }],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n 'underline-offset': [{\n 'underline-offset': [isNumber, 'auto', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Text Transform\n * @see https://tailwindcss.com/docs/text-transform\n */\n 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n /**\n * Text Overflow\n * @see https://tailwindcss.com/docs/text-overflow\n */\n 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n /**\n * Text Wrap\n * @see https://tailwindcss.com/docs/text-wrap\n */\n 'text-wrap': [{\n text: ['wrap', 'nowrap', 'balance', 'pretty']\n }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{\n indent: scaleUnambiguousSpacing()\n }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [{\n align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Whitespace\n * @see https://tailwindcss.com/docs/whitespace\n */\n whitespace: [{\n whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces']\n }],\n /**\n * Word Break\n * @see https://tailwindcss.com/docs/word-break\n */\n break: [{\n break: ['normal', 'words', 'all', 'keep']\n }],\n /**\n * Overflow Wrap\n * @see https://tailwindcss.com/docs/overflow-wrap\n */\n wrap: [{\n wrap: ['break-word', 'anywhere', 'normal']\n }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{\n hyphens: ['none', 'manual', 'auto']\n }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{\n content: ['none', isArbitraryVariable, isArbitraryValue]\n }],\n // -------------------\n // --- Backgrounds ---\n // -------------------\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{\n bg: ['fixed', 'local', 'scroll']\n }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{\n 'bg-clip': ['border', 'padding', 'content', 'text']\n }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{\n 'bg-origin': ['border', 'padding', 'content']\n }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [{\n bg: scaleBgPosition()\n }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{\n bg: scaleBgRepeat()\n }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [{\n bg: scaleBgSize()\n }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [{\n bg: ['none', {\n linear: [{\n to: ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl']\n }, isInteger, isArbitraryVariable, isArbitraryValue],\n radial: ['', isArbitraryVariable, isArbitraryValue],\n conic: [isInteger, isArbitraryVariable, isArbitraryValue]\n }, isArbitraryVariableImage, isArbitraryImage]\n }],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{\n bg: scaleColor()\n }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{\n from: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{\n via: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{\n to: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{\n from: scaleColor()\n }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{\n via: scaleColor()\n }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{\n to: scaleColor()\n }],\n // ---------------\n // --- Borders ---\n // ---------------\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{\n rounded: scaleRadius()\n }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{\n 'rounded-s': scaleRadius()\n }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{\n 'rounded-e': scaleRadius()\n }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{\n 'rounded-t': scaleRadius()\n }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{\n 'rounded-r': scaleRadius()\n }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{\n 'rounded-b': scaleRadius()\n }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{\n 'rounded-l': scaleRadius()\n }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{\n 'rounded-ss': scaleRadius()\n }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{\n 'rounded-se': scaleRadius()\n }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{\n 'rounded-ee': scaleRadius()\n }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{\n 'rounded-es': scaleRadius()\n }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{\n 'rounded-tl': scaleRadius()\n }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{\n 'rounded-tr': scaleRadius()\n }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{\n 'rounded-br': scaleRadius()\n }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{\n 'rounded-bl': scaleRadius()\n }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{\n border: scaleBorderWidth()\n }],\n /**\n * Border Width Inline\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{\n 'border-x': scaleBorderWidth()\n }],\n /**\n * Border Width Block\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{\n 'border-y': scaleBorderWidth()\n }],\n /**\n * Border Width Inline Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{\n 'border-s': scaleBorderWidth()\n }],\n /**\n * Border Width Inline End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{\n 'border-e': scaleBorderWidth()\n }],\n /**\n * Border Width Block Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-bs': [{\n 'border-bs': scaleBorderWidth()\n }],\n /**\n * Border Width Block End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-be': [{\n 'border-be': scaleBorderWidth()\n }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{\n 'border-t': scaleBorderWidth()\n }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{\n 'border-r': scaleBorderWidth()\n }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{\n 'border-b': scaleBorderWidth()\n }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{\n 'border-l': scaleBorderWidth()\n }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x': [{\n 'divide-x': scaleBorderWidth()\n }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x-reverse': ['divide-x-reverse'],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y': [{\n 'divide-y': scaleBorderWidth()\n }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y-reverse': ['divide-y-reverse'],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n 'border-style': [{\n border: [...scaleLineStyle(), 'hidden', 'none']\n }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/border-style#setting-the-divider-style\n */\n 'divide-style': [{\n divide: [...scaleLineStyle(), 'hidden', 'none']\n }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{\n border: scaleColor()\n }],\n /**\n * Border Color Inline\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{\n 'border-x': scaleColor()\n }],\n /**\n * Border Color Block\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{\n 'border-y': scaleColor()\n }],\n /**\n * Border Color Inline Start\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-s': [{\n 'border-s': scaleColor()\n }],\n /**\n * Border Color Inline End\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-e': [{\n 'border-e': scaleColor()\n }],\n /**\n * Border Color Block Start\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-bs': [{\n 'border-bs': scaleColor()\n }],\n /**\n * Border Color Block End\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-be': [{\n 'border-be': scaleColor()\n }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{\n 'border-t': scaleColor()\n }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{\n 'border-r': scaleColor()\n }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{\n 'border-b': scaleColor()\n }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{\n 'border-l': scaleColor()\n }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{\n divide: scaleColor()\n }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{\n outline: [...scaleLineStyle(), 'none', 'hidden']\n }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n 'outline-offset': [{\n 'outline-offset': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n 'outline-w': [{\n outline: ['', isNumber, isArbitraryVariableLength, isArbitraryLength]\n }],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n 'outline-color': [{\n outline: scaleColor()\n }],\n // ---------------\n // --- Effects ---\n // ---------------\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [{\n shadow: [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-shadow-color\n */\n 'shadow-color': [{\n shadow: scaleColor()\n }],\n /**\n * Inset Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow\n */\n 'inset-shadow': [{\n 'inset-shadow': ['none', themeInsetShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Inset Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-shadow-color\n */\n 'inset-shadow-color': [{\n 'inset-shadow': scaleColor()\n }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-a-ring\n */\n 'ring-w': [{\n ring: scaleBorderWidth()\n }],\n /**\n * Ring Width Inset\n * @see https://v3.tailwindcss.com/docs/ring-width#inset-rings\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-w-inset': ['ring-inset'],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-ring-color\n */\n 'ring-color': [{\n ring: scaleColor()\n }],\n /**\n * Ring Offset Width\n * @see https://v3.tailwindcss.com/docs/ring-offset-width\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-w': [{\n 'ring-offset': [isNumber, isArbitraryLength]\n }],\n /**\n * Ring Offset Color\n * @see https://v3.tailwindcss.com/docs/ring-offset-color\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-color': [{\n 'ring-offset': scaleColor()\n }],\n /**\n * Inset Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-ring\n */\n 'inset-ring-w': [{\n 'inset-ring': scaleBorderWidth()\n }],\n /**\n * Inset Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-ring-color\n */\n 'inset-ring-color': [{\n 'inset-ring': scaleColor()\n }],\n /**\n * Text Shadow\n * @see https://tailwindcss.com/docs/text-shadow\n */\n 'text-shadow': [{\n 'text-shadow': ['none', themeTextShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Text Shadow Color\n * @see https://tailwindcss.com/docs/text-shadow#setting-the-shadow-color\n */\n 'text-shadow-color': [{\n 'text-shadow': scaleColor()\n }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{\n opacity: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{\n 'mix-blend': [...scaleBlendMode(), 'plus-darker', 'plus-lighter']\n }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{\n 'bg-blend': scaleBlendMode()\n }],\n /**\n * Mask Clip\n * @see https://tailwindcss.com/docs/mask-clip\n */\n 'mask-clip': [{\n 'mask-clip': ['border', 'padding', 'content', 'fill', 'stroke', 'view']\n }, 'mask-no-clip'],\n /**\n * Mask Composite\n * @see https://tailwindcss.com/docs/mask-composite\n */\n 'mask-composite': [{\n mask: ['add', 'subtract', 'intersect', 'exclude']\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image-linear-pos': [{\n 'mask-linear': [isNumber]\n }],\n 'mask-image-linear-from-pos': [{\n 'mask-linear-from': scaleMaskImagePosition()\n }],\n 'mask-image-linear-to-pos': [{\n 'mask-linear-to': scaleMaskImagePosition()\n }],\n 'mask-image-linear-from-color': [{\n 'mask-linear-from': scaleColor()\n }],\n 'mask-image-linear-to-color': [{\n 'mask-linear-to': scaleColor()\n }],\n 'mask-image-t-from-pos': [{\n 'mask-t-from': scaleMaskImagePosition()\n }],\n 'mask-image-t-to-pos': [{\n 'mask-t-to': scaleMaskImagePosition()\n }],\n 'mask-image-t-from-color': [{\n 'mask-t-from': scaleColor()\n }],\n 'mask-image-t-to-color': [{\n 'mask-t-to': scaleColor()\n }],\n 'mask-image-r-from-pos': [{\n 'mask-r-from': scaleMaskImagePosition()\n }],\n 'mask-image-r-to-pos': [{\n 'mask-r-to': scaleMaskImagePosition()\n }],\n 'mask-image-r-from-color': [{\n 'mask-r-from': scaleColor()\n }],\n 'mask-image-r-to-color': [{\n 'mask-r-to': scaleColor()\n }],\n 'mask-image-b-from-pos': [{\n 'mask-b-from': scaleMaskImagePosition()\n }],\n 'mask-image-b-to-pos': [{\n 'mask-b-to': scaleMaskImagePosition()\n }],\n 'mask-image-b-from-color': [{\n 'mask-b-from': scaleColor()\n }],\n 'mask-image-b-to-color': [{\n 'mask-b-to': scaleColor()\n }],\n 'mask-image-l-from-pos': [{\n 'mask-l-from': scaleMaskImagePosition()\n }],\n 'mask-image-l-to-pos': [{\n 'mask-l-to': scaleMaskImagePosition()\n }],\n 'mask-image-l-from-color': [{\n 'mask-l-from': scaleColor()\n }],\n 'mask-image-l-to-color': [{\n 'mask-l-to': scaleColor()\n }],\n 'mask-image-x-from-pos': [{\n 'mask-x-from': scaleMaskImagePosition()\n }],\n 'mask-image-x-to-pos': [{\n 'mask-x-to': scaleMaskImagePosition()\n }],\n 'mask-image-x-from-color': [{\n 'mask-x-from': scaleColor()\n }],\n 'mask-image-x-to-color': [{\n 'mask-x-to': scaleColor()\n }],\n 'mask-image-y-from-pos': [{\n 'mask-y-from': scaleMaskImagePosition()\n }],\n 'mask-image-y-to-pos': [{\n 'mask-y-to': scaleMaskImagePosition()\n }],\n 'mask-image-y-from-color': [{\n 'mask-y-from': scaleColor()\n }],\n 'mask-image-y-to-color': [{\n 'mask-y-to': scaleColor()\n }],\n 'mask-image-radial': [{\n 'mask-radial': [isArbitraryVariable, isArbitraryValue]\n }],\n 'mask-image-radial-from-pos': [{\n 'mask-radial-from': scaleMaskImagePosition()\n }],\n 'mask-image-radial-to-pos': [{\n 'mask-radial-to': scaleMaskImagePosition()\n }],\n 'mask-image-radial-from-color': [{\n 'mask-radial-from': scaleColor()\n }],\n 'mask-image-radial-to-color': [{\n 'mask-radial-to': scaleColor()\n }],\n 'mask-image-radial-shape': [{\n 'mask-radial': ['circle', 'ellipse']\n }],\n 'mask-image-radial-size': [{\n 'mask-radial': [{\n closest: ['side', 'corner'],\n farthest: ['side', 'corner']\n }]\n }],\n 'mask-image-radial-pos': [{\n 'mask-radial-at': scalePosition()\n }],\n 'mask-image-conic-pos': [{\n 'mask-conic': [isNumber]\n }],\n 'mask-image-conic-from-pos': [{\n 'mask-conic-from': scaleMaskImagePosition()\n }],\n 'mask-image-conic-to-pos': [{\n 'mask-conic-to': scaleMaskImagePosition()\n }],\n 'mask-image-conic-from-color': [{\n 'mask-conic-from': scaleColor()\n }],\n 'mask-image-conic-to-color': [{\n 'mask-conic-to': scaleColor()\n }],\n /**\n * Mask Mode\n * @see https://tailwindcss.com/docs/mask-mode\n */\n 'mask-mode': [{\n mask: ['alpha', 'luminance', 'match']\n }],\n /**\n * Mask Origin\n * @see https://tailwindcss.com/docs/mask-origin\n */\n 'mask-origin': [{\n 'mask-origin': ['border', 'padding', 'content', 'fill', 'stroke', 'view']\n }],\n /**\n * Mask Position\n * @see https://tailwindcss.com/docs/mask-position\n */\n 'mask-position': [{\n mask: scaleBgPosition()\n }],\n /**\n * Mask Repeat\n * @see https://tailwindcss.com/docs/mask-repeat\n */\n 'mask-repeat': [{\n mask: scaleBgRepeat()\n }],\n /**\n * Mask Size\n * @see https://tailwindcss.com/docs/mask-size\n */\n 'mask-size': [{\n mask: scaleBgSize()\n }],\n /**\n * Mask Type\n * @see https://tailwindcss.com/docs/mask-type\n */\n 'mask-type': [{\n 'mask-type': ['alpha', 'luminance']\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image': [{\n mask: ['none', isArbitraryVariable, isArbitraryValue]\n }],\n // ---------------\n // --- Filters ---\n // ---------------\n /**\n * Filter\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [{\n filter: [\n // Deprecated since Tailwind CSS v3.0.0\n '', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{\n blur: scaleBlur()\n }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{\n brightness: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{\n contrast: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [{\n 'drop-shadow': [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeDropShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Drop Shadow Color\n * @see https://tailwindcss.com/docs/filter-drop-shadow#setting-the-shadow-color\n */\n 'drop-shadow-color': [{\n 'drop-shadow': scaleColor()\n }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{\n grayscale: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{\n 'hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{\n invert: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{\n saturate: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{\n sepia: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Filter\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [{\n 'backdrop-filter': [\n // Deprecated since Tailwind CSS v3.0.0\n '', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{\n 'backdrop-blur': scaleBlur()\n }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n 'backdrop-brightness': [{\n 'backdrop-brightness': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n 'backdrop-contrast': [{\n 'backdrop-contrast': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n 'backdrop-grayscale': [{\n 'backdrop-grayscale': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n 'backdrop-hue-rotate': [{\n 'backdrop-hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n 'backdrop-invert': [{\n 'backdrop-invert': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n 'backdrop-opacity': [{\n 'backdrop-opacity': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n 'backdrop-saturate': [{\n 'backdrop-saturate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n 'backdrop-sepia': [{\n 'backdrop-sepia': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n // --------------\n // --- Tables ---\n // --------------\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{\n border: ['collapse', 'separate']\n }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{\n 'border-spacing': scaleUnambiguousSpacing()\n }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{\n 'border-spacing-x': scaleUnambiguousSpacing()\n }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{\n 'border-spacing-y': scaleUnambiguousSpacing()\n }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{\n table: ['auto', 'fixed']\n }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{\n caption: ['top', 'bottom']\n }],\n // ---------------------------------\n // --- Transitions and Animation ---\n // ---------------------------------\n /**\n * Transition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [{\n transition: ['', 'all', 'colors', 'opacity', 'shadow', 'transform', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Behavior\n * @see https://tailwindcss.com/docs/transition-behavior\n */\n 'transition-behavior': [{\n transition: ['normal', 'discrete']\n }],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{\n duration: [isNumber, 'initial', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [{\n ease: ['linear', 'initial', themeEase, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{\n delay: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{\n animate: ['none', themeAnimate, isArbitraryVariable, isArbitraryValue]\n }],\n // ------------------\n // --- Transforms ---\n // ------------------\n /**\n * Backface Visibility\n * @see https://tailwindcss.com/docs/backface-visibility\n */\n backface: [{\n backface: ['hidden', 'visible']\n }],\n /**\n * Perspective\n * @see https://tailwindcss.com/docs/perspective\n */\n perspective: [{\n perspective: [themePerspective, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Perspective Origin\n * @see https://tailwindcss.com/docs/perspective-origin\n */\n 'perspective-origin': [{\n 'perspective-origin': scalePositionWithArbitrary()\n }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{\n rotate: scaleRotate()\n }],\n /**\n * Rotate X\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-x': [{\n 'rotate-x': scaleRotate()\n }],\n /**\n * Rotate Y\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-y': [{\n 'rotate-y': scaleRotate()\n }],\n /**\n * Rotate Z\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-z': [{\n 'rotate-z': scaleRotate()\n }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{\n scale: scaleScale()\n }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{\n 'scale-x': scaleScale()\n }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{\n 'scale-y': scaleScale()\n }],\n /**\n * Scale Z\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-z': [{\n 'scale-z': scaleScale()\n }],\n /**\n * Scale 3D\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-3d': ['scale-3d'],\n /**\n * Skew\n * @see https://tailwindcss.com/docs/skew\n */\n skew: [{\n skew: scaleSkew()\n }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{\n 'skew-x': scaleSkew()\n }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{\n 'skew-y': scaleSkew()\n }],\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [{\n transform: [isArbitraryVariable, isArbitraryValue, '', 'none', 'gpu', 'cpu']\n }],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n 'transform-origin': [{\n origin: scalePositionWithArbitrary()\n }],\n /**\n * Transform Style\n * @see https://tailwindcss.com/docs/transform-style\n */\n 'transform-style': [{\n transform: ['3d', 'flat']\n }],\n /**\n * Translate\n * @see https://tailwindcss.com/docs/translate\n */\n translate: [{\n translate: scaleTranslate()\n }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{\n 'translate-x': scaleTranslate()\n }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{\n 'translate-y': scaleTranslate()\n }],\n /**\n * Translate Z\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-z': [{\n 'translate-z': scaleTranslate()\n }],\n /**\n * Translate None\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-none': ['translate-none'],\n // ---------------------\n // --- Interactivity ---\n // ---------------------\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{\n accent: scaleColor()\n }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{\n appearance: ['none', 'auto']\n }],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{\n caret: scaleColor()\n }],\n /**\n * Color Scheme\n * @see https://tailwindcss.com/docs/color-scheme\n */\n 'color-scheme': [{\n scheme: ['normal', 'dark', 'light', 'light-dark', 'only-dark', 'only-light']\n }],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [{\n cursor: ['auto', 'default', 'pointer', 'wait', 'text', 'move', 'help', 'not-allowed', 'none', 'context-menu', 'progress', 'cell', 'crosshair', 'vertical-text', 'alias', 'copy', 'no-drop', 'grab', 'grabbing', 'all-scroll', 'col-resize', 'row-resize', 'n-resize', 'e-resize', 's-resize', 'w-resize', 'ne-resize', 'nw-resize', 'se-resize', 'sw-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'zoom-in', 'zoom-out', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Field Sizing\n * @see https://tailwindcss.com/docs/field-sizing\n */\n 'field-sizing': [{\n 'field-sizing': ['fixed', 'content']\n }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{\n 'pointer-events': ['auto', 'none']\n }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{\n resize: ['none', '', 'y', 'x']\n }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{\n scroll: ['auto', 'smooth']\n }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{\n 'scroll-m': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Inline\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{\n 'scroll-mx': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Block\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{\n 'scroll-my': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Inline Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{\n 'scroll-ms': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Inline End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{\n 'scroll-me': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Block Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mbs': [{\n 'scroll-mbs': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Block End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mbe': [{\n 'scroll-mbe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{\n 'scroll-mt': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{\n 'scroll-mr': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{\n 'scroll-mb': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{\n 'scroll-ml': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{\n 'scroll-p': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Inline\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{\n 'scroll-px': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Block\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{\n 'scroll-py': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Inline Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{\n 'scroll-ps': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Inline End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{\n 'scroll-pe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Block Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pbs': [{\n 'scroll-pbs': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Block End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pbe': [{\n 'scroll-pbe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{\n 'scroll-pt': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{\n 'scroll-pr': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{\n 'scroll-pb': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{\n 'scroll-pl': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{\n snap: ['start', 'end', 'center', 'align-none']\n }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{\n snap: ['normal', 'always']\n }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{\n snap: ['none', 'x', 'y', 'both']\n }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{\n snap: ['mandatory', 'proximity']\n }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [{\n touch: ['auto', 'none', 'manipulation']\n }],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-x': [{\n 'touch-pan': ['x', 'left', 'right']\n }],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-y': [{\n 'touch-pan': ['y', 'up', 'down']\n }],\n /**\n * Touch Action Pinch Zoom\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-pz': ['touch-pinch-zoom'],\n /**\n * User Select\n * @see https://tailwindcss.com/docs/user-select\n */\n select: [{\n select: ['none', 'text', 'all', 'auto']\n }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [{\n 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryVariable, isArbitraryValue]\n }],\n // -----------\n // --- SVG ---\n // -----------\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{\n fill: ['none', ...scaleColor()]\n }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [{\n stroke: [isNumber, isArbitraryVariableLength, isArbitraryLength, isArbitraryNumber]\n }],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{\n stroke: ['none', ...scaleColor()]\n }],\n // ---------------------\n // --- Accessibility ---\n // ---------------------\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n 'forced-color-adjust': [{\n 'forced-color-adjust': ['auto', 'none']\n }]\n },\n conflictingClassGroups: {\n overflow: ['overflow-x', 'overflow-y'],\n overscroll: ['overscroll-x', 'overscroll-y'],\n inset: ['inset-x', 'inset-y', 'inset-bs', 'inset-be', 'start', 'end', 'top', 'right', 'bottom', 'left'],\n 'inset-x': ['right', 'left'],\n 'inset-y': ['top', 'bottom'],\n flex: ['basis', 'grow', 'shrink'],\n gap: ['gap-x', 'gap-y'],\n p: ['px', 'py', 'ps', 'pe', 'pbs', 'pbe', 'pt', 'pr', 'pb', 'pl'],\n px: ['pr', 'pl'],\n py: ['pt', 'pb'],\n m: ['mx', 'my', 'ms', 'me', 'mbs', 'mbe', 'mt', 'mr', 'mb', 'ml'],\n mx: ['mr', 'ml'],\n my: ['mt', 'mb'],\n size: ['w', 'h'],\n 'font-size': ['leading'],\n 'fvn-normal': ['fvn-ordinal', 'fvn-slashed-zero', 'fvn-figure', 'fvn-spacing', 'fvn-fraction'],\n 'fvn-ordinal': ['fvn-normal'],\n 'fvn-slashed-zero': ['fvn-normal'],\n 'fvn-figure': ['fvn-normal'],\n 'fvn-spacing': ['fvn-normal'],\n 'fvn-fraction': ['fvn-normal'],\n 'line-clamp': ['display', 'overflow'],\n rounded: ['rounded-s', 'rounded-e', 'rounded-t', 'rounded-r', 'rounded-b', 'rounded-l', 'rounded-ss', 'rounded-se', 'rounded-ee', 'rounded-es', 'rounded-tl', 'rounded-tr', 'rounded-br', 'rounded-bl'],\n 'rounded-s': ['rounded-ss', 'rounded-es'],\n 'rounded-e': ['rounded-se', 'rounded-ee'],\n 'rounded-t': ['rounded-tl', 'rounded-tr'],\n 'rounded-r': ['rounded-tr', 'rounded-br'],\n 'rounded-b': ['rounded-br', 'rounded-bl'],\n 'rounded-l': ['rounded-tl', 'rounded-bl'],\n 'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n 'border-w': ['border-w-x', 'border-w-y', 'border-w-s', 'border-w-e', 'border-w-bs', 'border-w-be', 'border-w-t', 'border-w-r', 'border-w-b', 'border-w-l'],\n 'border-w-x': ['border-w-r', 'border-w-l'],\n 'border-w-y': ['border-w-t', 'border-w-b'],\n 'border-color': ['border-color-x', 'border-color-y', 'border-color-s', 'border-color-e', 'border-color-bs', 'border-color-be', 'border-color-t', 'border-color-r', 'border-color-b', 'border-color-l'],\n 'border-color-x': ['border-color-r', 'border-color-l'],\n 'border-color-y': ['border-color-t', 'border-color-b'],\n translate: ['translate-x', 'translate-y', 'translate-none'],\n 'translate-none': ['translate', 'translate-x', 'translate-y', 'translate-z'],\n 'scroll-m': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-mbs', 'scroll-mbe', 'scroll-mt', 'scroll-mr', 'scroll-mb', 'scroll-ml'],\n 'scroll-mx': ['scroll-mr', 'scroll-ml'],\n 'scroll-my': ['scroll-mt', 'scroll-mb'],\n 'scroll-p': ['scroll-px', 'scroll-py', 'scroll-ps', 'scroll-pe', 'scroll-pbs', 'scroll-pbe', 'scroll-pt', 'scroll-pr', 'scroll-pb', 'scroll-pl'],\n 'scroll-px': ['scroll-pr', 'scroll-pl'],\n 'scroll-py': ['scroll-pt', 'scroll-pb'],\n touch: ['touch-x', 'touch-y', 'touch-pz'],\n 'touch-x': ['touch'],\n 'touch-y': ['touch'],\n 'touch-pz': ['touch']\n },\n conflictingClassGroupModifiers: {\n 'font-size': ['leading']\n },\n orderSensitiveModifiers: ['*', '**', 'after', 'backdrop', 'before', 'details-content', 'file', 'first-letter', 'first-line', 'marker', 'placeholder', 'selection']\n };\n};\n\n/**\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\n * @param configExtension Partial config to merge into the `baseConfig`.\n */\nconst mergeConfigs = (baseConfig, {\n cacheSize,\n prefix,\n experimentalParseClassName,\n extend = {},\n override = {}\n}) => {\n overrideProperty(baseConfig, 'cacheSize', cacheSize);\n overrideProperty(baseConfig, 'prefix', prefix);\n overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName);\n overrideConfigProperties(baseConfig.theme, override.theme);\n overrideConfigProperties(baseConfig.classGroups, override.classGroups);\n overrideConfigProperties(baseConfig.conflictingClassGroups, override.conflictingClassGroups);\n overrideConfigProperties(baseConfig.conflictingClassGroupModifiers, override.conflictingClassGroupModifiers);\n overrideProperty(baseConfig, 'orderSensitiveModifiers', override.orderSensitiveModifiers);\n mergeConfigProperties(baseConfig.theme, extend.theme);\n mergeConfigProperties(baseConfig.classGroups, extend.classGroups);\n mergeConfigProperties(baseConfig.conflictingClassGroups, extend.conflictingClassGroups);\n mergeConfigProperties(baseConfig.conflictingClassGroupModifiers, extend.conflictingClassGroupModifiers);\n mergeArrayProperties(baseConfig, extend, 'orderSensitiveModifiers');\n return baseConfig;\n};\nconst overrideProperty = (baseObject, overrideKey, overrideValue) => {\n if (overrideValue !== undefined) {\n baseObject[overrideKey] = overrideValue;\n }\n};\nconst overrideConfigProperties = (baseObject, overrideObject) => {\n if (overrideObject) {\n for (const key in overrideObject) {\n overrideProperty(baseObject, key, overrideObject[key]);\n }\n }\n};\nconst mergeConfigProperties = (baseObject, mergeObject) => {\n if (mergeObject) {\n for (const key in mergeObject) {\n mergeArrayProperties(baseObject, mergeObject, key);\n }\n }\n};\nconst mergeArrayProperties = (baseObject, mergeObject, key) => {\n const mergeValue = mergeObject[key];\n if (mergeValue !== undefined) {\n baseObject[key] = baseObject[key] ? baseObject[key].concat(mergeValue) : mergeValue;\n }\n};\nconst extendTailwindMerge = (configExtension, ...createConfig) => typeof configExtension === 'function' ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig) : createTailwindMerge(() => mergeConfigs(getDefaultConfig(), configExtension), ...createConfig);\nconst twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);\nexport { createTailwindMerge, extendTailwindMerge, fromTheme, getDefaultConfig, mergeConfigs, twJoin, twMerge, validators };\n//# sourceMappingURL=bundle-mjs.mjs.map\n","import { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '../../lib/utils';\n\nconst buttonVariants = cva(\n 'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0',\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground hover:bg-primary/90',\n destructive:\n 'bg-destructive text-destructive-foreground hover:bg-destructive/90',\n outline:\n 'border border-input bg-background hover:bg-accent hover:text-accent-foreground',\n secondary:\n 'bg-secondary text-secondary-foreground hover:bg-secondary/80',\n ghost: 'hover:bg-accent hover:text-accent-foreground',\n link: 'text-primary underline-offset-4 hover:underline',\n },\n size: {\n default: 'h-10 px-4 py-2',\n sm: 'h-9 rounded-md px-3',\n lg: 'h-11 rounded-md px-8',\n icon: 'h-10 w-10',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n);\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, ...props }, ref) => {\n return (\n <button\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n );\n }\n);\nButton.displayName = 'Button';\n\nexport { Button, buttonVariants };\n","import * as React from 'react';\n\nimport { cn } from '../../lib/utils';\n\nconst Card = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'rounded-lg border border-border bg-card text-card-foreground shadow-sm',\n className\n )}\n {...props}\n />\n));\nCard.displayName = 'Card';\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('flex flex-col space-y-1.5 p-6', className)}\n {...props}\n />\n));\nCardHeader.displayName = 'CardHeader';\n\nconst CardTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h3\n ref={ref}\n className={cn(\n 'text-2xl font-semibold leading-none tracking-tight',\n className\n )}\n {...props}\n />\n));\nCardTitle.displayName = 'CardTitle';\n\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn('text-sm text-muted-foreground', className)}\n {...props}\n />\n));\nCardDescription.displayName = 'CardDescription';\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn('p-6 pt-0', className)} {...props} />\n));\nCardContent.displayName = 'CardContent';\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('flex items-center p-6 pt-0', className)}\n {...props}\n />\n));\nCardFooter.displayName = 'CardFooter';\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent };\n","import * as React from 'react';\n\nimport { cn } from '../../lib/utils';\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n 'flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n ref={ref}\n {...props}\n />\n );\n }\n);\nInput.displayName = 'Input';\n\nexport { Input };\n","import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '../../lib/utils';\n\nconst labelVariants = cva(\n 'text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70'\n);\n\nexport interface LabelProps\n extends React.LabelHTMLAttributes<HTMLLabelElement>,\n VariantProps<typeof labelVariants> {}\n\nconst Label = React.forwardRef<HTMLLabelElement, LabelProps>(\n ({ className, ...props }, ref) => (\n <label ref={ref} className={cn(labelVariants(), className)} {...props} />\n )\n);\nLabel.displayName = 'Label';\n\nexport { Label };\n","import * as React from 'react';\nimport * as SeparatorPrimitive from '@radix-ui/react-separator';\n\nimport { cn } from '../../lib/utils';\n\nconst Separator = React.forwardRef<\n React.ElementRef<typeof SeparatorPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(\n (\n { className, orientation = 'horizontal', decorative = true, ...props },\n ref\n ) => (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n 'shrink-0 bg-border',\n orientation === 'horizontal' ? 'h-[1px] w-full' : 'h-full w-[1px]',\n className\n )}\n {...props}\n />\n )\n);\nSeparator.displayName = SeparatorPrimitive.Root.displayName;\n\nexport { Separator };\n","import * as React from 'react';\n\nimport { cn } from '../../lib/utils';\n\nexport interface TextareaProps\n extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {}\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n 'flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n ref={ref}\n {...props}\n />\n );\n }\n);\nTextarea.displayName = 'Textarea';\n\nexport { Textarea };\n","import { useState } from 'react';\nimport type { AuditLogQuerySpec } from '../types';\nimport { FILTER_FIELDS } from '../types';\nimport { Button } from './ui/button';\nimport { Card, CardContent, CardHeader } from './ui/card';\nimport { Input } from './ui/input';\nimport { Label } from './ui/label';\nimport { Separator } from './ui/separator';\nimport { Textarea } from './ui/textarea';\n\nexport interface FilterBuilderProps {\n onFilterChange: (spec: AuditLogQuerySpec) => void;\n initialFilter?: string;\n initialLimit?: number;\n className?: string;\n}\n\n/**\n * FilterBuilder component for constructing CEL filter expressions\n */\nexport function FilterBuilder({\n onFilterChange,\n initialFilter = '',\n initialLimit = 100,\n className = '',\n}: FilterBuilderProps) {\n const [filter, setFilter] = useState(initialFilter);\n const [limit, setLimit] = useState(initialLimit);\n const [showHelp, setShowHelp] = useState(false);\n\n const handleFilterChange = (newFilter: string) => {\n setFilter(newFilter);\n onFilterChange({ filter: newFilter, limit });\n };\n\n const handleLimitChange = (newLimit: number) => {\n const validLimit = Math.min(Math.max(1, newLimit), 1000);\n setLimit(validLimit);\n onFilterChange({ filter, limit: validLimit });\n };\n\n const insertExample = (example: string) => {\n const newFilter = filter ? `${filter} && ${example}` : example;\n handleFilterChange(newFilter);\n };\n\n return (\n <Card className={`mb-6 ${className}`}>\n <CardHeader className=\"pb-4\">\n <div className=\"flex justify-between items-center\">\n <h3 className=\"m-0 text-2xl font-semibold text-foreground\">Build Your Query</h3>\n <Button\n onClick={() => setShowHelp(!showHelp)}\n variant=\"outline\"\n type=\"button\"\n >\n {showHelp ? 'Hide' : 'Show'} Help\n </Button>\n </div>\n </CardHeader>\n\n <Separator />\n\n <CardContent className=\"pt-6\">\n {showHelp && (\n <div className=\"bg-muted p-6 rounded-lg mb-6 max-h-[400px] overflow-y-auto border border-border\">\n <h4 className=\"text-base font-semibold text-foreground\">Available Filter Fields</h4>\n <div className=\"mt-4\">\n {FILTER_FIELDS.map((field) => (\n <div key={field.name} className=\"mb-6 pb-4 border-b border-border last:border-b-0\">\n <div className=\"flex justify-between items-center mb-2\">\n <strong className=\"text-foreground\">{field.name}</strong>\n <span className=\"text-sm text-muted-foreground italic\">{field.type}</span>\n </div>\n <p className=\"my-2 text-muted-foreground\">{field.description}</p>\n {field.examples && field.examples.length > 0 && (\n <div className=\"mt-2\">\n <strong className=\"text-foreground\">Examples:</strong>\n {field.examples.map((example, idx) => (\n <div key={idx} className=\"flex items-center gap-2 my-2\">\n <code className=\"flex-1 px-2 py-1 bg-background rounded text-sm font-mono\">\n {example}\n </code>\n <Button\n onClick={() => insertExample(example)}\n variant=\"default\"\n size=\"sm\"\n className=\"bg-green-600 hover:bg-green-700 dark:bg-green-700 dark:hover:bg-green-600\"\n type=\"button\"\n >\n Insert\n </Button>\n </div>\n ))}\n </div>\n )}\n </div>\n ))}\n </div>\n\n <div className=\"mt-4\">\n <h4 className=\"mb-2 text-base font-semibold text-foreground\">Common Operators</h4>\n <ul className=\"m-0 pl-6 text-muted-foreground\">\n <li className=\"my-1\"><code className=\"px-1 py-0.5 bg-background rounded text-sm font-mono\">==</code> - Equals</li>\n <li className=\"my-1\"><code className=\"px-1 py-0.5 bg-background rounded text-sm font-mono\">!=</code> - Not equals</li>\n <li className=\"my-1\"><code className=\"px-1 py-0.5 bg-background rounded text-sm font-mono\">&&</code> - And</li>\n <li className=\"my-1\"><code className=\"px-1 py-0.5 bg-background rounded text-sm font-mono\">||</code> - Or</li>\n <li className=\"my-1\"><code className=\"px-1 py-0.5 bg-background rounded text-sm font-mono\">in</code> - In list (e.g., <code className=\"px-1 py-0.5 bg-background rounded text-sm font-mono\">verb in [\"create\", \"delete\"]</code>)</li>\n <li className=\"my-1\"><code className=\"px-1 py-0.5 bg-background rounded text-sm font-mono\">.startsWith()</code> - String starts with</li>\n <li className=\"my-1\"><code className=\"px-1 py-0.5 bg-background rounded text-sm font-mono\">.contains()</code> - String contains</li>\n <li className=\"my-1\"><code className=\"px-1 py-0.5 bg-background rounded text-sm font-mono\">timestamp()</code> - Parse timestamp (e.g., <code className=\"px-1 py-0.5 bg-background rounded text-sm font-mono\">timestamp(\"2024-01-01T00:00:00Z\")</code>)</li>\n </ul>\n </div>\n </div>\n )}\n\n <div className=\"mb-4\">\n <Label htmlFor=\"filter-input\" className=\"block mb-2\">\n CEL Filter Expression\n </Label>\n <Textarea\n id=\"filter-input\"\n value={filter}\n onChange={(e) => handleFilterChange(e.target.value)}\n placeholder='e.g., verb == \"delete\" && ns == \"production\"'\n rows={4}\n className=\"font-mono text-sm resize-y\"\n />\n </div>\n\n <div className=\"mb-4\">\n <Label htmlFor=\"limit-input\" className=\"block mb-2\">\n Result Limit (max 1,000)\n </Label>\n <Input\n id=\"limit-input\"\n type=\"number\"\n value={limit}\n onChange={(e) => handleLimitChange(parseInt(e.target.value) || 100)}\n min={1}\n max={1000}\n className=\"w-44\"\n />\n </div>\n\n <Separator className=\"my-6\" />\n\n <div>\n <h4 className=\"mb-3 text-base font-semibold text-foreground\">Quick Filters</h4>\n <div className=\"flex flex-wrap gap-2\">\n <Button\n onClick={() => insertExample('verb == \"delete\"')}\n type=\"button\"\n variant=\"outline\"\n >\n Delete Operations\n </Button>\n <Button\n onClick={() => insertExample('resource == \"secrets\"')}\n type=\"button\"\n variant=\"outline\"\n >\n Secret Access\n </Button>\n <Button\n onClick={() => insertExample('user.startsWith(\"system:\")')}\n type=\"button\"\n variant=\"outline\"\n >\n System Users\n </Button>\n <Button\n onClick={() => insertExample('stage == \"ResponseComplete\"')}\n type=\"button\"\n variant=\"outline\"\n >\n Completed Requests\n </Button>\n </div>\n </div>\n </CardContent>\n </Card>\n );\n}\n","import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '../../lib/utils';\n\nconst badgeVariants = cva(\n 'inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',\n {\n variants: {\n variant: {\n default:\n 'border-transparent bg-primary text-primary-foreground hover:bg-primary/80',\n secondary:\n 'border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80',\n destructive:\n 'border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80',\n outline: 'text-foreground',\n success:\n 'border-transparent bg-green-100 text-green-800 dark:bg-green-900/50 dark:text-green-300',\n warning:\n 'border-transparent bg-amber-100 text-amber-800 dark:bg-amber-900/50 dark:text-amber-300',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n);\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> {}\n\nfunction Badge({ className, variant, ...props }: BadgeProps) {\n return (\n <div className={cn(badgeVariants({ variant }), className)} {...props} />\n );\n}\n\nexport { Badge, badgeVariants };\n","import { useState, useRef, useEffect } from 'react';\nimport type { AuditLogQuerySpec } from '../types';\nimport { FILTER_FIELDS } from '../types';\nimport { Input } from './ui/input';\nimport { Textarea } from './ui/textarea';\nimport { Button } from './ui/button';\nimport { Label } from './ui/label';\nimport { Card, CardHeader, CardContent } from './ui/card';\nimport { Badge } from './ui/badge';\n\nexport interface FilterBuilderWithAutocompleteProps {\n onFilterChange: (spec: AuditLogQuerySpec) => void;\n initialFilter?: string;\n initialLimit?: number;\n className?: string;\n}\n\ninterface Suggestion {\n text: string;\n description: string;\n type: 'field' | 'operator' | 'value' | 'function';\n}\n\nconst OPERATORS: Suggestion[] = [\n { text: '==', description: 'Equals', type: 'operator' },\n { text: '!=', description: 'Not equals', type: 'operator' },\n { text: '>', description: 'Greater than', type: 'operator' },\n { text: '>=', description: 'Greater than or equal', type: 'operator' },\n { text: '<', description: 'Less than', type: 'operator' },\n { text: '<=', description: 'Less than or equal', type: 'operator' },\n { text: 'in', description: 'In array', type: 'operator' },\n { text: '&&', description: 'Logical AND', type: 'operator' },\n { text: '||', description: 'Logical OR', type: 'operator' },\n];\n\nconst FUNCTIONS: Suggestion[] = [\n { text: '.startsWith(', description: 'String starts with', type: 'function' },\n { text: '.contains(', description: 'String contains', type: 'function' },\n { text: '.endsWith(', description: 'String ends with', type: 'function' },\n { text: '.matches(', description: 'Regex match', type: 'function' },\n { text: 'timestamp(', description: 'Parse timestamp', type: 'function' },\n];\n\nconst COMMON_VALUES: Record<string, Suggestion[]> = {\n verb: [\n { text: '\"get\"', description: 'GET requests', type: 'value' },\n { text: '\"list\"', description: 'LIST requests', type: 'value' },\n { text: '\"create\"', description: 'CREATE requests', type: 'value' },\n { text: '\"update\"', description: 'UPDATE requests', type: 'value' },\n { text: '\"patch\"', description: 'PATCH requests', type: 'value' },\n { text: '\"delete\"', description: 'DELETE requests', type: 'value' },\n { text: '\"watch\"', description: 'WATCH requests', type: 'value' },\n ],\n 'objectRef.resource': [\n { text: '\"pods\"', description: 'Pods', type: 'value' },\n { text: '\"deployments\"', description: 'Deployments', type: 'value' },\n { text: '\"services\"', description: 'Services', type: 'value' },\n { text: '\"secrets\"', description: 'Secrets', type: 'value' },\n { text: '\"configmaps\"', description: 'ConfigMaps', type: 'value' },\n { text: '\"namespaces\"', description: 'Namespaces', type: 'value' },\n { text: '\"replicasets\"', description: 'ReplicaSets', type: 'value' },\n { text: '\"daemonsets\"', description: 'DaemonSets', type: 'value' },\n { text: '\"statefulsets\"', description: 'StatefulSets', type: 'value' },\n ],\n stage: [\n { text: '\"RequestReceived\"', description: 'Request received', type: 'value' },\n { text: '\"ResponseStarted\"', description: 'Response started', type: 'value' },\n { text: '\"ResponseComplete\"', description: 'Response complete', type: 'value' },\n { text: '\"Panic\"', description: 'Panic occurred', type: 'value' },\n ],\n level: [\n { text: '\"Metadata\"', description: 'Metadata level', type: 'value' },\n { text: '\"Request\"', description: 'Request level', type: 'value' },\n { text: '\"RequestResponse\"', description: 'Request and Response', type: 'value' },\n ],\n};\n\n/**\n * Enhanced FilterBuilder with autocomplete suggestions for CEL expressions\n */\nexport function FilterBuilderWithAutocomplete({\n onFilterChange,\n initialFilter = '',\n initialLimit = 100,\n className = '',\n}: FilterBuilderWithAutocompleteProps) {\n const [filter, setFilter] = useState(initialFilter);\n const [limit, setLimit] = useState(initialLimit);\n const [showHelp, setShowHelp] = useState(false);\n const [showShortcuts, setShowShortcuts] = useState(false);\n const [suggestions, setSuggestions] = useState<Suggestion[]>([]);\n const [showSuggestions, setShowSuggestions] = useState(false);\n const [selectedSuggestion, setSelectedSuggestion] = useState(0);\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n\n const handleFilterChange = (newFilter: string) => {\n setFilter(newFilter);\n onFilterChange({ filter: newFilter, limit });\n updateSuggestions(newFilter);\n };\n\n const handleLimitChange = (newLimit: number) => {\n const validLimit = Math.min(Math.max(1, newLimit), 1000);\n setLimit(validLimit);\n onFilterChange({ filter, limit: validLimit });\n };\n\n const updateSuggestions = (text: string) => {\n const cursorPos = textareaRef.current?.selectionStart || text.length;\n const textBeforeCursor = text.substring(0, cursorPos);\n const lastWord = textBeforeCursor.split(/[\\s()[\\]]/g).pop() || '';\n\n let newSuggestions: Suggestion[] = [];\n\n // Check if we just finished a complete expression (e.g., verb == \"get\")\n // Suggest logical operators to continue\n const completedValuePattern = /[\"'][^\"']*[\"']\\s*$/;\n const completedNumberPattern = /\\d+\\s*$/;\n const afterLogicalOp = /(\\&\\&|\\|\\|)\\s*$/;\n\n if ((completedValuePattern.test(textBeforeCursor) || completedNumberPattern.test(textBeforeCursor)) && !afterLogicalOp.test(textBeforeCursor)) {\n // After a complete value, suggest logical operators\n newSuggestions.push(\n { text: ' && ', description: 'Logical AND - add another condition', type: 'operator' },\n { text: ' || ', description: 'Logical OR - add alternative condition', type: 'operator' }\n );\n }\n\n // After && or || suggest fields\n if (afterLogicalOp.test(textBeforeCursor)) {\n const fieldSuggestions = FILTER_FIELDS.map(f => ({\n text: f.name,\n description: f.description,\n type: 'field' as const,\n }));\n newSuggestions.push(...fieldSuggestions);\n }\n\n // Field name suggestions when typing\n if (lastWord && !lastWord.includes('==') && !lastWord.includes('!=') && !lastWord.includes('&&') && !lastWord.includes('||')) {\n const fieldSuggestions = FILTER_FIELDS\n .filter(f => f.name.toLowerCase().startsWith(lastWord.toLowerCase()))\n .map(f => ({\n text: f.name,\n description: f.description,\n type: 'field' as const,\n }));\n if (fieldSuggestions.length > 0) {\n newSuggestions = fieldSuggestions; // Replace suggestions with field matches\n }\n }\n\n // Operator suggestions after field name\n const lastToken = textBeforeCursor.trim().split(/\\s+/).pop() || '';\n if (FILTER_FIELDS.some(f => lastToken === f.name)) {\n newSuggestions.push(...OPERATORS.filter(op => !['&&', '||'].includes(op.text)));\n }\n\n // Function suggestions when typing dot\n if (lastWord.startsWith('.') || textBeforeCursor.endsWith('.')) {\n newSuggestions.push(...FUNCTIONS);\n }\n\n // Value suggestions based on field\n for (const [fieldName, values] of Object.entries(COMMON_VALUES)) {\n const pattern = new RegExp(`${fieldName}\\\\s*[!=<>]+\\\\s*$`);\n if (pattern.test(textBeforeCursor)) {\n newSuggestions.push(...values);\n }\n }\n\n setSuggestions(newSuggestions);\n setShowSuggestions(newSuggestions.length > 0);\n setSelectedSuggestion(0);\n };\n\n const insertSuggestion = (suggestion: Suggestion) => {\n const textarea = textareaRef.current;\n if (!textarea) return;\n\n const cursorPos = textarea.selectionStart;\n const textBefore = filter.substring(0, cursorPos);\n const textAfter = filter.substring(cursorPos);\n\n // Find the last word to replace\n const lastSpaceIndex = Math.max(\n textBefore.lastIndexOf(' '),\n textBefore.lastIndexOf('('),\n textBefore.lastIndexOf('['),\n textBefore.lastIndexOf('.'),\n 0\n );\n\n const beforeWord = textBefore.substring(0, lastSpaceIndex === 0 ? 0 : lastSpaceIndex + 1);\n const newText = beforeWord + suggestion.text + textAfter;\n\n setFilter(newText);\n onFilterChange({ filter: newText, limit });\n setShowSuggestions(false);\n\n // Set cursor position after inserted text\n setTimeout(() => {\n const newPos = beforeWord.length + suggestion.text.length;\n textarea.setSelectionRange(newPos, newPos);\n textarea.focus();\n }, 0);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n // Ctrl+Space to manually trigger autocomplete\n if (e.key === ' ' && e.ctrlKey) {\n e.preventDefault();\n updateSuggestions(filter);\n return;\n }\n\n if (!showSuggestions) return;\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n setSelectedSuggestion(prev =>\n prev < suggestions.length - 1 ? prev + 1 : prev\n );\n break;\n case 'ArrowUp':\n e.preventDefault();\n setSelectedSuggestion(prev => prev > 0 ? prev - 1 : prev);\n break;\n case 'Enter':\n case 'Tab':\n if (suggestions.length > 0) {\n e.preventDefault();\n insertSuggestion(suggestions[selectedSuggestion]);\n }\n break;\n case 'Escape':\n setShowSuggestions(false);\n break;\n }\n };\n\n const insertExample = (example: string) => {\n const newFilter = filter ? `${filter} && ${example}` : example;\n handleFilterChange(newFilter);\n };\n\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (textareaRef.current && !textareaRef.current.contains(e.target as Node)) {\n setShowSuggestions(false);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n const getBadgeVariant = (type: string): 'default' | 'secondary' | 'success' | 'warning' | 'outline' => {\n switch (type) {\n case 'field':\n return 'default';\n case 'operator':\n return 'secondary';\n case 'value':\n return 'success';\n case 'function':\n return 'warning';\n default:\n return 'outline';\n }\n };\n\n return (\n <Card className={`p-8 rounded-xl mb-6 ${className}`}>\n <CardHeader className=\"flex flex-row justify-between items-center p-0 mb-6 pb-4 border-b border-border\">\n <h3 className=\"m-0 text-2xl font-semibold text-foreground\">Search Audit Logs</h3>\n <div className=\"flex gap-2\">\n <Button\n onClick={() => setShowShortcuts(!showShortcuts)}\n variant=\"outline\"\n size=\"sm\"\n type=\"button\"\n title=\"View keyboard shortcuts\"\n >\n Shortcuts\n </Button>\n <Button\n onClick={() => setShowHelp(!showHelp)}\n variant=\"outline\"\n size=\"sm\"\n type=\"button\"\n title=\"View available filter fields and examples\"\n >\n Field Guide\n </Button>\n </div>\n </CardHeader>\n\n <CardContent className=\"p-0\">\n {showShortcuts && (\n <div className=\"bg-blue-50 border border-blue-500 dark:bg-blue-950/50 dark:border-blue-700 p-6 rounded-lg mb-6 max-h-96 overflow-y-auto\">\n <h4 className=\"mt-0 mb-4 text-lg font-semibold text-foreground\">Keyboard Shortcuts</h4>\n <div className=\"grid grid-cols-[auto_1fr] gap-x-6 gap-y-3 items-start\">\n <kbd className=\"px-2 py-1 bg-background border border-input rounded font-mono text-sm\">Ctrl+Space</kbd>\n <span>Trigger autocomplete suggestions at cursor position</span>\n\n <kbd className=\"px-2 py-1 bg-background border border-input rounded font-mono text-sm\">↑ / ↓</kbd>\n <span>Navigate through autocomplete suggestions</span>\n\n <kbd className=\"px-2 py-1 bg-background border border-input rounded font-mono text-sm\">Tab</kbd>\n <span>Accept the selected suggestion</span>\n\n <kbd className=\"px-2 py-1 bg-background border border-input rounded font-mono text-sm\">Enter</kbd>\n <span>Accept the selected suggestion</span>\n\n <kbd className=\"px-2 py-1 bg-background border border-input rounded font-mono text-sm\">Esc</kbd>\n <span>Close autocomplete suggestions</span>\n </div>\n\n <div className=\"mt-4 p-3 bg-background rounded text-sm\">\n <strong>Pro Tips:</strong>\n <ul className=\"mt-2 mb-0 pl-6\">\n <li>Autocomplete appears automatically as you type</li>\n <li>After completing a value (e.g., <code className=\"px-1 py-0.5 bg-muted rounded text-sm\">\"get\"</code>), suggestions show logical operators (<code className=\"px-1 py-0.5 bg-muted rounded text-sm\">&&</code>, <code className=\"px-1 py-0.5 bg-muted rounded text-sm\">||</code>)</li>\n <li>After typing <code className=\"px-1 py-0.5 bg-muted rounded text-sm\">&&</code> or <code className=\"px-1 py-0.5 bg-muted rounded text-sm\">||</code>, all field names are suggested</li>\n <li>Type <code className=\"px-1 py-0.5 bg-muted rounded text-sm\">.</code> after a field name to see available string functions</li>\n </ul>\n </div>\n </div>\n )}\n\n {showHelp && (\n <div className=\"bg-muted p-6 rounded-lg mb-6 max-h-96 overflow-y-auto\">\n <h4 className=\"mt-0 mb-4 text-lg font-semibold text-foreground\">Available Fields & Examples</h4>\n <p className=\"mb-4 text-muted-foreground text-sm\">\n Click \"Insert\" to add an example to your query\n </p>\n <div className=\"mt-4\">\n {FILTER_FIELDS.map((field) => (\n <div key={field.name} className=\"mb-6 pb-4 border-b border-border last:border-b-0\">\n <div className=\"flex justify-between items-center mb-2\">\n <strong className=\"text-foreground\">{field.name}</strong>\n <span className=\"text-sm text-muted-foreground italic\">{field.type}</span>\n </div>\n <p className=\"my-2 text-muted-foreground\">{field.description}</p>\n {field.examples && field.examples.length > 0 && (\n <div className=\"mt-2\">\n <strong className=\"text-sm text-foreground\">Examples:</strong>\n {field.examples.map((example, idx) => (\n <div key={idx} className=\"flex items-center gap-2 my-2\">\n <code className=\"flex-1 px-2 py-1 bg-background rounded text-sm font-mono\">{example}</code>\n <Button\n onClick={() => insertExample(example)}\n variant=\"default\"\n size=\"sm\"\n type=\"button\"\n className=\"bg-green-600 hover:bg-green-700 dark:bg-green-700 dark:hover:bg-green-600\"\n >\n Insert\n </Button>\n </div>\n ))}\n </div>\n )}\n </div>\n ))}\n </div>\n </div>\n )}\n\n <div className=\"relative mb-4\">\n <Label htmlFor=\"filter-input\" className=\"block mb-2\">\n <strong className=\"text-foreground\">Filter Expression</strong>\n <span className=\"ml-2 text-sm text-muted-foreground font-normal\">\n Press Ctrl+Space for suggestions\n </span>\n </Label>\n <p className=\"m-0 mb-3 text-sm text-muted-foreground\">\n Use autocomplete to build your query, or type field names directly (e.g., verb, objectRef.resource)\n </p>\n <Textarea\n ref={textareaRef}\n id=\"filter-input\"\n value={filter}\n onChange={(e) => handleFilterChange(e.target.value)}\n onKeyDown={handleKeyDown}\n onFocus={() => updateSuggestions(filter)}\n placeholder='Example: verb == \"delete\" && objectRef.namespace == \"production\"'\n rows={4}\n className=\"font-mono text-sm bg-muted resize-y focus:bg-background\"\n />\n\n {showSuggestions && suggestions.length > 0 && (\n <div className=\"absolute top-full left-0 right-0 max-h-72 overflow-y-auto bg-background border border-input border-t-0 rounded-b shadow-md z-50 -mt-1\">\n {suggestions.map((suggestion, idx) => (\n <div\n key={idx}\n className={`px-4 py-3 cursor-pointer flex items-center gap-3 border-b border-border transition-colors ${\n idx === selectedSuggestion ? 'bg-pink-100' : 'hover:bg-muted'\n }`}\n onClick={() => insertSuggestion(suggestion)}\n onMouseEnter={() => setSelectedSuggestion(idx)}\n >\n <span className=\"font-mono font-semibold text-foreground min-w-[120px]\">{suggestion.text}</span>\n <span className=\"flex-1 text-muted-foreground text-sm\">{suggestion.description}</span>\n <Badge variant={getBadgeVariant(suggestion.type)} className=\"uppercase\">\n {suggestion.type}\n </Badge>\n </div>\n ))}\n </div>\n )}\n </div>\n\n <div className=\"mb-4\">\n <Label htmlFor=\"limit-input\" className=\"block mb-2\">\n <strong className=\"text-foreground\">Number of results</strong>\n <span className=\"ml-2 text-sm text-muted-foreground font-normal\">\n (1 to 1,000 events)\n </span>\n </Label>\n <Input\n id=\"limit-input\"\n type=\"number\"\n value={limit}\n onChange={(e) => handleLimitChange(parseInt(e.target.value) || 100)}\n min={1}\n max={1000}\n className=\"w-44 bg-muted focus:bg-background\"\n />\n </div>\n </CardContent>\n </Card>\n );\n}\n","import { useState, useEffect, useCallback, useRef } from 'react';\nimport type { ActivityApiClient } from '../api/client';\nimport type { FacetValue } from '../types/activity';\n\n/**\n * Time range for facet queries\n */\nexport interface AuditLogTimeRange {\n start: string;\n end: string;\n}\n\n/**\n * Result returned by the useAuditLogFacets hook\n */\nexport interface UseAuditLogFacetsResult {\n /** Distinct verbs (actions) with counts */\n verbs: FacetValue[];\n /** Distinct resource types with counts */\n resources: FacetValue[];\n /** Distinct namespaces with counts */\n namespaces: FacetValue[];\n /** Distinct usernames with counts */\n usernames: FacetValue[];\n /** Whether facets are loading */\n isLoading: boolean;\n /** Error if any occurred */\n error: Error | null;\n /** Manually refresh facets */\n refresh: () => Promise<void>;\n}\n\n/**\n * Hook to fetch audit log facets for filter dropdowns\n */\nexport function useAuditLogFacets(\n client: ActivityApiClient,\n timeRange: AuditLogTimeRange | null\n): UseAuditLogFacetsResult {\n const [verbs, setVerbs] = useState<FacetValue[]>([]);\n const [resources, setResources] = useState<FacetValue[]>([]);\n const [namespaces, setNamespaces] = useState<FacetValue[]>([]);\n const [usernames, setUsernames] = useState<FacetValue[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n // Track the last fetched time range to avoid redundant fetches\n const lastFetchedRef = useRef<string | null>(null);\n\n const fetchFacets = useCallback(async () => {\n if (!timeRange) return;\n\n // Create a cache key from the time range\n const cacheKey = `${timeRange.start}-${timeRange.end}`;\n\n // Skip if we already fetched for this time range\n if (lastFetchedRef.current === cacheKey && verbs.length > 0) {\n return;\n }\n\n setIsLoading(true);\n setError(null);\n\n try {\n const result = await client.queryAuditLogFacets({\n timeRange: {\n start: timeRange.start,\n end: timeRange.end,\n },\n facets: [\n { field: 'verb', limit: 20 },\n { field: 'objectRef.resource', limit: 50 },\n { field: 'objectRef.namespace', limit: 50 },\n { field: 'user.username', limit: 50 },\n ],\n });\n\n const facets = result.status?.facets || [];\n\n // Extract verbs\n const verbFacet = facets.find((f) => f.field === 'verb');\n setVerbs(verbFacet?.values || []);\n\n // Extract resources\n const resourceFacet = facets.find((f) => f.field === 'objectRef.resource');\n setResources(resourceFacet?.values || []);\n\n // Extract namespaces\n const namespaceFacet = facets.find((f) => f.field === 'objectRef.namespace');\n setNamespaces(namespaceFacet?.values || []);\n\n // Extract usernames\n const usernameFacet = facets.find((f) => f.field === 'user.username');\n setUsernames(usernameFacet?.values || []);\n\n lastFetchedRef.current = cacheKey;\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)));\n } finally {\n setIsLoading(false);\n }\n }, [client, timeRange, verbs.length]);\n\n // Fetch on mount and when time range changes\n useEffect(() => {\n fetchFacets();\n }, [fetchFacets]);\n\n // Force refresh function that bypasses cache\n const refresh = useCallback(async () => {\n lastFetchedRef.current = null;\n await fetchFacets();\n }, [fetchFacets]);\n\n return {\n verbs,\n resources,\n namespaces,\n usernames,\n isLoading,\n error,\n refresh,\n };\n}\n","/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param argument - The value to convert\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport function toDate(argument) {\n const argStr = Object.prototype.toString.call(argument);\n\n // Clone the date\n if (\n argument instanceof Date ||\n (typeof argument === \"object\" && argStr === \"[object Date]\")\n ) {\n // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n return new argument.constructor(+argument);\n } else if (\n typeof argument === \"number\" ||\n argStr === \"[object Number]\" ||\n typeof argument === \"string\" ||\n argStr === \"[object String]\"\n ) {\n // TODO: Can we get rid of as?\n return new Date(argument);\n } else {\n // TODO: Can we get rid of as?\n return new Date(NaN);\n }\n}\n\n// Fallback for modularized imports:\nexport default toDate;\n","/**\n * @name constructFrom\n * @category Generic Helpers\n * @summary Constructs a date using the reference date and the value\n *\n * @description\n * The function constructs a new date using the constructor from the reference\n * date and the given value. It helps to build generic functions that accept\n * date extensions.\n *\n * It defaults to `Date` if the passed reference date is a number or a string.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The reference date to take constructor from\n * @param value - The value to create the date\n *\n * @returns Date initialized using the given date and value\n *\n * @example\n * import { constructFrom } from 'date-fns'\n *\n * // A function that clones a date preserving the original type\n * function cloneDate<DateType extends Date(date: DateType): DateType {\n * return constructFrom(\n * date, // Use contrustor from the given date\n * date.getTime() // Use the date value to create a new date\n * )\n * }\n */\nexport function constructFrom(date, value) {\n if (date instanceof Date) {\n return new date.constructor(value);\n } else {\n return new Date(value);\n }\n}\n\n// Fallback for modularized imports:\nexport default constructFrom;\n","import { toDate } from \"./toDate.mjs\";\nimport { constructFrom } from \"./constructFrom.mjs\";\n\n/**\n * @name addDays\n * @category Day Helpers\n * @summary Add the specified number of days to the given date.\n *\n * @description\n * Add the specified number of days to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param amount - The amount of days to be added.\n *\n * @returns The new date with the days added\n *\n * @example\n * // Add 10 days to 1 September 2014:\n * const result = addDays(new Date(2014, 8, 1), 10)\n * //=> Thu Sep 11 2014 00:00:00\n */\nexport function addDays(date, amount) {\n const _date = toDate(date);\n if (isNaN(amount)) return constructFrom(date, NaN);\n if (!amount) {\n // If 0 days, no-op to avoid changing times in the hour before end of DST\n return _date;\n }\n _date.setDate(_date.getDate() + amount);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default addDays;\n","import { toDate } from \"./toDate.mjs\";\nimport { constructFrom } from \"./constructFrom.mjs\";\n\n/**\n * @name addMilliseconds\n * @category Millisecond Helpers\n * @summary Add the specified number of milliseconds to the given date.\n *\n * @description\n * Add the specified number of milliseconds to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param amount - The amount of milliseconds to be added.\n *\n * @returns The new date with the milliseconds added\n *\n * @example\n * // Add 750 milliseconds to 10 July 2014 12:45:30.000:\n * const result = addMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:30.750\n */\nexport function addMilliseconds(date, amount) {\n const timestamp = +toDate(date);\n return constructFrom(date, timestamp + amount);\n}\n\n// Fallback for modularized imports:\nexport default addMilliseconds;\n","/**\n * @module constants\n * @summary Useful constants\n * @description\n * Collection of useful date constants.\n *\n * The constants could be imported from `date-fns/constants`:\n *\n * ```ts\n * import { maxTime, minTime } from \"./constants/date-fns/constants\";\n *\n * function isAllowedTime(time) {\n * return time <= maxTime && time >= minTime;\n * }\n * ```\n */\n\n/**\n * @constant\n * @name daysInWeek\n * @summary Days in 1 week.\n */\nexport const daysInWeek = 7;\n\n/**\n * @constant\n * @name daysInYear\n * @summary Days in 1 year.\n *\n * @description\n * How many days in a year.\n *\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occures every 4 years, except for years that are divisable by 100 and not divisable by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n */\nexport const daysInYear = 365.2425;\n\n/**\n * @constant\n * @name maxTime\n * @summary Maximum allowed time.\n *\n * @example\n * import { maxTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = 8640000000000001 <= maxTime;\n * //=> false\n *\n * new Date(8640000000000001);\n * //=> Invalid Date\n */\nexport const maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n\n/**\n * @constant\n * @name minTime\n * @summary Minimum allowed time.\n *\n * @example\n * import { minTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = -8640000000000001 >= minTime;\n * //=> false\n *\n * new Date(-8640000000000001)\n * //=> Invalid Date\n */\nexport const minTime = -maxTime;\n\n/**\n * @constant\n * @name millisecondsInWeek\n * @summary Milliseconds in 1 week.\n */\nexport const millisecondsInWeek = 604800000;\n\n/**\n * @constant\n * @name millisecondsInDay\n * @summary Milliseconds in 1 day.\n */\nexport const millisecondsInDay = 86400000;\n\n/**\n * @constant\n * @name millisecondsInMinute\n * @summary Milliseconds in 1 minute\n */\nexport const millisecondsInMinute = 60000;\n\n/**\n * @constant\n * @name millisecondsInHour\n * @summary Milliseconds in 1 hour\n */\nexport const millisecondsInHour = 3600000;\n\n/**\n * @constant\n * @name millisecondsInSecond\n * @summary Milliseconds in 1 second\n */\nexport const millisecondsInSecond = 1000;\n\n/**\n * @constant\n * @name minutesInYear\n * @summary Minutes in 1 year.\n */\nexport const minutesInYear = 525600;\n\n/**\n * @constant\n * @name minutesInMonth\n * @summary Minutes in 1 month.\n */\nexport const minutesInMonth = 43200;\n\n/**\n * @constant\n * @name minutesInDay\n * @summary Minutes in 1 day.\n */\nexport const minutesInDay = 1440;\n\n/**\n * @constant\n * @name minutesInHour\n * @summary Minutes in 1 hour.\n */\nexport const minutesInHour = 60;\n\n/**\n * @constant\n * @name monthsInQuarter\n * @summary Months in 1 quarter.\n */\nexport const monthsInQuarter = 3;\n\n/**\n * @constant\n * @name monthsInYear\n * @summary Months in 1 year.\n */\nexport const monthsInYear = 12;\n\n/**\n * @constant\n * @name quartersInYear\n * @summary Quarters in 1 year\n */\nexport const quartersInYear = 4;\n\n/**\n * @constant\n * @name secondsInHour\n * @summary Seconds in 1 hour.\n */\nexport const secondsInHour = 3600;\n\n/**\n * @constant\n * @name secondsInMinute\n * @summary Seconds in 1 minute.\n */\nexport const secondsInMinute = 60;\n\n/**\n * @constant\n * @name secondsInDay\n * @summary Seconds in 1 day.\n */\nexport const secondsInDay = secondsInHour * 24;\n\n/**\n * @constant\n * @name secondsInWeek\n * @summary Seconds in 1 week.\n */\nexport const secondsInWeek = secondsInDay * 7;\n\n/**\n * @constant\n * @name secondsInYear\n * @summary Seconds in 1 year.\n */\nexport const secondsInYear = secondsInDay * daysInYear;\n\n/**\n * @constant\n * @name secondsInMonth\n * @summary Seconds in 1 month\n */\nexport const secondsInMonth = secondsInYear / 12;\n\n/**\n * @constant\n * @name secondsInQuarter\n * @summary Seconds in 1 quarter.\n */\nexport const secondsInQuarter = secondsInMonth * 3;\n","import { addMilliseconds } from \"./addMilliseconds.mjs\";\nimport { millisecondsInHour } from \"./constants.mjs\";\n\n/**\n * @name addHours\n * @category Hour Helpers\n * @summary Add the specified number of hours to the given date.\n *\n * @description\n * Add the specified number of hours to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param amount - The amount of hours to be added.\n *\n * @returns The new date with the hours added\n *\n * @example\n * // Add 2 hours to 10 July 2014 23:00:00:\n * const result = addHours(new Date(2014, 6, 10, 23, 0), 2)\n * //=> Fri Jul 11 2014 01:00:00\n */\nexport function addHours(date, amount) {\n return addMilliseconds(date, amount * millisecondsInHour);\n}\n\n// Fallback for modularized imports:\nexport default addHours;\n","let defaultOptions = {};\n\nexport function getDefaultOptions() {\n return defaultOptions;\n}\n\nexport function setDefaultOptions(newOptions) {\n defaultOptions = newOptions;\n}\n","import { toDate } from \"./toDate.mjs\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.mjs\";\n\n/**\n * The {@link startOfWeek} function options.\n */\n\n/**\n * @name startOfWeek\n * @category Week Helpers\n * @summary Return the start of a week for the given date.\n *\n * @description\n * Return the start of a week for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week\n *\n * @example\n * // The start of a week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfWeek(date, options) {\n const defaultOptions = getDefaultOptions();\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n const _date = toDate(date);\n const day = _date.getDay();\n const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n\n _date.setDate(_date.getDate() - diff);\n _date.setHours(0, 0, 0, 0);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfWeek;\n","import { startOfWeek } from \"./startOfWeek.mjs\";\n\n/**\n * @name startOfISOWeek\n * @category ISO Week Helpers\n * @summary Return the start of an ISO week for the given date.\n *\n * @description\n * Return the start of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n *\n * @returns The start of an ISO week\n *\n * @example\n * // The start of an ISO week for 2 September 2014 11:55:00:\n * const result = startOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfISOWeek(date) {\n return startOfWeek(date, { weekStartsOn: 1 });\n}\n\n// Fallback for modularized imports:\nexport default startOfISOWeek;\n","import { constructFrom } from \"./constructFrom.mjs\";\nimport { startOfISOWeek } from \"./startOfISOWeek.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name getISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the ISO week-numbering year of the given date.\n *\n * @description\n * Get the ISO week-numbering year of the given date,\n * which always starts 3 days before the year's first Thursday.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The given date\n *\n * @returns The ISO week-numbering year\n *\n * @example\n * // Which ISO-week numbering year is 2 January 2005?\n * const result = getISOWeekYear(new Date(2005, 0, 2))\n * //=> 2004\n */\nexport function getISOWeekYear(date) {\n const _date = toDate(date);\n const year = _date.getFullYear();\n\n const fourthOfJanuaryOfNextYear = constructFrom(date, 0);\n fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4);\n fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0);\n const startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear);\n\n const fourthOfJanuaryOfThisYear = constructFrom(date, 0);\n fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4);\n fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0);\n const startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear);\n\n if (_date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (_date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}\n\n// Fallback for modularized imports:\nexport default getISOWeekYear;\n","import { toDate } from \"./toDate.mjs\";\n\n/**\n * @name startOfDay\n * @category Day Helpers\n * @summary Return the start of a day for the given date.\n *\n * @description\n * Return the start of a day for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n *\n * @returns The start of a day\n *\n * @example\n * // The start of a day for 2 September 2014 11:55:00:\n * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 00:00:00\n */\nexport function startOfDay(date) {\n const _date = toDate(date);\n _date.setHours(0, 0, 0, 0);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfDay;\n","import { toDate } from \"../toDate.mjs\";\n\n/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nexport function getTimezoneOffsetInMilliseconds(date) {\n const _date = toDate(date);\n const utcDate = new Date(\n Date.UTC(\n _date.getFullYear(),\n _date.getMonth(),\n _date.getDate(),\n _date.getHours(),\n _date.getMinutes(),\n _date.getSeconds(),\n _date.getMilliseconds(),\n ),\n );\n utcDate.setUTCFullYear(_date.getFullYear());\n return +date - +utcDate;\n}\n","import { millisecondsInDay } from \"./constants.mjs\";\nimport { startOfDay } from \"./startOfDay.mjs\";\nimport { getTimezoneOffsetInMilliseconds } from \"./_lib/getTimezoneOffsetInMilliseconds.mjs\";\n\n/**\n * @name differenceInCalendarDays\n * @category Day Helpers\n * @summary Get the number of calendar days between the given dates.\n *\n * @description\n * Get the number of calendar days between the given dates. This means that the times are removed\n * from the dates and then the difference in days is calculated.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param dateLeft - The later date\n * @param dateRight - The earlier date\n *\n * @returns The number of calendar days\n *\n * @example\n * // How many calendar days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * const result = differenceInCalendarDays(\n * new Date(2012, 6, 2, 0, 0),\n * new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 366\n * // How many calendar days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * const result = differenceInCalendarDays(\n * new Date(2011, 6, 3, 0, 1),\n * new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 1\n */\nexport function differenceInCalendarDays(dateLeft, dateRight) {\n const startOfDayLeft = startOfDay(dateLeft);\n const startOfDayRight = startOfDay(dateRight);\n\n const timestampLeft =\n +startOfDayLeft - getTimezoneOffsetInMilliseconds(startOfDayLeft);\n const timestampRight =\n +startOfDayRight - getTimezoneOffsetInMilliseconds(startOfDayRight);\n\n // Round the number of days to the nearest integer because the number of\n // milliseconds in a day is not constant (e.g. it's different in the week of\n // the daylight saving time clock shift).\n return Math.round((timestampLeft - timestampRight) / millisecondsInDay);\n}\n\n// Fallback for modularized imports:\nexport default differenceInCalendarDays;\n","import { getISOWeekYear } from \"./getISOWeekYear.mjs\";\nimport { startOfISOWeek } from \"./startOfISOWeek.mjs\";\nimport { constructFrom } from \"./constructFrom.mjs\";\n\n/**\n * @name startOfISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Return the start of an ISO week-numbering year for the given date.\n *\n * @description\n * Return the start of an ISO week-numbering year,\n * which always starts 3 days before the year's first Thursday.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n *\n * @returns The start of an ISO week-numbering year\n *\n * @example\n * // The start of an ISO week-numbering year for 2 July 2005:\n * const result = startOfISOWeekYear(new Date(2005, 6, 2))\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport function startOfISOWeekYear(date) {\n const year = getISOWeekYear(date);\n const fourthOfJanuary = constructFrom(date, 0);\n fourthOfJanuary.setFullYear(year, 0, 4);\n fourthOfJanuary.setHours(0, 0, 0, 0);\n return startOfISOWeek(fourthOfJanuary);\n}\n\n// Fallback for modularized imports:\nexport default startOfISOWeekYear;\n","import { addMilliseconds } from \"./addMilliseconds.mjs\";\nimport { millisecondsInMinute } from \"./constants.mjs\";\n\n/**\n * @name addMinutes\n * @category Minute Helpers\n * @summary Add the specified number of minutes to the given date.\n *\n * @description\n * Add the specified number of minutes to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param amount - The amount of minutes to be added.\n *\n * @returns The new date with the minutes added\n *\n * @example\n * // Add 30 minutes to 10 July 2014 12:00:00:\n * const result = addMinutes(new Date(2014, 6, 10, 12, 0), 30)\n * //=> Thu Jul 10 2014 12:30:00\n */\nexport function addMinutes(date, amount) {\n return addMilliseconds(date, amount * millisecondsInMinute);\n}\n\n// Fallback for modularized imports:\nexport default addMinutes;\n","import { toDate } from \"./toDate.mjs\";\n\n/**\n * @name compareAsc\n * @category Common Helpers\n * @summary Compare the two dates and return -1, 0 or 1.\n *\n * @description\n * Compare the two dates and return 1 if the first date is after the second,\n * -1 if the first date is before the second or 0 if dates are equal.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param dateLeft - The first date to compare\n * @param dateRight - The second date to compare\n *\n * @returns The result of the comparison\n *\n * @example\n * // Compare 11 February 1987 and 10 July 1989:\n * const result = compareAsc(new Date(1987, 1, 11), new Date(1989, 6, 10))\n * //=> -1\n *\n * @example\n * // Sort the array of dates:\n * const result = [\n * new Date(1995, 6, 2),\n * new Date(1987, 1, 11),\n * new Date(1989, 6, 10)\n * ].sort(compareAsc)\n * //=> [\n * // Wed Feb 11 1987 00:00:00,\n * // Mon Jul 10 1989 00:00:00,\n * // Sun Jul 02 1995 00:00:00\n * // ]\n */\nexport function compareAsc(dateLeft, dateRight) {\n const _dateLeft = toDate(dateLeft);\n const _dateRight = toDate(dateRight);\n\n const diff = _dateLeft.getTime() - _dateRight.getTime();\n\n if (diff < 0) {\n return -1;\n } else if (diff > 0) {\n return 1;\n // Return 0 if diff is 0; return NaN if diff is NaN\n } else {\n return diff;\n }\n}\n\n// Fallback for modularized imports:\nexport default compareAsc;\n","import { constructFrom } from \"./constructFrom.mjs\";\n\n/**\n * @name constructNow\n * @category Generic Helpers\n * @summary Constructs a new current date using the passed value constructor.\n * @pure false\n *\n * @description\n * The function constructs a new current date using the constructor from\n * the reference date. It helps to build generic functions that accept date\n * extensions and use the current date.\n *\n * It defaults to `Date` if the passed reference date is a number or a string.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The reference date to take constructor from\n *\n * @returns Current date initialized using the given date constructor\n *\n * @example\n * import { constructNow, isSameDay } from 'date-fns'\n *\n * function isToday<DateType extends Date>(\n * date: DateType | number | string,\n * ): boolean {\n * // If we were to use `new Date()` directly, the function would behave\n * // differently in different timezones and return false for the same date.\n * return isSameDay(date, constructNow(date));\n * }\n */\nexport function constructNow(date) {\n return constructFrom(date, Date.now());\n}\n\n// Fallback for modularized imports:\nexport default constructNow;\n","/**\n * @name isDate\n * @category Common Helpers\n * @summary Is the given value a date?\n *\n * @description\n * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.\n *\n * @param value - The value to check\n *\n * @returns True if the given value is a date\n *\n * @example\n * // For a valid date:\n * const result = isDate(new Date())\n * //=> true\n *\n * @example\n * // For an invalid date:\n * const result = isDate(new Date(NaN))\n * //=> true\n *\n * @example\n * // For some value:\n * const result = isDate('2014-02-31')\n * //=> false\n *\n * @example\n * // For an object:\n * const result = isDate({})\n * //=> false\n */\nexport function isDate(value) {\n return (\n value instanceof Date ||\n (typeof value === \"object\" &&\n Object.prototype.toString.call(value) === \"[object Date]\")\n );\n}\n\n// Fallback for modularized imports:\nexport default isDate;\n","import { isDate } from \"./isDate.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate](https://date-fns.org/docs/toDate)\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to check\n *\n * @returns The date is valid\n *\n * @example\n * // For the valid date:\n * const result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertable into a date:\n * const result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * const result = isValid(new Date(''))\n * //=> false\n */\nexport function isValid(date) {\n if (!isDate(date) && typeof date !== \"number\") {\n return false;\n }\n const _date = toDate(date);\n return !isNaN(Number(_date));\n}\n\n// Fallback for modularized imports:\nexport default isValid;\n","import { toDate } from \"./toDate.mjs\";\n\n/**\n * @name differenceInCalendarMonths\n * @category Month Helpers\n * @summary Get the number of calendar months between the given dates.\n *\n * @description\n * Get the number of calendar months between the given dates.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param dateLeft - The later date\n * @param dateRight - The earlier date\n *\n * @returns The number of calendar months\n *\n * @example\n * // How many calendar months are between 31 January 2014 and 1 September 2014?\n * const result = differenceInCalendarMonths(\n * new Date(2014, 8, 1),\n * new Date(2014, 0, 31)\n * )\n * //=> 8\n */\nexport function differenceInCalendarMonths(dateLeft, dateRight) {\n const _dateLeft = toDate(dateLeft);\n const _dateRight = toDate(dateRight);\n\n const yearDiff = _dateLeft.getFullYear() - _dateRight.getFullYear();\n const monthDiff = _dateLeft.getMonth() - _dateRight.getMonth();\n\n return yearDiff * 12 + monthDiff;\n}\n\n// Fallback for modularized imports:\nexport default differenceInCalendarMonths;\n","export function getRoundingMethod(method) {\n return (number) => {\n const round = method ? Math[method] : Math.trunc;\n const result = round(number);\n // Prevent negative zero\n return result === 0 ? 0 : result;\n };\n}\n","import { toDate } from \"./toDate.mjs\";\n\n/**\n * @name differenceInMilliseconds\n * @category Millisecond Helpers\n * @summary Get the number of milliseconds between the given dates.\n *\n * @description\n * Get the number of milliseconds between the given dates.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param dateLeft - The later date\n * @param dateRight - The earlier date\n *\n * @returns The number of milliseconds\n *\n * @example\n * // How many milliseconds are between\n * // 2 July 2014 12:30:20.600 and 2 July 2014 12:30:21.700?\n * const result = differenceInMilliseconds(\n * new Date(2014, 6, 2, 12, 30, 21, 700),\n * new Date(2014, 6, 2, 12, 30, 20, 600)\n * )\n * //=> 1100\n */\nexport function differenceInMilliseconds(dateLeft, dateRight) {\n return +toDate(dateLeft) - +toDate(dateRight);\n}\n\n// Fallback for modularized imports:\nexport default differenceInMilliseconds;\n","import { toDate } from \"./toDate.mjs\";\n\n/**\n * @name endOfDay\n * @category Day Helpers\n * @summary Return the end of a day for the given date.\n *\n * @description\n * Return the end of a day for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n *\n * @returns The end of a day\n *\n * @example\n * // The end of a day for 2 September 2014 11:55:00:\n * const result = endOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 23:59:59.999\n */\nexport function endOfDay(date) {\n const _date = toDate(date);\n _date.setHours(23, 59, 59, 999);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfDay;\n","import { toDate } from \"./toDate.mjs\";\n\n/**\n * @name endOfMonth\n * @category Month Helpers\n * @summary Return the end of a month for the given date.\n *\n * @description\n * Return the end of a month for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n *\n * @returns The end of a month\n *\n * @example\n * // The end of a month for 2 September 2014 11:55:00:\n * const result = endOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 23:59:59.999\n */\nexport function endOfMonth(date) {\n const _date = toDate(date);\n const month = _date.getMonth();\n _date.setFullYear(_date.getFullYear(), month + 1, 0);\n _date.setHours(23, 59, 59, 999);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfMonth;\n","import { endOfDay } from \"./endOfDay.mjs\";\nimport { endOfMonth } from \"./endOfMonth.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name isLastDayOfMonth\n * @category Month Helpers\n * @summary Is the given date the last day of a month?\n *\n * @description\n * Is the given date the last day of a month?\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to check\n\n * @returns The date is the last day of a month\n *\n * @example\n * // Is 28 February 2014 the last day of a month?\n * const result = isLastDayOfMonth(new Date(2014, 1, 28))\n * //=> true\n */\nexport function isLastDayOfMonth(date) {\n const _date = toDate(date);\n return +endOfDay(_date) === +endOfMonth(_date);\n}\n\n// Fallback for modularized imports:\nexport default isLastDayOfMonth;\n","import { compareAsc } from \"./compareAsc.mjs\";\nimport { differenceInCalendarMonths } from \"./differenceInCalendarMonths.mjs\";\nimport { isLastDayOfMonth } from \"./isLastDayOfMonth.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name differenceInMonths\n * @category Month Helpers\n * @summary Get the number of full months between the given dates.\n *\n * @description\n * Get the number of full months between the given dates using trunc as a default rounding method.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param dateLeft - The later date\n * @param dateRight - The earlier date\n *\n * @returns The number of full months\n *\n * @example\n * // How many full months are between 31 January 2014 and 1 September 2014?\n * const result = differenceInMonths(new Date(2014, 8, 1), new Date(2014, 0, 31))\n * //=> 7\n */\nexport function differenceInMonths(dateLeft, dateRight) {\n const _dateLeft = toDate(dateLeft);\n const _dateRight = toDate(dateRight);\n\n const sign = compareAsc(_dateLeft, _dateRight);\n const difference = Math.abs(\n differenceInCalendarMonths(_dateLeft, _dateRight),\n );\n let result;\n\n // Check for the difference of less than month\n if (difference < 1) {\n result = 0;\n } else {\n if (_dateLeft.getMonth() === 1 && _dateLeft.getDate() > 27) {\n // This will check if the date is end of Feb and assign a higher end of month date\n // to compare it with Jan\n _dateLeft.setDate(30);\n }\n\n _dateLeft.setMonth(_dateLeft.getMonth() - sign * difference);\n\n // Math.abs(diff in full months - diff in calendar months) === 1 if last calendar month is not full\n // If so, result must be decreased by 1 in absolute value\n let isLastMonthNotFull = compareAsc(_dateLeft, _dateRight) === -sign;\n\n // Check for cases of one full calendar month\n if (\n isLastDayOfMonth(toDate(dateLeft)) &&\n difference === 1 &&\n compareAsc(dateLeft, _dateRight) === 1\n ) {\n isLastMonthNotFull = false;\n }\n\n result = sign * (difference - Number(isLastMonthNotFull));\n }\n\n // Prevent negative zero\n return result === 0 ? 0 : result;\n}\n\n// Fallback for modularized imports:\nexport default differenceInMonths;\n","import { getRoundingMethod } from \"./_lib/getRoundingMethod.mjs\";\nimport { differenceInMilliseconds } from \"./differenceInMilliseconds.mjs\";\n\n/**\n * The {@link differenceInSeconds} function options.\n */\n\n/**\n * @name differenceInSeconds\n * @category Second Helpers\n * @summary Get the number of seconds between the given dates.\n *\n * @description\n * Get the number of seconds between the given dates.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param dateLeft - The later date\n * @param dateRight - The earlier date\n * @param options - An object with options.\n *\n * @returns The number of seconds\n *\n * @example\n * // How many seconds are between\n * // 2 July 2014 12:30:07.999 and 2 July 2014 12:30:20.000?\n * const result = differenceInSeconds(\n * new Date(2014, 6, 2, 12, 30, 20, 0),\n * new Date(2014, 6, 2, 12, 30, 7, 999)\n * )\n * //=> 12\n */\nexport function differenceInSeconds(dateLeft, dateRight, options) {\n const diff = differenceInMilliseconds(dateLeft, dateRight) / 1000;\n return getRoundingMethod(options?.roundingMethod)(diff);\n}\n\n// Fallback for modularized imports:\nexport default differenceInSeconds;\n","import { toDate } from \"./toDate.mjs\";\nimport { constructFrom } from \"./constructFrom.mjs\";\n\n/**\n * @name startOfYear\n * @category Year Helpers\n * @summary Return the start of a year for the given date.\n *\n * @description\n * Return the start of a year for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n *\n * @returns The start of a year\n *\n * @example\n * // The start of a year for 2 September 2014 11:55:00:\n * const result = startOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Jan 01 2014 00:00:00\n */\nexport function startOfYear(date) {\n const cleanDate = toDate(date);\n const _date = constructFrom(date, 0);\n _date.setFullYear(cleanDate.getFullYear(), 0, 1);\n _date.setHours(0, 0, 0, 0);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfYear;\n","const formatDistanceLocale = {\n lessThanXSeconds: {\n one: \"less than a second\",\n other: \"less than {{count}} seconds\",\n },\n\n xSeconds: {\n one: \"1 second\",\n other: \"{{count}} seconds\",\n },\n\n halfAMinute: \"half a minute\",\n\n lessThanXMinutes: {\n one: \"less than a minute\",\n other: \"less than {{count}} minutes\",\n },\n\n xMinutes: {\n one: \"1 minute\",\n other: \"{{count}} minutes\",\n },\n\n aboutXHours: {\n one: \"about 1 hour\",\n other: \"about {{count}} hours\",\n },\n\n xHours: {\n one: \"1 hour\",\n other: \"{{count}} hours\",\n },\n\n xDays: {\n one: \"1 day\",\n other: \"{{count}} days\",\n },\n\n aboutXWeeks: {\n one: \"about 1 week\",\n other: \"about {{count}} weeks\",\n },\n\n xWeeks: {\n one: \"1 week\",\n other: \"{{count}} weeks\",\n },\n\n aboutXMonths: {\n one: \"about 1 month\",\n other: \"about {{count}} months\",\n },\n\n xMonths: {\n one: \"1 month\",\n other: \"{{count}} months\",\n },\n\n aboutXYears: {\n one: \"about 1 year\",\n other: \"about {{count}} years\",\n },\n\n xYears: {\n one: \"1 year\",\n other: \"{{count}} years\",\n },\n\n overXYears: {\n one: \"over 1 year\",\n other: \"over {{count}} years\",\n },\n\n almostXYears: {\n one: \"almost 1 year\",\n other: \"almost {{count}} years\",\n },\n};\n\nexport const formatDistance = (token, count, options) => {\n let result;\n\n const tokenValue = formatDistanceLocale[token];\n if (typeof tokenValue === \"string\") {\n result = tokenValue;\n } else if (count === 1) {\n result = tokenValue.one;\n } else {\n result = tokenValue.other.replace(\"{{count}}\", count.toString());\n }\n\n if (options?.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return \"in \" + result;\n } else {\n return result + \" ago\";\n }\n }\n\n return result;\n};\n","export function buildFormatLongFn(args) {\n return (options = {}) => {\n // TODO: Remove String()\n const width = options.width ? String(options.width) : args.defaultWidth;\n const format = args.formats[width] || args.formats[args.defaultWidth];\n return format;\n };\n}\n","import { buildFormatLongFn } from \"../../_lib/buildFormatLongFn.mjs\";\n\nconst dateFormats = {\n full: \"EEEE, MMMM do, y\",\n long: \"MMMM do, y\",\n medium: \"MMM d, y\",\n short: \"MM/dd/yyyy\",\n};\n\nconst timeFormats = {\n full: \"h:mm:ss a zzzz\",\n long: \"h:mm:ss a z\",\n medium: \"h:mm:ss a\",\n short: \"h:mm a\",\n};\n\nconst dateTimeFormats = {\n full: \"{{date}} 'at' {{time}}\",\n long: \"{{date}} 'at' {{time}}\",\n medium: \"{{date}}, {{time}}\",\n short: \"{{date}}, {{time}}\",\n};\n\nexport const formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: \"full\",\n }),\n\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: \"full\",\n }),\n\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: \"full\",\n }),\n};\n","const formatRelativeLocale = {\n lastWeek: \"'last' eeee 'at' p\",\n yesterday: \"'yesterday at' p\",\n today: \"'today at' p\",\n tomorrow: \"'tomorrow at' p\",\n nextWeek: \"eeee 'at' p\",\n other: \"P\",\n};\n\nexport const formatRelative = (token, _date, _baseDate, _options) =>\n formatRelativeLocale[token];\n","/* eslint-disable no-unused-vars */\n\n/**\n * The localize function argument callback which allows to convert raw value to\n * the actual type.\n *\n * @param value - The value to convert\n *\n * @returns The converted value\n */\n\n/**\n * The map of localized values for each width.\n */\n\n/**\n * The index type of the locale unit value. It types conversion of units of\n * values that don't start at 0 (i.e. quarters).\n */\n\n/**\n * Converts the unit value to the tuple of values.\n */\n\n/**\n * The tuple of localized era values. The first element represents BC,\n * the second element represents AD.\n */\n\n/**\n * The tuple of localized quarter values. The first element represents Q1.\n */\n\n/**\n * The tuple of localized day values. The first element represents Sunday.\n */\n\n/**\n * The tuple of localized month values. The first element represents January.\n */\n\nexport function buildLocalizeFn(args) {\n return (value, options) => {\n const context = options?.context ? String(options.context) : \"standalone\";\n\n let valuesArray;\n if (context === \"formatting\" && args.formattingValues) {\n const defaultWidth = args.defaultFormattingWidth || args.defaultWidth;\n const width = options?.width ? String(options.width) : defaultWidth;\n\n valuesArray =\n args.formattingValues[width] || args.formattingValues[defaultWidth];\n } else {\n const defaultWidth = args.defaultWidth;\n const width = options?.width ? String(options.width) : args.defaultWidth;\n\n valuesArray = args.values[width] || args.values[defaultWidth];\n }\n const index = args.argumentCallback ? args.argumentCallback(value) : value;\n\n // @ts-expect-error - For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!\n return valuesArray[index];\n };\n}\n","import { buildLocalizeFn } from \"../../_lib/buildLocalizeFn.mjs\";\n\nconst eraValues = {\n narrow: [\"B\", \"A\"],\n abbreviated: [\"BC\", \"AD\"],\n wide: [\"Before Christ\", \"Anno Domini\"],\n};\n\nconst quarterValues = {\n narrow: [\"1\", \"2\", \"3\", \"4\"],\n abbreviated: [\"Q1\", \"Q2\", \"Q3\", \"Q4\"],\n wide: [\"1st quarter\", \"2nd quarter\", \"3rd quarter\", \"4th quarter\"],\n};\n\n// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nconst monthValues = {\n narrow: [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"],\n abbreviated: [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n ],\n\n wide: [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n ],\n};\n\nconst dayValues = {\n narrow: [\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\"],\n short: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n abbreviated: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n wide: [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n ],\n};\n\nconst dayPeriodValues = {\n narrow: {\n am: \"a\",\n pm: \"p\",\n midnight: \"mi\",\n noon: \"n\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n abbreviated: {\n am: \"AM\",\n pm: \"PM\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n wide: {\n am: \"a.m.\",\n pm: \"p.m.\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n};\n\nconst formattingDayPeriodValues = {\n narrow: {\n am: \"a\",\n pm: \"p\",\n midnight: \"mi\",\n noon: \"n\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n abbreviated: {\n am: \"AM\",\n pm: \"PM\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n wide: {\n am: \"a.m.\",\n pm: \"p.m.\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n};\n\nconst ordinalNumber = (dirtyNumber, _options) => {\n const number = Number(dirtyNumber);\n\n // If ordinal numbers depend on context, for example,\n // if they are different for different grammatical genders,\n // use `options.unit`.\n //\n // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n // 'day', 'hour', 'minute', 'second'.\n\n const rem100 = number % 100;\n if (rem100 > 20 || rem100 < 10) {\n switch (rem100 % 10) {\n case 1:\n return number + \"st\";\n case 2:\n return number + \"nd\";\n case 3:\n return number + \"rd\";\n }\n }\n return number + \"th\";\n};\n\nexport const localize = {\n ordinalNumber,\n\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: \"wide\",\n }),\n\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: \"wide\",\n argumentCallback: (quarter) => quarter - 1,\n }),\n\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: \"wide\",\n }),\n\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: \"wide\",\n }),\n\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: \"wide\",\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: \"wide\",\n }),\n};\n","export function buildMatchFn(args) {\n return (string, options = {}) => {\n const width = options.width;\n\n const matchPattern =\n (width && args.matchPatterns[width]) ||\n args.matchPatterns[args.defaultMatchWidth];\n const matchResult = string.match(matchPattern);\n\n if (!matchResult) {\n return null;\n }\n const matchedString = matchResult[0];\n\n const parsePatterns =\n (width && args.parsePatterns[width]) ||\n args.parsePatterns[args.defaultParseWidth];\n\n const key = Array.isArray(parsePatterns)\n ? findIndex(parsePatterns, (pattern) => pattern.test(matchedString))\n : // eslint-disable-next-line @typescript-eslint/no-explicit-any -- I challange you to fix the type\n findKey(parsePatterns, (pattern) => pattern.test(matchedString));\n\n let value;\n\n value = args.valueCallback ? args.valueCallback(key) : key;\n value = options.valueCallback\n ? // eslint-disable-next-line @typescript-eslint/no-explicit-any -- I challange you to fix the type\n options.valueCallback(value)\n : value;\n\n const rest = string.slice(matchedString.length);\n\n return { value, rest };\n };\n}\n\nfunction findKey(object, predicate) {\n for (const key in object) {\n if (\n Object.prototype.hasOwnProperty.call(object, key) &&\n predicate(object[key])\n ) {\n return key;\n }\n }\n return undefined;\n}\n\nfunction findIndex(array, predicate) {\n for (let key = 0; key < array.length; key++) {\n if (predicate(array[key])) {\n return key;\n }\n }\n return undefined;\n}\n","export function buildMatchPatternFn(args) {\n return (string, options = {}) => {\n const matchResult = string.match(args.matchPattern);\n if (!matchResult) return null;\n const matchedString = matchResult[0];\n\n const parseResult = string.match(args.parsePattern);\n if (!parseResult) return null;\n let value = args.valueCallback\n ? args.valueCallback(parseResult[0])\n : parseResult[0];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- I challange you to fix the type\n value = options.valueCallback ? options.valueCallback(value) : value;\n\n const rest = string.slice(matchedString.length);\n\n return { value, rest };\n };\n}\n","import { buildMatchFn } from \"../../_lib/buildMatchFn.mjs\";\nimport { buildMatchPatternFn } from \"../../_lib/buildMatchPatternFn.mjs\";\n\nconst matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nconst parseOrdinalNumberPattern = /\\d+/i;\n\nconst matchEraPatterns = {\n narrow: /^(b|a)/i,\n abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n wide: /^(before christ|before common era|anno domini|common era)/i,\n};\nconst parseEraPatterns = {\n any: [/^b/i, /^(a|c)/i],\n};\n\nconst matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^q[1234]/i,\n wide: /^[1234](th|st|nd|rd)? quarter/i,\n};\nconst parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i],\n};\n\nconst matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i,\n};\nconst parseMonthPatterns = {\n narrow: [\n /^j/i,\n /^f/i,\n /^m/i,\n /^a/i,\n /^m/i,\n /^j/i,\n /^j/i,\n /^a/i,\n /^s/i,\n /^o/i,\n /^n/i,\n /^d/i,\n ],\n\n any: [\n /^ja/i,\n /^f/i,\n /^mar/i,\n /^ap/i,\n /^may/i,\n /^jun/i,\n /^jul/i,\n /^au/i,\n /^s/i,\n /^o/i,\n /^n/i,\n /^d/i,\n ],\n};\n\nconst matchDayPatterns = {\n narrow: /^[smtwf]/i,\n short: /^(su|mo|tu|we|th|fr|sa)/i,\n abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i,\n};\nconst parseDayPatterns = {\n narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i],\n};\n\nconst matchDayPeriodPatterns = {\n narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i,\n};\nconst parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mi/i,\n noon: /^no/i,\n morning: /morning/i,\n afternoon: /afternoon/i,\n evening: /evening/i,\n night: /night/i,\n },\n};\n\nexport const match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: (value) => parseInt(value, 10),\n }),\n\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseEraPatterns,\n defaultParseWidth: \"any\",\n }),\n\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: \"any\",\n valueCallback: (index) => index + 1,\n }),\n\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: \"any\",\n }),\n\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseDayPatterns,\n defaultParseWidth: \"any\",\n }),\n\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: \"any\",\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: \"any\",\n }),\n};\n","import { formatDistance } from \"./en-US/_lib/formatDistance.mjs\";\nimport { formatLong } from \"./en-US/_lib/formatLong.mjs\";\nimport { formatRelative } from \"./en-US/_lib/formatRelative.mjs\";\nimport { localize } from \"./en-US/_lib/localize.mjs\";\nimport { match } from \"./en-US/_lib/match.mjs\";\n\n/**\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp](https://github.com/kossnocorp)\n * @author Lesha Koss [@leshakoss](https://github.com/leshakoss)\n */\nexport const enUS = {\n code: \"en-US\",\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 0 /* Sunday */,\n firstWeekContainsDate: 1,\n },\n};\n\n// Fallback for modularized imports:\nexport default enUS;\n","import { differenceInCalendarDays } from \"./differenceInCalendarDays.mjs\";\nimport { startOfYear } from \"./startOfYear.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name getDayOfYear\n * @category Day Helpers\n * @summary Get the day of the year of the given date.\n *\n * @description\n * Get the day of the year of the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The given date\n *\n * @returns The day of year\n *\n * @example\n * // Which day of the year is 2 July 2014?\n * const result = getDayOfYear(new Date(2014, 6, 2))\n * //=> 183\n */\nexport function getDayOfYear(date) {\n const _date = toDate(date);\n const diff = differenceInCalendarDays(_date, startOfYear(_date));\n const dayOfYear = diff + 1;\n return dayOfYear;\n}\n\n// Fallback for modularized imports:\nexport default getDayOfYear;\n","import { millisecondsInWeek } from \"./constants.mjs\";\nimport { startOfISOWeek } from \"./startOfISOWeek.mjs\";\nimport { startOfISOWeekYear } from \"./startOfISOWeekYear.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name getISOWeek\n * @category ISO Week Helpers\n * @summary Get the ISO week of the given date.\n *\n * @description\n * Get the ISO week of the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The given date\n *\n * @returns The ISO week\n *\n * @example\n * // Which week of the ISO-week numbering year is 2 January 2005?\n * const result = getISOWeek(new Date(2005, 0, 2))\n * //=> 53\n */\nexport function getISOWeek(date) {\n const _date = toDate(date);\n const diff = +startOfISOWeek(_date) - +startOfISOWeekYear(_date);\n\n // Round the number of weeks to the nearest integer because the number of\n // milliseconds in a week is not constant (e.g. it's different in the week of\n // the daylight saving time clock shift).\n return Math.round(diff / millisecondsInWeek) + 1;\n}\n\n// Fallback for modularized imports:\nexport default getISOWeek;\n","import { constructFrom } from \"./constructFrom.mjs\";\nimport { startOfWeek } from \"./startOfWeek.mjs\";\nimport { toDate } from \"./toDate.mjs\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.mjs\";\n\n/**\n * The {@link getWeekYear} function options.\n */\n\n/**\n * @name getWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Get the local week-numbering year of the given date.\n *\n * @description\n * Get the local week-numbering year of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The given date\n * @param options - An object with options.\n *\n * @returns The local week-numbering year\n *\n * @example\n * // Which week numbering year is 26 December 2004 with the default settings?\n * const result = getWeekYear(new Date(2004, 11, 26))\n * //=> 2005\n *\n * @example\n * // Which week numbering year is 26 December 2004 if week starts on Saturday?\n * const result = getWeekYear(new Date(2004, 11, 26), { weekStartsOn: 6 })\n * //=> 2004\n *\n * @example\n * // Which week numbering year is 26 December 2004 if the first week contains 4 January?\n * const result = getWeekYear(new Date(2004, 11, 26), { firstWeekContainsDate: 4 })\n * //=> 2004\n */\nexport function getWeekYear(date, options) {\n const _date = toDate(date);\n const year = _date.getFullYear();\n\n const defaultOptions = getDefaultOptions();\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const firstWeekOfNextYear = constructFrom(date, 0);\n firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate);\n firstWeekOfNextYear.setHours(0, 0, 0, 0);\n const startOfNextYear = startOfWeek(firstWeekOfNextYear, options);\n\n const firstWeekOfThisYear = constructFrom(date, 0);\n firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate);\n firstWeekOfThisYear.setHours(0, 0, 0, 0);\n const startOfThisYear = startOfWeek(firstWeekOfThisYear, options);\n\n if (_date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (_date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}\n\n// Fallback for modularized imports:\nexport default getWeekYear;\n","import { constructFrom } from \"./constructFrom.mjs\";\nimport { getWeekYear } from \"./getWeekYear.mjs\";\nimport { startOfWeek } from \"./startOfWeek.mjs\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.mjs\";\n\n/**\n * The {@link startOfWeekYear} function options.\n */\n\n/**\n * @name startOfWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Return the start of a local week-numbering year for the given date.\n *\n * @description\n * Return the start of a local week-numbering year.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week-numbering year\n *\n * @example\n * // The start of an a week-numbering year for 2 July 2005 with default settings:\n * const result = startOfWeekYear(new Date(2005, 6, 2))\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // The start of a week-numbering year for 2 July 2005\n * // if Monday is the first day of week\n * // and 4 January is always in the first week of the year:\n * const result = startOfWeekYear(new Date(2005, 6, 2), {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport function startOfWeekYear(date, options) {\n const defaultOptions = getDefaultOptions();\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const year = getWeekYear(date, options);\n const firstWeek = constructFrom(date, 0);\n firstWeek.setFullYear(year, 0, firstWeekContainsDate);\n firstWeek.setHours(0, 0, 0, 0);\n const _date = startOfWeek(firstWeek, options);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfWeekYear;\n","import { millisecondsInWeek } from \"./constants.mjs\";\nimport { startOfWeek } from \"./startOfWeek.mjs\";\nimport { startOfWeekYear } from \"./startOfWeekYear.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * The {@link getWeek} function options.\n */\n\n/**\n * @name getWeek\n * @category Week Helpers\n * @summary Get the local week index of the given date.\n *\n * @description\n * Get the local week index of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The given date\n * @param options - An object with options\n *\n * @returns The week\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005 with default options?\n * const result = getWeek(new Date(2005, 0, 2))\n * //=> 2\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January?\n * const result = getWeek(new Date(2005, 0, 2), {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> 53\n */\n\nexport function getWeek(date, options) {\n const _date = toDate(date);\n const diff = +startOfWeek(_date, options) - +startOfWeekYear(_date, options);\n\n // Round the number of weeks to the nearest integer because the number of\n // milliseconds in a week is not constant (e.g. it's different in the week of\n // the daylight saving time clock shift).\n return Math.round(diff / millisecondsInWeek) + 1;\n}\n\n// Fallback for modularized imports:\nexport default getWeek;\n","export function addLeadingZeros(number, targetLength) {\n const sign = number < 0 ? \"-\" : \"\";\n const output = Math.abs(number).toString().padStart(targetLength, \"0\");\n return sign + output;\n}\n","import { addLeadingZeros } from \"../addLeadingZeros.mjs\";\n\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | |\n * | d | Day of month | D | |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | m | Minute | M | Month |\n * | s | Second | S | Fraction of second |\n * | y | Year (abs) | Y | |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n */\n\nexport const lightFormatters = {\n // Year\n y(date, token) {\n // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens\n // | Year | y | yy | yyy | yyyy | yyyyy |\n // |----------|-------|----|-------|-------|-------|\n // | AD 1 | 1 | 01 | 001 | 0001 | 00001 |\n // | AD 12 | 12 | 12 | 012 | 0012 | 00012 |\n // | AD 123 | 123 | 23 | 123 | 0123 | 00123 |\n // | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |\n // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n\n const signedYear = date.getFullYear();\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n const year = signedYear > 0 ? signedYear : 1 - signedYear;\n return addLeadingZeros(token === \"yy\" ? year % 100 : year, token.length);\n },\n\n // Month\n M(date, token) {\n const month = date.getMonth();\n return token === \"M\" ? String(month + 1) : addLeadingZeros(month + 1, 2);\n },\n\n // Day of the month\n d(date, token) {\n return addLeadingZeros(date.getDate(), token.length);\n },\n\n // AM or PM\n a(date, token) {\n const dayPeriodEnumValue = date.getHours() / 12 >= 1 ? \"pm\" : \"am\";\n\n switch (token) {\n case \"a\":\n case \"aa\":\n return dayPeriodEnumValue.toUpperCase();\n case \"aaa\":\n return dayPeriodEnumValue;\n case \"aaaaa\":\n return dayPeriodEnumValue[0];\n case \"aaaa\":\n default:\n return dayPeriodEnumValue === \"am\" ? \"a.m.\" : \"p.m.\";\n }\n },\n\n // Hour [1-12]\n h(date, token) {\n return addLeadingZeros(date.getHours() % 12 || 12, token.length);\n },\n\n // Hour [0-23]\n H(date, token) {\n return addLeadingZeros(date.getHours(), token.length);\n },\n\n // Minute\n m(date, token) {\n return addLeadingZeros(date.getMinutes(), token.length);\n },\n\n // Second\n s(date, token) {\n return addLeadingZeros(date.getSeconds(), token.length);\n },\n\n // Fraction of second\n S(date, token) {\n const numberOfDigits = token.length;\n const milliseconds = date.getMilliseconds();\n const fractionalSeconds = Math.trunc(\n milliseconds * Math.pow(10, numberOfDigits - 3),\n );\n return addLeadingZeros(fractionalSeconds, token.length);\n },\n};\n","import { getDayOfYear } from \"../../getDayOfYear.mjs\";\nimport { getISOWeek } from \"../../getISOWeek.mjs\";\nimport { getISOWeekYear } from \"../../getISOWeekYear.mjs\";\nimport { getWeek } from \"../../getWeek.mjs\";\nimport { getWeekYear } from \"../../getWeekYear.mjs\";\nimport { addLeadingZeros } from \"../addLeadingZeros.mjs\";\nimport { lightFormatters } from \"./lightFormatters.mjs\";\n\nconst dayPeriodEnum = {\n am: \"am\",\n pm: \"pm\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n};\n\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | Milliseconds in day |\n * | b | AM, PM, noon, midnight | B | Flexible day period |\n * | c | Stand-alone local day of week | C* | Localized hour w/ day period |\n * | d | Day of month | D | Day of year |\n * | e | Local day of week | E | Day of week |\n * | f | | F* | Day of week in month |\n * | g* | Modified Julian day | G | Era |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | i! | ISO day of week | I! | ISO week of year |\n * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |\n * | k | Hour [1-24] | K | Hour [0-11] |\n * | l* | (deprecated) | L | Stand-alone month |\n * | m | Minute | M | Month |\n * | n | | N | |\n * | o! | Ordinal number modifier | O | Timezone (GMT) |\n * | p! | Long localized time | P! | Long localized date |\n * | q | Stand-alone quarter | Q | Quarter |\n * | r* | Related Gregorian year | R! | ISO week-numbering year |\n * | s | Second | S | Fraction of second |\n * | t! | Seconds timestamp | T! | Milliseconds timestamp |\n * | u | Extended year | U* | Cyclic year |\n * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |\n * | w | Local week of year | W* | Week of month |\n * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |\n * | y | Year (abs) | Y | Local week-numbering year |\n * | z | Timezone (specific non-locat.) | Z* | Timezone (aliases) |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n * i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n * `R` is supposed to be used in conjunction with `I` and `i`\n * for universal ISO week-numbering date, whereas\n * `Y` is supposed to be used in conjunction with `w` and `e`\n * for week-numbering date specific to the locale.\n * - `P` is long localized date format\n * - `p` is long localized time format\n */\n\nexport const formatters = {\n // Era\n G: function (date, token, localize) {\n const era = date.getFullYear() > 0 ? 1 : 0;\n switch (token) {\n // AD, BC\n case \"G\":\n case \"GG\":\n case \"GGG\":\n return localize.era(era, { width: \"abbreviated\" });\n // A, B\n case \"GGGGG\":\n return localize.era(era, { width: \"narrow\" });\n // Anno Domini, Before Christ\n case \"GGGG\":\n default:\n return localize.era(era, { width: \"wide\" });\n }\n },\n\n // Year\n y: function (date, token, localize) {\n // Ordinal number\n if (token === \"yo\") {\n const signedYear = date.getFullYear();\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n const year = signedYear > 0 ? signedYear : 1 - signedYear;\n return localize.ordinalNumber(year, { unit: \"year\" });\n }\n\n return lightFormatters.y(date, token);\n },\n\n // Local week-numbering year\n Y: function (date, token, localize, options) {\n const signedWeekYear = getWeekYear(date, options);\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n const weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear;\n\n // Two digit year\n if (token === \"YY\") {\n const twoDigitYear = weekYear % 100;\n return addLeadingZeros(twoDigitYear, 2);\n }\n\n // Ordinal number\n if (token === \"Yo\") {\n return localize.ordinalNumber(weekYear, { unit: \"year\" });\n }\n\n // Padding\n return addLeadingZeros(weekYear, token.length);\n },\n\n // ISO week-numbering year\n R: function (date, token) {\n const isoWeekYear = getISOWeekYear(date);\n\n // Padding\n return addLeadingZeros(isoWeekYear, token.length);\n },\n\n // Extended year. This is a single number designating the year of this calendar system.\n // The main difference between `y` and `u` localizers are B.C. years:\n // | Year | `y` | `u` |\n // |------|-----|-----|\n // | AC 1 | 1 | 1 |\n // | BC 1 | 1 | 0 |\n // | BC 2 | 2 | -1 |\n // Also `yy` always returns the last two digits of a year,\n // while `uu` pads single digit years to 2 characters and returns other years unchanged.\n u: function (date, token) {\n const year = date.getFullYear();\n return addLeadingZeros(year, token.length);\n },\n\n // Quarter\n Q: function (date, token, localize) {\n const quarter = Math.ceil((date.getMonth() + 1) / 3);\n switch (token) {\n // 1, 2, 3, 4\n case \"Q\":\n return String(quarter);\n // 01, 02, 03, 04\n case \"QQ\":\n return addLeadingZeros(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n case \"Qo\":\n return localize.ordinalNumber(quarter, { unit: \"quarter\" });\n // Q1, Q2, Q3, Q4\n case \"QQQ\":\n return localize.quarter(quarter, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case \"QQQQQ\":\n return localize.quarter(quarter, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // 1st quarter, 2nd quarter, ...\n case \"QQQQ\":\n default:\n return localize.quarter(quarter, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Stand-alone quarter\n q: function (date, token, localize) {\n const quarter = Math.ceil((date.getMonth() + 1) / 3);\n switch (token) {\n // 1, 2, 3, 4\n case \"q\":\n return String(quarter);\n // 01, 02, 03, 04\n case \"qq\":\n return addLeadingZeros(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n case \"qo\":\n return localize.ordinalNumber(quarter, { unit: \"quarter\" });\n // Q1, Q2, Q3, Q4\n case \"qqq\":\n return localize.quarter(quarter, {\n width: \"abbreviated\",\n context: \"standalone\",\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case \"qqqqq\":\n return localize.quarter(quarter, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // 1st quarter, 2nd quarter, ...\n case \"qqqq\":\n default:\n return localize.quarter(quarter, {\n width: \"wide\",\n context: \"standalone\",\n });\n }\n },\n\n // Month\n M: function (date, token, localize) {\n const month = date.getMonth();\n switch (token) {\n case \"M\":\n case \"MM\":\n return lightFormatters.M(date, token);\n // 1st, 2nd, ..., 12th\n case \"Mo\":\n return localize.ordinalNumber(month + 1, { unit: \"month\" });\n // Jan, Feb, ..., Dec\n case \"MMM\":\n return localize.month(month, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // J, F, ..., D\n case \"MMMMM\":\n return localize.month(month, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // January, February, ..., December\n case \"MMMM\":\n default:\n return localize.month(month, { width: \"wide\", context: \"formatting\" });\n }\n },\n\n // Stand-alone month\n L: function (date, token, localize) {\n const month = date.getMonth();\n switch (token) {\n // 1, 2, ..., 12\n case \"L\":\n return String(month + 1);\n // 01, 02, ..., 12\n case \"LL\":\n return addLeadingZeros(month + 1, 2);\n // 1st, 2nd, ..., 12th\n case \"Lo\":\n return localize.ordinalNumber(month + 1, { unit: \"month\" });\n // Jan, Feb, ..., Dec\n case \"LLL\":\n return localize.month(month, {\n width: \"abbreviated\",\n context: \"standalone\",\n });\n // J, F, ..., D\n case \"LLLLL\":\n return localize.month(month, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // January, February, ..., December\n case \"LLLL\":\n default:\n return localize.month(month, { width: \"wide\", context: \"standalone\" });\n }\n },\n\n // Local week of year\n w: function (date, token, localize, options) {\n const week = getWeek(date, options);\n\n if (token === \"wo\") {\n return localize.ordinalNumber(week, { unit: \"week\" });\n }\n\n return addLeadingZeros(week, token.length);\n },\n\n // ISO week of year\n I: function (date, token, localize) {\n const isoWeek = getISOWeek(date);\n\n if (token === \"Io\") {\n return localize.ordinalNumber(isoWeek, { unit: \"week\" });\n }\n\n return addLeadingZeros(isoWeek, token.length);\n },\n\n // Day of the month\n d: function (date, token, localize) {\n if (token === \"do\") {\n return localize.ordinalNumber(date.getDate(), { unit: \"date\" });\n }\n\n return lightFormatters.d(date, token);\n },\n\n // Day of year\n D: function (date, token, localize) {\n const dayOfYear = getDayOfYear(date);\n\n if (token === \"Do\") {\n return localize.ordinalNumber(dayOfYear, { unit: \"dayOfYear\" });\n }\n\n return addLeadingZeros(dayOfYear, token.length);\n },\n\n // Day of week\n E: function (date, token, localize) {\n const dayOfWeek = date.getDay();\n switch (token) {\n // Tue\n case \"E\":\n case \"EE\":\n case \"EEE\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // T\n case \"EEEEE\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"EEEEEE\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"formatting\",\n });\n // Tuesday\n case \"EEEE\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Local day of week\n e: function (date, token, localize, options) {\n const dayOfWeek = date.getDay();\n const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n switch (token) {\n // Numerical value (Nth day of week with current locale or weekStartsOn)\n case \"e\":\n return String(localDayOfWeek);\n // Padded numerical value\n case \"ee\":\n return addLeadingZeros(localDayOfWeek, 2);\n // 1st, 2nd, ..., 7th\n case \"eo\":\n return localize.ordinalNumber(localDayOfWeek, { unit: \"day\" });\n case \"eee\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // T\n case \"eeeee\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"eeeeee\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"formatting\",\n });\n // Tuesday\n case \"eeee\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Stand-alone local day of week\n c: function (date, token, localize, options) {\n const dayOfWeek = date.getDay();\n const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n switch (token) {\n // Numerical value (same as in `e`)\n case \"c\":\n return String(localDayOfWeek);\n // Padded numerical value\n case \"cc\":\n return addLeadingZeros(localDayOfWeek, token.length);\n // 1st, 2nd, ..., 7th\n case \"co\":\n return localize.ordinalNumber(localDayOfWeek, { unit: \"day\" });\n case \"ccc\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"standalone\",\n });\n // T\n case \"ccccc\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // Tu\n case \"cccccc\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"standalone\",\n });\n // Tuesday\n case \"cccc\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"standalone\",\n });\n }\n },\n\n // ISO day of week\n i: function (date, token, localize) {\n const dayOfWeek = date.getDay();\n const isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek;\n switch (token) {\n // 2\n case \"i\":\n return String(isoDayOfWeek);\n // 02\n case \"ii\":\n return addLeadingZeros(isoDayOfWeek, token.length);\n // 2nd\n case \"io\":\n return localize.ordinalNumber(isoDayOfWeek, { unit: \"day\" });\n // Tue\n case \"iii\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // T\n case \"iiiii\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"iiiiii\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"formatting\",\n });\n // Tuesday\n case \"iiii\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // AM or PM\n a: function (date, token, localize) {\n const hours = date.getHours();\n const dayPeriodEnumValue = hours / 12 >= 1 ? \"pm\" : \"am\";\n\n switch (token) {\n case \"a\":\n case \"aa\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n case \"aaa\":\n return localize\n .dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n })\n .toLowerCase();\n case \"aaaaa\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"aaaa\":\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // AM, PM, midnight, noon\n b: function (date, token, localize) {\n const hours = date.getHours();\n let dayPeriodEnumValue;\n if (hours === 12) {\n dayPeriodEnumValue = dayPeriodEnum.noon;\n } else if (hours === 0) {\n dayPeriodEnumValue = dayPeriodEnum.midnight;\n } else {\n dayPeriodEnumValue = hours / 12 >= 1 ? \"pm\" : \"am\";\n }\n\n switch (token) {\n case \"b\":\n case \"bb\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n case \"bbb\":\n return localize\n .dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n })\n .toLowerCase();\n case \"bbbbb\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"bbbb\":\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // in the morning, in the afternoon, in the evening, at night\n B: function (date, token, localize) {\n const hours = date.getHours();\n let dayPeriodEnumValue;\n if (hours >= 17) {\n dayPeriodEnumValue = dayPeriodEnum.evening;\n } else if (hours >= 12) {\n dayPeriodEnumValue = dayPeriodEnum.afternoon;\n } else if (hours >= 4) {\n dayPeriodEnumValue = dayPeriodEnum.morning;\n } else {\n dayPeriodEnumValue = dayPeriodEnum.night;\n }\n\n switch (token) {\n case \"B\":\n case \"BB\":\n case \"BBB\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n case \"BBBBB\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"BBBB\":\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Hour [1-12]\n h: function (date, token, localize) {\n if (token === \"ho\") {\n let hours = date.getHours() % 12;\n if (hours === 0) hours = 12;\n return localize.ordinalNumber(hours, { unit: \"hour\" });\n }\n\n return lightFormatters.h(date, token);\n },\n\n // Hour [0-23]\n H: function (date, token, localize) {\n if (token === \"Ho\") {\n return localize.ordinalNumber(date.getHours(), { unit: \"hour\" });\n }\n\n return lightFormatters.H(date, token);\n },\n\n // Hour [0-11]\n K: function (date, token, localize) {\n const hours = date.getHours() % 12;\n\n if (token === \"Ko\") {\n return localize.ordinalNumber(hours, { unit: \"hour\" });\n }\n\n return addLeadingZeros(hours, token.length);\n },\n\n // Hour [1-24]\n k: function (date, token, localize) {\n let hours = date.getHours();\n if (hours === 0) hours = 24;\n\n if (token === \"ko\") {\n return localize.ordinalNumber(hours, { unit: \"hour\" });\n }\n\n return addLeadingZeros(hours, token.length);\n },\n\n // Minute\n m: function (date, token, localize) {\n if (token === \"mo\") {\n return localize.ordinalNumber(date.getMinutes(), { unit: \"minute\" });\n }\n\n return lightFormatters.m(date, token);\n },\n\n // Second\n s: function (date, token, localize) {\n if (token === \"so\") {\n return localize.ordinalNumber(date.getSeconds(), { unit: \"second\" });\n }\n\n return lightFormatters.s(date, token);\n },\n\n // Fraction of second\n S: function (date, token) {\n return lightFormatters.S(date, token);\n },\n\n // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n X: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n if (timezoneOffset === 0) {\n return \"Z\";\n }\n\n switch (token) {\n // Hours and optional minutes\n case \"X\":\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XX`\n case \"XXXX\":\n case \"XX\": // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XXX`\n case \"XXXXX\":\n case \"XXX\": // Hours and minutes with `:` delimiter\n default:\n return formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\n x: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n switch (token) {\n // Hours and optional minutes\n case \"x\":\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xx`\n case \"xxxx\":\n case \"xx\": // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xxx`\n case \"xxxxx\":\n case \"xxx\": // Hours and minutes with `:` delimiter\n default:\n return formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Timezone (GMT)\n O: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n switch (token) {\n // Short\n case \"O\":\n case \"OO\":\n case \"OOO\":\n return \"GMT\" + formatTimezoneShort(timezoneOffset, \":\");\n // Long\n case \"OOOO\":\n default:\n return \"GMT\" + formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Timezone (specific non-location)\n z: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n switch (token) {\n // Short\n case \"z\":\n case \"zz\":\n case \"zzz\":\n return \"GMT\" + formatTimezoneShort(timezoneOffset, \":\");\n // Long\n case \"zzzz\":\n default:\n return \"GMT\" + formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Seconds timestamp\n t: function (date, token, _localize) {\n const timestamp = Math.trunc(date.getTime() / 1000);\n return addLeadingZeros(timestamp, token.length);\n },\n\n // Milliseconds timestamp\n T: function (date, token, _localize) {\n const timestamp = date.getTime();\n return addLeadingZeros(timestamp, token.length);\n },\n};\n\nfunction formatTimezoneShort(offset, delimiter = \"\") {\n const sign = offset > 0 ? \"-\" : \"+\";\n const absOffset = Math.abs(offset);\n const hours = Math.trunc(absOffset / 60);\n const minutes = absOffset % 60;\n if (minutes === 0) {\n return sign + String(hours);\n }\n return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2);\n}\n\nfunction formatTimezoneWithOptionalMinutes(offset, delimiter) {\n if (offset % 60 === 0) {\n const sign = offset > 0 ? \"-\" : \"+\";\n return sign + addLeadingZeros(Math.abs(offset) / 60, 2);\n }\n return formatTimezone(offset, delimiter);\n}\n\nfunction formatTimezone(offset, delimiter = \"\") {\n const sign = offset > 0 ? \"-\" : \"+\";\n const absOffset = Math.abs(offset);\n const hours = addLeadingZeros(Math.trunc(absOffset / 60), 2);\n const minutes = addLeadingZeros(absOffset % 60, 2);\n return sign + hours + delimiter + minutes;\n}\n","const dateLongFormatter = (pattern, formatLong) => {\n switch (pattern) {\n case \"P\":\n return formatLong.date({ width: \"short\" });\n case \"PP\":\n return formatLong.date({ width: \"medium\" });\n case \"PPP\":\n return formatLong.date({ width: \"long\" });\n case \"PPPP\":\n default:\n return formatLong.date({ width: \"full\" });\n }\n};\n\nconst timeLongFormatter = (pattern, formatLong) => {\n switch (pattern) {\n case \"p\":\n return formatLong.time({ width: \"short\" });\n case \"pp\":\n return formatLong.time({ width: \"medium\" });\n case \"ppp\":\n return formatLong.time({ width: \"long\" });\n case \"pppp\":\n default:\n return formatLong.time({ width: \"full\" });\n }\n};\n\nconst dateTimeLongFormatter = (pattern, formatLong) => {\n const matchResult = pattern.match(/(P+)(p+)?/) || [];\n const datePattern = matchResult[1];\n const timePattern = matchResult[2];\n\n if (!timePattern) {\n return dateLongFormatter(pattern, formatLong);\n }\n\n let dateTimeFormat;\n\n switch (datePattern) {\n case \"P\":\n dateTimeFormat = formatLong.dateTime({ width: \"short\" });\n break;\n case \"PP\":\n dateTimeFormat = formatLong.dateTime({ width: \"medium\" });\n break;\n case \"PPP\":\n dateTimeFormat = formatLong.dateTime({ width: \"long\" });\n break;\n case \"PPPP\":\n default:\n dateTimeFormat = formatLong.dateTime({ width: \"full\" });\n break;\n }\n\n return dateTimeFormat\n .replace(\"{{date}}\", dateLongFormatter(datePattern, formatLong))\n .replace(\"{{time}}\", timeLongFormatter(timePattern, formatLong));\n};\n\nexport const longFormatters = {\n p: timeLongFormatter,\n P: dateTimeLongFormatter,\n};\n","const dayOfYearTokenRE = /^D+$/;\nconst weekYearTokenRE = /^Y+$/;\n\nconst throwTokens = [\"D\", \"DD\", \"YY\", \"YYYY\"];\n\nexport function isProtectedDayOfYearToken(token) {\n return dayOfYearTokenRE.test(token);\n}\n\nexport function isProtectedWeekYearToken(token) {\n return weekYearTokenRE.test(token);\n}\n\nexport function warnOrThrowProtectedError(token, format, input) {\n const _message = message(token, format, input);\n console.warn(_message);\n if (throwTokens.includes(token)) throw new RangeError(_message);\n}\n\nfunction message(token, format, input) {\n const subject = token[0] === \"Y\" ? \"years\" : \"days of the month\";\n return `Use \\`${token.toLowerCase()}\\` instead of \\`${token}\\` (in \\`${format}\\`) for formatting ${subject} to the input \\`${input}\\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`;\n}\n","import { defaultLocale } from \"./_lib/defaultLocale.mjs\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.mjs\";\nimport { formatters } from \"./_lib/format/formatters.mjs\";\nimport { longFormatters } from \"./_lib/format/longFormatters.mjs\";\nimport {\n isProtectedDayOfYearToken,\n isProtectedWeekYearToken,\n warnOrThrowProtectedError,\n} from \"./_lib/protectedTokens.mjs\";\nimport { isValid } from \"./isValid.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n// Rexports of internal for libraries to use.\n// See: https://github.com/date-fns/date-fns/issues/3638#issuecomment-1877082874\nexport { formatters, longFormatters };\n\n// This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n// (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n// except a single quote symbol, which ends the sequence.\n// Two quote characters do not end the sequence.\n// If there is no matching single quote\n// then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nconst formattingTokensRegExp =\n /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g;\n\n// This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\nconst longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\n\nconst escapedStringRegExp = /^'([^]*?)'?$/;\nconst doubleQuoteRegExp = /''/g;\nconst unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n\nexport { format as formatDate };\n\n/**\n * The {@link format} function options.\n */\n\n/**\n * @name format\n * @alias formatDate\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. The result may vary by locale.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit | Pattern | Result examples | Notes |\n * |---------------------------------|---------|-----------------------------------|-------|\n * | Era | G..GGG | AD, BC | |\n * | | GGGG | Anno Domini, Before Christ | 2 |\n * | | GGGGG | A, B | |\n * | Calendar year | y | 44, 1, 1900, 2017 | 5 |\n * | | yo | 44th, 1st, 0th, 17th | 5,7 |\n * | | yy | 44, 01, 00, 17 | 5 |\n * | | yyy | 044, 001, 1900, 2017 | 5 |\n * | | yyyy | 0044, 0001, 1900, 2017 | 5 |\n * | | yyyyy | ... | 3,5 |\n * | Local week-numbering year | Y | 44, 1, 1900, 2017 | 5 |\n * | | Yo | 44th, 1st, 1900th, 2017th | 5,7 |\n * | | YY | 44, 01, 00, 17 | 5,8 |\n * | | YYY | 044, 001, 1900, 2017 | 5 |\n * | | YYYY | 0044, 0001, 1900, 2017 | 5,8 |\n * | | YYYYY | ... | 3,5 |\n * | ISO week-numbering year | R | -43, 0, 1, 1900, 2017 | 5,7 |\n * | | RR | -43, 00, 01, 1900, 2017 | 5,7 |\n * | | RRR | -043, 000, 001, 1900, 2017 | 5,7 |\n * | | RRRR | -0043, 0000, 0001, 1900, 2017 | 5,7 |\n * | | RRRRR | ... | 3,5,7 |\n * | Extended year | u | -43, 0, 1, 1900, 2017 | 5 |\n * | | uu | -43, 01, 1900, 2017 | 5 |\n * | | uuu | -043, 001, 1900, 2017 | 5 |\n * | | uuuu | -0043, 0001, 1900, 2017 | 5 |\n * | | uuuuu | ... | 3,5 |\n * | Quarter (formatting) | Q | 1, 2, 3, 4 | |\n * | | Qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | QQ | 01, 02, 03, 04 | |\n * | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | q | 1, 2, 3, 4 | |\n * | | qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | qq | 01, 02, 03, 04 | |\n * | | qqq | Q1, Q2, Q3, Q4 | |\n * | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | qqqqq | 1, 2, 3, 4 | 4 |\n * | Month (formatting) | M | 1, 2, ..., 12 | |\n * | | Mo | 1st, 2nd, ..., 12th | 7 |\n * | | MM | 01, 02, ..., 12 | |\n * | | MMM | Jan, Feb, ..., Dec | |\n * | | MMMM | January, February, ..., December | 2 |\n * | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | L | 1, 2, ..., 12 | |\n * | | Lo | 1st, 2nd, ..., 12th | 7 |\n * | | LL | 01, 02, ..., 12 | |\n * | | LLL | Jan, Feb, ..., Dec | |\n * | | LLLL | January, February, ..., December | 2 |\n * | | LLLLL | J, F, ..., D | |\n * | Local week of year | w | 1, 2, ..., 53 | |\n * | | wo | 1st, 2nd, ..., 53th | 7 |\n * | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | I | 1, 2, ..., 53 | 7 |\n * | | Io | 1st, 2nd, ..., 53th | 7 |\n * | | II | 01, 02, ..., 53 | 7 |\n * | Day of month | d | 1, 2, ..., 31 | |\n * | | do | 1st, 2nd, ..., 31st | 7 |\n * | | dd | 01, 02, ..., 31 | |\n * | Day of year | D | 1, 2, ..., 365, 366 | 9 |\n * | | Do | 1st, 2nd, ..., 365th, 366th | 7 |\n * | | DD | 01, 02, ..., 365, 366 | 9 |\n * | | DDD | 001, 002, ..., 365, 366 | |\n * | | DDDD | ... | 3 |\n * | Day of week (formatting) | E..EEE | Mon, Tue, Wed, ..., Sun | |\n * | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | EEEEE | M, T, W, T, F, S, S | |\n * | | EEEEEE | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | ISO day of week (formatting) | i | 1, 2, 3, ..., 7 | 7 |\n * | | io | 1st, 2nd, ..., 7th | 7 |\n * | | ii | 01, 02, ..., 07 | 7 |\n * | | iii | Mon, Tue, Wed, ..., Sun | 7 |\n * | | iiii | Monday, Tuesday, ..., Sunday | 2,7 |\n * | | iiiii | M, T, W, T, F, S, S | 7 |\n * | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 7 |\n * | Local day of week (formatting) | e | 2, 3, 4, ..., 1 | |\n * | | eo | 2nd, 3rd, ..., 1st | 7 |\n * | | ee | 02, 03, ..., 01 | |\n * | | eee | Mon, Tue, Wed, ..., Sun | |\n * | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | eeeee | M, T, W, T, F, S, S | |\n * | | eeeeee | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | Local day of week (stand-alone) | c | 2, 3, 4, ..., 1 | |\n * | | co | 2nd, 3rd, ..., 1st | 7 |\n * | | cc | 02, 03, ..., 01 | |\n * | | ccc | Mon, Tue, Wed, ..., Sun | |\n * | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | ccccc | M, T, W, T, F, S, S | |\n * | | cccccc | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | AM, PM | a..aa | AM, PM | |\n * | | aaa | am, pm | |\n * | | aaaa | a.m., p.m. | 2 |\n * | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | b..bb | AM, PM, noon, midnight | |\n * | | bbb | am, pm, noon, midnight | |\n * | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | bbbbb | a, p, n, mi | |\n * | Flexible day period | B..BBB | at night, in the morning, ... | |\n * | | BBBB | at night, in the morning, ... | 2 |\n * | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | h | 1, 2, ..., 11, 12 | |\n * | | ho | 1st, 2nd, ..., 11th, 12th | 7 |\n * | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | H | 0, 1, 2, ..., 23 | |\n * | | Ho | 0th, 1st, 2nd, ..., 23rd | 7 |\n * | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | K | 1, 2, ..., 11, 0 | |\n * | | Ko | 1st, 2nd, ..., 11th, 0th | 7 |\n * | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | k | 24, 1, 2, ..., 23 | |\n * | | ko | 24th, 1st, 2nd, ..., 23rd | 7 |\n * | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | m | 0, 1, ..., 59 | |\n * | | mo | 0th, 1st, ..., 59th | 7 |\n * | | mm | 00, 01, ..., 59 | |\n * | Second | s | 0, 1, ..., 59 | |\n * | | so | 0th, 1st, ..., 59th | 7 |\n * | | ss | 00, 01, ..., 59 | |\n * | Fraction of second | S | 0, 1, ..., 9 | |\n * | | SS | 00, 01, ..., 99 | |\n * | | SSS | 000, 001, ..., 999 | |\n * | | SSSS | ... | 3 |\n * | Timezone (ISO-8601 w/ Z) | X | -08, +0530, Z | |\n * | | XX | -0800, +0530, Z | |\n * | | XXX | -08:00, +05:30, Z | |\n * | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | x | -08, +0530, +00 | |\n * | | xx | -0800, +0530, +0000 | |\n * | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * | Timezone (GMT) | O...OOO | GMT-8, GMT+5:30, GMT+0 | |\n * | | OOOO | GMT-08:00, GMT+05:30, GMT+00:00 | 2 |\n * | Timezone (specific non-locat.) | z...zzz | GMT-8, GMT+5:30, GMT+0 | 6 |\n * | | zzzz | GMT-08:00, GMT+05:30, GMT+00:00 | 2,6 |\n * | Seconds timestamp | t | 512969520 | 7 |\n * | | tt | ... | 3,7 |\n * | Milliseconds timestamp | T | 512969520900 | 7 |\n * | | TT | ... | 3,7 |\n * | Long localized date | P | 04/29/1453 | 7 |\n * | | PP | Apr 29, 1453 | 7 |\n * | | PPP | April 29th, 1453 | 7 |\n * | | PPPP | Friday, April 29th, 1453 | 2,7 |\n * | Long localized time | p | 12:00 AM | 7 |\n * | | pp | 12:00:00 AM | 7 |\n * | | ppp | 12:00:00 AM GMT+2 | 7 |\n * | | pppp | 12:00:00 AM GMT+02:00 | 2,7 |\n * | Combination of date and time | Pp | 04/29/1453, 12:00 AM | 7 |\n * | | PPpp | Apr 29, 1453, 12:00:00 AM | 7 |\n * | | PPPppp | April 29th, 1453 at ... | 7 |\n * | | PPPPpppp| Friday, April 29th, 1453 at ... | 2,7 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`)\n * the output will be the same as default pattern for this unit, usually\n * the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units\n * are marked with \"2\" in the last column of the table.\n *\n * `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'`\n *\n * `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'`\n *\n * 3. Some patterns could be unlimited length (such as `yyyyyyyy`).\n * The output will be padded with zeros to match the length of the pattern.\n *\n * `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'`\n *\n * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 5. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` always returns the last two digits of a year,\n * while `uu` pads single digit years to 2 characters and returns other years unchanged:\n *\n * | Year | `yy` | `uu` |\n * |------|------|------|\n * | 1 | 01 | 01 |\n * | 14 | 14 | 14 |\n * | 376 | 76 | 376 |\n * | 1453 | 53 | 1453 |\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [getISOWeekYear](https://date-fns.org/docs/getISOWeekYear)\n * and [getWeekYear](https://date-fns.org/docs/getWeekYear)).\n *\n * 6. Specific non-location timezones are currently unavailable in `date-fns`,\n * so right now these tokens fall back to GMT timezones.\n *\n * 7. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `t`: seconds timestamp\n * - `T`: milliseconds timestamp\n * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 8. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 9. `D` and `DD` tokens represent days of the year but they are often confused with days of the month.\n * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n * @param format - The string of tokens\n * @param options - An object with options\n *\n * @returns The formatted date string\n *\n * @throws `date` must not be Invalid Date\n * @throws `options.locale` must contain `localize` property\n * @throws `options.locale` must contain `formatLong` property\n * @throws use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws format string contains an unescaped latin alphabet character\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * const result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')\n * //=> '02/11/2014'\n *\n * @example\n * // Represent 2 July 2014 in Esperanto:\n * import { eoLocale } from 'date-fns/locale/eo'\n * const result = format(new Date(2014, 6, 2), \"do 'de' MMMM yyyy\", {\n * locale: eoLocale\n * })\n * //=> '2-a de julio 2014'\n *\n * @example\n * // Escape string by single quote characters:\n * const result = format(new Date(2014, 6, 2, 15), \"h 'o''clock'\")\n * //=> \"3 o'clock\"\n */\nexport function format(date, formatStr, options) {\n const defaultOptions = getDefaultOptions();\n const locale = options?.locale ?? defaultOptions.locale ?? defaultLocale;\n\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n const originalDate = toDate(date);\n\n if (!isValid(originalDate)) {\n throw new RangeError(\"Invalid time value\");\n }\n\n let parts = formatStr\n .match(longFormattingTokensRegExp)\n .map((substring) => {\n const firstCharacter = substring[0];\n if (firstCharacter === \"p\" || firstCharacter === \"P\") {\n const longFormatter = longFormatters[firstCharacter];\n return longFormatter(substring, locale.formatLong);\n }\n return substring;\n })\n .join(\"\")\n .match(formattingTokensRegExp)\n .map((substring) => {\n // Replace two single quote characters with one single quote character\n if (substring === \"''\") {\n return { isToken: false, value: \"'\" };\n }\n\n const firstCharacter = substring[0];\n if (firstCharacter === \"'\") {\n return { isToken: false, value: cleanEscapedString(substring) };\n }\n\n if (formatters[firstCharacter]) {\n return { isToken: true, value: substring };\n }\n\n if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n throw new RangeError(\n \"Format string contains an unescaped latin alphabet character `\" +\n firstCharacter +\n \"`\",\n );\n }\n\n return { isToken: false, value: substring };\n });\n\n // invoke localize preprocessor (only for french locales at the moment)\n if (locale.localize.preprocessor) {\n parts = locale.localize.preprocessor(originalDate, parts);\n }\n\n const formatterOptions = {\n firstWeekContainsDate,\n weekStartsOn,\n locale,\n };\n\n return parts\n .map((part) => {\n if (!part.isToken) return part.value;\n\n const token = part.value;\n\n if (\n (!options?.useAdditionalWeekYearTokens &&\n isProtectedWeekYearToken(token)) ||\n (!options?.useAdditionalDayOfYearTokens &&\n isProtectedDayOfYearToken(token))\n ) {\n warnOrThrowProtectedError(token, formatStr, String(date));\n }\n\n const formatter = formatters[token[0]];\n return formatter(originalDate, token, locale.localize, formatterOptions);\n })\n .join(\"\");\n}\n\nfunction cleanEscapedString(input) {\n const matched = input.match(escapedStringRegExp);\n\n if (!matched) {\n return input;\n }\n\n return matched[1].replace(doubleQuoteRegExp, \"'\");\n}\n\n// Fallback for modularized imports:\nexport default format;\n","import { compareAsc } from \"./compareAsc.mjs\";\nimport { minutesInDay, minutesInMonth } from \"./constants.mjs\";\nimport { differenceInMonths } from \"./differenceInMonths.mjs\";\nimport { differenceInSeconds } from \"./differenceInSeconds.mjs\";\nimport { toDate } from \"./toDate.mjs\";\nimport { defaultLocale } from \"./_lib/defaultLocale.mjs\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.mjs\";\nimport { getTimezoneOffsetInMilliseconds } from \"./_lib/getTimezoneOffsetInMilliseconds.mjs\";\n\n/**\n * The {@link formatDistance} function options.\n */\n\n/**\n * @name formatDistance\n * @category Common Helpers\n * @summary Return the distance between the given dates in words.\n *\n * @description\n * Return the distance between the given dates in words.\n *\n * | Distance between dates | Result |\n * |-------------------------------------------------------------------|---------------------|\n * | 0 ... 30 secs | less than a minute |\n * | 30 secs ... 1 min 30 secs | 1 minute |\n * | 1 min 30 secs ... 44 mins 30 secs | [2..44] minutes |\n * | 44 mins ... 30 secs ... 89 mins 30 secs | about 1 hour |\n * | 89 mins 30 secs ... 23 hrs 59 mins 30 secs | about [2..24] hours |\n * | 23 hrs 59 mins 30 secs ... 41 hrs 59 mins 30 secs | 1 day |\n * | 41 hrs 59 mins 30 secs ... 29 days 23 hrs 59 mins 30 secs | [2..30] days |\n * | 29 days 23 hrs 59 mins 30 secs ... 44 days 23 hrs 59 mins 30 secs | about 1 month |\n * | 44 days 23 hrs 59 mins 30 secs ... 59 days 23 hrs 59 mins 30 secs | about 2 months |\n * | 59 days 23 hrs 59 mins 30 secs ... 1 yr | [2..12] months |\n * | 1 yr ... 1 yr 3 months | about 1 year |\n * | 1 yr 3 months ... 1 yr 9 month s | over 1 year |\n * | 1 yr 9 months ... 2 yrs | almost 2 years |\n * | N yrs ... N yrs 3 months | about N years |\n * | N yrs 3 months ... N yrs 9 months | over N years |\n * | N yrs 9 months ... N+1 yrs | almost N+1 years |\n *\n * With `options.includeSeconds == true`:\n * | Distance between dates | Result |\n * |------------------------|----------------------|\n * | 0 secs ... 5 secs | less than 5 seconds |\n * | 5 secs ... 10 secs | less than 10 seconds |\n * | 10 secs ... 20 secs | less than 20 seconds |\n * | 20 secs ... 40 secs | half a minute |\n * | 40 secs ... 60 secs | less than a minute |\n * | 60 secs ... 90 secs | 1 minute |\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date\n * @param baseDate - The date to compare with\n * @param options - An object with options\n *\n * @returns The distance in words\n *\n * @throws `date` must not be Invalid Date\n * @throws `baseDate` must not be Invalid Date\n * @throws `options.locale` must contain `formatDistance` property\n *\n * @example\n * // What is the distance between 2 July 2014 and 1 January 2015?\n * const result = formatDistance(new Date(2014, 6, 2), new Date(2015, 0, 1))\n * //=> '6 months'\n *\n * @example\n * // What is the distance between 1 January 2015 00:00:15\n * // and 1 January 2015 00:00:00, including seconds?\n * const result = formatDistance(\n * new Date(2015, 0, 1, 0, 0, 15),\n * new Date(2015, 0, 1, 0, 0, 0),\n * { includeSeconds: true }\n * )\n * //=> 'less than 20 seconds'\n *\n * @example\n * // What is the distance from 1 January 2016\n * // to 1 January 2015, with a suffix?\n * const result = formatDistance(new Date(2015, 0, 1), new Date(2016, 0, 1), {\n * addSuffix: true\n * })\n * //=> 'about 1 year ago'\n *\n * @example\n * // What is the distance between 1 August 2016 and 1 January 2015 in Esperanto?\n * import { eoLocale } from 'date-fns/locale/eo'\n * const result = formatDistance(new Date(2016, 7, 1), new Date(2015, 0, 1), {\n * locale: eoLocale\n * })\n * //=> 'pli ol 1 jaro'\n */\n\nexport function formatDistance(date, baseDate, options) {\n const defaultOptions = getDefaultOptions();\n const locale = options?.locale ?? defaultOptions.locale ?? defaultLocale;\n const minutesInAlmostTwoDays = 2520;\n\n const comparison = compareAsc(date, baseDate);\n\n if (isNaN(comparison)) {\n throw new RangeError(\"Invalid time value\");\n }\n\n const localizeOptions = Object.assign({}, options, {\n addSuffix: options?.addSuffix,\n comparison: comparison,\n });\n\n let dateLeft;\n let dateRight;\n if (comparison > 0) {\n dateLeft = toDate(baseDate);\n dateRight = toDate(date);\n } else {\n dateLeft = toDate(date);\n dateRight = toDate(baseDate);\n }\n\n const seconds = differenceInSeconds(dateRight, dateLeft);\n const offsetInSeconds =\n (getTimezoneOffsetInMilliseconds(dateRight) -\n getTimezoneOffsetInMilliseconds(dateLeft)) /\n 1000;\n const minutes = Math.round((seconds - offsetInSeconds) / 60);\n let months;\n\n // 0 up to 2 mins\n if (minutes < 2) {\n if (options?.includeSeconds) {\n if (seconds < 5) {\n return locale.formatDistance(\"lessThanXSeconds\", 5, localizeOptions);\n } else if (seconds < 10) {\n return locale.formatDistance(\"lessThanXSeconds\", 10, localizeOptions);\n } else if (seconds < 20) {\n return locale.formatDistance(\"lessThanXSeconds\", 20, localizeOptions);\n } else if (seconds < 40) {\n return locale.formatDistance(\"halfAMinute\", 0, localizeOptions);\n } else if (seconds < 60) {\n return locale.formatDistance(\"lessThanXMinutes\", 1, localizeOptions);\n } else {\n return locale.formatDistance(\"xMinutes\", 1, localizeOptions);\n }\n } else {\n if (minutes === 0) {\n return locale.formatDistance(\"lessThanXMinutes\", 1, localizeOptions);\n } else {\n return locale.formatDistance(\"xMinutes\", minutes, localizeOptions);\n }\n }\n\n // 2 mins up to 0.75 hrs\n } else if (minutes < 45) {\n return locale.formatDistance(\"xMinutes\", minutes, localizeOptions);\n\n // 0.75 hrs up to 1.5 hrs\n } else if (minutes < 90) {\n return locale.formatDistance(\"aboutXHours\", 1, localizeOptions);\n\n // 1.5 hrs up to 24 hrs\n } else if (minutes < minutesInDay) {\n const hours = Math.round(minutes / 60);\n return locale.formatDistance(\"aboutXHours\", hours, localizeOptions);\n\n // 1 day up to 1.75 days\n } else if (minutes < minutesInAlmostTwoDays) {\n return locale.formatDistance(\"xDays\", 1, localizeOptions);\n\n // 1.75 days up to 30 days\n } else if (minutes < minutesInMonth) {\n const days = Math.round(minutes / minutesInDay);\n return locale.formatDistance(\"xDays\", days, localizeOptions);\n\n // 1 month up to 2 months\n } else if (minutes < minutesInMonth * 2) {\n months = Math.round(minutes / minutesInMonth);\n return locale.formatDistance(\"aboutXMonths\", months, localizeOptions);\n }\n\n months = differenceInMonths(dateRight, dateLeft);\n\n // 2 months up to 12 months\n if (months < 12) {\n const nearestMonth = Math.round(minutes / minutesInMonth);\n return locale.formatDistance(\"xMonths\", nearestMonth, localizeOptions);\n\n // 1 year up to max Date\n } else {\n const monthsSinceStartOfYear = months % 12;\n const years = Math.trunc(months / 12);\n\n // N years up to 1 years 3 months\n if (monthsSinceStartOfYear < 3) {\n return locale.formatDistance(\"aboutXYears\", years, localizeOptions);\n\n // N years 3 months up to N years 9 months\n } else if (monthsSinceStartOfYear < 9) {\n return locale.formatDistance(\"overXYears\", years, localizeOptions);\n\n // N years 9 months up to N year 12 months\n } else {\n return locale.formatDistance(\"almostXYears\", years + 1, localizeOptions);\n }\n }\n}\n\n// Fallback for modularized imports:\nexport default formatDistance;\n","import { constructNow } from \"./constructNow.mjs\";\nimport { formatDistance } from \"./formatDistance.mjs\";\n\n/**\n * The {@link formatDistanceToNow} function options.\n */\n\n/**\n * @name formatDistanceToNow\n * @category Common Helpers\n * @summary Return the distance between the given date and now in words.\n * @pure false\n *\n * @description\n * Return the distance between the given date and now in words.\n *\n * | Distance to now | Result |\n * |-------------------------------------------------------------------|---------------------|\n * | 0 ... 30 secs | less than a minute |\n * | 30 secs ... 1 min 30 secs | 1 minute |\n * | 1 min 30 secs ... 44 mins 30 secs | [2..44] minutes |\n * | 44 mins ... 30 secs ... 89 mins 30 secs | about 1 hour |\n * | 89 mins 30 secs ... 23 hrs 59 mins 30 secs | about [2..24] hours |\n * | 23 hrs 59 mins 30 secs ... 41 hrs 59 mins 30 secs | 1 day |\n * | 41 hrs 59 mins 30 secs ... 29 days 23 hrs 59 mins 30 secs | [2..30] days |\n * | 29 days 23 hrs 59 mins 30 secs ... 44 days 23 hrs 59 mins 30 secs | about 1 month |\n * | 44 days 23 hrs 59 mins 30 secs ... 59 days 23 hrs 59 mins 30 secs | about 2 months |\n * | 59 days 23 hrs 59 mins 30 secs ... 1 yr | [2..12] months |\n * | 1 yr ... 1 yr 3 months | about 1 year |\n * | 1 yr 3 months ... 1 yr 9 month s | over 1 year |\n * | 1 yr 9 months ... 2 yrs | almost 2 years |\n * | N yrs ... N yrs 3 months | about N years |\n * | N yrs 3 months ... N yrs 9 months | over N years |\n * | N yrs 9 months ... N+1 yrs | almost N+1 years |\n *\n * With `options.includeSeconds == true`:\n * | Distance to now | Result |\n * |---------------------|----------------------|\n * | 0 secs ... 5 secs | less than 5 seconds |\n * | 5 secs ... 10 secs | less than 10 seconds |\n * | 10 secs ... 20 secs | less than 20 seconds |\n * | 20 secs ... 40 secs | half a minute |\n * | 40 secs ... 60 secs | less than a minute |\n * | 60 secs ... 90 secs | 1 minute |\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The given date\n * @param options - The object with options\n *\n * @returns The distance in words\n *\n * @throws `date` must not be Invalid Date\n * @throws `options.locale` must contain `formatDistance` property\n *\n * @example\n * // If today is 1 January 2015, what is the distance to 2 July 2014?\n * const result = formatDistanceToNow(\n * new Date(2014, 6, 2)\n * )\n * //=> '6 months'\n *\n * @example\n * // If now is 1 January 2015 00:00:00,\n * // what is the distance to 1 January 2015 00:00:15, including seconds?\n * const result = formatDistanceToNow(\n * new Date(2015, 0, 1, 0, 0, 15),\n * {includeSeconds: true}\n * )\n * //=> 'less than 20 seconds'\n *\n * @example\n * // If today is 1 January 2015,\n * // what is the distance to 1 January 2016, with a suffix?\n * const result = formatDistanceToNow(\n * new Date(2016, 0, 1),\n * {addSuffix: true}\n * )\n * //=> 'in about 1 year'\n *\n * @example\n * // If today is 1 January 2015,\n * // what is the distance to 1 August 2016 in Esperanto?\n * const eoLocale = require('date-fns/locale/eo')\n * const result = formatDistanceToNow(\n * new Date(2016, 7, 1),\n * {locale: eoLocale}\n * )\n * //=> 'pli ol 1 jaro'\n */\nexport function formatDistanceToNow(date, options) {\n return formatDistance(date, constructNow(date), options);\n}\n\n// Fallback for modularized imports:\nexport default formatDistanceToNow;\n","import { toDate } from \"./toDate.mjs\";\nimport { addLeadingZeros } from \"./_lib/addLeadingZeros.mjs\";\n\n/**\n * The {@link formatISO} function options.\n */\n\n/**\n * @name formatISO\n * @category Common Helpers\n * @summary Format the date according to the ISO 8601 standard (https://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a003169814.htm).\n *\n * @description\n * Return the formatted date string in ISO 8601 format. Options may be passed to control the parts and notations of the date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n * @param options - An object with options.\n *\n * @returns The formatted date string (in loca.l time zone)\n *\n * @throws `date` must not be Invalid Date\n *\n * @example\n * // Represent 18 September 2019 in ISO 8601 format (local time zone is UTC):\n * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52))\n * //=> '2019-09-18T19:00:52Z'\n *\n * @example\n * // Represent 18 September 2019 in ISO 8601, short format (local time zone is UTC):\n * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52), { format: 'basic' })\n * //=> '20190918T190052'\n *\n * @example\n * // Represent 18 September 2019 in ISO 8601 format, date only:\n * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52), { representation: 'date' })\n * //=> '2019-09-18'\n *\n * @example\n * // Represent 18 September 2019 in ISO 8601 format, time only (local time zone is UTC):\n * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52), { representation: 'time' })\n * //=> '19:00:52Z'\n */\nexport function formatISO(date, options) {\n const _date = toDate(date);\n\n if (isNaN(_date.getTime())) {\n throw new RangeError(\"Invalid time value\");\n }\n\n const format = options?.format ?? \"extended\";\n const representation = options?.representation ?? \"complete\";\n\n let result = \"\";\n let tzOffset = \"\";\n\n const dateDelimiter = format === \"extended\" ? \"-\" : \"\";\n const timeDelimiter = format === \"extended\" ? \":\" : \"\";\n\n // Representation is either 'date' or 'complete'\n if (representation !== \"time\") {\n const day = addLeadingZeros(_date.getDate(), 2);\n const month = addLeadingZeros(_date.getMonth() + 1, 2);\n const year = addLeadingZeros(_date.getFullYear(), 4);\n\n // yyyyMMdd or yyyy-MM-dd.\n result = `${year}${dateDelimiter}${month}${dateDelimiter}${day}`;\n }\n\n // Representation is either 'time' or 'complete'\n if (representation !== \"date\") {\n // Add the timezone.\n const offset = _date.getTimezoneOffset();\n\n if (offset !== 0) {\n const absoluteOffset = Math.abs(offset);\n const hourOffset = addLeadingZeros(Math.trunc(absoluteOffset / 60), 2);\n const minuteOffset = addLeadingZeros(absoluteOffset % 60, 2);\n // If less than 0, the sign is +, because it is ahead of time.\n const sign = offset < 0 ? \"+\" : \"-\";\n\n tzOffset = `${sign}${hourOffset}:${minuteOffset}`;\n } else {\n tzOffset = \"Z\";\n }\n\n const hour = addLeadingZeros(_date.getHours(), 2);\n const minute = addLeadingZeros(_date.getMinutes(), 2);\n const second = addLeadingZeros(_date.getSeconds(), 2);\n\n // If there's also date, separate it with time with 'T'\n const separator = result === \"\" ? \"\" : \"T\";\n\n // Creates a time string consisting of hour, minute, and second, separated by delimiters, if defined.\n const time = [hour, minute, second].join(timeDelimiter);\n\n // HHmmss or HH:mm:ss.\n result = `${result}${separator}${time}${tzOffset}`;\n }\n\n return result;\n}\n\n// Fallback for modularized imports:\nexport default formatISO;\n","import { addDays } from \"./addDays.mjs\";\n\n/**\n * @name subDays\n * @category Day Helpers\n * @summary Subtract the specified number of days from the given date.\n *\n * @description\n * Subtract the specified number of days from the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param amount - The amount of days to be subtracted.\n *\n * @returns The new date with the days subtracted\n *\n * @example\n * // Subtract 10 days from 1 September 2014:\n * const result = subDays(new Date(2014, 8, 1), 10)\n * //=> Fri Aug 22 2014 00:00:00\n */\nexport function subDays(date, amount) {\n return addDays(date, -amount);\n}\n\n// Fallback for modularized imports:\nexport default subDays;\n","import { addHours } from \"./addHours.mjs\";\n\n/**\n * @name subHours\n * @category Hour Helpers\n * @summary Subtract the specified number of hours from the given date.\n *\n * @description\n * Subtract the specified number of hours from the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param amount - The amount of hours to be subtracted.\n *\n * @returns The new date with the hours subtracted\n *\n * @example\n * // Subtract 2 hours from 11 July 2014 01:00:00:\n * const result = subHours(new Date(2014, 6, 11, 1, 0), 2)\n * //=> Thu Jul 10 2014 23:00:00\n */\nexport function subHours(date, amount) {\n return addHours(date, -amount);\n}\n\n// Fallback for modularized imports:\nexport default subHours;\n","import { addMinutes } from \"./addMinutes.mjs\";\n\n/**\n * @name subMinutes\n * @category Minute Helpers\n * @summary Subtract the specified number of minutes from the given date.\n *\n * @description\n * Subtract the specified number of minutes from the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param amount - The amount of minutes to be subtracted.\n *\n * @returns The new date with the minutes subtracted\n *\n * @example\n * // Subtract 30 minutes from 10 July 2014 12:00:00:\n * const result = subMinutes(new Date(2014, 6, 10, 12, 0), 30)\n * //=> Thu Jul 10 2014 11:30:00\n */\nexport function subMinutes(date, amount) {\n return addMinutes(date, -amount);\n}\n\n// Fallback for modularized imports:\nexport default subMinutes;\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\n\nexport { mergeClasses };\n//# sourceMappingURL=mergeClasses.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\n\nexport { toKebabCase };\n//# sourceMappingURL=toKebabCase.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\n\nexport { toCamelCase };\n//# sourceMappingURL=toCamelCase.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { toCamelCase } from './toCamelCase.js';\n\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\n\nexport { toPascalCase };\n//# sourceMappingURL=toPascalCase.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n return false;\n};\n\nexport { hasA11yProp };\n//# sourceMappingURL=hasA11yProp.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.js';\nimport { hasA11yProp } from './shared/src/utils/hasA11yProp.js';\nimport { mergeClasses } from './shared/src/utils/mergeClasses.js';\n\nconst Icon = forwardRef(\n ({\n color = \"currentColor\",\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = \"\",\n children,\n iconNode,\n ...rest\n }, ref) => createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,\n className: mergeClasses(\"lucide\", className),\n ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n )\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses } from './shared/src/utils/mergeClasses.js';\nimport { toKebabCase } from './shared/src/utils/toKebabCase.js';\nimport { toPascalCase } from './shared/src/utils/toPascalCase.js';\nimport Icon from './Icon.js';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className\n ),\n ...props\n })\n );\n Component.displayName = toPascalCase(iconName);\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M8 2v4\", key: \"1cmpym\" }],\n [\"path\", { d: \"M16 2v4\", key: \"4m81vk\" }],\n [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"4\", rx: \"2\", key: \"1hopcy\" }],\n [\"path\", { d: \"M3 10h18\", key: \"8toen8\" }]\n];\nconst Calendar = createLucideIcon(\"calendar\", __iconNode);\n\nexport { __iconNode, Calendar as default };\n//# sourceMappingURL=calendar.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"M20 6 9 17l-5-5\", key: \"1gmf2c\" }]];\nconst Check = createLucideIcon(\"check\", __iconNode);\n\nexport { __iconNode, Check as default };\n//# sourceMappingURL=check.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m6 9 6 6 6-6\", key: \"qrunsl\" }]];\nconst ChevronDown = createLucideIcon(\"chevron-down\", __iconNode);\n\nexport { __iconNode, ChevronDown as default };\n//# sourceMappingURL=chevron-down.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m9 18 6-6-6-6\", key: \"mthhwq\" }]];\nconst ChevronRight = createLucideIcon(\"chevron-right\", __iconNode);\n\nexport { __iconNode, ChevronRight as default };\n//# sourceMappingURL=chevron-right.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m18 15-6-6-6 6\", key: \"153udz\" }]];\nconst ChevronUp = createLucideIcon(\"chevron-up\", __iconNode);\n\nexport { __iconNode, ChevronUp as default };\n//# sourceMappingURL=chevron-up.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"m7 15 5 5 5-5\", key: \"1hf1tw\" }],\n [\"path\", { d: \"m7 9 5-5 5 5\", key: \"sgt6xg\" }]\n];\nconst ChevronsUpDown = createLucideIcon(\"chevrons-up-down\", __iconNode);\n\nexport { __iconNode, ChevronsUpDown as default };\n//# sourceMappingURL=chevrons-up-down.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"line\", { x1: \"12\", x2: \"12\", y1: \"8\", y2: \"12\", key: \"1pkeuh\" }],\n [\"line\", { x1: \"12\", x2: \"12.01\", y1: \"16\", y2: \"16\", key: \"4dfq90\" }]\n];\nconst CircleAlert = createLucideIcon(\"circle-alert\", __iconNode);\n\nexport { __iconNode, CircleAlert as default };\n//# sourceMappingURL=circle-alert.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M21.801 10A10 10 0 1 1 17 3.335\", key: \"yps3ct\" }],\n [\"path\", { d: \"m9 11 3 3L22 4\", key: \"1pflzl\" }]\n];\nconst CircleCheckBig = createLucideIcon(\"circle-check-big\", __iconNode);\n\nexport { __iconNode, CircleCheckBig as default };\n//# sourceMappingURL=circle-check-big.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"m9 12 2 2 4-4\", key: \"dzmm74\" }]\n];\nconst CircleCheck = createLucideIcon(\"circle-check\", __iconNode);\n\nexport { __iconNode, CircleCheck as default };\n//# sourceMappingURL=circle-check.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"m15 9-6 6\", key: \"1uzhvr\" }],\n [\"path\", { d: \"m9 9 6 6\", key: \"z0biqf\" }]\n];\nconst CircleX = createLucideIcon(\"circle-x\", __iconNode);\n\nexport { __iconNode, CircleX as default };\n//# sourceMappingURL=circle-x.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M12 6v6l4 2\", key: \"mmk7yg\" }],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }]\n];\nconst Clock = createLucideIcon(\"clock\", __iconNode);\n\nexport { __iconNode, Clock as default };\n//# sourceMappingURL=clock.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { width: \"14\", height: \"14\", x: \"8\", y: \"8\", rx: \"2\", ry: \"2\", key: \"17jyea\" }],\n [\"path\", { d: \"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\", key: \"zix9uf\" }]\n];\nconst Copy = createLucideIcon(\"copy\", __iconNode);\n\nexport { __iconNode, Copy as default };\n//# sourceMappingURL=copy.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0\",\n key: \"1nclc0\"\n }\n ],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }]\n];\nconst Eye = createLucideIcon(\"eye\", __iconNode);\n\nexport { __iconNode, Eye as default };\n//# sourceMappingURL=eye.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"M21 12a9 9 0 1 1-6.219-8.56\", key: \"13zald\" }]];\nconst LoaderCircle = createLucideIcon(\"loader-circle\", __iconNode);\n\nexport { __iconNode, LoaderCircle as default };\n//# sourceMappingURL=loader-circle.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }],\n [\"path\", { d: \"M12 5v14\", key: \"s699le\" }]\n];\nconst Plus = createLucideIcon(\"plus\", __iconNode);\n\nexport { __iconNode, Plus as default };\n//# sourceMappingURL=plus.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\", key: \"v9h5vc\" }],\n [\"path\", { d: \"M21 3v5h-5\", key: \"1q7to0\" }],\n [\"path\", { d: \"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\", key: \"3uifl3\" }],\n [\"path\", { d: \"M8 16H3v5\", key: \"1cv678\" }]\n];\nconst RefreshCw = createLucideIcon(\"refresh-cw\", __iconNode);\n\nexport { __iconNode, RefreshCw as default };\n//# sourceMappingURL=refresh-cw.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8\", key: \"1p45f6\" }],\n [\"path\", { d: \"M21 3v5h-5\", key: \"1q7to0\" }]\n];\nconst RotateCw = createLucideIcon(\"rotate-cw\", __iconNode);\n\nexport { __iconNode, RotateCw as default };\n//# sourceMappingURL=rotate-cw.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"m21 21-4.34-4.34\", key: \"14j7rj\" }],\n [\"circle\", { cx: \"11\", cy: \"11\", r: \"8\", key: \"4ej97u\" }]\n];\nconst Search = createLucideIcon(\"search\", __iconNode);\n\nexport { __iconNode, Search as default };\n//# sourceMappingURL=search.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\", key: \"1m0v6g\" }],\n [\n \"path\",\n {\n d: \"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z\",\n key: \"ohrbg2\"\n }\n ]\n];\nconst SquarePen = createLucideIcon(\"square-pen\", __iconNode);\n\nexport { __iconNode, SquarePen as default };\n//# sourceMappingURL=square-pen.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M10 11v6\", key: \"nco0om\" }],\n [\"path\", { d: \"M14 11v6\", key: \"outv1u\" }],\n [\"path\", { d: \"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\", key: \"miytrc\" }],\n [\"path\", { d: \"M3 6h18\", key: \"d0wm0j\" }],\n [\"path\", { d: \"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\", key: \"e791ji\" }]\n];\nconst Trash2 = createLucideIcon(\"trash-2\", __iconNode);\n\nexport { __iconNode, Trash2 as default };\n//# sourceMappingURL=trash-2.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\",\n key: \"wmoenq\"\n }\n ],\n [\"path\", { d: \"M12 9v4\", key: \"juzpu7\" }],\n [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }]\n];\nconst TriangleAlert = createLucideIcon(\"triangle-alert\", __iconNode);\n\nexport { __iconNode, TriangleAlert as default };\n//# sourceMappingURL=triangle-alert.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\", key: \"975kel\" }],\n [\"circle\", { cx: \"12\", cy: \"7\", r: \"4\", key: \"17ys0d\" }]\n];\nconst User = createLucideIcon(\"user\", __iconNode);\n\nexport { __iconNode, User as default };\n//# sourceMappingURL=user.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M18 6 6 18\", key: \"1bl5f8\" }],\n [\"path\", { d: \"m6 6 12 12\", key: \"d8bk6v\" }]\n];\nconst X = createLucideIcon(\"x\", __iconNode);\n\nexport { __iconNode, X as default };\n//# sourceMappingURL=x.js.map\n","import * as React from 'react';\nimport { Check, ChevronsUpDown, X } from 'lucide-react';\nimport { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from 'cmdk';\nimport * as Popover from '@radix-ui/react-popover';\nimport { cn } from '../../lib/utils';\n\nexport interface ComboboxOption {\n value: string;\n label: string;\n count?: number;\n}\n\nexport interface ComboboxProps {\n options: ComboboxOption[];\n value: string;\n onValueChange: (value: string) => void;\n placeholder?: string;\n searchPlaceholder?: string;\n emptyMessage?: string;\n disabled?: boolean;\n loading?: boolean;\n className?: string;\n /** Allow clearing the selection */\n clearable?: boolean;\n /** Show \"All\" option at the top */\n showAllOption?: boolean;\n allOptionLabel?: string;\n}\n\n/**\n * Combobox component with type-ahead search and fuzzy matching.\n * Built on cmdk for search functionality and Radix Popover for positioning.\n */\nexport function Combobox({\n options,\n value,\n onValueChange,\n placeholder = 'Select...',\n searchPlaceholder = 'Search...',\n emptyMessage = 'No results found.',\n disabled = false,\n loading = false,\n className,\n clearable = false,\n showAllOption = true,\n allOptionLabel = 'All',\n}: ComboboxProps) {\n const [open, setOpen] = React.useState(false);\n const [search, setSearch] = React.useState('');\n\n // Find current selected option for display\n const selectedOption = options.find((opt) => opt.value === value);\n const displayValue = selectedOption\n ? selectedOption.count !== undefined\n ? `${selectedOption.label} (${selectedOption.count})`\n : selectedOption.label\n : value === '' && showAllOption\n ? allOptionLabel\n : placeholder;\n\n const handleSelect = React.useCallback(\n (selectedValue: string) => {\n onValueChange(selectedValue === value ? '' : selectedValue);\n setOpen(false);\n setSearch('');\n },\n [onValueChange, value]\n );\n\n const handleClear = React.useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n onValueChange('');\n },\n [onValueChange]\n );\n\n // Custom fuzzy filter function\n const filterOptions = React.useCallback(\n (optionValue: string, searchQuery: string): number => {\n if (!searchQuery) return 1;\n\n const option = options.find((o) => o.value === optionValue);\n const label = option?.label || optionValue;\n const lowerLabel = label.toLowerCase();\n const lowerSearch = searchQuery.toLowerCase();\n\n // Exact match\n if (lowerLabel === lowerSearch) return 1;\n\n // Starts with\n if (lowerLabel.startsWith(lowerSearch)) return 0.9;\n\n // Contains\n if (lowerLabel.includes(lowerSearch)) return 0.8;\n\n // Fuzzy match - check if all search chars appear in order\n let searchIdx = 0;\n for (let i = 0; i < lowerLabel.length && searchIdx < lowerSearch.length; i++) {\n if (lowerLabel[i] === lowerSearch[searchIdx]) {\n searchIdx++;\n }\n }\n if (searchIdx === lowerSearch.length) return 0.6;\n\n return 0;\n },\n [options]\n );\n\n return (\n <Popover.Root open={open} onOpenChange={setOpen}>\n <Popover.Trigger asChild>\n <button\n type=\"button\"\n role=\"combobox\"\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n disabled={disabled || loading}\n className={cn(\n 'flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background',\n 'placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n >\n <span className=\"truncate text-left flex-1\">\n {loading ? 'Loading...' : displayValue}\n </span>\n <div className=\"flex items-center gap-1 ml-2\">\n {clearable && value && !disabled && (\n <span\n role=\"button\"\n tabIndex={0}\n onClick={handleClear}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n handleClear(e as unknown as React.MouseEvent);\n }\n }}\n className=\"rounded-sm opacity-50 hover:opacity-100 cursor-pointer\"\n >\n <X className=\"h-3 w-3\" />\n </span>\n )}\n <ChevronsUpDown className=\"h-4 w-4 shrink-0 opacity-50\" />\n </div>\n </button>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content\n className={cn(\n 'z-50 min-w-[var(--radix-popover-trigger-width)] overflow-hidden rounded-md border shadow-md',\n 'bg-white dark:bg-slate-900 text-foreground',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n 'data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2'\n )}\n sideOffset={4}\n align=\"start\"\n >\n <Command\n filter={filterOptions}\n className=\"w-full\"\n >\n <div className=\"flex items-center border-b px-3\">\n <CommandInput\n placeholder={searchPlaceholder}\n value={search}\n onValueChange={setSearch}\n className=\"flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50\"\n />\n </div>\n <CommandList className=\"max-h-[300px] overflow-y-auto p-1\">\n <CommandEmpty className=\"py-6 text-center text-sm text-muted-foreground\">\n {emptyMessage}\n </CommandEmpty>\n <CommandGroup>\n {showAllOption && (\n <CommandItem\n value=\"_all\"\n onSelect={() => handleSelect('')}\n className={cn(\n 'relative flex cursor-pointer select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none',\n 'data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground',\n 'hover:bg-accent hover:text-accent-foreground'\n )}\n >\n <Check\n className={cn(\n 'mr-2 h-4 w-4',\n value === '' ? 'opacity-100' : 'opacity-0'\n )}\n />\n {allOptionLabel}\n </CommandItem>\n )}\n {options.map((option) => (\n <CommandItem\n key={option.value}\n value={option.value}\n onSelect={() => handleSelect(option.value)}\n className={cn(\n 'relative flex cursor-pointer select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none',\n 'data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground',\n 'hover:bg-accent hover:text-accent-foreground'\n )}\n >\n <Check\n className={cn(\n 'mr-2 h-4 w-4',\n value === option.value ? 'opacity-100' : 'opacity-0'\n )}\n />\n <span className=\"flex-1 truncate\">{option.label}</span>\n {option.count !== undefined && (\n <span className=\"ml-2 text-xs text-muted-foreground\">\n ({option.count})\n </span>\n )}\n </CommandItem>\n ))}\n </CommandGroup>\n </CommandList>\n </Command>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n );\n}\n","import * as React from 'react';\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox';\nimport { Check } from 'lucide-react';\n\nimport { cn } from '../../lib/utils';\n\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n 'peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground',\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n className={cn('flex items-center justify-center text-current')}\n >\n <Check className=\"h-4 w-4\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n));\nCheckbox.displayName = CheckboxPrimitive.Root.displayName;\n\nexport { Checkbox };\n","import * as React from 'react';\nimport { Calendar, ChevronDown } from 'lucide-react';\nimport * as Popover from '@radix-ui/react-popover';\nimport { cn } from '../../lib/utils';\nimport { Button } from './button';\nimport { Input } from './input';\nimport { Label } from './label';\n\nexport interface TimeRangePreset {\n key: string;\n label: string;\n}\n\nexport interface TimeRangeDropdownProps {\n /** Available time range presets */\n presets: TimeRangePreset[];\n /** Currently selected preset key, or 'custom' for custom range */\n selectedPreset: string;\n /** Handler when a preset is selected */\n onPresetSelect: (presetKey: string) => void;\n /** Handler when custom range is applied */\n onCustomRangeApply: (start: string, end: string) => void;\n /** Initial custom start value (datetime-local format) */\n customStart?: string;\n /** Initial custom end value (datetime-local format) */\n customEnd?: string;\n /** Whether the dropdown is disabled */\n disabled?: boolean;\n /** Additional class name */\n className?: string;\n /** Display label for the selected value */\n displayLabel?: string;\n}\n\n/**\n * TimeRangeDropdown - A compact dropdown for selecting time ranges\n */\nexport function TimeRangeDropdown({\n presets,\n selectedPreset,\n onPresetSelect,\n onCustomRangeApply,\n customStart: initialCustomStart,\n customEnd: initialCustomEnd,\n disabled = false,\n className,\n displayLabel,\n}: TimeRangeDropdownProps) {\n const [open, setOpen] = React.useState(false);\n const [showCustomInputs, setShowCustomInputs] = React.useState(false);\n const [customStart, setCustomStart] = React.useState(initialCustomStart || '');\n const [customEnd, setCustomEnd] = React.useState(initialCustomEnd || '');\n\n // Update custom values when props change\n React.useEffect(() => {\n if (initialCustomStart) setCustomStart(initialCustomStart);\n if (initialCustomEnd) setCustomEnd(initialCustomEnd);\n }, [initialCustomStart, initialCustomEnd]);\n\n const selectedPresetObj = presets.find((p) => p.key === selectedPreset);\n const label = displayLabel || selectedPresetObj?.label || 'Select time range';\n\n const handlePresetClick = (presetKey: string) => {\n onPresetSelect(presetKey);\n setShowCustomInputs(false);\n setOpen(false);\n };\n\n const handleCustomClick = () => {\n setShowCustomInputs(true);\n };\n\n const handleCustomApply = () => {\n if (customStart && customEnd) {\n onCustomRangeApply(customStart, customEnd);\n setShowCustomInputs(false);\n setOpen(false);\n }\n };\n\n const handleCustomCancel = () => {\n setShowCustomInputs(false);\n };\n\n return (\n <Popover.Root open={open} onOpenChange={setOpen}>\n <Popover.Trigger asChild>\n <button\n type=\"button\"\n disabled={disabled}\n className={cn(\n 'flex h-7 items-center gap-2 rounded-md border border-input bg-background px-2 text-xs ring-offset-background',\n 'hover:bg-accent hover:text-accent-foreground',\n 'focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n >\n <Calendar className=\"h-4 w-4 text-muted-foreground\" />\n <span className=\"whitespace-nowrap\">{label}</span>\n <ChevronDown className=\"h-4 w-4 text-muted-foreground\" />\n </button>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content\n className={cn(\n 'z-50 min-w-[200px] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n 'data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2'\n )}\n sideOffset={4}\n align=\"end\"\n >\n {!showCustomInputs ? (\n <div className=\"p-1\">\n {presets.map((preset) => (\n <button\n key={preset.key}\n type=\"button\"\n onClick={() => handlePresetClick(preset.key)}\n className={cn(\n 'relative flex w-full cursor-pointer select-none items-center rounded-sm px-3 py-2 text-sm outline-none',\n 'hover:bg-accent hover:text-accent-foreground',\n selectedPreset === preset.key && 'bg-accent text-accent-foreground font-medium'\n )}\n >\n {preset.label}\n </button>\n ))}\n <div className=\"my-1 h-px bg-border\" />\n <button\n type=\"button\"\n onClick={handleCustomClick}\n className={cn(\n 'relative flex w-full cursor-pointer select-none items-center rounded-sm px-3 py-2 text-sm outline-none',\n 'hover:bg-accent hover:text-accent-foreground',\n selectedPreset === 'custom' && 'bg-accent text-accent-foreground font-medium'\n )}\n >\n Custom range...\n </button>\n </div>\n ) : (\n <div className=\"p-4 min-w-[280px]\">\n <div className=\"flex flex-col gap-3\">\n <div className=\"flex flex-col gap-1.5\">\n <Label\n htmlFor=\"time-range-start\"\n className=\"text-xs text-muted-foreground font-semibold uppercase tracking-tight\"\n >\n Start\n </Label>\n <Input\n id=\"time-range-start\"\n type=\"datetime-local\"\n value={customStart}\n onChange={(e) => setCustomStart(e.target.value)}\n className=\"w-full\"\n disabled={disabled}\n />\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <Label\n htmlFor=\"time-range-end\"\n className=\"text-xs text-muted-foreground font-semibold uppercase tracking-tight\"\n >\n End\n </Label>\n <Input\n id=\"time-range-end\"\n type=\"datetime-local\"\n value={customEnd}\n onChange={(e) => setCustomEnd(e.target.value)}\n className=\"w-full\"\n disabled={disabled}\n />\n </div>\n </div>\n <div className=\"flex justify-end gap-2 mt-4 pt-3 border-t border-border\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleCustomCancel}\n >\n Back\n </Button>\n <Button\n type=\"button\"\n size=\"sm\"\n onClick={handleCustomApply}\n disabled={!customStart || !customEnd}\n >\n Apply\n </Button>\n </div>\n </div>\n )}\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n );\n}\n","import { useState, useCallback, useEffect, useRef } from 'react';\nimport type { AuditLogQuerySpec } from '../types';\nimport type { ActivityApiClient } from '../api/client';\nimport { useAuditLogFacets } from '../hooks/useAuditLogFacets';\nimport {\n subMinutes,\n subHours,\n subDays,\n formatISO\n} from 'date-fns';\nimport { Input } from './ui/input';\nimport { Textarea } from './ui/textarea';\nimport { Button } from './ui/button';\nimport { Label } from './ui/label';\nimport { Combobox } from './ui/combobox';\nimport { Checkbox } from './ui/checkbox';\nimport { Separator } from './ui/separator';\nimport { TimeRangeDropdown } from './ui/time-range-dropdown';\n\nexport interface SimpleQueryBuilderProps {\n /** API client instance for fetching facets */\n client: ActivityApiClient;\n onFilterChange: (spec: AuditLogQuerySpec) => void;\n initialLimit?: number;\n className?: string;\n disabled?: boolean;\n}\n\ninterface SimpleFilters {\n verb: string;\n resourceType: string;\n namespace: string;\n resourceName: string;\n username: string;\n}\n\ninterface DateTimeRange {\n start: string;\n end: string;\n}\n\ntype PresetKey =\n | 'last15min'\n | 'last1hour'\n | 'last6hours'\n | 'last24hours'\n | 'last7days'\n | 'last30days';\n\nconst TIME_PRESETS: { key: PresetKey; label: string; getValue: () => DateTimeRange }[] = [\n {\n key: 'last15min',\n label: 'Last 15 min',\n getValue: () => ({\n start: formatISO(subMinutes(new Date(), 15)),\n end: formatISO(new Date()),\n }),\n },\n {\n key: 'last1hour',\n label: 'Last hour',\n getValue: () => ({\n start: formatISO(subHours(new Date(), 1)),\n end: formatISO(new Date()),\n }),\n },\n {\n key: 'last6hours',\n label: 'Last 6 hours',\n getValue: () => ({\n start: formatISO(subHours(new Date(), 6)),\n end: formatISO(new Date()),\n }),\n },\n {\n key: 'last24hours',\n label: 'Last 24 hours',\n getValue: () => ({\n start: formatISO(subHours(new Date(), 24)),\n end: formatISO(new Date()),\n }),\n },\n {\n key: 'last7days',\n label: 'Last 7 days',\n getValue: () => ({\n start: formatISO(subDays(new Date(), 7)),\n end: formatISO(new Date()),\n }),\n },\n {\n key: 'last30days',\n label: 'Last 30 days',\n getValue: () => ({\n start: formatISO(subDays(new Date(), 30)),\n end: formatISO(new Date()),\n }),\n },\n];\n\n/** Debounce delay for text inputs (ms) */\nconst DEBOUNCE_DELAY = 300;\n\n/**\n * Helper function to convert ISO string to datetime-local format\n */\nconst formatDatetimeLocal = (isoString: string): string => {\n const date = new Date(isoString);\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n const hours = String(date.getHours()).padStart(2, '0');\n const minutes = String(date.getMinutes()).padStart(2, '0');\n return `${year}-${month}-${day}T${hours}:${minutes}`;\n};\n\nexport function SimpleQueryBuilder({\n client,\n onFilterChange,\n initialLimit = 100,\n className = '',\n disabled = false,\n}: SimpleQueryBuilderProps) {\n const [isAdvancedExpanded, setIsAdvancedExpanded] = useState(false);\n const [filters, setFilters] = useState<SimpleFilters>({\n verb: '',\n resourceType: '',\n namespace: '',\n resourceName: '',\n username: '',\n });\n const [limit, setLimit] = useState(initialLimit);\n const [advancedFilter, setAdvancedFilter] = useState('');\n const [useAdvancedFilter, setUseAdvancedFilter] = useState(false);\n\n // Time range state\n const [selectedPreset, setSelectedPreset] = useState<PresetKey | 'custom'>('last24hours');\n const [timeRange, setTimeRange] = useState<DateTimeRange | null>(null);\n const [customStart, setCustomStart] = useState(() =>\n formatDatetimeLocal(formatISO(subDays(new Date(), 1)))\n );\n const [customEnd, setCustomEnd] = useState(() =>\n formatDatetimeLocal(formatISO(new Date()))\n );\n\n // Fetch facets for dynamic filter options\n const { verbs, resources, namespaces, usernames, isLoading: facetsLoading, error: facetsError } = useAuditLogFacets(client, timeRange);\n\n // Log facets error for debugging\n if (facetsError) {\n console.error('Failed to load audit log facets:', facetsError);\n }\n\n // Refs for debouncing\n const debounceTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const isInitialMount = useRef(true);\n\n // Initialize with default time range and trigger initial query\n useEffect(() => {\n const defaultRange = TIME_PRESETS.find(p => p.key === 'last24hours')?.getValue();\n if (defaultRange) {\n setTimeRange(defaultRange);\n }\n }, []);\n\n const generateCEL = useCallback((): string => {\n const parts: string[] = [];\n\n if (filters.verb) {\n parts.push(`verb == \"${filters.verb}\"`);\n }\n if (filters.resourceType) {\n parts.push(`objectRef.resource == \"${filters.resourceType}\"`);\n }\n if (filters.namespace) {\n parts.push(`objectRef.namespace == \"${filters.namespace}\"`);\n }\n if (filters.resourceName) {\n parts.push(`objectRef.name.contains(\"${filters.resourceName}\")`);\n }\n if (filters.username) {\n parts.push(`user.username.contains(\"${filters.username}\")`);\n }\n\n return parts.join(' && ');\n }, [filters]);\n\n // Execute query when filters change (with debouncing for text inputs)\n const executeQuery = useCallback(() => {\n if (!timeRange || disabled) return;\n\n const filter = useAdvancedFilter ? advancedFilter : generateCEL();\n onFilterChange({\n filter,\n limit,\n startTime: timeRange.start,\n endTime: timeRange.end\n });\n }, [useAdvancedFilter, advancedFilter, generateCEL, onFilterChange, limit, timeRange, disabled]);\n\n // Auto-execute query when dropdown filters or time range change (immediate)\n useEffect(() => {\n // Skip the initial mount - we want to wait for timeRange to be set\n if (isInitialMount.current) {\n isInitialMount.current = false;\n return;\n }\n\n // Clear any pending debounced query\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n\n executeQuery();\n }, [filters.verb, filters.resourceType, timeRange, limit, useAdvancedFilter]);\n\n // Auto-execute query when text filters change (debounced)\n useEffect(() => {\n if (isInitialMount.current || !timeRange) return;\n\n // Clear previous timer\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n\n // Set new debounced timer\n debounceTimerRef.current = setTimeout(() => {\n executeQuery();\n }, DEBOUNCE_DELAY);\n\n return () => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n };\n }, [filters.namespace, filters.resourceName, filters.username, advancedFilter]);\n\n const handleFilterChange = useCallback((field: keyof SimpleFilters, value: string) => {\n setFilters(prev => ({ ...prev, [field]: value }));\n }, []);\n\n const handleTimePresetSelect = useCallback((presetKey: string) => {\n const preset = TIME_PRESETS.find(p => p.key === presetKey);\n if (preset) {\n setSelectedPreset(presetKey as PresetKey);\n setTimeRange(preset.getValue());\n }\n }, []);\n\n const handleCustomRangeApply = useCallback((start: string, end: string) => {\n setSelectedPreset('custom');\n setCustomStart(start);\n setCustomEnd(end);\n setTimeRange({\n start: new Date(start).toISOString(),\n end: new Date(end).toISOString(),\n });\n }, []);\n\n const handleLimitChange = useCallback((newLimit: number) => {\n const validLimit = Math.min(Math.max(1, newLimit), 1000);\n setLimit(validLimit);\n }, []);\n\n const handleAdvancedToggle = useCallback(() => {\n if (!isAdvancedExpanded) {\n // When expanding, populate advanced filter with generated CEL\n setAdvancedFilter(generateCEL());\n }\n setIsAdvancedExpanded(!isAdvancedExpanded);\n }, [isAdvancedExpanded, generateCEL]);\n\n const handleUseAdvancedChange = useCallback((checked: boolean | 'indeterminate') => {\n setUseAdvancedFilter(checked === true);\n }, []);\n\n // Get display label for time range\n const getTimeRangeLabel = () => {\n if (selectedPreset === 'custom') {\n if (timeRange?.start && timeRange?.end) {\n const start = new Date(timeRange.start);\n const end = new Date(timeRange.end);\n return `${start.toLocaleDateString()} - ${end.toLocaleDateString()}`;\n }\n return 'Custom';\n }\n const preset = TIME_PRESETS.find(p => p.key === selectedPreset);\n return preset?.label || 'Select time range';\n };\n\n return (\n <div className={`mb-6 pb-6 border-b border-border ${className}`}>\n {/* Filters Row */}\n <div className=\"flex flex-wrap gap-4 items-end\">\n {/* Action Filter */}\n <div className=\"flex flex-col gap-2\">\n <Label className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wide\">Action</Label>\n <Combobox\n options={verbs\n .filter(facet => facet.value)\n .map(facet => ({\n value: facet.value,\n label: facet.value,\n count: facet.count,\n }))}\n value={filters.verb}\n onValueChange={(value) => handleFilterChange('verb', value)}\n placeholder=\"All\"\n searchPlaceholder=\"Search actions...\"\n allOptionLabel=\"All\"\n disabled={disabled || useAdvancedFilter}\n loading={facetsLoading}\n className=\"min-w-[130px]\"\n />\n </div>\n\n {/* Resource Type Filter */}\n <div className=\"flex flex-col gap-2\">\n <Label className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wide\">Resource</Label>\n <Combobox\n options={resources\n .filter(facet => facet.value)\n .map(facet => ({\n value: facet.value,\n label: facet.value,\n count: facet.count,\n }))}\n value={filters.resourceType}\n onValueChange={(value) => handleFilterChange('resourceType', value)}\n placeholder=\"All\"\n searchPlaceholder=\"Search resources...\"\n allOptionLabel=\"All\"\n disabled={disabled || useAdvancedFilter}\n loading={facetsLoading}\n className=\"min-w-[130px]\"\n />\n </div>\n\n {/* Namespace Filter */}\n <div className=\"flex flex-col gap-2\">\n <Label className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wide\">Namespace</Label>\n <Combobox\n options={namespaces\n .filter(facet => facet.value)\n .map(facet => ({\n value: facet.value,\n label: facet.value,\n count: facet.count,\n }))}\n value={filters.namespace}\n onValueChange={(value) => handleFilterChange('namespace', value)}\n placeholder=\"All\"\n searchPlaceholder=\"Search namespaces...\"\n allOptionLabel=\"All\"\n disabled={disabled || useAdvancedFilter}\n loading={facetsLoading}\n className=\"min-w-[130px]\"\n />\n </div>\n\n {/* Username Filter */}\n <div className=\"flex flex-col gap-2\">\n <Label className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wide\">User</Label>\n <Combobox\n options={usernames\n .filter(facet => facet.value)\n .map(facet => ({\n value: facet.value,\n label: facet.value,\n count: facet.count,\n }))}\n value={filters.username}\n onValueChange={(value) => handleFilterChange('username', value)}\n placeholder=\"All\"\n searchPlaceholder=\"Search users...\"\n allOptionLabel=\"All\"\n disabled={disabled || useAdvancedFilter}\n loading={facetsLoading}\n className=\"min-w-[130px]\"\n />\n </div>\n\n {/* Resource Name */}\n <div className=\"flex flex-col gap-2\">\n <Label className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wide\">Name</Label>\n <Input\n type=\"text\"\n value={filters.resourceName}\n onChange={(e) => handleFilterChange('resourceName', e.target.value)}\n placeholder=\"Filter by name...\"\n className=\"min-w-[140px]\"\n disabled={disabled || useAdvancedFilter}\n />\n </div>\n\n {/* Results Limit */}\n <div className=\"flex flex-col gap-2\">\n <Label className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wide\">Limit</Label>\n <Input\n type=\"number\"\n value={limit}\n onChange={(e) => handleLimitChange(parseInt(e.target.value) || 100)}\n min={1}\n max={1000}\n className=\"w-[80px]\"\n disabled={disabled}\n />\n </div>\n\n {/* Toggle Advanced Filters */}\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"whitespace-nowrap text-muted-foreground hover:text-foreground\"\n onClick={handleAdvancedToggle}\n aria-expanded={isAdvancedExpanded}\n >\n {isAdvancedExpanded ? '- CEL' : '+ CEL'}\n </Button>\n\n {/* Time Range Dropdown - Right aligned */}\n <div className=\"flex flex-col gap-2 ml-auto\">\n <Label className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wide\">Time Range</Label>\n <TimeRangeDropdown\n presets={TIME_PRESETS.map(p => ({ key: p.key, label: p.label }))}\n selectedPreset={selectedPreset}\n onPresetSelect={handleTimePresetSelect}\n onCustomRangeApply={handleCustomRangeApply}\n customStart={customStart}\n customEnd={customEnd}\n disabled={disabled}\n displayLabel={getTimeRangeLabel()}\n />\n </div>\n </div>\n\n {/* Advanced Filters (Expandable) */}\n {isAdvancedExpanded && (\n <div className=\"mt-4 pt-4\">\n <Separator className=\"mb-4\" />\n <div className=\"mb-3\">\n <div className=\"flex items-center gap-2\">\n <Checkbox\n id=\"use-cel-expression\"\n checked={useAdvancedFilter}\n onCheckedChange={handleUseAdvancedChange}\n disabled={disabled}\n />\n <Label\n htmlFor=\"use-cel-expression\"\n className=\"text-sm font-medium text-foreground cursor-pointer\"\n >\n Use CEL Expression\n </Label>\n </div>\n </div>\n {useAdvancedFilter && (\n <div className=\"mt-3\">\n <p className=\"m-0 mb-2 text-sm text-muted-foreground\">\n Write your query using CEL syntax for complex filters\n </p>\n <Textarea\n value={advancedFilter}\n onChange={(e) => setAdvancedFilter(e.target.value)}\n placeholder='Example: verb == \"delete\" && objectRef.namespace == \"production\"'\n rows={3}\n className=\"w-full font-mono resize-y\"\n disabled={disabled}\n />\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n","import type { Tenant, TenantLinkResolver, TenantType } from '../types/activity';\nimport { Badge } from './ui/badge';\nimport { cn } from '../lib/utils';\n\nexport interface TenantBadgeProps {\n /** The tenant to display */\n tenant: Tenant;\n /** Optional resolver function to make the badge clickable */\n tenantLinkResolver?: TenantLinkResolver;\n /** Additional CSS class */\n className?: string;\n /** Size variant */\n size?: 'default' | 'compact';\n}\n\n/**\n * Get icon for tenant type\n */\nfunction getTenantIcon(type: TenantType) {\n switch (type) {\n case 'organization':\n return (\n <svg className=\"w-3 h-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0h5M9 7h1m-1 4h1m4-4h1m-1 4h1m-5 10v-5a1 1 0 011-1h2a1 1 0 011 1v5m-4 0h4\" />\n </svg>\n );\n case 'project':\n return (\n <svg className=\"w-3 h-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z\" />\n </svg>\n );\n case 'user':\n return (\n <svg className=\"w-3 h-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z\" />\n </svg>\n );\n case 'platform':\n return (\n <svg className=\"w-3 h-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3.055 11H5a2 2 0 012 2v1a2 2 0 002 2 2 2 0 012 2v2.945M8 3.935V5.5A2.5 2.5 0 0010.5 8h.5a2 2 0 012 2 2 2 0 104 0 2 2 0 012-2h1.064M15 20.488V18a2 2 0 012-2h3.064M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n );\n default:\n return null;\n }\n}\n\n/**\n * Get badge variant based on tenant type\n */\nfunction getTenantBadgeVariant(type: TenantType): 'default' | 'secondary' | 'outline' {\n switch (type) {\n case 'organization':\n return 'default';\n case 'project':\n return 'secondary';\n case 'user':\n return 'outline';\n case 'platform':\n return 'outline';\n default:\n return 'secondary';\n }\n}\n\n/**\n * TenantBadge displays tenant information in a compact badge format\n * Renders as a clickable link if tenantLinkResolver is provided and returns a URL\n */\nexport function TenantBadge({\n tenant,\n tenantLinkResolver,\n className = '',\n size = 'default',\n}: TenantBadgeProps) {\n const icon = getTenantIcon(tenant.type);\n const variant = getTenantBadgeVariant(tenant.type);\n const url = tenantLinkResolver?.(tenant);\n\n const badgeContent = (\n <Badge\n variant={variant}\n className={cn(\n 'inline-flex items-center gap-1',\n size === 'compact' ? 'text-xs h-4 py-0 px-1.5' : 'text-xs h-5 px-2',\n url && 'cursor-pointer hover:opacity-80 transition-opacity',\n className\n )}\n >\n {icon}\n <span className=\"font-medium\">{tenant.type}</span>\n {tenant.type !== 'platform' && (\n <>\n <span className=\"text-muted-foreground\">/</span>\n <span>{tenant.name}</span>\n </>\n )}\n </Badge>\n );\n\n // If we have a URL resolver and it returns a URL, wrap in a link\n if (url) {\n return (\n <a\n href={url}\n className=\"no-underline\"\n onClick={(e) => e.stopPropagation()}\n title={`View ${tenant.type}: ${tenant.name}`}\n >\n {badgeContent}\n </a>\n );\n }\n\n // Otherwise, just render the badge\n return badgeContent;\n}\n","import { useState } from 'react';\nimport { format } from 'date-fns';\nimport type { Event } from '../types';\nimport type { Tenant, TenantLinkResolver, TenantType } from '../types/activity';\nimport { TenantBadge } from './TenantBadge';\nimport { Button } from './ui/button';\nimport { Card } from './ui/card';\nimport { Badge } from './ui/badge';\n\nexport interface AuditEventViewerProps {\n events: Event[];\n className?: string;\n onEventSelect?: (event: Event) => void;\n /** Optional resolver function to make tenant badges clickable */\n tenantLinkResolver?: TenantLinkResolver;\n}\n\n/**\n * Extract tenant information from audit event annotations if present\n * Expected annotations: tenant.type and tenant.name\n */\nfunction extractTenantFromAnnotations(event: Event): Tenant | undefined {\n const annotations = event.annotations;\n if (!annotations) return undefined;\n\n const tenantType = annotations['tenant.type'];\n const tenantName = annotations['tenant.name'];\n\n if (tenantType && tenantName) {\n const validTypes: TenantType[] = ['platform', 'organization', 'project', 'user'];\n if (validTypes.includes(tenantType as TenantType)) {\n return {\n type: tenantType as Tenant['type'],\n name: tenantName,\n };\n }\n }\n\n return undefined;\n}\n\n/**\n * AuditEventViewer displays a list of audit events with details\n */\nexport function AuditEventViewer({\n events,\n className = '',\n onEventSelect,\n tenantLinkResolver,\n}: AuditEventViewerProps) {\n const [selectedEvent, setSelectedEvent] = useState<Event | null>(null);\n const [expandedEvents, setExpandedEvents] = useState<Set<string>>(new Set());\n\n const toggleEventExpansion = (auditId: string) => {\n const newExpanded = new Set(expandedEvents);\n if (expandedEvents.has(auditId)) {\n newExpanded.delete(auditId);\n } else {\n newExpanded.add(auditId);\n }\n setExpandedEvents(newExpanded);\n };\n\n const handleEventClick = (event: Event) => {\n setSelectedEvent(event);\n if (onEventSelect) {\n onEventSelect(event);\n }\n };\n\n const formatTimestamp = (timestamp?: string) => {\n if (!timestamp) return 'N/A';\n try {\n return format(new Date(timestamp), 'yyyy-MM-dd HH:mm:ss');\n } catch {\n return timestamp;\n }\n };\n\n const getVerbBadgeVariant = (verb?: string): 'default' | 'secondary' | 'destructive' | 'outline' | 'success' | 'warning' => {\n switch (verb?.toLowerCase()) {\n case 'create':\n return 'success';\n case 'update':\n case 'patch':\n return 'warning';\n case 'delete':\n return 'destructive';\n case 'get':\n case 'list':\n case 'watch':\n return 'default';\n default:\n return 'secondary';\n }\n };\n\n if (events.length === 0) {\n return (\n <div className={`bg-muted rounded-lg border border-border ${className}`}>\n <div className=\"p-12 text-center text-muted-foreground text-sm\">No events found</div>\n </div>\n );\n }\n\n return (\n <div className={`bg-muted rounded-lg border border-border ${className}`}>\n <div className=\"p-4\">\n {events.map((event) => {\n const auditId = event.auditID || '';\n const isExpanded = expandedEvents.has(auditId);\n const tenant = extractTenantFromAnnotations(event);\n\n return (\n <Card\n key={auditId}\n className={`p-5 mb-3 cursor-pointer transition-all hover:border-primary/50 hover:shadow-sm hover:-translate-y-px ${\n selectedEvent?.auditID === auditId\n ? 'border-primary bg-primary/5 shadow-md'\n : ''\n }`}\n onClick={() => handleEventClick(event)}\n >\n <div className=\"flex justify-between items-center\">\n <div className=\"flex gap-3 items-center flex-1\">\n <Badge variant={getVerbBadgeVariant(event.verb)} className=\"px-3 py-1\">\n {event.verb?.toUpperCase() || 'UNKNOWN'}\n </Badge>\n <span className=\"font-semibold\">\n {event.objectRef?.resource || 'N/A'}\n </span>\n {event.objectRef?.namespace && (\n <span className=\"text-muted-foreground text-sm\">\n ns: {event.objectRef.namespace}\n </span>\n )}\n {event.objectRef?.name && (\n <span className=\"text-foreground/80 text-sm\">{event.objectRef.name}</span>\n )}\n {tenant && (\n <TenantBadge tenant={tenant} tenantLinkResolver={tenantLinkResolver} size=\"compact\" />\n )}\n </div>\n <div className=\"flex gap-4 items-center\">\n <span className=\"text-foreground/80 text-sm\">{event.user?.username || 'N/A'}</span>\n <span className=\"text-muted-foreground text-sm font-mono\">\n {formatTimestamp(event.stageTimestamp)}\n </span>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={(e) => {\n e.stopPropagation();\n toggleEventExpansion(auditId);\n }}\n className=\"text-primary\"\n >\n {isExpanded ? '▼' : '▶'}\n </Button>\n </div>\n </div>\n\n {isExpanded && (\n <div className=\"mt-4 pt-4 border-t border-border\">\n <div className=\"mb-4\">\n <h4 className=\"mt-0 mb-2 text-base text-foreground/80\">Event Information</h4>\n <dl className=\"grid grid-cols-[auto_1fr] gap-2 m-0\">\n <dt className=\"font-semibold text-foreground/80\">Audit ID:</dt>\n <dd className=\"m-0 text-foreground\">{event.auditID || 'N/A'}</dd>\n <dt className=\"font-semibold text-foreground/80\">Stage:</dt>\n <dd className=\"m-0 text-foreground\">{event.stage || 'N/A'}</dd>\n <dt className=\"font-semibold text-foreground/80\">Level:</dt>\n <dd className=\"m-0 text-foreground\">{event.level || 'N/A'}</dd>\n <dt className=\"font-semibold text-foreground/80\">Request URI:</dt>\n <dd className=\"m-0 text-foreground font-mono text-sm break-all\">{event.requestURI || 'N/A'}</dd>\n {event.userAgent && (\n <>\n <dt className=\"font-semibold text-foreground/80\">User Agent:</dt>\n <dd className=\"m-0 text-foreground font-mono text-sm break-all\">{event.userAgent}</dd>\n </>\n )}\n {event.sourceIPs && event.sourceIPs.length > 0 && (\n <>\n <dt className=\"font-semibold text-foreground/80\">Source IPs:</dt>\n <dd className=\"m-0 text-foreground\">{event.sourceIPs.join(', ')}</dd>\n </>\n )}\n </dl>\n </div>\n\n {tenant && (\n <div className=\"mb-4\">\n <h4 className=\"mt-0 mb-2 text-base text-foreground/80\">Tenant</h4>\n <TenantBadge tenant={tenant} tenantLinkResolver={tenantLinkResolver} />\n </div>\n )}\n\n {event.user && (\n <div className=\"mb-4\">\n <h4 className=\"mt-0 mb-2 text-base text-foreground/80\">User Information</h4>\n <dl className=\"grid grid-cols-[auto_1fr] gap-2 m-0\">\n <dt className=\"font-semibold text-foreground/80\">Username:</dt>\n <dd className=\"m-0 text-foreground\">{event.user.username || 'N/A'}</dd>\n <dt className=\"font-semibold text-foreground/80\">UID:</dt>\n <dd className=\"m-0 text-foreground\">{event.user.uid || 'N/A'}</dd>\n {event.user.groups && event.user.groups.length > 0 && (\n <>\n <dt className=\"font-semibold text-foreground/80\">Groups:</dt>\n <dd className=\"m-0 text-foreground\">{event.user.groups.join(', ')}</dd>\n </>\n )}\n </dl>\n </div>\n )}\n\n {event.responseStatus && (\n <div className=\"mb-4\">\n <h4 className=\"mt-0 mb-2 text-base text-foreground/80\">Response Status</h4>\n <dl className=\"grid grid-cols-[auto_1fr] gap-2 m-0\">\n <dt className=\"font-semibold text-foreground/80\">Code:</dt>\n <dd className=\"m-0 text-foreground\">{event.responseStatus.code || 'N/A'}</dd>\n <dt className=\"font-semibold text-foreground/80\">Status:</dt>\n <dd className=\"m-0 text-foreground\">{event.responseStatus.status || 'N/A'}</dd>\n {event.responseStatus.message && (\n <>\n <dt className=\"font-semibold text-foreground/80\">Message:</dt>\n <dd className=\"m-0 text-foreground\">{event.responseStatus.message}</dd>\n </>\n )}\n </dl>\n </div>\n )}\n\n {event.annotations && Object.keys(event.annotations).length > 0 && (\n <div className=\"mb-4\">\n <h4 className=\"mt-0 mb-2 text-base text-foreground/80\">Annotations</h4>\n <dl className=\"grid grid-cols-[auto_1fr] gap-2 m-0\">\n {Object.entries(event.annotations).map(([key, value]) => (\n <div key={key} className=\"contents\">\n <dt className=\"font-semibold text-foreground/80\">{key}:</dt>\n <dd className=\"m-0 text-foreground\">{value}</dd>\n </div>\n ))}\n </dl>\n </div>\n )}\n\n {(event.requestObject || event.responseObject) ? (\n <div className=\"mb-4\">\n <h4 className=\"mt-0 mb-2 text-base text-foreground/80\">Request/Response Data</h4>\n {event.requestObject ? (\n <details className=\"mt-2\">\n <summary className=\"cursor-pointer font-semibold p-2 bg-muted rounded\">Request Object</summary>\n <pre className=\"mt-2 p-4 bg-muted rounded overflow-x-auto text-sm\">{JSON.stringify(event.requestObject, null, 2)}</pre>\n </details>\n ) : null}\n {event.responseObject ? (\n <details className=\"mt-2\">\n <summary className=\"cursor-pointer font-semibold p-2 bg-muted rounded\">Response Object</summary>\n <pre className=\"mt-2 p-4 bg-muted rounded overflow-x-auto text-sm\">{JSON.stringify(event.responseObject, null, 2)}</pre>\n </details>\n ) : null}\n </div>\n ) : null}\n </div>\n )}\n </Card>\n );\n })}\n </div>\n </div>\n );\n}\n","import * as React from 'react';\nimport { X, ChevronDown } from 'lucide-react';\nimport { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from 'cmdk';\nimport * as Popover from '@radix-ui/react-popover';\nimport { cn } from '../../lib/utils';\nimport { Input } from './input';\n\nexport interface FilterChipOption {\n value: string;\n label: string;\n count?: number;\n}\n\nexport interface FilterChipProps {\n /** Label for the filter (e.g., \"Kind\", \"Reason\") */\n label: string;\n /** Selected values */\n values: string[];\n /** Available options for multi-select mode */\n options?: FilterChipOption[];\n /** Handler for value changes */\n onValuesChange: (values: string[]) => void;\n /** Handler for clearing the filter */\n onClear: () => void;\n /** Input mode - typeahead for multi-select, text for text input */\n inputMode?: 'typeahead' | 'text';\n /** Auto-open popover when filter is first added */\n autoOpen?: boolean;\n /** Called when popover closes (useful for cleanup when no value selected) */\n onPopoverClose?: () => void;\n /** Placeholder for text input mode */\n placeholder?: string;\n /** Search placeholder for typeahead mode */\n searchPlaceholder?: string;\n /** Whether the chip is disabled */\n disabled?: boolean;\n /** Additional class name */\n className?: string;\n}\n\n/**\n * FilterChip - A compact pill/chip showing \"Label: Values\" with clear button\n * Clicking opens a popover for editing the filter values\n */\nexport function FilterChip({\n label,\n values,\n options = [],\n onValuesChange,\n onClear,\n inputMode = 'typeahead',\n autoOpen = false,\n onPopoverClose,\n placeholder = 'Enter value...',\n searchPlaceholder = 'Search...',\n disabled = false,\n className,\n}: FilterChipProps) {\n const [open, setOpen] = React.useState(false);\n const hasAutoOpenedRef = React.useRef(false);\n const wasEverOpenRef = React.useRef(false);\n\n // When autoOpen becomes true, open the popover\n React.useEffect(() => {\n if (autoOpen && !hasAutoOpenedRef.current) {\n // Delay to ensure the AddFilterDropdown's popover has fully closed\n // before opening this one. This prevents the new popover from being\n // immediately closed by residual click/focus events from the dropdown.\n hasAutoOpenedRef.current = true;\n requestAnimationFrame(() => {\n setTimeout(() => {\n setOpen(true);\n wasEverOpenRef.current = true;\n }, 500);\n });\n }\n }, [autoOpen]);\n\n // Handle popover open state changes\n const handleOpenChange = React.useCallback(\n (newOpen: boolean) => {\n setOpen(newOpen);\n if (newOpen) {\n wasEverOpenRef.current = true;\n }\n // Only call onPopoverClose if the popover was actually opened at some point\n if (!newOpen && onPopoverClose && wasEverOpenRef.current) {\n onPopoverClose();\n }\n },\n [onPopoverClose]\n );\n const [search, setSearch] = React.useState('');\n const [textValue, setTextValue] = React.useState(values[0] || '');\n\n // Update text value when values change externally (for text input mode)\n React.useEffect(() => {\n if (inputMode === 'text' && values.length > 0) {\n setTextValue(values[0]);\n }\n }, [values, inputMode]);\n\n // Get display value for the chip\n const displayValue = React.useMemo(() => {\n if (inputMode === 'text') {\n return values[0] || '';\n }\n\n if (values.length === 0) return '';\n if (values.length === 1) return values[0];\n if (values.length === 2) return `${values[0]}, ${values[1]}`;\n return `${values.length} selected`;\n }, [values, inputMode]);\n\n // Handle selection in typeahead mode\n const handleSelect = React.useCallback(\n (selectedValue: string) => {\n if (values.includes(selectedValue)) {\n // Remove from selection\n const newValues = values.filter((v) => v !== selectedValue);\n onValuesChange(newValues);\n // If no values left, close the popover\n if (newValues.length === 0) {\n setOpen(false);\n }\n } else {\n // Add to selection\n onValuesChange([...values, selectedValue]);\n }\n },\n [onValuesChange, values]\n );\n\n // Handle remove individual value\n const handleRemoveValue = React.useCallback(\n (e: React.MouseEvent, valueToRemove: string) => {\n e.stopPropagation();\n const newValues = values.filter((v) => v !== valueToRemove);\n onValuesChange(newValues);\n // If no values left, close and clear\n if (newValues.length === 0) {\n setOpen(false);\n }\n },\n [onValuesChange, values]\n );\n\n // Handle clear all\n const handleClearAll = React.useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n onClear();\n setOpen(false);\n },\n [onClear]\n );\n\n // Handle text input change\n const handleTextChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value;\n setTextValue(value);\n onValuesChange(value ? [value] : []);\n },\n [onValuesChange]\n );\n\n // Custom fuzzy filter function for typeahead\n const filterOptions = React.useCallback(\n (optionValue: string, searchQuery: string): number => {\n if (!searchQuery) return 1;\n\n const option = options.find((o) => o.value === optionValue);\n const optionLabel = option?.label || optionValue;\n const lowerLabel = optionLabel.toLowerCase();\n const lowerSearch = searchQuery.toLowerCase();\n\n // Exact match\n if (lowerLabel === lowerSearch) return 1;\n\n // Starts with\n if (lowerLabel.startsWith(lowerSearch)) return 0.9;\n\n // Contains\n if (lowerLabel.includes(lowerSearch)) return 0.8;\n\n // Fuzzy match - check if all search chars appear in order\n let searchIdx = 0;\n for (let i = 0; i < lowerLabel.length && searchIdx < lowerSearch.length; i++) {\n if (lowerLabel[i] === lowerSearch[searchIdx]) {\n searchIdx++;\n }\n }\n if (searchIdx === lowerSearch.length) return 0.6;\n\n return 0;\n },\n [options]\n );\n\n // Find selected options for chips display\n const selectedOptions = options.filter((opt) => values.includes(opt.value));\n\n return (\n <div className={cn('inline-flex items-center', className)}>\n <Popover.Root open={open} onOpenChange={handleOpenChange}>\n <Popover.Trigger asChild>\n <button\n type=\"button\"\n disabled={disabled}\n className={cn(\n 'flex h-7 items-center gap-2 rounded-l-md border border-r-0 border-border bg-secondary px-2 text-xs',\n 'hover:bg-secondary/80 transition-colors',\n 'focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',\n 'disabled:cursor-not-allowed disabled:opacity-50'\n )}\n >\n <span className=\"font-medium text-foreground\">{label}:</span>\n <span className=\"text-foreground truncate max-w-[120px]\">{displayValue}</span>\n <ChevronDown className=\"h-3 w-3 text-muted-foreground ml-1\" />\n </button>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content\n className={cn(\n 'z-50 min-w-[var(--radix-popover-trigger-width)] max-w-[320px] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n 'data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2'\n )}\n sideOffset={4}\n align=\"start\"\n >\n {inputMode === 'typeahead' ? (\n <Command filter={filterOptions} className=\"w-full\">\n <div className=\"flex items-center border-b px-3\">\n <CommandInput\n placeholder={searchPlaceholder}\n value={search}\n onValueChange={setSearch}\n className=\"flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50\"\n />\n </div>\n {/* Selected items chips */}\n {values.length > 0 && (\n <div className=\"flex flex-wrap gap-1 p-2 border-b\">\n {selectedOptions.map((option) => (\n <span\n key={option.value}\n className=\"inline-flex items-center gap-1 px-2 py-0.5 rounded-md bg-accent text-accent-foreground text-xs\"\n >\n {option.label}\n <button\n type=\"button\"\n onClick={(e) => handleRemoveValue(e, option.value)}\n className=\"rounded-sm hover:bg-accent-foreground/20\"\n >\n <X className=\"h-3 w-3\" />\n </button>\n </span>\n ))}\n </div>\n )}\n <CommandList className=\"max-h-[300px] overflow-y-auto p-1\">\n <CommandEmpty className=\"py-6 text-center text-sm text-muted-foreground\">\n No results found.\n </CommandEmpty>\n <CommandGroup>\n {options.map((option) => (\n <CommandItem\n key={option.value}\n value={option.value}\n onSelect={() => handleSelect(option.value)}\n className={cn(\n 'relative flex cursor-pointer select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none',\n 'data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground',\n 'hover:bg-accent hover:text-accent-foreground'\n )}\n >\n <input\n type=\"checkbox\"\n checked={values.includes(option.value)}\n onChange={() => {}}\n className=\"mr-2 h-4 w-4\"\n />\n <span className=\"flex-1 truncate\">{option.label}</span>\n {option.count !== undefined && (\n <span className=\"ml-2 text-xs text-muted-foreground\">\n ({option.count})\n </span>\n )}\n </CommandItem>\n ))}\n </CommandGroup>\n </CommandList>\n </Command>\n ) : (\n <div className=\"p-3\">\n <Input\n type=\"text\"\n value={textValue}\n onChange={handleTextChange}\n placeholder={placeholder}\n className=\"w-full\"\n autoFocus\n />\n </div>\n )}\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n <button\n type=\"button\"\n onClick={handleClearAll}\n disabled={disabled}\n className={cn(\n 'flex h-7 items-center rounded-r-md border border-border bg-secondary px-2',\n 'hover:bg-secondary/80 transition-colors',\n 'focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',\n 'disabled:cursor-not-allowed disabled:opacity-50'\n )}\n aria-label={`Clear ${label} filter`}\n >\n <X className=\"h-3 w-3 text-muted-foreground\" />\n </button>\n </div>\n );\n}\n","import * as React from 'react';\nimport { Plus } from 'lucide-react';\nimport * as Popover from '@radix-ui/react-popover';\nimport { cn } from '../../lib/utils';\n\nexport interface FilterOption {\n id: string;\n label: string;\n icon?: React.ReactNode;\n}\n\nexport interface AddFilterDropdownProps {\n /** Available filter types that can be added */\n availableFilters: FilterOption[];\n /** IDs of filters that are already active */\n activeFilterIds: string[];\n /** Handler called when a filter is selected */\n onAddFilter: (filterId: string) => void;\n /** Whether any filters are currently active */\n hasActiveFilters?: boolean;\n /** Whether the dropdown is disabled */\n disabled?: boolean;\n /** Additional class name */\n className?: string;\n}\n\n/**\n * AddFilterDropdown - Shows \"+ Add Filters\" button that opens a dropdown of available filters\n * Already-active filters are dimmed/disabled in the list\n */\nexport function AddFilterDropdown({\n availableFilters,\n activeFilterIds,\n onAddFilter,\n hasActiveFilters = false,\n disabled = false,\n className,\n}: AddFilterDropdownProps) {\n const [open, setOpen] = React.useState(false);\n\n const handleFilterClick = React.useCallback(\n (filterId: string) => {\n onAddFilter(filterId);\n setOpen(false);\n },\n [onAddFilter]\n );\n\n // Determine if a filter is active\n const isFilterActive = (filterId: string) => activeFilterIds.includes(filterId);\n\n // Get button label\n const buttonLabel = hasActiveFilters ? 'Filters' : 'Add Filters';\n\n return (\n <Popover.Root open={open} onOpenChange={setOpen}>\n <Popover.Trigger asChild>\n <button\n type=\"button\"\n disabled={disabled}\n className={cn(\n 'flex h-7 items-center gap-2 rounded-md border border-dashed border-border bg-background px-2 text-xs',\n 'text-muted-foreground hover:text-foreground hover:border-foreground/50 transition-colors',\n 'focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n >\n <Plus className=\"h-4 w-4\" />\n <span className=\"font-medium\">{buttonLabel}</span>\n </button>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content\n className={cn(\n 'z-50 min-w-[180px] overflow-hidden rounded-md border shadow-md',\n 'bg-white dark:bg-slate-900 text-foreground',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n 'data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2'\n )}\n sideOffset={4}\n align=\"start\"\n >\n <div className=\"p-1\">\n {availableFilters.map((filter) => {\n const active = isFilterActive(filter.id);\n return (\n <button\n key={filter.id}\n type=\"button\"\n onClick={() => !active && handleFilterClick(filter.id)}\n disabled={active}\n className={cn(\n 'relative flex w-full items-center gap-2 rounded-sm px-3 py-2 text-sm outline-none transition-colors',\n active\n ? 'cursor-not-allowed opacity-40'\n : 'cursor-pointer hover:bg-accent hover:text-accent-foreground'\n )}\n >\n {filter.icon && <span className=\"text-muted-foreground\">{filter.icon}</span>}\n <span>{filter.label}</span>\n {active && (\n <span className=\"ml-auto text-xs text-muted-foreground\">(active)</span>\n )}\n </button>\n );\n })}\n </div>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n );\n}\n","import * as React from 'react';\nimport * as Popover from '@radix-ui/react-popover';\nimport { ChevronDown } from 'lucide-react';\nimport { Checkbox } from './ui/checkbox';\nimport { cn } from '../lib/utils';\n\nexport interface ActionMultiSelectOption {\n value: string;\n label: string;\n count?: number;\n}\n\nexport interface ActionMultiSelectProps {\n /** Current selected verbs */\n value: string[];\n /** Handler called when selection changes */\n onChange: (verbs: string[]) => void;\n /** Additional CSS class */\n className?: string;\n /** Whether the select is disabled */\n disabled?: boolean;\n /** Available action options with counts */\n options: ActionMultiSelectOption[];\n /** Whether facets are still loading */\n isLoading?: boolean;\n}\n\n/**\n * ActionMultiSelect provides a compact multi-select dropdown for filtering by action/verb.\n * Uses checkboxes for multiple selection and displays counts from facet queries.\n */\nexport function ActionMultiSelect({\n value,\n onChange,\n className = '',\n disabled = false,\n options,\n isLoading = false,\n}: ActionMultiSelectProps) {\n const [open, setOpen] = React.useState(false);\n\n const handleToggle = React.useCallback(\n (actionValue: string) => {\n if (value.includes(actionValue)) {\n onChange(value.filter((v) => v !== actionValue));\n } else {\n onChange([...value, actionValue]);\n }\n },\n [value, onChange]\n );\n\n const displayText = React.useMemo(() => {\n if (value.length === 0) return 'Actions';\n if (value.length === 1) return '1 action';\n return `${value.length} actions`;\n }, [value.length]);\n\n return (\n <Popover.Root open={open} onOpenChange={setOpen}>\n <Popover.Trigger asChild>\n <button\n type=\"button\"\n disabled={disabled || isLoading}\n className={cn(\n 'flex h-7 items-center justify-between gap-2 rounded-md border border-input bg-background px-2 text-xs min-w-[100px]',\n 'hover:bg-accent hover:text-accent-foreground transition-colors',\n 'focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n >\n <span className=\"font-medium\">{displayText}</span>\n <ChevronDown className=\"h-3 w-3 text-muted-foreground shrink-0\" />\n </button>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content\n className={cn(\n 'z-50 min-w-[160px] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n 'data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2'\n )}\n sideOffset={4}\n align=\"start\"\n >\n <div className=\"p-1\">\n {isLoading ? (\n <div className=\"px-3 py-2 text-sm text-muted-foreground\">Loading...</div>\n ) : options.length === 0 ? (\n <div className=\"px-3 py-2 text-sm text-muted-foreground\">No actions found</div>\n ) : (\n options.map((option) => {\n const checked = value.includes(option.value);\n return (\n <label\n key={option.value}\n className={cn(\n 'flex items-center gap-2 rounded-sm px-3 py-2 text-sm cursor-pointer',\n 'hover:bg-accent hover:text-accent-foreground transition-colors'\n )}\n >\n <Checkbox\n checked={checked}\n onCheckedChange={() => handleToggle(option.value)}\n className=\"h-4 w-4\"\n />\n <span className=\"flex-1\">{option.label}</span>\n {option.count !== undefined && (\n <span className=\"text-xs text-muted-foreground\">({option.count})</span>\n )}\n </label>\n );\n })\n )}\n </div>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n );\n}\n","import * as React from 'react';\nimport { User, X } from 'lucide-react';\nimport * as Popover from '@radix-ui/react-popover';\nimport { Button } from './ui/button';\nimport { cn } from '../lib/utils';\n\nexport interface UserOption {\n value: string;\n label: string;\n count?: number;\n}\n\nexport interface UserSelectProps {\n /** Currently selected user (undefined = All) */\n value?: string;\n /** Available user options from facets */\n options: UserOption[];\n /** Handler called when selection changes */\n onChange: (value?: string) => void;\n /** Additional CSS class */\n className?: string;\n /** Whether the select is disabled */\n disabled?: boolean;\n /** Whether to show loading state */\n isLoading?: boolean;\n}\n\n/**\n * UserSelect provides a dropdown for filtering by user with facet counts\n */\nexport function UserSelect({\n value,\n options,\n onChange,\n className = '',\n disabled = false,\n isLoading = false,\n}: UserSelectProps) {\n const [open, setOpen] = React.useState(false);\n const [search, setSearch] = React.useState('');\n\n // Filter options by search query\n const filteredOptions = React.useMemo(() => {\n if (!search) return options;\n const searchLower = search.toLowerCase();\n return options.filter((opt) => opt.label.toLowerCase().includes(searchLower));\n }, [options, search]);\n\n // Get display label\n const displayLabel = React.useMemo(() => {\n if (!value) return 'All Users';\n const selected = options.find((opt) => opt.value === value);\n return selected ? selected.label : value;\n }, [value, options]);\n\n const handleSelect = React.useCallback(\n (selectedValue?: string) => {\n onChange(selectedValue);\n setOpen(false);\n setSearch('');\n },\n [onChange]\n );\n\n const handleClear = React.useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n onChange(undefined);\n },\n [onChange]\n );\n\n return (\n <Popover.Root open={open} onOpenChange={setOpen}>\n <Popover.Trigger asChild>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n disabled={disabled}\n className={cn(\n 'h-7 text-xs font-medium gap-1.5 px-2',\n value && 'pr-1',\n className\n )}\n >\n <User className=\"h-3.5 w-3.5\" />\n <span>{displayLabel}</span>\n {value && (\n <button\n onClick={handleClear}\n className=\"ml-1 rounded-sm opacity-70 hover:opacity-100 hover:bg-muted p-0.5\"\n aria-label=\"Clear user filter\"\n >\n <X className=\"h-3 w-3\" />\n </button>\n )}\n </Button>\n </Popover.Trigger>\n\n <Popover.Portal>\n <Popover.Content\n className=\"z-50 w-64 rounded-md border bg-popover p-0 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\"\n align=\"start\"\n sideOffset={4}\n >\n {/* Search Input */}\n <div className=\"border-b p-2\">\n <input\n type=\"text\"\n placeholder=\"Search users...\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"w-full rounded-md border border-input bg-background px-2 py-1.5 text-xs placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-0\"\n autoFocus\n />\n </div>\n\n {/* Options List */}\n <div className=\"max-h-64 overflow-y-auto p-1\">\n {/* All Users Option */}\n <button\n onClick={() => handleSelect(undefined)}\n className={cn(\n 'w-full flex items-center justify-between rounded-sm px-2 py-1.5 text-xs cursor-pointer hover:bg-accent hover:text-accent-foreground',\n !value && 'bg-accent text-accent-foreground'\n )}\n >\n <span className=\"font-medium\">All Users</span>\n {options.length > 0 && (\n <span className=\"text-muted-foreground\">\n {options.reduce((sum, opt) => sum + (opt.count || 0), 0)}\n </span>\n )}\n </button>\n\n {/* Loading State */}\n {isLoading && (\n <div className=\"px-2 py-4 text-center text-xs text-muted-foreground\">\n Loading users...\n </div>\n )}\n\n {/* User Options */}\n {!isLoading && filteredOptions.length > 0 && (\n <div className=\"mt-1 border-t pt-1\">\n {filteredOptions.map((option) => (\n <button\n key={option.value}\n onClick={() => handleSelect(option.value)}\n className={cn(\n 'w-full flex items-center justify-between rounded-sm px-2 py-1.5 text-xs cursor-pointer hover:bg-accent hover:text-accent-foreground',\n value === option.value && 'bg-accent text-accent-foreground'\n )}\n >\n <span className=\"truncate font-medium\">{option.label}</span>\n {option.count !== undefined && (\n <span className=\"text-muted-foreground ml-2 flex-shrink-0\">\n {option.count}\n </span>\n )}\n </button>\n ))}\n </div>\n )}\n\n {/* Empty State */}\n {!isLoading && filteredOptions.length === 0 && search && (\n <div className=\"px-2 py-4 text-center text-xs text-muted-foreground\">\n No users found\n </div>\n )}\n\n {!isLoading && options.length === 0 && !search && (\n <div className=\"px-2 py-4 text-center text-xs text-muted-foreground\">\n No users available\n </div>\n )}\n </div>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n );\n}\n","import { useState, useCallback, useEffect } from 'react';\nimport { formatISO, subDays } from 'date-fns';\n\nimport type { ActivityApiClient } from '../api/client';\nimport { useAuditLogFacets, type AuditLogTimeRange } from '../hooks/useAuditLogFacets';\nimport { TimeRangeDropdown } from './ui/time-range-dropdown';\nimport { FilterChip } from './ui/filter-chip';\nimport { AddFilterDropdown, type FilterOption } from './ui/add-filter-dropdown';\nimport { ActionMultiSelect } from './ActionMultiSelect';\nimport { UserSelect } from './UserSelect';\n\n/**\n * Filter state for audit logs\n */\nexport interface AuditLogFilterState {\n /** Filter by verb/action (multi-select) */\n verbs?: string[];\n /** Filter by resource type (multi-select) */\n resourceTypes?: string[];\n /** Filter by namespace (multi-select) */\n namespaces?: string[];\n /** Filter by username (multi-select) */\n usernames?: string[];\n /** Filter by resource name (partial match) */\n resourceName?: string;\n /** Custom CEL filter */\n customFilter?: string;\n}\n\n/**\n * Time range for audit log queries\n */\nexport interface TimeRange {\n start: string;\n end?: string;\n}\n\nexport interface AuditLogFiltersProps {\n /** API client instance for fetching facets */\n client: ActivityApiClient;\n /** Current filter state */\n filters: AuditLogFilterState;\n /** Current time range */\n timeRange: TimeRange;\n /** Handler called when filters change */\n onFiltersChange: (filters: AuditLogFilterState) => void;\n /** Handler called when time range changes */\n onTimeRangeChange: (timeRange: TimeRange) => void;\n /** Whether the filters are disabled (e.g., during loading) */\n disabled?: boolean;\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * Preset time ranges\n */\nconst TIME_PRESETS = [\n { key: 'last15min', label: 'Last 15 min' },\n { key: 'last1hour', label: 'Last hour' },\n { key: 'last6hours', label: 'Last 6 hours' },\n { key: 'last24hours', label: 'Last 24 hours' },\n { key: 'last7days', label: 'Last 7 days' },\n { key: 'last30days', label: 'Last 30 days' },\n];\n\n/**\n * Convert preset key to ISO time range\n */\nfunction presetToTimeRange(presetKey: string): AuditLogTimeRange {\n const now = new Date();\n let start: Date;\n\n switch (presetKey) {\n case 'last15min':\n start = new Date(now.getTime() - 15 * 60 * 1000);\n break;\n case 'last1hour':\n start = new Date(now.getTime() - 60 * 60 * 1000);\n break;\n case 'last6hours':\n start = new Date(now.getTime() - 6 * 60 * 60 * 1000);\n break;\n case 'last24hours':\n start = new Date(now.getTime() - 24 * 60 * 60 * 1000);\n break;\n case 'last7days':\n start = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000);\n break;\n case 'last30days':\n start = new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000);\n break;\n default:\n start = new Date(now.getTime() - 24 * 60 * 60 * 1000);\n }\n\n return {\n start: formatISO(start),\n end: formatISO(now),\n };\n}\n\n/**\n * Filter configuration registry\n */\ntype FilterId = 'verbs' | 'resourceTypes' | 'namespaces' | 'usernames' | 'resourceName';\n\ninterface FilterConfig {\n id: FilterId;\n label: string;\n inputMode: 'typeahead' | 'text';\n placeholder?: string;\n searchPlaceholder?: string;\n}\n\nconst FILTER_CONFIGS: Record<FilterId, FilterConfig> = {\n verbs: {\n id: 'verbs',\n label: 'Action',\n inputMode: 'typeahead',\n searchPlaceholder: 'Search actions...',\n },\n resourceTypes: {\n id: 'resourceTypes',\n label: 'Resource',\n inputMode: 'typeahead',\n searchPlaceholder: 'Search resources...',\n },\n namespaces: {\n id: 'namespaces',\n label: 'Namespace',\n inputMode: 'typeahead',\n searchPlaceholder: 'Search namespaces...',\n },\n usernames: {\n id: 'usernames',\n label: 'User',\n inputMode: 'typeahead',\n searchPlaceholder: 'Search users...',\n },\n resourceName: {\n id: 'resourceName',\n label: 'Name',\n inputMode: 'text',\n placeholder: 'Enter resource name...',\n },\n};\n\n/**\n * Helper function to convert ISO string to datetime-local format\n */\nconst formatDatetimeLocal = (isoString: string): string => {\n const date = new Date(isoString);\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n const hours = String(date.getHours()).padStart(2, '0');\n const minutes = String(date.getMinutes()).padStart(2, '0');\n return `${year}-${month}-${day}T${hours}:${minutes}`;\n};\n\n\n/**\n * Build CEL filter expression from filter state\n */\nexport function buildAuditLogCEL(filters: AuditLogFilterState): string {\n const conditions: string[] = [];\n\n // Verbs filter (multi-select)\n if (filters.verbs && filters.verbs.length > 0) {\n if (filters.verbs.length === 1) {\n conditions.push(`verb == \"${filters.verbs[0]}\"`);\n } else {\n const verbConditions = filters.verbs.map((v) => `verb == \"${v}\"`);\n conditions.push(`(${verbConditions.join(' || ')})`);\n }\n }\n\n // Resource types filter (multi-select)\n if (filters.resourceTypes && filters.resourceTypes.length > 0) {\n if (filters.resourceTypes.length === 1) {\n conditions.push(`objectRef.resource == \"${filters.resourceTypes[0]}\"`);\n } else {\n const resConditions = filters.resourceTypes.map((r) => `objectRef.resource == \"${r}\"`);\n conditions.push(`(${resConditions.join(' || ')})`);\n }\n }\n\n // Namespaces filter (multi-select)\n if (filters.namespaces && filters.namespaces.length > 0) {\n if (filters.namespaces.length === 1) {\n conditions.push(`objectRef.namespace == \"${filters.namespaces[0]}\"`);\n } else {\n const nsConditions = filters.namespaces.map((ns) => `objectRef.namespace == \"${ns}\"`);\n conditions.push(`(${nsConditions.join(' || ')})`);\n }\n }\n\n // Usernames filter (multi-select)\n if (filters.usernames && filters.usernames.length > 0) {\n if (filters.usernames.length === 1) {\n conditions.push(`user.username == \"${filters.usernames[0]}\"`);\n } else {\n const userConditions = filters.usernames.map((u) => `user.username == \"${u}\"`);\n conditions.push(`(${userConditions.join(' || ')})`);\n }\n }\n\n // Resource name filter (partial match)\n if (filters.resourceName) {\n conditions.push(`objectRef.name.contains(\"${filters.resourceName}\")`);\n }\n\n // Custom filter\n if (filters.customFilter) {\n conditions.push(filters.customFilter);\n }\n\n return conditions.join(' && ');\n}\n\n/**\n * AuditLogFilters provides compact filter controls for audit log queries\n */\nexport function AuditLogFilters({\n client,\n filters,\n timeRange,\n onFiltersChange,\n onTimeRangeChange,\n disabled = false,\n className = '',\n}: AuditLogFiltersProps) {\n // Convert timeRange to format expected by useAuditLogFacets\n const [facetTimeRange, setFacetTimeRange] = useState<AuditLogTimeRange | null>(() =>\n presetToTimeRange('last24hours')\n );\n\n const { verbs, resources, namespaces, usernames, error: facetsError } = useAuditLogFacets(\n client,\n facetTimeRange\n );\n\n // Log facets error for debugging\n if (facetsError) {\n console.error('Failed to load audit log facets:', facetsError);\n }\n\n // Track which filter was just added to auto-open it\n const [pendingFilter, setPendingFilter] = useState<FilterId | null>(null);\n\n // Track selected preset\n const [selectedPreset, setSelectedPreset] = useState<string>('last24hours');\n\n // Custom time range state\n const [customStart, setCustomStart] = useState(() =>\n formatDatetimeLocal(formatISO(subDays(new Date(), 1)))\n );\n const [customEnd, setCustomEnd] = useState(() => formatDatetimeLocal(formatISO(new Date())));\n\n // Handle time range preset selection\n const handleTimePresetSelect = useCallback(\n (presetKey: string) => {\n setSelectedPreset(presetKey);\n const range = presetToTimeRange(presetKey);\n setFacetTimeRange(range);\n onTimeRangeChange({\n start: range.start,\n end: range.end,\n });\n },\n [onTimeRangeChange]\n );\n\n // Handle custom time range apply\n const handleCustomRangeApply = useCallback(\n (start: string, end: string) => {\n setSelectedPreset('custom');\n setCustomStart(start);\n setCustomEnd(end);\n const startIso = new Date(start).toISOString();\n const endIso = new Date(end).toISOString();\n setFacetTimeRange({ start: startIso, end: endIso });\n onTimeRangeChange({\n start: startIso,\n end: endIso,\n });\n },\n [onTimeRangeChange]\n );\n\n // Get display label for time range\n const getTimeRangeLabel = () => {\n const preset = TIME_PRESETS.find((p) => p.key === selectedPreset);\n if (preset) return preset.label;\n if (selectedPreset === 'custom' && timeRange.start && timeRange.end) {\n const start = new Date(timeRange.start);\n const end = new Date(timeRange.end);\n return `${start.toLocaleDateString()} - ${end.toLocaleDateString()}`;\n }\n return 'Select time range';\n };\n\n // Determine which filters are currently active (have values)\n // Note: We exclude verbs and usernames from filter chips since they're handled by quick filters\n const filtersWithValues: FilterId[] = [];\n // if (filters.verbs && filters.verbs.length > 0) filtersWithValues.push('verbs'); // Handled by ActionToggle\n if (filters.resourceTypes && filters.resourceTypes.length > 0) filtersWithValues.push('resourceTypes');\n if (filters.namespaces && filters.namespaces.length > 0) filtersWithValues.push('namespaces');\n // if (filters.usernames && filters.usernames.length > 0) filtersWithValues.push('usernames'); // Handled by UserSelect\n if (filters.resourceName) filtersWithValues.push('resourceName');\n\n // Include pendingFilter (newly added filter awaiting value selection) in the displayed filters\n const activeFilterIds: FilterId[] =\n pendingFilter && !filtersWithValues.includes(pendingFilter)\n ? [...filtersWithValues, pendingFilter]\n : filtersWithValues;\n\n // Clear pending filter when filter values change (user selected something)\n useEffect(() => {\n if (pendingFilter && filtersWithValues.includes(pendingFilter)) {\n // Filter now has values, clear pending state\n setPendingFilter(null);\n }\n }, [pendingFilter, filtersWithValues]);\n\n // Build available filters list\n // Note: Action and User are now quick filters, so they're excluded from the dropdown\n const availableFilters: FilterOption[] = [\n { id: 'resourceTypes', label: 'Resource' },\n { id: 'namespaces', label: 'Namespace' },\n { id: 'resourceName', label: 'Name' },\n ];\n\n // Handle adding a filter\n const handleAddFilter = useCallback((filterId: string) => {\n setPendingFilter(filterId as FilterId);\n }, []);\n\n // Handle popover close - clear pending filter if no values were selected\n const handlePopoverClose = useCallback(\n (filterId: FilterId) => {\n if (pendingFilter === filterId) {\n const hasValues = (() => {\n const value = filters[filterId];\n if (filterId === 'resourceName') return !!value;\n return Array.isArray(value) && value.length > 0;\n })();\n if (!hasValues) {\n setPendingFilter(null);\n }\n }\n },\n [pendingFilter, filters]\n );\n\n // Handle filter value changes\n const handleFilterChange = useCallback(\n (filterId: FilterId, values: string[]) => {\n onFiltersChange({\n ...filters,\n [filterId]: values.length > 0 ? values : undefined,\n });\n },\n [filters, onFiltersChange]\n );\n\n // Handle filter clear\n const handleFilterClear = useCallback(\n (filterId: FilterId) => {\n onFiltersChange({\n ...filters,\n [filterId]: undefined,\n });\n },\n [filters, onFiltersChange]\n );\n\n // Get options for a specific filter\n const getFilterOptions = (filterId: FilterId) => {\n switch (filterId) {\n case 'verbs':\n return verbs\n .filter((facet) => facet.value)\n .map((facet) => ({\n value: facet.value,\n label: facet.value,\n count: facet.count,\n }));\n case 'resourceTypes':\n return resources\n .filter((facet) => facet.value)\n .map((facet) => ({\n value: facet.value,\n label: facet.value,\n count: facet.count,\n }));\n case 'namespaces':\n return namespaces\n .filter((facet) => facet.value)\n .map((facet) => ({\n value: facet.value,\n label: facet.value,\n count: facet.count,\n }));\n case 'usernames':\n return usernames\n .filter((facet) => facet.value)\n .map((facet) => ({\n value: facet.value,\n label: facet.value,\n count: facet.count,\n }));\n default:\n return [];\n }\n };\n\n // Get values for a specific filter\n const getFilterValues = (filterId: FilterId): string[] => {\n const value = filters[filterId];\n if (filterId === 'resourceName') {\n return value ? [value as string] : [];\n }\n return (value as string[] | undefined) || [];\n };\n\n // Handle action multi-select change\n const handleActionChange = useCallback(\n (selectedVerbs: string[]) => {\n onFiltersChange({\n ...filters,\n verbs: selectedVerbs.length > 0 ? selectedVerbs : undefined,\n });\n },\n [filters, onFiltersChange]\n );\n\n // Get current action values for multi-select\n const getActionValues = (): string[] => {\n return filters.verbs || [];\n };\n\n // Prepare action options from facets\n const actionOptions = verbs\n .filter((facet) => facet.value)\n .map((facet) => ({\n value: facet.value,\n label: facet.value.charAt(0).toUpperCase() + facet.value.slice(1), // Capitalize first letter\n count: facet.count,\n }));\n\n // Handle user select change\n const handleUserChange = useCallback(\n (username?: string) => {\n onFiltersChange({\n ...filters,\n usernames: username ? [username] : undefined,\n });\n },\n [filters, onFiltersChange]\n );\n\n // Get current user value for select (single selection for quick filter)\n const getCurrentUser = (): string | undefined => {\n return filters.usernames && filters.usernames.length === 1\n ? filters.usernames[0]\n : undefined;\n };\n\n // Prepare user options for select\n const userOptions = usernames\n .filter((facet) => facet.value)\n .map((facet) => ({\n value: facet.value,\n label: facet.value,\n count: facet.count,\n }));\n\n return (\n <div className={`mb-3 pb-3 border-b border-border ${className}`}>\n <div className=\"flex flex-wrap gap-2 items-center\">\n {/* Action Multi-Select */}\n <ActionMultiSelect\n value={getActionValues()}\n onChange={handleActionChange}\n options={actionOptions}\n disabled={disabled}\n isLoading={!verbs.length && !facetsError}\n className=\"h-7 text-xs min-w-[180px]\"\n />\n\n {/* User Select */}\n <UserSelect\n value={getCurrentUser()}\n options={userOptions}\n onChange={handleUserChange}\n disabled={disabled}\n isLoading={!usernames.length && !facetsError}\n />\n\n {/* Active Filter Chips */}\n {activeFilterIds.map((filterId) => {\n const config = FILTER_CONFIGS[filterId];\n return (\n <FilterChip\n key={filterId}\n label={config.label}\n values={getFilterValues(filterId)}\n options={config.inputMode === 'typeahead' ? getFilterOptions(filterId) : undefined}\n onValuesChange={(values) => handleFilterChange(filterId, values)}\n onClear={() => handleFilterClear(filterId)}\n onPopoverClose={() => handlePopoverClose(filterId)}\n inputMode={config.inputMode}\n placeholder={config.placeholder}\n searchPlaceholder={config.searchPlaceholder}\n autoOpen={pendingFilter === filterId}\n disabled={disabled}\n />\n );\n })}\n\n {/* Add Filter Dropdown */}\n <AddFilterDropdown\n availableFilters={availableFilters}\n activeFilterIds={activeFilterIds}\n onAddFilter={handleAddFilter}\n hasActiveFilters={activeFilterIds.length > 0}\n disabled={disabled}\n />\n\n {/* Spacer */}\n <div className=\"flex-1 min-w-[20px]\" />\n\n {/* Time Range Dropdown */}\n <TimeRangeDropdown\n presets={TIME_PRESETS}\n selectedPreset={selectedPreset}\n onPresetSelect={handleTimePresetSelect}\n onCustomRangeApply={handleCustomRangeApply}\n customStart={customStart}\n customEnd={customEnd}\n disabled={disabled}\n displayLabel={getTimeRangeLabel()}\n />\n </div>\n </div>\n );\n}\n","import { format } from 'date-fns';\nimport type { Event } from '../types';\n\nexport interface AuditLogExpandedDetailsProps {\n /** The audit event to display details for */\n event: Event;\n}\n\n/**\n * Format timestamp for display (with timezone)\n */\nfunction formatTimestampFull(timestamp?: string): string {\n if (!timestamp) return 'Unknown time';\n try {\n return format(new Date(timestamp), 'yyyy-MM-dd HH:mm:ss \\'UTC\\'');\n } catch {\n return timestamp;\n }\n}\n\n/**\n * AuditLogExpandedDetails renders the expanded details section for an audit log event.\n *\n * Section order (most to least relevant for investigation):\n * 1. Request Summary (verb, URI)\n * 2. Response Summary (status code with icon, message)\n * 3. Timestamp (full)\n * 4. User (username, UID, groups)\n * 5. Resource (kind, name, namespace, API group)\n * 6. Request Details (user agent, source IPs)\n * 7. Advanced (collapsed) - audit ID, stage, level, annotations\n * 8. Raw Objects (collapsed) - request/response JSON\n */\nexport function AuditLogExpandedDetails({ event }: AuditLogExpandedDetailsProps) {\n const timestamp = event.stageTimestamp || event.requestReceivedTimestamp;\n\n return (\n <div className=\"mt-4 pt-4 border-t border-border space-y-4\">\n {/* Request Summary */}\n <div>\n <h4 className=\"m-0 mb-2 text-xs font-semibold text-muted-foreground uppercase tracking-wide\">\n Request Summary\n </h4>\n <dl className=\"grid grid-cols-[auto_1fr] gap-x-3 gap-y-1 m-0 text-sm\">\n <dt className=\"text-muted-foreground text-xs\">Verb:</dt>\n <dd className=\"m-0 text-foreground text-xs\">{event.verb || 'Unknown'}</dd>\n {event.requestURI && (\n <>\n <dt className=\"text-muted-foreground text-xs\">URI:</dt>\n <dd className=\"m-0 font-mono text-xs text-foreground break-all\">{event.requestURI}</dd>\n </>\n )}\n </dl>\n </div>\n\n {/* Response Summary */}\n {event.responseStatus && (\n <div>\n <h4 className=\"m-0 mb-2 text-xs font-semibold text-muted-foreground uppercase tracking-wide\">\n Response Summary\n </h4>\n <dl className=\"grid grid-cols-[auto_1fr] gap-x-3 gap-y-1 m-0 text-sm\">\n {event.responseStatus.code !== undefined && (\n <>\n <dt className=\"text-muted-foreground text-xs\">Status Code:</dt>\n <dd className=\"m-0 text-foreground text-xs\">\n <span\n className={\n event.responseStatus.code >= 200 && event.responseStatus.code < 300\n ? 'text-green-600 dark:text-green-400'\n : 'text-red-600 dark:text-red-400'\n }\n >\n {event.responseStatus.code >= 200 && event.responseStatus.code < 300 ? '✓ ' : '✗ '}\n {event.responseStatus.code}\n </span>\n </dd>\n </>\n )}\n {event.responseStatus.status && (\n <>\n <dt className=\"text-muted-foreground text-xs\">Status:</dt>\n <dd className=\"m-0 text-foreground text-xs\">{event.responseStatus.status}</dd>\n </>\n )}\n {event.responseStatus.message && (\n <>\n <dt className=\"text-muted-foreground text-xs\">Message:</dt>\n <dd className=\"m-0 text-foreground text-xs\">{event.responseStatus.message}</dd>\n </>\n )}\n {event.responseStatus.reason && (\n <>\n <dt className=\"text-muted-foreground text-xs\">Reason:</dt>\n <dd className=\"m-0 text-foreground text-xs\">{event.responseStatus.reason}</dd>\n </>\n )}\n </dl>\n </div>\n )}\n\n {/* Timestamp */}\n <div>\n <h4 className=\"m-0 mb-2 text-xs font-semibold text-muted-foreground uppercase tracking-wide\">\n Timestamp\n </h4>\n <p className=\"m-0 text-foreground text-xs\">\n {formatTimestampFull(timestamp)}\n </p>\n </div>\n\n {/* User Information */}\n {event.user ? (\n <div>\n <h4 className=\"m-0 mb-2 text-xs font-semibold text-muted-foreground uppercase tracking-wide\">\n User\n </h4>\n <dl className=\"grid grid-cols-[auto_1fr] gap-x-3 gap-y-1 m-0 text-sm\">\n {event.user.username && (\n <>\n <dt className=\"text-muted-foreground text-xs\">Username:</dt>\n <dd className=\"m-0 text-foreground text-xs break-all\">{event.user.username}</dd>\n </>\n )}\n {event.user.uid && (\n <>\n <dt className=\"text-muted-foreground text-xs\">UID:</dt>\n <dd className=\"m-0 font-mono text-xs text-muted-foreground break-all\">{event.user.uid}</dd>\n </>\n )}\n {event.user.groups && event.user.groups.length > 0 && (\n <>\n <dt className=\"text-muted-foreground text-xs\">Groups:</dt>\n <dd className=\"m-0 text-foreground text-xs\">\n {event.user.groups.join(', ')}\n </dd>\n </>\n )}\n </dl>\n </div>\n ) : null}\n\n {/* Resource Information */}\n {event.objectRef && (\n <div>\n <h4 className=\"m-0 mb-2 text-xs font-semibold text-muted-foreground uppercase tracking-wide\">\n Resource\n </h4>\n <dl className=\"grid grid-cols-[auto_1fr] gap-x-3 gap-y-1 m-0 text-sm\">\n {event.objectRef.resource && (\n <>\n <dt className=\"text-muted-foreground text-xs\">Kind:</dt>\n <dd className=\"m-0 text-foreground text-xs\">{event.objectRef.resource}</dd>\n </>\n )}\n {event.objectRef.name && (\n <>\n <dt className=\"text-muted-foreground text-xs\">Name:</dt>\n <dd className=\"m-0 text-foreground text-xs\">{event.objectRef.name}</dd>\n </>\n )}\n {event.objectRef.namespace && (\n <>\n <dt className=\"text-muted-foreground text-xs\">Namespace:</dt>\n <dd className=\"m-0 text-foreground text-xs\">{event.objectRef.namespace}</dd>\n </>\n )}\n {event.objectRef.apiGroup && (\n <>\n <dt className=\"text-muted-foreground text-xs\">API Group:</dt>\n <dd className=\"m-0 text-foreground text-xs\">{event.objectRef.apiGroup}</dd>\n </>\n )}\n {event.objectRef.apiVersion && (\n <>\n <dt className=\"text-muted-foreground text-xs\">API Version:</dt>\n <dd className=\"m-0 text-foreground text-xs\">{event.objectRef.apiVersion}</dd>\n </>\n )}\n {event.objectRef.uid && (\n <>\n <dt className=\"text-muted-foreground text-xs\">UID:</dt>\n <dd className=\"m-0 font-mono text-xs text-muted-foreground break-all\">{event.objectRef.uid}</dd>\n </>\n )}\n {event.objectRef.subresource && (\n <>\n <dt className=\"text-muted-foreground text-xs\">Subresource:</dt>\n <dd className=\"m-0 text-foreground text-xs\">{event.objectRef.subresource}</dd>\n </>\n )}\n </dl>\n </div>\n )}\n\n {/* Request Details */}\n {(event.userAgent || (event.sourceIPs && event.sourceIPs.length > 0)) && (\n <div>\n <h4 className=\"m-0 mb-2 text-xs font-semibold text-muted-foreground uppercase tracking-wide\">\n Request Details\n </h4>\n <dl className=\"grid grid-cols-[auto_1fr] gap-x-3 gap-y-1 m-0 text-sm\">\n {event.userAgent && (\n <>\n <dt className=\"text-muted-foreground text-xs\">User Agent:</dt>\n <dd className=\"m-0 font-mono text-xs text-foreground break-all\">{event.userAgent}</dd>\n </>\n )}\n {event.sourceIPs && event.sourceIPs.length > 0 && (\n <>\n <dt className=\"text-muted-foreground text-xs\">Source IPs:</dt>\n <dd className=\"m-0 text-foreground text-xs\">{event.sourceIPs.join(', ')}</dd>\n </>\n )}\n </dl>\n </div>\n )}\n\n {/* Advanced Details (collapsed) */}\n {(event.auditID || event.stage || event.level || (event.annotations && Object.keys(event.annotations).length > 0)) && (\n <details className=\"group\">\n <summary className=\"cursor-pointer list-none\">\n <h4 className=\"inline-flex items-center m-0 text-xs font-semibold text-muted-foreground uppercase tracking-wide hover:text-foreground\">\n <span className=\"mr-1 group-open:rotate-90 transition-transform\">▸</span>\n Advanced\n </h4>\n </summary>\n <div className=\"mt-2 pl-4\">\n <dl className=\"grid grid-cols-[auto_1fr] gap-x-3 gap-y-1 m-0 text-sm\">\n {event.auditID && (\n <>\n <dt className=\"text-muted-foreground text-xs\">Audit ID:</dt>\n <dd className=\"m-0 font-mono text-xs text-muted-foreground break-all\">{event.auditID}</dd>\n </>\n )}\n {event.stage && (\n <>\n <dt className=\"text-muted-foreground text-xs\">Stage:</dt>\n <dd className=\"m-0 text-foreground text-xs\">{event.stage}</dd>\n </>\n )}\n {event.level && (\n <>\n <dt className=\"text-muted-foreground text-xs\">Level:</dt>\n <dd className=\"m-0 text-foreground text-xs\">{event.level}</dd>\n </>\n )}\n {event.annotations && Object.entries(event.annotations).map(([key, value]) => (\n <div key={key} className=\"contents\">\n <dt className=\"text-muted-foreground text-xs\">{key}:</dt>\n <dd className=\"m-0 text-foreground text-xs break-all\">{value}</dd>\n </div>\n ))}\n </dl>\n </div>\n </details>\n )}\n\n {/* Raw Objects (collapsed) */}\n {(event.requestObject || event.responseObject) ? (\n <details className=\"group\">\n <summary className=\"cursor-pointer list-none\">\n <h4 className=\"inline-flex items-center m-0 text-xs font-semibold text-muted-foreground uppercase tracking-wide hover:text-foreground\">\n <span className=\"mr-1 group-open:rotate-90 transition-transform\">▸</span>\n Raw Objects\n </h4>\n </summary>\n <div className=\"mt-2 pl-4 space-y-2\">\n {event.requestObject ? (\n <div>\n <h5 className=\"m-0 mb-1 text-xs font-semibold text-muted-foreground\">Request Object</h5>\n <pre className=\"m-0 p-3 bg-muted rounded overflow-x-auto text-xs font-mono\">\n {JSON.stringify(event.requestObject, null, 2)}\n </pre>\n </div>\n ) : null}\n {event.responseObject ? (\n <div>\n <h5 className=\"m-0 mb-1 text-xs font-semibold text-muted-foreground\">Response Object</h5>\n <pre className=\"m-0 p-3 bg-muted rounded overflow-x-auto text-xs font-mono\">\n {JSON.stringify(event.responseObject, null, 2)}\n </pre>\n </div>\n ) : null}\n </div>\n </details>\n ) : null}\n </div>\n );\n}\n","import { useState } from 'react';\nimport { format, formatDistanceToNow } from 'date-fns';\nimport type { Event } from '../types';\nimport { AuditLogExpandedDetails } from './AuditLogExpandedDetails';\nimport { cn } from '../lib/utils';\nimport { Button } from './ui/button';\nimport { Card } from './ui/card';\nimport { Badge } from './ui/badge';\n\nexport interface AuditLogFeedItemProps {\n /** The audit event to render */\n event: Event;\n /** Handler called when the item is clicked */\n onEventClick?: (event: Event) => void;\n /** Whether the item is selected */\n isSelected?: boolean;\n /** Additional CSS class */\n className?: string;\n /** Whether to show as compact (for resource detail tabs) */\n compact?: boolean;\n /** Whether this is a newly streamed event */\n isNew?: boolean;\n /** Whether the item starts expanded */\n defaultExpanded?: boolean;\n}\n\n/**\n * Format timestamp for display\n */\nfunction formatTimestamp(timestamp?: string): string {\n if (!timestamp) return 'Unknown time';\n try {\n const date = new Date(timestamp);\n return formatDistanceToNow(date, { addSuffix: true });\n } catch {\n return timestamp;\n }\n}\n\n/**\n * Format timestamp for tooltip (with timezone)\n */\nfunction formatTimestampFull(timestamp?: string): string {\n if (!timestamp) return 'Unknown time';\n try {\n return format(new Date(timestamp), 'yyyy-MM-dd HH:mm:ss \\'UTC\\'');\n } catch {\n return timestamp;\n }\n}\n\n/**\n * Get Tailwind classes for verb badge\n */\nfunction getVerbBadgeClasses(verb?: string): string {\n const baseClasses = 'text-[0.55rem] h-5 px-2 py-1 leading-3';\n const normalized = verb?.toLowerCase();\n\n switch (normalized) {\n case 'create':\n return cn(baseClasses, 'bg-green-100 text-green-700 dark:bg-green-900 dark:text-green-300');\n case 'update':\n case 'patch':\n return cn(baseClasses, 'bg-amber-100 text-amber-700 dark:bg-amber-900 dark:text-amber-300');\n case 'delete':\n return cn(baseClasses, 'bg-red-100 text-red-700 dark:bg-red-900 dark:text-red-300');\n default:\n return cn(baseClasses, 'bg-muted text-muted-foreground');\n }\n}\n\n/**\n * Get response status indicator (✓ or ✗)\n */\nfunction getResponseStatusIndicator(code?: number): { icon: string; className: string } {\n if (!code) {\n return { icon: '?', className: 'text-muted-foreground' };\n }\n\n if (code >= 200 && code < 300) {\n return { icon: '✓', className: 'text-green-600 dark:text-green-400' };\n }\n\n return { icon: '✗', className: 'text-red-600 dark:text-red-400' };\n}\n\n/**\n * Build human-readable summary\n */\nfunction buildAuditSummary(event: Event): string {\n const username = event.user?.username || 'Unknown user';\n const verb = event.verb || 'performed action';\n const kind = event.objectRef?.resource || 'resource';\n const name = event.objectRef?.name || '';\n const namespace = event.objectRef?.namespace;\n\n let summary = `${username} ${verb} ${kind}`;\n if (name) {\n summary += ` ${name}`;\n }\n if (namespace) {\n summary += ` in ${namespace}`;\n }\n\n return summary;\n}\n\n/**\n * AuditLogFeedItem renders a single audit log event in the feed\n */\nexport function AuditLogFeedItem({\n event,\n onEventClick,\n isSelected = false,\n className = '',\n compact = false,\n isNew = false,\n defaultExpanded = false,\n}: AuditLogFeedItemProps) {\n const [isExpanded, setIsExpanded] = useState(defaultExpanded);\n\n const handleClick = () => {\n onEventClick?.(event);\n };\n\n const toggleExpand = (e: React.MouseEvent) => {\n e.stopPropagation();\n setIsExpanded(!isExpanded);\n };\n\n const timestamp = event.stageTimestamp || event.requestReceivedTimestamp;\n const summary = buildAuditSummary(event);\n const statusIndicator = getResponseStatusIndicator(event.responseStatus?.code);\n\n return (\n <Card\n className={cn(\n 'cursor-pointer transition-all duration-200',\n 'hover:border-gray-300 hover:shadow-sm hover:-translate-y-px dark:hover:border-gray-600',\n compact ? 'p-2 mb-1.5' : 'p-2.5 mb-2',\n isSelected && 'border-rose-300 bg-rose-50 shadow-md dark:border-rose-600 dark:bg-rose-950/50',\n isNew && 'border-l-4 border-l-green-500 bg-green-50/50 dark:border-l-green-400 dark:bg-green-950/30',\n className\n )}\n onClick={handleClick}\n >\n <div className=\"flex gap-2\">\n {/* Main Content */}\n <div className=\"flex-1 min-w-0\">\n {/* Single row layout: Summary + Metadata + Timestamp + Expand */}\n <div className=\"flex items-center gap-2\">\n {/* Summary - takes remaining space */}\n <div className=\"text-xs text-foreground leading-snug flex-1 min-w-0 truncate\" title={summary}>\n {summary}\n </div>\n\n {/* Verb badge */}\n <Badge className={getVerbBadgeClasses(event.verb)}>\n {event.verb?.toUpperCase() || 'UNKNOWN'}\n </Badge>\n\n {/* Response status */}\n <span className={cn('inline-flex items-center gap-1 text-[0.65rem] font-semibold shrink-0', statusIndicator.className)}>\n <span>{statusIndicator.icon}</span>\n {event.responseStatus?.code && (\n <span>{event.responseStatus.code}</span>\n )}\n </span>\n\n {/* Timestamp */}\n <span\n className=\"text-xs text-muted-foreground whitespace-nowrap shrink-0\"\n title={formatTimestampFull(timestamp)}\n >\n {formatTimestamp(timestamp)}\n </span>\n\n {/* Expand button */}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-5 py-0 px-1 text-base text-muted-foreground hover:text-foreground shrink-0\"\n onClick={toggleExpand}\n aria-expanded={isExpanded}\n >\n {isExpanded ? '−' : '+'}\n </Button>\n </div>\n </div>\n </div>\n\n {/* Expanded Details */}\n {isExpanded && <AuditLogExpandedDetails event={event} />}\n </Card>\n );\n}\n","import { useState, useCallback } from 'react';\nimport type { AuditLogQuery, AuditLogQuerySpec, Event } from '../types';\nimport { ActivityApiClient } from '../api/client';\n\nexport interface UseAuditLogQueryOptions {\n client: ActivityApiClient;\n autoExecute?: boolean;\n}\n\nexport interface UseAuditLogQueryResult {\n query: AuditLogQuery | null;\n events: Event[];\n isLoading: boolean;\n error: Error | null;\n hasMore: boolean;\n executeQuery: (spec: AuditLogQuerySpec) => Promise<void>;\n loadMore: () => Promise<void>;\n reset: () => void;\n}\n\n/**\n * React hook for executing audit log queries\n */\nexport function useAuditLogQuery({\n client,\n autoExecute = false,\n}: UseAuditLogQueryOptions): UseAuditLogQueryResult {\n const [query, setQuery] = useState<AuditLogQuery | null>(null);\n const [events, setEvents] = useState<Event[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [currentSpec, setCurrentSpec] = useState<AuditLogQuerySpec | null>(null);\n\n const executeQuery = useCallback(\n async (spec: AuditLogQuerySpec) => {\n setIsLoading(true);\n setError(null);\n setCurrentSpec(spec);\n\n try {\n const queryName = `query-${Date.now()}`;\n const result = await client.createQuery(queryName, spec);\n\n console.log('[useAuditLogQuery] Query response:', {\n resultCount: result.status?.results?.length,\n continue: result.status?.continue,\n phase: result.status?.phase,\n });\n\n setQuery(result);\n setEvents(result.status?.results || []);\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)));\n } finally {\n setIsLoading(false);\n }\n },\n [client]\n );\n\n const loadMore = useCallback(async () => {\n if (!query?.status?.continue || !currentSpec || isLoading) {\n console.log('[useAuditLogQuery] loadMore skipped:', {\n hasContinue: !!query?.status?.continue,\n hasCurrentSpec: !!currentSpec,\n isLoading,\n });\n return;\n }\n\n console.log('[useAuditLogQuery] Loading more with continue:', query.status.continue);\n\n setIsLoading(true);\n setError(null);\n\n try {\n const nextSpec: AuditLogQuerySpec = {\n ...currentSpec,\n continue: query.status.continue,\n };\n\n const queryName = `query-${Date.now()}`;\n const result = await client.createQuery(queryName, nextSpec);\n\n console.log('[useAuditLogQuery] loadMore response:', {\n resultCount: result.status?.results?.length,\n continue: result.status?.continue,\n totalEvents: events.length + (result.status?.results?.length || 0),\n });\n\n setQuery(result);\n // Deduplicate before appending - use auditID as the unique key\n setEvents((prev) => {\n const existingAuditIds = new Set(prev.map(e => e.auditID).filter(Boolean));\n\n const newEvents = (result.status?.results || []).filter(event => {\n const auditID = event.auditID;\n if (auditID) {\n return !existingAuditIds.has(auditID);\n }\n // If no auditID, allow it through (shouldn't happen in practice)\n return true;\n });\n\n return [...prev, ...newEvents];\n });\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)));\n } finally {\n setIsLoading(false);\n }\n }, [client, query, currentSpec, isLoading, events.length]);\n\n const reset = useCallback(() => {\n setQuery(null);\n setEvents([]);\n setError(null);\n setCurrentSpec(null);\n }, []);\n\n return {\n query,\n events,\n isLoading,\n error,\n hasMore: !!query?.status?.continue,\n executeQuery,\n loadMore,\n reset,\n };\n}\n","import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '../../lib/utils';\n\nconst alertVariants = cva(\n 'relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground',\n {\n variants: {\n variant: {\n default: 'bg-background text-foreground',\n destructive:\n 'border-red-200 bg-red-50 text-red-900 [&>svg]:text-red-500 dark:border-red-800 dark:bg-red-950/50 dark:text-red-200 dark:[&>svg]:text-red-400',\n warning:\n 'border-amber-200 bg-amber-50 text-amber-900 [&>svg]:text-amber-600 dark:border-amber-800 dark:bg-amber-950/50 dark:text-amber-200 dark:[&>svg]:text-amber-400',\n success:\n 'border-green-200 bg-green-50 text-green-900 [&>svg]:text-green-600 dark:border-green-800 dark:bg-green-950/50 dark:text-green-200 dark:[&>svg]:text-green-400',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n);\n\nconst Alert = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof alertVariants>\n>(({ className, variant, ...props }, ref) => (\n <div\n ref={ref}\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n));\nAlert.displayName = 'Alert';\n\nconst AlertTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h5\n ref={ref}\n className={cn('mb-1 font-medium leading-none tracking-tight', className)}\n {...props}\n />\n));\nAlertTitle.displayName = 'AlertTitle';\n\nconst AlertDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('text-sm [&_p]:leading-relaxed', className)}\n {...props}\n />\n));\nAlertDescription.displayName = 'AlertDescription';\n\nexport { Alert, AlertTitle, AlertDescription };\n","export interface ApiErrorResponse {\n requestId?: string;\n code?: string;\n error?: string;\n reason?: string;\n message?: string;\n path?: string;\n}\n\nexport class ApiError extends Error {\n constructor(\n public statusCode: number,\n public code?: string,\n message?: string,\n public requestId?: string,\n public path?: string\n ) {\n super(message);\n this.name = 'ApiError';\n }\n\n get friendlyTitle(): string {\n switch (this.statusCode) {\n case 401:\n return 'Hey, who goes there? 🔐';\n case 403:\n return 'Access denied 🚫';\n case 404:\n return 'Service not found 🔍';\n case 408:\n return 'Taking a while... ⏱️';\n case 429:\n return 'Whoa, slow down there! 🐌';\n case 500:\n return 'Oops, something broke 😅';\n case 502:\n return 'Service unavailable 💤';\n case 503:\n return 'Service unavailable 💤';\n case 504:\n return 'Request timed out ⏱️';\n default:\n return 'Well, that didn\\'t work 🤔';\n }\n }\n\n get friendlyMessage(): string {\n if (this.statusCode === 403) {\n return \"You'll need permissions for this — reach out to your admin and we'll get you sorted.\";\n }\n if (this.statusCode === 401) {\n return \"Session expired — no worries, a quick refresh will get you back in.\";\n }\n if (this.statusCode === 404) {\n return \"The activity service isn't responding — we're looking into it. Try again in a moment?\";\n }\n if (this.statusCode === 408 || this.statusCode === 504) {\n return \"That took too long — might be a heavy query. Try a shorter time range?\";\n }\n if (this.statusCode === 429) {\n return \"Too many requests right now — we're on it. Give it a moment and retry?\";\n }\n if (this.statusCode === 500) {\n return \"The activity service hit a bump. We're on it — try again shortly?\";\n }\n if (this.statusCode === 502 || this.statusCode === 503) {\n return \"The activity service isn't responding — we're looking into it. Try again in a moment?\";\n }\n return this.message || \"Something went sideways. We're keeping an eye on things — try again?\";\n }\n\n get suggestion(): string | null {\n return null;\n }\n\n get severity(): 'warning' | 'error' {\n // Temporary or client-side errors are warnings\n if (this.statusCode === 408 || this.statusCode === 429 || this.statusCode === 503 || this.statusCode === 504) {\n return 'warning';\n }\n // Permission and auth errors are warnings (user can fix)\n if (this.statusCode === 401 || this.statusCode === 403) {\n return 'warning';\n }\n // Other errors are more serious\n return 'error';\n }\n}\n\n/**\n * Represents a network error (connection refused, DNS failure, etc.)\n */\nexport class NetworkError extends Error {\n constructor(message?: string) {\n super(message || 'Network error');\n this.name = 'NetworkError';\n }\n\n get friendlyTitle(): string {\n return 'Connection trouble 🌐';\n }\n\n get friendlyMessage(): string {\n return \"Lost connection to the cluster. These things happen — check your connection and retry.\";\n }\n\n get suggestion(): string | null {\n return null;\n }\n\n get severity(): 'warning' | 'error' {\n return 'warning';\n }\n}\n\nexport function parseApiError(status: number, body: string): ApiError {\n try {\n const data = JSON.parse(body) as ApiErrorResponse;\n return new ApiError(\n status,\n data.code,\n data.error || data.reason || data.message,\n data.requestId,\n data.path\n );\n } catch {\n return new ApiError(status, undefined, body || 'Unknown error');\n }\n}\n\n/**\n * Represents a watch stream error (connection lost, stream closed, etc.)\n */\nexport class StreamError extends Error {\n constructor(message?: string, public cause?: Error) {\n super(message || 'Stream error');\n this.name = 'StreamError';\n }\n\n get friendlyTitle(): string {\n return 'Connection lost 📡';\n }\n\n get friendlyMessage(): string {\n return \"Lost connection to the activity stream. No worries — hit Retry to reconnect.\";\n }\n\n get suggestion(): string | null {\n return null;\n }\n\n get severity(): 'warning' | 'error' {\n return 'warning';\n }\n}\n\n/**\n * Default error formatter that uses the friendly error properties if available,\n * otherwise falls back to the error message.\n */\nexport function defaultErrorFormatter(error: Error): { message: string; technical?: string } {\n // Check if it's a friendly error (has friendlyMessage and severity)\n const isFriendly = 'friendlyMessage' in error && 'severity' in error;\n\n if (isFriendly) {\n const friendlyError = error as Error & {\n friendlyTitle: string;\n friendlyMessage: string;\n severity: 'warning' | 'error';\n };\n\n return {\n message: friendlyError.friendlyMessage,\n technical: error.message !== friendlyError.friendlyMessage ? error.message : undefined,\n };\n }\n\n // Fall back to basic error message\n return {\n message: error.message || 'Something unexpected happened. Try again?',\n };\n}\n","import { AlertCircle, AlertTriangle, RotateCw } from 'lucide-react';\nimport { Alert, AlertDescription } from './ui/alert';\nimport { Button } from './ui/button';\nimport { defaultErrorFormatter } from '../lib/errors';\nimport type { ErrorFormatter } from '../types/activity';\n\nexport interface ApiErrorAlertProps {\n error: Error | null;\n onRetry?: () => void;\n className?: string;\n /** Custom error formatter for customizing error messages */\n errorFormatter?: ErrorFormatter;\n}\n\ntype FriendlyError = {\n friendlyTitle: string;\n friendlyMessage: string;\n suggestion?: string | null;\n severity: 'warning' | 'error';\n};\n\nfunction isFriendlyError(error: Error): error is Error & FriendlyError {\n return 'friendlyTitle' in error && 'friendlyMessage' in error && 'severity' in error;\n}\n\nexport function ApiErrorAlert({ error, onRetry, className, errorFormatter }: ApiErrorAlertProps) {\n if (!error) return null;\n\n // Use custom formatter if provided, otherwise use default\n const formatter = errorFormatter || defaultErrorFormatter;\n const formatted = formatter(error);\n\n // Determine error details\n const isFriendly = isFriendlyError(error);\n const message = formatted.message;\n const severity = isFriendly ? error.severity : 'error';\n\n // Choose alert variant and icon based on severity\n const alertVariant = severity === 'warning' ? 'warning' : 'destructive';\n const Icon = severity === 'warning' ? AlertTriangle : AlertCircle;\n\n return (\n <Alert variant={alertVariant} className={`py-2 px-3 [&>svg]:top-2.5 [&>svg]:left-3 ${className || ''}`}>\n <Icon className=\"h-4 w-4\" />\n <AlertDescription className=\"flex items-center gap-2\">\n <span className=\"text-sm flex-1 min-w-0 leading-tight\">{message}</span>\n {onRetry && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onRetry}\n className=\"shrink-0 h-6 w-6 p-0 -my-1\"\n title=\"Retry\"\n aria-label=\"Retry\"\n >\n <RotateCw className=\"h-4 w-4\" />\n </Button>\n )}\n </AlertDescription>\n </Alert>\n );\n}\n","import { useState, useEffect, useRef, useCallback } from 'react';\nimport { formatISO, subDays } from 'date-fns';\nimport { AuditLogFilters, buildAuditLogCEL, type AuditLogFilterState, type TimeRange } from './AuditLogFilters';\nimport { AuditLogFeedItem } from './AuditLogFeedItem';\nimport { useAuditLogQuery } from '../hooks/useAuditLogQuery';\nimport type { AuditLogQuerySpec, Event } from '../types';\nimport type { ActivityApiClient } from '../api/client';\nimport type { ErrorFormatter } from '../types/activity';\nimport { Card } from './ui/card';\nimport { ApiErrorAlert } from './ApiErrorAlert';\n\n// Debounce delay for filter changes (ms)\nconst FILTER_DEBOUNCE_MS = 300;\n\n// Default page size for infinite scroll\nconst DEFAULT_PAGE_SIZE = 100;\n\nexport interface AuditLogQueryComponentProps {\n client: ActivityApiClient;\n className?: string;\n onEventSelect?: (event: Event) => void;\n initialFilters?: AuditLogFilterState;\n initialTimeRange?: TimeRange;\n /** Custom error formatter for customizing error messages */\n errorFormatter?: ErrorFormatter;\n}\n\n/**\n * Complete audit log query component with filter builder and results viewer\n */\nexport function AuditLogQueryComponent({\n client,\n className = '',\n onEventSelect,\n initialFilters = {},\n initialTimeRange = {\n start: formatISO(subDays(new Date(), 1)),\n end: formatISO(new Date()),\n },\n errorFormatter,\n}: AuditLogQueryComponentProps) {\n const [filters, setFilters] = useState<AuditLogFilterState>(initialFilters);\n const [timeRange, setTimeRange] = useState<TimeRange>(initialTimeRange);\n\n const { events, isLoading, error, hasMore, executeQuery, loadMore } =\n useAuditLogQuery({ client });\n\n const loadMoreTriggerRef = useRef<HTMLDivElement>(null);\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n // Store the latest loadMore function in a ref to avoid observer re-subscription\n const loadMoreRef = useRef(loadMore);\n const filterDebounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const hasInitialLoadRef = useRef(false);\n\n // Build query spec from current filter state\n const buildQuerySpec = useCallback((): AuditLogQuerySpec => {\n const spec: AuditLogQuerySpec = {\n filter: buildAuditLogCEL(filters) || '',\n startTime: timeRange.start,\n endTime: timeRange.end,\n limit: DEFAULT_PAGE_SIZE,\n };\n return spec;\n }, [filters, timeRange]);\n\n // Execute query with current filters\n const refresh = useCallback(async () => {\n const spec = buildQuerySpec();\n await executeQuery(spec);\n hasInitialLoadRef.current = true;\n }, [buildQuerySpec, executeQuery]);\n\n // Handle filter changes with debounced auto-refresh\n const handleFiltersChange = useCallback(\n (newFilters: AuditLogFilterState) => {\n setFilters(newFilters);\n\n // Cancel any pending debounced refresh\n if (filterDebounceRef.current) {\n clearTimeout(filterDebounceRef.current);\n }\n\n // Debounce the refresh to avoid excessive API calls\n filterDebounceRef.current = setTimeout(() => {\n filterDebounceRef.current = null;\n }, FILTER_DEBOUNCE_MS);\n },\n []\n );\n\n // Handle time range changes with debounced auto-refresh\n const handleTimeRangeChange = useCallback(\n (newTimeRange: TimeRange) => {\n setTimeRange(newTimeRange);\n\n // Cancel any pending debounced refresh\n if (filterDebounceRef.current) {\n clearTimeout(filterDebounceRef.current);\n }\n\n // Debounce the refresh\n filterDebounceRef.current = setTimeout(() => {\n filterDebounceRef.current = null;\n }, FILTER_DEBOUNCE_MS);\n },\n []\n );\n\n // Auto-refresh when filters or time range change (debounced)\n useEffect(() => {\n // Skip the initial render - we'll handle that separately\n if (!hasInitialLoadRef.current) {\n return;\n }\n\n // Cancel any pending refresh\n if (filterDebounceRef.current) {\n clearTimeout(filterDebounceRef.current);\n }\n\n // Debounce the refresh\n filterDebounceRef.current = setTimeout(() => {\n filterDebounceRef.current = null;\n refresh();\n }, FILTER_DEBOUNCE_MS);\n\n return () => {\n if (filterDebounceRef.current) {\n clearTimeout(filterDebounceRef.current);\n filterDebounceRef.current = null;\n }\n };\n }, [filters, timeRange, refresh]);\n\n // Auto-execute on mount\n useEffect(() => {\n refresh();\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n // Update the ref whenever loadMore changes\n useEffect(() => {\n loadMoreRef.current = loadMore;\n }, [loadMore]);\n\n // Infinite scroll using Intersection Observer\n useEffect(() => {\n if (!loadMoreTriggerRef.current) return;\n\n const observer = new IntersectionObserver(\n (entries) => {\n const entry = entries[0];\n if (entry.isIntersecting && hasMore && !isLoading) {\n console.log('[AuditLogQueryComponent] Intersection triggered, loading more...');\n // Call through the ref to always use the latest function\n loadMoreRef.current();\n }\n },\n {\n root: scrollContainerRef.current,\n rootMargin: '200px',\n threshold: 0,\n }\n );\n\n observer.observe(loadMoreTriggerRef.current);\n\n return () => {\n observer.disconnect();\n };\n }, [hasMore, isLoading]);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (filterDebounceRef.current) {\n clearTimeout(filterDebounceRef.current);\n }\n };\n }, []);\n\n return (\n <Card className={`flex-1 min-h-0 flex flex-col p-3 ${className}`}>\n {/* Filters */}\n <AuditLogFilters\n client={client}\n filters={filters}\n timeRange={timeRange}\n onFiltersChange={handleFiltersChange}\n onTimeRangeChange={handleTimeRangeChange}\n disabled={isLoading}\n />\n\n {/* Error Display */}\n <ApiErrorAlert error={error} onRetry={refresh} className=\"mb-4\" errorFormatter={errorFormatter} />\n\n {/* Event List with Infinite Scroll */}\n <div className=\"flex-1 min-h-0 overflow-y-auto pr-2\" ref={scrollContainerRef}>\n {/* Loading State (initial load) */}\n {isLoading && events.length === 0 && (\n <div className=\"flex items-center justify-center gap-3 py-8 text-muted-foreground text-sm\">\n <div className=\"w-5 h-5 border-[3px] border-muted border-t-primary rounded-full animate-spin\"></div>\n <span>Searching audit logs...</span>\n </div>\n )}\n\n {/* Empty State */}\n {!isLoading && events.length === 0 && !error && (\n <div className=\"py-12 text-center text-muted-foreground\">\n <p className=\"m-0\">No audit events found</p>\n <p className=\"text-sm text-muted-foreground mt-2 m-0\">\n Try adjusting your filters or time range\n </p>\n </div>\n )}\n\n {/* Event List */}\n {events.map((event, index) => (\n <AuditLogFeedItem\n key={event.auditID || `event-${index}`}\n event={event}\n onEventClick={onEventSelect}\n />\n ))}\n\n {/* Load More Trigger for Infinite Scroll */}\n {hasMore && <div ref={loadMoreTriggerRef} className=\"h-px mt-4\" />}\n\n {/* Loading Indicator (pagination) */}\n {isLoading && events.length > 0 && (\n <div className=\"flex items-center justify-center gap-3 py-8 text-muted-foreground text-sm\">\n <div className=\"w-5 h-5 border-[3px] border-muted border-t-primary rounded-full animate-spin\"></div>\n <span>Loading more events...</span>\n </div>\n )}\n\n {/* End of Results */}\n {!hasMore && events.length > 0 && !isLoading && (\n <div className=\"text-center py-6 text-muted-foreground text-sm border-t border-border mt-4\">\n End of results\n </div>\n )}\n </div>\n </Card>\n );\n}\n","import { useState, useEffect } from 'react';\nimport {\n subMinutes,\n subHours,\n subDays,\n subWeeks,\n startOfDay,\n endOfDay,\n formatISO\n} from 'date-fns';\nimport { Button } from './ui/button';\nimport { Input } from './ui/input';\nimport { Label } from './ui/label';\nimport { Card, CardContent } from './ui/card';\n\nexport interface DateTimeRange {\n start: string; // ISO 8601 timestamp\n end: string; // ISO 8601 timestamp\n}\n\nexport interface DateTimeRangePickerProps {\n onChange: (range: DateTimeRange) => void;\n initialRange?: DateTimeRange;\n className?: string;\n}\n\ntype PresetKey =\n | 'last15min'\n | 'last1hour'\n | 'last6hours'\n | 'last24hours'\n | 'last7days'\n | 'last30days'\n | 'today'\n | 'custom';\n\ninterface TimeRangePreset {\n label: string;\n getValue: () => DateTimeRange;\n}\n\nconst PRESETS: Record<PresetKey, TimeRangePreset> = {\n last15min: {\n label: 'Last 15 minutes',\n getValue: () => ({\n start: formatISO(subMinutes(new Date(), 15)),\n end: formatISO(new Date()),\n }),\n },\n last1hour: {\n label: 'Last 1 hour',\n getValue: () => ({\n start: formatISO(subHours(new Date(), 1)),\n end: formatISO(new Date()),\n }),\n },\n last6hours: {\n label: 'Last 6 hours',\n getValue: () => ({\n start: formatISO(subHours(new Date(), 6)),\n end: formatISO(new Date()),\n }),\n },\n last24hours: {\n label: 'Last 24 hours',\n getValue: () => ({\n start: formatISO(subHours(new Date(), 24)),\n end: formatISO(new Date()),\n }),\n },\n last7days: {\n label: 'Last 7 days',\n getValue: () => ({\n start: formatISO(subDays(new Date(), 7)),\n end: formatISO(new Date()),\n }),\n },\n last30days: {\n label: 'Last 30 days',\n getValue: () => ({\n start: formatISO(subDays(new Date(), 30)),\n end: formatISO(new Date()),\n }),\n },\n today: {\n label: 'Today',\n getValue: () => ({\n start: formatISO(startOfDay(new Date())),\n end: formatISO(endOfDay(new Date())),\n }),\n },\n custom: {\n label: 'Custom range',\n getValue: () => ({\n start: formatISO(subHours(new Date(), 1)),\n end: formatISO(new Date()),\n }),\n },\n};\n\n// Helper function to convert ISO string to datetime-local format\nconst formatDatetimeLocal = (isoString: string): string => {\n const date = new Date(isoString);\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n const hours = String(date.getHours()).padStart(2, '0');\n const minutes = String(date.getMinutes()).padStart(2, '0');\n return `${year}-${month}-${day}T${hours}:${minutes}`;\n};\n\n/**\n * DateTimeRangePicker component for selecting time ranges for audit log queries.\n * Supports both preset ranges (last 7 days, last 24 hours, etc.) and custom date/time selection.\n */\nexport function DateTimeRangePicker({\n onChange,\n initialRange,\n className = '',\n}: DateTimeRangePickerProps) {\n const [selectedPreset, setSelectedPreset] = useState<PresetKey>('last24hours');\n const [customStart, setCustomStart] = useState('');\n const [customEnd, setCustomEnd] = useState('');\n const [isCustom, setIsCustom] = useState(false);\n\n // Initialize with initial range or default preset\n useEffect(() => {\n if (initialRange) {\n setCustomStart(formatDatetimeLocal(initialRange.start));\n setCustomEnd(formatDatetimeLocal(initialRange.end));\n setIsCustom(true);\n setSelectedPreset('custom');\n } else {\n // Auto-apply the default preset on mount\n const range = PRESETS['last24hours'].getValue();\n onChange(range);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []); // Only run on mount\n\n const handlePresetChange = (preset: PresetKey) => {\n setSelectedPreset(preset);\n\n if (preset === 'custom') {\n setIsCustom(true);\n // If switching to custom, initialize with current values or defaults\n if (!customStart || !customEnd) {\n const defaultRange = PRESETS.last24hours.getValue();\n setCustomStart(formatDatetimeLocal(defaultRange.start));\n setCustomEnd(formatDatetimeLocal(defaultRange.end));\n }\n } else {\n setIsCustom(false);\n const range = PRESETS[preset].getValue();\n onChange(range);\n }\n };\n\n const handleCustomApply = () => {\n if (customStart && customEnd) {\n const range: DateTimeRange = {\n start: new Date(customStart).toISOString(),\n end: new Date(customEnd).toISOString(),\n };\n onChange(range);\n }\n };\n\n const handleCustomStartChange = (value: string) => {\n setCustomStart(value);\n };\n\n const handleCustomEndChange = (value: string) => {\n setCustomEnd(value);\n };\n\n return (\n <div className={`mb-6 p-4 bg-muted border border-border rounded-lg ${className}`}>\n <div className=\"flex flex-wrap gap-2 mb-4 max-sm:flex-col\">\n {(Object.keys(PRESETS) as PresetKey[]).map((key) => (\n <Button\n key={key}\n type=\"button\"\n variant={selectedPreset === key ? 'default' : 'outline'}\n className=\"max-sm:w-full\"\n onClick={() => handlePresetChange(key)}\n >\n {PRESETS[key].label}\n </Button>\n ))}\n </div>\n\n {isCustom && (\n <Card className=\"mt-4\">\n <CardContent className=\"flex flex-col gap-4 p-4\">\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"custom-start\">\n <strong>Start time</strong>\n </Label>\n <Input\n id=\"custom-start\"\n type=\"datetime-local\"\n value={customStart}\n onChange={(e) => handleCustomStartChange(e.target.value)}\n />\n </div>\n\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"custom-end\">\n <strong>End time</strong>\n </Label>\n <Input\n id=\"custom-end\"\n type=\"datetime-local\"\n value={customEnd}\n onChange={(e) => handleCustomEndChange(e.target.value)}\n />\n </div>\n\n <Button\n type=\"button\"\n onClick={handleCustomApply}\n className=\"self-start\"\n disabled={!customStart || !customEnd}\n >\n Apply Custom Range\n </Button>\n </CardContent>\n </Card>\n )}\n </div>\n );\n}\n","import { Button } from './ui/button';\nimport { cn } from '../lib/utils';\n\nexport type ActionOption = 'all' | 'create' | 'update' | 'delete' | 'get' | 'list' | 'watch';\n\nexport interface ActionToggleProps {\n /** Current selected value */\n value: ActionOption;\n /** Handler called when selection changes */\n onChange: (value: ActionOption) => void;\n /** Additional CSS class */\n className?: string;\n /** Whether the toggle is disabled */\n disabled?: boolean;\n}\n\n/**\n * Options for the action toggle\n */\nconst OPTIONS: { value: ActionOption; label: string; description: string }[] = [\n {\n value: 'all',\n label: 'All',\n description: 'Show all actions',\n },\n {\n value: 'create',\n label: 'Create',\n description: 'Show only create actions',\n },\n {\n value: 'update',\n label: 'Update',\n description: 'Show update and patch actions',\n },\n {\n value: 'delete',\n label: 'Delete',\n description: 'Show only delete actions',\n },\n {\n value: 'get',\n label: 'Get',\n description: 'Show only get actions',\n },\n {\n value: 'list',\n label: 'List',\n description: 'Show only list actions',\n },\n {\n value: 'watch',\n label: 'Watch',\n description: 'Show only watch actions',\n },\n];\n\n/**\n * ActionToggle provides a segmented control for filtering by action/verb\n */\nexport function ActionToggle({\n value,\n onChange,\n className = '',\n disabled = false,\n}: ActionToggleProps) {\n return (\n <div\n className={cn('inline-flex border border-input rounded-md overflow-hidden', className)}\n role=\"group\"\n aria-label=\"Filter by action\"\n >\n {OPTIONS.map((option, index) => (\n <Button\n key={option.value}\n type=\"button\"\n variant=\"ghost\"\n className={cn(\n 'rounded-none px-2 h-7 text-xs font-medium transition-all duration-200',\n index < OPTIONS.length - 1 && 'border-r border-input',\n value === option.value\n ? 'bg-[#BF9595] text-[#0C1D31] hover:bg-[#BF9595]/90'\n : 'bg-muted text-foreground hover:bg-muted/80'\n )}\n onClick={() => onChange(option.value)}\n disabled={disabled}\n aria-pressed={value === option.value}\n title={option.description}\n >\n {option.label}\n </Button>\n ))}\n </div>\n );\n}\n","import { useState, useCallback, useMemo, useEffect, useRef } from 'react';\nimport type { Activity, ActivityListParams, ActivityQuerySpec, ChangeSource, WatchEvent, EffectiveTimeRange } from '../types/activity';\nimport { ActivityApiClient } from '../api/client';\nimport { StreamError } from '../lib/errors';\n\n// Debounce delay for filter changes (ms)\nconst FILTER_DEBOUNCE_MS = 300;\n\n/**\n * Filter options for the activity feed\n */\nexport interface ActivityFeedFilters {\n /** Filter by change source (human/system/all) */\n changeSource?: ChangeSource | 'all';\n /** Full-text search on summaries */\n search?: string;\n /** Filter to a specific resource UID */\n resourceUid?: string;\n /** Filter by resource kinds (multi-select) */\n resourceKinds?: string[];\n /** Filter by actor names (multi-select) */\n actorNames?: string[];\n /** Filter by API groups (multi-select) */\n apiGroups?: string[];\n /** Filter by resource name (partial match) */\n resourceName?: string;\n /** Filter by resource namespaces (multi-select) */\n resourceNamespaces?: string[];\n /** Filter by actions (multi-select) - prepared for future backend support */\n actions?: string[];\n /** Custom CEL filter expression */\n customFilter?: string;\n}\n\n/**\n * Time range for the activity feed\n */\nexport interface TimeRange {\n /** Start of time range (RFC3339 or relative like \"now-24h\") */\n start: string;\n /** End of time range (RFC3339 or relative, default: now) */\n end?: string;\n}\n\n/**\n * Options for the useActivityFeed hook\n */\nexport interface UseActivityFeedOptions {\n /** API client instance */\n client: ActivityApiClient;\n /** Initial filter settings */\n initialFilters?: ActivityFeedFilters;\n /** Initial time range */\n initialTimeRange?: TimeRange;\n /** Number of items per page (default: 30) */\n pageSize?: number;\n /** Enable real-time streaming (default: false) */\n enableStreaming?: boolean;\n /** Auto-start streaming when enabled (default: true) */\n autoStartStreaming?: boolean;\n /** Callback invoked when the effective time range is resolved */\n onEffectiveTimeRangeChange?: (timeRange: EffectiveTimeRange) => void;\n}\n\n/**\n * Result returned by the useActivityFeed hook\n */\nexport interface UseActivityFeedResult {\n /** List of activities */\n activities: Activity[];\n /** Whether the feed is loading */\n isLoading: boolean;\n /** Error if any occurred */\n error: Error | null;\n /** Watch stream error if any occurred */\n watchError: Error | null;\n /** Whether there are more activities to load */\n hasMore: boolean;\n /** Current filter settings */\n filters: ActivityFeedFilters;\n /** Current time range */\n timeRange: TimeRange;\n /** Execute/refresh the feed query */\n refresh: () => Promise<void>;\n /** Load more activities (pagination) */\n loadMore: () => Promise<void>;\n /** Update filter settings */\n setFilters: (filters: ActivityFeedFilters) => void;\n /** Update time range */\n setTimeRange: (timeRange: TimeRange) => void;\n /** Reset to initial state */\n reset: () => void;\n /** Total count if available */\n totalCount?: number;\n /** Whether streaming is currently active */\n isStreaming: boolean;\n /** Start streaming (when enableStreaming is true) */\n startStreaming: () => void;\n /** Stop streaming */\n stopStreaming: () => void;\n /** Number of new activities received via streaming since last refresh */\n newActivitiesCount: number;\n /** Effective time range after query resolution (undefined until first query completes) */\n effectiveTimeRange?: EffectiveTimeRange;\n}\n\n/**\n * Escape a value for safe interpolation into a CEL string literal.\n * Prevents injection via values containing backslashes or double quotes.\n */\nfunction celEscape(value: string): string {\n return value.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"');\n}\n\n/**\n * Build CEL filter expression from filter options for ActivityQuery.\n * All filters are expressed as CEL — the API no longer accepts dedicated filter fields.\n */\nfunction buildCelFilter(filters: ActivityFeedFilters): string | undefined {\n const conditions: string[] = [];\n\n // Change source filter\n if (filters.changeSource && filters.changeSource !== 'all') {\n conditions.push(`spec.changeSource == \"${celEscape(filters.changeSource)}\"`);\n }\n\n // Resource UID filter (for resource-specific views)\n if (filters.resourceUid) {\n conditions.push(`spec.resource.uid == \"${celEscape(filters.resourceUid)}\"`);\n }\n\n // Resource kinds filter (multi-select)\n if (filters.resourceKinds && filters.resourceKinds.length > 0) {\n if (filters.resourceKinds.length === 1) {\n conditions.push(`spec.resource.kind == \"${celEscape(filters.resourceKinds[0])}\"`);\n } else {\n const kindConditions = filters.resourceKinds.map((k) => `spec.resource.kind == \"${celEscape(k)}\"`);\n conditions.push(`(${kindConditions.join(' || ')})`);\n }\n }\n\n // Actor names filter (multi-select)\n if (filters.actorNames && filters.actorNames.length > 0) {\n if (filters.actorNames.length === 1) {\n conditions.push(`spec.actor.name == \"${celEscape(filters.actorNames[0])}\"`);\n } else {\n const actorConditions = filters.actorNames.map((a) => `spec.actor.name == \"${celEscape(a)}\"`);\n conditions.push(`(${actorConditions.join(' || ')})`);\n }\n }\n\n // API groups filter (multi-select)\n if (filters.apiGroups && filters.apiGroups.length > 0) {\n if (filters.apiGroups.length === 1) {\n conditions.push(`spec.resource.apiGroup == \"${celEscape(filters.apiGroups[0])}\"`);\n } else {\n const groupConditions = filters.apiGroups.map((g) => `spec.resource.apiGroup == \"${celEscape(g)}\"`);\n conditions.push(`(${groupConditions.join(' || ')})`);\n }\n }\n\n // Resource name filter (partial match)\n if (filters.resourceName) {\n conditions.push(`spec.resource.name.contains(\"${celEscape(filters.resourceName)}\")`);\n }\n\n // Resource namespaces filter (multi-select)\n if (filters.resourceNamespaces && filters.resourceNamespaces.length > 0) {\n if (filters.resourceNamespaces.length === 1) {\n conditions.push(`spec.resource.namespace == \"${celEscape(filters.resourceNamespaces[0])}\"`);\n } else {\n const nsConditions = filters.resourceNamespaces.map((ns) => `spec.resource.namespace == \"${celEscape(ns)}\"`);\n conditions.push(`(${nsConditions.join(' || ')})`);\n }\n }\n\n // Custom filter\n if (filters.customFilter) {\n conditions.push(filters.customFilter);\n }\n\n return conditions.length > 0 ? conditions.join(' && ') : undefined;\n}\n\n/**\n * React hook for fetching and managing the activity feed with optional real-time streaming\n */\nexport function useActivityFeed({\n client,\n initialFilters = {},\n initialTimeRange = { start: 'now-7d' },\n pageSize = 30,\n enableStreaming = false,\n autoStartStreaming = true,\n onEffectiveTimeRangeChange,\n}: UseActivityFeedOptions): UseActivityFeedResult {\n const [activities, setActivities] = useState<Activity[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [watchError, setWatchError] = useState<Error | null>(null);\n const [continueCursor, setContinueCursor] = useState<string | undefined>();\n const [filters, setFilters] = useState<ActivityFeedFilters>(initialFilters);\n const [timeRange, setTimeRange] = useState<TimeRange>(initialTimeRange);\n const [isStreaming, setIsStreaming] = useState(false);\n const [newActivitiesCount, setNewActivitiesCount] = useState(0);\n const [effectiveTimeRange, setEffectiveTimeRange] = useState<EffectiveTimeRange | undefined>();\n\n // Track the latest resource version for watch resume\n const resourceVersionRef = useRef<string | undefined>();\n // Track the watch stop function\n const watchStopRef = useRef<(() => void) | null>(null);\n // Track whether streaming should restart after filter change\n const shouldRestartStreamingRef = useRef(false);\n // Track if we've done the initial load\n const hasInitialLoadRef = useRef(false);\n // Debounce timer for filter changes\n const filterDebounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Build ActivityQuerySpec from current state\n const buildQuerySpec = useCallback(\n (cursor?: string): ActivityQuerySpec => {\n const spec: ActivityQuerySpec = {\n startTime: timeRange.start,\n endTime: timeRange.end || 'now',\n limit: pageSize,\n };\n\n // Add search\n if (filters.search) {\n spec.search = filters.search;\n }\n\n // Add CEL filter\n const celFilter = buildCelFilter(filters);\n if (celFilter) {\n spec.filter = celFilter;\n }\n\n // Add pagination cursor\n if (cursor) {\n spec.continue = cursor;\n }\n\n return spec;\n },\n [filters, timeRange, pageSize]\n );\n\n // Build field selector string for Watch API\n // Supported fields: spec.changeSource, spec.resource.*, spec.actor.*\n const buildFieldSelector = useCallback((): string | undefined => {\n const selectors: string[] = [];\n\n // changeSource filter (single value)\n if (filters.changeSource && filters.changeSource !== 'all') {\n selectors.push(`spec.changeSource=${filters.changeSource}`);\n }\n\n // Resource UID filter (single value)\n if (filters.resourceUid) {\n selectors.push(`spec.resource.uid=${filters.resourceUid}`);\n }\n\n // Single resource kind (multi-value requires client-side filtering)\n if (filters.resourceKinds && filters.resourceKinds.length === 1) {\n selectors.push(`spec.resource.kind=${filters.resourceKinds[0]}`);\n }\n\n // Single actor name (multi-value requires client-side filtering)\n if (filters.actorNames && filters.actorNames.length === 1) {\n selectors.push(`spec.actor.name=${filters.actorNames[0]}`);\n }\n\n // Single API group (multi-value requires client-side filtering)\n if (filters.apiGroups && filters.apiGroups.length === 1) {\n selectors.push(`spec.resource.apiGroup=${filters.apiGroups[0]}`);\n }\n\n // Single resource namespace (multi-value requires client-side filtering)\n if (filters.resourceNamespaces && filters.resourceNamespaces.length === 1) {\n selectors.push(`spec.resource.namespace=${filters.resourceNamespaces[0]}`);\n }\n\n return selectors.length > 0 ? selectors.join(',') : undefined;\n }, [filters]);\n\n // Build watch params with field selectors for server-side filtering\n const buildWatchParams = useCallback((): ActivityListParams => {\n return {\n start: timeRange.start,\n end: timeRange.end,\n fieldSelector: buildFieldSelector(),\n };\n }, [timeRange, buildFieldSelector]);\n\n // Handle incoming watch events with client-side filtering for multi-value scenarios\n // Single-value filters (changeSource, single resourceKind, etc.) are handled server-side via fieldSelector\n // Multi-value filters (multiple resourceKinds, actorNames, etc.) require client-side filtering\n const handleWatchEvent = useCallback((event: WatchEvent<Activity>) => {\n if (event.type === 'ERROR') {\n console.error('Watch error:', event.object);\n return;\n }\n\n if (event.type === 'BOOKMARK') {\n // Update resource version for resume capability\n if (event.object.metadata?.resourceVersion) {\n resourceVersionRef.current = event.object.metadata.resourceVersion;\n }\n return;\n }\n\n // Update resource version from the event\n if (event.object.metadata?.resourceVersion) {\n resourceVersionRef.current = event.object.metadata.resourceVersion;\n }\n\n const activity = event.object;\n const spec = activity.spec;\n\n // Client-side filtering for multi-value filters (field selectors only support single values)\n // Multi-value resourceKinds filter\n if (filters.resourceKinds && filters.resourceKinds.length > 1) {\n if (!spec?.resource?.kind || !filters.resourceKinds.includes(spec.resource.kind)) {\n return;\n }\n }\n\n // Multi-value actorNames filter\n if (filters.actorNames && filters.actorNames.length > 1) {\n if (!spec?.actor?.name || !filters.actorNames.includes(spec.actor.name)) {\n return;\n }\n }\n\n // Multi-value apiGroups filter\n if (filters.apiGroups && filters.apiGroups.length > 1) {\n if (!spec?.resource?.apiGroup || !filters.apiGroups.includes(spec.resource.apiGroup)) {\n return;\n }\n }\n\n // Multi-value resourceNamespaces filter\n if (filters.resourceNamespaces && filters.resourceNamespaces.length > 1) {\n if (!spec?.resource?.namespace || !filters.resourceNamespaces.includes(spec.resource.namespace)) {\n return;\n }\n }\n\n // Resource name partial match filter (field selectors don't support partial matches)\n if (filters.resourceName) {\n if (!spec?.resource?.name || !spec.resource.name.includes(filters.resourceName)) {\n return;\n }\n }\n\n if (event.type === 'ADDED') {\n // Prepend new activity to the list\n setActivities((prev) => {\n // Check for duplicates by name\n const exists = prev.some((a) => a.metadata?.name === event.object.metadata?.name);\n if (exists) {\n return prev;\n }\n return [event.object, ...prev];\n });\n setNewActivitiesCount((prev) => prev + 1);\n } else if (event.type === 'MODIFIED') {\n // Update existing activity\n setActivities((prev) =>\n prev.map((a) =>\n a.metadata?.name === event.object.metadata?.name ? event.object : a\n )\n );\n } else if (event.type === 'DELETED') {\n // Remove deleted activity\n setActivities((prev) =>\n prev.filter((a) => a.metadata?.name !== event.object.metadata?.name)\n );\n }\n }, [filters]);\n\n // Start watching for real-time updates\n const startStreaming = useCallback(() => {\n if (watchStopRef.current) {\n // Already watching\n return;\n }\n\n // Clear any previous watch error when starting a new stream\n setWatchError(null);\n\n const params = buildWatchParams();\n const { stop } = client.watchActivities(params, {\n resourceVersion: resourceVersionRef.current,\n onEvent: handleWatchEvent,\n onError: (err) => {\n console.error('Watch stream error:', err);\n // Wrap the error in a StreamError for user-friendly messaging\n const streamError = new StreamError(err.message, err);\n setWatchError(streamError);\n setIsStreaming(false);\n watchStopRef.current = null;\n },\n onClose: () => {\n setIsStreaming(false);\n watchStopRef.current = null;\n },\n });\n\n watchStopRef.current = stop;\n setIsStreaming(true);\n setNewActivitiesCount(0);\n }, [client, buildWatchParams, handleWatchEvent]);\n\n // Stop watching\n const stopStreaming = useCallback(() => {\n setIsStreaming(false);\n if (watchStopRef.current) {\n watchStopRef.current();\n watchStopRef.current = null;\n }\n }, []);\n\n // Execute the feed query using ActivityQuery\n const refresh = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n setNewActivitiesCount(0);\n\n try {\n const spec = buildQuerySpec();\n const result = await client.createActivityQuery(spec);\n const activitiesArray = result.status?.results || [];\n\n setActivities(activitiesArray);\n setContinueCursor(result.status?.continue);\n\n // Capture and notify about effective time range\n if (result.status?.effectiveStartTime && result.status?.effectiveEndTime) {\n const newEffectiveTimeRange: EffectiveTimeRange = {\n startTime: result.status.effectiveStartTime,\n endTime: result.status.effectiveEndTime,\n };\n setEffectiveTimeRange(newEffectiveTimeRange);\n onEffectiveTimeRangeChange?.(newEffectiveTimeRange);\n }\n\n // Note: ActivityQuery doesn't return resourceVersion, so we'll get it from the watch\n hasInitialLoadRef.current = true;\n\n // Auto-restart streaming if it was active before filter change\n if (shouldRestartStreamingRef.current && enableStreaming) {\n shouldRestartStreamingRef.current = false;\n // Defer streaming start to next tick to ensure state is updated\n setTimeout(() => {\n if (watchStopRef.current === null) {\n // startStreaming will be called via the effect\n }\n }, 0);\n }\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)));\n shouldRestartStreamingRef.current = false;\n } finally {\n setIsLoading(false);\n }\n }, [client, buildQuerySpec, enableStreaming, onEffectiveTimeRangeChange]);\n\n // Load more activities (pagination) using ActivityQuery\n const loadMore = useCallback(async () => {\n if (!continueCursor || isLoading) {\n return;\n }\n\n setIsLoading(true);\n setError(null);\n\n try {\n const spec = buildQuerySpec(continueCursor);\n const result = await client.createActivityQuery(spec);\n\n // Deduplicate before appending - use uid as primary key, fallback to name\n setActivities((prev) => {\n const existingUids = new Set(prev.map(a => a.metadata?.uid).filter(Boolean));\n const existingNames = new Set(prev.map(a => a.metadata?.name).filter(Boolean));\n\n const newActivities = (result.status?.results || []).filter(activity => {\n const uid = activity.metadata?.uid;\n const name = activity.metadata?.name;\n\n // Use uid if available (most reliable), otherwise fall back to name\n if (uid) {\n return !existingUids.has(uid);\n }\n if (name) {\n return !existingNames.has(name);\n }\n // If no uid or name, allow it through (shouldn't happen in practice)\n return true;\n });\n\n return [...prev, ...newActivities];\n });\n setContinueCursor(result.status?.continue);\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)));\n } finally {\n setIsLoading(false);\n }\n }, [client, buildQuerySpec, continueCursor, isLoading]);\n\n // Update filters and reset pagination with debounced auto-refresh\n const updateFilters = useCallback((newFilters: ActivityFeedFilters) => {\n // Track if streaming was active so we can restart it\n if (isStreaming) {\n shouldRestartStreamingRef.current = true;\n stopStreaming();\n }\n\n // Set loading FIRST so skeleton loaders appear immediately\n setIsLoading(true);\n setFilters(newFilters);\n setActivities([]);\n setContinueCursor(undefined);\n resourceVersionRef.current = undefined;\n\n // Cancel any pending debounced refresh\n if (filterDebounceRef.current) {\n clearTimeout(filterDebounceRef.current);\n }\n\n // Debounce the refresh to avoid excessive API calls\n filterDebounceRef.current = setTimeout(() => {\n filterDebounceRef.current = null;\n }, FILTER_DEBOUNCE_MS);\n }, [stopStreaming, isStreaming]);\n\n // Update time range and reset pagination with auto-refresh\n const updateTimeRange = useCallback((newTimeRange: TimeRange) => {\n // Track if streaming was active so we can restart it\n if (isStreaming) {\n shouldRestartStreamingRef.current = true;\n stopStreaming();\n }\n\n // Set loading FIRST so skeleton loaders appear immediately\n setIsLoading(true);\n setTimeRange(newTimeRange);\n setActivities([]);\n setContinueCursor(undefined);\n resourceVersionRef.current = undefined;\n\n // Cancel any pending debounced refresh\n if (filterDebounceRef.current) {\n clearTimeout(filterDebounceRef.current);\n }\n\n // Debounce the refresh\n filterDebounceRef.current = setTimeout(() => {\n filterDebounceRef.current = null;\n }, FILTER_DEBOUNCE_MS);\n }, [stopStreaming, isStreaming]);\n\n // Reset to initial state\n const reset = useCallback(() => {\n stopStreaming();\n setActivities([]);\n setError(null);\n setWatchError(null);\n setContinueCursor(undefined);\n setFilters(initialFilters);\n setTimeRange(initialTimeRange);\n setNewActivitiesCount(0);\n resourceVersionRef.current = undefined;\n }, [initialFilters, initialTimeRange, stopStreaming]);\n\n // Auto-refresh when filters or time range change (debounced)\n useEffect(() => {\n // Skip the initial render - we'll handle that separately\n if (!hasInitialLoadRef.current) {\n return;\n }\n\n // Cancel any pending refresh\n if (filterDebounceRef.current) {\n clearTimeout(filterDebounceRef.current);\n }\n\n // Debounce the refresh\n filterDebounceRef.current = setTimeout(() => {\n filterDebounceRef.current = null;\n refresh();\n }, FILTER_DEBOUNCE_MS);\n\n return () => {\n if (filterDebounceRef.current) {\n clearTimeout(filterDebounceRef.current);\n filterDebounceRef.current = null;\n }\n };\n }, [filters, timeRange]); // eslint-disable-line react-hooks/exhaustive-deps\n\n // Auto-start streaming after initial load when enabled\n useEffect(() => {\n if (enableStreaming && autoStartStreaming && activities.length > 0 && !isStreaming && !isLoading) {\n startStreaming();\n }\n }, [enableStreaming, autoStartStreaming, activities.length, isStreaming, isLoading, startStreaming]);\n\n // Restart streaming after filter change refresh completes\n useEffect(() => {\n if (\n enableStreaming &&\n shouldRestartStreamingRef.current &&\n activities.length > 0 &&\n !isStreaming &&\n !isLoading\n ) {\n shouldRestartStreamingRef.current = false;\n startStreaming();\n }\n }, [enableStreaming, activities.length, isStreaming, isLoading, startStreaming]);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (watchStopRef.current) {\n watchStopRef.current();\n }\n if (filterDebounceRef.current) {\n clearTimeout(filterDebounceRef.current);\n }\n };\n }, []);\n\n const hasMore = useMemo(() => !!continueCursor, [continueCursor]);\n\n return {\n activities,\n isLoading,\n error,\n watchError,\n hasMore,\n filters,\n timeRange,\n refresh,\n loadMore,\n setFilters: updateFilters,\n setTimeRange: updateTimeRange,\n reset,\n isStreaming,\n startStreaming,\n stopStreaming,\n newActivitiesCount,\n effectiveTimeRange,\n };\n}\n","import type { ActivityLink, ResourceRef, ResourceLinkResolver, ResourceLinkContext } from '../types/activity';\n\nexport interface ResourceLinkClickHandler {\n (resource: ResourceRef): void;\n}\n\nexport interface ActivityFeedSummaryProps {\n /** The summary text to render */\n summary: string;\n /** Links within the summary to make clickable */\n links?: ActivityLink[];\n /** Handler called when a resource link is clicked (deprecated: use resourceLinkResolver) */\n onResourceClick?: ResourceLinkClickHandler;\n /** Function that resolves resource references to URLs (renders as <a> tags) */\n resourceLinkResolver?: ResourceLinkResolver;\n /** Context for resolving resource links (includes tenant information) */\n resourceLinkContext?: ResourceLinkContext;\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * Parse summary text and replace marker strings with clickable links\n */\nfunction parseSummaryWithLinks(\n summary: string,\n links: ActivityLink[] | undefined,\n onResourceClick?: ResourceLinkClickHandler,\n resourceLinkResolver?: ResourceLinkResolver,\n resourceLinkContext?: ResourceLinkContext\n): (string | JSX.Element)[] {\n if (!links || links.length === 0) {\n return [summary];\n }\n\n // Sort links by marker length (longest first) to avoid partial matches\n const sortedLinks = [...links].sort((a, b) => b.marker.length - a.marker.length);\n\n // Track positions that have been replaced\n interface ReplacedRange {\n start: number;\n end: number;\n link: ActivityLink;\n }\n\n const replacedRanges: ReplacedRange[] = [];\n\n // Find all marker positions\n for (const link of sortedLinks) {\n let searchStart = 0;\n let pos = summary.indexOf(link.marker, searchStart);\n\n while (pos !== -1) {\n const end = pos + link.marker.length;\n\n // Check if this range overlaps with any existing range\n const overlaps = replacedRanges.some(\n (range) => pos < range.end && end > range.start\n );\n\n if (!overlaps) {\n replacedRanges.push({ start: pos, end, link });\n }\n\n searchStart = pos + 1;\n pos = summary.indexOf(link.marker, searchStart);\n }\n }\n\n // Sort ranges by start position\n replacedRanges.sort((a, b) => a.start - b.start);\n\n // Build the result array\n const result: (string | JSX.Element)[] = [];\n let lastEnd = 0;\n\n for (let i = 0; i < replacedRanges.length; i++) {\n const range = replacedRanges[i];\n\n // Add text before this marker\n if (range.start > lastEnd) {\n result.push(summary.substring(lastEnd, range.start));\n }\n\n // If resourceLinkResolver is provided, render as <a> tag\n if (resourceLinkResolver) {\n const url = resourceLinkResolver(range.link.resource, resourceLinkContext);\n if (url) {\n result.push(\n <a\n key={`link-${i}`}\n href={url}\n className=\"underline underline-offset-2 text-primary hover:text-primary/80\"\n title={`${range.link.resource.kind}: ${range.link.resource.name}`}\n onClick={(e) => e.stopPropagation()}\n >\n {range.link.marker}\n </a>\n );\n } else {\n // Resolver returned undefined, render as plain text\n result.push(range.link.marker);\n }\n } else {\n // Fallback to button with onResourceClick handler for backward compatibility\n const handleClick = onResourceClick\n ? (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n onResourceClick(range.link.resource);\n }\n : undefined;\n\n result.push(\n <button\n key={`link-${i}`}\n type=\"button\"\n className=\"bg-transparent border-none p-0 cursor-pointer underline underline-offset-2 text-primary hover:text-primary/80\"\n onClick={handleClick}\n title={`${range.link.resource.kind}: ${range.link.resource.name}`}\n >\n {range.link.marker}\n </button>\n );\n }\n\n lastEnd = range.end;\n }\n\n // Add any remaining text\n if (lastEnd < summary.length) {\n result.push(summary.substring(lastEnd));\n }\n\n return result;\n}\n\n/**\n * ActivityFeedSummary renders an activity summary with clickable resource links\n */\nexport function ActivityFeedSummary({\n summary,\n links,\n onResourceClick,\n resourceLinkResolver,\n resourceLinkContext,\n className = '',\n}: ActivityFeedSummaryProps) {\n const parsedContent = parseSummaryWithLinks(summary, links, onResourceClick, resourceLinkResolver, resourceLinkContext);\n\n return (\n <span className={`text-xs text-foreground leading-normal break-words ${className}`}>\n {parsedContent}\n </span>\n );\n}\n","import * as React from 'react';\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip';\n\nimport { cn } from '../../lib/utils';\n\nconst TooltipProvider = TooltipPrimitive.Provider;\n\nconst Tooltip = TooltipPrimitive.Root;\n\nconst TooltipTrigger = TooltipPrimitive.Trigger;\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'z-50 overflow-hidden rounded-md border bg-white dark:bg-slate-900 px-3 py-1.5 text-sm text-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n className\n )}\n {...props}\n />\n));\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n","import { useState } from 'react';\nimport { format } from 'date-fns';\nimport { Copy, Check } from 'lucide-react';\nimport type { Activity, TenantLinkResolver } from '../types/activity';\nimport { TenantBadge } from './TenantBadge';\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from './ui/tooltip';\n\nexport interface ActivityExpandedDetailsProps {\n /** The activity to display details for */\n activity: Activity;\n /** Optional resolver function to make tenant badges clickable */\n tenantLinkResolver?: TenantLinkResolver;\n}\n\n/**\n * Format timestamp for display (with timezone)\n */\nfunction formatTimestampFull(timestamp?: string): string {\n if (!timestamp) return 'Unknown time';\n try {\n return format(new Date(timestamp), 'yyyy-MM-dd HH:mm:ss \\'UTC\\'');\n } catch {\n return timestamp;\n }\n}\n\n/**\n * CopyButton component for copying field values to clipboard\n */\nfunction CopyButton({ value, label }: { value: string; label: string }) {\n const [isCopied, setIsCopied] = useState(false);\n\n const handleCopy = async (e: React.MouseEvent) => {\n e.stopPropagation();\n try {\n await navigator.clipboard.writeText(value);\n setIsCopied(true);\n setTimeout(() => setIsCopied(false), 2000);\n } catch (err) {\n console.error('Failed to copy:', err);\n }\n };\n\n return (\n <Tooltip delayDuration={500}>\n <TooltipTrigger asChild>\n <button\n onClick={handleCopy}\n className=\"inline-flex items-center justify-center p-0.5 rounded hover:bg-gray-100 dark:hover:bg-gray-800 transition-opacity cursor-pointer ml-1\"\n aria-label={`Copy ${label}`}\n >\n {isCopied ? (\n <Check className=\"h-3 w-3 text-green-600 dark:text-green-400\" />\n ) : (\n <Copy className=\"h-3 w-3 text-gray-500 dark:text-gray-400\" />\n )}\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"top\">\n <p className=\"text-xs\">{isCopied ? 'Copied!' : `Copy ${label}`}</p>\n </TooltipContent>\n </Tooltip>\n );\n}\n\n/**\n * ActivityExpandedDetails renders the expanded details section for an activity.\n * Used by both feed and timeline variants of ActivityFeedItem for consistent UX.\n *\n * Section order (most to least relevant for investigation):\n * 1. Changes - what changed (most actionable)\n * 2. Timestamp - when it happened\n * 3. Tenant - scope of the activity\n * 4. Actor - who made the change\n * 5. Resource - what resource was affected\n * 6. Origin - correlation to audit logs\n */\nexport function ActivityExpandedDetails({ activity, tenantLinkResolver }: ActivityExpandedDetailsProps) {\n const { spec, metadata } = activity;\n const { actor, resource, origin, changes, tenant } = spec;\n const timestamp = metadata?.creationTimestamp;\n\n return (\n <TooltipProvider>\n <div className=\"mt-4 pt-4 border-t border-border\">\n {/* Field Changes - Most actionable, shown first */}\n {changes && changes.length > 0 && (\n <div className=\"mb-3\">\n <h4 className=\"m-0 mb-2 text-xs font-semibold text-muted-foreground uppercase tracking-wide\">\n Changes\n </h4>\n <div className=\"flex flex-col gap-2\">\n {changes.map((change, index) => (\n <div key={index} className=\"p-2 bg-muted rounded text-sm\">\n <span className=\"block font-semibold text-foreground mb-1 font-mono text-xs\">\n {change.field}\n </span>\n {change.old && (\n <span className=\"block ml-2 text-red-600 dark:text-red-400 text-xs\">\n <span className=\"font-medium mr-1\">−</span>\n <span className=\"line-through\">{change.old}</span>\n </span>\n )}\n {change.new && (\n <span className=\"block ml-2 text-green-600 dark:text-green-400 text-xs\">\n <span className=\"font-medium mr-1\">+</span>\n {change.new}\n </span>\n )}\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* CSS Grid layout with reduced min-width for more columns */}\n <dl className=\"grid grid-cols-[repeat(auto-fit,minmax(250px,1fr))] gap-x-6 gap-y-2 m-0 text-xs\">\n {/* 1. Timestamp */}\n <div className=\"flex gap-1 items-baseline\">\n <dt className=\"text-muted-foreground shrink-0\">Timestamp:</dt>\n <dd className=\"m-0 text-foreground flex items-center min-w-0\">\n <span className=\"truncate\">{formatTimestampFull(timestamp)}</span>\n <CopyButton value={formatTimestampFull(timestamp)} label=\"timestamp\" />\n </dd>\n </div>\n\n {/* 2. Actor Type */}\n <div className=\"flex gap-1 items-baseline\">\n <dt className=\"text-muted-foreground shrink-0\">Actor Type:</dt>\n <dd className=\"m-0 text-foreground flex items-center min-w-0\">\n <span className=\"truncate\">{actor.type}</span>\n <CopyButton value={actor.type} label=\"actor type\" />\n </dd>\n </div>\n\n {/* 3. Actor */}\n <div className=\"flex gap-1 items-baseline\">\n <dt className=\"text-muted-foreground shrink-0\">Actor:</dt>\n <dd className=\"m-0 text-foreground flex items-center min-w-0\">\n <span className=\"truncate\">{actor.name}</span>\n <CopyButton value={actor.name} label=\"actor name\" />\n </dd>\n </div>\n\n {/* 4. API Group */}\n {resource.apiGroup && (\n <div className=\"flex gap-1 items-baseline\">\n <dt className=\"text-muted-foreground shrink-0\">API Group:</dt>\n <dd className=\"m-0 text-foreground flex items-center min-w-0\">\n <span className=\"truncate\">{resource.apiGroup}</span>\n <CopyButton value={resource.apiGroup} label=\"API group\" />\n </dd>\n </div>\n )}\n\n {/* 5. Resource */}\n <div className=\"flex gap-1 items-baseline\">\n <dt className=\"text-muted-foreground shrink-0\">Resource:</dt>\n <dd className=\"m-0 text-foreground flex items-center min-w-0\">\n <span className=\"truncate\">{resource.kind}</span>\n <CopyButton value={resource.kind} label=\"resource kind\" />\n </dd>\n </div>\n\n {/* 6. Resource Name */}\n <div className=\"flex gap-1 items-baseline\">\n <dt className=\"text-muted-foreground shrink-0\">Resource Name:</dt>\n <dd className=\"m-0 text-foreground flex items-center min-w-0\">\n <span className=\"truncate\">{resource.name}</span>\n <CopyButton value={resource.name} label=\"resource name\" />\n </dd>\n </div>\n\n {/* 7. Namespace */}\n {resource.namespace && (\n <div className=\"flex gap-1 items-baseline\">\n <dt className=\"text-muted-foreground shrink-0\">Namespace:</dt>\n <dd className=\"m-0 text-foreground flex items-center min-w-0\">\n <span className=\"truncate\">{resource.namespace}</span>\n <CopyButton value={resource.namespace} label=\"namespace\" />\n </dd>\n </div>\n )}\n\n {/* 8. Resource UID */}\n {resource.uid && (\n <div className=\"flex gap-1 items-baseline\">\n <dt className=\"text-muted-foreground shrink-0\">Resource UID:</dt>\n <dd className=\"m-0 font-mono text-muted-foreground flex items-center min-w-0\">\n <span className=\"truncate\">{resource.uid}</span>\n <CopyButton value={resource.uid} label=\"resource UID\" />\n </dd>\n </div>\n )}\n\n {/* 9. Origin */}\n <div className=\"flex gap-1 items-baseline\">\n <dt className=\"text-muted-foreground shrink-0\">Origin:</dt>\n <dd className=\"m-0 text-foreground flex items-center min-w-0\">\n <span className=\"truncate\">{origin.type}</span>\n <CopyButton value={origin.type} label=\"origin type\" />\n </dd>\n </div>\n\n {/* 10. Origin ID */}\n <div className=\"flex gap-1 items-baseline\">\n <dt className=\"text-muted-foreground shrink-0\">Origin ID:</dt>\n <dd className=\"m-0 font-mono text-muted-foreground flex items-center min-w-0\">\n <span className=\"truncate\">{origin.id}</span>\n <CopyButton value={origin.id} label=\"origin ID\" />\n </dd>\n </div>\n </dl>\n </div>\n </TooltipProvider>\n );\n}\n","import { useState } from 'react';\nimport { format, formatDistanceToNow } from 'date-fns';\nimport type { Activity, ResourceLinkResolver, TenantLinkResolver, TenantRenderer } from '../types/activity';\nimport { ActivityFeedSummary, ResourceLinkClickHandler } from './ActivityFeedSummary';\nimport { ActivityExpandedDetails } from './ActivityExpandedDetails';\nimport { TenantBadge } from './TenantBadge';\nimport { cn } from '../lib/utils';\nimport { Button } from './ui/button';\nimport { Card } from './ui/card';\n\nexport interface ActivityFeedItemProps {\n /** The activity to render */\n activity: Activity;\n /** Handler called when a resource link is clicked (deprecated: use resourceLinkResolver) */\n onResourceClick?: ResourceLinkClickHandler;\n /** Function that resolves resource references to URLs */\n resourceLinkResolver?: ResourceLinkResolver;\n /** Function that resolves tenant references to URLs */\n tenantLinkResolver?: TenantLinkResolver;\n /** Custom renderer for tenant badges (overrides default TenantBadge) */\n tenantRenderer?: TenantRenderer;\n /** Handler called when the actor name or avatar is clicked */\n onActorClick?: (actorName: string) => void;\n /** Handler called when the item is clicked */\n onActivityClick?: (activity: Activity) => void;\n /** Whether the item is selected */\n isSelected?: boolean;\n /** Additional CSS class */\n className?: string;\n /** Whether to show as compact (for resource detail tabs) */\n compact?: boolean;\n /** Whether this is a newly streamed activity */\n isNew?: boolean;\n /** Layout variant: 'feed' (default) or 'timeline' */\n variant?: 'feed' | 'timeline';\n /** Whether this is the first item in the list (hides timeline head, only used in timeline variant) */\n isFirst?: boolean;\n /** Whether this is the last item in the list (hides timeline tail, only used in timeline variant) */\n isLast?: boolean;\n /** Whether the item starts expanded */\n defaultExpanded?: boolean;\n}\n\n/**\n * Format timestamp for display\n */\nfunction formatTimestamp(timestamp?: string): string {\n if (!timestamp) return 'Unknown time';\n try {\n const date = new Date(timestamp);\n return formatDistanceToNow(date, { addSuffix: true });\n } catch {\n return timestamp;\n }\n}\n\n/**\n * Format timestamp for tooltip (with timezone)\n */\nfunction formatTimestampFull(timestamp?: string): string {\n if (!timestamp) return 'Unknown time';\n try {\n return format(new Date(timestamp), 'yyyy-MM-dd HH:mm:ss \\'UTC\\'');\n } catch {\n return timestamp;\n }\n}\n\n/**\n * Get avatar initials from actor name\n */\nfunction getActorInitials(name: string): string {\n const parts = name.split(/[@\\s.]+/).filter(Boolean);\n if (parts.length === 0) return '?';\n if (parts.length === 1) return parts[0].charAt(0).toUpperCase();\n return (parts[0].charAt(0) + parts[parts.length - 1].charAt(0)).toUpperCase();\n}\n\n/**\n * Get Tailwind classes for actor avatar based on actor type\n */\nfunction getActorAvatarClasses(actorType: string, compact: boolean): string {\n const baseClasses = cn(\n 'rounded-full flex items-center justify-center shrink-0 font-semibold',\n compact ? 'w-5 h-5 text-xs' : 'w-6 h-6 text-xs'\n );\n switch (actorType) {\n case 'user':\n return cn(baseClasses, 'bg-lime-200 text-slate-900 dark:bg-lime-800 dark:text-lime-100');\n case 'controller':\n return cn(baseClasses, 'bg-rose-300 text-slate-900 dark:bg-rose-800 dark:text-rose-100');\n case 'machine account':\n return cn(baseClasses, 'bg-muted text-muted-foreground');\n default:\n return cn(baseClasses, 'bg-muted text-muted-foreground');\n }\n}\n\n/**\n * Extract verb from activity summary (e.g., \"alice created HTTPProxy\" -> \"created\")\n */\nfunction extractVerb(summary: string): string {\n const words = summary.split(/\\s+/);\n if (words.length >= 2) {\n return words[1].toLowerCase();\n }\n return 'unknown';\n}\n\n/**\n * Normalize verb to a canonical form for coloring\n */\nfunction normalizeVerb(verb: string): 'create' | 'update' | 'delete' | 'other' {\n const normalized = verb.toLowerCase();\n if (normalized.includes('create') || normalized.includes('add')) return 'create';\n if (normalized.includes('delete') || normalized.includes('remove')) return 'delete';\n if (normalized.includes('update') || normalized.includes('patch') || normalized.includes('modify') || normalized.includes('change') || normalized.includes('edit')) return 'update';\n return 'other';\n}\n\n/**\n * Get timeline node classes based on verb\n */\nfunction getTimelineNodeClasses(verb: string): string {\n const normalizedVerb = normalizeVerb(verb);\n switch (normalizedVerb) {\n case 'create':\n return 'bg-green-500';\n case 'update':\n return 'bg-amber-500';\n case 'delete':\n return 'bg-red-500';\n default:\n return 'bg-muted-foreground';\n }\n}\n\n/**\n * ActivityFeedItem renders a single activity in the feed or timeline\n */\nexport function ActivityFeedItem({\n activity,\n onResourceClick,\n resourceLinkResolver,\n tenantLinkResolver,\n tenantRenderer,\n onActorClick,\n onActivityClick,\n isSelected = false,\n className = '',\n compact = false,\n isNew = false,\n variant = 'feed',\n isFirst = false,\n isLast = false,\n defaultExpanded = false,\n}: ActivityFeedItemProps) {\n const [isExpanded, setIsExpanded] = useState(defaultExpanded);\n\n const { spec, metadata } = activity;\n const { actor, summary, links, tenant } = spec;\n\n const handleClick = () => {\n onActivityClick?.(activity);\n };\n\n const handleActorClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n if (onActorClick) {\n onActorClick(actor.name);\n }\n };\n\n const toggleExpand = (e: React.MouseEvent) => {\n e.stopPropagation();\n setIsExpanded(!isExpanded);\n };\n\n const timestamp = metadata?.creationTimestamp;\n const verb = extractVerb(summary);\n const isTimeline = variant === 'timeline';\n\n // Timeline variant wrapper\n if (isTimeline) {\n return (\n <div\n className={cn(\n 'relative cursor-pointer group flex',\n compact ? 'pl-7' : 'pl-9',\n className\n )}\n onClick={handleClick}\n >\n {/* Timeline column - contains line and dot */}\n <div\n className={cn(\n 'absolute left-0 top-0 bottom-0 flex flex-col items-center',\n compact ? 'w-7' : 'w-9'\n )}\n >\n {/* Top line segment (connects to previous item) */}\n <div\n className={cn(\n 'w-0.5 flex-1',\n isFirst ? 'bg-transparent' : 'bg-border'\n )}\n style={{ minHeight: compact ? 12 : 16 }}\n />\n\n {/* Timeline node (dot) - centered */}\n <div\n className={cn(\n 'rounded-full shrink-0 z-10',\n compact ? 'w-2.5 h-2.5' : 'w-3 h-3',\n getTimelineNodeClasses(verb)\n )}\n />\n\n {/* Bottom line segment (connects to next item) */}\n <div\n className={cn(\n 'w-0.5 flex-1',\n isLast ? 'bg-transparent' : 'bg-border'\n )}\n />\n </div>\n\n {/* Event content card */}\n <div\n className={cn(\n 'flex-1 border border-border rounded-lg transition-all duration-200 bg-card',\n 'shadow-sm hover:shadow-md hover:-translate-y-0.5',\n 'hover:border-primary/30 dark:hover:border-primary/40',\n compact ? 'p-2 mb-2' : 'p-2.5 mb-2',\n isSelected && 'border-primary bg-primary/5 ring-1 ring-primary/20 dark:bg-primary/10'\n )}\n >\n {/* Single row layout */}\n <div className=\"flex items-center gap-2\">\n {/* Summary - takes remaining space */}\n <div className=\"flex-1 min-w-0 text-xs leading-snug\">\n <ActivityFeedSummary\n summary={summary}\n links={links}\n onResourceClick={onResourceClick}\n resourceLinkResolver={resourceLinkResolver}\n resourceLinkContext={{ tenant }}\n />\n </div>\n\n {/* Tenant badge */}\n {tenant && (\n <div className=\"shrink-0\">\n {tenantRenderer ? tenantRenderer(tenant) : <TenantBadge tenant={tenant} tenantLinkResolver={tenantLinkResolver} size=\"compact\" />}\n </div>\n )}\n\n {/* Timestamp */}\n <span\n className=\"text-xs text-muted-foreground whitespace-nowrap shrink-0\"\n title={formatTimestampFull(timestamp)}\n >\n {formatTimestamp(timestamp)}\n </span>\n\n {/* Expand button */}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-5 py-0 px-1 text-base text-muted-foreground hover:text-foreground shrink-0\"\n onClick={toggleExpand}\n aria-expanded={isExpanded}\n >\n {isExpanded ? '−' : '+'}\n </Button>\n </div>\n\n {/* Expanded Details */}\n {isExpanded && <ActivityExpandedDetails activity={activity} tenantLinkResolver={tenantLinkResolver} />}\n </div>\n </div>\n );\n }\n\n // Feed variant (single-row layout)\n return (\n <Card\n className={cn(\n 'cursor-pointer transition-all duration-200',\n 'shadow-sm hover:shadow-md hover:-translate-y-0.5',\n 'hover:border-primary/30 dark:hover:border-primary/40',\n compact ? 'p-1.5 mb-1' : 'p-4 mb-3',\n isSelected && 'border-primary bg-primary/5 shadow-md ring-1 ring-primary/20 dark:bg-primary/10',\n isNew && 'border-l-4 border-l-green-500 bg-green-50/50 dark:border-l-green-400 dark:bg-green-950/30',\n className\n )}\n onClick={handleClick}\n >\n {/* Single row layout */}\n <div className=\"flex items-center gap-2\">\n {/* Actor Avatar */}\n <div\n className={cn(\n getActorAvatarClasses(actor.type, compact),\n onActorClick && 'cursor-pointer hover:opacity-80 transition-opacity'\n )}\n title={actor.name}\n onClick={onActorClick ? handleActorClick : undefined}\n >\n {actor.type === 'controller' ? (\n <span className=\"text-xs\">⚙</span>\n ) : actor.type === 'machine account' ? (\n <span className=\"text-xs\">🤖</span>\n ) : (\n <span className=\"uppercase\">{getActorInitials(actor.name)}</span>\n )}\n </div>\n\n {/* Summary - takes remaining space */}\n <div className=\"flex-1 min-w-0 text-xs leading-snug\">\n <ActivityFeedSummary\n summary={summary}\n links={links}\n onResourceClick={onResourceClick}\n resourceLinkResolver={resourceLinkResolver}\n resourceLinkContext={{ tenant }}\n />\n </div>\n\n {/* Tenant badge */}\n {tenant && (\n <div className=\"shrink-0\">\n {tenantRenderer ? tenantRenderer(tenant) : <TenantBadge tenant={tenant} tenantLinkResolver={tenantLinkResolver} size=\"compact\" />}\n </div>\n )}\n\n {/* Timestamp */}\n <span\n className=\"text-xs text-muted-foreground whitespace-nowrap shrink-0\"\n title={formatTimestampFull(timestamp)}\n >\n {formatTimestamp(timestamp)}\n </span>\n\n {/* Expand button */}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-5 py-0 px-1 text-base text-muted-foreground hover:text-foreground shrink-0\"\n onClick={toggleExpand}\n aria-expanded={isExpanded}\n >\n {isExpanded ? '−' : '+'}\n </Button>\n </div>\n\n {/* Expanded Details */}\n {isExpanded && <ActivityExpandedDetails activity={activity} tenantLinkResolver={tenantLinkResolver} />}\n </Card>\n );\n}\n","import { cn } from '../../lib/utils';\n\nfunction Skeleton({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\"animate-pulse rounded-md bg-muted\", className)}\n {...props}\n />\n );\n}\n\nexport { Skeleton };\n","import { Card } from './ui/card';\nimport { Skeleton } from './ui/skeleton';\nimport { cn } from '../lib/utils';\n\nexport interface ActivityFeedItemSkeletonProps {\n /** Whether to show as compact (for resource detail tabs) */\n compact?: boolean;\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * ActivityFeedItemSkeleton renders a loading placeholder that matches ActivityFeedItem layout\n */\nexport function ActivityFeedItemSkeleton({\n compact = false,\n className = '',\n}: ActivityFeedItemSkeletonProps) {\n return (\n <Card\n className={cn(\n compact ? 'p-2 mb-1.5' : 'p-2.5 mb-2',\n className\n )}\n >\n {/* Single row layout */}\n <div className=\"flex items-center gap-2\">\n {/* Actor Avatar skeleton */}\n <Skeleton className={cn(\n 'rounded-full shrink-0',\n compact ? 'w-3.5 h-3.5' : 'w-4 h-4'\n )} />\n\n {/* Summary skeleton - takes remaining space */}\n <Skeleton className=\"h-3 flex-1 min-w-0\" />\n\n {/* Tenant badge skeleton */}\n <Skeleton className=\"h-4 w-16 shrink-0\" />\n\n {/* Timestamp skeleton */}\n <Skeleton className=\"h-3 w-16 shrink-0\" />\n\n {/* Expand button skeleton */}\n <Skeleton className=\"h-5 w-5 shrink-0\" />\n </div>\n </Card>\n );\n}\n","import { useState, useEffect, useCallback, useRef } from 'react';\nimport type { ActivityApiClient } from '../api/client';\nimport type { FacetValue } from '../types/activity';\nimport type { TimeRange, ActivityFeedFilters } from './useActivityFeed';\n\n/**\n * Escape a value for safe interpolation into a CEL string literal.\n */\nfunction celEscape(value: string): string {\n return value.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"');\n}\n\n/**\n * Build CEL filter expression from filter options for facet queries.\n * This allows facet dropdowns to show only values relevant to the current filter selection.\n */\nfunction buildFacetFilter(filters: ActivityFeedFilters): string | undefined {\n const conditions: string[] = [];\n\n // Change source filter\n if (filters.changeSource && filters.changeSource !== 'all') {\n conditions.push(`spec.changeSource == \"${celEscape(filters.changeSource)}\"`);\n }\n\n // Resource UID filter (for resource-specific views)\n if (filters.resourceUid) {\n conditions.push(`spec.resource.uid == \"${celEscape(filters.resourceUid)}\"`);\n }\n\n // Resource kinds filter (multi-select)\n if (filters.resourceKinds && filters.resourceKinds.length > 0) {\n if (filters.resourceKinds.length === 1) {\n conditions.push(`spec.resource.kind == \"${celEscape(filters.resourceKinds[0])}\"`);\n } else {\n const kindConditions = filters.resourceKinds.map((k) => `spec.resource.kind == \"${celEscape(k)}\"`);\n conditions.push(`(${kindConditions.join(' || ')})`);\n }\n }\n\n // Actor names filter (multi-select)\n if (filters.actorNames && filters.actorNames.length > 0) {\n if (filters.actorNames.length === 1) {\n conditions.push(`spec.actor.name == \"${celEscape(filters.actorNames[0])}\"`);\n } else {\n const actorConditions = filters.actorNames.map((a) => `spec.actor.name == \"${celEscape(a)}\"`);\n conditions.push(`(${actorConditions.join(' || ')})`);\n }\n }\n\n // API groups filter (multi-select)\n if (filters.apiGroups && filters.apiGroups.length > 0) {\n if (filters.apiGroups.length === 1) {\n conditions.push(`spec.resource.apiGroup == \"${celEscape(filters.apiGroups[0])}\"`);\n } else {\n const groupConditions = filters.apiGroups.map((g) => `spec.resource.apiGroup == \"${celEscape(g)}\"`);\n conditions.push(`(${groupConditions.join(' || ')})`);\n }\n }\n\n // Resource namespaces filter (multi-select)\n if (filters.resourceNamespaces && filters.resourceNamespaces.length > 0) {\n if (filters.resourceNamespaces.length === 1) {\n conditions.push(`spec.resource.namespace == \"${celEscape(filters.resourceNamespaces[0])}\"`);\n } else {\n const nsConditions = filters.resourceNamespaces.map((ns) => `spec.resource.namespace == \"${celEscape(ns)}\"`);\n conditions.push(`(${nsConditions.join(' || ')})`);\n }\n }\n\n // Custom CEL filter\n if (filters.customFilter) {\n conditions.push(`(${filters.customFilter})`);\n }\n\n return conditions.length > 0 ? conditions.join(' && ') : undefined;\n}\n\n/**\n * Result returned by the useFacets hook\n */\nexport interface UseFacetsResult {\n /** Distinct resource kinds with counts */\n resourceKinds: FacetValue[];\n /** Distinct actor names with counts */\n actorNames: FacetValue[];\n /** Distinct API groups with counts */\n apiGroups: FacetValue[];\n /** Distinct resource namespaces with counts */\n resourceNamespaces: FacetValue[];\n /** Whether facets are loading */\n isLoading: boolean;\n /** Error if any occurred */\n error: Error | null;\n /** Manually refresh facets */\n refresh: () => Promise<void>;\n}\n\n/**\n * Hook to fetch activity facets for filter dropdowns.\n * When filters are provided, facet results are narrowed to show only\n * values relevant to the current filter selection.\n */\nexport function useFacets(\n client: ActivityApiClient,\n timeRange: TimeRange,\n filters: ActivityFeedFilters = {}\n): UseFacetsResult {\n const [resourceKinds, setResourceKinds] = useState<FacetValue[]>([]);\n const [actorNames, setActorNames] = useState<FacetValue[]>([]);\n const [apiGroups, setApiGroups] = useState<FacetValue[]>([]);\n const [resourceNamespaces, setResourceNamespaces] = useState<FacetValue[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n // Track the last fetched parameters to avoid redundant fetches\n const lastFetchedRef = useRef<string | null>(null);\n\n const fetchFacets = useCallback(async () => {\n // Build filter from current filter state\n const filter = buildFacetFilter(filters);\n\n // Create a cache key from time range and filter\n const cacheKey = `${timeRange.start}-${timeRange.end || 'now'}-${filter || ''}`;\n\n // Skip if we already fetched for these parameters\n if (lastFetchedRef.current === cacheKey) {\n return;\n }\n\n setIsLoading(true);\n setError(null);\n\n try {\n const result = await client.queryFacets({\n timeRange: {\n start: timeRange.start,\n end: timeRange.end,\n },\n filter,\n facets: [\n { field: 'spec.resource.kind', limit: 50 },\n { field: 'spec.actor.name', limit: 50 },\n { field: 'spec.resource.apiGroup', limit: 50 },\n { field: 'spec.resource.namespace', limit: 50 },\n ],\n });\n\n const facets = result.status?.facets || [];\n\n // Extract resource kinds\n const kindFacet = facets.find((f) => f.field === 'spec.resource.kind');\n setResourceKinds(kindFacet?.values || []);\n\n // Extract actor names\n const actorFacet = facets.find((f) => f.field === 'spec.actor.name');\n setActorNames(actorFacet?.values || []);\n\n // Extract API groups\n const apiGroupFacet = facets.find((f) => f.field === 'spec.resource.apiGroup');\n setApiGroups(apiGroupFacet?.values || []);\n\n // Extract resource namespaces\n const namespaceFacet = facets.find((f) => f.field === 'spec.resource.namespace');\n setResourceNamespaces(namespaceFacet?.values || []);\n\n lastFetchedRef.current = cacheKey;\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)));\n } finally {\n setIsLoading(false);\n }\n }, [client, timeRange.start, timeRange.end, filters]);\n\n // Fetch on mount and when time range changes\n useEffect(() => {\n fetchFacets();\n }, [fetchFacets]);\n\n // Force refresh function that bypasses cache\n const refresh = useCallback(async () => {\n lastFetchedRef.current = null;\n await fetchFacets();\n }, [fetchFacets]);\n\n return {\n resourceKinds,\n actorNames,\n apiGroups,\n resourceNamespaces,\n isLoading,\n error,\n refresh,\n };\n}\n","import type { ChangeSource } from '../types/activity';\nimport { Button } from './ui/button';\nimport { cn } from '../lib/utils';\n\nexport type ChangeSourceOption = ChangeSource | 'all';\n\nexport interface ChangeSourceToggleProps {\n /** Current selected value */\n value: ChangeSourceOption;\n /** Handler called when selection changes */\n onChange: (value: ChangeSourceOption) => void;\n /** Additional CSS class */\n className?: string;\n /** Whether the toggle is disabled */\n disabled?: boolean;\n}\n\n/**\n * Options for the change source toggle\n */\nconst OPTIONS: { value: ChangeSourceOption; label: string; description: string }[] = [\n {\n value: 'all',\n label: 'All',\n description: 'Show all activities',\n },\n {\n value: 'human',\n label: 'Human',\n description: 'Show only human-initiated activities',\n },\n {\n value: 'system',\n label: 'System',\n description: 'Show only system-initiated activities',\n },\n];\n\n/**\n * ChangeSourceToggle provides a segmented control for filtering by change source\n */\nexport function ChangeSourceToggle({\n value,\n onChange,\n className = '',\n disabled = false,\n}: ChangeSourceToggleProps) {\n return (\n <div\n className={cn('inline-flex border border-input rounded-md overflow-hidden', className)}\n role=\"group\"\n aria-label=\"Filter by change source\"\n >\n {OPTIONS.map((option, index) => (\n <Button\n key={option.value}\n type=\"button\"\n variant=\"ghost\"\n className={cn(\n 'rounded-none px-2 h-7 text-xs font-medium transition-all duration-200',\n index < OPTIONS.length - 1 && 'border-r border-input',\n value === option.value\n ? 'bg-[#BF9595] text-[#0C1D31] hover:bg-[#BF9595]/90'\n : 'bg-muted text-foreground hover:bg-muted/80'\n )}\n onClick={() => onChange(option.value)}\n disabled={disabled}\n aria-pressed={value === option.value}\n title={option.description}\n >\n {option.label}\n </Button>\n ))}\n </div>\n );\n}\n","import { useState, useCallback, useEffect } from 'react';\nimport { formatISO, subDays } from 'date-fns';\nimport { Search } from 'lucide-react';\n\nimport type { ActivityFeedFilters as FilterState } from '../hooks/useActivityFeed';\nimport type { TimeRange } from '../hooks/useActivityFeed';\nimport type { ActivityApiClient } from '../api/client';\nimport { useFacets } from '../hooks/useFacets';\nimport { ChangeSourceToggle, ChangeSourceOption } from './ChangeSourceToggle';\nimport { TimeRangeDropdown } from './ui/time-range-dropdown';\nimport { FilterChip } from './ui/filter-chip';\nimport { AddFilterDropdown, type FilterOption } from './ui/add-filter-dropdown';\nimport { Input } from './ui/input';\n\nexport interface ActivityFeedFiltersProps {\n /** API client instance for fetching facets */\n client: ActivityApiClient;\n /** Current filter state */\n filters: FilterState;\n /** Current time range */\n timeRange: TimeRange;\n /** Handler called when filters change */\n onFiltersChange: (filters: FilterState) => void;\n /** Handler called when time range changes */\n onTimeRangeChange: (timeRange: TimeRange) => void;\n /** Whether the filters are disabled (e.g., during loading) */\n disabled?: boolean;\n /** Filters that should be locked and hidden from the UI (programmatically set by parent) */\n hiddenFilters?: Array<'resourceKinds' | 'actorNames' | 'apiGroups' | 'resourceNamespaces' | 'resourceName' | 'actions' | 'changeSource'>;\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * Preset time ranges\n */\nconst TIME_PRESETS = [\n { key: 'now-1h', label: 'Last hour' },\n { key: 'now-24h', label: 'Last 24 hours' },\n { key: 'now-7d', label: 'Last 7 days' },\n { key: 'now-30d', label: 'Last 30 days' },\n];\n\n/**\n * Filter configuration registry\n */\ntype FilterId = 'resourceKinds' | 'actorNames' | 'apiGroups' | 'resourceNamespaces' | 'resourceName' | 'actions';\n\ninterface FilterConfig {\n id: FilterId;\n label: string;\n inputMode: 'typeahead' | 'text';\n placeholder?: string;\n searchPlaceholder?: string;\n}\n\nconst FILTER_CONFIGS: Record<FilterId, FilterConfig> = {\n resourceKinds: {\n id: 'resourceKinds',\n label: 'Kind',\n inputMode: 'typeahead',\n searchPlaceholder: 'Search kinds...',\n },\n actorNames: {\n id: 'actorNames',\n label: 'Actor',\n inputMode: 'typeahead',\n searchPlaceholder: 'Search actors...',\n },\n apiGroups: {\n id: 'apiGroups',\n label: 'API Group',\n inputMode: 'typeahead',\n searchPlaceholder: 'Search API groups...',\n },\n resourceNamespaces: {\n id: 'resourceNamespaces',\n label: 'Namespace',\n inputMode: 'typeahead',\n searchPlaceholder: 'Search namespaces...',\n },\n resourceName: {\n id: 'resourceName',\n label: 'Resource Name',\n inputMode: 'text',\n placeholder: 'Enter resource name...',\n },\n actions: {\n id: 'actions',\n label: 'Action',\n inputMode: 'typeahead',\n searchPlaceholder: 'Search actions...',\n },\n};\n\n/**\n * Helper function to convert ISO string to datetime-local format\n */\nconst formatDatetimeLocal = (isoString: string): string => {\n const date = new Date(isoString);\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n const hours = String(date.getHours()).padStart(2, '0');\n const minutes = String(date.getMinutes()).padStart(2, '0');\n return `${year}-${month}-${day}T${hours}:${minutes}`;\n};\n\n/**\n * Check if the current time range matches a preset\n */\nconst getSelectedPreset = (timeRange: TimeRange): string => {\n const preset = TIME_PRESETS.find((p) => timeRange.start === p.key);\n return preset ? preset.key : 'custom';\n};\n\n/**\n * ActivityFeedFilters provides filter controls for the activity feed\n */\nexport function ActivityFeedFilters({\n client,\n filters,\n timeRange,\n onFiltersChange,\n onTimeRangeChange,\n disabled = false,\n hiddenFilters = [],\n className = '',\n}: ActivityFeedFiltersProps) {\n const { resourceKinds, actorNames, apiGroups, resourceNamespaces, error: facetsError } = useFacets(client, timeRange, filters);\n\n // Log facets error for debugging\n if (facetsError) {\n console.error('Failed to load facets:', facetsError);\n }\n\n // Track which filter was just added to auto-open it\n const [pendingFilter, setPendingFilter] = useState<FilterId | null>(null);\n\n // Custom time range state\n const selectedPreset = getSelectedPreset(timeRange);\n const [customStart, setCustomStart] = useState(() => {\n if (selectedPreset === 'custom') {\n return formatDatetimeLocal(timeRange.start);\n }\n return formatDatetimeLocal(formatISO(subDays(new Date(), 1)));\n });\n const [customEnd, setCustomEnd] = useState(() => {\n if (selectedPreset === 'custom' && timeRange.end) {\n return formatDatetimeLocal(timeRange.end);\n }\n return formatDatetimeLocal(formatISO(new Date()));\n });\n\n // Handle change source change\n const handleChangeSourceChange = useCallback(\n (value: ChangeSourceOption) => {\n onFiltersChange({\n ...filters,\n changeSource: value,\n });\n },\n [filters, onFiltersChange]\n );\n\n // Handle time range preset selection\n const handleTimePresetSelect = useCallback(\n (presetKey: string) => {\n onTimeRangeChange({\n start: presetKey,\n end: undefined,\n });\n },\n [onTimeRangeChange]\n );\n\n // Handle custom time range apply\n const handleCustomRangeApply = useCallback(\n (start: string, end: string) => {\n setCustomStart(start);\n setCustomEnd(end);\n onTimeRangeChange({\n start: new Date(start).toISOString(),\n end: new Date(end).toISOString(),\n });\n },\n [onTimeRangeChange]\n );\n\n // Get display label for time range\n const getTimeRangeLabel = () => {\n const preset = TIME_PRESETS.find((p) => p.key === selectedPreset);\n if (preset) return preset.label;\n if (selectedPreset === 'custom' && timeRange.start && timeRange.end) {\n const start = new Date(timeRange.start);\n const end = new Date(timeRange.end);\n return `${start.toLocaleDateString()} - ${end.toLocaleDateString()}`;\n }\n return 'Select time range';\n };\n\n // Determine which filters are currently active (have values) and not hidden\n const filtersWithValues: FilterId[] = [];\n if (filters.resourceKinds && filters.resourceKinds.length > 0 && !hiddenFilters.includes('resourceKinds')) filtersWithValues.push('resourceKinds');\n if (filters.actorNames && filters.actorNames.length > 0 && !hiddenFilters.includes('actorNames')) filtersWithValues.push('actorNames');\n if (filters.apiGroups && filters.apiGroups.length > 0 && !hiddenFilters.includes('apiGroups')) filtersWithValues.push('apiGroups');\n if (filters.resourceNamespaces && filters.resourceNamespaces.length > 0 && !hiddenFilters.includes('resourceNamespaces')) filtersWithValues.push('resourceNamespaces');\n if (filters.resourceName && !hiddenFilters.includes('resourceName')) filtersWithValues.push('resourceName');\n if (filters.actions && filters.actions.length > 0) filtersWithValues.push('actions');\n\n // Include pendingFilter (newly added filter awaiting value selection) in the displayed filters\n const activeFilterIds: FilterId[] = pendingFilter && !filtersWithValues.includes(pendingFilter)\n ? [...filtersWithValues, pendingFilter]\n : filtersWithValues;\n\n // Clear pending filter when filter values change (user selected something)\n useEffect(() => {\n if (pendingFilter && filtersWithValues.includes(pendingFilter)) {\n // Filter now has values, clear pending state\n setPendingFilter(null);\n }\n }, [pendingFilter, filtersWithValues]);\n\n // Build available filters list (exclude hidden filters)\n const availableFilters: FilterOption[] = [\n { id: 'resourceKinds', label: 'Kind' },\n { id: 'actorNames', label: 'Actor' },\n { id: 'apiGroups', label: 'API Group' },\n { id: 'resourceNamespaces', label: 'Namespace' },\n { id: 'resourceName', label: 'Resource Name' },\n { id: 'actions', label: 'Action' },\n ].filter((filter) => !hiddenFilters.includes(filter.id as FilterId));\n\n // Handle adding a filter\n const handleAddFilter = useCallback((filterId: string) => {\n setPendingFilter(filterId as FilterId);\n }, []);\n\n // Handle popover close - clear pending filter if no values were selected\n const handlePopoverClose = useCallback(\n (filterId: FilterId) => {\n if (pendingFilter === filterId) {\n const hasValues = (() => {\n const value = filters[filterId];\n if (filterId === 'resourceName') return !!value;\n return Array.isArray(value) && value.length > 0;\n })();\n if (!hasValues) {\n setPendingFilter(null);\n }\n }\n },\n [pendingFilter, filters]\n );\n\n // Handle filter value changes\n const handleFilterChange = useCallback(\n (filterId: FilterId, values: string[]) => {\n onFiltersChange({\n ...filters,\n [filterId]: values.length > 0 ? values : undefined,\n });\n },\n [filters, onFiltersChange]\n );\n\n // Handle filter clear\n const handleFilterClear = useCallback(\n (filterId: FilterId) => {\n onFiltersChange({\n ...filters,\n [filterId]: undefined,\n });\n },\n [filters, onFiltersChange]\n );\n\n // Get options for a specific filter\n const getFilterOptions = (filterId: FilterId) => {\n switch (filterId) {\n case 'resourceKinds':\n return resourceKinds\n .filter((facet) => facet.value)\n .map((facet) => ({\n value: facet.value,\n label: facet.value,\n count: facet.count,\n }));\n case 'actorNames':\n return actorNames\n .filter((facet) => facet.value)\n .map((facet) => ({\n value: facet.value,\n label: facet.value,\n count: facet.count,\n }));\n case 'apiGroups':\n return apiGroups\n .filter((facet) => facet.value)\n .map((facet) => ({\n value: facet.value,\n label: facet.value,\n count: facet.count,\n }));\n case 'resourceNamespaces':\n return resourceNamespaces\n .filter((facet) => facet.value)\n .map((facet) => ({\n value: facet.value,\n label: facet.value,\n count: facet.count,\n }));\n case 'actions':\n // TODO: Return action facets when backend supports it\n return [];\n default:\n return [];\n }\n };\n\n // Get values for a specific filter\n const getFilterValues = (filterId: FilterId): string[] => {\n const value = filters[filterId];\n if (filterId === 'resourceName') {\n return value ? [value as string] : [];\n }\n if (filterId === 'actions') {\n return (value as string[] | undefined) || [];\n }\n return (value as string[] | undefined) || [];\n };\n\n // Handle search input change with debouncing\n const handleSearchChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const value = event.target.value;\n onFiltersChange({\n ...filters,\n search: value || undefined,\n });\n },\n [filters, onFiltersChange]\n );\n\n return (\n <div className={`mb-3 pb-3 border-b border-border pr-2 ${className}`}>\n <div className=\"flex flex-wrap gap-2 items-center\">\n {/* Change Source Toggle */}\n {!hiddenFilters.includes('changeSource') && (\n <ChangeSourceToggle\n value={filters.changeSource || 'all'}\n onChange={handleChangeSourceChange}\n disabled={disabled}\n />\n )}\n\n {/* Search Input */}\n <div className=\"relative min-w-[200px] flex-1 max-w-xs\">\n <Search className=\"absolute left-2 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground\" />\n <Input\n type=\"text\"\n placeholder=\"Search activities...\"\n value={filters.search || ''}\n onChange={handleSearchChange}\n disabled={disabled}\n className=\"pl-8 h-7 text-xs\"\n />\n </div>\n\n {/* Active Filter Chips */}\n {activeFilterIds.map((filterId) => {\n const config = FILTER_CONFIGS[filterId];\n return (\n <FilterChip\n key={filterId}\n label={config.label}\n values={getFilterValues(filterId)}\n options={config.inputMode === 'typeahead' ? getFilterOptions(filterId) : undefined}\n onValuesChange={(values) => handleFilterChange(filterId, values)}\n onClear={() => handleFilterClear(filterId)}\n onPopoverClose={() => handlePopoverClose(filterId)}\n inputMode={config.inputMode}\n placeholder={config.placeholder}\n searchPlaceholder={config.searchPlaceholder}\n autoOpen={pendingFilter === filterId}\n disabled={disabled}\n />\n );\n })}\n\n {/* Add Filter Dropdown */}\n <AddFilterDropdown\n availableFilters={availableFilters}\n activeFilterIds={activeFilterIds}\n onAddFilter={handleAddFilter}\n hasActiveFilters={activeFilterIds.length > 0}\n disabled={disabled}\n />\n\n {/* Spacer */}\n <div className=\"flex-1 min-w-[20px]\" />\n\n {/* Time Range Dropdown */}\n <TimeRangeDropdown\n presets={TIME_PRESETS}\n selectedPreset={selectedPreset}\n onPresetSelect={handleTimePresetSelect}\n onCustomRangeApply={handleCustomRangeApply}\n customStart={customStart}\n customEnd={customEnd}\n disabled={disabled}\n displayLabel={getTimeRangeLabel()}\n />\n </div>\n </div>\n );\n}\n","import { useEffect, useRef, useCallback, useState } from 'react';\nimport type { Activity, ResourceRef, ResourceLinkResolver, TenantLinkResolver, TenantRenderer, EffectiveTimeRangeCallback, ErrorFormatter } from '../types/activity';\nimport type {\n ActivityFeedFilters as FilterState,\n TimeRange,\n} from '../hooks/useActivityFeed';\nimport { useActivityFeed } from '../hooks/useActivityFeed';\nimport { ActivityFeedItem } from './ActivityFeedItem';\nimport { ActivityFeedItemSkeleton } from './ActivityFeedItemSkeleton';\nimport { ActivityFeedFilters } from './ActivityFeedFilters';\nimport { ActivityApiClient } from '../api/client';\nimport { Button } from './ui/button';\nimport { Card } from './ui/card';\nimport { Badge } from './ui/badge';\nimport { ApiErrorAlert } from './ApiErrorAlert';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from './ui/tooltip';\n\nexport interface ActivityFeedProps {\n /** API client instance */\n client: ActivityApiClient;\n /** Initial filter settings */\n initialFilters?: FilterState;\n /** Initial time range */\n initialTimeRange?: TimeRange;\n /** Number of items per page */\n pageSize?: number;\n /** Handler called when a resource link is clicked (deprecated: use resourceLinkResolver) */\n onResourceClick?: (resource: ResourceRef) => void;\n /** Function that resolves resource references to URLs */\n resourceLinkResolver?: ResourceLinkResolver;\n /** Function that resolves tenant references to URLs */\n tenantLinkResolver?: TenantLinkResolver;\n /** Custom renderer for tenant badges (overrides default TenantBadge) */\n tenantRenderer?: TenantRenderer;\n /** Handler called when an activity is clicked */\n onActivityClick?: (activity: Activity) => void;\n /** Whether to show in compact mode (for resource detail tabs) */\n compact?: boolean;\n /** Filter to a specific resource UID */\n resourceUid?: string;\n /** Whether to show filters */\n showFilters?: boolean;\n /** Filters that should be locked and hidden from the UI (programmatically set by parent) */\n hiddenFilters?: Array<'resourceKinds' | 'actorNames' | 'apiGroups' | 'resourceNamespaces' | 'resourceName' | 'changeSource'>;\n /** Additional CSS class */\n className?: string;\n /** Enable infinite scroll (default: true) */\n infiniteScroll?: boolean;\n /** Threshold in pixels for triggering load more (default: 200) */\n loadMoreThreshold?: number;\n /** Handler called when user wants to create a policy (for empty state) */\n onCreatePolicy?: () => void;\n /** Enable real-time streaming (default: false) */\n enableStreaming?: boolean;\n /** Callback invoked when the effective time range is resolved */\n onEffectiveTimeRangeChange?: EffectiveTimeRangeCallback;\n /** Custom error formatter for customizing error messages */\n errorFormatter?: ErrorFormatter;\n /**\n * Maximum height for the scroll container (CSS value like '500px' or 'calc(100vh - 300px)').\n * By default, the component uses flex layout (flex-1 min-h-0) which adapts to parent container constraints.\n * Only set this if your parent container doesn't have proper height constraints.\n * Set to 'none' to explicitly disable any max-height constraint.\n */\n maxHeight?: string;\n /** Callback invoked when filters or time range change (useful for URL state management) */\n onFiltersChange?: (filters: FilterState, timeRange: TimeRange) => void;\n}\n\n/**\n * ActivityFeed displays a chronological list of activities with filtering and pagination.\n * Supports optional real-time streaming of new activities.\n */\nexport function ActivityFeed({\n client,\n initialFilters = { changeSource: 'human' },\n initialTimeRange = { start: 'now-7d' },\n pageSize = 30,\n onResourceClick,\n resourceLinkResolver,\n tenantLinkResolver,\n tenantRenderer,\n onActivityClick,\n compact = false,\n resourceUid,\n showFilters = true,\n hiddenFilters = [],\n className = '',\n infiniteScroll = true,\n loadMoreThreshold = 200,\n onCreatePolicy,\n enableStreaming = false,\n onEffectiveTimeRangeChange,\n errorFormatter,\n maxHeight,\n onFiltersChange: onFiltersChangeProp,\n}: ActivityFeedProps) {\n // Merge resourceUid into initial filters if provided\n const mergedInitialFilters: FilterState = {\n ...initialFilters,\n resourceUid: resourceUid || initialFilters.resourceUid,\n };\n\n const {\n activities,\n isLoading,\n error,\n watchError,\n hasMore,\n filters,\n timeRange,\n refresh,\n loadMore,\n setFilters,\n setTimeRange,\n isStreaming,\n startStreaming,\n stopStreaming,\n newActivitiesCount,\n } = useActivityFeed({\n client,\n initialFilters: mergedInitialFilters,\n initialTimeRange,\n pageSize,\n enableStreaming,\n autoStartStreaming: true,\n onEffectiveTimeRangeChange,\n });\n\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n const loadMoreTriggerRef = useRef<HTMLDivElement>(null);\n // Store the latest loadMore function in a ref to avoid observer re-subscription\n const loadMoreRef = useRef(loadMore);\n\n // Track whether policies exist in the system\n const [hasPolicies, setHasPolicies] = useState<boolean | null>(null);\n const [policiesLoading, setPoliciesLoading] = useState(true);\n\n // Check for policies on mount\n useEffect(() => {\n const checkPolicies = async () => {\n try {\n const policyList = await client.listPolicies();\n setHasPolicies((policyList.items?.length ?? 0) > 0);\n } catch {\n // If we can't check policies, assume they might exist\n setHasPolicies(true);\n } finally {\n setPoliciesLoading(false);\n }\n };\n checkPolicies();\n }, [client]);\n\n // Auto-execute on mount\n useEffect(() => {\n refresh();\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n // Update the ref whenever loadMore changes\n useEffect(() => {\n loadMoreRef.current = loadMore;\n }, [loadMore]);\n\n // Infinite scroll using Intersection Observer\n useEffect(() => {\n if (!infiniteScroll || !loadMoreTriggerRef.current) return;\n\n const observer = new IntersectionObserver(\n (entries) => {\n const entry = entries[0];\n if (entry.isIntersecting && hasMore && !isLoading) {\n // Call through the ref to always use the latest function\n loadMoreRef.current();\n }\n },\n {\n root: scrollContainerRef.current,\n rootMargin: `${loadMoreThreshold}px`,\n threshold: 0,\n }\n );\n\n observer.observe(loadMoreTriggerRef.current);\n\n return () => {\n observer.disconnect();\n };\n }, [infiniteScroll, hasMore, isLoading, loadMoreThreshold]);\n\n // Handle filter changes - refresh is automatic via the hook\n const handleFiltersChange = useCallback(\n (newFilters: FilterState) => {\n setFilters(newFilters);\n onFiltersChangeProp?.(newFilters, timeRange);\n },\n [setFilters, onFiltersChangeProp, timeRange]\n );\n\n // Handle time range changes - refresh is automatic via the hook\n const handleTimeRangeChange = useCallback(\n (newTimeRange: TimeRange) => {\n setTimeRange(newTimeRange);\n onFiltersChangeProp?.(filters, newTimeRange);\n },\n [setTimeRange, onFiltersChangeProp, filters]\n );\n\n // Handle manual load more click\n const handleLoadMoreClick = useCallback(() => {\n loadMore();\n }, [loadMore]);\n\n // Handle streaming toggle\n const handleStreamingToggle = useCallback(() => {\n if (isStreaming) {\n stopStreaming();\n } else {\n startStreaming();\n }\n }, [isStreaming, startStreaming, stopStreaming]);\n\n // Handle actor click - filter by actor name\n const handleActorClick = useCallback((actorName: string) => {\n setFilters({\n ...filters,\n actorNames: [actorName],\n });\n }, [filters, setFilters]);\n\n // Build container classes - use flex layout to properly fill available space\n // flex-1 min-h-0 allows the Card to fill parent flex container and enable child scrolling\n const containerClasses = compact\n ? `flex-1 min-h-0 flex flex-col p-1 shadow-none border-border ${className}`\n : `flex-1 min-h-0 flex flex-col p-3 ${className}`;\n\n // Build list classes - use flex-1 min-h-0 for flex-based scrolling\n // Parent containers must have proper height constraints (h-screen/h-full + overflow-hidden)\n const effectiveMaxHeight = maxHeight === 'none' ? undefined : maxHeight;\n const listClasses = 'flex-1 min-h-0 overflow-y-auto pr-2 flex flex-col';\n\n return (\n <Card className={containerClasses}>\n {/* Header with streaming status */}\n {enableStreaming && (\n <div className=\"flex items-center justify-between mb-1 pb-0.5 border-b border-border\">\n <div className=\"flex items-center gap-2\">\n {isStreaming && !watchError && (\n <TooltipProvider delayDuration={300}>\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"flex items-center gap-2\">\n <span className=\"relative flex h-2 w-2\">\n <span className=\"animate-ping absolute inline-flex h-full w-full rounded-full bg-green-400 dark:bg-green-500 opacity-75\"></span>\n <span className=\"relative inline-flex rounded-full h-2 w-2 bg-green-500 dark:bg-green-400\"></span>\n </span>\n <span className=\"text-xs text-muted-foreground\">Streaming activity...</span>\n </div>\n </TooltipTrigger>\n <TooltipContent className=\"text-xs\">\n <p>New activities will appear automatically</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )}\n {watchError && (\n <TooltipProvider delayDuration={300}>\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"flex items-center gap-2\">\n <span className=\"relative flex h-2 w-2\">\n <span className=\"relative inline-flex rounded-full h-2 w-2 bg-red-500 dark:bg-red-400\"></span>\n </span>\n <span className=\"text-xs text-destructive\">Connection error</span>\n </div>\n </TooltipTrigger>\n <TooltipContent className=\"text-xs\">\n <p>Stream connection lost</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )}\n {newActivitiesCount > 0 && !watchError && (\n <Badge variant=\"secondary\" className=\"text-xs\">\n +{newActivitiesCount} new\n </Badge>\n )}\n </div>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleStreamingToggle}\n className=\"text-xs\"\n >\n {watchError ? (\n <>\n <svg className=\"w-4 h-4 mr-1.5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" strokeWidth=\"2\">\n <path d=\"M21 2l-2 2m-7.61 7.61a5.5 5.5 0 1 1-7.778 7.778 5.5 5.5 0 0 1 7.777-7.777zm0 0L15.5 7.5m0 0l3 3L22 7l-3-3m-3.5 3.5L19 4\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n Retry\n </>\n ) : isStreaming ? (\n <>\n <svg className=\"w-4 h-4 mr-1.5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <rect x=\"6\" y=\"4\" width=\"4\" height=\"16\" />\n <rect x=\"14\" y=\"4\" width=\"4\" height=\"16\" />\n </svg>\n Pause\n </>\n ) : (\n <>\n <svg className=\"w-4 h-4 mr-1.5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <polygon points=\"5,3 19,12 5,21\" fill=\"currentColor\" />\n </svg>\n Resume\n </>\n )}\n </Button>\n </div>\n )}\n\n {/* Filters */}\n {showFilters && (\n <ActivityFeedFilters\n client={client}\n filters={filters}\n timeRange={timeRange}\n onFiltersChange={handleFiltersChange}\n onTimeRangeChange={handleTimeRangeChange}\n disabled={isLoading}\n hiddenFilters={hiddenFilters}\n />\n )}\n\n {/* Query Error Display */}\n <ApiErrorAlert error={error} onRetry={refresh} className=\"mb-4\" errorFormatter={errorFormatter} />\n\n {/* Watch Stream Error Display */}\n <ApiErrorAlert error={watchError} onRetry={startStreaming} className=\"mb-4\" errorFormatter={errorFormatter} />\n\n {/* No Policies Empty State */}\n {!policiesLoading && hasPolicies === false && (\n <div className=\"flex flex-col items-center py-12 px-8 text-center bg-muted border border-dashed border-border rounded-xl mb-4\">\n <div className=\"flex justify-center mb-4 text-muted-foreground\">\n <svg width=\"56\" height=\"56\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2\" />\n <rect x=\"9\" y=\"3\" width=\"6\" height=\"4\" rx=\"1\" />\n <path d=\"M9 12h6\" />\n <path d=\"M9 16h6\" />\n </svg>\n </div>\n <h3 className=\"m-0 mb-2 text-lg font-semibold text-foreground leading-snug\">Get started with activity logging</h3>\n <p className=\"m-0 mb-6 text-sm leading-relaxed text-muted-foreground max-w-[400px]\">\n Activity policies define which resources to track and how to summarize changes.\n Create your first policy to start seeing activity logs here.\n </p>\n {onCreatePolicy && (\n <Button onClick={onCreatePolicy}>\n Create Policy\n </Button>\n )}\n </div>\n )}\n\n {/* Activity List */}\n <div className={listClasses} ref={scrollContainerRef} style={{ gap: compact ? '0.25rem' : '0.5rem', ...(effectiveMaxHeight ? { maxHeight: effectiveMaxHeight } : {}) }}>\n {/* Skeleton Loading State - show when loading and no items yet */}\n {isLoading && activities.length === 0 && (\n <>\n {Array.from({ length: 8 }).map((_, index) => (\n <ActivityFeedItemSkeleton key={index} compact={compact} />\n ))}\n </>\n )}\n\n {/* Empty State - only show when not loading */}\n {!isLoading && activities.length === 0 && hasPolicies !== false && (\n <div className=\"py-12 text-center text-muted-foreground\">\n <p className=\"m-0\">No activities found</p>\n <p className=\"text-sm text-muted-foreground mt-2 m-0\">\n Try adjusting your filters or time range\n </p>\n </div>\n )}\n\n {activities.map((activity, index) => (\n <ActivityFeedItem\n key={activity.metadata?.uid || activity.metadata?.name}\n activity={activity}\n onResourceClick={onResourceClick}\n resourceLinkResolver={resourceLinkResolver}\n tenantLinkResolver={tenantLinkResolver}\n tenantRenderer={tenantRenderer}\n onActorClick={handleActorClick}\n onActivityClick={onActivityClick}\n compact={compact}\n isNew={enableStreaming && index < newActivitiesCount}\n />\n ))}\n\n {/* Load More Trigger for Infinite Scroll */}\n {infiniteScroll && hasMore && (\n <div ref={loadMoreTriggerRef} className=\"h-px mt-4\" />\n )}\n\n {/* Load More Button (when infinite scroll is disabled) */}\n {!infiniteScroll && hasMore && !isLoading && (\n <div className=\"flex justify-center p-4 mt-4\">\n <Button onClick={handleLoadMoreClick}>\n Load more\n </Button>\n </div>\n )}\n\n {/* End of Results */}\n {!hasMore && activities.length > 0 && !isLoading && (\n <div className=\"text-center py-6 text-muted-foreground text-sm border-t border-border mt-4\">\n No more activities to load\n </div>\n )}\n </div>\n </Card>\n );\n}\n","import { useEffect, useCallback, useMemo } from 'react';\nimport type { Activity, ResourceLinkResolver, ErrorFormatter } from '../types/activity';\nimport type { ActivityFeedFilters } from '../hooks/useActivityFeed';\nimport { useActivityFeed } from '../hooks/useActivityFeed';\nimport { ActivityFeedItem } from './ActivityFeedItem';\nimport { ResourceLinkClickHandler } from './ActivityFeedSummary';\nimport { ActivityApiClient } from '../api/client';\nimport { Button } from './ui/button';\nimport { Card, CardHeader, CardTitle, CardContent } from './ui/card';\nimport { cn } from '../lib/utils';\nimport { ApiErrorAlert } from './ApiErrorAlert';\n\n/**\n * Resource filter for searching by resource attributes\n */\nexport interface ResourceFilter {\n /** API group of the resource (e.g., 'networking.k8s.io') */\n apiGroup?: string;\n /** Kind of the resource (e.g., 'HTTPProxy') */\n kind?: string;\n /** Namespace of the resource */\n namespace?: string;\n /** Name of the resource (supports partial match) */\n name?: string;\n /** UID of the resource (exact match, takes precedence over other filters) */\n uid?: string;\n}\n\nexport interface ResourceHistoryViewProps {\n /** API client instance */\n client: ActivityApiClient;\n /** Resource filter - can filter by UID or by apiGroup/kind/namespace/name */\n resourceFilter: ResourceFilter;\n /** Start of time range (default: 'now-30d') */\n startTime?: string;\n /** Maximum number of events to load (default: 50) */\n limit?: number;\n /** Whether to show the header (default: true) */\n showHeader?: boolean;\n /** Reduced padding for embedding (default: false) */\n compact?: boolean;\n /** Handler called when an activity is clicked */\n onActivityClick?: (activity: Activity) => void;\n /** Handler called when a resource link is clicked (deprecated: use resourceLinkResolver) */\n onResourceClick?: ResourceLinkClickHandler;\n /** Function that resolves resource references to URLs */\n resourceLinkResolver?: ResourceLinkResolver;\n /** Handler called when the actor name or avatar is clicked */\n onActorClick?: (actorName: string) => void;\n /** Additional CSS class */\n className?: string;\n /** Custom error formatter for customizing error messages */\n errorFormatter?: ErrorFormatter;\n}\n\n/**\n * Build a display title from the resource filter\n */\nfunction buildHeaderTitle(filter: ResourceFilter): string {\n if (filter.uid) {\n return `Resource History (UID: ${filter.uid.substring(0, 8)}...)`;\n }\n\n const parts: string[] = [];\n if (filter.kind) {\n parts.push(filter.kind);\n }\n if (filter.name) {\n parts.push(filter.name);\n }\n if (filter.namespace) {\n parts.push(`in ${filter.namespace}`);\n }\n if (filter.apiGroup) {\n parts.push(`(${filter.apiGroup})`);\n }\n\n return parts.length > 0 ? parts.join(' ') : 'Resource History';\n}\n\n/**\n * ResourceHistoryView displays a resource's change history as a vertical timeline.\n * Shows who changed what, when, with expandable details.\n *\n * Can filter by:\n * - UID (exact match)\n * - API Group, Kind, Namespace, Name (combined filter)\n */\nexport function ResourceHistoryView({\n client,\n resourceFilter,\n startTime = 'now-30d',\n limit = 50,\n showHeader = true,\n compact = false,\n onActivityClick,\n onResourceClick,\n resourceLinkResolver,\n onActorClick,\n className,\n errorFormatter,\n}: ResourceHistoryViewProps) {\n // Build the activity feed filters from the resource filter\n const activityFilters = useMemo((): ActivityFeedFilters => {\n const filters: ActivityFeedFilters = {};\n\n // UID takes precedence if provided\n if (resourceFilter.uid) {\n filters.resourceUid = resourceFilter.uid;\n } else {\n // Use attribute-based filters\n if (resourceFilter.apiGroup) {\n filters.apiGroups = [resourceFilter.apiGroup];\n }\n if (resourceFilter.kind) {\n filters.resourceKinds = [resourceFilter.kind];\n }\n if (resourceFilter.namespace) {\n filters.resourceNamespaces = [resourceFilter.namespace];\n }\n if (resourceFilter.name) {\n filters.resourceName = resourceFilter.name;\n }\n }\n\n return filters;\n }, [resourceFilter]);\n\n // Create a stable key for the filter to detect changes\n const filterKey = useMemo(() => {\n return JSON.stringify(resourceFilter);\n }, [resourceFilter]);\n\n const {\n activities,\n isLoading,\n error,\n hasMore,\n refresh,\n loadMore,\n } = useActivityFeed({\n client,\n initialFilters: activityFilters,\n initialTimeRange: { start: startTime },\n pageSize: limit,\n enableStreaming: false,\n });\n\n // Auto-execute on mount and when filter changes\n useEffect(() => {\n refresh();\n }, [filterKey]); // eslint-disable-line react-hooks/exhaustive-deps\n\n // Handle load more click\n const handleLoadMore = useCallback(() => {\n loadMore();\n }, [loadMore]);\n\n // Build header title from filter\n const headerTitle = buildHeaderTitle(resourceFilter);\n\n // Check if we have any valid filter criteria\n const hasValidFilter = resourceFilter.uid ||\n resourceFilter.apiGroup ||\n resourceFilter.kind ||\n resourceFilter.namespace ||\n resourceFilter.name;\n\n return (\n <Card className={cn(compact ? 'p-0 shadow-none border-0' : '', className)}>\n {/* Header */}\n {showHeader && (\n <CardHeader className={cn(compact ? 'px-0 pt-0 pb-3' : 'pb-4')}>\n <CardTitle className=\"text-base font-semibold text-foreground flex items-center gap-2\">\n <svg\n className=\"w-4 h-4 text-muted-foreground\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n {headerTitle}\n </CardTitle>\n </CardHeader>\n )}\n\n <CardContent className={cn(compact ? 'p-0' : '')}>\n {/* No filter provided */}\n {!hasValidFilter && (\n <div className=\"py-12 text-center text-muted-foreground\">\n <svg\n className=\"w-12 h-12 mx-auto mb-3 text-muted-foreground/50\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"\n />\n </svg>\n <p className=\"m-0 text-sm\">No resource filter specified</p>\n <p className=\"text-xs text-muted-foreground mt-1 m-0\">\n Provide at least one filter criterion to view resource history\n </p>\n </div>\n )}\n\n {/* Error Display */}\n {hasValidFilter && <ApiErrorAlert error={error} onRetry={refresh} className=\"mb-4\" errorFormatter={errorFormatter} />}\n\n {/* Loading state (initial) */}\n {hasValidFilter && isLoading && activities.length === 0 && (\n <div className=\"flex items-center justify-center gap-3 py-12 text-muted-foreground text-sm\">\n <div className=\"w-5 h-5 border-[3px] border-muted border-t-primary rounded-full animate-spin\" />\n <span>Loading history...</span>\n </div>\n )}\n\n {/* Empty state */}\n {hasValidFilter && !isLoading && activities.length === 0 && !error && (\n <div className=\"py-12 text-center text-muted-foreground\">\n <svg\n className=\"w-12 h-12 mx-auto mb-3 text-muted-foreground/50\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"\n />\n </svg>\n <p className=\"m-0 text-sm\">No history found for this resource</p>\n <p className=\"text-xs text-muted-foreground mt-1 m-0\">\n Changes will appear here once activity policies are configured\n </p>\n </div>\n )}\n\n {/* Timeline */}\n {hasValidFilter && activities.length > 0 && (\n <div className=\"relative\">\n {activities.map((activity, index) => {\n const activityId = activity.metadata?.uid || activity.metadata?.name || String(index);\n return (\n <ActivityFeedItem\n key={activityId}\n activity={activity}\n variant=\"timeline\"\n compact={compact}\n isFirst={index === 0}\n isLast={index === activities.length - 1 && !hasMore}\n onActivityClick={onActivityClick}\n onResourceClick={onResourceClick}\n resourceLinkResolver={resourceLinkResolver}\n onActorClick={onActorClick}\n />\n );\n })}\n\n {/* Loading more indicator */}\n {isLoading && activities.length > 0 && (\n <div className={cn('relative', compact ? 'pl-8' : 'pl-10')}>\n <div className=\"flex items-center gap-3 py-4 text-muted-foreground text-sm\">\n <div className=\"w-4 h-4 border-2 border-muted border-t-primary rounded-full animate-spin\" />\n <span>Loading more...</span>\n </div>\n </div>\n )}\n\n {/* Load more button */}\n {hasMore && !isLoading && (\n <div className={cn('relative', compact ? 'pl-8' : 'pl-10')}>\n {/* Continue timeline track */}\n <div\n className={cn(\n 'absolute w-0.5 bg-border',\n compact ? 'left-[11px] top-0 h-4' : 'left-[15px] top-0 h-5'\n )}\n />\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleLoadMore}\n className=\"text-muted-foreground hover:text-foreground mt-2\"\n >\n Load more history\n </Button>\n </div>\n )}\n </div>\n )}\n\n {/* Summary footer */}\n {hasValidFilter && activities.length > 0 && (\n <div className={cn(\n 'text-xs text-muted-foreground mt-4 pt-3 border-t border-border',\n compact ? '' : ''\n )}>\n Showing {activities.length} event{activities.length !== 1 ? 's' : ''}\n {hasMore && ' (more available)'}\n </div>\n )}\n </CardContent>\n </Card>\n );\n}\n","/**\n * TypeScript types for Kubernetes Events (core/v1.Event)\n * Exposed via the Activity API (activity.miloapis.com/v1alpha1)\n */\n\nimport type { ObjectMeta } from './index';\nimport type { FacetSpec, FacetResult } from './activity';\n\n/**\n * Event types in Kubernetes\n */\nexport type K8sEventType = 'Normal' | 'Warning';\n\n/**\n * Object reference for the regarding/related object\n */\nexport interface ObjectReference {\n apiVersion?: string;\n kind?: string;\n namespace?: string;\n name?: string;\n uid?: string;\n resourceVersion?: string;\n fieldPath?: string;\n}\n\n/**\n * Event series information (for aggregated events)\n */\nexport interface EventSeries {\n /** Number of occurrences in this series */\n count?: number;\n /** Time of the last occurrence observed */\n lastObservedTime?: string;\n}\n\n/**\n * Kubernetes Event (events.k8s.io/v1)\n * This is the newer events API that replaces core/v1.Event\n */\nexport interface K8sEvent {\n apiVersion: 'events.k8s.io/v1';\n kind: 'Event';\n metadata: ObjectMeta;\n /** Object this event is about (was involvedObject in core/v1) */\n regarding: ObjectReference;\n /** Optional secondary object for more complex actions */\n related?: ObjectReference;\n /** Short, machine-understandable string that gives the reason for the event */\n reason?: string;\n /** Human-readable description of the event (was message in core/v1) */\n note?: string;\n /** Type of this event (Normal, Warning) */\n type?: K8sEventType;\n /** Time when this Event was first observed (replaces firstTimestamp) */\n eventTime?: string;\n /** What action was taken/failed regarding the object */\n action?: string;\n /** Name of the controller that emitted this event (was source.component in core/v1) */\n reportingController?: string;\n /** ID of the controller instance (was source.host in core/v1) */\n reportingInstance?: string;\n /** Data about the Event series this event represents (was count/firstTimestamp/lastTimestamp) */\n series?: EventSeries;\n\n // Deprecated fields from core/v1.Event (for backward compatibility during migration)\n // Note: These fields are prefixed with \"deprecated\" in events.k8s.io/v1 JSON\n /** @deprecated Use regarding instead */\n involvedObject?: ObjectReference;\n /** @deprecated Use note instead */\n message?: string;\n /** @deprecated Use reportingController instead */\n source?: {\n component?: string;\n host?: string;\n };\n /** @deprecated Use series.count instead */\n count?: number;\n deprecatedCount?: number;\n /** @deprecated Use eventTime instead */\n firstTimestamp?: string;\n deprecatedFirstTimestamp?: string;\n /** @deprecated Use series.lastObservedTime instead */\n lastTimestamp?: string;\n deprecatedLastTimestamp?: string;\n /** @deprecated Use reportingController instead */\n reportingComponent?: string;\n}\n\n/**\n * EventRecord represents a Kubernetes Event returned in EventQuery results.\n * This is a wrapper type that embeds the events.k8s.io/v1 Event to avoid\n * OpenAPI GVK conflicts while preserving full event data.\n */\nexport interface EventRecord {\n apiVersion: 'activity.miloapis.com/v1alpha1';\n kind: 'EventRecord';\n metadata: ObjectMeta;\n /** Event contains the full Kubernetes Event data in events.k8s.io/v1 format */\n event: K8sEvent;\n}\n\n/**\n * Kubernetes Event list response with pagination\n */\nexport interface K8sEventList {\n apiVersion: 'v1';\n kind: 'EventList';\n metadata?: {\n continue?: string;\n resourceVersion?: string;\n };\n items: K8sEvent[];\n}\n\n/**\n * Query parameters for listing Kubernetes Events\n */\nexport interface K8sEventListParams {\n /** Namespace to list events from (empty for all namespaces) */\n namespace?: string;\n /** Field selector for filtering (e.g., \"regarding.name=my-pod\") */\n fieldSelector?: string;\n /** Label selector for filtering */\n labelSelector?: string;\n /** Maximum results per page */\n limit?: number;\n /** Pagination cursor */\n continue?: string;\n /** Watch for changes */\n watch?: boolean;\n /** Start Watch from this version */\n resourceVersion?: string;\n}\n\n/**\n * Event facet query request spec\n */\nexport interface EventFacetQuerySpec {\n /** Time range for the facet query */\n timeRange?: {\n start?: string;\n end?: string;\n };\n /** List of facets to query (1-10 facets) */\n facets: FacetSpec[];\n}\n\n/**\n * Event facet query status with results\n */\nexport interface EventFacetQueryStatus {\n facets: FacetResult[];\n}\n\n/**\n * Event facet query resource\n * Used to discover available filter values from actual event data\n */\nexport interface EventFacetQuery {\n apiVersion: 'activity.miloapis.com/v1alpha1';\n kind: 'EventFacetQuery';\n spec: EventFacetQuerySpec;\n status?: EventFacetQueryStatus;\n}\n\n/**\n * Event filter field definition for autocomplete and help\n */\nexport interface EventFilterField {\n name: string;\n type: 'string' | 'enum';\n description: string;\n enumValues?: string[];\n examples?: string[];\n}\n\n/**\n * Available filter fields for Kubernetes Events\n * These map to field selectors supported by the API (events.k8s.io/v1)\n */\nexport const EVENT_FILTER_FIELDS: EventFilterField[] = [\n {\n name: 'regarding.kind',\n type: 'string',\n description: 'Kind of the object this event is about',\n examples: [\n 'regarding.kind=Pod',\n 'regarding.kind=Deployment',\n ],\n },\n {\n name: 'regarding.name',\n type: 'string',\n description: 'Name of the object this event is about',\n examples: [\n 'regarding.name=my-pod',\n ],\n },\n {\n name: 'regarding.namespace',\n type: 'string',\n description: 'Namespace of the object this event is about',\n examples: [\n 'regarding.namespace=default',\n ],\n },\n {\n name: 'reason',\n type: 'string',\n description: 'Event reason',\n examples: [\n 'reason=Scheduled',\n 'reason=Pulled',\n 'reason=Created',\n 'reason=Started',\n ],\n },\n {\n name: 'type',\n type: 'enum',\n description: 'Event type',\n enumValues: ['Normal', 'Warning'],\n examples: [\n 'type=Normal',\n 'type=Warning',\n ],\n },\n {\n name: 'source.component',\n type: 'string',\n description: 'Component that generated the event',\n examples: [\n 'source.component=kubelet',\n 'source.component=kube-scheduler',\n ],\n },\n {\n name: 'metadata.namespace',\n type: 'string',\n description: 'Namespace of the event',\n examples: [\n 'metadata.namespace=kube-system',\n ],\n },\n];\n\n/**\n * Event facet fields available for querying\n * These are the fields supported by EventFacetQuery (events.k8s.io/v1)\n */\nexport const EVENT_FACET_FIELDS = [\n 'regarding.kind',\n 'regarding.namespace',\n 'reason',\n 'type',\n 'source.component',\n 'metadata.namespace',\n] as const;\n\nexport type EventFacetField = typeof EVENT_FACET_FIELDS[number];\n\n/**\n * Extract K8sEvent from EventRecord or pass through if already a K8sEvent.\n * Use this helper when you need to handle both EventRecord (from EventQuery)\n * and K8sEvent (from live events API).\n */\nexport function extractEvent(eventOrRecord: K8sEvent | EventRecord): K8sEvent {\n // Check if this is an EventRecord by looking for the nested 'event' field\n if ('event' in eventOrRecord && eventOrRecord.kind === 'EventRecord') {\n return (eventOrRecord as EventRecord).event;\n }\n // Already a K8sEvent\n return eventOrRecord as K8sEvent;\n}\n\n/**\n * Check if an object is an EventRecord (vs a plain K8sEvent)\n */\nexport function isEventRecord(obj: K8sEvent | EventRecord): obj is EventRecord {\n return obj.kind === 'EventRecord' && 'event' in obj;\n}\n\n/**\n * EventQuery request spec for querying historical events from ClickHouse\n */\nexport interface EventQuerySpec {\n /** Start of time range (RFC3339 or relative like \"now-7d\") */\n startTime: string;\n /** End of time range (RFC3339 or relative, default: now) */\n endTime: string;\n /** Namespace to filter events (optional) */\n namespace?: string;\n /** Field selector for filtering (standard Kubernetes syntax) */\n fieldSelector?: string;\n /** Maximum results per page (default: 100, max: 1000) */\n limit?: number;\n /** Pagination cursor */\n continue?: string;\n}\n\n/**\n * EventQuery status with results\n */\nexport interface EventQueryStatus {\n /** Matching events as EventRecord objects */\n results: EventRecord[];\n /** Pagination cursor for next page */\n continue?: string;\n /** Actual start time used (RFC3339) */\n effectiveStartTime?: string;\n /** Actual end time used (RFC3339) */\n effectiveEndTime?: string;\n}\n\n/**\n * EventQuery resource for querying historical events\n * Unlike the live events API (limited to 24h), EventQuery supports up to 60 days of history\n */\nexport interface EventQuery {\n apiVersion: 'activity.miloapis.com/v1alpha1';\n kind: 'EventQuery';\n metadata?: ObjectMeta;\n spec: EventQuerySpec;\n status?: EventQueryStatus;\n}\n","import { useState, useCallback, useMemo, useEffect, useRef } from 'react';\nimport type { K8sEvent, K8sEventType, EventQuerySpec } from '../types/k8s-event';\nimport type { WatchEvent } from '../types/activity';\nimport { extractEvent as extractEventFn } from '../types/k8s-event';\nimport { ActivityApiClient } from '../api/client';\n\n// Debounce delay for filter changes (ms)\nconst FILTER_DEBOUNCE_MS = 300;\n\n/**\n * Filter options for the events feed\n */\nexport interface EventsFeedFilters {\n /** Filter by event type (Normal/Warning/all) */\n eventType?: K8sEventType | 'all';\n /** Filter by namespaces (multi-select) */\n namespaces?: string[];\n /** Filter by involved object API group (multi-select) */\n involvedApiGroups?: string[];\n /** Filter by involved object kind (multi-select) */\n involvedKinds?: string[];\n /** Filter by involved object name */\n involvedName?: string;\n /** Filter by event reasons (multi-select) */\n reasons?: string[];\n /** Filter by source components (multi-select) */\n sourceComponents?: string[];\n /** Full-text search on event messages */\n search?: string;\n}\n\n/**\n * Time range for the events feed\n */\nexport interface TimeRange {\n /** Start of time range (RFC3339 or relative like \"now-24h\") */\n start: string;\n /** End of time range (RFC3339 or relative, default: now) */\n end?: string;\n}\n\n/**\n * Options for the useEventsFeed hook\n */\nexport interface UseEventsFeedOptions {\n /** API client instance */\n client: ActivityApiClient;\n /** Initial filter settings */\n initialFilters?: EventsFeedFilters;\n /** Initial time range */\n initialTimeRange?: TimeRange;\n /** Number of items per page (default: 50) */\n pageSize?: number;\n /** Namespace to filter events (optional) */\n namespace?: string;\n /** Enable real-time streaming (default: false) */\n enableStreaming?: boolean;\n /** Auto-start streaming when enabled (default: true) */\n autoStartStreaming?: boolean;\n}\n\n/**\n * Result returned by the useEventsFeed hook\n */\nexport interface UseEventsFeedResult {\n /** List of events */\n events: K8sEvent[];\n /** Whether the feed is loading */\n isLoading: boolean;\n /** Whether a filter/time change is pending (shows during debounce period) */\n isRefreshing: boolean;\n /** Error if any occurred */\n error: Error | null;\n /** Whether there are more events to load */\n hasMore: boolean;\n /** Current filter settings */\n filters: EventsFeedFilters;\n /** Current time range */\n timeRange: TimeRange;\n /** Execute/refresh the feed query */\n refresh: () => Promise<void>;\n /** Load more events (pagination) */\n loadMore: () => Promise<void>;\n /** Update filter settings */\n setFilters: (filters: EventsFeedFilters) => void;\n /** Update time range */\n setTimeRange: (timeRange: TimeRange) => void;\n /** Reset to initial state */\n reset: () => void;\n /** Whether streaming is currently active */\n isStreaming: boolean;\n /** Start streaming (when enableStreaming is true) */\n startStreaming: () => void;\n /** Stop streaming */\n stopStreaming: () => void;\n /** Number of new events received via streaming since last refresh */\n newEventsCount: number;\n}\n\n/**\n * Build field selector from filter options\n */\nfunction buildFieldSelector(filters: EventsFeedFilters): string | undefined {\n const selectors: string[] = [];\n\n // Event type filter\n if (filters.eventType && filters.eventType !== 'all') {\n selectors.push(`type=${filters.eventType}`);\n }\n\n // Involved object API group filter (multi-select)\n if (filters.involvedApiGroups && filters.involvedApiGroups.length > 0) {\n if (filters.involvedApiGroups.length === 1) {\n selectors.push(`regarding.apiVersion=${filters.involvedApiGroups[0]}`);\n } else {\n // Kubernetes field selectors don't support OR, so we'll handle this client-side\n // Just use the first one for server-side filtering\n selectors.push(`regarding.apiVersion=${filters.involvedApiGroups[0]}`);\n }\n }\n\n // Involved object kind filter (multi-select)\n if (filters.involvedKinds && filters.involvedKinds.length > 0) {\n if (filters.involvedKinds.length === 1) {\n selectors.push(`regarding.kind=${filters.involvedKinds[0]}`);\n } else {\n // Kubernetes field selectors don't support OR, so we'll handle this client-side\n // Just use the first one for server-side filtering\n selectors.push(`regarding.kind=${filters.involvedKinds[0]}`);\n }\n }\n\n // Involved object name filter\n if (filters.involvedName) {\n selectors.push(`regarding.name=${filters.involvedName}`);\n }\n\n // Namespace filter (multi-select)\n if (filters.namespaces && filters.namespaces.length > 0) {\n if (filters.namespaces.length === 1) {\n selectors.push(`regarding.namespace=${filters.namespaces[0]}`);\n } else {\n // Use first namespace for server-side filter\n selectors.push(`regarding.namespace=${filters.namespaces[0]}`);\n }\n }\n\n // Reason filter (multi-select)\n if (filters.reasons && filters.reasons.length > 0) {\n if (filters.reasons.length === 1) {\n selectors.push(`reason=${filters.reasons[0]}`);\n } else {\n // Use first reason for server-side filter\n selectors.push(`reason=${filters.reasons[0]}`);\n }\n }\n\n // Source component filter (multi-select)\n if (filters.sourceComponents && filters.sourceComponents.length > 0) {\n if (filters.sourceComponents.length === 1) {\n selectors.push(`source.component=${filters.sourceComponents[0]}`);\n } else {\n // Use first component for server-side filter\n selectors.push(`source.component=${filters.sourceComponents[0]}`);\n }\n }\n\n return selectors.length > 0 ? selectors.join(',') : undefined;\n}\n\n/**\n * Client-side filtering for multi-value filters that can't be expressed in field selectors\n */\nfunction matchesClientFilters(event: K8sEvent, filters: EventsFeedFilters): boolean {\n // Get regarding object (handles both new and deprecated field names)\n const regarding = event.regarding || event.involvedObject;\n\n // Check involved API groups (multi-select)\n if (filters.involvedApiGroups && filters.involvedApiGroups.length > 1) {\n if (!filters.involvedApiGroups.includes(regarding?.apiVersion || '')) {\n return false;\n }\n }\n\n // Check involved kinds (multi-select)\n if (filters.involvedKinds && filters.involvedKinds.length > 1) {\n if (!filters.involvedKinds.includes(regarding?.kind || '')) {\n return false;\n }\n }\n\n // Check namespaces (multi-select)\n if (filters.namespaces && filters.namespaces.length > 1) {\n if (!filters.namespaces.includes(regarding?.namespace || '')) {\n return false;\n }\n }\n\n // Check reasons (multi-select)\n if (filters.reasons && filters.reasons.length > 1) {\n if (!filters.reasons.includes(event.reason || '')) {\n return false;\n }\n }\n\n // Check source components (multi-select) - check both new and deprecated field names\n if (filters.sourceComponents && filters.sourceComponents.length > 1) {\n const reportingController = event.reportingController || event.source?.component;\n if (!filters.sourceComponents.includes(reportingController || '')) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * React hook for fetching and managing the Kubernetes events feed\n */\nexport function useEventsFeed({\n client,\n initialFilters = {},\n initialTimeRange = { start: 'now-24h' },\n pageSize = 50,\n namespace,\n enableStreaming = false,\n autoStartStreaming = true,\n}: UseEventsFeedOptions): UseEventsFeedResult {\n const [events, setEvents] = useState<K8sEvent[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [isRefreshing, setIsRefreshing] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [continueCursor, setContinueCursor] = useState<string | undefined>();\n const [filters, setFilters] = useState<EventsFeedFilters>(initialFilters);\n const [timeRange, setTimeRange] = useState<TimeRange>(initialTimeRange);\n const [isStreaming, setIsStreaming] = useState(false);\n const [newEventsCount, setNewEventsCount] = useState(0);\n\n // Track the latest resource version for watch resume\n const resourceVersionRef = useRef<string | undefined>();\n // Track the watch stop function\n const watchStopRef = useRef<(() => void) | null>(null);\n // Track whether streaming should restart after filter change\n const shouldRestartStreamingRef = useRef(false);\n // Track if we've done the initial load\n const hasInitialLoadRef = useRef(false);\n // Debounce timer for filter changes\n const filterDebounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Build EventQuery spec from current state\n const buildQuerySpec = useCallback(\n (cursor?: string): EventQuerySpec => {\n const spec: EventQuerySpec = {\n startTime: timeRange.start,\n endTime: timeRange.end || 'now',\n limit: pageSize,\n };\n\n // Add namespace if specified\n if (namespace) {\n spec.namespace = namespace;\n }\n\n // Add field selector\n const fieldSelector = buildFieldSelector(filters);\n if (fieldSelector) {\n spec.fieldSelector = fieldSelector;\n }\n\n // Add pagination cursor\n if (cursor) {\n spec.continue = cursor;\n }\n\n return spec;\n },\n [filters, timeRange, pageSize, namespace]\n );\n\n // Handle incoming watch events\n const handleWatchEvent = useCallback((event: WatchEvent<K8sEvent>) => {\n if (event.type === 'ERROR') {\n console.error('Watch error:', event.object);\n return;\n }\n\n if (event.type === 'BOOKMARK') {\n // Update resource version for resume capability\n if (event.object.metadata?.resourceVersion) {\n resourceVersionRef.current = event.object.metadata.resourceVersion;\n }\n return;\n }\n\n // Update resource version from the event\n if (event.object.metadata?.resourceVersion) {\n resourceVersionRef.current = event.object.metadata.resourceVersion;\n }\n\n // Apply client-side filtering\n if (!matchesClientFilters(event.object, filters)) {\n return;\n }\n\n if (event.type === 'ADDED') {\n // Prepend new event to the list\n setEvents((prev) => {\n // Check for duplicates by name\n const exists = prev.some((e) => e.metadata?.name === event.object.metadata?.name);\n if (exists) {\n return prev;\n }\n return [event.object, ...prev];\n });\n setNewEventsCount((prev) => prev + 1);\n } else if (event.type === 'MODIFIED') {\n // Update existing event\n setEvents((prev) =>\n prev.map((e) =>\n e.metadata?.name === event.object.metadata?.name ? event.object : e\n )\n );\n } else if (event.type === 'DELETED') {\n // Remove deleted event\n setEvents((prev) =>\n prev.filter((e) => e.metadata?.name !== event.object.metadata?.name)\n );\n }\n }, [filters]);\n\n // Build watch params (for live streaming, uses field selector without time range)\n const buildWatchParams = useCallback(() => {\n return {\n namespace,\n fieldSelector: buildFieldSelector(filters),\n };\n }, [filters, namespace]);\n\n // Start watching for real-time updates\n const startStreaming = useCallback(() => {\n if (watchStopRef.current) {\n // Already watching\n return;\n }\n\n const params = buildWatchParams();\n const { stop } = client.watchEvents(params, {\n resourceVersion: resourceVersionRef.current,\n onEvent: handleWatchEvent,\n onError: (err) => {\n console.error('Watch stream error:', err);\n setError(err);\n setIsStreaming(false);\n watchStopRef.current = null;\n },\n onClose: () => {\n setIsStreaming(false);\n watchStopRef.current = null;\n },\n });\n\n watchStopRef.current = stop;\n setIsStreaming(true);\n setNewEventsCount(0);\n }, [client, buildWatchParams, handleWatchEvent]);\n\n // Stop watching\n const stopStreaming = useCallback(() => {\n setIsStreaming(false);\n if (watchStopRef.current) {\n watchStopRef.current();\n watchStopRef.current = null;\n }\n }, []);\n\n // Execute the feed query using EventQuery\n const refresh = useCallback(async () => {\n setIsLoading(true);\n setIsRefreshing(false);\n setError(null);\n setNewEventsCount(0);\n\n try {\n const spec = buildQuerySpec();\n const result = await client.createEventQuery(spec);\n\n // Extract K8sEvent objects from EventRecord results\n const events = (result.status?.results || []).map(extractEventFn);\n\n // Apply client-side filtering for multi-value filters\n const filteredEvents = events.filter(event => matchesClientFilters(event, filters));\n\n setEvents(filteredEvents);\n setContinueCursor(result.status?.continue);\n\n // Note: EventQuery doesn't return resourceVersion, so watch will start from latest\n hasInitialLoadRef.current = true;\n\n // Auto-restart streaming if it was active before filter change\n if (shouldRestartStreamingRef.current && enableStreaming) {\n shouldRestartStreamingRef.current = false;\n }\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)));\n shouldRestartStreamingRef.current = false;\n } finally {\n setIsLoading(false);\n }\n }, [client, buildQuerySpec, filters, enableStreaming]);\n\n // Load more events (pagination) using EventQuery\n const loadMore = useCallback(async () => {\n if (!continueCursor || isLoading) {\n return;\n }\n\n setIsLoading(true);\n setError(null);\n\n try {\n const spec = buildQuerySpec(continueCursor);\n const result = await client.createEventQuery(spec);\n\n // Extract K8sEvent objects from EventRecord results\n const events = (result.status?.results || []).map(extractEventFn);\n\n // Apply client-side filtering\n const filteredEvents = events.filter(event => matchesClientFilters(event, filters));\n\n // Deduplicate before appending - use uid as primary key, fallback to name\n setEvents((prev) => {\n const existingUids = new Set(prev.map(e => e.metadata?.uid).filter(Boolean));\n const existingNames = new Set(prev.map(e => e.metadata?.name).filter(Boolean));\n\n const newEvents = filteredEvents.filter(event => {\n const uid = event.metadata?.uid;\n const name = event.metadata?.name;\n\n // Use uid if available (most reliable), otherwise fall back to name\n if (uid) {\n return !existingUids.has(uid);\n }\n if (name) {\n return !existingNames.has(name);\n }\n // If no uid or name, allow it through (shouldn't happen in practice)\n return true;\n });\n\n return [...prev, ...newEvents];\n });\n setContinueCursor(result.status?.continue);\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)));\n } finally {\n setIsLoading(false);\n }\n }, [client, buildQuerySpec, continueCursor, isLoading, filters]);\n\n // Update filters and reset pagination with debounced auto-refresh\n const updateFilters = useCallback((newFilters: EventsFeedFilters) => {\n // Track if streaming was active so we can restart it\n if (isStreaming) {\n shouldRestartStreamingRef.current = true;\n stopStreaming();\n }\n\n // Set isRefreshing BEFORE clearing events to prevent empty state flash\n setIsRefreshing(true);\n setFilters(newFilters);\n setEvents([]);\n setContinueCursor(undefined);\n resourceVersionRef.current = undefined;\n\n // Cancel any pending debounced refresh\n if (filterDebounceRef.current) {\n clearTimeout(filterDebounceRef.current);\n }\n\n // Debounce the refresh to avoid excessive API calls\n filterDebounceRef.current = setTimeout(() => {\n filterDebounceRef.current = null;\n }, FILTER_DEBOUNCE_MS);\n }, [stopStreaming, isStreaming]);\n\n // Update time range and reset pagination with auto-refresh\n const updateTimeRange = useCallback((newTimeRange: TimeRange) => {\n // Track if streaming was active so we can restart it\n if (isStreaming) {\n shouldRestartStreamingRef.current = true;\n stopStreaming();\n }\n\n // Set isRefreshing BEFORE clearing events to prevent empty state flash\n setIsRefreshing(true);\n setTimeRange(newTimeRange);\n setEvents([]);\n setContinueCursor(undefined);\n resourceVersionRef.current = undefined;\n\n // Cancel any pending debounced refresh\n if (filterDebounceRef.current) {\n clearTimeout(filterDebounceRef.current);\n }\n\n // Debounce the refresh\n filterDebounceRef.current = setTimeout(() => {\n filterDebounceRef.current = null;\n }, FILTER_DEBOUNCE_MS);\n }, [stopStreaming, isStreaming]);\n\n // Reset to initial state\n const reset = useCallback(() => {\n stopStreaming();\n setEvents([]);\n setError(null);\n setContinueCursor(undefined);\n setFilters(initialFilters);\n setTimeRange(initialTimeRange);\n setNewEventsCount(0);\n resourceVersionRef.current = undefined;\n }, [initialFilters, initialTimeRange, stopStreaming]);\n\n // Auto-refresh when filters or time range change (debounced)\n useEffect(() => {\n // Skip the initial render - we'll handle that separately\n if (!hasInitialLoadRef.current) {\n return;\n }\n\n // Cancel any pending refresh\n if (filterDebounceRef.current) {\n clearTimeout(filterDebounceRef.current);\n }\n\n // Debounce the refresh\n filterDebounceRef.current = setTimeout(() => {\n filterDebounceRef.current = null;\n refresh();\n }, FILTER_DEBOUNCE_MS);\n\n return () => {\n if (filterDebounceRef.current) {\n clearTimeout(filterDebounceRef.current);\n filterDebounceRef.current = null;\n }\n };\n }, [filters, timeRange]); // eslint-disable-line react-hooks/exhaustive-deps\n\n // Auto-start streaming after initial load when enabled\n useEffect(() => {\n if (enableStreaming && autoStartStreaming && events.length > 0 && !isStreaming && !isLoading) {\n startStreaming();\n }\n }, [enableStreaming, autoStartStreaming, events.length, isStreaming, isLoading, startStreaming]);\n\n // Restart streaming after filter change refresh completes\n useEffect(() => {\n if (\n enableStreaming &&\n shouldRestartStreamingRef.current &&\n events.length > 0 &&\n !isStreaming &&\n !isLoading\n ) {\n shouldRestartStreamingRef.current = false;\n startStreaming();\n }\n }, [enableStreaming, events.length, isStreaming, isLoading, startStreaming]);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (watchStopRef.current) {\n watchStopRef.current();\n }\n if (filterDebounceRef.current) {\n clearTimeout(filterDebounceRef.current);\n }\n };\n }, []);\n\n const hasMore = useMemo(() => !!continueCursor, [continueCursor]);\n\n return {\n events,\n isLoading,\n isRefreshing,\n error,\n hasMore,\n filters,\n timeRange,\n refresh,\n loadMore,\n setFilters: updateFilters,\n setTimeRange: updateTimeRange,\n reset,\n isStreaming,\n startStreaming,\n stopStreaming,\n newEventsCount,\n };\n}\n","import { format } from 'date-fns';\nimport type { K8sEvent } from '../types/k8s-event';\n\nexport interface EventExpandedDetailsProps {\n /** The event to display details for */\n event: K8sEvent;\n}\n\n/**\n * Format timestamp for display (with timezone)\n */\nfunction formatTimestampFull(timestamp?: string): string {\n if (!timestamp) return 'Unknown time';\n try {\n return format(new Date(timestamp), 'yyyy-MM-dd HH:mm:ss \\'UTC\\'');\n } catch {\n return timestamp;\n }\n}\n\n/**\n * Get the regarding object (handling both new and deprecated field names)\n */\nfunction getRegarding(event: K8sEvent) {\n return event.regarding || event.involvedObject || {};\n}\n\n/**\n * Get the reporting controller (handling both new and deprecated field names)\n */\nfunction getReportingController(event: K8sEvent): string | undefined {\n return event.reportingController || event.reportingComponent || event.source?.component;\n}\n\n/**\n * Get the reporting instance (handling both new and deprecated field names)\n */\nfunction getReportingInstance(event: K8sEvent): string | undefined {\n return event.reportingInstance || event.source?.host;\n}\n\n/**\n * EventExpandedDetails renders the expanded details section for an event.\n *\n * Section order (most to least relevant for investigation):\n * 1. Regarding Object - what resource is affected (was involvedObject in core/v1)\n * 2. Timestamps - when it happened\n * 3. Reporting Controller - what component generated the event (was source in core/v1)\n * 4. Action - what action was taken/failed\n * 5. Metadata - event UIDs and versions\n */\nexport function EventExpandedDetails({ event }: EventExpandedDetailsProps) {\n const regarding = getRegarding(event);\n const reportingController = getReportingController(event);\n const reportingInstance = getReportingInstance(event);\n const { eventTime, action, metadata, related } = event;\n\n // For backward compatibility, also check deprecated fields\n // Note: events.k8s.io/v1 uses \"deprecatedFirstTimestamp\" and \"deprecatedLastTimestamp\"\n const firstTimestamp = event.firstTimestamp || event.deprecatedFirstTimestamp;\n const lastTimestamp = event.lastTimestamp || event.deprecatedLastTimestamp || event.series?.lastObservedTime;\n const count = event.series?.count || event.count || event.deprecatedCount;\n\n return (\n <div className=\"mt-2 pt-2 border-t border-border space-y-2\">\n {/* Regarding Object - Most actionable, shown first (was involvedObject in core/v1) */}\n <div>\n <h4 className=\"m-0 mb-1 text-xs font-semibold text-muted-foreground uppercase tracking-wide\">\n Regarding Object\n </h4>\n <dl className=\"grid grid-cols-[auto_1fr] gap-x-3 gap-y-0.5 m-0 text-sm\">\n <dt className=\"text-muted-foreground text-xs\">Kind:</dt>\n <dd className=\"m-0 text-foreground text-xs\">{regarding.kind || 'Unknown'}</dd>\n <dt className=\"text-muted-foreground text-xs\">Name:</dt>\n <dd className=\"m-0 text-foreground text-xs\">{regarding.name || 'Unknown'}</dd>\n {regarding.namespace && (\n <>\n <dt className=\"text-muted-foreground text-xs\">Namespace:</dt>\n <dd className=\"m-0 text-foreground text-xs\">{regarding.namespace}</dd>\n </>\n )}\n {regarding.apiVersion && (\n <>\n <dt className=\"text-muted-foreground text-xs\">API Version:</dt>\n <dd className=\"m-0 text-foreground text-xs\">{regarding.apiVersion}</dd>\n </>\n )}\n {regarding.uid && (\n <>\n <dt className=\"text-muted-foreground text-xs\">UID:</dt>\n <dd className=\"m-0 font-mono text-xs text-muted-foreground break-all\">{regarding.uid}</dd>\n </>\n )}\n {regarding.fieldPath && (\n <>\n <dt className=\"text-muted-foreground text-xs\">Field Path:</dt>\n <dd className=\"m-0 font-mono text-xs text-muted-foreground break-all\">{regarding.fieldPath}</dd>\n </>\n )}\n </dl>\n </div>\n\n {/* Timestamps */}\n <div>\n <h4 className=\"m-0 mb-1 text-xs font-semibold text-muted-foreground uppercase tracking-wide\">\n Timestamps\n </h4>\n <dl className=\"grid grid-cols-[auto_1fr] gap-x-3 gap-y-0.5 m-0 text-sm\">\n {eventTime && (\n <>\n <dt className=\"text-muted-foreground text-xs\">Event Time:</dt>\n <dd className=\"m-0 text-foreground text-xs\">{formatTimestampFull(eventTime)}</dd>\n </>\n )}\n {firstTimestamp && (\n <>\n <dt className=\"text-muted-foreground text-xs\">First Seen:</dt>\n <dd className=\"m-0 text-foreground text-xs\">{formatTimestampFull(firstTimestamp)}</dd>\n </>\n )}\n {lastTimestamp && (\n <>\n <dt className=\"text-muted-foreground text-xs\">Last Seen:</dt>\n <dd className=\"m-0 text-foreground text-xs\">{formatTimestampFull(lastTimestamp)}</dd>\n </>\n )}\n {count && count > 1 && (\n <>\n <dt className=\"text-muted-foreground text-xs\">Count:</dt>\n <dd className=\"m-0 text-foreground text-xs\">{count} times</dd>\n </>\n )}\n </dl>\n </div>\n\n {/* Reporting Controller (was Source in core/v1) */}\n {(reportingController || reportingInstance) && (\n <div>\n <h4 className=\"m-0 mb-1 text-xs font-semibold text-muted-foreground uppercase tracking-wide\">\n Reporting Controller\n </h4>\n <dl className=\"grid grid-cols-[auto_1fr] gap-x-3 gap-y-0.5 m-0 text-sm\">\n {reportingController && (\n <>\n <dt className=\"text-muted-foreground text-xs\">Controller:</dt>\n <dd className=\"m-0 text-foreground text-xs\">{reportingController}</dd>\n </>\n )}\n {reportingInstance && (\n <>\n <dt className=\"text-muted-foreground text-xs\">Instance:</dt>\n <dd className=\"m-0 text-foreground text-xs\">{reportingInstance}</dd>\n </>\n )}\n </dl>\n </div>\n )}\n\n {/* Action */}\n {action && (\n <div>\n <h4 className=\"m-0 mb-1 text-xs font-semibold text-muted-foreground uppercase tracking-wide\">\n Action\n </h4>\n <p className=\"m-0 text-foreground text-xs\">{action}</p>\n </div>\n )}\n\n {/* Related Object */}\n {related && (\n <div>\n <h4 className=\"m-0 mb-1 text-xs font-semibold text-muted-foreground uppercase tracking-wide\">\n Related Object\n </h4>\n <dl className=\"grid grid-cols-[auto_1fr] gap-x-3 gap-y-0.5 m-0 text-sm\">\n {related.kind && (\n <>\n <dt className=\"text-muted-foreground text-xs\">Kind:</dt>\n <dd className=\"m-0 text-foreground text-xs\">{related.kind}</dd>\n </>\n )}\n {related.name && (\n <>\n <dt className=\"text-muted-foreground text-xs\">Name:</dt>\n <dd className=\"m-0 text-foreground text-xs\">{related.name}</dd>\n </>\n )}\n {related.namespace && (\n <>\n <dt className=\"text-muted-foreground text-xs\">Namespace:</dt>\n <dd className=\"m-0 text-foreground text-xs\">{related.namespace}</dd>\n </>\n )}\n </dl>\n </div>\n )}\n\n {/* Metadata */}\n {metadata && (\n <div>\n <h4 className=\"m-0 mb-1 text-xs font-semibold text-muted-foreground uppercase tracking-wide\">\n Metadata\n </h4>\n <dl className=\"grid grid-cols-[auto_1fr] gap-x-3 gap-y-0.5 m-0 text-sm\">\n {metadata.name && (\n <>\n <dt className=\"text-muted-foreground text-xs\">Name:</dt>\n <dd className=\"m-0 font-mono text-xs text-muted-foreground break-all\">{metadata.name}</dd>\n </>\n )}\n {metadata.uid && (\n <>\n <dt className=\"text-muted-foreground text-xs\">UID:</dt>\n <dd className=\"m-0 font-mono text-xs text-muted-foreground break-all\">{metadata.uid}</dd>\n </>\n )}\n {metadata.resourceVersion && (\n <>\n <dt className=\"text-muted-foreground text-xs\">Resource Version:</dt>\n <dd className=\"m-0 font-mono text-xs text-muted-foreground break-all\">{metadata.resourceVersion}</dd>\n </>\n )}\n </dl>\n </div>\n )}\n </div>\n );\n}\n","import { useState } from 'react';\nimport { format, formatDistanceToNow } from 'date-fns';\nimport { Copy, Check, ChevronDown, ChevronRight } from 'lucide-react';\nimport type { K8sEvent } from '../types/k8s-event';\nimport { EventExpandedDetails } from './EventExpandedDetails';\nimport { cn } from '../lib/utils';\nimport { Button } from './ui/button';\nimport { Card } from './ui/card';\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from './ui/tooltip';\n\nexport interface EventFeedItemProps {\n /** The event to render */\n event: K8sEvent;\n /** Handler called when the item is clicked */\n onEventClick?: (event: K8sEvent) => void;\n /** Handler called when the resource name is clicked. If provided, the resource name becomes clickable. */\n onResourceClick?: (resource: {\n kind: string;\n name: string;\n namespace?: string;\n uid?: string;\n }) => void;\n /** Whether the item is selected */\n isSelected?: boolean;\n /** Additional CSS class */\n className?: string;\n /** Whether to show as compact (for resource detail tabs) */\n compact?: boolean;\n /** Whether this is a newly streamed event */\n isNew?: boolean;\n /** Whether the item starts expanded */\n defaultExpanded?: boolean;\n}\n\n/**\n * Get the regarding object (handling both new and deprecated field names)\n */\nfunction getRegarding(event: K8sEvent) {\n return event.regarding || event.involvedObject || {};\n}\n\n/**\n * Get the event note/message (handling both new and deprecated field names)\n */\nfunction getNote(event: K8sEvent): string | undefined {\n return event.note || event.message;\n}\n\n/**\n * Get the reporting controller (handling both new and deprecated field names)\n */\nfunction getReportingController(event: K8sEvent): string | undefined {\n return event.reportingController || event.source?.component;\n}\n\n/**\n * Get the event count (handling both new and deprecated field names)\n */\nfunction getCount(event: K8sEvent): number | undefined {\n return event.series?.count || event.count || event.deprecatedCount;\n}\n\n/**\n * Get the best timestamp to display (handling both new and deprecated field names)\n * For recurring events (series), prefer lastObservedTime as it reflects the most recent occurrence.\n * For single events, use eventTime.\n */\nfunction getTimestamp(event: K8sEvent): string | undefined {\n // For series events, lastObservedTime is the most recent occurrence\n if (event.series?.lastObservedTime) {\n return event.series.lastObservedTime;\n }\n // For single events, use eventTime (eventsv1) or fall back to deprecated/legacy fields\n // Note: events.k8s.io/v1 uses \"deprecatedFirstTimestamp\" and \"deprecatedLastTimestamp\"\n return (\n event.eventTime ||\n event.deprecatedLastTimestamp ||\n event.deprecatedFirstTimestamp ||\n event.lastTimestamp ||\n event.firstTimestamp\n );\n}\n\n/**\n * Format timestamp for display\n */\nfunction formatTimestamp(timestamp?: string): string {\n if (!timestamp) return 'Unknown time';\n try {\n const date = new Date(timestamp);\n return formatDistanceToNow(date, { addSuffix: true });\n } catch {\n return timestamp;\n }\n}\n\n/**\n * Format timestamp for tooltip (human-friendly UTC format with timezone)\n */\nfunction formatTimestampFull(timestamp?: string): string {\n if (!timestamp) return 'Unknown time';\n try {\n const date = new Date(timestamp);\n return format(date, \"MMMM d, yyyy 'at' h:mm:ss a 'UTC'\");\n } catch {\n return timestamp;\n }\n}\n\n\n/**\n * EventFeedItem renders a single Kubernetes event in the feed\n */\nexport function EventFeedItem({\n event,\n onEventClick,\n onResourceClick,\n isSelected = false,\n className = '',\n compact = false,\n isNew = false,\n defaultExpanded = false,\n}: EventFeedItemProps) {\n const [isExpanded, setIsExpanded] = useState(defaultExpanded);\n const [isCopied, setIsCopied] = useState(false);\n\n // Use helper functions to handle both new and deprecated field names\n const regarding = getRegarding(event);\n const note = getNote(event);\n const count = getCount(event);\n const timestamp = getTimestamp(event);\n const reportingController = getReportingController(event);\n const { type, reason } = event;\n\n const handleClick = () => {\n onEventClick?.(event);\n };\n\n const toggleExpand = (e: React.MouseEvent) => {\n e.stopPropagation();\n setIsExpanded(!isExpanded);\n };\n\n const handleCopyResourceName = async (e: React.MouseEvent) => {\n e.stopPropagation();\n if (regarding.name) {\n try {\n await navigator.clipboard.writeText(regarding.name);\n setIsCopied(true);\n setTimeout(() => setIsCopied(false), 2000);\n } catch (err) {\n console.error('Failed to copy resource name:', err);\n }\n }\n };\n\n const handleResourceClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n if (onResourceClick && regarding.name) {\n onResourceClick({\n kind: regarding.kind || 'Unknown',\n name: regarding.name,\n namespace: regarding.namespace,\n uid: regarding.uid,\n });\n }\n };\n\n const isWarning = type === 'Warning';\n\n return (\n <TooltipProvider delayDuration={0}>\n <Card\n className={cn(\n 'cursor-pointer transition-all duration-200',\n 'hover:border-gray-300 hover:shadow-sm hover:-translate-y-px dark:hover:border-gray-600',\n compact ? 'p-2 mb-1.5' : 'p-2.5 mb-2',\n isSelected && 'border-rose-300 bg-rose-50 shadow-md dark:border-rose-600 dark:bg-rose-950/50',\n isNew && 'border-l-4 border-l-green-500 bg-green-50/50 dark:border-l-green-400 dark:bg-green-950/30',\n isWarning && !isSelected && 'border-red-300 dark:border-red-600',\n className\n )}\n onClick={handleClick}\n >\n <div className=\"flex gap-2\">\n {/* Main Content */}\n <div className=\"flex-1 min-w-0\">\n {/* Header row: Type badge + Reason + Kind + Timestamp */}\n <div className=\"flex items-center gap-1.5 mb-1\">\n {/* Type badge */}\n <span\n className={cn(\n \"inline-flex items-center px-1.5 py-0.5 rounded text-xs font-medium whitespace-nowrap\",\n isWarning\n ? \"bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-300\"\n : \"bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-300\"\n )}\n >\n {type || 'Unknown'}\n </span>\n\n {/* Reason */}\n {reason && (\n <span className=\"text-xs font-medium text-foreground\">\n {reason}\n </span>\n )}\n\n {/* Involved Kind */}\n {regarding.kind && (\n <span className=\"text-xs text-muted-foreground\">\n {regarding.kind}\n </span>\n )}\n\n {/* Spacer to push timestamp to the right */}\n <span className=\"flex-1\" />\n\n {/* Timestamp with tooltip */}\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"text-xs text-muted-foreground whitespace-nowrap cursor-default\">\n {formatTimestamp(timestamp)}\n </span>\n </TooltipTrigger>\n <TooltipContent>\n <p className=\"text-xs\">{formatTimestampFull(timestamp)}</p>\n </TooltipContent>\n </Tooltip>\n </div>\n\n {/* Content row: Message + Object + Timestamp + Expand */}\n <div className=\"flex items-center gap-2\">\n {/* Note with count - takes remaining space */}\n {note && (\n <p className=\"text-xs text-muted-foreground leading-snug m-0 flex-1 min-w-0 truncate\" title={note}>\n {note}{count && count > 1 && <span className=\"text-xs text-muted-foreground\"> (x{count})</span>}\n </p>\n )}\n\n {/* Regarding Object with Tooltip and Copy Button */}\n <div className=\"group flex items-center gap-1 min-w-0\">\n <Tooltip>\n <TooltipTrigger asChild>\n <span\n className={cn(\n \"text-xs font-medium text-foreground whitespace-nowrap truncate min-w-0 max-w-[120px]\",\n onResourceClick && \"cursor-pointer hover:underline hover:text-primary transition-colors\"\n )}\n onClick={onResourceClick ? handleResourceClick : undefined}\n >\n {regarding.name || 'Unknown'}\n </span>\n </TooltipTrigger>\n <TooltipContent>\n <p className=\"text-xs\">\n {regarding.namespace\n ? `${regarding.kind || 'Unknown'} in namespace ${regarding.namespace}`\n : regarding.kind || 'Unknown'}\n </p>\n </TooltipContent>\n </Tooltip>\n <Tooltip delayDuration={500}>\n <TooltipTrigger asChild>\n <button\n onClick={handleCopyResourceName}\n className=\"inline-flex items-center justify-center p-0.5 rounded hover:bg-gray-100 dark:hover:bg-gray-800 transition-opacity cursor-pointer\"\n aria-label=\"Copy resource name\"\n >\n {isCopied ? (\n <Check className=\"h-3 w-3 text-green-600 dark:text-green-400\" />\n ) : (\n <Copy className=\"h-3 w-3 text-gray-500 dark:text-gray-400\" />\n )}\n </button>\n </TooltipTrigger>\n <TooltipContent>\n <p className=\"text-xs\">Click to copy</p>\n </TooltipContent>\n </Tooltip>\n </div>\n\n {/* Expand button - larger and positioned at the end */}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-5 py-0 px-1 text-muted-foreground hover:text-foreground shrink-0\"\n onClick={toggleExpand}\n aria-expanded={isExpanded}\n >\n {isExpanded ? (\n <ChevronDown className=\"h-4 w-4\" />\n ) : (\n <ChevronRight className=\"h-4 w-4\" />\n )}\n </Button>\n </div>\n </div>\n </div>\n\n {/* Expanded Details */}\n {isExpanded && <EventExpandedDetails event={event} />}\n </Card>\n </TooltipProvider>\n );\n}\n","import { Card } from './ui/card';\nimport { Skeleton } from './ui/skeleton';\nimport { cn } from '../lib/utils';\n\nexport interface EventFeedItemSkeletonProps {\n /** Whether to show as compact (for resource detail tabs) */\n compact?: boolean;\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * EventFeedItemSkeleton renders a loading placeholder that matches EventFeedItem layout\n */\nexport function EventFeedItemSkeleton({\n compact = false,\n className = '',\n}: EventFeedItemSkeletonProps) {\n return (\n <Card\n className={cn(\n compact ? 'p-2 mb-1.5' : 'p-2.5 mb-2',\n className\n )}\n >\n <div className=\"flex gap-2\">\n {/* Main Content */}\n <div className=\"flex-1 min-w-0\">\n {/* Single row layout: Message + Object + Timestamp + Expand */}\n <div className=\"flex items-center gap-2\">\n {/* Note skeleton - takes remaining space */}\n <Skeleton className=\"h-3 flex-1 min-w-0\" />\n\n {/* Regarding Object skeleton */}\n <Skeleton className=\"h-3 w-20\" />\n\n {/* Timestamp skeleton */}\n <Skeleton className=\"h-3 w-16 shrink-0\" />\n\n {/* Expand button skeleton */}\n <Skeleton className=\"h-5 w-5 shrink-0\" />\n </div>\n </div>\n </div>\n </Card>\n );\n}\n","import { useState, useEffect, useCallback, useRef } from 'react';\nimport type { ActivityApiClient } from '../api/client';\nimport type { FacetValue } from '../types/activity';\nimport type { TimeRange, EventsFeedFilters } from './useEventsFeed';\n\n/**\n * Result returned by the useEventFacets hook\n */\nexport interface UseEventFacetsResult {\n /** Distinct involved object kinds with counts */\n involvedKinds: FacetValue[];\n /** Distinct event reasons with counts */\n reasons: FacetValue[];\n /** Distinct event types with counts */\n eventTypes: FacetValue[];\n /** Distinct source components with counts */\n sourceComponents: FacetValue[];\n /** Distinct namespaces with counts */\n namespaces: FacetValue[];\n /** Whether facets are loading */\n isLoading: boolean;\n /** Error if any occurred */\n error: Error | null;\n /** Manually refresh facets */\n refresh: () => Promise<void>;\n}\n\n/**\n * Hook to fetch Kubernetes event facets for filter dropdowns.\n * Results are cached based on time range to avoid redundant fetches.\n */\nexport function useEventFacets(\n client: ActivityApiClient,\n timeRange: TimeRange,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _filters: EventsFeedFilters = {}\n): UseEventFacetsResult {\n const [involvedKinds, setInvolvedKinds] = useState<FacetValue[]>([]);\n const [reasons, setReasons] = useState<FacetValue[]>([]);\n const [eventTypes, setEventTypes] = useState<FacetValue[]>([]);\n const [sourceComponents, setSourceComponents] = useState<FacetValue[]>([]);\n const [namespaces, setNamespaces] = useState<FacetValue[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n // Track the last fetched time range to avoid redundant fetches\n const lastFetchedRef = useRef<string | null>(null);\n\n const fetchFacets = useCallback(async () => {\n // Create a cache key from the time range\n const cacheKey = `${timeRange.start}-${timeRange.end || 'now'}`;\n\n // Skip if we already fetched for this time range\n if (lastFetchedRef.current === cacheKey) {\n return;\n }\n\n setIsLoading(true);\n setError(null);\n\n try {\n // EventFacetQuery supports these fields: regarding.kind, regarding.namespace,\n // namespace, reason, source.component, type\n const result = await client.queryEventFacets({\n timeRange: {\n start: timeRange.start,\n end: timeRange.end,\n },\n facets: [\n { field: 'regarding.kind', limit: 50 },\n { field: 'reason', limit: 50 },\n { field: 'type', limit: 5 },\n { field: 'source.component', limit: 50 },\n { field: 'regarding.namespace', limit: 50 },\n ],\n });\n\n const facets = result.status?.facets || [];\n\n // Extract involved object kinds\n const kindFacet = facets.find((f) => f.field === 'regarding.kind');\n setInvolvedKinds(kindFacet?.values || []);\n\n // Extract reasons\n const reasonFacet = facets.find((f) => f.field === 'reason');\n setReasons(reasonFacet?.values || []);\n\n // Extract event types\n const typeFacet = facets.find((f) => f.field === 'type');\n setEventTypes(typeFacet?.values || []);\n\n // Extract source components\n const componentFacet = facets.find((f) => f.field === 'source.component');\n setSourceComponents(componentFacet?.values || []);\n\n // Extract namespaces from involved objects\n const namespaceFacet = facets.find((f) => f.field === 'regarding.namespace');\n setNamespaces(namespaceFacet?.values || []);\n\n lastFetchedRef.current = cacheKey;\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)));\n } finally {\n setIsLoading(false);\n }\n }, [client, timeRange.start, timeRange.end]);\n\n // Fetch on mount and when time range changes\n useEffect(() => {\n fetchFacets();\n }, [fetchFacets]);\n\n // Force refresh function that bypasses cache\n const refresh = useCallback(async () => {\n lastFetchedRef.current = null;\n await fetchFacets();\n }, [fetchFacets]);\n\n return {\n involvedKinds,\n reasons,\n eventTypes,\n sourceComponents,\n namespaces,\n isLoading,\n error,\n refresh,\n };\n}\n","import { Button } from './ui/button';\nimport { cn } from '../lib/utils';\nimport type { K8sEventType } from '../types/k8s-event';\n\nexport type EventTypeOption = K8sEventType | 'all';\n\nexport interface EventTypeToggleProps {\n /** Current selected value */\n value: EventTypeOption;\n /** Handler called when selection changes */\n onChange: (value: EventTypeOption) => void;\n /** Additional CSS class */\n className?: string;\n /** Whether the toggle is disabled */\n disabled?: boolean;\n}\n\n/**\n * Options for the event type toggle\n */\nconst OPTIONS: { value: EventTypeOption; label: string; description: string }[] = [\n {\n value: 'all',\n label: 'All',\n description: 'Show all events',\n },\n {\n value: 'Normal',\n label: 'Normal',\n description: 'Show only normal events',\n },\n {\n value: 'Warning',\n label: 'Warning',\n description: 'Show only warning events',\n },\n];\n\n/**\n * EventTypeToggle provides a segmented control for filtering by event type\n */\nexport function EventTypeToggle({\n value,\n onChange,\n className = '',\n disabled = false,\n}: EventTypeToggleProps) {\n return (\n <div\n className={cn('inline-flex border border-input rounded-md overflow-hidden', className)}\n role=\"group\"\n aria-label=\"Filter by event type\"\n >\n {OPTIONS.map((option, index) => (\n <Button\n key={option.value}\n type=\"button\"\n variant=\"ghost\"\n className={cn(\n 'rounded-none px-2 h-7 text-xs font-medium transition-all duration-200',\n index < OPTIONS.length - 1 && 'border-r border-input',\n value === option.value\n ? 'bg-[#BF9595] text-[#0C1D31] hover:bg-[#BF9595]/90'\n : 'bg-muted text-foreground hover:bg-muted/80'\n )}\n onClick={() => onChange(option.value)}\n disabled={disabled}\n aria-pressed={value === option.value}\n title={option.description}\n >\n {option.label}\n </Button>\n ))}\n </div>\n );\n}\n","import { useState, useCallback, useEffect } from 'react';\nimport { formatISO, subDays } from 'date-fns';\nimport { Search } from 'lucide-react';\n\nimport type { EventsFeedFilters as FilterState } from '../hooks/useEventsFeed';\nimport type { TimeRange } from '../hooks/useEventsFeed';\nimport type { ActivityApiClient } from '../api/client';\nimport { useEventFacets } from '../hooks/useEventFacets';\nimport { EventTypeToggle, EventTypeOption } from './EventTypeToggle';\nimport { TimeRangeDropdown } from './ui/time-range-dropdown';\nimport { FilterChip } from './ui/filter-chip';\nimport { AddFilterDropdown, type FilterOption } from './ui/add-filter-dropdown';\nimport { Input } from './ui/input';\n\nexport interface EventsFeedFiltersProps {\n /** API client instance for fetching facets */\n client: ActivityApiClient;\n /** Current filter state */\n filters: FilterState;\n /** Current time range */\n timeRange: TimeRange;\n /** Handler called when filters change */\n onFiltersChange: (filters: FilterState) => void;\n /** Handler called when time range changes */\n onTimeRangeChange: (timeRange: TimeRange) => void;\n /** Whether the filters are disabled (e.g., during loading) */\n disabled?: boolean;\n /** Filters that should be locked and hidden from the UI (programmatically set by parent) */\n hiddenFilters?: Array<'involvedKinds' | 'reasons' | 'namespaces' | 'sourceComponents' | 'involvedName' | 'eventType'>;\n /** Additional CSS class */\n className?: string;\n /** Namespace filter (when scoped to a specific namespace) */\n namespace?: string;\n}\n\n/**\n * Preset time ranges\n */\nconst TIME_PRESETS = [\n { key: 'now-1h', label: 'Last hour' },\n { key: 'now-6h', label: 'Last 6 hours' },\n { key: 'now-24h', label: 'Last 24 hours' },\n { key: 'now-7d', label: 'Last 7 days' },\n { key: 'now-30d', label: 'Last 30 days' },\n];\n\n/**\n * Filter configuration registry\n */\ntype FilterId = 'involvedKinds' | 'reasons' | 'namespaces' | 'sourceComponents' | 'involvedName';\n\ninterface FilterConfig {\n id: FilterId;\n label: string;\n inputMode: 'typeahead' | 'text';\n placeholder?: string;\n searchPlaceholder?: string;\n}\n\nconst FILTER_CONFIGS: Record<FilterId, FilterConfig> = {\n involvedKinds: {\n id: 'involvedKinds',\n label: 'Kind',\n inputMode: 'typeahead',\n searchPlaceholder: 'Search kinds...',\n },\n reasons: {\n id: 'reasons',\n label: 'Reason',\n inputMode: 'typeahead',\n searchPlaceholder: 'Search reasons...',\n },\n namespaces: {\n id: 'namespaces',\n label: 'Namespace',\n inputMode: 'typeahead',\n searchPlaceholder: 'Search namespaces...',\n },\n sourceComponents: {\n id: 'sourceComponents',\n label: 'Source',\n inputMode: 'typeahead',\n searchPlaceholder: 'Search sources...',\n },\n involvedName: {\n id: 'involvedName',\n label: 'Resource Name',\n inputMode: 'text',\n placeholder: 'Enter resource name...',\n },\n};\n\n/**\n * Helper function to convert ISO string to datetime-local format\n */\nconst formatDatetimeLocal = (isoString: string): string => {\n const date = new Date(isoString);\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n const hours = String(date.getHours()).padStart(2, '0');\n const minutes = String(date.getMinutes()).padStart(2, '0');\n return `${year}-${month}-${day}T${hours}:${minutes}`;\n};\n\n/**\n * Check if the current time range matches a preset\n */\nconst getSelectedPreset = (timeRange: TimeRange): string => {\n const preset = TIME_PRESETS.find((p) => timeRange.start === p.key);\n return preset ? preset.key : 'custom';\n};\n\n/**\n * EventsFeedFilters provides filter controls for the events feed\n */\nexport function EventsFeedFilters({\n client,\n filters,\n timeRange,\n onFiltersChange,\n onTimeRangeChange,\n disabled = false,\n hiddenFilters = [],\n className = '',\n namespace,\n}: EventsFeedFiltersProps) {\n const { involvedKinds, reasons, namespaces, sourceComponents, error: facetsError } = useEventFacets(client, timeRange, filters);\n\n // Log facets error for debugging\n if (facetsError) {\n console.error('Failed to load event facets:', facetsError);\n }\n\n // Track which filter was just added to auto-open it\n const [pendingFilter, setPendingFilter] = useState<FilterId | null>(null);\n\n // Custom time range state\n const selectedPreset = getSelectedPreset(timeRange);\n const [customStart, setCustomStart] = useState(() => {\n if (selectedPreset === 'custom') {\n return formatDatetimeLocal(timeRange.start);\n }\n return formatDatetimeLocal(formatISO(subDays(new Date(), 1)));\n });\n const [customEnd, setCustomEnd] = useState(() => {\n if (selectedPreset === 'custom' && timeRange.end) {\n return formatDatetimeLocal(timeRange.end);\n }\n return formatDatetimeLocal(formatISO(new Date()));\n });\n\n // Handle event type change\n const handleEventTypeChange = useCallback(\n (value: EventTypeOption) => {\n onFiltersChange({\n ...filters,\n eventType: value === 'all' ? undefined : value,\n });\n },\n [filters, onFiltersChange]\n );\n\n // Handle time range preset selection\n const handleTimePresetSelect = useCallback(\n (presetKey: string) => {\n onTimeRangeChange({\n start: presetKey,\n end: undefined,\n });\n },\n [onTimeRangeChange]\n );\n\n // Handle custom time range apply\n const handleCustomRangeApply = useCallback(\n (start: string, end: string) => {\n setCustomStart(start);\n setCustomEnd(end);\n onTimeRangeChange({\n start: new Date(start).toISOString(),\n end: new Date(end).toISOString(),\n });\n },\n [onTimeRangeChange]\n );\n\n // Get display label for time range\n const getTimeRangeLabel = () => {\n const preset = TIME_PRESETS.find((p) => p.key === selectedPreset);\n if (preset) return preset.label;\n if (selectedPreset === 'custom' && timeRange.start && timeRange.end) {\n const start = new Date(timeRange.start);\n const end = new Date(timeRange.end);\n return `${start.toLocaleDateString()} - ${end.toLocaleDateString()}`;\n }\n return 'Select time range';\n };\n\n // Get current event type value for toggle\n const eventTypeValue: EventTypeOption = filters.eventType || 'all';\n\n // Determine which filters are currently active (have values) and not hidden\n const filtersWithValues: FilterId[] = [];\n if (filters.involvedKinds && filters.involvedKinds.length > 0 && !hiddenFilters.includes('involvedKinds')) filtersWithValues.push('involvedKinds');\n if (filters.reasons && filters.reasons.length > 0 && !hiddenFilters.includes('reasons')) filtersWithValues.push('reasons');\n if (!namespace && filters.namespaces && filters.namespaces.length > 0 && !hiddenFilters.includes('namespaces')) filtersWithValues.push('namespaces');\n if (filters.sourceComponents && filters.sourceComponents.length > 0 && !hiddenFilters.includes('sourceComponents')) filtersWithValues.push('sourceComponents');\n if (filters.involvedName && !hiddenFilters.includes('involvedName')) filtersWithValues.push('involvedName');\n\n // Include pendingFilter (newly added filter awaiting value selection) in the displayed filters\n const activeFilterIds: FilterId[] = pendingFilter && !filtersWithValues.includes(pendingFilter)\n ? [...filtersWithValues, pendingFilter]\n : filtersWithValues;\n\n // Clear pending filter when filter values change (user selected something)\n useEffect(() => {\n if (pendingFilter && filtersWithValues.includes(pendingFilter)) {\n // Filter now has values, clear pending state\n setPendingFilter(null);\n }\n }, [pendingFilter, filtersWithValues]);\n\n // Build available filters list (exclude namespace if scoped, exclude hidden filters)\n const availableFilters: FilterOption[] = [\n { id: 'involvedKinds', label: 'Kind' },\n { id: 'reasons', label: 'Reason' },\n ...(namespace ? [] : [{ id: 'namespaces' as const, label: 'Namespace' }]),\n { id: 'sourceComponents', label: 'Source' },\n { id: 'involvedName', label: 'Resource Name' },\n ].filter((filter) => !hiddenFilters.includes(filter.id as FilterId));\n\n // Handle adding a filter\n const handleAddFilter = useCallback((filterId: string) => {\n setPendingFilter(filterId as FilterId);\n }, []);\n\n // Handle popover close - clear pending filter if no values were selected\n const handlePopoverClose = useCallback(\n (filterId: FilterId) => {\n if (pendingFilter === filterId) {\n const hasValues = (() => {\n const value = filters[filterId];\n if (filterId === 'involvedName') return !!value;\n return Array.isArray(value) && value.length > 0;\n })();\n if (!hasValues) {\n setPendingFilter(null);\n }\n }\n },\n [pendingFilter, filters]\n );\n\n // Handle filter value changes\n const handleFilterChange = useCallback(\n (filterId: FilterId, values: string[]) => {\n onFiltersChange({\n ...filters,\n [filterId]: values.length > 0 ? values : undefined,\n });\n },\n [filters, onFiltersChange]\n );\n\n // Handle filter clear\n const handleFilterClear = useCallback(\n (filterId: FilterId) => {\n onFiltersChange({\n ...filters,\n [filterId]: undefined,\n });\n },\n [filters, onFiltersChange]\n );\n\n // Get options for a specific filter\n const getFilterOptions = (filterId: FilterId) => {\n switch (filterId) {\n case 'involvedKinds':\n return involvedKinds\n .filter((facet) => facet.value)\n .map((facet) => ({\n value: facet.value,\n label: facet.value,\n count: facet.count,\n }));\n case 'reasons':\n return reasons\n .filter((facet) => facet.value)\n .map((facet) => ({\n value: facet.value,\n label: facet.value,\n count: facet.count,\n }));\n case 'namespaces':\n return namespaces\n .filter((facet) => facet.value)\n .map((facet) => ({\n value: facet.value,\n label: facet.value,\n count: facet.count,\n }));\n case 'sourceComponents':\n return sourceComponents\n .filter((facet) => facet.value)\n .map((facet) => ({\n value: facet.value,\n label: facet.value,\n count: facet.count,\n }));\n default:\n return [];\n }\n };\n\n // Get values for a specific filter\n const getFilterValues = (filterId: FilterId): string[] => {\n const value = filters[filterId];\n if (filterId === 'involvedName') {\n return value ? [value as string] : [];\n }\n return (value as string[] | undefined) || [];\n };\n\n // Handle search input change with debouncing\n const handleSearchChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const value = event.target.value;\n onFiltersChange({\n ...filters,\n search: value || undefined,\n });\n },\n [filters, onFiltersChange]\n );\n\n return (\n <div className={`mb-3 pb-3 border-b border-border pr-2 ${className}`}>\n <div className=\"flex flex-wrap gap-2 items-center\">\n {/* Event Type Toggle */}\n {!hiddenFilters.includes('eventType') && (\n <EventTypeToggle\n value={eventTypeValue}\n onChange={handleEventTypeChange}\n disabled={disabled}\n />\n )}\n\n {/* Search Input */}\n <div className=\"relative min-w-[200px] flex-1 max-w-xs\">\n <Search className=\"absolute left-2 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground\" />\n <Input\n type=\"text\"\n placeholder=\"Search events...\"\n value={filters.search || ''}\n onChange={handleSearchChange}\n disabled={disabled}\n className=\"pl-8 h-7 text-xs\"\n />\n </div>\n\n {/* Active Filter Chips */}\n {activeFilterIds.map((filterId) => {\n const config = FILTER_CONFIGS[filterId];\n return (\n <FilterChip\n key={filterId}\n label={config.label}\n values={getFilterValues(filterId)}\n options={config.inputMode === 'typeahead' ? getFilterOptions(filterId) : undefined}\n onValuesChange={(values) => handleFilterChange(filterId, values)}\n onClear={() => handleFilterClear(filterId)}\n onPopoverClose={() => handlePopoverClose(filterId)}\n inputMode={config.inputMode}\n placeholder={config.placeholder}\n searchPlaceholder={config.searchPlaceholder}\n autoOpen={pendingFilter === filterId}\n disabled={disabled}\n />\n );\n })}\n\n {/* Add Filter Dropdown */}\n <AddFilterDropdown\n availableFilters={availableFilters}\n activeFilterIds={activeFilterIds}\n onAddFilter={handleAddFilter}\n hasActiveFilters={activeFilterIds.length > 0}\n disabled={disabled}\n />\n\n {/* Spacer */}\n <div className=\"flex-1 min-w-[20px]\" />\n\n {/* Time Range Dropdown */}\n <TimeRangeDropdown\n presets={TIME_PRESETS}\n selectedPreset={selectedPreset}\n onPresetSelect={handleTimePresetSelect}\n onCustomRangeApply={handleCustomRangeApply}\n customStart={customStart}\n customEnd={customEnd}\n disabled={disabled}\n displayLabel={getTimeRangeLabel()}\n />\n </div>\n </div>\n );\n}\n","import { useEffect, useRef, useCallback } from 'react';\nimport type { K8sEvent } from '../types/k8s-event';\nimport type { EffectiveTimeRangeCallback, ErrorFormatter } from '../types/activity';\nimport type {\n EventsFeedFilters as FilterState,\n TimeRange,\n} from '../hooks/useEventsFeed';\nimport { useEventsFeed } from '../hooks/useEventsFeed';\nimport { EventFeedItem } from './EventFeedItem';\nimport { EventFeedItemSkeleton } from './EventFeedItemSkeleton';\nimport { EventsFeedFilters } from './EventsFeedFilters';\nimport { ActivityApiClient } from '../api/client';\nimport { Button } from './ui/button';\nimport { Card } from './ui/card';\nimport { Badge } from './ui/badge';\nimport { ApiErrorAlert } from './ApiErrorAlert';\n\nexport interface EventsFeedProps {\n /** API client instance */\n client: ActivityApiClient;\n /** Initial filter settings */\n initialFilters?: FilterState;\n /** Initial time range */\n initialTimeRange?: TimeRange;\n /** Number of items per page */\n pageSize?: number;\n /** Handler called when an event is clicked */\n onEventClick?: (event: K8sEvent) => void;\n /** Handler called when a resource name is clicked. If provided, resource names become clickable. */\n onResourceClick?: (resource: {\n kind: string;\n name: string;\n namespace?: string;\n uid?: string;\n }) => void;\n /** Whether to show in compact mode (for resource detail tabs) */\n compact?: boolean;\n /** Filter to a specific namespace */\n namespace?: string;\n /** Whether to show filters */\n showFilters?: boolean;\n /** Filters that should be locked and hidden from the UI (programmatically set by parent) */\n hiddenFilters?: Array<'involvedKinds' | 'reasons' | 'namespaces' | 'sourceComponents' | 'involvedName' | 'eventType'>;\n /** Additional CSS class */\n className?: string;\n /** Enable infinite scroll (default: true) */\n infiniteScroll?: boolean;\n /** Threshold in pixels for triggering load more (default: 200) */\n loadMoreThreshold?: number;\n /** Enable real-time streaming (default: false) */\n enableStreaming?: boolean;\n /** Callback invoked when the effective time range is resolved */\n onEffectiveTimeRangeChange?: EffectiveTimeRangeCallback;\n /** Custom error formatter for customizing error messages */\n errorFormatter?: ErrorFormatter;\n /** Callback invoked when filters or time range change (useful for URL state management) */\n onFiltersChange?: (filters: FilterState, timeRange: TimeRange) => void;\n}\n\n/**\n * EventsFeed displays a chronological list of Kubernetes events with filtering and pagination.\n * Supports optional real-time streaming of new events.\n */\nexport function EventsFeed({\n client,\n initialFilters = {},\n initialTimeRange = { start: 'now-24h' },\n pageSize = 50,\n onEventClick,\n onResourceClick,\n compact = false,\n namespace,\n showFilters = true,\n hiddenFilters = [],\n className = '',\n infiniteScroll = true,\n loadMoreThreshold = 200,\n enableStreaming = false,\n onEffectiveTimeRangeChange,\n errorFormatter,\n onFiltersChange: onFiltersChangeProp,\n}: EventsFeedProps) {\n // Merge namespace into initial filters if provided\n const mergedInitialFilters: FilterState = {\n ...initialFilters,\n };\n\n const {\n events,\n isLoading,\n isRefreshing,\n error,\n hasMore,\n filters,\n timeRange,\n refresh,\n loadMore,\n setFilters,\n setTimeRange,\n isStreaming,\n startStreaming,\n stopStreaming,\n newEventsCount,\n } = useEventsFeed({\n client,\n initialFilters: mergedInitialFilters,\n initialTimeRange,\n pageSize,\n namespace,\n enableStreaming,\n autoStartStreaming: true,\n });\n\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n const loadMoreTriggerRef = useRef<HTMLDivElement>(null);\n // Store the latest loadMore function in a ref to avoid observer re-subscription\n const loadMoreRef = useRef(loadMore);\n\n // Auto-execute on mount\n useEffect(() => {\n refresh();\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n // Update the ref whenever loadMore changes\n useEffect(() => {\n loadMoreRef.current = loadMore;\n }, [loadMore]);\n\n // Infinite scroll using Intersection Observer\n useEffect(() => {\n if (!infiniteScroll || !loadMoreTriggerRef.current) return;\n\n const observer = new IntersectionObserver(\n (entries) => {\n const entry = entries[0];\n if (entry.isIntersecting && hasMore && !isLoading) {\n // Call through the ref to always use the latest function\n loadMoreRef.current();\n }\n },\n {\n root: scrollContainerRef.current,\n rootMargin: `${loadMoreThreshold}px`,\n threshold: 0,\n }\n );\n\n observer.observe(loadMoreTriggerRef.current);\n\n return () => {\n observer.disconnect();\n };\n }, [infiniteScroll, hasMore, isLoading, loadMoreThreshold]);\n\n // Handle filter changes - refresh is automatic via the hook\n const handleFiltersChange = useCallback(\n (newFilters: FilterState) => {\n setFilters(newFilters);\n onFiltersChangeProp?.(newFilters, timeRange);\n },\n [setFilters, onFiltersChangeProp, timeRange]\n );\n\n // Handle time range changes - refresh is automatic via the hook\n const handleTimeRangeChange = useCallback(\n (newTimeRange: TimeRange) => {\n setTimeRange(newTimeRange);\n onFiltersChangeProp?.(filters, newTimeRange);\n },\n [setTimeRange, onFiltersChangeProp, filters]\n );\n\n // Handle manual load more click\n const handleLoadMoreClick = useCallback(() => {\n loadMore();\n }, [loadMore]);\n\n // Handle streaming toggle\n const handleStreamingToggle = useCallback(() => {\n if (isStreaming) {\n stopStreaming();\n } else {\n startStreaming();\n }\n }, [isStreaming, startStreaming, stopStreaming]);\n\n // Build container classes - use flex layout to properly fill available space\n // flex-1 min-h-0 allows the Card to fill parent flex container and enable child scrolling\n const containerClasses = compact\n ? `flex-1 min-h-0 flex flex-col p-2 shadow-none border-border ${className}`\n : `flex-1 min-h-0 flex flex-col p-3 ${className}`;\n\n // Build list classes - use flex-1 min-h-0 for flex-based scrolling\n const listClasses = 'flex-1 min-h-0 overflow-y-auto pr-2';\n\n return (\n <Card className={containerClasses}>\n {/* Header with streaming status */}\n {enableStreaming && (\n <div className=\"flex items-center justify-between mb-1 pb-0.5 border-b border-border\">\n <div className=\"flex items-center gap-2\">\n {isStreaming && (\n <div className=\"flex items-center gap-1.5\">\n <span className=\"relative flex h-2 w-2\">\n <span className=\"animate-ping absolute inline-flex h-full w-full rounded-full bg-green-400 dark:bg-green-500 opacity-75\"></span>\n <span className=\"relative inline-flex rounded-full h-2 w-2 bg-green-500 dark:bg-green-400\"></span>\n </span>\n <span className=\"text-xs text-muted-foreground\">Streaming events...</span>\n </div>\n )}\n {newEventsCount > 0 && (\n <Badge variant=\"secondary\" className=\"text-xs\">\n +{newEventsCount} new\n </Badge>\n )}\n </div>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleStreamingToggle}\n className=\"text-xs h-7\"\n >\n {isStreaming ? (\n <>\n <svg className=\"w-3.5 h-3.5 mr-1\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <rect x=\"6\" y=\"4\" width=\"4\" height=\"16\" />\n <rect x=\"14\" y=\"4\" width=\"4\" height=\"16\" />\n </svg>\n Pause\n </>\n ) : (\n <>\n <svg className=\"w-3.5 h-3.5 mr-1\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <polygon points=\"5,3 19,12 5,21\" fill=\"currentColor\" />\n </svg>\n Resume\n </>\n )}\n </Button>\n </div>\n )}\n\n {/* Filters */}\n {showFilters && (\n <EventsFeedFilters\n client={client}\n filters={filters}\n timeRange={timeRange}\n onFiltersChange={handleFiltersChange}\n onTimeRangeChange={handleTimeRangeChange}\n disabled={isLoading}\n namespace={namespace}\n hiddenFilters={hiddenFilters}\n />\n )}\n\n {/* Error Display */}\n <ApiErrorAlert error={error} onRetry={refresh} className=\"mb-4\" errorFormatter={errorFormatter} />\n\n {/* Event List */}\n <div className={listClasses} ref={scrollContainerRef}>\n {/* Skeleton Loading State - show when loading/refreshing and no items yet */}\n {(isLoading || isRefreshing) && events.length === 0 && (\n <>\n {Array.from({ length: 8 }).map((_, index) => (\n <EventFeedItemSkeleton key={index} compact={compact} />\n ))}\n </>\n )}\n\n {/* Empty State - only show when not loading/refreshing */}\n {!isLoading && !isRefreshing && events.length === 0 && (\n <div className=\"py-12 text-center text-muted-foreground\">\n <p className=\"m-0\">No events found</p>\n <p className=\"text-sm text-muted-foreground mt-2 m-0\">\n Try adjusting your filters or time range\n </p>\n </div>\n )}\n\n {events.map((event, index) => (\n <EventFeedItem\n key={event.metadata?.uid || event.metadata?.name}\n event={event}\n onEventClick={onEventClick}\n onResourceClick={onResourceClick}\n compact={compact}\n isNew={enableStreaming && index < newEventsCount}\n />\n ))}\n\n {/* Load More Trigger for Infinite Scroll */}\n {infiniteScroll && hasMore && (\n <div ref={loadMoreTriggerRef} className=\"h-px mt-4\" />\n )}\n\n {/* Load More Button (when infinite scroll is disabled) */}\n {!infiniteScroll && hasMore && !isLoading && (\n <div className=\"flex justify-center p-4 mt-4\">\n <Button onClick={handleLoadMoreClick}>\n Load more\n </Button>\n </div>\n )}\n\n {/* End of Results */}\n {!hasMore && events.length > 0 && !isLoading && (\n <div className=\"text-center py-6 text-muted-foreground text-sm border-t border-border mt-4\">\n No more events to load\n </div>\n )}\n </div>\n </Card>\n );\n}\n","import { useState, useCallback, useMemo } from 'react';\nimport type { ActivityPolicy, PolicyGroup } from '../types/policy';\nimport { ActivityApiClient } from '../api/client';\n\n/**\n * Options for the usePolicyList hook\n */\nexport interface UsePolicyListOptions {\n /** API client instance */\n client: ActivityApiClient;\n /** Whether to group policies by API group (default: true) */\n groupByApiGroup?: boolean;\n}\n\n/**\n * Result returned by the usePolicyList hook\n */\nexport interface UsePolicyListResult {\n /** List of all policies */\n policies: ActivityPolicy[];\n /** Policies grouped by API group */\n groups: PolicyGroup[];\n /** Whether the list is loading */\n isLoading: boolean;\n /** Error if any occurred */\n error: Error | null;\n /** Reload the policy list */\n refresh: () => Promise<void>;\n /** Delete a policy by name */\n deletePolicy: (name: string) => Promise<void>;\n /** Whether a delete is in progress */\n isDeleting: boolean;\n}\n\n/**\n * Group policies by their API group\n */\nfunction groupPoliciesByApiGroup(policies: ActivityPolicy[]): PolicyGroup[] {\n const groupMap = new Map<string, ActivityPolicy[]>();\n\n for (const policy of policies) {\n const apiGroup = policy.spec.resource.apiGroup || '(core)';\n const existing = groupMap.get(apiGroup) || [];\n existing.push(policy);\n groupMap.set(apiGroup, existing);\n }\n\n // Sort groups by API group name\n const sortedGroups = Array.from(groupMap.entries())\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([apiGroup, policies]) => ({\n apiGroup,\n // Sort policies by kind, then by name\n policies: policies.sort((a, b) => {\n const kindCompare = a.spec.resource.kind.localeCompare(b.spec.resource.kind);\n if (kindCompare !== 0) return kindCompare;\n return (a.metadata?.name || '').localeCompare(b.metadata?.name || '');\n }),\n }));\n\n return sortedGroups;\n}\n\n/**\n * React hook for managing the policy list\n */\nexport function usePolicyList({\n client,\n groupByApiGroup = true,\n}: UsePolicyListOptions): UsePolicyListResult {\n const [policies, setPolicies] = useState<ActivityPolicy[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [isDeleting, setIsDeleting] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n // Compute grouped policies\n const groups = useMemo(() => {\n if (!groupByApiGroup) {\n return [{ apiGroup: 'All Policies', policies }];\n }\n return groupPoliciesByApiGroup(policies);\n }, [policies, groupByApiGroup]);\n\n // Fetch all policies\n const refresh = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n\n try {\n const result = await client.listPolicies();\n setPolicies(result.items || []);\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)));\n } finally {\n setIsLoading(false);\n }\n }, [client]);\n\n // Delete a policy and refresh the list\n const deletePolicy = useCallback(\n async (name: string) => {\n setIsDeleting(true);\n setError(null);\n\n try {\n await client.deletePolicy(name);\n // Remove from local state immediately for responsiveness\n setPolicies((prev) => prev.filter((p) => p.metadata?.name !== name));\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)));\n throw err; // Re-throw so caller can handle\n } finally {\n setIsDeleting(false);\n }\n },\n [client]\n );\n\n return {\n policies,\n groups,\n isLoading,\n error,\n refresh,\n deletePolicy,\n isDeleting,\n };\n}\n","import { useEffect, useState, useCallback } from 'react';\nimport type { ActivityPolicy, Condition } from '../types/policy';\nimport type { ErrorFormatter } from '../types/activity';\nimport { ActivityApiClient } from '../api/client';\nimport { usePolicyList, type UsePolicyListResult } from '../hooks/usePolicyList';\nimport { Button } from './ui/button';\nimport { Card, CardContent, CardHeader } from './ui/card';\nimport { Badge } from './ui/badge';\nimport { Separator } from './ui/separator';\nimport { Skeleton } from './ui/skeleton';\nimport { ApiErrorAlert } from './ApiErrorAlert';\nimport { AlertTriangle } from 'lucide-react';\n\nexport interface PolicyListProps {\n /** API client instance */\n client: ActivityApiClient;\n /** Callback when a policy is selected for viewing */\n onViewPolicy?: (policyName: string) => void;\n /** Callback when a policy is selected for editing (deprecated - use onViewPolicy) */\n onEditPolicy?: (policyName: string) => void;\n /** Callback when create new policy is requested */\n onCreatePolicy?: () => void;\n /** Whether to show grouped by API group (default: true) */\n groupByApiGroup?: boolean;\n /** Additional CSS class */\n className?: string;\n /** Custom error formatter for customizing error messages */\n errorFormatter?: ErrorFormatter;\n}\n\n/**\n * Skeleton row for table loading state\n */\nfunction PolicySkeletonRow() {\n return (\n <tr>\n <td className=\"px-3 py-2 border-b border-border\">\n <div className=\"flex items-center gap-2\">\n <Skeleton className=\"w-2 h-2 rounded-full\" />\n <Skeleton className=\"h-3 w-24\" />\n </div>\n </td>\n <td className=\"px-3 py-2 border-b border-border text-center w-24\">\n <Skeleton className=\"h-5 w-8 mx-auto rounded-full\" />\n </td>\n <td className=\"px-3 py-2 border-b border-border text-center w-24\">\n <Skeleton className=\"h-5 w-8 mx-auto rounded-full\" />\n </td>\n </tr>\n );\n}\n\n/**\n * Skeleton group for loading state\n */\nfunction PolicySkeletonGroup() {\n return (\n <div className=\"border border-input rounded-lg overflow-hidden\">\n <div className=\"w-full flex items-center gap-2.5 px-3 py-2 bg-muted\">\n <Skeleton className=\"h-3 w-3\" />\n <Skeleton className=\"h-3 flex-1 max-w-[200px]\" />\n <Skeleton className=\"h-5 w-8 rounded-full\" />\n </div>\n <div className=\"p-1.5\">\n <table className=\"w-full border-collapse text-sm\">\n <thead>\n <tr>\n <th className=\"text-left px-3 py-2 bg-muted text-muted-foreground font-medium border-b border-input text-xs whitespace-nowrap\">Kind</th>\n <th className=\"text-left px-3 py-2 bg-muted text-muted-foreground font-medium border-b border-input w-24 text-xs whitespace-nowrap\">Audit Rules</th>\n <th className=\"text-left px-3 py-2 bg-muted text-muted-foreground font-medium border-b border-input w-24 text-xs whitespace-nowrap\">Event Rules</th>\n <th className=\"text-left px-3 py-2 bg-muted text-muted-foreground font-medium border-b border-input w-16 text-xs whitespace-nowrap\"></th>\n </tr>\n </thead>\n <tbody>\n <PolicySkeletonRow />\n <PolicySkeletonRow />\n <PolicySkeletonRow />\n </tbody>\n </table>\n </div>\n </div>\n );\n}\n\n/**\n * PolicyList displays all ActivityPolicies with edit actions\n */\nexport function PolicyList({\n client,\n onViewPolicy,\n onEditPolicy,\n onCreatePolicy,\n groupByApiGroup = true,\n className = '',\n errorFormatter,\n}: PolicyListProps) {\n const policyList: UsePolicyListResult = usePolicyList({\n client,\n groupByApiGroup,\n });\n\n // Use onViewPolicy if provided, otherwise fall back to onEditPolicy for backwards compatibility\n const handlePolicyClick = onViewPolicy || onEditPolicy;\n\n const [expandedGroups, setExpandedGroups] = useState<Set<string>>(new Set());\n\n // Load policies on mount\n useEffect(() => {\n policyList.refresh();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Expand all groups by default when data loads\n useEffect(() => {\n if (policyList.groups.length > 0 && expandedGroups.size === 0) {\n setExpandedGroups(new Set(policyList.groups.map((g) => g.apiGroup)));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [policyList.groups]);\n\n // Toggle group expansion\n const toggleGroup = useCallback((apiGroup: string) => {\n setExpandedGroups((prev) => {\n const next = new Set(prev);\n if (next.has(apiGroup)) {\n next.delete(apiGroup);\n } else {\n next.add(apiGroup);\n }\n return next;\n });\n }, []);\n\n // Count rules for display\n const countRules = (policy: ActivityPolicy): { audit: number; event: number } => {\n return {\n audit: policy.spec.auditRules?.length || 0,\n event: policy.spec.eventRules?.length || 0,\n };\n };\n\n // Get policy status from conditions\n const getPolicyStatus = (policy: ActivityPolicy): {\n status: 'ready' | 'error' | 'pending' | 'unknown';\n message?: string;\n } => {\n const conditions = policy.status?.conditions;\n if (!conditions || conditions.length === 0) {\n return { status: 'unknown', message: 'Status not yet available' };\n }\n\n const readyCondition = conditions.find((c: Condition) => c.type === 'Ready');\n if (!readyCondition) {\n return { status: 'unknown', message: 'Status not yet available' };\n }\n\n if (readyCondition.status === 'True') {\n return { status: 'ready', message: readyCondition.message || 'All rules compiled successfully' };\n } else if (readyCondition.status === 'False') {\n return { status: 'error', message: readyCondition.message || readyCondition.reason || 'Rule compilation failed' };\n }\n\n return { status: 'pending', message: readyCondition.message || 'Status unknown' };\n };\n\n return (\n <Card className={`rounded-xl ${className}`}>\n {/* Header */}\n <CardHeader className=\"pb-1.5\">\n <div className=\"flex justify-between items-center\">\n <p className=\"text-sm text-muted-foreground m-0\">\n Turn cryptic audit events into activity timelines your team will actually enjoy reading\n </p>\n <div className=\"flex gap-1.5\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={policyList.refresh}\n disabled={policyList.isLoading}\n title=\"Refresh policy list\"\n className=\"h-7 px-2\"\n >\n {policyList.isLoading ? (\n <span className=\"w-3.5 h-3.5 border-2 border-border border-t-primary rounded-full animate-spin\" />\n ) : (\n '↻'\n )}\n </Button>\n {onCreatePolicy && (\n <Button\n size=\"sm\"\n onClick={onCreatePolicy}\n className=\"bg-[#BF9595] text-[#0C1D31] hover:bg-[#A88080] h-7 text-xs\"\n >\n + Create Policy\n </Button>\n )}\n </div>\n </div>\n <Separator className=\"mt-1.5\" />\n </CardHeader>\n\n <CardContent className=\"pt-3\">\n {/* Error Display */}\n <ApiErrorAlert error={policyList.error} onRetry={policyList.refresh} className=\"mb-3\" errorFormatter={errorFormatter} />\n\n {/* Loading State - Skeleton */}\n {policyList.isLoading && policyList.policies.length === 0 && (\n <div className=\"flex flex-col gap-2.5\">\n <PolicySkeletonGroup />\n <PolicySkeletonGroup />\n </div>\n )}\n\n {/* Empty State */}\n {!policyList.isLoading &&\n !policyList.error &&\n policyList.policies.length === 0 && (\n <div className=\"text-center py-8 px-6 text-muted-foreground\">\n <div className=\"text-4xl mb-3\">📋</div>\n <h3 className=\"m-0 mb-1.5 text-foreground\">No policies found</h3>\n <p className=\"m-0 mb-4 max-w-[400px] mx-auto\">\n Activity policies define how audit events and Kubernetes events are\n translated into human-readable activity summaries.\n </p>\n {onCreatePolicy && (\n <Button\n size=\"sm\"\n onClick={onCreatePolicy}\n className=\"bg-[#BF9595] text-[#0C1D31] hover:bg-[#A88080] h-7 text-xs\"\n >\n Create your first policy\n </Button>\n )}\n </div>\n )}\n\n {/* Policy Groups */}\n {policyList.groups.length > 0 && (\n <div className=\"flex flex-col gap-2.5\">\n {policyList.groups.map((group) => (\n <div key={group.apiGroup} className=\"border border-input rounded-lg overflow-hidden\">\n <button\n type=\"button\"\n className=\"w-full flex items-center gap-2.5 px-3 py-2 bg-muted border-none cursor-pointer text-left text-xs font-medium text-foreground transition-colors duration-200 hover:bg-accent\"\n onClick={() => toggleGroup(group.apiGroup)}\n >\n <span\n className={`text-xs text-muted-foreground transition-transform duration-200 ${\n expandedGroups.has(group.apiGroup) ? 'rotate-90' : ''\n }`}\n >\n ▶\n </span>\n <span className=\"flex-1 font-mono\">{group.apiGroup}</span>\n <Badge variant=\"secondary\" className=\"rounded-full\">\n {group.policies.length}\n </Badge>\n </button>\n\n {expandedGroups.has(group.apiGroup) && (\n <div className=\"p-1.5\">\n <table className=\"w-full border-collapse text-sm\">\n <thead>\n <tr>\n <th className=\"text-left px-3 py-2 bg-muted text-muted-foreground font-medium border-b border-input text-xs whitespace-nowrap\">Kind</th>\n <th className=\"text-left px-3 py-2 bg-muted text-muted-foreground font-medium border-b border-input w-24 text-xs whitespace-nowrap\">Audit Rules</th>\n <th className=\"text-left px-3 py-2 bg-muted text-muted-foreground font-medium border-b border-input w-24 text-xs whitespace-nowrap\">Event Rules</th>\n </tr>\n </thead>\n <tbody>\n {group.policies.map((policy) => {\n const rules = countRules(policy);\n const policyStatus = getPolicyStatus(policy);\n return (\n <tr\n key={policy.metadata?.name}\n className={`hover:bg-muted transition-colors ${handlePolicyClick ? 'cursor-pointer' : ''}`}\n onClick={() => handlePolicyClick?.(policy.metadata?.name || '')}\n >\n <td className=\"px-3 py-2 border-b border-border last:border-b-0\">\n <div className=\"flex items-center gap-2\">\n {policyStatus.status === 'ready' ? (\n <div\n className=\"w-2 h-2 rounded-full bg-green-500\"\n title={policyStatus.message}\n />\n ) : (\n <div title={policyStatus.message}>\n <AlertTriangle\n className={`w-4 h-4 ${\n policyStatus.status === 'error'\n ? 'text-red-500 dark:text-red-400'\n : policyStatus.status === 'pending'\n ? 'text-amber-600 dark:text-amber-400'\n : 'text-gray-400'\n }`}\n />\n </div>\n )}\n <span className=\"text-xs font-medium\">\n {policy.spec.resource.kind}\n </span>\n </div>\n </td>\n <td className=\"px-3 py-2 border-b border-border last:border-b-0 text-center w-24\">\n <Badge\n variant={rules.audit > 0 ? 'success' : 'secondary'}\n className={rules.audit === 0 ? 'bg-gray-100 text-gray-400 dark:bg-gray-800 dark:text-gray-500' : ''}\n >\n {rules.audit}\n </Badge>\n </td>\n <td className=\"px-3 py-2 border-b border-border last:border-b-0 text-center w-24\">\n <Badge\n variant={rules.event > 0 ? 'success' : 'secondary'}\n className={rules.event === 0 ? 'bg-gray-100 text-gray-400 dark:bg-gray-800 dark:text-gray-500' : ''}\n >\n {rules.event}\n </Badge>\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n )}\n </div>\n ))}\n </div>\n )}\n </CardContent>\n </Card>\n );\n}\n","import { useState, useCallback, useMemo, useRef } from 'react';\nimport type {\n ActivityPolicy,\n ActivityPolicySpec,\n ActivityPolicyRule,\n ActivityPolicyResource,\n} from '../types/policy';\nimport { ActivityApiClient } from '../api/client';\n\n/**\n * Options for the usePolicyEditor hook\n */\nexport interface UsePolicyEditorOptions {\n /** API client instance */\n client: ActivityApiClient;\n /** Initial policy name for editing (undefined for new policy) */\n initialPolicyName?: string;\n}\n\n/**\n * Result returned by the usePolicyEditor hook\n */\nexport interface UsePolicyEditorResult {\n /** The original policy being edited (null for new policy) */\n policy: ActivityPolicy | null;\n /** Current editable spec state */\n spec: ActivityPolicySpec;\n /** Policy name (editable for new policies) */\n name: string;\n /** Whether there are unsaved changes */\n isDirty: boolean;\n /** Whether the editor is loading */\n isLoading: boolean;\n /** Whether a save is in progress */\n isSaving: boolean;\n /** Error if any occurred */\n error: Error | null;\n /** Whether this is a new policy (not yet created) */\n isNew: boolean;\n /** Update the policy name (only for new policies) */\n setName: (name: string) => void;\n /** Update the entire spec */\n setSpec: (spec: ActivityPolicySpec) => void;\n /** Update the resource section */\n setResource: (resource: ActivityPolicyResource) => void;\n /** Update audit rules */\n setAuditRules: (rules: ActivityPolicyRule[]) => void;\n /** Update event rules */\n setEventRules: (rules: ActivityPolicyRule[]) => void;\n /** Add a new audit rule */\n addAuditRule: () => void;\n /** Add a new event rule */\n addEventRule: () => void;\n /** Update a specific audit rule */\n updateAuditRule: (index: number, rule: ActivityPolicyRule) => void;\n /** Update a specific event rule */\n updateEventRule: (index: number, rule: ActivityPolicyRule) => void;\n /** Remove an audit rule */\n removeAuditRule: (index: number) => void;\n /** Remove an event rule */\n removeEventRule: (index: number) => void;\n /** Update a rule by name */\n updateRuleByName: (ruleType: 'audit' | 'event', name: string, updates: Partial<ActivityPolicyRule>) => void;\n /** Remove a rule by name */\n removeRuleByName: (ruleType: 'audit' | 'event', name: string) => void;\n /** Save the policy (create or update) */\n save: (dryRun?: boolean) => Promise<ActivityPolicy>;\n /** Load an existing policy by name */\n load: (name: string) => Promise<void>;\n /** Reset to last saved state (or initial state for new policy) */\n reset: () => void;\n /** Clear all state and start with a new policy */\n clear: () => void;\n}\n\n/**\n * Create an empty policy spec for new policies\n */\nfunction createEmptySpec(): ActivityPolicySpec {\n return {\n resource: {\n apiGroup: '',\n kind: '',\n },\n auditRules: [],\n eventRules: [],\n };\n}\n\n/**\n * Generate a unique rule name\n */\nfunction generateRuleName(ruleType: 'audit' | 'event', counter: number): string {\n return `${ruleType}-rule-${counter}`;\n}\n\n/**\n * Create an empty rule with a generated name\n */\nfunction createEmptyRule(ruleType: 'audit' | 'event', counter: number): ActivityPolicyRule {\n return {\n name: generateRuleName(ruleType, counter),\n match: '',\n summary: '',\n };\n}\n\n/**\n * Ensure all rules have names, generating them if needed\n */\nfunction ensureRuleNames(rules: ActivityPolicyRule[], ruleType: 'audit' | 'event'): ActivityPolicyRule[] {\n return rules.map((rule, index) => {\n if (!rule.name) {\n return { ...rule, name: generateRuleName(ruleType, index + 1) };\n }\n return rule;\n });\n}\n\n/**\n * Deep compare two specs for equality\n */\nfunction specsEqual(a: ActivityPolicySpec, b: ActivityPolicySpec): boolean {\n return JSON.stringify(a) === JSON.stringify(b);\n}\n\n/**\n * React hook for editing an ActivityPolicy\n */\nexport function usePolicyEditor({\n client,\n initialPolicyName,\n}: UsePolicyEditorOptions): UsePolicyEditorResult {\n // Original policy (null for new policies)\n const [policy, setPolicy] = useState<ActivityPolicy | null>(null);\n // Current editable state\n const [name, setName] = useState(initialPolicyName || '');\n const [spec, setSpec] = useState<ActivityPolicySpec>(createEmptySpec());\n // Saved spec for dirty tracking\n const [savedSpec, setSavedSpec] = useState<ActivityPolicySpec>(createEmptySpec());\n const [savedName, setSavedName] = useState(initialPolicyName || '');\n // Loading states\n const [isLoading, setIsLoading] = useState(false);\n const [isSaving, setIsSaving] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n // Rule name counters (persisted across the session)\n const auditRuleCounter = useRef(1);\n const eventRuleCounter = useRef(1);\n\n // Computed states\n const isNew = policy === null;\n const isDirty = useMemo(() => {\n if (isNew && name !== savedName) return true;\n return !specsEqual(spec, savedSpec);\n }, [spec, savedSpec, name, savedName, isNew]);\n\n // Resource setters\n const setResource = useCallback((resource: ActivityPolicyResource) => {\n setSpec((prev) => ({ ...prev, resource }));\n }, []);\n\n // Rule setters\n const setAuditRules = useCallback((rules: ActivityPolicyRule[]) => {\n setSpec((prev) => ({ ...prev, auditRules: rules }));\n }, []);\n\n const setEventRules = useCallback((rules: ActivityPolicyRule[]) => {\n setSpec((prev) => ({ ...prev, eventRules: rules }));\n }, []);\n\n // Add rules\n const addAuditRule = useCallback(() => {\n setSpec((prev) => ({\n ...prev,\n auditRules: [...(prev.auditRules || []), createEmptyRule('audit', auditRuleCounter.current++)],\n }));\n }, []);\n\n const addEventRule = useCallback(() => {\n setSpec((prev) => ({\n ...prev,\n eventRules: [...(prev.eventRules || []), createEmptyRule('event', eventRuleCounter.current++)],\n }));\n }, []);\n\n // Update specific rules\n const updateAuditRule = useCallback((index: number, rule: ActivityPolicyRule) => {\n setSpec((prev) => {\n const rules = [...(prev.auditRules || [])];\n rules[index] = rule;\n return { ...prev, auditRules: rules };\n });\n }, []);\n\n const updateEventRule = useCallback((index: number, rule: ActivityPolicyRule) => {\n setSpec((prev) => {\n const rules = [...(prev.eventRules || [])];\n rules[index] = rule;\n return { ...prev, eventRules: rules };\n });\n }, []);\n\n // Remove rules\n const removeAuditRule = useCallback((index: number) => {\n setSpec((prev) => ({\n ...prev,\n auditRules: (prev.auditRules || []).filter((_, i) => i !== index),\n }));\n }, []);\n\n const removeEventRule = useCallback((index: number) => {\n setSpec((prev) => ({\n ...prev,\n eventRules: (prev.eventRules || []).filter((_, i) => i !== index),\n }));\n }, []);\n\n // Update rule by name\n const updateRuleByName = useCallback(\n (ruleType: 'audit' | 'event', ruleName: string, updates: Partial<ActivityPolicyRule>) => {\n setSpec((prev) => {\n const rulesKey = ruleType === 'audit' ? 'auditRules' : 'eventRules';\n const rules = [...(prev[rulesKey] || [])];\n const index = rules.findIndex((r) => r.name === ruleName);\n\n if (index === -1) {\n console.warn(`Rule with name \"${ruleName}\" not found in ${ruleType} rules`);\n return prev;\n }\n\n rules[index] = { ...rules[index], ...updates };\n return { ...prev, [rulesKey]: rules };\n });\n },\n []\n );\n\n // Remove rule by name\n const removeRuleByName = useCallback(\n (ruleType: 'audit' | 'event', ruleName: string) => {\n setSpec((prev) => {\n const rulesKey = ruleType === 'audit' ? 'auditRules' : 'eventRules';\n const rules = (prev[rulesKey] || []).filter((r) => r.name !== ruleName);\n return { ...prev, [rulesKey]: rules };\n });\n },\n []\n );\n\n // Load an existing policy\n const load = useCallback(\n async (policyName: string) => {\n setIsLoading(true);\n setError(null);\n\n try {\n const result = await client.getPolicy(policyName);\n\n // Ensure all rules have names (backward compatibility)\n const specWithNames: ActivityPolicySpec = {\n ...result.spec,\n auditRules: result.spec.auditRules\n ? ensureRuleNames(result.spec.auditRules, 'audit')\n : [],\n eventRules: result.spec.eventRules\n ? ensureRuleNames(result.spec.eventRules, 'event')\n : [],\n };\n\n // Update counters to avoid conflicts with loaded rules\n const maxAuditIndex = (specWithNames.auditRules || []).reduce((max, rule) => {\n const match = rule.name.match(/^audit-rule-(\\d+)$/);\n return match ? Math.max(max, parseInt(match[1], 10)) : max;\n }, 0);\n const maxEventIndex = (specWithNames.eventRules || []).reduce((max, rule) => {\n const match = rule.name.match(/^event-rule-(\\d+)$/);\n return match ? Math.max(max, parseInt(match[1], 10)) : max;\n }, 0);\n\n auditRuleCounter.current = maxAuditIndex + 1;\n eventRuleCounter.current = maxEventIndex + 1;\n\n setPolicy(result);\n setName(result.metadata?.name || policyName);\n setSpec(specWithNames);\n setSavedSpec(specWithNames);\n setSavedName(result.metadata?.name || policyName);\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)));\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [client]\n );\n\n // Save the policy (create or update)\n const save = useCallback(\n async (dryRun?: boolean): Promise<ActivityPolicy> => {\n if (!name.trim()) {\n throw new Error('Policy name is required');\n }\n\n setIsSaving(true);\n setError(null);\n\n try {\n let result: ActivityPolicy;\n\n if (isNew) {\n result = await client.createPolicy(name, spec, dryRun);\n } else {\n result = await client.updatePolicy(\n name,\n spec,\n dryRun,\n policy?.metadata?.resourceVersion\n );\n }\n\n // Only update saved state if not a dry run\n if (!dryRun) {\n setPolicy(result);\n setSavedSpec(result.spec);\n setSavedName(result.metadata?.name || name);\n }\n\n return result;\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n setError(error);\n throw error;\n } finally {\n setIsSaving(false);\n }\n },\n [client, name, spec, isNew, policy]\n );\n\n // Reset to last saved state\n const reset = useCallback(() => {\n setSpec(savedSpec);\n setName(savedName);\n setError(null);\n }, [savedSpec, savedName]);\n\n // Clear all state and start fresh\n const clear = useCallback(() => {\n setPolicy(null);\n setName('');\n setSpec(createEmptySpec());\n setSavedSpec(createEmptySpec());\n setSavedName('');\n setError(null);\n // Reset counters when clearing\n auditRuleCounter.current = 1;\n eventRuleCounter.current = 1;\n }, []);\n\n return {\n policy,\n spec,\n name,\n isDirty,\n isLoading,\n isSaving,\n error,\n isNew,\n setName,\n setSpec,\n setResource,\n setAuditRules,\n setEventRules,\n addAuditRule,\n addEventRule,\n updateAuditRule,\n updateEventRule,\n removeAuditRule,\n removeEventRule,\n updateRuleByName,\n removeRuleByName,\n save,\n load,\n reset,\n clear,\n };\n}\n","import * as React from 'react';\nimport * as SelectPrimitive from '@radix-ui/react-select';\nimport { Check, ChevronDown, ChevronUp } from 'lucide-react';\n\nimport { cn } from '../../lib/utils';\n\nconst Select = SelectPrimitive.Root;\n\nconst SelectGroup = SelectPrimitive.Group;\n\nconst SelectValue = SelectPrimitive.Value;\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n 'flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1',\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"h-4 w-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n));\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName;\n\nconst SelectScrollUpButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n className={cn(\n 'flex cursor-default items-center justify-center py-1',\n className\n )}\n {...props}\n >\n <ChevronUp className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollUpButton>\n));\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n className={cn(\n 'flex cursor-default items-center justify-center py-1',\n className\n )}\n {...props}\n >\n <ChevronDown className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollDownButton>\n));\nSelectScrollDownButton.displayName =\n SelectPrimitive.ScrollDownButton.displayName;\n\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = 'popper', ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n className={cn(\n 'relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-white dark:bg-slate-900 text-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n position === 'popper' &&\n 'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1',\n className\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n 'p-1',\n position === 'popper' &&\n 'h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]'\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n));\nSelectContent.displayName = SelectPrimitive.Content.displayName;\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn('py-1.5 pl-8 pr-2 text-sm font-semibold', className)}\n {...props}\n />\n));\nSelectLabel.displayName = SelectPrimitive.Label.displayName;\n\nconst SelectItem = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n 'relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n));\nSelectItem.displayName = SelectPrimitive.Item.displayName;\n\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn('-mx-1 my-1 h-px bg-muted', className)}\n {...props}\n />\n));\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName;\n\nexport {\n Select,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n};\n","import { useState, useEffect, useCallback } from 'react';\nimport type { ActivityPolicyResource } from '../types/policy';\nimport type { ActivityApiClient } from '../api/client';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from './ui/select';\nimport { Input } from './ui/input';\nimport { Label } from './ui/label';\nimport { Button } from './ui/button';\n\nexport interface PolicyResourceFormProps {\n /** Current resource configuration */\n resource: ActivityPolicyResource;\n /** Callback when resource changes */\n onChange: (resource: ActivityPolicyResource) => void;\n /** Optional API client for fetching discovered resources */\n client?: ActivityApiClient;\n /** Whether this is editing an existing policy (makes API group and kind read-only) */\n isEditMode?: boolean;\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * Convert plural resource name to Kind (PascalCase)\n * e.g., \"httpproxies\" -> \"HTTPProxy\", \"gateways\" -> \"Gateway\"\n */\nfunction resourceToKind(resource: string): string {\n if (!resource) return '';\n // Remove trailing 's' or 'ies'\n let singular = resource;\n if (singular.endsWith('ies')) {\n singular = singular.slice(0, -3) + 'y';\n } else if (singular.endsWith('es')) {\n singular = singular.slice(0, -2);\n } else if (singular.endsWith('s')) {\n singular = singular.slice(0, -1);\n }\n // Convert to PascalCase\n return singular.charAt(0).toUpperCase() + singular.slice(1);\n}\n\nconst CUSTOM_VALUE = '__custom__';\n\n/**\n * PolicyResourceForm provides the form for editing policy resource configuration\n */\nexport function PolicyResourceForm({\n resource,\n onChange,\n client,\n isEditMode = false,\n className = '',\n}: PolicyResourceFormProps) {\n // State for discovered API groups and resources\n const [apiGroups, setApiGroups] = useState<string[]>([]);\n const [resources, setResources] = useState<{ name: string; kind: string }[]>([]);\n const [isLoadingGroups, setIsLoadingGroups] = useState(false);\n const [isLoadingResources, setIsLoadingResources] = useState(false);\n\n // State for custom input mode\n const [customApiGroup, setCustomApiGroup] = useState(false);\n const [customKind, setCustomKind] = useState(false);\n\n\n // Load API groups that have audit events\n const loadApiGroups = useCallback(async () => {\n if (!client) return;\n setIsLoadingGroups(true);\n try {\n const groups = await client.getAuditedAPIGroups();\n setApiGroups(groups.filter((g) => g)); // Filter out empty strings\n } catch (err) {\n console.error('Failed to load API groups:', err);\n } finally {\n setIsLoadingGroups(false);\n }\n }, [client]);\n\n // Load resources for the selected API group\n const loadResources = useCallback(async () => {\n if (!client || !resource.apiGroup) {\n setResources([]);\n return;\n }\n setIsLoadingResources(true);\n try {\n // Get audited resource names from audit logs\n const auditedResources = await client.getAuditedResources(resource.apiGroup);\n\n // Get the actual Kind from Kubernetes API discovery\n let resourceMap = new Map<string, string>();\n try {\n const discoveryResult = await client.discoverAPIResources(resource.apiGroup);\n resourceMap = new Map(\n discoveryResult.resources?.map((r) => [r.name, r.kind]) || []\n );\n } catch {\n // API discovery not available - will use derived Kind names\n }\n\n // Combine audited resources with Kind names (from discovery or derived)\n const resourcesWithKind = auditedResources\n .filter((r) => r)\n .map((r) => ({\n name: r,\n kind: resourceMap.get(r) || resourceToKind(r),\n }));\n\n setResources(resourcesWithKind);\n } catch (err) {\n console.error('Failed to load resources:', err);\n } finally {\n setIsLoadingResources(false);\n }\n }, [client, resource.apiGroup]);\n\n // Load API groups on mount if client is available\n useEffect(() => {\n if (client) {\n loadApiGroups();\n }\n }, [client, loadApiGroups]);\n\n // Load resources when API group changes\n useEffect(() => {\n if (client && resource.apiGroup) {\n loadResources();\n }\n }, [client, resource.apiGroup, loadResources]);\n\n // Check if current value is in the list (for determining if custom mode is needed)\n useEffect(() => {\n if (resource.apiGroup && apiGroups.length > 0 && !apiGroups.includes(resource.apiGroup)) {\n setCustomApiGroup(true);\n }\n }, [resource.apiGroup, apiGroups]);\n\n useEffect(() => {\n if (resource.kind && resources.length > 0) {\n // Check if the kind matches any resource\n const kindInList = resources.some((r) => r.kind === resource.kind);\n if (!kindInList) {\n setCustomKind(true);\n }\n }\n }, [resource.kind, resources]);\n\n const handleApiGroupSelectChange = (value: string) => {\n if (value === CUSTOM_VALUE) {\n setCustomApiGroup(true);\n } else {\n setCustomApiGroup(false);\n onChange({ ...resource, apiGroup: value, kind: '' }); // Clear kind when group changes\n }\n };\n\n const handleApiGroupInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange({ ...resource, apiGroup: e.target.value, kind: '' }); // Clear kind when group changes\n };\n\n const handleKindSelectChange = (value: string) => {\n if (value === CUSTOM_VALUE) {\n setCustomKind(true);\n } else {\n setCustomKind(false);\n // Find the resource and use its actual Kind from API discovery\n const selectedResource = resources.find((r) => r.name === value);\n const kind = selectedResource?.kind || resourceToKind(value);\n onChange({ ...resource, kind });\n }\n };\n\n const handleKindInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange({ ...resource, kind: e.target.value });\n };\n\n const handleBackToSelect = (field: 'apiGroup' | 'kind') => {\n if (field === 'apiGroup') {\n setCustomApiGroup(false);\n onChange({ ...resource, apiGroup: '', kind: '' });\n } else {\n setCustomKind(false);\n onChange({ ...resource, kind: '' });\n }\n };\n\n // Check if current apiGroup is in the list\n const apiGroupInList = apiGroups.includes(resource.apiGroup);\n\n // Find matching resource for current kind\n const currentResourceName = resources.find((r) => r.kind === resource.kind)?.name || '';\n\n // Hide entire section in edit mode since these fields are already shown in the header\n if (isEditMode) {\n return null;\n }\n\n return (\n <div className={`rounded-lg bg-muted p-6 ${className}`}>\n <h4 className=\"mb-2 text-base font-medium text-foreground\">Resource Target</h4>\n <p className=\"mb-6 text-sm text-muted-foreground\">\n Define which API group and kind this policy applies to.\n {client && (\n <span className=\"italic text-muted-foreground/70\">\n {' '}Options based on audit events in your cluster.\n </span>\n )}\n </p>\n\n {/* API Group */}\n <div className=\"mb-5 last:mb-0\">\n <Label htmlFor=\"resource-apiGroup\" className=\"mb-1.5 block text-foreground/80\">\n API Group <span className=\"text-destructive\">*</span>\n </Label>\n {client && !customApiGroup ? (\n <div className=\"relative\">\n <Select\n value={apiGroupInList ? resource.apiGroup : ''}\n onValueChange={handleApiGroupSelectChange}\n disabled={isLoadingGroups}\n >\n <SelectTrigger className=\"h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm transition-all duration-200 focus:border-[#BF9595] focus:outline-none focus:ring-[3px] focus:ring-[#BF9595]/10 disabled:cursor-not-allowed disabled:opacity-50\">\n <SelectValue placeholder={isLoadingGroups ? \"Loading...\" : \"Select an API Group...\"} />\n </SelectTrigger>\n <SelectContent>\n {apiGroups.length === 0 && !isLoadingGroups && (\n <SelectItem value={CUSTOM_VALUE} disabled className=\"italic text-muted-foreground\">\n No API groups found\n </SelectItem>\n )}\n {apiGroups.map((group) => (\n <SelectItem key={group} value={group}>\n {group}\n </SelectItem>\n ))}\n <SelectItem value={CUSTOM_VALUE} className=\"italic text-muted-foreground\">\n Enter custom value...\n </SelectItem>\n </SelectContent>\n </Select>\n </div>\n ) : (\n <div className=\"flex gap-2\">\n <Input\n id=\"resource-apiGroup\"\n type=\"text\"\n className=\"flex-1\"\n value={resource.apiGroup}\n onChange={handleApiGroupInputChange}\n placeholder=\"e.g., networking.datumapis.com\"\n />\n {client && (\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleBackToSelect('apiGroup')}\n title=\"Back to select\"\n >\n Back to list\n </Button>\n )}\n </div>\n )}\n </div>\n\n {/* Kind */}\n <div className=\"mb-5 last:mb-0\">\n <Label htmlFor=\"resource-kind\" className=\"mb-1.5 block text-foreground/80\">\n Kind <span className=\"text-destructive\">*</span>\n </Label>\n {client && !customKind ? (\n <div className=\"relative\">\n <Select\n value={currentResourceName}\n onValueChange={handleKindSelectChange}\n disabled={isLoadingResources || !resource.apiGroup}\n >\n <SelectTrigger className=\"h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm transition-all duration-200 focus:border-[#BF9595] focus:outline-none focus:ring-[#BF9595]/10 disabled:cursor-not-allowed disabled:opacity-50\">\n <SelectValue\n placeholder={\n !resource.apiGroup\n ? 'Select API Group first...'\n : isLoadingResources\n ? 'Loading...'\n : 'Select a Kind...'\n }\n />\n </SelectTrigger>\n <SelectContent>\n {resources.length === 0 && resource.apiGroup && !isLoadingResources && (\n <SelectItem value={CUSTOM_VALUE} disabled className=\"italic text-muted-foreground\">\n No resources found\n </SelectItem>\n )}\n {resources.map((res) => (\n <SelectItem key={res.name} value={res.name}>\n {res.kind}\n </SelectItem>\n ))}\n <SelectItem value={CUSTOM_VALUE} className=\"italic text-muted-foreground\">\n Enter custom value...\n </SelectItem>\n </SelectContent>\n </Select>\n </div>\n ) : (\n <div className=\"flex gap-2\">\n <Input\n id=\"resource-kind\"\n type=\"text\"\n className=\"flex-1\"\n value={resource.kind}\n onChange={handleKindInputChange}\n placeholder={resource.apiGroup ? 'e.g., HTTPProxy' : 'Select API Group first'}\n disabled={!resource.apiGroup}\n />\n {client && (\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleBackToSelect('kind')}\n title=\"Back to select\"\n >\n Back to list\n </Button>\n )}\n </div>\n )}\n <div className=\"mt-1.5 text-xs text-muted-foreground\">\n The Kubernetes resource kind (e.g., HTTPProxy, Gateway, Deployment)\n </div>\n </div>\n </div>\n );\n}\n","import type { ActivityPolicyRule } from '../types/policy';\nimport { Button } from './ui/button';\nimport { Edit, Trash2, ChevronUp, ChevronDown } from 'lucide-react';\n\nexport interface PolicyRuleListItemProps {\n /** The rule being displayed */\n rule: ActivityPolicyRule;\n /** Rule type (audit or event) for context */\n ruleType: 'audit' | 'event';\n /** Rule index for display */\n index: number;\n /** Callback when edit button is clicked */\n onEdit: () => void;\n /** Callback when delete button is clicked */\n onDelete: () => void;\n /** Callback when move up button is clicked */\n onMoveUp?: () => void;\n /** Callback when move down button is clicked */\n onMoveDown?: () => void;\n /** Whether this rule can be moved up */\n canMoveUp: boolean;\n /** Whether this rule can be moved down */\n canMoveDown: boolean;\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * PolicyRuleListItem displays a single rule in a compact list format\n * with inline edit, delete, and reordering controls\n */\nexport function PolicyRuleListItem({\n rule,\n ruleType,\n index,\n onEdit,\n onDelete,\n onMoveUp,\n onMoveDown,\n canMoveUp,\n canMoveDown,\n className = '',\n}: PolicyRuleListItemProps) {\n // Truncate match expression for display (max ~60 chars)\n const truncatedMatch = rule.match.length > 60\n ? `${rule.match.substring(0, 57)}...`\n : rule.match;\n\n return (\n <div\n className={`\n flex items-center gap-2 p-2 rounded-md border transition-all duration-200\n border-border bg-background hover:bg-muted/50\n ${className}\n `}\n >\n {/* Rule content */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2 mb-0.5\">\n <span className=\"font-medium text-xs text-foreground truncate\">\n {rule.name || `${ruleType === 'audit' ? 'Audit' : 'Event'} Rule #${index + 1}`}\n </span>\n </div>\n\n {rule.description && (\n <div className=\"text-[11px] text-muted-foreground mb-0.5 truncate\">\n {rule.description}\n </div>\n )}\n\n <div className=\"text-[11px] font-mono text-muted-foreground truncate\" title={rule.match}>\n {truncatedMatch}\n </div>\n </div>\n\n {/* Action buttons */}\n <div className=\"flex items-center gap-1 shrink-0\">\n {/* Move up/down buttons */}\n <div className=\"flex flex-col gap-0.5\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-5 w-5 p-0\"\n onClick={onMoveUp}\n disabled={!canMoveUp}\n title=\"Move up\"\n aria-label=\"Move rule up\"\n >\n <ChevronUp className=\"h-3.5 w-3.5\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-5 w-5 p-0\"\n onClick={onMoveDown}\n disabled={!canMoveDown}\n title=\"Move down\"\n aria-label=\"Move rule down\"\n >\n <ChevronDown className=\"h-3.5 w-3.5\" />\n </Button>\n </div>\n\n {/* Edit button */}\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-6 w-6 text-muted-foreground hover:text-foreground hover:bg-muted\"\n onClick={onEdit}\n title=\"Edit rule\"\n aria-label=\"Edit rule\"\n >\n <Edit className=\"h-3.5 w-3.5\" />\n </Button>\n\n {/* Delete button */}\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-6 w-6 text-muted-foreground hover:text-red-600 hover:bg-red-50 dark:hover:bg-red-950/50\"\n onClick={onDelete}\n title=\"Delete rule\"\n aria-label=\"Delete rule\"\n >\n <Trash2 className=\"h-3.5 w-3.5\" />\n </Button>\n </div>\n </div>\n );\n}\n","import * as React from 'react';\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { X } from 'lucide-react';\nimport { cn } from '../../lib/utils';\n\nconst Sheet = DialogPrimitive.Root;\n\nconst SheetTrigger = DialogPrimitive.Trigger;\n\nconst SheetClose = DialogPrimitive.Close;\n\nconst SheetPortal = DialogPrimitive.Portal;\n\nconst SheetOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n className={cn(\n 'fixed inset-0 z-50 bg-black/40 backdrop-blur-[2px] data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n className\n )}\n {...props}\n ref={ref}\n />\n));\nSheetOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\ninterface SheetContentProps\n extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> {\n side?: 'top' | 'bottom' | 'left' | 'right';\n}\n\nconst SheetContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n SheetContentProps\n>(({ side = 'right', className, children, ...props }, ref) => (\n <SheetPortal>\n <SheetOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n 'fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-300',\n side === 'top' &&\n 'inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top',\n side === 'bottom' &&\n 'inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom',\n side === 'left' &&\n 'inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-xl',\n side === 'right' &&\n 'inset-y-0 right-0 h-full w-full border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-2xl',\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </SheetPortal>\n));\nSheetContent.displayName = DialogPrimitive.Content.displayName;\n\nconst SheetHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n 'flex flex-col space-y-2 text-center sm:text-left',\n className\n )}\n {...props}\n />\n);\nSheetHeader.displayName = 'SheetHeader';\n\nconst SheetFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n 'flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2',\n className\n )}\n {...props}\n />\n);\nSheetFooter.displayName = 'SheetFooter';\n\nconst SheetTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn('text-lg font-semibold text-foreground', className)}\n {...props}\n />\n));\nSheetTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst SheetDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn('text-sm text-muted-foreground', className)}\n {...props}\n />\n));\nSheetDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Sheet,\n SheetPortal,\n SheetOverlay,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n};\n","import type { PolicyPreviewStatus, PreviewActivity, PolicyPreviewInputResult, PolicyPreviewInput } from '../types/policy';\nimport type { ResourceRef, Activity } from '../types/activity';\nimport type { K8sEvent } from '../types/k8s-event';\nimport { ActivityFeedSummary } from './ActivityFeedSummary';\nimport { ActivityFeedItem } from './ActivityFeedItem';\nimport { AuditLogFeedItem } from './AuditLogFeedItem';\nimport { EventFeedItem } from './EventFeedItem';\nimport { cn } from '../lib/utils';\nimport { Card, CardContent } from './ui/card';\nimport { Badge } from './ui/badge';\nimport { Alert, AlertDescription } from './ui/alert';\nimport { AlertCircle, CheckCircle, XCircle } from 'lucide-react';\n\nexport interface PolicyPreviewResultProps {\n /** Preview result status */\n result: PolicyPreviewStatus;\n /** Input data used for preview */\n inputs?: PolicyPreviewInput[];\n /** Handler for resource link clicks */\n onResourceClick?: (resource: ResourceRef) => void;\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * Get summary statistics from results\n */\nfunction getResultStats(results: PolicyPreviewInputResult[] | undefined): {\n total: number;\n matched: number;\n errors: number;\n} {\n if (!results || results.length === 0) {\n return { total: 0, matched: 0, errors: 0 };\n }\n return {\n total: results.length,\n matched: results.filter((r) => r.matched).length,\n errors: results.filter((r) => !!r.error).length,\n };\n}\n\n/**\n * Convert PreviewActivity to Activity for ActivityFeedItem\n * PreviewActivity and Activity are similar but have slightly different actor types\n */\nfunction previewActivityToActivity(preview: PreviewActivity): Activity {\n return {\n apiVersion: 'activity.miloapis.com/v1alpha1',\n kind: 'Activity',\n metadata: preview.metadata || {},\n spec: {\n summary: preview.spec.summary,\n changeSource: preview.spec.changeSource as 'human' | 'system',\n actor: {\n type: preview.spec.actor.type as 'user' | 'machine account' | 'controller',\n name: preview.spec.actor.name,\n uid: preview.spec.actor.uid || '',\n email: preview.spec.actor.email,\n },\n resource: {\n apiGroup: preview.spec.resource.apiGroup || '',\n apiVersion: preview.spec.resource.apiVersion,\n kind: preview.spec.resource.kind || '',\n name: preview.spec.resource.name || '',\n namespace: preview.spec.resource.namespace,\n uid: preview.spec.resource.uid,\n },\n links: preview.spec.links,\n origin: {\n type: preview.spec.origin.type as 'audit' | 'event',\n id: preview.spec.origin.id,\n },\n },\n };\n}\n\n/**\n * Convert KubernetesEvent (from policy.ts) to K8sEvent (from k8s-event.ts)\n * These types are very similar but defined separately in different files\n */\nfunction policyEventToK8sEvent(policyEvent: PolicyPreviewInput['event']): K8sEvent {\n if (!policyEvent) {\n // Return a minimal K8sEvent if no event provided\n return {\n apiVersion: 'events.k8s.io/v1',\n kind: 'Event',\n metadata: {},\n regarding: {},\n };\n }\n\n return {\n apiVersion: 'events.k8s.io/v1',\n kind: 'Event',\n metadata: policyEvent.metadata || {},\n regarding: policyEvent.regarding || {},\n related: policyEvent.regarding,\n reason: policyEvent.reason,\n note: policyEvent.note,\n message: policyEvent.message,\n type: policyEvent.type as K8sEvent['type'],\n eventTime: policyEvent.eventTime,\n action: undefined,\n reportingController: policyEvent.reportingController,\n reportingInstance: policyEvent.reportingInstance,\n series: policyEvent.series,\n involvedObject: policyEvent.involvedObject,\n source: policyEvent.source,\n count: policyEvent.count,\n firstTimestamp: policyEvent.firstTimestamp,\n lastTimestamp: policyEvent.lastTimestamp,\n };\n}\n\n/**\n * PolicyPreviewResult displays the results of a policy preview execution\n */\nexport function PolicyPreviewResult({\n result,\n inputs = [],\n onResourceClick,\n className = '',\n}: PolicyPreviewResultProps) {\n const hasError = !!result.error;\n const activities = result.activities || [];\n const results = result.results || [];\n const stats = getResultStats(results);\n\n // Handle legacy single-input response format\n const isLegacyFormat = !results.length && (result.matched !== undefined || result.generatedSummary);\n if (isLegacyFormat) {\n return (\n <Card className={className}>\n <CardContent className=\"pt-6\">\n {/* Legacy Match Status Badge */}\n <div className=\"flex items-center gap-3 mb-4\">\n {hasError ? (\n <Badge variant=\"destructive\" className=\"gap-1\">\n <XCircle className=\"h-3 w-3\" />\n Error\n </Badge>\n ) : result.matched ? (\n <Badge variant=\"success\" className=\"gap-1\">\n <CheckCircle className=\"h-3 w-3\" />\n Matched\n </Badge>\n ) : (\n <Badge variant=\"secondary\" className=\"gap-1\">\n <XCircle className=\"h-3 w-3\" />\n No Match\n </Badge>\n )}\n\n {result.matched && !hasError && result.matchedRuleIndex !== undefined && (\n <span className=\"text-sm text-muted-foreground\">\n {result.matchedRuleType === 'audit' ? 'Audit' : 'Event'} Rule #{result.matchedRuleIndex + 1}\n </span>\n )}\n </div>\n\n {hasError && (\n <Alert variant=\"destructive\" className=\"mb-4\">\n <AlertCircle className=\"h-4 w-4\" />\n <AlertDescription>\n <pre className=\"text-xs font-mono whitespace-pre-wrap\">{result.error}</pre>\n </AlertDescription>\n </Alert>\n )}\n\n {result.matched && result.generatedSummary && !hasError && (\n <div className=\"space-y-2\">\n <p className=\"text-sm font-medium text-muted-foreground\">Generated Summary:</p>\n <div className=\"p-3 rounded-md bg-muted\">\n <ActivityFeedSummary\n summary={result.generatedSummary}\n links={result.generatedLinks}\n onResourceClick={onResourceClick}\n />\n </div>\n </div>\n )}\n\n {!result.matched && !hasError && (\n <p className=\"text-sm text-muted-foreground\">\n No rules matched the provided input. Check your match expressions.\n </p>\n )}\n </CardContent>\n </Card>\n );\n }\n\n // New multi-input format\n return (\n <div className={cn('space-y-3', className)}>\n {/* General Error */}\n {hasError && (\n <Alert variant=\"destructive\">\n <AlertCircle className=\"h-4 w-4\" />\n <AlertDescription>\n <pre className=\"text-xs font-mono whitespace-pre-wrap\">{result.error}</pre>\n </AlertDescription>\n </Alert>\n )}\n\n {/* Activity Stream - using ActivityFeedItem for consistency */}\n {activities.length > 0 && (\n <div>\n <div className=\"flex items-center justify-between mb-3\">\n <h3 className=\"text-sm font-medium text-foreground\">Generated Activity Stream</h3>\n <Badge variant=\"outline\">{activities.length} activities</Badge>\n </div>\n <div className=\"space-y-0\">\n {activities.map((activity, index) => (\n <ActivityFeedItem\n key={activity.metadata?.name || index}\n activity={previewActivityToActivity(activity)}\n onResourceClick={onResourceClick}\n compact={true}\n />\n ))}\n </div>\n </div>\n )}\n\n {/* Per-Input Results (collapsed by default) */}\n {results.length > 0 && results.some((r) => !r.matched || r.error) && (\n <details className=\"group\">\n <summary className=\"flex items-center gap-2 cursor-pointer text-sm text-muted-foreground hover:text-foreground transition-colors\">\n <span className=\"group-open:rotate-90 transition-transform\">\n ▶\n </span>\n {stats.total - stats.matched} inputs did not match\n {stats.errors > 0 && ` (${stats.errors} with errors)`}\n </summary>\n <Card className=\"mt-2\">\n <CardContent className=\"p-0\">\n <div className=\"divide-y divide-border\">\n {results\n .filter((r) => !r.matched || r.error)\n .map((inputResult) => {\n const input = inputs[inputResult.inputIndex];\n\n return (\n <div\n key={inputResult.inputIndex}\n className={cn(\n 'p-3 flex flex-col gap-2',\n inputResult.error && 'bg-destructive/10'\n )}\n >\n {/* Render the appropriate feed item component */}\n {input?.type === 'audit' && input.audit && (\n <AuditLogFeedItem event={input.audit} compact={true} />\n )}\n {input?.type === 'event' && input.event && (\n <EventFeedItem event={policyEventToK8sEvent(input.event)} compact={true} />\n )}\n {!input && (\n <span className=\"text-muted-foreground text-xs\">\n Input #{inputResult.inputIndex + 1}\n </span>\n )}\n\n {/* Error or no-match indicator */}\n <div className=\"flex justify-end\">\n {inputResult.error ? (\n <Badge variant=\"destructive\" className=\"text-xs shrink-0\">\n {inputResult.error}\n </Badge>\n ) : (\n <span className=\"text-muted-foreground text-xs shrink-0\">No matching rule</span>\n )}\n </div>\n </div>\n );\n })}\n </div>\n </CardContent>\n </Card>\n </details>\n )}\n\n {/* No Matches */}\n {stats.matched === 0 && !hasError && (\n <Alert>\n <AlertCircle className=\"h-4 w-4\" />\n <AlertDescription>\n No rules matched any of the {stats.total} input{stats.total !== 1 ? 's' : ''}.\n Check your match expressions.\n </AlertDescription>\n </Alert>\n )}\n </div>\n );\n}\n","import type {\n PolicyPreviewStatus,\n PolicyPreviewInput,\n} from '../types/policy';\nimport type { ResourceRef } from '../types/activity';\nimport { PolicyPreviewResult } from './PolicyPreviewResult';\nimport { cn } from '../lib/utils';\nimport { Card, CardContent } from './ui/card';\nimport { Button } from './ui/button';\nimport { Alert, AlertDescription } from './ui/alert';\nimport { AlertCircle, Loader2 } from 'lucide-react';\n\nexport interface PolicyPreviewPanelProps {\n /** Preview result (if available) */\n result: PolicyPreviewStatus | null;\n /** Input data used for preview */\n inputs?: PolicyPreviewInput[];\n /** Whether preview is loading */\n isLoading: boolean;\n /** Error message */\n error: Error | null;\n /** Handler for resource link clicks in result */\n onResourceClick?: (resource: ResourceRef) => void;\n /** Callback to run preview (with auto-fetch) */\n onRunPreview?: () => void;\n /** Additional CSS class */\n className?: string;\n}\n\n\n/**\n * PolicyPreviewPanel displays preview results for testing policies\n */\nexport function PolicyPreviewPanel({\n result,\n inputs,\n isLoading,\n error,\n onResourceClick,\n onRunPreview,\n className = '',\n}: PolicyPreviewPanelProps) {\n\n return (\n <div className={cn('space-y-3', className)}>\n {/* Header - only show when there's a refresh button */}\n {onRunPreview && (\n <div className=\"flex items-center justify-between\">\n <p className=\"text-xs text-muted-foreground\">\n Preview the activity timeline for recent resource changes.\n </p>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={onRunPreview}\n disabled={isLoading}\n className=\"h-7 text-xs\"\n >\n {isLoading ? (\n <>\n <Loader2 className=\"h-3 w-3 mr-1 animate-spin\" />\n Loading...\n </>\n ) : (\n 'Refresh Preview'\n )}\n </Button>\n </div>\n )}\n\n {/* Loading Preview State - Skeleton */}\n {isLoading && (\n <div className=\"space-y-2\">\n {/* Activity stream skeleton */}\n <div>\n <div className=\"flex items-center justify-between mb-1.5\">\n <div className=\"h-3 w-32 bg-muted rounded animate-pulse\" />\n <div className=\"h-4 w-16 bg-muted rounded animate-pulse\" />\n </div>\n <div className=\"space-y-0 border rounded-md divide-y\">\n {[1, 2, 3].map((i) => (\n <div key={i} className=\"px-2 py-1.5 flex items-center gap-2\">\n <div className=\"h-5 w-5 bg-muted rounded-full animate-pulse shrink-0\" />\n <div className=\"flex-1 space-y-1\">\n <div className=\"h-2.5 w-3/4 bg-muted rounded animate-pulse\" />\n <div className=\"h-2 w-1/2 bg-muted rounded animate-pulse\" />\n </div>\n <div className=\"h-2.5 w-14 bg-muted rounded animate-pulse shrink-0\" />\n </div>\n ))}\n </div>\n </div>\n </div>\n )}\n\n {/* Error Display */}\n {error && !result && !isLoading && (\n <Alert variant=\"destructive\">\n <AlertCircle className=\"h-4 w-4\" />\n <AlertDescription>{error.message}</AlertDescription>\n </Alert>\n )}\n\n {/* Empty State - No result yet and not loading */}\n {!result && !isLoading && !error && (\n <Card>\n <CardContent className=\"py-6 text-center\">\n <p className=\"text-xs text-muted-foreground mb-1\">\n No preview available yet\n </p>\n <p className=\"text-[11px] text-muted-foreground\">\n Enter a match expression and summary template to see results.\n </p>\n </CardContent>\n </Card>\n )}\n\n {/* Preview Result */}\n {result && !isLoading && (\n <PolicyPreviewResult\n result={result}\n inputs={inputs}\n onResourceClick={onResourceClick}\n />\n )}\n </div>\n );\n}\n","import { useEffect, useRef, useState, useCallback, useId } from 'react';\nimport { cn } from '../lib/utils';\n\n// Track registered languages to avoid re-registering\nconst registeredLanguages = new Set<string>();\n\n/**\n * Props for CelEditor component\n */\nexport interface CelEditorProps {\n /** Current value of the editor */\n value: string;\n /** Callback when value changes */\n onChange: (value: string) => void;\n /** Language mode: 'cel' for expressions, 'cel-template' for {{ }} templates */\n language?: 'cel' | 'cel-template';\n /** Field paths available for autocomplete */\n availableFields?: string[];\n /** Placeholder text when empty */\n placeholder?: string;\n /** Height of the editor */\n height?: string | number;\n /** Additional CSS classes */\n className?: string;\n /** Show error border */\n error?: boolean;\n /** Whether editor is read-only */\n readOnly?: boolean;\n /** Test ID for E2E testing */\n 'data-testid'?: string;\n}\n\n// Types for Monaco (loaded dynamically)\ntype Monaco = typeof import('monaco-editor');\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype MonacoEditorComponent = any;\n\n/**\n * Lazy-loaded Monaco editor for CEL expressions and templates\n * Provides autocomplete based on available field paths\n */\nexport function CelEditor({\n value,\n onChange,\n language = 'cel',\n availableFields = [],\n placeholder = '',\n height = '100px',\n className,\n error = false,\n readOnly = false,\n 'data-testid': testId,\n}: CelEditorProps) {\n const [Editor, setEditor] = useState<MonacoEditorComponent | null>(null);\n const [loadError, setLoadError] = useState<Error | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const monacoRef = useRef<Monaco | null>(null);\n const disposableRef = useRef<{ dispose: () => void } | null>(null);\n\n // Generate a unique language ID for this editor instance\n const instanceId = useId();\n const languageId = `cel-${instanceId.replace(/:/g, '-')}`;\n\n // Load Monaco Editor component\n useEffect(() => {\n let mounted = true;\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n async function loadMonaco() {\n try {\n // Set a timeout for the entire load process\n timeoutId = setTimeout(() => {\n if (mounted && isLoading) {\n setLoadError(new Error('Monaco loading timeout'));\n setIsLoading(false);\n }\n }, 5000);\n\n // Dynamic import of @monaco-editor/react\n const { default: MonacoEditorComponent } = await import('@monaco-editor/react');\n\n if (!mounted) return;\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n\n setEditor(() => MonacoEditorComponent);\n setIsLoading(false);\n } catch (err) {\n if (mounted) {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n setLoadError(err instanceof Error ? err : new Error(String(err)));\n setIsLoading(false);\n }\n }\n }\n\n loadMonaco();\n\n return () => {\n mounted = false;\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n };\n }, []);\n\n // Handle editor mount - store monaco reference and register language\n const handleEditorDidMount = useCallback((_editor: unknown, monaco: Monaco) => {\n monacoRef.current = monaco;\n\n // Register our custom language if not already registered\n if (!registeredLanguages.has(languageId)) {\n monaco.languages.register({ id: languageId });\n registeredLanguages.add(languageId);\n }\n }, [languageId]);\n\n // Update completion provider when fields change\n useEffect(() => {\n if (monacoRef.current && availableFields.length > 0) {\n // Dispose previous and create new\n if (disposableRef.current) {\n disposableRef.current.dispose();\n }\n\n const monaco = monacoRef.current;\n disposableRef.current = monaco.languages.registerCompletionItemProvider(languageId, {\n triggerCharacters: ['.', '{'],\n provideCompletionItems: (model, position) => {\n const textUntilPosition = model.getValueInRange({\n startLineNumber: position.lineNumber,\n startColumn: 1,\n endLineNumber: position.lineNumber,\n endColumn: position.column,\n });\n\n if (language === 'cel-template') {\n const lastOpenBrace = textUntilPosition.lastIndexOf('{{');\n const lastCloseBrace = textUntilPosition.lastIndexOf('}}');\n\n if (lastOpenBrace === -1 || lastCloseBrace > lastOpenBrace) {\n return { suggestions: [] };\n }\n }\n\n const word = model.getWordUntilPosition(position);\n const range = {\n startLineNumber: position.lineNumber,\n endLineNumber: position.lineNumber,\n startColumn: word.startColumn,\n endColumn: word.endColumn,\n };\n\n const suggestions = availableFields.map((field) => ({\n label: field,\n kind: monaco.languages.CompletionItemKind.Field,\n insertText: field,\n range,\n documentation: `Field path: ${field}`,\n }));\n\n return { suggestions };\n },\n });\n }\n\n return () => {\n if (disposableRef.current) {\n disposableRef.current.dispose();\n disposableRef.current = null;\n }\n };\n }, [availableFields, language, languageId]);\n\n // Handle load error - show error message\n if (loadError) {\n return (\n <div\n className={cn('relative border rounded-md p-3 bg-destructive/10', className)}\n data-testid={testId}\n style={{ height: typeof height === 'number' ? `${height}px` : height }}\n >\n <p className=\"text-xs text-destructive\">\n Monaco editor failed to load: {loadError.message}\n </p>\n </div>\n );\n }\n\n // Show loading state\n if (isLoading || !Editor) {\n return (\n <div\n className={cn(\n 'relative border rounded-md bg-muted animate-pulse',\n className\n )}\n style={{ height: typeof height === 'number' ? `${height}px` : height }}\n data-testid={testId}\n >\n <div className=\"flex items-center justify-center h-full\">\n <span className=\"text-xs text-muted-foreground\">Loading editor...</span>\n </div>\n </div>\n );\n }\n\n const heightValue = typeof height === 'number' ? `${height}px` : height;\n\n return (\n <div\n className={cn(\n 'border rounded-md',\n error && 'border-destructive',\n className\n )}\n style={{ height: heightValue, position: 'relative' }}\n data-testid={testId}\n >\n <Editor\n height=\"100%\"\n language={languageId}\n value={value}\n onChange={(newValue: string | undefined) => onChange(newValue || '')}\n onMount={handleEditorDidMount}\n loading={<div className=\"flex items-center justify-center h-full bg-muted\"><span className=\"text-xs text-muted-foreground\">Initializing...</span></div>}\n theme={typeof window !== 'undefined' && window.matchMedia('(prefers-color-scheme: dark)').matches\n ? 'vs-dark'\n : 'vs'}\n options={{\n minimap: { enabled: false },\n lineNumbers: 'off',\n glyphMargin: false,\n folding: false,\n lineDecorationsWidth: 8,\n lineNumbersMinChars: 0,\n scrollBeyondLastLine: false,\n wordWrap: 'on',\n wrappingIndent: 'indent',\n fontSize: 12,\n fontFamily: 'ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace',\n readOnly,\n automaticLayout: true,\n padding: {\n top: 8,\n bottom: 8,\n },\n scrollbar: {\n vertical: 'auto',\n horizontal: 'auto',\n verticalScrollbarSize: 8,\n horizontalScrollbarSize: 8,\n },\n suggest: {\n showIcons: true,\n maxVisibleSuggestions: 8,\n },\n }}\n />\n </div>\n );\n}\n","/**\n * Utility for extracting field paths from JSON objects\n * Used to populate autocomplete suggestions in CEL editors\n */\n\n/**\n * Check if a key requires bracket notation (contains special characters)\n */\nfunction requiresBracketNotation(key: string): boolean {\n // Keys with dots, slashes, or other special characters need bracket notation\n return /[.\\/\\-:]/.test(key) || /^\\d/.test(key);\n}\n\n/**\n * Build the CEL path for a key, using bracket notation when needed\n */\nfunction buildPath(prefix: string, key: string): string {\n if (requiresBracketNotation(key)) {\n // Use bracket notation with quoted key: prefix[\"key\"] or just [\"key\"]\n return prefix ? `${prefix}[\"${key}\"]` : `[\"${key}\"]`;\n }\n // Use dot notation: prefix.key or just key\n return prefix ? `${prefix}.${key}` : key;\n}\n\n/**\n * Recursively extract all field paths from a JSON object\n *\n * @param obj - The object to extract paths from\n * @param prefix - Current path prefix (for recursion)\n * @param maxDepth - Maximum nesting depth to traverse (default: 5)\n * @returns Array of CEL-compatible field paths (using bracket notation for special keys)\n *\n * @example\n * extractFieldPaths({ objectRef: { name: \"foo\" }, annotations: { \"k8s.io/key\": \"val\" } })\n * // Returns: [\"objectRef.name\", 'annotations[\"k8s.io/key\"]']\n */\nexport function extractFieldPaths(\n obj: unknown,\n prefix = '',\n maxDepth = 5\n): string[] {\n const paths: string[] = [];\n\n // Stop if we've reached max depth\n if (maxDepth <= 0) {\n return paths;\n }\n\n // Handle null/undefined\n if (obj == null) {\n return paths;\n }\n\n // Handle primitives (add the path itself)\n if (typeof obj !== 'object') {\n if (prefix) {\n paths.push(prefix);\n }\n return paths;\n }\n\n // Handle arrays - sample the first element only\n if (Array.isArray(obj)) {\n if (obj.length > 0 && prefix) {\n // Add the array path itself\n paths.push(prefix);\n // Recurse into first element\n const firstElement = obj[0];\n if (firstElement != null && typeof firstElement === 'object') {\n const nestedPaths = extractFieldPaths(\n firstElement,\n prefix,\n maxDepth - 1\n );\n paths.push(...nestedPaths);\n }\n }\n return paths;\n }\n\n // Handle objects\n const objAsRecord = obj as Record<string, unknown>;\n for (const [key, value] of Object.entries(objAsRecord)) {\n const currentPath = buildPath(prefix, key);\n\n if (value == null) {\n // Add null/undefined fields to the list\n paths.push(currentPath);\n } else if (typeof value === 'object') {\n // Recurse into nested objects/arrays\n const nestedPaths = extractFieldPaths(\n value,\n currentPath,\n maxDepth - 1\n );\n paths.push(...nestedPaths);\n } else {\n // Primitive value - add the path\n paths.push(currentPath);\n }\n }\n\n return paths;\n}\n\n/**\n * Extract field paths from multiple objects and return unique sorted paths\n *\n * @param objects - Array of objects to extract paths from\n * @param maxDepth - Maximum nesting depth to traverse (default: 5)\n * @returns Sorted array of unique field paths\n *\n * @example\n * extractFieldPathsFromMany([\n * { verb: \"create\", objectRef: { name: \"foo\" } },\n * { verb: \"update\", objectRef: { namespace: \"bar\" } }\n * ])\n * // Returns: [\"objectRef.name\", \"objectRef.namespace\", \"verb\"]\n */\nexport function extractFieldPathsFromMany(\n objects: unknown[],\n maxDepth = 5\n): string[] {\n const allPaths = new Set<string>();\n\n for (const obj of objects) {\n const paths = extractFieldPaths(obj, '', maxDepth);\n paths.forEach(path => allPaths.add(path));\n }\n\n return Array.from(allPaths).sort();\n}\n","import { useState, useEffect, useMemo } from 'react';\nimport type { ActivityPolicyRule, PolicyPreviewStatus } from '../types/policy';\nimport type { ActivityApiClient } from '../api/client';\nimport { Button } from './ui/button';\nimport {\n Sheet,\n SheetContent,\n SheetDescription,\n SheetFooter,\n SheetHeader,\n SheetTitle,\n} from './ui/sheet';\nimport { Input } from './ui/input';\nimport { Label } from './ui/label';\nimport { Textarea } from './ui/textarea';\nimport { PolicyPreviewPanel } from './PolicyPreviewPanel';\nimport { CelEditor } from './CelEditor';\nimport { extractFieldPathsFromMany } from '../lib/extractFieldPaths';\n\nexport interface PolicyRuleEditorDialogProps {\n /** Whether the dialog is open */\n open: boolean;\n /** Callback when open state changes */\n onOpenChange: (open: boolean) => void;\n /** Rule being edited (null for creating new rule) */\n rule: ActivityPolicyRule | null;\n /** Rule type (audit or event) */\n ruleType: 'audit' | 'event';\n /** Existing rule names for uniqueness validation */\n existingNames: string[];\n /** Policy resource configuration */\n policyResource: { apiGroup: string; kind: string };\n /** Activity API client for preview */\n apiClient: ActivityApiClient;\n /** Callback when rule is saved */\n onSave: (rule: ActivityPolicyRule) => void;\n /** Callback when canceled */\n onCancel: () => void;\n}\n\n/**\n * CEL syntax help for audit rules\n */\nconst AUDIT_CEL_HELP = {\n variables: [\n 'audit.verb - HTTP verb (create, update, patch, delete, get, list, watch)',\n 'audit.user.username - Username of the actor',\n 'audit.user.groups - Groups the actor belongs to',\n 'audit.objectRef.name - Name of the resource',\n 'audit.objectRef.namespace - Namespace of the resource',\n 'audit.objectRef.subresource - Subresource (e.g., \"status\")',\n 'audit.responseStatus.code - HTTP response status code',\n ],\n examples: [\n 'audit.verb == \"create\"',\n 'audit.verb in [\"create\", \"update\", \"patch\"]',\n 'audit.verb == \"update\" && audit.objectRef.subresource == \"status\"',\n 'audit.responseStatus.code >= 200 && audit.responseStatus.code < 300',\n ],\n};\n\n/**\n * CEL syntax help for event rules\n */\nconst EVENT_CEL_HELP = {\n variables: [\n 'event.type - Event type: \"Normal\" or \"Warning\"',\n 'event.reason - Short reason (e.g., \"Created\", \"Ready\", \"Failed\")',\n 'event.note - Human-readable description of the event',\n 'event.regarding.name - Name of the regarding resource',\n 'event.regarding.namespace - Namespace of the regarding resource',\n 'event.reportingController - Controller that emitted the event',\n ],\n examples: [\n 'event.reason == \"Ready\"',\n 'event.type == \"Warning\"',\n 'event.reason in [\"Created\", \"Updated\", \"Deleted\"]',\n 'event.note.contains(\"failed\")',\n ],\n};\n\n/**\n * Summary template help for audit rules\n */\nconst AUDIT_SUMMARY_HELP = {\n variables: [\n '{{ actor }} - Display name of the actor',\n '{{ kind }} - Resource kind (e.g., \"HTTPProxy\")',\n '{{ verb }} - Action verb (create, update, delete, etc.)',\n '{{ objectRef.name }} - Name of the resource',\n '{{ objectRef.namespace }} - Namespace of the resource',\n '{{ link(text, ref) }} - Create a clickable link',\n ],\n examples: [\n '{{ actor }} created {{ kind }} {{ objectRef.name }}',\n '{{ actor }} {{ verb }}d {{ link(kind + \" \" + objectRef.name, objectRef) }}',\n '{{ actor }} updated the status of {{ kind }} {{ objectRef.name }}',\n ],\n};\n\n/**\n * Summary template help for event rules\n */\nconst EVENT_SUMMARY_HELP = {\n variables: [\n '{{ actor }} - Display name of the actor/controller',\n '{{ event.reason }} - Event reason (e.g., \"Ready\", \"Failed\")',\n '{{ event.note }} - Human-readable event message',\n '{{ event.regarding.name }} - Name of the regarding resource',\n '{{ event.regarding.namespace }} - Namespace of the regarding resource',\n '{{ link(text, ref) }} - Create a clickable link',\n ],\n examples: [\n '{{ link(event.regarding.kind + \" \" + event.regarding.name, event.regarding) }} is now ready',\n '{{ event.regarding.kind }} {{ event.regarding.name }} failed: {{ event.note }}',\n '{{ actor }} reported {{ event.reason }} for {{ event.regarding.name }}',\n ],\n};\n\n/**\n * Validate DNS subdomain name (RFC 1123)\n * Must consist of lowercase alphanumeric characters or '-',\n * and must start and end with an alphanumeric character\n */\nfunction isValidDNSSubdomain(name: string): boolean {\n if (!name || name.length === 0 || name.length > 253) {\n return false;\n }\n // Fixed pattern that allows single-character names\n const pattern = /^[a-z0-9]([-a-z0-9]*[a-z0-9])?$/;\n return pattern.test(name);\n}\n\n/**\n * PolicyRuleEditorDialog provides a dialog interface for editing policy rules\n */\nexport function PolicyRuleEditorDialog({\n open,\n onOpenChange,\n rule,\n ruleType,\n existingNames,\n policyResource,\n apiClient,\n onSave,\n onCancel,\n}: PolicyRuleEditorDialogProps) {\n const isCreating = rule === null;\n\n // Form state\n const [name, setName] = useState('');\n const [description, setDescription] = useState('');\n const [match, setMatch] = useState('');\n const [summary, setSummary] = useState('');\n\n // Validation errors\n const [nameError, setNameError] = useState('');\n const [matchError, setMatchError] = useState('');\n const [summaryError, setSummaryError] = useState('');\n\n // Preview state\n const [previewResult, setPreviewResult] = useState<PolicyPreviewStatus | null>(null);\n const [previewLoading, setPreviewLoading] = useState(false);\n const [previewError, setPreviewError] = useState<Error | null>(null);\n\n // Sample data for autocomplete (fetched once when dialog opens)\n const [sampleData, setSampleData] = useState<unknown[]>([]);\n const [sampleDataLoading, setSampleDataLoading] = useState(false);\n\n // Extract field paths from sample data OR preview data for autocomplete\n const availableFields = useMemo(() => {\n // First try to use preview data if available\n if (previewResult?.fetchedInputs && previewResult.fetchedInputs.length > 0) {\n const dataObjects = previewResult.fetchedInputs.map(input => {\n if (input.type === 'audit' && input.audit) {\n return input.audit;\n } else if (input.type === 'event' && input.event) {\n return input.event;\n }\n return null;\n }).filter(Boolean);\n\n return extractFieldPathsFromMany(dataObjects);\n }\n\n // Fall back to sample data\n if (sampleData.length > 0) {\n return extractFieldPathsFromMany(sampleData);\n }\n\n return [];\n }, [previewResult?.fetchedInputs, sampleData]);\n\n // Initialize form when rule changes\n useEffect(() => {\n if (rule) {\n setName(rule.name || '');\n setDescription(rule.description || '');\n setMatch(rule.match || '');\n setSummary(rule.summary || '');\n } else {\n setName('');\n setDescription('');\n setMatch('');\n setSummary('');\n }\n // Clear errors when dialog opens/closes or rule changes\n setNameError('');\n setMatchError('');\n setSummaryError('');\n setPreviewResult(null);\n setPreviewError(null);\n }, [rule, open]);\n\n // Fetch sample data for autocomplete when dialog opens\n useEffect(() => {\n if (!open) {\n setSampleData([]);\n return;\n }\n\n let cancelled = false;\n setSampleDataLoading(true);\n\n async function fetchSampleData() {\n try {\n // Fetch sample data using a permissive match expression\n const preview = await apiClient.createPolicyPreview({\n policy: {\n resource: policyResource,\n auditRules: ruleType === 'audit' ? [{ name: 'sample', match: 'true', summary: 'sample' }] : undefined,\n eventRules: ruleType === 'event' ? [{ name: 'sample', match: 'true', summary: 'sample' }] : undefined,\n },\n autoFetch: {\n limit: 10,\n timeRange: '7d',\n sources: ruleType === 'audit' ? 'audit' : 'events',\n },\n });\n\n if (cancelled) return;\n\n // Extract data objects from fetched inputs\n const dataObjects = (preview.status?.fetchedInputs || []).map(input => {\n if (input.type === 'audit' && input.audit) return input.audit;\n if (input.type === 'event' && input.event) return input.event;\n return null;\n }).filter(Boolean);\n\n setSampleData(dataObjects);\n } catch (err) {\n // Silently fail - autocomplete just won't be available\n console.warn('Failed to fetch sample data for autocomplete:', err);\n } finally {\n if (!cancelled) {\n setSampleDataLoading(false);\n }\n }\n }\n\n fetchSampleData();\n\n return () => {\n cancelled = true;\n };\n }, [open, ruleType, policyResource, apiClient]);\n\n // Live preview - debounced\n useEffect(() => {\n // Don't run preview if dialog is closed or fields are empty\n if (!open || !match.trim() || !summary.trim()) {\n setPreviewResult(null);\n return;\n }\n\n const timer = setTimeout(async () => {\n setPreviewLoading(true);\n setPreviewError(null);\n\n try {\n // Create a preview using auto-fetch to get sample data from ClickHouse\n const preview = await apiClient.createPolicyPreview({\n policy: {\n resource: policyResource,\n auditRules: ruleType === 'audit' ? [{ name: name || 'preview', match, summary, description }] : undefined,\n eventRules: ruleType === 'event' ? [{ name: name || 'preview', match, summary, description }] : undefined,\n },\n autoFetch: {\n limit: 10,\n timeRange: '7d',\n sources: ruleType === 'audit' ? 'audit' : 'events',\n },\n });\n\n setPreviewResult(preview.status || null);\n } catch (err) {\n setPreviewError(err instanceof Error ? err : new Error(String(err)));\n } finally {\n setPreviewLoading(false);\n }\n }, 500); // Debounce 500ms\n\n return () => clearTimeout(timer);\n }, [open, match, summary, name, description, ruleType, policyResource, apiClient]);\n\n const celHelp = ruleType === 'audit' ? AUDIT_CEL_HELP : EVENT_CEL_HELP;\n const summaryHelp = ruleType === 'audit' ? AUDIT_SUMMARY_HELP : EVENT_SUMMARY_HELP;\n\n // Validate form\n const validate = (): boolean => {\n let isValid = true;\n\n // Validate name\n if (!name.trim()) {\n setNameError('Name is required');\n isValid = false;\n } else if (!isValidDNSSubdomain(name)) {\n setNameError('Name must be lowercase alphanumeric and hyphens (e.g., \"create-rule\")');\n isValid = false;\n } else if (existingNames.includes(name) && (!rule || rule.name !== name)) {\n setNameError('A rule with this name already exists');\n isValid = false;\n } else {\n setNameError('');\n }\n\n // Validate match expression\n if (!match.trim()) {\n setMatchError('Match expression is required');\n isValid = false;\n } else {\n setMatchError('');\n }\n\n // Validate summary\n if (!summary.trim()) {\n setSummaryError('Summary template is required');\n isValid = false;\n } else {\n setSummaryError('');\n }\n\n return isValid;\n };\n\n // Handle save\n const handleSave = () => {\n if (!validate()) {\n return;\n }\n\n const savedRule: ActivityPolicyRule = {\n name: name.trim(),\n description: description.trim() || undefined,\n match: match.trim(),\n summary: summary.trim(),\n };\n\n onSave(savedRule);\n onOpenChange(false);\n };\n\n // Handle cancel\n const handleCancel = () => {\n onCancel();\n onOpenChange(false);\n };\n\n return (\n <Sheet open={open} onOpenChange={onOpenChange}>\n <SheetContent side=\"right\" className=\"w-full sm:max-w-2xl overflow-y-auto\">\n <SheetHeader>\n <SheetTitle className=\"text-base\">\n {isCreating ? 'Create' : 'Edit'} {ruleType === 'audit' ? 'Audit' : 'Event'} Rule\n </SheetTitle>\n <SheetDescription className=\"text-xs\">\n Define a rule to match {ruleType === 'audit' ? 'audit events' : 'Kubernetes events'} and generate activity summaries.\n </SheetDescription>\n </SheetHeader>\n\n <div className=\"py-3 text-sm flex-1 overflow-y-auto\">\n {/* Form fields - full width */}\n <div className=\"space-y-3\">\n {/* Name */}\n <div className=\"space-y-1\">\n <Label htmlFor=\"rule-name\" className=\"text-xs font-medium\">\n Name <span className=\"text-destructive\">*</span>\n </Label>\n <Input\n id=\"rule-name\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder=\"e.g., create-rule\"\n className={`h-8 text-sm ${nameError ? 'border-destructive' : ''}`}\n />\n {nameError && (\n <p className=\"text-[11px] text-destructive\">{nameError}</p>\n )}\n <p className=\"text-[11px] text-muted-foreground\">\n Lowercase alphanumeric and hyphens only\n </p>\n </div>\n\n {/* Description */}\n <div className=\"space-y-1\">\n <Label htmlFor=\"rule-description\" className=\"text-xs font-medium\">Description</Label>\n <Textarea\n id=\"rule-description\"\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n placeholder=\"Optional description\"\n rows={1}\n className=\"resize-none text-sm\"\n />\n </div>\n\n {/* Match Expression */}\n <div className=\"space-y-1\">\n <Label htmlFor=\"rule-match\" className=\"text-xs font-medium\">\n Match Expression (CEL) <span className=\"text-destructive\">*</span>\n </Label>\n <CelEditor\n value={match}\n onChange={setMatch}\n language=\"cel\"\n availableFields={availableFields}\n placeholder={celHelp.examples[0]}\n height={80}\n error={!!matchError}\n data-testid=\"cel-editor-match\"\n />\n {matchError && (\n <p className=\"text-[11px] text-destructive\">{matchError}</p>\n )}\n <details className=\"text-[11px]\">\n <summary className=\"cursor-pointer text-muted-foreground hover:text-foreground\">\n Available variables\n </summary>\n <ul className=\"mt-1 space-y-0.5 pl-3 list-disc text-muted-foreground\">\n {celHelp.variables.map((v, i) => (\n <li key={i}>{v}</li>\n ))}\n </ul>\n </details>\n </div>\n\n {/* Summary Template */}\n <div className=\"space-y-1\">\n <Label htmlFor=\"rule-summary\" className=\"text-xs font-medium\">\n Summary Template <span className=\"text-destructive\">*</span>\n </Label>\n <CelEditor\n value={summary}\n onChange={setSummary}\n language=\"cel-template\"\n availableFields={availableFields}\n placeholder={summaryHelp.examples[0]}\n height={80}\n error={!!summaryError}\n data-testid=\"cel-editor-summary\"\n />\n {summaryError && (\n <p className=\"text-[11px] text-destructive\">{summaryError}</p>\n )}\n <details className=\"text-[11px]\">\n <summary className=\"cursor-pointer text-muted-foreground hover:text-foreground\">\n Template variables\n </summary>\n <ul className=\"mt-1 space-y-0.5 pl-3 list-disc text-muted-foreground\">\n {summaryHelp.variables.map((v, i) => (\n <li key={i}>{v}</li>\n ))}\n </ul>\n </details>\n </div>\n </div>\n\n {/* Live preview - below the form */}\n <div className=\"space-y-1 mt-4 pt-4 border-t\">\n <h3 className=\"text-xs font-medium\">Live Preview</h3>\n <p className=\"text-[11px] text-muted-foreground\">\n Preview updates as you type.\n </p>\n <PolicyPreviewPanel\n result={previewResult}\n inputs={[]}\n isLoading={previewLoading}\n error={previewError}\n />\n </div>\n </div>\n\n <SheetFooter className=\"mt-4 pt-4 border-t\">\n <Button variant=\"outline\" size=\"sm\" onClick={handleCancel}>\n Cancel\n </Button>\n <Button size=\"sm\" onClick={handleSave}>\n {isCreating ? 'Create Rule' : 'Save Changes'}\n </Button>\n </SheetFooter>\n </SheetContent>\n </Sheet>\n );\n}\n","import * as React from 'react';\nimport * as TabsPrimitive from '@radix-ui/react-tabs';\n\nimport { cn } from '../../lib/utils';\n\nconst Tabs = TabsPrimitive.Root;\n\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n 'inline-flex h-10 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground',\n className\n )}\n {...props}\n />\n));\nTabsList.displayName = TabsPrimitive.List.displayName;\n\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n 'inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm',\n className\n )}\n {...props}\n />\n));\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName;\n\nconst TabsContent = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n 'mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n className\n )}\n {...props}\n />\n));\nTabsContent.displayName = TabsPrimitive.Content.displayName;\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","import { useState } from 'react';\nimport type { ActivityPolicyRule } from '../types/policy';\nimport type { ActivityApiClient } from '../api/client';\nimport { PolicyRuleListItem } from './PolicyRuleListItem';\nimport { PolicyRuleEditorDialog } from './PolicyRuleEditorDialog';\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from './ui/tabs';\nimport { Button } from './ui/button';\nimport { Badge } from './ui/badge';\n\nexport interface PolicyRuleListProps {\n /** Audit rules */\n auditRules: ActivityPolicyRule[];\n /** Event rules */\n eventRules: ActivityPolicyRule[];\n /** Policy resource configuration */\n policyResource: { apiGroup: string; kind: string };\n /** Activity API client for preview */\n apiClient: ActivityApiClient;\n /** Callback when audit rules change */\n onAuditRulesChange: (rules: ActivityPolicyRule[]) => void;\n /** Callback when event rules change */\n onEventRulesChange: (rules: ActivityPolicyRule[]) => void;\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * PolicyRuleList displays and manages both audit and event rules with tabs\n */\nexport function PolicyRuleList({\n auditRules,\n eventRules,\n policyResource,\n apiClient,\n onAuditRulesChange,\n onEventRulesChange,\n className = '',\n}: PolicyRuleListProps) {\n // Dialog state\n const [dialogOpen, setDialogOpen] = useState(false);\n const [editingRule, setEditingRule] = useState<ActivityPolicyRule | null>(null);\n const [editingRuleIndex, setEditingRuleIndex] = useState<number | null>(null);\n const [editingRuleType, setEditingRuleType] = useState<'audit' | 'event'>('audit');\n\n // Open dialog for creating new rule\n const handleAddRule = (ruleType: 'audit' | 'event') => {\n setEditingRule(null);\n setEditingRuleIndex(null);\n setEditingRuleType(ruleType);\n setDialogOpen(true);\n };\n\n // Open dialog for editing existing rule\n const handleEditRule = (index: number, ruleType: 'audit' | 'event') => {\n const rules = ruleType === 'audit' ? auditRules : eventRules;\n setEditingRule(rules[index]);\n setEditingRuleIndex(index);\n setEditingRuleType(ruleType);\n setDialogOpen(true);\n };\n\n // Save rule (create or update)\n const handleSaveRule = (rule: ActivityPolicyRule) => {\n if (editingRuleType === 'audit') {\n if (editingRuleIndex === null) {\n // Add new audit rule\n onAuditRulesChange([...auditRules, rule]);\n } else {\n // Update existing audit rule\n const newRules = [...auditRules];\n newRules[editingRuleIndex] = rule;\n onAuditRulesChange(newRules);\n }\n } else {\n if (editingRuleIndex === null) {\n // Add new event rule\n onEventRulesChange([...eventRules, rule]);\n } else {\n // Update existing event rule\n const newRules = [...eventRules];\n newRules[editingRuleIndex] = rule;\n onEventRulesChange(newRules);\n }\n }\n };\n\n // Delete rule\n const handleDeleteRule = (index: number, ruleType: 'audit' | 'event') => {\n if (ruleType === 'audit') {\n const newRules = auditRules.filter((_, i) => i !== index);\n onAuditRulesChange(newRules);\n } else {\n const newRules = eventRules.filter((_, i) => i !== index);\n onEventRulesChange(newRules);\n }\n };\n\n // Move rule up\n const handleMoveUp = (index: number, ruleType: 'audit' | 'event') => {\n if (index === 0) return;\n\n const rules = ruleType === 'audit' ? [...auditRules] : [...eventRules];\n [rules[index - 1], rules[index]] = [rules[index], rules[index - 1]];\n\n if (ruleType === 'audit') {\n onAuditRulesChange(rules);\n } else {\n onEventRulesChange(rules);\n }\n };\n\n // Move rule down\n const handleMoveDown = (index: number, ruleType: 'audit' | 'event') => {\n const rules = ruleType === 'audit' ? auditRules : eventRules;\n if (index >= rules.length - 1) return;\n\n const newRules = [...rules];\n [newRules[index], newRules[index + 1]] = [newRules[index + 1], newRules[index]];\n\n if (ruleType === 'audit') {\n onAuditRulesChange(newRules);\n } else {\n onEventRulesChange(newRules);\n }\n };\n\n // Get existing rule names for validation\n const existingNames = editingRuleType === 'audit'\n ? auditRules.map(r => r.name || '').filter(Boolean)\n : eventRules.map(r => r.name || '').filter(Boolean);\n\n return (\n <>\n <div className={`bg-muted rounded-lg overflow-hidden ${className}`}>\n <Tabs defaultValue=\"audit\" className=\"w-full\">\n <TabsList className=\"w-full rounded-none border-b border-input bg-muted h-auto p-0\">\n <TabsTrigger\n value=\"audit\"\n className=\"flex-1 gap-1.5 py-1.5 px-2 text-xs rounded-none data-[state=active]:bg-background data-[state=active]:border-b-2 data-[state=active]:border-[#BF9595] data-[state=active]:shadow-none\"\n >\n Audit Rules\n <Badge\n variant=\"secondary\"\n className=\"text-[10px] px-1.5 py-0 data-[state=active]:bg-[#BF9595] data-[state=active]:text-white\"\n >\n {auditRules.length}\n </Badge>\n </TabsTrigger>\n <TabsTrigger\n value=\"event\"\n className=\"flex-1 gap-1.5 py-1.5 px-2 text-xs rounded-none data-[state=active]:bg-background data-[state=active]:border-b-2 data-[state=active]:border-[#BF9595] data-[state=active]:shadow-none\"\n >\n Event Rules\n <Badge\n variant=\"secondary\"\n className=\"text-[10px] px-1.5 py-0 data-[state=active]:bg-[#BF9595] data-[state=active]:text-white\"\n >\n {eventRules.length}\n </Badge>\n </TabsTrigger>\n </TabsList>\n\n <TabsContent value=\"audit\" className=\"mt-0 p-2 bg-background\">\n <div className=\"space-y-1.5\">\n {auditRules.map((rule, index) => (\n <PolicyRuleListItem\n key={rule.name}\n rule={rule}\n ruleType=\"audit\"\n index={index}\n onEdit={() => handleEditRule(index, 'audit')}\n onDelete={() => handleDeleteRule(index, 'audit')}\n onMoveUp={() => handleMoveUp(index, 'audit')}\n onMoveDown={() => handleMoveDown(index, 'audit')}\n canMoveUp={index > 0}\n canMoveDown={index < auditRules.length - 1}\n />\n ))}\n </div>\n {auditRules.length === 0 && (\n <div className=\"text-center py-4 px-4 text-muted-foreground text-xs\">\n <p className=\"mb-1\">No audit rules defined.</p>\n <p className=\"text-[11px]\">\n Audit rules match API audit events and generate activity summaries.\n </p>\n </div>\n )}\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"w-full mt-2 border-2 border-dashed border-input bg-muted hover:bg-[#EFEFED] hover:border-[#BF9595] hover:text-foreground text-xs\"\n onClick={() => handleAddRule('audit')}\n >\n + Add Audit Rule\n </Button>\n </TabsContent>\n\n <TabsContent value=\"event\" className=\"mt-0 p-2 bg-background\">\n <div className=\"space-y-1.5\">\n {eventRules.map((rule, index) => (\n <PolicyRuleListItem\n key={rule.name}\n rule={rule}\n ruleType=\"event\"\n index={index}\n onEdit={() => handleEditRule(index, 'event')}\n onDelete={() => handleDeleteRule(index, 'event')}\n onMoveUp={() => handleMoveUp(index, 'event')}\n onMoveDown={() => handleMoveDown(index, 'event')}\n canMoveUp={index > 0}\n canMoveDown={index < eventRules.length - 1}\n />\n ))}\n </div>\n {eventRules.length === 0 && (\n <div className=\"text-center py-4 px-4 text-muted-foreground text-xs\">\n <p className=\"mb-1\">No event rules defined.</p>\n <p className=\"text-[11px]\">\n Event rules match Kubernetes Events and generate activity summaries.\n </p>\n </div>\n )}\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"w-full mt-2 border-2 border-dashed border-input bg-muted hover:bg-[#EFEFED] hover:border-[#BF9595] hover:text-foreground text-xs\"\n onClick={() => handleAddRule('event')}\n >\n + Add Event Rule\n </Button>\n </TabsContent>\n </Tabs>\n </div>\n\n {/* Rule Editor Dialog */}\n <PolicyRuleEditorDialog\n open={dialogOpen}\n onOpenChange={setDialogOpen}\n rule={editingRule}\n ruleType={editingRuleType}\n existingNames={existingNames}\n policyResource={policyResource}\n apiClient={apiClient}\n onSave={handleSaveRule}\n onCancel={() => setDialogOpen(false)}\n />\n </>\n );\n}\n","import { useState } from 'react';\nimport type { ActivityApiClient } from '../api/client';\nimport type { ActivityPolicyResource } from '../types/policy';\nimport type { ResourceRef, ErrorFormatter } from '../types/activity';\nimport { EventsFeed } from './EventsFeed';\nimport { ActivityFeed } from './ActivityFeed';\n\nexport interface PolicyActivityViewProps {\n /** API client instance */\n client: ActivityApiClient;\n /** Policy resource configuration to filter by */\n policyResource: ActivityPolicyResource;\n /** Policy name for filtering events by the ActivityPolicy itself */\n policyName: string;\n /** Handler for resource link clicks in activity summaries */\n onResourceClick?: (resource: ResourceRef) => void;\n /** Additional CSS class */\n className?: string;\n /** Custom error formatter */\n errorFormatter?: ErrorFormatter;\n}\n\ntype ViewMode = 'activity' | 'events';\n\n/**\n * PolicyActivityView displays activity and timeline views for a specific policy.\n *\n * - Activity: Shows translated activities generated by this policy (outputs from the policy)\n * - Policy Events: Shows events related to the ActivityPolicy resource itself\n */\nexport function PolicyActivityView({\n client,\n policyResource,\n policyName,\n onResourceClick,\n className = '',\n errorFormatter,\n}: PolicyActivityViewProps) {\n const [viewMode, setViewMode] = useState<ViewMode>('events');\n\n // Build filters based on the policy's resource configuration\n const resourceKinds = policyResource.kind ? [policyResource.kind] : undefined;\n\n return (\n <div className={className}>\n {/* Simple menu header */}\n <div className=\"flex items-center gap-4 mb-4 text-sm\">\n <button\n onClick={() => setViewMode('events')}\n className={`px-0 py-1 transition-colors ${\n viewMode === 'events'\n ? 'text-foreground border-b-2 border-[#BF9595] font-medium'\n : 'text-muted-foreground hover:text-foreground'\n }`}\n >\n Policy Events\n </button>\n <span className=\"text-muted-foreground/30\">|</span>\n <button\n onClick={() => setViewMode('activity')}\n className={`px-0 py-1 transition-colors ${\n viewMode === 'activity'\n ? 'text-foreground border-b-2 border-[#BF9595] font-medium'\n : 'text-muted-foreground hover:text-foreground'\n }`}\n >\n Activity\n </button>\n </div>\n\n {/* Activity view - activities generated by this policy */}\n {viewMode === 'activity' && (\n <div className=\"space-y-4\">\n {/*\n TODO: Once activities track which policy generated them (via metadata labels or spec field),\n filter by policy name instead of just resource kind.\n For now, showing all activities for this resource type.\n */}\n <ActivityFeed\n client={client}\n initialFilters={{\n resourceKinds,\n changeSource: 'human',\n }}\n initialTimeRange={{ start: 'now-7d' }}\n onResourceClick={onResourceClick}\n pageSize={20}\n compact={true}\n showFilters={true}\n hiddenFilters={['resourceKinds']}\n enableStreaming={false}\n errorFormatter={errorFormatter}\n />\n </div>\n )}\n\n {/* Policy Events view - events related to the ActivityPolicy resource itself */}\n {viewMode === 'events' && (\n <div className=\"space-y-4\">\n <EventsFeed\n client={client}\n initialFilters={{\n involvedKinds: ['ActivityPolicy'],\n involvedName: policyName,\n }}\n initialTimeRange={{ start: 'now-24h' }}\n pageSize={20}\n compact={true}\n showFilters={true}\n hiddenFilters={['involvedKinds', 'involvedName']}\n enableStreaming={false}\n errorFormatter={errorFormatter}\n />\n </div>\n )}\n </div>\n );\n}\n","import * as React from 'react';\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { X } from 'lucide-react';\n\nimport { cn } from '../../lib/utils';\n\nconst Dialog = DialogPrimitive.Root;\n\nconst DialogTrigger = DialogPrimitive.Trigger;\n\nconst DialogPortal = DialogPrimitive.Portal;\n\nconst DialogClose = DialogPrimitive.Close;\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n 'fixed inset-0 z-50 bg-black/40 backdrop-blur-[2px] data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n className\n )}\n {...props}\n />\n));\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n 'fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-white dark:bg-slate-900 p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg',\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n));\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n 'flex flex-col space-y-1.5 text-center sm:text-left',\n className\n )}\n {...props}\n />\n);\nDialogHeader.displayName = 'DialogHeader';\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n 'flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2',\n className\n )}\n {...props}\n />\n);\nDialogFooter.displayName = 'DialogFooter';\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n 'text-lg font-semibold leading-none tracking-tight',\n className\n )}\n {...props}\n />\n));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn('text-sm text-muted-foreground', className)}\n {...props}\n />\n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogClose,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n};\n","import { useEffect, useCallback, useState } from 'react';\nimport type { Condition } from '../types/policy';\nimport type { ResourceRef, ErrorFormatter } from '../types/activity';\nimport { ActivityApiClient } from '../api/client';\nimport { usePolicyEditor, type UsePolicyEditorResult } from '../hooks/usePolicyEditor';\nimport { PolicyResourceForm } from './PolicyResourceForm';\nimport { PolicyRuleList } from './PolicyRuleList';\nimport { PolicyActivityView } from './PolicyActivityView';\nimport { Input } from './ui/input';\nimport { Button } from './ui/button';\nimport { Card, CardHeader, CardContent } from './ui/card';\nimport { Badge } from './ui/badge';\nimport { Label } from './ui/label';\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from './ui/tabs';\nimport { ApiErrorAlert } from './ApiErrorAlert';\nimport { Alert, AlertDescription } from './ui/alert';\nimport { AlertTriangle, AlertCircle, Trash2, Copy, Check } from 'lucide-react';\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from './ui/dialog';\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from './ui/tooltip';\n\nexport interface PolicyEditorProps {\n /** API client instance */\n client: ActivityApiClient;\n /** Policy name to edit (undefined for new policy) */\n policyName?: string;\n /** Callback when save succeeds */\n onSaveSuccess?: (policyName: string) => void;\n /** Callback when cancel is clicked */\n onCancel?: () => void;\n /** Handler for resource link clicks in preview */\n onResourceClick?: (resource: ResourceRef) => void;\n /** Additional CSS class */\n className?: string;\n /** Custom error formatter for customizing error messages */\n errorFormatter?: ErrorFormatter;\n}\n\n/**\n * PolicyEditor provides a full editor for creating/editing ActivityPolicies\n * with a preview panel for testing\n */\nexport function PolicyEditor({\n client,\n policyName,\n onSaveSuccess,\n onCancel,\n onResourceClick,\n className = '',\n errorFormatter,\n}: PolicyEditorProps) {\n // Editor state\n const editor: UsePolicyEditorResult = usePolicyEditor({\n client,\n initialPolicyName: policyName,\n });\n\n // Delete confirmation state\n const [showDeleteDialog, setShowDeleteDialog] = useState(false);\n const [isDeleting, setIsDeleting] = useState(false);\n\n // Copy state\n const [isCopied, setIsCopied] = useState(false);\n\n // Track active tab\n const [activeTab, setActiveTab] = useState<string>('activity');\n\n // Load existing policy on mount\n useEffect(() => {\n if (policyName) {\n editor.load(policyName).catch((err) => {\n console.error('Failed to load policy:', err);\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [policyName]);\n\n // Handle save\n const handleSave = useCallback(\n async (dryRun: boolean = false) => {\n try {\n const result = await editor.save(dryRun);\n if (!dryRun && onSaveSuccess && result.metadata?.name) {\n onSaveSuccess(result.metadata.name);\n }\n } catch (err) {\n // Error is stored in editor.error\n console.error('Save failed:', err);\n }\n },\n [editor, onSaveSuccess]\n );\n\n // Handle delete\n const handleDelete = useCallback(async () => {\n if (!policyName) return;\n\n setIsDeleting(true);\n try {\n await client.deletePolicy(policyName);\n setShowDeleteDialog(false);\n if (onSaveSuccess) {\n // Navigate away after successful delete\n onSaveSuccess('');\n }\n } catch (err) {\n console.error('Failed to delete policy:', err);\n } finally {\n setIsDeleting(false);\n }\n }, [client, policyName, onSaveSuccess]);\n\n // Handle copy resource name\n const handleCopyResourceName = useCallback(async () => {\n if (editor.name) {\n try {\n await navigator.clipboard.writeText(editor.name);\n setIsCopied(true);\n setTimeout(() => setIsCopied(false), 2000);\n } catch (err) {\n console.error('Failed to copy resource name:', err);\n }\n }\n }, [editor.name]);\n\n // Validation\n const canSave =\n editor.name.trim() !== '' &&\n editor.spec.resource.apiGroup.trim() !== '' &&\n editor.spec.resource.kind.trim() !== '';\n\n // Get policy status from conditions\n const getPolicyStatus = (): {\n status: 'ready' | 'error' | 'pending' | 'unknown';\n message?: string;\n } | null => {\n if (!editor.policy || editor.isNew) {\n return null; // No status for new policies\n }\n\n const conditions = editor.policy.status?.conditions;\n if (!conditions || conditions.length === 0) {\n // Default to ready if no conditions exist (policy is healthy by default)\n return { status: 'ready', message: 'Policy is active' };\n }\n\n const readyCondition = conditions.find((c: Condition) => c.type === 'Ready');\n if (!readyCondition) {\n // No Ready condition means policy is healthy (default state)\n return { status: 'ready', message: 'Policy is active' };\n }\n\n if (readyCondition.status === 'True') {\n return { status: 'ready', message: readyCondition.message || 'All rules compiled successfully' };\n } else if (readyCondition.status === 'False') {\n return { status: 'error', message: readyCondition.message || readyCondition.reason || 'Rule compilation failed' };\n }\n\n return { status: 'pending', message: readyCondition.message || 'Status unknown' };\n };\n\n const policyStatus = getPolicyStatus();\n\n return (\n <TooltipProvider delayDuration={0}>\n <Card className={`rounded-xl ${className}`}>\n {/* Header */}\n <CardHeader className=\"flex flex-row justify-between items-center p-4 border-b border-border space-y-0\">\n <div className=\"flex items-center gap-3\">\n {editor.isNew ? (\n <div className=\"flex flex-col gap-0.5\">\n <Label htmlFor=\"policy-name\" className=\"text-xs text-muted-foreground\">\n Policy Name\n </Label>\n <Input\n id=\"policy-name\"\n type=\"text\"\n className=\"w-[300px] text-base font-medium\"\n value={editor.name}\n onChange={(e) => editor.setName(e.target.value)}\n placeholder=\"e.g., httpproxy-policy\"\n />\n </div>\n ) : (\n <div className=\"flex flex-col gap-0.5\">\n <div className=\"flex items-center gap-1.5\">\n {policyStatus && (\n <Tooltip delayDuration={300}>\n <TooltipTrigger asChild>\n <span\n className={`w-2 h-2 rounded-full ${\n policyStatus.status === 'ready'\n ? 'bg-green-500'\n : policyStatus.status === 'error'\n ? 'bg-red-500'\n : 'bg-yellow-500'\n }`}\n aria-label={`Policy status: ${policyStatus.status}`}\n />\n </TooltipTrigger>\n <TooltipContent>\n <p className=\"text-xs\">{policyStatus.message}</p>\n </TooltipContent>\n </Tooltip>\n )}\n <h2 className=\"m-0 text-xl font-semibold text-foreground leading-tight\">\n {editor.spec.resource.kind || 'Untitled Policy'}\n </h2>\n </div>\n <div className=\"flex items-center gap-2 text-xs text-muted-foreground\">\n {editor.spec.resource.apiGroup && (\n <>\n <span>API Group: {editor.spec.resource.apiGroup}</span>\n <span className=\"text-muted-foreground/50\">•</span>\n </>\n )}\n <span>Resource: {editor.name}</span>\n <Tooltip delayDuration={500}>\n <TooltipTrigger asChild>\n <button\n onClick={handleCopyResourceName}\n className=\"inline-flex items-center justify-center p-0.5 rounded hover:bg-gray-100 dark:hover:bg-gray-800 transition-opacity cursor-pointer\"\n aria-label=\"Copy resource name\"\n >\n {isCopied ? (\n <Check className=\"h-3 w-3 text-green-600 dark:text-green-400\" />\n ) : (\n <Copy className=\"h-3 w-3 text-gray-500 dark:text-gray-400\" />\n )}\n </button>\n </TooltipTrigger>\n <TooltipContent>\n <p className=\"text-xs\">Click to copy</p>\n </TooltipContent>\n </Tooltip>\n </div>\n </div>\n )}\n {editor.isDirty && (\n <Badge variant=\"warning\">\n Unsaved changes\n </Badge>\n )}\n </div>\n\n <div className=\"flex gap-2\">\n {onCancel && (\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={onCancel}\n disabled={editor.isSaving}\n className=\"h-7 text-xs\"\n >\n Cancel\n </Button>\n )}\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleSave(true)}\n disabled={!canSave || editor.isSaving}\n title=\"Validate without saving\"\n className=\"h-7 text-xs\"\n >\n Validate\n </Button>\n <Button\n type=\"button\"\n size=\"sm\"\n onClick={() => handleSave(false)}\n disabled={!canSave || editor.isSaving || !editor.isDirty}\n className=\"bg-[#BF9595] text-[#0C1D31] border-[#BF9595] hover:bg-[#A88080] hover:border-[#A88080] h-7 text-xs\"\n >\n {editor.isSaving ? (\n <>\n <span className=\"w-3.5 h-3.5 border-2 border-border border-t-[#BF9595] rounded-full animate-spin\" />\n Saving...\n </>\n ) : (\n 'Save Policy'\n )}\n </Button>\n </div>\n </CardHeader>\n\n {/* Error Display */}\n <ApiErrorAlert error={editor.error} className=\"mx-4 mt-3\" errorFormatter={errorFormatter} />\n\n {/* Loading State */}\n {editor.isLoading && (\n <div className=\"flex items-center justify-center gap-2 py-8 text-muted-foreground\">\n <span className=\"w-5 h-5 border-[3px] border-border border-t-[#BF9595] rounded-full animate-spin\" />\n Loading policy...\n </div>\n )}\n\n {/* Main Content */}\n {!editor.isLoading && (\n <CardContent className=\"p-4\">\n <Tabs defaultValue=\"activity\" value={activeTab} onValueChange={setActiveTab} className=\"w-full\">\n <TabsList className=\"grid w-full grid-cols-2 mb-4\">\n <TabsTrigger value=\"activity\">Activity</TabsTrigger>\n <TabsTrigger value=\"editor\">Editor</TabsTrigger>\n </TabsList>\n\n {/* Activity Tab */}\n <TabsContent value=\"activity\" className=\"mt-0\">\n <PolicyActivityView\n client={client}\n policyResource={editor.spec.resource}\n policyName={editor.name}\n onResourceClick={onResourceClick}\n errorFormatter={errorFormatter}\n />\n </TabsContent>\n\n {/* Editor Tab */}\n <TabsContent value=\"editor\" className=\"mt-0\">\n <div className=\"flex flex-col gap-4\">\n <PolicyResourceForm\n resource={editor.spec.resource}\n onChange={editor.setResource}\n client={client}\n isEditMode={!editor.isNew}\n />\n\n <PolicyRuleList\n auditRules={editor.spec.auditRules || []}\n eventRules={editor.spec.eventRules || []}\n policyResource={editor.spec.resource}\n apiClient={client}\n onAuditRulesChange={editor.setAuditRules}\n onEventRulesChange={editor.setEventRules}\n />\n\n {/* Danger Zone - Delete Policy (only for existing policies) */}\n {!editor.isNew && (\n <div className=\"mt-6 pt-4 border-t border-border\">\n <div className=\"rounded-lg border border-destructive/30 bg-destructive/5 p-4\">\n <div className=\"flex items-start gap-3\">\n <div className=\"flex-1\">\n <h3 className=\"text-base font-semibold text-foreground mb-1.5 flex items-center gap-2\">\n <AlertTriangle className=\"h-5 w-5 text-destructive\" />\n Danger Zone\n </h3>\n <p className=\"text-sm text-muted-foreground mb-3\">\n Deleting this policy will stop translating audit logs and events for{' '}\n <strong className=\"text-foreground\">\n {editor.spec.resource.kind}\n </strong>{' '}\n resources. Existing activities will be preserved, but no new activities will be generated.\n </p>\n <Button\n variant=\"destructive\"\n size=\"sm\"\n onClick={() => setShowDeleteDialog(true)}\n className=\"h-8 text-xs\"\n >\n <Trash2 className=\"h-3.5 w-3.5 mr-1.5\" />\n Delete Policy\n </Button>\n </div>\n </div>\n </div>\n </div>\n )}\n </div>\n </TabsContent>\n </Tabs>\n </CardContent>\n )}\n\n {/* Delete Confirmation Dialog */}\n <Dialog open={showDeleteDialog} onOpenChange={setShowDeleteDialog}>\n <DialogContent className=\"max-w-[500px]\">\n <DialogHeader>\n <DialogTitle>Delete Policy</DialogTitle>\n <DialogDescription>\n Are you sure you want to delete{' '}\n <strong className=\"text-foreground\">{editor.name}</strong>?\n </DialogDescription>\n </DialogHeader>\n <Alert variant=\"destructive\" className=\"mt-2\">\n <AlertCircle className=\"h-4 w-4\" />\n <AlertDescription>\n <strong>This action cannot be undone.</strong>\n <br />\n Activities already generated by this policy will remain in the system,\n but no new activities will be created for {editor.spec.resource.kind} resources.\n </AlertDescription>\n </Alert>\n <DialogFooter>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => setShowDeleteDialog(false)}\n disabled={isDeleting}\n className=\"h-8 text-xs\"\n >\n Cancel\n </Button>\n <Button\n variant=\"destructive\"\n size=\"sm\"\n onClick={handleDelete}\n disabled={isDeleting}\n className=\"h-8 text-xs\"\n >\n {isDeleting ? (\n <>\n <span className=\"w-3.5 h-3.5 border-2 border-white border-t-transparent rounded-full animate-spin mr-2\" />\n Deleting...\n </>\n ) : (\n <>\n <Trash2 className=\"h-3.5 w-3.5 mr-1.5\" />\n Delete Policy\n </>\n )}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n </Card>\n </TooltipProvider>\n );\n}\n","import { Skeleton } from './ui/skeleton';\nimport { Card } from './ui/card';\n\nexport interface PolicyActivityViewSkeletonProps {\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * PolicyActivityViewSkeleton renders a loading placeholder that matches PolicyActivityView layout\n */\nexport function PolicyActivityViewSkeleton({\n className = '',\n}: PolicyActivityViewSkeletonProps) {\n return (\n <div className={className}>\n {/* Tab header skeleton - matches \"Policy Events | Activity\" order */}\n <div className=\"flex items-center gap-4 mb-4\">\n <Skeleton className=\"h-5 w-24\" />\n <span className=\"text-muted-foreground/30\">|</span>\n <Skeleton className=\"h-5 w-16\" />\n </div>\n\n {/* Filter bar skeleton */}\n <div className=\"flex items-center gap-2 mb-3\">\n <Skeleton className=\"h-7 w-24\" />\n <Skeleton className=\"h-7 w-20\" />\n <Skeleton className=\"h-7 w-28\" />\n </div>\n\n {/* Feed items skeleton */}\n <Card className=\"p-3\">\n <div className=\"space-y-2\">\n {Array.from({ length: 5 }).map((_, index) => (\n <Card key={index} className=\"p-2\">\n <div className=\"flex items-center gap-2\">\n {/* Avatar skeleton */}\n <Skeleton className=\"w-4 h-4 rounded-full shrink-0\" />\n {/* Summary skeleton */}\n <Skeleton className=\"h-3 flex-1\" />\n {/* Timestamp skeleton */}\n <Skeleton className=\"h-3 w-16 shrink-0\" />\n {/* Expand button skeleton */}\n <Skeleton className=\"h-5 w-5 shrink-0\" />\n </div>\n </Card>\n ))}\n </div>\n </Card>\n </div>\n );\n}\n","import { useEffect, useCallback, useState } from 'react';\nimport type { ActivityPolicy, Condition } from '../types/policy';\nimport type { ResourceRef, ErrorFormatter } from '../types/activity';\nimport { ActivityApiClient } from '../api/client';\nimport { PolicyActivityView } from './PolicyActivityView';\nimport { PolicyActivityViewSkeleton } from './PolicyActivityViewSkeleton';\nimport { Button } from './ui/button';\nimport { Card, CardHeader, CardContent } from './ui/card';\nimport { Badge } from './ui/badge';\nimport { ApiErrorAlert } from './ApiErrorAlert';\nimport { Alert, AlertDescription } from './ui/alert';\nimport { AlertTriangle, AlertCircle, Copy, Check, Edit } from 'lucide-react';\nimport { Skeleton } from './ui/skeleton';\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from './ui/tooltip';\n\nexport interface PolicyDetailViewProps {\n /** API client instance */\n client: ActivityApiClient;\n /** Policy name to display */\n policyName: string;\n /** Callback when edit button is clicked */\n onEdit?: () => void;\n /** Handler for resource link clicks in activity summaries */\n onResourceClick?: (resource: ResourceRef) => void;\n /** Additional CSS class */\n className?: string;\n /** Custom error formatter for customizing error messages */\n errorFormatter?: ErrorFormatter;\n}\n\n/**\n * PolicyDetailView displays a read-only view of an ActivityPolicy\n * with Activity/Events tabs and an Edit button\n */\nexport function PolicyDetailView({\n client,\n policyName,\n onEdit,\n onResourceClick,\n className = '',\n errorFormatter,\n}: PolicyDetailViewProps) {\n const [policy, setPolicy] = useState<ActivityPolicy | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n const [isCopied, setIsCopied] = useState(false);\n\n // Load policy on mount\n useEffect(() => {\n let mounted = true;\n\n const loadPolicy = async () => {\n setIsLoading(true);\n setError(null);\n\n try {\n const loaded = await client.getPolicy(policyName);\n if (mounted) {\n setPolicy(loaded);\n }\n } catch (err) {\n if (mounted) {\n setError(err instanceof Error ? err : new Error('Failed to load policy'));\n }\n } finally {\n if (mounted) {\n setIsLoading(false);\n }\n }\n };\n\n loadPolicy();\n\n return () => {\n mounted = false;\n };\n }, [client, policyName]);\n\n // Handle copy resource name\n const handleCopyResourceName = useCallback(async () => {\n if (policyName) {\n try {\n await navigator.clipboard.writeText(policyName);\n setIsCopied(true);\n setTimeout(() => setIsCopied(false), 2000);\n } catch (err) {\n console.error('Failed to copy resource name:', err);\n }\n }\n }, [policyName]);\n\n // Get policy status from conditions\n const getPolicyStatus = (): {\n status: 'ready' | 'error' | 'pending' | 'unknown';\n message?: string;\n } | null => {\n if (!policy) {\n return null;\n }\n\n const conditions = policy.status?.conditions;\n if (!conditions || conditions.length === 0) {\n return null;\n }\n\n const readyCondition = conditions.find((c: Condition) => c.type === 'Ready');\n if (!readyCondition) {\n return null;\n }\n\n if (readyCondition.status === 'True') {\n return { status: 'ready', message: readyCondition.message || 'All rules compiled successfully' };\n } else if (readyCondition.status === 'False') {\n return { status: 'error', message: readyCondition.message || readyCondition.reason || 'Rule compilation failed' };\n }\n\n return { status: 'pending', message: readyCondition.message || 'Status unknown' };\n };\n\n const policyStatus = getPolicyStatus();\n const isUnhealthy = policyStatus && policyStatus.status !== 'ready';\n\n return (\n <TooltipProvider delayDuration={0}>\n <Card className={`rounded-xl ${className}`}>\n {/* Header */}\n <CardHeader className=\"flex flex-row justify-between items-center p-6 border-b border-border space-y-0\">\n <div className=\"flex items-center gap-4\">\n {isLoading && (\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex items-center gap-2\">\n <Skeleton className=\"w-2 h-2 rounded-full\" />\n <Skeleton className=\"h-6 w-32\" />\n </div>\n <div className=\"flex items-center gap-2\">\n <Skeleton className=\"h-3 w-24\" />\n <Skeleton className=\"h-3 w-32\" />\n </div>\n </div>\n )}\n {!isLoading && policy && (\n <div className=\"flex flex-col gap-1\">\n <h2 className=\"m-0 text-xl font-semibold text-foreground leading-tight flex items-center gap-2\">\n <Tooltip delayDuration={500}>\n <TooltipTrigger asChild>\n <span\n className={`w-2 h-2 rounded-full ${\n policyStatus?.status === 'ready'\n ? 'bg-green-500'\n : policyStatus?.status === 'error'\n ? 'bg-red-500'\n : policyStatus?.status === 'pending'\n ? 'bg-yellow-500'\n : 'bg-green-500'\n }`}\n />\n </TooltipTrigger>\n <TooltipContent>\n <p className=\"text-xs\">\n {policyStatus?.message || 'Policy is active'}\n </p>\n </TooltipContent>\n </Tooltip>\n {policy.spec.resource.kind || 'Untitled Policy'}\n </h2>\n <div className=\"flex items-center gap-2 text-xs text-muted-foreground\">\n {policy.spec.resource.apiGroup && (\n <>\n <span>API Group: {policy.spec.resource.apiGroup}</span>\n <span className=\"text-muted-foreground/50\">•</span>\n </>\n )}\n <span>Resource: {policyName}</span>\n <Tooltip delayDuration={500}>\n <TooltipTrigger asChild>\n <button\n onClick={handleCopyResourceName}\n className=\"inline-flex items-center justify-center p-0.5 rounded hover:bg-gray-100 dark:hover:bg-gray-800 transition-opacity cursor-pointer\"\n aria-label=\"Copy resource name\"\n >\n {isCopied ? (\n <Check className=\"h-3 w-3 text-green-600 dark:text-green-400\" />\n ) : (\n <Copy className=\"h-3 w-3 text-gray-500 dark:text-gray-400\" />\n )}\n </button>\n </TooltipTrigger>\n <TooltipContent>\n <p className=\"text-xs\">Click to copy</p>\n </TooltipContent>\n </Tooltip>\n </div>\n </div>\n )}\n </div>\n\n <div className=\"flex gap-3\">\n {onEdit && (\n <Button\n type=\"button\"\n size=\"sm\"\n onClick={onEdit}\n className=\"bg-[#BF9595] text-[#0C1D31] border-[#BF9595] hover:bg-[#A88080] hover:border-[#A88080] h-7 text-xs\"\n >\n <Edit className=\"h-3.5 w-3.5 mr-1.5\" />\n Edit Policy\n </Button>\n )}\n </div>\n </CardHeader>\n\n {/* Error Display */}\n <ApiErrorAlert error={error} className=\"mx-6 mt-4\" errorFormatter={errorFormatter} />\n\n {/* Policy Health Status Banner */}\n {isUnhealthy && policyStatus && (\n <Alert\n variant={policyStatus.status === 'error' ? 'destructive' : 'warning'}\n className=\"mx-6 mt-4\"\n >\n {policyStatus.status === 'error' ? (\n <AlertCircle className=\"h-4 w-4\" />\n ) : (\n <AlertTriangle className=\"h-4 w-4\" />\n )}\n <AlertDescription>\n <strong>\n {policyStatus.status === 'error' ? 'Policy Error: ' : 'Policy Pending: '}\n </strong>\n {policyStatus.message}\n </AlertDescription>\n </Alert>\n )}\n\n {/* Loading State */}\n {isLoading && (\n <CardContent className=\"p-6\">\n <PolicyActivityViewSkeleton />\n </CardContent>\n )}\n\n {/* Main Content */}\n {!isLoading && policy && (\n <CardContent className=\"p-6\">\n <PolicyActivityView\n client={client}\n policyResource={policy.spec.resource}\n policyName={policyName}\n onResourceClick={onResourceClick}\n errorFormatter={errorFormatter}\n />\n </CardContent>\n )}\n </Card>\n </TooltipProvider>\n );\n}\n","import { useEffect, useCallback, useState } from 'react';\nimport type { Condition } from '../types/policy';\nimport type { ErrorFormatter } from '../types/activity';\nimport { ActivityApiClient } from '../api/client';\nimport { usePolicyEditor, type UsePolicyEditorResult } from '../hooks/usePolicyEditor';\nimport { PolicyResourceForm } from './PolicyResourceForm';\nimport { PolicyRuleList } from './PolicyRuleList';\nimport { Input } from './ui/input';\nimport { Button } from './ui/button';\nimport { Card, CardHeader, CardContent } from './ui/card';\nimport { Badge } from './ui/badge';\nimport { Label } from './ui/label';\nimport { ApiErrorAlert } from './ApiErrorAlert';\nimport { Alert, AlertDescription } from './ui/alert';\nimport { AlertTriangle, AlertCircle, Trash2, Copy, Check } from 'lucide-react';\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from './ui/dialog';\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from './ui/tooltip';\n\nexport interface PolicyEditViewProps {\n /** API client instance */\n client: ActivityApiClient;\n /** Policy name to edit (undefined for new policy) */\n policyName?: string;\n /** Callback when save succeeds */\n onSaveSuccess?: (policyName: string) => void;\n /** Callback when cancel is clicked */\n onCancel?: () => void;\n /** Additional CSS class */\n className?: string;\n /** Custom error formatter for customizing error messages */\n errorFormatter?: ErrorFormatter;\n}\n\n/**\n * PolicyEditView provides an editor for creating/editing ActivityPolicies\n * with Editor and Preview tabs (Activity tab is in the separate detail view)\n */\nexport function PolicyEditView({\n client,\n policyName,\n onSaveSuccess,\n onCancel,\n className = '',\n errorFormatter,\n}: PolicyEditViewProps) {\n // Editor state\n const editor: UsePolicyEditorResult = usePolicyEditor({\n client,\n initialPolicyName: policyName,\n });\n\n // Delete confirmation state\n const [showDeleteDialog, setShowDeleteDialog] = useState(false);\n const [isDeleting, setIsDeleting] = useState(false);\n\n // Copy state\n const [isCopied, setIsCopied] = useState(false);\n\n // Load existing policy on mount\n useEffect(() => {\n if (policyName) {\n editor.load(policyName).catch((err) => {\n console.error('Failed to load policy:', err);\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [policyName]);\n\n // Handle save\n const handleSave = useCallback(\n async (dryRun: boolean = false) => {\n try {\n const result = await editor.save(dryRun);\n if (!dryRun && onSaveSuccess && result.metadata?.name) {\n onSaveSuccess(result.metadata.name);\n }\n } catch (err) {\n // Error is stored in editor.error\n console.error('Save failed:', err);\n }\n },\n [editor, onSaveSuccess]\n );\n\n // Handle delete\n const handleDelete = useCallback(async () => {\n if (!policyName) return;\n\n setIsDeleting(true);\n try {\n await client.deletePolicy(policyName);\n setShowDeleteDialog(false);\n if (onSaveSuccess) {\n // Navigate away after successful delete\n onSaveSuccess('');\n }\n } catch (err) {\n console.error('Failed to delete policy:', err);\n } finally {\n setIsDeleting(false);\n }\n }, [client, policyName, onSaveSuccess]);\n\n // Handle copy resource name\n const handleCopyResourceName = useCallback(async () => {\n if (editor.name) {\n try {\n await navigator.clipboard.writeText(editor.name);\n setIsCopied(true);\n setTimeout(() => setIsCopied(false), 2000);\n } catch (err) {\n console.error('Failed to copy resource name:', err);\n }\n }\n }, [editor.name]);\n\n // Validation\n const canSave =\n editor.name.trim() !== '' &&\n editor.spec.resource.apiGroup.trim() !== '' &&\n editor.spec.resource.kind.trim() !== '';\n\n // Get policy status from conditions\n const getPolicyStatus = (): {\n status: 'ready' | 'error' | 'pending' | 'unknown';\n message?: string;\n } | null => {\n if (!editor.policy || editor.isNew) {\n return null; // No status for new policies\n }\n\n const conditions = editor.policy.status?.conditions;\n if (!conditions || conditions.length === 0) {\n return null;\n }\n\n const readyCondition = conditions.find((c: Condition) => c.type === 'Ready');\n if (!readyCondition) {\n return null;\n }\n\n if (readyCondition.status === 'True') {\n return { status: 'ready', message: readyCondition.message || 'All rules compiled successfully' };\n } else if (readyCondition.status === 'False') {\n return { status: 'error', message: readyCondition.message || readyCondition.reason || 'Rule compilation failed' };\n }\n\n return { status: 'pending', message: readyCondition.message || 'Status unknown' };\n };\n\n const policyStatus = getPolicyStatus();\n const isUnhealthy = policyStatus && policyStatus.status !== 'ready';\n\n return (\n <TooltipProvider delayDuration={0}>\n <Card className={`rounded-xl ${className}`}>\n {/* Header */}\n <CardHeader className=\"flex flex-row justify-between items-center p-4 border-b border-border space-y-0\">\n <div className=\"flex items-center gap-3\">\n {editor.isNew ? (\n <div className=\"flex flex-col gap-0.5\">\n <Label htmlFor=\"policy-name\" className=\"text-xs text-muted-foreground\">\n Policy Name\n </Label>\n <Input\n id=\"policy-name\"\n type=\"text\"\n className=\"w-[300px] text-base font-medium\"\n value={editor.name}\n onChange={(e) => editor.setName(e.target.value)}\n placeholder=\"e.g., httpproxy-policy\"\n />\n </div>\n ) : (\n <div className=\"flex flex-col gap-0.5\">\n <h2 className=\"m-0 text-xl font-semibold text-foreground leading-tight\">\n {editor.spec.resource.kind || 'Untitled Policy'}\n </h2>\n <div className=\"flex items-center gap-1.5 text-xs text-muted-foreground\">\n {editor.spec.resource.apiGroup && (\n <>\n <span>API Group: {editor.spec.resource.apiGroup}</span>\n <span className=\"text-muted-foreground/50\">•</span>\n </>\n )}\n <span>Resource: {editor.name}</span>\n <Tooltip delayDuration={500}>\n <TooltipTrigger asChild>\n <button\n onClick={handleCopyResourceName}\n className=\"inline-flex items-center justify-center p-0.5 rounded hover:bg-gray-100 dark:hover:bg-gray-800 transition-opacity cursor-pointer\"\n aria-label=\"Copy resource name\"\n >\n {isCopied ? (\n <Check className=\"h-3 w-3 text-green-600 dark:text-green-400\" />\n ) : (\n <Copy className=\"h-3 w-3 text-gray-500 dark:text-gray-400\" />\n )}\n </button>\n </TooltipTrigger>\n <TooltipContent>\n <p className=\"text-xs\">Click to copy</p>\n </TooltipContent>\n </Tooltip>\n </div>\n </div>\n )}\n {editor.isDirty && (\n <Badge variant=\"warning\">\n Unsaved changes\n </Badge>\n )}\n </div>\n\n <div className=\"flex gap-2\">\n {onCancel && (\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={onCancel}\n disabled={editor.isSaving}\n className=\"h-7 text-xs\"\n >\n Cancel\n </Button>\n )}\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleSave(true)}\n disabled={!canSave || editor.isSaving}\n title=\"Validate without saving\"\n className=\"h-7 text-xs\"\n >\n Validate\n </Button>\n <Button\n type=\"button\"\n size=\"sm\"\n onClick={() => handleSave(false)}\n disabled={!canSave || editor.isSaving || !editor.isDirty}\n className=\"bg-[#BF9595] text-[#0C1D31] border-[#BF9595] hover:bg-[#A88080] hover:border-[#A88080] h-7 text-xs\"\n >\n {editor.isSaving ? (\n <>\n <span className=\"w-3.5 h-3.5 border-2 border-border border-t-[#BF9595] rounded-full animate-spin\" />\n Saving...\n </>\n ) : (\n 'Save Policy'\n )}\n </Button>\n </div>\n </CardHeader>\n\n {/* Error Display */}\n <ApiErrorAlert error={editor.error} className=\"mx-4 mt-3\" errorFormatter={errorFormatter} />\n\n {/* Policy Health Status Banner */}\n {isUnhealthy && policyStatus && (\n <Alert\n variant={policyStatus.status === 'error' ? 'destructive' : 'warning'}\n className=\"mx-4 mt-3\"\n >\n {policyStatus.status === 'error' ? (\n <AlertCircle className=\"h-4 w-4\" />\n ) : (\n <AlertTriangle className=\"h-4 w-4\" />\n )}\n <AlertDescription>\n <strong>\n {policyStatus.status === 'error' ? 'Policy Error: ' : 'Policy Pending: '}\n </strong>\n {policyStatus.message}\n </AlertDescription>\n </Alert>\n )}\n\n {/* Loading State */}\n {editor.isLoading && (\n <div className=\"flex items-center justify-center gap-2 py-8 text-muted-foreground\">\n <span className=\"w-5 h-5 border-[3px] border-border border-t-[#BF9595] rounded-full animate-spin\" />\n Loading policy...\n </div>\n )}\n\n {/* Main Content */}\n {!editor.isLoading && (\n <CardContent className=\"p-4\">\n <div className=\"flex flex-col gap-4\">\n <PolicyResourceForm\n resource={editor.spec.resource}\n onChange={editor.setResource}\n client={client}\n isEditMode={!editor.isNew}\n />\n\n <PolicyRuleList\n auditRules={editor.spec.auditRules || []}\n eventRules={editor.spec.eventRules || []}\n policyResource={editor.spec.resource}\n apiClient={client}\n onAuditRulesChange={editor.setAuditRules}\n onEventRulesChange={editor.setEventRules}\n />\n\n {/* Danger Zone - Delete Policy (only for existing policies) */}\n {!editor.isNew && (\n <div className=\"mt-6 pt-4 border-t border-border\">\n <div className=\"rounded-lg border border-destructive/30 bg-destructive/5 p-4\">\n <div className=\"flex items-start gap-3\">\n <div className=\"flex-1\">\n <h3 className=\"text-base font-semibold text-foreground mb-1.5 flex items-center gap-2\">\n <AlertTriangle className=\"h-5 w-5 text-destructive\" />\n Danger Zone\n </h3>\n <p className=\"text-sm text-muted-foreground mb-3\">\n Deleting this policy will stop translating audit logs and events for{' '}\n <strong className=\"text-foreground\">\n {editor.spec.resource.kind}\n </strong>{' '}\n resources. Existing activities will be preserved, but no new activities will be generated.\n </p>\n <Button\n variant=\"destructive\"\n size=\"sm\"\n onClick={() => setShowDeleteDialog(true)}\n className=\"h-8 text-xs\"\n >\n <Trash2 className=\"h-3.5 w-3.5 mr-1.5\" />\n Delete Policy\n </Button>\n </div>\n </div>\n </div>\n </div>\n )}\n </div>\n </CardContent>\n )}\n\n {/* Delete Confirmation Dialog */}\n <Dialog open={showDeleteDialog} onOpenChange={setShowDeleteDialog}>\n <DialogContent className=\"max-w-[500px]\">\n <DialogHeader>\n <DialogTitle>Delete Policy</DialogTitle>\n <DialogDescription>\n Are you sure you want to delete{' '}\n <strong className=\"text-foreground\">{editor.name}</strong>?\n </DialogDescription>\n </DialogHeader>\n <Alert variant=\"destructive\" className=\"mt-2\">\n <AlertCircle className=\"h-4 w-4\" />\n <AlertDescription>\n <strong>This action cannot be undone.</strong>\n <br />\n Activities already generated by this policy will remain in the system,\n but no new activities will be created for {editor.spec.resource.kind} resources.\n </AlertDescription>\n </Alert>\n <DialogFooter>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => setShowDeleteDialog(false)}\n disabled={isDeleting}\n className=\"h-8 text-xs\"\n >\n Cancel\n </Button>\n <Button\n variant=\"destructive\"\n size=\"sm\"\n onClick={handleDelete}\n disabled={isDeleting}\n className=\"h-8 text-xs\"\n >\n {isDeleting ? (\n <>\n <span className=\"w-3.5 h-3.5 border-2 border-white border-t-transparent rounded-full animate-spin mr-2\" />\n Deleting...\n </>\n ) : (\n <>\n <Trash2 className=\"h-3.5 w-3.5 mr-1.5\" />\n Delete Policy\n </>\n )}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n </Card>\n </TooltipProvider>\n );\n}\n","import { useState } from 'react';\nimport type { ActivityPolicyRule } from '../types/policy';\nimport { Button } from './ui/button';\nimport { Card, CardContent, CardHeader } from './ui/card';\nimport { Label } from './ui/label';\nimport { Textarea } from './ui/textarea';\n\nexport interface PolicyRuleEditorProps {\n /** The rule being edited */\n rule: ActivityPolicyRule;\n /** Rule index for display */\n index: number;\n /** Rule type (audit or event) for context-sensitive help */\n ruleType: 'audit' | 'event';\n /** Whether this rule is highlighted (e.g., matched in preview) */\n isHighlighted?: boolean;\n /** Callback when rule changes */\n onChange: (rule: ActivityPolicyRule) => void;\n /** Callback to delete this rule */\n onDelete: () => void;\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * CEL syntax help for audit rules\n */\nconst AUDIT_CEL_HELP = {\n variables: [\n { name: 'audit.verb', description: 'HTTP verb (create, update, patch, delete, get, list, watch)' },\n { name: 'audit.user.username', description: 'Username of the actor' },\n { name: 'audit.user.groups', description: 'Groups the actor belongs to' },\n { name: 'audit.objectRef.name', description: 'Name of the resource' },\n { name: 'audit.objectRef.namespace', description: 'Namespace of the resource' },\n { name: 'audit.objectRef.subresource', description: 'Subresource (e.g., \"status\")' },\n { name: 'audit.responseStatus.code', description: 'HTTP response status code' },\n ],\n examples: [\n 'audit.verb == \"create\"',\n 'audit.verb in [\"create\", \"update\", \"patch\"]',\n 'audit.verb == \"update\" && audit.objectRef.subresource == \"status\"',\n 'audit.responseStatus.code >= 200 && audit.responseStatus.code < 300',\n ],\n};\n\n/**\n * CEL syntax help for event rules\n */\nconst EVENT_CEL_HELP = {\n variables: [\n { name: 'event.type', description: 'Event type: \"Normal\" or \"Warning\"' },\n { name: 'event.reason', description: 'Short reason (e.g., \"Created\", \"Ready\", \"Failed\")' },\n { name: 'event.note', description: 'Human-readable description of the event' },\n { name: 'event.regarding.name', description: 'Name of the regarding resource' },\n { name: 'event.regarding.namespace', description: 'Namespace of the regarding resource' },\n { name: 'event.reportingController', description: 'Controller that emitted the event' },\n ],\n examples: [\n 'event.reason == \"Ready\"',\n 'event.type == \"Warning\"',\n 'event.reason in [\"Created\", \"Updated\", \"Deleted\"]',\n 'event.note.contains(\"failed\")',\n ],\n};\n\n/**\n * Summary template help\n */\nconst SUMMARY_HELP = {\n variables: [\n { name: 'actor.name', description: 'Display name of the actor' },\n { name: 'actor.email', description: 'Email of the actor (if available)' },\n { name: 'resource.name', description: 'Name of the resource' },\n { name: 'resource.namespace', description: 'Namespace of the resource' },\n { name: 'kindLabel', description: 'Human-readable kind label (e.g., \"HTTP Proxy\")' },\n { name: 'kindLabelPlural', description: 'Plural kind label (e.g., \"HTTP Proxies\")' },\n ],\n examples: [\n '{{ actor.name }} created {{ kindLabel }} {{ resource.name }}',\n '{{ actor.name }} updated the status of {{ kindLabel }} {{ resource.name }}',\n '{{ kindLabel }} {{ resource.name }} is now ready',\n '{{ kindLabel }} {{ resource.name }} failed: {{ event.note }}',\n ],\n};\n\n/**\n * PolicyRuleEditor provides editing UI for a single policy rule\n */\nexport function PolicyRuleEditor({\n rule,\n index,\n ruleType,\n isHighlighted = false,\n onChange,\n onDelete,\n className = '',\n}: PolicyRuleEditorProps) {\n const [showMatchHelp, setShowMatchHelp] = useState(false);\n const [showSummaryHelp, setShowSummaryHelp] = useState(false);\n\n const celHelp = ruleType === 'audit' ? AUDIT_CEL_HELP : EVENT_CEL_HELP;\n\n const handleMatchChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n onChange({ ...rule, match: e.target.value });\n };\n\n const handleSummaryChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n onChange({ ...rule, summary: e.target.value });\n };\n\n const insertMatchExample = (example: string) => {\n onChange({ ...rule, match: example });\n };\n\n const insertSummaryExample = (example: string) => {\n onChange({ ...rule, summary: example });\n };\n\n return (\n <Card\n className={`mb-3 transition-all duration-200 ${\n isHighlighted\n ? 'border-emerald-600 bg-emerald-50'\n : 'bg-muted'\n } ${className}`}\n >\n <CardHeader className=\"flex flex-row justify-between items-center p-3 pb-0\">\n <span\n className={`text-xs font-semibold uppercase tracking-wide ${\n isHighlighted ? 'text-emerald-600' : 'text-muted-foreground'\n }`}\n >\n {ruleType === 'audit' ? 'Audit' : 'Event'} Rule #{index + 1}\n </span>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"w-6 h-6 text-xl leading-none text-muted-foreground hover:bg-red-50 hover:text-red-600 dark:hover:bg-red-950/50 dark:hover:text-red-400\"\n onClick={onDelete}\n title=\"Delete rule\"\n >\n ×\n </Button>\n </CardHeader>\n\n <CardContent className=\"p-3\">\n {/* Match Expression */}\n <div className=\"mb-3\">\n <div className=\"flex justify-between items-center mb-1\">\n <Label htmlFor={`rule-${index}-match`}>\n Match Expression (CEL)\n </Label>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"px-2 py-0.5 h-auto text-xs\"\n onClick={() => setShowMatchHelp(!showMatchHelp)}\n >\n {showMatchHelp ? 'Hide Help' : 'Show Help'}\n </Button>\n </div>\n <Textarea\n id={`rule-${index}-match`}\n className=\"font-mono text-sm resize-y min-h-[60px]\"\n value={rule.match}\n onChange={handleMatchChange}\n placeholder={`e.g., ${celHelp.examples[0]}`}\n rows={2}\n spellCheck={false}\n />\n {showMatchHelp && (\n <div className=\"mt-2 p-3 bg-background border border-border rounded-md text-xs\">\n <div className=\"mb-3 last:mb-0\">\n <strong className=\"block mb-1.5 text-foreground\">Available Variables:</strong>\n <ul className=\"m-0 pl-5 list-disc\">\n {celHelp.variables.map((v) => (\n <li key={v.name} className=\"mb-0.5\">\n <code className=\"bg-muted px-1.5 py-0.5 rounded text-xs\">{v.name}</code> - {v.description}\n </li>\n ))}\n </ul>\n </div>\n <div className=\"mb-3 last:mb-0\">\n <strong className=\"block mb-1.5 text-foreground\">Examples:</strong>\n <ul className=\"m-0 p-0 list-none\">\n {celHelp.examples.map((ex, i) => (\n <li key={i} className=\"flex items-center gap-2 mb-1 px-2 py-1 bg-muted rounded\">\n <code className=\"flex-1 text-xs break-all\">{ex}</code>\n <Button\n type=\"button\"\n size=\"sm\"\n className=\"px-2 py-0.5 h-auto bg-[#E6F59F] border-none text-xs font-medium text-[#0C1D31] uppercase hover:bg-[#d9e88c]\"\n onClick={() => insertMatchExample(ex)}\n >\n Use\n </Button>\n </li>\n ))}\n </ul>\n </div>\n </div>\n )}\n </div>\n\n {/* Summary Template */}\n <div className=\"mb-3 last:mb-0\">\n <div className=\"flex justify-between items-center mb-1\">\n <Label htmlFor={`rule-${index}-summary`}>\n Summary Template (CEL)\n </Label>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"px-2 py-0.5 h-auto text-xs\"\n onClick={() => setShowSummaryHelp(!showSummaryHelp)}\n >\n {showSummaryHelp ? 'Hide Help' : 'Show Help'}\n </Button>\n </div>\n <Textarea\n id={`rule-${index}-summary`}\n className=\"font-mono text-sm resize-y min-h-[60px]\"\n value={rule.summary}\n onChange={handleSummaryChange}\n placeholder={`e.g., ${SUMMARY_HELP.examples[0]}`}\n rows={2}\n spellCheck={false}\n />\n {showSummaryHelp && (\n <div className=\"mt-2 p-3 bg-background border border-border rounded-md text-xs\">\n <div className=\"mb-3 last:mb-0\">\n <strong className=\"block mb-1.5 text-foreground\">Available Variables:</strong>\n <ul className=\"m-0 pl-5 list-disc\">\n {SUMMARY_HELP.variables.map((v) => (\n <li key={v.name} className=\"mb-0.5\">\n <code className=\"bg-muted px-1.5 py-0.5 rounded text-xs\">{'{{ ' + v.name + ' }}'}</code> - {v.description}\n </li>\n ))}\n </ul>\n </div>\n <div className=\"mb-3 last:mb-0\">\n <strong className=\"block mb-1.5 text-foreground\">Examples:</strong>\n <ul className=\"m-0 p-0 list-none\">\n {SUMMARY_HELP.examples.map((ex, i) => (\n <li key={i} className=\"flex items-center gap-2 mb-1 px-2 py-1 bg-muted rounded\">\n <code className=\"flex-1 text-xs break-all\">{ex}</code>\n <Button\n type=\"button\"\n size=\"sm\"\n className=\"px-2 py-0.5 h-auto bg-[#E6F59F] border-none text-xs font-medium text-[#0C1D31] uppercase hover:bg-[#d9e88c]\"\n onClick={() => insertSummaryExample(ex)}\n >\n Use\n </Button>\n </li>\n ))}\n </ul>\n </div>\n </div>\n )}\n </div>\n </CardContent>\n </Card>\n );\n}\n","import type { SampleInputTemplate, PolicyPreviewInput } from '../types/policy';\nimport type { Event } from '../types';\n\nexport interface SampleInputTemplatesProps {\n /** Current input type (audit or event) */\n inputType: 'audit' | 'event';\n /** Callback when a template is selected */\n onSelect: (input: PolicyPreviewInput) => void;\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * Pre-defined audit event templates\n */\nconst AUDIT_TEMPLATES: SampleInputTemplate[] = [\n {\n name: 'Create',\n description: 'Resource creation event',\n type: 'audit',\n input: {\n type: 'audit',\n audit: {\n level: 'RequestResponse',\n auditID: 'audit-create-001',\n stage: 'ResponseComplete',\n requestURI: '/apis/example.com/v1/namespaces/default/examples',\n verb: 'create',\n user: {\n username: 'alice@example.com',\n uid: 'user-alice-123',\n groups: ['users', 'developers'],\n },\n objectRef: {\n apiGroup: 'example.com',\n apiVersion: 'v1',\n resource: 'examples',\n namespace: 'default',\n name: 'my-resource',\n uid: 'res-456-789',\n },\n responseStatus: {\n code: 201,\n status: 'Success',\n },\n requestReceivedTimestamp: new Date().toISOString(),\n stageTimestamp: new Date().toISOString(),\n } as Event,\n },\n },\n {\n name: 'Update',\n description: 'Resource update event (PUT)',\n type: 'audit',\n input: {\n type: 'audit',\n audit: {\n level: 'RequestResponse',\n auditID: 'audit-update-001',\n stage: 'ResponseComplete',\n requestURI: '/apis/example.com/v1/namespaces/default/examples/my-resource',\n verb: 'update',\n user: {\n username: 'bob@example.com',\n uid: 'user-bob-456',\n groups: ['users', 'admins'],\n },\n objectRef: {\n apiGroup: 'example.com',\n apiVersion: 'v1',\n resource: 'examples',\n namespace: 'default',\n name: 'my-resource',\n uid: 'res-456-789',\n },\n responseStatus: {\n code: 200,\n status: 'Success',\n },\n requestReceivedTimestamp: new Date().toISOString(),\n stageTimestamp: new Date().toISOString(),\n } as Event,\n },\n },\n {\n name: 'Patch',\n description: 'Resource patch event',\n type: 'audit',\n input: {\n type: 'audit',\n audit: {\n level: 'RequestResponse',\n auditID: 'audit-patch-001',\n stage: 'ResponseComplete',\n requestURI: '/apis/example.com/v1/namespaces/default/examples/my-resource',\n verb: 'patch',\n user: {\n username: 'carol@example.com',\n uid: 'user-carol-789',\n groups: ['users'],\n },\n objectRef: {\n apiGroup: 'example.com',\n apiVersion: 'v1',\n resource: 'examples',\n namespace: 'default',\n name: 'my-resource',\n uid: 'res-456-789',\n },\n responseStatus: {\n code: 200,\n status: 'Success',\n },\n requestReceivedTimestamp: new Date().toISOString(),\n stageTimestamp: new Date().toISOString(),\n } as Event,\n },\n },\n {\n name: 'Delete',\n description: 'Resource deletion event',\n type: 'audit',\n input: {\n type: 'audit',\n audit: {\n level: 'RequestResponse',\n auditID: 'audit-delete-001',\n stage: 'ResponseComplete',\n requestURI: '/apis/example.com/v1/namespaces/default/examples/my-resource',\n verb: 'delete',\n user: {\n username: 'admin@example.com',\n uid: 'user-admin-000',\n groups: ['users', 'admins', 'cluster-admins'],\n },\n objectRef: {\n apiGroup: 'example.com',\n apiVersion: 'v1',\n resource: 'examples',\n namespace: 'default',\n name: 'my-resource',\n uid: 'res-456-789',\n },\n responseStatus: {\n code: 200,\n status: 'Success',\n },\n requestReceivedTimestamp: new Date().toISOString(),\n stageTimestamp: new Date().toISOString(),\n } as Event,\n },\n },\n {\n name: 'Status Update',\n description: 'Status subresource update',\n type: 'audit',\n input: {\n type: 'audit',\n audit: {\n level: 'RequestResponse',\n auditID: 'audit-status-001',\n stage: 'ResponseComplete',\n requestURI: '/apis/example.com/v1/namespaces/default/examples/my-resource/status',\n verb: 'update',\n user: {\n username: 'system:serviceaccount:kube-system:controller-manager',\n uid: 'sa-controller-123',\n groups: ['system:serviceaccounts', 'system:serviceaccounts:kube-system'],\n },\n objectRef: {\n apiGroup: 'example.com',\n apiVersion: 'v1',\n resource: 'examples',\n subresource: 'status',\n namespace: 'default',\n name: 'my-resource',\n uid: 'res-456-789',\n },\n responseStatus: {\n code: 200,\n status: 'Success',\n },\n requestReceivedTimestamp: new Date().toISOString(),\n stageTimestamp: new Date().toISOString(),\n } as Event,\n },\n },\n];\n\n/**\n * Pre-defined Kubernetes event templates\n */\nconst EVENT_TEMPLATES: SampleInputTemplate[] = [\n {\n name: 'Created',\n description: 'Resource created successfully',\n type: 'event',\n input: {\n type: 'event',\n event: {\n type: 'Normal',\n reason: 'Created',\n note: 'Successfully created resource',\n regarding: {\n apiVersion: 'example.com/v1',\n kind: 'Example',\n name: 'my-resource',\n namespace: 'default',\n uid: 'res-456-789',\n },\n reportingController: 'example-controller',\n eventTime: new Date().toISOString(),\n series: {\n count: 1,\n lastObservedTime: new Date().toISOString(),\n },\n metadata: {\n name: 'my-resource.abc123',\n namespace: 'default',\n },\n },\n },\n },\n {\n name: 'Ready',\n description: 'Resource became ready',\n type: 'event',\n input: {\n type: 'event',\n event: {\n type: 'Normal',\n reason: 'Ready',\n note: 'Resource is now ready to accept traffic',\n regarding: {\n apiVersion: 'example.com/v1',\n kind: 'Example',\n name: 'my-resource',\n namespace: 'default',\n uid: 'res-456-789',\n },\n reportingController: 'example-controller',\n eventTime: new Date().toISOString(),\n series: {\n count: 1,\n lastObservedTime: new Date().toISOString(),\n },\n metadata: {\n name: 'my-resource.def456',\n namespace: 'default',\n },\n },\n },\n },\n {\n name: 'Failed',\n description: 'Resource operation failed',\n type: 'event',\n input: {\n type: 'event',\n event: {\n type: 'Warning',\n reason: 'Failed',\n note: 'Failed to reconcile resource: timeout waiting for backend',\n regarding: {\n apiVersion: 'example.com/v1',\n kind: 'Example',\n name: 'my-resource',\n namespace: 'default',\n uid: 'res-456-789',\n },\n reportingController: 'example-controller',\n eventTime: new Date().toISOString(),\n series: {\n count: 3,\n lastObservedTime: new Date().toISOString(),\n },\n metadata: {\n name: 'my-resource.ghi789',\n namespace: 'default',\n },\n },\n },\n },\n {\n name: 'Progressing',\n description: 'Resource is progressing',\n type: 'event',\n input: {\n type: 'event',\n event: {\n type: 'Normal',\n reason: 'Progressing',\n note: 'Resource is being configured',\n regarding: {\n apiVersion: 'example.com/v1',\n kind: 'Example',\n name: 'my-resource',\n namespace: 'default',\n uid: 'res-456-789',\n },\n reportingController: 'example-controller',\n eventTime: new Date().toISOString(),\n series: {\n count: 1,\n lastObservedTime: new Date().toISOString(),\n },\n metadata: {\n name: 'my-resource.jkl012',\n namespace: 'default',\n },\n },\n },\n },\n];\n\n/**\n * SampleInputTemplates provides quick-fill buttons for common input patterns\n */\nexport function SampleInputTemplates({\n inputType,\n onSelect,\n className = '',\n}: SampleInputTemplatesProps) {\n const templates = inputType === 'audit' ? AUDIT_TEMPLATES : EVENT_TEMPLATES;\n\n return (\n <div className={`mb-4 ${className}`}>\n <div className=\"text-xs font-medium text-muted-foreground mb-2\">Quick Fill:</div>\n <div className=\"flex flex-wrap gap-1.5\">\n {templates.map((template) => (\n <button\n key={template.name}\n type=\"button\"\n className=\"px-2.5 py-1 bg-background border border-input rounded text-xs text-foreground transition-all duration-200 hover:bg-[#E6F59F] hover:border-[#E6F59F] cursor-pointer\"\n onClick={() => onSelect(template.input)}\n title={template.description}\n >\n {template.name}\n </button>\n ))}\n </div>\n </div>\n );\n}\n\n/**\n * Export templates for external use\n */\nexport { AUDIT_TEMPLATES, EVENT_TEMPLATES };\n","import { useEffect, useState, useRef } from 'react';\nimport type { ActivityPolicyRule, PolicyPreviewInput } from '../types/policy';\nimport type { ActivityApiClient } from '../api/client';\nimport type { K8sEvent } from '../types/k8s-event';\nimport type { PolicyPreviewStatus } from '../types/policy';\nimport { Card, CardContent } from './ui/card';\nimport { Badge } from './ui/badge';\nimport { Alert, AlertDescription } from './ui/alert';\nimport { AlertCircle, CheckCircle, XCircle, Loader2 } from 'lucide-react';\nimport { AuditLogFeedItem } from './AuditLogFeedItem';\nimport { EventFeedItem } from './EventFeedItem';\nimport { ActivityFeedSummary } from './ActivityFeedSummary';\nimport { cn } from '../lib/utils';\n\nexport interface RulePreviewPanelProps {\n /** The rule to preview */\n rule: ActivityPolicyRule;\n /** Rule type (audit or event) */\n ruleType: 'audit' | 'event';\n /** Policy resource (apiGroup/kind) for fetching sample data */\n policyResource: { apiGroup: string; kind: string };\n /** API client for fetching data */\n apiClient: ActivityApiClient;\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * RulePreviewPanel shows live preview of a rule against sample data.\n * Uses PolicyPreview API with auto-fetch to automatically load and test sample data.\n */\nexport function RulePreviewPanel({\n rule,\n ruleType,\n policyResource,\n apiClient,\n className = '',\n}: RulePreviewPanelProps) {\n const [isLoading, setIsLoading] = useState(false);\n const [samples, setSamples] = useState<PolicyPreviewInput[]>([]);\n const [preview, setPreview] = useState<PolicyPreviewStatus | null>(null);\n const [error, setError] = useState<Error | null>(null);\n\n // Use ref to track the debounce timeout\n const debounceTimerRef = useRef<number | null>(null);\n\n // Re-run preview when rule changes (debounced)\n useEffect(() => {\n // Clear any existing timer\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n\n // Debounce the preview execution\n debounceTimerRef.current = setTimeout(() => {\n const runPreview = async () => {\n setIsLoading(true);\n setError(null);\n\n try {\n // Use auto-fetch to get sample data and run preview in one API call\n const result = await apiClient.createPolicyPreview({\n policy: {\n resource: policyResource,\n auditRules: ruleType === 'audit' ? [rule] : undefined,\n eventRules: ruleType === 'event' ? [rule] : undefined,\n },\n autoFetch: {\n limit: 10,\n timeRange: '7d',\n sources: ruleType === 'audit' ? 'audit' : 'events',\n },\n });\n\n setPreview(result.status || null);\n\n // Update samples from fetchedInputs so UI can display what was tested\n if (result.status?.fetchedInputs) {\n setSamples(result.status.fetchedInputs);\n }\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to run preview'));\n } finally {\n setIsLoading(false);\n }\n };\n\n runPreview();\n }, 500);\n\n // Cleanup\n return () => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n };\n }, [rule, ruleType, policyResource, apiClient]);\n\n // Calculate statistics\n const stats = {\n total: samples.length,\n matched: preview?.results?.filter((r) => r.matched).length || 0,\n errors: preview?.results?.filter((r) => !!r.error).length || 0,\n };\n\n return (\n <div className={cn('space-y-4', className)}>\n {/* Loading State */}\n {isLoading && (\n <Card>\n <CardContent className=\"py-8 text-center\">\n <Loader2 className=\"h-6 w-6 animate-spin mx-auto mb-2 text-muted-foreground\" />\n <p className=\"text-sm text-muted-foreground\">\n Loading sample {ruleType === 'audit' ? 'audit logs' : 'events'} and testing rule...\n </p>\n </CardContent>\n </Card>\n )}\n\n {/* Error State */}\n {error && !isLoading && (\n <Alert variant=\"destructive\">\n <AlertCircle className=\"h-4 w-4\" />\n <AlertDescription>{error.message}</AlertDescription>\n </Alert>\n )}\n\n {/* Empty State - No samples found */}\n {!isLoading && samples.length === 0 && !error && (\n <Card>\n <CardContent className=\"py-12 text-center\">\n <p className=\"text-sm text-muted-foreground mb-2\">\n No sample data found\n </p>\n <p className=\"text-xs text-muted-foreground\">\n No recent {ruleType === 'audit' ? 'audit logs' : 'events'} found for{' '}\n {policyResource.apiGroup}/{policyResource.kind}\n </p>\n </CardContent>\n </Card>\n )}\n\n {/* Preview Results */}\n {!isLoading && preview && samples.length > 0 && (\n <div className=\"space-y-4\">\n {/* Summary Header */}\n <div className=\"flex items-center gap-3\">\n <Badge variant={stats.matched > 0 ? 'success' : 'secondary'}>\n {stats.matched} matched\n </Badge>\n <span className=\"text-muted-foreground\">/</span>\n <span className=\"text-sm text-muted-foreground\">{stats.total} tested</span>\n {stats.errors > 0 && (\n <>\n <span className=\"text-muted-foreground\">/</span>\n <Badge variant=\"destructive\">{stats.errors} errors</Badge>\n </>\n )}\n </div>\n\n {/* Sample Results */}\n <Card>\n <CardContent className=\"p-0\">\n <div className=\"divide-y divide-border\">\n {preview.results?.map((result, index) => {\n const input = samples[result.inputIndex];\n const isMatched = result.matched;\n const hasError = !!result.error;\n const activity = preview.activities?.[\n preview.activities.findIndex((_, idx) => idx === index)\n ];\n\n return (\n <div\n key={result.inputIndex}\n className={cn(\n 'p-4 flex flex-col gap-3',\n hasError && 'bg-destructive/10'\n )}\n >\n {/* Sample Input */}\n {input?.type === 'audit' && input.audit && (\n <AuditLogFeedItem event={input.audit} compact={true} />\n )}\n {input?.type === 'event' && input.event && (\n <EventFeedItem\n event={input.event as K8sEvent}\n compact={true}\n />\n )}\n\n {/* Match Result */}\n <div className=\"flex items-center justify-between gap-2\">\n <div className=\"flex items-center gap-2\">\n {hasError ? (\n <Badge variant=\"destructive\" className=\"gap-1\">\n <XCircle className=\"h-3 w-3\" />\n Error\n </Badge>\n ) : isMatched ? (\n <Badge variant=\"success\" className=\"gap-1\">\n <CheckCircle className=\"h-3 w-3\" />\n Matched\n </Badge>\n ) : (\n <Badge variant=\"secondary\" className=\"gap-1\">\n <XCircle className=\"h-3 w-3\" />\n No Match\n </Badge>\n )}\n </div>\n\n {/* Error Message */}\n {hasError && (\n <span className=\"text-xs text-destructive\">{result.error}</span>\n )}\n </div>\n\n {/* Generated Summary */}\n {isMatched && activity && !hasError && (\n <div className=\"mt-2 p-3 rounded-md bg-muted\">\n <p className=\"text-xs text-muted-foreground mb-1.5\">\n Generated Summary:\n </p>\n <ActivityFeedSummary\n summary={activity.spec.summary}\n links={activity.spec.links}\n />\n </div>\n )}\n </div>\n );\n })}\n </div>\n </CardContent>\n </Card>\n\n {/* No Matches Warning */}\n {stats.matched === 0 && stats.errors === 0 && (\n <Alert>\n <AlertCircle className=\"h-4 w-4\" />\n <AlertDescription>\n This rule did not match any of the {stats.total} sample{stats.total !== 1 ? 's' : ''}.\n Check your match expression.\n </AlertDescription>\n </Alert>\n )}\n </div>\n )}\n </div>\n );\n}\n","import { useState, useCallback, useEffect, useRef } from 'react';\nimport type { ReindexJob, ReindexJobListResource } from '../types/reindex';\nimport type { WatchEvent } from '../types/activity';\nimport { ActivityApiClient } from '../api/client';\n\n/**\n * Options for the useReindexJobs hook\n */\nexport interface UseReindexJobsOptions {\n /** API client instance */\n client: ActivityApiClient;\n /** Whether to watch for real-time updates (default: true) */\n watch?: boolean;\n /** Whether to auto-refresh on mount (default: true) */\n autoRefresh?: boolean;\n}\n\n/**\n * Result returned by the useReindexJobs hook\n */\nexport interface UseReindexJobsResult {\n /** List of all reindex jobs */\n jobs: ReindexJob[];\n /** Whether the list is loading */\n isLoading: boolean;\n /** Error if any occurred */\n error: Error | null;\n /** Reload the job list */\n refresh: () => Promise<void>;\n /** Delete a job by name */\n deleteJob: (name: string) => Promise<void>;\n /** Whether a delete is in progress */\n isDeleting: boolean;\n /** Whether watching is active */\n isWatching: boolean;\n}\n\n/**\n * React hook for managing ReindexJobs with optional real-time watching\n */\nexport function useReindexJobs({\n client,\n watch = true,\n autoRefresh = true,\n}: UseReindexJobsOptions): UseReindexJobsResult {\n const [jobs, setJobs] = useState<ReindexJob[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [isDeleting, setIsDeleting] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [isWatching, setIsWatching] = useState(false);\n const watchStopRef = useRef<(() => void) | null>(null);\n const resourceVersionRef = useRef<string | undefined>(undefined);\n\n // Fetch all jobs\n const refresh = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n\n try {\n const result: ReindexJobListResource = await client.listReindexJobs();\n setJobs(result.items || []);\n // Store resource version for watch resumption\n if (result.metadata?.resourceVersion) {\n resourceVersionRef.current = result.metadata.resourceVersion;\n }\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)));\n } finally {\n setIsLoading(false);\n }\n }, [client]);\n\n // Delete a job and refresh the list\n const deleteJob = useCallback(\n async (name: string) => {\n setIsDeleting(true);\n setError(null);\n\n try {\n await client.deleteReindexJob(name);\n // Remove from local state immediately for responsiveness\n setJobs((prev) => prev.filter((j) => j.metadata?.name !== name));\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)));\n throw err; // Re-throw so caller can handle\n } finally {\n setIsDeleting(false);\n }\n },\n [client]\n );\n\n // Start watching for updates\n const startWatch = useCallback(() => {\n if (watchStopRef.current) {\n watchStopRef.current();\n }\n\n setIsWatching(true);\n\n const { stop } = client.watchReindexJobs({\n resourceVersion: resourceVersionRef.current,\n onEvent: (event: WatchEvent<ReindexJob>) => {\n const job = event.object;\n const name = job.metadata?.name;\n\n if (!name) return;\n\n setJobs((prev) => {\n // Update resource version\n if (job.metadata?.resourceVersion) {\n resourceVersionRef.current = job.metadata.resourceVersion;\n }\n\n switch (event.type) {\n case 'ADDED':\n // Add if not exists\n if (prev.find((j) => j.metadata?.name === name)) {\n return prev;\n }\n return [...prev, job];\n\n case 'MODIFIED':\n // Update existing\n return prev.map((j) => (j.metadata?.name === name ? job : j));\n\n case 'DELETED':\n // Remove from list\n return prev.filter((j) => j.metadata?.name !== name);\n\n default:\n return prev;\n }\n });\n },\n onError: (err: Error) => {\n console.error('Watch error:', err);\n setIsWatching(false);\n // Try to reconnect after a delay\n setTimeout(() => {\n if (watch) {\n startWatch();\n }\n }, 5000);\n },\n onClose: () => {\n setIsWatching(false);\n },\n });\n\n watchStopRef.current = stop;\n }, [client, watch]);\n\n // Initial load and watch setup\n useEffect(() => {\n if (autoRefresh) {\n refresh();\n }\n\n // Start watching if enabled\n if (watch) {\n // Wait for initial load to complete before watching\n const timer = setTimeout(() => {\n startWatch();\n }, 1000);\n\n return () => {\n clearTimeout(timer);\n if (watchStopRef.current) {\n watchStopRef.current();\n watchStopRef.current = null;\n }\n };\n }\n\n return undefined;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (watchStopRef.current) {\n watchStopRef.current();\n watchStopRef.current = null;\n }\n };\n }, []);\n\n return {\n jobs,\n isLoading,\n error,\n refresh,\n deleteJob,\n isDeleting,\n isWatching,\n };\n}\n","/**\n * TypeScript types for ReindexJob management\n * Based on the ReindexJob API (activity.miloapis.com/v1alpha1)\n */\n\nimport type { ObjectMeta } from './index';\n\n/**\n * Phase represents the lifecycle phase of a ReindexJob\n */\nexport type ReindexJobPhase = 'Pending' | 'Running' | 'Succeeded' | 'Failed';\n\n/**\n * Time range for reindexing\n */\nexport interface ReindexTimeRange {\n /**\n * Start time (relative like \"now-7d\" or absolute ISO 8601)\n * Relative: \"now-30d\", \"now-2h\", \"now-30m\" (units: s, m, h, d, w)\n * Absolute: \"2026-02-01T00:00:00Z\"\n */\n startTime: string;\n /**\n * End time (defaults to \"now\" if omitted)\n * Uses same formats as startTime\n */\n endTime?: string;\n}\n\n/**\n * Selector for which policies to reindex\n */\nexport interface ReindexPolicySelector {\n /** List of ActivityPolicy names (mutually exclusive with matchLabels) */\n names?: string[];\n /** Label selector (mutually exclusive with names) */\n matchLabels?: Record<string, string>;\n}\n\n/**\n * Specification for a ReindexJob\n */\nexport interface ReindexJobSpec {\n /** Time window of events to re-index */\n timeRange: ReindexTimeRange;\n /** Optional selector for specific policies */\n policySelector?: ReindexPolicySelector;\n}\n\n/**\n * Status of a ReindexJob\n */\nexport interface ReindexJobStatus {\n /** Current lifecycle phase */\n phase?: ReindexJobPhase;\n /** Human-readable description of the current state */\n message?: string;\n /** When processing began */\n startedAt?: string;\n /** When processing finished (success or failure) */\n completedAt?: string;\n}\n\n/**\n * ReindexJob resource for re-processing historical audit logs and events\n */\nexport interface ReindexJob {\n apiVersion: 'activity.miloapis.com/v1alpha1';\n kind: 'ReindexJob';\n metadata: ObjectMeta;\n spec: ReindexJobSpec;\n status?: ReindexJobStatus;\n}\n\n/**\n * List of ReindexJob resources (Kubernetes list type)\n */\nexport interface ReindexJobListResource {\n apiVersion: 'activity.miloapis.com/v1alpha1';\n kind: 'ReindexJobList';\n metadata?: {\n continue?: string;\n resourceVersion?: string;\n };\n items: ReindexJob[];\n}\n\n/**\n * Helper type for creating a new ReindexJob\n */\nexport interface CreateReindexJobParams {\n name: string;\n spec: ReindexJobSpec;\n}\n\n/**\n * Check if a ReindexJob is in a terminal state\n */\nexport function isReindexJobTerminal(job: ReindexJob): boolean {\n return job.status?.phase === 'Succeeded' || job.status?.phase === 'Failed';\n}\n\n/**\n * Check if a ReindexJob is currently running\n */\nexport function isReindexJobRunning(job: ReindexJob): boolean {\n return job.status?.phase === 'Running';\n}\n\n/**\n * Get a human-readable status message\n */\nexport function getReindexJobStatusMessage(job: ReindexJob): string {\n if (job.status?.message) {\n return job.status.message;\n }\n\n const phase = job.status?.phase;\n switch (phase) {\n case 'Pending':\n return 'Waiting to start';\n case 'Running':\n return 'Processing events';\n case 'Succeeded':\n return 'Completed successfully';\n case 'Failed':\n return 'Failed';\n default:\n return 'Unknown status';\n }\n}\n\n/**\n * Get duration of a ReindexJob\n */\nexport function getReindexJobDuration(job: ReindexJob): string | null {\n const startedAt = job.status?.startedAt;\n const completedAt = job.status?.completedAt;\n\n if (!startedAt) {\n return null;\n }\n\n const start = new Date(startedAt).getTime();\n const end = completedAt ? new Date(completedAt).getTime() : Date.now();\n const durationMs = end - start;\n\n const seconds = Math.floor(durationMs / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n\n if (hours > 0) {\n return `${hours}h ${minutes % 60}m`;\n } else if (minutes > 0) {\n return `${minutes}m ${seconds % 60}s`;\n } else {\n return `${seconds}s`;\n }\n}\n","import type { ErrorFormatter } from '../types/activity';\nimport { ActivityApiClient } from '../api/client';\nimport { useReindexJobs } from '../hooks/useReindexJobs';\nimport { Button } from './ui/button';\nimport { Card, CardContent, CardHeader } from './ui/card';\nimport { Badge } from './ui/badge';\nimport { Separator } from './ui/separator';\nimport { Skeleton } from './ui/skeleton';\nimport { ApiErrorAlert } from './ApiErrorAlert';\nimport { getReindexJobDuration } from '../types/reindex';\nimport { Clock, CheckCircle2, XCircle, Loader2, Eye } from 'lucide-react';\n\nexport interface ReindexJobListProps {\n /** API client instance */\n client: ActivityApiClient;\n /** Callback when a job is selected for viewing */\n onViewJob?: (jobName: string) => void;\n /** Callback when create new job is requested */\n onCreateJob?: () => void;\n /** Whether to watch for real-time updates (default: true) */\n watch?: boolean;\n /** Additional CSS class */\n className?: string;\n /** Custom error formatter for customizing error messages */\n errorFormatter?: ErrorFormatter;\n}\n\n/**\n * Skeleton row for table loading state\n */\nfunction ReindexJobSkeletonRow() {\n return (\n <tr>\n <td className=\"px-3 py-2 border-b border-border\">\n <Skeleton className=\"h-4 w-32\" />\n </td>\n <td className=\"px-3 py-2 border-b border-border text-center\">\n <Skeleton className=\"h-5 w-16 mx-auto rounded-full\" />\n </td>\n <td className=\"px-3 py-2 border-b border-border\">\n <Skeleton className=\"h-4 w-full\" />\n </td>\n <td className=\"px-3 py-2 border-b border-border text-center\">\n <Skeleton className=\"h-4 w-16 mx-auto\" />\n </td>\n <td className=\"px-3 py-2 border-b border-border text-center\">\n <Skeleton className=\"h-7 w-16 mx-auto\" />\n </td>\n </tr>\n );\n}\n\n/**\n * Get badge variant for job phase\n */\nfunction getPhaseBadgeVariant(\n phase?: string\n): 'default' | 'success' | 'destructive' | 'secondary' | 'warning' {\n switch (phase) {\n case 'Succeeded':\n return 'success';\n case 'Failed':\n return 'destructive';\n case 'Running':\n return 'default';\n case 'Pending':\n return 'secondary';\n default:\n return 'secondary';\n }\n}\n\n/**\n * Get icon for job phase\n */\nfunction getPhaseIcon(phase?: string) {\n switch (phase) {\n case 'Succeeded':\n return <CheckCircle2 className=\"h-3.5 w-3.5\" />;\n case 'Failed':\n return <XCircle className=\"h-3.5 w-3.5\" />;\n case 'Running':\n return <Loader2 className=\"h-3.5 w-3.5 animate-spin\" />;\n case 'Pending':\n return <Clock className=\"h-3.5 w-3.5\" />;\n default:\n return <Clock className=\"h-3.5 w-3.5\" />;\n }\n}\n\n/**\n * ReindexJobList displays all ReindexJobs with real-time updates\n */\nexport function ReindexJobList({\n client,\n onViewJob,\n onCreateJob,\n watch = true,\n className = '',\n errorFormatter,\n}: ReindexJobListProps) {\n const { jobs, isLoading, error, refresh, isWatching } = useReindexJobs({\n client,\n watch,\n autoRefresh: true,\n });\n\n // Sort jobs by creation time (newest first)\n const sortedJobs = [...jobs].sort((a, b) => {\n const aTime = a.metadata?.creationTimestamp || '';\n const bTime = b.metadata?.creationTimestamp || '';\n return bTime.localeCompare(aTime);\n });\n\n return (\n <Card className={`rounded-xl ${className}`}>\n {/* Header */}\n <CardHeader className=\"pb-1.5\">\n <div className=\"flex justify-between items-center\">\n <div className=\"flex items-center gap-2\">\n <p className=\"text-sm text-muted-foreground m-0\">\n Re-process historical events through updated policies\n </p>\n {isWatching && (\n <Badge variant=\"success\" className=\"text-xs\">\n <span className=\"w-1.5 h-1.5 bg-green-500 rounded-full mr-1.5 animate-pulse\" />\n Live\n </Badge>\n )}\n </div>\n <div className=\"flex gap-1.5\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={refresh}\n disabled={isLoading}\n title=\"Refresh job list\"\n className=\"h-7 px-2\"\n >\n {isLoading ? (\n <span className=\"w-3.5 h-3.5 border-2 border-border border-t-primary rounded-full animate-spin\" />\n ) : (\n '↻'\n )}\n </Button>\n {onCreateJob && (\n <Button\n size=\"sm\"\n onClick={onCreateJob}\n className=\"bg-[#BF9595] text-[#0C1D31] hover:bg-[#A88080] h-7 text-xs\"\n >\n + Create Job\n </Button>\n )}\n </div>\n </div>\n <Separator className=\"mt-1.5\" />\n </CardHeader>\n\n <CardContent className=\"pt-3\">\n {/* Error Display */}\n <ApiErrorAlert\n error={error}\n onRetry={refresh}\n className=\"mb-3\"\n errorFormatter={errorFormatter}\n />\n\n {/* Loading State - Skeleton */}\n {isLoading && jobs.length === 0 && (\n <div className=\"border border-input rounded-lg overflow-hidden\">\n <table className=\"w-full border-collapse text-sm\">\n <thead>\n <tr>\n <th className=\"text-left px-3 py-2 bg-muted text-muted-foreground font-medium border-b border-input text-xs whitespace-nowrap\">\n Job Name\n </th>\n <th className=\"text-center px-3 py-2 bg-muted text-muted-foreground font-medium border-b border-input text-xs whitespace-nowrap w-24\">\n Status\n </th>\n <th className=\"text-left px-3 py-2 bg-muted text-muted-foreground font-medium border-b border-input text-xs whitespace-nowrap\">\n Message\n </th>\n <th className=\"text-center px-3 py-2 bg-muted text-muted-foreground font-medium border-b border-input text-xs whitespace-nowrap w-24\">\n Duration\n </th>\n <th className=\"text-center px-3 py-2 bg-muted text-muted-foreground font-medium border-b border-input text-xs whitespace-nowrap w-24\">\n Actions\n </th>\n </tr>\n </thead>\n <tbody>\n <ReindexJobSkeletonRow />\n <ReindexJobSkeletonRow />\n <ReindexJobSkeletonRow />\n </tbody>\n </table>\n </div>\n )}\n\n {/* Empty State */}\n {!isLoading && !error && jobs.length === 0 && (\n <div className=\"text-center py-8 px-6 text-muted-foreground\">\n <div className=\"text-4xl mb-3\">🔄</div>\n <h3 className=\"m-0 mb-1.5 text-foreground\">No reindex jobs found</h3>\n <p className=\"m-0 mb-4 max-w-[400px] mx-auto\">\n Create a reindex job to re-process historical audit logs and events\n through current ActivityPolicy rules.\n </p>\n {onCreateJob && (\n <Button\n size=\"sm\"\n onClick={onCreateJob}\n className=\"bg-[#BF9595] text-[#0C1D31] hover:bg-[#A88080] h-7 text-xs\"\n >\n Create your first reindex job\n </Button>\n )}\n </div>\n )}\n\n {/* Jobs Table */}\n {sortedJobs.length > 0 && (\n <div className=\"border border-input rounded-lg overflow-hidden\">\n <table className=\"w-full border-collapse text-sm\">\n <thead>\n <tr>\n <th className=\"text-left px-3 py-2 bg-muted text-muted-foreground font-medium border-b border-input text-xs whitespace-nowrap\">\n Job Name\n </th>\n <th className=\"text-center px-3 py-2 bg-muted text-muted-foreground font-medium border-b border-input text-xs whitespace-nowrap w-24\">\n Status\n </th>\n <th className=\"text-left px-3 py-2 bg-muted text-muted-foreground font-medium border-b border-input text-xs whitespace-nowrap\">\n Message\n </th>\n <th className=\"text-center px-3 py-2 bg-muted text-muted-foreground font-medium border-b border-input text-xs whitespace-nowrap w-24\">\n Duration\n </th>\n <th className=\"text-center px-3 py-2 bg-muted text-muted-foreground font-medium border-b border-input text-xs whitespace-nowrap w-24\">\n Actions\n </th>\n </tr>\n </thead>\n <tbody>\n {sortedJobs.map((job) => {\n const duration = getReindexJobDuration(job);\n\n return (\n <tr\n key={job.metadata?.name}\n className=\"hover:bg-muted transition-colors\"\n >\n <td className=\"px-3 py-2 border-b border-border last:border-b-0\">\n <span className=\"text-xs font-medium font-mono\">\n {job.metadata?.name}\n </span>\n </td>\n <td className=\"px-3 py-2 border-b border-border last:border-b-0 text-center\">\n <Badge\n variant={getPhaseBadgeVariant(job.status?.phase)}\n className=\"inline-flex items-center gap-1\"\n >\n {getPhaseIcon(job.status?.phase)}\n {job.status?.phase || 'Unknown'}\n </Badge>\n </td>\n <td className=\"px-3 py-2 border-b border-border last:border-b-0\">\n {job.status?.phase === 'Failed' ? (\n <span className=\"text-xs text-destructive\">\n {job.status?.message || 'Job failed'}\n </span>\n ) : (\n <span className=\"text-xs text-muted-foreground\">\n {job.status?.message || 'Waiting to start'}\n </span>\n )}\n </td>\n <td className=\"px-3 py-2 border-b border-border last:border-b-0 text-center\">\n <span className=\"text-xs text-muted-foreground\">\n {duration || '-'}\n </span>\n </td>\n <td className=\"px-3 py-2 border-b border-border last:border-b-0 text-center\">\n {onViewJob && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => onViewJob(job.metadata?.name || '')}\n className=\"h-7 px-2\"\n title=\"View job details\"\n >\n <Eye className=\"h-3.5 w-3.5\" />\n </Button>\n )}\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n )}\n </CardContent>\n </Card>\n );\n}\n","import { useEffect, useState, useCallback, useRef } from 'react';\nimport type { ReindexJob } from '../types/reindex';\nimport type { ErrorFormatter, WatchEvent } from '../types/activity';\nimport { ActivityApiClient } from '../api/client';\nimport { Button } from './ui/button';\nimport { Card, CardHeader, CardContent } from './ui/card';\nimport { Badge } from './ui/badge';\nimport { ApiErrorAlert } from './ApiErrorAlert';\nimport { Skeleton } from './ui/skeleton';\nimport {\n getReindexJobDuration,\n getReindexJobStatusMessage,\n isReindexJobTerminal,\n} from '../types/reindex';\nimport {\n CheckCircle2,\n XCircle,\n Loader2,\n Clock,\n Trash2,\n} from 'lucide-react';\n\nexport interface ReindexJobDetailViewProps {\n /** API client instance */\n client: ActivityApiClient;\n /** Job name to display */\n jobName: string;\n /** Callback when delete button is clicked */\n onDelete?: () => void;\n /** Whether to watch for real-time updates (default: true) */\n watch?: boolean;\n /** Additional CSS class */\n className?: string;\n /** Custom error formatter for customizing error messages */\n errorFormatter?: ErrorFormatter;\n}\n\n/**\n * Get icon for job phase\n */\nfunction getPhaseIcon(phase?: string) {\n switch (phase) {\n case 'Succeeded':\n return <CheckCircle2 className=\"h-8 w-8 text-green-500\" />;\n case 'Failed':\n return <XCircle className=\"h-8 w-8 text-red-500\" />;\n case 'Running':\n return <Loader2 className=\"h-8 w-8 text-blue-500 animate-spin\" />;\n case 'Pending':\n default:\n return <Clock className=\"h-8 w-8 text-muted-foreground\" />;\n }\n}\n\n/**\n * ReindexJobDetailView displays status of a ReindexJob\n */\nexport function ReindexJobDetailView({\n client,\n jobName,\n onDelete,\n watch = true,\n className = '',\n errorFormatter,\n}: ReindexJobDetailViewProps) {\n const [job, setJob] = useState<ReindexJob | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n const [isDeleting, setIsDeleting] = useState(false);\n const [isWatching, setIsWatching] = useState(false);\n const resourceVersionRef = useRef<string | undefined>(undefined);\n\n const loadJob = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n\n try {\n const loaded = await client.getReindexJob(jobName);\n setJob(loaded);\n resourceVersionRef.current = loaded.metadata?.resourceVersion;\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to load job'));\n } finally {\n setIsLoading(false);\n }\n }, [client, jobName]);\n\n const handleDelete = useCallback(async () => {\n if (!window.confirm(`Delete job \"${jobName}\"?`)) return;\n\n setIsDeleting(true);\n try {\n await client.deleteReindexJob(jobName);\n onDelete?.();\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to delete job'));\n } finally {\n setIsDeleting(false);\n }\n }, [client, jobName, onDelete]);\n\n useEffect(() => {\n loadJob();\n }, [loadJob]);\n\n // Watch for updates\n useEffect(() => {\n if (isLoading || !job || !watch) return;\n\n const isTerminalState = job.status?.phase === 'Succeeded' || job.status?.phase === 'Failed';\n if (isTerminalState) return;\n\n setIsWatching(true);\n const { stop } = client.watchReindexJobs({\n resourceVersion: resourceVersionRef.current,\n onEvent: (event: WatchEvent<ReindexJob>) => {\n if (event.object?.metadata?.name === jobName) {\n if (event.type === 'MODIFIED' || event.type === 'ADDED') {\n setJob(event.object);\n resourceVersionRef.current = event.object.metadata?.resourceVersion;\n } else if (event.type === 'DELETED') {\n onDelete?.();\n }\n }\n },\n onError: () => setIsWatching(false),\n onClose: () => setIsWatching(false),\n });\n\n return () => {\n stop();\n setIsWatching(false);\n };\n }, [client, jobName, watch, isLoading, job?.status?.phase, onDelete]);\n\n const duration = job ? getReindexJobDuration(job) : null;\n const statusMessage = job ? getReindexJobStatusMessage(job) : '';\n const isTerminal = job ? isReindexJobTerminal(job) : false;\n\n return (\n <Card className={`rounded-xl max-w-md ${className}`}>\n <CardHeader className=\"flex flex-row justify-between items-start p-6 border-b border-border space-y-0\">\n <div className=\"flex items-center gap-4\">\n {isLoading ? (\n <Skeleton className=\"h-8 w-8 rounded-full\" />\n ) : (\n getPhaseIcon(job?.status?.phase)\n )}\n <div>\n {isLoading ? (\n <>\n <Skeleton className=\"h-5 w-32 mb-2\" />\n <Skeleton className=\"h-3 w-24\" />\n </>\n ) : (\n <>\n <h2 className=\"text-lg font-semibold text-foreground m-0\">\n {statusMessage}\n </h2>\n <p className=\"text-xs text-muted-foreground m-0\">\n {duration && <>{duration}</>}\n {isWatching && !isTerminal && (\n <Badge variant=\"outline\" className=\"ml-2 text-xs text-green-600 border-green-300\">\n Live\n </Badge>\n )}\n </p>\n </>\n )}\n </div>\n </div>\n\n {isTerminal && onDelete && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleDelete}\n disabled={isDeleting}\n className=\"h-8 w-8 p-0\"\n >\n {isDeleting ? (\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n ) : (\n <Trash2 className=\"h-4 w-4\" />\n )}\n </Button>\n )}\n </CardHeader>\n\n <ApiErrorAlert error={error} onRetry={loadJob} className=\"mx-6 mt-4\" errorFormatter={errorFormatter} />\n\n {!isLoading && job && (\n <CardContent className=\"p-6 space-y-4\">\n {/* Error message if failed */}\n {job.status?.phase === 'Failed' && job.status?.message && (\n <div className=\"p-3 bg-red-50 border border-red-200 rounded-lg text-sm text-red-700\">\n {job.status.message}\n </div>\n )}\n\n {/* Time range */}\n <div>\n <div className=\"text-xs text-muted-foreground mb-1\">Time Range</div>\n <div className=\"text-sm font-mono\">\n {job.spec.timeRange.startTime}\n {job.spec.timeRange.endTime && <> → {job.spec.timeRange.endTime}</>}\n </div>\n </div>\n\n {/* Policy */}\n {job.spec.policySelector?.names && (\n <div>\n <div className=\"text-xs text-muted-foreground mb-1\">Policy</div>\n <div className=\"flex flex-wrap gap-1\">\n {job.spec.policySelector.names.map((name) => (\n <Badge key={name} variant=\"secondary\" className=\"text-xs font-mono\">\n {name}\n </Badge>\n ))}\n </div>\n </div>\n )}\n </CardContent>\n )}\n </Card>\n );\n}\n","import { useState } from 'react';\nimport type { ReindexJobSpec } from '../types/reindex';\nimport type { ErrorFormatter } from '../types/activity';\nimport { ActivityApiClient } from '../api/client';\nimport { Button } from './ui/button';\nimport { Card, CardHeader, CardContent } from './ui/card';\nimport { ApiErrorAlert } from './ApiErrorAlert';\nimport { Loader2, RefreshCw } from 'lucide-react';\n\nexport interface ReindexJobCreateProps {\n /** API client instance */\n client: ActivityApiClient;\n /** Pre-selected policy name (required for simplified flow) */\n policyName?: string;\n /** Callback when job is successfully created */\n onCreate?: (jobName: string) => void;\n /** Callback when cancel is clicked */\n onCancel?: () => void;\n /** Additional CSS class */\n className?: string;\n /** Custom error formatter for customizing error messages */\n errorFormatter?: ErrorFormatter;\n}\n\nconst TIME_RANGE_OPTIONS = [\n { label: 'Last hour', value: 'now-1h' },\n { label: 'Last 24 hours', value: 'now-24h' },\n { label: 'Last 7 days', value: 'now-7d' },\n { label: 'Last 30 days', value: 'now-30d' },\n { label: 'All time', value: 'now-365d' },\n] as const;\n\n/**\n * Simplified ReindexJobCreate for quick policy reindexing\n */\nexport function ReindexJobCreate({\n client,\n policyName,\n onCreate,\n onCancel,\n className = '',\n errorFormatter,\n}: ReindexJobCreateProps) {\n const [selectedRange, setSelectedRange] = useState('now-7d');\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n setIsSubmitting(true);\n setError(null);\n\n try {\n // Generate job name from policy and timestamp\n const timestamp = Date.now().toString(36);\n const baseName = policyName\n ? `reindex-${policyName}-${timestamp}`\n : `reindex-${timestamp}`;\n const jobName = baseName.toLowerCase().replace(/[^a-z0-9-]/g, '-').slice(0, 63);\n\n const spec: ReindexJobSpec = {\n timeRange: {\n startTime: selectedRange,\n endTime: 'now',\n },\n // Only set policy selector if a specific policy is provided\n ...(policyName && {\n policySelector: {\n names: [policyName],\n },\n }),\n };\n\n const job = await client.createReindexJob(jobName, spec);\n onCreate?.(job.metadata?.name || jobName);\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to create job'));\n } finally {\n setIsSubmitting(false);\n }\n };\n\n const selectedOption = TIME_RANGE_OPTIONS.find(o => o.value === selectedRange);\n\n return (\n <Card className={`rounded-xl max-w-md ${className}`}>\n <CardHeader className=\"p-6 border-b border-border\">\n <div className=\"flex items-center gap-3\">\n <div className=\"p-2 bg-primary/10 rounded-lg\">\n <RefreshCw className=\"h-5 w-5 text-primary\" />\n </div>\n <div>\n <h2 className=\"text-lg font-semibold text-foreground m-0\">\n {policyName ? `Reindex \"${policyName}\"` : 'Reindex Activities'}\n </h2>\n <p className=\"text-sm text-muted-foreground m-0\">\n Re-process events with current policy rules\n </p>\n </div>\n </div>\n </CardHeader>\n\n <CardContent className=\"p-6\">\n <ApiErrorAlert error={error} className=\"mb-4\" errorFormatter={errorFormatter} />\n\n <form onSubmit={handleSubmit} className=\"space-y-6\">\n {/* Time Range Selection */}\n <div>\n <label className=\"block text-sm font-medium text-foreground mb-3\">\n Time range to reindex\n </label>\n <div className=\"grid grid-cols-1 gap-2\">\n {TIME_RANGE_OPTIONS.map((option) => (\n <button\n key={option.value}\n type=\"button\"\n onClick={() => setSelectedRange(option.value)}\n className={`px-4 py-3 text-left rounded-lg border transition-all ${\n selectedRange === option.value\n ? 'border-primary bg-primary/5 text-foreground'\n : 'border-input bg-background text-muted-foreground hover:border-primary/50 hover:bg-muted/50'\n }`}\n >\n <span className=\"font-medium\">{option.label}</span>\n </button>\n ))}\n </div>\n </div>\n\n {/* Summary */}\n <div className=\"p-4 bg-muted/50 rounded-lg text-sm text-muted-foreground\">\n {policyName ? (\n <p className=\"m-0\">\n This will re-process all events from <strong className=\"text-foreground\">{selectedOption?.label.toLowerCase()}</strong> using\n the current rules in <strong className=\"text-foreground\">{policyName}</strong>.\n </p>\n ) : (\n <p className=\"m-0\">\n This will re-process all events from <strong className=\"text-foreground\">{selectedOption?.label.toLowerCase()}</strong> using\n all current policy rules.\n </p>\n )}\n </div>\n\n {/* Actions */}\n <div className=\"flex justify-end gap-2 pt-2\">\n {onCancel && (\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={onCancel}\n disabled={isSubmitting}\n >\n Cancel\n </Button>\n )}\n <Button\n type=\"submit\"\n disabled={isSubmitting}\n >\n {isSubmitting ? (\n <>\n <Loader2 className=\"h-4 w-4 mr-2 animate-spin\" />\n Starting...\n </>\n ) : (\n 'Start Reindex'\n )}\n </Button>\n </div>\n </form>\n </CardContent>\n </Card>\n );\n}\n","import { useState } from 'react';\nimport type { ReindexJobSpec } from '../types/reindex';\nimport type { ErrorFormatter } from '../types/activity';\nimport { ActivityApiClient } from '../api/client';\nimport { Button } from './ui/button';\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n} from './ui/dialog';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from './ui/select';\nimport { ApiErrorAlert } from './ApiErrorAlert';\nimport { Loader2, RefreshCw } from 'lucide-react';\n\nexport interface ReindexJobDialogProps {\n /** API client instance */\n client: ActivityApiClient;\n /** Policy name to reindex */\n policyName: string;\n /** Whether the dialog is open */\n open: boolean;\n /** Callback when dialog should close */\n onOpenChange: (open: boolean) => void;\n /** Callback when job is successfully created */\n onSuccess?: (jobName: string) => void;\n /** Custom error formatter */\n errorFormatter?: ErrorFormatter;\n}\n\nconst TIME_RANGE_OPTIONS = [\n { label: 'Last hour', value: 'now-1h' },\n { label: 'Last 24 hours', value: 'now-24h' },\n { label: 'Last 7 days', value: 'now-7d' },\n { label: 'Last 30 days', value: 'now-30d' },\n { label: 'All time', value: 'now-365d' },\n] as const;\n\n/**\n * Dialog for quickly reindexing a policy\n */\nexport function ReindexJobDialog({\n client,\n policyName,\n open,\n onOpenChange,\n onSuccess,\n errorFormatter,\n}: ReindexJobDialogProps) {\n const [selectedRange, setSelectedRange] = useState('now-7d');\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const handleSubmit = async () => {\n setIsSubmitting(true);\n setError(null);\n\n try {\n const timestamp = Date.now().toString(36);\n const jobName = `reindex-${policyName}-${timestamp}`\n .toLowerCase()\n .replace(/[^a-z0-9-]/g, '-')\n .slice(0, 63);\n\n const spec: ReindexJobSpec = {\n timeRange: {\n startTime: selectedRange,\n endTime: 'now',\n },\n policySelector: {\n names: [policyName],\n },\n };\n\n const job = await client.createReindexJob(jobName, spec);\n onOpenChange(false);\n onSuccess?.(job.metadata?.name || jobName);\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to create job'));\n } finally {\n setIsSubmitting(false);\n }\n };\n\n const selectedOption = TIME_RANGE_OPTIONS.find(o => o.value === selectedRange);\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"sm:max-w-sm\">\n <DialogHeader>\n <div className=\"flex items-center gap-3\">\n <div className=\"p-2 bg-primary/10 rounded-lg\">\n <RefreshCw className=\"h-5 w-5 text-primary\" />\n </div>\n <div>\n <DialogTitle>Reindex Policy</DialogTitle>\n <DialogDescription className=\"text-xs\">\n Re-process events for "{policyName}"\n </DialogDescription>\n </div>\n </div>\n </DialogHeader>\n\n <div className=\"space-y-4 py-2\">\n <ApiErrorAlert error={error} errorFormatter={errorFormatter} />\n\n <div>\n <label className=\"block text-sm font-medium text-foreground mb-2\">\n Time range\n </label>\n <Select value={selectedRange} onValueChange={setSelectedRange}>\n <SelectTrigger className=\"w-full\">\n <SelectValue placeholder=\"Select time range\" />\n </SelectTrigger>\n <SelectContent>\n {TIME_RANGE_OPTIONS.map((option) => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n <p className=\"text-sm text-muted-foreground\">\n Events from {selectedOption?.label.toLowerCase()} will be re-processed.\n </p>\n </div>\n\n <div className=\"flex justify-end gap-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => onOpenChange(false)}\n disabled={isSubmitting}\n >\n Cancel\n </Button>\n <Button\n type=\"button\"\n onClick={handleSubmit}\n disabled={isSubmitting}\n >\n {isSubmitting ? (\n <>\n <Loader2 className=\"h-4 w-4 mr-2 animate-spin\" />\n Starting...\n </>\n ) : (\n 'Start Reindex'\n )}\n </Button>\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n","import * as React from 'react';\nimport { Check, ChevronsUpDown, X } from 'lucide-react';\nimport { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from 'cmdk';\nimport * as Popover from '@radix-ui/react-popover';\nimport { cn } from '../../lib/utils';\n\nexport interface MultiComboboxOption {\n value: string;\n label: string;\n count?: number;\n}\n\nexport interface MultiComboboxProps {\n options: MultiComboboxOption[];\n values: string[];\n onValuesChange: (values: string[]) => void;\n placeholder?: string;\n searchPlaceholder?: string;\n emptyMessage?: string;\n disabled?: boolean;\n loading?: boolean;\n className?: string;\n /** Maximum number of selections to show in the trigger before collapsing */\n maxDisplayed?: number;\n}\n\n/**\n * Multi-select combobox component with type-ahead search and fuzzy matching.\n * Built on cmdk for search functionality and Radix Popover for positioning.\n */\nexport function MultiCombobox({\n options,\n values,\n onValuesChange,\n placeholder = 'Select...',\n searchPlaceholder = 'Search...',\n emptyMessage = 'No results found.',\n disabled = false,\n loading = false,\n className,\n maxDisplayed = 2,\n}: MultiComboboxProps) {\n const [open, setOpen] = React.useState(false);\n const [search, setSearch] = React.useState('');\n\n // Find selected options for display\n const selectedOptions = options.filter((opt) => values.includes(opt.value));\n\n const displayValue = React.useMemo(() => {\n if (loading) return 'Loading...';\n if (selectedOptions.length === 0) return placeholder;\n if (selectedOptions.length <= maxDisplayed) {\n return selectedOptions.map((opt) => opt.label).join(', ');\n }\n return `${selectedOptions.slice(0, maxDisplayed).map((opt) => opt.label).join(', ')} +${selectedOptions.length - maxDisplayed} more`;\n }, [loading, selectedOptions, placeholder, maxDisplayed]);\n\n const handleSelect = React.useCallback(\n (selectedValue: string) => {\n if (values.includes(selectedValue)) {\n // Remove from selection\n onValuesChange(values.filter((v) => v !== selectedValue));\n } else {\n // Add to selection\n onValuesChange([...values, selectedValue]);\n }\n },\n [onValuesChange, values]\n );\n\n const handleClear = React.useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n onValuesChange([]);\n },\n [onValuesChange]\n );\n\n const handleRemove = React.useCallback(\n (e: React.MouseEvent, valueToRemove: string) => {\n e.stopPropagation();\n onValuesChange(values.filter((v) => v !== valueToRemove));\n },\n [onValuesChange, values]\n );\n\n // Custom fuzzy filter function\n const filterOptions = React.useCallback(\n (optionValue: string, searchQuery: string): number => {\n if (!searchQuery) return 1;\n\n const option = options.find((o) => o.value === optionValue);\n const label = option?.label || optionValue;\n const lowerLabel = label.toLowerCase();\n const lowerSearch = searchQuery.toLowerCase();\n\n // Exact match\n if (lowerLabel === lowerSearch) return 1;\n\n // Starts with\n if (lowerLabel.startsWith(lowerSearch)) return 0.9;\n\n // Contains\n if (lowerLabel.includes(lowerSearch)) return 0.8;\n\n // Fuzzy match - check if all search chars appear in order\n let searchIdx = 0;\n for (let i = 0; i < lowerLabel.length && searchIdx < lowerSearch.length; i++) {\n if (lowerLabel[i] === lowerSearch[searchIdx]) {\n searchIdx++;\n }\n }\n if (searchIdx === lowerSearch.length) return 0.6;\n\n return 0;\n },\n [options]\n );\n\n return (\n <Popover.Root open={open} onOpenChange={setOpen}>\n <Popover.Trigger asChild>\n <button\n type=\"button\"\n role=\"combobox\"\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n disabled={disabled || loading}\n className={cn(\n 'flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background',\n 'placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'whitespace-nowrap',\n className\n )}\n >\n <span className=\"truncate text-left flex-1\">\n {displayValue}\n </span>\n <div className=\"flex items-center gap-1 ml-2\">\n {values.length > 0 && !disabled && (\n <span\n role=\"button\"\n tabIndex={0}\n onClick={handleClear}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n handleClear(e as unknown as React.MouseEvent);\n }\n }}\n className=\"rounded-sm opacity-50 hover:opacity-100 cursor-pointer\"\n >\n <X className=\"h-3 w-3\" />\n </span>\n )}\n <ChevronsUpDown className=\"h-4 w-4 shrink-0 opacity-50\" />\n </div>\n </button>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content\n className={cn(\n 'z-50 min-w-[var(--radix-popover-trigger-width)] overflow-hidden rounded-md border shadow-md',\n 'bg-white dark:bg-slate-900 text-foreground',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n 'data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2'\n )}\n sideOffset={4}\n align=\"start\"\n >\n <Command\n filter={filterOptions}\n className=\"w-full\"\n >\n <div className=\"flex items-center border-b px-3\">\n <CommandInput\n placeholder={searchPlaceholder}\n value={search}\n onValueChange={setSearch}\n className=\"flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50\"\n />\n </div>\n {/* Selected items chips */}\n {values.length > 0 && (\n <div className=\"flex flex-wrap gap-1 p-2 border-b\">\n {selectedOptions.map((option) => (\n <span\n key={option.value}\n className=\"inline-flex items-center gap-1 px-2 py-0.5 rounded-md bg-secondary text-secondary-foreground text-xs\"\n >\n {option.label}\n <button\n type=\"button\"\n onClick={(e) => handleRemove(e, option.value)}\n className=\"rounded-sm hover:bg-secondary-foreground/20\"\n >\n <X className=\"h-3 w-3\" />\n </button>\n </span>\n ))}\n </div>\n )}\n <CommandList className=\"max-h-[300px] overflow-y-auto p-1\">\n <CommandEmpty className=\"py-6 text-center text-sm text-muted-foreground\">\n {emptyMessage}\n </CommandEmpty>\n <CommandGroup>\n {options.map((option) => (\n <CommandItem\n key={option.value}\n value={option.value}\n onSelect={() => handleSelect(option.value)}\n className={cn(\n 'relative flex cursor-pointer select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none',\n 'data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground',\n 'hover:bg-accent hover:text-accent-foreground'\n )}\n >\n <Check\n className={cn(\n 'mr-2 h-4 w-4',\n values.includes(option.value) ? 'opacity-100' : 'opacity-0'\n )}\n />\n <span className=\"flex-1 truncate\">{option.label}</span>\n {option.count !== undefined && (\n <span className=\"ml-2 text-xs text-muted-foreground\">\n ({option.count})\n </span>\n )}\n </CommandItem>\n ))}\n </CommandGroup>\n </CommandList>\n </Command>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n );\n}\n","import { useState, useCallback } from 'react';\nimport type {\n PolicyPreviewInput,\n PolicyPreviewStatus,\n PolicyPreviewSpec,\n PolicyPreviewPolicySpec,\n PolicyPreviewInputType,\n KubernetesEvent,\n AutoFetchSpec,\n} from '../types/policy';\nimport type { Event } from '../types';\nimport { ActivityApiClient } from '../api/client';\n\n/**\n * Options for the usePolicyPreview hook\n */\nexport interface UsePolicyPreviewOptions {\n /** API client instance */\n client: ActivityApiClient;\n}\n\n/**\n * Result returned by the usePolicyPreview hook\n */\nexport interface UsePolicyPreviewResult {\n /** Current preview inputs (multiple) */\n inputs: PolicyPreviewInput[];\n /** Selected input indices for preview */\n selectedIndices: Set<number>;\n /** Last preview result (status from server) */\n result: PolicyPreviewStatus | null;\n /** Whether a preview is running */\n isLoading: boolean;\n /** Error if any occurred */\n error: Error | null;\n /** Set all inputs */\n setInputs: (inputs: PolicyPreviewInput[]) => void;\n /** Add an input */\n addInput: (input: PolicyPreviewInput) => void;\n /** Remove an input by index */\n removeInput: (index: number) => void;\n /** Toggle selection of an input */\n toggleSelection: (index: number) => void;\n /** Select all inputs */\n selectAll: () => void;\n /** Deselect all inputs */\n deselectAll: () => void;\n /** Set inputs from audit events */\n setAuditInputs: (events: Event[]) => void;\n /** Set inputs from Kubernetes events */\n setEventInputs: (events: KubernetesEvent[]) => void;\n /** Run the preview with selected inputs */\n runPreview: (\n policySpec: PolicyPreviewPolicySpec,\n kindLabel?: string,\n kindLabelPlural?: string\n ) => Promise<PolicyPreviewStatus>;\n /** Run the preview with auto-fetch (fetches sample data automatically) */\n runPreviewWithAutoFetch: (\n policySpec: PolicyPreviewPolicySpec,\n autoFetch?: AutoFetchSpec,\n kindLabel?: string,\n kindLabelPlural?: string\n ) => Promise<PolicyPreviewStatus>;\n /** Clear the preview result */\n clearResult: () => void;\n /** Clear all state */\n reset: () => void;\n /** Get selected inputs */\n getSelectedInputs: () => PolicyPreviewInput[];\n /** Whether there are selected inputs */\n hasSelection: boolean;\n\n // Legacy single-input support\n /** @deprecated Use inputs[0] */\n input: PolicyPreviewInput;\n /** @deprecated Use setInputs([input]) */\n setInput: (input: PolicyPreviewInput) => void;\n /** @deprecated Use setAuditInputs([event]) */\n setAuditInput: (audit: Event) => void;\n /** @deprecated Use setEventInputs([event]) */\n setEventInput: (event: KubernetesEvent) => void;\n /** @deprecated Use setInputs with parsed JSON */\n setInputFromJson: (json: string) => void;\n /** @deprecated Use setInputs */\n setInputType: (type: PolicyPreviewInputType) => void;\n /** Get the current input as formatted JSON */\n getInputJson: () => string;\n}\n\n/**\n * Create an empty audit event for preview\n */\nfunction createEmptyAuditEvent(): Event {\n return {\n level: 'RequestResponse',\n auditID: 'preview-' + Date.now(),\n stage: 'ResponseComplete',\n requestURI: '/apis/example.com/v1/namespaces/default/examples/my-example',\n verb: 'create',\n user: {\n username: 'alice@example.com',\n uid: 'user-123',\n groups: ['users', 'developers'],\n },\n objectRef: {\n apiGroup: 'example.com',\n apiVersion: 'v1',\n resource: 'examples',\n namespace: 'default',\n name: 'my-example',\n uid: 'resource-456',\n },\n responseStatus: {\n code: 201,\n status: 'Success',\n },\n requestReceivedTimestamp: new Date().toISOString(),\n stageTimestamp: new Date().toISOString(),\n };\n}\n\n/**\n * Create an empty Kubernetes event for preview (using eventsv1 field names)\n */\nfunction createEmptyKubernetesEvent(): KubernetesEvent {\n return {\n type: 'Normal',\n reason: 'Created',\n note: 'Example resource was created successfully',\n regarding: {\n apiVersion: 'example.com/v1',\n kind: 'Example',\n name: 'my-example',\n namespace: 'default',\n uid: 'resource-456',\n },\n reportingController: 'example-controller',\n eventTime: new Date().toISOString(),\n series: {\n count: 1,\n lastObservedTime: new Date().toISOString(),\n },\n metadata: {\n name: 'my-example.123abc',\n namespace: 'default',\n },\n };\n}\n\n/**\n * Create the initial input state\n */\nfunction createInitialInput(): PolicyPreviewInput {\n return {\n type: 'audit',\n audit: createEmptyAuditEvent(),\n };\n}\n\n/**\n * React hook for managing policy preview state\n */\nexport function usePolicyPreview({\n client,\n}: UsePolicyPreviewOptions): UsePolicyPreviewResult {\n const [inputs, setInputsState] = useState<PolicyPreviewInput[]>([]);\n const [selectedIndices, setSelectedIndices] = useState<Set<number>>(new Set());\n const [result, setResult] = useState<PolicyPreviewStatus | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n // Set inputs and auto-select all\n const setInputs = useCallback((newInputs: PolicyPreviewInput[]) => {\n setInputsState(newInputs);\n setSelectedIndices(new Set(newInputs.map((_, i) => i)));\n setResult(null);\n setError(null);\n }, []);\n\n // Add an input\n const addInput = useCallback((input: PolicyPreviewInput) => {\n setInputsState((prev) => {\n const newInputs = [...prev, input];\n // Auto-select the new input\n setSelectedIndices((prevSelected) => new Set([...prevSelected, newInputs.length - 1]));\n return newInputs;\n });\n }, []);\n\n // Remove an input by index\n const removeInput = useCallback((index: number) => {\n setInputsState((prev) => prev.filter((_, i) => i !== index));\n setSelectedIndices((prev) => {\n const newSet = new Set<number>();\n prev.forEach((i) => {\n if (i < index) newSet.add(i);\n else if (i > index) newSet.add(i - 1);\n });\n return newSet;\n });\n }, []);\n\n // Toggle selection\n const toggleSelection = useCallback((index: number) => {\n setSelectedIndices((prev) => {\n const newSet = new Set(prev);\n if (newSet.has(index)) {\n newSet.delete(index);\n } else {\n newSet.add(index);\n }\n return newSet;\n });\n }, []);\n\n // Select all\n const selectAll = useCallback(() => {\n setSelectedIndices(new Set(inputs.map((_, i) => i)));\n }, [inputs]);\n\n // Deselect all\n const deselectAll = useCallback(() => {\n setSelectedIndices(new Set());\n }, []);\n\n // Set inputs from audit events\n const setAuditInputs = useCallback((events: Event[]) => {\n const newInputs: PolicyPreviewInput[] = events.map((event) => ({\n type: 'audit' as const,\n audit: event,\n }));\n setInputs(newInputs);\n }, [setInputs]);\n\n // Set inputs from Kubernetes events\n const setEventInputs = useCallback((events: KubernetesEvent[]) => {\n const newInputs: PolicyPreviewInput[] = events.map((event) => ({\n type: 'event' as const,\n event,\n }));\n setInputs(newInputs);\n }, [setInputs]);\n\n // Get selected inputs\n const getSelectedInputs = useCallback((): PolicyPreviewInput[] => {\n return inputs.filter((_, i) => selectedIndices.has(i));\n }, [inputs, selectedIndices]);\n\n // Get current input as JSON (for legacy support / manual editing)\n const getInputJson = useCallback((): string => {\n const selected = getSelectedInputs();\n if (selected.length === 0) return '[]';\n if (selected.length === 1) {\n const input = selected[0];\n const data = input.type === 'audit' ? input.audit : input.event;\n return JSON.stringify(data, null, 2);\n }\n return JSON.stringify(selected, null, 2);\n }, [getSelectedInputs]);\n\n // Run the preview\n const runPreview = useCallback(\n async (\n policySpec: PolicyPreviewPolicySpec,\n kindLabel?: string,\n kindLabelPlural?: string\n ): Promise<PolicyPreviewStatus> => {\n const selectedInputs = getSelectedInputs();\n if (selectedInputs.length === 0) {\n const err = new Error('No inputs selected for preview');\n setError(err);\n throw err;\n }\n\n setIsLoading(true);\n setError(null);\n\n try {\n const spec: PolicyPreviewSpec = {\n policy: policySpec,\n inputs: selectedInputs,\n kindLabel,\n kindLabelPlural,\n };\n\n const previewResult = await client.createPolicyPreview(spec);\n const status = previewResult.status || {\n activities: [],\n results: [],\n error: 'No status returned from server',\n };\n\n setResult(status);\n return status;\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n setError(error);\n setResult({\n activities: [],\n results: [],\n error: error.message,\n });\n throw error;\n } finally {\n setIsLoading(false);\n }\n },\n [client, getSelectedInputs]\n );\n\n // Run the preview with auto-fetch\n const runPreviewWithAutoFetch = useCallback(\n async (\n policySpec: PolicyPreviewPolicySpec,\n autoFetch: AutoFetchSpec = { limit: 10, timeRange: '24h', sources: 'both' },\n kindLabel?: string,\n kindLabelPlural?: string\n ): Promise<PolicyPreviewStatus> => {\n setIsLoading(true);\n setError(null);\n\n try {\n const spec: PolicyPreviewSpec = {\n policy: policySpec,\n autoFetch,\n kindLabel,\n kindLabelPlural,\n };\n\n const previewResult = await client.createPolicyPreview(spec);\n const status = previewResult.status || {\n activities: [],\n results: [],\n error: 'No status returned from server',\n };\n\n setResult(status);\n\n // Update inputs from fetchedInputs so UI can display what was tested\n if (status.fetchedInputs) {\n setInputs(status.fetchedInputs);\n }\n\n return status;\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n setError(error);\n setResult({\n activities: [],\n results: [],\n error: error.message,\n });\n throw error;\n } finally {\n setIsLoading(false);\n }\n },\n [client, setInputs]\n );\n\n // Clear the result\n const clearResult = useCallback(() => {\n setResult(null);\n setError(null);\n }, []);\n\n // Reset all state\n const reset = useCallback(() => {\n setInputsState([]);\n setSelectedIndices(new Set());\n setResult(null);\n setError(null);\n }, []);\n\n // Legacy single-input support\n const input = inputs[0] || createInitialInput();\n\n const setInput = useCallback((newInput: PolicyPreviewInput) => {\n setInputs([newInput]);\n }, [setInputs]);\n\n const setAuditInput = useCallback((audit: Event) => {\n setInputs([{ type: 'audit', audit }]);\n }, [setInputs]);\n\n const setEventInput = useCallback((event: KubernetesEvent) => {\n setInputs([{ type: 'event', event }]);\n }, [setInputs]);\n\n const setInputFromJson = useCallback((json: string) => {\n try {\n const parsed = JSON.parse(json);\n if (Array.isArray(parsed)) {\n // Multiple inputs\n setInputs(parsed);\n } else {\n // Single input - determine type\n const inputType = parsed.verb ? 'audit' : 'event';\n if (inputType === 'audit') {\n setInputs([{ type: 'audit', audit: parsed }]);\n } else {\n setInputs([{ type: 'event', event: parsed }]);\n }\n }\n } catch (err) {\n setError(new Error(`Invalid JSON: ${err instanceof Error ? err.message : String(err)}`));\n }\n }, [setInputs]);\n\n const setInputType = useCallback((type: PolicyPreviewInputType) => {\n if (type === 'audit') {\n setInputs([{ type: 'audit', audit: createEmptyAuditEvent() }]);\n } else {\n setInputs([{ type: 'event', event: createEmptyKubernetesEvent() }]);\n }\n }, [setInputs]);\n\n return {\n inputs,\n selectedIndices,\n result,\n isLoading,\n error,\n setInputs,\n addInput,\n removeInput,\n toggleSelection,\n selectAll,\n deselectAll,\n setAuditInputs,\n setEventInputs,\n runPreview,\n runPreviewWithAutoFetch,\n clearResult,\n reset,\n getSelectedInputs,\n hasSelection: selectedIndices.size > 0,\n // Legacy support\n input,\n setInput,\n setAuditInput,\n setEventInput,\n setInputFromJson,\n setInputType,\n getInputJson,\n };\n}\n","import type { AuditLogQuery, AuditLogQuerySpec } from '../types';\nimport type {\n Activity,\n ActivityList,\n ActivityListParams,\n ActivityQuery,\n ActivityQuerySpec,\n ActivityFacetQuery,\n ActivityFacetQuerySpec,\n AuditLogFacetsQuery,\n AuditLogFacetsQuerySpec,\n WatchEvent,\n} from '../types/activity';\nimport type {\n ActivityPolicy,\n ActivityPolicySpec,\n ActivityPolicyList,\n PolicyPreview,\n PolicyPreviewSpec,\n} from '../types/policy';\nimport { parseApiError, NetworkError } from '../lib/errors';\nimport type {\n K8sEvent,\n K8sEventList,\n K8sEventListParams,\n EventFacetQuery,\n EventFacetQuerySpec,\n EventQuery,\n EventQuerySpec,\n} from '../types/k8s-event';\nimport type {\n ReindexJob,\n ReindexJobListResource,\n ReindexJobSpec,\n} from '../types/reindex';\n\n/**\n * API Group information from Kubernetes discovery\n */\nexport interface APIGroup {\n name: string;\n versions: { groupVersion: string; version: string }[];\n preferredVersion?: { groupVersion: string; version: string };\n}\n\n/**\n * API Resource information from Kubernetes discovery\n */\nexport interface APIResource {\n name: string;\n singularName: string;\n namespaced: boolean;\n kind: string;\n verbs: string[];\n shortNames?: string[];\n categories?: string[];\n}\n\nexport interface ApiClientConfig {\n /**\n * Base URL of the Activity API server\n * Example: 'https://api.example.com'\n */\n baseUrl: string;\n\n /**\n * Optional bearer token for authentication\n */\n token?: string;\n\n /**\n * Custom fetch implementation (useful for testing)\n */\n fetch?: typeof fetch;\n\n /**\n * Optional response transformer for proxies that wrap API responses.\n * Called with the parsed JSON response, should return the unwrapped data.\n *\n * Example for a proxy that wraps responses in {code, data, ...}:\n * ```\n * responseTransformer: (response) => response.data\n * ```\n */\n responseTransformer?: (response: unknown) => unknown;\n}\n\nexport class ActivityApiClient {\n private config: ApiClientConfig;\n\n constructor(config: ApiClientConfig) {\n this.config = {\n ...config,\n fetch: config.fetch || globalThis.fetch.bind(globalThis),\n };\n }\n\n /**\n * Create a new AuditLogQuery\n */\n async createQuery(\n name: string,\n spec: AuditLogQuerySpec\n ): Promise<AuditLogQuery> {\n const query: AuditLogQuery = {\n apiVersion: 'activity.miloapis.com/v1alpha1',\n kind: 'AuditLogQuery',\n metadata: { name },\n spec,\n };\n\n const response = await this.fetch(\n '/apis/activity.miloapis.com/v1alpha1/auditlogqueries',\n {\n method: 'POST',\n body: JSON.stringify(query),\n }\n );\n\n return this.parseJson(response);\n }\n\n /**\n * Execute a query and get results with automatic pagination\n */\n async *executeQueryPaginated(\n spec: AuditLogQuerySpec,\n options?: {\n maxPages?: number;\n queryNamePrefix?: string;\n }\n ): AsyncGenerator<AuditLogQuery> {\n let pageNum = 0;\n let currentSpec = { ...spec };\n const maxPages = options?.maxPages || 100;\n const namePrefix = options?.queryNamePrefix || 'query';\n\n while (pageNum < maxPages) {\n const queryName = `${namePrefix}-${Date.now()}-${pageNum}`;\n const result = await this.createQuery(queryName, currentSpec);\n\n yield result;\n\n // Check if there are more results\n if (!result.status?.continue) {\n break;\n }\n\n currentSpec = {\n ...currentSpec,\n continue: result.status.continue,\n };\n pageNum++;\n }\n }\n\n // ============================================\n // Activity API Methods\n // ============================================\n\n /**\n * Create an ActivityQuery to search historical activities.\n * This is the preferred method for loading activity history with filters.\n */\n async createActivityQuery(spec: ActivityQuerySpec): Promise<ActivityQuery> {\n const query: ActivityQuery = {\n apiVersion: 'activity.miloapis.com/v1alpha1',\n kind: 'ActivityQuery',\n spec,\n };\n\n const response = await this.fetch(\n '/apis/activity.miloapis.com/v1alpha1/activityqueries',\n {\n method: 'POST',\n body: JSON.stringify(query),\n }\n );\n\n return this.parseJson(response);\n }\n\n /**\n * List activities with optional filtering and pagination\n */\n async listActivities(params?: ActivityListParams): Promise<ActivityList> {\n const searchParams = new URLSearchParams();\n\n if (params?.filter) searchParams.set('filter', params.filter);\n if (params?.fieldSelector) searchParams.set('fieldSelector', params.fieldSelector);\n if (params?.labelSelector) searchParams.set('labelSelector', params.labelSelector);\n if (params?.search) searchParams.set('search', params.search);\n if (params?.start) searchParams.set('start', params.start);\n if (params?.end) searchParams.set('end', params.end);\n if (params?.limit) searchParams.set('limit', String(params.limit));\n if (params?.continue) searchParams.set('continue', params.continue);\n\n const queryString = searchParams.toString();\n const path = `/apis/activity.miloapis.com/v1alpha1/activities${queryString ? `?${queryString}` : ''}`;\n\n const response = await this.fetch(path);\n return this.parseJson(response);\n }\n\n /**\n * Get a specific activity by name\n */\n async getActivity(namespace: string, name: string): Promise<Activity> {\n const response = await this.fetch(\n `/apis/activity.miloapis.com/v1alpha1/namespaces/${namespace}/activities/${name}`\n );\n return this.parseJson(response);\n }\n\n /**\n * Query facets for filtering UI (autocomplete, distinct values)\n */\n async queryFacets(spec: ActivityFacetQuerySpec): Promise<ActivityFacetQuery> {\n const query: ActivityFacetQuery = {\n apiVersion: 'activity.miloapis.com/v1alpha1',\n kind: 'ActivityFacetQuery',\n spec,\n };\n\n const response = await this.fetch(\n '/apis/activity.miloapis.com/v1alpha1/activityfacetqueries',\n {\n method: 'POST',\n body: JSON.stringify(query),\n }\n );\n\n return this.parseJson(response);\n }\n\n /**\n * List activities with automatic pagination using async generator\n */\n async *listActivitiesPaginated(\n params?: ActivityListParams,\n options?: {\n maxPages?: number;\n }\n ): AsyncGenerator<ActivityList> {\n let currentParams = { ...params };\n const maxPages = options?.maxPages || 100;\n let pageNum = 0;\n\n while (pageNum < maxPages) {\n const result = await this.listActivities(currentParams);\n\n yield result;\n\n // Check if there are more results\n if (!result.metadata?.continue) {\n break;\n }\n\n currentParams = {\n ...currentParams,\n continue: result.metadata.continue,\n };\n pageNum++;\n }\n }\n\n /**\n * Watch activities in real-time using the Kubernetes watch API.\n * Returns an async generator that yields watch events as they arrive.\n *\n * @param params - Query parameters (filter, start, end, etc.)\n * @param options - Watch options\n * @returns AsyncGenerator of watch events and an abort function\n */\n watchActivities(\n params?: Omit<ActivityListParams, 'watch'>,\n options?: {\n /** Resource version to start watching from */\n resourceVersion?: string;\n /** Callback when an event is received */\n onEvent?: (event: WatchEvent<Activity>) => void;\n /** Callback when an error occurs */\n onError?: (error: Error) => void;\n /** Callback when the connection closes */\n onClose?: () => void;\n }\n ): { stop: () => void } {\n const abortController = new AbortController();\n\n // Build URL with watch=true\n const searchParams = new URLSearchParams();\n searchParams.set('watch', 'true');\n\n if (params?.filter) searchParams.set('filter', params.filter);\n if (params?.fieldSelector) searchParams.set('fieldSelector', params.fieldSelector);\n if (params?.labelSelector) searchParams.set('labelSelector', params.labelSelector);\n if (params?.search) searchParams.set('search', params.search);\n if (params?.start) searchParams.set('start', params.start);\n if (params?.end) searchParams.set('end', params.end);\n if (options?.resourceVersion) searchParams.set('resourceVersion', options.resourceVersion);\n\n const queryString = searchParams.toString();\n const path = `/apis/activity.miloapis.com/v1alpha1/activities?${queryString}`;\n const url = `${this.config.baseUrl}${path}`;\n\n const headers: Record<string, string> = {\n 'Accept': 'application/json',\n };\n\n if (this.config.token) {\n headers['Authorization'] = `Bearer ${this.config.token}`;\n }\n\n // Start the watch connection\n const startWatch = async () => {\n try {\n const response = await this.config.fetch!(url, {\n headers,\n signal: abortController.signal,\n });\n\n if (!response.ok) {\n const error = await response.text();\n throw new Error(`Watch request failed: ${response.status} ${error}`);\n }\n\n if (!response.body) {\n throw new Error('Response body is not available');\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n\n while (true) {\n const { done, value } = await reader.read();\n\n if (done) {\n options?.onClose?.();\n break;\n }\n\n buffer += decoder.decode(value, { stream: true });\n\n // Process complete lines (newline-delimited JSON)\n const lines = buffer.split('\\n');\n buffer = lines.pop() || ''; // Keep incomplete line in buffer\n\n for (const line of lines) {\n if (line.trim()) {\n try {\n const event = JSON.parse(line) as WatchEvent<Activity>;\n options?.onEvent?.(event);\n } catch (parseError) {\n console.warn('Failed to parse watch event:', parseError, line);\n }\n }\n }\n }\n } catch (error) {\n if ((error as Error).name === 'AbortError') {\n options?.onClose?.();\n return;\n }\n options?.onError?.(error as Error);\n }\n };\n\n // Start watching in background\n startWatch();\n\n return {\n stop: () => abortController.abort(),\n };\n }\n\n /**\n * Watch activities using an async generator pattern.\n * This is an alternative API that yields events as they arrive.\n *\n * @param params - Query parameters (filter, start, end, etc.)\n * @param resourceVersion - Resource version to start watching from\n * @returns AsyncGenerator of watch events\n */\n async *watchActivitiesGenerator(\n params?: Omit<ActivityListParams, 'watch'>,\n resourceVersion?: string\n ): AsyncGenerator<WatchEvent<Activity>> {\n const abortController = new AbortController();\n\n // Build URL with watch=true\n const searchParams = new URLSearchParams();\n searchParams.set('watch', 'true');\n\n if (params?.filter) searchParams.set('filter', params.filter);\n if (params?.fieldSelector) searchParams.set('fieldSelector', params.fieldSelector);\n if (params?.labelSelector) searchParams.set('labelSelector', params.labelSelector);\n if (params?.search) searchParams.set('search', params.search);\n if (params?.start) searchParams.set('start', params.start);\n if (params?.end) searchParams.set('end', params.end);\n if (resourceVersion) searchParams.set('resourceVersion', resourceVersion);\n\n const queryString = searchParams.toString();\n const path = `/apis/activity.miloapis.com/v1alpha1/activities?${queryString}`;\n const url = `${this.config.baseUrl}${path}`;\n\n const headers: Record<string, string> = {\n 'Accept': 'application/json',\n };\n\n if (this.config.token) {\n headers['Authorization'] = `Bearer ${this.config.token}`;\n }\n\n try {\n const response = await this.config.fetch!(url, {\n headers,\n signal: abortController.signal,\n });\n\n if (!response.ok) {\n const error = await response.text();\n throw new Error(`Watch request failed: ${response.status} ${error}`);\n }\n\n if (!response.body) {\n throw new Error('Response body is not available');\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n\n while (true) {\n const { done, value } = await reader.read();\n\n if (done) {\n break;\n }\n\n buffer += decoder.decode(value, { stream: true });\n\n // Process complete lines (newline-delimited JSON)\n const lines = buffer.split('\\n');\n buffer = lines.pop() || ''; // Keep incomplete line in buffer\n\n for (const line of lines) {\n if (line.trim()) {\n const event = JSON.parse(line) as WatchEvent<Activity>;\n yield event;\n }\n }\n }\n } finally {\n abortController.abort();\n }\n }\n\n // ============================================\n // ActivityPolicy API Methods\n // ============================================\n\n /**\n * List all ActivityPolicies\n */\n async listPolicies(): Promise<ActivityPolicyList> {\n const response = await this.fetch(\n '/apis/activity.miloapis.com/v1alpha1/activitypolicies'\n );\n return this.parseJson(response);\n }\n\n /**\n * Get a specific ActivityPolicy by name\n */\n async getPolicy(name: string): Promise<ActivityPolicy> {\n const response = await this.fetch(\n `/apis/activity.miloapis.com/v1alpha1/activitypolicies/${name}`\n );\n return this.parseJson(response);\n }\n\n /**\n * Create a new ActivityPolicy\n * @param name Policy name\n * @param spec Policy specification\n * @param dryRun If true, validate without persisting\n */\n async createPolicy(\n name: string,\n spec: ActivityPolicySpec,\n dryRun?: boolean\n ): Promise<ActivityPolicy> {\n const policy: ActivityPolicy = {\n apiVersion: 'activity.miloapis.com/v1alpha1',\n kind: 'ActivityPolicy',\n metadata: { name },\n spec,\n };\n\n const searchParams = new URLSearchParams();\n if (dryRun) {\n searchParams.set('dryRun', 'All');\n }\n\n const queryString = searchParams.toString();\n const path = `/apis/activity.miloapis.com/v1alpha1/activitypolicies${queryString ? `?${queryString}` : ''}`;\n\n const response = await this.fetch(path, {\n method: 'POST',\n body: JSON.stringify(policy),\n });\n\n return this.parseJson(response);\n }\n\n /**\n * Update an existing ActivityPolicy\n * @param name Policy name\n * @param spec Policy specification\n * @param dryRun If true, validate without persisting\n * @param resourceVersion Optional resource version for optimistic concurrency\n */\n async updatePolicy(\n name: string,\n spec: ActivityPolicySpec,\n dryRun?: boolean,\n resourceVersion?: string\n ): Promise<ActivityPolicy> {\n const policy: ActivityPolicy = {\n apiVersion: 'activity.miloapis.com/v1alpha1',\n kind: 'ActivityPolicy',\n metadata: {\n name,\n ...(resourceVersion ? { resourceVersion } : {}),\n },\n spec,\n };\n\n const searchParams = new URLSearchParams();\n if (dryRun) {\n searchParams.set('dryRun', 'All');\n }\n\n const queryString = searchParams.toString();\n const path = `/apis/activity.miloapis.com/v1alpha1/activitypolicies/${name}${queryString ? `?${queryString}` : ''}`;\n\n const response = await this.fetch(path, {\n method: 'PUT',\n body: JSON.stringify(policy),\n });\n\n return this.parseJson(response);\n }\n\n /**\n * Delete an ActivityPolicy by name\n */\n async deletePolicy(name: string): Promise<void> {\n await this.fetch(\n `/apis/activity.miloapis.com/v1alpha1/activitypolicies/${name}`,\n { method: 'DELETE' }\n );\n }\n\n // ============================================\n // API Discovery Methods\n // ============================================\n\n /**\n * Discover all API groups available in the cluster\n */\n async discoverAPIGroups(): Promise<{ groups: APIGroup[] }> {\n const response = await this.fetch('/apis');\n return this.parseJson(response);\n }\n\n /**\n * Discover resources for a specific API group\n */\n async discoverAPIResources(\n group: string,\n version?: string\n ): Promise<{ resources: APIResource[] }> {\n // If no version specified, try to get the preferred version first\n let apiVersion = version;\n if (!apiVersion) {\n try {\n const groupsResponse = await this.discoverAPIGroups();\n const groupInfo = groupsResponse.groups?.find((g) => g.name === group);\n apiVersion = groupInfo?.preferredVersion?.version || 'v1';\n } catch {\n apiVersion = 'v1';\n }\n }\n\n const response = await this.fetch(`/apis/${group}/${apiVersion}`);\n return this.parseJson(response);\n }\n\n // ============================================\n // Audit Log Facets API Methods\n // ============================================\n\n /**\n * Query facets from audit logs (API groups, resources, verbs, etc.)\n * This is an ephemeral resource that executes immediately and returns results.\n */\n async queryAuditLogFacets(spec: AuditLogFacetsQuerySpec): Promise<AuditLogFacetsQuery> {\n const query: AuditLogFacetsQuery = {\n apiVersion: 'activity.miloapis.com/v1alpha1',\n kind: 'AuditLogFacetsQuery',\n spec,\n };\n\n const response = await this.fetch(\n '/apis/activity.miloapis.com/v1alpha1/auditlogfacetsqueries',\n {\n method: 'POST',\n body: JSON.stringify(query),\n }\n );\n\n return this.parseJson(response);\n }\n\n /**\n * Get all API groups that have audit log data\n * Uses the AuditLogFacetsQuery API to discover API groups from actual audit logs.\n */\n async getAuditedAPIGroups(): Promise<string[]> {\n try {\n const result = await this.queryAuditLogFacets({\n timeRange: { start: 'now-30d' },\n facets: [{ field: 'objectRef.apiGroup', limit: 100 }],\n });\n const apiGroupFacet = result.status?.facets?.find(f => f.field === 'objectRef.apiGroup');\n return apiGroupFacet?.values?.map(v => v.value).filter(v => v) || [];\n } catch {\n return [];\n }\n }\n\n /**\n * Get resource types for an API group that have audit log data\n * Uses the AuditLogFacetsQuery API to discover resources from actual audit logs.\n */\n async getAuditedResources(apiGroup: string): Promise<string[]> {\n try {\n const result = await this.queryAuditLogFacets({\n timeRange: { start: 'now-30d' },\n filter: `objectRef.apiGroup == \"${apiGroup}\"`,\n facets: [{ field: 'objectRef.resource', limit: 100 }],\n });\n const resourceFacet = result.status?.facets?.find(f => f.field === 'objectRef.resource');\n return resourceFacet?.values?.map(v => v.value).filter(v => v) || [];\n } catch {\n return [];\n }\n }\n\n // ============================================\n // PolicyPreview API Methods\n // ============================================\n\n /**\n * Create a PolicyPreview to test a policy against sample input\n * This is a virtual resource that executes immediately and returns results\n */\n async createPolicyPreview(spec: PolicyPreviewSpec): Promise<PolicyPreview> {\n const preview: PolicyPreview = {\n apiVersion: 'activity.miloapis.com/v1alpha1',\n kind: 'PolicyPreview',\n spec,\n };\n\n const response = await this.fetch(\n '/apis/activity.miloapis.com/v1alpha1/policypreviews',\n {\n method: 'POST',\n body: JSON.stringify(preview),\n }\n );\n\n return this.parseJson(response);\n }\n\n // ============================================\n // Kubernetes Events API Methods\n // ============================================\n\n /**\n * List Kubernetes events with optional filtering and pagination\n */\n async listEvents(params?: K8sEventListParams): Promise<K8sEventList> {\n const searchParams = new URLSearchParams();\n\n if (params?.fieldSelector) searchParams.set('fieldSelector', params.fieldSelector);\n if (params?.labelSelector) searchParams.set('labelSelector', params.labelSelector);\n if (params?.limit) searchParams.set('limit', String(params.limit));\n if (params?.continue) searchParams.set('continue', params.continue);\n\n const queryString = searchParams.toString();\n\n // Use the standard Kubernetes events.k8s.io/v1 API for real-time events\n // For historical queries (up to 60 days), use createEventQuery() instead\n const basePath = params?.namespace\n ? `/apis/events.k8s.io/v1/namespaces/${params.namespace}/events`\n : '/apis/events.k8s.io/v1/events';\n\n const path = `${basePath}${queryString ? `?${queryString}` : ''}`;\n\n const response = await this.fetch(path);\n return this.parseJson(response);\n }\n\n /**\n * Query event facets for filtering UI (autocomplete, distinct values)\n */\n async queryEventFacets(spec: EventFacetQuerySpec): Promise<EventFacetQuery> {\n const query: EventFacetQuery = {\n apiVersion: 'activity.miloapis.com/v1alpha1',\n kind: 'EventFacetQuery',\n spec,\n };\n\n const response = await this.fetch(\n '/apis/activity.miloapis.com/v1alpha1/eventfacetqueries',\n {\n method: 'POST',\n body: JSON.stringify(query),\n }\n );\n\n return this.parseJson(response);\n }\n\n /**\n * Create an EventQuery to search historical events from ClickHouse.\n * Unlike the live events API (limited to 24 hours), EventQuery supports up to 60 days of history.\n *\n * Returns EventRecord objects with event data nested under the `.event` field.\n *\n * @param spec - Query specification with time range and filters\n * @returns EventQuery with results in status.results as EventRecord[]\n */\n async createEventQuery(spec: EventQuerySpec): Promise<EventQuery> {\n const query: EventQuery = {\n apiVersion: 'activity.miloapis.com/v1alpha1',\n kind: 'EventQuery',\n spec,\n };\n\n const response = await this.fetch(\n '/apis/activity.miloapis.com/v1alpha1/eventqueries',\n {\n method: 'POST',\n body: JSON.stringify(query),\n }\n );\n\n return this.parseJson(response);\n }\n\n /**\n * Watch events in real-time using the Kubernetes watch API.\n * Returns a stop function and provides callbacks for handling events.\n *\n * @param params - Query parameters (fieldSelector, namespace, etc.)\n * @param options - Watch options\n * @returns Object with stop function\n */\n watchEvents(\n params?: Omit<K8sEventListParams, 'watch'>,\n options?: {\n /** Resource version to start watching from */\n resourceVersion?: string;\n /** Callback when an event is received */\n onEvent?: (event: WatchEvent<K8sEvent>) => void;\n /** Callback when an error occurs */\n onError?: (error: Error) => void;\n /** Callback when the connection closes */\n onClose?: () => void;\n }\n ): { stop: () => void } {\n const abortController = new AbortController();\n\n // Build URL with watch=true\n const searchParams = new URLSearchParams();\n searchParams.set('watch', 'true');\n\n if (params?.fieldSelector) searchParams.set('fieldSelector', params.fieldSelector);\n if (params?.labelSelector) searchParams.set('labelSelector', params.labelSelector);\n if (options?.resourceVersion) searchParams.set('resourceVersion', options.resourceVersion);\n\n const queryString = searchParams.toString();\n\n // Use the standard Kubernetes events.k8s.io/v1 API for real-time watch\n // For historical queries (up to 60 days), use createEventQuery() instead\n const basePath = params?.namespace\n ? `/apis/events.k8s.io/v1/namespaces/${params.namespace}/events`\n : '/apis/events.k8s.io/v1/events';\n\n const path = `${basePath}?${queryString}`;\n const url = `${this.config.baseUrl}${path}`;\n\n const headers: Record<string, string> = {\n 'Accept': 'application/json',\n };\n\n if (this.config.token) {\n headers['Authorization'] = `Bearer ${this.config.token}`;\n }\n\n // Start the watch connection\n const startWatch = async () => {\n try {\n const response = await this.config.fetch!(url, {\n headers,\n signal: abortController.signal,\n });\n\n if (!response.ok) {\n const error = await response.text();\n throw new Error(`Watch request failed: ${response.status} ${error}`);\n }\n\n if (!response.body) {\n throw new Error('Response body is not available');\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n\n while (true) {\n const { done, value } = await reader.read();\n\n if (done) {\n options?.onClose?.();\n break;\n }\n\n buffer += decoder.decode(value, { stream: true });\n\n // Process complete lines (newline-delimited JSON)\n const lines = buffer.split('\\n');\n buffer = lines.pop() || ''; // Keep incomplete line in buffer\n\n for (const line of lines) {\n if (line.trim()) {\n try {\n const event = JSON.parse(line) as WatchEvent<K8sEvent>;\n options?.onEvent?.(event);\n } catch (parseError) {\n console.warn('Failed to parse watch event:', parseError, line);\n }\n }\n }\n }\n } catch (error) {\n if ((error as Error).name === 'AbortError') {\n options?.onClose?.();\n return;\n }\n options?.onError?.(error as Error);\n }\n };\n\n // Start watching in background\n startWatch();\n\n return {\n stop: () => abortController.abort(),\n };\n }\n\n // ReindexJob API Methods\n\n /**\n * List all ReindexJobs\n */\n async listReindexJobs(): Promise<ReindexJobListResource> {\n const response = await this.fetch(\n '/apis/activity.miloapis.com/v1alpha1/reindexjobs'\n );\n return this.parseJson(response);\n }\n\n /**\n * Get a specific ReindexJob by name\n */\n async getReindexJob(name: string): Promise<ReindexJob> {\n const response = await this.fetch(\n `/apis/activity.miloapis.com/v1alpha1/reindexjobs/${name}`\n );\n return this.parseJson(response);\n }\n\n /**\n * Create a new ReindexJob\n * @param name Job name\n * @param spec Job specification\n */\n async createReindexJob(\n name: string,\n spec: ReindexJobSpec\n ): Promise<ReindexJob> {\n const job: ReindexJob = {\n apiVersion: 'activity.miloapis.com/v1alpha1',\n kind: 'ReindexJob',\n metadata: { name },\n spec,\n };\n\n const response = await this.fetch(\n '/apis/activity.miloapis.com/v1alpha1/reindexjobs',\n {\n method: 'POST',\n body: JSON.stringify(job),\n }\n );\n\n return this.parseJson(response);\n }\n\n /**\n * Delete a ReindexJob by name\n */\n async deleteReindexJob(name: string): Promise<void> {\n await this.fetch(\n `/apis/activity.miloapis.com/v1alpha1/reindexjobs/${name}`,\n { method: 'DELETE' }\n );\n }\n\n /**\n * Watch ReindexJobs in real-time using the Kubernetes watch API.\n * Returns a stop function and provides callbacks for handling events.\n *\n * @param options - Watch options\n * @returns Object with stop function\n */\n watchReindexJobs(\n options?: {\n /** Resource version to start watching from */\n resourceVersion?: string;\n /** Callback when an event is received */\n onEvent?: (event: WatchEvent<ReindexJob>) => void;\n /** Callback when an error occurs */\n onError?: (error: Error) => void;\n /** Callback when the connection closes */\n onClose?: () => void;\n }\n ): { stop: () => void } {\n const abortController = new AbortController();\n\n // Build URL with watch=true\n const searchParams = new URLSearchParams();\n searchParams.set('watch', 'true');\n\n if (options?.resourceVersion) searchParams.set('resourceVersion', options.resourceVersion);\n\n const queryString = searchParams.toString();\n const path = `/apis/activity.miloapis.com/v1alpha1/reindexjobs?${queryString}`;\n const url = `${this.config.baseUrl}${path}`;\n\n const headers: Record<string, string> = {\n 'Accept': 'application/json',\n };\n\n if (this.config.token) {\n headers['Authorization'] = `Bearer ${this.config.token}`;\n }\n\n // Start the watch connection\n const startWatch = async () => {\n try {\n const response = await this.config.fetch!(url, {\n headers,\n signal: abortController.signal,\n });\n\n if (!response.ok) {\n const error = await response.text();\n throw new Error(`Watch request failed: ${response.status} ${error}`);\n }\n\n if (!response.body) {\n throw new Error('Response body is not available');\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n\n while (true) {\n const { done, value } = await reader.read();\n\n if (done) {\n options?.onClose?.();\n break;\n }\n\n buffer += decoder.decode(value, { stream: true });\n\n // Process complete lines (newline-delimited JSON)\n const lines = buffer.split('\\n');\n buffer = lines.pop() || ''; // Keep incomplete line in buffer\n\n for (const line of lines) {\n if (line.trim()) {\n try {\n const event = JSON.parse(line) as WatchEvent<ReindexJob>;\n options?.onEvent?.(event);\n } catch (parseError) {\n console.warn('Failed to parse watch event:', parseError, line);\n }\n }\n }\n }\n } catch (error) {\n if ((error as Error).name === 'AbortError') {\n options?.onClose?.();\n return;\n }\n options?.onError?.(error as Error);\n }\n };\n\n // Start watching in background\n startWatch();\n\n return {\n stop: () => abortController.abort(),\n };\n }\n\n private async fetch(path: string, init?: RequestInit): Promise<Response> {\n const url = `${this.config.baseUrl}${path}`;\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...(init?.headers as Record<string, string> || {}),\n };\n\n if (this.config.token) {\n headers['Authorization'] = `Bearer ${this.config.token}`;\n }\n\n try {\n const response = await this.config.fetch!(url, {\n ...init,\n headers,\n });\n\n if (!response.ok) {\n const errorBody = await response.text();\n throw parseApiError(response.status, errorBody);\n }\n\n return response;\n } catch (error) {\n // If it's already an ApiError, re-throw it\n if (error instanceof Error && error.name === 'ApiError') {\n throw error;\n }\n\n // Network errors (connection refused, DNS failure, CORS, etc.)\n // These are thrown by fetch as TypeError\n if (error instanceof TypeError) {\n throw new NetworkError(error.message);\n }\n\n // Re-throw other errors as-is\n throw error;\n }\n }\n\n /**\n * Parse JSON response and apply optional transformer.\n * Use this instead of response.json() to support proxy response unwrapping.\n */\n private async parseJson<T>(response: Response): Promise<T> {\n const json = await response.json();\n\n if (this.config.responseTransformer) {\n const transformed = this.config.responseTransformer(json);\n return transformed as T;\n }\n\n return json as T;\n }\n}\n","/**\n * TypeScript types for the Activity API (activity.miloapis.com/v1alpha1)\n * Based on the Activity Stream System enhancement specification\n */\n\nimport type { ReactNode } from 'react';\nimport type { ObjectMeta } from './index';\n\n/**\n * Change source classification for activities\n * - human: User actions, service accounts with `initiated-by: user` annotation\n * - system: Controller reconciliation, operator actions, scheduled jobs\n */\nexport type ChangeSource = 'human' | 'system';\n\n/**\n * Actor types in the activity system\n */\nexport type ActorType = 'user' | 'machine account' | 'controller';\n\n/**\n * Origin types for activity records\n */\nexport type OriginType = 'audit' | 'event';\n\n/**\n * Tenant scope levels\n */\nexport type TenantType = 'platform' | 'organization' | 'project' | 'user';\n\n/**\n * Resource reference for linking to resources in the portal\n */\nexport interface ResourceRef {\n apiGroup: string;\n apiVersion?: string;\n kind: string;\n name: string;\n namespace?: string;\n uid?: string;\n}\n\n/**\n * Context for resolving resource links\n * Contains optional tenant information for multi-tenant portal navigation\n */\nexport interface ResourceLinkContext {\n /** Current tenant context for scoped navigation */\n tenant?: Tenant;\n}\n\n/**\n * Actor who performed the action\n */\nexport interface Actor {\n type: ActorType;\n name: string;\n uid: string;\n email?: string;\n}\n\n/**\n * Linkable entity in the summary for portal rendering\n */\nexport interface ActivityLink {\n /** Text substring in summary that should be linked */\n marker: string;\n /** The resource to link to when the marker is clicked */\n resource: ResourceRef;\n}\n\n/**\n * Tenant scope for multi-tenant isolation\n */\nexport interface Tenant {\n type: TenantType;\n name: string;\n /** Unique identifier - required for user-scoped tenants where routes use ID instead of name */\n id?: string;\n}\n\n/**\n * Field-level change with old and new values\n */\nexport interface FieldChange {\n field: string;\n old?: string;\n new?: string;\n}\n\n/**\n * Origin of the activity record for correlation\n */\nexport interface ActivityOrigin {\n /** Source type: \"audit\" or \"event\" */\n type: OriginType;\n /** Correlation ID (auditID or event.metadata.uid) */\n id: string;\n}\n\n/**\n * Activity spec containing the translated activity data\n */\nexport interface ActivitySpec {\n /** Human-readable description generated from ActivityPolicy templates */\n summary: string;\n /** Who initiated the change: \"human\" or \"system\" */\n changeSource: ChangeSource;\n /** The actor who performed the action */\n actor: Actor;\n /** The resource that was affected by this activity */\n resource: ResourceRef;\n /** Linkable entities in the summary for portal rendering */\n links?: ActivityLink[];\n /** Tenant scope for multi-tenant isolation */\n tenant?: Tenant;\n /** Field-level changes with old and new values */\n changes?: FieldChange[];\n /** Origin of this activity record for correlation */\n origin: ActivityOrigin;\n}\n\n/**\n * Activity resource representing a single translated activity record\n */\nexport interface Activity {\n apiVersion: 'activity.miloapis.com/v1alpha1';\n kind: 'Activity';\n metadata: ObjectMeta;\n spec: ActivitySpec;\n}\n\n/**\n * Activity list response with pagination\n */\nexport interface ActivityList {\n apiVersion: 'activity.miloapis.com/v1alpha1';\n kind: 'ActivityList';\n metadata?: {\n continue?: string;\n resourceVersion?: string;\n };\n items: Activity[];\n}\n\n/**\n * Query parameters for listing activities\n */\nexport interface ActivityListParams {\n /** CEL expression to filter activities */\n filter?: string;\n /** Filter by field values (Kubernetes standard) */\n fieldSelector?: string;\n /** Filter by labels */\n labelSelector?: string;\n /** Full-text search on activity summaries */\n search?: string;\n /** Start of time range (RFC3339 or relative like \"now-24h\") */\n start?: string;\n /** End of time range (RFC3339 or relative, default: now) */\n end?: string;\n /** Maximum results (1-1000, default 100) */\n limit?: number;\n /** Pagination cursor */\n continue?: string;\n /** Watch for changes */\n watch?: boolean;\n /** Start Watch from this version */\n resourceVersion?: string;\n}\n\n/**\n * Facet specification for querying distinct values\n */\nexport interface FacetSpec {\n /** Field path to get distinct values for */\n field: string;\n /** Maximum values to return (1-100, default 20) */\n limit?: number;\n}\n\n/**\n * Facet value with count\n */\nexport interface FacetValue {\n value: string;\n count: number;\n}\n\n/**\n * Facet result containing distinct values for a field\n */\nexport interface FacetResult {\n field: string;\n values: FacetValue[];\n}\n\n/**\n * Activity facet query request spec\n */\nexport interface ActivityFacetQuerySpec {\n /** Time range for the facet query */\n timeRange?: {\n start?: string;\n end?: string;\n };\n /** CEL expression to filter activities before computing facets */\n filter?: string;\n /** List of facets to query (1-10 facets) */\n facets: FacetSpec[];\n}\n\n/**\n * Activity facet query status with results\n */\nexport interface ActivityFacetQueryStatus {\n facets: FacetResult[];\n}\n\n/**\n * Activity facet query resource\n */\nexport interface ActivityFacetQuery {\n apiVersion: 'activity.miloapis.com/v1alpha1';\n kind: 'ActivityFacetQuery';\n spec: ActivityFacetQuerySpec;\n status?: ActivityFacetQueryStatus;\n}\n\n/**\n * Audit log facet query request spec\n * Used to query distinct values from audit logs (API groups, resources, etc.)\n */\nexport interface AuditLogFacetsQuerySpec {\n /** Time range for the facet query */\n timeRange?: {\n start?: string;\n end?: string;\n };\n /** CEL expression to filter audit logs before computing facets */\n filter?: string;\n /** List of facets to query (1-10 facets) */\n facets: FacetSpec[];\n}\n\n/**\n * Audit log facet query status with results\n */\nexport interface AuditLogFacetsQueryStatus {\n facets: FacetResult[];\n}\n\n/**\n * Audit log facet query resource\n * Used to discover available API groups and resources from actual audit log data\n */\nexport interface AuditLogFacetsQuery {\n apiVersion: 'activity.miloapis.com/v1alpha1';\n kind: 'AuditLogFacetsQuery';\n spec: AuditLogFacetsQuerySpec;\n status?: AuditLogFacetsQueryStatus;\n}\n\n/**\n * Activity filter fields for autocomplete and help\n */\nexport interface ActivityFilterField {\n name: string;\n type: 'string' | 'enum' | 'timestamp';\n description: string;\n enumValues?: string[];\n examples?: string[];\n}\n\n/**\n * Available filter fields for activities\n */\n\n/**\n * ActivityQuery spec for querying historical activities\n */\nexport interface ActivityQuerySpec {\n /** Start of time range (required) */\n startTime: string;\n /** End of time range (required) */\n endTime: string;\n /** Full-text search on summaries */\n search?: string;\n /** CEL filter expression (primary filtering mechanism) */\n filter?: string;\n /** Max results per page (default 100, max 1000) */\n limit?: number;\n /** Pagination cursor */\n continue?: string;\n}\n\n/**\n * ActivityQuery status with results\n */\nexport interface ActivityQueryStatus {\n /** Matching activities, newest first */\n results?: Activity[];\n /** Pagination cursor for next page */\n continue?: string;\n /** Resolved start time (RFC3339) */\n effectiveStartTime?: string;\n /** Resolved end time (RFC3339) */\n effectiveEndTime?: string;\n}\n\n/**\n * ActivityQuery resource for historical queries\n */\nexport interface ActivityQuery {\n apiVersion: 'activity.miloapis.com/v1alpha1';\n kind: 'ActivityQuery';\n metadata?: { name?: string };\n spec: ActivityQuerySpec;\n status?: ActivityQueryStatus;\n}\n\n/**\n * Watch event types from Kubernetes watch API\n */\nexport type WatchEventType = 'ADDED' | 'MODIFIED' | 'DELETED' | 'BOOKMARK' | 'ERROR';\n\n/**\n * Watch event from the Kubernetes watch API\n */\nexport interface WatchEvent<T = Activity> {\n type: WatchEventType;\n object: T;\n}\n\n/**\n * Status error returned in watch ERROR events\n */\nexport interface WatchErrorStatus {\n apiVersion: 'v1';\n kind: 'Status';\n status: 'Failure';\n message: string;\n reason?: string;\n code: number;\n}\n\n/**\n * Function that resolves a ResourceRef to a navigation URL\n * Returns a URL string to navigate to when the resource link is clicked\n */\nexport type ResourceLinkResolver = (resource: ResourceRef, context?: ResourceLinkContext) => string | undefined;\n\n/**\n * Default resource link resolver that navigates to resource history\n * Uses UID if available, otherwise falls back to apiGroup, kind, namespace, name\n */\nexport function defaultResourceLinkResolver(resource: ResourceRef, context: ResourceLinkContext = {}): string {\n const params = new URLSearchParams();\n if (resource.uid) {\n params.set('uid', resource.uid);\n } else {\n if (resource.apiGroup) params.set('apiGroup', resource.apiGroup);\n if (resource.kind) params.set('kind', resource.kind);\n if (resource.namespace) params.set('namespace', resource.namespace);\n if (resource.name) params.set('name', resource.name);\n }\n\n // Include tenant context if available\n if (context.tenant) {\n params.set('tenantType', context.tenant.type);\n params.set('tenantName', context.tenant.name);\n }\n\n return `/resource-history?${params.toString()}`;\n}\n\n/**\n * Function that resolves a Tenant to a navigation URL\n * Returns a URL string to navigate to when the tenant link is clicked, or undefined to not render as a link\n */\nexport type TenantLinkResolver = (tenant: Tenant) => string | undefined;\n\n/**\n * Custom renderer for tenant badges\n * Allows full customization of how tenants are displayed in the activity feed\n */\nexport type TenantRenderer = (tenant: Tenant) => ReactNode;\n\n/**\n * Effective time range after query resolution\n * Contains the actual start and end times used by the query (ISO 8601 format)\n */\nexport interface EffectiveTimeRange {\n /** Resolved start time in ISO 8601 format (e.g., \"2026-02-19T10:00:00Z\") */\n startTime: string;\n /** Resolved end time in ISO 8601 format (e.g., \"2026-02-26T10:00:00Z\") */\n endTime: string;\n}\n\n/**\n * Callback invoked when a query resolves its effective time range\n * Used by parent components to display or sync the actual time range used\n */\nexport type EffectiveTimeRangeCallback = (timeRange: EffectiveTimeRange) => void;\n\n/**\n * Formatted error for display to users\n * Contains a user-friendly message and optional technical details\n */\nexport interface FormattedError {\n /** User-friendly error message */\n message: string;\n /** Technical details for advanced users */\n technical?: string;\n}\n\n/**\n * Function that formats errors for display\n * Allows clients to customize error messaging\n */\nexport type ErrorFormatter = (error: Error) => FormattedError;\n\nexport const ACTIVITY_FILTER_FIELDS: ActivityFilterField[] = [\n {\n name: 'spec.changeSource',\n type: 'enum',\n description: 'Change source classification',\n enumValues: ['human', 'system'],\n examples: [\n 'spec.changeSource == \"human\"',\n 'spec.changeSource == \"system\"',\n ],\n },\n {\n name: 'spec.actor.name',\n type: 'string',\n description: 'Actor display name',\n examples: [\n 'spec.actor.name == \"alice@example.com\"',\n 'spec.actor.name.startsWith(\"alice\")',\n ],\n },\n {\n name: 'spec.actor.type',\n type: 'enum',\n description: 'Actor type',\n enumValues: ['user', 'machine account', 'controller'],\n examples: [\n 'spec.actor.type == \"user\"',\n 'spec.actor.type == \"controller\"',\n ],\n },\n {\n name: 'spec.resource.apiGroup',\n type: 'string',\n description: 'Resource API group',\n examples: [\n 'spec.resource.apiGroup == \"networking.datumapis.com\"',\n ],\n },\n {\n name: 'spec.resource.kind',\n type: 'string',\n description: 'Resource kind',\n examples: [\n 'spec.resource.kind == \"HTTPProxy\"',\n 'spec.resource.kind in [\"HTTPProxy\", \"Gateway\"]',\n ],\n },\n {\n name: 'spec.resource.name',\n type: 'string',\n description: 'Resource name',\n examples: [\n 'spec.resource.name == \"api-gateway\"',\n 'spec.resource.name.contains(\"prod\")',\n ],\n },\n {\n name: 'spec.resource.namespace',\n type: 'string',\n description: 'Resource namespace',\n examples: [\n 'spec.resource.namespace == \"default\"',\n ],\n },\n {\n name: 'spec.resource.uid',\n type: 'string',\n description: 'Resource UID (for filtering to a specific resource)',\n examples: [\n 'spec.resource.uid == \"abc-123-def-456\"',\n ],\n },\n {\n name: 'spec.origin.type',\n type: 'enum',\n description: 'Origin type',\n enumValues: ['audit', 'event'],\n examples: [\n 'spec.origin.type == \"audit\"',\n 'spec.origin.type == \"event\"',\n ],\n },\n];\n","/**\n * TypeScript types for ActivityPolicy management and preview\n * Based on the Activity Policy system for translating audit events/K8s events into activities\n */\n\nimport type { ObjectMeta, Event } from './index';\nimport type { ActivityLink } from './activity';\n\n/**\n * Resource specification for an ActivityPolicy\n * Identifies which API group/kind this policy applies to\n */\nexport interface ActivityPolicyResource {\n /** API group (e.g., \"networking.datumapis.com\") */\n apiGroup: string;\n /** Resource kind (e.g., \"HTTPProxy\") */\n kind: string;\n /** Optional human-readable label (defaults to kind) */\n kindLabel?: string;\n /** Optional plural label (defaults to kindLabel + \"s\") */\n kindLabelPlural?: string;\n}\n\n/**\n * A single rule in an ActivityPolicy\n * Matches events and generates summaries\n */\nexport interface ActivityPolicyRule {\n /** Unique name for this rule within the policy */\n name: string;\n /** Optional human-readable description of what this rule does */\n description?: string;\n /**\n * CEL expression to match events\n * For audit rules: use `audit.*` fields (e.g., `audit.verb == \"create\"`, `audit.objectRef.namespace == \"default\"`)\n * For event rules: access via `event.*` (e.g., `event.reason == \"Ready\"`)\n */\n match: string;\n /**\n * CEL expression to generate the activity summary\n * Can use {{ }} interpolation for embedded expressions\n * Example: \"{{ actor.name }} created {{ kindLabel }} {{ resource.name }}\"\n */\n summary: string;\n}\n\n/**\n * Specification for an ActivityPolicy\n */\nexport interface ActivityPolicySpec {\n /** The resource this policy applies to */\n resource: ActivityPolicyResource;\n /** Rules for matching and translating Kubernetes audit events */\n auditRules?: ActivityPolicyRule[];\n /** Rules for matching and translating Kubernetes events */\n eventRules?: ActivityPolicyRule[];\n}\n\n/**\n * Standard Kubernetes condition (from metav1.Condition)\n */\nexport interface Condition {\n /** Type of condition (e.g., \"Ready\") */\n type: string;\n /** Status of the condition: \"True\", \"False\", or \"Unknown\" */\n status: 'True' | 'False' | 'Unknown';\n /** Last time the condition transitioned */\n lastTransitionTime?: string;\n /** Machine-readable reason for the condition's current status */\n reason?: string;\n /** Human-readable message with details */\n message?: string;\n /** Generation the condition was set based on */\n observedGeneration?: number;\n}\n\n/**\n * Status of an ActivityPolicy\n */\nexport interface ActivityPolicyStatus {\n /** Conditions represent the current state of the policy.\n * The \"Ready\" condition indicates whether all rules compile successfully.\n */\n conditions?: Condition[];\n /** Generation last processed by the controller */\n observedGeneration?: number;\n}\n\n/**\n * ActivityPolicy resource for translating audit events and K8s events into activities\n */\nexport interface ActivityPolicy {\n apiVersion: 'activity.miloapis.com/v1alpha1';\n kind: 'ActivityPolicy';\n metadata: ObjectMeta;\n spec: ActivityPolicySpec;\n status?: ActivityPolicyStatus;\n}\n\n/**\n * List of ActivityPolicy resources\n */\nexport interface ActivityPolicyList {\n apiVersion: 'activity.miloapis.com/v1alpha1';\n kind: 'ActivityPolicyList';\n metadata?: {\n continue?: string;\n resourceVersion?: string;\n };\n items: ActivityPolicy[];\n}\n\n// ==============================================\n// PolicyPreview Types\n// ==============================================\n\n/**\n * Input type for policy preview\n */\nexport type PolicyPreviewInputType = 'audit' | 'event';\n\n/**\n * Kubernetes Event for policy preview\n * Simplified version focused on fields used in policy matching\n * Supports both eventsv1 (new) and corev1 (deprecated) field names\n */\nexport interface KubernetesEvent {\n /** Event type: \"Normal\" or \"Warning\" */\n type?: string;\n /** Short reason for the event (e.g., \"Created\", \"Ready\", \"Failed\") */\n reason?: string;\n /** Human-readable description (eventsv1 field name) */\n note?: string;\n /** @deprecated Use note instead (corev1 field name) */\n message?: string;\n /** Object this event is about (eventsv1 field name) */\n regarding?: {\n apiVersion?: string;\n kind?: string;\n name?: string;\n namespace?: string;\n uid?: string;\n resourceVersion?: string;\n };\n /** @deprecated Use regarding instead (corev1 field name) */\n involvedObject?: {\n apiVersion?: string;\n kind?: string;\n name?: string;\n namespace?: string;\n uid?: string;\n resourceVersion?: string;\n };\n /** Controller that emitted this event (eventsv1 field name) */\n reportingController?: string;\n /** ID of the controller instance (eventsv1 field name) */\n reportingInstance?: string;\n /** @deprecated Use reportingController instead (corev1 field name) */\n source?: {\n component?: string;\n host?: string;\n };\n /** Time when this event was first observed (eventsv1 field name) */\n eventTime?: string;\n /** Event series data (eventsv1 field name) */\n series?: {\n count?: number;\n lastObservedTime?: string;\n };\n /** @deprecated Use eventTime instead (corev1 field name) */\n firstTimestamp?: string;\n /** @deprecated Use series.lastObservedTime instead (corev1 field name) */\n lastTimestamp?: string;\n /** @deprecated Use series.count instead (corev1 field name) */\n count?: number;\n /** Metadata about the event */\n metadata?: ObjectMeta;\n}\n\n/**\n * Input for policy preview - either an audit event or K8s event\n */\nexport interface PolicyPreviewInput {\n /** Type of input */\n type: PolicyPreviewInputType;\n /** Audit event (when type is \"audit\") */\n audit?: Event;\n /** Kubernetes event (when type is \"event\") */\n event?: KubernetesEvent;\n}\n\n/**\n * The policy spec to test in a preview (subset of ActivityPolicySpec)\n */\nexport interface PolicyPreviewPolicySpec {\n /** Resource specification */\n resource: ActivityPolicyResource;\n /** Audit rules to test */\n auditRules?: ActivityPolicyRule[];\n /** Event rules to test */\n eventRules?: ActivityPolicyRule[];\n}\n\n/**\n * Auto-fetch configuration for PolicyPreview\n * Mutually exclusive with manual inputs\n */\nexport interface AutoFetchSpec {\n /** Maximum samples to fetch (default: 10, max: 50) */\n limit?: number;\n /** Time range to search (e.g., \"1h\", \"24h\", \"7d\") - default: \"24h\" */\n timeRange?: string;\n /** What to fetch: \"audit\", \"events\", or \"both\" - default: \"both\" */\n sources?: 'audit' | 'events' | 'both';\n}\n\n/**\n * Specification for a PolicyPreview request\n */\nexport interface PolicyPreviewSpec {\n /** The policy to test */\n policy: PolicyPreviewPolicySpec;\n /** The inputs to test against (supports multiple) - optional if autoFetch is set */\n inputs?: PolicyPreviewInput[];\n /** Auto-fetch spec - mutually exclusive with inputs */\n autoFetch?: AutoFetchSpec;\n /** Optional kind label override */\n kindLabel?: string;\n /** Optional kind label plural override */\n kindLabelPlural?: string;\n}\n\n/**\n * Result for a single input in the preview\n */\nexport interface PolicyPreviewInputResult {\n /** Index of this input in spec.inputs (0-based) */\n inputIndex: number;\n /** Whether any rule matched this input */\n matched: boolean;\n /** Index of the matched rule (0-based), -1 if no match */\n matchedRuleIndex: number;\n /** Type of rule that matched (\"audit\" or \"event\") */\n matchedRuleType?: PolicyPreviewInputType;\n /** Error message if evaluating this input failed */\n error?: string;\n}\n\n/**\n * Preview Activity - simplified activity for preview display\n */\nexport interface PreviewActivity {\n /** Activity metadata */\n metadata?: ObjectMeta;\n /** Activity spec */\n spec: {\n /** Human-readable summary */\n summary: string;\n /** Change source: \"human\" or \"system\" */\n changeSource: string;\n /** Actor who performed the action */\n actor: {\n type: string;\n name: string;\n uid?: string;\n email?: string;\n };\n /** Resource that was affected */\n resource: {\n apiGroup?: string;\n apiVersion?: string;\n kind?: string;\n name?: string;\n namespace?: string;\n uid?: string;\n };\n /** Links in the summary */\n links?: ActivityLink[];\n /** Origin of this activity */\n origin: {\n type: string;\n id: string;\n };\n };\n}\n\n/**\n * Status of a PolicyPreview showing the results\n */\nexport interface PolicyPreviewStatus {\n /** Rendered Activity objects for inputs that matched */\n activities?: PreviewActivity[];\n /** Per-input results in the same order as spec.inputs */\n results?: PolicyPreviewInputResult[];\n /** General error message if preview failed entirely */\n error?: string;\n /** Auto-fetched inputs (populated when autoFetch is used) */\n fetchedInputs?: PolicyPreviewInput[];\n\n // Legacy single-input fields (for backwards compatibility)\n /** @deprecated Use results[].matched */\n matched?: boolean;\n /** @deprecated Use results[].matchedRuleIndex */\n matchedRuleIndex?: number;\n /** @deprecated Use results[].matchedRuleType */\n matchedRuleType?: PolicyPreviewInputType;\n /** @deprecated Use activities[0].spec.summary */\n generatedSummary?: string;\n /** @deprecated Use activities[0].spec.links */\n generatedLinks?: ActivityLink[];\n}\n\n/**\n * PolicyPreview resource for testing policies before deployment\n */\nexport interface PolicyPreview {\n apiVersion: 'activity.miloapis.com/v1alpha1';\n kind: 'PolicyPreview';\n metadata?: ObjectMeta;\n spec: PolicyPreviewSpec;\n status?: PolicyPreviewStatus;\n}\n\n// ==============================================\n// Helper Types\n// ==============================================\n\n/**\n * Grouped policies by API group for display\n */\nexport interface PolicyGroup {\n apiGroup: string;\n policies: ActivityPolicy[];\n}\n\n/**\n * Sample input template for quick-fill\n */\nexport interface SampleInputTemplate {\n /** Display name for the template */\n name: string;\n /** Description of what this template represents */\n description: string;\n /** The input type */\n type: PolicyPreviewInputType;\n /** The sample input data */\n input: PolicyPreviewInput;\n}\n\n/**\n * Filter fields available for policy listing\n */\nexport interface PolicyFilterField {\n name: string;\n type: 'string' | 'enum';\n description: string;\n enumValues?: string[];\n examples?: string[];\n}\n\n/**\n * Available filter fields for policies\n */\nexport const POLICY_FILTER_FIELDS: PolicyFilterField[] = [\n {\n name: 'spec.resource.apiGroup',\n type: 'string',\n description: 'API group the policy applies to',\n examples: [\n 'spec.resource.apiGroup == \"networking.datumapis.com\"',\n 'spec.resource.apiGroup.startsWith(\"networking.\")',\n ],\n },\n {\n name: 'spec.resource.kind',\n type: 'string',\n description: 'Resource kind the policy applies to',\n examples: [\n 'spec.resource.kind == \"HTTPProxy\"',\n 'spec.resource.kind in [\"HTTPProxy\", \"Gateway\"]',\n ],\n },\n {\n name: 'metadata.name',\n type: 'string',\n description: 'Policy name',\n examples: [\n 'metadata.name == \"httpproxy-policy\"',\n 'metadata.name.contains(\"gateway\")',\n ],\n },\n];\n"],"names":["React","_jsx","SeparatorPrimitive","useState","_jsxs","useRef","useEffect","useCallback","formatDistance","defaultLocale","forwardRef","createElement","__iconNode","Popover","Command","CommandInput","CommandList","CommandEmpty","CommandGroup","CommandItem","CheckboxPrimitive","TIME_PRESETS","formatDatetimeLocal","_Fragment","FILTER_CONFIGS","formatTimestampFull","formatTimestamp","AlertTriangle","AlertCircle","FILTER_DEBOUNCE_MS","OPTIONS","celEscape","useMemo","TooltipPrimitive","getSelectedPreset","extractEventFn","getRegarding","getReportingController","SelectPrimitive","Edit","DialogPrimitive","XCircle","CheckCircle","Loader2","useId","AUDIT_CEL_HELP","EVENT_CEL_HELP","TabsPrimitive","getPhaseIcon","CheckCircle2","TIME_RANGE_OPTIONS"],"mappings":"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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,UAAU,CAAC,QAAQ,EAAE,SAAS,EAAE;AAChD,EAAE,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;AACpC,EAAE,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC;;AAEtC,EAAE,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE;;AAEzD,EAAE,IAAI,IAAI,GAAG,CAAC,EAAE;AAChB,IAAI,OAAO,EAAE;AACb,EAAE,CAAC,MAAM,IAAI,IAAI,GAAG,CAAC,EAAE;AACvB,IAAI,OAAO,CAAC;AACZ;AACA,EAAE,CAAC,MAAM;AACT,IAAI,OAAO,IAAI;AACf,EAAE;AACF;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,YAAY,CAAC,IAAI,EAAE;AACnC,EAAE,OAAO,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACxC;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,MAAM,CAAC,KAAK,EAAE;AAC9B,EAAE;AACF,IAAI,KAAK,YAAY,IAAI;AACzB,KAAK,OAAO,KAAK,KAAK,QAAQ;AAC9B,MAAM,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,eAAe;AAC/D;AACA;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA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ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE;AACjD,EAAE,MAAM,cAAc,GAAG,iBAAiB,EAAE;AAC5C,EAAE,MAAM,MAAM,GAAsB,cAAc,CAAC,MAAM,IAAIC,IAAa;;AAE1E,EAAE,MAAM,qBAAqB;AAC7B,IAEI,cAAc,CAAC,qBAAq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G,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;;AAEzC;AACA,IAAI,IAAI,sBAAsB,GAAG,CAAC,EAAE;AACpC,MAAM,OAAO,MAAM,CAAC,cAAc,CAAC,aAAa,EAAE,KAAK,EAAE,eAAe,CAAC;;AAEzE;AACA,IAAI,CAAC,MAAM,IAAI,sBAAsB,GAAG,CAAC,EAAE;AAC3C,MAAM,OAAO,MAAM,CAAC,cAAc,CAAC,YAAY,EAAE,KAAK,EAAE,eAAe,CAAC;;AAExE;AACA,IAAI,CAAC,MAAM;AACX,MAAM,OAAO,MAAM,CAAC,cAAc,CAAC,cAAc,EAAE,KAAK,GAAG,CAAC,EAAE,eAAe,CAAC;AAC9E,IAAI;AACJ,EAAE;AACF;;AC1MA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE;AACnD,EAAE,OAAO,cAAc,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;AAC1D;;ACzFA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE;AACzC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","x_google_ignoreList":[1,2,3,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100]}
|