sunpeak 0.9.6 → 0.9.8

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.
@@ -57,19 +57,38 @@ class OpenAiProvider {
57
57
  };
58
58
  }
59
59
  getAPI() {
60
- var _a2, _b2, _c, _d, _e, _f, _g;
61
60
  if (typeof window === "undefined" || !window.openai) {
62
61
  return null;
63
62
  }
64
- const api = window.openai;
65
63
  return {
66
- callTool: (_a2 = api.callTool) == null ? void 0 : _a2.bind(api),
67
- sendFollowUpMessage: (_b2 = api.sendFollowUpMessage) == null ? void 0 : _b2.bind(api),
68
- openExternal: (_c = api.openExternal) == null ? void 0 : _c.bind(api),
69
- requestDisplayMode: (_d = api.requestDisplayMode) == null ? void 0 : _d.bind(api),
70
- requestModal: (_e = api.requestModal) == null ? void 0 : _e.bind(api),
71
- notifyIntrinsicHeight: (_f = api.notifyIntrinsicHeight) == null ? void 0 : _f.bind(api),
72
- setWidgetState: (_g = api.setWidgetState) == null ? void 0 : _g.bind(api)
64
+ callTool: (...args) => {
65
+ var _a2, _b2;
66
+ return (_b2 = (_a2 = window.openai) == null ? void 0 : _a2.callTool) == null ? void 0 : _b2.call(_a2, ...args);
67
+ },
68
+ sendFollowUpMessage: (...args) => {
69
+ var _a2, _b2;
70
+ return (_b2 = (_a2 = window.openai) == null ? void 0 : _a2.sendFollowUpMessage) == null ? void 0 : _b2.call(_a2, ...args);
71
+ },
72
+ openExternal: (...args) => {
73
+ var _a2, _b2;
74
+ return (_b2 = (_a2 = window.openai) == null ? void 0 : _a2.openExternal) == null ? void 0 : _b2.call(_a2, ...args);
75
+ },
76
+ requestDisplayMode: (...args) => {
77
+ var _a2, _b2;
78
+ return (_b2 = (_a2 = window.openai) == null ? void 0 : _a2.requestDisplayMode) == null ? void 0 : _b2.call(_a2, ...args);
79
+ },
80
+ requestModal: (...args) => {
81
+ var _a2, _b2;
82
+ return (_b2 = (_a2 = window.openai) == null ? void 0 : _a2.requestModal) == null ? void 0 : _b2.call(_a2, ...args);
83
+ },
84
+ notifyIntrinsicHeight: (...args) => {
85
+ var _a2, _b2;
86
+ return (_b2 = (_a2 = window.openai) == null ? void 0 : _a2.notifyIntrinsicHeight) == null ? void 0 : _b2.call(_a2, ...args);
87
+ },
88
+ setWidgetState: (...args) => {
89
+ var _a2, _b2;
90
+ return (_b2 = (_a2 = window.openai) == null ? void 0 : _a2.setWidgetState) == null ? void 0 : _b2.call(_a2, ...args);
91
+ }
73
92
  };
74
93
  }
75
94
  }
@@ -172,8 +191,17 @@ function useWidgetState(defaultState) {
172
191
  }
173
192
  return typeof defaultState === "function" ? defaultState() : defaultState ?? null;
174
193
  });
194
+ const hasSentInitialState = React.useRef(false);
195
+ React.useEffect(() => {
196
+ if (!hasSentInitialState.current && widgetStateFromProvider == null && widgetState != null && (api == null ? void 0 : api.setWidgetState)) {
197
+ hasSentInitialState.current = true;
198
+ api.setWidgetState(widgetState);
199
+ }
200
+ }, [api, widgetState, widgetStateFromProvider]);
175
201
  React.useEffect(() => {
176
- _setWidgetState(widgetStateFromProvider);
202
+ if (widgetStateFromProvider != null) {
203
+ _setWidgetState(widgetStateFromProvider);
204
+ }
177
205
  }, [widgetStateFromProvider]);
178
206
  const setWidgetState = React.useCallback(
179
207
  (state) => {
@@ -5625,7 +5653,7 @@ const useEscCloseStack = (listening, cb) => {
5625
5653
  }, [id, listening, latestCallback]);
5626
5654
  };
5627
5655
  const __vite_import_meta_env__ = { "DEV": false, "MODE": "production" };
