@timbal-ai/timbal-react 1.6.1 → 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.
Files changed (31) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/app.cjs +138 -73
  3. package/dist/app.d.cts +3 -3
  4. package/dist/app.d.ts +3 -3
  5. package/dist/app.esm.js +5 -5
  6. package/dist/{chart-artifact-Dpt4t5sf.d.cts → chart-artifact-CuTiCITz.d.cts} +221 -15
  7. package/dist/{chart-artifact-BYl5C-dk.d.ts → chart-artifact-U-x0UNJm.d.ts} +221 -15
  8. package/dist/chat.esm.js +3 -3
  9. package/dist/{chunk-YYEI6XME.esm.js → chunk-22KWC2LS.esm.js} +5 -5
  10. package/dist/{chunk-MBS7XHV2.esm.js → chunk-45NXD3IG.esm.js} +3 -3
  11. package/dist/{chunk-24B4I4XC.esm.js → chunk-64RHAJVG.esm.js} +1 -1
  12. package/dist/{chunk-WQIQW7EM.esm.js → chunk-7AGIAQE6.esm.js} +1 -1
  13. package/dist/{chunk-NO5AWNWT.esm.js → chunk-7WU3IKAN.esm.js} +1 -1
  14. package/dist/{chunk-UVPXH4MB.esm.js → chunk-M5IBJBEY.esm.js} +80 -21
  15. package/dist/{chunk-HSL36SJ4.esm.js → chunk-PMMI7LBV.esm.js} +20 -8
  16. package/dist/{chunk-TMP7RIA7.esm.js → chunk-VKXOHVDE.esm.js} +2 -2
  17. package/dist/{chunk-ELEY66OH.esm.js → chunk-XOCOZU7J.esm.js} +11 -1
  18. package/dist/cli/timbal-ui-lint.mjs +32 -1
  19. package/dist/index.cjs +274 -198
  20. package/dist/index.d.cts +2 -2
  21. package/dist/index.d.ts +2 -2
  22. package/dist/index.esm.js +9 -9
  23. package/dist/{kanban-FFBeaZPS.d.cts → kanban-BQxWliCS.d.cts} +17 -0
  24. package/dist/{kanban-FFBeaZPS.d.ts → kanban-BQxWliCS.d.ts} +17 -0
  25. package/dist/studio.cjs +104 -85
  26. package/dist/studio.esm.js +6 -6
  27. package/dist/ui.cjs +6 -6
  28. package/dist/ui.d.cts +1 -1
  29. package/dist/ui.d.ts +1 -1
  30. package/dist/ui.esm.js +4 -4
  31. package/package.json +1 -1
package/dist/index.cjs CHANGED
@@ -1643,14 +1643,14 @@ function DialogDescription({
1643
1643
  className,
1644
1644
  ...props
1645
1645
  }) {
1646
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1647
- import_radix_ui2.Dialog.Description,
1646
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_radix_ui2.Dialog.Description, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1647
+ "div",
1648
1648
  {
1649
1649
  "data-slot": "dialog-description",
1650
1650
  className: cn("text-sm text-muted-foreground", className),
1651
1651
  ...props
1652
1652
  }
1653
- );
1653
+ ) });
1654
1654
  }
