@reopt-ai/opt-ui 1.12.5 → 1.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/CHANGELOG.md +236 -0
  2. package/COMPONENT_CATALOG.md +670 -123
  3. package/README.md +9 -7
  4. package/dist/core/index.cjs +13 -13
  5. package/dist/core/index.d.cts +2 -2
  6. package/dist/core/index.d.ts +2 -2
  7. package/dist/core/index.js +2 -2
  8. package/dist/docs/02-components/01-core.md +260 -61
  9. package/dist/docs/02-components/02-visuals.md +1 -1
  10. package/dist/docs/02-components/03-shells.md +431 -63
  11. package/dist/docs/02-components/04-surfaces.md +1 -1
  12. package/dist/docs/02-components/index.md +4 -4
  13. package/dist/{field-sidebar-YaWHfLLW.d.ts → field-sidebar-CJ4HxP8D.d.cts} +824 -2
  14. package/dist/{field-sidebar-Ct8c9L4V.d.cts → field-sidebar-DnhpcT2A.d.ts} +824 -2
  15. package/dist/{field-sidebar-DwtrYSSt.cjs → field-sidebar-ePqFX6MN.cjs} +4339 -244
  16. package/dist/{field-sidebar-Ben7MQD4.js → field-sidebar-mSVCMAZp.js} +3976 -235
  17. package/dist/id-registry.cjs +80 -0
  18. package/dist/id-registry.js +80 -0
  19. package/dist/id-registry.json +170 -0
  20. package/dist/index.cjs +1096 -1476
  21. package/dist/index.d.cts +243 -92
  22. package/dist/index.d.ts +243 -92
  23. package/dist/index.js +1004 -1415
  24. package/dist/{key-pad-menu-BpQebDyw.cjs → key-pad-menu-BgtSL3xe.cjs} +60 -487
  25. package/dist/{key-pad-menu-CYYtS_Tl.js → key-pad-menu-CqFI6la9.js} +61 -422
  26. package/dist/{key-pad-menu-CwcY_Vps.d.cts → key-pad-menu-D6pYzaj-.d.cts} +14 -56
  27. package/dist/{key-pad-menu-WBJShCJn.d.ts → key-pad-menu-Yh7Fpb8m.d.ts} +14 -56
  28. package/dist/meta.cjs +1312 -12
  29. package/dist/meta.js +1312 -12
  30. package/dist/shells/index.cjs +20 -1
  31. package/dist/shells/index.d.cts +2 -2
  32. package/dist/shells/index.d.ts +2 -2
  33. package/dist/shells/index.js +2 -2
  34. package/dist/{text-truncate-CQyfUZvq.d.cts → text-truncate-Bbul-jMD.d.cts} +52 -30
  35. package/dist/{text-truncate-CQyfUZvq.d.ts → text-truncate-Bbul-jMD.d.ts} +52 -30
  36. package/dist/{text-truncate-Dlm7JwDf.js → text-truncate-Bd-0WkSP.js} +461 -97
  37. package/dist/{text-truncate-CqdiQuj8.cjs → text-truncate-BeYW6XZu.cjs} +523 -99
  38. package/dist/theme/server.cjs +2 -2
  39. package/dist/theme/server.d.cts +2 -2
  40. package/dist/theme/server.d.ts +2 -2
  41. package/dist/theme/server.js +2 -2
  42. package/package.json +6 -2
@@ -28,6 +28,7 @@ let react = require("react");
28
28
  react = __toESM(react, 1);
29
29
  let _reopt_ai_opt_ui_primitives = require("@reopt-ai/opt-ui-primitives");
30
30
  let lucide_react = require("lucide-react");
31
+ let react_resizable_panels = require("react-resizable-panels");
31
32
  //#region src/lib/cn.ts
32
33
  /** Handles cn. */