5628
- const META_ENV = typeof { url: typeof document === "undefined" ? require("url").pathToFileURL(__filename).href : _documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === "SCRIPT" && _documentCurrentScript.src || new URL("simulator-url-BStCoFTv.cjs", document.baseURI).href } !== "undefined" ? __vite_import_meta_env__ : void 0;
5656
+ const META_ENV = typeof { url: typeof document === "undefined" ? require("url").pathToFileURL(__filename).href : _documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === "SCRIPT" && _documentCurrentScript.src || new URL("simulator-url-BpCa95pE.cjs", document.baseURI).href } !== "undefined" ? __vite_import_meta_env__ : void 0;
5629
5657
  const NODE_ENV = typeof process !== "undefined" && ((_a = process.env) == null ? void 0 : _a.NODE_ENV) ? (_b = process.env) == null ? void 0 : _b.NODE_ENV : "production";
5630
5658
  const isDev = NODE_ENV === "development" || !!(META_ENV == null ? void 0 : META_ENV.DEV);
5631
5659
  const isJSDomLike = typeof navigator !== "undefined" && /(jsdom|happy-dom)/i.test(navigator.userAgent) || typeof globalThis.happyDOM === "object";
@@ -7520,9 +7548,11 @@ function SidebarTextarea({
7520
7548
  onFocus,
7521
7549
  onBlur,
7522
7550
  placeholder,
7523
- rows = 2,
7551
+ maxRows = 8,
7524
7552
  error
7525
7553
  }) {
7554
+ const contentRows = (value == null ? void 0 : value.split("\n").length) ?? 1;
7555
+ const rows = Math.min(contentRows, maxRows);
7526
7556
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-0.5", children: [
7527
7557
  /* @__PURE__ */ jsxRuntime.jsx(
7528
7558
  Textarea,
@@ -7534,7 +7564,8 @@ function SidebarTextarea({
7534
7564
  placeholder,
7535
7565
  rows,
7536
7566
  size: "2xs",
7537
- className: "text-[10px] font-mono",
7567
+ className: "text-[10px] font-mono resize-y",
7568
+ style: { whiteSpace: "pre", overflowX: "auto", overflowWrap: "normal" },
7538
7569
  invalid: !!error
7539
7570
  }
7540
7571
  ),
@@ -8376,8 +8407,8 @@ class MockOpenAI {
8376
8407
  console.log("Mock notifyIntrinsicHeight:", height);
8377
8408
  }
8378
8409
  async setWidgetState(state) {
8379
- this.widgetState = state;
8380
- this.emitUpdate({ widgetState: state });
8410
+ this.widgetState = { ...this.widgetState, ...state };
8411
+ this.emitUpdate({ widgetState: this.widgetState });
8381
8412
  }
8382
8413
  setTheme(theme) {
8383
8414
  this.theme = theme;
@@ -8588,11 +8619,17 @@ function ChatGPTSimulator({
8588
8619
  // eslint-disable-next-line react-hooks/exhaustive-deps -- only initialize once
8589
8620
  []
8590
8621
  );
8622
+ if (typeof window !== "undefined") {
8623
+ window.openai = mock;
8624
+ resetProviderCache();
8625
+ }
8591
8626
  React.useEffect(() => {
8592
8627
  var _a2, _b2;
8593
8628
  if (selectedSim) {
8594
8629
  mock.toolInput = ((_a2 = selectedSim.callToolRequestParams) == null ? void 0 : _a2.arguments) ?? {};
8595
- mock.widgetState = selectedSim.widgetState ?? null;
8630
+ if (selectedSim.widgetState !== void 0) {
8631
+ mock.setWidgetStateExternal(selectedSim.widgetState);
8632
+ }
8596
8633
  mock.toolOutput = ((_b2 = selectedSim.callToolResult) == null ? void 0 : _b2.structuredContent) ?? null;
8597
8634
  }
8598
8635
  }, [selectedSimulationName, selectedSim, mock]);
@@ -8604,7 +8641,7 @@ function ChatGPTSimulator({
8604
8641
  const safeArea = useSafeArea();
8605
8642
  const view = useView();
8606
8643
  const toolInput = useToolInput();
8607
- const [widgetState] = useWidgetState();
8644
+ const widgetState = useWidgetGlobal("widgetState");
8608
8645
  const toolResponseMetadata = useToolResponseMetadata();
8609
8646
  const toolOutput = useWidgetProps();
8610
8647
  const [toolInputJson, setToolInputJson] = React.useState(
@@ -8628,12 +8665,6 @@ function ChatGPTSimulator({
8628
8665
  const [toolResponseMetadataError, setToolResponseMetadataError] = React.useState("");
8629
8666
  const [widgetStateError, setWidgetStateError] = React.useState("");
8630
8667
  const [viewParamsError, setViewParamsError] = React.useState("");
8631
- React.useLayoutEffect(() => {
8632
- if (mock && typeof window !== "undefined") {
8633
- window.openai = mock;
8634
- resetProviderCache();
8635
- }
8636
- }, [mock]);
8637
8668
  React.useEffect(() => {
8638
8669
  if (mock) {
8639
8670
  mock.emitUpdate({
@@ -8722,11 +8753,15 @@ function ChatGPTSimulator({
8722
8753
  SimpleSidebar,
8723
8754
  {
8724
8755
  controls: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", children: [
8725
- simulationNames.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(SidebarControl, { label: "Simulation", children: /* @__PURE__ */ jsxRuntime.jsx(
8756
+ simulationNames.length > 1 && /* @__PURE__ */ jsxRuntime.jsx(SidebarControl, { label: "Simulation", children: /* @__PURE__ */ jsxRuntime.jsx(
8726
8757
  SidebarSelect,
8727
8758
  {
8728
8759
  value: selectedSimulationName,
8729
- onChange: (value) => setSelectedSimulationName(value),
8760
+ onChange: (value) => {
8761
+ const newSim = simulations[value];
8762
+ mock.setWidgetStateExternal((newSim == null ? void 0 : newSim.widgetState) ?? null);
8763
+ setSelectedSimulationName(value);
8764
+ },
8730
8765
  options: simulationNames.map((name) => {
8731
8766
  const sim = simulations[name];
8732
8767
  const resourceTitle = sim.resource.title || sim.resource.name;
@@ -8751,237 +8786,254 @@ function ChatGPTSimulator({
8751
8786
  ]
8752
8787
  }
8753
8788
  ) }),
8754
- /* @__PURE__ */ jsxRuntime.jsx(SidebarControl, { label: "Theme", children: /* @__PURE__ */ jsxRuntime.jsx(
8755
- SidebarToggle,
8756
- {
8757
- value: theme,
8758
- onChange: (value) => mock.setTheme(value),
8759
- options: [
8760
- { value: "light", label: "Light" },
8761
- { value: "dark", label: "Dark" }
8762
- ]
8763
- }
8764
- ) }),
8765
- /* @__PURE__ */ jsxRuntime.jsx(SidebarControl, { label: "Display Mode", children: /* @__PURE__ */ jsxRuntime.jsx(
8766
- SidebarToggle,
8767
- {
8768
- value: displayMode,
8769
- onChange: (value) => {
8770
- const newMode = value;
8771
- if (isMobileWidth(screenWidth) && newMode === "pip") {
8772
- mock.setDisplayMode("fullscreen");
8773
- } else {
8774
- mock.setDisplayMode(newMode);
8775
- }
8776
- },
8777
- options: [
8778
- { value: "inline", label: "Inline" },
8779
- { value: "pip", label: "PiP" },
8780
- { value: "fullscreen", label: "Full" }
8781
- ]
8782
- }
8783
- ) }),
8784
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-2 gap-2", children: [
8785
- /* @__PURE__ */ jsxRuntime.jsx(SidebarControl, { label: "Locale", children: /* @__PURE__ */ jsxRuntime.jsx(
8786
- SidebarInput,
8789
+ /* @__PURE__ */ jsxRuntime.jsx(SidebarCollapsibleControl, { label: "Runtime Globals", defaultCollapsed: false, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", children: [
8790
+ /* @__PURE__ */ jsxRuntime.jsx(SidebarControl, { label: "Theme", children: /* @__PURE__ */ jsxRuntime.jsx(
8791
+ SidebarToggle,
8787
8792
  {
8788
- value: locale,
8789
- onChange: (value) => mock.setLocale(value),
8790
- placeholder: "e.g. en-US"
8793
+ value: theme,
8794
+ onChange: (value) => mock.setTheme(value),
8795
+ options: [
8796
+ { value: "light", label: "Light" },
8797
+ { value: "dark", label: "Dark" }
8798
+ ]
8791
8799
  }
8792
8800
  ) }),
8793
- /* @__PURE__ */ jsxRuntime.jsx(SidebarControl, { label: "Max Height (PiP)", children: /* @__PURE__ */ jsxRuntime.jsx(
8794
- SidebarInput,
8801
+ /* @__PURE__ */ jsxRuntime.jsx(SidebarControl, { label: "Display Mode", children: /* @__PURE__ */ jsxRuntime.jsx(
8802
+ SidebarToggle,
8795
8803
  {
8796
- type: "number",
8797
- value: displayMode === "pip" && maxHeight !== void 0 ? String(maxHeight) : "",
8804
+ value: displayMode,
8798
8805
  onChange: (value) => {
8799
- if (displayMode === "pip") {
8800
- mock.setMaxHeight(value ? Number(value) : 480);
8806
+ const newMode = value;
8807
+ if (isMobileWidth(screenWidth) && newMode === "pip") {
8808
+ mock.setDisplayMode("fullscreen");
8809
+ } else {
8810
+ mock.setDisplayMode(newMode);
8801
8811
  }
8802
8812
  },
8803
- placeholder: displayMode === "pip" ? "480" : "-",
8804
- disabled: displayMode !== "pip"
8805
- }
8806
- ) })
8807
- ] }),
8808
- /* @__PURE__ */ jsxRuntime.jsx(SidebarControl, { label: "User Agent - Device", children: /* @__PURE__ */ jsxRuntime.jsx(
8809
- SidebarSelect,
8810
- {
8811
- value: (userAgent == null ? void 0 : userAgent.device.type) ?? "desktop",
8812
- onChange: (value) => {
8813
- const deviceType = value;
8814
- let capabilities;
8815
- switch (deviceType) {
8816
- case "mobile":
8817
- capabilities = { hover: false, touch: true };
8818
- break;
8819
- case "tablet":
8820
- capabilities = { hover: false, touch: true };
8821
- break;
8822
- case "desktop":
8823
- capabilities = { hover: true, touch: false };
8824
- break;
8825
- case "unknown":
8826
- default:
8827
- capabilities = { hover: true, touch: false };
8828
- break;
8829
- }
8830
- mock.setUserAgent({
8831
- ...userAgent,
8832
- device: { type: deviceType },
8833
- capabilities
8834
- });
8835
- },
8836
- options: [
8837
- { value: "mobile", label: "Mobile" },
8838
- { value: "tablet", label: "Tablet" },
8839
- { value: "desktop", label: "Desktop" },
8840
- { value: "unknown", label: "Unknown" }
8841
- ]
8842
- }
8843
- ) }),
8844
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pl-4", children: /* @__PURE__ */ jsxRuntime.jsx(SidebarControl, { label: "Capabilities", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-2", children: [
8845
- /* @__PURE__ */ jsxRuntime.jsx(
8846
- SidebarCheckbox,
8847
- {
8848
- checked: (userAgent == null ? void 0 : userAgent.capabilities.hover) ?? true,
8849
- onChange: (checked) => mock.setUserAgent({
8850
- ...userAgent,
8851
- device: (userAgent == null ? void 0 : userAgent.device) ?? { type: "desktop" },
8852
- capabilities: {
8853
- hover: checked,
8854
- touch: (userAgent == null ? void 0 : userAgent.capabilities.touch) ?? false
8855
- }
8856
- }),
8857
- label: "Hover"
8813
+ options: [
8814
+ { value: "inline", label: "Inline" },
8815
+ { value: "pip", label: "PiP" },
8816
+ { value: "fullscreen", label: "Full" }
8817
+ ]
8858
8818
  }
8859
- ),
8860
- /* @__PURE__ */ jsxRuntime.jsx(
8861
- SidebarCheckbox,
8862
- {
8863
- checked: (userAgent == null ? void 0 : userAgent.capabilities.touch) ?? false,
8864
- onChange: (checked) => mock.setUserAgent({
8865
- ...userAgent,
8866
- device: (userAgent == null ? void 0 : userAgent.device) ?? { type: "desktop" },
8867
- capabilities: {
8868
- hover: (userAgent == null ? void 0 : userAgent.capabilities.hover) ?? true,
8869
- touch: checked
8870
- }
8871
- }),
8872
- label: "Touch"
8873
- }
8874
- )
8875
- ] }) }) }),
8876
- /* @__PURE__ */ jsxRuntime.jsx(SidebarControl, { label: "Safe Area Insets", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-2 gap-1", children: [
8877
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-0.5", children: [
8878
- /* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-[9px] text-secondary", children: "Top" }),
8879
- /* @__PURE__ */ jsxRuntime.jsx(
8819
+ ) }),
8820
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-2 gap-2", children: [
8821
+ /* @__PURE__ */ jsxRuntime.jsx(SidebarControl, { label: "Locale", children: /* @__PURE__ */ jsxRuntime.jsx(
8880
8822
  SidebarInput,
8881
8823
  {
8882
- type: "number",
8883
- value: String((safeArea == null ? void 0 : safeArea.insets.top) ?? 0),
8884
- onChange: (value) => mock.setSafeArea({
8885
- insets: {
8886
- ...safeArea == null ? void 0 : safeArea.insets,
8887
- top: Number(value),
8888
- bottom: (safeArea == null ? void 0 : safeArea.insets.bottom) ?? 0,
8889
- left: (safeArea == null ? void 0 : safeArea.insets.left) ?? 0,
8890
- right: (safeArea == null ? void 0 : safeArea.insets.right) ?? 0
8891
- }
8892
- })
8824
+ value: locale,
8825
+ onChange: (value) => mock.setLocale(value),
8826
+ placeholder: "e.g. en-US"
8893
8827
  }
8894
- )
8895
- ] }),
8896
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-0.5", children: [
8897
- /* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-[9px] text-secondary", children: "Bottom" }),
8898
- /* @__PURE__ */ jsxRuntime.jsx(
8828
+ ) }),
8829
+ /* @__PURE__ */ jsxRuntime.jsx(SidebarControl, { label: "Max Height (PiP)", children: /* @__PURE__ */ jsxRuntime.jsx(
8899
8830
  SidebarInput,
8900
8831
  {
8901
8832
  type: "number",
8902
- value: String((safeArea == null ? void 0 : safeArea.insets.bottom) ?? 0),
8903
- onChange: (value) => mock.setSafeArea({
8904
- insets: {
8905
- ...safeArea == null ? void 0 : safeArea.insets,
8906
- top: (safeArea == null ? void 0 : safeArea.insets.top) ?? 0,
8907
- bottom: Number(value),
8908
- left: (safeArea == null ? void 0 : safeArea.insets.left) ?? 0,
8909
- right: (safeArea == null ? void 0 : safeArea.insets.right) ?? 0
8833
+ value: displayMode === "pip" && maxHeight !== void 0 ? String(maxHeight) : "",
8834
+ onChange: (value) => {
8835
+ if (displayMode === "pip") {
8836
+ mock.setMaxHeight(value ? Number(value) : 480);
8910
8837
  }
8911
- })
8838
+ },
8839
+ placeholder: displayMode === "pip" ? "480" : "-",
8840
+ disabled: displayMode !== "pip"
8912
8841
  }
8913
- )
8842
+ ) })
8914
8843
  ] }),
8915
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-0.5", children: [
8916
- /* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-[9px] text-secondary", children: "Left" }),
8844
+ /* @__PURE__ */ jsxRuntime.jsx(SidebarControl, { label: "User Agent - Device", children: /* @__PURE__ */ jsxRuntime.jsx(
8845
+ SidebarSelect,
8846
+ {
8847
+ value: (userAgent == null ? void 0 : userAgent.device.type) ?? "desktop",
8848
+ onChange: (value) => {
8849
+ const deviceType = value;
8850
+ let capabilities;
8851
+ switch (deviceType) {
8852
+ case "mobile":
8853
+ capabilities = { hover: false, touch: true };
8854
+ break;
8855
+ case "tablet":
8856
+ capabilities = { hover: false, touch: true };
8857
+ break;
8858
+ case "desktop":
8859
+ capabilities = { hover: true, touch: false };
8860
+ break;
8861
+ case "unknown":
8862
+ default:
8863
+ capabilities = { hover: true, touch: false };
8864
+ break;
8865
+ }
8866
+ mock.setUserAgent({
8867
+ ...userAgent,
8868
+ device: { type: deviceType },
8869
+ capabilities
8870
+ });
8871
+ },
8872
+ options: [
8873
+ { value: "mobile", label: "Mobile" },
8874
+ { value: "tablet", label: "Tablet" },
8875
+ { value: "desktop", label: "Desktop" },
8876
+ { value: "unknown", label: "Unknown" }
8877
+ ]
8878
+ }
8879
+ ) }),
8880
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pl-4", children: /* @__PURE__ */ jsxRuntime.jsx(SidebarControl, { label: "Capabilities", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-2", children: [
8917
8881
  /* @__PURE__ */ jsxRuntime.jsx(
8918
- SidebarInput,
8882
+ SidebarCheckbox,
8919
8883
  {
8920
- type: "number",
8921
- value: String((safeArea == null ? void 0 : safeArea.insets.left) ?? 0),
8922
- onChange: (value) => mock.setSafeArea({
8923
- insets: {
8924
- ...safeArea == null ? void 0 : safeArea.insets,
8925
- top: (safeArea == null ? void 0 : safeArea.insets.top) ?? 0,
8926
- bottom: (safeArea == null ? void 0 : safeArea.insets.bottom) ?? 0,
8927
- left: Number(value),
8928
- right: (safeArea == null ? void 0 : safeArea.insets.right) ?? 0
8884
+ checked: (userAgent == null ? void 0 : userAgent.capabilities.hover) ?? true,
8885
+ onChange: (checked) => mock.setUserAgent({
8886
+ ...userAgent,
8887
+ device: (userAgent == null ? void 0 : userAgent.device) ?? { type: "desktop" },
8888
+ capabilities: {
8889
+ hover: checked,
8890
+ touch: (userAgent == null ? void 0 : userAgent.capabilities.touch) ?? false
8929
8891
  }
8930
- })
8892
+ }),
8893
+ label: "Hover"
8931
8894
  }
8932
- )
8933
- ] }),
8934
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-0.5", children: [
8935
- /* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-[9px] text-secondary", children: "Right" }),
8895
+ ),
8936
8896
  /* @__PURE__ */ jsxRuntime.jsx(
8937
- SidebarInput,
8897
+ SidebarCheckbox,
8938
8898
  {
8939
- type: "number",
8940
- value: String((safeArea == null ? void 0 : safeArea.insets.right) ?? 0),
8941
- onChange: (value) => mock.setSafeArea({
8942
- insets: {
8943
- ...safeArea == null ? void 0 : safeArea.insets,
8944
- top: (safeArea == null ? void 0 : safeArea.insets.top) ?? 0,
8945
- bottom: (safeArea == null ? void 0 : safeArea.insets.bottom) ?? 0,
8946
- left: (safeArea == null ? void 0 : safeArea.insets.left) ?? 0,
8947
- right: Number(value)
8899
+ checked: (userAgent == null ? void 0 : userAgent.capabilities.touch) ?? false,
8900
+ onChange: (checked) => mock.setUserAgent({
8901
+ ...userAgent,
8902
+ device: (userAgent == null ? void 0 : userAgent.device) ?? { type: "desktop" },
8903
+ capabilities: {
8904
+ hover: (userAgent == null ? void 0 : userAgent.capabilities.hover) ?? true,
8905
+ touch: checked
8948
8906
  }
8949
- })
8907
+ }),
8908
+ label: "Touch"
8950
8909
  }
8951
8910
  )
8952
- ] })
8911
+ ] }) }) }),
8912
+ /* @__PURE__ */ jsxRuntime.jsx(SidebarControl, { label: "Safe Area Insets", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-4 gap-1", children: [
8913
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-0.5", children: [
8914
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-secondary", children: "↑" }),
8915
+ /* @__PURE__ */ jsxRuntime.jsx(
8916
+ SidebarInput,
8917
+ {
8918
+ type: "number",
8919
+ value: String((safeArea == null ? void 0 : safeArea.insets.top) ?? 0),
8920
+ onChange: (value) => mock.setSafeArea({
8921
+ insets: {
8922
+ ...safeArea == null ? void 0 : safeArea.insets,
8923
+ top: Number(value),
8924
+ bottom: (safeArea == null ? void 0 : safeArea.insets.bottom) ?? 0,
8925
+ left: (safeArea == null ? void 0 : safeArea.insets.left) ?? 0,
8926
+ right: (safeArea == null ? void 0 : safeArea.insets.right) ?? 0
8927
+ }
8928
+ })
8929
+ }
8930
+ )
8931
+ ] }),
8932
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-0.5", children: [
8933
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-secondary", children: "↓" }),
8934
+ /* @__PURE__ */ jsxRuntime.jsx(
8935
+ SidebarInput,
8936
+ {
8937
+ type: "number",
8938
+ value: String((safeArea == null ? void 0 : safeArea.insets.bottom) ?? 0),
8939
+ onChange: (value) => mock.setSafeArea({
8940
+ insets: {
8941
+ ...safeArea == null ? void 0 : safeArea.insets,
8942
+ top: (safeArea == null ? void 0 : safeArea.insets.top) ?? 0,
8943
+ bottom: Number(value),
8944
+ left: (safeArea == null ? void 0 : safeArea.insets.left) ?? 0,
8945
+ right: (safeArea == null ? void 0 : safeArea.insets.right) ?? 0
8946
+ }
8947
+ })
8948
+ }
8949
+ )
8950
+ ] }),
8951
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-0.5", children: [
8952
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-secondary", children: "←" }),
8953
+ /* @__PURE__ */ jsxRuntime.jsx(
8954
+ SidebarInput,
8955
+ {
8956
+ type: "number",
8957
+ value: String((safeArea == null ? void 0 : safeArea.insets.left) ?? 0),
8958
+ onChange: (value) => mock.setSafeArea({
8959
+ insets: {
8960
+ ...safeArea == null ? void 0 : safeArea.insets,
8961
+ top: (safeArea == null ? void 0 : safeArea.insets.top) ?? 0,
8962
+ bottom: (safeArea == null ? void 0 : safeArea.insets.bottom) ?? 0,
8963
+ left: Number(value),
8964
+ right: (safeArea == null ? void 0 : safeArea.insets.right) ?? 0
8965
+ }
8966
+ })
8967
+ }
8968
+ )
8969
+ ] }),
8970
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-0.5", children: [
8971
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-secondary", children: "→" }),
8972
+ /* @__PURE__ */ jsxRuntime.jsx(
8973
+ SidebarInput,
8974
+ {
8975
+ type: "number",
8976
+ value: String((safeArea == null ? void 0 : safeArea.insets.right) ?? 0),
8977
+ onChange: (value) => mock.setSafeArea({
8978
+ insets: {
8979
+ ...safeArea == null ? void 0 : safeArea.insets,
8980
+ top: (safeArea == null ? void 0 : safeArea.insets.top) ?? 0,
8981
+ bottom: (safeArea == null ? void 0 : safeArea.insets.bottom) ?? 0,
8982
+ left: (safeArea == null ? void 0 : safeArea.insets.left) ?? 0,
8983
+ right: Number(value)
8984
+ }
8985
+ })
8986
+ }
8987
+ )
8988
+ ] })
8989
+ ] }) }),
8990
+ /* @__PURE__ */ jsxRuntime.jsx(SidebarControl, { label: "View Mode", children: /* @__PURE__ */ jsxRuntime.jsx(
8991
+ SidebarSelect,
8992
+ {
8993
+ value: (view == null ? void 0 : view.mode) ?? "default",
8994
+ onChange: (value) => mock.setView(
8995
+ value === "default" ? null : {
8996
+ mode: value,
8997
+ params: view == null ? void 0 : view.params
8998
+ }
8999
+ ),
9000
+ options: [
9001
+ { value: "default", label: "Default (null)" },
9002
+ { value: "modal", label: "Modal" }
9003
+ ]
9004
+ }
9005
+ ) }),
9006
+ view && view.mode !== "default" && /* @__PURE__ */ jsxRuntime.jsx(SidebarControl, { label: "View Params (JSON)", children: /* @__PURE__ */ jsxRuntime.jsx(
9007
+ SidebarTextarea,
9008
+ {
9009
+ value: viewParamsJson,
9010
+ onChange: (json) => validateJSON(json, setViewParamsJson, setViewParamsError),
9011
+ onFocus: () => setEditingField("viewParams"),
9012
+ onBlur: () => commitJSON(viewParamsJson, setViewParamsError, (parsed) => {
9013
+ if (view) {
9014
+ mock.setView({ ...view, params: parsed ?? void 0 });
9015
+ }
9016
+ }),
9017
+ error: viewParamsError,
9018
+ maxRows: 2
9019
+ }
9020
+ ) }),
9021
+ /* @__PURE__ */ jsxRuntime.jsx(SidebarCollapsibleControl, { label: "Widget State (JSON)", defaultCollapsed: false, children: /* @__PURE__ */ jsxRuntime.jsx(
9022
+ SidebarTextarea,
9023
+ {
9024
+ value: widgetStateJson,
9025
+ onChange: (json) => validateJSON(json, setWidgetStateJson, setWidgetStateError),
9026
+ onFocus: () => setEditingField("widgetState"),
9027
+ onBlur: () => commitJSON(
9028
+ widgetStateJson,
9029
+ setWidgetStateError,
9030
+ (parsed) => mock.setWidgetStateExternal(parsed)
9031
+ ),
9032
+ error: widgetStateError,
9033
+ maxRows: 8
9034
+ }
9035
+ ) })
8953
9036
  ] }) }),
