@stll/ui 0.44.1 → 0.46.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -1
- package/dist/components/accordion.d.ts +6 -2
- package/dist/components/accordion.js +4 -4
- package/dist/components/ai-label.d.ts +33 -0
- package/dist/components/ai-label.js +42 -0
- package/dist/components/alert-dialog.js +3 -2
- package/dist/components/animated-count.d.ts +13 -0
- package/dist/components/animated-count.js +63 -0
- package/dist/components/application-rail.js +1 -1
- package/dist/components/brand-icons.d.ts +1 -0
- package/dist/components/brand-icons.js +8 -1
- package/dist/components/button.d.ts +2 -2
- package/dist/components/button.js +12 -2
- package/dist/components/command.js +1 -1
- package/dist/components/court-badge.d.ts +7 -1
- package/dist/components/court-badge.js +13 -3
- package/dist/components/date-picker-popover.d.ts +12 -2
- package/dist/components/date-picker-popover.js +105 -9
- package/dist/components/date-range-filter.d.ts +14 -0
- package/dist/components/date-range-filter.js +74 -0
- package/dist/components/dialog.js +3 -2
- package/dist/components/document-identity-badge.d.ts +12 -0
- package/dist/components/document-identity-badge.js +94 -0
- package/dist/components/document-identity-badge.logic.d.ts +25 -0
- package/dist/components/document-identity-badge.logic.js +25 -0
- package/dist/components/input-group.d.ts +1 -1
- package/dist/components/input-otp.js +1 -1
- package/dist/components/landing.d.ts +1 -1
- package/dist/components/landing.js +2 -2
- package/dist/components/list.d.ts +8 -2
- package/dist/components/list.js +10 -4
- package/dist/components/matter-icon.d.ts +16 -0
- package/dist/components/matter-icon.js +56 -0
- package/dist/components/menu.d.ts +9 -1
- package/dist/components/menu.js +6 -6
- package/dist/components/outline-rail.d.ts +8 -1
- package/dist/components/outline-rail.js +95 -48
- package/dist/components/popover.js +1 -1
- package/dist/components/search-field.js +30 -34
- package/dist/components/select.js +1 -1
- package/dist/components/sheet.js +22 -4
- package/dist/components/sidebar.d.ts +1 -1
- package/dist/components/sidebar.js +8 -8
- package/dist/components/status-mark.d.ts +17 -0
- package/dist/components/status-mark.js +74 -0
- package/dist/components/swap-text.d.ts +16 -0
- package/dist/components/swap-text.js +52 -0
- package/dist/components/switch.d.ts +5 -0
- package/dist/components/switch.js +16 -0
- package/dist/components/table-chart.d.ts +20 -0
- package/dist/components/table-chart.js +274 -0
- package/dist/components/tabs.js +1 -1
- package/dist/components/toast.js +42 -25
- package/dist/components/workspace-shell.js +5 -4
- package/dist/icons.js +1 -2
- package/dist/index.d.ts +3 -3
- package/dist/index.js +3 -3
- package/dist/inspector/dock.js +1 -1
- package/dist/inspector/entity-tab.js +1 -2
- package/dist/kanban/virtual-cell.js +1 -1
- package/dist/lib/control-size.d.ts +1 -1
- package/dist/lib/matter-colors.d.ts +38 -0
- package/dist/lib/matter-colors.js +65 -0
- package/dist/lib/panel-inset.d.ts +11 -0
- package/dist/lib/panel-inset.js +33 -0
- package/dist/lib/safe-area.d.ts +11 -0
- package/dist/lib/safe-area.js +12 -0
- package/dist/review/review-word-diff.d.ts +13 -0
- package/dist/review/review-word-diff.js +78 -0
- package/dist/styles/theme.css +79 -0
- package/package.json +64 -8
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cn } from "../lib/utils.js";
|
|
3
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
+
import { useState } from "react";
|
|
5
|
+
//#region src/components/swap-text.tsx
|
|
6
|
+
/**
|
|
7
|
+
* A short label that changes in place (a live status line): the old text
|
|
8
|
+
* lifts out with a slight blur while the new one rises into the same cell,
|
|
9
|
+
* so the change reads as one motion instead of a blink. Both layers share a
|
|
10
|
+
* grid cell, so nothing reflows mid-swap. The first render is still, and
|
|
11
|
+
* under reduced motion the label simply changes.
|
|
12
|
+
*/
|
|
13
|
+
const SwapText = ({ className, text }) => {
|
|
14
|
+
const [state, setState] = useState({
|
|
15
|
+
current: text,
|
|
16
|
+
generation: 0,
|
|
17
|
+
previous: null
|
|
18
|
+
});
|
|
19
|
+
if (state.current !== text) setState({
|
|
20
|
+
current: text,
|
|
21
|
+
generation: state.generation + 1,
|
|
22
|
+
previous: state.current
|
|
23
|
+
});
|
|
24
|
+
const hasSwapped = state.generation > 0;
|
|
25
|
+
return /* @__PURE__ */ jsxs("span", {
|
|
26
|
+
className: "inline-grid",
|
|
27
|
+
"data-slot": "swap-text",
|
|
28
|
+
children: [state.previous !== null && /* @__PURE__ */ jsx("span", {
|
|
29
|
+
"aria-hidden": "true",
|
|
30
|
+
className: "motion-safe:animate-swap-out col-start-1 row-start-1 motion-reduce:hidden",
|
|
31
|
+
onAnimationEnd: (event) => {
|
|
32
|
+
if (event.target !== event.currentTarget) return;
|
|
33
|
+
setState((current) => current.generation === state.generation ? {
|
|
34
|
+
...current,
|
|
35
|
+
previous: null
|
|
36
|
+
} : current);
|
|
37
|
+
},
|
|
38
|
+
children: /* @__PURE__ */ jsx("span", {
|
|
39
|
+
className,
|
|
40
|
+
children: state.previous
|
|
41
|
+
})
|
|
42
|
+
}, `out-${state.generation}`), /* @__PURE__ */ jsx("span", {
|
|
43
|
+
className: cn("col-start-1 row-start-1", hasSwapped && "motion-safe:animate-swap-in"),
|
|
44
|
+
children: /* @__PURE__ */ jsx("span", {
|
|
45
|
+
className,
|
|
46
|
+
children: state.current
|
|
47
|
+
})
|
|
48
|
+
}, `in-${state.generation}`)]
|
|
49
|
+
});
|
|
50
|
+
};
|
|
51
|
+
//#endregion
|
|
52
|
+
export { SwapText };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cn } from "../lib/utils.js";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
|
+
import { Switch as Switch$1 } from "@base-ui/react/switch";
|
|
5
|
+
//#region src/components/switch.tsx
|
|
6
|
+
const Switch = ({ className, ...props }) => /* @__PURE__ */ jsx(Switch$1.Root, {
|
|
7
|
+
className: cn("focus-visible:ring-ring focus-visible:ring-offset-background data-checked:bg-primary data-unchecked:bg-input relative inline-flex h-5 w-9 shrink-0 items-center rounded-full outline-none focus-visible:ring-2 focus-visible:ring-offset-1 data-disabled:opacity-64", className),
|
|
8
|
+
"data-slot": "switch",
|
|
9
|
+
...props,
|
|
10
|
+
children: /* @__PURE__ */ jsx(Switch$1.Thumb, {
|
|
11
|
+
className: "bg-background pointer-events-none block size-4 rounded-full shadow-xs transition-transform ltr:data-checked:translate-x-4.5 ltr:data-unchecked:translate-x-0.5 rtl:data-checked:-translate-x-4.5 rtl:data-unchecked:-translate-x-0.5",
|
|
12
|
+
"data-slot": "switch-thumb"
|
|
13
|
+
})
|
|
14
|
+
});
|
|
15
|
+
//#endregion
|
|
16
|
+
export { Switch };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
//#region src/components/table-chart.d.ts
|
|
2
|
+
export type TableChartKind = "bar" | "line" | "pie" | "scatter";
|
|
3
|
+
export type TableChartPoint = {
|
|
4
|
+
label: string;
|
|
5
|
+
x: number;
|
|
6
|
+
y: number;
|
|
7
|
+
series?: string;
|
|
8
|
+
};
|
|
9
|
+
export type TableChartProps = {
|
|
10
|
+
kind: TableChartKind;
|
|
11
|
+
points: readonly TableChartPoint[];
|
|
12
|
+
title: string;
|
|
13
|
+
summary: string;
|
|
14
|
+
xLabel?: string | undefined;
|
|
15
|
+
yLabel?: string | undefined;
|
|
16
|
+
xMode?: "numeric" | "category";
|
|
17
|
+
formatNumber: (value: number) => string;
|
|
18
|
+
};
|
|
19
|
+
export declare const TableChart: ({ kind, points, title, summary, xLabel, yLabel, xMode, formatNumber }: TableChartProps) => import("react").JSX.Element;
|
|
20
|
+
//#endregion
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useId } from "react";
|
|
4
|
+
import { panic } from "better-result";
|
|
5
|
+
//#region src/components/table-chart.tsx
|
|
6
|
+
const WIDTH = 640;
|
|
7
|
+
const HEIGHT = 360;
|
|
8
|
+
const PLOT = {
|
|
9
|
+
x: 76,
|
|
10
|
+
y: 24,
|
|
11
|
+
width: 540,
|
|
12
|
+
height: 260
|
|
13
|
+
};
|
|
14
|
+
const MAX_POINTS = 500;
|
|
15
|
+
const TICK_COUNT = 4;
|
|
16
|
+
const PALETTE_SIZE = 8;
|
|
17
|
+
const scale = (values, includeZero) => {
|
|
18
|
+
const magnitude = Math.max(1, ...values.map((value) => Math.abs(value)));
|
|
19
|
+
const normalized = values.map((value) => value / magnitude);
|
|
20
|
+
let low = Math.min(...normalized, ...includeZero ? [0] : []);
|
|
21
|
+
let high = Math.max(...normalized, ...includeZero ? [0] : []);
|
|
22
|
+
if (low === high) {
|
|
23
|
+
low = Math.min(0, low);
|
|
24
|
+
high = Math.max(0, high);
|
|
25
|
+
if (low === high) {
|
|
26
|
+
low = -1;
|
|
27
|
+
high = 1;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
position: (value) => (value / magnitude - low) / (high - low),
|
|
32
|
+
tick: (index) => (low + (high - low) * index / TICK_COUNT) * magnitude
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
const color = (index) => `var(--chart-${index % PALETTE_SIZE + 1})`;
|
|
36
|
+
const identifyPoints = (points) => {
|
|
37
|
+
const occurrences = /* @__PURE__ */ new Map();
|
|
38
|
+
return points.map((point) => {
|
|
39
|
+
const identity = JSON.stringify([
|
|
40
|
+
point.label,
|
|
41
|
+
point.x,
|
|
42
|
+
point.y,
|
|
43
|
+
point.series
|
|
44
|
+
]);
|
|
45
|
+
const occurrence = occurrences.get(identity) ?? 0;
|
|
46
|
+
occurrences.set(identity, occurrence + 1);
|
|
47
|
+
return {
|
|
48
|
+
point,
|
|
49
|
+
key: `${identity}:${occurrence}`
|
|
50
|
+
};
|
|
51
|
+
});
|
|
52
|
+
};
|
|
53
|
+
const CartesianPlot = ({ kind, points, formatNumber, xMode = "numeric" }) => {
|
|
54
|
+
const xScale = scale(points.map(({ x }) => x), false);
|
|
55
|
+
const yScale = scale(points.map(({ y }) => y), kind === "bar");
|
|
56
|
+
const x = (value) => PLOT.x + xScale.position(value) * PLOT.width;
|
|
57
|
+
const y = (value) => PLOT.y + (1 - yScale.position(value)) * PLOT.height;
|
|
58
|
+
const keyedPoints = identifyPoints(points);
|
|
59
|
+
const groups = Map.groupBy(keyedPoints, ({ point }) => point.series ?? "");
|
|
60
|
+
const seriesNames = [...groups.keys()];
|
|
61
|
+
const barStep = PLOT.width / points.length;
|
|
62
|
+
const labelStep = Math.max(1, Math.ceil(points.length / 8));
|
|
63
|
+
const categories = [...new Map(points.map((point) => [point.x, point])).values()];
|
|
64
|
+
const categoryStep = Math.max(1, Math.ceil(categories.length / 8));
|
|
65
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
66
|
+
Array.from({ length: 5 }, (_, index) => {
|
|
67
|
+
const value = yScale.tick(index);
|
|
68
|
+
const ordinate = PLOT.y + (1 - index / TICK_COUNT) * PLOT.height;
|
|
69
|
+
return /* @__PURE__ */ jsxs("g", {
|
|
70
|
+
"data-slot": "chart-y-tick",
|
|
71
|
+
children: [/* @__PURE__ */ jsx("line", {
|
|
72
|
+
x1: PLOT.x,
|
|
73
|
+
x2: PLOT.x + PLOT.width,
|
|
74
|
+
y1: ordinate,
|
|
75
|
+
y2: ordinate,
|
|
76
|
+
stroke: "var(--border)"
|
|
77
|
+
}), /* @__PURE__ */ jsx("text", {
|
|
78
|
+
x: PLOT.x - 8,
|
|
79
|
+
y: ordinate + 4,
|
|
80
|
+
textAnchor: "end",
|
|
81
|
+
fill: "var(--muted-foreground)",
|
|
82
|
+
children: formatNumber(value)
|
|
83
|
+
})]
|
|
84
|
+
}, index);
|
|
85
|
+
}),
|
|
86
|
+
/* @__PURE__ */ jsx("path", {
|
|
87
|
+
"data-slot": "chart-axis",
|
|
88
|
+
d: `M ${PLOT.x} ${PLOT.y} V ${PLOT.y + PLOT.height} H ${PLOT.x + PLOT.width}`,
|
|
89
|
+
fill: "none",
|
|
90
|
+
stroke: "var(--muted-foreground)"
|
|
91
|
+
}),
|
|
92
|
+
kind === "bar" ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("line", {
|
|
93
|
+
"data-slot": "chart-zero",
|
|
94
|
+
x1: PLOT.x,
|
|
95
|
+
x2: PLOT.x + PLOT.width,
|
|
96
|
+
y1: y(0),
|
|
97
|
+
y2: y(0),
|
|
98
|
+
stroke: "var(--muted-foreground)"
|
|
99
|
+
}), keyedPoints.map(({ point, key }, index) => /* @__PURE__ */ jsxs("g", { children: [/* @__PURE__ */ jsx("rect", {
|
|
100
|
+
"data-slot": "chart-bar",
|
|
101
|
+
x: PLOT.x + index * barStep + barStep * .15,
|
|
102
|
+
y: Math.min(y(point.y), y(0)),
|
|
103
|
+
width: barStep * .7,
|
|
104
|
+
height: Math.abs(y(point.y) - y(0)),
|
|
105
|
+
fill: color(seriesNames.indexOf(point.series ?? "")),
|
|
106
|
+
children: /* @__PURE__ */ jsx("title", { children: `${point.label}: ${formatNumber(point.y)}${point.series ? ` (${point.series})` : ""}` })
|
|
107
|
+
}), index % labelStep === 0 && /* @__PURE__ */ jsx("text", {
|
|
108
|
+
x: PLOT.x + (index + .5) * barStep,
|
|
109
|
+
y: PLOT.y + PLOT.height + 20,
|
|
110
|
+
textAnchor: "middle",
|
|
111
|
+
fill: "var(--muted-foreground)",
|
|
112
|
+
style: { unicodeBidi: "plaintext" },
|
|
113
|
+
children: point.label.length > 16 ? `${point.label.slice(0, 15)}…` : point.label
|
|
114
|
+
})] }, key))] }) : /* @__PURE__ */ jsxs(Fragment, { children: [xMode === "category" ? categories.filter((_, index) => index % categoryStep === 0).map((point) => /* @__PURE__ */ jsx("text", {
|
|
115
|
+
"data-slot": "chart-x-tick",
|
|
116
|
+
x: x(point.x),
|
|
117
|
+
y: PLOT.y + PLOT.height + 20,
|
|
118
|
+
textAnchor: "middle",
|
|
119
|
+
fill: "var(--muted-foreground)",
|
|
120
|
+
style: { unicodeBidi: "plaintext" },
|
|
121
|
+
children: point.label.length > 16 ? `${point.label.slice(0, 15)}…` : point.label
|
|
122
|
+
}, point.x)) : Array.from({ length: 5 }, (_, index) => /* @__PURE__ */ jsx("text", {
|
|
123
|
+
"data-slot": "chart-x-tick",
|
|
124
|
+
x: PLOT.x + index / TICK_COUNT * PLOT.width,
|
|
125
|
+
y: PLOT.y + PLOT.height + 20,
|
|
126
|
+
textAnchor: "middle",
|
|
127
|
+
fill: "var(--muted-foreground)",
|
|
128
|
+
children: formatNumber(xScale.tick(index))
|
|
129
|
+
}, index)), [...groups].map(([name, group], index) => /* @__PURE__ */ jsxs("g", { children: [kind === "line" && /* @__PURE__ */ jsx("polyline", {
|
|
130
|
+
"data-slot": "chart-line",
|
|
131
|
+
points: group.map(({ point }) => `${x(point.x)},${y(point.y)}`).join(" "),
|
|
132
|
+
fill: "none",
|
|
133
|
+
stroke: color(index),
|
|
134
|
+
strokeWidth: 2
|
|
135
|
+
}), group.map(({ point, key }) => /* @__PURE__ */ jsx("circle", {
|
|
136
|
+
"data-slot": "chart-point",
|
|
137
|
+
cx: x(point.x),
|
|
138
|
+
cy: y(point.y),
|
|
139
|
+
r: 4,
|
|
140
|
+
fill: color(index),
|
|
141
|
+
children: /* @__PURE__ */ jsx("title", { children: `${point.label}: ${xMode === "numeric" ? `${formatNumber(point.x)}, ` : ""}${formatNumber(point.y)}${name ? ` (${name})` : ""}` })
|
|
142
|
+
}, key))] }, name))] })
|
|
143
|
+
] });
|
|
144
|
+
};
|
|
145
|
+
const PiePlot = ({ points, formatNumber }) => {
|
|
146
|
+
if (points.some(({ y }) => y < 0)) panic("Pie chart values must be nonnegative");
|
|
147
|
+
const magnitude = Math.max(1, ...points.map(({ y }) => y));
|
|
148
|
+
const total = points.reduce((sum, { y }) => sum + y / magnitude, 0);
|
|
149
|
+
const radius = 110;
|
|
150
|
+
const center = {
|
|
151
|
+
x: WIDTH / 2,
|
|
152
|
+
y: 155
|
|
153
|
+
};
|
|
154
|
+
let angle = -Math.PI / 2;
|
|
155
|
+
const slices = [];
|
|
156
|
+
for (const [index, { point, key }] of identifyPoints(points).entries()) {
|
|
157
|
+
if (point.y === 0 || total === 0) continue;
|
|
158
|
+
const fraction = point.y / magnitude / total;
|
|
159
|
+
const start = angle;
|
|
160
|
+
angle += fraction * Math.PI * 2;
|
|
161
|
+
const path = `M ${center.x} ${center.y} L ${center.x + radius * Math.cos(start)} ${center.y + radius * Math.sin(start)} A ${radius} ${radius} 0 ${fraction > .5 ? 1 : 0} 1 ${center.x + radius * Math.cos(angle)} ${center.y + radius * Math.sin(angle)} Z`;
|
|
162
|
+
slices.push({
|
|
163
|
+
point,
|
|
164
|
+
key,
|
|
165
|
+
index,
|
|
166
|
+
fraction,
|
|
167
|
+
path
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("circle", {
|
|
171
|
+
cx: center.x,
|
|
172
|
+
cy: center.y,
|
|
173
|
+
r: radius,
|
|
174
|
+
fill: "var(--muted)"
|
|
175
|
+
}), slices.map(({ point, key, index, fraction, path }) => {
|
|
176
|
+
if (fraction === 1) return /* @__PURE__ */ jsx("circle", {
|
|
177
|
+
"data-slot": "chart-slice",
|
|
178
|
+
cx: center.x,
|
|
179
|
+
cy: center.y,
|
|
180
|
+
r: radius,
|
|
181
|
+
fill: color(index),
|
|
182
|
+
children: /* @__PURE__ */ jsx("title", { children: `${point.label}: ${formatNumber(point.y)}` })
|
|
183
|
+
}, key);
|
|
184
|
+
return /* @__PURE__ */ jsx("path", {
|
|
185
|
+
"data-slot": "chart-slice",
|
|
186
|
+
d: path,
|
|
187
|
+
fill: color(index),
|
|
188
|
+
stroke: "var(--background)",
|
|
189
|
+
children: /* @__PURE__ */ jsx("title", { children: `${point.label}: ${formatNumber(point.y)}` })
|
|
190
|
+
}, key);
|
|
191
|
+
})] });
|
|
192
|
+
};
|
|
193
|
+
const TableChart = ({ kind, points, title, summary, xLabel, yLabel, xMode = "numeric", formatNumber }) => {
|
|
194
|
+
const id = useId();
|
|
195
|
+
if (points.length === 0 || points.length > MAX_POINTS || points.some(({ x, y }) => !Number.isFinite(x) || !Number.isFinite(y))) panic("Chart requires between 1 and 500 finite points");
|
|
196
|
+
const legend = (kind === "pie" ? points.map(({ label, series }) => series ? `${label} (${series})` : label) : [...new Set(points.map(({ series }) => series ?? ""))]).map((name, index) => ({
|
|
197
|
+
name,
|
|
198
|
+
index
|
|
199
|
+
})).filter(({ name }) => name.length > 0);
|
|
200
|
+
return /* @__PURE__ */ jsxs("figure", {
|
|
201
|
+
"data-slot": "table-chart",
|
|
202
|
+
className: "text-foreground min-w-0 space-y-2",
|
|
203
|
+
children: [
|
|
204
|
+
/* @__PURE__ */ jsx("p", {
|
|
205
|
+
className: "text-sm font-medium",
|
|
206
|
+
children: /* @__PURE__ */ jsx("bdi", { children: title })
|
|
207
|
+
}),
|
|
208
|
+
/* @__PURE__ */ jsxs("svg", {
|
|
209
|
+
role: "img",
|
|
210
|
+
"aria-labelledby": `${id}-title`,
|
|
211
|
+
"aria-describedby": `${id}-summary`,
|
|
212
|
+
viewBox: `0 0 ${WIDTH} ${HEIGHT}`,
|
|
213
|
+
className: "block w-full text-xs tabular-nums",
|
|
214
|
+
direction: "ltr",
|
|
215
|
+
children: [
|
|
216
|
+
/* @__PURE__ */ jsx("title", {
|
|
217
|
+
id: `${id}-title`,
|
|
218
|
+
children: title
|
|
219
|
+
}),
|
|
220
|
+
/* @__PURE__ */ jsx("desc", {
|
|
221
|
+
id: `${id}-summary`,
|
|
222
|
+
children: summary
|
|
223
|
+
}),
|
|
224
|
+
kind === "pie" ? /* @__PURE__ */ jsx(PiePlot, {
|
|
225
|
+
points,
|
|
226
|
+
formatNumber
|
|
227
|
+
}) : /* @__PURE__ */ jsx(CartesianPlot, {
|
|
228
|
+
kind,
|
|
229
|
+
points,
|
|
230
|
+
formatNumber,
|
|
231
|
+
xMode
|
|
232
|
+
}),
|
|
233
|
+
kind !== "pie" && xLabel && /* @__PURE__ */ jsx("text", {
|
|
234
|
+
x: PLOT.x + PLOT.width / 2,
|
|
235
|
+
y: 344,
|
|
236
|
+
textAnchor: "middle",
|
|
237
|
+
fill: "var(--foreground)",
|
|
238
|
+
style: { unicodeBidi: "plaintext" },
|
|
239
|
+
children: xLabel
|
|
240
|
+
}),
|
|
241
|
+
kind !== "pie" && yLabel && /* @__PURE__ */ jsx("text", {
|
|
242
|
+
x: 18,
|
|
243
|
+
y: PLOT.y + PLOT.height / 2,
|
|
244
|
+
transform: `rotate(-90 18 ${PLOT.y + PLOT.height / 2})`,
|
|
245
|
+
textAnchor: "middle",
|
|
246
|
+
fill: "var(--foreground)",
|
|
247
|
+
style: { unicodeBidi: "plaintext" },
|
|
248
|
+
children: yLabel
|
|
249
|
+
})
|
|
250
|
+
]
|
|
251
|
+
}),
|
|
252
|
+
legend.length > 0 && /* @__PURE__ */ jsx("ul", {
|
|
253
|
+
className: "flex flex-wrap gap-x-4 gap-y-1 text-xs",
|
|
254
|
+
children: legend.map(({ name, index }) => /* @__PURE__ */ jsxs("li", {
|
|
255
|
+
className: "flex min-w-0 items-center gap-1",
|
|
256
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
257
|
+
"aria-hidden": "true",
|
|
258
|
+
className: "size-2 shrink-0 rounded-full",
|
|
259
|
+
style: { background: color(index) }
|
|
260
|
+
}), /* @__PURE__ */ jsx("bdi", {
|
|
261
|
+
className: "wrap-break-word",
|
|
262
|
+
children: name
|
|
263
|
+
})]
|
|
264
|
+
}, index))
|
|
265
|
+
}),
|
|
266
|
+
/* @__PURE__ */ jsx("figcaption", {
|
|
267
|
+
className: "text-muted-foreground text-sm",
|
|
268
|
+
children: /* @__PURE__ */ jsx("bdi", { children: summary })
|
|
269
|
+
})
|
|
270
|
+
]
|
|
271
|
+
});
|
|
272
|
+
};
|
|
273
|
+
//#endregion
|
|
274
|
+
export { TableChart };
|
package/dist/components/tabs.js
CHANGED
|
@@ -33,7 +33,7 @@ const TabsList = ({ variant = "default", className, children, ref, ...props }) =
|
|
|
33
33
|
});
|
|
34
34
|
};
|
|
35
35
|
const TabsTab = ({ className, ...props }) => /* @__PURE__ */ jsx(Tabs$1.Tab, {
|
|
36
|
-
className: cn("hover:text-foreground focus-visible:ring-ring data-active:text-foreground relative flex h-9 shrink-0 grow cursor-pointer items-center justify-center gap-1.5 rounded-md border border-transparent px-[calc(--spacing(2.5)-1px)] text-base font-medium whitespace-nowrap outline-none focus-visible:ring-2 focus-visible:ring-inset data-disabled:pointer-events-none data-disabled:opacity-64 data-[orientation=vertical]:w-full data-[orientation=vertical]:justify-start sm:h-8 sm:text-sm [&_svg]:pointer-events-none [&_svg]:-mx-0.5 [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4.5 sm:[&_svg:not([class*='size-'])]:size-4", className),
|
|
36
|
+
className: cn("hover:text-foreground focus-visible:ring-ring data-active:text-foreground relative flex h-9 shrink-0 grow cursor-pointer items-center justify-center gap-1.5 rounded-md border border-transparent px-[calc(--spacing(2.5)-1px)] text-base font-medium whitespace-nowrap outline-none select-none focus-visible:ring-2 focus-visible:ring-inset data-disabled:pointer-events-none data-disabled:opacity-64 data-[orientation=vertical]:w-full data-[orientation=vertical]:justify-start sm:h-8 sm:text-sm [&_svg]:pointer-events-none [&_svg]:-mx-0.5 [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4.5 sm:[&_svg:not([class*='size-'])]:size-4", className),
|
|
37
37
|
"data-slot": "tabs-tab",
|
|
38
38
|
...props
|
|
39
39
|
});
|
package/dist/components/toast.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { CircleAlertIcon, CircleCheckIcon, InfoIcon, TriangleAlertIcon, XIcon } from "../icons.js";
|
|
3
3
|
import { cn } from "../lib/utils.js";
|
|
4
|
+
import { SAFE_AREA_TOAST_GEOMETRY_CLASS_NAME } from "../lib/safe-area.js";
|
|
4
5
|
import { Loader } from "./loader.js";
|
|
5
6
|
import { buttonVariants } from "./button.js";
|
|
7
|
+
import { ScrollArea } from "./scroll-area.js";
|
|
6
8
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
9
|
import * as React$1 from "react";
|
|
8
10
|
import { Toast } from "@base-ui/react/toast";
|
|
@@ -61,11 +63,11 @@ const Toasts = ({ position }) => {
|
|
|
61
63
|
return /* @__PURE__ */ jsx(Toast.Portal, {
|
|
62
64
|
"data-slot": "toast-portal",
|
|
63
65
|
children: /* @__PURE__ */ jsx(Toast.Viewport, {
|
|
64
|
-
className: cn("fixed z-[90] mx-auto flex
|
|
66
|
+
className: cn("fixed z-[90] mx-auto flex max-w-90 [--toast-inset:--spacing(4)] sm:[--toast-inset:--spacing(8)]", SAFE_AREA_TOAST_GEOMETRY_CLASS_NAME, "data-[position*=top]:top-[calc(var(--toast-inset)+var(--safe-area-top))]", "data-[position*=bottom]:bottom-[calc(var(--toast-inset)+var(--safe-area-bottom))]"),
|
|
65
67
|
"data-position": position,
|
|
66
68
|
"data-slot": "toast-viewport",
|
|
67
69
|
children: toasts.map((toastItem) => /* @__PURE__ */ jsx(Toast.Root, {
|
|
68
|
-
className: cn("bg-popover text-popover-foreground absolute z-[calc(9999-var(--toast-index))] h-(--toast-calc-height) w-full rounded-lg border shadow-lg/5 [transition:
|
|
70
|
+
className: cn("bg-popover text-popover-foreground absolute z-[calc(9999-var(--toast-index))] h-(--toast-calc-height) w-full rounded-lg border shadow-lg/5 [transition:transform_300ms_var(--ease-out),opacity_300ms_var(--ease-out),height_150ms_var(--ease-out)] not-dark:bg-clip-padding before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-lg)-1px)] before:shadow-[0_1px_--theme(--color-black/4%)] data-ending-style:[transition-duration:200ms,200ms,150ms] motion-reduce:transition-none dark:before:shadow-[0_-1px_--theme(--color-white/6%)]", "data-[position*=right]:start-auto data-[position*=right]:end-0", "data-[position*=left]:start-0 data-[position*=left]:end-auto", "data-[position*=center]:start-0 data-[position*=center]:end-0", "data-[position*=top]:top-0 data-[position*=top]:bottom-auto data-[position*=top]:origin-top", "data-[position*=bottom]:top-auto data-[position*=bottom]:bottom-0 data-[position*=bottom]:origin-bottom", "after:absolute after:start-0 after:h-[calc(var(--toast-gap)+1px)] after:w-full", "data-[position*=top]:after:top-full", "data-[position*=bottom]:after:bottom-full", "[--toast-calc-height:var(--toast-frontmost-height,var(--toast-height))] [--toast-gap:--spacing(3)] [--toast-peek:--spacing(3)] [--toast-scale:calc(max(0,1-(var(--toast-index)*.1)))] [--toast-shrink:calc(1-var(--toast-scale))]", "data-[position*=top]:[--toast-calc-offset-y:calc(var(--toast-offset-y)+var(--toast-index)*var(--toast-gap)+var(--toast-swipe-movement-y))]", "data-[position*=bottom]:[--toast-calc-offset-y:calc(var(--toast-offset-y)*-1+var(--toast-index)*var(--toast-gap)*-1+var(--toast-swipe-movement-y))]", "data-[position*=top]:transform-[translateX(var(--toast-swipe-movement-x))_translateY(calc(var(--toast-swipe-movement-y)+(var(--toast-index)*var(--toast-peek))+(var(--toast-shrink)*var(--toast-calc-height))))_scale(var(--toast-scale))]", "data-[position*=bottom]:transform-[translateX(var(--toast-swipe-movement-x))_translateY(calc(var(--toast-swipe-movement-y)-(var(--toast-index)*var(--toast-peek))-(var(--toast-shrink)*var(--toast-calc-height))))_scale(var(--toast-scale))]", "data-limited:opacity-0", "data-expanded:h-(--toast-height)", "data-position:data-expanded:transform-[translateX(var(--toast-swipe-movement-x))_translateY(var(--toast-calc-offset-y))]", "data-[position*=top]:data-starting-style:transform-[translateY(calc(-100%-var(--toast-inset)))]", "data-[position*=bottom]:data-starting-style:transform-[translateY(calc(100%+var(--toast-inset)))]", "data-ending-style:opacity-0", "data-ending-style:not-data-limited:not-data-swipe-direction:transform-[translateY(calc(100%+var(--toast-inset)))]", "data-ending-style:data-[swipe-direction=left]:transform-[translateX(calc(var(--toast-swipe-movement-x)-100%-var(--toast-inset)))_translateY(var(--toast-calc-offset-y))]", "data-ending-style:data-[swipe-direction=right]:transform-[translateX(calc(var(--toast-swipe-movement-x)+100%+var(--toast-inset)))_translateY(var(--toast-calc-offset-y))]", "data-ending-style:data-[swipe-direction=up]:transform-[translateY(calc(var(--toast-swipe-movement-y)-100%-var(--toast-inset)))]", "data-ending-style:data-[swipe-direction=down]:transform-[translateY(calc(var(--toast-swipe-movement-y)+100%+var(--toast-inset)))]", "data-expanded:data-ending-style:data-[swipe-direction=left]:transform-[translateX(calc(var(--toast-swipe-movement-x)-100%-var(--toast-inset)))_translateY(var(--toast-calc-offset-y))]", "data-expanded:data-ending-style:data-[swipe-direction=right]:transform-[translateX(calc(var(--toast-swipe-movement-x)+100%+var(--toast-inset)))_translateY(var(--toast-calc-offset-y))]", "data-expanded:data-ending-style:data-[swipe-direction=up]:transform-[translateY(calc(var(--toast-swipe-movement-y)-100%-var(--toast-inset)))]", "data-expanded:data-ending-style:data-[swipe-direction=down]:transform-[translateY(calc(var(--toast-swipe-movement-y)+100%+var(--toast-inset)))]"),
|
|
69
71
|
"data-position": position,
|
|
70
72
|
swipeDirection: (() => {
|
|
71
73
|
if (position.includes("center")) return [isTop ? "up" : "down"];
|
|
@@ -74,18 +76,22 @@ const Toasts = ({ position }) => {
|
|
|
74
76
|
})(),
|
|
75
77
|
toast: toastItem,
|
|
76
78
|
children: /* @__PURE__ */ jsxs(Toast.Content, {
|
|
77
|
-
className: "pointer-events-auto flex items-center gap-3
|
|
79
|
+
className: "pointer-events-auto flex items-center gap-3 px-3.5 py-3 text-sm transition-opacity duration-250 select-text data-behind:opacity-0 data-behind:not-data-expanded:pointer-events-none data-expanded:opacity-100",
|
|
78
80
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
79
81
|
className: "flex min-w-0 flex-1 gap-2",
|
|
80
|
-
children: [/* @__PURE__ */ jsx(ToastIcon, { type: toastItem.type }), /* @__PURE__ */
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
82
|
+
children: [/* @__PURE__ */ jsx(ToastIcon, { type: toastItem.type }), /* @__PURE__ */ jsx(ScrollArea, {
|
|
83
|
+
axis: "vertical",
|
|
84
|
+
className: "h-auto min-w-0 flex-1 [&_[data-slot=scroll-area-viewport]]:max-h-[60dvh]",
|
|
85
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
86
|
+
className: "flex min-w-0 flex-col gap-0.5 select-text",
|
|
87
|
+
children: [/* @__PURE__ */ jsx(Toast.Title, {
|
|
88
|
+
className: "font-medium wrap-anywhere whitespace-pre-wrap",
|
|
89
|
+
"data-slot": "toast-title"
|
|
90
|
+
}), /* @__PURE__ */ jsx(Toast.Description, {
|
|
91
|
+
className: "text-muted-foreground wrap-anywhere whitespace-pre-wrap",
|
|
92
|
+
"data-slot": "toast-description"
|
|
93
|
+
})]
|
|
94
|
+
})
|
|
89
95
|
})]
|
|
90
96
|
}), /* @__PURE__ */ jsxs("div", {
|
|
91
97
|
className: "ms-auto flex shrink-0 items-center gap-2",
|
|
@@ -132,20 +138,31 @@ const AnchoredToasts = () => {
|
|
|
132
138
|
toast: toastItem,
|
|
133
139
|
children: tooltipStyle ? /* @__PURE__ */ jsx(Toast.Content, {
|
|
134
140
|
className: "pointer-events-auto px-2 py-1 select-text",
|
|
135
|
-
children: /* @__PURE__ */ jsx(
|
|
141
|
+
children: /* @__PURE__ */ jsx(ScrollArea, {
|
|
142
|
+
axis: "vertical",
|
|
143
|
+
className: "h-auto [&_[data-slot=scroll-area-viewport]]:max-h-[60dvh]",
|
|
144
|
+
children: /* @__PURE__ */ jsx(Toast.Title, {
|
|
145
|
+
className: "wrap-anywhere whitespace-pre-wrap",
|
|
146
|
+
"data-slot": "toast-title"
|
|
147
|
+
})
|
|
148
|
+
})
|
|
136
149
|
}) : /* @__PURE__ */ jsxs(Toast.Content, {
|
|
137
|
-
className: "pointer-events-auto flex items-center gap-3
|
|
150
|
+
className: "pointer-events-auto flex items-center gap-3 px-3.5 py-3 text-sm select-text",
|
|
138
151
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
139
152
|
className: "flex min-w-0 flex-1 gap-2",
|
|
140
|
-
children: [/* @__PURE__ */ jsx(ToastIcon, { type: toastItem.type }), /* @__PURE__ */
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
153
|
+
children: [/* @__PURE__ */ jsx(ToastIcon, { type: toastItem.type }), /* @__PURE__ */ jsx(ScrollArea, {
|
|
154
|
+
axis: "vertical",
|
|
155
|
+
className: "h-auto min-w-0 flex-1 [&_[data-slot=scroll-area-viewport]]:max-h-[60dvh]",
|
|
156
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
157
|
+
className: "flex min-w-0 flex-col gap-0.5 select-text",
|
|
158
|
+
children: [/* @__PURE__ */ jsx(Toast.Title, {
|
|
159
|
+
className: "font-medium wrap-anywhere whitespace-pre-wrap",
|
|
160
|
+
"data-slot": "toast-title"
|
|
161
|
+
}), /* @__PURE__ */ jsx(Toast.Description, {
|
|
162
|
+
className: "text-muted-foreground wrap-anywhere whitespace-pre-wrap",
|
|
163
|
+
"data-slot": "toast-description"
|
|
164
|
+
})]
|
|
165
|
+
})
|
|
149
166
|
})]
|
|
150
167
|
}), toastItem.actionProps && /* @__PURE__ */ jsx(Toast.Action, {
|
|
151
168
|
className: cn(buttonVariants({ size: "xs" }), "ms-auto shrink-0 select-none"),
|
|
@@ -204,8 +221,8 @@ function normalizeToastActionProps({ action, actionProps, includeEmptyActionProp
|
|
|
204
221
|
} };
|
|
205
222
|
}
|
|
206
223
|
function getDefaultToastTimeout(type) {
|
|
207
|
-
if (type === "loading") return 0;
|
|
208
|
-
if (type === "
|
|
224
|
+
if (type === "loading" || type === "error") return 0;
|
|
225
|
+
if (type === "warning") return 6e3;
|
|
209
226
|
return 4e3;
|
|
210
227
|
}
|
|
211
228
|
function normalizeToastTimeout(timeout) {
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { NewChatIcon } from "../icons.js";
|
|
3
3
|
import { cn } from "../lib/utils.js";
|
|
4
4
|
import { SHELL_CHROME_LAYER_CLASS_NAME } from "../lib/overlay-layer.js";
|
|
5
|
+
import { SAFE_AREA_BOTTOM_EDGE_CLASS_NAME, SAFE_AREA_TOP_EDGE_CLASS_NAME } from "../lib/safe-area.js";
|
|
5
6
|
import { useIsMobile } from "../hooks/use-mobile.js";
|
|
6
7
|
import { InspectorRail, InspectorRailCell, InspectorRailContent, InspectorRailFooter, InspectorRailIconButton } from "../inspector/chrome.js";
|
|
7
8
|
import { Sheet, SheetContent as SheetPopup, SheetTitle, SheetTrigger } from "./sheet.js";
|
|
@@ -36,12 +37,12 @@ const WorkspaceShell = ({ children, endDock, navigation, topBar }) => {
|
|
|
36
37
|
})
|
|
37
38
|
});
|
|
38
39
|
const frame = /* @__PURE__ */ jsxs("div", {
|
|
39
|
-
className: "flex h-dvh min-h-0 w-full overflow-hidden",
|
|
40
|
+
className: cn("flex h-dvh min-h-0 w-full overflow-hidden", SAFE_AREA_TOP_EDGE_CLASS_NAME, SAFE_AREA_BOTTOM_EDGE_CLASS_NAME),
|
|
40
41
|
"data-slot": "workspace-shell",
|
|
41
42
|
children: [
|
|
42
43
|
navigation.mode === "responsive" ? navigation.content : navigation.desktop,
|
|
43
44
|
/* @__PURE__ */ jsxs("main", {
|
|
44
|
-
className: cn("bg-background relative flex w-full min-w-0 flex-1 flex-col overflow-hidden", "md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ms-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ms-2"),
|
|
45
|
+
className: cn("bg-background relative flex w-full min-w-0 flex-1 flex-col overflow-hidden", "max-md:ps-(--safe-area-inline-start) max-md:pe-(--safe-area-inline-end)", endDock === void 0 && "md:pe-(--safe-area-inline-end)", "md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ms-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ms-2"),
|
|
45
46
|
"data-slot": "workspace-shell-main",
|
|
46
47
|
children: [/* @__PURE__ */ jsx("div", {
|
|
47
48
|
className: cn("bg-background sticky top-0 shrink-0", SHELL_CHROME_LAYER_CLASS_NAME),
|
|
@@ -68,7 +69,7 @@ const WorkspaceShell = ({ children, endDock, navigation, topBar }) => {
|
|
|
68
69
|
className: "sr-only",
|
|
69
70
|
children: compactNavigation.label
|
|
70
71
|
}), /* @__PURE__ */ jsx("div", {
|
|
71
|
-
className: "bg-background flex h-full min-h-0 flex-col overflow-y-auto
|
|
72
|
+
className: "bg-background flex h-full min-h-0 flex-col overflow-y-auto overscroll-contain p-3",
|
|
72
73
|
"data-slot": "workspace-compact-navigation",
|
|
73
74
|
children: compactNavigation.content
|
|
74
75
|
})]
|
|
@@ -82,7 +83,7 @@ const WorkspaceShell = ({ children, endDock, navigation, topBar }) => {
|
|
|
82
83
|
*/
|
|
83
84
|
const WorkspaceEndRail = ({ chatAction, children, className, label, overlay, topAction }) => /* @__PURE__ */ jsxs(InspectorRail, {
|
|
84
85
|
"aria-label": label,
|
|
85
|
-
className: cn("h-
|
|
86
|
+
className: cn("h-full", className),
|
|
86
87
|
children: [
|
|
87
88
|
/* @__PURE__ */ jsx(InspectorRailCell, { children: topAction }),
|
|
88
89
|
/* @__PURE__ */ jsx(InspectorRailContent, { children }),
|
package/dist/icons.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { ActivityIcon, AddCommentIcon, AiActionIcon, AlarmClockIcon, AlertCircleIcon, AlertTriangleIcon, AlignJustifyIcon, AlignLeftIcon, ArchiveIcon, ArchiveRestoreIcon, ArrowDownIcon, ArrowLeftIcon, ArrowRightIcon, ArrowUpDownIcon, ArrowUpIcon, AtSignIcon, BanIcon, BanknoteIcon, BellIcon, BlocksIcon, BoldIcon, BookOpenCheckIcon, BookTextIcon, BookmarkIcon, BookmarkPlusIcon, BotIcon, BracesIcon, BrainIcon, Building2Icon, BuildingIcon, CableIcon, CalendarClockIcon, CalendarIcon, CaseLawIcon, CheckCheckIcon, CheckCircle2Icon, CheckIcon, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, ChevronsUpDownIcon, CircleAlertIcon, CircleCheckIcon, CircleDashedIcon, CircleDotIcon, CircleHelpIcon, CircleIcon, CircleOffIcon, CircleUserRoundIcon, ClipboardCheckIcon, ClipboardCopyIcon, ClipboardIcon, ClipboardListIcon, ClipboardPasteIcon, Clock3Icon, ClockIcon, CogIcon, Columns2Icon, Columns3Icon, ColumnsIcon, CommandIcon, CompassIcon, CopyIcon, CopyPlusIcon, CornerDownLeftIcon, CpuIcon, CropIcon, DatabaseIcon, DollarSignIcon, DownloadIcon, EditIcon, EllipsisIcon, EllipsisVerticalIcon, EqualIcon, ExternalLinkIcon, EyeIcon, EyeOffIcon, FileBadgeIcon, FileCheckIcon, FileCodeIcon, FileDiffIcon, FileDigitIcon, FileDownIcon, FileIcon, FileImageIcon, FileOutputIcon, FilePenLineIcon, FilePlus2Icon, FilePlusIcon, FileQuestionIcon, FileSearchIcon, FileSpreadsheetIcon, FileTextIcon, FileUpIcon, FilterIcon, FilterXIcon, FlagIcon, FlaskConicalIcon, FoldHorizontalIcon, FolderIcon, FolderInputIcon, FolderOpenIcon, FolderPlusIcon, FolderSyncIcon, FolderTreeIcon, FunctionSquareIcon, GanttChartIcon, GaugeIcon, GitBranchIcon, GitCommitHorizontalIcon, GitPullRequestIcon, GlobeIcon, GraduationCapIcon, GripVerticalIcon, HashIcon, Heading1Icon, Heading2Icon, Heading3Icon, HelpCircleIcon, HighlighterIcon, HistoryIcon, ImageIcon, ImageOffIcon, InboxIcon, InfoIcon, ItalicIcon, KanbanIcon, KeyRoundIcon, KeyboardIcon, LandmarkIcon, LanguagesIcon, LaptopIcon, LayersIcon, LayoutDashboardIcon, LayoutGridIcon, LayoutTemplateIcon, LibraryBigIcon, LibraryIcon, Link2Icon, LinkIcon, ListChecksIcon, ListFilterIcon, ListIcon, ListMinusIcon, ListOrderedIcon, ListTodoIcon, ListTreeIcon, ListXIcon, Loader2Icon, LoaderCircleIcon, LoaderIcon, LockIcon, LockKeyholeIcon, LockOpenIcon, LogOutIcon, MailIcon, Maximize2Icon, MegaphoneIcon, MessageCircleQuestionIcon, MessageSquareIcon, MessageSquareTextIcon, MessageSquareWarningIcon, MessagesSquareIcon, Minimize2Icon, MinusIcon, MonitorIcon, MoonIcon, MoreHorizontalIcon, NetworkIcon, NewChatIcon, PackageIcon, PaletteIcon, PanelLeftIcon, PanelRightIcon, PaperclipIcon, PauseIcon, PenIcon, PenLineIcon, PencilIcon, PencilLineIcon, PhoneIcon, PinIcon, PinOffIcon, PlayIcon, PlugIcon, PlusIcon, PowerIcon, PresentationIcon, PrinterIcon, QuoteIcon, Redo2Icon, RefreshCcwIcon, RefreshCwIcon, RepeatIcon, RotateCcwIcon, RotateCwIcon, RouteIcon, Rows2Icon, Rows3Icon, SaveIcon, ScanSearchIcon, ScanTextIcon, ScissorsIcon, ScrollTextIcon, SearchIcon, SearchXIcon, SendIcon, ServerIcon, Settings2Icon, ShapesIcon, ShieldAlertIcon, ShieldCheckIcon, ShieldIcon, SigmaIcon, SignatureIcon, SkillIcon, SlashIcon, SlidersHorizontalIcon, SparklesIcon, SplitIcon, SquareCheckIcon, SquareIcon, SquareMinusIcon, SquarePenIcon, StarIcon, StarOffIcon, StickyNoteIcon, StrikethroughIcon, SunIcon, TableIcon, TagIcon, TagsIcon, TerminalIcon, TextIcon, TextQuoteIcon, ToggleLeftIcon, Trash2Icon, TrashIcon, TriangleAlertIcon, UnderlineIcon, Undo2Icon, UndoIcon, UnfoldHorizontalIcon, UngroupIcon, UploadIcon, UserCheckIcon, UserIcon, UserPlusIcon, UserRoundIcon, UsersIcon, VideoIcon, WavesIcon, WindIcon, WorkflowIcon, WrapTextIcon, WrenchIcon, XCircleIcon, XIcon, XSquareIcon, ZapIcon };
|
|
1
|
+
export { ActivityIcon, MessageSquareQuoteIcon as AddCommentIcon, WandSparklesIcon as AiActionIcon, AlarmClockIcon, AlertCircleIcon, AlertTriangleIcon, AlignJustifyIcon, AlignLeftIcon, ArchiveIcon, ArchiveRestoreIcon, ArrowDownIcon, ArrowLeftIcon, ArrowRightIcon, ArrowUpDownIcon, ArrowUpIcon, AtSignIcon, BanIcon, BanknoteIcon, BellIcon, BlocksIcon, BoldIcon, BookOpenCheckIcon, BookTextIcon, BookmarkIcon, BookmarkPlusIcon, BotIcon, BracesIcon, BrainIcon, Building2Icon, BuildingIcon, CableIcon, CalendarClockIcon, CalendarIcon, BookOpenIcon as CaseLawIcon, CheckCheckIcon, CheckCircle2Icon, CheckIcon, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, ChevronsUpDownIcon, CircleAlertIcon, CircleCheckIcon, CircleDashedIcon, CircleDotIcon, CircleHelpIcon, CircleIcon, CircleOffIcon, CircleUserRoundIcon, ClipboardCheckIcon, ClipboardCopyIcon, ClipboardIcon, ClipboardListIcon, ClipboardPasteIcon, Clock3Icon, ClockIcon, CogIcon, Columns2Icon, Columns3Icon, ColumnsIcon, CommandIcon, CompassIcon, CopyIcon, CopyPlusIcon, CornerDownLeftIcon, CpuIcon, CropIcon, DatabaseIcon, DollarSignIcon, DownloadIcon, EditIcon, EllipsisIcon, EllipsisVerticalIcon, EqualIcon, ExternalLinkIcon, EyeIcon, EyeOffIcon, FileBadgeIcon, FileCheckIcon, FileCodeIcon, FileDiffIcon, FileDigitIcon, FileDownIcon, FileIcon, FileImageIcon, FileOutputIcon, FilePenLineIcon, FilePlus2Icon, FilePlusIcon, FileQuestionIcon, FileSearchIcon, FileSpreadsheetIcon, FileTextIcon, FileUpIcon, FilterIcon, FilterXIcon, FlagIcon, FlaskConicalIcon, FoldHorizontalIcon, FolderIcon, FolderInputIcon, FolderOpenIcon, FolderPlusIcon, FolderSyncIcon, FolderTreeIcon, FunctionSquareIcon, GanttChartIcon, GaugeIcon, GitBranchIcon, GitCommitHorizontalIcon, GitPullRequestIcon, GlobeIcon, GraduationCapIcon, GripVerticalIcon, HashIcon, Heading1Icon, Heading2Icon, Heading3Icon, HelpCircleIcon, HighlighterIcon, HistoryIcon, ImageIcon, ImageOffIcon, InboxIcon, InfoIcon, ItalicIcon, KanbanIcon, KeyRoundIcon, KeyboardIcon, LandmarkIcon, LanguagesIcon, LaptopIcon, LayersIcon, LayoutDashboardIcon, LayoutGridIcon, LayoutTemplateIcon, LibraryBigIcon, LibraryIcon, Link2Icon, LinkIcon, ListChecksIcon, ListFilterIcon, ListIcon, ListMinusIcon, ListOrderedIcon, ListTodoIcon, ListTreeIcon, ListXIcon, Loader2Icon, LoaderCircleIcon, LoaderIcon, LockIcon, LockKeyholeIcon, LockOpenIcon, LogOutIcon, MailIcon, Maximize2Icon, MegaphoneIcon, MessageCircleQuestionIcon, MessageSquareIcon, MessageSquareTextIcon, MessageSquareWarningIcon, MessagesSquareIcon, Minimize2Icon, MinusIcon, MonitorIcon, MoonIcon, MoreHorizontalIcon, NetworkIcon, MessageSquarePlusIcon as NewChatIcon, PackageIcon, PaletteIcon, PanelLeftIcon, PanelRightIcon, PaperclipIcon, PauseIcon, PenIcon, PenLineIcon, PencilIcon, PencilLineIcon, PhoneIcon, PinIcon, PinOffIcon, PlayIcon, PlugIcon, PlusIcon, PowerIcon, PresentationIcon, PrinterIcon, QuoteIcon, Redo2Icon, RefreshCcwIcon, RefreshCwIcon, RepeatIcon, RotateCcwIcon, RotateCwIcon, RouteIcon, Rows2Icon, Rows3Icon, SaveIcon, ScanSearchIcon, ScanTextIcon, ScissorsIcon, ScrollTextIcon, SearchIcon, SearchXIcon, SendIcon, ServerIcon, Settings2Icon, ShapesIcon, ShieldAlertIcon, ShieldCheckIcon, ShieldIcon, SigmaIcon, SignatureIcon, BookOpenIcon as SkillIcon, SlashIcon, SlidersHorizontalIcon, SparklesIcon, SplitIcon, SquareCheckIcon, SquareIcon, SquareMinusIcon, SquarePenIcon, StarIcon, StarOffIcon, StickyNoteIcon, StrikethroughIcon, SunIcon, TableIcon, TagIcon, TagsIcon, TerminalIcon, TextIcon, TextQuoteIcon, ToggleLeftIcon, Trash2Icon, TrashIcon, TriangleAlertIcon, UnderlineIcon, Undo2Icon, UndoIcon, UnfoldHorizontalIcon, UngroupIcon, UploadIcon, UserCheckIcon, UserIcon, UserPlusIcon, UserRoundIcon, UsersIcon, VideoIcon, WavesIcon, WindIcon, WorkflowIcon, WrapTextIcon, WrenchIcon, XCircleIcon, XIcon, XSquareIcon, ZapIcon } from "lucide-react";
|