33
34
  function cn(...inputs) {
@@ -242,7 +243,7 @@ function useControlledState(defaultValue, controlledValue, onChange) {
242
243
  }
243
244
  //#endregion
244
245
  //#region src/core/skeleton.tsx
245
- const _excluded$17 = [
246
+ const _excluded$21 = [
246
247
  "variant",
247
248
  "width",
248
249
  "height",
@@ -251,9 +252,9 @@ const _excluded$17 = [
251
252
  "className",
252
253
  "style"
253
254
  ];
254
- const _excluded2$9 = ["lines", "className"];
255
- const _excluded3$8 = ["size", "className"];
256
- const _excluded4$6 = ["className"];
255
+ const _excluded2$11 = ["lines", "className"];
256
+ const _excluded3$10 = ["size", "className"];
257
+ const _excluded4$7 = ["className"];
257
258
  const variantStyles$4 = {
258
259
  text: "rounded h-4",
259
260
  circular: "rounded-full",
@@ -261,7 +262,7 @@ const variantStyles$4 = {
261
262
  };
262
263
  /** Renders the skeleton component. */
263
264
  function Skeleton(_ref) {
264
- let { variant = "text", width, height, lines = 1, animated = true, className, style } = _ref, props = _objectWithoutProperties(_ref, _excluded$17);
265
+ let { variant = "text", width, height, lines = 1, animated = true, className, style } = _ref, props = _objectWithoutProperties(_ref, _excluded$21);
265
266
  const baseClass = cn("bg-bg-subtle", animated && "animate-pulse", variantStyles$4[variant], className);
266
267
  const computedStyle = _objectSpread2({
267
268
  width: typeof width === "number" ? `${width}px` : width,
@@ -297,7 +298,7 @@ function Skeleton(_ref) {
297
298
  }
298
299
  /** Renders the skeleton text component. */
299
300
  function SkeletonText(_ref2) {
300
- let { lines = 3, className } = _ref2, props = _objectWithoutProperties(_ref2, _excluded2$9);
301
+ let { lines = 3, className } = _ref2, props = _objectWithoutProperties(_ref2, _excluded2$11);
301
302
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Skeleton, _objectSpread2(_objectSpread2({
302
303
  variant: "text",
303
304
  lines,
@@ -309,7 +310,7 @@ function SkeletonText(_ref2) {
309
310
  }
310
311
  /** Renders the skeleton avatar component. */
311
312
  function SkeletonAvatar(_ref3) {
312
- let { size = 40, className } = _ref3, props = _objectWithoutProperties(_ref3, _excluded3$8);
313
+ let { size = 40, className } = _ref3, props = _objectWithoutProperties(_ref3, _excluded3$10);
313
314
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Skeleton, _objectSpread2(_objectSpread2({
314
315
  variant: "circular",
315
316
  width: size,
@@ -322,7 +323,7 @@ function SkeletonAvatar(_ref3) {
322
323
  }
323
324
  /** Renders the skeleton card component. */
324
325
  function SkeletonCard(_ref4) {
325
- let { className } = _ref4, props = _objectWithoutProperties(_ref4, _excluded4$6);
326
+ let { className } = _ref4, props = _objectWithoutProperties(_ref4, _excluded4$7);
326
327
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", _objectSpread2(_objectSpread2({ className: cn("gap-group flex flex-col", className) }, props), {}, {
327
328
  "data-opt-id": "34V5D",
328
329
  "data-opt-slug": "skeleton.SkeletonCard",
@@ -516,7 +517,7 @@ const koBreadcrumbLabels = {
516
517
  navAriaLabel: "{label}(으)로 이동" };
517
518
  //#endregion
518
519
  //#region src/core/button.tsx
519
- const _excluded$16 = [
520
+ const _excluded$20 = [
520
521
  "variant",
521
522
  "size",
522
523
  "loading",
@@ -533,18 +534,18 @@ const variantStyles$3 = {
533
534
  ghost: "text-text-secondary hover:bg-bg-subtle active:bg-bg-muted focus-visible:ring-offset-1",
534
535
  danger: "bg-danger text-danger-fg hover:bg-danger active:bg-danger focus-visible:ring-offset-2"
535
536
  };
536
- const sizeStyles$5 = {
537
+ const sizeStyles$6 = {
537
538
  sm: "h-[var(--opt-control-sm)] px-[var(--opt-control-padding-sm)] text-xs gap-[var(--opt-space-1-5)]",
538
539
  md: "h-[var(--opt-control-md)] px-[var(--opt-control-padding-md)] text-sm gap-[var(--opt-space-2)]",
539
540
  lg: "h-[var(--opt-control-lg)] px-[var(--opt-control-padding-lg)] text-base gap-[var(--opt-space-2)]"
540
541
  };
541
542
  /** Renders the button component. */
542
543
  function Button(_ref) {
543
- let { variant = "primary", size = "md", loading = false, leftIcon, rightIcon, className, disabled, children, "aria-busy": ariaBusy } = _ref, props = _objectWithoutProperties(_ref, _excluded$16);
544
+ let { variant = "primary", size = "md", loading = false, leftIcon, rightIcon, className, disabled, children, "aria-busy": ariaBusy } = _ref, props = _objectWithoutProperties(_ref, _excluded$20);
544
545
  const isDisabled = disabled || loading;
545
546
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", _objectSpread2(_objectSpread2({
546
547
  type: "button",
547
- className: cn("inline-flex cursor-pointer items-center justify-center rounded-lg font-medium transition-colors", OPT_FOCUS_VISIBLE, variantStyles$3[variant], sizeStyles$5[size], isDisabled && "pointer-events-none cursor-not-allowed opacity-50", className),
548
+ className: cn("inline-flex cursor-pointer items-center justify-center rounded-lg font-medium transition-colors", OPT_FOCUS_VISIBLE, variantStyles$3[variant], sizeStyles$6[size], isDisabled && "pointer-events-none cursor-not-allowed opacity-50", className),
548
549
  disabled: isDisabled
549
550
  }, props), {}, {
550
551
  "aria-busy": loading ? true : ariaBusy,
@@ -646,8 +647,111 @@ function EmptyState({ icon, title, description, body, footer, actions, className
646
647
  });
647
648
  }
648
649
  //#endregion
650
+ //#region src/core/description-list.tsx
651
+ const defaultLabels = {
652
+ copy: (term) => `Copy ${term}`,
653
+ copied: "Copied",
654
+ empty: "—"
655
+ };
656
+ const columnsClass = {
657
+ 1: "grid-cols-1",
658
+ 2: "grid-cols-1 sm:grid-cols-2",
659
+ 3: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-3",
660
+ 4: "grid-cols-2 sm:grid-cols-3 lg:grid-cols-4"
661
+ };
662
+ function CopyButton({ value, label, copiedLabel }) {
663
+ const [copied, setCopied] = (0, react.useState)(false);
664
+ const handleCopy = (0, react.useCallback)(() => {
665
+ var _navigator$clipboard;
666
+ (_navigator$clipboard = navigator.clipboard) === null || _navigator$clipboard === void 0 || _navigator$clipboard.writeText(value).then(() => {
667
+ setCopied(true);
668
+ window.setTimeout(() => setCopied(false), 1500);
669
+ });
670
+ }, [value]);
671
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
672
+ type: "button",
673
+ onClick: handleCopy,
674
+ "aria-label": copied ? copiedLabel : label,
675
+ className: cn(OPT_FOCUS_VISIBLE, OPT_TEXT_TERTIARY, "hover:text-text-primary shrink-0 rounded p-0.5 transition-colors"),
676
+ children: copied ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Check, {
677
+ className: "size-3.5",
678
+ "aria-hidden": "true"
679
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Copy, {
680
+ className: "size-3.5",
681
+ "aria-hidden": "true"
682
+ })
683
+ });
684
+ }
685
+ /**
686
+ * DescriptionList — the labelled facts about one thing.
687
+ *
688
+ * Detail views collect a dozen short fields that each mean nothing without
689
+ * their label, and hand-rolling them as a `<div>` grid loses the term/value
690
+ * association that assistive tech needs. This keeps the pairs in a real `<dl>`
691
+ * while still laying them out as boxed cells.
692
+ *
693
+ * @example
694
+ * ```tsx
695
+ * <DescriptionList
696
+ * layout="grid"
697
+ * columns={2}
698
+ * items={[
699
+ * { id: "id", term: "Session ID", description: session.id, copyValue: session.id },
700
+ * { id: "entry", term: "Entry path", description: session.entryPath },
701
+ * ]}
702
+ * />
703
+ * ```
704
+ */
705
+ function DescriptionList({ items, layout = "grid", columns = 2, compressed = false, labels: customLabels, className }) {
706
+ const labels = _objectSpread2(_objectSpread2({}, defaultLabels), customLabels);
707
+ if (layout === "inline") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("dl", {
708
+ className: cn("flex flex-wrap items-baseline gap-x-6 gap-y-2", className),
709
+ "data-opt-id": "1NPD2",
710
+ "data-opt-slug": "description-list.DescriptionList",
711
+ children: items.map((item) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
712
+ className: "flex items-baseline gap-2",
713
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("dt", {
714
+ className: cn(OPT_TEXT_TERTIARY, "text-xs"),
715
+ title: item.hint,
716
+ children: item.term
717
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("dd", {
718
+ className: cn(OPT_TEXT_PRIMARY, "text-sm font-medium"),
719
+ children: item.description || labels.empty
720
+ })]
721
+ }, item.id))
722
+ });
723
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("dl", {
724
+ className: cn("grid", compressed ? "gap-element" : "gap-group", columnsClass[columns], className),
725
+ "data-opt-id": "1NPD2",
726
+ "data-opt-slug": "description-list.DescriptionList",
727
+ children: items.map((item) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
728
+ className: cn("flex min-w-0 flex-col gap-1", layout === "grid" && [
729
+ "border border-border",
730
+ "bg-bg-subtle rounded-lg",
731
+ compressed ? "px-2.5 py-1.5" : "px-3 py-2"
732
+ ]),
733
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("dt", {
734
+ className: cn(OPT_TEXT_TERTIARY, "text-xs"),
735
+ title: item.hint,
736
+ children: item.term
737
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("dd", {
738
+ className: cn(OPT_TEXT_PRIMARY, "flex min-w-0 items-center gap-1.5 text-sm"),
739
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
740
+ className: cn("min-w-0", item.wrap ? "break-all" : "truncate", !item.description && "text-text-secondary"),
741
+ children: item.description || labels.empty
742
+ }), item.copyValue && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CopyButton, {
743
+ value: item.copyValue,
744
+ label: labels.copy(typeof item.term === "string" ? item.term : item.id),
745
+ copiedLabel: labels.copied
746
+ })]
747
+ })]
748
+ }, item.id))
749
+ });
750
+ }
751
+ DescriptionList.displayName = "DescriptionList";
752
+ //#endregion
649
753
  //#region src/core/badge.tsx
650
- const _excluded$15 = [
754
+ const _excluded$19 = [
651
755
  "variant",
652
756
  "size",
653
757
  "dot",
@@ -677,19 +781,19 @@ const progressStroke = {
677
781
  error: "stroke-danger",
678
782
  info: "stroke-info"
679
783
  };
680
- const sizeStyles$4 = {
784
+ const sizeStyles$5 = {
681
785
  sm: "px-1.5 py-0.5 text-[10px]",
682
786
  md: "px-2 py-0.5 text-[11px]"
683
787
  };
684
788
  /** Renders the badge component. */
685
789
  function Badge(_ref) {
686
- let { variant = "default", size = "md", dot = false, progress, progressSize = 16, className, children } = _ref, props = _objectWithoutProperties(_ref, _excluded$15);
790
+ let { variant = "default", size = "md", dot = false, progress, progressSize = 16, className, children } = _ref, props = _objectWithoutProperties(_ref, _excluded$19);
687
791
  const hasProgress = progress != null;
688
792
  const clampedProgress = hasProgress ? Math.min(100, Math.max(0, progress)) : 0;
689
793
  const radius = (progressSize - 3) / 2;
690
794
  const circumference = 2 * Math.PI * radius;
691
795
  const offset = circumference - clampedProgress / 100 * circumference;
692
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", _objectSpread2(_objectSpread2({ className: cn(OPT_BADGE, variantStyles$2[variant], sizeStyles$4[size], className) }, props), {}, {
796
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", _objectSpread2(_objectSpread2({ className: cn(OPT_BADGE, variantStyles$2[variant], sizeStyles$5[size], className) }, props), {}, {
693
797
  "data-opt-id": "9GBGZ",
694
798
  "data-opt-slug": "badge.Badge",
695
799
  children: [
@@ -729,24 +833,24 @@ function Badge(_ref) {
729
833
  }
730
834
  //#endregion
731
835
  //#region src/core/spinner.tsx
732
- const _excluded$14 = [
836
+ const _excluded$18 = [
733
837
  "size",
734
838
  "className",
735
839
  "role",
736
840
  "aria-hidden",
737
841
  "aria-label"
738
842
  ];
739
- const sizeStyles$3 = {
843
+ const sizeStyles$4 = {
740
844
  sm: "h-4 w-4",
741
845
  md: "h-6 w-6",
742
846
  lg: "h-8 w-8"
743
847
  };
744
848
  /** Renders the spinner component. */
745
849
  function Spinner(_ref) {
746
- let { size = "md", className, role, "aria-hidden": ariaHidden, "aria-label": ariaLabel } = _ref, props = _objectWithoutProperties(_ref, _excluded$14);
850
+ let { size = "md", className, role, "aria-hidden": ariaHidden, "aria-label": ariaLabel } = _ref, props = _objectWithoutProperties(_ref, _excluded$18);
747
851
  const isDecorative = ariaHidden === true || ariaHidden === "true";
748
852
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", _objectSpread2(_objectSpread2({
749
- className: cn("animate-spin text-current", sizeStyles$3[size], className),
853
+ className: cn("animate-spin text-current", sizeStyles$4[size], className),
750
854
  viewBox: "0 0 24 24",
751
855
  fill: "none",
752
856
  role: isDecorative ? void 0 : role !== null && role !== void 0 ? role : "status",
@@ -771,7 +875,7 @@ function Spinner(_ref) {
771
875
  }
772
876
  //#endregion
773
877
  //#region src/core/alert.tsx
774
- const _excluded$13 = [
878
+ const _excluded$17 = [
775
879
  "variant",
776
880
  "title",
777
881
  "icon",
@@ -840,7 +944,7 @@ const defaultIcons = {
840
944
  };
841
945
  /** Renders the alert component. */
842
946
  function Alert(_ref) {
843
- let { variant = "info", title, icon, dismissible = false, onDismiss, className, children } = _ref, props = _objectWithoutProperties(_ref, _excluded$13);
947
+ let { variant = "info", title, icon, dismissible = false, onDismiss, className, children } = _ref, props = _objectWithoutProperties(_ref, _excluded$17);
844
948
  const displayIcon = icon !== null && icon !== void 0 ? icon : defaultIcons[variant];
845
949
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", _objectSpread2(_objectSpread2({
846
950
  role: "alert",
@@ -887,10 +991,10 @@ function Alert(_ref) {
887
991
  }
888
992
  //#endregion
889
993
  //#region src/core/toolbar.tsx
890
- const _excluded$12 = ["className"];
891
- const _excluded2$8 = ["className"];
892
- const _excluded3$7 = ["className"];
893
- const _excluded4$5 = ["className"];
994
+ const _excluded$16 = ["className"];
995
+ const _excluded2$10 = ["className"];
996
+ const _excluded3$9 = ["className"];
997
+ const _excluded4$6 = ["className"];
894
998
  const _excluded5$3 = ["className"];
895
999
  const toolbarClass = `${OPT_SURFACE} ${OPT_BORDER} inline-flex w-fit items-center gap-0.5 px-1.5 py-1`;
896
1000
  const buttonClass = `cursor-pointer rounded-md px-2.5 py-1.5 text-text-primary transition-colors data-[disabled]:cursor-not-allowed ${OPT_ACTIVE_ITEM} ${OPT_FOCUS}`;
@@ -905,7 +1009,7 @@ function ToolbarRoot(props) {
905
1009
  }
906
1010
  /** Renders the toolbar container component. */
907
1011
  function ToolbarContainer(_ref) {
908
- let { className } = _ref, props = _objectWithoutProperties(_ref, _excluded$12);
1012
+ let { className } = _ref, props = _objectWithoutProperties(_ref, _excluded$16);
909
1013
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.ToolbarContainer, _objectSpread2(_objectSpread2({ className: cn(toolbarClass, className) }, props), {}, {
910
1014
  "data-opt-id": "2AVXB",
911
1015
  "data-opt-slug": "toolbar.ToolbarContainer"
@@ -913,7 +1017,7 @@ function ToolbarContainer(_ref) {
913
1017
  }
914
1018
  /** Renders the toolbar button component. */
915
1019
  function ToolbarButton(_ref2) {
916
- let { className } = _ref2, props = _objectWithoutProperties(_ref2, _excluded2$8);
1020
+ let { className } = _ref2, props = _objectWithoutProperties(_ref2, _excluded2$10);
917
1021
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.ToolbarButton, _objectSpread2(_objectSpread2({ className: cn(buttonClass, className) }, props), {}, {
918
1022
  "data-opt-id": "C212C",
919
1023
  "data-opt-slug": "toolbar.ToolbarButton"
@@ -921,7 +1025,7 @@ function ToolbarButton(_ref2) {
921
1025
  }
922
1026
  /** Renders the toolbar separator component. */
923
1027
  function ToolbarSeparator(_ref3) {
924
- let { className } = _ref3, props = _objectWithoutProperties(_ref3, _excluded3$7);
1028
+ let { className } = _ref3, props = _objectWithoutProperties(_ref3, _excluded3$9);
925
1029
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.ToolbarSeparator, _objectSpread2(_objectSpread2({ className: cn(separatorClass, className) }, props), {}, {
926
1030
  "data-opt-id": "9J72S",
927
1031
  "data-opt-slug": "toolbar.ToolbarSeparator"
@@ -929,14 +1033,14 @@ function ToolbarSeparator(_ref3) {
929
1033
  }
930
1034
  /** Renders the tooltip provider component. */
931
1035
  function TooltipProvider(props) {
932
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.TooltipProvider, _objectSpread2(_objectSpread2({}, props), {}, {
1036
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.TooltipRoot, _objectSpread2(_objectSpread2({}, props), {}, {
933
1037
  "data-opt-id": "6NKHT",
934
1038
  "data-opt-slug": "toolbar.TooltipProvider"
935
1039
  }));
936
1040
  }
937
1041
  /** Renders the tooltip anchor component. */
938
1042
  function TooltipAnchor(_ref4) {
939
- let { className } = _ref4, props = _objectWithoutProperties(_ref4, _excluded4$5);
1043
+ let { className } = _ref4, props = _objectWithoutProperties(_ref4, _excluded4$6);
940
1044
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.TooltipAnchor, _objectSpread2(_objectSpread2({ className }, props), {}, {
941
1045
  "data-opt-id": "SAW1B",
942
1046
  "data-opt-slug": "toolbar.TooltipAnchor"
@@ -961,7 +1065,7 @@ function useInputId(id, label, prefix) {
961
1065
  }
962
1066
  //#endregion
963
1067
  //#region src/core/input.tsx
964
- const _excluded$11 = [
1068
+ const _excluded$15 = [
965
1069
  "label",
966
1070
  "error",
967
1071
  "hint",
@@ -976,7 +1080,7 @@ const _excluded$11 = [
976
1080
  const inputSizeStyles = OPT_INPUT_SIZE;
977
1081
  const Input = (0, react.forwardRef)((_ref, ref) => {
978
1082
  var _useInputId;
979
- let { label, error, hint, leftIcon, rightIcon, fullWidth = false, size = "md", required, className, id } = _ref, props = _objectWithoutProperties(_ref, _excluded$11);
1083
+ let { label, error, hint, leftIcon, rightIcon, fullWidth = false, size = "md", required, className, id } = _ref, props = _objectWithoutProperties(_ref, _excluded$15);
980
1084
  const fallbackId = (0, react.useId)().replace(/:/g, "");
981
1085
  const inputId = (_useInputId = useInputId(id, label, "input")) !== null && _useInputId !== void 0 ? _useInputId : `input-${fallbackId}`;
982
1086
  const hasError = Boolean(error);
@@ -1022,6 +1126,106 @@ const Input = (0, react.forwardRef)((_ref, ref) => {
1022
1126
  });
1023
1127
  Input.displayName = "Input";
1024
1128
  //#endregion
1129
+ //#region src/core/switch.tsx
1130
+ const _excluded$14 = [
1131
+ "label",
1132
+ "required",
1133
+ "error",
1134
+ "hint",
1135
+ "description",
1136
+ "checked",
1137
+ "defaultChecked",
1138
+ "onChange",
1139
+ "size",
1140
+ "disabled",
1141
+ "className",
1142
+ "id",
1143
+ "onClick",
1144
+ "aria-label",
1145
+ "aria-labelledby"
1146
+ ];
1147
+ const sizeStyles$3 = {
1148
+ sm: {
1149
+ track: "h-5 w-9",
1150
+ thumb: "h-4 w-4",
1151
+ translate: "translate-x-4"
1152
+ },
1153
+ md: {
1154
+ track: "h-6 w-11",
1155
+ thumb: "h-5 w-5",
1156
+ translate: "translate-x-5"
1157
+ },
1158
+ lg: {
1159
+ track: "h-7 w-14",
1160
+ thumb: "h-6 w-6",
1161
+ translate: "translate-x-7"
1162
+ }
1163
+ };
1164
+ const Switch = (0, react.forwardRef)((_ref, ref) => {
1165
+ var _useInputId;
1166
+ let { label, required, error, hint, description, checked: controlledChecked, defaultChecked = false, onChange, size = "md", disabled, className, id, onClick, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy } = _ref, props = _objectWithoutProperties(_ref, _excluded$14);
1167
+ const fallbackId = (0, react.useId)();
1168
+ const switchId = (_useInputId = useInputId(id, label, "switch")) !== null && _useInputId !== void 0 ? _useInputId : `switch-${fallbackId}`;
1169
+ const hintText = hint !== null && hint !== void 0 ? hint : description;
1170
+ const hasError = Boolean(error);
1171
+ const styles = sizeStyles$3[size];
1172
+ const labelId = label ? `${switchId}-label` : void 0;
1173
+ const switchLabelledBy = ariaLabelledBy !== null && ariaLabelledBy !== void 0 ? ariaLabelledBy : ariaLabel ? void 0 : labelId;
1174
+ const switchAriaLabel = ariaLabel !== null && ariaLabel !== void 0 ? ariaLabel : switchLabelledBy ? void 0 : "Switch";
1175
+ const isControlled = controlledChecked !== void 0;
1176
+ const [internalChecked, setInternalChecked] = (0, react.useState)(defaultChecked);
1177
+ const checked = isControlled ? controlledChecked : internalChecked;
1178
+ const handleClick = (0, react.useCallback)((e) => {
1179
+ const next = !checked;
1180
+ if (!isControlled) setInternalChecked(next);
1181
+ onChange === null || onChange === void 0 || onChange(next);
1182
+ onClick === null || onClick === void 0 || onClick(e);
1183
+ }, [
1184
+ checked,
1185
+ isControlled,
1186
+ onChange,
1187
+ onClick
1188
+ ]);
1189
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1190
+ className: cn("flex flex-col gap-1.5", className),
1191
+ "data-opt-id": "51Z9R",
1192
+ "data-opt-slug": "switch.Switch",
1193
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1194
+ className: "flex items-start gap-3",
1195
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", _objectSpread2(_objectSpread2({
1196
+ ref,
1197
+ type: "button",
1198
+ role: "switch",
1199
+ id: switchId,
1200
+ "aria-checked": checked,
1201
+ "aria-label": switchAriaLabel,
1202
+ "aria-labelledby": switchLabelledBy,
1203
+ disabled,
1204
+ className: cn("group relative inline-flex shrink-0 cursor-pointer rounded-full p-0.5 transition-colors", styles.track, "bg-bg-muted", "aria-[checked=true]:bg-accent", "disabled:cursor-not-allowed disabled:opacity-50", OPT_FOCUS_VISIBLE),
1205
+ "aria-invalid": hasError,
1206
+ "aria-required": required,
1207
+ "aria-describedby": getDescribedBy(switchId, error, hintText),
1208
+ onClick: handleClick
1209
+ }, props), {}, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: cn("pointer-events-none inline-block transform rounded-full bg-white shadow-sm ring-0 transition-transform", styles.thumb, "translate-x-0", size === "sm" && "group-aria-[checked=true]:translate-x-4", size === "md" && "group-aria-[checked=true]:translate-x-5", size === "lg" && "group-aria-[checked=true]:translate-x-7") }) })), (label || hintText) && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1210
+ className: "flex flex-col",
1211
+ children: [label && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
1212
+ id: labelId,
1213
+ className: cn("text-text-primary text-sm font-medium", disabled && "opacity-50"),
1214
+ children: [label, required && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RequiredMark, {})]
1215
+ }), hintText && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
1216
+ id: `${switchId}-hint`,
1217
+ className: cn("text-text-tertiary text-sm", disabled && "opacity-50"),
1218
+ children: hintText
1219
+ })]
1220
+ })]
1221
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FieldMessages, {
1222
+ id: switchId,
1223
+ error
1224
+ })]
1225
+ });
1226
+ });
1227
+ Switch.displayName = "Switch";
1228
+ //#endregion
1025
1229
  //#region src/core/star-rating.tsx
1026
1230
  function interpolate(template, values) {
1027
1231
  return template.replace(/\{(\w+)\}/g, (_, key) => key in values ? String(values[key]) : `{${key}}`);
@@ -1126,8 +1330,62 @@ function StarRating({ value = 0, onChange, max = 5, readOnly = false, size = "md
1126
1330
  });
1127
1331
  }
1128
1332
  //#endregion
1333
+ //#region src/core/textarea.tsx
1334
+ const _excluded$13 = [
1335
+ "label",
1336
+ "error",
1337
+ "hint",
1338
+ "fullWidth",
1339
+ "required",
1340
+ "resize",
1341
+ "size",
1342
+ "className",
1343
+ "id",
1344
+ "rows"
1345
+ ];
1346
+ const textareaSizeStyles = OPT_TEXTAREA_SIZE;
1347
+ const resizeStyles$1 = {
1348
+ none: "resize-none",
1349
+ vertical: "resize-y",
1350
+ horizontal: "resize-x",
1351
+ both: "resize"
1352
+ };
1353
+ const Textarea = (0, react.forwardRef)((_ref, ref) => {
1354
+ var _useInputId;
1355
+ let { label, error, hint, fullWidth = false, required, resize = "vertical", size = "md", className, id, rows = 4 } = _ref, props = _objectWithoutProperties(_ref, _excluded$13);
1356
+ const fallbackId = (0, react.useId)().replace(/:/g, "");
1357
+ const textareaId = (_useInputId = useInputId(id, label, "textarea")) !== null && _useInputId !== void 0 ? _useInputId : `textarea-${fallbackId}`;
1358
+ const hasError = Boolean(error);
1359
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1360
+ className: cn("flex flex-col gap-1.5", fullWidth && "w-full"),
1361
+ "data-opt-id": "6T58H",
1362
+ "data-opt-slug": "textarea.Textarea",
1363
+ children: [
1364
+ label && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
1365
+ htmlFor: textareaId,
1366
+ className: "text-text-primary text-sm font-medium",
1367
+ children: [label, required && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RequiredMark, {})]
1368
+ }),
1369
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("textarea", _objectSpread2({
1370
+ ref,
1371
+ id: textareaId,
1372
+ rows,
1373
+ className: cn("border-border bg-surface text-text-primary placeholder:text-text-tertiary w-full rounded-lg border px-4 py-3 text-sm outline-transparent", OPT_FOCUS_VISIBLE, textareaSizeStyles[size], resizeStyles$1[resize], hasError && "border-danger focus-visible:outline-danger", !fullWidth && "w-auto", className),
1374
+ "aria-invalid": hasError,
1375
+ "aria-describedby": getDescribedBy(textareaId, error, hint)
1376
+ }, props)),
1377
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FieldMessages, {
1378
+ id: textareaId,
1379
+ error,
1380
+ hint
1381
+ })
1382
+ ]
1383
+ });
1384
+ });
1385
+ Textarea.displayName = "Textarea";
1386
+ //#endregion
1129
1387
  //#region src/core/meter.tsx
1130
- const _excluded$10 = [
1388
+ const _excluded$12 = [
1131
1389
  "value",
1132
1390
  "min",
1133
1391
  "max",
@@ -1155,7 +1413,7 @@ const variantStyles = {
1155
1413
  * opt-ui-primitives Meter primitive, which owns the role/aria/valuetext.
1156
1414
  */
1157
1415
  function Meter(_ref) {
1158
- let { value, min = 0, max = 100, size = "md", variant = "default", showValue = false, label, getValueLabel, className } = _ref, props = _objectWithoutProperties(_ref, _excluded$10);
1416
+ let { value, min = 0, max = 100, size = "md", variant = "default", showValue = false, label, getValueLabel, className } = _ref, props = _objectWithoutProperties(_ref, _excluded$12);
1159
1417
  const clamped = Math.min(Math.max(value, min), max);
1160
1418
  const percentage = max === min ? 0 : (clamped - min) / (max - min) * 100;
1161
1419
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", _objectSpread2(_objectSpread2({ className: cn("w-full", className) }, props), {}, {
@@ -1203,8 +1461,8 @@ function CompositeZone({ children, label, focusLoop = true, focusWrap = true, cl
1203
1461
  }
1204
1462
  //#endregion
1205
1463
  //#region src/core/disclosure.tsx
1206
- const _excluded$9 = ["className"];
1207
- const _excluded2$7 = ["className"];
1464
+ const _excluded$11 = ["className"];
1465
+ const _excluded2$9 = ["className"];
1208
1466
  const triggerClass$1 = `flex w-full cursor-pointer items-center justify-between px-4 py-4 text-left text-sm font-medium text-text-primary transition-colors hover:bg-bg-subtle ${OPT_FOCUS} data-[active-item]:bg-bg-subtle data-[disabled]:cursor-not-allowed`;
1209
1467
  const contentClass = `overflow-hidden ${OPT_ANIMATE_ENTER_EXIT}`;
1210
1468
  /** Renders the disclosure root component. */
@@ -1216,7 +1474,7 @@ function DisclosureRoot(props) {
1216
1474
  }
1217
1475
  /** Renders the disclosure trigger component. */
1218
1476
  function DisclosureTrigger(_ref) {
1219
- let { className } = _ref, props = _objectWithoutProperties(_ref, _excluded$9);
1477
+ let { className } = _ref, props = _objectWithoutProperties(_ref, _excluded$11);
1220
1478
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.DisclosureTrigger, _objectSpread2(_objectSpread2({ className: cn(triggerClass$1, className) }, props), {}, {
1221
1479
  "data-opt-id": "14EZW",
1222
1480
  "data-opt-slug": "disclosure.DisclosureTrigger"
@@ -1224,7 +1482,7 @@ function DisclosureTrigger(_ref) {
1224
1482
  }
1225
1483
  /** Renders the disclosure content component. */
1226
1484
  function DisclosureContent(_ref2) {
1227
- let { className } = _ref2, props = _objectWithoutProperties(_ref2, _excluded2$7);
1485
+ let { className } = _ref2, props = _objectWithoutProperties(_ref2, _excluded2$9);
1228
1486
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.DisclosureContent, _objectSpread2(_objectSpread2({ className: cn(contentClass, className) }, props), {}, {
1229
1487
  "data-opt-id": "78HYF",
1230
1488
  "data-opt-slug": "disclosure.DisclosureContent"
@@ -1232,16 +1490,16 @@ function DisclosureContent(_ref2) {
1232
1490
  }
1233
1491
  //#endregion
1234
1492
  //#region src/core/tabs.tsx
1235
- const _excluded$8 = ["variant"];
1236
- const _excluded2$6 = ["className", "actions"];
1237
- const _excluded3$6 = [
1493
+ const _excluded$10 = ["variant"];
1494
+ const _excluded2$8 = ["className", "actions"];
1495
+ const _excluded3$8 = [
1238
1496
  "className",
1239
1497
  "icon",
1240
1498
  "status",
1241
1499
  "statusLabel",
1242
1500
  "children"
1243
1501
  ];
1244
- const _excluded4$4 = ["className"];
1502
+ const _excluded4$5 = ["className"];
1245
1503
  const TabsVariantContext = react.createContext("underline");
1246
1504
  const tabClass = `cursor-pointer border-b-2 border-transparent px-4 py-2.5 text-sm text-text-tertiary transition-colors hover:text-text-primary data-[active-item]:text-text-primary data-[active-item]:border-text-primary data-[disabled]:cursor-not-allowed ${OPT_FOCUS}`;
1247
1505
  const tabListClass = "flex border-b border-border-subtle";
@@ -1254,7 +1512,7 @@ const actionsClass = "flex flex-none items-center gap-element";
1254
1512
  const tabPanelClass = `pt-4 ${OPT_FOCUS} data-[focus-visible]:rounded-lg`;
1255
1513
  /** Renders the tabs root component. */
1256
1514
  function TabsRoot(_ref) {
1257
- let { variant = "underline" } = _ref, props = _objectWithoutProperties(_ref, _excluded$8);
1515
+ let { variant = "underline" } = _ref, props = _objectWithoutProperties(_ref, _excluded$10);
1258
1516
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TabsVariantContext.Provider, {
1259
1517
  value: variant,
1260
1518
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.TabsRoot, _objectSpread2(_objectSpread2({}, props), {}, {
@@ -1265,7 +1523,7 @@ function TabsRoot(_ref) {
1265
1523
  }
1266
1524
  /** Renders the tab list component. */
1267
1525
  function TabList(_ref2) {
1268
- let { className, actions } = _ref2, props = _objectWithoutProperties(_ref2, _excluded2$6);
1526
+ let { className, actions } = _ref2, props = _objectWithoutProperties(_ref2, _excluded2$8);
1269
1527
  const variant = react.useContext(TabsVariantContext);
1270
1528
  const list = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.TabList, _objectSpread2(_objectSpread2({ className: cn(variant === "workspace" ? workspaceTabListClass : tabListClass, className) }, props), {}, {
1271
1529
  "data-opt-id": "68K7E",
@@ -1282,7 +1540,7 @@ function TabList(_ref2) {
1282
1540
  }
1283
1541
  /** Renders the tab component. */
1284
1542
  function Tab(_ref3) {
1285
- let { className, icon, status, statusLabel, children } = _ref3, props = _objectWithoutProperties(_ref3, _excluded3$6);
1543
+ let { className, icon, status, statusLabel, children } = _ref3, props = _objectWithoutProperties(_ref3, _excluded3$8);
1286
1544
  const variant = react.useContext(TabsVariantContext);
1287
1545
  const decorated = icon != null || status != null;
1288
1546
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.Tab, _objectSpread2(_objectSpread2({ className: cn(variant === "workspace" ? workspaceTabClass : tabClass, className) }, props), {}, {
@@ -1308,7 +1566,7 @@ function Tab(_ref3) {
1308
1566
  }
1309
1567
  /** Renders the tab panel component. */
1310
1568
  function TabPanel(_ref4) {
1311
- let { className } = _ref4, props = _objectWithoutProperties(_ref4, _excluded4$4);
1569
+ let { className } = _ref4, props = _objectWithoutProperties(_ref4, _excluded4$5);
1312
1570
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.TabPanel, _objectSpread2(_objectSpread2({ className: cn(tabPanelClass, className) }, props), {}, {
1313
1571
  "data-opt-id": "C0MBP",
1314
1572
  "data-opt-slug": "tabs.TabPanel"
@@ -1316,13 +1574,13 @@ function TabPanel(_ref4) {
1316
1574
  }
1317
1575
  //#endregion
1318
1576
  //#region src/core/select.tsx
1319
- const _excluded$7 = [
1577
+ const _excluded$9 = [
1320
1578
  "className",
1321
1579
  "minWidth",
1322
1580
  "style"
1323
1581
  ];
1324
- const _excluded2$5 = ["className"];
1325
- const _excluded3$5 = ["className"];
1582
+ const _excluded2$7 = ["className"];
1583
+ const _excluded3$7 = ["className"];
1326
1584
  const triggerClass = `${OPT_INPUT} cursor-pointer items-center justify-between data-[disabled]:cursor-not-allowed ${OPT_FOCUS}`;
1327
1585
  const popoverClass$1 = `${OPT_SURFACE_POPOVER} ${OPT_ANIMATE_ENTER_EXIT} z-[120]`;
1328
1586
  const itemClass$1 = `flex cursor-pointer items-center gap-2 data-[disabled]:cursor-not-allowed ${OPT_ITEM_BASE} ${OPT_ACTIVE_ITEM}`;
@@ -1342,7 +1600,7 @@ function SelectLabel(props) {
1342
1600
  }
1343
1601
  /** Renders the select trigger component. */
1344
1602
  function SelectTrigger(_ref) {
1345
- let { className, minWidth = 140, style } = _ref, props = _objectWithoutProperties(_ref, _excluded$7);
1603
+ let { className, minWidth = 140, style } = _ref, props = _objectWithoutProperties(_ref, _excluded$9);
1346
1604
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.SelectTrigger, _objectSpread2(_objectSpread2({
1347
1605
  className: cn(triggerClass, className),
1348
1606
  style: _objectSpread2({ minWidth: typeof minWidth === "number" ? `${minWidth}px` : minWidth }, style)
@@ -1353,7 +1611,7 @@ function SelectTrigger(_ref) {
1353
1611
  }
1354
1612
  /** Renders the select popover component. */
1355
1613
  function SelectPopover(_ref2) {
1356
- let { className } = _ref2, props = _objectWithoutProperties(_ref2, _excluded2$5);
1614
+ let { className } = _ref2, props = _objectWithoutProperties(_ref2, _excluded2$7);
1357
1615
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.SelectPopover, _objectSpread2(_objectSpread2({ className: cn(popoverClass$1, className) }, props), {}, {
1358
1616
  "data-opt-id": "P152F",
1359
1617
  "data-opt-slug": "select.SelectPopover"
@@ -1361,7 +1619,7 @@ function SelectPopover(_ref2) {
1361
1619
  }
1362
1620
  /** Renders the select item component. */
1363
1621
  function SelectItem(_ref3) {
1364
- let { className } = _ref3, props = _objectWithoutProperties(_ref3, _excluded3$5);
1622
+ let { className } = _ref3, props = _objectWithoutProperties(_ref3, _excluded3$7);
1365
1623
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.SelectItem, _objectSpread2(_objectSpread2({ className: cn(itemClass$1, className) }, props), {}, {
1366
1624
  "data-opt-id": "KKBAF",
1367
1625
  "data-opt-slug": "select.SelectItem"
@@ -1369,10 +1627,10 @@ function SelectItem(_ref3) {
1369
1627
  }
1370
1628
  //#endregion
1371
1629
  //#region src/core/dialog.tsx
1372
- const _excluded$6 = ["className"];
1373
- const _excluded2$4 = ["className", "size"];
1374
- const _excluded3$4 = ["className", "size"];
1375
- const _excluded4$3 = ["className"];
1630
+ const _excluded$8 = ["className"];
1631
+ const _excluded2$6 = ["className", "size"];
1632
+ const _excluded3$6 = ["className", "size"];
1633
+ const _excluded4$4 = ["className"];
1376
1634
  const _excluded5$2 = ["className"];
1377
1635
  const _excluded6$2 = ["className"];
1378
1636
  const sizeClasses = {
@@ -1393,7 +1651,7 @@ function DialogRoot(props) {
1393
1651
  }
1394
1652
  /** Renders the dialog disclosure component. */
1395
1653
  function DialogDisclosure(_ref) {
1396
- let { className } = _ref, props = _objectWithoutProperties(_ref, _excluded$6);
1654
+ let { className } = _ref, props = _objectWithoutProperties(_ref, _excluded$8);
1397
1655
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.DialogDisclosure, _objectSpread2(_objectSpread2({ className: cn("inline-flex cursor-pointer items-center justify-center rounded-lg font-medium transition-colors", OPT_BUTTON_PRIMARY, OPT_FOCUS_VISIBLE, className) }, props), {}, {
1398
1656
  "data-opt-id": "32QJK",
1399
1657
  "data-opt-slug": "dialog.DialogDisclosure"
@@ -1401,7 +1659,7 @@ function DialogDisclosure(_ref) {
1401
1659
  }
1402
1660
  /** Renders the dialog panel component. */
1403
1661
  function DialogPanel(_ref2) {
1404
- let { className, size = "md" } = _ref2, props = _objectWithoutProperties(_ref2, _excluded2$4);
1662
+ let { className, size = "md" } = _ref2, props = _objectWithoutProperties(_ref2, _excluded2$6);
1405
1663
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.DialogPanel, _objectSpread2(_objectSpread2({ className: cn(panelBase, sizeClasses[size], className) }, props), {}, {
1406
1664
  "data-opt-id": "BTMTG",
1407
1665
  "data-opt-slug": "dialog.DialogPanel"
@@ -1413,7 +1671,7 @@ function DialogPanel(_ref2) {
1413
1671
  * the other Dialog parts (DialogRoot/Heading/Description/Dismiss/…).
1414
1672
  */
1415
1673
  function AlertDialogPanel(_ref3) {
1416
- let { className, size = "sm" } = _ref3, props = _objectWithoutProperties(_ref3, _excluded3$4);
1674
+ let { className, size = "sm" } = _ref3, props = _objectWithoutProperties(_ref3, _excluded3$6);
1417
1675
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.AlertDialogPanel, _objectSpread2(_objectSpread2({ className: cn(panelBase, sizeClasses[size], className) }, props), {}, {
1418
1676
  "data-opt-id": "80HGS",
1419
1677
  "data-opt-slug": "dialog.AlertDialogPanel"
@@ -1421,7 +1679,7 @@ function AlertDialogPanel(_ref3) {
1421
1679
  }
1422
1680
  /** Renders the dialog heading component. */
1423
1681
  function DialogHeading(_ref4) {
1424
- let { className } = _ref4, props = _objectWithoutProperties(_ref4, _excluded4$3);
1682
+ let { className } = _ref4, props = _objectWithoutProperties(_ref4, _excluded4$4);
1425
1683
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.DialogHeading, _objectSpread2(_objectSpread2({ className: cn(`text-lg font-semibold ${OPT_TEXT_PRIMARY}`, className) }, props), {}, {
1426
1684
  "data-opt-id": "4NW4H",
1427
1685
  "data-opt-slug": "dialog.DialogHeading"
@@ -1475,10 +1733,10 @@ function DialogFooter({ children, className }) {
1475
1733
  }
1476
1734
  //#endregion
1477
1735
  //#region src/core/combobox.tsx
1478
- const _excluded$5 = ["className"];
1479
- const _excluded2$3 = ["className"];
1480
- const _excluded3$3 = ["className"];
1481
- const _excluded4$2 = ["className"];
1736
+ const _excluded$7 = ["className"];
1737
+ const _excluded2$5 = ["className"];
1738
+ const _excluded3$5 = ["className"];
1739
+ const _excluded4$3 = ["className"];
1482
1740
  const inputClass$1 = `${OPT_INPUT} ${OPT_FOCUS}`;
1483
1741
  const popoverClass = `${OPT_SURFACE_POPOVER} max-h-60 overflow-y-auto ${OPT_ANIMATE_ENTER_EXIT}`;
1484
1742
  const itemClass = `${OPT_ITEM_BASE} ${OPT_ACTIVE_ITEM}`;
@@ -1493,7 +1751,7 @@ function ComboboxRoot(props) {
1493
1751
  }
1494
1752
  /** Renders the combobox input component. */
1495
1753
  function ComboboxInput(_ref) {
1496
- let { className } = _ref, props = _objectWithoutProperties(_ref, _excluded$5);
1754
+ let { className } = _ref, props = _objectWithoutProperties(_ref, _excluded$7);
1497
1755
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.ComboboxInput, _objectSpread2(_objectSpread2({ className: cn(inputClass$1, className) }, props), {}, {
1498
1756
  "data-opt-id": "92FZS",
1499
1757
  "data-opt-slug": "combobox.ComboboxInput"
@@ -1501,7 +1759,7 @@ function ComboboxInput(_ref) {
1501
1759
  }
1502
1760
  /** Renders the combobox popover component. */
1503
1761
  function ComboboxPopover(_ref2) {
1504
- let { className } = _ref2, props = _objectWithoutProperties(_ref2, _excluded2$3);
1762
+ let { className } = _ref2, props = _objectWithoutProperties(_ref2, _excluded2$5);
1505
1763
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.ComboboxPopover, _objectSpread2(_objectSpread2({ className: cn(popoverClass, className) }, props), {}, {
1506
1764
  "data-opt-id": "WS4PD",
1507
1765
  "data-opt-slug": "combobox.ComboboxPopover"
@@ -1509,7 +1767,7 @@ function ComboboxPopover(_ref2) {
1509
1767
  }
1510
1768
  /** Renders the combobox item component. */
1511
1769
  function ComboboxItem(_ref3) {
1512
- let { className } = _ref3, props = _objectWithoutProperties(_ref3, _excluded3$3);
1770
+ let { className } = _ref3, props = _objectWithoutProperties(_ref3, _excluded3$5);
1513
1771
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.ComboboxItem, _objectSpread2(_objectSpread2({ className: cn(itemClass, className) }, props), {}, {
1514
1772
  "data-opt-id": "MAZJN",
1515
1773
  "data-opt-slug": "combobox.ComboboxItem"
@@ -1524,7 +1782,7 @@ function ComboboxGroup(props) {
1524
1782
  }
1525
1783
  /** Renders the combobox group label component. */
1526
1784
  function ComboboxGroupLabel(_ref4) {
1527
- let { className } = _ref4, props = _objectWithoutProperties(_ref4, _excluded4$2);
1785
+ let { className } = _ref4, props = _objectWithoutProperties(_ref4, _excluded4$3);
1528
1786
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.ComboboxGroupLabel, _objectSpread2(_objectSpread2({ className: cn(groupLabelClass, className) }, props), {}, {
1529
1787
  "data-opt-id": "512YF",
1530
1788
  "data-opt-slug": "combobox.ComboboxGroupLabel"
@@ -1541,10 +1799,10 @@ function ComboboxEmpty({ className, children = koComboboxLabels.empty }) {
1541
1799
  }
1542
1800
  //#endregion
1543
1801
  //#region src/core/menu.tsx
1544
- const _excluded$4 = ["className"];
1545
- const _excluded2$2 = ["className"];
1546
- const _excluded3$2 = ["className"];
1547
- const _excluded4$1 = ["className"];
1802
+ const _excluded$6 = ["className"];
1803
+ const _excluded2$4 = ["className"];
1804
+ const _excluded3$4 = ["className"];
1805
+ const _excluded4$2 = ["className"];
1548
1806
  const _excluded5$1 = ["className"];
1549
1807
  const _excluded6$1 = ["className"];
1550
1808
  const _excluded7$1 = ["className"];
@@ -1562,7 +1820,7 @@ function MenubarRoot(props) {
1562
1820
  }
1563
1821
  /** Renders the menubar container component. */
1564
1822
  function MenubarContainer(_ref) {
1565
- let { className } = _ref, props = _objectWithoutProperties(_ref, _excluded$4);
1823
+ let { className } = _ref, props = _objectWithoutProperties(_ref, _excluded$6);
1566
1824
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.MenubarContainer, _objectSpread2(_objectSpread2({ className: cn(menubarClass, className) }, props), {}, {
1567
1825
  "data-opt-id": "4MVQT",
1568
1826
  "data-opt-slug": "menu.MenubarContainer"
@@ -1577,7 +1835,7 @@ function MenuRoot(props) {
1577
1835
  }
1578
1836
  /** Renders the menu trigger component. */
1579
1837
  function MenuTrigger(_ref2) {
1580
- let { className } = _ref2, props = _objectWithoutProperties(_ref2, _excluded2$2);
1838
+ let { className } = _ref2, props = _objectWithoutProperties(_ref2, _excluded2$4);
1581
1839
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.MenuTrigger, _objectSpread2(_objectSpread2({ className: cn(menuButtonClass, className) }, props), {}, {
1582
1840
  "data-opt-id": "46BJG",
1583
1841
  "data-opt-slug": "menu.MenuTrigger"
@@ -1592,7 +1850,7 @@ function MenuButtonArrow(props) {
1592
1850
  }
1593
1851
  /** Renders the menu popover component. */
1594
1852
  function MenuPopover(_ref3) {
1595
- let { className } = _ref3, props = _objectWithoutProperties(_ref3, _excluded3$2);
1853
+ let { className } = _ref3, props = _objectWithoutProperties(_ref3, _excluded3$4);
1596
1854
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.MenuPopover, _objectSpread2(_objectSpread2({ className: cn(menuPopoverClass, className) }, props), {}, {
1597
1855
  "data-opt-id": "Q1MFY",
1598
1856
  "data-opt-slug": "menu.MenuPopover"
@@ -1600,7 +1858,7 @@ function MenuPopover(_ref3) {
1600
1858
  }
1601
1859
  /** Renders the menu item component. */
1602
1860
  function MenuItem(_ref4) {
1603
- let { className } = _ref4, props = _objectWithoutProperties(_ref4, _excluded4$1);
1861
+ let { className } = _ref4, props = _objectWithoutProperties(_ref4, _excluded4$2);
1604
1862
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.MenuItem, _objectSpread2(_objectSpread2({ className: cn(menuItemClass, className) }, props), {}, {
1605
1863
  "data-opt-id": "71JVB",
1606
1864
  "data-opt-slug": "menu.MenuItem"
@@ -2063,9 +2321,9 @@ function Slider({ value: controlledValue, defaultValue = 0, onChange, min = 0, m
2063
2321
  Slider.displayName = "Slider";
2064
2322
  //#endregion
2065
2323
  //#region src/core/popover.tsx
2066
- const _excluded$3 = ["className"];
2067
- const _excluded2$1 = ["className"];
2068
- const _excluded3$1 = ["className"];
2324
+ const _excluded$5 = ["className"];
2325
+ const _excluded2$3 = ["className"];
2326
+ const _excluded3$3 = ["className"];
2069
2327
  /** Renders the popover root component. */
2070
2328
  function PopoverRoot(props) {
2071
2329
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.PopoverRoot, _objectSpread2(_objectSpread2({}, props), {}, {
@@ -2074,7 +2332,7 @@ function PopoverRoot(props) {
2074
2332
  }));
2075
2333
  }
2076
2334
  const PopoverTrigger = (0, react.forwardRef)((_ref, ref) => {
2077
- let { className } = _ref, props = _objectWithoutProperties(_ref, _excluded$3);
2335
+ let { className } = _ref, props = _objectWithoutProperties(_ref, _excluded$5);
2078
2336
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.PopoverTrigger, _objectSpread2(_objectSpread2({
2079
2337
  ref,
2080
2338
  className: cn("inline-flex items-center gap-1.5 rounded-lg px-3 py-2 text-sm", "cursor-pointer data-[disabled]:cursor-not-allowed", OPT_FOCUS_VISIBLE, className)
@@ -2086,7 +2344,7 @@ const PopoverTrigger = (0, react.forwardRef)((_ref, ref) => {
2086
2344
  PopoverTrigger.displayName = "PopoverTrigger";
2087
2345
  /** Renders the popover content component. */
2088
2346
  function PopoverContent(_ref2) {
2089
- let { className } = _ref2, props = _objectWithoutProperties(_ref2, _excluded2$1);
2347
+ let { className } = _ref2, props = _objectWithoutProperties(_ref2, _excluded2$3);
2090
2348
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.PopoverContent, _objectSpread2(_objectSpread2({ className: cn("bg-surface-overlay z-50 rounded-lg p-4 shadow-lg", OPT_BORDER, OPT_ANIMATE_ENTER_EXIT, className) }, props), {}, {
2091
2349
  "data-opt-id": "E03EY",
2092
2350
  "data-opt-slug": "popover.PopoverContent"
@@ -2094,7 +2352,7 @@ function PopoverContent(_ref2) {
2094
2352
  }
2095
2353
  /** Renders the popover close component. */
2096
2354
  function PopoverClose(_ref3) {
2097
- let { className } = _ref3, props = _objectWithoutProperties(_ref3, _excluded3$1);
2355
+ let { className } = _ref3, props = _objectWithoutProperties(_ref3, _excluded3$3);
2098
2356
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.PopoverClose, _objectSpread2(_objectSpread2({ className: cn("text-text-tertiary hover:bg-bg-subtle inline-flex items-center justify-center rounded-md p-1 text-sm", "cursor-pointer data-[disabled]:cursor-not-allowed", OPT_FOCUS_VISIBLE, className) }, props), {}, {
2099
2357
  "data-opt-id": "FP4KF",
2100
2358
  "data-opt-slug": "popover.PopoverClose"
@@ -3388,15 +3646,15 @@ function DateRangePicker({ value, onChange, presets = DEFAULT_PRESETS, placehold
3388
3646
  DateRangePicker.displayName = "DateRangePicker";
3389
3647
  //#endregion
3390
3648
  //#region src/core/form.tsx
3391
- const _excluded$2 = ["className", "store"];
3392
- const _excluded2 = ["className"];
3393
- const _excluded3 = [
3649
+ const _excluded$4 = ["className", "store"];
3650
+ const _excluded2$2 = ["className"];
3651
+ const _excluded3$2 = [
3394
3652
  "className",
3395
3653
  "resize",
3396
3654
  "rows",
3397
3655
  "name"
3398
3656
  ];
3399
- const _excluded4 = ["className"];
3657
+ const _excluded4$1 = ["className"];
3400
3658
  const _excluded5 = ["className"];
3401
3659
  const _excluded6 = [
3402
3660
  "className",
@@ -3442,7 +3700,7 @@ function useRequiredFormContext(componentName) {
3442
3700
  }
3443
3701
  /** Renders the form root component. */
3444
3702
  function FormRoot(_ref) {
3445
- let { className, store } = _ref, props = _objectWithoutProperties(_ref, _excluded$2);
3703
+ let { className, store } = _ref, props = _objectWithoutProperties(_ref, _excluded$4);
3446
3704
  const form = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.FormRoot, _objectSpread2({ className: cn("gap-section flex flex-col", className) }, props));
3447
3705
  if (store) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.FormProvider, {
3448
3706
  store,
@@ -3454,7 +3712,7 @@ function FormRoot(_ref) {
3454
3712
  }
3455
3713
  /** Renders the form input component. */
3456
3714
  function FormInput(_ref2) {
3457
- let { className } = _ref2, props = _objectWithoutProperties(_ref2, _excluded2);
3715
+ let { className } = _ref2, props = _objectWithoutProperties(_ref2, _excluded2$2);
3458
3716
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.FormInput, _objectSpread2(_objectSpread2({ className: cn(inputClass, className) }, props), {}, {
3459
3717
  "data-opt-id": "D7Z8F",
3460
3718
  "data-opt-slug": "form.FormInput"
@@ -3469,7 +3727,7 @@ const resizeStyles = {
3469
3727
  /** Renders the form textarea component. */
3470
3728
  function FormTextarea(_ref3) {
3471
3729
  var _ref4;
3472
- let { className, resize = "vertical", rows = 4, name } = _ref3, props = _objectWithoutProperties(_ref3, _excluded3);
3730
+ let { className, resize = "vertical", rows = 4, name } = _ref3, props = _objectWithoutProperties(_ref3, _excluded3$2);
3473
3731
  const form = useRequiredFormContext("FormTextarea");
3474
3732
  const value = (_ref4 = (0, _reopt_ai_opt_ui_primitives.useFieldValue)(form, name)) !== null && _ref4 !== void 0 ? _ref4 : "";
3475
3733
  const error = form === null || form === void 0 ? void 0 : form.getError(name);
@@ -3515,7 +3773,7 @@ function FormSelect({ name, children, className, placeholder, minWidth = 140, "a
3515
3773
  }
3516
3774
  /** Renders the form select popover component. */
3517
3775
  function FormSelectPopover(_ref6) {
3518
- let { className } = _ref6, props = _objectWithoutProperties(_ref6, _excluded4);
3776
+ let { className } = _ref6, props = _objectWithoutProperties(_ref6, _excluded4$1);
3519
3777
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SelectPopover, _objectSpread2(_objectSpread2({ className: cn(OPT_SURFACE_POPOVER, OPT_ANIMATE_ENTER_EXIT, "z-[120]", className) }, props), {}, {
3520
3778
  "data-opt-id": "CQSPJ",
3521
3779
  "data-opt-slug": "form.FormSelectPopover"
@@ -3851,8 +4109,47 @@ function formatOptNumber(value) {
3851
4109
  return new Intl.NumberFormat(OPT_UI_DEFAULT_LOCALE).format(value);
3852
4110
  }
3853
4111
  //#endregion
4112
+ //#region src/core/dropdown-menu.tsx
4113
+ const _excluded$3 = ["className"];
4114
+ const _excluded2$1 = ["className"];
4115
+ const _excluded3$1 = ["className", "variant"];
4116
+ const _excluded4 = ["className"];
4117
+ const DropdownMenu = MenuRoot;
4118
+ /** Renders the dropdown trigger component. */
4119
+ function DropdownTrigger(_ref) {
4120
+ let { className } = _ref, props = _objectWithoutProperties(_ref, _excluded$3);
4121
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MenuTrigger, _objectSpread2(_objectSpread2({ className: cn("cursor-pointer gap-2", className) }, props), {}, {
4122
+ "data-opt-id": "C4BSS",
4123
+ "data-opt-slug": "dropdown-menu.DropdownTrigger"
4124
+ }));
4125
+ }
4126
+ /** Renders the dropdown content component. */
4127
+ function DropdownContent(_ref2) {
4128
+ let { className } = _ref2, props = _objectWithoutProperties(_ref2, _excluded2$1);
4129
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MenuPopover, _objectSpread2(_objectSpread2({ className: cn(className) }, props), {}, {
4130
+ "data-opt-id": "J6NF7",
4131
+ "data-opt-slug": "dropdown-menu.DropdownContent"
4132
+ }));
4133
+ }
4134
+ /** Renders the dropdown item component. */
4135
+ function DropdownItem(_ref3) {
4136
+ let { className, variant = "default" } = _ref3, props = _objectWithoutProperties(_ref3, _excluded3$1);
4137
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MenuItem, _objectSpread2(_objectSpread2({ className: cn("cursor-pointer data-[disabled]:cursor-not-allowed", variant === "destructive" && "text-danger-fg data-[active-item]:bg-danger-subtle data-[active-item]:text-danger-fg", className) }, props), {}, {
4138
+ "data-opt-id": "5M6GA",
4139
+ "data-opt-slug": "dropdown-menu.DropdownItem"
4140
+ }));
4141
+ }
4142
+ /** Renders the dropdown separator component. */
4143
+ function DropdownSeparator(_ref4) {
4144
+ let { className } = _ref4, props = _objectWithoutProperties(_ref4, _excluded4);
4145
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MenuSeparator, _objectSpread2(_objectSpread2({ className: cn(className) }, props), {}, {
4146
+ "data-opt-id": "K9Y54",
4147
+ "data-opt-slug": "dropdown-menu.DropdownSeparator"
4148
+ }));
4149
+ }
4150
+ //#endregion
3854
4151
  //#region src/core/checkbox.tsx
3855
- const _excluded$1 = [
4152
+ const _excluded$2 = [
3856
4153
  "label",
3857
4154
  "required",
3858
4155
  "error",
@@ -3917,7 +4214,7 @@ function IndeterminateIcon({ className }) {
3917
4214
  }
3918
4215
  const Checkbox = (0, react.forwardRef)((_ref, ref) => {
3919
4216
  var _groupContext$size, _groupContext$disable, _useInputId;
3920
- let { label, required, error, hint, description, checked: checkedProp, defaultChecked, onChange, size: sizeProp = "md", disabled: disabledProp, className, id, value, indeterminate } = _ref, props = _objectWithoutProperties(_ref, _excluded$1);
4217
+ let { label, required, error, hint, description, checked: checkedProp, defaultChecked, onChange, size: sizeProp = "md", disabled: disabledProp, className, id, value, indeterminate } = _ref, props = _objectWithoutProperties(_ref, _excluded$2);
3921
4218
  const groupContext = (0, react.useContext)(CheckboxGroupContext);
3922
4219
  const size = (_groupContext$size = groupContext === null || groupContext === void 0 ? void 0 : groupContext.size) !== null && _groupContext$size !== void 0 ? _groupContext$size : sizeProp;
3923
4220
  const disabled = (_groupContext$disable = groupContext === null || groupContext === void 0 ? void 0 : groupContext.disabled) !== null && _groupContext$disable !== void 0 ? _groupContext$disable : disabledProp;
@@ -4029,6 +4326,73 @@ function CheckboxGroup({ children, value: valueProp, defaultValue = EMPTY_STRING
4029
4326
  });
4030
4327
  }
4031
4328
  //#endregion
4329
+ //#region src/core/resizable.tsx
4330
+ const _excluded$1 = [
4331
+ "direction",
4332
+ "children",
4333
+ "className",
4334
+ "id",
4335
+ "autoSaveId"
4336
+ ];
4337
+ const _excluded2 = [
4338
+ "collapsedSize",
4339
+ "defaultSize",
4340
+ "minSize",
4341
+ "maxSize",
4342
+ "children",
4343
+ "className"
4344
+ ];
4345
+ const _excluded3 = ["className", "withHandle"];
4346
+ function toPanelSize(size) {
4347
+ return typeof size === "number" ? `${size}%` : size;
4348
+ }
4349
+ /** Renders the resizable panel group component. */
4350
+ function ResizablePanelGroup(_ref) {
4351
+ let { direction, children, className, id, autoSaveId } = _ref, props = _objectWithoutProperties(_ref, _excluded$1);
4352
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_resizable_panels.Group, _objectSpread2(_objectSpread2({
4353
+ orientation: direction,
4354
+ id: id !== null && id !== void 0 ? id : autoSaveId,
4355
+ className: cn("flex h-full w-full", className)
4356
+ }, props), {}, {
4357
+ "data-opt-id": "BM5RR",
4358
+ "data-opt-slug": "resizable.ResizablePanelGroup",
4359
+ children
4360
+ }));
4361
+ }
4362
+ ResizablePanelGroup.displayName = "ResizablePanelGroup";
4363
+ /** Renders the resizable panel component. */
4364
+ function ResizablePanel(_ref2) {
4365
+ let { collapsedSize, defaultSize, minSize, maxSize, children, className } = _ref2, props = _objectWithoutProperties(_ref2, _excluded2);
4366
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_resizable_panels.Panel, _objectSpread2(_objectSpread2({
4367
+ collapsedSize: toPanelSize(collapsedSize),
4368
+ defaultSize: toPanelSize(defaultSize),
4369
+ minSize: toPanelSize(minSize),
4370
+ maxSize: toPanelSize(maxSize),
4371
+ className: cn("overflow-auto", className)
4372
+ }, props), {}, {
4373
+ "data-opt-id": "88X4V",
4374
+ "data-opt-slug": "resizable.ResizablePanel",
4375
+ children
4376
+ }));
4377
+ }
4378
+ ResizablePanel.displayName = "ResizablePanel";
4379
+ /** Renders the resizable handle component. */
4380
+ function ResizableHandle(_ref3) {
4381
+ let { className, withHandle = false } = _ref3, props = _objectWithoutProperties(_ref3, _excluded3);
4382
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_resizable_panels.Separator, _objectSpread2(_objectSpread2({ className: cn("bg-border relative flex items-center justify-center", "after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2", "data-[resize-handle-active]:bg-accent", "[&[data-orientation=vertical]]:h-px [&[data-orientation=vertical]]:w-full", "[&[data-orientation=horizontal]]:h-full [&[data-orientation=horizontal]]:w-px", className) }, props), {}, {
4383
+ "data-opt-id": "6Z22W",
4384
+ "data-opt-slug": "resizable.ResizableHandle",
4385
+ children: withHandle && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
4386
+ className: "border-border bg-surface z-10 flex h-4 w-3 items-center justify-center rounded-sm border",
4387
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.GripVertical, {
4388
+ "aria-hidden": "true",
4389
+ className: "text-text-tertiary h-3 w-3"
4390
+ })
4391
+ })
4392
+ }));
4393
+ }
4394
+ ResizableHandle.displayName = "ResizableHandle";
4395
+ //#endregion
4032
4396
  //#region src/core/pagination.tsx
4033
4397
  const _excluded = [
4034
4398
  "totalItems",
@@ -4703,6 +5067,12 @@ Object.defineProperty(exports, "DateRangePicker", {
4703
5067
  return DateRangePicker;
4704
5068
  }
4705
5069
  });
5070
+ Object.defineProperty(exports, "DescriptionList", {
5071
+ enumerable: true,
5072
+ get: function() {
5073
+ return DescriptionList;
5074
+ }
5075
+ });
4706
5076
  Object.defineProperty(exports, "DialogBody", {
4707
5077
  enumerable: true,
4708
5078
  get: function() {
@@ -4775,6 +5145,36 @@ Object.defineProperty(exports, "DisclosureTrigger", {
4775
5145
  return DisclosureTrigger;
4776
5146
  }
4777
5147
  });
5148
+ Object.defineProperty(exports, "DropdownContent", {
5149
+ enumerable: true,
5150
+ get: function() {
5151
+ return DropdownContent;
5152
+ }
5153
+ });
5154
+ Object.defineProperty(exports, "DropdownItem", {
5155
+ enumerable: true,
5156
+ get: function() {
5157
+ return DropdownItem;
5158
+ }
5159
+ });
5160
+ Object.defineProperty(exports, "DropdownMenu", {
5161
+ enumerable: true,
5162
+ get: function() {
5163
+ return DropdownMenu;
5164
+ }
5165
+ });
5166
+ Object.defineProperty(exports, "DropdownSeparator", {
5167
+ enumerable: true,
5168
+ get: function() {
5169
+ return DropdownSeparator;
5170
+ }
5171
+ });
5172
+ Object.defineProperty(exports, "DropdownTrigger", {
5173
+ enumerable: true,
5174
+ get: function() {
5175
+ return DropdownTrigger;
5176
+ }
5177
+ });
4778
5178
  Object.defineProperty(exports, "EmptyState", {
4779
5179
  enumerable: true,
4780
5180
  get: function() {
@@ -5243,12 +5643,6 @@ Object.defineProperty(exports, "OPT_TD_MUTED", {
5243
5643
  return OPT_TD_MUTED;
5244
5644
  }
5245
5645
  });
5246
- Object.defineProperty(exports, "OPT_TEXTAREA_SIZE", {
5247
- enumerable: true,
5248
- get: function() {
5249
- return OPT_TEXTAREA_SIZE;
5250
- }
5251
- });
5252
5646
  Object.defineProperty(exports, "OPT_TEXT_LABEL", {
5253
5647
  enumerable: true,
5254
5648
  get: function() {
@@ -5321,6 +5715,24 @@ Object.defineProperty(exports, "RequiredMark", {
5321
5715
  return RequiredMark;
5322
5716
  }
5323
5717
  });
5718
+ Object.defineProperty(exports, "ResizableHandle", {
5719
+ enumerable: true,
5720
+ get: function() {
5721
+ return ResizableHandle;
5722
+ }
5723
+ });
5724
+ Object.defineProperty(exports, "ResizablePanel", {
5725
+ enumerable: true,
5726
+ get: function() {
5727
+ return ResizablePanel;
5728
+ }
5729
+ });
5730
+ Object.defineProperty(exports, "ResizablePanelGroup", {
5731
+ enumerable: true,
5732
+ get: function() {
5733
+ return ResizablePanelGroup;
5734
+ }
5735
+ });
5324
5736
  Object.defineProperty(exports, "SelectItem", {
5325
5737
  enumerable: true,
5326
5738
  get: function() {
@@ -5405,6 +5817,12 @@ Object.defineProperty(exports, "StatCard", {
5405
5817
  return StatCard;
5406
5818
  }
5407
5819
  });
5820
+ Object.defineProperty(exports, "Switch", {
5821
+ enumerable: true,
5822
+ get: function() {
5823
+ return Switch;
5824
+ }
5825
+ });
5408
5826
  Object.defineProperty(exports, "Tab", {
5409
5827
  enumerable: true,
5410
5828
  get: function() {
@@ -5441,6 +5859,12 @@ Object.defineProperty(exports, "TextTruncate", {
5441
5859
  return TextTruncate;
5442
5860
  }
5443
5861
  });
5862
+ Object.defineProperty(exports, "Textarea", {
5863
+ enumerable: true,
5864
+ get: function() {
5865
+ return Textarea;
5866
+ }
5867
+ });
5444
5868
  Object.defineProperty(exports, "ToolbarButton", {
5445
5869
  enumerable: true,
5446
5870
  get: function() {