diff --git a/apps/web/src/components/health-check-config-fields.tsx b/apps/web/src/components/health-check-config-fields.tsx
index cbe63aa..806d473 100644
--- a/apps/web/src/components/health-check-config-fields.tsx
+++ b/apps/web/src/components/health-check-config-fields.tsx
@@ -18,7 +18,9 @@ import {
} from '@cfdm/ui/components/select'
import { Switch } from '@cfdm/ui/components/switch'
import { FieldGroup } from '@cfdm/ui/components/field'
-import { ToggleGroup, ToggleGroupItem } from '@cfdm/ui/components/toggle-group'
+import { Button } from '@cfdm/ui/components/button'
+import { ButtonGroup } from '@cfdm/ui/components/button-group'
+import { CableIcon, GlobeIcon } from 'lucide-react'
import { cn } from '@cfdm/ui/lib/utils'
import {
HealthAggregateTiles,
@@ -215,28 +217,30 @@ export function HealthCheckConfigFields({
- {
- const picked = next[0]
- if (picked === 'tcp' || picked === 'http') {
- patch({ type: picked })
- }
- }}
- >
-
+
+
-
+
+
-
+
+
diff --git a/apps/web/src/components/reui-kit/health-source-tiles.tsx b/apps/web/src/components/reui-kit/health-source-tiles.tsx
index 47e22d1..90a3e1a 100644
--- a/apps/web/src/components/reui-kit/health-source-tiles.tsx
+++ b/apps/web/src/components/reui-kit/health-source-tiles.tsx
@@ -1,11 +1,19 @@
import type { KeyboardEvent, ReactNode } from 'react'
-import { CheckIcon, ServerIcon, LayersIcon, ShieldAlertIcon, ScaleIcon } from 'lucide-react'
+import { ServerIcon, LayersIcon, ShieldAlertIcon, ScaleIcon } from 'lucide-react'
import { Frame, FramePanel } from '@/components/reui/frame'
import { IconTile } from '@/components/reui/icon-tile'
+import { Badge } from '@/components/reui/badge'
+import {
+ Item,
+ ItemActions,
+ ItemContent,
+ ItemDescription,
+ ItemMedia,
+ ItemTitle,
+} from '@cfdm/ui/components/item'
import { cn } from '@cfdm/ui/lib/utils'
import type { HealthCheckAggregate, HealthCheckProvider } from '@cfdm/shared'
-import { kpiCols } from './kpi-cols'
export type HealthProvider = HealthCheckProvider
export type HealthAggregate = HealthCheckAggregate
@@ -103,7 +111,7 @@ function handleTileKeyDown(onActivate: () => void, event: KeyboardEvent handleTileKeyDown(onActivate, event)}
>
-
-
- {icon}
-
-
-
- {title}
- {selected ? (
-
- ) : null}
-
-
- {description}
-
-
-
+ -
+
+
+ {icon}
+
+
+
+ {title}
+ {description}
+
+ {selected ? (
+
+
+ Выбрано
+
+
+ ) : null}
+
)
}
-function TileGrid({ children, count }: { children: ReactNode; count: number }) {
+function ChoiceFrame({ children }: { children: ReactNode }) {
return (
-
- {children}
+
+ {children}
)
}
/**
* Мультивыбор источников проб (Local / Cloudflare / Globalping).
- * Preview: https://reui.io/preview/base/card-12 · https://reui.io/preview/base/stats-12
+ * Preview: https://reui.io/preview/base/list-9 · https://reui.io/preview/base/stats-12
* Docs: https://reui.io/docs/components/base/frame · https://reui.io/docs/components/base/icon-tile
*/
export function HealthSourceTiles({
@@ -190,9 +201,9 @@ export function HealthSourceTiles({
}
return (
-
+
{PROVIDER_ITEMS.map((item) => (
- toggle(item.id)}
/>
))}
-
+
)
}
/**
* Правило агрегации (ровно одно): any / all / majority.
- * Preview: https://reui.io/preview/base/card-12 · https://reui.io/preview/base/settings-5
+ * Preview: https://reui.io/preview/base/list-9 · https://reui.io/preview/base/settings-5
*/
export function HealthAggregateTiles({
value,
@@ -220,9 +231,9 @@ export function HealthAggregateTiles({
}) {
const selected = value || 'majority'
return (
-
+
{AGGREGATE_ITEMS.map((item) => (
- onChange(item.id)}
/>
))}
-
+
)
}