8954
- /* @__PURE__ */ jsxRuntime.jsx(SidebarControl, { label: "View Mode", children: /* @__PURE__ */ jsxRuntime.jsx(
8955
- SidebarSelect,
8956
- {
8957
- value: (view == null ? void 0 : view.mode) ?? "default",
8958
- onChange: (value) => mock.setView(
8959
- value === "default" ? null : {
8960
- mode: value,
8961
- params: view == null ? void 0 : view.params
8962
- }
8963
- ),
8964
- options: [
8965
- { value: "default", label: "Default (null)" },
8966
- { value: "modal", label: "Modal" }
8967
- ]
8968
- }
8969
- ) }),
8970
- view && view.mode !== "default" && /* @__PURE__ */ jsxRuntime.jsx(SidebarControl, { label: "View Params (JSON)", children: /* @__PURE__ */ jsxRuntime.jsx(
8971
- SidebarTextarea,
8972
- {
8973
- value: viewParamsJson,
8974
- onChange: (json) => validateJSON(json, setViewParamsJson, setViewParamsError),
8975
- onFocus: () => setEditingField("viewParams"),
8976
- onBlur: () => commitJSON(viewParamsJson, setViewParamsError, (parsed) => {
8977
- if (view) {
8978
- mock.setView({ ...view, params: parsed ?? void 0 });
8979
- }
8980
- }),
8981
- error: viewParamsError,
8982
- rows: 2
8983
- }
8984
- ) }),
8985
9037
  /* @__PURE__ */ jsxRuntime.jsx(SidebarCollapsibleControl, { label: "Tool Input (JSON)", children: /* @__PURE__ */ jsxRuntime.jsx(
8986
9038
  SidebarTextarea,
8987
9039
  {
@@ -8994,7 +9046,7 @@ function ChatGPTSimulator({
8994
9046
  (parsed) => mock.setToolInput(parsed ?? {})
8995
9047
  ),
8996
9048
  error: toolInputError,
8997
- rows: 8
9049
+ maxRows: 8
8998
9050
  }
8999
9051
  ) }),
9000
9052
  /* @__PURE__ */ jsxRuntime.jsx(SidebarCollapsibleControl, { label: "Tool Output (JSON)", children: /* @__PURE__ */ jsxRuntime.jsx(
@@ -9009,7 +9061,7 @@ function ChatGPTSimulator({
9009
9061
  (parsed) => mock.setToolOutput(parsed)
9010
9062
  ),
9011
9063
  error: toolOutputError,
9012
- rows: 8
9064
+ maxRows: 8
9013
9065
  }
9014
9066
  ) }),
9015
9067
  /* @__PURE__ */ jsxRuntime.jsx(SidebarCollapsibleControl, { label: "Tool Response Metadata (JSON)", children: /* @__PURE__ */ jsxRuntime.jsx(
@@ -9024,22 +9076,7 @@ function ChatGPTSimulator({
9024
9076
  (parsed) => mock.setToolResponseMetadata(parsed)
9025
9077
  ),
9026
9078
  error: toolResponseMetadataError,
9027
- rows: 8
9028
- }
9029
- ) }),
9030
- /* @__PURE__ */ jsxRuntime.jsx(SidebarCollapsibleControl, { label: "Widget State (JSON)", children: /* @__PURE__ */ jsxRuntime.jsx(
9031
- SidebarTextarea,
9032
- {
9033
- value: widgetStateJson,
9034
- onChange: (json) => validateJSON(json, setWidgetStateJson, setWidgetStateError),
9035
- onFocus: () => setEditingField("widgetState"),
9036
- onBlur: () => commitJSON(
9037
- widgetStateJson,
9038
- setWidgetStateError,
9039
- (parsed) => mock.setWidgetStateExternal(parsed)
9040
- ),
9041
- error: widgetStateError,
9042
- rows: 8
9079
+ maxRows: 8
9043
9080
  }
9044
9081
  ) })
9045
9082
  ] }),
@@ -9130,4 +9167,4 @@ exports.useWidgetAPI = useWidgetAPI;
9130
9167
  exports.useWidgetGlobal = useWidgetGlobal;
9131
9168
  exports.useWidgetProps = useWidgetProps;
9132
9169
  exports.useWidgetState = useWidgetState;
9133
- //# sourceMappingURL=simulator-url-BStCoFTv.cjs.map
9170
+ //# sourceMappingURL=simulator-url-BpCa95pE.cjs.map