@tonyclaw/agent-inspector 3.0.18 → 3.0.19

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 (97) hide show
  1. package/.output/cli.js +1255 -504
  2. package/.output/nitro.json +3 -3
  3. package/.output/public/assets/CompareDrawer-DR3WgrId.js +1 -0
  4. package/.output/public/assets/ProxyViewerContainer-B7PZaz5j.js +127 -0
  5. package/.output/public/assets/ReplayDialog-Bt9jgdvJ.js +1 -0
  6. package/.output/public/assets/RequestAnatomy-C-4630lw.js +1 -0
  7. package/.output/public/assets/ResponseView-f_JrN1iQ.js +3 -0
  8. package/.output/public/assets/StreamingChunkSequence-D8dBm1d8.js +1 -0
  9. package/.output/public/assets/_sessionId-CtoSDXDC.js +1 -0
  10. package/.output/public/assets/index-B-rVc2xu.js +12 -0
  11. package/.output/public/assets/index-B3YOj8-_.css +1 -0
  12. package/.output/public/assets/{index-ClQ7Vi3J.js → index-BNCySZM-.js} +1 -1
  13. package/.output/public/assets/index-BtCnkWve.js +1 -0
  14. package/.output/public/assets/json-viewer-DT6QQY81.js +1 -0
  15. package/.output/server/_chunks/ssr-renderer.mjs +18 -2
  16. package/.output/server/_libs/@radix-ui/react-dismissable-layer+[...].mjs +165 -31
  17. package/.output/server/_libs/@radix-ui/react-use-callback-ref+[...].mjs +1 -1
  18. package/.output/server/_libs/@radix-ui/react-use-controllable-state+[...].mjs +2 -2
  19. package/.output/server/_libs/@radix-ui/react-use-is-hydrated+[...].mjs +28 -1
  20. package/.output/server/_libs/mistralai__mistralai.mjs +1 -1
  21. package/.output/server/_libs/modelcontextprotocol__server.mjs +11571 -8127
  22. package/.output/server/_libs/radix-ui__primitive.mjs +1 -1
  23. package/.output/server/_libs/radix-ui__react-collapsible.mjs +1 -1
  24. package/.output/server/_libs/radix-ui__react-collection.mjs +8 -8
  25. package/.output/server/_libs/radix-ui__react-compose-refs.mjs +0 -1
  26. package/.output/server/_libs/radix-ui__react-context.mjs +4 -18
  27. package/.output/server/_libs/radix-ui__react-dialog.mjs +41 -88
  28. package/.output/server/_libs/radix-ui__react-focus-guards.mjs +15 -5
  29. package/.output/server/_libs/radix-ui__react-focus-scope.mjs +6 -2
  30. package/.output/server/_libs/radix-ui__react-id.mjs +3 -3
  31. package/.output/server/_libs/radix-ui__react-popper.mjs +62 -8
  32. package/.output/server/_libs/radix-ui__react-portal.mjs +2 -2
  33. package/.output/server/_libs/radix-ui__react-presence.mjs +50 -5
  34. package/.output/server/_libs/radix-ui__react-roving-focus.mjs +15 -4
  35. package/.output/server/_libs/radix-ui__react-scroll-area.mjs +30 -20
  36. package/.output/server/_libs/radix-ui__react-select.mjs +167 -123
  37. package/.output/server/_libs/radix-ui__react-slot.mjs +74 -41
  38. package/.output/server/_libs/radix-ui__react-tabs.mjs +6 -1
  39. package/.output/server/_libs/radix-ui__react-tooltip.mjs +6 -3
  40. package/.output/server/_libs/react-dom.mjs +13 -15
  41. package/.output/server/_libs/react.mjs +45 -45
  42. package/.output/server/_libs/srvx.mjs +409 -53
  43. package/.output/server/_libs/swr.mjs +10 -2
  44. package/.output/server/_libs/tailwind-merge.mjs +286 -41
  45. package/.output/server/_libs/tanstack__history.mjs +9 -13
  46. package/.output/server/_libs/tanstack__react-router.mjs +788 -1092
  47. package/.output/server/_libs/tanstack__react-store.mjs +1 -1
  48. package/.output/server/_libs/tanstack__react-virtual.mjs +82 -7
  49. package/.output/server/_libs/tanstack__router-core.mjs +1841 -2060
  50. package/.output/server/_libs/tanstack__virtual-core.mjs +116 -45
  51. package/.output/server/_libs/use-sync-external-store.mjs +1 -1
  52. package/.output/server/_libs/zod-to-json-schema.mjs +1 -1
  53. package/.output/server/_libs/zod.mjs +5085 -200
  54. package/.output/server/{_sessionId-Bi3ZIrqT.mjs → _sessionId-DbRqqzqz.mjs} +30 -32
  55. package/.output/server/_ssr/{CompareDrawer-BYZS_hCR.mjs → CompareDrawer-CVhUSZu1.mjs} +29 -31
  56. package/.output/server/_ssr/{ProxyViewerContainer-BE4umfVs.mjs → ProxyViewerContainer-BNnDYtc5.mjs} +54 -52
  57. package/.output/server/_ssr/{ReplayDialog-BlID2ZH4.mjs → ReplayDialog-DVkGajZU.mjs} +30 -32
  58. package/.output/server/_ssr/{RequestAnatomy-CGJ2lkzT.mjs → RequestAnatomy-_FIfVjDR.mjs} +29 -31
  59. package/.output/server/_ssr/{ResponseView-DDjcGf7M.mjs → ResponseView-Bnv5ejVA.mjs} +29 -31
  60. package/.output/server/_ssr/{StreamingChunkSequence-G7B8M5G2.mjs → StreamingChunkSequence-vtwzxw7A.mjs} +29 -31
  61. package/.output/server/_ssr/empty-plugin-adapters-BFgPZ6_d.mjs +6 -0
  62. package/.output/server/_ssr/{index-ClQ9FvRJ.mjs → index-DFJbRoyq.mjs} +31 -33
  63. package/.output/server/_ssr/index.mjs +1102 -784
  64. package/.output/server/_ssr/{json-viewer-CFbpkiBJ.mjs → json-viewer-BkweASh3.mjs} +29 -31
  65. package/.output/server/_ssr/{router-Cq8LEvhE.mjs → router-gFd3g7WM.mjs} +10 -7
  66. package/.output/server/_tanstack-start-manifest_v-DeLutIlq.mjs +4 -0
  67. package/.output/server/index.mjs +81 -99
  68. package/package.json +17 -8
  69. package/src/components/clients/ClientLogo.tsx +5 -1
  70. package/src/components/proxy-viewer/RequestToolsPanel.tsx +1 -0
  71. package/src/components/proxy-viewer/ResponseView.tsx +1 -0
  72. package/src/components/proxy-viewer/StreamingChunkSequence.tsx +1 -0
  73. package/src/components/proxy-viewer/TurnGroup.tsx +1 -0
  74. package/src/components/proxy-viewer/anatomy/SegmentBar.tsx +1 -0
  75. package/src/components/proxy-viewer/formats/anthropic/ContentBlocks.tsx +4 -0
  76. package/src/components/proxy-viewer/formats/anthropic/ResponseView.tsx +1 -0
  77. package/src/components/proxy-viewer/formats/openai/ResponseView.tsx +2 -0
  78. package/src/components/ui/dialog.tsx +1 -1
  79. package/src/components/ui/json-viewer.tsx +2 -0
  80. package/src/components/ui/select.tsx +1 -1
  81. package/src/router.tsx +9 -0
  82. package/.output/public/assets/CompareDrawer-Daj03-RL.js +0 -1
  83. package/.output/public/assets/ProxyViewerContainer-BLCRQtU_.js +0 -106
  84. package/.output/public/assets/ReplayDialog-5FR5crdo.js +0 -1
  85. package/.output/public/assets/RequestAnatomy-DF0hHdQY.js +0 -1
  86. package/.output/public/assets/ResponseView-BwkMSsUa.js +0 -3
  87. package/.output/public/assets/StreamingChunkSequence-CKeUd58x.js +0 -1
  88. package/.output/public/assets/_sessionId-CThgXa41.js +0 -1
  89. package/.output/public/assets/index-BHXN1Fsx.css +0 -1
  90. package/.output/public/assets/index-gm3A0idN.js +0 -1
  91. package/.output/public/assets/json-viewer-BA-W-PZq.js +0 -1
  92. package/.output/public/assets/main-BnRC1932.js +0 -18
  93. package/.output/server/_libs/@radix-ui/react-use-escape-keydown+[...].mjs +0 -17
  94. package/.output/server/_libs/cfworker__json-schema.mjs +0 -1
  95. package/.output/server/_libs/tiny-invariant.mjs +0 -12
  96. package/.output/server/_libs/tiny-warning.mjs +0 -5
  97. package/.output/server/_tanstack-start-manifest_v-p7J0QCMh.mjs +0 -4
