@ai-matrx/design-system 0.86.362 → 0.86.364

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/dist/index.cjs CHANGED
@@ -276,6 +276,12 @@ function AlertTriangleIcon(props) {
276
276
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M12 17h.01" })
277
277
  ] });
278
278
  }
279
+ function CircleCheckIcon(props) {
280
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("svg", { ...lucideProps("circle-check", props), children: [
281
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("circle", { cx: "12", cy: "12", r: "10" }),
282
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "m16 9-5.5 5.5L8 12" })
283
+ ] });
284
+ }
279
285
  function CircleHelpIcon(props) {
280
286
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("svg", { ...lucideProps("circle-question-mark", props), children: [
281
287
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("circle", { cx: "12", cy: "12", r: "10" }),
@@ -283,6 +289,13 @@ function CircleHelpIcon(props) {
283
289
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M12 17h.01" })
284
290
  ] });
285
291
  }
292
+ function CircleXIcon(props) {
293
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("svg", { ...lucideProps("circle-x", props), children: [
294
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("circle", { cx: "12", cy: "12", r: "10" }),
295
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "m15 9-6 6" }),
296
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "m9 9 6 6" })
297
+ ] });
298
+ }
286
299
  function InfoIcon(props) {
287
300
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("svg", { ...lucideProps("info", props), children: [
288
301
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("circle", { cx: "12", cy: "12", r: "10" }),
@@ -3589,7 +3602,7 @@ function WritingBoxProvider({
3589
3602
  Box,
3590
3603
  children
3591
3604
  }) {
3592
- return /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(WritingBoxContext.Provider, { value: Box, children });
3605
+ return /* @__PURE__ */ (0, import_jsx_runtime100.jsx)(WritingBoxContext.Provider, { value: Box, children });
3593
3606
  }
3594
3607
  function useWritingBox() {
3595
3608
  return React68.useContext(WritingBoxContext) ?? StandInBox;
@@ -3598,12 +3611,12 @@ function WritingInputProvider({
3598
3611
  Box,
3599
3612
  children
3600
3613
  }) {
3601
- return /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(WritingInputContext.Provider, { value: Box, children });
3614
+ return /* @__PURE__ */ (0, import_jsx_runtime100.jsx)(WritingInputContext.Provider, { value: Box, children });
3602
3615
  }
3603
3616
  function useWritingInput() {
3604
3617
  return React68.useContext(WritingInputContext) ?? StandInInput;
3605
3618
  }
3606
- var React68, import_jsx_runtime99, KEY, registry4, WritingBoxContext, StandInBox, INPUT_KEY, inputRegistry, WritingInputContext, StandInInput;
3619
+ var React68, import_jsx_runtime100, KEY, registry4, WritingBoxContext, StandInBox, INPUT_KEY, inputRegistry, WritingInputContext, StandInInput;
3607
3620
  var init_writing_box = __esm({
3608
3621
  "src/writing-box.tsx"() {
3609
3622
  "use strict";
@@ -3612,7 +3625,7 @@ var init_writing_box = __esm({
3612
3625
  init_input();
3613
3626
  init_textarea();
3614
3627
  init_stand_in_notice();
3615
- import_jsx_runtime99 = require("react/jsx-runtime");
3628
+ import_jsx_runtime100 = require("react/jsx-runtime");
3616
3629
  KEY = /* @__PURE__ */ Symbol.for("@ai-matrx/design-system/writing-box");
3617
3630
  registry4 = globalThis;
3618
3631
  WritingBoxContext = registry4[KEY] ?? (registry4[KEY] = React68.createContext(null));
@@ -3623,7 +3636,7 @@ var init_writing_box = __esm({
3623
3636
  "A multi-line writing box drew as a plain Textarea (no mic, no read-aloud): the host did not mount <WritingBoxProvider Box={...}>."
3624
3637
  );
3625
3638
  }, []);
3626
- return /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Textarea, { ...props, "data-writing-box-host": UNCONFIGURED });
3639
+ return /* @__PURE__ */ (0, import_jsx_runtime100.jsx)(Textarea, { ...props, "data-writing-box-host": UNCONFIGURED });
3627
3640
  };
3628
3641
  INPUT_KEY = /* @__PURE__ */ Symbol.for("@ai-matrx/design-system/writing-input");
3629
3642
  inputRegistry = globalThis;
@@ -3635,7 +3648,7 @@ var init_writing_box = __esm({
3635
3648
  "A one-line writing input drew as a plain Input (no mic, no read-aloud): the host did not mount <WritingInputProvider Box={...}>."
3636
3649
  );
3637
3650
  }, []);
3638
- return /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(Input, { ...props, "data-writing-box-host": UNCONFIGURED });
3651
+ return /* @__PURE__ */ (0, import_jsx_runtime100.jsx)(Input, { ...props, "data-writing-box-host": UNCONFIGURED });
3639
3652
  };
3640
3653
  }
3641
3654
  });
@@ -3683,12 +3696,12 @@ function ClipboardFallbackDialog({
3683
3696
  inputRef.current?.focus();
3684
3697
  inputRef.current?.select();
3685
3698
  };
3686
- return /* @__PURE__ */ (0, import_jsx_runtime101.jsx)(Dialog, { open, onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime101.jsxs)(DialogContent, { size: "sm", children: [
3687
- /* @__PURE__ */ (0, import_jsx_runtime101.jsxs)(DialogHeader, { children: [
3688
- /* @__PURE__ */ (0, import_jsx_runtime101.jsx)(DialogTitle, { children: title }),
3689
- /* @__PURE__ */ (0, import_jsx_runtime101.jsx)(DialogDescription, { children: description })
3699
+ return /* @__PURE__ */ (0, import_jsx_runtime102.jsx)(Dialog, { open, onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime102.jsxs)(DialogContent, { size: "sm", children: [
3700
+ /* @__PURE__ */ (0, import_jsx_runtime102.jsxs)(DialogHeader, { children: [
3701
+ /* @__PURE__ */ (0, import_jsx_runtime102.jsx)(DialogTitle, { children: title }),
3702
+ /* @__PURE__ */ (0, import_jsx_runtime102.jsx)(DialogDescription, { children: description })
3690
3703
  ] }),
3691
- multiline ? /* @__PURE__ */ (0, import_jsx_runtime101.jsx)(
3704
+ multiline ? /* @__PURE__ */ (0, import_jsx_runtime102.jsx)(
3692
3705
  Textarea2,
3693
3706
  {
3694
3707
  mono: true,
@@ -3698,7 +3711,7 @@ function ClipboardFallbackDialog({
3698
3711
  rows: 8,
3699
3712
  onFocus: (event) => event.currentTarget.select()
3700
3713
  }
3701
- ) : /* @__PURE__ */ (0, import_jsx_runtime101.jsx)(
3714
+ ) : /* @__PURE__ */ (0, import_jsx_runtime102.jsx)(
3702
3715
  Input2,
3703
3716
  {
3704
3717
  mono: true,
@@ -3708,17 +3721,17 @@ function ClipboardFallbackDialog({
3708
3721
  onFocus: (event) => event.currentTarget.select()
3709
3722
  }
3710
3723
  ),
3711
- blocked ? /* @__PURE__ */ (0, import_jsx_runtime101.jsx)("p", { role: "status", className: "text-sm text-destructive", children: "Still blocked. Press Cmd/Ctrl+C to copy." }) : null,
3712
- /* @__PURE__ */ (0, import_jsx_runtime101.jsxs)(DialogFooter, { children: [
3713
- /* @__PURE__ */ (0, import_jsx_runtime101.jsx)(Button, { type: "button", variant: "outline", onClick: () => onOpenChange(false), children: "Close" }),
3714
- /* @__PURE__ */ (0, import_jsx_runtime101.jsxs)(Button, { type: "button", onClick: handleCopy, children: [
3715
- copied ? /* @__PURE__ */ (0, import_jsx_runtime101.jsx)(CheckIcon, { className: "mr-2 h-4 w-4" }) : /* @__PURE__ */ (0, import_jsx_runtime101.jsx)(CopyIcon, { className: "mr-2 h-4 w-4" }),
3724
+ blocked ? /* @__PURE__ */ (0, import_jsx_runtime102.jsx)("p", { role: "status", className: "text-sm text-destructive", children: "Still blocked. Press Cmd/Ctrl+C to copy." }) : null,
3725
+ /* @__PURE__ */ (0, import_jsx_runtime102.jsxs)(DialogFooter, { children: [
3726
+ /* @__PURE__ */ (0, import_jsx_runtime102.jsx)(Button, { type: "button", variant: "outline", onClick: () => onOpenChange(false), children: "Close" }),
3727
+ /* @__PURE__ */ (0, import_jsx_runtime102.jsxs)(Button, { type: "button", onClick: handleCopy, children: [
3728
+ copied ? /* @__PURE__ */ (0, import_jsx_runtime102.jsx)(CheckIcon, { className: "mr-2 h-4 w-4" }) : /* @__PURE__ */ (0, import_jsx_runtime102.jsx)(CopyIcon, { className: "mr-2 h-4 w-4" }),
3716
3729
  copied ? "Copied" : "Copy"
3717
3730
  ] })
3718
3731
  ] })
3719
3732
  ] }) });
3720
3733
  }
3721
- var React70, import_clipboard5, import_jsx_runtime101;
3734
+ var React70, import_clipboard5, import_jsx_runtime102;
3722
3735
  var init_clipboard_fallback_dialog = __esm({
3723
3736
  "src/clipboard-fallback-dialog.tsx"() {
3724
3737
  "use strict";
@@ -3730,7 +3743,7 @@ var init_clipboard_fallback_dialog = __esm({
3730
3743
  init_doors();
3731
3744
  init_dialog();
3732
3745
  init_icons();
3733
- import_jsx_runtime101 = require("react/jsx-runtime");
3746
+ import_jsx_runtime102 = require("react/jsx-runtime");
3734
3747
  }
3735
3748
  });
3736
3749
 
@@ -3768,45 +3781,45 @@ function AuthGateDialog({
3768
3781
  if (onNavigate) onNavigate(href);
3769
3782
  else window.location.assign(href);
3770
3783
  };
3771
- return /* @__PURE__ */ (0, import_jsx_runtime102.jsx)(
3784
+ return /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(
3772
3785
  Dialog,
3773
3786
  {
3774
3787
  open: isOpen,
3775
3788
  onOpenChange: (open) => {
3776
3789
  if (!open) onClose();
3777
3790
  },
3778
- children: /* @__PURE__ */ (0, import_jsx_runtime102.jsxs)(DialogContent, { size: "sm", children: [
3779
- /* @__PURE__ */ (0, import_jsx_runtime102.jsxs)(DialogHeader, { children: [
3780
- /* @__PURE__ */ (0, import_jsx_runtime102.jsx)(DialogTitle, { children: "Sign in required" }),
3781
- /* @__PURE__ */ (0, import_jsx_runtime102.jsxs)(DialogDescription, { children: [
3791
+ children: /* @__PURE__ */ (0, import_jsx_runtime103.jsxs)(DialogContent, { size: "sm", children: [
3792
+ /* @__PURE__ */ (0, import_jsx_runtime103.jsxs)(DialogHeader, { children: [
3793
+ /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(DialogTitle, { children: "Sign in required" }),
3794
+ /* @__PURE__ */ (0, import_jsx_runtime103.jsxs)(DialogDescription, { children: [
3782
3795
  featureName,
3783
3796
  " requires an account"
3784
3797
  ] })
3785
3798
  ] }),
3786
- /* @__PURE__ */ (0, import_jsx_runtime102.jsxs)("div", { className: "flex flex-col items-center gap-5 pb-4 pt-2 text-center", children: [
3787
- /* @__PURE__ */ (0, import_jsx_runtime102.jsx)("div", { className: "flex h-14 w-14 items-center justify-center rounded-full bg-primary/10", children: /* @__PURE__ */ (0, import_jsx_runtime102.jsx)(LockIcon, { className: "h-7 w-7 text-primary" }) }),
3788
- /* @__PURE__ */ (0, import_jsx_runtime102.jsx)("p", { className: "max-w-[280px] text-sm leading-relaxed text-muted-foreground", children: featureDescription || `Sign in to use ${featureName}. Your current work will be right here when you get back.` }),
3789
- /* @__PURE__ */ (0, import_jsx_runtime102.jsxs)("div", { className: "flex w-full max-w-[260px] flex-col gap-2.5", children: [
3790
- /* @__PURE__ */ (0, import_jsx_runtime102.jsxs)(
3799
+ /* @__PURE__ */ (0, import_jsx_runtime103.jsxs)("div", { className: "flex flex-col items-center gap-5 pb-4 pt-2 text-center", children: [
3800
+ /* @__PURE__ */ (0, import_jsx_runtime103.jsx)("div", { className: "flex h-14 w-14 items-center justify-center rounded-full bg-primary/10", children: /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(LockIcon, { className: "h-7 w-7 text-primary" }) }),
3801
+ /* @__PURE__ */ (0, import_jsx_runtime103.jsx)("p", { className: "max-w-[280px] text-sm leading-relaxed text-muted-foreground", children: featureDescription || `Sign in to use ${featureName}. Your current work will be right here when you get back.` }),
3802
+ /* @__PURE__ */ (0, import_jsx_runtime103.jsxs)("div", { className: "flex w-full max-w-[260px] flex-col gap-2.5", children: [
3803
+ /* @__PURE__ */ (0, import_jsx_runtime103.jsxs)(
3791
3804
  Button,
3792
3805
  {
3793
3806
  variant: "primary",
3794
3807
  className: "w-full",
3795
3808
  onClick: () => go(signInHref ?? DEFAULT_SIGN_IN),
3796
3809
  children: [
3797
- /* @__PURE__ */ (0, import_jsx_runtime102.jsx)(LogInIcon, { className: "mr-2 h-4 w-4" }),
3810
+ /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(LogInIcon, { className: "mr-2 h-4 w-4" }),
3798
3811
  "Sign In"
3799
3812
  ]
3800
3813
  }
3801
3814
  ),
3802
- /* @__PURE__ */ (0, import_jsx_runtime102.jsxs)(
3815
+ /* @__PURE__ */ (0, import_jsx_runtime103.jsxs)(
3803
3816
  Button,
3804
3817
  {
3805
3818
  variant: "outline",
3806
3819
  className: "w-full",
3807
3820
  onClick: () => go(signUpHref ?? DEFAULT_SIGN_UP),
3808
3821
  children: [
3809
- /* @__PURE__ */ (0, import_jsx_runtime102.jsx)(GemIcon, { className: "mr-2 h-4 w-4" }),
3822
+ /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(GemIcon, { className: "mr-2 h-4 w-4" }),
3810
3823
  "Create Free Account"
3811
3824
  ]
3812
3825
  }
@@ -3817,7 +3830,7 @@ function AuthGateDialog({
3817
3830
  }
3818
3831
  );
3819
3832
  }
3820
- var React71, import_jsx_runtime102, DEFAULT_SIGN_IN, DEFAULT_SIGN_UP, announced2, auth_gate_dialog_default;
3833
+ var React71, import_jsx_runtime103, DEFAULT_SIGN_IN, DEFAULT_SIGN_UP, announced2, auth_gate_dialog_default;
3821
3834
  var init_auth_gate_dialog = __esm({
3822
3835
  "src/auth-gate-dialog.tsx"() {
3823
3836
  "use strict";
@@ -3826,7 +3839,7 @@ var init_auth_gate_dialog = __esm({
3826
3839
  init_button();
3827
3840
  init_dialog();
3828
3841
  init_icons();
3829
- import_jsx_runtime102 = require("react/jsx-runtime");
3842
+ import_jsx_runtime103 = require("react/jsx-runtime");
3830
3843
  DEFAULT_SIGN_IN = "/login";
3831
3844
  DEFAULT_SIGN_UP = "/sign-up";
3832
3845
  announced2 = false;
@@ -3879,17 +3892,17 @@ function EmailInputDialog({
3879
3892
  setError(null);
3880
3893
  onClose();
3881
3894
  };
3882
- return /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(Dialog, { open: isOpen, onOpenChange: handleClose, children: /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(DialogContent, { size: "sm", children: /* @__PURE__ */ (0, import_jsx_runtime103.jsxs)("form", { onSubmit: handleSubmit, noValidate: true, className: "flex flex-col gap-4", children: [
3883
- /* @__PURE__ */ (0, import_jsx_runtime103.jsxs)(DialogHeader, { children: [
3884
- /* @__PURE__ */ (0, import_jsx_runtime103.jsxs)(DialogTitle, { className: "flex items-center gap-2", children: [
3885
- /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(MailIcon, { className: "h-5 w-5 text-primary" }),
3895
+ return /* @__PURE__ */ (0, import_jsx_runtime104.jsx)(Dialog, { open: isOpen, onOpenChange: handleClose, children: /* @__PURE__ */ (0, import_jsx_runtime104.jsx)(DialogContent, { size: "sm", children: /* @__PURE__ */ (0, import_jsx_runtime104.jsxs)("form", { onSubmit: handleSubmit, noValidate: true, className: "flex flex-col gap-4", children: [
3896
+ /* @__PURE__ */ (0, import_jsx_runtime104.jsxs)(DialogHeader, { children: [
3897
+ /* @__PURE__ */ (0, import_jsx_runtime104.jsxs)(DialogTitle, { className: "flex items-center gap-2", children: [
3898
+ /* @__PURE__ */ (0, import_jsx_runtime104.jsx)(MailIcon, { className: "h-5 w-5 text-primary" }),
3886
3899
  title
3887
3900
  ] }),
3888
- /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(DialogDescription, { children: description })
3901
+ /* @__PURE__ */ (0, import_jsx_runtime104.jsx)(DialogDescription, { children: description })
3889
3902
  ] }),
3890
- /* @__PURE__ */ (0, import_jsx_runtime103.jsxs)("div", { className: "space-y-2", children: [
3891
- /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(Label4, { htmlFor: "email-input-dialog-email", children: "Email address" }),
3892
- /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(
3903
+ /* @__PURE__ */ (0, import_jsx_runtime104.jsxs)("div", { className: "space-y-2", children: [
3904
+ /* @__PURE__ */ (0, import_jsx_runtime104.jsx)(Label4, { htmlFor: "email-input-dialog-email", children: "Email address" }),
3905
+ /* @__PURE__ */ (0, import_jsx_runtime104.jsx)(
3893
3906
  Input2,
3894
3907
  {
3895
3908
  id: "email-input-dialog-email",
@@ -3904,9 +3917,9 @@ function EmailInputDialog({
3904
3917
  autoFocus: true
3905
3918
  }
3906
3919
  ),
3907
- error ? /* @__PURE__ */ (0, import_jsx_runtime103.jsxs)("p", { className: "text-sm text-destructive", children: [
3920
+ error ? /* @__PURE__ */ (0, import_jsx_runtime104.jsxs)("p", { className: "text-sm text-destructive", children: [
3908
3921
  error,
3909
- /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(
3922
+ /* @__PURE__ */ (0, import_jsx_runtime104.jsx)(
3910
3923
  ErrorActions,
3911
3924
  {
3912
3925
  message: error,
@@ -3917,22 +3930,22 @@ function EmailInputDialog({
3917
3930
  )
3918
3931
  ] }) : email.trim() && !isValidEmail(email.trim()) ? (
3919
3932
  // An offer, never a block: Send stays enabled; pressing it names the problem.
3920
- /* @__PURE__ */ (0, import_jsx_runtime103.jsx)("p", { className: "text-sm text-muted-foreground", "data-email-hint": true, children: "Not a full address yet, like you@example.com" })
3933
+ /* @__PURE__ */ (0, import_jsx_runtime104.jsx)("p", { className: "text-sm text-muted-foreground", "data-email-hint": true, children: "Not a full address yet, like you@example.com" })
3921
3934
  ) : null
3922
3935
  ] }),
3923
- /* @__PURE__ */ (0, import_jsx_runtime103.jsxs)(DialogFooter, { children: [
3924
- /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(Button, { type: "button", variant: "outline", onClick: handleClose, disabled: loading, children: "Cancel" }),
3925
- /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(Button, { variant: "primary", type: "submit", disabled: loading || !email.trim(), children: loading ? /* @__PURE__ */ (0, import_jsx_runtime103.jsxs)(import_jsx_runtime103.Fragment, { children: [
3926
- /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(Loader2Icon, { className: "mr-2 h-4 w-4 matrx-spin" }),
3936
+ /* @__PURE__ */ (0, import_jsx_runtime104.jsxs)(DialogFooter, { children: [
3937
+ /* @__PURE__ */ (0, import_jsx_runtime104.jsx)(Button, { type: "button", variant: "outline", onClick: handleClose, disabled: loading, children: "Cancel" }),
3938
+ /* @__PURE__ */ (0, import_jsx_runtime104.jsx)(Button, { variant: "primary", type: "submit", disabled: loading || !email.trim(), children: loading ? /* @__PURE__ */ (0, import_jsx_runtime104.jsxs)(import_jsx_runtime104.Fragment, { children: [
3939
+ /* @__PURE__ */ (0, import_jsx_runtime104.jsx)(Loader2Icon, { className: "mr-2 h-4 w-4 matrx-spin" }),
3927
3940
  "Sending..."
3928
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime103.jsxs)(import_jsx_runtime103.Fragment, { children: [
3929
- /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(MailIcon, { className: "mr-2 h-4 w-4" }),
3941
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime104.jsxs)(import_jsx_runtime104.Fragment, { children: [
3942
+ /* @__PURE__ */ (0, import_jsx_runtime104.jsx)(MailIcon, { className: "mr-2 h-4 w-4" }),
3930
3943
  submitLabel
3931
3944
  ] }) })
3932
3945
  ] })
3933
3946
  ] }) }) });
3934
3947
  }
3935
- var React72, import_jsx_runtime103, isValidEmail, email_input_dialog_default;
3948
+ var React72, import_jsx_runtime104, isValidEmail, email_input_dialog_default;
3936
3949
  var init_email_input_dialog = __esm({
3937
3950
  "src/email-input-dialog.tsx"() {
3938
3951
  "use strict";
@@ -3944,7 +3957,7 @@ var init_email_input_dialog = __esm({
3944
3957
  init_error_box();
3945
3958
  init_icons();
3946
3959
  init_label();
3947
- import_jsx_runtime103 = require("react/jsx-runtime");
3960
+ import_jsx_runtime104 = require("react/jsx-runtime");
3948
3961
  isValidEmail = (email) => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email);
3949
3962
  email_input_dialog_default = EmailInputDialog;
3950
3963
  }
@@ -3965,34 +3978,34 @@ function SandboxGateDialog({ open, onChoose, children }) {
3965
3978
  );
3966
3979
  }
3967
3980
  }, [open, noPanel]);
3968
- return /* @__PURE__ */ (0, import_jsx_runtime104.jsx)(
3981
+ return /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(
3969
3982
  Dialog,
3970
3983
  {
3971
3984
  open,
3972
3985
  onOpenChange: (next) => {
3973
3986
  if (!next) onChoose("cancel");
3974
3987
  },
3975
- children: /* @__PURE__ */ (0, import_jsx_runtime104.jsxs)(DialogContent, { size: "md", className: "gap-4", ...noPanel ? { "data-sandbox-gate-panel": UNCONFIGURED } : {}, children: [
3976
- /* @__PURE__ */ (0, import_jsx_runtime104.jsxs)(DialogHeader, { children: [
3977
- /* @__PURE__ */ (0, import_jsx_runtime104.jsxs)(DialogTitle, { className: "flex items-center gap-2", children: [
3978
- /* @__PURE__ */ (0, import_jsx_runtime104.jsx)(AlertTriangleIcon, { className: "h-4 w-4 text-warning" }),
3988
+ children: /* @__PURE__ */ (0, import_jsx_runtime105.jsxs)(DialogContent, { size: "md", className: "gap-4", ...noPanel ? { "data-sandbox-gate-panel": UNCONFIGURED } : {}, children: [
3989
+ /* @__PURE__ */ (0, import_jsx_runtime105.jsxs)(DialogHeader, { children: [
3990
+ /* @__PURE__ */ (0, import_jsx_runtime105.jsxs)(DialogTitle, { className: "flex items-center gap-2", children: [
3991
+ /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(AlertTriangleIcon, { className: "h-4 w-4 text-warning" }),
3979
3992
  "Sandbox unavailable"
3980
3993
  ] }),
3981
- /* @__PURE__ */ (0, import_jsx_runtime104.jsx)(DialogDescription, { children: "This conversation is bound to a sandbox, but it can't be reached right now (it may be stopped, expired, or still starting). Nothing was sent. Attach or start a sandbox and retry, or send this message without a sandbox." })
3994
+ /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(DialogDescription, { children: "This conversation is bound to a sandbox, but it can't be reached right now (it may be stopped, expired, or still starting). Nothing was sent. Attach or start a sandbox and retry, or send this message without a sandbox." })
3982
3995
  ] }),
3983
- children ? /* @__PURE__ */ (0, import_jsx_runtime104.jsx)("div", { className: "max-h-[50dvh] overflow-y-auto rounded-md border border-border", children }) : null,
3984
- /* @__PURE__ */ (0, import_jsx_runtime104.jsxs)(DialogFooter, { className: "gap-2 sm:justify-between", children: [
3985
- /* @__PURE__ */ (0, import_jsx_runtime104.jsx)(Button, { variant: "ghost", onClick: () => onChoose("cancel"), children: "Cancel" }),
3986
- /* @__PURE__ */ (0, import_jsx_runtime104.jsxs)("div", { className: "flex gap-2", children: [
3987
- /* @__PURE__ */ (0, import_jsx_runtime104.jsx)(Button, { variant: "outline", onClick: () => onChoose("detach"), children: "Send without sandbox" }),
3988
- /* @__PURE__ */ (0, import_jsx_runtime104.jsx)(Button, { variant: "primary", onClick: () => onChoose("attach"), children: "Retry with sandbox" })
3996
+ children ? /* @__PURE__ */ (0, import_jsx_runtime105.jsx)("div", { className: "max-h-[50dvh] overflow-y-auto rounded-md border border-border", children }) : null,
3997
+ /* @__PURE__ */ (0, import_jsx_runtime105.jsxs)(DialogFooter, { className: "gap-2 sm:justify-between", children: [
3998
+ /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(Button, { variant: "ghost", onClick: () => onChoose("cancel"), children: "Cancel" }),
3999
+ /* @__PURE__ */ (0, import_jsx_runtime105.jsxs)("div", { className: "flex gap-2", children: [
4000
+ /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(Button, { variant: "outline", onClick: () => onChoose("detach"), children: "Send without sandbox" }),
4001
+ /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(Button, { variant: "primary", onClick: () => onChoose("attach"), children: "Retry with sandbox" })
3989
4002
  ] })
3990
4003
  ] })
3991
4004
  ] })
3992
4005
  }
3993
4006
  );
3994
4007
  }
3995
- var React73, import_jsx_runtime104;
4008
+ var React73, import_jsx_runtime105;
3996
4009
  var init_sandbox_gate_dialog = __esm({
3997
4010
  "src/sandbox-gate-dialog.tsx"() {
3998
4011
  "use strict";
@@ -4002,7 +4015,7 @@ var init_sandbox_gate_dialog = __esm({
4002
4015
  init_stand_in_notice();
4003
4016
  init_dialog();
4004
4017
  init_icons();
4005
- import_jsx_runtime104 = require("react/jsx-runtime");
4018
+ import_jsx_runtime105 = require("react/jsx-runtime");
4006
4019
  }
4007
4020
  });
4008
4021
 
@@ -4016,10 +4029,10 @@ function ScopeSetList({
4016
4029
  items,
4017
4030
  renderScope
4018
4031
  }) {
4019
- return /* @__PURE__ */ (0, import_jsx_runtime105.jsxs)("div", { className: "flex flex-col gap-1", children: [
4020
- /* @__PURE__ */ (0, import_jsx_runtime105.jsx)("div", { className: "text-xs font-medium uppercase tracking-wide text-muted-foreground", children: heading }),
4021
- items.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime105.jsx)("div", { className: "text-sm text-muted-foreground", children: "None" }) : /* @__PURE__ */ (0, import_jsx_runtime105.jsx)("ul", { className: "flex flex-col gap-0.5", children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime105.jsxs)("li", { className: "flex min-w-0 items-center gap-1 text-sm text-foreground", children: [
4022
- /* @__PURE__ */ (0, import_jsx_runtime105.jsxs)("span", { className: "shrink-0 text-muted-foreground", children: [
4032
+ return /* @__PURE__ */ (0, import_jsx_runtime106.jsxs)("div", { className: "flex flex-col gap-1", children: [
4033
+ /* @__PURE__ */ (0, import_jsx_runtime106.jsx)("div", { className: "text-xs font-medium uppercase tracking-wide text-muted-foreground", children: heading }),
4034
+ items.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime106.jsx)("div", { className: "text-sm text-muted-foreground", children: "None" }) : /* @__PURE__ */ (0, import_jsx_runtime106.jsx)("ul", { className: "flex flex-col gap-0.5", children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime106.jsxs)("li", { className: "flex min-w-0 items-center gap-1 text-sm text-foreground", children: [
4035
+ /* @__PURE__ */ (0, import_jsx_runtime106.jsxs)("span", { className: "shrink-0 text-muted-foreground", children: [
4023
4036
  item.typeLabel,
4024
4037
  ":"
4025
4038
  ] }),
@@ -4043,32 +4056,32 @@ function ScopeMismatchDialog({
4043
4056
  );
4044
4057
  }
4045
4058
  }, [open, plain]);
4046
- return /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(
4059
+ return /* @__PURE__ */ (0, import_jsx_runtime106.jsx)(
4047
4060
  Dialog,
4048
4061
  {
4049
4062
  open,
4050
4063
  onOpenChange: (next) => {
4051
4064
  if (!next) onChoose("cancel");
4052
4065
  },
4053
- children: /* @__PURE__ */ (0, import_jsx_runtime105.jsxs)(DialogContent, { size: "md", children: [
4054
- /* @__PURE__ */ (0, import_jsx_runtime105.jsxs)(DialogHeader, { children: [
4055
- /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(DialogTitle, { children: "This chat's scopes differ from your current selection" }),
4056
- /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(DialogDescription, { children: "Choose which scopes this chat should run under. Dismissing cancels the send \u2014 your message stays in the composer." })
4066
+ children: /* @__PURE__ */ (0, import_jsx_runtime106.jsxs)(DialogContent, { size: "md", children: [
4067
+ /* @__PURE__ */ (0, import_jsx_runtime106.jsxs)(DialogHeader, { children: [
4068
+ /* @__PURE__ */ (0, import_jsx_runtime106.jsx)(DialogTitle, { children: "This chat's scopes differ from your current selection" }),
4069
+ /* @__PURE__ */ (0, import_jsx_runtime106.jsx)(DialogDescription, { children: "Choose which scopes this chat should run under. Dismissing cancels the send \u2014 your message stays in the composer." })
4057
4070
  ] }),
4058
- /* @__PURE__ */ (0, import_jsx_runtime105.jsxs)("div", { className: "grid gap-4 py-1 sm:grid-cols-2", children: [
4059
- /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(ScopeSetList, { heading: "Current selection", items: current, renderScope }),
4060
- /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(ScopeSetList, { heading: "This chat's scopes", items: chat, renderScope })
4071
+ /* @__PURE__ */ (0, import_jsx_runtime106.jsxs)("div", { className: "grid gap-4 py-1 sm:grid-cols-2", children: [
4072
+ /* @__PURE__ */ (0, import_jsx_runtime106.jsx)(ScopeSetList, { heading: "Current selection", items: current, renderScope }),
4073
+ /* @__PURE__ */ (0, import_jsx_runtime106.jsx)(ScopeSetList, { heading: "This chat's scopes", items: chat, renderScope })
4061
4074
  ] }),
4062
- /* @__PURE__ */ (0, import_jsx_runtime105.jsxs)(DialogFooter, { className: "flex-col gap-2 sm:flex-row sm:justify-end", children: [
4063
- /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(Button, { type: "button", variant: "outline", onClick: () => onChoose("keep"), children: "Keep chat's scopes" }),
4064
- /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(Button, { type: "button", variant: "outline", onClick: () => onChoose("combine"), children: "Combine both" }),
4065
- /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(Button, { variant: "primary", type: "button", onClick: () => onChoose("update"), children: "Use current selection" })
4075
+ /* @__PURE__ */ (0, import_jsx_runtime106.jsxs)(DialogFooter, { className: "flex-col gap-2 sm:flex-row sm:justify-end", children: [
4076
+ /* @__PURE__ */ (0, import_jsx_runtime106.jsx)(Button, { type: "button", variant: "outline", onClick: () => onChoose("keep"), children: "Keep chat's scopes" }),
4077
+ /* @__PURE__ */ (0, import_jsx_runtime106.jsx)(Button, { type: "button", variant: "outline", onClick: () => onChoose("combine"), children: "Combine both" }),
4078
+ /* @__PURE__ */ (0, import_jsx_runtime106.jsx)(Button, { variant: "primary", type: "button", onClick: () => onChoose("update"), children: "Use current selection" })
4066
4079
  ] })
4067
4080
  ] })
4068
4081
  }
4069
4082
  );
4070
4083
  }
4071
- var React74, import_jsx_runtime105, plainScope;
4084
+ var React74, import_jsx_runtime106, plainScope;
4072
4085
  var init_scope_mismatch_dialog = __esm({
4073
4086
  "src/scope-mismatch-dialog.tsx"() {
4074
4087
  "use strict";
@@ -4077,8 +4090,8 @@ var init_scope_mismatch_dialog = __esm({
4077
4090
  init_button();
4078
4091
  init_stand_in_notice();
4079
4092
  init_dialog();
4080
- import_jsx_runtime105 = require("react/jsx-runtime");
4081
- plainScope = (item) => /* @__PURE__ */ (0, import_jsx_runtime105.jsx)("span", { className: "truncate", "data-scope-mismatch-host": UNCONFIGURED, children: item.name });
4093
+ import_jsx_runtime106 = require("react/jsx-runtime");
4094
+ plainScope = (item) => /* @__PURE__ */ (0, import_jsx_runtime106.jsx)("span", { className: "truncate", "data-scope-mismatch-host": UNCONFIGURED, children: item.name });
4082
4095
  }
4083
4096
  });
4084
4097
 
@@ -4112,17 +4125,17 @@ function ValuePromptsDialog({ request, open, onSettle: settle }) {
4112
4125
  }, [request, answers, missingRequired, settle]);
4113
4126
  const only = request?.fields.length === 1 ? request.fields[0] : void 0;
4114
4127
  const single = only && !(answers[only.name] ?? "").includes("\n") ? only : null;
4115
- return /* @__PURE__ */ (0, import_jsx_runtime106.jsx)(Dialog, { open, onOpenChange: (next) => !next && request && settle(null), children: /* @__PURE__ */ (0, import_jsx_runtime106.jsxs)(DialogContent, { size: "sm", children: [
4116
- /* @__PURE__ */ (0, import_jsx_runtime106.jsxs)(DialogHeader, { children: [
4117
- /* @__PURE__ */ (0, import_jsx_runtime106.jsx)(DialogTitle, { children: request?.title ?? "" }),
4118
- /* @__PURE__ */ (0, import_jsx_runtime106.jsx)(DialogDescription, { className: request?.description ? void 0 : "sr-only", children: request?.description ?? request?.title ?? "" })
4128
+ return /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(Dialog, { open, onOpenChange: (next) => !next && request && settle(null), children: /* @__PURE__ */ (0, import_jsx_runtime107.jsxs)(DialogContent, { size: "sm", children: [
4129
+ /* @__PURE__ */ (0, import_jsx_runtime107.jsxs)(DialogHeader, { children: [
4130
+ /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(DialogTitle, { children: request?.title ?? "" }),
4131
+ /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(DialogDescription, { className: request?.description ? void 0 : "sr-only", children: request?.description ?? request?.title ?? "" })
4119
4132
  ] }),
4120
- /* @__PURE__ */ (0, import_jsx_runtime106.jsx)("div", { className: "flex flex-col gap-4 py-1", children: request?.fields.map((field) => /* @__PURE__ */ (0, import_jsx_runtime106.jsxs)("div", { className: "flex flex-col gap-1.5", children: [
4121
- /* @__PURE__ */ (0, import_jsx_runtime106.jsxs)(Label4, { htmlFor: `value-prompt-${field.name}`, className: "text-sm text-foreground", children: [
4133
+ /* @__PURE__ */ (0, import_jsx_runtime107.jsx)("div", { className: "flex flex-col gap-4 py-1", children: request?.fields.map((field) => /* @__PURE__ */ (0, import_jsx_runtime107.jsxs)("div", { className: "flex flex-col gap-1.5", children: [
4134
+ /* @__PURE__ */ (0, import_jsx_runtime107.jsxs)(Label4, { htmlFor: `value-prompt-${field.name}`, className: "text-sm text-foreground", children: [
4122
4135
  field.prompt,
4123
- field.required ? /* @__PURE__ */ (0, import_jsx_runtime106.jsx)("span", { className: "ml-1 text-destructive", children: "*" }) : null
4136
+ field.required ? /* @__PURE__ */ (0, import_jsx_runtime107.jsx)("span", { className: "ml-1 text-destructive", children: "*" }) : null
4124
4137
  ] }),
4125
- single?.name === field.name ? /* @__PURE__ */ (0, import_jsx_runtime106.jsx)(
4138
+ single?.name === field.name ? /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(
4126
4139
  WritingInput,
4127
4140
  {
4128
4141
  id: `value-prompt-${field.name}`,
@@ -4140,7 +4153,7 @@ function ValuePromptsDialog({ request, open, onSettle: settle }) {
4140
4153
  }
4141
4154
  }
4142
4155
  }
4143
- ) : /* @__PURE__ */ (0, import_jsx_runtime106.jsx)(
4156
+ ) : /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(
4144
4157
  WritingBox,
4145
4158
  {
4146
4159
  id: `value-prompt-${field.name}`,
@@ -4153,13 +4166,13 @@ function ValuePromptsDialog({ request, open, onSettle: settle }) {
4153
4166
  }
4154
4167
  )
4155
4168
  ] }, field.name)) }),
4156
- /* @__PURE__ */ (0, import_jsx_runtime106.jsxs)(DialogFooter, { children: [
4157
- /* @__PURE__ */ (0, import_jsx_runtime106.jsx)(Button, { type: "button", variant: "outline", onClick: () => settle(null), children: "Cancel" }),
4158
- /* @__PURE__ */ (0, import_jsx_runtime106.jsx)(Button, { type: "button", variant: "primary", onClick: submit, disabled: missingRequired, children: request?.submitLabel ?? "Continue" })
4169
+ /* @__PURE__ */ (0, import_jsx_runtime107.jsxs)(DialogFooter, { children: [
4170
+ /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(Button, { type: "button", variant: "outline", onClick: () => settle(null), children: "Cancel" }),
4171
+ /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(Button, { type: "button", variant: "primary", onClick: submit, disabled: missingRequired, children: request?.submitLabel ?? "Continue" })
4159
4172
  ] })
4160
4173
  ] }) });
4161
4174
  }
4162
- var React75, import_jsx_runtime106;
4175
+ var React75, import_jsx_runtime107;
4163
4176
  var init_value_prompts_dialog = __esm({
4164
4177
  "src/value-prompts-dialog.tsx"() {
4165
4178
  "use strict";
@@ -4169,7 +4182,7 @@ var init_value_prompts_dialog = __esm({
4169
4182
  init_dialog();
4170
4183
  init_label();
4171
4184
  init_writing_box();
4172
- import_jsx_runtime106 = require("react/jsx-runtime");
4185
+ import_jsx_runtime107 = require("react/jsx-runtime");
4173
4186
  }
4174
4187
  });
4175
4188
 
@@ -4257,8 +4270,8 @@ function TextInputDialog({
4257
4270
  if (busy) return;
4258
4271
  submit();
4259
4272
  };
4260
- const body = /* @__PURE__ */ (0, import_jsx_runtime107.jsxs)("form", { onSubmit: handleFormSubmit, className: "space-y-2", children: [
4261
- multiline ? /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(
4273
+ const body = /* @__PURE__ */ (0, import_jsx_runtime108.jsxs)("form", { onSubmit: handleFormSubmit, className: "space-y-2", children: [
4274
+ multiline ? /* @__PURE__ */ (0, import_jsx_runtime108.jsx)(
4262
4275
  ProTextarea,
4263
4276
  {
4264
4277
  autoFocus: true,
@@ -4278,7 +4291,7 @@ function TextInputDialog({
4278
4291
  "aria-invalid": !!error,
4279
4292
  "aria-describedby": error ? "text-input-dialog-error" : void 0
4280
4293
  }
4281
- ) : /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(
4294
+ ) : /* @__PURE__ */ (0, import_jsx_runtime108.jsx)(
4282
4295
  Input2,
4283
4296
  {
4284
4297
  autoFocus: true,
@@ -4294,14 +4307,14 @@ function TextInputDialog({
4294
4307
  "aria-describedby": error ? "text-input-dialog-error" : void 0
4295
4308
  }
4296
4309
  ),
4297
- error ? /* @__PURE__ */ (0, import_jsx_runtime107.jsxs)("p", { id: "text-input-dialog-error", className: "text-sm text-destructive", children: [
4310
+ error ? /* @__PURE__ */ (0, import_jsx_runtime108.jsxs)("p", { id: "text-input-dialog-error", className: "text-sm text-destructive", children: [
4298
4311
  error,
4299
- /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(ErrorActions, { message: error, operation: "Enter a value", source: "inline", origin: "design-system/TextInputDialog" })
4312
+ /* @__PURE__ */ (0, import_jsx_runtime108.jsx)(ErrorActions, { message: error, operation: "Enter a value", source: "inline", origin: "design-system/TextInputDialog" })
4300
4313
  ] }) : null,
4301
- /* @__PURE__ */ (0, import_jsx_runtime107.jsx)("button", { type: "submit", className: "hidden", tabIndex: -1, "aria-hidden": true })
4314
+ /* @__PURE__ */ (0, import_jsx_runtime108.jsx)("button", { type: "submit", className: "hidden", tabIndex: -1, "aria-hidden": true })
4302
4315
  ] });
4303
- const buttons = /* @__PURE__ */ (0, import_jsx_runtime107.jsxs)(import_jsx_runtime107.Fragment, { children: [
4304
- /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(
4316
+ const buttons = /* @__PURE__ */ (0, import_jsx_runtime108.jsxs)(import_jsx_runtime108.Fragment, { children: [
4317
+ /* @__PURE__ */ (0, import_jsx_runtime108.jsx)(
4305
4318
  Button,
4306
4319
  {
4307
4320
  type: "button",
@@ -4311,22 +4324,22 @@ function TextInputDialog({
4311
4324
  children: cancelLabel
4312
4325
  }
4313
4326
  ),
4314
- /* @__PURE__ */ (0, import_jsx_runtime107.jsxs)(Button, { type: "button", onClick: submit, disabled: busy || !allowEmpty && !value.trim(), children: [
4315
- busy ? /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(Loader2Icon, { className: "mr-2 h-4 w-4 matrx-spin" }) : null,
4327
+ /* @__PURE__ */ (0, import_jsx_runtime108.jsxs)(Button, { type: "button", onClick: submit, disabled: busy || !allowEmpty && !value.trim(), children: [
4328
+ busy ? /* @__PURE__ */ (0, import_jsx_runtime108.jsx)(Loader2Icon, { className: "mr-2 h-4 w-4 matrx-spin" }) : null,
4316
4329
  confirmLabel
4317
4330
  ] })
4318
4331
  ] });
4319
4332
  if (isMobile) {
4320
- return /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(Drawer, { open, onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime107.jsxs)(DrawerContent, { children: [
4321
- /* @__PURE__ */ (0, import_jsx_runtime107.jsxs)(DrawerHeader, { children: [
4322
- /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(DrawerTitle, { children: title }),
4323
- description ? /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(DrawerDescription, { children: description }) : null
4333
+ return /* @__PURE__ */ (0, import_jsx_runtime108.jsx)(Drawer, { open, onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime108.jsxs)(DrawerContent, { children: [
4334
+ /* @__PURE__ */ (0, import_jsx_runtime108.jsxs)(DrawerHeader, { children: [
4335
+ /* @__PURE__ */ (0, import_jsx_runtime108.jsx)(DrawerTitle, { children: title }),
4336
+ description ? /* @__PURE__ */ (0, import_jsx_runtime108.jsx)(DrawerDescription, { children: description }) : null
4324
4337
  ] }),
4325
- /* @__PURE__ */ (0, import_jsx_runtime107.jsx)("div", { className: "px-4 pb-2", children: body }),
4326
- /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(DrawerFooter, { className: "flex-row justify-end gap-2", children: buttons })
4338
+ /* @__PURE__ */ (0, import_jsx_runtime108.jsx)("div", { className: "px-4 pb-2", children: body }),
4339
+ /* @__PURE__ */ (0, import_jsx_runtime108.jsx)(DrawerFooter, { className: "flex-row justify-end gap-2", children: buttons })
4327
4340
  ] }) });
4328
4341
  }
4329
- return /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(Dialog, { open, onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime107.jsxs)(
4342
+ return /* @__PURE__ */ (0, import_jsx_runtime108.jsx)(Dialog, { open, onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime108.jsxs)(
4330
4343
  DialogContent,
4331
4344
  {
4332
4345
  className: "sm:max-w-md",
@@ -4336,17 +4349,17 @@ function TextInputDialog({
4336
4349
  }
4337
4350
  },
4338
4351
  children: [
4339
- /* @__PURE__ */ (0, import_jsx_runtime107.jsxs)(DialogHeader, { children: [
4340
- /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(DialogTitle, { children: title }),
4341
- description ? /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(DialogDescription, { children: description }) : null
4352
+ /* @__PURE__ */ (0, import_jsx_runtime108.jsxs)(DialogHeader, { children: [
4353
+ /* @__PURE__ */ (0, import_jsx_runtime108.jsx)(DialogTitle, { children: title }),
4354
+ description ? /* @__PURE__ */ (0, import_jsx_runtime108.jsx)(DialogDescription, { children: description }) : null
4342
4355
  ] }),
4343
4356
  body,
4344
- /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(DialogFooter, { children: buttons })
4357
+ /* @__PURE__ */ (0, import_jsx_runtime108.jsx)(DialogFooter, { children: buttons })
4345
4358
  ]
4346
4359
  }
4347
4360
  ) });
4348
4361
  }
4349
- var React76, import_jsx_runtime107;
4362
+ var React76, import_jsx_runtime108;
4350
4363
  var init_text_input_dialog = __esm({
4351
4364
  "src/text-input-dialog.tsx"() {
4352
4365
  "use strict";
@@ -4362,7 +4375,7 @@ var init_text_input_dialog = __esm({
4362
4375
  init_writing_box();
4363
4376
  init_opener_reclick();
4364
4377
  init_error_box();
4365
- import_jsx_runtime107 = require("react/jsx-runtime");
4378
+ import_jsx_runtime108 = require("react/jsx-runtime");
4366
4379
  }
4367
4380
  });
4368
4381
 
@@ -4582,6 +4595,7 @@ __export(src_exports, {
4582
4595
  Peek: () => Peek,
4583
4596
  PeekEntityRendererProvider: () => PeekEntityRendererProvider,
4584
4597
  PeekHoverCard: () => PeekHoverCard,
4598
+ PeekNotice: () => PeekNotice,
4585
4599
  PeekPartRendererProvider: () => PeekPartRendererProvider,
4586
4600
  PeekPopover: () => PeekPopover,
4587
4601
  PeekWindow: () => PeekWindow,
@@ -15273,11 +15287,58 @@ function TrayMenu({ menu }) {
15273
15287
  ] });
15274
15288
  }
15275
15289
 
15290
+ // src/peek-notice.tsx
15291
+ init_cn();
15292
+ init_controls();
15293
+ init_icons();
15294
+ var import_jsx_runtime96 = require("react/jsx-runtime");
15295
+ var LEVEL = {
15296
+ success: { icon: CircleCheckIcon, ink: "text-success-ink", label: "Done" },
15297
+ info: { icon: InfoIcon, ink: "text-info-ink", label: "Notice" },
15298
+ warning: { icon: AlertTriangleIcon, ink: "text-warning-ink", label: "Warning" },
15299
+ error: { icon: CircleXIcon, ink: "text-destructive-ink", label: "Error" }
15300
+ };
15301
+ function PeekNotice({ level, title, subtitle, items, limit = 5, onDismiss }) {
15302
+ const tone = LEVEL[level];
15303
+ const Icon3 = tone.icon;
15304
+ const rows = (items ?? []).map((item, i) => ({
15305
+ key: `${i}:${item.text}`,
15306
+ text: item.text,
15307
+ title: item.text,
15308
+ ...item.detail ? { detail: item.detail } : {}
15309
+ }));
15310
+ return /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)(
15311
+ PeekCard,
15312
+ {
15313
+ size: "md",
15314
+ height: "content",
15315
+ density: "compact",
15316
+ role: level === "error" ? "alert" : "status",
15317
+ "aria-label": `${tone.label}: ${title}`,
15318
+ "data-matrx-peek-notice": level,
15319
+ children: [
15320
+ /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(
15321
+ PeekCardHeader,
15322
+ {
15323
+ title,
15324
+ leading: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(Icon3, { className: cn("size-4", tone.ink) }),
15325
+ ...subtitle ? { subtitle } : {},
15326
+ ...onDismiss ? {
15327
+ trailing: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(Button2, { type: "button", variant: "quiet", "aria-label": "Dismiss", title: "Dismiss", icon: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(XIcon, { className: "size-3.5" }), onClick: onDismiss })
15328
+ } : {}
15329
+ }
15330
+ ),
15331
+ rows.length ? /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(PeekCardBody, { children: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(PeekCardRows, { rows, limit }) }) : null
15332
+ ]
15333
+ }
15334
+ );
15335
+ }
15336
+
15276
15337
  // src/radio-group.tsx
15277
15338
  var RadioGroupPrimitive = __toESM(require("@radix-ui/react-radio-group"), 1);
15278
15339
  var React65 = __toESM(require("react"), 1);
15279
15340
  init_cn();
15280
- var import_jsx_runtime96 = require("react/jsx-runtime");
15341
+ var import_jsx_runtime97 = require("react/jsx-runtime");
15281
15342
  var RadioGroupSizeContext = React65.createContext("md");
15282
15343
  var CONTROL_CLASSES = {
15283
15344
  sm: "h-3.5 w-3.5",
@@ -15289,7 +15350,7 @@ var DOT_CLASSES = {
15289
15350
  md: "h-1.5 w-1.5",
15290
15351
  lg: "h-2 w-2"
15291
15352
  };
15292
- var RadioGroup5 = React65.forwardRef(({ className, size = "md", ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(RadioGroupSizeContext.Provider, { value: size, children: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(
15353
+ var RadioGroup5 = React65.forwardRef(({ className, size = "md", ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(RadioGroupSizeContext.Provider, { value: size, children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
15293
15354
  RadioGroupPrimitive.Root,
15294
15355
  {
15295
15356
  ref,
@@ -15302,7 +15363,7 @@ RadioGroup5.displayName = RadioGroupPrimitive.Root.displayName;
15302
15363
  var RadioGroupItem = React65.forwardRef(({ className, size, ...props }, ref) => {
15303
15364
  const groupSize = React65.useContext(RadioGroupSizeContext);
15304
15365
  const resolved = size ?? groupSize;
15305
- return /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(
15366
+ return /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
15306
15367
  RadioGroupPrimitive.Item,
15307
15368
  {
15308
15369
  ref,
@@ -15319,7 +15380,7 @@ var RadioGroupItem = React65.forwardRef(({ className, size, ...props }, ref) =>
15319
15380
  className
15320
15381
  ),
15321
15382
  ...props,
15322
- children: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(RadioGroupPrimitive.Indicator, { className: "flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(
15383
+ children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(RadioGroupPrimitive.Indicator, { className: "flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
15323
15384
  "div",
15324
15385
  {
15325
15386
  className: cn("rounded-full bg-primary-foreground", DOT_CLASSES[resolved])
@@ -15338,7 +15399,7 @@ function RadioList({
15338
15399
  "aria-label": ariaLabel
15339
15400
  }) {
15340
15401
  const baseId = React65.useId();
15341
- return /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(
15402
+ return /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
15342
15403
  RadioGroup5,
15343
15404
  {
15344
15405
  value,
@@ -15349,7 +15410,7 @@ function RadioList({
15349
15410
  children: options.map((opt, i) => {
15350
15411
  const selected = value === opt.value;
15351
15412
  const id = `${baseId}-${i}`;
15352
- return /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)(
15413
+ return /* @__PURE__ */ (0, import_jsx_runtime97.jsxs)(
15353
15414
  "label",
15354
15415
  {
15355
15416
  htmlFor: id,
@@ -15360,9 +15421,9 @@ function RadioList({
15360
15421
  opt.disabled && "cursor-not-allowed text-disabled-foreground"
15361
15422
  ),
15362
15423
  children: [
15363
- /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(RadioGroupItem, { id, value: opt.value, disabled: opt.disabled }),
15364
- /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("span", { className: "flex-1 truncate", children: opt.label }),
15365
- opt.hint != null && opt.hint !== "" ? /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("span", { className: "shrink-0 text-xs tabular-nums text-muted-foreground", children: opt.hint }) : null
15424
+ /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(RadioGroupItem, { id, value: opt.value, disabled: opt.disabled }),
15425
+ /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("span", { className: "flex-1 truncate", children: opt.label }),
15426
+ opt.hint != null && opt.hint !== "" ? /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("span", { className: "shrink-0 text-xs tabular-nums text-muted-foreground", children: opt.hint }) : null
15366
15427
  ]
15367
15428
  },
15368
15429
  opt.value
@@ -15378,7 +15439,7 @@ var TogglePrimitive = __toESM(require("@radix-ui/react-toggle"), 1);
15378
15439
  var import_class_variance_authority7 = require("class-variance-authority");
15379
15440
  var React66 = __toESM(require("react"), 1);
15380
15441
  init_cn();
15381
- var import_jsx_runtime97 = require("react/jsx-runtime");
15442
+ var import_jsx_runtime98 = require("react/jsx-runtime");
15382
15443
  var toggleVariants = (0, import_class_variance_authority7.cva)(
15383
15444
  "inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium transition-colors hover:bg-muted hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
15384
15445
  {
@@ -15404,7 +15465,7 @@ var toggleVariants = (0, import_class_variance_authority7.cva)(
15404
15465
  }
15405
15466
  }
15406
15467
  );
15407
- var Toggle = React66.forwardRef(({ className, variant, size, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
15468
+ var Toggle = React66.forwardRef(({ className, variant, size, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(
15408
15469
  TogglePrimitive.Root,
15409
15470
  {
15410
15471
  ref,
@@ -15415,20 +15476,20 @@ var Toggle = React66.forwardRef(({ className, variant, size, ...props }, ref) =>
15415
15476
  ));
15416
15477
  Toggle.displayName = TogglePrimitive.Root.displayName;
15417
15478
  var ToggleGroupContext = React66.createContext({ size: "default", variant: "default" });
15418
- var ToggleGroup = React66.forwardRef(({ className, variant, size, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
15479
+ var ToggleGroup = React66.forwardRef(({ className, variant, size, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(
15419
15480
  ToggleGroupPrimitive.Root,
15420
15481
  {
15421
15482
  ref,
15422
15483
  "data-slot": "toggle-group",
15423
15484
  className: cn("flex items-center justify-center gap-1", className),
15424
15485
  ...props,
15425
- children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(ToggleGroupContext.Provider, { value: { variant, size }, children })
15486
+ children: /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(ToggleGroupContext.Provider, { value: { variant, size }, children })
15426
15487
  }
15427
15488
  ));
15428
15489
  ToggleGroup.displayName = ToggleGroupPrimitive.Root.displayName;
15429
15490
  var ToggleGroupItem = React66.forwardRef(({ className, children, variant, size, ...props }, ref) => {
15430
15491
  const context = React66.useContext(ToggleGroupContext);
15431
- return /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
15492
+ return /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(
15432
15493
  ToggleGroupPrimitive.Item,
15433
15494
  {
15434
15495
  ref,
@@ -15453,7 +15514,7 @@ init_cn();
15453
15514
  init_icons();
15454
15515
  init_controls();
15455
15516
  init_motion();
15456
- var import_jsx_runtime98 = require("react/jsx-runtime");
15517
+ var import_jsx_runtime99 = require("react/jsx-runtime");
15457
15518
  var BASE_SIZE = 40;
15458
15519
  var BASE_ICON = 20;
15459
15520
  var REACH = 150;
@@ -15473,29 +15534,29 @@ function FloatingDock({
15473
15534
  growthFactor = 2,
15474
15535
  labelPosition = "top"
15475
15536
  }) {
15476
- return /* @__PURE__ */ (0, import_jsx_runtime98.jsxs)("div", { className: cn("flex w-auto items-center justify-center bg-background", className), children: [
15477
- /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(FloatingDockPhone, { items }),
15478
- /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(FloatingDockDesktop, { items, growthFactor, labelPosition })
15537
+ return /* @__PURE__ */ (0, import_jsx_runtime99.jsxs)("div", { className: cn("flex w-auto items-center justify-center bg-background", className), children: [
15538
+ /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(FloatingDockPhone, { items }),
15539
+ /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(FloatingDockDesktop, { items, growthFactor, labelPosition })
15479
15540
  ] });
15480
15541
  }
15481
15542
  function BalancedFloatingDock(props) {
15482
- return /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(FloatingDock, { growthFactor: 1.8, labelPosition: "side", ...props });
15543
+ return /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(FloatingDock, { growthFactor: 1.8, labelPosition: "side", ...props });
15483
15544
  }
15484
15545
  function FloatingDockPhone({ items }) {
15485
15546
  const [open, setOpen] = React67.useState(false);
15486
- return /* @__PURE__ */ (0, import_jsx_runtime98.jsxs)("div", { className: "relative block md:hidden", children: [
15487
- /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(
15547
+ return /* @__PURE__ */ (0, import_jsx_runtime99.jsxs)("div", { className: "relative block md:hidden", children: [
15548
+ /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(
15488
15549
  Button2,
15489
15550
  {
15490
15551
  type: "button",
15491
15552
  variant: "quiet",
15492
15553
  "aria-label": open ? "Close menu" : "Open menu",
15493
- icon: open ? /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(PanelTopCloseIcon, { className: "h-5 w-5" }) : /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(PanelTopOpenIcon, { className: "h-5 w-5" }),
15554
+ icon: open ? /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(PanelTopCloseIcon, { className: "h-5 w-5" }) : /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(PanelTopOpenIcon, { className: "h-5 w-5" }),
15494
15555
  "aria-expanded": open,
15495
15556
  onClick: () => setOpen(!open)
15496
15557
  }
15497
15558
  ),
15498
- /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(
15559
+ /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(
15499
15560
  "div",
15500
15561
  {
15501
15562
  "data-open": open,
@@ -15505,32 +15566,32 @@ function FloatingDockPhone({ items }) {
15505
15566
  PANEL_MOTION_CLASS,
15506
15567
  open ? "translate-y-0" : "pointer-events-none -translate-y-full"
15507
15568
  ),
15508
- children: /* @__PURE__ */ (0, import_jsx_runtime98.jsxs)("div", { className: "flex h-full flex-col", children: [
15509
- /* @__PURE__ */ (0, import_jsx_runtime98.jsxs)("div", { className: "flex items-center justify-between border-b border-border p-4", children: [
15510
- /* @__PURE__ */ (0, import_jsx_runtime98.jsx)("h2", { className: "text-lg font-medium", children: "Menu" }),
15511
- /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(
15569
+ children: /* @__PURE__ */ (0, import_jsx_runtime99.jsxs)("div", { className: "flex h-full flex-col", children: [
15570
+ /* @__PURE__ */ (0, import_jsx_runtime99.jsxs)("div", { className: "flex items-center justify-between border-b border-border p-4", children: [
15571
+ /* @__PURE__ */ (0, import_jsx_runtime99.jsx)("h2", { className: "text-lg font-medium", children: "Menu" }),
15572
+ /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(
15512
15573
  Button2,
15513
15574
  {
15514
15575
  type: "button",
15515
15576
  variant: "quiet",
15516
15577
  "aria-label": "Close menu",
15517
- icon: /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(XIcon, { className: "h-6 w-6" }),
15578
+ icon: /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(XIcon, { className: "h-6 w-6" }),
15518
15579
  onClick: () => setOpen(false)
15519
15580
  }
15520
15581
  )
15521
15582
  ] }),
15522
- /* @__PURE__ */ (0, import_jsx_runtime98.jsx)("div", { className: "flex-1 overflow-y-auto", children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime98.jsxs)(
15583
+ /* @__PURE__ */ (0, import_jsx_runtime99.jsx)("div", { className: "flex-1 overflow-y-auto", children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime99.jsxs)(
15523
15584
  HostLink,
15524
15585
  {
15525
15586
  href: item.href,
15526
15587
  className: "flex items-center justify-between border-b border-border p-4",
15527
15588
  onClick: () => setOpen(false),
15528
15589
  children: [
15529
- /* @__PURE__ */ (0, import_jsx_runtime98.jsxs)("div", { className: "flex items-center space-x-4", children: [
15530
- /* @__PURE__ */ (0, import_jsx_runtime98.jsx)("div", { className: "flex h-10 w-10 items-center justify-center rounded-full bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime98.jsx)("div", { className: "h-5 w-5 [&>svg]:h-full [&>svg]:w-full", children: item.icon }) }),
15531
- /* @__PURE__ */ (0, import_jsx_runtime98.jsx)("span", { className: "font-medium", children: item.label })
15590
+ /* @__PURE__ */ (0, import_jsx_runtime99.jsxs)("div", { className: "flex items-center space-x-4", children: [
15591
+ /* @__PURE__ */ (0, import_jsx_runtime99.jsx)("div", { className: "flex h-10 w-10 items-center justify-center rounded-full bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime99.jsx)("div", { className: "h-5 w-5 [&>svg]:h-full [&>svg]:w-full", children: item.icon }) }),
15592
+ /* @__PURE__ */ (0, import_jsx_runtime99.jsx)("span", { className: "font-medium", children: item.label })
15532
15593
  ] }),
15533
- /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(ChevronRightIcon, { className: "h-5 w-5 text-muted-foreground" })
15594
+ /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(ChevronRightIcon, { className: "h-5 w-5 text-muted-foreground" })
15534
15595
  ]
15535
15596
  },
15536
15597
  item.label
@@ -15557,7 +15618,7 @@ function FloatingDockDesktop({
15557
15618
  })
15558
15619
  );
15559
15620
  };
15560
- return /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(
15621
+ return /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(
15561
15622
  "div",
15562
15623
  {
15563
15624
  onMouseMove: (e) => measure(e.clientX),
@@ -15571,8 +15632,8 @@ function FloatingDockDesktop({
15571
15632
  const size = dockSize(BASE_SIZE, growthFactor, distance);
15572
15633
  const icon = dockSize(BASE_ICON, growthFactor, distance);
15573
15634
  const under = Number.isFinite(distance) && Math.abs(distance) < BASE_SIZE / 2;
15574
- return /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(HostLink, { href: item.href, "aria-label": item.label, children: /* @__PURE__ */ (0, import_jsx_runtime98.jsxs)("div", { className: "relative", children: [
15575
- /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(
15635
+ return /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(HostLink, { href: item.href, "aria-label": item.label, children: /* @__PURE__ */ (0, import_jsx_runtime99.jsxs)("div", { className: "relative", children: [
15636
+ /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(
15576
15637
  "div",
15577
15638
  {
15578
15639
  ref: (el) => {
@@ -15583,7 +15644,7 @@ function FloatingDockDesktop({
15583
15644
  "relative flex aspect-square items-center justify-center rounded-full bg-muted transition-[width,height]",
15584
15645
  MAGNIFY_MOTION
15585
15646
  ),
15586
- children: /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(
15647
+ children: /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(
15587
15648
  "div",
15588
15649
  {
15589
15650
  style: { width: icon, height: icon },
@@ -15596,7 +15657,7 @@ function FloatingDockDesktop({
15596
15657
  )
15597
15658
  }
15598
15659
  ),
15599
- /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(
15660
+ /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(
15600
15661
  "div",
15601
15662
  {
15602
15663
  "data-shown": under,
@@ -15622,7 +15683,7 @@ init_writing_box();
15622
15683
 
15623
15684
  // src/deferred-dialog.tsx
15624
15685
  var React69 = __toESM(require("react"), 1);
15625
- var import_jsx_runtime100 = require("react/jsx-runtime");
15686
+ var import_jsx_runtime101 = require("react/jsx-runtime");
15626
15687
  function deferredDialog(name, load, isOpen) {
15627
15688
  let pending = null;
15628
15689
  const preload = () => pending ??= load().then((component) => ({ default: component }));
@@ -15632,7 +15693,7 @@ function deferredDialog(name, load, isOpen) {
15632
15693
  const [opened, setOpened] = React69.useState(open);
15633
15694
  if (open && !opened) setOpened(true);
15634
15695
  if (!open && !opened) return null;
15635
- return /* @__PURE__ */ (0, import_jsx_runtime100.jsx)(React69.Suspense, { fallback: null, children: /* @__PURE__ */ (0, import_jsx_runtime100.jsx)(Body, { ...props }) });
15696
+ return /* @__PURE__ */ (0, import_jsx_runtime101.jsx)(React69.Suspense, { fallback: null, children: /* @__PURE__ */ (0, import_jsx_runtime101.jsx)(Body, { ...props }) });
15636
15697
  }
15637
15698
  Deferred.displayName = name;
15638
15699
  return Object.assign(Deferred, { preload });
@@ -15678,10 +15739,10 @@ var TextInputDialog2 = deferredDialog(
15678
15739
  // src/clipboard-fallback-host.tsx
15679
15740
  var import_clipboard_fallback_opener = require("@ai-matrx/kit/clipboard-fallback-opener");
15680
15741
  var import_opener_react2 = require("@ai-matrx/kit/opener-react");
15681
- var import_jsx_runtime108 = require("react/jsx-runtime");
15742
+ var import_jsx_runtime109 = require("react/jsx-runtime");
15682
15743
  function ClipboardFallbackHost() {
15683
15744
  const { open, shown, settle } = (0, import_opener_react2.useOpenerHost)(import_clipboard_fallback_opener.clipboardFallbackOpener);
15684
- return /* @__PURE__ */ (0, import_jsx_runtime108.jsx)(
15745
+ return /* @__PURE__ */ (0, import_jsx_runtime109.jsx)(
15685
15746
  ClipboardFallbackDialog2,
15686
15747
  {
15687
15748
  open,
@@ -15698,7 +15759,7 @@ function ClipboardFallbackHost() {
15698
15759
  // src/floating-sheet.tsx
15699
15760
  var import_react21 = require("react");
15700
15761
  init_motion();
15701
- var import_jsx_runtime109 = require("react/jsx-runtime");
15762
+ var import_jsx_runtime110 = require("react/jsx-runtime");
15702
15763
  var FloatingSheet = ({
15703
15764
  children,
15704
15765
  isOpen,
@@ -16004,8 +16065,8 @@ var FloatingSheet = ({
16004
16065
  const bottomPadding = showFooter ? "" : "pb-safe";
16005
16066
  return `${basePadding} ${bottomPadding}`.trim();
16006
16067
  };
16007
- return /* @__PURE__ */ (0, import_jsx_runtime109.jsxs)(import_jsx_runtime109.Fragment, { children: [
16008
- isOpen && hasBackdrop && /* @__PURE__ */ (0, import_jsx_runtime109.jsx)(
16068
+ return /* @__PURE__ */ (0, import_jsx_runtime110.jsxs)(import_jsx_runtime110.Fragment, { children: [
16069
+ isOpen && hasBackdrop && /* @__PURE__ */ (0, import_jsx_runtime110.jsx)(
16009
16070
  "div",
16010
16071
  {
16011
16072
  className: `fixed ${respectHeader ? "left-0 right-0 top-10 bottom-0" : "inset-0"} bg-[var(--matrx-overlay-scrim-soft)] z-40 ${isMobile ? "backdrop-blur-sm" : ""} transition-opacity ${durationClass} ${backdropClassName}`,
@@ -16014,7 +16075,7 @@ var FloatingSheet = ({
16014
16075
  "data-testid": "floating-sheet-backdrop"
16015
16076
  }
16016
16077
  ),
16017
- /* @__PURE__ */ (0, import_jsx_runtime109.jsx)(
16078
+ /* @__PURE__ */ (0, import_jsx_runtime110.jsx)(
16018
16079
  "div",
16019
16080
  {
16020
16081
  ref: sheetRef,
@@ -16026,25 +16087,25 @@ var FloatingSheet = ({
16026
16087
  "aria-labelledby": "sheet-title",
16027
16088
  tabIndex: -1,
16028
16089
  "data-testid": "floating-sheet",
16029
- children: /* @__PURE__ */ (0, import_jsx_runtime109.jsxs)("div", { className: "flex flex-col h-full overflow-hidden", children: [
16030
- showHeader && /* @__PURE__ */ (0, import_jsx_runtime109.jsxs)(
16090
+ children: /* @__PURE__ */ (0, import_jsx_runtime110.jsxs)("div", { className: "flex flex-col h-full overflow-hidden", children: [
16091
+ showHeader && /* @__PURE__ */ (0, import_jsx_runtime110.jsxs)(
16031
16092
  "div",
16032
16093
  {
16033
16094
  className: `flex items-center justify-between border-b border-border ${getMobileHeaderClass()} ${headerClassName}`,
16034
16095
  children: [
16035
- /* @__PURE__ */ (0, import_jsx_runtime109.jsxs)("div", { className: "flex-1 min-w-0", children: [
16036
- typeof title === "string" ? /* @__PURE__ */ (0, import_jsx_runtime109.jsx)("h2", { id: "sheet-title", className: `${isMobile ? "text-xl" : "text-lg"} font-semibold text-foreground`, children: title }) : /* @__PURE__ */ (0, import_jsx_runtime109.jsx)("div", { id: "sheet-title", children: title }),
16037
- description && (typeof description === "string" ? /* @__PURE__ */ (0, import_jsx_runtime109.jsx)("p", { className: "type-body text-muted-foreground mt-1", children: description }) : /* @__PURE__ */ (0, import_jsx_runtime109.jsx)("div", { className: "mt-1", children: description }))
16096
+ /* @__PURE__ */ (0, import_jsx_runtime110.jsxs)("div", { className: "flex-1 min-w-0", children: [
16097
+ typeof title === "string" ? /* @__PURE__ */ (0, import_jsx_runtime110.jsx)("h2", { id: "sheet-title", className: `${isMobile ? "text-xl" : "text-lg"} font-semibold text-foreground`, children: title }) : /* @__PURE__ */ (0, import_jsx_runtime110.jsx)("div", { id: "sheet-title", children: title }),
16098
+ description && (typeof description === "string" ? /* @__PURE__ */ (0, import_jsx_runtime110.jsx)("p", { className: "type-body text-muted-foreground mt-1", children: description }) : /* @__PURE__ */ (0, import_jsx_runtime110.jsx)("div", { className: "mt-1", children: description }))
16038
16099
  ] }),
16039
- headerContent && /* @__PURE__ */ (0, import_jsx_runtime109.jsx)("div", { className: "ml-4 flex items-center", children: headerContent }),
16040
- showCloseButton && /* @__PURE__ */ (0, import_jsx_runtime109.jsx)(
16100
+ headerContent && /* @__PURE__ */ (0, import_jsx_runtime110.jsx)("div", { className: "ml-4 flex items-center", children: headerContent }),
16101
+ showCloseButton && /* @__PURE__ */ (0, import_jsx_runtime110.jsx)(
16041
16102
  "button",
16042
16103
  {
16043
16104
  onClick: onClose,
16044
16105
  className: `ml-4 rounded-full ${isMobile ? "p-2" : "p-1.5"} text-muted-foreground hover:text-foreground bg-transparent hover:bg-accent focus:outline-none focus:ring-2 focus:ring-ring`,
16045
16106
  "aria-label": "Close",
16046
16107
  "data-testid": "floating-sheet-close",
16047
- children: closeButton || /* @__PURE__ */ (0, import_jsx_runtime109.jsxs)(
16108
+ children: closeButton || /* @__PURE__ */ (0, import_jsx_runtime110.jsxs)(
16048
16109
  "svg",
16049
16110
  {
16050
16111
  xmlns: "http://www.w3.org/2000/svg",
@@ -16056,8 +16117,8 @@ var FloatingSheet = ({
16056
16117
  strokeLinecap: "round",
16057
16118
  strokeLinejoin: "round",
16058
16119
  children: [
16059
- /* @__PURE__ */ (0, import_jsx_runtime109.jsx)("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
16060
- /* @__PURE__ */ (0, import_jsx_runtime109.jsx)("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
16120
+ /* @__PURE__ */ (0, import_jsx_runtime110.jsx)("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
16121
+ /* @__PURE__ */ (0, import_jsx_runtime110.jsx)("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
16061
16122
  ]
16062
16123
  }
16063
16124
  )
@@ -16066,7 +16127,7 @@ var FloatingSheet = ({
16066
16127
  ]
16067
16128
  }
16068
16129
  ),
16069
- /* @__PURE__ */ (0, import_jsx_runtime109.jsx)(
16130
+ /* @__PURE__ */ (0, import_jsx_runtime110.jsx)(
16070
16131
  "div",
16071
16132
  {
16072
16133
  ref: contentRef,
@@ -16075,7 +16136,7 @@ var FloatingSheet = ({
16075
16136
  children
16076
16137
  }
16077
16138
  ),
16078
- showFooter && /* @__PURE__ */ (0, import_jsx_runtime109.jsx)(
16139
+ showFooter && /* @__PURE__ */ (0, import_jsx_runtime110.jsx)(
16079
16140
  "div",
16080
16141
  {
16081
16142
  className: `border-t border-border ${getMobileFooterClass()} ${footerClassName}`,
@@ -16090,12 +16151,12 @@ var FloatingSheet = ({
16090
16151
  };
16091
16152
 
16092
16153
  // src/simple-tooltip.tsx
16093
- var import_jsx_runtime110 = require("react/jsx-runtime");
16154
+ var import_jsx_runtime111 = require("react/jsx-runtime");
16094
16155
  var SimpleTooltip = ({ children, text }) => {
16095
16156
  if (!text) return children;
16096
- return /* @__PURE__ */ (0, import_jsx_runtime110.jsxs)(Tooltip, { children: [
16097
- /* @__PURE__ */ (0, import_jsx_runtime110.jsx)(TooltipTrigger, { asChild: true, children }),
16098
- /* @__PURE__ */ (0, import_jsx_runtime110.jsx)(TooltipContent, { children: /* @__PURE__ */ (0, import_jsx_runtime110.jsx)("p", { children: text }) })
16157
+ return /* @__PURE__ */ (0, import_jsx_runtime111.jsxs)(Tooltip, { children: [
16158
+ /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(TooltipTrigger, { asChild: true, children }),
16159
+ /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(TooltipContent, { children: /* @__PURE__ */ (0, import_jsx_runtime111.jsx)("p", { children: text }) })
16099
16160
  ] });
16100
16161
  };
16101
16162
  var AdvancedTooltip = ({
@@ -16118,16 +16179,16 @@ var AdvancedTooltip = ({
16118
16179
  success: "bg-success text-success-foreground"
16119
16180
  };
16120
16181
  const baseContentClasses = "rounded-md px-3 py-1.5 text-sm shadow-md";
16121
- return /* @__PURE__ */ (0, import_jsx_runtime110.jsxs)(Tooltip, { delayDuration, children: [
16122
- /* @__PURE__ */ (0, import_jsx_runtime110.jsx)(TooltipTrigger, { asChild: true, className, children }),
16123
- /* @__PURE__ */ (0, import_jsx_runtime110.jsx)(
16182
+ return /* @__PURE__ */ (0, import_jsx_runtime111.jsxs)(Tooltip, { delayDuration, children: [
16183
+ /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(TooltipTrigger, { asChild: true, className, children }),
16184
+ /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(
16124
16185
  TooltipContent,
16125
16186
  {
16126
16187
  side,
16127
16188
  align,
16128
16189
  sideOffset,
16129
16190
  className: `${baseContentClasses} ${variantStyles[variant]} ${contentClassName}`,
16130
- children: /* @__PURE__ */ (0, import_jsx_runtime110.jsx)("p", { className: "leading-none whitespace-pre-wrap", children: text })
16191
+ children: /* @__PURE__ */ (0, import_jsx_runtime111.jsx)("p", { className: "leading-none whitespace-pre-wrap", children: text })
16131
16192
  }
16132
16193
  )
16133
16194
  ] });
@@ -16137,7 +16198,7 @@ var AdvancedTooltip = ({
16137
16198
  var import_react22 = __toESM(require("react"), 1);
16138
16199
  init_cn();
16139
16200
  init_icons();
16140
- var import_jsx_runtime111 = require("react/jsx-runtime");
16201
+ var import_jsx_runtime112 = require("react/jsx-runtime");
16141
16202
  var animationStyles = `
16142
16203
  @keyframes pulseWave {
16143
16204
  0% { opacity: 0.3; transform: scale(0.8); }
@@ -16214,19 +16275,19 @@ var LoadingSpinner = ({
16214
16275
  }
16215
16276
  };
16216
16277
  const sizeClasses2 = getSizeClasses();
16217
- const renderDots = () => /* @__PURE__ */ (0, import_jsx_runtime111.jsxs)("div", { className: cn("flex items-center", sizeClasses2.container), children: [
16218
- /* @__PURE__ */ (0, import_jsx_runtime111.jsx)("div", { className: cn(sizeClasses2.dot, "bg-primary dark:bg-primary-foreground rounded-full loading-pulse-1") }),
16219
- /* @__PURE__ */ (0, import_jsx_runtime111.jsx)("div", { className: cn(sizeClasses2.dot, "bg-primary dark:bg-primary-foreground rounded-full loading-pulse-2") }),
16220
- /* @__PURE__ */ (0, import_jsx_runtime111.jsx)("div", { className: cn(sizeClasses2.dot, "bg-primary dark:bg-primary-foreground rounded-full loading-pulse-3") })
16278
+ const renderDots = () => /* @__PURE__ */ (0, import_jsx_runtime112.jsxs)("div", { className: cn("flex items-center", sizeClasses2.container), children: [
16279
+ /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("div", { className: cn(sizeClasses2.dot, "bg-primary dark:bg-primary-foreground rounded-full loading-pulse-1") }),
16280
+ /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("div", { className: cn(sizeClasses2.dot, "bg-primary dark:bg-primary-foreground rounded-full loading-pulse-2") }),
16281
+ /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("div", { className: cn(sizeClasses2.dot, "bg-primary dark:bg-primary-foreground rounded-full loading-pulse-3") })
16221
16282
  ] });
16222
- const renderBars = () => /* @__PURE__ */ (0, import_jsx_runtime111.jsxs)("div", { className: cn("flex items-center", sizeClasses2.container), children: [
16223
- /* @__PURE__ */ (0, import_jsx_runtime111.jsx)("div", { className: cn(sizeClasses2.bar, "bg-primary dark:bg-primary-foreground rounded-sm loading-bounce-1") }),
16224
- /* @__PURE__ */ (0, import_jsx_runtime111.jsx)("div", { className: cn(sizeClasses2.bar, "bg-primary dark:bg-primary-foreground rounded-sm loading-bounce-2") }),
16225
- /* @__PURE__ */ (0, import_jsx_runtime111.jsx)("div", { className: cn(sizeClasses2.bar, "bg-primary dark:bg-primary-foreground rounded-sm loading-bounce-3") }),
16226
- /* @__PURE__ */ (0, import_jsx_runtime111.jsx)("div", { className: cn(sizeClasses2.bar, "bg-primary dark:bg-primary-foreground rounded-sm loading-bounce-4") })
16283
+ const renderBars = () => /* @__PURE__ */ (0, import_jsx_runtime112.jsxs)("div", { className: cn("flex items-center", sizeClasses2.container), children: [
16284
+ /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("div", { className: cn(sizeClasses2.bar, "bg-primary dark:bg-primary-foreground rounded-sm loading-bounce-1") }),
16285
+ /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("div", { className: cn(sizeClasses2.bar, "bg-primary dark:bg-primary-foreground rounded-sm loading-bounce-2") }),
16286
+ /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("div", { className: cn(sizeClasses2.bar, "bg-primary dark:bg-primary-foreground rounded-sm loading-bounce-3") }),
16287
+ /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("div", { className: cn(sizeClasses2.bar, "bg-primary dark:bg-primary-foreground rounded-sm loading-bounce-4") })
16227
16288
  ] });
16228
- const renderBrain = () => /* @__PURE__ */ (0, import_jsx_runtime111.jsxs)("div", { className: "relative w-6 h-6 flex items-center justify-center", children: [
16229
- /* @__PURE__ */ (0, import_jsx_runtime111.jsx)("div", { className: "absolute", children: /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(
16289
+ const renderBrain = () => /* @__PURE__ */ (0, import_jsx_runtime112.jsxs)("div", { className: "relative w-6 h-6 flex items-center justify-center", children: [
16290
+ /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("div", { className: "absolute", children: /* @__PURE__ */ (0, import_jsx_runtime112.jsx)(
16230
16291
  "svg",
16231
16292
  {
16232
16293
  width: "24",
@@ -16234,7 +16295,7 @@ var LoadingSpinner = ({
16234
16295
  viewBox: "0 0 24 24",
16235
16296
  fill: "none",
16236
16297
  className: "w-5 h-5 text-primary dark:text-primary-foreground",
16237
- children: /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(
16298
+ children: /* @__PURE__ */ (0, import_jsx_runtime112.jsx)(
16238
16299
  "path",
16239
16300
  {
16240
16301
  d: "M12 4C9.5 4 7.5 5.5 7.5 8C7.5 9 7.5 9.5 7 10.5C6.5 11.5 6 12 6 13.5C6 15.5 7.5 17 9.5 17C10.5 17 11 16.5 12 16.5C13 16.5 13.5 17 14.5 17C16.5 17 18 15.5 18 13.5C18 12 17.5 11.5 17 10.5C16.5 9.5 16.5 9 16.5 8C16.5 5.5 14.5 4 12 4Z",
@@ -16245,44 +16306,44 @@ var LoadingSpinner = ({
16245
16306
  )
16246
16307
  }
16247
16308
  ) }),
16248
- /* @__PURE__ */ (0, import_jsx_runtime111.jsxs)("div", { className: "absolute inset-0", children: [
16249
- /* @__PURE__ */ (0, import_jsx_runtime111.jsx)("div", { className: "absolute w-1 h-1 bg-primary/60 dark:bg-primary-foreground/60 rounded-full left-[8px] top-[10px] loading-neuron-1" }),
16250
- /* @__PURE__ */ (0, import_jsx_runtime111.jsx)("div", { className: "absolute w-1 h-1 bg-primary/60 dark:bg-primary-foreground/60 rounded-full left-[12px] top-[8px] loading-neuron-2" }),
16251
- /* @__PURE__ */ (0, import_jsx_runtime111.jsx)("div", { className: "absolute w-1 h-1 bg-primary/60 dark:bg-primary-foreground/60 rounded-full left-[16px] top-[10px] loading-neuron-3" }),
16252
- /* @__PURE__ */ (0, import_jsx_runtime111.jsx)("div", { className: "absolute w-1 h-1 bg-primary/60 dark:bg-primary-foreground/60 rounded-full left-[10px] top-[14px] loading-neuron-4" }),
16253
- /* @__PURE__ */ (0, import_jsx_runtime111.jsx)("div", { className: "absolute w-1 h-1 bg-primary/60 dark:bg-primary-foreground/60 rounded-full left-[14px] top-[14px] loading-neuron-5" })
16309
+ /* @__PURE__ */ (0, import_jsx_runtime112.jsxs)("div", { className: "absolute inset-0", children: [
16310
+ /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("div", { className: "absolute w-1 h-1 bg-primary/60 dark:bg-primary-foreground/60 rounded-full left-[8px] top-[10px] loading-neuron-1" }),
16311
+ /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("div", { className: "absolute w-1 h-1 bg-primary/60 dark:bg-primary-foreground/60 rounded-full left-[12px] top-[8px] loading-neuron-2" }),
16312
+ /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("div", { className: "absolute w-1 h-1 bg-primary/60 dark:bg-primary-foreground/60 rounded-full left-[16px] top-[10px] loading-neuron-3" }),
16313
+ /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("div", { className: "absolute w-1 h-1 bg-primary/60 dark:bg-primary-foreground/60 rounded-full left-[10px] top-[14px] loading-neuron-4" }),
16314
+ /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("div", { className: "absolute w-1 h-1 bg-primary/60 dark:bg-primary-foreground/60 rounded-full left-[14px] top-[14px] loading-neuron-5" })
16254
16315
  ] }),
16255
- /* @__PURE__ */ (0, import_jsx_runtime111.jsx)("div", { className: "absolute w-full h-full rounded-full border border-primary/30 dark:border-primary-foreground/30 loading-brain-pulse-1" }),
16256
- /* @__PURE__ */ (0, import_jsx_runtime111.jsx)("div", { className: "absolute w-full h-full rounded-full border border-primary/30 dark:border-primary-foreground/30 loading-brain-pulse-2" })
16316
+ /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("div", { className: "absolute w-full h-full rounded-full border border-primary/30 dark:border-primary-foreground/30 loading-brain-pulse-1" }),
16317
+ /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("div", { className: "absolute w-full h-full rounded-full border border-primary/30 dark:border-primary-foreground/30 loading-brain-pulse-2" })
16257
16318
  ] });
16258
- const renderMinimal = () => /* @__PURE__ */ (0, import_jsx_runtime111.jsx)("div", { className: "relative", children: /* @__PURE__ */ (0, import_jsx_runtime111.jsx)("div", { className: cn(sizeClasses2.dot, "bg-primary dark:bg-primary-foreground rounded-full loading-pulse-1") }) });
16259
- const renderWorkflow = () => /* @__PURE__ */ (0, import_jsx_runtime111.jsxs)("div", { className: "flex flex-col items-center justify-center space-y-6", children: [
16260
- /* @__PURE__ */ (0, import_jsx_runtime111.jsxs)("div", { className: "relative", children: [
16261
- /* @__PURE__ */ (0, import_jsx_runtime111.jsx)("div", { className: "w-16 h-16 bg-primary/10 dark:bg-primary-foreground/10 rounded-full flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(WorkflowIcon, { className: "w-8 h-8 text-primary dark:text-primary-foreground" }) }),
16262
- /* @__PURE__ */ (0, import_jsx_runtime111.jsx)("div", { className: "absolute -top-1 -right-1 w-6 h-6 bg-primary dark:bg-primary-foreground rounded-full flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(PlusIcon, { className: "w-3 h-3 text-primary-foreground dark:text-primary" }) }),
16263
- /* @__PURE__ */ (0, import_jsx_runtime111.jsx)("div", { className: "absolute inset-0 border-2 border-transparent border-t-primary dark:border-t-primary-foreground rounded-full matrx-spin" })
16319
+ const renderMinimal = () => /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("div", { className: "relative", children: /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("div", { className: cn(sizeClasses2.dot, "bg-primary dark:bg-primary-foreground rounded-full loading-pulse-1") }) });
16320
+ const renderWorkflow = () => /* @__PURE__ */ (0, import_jsx_runtime112.jsxs)("div", { className: "flex flex-col items-center justify-center space-y-6", children: [
16321
+ /* @__PURE__ */ (0, import_jsx_runtime112.jsxs)("div", { className: "relative", children: [
16322
+ /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("div", { className: "w-16 h-16 bg-primary/10 dark:bg-primary-foreground/10 rounded-full flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime112.jsx)(WorkflowIcon, { className: "w-8 h-8 text-primary dark:text-primary-foreground" }) }),
16323
+ /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("div", { className: "absolute -top-1 -right-1 w-6 h-6 bg-primary dark:bg-primary-foreground rounded-full flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime112.jsx)(PlusIcon, { className: "w-3 h-3 text-primary-foreground dark:text-primary" }) }),
16324
+ /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("div", { className: "absolute inset-0 border-2 border-transparent border-t-primary dark:border-t-primary-foreground rounded-full matrx-spin" })
16264
16325
  ] }),
16265
- /* @__PURE__ */ (0, import_jsx_runtime111.jsxs)("div", { className: "text-center space-y-2", children: [
16266
- /* @__PURE__ */ (0, import_jsx_runtime111.jsxs)("h2", { className: "text-lg font-semibold text-foreground flex items-center gap-2 justify-center", children: [
16267
- /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(Loader2Icon, { className: "w-4 h-4 matrx-spin" }),
16326
+ /* @__PURE__ */ (0, import_jsx_runtime112.jsxs)("div", { className: "text-center space-y-2", children: [
16327
+ /* @__PURE__ */ (0, import_jsx_runtime112.jsxs)("h2", { className: "text-lg font-semibold text-foreground flex items-center gap-2 justify-center", children: [
16328
+ /* @__PURE__ */ (0, import_jsx_runtime112.jsx)(Loader2Icon, { className: "w-4 h-4 matrx-spin" }),
16268
16329
  title || "Loading Workflow"
16269
16330
  ] }),
16270
- /* @__PURE__ */ (0, import_jsx_runtime111.jsx)("p", { className: "type-body text-muted-foreground max-w-sm", children: subtitle || message || "Setting up your workflow..." })
16331
+ /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("p", { className: "type-body text-muted-foreground max-w-sm", children: subtitle || message || "Setting up your workflow..." })
16271
16332
  ] }),
16272
- showProgressSteps && /* @__PURE__ */ (0, import_jsx_runtime111.jsxs)("div", { className: "flex items-center gap-2 type-secondary text-muted-foreground", children: [
16273
- /* @__PURE__ */ (0, import_jsx_runtime111.jsxs)("div", { className: "flex items-center gap-1", children: [
16274
- /* @__PURE__ */ (0, import_jsx_runtime111.jsx)("div", { className: "w-2 h-2 bg-primary dark:bg-primary-foreground rounded-full matrx-pulse" }),
16275
- /* @__PURE__ */ (0, import_jsx_runtime111.jsx)("span", { children: "Loading" })
16333
+ showProgressSteps && /* @__PURE__ */ (0, import_jsx_runtime112.jsxs)("div", { className: "flex items-center gap-2 type-secondary text-muted-foreground", children: [
16334
+ /* @__PURE__ */ (0, import_jsx_runtime112.jsxs)("div", { className: "flex items-center gap-1", children: [
16335
+ /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("div", { className: "w-2 h-2 bg-primary dark:bg-primary-foreground rounded-full matrx-pulse" }),
16336
+ /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("span", { children: "Loading" })
16276
16337
  ] }),
16277
- /* @__PURE__ */ (0, import_jsx_runtime111.jsx)("div", { className: "w-4 h-px bg-muted-foreground/30" }),
16278
- /* @__PURE__ */ (0, import_jsx_runtime111.jsxs)("div", { className: "flex items-center gap-1", children: [
16279
- /* @__PURE__ */ (0, import_jsx_runtime111.jsx)("div", { className: "w-2 h-2 bg-muted-foreground/30 rounded-full" }),
16280
- /* @__PURE__ */ (0, import_jsx_runtime111.jsx)("span", { children: "Initializing" })
16338
+ /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("div", { className: "w-4 h-px bg-muted-foreground/30" }),
16339
+ /* @__PURE__ */ (0, import_jsx_runtime112.jsxs)("div", { className: "flex items-center gap-1", children: [
16340
+ /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("div", { className: "w-2 h-2 bg-muted-foreground/30 rounded-full" }),
16341
+ /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("span", { children: "Initializing" })
16281
16342
  ] }),
16282
- /* @__PURE__ */ (0, import_jsx_runtime111.jsx)("div", { className: "w-4 h-px bg-muted-foreground/30" }),
16283
- /* @__PURE__ */ (0, import_jsx_runtime111.jsxs)("div", { className: "flex items-center gap-1", children: [
16284
- /* @__PURE__ */ (0, import_jsx_runtime111.jsx)("div", { className: "w-2 h-2 bg-muted-foreground/30 rounded-full" }),
16285
- /* @__PURE__ */ (0, import_jsx_runtime111.jsx)("span", { children: "Ready" })
16343
+ /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("div", { className: "w-4 h-px bg-muted-foreground/30" }),
16344
+ /* @__PURE__ */ (0, import_jsx_runtime112.jsxs)("div", { className: "flex items-center gap-1", children: [
16345
+ /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("div", { className: "w-2 h-2 bg-muted-foreground/30 rounded-full" }),
16346
+ /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("span", { children: "Ready" })
16286
16347
  ] })
16287
16348
  ] })
16288
16349
  ] });
@@ -16311,13 +16372,13 @@ var LoadingSpinner = ({
16311
16372
  }
16312
16373
  };
16313
16374
  if (variant === "workflow" && (fullscreen || overlay)) {
16314
- return /* @__PURE__ */ (0, import_jsx_runtime111.jsxs)("div", { className: cn(
16375
+ return /* @__PURE__ */ (0, import_jsx_runtime112.jsxs)("div", { className: cn(
16315
16376
  "flex items-center justify-center bg-background",
16316
16377
  fullscreen && "h-dvh w-full",
16317
16378
  className
16318
16379
  ), "aria-busy": "true", children: [
16319
- overlay && /* @__PURE__ */ (0, import_jsx_runtime111.jsx)("div", { className: "absolute inset-0 bg-background/80 backdrop-blur-sm z-50" }),
16320
- /* @__PURE__ */ (0, import_jsx_runtime111.jsx)("div", { className: cn(
16380
+ overlay && /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("div", { className: "absolute inset-0 bg-background/80 backdrop-blur-sm z-50" }),
16381
+ /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("div", { className: cn(
16321
16382
  "flex flex-col items-center justify-center",
16322
16383
  overlay && "relative z-50"
16323
16384
  ), children: renderWorkflow() })
@@ -16325,22 +16386,22 @@ var LoadingSpinner = ({
16325
16386
  }
16326
16387
  return (
16327
16388
  // aria-busy: a spinner is a stand-in, and whatever measures a settled layout waits for it.
16328
- /* @__PURE__ */ (0, import_jsx_runtime111.jsx)("div", { className: cn("flex items-center", className), "aria-busy": "true", children: variant === "workflow" ? renderWorkflow() : /* @__PURE__ */ (0, import_jsx_runtime111.jsxs)(import_jsx_runtime111.Fragment, { children: [
16389
+ /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("div", { className: cn("flex items-center", className), "aria-busy": "true", children: variant === "workflow" ? renderWorkflow() : /* @__PURE__ */ (0, import_jsx_runtime112.jsxs)(import_jsx_runtime112.Fragment, { children: [
16329
16390
  renderSpinner(),
16330
- showMessage && /* @__PURE__ */ (0, import_jsx_runtime111.jsx)("span", { className: cn("ml-3 text-muted-foreground", sizeClasses2.text), children: message || getDefaultMessage() })
16391
+ showMessage && /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("span", { className: cn("ml-3 text-muted-foreground", sizeClasses2.text), children: message || getDefaultMessage() })
16331
16392
  ] }) })
16332
16393
  );
16333
16394
  };
16334
16395
 
16335
16396
  // src/mini-loader.tsx
16336
- var import_jsx_runtime112 = require("react/jsx-runtime");
16397
+ var import_jsx_runtime113 = require("react/jsx-runtime");
16337
16398
  function MatrxMiniLoader() {
16338
- return /* @__PURE__ */ (0, import_jsx_runtime112.jsx)(LoadingSpinner, { variant: "dots", message: "Initializing Matrx...", size: "md" });
16399
+ return /* @__PURE__ */ (0, import_jsx_runtime113.jsx)(LoadingSpinner, { variant: "dots", message: "Initializing Matrx...", size: "md" });
16339
16400
  }
16340
16401
 
16341
16402
  // src/suspense-loader.tsx
16342
16403
  init_icons();
16343
- var import_jsx_runtime113 = require("react/jsx-runtime");
16404
+ var import_jsx_runtime114 = require("react/jsx-runtime");
16344
16405
  var sizeClasses = {
16345
16406
  xs: "h-3 w-3",
16346
16407
  sm: "h-4 w-4",
@@ -16353,7 +16414,7 @@ function SuspenseLoader({
16353
16414
  message,
16354
16415
  className = ""
16355
16416
  }) {
16356
- const spinner = /* @__PURE__ */ (0, import_jsx_runtime113.jsx)(
16417
+ const spinner = /* @__PURE__ */ (0, import_jsx_runtime114.jsx)(
16357
16418
  Loader2Icon,
16358
16419
  {
16359
16420
  className: `${sizeClasses[size]} matrx-spin text-disabled-foreground ${className}`,
@@ -16361,7 +16422,7 @@ function SuspenseLoader({
16361
16422
  "aria-label": message ? void 0 : "Loading"
16362
16423
  }
16363
16424
  );
16364
- const content = message ? /* @__PURE__ */ (0, import_jsx_runtime113.jsxs)(
16425
+ const content = message ? /* @__PURE__ */ (0, import_jsx_runtime114.jsxs)(
16365
16426
  "span",
16366
16427
  {
16367
16428
  className: "inline-flex items-center gap-2",
@@ -16369,12 +16430,12 @@ function SuspenseLoader({
16369
16430
  "aria-live": "polite",
16370
16431
  children: [
16371
16432
  spinner,
16372
- /* @__PURE__ */ (0, import_jsx_runtime113.jsx)("span", { children: message })
16433
+ /* @__PURE__ */ (0, import_jsx_runtime114.jsx)("span", { children: message })
16373
16434
  ]
16374
16435
  }
16375
16436
  ) : spinner;
16376
16437
  if (centered) {
16377
- return /* @__PURE__ */ (0, import_jsx_runtime113.jsx)("div", { className: "flex items-center justify-center w-full h-full min-h-[2rem]", children: content });
16438
+ return /* @__PURE__ */ (0, import_jsx_runtime114.jsx)("div", { className: "flex items-center justify-center w-full h-full min-h-[2rem]", children: content });
16378
16439
  }
16379
16440
  return content;
16380
16441
  }
@@ -16382,7 +16443,7 @@ function SuspenseLoader({
16382
16443
  // src/shimmer-text.tsx
16383
16444
  init_cn();
16384
16445
  var import_react23 = require("react");
16385
- var import_jsx_runtime114 = require("react/jsx-runtime");
16446
+ var import_jsx_runtime115 = require("react/jsx-runtime");
16386
16447
  var SHIMMER_STYLE = {
16387
16448
  backgroundImage: "linear-gradient(90deg, color-mix(in srgb, currentColor 18%, transparent) 0%, currentColor 50%, color-mix(in srgb, currentColor 18%, transparent) 100%)",
16388
16449
  backgroundSize: "200% 100%",
@@ -16410,7 +16471,7 @@ function useShimmerSweep(durationMs = 2e3) {
16410
16471
  }
16411
16472
  function ShimmerText({ text, className }) {
16412
16473
  const ref = useShimmerSweep();
16413
- return /* @__PURE__ */ (0, import_jsx_runtime114.jsx)(
16474
+ return /* @__PURE__ */ (0, import_jsx_runtime115.jsx)(
16414
16475
  "span",
16415
16476
  {
16416
16477
  ref,
@@ -16474,7 +16535,7 @@ var import_react_slot8 = require("@radix-ui/react-slot");
16474
16535
  var React79 = __toESM(require("react"), 1);
16475
16536
  init_icons();
16476
16537
  init_motion();
16477
- var import_jsx_runtime115 = require("react/jsx-runtime");
16538
+ var import_jsx_runtime116 = require("react/jsx-runtime");
16478
16539
  var FIRST_USE_HINT_TITLE_MAX = 32;
16479
16540
  var FIRST_USE_HINT_DETAIL_MAX = 60;
16480
16541
  var FirstUseHintContext = React79.createContext(null);
@@ -16482,7 +16543,7 @@ function FirstUseHintProvider({
16482
16543
  store,
16483
16544
  children
16484
16545
  }) {
16485
- return /* @__PURE__ */ (0, import_jsx_runtime115.jsx)(FirstUseHintContext.Provider, { value: store, children });
16546
+ return /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(FirstUseHintContext.Provider, { value: store, children });
16486
16547
  }
16487
16548
  var sessionLearned = /* @__PURE__ */ new Set();
16488
16549
  var warnedNoProvider = false;
@@ -16565,9 +16626,9 @@ function FirstUseHint({
16565
16626
  }),
16566
16627
  [target]
16567
16628
  );
16568
- return /* @__PURE__ */ (0, import_jsx_runtime115.jsxs)(Popover, { open, children: [
16569
- pulse ? /* @__PURE__ */ (0, import_jsx_runtime115.jsxs)(import_jsx_runtime115.Fragment, { children: [
16570
- /* @__PURE__ */ (0, import_jsx_runtime115.jsx)(
16629
+ return /* @__PURE__ */ (0, import_jsx_runtime116.jsxs)(Popover, { open, children: [
16630
+ pulse ? /* @__PURE__ */ (0, import_jsx_runtime116.jsxs)(import_jsx_runtime116.Fragment, { children: [
16631
+ /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(
16571
16632
  import_react_slot8.Slot,
16572
16633
  {
16573
16634
  ref: hostRef,
@@ -16576,8 +16637,8 @@ function FirstUseHint({
16576
16637
  children
16577
16638
  }
16578
16639
  ),
16579
- /* @__PURE__ */ (0, import_jsx_runtime115.jsx)(PopoverAnchor, { virtualRef })
16580
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime115.jsx)(
16640
+ /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(PopoverAnchor, { virtualRef })
16641
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(
16581
16642
  PopoverAnchor,
16582
16643
  {
16583
16644
  asChild: true,
@@ -16589,7 +16650,7 @@ function FirstUseHint({
16589
16650
  children
16590
16651
  }
16591
16652
  ),
16592
- /* @__PURE__ */ (0, import_jsx_runtime115.jsxs)(
16653
+ /* @__PURE__ */ (0, import_jsx_runtime116.jsxs)(
16593
16654
  PopoverContent,
16594
16655
  {
16595
16656
  side,
@@ -16606,17 +16667,17 @@ function FirstUseHint({
16606
16667
  onInteractOutside: (e) => e.preventDefault(),
16607
16668
  onEscapeKeyDown: learn,
16608
16669
  children: [
16609
- /* @__PURE__ */ (0, import_jsx_runtime115.jsxs)("div", { className: "flex items-center gap-1 py-0.5 pl-3 pr-0.5", children: [
16610
- /* @__PURE__ */ (0, import_jsx_runtime115.jsxs)("div", { className: "flex min-w-0 flex-col py-1", children: [
16611
- /* @__PURE__ */ (0, import_jsx_runtime115.jsx)("span", { className: "type-secondary truncate font-medium text-foreground", children: title }),
16670
+ /* @__PURE__ */ (0, import_jsx_runtime116.jsxs)("div", { className: "flex items-center gap-1 py-0.5 pl-3 pr-0.5", children: [
16671
+ /* @__PURE__ */ (0, import_jsx_runtime116.jsxs)("div", { className: "flex min-w-0 flex-col py-1", children: [
16672
+ /* @__PURE__ */ (0, import_jsx_runtime116.jsx)("span", { className: "type-secondary truncate font-medium text-foreground", children: title }),
16612
16673
  detail ? (
16613
16674
  // Two lines at most: on a 375px phone a full 60-character line can wrap once.
16614
- /* @__PURE__ */ (0, import_jsx_runtime115.jsx)("span", { className: "type-secondary line-clamp-2 text-muted-foreground", children: detail })
16675
+ /* @__PURE__ */ (0, import_jsx_runtime116.jsx)("span", { className: "type-secondary line-clamp-2 text-muted-foreground", children: detail })
16615
16676
  ) : null
16616
16677
  ] }),
16617
- /* @__PURE__ */ (0, import_jsx_runtime115.jsx)(IconButton, { icon: XIcon, "aria-label": "Dismiss tip", className: "shrink-0", onClick: learn })
16678
+ /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(IconButton, { icon: XIcon, "aria-label": "Dismiss tip", className: "shrink-0", onClick: learn })
16618
16679
  ] }),
16619
- /* @__PURE__ */ (0, import_jsx_runtime115.jsx)(PopoverPrimitive3.Arrow, { className: "fill-popover", width: 10, height: 5 })
16680
+ /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(PopoverPrimitive3.Arrow, { className: "fill-popover", width: 10, height: 5 })
16620
16681
  ]
16621
16682
  }
16622
16683
  )
@@ -16628,7 +16689,7 @@ var React80 = __toESM(require("react"), 1);
16628
16689
  init_cn();
16629
16690
  init_controls();
16630
16691
  init_icons();
16631
- var import_jsx_runtime116 = require("react/jsx-runtime");
16692
+ var import_jsx_runtime117 = require("react/jsx-runtime");
16632
16693
  var SKIP = "skip";
16633
16694
  function unansweredQuestions(preview, answers) {
16634
16695
  return preview.questions.filter((q) => !answers[q.id]);
@@ -16646,11 +16707,11 @@ function ItemDoor({ item, onOpenItem }) {
16646
16707
  const renderItem = React80.useContext(RenderItemContext);
16647
16708
  const hosted = renderItem ? renderItem(item) : null;
16648
16709
  if (hosted != null) {
16649
- return /* @__PURE__ */ (0, import_jsx_runtime116.jsx)("span", { "data-change-item": item.id, className: "inline-flex max-w-full items-center", children: hosted });
16710
+ return /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("span", { "data-change-item": item.id, className: "inline-flex max-w-full items-center", children: hosted });
16650
16711
  }
16651
16712
  const title = item.title?.trim() || "Untitled";
16652
- return /* @__PURE__ */ (0, import_jsx_runtime116.jsxs)("span", { "data-change-item": item.id, className: "inline-flex max-w-full items-center gap-0.5", children: [
16653
- /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(
16713
+ return /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)("span", { "data-change-item": item.id, className: "inline-flex max-w-full items-center gap-0.5", children: [
16714
+ /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(
16654
16715
  Button2,
16655
16716
  {
16656
16717
  type: "button",
@@ -16661,12 +16722,12 @@ function ItemDoor({ item, onOpenItem }) {
16661
16722
  children: title
16662
16723
  }
16663
16724
  ),
16664
- /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(
16725
+ /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(
16665
16726
  Button2,
16666
16727
  {
16667
16728
  type: "button",
16668
16729
  variant: "quiet",
16669
- icon: /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(ExternalLinkIcon, {}),
16730
+ icon: /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(ExternalLinkIcon, {}),
16670
16731
  "data-clickable": "",
16671
16732
  "aria-label": `Open ${title} in a new tab`,
16672
16733
  className: "shrink-0",
@@ -16678,9 +16739,9 @@ function ItemDoor({ item, onOpenItem }) {
16678
16739
  function Doors({ items, total, onOpenItem }) {
16679
16740
  if (!items.length) return null;
16680
16741
  const more = (total ?? items.length) - items.length;
16681
- return /* @__PURE__ */ (0, import_jsx_runtime116.jsxs)("span", { className: "flex min-w-0 flex-wrap items-center gap-x-3 gap-y-1", children: [
16682
- items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(ItemDoor, { item, onOpenItem }, `${item.table ?? item.type}:${item.id}`)),
16683
- more > 0 ? /* @__PURE__ */ (0, import_jsx_runtime116.jsxs)("span", { className: "text-xs text-muted-foreground", children: [
16742
+ return /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)("span", { className: "flex min-w-0 flex-wrap items-center gap-x-3 gap-y-1", children: [
16743
+ items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(ItemDoor, { item, onOpenItem }, `${item.table ?? item.type}:${item.id}`)),
16744
+ more > 0 ? /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)("span", { className: "text-xs text-muted-foreground", children: [
16684
16745
  "+",
16685
16746
  more,
16686
16747
  " more"
@@ -16688,17 +16749,17 @@ function Doors({ items, total, onOpenItem }) {
16688
16749
  ] });
16689
16750
  }
16690
16751
  function Row({ title, meta, children }) {
16691
- return /* @__PURE__ */ (0, import_jsx_runtime116.jsxs)("div", { "data-change-row": "", className: "flex flex-col gap-1 px-3 py-2", children: [
16692
- /* @__PURE__ */ (0, import_jsx_runtime116.jsxs)("div", { className: "flex items-baseline justify-between gap-3", children: [
16693
- /* @__PURE__ */ (0, import_jsx_runtime116.jsx)("span", { className: "min-w-0 text-sm text-foreground", children: title }),
16694
- meta ? /* @__PURE__ */ (0, import_jsx_runtime116.jsx)("span", { className: "shrink-0 text-xs text-muted-foreground", children: meta }) : null
16752
+ return /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)("div", { "data-change-row": "", className: "flex flex-col gap-1 px-3 py-2", children: [
16753
+ /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)("div", { className: "flex items-baseline justify-between gap-3", children: [
16754
+ /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("span", { className: "min-w-0 text-sm text-foreground", children: title }),
16755
+ meta ? /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("span", { className: "shrink-0 text-xs text-muted-foreground", children: meta }) : null
16695
16756
  ] }),
16696
16757
  children
16697
16758
  ] });
16698
16759
  }
16699
16760
  function Alarm({ warning, onOpenItem }) {
16700
16761
  const items = [...warning.items ?? [], ...warning.users ?? []];
16701
- return /* @__PURE__ */ (0, import_jsx_runtime116.jsxs)(
16762
+ return /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)(
16702
16763
  "div",
16703
16764
  {
16704
16765
  role: "alert",
@@ -16706,8 +16767,8 @@ function Alarm({ warning, onOpenItem }) {
16706
16767
  "data-severity": warning.severity,
16707
16768
  className: "flex flex-col gap-1.5 rounded-group border border-destructive bg-destructive/10 px-3 py-2",
16708
16769
  children: [
16709
- /* @__PURE__ */ (0, import_jsx_runtime116.jsx)("span", { className: "text-sm font-medium text-foreground", children: warning.message }),
16710
- /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(Doors, { items, total: warning.count ?? items.length, onOpenItem })
16770
+ /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("span", { className: "text-sm font-medium text-foreground", children: warning.message }),
16771
+ /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(Doors, { items, total: warning.count ?? items.length, onOpenItem })
16711
16772
  ]
16712
16773
  }
16713
16774
  );
@@ -16724,10 +16785,10 @@ function Question({ question, answer, onAnswer, onOpenItem, disabled }) {
16724
16785
  const suggested = !question.suggested ? null : yes && question.suggested === yes.value ? "yes" : noOption && question.suggested === noOption.value ? "no" : "other";
16725
16786
  const wayOut = rest.map((o) => ({ value: o.value, label: o.label }));
16726
16787
  const chosen = [...question.options, ...question.way_out].find((o) => o.value === answer);
16727
- return /* @__PURE__ */ (0, import_jsx_runtime116.jsxs)("div", { "data-change-question": question.id, "data-kind": question.kind, className: "flex flex-col gap-1.5 px-3 py-2", children: [
16728
- /* @__PURE__ */ (0, import_jsx_runtime116.jsx)("span", { className: "text-sm text-foreground", children: question.prompt }),
16729
- /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(Doors, { items: question.items.sample, total: question.items.count, onOpenItem }),
16730
- /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(
16788
+ return /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)("div", { "data-change-question": question.id, "data-kind": question.kind, className: "flex flex-col gap-1.5 px-3 py-2", children: [
16789
+ /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("span", { className: "text-sm text-foreground", children: question.prompt }),
16790
+ /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(Doors, { items: question.items.sample, total: question.items.count, onOpenItem }),
16791
+ /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(
16731
16792
  DecisionControl,
16732
16793
  {
16733
16794
  value,
@@ -16749,7 +16810,7 @@ function Question({ question, answer, onAnswer, onOpenItem, disabled }) {
16749
16810
  "aria-label": question.prompt
16750
16811
  }
16751
16812
  ),
16752
- chosen?.consequence ? /* @__PURE__ */ (0, import_jsx_runtime116.jsx)("span", { className: "text-xs text-muted-foreground", children: chosen.consequence }) : null
16813
+ chosen?.consequence ? /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("span", { className: "text-xs text-muted-foreground", children: chosen.consequence }) : null
16753
16814
  ] });
16754
16815
  }
16755
16816
  var VERB_WORDS = {
@@ -16758,7 +16819,7 @@ var VERB_WORDS = {
16758
16819
  move: { goes: "Moves with it", commit: "Move" }
16759
16820
  };
16760
16821
  function ReviewChanges({ renderItem, ...props }) {
16761
- return /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(RenderItemContext.Provider, { value: renderItem, children: /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(ReviewChangesBody, { ...props }) });
16822
+ return /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(RenderItemContext.Provider, { value: renderItem, children: /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(ReviewChangesBody, { ...props }) });
16762
16823
  }
16763
16824
  function ReviewChangesBody({ preview, answers, onAnswer, onOpenItem, onCommit, onCancel, busy, commitLabel, className }) {
16764
16825
  const words = VERB_WORDS[preview.verb] ?? { goes: "Changes with it", commit: "Apply" };
@@ -16772,23 +16833,23 @@ function ReviewChangesBody({ preview, answers, onAnswer, onOpenItem, onCommit, o
16772
16833
  const suggestible = pending.filter((q) => q.suggested);
16773
16834
  const ready = canCommitChanges(preview, answers);
16774
16835
  const target = preview.target_organization?.name;
16775
- return /* @__PURE__ */ (0, import_jsx_runtime116.jsxs)("div", { "data-review-changes": "", "data-verb": preview.verb, className: cn("flex min-h-0 flex-col gap-3", className), children: [
16776
- alarms.map((w, i) => /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(Alarm, { warning: w, onOpenItem }, `${w.kind}:${i}`)),
16777
- /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(RowGroup, { title: preview.verb === "move" && target ? `Moving to ${target}` : void 0, children: /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(Row, { title: /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(Doors, { items: preview.roots, onOpenItem }) }) }),
16778
- moving.length ? /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(RowGroup, { title: words.goes, children: moving.map((g) => /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(Row, { title: g.noun, meta: `${g.count_is_estimate ? "about " : ""}${g.count}`, children: /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(Doors, { items: g.sample, total: g.count, onOpenItem }) }, `${g.rule_id ?? "root"}:${g.table ?? g.type}`)) }) : null,
16779
- kept.length || staying.length ? /* @__PURE__ */ (0, import_jsx_runtime116.jsxs)(RowGroup, { title: "Stays where it is", children: [
16780
- kept.map((w, i) => /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(Row, { title: w.message ?? w.noun ?? "Used elsewhere", meta: w.count ?? void 0, children: /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(Doors, { items: w.items ?? [], total: w.count, onOpenItem }) }, `kept:${i}`)),
16781
- staying.map((g) => /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(Row, { title: g.noun, meta: g.count, children: /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(Doors, { items: g.sample, total: g.count, onOpenItem }) }, `stay:${g.table ?? g.type}`))
16836
+ return /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)("div", { "data-review-changes": "", "data-verb": preview.verb, className: cn("flex min-h-0 flex-col gap-3", className), children: [
16837
+ alarms.map((w, i) => /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(Alarm, { warning: w, onOpenItem }, `${w.kind}:${i}`)),
16838
+ /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(RowGroup, { title: preview.verb === "move" && target ? `Moving to ${target}` : void 0, children: /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(Row, { title: /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(Doors, { items: preview.roots, onOpenItem }) }) }),
16839
+ moving.length ? /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(RowGroup, { title: words.goes, children: moving.map((g) => /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(Row, { title: g.noun, meta: `${g.count_is_estimate ? "about " : ""}${g.count}`, children: /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(Doors, { items: g.sample, total: g.count, onOpenItem }) }, `${g.rule_id ?? "root"}:${g.table ?? g.type}`)) }) : null,
16840
+ kept.length || staying.length ? /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)(RowGroup, { title: "Stays where it is", children: [
16841
+ kept.map((w, i) => /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(Row, { title: w.message ?? w.noun ?? "Used elsewhere", meta: w.count ?? void 0, children: /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(Doors, { items: w.items ?? [], total: w.count, onOpenItem }) }, `kept:${i}`)),
16842
+ staying.map((g) => /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(Row, { title: g.noun, meta: g.count, children: /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(Doors, { items: g.sample, total: g.count, onOpenItem }) }, `stay:${g.table ?? g.type}`))
16782
16843
  ] }) : null,
16783
- preview.questions.length ? /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(RowGroup, { title: "Decide", children: preview.questions.map((q) => /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(Question, { question: q, answer: answers[q.id], onAnswer, onOpenItem, disabled: busy }, q.id)) }) : null,
16784
- auto || unchecked ? /* @__PURE__ */ (0, import_jsx_runtime116.jsxs)("div", { className: "flex flex-wrap gap-2 px-1", children: [
16785
- auto ? /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(Badge2, { tone: "neutral", children: `${auto.count ?? ""} decided automatically`.trim() }) : null,
16786
- unchecked ? /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(Badge2, { tone: "neutral", children: "Links inside text not checked" }) : null
16844
+ preview.questions.length ? /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(RowGroup, { title: "Decide", children: preview.questions.map((q) => /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(Question, { question: q, answer: answers[q.id], onAnswer, onOpenItem, disabled: busy }, q.id)) }) : null,
16845
+ auto || unchecked ? /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)("div", { className: "flex flex-wrap gap-2 px-1", children: [
16846
+ auto ? /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(Badge2, { tone: "neutral", children: `${auto.count ?? ""} decided automatically`.trim() }) : null,
16847
+ unchecked ? /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(Badge2, { tone: "neutral", children: "Links inside text not checked" }) : null
16787
16848
  ] }) : null,
16788
- /* @__PURE__ */ (0, import_jsx_runtime116.jsxs)("div", { "data-review-changes-actions": "", className: "flex flex-wrap items-center justify-end gap-2", children: [
16789
- suggestible.length ? /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(Button2, { variant: "quiet", disabled: busy, onClick: () => suggestible.forEach((q) => onAnswer(q.id, q.suggested)), children: "Accept suggestions" }) : null,
16790
- /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(Button2, { variant: "outline", disabled: busy, onClick: onCancel, children: "Cancel" }),
16791
- /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(Button2, { variant: preview.verb === "delete" ? "danger" : "primary", disabled: busy || !ready, onClick: onCommit, children: commitLabel ?? words.commit })
16849
+ /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)("div", { "data-review-changes-actions": "", className: "flex flex-wrap items-center justify-end gap-2", children: [
16850
+ suggestible.length ? /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(Button2, { variant: "quiet", disabled: busy, onClick: () => suggestible.forEach((q) => onAnswer(q.id, q.suggested)), children: "Accept suggestions" }) : null,
16851
+ /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(Button2, { variant: "outline", disabled: busy, onClick: onCancel, children: "Cancel" }),
16852
+ /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(Button2, { variant: preview.verb === "delete" ? "danger" : "primary", disabled: busy || !ready, onClick: onCommit, children: commitLabel ?? words.commit })
16792
16853
  ] })
16793
16854
  ] });
16794
16855
  }
@@ -16956,7 +17017,7 @@ function insertLines(boxes, id, line, col, cols) {
16956
17017
  }
16957
17018
 
16958
17019
  // src/grid-canvas/grid-canvas.tsx
16959
- var import_jsx_runtime117 = require("react/jsx-runtime");
17020
+ var import_jsx_runtime118 = require("react/jsx-runtime");
16960
17021
  var GRID_CANVAS_COLUMNS = { lg: 12, sm: 4 };
16961
17022
  var GRID_CANVAS_PHONE_MAX_PX = 640;
16962
17023
  var GRID_CANVAS_ROW_PX = 24;
@@ -17131,7 +17192,7 @@ function GridCanvas({
17131
17192
  };
17132
17193
  const rows = { lg: gridRows(grids.lg), sm: gridRows(grids.sm) };
17133
17194
  const active = preview ? preview.boxes.find((b) => b.id === preview.id) : void 0;
17134
- return /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)(
17195
+ return /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)(
17135
17196
  "div",
17136
17197
  {
17137
17198
  ref: rootRef,
@@ -17151,8 +17212,8 @@ function GridCanvas({
17151
17212
  "--grid-rows-sm": preview?.breakpoint === "sm" ? rows.sm + 1 : rows.sm
17152
17213
  },
17153
17214
  children: [
17154
- /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)("div", { className: "matrx-grid-canvas-field", children: [
17155
- active && preview ? /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("div", { className: "matrx-grid-canvas-placeholder", "aria-hidden": true, style: placementVars(active, active) }) : null,
17215
+ /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)("div", { className: "matrx-grid-canvas-field", children: [
17216
+ active && preview ? /* @__PURE__ */ (0, import_jsx_runtime118.jsx)("div", { className: "matrx-grid-canvas-placeholder", "aria-hidden": true, style: placementVars(active, active) }) : null,
17156
17217
  items.map((item, n) => {
17157
17218
  const lg = grids.lg[n];
17158
17219
  const sm = grids.sm[n];
@@ -17161,7 +17222,7 @@ function GridCanvas({
17161
17222
  const drawLg = moving && preview.breakpoint === "lg" ? startBox : lg;
17162
17223
  const drawSm = moving && preview.breakpoint === "sm" ? startBox : sm;
17163
17224
  const label = itemLabel?.(item.id);
17164
- return /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)(
17225
+ return /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)(
17165
17226
  "div",
17166
17227
  {
17167
17228
  ref: (el) => {
@@ -17177,8 +17238,8 @@ function GridCanvas({
17177
17238
  onPointerDown: editable ? (e) => onItemPointerDown(e, item.id) : void 0,
17178
17239
  onKeyDown: editable ? (e) => onItemKeyDown(e, item.id) : void 0,
17179
17240
  children: [
17180
- /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("div", { className: "matrx-grid-canvas-content", children: renderItem(item.id, { breakpoint, editing: editable }) }),
17181
- editable ? /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(
17241
+ /* @__PURE__ */ (0, import_jsx_runtime118.jsx)("div", { className: "matrx-grid-canvas-content", children: renderItem(item.id, { breakpoint, editing: editable }) }),
17242
+ editable ? /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(
17182
17243
  "span",
17183
17244
  {
17184
17245
  className: "matrx-grid-canvas-resize",
@@ -17193,7 +17254,7 @@ function GridCanvas({
17193
17254
  );
17194
17255
  })
17195
17256
  ] }),
17196
- /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("span", { className: "matrx-grid-canvas-live", "aria-live": "polite", children: announcement })
17257
+ /* @__PURE__ */ (0, import_jsx_runtime118.jsx)("span", { className: "matrx-grid-canvas-live", "aria-live": "polite", children: announcement })
17197
17258
  ]
17198
17259
  }
17199
17260
  );