@assistant-ui/react-devtools 0.1.10 → 0.1.12

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.
@@ -1,49 +1,29 @@
1
1
  "use client";
2
-
3
- // src/DevToolsFrame.tsx
2
+ import { jsx as _jsx } from "react/jsx-runtime";
4
3
  import { useCallback, useEffect, useMemo, useRef } from "react";
5
4
  import { FrameHost } from "./FrameHost.js";
6
5
  import { DEFAULT_FRAME_URL } from "./constants.js";
7
- import { jsx } from "react/jsx-runtime";
8
- var DevToolsFrame = ({
9
- frameUrl = DEFAULT_FRAME_URL,
10
- className,
11
- style,
12
- title = "assistant-ui DevTools"
13
- }) => {
14
- const iframeRef = useRef(null);
15
- const frameHostRef = useRef(null);
16
- const resolvedFrameUrl = useMemo(() => frameUrl, [frameUrl]);
17
- const handleFrameLoad = useCallback(() => {
18
- if (frameHostRef.current) {
19
- frameHostRef.current.destroy();
20
- frameHostRef.current = null;
21
- }
22
- if (iframeRef.current) {
23
- frameHostRef.current = new FrameHost(iframeRef.current);
24
- }
25
- }, []);
26
- useEffect(() => {
27
- return () => {
28
- if (frameHostRef.current) {
29
- frameHostRef.current.destroy();
30
- frameHostRef.current = null;
31
- }
32
- };
33
- }, []);
34
- return /* @__PURE__ */ jsx(
35
- "iframe",
36
- {
37
- ref: iframeRef,
38
- src: resolvedFrameUrl,
39
- onLoad: handleFrameLoad,
40
- className,
41
- style,
42
- title
43
- }
44
- );
45
- };
46
- export {
47
- DevToolsFrame
6
+ export const DevToolsFrame = ({ frameUrl = DEFAULT_FRAME_URL, className, style, title = "assistant-ui DevTools", }) => {
7
+ const iframeRef = useRef(null);
8
+ const frameHostRef = useRef(null);
9
+ const resolvedFrameUrl = useMemo(() => frameUrl, [frameUrl]);
10
+ const handleFrameLoad = useCallback(() => {
11
+ if (frameHostRef.current) {
12
+ frameHostRef.current.destroy();
13
+ frameHostRef.current = null;
14
+ }
15
+ if (iframeRef.current) {
16
+ frameHostRef.current = new FrameHost(iframeRef.current);
17
+ }
18
+ }, []);
19
+ useEffect(() => {
20
+ return () => {
21
+ if (frameHostRef.current) {
22
+ frameHostRef.current.destroy();
23
+ frameHostRef.current = null;
24
+ }
25
+ };
26
+ }, []);
27
+ return (_jsx("iframe", { ref: iframeRef, src: resolvedFrameUrl, onLoad: handleFrameLoad, className: className, style: style, title: title }));
48
28
  };
49
29
  //# sourceMappingURL=DevToolsFrame.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/DevToolsFrame.tsx"],"sourcesContent":["\"use client\";\n\nimport { useCallback, useEffect, useMemo, useRef } from \"react\";\nimport { FrameHost } from \"./FrameHost\";\nimport { DEFAULT_FRAME_URL } from \"./constants\";\n\nexport interface DevToolsFrameProps {\n frameUrl?: string;\n className?: string;\n style?: React.CSSProperties;\n title?: string;\n}\n\nexport const DevToolsFrame: React.FC<DevToolsFrameProps> = ({\n frameUrl = DEFAULT_FRAME_URL,\n className,\n style,\n title = \"assistant-ui DevTools\",\n}) => {\n const iframeRef = useRef<HTMLIFrameElement | null>(null);\n const frameHostRef = useRef<FrameHost | null>(null);\n\n const resolvedFrameUrl = useMemo(() => frameUrl, [frameUrl]);\n\n const handleFrameLoad = useCallback(() => {\n if (frameHostRef.current) {\n frameHostRef.current.destroy();\n frameHostRef.current = null;\n }\n\n if (iframeRef.current) {\n frameHostRef.current = new FrameHost(iframeRef.current);\n }\n }, []);\n\n useEffect(() => {\n return () => {\n if (frameHostRef.current) {\n frameHostRef.current.destroy();\n frameHostRef.current = null;\n }\n };\n }, []);\n\n return (\n <iframe\n ref={iframeRef}\n src={resolvedFrameUrl}\n onLoad={handleFrameLoad}\n className={className}\n style={style}\n title={title}\n />\n );\n};\n"],"mappings":";;;AAEA,SAAS,aAAa,WAAW,SAAS,cAAc;AACxD,SAAS,iBAAiB;AAC1B,SAAS,yBAAyB;AAyC9B;AAhCG,IAAM,gBAA8C,CAAC;AAAA,EAC1D,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA,QAAQ;AACV,MAAM;AACJ,QAAM,YAAY,OAAiC,IAAI;AACvD,QAAM,eAAe,OAAyB,IAAI;AAElD,QAAM,mBAAmB,QAAQ,MAAM,UAAU,CAAC,QAAQ,CAAC;AAE3D,QAAM,kBAAkB,YAAY,MAAM;AACxC,QAAI,aAAa,SAAS;AACxB,mBAAa,QAAQ,QAAQ;AAC7B,mBAAa,UAAU;AAAA,IACzB;AAEA,QAAI,UAAU,SAAS;AACrB,mBAAa,UAAU,IAAI,UAAU,UAAU,OAAO;AAAA,IACxD;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,YAAU,MAAM;AACd,WAAO,MAAM;AACX,UAAI,aAAa,SAAS;AACxB,qBAAa,QAAQ,QAAQ;AAC7B,qBAAa,UAAU;AAAA,MACzB;AAAA,IACF;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SACE;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL,KAAK;AAAA,MACL,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA;AAAA,EACF;AAEJ;","names":[]}
1
+ {"version":3,"file":"DevToolsFrame.js","sourceRoot":"","sources":["../src/DevToolsFrame.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,uBAAoB;AACxC,OAAO,EAAE,iBAAiB,EAAE,uBAAoB;AAShD,MAAM,CAAC,MAAM,aAAa,GAAiC,CAAC,EAC1D,QAAQ,GAAG,iBAAiB,EAC5B,SAAS,EACT,KAAK,EACL,KAAK,GAAG,uBAAuB,GAChC,EAAE,EAAE;IACH,MAAM,SAAS,GAAG,MAAM,CAA2B,IAAI,CAAC,CAAC;IACzD,MAAM,YAAY,GAAG,MAAM,CAAmB,IAAI,CAAC,CAAC;IAEpD,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE7D,MAAM,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE;QACvC,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;YACzB,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAC/B,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC;QAC9B,CAAC;QAED,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;YACtB,YAAY,CAAC,OAAO,GAAG,IAAI,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,GAAG,EAAE;YACV,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;gBACzB,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBAC/B,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC;YAC9B,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL,iBACE,GAAG,EAAE,SAAS,EACd,GAAG,EAAE,gBAAgB,EACrB,MAAM,EAAE,eAAe,EACvB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,GACZ,CACH,CAAC;AACJ,CAAC,CAAC"}
@@ -1,104 +1,101 @@
1
- // src/DevToolsHost.ts
2
1
  import { DevToolsHooks } from "@assistant-ui/react";
3
- import {
4
- sanitizeForMessage,
5
- serializeModelContext
6
- } from "./utils/serialization.js";
7
- var DevToolsHost = class {
8
- subscription = {
9
- apiList: false,
10
- apis: /* @__PURE__ */ new Set()
11
- };
12
- unsubscribe;
13
- onSendMessage;
14
- constructor(onSendMessage) {
15
- this.onSendMessage = onSendMessage;
16
- this.subscribeToDevTools();
17
- }
18
- onReceiveMessage(message) {
19
- switch (message.type) {
20
- case "subscription":
21
- this.handleSubscription(message.data);
22
- break;
23
- case "clearEvents":
24
- if (typeof message.data.apiId === "number") {
25
- DevToolsHooks.clearEventLogs(message.data.apiId);
26
- }
27
- break;
2
+ import { sanitizeForMessage, serializeModelContext, } from "./utils/serialization.js";
3
+ export class DevToolsHost {
4
+ subscription = {
5
+ apiList: false,
6
+ apis: new Set(),
7
+ };
8
+ unsubscribe;
9
+ onSendMessage;
10
+ constructor(onSendMessage) {
11
+ this.onSendMessage = onSendMessage;
12
+ this.subscribeToDevTools();
28
13
  }
29
- }
30
- handleSubscription(data) {
31
- const prevApiList = this.subscription.apiList;
32
- const prevApis = new Set(this.subscription.apis);
33
- this.subscription.apiList = data.apiList || false;
34
- this.subscription.apis = new Set(data.apis);
35
- const apisChanged = prevApis.size !== this.subscription.apis.size || [...this.subscription.apis].some((id) => !prevApis.has(id));
36
- if (prevApiList !== this.subscription.apiList || apisChanged) {
37
- this.sendUpdate();
14
+ onReceiveMessage(message) {
15
+ switch (message.type) {
16
+ case "subscription":
17
+ this.handleSubscription(message.data);
18
+ break;
19
+ case "clearEvents":
20
+ if (typeof message.data.apiId === "number") {
21
+ DevToolsHooks.clearEventLogs(message.data.apiId);
22
+ // The subscription will automatically trigger an update
23
+ }
24
+ break;
25
+ }
38
26
  }
39
- }
40
- subscribeToDevTools() {
41
- this.unsubscribe = DevToolsHooks.subscribe(() => {
42
- this.sendUpdate();
43
- });
44
- }
45
- sendUpdate() {
46
- const update = {
47
- type: "update",
48
- data: {}
49
- };
50
- const allApis = DevToolsHooks.getApis();
51
- for (const subscriptionApiId of this.subscription.apis) {
52
- if (!allApis.has(subscriptionApiId)) {
53
- this.subscription.apis.delete(subscriptionApiId);
54
- }
27
+ handleSubscription(data) {
28
+ const prevApiList = this.subscription.apiList;
29
+ const prevApis = new Set(this.subscription.apis);
30
+ this.subscription.apiList = data.apiList || false;
31
+ this.subscription.apis = new Set(data.apis);
32
+ // Only send update if subscription actually changed
33
+ const apisChanged = prevApis.size !== this.subscription.apis.size ||
34
+ [...this.subscription.apis].some((id) => !prevApis.has(id));
35
+ if (prevApiList !== this.subscription.apiList || apisChanged) {
36
+ this.sendUpdate();
37
+ }
55
38
  }
56
- if (this.subscription.apiList) {
57
- update.data.apiList = [...allApis.keys()].map((apiId) => ({ apiId }));
58
- if (this.subscription.apis.size === 0 && allApis.size > 0) {
59
- this.subscription.apis = /* @__PURE__ */ new Set([allApis.keys().next().value]);
60
- }
39
+ subscribeToDevTools() {
40
+ this.unsubscribe = DevToolsHooks.subscribe(() => {
41
+ this.sendUpdate();
42
+ });
61
43
  }
62
- if (this.subscription.apis.size > 0) {
63
- update.data.apis = [];
64
- for (const apiId of this.subscription.apis) {
65
- const apiEntry = allApis.get(apiId);
66
- if (apiEntry) {
67
- const state = {};
68
- if (apiEntry.api) {
69
- for (const [name, scope] of Object.entries(apiEntry.api)) {
70
- if (typeof scope === "function" && "source" in scope) {
71
- if (scope.source === "root") {
72
- const scopeValue = scope();
73
- state[name] = scopeValue?.getState?.() ?? scopeValue;
44
+ sendUpdate() {
45
+ const update = {
46
+ type: "update",
47
+ data: {},
48
+ };
49
+ const allApis = DevToolsHooks.getApis();
50
+ for (const subscriptionApiId of this.subscription.apis) {
51
+ if (!allApis.has(subscriptionApiId)) {
52
+ this.subscription.apis.delete(subscriptionApiId);
53
+ }
54
+ }
55
+ if (this.subscription.apiList) {
56
+ update.data.apiList = [...allApis.keys()].map((apiId) => ({ apiId }));
57
+ if (this.subscription.apis.size === 0 && allApis.size > 0) {
58
+ this.subscription.apis = new Set([allApis.keys().next().value]);
59
+ }
60
+ }
61
+ if (this.subscription.apis.size > 0) {
62
+ update.data.apis = [];
63
+ for (const apiId of this.subscription.apis) {
64
+ const apiEntry = allApis.get(apiId);
65
+ if (apiEntry) {
66
+ // Collect state from api scopes (only root source)
67
+ const state = {};
68
+ if (apiEntry.api) {
69
+ for (const [name, scope] of Object.entries(apiEntry.api)) {
70
+ if (typeof scope === "function" && "source" in scope) {
71
+ // Only forward scopes with source === "root"
72
+ if (scope.source === "root") {
73
+ const scopeValue = scope();
74
+ state[name] = scopeValue?.getState?.() ?? scopeValue;
75
+ }
76
+ }
77
+ }
78
+ }
79
+ // Extract model context from thread runtime
80
+ const modelContext = serializeModelContext(apiEntry.api?.thread?.().getModelContext());
81
+ update.data.apis.push({
82
+ apiId,
83
+ state: sanitizeForMessage(state),
84
+ events: sanitizeForMessage(apiEntry.logs),
85
+ modelContext: modelContext,
86
+ });
74
87
  }
75
- }
76
88
  }
77
- }
78
- const modelContext = serializeModelContext(
79
- apiEntry.api?.thread?.().getModelContext()
80
- );
81
- update.data.apis.push({
82
- apiId,
83
- state: sanitizeForMessage(state),
84
- events: sanitizeForMessage(apiEntry.logs),
85
- modelContext
86
- });
87
89
  }
88
- }
89
- }
90
- if (Object.keys(update.data).length === 0) {
91
- return;
90
+ if (Object.keys(update.data).length === 0) {
91
+ return;
92
+ }
93
+ this.onSendMessage(update);
92
94
  }
93
- this.onSendMessage(update);
94
- }
95
- destroy() {
96
- if (this.unsubscribe) {
97
- this.unsubscribe();
95
+ destroy() {
96
+ if (this.unsubscribe) {
97
+ this.unsubscribe();
98
+ }
98
99
  }
99
- }
100
- };
101
- export {
102
- DevToolsHost
103
- };
100
+ }
104
101
  //# sourceMappingURL=DevToolsHost.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/DevToolsHost.ts"],"sourcesContent":["import { DevToolsHooks } from \"@assistant-ui/react\";\nimport {\n sanitizeForMessage,\n serializeModelContext,\n} from \"./utils/serialization\";\n\ninterface FrameToHostMessage {\n type: \"subscription\" | \"clearEvents\";\n data: {\n apiList?: boolean;\n apis?: number[];\n apiId?: number;\n };\n}\n\ninterface HostToFrameMessage {\n type: \"update\";\n data: {\n apiList?: Array<{ apiId: number }>;\n apis?: Array<{\n apiId: number;\n state: any;\n events: any[];\n modelContext?: any;\n }>;\n };\n}\n\nexport class DevToolsHost {\n private subscription: {\n apiList: boolean;\n apis: Set<number>;\n } = {\n apiList: false,\n apis: new Set(),\n };\n private unsubscribe?: () => void;\n private onSendMessage: (message: HostToFrameMessage) => void;\n\n constructor(onSendMessage: (message: HostToFrameMessage) => void) {\n this.onSendMessage = onSendMessage;\n this.subscribeToDevTools();\n }\n\n onReceiveMessage(message: FrameToHostMessage) {\n switch (message.type) {\n case \"subscription\":\n this.handleSubscription(message.data);\n break;\n case \"clearEvents\":\n if (typeof message.data.apiId === \"number\") {\n DevToolsHooks.clearEventLogs(message.data.apiId);\n // The subscription will automatically trigger an update\n }\n break;\n }\n }\n\n private handleSubscription(data: FrameToHostMessage[\"data\"]) {\n const prevApiList = this.subscription.apiList;\n const prevApis = new Set(this.subscription.apis);\n\n this.subscription.apiList = data.apiList || false;\n this.subscription.apis = new Set(data.apis);\n\n // Only send update if subscription actually changed\n const apisChanged =\n prevApis.size !== this.subscription.apis.size ||\n [...this.subscription.apis].some((id) => !prevApis.has(id));\n\n if (prevApiList !== this.subscription.apiList || apisChanged) {\n this.sendUpdate();\n }\n }\n\n private subscribeToDevTools() {\n this.unsubscribe = DevToolsHooks.subscribe(() => {\n this.sendUpdate();\n });\n }\n\n private sendUpdate() {\n const update: HostToFrameMessage = {\n type: \"update\",\n data: {},\n };\n\n const allApis = DevToolsHooks.getApis();\n for (const subscriptionApiId of this.subscription.apis) {\n if (!allApis.has(subscriptionApiId)) {\n this.subscription.apis.delete(subscriptionApiId);\n }\n }\n\n if (this.subscription.apiList) {\n update.data.apiList = [...allApis.keys()].map((apiId) => ({ apiId }));\n\n if (this.subscription.apis.size === 0 && allApis.size > 0) {\n this.subscription.apis = new Set([allApis.keys().next().value!]);\n }\n }\n\n if (this.subscription.apis.size > 0) {\n update.data.apis = [];\n\n for (const apiId of this.subscription.apis) {\n const apiEntry = allApis.get(apiId);\n if (apiEntry) {\n // Collect state from api scopes (only root source)\n const state: Record<string, unknown> = {};\n if (apiEntry.api) {\n for (const [name, scope] of Object.entries(apiEntry.api)) {\n if (typeof scope === \"function\" && \"source\" in scope) {\n // Only forward scopes with source === \"root\"\n if (scope.source === \"root\") {\n const scopeValue = scope();\n state[name] = scopeValue?.getState?.() ?? scopeValue;\n }\n }\n }\n }\n\n // Extract model context from thread runtime\n const modelContext = serializeModelContext(\n apiEntry.api?.thread?.().getModelContext(),\n );\n\n update.data.apis.push({\n apiId,\n state: sanitizeForMessage(state),\n events: sanitizeForMessage(apiEntry.logs) as unknown[],\n modelContext: modelContext,\n });\n }\n }\n }\n\n if (Object.keys(update.data).length === 0) {\n return;\n }\n\n this.onSendMessage(update);\n }\n\n destroy() {\n if (this.unsubscribe) {\n this.unsubscribe();\n }\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"file":"DevToolsHost.js","sourceRoot":"","sources":["../src/DevToolsHost.ts"],"names":[],"mappings":"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"}
@@ -1,177 +1,87 @@
1
1
  "use client";
2
-
3
- // src/DevToolsModal.tsx
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
4
3
  import { useEffect, useMemo, useState, useSyncExternalStore } from "react";
5
4
  import { DevToolsFrame } from "./DevToolsFrame.js";
6
5
  import { getStyles, ANIMATION_STYLES } from "./styles/DevToolsModal.styles.js";
7
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
8
- var isDarkMode = () => {
9
- if (typeof document === "undefined") return false;
10
- return document.documentElement.classList.contains("dark") || document.body.classList.contains("dark");
6
+ const isDarkMode = () => {
7
+ if (typeof document === "undefined")
8
+ return false;
9
+ return (document.documentElement.classList.contains("dark") ||
10
+ document.body.classList.contains("dark"));
11
11
  };
12
- var subscribeToThemeChanges = (callback) => {
13
- if (typeof MutationObserver === "undefined") {
14
- return () => {
15
- };
16
- }
17
- const observer = new MutationObserver(callback);
18
- observer.observe(document.documentElement, {
19
- attributes: true,
20
- attributeFilter: ["class"]
21
- });
22
- if (document.body !== document.documentElement) {
23
- observer.observe(document.body, {
24
- attributes: true,
25
- attributeFilter: ["class"]
12
+ const subscribeToThemeChanges = (callback) => {
13
+ if (typeof MutationObserver === "undefined") {
14
+ return () => { };
15
+ }
16
+ const observer = new MutationObserver(callback);
17
+ observer.observe(document.documentElement, {
18
+ attributes: true,
19
+ attributeFilter: ["class"],
26
20
  });
27
- }
28
- return () => observer.disconnect();
29
- };
30
- var DevToolsModalImpl = () => {
31
- const [isOpen, setIsOpen] = useState(false);
32
- const [buttonHover, setButtonHover] = useState(false);
33
- const [closeHover, setCloseHover] = useState(false);
34
- const darkMode = useSyncExternalStore(
35
- subscribeToThemeChanges,
36
- isDarkMode,
37
- () => false
38
- // Server-side always returns false
39
- );
40
- const styles = useMemo(() => getStyles(darkMode), [darkMode]);
41
- useEffect(() => {
42
- if (typeof document === "undefined") return;
43
- const styleId = "devtools-modal-animations";
44
- if (!document.getElementById(styleId)) {
45
- const style = document.createElement("style");
46
- style.id = styleId;
47
- style.textContent = ANIMATION_STYLES;
48
- document.head.appendChild(style);
21
+ if (document.body !== document.documentElement) {
22
+ observer.observe(document.body, {
23
+ attributes: true,
24
+ attributeFilter: ["class"],
25
+ });
49
26
  }
50
- return () => {
51
- const style = document.getElementById(styleId);
52
- if (style && !document.querySelector("[data-devtools-modal]")) {
53
- style.remove();
54
- }
55
- };
56
- }, []);
57
- useEffect(() => {
58
- if (!isOpen) return;
59
- const handleEscape = (event) => {
60
- if (event.key === "Escape") {
61
- setIsOpen(false);
62
- }
63
- };
64
- document.addEventListener("keydown", handleEscape);
65
- return () => document.removeEventListener("keydown", handleEscape);
66
- }, [isOpen]);
67
- return /* @__PURE__ */ jsxs(Fragment, { children: [
68
- /* @__PURE__ */ jsx("div", { style: styles.floatingContainer, children: /* @__PURE__ */ jsx(
69
- "button",
70
- {
71
- onClick: () => setIsOpen(true),
72
- onMouseEnter: () => setButtonHover(true),
73
- onMouseLeave: () => setButtonHover(false),
74
- style: {
75
- ...styles.floatingButton,
76
- ...buttonHover ? styles.floatingButtonHover : {}
77
- },
78
- "aria-label": "Open assistant-ui DevTools",
79
- title: "Open assistant-ui DevTools",
80
- children: /* @__PURE__ */ jsx(
81
- "svg",
82
- {
83
- width: "20",
84
- height: "20",
85
- viewBox: "0 0 24 24",
86
- fill: "none",
87
- xmlns: "http://www.w3.org/2000/svg",
88
- style: { width: "20px", height: "20px" },
89
- children: /* @__PURE__ */ jsx(
90
- "path",
91
- {
92
- d: "M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z",
93
- stroke: "currentColor",
94
- strokeWidth: "1.8",
95
- strokeLinecap: "round",
96
- strokeLinejoin: "round",
97
- fill: "none"
98
- }
99
- )
100
- }
101
- )
102
- }
103
- ) }),
104
- isOpen && /* @__PURE__ */ jsxs(Fragment, { children: [
105
- /* @__PURE__ */ jsx("div", { style: styles.backdrop, onClick: () => setIsOpen(false) }),
106
- /* @__PURE__ */ jsxs("div", { style: styles.modal, "data-devtools-modal": true, children: [
107
- /* @__PURE__ */ jsx(
108
- "button",
109
- {
110
- onClick: () => setIsOpen(false),
111
- onMouseEnter: () => setCloseHover(true),
112
- onMouseLeave: () => setCloseHover(false),
113
- style: {
114
- ...styles.dismissButton,
115
- ...closeHover ? styles.dismissButtonHover : {}
116
- },
117
- "aria-label": "Close DevTools",
118
- children: /* @__PURE__ */ jsxs(
119
- "svg",
120
- {
121
- width: "14",
122
- height: "14",
123
- viewBox: "0 0 24 24",
124
- fill: "none",
125
- xmlns: "http://www.w3.org/2000/svg",
126
- children: [
127
- /* @__PURE__ */ jsx(
128
- "path",
129
- {
130
- d: "M18 6L6 18",
131
- stroke: "currentColor",
132
- strokeWidth: "1.6",
133
- strokeLinecap: "round",
134
- strokeLinejoin: "round"
135
- }
136
- ),
137
- /* @__PURE__ */ jsx(
138
- "path",
139
- {
140
- d: "M6 6L18 18",
141
- stroke: "currentColor",
142
- strokeWidth: "1.6",
143
- strokeLinecap: "round",
144
- strokeLinejoin: "round"
145
- }
146
- )
147
- ]
148
- }
149
- )
150
- }
151
- ),
152
- /* @__PURE__ */ jsx("div", { style: styles.modalContent, children: /* @__PURE__ */ jsx(
153
- DevToolsFrame,
154
- {
155
- style: {
156
- width: "100%",
157
- height: "100%",
158
- border: "none",
159
- borderRadius: "12px",
160
- backgroundColor: "transparent"
161
- }
162
- }
163
- ) })
164
- ] })
165
- ] })
166
- ] });
27
+ return () => observer.disconnect();
167
28
  };
168
- var DevToolsModal = () => {
169
- if (typeof process !== "undefined" && process.env?.["NODE_ENV"] === "production") {
170
- return null;
171
- }
172
- return /* @__PURE__ */ jsx(DevToolsModalImpl, {});
29
+ const DevToolsModalImpl = () => {
30
+ const [isOpen, setIsOpen] = useState(false);
31
+ const [buttonHover, setButtonHover] = useState(false);
32
+ const [closeHover, setCloseHover] = useState(false);
33
+ const darkMode = useSyncExternalStore(subscribeToThemeChanges, isDarkMode, () => false);
34
+ const styles = useMemo(() => getStyles(darkMode), [darkMode]);
35
+ useEffect(() => {
36
+ if (typeof document === "undefined")
37
+ return;
38
+ const styleId = "devtools-modal-animations";
39
+ if (!document.getElementById(styleId)) {
40
+ const style = document.createElement("style");
41
+ style.id = styleId;
42
+ style.textContent = ANIMATION_STYLES;
43
+ document.head.appendChild(style);
44
+ }
45
+ return () => {
46
+ const style = document.getElementById(styleId);
47
+ if (style && !document.querySelector("[data-devtools-modal]")) {
48
+ style.remove();
49
+ }
50
+ };
51
+ }, []);
52
+ useEffect(() => {
53
+ if (!isOpen)
54
+ return;
55
+ const handleEscape = (event) => {
56
+ if (event.key === "Escape") {
57
+ setIsOpen(false);
58
+ }
59
+ };
60
+ document.addEventListener("keydown", handleEscape);
61
+ return () => document.removeEventListener("keydown", handleEscape);
62
+ }, [isOpen]);
63
+ return (_jsxs(_Fragment, { children: [_jsx("div", { style: styles.floatingContainer, children: _jsx("button", { onClick: () => setIsOpen(true), onMouseEnter: () => setButtonHover(true), onMouseLeave: () => setButtonHover(false), style: {
64
+ ...styles.floatingButton,
65
+ ...(buttonHover ? styles.floatingButtonHover : {}),
66
+ }, "aria-label": "Open assistant-ui DevTools", title: "Open assistant-ui DevTools", children: _jsx("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", style: { width: "20px", height: "20px" }, children: _jsx("path", { d: "M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z", stroke: "currentColor", strokeWidth: "1.8", strokeLinecap: "round", strokeLinejoin: "round", fill: "none" }) }) }) }), isOpen && (_jsxs(_Fragment, { children: [_jsx("div", { style: styles.backdrop, onClick: () => setIsOpen(false) }), _jsxs("div", { style: styles.modal, "data-devtools-modal": true, children: [_jsx("button", { onClick: () => setIsOpen(false), onMouseEnter: () => setCloseHover(true), onMouseLeave: () => setCloseHover(false), style: {
67
+ ...styles.dismissButton,
68
+ ...(closeHover ? styles.dismissButtonHover : {}),
69
+ }, "aria-label": "Close DevTools", children: _jsxs("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [_jsx("path", { d: "M18 6L6 18", stroke: "currentColor", strokeWidth: "1.6", strokeLinecap: "round", strokeLinejoin: "round" }), _jsx("path", { d: "M6 6L18 18", stroke: "currentColor", strokeWidth: "1.6", strokeLinecap: "round", strokeLinejoin: "round" })] }) }), _jsx("div", { style: styles.modalContent, children: _jsx(DevToolsFrame, { style: {
70
+ width: "100%",
71
+ height: "100%",
72
+ border: "none",
73
+ borderRadius: "12px",
74
+ backgroundColor: "transparent",
75
+ } }) })] })] }))] }));
173
76
  };
174
- export {
175
- DevToolsModal
77
+ // Export a component that only renders in development
78
+ export const DevToolsModal = () => {
79
+ // Check if we're in production - most bundlers will replace process.env.NODE_ENV
80
+ // This allows the entire component to be eliminated via dead code elimination
81
+ if (typeof process !== "undefined" &&
82
+ process.env?.["NODE_ENV"] === "production") {
83
+ return null;
84
+ }
85
+ return _jsx(DevToolsModalImpl, {});
176
86
  };
177
87
  //# sourceMappingURL=DevToolsModal.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/DevToolsModal.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useMemo, useState, useSyncExternalStore } from \"react\";\nimport { DevToolsFrame } from \"./DevToolsFrame\";\nimport { getStyles, ANIMATION_STYLES } from \"./styles/DevToolsModal.styles\";\n\nconst isDarkMode = (): boolean => {\n if (typeof document === \"undefined\") return false;\n return (\n document.documentElement.classList.contains(\"dark\") ||\n document.body.classList.contains(\"dark\")\n );\n};\n\nconst subscribeToThemeChanges = (callback: () => void) => {\n if (typeof MutationObserver === \"undefined\") {\n return () => {};\n }\n\n const observer = new MutationObserver(callback);\n\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: [\"class\"],\n });\n\n if (document.body !== document.documentElement) {\n observer.observe(document.body, {\n attributes: true,\n attributeFilter: [\"class\"],\n });\n }\n\n return () => observer.disconnect();\n};\n\nconst DevToolsModalImpl = () => {\n const [isOpen, setIsOpen] = useState(false);\n const [buttonHover, setButtonHover] = useState(false);\n const [closeHover, setCloseHover] = useState(false);\n\n const darkMode = useSyncExternalStore(\n subscribeToThemeChanges,\n isDarkMode,\n () => false, // Server-side always returns false\n );\n\n const styles = useMemo(() => getStyles(darkMode), [darkMode]);\n\n useEffect(() => {\n if (typeof document === \"undefined\") return;\n\n const styleId = \"devtools-modal-animations\";\n if (!document.getElementById(styleId)) {\n const style = document.createElement(\"style\");\n style.id = styleId;\n style.textContent = ANIMATION_STYLES;\n document.head.appendChild(style);\n }\n\n return () => {\n const style = document.getElementById(styleId);\n if (style && !document.querySelector(\"[data-devtools-modal]\")) {\n style.remove();\n }\n };\n }, []);\n\n useEffect(() => {\n if (!isOpen) return;\n\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n setIsOpen(false);\n }\n };\n\n document.addEventListener(\"keydown\", handleEscape);\n return () => document.removeEventListener(\"keydown\", handleEscape);\n }, [isOpen]);\n\n return (\n <>\n <div style={styles.floatingContainer}>\n <button\n onClick={() => setIsOpen(true)}\n onMouseEnter={() => setButtonHover(true)}\n onMouseLeave={() => setButtonHover(false)}\n style={{\n ...styles.floatingButton,\n ...(buttonHover ? styles.floatingButtonHover : {}),\n }}\n aria-label=\"Open assistant-ui DevTools\"\n title=\"Open assistant-ui DevTools\"\n >\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{ width: \"20px\", height: \"20px\" }}\n >\n <path\n d=\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n fill=\"none\"\n />\n </svg>\n </button>\n </div>\n\n {isOpen && (\n <>\n <div style={styles.backdrop} onClick={() => setIsOpen(false)} />\n\n <div style={styles.modal} data-devtools-modal>\n <button\n onClick={() => setIsOpen(false)}\n onMouseEnter={() => setCloseHover(true)}\n onMouseLeave={() => setCloseHover(false)}\n style={{\n ...styles.dismissButton,\n ...(closeHover ? styles.dismissButtonHover : {}),\n }}\n aria-label=\"Close DevTools\"\n >\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M18 6L6 18\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M6 6L18 18\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n\n <div style={styles.modalContent}>\n <DevToolsFrame\n style={{\n width: \"100%\",\n height: \"100%\",\n border: \"none\",\n borderRadius: \"12px\",\n backgroundColor: \"transparent\",\n }}\n />\n </div>\n </div>\n </>\n )}\n </>\n );\n};\n\n// Export a component that only renders in development\nexport const DevToolsModal = () => {\n // Check if we're in production - most bundlers will replace process.env.NODE_ENV\n // This allows the entire component to be eliminated via dead code elimination\n if (\n typeof process !== \"undefined\" &&\n process.env?.[\"NODE_ENV\"] === \"production\"\n ) {\n return null;\n }\n\n return <DevToolsModalImpl />;\n};\n"],"mappings":"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","names":[]}
1
+ {"version":3,"file":"DevToolsModal.js","sourceRoot":"","sources":["../src/DevToolsModal.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,2BAAwB;AAChD,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,yCAAsC;AAE5E,MAAM,UAAU,GAAG,GAAY,EAAE;IAC/B,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IAClD,OAAO,CACL,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;QACnD,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CACzC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAAC,QAAoB,EAAE,EAAE;IACvD,IAAI,OAAO,gBAAgB,KAAK,WAAW,EAAE,CAAC;QAC5C,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAEhD,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,EAAE;QACzC,UAAU,EAAE,IAAI;QAChB,eAAe,EAAE,CAAC,OAAO,CAAC;KAC3B,CAAC,CAAC;IAEH,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,eAAe,EAAE,CAAC;QAC/C,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE;YAC9B,UAAU,EAAE,IAAI;YAChB,eAAe,EAAE,CAAC,OAAO,CAAC;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;AACrC,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,GAAG,EAAE;IAC7B,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEpD,MAAM,QAAQ,GAAG,oBAAoB,CACnC,uBAAuB,EACvB,UAAU,EACV,GAAG,EAAE,CAAC,KAAK,CACZ,CAAC;IAEF,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE9D,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,QAAQ,KAAK,WAAW;YAAE,OAAO;QAE5C,MAAM,OAAO,GAAG,2BAA2B,CAAC;QAC5C,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;YACtC,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAC9C,KAAK,CAAC,EAAE,GAAG,OAAO,CAAC;YACnB,KAAK,CAAC,WAAW,GAAG,gBAAgB,CAAC;YACrC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;QAED,OAAO,GAAG,EAAE;YACV,MAAM,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YAC/C,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,uBAAuB,CAAC,EAAE,CAAC;gBAC9D,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM;YAAE,OAAO;QAEpB,MAAM,YAAY,GAAG,CAAC,KAAoB,EAAE,EAAE;YAC5C,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;gBAC3B,SAAS,CAAC,KAAK,CAAC,CAAC;YACnB,CAAC;QACH,CAAC,CAAC;QAEF,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QACnD,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IACrE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,OAAO,CACL,8BACE,cAAK,KAAK,EAAE,MAAM,CAAC,iBAAiB,YAClC,iBACE,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,EAC9B,YAAY,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,EACxC,YAAY,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,EACzC,KAAK,EAAE;wBACL,GAAG,MAAM,CAAC,cAAc;wBACxB,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC;qBACnD,gBACU,4BAA4B,EACvC,KAAK,EAAC,4BAA4B,YAElC,cACE,KAAK,EAAC,IAAI,EACV,MAAM,EAAC,IAAI,EACX,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,KAAK,EAAC,4BAA4B,EAClC,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAExC,eACE,CAAC,EAAC,+DAA+D,EACjE,MAAM,EAAC,cAAc,EACrB,WAAW,EAAC,KAAK,EACjB,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,EACtB,IAAI,EAAC,MAAM,GACX,GACE,GACC,GACL,EAEL,MAAM,IAAI,CACT,8BACE,cAAK,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,GAAI,EAEhE,eAAK,KAAK,EAAE,MAAM,CAAC,KAAK,0CACtB,iBACE,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAC/B,YAAY,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EACvC,YAAY,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,EACxC,KAAK,EAAE;oCACL,GAAG,MAAM,CAAC,aAAa;oCACvB,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;iCACjD,gBACU,gBAAgB,YAE3B,eACE,KAAK,EAAC,IAAI,EACV,MAAM,EAAC,IAAI,EACX,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,KAAK,EAAC,4BAA4B,aAElC,eACE,CAAC,EAAC,YAAY,EACd,MAAM,EAAC,cAAc,EACrB,WAAW,EAAC,KAAK,EACjB,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,GACtB,EACF,eACE,CAAC,EAAC,YAAY,EACd,MAAM,EAAC,cAAc,EACrB,WAAW,EAAC,KAAK,EACjB,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,GACtB,IACE,GACC,EAET,cAAK,KAAK,EAAE,MAAM,CAAC,YAAY,YAC7B,KAAC,aAAa,IACZ,KAAK,EAAE;wCACL,KAAK,EAAE,MAAM;wCACb,MAAM,EAAE,MAAM;wCACd,MAAM,EAAE,MAAM;wCACd,YAAY,EAAE,MAAM;wCACpB,eAAe,EAAE,aAAa;qCAC/B,GACD,GACE,IACF,IACL,CACJ,IACA,CACJ,CAAC;AACJ,CAAC,CAAC;AAEF,sDAAsD;AACtD,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,EAAE;IAChC,iFAAiF;IACjF,8EAA8E;IAC9E,IACE,OAAO,OAAO,KAAK,WAAW;QAC9B,OAAO,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,YAAY,EAC1C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAC,iBAAiB,KAAG,CAAC;AAC/B,CAAC,CAAC"}