@@ -35,7 +35,7 @@ var ScrollArea = reactExports.forwardRef(
35
35
  const [cornerHeight, setCornerHeight] = reactExports.useState(0);
36
36
  const [scrollbarXEnabled, setScrollbarXEnabled] = reactExports.useState(false);
37
37
  const [scrollbarYEnabled, setScrollbarYEnabled] = reactExports.useState(false);
38
- const composedRefs = useComposedRefs(forwardedRef, (node) => setScrollArea(node));
38
+ const composedRefs = useComposedRefs(forwardedRef, setScrollArea);
39
39
  const direction = useDirection(dir);
40
40
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
41
41
  ScrollAreaProvider,
@@ -68,8 +68,8 @@ var ScrollArea = reactExports.forwardRef(
68
68
  style: {
69
69
  position: "relative",
70
70
  // Pass corner sizes as CSS vars to reduce re-renders of context consumers
71
- ["--radix-scroll-area-corner-width"]: cornerWidth + "px",
72
- ["--radix-scroll-area-corner-height"]: cornerHeight + "px",
71
+ "--radix-scroll-area-corner-width": cornerWidth + "px",
72
+ "--radix-scroll-area-corner-height": cornerHeight + "px",
73
73
  ...props.style
74
74
  }
75
75
  }
@@ -87,15 +87,7 @@ var ScrollAreaViewport = reactExports.forwardRef(
87
87
  const ref = reactExports.useRef(null);
88
88
  const composedRefs = useComposedRefs(forwardedRef, ref, context.onViewportChange);
89
89
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
90
- /* @__PURE__ */ jsxRuntimeExports.jsx(
91
- "style",
92
- {
93
- dangerouslySetInnerHTML: {
94
- __html: `[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}`
95
- },
96
- nonce
97
- }
98
- ),
90
+ /* @__PURE__ */ jsxRuntimeExports.jsx(ScrollAreaViewportStyle, { nonce }),
99
91
  /* @__PURE__ */ jsxRuntimeExports.jsx(
100
92
  Primitive.div,
101
93
  {
@@ -125,6 +117,20 @@ var ScrollAreaViewport = reactExports.forwardRef(
125
117
  }
126
118
  );
127
119
  ScrollAreaViewport.displayName = VIEWPORT_NAME;
120
+ var ScrollAreaViewportStyle = reactExports.memo(
121
+ ({ nonce }) => {
122
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(
123
+ "style",
124
+ {
125
+ dangerouslySetInnerHTML: {
126
+ __html: `[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}`
127
+ },
128
+ nonce
129
+ }
130
+ );
131
+ },
132
+ (prevProps, nextProps) => prevProps.nonce === nextProps.nonce
133
+ );
128
134
  var SCROLLBAR_NAME = "ScrollAreaScrollbar";
129
135
  var ScrollAreaScrollbar = reactExports.forwardRef(
130
136
  (props, forwardedRef) => {
@@ -138,7 +144,7 @@ var ScrollAreaScrollbar = reactExports.forwardRef(
138
144
  isHorizontal ? onScrollbarXEnabledChange(false) : onScrollbarYEnabledChange(false);
139
145
  };
140
146
  }, [isHorizontal, onScrollbarXEnabledChange, onScrollbarYEnabledChange]);
141
- return context.type === "hover" ? /* @__PURE__ */ jsxRuntimeExports.jsx(ScrollAreaScrollbarHover, { ...scrollbarProps, ref: forwardedRef, forceMount }) : context.type === "scroll" ? /* @__PURE__ */ jsxRuntimeExports.jsx(ScrollAreaScrollbarScroll, { ...scrollbarProps, ref: forwardedRef, forceMount }) : context.type === "auto" ? /* @__PURE__ */ jsxRuntimeExports.jsx(ScrollAreaScrollbarAuto, { ...scrollbarProps, ref: forwardedRef, forceMount }) : context.type === "always" ? /* @__PURE__ */ jsxRuntimeExports.jsx(ScrollAreaScrollbarVisible, { ...scrollbarProps, ref: forwardedRef }) : null;
147
+ return context.type === "hover" ? /* @__PURE__ */ jsxRuntimeExports.jsx(ScrollAreaScrollbarHover, { ...scrollbarProps, ref: forwardedRef, forceMount }) : context.type === "scroll" ? /* @__PURE__ */ jsxRuntimeExports.jsx(ScrollAreaScrollbarScroll, { ...scrollbarProps, ref: forwardedRef, forceMount }) : context.type === "auto" ? /* @__PURE__ */ jsxRuntimeExports.jsx(ScrollAreaScrollbarAuto, { ...scrollbarProps, ref: forwardedRef, forceMount }) : context.type === "always" ? /* @__PURE__ */ jsxRuntimeExports.jsx(ScrollAreaScrollbarVisible, { ...scrollbarProps, ref: forwardedRef, "data-state": "visible" }) : null;
142
148
  }
143
149
  );
144
150
  ScrollAreaScrollbar.displayName = SCROLLBAR_NAME;
@@ -347,7 +353,7 @@ var ScrollAreaScrollbarX = reactExports.forwardRef((props, forwardedRef) => {
347
353
  bottom: 0,
348
354
  left: context.dir === "rtl" ? "var(--radix-scroll-area-corner-width)" : 0,
349
355
  right: context.dir === "ltr" ? "var(--radix-scroll-area-corner-width)" : 0,
350
- ["--radix-scroll-area-thumb-width"]: getThumbSize(sizes) + "px",
356
+ "--radix-scroll-area-thumb-width": getThumbSize(sizes) + "px",
351
357
  ...props.style
352
358
  },
353
359
  onThumbPointerDown: (pointerPos) => props.onThumbPointerDown(pointerPos.x),
@@ -398,7 +404,7 @@ var ScrollAreaScrollbarY = reactExports.forwardRef((props, forwardedRef) => {
398
404
  right: context.dir === "ltr" ? 0 : void 0,
399
405
  left: context.dir === "rtl" ? 0 : void 0,
400
406
  bottom: "var(--radix-scroll-area-corner-height)",
401
- ["--radix-scroll-area-thumb-height"]: getThumbSize(sizes) + "px",
407
+ "--radix-scroll-area-thumb-height": getThumbSize(sizes) + "px",
402
408
  ...props.style
403
409
  },
404
410
  onThumbPointerDown: (pointerPos) => props.onThumbPointerDown(pointerPos.y),
@@ -445,7 +451,7 @@ var ScrollAreaScrollbarImpl = reactExports.forwardRef((props, forwardedRef) => {
445
451
  } = props;
446
452
  const context = useScrollAreaContext(SCROLLBAR_NAME, __scopeScrollArea);
447
453
  const [scrollbar, setScrollbar] = reactExports.useState(null);
448
- const composeRefs = useComposedRefs(forwardedRef, (node) => setScrollbar(node));
454
+ const composeRefs = useComposedRefs(forwardedRef, setScrollbar);
449
455
  const rectRef = reactExports.useRef(null);
450
456
  const prevWebkitUserSelectRef = reactExports.useRef("");
451
457
  const viewport = context.viewport;
@@ -529,10 +535,7 @@ var ScrollAreaThumbImpl = reactExports.forwardRef(
529
535
  const scrollAreaContext = useScrollAreaContext(THUMB_NAME, __scopeScrollArea);
530
536
  const scrollbarContext = useScrollbarContext(THUMB_NAME, __scopeScrollArea);
531
537
  const { onThumbPositionChange } = scrollbarContext;
532
- const composedRef = useComposedRefs(
533
- forwardedRef,
534
- (node) => scrollbarContext.onThumbChange(node)
535
- );
538
+ const composedRef = useComposedRefs(forwardedRef, scrollbarContext.onThumbChange);
536
539
  const removeUnlinkedScrollListenerRef = reactExports.useRef(void 0);
537
540
  const debounceScrollEnd = useDebounceCallback(() => {
538
541
  if (removeUnlinkedScrollListenerRef.current) {
@@ -596,6 +599,7 @@ var ScrollAreaCornerImpl = reactExports.forwardRef((props, forwardedRef) => {
596
599
  const [width, setWidth] = reactExports.useState(0);
597
600
  const [height, setHeight] = reactExports.useState(0);
598
601
  const hasSize = Boolean(width && height);
602
+ const { onCornerWidthChange, onCornerHeightChange } = context;
599
603
  useResizeObserver(context.scrollbarX, () => {
600
604
  const height2 = context.scrollbarX?.offsetHeight || 0;
601
605
  context.onCornerHeightChange(height2);
@@ -606,6 +610,12 @@ var ScrollAreaCornerImpl = reactExports.forwardRef((props, forwardedRef) => {
606
610
  context.onCornerWidthChange(width2);
607
611
  setWidth(width2);
608
612
  });
613
+ reactExports.useEffect(() => {
614
+ return () => {
615
+ onCornerWidthChange(0);
616
+ onCornerHeightChange(0);
617
+ };
618
+ }, [onCornerWidthChange, onCornerHeightChange]);
609
619
  return hasSize ? /* @__PURE__ */ jsxRuntimeExports.jsx(
610
620
  Primitive.div,
611
621
  {
@@ -1,4 +1,4 @@
1
- import { r as reactExports, j as jsxRuntimeExports } from "./react.mjs";
1
+ import { j as jsxRuntimeExports, r as reactExports } from "./react.mjs";
2
2
  import { r as reactDomExports } from "./react-dom.mjs";
3
3
  import { c as clamp } from "./radix-ui__number.mjs";
4
4
  import { c as composeEventHandlers } from "./radix-ui__primitive.mjs";
@@ -10,8 +10,9 @@ import { D as DismissableLayer } from "./@radix-ui/react-dismissable-layer+[...]
10
10
  import { u as useFocusGuards } from "./radix-ui__react-focus-guards.mjs";
11
11
  import { F as FocusScope } from "./radix-ui__react-focus-scope.mjs";
12
12
  import { u as useId } from "./radix-ui__react-id.mjs";
13
- import { R as Root2$1, A as Anchor, c as createPopperScope, C as Content, a as Arrow } from "./radix-ui__react-popper.mjs";
14
- import { P as Portal$1 } from "./radix-ui__react-portal.mjs";
13
+ import { A as Anchor, R as Root2, c as createPopperScope, C as Content, a as Arrow } from "./radix-ui__react-popper.mjs";
14
+ import { P as Portal } from "./radix-ui__react-portal.mjs";
15
+ import { P as Presence } from "./radix-ui__react-presence.mjs";
15
16
  import { P as Primitive } from "./radix-ui__react-primitive.mjs";
16
17
  import { c as createSlot } from "./radix-ui__react-slot.mjs";
17
18
  import { u as useCallbackRef } from "./@radix-ui/react-use-callback-ref+[...].mjs";
@@ -30,9 +31,10 @@ var [createSelectContext] = createContextScope(SELECT_NAME, [
30
31
  createPopperScope
31
32
  ]);
32
33
  var usePopperScope = createPopperScope();
33
- var [SelectProvider, useSelectContext] = createSelectContext(SELECT_NAME);
34
+ var [SelectProviderImpl, useSelectContext] = createSelectContext(SELECT_NAME);
34
35
  var [SelectNativeOptionsProvider, useSelectNativeOptionsContext] = createSelectContext(SELECT_NAME);
35
- var Select = (props) => {
36
+ var PROVIDER_NAME = "SelectProvider";
37
+ function SelectProvider(props) {
36
38
  const {
37
39
  __scopeSelect,
38
40
  children,
@@ -47,7 +49,9 @@ var Select = (props) => {
47
49
  autoComplete,
48
50
  disabled,
49
51
  required,
50
- form
52
+ form,
53
+ // @ts-expect-error internal render prop used by `Select` to compose its default parts
54
+ internal_do_not_use_render
51
55
  } = props;
52
56
  const popperScope = usePopperScope(__scopeSelect);
53
57
  const [trigger, setTrigger] = reactExports.useState(null);
@@ -67,68 +71,81 @@ var Select = (props) => {
67
71
  caller: SELECT_NAME
68
72
  });
69
73
  const triggerPointerDownPosRef = reactExports.useRef(null);
70
- const isFormControl = trigger ? form || !!trigger.closest("form") : true;
74
+ const initialValueRef = reactExports.useRef(value);
75
+ reactExports.useEffect(() => {
76
+ const associatedForm = form ? trigger?.ownerDocument.getElementById(form) : trigger?.form;
77
+ if (associatedForm instanceof HTMLFormElement) {
78
+ const reset = () => setValue(initialValueRef.current);
79
+ associatedForm.addEventListener("reset", reset);
80
+ return () => associatedForm.removeEventListener("reset", reset);
81
+ }
82
+ }, [form, trigger, setValue]);
83
+ const isFormControl = trigger ? !!form || !!trigger.closest("form") : true;
71
84
  const [nativeOptionsSet, setNativeOptionsSet] = reactExports.useState(/* @__PURE__ */ new Set());
85
+ const contentId = useId();
72
86
  const nativeSelectKey = Array.from(nativeOptionsSet).map((option) => option.props.value).join(";");
73
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Root2$1, { ...popperScope, children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
74
- SelectProvider,
87
+ const handleNativeOptionAdd = reactExports.useCallback((option) => {
88
+ setNativeOptionsSet((prev) => new Set(prev).add(option));
89
+ }, []);
90
+ const handleNativeOptionRemove = reactExports.useCallback((option) => {
91
+ setNativeOptionsSet((prev) => {
92
+ const optionsSet = new Set(prev);
93
+ optionsSet.delete(option);
94
+ return optionsSet;
95
+ });
96
+ }, []);
97
+ const context = {
98
+ required,
99
+ trigger,
100
+ onTriggerChange: setTrigger,
101
+ valueNode,
102
+ onValueNodeChange: setValueNode,
103
+ valueNodeHasChildren,
104
+ onValueNodeHasChildrenChange: setValueNodeHasChildren,
105
+ contentId,
106
+ value,
107
+ onValueChange: setValue,
108
+ open,
109
+ onOpenChange: setOpen,
110
+ dir: direction,
111
+ triggerPointerDownPosRef,
112
+ disabled,
113
+ name,
114
+ autoComplete,
115
+ form,
116
+ nativeOptions: nativeOptionsSet,
117
+ nativeSelectKey,
118
+ isFormControl
119
+ };
120
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Root2, { ...popperScope, children: /* @__PURE__ */ jsxRuntimeExports.jsx(SelectProviderImpl, { scope: __scopeSelect, ...context, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Collection.Provider, { scope: __scopeSelect, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
121
+ SelectNativeOptionsProvider,
75
122
  {
76
- required,
77
123
  scope: __scopeSelect,
78
- trigger,
79
- onTriggerChange: setTrigger,
80
- valueNode,
81
- onValueNodeChange: setValueNode,
82
- valueNodeHasChildren,
83
- onValueNodeHasChildrenChange: setValueNodeHasChildren,
84
- contentId: useId(),
85
- value,
86
- onValueChange: setValue,
87
- open,
88
- onOpenChange: setOpen,
89
- dir: direction,
90
- triggerPointerDownPosRef,
91
- disabled,
92
- children: [
93
- /* @__PURE__ */ jsxRuntimeExports.jsx(Collection.Provider, { scope: __scopeSelect, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
94
- SelectNativeOptionsProvider,
95
- {
96
- scope: props.__scopeSelect,
97
- onNativeOptionAdd: reactExports.useCallback((option) => {
98
- setNativeOptionsSet((prev) => new Set(prev).add(option));
99
- }, []),
100
- onNativeOptionRemove: reactExports.useCallback((option) => {
101
- setNativeOptionsSet((prev) => {
102
- const optionsSet = new Set(prev);
103
- optionsSet.delete(option);
104
- return optionsSet;
105
- });
106
- }, []),
107
- children
108
- }
109
- ) }),
110
- isFormControl ? /* @__PURE__ */ jsxRuntimeExports.jsxs(
124
+ onNativeOptionAdd: handleNativeOptionAdd,
125
+ onNativeOptionRemove: handleNativeOptionRemove,
126
+ children: isFunction(internal_do_not_use_render) ? internal_do_not_use_render(context) : children
127
+ }
128
+ ) }) }) });
129
+ }
130
+ SelectProvider.displayName = PROVIDER_NAME;
131
+ var Select = (props) => {
132
+ const { __scopeSelect, children, ...providerProps } = props;
133
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(
134
+ SelectProvider,
135
+ {
136
+ __scopeSelect,
137
+ ...providerProps,
138
+ internal_do_not_use_render: ({ isFormControl }) => /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
139
+ children,
140
+ isFormControl ? /* @__PURE__ */ jsxRuntimeExports.jsx(
111
141
  SelectBubbleInput,
112
142
  {
113
- "aria-hidden": true,
114
- required,
115
- tabIndex: -1,
116
- name,
117
- autoComplete,
118
- value,
119
- onChange: (event) => setValue(event.target.value),
120
- disabled,
121
- form,
122
- children: [
123
- value === void 0 ? /* @__PURE__ */ jsxRuntimeExports.jsx("option", { value: "" }) : null,
124
- Array.from(nativeOptionsSet)
125
- ]
126
- },
127
- nativeSelectKey
143
+ __scopeSelect
144
+ }
128
145
  ) : null
129
- ]
146
+ ] })
130
147
  }
131
- ) });
148
+ );
132
149
  };
133
150
  Select.displayName = SELECT_NAME;
134
151
  var TRIGGER_NAME = "SelectTrigger";
@@ -166,7 +183,7 @@ var SelectTrigger = reactExports.forwardRef(
166
183
  {
167
184
  type: "button",
168
185
  role: "combobox",
169
- "aria-controls": context.contentId,
186
+ "aria-controls": context.open ? context.contentId : void 0,
170
187
  "aria-expanded": context.open,
171
188
  "aria-required": context.required,
172
189
  "aria-autocomplete": "none",
@@ -220,13 +237,15 @@ var SelectValue = reactExports.forwardRef(
220
237
  useLayoutEffect2(() => {
221
238
  onValueNodeHasChildrenChange(hasChildren);
222
239
  }, [onValueNodeHasChildrenChange, hasChildren]);
240
+ const showPlaceholder = shouldShowPlaceholder(context.value);
223
241
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
224
242
  Primitive.span,
225
243
  {
226
244
  ...valueProps,
245
+ asChild: showPlaceholder ? false : valueProps.asChild,
227
246
  ref: composedRefs,
228
247
  style: { pointerEvents: "none" },
229
- children: shouldShowPlaceholder(context.value) ? /* @__PURE__ */ jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, { children: placeholder }) : children
248
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(reactExports.Fragment, { children: showPlaceholder ? placeholder : children }, showPlaceholder ? "placeholder" : "value")
230
249
  }
231
250
  );
232
251
  }
@@ -241,37 +260,45 @@ var SelectIcon = reactExports.forwardRef(
241
260
  );
242
261
  SelectIcon.displayName = ICON_NAME;
243
262
  var PORTAL_NAME = "SelectPortal";
263
+ var [PortalProvider, usePortalContext] = createSelectContext(PORTAL_NAME, {
264
+ forceMount: void 0
265
+ });
244
266
  var SelectPortal = (props) => {
245
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Portal$1, { asChild: true, ...props });
267
+ const { __scopeSelect, forceMount, ...portalProps } = props;
268
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(PortalProvider, { scope: props.__scopeSelect, forceMount, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Portal, { asChild: true, ...portalProps }) });
246
269
  };
247
270
  SelectPortal.displayName = PORTAL_NAME;
248
271
  var CONTENT_NAME = "SelectContent";
249
272
  var SelectContent = reactExports.forwardRef(
250
273
  (props, forwardedRef) => {
274
+ const portalContext = usePortalContext(CONTENT_NAME, props.__scopeSelect);
275
+ const { forceMount = portalContext.forceMount, ...contentProps } = props;
251
276
  const context = useSelectContext(CONTENT_NAME, props.__scopeSelect);
252
277
  const [fragment, setFragment] = reactExports.useState();
253
278
  useLayoutEffect2(() => {
254
279
  setFragment(new DocumentFragment());
255
280
  }, []);
256
- if (!context.open) {
257
- const frag = fragment;
258
- return frag ? reactDomExports.createPortal(
259
- /* @__PURE__ */ jsxRuntimeExports.jsx(SelectContentProvider, { scope: props.__scopeSelect, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Collection.Slot, { scope: props.__scopeSelect, children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { children: props.children }) }) }),
260
- frag
261
- ) : null;
262
- }
263
- return /* @__PURE__ */ jsxRuntimeExports.jsx(SelectContentImpl, { ...props, ref: forwardedRef });
281
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Presence, { present: forceMount || context.open, children: ({ present }) => present ? /* @__PURE__ */ jsxRuntimeExports.jsx(SelectContentImpl, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsxRuntimeExports.jsx(SelectContentFragment, { ...contentProps, fragment }) });
264
282
  }
265
283
  );
266
284
  SelectContent.displayName = CONTENT_NAME;
285
+ var SelectContentFragment = reactExports.forwardRef((props, forwardedRef) => {
286
+ const { __scopeSelect, children, fragment } = props;
287
+ if (!fragment) return null;
288
+ return reactDomExports.createPortal(
289
+ /* @__PURE__ */ jsxRuntimeExports.jsx(SelectContentProvider, { scope: __scopeSelect, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Collection.Slot, { scope: __scopeSelect, children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref: forwardedRef, children }) }) }),
290
+ fragment
291
+ );
292
+ });
293
+ SelectContentFragment.displayName = "SelectContentFragment";
267
294
  var CONTENT_MARGIN = 10;
