@logicplanes/kaeso-ui 0.4.6 → 0.4.7
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/ai/component-guides.md +1 -1
- package/ai/component-registry.json +1 -1
- package/ai/component-registry.md +1 -1
- package/ai/icons.md +1 -1
- package/ai/tokens.md +1 -1
- package/dist/blocks/pages.js +2 -2
- package/dist/blocks/resource-list.js +1 -1
- package/dist/chunks/{app-frame-DysOel2X.js → app-frame-CfJ7s3Q0.js} +2 -2
- package/dist/chunks/{app-frame-DysOel2X.js.map → app-frame-CfJ7s3Q0.js.map} +1 -1
- package/dist/chunks/{core-CmK-8ObW.js → core-B0bULn-t.js} +9 -8
- package/dist/chunks/core-B0bULn-t.js.map +1 -0
- package/dist/chunks/data-table-z7z6DqMJ.js +602 -0
- package/dist/chunks/data-table-z7z6DqMJ.js.map +1 -0
- package/dist/chunks/{domain-obd_w9xk.js → domain-BsM9UmAg.js} +2 -2
- package/dist/chunks/{domain-obd_w9xk.js.map → domain-BsM9UmAg.js.map} +1 -1
- package/dist/chunks/{identity-3Foi5F8w.js → identity-BQoh-UpW.js} +7 -3
- package/dist/chunks/identity-BQoh-UpW.js.map +1 -0
- package/dist/chunks/{list-B4G-sWwV.js → list-CU_AoVY3.js} +115 -92
- package/dist/chunks/list-CU_AoVY3.js.map +1 -0
- package/dist/chunks/{page-header-kS5tdmvb.js → page-header-BQijP6Rp.js} +2 -2
- package/dist/chunks/{page-header-kS5tdmvb.js.map → page-header-BQijP6Rp.js.map} +1 -1
- package/dist/chunks/{theme-provider-DJhORMlc.js → theme-provider-BjXTggqM.js} +6 -2
- package/dist/chunks/theme-provider-BjXTggqM.js.map +1 -0
- package/dist/chunks/{timeseries-Ck-q0wWn.js → timeseries-nDviPxvQ.js} +3 -3
- package/dist/chunks/{timeseries-Ck-q0wWn.js.map → timeseries-nDviPxvQ.js.map} +1 -1
- package/dist/components/app-frame.js +1 -1
- package/dist/components/charts/bar.js +2 -2
- package/dist/components/charts/donut.js +1 -1
- package/dist/components/charts/gauge.js +1 -1
- package/dist/components/charts/heatmap.js +1 -1
- package/dist/components/charts/sankey.js +2 -2
- package/dist/components/charts/timeseries.js +1 -1
- package/dist/components/charts.js +2 -2
- package/dist/components/data-table.js +1 -1
- package/dist/components/kaeso/identity.js +1 -1
- package/dist/components/kaeso/usage.js +1 -1
- package/dist/components/kaeso.js +3 -3
- package/dist/components/kaeso.js.map +1 -1
- package/dist/components/list.js +1 -1
- package/dist/components/page-header.js +1 -1
- package/dist/components/playground.js +1 -1
- package/dist/components/theme-menu.js +1 -1
- package/dist/components/theme-select.js +1 -1
- package/dist/components/toast.js +40 -38
- package/dist/components/toast.js.map +1 -1
- package/dist/index.js +8 -8
- package/dist/kaeso.css +8 -0
- package/dist/styles.css +1 -1
- package/dist/theme.js +1 -1
- package/package.json +2 -2
- package/dist/chunks/core-CmK-8ObW.js.map +0 -1
- package/dist/chunks/data-table-CqY8_6IS.js +0 -581
- package/dist/chunks/data-table-CqY8_6IS.js.map +0 -1
- package/dist/chunks/identity-3Foi5F8w.js.map +0 -1
- package/dist/chunks/list-B4G-sWwV.js.map +0 -1
- package/dist/chunks/theme-provider-DJhORMlc.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeseries-Ck-q0wWn.js","names":["d3min","d3max","d3stack","_Fragment","d3line","d3area","cn","useUiText","useLocale","wholeTicks","useSize","useChartKeys","useTweened","tickLabel","placeTimeLabels","seriesColors","liveLine","ChartTooltip","ChartFrame","axisLabelIndexes","ChartLive","Legend","AXIS","readableTicks","scaleLinear","hasPoints","compactAxis","onlyZero","finite","valueExtent","axisRoom","Fragment$1","clocks","wallClock","timeZone","d","clock","f","p","x","fromWall","guess","wall","zoneTicks","utcTicks","from","to","count","w","wallDay","KAESO_TIMESERIES_CHART_VARIANTS","KAESO_TIMESERIES_CHART_DEFAULT_VARIANTS","timeFormat","dateFormatter","options","locale","CLOCK","DAY","H","tickFormat","span","month","DAY_MS","timeLabels","fallback","ticks","t0","t1","days","i","label","all","placed","at","right","ends","TimeseriesChart","ariaLabel","state","t","format","formatValue","formatNumber","v","box","size","gid","useId","axisLabel","hidden","setHidden","useState","focus","setFocus","hover","setHover","visible","series","s","times","useMemo","flatValues","allHidden","empty","stacked","kind","stackSums","a","ti","sign","extent","threshold","axis","niceLo","niceHi","drawn","lo","hi","yTicks","M","h","height","offsets","si","values","pi","yScale","y","zero","min","max","ordinal","tickAt","slot","stackData","stack","stackOffsetDiverging","zone","formatTimeZone","fmt","formatTick","xLabels","step","pointFormat","formatTime","last","headingFormat","heading","partial","dashedFirst","dashedLast","cutStart","cutEnd","partialLine","stroke","lineGen","line","curveMonotoneX","areaGen","area","stackArea","stackTop","lonely","vs","palette","color","bis","bisector","onMove","r","px","table","blank","keys","active","highlight","activeX","clampY","activeY","layer","sv","rowsFor","total","acc","ss","shares","formatPercent","className","hideLegend","n","id","tick","l","li"],"sources":["../../src/components/charts/time-axis.ts","../../src/components/charts/timeseries.tsx"],"sourcesContent":["import { utcTicks } from \"d3-time\";\n\nexport type WallClock = (d: Date) => number;\n\nconst clocks = new Map<string, WallClock>();\n\nexport function wallClock(timeZone: string | undefined): WallClock {\n if (!timeZone) return (d) => d.getTime() - d.getTimezoneOffset() * 60_000;\n if (timeZone === \"UTC\") return (d) => d.getTime();\n let clock = clocks.get(timeZone);\n if (!clock) {\n const f = new Intl.DateTimeFormat(\"en-US\", {\n timeZone,\n hourCycle: \"h23\",\n year: \"numeric\",\n month: \"numeric\",\n day: \"numeric\",\n hour: \"numeric\",\n minute: \"numeric\",\n second: \"numeric\",\n });\n clock = (d) => {\n const p = Object.fromEntries(f.formatToParts(d).map((x) => [x.type, Number(x.value)]));\n return Date.UTC(p.year ?? 1970, (p.month ?? 1) - 1, p.day ?? 1, p.hour ?? 0, p.minute ?? 0, p.second ?? 0) + d.getUTCMilliseconds();\n };\n clocks.set(timeZone, clock);\n }\n return clock;\n}\n\nexport function fromWall(wall: number, clock: WallClock): Date {\n const guess = wall - (clock(new Date(wall)) - wall);\n return new Date(wall - (clock(new Date(guess)) - guess));\n}\n\nexport function zoneTicks(from: Date, to: Date, count: number, clock: WallClock): Date[] {\n return utcTicks(new Date(clock(from)), new Date(clock(to)), count).flatMap((w) => {\n const d = fromWall(w.getTime(), clock);\n // A wall time skipped when clocks spring forward has no instant; it would land on the next tick.\n return clock(d) === w.getTime() ? [d] : [];\n });\n}\n\nexport const wallDay = (d: Date, clock: WallClock) => new Date(clock(d)).toISOString().slice(0, 10);\n","import type * as React from \"react\";\nimport { forwardRef, useId, useMemo, useState, type ReactNode } from \"react\";\nimport { scaleLinear } from \"./linear-scale.js\";\nimport { area as d3area, curveMonotoneX, line as d3line, stack as d3stack, stackOffsetDiverging, type SeriesPoint } from \"d3-shape\";\nimport { bisector, max as d3max, min as d3min } from \"d3-array\";\nimport { cn } from \"../../utils/cn.js\";\nimport { dateFormatter, formatNumber, formatPercent, formatTimeZone } from \"../../format/index.js\";\nimport { useLocale, useUiText } from \"../../i18n/context.js\";\nimport {\n AXIS,\n axisLabelIndexes,\n ChartFrame,\n ChartLive,\n ChartTooltip,\n Legend,\n placeTimeLabels,\n liveLine,\n seriesColors,\n readableTicks,\n tickLabel,\n useChartKeys,\n useSize,\n useTweened,\n wholeTicks,\n type ChartState,\n} from \"./core.js\";\nimport { axisRoom, compactAxis, finite, onlyZero, hasPoints, valueExtent } from \"./domain.js\";\nimport { wallClock, wallDay, zoneTicks, type WallClock } from \"./time-axis.js\";\n\nexport const KAESO_TIMESERIES_CHART_VARIANTS = {\n kind: {\n line: { classes: \"\" },\n area: { classes: \"\" },\n stacked: { classes: \"\" },\n },\n} as const;\nexport const KAESO_TIMESERIES_CHART_DEFAULT_VARIANTS = { kind: \"line\" } as const;\n\nexport interface TimePoint {\n t: Date | number | string;\n v: number;\n}\nexport interface TimeSeries {\n id: string;\n label: string;\n points: TimePoint[];\n color?: string | undefined;\n}\n\nexport interface TimeseriesChartProps extends ChartState {\n series: TimeSeries[];\n kind?: keyof typeof KAESO_TIMESERIES_CHART_VARIANTS.kind | undefined;\n height?: number | undefined;\n formatValue?: ((v: number) => string) | undefined;\n threshold?: { value: number; label: string } | undefined;\n hideLegend?: boolean | undefined;\n highlight?: number | undefined;\n formatTime?: ((t: Date) => string) | undefined;\n formatTick?: ((t: Date) => string) | undefined;\n tickAt?: \"time\" | \"points\" | undefined;\n timeZone?: string | undefined;\n shares?: boolean | undefined;\n partial?: { first?: boolean | undefined; last?: boolean | undefined; ongoing?: boolean | undefined } | undefined;\n \"aria-label\": string;\n className?: string | undefined;\n}\n\nfunction timeFormat(locale: string, options: Intl.DateTimeFormatOptions, timeZone: string | undefined): (d: Date) => string {\n return dateFormatter({ ...options, ...(timeZone ? { timeZone } : {}) }, locale);\n}\nconst CLOCK = { hour: \"2-digit\", minute: \"2-digit\", hourCycle: \"h23\" } as const;\nconst DAY = { month: \"short\", day: \"numeric\" } as const;\nconst H = 3_600_000;\n\nfunction tickFormat(locale: string, span: number, timeZone: string | undefined, clock: WallClock) {\n if (span <= 48 * H) return timeFormat(locale, CLOCK, timeZone);\n if (span <= 90 * 24 * H) return timeFormat(locale, DAY, timeZone);\n const month = timeFormat(locale, { month: \"short\" }, timeZone);\n return (d: Date) => {\n const wall = new Date(clock(d));\n return wall.getUTCMonth() === 0 ? String(wall.getUTCFullYear()) : month(d);\n };\n}\n\ntype PlacedLabel = { key: number; x: number; anchor: \"start\" | \"middle\" | \"end\"; label: string };\n\nconst DAY_MS = 86_400_000;\n\nfunction timeLabels(\n t0: Date,\n t1: Date,\n w: number,\n right: number,\n at: (d: Date) => number,\n label: (d: Date) => string,\n clock: WallClock,\n days: boolean,\n): PlacedLabel[] {\n let fallback: PlacedLabel[] = [];\n for (let count = Math.max(2, Math.min(10, Math.floor(w / 64))); count >= 1; count--) {\n const ticks = zoneTicks(t0, t1, count, clock)\n .filter((d) => !days || clock(d) % DAY_MS === 0)\n .filter((d, i, all) => i === 0 || label(d) !== label(all[i - 1]!));\n const placed = placeTimeLabels(\n ticks.map((d) => ({ key: d.getTime(), at: Math.round(at(d)), label: label(d) })),\n right,\n );\n if (placed.length === ticks.length && placed.length >= 2) return placed;\n if (placed.length > fallback.length) fallback = placed;\n }\n if (fallback.length < 2 && t1.getTime() > t0.getTime()) {\n const ends = placeTimeLabels(\n [t0, t1].map((d) => ({ key: d.getTime(), at: Math.round(at(d)), label: label(d) })),\n right,\n );\n if (ends.length === 2) return ends;\n }\n return fallback;\n}\n\nexport const TimeseriesChart = /* @__PURE__ */ forwardRef<HTMLDivElement, TimeseriesChartProps>(function TimeseriesChart(\n {\n series,\n kind = \"line\",\n height = 240,\n formatValue,\n threshold,\n hideLegend,\n highlight,\n formatTime,\n formatTick,\n tickAt = \"time\",\n timeZone,\n shares = true,\n partial,\n className,\n \"aria-label\": ariaLabel,\n ...state\n },\n ref,\n) {\n const t = useUiText();\n const locale = useLocale();\n const format = formatValue ?? ((v: number) => formatNumber(v));\n const [box, size] = useSize<HTMLDivElement>();\n const gid = useId().replace(/:/g, \"\");\n const axisLabel = tickLabel(formatValue ?? compactAxis);\n const [hidden, setHidden] = useState<Set<string>>(new Set());\n const [focus, setFocus] = useState<string | null>(null);\n const [hover, setHover] = useState<{ i: number; y: number } | null>(null);\n const visible = series.filter((s) => !hidden.has(s.id));\n const times = useMemo(() => (series[0]?.points ?? []).map((p) => new Date(p.t)), [series]);\n const flatValues = visible.flatMap((s) => s.points.map((p) => p.v));\n const allHidden = series.length > 0 && visible.length === 0;\n const empty = state.empty ?? (allHidden || times.length === 0 || !hasPoints(flatValues));\n const stacked = kind === \"stacked\";\n const stackSums = (sign: number) =>\n times.map((_, ti) => visible.reduce((a, s) => a + (Number.isFinite(s.points[ti]?.v) && (s.points[ti]?.v ?? 0) * sign > 0 ? s.points[ti]!.v : 0), 0));\n const extent = valueExtent(stacked ? [...stackSums(1), ...stackSums(-1)] : flatValues, threshold ? [threshold.value] : []);\n const axis = scaleLinear().domain(extent).nice(4);\n const [niceLo = 0, niceHi = 1] = axis.domain();\n const drawn = useTweened([...flatValues.map((v) => (Number.isFinite(v) ? v : 0)), niceLo, niceHi], !!state.loading);\n const lo = drawn[drawn.length - 2] ?? niceLo;\n const hi = drawn[drawn.length - 1] ?? niceHi;\n const yTicks = empty\n ? []\n : onlyZero(flatValues)\n ? [0]\n : wholeTicks(readableTicks(axis, axisLabel), finite(flatValues)).filter((v) => v >= lo - 1e-9 && v <= hi + 1e-9);\n const M = { top: 8, right: axisRoom(yTicks.map(axisLabel), { max: size.width ? size.width * 0.4 : Infinity }), bottom: 28, left: 0 };\n const w = Math.max(0, size.width - M.left - M.right);\n const h = Math.max(0, height - M.top - M.bottom);\n axis.range([h, 0]);\n const offsets = visible.map((_, si) => visible.slice(0, si).reduce((a, s) => a + s.points.length, 0));\n const values = visible.map((s, si) => s.points.map((p, pi) => (Number.isFinite(p.v) ? (drawn[offsets[si]! + pi] ?? 0) : NaN)));\n const yScale = axis.copy().domain([lo, hi === lo ? lo + 1 : hi]);\n const y = (v: number) => yScale(v);\n const zero = Math.round(Math.max(0, Math.min(h, y(0))));\n const t0 = d3min(times) ?? new Date(0);\n const t1 = d3max(times) ?? t0;\n const ordinal = tickAt === \"points\" && times.length > 0;\n const slot = ordinal ? w / times.length : 0;\n const x = scaleLinear().domain([t0.getTime(), t1.getTime()]).range([0, w]);\n const at = (i: number) => (ordinal ? (i + 0.5) * slot : x(times[i] ?? t0));\n const stackData = stacked\n ? d3stack<number[]>()\n .keys(visible.map((_, i) => String(i)))\n .offset(stackOffsetDiverging)(times.map((_, ti) => visible.map((_, si) => (Number.isFinite(values[si]?.[ti]) ? values[si]![ti]! : 0))))\n : null;\n const zone = timeZone ?? formatTimeZone();\n const clock = wallClock(zone);\n const span = (times[times.length - 1]?.getTime() ?? 0) - (times[0]?.getTime() ?? 0);\n const fmt = formatTick ?? (times.length === 1 ? timeFormat(locale, DAY, zone) : tickFormat(locale, span, zone, clock));\n const xLabels: PlacedLabel[] =\n tickAt === \"points\" || times.length === 1\n ? axisLabelIndexes(\n times.map(fmt),\n ordinal ? slot : w,\n ordinal ? { start: slot / 2, end: slot / 2 + M.right } : { start: w / 2, end: w / 2 + M.right },\n times.map((d) => wallDay(d, clock)),\n ).map((i) => ({ key: times[i]!.getTime(), x: Math.round(at(i)), anchor: \"middle\", label: fmt(times[i]!) }))\n : times.length\n ? timeLabels(t0, t1, w, w + M.right, (d) => x(d.getTime()), fmt, clock, !formatTick && span > 48 * H)\n : [];\n const step = (times[1]?.getTime() ?? 0) - (times[0]?.getTime() ?? 0);\n const pointFormat =\n formatTime ??\n timeFormat(\n locale,\n step && step < 86_400_000 ? { weekday: \"short\", ...DAY, ...CLOCK } : span <= 90 * 86_400_000 ? { weekday: \"short\", ...DAY } : { ...DAY, year: \"numeric\" },\n zone,\n );\n const last = times.length - 1;\n const headingFormat = (i: number) => {\n const heading = pointFormat(times[i]!);\n if (partial?.ongoing && i === last) return t(\"chart.soFar\", \"{heading}, so far\", { heading });\n if ((partial?.last && i === last) || (partial?.first && i === 0)) return t(\"chart.partial\", \"{heading}, partial\", { heading });\n return heading;\n };\n const dashedFirst = !!partial?.first && last >= 1;\n const dashedLast = !!(partial?.last || partial?.ongoing) && last >= 1;\n const cutStart = dashedFirst ? Math.round(at(1)) : -M.left;\n const cutEnd = dashedLast ? Math.round(at(last - 1)) : w + M.right;\n const partialLine = (stroke: React.SVGProps<SVGPathElement>) => {\n if (!dashedFirst && !dashedLast) return <path {...stroke} />;\n return (\n <>\n <path {...stroke} clipPath={`url(#${gid}-whole)`} />\n <path {...stroke} clipPath={`url(#${gid}-partial)`} strokeDasharray=\"4 4\" data-partial=\"\" />\n </>\n );\n };\n const lineGen = d3line<number>()\n .defined(Number.isFinite)\n .x((_, i) => Math.round(at(i)))\n .y((v) => y(v))\n .curve(curveMonotoneX);\n const areaGen = d3area<number>()\n .defined(Number.isFinite)\n .x((_, i) => Math.round(at(i)))\n .y0(zero)\n .y1((v) => y(v))\n .curve(curveMonotoneX);\n const stackArea = d3area<SeriesPoint<number[]>>()\n .x((_, i) => Math.round(at(i)))\n .y0((d) => y(d[0]))\n .y1((d) => y(d[1]))\n .curve(curveMonotoneX);\n const stackTop = d3line<SeriesPoint<number[]>>()\n .x((_, i) => Math.round(at(i)))\n .y((d) => y(d[0] < 0 && d[1] <= 0 ? d[0] : d[1]))\n .curve(curveMonotoneX);\n const lonely = (vs: number[]) =>\n vs.flatMap((v, i) => (Number.isFinite(v) && !Number.isFinite(vs[i - 1] ?? NaN) && !Number.isFinite(vs[i + 1] ?? NaN) ? [i] : []));\n const palette = useMemo(() => seriesColors(series.map((s) => s.id)), [series]);\n const color = (s: TimeSeries) => s.color ?? palette.get(s.id)!;\n const bis = bisector((d: Date) => d.getTime()).center;\n const onMove = (e: React.PointerEvent<SVGRectElement>) => {\n const r = e.currentTarget.getBoundingClientRect();\n const px = e.clientX - r.left;\n const i = ordinal ? Math.max(0, Math.min(times.length - 1, Math.floor(px / slot))) : bis(times, x.invert(px));\n setHover({ i, y: Math.round(e.clientY - r.top + M.top) });\n };\n\n const table = {\n columns: [t(\"timeseriesChart.time\", \"Time\"), ...series.map((s) => s.label)],\n rows: times.map((_, i) => [headingFormat(i), ...series.map((s) => (Number.isFinite(s.points[i]?.v) ? format(s.points[i]!.v) : \"–\"))]),\n };\n\n const blank = !!state.loading || empty;\n const keys = useChartKeys(blank || state.error ? 0 : times.length);\n const active = blank || !!state.error ? null : (hover?.i ?? keys.index ?? (highlight !== undefined && highlight < times.length ? highlight : null));\n const activeX = active === null ? 0 : Math.round(at(active)) + M.left;\n const clampY = (v: number) => Math.max(0, Math.min(h, v));\n const activeY =\n active === null\n ? 0\n : hover && hover.i === active\n ? hover.y\n : M.top +\n Math.round(\n clampY(\n stacked\n ? Math.min(zero, ...(stackData ?? []).map((layer) => y(layer[active]?.[1] ?? 0)))\n : Math.min(...values.map((sv) => (Number.isFinite(sv[active]) ? y(sv[active]!) : h))),\n ),\n );\n const rowsFor = (i: number) =>\n visible.map((s) => {\n const v = s.points[i]?.v ?? NaN;\n const total = visible.reduce((acc, ss) => acc + Math.abs(Number.isFinite(ss.points[i]?.v) ? ss.points[i]!.v : 0), 0);\n return {\n id: s.id,\n label: s.label,\n color: color(s),\n value: Number.isFinite(v) ? format(v) : \"–\",\n ...(shares && visible.length > 1 && total && Number.isFinite(v) ? { share: formatPercent(Math.round((Math.abs(v) / total) * 100) / 100, 0) } : {}),\n } as { id: string; label: ReactNode; color: string; value: ReactNode; share?: ReactNode | undefined };\n });\n\n return (\n <div ref={ref} className={cn(\"min-w-0\", className)}>\n <ChartFrame\n label={ariaLabel}\n height={height}\n table={table}\n state={{\n ...state,\n empty,\n ...(allHidden && !state.empty ? { emptyText: t(\"chart.allHidden\", \"Every series is hidden. Choose one in the legend to show it.\") } : {}),\n }}\n legend={\n !hideLegend && series.length > 1 ? (\n <Legend\n items={series.map((s) => ({ id: s.id, label: s.label, color: color(s) }))}\n hidden={hidden}\n shape={kind === \"line\" ? \"line\" : \"square\"}\n onToggle={(id) => {\n const n = new Set(hidden);\n if (n.has(id)) n.delete(id);\n else n.add(id);\n setHidden(n);\n }}\n onHover={setFocus}\n />\n ) : undefined\n }\n >\n <div ref={box} role=\"group\" aria-label={ariaLabel} {...keys.props} className=\"absolute inset-0 rounded-cell focus-ring\">\n {size.width > 0 && (\n <svg width={size.width} height={height} className=\"block overflow-visible\" role=\"presentation\">\n <defs>\n <clipPath id={`${gid}-plot`}>\n <rect x={-M.left - 4} y={-4} width={w + M.left + 8} height={h + 8} />\n </clipPath>\n {(dashedFirst || dashedLast) && (\n <>\n <clipPath id={`${gid}-whole`}>\n <rect x={cutStart} y={-M.top} width={Math.max(0, cutEnd - cutStart)} height={height} />\n </clipPath>\n <clipPath id={`${gid}-partial`}>\n {dashedFirst && <rect x={-M.left} y={-M.top} width={cutStart + M.left} height={height} />}\n {dashedLast && <rect x={cutEnd} y={-M.top} width={w + M.right - cutEnd} height={height} />}\n </clipPath>\n </>\n )}\n {visible.map((s) => (\n <linearGradient key={s.id} id={`${gid}-${s.id}`} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor={color(s)} className=\"chart-fill-top\" />\n <stop offset=\"100%\" stopColor={color(s)} stopOpacity={0} />\n </linearGradient>\n ))}\n </defs>\n <g transform={`translate(${M.left},${M.top})`}>\n {yTicks.map((tick) => (\n <g key={tick} transform={`translate(0,${Math.round(y(tick)) + 0.5})`}>\n {tick !== 0 && <line x2={w} {...AXIS.grid} />}\n <text x={w + 12} dy=\"0.32em\" {...AXIS.label}>\n {axisLabel(tick)}\n </text>\n </g>\n ))}\n <line x2={w} y1={zero + 0.5} y2={zero + 0.5} {...AXIS.baseline} />\n {xLabels.map((l) => (\n <text key={l.key} x={l.x} y={h + 20} textAnchor={l.anchor} {...AXIS.label}>\n {l.label}\n </text>\n ))}\n <g clipPath={`url(#${gid}-plot)`}>\n {empty\n ? null\n : stacked && stackData\n ? stackData.map((layer, li) => {\n const s = visible[li]!;\n return (\n <g key={s.id} opacity={focus && focus !== s.id ? 0.3 : 1} className=\"opacity-motion\">\n <path d={stackArea(layer) ?? \"\"} fill={color(s)} className=\"chart-stack-fill\" />\n {partialLine({\n d: stackTop(layer) ?? \"\",\n fill: \"none\",\n stroke: color(s),\n strokeWidth: 1.5,\n strokeLinejoin: \"round\",\n strokeLinecap: \"round\",\n })}\n </g>\n );\n })\n : visible.map((s, si) => (\n <g key={s.id} opacity={focus && focus !== s.id ? 0.3 : 1} className=\"opacity-motion\">\n {kind === \"area\" && <path d={areaGen(values[si] ?? []) ?? \"\"} fill={`url(#${gid}-${s.id})`} />}\n {partialLine({\n d: lineGen(values[si] ?? []) ?? \"\",\n fill: \"none\",\n stroke: color(s),\n strokeWidth: 2,\n strokeLinejoin: \"round\",\n strokeLinecap: \"round\",\n })}\n {lonely(values[si] ?? []).map((i) => (\n <circle key={i} data-point=\"\" cx={Math.round(at(i))} cy={y(values[si]![i]!)} r={2.5} fill={color(s)} />\n ))}\n </g>\n ))}\n </g>\n {threshold && y(threshold.value) >= 0 && y(threshold.value) <= h && (\n <g transform={`translate(0,${Math.round(y(threshold.value)) + 0.5})`}>\n <line x2={w} stroke=\"var(--k-danger)\" strokeDasharray=\"4 4\" strokeWidth={1} />\n <text x={0} dy={-6} fill=\"var(--k-danger-text)\" fontSize={12} fontWeight={500}>\n {threshold.label}\n </text>\n </g>\n )}\n {active !== null && (\n <g aria-hidden>\n <line x1={activeX - M.left + 0.5} x2={activeX - M.left + 0.5} y2={h} {...AXIS.grid} stroke=\"var(--k-line-strong)\" />\n {!stacked &&\n visible.map((s, si) =>\n Number.isFinite(values[si]?.[active]) ? (\n <circle\n key={s.id}\n cx={activeX - M.left}\n cy={clampY(y(values[si]![active]!))}\n r={4}\n fill={color(s)}\n stroke=\"var(--k-bg-panel)\"\n strokeWidth={2}\n />\n ) : null,\n )}\n </g>\n )}\n <rect width={w} height={h} fill=\"transparent\" onPointerMove={onMove} onPointerLeave={() => setHover(null)} />\n </g>\n </svg>\n )}\n {active !== null && times[active] && (\n <ChartTooltip x={activeX} y={activeY} width={size.width} visible heading={headingFormat(active)} rows={rowsFor(active)} />\n )}\n <ChartLive>\n {keys.index !== null && active !== null && times[keys.index] ? liveLine(headingFormat(keys.index), rowsFor(keys.index), t) : null}\n </ChartLive>\n </div>\n </ChartFrame>\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") TimeseriesChart.displayName = \"TimeseriesChart\";\n"],"mappings":";;;;;;;;;;;;;AAIA,IAAMgC,oBAAS,IAAI,IAAuB;AAE1C,SAAgBC,GAAU,GAAyC;CACjE,IAAI,CAACC,GAAU,QAAQ,MAAMC,EAAE,QAAQ,IAAIA,EAAE,kBAAkB,IAAI;CACnE,IAAID,MAAa,OAAO,QAAQ,MAAMC,EAAE,QAAQ;CAChD,IAAIC,IAAQJ,EAAO,IAAIE,CAAQ;CAC/B,IAAI,CAACE,GAAO;EACV,IAAMC,IAAI,IAAI,KAAK,eAAe,SAAS;GACzC;GACA,WAAW;GACX,MAAM;GACN,OAAO;GACP,KAAK;GACL,MAAM;GACN,QAAQ;GACR,QAAQ;EACV,CAAC;EAKD,AAJA,KAAS,MAAM;GACb,IAAMC,IAAI,OAAO,YAAYD,EAAE,cAAcF,CAAC,CAAC,CAAC,KAAK,MAAM,CAACI,EAAE,MAAM,OAAOA,EAAE,KAAK,CAAC,CAAC,CAAC;GACrF,OAAO,KAAK,IAAID,EAAE,QAAQ,OAAOA,EAAE,SAAS,KAAK,GAAGA,EAAE,OAAO,GAAGA,EAAE,QAAQ,GAAGA,EAAE,UAAU,GAAGA,EAAE,UAAU,CAAC,IAAIH,EAAE,mBAAmB;EACpI,GACAH,EAAO,IAAIE,GAAUE,CAAK;CAC5B;CACA,OAAOA;AACT;AAEA,SAAgBI,GAAS,GAAc,GAAwB;CAC7D,IAAMC,IAAQC,KAAQN,EAAM,IAAI,KAAKM,CAAI,CAAC,IAAIA;CAC9C,OAAO,IAAI,KAAKA,KAAQN,EAAM,IAAI,KAAKK,CAAK,CAAC,IAAIA,EAAM;AACzD;AAEA,SAAgBE,EAAU,GAAY,GAAU,GAAe,GAA0B;CACvF,OAAOC,GAAS,IAAI,KAAKR,EAAMS,CAAI,CAAC,GAAG,IAAI,KAAKT,EAAMU,CAAE,CAAC,GAAGC,CAAK,CAAC,CAAC,SAAS,MAAM;EAChF,IAAMZ,IAAIK,GAASQ,EAAE,QAAQ,GAAGZ,CAAK;EAErC,OAAOA,EAAMD,CAAC,MAAMa,EAAE,QAAQ,IAAI,CAACb,CAAC,IAAI,CAAC;CAC3C,CAAC;AACH;AAEA,IAAac,MAAW,GAAS,MAAqB,IAAI,KAAKb,EAAMD,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,EAAE,GCdrFe,KAAkC,EAC7C,MAAM;CACJ,MAAM,EAAE,SAAS,GAAG;CACpB,MAAM,EAAE,SAAS,GAAG;CACpB,SAAS,EAAE,SAAS,GAAG;AACzB,EACF,GACaC,KAA0C,EAAE,MAAM,OAAO;AA+BtE,SAASC,EAAW,GAAgB,GAAqC,GAAmD;CAC1H,OAAOC,EAAc;EAAE,GAAGC;EAAS,GAAIpB,IAAW,EAAE,YAAS,IAAI,CAAC;CAAG,GAAGqB,CAAM;AAChF;AACA,IAAMC,KAAQ;CAAE,MAAM;CAAW,QAAQ;CAAW,WAAW;AAAM,GAC/DC,IAAM;CAAE,OAAO;CAAS,KAAK;AAAU,GACvCC,KAAI;AAEV,SAASC,GAAW,GAAgB,GAAc,GAA8B,GAAkB;CAChG,IAAIC,KAAQ,KAAKF,IAAG,OAAON,EAAWG,GAAQC,IAAOtB,CAAQ;CAC7D,IAAI0B,KAAQ,OAAUF,IAAG,OAAON,EAAWG,GAAQE,GAAKvB,CAAQ;CAChE,IAAM2B,IAAQT,EAAWG,GAAQ,EAAE,OAAO,QAAQ,GAAGrB,CAAQ;CAC7D,QAAQ,MAAY;EAClB,IAAMQ,IAAO,IAAI,KAAKN,EAAMD,CAAC,CAAC;EAC9B,OAAOO,EAAK,YAAY,MAAM,IAAI,OAAOA,EAAK,eAAe,CAAC,IAAImB,EAAM1B,CAAC;CAC3E;AACF;AAIA,IAAM2B,KAAS;AAEf,SAASC,GACP,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACe;CACf,IAAIC,IAA0B,CAAC;CAC/B,KAAK,IAAIjB,IAAQ,KAAK,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,MAAMC,IAAI,EAAE,CAAC,CAAC,GAAGD,KAAS,GAAG,KAAS;EACnF,IAAMkB,IAAQtB,EAAUuB,GAAIC,GAAIpB,GAAOX,CAAK,CAAC,CAC1C,QAAQ,MAAM,CAACgC,MAAQhC,EAAMD,CAAC,IAAI2B,OAAW,CAAC,CAAC,CAC/C,QAAQ,GAAG,GAAG,MAAQO,MAAM,KAAKC,EAAMnC,CAAC,MAAMmC,EAAMC,EAAIF,IAAI,EAAG,CAAC,GAC7DG,IAAS1D,EACbmD,EAAM,KAAK,OAAO;GAAE,KAAK9B,EAAE,QAAQ;GAAG,IAAI,KAAK,MAAMsC,EAAGtC,CAAC,CAAC;GAAG,OAAOmC,EAAMnC,CAAC;EAAE,EAAE,GAC/EuC,CACF;EACA,IAAIF,EAAO,WAAWP,EAAM,UAAUO,EAAO,UAAU,GAAG,OAAOA;EACjE,AAAIA,EAAO,SAASR,EAAS,WAAQ,IAAWQ;CAClD;CACA,IAAIR,EAAS,SAAS,KAAKG,EAAG,QAAQ,IAAID,EAAG,QAAQ,GAAG;EACtD,IAAMS,IAAO7D,EACX,CAACoD,GAAIC,CAAE,CAAC,CAAC,KAAK,OAAO;GAAE,KAAKhC,EAAE,QAAQ;GAAG,IAAI,KAAK,MAAMsC,EAAGtC,CAAC,CAAC;GAAG,OAAOmC,EAAMnC,CAAC;EAAE,EAAE,GAClFuC,CACF;EACA,IAAIC,EAAK,WAAW,GAAG,OAAOA;CAChC;CACA,OAAOX;AACT;AAEA,IAAaY,KAAkC,kBAAiD,SAC9F,EACE,WACA,UAAO,QACP,YAAS,KACT,iBACA,cACA,gBACA,cACA,gBACA,gBACA,aAAS,QACT,cACA,aAAS,IACT,YACA,eACA,cAAcC,IACd,GAAGC,KAEL,IACA;CACA,IAAMC,IAAIxE,EAAU,GACdgD,KAAS/C,EAAU,GACnBwE,KAASC,QAAiB,MAAcC,EAAaC,CAAC,IACtD,CAACC,IAAKC,KAAQ3E,EAAwB,GACtC4E,IAAMC,GAAM,CAAC,CAAC,QAAQ,MAAM,EAAE,GAC9BC,KAAY3E,GAAUoE,MAAevD,EAAW,GAChD,CAAC+D,IAAQC,MAAaC,mBAAsB,IAAI,IAAI,CAAC,GACrD,CAACC,GAAOC,MAAYF,GAAwB,IAAI,GAChD,CAACG,GAAOC,MAAYJ,GAA0C,IAAI,GAClEK,IAAUC,EAAO,QAAQ,MAAM,CAACR,GAAO,IAAIS,EAAE,EAAE,CAAC,GAChDC,IAAQC,UAAeH,EAAO,EAAE,EAAE,UAAU,CAAC,EAAA,CAAG,KAAK,MAAM,IAAI,KAAK3D,EAAE,CAAC,CAAC,GAAG,CAAC2D,CAAM,CAAC,GACnFI,IAAaL,EAAQ,SAAS,MAAME,EAAE,OAAO,KAAK,MAAM5D,EAAE,CAAC,CAAC,GAC5DgE,KAAYL,EAAO,SAAS,KAAKD,EAAQ,WAAW,GACpDO,IAAQzB,EAAM,UAAUwB,MAAaH,EAAM,WAAW,KAAK,CAAC1E,GAAU4E,CAAU,IAChFG,IAAUC,MAAS,WACnBC,MAAa,MACjBP,EAAM,KAAK,GAAG,MAAOH,EAAQ,QAAQ,GAAG,MAAMW,KAAK,OAAO,SAAST,EAAE,OAAOU,EAAG,EAAE,CAAC,MAAMV,EAAE,OAAOU,EAAG,EAAE,KAAK,KAAKC,IAAO,IAAIX,EAAE,OAAOU,EAAG,CAAE,IAAI,IAAI,CAAC,CAAC,GAC/IE,KAASjF,GAAY2E,IAAU,CAAC,GAAGE,GAAU,CAAC,GAAG,GAAGA,GAAU,EAAE,CAAC,IAAIL,GAAYU,IAAY,CAACA,EAAU,KAAK,IAAI,CAAC,CAAC,GACnHC,IAAOxF,GAAY,CAAC,CAAC,OAAOsF,EAAM,CAAC,CAAC,KAAK,CAAC,GAC1C,CAACG,KAAS,GAAGC,KAAS,KAAKF,EAAK,OAAO,GACvCG,IAAQvG,EAAW;EAAC,GAAGyF,EAAW,KAAK,MAAO,OAAO,SAASlB,CAAC,IAAIA,IAAI,CAAE;EAAG8B;EAAQC;CAAM,GAAG,CAAC,CAACpC,EAAM,OAAO,GAC5GsC,IAAKD,EAAMA,EAAM,SAAS,MAAMF,IAChCI,KAAKF,EAAMA,EAAM,SAAS,MAAMD,IAChCI,KAASf,IACX,CAAC,IACD5E,GAAS0E,CAAU,IACjB,CAAC,CAAC,IACF5F,GAAWc,GAAcyF,GAAMxB,EAAS,GAAG5D,GAAOyE,CAAU,CAAC,CAAC,CAAC,QAAQ,MAAMlB,KAAKiC,IAAK,QAAQjC,KAAKkC,KAAK,IAAI,GAC7GE,IAAI;EAAE,KAAK;EAAG,OAAOzF,GAASwF,GAAO,IAAI9B,EAAS,GAAG,EAAE,KAAKH,EAAK,QAAQA,EAAK,QAAQ,KAAM,SAAS,CAAC;EAAG,QAAQ;EAAI,MAAM;CAAE,GAC7HrC,IAAI,KAAK,IAAI,GAAGqC,EAAK,QAAQkC,EAAE,OAAOA,EAAE,KAAK,GAC7CC,IAAI,KAAK,IAAI,GAAGC,IAASF,EAAE,MAAMA,EAAE,MAAM;CAC/C,EAAK,MAAM,CAACC,GAAG,CAAC,CAAC;CACjB,IAAME,KAAU1B,EAAQ,KAAK,GAAG,MAAOA,EAAQ,MAAM,GAAG2B,CAAE,CAAC,CAAC,QAAQ,GAAG,MAAMhB,IAAIT,EAAE,OAAO,QAAQ,CAAC,CAAC,GAC9F0B,IAAS5B,EAAQ,KAAK,GAAG,MAAOE,EAAE,OAAO,KAAK,GAAG,MAAQ,OAAO,SAAS5D,EAAE,CAAC,IAAK6E,EAAMO,GAAQC,KAAOE,MAAO,IAAK,GAAI,CAAC,GACvHC,KAASd,EAAK,KAAK,CAAC,CAAC,OAAO,CAACI,GAAIC,OAAOD,IAAKA,IAAK,IAAIC,EAAE,CAAC,GACzDU,KAAK,MAAcD,GAAO3C,CAAC,GAC3B6C,IAAO,KAAK,MAAM,KAAK,IAAI,GAAG,KAAK,IAAIR,GAAGO,EAAE,CAAC,CAAC,CAAC,CAAC,GAChD7D,IAAKlE,GAAMmG,CAAK,qBAAK,IAAI,KAAK,CAAC,GAC/BhC,KAAKlE,GAAMkG,CAAK,KAAKjC,GACrBiE,IAAUC,OAAW,YAAYjC,EAAM,SAAS,GAChDkC,IAAOF,IAAUnF,IAAImD,EAAM,SAAS,GACpC5D,IAAIf,GAAY,CAAC,CAAC,OAAO,CAAC0C,EAAG,QAAQ,GAAGC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAGnB,CAAC,CAAC,GACnEyB,KAAM,MAAe0D,KAAW9D,IAAI,MAAOgE,IAAO9F,EAAE4D,EAAM9B,MAAMH,CAAE,GAClEoE,KAAY9B,IACdtG,GAAkB,CAAC,CAChB,KAAK8F,EAAQ,KAAK,GAAG,MAAM,OAAO3B,CAAC,CAAC,CAAC,CAAC,CACtC,OAAOmE,EAAoB,CAAC,CAACrC,EAAM,KAAK,GAAG,MAAOH,EAAQ,KAAK,GAAG,MAAQ,OAAO,SAAS4B,EAAOD,EAAG,GAAGf,EAAG,IAAIgB,EAAOD,EAAG,CAAEf,KAAO,CAAE,CAAC,CAAC,IACxI,MACE6B,IAAOvG,MAAYwG,EAAe,GAClCtG,KAAQH,GAAUwG,CAAI,GACtB7E,MAAQuC,EAAMA,EAAM,SAAS,EAAE,EAAE,QAAQ,KAAK,MAAMA,EAAM,EAAE,EAAE,QAAQ,KAAK,IAC3EwC,KAAMC,OAAezC,EAAM,WAAW,IAAI/C,EAAWG,IAAQE,GAAKgF,CAAI,IAAI9E,GAAWJ,IAAQK,IAAM6E,GAAMrG,EAAK,IAC9GyG,KACJT,OAAW,YAAYjC,EAAM,WAAW,IACpChF,GACEgF,EAAM,IAAIwC,EAAG,GACbR,IAAUE,IAAOrF,GACjBmF,IAAU;EAAE,OAAOE,IAAO;EAAG,KAAKA,IAAO,IAAId,EAAE;CAAM,IAAI;EAAE,OAAOvE,IAAI;EAAG,KAAKA,IAAI,IAAIuE,EAAE;CAAM,GAC9FpB,EAAM,KAAK,MAAMlD,GAAQd,GAAGC,EAAK,CAAC,CACpC,CAAC,CAAC,KAAK,OAAO;EAAE,KAAK+D,EAAM9B,EAAE,CAAE,QAAQ;EAAG,GAAG,KAAK,MAAMI,EAAGJ,CAAC,CAAC;EAAG,QAAQ;EAAU,OAAOsE,GAAIxC,EAAM9B,EAAG;CAAE,EAAE,IAC1G8B,EAAM,SACJpC,GAAWG,GAAIC,IAAInB,GAAGA,IAAIuE,EAAE,QAAQ,MAAMhF,EAAEJ,EAAE,QAAQ,CAAC,GAAGwG,IAAKvG,IAAO,CAACwG,MAAchF,KAAO,KAAKF,EAAC,IAClG,CAAC,GACHoF,MAAQ3C,EAAM,EAAE,EAAE,QAAQ,KAAK,MAAMA,EAAM,EAAE,EAAE,QAAQ,KAAK,IAC5D4C,KACJC,MACA5F,EACEG,IACAuF,MAAQA,KAAO,QAAa;EAAE,SAAS;EAAS,GAAGrF;EAAK,GAAGD;CAAM,IAAII,MAAQ,SAAkB;EAAE,SAAS;EAAS,GAAGH;CAAI,IAAI;EAAE,GAAGA;EAAK,MAAM;CAAU,GACxJgF,CACF,GACIQ,IAAO9C,EAAM,SAAS,GACtB+C,MAAiB,MAAc;EACnC,IAAMC,IAAUJ,GAAY5C,EAAM9B,EAAG;EAGrC,OAFI+E,GAAS,WAAW/E,MAAM4E,IAAalE,EAAE,eAAe,qBAAqB,EAAE,WAAQ,CAAC,IACvFqE,GAAS,QAAQ/E,MAAM4E,KAAUG,GAAS,SAAS/E,MAAM,IAAWU,EAAE,iBAAiB,sBAAsB,EAAE,WAAQ,CAAC,IACtHoE;CACT,GACME,IAAc,CAAC,CAACD,GAAS,SAASH,KAAQ,GAC1CK,IAAa,CAAC,EAAEF,GAAS,QAAQA,GAAS,YAAYH,KAAQ,GAC9DM,KAAWF,IAAc,KAAK,MAAM5E,EAAG,CAAC,CAAC,IAAI,CAAC8C,EAAE,MAChDiC,KAASF,IAAa,KAAK,MAAM7E,EAAGwE,IAAO,CAAC,CAAC,IAAIjG,IAAIuE,EAAE,OACvDkC,MAAe,MACf,CAACJ,KAAe,CAACC,IAAmB,kBAAC,QAAD,EAAM,GAAII,EAAS,CAAA,IAEzD,kBAAAvJ,IAAA,EAAA,UAAA,CACE,kBAAC,QAAD;EAAM,GAAIuJ;EAAQ,UAAU,QAAQpE,EAAI;CAAW,CAAA,GACnD,kBAAC,QAAD;EAAM,GAAIoE;EAAQ,UAAU,QAAQpE,EAAI;EAAY,iBAAgB;EAAM,gBAAa;CAAI,CAAA,CAC3F,EAAA,CAAA,GAGAqE,KAAUvJ,GAAe,CAAC,CAC7B,QAAQ,OAAO,QAAQ,CAAC,CACxB,GAAG,GAAG,MAAM,KAAK,MAAMqE,EAAGJ,CAAC,CAAC,CAAC,CAAC,CAC9B,GAAG,MAAM0D,EAAE5C,CAAC,CAAC,CAAC,CACd,MAAM0E,CAAc,GACjBC,KAAUzJ,GAAe,CAAC,CAC7B,QAAQ,OAAO,QAAQ,CAAC,CACxB,GAAG,GAAG,MAAM,KAAK,MAAMoE,EAAGJ,CAAC,CAAC,CAAC,CAAC,CAC9B,GAAG2D,CAAI,CAAC,CACR,IAAI,MAAMD,EAAE5C,CAAC,CAAC,CAAC,CACf,MAAM0E,CAAc,GACjBG,KAAY3J,GAA8B,CAAC,CAC9C,GAAG,GAAG,MAAM,KAAK,MAAMoE,EAAGJ,CAAC,CAAC,CAAC,CAAC,CAC9B,IAAI,MAAM0D,EAAE5F,EAAE,EAAE,CAAC,CAAC,CAClB,IAAI,MAAM4F,EAAE5F,EAAE,EAAE,CAAC,CAAC,CAClB,MAAM0H,CAAc,GACjBI,KAAW7J,GAA8B,CAAC,CAC7C,GAAG,GAAG,MAAM,KAAK,MAAMqE,EAAGJ,CAAC,CAAC,CAAC,CAAC,CAC9B,GAAG,MAAM0D,EAAE5F,EAAE,KAAK,KAAKA,EAAE,MAAM,IAAIA,EAAE,KAAKA,EAAE,EAAE,CAAC,CAAC,CAChD,MAAM0H,CAAc,GACjBK,MAAU,MACdC,EAAG,SAAS,GAAG,MAAO,OAAO,SAAShF,CAAC,KAAK,CAAC,OAAO,SAASgF,EAAG9F,IAAI,MAAM,GAAG,KAAK,CAAC,OAAO,SAAS8F,EAAG9F,IAAI,MAAM,GAAG,IAAI,CAACA,CAAC,IAAI,CAAC,CAAE,GAC5H+F,KAAUhE,SAAcrF,GAAakF,EAAO,KAAK,MAAMC,EAAE,EAAE,CAAC,GAAG,CAACD,CAAM,CAAC,GACvEoE,KAAS,MAAkBnE,EAAE,SAASkE,GAAQ,IAAIlE,EAAE,EAAE,GACtDoE,KAAMC,IAAU,MAAYpI,EAAE,QAAQ,CAAC,CAAC,CAAC,QACzCqI,MAAU,MAA0C;EACxD,IAAMC,IAAI,EAAE,cAAc,sBAAsB,GAC1CC,IAAK,EAAE,UAAUD,EAAE,MACnBpG,IAAI8D,IAAU,KAAK,IAAI,GAAG,KAAK,IAAIhC,EAAM,SAAS,GAAG,KAAK,MAAMuE,IAAKrC,CAAI,CAAC,CAAC,IAAIiC,GAAInE,GAAO5D,EAAE,OAAOmI,CAAE,CAAC;EAC5G,GAAS;GAAE;GAAG,GAAG,KAAK,MAAM,EAAE,UAAUD,EAAE,MAAMlD,EAAE,GAAG;EAAE,CAAC;CAC1D,GAEMoD,KAAQ;EACZ,SAAS,CAAC5F,EAAE,wBAAwB,MAAM,GAAG,GAAGkB,EAAO,KAAK,MAAMC,EAAE,KAAK,CAAC;EAC1E,MAAMC,EAAM,KAAK,GAAG,MAAM,CAAC+C,GAAc7E,CAAC,GAAG,GAAG4B,EAAO,KAAK,MAAO,OAAO,SAASC,EAAE,OAAO7B,EAAE,EAAE,CAAC,IAAIW,GAAOkB,EAAE,OAAO7B,EAAE,CAAE,CAAC,IAAI,GAAI,CAAC,CAAC;CACtI,GAEMuG,KAAQ,CAAC,CAAC9F,EAAM,WAAWyB,GAC3BsE,IAAOlK,EAAaiK,MAAS9F,EAAM,QAAQ,IAAIqB,EAAM,MAAM,GAC3D2E,IAASF,MAAW9F,EAAM,QAAQ,OAAQgB,GAAO,KAAK+E,EAAK,UAAUE,MAAc,KAAA,KAAaA,IAAY5E,EAAM,SAAS4E,IAAY,OACvIC,IAAUF,MAAW,OAAO,IAAI,KAAK,MAAMrG,EAAGqG,CAAM,CAAC,IAAIvD,EAAE,MAC3D0D,MAAU,MAAc,KAAK,IAAI,GAAG,KAAK,IAAIzD,GAAGrC,CAAC,CAAC,GAClD+F,KACJJ,MAAW,OACP,IACAhF,KAASA,EAAM,MAAMgF,IACnBhF,EAAM,IACNyB,EAAE,MACF,KAAK,MACH0D,GACEzE,IACI,KAAK,IAAIwB,GAAM,IAAIM,MAAa,CAAC,EAAA,CAAG,KAAK,MAAUP,EAAEoD,EAAML,EAAO,GAAG,MAAM,CAAC,CAAC,CAAC,IAC9E,KAAK,IAAI,GAAGlD,EAAO,KAAK,MAAQ,OAAO,SAASwD,EAAGN,EAAO,IAAI/C,EAAEqD,EAAGN,EAAQ,IAAItD,CAAE,CAAC,CACxF,CACF,GACF6D,MAAW,MACfrF,EAAQ,KAAK,MAAM;EACjB,IAAMb,IAAIe,EAAE,OAAO7B,EAAE,EAAE,KAAK,KACtBiH,IAAQtF,EAAQ,QAAQ,GAAK,MAAOuF,IAAM,KAAK,IAAI,OAAO,SAASC,EAAG,OAAOnH,EAAE,EAAE,CAAC,IAAImH,EAAG,OAAOnH,EAAE,CAAE,IAAI,CAAC,GAAG,CAAC;EACnH,OAAO;GACL,IAAI6B,EAAE;GACN,OAAOA,EAAE;GACT,OAAOmE,EAAMnE,CAAC;GACd,OAAO,OAAO,SAASf,CAAC,IAAIH,GAAOG,CAAC,IAAI;GACxC,GAAIsG,MAAUzF,EAAQ,SAAS,KAAKsF,KAAS,OAAO,SAASnG,CAAC,IAAI,EAAE,OAAOuG,EAAc,KAAK,MAAO,KAAK,IAAIvG,CAAC,IAAImG,IAAS,GAAG,IAAI,KAAK,CAAC,EAAE,IAAI,CAAC;EAClJ;CACF,CAAC;CAEH,OACE,kBAAC,OAAD;EAAU;EAAK,WAAWhL,EAAG,WAAWqL,EAAS;EAC/C,UAAA,kBAACzK,IAAD;GACE,OAAO2D;GACC;GACD;GACP,OAAO;IACL,GAAGC;IACH;IACA,GAAIwB,MAAa,CAACxB,EAAM,QAAQ,EAAE,WAAWC,EAAE,mBAAmB,8DAA8D,EAAE,IAAI,CAAC;GACzI;GACA,QACE,CAAC6G,MAAc3F,EAAO,SAAS,IAC7B,kBAAC5E,IAAD;IACE,OAAO4E,EAAO,KAAK,OAAO;KAAE,IAAIC,EAAE;KAAI,OAAOA,EAAE;KAAO,OAAOmE,EAAMnE,CAAC;IAAE,EAAE;IAChE;IACR,OAAOO,MAAS,SAAS,SAAS;IAClC,WAAW,MAAO;KAChB,IAAMoF,IAAI,IAAI,IAAIpG,EAAM;KAGxB,AAFIoG,EAAE,IAAIC,CAAE,IAAGD,EAAE,OAAOC,CAAE,IACrBD,EAAE,IAAIC,CAAE,GACbpG,GAAUmG,CAAC;IACb;IACA,SAAShG;GACV,CAAA,IACC,KAAA;GAGN,UAAA,kBAAC,OAAD;IAAK,KAAKT;IAAK,MAAK;IAAQ,cAAYP;IAAW,GAAIgG,EAAK;IAAO,WAAU;IAA7E,UAAA;KACGxF,EAAK,QAAQ,KACZ,kBAAC,OAAD;MAAK,OAAOA,EAAK;MAAe;MAAQ,WAAU;MAAyB,MAAK;MAAhF,UAAA,CACE,kBAAC,QAAD,EAAA,UAAA;OACE,kBAAC,YAAD;QAAU,IAAI,GAAGC,EAAI;QACnB,UAAA,kBAAC,QAAD;SAAM,GAAG,CAACiC,EAAE,OAAO;SAAG,GAAG;SAAI,OAAOvE,IAAIuE,EAAE,OAAO;SAAG,QAAQC,IAAI;QAAI,CAAA;OAC5D,CAAA;QACR6B,KAAeC,MACf,kBAAAnJ,IAAA,EAAA,UAAA,CACE,kBAAC,YAAD;QAAU,IAAI,GAAGmF,EAAI;QACnB,UAAA,kBAAC,QAAD;SAAM,GAAGiE;SAAU,GAAG,CAAChC,EAAE;SAAK,OAAO,KAAK,IAAI,GAAGiC,KAASD,EAAQ;SAAW;QAAS,CAAA;OAC9E,CAAA,GACV,kBAAC,YAAD;QAAU,IAAI,GAAGjE,EAAI;QAArB,UAAA,CACG+D,KAAe,kBAAC,QAAD;SAAM,GAAG,CAAC9B,EAAE;SAAM,GAAG,CAACA,EAAE;SAAK,OAAOgC,KAAWhC,EAAE;SAAc;QAAS,CAAA,GACvF+B,KAAc,kBAAC,QAAD;SAAM,GAAGE;SAAQ,GAAG,CAACjC,EAAE;SAAK,OAAOvE,IAAIuE,EAAE,QAAQiC;SAAgB;QAAS,CAAA,CACjF;OACV,CAAA,CAAA,EAAA,CAAA;OAEHxD,EAAQ,KAAK,MACZ,kBAAC,kBAAD;QAA2B,IAAI,GAAGV,EAAI,GAAGY,EAAE;QAAM,IAAG;QAAI,IAAG;QAAI,IAAG;QAAI,IAAG;QAAzE,UAAA,CACE,kBAAC,QAAD;SAAM,QAAO;SAAK,WAAWmE,EAAMnE,CAAC;SAAG,WAAU;QAAkB,CAAA,GACnE,kBAAC,QAAD;SAAM,QAAO;SAAO,WAAWmE,EAAMnE,CAAC;SAAG,aAAa;QAAI,CAAA,CAC5C;OAHK,GAAAA,EAAE,EAGP,CACjB;MACG,EAAA,CAAA,GACN,kBAAC,KAAD;OAAG,WAAW,aAAaqB,EAAE,KAAK,GAAGA,EAAE,IAAI;OAA3C,UAAA;QACGD,GAAO,KAAK,MACX,kBAAC,KAAD;SAAc,WAAW,eAAe,KAAK,MAAMS,EAAEgE,CAAI,CAAC,IAAI,GAAI;SAAlE,UAAA,CACGA,MAAS,KAAK,kBAAC,QAAD;UAAM,IAAI/I;UAAG,GAAI1B,EAAK;SAAO,CAAA,GAC5C,kBAAC,QAAD;UAAM,GAAG0B,IAAI;UAAI,IAAG;UAAS,GAAI1B,EAAK;UACnC,UAAAkE,GAAUuG,CAAI;SACX,CAAA,CACL;QALK,GAAAA,CAKL,CACJ;QACD,kBAAC,QAAD;SAAM,IAAI/I;SAAG,IAAIgF,IAAO;SAAK,IAAIA,IAAO;SAAK,GAAI1G,EAAK;QAAW,CAAA;QAChEuH,GAAQ,KAAK,MACZ,kBAAC,QAAD;SAAkB,GAAGmD,EAAE;SAAG,GAAGxE,IAAI;SAAI,YAAYwE,EAAE;SAAQ,GAAI1K,EAAK;SACjE,UAAA0K,EAAE;QACC,GAFKA,EAAE,GAEP,CACP;QACD,kBAAC,KAAD;SAAG,UAAU,QAAQ1G,EAAI;SACtB,UAAAiB,IACG,OACAC,KAAW8B,KACTA,GAAU,KAAK,GAAO,MAAO;UAC3B,IAAMpC,IAAIF,EAAQiG;UAClB,OACE,kBAAC,KAAD;WAAc,SAASrG,KAASA,MAAUM,EAAE,KAAK,KAAM;WAAG,WAAU;WAApE,UAAA,CACE,kBAAC,QAAD;YAAM,GAAG8D,GAAUmB,CAAK,KAAK;YAAI,MAAMd,EAAMnE,CAAC;YAAG,WAAU;WAAoB,CAAA,GAC9EuD,GAAY;YACX,GAAGQ,GAASkB,CAAK,KAAK;YACtB,MAAM;YACN,QAAQd,EAAMnE,CAAC;YACf,aAAa;YACb,gBAAgB;YAChB,eAAe;WACjB,CAAC,CACA;UAVK,GAAAA,EAAE,EAUP;SAEP,CAAC,IACDF,EAAQ,KAAK,GAAG,MACd,kBAAC,KAAD;UAAc,SAASJ,KAASA,MAAUM,EAAE,KAAK,KAAM;UAAG,WAAU;UAApE,UAAA;WACGO,MAAS,UAAU,kBAAC,QAAD;YAAM,GAAGqD,GAAQlC,EAAOD,MAAO,CAAC,CAAC,KAAK;YAAI,MAAM,QAAQrC,EAAI,GAAGY,EAAE,GAAG;WAAK,CAAA;WAC5FuD,GAAY;YACX,GAAGE,GAAQ/B,EAAOD,MAAO,CAAC,CAAC,KAAK;YAChC,MAAM;YACN,QAAQ0C,EAAMnE,CAAC;YACf,aAAa;YACb,gBAAgB;YAChB,eAAe;WACjB,CAAC;WACAgE,GAAOtC,EAAOD,MAAO,CAAC,CAAC,CAAC,CAAC,KAAK,MAC7B,kBAAC,UAAD;YAAgB,cAAW;YAAG,IAAI,KAAK,MAAMlD,EAAGJ,CAAC,CAAC;YAAG,IAAI0D,EAAEH,EAAOD,EAAG,CAAEtD,EAAG;YAAG,GAAG;YAAK,MAAMgG,EAAMnE,CAAC;WAAI,GAAzF7B,CAAyF,CACvG;UACA;SAbK,GAAA6B,EAAE,EAaP,CACJ;QACN,CAAA;QACFa,KAAagB,EAAEhB,EAAU,KAAK,KAAK,KAAKgB,EAAEhB,EAAU,KAAK,KAAKS,KAC7D,kBAAC,KAAD;SAAG,WAAW,eAAe,KAAK,MAAMO,EAAEhB,EAAU,KAAK,CAAC,IAAI,GAAI;SAAlE,UAAA,CACE,kBAAC,QAAD;UAAM,IAAI/D;UAAG,QAAO;UAAkB,iBAAgB;UAAM,aAAa;SAAI,CAAA,GAC7E,kBAAC,QAAD;UAAM,GAAG;UAAG,IAAI;UAAI,MAAK;UAAuB,UAAU;UAAI,YAAY;UACvE,UAAA+D,EAAU;SACP,CAAA,CACL;;QAEJ+D,MAAW,QACV,kBAAC,KAAD;SAAG,eAAA;SAAH,UAAA,CACE,kBAAC,QAAD;UAAM,IAAIE,IAAUzD,EAAE,OAAO;UAAK,IAAIyD,IAAUzD,EAAE,OAAO;UAAK,IAAIC;UAAG,GAAIlG,EAAK;UAAM,QAAO;SAAwB,CAAA,GAClH,CAACkF,KACAR,EAAQ,KAAK,GAAG,MACd,OAAO,SAAS4B,EAAOD,EAAG,GAAGmD,EAAO,IAClC,kBAAC,UAAD;UAEE,IAAIE,IAAUzD,EAAE;UAChB,IAAI0D,GAAOlD,EAAEH,EAAOD,EAAG,CAAEmD,EAAQ,CAAC;UAClC,GAAG;UACH,MAAMT,EAAMnE,CAAC;UACb,QAAO;UACP,aAAa;SACd,GAPMA,EAAE,EAOR,IACC,IACN,CACD;;QAEL,kBAAC,QAAD;SAAM,OAAOlD;SAAG,QAAQwE;SAAG,MAAK;SAAc,eAAegD;SAAQ,sBAAsBzE,GAAS,IAAI;QAAI,CAAA;OAC3G;MACA,CAAA,CAAA;;KAEN+E,MAAW,QAAQ3E,EAAM2E,MACxB,kBAAC7J,IAAD;MAAc,GAAG+J;MAAS,GAAGE;MAAS,OAAO7F,EAAK;MAAO,SAAA;MAAQ,SAAS6D,GAAc4B,CAAM;MAAG,MAAMO,GAAQP,CAAM;KAAI,CAAA;KAE3H,kBAAC1J,IAAD,EAAA,UACGyJ,EAAK,UAAU,QAAQC,MAAW,QAAQ3E,EAAM0E,EAAK,SAAS7J,GAASkI,GAAc2B,EAAK,KAAK,GAAGQ,GAAQR,EAAK,KAAK,GAAG9F,CAAC,IAAI,KACpH,CAAA;IACR;;EACK,CAAA;CACT,CAAA;AAET,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,GAAgB,cAAc"}
|
|
1
|
+
{"version":3,"file":"timeseries-nDviPxvQ.js","names":["d3min","d3max","d3stack","_Fragment","d3line","d3area","cn","useUiText","useLocale","wholeTicks","useSize","useChartKeys","useTweened","tickLabel","placeTimeLabels","seriesColors","liveLine","ChartTooltip","ChartFrame","axisLabelIndexes","ChartLive","Legend","AXIS","readableTicks","scaleLinear","hasPoints","compactAxis","onlyZero","finite","valueExtent","axisRoom","Fragment$1","clocks","wallClock","timeZone","d","clock","f","p","x","fromWall","guess","wall","zoneTicks","utcTicks","from","to","count","w","wallDay","KAESO_TIMESERIES_CHART_VARIANTS","KAESO_TIMESERIES_CHART_DEFAULT_VARIANTS","timeFormat","dateFormatter","options","locale","CLOCK","DAY","H","tickFormat","span","month","DAY_MS","timeLabels","fallback","ticks","t0","t1","days","i","label","all","placed","at","right","ends","TimeseriesChart","ariaLabel","state","t","format","formatValue","formatNumber","v","box","size","gid","useId","axisLabel","hidden","setHidden","useState","focus","setFocus","hover","setHover","visible","series","s","times","useMemo","flatValues","allHidden","empty","stacked","kind","stackSums","a","ti","sign","extent","threshold","axis","niceLo","niceHi","drawn","lo","hi","yTicks","M","h","height","offsets","si","values","pi","yScale","y","zero","min","max","ordinal","tickAt","slot","stackData","stack","stackOffsetDiverging","zone","formatTimeZone","fmt","formatTick","xLabels","step","pointFormat","formatTime","last","headingFormat","heading","partial","dashedFirst","dashedLast","cutStart","cutEnd","partialLine","stroke","lineGen","line","curveMonotoneX","areaGen","area","stackArea","stackTop","lonely","vs","palette","color","bis","bisector","onMove","r","px","table","blank","keys","active","highlight","activeX","clampY","activeY","layer","sv","rowsFor","total","acc","ss","shares","formatPercent","className","hideLegend","n","id","tick","l","li"],"sources":["../../src/components/charts/time-axis.ts","../../src/components/charts/timeseries.tsx"],"sourcesContent":["import { utcTicks } from \"d3-time\";\n\nexport type WallClock = (d: Date) => number;\n\nconst clocks = new Map<string, WallClock>();\n\nexport function wallClock(timeZone: string | undefined): WallClock {\n if (!timeZone) return (d) => d.getTime() - d.getTimezoneOffset() * 60_000;\n if (timeZone === \"UTC\") return (d) => d.getTime();\n let clock = clocks.get(timeZone);\n if (!clock) {\n const f = new Intl.DateTimeFormat(\"en-US\", {\n timeZone,\n hourCycle: \"h23\",\n year: \"numeric\",\n month: \"numeric\",\n day: \"numeric\",\n hour: \"numeric\",\n minute: \"numeric\",\n second: \"numeric\",\n });\n clock = (d) => {\n const p = Object.fromEntries(f.formatToParts(d).map((x) => [x.type, Number(x.value)]));\n return Date.UTC(p.year ?? 1970, (p.month ?? 1) - 1, p.day ?? 1, p.hour ?? 0, p.minute ?? 0, p.second ?? 0) + d.getUTCMilliseconds();\n };\n clocks.set(timeZone, clock);\n }\n return clock;\n}\n\nexport function fromWall(wall: number, clock: WallClock): Date {\n const guess = wall - (clock(new Date(wall)) - wall);\n return new Date(wall - (clock(new Date(guess)) - guess));\n}\n\nexport function zoneTicks(from: Date, to: Date, count: number, clock: WallClock): Date[] {\n return utcTicks(new Date(clock(from)), new Date(clock(to)), count).flatMap((w) => {\n const d = fromWall(w.getTime(), clock);\n // A wall time skipped when clocks spring forward has no instant; it would land on the next tick.\n return clock(d) === w.getTime() ? [d] : [];\n });\n}\n\nexport const wallDay = (d: Date, clock: WallClock) => new Date(clock(d)).toISOString().slice(0, 10);\n","import type * as React from \"react\";\nimport { forwardRef, useId, useMemo, useState, type ReactNode } from \"react\";\nimport { scaleLinear } from \"./linear-scale.js\";\nimport { area as d3area, curveMonotoneX, line as d3line, stack as d3stack, stackOffsetDiverging, type SeriesPoint } from \"d3-shape\";\nimport { bisector, max as d3max, min as d3min } from \"d3-array\";\nimport { cn } from \"../../utils/cn.js\";\nimport { dateFormatter, formatNumber, formatPercent, formatTimeZone } from \"../../format/index.js\";\nimport { useLocale, useUiText } from \"../../i18n/context.js\";\nimport {\n AXIS,\n axisLabelIndexes,\n ChartFrame,\n ChartLive,\n ChartTooltip,\n Legend,\n placeTimeLabels,\n liveLine,\n seriesColors,\n readableTicks,\n tickLabel,\n useChartKeys,\n useSize,\n useTweened,\n wholeTicks,\n type ChartState,\n} from \"./core.js\";\nimport { axisRoom, compactAxis, finite, onlyZero, hasPoints, valueExtent } from \"./domain.js\";\nimport { wallClock, wallDay, zoneTicks, type WallClock } from \"./time-axis.js\";\n\nexport const KAESO_TIMESERIES_CHART_VARIANTS = {\n kind: {\n line: { classes: \"\" },\n area: { classes: \"\" },\n stacked: { classes: \"\" },\n },\n} as const;\nexport const KAESO_TIMESERIES_CHART_DEFAULT_VARIANTS = { kind: \"line\" } as const;\n\nexport interface TimePoint {\n t: Date | number | string;\n v: number;\n}\nexport interface TimeSeries {\n id: string;\n label: string;\n points: TimePoint[];\n color?: string | undefined;\n}\n\nexport interface TimeseriesChartProps extends ChartState {\n series: TimeSeries[];\n kind?: keyof typeof KAESO_TIMESERIES_CHART_VARIANTS.kind | undefined;\n height?: number | undefined;\n formatValue?: ((v: number) => string) | undefined;\n threshold?: { value: number; label: string } | undefined;\n hideLegend?: boolean | undefined;\n highlight?: number | undefined;\n formatTime?: ((t: Date) => string) | undefined;\n formatTick?: ((t: Date) => string) | undefined;\n tickAt?: \"time\" | \"points\" | undefined;\n timeZone?: string | undefined;\n shares?: boolean | undefined;\n partial?: { first?: boolean | undefined; last?: boolean | undefined; ongoing?: boolean | undefined } | undefined;\n \"aria-label\": string;\n className?: string | undefined;\n}\n\nfunction timeFormat(locale: string, options: Intl.DateTimeFormatOptions, timeZone: string | undefined): (d: Date) => string {\n return dateFormatter({ ...options, ...(timeZone ? { timeZone } : {}) }, locale);\n}\nconst CLOCK = { hour: \"2-digit\", minute: \"2-digit\", hourCycle: \"h23\" } as const;\nconst DAY = { month: \"short\", day: \"numeric\" } as const;\nconst H = 3_600_000;\n\nfunction tickFormat(locale: string, span: number, timeZone: string | undefined, clock: WallClock) {\n if (span <= 48 * H) return timeFormat(locale, CLOCK, timeZone);\n if (span <= 90 * 24 * H) return timeFormat(locale, DAY, timeZone);\n const month = timeFormat(locale, { month: \"short\" }, timeZone);\n return (d: Date) => {\n const wall = new Date(clock(d));\n return wall.getUTCMonth() === 0 ? String(wall.getUTCFullYear()) : month(d);\n };\n}\n\ntype PlacedLabel = { key: number; x: number; anchor: \"start\" | \"middle\" | \"end\"; label: string };\n\nconst DAY_MS = 86_400_000;\n\nfunction timeLabels(\n t0: Date,\n t1: Date,\n w: number,\n right: number,\n at: (d: Date) => number,\n label: (d: Date) => string,\n clock: WallClock,\n days: boolean,\n): PlacedLabel[] {\n let fallback: PlacedLabel[] = [];\n for (let count = Math.max(2, Math.min(10, Math.floor(w / 64))); count >= 1; count--) {\n const ticks = zoneTicks(t0, t1, count, clock)\n .filter((d) => !days || clock(d) % DAY_MS === 0)\n .filter((d, i, all) => i === 0 || label(d) !== label(all[i - 1]!));\n const placed = placeTimeLabels(\n ticks.map((d) => ({ key: d.getTime(), at: Math.round(at(d)), label: label(d) })),\n right,\n );\n if (placed.length === ticks.length && placed.length >= 2) return placed;\n if (placed.length > fallback.length) fallback = placed;\n }\n if (fallback.length < 2 && t1.getTime() > t0.getTime()) {\n const ends = placeTimeLabels(\n [t0, t1].map((d) => ({ key: d.getTime(), at: Math.round(at(d)), label: label(d) })),\n right,\n );\n if (ends.length === 2) return ends;\n }\n return fallback;\n}\n\nexport const TimeseriesChart = /* @__PURE__ */ forwardRef<HTMLDivElement, TimeseriesChartProps>(function TimeseriesChart(\n {\n series,\n kind = \"line\",\n height = 240,\n formatValue,\n threshold,\n hideLegend,\n highlight,\n formatTime,\n formatTick,\n tickAt = \"time\",\n timeZone,\n shares = true,\n partial,\n className,\n \"aria-label\": ariaLabel,\n ...state\n },\n ref,\n) {\n const t = useUiText();\n const locale = useLocale();\n const format = formatValue ?? ((v: number) => formatNumber(v));\n const [box, size] = useSize<HTMLDivElement>();\n const gid = useId().replace(/:/g, \"\");\n const axisLabel = tickLabel(formatValue ?? compactAxis);\n const [hidden, setHidden] = useState<Set<string>>(new Set());\n const [focus, setFocus] = useState<string | null>(null);\n const [hover, setHover] = useState<{ i: number; y: number } | null>(null);\n const visible = series.filter((s) => !hidden.has(s.id));\n const times = useMemo(() => (series[0]?.points ?? []).map((p) => new Date(p.t)), [series]);\n const flatValues = visible.flatMap((s) => s.points.map((p) => p.v));\n const allHidden = series.length > 0 && visible.length === 0;\n const empty = state.empty ?? (allHidden || times.length === 0 || !hasPoints(flatValues));\n const stacked = kind === \"stacked\";\n const stackSums = (sign: number) =>\n times.map((_, ti) => visible.reduce((a, s) => a + (Number.isFinite(s.points[ti]?.v) && (s.points[ti]?.v ?? 0) * sign > 0 ? s.points[ti]!.v : 0), 0));\n const extent = valueExtent(stacked ? [...stackSums(1), ...stackSums(-1)] : flatValues, threshold ? [threshold.value] : []);\n const axis = scaleLinear().domain(extent).nice(4);\n const [niceLo = 0, niceHi = 1] = axis.domain();\n const drawn = useTweened([...flatValues.map((v) => (Number.isFinite(v) ? v : 0)), niceLo, niceHi], !!state.loading);\n const lo = drawn[drawn.length - 2] ?? niceLo;\n const hi = drawn[drawn.length - 1] ?? niceHi;\n const yTicks = empty\n ? []\n : onlyZero(flatValues)\n ? [0]\n : wholeTicks(readableTicks(axis, axisLabel), finite(flatValues)).filter((v) => v >= lo - 1e-9 && v <= hi + 1e-9);\n const M = { top: 8, right: axisRoom(yTicks.map(axisLabel), { max: size.width ? size.width * 0.4 : Infinity }), bottom: 28, left: 0 };\n const w = Math.max(0, size.width - M.left - M.right);\n const h = Math.max(0, height - M.top - M.bottom);\n axis.range([h, 0]);\n const offsets = visible.map((_, si) => visible.slice(0, si).reduce((a, s) => a + s.points.length, 0));\n const values = visible.map((s, si) => s.points.map((p, pi) => (Number.isFinite(p.v) ? (drawn[offsets[si]! + pi] ?? 0) : NaN)));\n const yScale = axis.copy().domain([lo, hi === lo ? lo + 1 : hi]);\n const y = (v: number) => yScale(v);\n const zero = Math.round(Math.max(0, Math.min(h, y(0))));\n const t0 = d3min(times) ?? new Date(0);\n const t1 = d3max(times) ?? t0;\n const ordinal = tickAt === \"points\" && times.length > 0;\n const slot = ordinal ? w / times.length : 0;\n const x = scaleLinear().domain([t0.getTime(), t1.getTime()]).range([0, w]);\n const at = (i: number) => (ordinal ? (i + 0.5) * slot : x(times[i] ?? t0));\n const stackData = stacked\n ? d3stack<number[]>()\n .keys(visible.map((_, i) => String(i)))\n .offset(stackOffsetDiverging)(times.map((_, ti) => visible.map((_, si) => (Number.isFinite(values[si]?.[ti]) ? values[si]![ti]! : 0))))\n : null;\n const zone = timeZone ?? formatTimeZone();\n const clock = wallClock(zone);\n const span = (times[times.length - 1]?.getTime() ?? 0) - (times[0]?.getTime() ?? 0);\n const fmt = formatTick ?? (times.length === 1 ? timeFormat(locale, DAY, zone) : tickFormat(locale, span, zone, clock));\n const xLabels: PlacedLabel[] =\n tickAt === \"points\" || times.length === 1\n ? axisLabelIndexes(\n times.map(fmt),\n ordinal ? slot : w,\n ordinal ? { start: slot / 2, end: slot / 2 + M.right } : { start: w / 2, end: w / 2 + M.right },\n times.map((d) => wallDay(d, clock)),\n ).map((i) => ({ key: times[i]!.getTime(), x: Math.round(at(i)), anchor: \"middle\", label: fmt(times[i]!) }))\n : times.length\n ? timeLabels(t0, t1, w, w + M.right, (d) => x(d.getTime()), fmt, clock, !formatTick && span > 48 * H)\n : [];\n const step = (times[1]?.getTime() ?? 0) - (times[0]?.getTime() ?? 0);\n const pointFormat =\n formatTime ??\n timeFormat(\n locale,\n step && step < 86_400_000 ? { weekday: \"short\", ...DAY, ...CLOCK } : span <= 90 * 86_400_000 ? { weekday: \"short\", ...DAY } : { ...DAY, year: \"numeric\" },\n zone,\n );\n const last = times.length - 1;\n const headingFormat = (i: number) => {\n const heading = pointFormat(times[i]!);\n if (partial?.ongoing && i === last) return t(\"chart.soFar\", \"{heading}, so far\", { heading });\n if ((partial?.last && i === last) || (partial?.first && i === 0)) return t(\"chart.partial\", \"{heading}, partial\", { heading });\n return heading;\n };\n const dashedFirst = !!partial?.first && last >= 1;\n const dashedLast = !!(partial?.last || partial?.ongoing) && last >= 1;\n const cutStart = dashedFirst ? Math.round(at(1)) : -M.left;\n const cutEnd = dashedLast ? Math.round(at(last - 1)) : w + M.right;\n const partialLine = (stroke: React.SVGProps<SVGPathElement>) => {\n if (!dashedFirst && !dashedLast) return <path {...stroke} />;\n return (\n <>\n <path {...stroke} clipPath={`url(#${gid}-whole)`} />\n <path {...stroke} clipPath={`url(#${gid}-partial)`} strokeDasharray=\"4 4\" data-partial=\"\" />\n </>\n );\n };\n const lineGen = d3line<number>()\n .defined(Number.isFinite)\n .x((_, i) => Math.round(at(i)))\n .y((v) => y(v))\n .curve(curveMonotoneX);\n const areaGen = d3area<number>()\n .defined(Number.isFinite)\n .x((_, i) => Math.round(at(i)))\n .y0(zero)\n .y1((v) => y(v))\n .curve(curveMonotoneX);\n const stackArea = d3area<SeriesPoint<number[]>>()\n .x((_, i) => Math.round(at(i)))\n .y0((d) => y(d[0]))\n .y1((d) => y(d[1]))\n .curve(curveMonotoneX);\n const stackTop = d3line<SeriesPoint<number[]>>()\n .x((_, i) => Math.round(at(i)))\n .y((d) => y(d[0] < 0 && d[1] <= 0 ? d[0] : d[1]))\n .curve(curveMonotoneX);\n const lonely = (vs: number[]) =>\n vs.flatMap((v, i) => (Number.isFinite(v) && !Number.isFinite(vs[i - 1] ?? NaN) && !Number.isFinite(vs[i + 1] ?? NaN) ? [i] : []));\n const palette = useMemo(() => seriesColors(series.map((s) => s.id)), [series]);\n const color = (s: TimeSeries) => s.color ?? palette.get(s.id)!;\n const bis = bisector((d: Date) => d.getTime()).center;\n const onMove = (e: React.PointerEvent<SVGRectElement>) => {\n const r = e.currentTarget.getBoundingClientRect();\n const px = e.clientX - r.left;\n const i = ordinal ? Math.max(0, Math.min(times.length - 1, Math.floor(px / slot))) : bis(times, x.invert(px));\n setHover({ i, y: Math.round(e.clientY - r.top + M.top) });\n };\n\n const table = {\n columns: [t(\"timeseriesChart.time\", \"Time\"), ...series.map((s) => s.label)],\n rows: times.map((_, i) => [headingFormat(i), ...series.map((s) => (Number.isFinite(s.points[i]?.v) ? format(s.points[i]!.v) : \"–\"))]),\n };\n\n const blank = !!state.loading || empty;\n const keys = useChartKeys(blank || state.error ? 0 : times.length);\n const active = blank || !!state.error ? null : (hover?.i ?? keys.index ?? (highlight !== undefined && highlight < times.length ? highlight : null));\n const activeX = active === null ? 0 : Math.round(at(active)) + M.left;\n const clampY = (v: number) => Math.max(0, Math.min(h, v));\n const activeY =\n active === null\n ? 0\n : hover && hover.i === active\n ? hover.y\n : M.top +\n Math.round(\n clampY(\n stacked\n ? Math.min(zero, ...(stackData ?? []).map((layer) => y(layer[active]?.[1] ?? 0)))\n : Math.min(...values.map((sv) => (Number.isFinite(sv[active]) ? y(sv[active]!) : h))),\n ),\n );\n const rowsFor = (i: number) =>\n visible.map((s) => {\n const v = s.points[i]?.v ?? NaN;\n const total = visible.reduce((acc, ss) => acc + Math.abs(Number.isFinite(ss.points[i]?.v) ? ss.points[i]!.v : 0), 0);\n return {\n id: s.id,\n label: s.label,\n color: color(s),\n value: Number.isFinite(v) ? format(v) : \"–\",\n ...(shares && visible.length > 1 && total && Number.isFinite(v) ? { share: formatPercent(Math.round((Math.abs(v) / total) * 100) / 100, 0) } : {}),\n } as { id: string; label: ReactNode; color: string; value: ReactNode; share?: ReactNode | undefined };\n });\n\n return (\n <div ref={ref} className={cn(\"min-w-0\", className)}>\n <ChartFrame\n label={ariaLabel}\n height={height}\n table={table}\n state={{\n ...state,\n empty,\n ...(allHidden && !state.empty ? { emptyText: t(\"chart.allHidden\", \"Every series is hidden. Choose one in the legend to show it.\") } : {}),\n }}\n legend={\n !hideLegend && series.length > 1 ? (\n <Legend\n items={series.map((s) => ({ id: s.id, label: s.label, color: color(s) }))}\n hidden={hidden}\n shape={kind === \"line\" ? \"line\" : \"square\"}\n onToggle={(id) => {\n const n = new Set(hidden);\n if (n.has(id)) n.delete(id);\n else n.add(id);\n setHidden(n);\n }}\n onHover={setFocus}\n />\n ) : undefined\n }\n >\n <div ref={box} role=\"group\" aria-label={ariaLabel} {...keys.props} className=\"absolute inset-0 rounded-cell focus-ring\">\n {size.width > 0 && (\n <svg width={size.width} height={height} className=\"block overflow-visible\" role=\"presentation\">\n <defs>\n <clipPath id={`${gid}-plot`}>\n <rect x={-M.left - 4} y={-4} width={w + M.left + 8} height={h + 8} />\n </clipPath>\n {(dashedFirst || dashedLast) && (\n <>\n <clipPath id={`${gid}-whole`}>\n <rect x={cutStart} y={-M.top} width={Math.max(0, cutEnd - cutStart)} height={height} />\n </clipPath>\n <clipPath id={`${gid}-partial`}>\n {dashedFirst && <rect x={-M.left} y={-M.top} width={cutStart + M.left} height={height} />}\n {dashedLast && <rect x={cutEnd} y={-M.top} width={w + M.right - cutEnd} height={height} />}\n </clipPath>\n </>\n )}\n {visible.map((s) => (\n <linearGradient key={s.id} id={`${gid}-${s.id}`} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor={color(s)} className=\"chart-fill-top\" />\n <stop offset=\"100%\" stopColor={color(s)} stopOpacity={0} />\n </linearGradient>\n ))}\n </defs>\n <g transform={`translate(${M.left},${M.top})`}>\n {yTicks.map((tick) => (\n <g key={tick} transform={`translate(0,${Math.round(y(tick)) + 0.5})`}>\n {tick !== 0 && <line x2={w} {...AXIS.grid} />}\n <text x={w + 12} dy=\"0.32em\" {...AXIS.label}>\n {axisLabel(tick)}\n </text>\n </g>\n ))}\n <line x2={w} y1={zero + 0.5} y2={zero + 0.5} {...AXIS.baseline} />\n {xLabels.map((l) => (\n <text key={l.key} x={l.x} y={h + 20} textAnchor={l.anchor} {...AXIS.label}>\n {l.label}\n </text>\n ))}\n <g clipPath={`url(#${gid}-plot)`}>\n {empty\n ? null\n : stacked && stackData\n ? stackData.map((layer, li) => {\n const s = visible[li]!;\n return (\n <g key={s.id} opacity={focus && focus !== s.id ? 0.3 : 1} className=\"opacity-motion\">\n <path d={stackArea(layer) ?? \"\"} fill={color(s)} className=\"chart-stack-fill\" />\n {partialLine({\n d: stackTop(layer) ?? \"\",\n fill: \"none\",\n stroke: color(s),\n strokeWidth: 1.5,\n strokeLinejoin: \"round\",\n strokeLinecap: \"round\",\n })}\n </g>\n );\n })\n : visible.map((s, si) => (\n <g key={s.id} opacity={focus && focus !== s.id ? 0.3 : 1} className=\"opacity-motion\">\n {kind === \"area\" && <path d={areaGen(values[si] ?? []) ?? \"\"} fill={`url(#${gid}-${s.id})`} />}\n {partialLine({\n d: lineGen(values[si] ?? []) ?? \"\",\n fill: \"none\",\n stroke: color(s),\n strokeWidth: 2,\n strokeLinejoin: \"round\",\n strokeLinecap: \"round\",\n })}\n {lonely(values[si] ?? []).map((i) => (\n <circle key={i} data-point=\"\" cx={Math.round(at(i))} cy={y(values[si]![i]!)} r={2.5} fill={color(s)} />\n ))}\n </g>\n ))}\n </g>\n {threshold && y(threshold.value) >= 0 && y(threshold.value) <= h && (\n <g transform={`translate(0,${Math.round(y(threshold.value)) + 0.5})`}>\n <line x2={w} stroke=\"var(--k-danger)\" strokeDasharray=\"4 4\" strokeWidth={1} />\n <text x={0} dy={-6} fill=\"var(--k-danger-text)\" fontSize={12} fontWeight={500}>\n {threshold.label}\n </text>\n </g>\n )}\n {active !== null && (\n <g aria-hidden>\n <line x1={activeX - M.left + 0.5} x2={activeX - M.left + 0.5} y2={h} {...AXIS.grid} stroke=\"var(--k-line-strong)\" />\n {!stacked &&\n visible.map((s, si) =>\n Number.isFinite(values[si]?.[active]) ? (\n <circle\n key={s.id}\n cx={activeX - M.left}\n cy={clampY(y(values[si]![active]!))}\n r={4}\n fill={color(s)}\n stroke=\"var(--k-bg-panel)\"\n strokeWidth={2}\n />\n ) : null,\n )}\n </g>\n )}\n <rect width={w} height={h} fill=\"transparent\" onPointerMove={onMove} onPointerLeave={() => setHover(null)} />\n </g>\n </svg>\n )}\n {active !== null && times[active] && (\n <ChartTooltip x={activeX} y={activeY} width={size.width} visible heading={headingFormat(active)} rows={rowsFor(active)} />\n )}\n <ChartLive>\n {keys.index !== null && active !== null && times[keys.index] ? liveLine(headingFormat(keys.index), rowsFor(keys.index), t) : null}\n </ChartLive>\n </div>\n </ChartFrame>\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") TimeseriesChart.displayName = \"TimeseriesChart\";\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { a as e, i as t, n, o as r, r as i, s as a, t as o } from "../chunks/app-frame-
|
|
2
|
+
import { a as e, i as t, n, o as r, r as i, s as a, t as o } from "../chunks/app-frame-CfJ7s3Q0.js";
|
|
3
3
|
import { t as s } from "../chunks/nav-sheet-Dt6JSvzX.js";
|
|
4
4
|
export { o as AppFrame, n as KAESO_APP_FRAME_BODY_DEFAULT_VARIANTS, i as KAESO_APP_FRAME_BODY_VARIANTS, t as KAESO_APP_FRAME_DEFAULT_VARIANTS, e as KAESO_APP_FRAME_VARIANTS, s as NavSheet, r as PEEK_DELAY, a as useAppFrame };
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
import { t as e } from "../../chunks/cn-BjnOAUrA.js";
|
|
3
3
|
import { i as t } from "../../chunks/context-BELWW79w.js";
|
|
4
4
|
import { formatNumber as n, formatPercent as r } from "../../format.js";
|
|
5
|
-
import { A as i, D as a, E as o, M as s, O as c, S as l, b as u, g as ee, h as te, i as ne, n as re, p as ie, r as ae, s as oe, t as d, v as se } from "../../chunks/core-
|
|
5
|
+
import { A as i, D as a, E as o, M as s, O as c, S as l, b as u, g as ee, h as te, i as ne, n as re, p as ie, r as ae, s as oe, t as d, v as se } from "../../chunks/core-B0bULn-t.js";
|
|
6
6
|
import { t as ce } from "../../chunks/linear-scale-BWKeRqDX.js";
|
|
7
|
-
import { a as le, i as ue, n as de, o as fe, r as f, s as pe, t as me } from "../../chunks/domain-
|
|
7
|
+
import { a as le, i as ue, n as de, o as fe, r as f, s as pe, t as me } from "../../chunks/domain-BsM9UmAg.js";
|
|
8
8
|
import { forwardRef as p, useState as he } from "react";
|
|
9
9
|
import { Fragment as ge, jsx as m, jsxs as h } from "react/jsx-runtime";
|
|
10
10
|
import { radius as _e } from "@logicplanes/kaeso-tokens";
|
|
@@ -4,7 +4,7 @@ import { i as t, n } from "../../chunks/context-BELWW79w.js";
|
|
|
4
4
|
import { formatNumber as r, formatPercent as i } from "../../format.js";
|
|
5
5
|
import { r as a } from "../../chunks/text-DkKdTVUf.js";
|
|
6
6
|
import { n as o } from "../../chunks/use-layout-width-CbSDbRb0.js";
|
|
7
|
-
import { M as s, O as c, b as l, c as u, n as d, s as f } from "../../chunks/core-
|
|
7
|
+
import { M as s, O as c, b as l, c as u, n as d, s as f } from "../../chunks/core-B0bULn-t.js";
|
|
8
8
|
import { forwardRef as p, useLayoutEffect as m, useRef as h, useState as g } from "react";
|
|
9
9
|
import { jsx as _, jsxs as v } from "react/jsx-runtime";
|
|
10
10
|
import { arc as y, pie as b } from "d3-shape";
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { t as e } from "../../chunks/cn-BjnOAUrA.js";
|
|
3
3
|
import { i as t } from "../../chunks/context-BELWW79w.js";
|
|
4
4
|
import { formatPercent as n } from "../../format.js";
|
|
5
|
-
import { O as r } from "../../chunks/core-
|
|
5
|
+
import { O as r } from "../../chunks/core-B0bULn-t.js";
|
|
6
6
|
import { forwardRef as i } from "react";
|
|
7
7
|
import { jsx as a, jsxs as o } from "react/jsx-runtime";
|
|
8
8
|
//#region src/components/charts/gauge.tsx
|
|
@@ -3,7 +3,7 @@ import { t as e } from "../../chunks/cn-BjnOAUrA.js";
|
|
|
3
3
|
import { i as t } from "../../chunks/context-BELWW79w.js";
|
|
4
4
|
import { formatNumber as n } from "../../format.js";
|
|
5
5
|
import { t as r } from "../../chunks/use-scroll-fade-uc8mWSDX.js";
|
|
6
|
-
import { i, n as a, r as o } from "../../chunks/core-
|
|
6
|
+
import { i, n as a, r as o } from "../../chunks/core-B0bULn-t.js";
|
|
7
7
|
import { forwardRef as s, useLayoutEffect as c, useRef as l, useState as u } from "react";
|
|
8
8
|
import { jsx as d, jsxs as f } from "react/jsx-runtime";
|
|
9
9
|
import { max as p } from "d3-array";
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
import { t as e } from "../../chunks/cn-BjnOAUrA.js";
|
|
3
3
|
import { i as t } from "../../chunks/context-BELWW79w.js";
|
|
4
4
|
import { formatNumber as n } from "../../format.js";
|
|
5
|
-
import { D as r, E as i, b as a, h as o, n as s, r as c } from "../../chunks/core-
|
|
6
|
-
import { i as l } from "../../chunks/domain-
|
|
5
|
+
import { D as r, E as i, b as a, h as o, n as s, r as c } from "../../chunks/core-B0bULn-t.js";
|
|
6
|
+
import { i as l } from "../../chunks/domain-BsM9UmAg.js";
|
|
7
7
|
import { forwardRef as u, useId as d, useMemo as f, useState as p } from "react";
|
|
8
8
|
import { jsx as m, jsxs as h } from "react/jsx-runtime";
|
|
9
9
|
import { sankey as g, sankeyLinkHorizontal as _ } from "d3-sankey";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
export { t as KAESO_TIMESERIES_CHART_DEFAULT_VARIANTS, n as KAESO_TIMESERIES_CHART_VARIANTS, r as TimeseriesChart } from "../../chunks/timeseries-
|
|
2
|
+
export { t as KAESO_TIMESERIES_CHART_DEFAULT_VARIANTS, n as KAESO_TIMESERIES_CHART_VARIANTS, r as TimeseriesChart } from "../../chunks/timeseries-nDviPxvQ.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { KAESO_SPARKLINE_DEFAULT_VARIANTS as e, KAESO_SPARKLINE_VARIANTS as t, Sparkline as n } from "./charts/sparkline.js";
|
|
3
|
-
import { A as r, C as i, D as a, E as o, O as s, S as c, T as l, _ as u, a as d, b as f, c as p, d as m, f as h, g, h as _, i as v, j as y, k as b, l as x, m as S, n as C, o as w, p as T, r as E, s as D, t as O, u as k, v as A, w as j, x as M, y as N } from "../chunks/core-
|
|
4
|
-
import { n as P, r as F, t as I } from "../chunks/timeseries-
|
|
3
|
+
import { A as r, C as i, D as a, E as o, O as s, S as c, T as l, _ as u, a as d, b as f, c as p, d as m, f as h, g, h as _, i as v, j as y, k as b, l as x, m as S, n as C, o as w, p as T, r as E, s as D, t as O, u as k, v as A, w as j, x as M, y as N } from "../chunks/core-B0bULn-t.js";
|
|
4
|
+
import { n as P, r as F, t as I } from "../chunks/timeseries-nDviPxvQ.js";
|
|
5
5
|
import { BarChart as L, KAESO_BAR_CHART_DEFAULT_VARIANTS as R, KAESO_BAR_CHART_VARIANTS as z } from "./charts/bar.js";
|
|
6
6
|
import { Donut as B, KAESO_DONUT_DEFAULT_VARIANTS as V, KAESO_DONUT_VARIANTS as H, KAESO_SHARE_BAR_DEFAULT_VARIANTS as U, KAESO_SHARE_BAR_VARIANTS as W, Ring as G, ShareBar as K, groupSmall as q, shareLabel as J, wholeShares as Y } from "./charts/donut.js";
|
|
7
7
|
import { Heatmap as X, KAESO_HEATMAP_DEFAULT_VARIANTS as Z, KAESO_HEATMAP_VARIANTS as Q } from "./charts/heatmap.js";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
export { n as DATA_TABLE_GROW_MIN, r as DataTable, i as KAESO_DATA_TABLE_DEFAULT_VARIANTS, a as KAESO_DATA_TABLE_VARIANTS, t as col, o as fitColumns } from "../chunks/data-table-
|
|
2
|
+
export { n as DATA_TABLE_GROW_MIN, r as DataTable, i as KAESO_DATA_TABLE_DEFAULT_VARIANTS, a as KAESO_DATA_TABLE_VARIANTS, t as col, o as fitColumns } from "../chunks/data-table-z7z6DqMJ.js";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
export { t as CapabilityIcons, n as KAESO_IDENTITY_DEFAULT_VARIANTS, r as KAESO_IDENTITY_VARIANTS, i as KAESO_KEY_DISPLAY_DEFAULT_VARIANTS, a as KAESO_KEY_DISPLAY_VARIANTS, o as KeyDisplay, s as ModelLabel, c as ProviderBadge, l as ProviderCard, u as RequestTimeline, d as StatusCode, f as providerName } from "../../chunks/identity-
|
|
2
|
+
export { t as CapabilityIcons, n as KAESO_IDENTITY_DEFAULT_VARIANTS, r as KAESO_IDENTITY_VARIANTS, i as KAESO_KEY_DISPLAY_DEFAULT_VARIANTS, a as KAESO_KEY_DISPLAY_VARIANTS, o as KeyDisplay, s as ModelLabel, c as ProviderBadge, l as ProviderCard, u as RequestTimeline, d as StatusCode, f as providerName } from "../../chunks/identity-BQoh-UpW.js";
|
|
@@ -7,7 +7,7 @@ import { r as a } from "../../chunks/tooltip-Tkm-urbi.js";
|
|
|
7
7
|
import { r as o } from "../../chunks/text-DkKdTVUf.js";
|
|
8
8
|
import { a as s } from "../../chunks/meter-CASMHlxl.js";
|
|
9
9
|
import { t as c } from "../../chunks/badge-C0GC3B9X.js";
|
|
10
|
-
import { C as l, M as u, c as d, l as f, w as p } from "../../chunks/core-
|
|
10
|
+
import { C as l, M as u, c as d, l as f, w as p } from "../../chunks/core-B0bULn-t.js";
|
|
11
11
|
import { forwardRef as m } from "react";
|
|
12
12
|
import { Fragment as h, jsx as g, jsxs as _ } from "react/jsx-runtime";
|
|
13
13
|
import { Layers01Icon as v, LeftToRightListBulletIcon as y, Wallet01Icon as b } from "@hugeicons/core-free-icons";
|
package/dist/components/kaeso.js
CHANGED
|
@@ -10,7 +10,7 @@ import { r as u } from "../chunks/select-BqjmQOqx.js";
|
|
|
10
10
|
import { t as d } from "../chunks/command-list-CypqsC4T.js";
|
|
11
11
|
import { i as f, r as p } from "../chunks/picker-popover-1FHb1LQG.js";
|
|
12
12
|
import { t as m } from "../chunks/badge-C0GC3B9X.js";
|
|
13
|
-
import { a as h, c as g, d as _, f as v, i as y, l as b, n as x, o as S, r as C, s as w, t as T, u as E } from "../chunks/identity-
|
|
13
|
+
import { a as h, c as g, d as _, f as v, i as y, l as b, n as x, o as S, r as C, s as w, t as T, u as E } from "../chunks/identity-BQoh-UpW.js";
|
|
14
14
|
import { EnvironmentSnippet as D, KAESO_MOMENTS_DEFAULT_VARIANTS as O, KAESO_MOMENTS_VARIANTS as k, SecretReveal as A, sdkSnippets as j } from "./kaeso/moments.js";
|
|
15
15
|
import { KAESO_USAGE_BREAKDOWN_DEFAULT_VARIANTS as M, KAESO_USAGE_BREAKDOWN_VARIANTS as N, KAESO_USAGE_DEFAULT_VARIANTS as P, KAESO_USAGE_VARIANTS as F, LimitMeter as I, UsageBreakdown as L } from "./kaeso/usage.js";
|
|
16
16
|
import { ConversationView as R, KAESO_CONVERSATION_DEFAULT_VARIANTS as z, KAESO_CONVERSATION_VARIANTS as B } from "./kaeso/conversation.js";
|
|
@@ -172,7 +172,7 @@ var X = { layout: { rows: { classes: "flex flex-col @auth:grid @auth:grid-cols-t
|
|
|
172
172
|
process.env.NODE_ENV !== "production" && (Z.displayName = "EffectiveAccess");
|
|
173
173
|
function ue({ term: t, count: n, quiet: r, children: i }) {
|
|
174
174
|
return /* @__PURE__ */ K("div", {
|
|
175
|
-
className: "flex min-h-40 flex-col gap-2 py-8 not-first:hairline-t @auth:col-span-2 @auth:grid @auth:grid-cols-subgrid @auth:items-baseline @auth:gap-16",
|
|
175
|
+
className: "flex min-h-40 flex-col justify-center gap-2 py-8 not-first:hairline-t @auth:col-span-2 @auth:grid @auth:grid-cols-subgrid @auth:content-center @auth:items-baseline @auth:gap-16",
|
|
176
176
|
children: [/* @__PURE__ */ G("dt", {
|
|
177
177
|
className: e("shrink-0 text-small font-medium @auth:min-w-140", r ? "text-fg-secondary" : "text-fg"),
|
|
178
178
|
children: t
|
|
@@ -264,7 +264,7 @@ function me({ providers: r, disabled: i, value: a, onValueChange: o, onChoose: s
|
|
|
264
264
|
}), /* @__PURE__ */ K("span", {
|
|
265
265
|
className: "flex min-w-0 flex-1 flex-col",
|
|
266
266
|
children: [/* @__PURE__ */ G("span", {
|
|
267
|
-
className: "
|
|
267
|
+
className: "line-clamp-2 text-body font-medium text-pretty wrap-break-word text-fg",
|
|
268
268
|
children: y(t)
|
|
269
269
|
}), t.hint !== void 0 && /* @__PURE__ */ G("span", {
|
|
270
270
|
className: "line-clamp-2 text-small text-pretty text-fg-secondary",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kaeso.js","names":["BaseRadioGroup","BaseRadioGroup","BaseRadio","__icon_Tick02Icon","cn","useUiText","useLocale","Icon","Tooltip","SearchInput","RadioCircle","Select","CommandList","PickerTrigger","PickerPopover","Badge","KAESO_KEY_DISPLAY_VARIANTS","ProviderBadge","StatusCode","providerName","KAESO_KEY_DISPLAY_DEFAULT_VARIANTS","ProviderCard","KAESO_IDENTITY_DEFAULT_VARIANTS","KeyDisplay","KAESO_IDENTITY_VARIANTS","ModelLabel","CapabilityIcons","RequestTimeline","rightsCascade","groupCascade","KAESO_RIGHTS_MATRIX_VARIANTS","RightsMatrix","KAESO_RIGHTS_MATRIX_DEFAULT_VARIANTS","KAESO_ROLE_PICKER_VARIANTS","KAESO_ROLE_PICKER_DEFAULT_VARIANTS","RolePicker","ariaLabel","t","baseId","useId","builtIn","custom","hasCustom","roles","r","appearance","fullWidth","className","label","name","disabled","value","onValueChange","sections","RadioGroup","v","s","Fragment","id","si","i","off","KAESO_EFFECTIVE_ACCESS_VARIANTS","KAESO_EFFECTIVE_ACCESS_DEFAULT_VARIANTS","EffectiveAccess","empty","groups","g","sources","granted","words","Row","action","quiet","term","count","KAESO_PROVIDER_PICKER_VARIANTS","KAESO_PROVIDER_PICKER_DEFAULT_VARIANTS","ALL","SEARCH_ABOVE","ProviderTiles","locale","query","setQuery","useState","wanted","nameOf","p","byName","a","b","shown","providers","k","connected","rest","searchable","autoFocus","section","Radio","onChoose","useProviderGroups","useMemo","item","allLabel","ProviderPicker","force","props","field","useField","fc","useFieldControl","open","setOpen","listLabel","search","placeholder","list","height","description","error","control","withField","chosen","size","KAESO_GRANT_SUMMARY_VARIANTS","KAESO_GRANT_SUMMARY_DEFAULT_VARIANTS","GrantSummary","items","Tick02Icon","footer","KAESO_CLIENT_BUTTON_VARIANTS","KAESO_CLIENT_BUTTON_DEFAULT_VARIANTS","CLIENT_MARKS","ClientButton","client","ConversationView","EnvironmentSnippet","KAESO_CONVERSATION_DEFAULT_VARIANTS","KAESO_CONVERSATION_VARIANTS","KAESO_MOMENTS_DEFAULT_VARIANTS","KAESO_MOMENTS_VARIANTS","KAESO_USAGE_BREAKDOWN_DEFAULT_VARIANTS","KAESO_USAGE_BREAKDOWN_VARIANTS","KAESO_USAGE_DEFAULT_VARIANTS","KAESO_USAGE_VARIANTS","LimitMeter","SecretReveal","UsageBreakdown","sdkSnippets"],"sources":["../../src/components/kaeso/role-picker.tsx","../../src/components/kaeso/effective-access.tsx","../../src/components/kaeso/provider-picker.tsx","../../src/components/kaeso/grant-summary.tsx","../../src/components/kaeso/client-button.tsx"],"sourcesContent":["import { forwardRef, Fragment, useId } from \"react\";\nimport { RadioGroup as BaseRadioGroup } from \"@base-ui/react/radio-group\";\nimport { cn } from \"../../utils/cn.js\";\nimport { RadioCircle } from \"../radio/radio.js\";\nimport { Select } from \"../select/select.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_ROLE_PICKER_VARIANTS = {\n appearance: {\n list: {\n classes: \"flex flex-col gap-16\",\n },\n select: { classes: \"\" },\n },\n} as const;\nexport const KAESO_ROLE_PICKER_DEFAULT_VARIANTS = { appearance: \"list\" } as const;\n\nexport interface RoleOption {\n value: string;\n label: string;\n description?: string | undefined;\n custom?: boolean | undefined;\n hint?: string | undefined;\n disabled?: boolean | undefined;\n disabledReason?: string | undefined;\n \"data-force\"?: string | undefined;\n}\n\nexport interface RolePickerProps {\n roles: RoleOption[];\n value?: string | null | undefined;\n onValueChange?: ((value: string) => void) | undefined;\n appearance?: keyof typeof KAESO_ROLE_PICKER_VARIANTS.appearance | undefined;\n disabled?: boolean | undefined;\n name?: string | undefined;\n label?: string | undefined;\n \"aria-label\"?: string | undefined;\n fullWidth?: boolean | undefined;\n size?: \"sm\" | \"md\" | undefined;\n className?: string | undefined;\n}\n\nexport const RolePicker = /* @__PURE__ */ forwardRef<HTMLDivElement, RolePickerProps>(function RolePicker(\n { roles, value, onValueChange, appearance = \"list\", disabled, name, label, \"aria-label\": ariaLabel, fullWidth, size = \"md\", className },\n ref,\n) {\n const t = useUiText();\n const baseId = useId();\n const builtIn = t(\"rolePicker.builtInRoles\", \"Built-in roles\");\n const custom = t(\"rolePicker.customRoles\", \"Custom roles\");\n const hasCustom = roles.some((r) => r.custom);\n if (appearance === \"select\") {\n return (\n <div ref={ref} className={cn(\"min-w-0\", fullWidth && \"w-full\", className)}>\n <Select\n {...(label ? { label } : {})}\n {...(ariaLabel ? { \"aria-label\": ariaLabel } : {})}\n {...(name ? { name } : {})}\n {...(disabled !== undefined ? { disabled } : {})}\n {...(fullWidth ? { fullWidth } : {})}\n size={size}\n value={value ?? null}\n {...(onValueChange ? { onValueChange } : {})}\n options={[...roles.filter((r) => !r.custom), ...roles.filter((r) => r.custom)].map((r) => ({\n value: r.value,\n label: r.label,\n textValue: r.label,\n description: r.disabled && r.disabledReason ? r.disabledReason : r.description,\n ...(hasCustom ? { group: r.custom ? custom : builtIn } : {}),\n ...(r.disabled ? { disabled: true } : {}),\n }))}\n />\n </div>\n );\n }\n const sections = hasCustom\n ? [\n { caption: builtIn, items: roles.filter((r) => !r.custom) },\n { caption: custom, items: roles.filter((r) => r.custom) },\n ]\n : [{ caption: undefined, items: roles }];\n return (\n <BaseRadioGroup\n ref={ref}\n {...(value != null ? { value } : {})}\n {...(onValueChange ? { onValueChange: (v: unknown) => onValueChange(String(v)) } : {})}\n {...(disabled !== undefined ? { disabled } : {})}\n {...(name ? { name } : {})}\n aria-label={ariaLabel ?? label ?? t(\"rolePicker.role\", \"Role\")}\n className={cn(KAESO_ROLE_PICKER_VARIANTS.appearance.list.classes, className)}\n >\n {sections\n .filter((s) => s.items.length > 0)\n .map((s, si) => (\n <Fragment key={s.caption ?? \"all\"}>\n <div className=\"flex flex-col gap-8\">\n {s.caption && <span className=\"text-caption font-medium text-fg-secondary\">{s.caption}</span>}\n <div className=\"flex flex-col overflow-hidden rounded-group bg-raised shadow-xs\">\n {s.items.map((r, i) => {\n const id = `${baseId}-${si}-${i}`;\n const off = disabled || r.disabled;\n return (\n <label\n key={r.value}\n htmlFor={id}\n data-choice-row=\"\"\n {...(r[\"data-force\"] ? { \"data-force\": r[\"data-force\"] } : {})}\n className={cn(\n \"flex min-h-56 cursor-pointer items-center gap-16 px-20 py-12 transition-control not-first:hairline-t\",\n off ? \"cursor-not-allowed\" : \"hover:bg-raised-hover active:bg-raised-pressed focus-ring-card-row-within\",\n )}\n >\n <span className=\"flex min-w-0 flex-1 flex-col gap-2\">\n <span className=\"flex min-w-0 items-baseline gap-8\">\n <span id={`${id}-name`} className={cn(\"min-w-0 wrap-break-word text-body-lg font-medium\", off ? \"text-fg-disabled\" : \"text-fg\")}>\n {r.label}\n </span>\n {r.hint && <span className={cn(\"ml-auto shrink-0 text-small tabular\", off ? \"text-fg-disabled\" : \"text-fg-tertiary\")}>{r.hint}</span>}\n </span>\n {r.description && (\n <span id={`${id}-desc`} className={cn(\"text-small text-pretty\", off ? \"text-fg-disabled\" : \"text-fg-secondary\")}>\n {r.description}\n </span>\n )}\n {r.disabled && r.disabledReason && (\n <span id={`${id}-reason`} className=\"text-small text-pretty text-fg-secondary\">\n {r.disabledReason}\n </span>\n )}\n </span>\n <RadioCircle\n id={id}\n value={r.value}\n {...(r.disabled ? { disabled: true } : {})}\n {...(r[\"data-force\"] ? { \"data-force\": r[\"data-force\"] } : {})}\n aria-labelledby={`${id}-name`}\n {...(r.description || (r.disabled && r.disabledReason)\n ? { \"aria-describedby\": [r.description && `${id}-desc`, r.disabled && r.disabledReason && `${id}-reason`].filter(Boolean).join(\" \") }\n : {})}\n />\n </label>\n );\n })}\n </div>\n </div>\n </Fragment>\n ))}\n </BaseRadioGroup>\n );\n});\nif (process.env.NODE_ENV !== \"production\") RolePicker.displayName = \"RolePicker\";\n","import { forwardRef, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { Badge } from \"../badge/badge.js\";\nimport { Tooltip } from \"../tooltip/tooltip.js\";\nimport type { RightSource, RightsGroup } from \"./rights.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_EFFECTIVE_ACCESS_VARIANTS = {\n layout: {\n rows: {\n classes: \"flex flex-col @auth:grid @auth:grid-cols-term @auth:gap-x-16\",\n },\n },\n} as const;\nexport const KAESO_EFFECTIVE_ACCESS_DEFAULT_VARIANTS = { layout: \"rows\" } as const;\n\nexport interface EffectiveAccessProps {\n groups: RightsGroup[];\n sources?: RightSource[] | undefined;\n action?: ReactNode | undefined;\n \"aria-label\"?: string | undefined;\n className?: string | undefined;\n}\n\nexport const EffectiveAccess = /* @__PURE__ */ forwardRef<HTMLDivElement, EffectiveAccessProps>(function EffectiveAccess(\n { groups, sources, action, \"aria-label\": ariaLabel, className },\n ref,\n) {\n const t = useUiText();\n const empty = groups.filter((g) => !g.rights.some((r) => r.granted));\n return (\n <div\n ref={ref}\n role=\"group\"\n aria-label={ariaLabel ?? t(\"effectiveAccess.access\", \"Access\")}\n className={cn(\"@container flex min-w-0 flex-col gap-12\", className)}\n >\n {!!sources?.length && (\n <span className=\"flex flex-wrap items-center gap-4\">\n <span className=\"mr-4 text-small text-fg-secondary\">{t(\"effectiveAccess.from\", \"From\")}</span>\n {sources.map((s) =>\n s.detail ? (\n <Tooltip key={s.label} content={s.detail}>\n <Badge tabIndex={0} className=\"cursor-help underline decoration-dotted underline-offset-2 focus-ring\">\n {s.label}\n </Badge>\n </Tooltip>\n ) : (\n <Badge key={s.label}>{s.label}</Badge>\n ),\n )}\n </span>\n )}\n <dl className={KAESO_EFFECTIVE_ACCESS_VARIANTS.layout.rows.classes}>\n {groups\n .filter((g) => g.rights.some((r) => r.granted))\n .map((g) => {\n const granted = g.rights.filter((r) => r.granted);\n const words =\n granted.length === g.rights.length\n ? t(\"effectiveAccess.everyRight\", \"Every right\")\n : granted.map((r) => r.label ?? r.code).join(t(\"effectiveAccess.listSeparator\", \", \"));\n return (\n <Row\n key={g.label}\n term={g.label}\n count={t(\"effectiveAccess.grantedOfTotal\", \"{granted} of {total}\", { granted: granted.length, total: g.rights.length })}\n >\n {words}\n </Row>\n );\n })}\n {empty.length > 0 && (\n <Row term={t(\"effectiveAccess.noRights\", \"No rights\")} quiet>\n {empty.map((g) => g.label).join(t(\"effectiveAccess.listSeparator\", \", \"))}\n </Row>\n )}\n </dl>\n {action && <div className=\"flex\">{action}</div>}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") EffectiveAccess.displayName = \"EffectiveAccess\";\n\nfunction Row({ term, count, quiet, children }: { term: string; count?: string | undefined; quiet?: boolean | undefined; children: ReactNode }) {\n return (\n <div className=\"flex min-h-40 flex-col gap-2 py-8 not-first:hairline-t @auth:col-span-2 @auth:grid @auth:grid-cols-subgrid @auth:items-baseline @auth:gap-16\">\n <dt className={cn(\"shrink-0 text-small font-medium @auth:min-w-140\", quiet ? \"text-fg-secondary\" : \"text-fg\")}>{term}</dt>\n <dd className=\"flex min-w-0 flex-1 items-baseline gap-12\">\n <span className=\"min-w-0 flex-1 text-small text-pretty text-fg-secondary\">{children}</span>\n {count && <span className=\"shrink-0 text-small text-fg-secondary tabular\">{count}</span>}\n </dd>\n </div>\n );\n}\n","import { forwardRef, useMemo, useState, type ReactNode, type Ref } from \"react\";\nimport { Radio as BaseRadio } from \"@base-ui/react/radio\";\nimport { RadioGroup as BaseRadioGroup } from \"@base-ui/react/radio-group\";\nimport { cn } from \"../../utils/cn.js\";\nimport { SearchInput } from \"../input/input.js\";\nimport { useLocale, useUiText } from \"../../i18n/context.js\";\nimport { CommandList, type CommandListGroup } from \"../command-list/command-list.js\";\nimport { PickerPopover, PickerTrigger } from \"../command-list/picker-popover.js\";\nimport { useField, useFieldControl, withField, type FieldWrapProps } from \"../field/field.js\";\nimport { ProviderBadge, providerName } from \"./identity.js\";\n\nexport const KAESO_PROVIDER_PICKER_VARIANTS = {\n appearance: {\n list: { classes: \"\" },\n select: { classes: \"\" },\n grid: { classes: \"\" },\n },\n} as const;\nexport const KAESO_PROVIDER_PICKER_DEFAULT_VARIANTS = { appearance: \"list\" } as const;\n\nexport interface ProviderPickerOption {\n id: string;\n name?: string | undefined;\n connected?: boolean | undefined;\n hint?: ReactNode | undefined;\n keywords?: readonly string[] | undefined;\n disabled?: boolean | undefined;\n \"data-force\"?: string | undefined;\n}\n\nexport interface ProviderPickerProps extends FieldWrapProps {\n providers: ProviderPickerOption[];\n value?: string | null | undefined;\n onValueChange?: ((id: string | null) => void) | undefined;\n onChoose?: ((id: string) => void) | undefined;\n appearance?: keyof typeof KAESO_PROVIDER_PICKER_VARIANTS.appearance | undefined;\n allLabel?: string | undefined;\n placeholder?: string | undefined;\n size?: \"sm\" | \"md\" | undefined;\n disabled?: boolean | undefined;\n autoFocus?: boolean | undefined;\n \"aria-label\"?: string | undefined;\n className?: string | undefined;\n \"data-force\"?: string | undefined;\n}\n\nconst ALL = \"\";\nconst SEARCH_ABOVE = 9;\n\nfunction ProviderTiles({\n providers,\n disabled,\n value,\n onValueChange,\n onChoose,\n autoFocus,\n label,\n className,\n}: {\n providers: ProviderPickerOption[];\n disabled: boolean | undefined;\n value: string | null | undefined;\n onValueChange: ((id: string | null) => void) | undefined;\n onChoose: ((id: string) => void) | undefined;\n autoFocus: boolean | undefined;\n label: string;\n className: string | undefined;\n}) {\n const t = useUiText();\n const locale = useLocale();\n const [query, setQuery] = useState(\"\");\n const wanted = query.trim().toLowerCase();\n const nameOf = (p: ProviderPickerOption) => providerName(p.id, p.name);\n const byName = (a: ProviderPickerOption, b: ProviderPickerOption) => nameOf(a).localeCompare(nameOf(b), locale, { sensitivity: \"base\" });\n const shown = providers.filter((p) => !wanted || [p.id, nameOf(p), ...(p.keywords ?? [])].some((k) => k.toLowerCase().includes(wanted)));\n const connected = shown.filter((p) => p.connected).sort(byName);\n const rest = shown.filter((p) => !p.connected).sort(byName);\n const sections =\n connected.length && rest.length\n ? [\n { id: \"connected\", label: t(\"providerPicker.connected\", \"Connected\"), items: connected },\n { id: \"other\", label: t(\"providerPicker.other\", \"Other providers\"), items: rest },\n ]\n : [{ id: \"providers\", label: undefined, items: [...connected, ...rest] }];\n const searchable = providers.length > SEARCH_ABOVE;\n return (\n <div className={cn(\"flex min-w-0 flex-col gap-16\", className)}>\n {searchable && (\n <SearchInput\n aria-label={t(\"providerPicker.search\", \"Search providers\")}\n placeholder={t(\"providerPicker.search\", \"Search providers\")}\n {...(disabled ? { disabled: true } : {})}\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n {...(autoFocus ? { autoFocus: true } : {})}\n />\n )}\n {shown.length === 0 ? (\n <p className=\"py-24 text-center text-body text-fg-secondary\">{t(\"providerPicker.noMatch\", \"No providers match\")}</p>\n ) : (\n <BaseRadioGroup\n aria-label={label}\n value={value ?? null}\n {...(disabled ? { disabled: true } : {})}\n onValueChange={(v: unknown) => onValueChange?.(v ? String(v) : null)}\n className=\"flex flex-col gap-20\"\n >\n {sections.map((section, si) => (\n <div key={section.id} {...(section.label ? { role: \"group\", \"aria-label\": section.label } : {})} className=\"flex flex-col gap-8\">\n {section.label && (\n <div aria-hidden className=\"flex items-center justify-between text-caption font-medium text-fg-secondary\">\n <span>{section.label}</span>\n <span className=\"font-regular text-fg-tertiary tabular\">{section.items.length}</span>\n </div>\n )}\n <div className=\"grid grid-cols-2 gap-8 sm:grid-cols-3\">\n {section.items.map((p, i) => (\n <BaseRadio.Root\n key={p.id}\n value={p.id}\n {...(p.disabled ? { disabled: true } : {})}\n {...(p[\"data-force\"] ? { \"data-force\": p[\"data-force\"] } : {})}\n {...(autoFocus && !searchable && si === 0 && i === 0 && !value ? { autoFocus: true } : {})}\n onClick={() => !disabled && !p.disabled && onChoose?.(p.id)}\n className={cn(\n \"group/tile flex min-h-64 min-w-0 cursor-pointer items-center gap-10 rounded-group bg-raised px-10 py-12 sm:gap-12 sm:px-12 text-left shadow-control transition-control focus-ring forced-checked\",\n \"hover:not-data-checked:bg-raised-hover hover:not-data-checked:shadow-control-hover active:bg-raised-pressed\",\n \"data-checked:bg-item-hover data-checked:ring-step data-disabled:cursor-not-allowed data-disabled:opacity-40\",\n )}\n >\n <span aria-hidden className=\"flex\">\n <ProviderBadge provider={p.id} name={p.name} size=\"lg\" />\n </span>\n <span className=\"flex min-w-0 flex-1 flex-col\">\n <span className=\"truncate text-body font-medium text-fg\">{nameOf(p)}</span>\n {p.hint !== undefined && <span className=\"line-clamp-2 text-small text-pretty text-fg-secondary\">{p.hint}</span>}\n </span>\n </BaseRadio.Root>\n ))}\n </div>\n </div>\n ))}\n </BaseRadioGroup>\n )}\n </div>\n );\n}\n\nexport function useProviderGroups(providers: ProviderPickerOption[], allLabel?: string | undefined): CommandListGroup[] {\n const t = useUiText();\n const locale = useLocale();\n return useMemo(() => {\n const nameOf = (p: ProviderPickerOption) => providerName(p.id, p.name);\n const byName = (a: ProviderPickerOption, b: ProviderPickerOption) => nameOf(a).localeCompare(nameOf(b), locale, { sensitivity: \"base\" });\n const item = (p: ProviderPickerOption) => ({\n value: p.id,\n label: nameOf(p),\n keywords: [p.id, ...(p.keywords ?? [])],\n leading: (\n <span aria-hidden className=\"flex\">\n <ProviderBadge provider={p.id} name={p.name} />\n </span>\n ),\n ...(p.hint !== undefined ? { meta: p.hint } : {}),\n ...(p.disabled ? { disabled: true } : {}),\n });\n const connected = providers.filter((p) => p.connected).sort(byName);\n const rest = providers.filter((p) => !p.connected).sort(byName);\n const groups: CommandListGroup[] = [];\n if (allLabel) groups.push({ id: \"all\", items: [{ value: ALL, label: allLabel }] });\n if (connected.length && rest.length) {\n groups.push({ id: \"connected\", label: t(\"providerPicker.connected\", \"Connected\"), count: connected.length, items: connected.map(item) });\n groups.push({ id: \"other\", label: t(\"providerPicker.other\", \"Other providers\"), count: rest.length, items: rest.map(item) });\n } else groups.push({ id: \"providers\", items: [...connected, ...rest].map(item) });\n return groups;\n }, [providers, allLabel, t, locale]);\n}\n\nexport const ProviderPicker = /* @__PURE__ */ forwardRef<HTMLElement, ProviderPickerProps>(function ProviderPicker(props, ref) {\n const {\n providers,\n value,\n onValueChange,\n onChoose,\n appearance = \"list\",\n allLabel,\n placeholder,\n size = \"md\",\n disabled,\n autoFocus,\n \"aria-label\": ariaLabel,\n className,\n \"data-force\": force,\n label,\n description,\n error,\n optional,\n required,\n layout,\n } = props;\n const t = useUiText();\n const field = useField();\n const fc = useFieldControl(props);\n const [open, setOpen] = useState(false);\n const offered = useMemo(\n () => (disabled && appearance === \"list\" ? providers.map((p) => ({ ...p, disabled: true })) : providers),\n [providers, disabled, appearance],\n );\n const groups = useProviderGroups(offered, appearance === \"select\" ? allLabel : undefined);\n const listLabel = ariaLabel ?? (typeof label === \"string\" ? label : t(\"providerPicker.providers\", \"Providers\"));\n const search = placeholder ?? t(\"providerPicker.search\", \"Search providers\");\n const empty = t(\"providerPicker.noMatch\", \"No providers match\");\n const list = (height?: \"inline\") => (\n <CommandList\n groups={groups}\n aria-label={listLabel}\n value={value ?? (allLabel ? ALL : null)}\n onSelect={(id) => {\n onValueChange?.(id === ALL ? null : id);\n setOpen(false);\n }}\n placeholder={search}\n emptyText={empty}\n {...(height ? { height } : {})}\n {...(autoFocus || appearance === \"select\" ? { autoFocus: true } : {})}\n {...(height && force ? { \"data-force\": force } : {})}\n {...(height && className && !(label || description || error) ? { className } : {})}\n {...(height ? { ref: ref as Ref<HTMLInputElement> } : {})}\n />\n );\n if (appearance === \"grid\") {\n const control = (\n <ProviderTiles\n providers={providers}\n disabled={disabled}\n value={value}\n onValueChange={onValueChange}\n onChoose={onChoose}\n autoFocus={autoFocus}\n label={listLabel}\n className={!(label || description || error) ? className : undefined}\n />\n );\n if (field) return control;\n return withField({ label, description, error, optional, required, layout, id: fc.wrapId, disabled, className }, control);\n }\n if (appearance === \"list\") {\n const control = list(\"inline\");\n if (field) return control;\n return withField({ label, description, error, optional, required, layout, id: fc.wrapId, disabled, className }, control);\n }\n const chosen = providers.find((p) => p.id === value);\n const control = (\n <PickerPopover\n title={listLabel}\n width=\"sm\"\n open={open}\n onOpenChange={setOpen}\n trigger={\n <PickerTrigger\n ref={ref as Ref<HTMLButtonElement>}\n size={size === \"sm\" ? \"sm\" : \"md\"}\n {...fc.controlProps}\n {...(ariaLabel ? { \"aria-label\": ariaLabel } : {})}\n {...(disabled ? { disabled } : {})}\n {...(force ? { \"data-force\": force } : {})}\n placeholder={placeholder ?? t(\"providerPicker.choose\", \"Choose a provider\")}\n {...(!(label || description || error) && className ? { className } : {})}\n >\n {chosen ? (\n <span className=\"flex min-w-0 items-center gap-8\">\n <span aria-hidden className=\"flex\">\n <ProviderBadge provider={chosen.id} name={chosen.name} />\n </span>\n <span className=\"truncate\">{providerName(chosen.id, chosen.name)}</span>\n </span>\n ) : (\n allLabel\n )}\n </PickerTrigger>\n }\n >\n {list()}\n </PickerPopover>\n );\n if (field) return control;\n return withField({ label, description, error, optional, required, layout, id: fc.wrapId, disabled, className }, control);\n});\nif (process.env.NODE_ENV !== \"production\") ProviderPicker.displayName = \"ProviderPicker\";\n","import { forwardRef, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { Tick02Icon as __icon_Tick02Icon } from \"@hugeicons/core-free-icons\";\nimport { Icon } from \"../icon/icon.js\";\n\nexport const KAESO_GRANT_SUMMARY_VARIANTS = {} as const;\nexport const KAESO_GRANT_SUMMARY_DEFAULT_VARIANTS = {} as const;\n\nexport interface GrantSummaryProps {\n items: readonly ReactNode[];\n footer?: ReactNode | undefined;\n action?: ReactNode | undefined;\n \"aria-label\": string;\n className?: string | undefined;\n}\n\n/** What an agent or a key may do, one short line per item after a check mark, on a group surface, with an optional note and action below. */\nexport const GrantSummary = /* @__PURE__ */ forwardRef<HTMLDivElement, GrantSummaryProps>(function GrantSummary(\n { items, footer, action, \"aria-label\": ariaLabel, className },\n ref,\n) {\n return (\n <div ref={ref} className={cn(\"flex flex-col gap-16 rounded-group bg-raised p-20 shadow-xs\", className)}>\n <ul aria-label={ariaLabel} className=\"flex flex-col gap-10\">\n {items.map((item, i) => (\n <li key={i} className=\"flex items-start gap-10 text-body text-fg\">\n <Icon icon={__icon_Tick02Icon} size=\"sm\" className=\"mt-2 text-success-text\" />\n <span className=\"min-w-0 text-pretty\">{item}</span>\n </li>\n ))}\n </ul>\n {(footer || action) && (\n <div className=\"flex items-center justify-between gap-12 pt-12 hairline-t\">\n {footer && <p className=\"min-w-0 text-small text-fg-secondary text-pretty\">{footer}</p>}\n {action && <div className=\"ml-auto shrink-0\">{action}</div>}\n </div>\n )}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") GrantSummary.displayName = \"GrantSummary\";\n","import { forwardRef } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { Tooltip } from \"../tooltip/tooltip.js\";\n\nexport const KAESO_CLIENT_BUTTON_VARIANTS = {} as const;\nexport const KAESO_CLIENT_BUTTON_DEFAULT_VARIANTS = {} as const;\n\n/** The marks of the agent clients Kaeso connects to, on a 24px grid, drawn in the text colour. */\nexport const CLIENT_MARKS = {\n claude:\n \"m4.7144 15.9555 4.7174-2.6471.079-.2307-.079-.1275h-.2307l-.7893-.0486-2.6956-.0729-2.3375-.0971-2.2646-.1214-.5707-.1215-.5343-.7042.0546-.3522.4797-.3218.686.0608 1.5179.1032 2.2767.1578 1.6514.0972 2.4468.255h.3886l.0546-.1579-.1336-.0971-.1032-.0972L6.973 9.8356l-2.55-1.6879-1.3356-.9714-.7225-.4918-.3643-.4614-.1578-1.0078.6557-.7225.8803.0607.2246.0607.8925.686 1.9064 1.4754 2.4893 1.8336.3643.3035.1457-.1032.0182-.0728-.164-.2733-1.3539-2.4467-1.445-2.4893-.6435-1.032-.17-.6194c-.0607-.255-.1032-.4674-.1032-.7285L6.287.1335 6.6997 0l.9957.1336.419.3642.6192 1.4147 1.0018 2.2282 1.5543 3.0296.4553.8985.2429.8318.091.255h.1579v-.1457l.1275-1.706.2368-2.0947.2307-2.6957.0789-.7589.3764-.9107.7468-.4918.5828.2793.4797.686-.0668.4433-.2853 1.8517-.5586 2.9021-.3643 1.9429h.2125l.2429-.2429.9835-1.3053 1.6514-2.0643.7286-.8196.85-.9046.5464-.4311h1.0321l.759 1.1293-.34 1.1657-1.0625 1.3478-.8804 1.1414-1.2628 1.7-.7893 1.36.0729.1093.1882-.0183 2.8535-.607 1.5421-.2794 1.8396-.3157.8318.3886.091.3946-.3278.8075-1.967.4857-2.3072.4614-3.4364.8136-.0425.0304.0486.0607 1.5482.1457.6618.0364h1.621l3.0175.2247.7892.522.4736.6376-.079.4857-1.2142.6193-1.6393-.3886-3.825-.9107-1.3113-.3279h-.1822v.1093l1.0929 1.0686 2.0035 1.8092 2.5075 2.3314.1275.5768-.3218.4554-.34-.0486-2.2039-1.6575-.85-.7468-1.9246-1.621h-.1275v.17l.4432.6496 2.3436 3.5214.1214 1.0807-.17.3521-.6071.2125-.6679-.1214-1.3721-1.9246L14.38 17.959l-1.1414-1.9428-.1397.079-.674 7.2552-.3156.3703-.7286.2793-.6071-.4614-.3218-.7468.3218-1.4753.3886-1.9246.3157-1.53.2853-1.9004.17-.6314-.0121-.0425-.1397.0182-1.4328 1.9672-2.1796 2.9446-1.7243 1.8456-.4128.164-.7164-.3704.0667-.6618.4008-.5889 2.386-3.0357 1.4389-1.882.929-1.0868-.0062-.1579h-.0546l-6.3385 4.1164-1.1293.1457-.4857-.4554.0608-.7467.2307-.2429 1.9064-1.3114Z\",\n cursor:\n \"M11.503.131 1.891 5.678a.84.84 0 0 0-.42.726v11.188c0 .3.162.575.42.724l9.609 5.55a1 1 0 0 0 .998 0l9.61-5.55a.84.84 0 0 0 .42-.724V6.404a.84.84 0 0 0-.42-.726L12.497.131a1.01 1.01 0 0 0-.996 0M2.657 6.338h18.55c.263 0 .43.287.297.515L12.23 22.918c-.062.107-.229.064-.229-.06V12.335a.59.59 0 0 0-.295-.51l-9.11-5.257c-.109-.063-.064-.23.061-.23\",\n \"github-copilot\":\n \"M23.922 16.997C23.061 18.492 18.063 22.02 12 22.02 5.937 22.02.939 18.492.078 16.997A.641.641 0 0 1 0 16.741v-2.869a.883.883 0 0 1 .053-.22c.372-.935 1.347-2.292 2.605-2.656.167-.429.414-1.055.644-1.517a10.098 10.098 0 0 1-.052-1.086c0-1.331.282-2.499 1.132-3.368.397-.406.89-.717 1.474-.952C7.255 2.937 9.248 1.98 11.978 1.98c2.731 0 4.767.957 6.166 2.093.584.235 1.077.546 1.474.952.85.869 1.132 2.037 1.132 3.368 0 .368-.014.733-.052 1.086.23.462.477 1.088.644 1.517 1.258.364 2.233 1.721 2.605 2.656a.841.841 0 0 1 .053.22v2.869a.641.641 0 0 1-.078.256Zm-11.75-5.992h-.344a4.359 4.359 0 0 1-.355.508c-.77.947-1.918 1.492-3.508 1.492-1.725 0-2.989-.359-3.782-1.259a2.137 2.137 0 0 1-.085-.104L4 11.746v6.585c1.435.779 4.514 2.179 8 2.179 3.486 0 6.565-1.4 8-2.179v-6.585l-.098-.104s-.033.045-.085.104c-.793.9-2.057 1.259-3.782 1.259-1.59 0-2.738-.545-3.508-1.492a4.359 4.359 0 0 1-.355-.508Zm2.328 3.25c.549 0 1 .451 1 1v2c0 .549-.451 1-1 1-.549 0-1-.451-1-1v-2c0-.549.451-1 1-1Zm-5 0c.549 0 1 .451 1 1v2c0 .549-.451 1-1 1-.549 0-1-.451-1-1v-2c0-.549.451-1 1-1Zm3.313-6.185c.136 1.057.403 1.913.878 2.497.442.544 1.134.938 2.344.938 1.573 0 2.292-.337 2.657-.751.384-.435.558-1.15.558-2.361 0-1.14-.243-1.847-.705-2.319-.477-.488-1.319-.862-2.824-1.025-1.487-.161-2.192.138-2.533.529-.269.307-.437.808-.438 1.578v.021c0 .265.021.562.063.893Zm-1.626 0c.042-.331.063-.628.063-.894v-.02c-.001-.77-.169-1.271-.438-1.578-.341-.391-1.046-.69-2.533-.529-1.505.163-2.347.537-2.824 1.025-.462.472-.705 1.179-.705 2.319 0 1.211.175 1.926.558 2.361.365.414 1.084.751 2.657.751 1.21 0 1.902-.394 2.344-.938.475-.584.742-1.44.878-2.497Z\",\n} as const;\n\nexport type ClientMark = keyof typeof CLIENT_MARKS;\n\nexport interface ClientButtonProps {\n client: ClientMark;\n \"aria-label\": string;\n onClick?: (() => void) | undefined;\n className?: string | undefined;\n \"data-force\"?: string | undefined;\n}\n\n/** An agent client's mark in a raised circle, as a button that opens how to connect it. Its tooltip is its label. */\nexport const ClientButton = /* @__PURE__ */ forwardRef<HTMLButtonElement, ClientButtonProps>(function ClientButton(\n { client, \"aria-label\": label, onClick, className, \"data-force\": force },\n ref,\n) {\n return (\n <Tooltip content={label}>\n <button\n ref={ref}\n type=\"button\"\n aria-label={label}\n data-client={client}\n {...(force ? { \"data-force\": force } : {})}\n onClick={onClick}\n className={cn(\n \"relative inline-flex size-32 shrink-0 items-center justify-center rounded-pill text-fg material-secondary transition-control focus-ring tap-target\",\n className,\n )}\n >\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" fillRule=\"evenodd\" aria-hidden focusable=\"false\" className=\"size-16\">\n <path d={CLIENT_MARKS[client]} />\n </svg>\n </button>\n </Tooltip>\n );\n});\nif (process.env.NODE_ENV !== \"production\") ClientButton.displayName = \"ClientButton\";\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"kaeso.js","names":["BaseRadioGroup","BaseRadioGroup","BaseRadio","__icon_Tick02Icon","cn","useUiText","useLocale","Icon","Tooltip","SearchInput","RadioCircle","Select","CommandList","PickerTrigger","PickerPopover","Badge","KAESO_KEY_DISPLAY_VARIANTS","ProviderBadge","StatusCode","providerName","KAESO_KEY_DISPLAY_DEFAULT_VARIANTS","ProviderCard","KAESO_IDENTITY_DEFAULT_VARIANTS","KeyDisplay","KAESO_IDENTITY_VARIANTS","ModelLabel","CapabilityIcons","RequestTimeline","rightsCascade","groupCascade","KAESO_RIGHTS_MATRIX_VARIANTS","RightsMatrix","KAESO_RIGHTS_MATRIX_DEFAULT_VARIANTS","KAESO_ROLE_PICKER_VARIANTS","KAESO_ROLE_PICKER_DEFAULT_VARIANTS","RolePicker","ariaLabel","t","baseId","useId","builtIn","custom","hasCustom","roles","r","appearance","fullWidth","className","label","name","disabled","value","onValueChange","sections","RadioGroup","v","s","Fragment","id","si","i","off","KAESO_EFFECTIVE_ACCESS_VARIANTS","KAESO_EFFECTIVE_ACCESS_DEFAULT_VARIANTS","EffectiveAccess","empty","groups","g","sources","granted","words","Row","action","quiet","term","count","KAESO_PROVIDER_PICKER_VARIANTS","KAESO_PROVIDER_PICKER_DEFAULT_VARIANTS","ALL","SEARCH_ABOVE","ProviderTiles","locale","query","setQuery","useState","wanted","nameOf","p","byName","a","b","shown","providers","k","connected","rest","searchable","autoFocus","section","Radio","onChoose","useProviderGroups","useMemo","item","allLabel","ProviderPicker","force","props","field","useField","fc","useFieldControl","open","setOpen","listLabel","search","placeholder","list","height","description","error","control","withField","chosen","size","KAESO_GRANT_SUMMARY_VARIANTS","KAESO_GRANT_SUMMARY_DEFAULT_VARIANTS","GrantSummary","items","Tick02Icon","footer","KAESO_CLIENT_BUTTON_VARIANTS","KAESO_CLIENT_BUTTON_DEFAULT_VARIANTS","CLIENT_MARKS","ClientButton","client","ConversationView","EnvironmentSnippet","KAESO_CONVERSATION_DEFAULT_VARIANTS","KAESO_CONVERSATION_VARIANTS","KAESO_MOMENTS_DEFAULT_VARIANTS","KAESO_MOMENTS_VARIANTS","KAESO_USAGE_BREAKDOWN_DEFAULT_VARIANTS","KAESO_USAGE_BREAKDOWN_VARIANTS","KAESO_USAGE_DEFAULT_VARIANTS","KAESO_USAGE_VARIANTS","LimitMeter","SecretReveal","UsageBreakdown","sdkSnippets"],"sources":["../../src/components/kaeso/role-picker.tsx","../../src/components/kaeso/effective-access.tsx","../../src/components/kaeso/provider-picker.tsx","../../src/components/kaeso/grant-summary.tsx","../../src/components/kaeso/client-button.tsx"],"sourcesContent":["import { forwardRef, Fragment, useId } from \"react\";\nimport { RadioGroup as BaseRadioGroup } from \"@base-ui/react/radio-group\";\nimport { cn } from \"../../utils/cn.js\";\nimport { RadioCircle } from \"../radio/radio.js\";\nimport { Select } from \"../select/select.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_ROLE_PICKER_VARIANTS = {\n appearance: {\n list: {\n classes: \"flex flex-col gap-16\",\n },\n select: { classes: \"\" },\n },\n} as const;\nexport const KAESO_ROLE_PICKER_DEFAULT_VARIANTS = { appearance: \"list\" } as const;\n\nexport interface RoleOption {\n value: string;\n label: string;\n description?: string | undefined;\n custom?: boolean | undefined;\n hint?: string | undefined;\n disabled?: boolean | undefined;\n disabledReason?: string | undefined;\n \"data-force\"?: string | undefined;\n}\n\nexport interface RolePickerProps {\n roles: RoleOption[];\n value?: string | null | undefined;\n onValueChange?: ((value: string) => void) | undefined;\n appearance?: keyof typeof KAESO_ROLE_PICKER_VARIANTS.appearance | undefined;\n disabled?: boolean | undefined;\n name?: string | undefined;\n label?: string | undefined;\n \"aria-label\"?: string | undefined;\n fullWidth?: boolean | undefined;\n size?: \"sm\" | \"md\" | undefined;\n className?: string | undefined;\n}\n\nexport const RolePicker = /* @__PURE__ */ forwardRef<HTMLDivElement, RolePickerProps>(function RolePicker(\n { roles, value, onValueChange, appearance = \"list\", disabled, name, label, \"aria-label\": ariaLabel, fullWidth, size = \"md\", className },\n ref,\n) {\n const t = useUiText();\n const baseId = useId();\n const builtIn = t(\"rolePicker.builtInRoles\", \"Built-in roles\");\n const custom = t(\"rolePicker.customRoles\", \"Custom roles\");\n const hasCustom = roles.some((r) => r.custom);\n if (appearance === \"select\") {\n return (\n <div ref={ref} className={cn(\"min-w-0\", fullWidth && \"w-full\", className)}>\n <Select\n {...(label ? { label } : {})}\n {...(ariaLabel ? { \"aria-label\": ariaLabel } : {})}\n {...(name ? { name } : {})}\n {...(disabled !== undefined ? { disabled } : {})}\n {...(fullWidth ? { fullWidth } : {})}\n size={size}\n value={value ?? null}\n {...(onValueChange ? { onValueChange } : {})}\n options={[...roles.filter((r) => !r.custom), ...roles.filter((r) => r.custom)].map((r) => ({\n value: r.value,\n label: r.label,\n textValue: r.label,\n description: r.disabled && r.disabledReason ? r.disabledReason : r.description,\n ...(hasCustom ? { group: r.custom ? custom : builtIn } : {}),\n ...(r.disabled ? { disabled: true } : {}),\n }))}\n />\n </div>\n );\n }\n const sections = hasCustom\n ? [\n { caption: builtIn, items: roles.filter((r) => !r.custom) },\n { caption: custom, items: roles.filter((r) => r.custom) },\n ]\n : [{ caption: undefined, items: roles }];\n return (\n <BaseRadioGroup\n ref={ref}\n {...(value != null ? { value } : {})}\n {...(onValueChange ? { onValueChange: (v: unknown) => onValueChange(String(v)) } : {})}\n {...(disabled !== undefined ? { disabled } : {})}\n {...(name ? { name } : {})}\n aria-label={ariaLabel ?? label ?? t(\"rolePicker.role\", \"Role\")}\n className={cn(KAESO_ROLE_PICKER_VARIANTS.appearance.list.classes, className)}\n >\n {sections\n .filter((s) => s.items.length > 0)\n .map((s, si) => (\n <Fragment key={s.caption ?? \"all\"}>\n <div className=\"flex flex-col gap-8\">\n {s.caption && <span className=\"text-caption font-medium text-fg-secondary\">{s.caption}</span>}\n <div className=\"flex flex-col overflow-hidden rounded-group bg-raised shadow-xs\">\n {s.items.map((r, i) => {\n const id = `${baseId}-${si}-${i}`;\n const off = disabled || r.disabled;\n return (\n <label\n key={r.value}\n htmlFor={id}\n data-choice-row=\"\"\n {...(r[\"data-force\"] ? { \"data-force\": r[\"data-force\"] } : {})}\n className={cn(\n \"flex min-h-56 cursor-pointer items-center gap-16 px-20 py-12 transition-control not-first:hairline-t\",\n off ? \"cursor-not-allowed\" : \"hover:bg-raised-hover active:bg-raised-pressed focus-ring-card-row-within\",\n )}\n >\n <span className=\"flex min-w-0 flex-1 flex-col gap-2\">\n <span className=\"flex min-w-0 items-baseline gap-8\">\n <span id={`${id}-name`} className={cn(\"min-w-0 wrap-break-word text-body-lg font-medium\", off ? \"text-fg-disabled\" : \"text-fg\")}>\n {r.label}\n </span>\n {r.hint && <span className={cn(\"ml-auto shrink-0 text-small tabular\", off ? \"text-fg-disabled\" : \"text-fg-tertiary\")}>{r.hint}</span>}\n </span>\n {r.description && (\n <span id={`${id}-desc`} className={cn(\"text-small text-pretty\", off ? \"text-fg-disabled\" : \"text-fg-secondary\")}>\n {r.description}\n </span>\n )}\n {r.disabled && r.disabledReason && (\n <span id={`${id}-reason`} className=\"text-small text-pretty text-fg-secondary\">\n {r.disabledReason}\n </span>\n )}\n </span>\n <RadioCircle\n id={id}\n value={r.value}\n {...(r.disabled ? { disabled: true } : {})}\n {...(r[\"data-force\"] ? { \"data-force\": r[\"data-force\"] } : {})}\n aria-labelledby={`${id}-name`}\n {...(r.description || (r.disabled && r.disabledReason)\n ? { \"aria-describedby\": [r.description && `${id}-desc`, r.disabled && r.disabledReason && `${id}-reason`].filter(Boolean).join(\" \") }\n : {})}\n />\n </label>\n );\n })}\n </div>\n </div>\n </Fragment>\n ))}\n </BaseRadioGroup>\n );\n});\nif (process.env.NODE_ENV !== \"production\") RolePicker.displayName = \"RolePicker\";\n","import { forwardRef, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { Badge } from \"../badge/badge.js\";\nimport { Tooltip } from \"../tooltip/tooltip.js\";\nimport type { RightSource, RightsGroup } from \"./rights.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_EFFECTIVE_ACCESS_VARIANTS = {\n layout: {\n rows: {\n classes: \"flex flex-col @auth:grid @auth:grid-cols-term @auth:gap-x-16\",\n },\n },\n} as const;\nexport const KAESO_EFFECTIVE_ACCESS_DEFAULT_VARIANTS = { layout: \"rows\" } as const;\n\nexport interface EffectiveAccessProps {\n groups: RightsGroup[];\n sources?: RightSource[] | undefined;\n action?: ReactNode | undefined;\n \"aria-label\"?: string | undefined;\n className?: string | undefined;\n}\n\nexport const EffectiveAccess = /* @__PURE__ */ forwardRef<HTMLDivElement, EffectiveAccessProps>(function EffectiveAccess(\n { groups, sources, action, \"aria-label\": ariaLabel, className },\n ref,\n) {\n const t = useUiText();\n const empty = groups.filter((g) => !g.rights.some((r) => r.granted));\n return (\n <div\n ref={ref}\n role=\"group\"\n aria-label={ariaLabel ?? t(\"effectiveAccess.access\", \"Access\")}\n className={cn(\"@container flex min-w-0 flex-col gap-12\", className)}\n >\n {!!sources?.length && (\n <span className=\"flex flex-wrap items-center gap-4\">\n <span className=\"mr-4 text-small text-fg-secondary\">{t(\"effectiveAccess.from\", \"From\")}</span>\n {sources.map((s) =>\n s.detail ? (\n <Tooltip key={s.label} content={s.detail}>\n <Badge tabIndex={0} className=\"cursor-help underline decoration-dotted underline-offset-2 focus-ring\">\n {s.label}\n </Badge>\n </Tooltip>\n ) : (\n <Badge key={s.label}>{s.label}</Badge>\n ),\n )}\n </span>\n )}\n <dl className={KAESO_EFFECTIVE_ACCESS_VARIANTS.layout.rows.classes}>\n {groups\n .filter((g) => g.rights.some((r) => r.granted))\n .map((g) => {\n const granted = g.rights.filter((r) => r.granted);\n const words =\n granted.length === g.rights.length\n ? t(\"effectiveAccess.everyRight\", \"Every right\")\n : granted.map((r) => r.label ?? r.code).join(t(\"effectiveAccess.listSeparator\", \", \"));\n return (\n <Row\n key={g.label}\n term={g.label}\n count={t(\"effectiveAccess.grantedOfTotal\", \"{granted} of {total}\", { granted: granted.length, total: g.rights.length })}\n >\n {words}\n </Row>\n );\n })}\n {empty.length > 0 && (\n <Row term={t(\"effectiveAccess.noRights\", \"No rights\")} quiet>\n {empty.map((g) => g.label).join(t(\"effectiveAccess.listSeparator\", \", \"))}\n </Row>\n )}\n </dl>\n {action && <div className=\"flex\">{action}</div>}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") EffectiveAccess.displayName = \"EffectiveAccess\";\n\nfunction Row({ term, count, quiet, children }: { term: string; count?: string | undefined; quiet?: boolean | undefined; children: ReactNode }) {\n return (\n <div className=\"flex min-h-40 flex-col justify-center gap-2 py-8 not-first:hairline-t @auth:col-span-2 @auth:grid @auth:grid-cols-subgrid @auth:content-center @auth:items-baseline @auth:gap-16\">\n <dt className={cn(\"shrink-0 text-small font-medium @auth:min-w-140\", quiet ? \"text-fg-secondary\" : \"text-fg\")}>{term}</dt>\n <dd className=\"flex min-w-0 flex-1 items-baseline gap-12\">\n <span className=\"min-w-0 flex-1 text-small text-pretty text-fg-secondary\">{children}</span>\n {count && <span className=\"shrink-0 text-small text-fg-secondary tabular\">{count}</span>}\n </dd>\n </div>\n );\n}\n","import { forwardRef, useMemo, useState, type ReactNode, type Ref } from \"react\";\nimport { Radio as BaseRadio } from \"@base-ui/react/radio\";\nimport { RadioGroup as BaseRadioGroup } from \"@base-ui/react/radio-group\";\nimport { cn } from \"../../utils/cn.js\";\nimport { SearchInput } from \"../input/input.js\";\nimport { useLocale, useUiText } from \"../../i18n/context.js\";\nimport { CommandList, type CommandListGroup } from \"../command-list/command-list.js\";\nimport { PickerPopover, PickerTrigger } from \"../command-list/picker-popover.js\";\nimport { useField, useFieldControl, withField, type FieldWrapProps } from \"../field/field.js\";\nimport { ProviderBadge, providerName } from \"./identity.js\";\n\nexport const KAESO_PROVIDER_PICKER_VARIANTS = {\n appearance: {\n list: { classes: \"\" },\n select: { classes: \"\" },\n grid: { classes: \"\" },\n },\n} as const;\nexport const KAESO_PROVIDER_PICKER_DEFAULT_VARIANTS = { appearance: \"list\" } as const;\n\nexport interface ProviderPickerOption {\n id: string;\n name?: string | undefined;\n connected?: boolean | undefined;\n hint?: ReactNode | undefined;\n keywords?: readonly string[] | undefined;\n disabled?: boolean | undefined;\n \"data-force\"?: string | undefined;\n}\n\nexport interface ProviderPickerProps extends FieldWrapProps {\n providers: ProviderPickerOption[];\n value?: string | null | undefined;\n onValueChange?: ((id: string | null) => void) | undefined;\n onChoose?: ((id: string) => void) | undefined;\n appearance?: keyof typeof KAESO_PROVIDER_PICKER_VARIANTS.appearance | undefined;\n allLabel?: string | undefined;\n placeholder?: string | undefined;\n size?: \"sm\" | \"md\" | undefined;\n disabled?: boolean | undefined;\n autoFocus?: boolean | undefined;\n \"aria-label\"?: string | undefined;\n className?: string | undefined;\n \"data-force\"?: string | undefined;\n}\n\nconst ALL = \"\";\nconst SEARCH_ABOVE = 9;\n\nfunction ProviderTiles({\n providers,\n disabled,\n value,\n onValueChange,\n onChoose,\n autoFocus,\n label,\n className,\n}: {\n providers: ProviderPickerOption[];\n disabled: boolean | undefined;\n value: string | null | undefined;\n onValueChange: ((id: string | null) => void) | undefined;\n onChoose: ((id: string) => void) | undefined;\n autoFocus: boolean | undefined;\n label: string;\n className: string | undefined;\n}) {\n const t = useUiText();\n const locale = useLocale();\n const [query, setQuery] = useState(\"\");\n const wanted = query.trim().toLowerCase();\n const nameOf = (p: ProviderPickerOption) => providerName(p.id, p.name);\n const byName = (a: ProviderPickerOption, b: ProviderPickerOption) => nameOf(a).localeCompare(nameOf(b), locale, { sensitivity: \"base\" });\n const shown = providers.filter((p) => !wanted || [p.id, nameOf(p), ...(p.keywords ?? [])].some((k) => k.toLowerCase().includes(wanted)));\n const connected = shown.filter((p) => p.connected).sort(byName);\n const rest = shown.filter((p) => !p.connected).sort(byName);\n const sections =\n connected.length && rest.length\n ? [\n { id: \"connected\", label: t(\"providerPicker.connected\", \"Connected\"), items: connected },\n { id: \"other\", label: t(\"providerPicker.other\", \"Other providers\"), items: rest },\n ]\n : [{ id: \"providers\", label: undefined, items: [...connected, ...rest] }];\n const searchable = providers.length > SEARCH_ABOVE;\n return (\n <div className={cn(\"flex min-w-0 flex-col gap-16\", className)}>\n {searchable && (\n <SearchInput\n aria-label={t(\"providerPicker.search\", \"Search providers\")}\n placeholder={t(\"providerPicker.search\", \"Search providers\")}\n {...(disabled ? { disabled: true } : {})}\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n {...(autoFocus ? { autoFocus: true } : {})}\n />\n )}\n {shown.length === 0 ? (\n <p className=\"py-24 text-center text-body text-fg-secondary\">{t(\"providerPicker.noMatch\", \"No providers match\")}</p>\n ) : (\n <BaseRadioGroup\n aria-label={label}\n value={value ?? null}\n {...(disabled ? { disabled: true } : {})}\n onValueChange={(v: unknown) => onValueChange?.(v ? String(v) : null)}\n className=\"flex flex-col gap-20\"\n >\n {sections.map((section, si) => (\n <div key={section.id} {...(section.label ? { role: \"group\", \"aria-label\": section.label } : {})} className=\"flex flex-col gap-8\">\n {section.label && (\n <div aria-hidden className=\"flex items-center justify-between text-caption font-medium text-fg-secondary\">\n <span>{section.label}</span>\n <span className=\"font-regular text-fg-tertiary tabular\">{section.items.length}</span>\n </div>\n )}\n <div className=\"grid grid-cols-2 gap-8 sm:grid-cols-3\">\n {section.items.map((p, i) => (\n <BaseRadio.Root\n key={p.id}\n value={p.id}\n {...(p.disabled ? { disabled: true } : {})}\n {...(p[\"data-force\"] ? { \"data-force\": p[\"data-force\"] } : {})}\n {...(autoFocus && !searchable && si === 0 && i === 0 && !value ? { autoFocus: true } : {})}\n onClick={() => !disabled && !p.disabled && onChoose?.(p.id)}\n className={cn(\n \"group/tile flex min-h-64 min-w-0 cursor-pointer items-center gap-10 rounded-group bg-raised px-10 py-12 sm:gap-12 sm:px-12 text-left shadow-control transition-control focus-ring forced-checked\",\n \"hover:not-data-checked:bg-raised-hover hover:not-data-checked:shadow-control-hover active:bg-raised-pressed\",\n \"data-checked:bg-item-hover data-checked:ring-step data-disabled:cursor-not-allowed data-disabled:opacity-40\",\n )}\n >\n <span aria-hidden className=\"flex\">\n <ProviderBadge provider={p.id} name={p.name} size=\"lg\" />\n </span>\n <span className=\"flex min-w-0 flex-1 flex-col\">\n <span className=\"line-clamp-2 text-body font-medium text-pretty wrap-break-word text-fg\">{nameOf(p)}</span>\n {p.hint !== undefined && <span className=\"line-clamp-2 text-small text-pretty text-fg-secondary\">{p.hint}</span>}\n </span>\n </BaseRadio.Root>\n ))}\n </div>\n </div>\n ))}\n </BaseRadioGroup>\n )}\n </div>\n );\n}\n\nexport function useProviderGroups(providers: ProviderPickerOption[], allLabel?: string | undefined): CommandListGroup[] {\n const t = useUiText();\n const locale = useLocale();\n return useMemo(() => {\n const nameOf = (p: ProviderPickerOption) => providerName(p.id, p.name);\n const byName = (a: ProviderPickerOption, b: ProviderPickerOption) => nameOf(a).localeCompare(nameOf(b), locale, { sensitivity: \"base\" });\n const item = (p: ProviderPickerOption) => ({\n value: p.id,\n label: nameOf(p),\n keywords: [p.id, ...(p.keywords ?? [])],\n leading: (\n <span aria-hidden className=\"flex\">\n <ProviderBadge provider={p.id} name={p.name} />\n </span>\n ),\n ...(p.hint !== undefined ? { meta: p.hint } : {}),\n ...(p.disabled ? { disabled: true } : {}),\n });\n const connected = providers.filter((p) => p.connected).sort(byName);\n const rest = providers.filter((p) => !p.connected).sort(byName);\n const groups: CommandListGroup[] = [];\n if (allLabel) groups.push({ id: \"all\", items: [{ value: ALL, label: allLabel }] });\n if (connected.length && rest.length) {\n groups.push({ id: \"connected\", label: t(\"providerPicker.connected\", \"Connected\"), count: connected.length, items: connected.map(item) });\n groups.push({ id: \"other\", label: t(\"providerPicker.other\", \"Other providers\"), count: rest.length, items: rest.map(item) });\n } else groups.push({ id: \"providers\", items: [...connected, ...rest].map(item) });\n return groups;\n }, [providers, allLabel, t, locale]);\n}\n\nexport const ProviderPicker = /* @__PURE__ */ forwardRef<HTMLElement, ProviderPickerProps>(function ProviderPicker(props, ref) {\n const {\n providers,\n value,\n onValueChange,\n onChoose,\n appearance = \"list\",\n allLabel,\n placeholder,\n size = \"md\",\n disabled,\n autoFocus,\n \"aria-label\": ariaLabel,\n className,\n \"data-force\": force,\n label,\n description,\n error,\n optional,\n required,\n layout,\n } = props;\n const t = useUiText();\n const field = useField();\n const fc = useFieldControl(props);\n const [open, setOpen] = useState(false);\n const offered = useMemo(\n () => (disabled && appearance === \"list\" ? providers.map((p) => ({ ...p, disabled: true })) : providers),\n [providers, disabled, appearance],\n );\n const groups = useProviderGroups(offered, appearance === \"select\" ? allLabel : undefined);\n const listLabel = ariaLabel ?? (typeof label === \"string\" ? label : t(\"providerPicker.providers\", \"Providers\"));\n const search = placeholder ?? t(\"providerPicker.search\", \"Search providers\");\n const empty = t(\"providerPicker.noMatch\", \"No providers match\");\n const list = (height?: \"inline\") => (\n <CommandList\n groups={groups}\n aria-label={listLabel}\n value={value ?? (allLabel ? ALL : null)}\n onSelect={(id) => {\n onValueChange?.(id === ALL ? null : id);\n setOpen(false);\n }}\n placeholder={search}\n emptyText={empty}\n {...(height ? { height } : {})}\n {...(autoFocus || appearance === \"select\" ? { autoFocus: true } : {})}\n {...(height && force ? { \"data-force\": force } : {})}\n {...(height && className && !(label || description || error) ? { className } : {})}\n {...(height ? { ref: ref as Ref<HTMLInputElement> } : {})}\n />\n );\n if (appearance === \"grid\") {\n const control = (\n <ProviderTiles\n providers={providers}\n disabled={disabled}\n value={value}\n onValueChange={onValueChange}\n onChoose={onChoose}\n autoFocus={autoFocus}\n label={listLabel}\n className={!(label || description || error) ? className : undefined}\n />\n );\n if (field) return control;\n return withField({ label, description, error, optional, required, layout, id: fc.wrapId, disabled, className }, control);\n }\n if (appearance === \"list\") {\n const control = list(\"inline\");\n if (field) return control;\n return withField({ label, description, error, optional, required, layout, id: fc.wrapId, disabled, className }, control);\n }\n const chosen = providers.find((p) => p.id === value);\n const control = (\n <PickerPopover\n title={listLabel}\n width=\"sm\"\n open={open}\n onOpenChange={setOpen}\n trigger={\n <PickerTrigger\n ref={ref as Ref<HTMLButtonElement>}\n size={size === \"sm\" ? \"sm\" : \"md\"}\n {...fc.controlProps}\n {...(ariaLabel ? { \"aria-label\": ariaLabel } : {})}\n {...(disabled ? { disabled } : {})}\n {...(force ? { \"data-force\": force } : {})}\n placeholder={placeholder ?? t(\"providerPicker.choose\", \"Choose a provider\")}\n {...(!(label || description || error) && className ? { className } : {})}\n >\n {chosen ? (\n <span className=\"flex min-w-0 items-center gap-8\">\n <span aria-hidden className=\"flex\">\n <ProviderBadge provider={chosen.id} name={chosen.name} />\n </span>\n <span className=\"truncate\">{providerName(chosen.id, chosen.name)}</span>\n </span>\n ) : (\n allLabel\n )}\n </PickerTrigger>\n }\n >\n {list()}\n </PickerPopover>\n );\n if (field) return control;\n return withField({ label, description, error, optional, required, layout, id: fc.wrapId, disabled, className }, control);\n});\nif (process.env.NODE_ENV !== \"production\") ProviderPicker.displayName = \"ProviderPicker\";\n","import { forwardRef, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { Tick02Icon as __icon_Tick02Icon } from \"@hugeicons/core-free-icons\";\nimport { Icon } from \"../icon/icon.js\";\n\nexport const KAESO_GRANT_SUMMARY_VARIANTS = {} as const;\nexport const KAESO_GRANT_SUMMARY_DEFAULT_VARIANTS = {} as const;\n\nexport interface GrantSummaryProps {\n items: readonly ReactNode[];\n footer?: ReactNode | undefined;\n action?: ReactNode | undefined;\n \"aria-label\": string;\n className?: string | undefined;\n}\n\n/** What an agent or a key may do, one short line per item after a check mark, on a group surface, with an optional note and action below. */\nexport const GrantSummary = /* @__PURE__ */ forwardRef<HTMLDivElement, GrantSummaryProps>(function GrantSummary(\n { items, footer, action, \"aria-label\": ariaLabel, className },\n ref,\n) {\n return (\n <div ref={ref} className={cn(\"flex flex-col gap-16 rounded-group bg-raised p-20 shadow-xs\", className)}>\n <ul aria-label={ariaLabel} className=\"flex flex-col gap-10\">\n {items.map((item, i) => (\n <li key={i} className=\"flex items-start gap-10 text-body text-fg\">\n <Icon icon={__icon_Tick02Icon} size=\"sm\" className=\"mt-2 text-success-text\" />\n <span className=\"min-w-0 text-pretty\">{item}</span>\n </li>\n ))}\n </ul>\n {(footer || action) && (\n <div className=\"flex items-center justify-between gap-12 pt-12 hairline-t\">\n {footer && <p className=\"min-w-0 text-small text-fg-secondary text-pretty\">{footer}</p>}\n {action && <div className=\"ml-auto shrink-0\">{action}</div>}\n </div>\n )}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") GrantSummary.displayName = \"GrantSummary\";\n","import { forwardRef } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { Tooltip } from \"../tooltip/tooltip.js\";\n\nexport const KAESO_CLIENT_BUTTON_VARIANTS = {} as const;\nexport const KAESO_CLIENT_BUTTON_DEFAULT_VARIANTS = {} as const;\n\n/** The marks of the agent clients Kaeso connects to, on a 24px grid, drawn in the text colour. */\nexport const CLIENT_MARKS = {\n claude:\n \"m4.7144 15.9555 4.7174-2.6471.079-.2307-.079-.1275h-.2307l-.7893-.0486-2.6956-.0729-2.3375-.0971-2.2646-.1214-.5707-.1215-.5343-.7042.0546-.3522.4797-.3218.686.0608 1.5179.1032 2.2767.1578 1.6514.0972 2.4468.255h.3886l.0546-.1579-.1336-.0971-.1032-.0972L6.973 9.8356l-2.55-1.6879-1.3356-.9714-.7225-.4918-.3643-.4614-.1578-1.0078.6557-.7225.8803.0607.2246.0607.8925.686 1.9064 1.4754 2.4893 1.8336.3643.3035.1457-.1032.0182-.0728-.164-.2733-1.3539-2.4467-1.445-2.4893-.6435-1.032-.17-.6194c-.0607-.255-.1032-.4674-.1032-.7285L6.287.1335 6.6997 0l.9957.1336.419.3642.6192 1.4147 1.0018 2.2282 1.5543 3.0296.4553.8985.2429.8318.091.255h.1579v-.1457l.1275-1.706.2368-2.0947.2307-2.6957.0789-.7589.3764-.9107.7468-.4918.5828.2793.4797.686-.0668.4433-.2853 1.8517-.5586 2.9021-.3643 1.9429h.2125l.2429-.2429.9835-1.3053 1.6514-2.0643.7286-.8196.85-.9046.5464-.4311h1.0321l.759 1.1293-.34 1.1657-1.0625 1.3478-.8804 1.1414-1.2628 1.7-.7893 1.36.0729.1093.1882-.0183 2.8535-.607 1.5421-.2794 1.8396-.3157.8318.3886.091.3946-.3278.8075-1.967.4857-2.3072.4614-3.4364.8136-.0425.0304.0486.0607 1.5482.1457.6618.0364h1.621l3.0175.2247.7892.522.4736.6376-.079.4857-1.2142.6193-1.6393-.3886-3.825-.9107-1.3113-.3279h-.1822v.1093l1.0929 1.0686 2.0035 1.8092 2.5075 2.3314.1275.5768-.3218.4554-.34-.0486-2.2039-1.6575-.85-.7468-1.9246-1.621h-.1275v.17l.4432.6496 2.3436 3.5214.1214 1.0807-.17.3521-.6071.2125-.6679-.1214-1.3721-1.9246L14.38 17.959l-1.1414-1.9428-.1397.079-.674 7.2552-.3156.3703-.7286.2793-.6071-.4614-.3218-.7468.3218-1.4753.3886-1.9246.3157-1.53.2853-1.9004.17-.6314-.0121-.0425-.1397.0182-1.4328 1.9672-2.1796 2.9446-1.7243 1.8456-.4128.164-.7164-.3704.0667-.6618.4008-.5889 2.386-3.0357 1.4389-1.882.929-1.0868-.0062-.1579h-.0546l-6.3385 4.1164-1.1293.1457-.4857-.4554.0608-.7467.2307-.2429 1.9064-1.3114Z\",\n cursor:\n \"M11.503.131 1.891 5.678a.84.84 0 0 0-.42.726v11.188c0 .3.162.575.42.724l9.609 5.55a1 1 0 0 0 .998 0l9.61-5.55a.84.84 0 0 0 .42-.724V6.404a.84.84 0 0 0-.42-.726L12.497.131a1.01 1.01 0 0 0-.996 0M2.657 6.338h18.55c.263 0 .43.287.297.515L12.23 22.918c-.062.107-.229.064-.229-.06V12.335a.59.59 0 0 0-.295-.51l-9.11-5.257c-.109-.063-.064-.23.061-.23\",\n \"github-copilot\":\n \"M23.922 16.997C23.061 18.492 18.063 22.02 12 22.02 5.937 22.02.939 18.492.078 16.997A.641.641 0 0 1 0 16.741v-2.869a.883.883 0 0 1 .053-.22c.372-.935 1.347-2.292 2.605-2.656.167-.429.414-1.055.644-1.517a10.098 10.098 0 0 1-.052-1.086c0-1.331.282-2.499 1.132-3.368.397-.406.89-.717 1.474-.952C7.255 2.937 9.248 1.98 11.978 1.98c2.731 0 4.767.957 6.166 2.093.584.235 1.077.546 1.474.952.85.869 1.132 2.037 1.132 3.368 0 .368-.014.733-.052 1.086.23.462.477 1.088.644 1.517 1.258.364 2.233 1.721 2.605 2.656a.841.841 0 0 1 .053.22v2.869a.641.641 0 0 1-.078.256Zm-11.75-5.992h-.344a4.359 4.359 0 0 1-.355.508c-.77.947-1.918 1.492-3.508 1.492-1.725 0-2.989-.359-3.782-1.259a2.137 2.137 0 0 1-.085-.104L4 11.746v6.585c1.435.779 4.514 2.179 8 2.179 3.486 0 6.565-1.4 8-2.179v-6.585l-.098-.104s-.033.045-.085.104c-.793.9-2.057 1.259-3.782 1.259-1.59 0-2.738-.545-3.508-1.492a4.359 4.359 0 0 1-.355-.508Zm2.328 3.25c.549 0 1 .451 1 1v2c0 .549-.451 1-1 1-.549 0-1-.451-1-1v-2c0-.549.451-1 1-1Zm-5 0c.549 0 1 .451 1 1v2c0 .549-.451 1-1 1-.549 0-1-.451-1-1v-2c0-.549.451-1 1-1Zm3.313-6.185c.136 1.057.403 1.913.878 2.497.442.544 1.134.938 2.344.938 1.573 0 2.292-.337 2.657-.751.384-.435.558-1.15.558-2.361 0-1.14-.243-1.847-.705-2.319-.477-.488-1.319-.862-2.824-1.025-1.487-.161-2.192.138-2.533.529-.269.307-.437.808-.438 1.578v.021c0 .265.021.562.063.893Zm-1.626 0c.042-.331.063-.628.063-.894v-.02c-.001-.77-.169-1.271-.438-1.578-.341-.391-1.046-.69-2.533-.529-1.505.163-2.347.537-2.824 1.025-.462.472-.705 1.179-.705 2.319 0 1.211.175 1.926.558 2.361.365.414 1.084.751 2.657.751 1.21 0 1.902-.394 2.344-.938.475-.584.742-1.44.878-2.497Z\",\n} as const;\n\nexport type ClientMark = keyof typeof CLIENT_MARKS;\n\nexport interface ClientButtonProps {\n client: ClientMark;\n \"aria-label\": string;\n onClick?: (() => void) | undefined;\n className?: string | undefined;\n \"data-force\"?: string | undefined;\n}\n\n/** An agent client's mark in a raised circle, as a button that opens how to connect it. Its tooltip is its label. */\nexport const ClientButton = /* @__PURE__ */ forwardRef<HTMLButtonElement, ClientButtonProps>(function ClientButton(\n { client, \"aria-label\": label, onClick, className, \"data-force\": force },\n ref,\n) {\n return (\n <Tooltip content={label}>\n <button\n ref={ref}\n type=\"button\"\n aria-label={label}\n data-client={client}\n {...(force ? { \"data-force\": force } : {})}\n onClick={onClick}\n className={cn(\n \"relative inline-flex size-32 shrink-0 items-center justify-center rounded-pill text-fg material-secondary transition-control focus-ring tap-target\",\n className,\n )}\n >\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" fillRule=\"evenodd\" aria-hidden focusable=\"false\" className=\"size-16\">\n <path d={CLIENT_MARKS[client]} />\n </svg>\n </button>\n </Tooltip>\n );\n});\nif (process.env.NODE_ENV !== \"production\") ClientButton.displayName = \"ClientButton\";\n"],"mappings":"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"}
|
package/dist/components/list.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
export { t as GroupHeader, n as KAESO_LIST_DEFAULT_VARIANTS, r as KAESO_LIST_VARIANTS, i as List, a as ListRow, o as SelectionAction, s as SelectionBar } from "../chunks/list-
|
|
2
|
+
export { t as GroupHeader, n as KAESO_LIST_DEFAULT_VARIANTS, r as KAESO_LIST_VARIANTS, i as List, a as ListRow, o as SelectionAction, s as SelectionBar } from "../chunks/list-CU_AoVY3.js";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
export { t as KAESO_PAGE_HEADER_DEFAULT_VARIANTS, n as KAESO_PAGE_HEADER_VARIANTS, r as PageHeader } from "../chunks/page-header-
|
|
2
|
+
export { t as KAESO_PAGE_HEADER_DEFAULT_VARIANTS, n as KAESO_PAGE_HEADER_VARIANTS, r as PageHeader } from "../chunks/page-header-BQijP6Rp.js";
|