reflet-sdk 0.7.3 → 0.7.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +28 -0
- package/README.md +54 -17
- package/dist/desktop.d.ts +24 -0
- package/dist/desktop.d.ts.map +1 -0
- package/dist/desktop.js +118 -0
- package/dist/desktop.js.map +1 -0
- package/dist/{devtools-layer-CsIcpepI.js → devtools-layer-o1O55wu1.js} +396 -277
- package/dist/devtools-layer-o1O55wu1.js.map +1 -0
- package/dist/devtools-next.d.ts.map +1 -1
- package/dist/devtools-next.js +1 -1
- package/dist/{sessions-panel-BYM0UUgT.js → devtools-styles-TWR5Ps34.js} +2078 -1686
- package/dist/devtools-styles-TWR5Ps34.js.map +1 -0
- package/dist/devtools-vite.js +2 -1
- package/dist/devtools-vite.js.map +1 -1
- package/dist/feedback.d.ts +7 -3
- package/dist/feedback.d.ts.map +1 -1
- package/dist/feedback.js +21 -12
- package/dist/feedback.js.map +1 -1
- package/dist/{handler-17FmwoSX.js → handler-ndF3gZBx.js} +11 -416
- package/dist/handler-ndF3gZBx.js.map +1 -0
- package/dist/reflet-proxy-BW6q9xds.js +467 -0
- package/dist/reflet-proxy-BW6q9xds.js.map +1 -0
- package/dist/{submit-Dl0rm6TV.js → submit-DJIKxRUp.js} +2 -2
- package/dist/submit-DJIKxRUp.js.map +1 -0
- package/dist/{team-layer-Dvjkh-_y.js → team-layer-_It1_oSo.js} +159 -95
- package/dist/team-layer-_It1_oSo.js.map +1 -0
- package/dist/team-tools-bridge-C51PpkUI.d.ts +31 -0
- package/dist/team-tools-bridge-C51PpkUI.d.ts.map +1 -0
- package/package.json +5 -1
- package/dist/devtools-layer-CsIcpepI.js.map +0 -1
- package/dist/handler-17FmwoSX.js.map +0 -1
- package/dist/sessions-panel-BYM0UUgT.js.map +0 -1
- package/dist/submit-Dl0rm6TV.js.map +0 -1
- package/dist/team-layer-Dvjkh-_y.js.map +0 -1
package/dist/devtools-vite.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { r as DEVTOOLS_ROUTE_BASE } from "./protocol-cJVVwnPe.js";
|
|
2
|
-
import {
|
|
2
|
+
import { h as isLoopbackAddress, v as errorResponse } from "./reflet-proxy-BW6q9xds.js";
|
|
3
|
+
import { t as createDevtoolsHandler } from "./handler-ndF3gZBx.js";
|
|
3
4
|
import { loadEnv } from "vite";
|
|
4
5
|
//#region src/devtools/server/vite.ts
|
|
5
6
|
const MAX_BODY_BYTES = 1048576;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devtools-vite.js","names":[],"sources":["../src/devtools/server/vite.ts"],"sourcesContent":["import type { ServerResponse } from \"node:http\";\nimport { type Connect, loadEnv, type Plugin } from \"vite\";\nimport { DEVTOOLS_ROUTE_BASE } from \"../protocol\";\nimport { createDevtoolsHandler, type DevtoolsHandler } from \"./handler\";\nimport { errorResponse } from \"./json-response\";\nimport type { DevtoolsServerOptions } from \"./options\";\nimport { isLoopbackAddress } from \"./request-guard\";\n\nexport type { DevtoolsServerOptions } from \"./options\";\n\nconst MAX_BODY_BYTES = 1_048_576;\nconst ENV_PREFIX = \"REFLET_\";\n\nasync function readBody(\n request: Connect.IncomingMessage\n): Promise<string | null> {\n const chunks: Buffer[] = [];\n let size = 0;\n for await (const chunk of request) {\n const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk));\n size += buffer.length;\n // Keep draining: leaving the loop early destroys the socket before the 413 is sent.\n if (size <= MAX_BODY_BYTES) {\n chunks.push(buffer);\n }\n }\n return size > MAX_BODY_BYTES ? null : Buffer.concat(chunks).toString(\"utf8\");\n}\n\nfunction toWebRequest(\n request: Connect.IncomingMessage,\n method: string,\n body: string | undefined\n): Request {\n const isTls =\n \"encrypted\" in request.socket && request.socket.encrypted === true;\n const protocol = isTls ? \"https\" : \"http\";\n const origin = `${protocol}://${request.headers.host ?? \"localhost\"}`;\n const url = new URL(request.originalUrl ?? request.url ?? \"/\", origin);\n const headers = new Headers();\n for (const [name, value] of Object.entries(request.headers)) {\n if (name.startsWith(\":\") || value === undefined) {\n continue;\n }\n for (const item of Array.isArray(value) ? value : [value]) {\n headers.append(name, item);\n }\n }\n return new Request(url, { body, headers, method });\n}\n\nasync function sendWebResponse(\n response: Response,\n serverResponse: ServerResponse\n): Promise<void> {\n serverResponse.statusCode = response.status;\n for (const [name, value] of response.headers) {\n serverResponse.setHeader(name, value);\n }\n serverResponse.end(Buffer.from(await response.arrayBuffer()));\n}\n\nasync function serveDevtoolsRequest(\n handler: DevtoolsHandler,\n request: Connect.IncomingMessage,\n serverResponse: ServerResponse\n): Promise<void> {\n if (!isLoopbackAddress(request.socket.remoteAddress)) {\n await sendWebResponse(\n errorResponse(\"Reflet devtools only answers this machine.\", 403),\n serverResponse\n );\n return;\n }\n const method = request.method ?? \"GET\";\n const hasBody = method !== \"GET\" && method !== \"HEAD\";\n const body = hasBody ? await readBody(request) : undefined;\n if (body === null) {\n await sendWebResponse(\n errorResponse(\"Reflet devtools requests are limited to 1 MB.\", 413),\n serverResponse\n );\n return;\n }\n const response = await handler(toWebRequest(request, method, body));\n await sendWebResponse(response, serverResponse);\n}\n\n/** Serves the Reflet devtools route from the Vite dev server; never part of a build. */\nexport function refletDevtools(options: DevtoolsServerOptions = {}): Plugin {\n let handler: DevtoolsHandler | null = null;\n\n return {\n apply: \"serve\",\n configResolved(config) {\n const env = loadEnv(config.mode, config.envDir, ENV_PREFIX);\n handler = createDevtoolsHandler(\n { ...options, root: options.root ?? config.root },\n { ...process.env, ...env }\n );\n },\n configureServer(server) {\n server.middlewares.use(DEVTOOLS_ROUTE_BASE, (request, response, next) => {\n if (!handler) {\n next();\n return;\n }\n serveDevtoolsRequest(handler, request, response).catch(next);\n });\n },\n name: \"reflet-devtools\",\n };\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"devtools-vite.js","names":[],"sources":["../src/devtools/server/vite.ts"],"sourcesContent":["import type { ServerResponse } from \"node:http\";\nimport { type Connect, loadEnv, type Plugin } from \"vite\";\nimport { DEVTOOLS_ROUTE_BASE } from \"../protocol\";\nimport { createDevtoolsHandler, type DevtoolsHandler } from \"./handler\";\nimport { errorResponse } from \"./json-response\";\nimport type { DevtoolsServerOptions } from \"./options\";\nimport { isLoopbackAddress } from \"./request-guard\";\n\nexport type { DevtoolsServerOptions } from \"./options\";\n\nconst MAX_BODY_BYTES = 1_048_576;\nconst ENV_PREFIX = \"REFLET_\";\n\nasync function readBody(\n request: Connect.IncomingMessage\n): Promise<string | null> {\n const chunks: Buffer[] = [];\n let size = 0;\n for await (const chunk of request) {\n const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk));\n size += buffer.length;\n // Keep draining: leaving the loop early destroys the socket before the 413 is sent.\n if (size <= MAX_BODY_BYTES) {\n chunks.push(buffer);\n }\n }\n return size > MAX_BODY_BYTES ? null : Buffer.concat(chunks).toString(\"utf8\");\n}\n\nfunction toWebRequest(\n request: Connect.IncomingMessage,\n method: string,\n body: string | undefined\n): Request {\n const isTls =\n \"encrypted\" in request.socket && request.socket.encrypted === true;\n const protocol = isTls ? \"https\" : \"http\";\n const origin = `${protocol}://${request.headers.host ?? \"localhost\"}`;\n const url = new URL(request.originalUrl ?? request.url ?? \"/\", origin);\n const headers = new Headers();\n for (const [name, value] of Object.entries(request.headers)) {\n if (name.startsWith(\":\") || value === undefined) {\n continue;\n }\n for (const item of Array.isArray(value) ? value : [value]) {\n headers.append(name, item);\n }\n }\n return new Request(url, { body, headers, method });\n}\n\nasync function sendWebResponse(\n response: Response,\n serverResponse: ServerResponse\n): Promise<void> {\n serverResponse.statusCode = response.status;\n for (const [name, value] of response.headers) {\n serverResponse.setHeader(name, value);\n }\n serverResponse.end(Buffer.from(await response.arrayBuffer()));\n}\n\nasync function serveDevtoolsRequest(\n handler: DevtoolsHandler,\n request: Connect.IncomingMessage,\n serverResponse: ServerResponse\n): Promise<void> {\n if (!isLoopbackAddress(request.socket.remoteAddress)) {\n await sendWebResponse(\n errorResponse(\"Reflet devtools only answers this machine.\", 403),\n serverResponse\n );\n return;\n }\n const method = request.method ?? \"GET\";\n const hasBody = method !== \"GET\" && method !== \"HEAD\";\n const body = hasBody ? await readBody(request) : undefined;\n if (body === null) {\n await sendWebResponse(\n errorResponse(\"Reflet devtools requests are limited to 1 MB.\", 413),\n serverResponse\n );\n return;\n }\n const response = await handler(toWebRequest(request, method, body));\n await sendWebResponse(response, serverResponse);\n}\n\n/** Serves the Reflet devtools route from the Vite dev server; never part of a build. */\nexport function refletDevtools(options: DevtoolsServerOptions = {}): Plugin {\n let handler: DevtoolsHandler | null = null;\n\n return {\n apply: \"serve\",\n configResolved(config) {\n const env = loadEnv(config.mode, config.envDir, ENV_PREFIX);\n handler = createDevtoolsHandler(\n { ...options, root: options.root ?? config.root },\n { ...process.env, ...env }\n );\n },\n configureServer(server) {\n server.middlewares.use(DEVTOOLS_ROUTE_BASE, (request, response, next) => {\n if (!handler) {\n next();\n return;\n }\n serveDevtoolsRequest(handler, request, response).catch(next);\n });\n },\n name: \"reflet-devtools\",\n };\n}\n"],"mappings":";;;;;AAUA,MAAM,iBAAiB;AACvB,MAAM,aAAa;AAEnB,eAAe,SACb,SACwB;CACxB,MAAM,SAAmB,CAAC;CAC1B,IAAI,OAAO;CACX,WAAW,MAAM,SAAS,SAAS;EACjC,MAAM,SAAS,OAAO,SAAS,KAAK,IAAI,QAAQ,OAAO,KAAK,OAAO,KAAK,CAAC;EACzE,QAAQ,OAAO;EAEf,IAAI,QAAQ,gBACV,OAAO,KAAK,MAAM;CAEtB;CACA,OAAO,OAAO,iBAAiB,OAAO,OAAO,OAAO,MAAM,CAAC,CAAC,SAAS,MAAM;AAC7E;AAEA,SAAS,aACP,SACA,QACA,MACS;CAIT,MAAM,SAAS,GAFb,eAAe,QAAQ,UAAU,QAAQ,OAAO,cAAc,OACvC,UAAU,OACR,KAAK,QAAQ,QAAQ,QAAQ;CACxD,MAAM,MAAM,IAAI,IAAI,QAAQ,eAAe,QAAQ,OAAO,KAAK,MAAM;CACrE,MAAM,UAAU,IAAI,QAAQ;CAC5B,KAAK,MAAM,CAAC,MAAM,UAAU,OAAO,QAAQ,QAAQ,OAAO,GAAG;EAC3D,IAAI,KAAK,WAAW,GAAG,KAAK,UAAU,KAAA,GACpC;EAEF,KAAK,MAAM,QAAQ,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK,GACtD,QAAQ,OAAO,MAAM,IAAI;CAE7B;CACA,OAAO,IAAI,QAAQ,KAAK;EAAE;EAAM;EAAS;CAAO,CAAC;AACnD;AAEA,eAAe,gBACb,UACA,gBACe;CACf,eAAe,aAAa,SAAS;CACrC,KAAK,MAAM,CAAC,MAAM,UAAU,SAAS,SACnC,eAAe,UAAU,MAAM,KAAK;CAEtC,eAAe,IAAI,OAAO,KAAK,MAAM,SAAS,YAAY,CAAC,CAAC;AAC9D;AAEA,eAAe,qBACb,SACA,SACA,gBACe;CACf,IAAI,CAAC,kBAAkB,QAAQ,OAAO,aAAa,GAAG;EACpD,MAAM,gBACJ,cAAc,8CAA8C,GAAG,GAC/D,cACF;EACA;CACF;CACA,MAAM,SAAS,QAAQ,UAAU;CAEjC,MAAM,OADU,WAAW,SAAS,WAAW,SACxB,MAAM,SAAS,OAAO,IAAI,KAAA;CACjD,IAAI,SAAS,MAAM;EACjB,MAAM,gBACJ,cAAc,iDAAiD,GAAG,GAClE,cACF;EACA;CACF;CAEA,MAAM,gBAAgB,MADC,QAAQ,aAAa,SAAS,QAAQ,IAAI,CAAC,GAClC,cAAc;AAChD;;AAGA,SAAgB,eAAe,UAAiC,CAAC,GAAW;CAC1E,IAAI,UAAkC;CAEtC,OAAO;EACL,OAAO;EACP,eAAe,QAAQ;GACrB,MAAM,MAAM,QAAQ,OAAO,MAAM,OAAO,QAAQ,UAAU;GAC1D,UAAU,sBACR;IAAE,GAAG;IAAS,MAAM,QAAQ,QAAQ,OAAO;GAAK,GAChD;IAAE,GAAG,QAAQ;IAAK,GAAG;GAAI,CAC3B;EACF;EACA,gBAAgB,QAAQ;GACtB,OAAO,YAAY,IAAI,sBAAsB,SAAS,UAAU,SAAS;IACvE,IAAI,CAAC,SAAS;KACZ,KAAK;KACL;IACF;IACA,qBAAqB,SAAS,SAAS,QAAQ,CAAC,CAAC,MAAM,IAAI;GAC7D,CAAC;EACH;EACA,MAAM;CACR;AACF"}
|
package/dist/feedback.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { i as TeamToolsReply, n as TeamToolsBridge, r as TeamToolsCall, t as TeamToolsAccount } from "./team-tools-bridge-C51PpkUI.js";
|
|
1
2
|
import { c as ElementSelection, u as FeedbackContext, w as RefletUser } from "./types-B3XiHPqy.js";
|
|
2
3
|
import { ReactNode, RefObject } from "react";
|
|
3
4
|
//#region src/feedback/types.d.ts
|
|
@@ -96,8 +97,11 @@ interface RefletFeedbackProps {
|
|
|
96
97
|
primaryColor?: string;
|
|
97
98
|
publicKey?: string;
|
|
98
99
|
renderTrigger?: (props: FeedbackTriggerProps) => ReactNode;
|
|
99
|
-
/**
|
|
100
|
-
|
|
100
|
+
/**
|
|
101
|
+
* Shown once activated by the `reflet-team` URL parameter or a stored sign-in. Defaults to true.
|
|
102
|
+
* A desktop app passes a bridge from `createTeamToolsHost` instead: team tools then show at once and sign in through the system browser.
|
|
103
|
+
*/
|
|
104
|
+
teamTools?: boolean | TeamToolsBridge;
|
|
101
105
|
theme?: "auto" | "dark" | "light";
|
|
102
106
|
user?: RefletUser;
|
|
103
107
|
userToken?: string;
|
|
@@ -138,5 +142,5 @@ export declare function collectPageContext(options?: {
|
|
|
138
142
|
//#region src/feedback/widget.d.ts
|
|
139
143
|
export declare function RefletFeedback(props: RefletFeedbackProps): import("react").JSX.Element | null;
|
|
140
144
|
//#endregion
|
|
141
|
-
export type { Annotation, AnnotationTool, CapturedImage, FeedbackWidgetLabels, RefletFeedbackProps };
|
|
145
|
+
export type { Annotation, AnnotationTool, CapturedImage, FeedbackWidgetLabels, RefletFeedbackProps, TeamToolsAccount, TeamToolsBridge, TeamToolsCall, TeamToolsReply };
|
|
142
146
|
//# sourceMappingURL=feedback.d.ts.map
|
package/dist/feedback.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feedback.d.ts","names":[],"sources":["../src/feedback/types.ts","../src/feedback/core/capture.ts","../src/feedback/core/element-selector.ts","../src/feedback/core/page-context.ts","../src/feedback/widget.tsx"],"mappings":"
|
|
1
|
+
{"version":3,"file":"feedback.d.ts","names":[],"sources":["../src/feedback/types.ts","../src/feedback/core/capture.ts","../src/feedback/core/element-selector.ts","../src/feedback/core/page-context.ts","../src/feedback/widget.tsx"],"mappings":";;;;cAOM;KAUM,yBAAyB;UAEpB;EACf;EACA;;UAGe;EACf;EACA,KAAK;EACL;EAEA,SAAS;EACT,OAAO;EACP;EACA,MAAM;;UAGS;EACf,MAAM;EACN;EACA;EAEA;EACA;;UAae;EACf;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;UAiDe;EACf;EACA,KAAK,UAAU;;UAGA;;EAEf;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,QAAQ;EACjB,WAAW;EACX;EACA;EACA,aAAa;IAAU;;EACvB;EACA,YAAY;IAAU;;EACtB;EACA;EACA;EACA,iBAAiB,OAAO,yBAAyB;;;;;EAKjD,sBAAsB;EACtB;EACA,OAAO;EACP;;;;UCyDe;;EAEf,UAAU;EACV;EACA;;EAEA,gBAAgB,OAAO;;EAEvB;;;;;;;;;;wBAoIoB,gBACpB,UAAS,iBACR,QAAQ;wBAkDK,eAAe,OAAO;;;;wBC7ItB,sBAAsB,SAAS,UAAU;;;;wBCjMzC,mBAAmB;EACjC;IACE;;;wBC9BY,eAAe,OAAO,sCAAmB,IAAA"}
|
package/dist/feedback.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { n as Reflet } from "./client-oFFfRxAM.js";
|
|
3
|
-
import { A as SquareIcon, C as ChevronDownIcon, D as MoreIcon, E as HighlightIcon, F as UndoIcon, H as MAX_SELECTION_COMMENT_LENGTH, I as isDegenerate, J as maskSecrets, L as normalizeRect, M as TargetIcon, N as TextIcon, O as PencilIcon, P as TrashIcon, R as DEFAULT_WIDGET_LABELS, S as CheckIcon, T as GripIcon, U as buildElementSelection, V as collectPageContext, _ as matchesHotkey, b as CameraIcon, c as useFloatingPosition, d as drawAnnotations, et as WIDGET_MARKER, f as listenOnPageAndWidget, g as isSubmitEnter, h as stopClicksAtHost, i as submitWidgetFeedback, it as releaseCapture, k as SpotlightIcon, n as createFeedbackTransport, o as ElementPicker, p as listenToKeydown, rt as capturedViewportSize, t as attachPreparedScreenshots, tt as captureViewport, v as ArrowIcon, w as CloseIcon, x as ChatIcon, y as BlurIcon, z as SDK_VERSION } from "./submit-
|
|
3
|
+
import { A as SquareIcon, C as ChevronDownIcon, D as MoreIcon, E as HighlightIcon, F as UndoIcon, H as MAX_SELECTION_COMMENT_LENGTH, I as isDegenerate, J as maskSecrets, L as normalizeRect, M as TargetIcon, N as TextIcon, O as PencilIcon, P as TrashIcon, R as DEFAULT_WIDGET_LABELS, S as CheckIcon, T as GripIcon, U as buildElementSelection, V as collectPageContext, _ as matchesHotkey, b as CameraIcon, c as useFloatingPosition, d as drawAnnotations, et as WIDGET_MARKER, f as listenOnPageAndWidget, g as isSubmitEnter, h as stopClicksAtHost, i as submitWidgetFeedback, it as releaseCapture, k as SpotlightIcon, n as createFeedbackTransport, o as ElementPicker, p as listenToKeydown, rt as capturedViewportSize, t as attachPreparedScreenshots, tt as captureViewport, v as ArrowIcon, w as CloseIcon, x as ChatIcon, y as BlurIcon, z as SDK_VERSION } from "./submit-DJIKxRUp.js";
|
|
4
4
|
import { t as RefletContext } from "./react-context-Kazo_JCz.js";
|
|
5
5
|
import { n as hasTeamActivation } from "./team-activation-Cv5U7OF1.js";
|
|
6
6
|
import { t as SelectionOutline } from "./selection-outline-NzAAAZXR.js";
|
|
@@ -2303,7 +2303,7 @@ function useWidgetState(props) {
|
|
|
2303
2303
|
setStep("compose");
|
|
2304
2304
|
return submission.submit({
|
|
2305
2305
|
context: {
|
|
2306
|
-
...activeScreenshot?.context ?? collectPageContext({ sdkVersion: "0.7.
|
|
2306
|
+
...activeScreenshot?.context ?? collectPageContext({ sdkVersion: "0.7.5" }),
|
|
2307
2307
|
consoleEvents: consoleRef.current?.events(),
|
|
2308
2308
|
metadata: props.metadata,
|
|
2309
2309
|
selections
|
|
@@ -2369,28 +2369,28 @@ function useWidgetState(props) {
|
|
|
2369
2369
|
}
|
|
2370
2370
|
//#endregion
|
|
2371
2371
|
//#region src/feedback/widget.tsx
|
|
2372
|
-
const DevtoolsLayer = process.env.NODE_ENV === "development" ? lazy(() => import("./devtools-layer-
|
|
2373
|
-
const TeamLayer = lazy(() => import("./team-layer-
|
|
2372
|
+
const DevtoolsLayer = process.env.NODE_ENV === "development" ? lazy(() => import("./devtools-layer-o1O55wu1.js").then((module) => ({ default: module.DevtoolsLayer }))) : null;
|
|
2373
|
+
const TeamLayer = lazy(() => import("./team-layer-_It1_oSo.js").then((module) => ({ default: module.TeamLayer })));
|
|
2374
2374
|
const DEFAULT_APP_URL = "https://www.reflet.app";
|
|
2375
2375
|
const ignoreChanges = () => () => void 0;
|
|
2376
2376
|
/** Activation reads the URL and storage, which only exist in the browser: the server renders without team tools. */
|
|
2377
|
-
function
|
|
2377
|
+
function useShowsTeamTools(options) {
|
|
2378
2378
|
const { props, publicKey } = options;
|
|
2379
2379
|
const hasDevtoolsOnPage = useHasDevtoolsOnPage();
|
|
2380
|
-
const isActivated = useSyncExternalStore(ignoreChanges, () => props.teamTools !== false && publicKey !== null && hasTeamActivation(publicKey), () => false);
|
|
2381
|
-
return useOwnsTeamTools(isActivated && !hasDevtoolsOnPage, options.hasWidget)
|
|
2380
|
+
const isActivated = useSyncExternalStore(ignoreChanges, () => typeof props.teamTools === "object" || props.teamTools !== false && publicKey !== null && hasTeamActivation(publicKey), () => false);
|
|
2381
|
+
return useOwnsTeamTools(isActivated && !hasDevtoolsOnPage, options.hasWidget);
|
|
2382
2382
|
}
|
|
2383
2383
|
function RefletFeedback(props) {
|
|
2384
2384
|
const state = useWidgetState(props);
|
|
2385
2385
|
const launcher = useWidgetLauncher(state);
|
|
2386
2386
|
const showsWidget = props.enabled !== false && !state.isDismissed;
|
|
2387
2387
|
const showsDevtools = useOwnsDevtools(props.devtools !== false && DevtoolsLayer !== null, showsWidget) && DevtoolsLayer !== null;
|
|
2388
|
-
const
|
|
2388
|
+
const showsTeamTools = useShowsTeamTools({
|
|
2389
2389
|
hasWidget: showsWidget,
|
|
2390
2390
|
props,
|
|
2391
2391
|
publicKey: state.publicKey
|
|
2392
2392
|
});
|
|
2393
|
-
if (!(showsWidget || showsDevtools ||
|
|
2393
|
+
if (!(showsWidget || showsDevtools || showsTeamTools)) return null;
|
|
2394
2394
|
return /* @__PURE__ */ jsxs(Fragment, { children: [showsWidget && props.renderTrigger?.(launcher.triggerProps), /* @__PURE__ */ jsxs(ShadowPortal, {
|
|
2395
2395
|
offset: props.offset ?? 20,
|
|
2396
2396
|
primaryColor: props.primaryColor,
|
|
@@ -2409,15 +2409,24 @@ function RefletFeedback(props) {
|
|
|
2409
2409
|
publicKey: state.publicKey
|
|
2410
2410
|
})
|
|
2411
2411
|
}),
|
|
2412
|
-
|
|
2412
|
+
showsTeamTools && /* @__PURE__ */ jsx(TeamTools, {
|
|
2413
2413
|
props,
|
|
2414
|
-
publicKey:
|
|
2414
|
+
publicKey: state.publicKey
|
|
2415
2415
|
})
|
|
2416
2416
|
]
|
|
2417
2417
|
})] });
|
|
2418
2418
|
}
|
|
2419
2419
|
function TeamTools({ props, publicKey }) {
|
|
2420
2420
|
const context = useContext(RefletContext);
|
|
2421
|
+
const position = props.position ?? "bottom-right";
|
|
2422
|
+
if (typeof props.teamTools === "object") return /* @__PURE__ */ jsx(Suspense, {
|
|
2423
|
+
fallback: null,
|
|
2424
|
+
children: /* @__PURE__ */ jsx(TeamLayer, {
|
|
2425
|
+
bridge: props.teamTools,
|
|
2426
|
+
position
|
|
2427
|
+
})
|
|
2428
|
+
});
|
|
2429
|
+
if (publicKey === null) return null;
|
|
2421
2430
|
return /* @__PURE__ */ jsx(Suspense, {
|
|
2422
2431
|
fallback: null,
|
|
2423
2432
|
children: /* @__PURE__ */ jsx(TeamLayer, {
|
|
@@ -2426,7 +2435,7 @@ function TeamTools({ props, publicKey }) {
|
|
|
2426
2435
|
appUrl: props.appUrl ?? DEFAULT_APP_URL,
|
|
2427
2436
|
publicKey
|
|
2428
2437
|
},
|
|
2429
|
-
position
|
|
2438
|
+
position
|
|
2430
2439
|
})
|
|
2431
2440
|
});
|
|
2432
2441
|
}
|