268
295
  var [SelectContentProvider, useSelectContentContext] = createSelectContext(CONTENT_NAME);
269
296
  var CONTENT_IMPL_NAME = "SelectContentImpl";
270
297
  var Slot = createSlot("SelectContent.RemoveScroll");
271
298
  var SelectContentImpl = reactExports.forwardRef(
272
299
  (props, forwardedRef) => {
300
+ const { __scopeSelect } = props;
273
301
  const {
274
- __scopeSelect,
275
302
  position = "item-aligned",
276
303
  onCloseAutoFocus,
277
304
  onEscapeKeyDown,
@@ -294,7 +321,7 @@ var SelectContentImpl = reactExports.forwardRef(
294
321
  const context = useSelectContext(CONTENT_NAME, __scopeSelect);
295
322
  const [content, setContent] = reactExports.useState(null);
296
323
  const [viewport, setViewport] = reactExports.useState(null);
297
- const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));
324
+ const composedRefs = useComposedRefs(forwardedRef, setContent);
298
325
  const [selectedItem, setSelectedItem] = reactExports.useState(null);
299
326
  const [selectedItemText, setSelectedItemText] = reactExports.useState(
300
327
  null
@@ -345,7 +372,7 @@ var SelectContentImpl = reactExports.forwardRef(
345
372
  if (pointerMoveDelta.x <= 10 && pointerMoveDelta.y <= 10) {
346
373
  event.preventDefault();
347
374
  } else {
348
- if (!content.contains(event.target)) {
375
+ if (!event.composedPath().includes(content)) {
349
376
  onOpenChange(false);
350
377
  }
351
378
  }
@@ -376,7 +403,7 @@ var SelectContentImpl = reactExports.forwardRef(
376
403
  const currentItem = enabledItems.find((item) => item.ref.current === document.activeElement);
377
404
  const nextItem = findNextItem(enabledItems, search, currentItem);
378
405
  if (nextItem) {
379
- setTimeout(() => nextItem.ref.current.focus());
406
+ setTimeout(() => nextItem.ref.current?.focus());
380
407
  }
381
408
  });
382
409
  const itemRefCallback = reactExports.useCallback(
@@ -508,7 +535,7 @@ var SelectItemAlignedPosition = reactExports.forwardRef((props, forwardedRef) =>
508
535
  const contentContext = useSelectContentContext(CONTENT_NAME, __scopeSelect);
509
536
  const [contentWrapper, setContentWrapper] = reactExports.useState(null);
510
537
  const [content, setContent] = reactExports.useState(null);
511
- const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));
538
+ const composedRefs = useComposedRefs(forwardedRef, setContent);
512
539
  const getItems = useCollection(__scopeSelect);
513
540
  const shouldExpandOnScrollRef = reactExports.useRef(false);
514
541
  const shouldRepositionRef = reactExports.useRef(true);
@@ -803,10 +830,10 @@ var SelectItem = reactExports.forwardRef(
803
830
  const isSelected = context.value === value;
804
831
  const [textValue, setTextValue] = reactExports.useState(textValueProp ?? "");
805
832
  const [isFocused, setIsFocused] = reactExports.useState(false);
806
- const composedRefs = useComposedRefs(
807
- forwardedRef,
833
+ const handleItemRefCallback = useCallbackRef(
808
834
  (node) => contentContext.itemRefCallback?.(node, value, disabled)
809
835
  );
836
+ const composedRefs = useComposedRefs(forwardedRef, handleItemRefCallback);
810
837
  const textId = useId();
811
838
  const pointerTypeRef = reactExports.useRef("touch");
812
839
  const handleSelect = () => {
@@ -815,11 +842,6 @@ var SelectItem = reactExports.forwardRef(
815
842
  context.onOpenChange(false);
816
843
  }
817
844
  };
818
- if (value === "") {
819
- throw new Error(
820
- "A <Select.Item /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder."
821
- );
822
- }
823
845
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
824
846
  SelectItemContextProvider,
825
847
  {
@@ -876,10 +898,19 @@ var SelectItem = reactExports.forwardRef(
876
898
  }
877
899
  }),
878
900
  onKeyDown: composeEventHandlers(itemProps.onKeyDown, (event) => {
901
+ if (disabled || event.target !== event.currentTarget) {
902
+ return;
903
+ }
879
904
  const isTypingAhead = contentContext.searchRef?.current !== "";
880
- if (isTypingAhead && event.key === " ") return;
881
- if (SELECTION_KEYS.includes(event.key)) handleSelect();
882
- if (event.key === " ") event.preventDefault();
905
+ if (isTypingAhead && event.key === " ") {
906
+ return;
907
+ }
908
+ if (SELECTION_KEYS.includes(event.key)) {
909
+ handleSelect();
910
+ }
911
+ if (event.key === " ") {
912
+ event.preventDefault();
913
+ }
883
914
  })
884
915
  }
885
916
  )
@@ -899,11 +930,14 @@ var SelectItemText = reactExports.forwardRef(
899
930
  const itemContext = useSelectItemContext(ITEM_TEXT_NAME, __scopeSelect);
900
931
  const nativeOptionsContext = useSelectNativeOptionsContext(ITEM_TEXT_NAME, __scopeSelect);
901
932
  const [itemTextNode, setItemTextNode] = reactExports.useState(null);
933
+ const handleItemTextRefCallback = useCallbackRef(
934
+ (node) => contentContext.itemTextRefCallback?.(node, itemContext.value, itemContext.disabled)
935
+ );
902
936
  const composedRefs = useComposedRefs(
903
937
  forwardedRef,
904
- (node) => setItemTextNode(node),
938
+ setItemTextNode,
905
939
  itemContext.onItemTextChange,
906
- (node) => contentContext.itemTextRefCallback?.(node, itemContext.value, itemContext.disabled)
940
+ handleItemTextRefCallback
907
941
  );
908
942
  const textContent = itemTextNode?.textContent;
909
943
  const nativeOption = reactExports.useMemo(
@@ -917,7 +951,7 @@ var SelectItemText = reactExports.forwardRef(
917
951
  }, [onNativeOptionAdd, onNativeOptionRemove, nativeOption]);
918
952
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
919
953
  /* @__PURE__ */ jsxRuntimeExports.jsx(Primitive.span, { id: itemContext.textId, ...itemTextProps, ref: composedRefs }),
920
- itemContext.isSelected && context.valueNode && !context.valueNodeHasChildren ? reactDomExports.createPortal(itemTextProps.children, context.valueNode) : null
954
+ itemContext.isSelected && context.valueNode && !context.valueNodeHasChildren && !shouldShowPlaceholder(context.value) ? reactDomExports.createPortal(itemTextProps.children, context.valueNode) : null
921
955
  ] });
922
956
  }
