@timbal-ai/timbal-react 1.6.0 → 1.7.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/CHANGELOG.md +39 -0
- package/README.md +8 -0
- package/dist/app.cjs +167 -75
- package/dist/app.d.cts +3 -3
- package/dist/app.d.ts +3 -3
- package/dist/app.esm.js +5 -5
- package/dist/{chart-artifact-VAqgH-My.d.cts → chart-artifact-CuTiCITz.d.cts} +230 -15
- package/dist/{chart-artifact-C2pZQsaP.d.ts → chart-artifact-U-x0UNJm.d.ts} +230 -15
- package/dist/chat.esm.js +3 -3
- package/dist/{chunk-YYEI6XME.esm.js → chunk-22KWC2LS.esm.js} +5 -5
- package/dist/{chunk-MBS7XHV2.esm.js → chunk-45NXD3IG.esm.js} +3 -3
- package/dist/{chunk-24B4I4XC.esm.js → chunk-64RHAJVG.esm.js} +1 -1
- package/dist/{chunk-WQIQW7EM.esm.js → chunk-7AGIAQE6.esm.js} +1 -1
- package/dist/{chunk-NO5AWNWT.esm.js → chunk-7WU3IKAN.esm.js} +1 -1
- package/dist/{chunk-6SQMTBPL.esm.js → chunk-M5IBJBEY.esm.js} +109 -23
- package/dist/{chunk-HSL36SJ4.esm.js → chunk-PMMI7LBV.esm.js} +20 -8
- package/dist/{chunk-TMP7RIA7.esm.js → chunk-VKXOHVDE.esm.js} +2 -2
- package/dist/{chunk-ELEY66OH.esm.js → chunk-XOCOZU7J.esm.js} +11 -1
- package/dist/cli/timbal-ui-lint.mjs +534 -0
- package/dist/index.cjs +303 -200
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.esm.js +9 -9
- package/dist/{kanban-FFBeaZPS.d.cts → kanban-BQxWliCS.d.cts} +17 -0
- package/dist/{kanban-FFBeaZPS.d.ts → kanban-BQxWliCS.d.ts} +17 -0
- package/dist/studio.cjs +104 -85
- package/dist/studio.esm.js +6 -6
- package/dist/ui.cjs +6 -6
- package/dist/ui.d.cts +1 -1
- package/dist/ui.d.ts +1 -1
- package/dist/ui.esm.js +4 -4
- package/package.json +13 -3
package/dist/app.cjs
CHANGED
|
@@ -272,6 +272,13 @@ var HOUSE_RULES = [
|
|
|
272
272
|
slop: `<span className="text-blue-600 bg-green-50">`,
|
|
273
273
|
good: `<span className="text-primary bg-muted">`
|
|
274
274
|
},
|
|
275
|
+
{
|
|
276
|
+
id: "chart-token-color",
|
|
277
|
+
rule: "Pass chart and theme color tokens directly (var(--chart-1)) \u2014 never wrap them in hsl(), rgb(), or oklch().",
|
|
278
|
+
why: "The --chart-N and theme tokens are already full OKLCH colors. Wrapping them in hsl()/rgb() is invalid CSS, so the chart renders empty/uncolored \u2014 and the build still passes, so it's a silent runtime bug.",
|
|
279
|
+
slop: `<Cell fill="hsl(var(--chart-1))" />`,
|
|
280
|
+
good: `<Cell fill="var(--chart-1)" />`
|
|
281
|
+
},
|
|
275
282
|
{
|
|
276
283
|
id: "no-decorative-icons",
|
|
277
284
|
rule: "Icons must earn their place (action, nav, or status). Never add an icon beside a label that already says the thing.",
|
|
@@ -318,7 +325,11 @@ var HOUSE_RULES = [
|
|
|
318
325
|
{
|
|
319
326
|
id: "compose-from-blocks",
|
|
320
327
|
rule: "Build from premade blocks (MetricRow, MetricChartCard, DataTable, IntegrationCard). Drop to raw primitives only when no block fits.",
|
|
321
|
-
why: "Slop appears the moment generation falls below the curated block layer."
|
|
328
|
+
why: "Slop appears the moment generation falls below the curated block layer.",
|
|
329
|
+
// "Should have used a block" is a judgement about absence, not a textual
|
|
330
|
+
// pattern — no high-precision deterministic check exists, so this stays
|
|
331
|
+
// prompt-only rather than risk false-positives blocking valid UIs.
|
|
332
|
+
enforcement: "prompt-only"
|
|
322
333
|
},
|
|
323
334
|
{
|
|
324
335
|
id: "use-kit-controls",
|
|
@@ -399,7 +410,7 @@ The content region is a **padded scroll area** by default \u2014 great for stack
|
|
|
399
410
|
- Give the filling child **\`min-h-0 flex-1\`** (or \`h-full\`) so its own scroll/footer resolves \u2014 e.g. \`<TimbalChat className="min-h-0 flex-1" />\`, or a two-pane row where each pane is \`min-h-0 overflow-y-auto\`.
|
|
400
411
|
|
|
401
412
|
\`\`\`tsx
|
|
402
|
-
<AppShell contentFill topbar
|
|
413
|
+
<AppShell contentFill> {/* no global topbar / theme switch */}
|
|
403
414
|
<Page fill> {/* headerless: omit title */}
|
|
404
415
|
<TimbalChat workforceId="\u2026" className="min-h-0 flex-1" />
|
|
405
416
|
</Page>
|
|
@@ -503,6 +514,8 @@ The cause of slop is dropping **below** the curated block layer into raw primiti
|
|
|
503
514
|
|
|
504
515
|
Charts run on **recharts** with shadcn \`ChartContainer\` / \`ChartTooltipContent\` chrome (see \`src/ui/chart.tsx\`). Series colors default to \`--chart-1..6\`; override those CSS tokens to rebrand every chart.
|
|
505
516
|
|
|
517
|
+
> **React 19 requirement \u2014 do not hand-roll SVG charts to work around this.** recharts under React 19 crashes (\`Cannot assign to read only property 'lanes'\`, blank route) when \`immer\` resolves to **11.0.0**. The fix is a dependency override in the app's \`package.json\` \u2014 \`"overrides": { "immer": ">=11.0.1" }\` (Yarn: \`"resolutions"\`) \u2014 **not** a code change. Always keep using \`LineAreaChart\` / \`PieChart\` / \`ChartPanel\`; never replace them with raw SVG/CSS charts.
|
|
518
|
+
|
|
506
519
|
| Component | Use for |
|
|
507
520
|
|-----------|---------|
|
|
508
521
|
| \`LineAreaChart\` | Cartesian engine (shadcn-style chrome). Bar fills use theme gradients automatically. Props: \`data\`, \`xKey\`, \`series: [{ dataKey, label?, color? }]\`, \`variant\` (\`area\`\\|\`line\`\\|\`bar\`), \`orientation\` (\`horizontal\` for horizontal bars), \`stacked\`, \`curve\`, \`dots\`, \`gridLines\`, \`tooltipIndicator\`, \`layout\` (\`flush\` \u2014 hides axes by default; category + values on hover tooltip), \`showXAxis\` / \`showYAxis\` to opt back in, \`clipTicks\` (truncates long axis labels when axes are on), \`height\`, \`showLegend\`, \`formatX\`, \`formatValue\`, \`ariaLabel\`. |
|
|
@@ -667,6 +680,7 @@ var RAW_COLOR_RE = new RegExp(
|
|
|
667
680
|
"g"
|
|
668
681
|
);
|
|
669
682
|
var COLOR_LITERAL_RE = /#[0-9a-fA-F]{3,8}\b|\b(?:oklch|rgba?|hsla?)\s*\(/g;
|
|
683
|
+
var COLOR_FN_WRAPPING_VAR_RE = /\b(?:hsl|hsla|rgb|rgba|oklch|oklab|lab|lch|hwb|color)\s*\(\s*var\(\s*--/i;
|
|
670
684
|
var INLINE_STYLE_COLOR_RE = /style=\{\{[^}]*\b(?:color|background|backgroundColor|borderColor|fill|stroke)\b/;
|
|
671
685
|
var BOLD_VALUE_RE = /text-(?:xl|2xl|3xl|4xl|5xl|6xl)[^"'`]*\bfont-(?:bold|extrabold|black|semibold)|font-(?:bold|extrabold|black|semibold)[^"'`]*text-(?:xl|2xl|3xl|4xl|5xl|6xl)/;
|
|
672
686
|
var GRADIENT_RE = /\bbg-(?:gradient|linear|radial|conic)-/;
|
|
@@ -683,15 +697,32 @@ var GRADIENT_DIRECTIONS = /* @__PURE__ */ new Set([
|
|
|
683
697
|
var ICON_IMPORT_RE = /from\s+["']lucide-react["']/;
|
|
684
698
|
var RAW_CONTROL_SURFACE_RE = /\bborder-input\b/;
|
|
685
699
|
var COLORED_HOVER_RE = /\bhover:(?:bg|from|to|via)-(?:primary|destructive|success|warn|danger|blue|emerald|green|amber|red|indigo|violet|purple|pink|rose|sky|cyan|teal|lime|yellow|orange|fuchsia)\b/;
|
|
700
|
+
var TREND_CONTEXT_RE = /\b(?:trend|delta|TrendingUp|TrendingDown|ArrowUp|ArrowDown|ArrowUpRight|ArrowDownRight|MoveUp|MoveDown)\b|[+\-]\d+(?:\.\d+)?\s*%/;
|
|
701
|
+
var TREND_COLOR_RE = /\b(?:text|bg|border)-(?:success|destructive|emerald|green|lime|teal|red|rose|orange|amber)(?:-\d{2,3})?(?:\/\d{1,3})?\b/;
|
|
686
702
|
var RESERVED_GRADIENT_SET = new Set(RESERVED_GRADIENT_TOKENS);
|
|
687
703
|
function stripVariants(util) {
|
|
688
704
|
return util.replace(/^(?:[a-z-]+:)*/, "");
|
|
689
705
|
}
|
|
706
|
+
function describeArg(value) {
|
|
707
|
+
if (value === null) return "null";
|
|
708
|
+
if (Array.isArray(value)) return "an array";
|
|
709
|
+
const t = typeof value;
|
|
710
|
+
if (t === "object") {
|
|
711
|
+
const keys = Object.keys(value).slice(0, 4);
|
|
712
|
+
return keys.length ? `an object with keys { ${keys.join(", ")} }` : "an object";
|
|
713
|
+
}
|
|
714
|
+
return `a ${t}`;
|
|
715
|
+
}
|
|
690
716
|
function isCommentOrImport(line) {
|
|
691
717
|
const t = line.trim();
|
|
692
718
|
return t.startsWith("//") || t.startsWith("*") || t.startsWith("/*") || t.startsWith("import ") || t.startsWith("export ");
|
|
693
719
|
}
|
|
694
720
|
function lintGeneratedUi(source, options = {}) {
|
|
721
|
+
if (typeof source !== "string") {
|
|
722
|
+
throw new TypeError(
|
|
723
|
+
`lintGeneratedUi(source, options?) expects the generated code as a string, but received ${describeArg(source)}. Pass the raw .tsx source \u2014 lintGeneratedUi(code) \u2014 not an object like { filename, source } and not a previous LintResult.`
|
|
724
|
+
);
|
|
725
|
+
}
|
|
695
726
|
const maxIcons = options.maxIconsPerView ?? SLOP_BUDGETS.maxIconsPerView;
|
|
696
727
|
const maxRowDividers = options.maxRowDividers ?? SLOP_BUDGETS.maxRowDividers;
|
|
697
728
|
const findings = [];
|
|
@@ -726,6 +757,16 @@ function lintGeneratedUi(source, options = {}) {
|
|
|
726
757
|
if (cardMatch) {
|
|
727
758
|
const isSelfClosing = /\/>/.test(line) && line.indexOf(cardMatch[0]) < line.indexOf("/>");
|
|
728
759
|
if (!isSelfClosing) {
|
|
760
|
+
if (openCards.length > 0) {
|
|
761
|
+
const parentCard = openCards[openCards.length - 1];
|
|
762
|
+
findings.push({
|
|
763
|
+
rule: "no-card-in-card",
|
|
764
|
+
severity: "warn",
|
|
765
|
+
line: lineNo,
|
|
766
|
+
message: `Card inside card. A <${cardMatch[1]}> is nested inside the <${parentCard.type}> opened on L${parentCard.line}. Double borders/shadows add no information \u2014 group with spacing or a <Section> instead.`,
|
|
767
|
+
snippet: line.trim().slice(0, 120)
|
|
768
|
+
});
|
|
769
|
+
}
|
|
729
770
|
openCards.push({ type: cardMatch[1], line: lineNo });
|
|
730
771
|
}
|
|
731
772
|
}
|
|
@@ -761,7 +802,17 @@ function lintGeneratedUi(source, options = {}) {
|
|
|
761
802
|
});
|
|
762
803
|
}
|
|
763
804
|
}
|
|
764
|
-
const
|
|
805
|
+
const wrapsTokenInColorFn = COLOR_FN_WRAPPING_VAR_RE.test(line);
|
|
806
|
+
if (wrapsTokenInColorFn) {
|
|
807
|
+
findings.push({
|
|
808
|
+
rule: "chart-token-color-fn",
|
|
809
|
+
severity: "error",
|
|
810
|
+
line: lineNo,
|
|
811
|
+
message: "Color function wrapping a token (e.g. hsl(var(--chart-1))). The --chart-N and theme tokens are already OKLCH colors \u2014 wrapping them in hsl()/rgb() is invalid CSS and renders an empty/uncolored chart (the build still passes). Pass the token directly: var(--chart-1), or let the app-kit charts use --chart-N automatically.",
|
|
812
|
+
snippet: line.trim().slice(0, 120)
|
|
813
|
+
});
|
|
814
|
+
}
|
|
815
|
+
const literals = wrapsTokenInColorFn ? null : line.match(COLOR_LITERAL_RE);
|
|
765
816
|
if (literals) {
|
|
766
817
|
findings.push({
|
|
767
818
|
rule: "color-literal",
|
|
@@ -798,6 +849,15 @@ function lintGeneratedUi(source, options = {}) {
|
|
|
798
849
|
snippet: line.trim().slice(0, 120)
|
|
799
850
|
});
|
|
800
851
|
}
|
|
852
|
+
if (TREND_CONTEXT_RE.test(line) && TREND_COLOR_RE.test(line)) {
|
|
853
|
+
findings.push({
|
|
854
|
+
rule: "neutral-trend",
|
|
855
|
+
severity: "warn",
|
|
856
|
+
line: lineNo,
|
|
857
|
+
message: "Colored trend indicator. House style: don't tint deltas green/red on every metric \u2014 show a trend only when the change is the point, and keep it muted (text-muted-foreground).",
|
|
858
|
+
snippet: line.trim().slice(0, 120)
|
|
859
|
+
});
|
|
860
|
+
}
|
|
801
861
|
if (BOLD_VALUE_RE.test(line)) {
|
|
802
862
|
findings.push({
|
|
803
863
|
rule: "bold-metric",
|
|
@@ -903,6 +963,11 @@ function lintGeneratedUi(source, options = {}) {
|
|
|
903
963
|
};
|
|
904
964
|
}
|
|
905
965
|
function formatLintReport(findings) {
|
|
966
|
+
if (!Array.isArray(findings)) {
|
|
967
|
+
throw new TypeError(
|
|
968
|
+
`formatLintReport(findings) expects the findings array, but received ${describeArg(findings)}. Pass result.findings \u2014 formatLintReport(lintGeneratedUi(code).findings) \u2014 not the whole LintResult.`
|
|
969
|
+
);
|
|
970
|
+
}
|
|
906
971
|
if (findings.length === 0) return "";
|
|
907
972
|
const lines = findings.slice().sort((a, b) => a.line - b.line).map((f) => {
|
|
908
973
|
const tag = f.severity === "error" ? "ERROR" : "warn ";
|
|
@@ -2676,6 +2741,7 @@ var MetricTile = ({
|
|
|
2676
2741
|
var import_jsx_runtime7 = require("react/jsx-runtime");
|
|
2677
2742
|
|
|
2678
2743
|
// src/app/layout/AppShell.tsx
|
|
2744
|
+
var import_lucide_react = require("lucide-react");
|
|
2679
2745
|
var import_react6 = require("motion/react");
|
|
2680
2746
|
var import_react7 = require("react");
|
|
2681
2747
|
|
|
@@ -2722,18 +2788,25 @@ function useAppShellChat() {
|
|
|
2722
2788
|
return (0, import_react4.useContext)(AppShellChatContext);
|
|
2723
2789
|
}
|
|
2724
2790
|
|
|
2725
|
-
// src/
|
|
2791
|
+
// src/layout/shell-nav-context.tsx
|
|
2726
2792
|
var import_react5 = require("react");
|
|
2727
|
-
var
|
|
2728
|
-
var
|
|
2793
|
+
var ShellNavContext = (0, import_react5.createContext)(null);
|
|
2794
|
+
var ShellNavProvider = ShellNavContext.Provider;
|
|
2795
|
+
function useOptionalShellNav() {
|
|
2796
|
+
return (0, import_react5.useContext)(ShellNavContext);
|
|
2797
|
+
}
|
|
2798
|
+
|
|
2799
|
+
// src/app/layout/app-shell-nav-context.tsx
|
|
2800
|
+
var AppShellNavProvider = ShellNavProvider;
|
|
2801
|
+
var NAV_NOOP = {
|
|
2802
|
+
open: false,
|
|
2803
|
+
setOpen: () => {
|
|
2804
|
+
},
|
|
2805
|
+
toggle: () => {
|
|
2806
|
+
}
|
|
2807
|
+
};
|
|
2729
2808
|
function useAppShellNav() {
|
|
2730
|
-
return (
|
|
2731
|
-
open: false,
|
|
2732
|
-
setOpen: () => {
|
|
2733
|
-
},
|
|
2734
|
-
toggle: () => {
|
|
2735
|
-
}
|
|
2736
|
-
};
|
|
2809
|
+
return useOptionalShellNav() ?? NAV_NOOP;
|
|
2737
2810
|
}
|
|
2738
2811
|
|
|
2739
2812
|
// src/app/layout/AppShell.tsx
|
|
@@ -2744,6 +2817,12 @@ var floatingTriggerClass = cn(
|
|
|
2744
2817
|
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
|
|
2745
2818
|
"bottom-6 right-6 max-sm:bottom-4 max-sm:right-4"
|
|
2746
2819
|
);
|
|
2820
|
+
var floatingNavTriggerClass = cn(
|
|
2821
|
+
"aui-app-shell-nav-trigger-fixed fixed left-4 top-4 z-30 inline-flex size-10 items-center justify-center rounded-xl md:hidden",
|
|
2822
|
+
"border border-border/60 bg-card/85 text-foreground shadow-card-elevated backdrop-blur-xl supports-backdrop-filter:bg-card/75",
|
|
2823
|
+
"transition-colors hover:bg-card",
|
|
2824
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background"
|
|
2825
|
+
);
|
|
2747
2826
|
var floatingPanelClass = cn(
|
|
2748
2827
|
"aui-app-shell-chat-float fixed z-50 flex flex-col overflow-hidden rounded-2xl border border-border/60 shadow-card-elevated",
|
|
2749
2828
|
"bg-card/85 backdrop-blur-xl supports-backdrop-filter:bg-card/75",
|
|
@@ -2834,12 +2913,14 @@ var AppShell = ({
|
|
|
2834
2913
|
navOpen: navOpenProp,
|
|
2835
2914
|
defaultNavOpen = false,
|
|
2836
2915
|
onNavOpenChange,
|
|
2916
|
+
mobileSidebarTrigger = "auto",
|
|
2837
2917
|
className,
|
|
2838
2918
|
mainClassName,
|
|
2839
2919
|
contentFill = false
|
|
2840
2920
|
}) => {
|
|
2841
2921
|
const topbarContent = topbar ?? header;
|
|
2842
2922
|
const hasChat = Boolean(chat);
|
|
2923
|
+
const showFloatingNavTrigger = Boolean(sidebar) && mobileSidebarTrigger !== "none" && !(mobileSidebarTrigger === "topbar") && !topbarContent;
|
|
2843
2924
|
const [uncontrolledNavOpen, setUncontrolledNavOpen] = (0, import_react7.useState)(defaultNavOpen);
|
|
2844
2925
|
const isNavControlled = navOpenProp !== void 0;
|
|
2845
2926
|
const navOpen = isNavControlled ? navOpenProp : uncontrolledNavOpen;
|
|
@@ -2899,6 +2980,17 @@ var AppShell = ({
|
|
|
2899
2980
|
style: studioChromeShellStyle,
|
|
2900
2981
|
children: [
|
|
2901
2982
|
sidebar,
|
|
2983
|
+
showFloatingNavTrigger && !navOpen ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
2984
|
+
"button",
|
|
2985
|
+
{
|
|
2986
|
+
type: "button",
|
|
2987
|
+
"aria-label": "Open navigation",
|
|
2988
|
+
"aria-expanded": false,
|
|
2989
|
+
onClick: () => setNavOpen(true),
|
|
2990
|
+
className: floatingNavTriggerClass,
|
|
2991
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_lucide_react.MenuIcon, { className: "size-5", "aria-hidden": true })
|
|
2992
|
+
}
|
|
2993
|
+
) : null,
|
|
2902
2994
|
sidebar && navOpen ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
2903
2995
|
"button",
|
|
2904
2996
|
{
|
|
@@ -3112,7 +3204,7 @@ var AppShellChatTrigger = ({
|
|
|
3112
3204
|
};
|
|
3113
3205
|
|
|
3114
3206
|
// src/app/layout/AppShellSidebarTrigger.tsx
|
|
3115
|
-
var
|
|
3207
|
+
var import_lucide_react2 = require("lucide-react");
|
|
3116
3208
|
var import_jsx_runtime11 = require("react/jsx-runtime");
|
|
3117
3209
|
var AppShellSidebarTrigger = ({
|
|
3118
3210
|
label = "Open navigation",
|
|
@@ -3131,7 +3223,7 @@ var AppShellSidebarTrigger = ({
|
|
|
3131
3223
|
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-foreground/10",
|
|
3132
3224
|
className
|
|
3133
3225
|
),
|
|
3134
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
3226
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_lucide_react2.MenuIcon, { className: "size-5", "aria-hidden": true })
|
|
3135
3227
|
}
|
|
3136
3228
|
);
|
|
3137
3229
|
};
|
|
@@ -3283,17 +3375,17 @@ function useAppCopilotContext() {
|
|
|
3283
3375
|
}
|
|
3284
3376
|
|
|
3285
3377
|
// src/app/chat/AppChatPanel.tsx
|
|
3286
|
-
var
|
|
3378
|
+
var import_lucide_react11 = require("lucide-react");
|
|
3287
3379
|
|
|
3288
3380
|
// src/chat/thread.tsx
|
|
3289
3381
|
var import_react38 = require("react");
|
|
3290
3382
|
var import_react39 = require("@assistant-ui/react");
|
|
3291
|
-
var
|
|
3383
|
+
var import_lucide_react10 = require("lucide-react");
|
|
3292
3384
|
var import_react40 = require("motion/react");
|
|
3293
3385
|
|
|
3294
3386
|
// src/chat/attachment.tsx
|
|
3295
3387
|
var import_react10 = require("react");
|
|
3296
|
-
var
|
|
3388
|
+
var import_lucide_react4 = require("lucide-react");
|
|
3297
3389
|
var import_react11 = require("@assistant-ui/react");
|
|
3298
3390
|
var import_shallow = require("zustand/shallow");
|
|
3299
3391
|
|
|
@@ -3348,7 +3440,7 @@ function TooltipContent({
|
|
|
3348
3440
|
}
|
|
3349
3441
|
|
|
3350
3442
|
// src/ui/dialog.tsx
|
|
3351
|
-
var
|
|
3443
|
+
var import_lucide_react3 = require("lucide-react");
|
|
3352
3444
|
var import_radix_ui4 = require("radix-ui");
|
|
3353
3445
|
var import_jsx_runtime18 = require("react/jsx-runtime");
|
|
3354
3446
|
function Dialog({
|
|
@@ -3408,7 +3500,7 @@ function DialogContent({
|
|
|
3408
3500
|
"data-slot": "dialog-close",
|
|
3409
3501
|
className: "ring-offset-background focus:ring-ring data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-[opacity,background-color] hover:bg-ghost-fill-hover hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
3410
3502
|
children: [
|
|
3411
|
-
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
3503
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react3.XIcon, {}),
|
|
3412
3504
|
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "sr-only", children: "Close" })
|
|
3413
3505
|
]
|
|
3414
3506
|
}
|
|
@@ -3636,7 +3728,7 @@ var AttachmentThumb = () => {
|
|
|
3636
3728
|
className: "aui-attachment-tile-image object-cover"
|
|
3637
3729
|
}
|
|
3638
3730
|
),
|
|
3639
|
-
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(AvatarFallback, { delayMs: isImage ? 200 : 0, children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
3731
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(AvatarFallback, { delayMs: isImage ? 200 : 0, children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react4.FileText, { className: "aui-attachment-tile-fallback-icon size-8 text-muted-foreground" }) })
|
|
3640
3732
|
] });
|
|
3641
3733
|
};
|
|
3642
3734
|
var AttachmentUI = () => {
|
|
@@ -3692,7 +3784,7 @@ var AttachmentRemove = () => {
|
|
|
3692
3784
|
tooltip: "Remove file",
|
|
3693
3785
|
className: "aui-attachment-tile-remove absolute top-1.5 right-1.5 size-3.5 rounded-full bg-card text-foreground opacity-100 shadow-card hover:bg-card! [&_svg]:text-foreground hover:[&_svg]:text-destructive",
|
|
3694
3786
|
side: "top",
|
|
3695
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
3787
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react4.XIcon, { className: "aui-attachment-remove-icon size-3" })
|
|
3696
3788
|
}
|
|
3697
3789
|
) });
|
|
3698
3790
|
};
|
|
@@ -3716,7 +3808,7 @@ var ComposerAddAttachment = () => {
|
|
|
3716
3808
|
variant: "secondary",
|
|
3717
3809
|
className: "aui-composer-add-attachment shrink-0 text-muted-foreground",
|
|
3718
3810
|
"aria-label": "Add Attachment",
|
|
3719
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
3811
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react4.PlusIcon, { className: "aui-attachment-add-icon size-4 stroke-[1.5]" })
|
|
3720
3812
|
}
|
|
3721
3813
|
) });
|
|
3722
3814
|
};
|
|
@@ -3729,7 +3821,7 @@ var import_remark_gfm = __toESM(require("remark-gfm"), 1);
|
|
|
3729
3821
|
var import_remark_math = __toESM(require("remark-math"), 1);
|
|
3730
3822
|
var import_rehype_katex = __toESM(require("rehype-katex"), 1);
|
|
3731
3823
|
var import_react25 = require("react");
|
|
3732
|
-
var
|
|
3824
|
+
var import_lucide_react6 = require("lucide-react");
|
|
3733
3825
|
|
|
3734
3826
|
// src/chat/syntax-highlighter.tsx
|
|
3735
3827
|
var import_react24 = require("react");
|
|
@@ -4963,7 +5055,7 @@ function inferDataKeys(data, xKey) {
|
|
|
4963
5055
|
// src/artifacts/question-artifact.tsx
|
|
4964
5056
|
var import_react16 = require("react");
|
|
4965
5057
|
var import_react17 = require("@assistant-ui/react");
|
|
4966
|
-
var
|
|
5058
|
+
var import_lucide_react5 = require("lucide-react");
|
|
4967
5059
|
var import_jsx_runtime32 = require("react/jsx-runtime");
|
|
4968
5060
|
function optionKey(option, index) {
|
|
4969
5061
|
const id = option.id?.trim();
|
|
@@ -4977,7 +5069,7 @@ var OptionRadio = ({ selected }) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx
|
|
|
4977
5069
|
selected ? "border-foreground bg-foreground text-background" : "border-border bg-background"
|
|
4978
5070
|
),
|
|
4979
5071
|
"aria-hidden": true,
|
|
4980
|
-
children: selected ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
|
|
5072
|
+
children: selected ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react5.CheckIcon, { className: "size-2.5 stroke-[3]" }) : null
|
|
4981
5073
|
}
|
|
4982
5074
|
);
|
|
4983
5075
|
var QuestionArtifactView = ({
|
|
@@ -5792,8 +5884,8 @@ var CodeHeader = ({ language, code }) => {
|
|
|
5792
5884
|
onClick: onCopy,
|
|
5793
5885
|
className: "transition-colors hover:text-foreground",
|
|
5794
5886
|
children: [
|
|
5795
|
-
!isCopied && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
5796
|
-
isCopied && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
5887
|
+
!isCopied && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_lucide_react6.CopyIcon, { className: "h-3.5 w-3.5" }),
|
|
5888
|
+
isCopied && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_lucide_react6.CheckIcon, { className: "h-3.5 w-3.5 text-emerald-500" })
|
|
5797
5889
|
]
|
|
5798
5890
|
}
|
|
5799
5891
|
)
|
|
@@ -6013,7 +6105,7 @@ var defaultComponents = (0, import_react_markdown.unstable_memoizeMarkdownCompon
|
|
|
6013
6105
|
|
|
6014
6106
|
// src/chat/tool-fallback.tsx
|
|
6015
6107
|
var import_react32 = require("react");
|
|
6016
|
-
var
|
|
6108
|
+
var import_lucide_react7 = require("lucide-react");
|
|
6017
6109
|
var import_react33 = require("@assistant-ui/react");
|
|
6018
6110
|
|
|
6019
6111
|
// src/ui/shimmer.tsx
|
|
@@ -7054,7 +7146,7 @@ var TimelineActionLabel = ({ action, detail, shimmer = false }) => /* @__PURE__
|
|
|
7054
7146
|
detail ? /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: studioTimelineDetailClass, children: detail }) : null
|
|
7055
7147
|
] });
|
|
7056
7148
|
var TimelineHoverChevron = ({ expanded }) => /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
|
|
7057
|
-
|
|
7149
|
+
import_lucide_react7.ChevronRightIcon,
|
|
7058
7150
|
{
|
|
7059
7151
|
className: studioTimelineChevronClass(expanded),
|
|
7060
7152
|
"aria-hidden": true
|
|
@@ -7204,7 +7296,7 @@ var ToolArtifactFallback = (props) => {
|
|
|
7204
7296
|
|
|
7205
7297
|
// src/chat/composer.tsx
|
|
7206
7298
|
var import_react34 = require("@assistant-ui/react");
|
|
7207
|
-
var
|
|
7299
|
+
var import_lucide_react8 = require("lucide-react");
|
|
7208
7300
|
var import_jsx_runtime48 = require("react/jsx-runtime");
|
|
7209
7301
|
var Composer = ({
|
|
7210
7302
|
placeholder = "Send a message...",
|
|
@@ -7296,7 +7388,7 @@ var ComposerSendOrCancel = ({ sendTooltip }) => {
|
|
|
7296
7388
|
type: "submit",
|
|
7297
7389
|
className: "aui-composer-send shrink-0 disabled:opacity-30",
|
|
7298
7390
|
"aria-label": "Send message",
|
|
7299
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
7391
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react8.ArrowUpIcon, { className: "aui-composer-send-icon size-4" })
|
|
7300
7392
|
}
|
|
7301
7393
|
) }) }),
|
|
7302
7394
|
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_react34.AuiIf, { condition: (s) => s.thread.isRunning, children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_react34.ComposerPrimitive.Cancel, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
@@ -7306,7 +7398,7 @@ var ComposerSendOrCancel = ({ sendTooltip }) => {
|
|
|
7306
7398
|
variant: "primary",
|
|
7307
7399
|
className: "aui-composer-cancel shrink-0",
|
|
7308
7400
|
"aria-label": "Stop generating",
|
|
7309
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
7401
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react8.SquareIcon, { className: "aui-composer-cancel-icon size-3 fill-current" })
|
|
7310
7402
|
}
|
|
7311
7403
|
) }) })
|
|
7312
7404
|
] });
|
|
@@ -7315,7 +7407,7 @@ var ComposerSendOrCancel = ({ sendTooltip }) => {
|
|
|
7315
7407
|
// src/chat/suggestions.tsx
|
|
7316
7408
|
var import_react35 = require("react");
|
|
7317
7409
|
var import_react36 = require("@assistant-ui/react");
|
|
7318
|
-
var
|
|
7410
|
+
var import_lucide_react9 = require("lucide-react");
|
|
7319
7411
|
var import_jsx_runtime49 = require("react/jsx-runtime");
|
|
7320
7412
|
var Suggestions = ({
|
|
7321
7413
|
suggestions,
|
|
@@ -7350,7 +7442,7 @@ var SuggestionRow = ({ suggestion }) => {
|
|
|
7350
7442
|
onClick,
|
|
7351
7443
|
className: cn("aui-thread-suggestion", studioListRowButtonClass),
|
|
7352
7444
|
children: [
|
|
7353
|
-
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { className: "aui-thread-suggestion-icon shrink-0 text-muted-foreground", children: suggestion.icon ?? /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
|
|
7445
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { className: "aui-thread-suggestion-icon shrink-0 text-muted-foreground", children: suggestion.icon ?? /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_lucide_react9.ArrowUpIcon, { className: "size-4", strokeWidth: 1.75, "aria-hidden": true }) }),
|
|
7354
7446
|
/* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("span", { className: "aui-thread-suggestion-text min-w-0 flex-1 text-left", children: [
|
|
7355
7447
|
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { className: "aui-thread-suggestion-text-1 block truncate text-sm font-normal text-foreground", children: suggestion.title }),
|
|
7356
7448
|
suggestion.description && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { className: "aui-thread-suggestion-text-2 mt-0.5 block truncate text-xs text-muted-foreground", children: suggestion.description })
|
|
@@ -7570,7 +7662,7 @@ var ThreadScrollToBottom = () => {
|
|
|
7570
7662
|
tooltip: "Scroll to bottom",
|
|
7571
7663
|
variant: "secondary",
|
|
7572
7664
|
className: "aui-thread-scroll-to-bottom absolute -top-12 z-10 self-center disabled:invisible",
|
|
7573
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
|
|
7665
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_lucide_react10.ArrowDownIcon, { className: "size-4" })
|
|
7574
7666
|
}
|
|
7575
7667
|
) });
|
|
7576
7668
|
};
|
|
@@ -7711,8 +7803,8 @@ var AssistantActionBar = () => {
|
|
|
7711
7803
|
variant: "ghost",
|
|
7712
7804
|
className: ASSISTANT_ACTION_ICON_CLASS,
|
|
7713
7805
|
children: [
|
|
7714
|
-
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_react39.AuiIf, { condition: (s) => s.message.isCopied, children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
|
|
7715
|
-
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_react39.AuiIf, { condition: (s) => !s.message.isCopied, children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
|
|
7806
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_react39.AuiIf, { condition: (s) => s.message.isCopied, children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_lucide_react10.CheckIcon, { className: "size-3" }) }),
|
|
7807
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_react39.AuiIf, { condition: (s) => !s.message.isCopied, children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_lucide_react10.CopyIcon, { className: "size-3" }) })
|
|
7716
7808
|
]
|
|
7717
7809
|
}
|
|
7718
7810
|
) }),
|
|
@@ -7722,7 +7814,7 @@ var AssistantActionBar = () => {
|
|
|
7722
7814
|
tooltip: "Regenerate",
|
|
7723
7815
|
variant: "ghost",
|
|
7724
7816
|
className: ASSISTANT_ACTION_ICON_CLASS,
|
|
7725
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
|
|
7817
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_lucide_react10.RefreshCwIcon, { className: "size-3" })
|
|
7726
7818
|
}
|
|
7727
7819
|
) }),
|
|
7728
7820
|
/* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_react39.ActionBarMorePrimitive.Root, { children: [
|
|
@@ -7735,7 +7827,7 @@ var AssistantActionBar = () => {
|
|
|
7735
7827
|
ASSISTANT_ACTION_ICON_CLASS,
|
|
7736
7828
|
"data-[state=open]:text-muted-foreground/80"
|
|
7737
7829
|
),
|
|
7738
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
|
|
7830
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_lucide_react10.MoreHorizontalIcon, { className: "size-3" })
|
|
7739
7831
|
}
|
|
7740
7832
|
) }),
|
|
7741
7833
|
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
|
|
@@ -7745,7 +7837,7 @@ var AssistantActionBar = () => {
|
|
|
7745
7837
|
align: "start",
|
|
7746
7838
|
className: "aui-action-bar-more-content z-50 min-w-36 overflow-hidden rounded-lg border border-border bg-popover p-1 text-popover-foreground shadow-card-elevated",
|
|
7747
7839
|
children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_react39.ActionBarPrimitive.ExportMarkdown, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_react39.ActionBarMorePrimitive.Item, { className: "aui-action-bar-more-item flex cursor-pointer select-none items-center gap-2 rounded-md px-2 py-1.5 text-sm outline-none hover:bg-muted focus:bg-muted", children: [
|
|
7748
|
-
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
|
|
7840
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_lucide_react10.DownloadIcon, { className: "size-4 shrink-0" }),
|
|
7749
7841
|
"Export as Markdown"
|
|
7750
7842
|
] }) })
|
|
7751
7843
|
}
|
|
@@ -7803,7 +7895,7 @@ var UserActionBar = () => {
|
|
|
7803
7895
|
tooltip: "Edit",
|
|
7804
7896
|
variant: "ghost",
|
|
7805
7897
|
className: ASSISTANT_ACTION_ICON_CLASS,
|
|
7806
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
|
|
7898
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_lucide_react10.PencilIcon, { className: "size-3" })
|
|
7807
7899
|
}
|
|
7808
7900
|
) })
|
|
7809
7901
|
}
|
|
@@ -7879,7 +7971,7 @@ var AppChatPanel = ({
|
|
|
7879
7971
|
className: closeButtonClass,
|
|
7880
7972
|
onClick: () => shellChat.setOpen(false),
|
|
7881
7973
|
"aria-label": "Close assistant",
|
|
7882
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
|
|
7974
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(import_lucide_react11.XIcon, { className: "size-4", "aria-hidden": true })
|
|
7883
7975
|
}
|
|
7884
7976
|
) }) : null,
|
|
7885
7977
|
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: bodyClass, children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
|
|
@@ -8408,7 +8500,7 @@ var ResourceCard = ({
|
|
|
8408
8500
|
};
|
|
8409
8501
|
|
|
8410
8502
|
// src/app/surfaces/AlertCard.tsx
|
|
8411
|
-
var
|
|
8503
|
+
var import_lucide_react12 = require("lucide-react");
|
|
8412
8504
|
var import_jsx_runtime62 = require("react/jsx-runtime");
|
|
8413
8505
|
var alertCardShellClass = cn(
|
|
8414
8506
|
"flex flex-col rounded-2xl p-4 text-left font-normal border border-border shadow-card",
|
|
@@ -8452,7 +8544,7 @@ var AlertCard = ({
|
|
|
8452
8544
|
] });
|
|
8453
8545
|
const cardContent = /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: "flex items-start justify-between gap-4 w-full h-full", children: [
|
|
8454
8546
|
bodyContent,
|
|
8455
|
-
showTrailing ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("div", { className: "shrink-0 flex items-center justify-center self-center text-muted-foreground/50", children: trailing || /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
|
|
8547
|
+
showTrailing ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("div", { className: "shrink-0 flex items-center justify-center self-center text-muted-foreground/50", children: trailing || /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_lucide_react12.ChevronRight, { className: "size-4" }) }) : null
|
|
8456
8548
|
] });
|
|
8457
8549
|
if (onClick) {
|
|
8458
8550
|
return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
|
|
@@ -8470,11 +8562,11 @@ var AlertCard = ({
|
|
|
8470
8562
|
};
|
|
8471
8563
|
|
|
8472
8564
|
// src/app/surfaces/CatalogCard.tsx
|
|
8473
|
-
var
|
|
8565
|
+
var import_lucide_react14 = require("lucide-react");
|
|
8474
8566
|
|
|
8475
8567
|
// src/ui/copy-button.tsx
|
|
8476
8568
|
var React4 = __toESM(require("react"), 1);
|
|
8477
|
-
var
|
|
8569
|
+
var import_lucide_react13 = require("lucide-react");
|
|
8478
8570
|
var import_jsx_runtime63 = require("react/jsx-runtime");
|
|
8479
8571
|
function CopyButton({
|
|
8480
8572
|
value,
|
|
@@ -8500,7 +8592,7 @@ function CopyButton({
|
|
|
8500
8592
|
} catch {
|
|
8501
8593
|
}
|
|
8502
8594
|
};
|
|
8503
|
-
const Icon = copied ?
|
|
8595
|
+
const Icon = copied ? import_lucide_react13.CheckIcon : import_lucide_react13.CopyIcon;
|
|
8504
8596
|
return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(
|
|
8505
8597
|
"button",
|
|
8506
8598
|
{
|
|
@@ -8572,7 +8664,7 @@ var CatalogCard = ({
|
|
|
8572
8664
|
onClick: (e) => e.stopPropagation(),
|
|
8573
8665
|
children: [
|
|
8574
8666
|
/* @__PURE__ */ (0, import_jsx_runtime64.jsx)("span", { className: "truncate", children: title }),
|
|
8575
|
-
/* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
|
|
8667
|
+
/* @__PURE__ */ (0, import_jsx_runtime64.jsx)(import_lucide_react14.ExternalLink, { className: "size-3.5 shrink-0 text-muted-foreground/60" })
|
|
8576
8668
|
]
|
|
8577
8669
|
}
|
|
8578
8670
|
) : /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("h4", { className: "text-sm font-medium leading-snug text-foreground truncate", children: title }) }),
|
|
@@ -8599,7 +8691,7 @@ var CatalogCard = ({
|
|
|
8599
8691
|
onClick: (e) => e.stopPropagation(),
|
|
8600
8692
|
children: [
|
|
8601
8693
|
/* @__PURE__ */ (0, import_jsx_runtime64.jsx)("span", { children: link.label }),
|
|
8602
|
-
/* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
|
|
8694
|
+
/* @__PURE__ */ (0, import_jsx_runtime64.jsx)(import_lucide_react14.ExternalLink, { className: "size-2.5 shrink-0 text-muted-foreground/50" })
|
|
8603
8695
|
]
|
|
8604
8696
|
},
|
|
8605
8697
|
idx
|
|
@@ -9264,7 +9356,7 @@ var FieldTextarea = ({
|
|
|
9264
9356
|
|
|
9265
9357
|
// src/app/forms/FieldSelect.tsx
|
|
9266
9358
|
var import_react51 = require("react");
|
|
9267
|
-
var
|
|
9359
|
+
var import_lucide_react15 = require("lucide-react");
|
|
9268
9360
|
var import_jsx_runtime79 = require("react/jsx-runtime");
|
|
9269
9361
|
var selectWrapClass = "relative";
|
|
9270
9362
|
var selectClass = cn(
|
|
@@ -9303,7 +9395,7 @@ var FieldSelect = ({
|
|
|
9303
9395
|
}
|
|
9304
9396
|
),
|
|
9305
9397
|
/* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
|
|
9306
|
-
|
|
9398
|
+
import_lucide_react15.ChevronDownIcon,
|
|
9307
9399
|
{
|
|
9308
9400
|
className: "pointer-events-none absolute top-1/2 right-3 size-4 -translate-y-1/2 text-muted-foreground",
|
|
9309
9401
|
"aria-hidden": true
|
|
@@ -9370,7 +9462,7 @@ var FieldSwitch = ({
|
|
|
9370
9462
|
};
|
|
9371
9463
|
|
|
9372
9464
|
// src/app/forms/SearchInput.tsx
|
|
9373
|
-
var
|
|
9465
|
+
var import_lucide_react16 = require("lucide-react");
|
|
9374
9466
|
var import_jsx_runtime81 = require("react/jsx-runtime");
|
|
9375
9467
|
var SearchInput = ({
|
|
9376
9468
|
className,
|
|
@@ -9386,7 +9478,7 @@ var SearchInput = ({
|
|
|
9386
9478
|
className
|
|
9387
9479
|
),
|
|
9388
9480
|
children: [
|
|
9389
|
-
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
|
|
9481
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_lucide_react16.SearchIcon, { className: "size-4 shrink-0 text-muted-foreground", "aria-hidden": true }),
|
|
9390
9482
|
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
|
|
9391
9483
|
"input",
|
|
9392
9484
|
{
|
|
@@ -9447,11 +9539,11 @@ var FilterField = ({
|
|
|
9447
9539
|
|
|
9448
9540
|
// src/app/data/FilterDropdown.tsx
|
|
9449
9541
|
var import_react53 = require("react");
|
|
9450
|
-
var
|
|
9542
|
+
var import_lucide_react19 = require("lucide-react");
|
|
9451
9543
|
|
|
9452
9544
|
// src/ui/checkbox.tsx
|
|
9453
9545
|
var import_radix_ui6 = require("radix-ui");
|
|
9454
|
-
var
|
|
9546
|
+
var import_lucide_react17 = require("lucide-react");
|
|
9455
9547
|
var import_jsx_runtime85 = require("react/jsx-runtime");
|
|
9456
9548
|
function Checkbox({
|
|
9457
9549
|
className,
|
|
@@ -9473,7 +9565,7 @@ function Checkbox({
|
|
|
9473
9565
|
{
|
|
9474
9566
|
"data-slot": "checkbox-indicator",
|
|
9475
9567
|
className: "flex items-center justify-center text-current animate-checkbox-pop",
|
|
9476
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(
|
|
9568
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(import_lucide_react17.CheckIcon, { className: "size-2.5 stroke-[3.5px]" })
|
|
9477
9569
|
}
|
|
9478
9570
|
)
|
|
9479
9571
|
}
|
|
@@ -9482,7 +9574,7 @@ function Checkbox({
|
|
|
9482
9574
|
|
|
9483
9575
|
// src/ui/select.tsx
|
|
9484
9576
|
var import_radix_ui7 = require("radix-ui");
|
|
9485
|
-
var
|
|
9577
|
+
var import_lucide_react18 = require("lucide-react");
|
|
9486
9578
|
var import_jsx_runtime86 = require("react/jsx-runtime");
|
|
9487
9579
|
function Select({
|
|
9488
9580
|
...props
|
|
@@ -9513,7 +9605,7 @@ function SelectTrigger({
|
|
|
9513
9605
|
...props,
|
|
9514
9606
|
children: [
|
|
9515
9607
|
children,
|
|
9516
|
-
/* @__PURE__ */ (0, import_jsx_runtime86.jsx)(import_radix_ui7.Select.Icon, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
|
|
9608
|
+
/* @__PURE__ */ (0, import_jsx_runtime86.jsx)(import_radix_ui7.Select.Icon, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(import_lucide_react18.ChevronDownIcon, { className: "size-4 opacity-50" }) })
|
|
9517
9609
|
]
|
|
9518
9610
|
}
|
|
9519
9611
|
);
|
|
@@ -9569,7 +9661,7 @@ function SelectItem({
|
|
|
9569
9661
|
),
|
|
9570
9662
|
...props,
|
|
9571
9663
|
children: [
|
|
9572
|
-
/* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "absolute right-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(import_radix_ui7.Select.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
|
|
9664
|
+
/* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "absolute right-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(import_radix_ui7.Select.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(import_lucide_react18.CheckIcon, { className: "size-4" }) }) }),
|
|
9573
9665
|
/* @__PURE__ */ (0, import_jsx_runtime86.jsx)(import_radix_ui7.Select.ItemText, { children })
|
|
9574
9666
|
]
|
|
9575
9667
|
}
|
|
@@ -9585,7 +9677,7 @@ function SelectScrollUpButton({
|
|
|
9585
9677
|
"data-slot": "select-scroll-up-button",
|
|
9586
9678
|
className: cn("flex cursor-default items-center justify-center py-1", className),
|
|
9587
9679
|
...props,
|
|
9588
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
|
|
9680
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(import_lucide_react18.ChevronUpIcon, { className: "size-4" })
|
|
9589
9681
|
}
|
|
9590
9682
|
);
|
|
9591
9683
|
}
|
|
@@ -9599,7 +9691,7 @@ function SelectScrollDownButton({
|
|
|
9599
9691
|
"data-slot": "select-scroll-down-button",
|
|
9600
9692
|
className: cn("flex cursor-default items-center justify-center py-1", className),
|
|
9601
9693
|
...props,
|
|
9602
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
|
|
9694
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(import_lucide_react18.ChevronDownIcon, { className: "size-4" })
|
|
9603
9695
|
}
|
|
9604
9696
|
);
|
|
9605
9697
|
}
|
|
@@ -9767,7 +9859,7 @@ function FilterDropdown({
|
|
|
9767
9859
|
variant: "outline",
|
|
9768
9860
|
size: "sm",
|
|
9769
9861
|
className: "border-dashed font-medium text-muted-foreground hover:text-foreground",
|
|
9770
|
-
iconLeading: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
|
|
9862
|
+
iconLeading: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(import_lucide_react19.ListFilterIcon, { className: "size-4" }),
|
|
9771
9863
|
children: label
|
|
9772
9864
|
}
|
|
9773
9865
|
) }),
|
|
@@ -9795,7 +9887,7 @@ function FilterDropdown({
|
|
|
9795
9887
|
field.icon,
|
|
9796
9888
|
/* @__PURE__ */ (0, import_jsx_runtime88.jsx)("span", { children: field.label })
|
|
9797
9889
|
] }),
|
|
9798
|
-
/* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
|
|
9890
|
+
/* @__PURE__ */ (0, import_jsx_runtime88.jsx)(import_lucide_react19.ChevronRightIcon, { className: "size-4 text-muted-foreground/50" })
|
|
9799
9891
|
]
|
|
9800
9892
|
},
|
|
9801
9893
|
field.id
|
|
@@ -9843,7 +9935,7 @@ function FilterChip({ label, onRemove }) {
|
|
|
9843
9935
|
onClick: onRemove,
|
|
9844
9936
|
"aria-label": `Remove ${label}`,
|
|
9845
9937
|
className: "flex size-5 items-center justify-center rounded-full text-muted-foreground outline-none transition-colors hover:bg-muted hover:text-foreground",
|
|
9846
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
|
|
9938
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(import_lucide_react19.XIcon, { className: "size-3.5" })
|
|
9847
9939
|
}
|
|
9848
9940
|
)
|
|
9849
9941
|
] });
|
|
@@ -10106,7 +10198,7 @@ function ApplyClear({ onClear, onApply }) {
|
|
|
10106
10198
|
|
|
10107
10199
|
// src/app/data/DataTable.tsx
|
|
10108
10200
|
var import_react54 = require("react");
|
|
10109
|
-
var
|
|
10201
|
+
var import_lucide_react20 = require("lucide-react");
|
|
10110
10202
|
|
|
10111
10203
|
// src/ui/skeleton.tsx
|
|
10112
10204
|
var import_jsx_runtime89 = require("react/jsx-runtime");
|
|
@@ -10165,12 +10257,12 @@ function SortIndicator({
|
|
|
10165
10257
|
}) {
|
|
10166
10258
|
const iconClass = "size-3.5 shrink-0 opacity-60 group-hover:opacity-100";
|
|
10167
10259
|
if (!active) {
|
|
10168
|
-
return /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(
|
|
10260
|
+
return /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(import_lucide_react20.ArrowUpDownIcon, { className: iconClass, "aria-hidden": true });
|
|
10169
10261
|
}
|
|
10170
10262
|
if (direction === "desc") {
|
|
10171
|
-
return /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(
|
|
10263
|
+
return /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(import_lucide_react20.ArrowDownIcon, { className: iconClass, "aria-hidden": true });
|
|
10172
10264
|
}
|
|
10173
|
-
return /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(
|
|
10265
|
+
return /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(import_lucide_react20.ArrowUpIcon, { className: iconClass, "aria-hidden": true });
|
|
10174
10266
|
}
|
|
10175
10267
|
function DataTable({
|
|
10176
10268
|
columns,
|
|
@@ -10447,7 +10539,7 @@ function DataTable({
|
|
|
10447
10539
|
onClick: () => setPage(pageIndex - 1),
|
|
10448
10540
|
disabled: pageIndex <= 0,
|
|
10449
10541
|
"aria-label": "Previous page",
|
|
10450
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(
|
|
10542
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(import_lucide_react20.ChevronLeftIcon, { className: "size-4", "aria-hidden": true })
|
|
10451
10543
|
}
|
|
10452
10544
|
),
|
|
10453
10545
|
/* @__PURE__ */ (0, import_jsx_runtime90.jsx)(
|
|
@@ -10458,7 +10550,7 @@ function DataTable({
|
|
|
10458
10550
|
onClick: () => setPage(pageIndex + 1),
|
|
10459
10551
|
disabled: pageIndex >= pageCount - 1,
|
|
10460
10552
|
"aria-label": "Next page",
|
|
10461
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(
|
|
10553
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(import_lucide_react20.ChevronRightIcon, { className: "size-4", "aria-hidden": true })
|
|
10462
10554
|
}
|
|
10463
10555
|
)
|
|
10464
10556
|
] })
|
|
@@ -10997,7 +11089,7 @@ function UntitledButton({
|
|
|
10997
11089
|
}
|
|
10998
11090
|
|
|
10999
11091
|
// src/ui/banner.tsx
|
|
11000
|
-
var
|
|
11092
|
+
var import_lucide_react21 = require("lucide-react");
|
|
11001
11093
|
var import_jsx_runtime95 = require("react/jsx-runtime");
|
|
11002
11094
|
var bannerSoftClass = {
|
|
11003
11095
|
default: "border-border/50 bg-muted/30 text-foreground/90 dark:bg-muted/15",
|
|
@@ -11094,7 +11186,7 @@ function Banner({
|
|
|
11094
11186
|
isSingleLine ? "self-center" : "-mt-0.5",
|
|
11095
11187
|
isSolid ? "opacity-80 hover:bg-background/15 hover:opacity-100" : "text-muted-foreground hover:bg-foreground/10 hover:text-foreground"
|
|
11096
11188
|
),
|
|
11097
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(
|
|
11189
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(import_lucide_react21.XIcon, { className: "size-4", "aria-hidden": true })
|
|
11098
11190
|
}
|
|
11099
11191
|
) : null
|
|
11100
11192
|
]
|
|
@@ -11193,7 +11285,7 @@ var React5 = __toESM(require("react"), 1);
|
|
|
11193
11285
|
var import_core2 = require("@dnd-kit/core");
|
|
11194
11286
|
var import_sortable = require("@dnd-kit/sortable");
|
|
11195
11287
|
var import_utilities = require("@dnd-kit/utilities");
|
|
11196
|
-
var
|
|
11288
|
+
var import_lucide_react22 = require("lucide-react");
|
|
11197
11289
|
var import_jsx_runtime97 = require("react/jsx-runtime");
|
|
11198
11290
|
var columnTitleToneClass = {
|
|
11199
11291
|
default: "text-foreground",
|
|
@@ -11279,7 +11371,7 @@ function SortableCard({
|
|
|
11279
11371
|
className: "absolute right-1.5 top-1.5 z-10 grid size-6 cursor-grab touch-none place-items-center rounded-md text-muted-foreground/40 opacity-0 transition hover:bg-foreground/5 hover:text-foreground focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-foreground/15 group-hover/kanban-card:opacity-100 active:cursor-grabbing",
|
|
11280
11372
|
...attributes,
|
|
11281
11373
|
...listeners,
|
|
11282
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
|
|
11374
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(import_lucide_react22.GripVerticalIcon, { className: "size-4", "aria-hidden": true })
|
|
11283
11375
|
}
|
|
11284
11376
|
) : null,
|
|
11285
11377
|
renderCard(card, { column, isDragging, isOverlay: false, dragHandleProps })
|