react-semaphor 0.1.333 → 0.1.335
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/dist/analytics-protocol/index.cjs +1 -1
- package/dist/analytics-protocol/index.js +68 -232
- package/dist/brand-studio/index.cjs +1 -1
- package/dist/brand-studio/index.js +3 -3
- package/dist/briefings/index.cjs +1 -1
- package/dist/briefings/index.js +435 -391
- package/dist/chunks/{braces-BxHNQOYk.js → braces-BLa_lORs.js} +1 -1
- package/dist/chunks/{braces-4vZnfI1o.js → braces-Q86XHDaD.js} +1 -1
- package/dist/chunks/{calendar-preferences-dialog-mY0L4X0S.js → calendar-preferences-dialog-Bm7ji3k9.js} +1 -1
- package/dist/chunks/{calendar-preferences-dialog-Cxj1zuet.js → calendar-preferences-dialog-Cocogo9H.js} +3 -3
- package/dist/chunks/catalog-field-grounding-DmT7aGUA.js +191 -0
- package/dist/chunks/catalog-field-grounding-VgVzDd25.js +1 -0
- package/dist/chunks/{chevrons-up-down-CIlNtntj.js → chevrons-up-down-BBTZ5pAY.js} +1 -1
- package/dist/chunks/{chevrons-up-down-oh0-U32g.js → chevrons-up-down-CYuWasy_.js} +1 -1
- package/dist/chunks/{dashboard-briefing-launcher-ih3HDp3Q.js → dashboard-briefing-launcher-BtqtLx1-.js} +1 -1
- package/dist/chunks/{dashboard-briefing-launcher-BQXscUvQ.js → dashboard-briefing-launcher-DF4CoaRn.js} +4 -4
- package/dist/chunks/{dashboard-controls-Dje4oqXJ.js → dashboard-controls-0VMAeMoa.js} +1 -1
- package/dist/chunks/{dashboard-controls-UN6XyI0w.js → dashboard-controls-B5U-VUxs.js} +6 -6
- package/dist/chunks/{dashboard-json-CahEbpAw.js → dashboard-json-CqbLOfnr.js} +1 -1
- package/dist/chunks/{dashboard-json-BB2frqlS.js → dashboard-json-Hmc0Ri5z.js} +2 -2
- package/dist/chunks/{edit-dashboard-visual-B9QNMn1k.js → edit-dashboard-visual-C0EDM0QB.js} +3 -3
- package/dist/chunks/{edit-dashboard-visual-2xDuubCd.js → edit-dashboard-visual-D4VVu-QQ.js} +1302 -1302
- package/dist/chunks/{index-DMilTFOG.js → index-DE0vIuYG.js} +238 -238
- package/dist/chunks/{index-zqZLz4DH.js → index-DzyUhzV3.js} +30507 -30454
- package/dist/chunks/{palette-B78b9bL_.js → palette-B9AbDw0n.js} +1 -1
- package/dist/chunks/{palette-BzcTKXSo.js → palette-DalASD28.js} +1 -1
- package/dist/chunks/{resource-management-panel-CR87UhdL.js → resource-management-panel-C4YydU9I.js} +3 -3
- package/dist/chunks/{resource-management-panel-BiDjNUl9.js → resource-management-panel-P9iNqBM1.js} +1 -1
- package/dist/chunks/{switch-DionLwdI.js → switch-BAYfpAEb.js} +1968 -2009
- package/dist/chunks/switch-CyRoZr5T.js +173 -0
- package/dist/chunks/{use-create-flow-overlay-state-UWfoDonf.js → use-create-flow-overlay-state-CbhjxI3W.js} +1 -1
- package/dist/chunks/{use-create-flow-overlay-state-BYZywwZQ.js → use-create-flow-overlay-state-P1LMwQ89.js} +3 -3
- package/dist/chunks/{use-visual-utils-Ce_aCega.js → use-visual-utils-CV6_-y4p.js} +1 -1
- package/dist/chunks/{use-visual-utils-rqBoCLlu.js → use-visual-utils-lB-3Zk0b.js} +2 -2
- package/dist/chunks/validators-BuaRUBQI.js +561 -0
- package/dist/chunks/validators-x74uYpnG.js +2 -0
- package/dist/dashboard/index.cjs +1 -1
- package/dist/dashboard/index.js +1 -1
- package/dist/dashboard-authoring/index.cjs +3 -3
- package/dist/dashboard-authoring/index.js +378 -377
- package/dist/data-app-builder/index.cjs +1 -1
- package/dist/data-app-builder/index.js +1 -1
- package/dist/data-app-builder-browser-runtime/index.cjs +1 -1
- package/dist/data-app-builder-browser-runtime/index.js +4 -9
- package/dist/data-app-sdk/index.cjs +1 -1
- package/dist/data-app-sdk/index.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +7 -7
- package/dist/surfboard/index.cjs +1 -1
- package/dist/surfboard/index.js +2 -2
- package/dist/types/analytics-protocol.d.ts +90 -0
- package/dist/types/briefings.d.ts +12 -0
- package/dist/types/dashboard-authoring.d.ts +14 -0
- package/dist/types/data-app-builder.d.ts +14 -0
- package/dist/types/data-app-sdk.d.ts +14 -0
- package/dist/types/main.d.ts +16 -0
- package/package.json +1 -1
- package/dist/chunks/switch-aSDkK5PS.js +0 -173
- package/dist/chunks/validators-DDAweCzB.js +0 -371
- package/dist/chunks/validators-odlRJblR.js +0 -2
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { b as be } from "../chunks/catalog-field-grounding-DmT7aGUA.js";
|
|
2
|
+
import { c as Ie, v as ge } from "../chunks/validators-BuaRUBQI.js";
|
|
3
|
+
const ye = [
|
|
3
4
|
"lg",
|
|
4
5
|
"md",
|
|
5
6
|
"sm",
|
|
@@ -12,12 +13,12 @@ function _(e) {
|
|
|
12
13
|
function k(e) {
|
|
13
14
|
return typeof e == "string" ? e : null;
|
|
14
15
|
}
|
|
15
|
-
function
|
|
16
|
-
var t, n,
|
|
17
|
-
return !!(e && typeof e == "object") && (((t = _(e)) == null ? void 0 : t.kind) === "semantic" || ((n = _(e)) == null ? void 0 : n.kind) === "physical" || ((
|
|
16
|
+
function _e(e) {
|
|
17
|
+
var t, n, a;
|
|
18
|
+
return !!(e && typeof e == "object") && (((t = _(e)) == null ? void 0 : t.kind) === "semantic" || ((n = _(e)) == null ? void 0 : n.kind) === "physical" || ((a = _(e)) == null ? void 0 : a.kind) === "sql");
|
|
18
19
|
}
|
|
19
20
|
function N(e) {
|
|
20
|
-
return
|
|
21
|
+
return _e(e) ? e.kind === "semantic" ? !!(e.domainId && e.datasetName) : e.kind === "physical" ? !!(e.connectionId && e.tableName) : !1 : !1;
|
|
21
22
|
}
|
|
22
23
|
function ee(e) {
|
|
23
24
|
return e.kind === "semantic" ? [
|
|
@@ -36,10 +37,10 @@ function ee(e) {
|
|
|
36
37
|
function O(e, t) {
|
|
37
38
|
return e.domainId !== t.domainId ? !1 : e.datasetId && t.datasetId ? e.datasetId === t.datasetId : e.datasetName === t.datasetName;
|
|
38
39
|
}
|
|
39
|
-
function
|
|
40
|
+
function re(e, t) {
|
|
40
41
|
return e.kind === "semantic" && t.kind === "semantic" ? O(e, t) : ee(e) === ee(t);
|
|
41
42
|
}
|
|
42
|
-
function
|
|
43
|
+
function we(e, t) {
|
|
43
44
|
return e.kind !== "semantic" || t.kind !== "semantic" ? e : {
|
|
44
45
|
...e,
|
|
45
46
|
datasetId: e.datasetId || t.datasetId,
|
|
@@ -50,23 +51,23 @@ function _e(e, t) {
|
|
|
50
51
|
function q(e) {
|
|
51
52
|
const t = [];
|
|
52
53
|
for (const n of e) {
|
|
53
|
-
const
|
|
54
|
-
(i) =>
|
|
54
|
+
const a = t.findIndex(
|
|
55
|
+
(i) => re(i, n)
|
|
55
56
|
);
|
|
56
|
-
|
|
57
|
-
t[
|
|
57
|
+
a === -1 ? t.push(n) : t[a] = we(
|
|
58
|
+
t[a],
|
|
58
59
|
n
|
|
59
60
|
);
|
|
60
61
|
}
|
|
61
62
|
return t;
|
|
62
63
|
}
|
|
63
|
-
function
|
|
64
|
+
function kt(e) {
|
|
64
65
|
return q(e)[0];
|
|
65
66
|
}
|
|
66
67
|
function z(e, t) {
|
|
67
68
|
return e.kind !== "semantic" || e.connectionId || (t == null ? void 0 : t.kind) !== "semantic" || !O(e, t) || !t.connectionId ? e : { ...e, connectionId: t.connectionId };
|
|
68
69
|
}
|
|
69
|
-
function
|
|
70
|
+
function j(e) {
|
|
70
71
|
return N(e) ? e : void 0;
|
|
71
72
|
}
|
|
72
73
|
function te(e, t) {
|
|
@@ -76,37 +77,37 @@ function te(e, t) {
|
|
|
76
77
|
);
|
|
77
78
|
}
|
|
78
79
|
function v(e, t) {
|
|
79
|
-
const n =
|
|
80
|
+
const n = j(e == null ? void 0 : e.source);
|
|
80
81
|
return n ? z(n, t) : void 0;
|
|
81
82
|
}
|
|
82
|
-
function
|
|
83
|
+
function ve({
|
|
83
84
|
explicitSource: e,
|
|
84
85
|
field: t,
|
|
85
86
|
defaultSource: n,
|
|
86
|
-
fallbackSources:
|
|
87
|
+
fallbackSources: a
|
|
87
88
|
}) {
|
|
88
|
-
const i = [n, ...
|
|
89
|
-
|
|
90
|
-
te(
|
|
89
|
+
const i = [n, ...a || []], r = j(e), o = r ? z(
|
|
90
|
+
r,
|
|
91
|
+
te(r, i)
|
|
91
92
|
) : void 0;
|
|
92
|
-
if (
|
|
93
|
-
return
|
|
93
|
+
if (o)
|
|
94
|
+
return o;
|
|
94
95
|
if (e !== void 0)
|
|
95
96
|
return;
|
|
96
|
-
const d = v(t, n),
|
|
97
|
+
const d = v(t, n), s = d ? z(
|
|
97
98
|
d,
|
|
98
99
|
te(d, i)
|
|
99
100
|
) : void 0;
|
|
100
|
-
if (
|
|
101
|
-
return
|
|
101
|
+
if (s)
|
|
102
|
+
return s;
|
|
102
103
|
if ((t == null ? void 0 : t.source) === void 0)
|
|
103
|
-
return
|
|
104
|
+
return j(n);
|
|
104
105
|
}
|
|
105
|
-
function
|
|
106
|
+
function ke(e, t) {
|
|
106
107
|
if (!(e != null && e.name) || !(t != null && t.name) || e.name !== t.name)
|
|
107
108
|
return !1;
|
|
108
|
-
const n = v(e),
|
|
109
|
-
return !n || !
|
|
109
|
+
const n = v(e), a = v(t);
|
|
110
|
+
return !n || !a ? !0 : re(n, a);
|
|
110
111
|
}
|
|
111
112
|
function A(e) {
|
|
112
113
|
var t;
|
|
@@ -116,35 +117,35 @@ function ie(e) {
|
|
|
116
117
|
var t, n;
|
|
117
118
|
return A(e) !== "semantic" ? null : ((n = k((t = _(e)) == null ? void 0 : t.domainId)) == null ? void 0 : n.trim()) || null;
|
|
118
119
|
}
|
|
119
|
-
function
|
|
120
|
+
function Se(e) {
|
|
120
121
|
var t;
|
|
121
122
|
return A(e) !== "semantic" ? null : k((t = _(e)) == null ? void 0 : t.datasetName);
|
|
122
123
|
}
|
|
123
|
-
function
|
|
124
|
+
function Ae(e) {
|
|
124
125
|
var t;
|
|
125
126
|
return A(e) !== "semantic" ? null : k((t = _(e)) == null ? void 0 : t.datasetId);
|
|
126
127
|
}
|
|
127
|
-
function
|
|
128
|
+
function Ce(e) {
|
|
128
129
|
var t;
|
|
129
130
|
return A(e) !== "physical" ? null : k((t = _(e)) == null ? void 0 : t.connectionId);
|
|
130
131
|
}
|
|
131
|
-
function
|
|
132
|
+
function xe(e) {
|
|
132
133
|
var t;
|
|
133
134
|
return A(e) !== "physical" ? null : k((t = _(e)) == null ? void 0 : t.tableName);
|
|
134
135
|
}
|
|
135
|
-
function
|
|
136
|
+
function De(e) {
|
|
136
137
|
var t;
|
|
137
138
|
return A(e) !== "physical" ? "" : k((t = _(e)) == null ? void 0 : t.databaseName) || "";
|
|
138
139
|
}
|
|
139
|
-
function
|
|
140
|
+
function Fe(e) {
|
|
140
141
|
var t;
|
|
141
142
|
return A(e) !== "physical" ? "" : k((t = _(e)) == null ? void 0 : t.schemaName) || "";
|
|
142
143
|
}
|
|
143
|
-
function
|
|
144
|
+
function Ne(e) {
|
|
144
145
|
if (e.analyticsIntent && typeof e.analyticsIntent == "object" && "source" in e.analyticsIntent)
|
|
145
146
|
return e.analyticsIntent.source;
|
|
146
147
|
}
|
|
147
|
-
function
|
|
148
|
+
function Te({
|
|
148
149
|
datasets: e,
|
|
149
150
|
requireAtLeastOne: t
|
|
150
151
|
}) {
|
|
@@ -152,19 +153,19 @@ function Ne({
|
|
|
152
153
|
return { ok: !1, issue: "invalid_dataset_count" };
|
|
153
154
|
if (e.length <= 1)
|
|
154
155
|
return { ok: !0 };
|
|
155
|
-
const n = e.map(ie),
|
|
156
|
-
return n.some((i) => !i) ||
|
|
156
|
+
const n = e.map(ie), a = new Set(n.filter(Boolean));
|
|
157
|
+
return n.some((i) => !i) || a.size !== 1 ? { ok: !1, issue: "invalid_multi_dataset_scope" } : { ok: !0 };
|
|
157
158
|
}
|
|
158
159
|
function W(e, t) {
|
|
159
160
|
if (!t)
|
|
160
161
|
return !1;
|
|
161
162
|
if (t.kind === "semantic") {
|
|
162
|
-
const n =
|
|
163
|
-
return ie(e) === t.domainId ? n && t.datasetId ? n === t.datasetId :
|
|
163
|
+
const n = Ae(e);
|
|
164
|
+
return ie(e) === t.domainId ? n && t.datasetId ? n === t.datasetId : Se(e) === t.datasetName : !1;
|
|
164
165
|
}
|
|
165
|
-
return t.kind === "physical" ?
|
|
166
|
+
return t.kind === "physical" ? Ce(e) === t.connectionId && xe(e) === t.tableName && De(e) === (t.databaseName || "") && Fe(e) === (t.schemaName || "") : !1;
|
|
166
167
|
}
|
|
167
|
-
function
|
|
168
|
+
function St(e, t) {
|
|
168
169
|
return e.find(
|
|
169
170
|
(n) => W(n, t)
|
|
170
171
|
);
|
|
@@ -181,15 +182,15 @@ function $(e) {
|
|
|
181
182
|
}
|
|
182
183
|
return null;
|
|
183
184
|
}
|
|
184
|
-
function
|
|
185
|
+
function oe({
|
|
185
186
|
card: e,
|
|
186
187
|
datasets: t,
|
|
187
188
|
errors: n
|
|
188
189
|
}) {
|
|
189
190
|
if (e.type === "text")
|
|
190
191
|
return;
|
|
191
|
-
const
|
|
192
|
-
if (!
|
|
192
|
+
const a = Ne(e);
|
|
193
|
+
if (!a) {
|
|
193
194
|
if (t.length <= 1)
|
|
194
195
|
return;
|
|
195
196
|
n.push(
|
|
@@ -201,7 +202,7 @@ function se({
|
|
|
201
202
|
);
|
|
202
203
|
return;
|
|
203
204
|
}
|
|
204
|
-
t.some((i) => W(i,
|
|
205
|
+
t.some((i) => W(i, a)) || n.push(
|
|
205
206
|
u(
|
|
206
207
|
"invalid_card_analytics_source",
|
|
207
208
|
"Dashboard cards with an explicit analytics source must use one of the selected datasets.",
|
|
@@ -209,7 +210,7 @@ function se({
|
|
|
209
210
|
)
|
|
210
211
|
);
|
|
211
212
|
}
|
|
212
|
-
function
|
|
213
|
+
function $e(e) {
|
|
213
214
|
var t;
|
|
214
215
|
return e ? [
|
|
215
216
|
(t = e.dateFieldRef) == null ? void 0 : t.source,
|
|
@@ -218,15 +219,15 @@ function Te(e) {
|
|
|
218
219
|
(n) => !!n
|
|
219
220
|
) : [];
|
|
220
221
|
}
|
|
221
|
-
function
|
|
222
|
+
function se({
|
|
222
223
|
card: e,
|
|
223
224
|
datasets: t,
|
|
224
225
|
errors: n
|
|
225
226
|
}) {
|
|
226
227
|
if (e.type !== "text") {
|
|
227
|
-
for (const
|
|
228
|
-
if (
|
|
229
|
-
(i) => W(i,
|
|
228
|
+
for (const a of $e(e.query))
|
|
229
|
+
if (a && !t.some(
|
|
230
|
+
(i) => W(i, a)
|
|
230
231
|
)) {
|
|
231
232
|
n.push(
|
|
232
233
|
u(
|
|
@@ -239,8 +240,8 @@ function oe({
|
|
|
239
240
|
}
|
|
240
241
|
}
|
|
241
242
|
}
|
|
242
|
-
function
|
|
243
|
-
return e.length === t.length && e.every((n,
|
|
243
|
+
function Me(e, t) {
|
|
244
|
+
return e.length === t.length && e.every((n, a) => n === t[a]);
|
|
244
245
|
}
|
|
245
246
|
function de({
|
|
246
247
|
card: e,
|
|
@@ -248,8 +249,8 @@ function de({
|
|
|
248
249
|
}) {
|
|
249
250
|
if (e.type === "text" || !e.query)
|
|
250
251
|
return;
|
|
251
|
-
const { dateField: n, dateFieldRef:
|
|
252
|
-
if (
|
|
252
|
+
const { dateField: n, dateFieldRef: a, dimensions: i, dimensionRefs: r } = e.query;
|
|
253
|
+
if (a && a.name !== n) {
|
|
253
254
|
t.push(
|
|
254
255
|
u(
|
|
255
256
|
"invalid_card_query_ref",
|
|
@@ -259,10 +260,10 @@ function de({
|
|
|
259
260
|
);
|
|
260
261
|
return;
|
|
261
262
|
}
|
|
262
|
-
if (!Array.isArray(
|
|
263
|
+
if (!Array.isArray(r))
|
|
263
264
|
return;
|
|
264
|
-
const
|
|
265
|
-
|
|
265
|
+
const o = Array.isArray(i) ? i : [], d = r.map((s) => s.name);
|
|
266
|
+
Me(d, o) || t.push(
|
|
266
267
|
u(
|
|
267
268
|
"invalid_card_query_ref",
|
|
268
269
|
"Dashboard card source-aware dimension references must match the query dimensions.",
|
|
@@ -275,12 +276,12 @@ function ce({
|
|
|
275
276
|
errors: t,
|
|
276
277
|
requireAtLeastOne: n
|
|
277
278
|
}) {
|
|
278
|
-
const
|
|
279
|
+
const a = Te({
|
|
279
280
|
datasets: e,
|
|
280
281
|
requireAtLeastOne: n
|
|
281
282
|
});
|
|
282
|
-
if (!
|
|
283
|
-
if (
|
|
283
|
+
if (!a.ok) {
|
|
284
|
+
if (a.issue === "invalid_dataset_count") {
|
|
284
285
|
t.push(
|
|
285
286
|
u(
|
|
286
287
|
"invalid_dataset_count",
|
|
@@ -297,7 +298,7 @@ function ce({
|
|
|
297
298
|
);
|
|
298
299
|
}
|
|
299
300
|
}
|
|
300
|
-
function
|
|
301
|
+
function qe(e) {
|
|
301
302
|
var m, w;
|
|
302
303
|
const t = [];
|
|
303
304
|
if (!e || typeof e != "object")
|
|
@@ -311,29 +312,29 @@ function Me(e) {
|
|
|
311
312
|
],
|
|
312
313
|
warnings: []
|
|
313
314
|
};
|
|
314
|
-
const n = e,
|
|
315
|
+
const n = e, a = [...n.warnings || []];
|
|
315
316
|
n.version !== 1 && t.push(u("invalid_version", "Dashboard plan version must be 1.")), (m = n.title) != null && m.trim() || t.push(u("missing_title", "Dashboard plan needs a title."));
|
|
316
|
-
const i = Array.isArray(n.datasets) ? n.datasets : [],
|
|
317
|
-
ce({ datasets: i, errors: t, requireAtLeastOne: !0 }),
|
|
317
|
+
const i = Array.isArray(n.datasets) ? n.datasets : [], r = Array.isArray(n.sheets) ? n.sheets : [];
|
|
318
|
+
ce({ datasets: i, errors: t, requireAtLeastOne: !0 }), r.length !== 1 && t.push(
|
|
318
319
|
u(
|
|
319
320
|
"invalid_sheet_count",
|
|
320
321
|
"MVP dashboard authoring creates exactly one dashboard sheet."
|
|
321
322
|
)
|
|
322
323
|
);
|
|
323
|
-
const
|
|
324
|
-
|
|
324
|
+
const o = r[0];
|
|
325
|
+
o && o.kind !== "dashboard" && t.push(
|
|
325
326
|
u("invalid_sheet_kind", 'Generated sheet must use kind "dashboard".')
|
|
326
327
|
);
|
|
327
|
-
const d = (
|
|
328
|
+
const d = (o == null ? void 0 : o.cards) || [];
|
|
328
329
|
d.length > M && t.push(
|
|
329
330
|
u(
|
|
330
331
|
"too_many_cards",
|
|
331
332
|
`Generated dashboards can contain at most ${M} cards.`
|
|
332
333
|
)
|
|
333
334
|
);
|
|
334
|
-
const
|
|
335
|
-
|
|
336
|
-
u("duplicate_card_id", `Duplicate generated card id: ${
|
|
335
|
+
const s = $(d.map((l) => l.id));
|
|
336
|
+
s && t.push(
|
|
337
|
+
u("duplicate_card_id", `Duplicate generated card id: ${s}.`)
|
|
337
338
|
);
|
|
338
339
|
const f = $(d.map((l) => l.frameId));
|
|
339
340
|
f && t.push(
|
|
@@ -349,13 +350,13 @@ function Me(e) {
|
|
|
349
350
|
"Whole-dashboard authoring supports built-in visual types only.",
|
|
350
351
|
l.id
|
|
351
352
|
)
|
|
352
|
-
), l.type !== "text" && !l.query &&
|
|
353
|
+
), l.type !== "text" && !l.query && a.push(
|
|
353
354
|
u(
|
|
354
355
|
"missing_query_intent",
|
|
355
356
|
"Non-text card has no query intent and may be skipped by the app layer.",
|
|
356
357
|
l.id
|
|
357
358
|
)
|
|
358
|
-
),
|
|
359
|
+
), oe({ card: l, datasets: i, errors: t }), de({ card: l, errors: t }), se({ card: l, datasets: i, errors: t });
|
|
359
360
|
const p = Array.isArray(n.filterInputs) ? n.filterInputs : [], I = p.map((l) => l.id), y = $(I);
|
|
360
361
|
y && t.push(
|
|
361
362
|
u(
|
|
@@ -378,10 +379,10 @@ function Me(e) {
|
|
|
378
379
|
`Creating domain calculated field "${l.name}" is outside MVP.`
|
|
379
380
|
)
|
|
380
381
|
);
|
|
381
|
-
return { ok: t.length === 0, errors: t, warnings:
|
|
382
|
+
return { ok: t.length === 0, errors: t, warnings: a };
|
|
382
383
|
}
|
|
383
|
-
function
|
|
384
|
-
var
|
|
384
|
+
function Re(e) {
|
|
385
|
+
var o;
|
|
385
386
|
const t = [];
|
|
386
387
|
if (!e || typeof e != "object")
|
|
387
388
|
return {
|
|
@@ -394,17 +395,17 @@ function qe(e) {
|
|
|
394
395
|
],
|
|
395
396
|
warnings: []
|
|
396
397
|
};
|
|
397
|
-
const n = e,
|
|
398
|
+
const n = e, a = [...n.warnings || []];
|
|
398
399
|
n.version !== 1 && t.push(
|
|
399
400
|
u("invalid_version", "Dashboard change plan version must be 1.")
|
|
400
|
-
), (
|
|
401
|
+
), (o = n.dashboardId) != null && o.trim() || t.push(
|
|
401
402
|
u("missing_dashboard_id", "Dashboard change plan needs a dashboard id.")
|
|
402
403
|
);
|
|
403
|
-
const i = Array.isArray(n.datasets) ? n.datasets : [],
|
|
404
|
+
const i = Array.isArray(n.datasets) ? n.datasets : [], r = Array.isArray(n.operations) ? n.operations : [];
|
|
404
405
|
ce({ datasets: i, errors: t, requireAtLeastOne: !1 });
|
|
405
|
-
for (const d of
|
|
406
|
+
for (const d of r) {
|
|
406
407
|
if (d.kind === "unsupported") {
|
|
407
|
-
|
|
408
|
+
a.push(
|
|
408
409
|
u("unsupported_operation", d.reason || d.requestedAction)
|
|
409
410
|
);
|
|
410
411
|
continue;
|
|
@@ -415,14 +416,14 @@ function qe(e) {
|
|
|
415
416
|
"Whole-dashboard authoring supports built-in visual types only.",
|
|
416
417
|
d.card.id
|
|
417
418
|
)
|
|
418
|
-
), d.kind === "addCard" && (
|
|
419
|
+
), d.kind === "addCard" && (oe({
|
|
419
420
|
card: d.card,
|
|
420
421
|
datasets: i,
|
|
421
422
|
errors: t
|
|
422
423
|
}), de({
|
|
423
424
|
card: d.card,
|
|
424
425
|
errors: t
|
|
425
|
-
}),
|
|
426
|
+
}), se({
|
|
426
427
|
card: d.card,
|
|
427
428
|
datasets: i,
|
|
428
429
|
errors: t
|
|
@@ -433,125 +434,125 @@ function qe(e) {
|
|
|
433
434
|
)
|
|
434
435
|
);
|
|
435
436
|
}
|
|
436
|
-
return { ok: t.length === 0, errors: t, warnings:
|
|
437
|
+
return { ok: t.length === 0, errors: t, warnings: a };
|
|
437
438
|
}
|
|
438
|
-
const
|
|
439
|
+
const Pe = {
|
|
439
440
|
lg: 48,
|
|
440
441
|
md: 36,
|
|
441
442
|
sm: 24,
|
|
442
443
|
xs: 12,
|
|
443
444
|
xxs: 6
|
|
444
445
|
};
|
|
445
|
-
function
|
|
446
|
-
let n = 0,
|
|
447
|
-
return e.map((
|
|
448
|
-
const
|
|
449
|
-
n > 0 && n +
|
|
446
|
+
function Be(e, t) {
|
|
447
|
+
let n = 0, a = 0, i = 0;
|
|
448
|
+
return e.map((r) => {
|
|
449
|
+
const o = Math.min(r.w, t);
|
|
450
|
+
n > 0 && n + o > t && (n = 0, a += i, i = 0);
|
|
450
451
|
const d = {
|
|
451
|
-
i:
|
|
452
|
+
i: r.frameId,
|
|
452
453
|
x: n,
|
|
453
|
-
y:
|
|
454
|
-
w:
|
|
455
|
-
h:
|
|
456
|
-
minW: Math.min(
|
|
457
|
-
minH:
|
|
454
|
+
y: a,
|
|
455
|
+
w: o,
|
|
456
|
+
h: r.h,
|
|
457
|
+
minW: Math.min(r.minW, t),
|
|
458
|
+
minH: r.minH,
|
|
458
459
|
static: !1
|
|
459
460
|
};
|
|
460
|
-
return n +=
|
|
461
|
+
return n += o, i = Math.max(i, r.h), d;
|
|
461
462
|
});
|
|
462
463
|
}
|
|
463
|
-
function
|
|
464
|
-
const t = [...e].sort((
|
|
465
|
-
return { kpis: n, introText:
|
|
464
|
+
function Ve(e) {
|
|
465
|
+
const t = [...e].sort((s, f) => s.priority - f.priority), n = t.filter((s) => s.role === "kpi"), a = t.filter((s) => s.role === "chart"), i = t.filter((s) => s.role === "table"), r = t.filter((s) => s.role === "text"), o = r.slice(0, 1), d = r.slice(o.length);
|
|
466
|
+
return { kpis: n, introText: o, charts: a, tables: i, supportingText: d };
|
|
466
467
|
}
|
|
467
|
-
function
|
|
468
|
+
function ze(e, t, n) {
|
|
468
469
|
return t === "xxs" || t === "xs" ? n : t === "sm" ? Math.min(12, n) : t === "md" ? e <= 1 || e === 2 ? 18 : 12 : e <= 1 || e === 2 ? 24 : e === 3 ? 16 : 12;
|
|
469
470
|
}
|
|
470
|
-
function
|
|
471
|
-
return n === "xxs" || n === "xs" || n === "sm" || n === "md" || t === 1 || t % 2 === 1 && e === 0 ?
|
|
471
|
+
function je(e, t, n, a) {
|
|
472
|
+
return n === "xxs" || n === "xs" || n === "sm" || n === "md" || t === 1 || t % 2 === 1 && e === 0 ? a : a / 2;
|
|
472
473
|
}
|
|
473
474
|
function Le(e) {
|
|
474
|
-
const { item: t, band: n, index:
|
|
475
|
+
const { item: t, band: n, index: a, bandCount: i, breakpoint: r, columns: o } = e;
|
|
475
476
|
return n === "kpi" ? {
|
|
476
477
|
...t,
|
|
477
478
|
band: n,
|
|
478
|
-
w:
|
|
479
|
+
w: ze(i, r, o),
|
|
479
480
|
h: 15,
|
|
480
|
-
minW: Math.min(6,
|
|
481
|
+
minW: Math.min(6, o),
|
|
481
482
|
minH: 12
|
|
482
483
|
} : n === "table" ? {
|
|
483
484
|
...t,
|
|
484
485
|
band: n,
|
|
485
|
-
w:
|
|
486
|
-
h:
|
|
487
|
-
minW: Math.min(12,
|
|
486
|
+
w: o,
|
|
487
|
+
h: r === "xxs" || r === "xs" ? 34 : 38,
|
|
488
|
+
minW: Math.min(12, o),
|
|
488
489
|
minH: 18
|
|
489
490
|
} : n === "introText" ? {
|
|
490
491
|
...t,
|
|
491
492
|
band: n,
|
|
492
|
-
w:
|
|
493
|
-
h:
|
|
494
|
-
minW: Math.min(12,
|
|
493
|
+
w: o,
|
|
494
|
+
h: r === "xxs" || r === "xs" ? 12 : 10,
|
|
495
|
+
minW: Math.min(12, o),
|
|
495
496
|
minH: 8
|
|
496
497
|
} : n === "supportingText" ? {
|
|
497
498
|
...t,
|
|
498
499
|
band: n,
|
|
499
|
-
w:
|
|
500
|
-
h:
|
|
501
|
-
minW: Math.min(12,
|
|
500
|
+
w: r === "lg" ? o / 2 : o,
|
|
501
|
+
h: r === "xxs" || r === "xs" ? 12 : 10,
|
|
502
|
+
minW: Math.min(12, o),
|
|
502
503
|
minH: 8
|
|
503
504
|
} : {
|
|
504
505
|
...t,
|
|
505
506
|
band: n,
|
|
506
|
-
w:
|
|
507
|
-
h:
|
|
508
|
-
minW: Math.min(12,
|
|
507
|
+
w: je(a, i, r, o),
|
|
508
|
+
h: r === "xxs" || r === "xs" ? 28 : 30,
|
|
509
|
+
minW: Math.min(12, o),
|
|
509
510
|
minH: 16
|
|
510
511
|
};
|
|
511
512
|
}
|
|
512
|
-
function D(e, t, n,
|
|
513
|
+
function D(e, t, n, a) {
|
|
513
514
|
return e.map(
|
|
514
|
-
(i,
|
|
515
|
+
(i, r) => Le({
|
|
515
516
|
item: i,
|
|
516
517
|
band: t,
|
|
517
|
-
index:
|
|
518
|
+
index: r,
|
|
518
519
|
bandCount: e.length,
|
|
519
520
|
breakpoint: n,
|
|
520
|
-
columns:
|
|
521
|
+
columns: a
|
|
521
522
|
})
|
|
522
523
|
);
|
|
523
524
|
}
|
|
524
525
|
function E(e) {
|
|
525
|
-
const t =
|
|
526
|
+
const t = Ve(e);
|
|
526
527
|
return Object.fromEntries(
|
|
527
|
-
|
|
528
|
-
const
|
|
529
|
-
...D(t.introText, "introText", n,
|
|
530
|
-
...D(t.kpis, "kpi", n,
|
|
531
|
-
...D(t.charts, "chart", n,
|
|
532
|
-
...D(t.tables, "table", n,
|
|
533
|
-
...D(t.supportingText, "supportingText", n,
|
|
528
|
+
ye.map((n) => {
|
|
529
|
+
const a = Pe[n], i = [
|
|
530
|
+
...D(t.introText, "introText", n, a),
|
|
531
|
+
...D(t.kpis, "kpi", n, a),
|
|
532
|
+
...D(t.charts, "chart", n, a),
|
|
533
|
+
...D(t.tables, "table", n, a),
|
|
534
|
+
...D(t.supportingText, "supportingText", n, a)
|
|
534
535
|
];
|
|
535
|
-
return [n,
|
|
536
|
+
return [n, Be(i, a)];
|
|
536
537
|
})
|
|
537
538
|
);
|
|
538
539
|
}
|
|
539
|
-
function je(e) {
|
|
540
|
-
const t = String(e || "").trim().toLowerCase();
|
|
541
|
-
return t.includes("date") || t.includes("time") || t.includes("timestamp") ? "date" : t.includes("int") || t.includes("float") || t.includes("double") || t.includes("decimal") || t.includes("numeric") || t.includes("number") || t.includes("currency") || t.includes("percent") ? "number" : t.includes("bool") ? "boolean" : "string";
|
|
542
|
-
}
|
|
543
540
|
function Oe(e) {
|
|
544
|
-
|
|
541
|
+
const t = be(e);
|
|
542
|
+
return t === "datetime" ? "date" : t === "unknown" ? "string" : t;
|
|
545
543
|
}
|
|
546
544
|
function We(e) {
|
|
547
|
-
return
|
|
545
|
+
return !!(e && typeof e == "object" && !Array.isArray(e));
|
|
548
546
|
}
|
|
549
547
|
function Ee(e) {
|
|
548
|
+
return We(e) && typeof e.filterId == "string" && typeof e.operation == "string" && Array.isArray(e.values);
|
|
549
|
+
}
|
|
550
|
+
function He(e) {
|
|
550
551
|
return e.filter(
|
|
551
552
|
(t) => typeof t == "string" || typeof t == "number"
|
|
552
553
|
);
|
|
553
554
|
}
|
|
554
|
-
function
|
|
555
|
+
function Ge(e) {
|
|
555
556
|
return e.filter(
|
|
556
557
|
(t) => t instanceof Date || typeof t == "string"
|
|
557
558
|
);
|
|
@@ -559,8 +560,8 @@ function He(e) {
|
|
|
559
560
|
function H(e, t) {
|
|
560
561
|
if (t === void 0)
|
|
561
562
|
return;
|
|
562
|
-
const n =
|
|
563
|
-
if (
|
|
563
|
+
const n = Oe(e.dataType), a = e.operation || "in";
|
|
564
|
+
if (Ee(t))
|
|
564
565
|
return {
|
|
565
566
|
...t,
|
|
566
567
|
filterId: e.id,
|
|
@@ -570,92 +571,92 @@ function H(e, t) {
|
|
|
570
571
|
fieldMeta: e.fieldMeta,
|
|
571
572
|
semanticContext: e.semanticContext
|
|
572
573
|
};
|
|
573
|
-
if (
|
|
574
|
+
if (a === "is null" || a === "is not null")
|
|
574
575
|
return {
|
|
575
576
|
filterId: e.id,
|
|
576
577
|
name: e.column,
|
|
577
|
-
operation:
|
|
578
|
+
operation: a,
|
|
578
579
|
valueType: n,
|
|
579
580
|
values: [],
|
|
580
581
|
dataType: e.dataType,
|
|
581
582
|
fieldMeta: e.fieldMeta,
|
|
582
583
|
semanticContext: e.semanticContext
|
|
583
584
|
};
|
|
584
|
-
const i = Array.isArray(t) ? t : [t],
|
|
585
|
-
if (
|
|
585
|
+
const i = Array.isArray(t) ? t : [t], r = n === "date" ? Ge(i) : He(i);
|
|
586
|
+
if (r.length !== 0 && !((a === "between" || a === "not between") && r.length < 2))
|
|
586
587
|
return {
|
|
587
588
|
filterId: e.id,
|
|
588
589
|
name: e.column,
|
|
589
|
-
operation:
|
|
590
|
+
operation: a,
|
|
590
591
|
valueType: n,
|
|
591
|
-
values:
|
|
592
|
+
values: r,
|
|
592
593
|
dataType: e.dataType,
|
|
593
594
|
fieldMeta: e.fieldMeta,
|
|
594
595
|
semanticContext: e.semanticContext
|
|
595
596
|
};
|
|
596
597
|
}
|
|
597
|
-
function
|
|
598
|
+
function Ue(e, t, n) {
|
|
598
599
|
return n ? { code: e, message: t, cardId: n } : { code: e, message: t };
|
|
599
600
|
}
|
|
600
|
-
function
|
|
601
|
-
const
|
|
601
|
+
function Ke(e, t, n) {
|
|
602
|
+
const a = (t || []).filter(
|
|
602
603
|
(i) => i.scope === "card" && i.targetCardId === n
|
|
603
604
|
).map((i) => i.field).filter(Boolean);
|
|
604
|
-
return
|
|
605
|
+
return a.length === 0 ? e : {
|
|
605
606
|
...e,
|
|
606
607
|
calculatedFields: [
|
|
607
608
|
...e.calculatedFields || [],
|
|
608
|
-
...
|
|
609
|
+
...a
|
|
609
610
|
]
|
|
610
611
|
};
|
|
611
612
|
}
|
|
612
|
-
function
|
|
613
|
+
function Qe(e) {
|
|
613
614
|
const t = {};
|
|
614
615
|
return {
|
|
615
|
-
inputs: (e.filterInputs || []).map((
|
|
616
|
-
const
|
|
617
|
-
|
|
618
|
-
|
|
616
|
+
inputs: (e.filterInputs || []).map((a, i) => {
|
|
617
|
+
const r = H(
|
|
618
|
+
a.filter,
|
|
619
|
+
a.defaultValue
|
|
619
620
|
);
|
|
620
|
-
return
|
|
621
|
+
return r && (t.shared ?? (t.shared = {}), t.shared[a.id] = {
|
|
621
622
|
status: "set",
|
|
622
623
|
value: {
|
|
623
624
|
kind: "filter",
|
|
624
|
-
filterValue:
|
|
625
|
+
filterValue: r
|
|
625
626
|
}
|
|
626
627
|
}), {
|
|
627
|
-
id:
|
|
628
|
+
id: a.id,
|
|
628
629
|
kind: "filter",
|
|
629
|
-
label:
|
|
630
|
-
variableName:
|
|
631
|
-
scope:
|
|
630
|
+
label: a.label,
|
|
631
|
+
variableName: a.variableName,
|
|
632
|
+
scope: a.scope || { kind: "allSheets", sheetKinds: ["dashboard"] },
|
|
632
633
|
runtimeScope: "shared",
|
|
633
634
|
presentation: {
|
|
634
635
|
placement: "toolbar",
|
|
635
636
|
order: i
|
|
636
637
|
},
|
|
637
638
|
exports: ["label", "value", "start", "end", "range"],
|
|
638
|
-
filter:
|
|
639
|
+
filter: a.filter
|
|
639
640
|
};
|
|
640
641
|
}),
|
|
641
642
|
defaultInputValues: t.shared && Object.keys(t.shared).length > 0 ? t : void 0
|
|
642
643
|
};
|
|
643
644
|
}
|
|
644
|
-
function
|
|
645
|
+
function At(e) {
|
|
645
646
|
var I, y;
|
|
646
|
-
const t =
|
|
647
|
+
const t = qe(e.plan);
|
|
647
648
|
if (!t.ok)
|
|
648
649
|
throw new Error(
|
|
649
650
|
t.errors.map((c) => c.message).join(`
|
|
650
651
|
`) || "Dashboard plan is invalid."
|
|
651
652
|
);
|
|
652
|
-
const n = e.plan.sheets[0],
|
|
653
|
+
const n = e.plan.sheets[0], a = [...t.warnings], i = [], r = new Map(
|
|
653
654
|
e.cardArtifacts.map((c) => [c.planCardId, c])
|
|
654
|
-
),
|
|
655
|
+
), o = [];
|
|
655
656
|
for (const c of n.cards) {
|
|
656
|
-
const b =
|
|
657
|
+
const b = r.get(c.id);
|
|
657
658
|
if (!b) {
|
|
658
|
-
const m =
|
|
659
|
+
const m = Ue(
|
|
659
660
|
"missing_card_artifact",
|
|
660
661
|
`Card "${c.title}" was skipped because no generated artifact was supplied.`,
|
|
661
662
|
c.id
|
|
@@ -663,22 +664,22 @@ function kt(e) {
|
|
|
663
664
|
i.push(m);
|
|
664
665
|
continue;
|
|
665
666
|
}
|
|
666
|
-
|
|
667
|
-
const S =
|
|
667
|
+
a.push(...b.warnings || []);
|
|
668
|
+
const S = Ke(
|
|
668
669
|
b.card,
|
|
669
670
|
e.plan.calculatedFields,
|
|
670
671
|
c.id
|
|
671
672
|
);
|
|
672
|
-
|
|
673
|
+
o.push({
|
|
673
674
|
id: c.frameId,
|
|
674
675
|
cards: [S],
|
|
675
676
|
activeCardId: S.id
|
|
676
677
|
});
|
|
677
678
|
}
|
|
678
|
-
if (
|
|
679
|
+
if (o.length === 0)
|
|
679
680
|
throw new Error("Dashboard plan did not produce any persistable cards.");
|
|
680
|
-
const { inputs: d, defaultInputValues:
|
|
681
|
-
n.cards.filter((c) =>
|
|
681
|
+
const { inputs: d, defaultInputValues: s } = Qe(e.plan), f = E(
|
|
682
|
+
n.cards.filter((c) => o.some((b) => b.id === c.frameId)).map((c) => ({
|
|
682
683
|
frameId: c.frameId,
|
|
683
684
|
priority: c.priority,
|
|
684
685
|
role: c.role
|
|
@@ -694,23 +695,23 @@ function kt(e) {
|
|
|
694
695
|
kind: "dashboard",
|
|
695
696
|
title: n.title,
|
|
696
697
|
description: n.description,
|
|
697
|
-
frames:
|
|
698
|
+
frames: o,
|
|
698
699
|
layouts: f,
|
|
699
700
|
calculatedFields: (I = e.plan.calculatedFields) == null ? void 0 : I.filter((c) => c.scope === "sheet" && c.field).map((c) => c.field)
|
|
700
701
|
}
|
|
701
702
|
],
|
|
702
703
|
calculatedFields: (y = e.plan.calculatedFields) == null ? void 0 : y.filter((c) => c.scope === "dashboard" && c.field).map((c) => c.field),
|
|
703
704
|
inputs: d,
|
|
704
|
-
...
|
|
705
|
-
}, warnings:
|
|
705
|
+
...s ? { defaultInputValues: s } : {}
|
|
706
|
+
}, warnings: a, skippedOperations: i };
|
|
706
707
|
}
|
|
707
708
|
function C(e, t, n) {
|
|
708
709
|
return n ? { code: e, message: t, cardId: n } : { code: e, message: t };
|
|
709
710
|
}
|
|
710
|
-
function
|
|
711
|
+
function Je(e) {
|
|
711
712
|
return JSON.parse(JSON.stringify(e));
|
|
712
713
|
}
|
|
713
|
-
function
|
|
714
|
+
function Xe(e) {
|
|
714
715
|
var t;
|
|
715
716
|
return (t = e.sheets) == null ? void 0 : t.find(
|
|
716
717
|
(n) => (n.kind || "dashboard") === "dashboard"
|
|
@@ -718,43 +719,43 @@ function Je(e) {
|
|
|
718
719
|
}
|
|
719
720
|
function P(e, t) {
|
|
720
721
|
var n;
|
|
721
|
-
for (const
|
|
722
|
-
for (const i of
|
|
723
|
-
const
|
|
724
|
-
if (
|
|
725
|
-
return { sheet:
|
|
722
|
+
for (const a of e.sheets || [])
|
|
723
|
+
for (const i of a.frames || []) {
|
|
724
|
+
const r = (n = i.cards) == null ? void 0 : n.find((o) => o.id === t);
|
|
725
|
+
if (r)
|
|
726
|
+
return { sheet: a, frame: i, card: r };
|
|
726
727
|
}
|
|
727
728
|
return null;
|
|
728
729
|
}
|
|
729
730
|
function le(e) {
|
|
730
|
-
var n,
|
|
731
|
-
const t = (
|
|
731
|
+
var n, a;
|
|
732
|
+
const t = (a = (n = e.cards) == null ? void 0 : n[0]) == null ? void 0 : a.type;
|
|
732
733
|
return t === "kpi" ? "kpi" : t === "table" || t === "detailTable" || t === "pivotTable" ? "table" : t === "text" ? "text" : "chart";
|
|
733
734
|
}
|
|
734
|
-
function
|
|
735
|
+
function Ye(e) {
|
|
735
736
|
var t;
|
|
736
737
|
return new Map(
|
|
737
|
-
(((t = e.layouts) == null ? void 0 : t.lg) || []).map((n,
|
|
738
|
+
(((t = e.layouts) == null ? void 0 : t.lg) || []).map((n, a) => [n.i, a])
|
|
738
739
|
);
|
|
739
740
|
}
|
|
740
741
|
function ue(e, t = /* @__PURE__ */ new Map()) {
|
|
741
|
-
const n =
|
|
742
|
+
const n = Ye(e), a = Math.max(
|
|
742
743
|
n.size,
|
|
743
744
|
t.size
|
|
744
745
|
), i = (e.frames || []).map(
|
|
745
|
-
(
|
|
746
|
-
frameId:
|
|
747
|
-
role: le(
|
|
748
|
-
priority: t.get(
|
|
746
|
+
(r, o) => ({
|
|
747
|
+
frameId: r.id,
|
|
748
|
+
role: le(r),
|
|
749
|
+
priority: t.get(r.id) ?? n.get(r.id) ?? a + o
|
|
749
750
|
})
|
|
750
751
|
);
|
|
751
752
|
e.layouts = E(i);
|
|
752
753
|
}
|
|
753
|
-
function
|
|
754
|
+
function Ze(e) {
|
|
754
755
|
return Object.values(e.layouts || {}).some((t) => t.length > 0);
|
|
755
756
|
}
|
|
756
|
-
function
|
|
757
|
-
if (!
|
|
757
|
+
function et(e, t) {
|
|
758
|
+
if (!Ze(e)) {
|
|
758
759
|
ue(e);
|
|
759
760
|
return;
|
|
760
761
|
}
|
|
@@ -762,30 +763,30 @@ function Ze(e, t) {
|
|
|
762
763
|
{ frameId: t.id, role: le(t), priority: 0 }
|
|
763
764
|
]);
|
|
764
765
|
e.layouts ?? (e.layouts = {});
|
|
765
|
-
for (const [
|
|
766
|
-
const
|
|
767
|
-
if (
|
|
766
|
+
for (const [a, i] of Object.entries(n)) {
|
|
767
|
+
const r = e.layouts[a] || [];
|
|
768
|
+
if (r.some((s) => s.i === t.id))
|
|
768
769
|
continue;
|
|
769
|
-
const
|
|
770
|
-
if (!
|
|
770
|
+
const o = i[0];
|
|
771
|
+
if (!o)
|
|
771
772
|
continue;
|
|
772
|
-
const d =
|
|
773
|
-
(
|
|
773
|
+
const d = r.reduce(
|
|
774
|
+
(s, f) => Math.max(s, f.y + f.h),
|
|
774
775
|
0
|
|
775
776
|
);
|
|
776
|
-
e.layouts[
|
|
777
|
-
...
|
|
778
|
-
{ ...
|
|
777
|
+
e.layouts[a] = [
|
|
778
|
+
...r,
|
|
779
|
+
{ ...o, y: d }
|
|
779
780
|
];
|
|
780
781
|
}
|
|
781
782
|
}
|
|
782
|
-
function
|
|
783
|
-
var
|
|
783
|
+
function tt(e, t) {
|
|
784
|
+
var a;
|
|
784
785
|
const n = H(
|
|
785
786
|
t.filter,
|
|
786
787
|
t.defaultValue
|
|
787
788
|
);
|
|
788
|
-
n && (e.defaultInputValues ?? (e.defaultInputValues = {}), (
|
|
789
|
+
n && (e.defaultInputValues ?? (e.defaultInputValues = {}), (a = e.defaultInputValues).shared ?? (a.shared = {}), e.defaultInputValues.shared[t.id] = {
|
|
789
790
|
status: "set",
|
|
790
791
|
value: {
|
|
791
792
|
kind: "filter",
|
|
@@ -793,24 +794,24 @@ function et(e, t) {
|
|
|
793
794
|
}
|
|
794
795
|
});
|
|
795
796
|
}
|
|
796
|
-
function
|
|
797
|
+
function Ct(e) {
|
|
797
798
|
var d;
|
|
798
|
-
const t =
|
|
799
|
+
const t = Re(e.changePlan);
|
|
799
800
|
if (!t.ok)
|
|
800
801
|
throw new Error(
|
|
801
|
-
t.errors.map((
|
|
802
|
+
t.errors.map((s) => s.message).join(`
|
|
802
803
|
`) || "Dashboard change plan is invalid."
|
|
803
804
|
);
|
|
804
|
-
const n =
|
|
805
|
-
e.cardArtifacts.map((
|
|
806
|
-
),
|
|
807
|
-
if (!
|
|
805
|
+
const n = Je(e.dashboard), a = [...t.warnings], i = [], r = new Map(
|
|
806
|
+
e.cardArtifacts.map((s) => [s.planCardId, s])
|
|
807
|
+
), o = Xe(n);
|
|
808
|
+
if (!o)
|
|
808
809
|
throw new Error("Dashboard has no editable dashboard sheet.");
|
|
809
|
-
|
|
810
|
-
for (const
|
|
811
|
-
switch (
|
|
810
|
+
o.frames ?? (o.frames = []);
|
|
811
|
+
for (const s of e.changePlan.operations)
|
|
812
|
+
switch (s.kind) {
|
|
812
813
|
case "addCard": {
|
|
813
|
-
if ((
|
|
814
|
+
if ((o.frames || []).reduce(
|
|
814
815
|
(y, c) => {
|
|
815
816
|
var b;
|
|
816
817
|
return y + (((b = c.cards) == null ? void 0 : b.length) || 0);
|
|
@@ -821,38 +822,38 @@ function St(e) {
|
|
|
821
822
|
C(
|
|
822
823
|
"generated_card_limit_reached",
|
|
823
824
|
`MVP AI refinement is capped at ${M} cards.`,
|
|
824
|
-
|
|
825
|
+
s.card.id
|
|
825
826
|
)
|
|
826
827
|
);
|
|
827
828
|
break;
|
|
828
829
|
}
|
|
829
|
-
const p =
|
|
830
|
+
const p = r.get(s.card.id);
|
|
830
831
|
if (!p) {
|
|
831
832
|
i.push(
|
|
832
833
|
C(
|
|
833
834
|
"missing_card_artifact",
|
|
834
|
-
`Card "${
|
|
835
|
-
|
|
835
|
+
`Card "${s.card.title}" was skipped because no generated artifact was supplied.`,
|
|
836
|
+
s.card.id
|
|
836
837
|
)
|
|
837
838
|
);
|
|
838
839
|
break;
|
|
839
840
|
}
|
|
840
841
|
const I = {
|
|
841
|
-
id:
|
|
842
|
+
id: s.card.frameId,
|
|
842
843
|
cards: [p.card],
|
|
843
844
|
activeCardId: p.card.id
|
|
844
845
|
};
|
|
845
|
-
|
|
846
|
+
o.frames.push(I), et(o, I);
|
|
846
847
|
break;
|
|
847
848
|
}
|
|
848
849
|
case "addFilterInput": {
|
|
849
850
|
n.inputs ?? (n.inputs = []);
|
|
850
851
|
const f = {
|
|
851
|
-
id:
|
|
852
|
+
id: s.input.id,
|
|
852
853
|
kind: "filter",
|
|
853
|
-
label:
|
|
854
|
-
variableName:
|
|
855
|
-
scope:
|
|
854
|
+
label: s.input.label,
|
|
855
|
+
variableName: s.input.variableName,
|
|
856
|
+
scope: s.input.scope || {
|
|
856
857
|
kind: "allSheets",
|
|
857
858
|
sheetKinds: ["dashboard"]
|
|
858
859
|
},
|
|
@@ -862,66 +863,66 @@ function St(e) {
|
|
|
862
863
|
order: n.inputs.length
|
|
863
864
|
},
|
|
864
865
|
exports: ["label", "value", "start", "end", "range"],
|
|
865
|
-
filter:
|
|
866
|
+
filter: s.input.filter
|
|
866
867
|
};
|
|
867
|
-
n.inputs.push(f),
|
|
868
|
+
n.inputs.push(f), tt(n, s.input);
|
|
868
869
|
break;
|
|
869
870
|
}
|
|
870
871
|
case "addCalculatedField": {
|
|
871
|
-
if (
|
|
872
|
-
n.calculatedFields ?? (n.calculatedFields = []), n.calculatedFields.push(
|
|
873
|
-
else if (
|
|
874
|
-
|
|
875
|
-
else if (
|
|
876
|
-
const f =
|
|
877
|
-
f ? ((d = f.card).calculatedFields ?? (d.calculatedFields = []), f.card.calculatedFields.push(
|
|
872
|
+
if (s.field.scope === "dashboard" && s.field.field)
|
|
873
|
+
n.calculatedFields ?? (n.calculatedFields = []), n.calculatedFields.push(s.field.field);
|
|
874
|
+
else if (s.field.scope === "sheet" && s.field.field)
|
|
875
|
+
o.calculatedFields ?? (o.calculatedFields = []), o.calculatedFields.push(s.field.field);
|
|
876
|
+
else if (s.field.scope === "card" && s.field.field) {
|
|
877
|
+
const f = s.field.targetCardId ? P(n, s.field.targetCardId) : null;
|
|
878
|
+
f ? ((d = f.card).calculatedFields ?? (d.calculatedFields = []), f.card.calculatedFields.push(s.field.field)) : i.push(
|
|
878
879
|
C(
|
|
879
880
|
"missing_calculated_field_target",
|
|
880
|
-
`Calculated field "${
|
|
881
|
+
`Calculated field "${s.field.name}" needs a valid target card.`
|
|
881
882
|
)
|
|
882
883
|
);
|
|
883
884
|
}
|
|
884
885
|
break;
|
|
885
886
|
}
|
|
886
887
|
case "renameCard": {
|
|
887
|
-
const f = P(n,
|
|
888
|
+
const f = P(n, s.cardId);
|
|
888
889
|
if (!f) {
|
|
889
890
|
i.push(
|
|
890
891
|
C(
|
|
891
892
|
"card_not_found",
|
|
892
|
-
`Card "${
|
|
893
|
-
|
|
893
|
+
`Card "${s.cardId}" could not be renamed because it was not found.`,
|
|
894
|
+
s.cardId
|
|
894
895
|
)
|
|
895
896
|
);
|
|
896
897
|
break;
|
|
897
898
|
}
|
|
898
|
-
f.card.title =
|
|
899
|
+
f.card.title = s.title, s.description !== void 0 && (f.card.description = s.description);
|
|
899
900
|
break;
|
|
900
901
|
}
|
|
901
902
|
case "reorderCards": {
|
|
902
903
|
const f = /* @__PURE__ */ new Map();
|
|
903
|
-
for (let p = 0; p <
|
|
904
|
-
const I =
|
|
904
|
+
for (let p = 0; p < s.cardIds.length; p += 1) {
|
|
905
|
+
const I = s.cardIds[p], y = P(n, I);
|
|
905
906
|
y && f.set(y.frame.id, p);
|
|
906
907
|
}
|
|
907
|
-
ue(
|
|
908
|
+
ue(o, f);
|
|
908
909
|
break;
|
|
909
910
|
}
|
|
910
911
|
case "reuseCalculatedField":
|
|
911
|
-
|
|
912
|
+
a.push(
|
|
912
913
|
C(
|
|
913
914
|
"reused_calculated_field",
|
|
914
|
-
`Calculated field "${
|
|
915
|
+
`Calculated field "${s.fieldId}" is reused by reference.`
|
|
915
916
|
)
|
|
916
917
|
);
|
|
917
918
|
break;
|
|
918
919
|
case "unsupported":
|
|
919
920
|
i.push(
|
|
920
|
-
C("unsupported_operation",
|
|
921
|
+
C("unsupported_operation", s.reason || s.requestedAction)
|
|
921
922
|
);
|
|
922
923
|
break;
|
|
923
924
|
}
|
|
924
|
-
return { dashboard: n, warnings:
|
|
925
|
+
return { dashboard: n, warnings: a, skippedOperations: i };
|
|
925
926
|
}
|
|
926
927
|
function g(e, t, n) {
|
|
927
928
|
return n ? { code: e, message: t, cardId: n } : { code: e, message: t };
|
|
@@ -932,10 +933,10 @@ function F(e, t) {
|
|
|
932
933
|
function fe(e, t) {
|
|
933
934
|
if (!t.has(e))
|
|
934
935
|
return t.add(e), e;
|
|
935
|
-
let n = 2,
|
|
936
|
-
for (; t.has(
|
|
937
|
-
n += 1,
|
|
938
|
-
return t.add(
|
|
936
|
+
let n = 2, a = `${e}-${n}`;
|
|
937
|
+
for (; t.has(a); )
|
|
938
|
+
n += 1, a = `${e}-${n}`;
|
|
939
|
+
return t.add(a), a;
|
|
939
940
|
}
|
|
940
941
|
function x(e) {
|
|
941
942
|
return !!(e && typeof e == "object");
|
|
@@ -955,7 +956,7 @@ function U(e) {
|
|
|
955
956
|
(t) => x(t)
|
|
956
957
|
) : [];
|
|
957
958
|
}
|
|
958
|
-
function
|
|
959
|
+
function nt(e) {
|
|
959
960
|
return N(e) ? e.kind === "semantic" ? {
|
|
960
961
|
kind: "semantic",
|
|
961
962
|
domainId: e.domainId,
|
|
@@ -977,28 +978,28 @@ function B(e) {
|
|
|
977
978
|
return [];
|
|
978
979
|
const t = [];
|
|
979
980
|
for (const n of e) {
|
|
980
|
-
const
|
|
981
|
-
|
|
981
|
+
const a = v(n);
|
|
982
|
+
a && t.push(a);
|
|
982
983
|
}
|
|
983
984
|
return t;
|
|
984
985
|
}
|
|
985
|
-
function
|
|
986
|
+
function at(e) {
|
|
986
987
|
if (!e)
|
|
987
988
|
return [];
|
|
988
989
|
const t = [];
|
|
989
990
|
if (N(e.source) && t.push(e.source), e.kind === "metric") {
|
|
990
|
-
const
|
|
991
|
-
|
|
991
|
+
const a = v(e.dateField);
|
|
992
|
+
a && t.push(a), t.push(...B(e.dimensions));
|
|
992
993
|
} else if (e.kind === "records") {
|
|
993
|
-
const
|
|
994
|
-
|
|
994
|
+
const a = v(e.dateField);
|
|
995
|
+
a && t.push(a), t.push(...B(e.fields));
|
|
995
996
|
} else if (e.kind === "inputOptions") {
|
|
996
|
-
const
|
|
997
|
-
|
|
997
|
+
const a = v(e.field);
|
|
998
|
+
a && t.push(a);
|
|
998
999
|
} else e.kind === "sql" && t.push(...B(e.fields));
|
|
999
1000
|
const n = "inputs" in e && Array.isArray(e.inputs) ? e.inputs : [];
|
|
1000
|
-
for (const
|
|
1001
|
-
const i = v(
|
|
1001
|
+
for (const a of n) {
|
|
1002
|
+
const i = v(a.field);
|
|
1002
1003
|
i && t.push(i);
|
|
1003
1004
|
}
|
|
1004
1005
|
return t;
|
|
@@ -1007,24 +1008,24 @@ function rt(e) {
|
|
|
1007
1008
|
const t = [];
|
|
1008
1009
|
for (const n of me(e)) {
|
|
1009
1010
|
N(n.source) && t.push(n.source);
|
|
1010
|
-
const
|
|
1011
|
-
|
|
1011
|
+
const a = v(n.field);
|
|
1012
|
+
a && t.push(a);
|
|
1012
1013
|
}
|
|
1013
1014
|
for (const n of G(e))
|
|
1014
|
-
for (const
|
|
1015
|
-
t.push(...
|
|
1015
|
+
for (const a of U(n))
|
|
1016
|
+
t.push(...at(a.analytics));
|
|
1016
1017
|
return t;
|
|
1017
1018
|
}
|
|
1018
|
-
function
|
|
1019
|
+
function it(e) {
|
|
1019
1020
|
var n;
|
|
1020
1021
|
const t = [];
|
|
1021
|
-
for (const
|
|
1022
|
-
for (const i of U(
|
|
1022
|
+
for (const a of G(e))
|
|
1023
|
+
for (const i of U(a))
|
|
1023
1024
|
N((n = i.analytics) == null ? void 0 : n.source) && t.push(i.analytics.source);
|
|
1024
1025
|
return t;
|
|
1025
1026
|
}
|
|
1026
|
-
function
|
|
1027
|
-
const n = q(e).map(
|
|
1027
|
+
function ot(e, t) {
|
|
1028
|
+
const n = q(e).map(nt).filter((r) => !!r);
|
|
1028
1029
|
if (n.length === 0)
|
|
1029
1030
|
return t.push(
|
|
1030
1031
|
g(
|
|
@@ -1032,12 +1033,12 @@ function it(e, t) {
|
|
|
1032
1033
|
"No semantic or physical source could be converted into the current dashboard authoring dataset reference."
|
|
1033
1034
|
)
|
|
1034
1035
|
), [];
|
|
1035
|
-
const
|
|
1036
|
+
const a = n.every((r) => r.kind === "semantic"), i = Array.from(
|
|
1036
1037
|
new Set(
|
|
1037
|
-
n.filter((
|
|
1038
|
+
n.filter((r) => r.kind === "semantic").map((r) => r.domainId)
|
|
1038
1039
|
)
|
|
1039
1040
|
);
|
|
1040
|
-
return n.length > 1 && (!
|
|
1041
|
+
return n.length > 1 && (!a || i.length !== 1) ? (t.push(
|
|
1041
1042
|
g(
|
|
1042
1043
|
"multiple_datasets_out_of_scope",
|
|
1043
1044
|
"The dashboard authoring compiler supports multiple datasets only within one semantic domain; using the first source and deferring the rest."
|
|
@@ -1045,27 +1046,27 @@ function it(e, t) {
|
|
|
1045
1046
|
), [n[0]]) : n;
|
|
1046
1047
|
}
|
|
1047
1048
|
function st(e, t) {
|
|
1048
|
-
const n = G(e),
|
|
1049
|
-
|
|
1049
|
+
const n = G(e), a = me(e), i = q(rt(e)), r = q(
|
|
1050
|
+
it(e)
|
|
1050
1051
|
);
|
|
1051
1052
|
return {
|
|
1052
1053
|
sections: n,
|
|
1053
|
-
inputs:
|
|
1054
|
+
inputs: a,
|
|
1054
1055
|
sources: i,
|
|
1055
|
-
primarySources:
|
|
1056
|
-
defaultSource:
|
|
1057
|
-
datasets:
|
|
1056
|
+
primarySources: r,
|
|
1057
|
+
defaultSource: r.length === 1 ? r[0] : void 0,
|
|
1058
|
+
datasets: ot(i, t)
|
|
1058
1059
|
};
|
|
1059
1060
|
}
|
|
1060
|
-
function
|
|
1061
|
+
function dt(e) {
|
|
1061
1062
|
return pe(e).map((t) => t.name).filter(Boolean);
|
|
1062
1063
|
}
|
|
1063
1064
|
function pe(e) {
|
|
1064
1065
|
return (Array.isArray(e.fields) ? e.fields : []).filter(
|
|
1065
|
-
(t) => !
|
|
1066
|
+
(t) => !ke(t, e.dateField)
|
|
1066
1067
|
);
|
|
1067
1068
|
}
|
|
1068
|
-
function
|
|
1069
|
+
function ct(e) {
|
|
1069
1070
|
const t = Array.isArray(e.metrics) ? e.metrics.filter(
|
|
1070
1071
|
(n) => typeof n == "string" && n.trim().length > 0
|
|
1071
1072
|
) : [];
|
|
@@ -1077,20 +1078,20 @@ function dt(e) {
|
|
|
1077
1078
|
)
|
|
1078
1079
|
);
|
|
1079
1080
|
}
|
|
1080
|
-
function
|
|
1081
|
+
function lt(e) {
|
|
1081
1082
|
return x(e) && typeof e.name == "string" && e.name.trim().length > 0;
|
|
1082
1083
|
}
|
|
1083
|
-
function
|
|
1084
|
+
function ut(e) {
|
|
1084
1085
|
if (!Array.isArray(e.dimensions))
|
|
1085
1086
|
return;
|
|
1086
|
-
const t = e.dimensions.filter(
|
|
1087
|
+
const t = e.dimensions.filter(lt).map((n) => n.name);
|
|
1087
1088
|
return t.length ? t : void 0;
|
|
1088
1089
|
}
|
|
1089
1090
|
function ne(e) {
|
|
1090
1091
|
return e === "hour" ? "day" : e;
|
|
1091
1092
|
}
|
|
1092
|
-
function
|
|
1093
|
-
var n,
|
|
1093
|
+
function L(e, t = {}) {
|
|
1094
|
+
var n, a;
|
|
1094
1095
|
if (e != null && e.name) {
|
|
1095
1096
|
if (((n = e.source) == null ? void 0 : n.kind) === "semantic")
|
|
1096
1097
|
return !e.source.domainId || !e.source.datasetName ? void 0 : {
|
|
@@ -1104,7 +1105,7 @@ function j(e, t = {}) {
|
|
|
1104
1105
|
connectionId: e.source.connectionId
|
|
1105
1106
|
}
|
|
1106
1107
|
};
|
|
1107
|
-
if (((
|
|
1108
|
+
if (((a = e.source) == null ? void 0 : a.kind) === "physical")
|
|
1108
1109
|
return !e.source.connectionId || !e.source.tableName ? void 0 : {
|
|
1109
1110
|
name: e.name,
|
|
1110
1111
|
source: {
|
|
@@ -1120,43 +1121,43 @@ function j(e, t = {}) {
|
|
|
1120
1121
|
return { name: e.name };
|
|
1121
1122
|
}
|
|
1122
1123
|
}
|
|
1123
|
-
function
|
|
1124
|
+
function ae(e) {
|
|
1124
1125
|
if (!Array.isArray(e))
|
|
1125
1126
|
return;
|
|
1126
|
-
const t = e.map((n) =>
|
|
1127
|
+
const t = e.map((n) => L(n, { includeUnsourced: !0 })).filter(Boolean);
|
|
1127
1128
|
if (t.length === e.length)
|
|
1128
1129
|
return t.some((n) => n.source) ? t : void 0;
|
|
1129
1130
|
}
|
|
1130
|
-
function
|
|
1131
|
+
function ft(e) {
|
|
1131
1132
|
var t, n;
|
|
1132
1133
|
if (e) {
|
|
1133
1134
|
if (e.kind === "metric")
|
|
1134
1135
|
return {
|
|
1135
1136
|
metric: e.metric,
|
|
1136
|
-
metrics:
|
|
1137
|
+
metrics: ct(e),
|
|
1137
1138
|
dateField: (t = e.dateField) == null ? void 0 : t.name,
|
|
1138
|
-
dateFieldRef:
|
|
1139
|
+
dateFieldRef: L(e.dateField),
|
|
1139
1140
|
timeGrain: ne(e.timeGrain),
|
|
1140
|
-
dimensions:
|
|
1141
|
-
dimensionRefs:
|
|
1141
|
+
dimensions: ut(e),
|
|
1142
|
+
dimensionRefs: ae(e.dimensions),
|
|
1142
1143
|
limit: e.limit
|
|
1143
1144
|
};
|
|
1144
1145
|
if (e.kind === "records")
|
|
1145
1146
|
return {
|
|
1146
1147
|
metrics: e.measures,
|
|
1147
1148
|
dateField: (n = e.dateField) == null ? void 0 : n.name,
|
|
1148
|
-
dateFieldRef:
|
|
1149
|
+
dateFieldRef: L(e.dateField),
|
|
1149
1150
|
timeGrain: ne(e.timeGrain),
|
|
1150
|
-
dimensions:
|
|
1151
|
-
dimensionRefs:
|
|
1151
|
+
dimensions: dt(e),
|
|
1152
|
+
dimensionRefs: ae(pe(e)),
|
|
1152
1153
|
limit: e.limit
|
|
1153
1154
|
};
|
|
1154
1155
|
}
|
|
1155
1156
|
}
|
|
1156
|
-
function ft(e) {
|
|
1157
|
-
return e && Ie(e).ok ? e : void 0;
|
|
1158
|
-
}
|
|
1159
1157
|
function mt(e) {
|
|
1158
|
+
return e && ge(e).ok ? e : void 0;
|
|
1159
|
+
}
|
|
1160
|
+
function pt(e) {
|
|
1160
1161
|
var t;
|
|
1161
1162
|
switch ((t = e.presentation) == null ? void 0 : t.kind) {
|
|
1162
1163
|
case "kpi":
|
|
@@ -1175,11 +1176,11 @@ function mt(e) {
|
|
|
1175
1176
|
return null;
|
|
1176
1177
|
}
|
|
1177
1178
|
}
|
|
1178
|
-
function pt(e) {
|
|
1179
|
-
var t, n, r;
|
|
1180
|
-
return ((t = e.presentation) == null ? void 0 : t.kind) === "kpi" ? "kpi" : ((n = e.presentation) == null ? void 0 : n.kind) === "table" ? "table" : ((r = e.presentation) == null ? void 0 : r.kind) === "text" ? "text" : "chart";
|
|
1181
|
-
}
|
|
1182
1179
|
function ht(e) {
|
|
1180
|
+
var t, n, a;
|
|
1181
|
+
return ((t = e.presentation) == null ? void 0 : t.kind) === "kpi" ? "kpi" : ((n = e.presentation) == null ? void 0 : n.kind) === "table" ? "table" : ((a = e.presentation) == null ? void 0 : a.kind) === "text" ? "text" : "chart";
|
|
1182
|
+
}
|
|
1183
|
+
function bt(e) {
|
|
1183
1184
|
switch (e) {
|
|
1184
1185
|
case "not_in":
|
|
1185
1186
|
return "not in";
|
|
@@ -1189,36 +1190,36 @@ function ht(e) {
|
|
|
1189
1190
|
return e || "in";
|
|
1190
1191
|
}
|
|
1191
1192
|
}
|
|
1192
|
-
function
|
|
1193
|
+
function It(e) {
|
|
1193
1194
|
return x(e.field) ? e.field.dataType === "datetime" ? "date" : e.field.dataType || "string" : "string";
|
|
1194
1195
|
}
|
|
1195
|
-
function
|
|
1196
|
+
function gt(e) {
|
|
1196
1197
|
if (!(!e || e.kind !== "physical"))
|
|
1197
1198
|
return [e.databaseName, e.schemaName, e.tableName].filter(Boolean).join(".");
|
|
1198
1199
|
}
|
|
1199
|
-
function
|
|
1200
|
+
function yt(e, t, n, a, i, r) {
|
|
1200
1201
|
if (e.kind !== "filter")
|
|
1201
|
-
return
|
|
1202
|
+
return r.push(
|
|
1202
1203
|
g(
|
|
1203
1204
|
"control_inputs_deferred",
|
|
1204
1205
|
`Control input "${e.label}" is represented in the protocol but not yet materialized by the dashboard authoring adapter.`
|
|
1205
1206
|
)
|
|
1206
1207
|
), null;
|
|
1207
1208
|
if (!x(e.field) || typeof e.field.name != "string")
|
|
1208
|
-
return
|
|
1209
|
+
return r.push(
|
|
1209
1210
|
g(
|
|
1210
1211
|
"filter_requires_field",
|
|
1211
1212
|
`Filter "${e.label || e.id}" needs a field before the dashboard compiler can materialize it.`
|
|
1212
1213
|
)
|
|
1213
1214
|
), null;
|
|
1214
|
-
const
|
|
1215
|
+
const o = ve({
|
|
1215
1216
|
explicitSource: e.source,
|
|
1216
1217
|
field: e.field,
|
|
1217
1218
|
defaultSource: t,
|
|
1218
1219
|
fallbackSources: n
|
|
1219
|
-
}), d = (
|
|
1220
|
+
}), d = (o == null ? void 0 : o.kind) === "semantic" || (o == null ? void 0 : o.kind) === "physical" ? o.connectionId : void 0;
|
|
1220
1221
|
if (!d)
|
|
1221
|
-
return
|
|
1222
|
+
return r.push(
|
|
1222
1223
|
g(
|
|
1223
1224
|
"filter_requires_connection_id",
|
|
1224
1225
|
`Filter "${e.label}" needs a source connectionId before the dashboard compiler can materialize it.`
|
|
@@ -1233,29 +1234,29 @@ function gt(e, t, n, r, i, a) {
|
|
|
1233
1234
|
connectionId: d,
|
|
1234
1235
|
title: e.label,
|
|
1235
1236
|
column: e.field.name,
|
|
1236
|
-
dataType:
|
|
1237
|
-
qualifiedTableName:
|
|
1237
|
+
dataType: It(e),
|
|
1238
|
+
qualifiedTableName: gt(o),
|
|
1238
1239
|
sql: "",
|
|
1239
|
-
operation:
|
|
1240
|
+
operation: bt(e.operator),
|
|
1240
1241
|
type: e.multi === !1 ? "single" : "multiple",
|
|
1241
1242
|
location: "dashboard",
|
|
1242
1243
|
displayMode: "toolbar",
|
|
1243
|
-
fieldMeta: (
|
|
1244
|
+
fieldMeta: (o == null ? void 0 : o.kind) === "semantic" ? {
|
|
1244
1245
|
name: e.field.name,
|
|
1245
1246
|
qualifiedFieldName: e.field.name,
|
|
1246
1247
|
dataType: e.field.dataType,
|
|
1247
1248
|
role: e.field.role === "measure" ? "metric" : "groupby"
|
|
1248
1249
|
} : void 0,
|
|
1249
|
-
semanticContext: (
|
|
1250
|
-
semanticDomainId:
|
|
1251
|
-
connectionId:
|
|
1250
|
+
semanticContext: (o == null ? void 0 : o.kind) === "semantic" ? {
|
|
1251
|
+
semanticDomainId: o.domainId,
|
|
1252
|
+
connectionId: o.connectionId
|
|
1252
1253
|
} : void 0
|
|
1253
1254
|
};
|
|
1254
1255
|
return {
|
|
1255
1256
|
id: e.id,
|
|
1256
1257
|
label: e.label,
|
|
1257
1258
|
variableName: e.id,
|
|
1258
|
-
scope:
|
|
1259
|
+
scope: a,
|
|
1259
1260
|
filter: p,
|
|
1260
1261
|
defaultValue: H(
|
|
1261
1262
|
p,
|
|
@@ -1265,9 +1266,9 @@ function gt(e, t, n, r, i, a) {
|
|
|
1265
1266
|
}
|
|
1266
1267
|
function V(e) {
|
|
1267
1268
|
const t = [], n = [];
|
|
1268
|
-
for (const
|
|
1269
|
-
const i = e.viewIdToCardId.get(
|
|
1270
|
-
i ? t.push(i) : n.push(
|
|
1269
|
+
for (const a of e.viewIds) {
|
|
1270
|
+
const i = e.viewIdToCardId.get(a);
|
|
1271
|
+
i ? t.push(i) : n.push(a);
|
|
1271
1272
|
}
|
|
1272
1273
|
return n.length > 0 && e.warnings.push(
|
|
1273
1274
|
g(
|
|
@@ -1276,16 +1277,16 @@ function V(e) {
|
|
|
1276
1277
|
)
|
|
1277
1278
|
), Array.from(new Set(t));
|
|
1278
1279
|
}
|
|
1279
|
-
function
|
|
1280
|
-
var
|
|
1280
|
+
function _t(e) {
|
|
1281
|
+
var a, i;
|
|
1281
1282
|
if (!e.protocolScope) {
|
|
1282
|
-
const
|
|
1283
|
-
return
|
|
1283
|
+
const r = Array.from(new Set(e.boundCardIds));
|
|
1284
|
+
return r.length > 0 && r.length < e.allCardIds.length ? { kind: "cards", cardIds: r } : void 0;
|
|
1284
1285
|
}
|
|
1285
1286
|
if (e.protocolScope.level === "dashboard") {
|
|
1286
|
-
if (!((
|
|
1287
|
+
if (!((a = e.protocolScope.excludeViewIds) != null && a.length))
|
|
1287
1288
|
return;
|
|
1288
|
-
const
|
|
1289
|
+
const r = new Set(
|
|
1289
1290
|
V({
|
|
1290
1291
|
inputLabel: e.inputLabel,
|
|
1291
1292
|
viewIds: e.protocolScope.excludeViewIds,
|
|
@@ -1295,22 +1296,22 @@ function yt(e) {
|
|
|
1295
1296
|
);
|
|
1296
1297
|
return {
|
|
1297
1298
|
kind: "cards",
|
|
1298
|
-
cardIds: e.allCardIds.filter((
|
|
1299
|
+
cardIds: e.allCardIds.filter((o) => !r.has(o))
|
|
1299
1300
|
};
|
|
1300
1301
|
}
|
|
1301
1302
|
if (e.protocolScope.level === "view") {
|
|
1302
|
-
const
|
|
1303
|
+
const r = V({
|
|
1303
1304
|
inputLabel: e.inputLabel,
|
|
1304
1305
|
viewIds: e.protocolScope.viewIds,
|
|
1305
1306
|
viewIdToCardId: e.viewIdToCardId,
|
|
1306
1307
|
warnings: e.warnings
|
|
1307
1308
|
});
|
|
1308
|
-
return
|
|
1309
|
+
return r.length === 0 ? (e.warnings.push(
|
|
1309
1310
|
g(
|
|
1310
1311
|
"input_scope_has_no_materialized_cards",
|
|
1311
1312
|
`Filter "${e.inputLabel}" was deferred because its view scope does not match any materialized cards.`
|
|
1312
1313
|
)
|
|
1313
|
-
), null) : { kind: "cards", cardIds:
|
|
1314
|
+
), null) : { kind: "cards", cardIds: r };
|
|
1314
1315
|
}
|
|
1315
1316
|
const t = e.sectionIdToCardIds.get(e.protocolScope.sectionId) || [];
|
|
1316
1317
|
if (t.length === 0)
|
|
@@ -1332,23 +1333,23 @@ function yt(e) {
|
|
|
1332
1333
|
);
|
|
1333
1334
|
return {
|
|
1334
1335
|
kind: "cards",
|
|
1335
|
-
cardIds: t.filter((
|
|
1336
|
+
cardIds: t.filter((r) => !n.has(r))
|
|
1336
1337
|
};
|
|
1337
1338
|
}
|
|
1338
|
-
function
|
|
1339
|
+
function xt(e) {
|
|
1339
1340
|
var c, b, S;
|
|
1340
|
-
const t = [], n =
|
|
1341
|
+
const t = [], n = Ie(e);
|
|
1341
1342
|
for (const m of n.warnings)
|
|
1342
1343
|
t.push(g(m.code, m.message));
|
|
1343
1344
|
for (const m of n.errors)
|
|
1344
1345
|
t.push(g(m.code, m.message));
|
|
1345
|
-
const
|
|
1346
|
+
const a = st(e, t), i = [], r = /* @__PURE__ */ new Map(), o = /* @__PURE__ */ new Map(), d = /* @__PURE__ */ new Map(), s = /* @__PURE__ */ new Set(), f = /* @__PURE__ */ new Set();
|
|
1346
1347
|
let p = 0;
|
|
1347
|
-
for (const [m, w] of
|
|
1348
|
+
for (const [m, w] of a.sections.entries()) {
|
|
1348
1349
|
const l = typeof w.title == "string" ? w.title : `Section ${m + 1}`, K = w.id || F(l, `section-${m + 1}`);
|
|
1349
|
-
|
|
1350
|
+
o.set(K, []);
|
|
1350
1351
|
for (const [Q, h] of U(w).entries()) {
|
|
1351
|
-
const J =
|
|
1352
|
+
const J = pt(h), R = F(
|
|
1352
1353
|
h.id || `${l}-${h.title || `View ${Q + 1}`}`,
|
|
1353
1354
|
`card-${m + 1}-${Q + 1}`
|
|
1354
1355
|
);
|
|
@@ -1372,8 +1373,8 @@ function At(e) {
|
|
|
1372
1373
|
);
|
|
1373
1374
|
continue;
|
|
1374
1375
|
}
|
|
1375
|
-
const X = fe(R,
|
|
1376
|
-
h.id &&
|
|
1376
|
+
const X = fe(R, s), T = `card-${X}`;
|
|
1377
|
+
h.id && r.set(h.id, T), (S = o.get(K)) == null || S.push(T);
|
|
1377
1378
|
const he = h.analytics && "inputs" in h.analytics ? h.analytics.inputs : void 0;
|
|
1378
1379
|
for (const Y of he || []) {
|
|
1379
1380
|
const Z = d.get(Y.inputId) || [];
|
|
@@ -1385,29 +1386,29 @@ function At(e) {
|
|
|
1385
1386
|
title: h.title,
|
|
1386
1387
|
description: h.description,
|
|
1387
1388
|
type: J,
|
|
1388
|
-
role:
|
|
1389
|
+
role: ht(h),
|
|
1389
1390
|
priority: p,
|
|
1390
1391
|
section: l,
|
|
1391
|
-
query:
|
|
1392
|
-
analyticsIntent:
|
|
1392
|
+
query: ft(h.analytics),
|
|
1393
|
+
analyticsIntent: mt(h.analytics),
|
|
1393
1394
|
text: h.text
|
|
1394
1395
|
}), p += 1;
|
|
1395
1396
|
}
|
|
1396
1397
|
}
|
|
1397
|
-
const I =
|
|
1398
|
-
const w =
|
|
1398
|
+
const I = a.inputs.map((m) => {
|
|
1399
|
+
const w = _t({
|
|
1399
1400
|
protocolScope: m.scope,
|
|
1400
1401
|
inputLabel: m.label,
|
|
1401
1402
|
allCardIds: i.map((l) => l.id),
|
|
1402
1403
|
boundCardIds: d.get(m.id) || [],
|
|
1403
|
-
viewIdToCardId:
|
|
1404
|
-
sectionIdToCardIds:
|
|
1404
|
+
viewIdToCardId: r,
|
|
1405
|
+
sectionIdToCardIds: o,
|
|
1405
1406
|
warnings: t
|
|
1406
1407
|
});
|
|
1407
|
-
return w === null ? null :
|
|
1408
|
+
return w === null ? null : yt(
|
|
1408
1409
|
m,
|
|
1409
|
-
|
|
1410
|
-
|
|
1410
|
+
a.defaultSource,
|
|
1411
|
+
a.sources,
|
|
1411
1412
|
w,
|
|
1412
1413
|
f,
|
|
1413
1414
|
t
|
|
@@ -1418,7 +1419,7 @@ function At(e) {
|
|
|
1418
1419
|
id: `plan-${F(e.title, "dashboard")}`,
|
|
1419
1420
|
title: e.title,
|
|
1420
1421
|
description: e.description,
|
|
1421
|
-
datasets:
|
|
1422
|
+
datasets: a.datasets,
|
|
1422
1423
|
sheets: [
|
|
1423
1424
|
{
|
|
1424
1425
|
id: `sheet-${F(e.title, "dashboard")}`,
|
|
@@ -1434,26 +1435,26 @@ function At(e) {
|
|
|
1434
1435
|
}, warnings: t };
|
|
1435
1436
|
}
|
|
1436
1437
|
export {
|
|
1437
|
-
|
|
1438
|
+
ye as DASHBOARD_AUTHORING_BREAKPOINTS,
|
|
1438
1439
|
M as DASHBOARD_AUTHORING_MAX_GENERATED_CARDS,
|
|
1439
|
-
|
|
1440
|
-
|
|
1440
|
+
Ct as applyDashboardChangePlan,
|
|
1441
|
+
At as compileDashboardFromPlan,
|
|
1441
1442
|
E as compileResponsiveDashboardLayouts,
|
|
1442
1443
|
W as dashboardAuthoringDatasetMatchesSource,
|
|
1443
|
-
|
|
1444
|
+
ke as dashboardAuthoringFieldsReferToSameTarget,
|
|
1444
1445
|
v as dashboardAuthoringSourceFromField,
|
|
1445
1446
|
ee as dashboardAuthoringSourceKey,
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
|
|
1447
|
+
re as dashboardAuthoringSourcesReferToSameDataset,
|
|
1448
|
+
xt as dashboardPlanFromSemaphorDashboardIntent,
|
|
1449
|
+
St as findDashboardAuthoringDatasetForSource,
|
|
1450
|
+
Ne as getDashboardAuthoringCardSource,
|
|
1450
1451
|
N as isMaterializableDashboardAuthoringSource,
|
|
1451
|
-
|
|
1452
|
+
_e as isSemaphorSourceRef,
|
|
1452
1453
|
q as mergeDashboardAuthoringSources,
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1454
|
+
we as preferDashboardAuthoringSourceMetadata,
|
|
1455
|
+
kt as preferredDashboardAuthoringSource,
|
|
1456
|
+
ve as resolveDashboardAuthoringSource,
|
|
1457
|
+
Te as validateDashboardAuthoringDatasetScope,
|
|
1458
|
+
Re as validateDashboardChangePlan,
|
|
1459
|
+
qe as validateDashboardPlan
|
|
1459
1460
|
};
|