923
957
  );
@@ -1053,18 +1087,24 @@ var SelectArrow = reactExports.forwardRef(
1053
1087
  (props, forwardedRef) => {
1054
1088
  const { __scopeSelect, ...arrowProps } = props;
1055
1089
  const popperScope = usePopperScope(__scopeSelect);
1056
- const context = useSelectContext(ARROW_NAME, __scopeSelect);
1057
1090
  const contentContext = useSelectContentContext(ARROW_NAME, __scopeSelect);
1058
- return context.open && contentContext.position === "popper" ? /* @__PURE__ */ jsxRuntimeExports.jsx(Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef }) : null;
1091
+ return contentContext.position === "popper" ? /* @__PURE__ */ jsxRuntimeExports.jsx(Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef }) : null;
1059
1092
  }
1060
1093
  );
1061
1094
  SelectArrow.displayName = ARROW_NAME;
1062
1095
  var BUBBLE_INPUT_NAME = "SelectBubbleInput";
1063
1096
  var SelectBubbleInput = reactExports.forwardRef(
1064
- ({ __scopeSelect, value, ...props }, forwardedRef) => {
1097
+ ({ __scopeSelect, ...props }, forwardedRef) => {
1098
+ const context = useSelectContext(BUBBLE_INPUT_NAME, __scopeSelect);
1099
+ const { value, onValueChange, required, disabled, name, autoComplete, form } = context;
1100
+ const { nativeOptions, nativeSelectKey } = context;
1065
1101
  const ref = reactExports.useRef(null);
1066
1102
  const composedRefs = useComposedRefs(forwardedRef, ref);
1067
- const prevValue = usePrevious(value);
1103
+ const selectValue = value ?? "";
1104
+ const prevValue = usePrevious(selectValue);
1105
+ const hasEmptyValueOption = Array.from(nativeOptions).some(
1106
+ (option) => (option.props.value ?? "") === ""
1107
+ );
1068
1108
  reactExports.useEffect(() => {
1069
1109
  const select = ref.current;
1070
1110
  if (!select) return;
@@ -1074,24 +1114,40 @@ var SelectBubbleInput = reactExports.forwardRef(
1074
1114
  "value"
1075
1115
  );
1076
1116
  const setValue = descriptor.set;
1077
- if (prevValue !== value && setValue) {
1117
+ if (prevValue !== selectValue && setValue) {
1078
1118
  const event = new Event("change", { bubbles: true });
1079
- setValue.call(select, value);
1119
+ setValue.call(select, selectValue);
1080
1120
  select.dispatchEvent(event);
1081
1121
  }
1082
- }, [prevValue, value]);
1083
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
1122
+ }, [prevValue, selectValue]);
1123
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs(
1084
1124
  Primitive.select,
1085
1125
  {
1126
+ "aria-hidden": true,
1127
+ required,
1128
+ tabIndex: -1,
1129
+ name,
1130
+ autoComplete,
1131
+ disabled,
1132
+ form,
1133
+ onChange: (event) => onValueChange(event.target.value),
1086
1134
  ...props,
1087
1135
  style: { ...VISUALLY_HIDDEN_STYLES, ...props.style },
1088
1136
  ref: composedRefs,
1089
- defaultValue: value
1090
- }
1137
+ defaultValue: selectValue,
1138
+ children: [
1139
+ shouldShowPlaceholder(value) && !hasEmptyValueOption ? /* @__PURE__ */ jsxRuntimeExports.jsx("option", { value: "" }) : null,
1140
+ Array.from(nativeOptions)
1141
+ ]
1142
+ },
1143
+ nativeSelectKey
1091
1144
  );
1092
1145
  }
