@basedash/embed 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +316 -0
- package/dist/index.cjs +139 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +104 -0
- package/dist/index.d.ts +104 -0
- package/dist/index.js +129 -0
- package/dist/index.js.map +1 -0
- package/dist/react.cjs +486 -0
- package/dist/react.cjs.map +1 -0
- package/dist/react.d.cts +134 -0
- package/dist/react.d.ts +134 -0
- package/dist/react.js +477 -0
- package/dist/react.js.map +1 -0
- package/dist/server.cjs +86 -0
- package/dist/server.cjs.map +1 -0
- package/dist/server.d.cts +59 -0
- package/dist/server.d.ts +59 -0
- package/dist/server.js +83 -0
- package/dist/server.js.map +1 -0
- package/package.json +114 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
// src/embed.ts
|
|
2
|
+
var DEFAULT_BASEDASH_URL = "https://charts.basedash.com";
|
|
3
|
+
var EMBED_QUERY_PARAMS = {
|
|
4
|
+
theme: "theme",
|
|
5
|
+
hideOrgName: "hide_org_name",
|
|
6
|
+
hideChat: "hide_chat",
|
|
7
|
+
hideDashboards: "hide_dashboards",
|
|
8
|
+
hideInsights: "hide_insights",
|
|
9
|
+
hideAutomations: "hide_automations",
|
|
10
|
+
hideSuggestedPrompts: "hide_suggested_prompts"
|
|
11
|
+
};
|
|
12
|
+
var DEFAULT_EMBED_OPTIONS = {
|
|
13
|
+
theme: "auto",
|
|
14
|
+
hideOrgName: false,
|
|
15
|
+
hideChat: false,
|
|
16
|
+
hideDashboards: false,
|
|
17
|
+
hideInsights: false,
|
|
18
|
+
hideAutomations: false,
|
|
19
|
+
hideSuggestedPrompts: false
|
|
20
|
+
};
|
|
21
|
+
var CHAT_EMBED_OPTIONS = {
|
|
22
|
+
...DEFAULT_EMBED_OPTIONS,
|
|
23
|
+
hideOrgName: true,
|
|
24
|
+
hideDashboards: true,
|
|
25
|
+
hideInsights: true,
|
|
26
|
+
hideAutomations: true
|
|
27
|
+
};
|
|
28
|
+
var DASHBOARDS_EMBED_OPTIONS = {
|
|
29
|
+
...DEFAULT_EMBED_OPTIONS,
|
|
30
|
+
hideOrgName: true,
|
|
31
|
+
hideChat: true,
|
|
32
|
+
hideInsights: true,
|
|
33
|
+
hideAutomations: true
|
|
34
|
+
};
|
|
35
|
+
var INSIGHTS_EMBED_OPTIONS = {
|
|
36
|
+
...DEFAULT_EMBED_OPTIONS,
|
|
37
|
+
hideOrgName: true,
|
|
38
|
+
hideChat: true,
|
|
39
|
+
hideDashboards: true,
|
|
40
|
+
hideAutomations: true
|
|
41
|
+
};
|
|
42
|
+
var AUTOMATIONS_EMBED_OPTIONS = {
|
|
43
|
+
...DEFAULT_EMBED_OPTIONS,
|
|
44
|
+
hideOrgName: true,
|
|
45
|
+
hideChat: true,
|
|
46
|
+
hideDashboards: true,
|
|
47
|
+
hideInsights: true
|
|
48
|
+
};
|
|
49
|
+
function buildEmbedUrl({
|
|
50
|
+
token,
|
|
51
|
+
options,
|
|
52
|
+
instanceUrl = DEFAULT_BASEDASH_URL
|
|
53
|
+
}) {
|
|
54
|
+
assertNonEmpty(token, "token");
|
|
55
|
+
const url = createInstanceUrl(instanceUrl, "api/sso/jwt");
|
|
56
|
+
const resolvedOptions = {
|
|
57
|
+
theme: options?.theme ?? DEFAULT_EMBED_OPTIONS.theme,
|
|
58
|
+
hideOrgName: options?.hideOrgName ?? DEFAULT_EMBED_OPTIONS.hideOrgName,
|
|
59
|
+
hideChat: options?.hideChat ?? DEFAULT_EMBED_OPTIONS.hideChat,
|
|
60
|
+
hideDashboards: options?.hideDashboards ?? DEFAULT_EMBED_OPTIONS.hideDashboards,
|
|
61
|
+
hideInsights: options?.hideInsights ?? DEFAULT_EMBED_OPTIONS.hideInsights,
|
|
62
|
+
hideAutomations: options?.hideAutomations ?? DEFAULT_EMBED_OPTIONS.hideAutomations,
|
|
63
|
+
hideSuggestedPrompts: options?.hideSuggestedPrompts ?? DEFAULT_EMBED_OPTIONS.hideSuggestedPrompts
|
|
64
|
+
};
|
|
65
|
+
url.searchParams.set("jwt", token);
|
|
66
|
+
url.searchParams.set(EMBED_QUERY_PARAMS.theme, resolvedOptions.theme);
|
|
67
|
+
url.searchParams.set(
|
|
68
|
+
EMBED_QUERY_PARAMS.hideOrgName,
|
|
69
|
+
String(resolvedOptions.hideOrgName)
|
|
70
|
+
);
|
|
71
|
+
url.searchParams.set(
|
|
72
|
+
EMBED_QUERY_PARAMS.hideChat,
|
|
73
|
+
String(resolvedOptions.hideChat)
|
|
74
|
+
);
|
|
75
|
+
url.searchParams.set(
|
|
76
|
+
EMBED_QUERY_PARAMS.hideDashboards,
|
|
77
|
+
String(resolvedOptions.hideDashboards)
|
|
78
|
+
);
|
|
79
|
+
url.searchParams.set(
|
|
80
|
+
EMBED_QUERY_PARAMS.hideInsights,
|
|
81
|
+
String(resolvedOptions.hideInsights)
|
|
82
|
+
);
|
|
83
|
+
url.searchParams.set(
|
|
84
|
+
EMBED_QUERY_PARAMS.hideAutomations,
|
|
85
|
+
String(resolvedOptions.hideAutomations)
|
|
86
|
+
);
|
|
87
|
+
url.searchParams.set(
|
|
88
|
+
EMBED_QUERY_PARAMS.hideSuggestedPrompts,
|
|
89
|
+
String(resolvedOptions.hideSuggestedPrompts)
|
|
90
|
+
);
|
|
91
|
+
return url.toString();
|
|
92
|
+
}
|
|
93
|
+
function buildSharedDashboardUrl({
|
|
94
|
+
publicSharingLinkId,
|
|
95
|
+
filterToken,
|
|
96
|
+
instanceUrl = DEFAULT_BASEDASH_URL
|
|
97
|
+
}) {
|
|
98
|
+
assertNonEmpty(publicSharingLinkId, "publicSharingLinkId");
|
|
99
|
+
const path = filterToken ? `shared/${encodeURIComponent(publicSharingLinkId)}/${encodeURIComponent(
|
|
100
|
+
filterToken
|
|
101
|
+
)}` : `shared/${encodeURIComponent(publicSharingLinkId)}`;
|
|
102
|
+
return createInstanceUrl(instanceUrl, path).toString();
|
|
103
|
+
}
|
|
104
|
+
function createInstanceUrl(instanceUrl, path) {
|
|
105
|
+
let baseUrl;
|
|
106
|
+
try {
|
|
107
|
+
baseUrl = new URL(instanceUrl);
|
|
108
|
+
} catch {
|
|
109
|
+
throw new TypeError(`instanceUrl must be a valid URL: ${instanceUrl}`);
|
|
110
|
+
}
|
|
111
|
+
if (baseUrl.protocol !== "https:" && baseUrl.protocol !== "http:") {
|
|
112
|
+
throw new TypeError("instanceUrl must use http or https");
|
|
113
|
+
}
|
|
114
|
+
baseUrl.search = "";
|
|
115
|
+
baseUrl.hash = "";
|
|
116
|
+
if (!baseUrl.pathname.endsWith("/")) {
|
|
117
|
+
baseUrl.pathname += "/";
|
|
118
|
+
}
|
|
119
|
+
return new URL(path, baseUrl);
|
|
120
|
+
}
|
|
121
|
+
function assertNonEmpty(value, name) {
|
|
122
|
+
if (value.trim().length === 0) {
|
|
123
|
+
throw new TypeError(`${name} must not be empty`);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
export { AUTOMATIONS_EMBED_OPTIONS, CHAT_EMBED_OPTIONS, DASHBOARDS_EMBED_OPTIONS, DEFAULT_BASEDASH_URL, DEFAULT_EMBED_OPTIONS, EMBED_QUERY_PARAMS, INSIGHTS_EMBED_OPTIONS, buildEmbedUrl, buildSharedDashboardUrl };
|
|
128
|
+
//# sourceMappingURL=index.js.map
|
|
129
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/embed.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["export const DEFAULT_BASEDASH_URL = \"https://charts.basedash.com\";\n\nexport const EMBED_QUERY_PARAMS = {\n theme: \"theme\",\n hideOrgName: \"hide_org_name\",\n hideChat: \"hide_chat\",\n hideDashboards: \"hide_dashboards\",\n hideInsights: \"hide_insights\",\n hideAutomations: \"hide_automations\",\n hideSuggestedPrompts: \"hide_suggested_prompts\",\n} as const;\n\nexport type BasedashTheme = \"light\" | \"dark\" | \"auto\";\n\nexport type BasedashRole = \"ADMIN\" | \"MEMBER\";\n\nexport interface EmbedUser {\n email: string;\n firstName?: string;\n lastName?: string;\n role?: BasedashRole;\n /**\n * Reserved for future group synchronization support in Basedash.\n */\n groups?: string[];\n}\n\nexport interface EmbedOptions {\n theme?: BasedashTheme;\n hideOrgName?: boolean;\n hideChat?: boolean;\n hideDashboards?: boolean;\n hideInsights?: boolean;\n hideAutomations?: boolean;\n hideSuggestedPrompts?: boolean;\n}\n\nexport interface BuildEmbedUrlOptions {\n token: string;\n options?: EmbedOptions;\n /**\n * Override this when embedding a self-hosted Basedash instance.\n *\n * @default \"https://charts.basedash.com\"\n */\n instanceUrl?: string;\n}\n\nexport interface BuildSharedDashboardUrlOptions {\n publicSharingLinkId: string;\n /**\n * A token created with `createDashboardFilterToken` from\n * `@basedash/embed/server`.\n */\n filterToken?: string;\n /**\n * Override this when embedding a self-hosted Basedash instance.\n *\n * @default \"https://charts.basedash.com\"\n */\n instanceUrl?: string;\n}\n\nexport const DEFAULT_EMBED_OPTIONS = {\n theme: \"auto\",\n hideOrgName: false,\n hideChat: false,\n hideDashboards: false,\n hideInsights: false,\n hideAutomations: false,\n hideSuggestedPrompts: false,\n} as const satisfies Required<EmbedOptions>;\n\nexport const CHAT_EMBED_OPTIONS = {\n ...DEFAULT_EMBED_OPTIONS,\n hideOrgName: true,\n hideDashboards: true,\n hideInsights: true,\n hideAutomations: true,\n} as const satisfies Required<EmbedOptions>;\n\nexport const DASHBOARDS_EMBED_OPTIONS = {\n ...DEFAULT_EMBED_OPTIONS,\n hideOrgName: true,\n hideChat: true,\n hideInsights: true,\n hideAutomations: true,\n} as const satisfies Required<EmbedOptions>;\n\nexport const INSIGHTS_EMBED_OPTIONS = {\n ...DEFAULT_EMBED_OPTIONS,\n hideOrgName: true,\n hideChat: true,\n hideDashboards: true,\n hideAutomations: true,\n} as const satisfies Required<EmbedOptions>;\n\nexport const AUTOMATIONS_EMBED_OPTIONS = {\n ...DEFAULT_EMBED_OPTIONS,\n hideOrgName: true,\n hideChat: true,\n hideDashboards: true,\n hideInsights: true,\n} as const satisfies Required<EmbedOptions>;\n\nexport function buildEmbedUrl({\n token,\n options,\n instanceUrl = DEFAULT_BASEDASH_URL,\n}: BuildEmbedUrlOptions): string {\n assertNonEmpty(token, \"token\");\n\n const url = createInstanceUrl(instanceUrl, \"api/sso/jwt\");\n const resolvedOptions: Required<EmbedOptions> = {\n theme: options?.theme ?? DEFAULT_EMBED_OPTIONS.theme,\n hideOrgName:\n options?.hideOrgName ?? DEFAULT_EMBED_OPTIONS.hideOrgName,\n hideChat: options?.hideChat ?? DEFAULT_EMBED_OPTIONS.hideChat,\n hideDashboards:\n options?.hideDashboards ?? DEFAULT_EMBED_OPTIONS.hideDashboards,\n hideInsights:\n options?.hideInsights ?? DEFAULT_EMBED_OPTIONS.hideInsights,\n hideAutomations:\n options?.hideAutomations ?? DEFAULT_EMBED_OPTIONS.hideAutomations,\n hideSuggestedPrompts:\n options?.hideSuggestedPrompts ??\n DEFAULT_EMBED_OPTIONS.hideSuggestedPrompts,\n };\n\n url.searchParams.set(\"jwt\", token);\n url.searchParams.set(EMBED_QUERY_PARAMS.theme, resolvedOptions.theme);\n url.searchParams.set(\n EMBED_QUERY_PARAMS.hideOrgName,\n String(resolvedOptions.hideOrgName),\n );\n url.searchParams.set(\n EMBED_QUERY_PARAMS.hideChat,\n String(resolvedOptions.hideChat),\n );\n url.searchParams.set(\n EMBED_QUERY_PARAMS.hideDashboards,\n String(resolvedOptions.hideDashboards),\n );\n url.searchParams.set(\n EMBED_QUERY_PARAMS.hideInsights,\n String(resolvedOptions.hideInsights),\n );\n url.searchParams.set(\n EMBED_QUERY_PARAMS.hideAutomations,\n String(resolvedOptions.hideAutomations),\n );\n url.searchParams.set(\n EMBED_QUERY_PARAMS.hideSuggestedPrompts,\n String(resolvedOptions.hideSuggestedPrompts),\n );\n\n return url.toString();\n}\n\nexport function buildSharedDashboardUrl({\n publicSharingLinkId,\n filterToken,\n instanceUrl = DEFAULT_BASEDASH_URL,\n}: BuildSharedDashboardUrlOptions): string {\n assertNonEmpty(publicSharingLinkId, \"publicSharingLinkId\");\n\n const path = filterToken\n ? `shared/${encodeURIComponent(publicSharingLinkId)}/${encodeURIComponent(\n filterToken,\n )}`\n : `shared/${encodeURIComponent(publicSharingLinkId)}`;\n\n return createInstanceUrl(instanceUrl, path).toString();\n}\n\nfunction createInstanceUrl(instanceUrl: string, path: string): URL {\n let baseUrl: URL;\n\n try {\n baseUrl = new URL(instanceUrl);\n } catch {\n throw new TypeError(`instanceUrl must be a valid URL: ${instanceUrl}`);\n }\n\n if (baseUrl.protocol !== \"https:\" && baseUrl.protocol !== \"http:\") {\n throw new TypeError(\"instanceUrl must use http or https\");\n }\n\n baseUrl.search = \"\";\n baseUrl.hash = \"\";\n if (!baseUrl.pathname.endsWith(\"/\")) {\n baseUrl.pathname += \"/\";\n }\n\n return new URL(path, baseUrl);\n}\n\nfunction assertNonEmpty(value: string, name: string): void {\n if (value.trim().length === 0) {\n throw new TypeError(`${name} must not be empty`);\n }\n}\n"]}
|
package/dist/react.cjs
ADDED
|
@@ -0,0 +1,486 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var react = require('react');
|
|
4
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
5
|
+
|
|
6
|
+
// src/react/index.tsx
|
|
7
|
+
|
|
8
|
+
// src/embed.ts
|
|
9
|
+
var DEFAULT_BASEDASH_URL = "https://charts.basedash.com";
|
|
10
|
+
var EMBED_QUERY_PARAMS = {
|
|
11
|
+
theme: "theme",
|
|
12
|
+
hideOrgName: "hide_org_name",
|
|
13
|
+
hideChat: "hide_chat",
|
|
14
|
+
hideDashboards: "hide_dashboards",
|
|
15
|
+
hideInsights: "hide_insights",
|
|
16
|
+
hideAutomations: "hide_automations",
|
|
17
|
+
hideSuggestedPrompts: "hide_suggested_prompts"
|
|
18
|
+
};
|
|
19
|
+
var DEFAULT_EMBED_OPTIONS = {
|
|
20
|
+
theme: "auto",
|
|
21
|
+
hideOrgName: false,
|
|
22
|
+
hideChat: false,
|
|
23
|
+
hideDashboards: false,
|
|
24
|
+
hideInsights: false,
|
|
25
|
+
hideAutomations: false,
|
|
26
|
+
hideSuggestedPrompts: false
|
|
27
|
+
};
|
|
28
|
+
var CHAT_EMBED_OPTIONS = {
|
|
29
|
+
...DEFAULT_EMBED_OPTIONS,
|
|
30
|
+
hideOrgName: true,
|
|
31
|
+
hideDashboards: true,
|
|
32
|
+
hideInsights: true,
|
|
33
|
+
hideAutomations: true
|
|
34
|
+
};
|
|
35
|
+
var DASHBOARDS_EMBED_OPTIONS = {
|
|
36
|
+
...DEFAULT_EMBED_OPTIONS,
|
|
37
|
+
hideOrgName: true,
|
|
38
|
+
hideChat: true,
|
|
39
|
+
hideInsights: true,
|
|
40
|
+
hideAutomations: true
|
|
41
|
+
};
|
|
42
|
+
var INSIGHTS_EMBED_OPTIONS = {
|
|
43
|
+
...DEFAULT_EMBED_OPTIONS,
|
|
44
|
+
hideOrgName: true,
|
|
45
|
+
hideChat: true,
|
|
46
|
+
hideDashboards: true,
|
|
47
|
+
hideAutomations: true
|
|
48
|
+
};
|
|
49
|
+
var AUTOMATIONS_EMBED_OPTIONS = {
|
|
50
|
+
...DEFAULT_EMBED_OPTIONS,
|
|
51
|
+
hideOrgName: true,
|
|
52
|
+
hideChat: true,
|
|
53
|
+
hideDashboards: true,
|
|
54
|
+
hideInsights: true
|
|
55
|
+
};
|
|
56
|
+
function buildEmbedUrl({
|
|
57
|
+
token,
|
|
58
|
+
options,
|
|
59
|
+
instanceUrl = DEFAULT_BASEDASH_URL
|
|
60
|
+
}) {
|
|
61
|
+
assertNonEmpty(token, "token");
|
|
62
|
+
const url = createInstanceUrl(instanceUrl, "api/sso/jwt");
|
|
63
|
+
const resolvedOptions = {
|
|
64
|
+
theme: options?.theme ?? DEFAULT_EMBED_OPTIONS.theme,
|
|
65
|
+
hideOrgName: options?.hideOrgName ?? DEFAULT_EMBED_OPTIONS.hideOrgName,
|
|
66
|
+
hideChat: options?.hideChat ?? DEFAULT_EMBED_OPTIONS.hideChat,
|
|
67
|
+
hideDashboards: options?.hideDashboards ?? DEFAULT_EMBED_OPTIONS.hideDashboards,
|
|
68
|
+
hideInsights: options?.hideInsights ?? DEFAULT_EMBED_OPTIONS.hideInsights,
|
|
69
|
+
hideAutomations: options?.hideAutomations ?? DEFAULT_EMBED_OPTIONS.hideAutomations,
|
|
70
|
+
hideSuggestedPrompts: options?.hideSuggestedPrompts ?? DEFAULT_EMBED_OPTIONS.hideSuggestedPrompts
|
|
71
|
+
};
|
|
72
|
+
url.searchParams.set("jwt", token);
|
|
73
|
+
url.searchParams.set(EMBED_QUERY_PARAMS.theme, resolvedOptions.theme);
|
|
74
|
+
url.searchParams.set(
|
|
75
|
+
EMBED_QUERY_PARAMS.hideOrgName,
|
|
76
|
+
String(resolvedOptions.hideOrgName)
|
|
77
|
+
);
|
|
78
|
+
url.searchParams.set(
|
|
79
|
+
EMBED_QUERY_PARAMS.hideChat,
|
|
80
|
+
String(resolvedOptions.hideChat)
|
|
81
|
+
);
|
|
82
|
+
url.searchParams.set(
|
|
83
|
+
EMBED_QUERY_PARAMS.hideDashboards,
|
|
84
|
+
String(resolvedOptions.hideDashboards)
|
|
85
|
+
);
|
|
86
|
+
url.searchParams.set(
|
|
87
|
+
EMBED_QUERY_PARAMS.hideInsights,
|
|
88
|
+
String(resolvedOptions.hideInsights)
|
|
89
|
+
);
|
|
90
|
+
url.searchParams.set(
|
|
91
|
+
EMBED_QUERY_PARAMS.hideAutomations,
|
|
92
|
+
String(resolvedOptions.hideAutomations)
|
|
93
|
+
);
|
|
94
|
+
url.searchParams.set(
|
|
95
|
+
EMBED_QUERY_PARAMS.hideSuggestedPrompts,
|
|
96
|
+
String(resolvedOptions.hideSuggestedPrompts)
|
|
97
|
+
);
|
|
98
|
+
return url.toString();
|
|
99
|
+
}
|
|
100
|
+
function buildSharedDashboardUrl({
|
|
101
|
+
publicSharingLinkId,
|
|
102
|
+
filterToken,
|
|
103
|
+
instanceUrl = DEFAULT_BASEDASH_URL
|
|
104
|
+
}) {
|
|
105
|
+
assertNonEmpty(publicSharingLinkId, "publicSharingLinkId");
|
|
106
|
+
const path = filterToken ? `shared/${encodeURIComponent(publicSharingLinkId)}/${encodeURIComponent(
|
|
107
|
+
filterToken
|
|
108
|
+
)}` : `shared/${encodeURIComponent(publicSharingLinkId)}`;
|
|
109
|
+
return createInstanceUrl(instanceUrl, path).toString();
|
|
110
|
+
}
|
|
111
|
+
function createInstanceUrl(instanceUrl, path) {
|
|
112
|
+
let baseUrl;
|
|
113
|
+
try {
|
|
114
|
+
baseUrl = new URL(instanceUrl);
|
|
115
|
+
} catch {
|
|
116
|
+
throw new TypeError(`instanceUrl must be a valid URL: ${instanceUrl}`);
|
|
117
|
+
}
|
|
118
|
+
if (baseUrl.protocol !== "https:" && baseUrl.protocol !== "http:") {
|
|
119
|
+
throw new TypeError("instanceUrl must use http or https");
|
|
120
|
+
}
|
|
121
|
+
baseUrl.search = "";
|
|
122
|
+
baseUrl.hash = "";
|
|
123
|
+
if (!baseUrl.pathname.endsWith("/")) {
|
|
124
|
+
baseUrl.pathname += "/";
|
|
125
|
+
}
|
|
126
|
+
return new URL(path, baseUrl);
|
|
127
|
+
}
|
|
128
|
+
function assertNonEmpty(value, name) {
|
|
129
|
+
if (value.trim().length === 0) {
|
|
130
|
+
throw new TypeError(`${name} must not be empty`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
var BasedashContext = react.createContext(null);
|
|
134
|
+
function BasedashProvider({
|
|
135
|
+
children,
|
|
136
|
+
token: tokenProp,
|
|
137
|
+
fetchToken,
|
|
138
|
+
instanceUrl = DEFAULT_BASEDASH_URL,
|
|
139
|
+
theme = "auto"
|
|
140
|
+
}) {
|
|
141
|
+
const fetchTokenRef = react.useRef(fetchToken);
|
|
142
|
+
const hasFetchedRef = react.useRef(false);
|
|
143
|
+
const requestIdRef = react.useRef(0);
|
|
144
|
+
const [state, setState] = react.useState(
|
|
145
|
+
() => tokenProp === void 0 ? { token: void 0, status: "loading", error: void 0 } : {
|
|
146
|
+
token: validateToken(tokenProp),
|
|
147
|
+
status: "ready",
|
|
148
|
+
error: void 0
|
|
149
|
+
}
|
|
150
|
+
);
|
|
151
|
+
react.useEffect(() => {
|
|
152
|
+
fetchTokenRef.current = fetchToken;
|
|
153
|
+
}, [fetchToken]);
|
|
154
|
+
const refreshToken = react.useCallback(async () => {
|
|
155
|
+
if (tokenProp !== void 0) {
|
|
156
|
+
const token = validateToken(tokenProp);
|
|
157
|
+
setState({ token, status: "ready", error: void 0 });
|
|
158
|
+
return token;
|
|
159
|
+
}
|
|
160
|
+
const tokenLoader = fetchTokenRef.current;
|
|
161
|
+
if (tokenLoader === void 0) {
|
|
162
|
+
throw new Error(
|
|
163
|
+
"BasedashProvider requires either token or fetchToken to be set"
|
|
164
|
+
);
|
|
165
|
+
}
|
|
166
|
+
const requestId = ++requestIdRef.current;
|
|
167
|
+
setState((current) => ({
|
|
168
|
+
token: current.token,
|
|
169
|
+
status: "loading",
|
|
170
|
+
error: void 0
|
|
171
|
+
}));
|
|
172
|
+
try {
|
|
173
|
+
const token = validateToken(await tokenLoader());
|
|
174
|
+
if (requestId === requestIdRef.current) {
|
|
175
|
+
setState({ token, status: "ready", error: void 0 });
|
|
176
|
+
}
|
|
177
|
+
return token;
|
|
178
|
+
} catch (error) {
|
|
179
|
+
const resolvedError = toError(error);
|
|
180
|
+
if (requestId === requestIdRef.current) {
|
|
181
|
+
setState({
|
|
182
|
+
token: void 0,
|
|
183
|
+
status: "error",
|
|
184
|
+
error: resolvedError
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
throw resolvedError;
|
|
188
|
+
}
|
|
189
|
+
}, [tokenProp]);
|
|
190
|
+
react.useEffect(() => {
|
|
191
|
+
if (tokenProp !== void 0) {
|
|
192
|
+
setState({
|
|
193
|
+
token: validateToken(tokenProp),
|
|
194
|
+
status: "ready",
|
|
195
|
+
error: void 0
|
|
196
|
+
});
|
|
197
|
+
hasFetchedRef.current = false;
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
if (!hasFetchedRef.current) {
|
|
201
|
+
hasFetchedRef.current = true;
|
|
202
|
+
void refreshToken().catch(() => {
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
}, [refreshToken, tokenProp]);
|
|
206
|
+
const value = react.useMemo(
|
|
207
|
+
() => ({
|
|
208
|
+
...state,
|
|
209
|
+
instanceUrl,
|
|
210
|
+
theme,
|
|
211
|
+
refreshToken
|
|
212
|
+
}),
|
|
213
|
+
[instanceUrl, refreshToken, state, theme]
|
|
214
|
+
);
|
|
215
|
+
return /* @__PURE__ */ jsxRuntime.jsx(BasedashContext.Provider, { value, children });
|
|
216
|
+
}
|
|
217
|
+
function useBasedash() {
|
|
218
|
+
const context = react.useContext(BasedashContext);
|
|
219
|
+
if (context === null) {
|
|
220
|
+
throw new Error("useBasedash must be used inside a BasedashProvider");
|
|
221
|
+
}
|
|
222
|
+
return context;
|
|
223
|
+
}
|
|
224
|
+
var BasedashApp = react.forwardRef(
|
|
225
|
+
function BasedashApp2({
|
|
226
|
+
token,
|
|
227
|
+
instanceUrl,
|
|
228
|
+
theme,
|
|
229
|
+
hideOrgName,
|
|
230
|
+
hideChat,
|
|
231
|
+
hideDashboards,
|
|
232
|
+
hideInsights,
|
|
233
|
+
hideAutomations,
|
|
234
|
+
hideSuggestedPrompts,
|
|
235
|
+
title = "Basedash",
|
|
236
|
+
...frameProps
|
|
237
|
+
}, ref) {
|
|
238
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
239
|
+
AuthenticatedBasedashFrame,
|
|
240
|
+
{
|
|
241
|
+
ref,
|
|
242
|
+
token,
|
|
243
|
+
instanceUrl,
|
|
244
|
+
options: {
|
|
245
|
+
theme,
|
|
246
|
+
hideOrgName,
|
|
247
|
+
hideChat,
|
|
248
|
+
hideDashboards,
|
|
249
|
+
hideInsights,
|
|
250
|
+
hideAutomations,
|
|
251
|
+
hideSuggestedPrompts
|
|
252
|
+
},
|
|
253
|
+
title,
|
|
254
|
+
...frameProps
|
|
255
|
+
}
|
|
256
|
+
);
|
|
257
|
+
}
|
|
258
|
+
);
|
|
259
|
+
var BasedashChat = react.forwardRef(
|
|
260
|
+
function BasedashChat2({
|
|
261
|
+
token,
|
|
262
|
+
instanceUrl,
|
|
263
|
+
theme,
|
|
264
|
+
hideOrgName,
|
|
265
|
+
hideSuggestedPrompts,
|
|
266
|
+
title = "Basedash chat",
|
|
267
|
+
...frameProps
|
|
268
|
+
}, ref) {
|
|
269
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
270
|
+
AuthenticatedBasedashFrame,
|
|
271
|
+
{
|
|
272
|
+
ref,
|
|
273
|
+
token,
|
|
274
|
+
instanceUrl,
|
|
275
|
+
options: {
|
|
276
|
+
...CHAT_EMBED_OPTIONS,
|
|
277
|
+
theme: theme ?? CHAT_EMBED_OPTIONS.theme,
|
|
278
|
+
hideOrgName: hideOrgName ?? CHAT_EMBED_OPTIONS.hideOrgName,
|
|
279
|
+
hideSuggestedPrompts: hideSuggestedPrompts ?? CHAT_EMBED_OPTIONS.hideSuggestedPrompts
|
|
280
|
+
},
|
|
281
|
+
title,
|
|
282
|
+
...frameProps
|
|
283
|
+
}
|
|
284
|
+
);
|
|
285
|
+
}
|
|
286
|
+
);
|
|
287
|
+
var BasedashDashboards = react.forwardRef(function BasedashDashboards2({
|
|
288
|
+
token,
|
|
289
|
+
instanceUrl,
|
|
290
|
+
theme,
|
|
291
|
+
hideOrgName,
|
|
292
|
+
title = "Basedash dashboards",
|
|
293
|
+
...frameProps
|
|
294
|
+
}, ref) {
|
|
295
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
296
|
+
AuthenticatedBasedashFrame,
|
|
297
|
+
{
|
|
298
|
+
ref,
|
|
299
|
+
token,
|
|
300
|
+
instanceUrl,
|
|
301
|
+
options: {
|
|
302
|
+
...DASHBOARDS_EMBED_OPTIONS,
|
|
303
|
+
theme: theme ?? DASHBOARDS_EMBED_OPTIONS.theme,
|
|
304
|
+
hideOrgName: hideOrgName ?? DASHBOARDS_EMBED_OPTIONS.hideOrgName
|
|
305
|
+
},
|
|
306
|
+
title,
|
|
307
|
+
...frameProps
|
|
308
|
+
}
|
|
309
|
+
);
|
|
310
|
+
});
|
|
311
|
+
var BasedashInsights = react.forwardRef(function BasedashInsights2({
|
|
312
|
+
token,
|
|
313
|
+
instanceUrl,
|
|
314
|
+
theme,
|
|
315
|
+
hideOrgName,
|
|
316
|
+
title = "Basedash insights",
|
|
317
|
+
...frameProps
|
|
318
|
+
}, ref) {
|
|
319
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
320
|
+
AuthenticatedBasedashFrame,
|
|
321
|
+
{
|
|
322
|
+
ref,
|
|
323
|
+
token,
|
|
324
|
+
instanceUrl,
|
|
325
|
+
options: {
|
|
326
|
+
...INSIGHTS_EMBED_OPTIONS,
|
|
327
|
+
theme: theme ?? INSIGHTS_EMBED_OPTIONS.theme,
|
|
328
|
+
hideOrgName: hideOrgName ?? INSIGHTS_EMBED_OPTIONS.hideOrgName
|
|
329
|
+
},
|
|
330
|
+
title,
|
|
331
|
+
...frameProps
|
|
332
|
+
}
|
|
333
|
+
);
|
|
334
|
+
});
|
|
335
|
+
var BasedashAutomations = react.forwardRef(function BasedashAutomations2({
|
|
336
|
+
token,
|
|
337
|
+
instanceUrl,
|
|
338
|
+
theme,
|
|
339
|
+
hideOrgName,
|
|
340
|
+
title = "Basedash automations",
|
|
341
|
+
...frameProps
|
|
342
|
+
}, ref) {
|
|
343
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
344
|
+
AuthenticatedBasedashFrame,
|
|
345
|
+
{
|
|
346
|
+
ref,
|
|
347
|
+
token,
|
|
348
|
+
instanceUrl,
|
|
349
|
+
options: {
|
|
350
|
+
...AUTOMATIONS_EMBED_OPTIONS,
|
|
351
|
+
theme: theme ?? AUTOMATIONS_EMBED_OPTIONS.theme,
|
|
352
|
+
hideOrgName: hideOrgName ?? AUTOMATIONS_EMBED_OPTIONS.hideOrgName
|
|
353
|
+
},
|
|
354
|
+
title,
|
|
355
|
+
...frameProps
|
|
356
|
+
}
|
|
357
|
+
);
|
|
358
|
+
});
|
|
359
|
+
var BasedashSharedDashboard = react.forwardRef(function BasedashSharedDashboard2({
|
|
360
|
+
publicSharingLinkId,
|
|
361
|
+
filterToken,
|
|
362
|
+
instanceUrl,
|
|
363
|
+
title = "Basedash dashboard",
|
|
364
|
+
...frameProps
|
|
365
|
+
}, ref) {
|
|
366
|
+
const src = buildSharedDashboardUrl({
|
|
367
|
+
publicSharingLinkId,
|
|
368
|
+
filterToken,
|
|
369
|
+
instanceUrl
|
|
370
|
+
});
|
|
371
|
+
return /* @__PURE__ */ jsxRuntime.jsx(BasedashFrame, { ref, src, title, ...frameProps });
|
|
372
|
+
});
|
|
373
|
+
var AuthenticatedBasedashFrame = react.forwardRef(function AuthenticatedBasedashFrame2({
|
|
374
|
+
token: tokenProp,
|
|
375
|
+
instanceUrl: instanceUrlProp,
|
|
376
|
+
options,
|
|
377
|
+
errorFallback,
|
|
378
|
+
...frameProps
|
|
379
|
+
}, ref) {
|
|
380
|
+
const context = react.useContext(BasedashContext);
|
|
381
|
+
const token = tokenProp ?? context?.token;
|
|
382
|
+
const instanceUrl = instanceUrlProp ?? context?.instanceUrl ?? DEFAULT_BASEDASH_URL;
|
|
383
|
+
const theme = options.theme ?? context?.theme ?? "auto";
|
|
384
|
+
if (token === void 0) {
|
|
385
|
+
if (context === null) {
|
|
386
|
+
throw new Error(
|
|
387
|
+
"Authenticated Basedash embeds require a token prop or BasedashProvider"
|
|
388
|
+
);
|
|
389
|
+
}
|
|
390
|
+
if (context.status === "error" && context.error !== void 0) {
|
|
391
|
+
if (errorFallback === void 0) {
|
|
392
|
+
throw context.error;
|
|
393
|
+
}
|
|
394
|
+
return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: typeof errorFallback === "function" ? errorFallback(context.error) : errorFallback });
|
|
395
|
+
}
|
|
396
|
+
return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: frameProps.loadingFallback ?? null });
|
|
397
|
+
}
|
|
398
|
+
const src = buildEmbedUrl({
|
|
399
|
+
token,
|
|
400
|
+
instanceUrl,
|
|
401
|
+
options: {
|
|
402
|
+
...options,
|
|
403
|
+
theme
|
|
404
|
+
}
|
|
405
|
+
});
|
|
406
|
+
return /* @__PURE__ */ jsxRuntime.jsx(BasedashFrame, { ref, src, ...frameProps });
|
|
407
|
+
});
|
|
408
|
+
var BasedashFrame = react.forwardRef(function BasedashFrame2({
|
|
409
|
+
src,
|
|
410
|
+
className,
|
|
411
|
+
style,
|
|
412
|
+
iframeProps,
|
|
413
|
+
loadingFallback,
|
|
414
|
+
title = "Basedash"
|
|
415
|
+
}, ref) {
|
|
416
|
+
const [loaded, setLoaded] = react.useState(false);
|
|
417
|
+
react.useEffect(() => {
|
|
418
|
+
setLoaded(false);
|
|
419
|
+
}, [src]);
|
|
420
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
421
|
+
"div",
|
|
422
|
+
{
|
|
423
|
+
className,
|
|
424
|
+
style: {
|
|
425
|
+
position: "relative",
|
|
426
|
+
width: "100%",
|
|
427
|
+
height: "100%",
|
|
428
|
+
...style
|
|
429
|
+
},
|
|
430
|
+
children: [
|
|
431
|
+
!loaded && loadingFallback !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
432
|
+
"div",
|
|
433
|
+
{
|
|
434
|
+
"aria-hidden": "true",
|
|
435
|
+
style: {
|
|
436
|
+
position: "absolute",
|
|
437
|
+
inset: 0
|
|
438
|
+
},
|
|
439
|
+
children: loadingFallback
|
|
440
|
+
}
|
|
441
|
+
) : null,
|
|
442
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
443
|
+
"iframe",
|
|
444
|
+
{
|
|
445
|
+
...iframeProps,
|
|
446
|
+
ref,
|
|
447
|
+
src,
|
|
448
|
+
title,
|
|
449
|
+
allow: iframeProps?.allow ?? "clipboard-write",
|
|
450
|
+
loading: iframeProps?.loading ?? "eager",
|
|
451
|
+
onLoad: (event) => {
|
|
452
|
+
setLoaded(true);
|
|
453
|
+
iframeProps?.onLoad?.(event);
|
|
454
|
+
},
|
|
455
|
+
style: {
|
|
456
|
+
width: "100%",
|
|
457
|
+
height: "100%",
|
|
458
|
+
border: 0,
|
|
459
|
+
...iframeProps?.style
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
)
|
|
463
|
+
]
|
|
464
|
+
}
|
|
465
|
+
);
|
|
466
|
+
});
|
|
467
|
+
function validateToken(token) {
|
|
468
|
+
if (token.trim().length === 0) {
|
|
469
|
+
throw new TypeError("Basedash token must not be empty");
|
|
470
|
+
}
|
|
471
|
+
return token;
|
|
472
|
+
}
|
|
473
|
+
function toError(error) {
|
|
474
|
+
return error instanceof Error ? error : new Error(String(error));
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
exports.BasedashApp = BasedashApp;
|
|
478
|
+
exports.BasedashAutomations = BasedashAutomations;
|
|
479
|
+
exports.BasedashChat = BasedashChat;
|
|
480
|
+
exports.BasedashDashboards = BasedashDashboards;
|
|
481
|
+
exports.BasedashInsights = BasedashInsights;
|
|
482
|
+
exports.BasedashProvider = BasedashProvider;
|
|
483
|
+
exports.BasedashSharedDashboard = BasedashSharedDashboard;
|
|
484
|
+
exports.useBasedash = useBasedash;
|
|
485
|
+
//# sourceMappingURL=react.cjs.map
|
|
486
|
+
//# sourceMappingURL=react.cjs.map
|