1655
1655
  function DialogHeader({ className, ...props }) {
1656
1656
  return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
@@ -6070,9 +6070,9 @@ var TimbalChatShell = ({
6070
6070
  };
6071
6071
 
6072
6072
  // src/studio/shell/studio-shell.tsx
6073
- var import_react49 = require("react");
6073
+ var import_react50 = require("react");
6074
6074
  var import_lucide_react14 = require("lucide-react");
6075
- var import_react50 = require("motion/react");
6075
+ var import_react51 = require("motion/react");
6076
6076
 
6077
6077
  // src/design/sidebar-motion.ts
6078
6078
  var STUDIO_SIDEBAR_EASE_ENTER = [0, 0, 0.2, 1];
@@ -6255,11 +6255,19 @@ function useStudioSidebarLayout() {
6255
6255
  }
6256
6256
 
6257
6257
  // src/studio/sidebar/sidebar.tsx
6258
- var import_react43 = require("react");
6259
- var import_react44 = require("motion/react");
6258
+ var import_react44 = require("react");
6259
+ var import_react45 = require("motion/react");
6260
+
6261
+ // src/layout/shell-nav-context.tsx
6262
+ var import_react37 = require("react");
6263
+ var ShellNavContext = (0, import_react37.createContext)(null);
6264
+ var ShellNavProvider = ShellNavContext.Provider;
6265
+ function useOptionalShellNav() {
6266
+ return (0, import_react37.useContext)(ShellNavContext);
6267
+ }
6260
6268
 
6261
6269
  // src/studio/sidebar/sidebar-entries.tsx
6262
- var import_react37 = require("motion/react");
6270
+ var import_react38 = require("motion/react");
6263
6271
  var import_jsx_runtime41 = require("react/jsx-runtime");
6264
6272
  var StudioSidebarEntries = ({
6265
6273
  visible,
@@ -6267,12 +6275,12 @@ var StudioSidebarEntries = ({
6267
6275
  children,
6268
6276
  className
6269
6277
  }) => {
6270
- const reducedMotion = (0, import_react37.useReducedMotion)();
6278
+ const reducedMotion = (0, import_react38.useReducedMotion)();
6271
6279
  if (reducedMotion) {
6272
6280
  return visible ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: cn("flex min-h-0 flex-1 flex-col", className), children }) : null;
6273
6281
  }
6274
6282
  return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
6275
- import_react37.motion.div,
6283
+ import_react38.motion.div,
6276
6284
  {
6277
6285
  className: cn("flex min-h-0 flex-1 flex-col", className),
6278
6286
  initial: false,
@@ -6292,11 +6300,11 @@ var StudioSidebarEntries = ({
6292
6300
  };
6293
6301
 
6294
6302
  // src/studio/sidebar/sidebar-footer.tsx
6295
- var import_react40 = require("react");
6303
+ var import_react41 = require("react");
6296
6304
  var import_lucide_react11 = require("lucide-react");
6297
6305
 
6298
6306
  // src/auth/provider.tsx
6299
- var import_react38 = require("react");
6307
+ var import_react39 = require("react");
6300
6308
  var import_jsx_runtime42 = require("react/jsx-runtime");
6301
6309
  function isInsideIframe() {
6302
6310
  try {
@@ -6305,26 +6313,26 @@ function isInsideIframe() {
6305
6313
  return true;
6306
6314
  }
6307
6315
  }
6308
- var SessionContext = (0, import_react38.createContext)(void 0);
6316
+ var SessionContext = (0, import_react39.createContext)(void 0);
6309
6317
  var useSession = () => {
6310
- const context = (0, import_react38.useContext)(SessionContext);
6318
+ const context = (0, import_react39.useContext)(SessionContext);
6311
6319
  if (context === void 0) {
6312
6320
  throw new Error("useSession must be used within a SessionProvider");
6313
6321
  }
6314
6322
  return context;
6315
6323
  };
6316
6324
  var useOptionalSession = () => {
6317
- const context = (0, import_react38.useContext)(SessionContext);
6325
+ const context = (0, import_react39.useContext)(SessionContext);
6318
6326
  return context ?? null;
6319
6327
  };
6320
6328
  var SessionProvider = ({
6321
6329
  children,
6322
6330
  enabled = true
6323
6331
  }) => {
6324
- const [user, setUser] = (0, import_react38.useState)(null);
6325
- const [loading, setLoading] = (0, import_react38.useState)(enabled);
6326
- const [embedded] = (0, import_react38.useState)(isInsideIframe);
6327
- (0, import_react38.useEffect)(() => {
6332
+ const [user, setUser] = (0, import_react39.useState)(null);
6333
+ const [loading, setLoading] = (0, import_react39.useState)(enabled);
6334
+ const [embedded] = (0, import_react39.useState)(isInsideIframe);
6335
+ (0, import_react39.useEffect)(() => {
6328
6336
  if (!enabled) {
6329
6337
  setLoading(false);
6330
6338
  return;
@@ -6385,7 +6393,7 @@ var SessionProvider = ({
6385
6393
  messageCleanup?.();
6386
6394
  };
6387
6395
  }, [enabled, embedded]);
6388
- const logout = (0, import_react38.useCallback)(() => {
6396
+ const logout = (0, import_react39.useCallback)(() => {
6389
6397
  clearTokens();
6390
6398
  setUser(null);
6391
6399
  const returnTo = encodeURIComponent(
@@ -6433,17 +6441,17 @@ function studioSidebarNavItemClasses(iconOnly, isActive) {
6433
6441
  }
6434
6442
 
6435
6443
  // src/studio/sidebar/sidebar-entry-motion.tsx
6436
- var import_react39 = require("motion/react");
6444
+ var import_react40 = require("motion/react");
6437
6445
  var import_jsx_runtime43 = require("react/jsx-runtime");
6438
6446
  var StudioSidebarEntryMotion = ({
6439
6447
  children,
6440
6448
  className
6441
6449
  }) => {
6442
- const reducedMotion = (0, import_react39.useReducedMotion)();
6450
+ const reducedMotion = (0, import_react40.useReducedMotion)();
6443
6451
  if (reducedMotion) {
6444
6452
  return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { className, children });
6445
6453
  }
6446
- return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_react39.motion.div, { variants: studioSidebarEntryItemVariants, className: cn(className), children });
6454
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_react40.motion.div, { variants: studioSidebarEntryItemVariants, className: cn(className), children });
6447
6455
  };
6448
6456
 
6449
6457
  // src/studio/sidebar/sidebar-tooltip.tsx
@@ -6683,8 +6691,8 @@ var StudioSidebarFooter = ({
6683
6691
  }) => {
6684
6692
  const session = useOptionalSession();
6685
6693
  const user = session?.user ?? null;
6686
- const [isDark, setIsDark] = (0, import_react40.useState)(false);
6687
- (0, import_react40.useEffect)(() => {
6694
+ const [isDark, setIsDark] = (0, import_react41.useState)(false);
6695
+ (0, import_react41.useEffect)(() => {
6688
6696
  if (typeof window === "undefined" || typeof document === "undefined") return;
6689
6697
  const stored = window.localStorage.getItem(STORAGE_KEYS.theme);
6690
6698
  if (stored) {
@@ -7036,14 +7044,14 @@ function TimbalMark({
7036
7044
  }
7037
7045
 
7038
7046
  // src/studio/sidebar/shell-inset-bridge-context.tsx
7039
- var import_react42 = require("react");
7047
+ var import_react43 = require("react");
7040
7048
 
7041
7049
  // src/layout/shell-inset-context.tsx
7042
- var import_react41 = require("react");
7043
- var ShellInsetContext = (0, import_react41.createContext)(null);
7050
+ var import_react42 = require("react");
7051
+ var ShellInsetContext = (0, import_react42.createContext)(null);
7044
7052
  var ShellInsetProvider = ShellInsetContext.Provider;
7045
7053
  function useShellInsetReporter() {
7046
- return (0, import_react41.useContext)(ShellInsetContext);
7054
+ return (0, import_react42.useContext)(ShellInsetContext);
7047
7055
  }
7048
7056
 
7049
7057
  // src/studio/sidebar/shell-inset-bridge-context.tsx
@@ -7052,7 +7060,7 @@ var StudioSidebarShellInsetBridge = ({
7052
7060
  }) => {
7053
7061
  const reportInset = useShellInsetReporter();
7054
7062
  const { isMobile, isCollapsedRail } = useStudioSidebarLayout();
7055
- (0, import_react42.useLayoutEffect)(() => {
7063
+ (0, import_react43.useLayoutEffect)(() => {
7056
7064
  const insetPx = isMobile ? 0 : isCollapsedRail ? SIDEBAR_INSET_PX_COLLAPSED : SIDEBAR_INSET_PX_EXPANDED;
7057
7065
  reportInset?.(insetPx);
7058
7066
  onInsetChange?.(insetPx);
@@ -7095,7 +7103,7 @@ var StudioSidebarPanel = ({
7095
7103
  logo,
7096
7104
  emptyCaption = null
7097
7105
  }) => {
7098
- const reducedMotion = (0, import_react44.useReducedMotion)();
7106
+ const reducedMotion = (0, import_react45.useReducedMotion)();
7099
7107
  const isCollapsedRail = widthCollapsed && !isMobile;
7100
7108
  const iconOnlyLayout = studioSidebarIconOnlyLayout(isMobile, isCollapsedRail);
7101
7109
  const isDrawerOpen = isMobile && mobileOpen;
@@ -7117,7 +7125,7 @@ var StudioSidebarPanel = ({
7117
7125
  const brandNode = brand ?? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(TimbalMark, { size: 32 });
7118
7126
  const logoNode = logo ?? (isCustomBrand ? null : brandNode);
7119
7127
  const panel = /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(
7120
- import_react44.motion.div,
7128
+ import_react45.motion.div,
7121
7129
  {
7122
7130
  "data-sidebar-collapsed": isCollapsedRail ? "" : void 0,
7123
7131
  className: cn(
@@ -7187,7 +7195,7 @@ var StudioSidebarPanel = ({
7187
7195
  );
7188
7196
  if (isMobile) {
7189
7197
  return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
7190
- import_react44.motion.aside,
7198
+ import_react45.motion.aside,
7191
7199
  {
7192
7200
  className: "fixed inset-y-0 left-0 z-[60] flex",
7193
7201
  "aria-label": "Studio navigation",
@@ -7225,51 +7233,62 @@ var StudioSidebar = ({
7225
7233
  onMobileOpenChange: onMobileOpenChangeProp,
7226
7234
  onInsetChange
7227
7235
  }) => {
7228
- const reducedMotion = (0, import_react44.useReducedMotion)();
7236
+ const reducedMotion = (0, import_react45.useReducedMotion)();
7229
7237
  const fetched = useWorkforces({ enabled: workforcesProp === void 0 });
7230
7238
  const workforces = workforcesProp ?? fetched.workforces;
7231
- const [internalSelected, setInternalSelected] = (0, import_react43.useState)(
7239
+ const [internalSelected, setInternalSelected] = (0, import_react44.useState)(
7232
7240
  selectedIdProp ?? ""
7233
7241
  );
7234
- (0, import_react43.useEffect)(() => {
7242
+ (0, import_react44.useEffect)(() => {
7235
7243
  if (selectedIdProp !== void 0) return;
7236
7244
  if (internalSelected) return;
7237
7245
  const first = workforces[0]?.id ?? workforces[0]?.uid ?? workforces[0]?.name;
7238
7246
  if (first) setInternalSelected(first);
7239
7247
  }, [workforces, selectedIdProp, internalSelected]);
7240
7248
  const selectedId = selectedIdProp ?? internalSelected ?? workforces[0]?.id ?? workforces[0]?.uid ?? workforces[0]?.name ?? "";
7241
- const [collapsed, setCollapsed] = (0, import_react43.useState)(() => {
7249
+ const [collapsed, setCollapsed] = (0, import_react44.useState)(() => {
7242
7250
  const persisted = readPersistedCollapsed(persistKey);
7243
7251
  return persisted || defaultCollapsed;
7244
7252
  });
7245
- const handleCollapsedChange = (0, import_react43.useCallback)(
7253
+ const handleCollapsedChange = (0, import_react44.useCallback)(
7246
7254
  (next) => {
7247
7255
  setCollapsed(next);
7248
7256
  writePersistedCollapsed(persistKey, next);
7249
7257
  },
7250
7258
  [persistKey]
7251
7259
  );
7252
- const [isMobile, setIsMobile] = (0, import_react43.useState)(() => {
7260
+ const [isMobile, setIsMobile] = (0, import_react44.useState)(() => {
7253
7261
  if (typeof window === "undefined") return false;
7254
7262
  return window.innerWidth < mobileBreakpointPx;
7255
7263
  });
7256
- (0, import_react43.useEffect)(() => {
7264
+ (0, import_react44.useEffect)(() => {
7257
7265
  if (typeof window === "undefined") return;
7258
7266
  const onResize = () => setIsMobile(window.innerWidth < mobileBreakpointPx);
7259
7267
  onResize();
7260
7268
  window.addEventListener("resize", onResize);
7261
7269
  return () => window.removeEventListener("resize", onResize);
7262
7270
  }, [mobileBreakpointPx]);
7263
- const [internalMobileOpen, setInternalMobileOpen] = (0, import_react43.useState)(false);
7264
- const mobileOpen = mobileOpenProp ?? internalMobileOpen;
7265
- const setMobileOpen = (0, import_react43.useCallback)(
7271
+ const shellNav = useOptionalShellNav();
7272
+ const isControlled = mobileOpenProp !== void 0;
7273
+ const usingShellNav = !isControlled && shellNav !== null;
7274
+ const [internalMobileOpen, setInternalMobileOpen] = (0, import_react44.useState)(false);
7275
+ const mobileOpen = isControlled ? mobileOpenProp : usingShellNav ? shellNav.open : internalMobileOpen;
7276
+ const setMobileOpen = (0, import_react44.useCallback)(
7266
7277
  (next) => {
7267
- if (mobileOpenProp === void 0) setInternalMobileOpen(next);
7278
+ if (isControlled) {
7279
+ onMobileOpenChangeProp?.(next);
7280
+ return;
7281
+ }
7282
+ if (usingShellNav) {
7283
+ shellNav.setOpen(next);
7284
+ } else {
7285
+ setInternalMobileOpen(next);
7286
+ }
7268
7287
  onMobileOpenChangeProp?.(next);
7269
7288
  },
7270
- [mobileOpenProp, onMobileOpenChangeProp]
7289
+ [isControlled, usingShellNav, shellNav, onMobileOpenChangeProp]
7271
7290
  );
7272
- const handleSelect = (0, import_react43.useCallback)(
7291
+ const handleSelect = (0, import_react44.useCallback)(
7273
7292
  (id) => {
7274
7293
  if (selectedIdProp === void 0) setInternalSelected(id);
7275
7294
  onSelect?.(id);
@@ -7277,10 +7296,10 @@ var StudioSidebar = ({
7277
7296
  },
7278
7297
  [selectedIdProp, onSelect, isMobile, setMobileOpen]
7279
7298
  );
7280
- (0, import_react43.useEffect)(() => {
7299
+ (0, import_react44.useEffect)(() => {
7281
7300
  if (!isMobile && mobileOpen) setMobileOpen(false);
7282
7301
  }, [isMobile, mobileOpen, setMobileOpen]);
7283
- (0, import_react43.useEffect)(() => {
7302
+ (0, import_react44.useEffect)(() => {
7284
7303
  if (!isMobile || !mobileOpen) return;
7285
7304
  const onKeyDown = (e) => {
7286
7305
  if (e.key === "Escape") setMobileOpen(false);
@@ -7298,7 +7317,7 @@ var StudioSidebar = ({
7298
7317
  const entriesVisible = isMobile || phaseEntriesVisible;
7299
7318
  const isCollapsedRail = widthCollapsed && !isMobile;
7300
7319
  const iconOnlyLayout = studioSidebarIconOnlyLayout(isMobile, isCollapsedRail);
7301
- const contextValue = (0, import_react43.useMemo)(
7320
+ const contextValue = (0, import_react44.useMemo)(
7302
7321
  () => ({
7303
7322
  collapsed: effectiveCollapsed,
7304
7323
  isMobile,
@@ -7334,23 +7353,23 @@ var StudioSidebar = ({
7334
7353
  };
7335
7354
 
7336
7355
  // src/studio/sidebar/sidebar-runtime-portal.tsx
7337
- var import_react45 = require("react");
7356
+ var import_react46 = require("react");
7338
7357
  var import_react_dom = require("react-dom");
7339
7358
  var import_lucide_react13 = require("lucide-react");
7340
- var import_react46 = require("@assistant-ui/react");
7359
+ var import_react47 = require("@assistant-ui/react");
7341
7360
  var import_jsx_runtime51 = require("react/jsx-runtime");
7342
7361
  var StudioSidebarRuntimePortal = ({
7343
7362
  label = "New chat"
7344
7363
  }) => {
7345
7364
  const { iconOnlyLayout, isMobile, closeMobile } = useStudioSidebarLayout();
7346
- const hasMessages = (0, import_react46.useThread)((s) => s.messages.length > 0);
7365
+ const hasMessages = (0, import_react47.useThread)((s) => s.messages.length > 0);
7347
7366
  const { clear } = useTimbalRuntime();
7348
- const [anchor, setAnchor] = (0, import_react45.useState)(null);
7349
- const startNewChat = (0, import_react45.useCallback)(() => {
7367
+ const [anchor, setAnchor] = (0, import_react46.useState)(null);
7368
+ const startNewChat = (0, import_react46.useCallback)(() => {
7350
7369
  clear();
7351
7370
  if (isMobile) closeMobile?.();
7352
7371
  }, [clear, isMobile, closeMobile]);
7353
- (0, import_react45.useLayoutEffect)(() => {
7372
+ (0, import_react46.useLayoutEffect)(() => {
7354
7373
  setAnchor(document.getElementById(DOM_IDS.sidebarRuntimeAnchor));
7355
7374
  }, []);
7356
7375
  if (!anchor || !hasMessages) return null;
@@ -7377,8 +7396,8 @@ var StudioSidebarRuntimePortal = ({
7377
7396
  };
7378
7397
 
7379
7398
  // src/studio/sidebar/welcome.tsx
7380
- var import_react47 = require("motion/react");
7381
- var import_react48 = require("@assistant-ui/react");
7399
+ var import_react48 = require("motion/react");
7400
+ var import_react49 = require("@assistant-ui/react");
7382
7401
  var import_jsx_runtime52 = require("react/jsx-runtime");
7383
7402
  var welcomeStagger2 = {
7384
7403
  initial: {},
@@ -7404,7 +7423,7 @@ var welcomeIcon2 = {
7404
7423
  }
7405
7424
  };
7406
7425
  var StudioWelcome = ({ config, icon }) => {
7407
- const isEmpty = (0, import_react48.useThread)((s) => s.messages.length === 0);
7426
+ const isEmpty = (0, import_react49.useThread)((s) => s.messages.length === 0);
7408
7427
  if (!isEmpty) return null;
7409
7428
  const iconNode = icon ?? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
7410
7429
  TimbalMark,
@@ -7414,16 +7433,16 @@ var StudioWelcome = ({ config, icon }) => {
7414
7433
  }
7415
7434
  );
7416
7435
  return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: "aui-thread-welcome-root mx-auto my-auto flex w-full max-w-(--thread-max-width) grow flex-col", children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: "aui-thread-welcome-center flex w-full grow flex-col items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(
7417
- import_react47.motion.div,
7436
+ import_react48.motion.div,
7418
7437
  {
7419
7438
  className: "aui-thread-welcome-message flex flex-col items-center justify-center px-2 text-center sm:px-4",
7420
7439
  variants: welcomeStagger2,
7421
7440
  initial: "initial",
7422
7441
  animate: "animate",
7423
7442
  children: [
7424
- /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_react47.motion.div, { variants: welcomeIcon2, className: "mb-4 md:mb-5", children: iconNode }),
7443
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_react48.motion.div, { variants: welcomeIcon2, className: "mb-4 md:mb-5", children: iconNode }),
7425
7444
  /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
7426
- import_react47.motion.h1,
7445
+ import_react48.motion.h1,
7427
7446
  {
7428
7447
  variants: welcomeItem2,
7429
7448
  className: "aui-thread-welcome-message-inner text-xl font-semibold sm:text-2xl",
@@ -7431,7 +7450,7 @@ var StudioWelcome = ({ config, icon }) => {
7431
7450
  }
7432
7451
  ),
7433
7452
  /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
7434
- import_react47.motion.p,
7453
+ import_react48.motion.p,
7435
7454
  {
7436
7455
  variants: welcomeItem2,
7437
7456
  className: "aui-thread-welcome-message-inner mt-2 text-muted-foreground",
@@ -7445,7 +7464,7 @@ var StudioWelcome = ({ config, icon }) => {
7445
7464
 
7446
7465
  // src/studio/shell/studio-shell.tsx
7447
7466
  var import_jsx_runtime53 = require("react/jsx-runtime");
7448
- var import_react51 = require("react");
7467
+ var import_react52 = require("react");
7449
7468
  var DEFAULT_BREAKPOINT_PX2 = 768;
7450
7469
  function readPersistedCollapsed2(key) {
7451
7470
  if (!key || typeof window === "undefined") return false;
@@ -7488,7 +7507,7 @@ var TimbalStudioShell = ({
7488
7507
  components,
7489
7508
  ...chatProps
7490
7509
  }) => {
7491
- const reducedMotion = (0, import_react50.useReducedMotion)();
7510
+ const reducedMotion = (0, import_react51.useReducedMotion)();
7492
7511
  const shouldFetchWorkforces = !workforceId && workforcesProp === void 0;
7493
7512
  const fetched = useWorkforces({
7494
7513
  enabled: shouldFetchWorkforces,
@@ -7496,36 +7515,36 @@ var TimbalStudioShell = ({
7496
7515
  baseUrl: workforcesBaseUrl
7497
7516
  });
7498
7517
  const workforces = workforcesProp ?? fetched.workforces;
7499
- const [internalSelected, setInternalSelected] = (0, import_react49.useState)(
7518
+ const [internalSelected, setInternalSelected] = (0, import_react50.useState)(
7500
7519
  workforceId ?? ""
7501
7520
  );
7502
- (0, import_react49.useEffect)(() => {
7521
+ (0, import_react50.useEffect)(() => {
7503
7522
  if (workforceId) return;
7504
7523
  if (internalSelected) return;
7505
7524
  const first = workforces[0]?.id ?? workforces[0]?.uid ?? workforces[0]?.name;
7506
7525
  if (first) setInternalSelected(first);
7507
7526
  }, [workforces, workforceId, internalSelected]);
7508
7527
  const activeWorkforceId = workforceId ?? internalSelected ?? fetched.selectedId ?? "";
7509
- const [collapsed, setCollapsed] = (0, import_react49.useState)(() => {
7528
+ const [collapsed, setCollapsed] = (0, import_react50.useState)(() => {
7510
7529
  const persisted = readPersistedCollapsed2(persistKey);
7511
7530
  return persisted || defaultCollapsed;
7512
7531
  });
7513
- const [isMobile, setIsMobile] = (0, import_react49.useState)(() => {
7532
+ const [isMobile, setIsMobile] = (0, import_react50.useState)(() => {
7514
7533
  if (typeof window === "undefined") return false;
7515
7534
  return window.innerWidth < mobileBreakpointPx;
7516
7535
  });
7517
- const [mobileSidebarOpen, setMobileSidebarOpen] = (0, import_react49.useState)(false);
7518
- (0, import_react49.useEffect)(() => {
7536
+ const [mobileSidebarOpen, setMobileSidebarOpen] = (0, import_react50.useState)(false);
7537
+ (0, import_react50.useEffect)(() => {
7519
7538
  if (typeof window === "undefined") return;
7520
7539
  const onResize = () => setIsMobile(window.innerWidth < mobileBreakpointPx);
7521
7540
  onResize();
7522
7541
  window.addEventListener("resize", onResize);
7523
7542
  return () => window.removeEventListener("resize", onResize);
7524
7543
  }, [mobileBreakpointPx]);
7525
- (0, import_react49.useEffect)(() => {
7544
+ (0, import_react50.useEffect)(() => {
7526
7545
  if (!isMobile) setMobileSidebarOpen(false);
7527
7546
  }, [isMobile]);
7528
- (0, import_react49.useEffect)(() => {
7547
+ (0, import_react50.useEffect)(() => {
7529
7548
  if (!mobileSidebarOpen) return;
7530
7549
  const onKeyDown = (e) => {
7531
7550
  if (e.key === "Escape") setMobileSidebarOpen(false);
@@ -7549,21 +7568,21 @@ var TimbalStudioShell = ({
7549
7568
  layoutDirection
7550
7569
  );
7551
7570
  const desktopInsetPx = widthCollapsed ? SIDEBAR_INSET_PX_COLLAPSED : SIDEBAR_INSET_PX_EXPANDED;
7552
- const onCollapsedChange = (0, import_react49.useCallback)(
7571
+ const onCollapsedChange = (0, import_react50.useCallback)(
7553
7572
  (next) => {
7554
7573
  setCollapsed(next);
7555
7574
  writePersistedCollapsed2(persistKey, next);
7556
7575
  },
7557
7576
  [persistKey]
7558
7577
  );
7559
- const handleSelectWorkforce = (0, import_react49.useCallback)(
7578
+ const handleSelectWorkforce = (0, import_react50.useCallback)(
7560
7579
  (id) => {
7561
7580
  if (!workforceId) setInternalSelected(id);
7562
7581
  if (isMobile) setMobileSidebarOpen(false);
7563
7582
  },
7564
7583
  [workforceId, isMobile]
7565
7584
  );
7566
- const sidebarContext = (0, import_react49.useMemo)(
7585
+ const sidebarContext = (0, import_react50.useMemo)(
7567
7586
  () => ({
7568
7587
  collapsed: effectiveCollapsed,
7569
7588
  isMobile,
@@ -7573,7 +7592,7 @@ var TimbalStudioShell = ({
7573
7592
  }),
7574
7593
  [effectiveCollapsed, isMobile, isCollapsedRail, iconOnlyLayout]
7575
7594
  );
7576
- const resolvedComponents = (0, import_react49.useMemo)(() => {
7595
+ const resolvedComponents = (0, import_react50.useMemo)(() => {
7577
7596
  const next = { Welcome: StudioWelcome, ...components };
7578
7597
  next.Composer = makeComposerWithPortal(components?.Composer);
7579
7598
  return next;
@@ -7632,7 +7651,7 @@ var TimbalStudioShell = ({
7632
7651
  }
7633
7652
  ),
7634
7653
  /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(
7635
- import_react50.motion.header,
7654
+ import_react51.motion.header,
7636
7655
  {
7637
7656
  className: cn(
7638
7657
  "absolute top-0 right-0 z-40 flex items-start justify-between gap-2",
@@ -7673,7 +7692,7 @@ var TimbalStudioShell = ({
7673
7692
  }
7674
7693
  ),
7675
7694
  /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
7676
- import_react50.motion.main,
7695
+ import_react51.motion.main,
7677
7696
  {
7678
7697
  className: cn(
7679
7698
  "relative z-10 flex h-full min-w-0 flex-col",
@@ -7683,7 +7702,7 @@ var TimbalStudioShell = ({
7683
7702
  initial: false,
7684
7703
  animate: { paddingLeft: isMobile ? 12 : desktopInsetPx },
7685
7704
  transition: layoutTransition,
7686
- children: activeWorkforceId ? /* @__PURE__ */ (0, import_react51.createElement)(
7705
+ children: activeWorkforceId ? /* @__PURE__ */ (0, import_react52.createElement)(
7687
7706
  TimbalChat,
7688
7707
  {
7689
7708
  ...chatProps,
@@ -7717,7 +7736,7 @@ var userMessageRootClass = [
7717
7736
  ].join(" ");
7718
7737
 
7719
7738
  // src/studio/sidebar/mode-toggle.tsx
7720
- var import_react52 = require("react");
7739
+ var import_react53 = require("react");
7721
7740
  var import_lucide_react15 = require("lucide-react");
7722
7741
  var import_jsx_runtime54 = require("react/jsx-runtime");
7723
7742
  function readStoredTheme() {
@@ -7747,8 +7766,8 @@ var ModeToggle = ({
7747
7766
  label = "Toggle theme"
7748
7767
  }) => {
7749
7768
  const isControlled = theme !== void 0;
7750
- const [internalIsDark, setInternalIsDark] = (0, import_react52.useState)(false);
7751
- (0, import_react52.useLayoutEffect)(() => {
7769
+ const [internalIsDark, setInternalIsDark] = (0, import_react53.useState)(false);
7770
+ (0, import_react53.useLayoutEffect)(() => {
7752
7771
  if (isControlled) return;
7753
7772
  const stored = readStoredTheme();
7754
7773
  if (stored) {
@@ -7760,7 +7779,7 @@ var ModeToggle = ({
7760
7779
  setInternalIsDark(document.documentElement.classList.contains("dark"));
7761
7780
  }, [isControlled]);
7762
7781
  const isDark = isControlled ? theme === "dark" : internalIsDark;
7763
- const onClick = (0, import_react52.useCallback)(() => {
7782
+ const onClick = (0, import_react53.useCallback)(() => {
7764
7783
  const next = isDark ? "light" : "dark";
7765
7784
  if (setTheme) {
7766
7785
  setTheme(next);
@@ -7796,11 +7815,11 @@ var ModeToggle = ({
7796
7815
  };
7797
7816
 
7798
7817
  // src/studio/mode-switch.tsx
7799
- var import_react55 = require("react");
7818
+ var import_react56 = require("react");
7800
7819
 
7801
7820
  // src/ui/pill-segmented-tabs.tsx
7802
- var import_react53 = require("react");
7803
- var import_react54 = require("motion/react");
7821
+ var import_react54 = require("react");
7822
+ var import_react55 = require("motion/react");
7804
7823
 
7805
7824
  // src/design/pill-segmented-classes.ts
7806
7825
  var pillSegmentedTrackBase = "inline-flex w-fit max-w-max shrink-0 self-start items-center rounded-full";
@@ -7844,7 +7863,7 @@ var PillTab = ({
7844
7863
  segmentClassName,
7845
7864
  animateIndicator
7846
7865
  }) => {
7847
- const handlePress = (0, import_react53.useCallback)(() => {
7866
+ const handlePress = (0, import_react54.useCallback)(() => {
7848
7867
  if (!disabled) onSelect(tabKey);
7849
7868
  }, [disabled, onSelect, tabKey]);
7850
7869
  return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(
@@ -7861,7 +7880,7 @@ var PillTab = ({
7861
7880
  ),
7862
7881
  children: [
7863
7882
  isActive && animateIndicator ? /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
7864
- import_react54.motion.div,
7883
+ import_react55.motion.div,
7865
7884
  {
7866
7885
  layoutId,
7867
7886
  className: pillSegmentedActiveIndicatorClass,
@@ -7882,9 +7901,9 @@ var PillSegmentedTabs = ({
7882
7901
  layoutId: layoutIdProp,
7883
7902
  "aria-label": ariaLabel
7884
7903
  }) => {
7885
- const reactId = (0, import_react53.useId)();
7904
+ const reactId = (0, import_react54.useId)();
7886
7905
  const layoutId = layoutIdProp ?? `pill-segmented-${reactId.replace(/:/g, "")}`;
7887
- const reducedMotion = (0, import_react54.useReducedMotion)();
7906
+ const reducedMotion = (0, import_react55.useReducedMotion)();
7888
7907
  const isFlush = trackVariant === "flush";
7889
7908
  const trackClass2 = isFlush ? pillSegmentedTrackFlushClass : pillSegmentedTrackClass;
7890
7909
  const segmentClassName = isFlush ? pillSegmentedFlushSegmentClass : pillSegmentedSegmentClass;
@@ -7903,7 +7922,7 @@ var PillSegmentedTabs = ({
7903
7922
  tab.key
7904
7923
  )) });
7905
7924
  };
7906
- var MemoPillSegmentedTabs = (0, import_react53.memo)(PillSegmentedTabs);
7925
+ var MemoPillSegmentedTabs = (0, import_react54.memo)(PillSegmentedTabs);
7907
7926
 
7908
7927
  // src/studio/mode-switch.tsx
7909
7928
  var import_jsx_runtime56 = require("react/jsx-runtime");
@@ -7911,7 +7930,7 @@ var STUDIO_NAV_MODE = {
7911
7930
  BUILD: "build",
7912
7931
  OPERATE: "operate"
7913
7932
  };
7914
- var StudioModeSwitch = (0, import_react55.memo)(
7933
+ var StudioModeSwitch = (0, import_react56.memo)(
7915
7934
  function StudioModeSwitch2({
7916
7935
  value,
7917
7936
  onChange,
@@ -7920,14 +7939,14 @@ var StudioModeSwitch = (0, import_react55.memo)(
7920
7939
  manageLabel = "Manage",
7921
7940
  "aria-label": ariaLabel = "Studio mode"
7922
7941
  }) {
7923
- const tabs = (0, import_react55.useMemo)(
7942
+ const tabs = (0, import_react56.useMemo)(
7924
7943
  () => [
7925
7944
  { key: STUDIO_NAV_MODE.BUILD, label: buildLabel },
7926
7945
  { key: STUDIO_NAV_MODE.OPERATE, label: manageLabel }
7927
7946
  ],
7928
7947
  [buildLabel, manageLabel]
7929
7948
  );
7930
- const handleChange = (0, import_react55.useCallback)(
7949
+ const handleChange = (0, import_react56.useCallback)(
7931
7950
  (key) => {
7932
7951
  if (key === STUDIO_NAV_MODE.BUILD || key === STUDIO_NAV_MODE.OPERATE) {
7933
7952
  onChange(key);
@@ -8086,6 +8105,13 @@ var HOUSE_RULES = [
8086
8105
  slop: `<span className="text-blue-600 bg-green-50">`,
8087
8106
  good: `<span className="text-primary bg-muted">`
8088
8107
  },
8108
+ {
8109
+ id: "chart-token-color",
8110
+ rule: "Pass chart and theme color tokens directly (var(--chart-1)) \u2014 never wrap them in hsl(), rgb(), or oklch().",
8111
+ 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.",
8112
+ slop: `<Cell fill="hsl(var(--chart-1))" />`,
8113
+ good: `<Cell fill="var(--chart-1)" />`
8114
+ },
8089
8115
  {
8090
8116
  id: "no-decorative-icons",
8091
8117
  rule: "Icons must earn their place (action, nav, or status). Never add an icon beside a label that already says the thing.",
@@ -8487,6 +8513,7 @@ var RAW_COLOR_RE = new RegExp(
8487
8513
  "g"
8488
8514
  );
8489
8515
  var COLOR_LITERAL_RE = /#[0-9a-fA-F]{3,8}\b|\b(?:oklch|rgba?|hsla?)\s*\(/g;
8516
+ var COLOR_FN_WRAPPING_VAR_RE = /\b(?:hsl|hsla|rgb|rgba|oklch|oklab|lab|lch|hwb|color)\s*\(\s*var\(\s*--/i;
8490
8517
  var INLINE_STYLE_COLOR_RE = /style=\{\{[^}]*\b(?:color|background|backgroundColor|borderColor|fill|stroke)\b/;
8491
8518
  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)/;
8492
8519
  var GRADIENT_RE = /\bbg-(?:gradient|linear|radial|conic)-/;
@@ -8509,11 +8536,26 @@ var RESERVED_GRADIENT_SET = new Set(RESERVED_GRADIENT_TOKENS);
8509
8536
  function stripVariants(util) {
8510
8537
  return util.replace(/^(?:[a-z-]+:)*/, "");
8511
8538
  }
8539
+ function describeArg(value) {
8540
+ if (value === null) return "null";
8541
+ if (Array.isArray(value)) return "an array";
8542
+ const t = typeof value;
8543
+ if (t === "object") {
8544
+ const keys = Object.keys(value).slice(0, 4);
8545
+ return keys.length ? `an object with keys { ${keys.join(", ")} }` : "an object";
8546
+ }
8547
+ return `a ${t}`;
8548
+ }
8512
8549
  function isCommentOrImport(line) {
8513
8550
  const t = line.trim();
8514
8551
  return t.startsWith("//") || t.startsWith("*") || t.startsWith("/*") || t.startsWith("import ") || t.startsWith("export ");
8515
8552
  }
8516
8553
  function lintGeneratedUi(source, options = {}) {
8554
+ if (typeof source !== "string") {
8555
+ throw new TypeError(
8556
+ `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.`
8557
+ );
8558
+ }
8517
8559
  const maxIcons = options.maxIconsPerView ?? SLOP_BUDGETS.maxIconsPerView;
8518
8560
  const maxRowDividers = options.maxRowDividers ?? SLOP_BUDGETS.maxRowDividers;
8519
8561
  const findings = [];
@@ -8593,7 +8635,17 @@ function lintGeneratedUi(source, options = {}) {
8593
8635
  });
8594
8636
  }
8595
8637
  }
8596
- const literals = line.match(COLOR_LITERAL_RE);
8638
+ const wrapsTokenInColorFn = COLOR_FN_WRAPPING_VAR_RE.test(line);
8639
+ if (wrapsTokenInColorFn) {
8640
+ findings.push({
8641
+ rule: "chart-token-color-fn",
8642
+ severity: "error",
8643
+ line: lineNo,
8644
+ 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.",
8645
+ snippet: line.trim().slice(0, 120)
8646
+ });
8647
+ }
8648
+ const literals = wrapsTokenInColorFn ? null : line.match(COLOR_LITERAL_RE);
8597
8649
  if (literals) {
8598
8650
  findings.push({
8599
8651
  rule: "color-literal",
@@ -8744,6 +8796,11 @@ function lintGeneratedUi(source, options = {}) {
8744
8796
  };
8745
8797
  }
8746
8798
  function formatLintReport(findings) {
8799
+ if (!Array.isArray(findings)) {
8800
+ throw new TypeError(
8801
+ `formatLintReport(findings) expects the findings array, but received ${describeArg(findings)}. Pass result.findings \u2014 formatLintReport(lintGeneratedUi(code).findings) \u2014 not the whole LintResult.`
8802
+ );
8803
+ }
8747
8804
  if (findings.length === 0) return "";
8748
8805
  const lines = findings.slice().sort((a, b) => a.line - b.line).map((f) => {
8749
8806
  const tag = f.severity === "error" ? "ERROR" : "warn ";
@@ -9454,7 +9511,7 @@ var TimbalThemeStyle = ({
9454
9511
  };
9455
9512
 
9456
9513
  // src/app/layout/app-density-context.tsx
9457
- var import_react56 = require("react");
9514
+ var import_react57 = require("react");
9458
9515
 
9459
9516
  // src/design/app-classes.ts
9460
9517
  var appPageColumnClass = "mx-auto w-full max-w-[100rem] px-4 md:px-6 lg:px-8";
@@ -9590,7 +9647,7 @@ function appDensityClass(key, density = "default") {
9590
9647
 
9591
9648
  // src/app/layout/app-density-context.tsx
9592
9649
  var import_jsx_runtime58 = require("react/jsx-runtime");
9593
- var AppDensityContext = (0, import_react56.createContext)("default");
9650
+ var AppDensityContext = (0, import_react57.createContext)("default");
9594
9651
  var AppDensityProvider = ({
9595
9652
  density = "default",
9596
9653
  children
@@ -9598,7 +9655,7 @@ var AppDensityProvider = ({
9598
9655
  return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(AppDensityContext.Provider, { value: density, children });
9599
9656
  };
9600
9657
  function useAppDensity() {
9601
- return (0, import_react56.useContext)(AppDensityContext);
9658
+ return (0, import_react57.useContext)(AppDensityContext);
9602
9659
  }
9603
9660
  function useAppDensityClass(key, override) {
9604
9661
  const inherited = useAppDensity();
@@ -9654,7 +9711,7 @@ function metricTilesGridColsClass(n) {
9654
9711
  }
9655
9712
 
9656
9713
  // src/charts/sparkline.tsx
9657
- var import_react57 = require("react");
9714
+ var import_react58 = require("react");
9658
9715
  var import_jsx_runtime60 = require("react/jsx-runtime");
9659
9716
  var Sparkline = ({
9660
9717
  data,
@@ -9670,9 +9727,9 @@ var Sparkline = ({
9670
9727
  labels,
9671
9728
  formatValue
9672
9729
  }) => {
9673
- const uid = (0, import_react57.useId)();
9674
- const containerRef = (0, import_react57.useRef)(null);
9675
- const [activeIndex, setActiveIndex] = (0, import_react57.useState)(null);
9730
+ const uid = (0, import_react58.useId)();
9731
+ const containerRef = (0, import_react58.useRef)(null);
9732
+ const [activeIndex, setActiveIndex] = (0, import_react58.useState)(null);
9676
9733
  const values = data.map((d) => typeof d === "number" ? d : toNum(d[dataKey]));
9677
9734
  if (values.length === 0) {
9678
9735
  return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { className: cn("inline-block", className), style: { width, height } });
@@ -9929,29 +9986,29 @@ var MetricTile = ({
9929
9986
  var import_jsx_runtime62 = require("react/jsx-runtime");
9930
9987
 
9931
9988
  // src/app/layout/AppShell.tsx
9989
+ var import_lucide_react16 = require("lucide-react");
9932
9990
  var import_react60 = require("motion/react");
9933
9991
  var import_react61 = require("react");
9934
9992
 
9935
9993
  // src/app/layout/app-shell-chat-context.tsx
9936
- var import_react58 = require("react");
9937
- var AppShellChatContext = (0, import_react58.createContext)(null);
9994
+ var import_react59 = require("react");
9995
+ var AppShellChatContext = (0, import_react59.createContext)(null);
9938
9996
  var AppShellChatProvider = AppShellChatContext.Provider;
9939
9997
  function useAppShellChat() {
9940
- return (0, import_react58.useContext)(AppShellChatContext);
9998
+ return (0, import_react59.useContext)(AppShellChatContext);
9941
9999
  }
9942
10000
 
9943
10001
  // src/app/layout/app-shell-nav-context.tsx
9944
- var import_react59 = require("react");
9945
- var AppShellNavContext = (0, import_react59.createContext)(null);
9946
- var AppShellNavProvider = AppShellNavContext.Provider;
10002
+ var AppShellNavProvider = ShellNavProvider;
10003
+ var NAV_NOOP = {
10004
+ open: false,
10005
+ setOpen: () => {
10006
+ },
10007
+ toggle: () => {
10008
+ }
10009
+ };
9947
10010
  function useAppShellNav() {
9948
- return (0, import_react59.useContext)(AppShellNavContext) ?? {
9949
- open: false,
9950
- setOpen: () => {
9951
- },
9952
- toggle: () => {
9953
- }
9954
- };
10011
+ return useOptionalShellNav() ?? NAV_NOOP;
9955
10012
  }
9956
10013
 
9957
10014
  // src/app/layout/AppShell.tsx
@@ -9962,6 +10019,12 @@ var floatingTriggerClass = cn(
9962
10019
  "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
9963
10020
  "bottom-6 right-6 max-sm:bottom-4 max-sm:right-4"
9964
10021
  );
10022
+ var floatingNavTriggerClass = cn(
10023
+ "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",
10024
+ "border border-border/60 bg-card/85 text-foreground shadow-card-elevated backdrop-blur-xl supports-backdrop-filter:bg-card/75",
10025
+ "transition-colors hover:bg-card",
10026
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background"
10027
+ );
9965
10028
  var floatingPanelClass = cn(
9966
10029
  "aui-app-shell-chat-float fixed z-50 flex flex-col overflow-hidden rounded-2xl border border-border/60 shadow-card-elevated",
9967
10030
  "bg-card/85 backdrop-blur-xl supports-backdrop-filter:bg-card/75",
@@ -10052,12 +10115,14 @@ var AppShell = ({
10052
10115
  navOpen: navOpenProp,
10053
10116
  defaultNavOpen = false,
10054
10117
  onNavOpenChange,
10118
+ mobileSidebarTrigger = "auto",
10055
10119
  className,
10056
10120
  mainClassName,
10057
10121
  contentFill = false
10058
10122
  }) => {
10059
10123
  const topbarContent = topbar ?? header;
10060
10124
  const hasChat = Boolean(chat);
10125
+ const showFloatingNavTrigger = Boolean(sidebar) && mobileSidebarTrigger !== "none" && !(mobileSidebarTrigger === "topbar") && !topbarContent;
10061
10126
  const [uncontrolledNavOpen, setUncontrolledNavOpen] = (0, import_react61.useState)(defaultNavOpen);
10062
10127
  const isNavControlled = navOpenProp !== void 0;
10063
10128
  const navOpen = isNavControlled ? navOpenProp : uncontrolledNavOpen;
@@ -10117,6 +10182,17 @@ var AppShell = ({
10117
10182
  style: studioChromeShellStyle,
10118
10183
  children: [
10119
10184
  sidebar,
10185
+ showFloatingNavTrigger && !navOpen ? /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
10186
+ "button",
10187
+ {
10188
+ type: "button",
10189
+ "aria-label": "Open navigation",
10190
+ "aria-expanded": false,
10191
+ onClick: () => setNavOpen(true),
10192
+ className: floatingNavTriggerClass,
10193
+ children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_lucide_react16.MenuIcon, { className: "size-5", "aria-hidden": true })
10194
+ }
10195
+ ) : null,
10120
10196
  sidebar && navOpen ? /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
10121
10197
  "button",
10122
10198
  {
@@ -10201,7 +10277,7 @@ var AppShellChatTrigger = ({
10201
10277
  };
10202
10278
 
10203
10279
  // src/app/layout/AppShellSidebarTrigger.tsx
10204
- var import_lucide_react16 = require("lucide-react");
10280
+ var import_lucide_react17 = require("lucide-react");
10205
10281
  var import_jsx_runtime65 = require("react/jsx-runtime");
10206
10282
  var AppShellSidebarTrigger = ({
10207
10283
  label = "Open navigation",
@@ -10220,7 +10296,7 @@ var AppShellSidebarTrigger = ({
10220
10296
  "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-foreground/10",
10221
10297
  className
10222
10298
  ),
10223
- children: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(import_lucide_react16.MenuIcon, { className: "size-5", "aria-hidden": true })
10299
+ children: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(import_lucide_react17.MenuIcon, { className: "size-5", "aria-hidden": true })
10224
10300
  }
10225
10301
  );
10226
10302
  };
@@ -10372,7 +10448,7 @@ function useAppCopilotContext() {
10372
10448
  }
10373
10449
 
10374
10450
  // src/app/chat/AppChatPanel.tsx
10375
- var import_lucide_react17 = require("lucide-react");
10451
+ var import_lucide_react18 = require("lucide-react");
10376
10452
  var import_jsx_runtime71 = require("react/jsx-runtime");
10377
10453
  var shellClass = "aui-app-chat-panel flex h-full min-h-0 flex-col overflow-hidden";
10378
10454
  var chromeClass = cn(
@@ -10426,7 +10502,7 @@ var AppChatPanel = ({
10426
10502
  className: closeButtonClass,
10427
10503
  onClick: () => shellChat.setOpen(false),
10428
10504
  "aria-label": "Close assistant",
10429
- children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(import_lucide_react17.XIcon, { className: "size-4", "aria-hidden": true })
10505
+ children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(import_lucide_react18.XIcon, { className: "size-4", "aria-hidden": true })
10430
10506
  }
10431
10507
  ) }) : null,
10432
10508
  /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("div", { className: bodyClass, children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
@@ -10955,7 +11031,7 @@ var ResourceCard = ({
10955
11031
  };
10956
11032
 
10957
11033
  // src/app/surfaces/AlertCard.tsx
10958
- var import_lucide_react18 = require("lucide-react");
11034
+ var import_lucide_react19 = require("lucide-react");
10959
11035
  var import_jsx_runtime82 = require("react/jsx-runtime");
10960
11036
  var alertCardShellClass = cn(
10961
11037
  "flex flex-col rounded-2xl p-4 text-left font-normal border border-border shadow-card",
@@ -10972,11 +11048,11 @@ var alertCardInteractiveClass = cn(
10972
11048
  );
10973
11049
 
10974
11050
  // src/app/surfaces/CatalogCard.tsx
10975
- var import_lucide_react20 = require("lucide-react");
11051
+ var import_lucide_react21 = require("lucide-react");
10976
11052
 
10977
11053
  // src/ui/copy-button.tsx
10978
11054
  var React5 = __toESM(require("react"), 1);
10979
- var import_lucide_react19 = require("lucide-react");
11055
+ var import_lucide_react20 = require("lucide-react");
10980
11056
  var import_jsx_runtime83 = require("react/jsx-runtime");
10981
11057
  function CopyButton({
10982
11058
  value,
@@ -11002,7 +11078,7 @@ function CopyButton({
11002
11078
  } catch {
11003
11079
  }
11004
11080
  };
11005
- const Icon = copied ? import_lucide_react19.CheckIcon : import_lucide_react19.CopyIcon;
11081
+ const Icon = copied ? import_lucide_react20.CheckIcon : import_lucide_react20.CopyIcon;
11006
11082
  return /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)(
11007
11083
  "button",
11008
11084
  {
@@ -11563,7 +11639,7 @@ var FieldTextarea = ({
11563
11639
 
11564
11640
  // src/app/forms/FieldSelect.tsx
11565
11641
  var import_react71 = require("react");
11566
- var import_lucide_react21 = require("lucide-react");
11642
+ var import_lucide_react22 = require("lucide-react");
11567
11643
  var import_jsx_runtime98 = require("react/jsx-runtime");
11568
11644
  var selectWrapClass = "relative";
11569
11645
  var selectClass = cn(
@@ -11602,7 +11678,7 @@ var FieldSelect = ({
11602
11678
  }
11603
11679
  ),
11604
11680
  /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(
11605
- import_lucide_react21.ChevronDownIcon,
11681
+ import_lucide_react22.ChevronDownIcon,
11606
11682
  {
11607
11683
  className: "pointer-events-none absolute top-1/2 right-3 size-4 -translate-y-1/2 text-muted-foreground",
11608
11684
  "aria-hidden": true
@@ -11669,7 +11745,7 @@ var FieldSwitch = ({
11669
11745
  };
11670
11746
 
11671
11747
  // src/app/forms/SearchInput.tsx
11672
- var import_lucide_react22 = require("lucide-react");
11748
+ var import_lucide_react23 = require("lucide-react");
11673
11749
  var import_jsx_runtime100 = require("react/jsx-runtime");
11674
11750
  var SearchInput = ({
11675
11751
  className,
@@ -11685,7 +11761,7 @@ var SearchInput = ({
11685
11761
  className
11686
11762
  ),
11687
11763
  children: [
11688
- /* @__PURE__ */ (0, import_jsx_runtime100.jsx)(import_lucide_react22.SearchIcon, { className: "size-4 shrink-0 text-muted-foreground", "aria-hidden": true }),
11764
+ /* @__PURE__ */ (0, import_jsx_runtime100.jsx)(import_lucide_react23.SearchIcon, { className: "size-4 shrink-0 text-muted-foreground", "aria-hidden": true }),
11689
11765
  /* @__PURE__ */ (0, import_jsx_runtime100.jsx)(
11690
11766
  "input",
11691
11767
  {
@@ -11746,11 +11822,11 @@ var FilterField = ({
11746
11822
 
11747
11823
  // src/app/data/FilterDropdown.tsx
11748
11824
  var import_react73 = require("react");
11749
- var import_lucide_react25 = require("lucide-react");
11825
+ var import_lucide_react26 = require("lucide-react");
11750
11826
 
11751
11827
  // src/ui/checkbox.tsx
11752
11828
  var import_radix_ui7 = require("radix-ui");
11753
- var import_lucide_react23 = require("lucide-react");
11829
+ var import_lucide_react24 = require("lucide-react");
11754
11830
  var import_jsx_runtime104 = require("react/jsx-runtime");
11755
11831
  function Checkbox({
11756
11832
  className,
@@ -11772,7 +11848,7 @@ function Checkbox({
11772
11848
  {
11773
11849
  "data-slot": "checkbox-indicator",
11774
11850
  className: "flex items-center justify-center text-current animate-checkbox-pop",
11775
- children: /* @__PURE__ */ (0, import_jsx_runtime104.jsx)(import_lucide_react23.CheckIcon, { className: "size-2.5 stroke-[3.5px]" })
11851
+ children: /* @__PURE__ */ (0, import_jsx_runtime104.jsx)(import_lucide_react24.CheckIcon, { className: "size-2.5 stroke-[3.5px]" })
11776
11852
  }
11777
11853
  )
11778
11854
  }
@@ -11781,7 +11857,7 @@ function Checkbox({
11781
11857
 
11782
11858
  // src/ui/select.tsx
11783
11859
  var import_radix_ui8 = require("radix-ui");
11784
- var import_lucide_react24 = require("lucide-react");
11860
+ var import_lucide_react25 = require("lucide-react");
11785
11861
  var import_jsx_runtime105 = require("react/jsx-runtime");
11786
11862
  function Select({
11787
11863
  ...props
@@ -11817,7 +11893,7 @@ function SelectTrigger({
11817
11893
  ...props,
11818
11894
  children: [
11819
11895
  children,
11820
- /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(import_radix_ui8.Select.Icon, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(import_lucide_react24.ChevronDownIcon, { className: "size-4 opacity-50" }) })
11896
+ /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(import_radix_ui8.Select.Icon, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(import_lucide_react25.ChevronDownIcon, { className: "size-4 opacity-50" }) })
11821
11897
  ]
11822
11898
  }
11823
11899
  );
@@ -11886,7 +11962,7 @@ function SelectItem({
11886
11962
  ),
11887
11963
  ...props,
11888
11964
  children: [
11889
- /* @__PURE__ */ (0, import_jsx_runtime105.jsx)("span", { className: "absolute right-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(import_radix_ui8.Select.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(import_lucide_react24.CheckIcon, { className: "size-4" }) }) }),
11965
+ /* @__PURE__ */ (0, import_jsx_runtime105.jsx)("span", { className: "absolute right-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(import_radix_ui8.Select.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(import_lucide_react25.CheckIcon, { className: "size-4" }) }) }),
11890
11966
  /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(import_radix_ui8.Select.ItemText, { children })
11891
11967
  ]
11892
11968
  }
@@ -11915,7 +11991,7 @@ function SelectScrollUpButton({
11915
11991
  "data-slot": "select-scroll-up-button",
11916
11992
  className: cn("flex cursor-default items-center justify-center py-1", className),
11917
11993
  ...props,
11918
- children: /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(import_lucide_react24.ChevronUpIcon, { className: "size-4" })
11994
+ children: /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(import_lucide_react25.ChevronUpIcon, { className: "size-4" })
11919
11995
  }
11920
11996
  );
11921
11997
  }
@@ -11929,7 +12005,7 @@ function SelectScrollDownButton({
11929
12005
  "data-slot": "select-scroll-down-button",
11930
12006
  className: cn("flex cursor-default items-center justify-center py-1", className),
11931
12007
  ...props,
11932
- children: /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(import_lucide_react24.ChevronDownIcon, { className: "size-4" })
12008
+ children: /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(import_lucide_react25.ChevronDownIcon, { className: "size-4" })
11933
12009
  }
11934
12010
  );
11935
12011
  }
@@ -12102,7 +12178,7 @@ function FilterDropdown({
12102
12178
  variant: "outline",
12103
12179
  size: "sm",
12104
12180
  className: "border-dashed font-medium text-muted-foreground hover:text-foreground",
12105
- iconLeading: /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(import_lucide_react25.ListFilterIcon, { className: "size-4" }),
12181
+ iconLeading: /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(import_lucide_react26.ListFilterIcon, { className: "size-4" }),
12106
12182
  children: label
12107
12183
  }
12108
12184
  ) }),
@@ -12130,7 +12206,7 @@ function FilterDropdown({
12130
12206
  field.icon,
12131
12207
  /* @__PURE__ */ (0, import_jsx_runtime107.jsx)("span", { children: field.label })
12132
12208
  ] }),
12133
- /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(import_lucide_react25.ChevronRightIcon, { className: "size-4 text-muted-foreground/50" })
12209
+ /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(import_lucide_react26.ChevronRightIcon, { className: "size-4 text-muted-foreground/50" })
12134
12210
  ]
12135
12211
  },
12136
12212
  field.id
@@ -12178,7 +12254,7 @@ function FilterChip({ label, onRemove }) {
12178
12254
  onClick: onRemove,
12179
12255
  "aria-label": `Remove ${label}`,
12180
12256
  className: "flex size-5 items-center justify-center rounded-full text-muted-foreground outline-none transition-colors hover:bg-muted hover:text-foreground",
12181
- children: /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(import_lucide_react25.XIcon, { className: "size-3.5" })
12257
+ children: /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(import_lucide_react26.XIcon, { className: "size-3.5" })
12182
12258
  }
12183
12259
  )
12184
12260
  ] });
@@ -12441,7 +12517,7 @@ function ApplyClear({ onClear, onApply }) {
12441
12517
 
12442
12518
  // src/app/data/DataTable.tsx
12443
12519
  var import_react74 = require("react");
12444
- var import_lucide_react26 = require("lucide-react");
12520
+ var import_lucide_react27 = require("lucide-react");
12445
12521
 
12446
12522
  // src/ui/skeleton.tsx
12447
12523
  var import_jsx_runtime108 = require("react/jsx-runtime");
@@ -12500,12 +12576,12 @@ function SortIndicator({
12500
12576
  }) {
12501
12577
  const iconClass = "size-3.5 shrink-0 opacity-60 group-hover:opacity-100";
12502
12578
  if (!active) {
12503
- return /* @__PURE__ */ (0, import_jsx_runtime109.jsx)(import_lucide_react26.ArrowUpDownIcon, { className: iconClass, "aria-hidden": true });
12579
+ return /* @__PURE__ */ (0, import_jsx_runtime109.jsx)(import_lucide_react27.ArrowUpDownIcon, { className: iconClass, "aria-hidden": true });
12504
12580
  }
12505
12581
  if (direction === "desc") {
12506
- return /* @__PURE__ */ (0, import_jsx_runtime109.jsx)(import_lucide_react26.ArrowDownIcon, { className: iconClass, "aria-hidden": true });
12582
+ return /* @__PURE__ */ (0, import_jsx_runtime109.jsx)(import_lucide_react27.ArrowDownIcon, { className: iconClass, "aria-hidden": true });
12507
12583
  }
12508
- return /* @__PURE__ */ (0, import_jsx_runtime109.jsx)(import_lucide_react26.ArrowUpIcon, { className: iconClass, "aria-hidden": true });
12584
+ return /* @__PURE__ */ (0, import_jsx_runtime109.jsx)(import_lucide_react27.ArrowUpIcon, { className: iconClass, "aria-hidden": true });
12509
12585
  }
12510
12586
  function DataTable({
12511
12587
  columns,
@@ -12782,7 +12858,7 @@ function DataTable({
12782
12858
  onClick: () => setPage(pageIndex - 1),
12783
12859
  disabled: pageIndex <= 0,
12784
12860
  "aria-label": "Previous page",
12785
- children: /* @__PURE__ */ (0, import_jsx_runtime109.jsx)(import_lucide_react26.ChevronLeftIcon, { className: "size-4", "aria-hidden": true })
12861
+ children: /* @__PURE__ */ (0, import_jsx_runtime109.jsx)(import_lucide_react27.ChevronLeftIcon, { className: "size-4", "aria-hidden": true })
12786
12862
  }
12787
12863
  ),
12788
12864
  /* @__PURE__ */ (0, import_jsx_runtime109.jsx)(
@@ -12793,7 +12869,7 @@ function DataTable({
12793
12869
  onClick: () => setPage(pageIndex + 1),
12794
12870
  disabled: pageIndex >= pageCount - 1,
12795
12871
  "aria-label": "Next page",
12796
- children: /* @__PURE__ */ (0, import_jsx_runtime109.jsx)(import_lucide_react26.ChevronRightIcon, { className: "size-4", "aria-hidden": true })
12872
+ children: /* @__PURE__ */ (0, import_jsx_runtime109.jsx)(import_lucide_react27.ChevronRightIcon, { className: "size-4", "aria-hidden": true })
12797
12873
  }
12798
12874
  )
12799
12875
  ] })
@@ -13332,7 +13408,7 @@ function UntitledButton({
13332
13408
  }
13333
13409
 
13334
13410
  // src/ui/banner.tsx
13335
- var import_lucide_react27 = require("lucide-react");
13411
+ var import_lucide_react28 = require("lucide-react");
13336
13412
  var import_jsx_runtime114 = require("react/jsx-runtime");
13337
13413
  var bannerSoftClass = {
13338
13414
  default: "border-border/50 bg-muted/30 text-foreground/90 dark:bg-muted/15",
@@ -13429,7 +13505,7 @@ function Banner({
13429
13505
  isSingleLine ? "self-center" : "-mt-0.5",
13430
13506
  isSolid ? "opacity-80 hover:bg-background/15 hover:opacity-100" : "text-muted-foreground hover:bg-foreground/10 hover:text-foreground"
13431
13507
  ),
13432
- children: /* @__PURE__ */ (0, import_jsx_runtime114.jsx)(import_lucide_react27.XIcon, { className: "size-4", "aria-hidden": true })
13508
+ children: /* @__PURE__ */ (0, import_jsx_runtime114.jsx)(import_lucide_react28.XIcon, { className: "size-4", "aria-hidden": true })
13433
13509
  }
13434
13510
  ) : null
13435
13511
  ]
@@ -13528,7 +13604,7 @@ var React6 = __toESM(require("react"), 1);
13528
13604
  var import_core2 = require("@dnd-kit/core");
13529
13605
  var import_sortable = require("@dnd-kit/sortable");
13530
13606
  var import_utilities = require("@dnd-kit/utilities");
13531
- var import_lucide_react28 = require("lucide-react");
13607
+ var import_lucide_react29 = require("lucide-react");
13532
13608
  var import_jsx_runtime116 = require("react/jsx-runtime");
13533
13609
  var columnTitleToneClass = {
13534
13610
  default: "text-foreground",
@@ -13614,7 +13690,7 @@ function SortableCard({
13614
13690
  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",
13615
13691
  ...attributes,
13616
13692
  ...listeners2,
13617
- children: /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(import_lucide_react28.GripVerticalIcon, { className: "size-4", "aria-hidden": true })
13693
+ children: /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(import_lucide_react29.GripVerticalIcon, { className: "size-4", "aria-hidden": true })
13618
13694
  }
13619
13695
  ) : null,
13620
13696
  renderCard(card, { column, isDragging, isOverlay: false, dragHandleProps })
@@ -14028,7 +14104,7 @@ When you call a tool that returns an artifact (\`make_chart\`, \`ask_question\`,
14028
14104
  `.trim();
14029
14105
 
14030
14106
  // src/auth/guard.tsx
14031
- var import_lucide_react29 = require("lucide-react");
14107
+ var import_lucide_react30 = require("lucide-react");
14032
14108
  var import_jsx_runtime117 = require("react/jsx-runtime");
14033
14109
  var AuthGuard = ({
14034
14110
  children,
@@ -14040,7 +14116,7 @@ var AuthGuard = ({
14040
14116
  return children;
14041
14117
  }
14042
14118
  if (loading) {
14043
- return /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("div", { className: "flex items-center justify-center h-screen", children: /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(import_lucide_react29.Loader2, { className: "w-8 h-8 animate-spin" }) });
14119
+ return /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("div", { className: "flex items-center justify-center h-screen", children: /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(import_lucide_react30.Loader2, { className: "w-8 h-8 animate-spin" }) });
14044
14120
  }
14045
14121
  if (requireAuth && !isAuthenticated && !isEmbedded) {
14046
14122
  const returnTo = encodeURIComponent(
@@ -14151,7 +14227,7 @@ function Switch({
14151
14227
 
14152
14228
  // src/ui/radio-group.tsx
14153
14229
  var import_radix_ui13 = require("radix-ui");
14154
- var import_lucide_react30 = require("lucide-react");
14230
+ var import_lucide_react31 = require("lucide-react");
14155
14231
  var import_jsx_runtime122 = require("react/jsx-runtime");
14156
14232
  function RadioGroup({
14157
14233
  className,
@@ -14186,7 +14262,7 @@ function RadioGroupItem({
14186
14262
  {
14187
14263
  "data-slot": "radio-group-indicator",
14188
14264
  className: "flex items-center justify-center",
14189
- children: /* @__PURE__ */ (0, import_jsx_runtime122.jsx)(import_lucide_react30.CircleIcon, { className: "size-2 fill-foreground text-foreground" })
14265
+ children: /* @__PURE__ */ (0, import_jsx_runtime122.jsx)(import_lucide_react31.CircleIcon, { className: "size-2 fill-foreground text-foreground" })
14190
14266
  }
14191
14267
  )
14192
14268
  }
@@ -14262,7 +14338,7 @@ function AspectRatio({
14262
14338
  }
14263
14339
 
14264
14340
  // src/ui/breadcrumb.tsx
14265
- var import_lucide_react31 = require("lucide-react");
14341
+ var import_lucide_react32 = require("lucide-react");
14266
14342
  var import_radix_ui16 = require("radix-ui");
14267
14343
  var import_jsx_runtime125 = require("react/jsx-runtime");
14268
14344
  function Breadcrumb({ ...props }) {
@@ -14332,7 +14408,7 @@ function BreadcrumbSeparator({
14332
14408
  "aria-hidden": "true",
14333
14409
  className: cn("[&>svg]:size-3.5", className),
14334
14410
  ...props,
14335
- children: children ?? /* @__PURE__ */ (0, import_jsx_runtime125.jsx)(import_lucide_react31.ChevronRightIcon, {})
14411
+ children: children ?? /* @__PURE__ */ (0, import_jsx_runtime125.jsx)(import_lucide_react32.ChevronRightIcon, {})
14336
14412
  }
14337
14413
  );
14338
14414
  }
@@ -14349,7 +14425,7 @@ function BreadcrumbEllipsis({
14349
14425
  className: cn("flex size-8 items-center justify-center", className),
14350
14426
  ...props,
14351
14427
  children: [
14352
- /* @__PURE__ */ (0, import_jsx_runtime125.jsx)(import_lucide_react31.MoreHorizontalIcon, { className: "size-4" }),
14428
+ /* @__PURE__ */ (0, import_jsx_runtime125.jsx)(import_lucide_react32.MoreHorizontalIcon, { className: "size-4" }),
14353
14429
  /* @__PURE__ */ (0, import_jsx_runtime125.jsx)("span", { className: "sr-only", children: "More" })
14354
14430
  ]
14355
14431
  }
@@ -14357,7 +14433,7 @@ function BreadcrumbEllipsis({
14357
14433
  }
14358
14434
 
14359
14435
  // src/ui/pagination.tsx
14360
- var import_lucide_react32 = require("lucide-react");
14436
+ var import_lucide_react33 = require("lucide-react");
14361
14437
  var import_jsx_runtime126 = require("react/jsx-runtime");
14362
14438
  function Pagination({ className, ...props }) {
14363
14439
  return /* @__PURE__ */ (0, import_jsx_runtime126.jsx)(
@@ -14411,7 +14487,7 @@ function PaginationPrevious({
14411
14487
  className: cn("gap-1 px-2.5 sm:pl-2.5", className),
14412
14488
  ...props,
14413
14489
  children: [
14414
- /* @__PURE__ */ (0, import_jsx_runtime126.jsx)(import_lucide_react32.ChevronLeftIcon, { className: "size-4" }),
14490
+ /* @__PURE__ */ (0, import_jsx_runtime126.jsx)(import_lucide_react33.ChevronLeftIcon, { className: "size-4" }),
14415
14491
  /* @__PURE__ */ (0, import_jsx_runtime126.jsx)("span", { className: "hidden sm:block", children: "Previous" })
14416
14492
  ]
14417
14493
  }
@@ -14430,7 +14506,7 @@ function PaginationNext({
14430
14506
  ...props,
14431
14507
  children: [
14432
14508
  /* @__PURE__ */ (0, import_jsx_runtime126.jsx)("span", { className: "hidden sm:block", children: "Next" }),
14433
- /* @__PURE__ */ (0, import_jsx_runtime126.jsx)(import_lucide_react32.ChevronRightIcon, { className: "size-4" })
14509
+ /* @__PURE__ */ (0, import_jsx_runtime126.jsx)(import_lucide_react33.ChevronRightIcon, { className: "size-4" })
14434
14510
  ]
14435
14511
  }
14436
14512
  );
@@ -14447,7 +14523,7 @@ function PaginationEllipsis({
14447
14523
  className: cn("flex size-9 items-center justify-center", className),
14448
14524
  ...props,
14449
14525
  children: [
14450
- /* @__PURE__ */ (0, import_jsx_runtime126.jsx)(import_lucide_react32.MoreHorizontalIcon, { className: "size-4" }),
14526
+ /* @__PURE__ */ (0, import_jsx_runtime126.jsx)(import_lucide_react33.MoreHorizontalIcon, { className: "size-4" }),
14451
14527
  /* @__PURE__ */ (0, import_jsx_runtime126.jsx)("span", { className: "sr-only", children: "More pages" })
14452
14528
  ]
14453
14529
  }
@@ -14553,7 +14629,7 @@ function ToolbarLink({
14553
14629
 
14554
14630
  // src/ui/menubar.tsx
14555
14631
  var import_radix_ui18 = require("radix-ui");
14556
- var import_lucide_react33 = require("lucide-react");
14632
+ var import_lucide_react34 = require("lucide-react");
14557
14633
  var import_jsx_runtime128 = require("react/jsx-runtime");
14558
14634
  function Menubar({
14559
14635
  className,
@@ -14651,7 +14727,7 @@ function MenubarCheckboxItem({
14651
14727
  checked,
14652
14728
  ...props,
14653
14729
  children: [
14654
- /* @__PURE__ */ (0, import_jsx_runtime128.jsx)("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(import_radix_ui18.Menubar.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(import_lucide_react33.CheckIcon, { className: "size-4" }) }) }),
14730
+ /* @__PURE__ */ (0, import_jsx_runtime128.jsx)("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(import_radix_ui18.Menubar.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(import_lucide_react34.CheckIcon, { className: "size-4" }) }) }),
14655
14731
  children
14656
14732
  ]
14657
14733
  }
@@ -14674,7 +14750,7 @@ function MenubarRadioItem({
14674
14750
  className: cn(overlayItemClass, "py-1 pr-2 pl-8", className),
14675
14751
  ...props,
14676
14752
  children: [
14677
- /* @__PURE__ */ (0, import_jsx_runtime128.jsx)("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(import_radix_ui18.Menubar.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(import_lucide_react33.CircleIcon, { className: "size-2 fill-current" }) }) }),
14753
+ /* @__PURE__ */ (0, import_jsx_runtime128.jsx)("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(import_radix_ui18.Menubar.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(import_lucide_react34.CircleIcon, { className: "size-2 fill-current" }) }) }),
14678
14754
  children
14679
14755
  ]
14680
14756
  }
@@ -14751,7 +14827,7 @@ function MenubarSubTrigger({
14751
14827
  ...props,
14752
14828
  children: [
14753
14829
  children,
14754
- /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(import_lucide_react33.ChevronRightIcon, { className: "ml-auto size-4" })
14830
+ /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(import_lucide_react34.ChevronRightIcon, { className: "ml-auto size-4" })
14755
14831
  ]
14756
14832
  }
14757
14833
  );
@@ -14776,7 +14852,7 @@ function MenubarSubContent({
14776
14852
 
14777
14853
  // src/ui/navigation-menu.tsx
14778
14854
  var import_radix_ui19 = require("radix-ui");
14779
- var import_lucide_react34 = require("lucide-react");
14855
+ var import_lucide_react35 = require("lucide-react");
14780
14856
  var import_class_variance_authority3 = require("class-variance-authority");
14781
14857
  var import_jsx_runtime129 = require("react/jsx-runtime");
14782
14858
  function NavigationMenu({
@@ -14841,7 +14917,7 @@ function NavigationMenuTrigger({
14841
14917
  children,
14842
14918
  " ",
14843
14919
  /* @__PURE__ */ (0, import_jsx_runtime129.jsx)(
14844
- import_lucide_react34.ChevronDownIcon,
14920
+ import_lucide_react35.ChevronDownIcon,
14845
14921
  {
14846
14922
  className: "relative top-px ml-1 size-3 transition duration-300 group-data-[state=open]:rotate-180",
14847
14923
  "aria-hidden": "true"
@@ -14921,7 +14997,7 @@ function NavigationMenuIndicator({
14921
14997
 
14922
14998
  // src/ui/command.tsx
14923
14999
  var import_cmdk = require("cmdk");
14924
- var import_lucide_react35 = require("lucide-react");
15000
+ var import_lucide_react36 = require("lucide-react");
14925
15001
  var import_jsx_runtime130 = require("react/jsx-runtime");
14926
15002
  function Command({
14927
15003
  className,
@@ -14972,7 +15048,7 @@ function CommandInput({
14972
15048
  "data-slot": "command-input-wrapper",
14973
15049
  className: "flex h-9 items-center gap-2 border-b border-border px-2.5",
14974
15050
  children: [
14975
- /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(import_lucide_react35.SearchIcon, { className: "size-4 shrink-0 text-muted-foreground" }),
15051
+ /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(import_lucide_react36.SearchIcon, { className: "size-4 shrink-0 text-muted-foreground" }),
14976
15052
  /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(
14977
15053
  import_cmdk.Command.Input,
14978
15054
  {
@@ -15078,7 +15154,7 @@ function CommandShortcut({
15078
15154
 
15079
15155
  // src/ui/calendar.tsx
15080
15156
  var React7 = __toESM(require("react"), 1);
15081
- var import_lucide_react36 = require("lucide-react");
15157
+ var import_lucide_react37 = require("lucide-react");
15082
15158
  var import_react_day_picker = require("react-day-picker");
15083
15159
  var import_jsx_runtime131 = require("react/jsx-runtime");
15084
15160
  function Calendar({
@@ -15150,7 +15226,7 @@ function Calendar({
15150
15226
  },
15151
15227
  components: {
15152
15228
  Chevron: ({ orientation, className: chevronClass, ...chevronProps }) => {
15153
- const Icon = orientation === "left" ? import_lucide_react36.ChevronLeftIcon : orientation === "right" ? import_lucide_react36.ChevronRightIcon : import_lucide_react36.ChevronDownIcon;
15229
+ const Icon = orientation === "left" ? import_lucide_react37.ChevronLeftIcon : orientation === "right" ? import_lucide_react37.ChevronRightIcon : import_lucide_react37.ChevronDownIcon;
15154
15230
  return /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(Icon, { className: cn("size-4", chevronClass), ...chevronProps });
15155
15231
  },
15156
15232
  DayButton: CalendarDayButton
@@ -15203,7 +15279,7 @@ function CalendarDayButton({
15203
15279
  }
15204
15280
 
15205
15281
  // src/ui/combobox.tsx
15206
- var import_lucide_react37 = require("lucide-react");
15282
+ var import_lucide_react38 = require("lucide-react");
15207
15283
  var import_jsx_runtime132 = require("react/jsx-runtime");
15208
15284
  function Combobox({
15209
15285
  ...props
@@ -15229,7 +15305,7 @@ function ComboboxTrigger({
15229
15305
  ...props,
15230
15306
  children: [
15231
15307
  /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("span", { className: "truncate", children }),
15232
- /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(import_lucide_react37.ChevronDownIcon, { className: "size-4 shrink-0 opacity-50" })
15308
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(import_lucide_react38.ChevronDownIcon, { className: "size-4 shrink-0 opacity-50" })
15233
15309
  ]
15234
15310
  }
15235
15311
  );
@@ -15308,7 +15384,7 @@ function ComboboxShortcut({
15308
15384
  }
15309
15385
 
15310
15386
  // src/ui/date-picker.tsx
15311
- var import_lucide_react38 = require("lucide-react");
15387
+ var import_lucide_react39 = require("lucide-react");
15312
15388
  var import_jsx_runtime133 = require("react/jsx-runtime");
15313
15389
  function DatePicker({
15314
15390
  ...props
@@ -15374,7 +15450,7 @@ function DatePickerButton({
15374
15450
  ),
15375
15451
  ...props,
15376
15452
  children: [
15377
- /* @__PURE__ */ (0, import_jsx_runtime133.jsx)(import_lucide_react38.CalendarIcon, { className: "size-4 shrink-0 opacity-70" }),
15453
+ /* @__PURE__ */ (0, import_jsx_runtime133.jsx)(import_lucide_react39.CalendarIcon, { className: "size-4 shrink-0 opacity-70" }),
15378
15454
  date ? formatPickerDate(date) : placeholder
15379
15455
  ]
15380
15456
  }
@@ -15382,7 +15458,7 @@ function DatePickerButton({
15382
15458
  }
15383
15459
 
15384
15460
  // src/ui/input-otp.tsx
15385
- var import_lucide_react39 = require("lucide-react");
15461
+ var import_lucide_react40 = require("lucide-react");
15386
15462
  var import_radix_ui20 = require("radix-ui");
15387
15463
  var import_jsx_runtime134 = require("react/jsx-runtime");
15388
15464
  function InputOTP({
@@ -15454,7 +15530,7 @@ function InputOTPSeparator({
15454
15530
  "aria-hidden": true,
15455
15531
  className: cn("text-muted-foreground", className),
15456
15532
  ...props,
15457
- children: /* @__PURE__ */ (0, import_jsx_runtime134.jsx)(import_lucide_react39.MinusIcon, { className: "size-4" })
15533
+ children: /* @__PURE__ */ (0, import_jsx_runtime134.jsx)(import_lucide_react40.MinusIcon, { className: "size-4" })
15458
15534
  }
15459
15535
  );
15460
15536
  }
@@ -15599,7 +15675,7 @@ function InputGroupText({
15599
15675
 
15600
15676
  // src/ui/accordion.tsx
15601
15677
  var import_radix_ui21 = require("radix-ui");
15602
- var import_lucide_react40 = require("lucide-react");
15678
+ var import_lucide_react41 = require("lucide-react");
15603
15679
  var import_jsx_runtime138 = require("react/jsx-runtime");
15604
15680
  function Accordion({
15605
15681
  ...props
@@ -15637,7 +15713,7 @@ function AccordionTrigger({
15637
15713
  ...props,
15638
15714
  children: [
15639
15715
  children,
15640
- /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(import_lucide_react40.ChevronDownIcon, { className: "pointer-events-none size-4 shrink-0 text-muted-foreground transition-transform duration-200" })
15716
+ /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(import_lucide_react41.ChevronDownIcon, { className: "pointer-events-none size-4 shrink-0 text-muted-foreground transition-transform duration-200" })
15641
15717
  ]
15642
15718
  }
15643
15719
  ) });
@@ -15808,7 +15884,7 @@ function Badge({
15808
15884
  }
15809
15885
 
15810
15886
  // src/ui/sheet.tsx
15811
- var import_lucide_react41 = require("lucide-react");
15887
+ var import_lucide_react42 = require("lucide-react");
15812
15888
  var import_radix_ui26 = require("radix-ui");
15813
15889
  var import_class_variance_authority5 = require("class-variance-authority");
15814
15890
  var import_jsx_runtime143 = require("react/jsx-runtime");
@@ -15910,7 +15986,7 @@ function SheetContent({
15910
15986
  children: [
15911
15987
  children,
15912
15988
  showCloseButton ? /* @__PURE__ */ (0, import_jsx_runtime143.jsxs)(import_radix_ui26.Dialog.Close, { className: "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-foreground/10 focus:outline-hidden disabled:pointer-events-none", children: [
15913
- /* @__PURE__ */ (0, import_jsx_runtime143.jsx)(import_lucide_react41.XIcon, { className: "size-4" }),
15989
+ /* @__PURE__ */ (0, import_jsx_runtime143.jsx)(import_lucide_react42.XIcon, { className: "size-4" }),
15914
15990
  /* @__PURE__ */ (0, import_jsx_runtime143.jsx)("span", { className: "sr-only", children: "Close" })
15915
15991
  ] }) : null
15916
15992
  ]
@@ -15955,14 +16031,14 @@ function SheetDescription({
15955
16031
  className,
15956
16032
  ...props
15957
16033
  }) {
15958
- return /* @__PURE__ */ (0, import_jsx_runtime143.jsx)(
15959
- import_radix_ui26.Dialog.Description,
16034
+ return /* @__PURE__ */ (0, import_jsx_runtime143.jsx)(import_radix_ui26.Dialog.Description, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime143.jsx)(
16035
+ "div",
15960
16036
  {
15961
16037
  "data-slot": "sheet-description",
15962
16038
  className: cn("text-sm text-muted-foreground", className),
15963
16039
  ...props
15964
16040
  }
15965
- );
16041
+ ) });
15966
16042
  }
15967
16043
 
15968
16044
  // src/ui/alert-dialog.tsx
@@ -16299,7 +16375,7 @@ function HoverCardContent({
16299
16375
 
16300
16376
  // src/ui/context-menu.tsx
16301
16377
  var import_radix_ui33 = require("radix-ui");
16302
- var import_lucide_react42 = require("lucide-react");
16378
+ var import_lucide_react43 = require("lucide-react");
16303
16379
  var import_jsx_runtime150 = require("react/jsx-runtime");
16304
16380
  function ContextMenu({
16305
16381
  ...props
@@ -16368,7 +16444,7 @@ function ContextMenuCheckboxItem({
16368
16444
  checked,
16369
16445
  ...props,
16370
16446
  children: [
16371
- /* @__PURE__ */ (0, import_jsx_runtime150.jsx)("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime150.jsx)(import_radix_ui33.ContextMenu.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime150.jsx)(import_lucide_react42.CheckIcon, { className: "size-4" }) }) }),
16447
+ /* @__PURE__ */ (0, import_jsx_runtime150.jsx)("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime150.jsx)(import_radix_ui33.ContextMenu.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime150.jsx)(import_lucide_react43.CheckIcon, { className: "size-4" }) }) }),
16372
16448
  children
16373
16449
  ]
16374
16450
  }
@@ -16397,7 +16473,7 @@ function ContextMenuRadioItem({
16397
16473
  className: cn(overlayItemClass, "py-1.5 pr-2 pl-8", className),
16398
16474
  ...props,
16399
16475
  children: [
16400
- /* @__PURE__ */ (0, import_jsx_runtime150.jsx)("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime150.jsx)(import_radix_ui33.ContextMenu.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime150.jsx)(import_lucide_react42.CircleIcon, { className: "size-2 fill-current" }) }) }),
16476
+ /* @__PURE__ */ (0, import_jsx_runtime150.jsx)("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime150.jsx)(import_radix_ui33.ContextMenu.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime150.jsx)(import_lucide_react43.CircleIcon, { className: "size-2 fill-current" }) }) }),
16401
16477
  children
16402
16478
  ]
16403
16479
  }
@@ -16474,7 +16550,7 @@ function ContextMenuSubTrigger({
16474
16550
  ...props,
16475
16551
  children: [
16476
16552
  children,
16477
- /* @__PURE__ */ (0, import_jsx_runtime150.jsx)(import_lucide_react42.ChevronRightIcon, { className: "ml-auto size-4" })
16553
+ /* @__PURE__ */ (0, import_jsx_runtime150.jsx)(import_lucide_react43.ChevronRightIcon, { className: "ml-auto size-4" })
16478
16554
  ]
16479
16555
  }
16480
16556
  );
@@ -16707,7 +16783,7 @@ function TableCaption({ className, ...props }) {
16707
16783
 
16708
16784
  // src/ui/toast.tsx
16709
16785
  var import_radix_ui34 = require("radix-ui");
16710
- var import_lucide_react43 = require("lucide-react");
16786
+ var import_lucide_react44 = require("lucide-react");
16711
16787
  var import_jsx_runtime154 = require("react/jsx-runtime");
16712
16788
  function ToastProvider({
16713
16789
  ...props
@@ -16780,7 +16856,7 @@ function ToastClose({
16780
16856
  ),
16781
16857
  "toast-close": "",
16782
16858
  ...props,
16783
- children: /* @__PURE__ */ (0, import_jsx_runtime154.jsx)(import_lucide_react43.XIcon, { className: "size-4" })
16859
+ children: /* @__PURE__ */ (0, import_jsx_runtime154.jsx)(import_lucide_react44.XIcon, { className: "size-4" })
16784
16860
  }
16785
16861
  );
16786
16862
  }
@@ -16950,7 +17026,7 @@ function AvatarGroup({
16950
17026
  }
16951
17027
 
16952
17028
  // src/ui/stepper.tsx
16953
- var import_lucide_react44 = require("lucide-react");
17029
+ var import_lucide_react45 = require("lucide-react");
16954
17030
  var import_jsx_runtime157 = require("react/jsx-runtime");
16955
17031
  function Stepper({
16956
17032
  steps,
@@ -16995,7 +17071,7 @@ function Stepper({
16995
17071
  active && "border-primary text-primary",
16996
17072
  !complete && !active && "border-border text-muted-foreground"
16997
17073
  ),
16998
- children: complete ? /* @__PURE__ */ (0, import_jsx_runtime157.jsx)(import_lucide_react44.CheckIcon, { className: "size-3.5", "aria-hidden": true }) : index + 1
17074
+ children: complete ? /* @__PURE__ */ (0, import_jsx_runtime157.jsx)(import_lucide_react45.CheckIcon, { className: "size-3.5", "aria-hidden": true }) : index + 1
16999
17075
  }
17000
17076
  ),
17001
17077
  !last ? /* @__PURE__ */ (0, import_jsx_runtime157.jsx)(
@@ -17034,7 +17110,7 @@ function Stepper({
17034
17110
 
17035
17111
  // src/ui/rating.tsx
17036
17112
  var React11 = __toESM(require("react"), 1);
17037
- var import_lucide_react45 = require("lucide-react");
17113
+ var import_lucide_react46 = require("lucide-react");
17038
17114
  var import_jsx_runtime158 = require("react/jsx-runtime");
17039
17115
  var sizeClass = { sm: "size-4", md: "size-5", lg: "size-6" };
17040
17116
  var ratingFillClass = {
@@ -17077,7 +17153,7 @@ function Rating({
17077
17153
  "aria-label": `${label}: ${value} of ${max}`,
17078
17154
  className: cn("inline-flex items-center gap-0.5", disabled && "opacity-50", className),
17079
17155
  children: Array.from({ length: max }, (_, i) => /* @__PURE__ */ (0, import_jsx_runtime158.jsx)(
17080
- import_lucide_react45.StarIcon,
17156
+ import_lucide_react46.StarIcon,
17081
17157
  {
17082
17158
  "aria-hidden": true,
17083
17159
  className: cn(
@@ -17114,7 +17190,7 @@ function Rating({
17114
17190
  onBlur: () => setHover(null),
17115
17191
  className: "rounded-sm p-0.5 transition-transform hover:scale-110 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-foreground/15",
17116
17192
  children: /* @__PURE__ */ (0, import_jsx_runtime158.jsx)(
17117
- import_lucide_react45.StarIcon,
17193
+ import_lucide_react46.StarIcon,
17118
17194
  {
17119
17195
  className: cn(
17120
17196
  sizeClass[size],
@@ -17133,7 +17209,7 @@ function Rating({
17133
17209
 
17134
17210
  // src/ui/number-field.tsx
17135
17211
  var React12 = __toESM(require("react"), 1);
17136
- var import_lucide_react46 = require("lucide-react");
17212
+ var import_lucide_react47 = require("lucide-react");
17137
17213
  var import_jsx_runtime159 = require("react/jsx-runtime");
17138
17214
  var heightClass = { sm: "h-9", default: "h-10" };
17139
17215
  var stepButtonClass = "inline-flex aspect-square h-full items-center justify-center text-muted-foreground transition-colors hover:bg-accent hover:text-foreground disabled:pointer-events-none disabled:opacity-40 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-foreground/15";
@@ -17184,7 +17260,7 @@ function NumberField({
17184
17260
  disabled: disabled || typeof min === "number" && value <= min,
17185
17261
  onClick: () => commit(value - step),
17186
17262
  className: cn(stepButtonClass, "border-r border-border"),
17187
- children: /* @__PURE__ */ (0, import_jsx_runtime159.jsx)(import_lucide_react46.MinusIcon, { className: "size-4" })
17263
+ children: /* @__PURE__ */ (0, import_jsx_runtime159.jsx)(import_lucide_react47.MinusIcon, { className: "size-4" })
17188
17264
  }
17189
17265
  ),
17190
17266
  /* @__PURE__ */ (0, import_jsx_runtime159.jsx)(
@@ -17220,7 +17296,7 @@ function NumberField({
17220
17296
  disabled: disabled || typeof max === "number" && value >= max,
17221
17297
  onClick: () => commit(value + step),
17222
17298
  className: cn(stepButtonClass, "border-l border-border"),
17223
- children: /* @__PURE__ */ (0, import_jsx_runtime159.jsx)(import_lucide_react46.PlusIcon, { className: "size-4" })
17299
+ children: /* @__PURE__ */ (0, import_jsx_runtime159.jsx)(import_lucide_react47.PlusIcon, { className: "size-4" })
17224
17300
  }
17225
17301
  )
17226
17302
  ]
@@ -17230,7 +17306,7 @@ function NumberField({
17230
17306
 
17231
17307
  // src/ui/tag-input.tsx
17232
17308
  var React13 = __toESM(require("react"), 1);
17233
- var import_lucide_react47 = require("lucide-react");
17309
+ var import_lucide_react48 = require("lucide-react");
17234
17310
  var import_jsx_runtime160 = require("react/jsx-runtime");
17235
17311
  var tagInputSizeClass = {
17236
17312
  sm: "min-h-8 gap-1 px-1.5 py-0.5",
@@ -17305,7 +17381,7 @@ function TagInput({
17305
17381
  "aria-label": `Remove ${tag}`,
17306
17382
  onClick: () => removeAt(index),
17307
17383
  className: "inline-flex size-4 items-center justify-center rounded-sm text-muted-foreground transition-colors hover:bg-foreground/10 hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-foreground/20",
17308
- children: /* @__PURE__ */ (0, import_jsx_runtime160.jsx)(import_lucide_react47.XIcon, { className: "size-3", "aria-hidden": true })
17384
+ children: /* @__PURE__ */ (0, import_jsx_runtime160.jsx)(import_lucide_react48.XIcon, { className: "size-3", "aria-hidden": true })
17309
17385
  }
17310
17386
  )
17311
17387
  ]