1093
1146
  );
1094
1147
  SelectBubbleInput.displayName = BUBBLE_INPUT_NAME;
1148
+ function isFunction(value) {
1149
+ return typeof value === "function";
1150
+ }
1095
1151
  function shouldShowPlaceholder(value) {
1096
1152
  return value === "" || value === void 0;
1097
1153
  }
@@ -1135,29 +1191,17 @@ function findNextItem(items, search, currentItem) {
1135
1191
  function wrapArray(array, startIndex) {
1136
1192
  return array.map((_, index) => array[(startIndex + index) % array.length]);
1137
1193
  }
1138
- var Root2 = Select;
1139
- var Trigger = SelectTrigger;
1140
- var Value = SelectValue;
1141
- var Icon = SelectIcon;
1142
- var Portal = SelectPortal;
1143
- var Content2 = SelectContent;
1144
- var Viewport = SelectViewport;
1145
- var Item = SelectItem;
1146
- var ItemText = SelectItemText;
1147
- var ItemIndicator = SelectItemIndicator;
1148
- var ScrollUpButton = SelectScrollUpButton;
1149
- var ScrollDownButton = SelectScrollDownButton;
1150
1194
  export {
1151
- Content2 as C,
1152
- Icon as I,
1153
- Portal as P,
1154
- Root2 as R,
1155
- ScrollUpButton as S,
1156
- Trigger as T,
1157
- Value as V,
1158
- Viewport as a,
1159
- Item as b,
1160
- ItemIndicator as c,
1161
- ItemText as d,
1162
- ScrollDownButton as e
1195
+ Select as S,
1196
+ SelectTrigger as a,
1197
+ SelectIcon as b,
1198
+ SelectValue as c,
1199
+ SelectPortal as d,
1200
+ SelectContent as e,
1201
+ SelectViewport as f,
1202
+ SelectItem as g,
1203
+ SelectItemIndicator as h,
1204
+ SelectItemText as i,
1205
+ SelectScrollUpButton as j,
1206
+ SelectScrollDownButton as k
1163
1207
  };