react-semaphor 0.1.208 → 0.1.209

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.
Files changed (36) hide show
  1. package/dist/chunks/{dashboard-controls-yOzrvYwI.js → dashboard-controls-BNTI4r0_.js} +30 -30
  2. package/dist/chunks/{dashboard-controls-K5zNLdtH.js → dashboard-controls-Dcpx9_an.js} +1 -1
  3. package/dist/chunks/{dashboard-json-DqChvVCF.js → dashboard-json-BjOqpGbW.js} +1 -1
  4. package/dist/chunks/{dashboard-json-BuLoVNV4.js → dashboard-json-kIoBtmBF.js} +1 -1
  5. package/dist/chunks/{dashboard-summary-settings-dialog-tJueBNph.js → dashboard-summary-settings-dialog-BoX18wiA.js} +1 -1
  6. package/dist/chunks/{dashboard-summary-settings-dialog-DmccX33N.js → dashboard-summary-settings-dialog-CO1SwHHD.js} +1 -1
  7. package/dist/chunks/{edit-dashboard-visual-CKNlwaCO.js → edit-dashboard-visual-B9HuGExj.js} +1 -1
  8. package/dist/chunks/{edit-dashboard-visual-CV4JsCTg.js → edit-dashboard-visual-DG4VLoJF.js} +2 -2
  9. package/dist/chunks/editor-action-buttons-CDTIx_Jc.js +11 -0
  10. package/dist/chunks/editor-action-buttons-CszdZ4Fw.js +345 -0
  11. package/dist/chunks/{index-CBcPi9pm.js → index-D0TdW88i.js} +24289 -23875
  12. package/dist/chunks/index-DSA80lEg.js +1104 -0
  13. package/dist/chunks/{notification-bell-DyzIftQU.js → notification-bell-D2V1-ARa.js} +1 -1
  14. package/dist/chunks/{notification-bell-B-OVf20Q.js → notification-bell-DFiRaeJQ.js} +52 -52
  15. package/dist/chunks/resource-management-panel-BhiWNPcw.js +6 -0
  16. package/dist/chunks/resource-management-panel-DS_WEv1x.js +902 -0
  17. package/dist/chunks/{use-role-aware-display-preferences-B4QJkliF.js → use-role-aware-display-preferences-D8j5_cnK.js} +1 -1
  18. package/dist/chunks/{use-role-aware-display-preferences-DTSpe_ZT.js → use-role-aware-display-preferences-DfihB5pN.js} +1 -1
  19. package/dist/chunks/{use-visual-utils-CCT3ABI5.js → use-visual-utils-BfLXO_vi.js} +34 -34
  20. package/dist/chunks/{use-visual-utils-ChR-Jti8.js → use-visual-utils-CzcVz3zB.js} +1 -1
  21. package/dist/dashboard/index.cjs +1 -1
  22. package/dist/dashboard/index.js +1 -1
  23. package/dist/index.cjs +1 -1
  24. package/dist/index.js +5 -5
  25. package/dist/surfboard/index.cjs +1 -1
  26. package/dist/surfboard/index.js +2 -2
  27. package/dist/types/dashboard.d.ts +12 -1
  28. package/dist/types/main.d.ts +13 -1
  29. package/dist/types/surfboard.d.ts +12 -1
  30. package/dist/types/types.d.ts +12 -1
  31. package/package.json +1 -1
  32. package/dist/chunks/editor-action-buttons-CAjqJiT_.js +0 -340
  33. package/dist/chunks/editor-action-buttons-DQVh7L5i.js +0 -11
  34. package/dist/chunks/index-DQOwJyRp.js +0 -1104
  35. package/dist/chunks/resource-management-panel-D_mSi7Cm.js +0 -914
  36. package/dist/chunks/resource-management-panel-NqaNfAq3.js +0 -6
@@ -1 +1 @@
1
- "use strict";const a=require("./index-DQOwJyRp.js"),n=require("react");function f(){const{displayPreferences:c,shouldShowElement:o}=a.useDisplayPreferences(),{currentUser:e,userContext:s}=a.useCurrentUserInfo(),i=n.useMemo(()=>a.getRoleBasedDisplayOverrides(e),[e]),t=n.useMemo(()=>r=>i&&i[r]!==void 0&&i[r]===!1?!1:o(r),[i,o,c]),p=n.useMemo(()=>{var r,d,l,u,h;return{canEdit:((r=s==null?void 0:s.permissions)==null?void 0:r.canEdit)??a.canUserEdit(e),canUseFilters:((d=s==null?void 0:s.permissions)==null?void 0:d.canEdit)??a.canUserUseFilters(e),canManageDashboards:((l=s==null?void 0:s.permissions)==null?void 0:l.canCreateDashboard)??a.canUserManageDashboards(e),canCreateDashboards:((u=s==null?void 0:s.permissions)==null?void 0:u.canCreateDashboard)??a.canUserCreateDashboards(e),canAccessVisuals:((h=s==null?void 0:s.permissions)==null?void 0:h.canEdit)??a.canUserAccessVisuals(e)}},[e,s]);return{displayPreferences:c,shouldShowElement:t,permissions:p,currentUser:e}}exports.useRoleAwareDisplayPreferences=f;
1
+ "use strict";const a=require("./index-DSA80lEg.js"),n=require("react");function f(){const{displayPreferences:c,shouldShowElement:o}=a.useDisplayPreferences(),{currentUser:e,userContext:s}=a.useCurrentUserInfo(),i=n.useMemo(()=>a.getRoleBasedDisplayOverrides(e),[e]),t=n.useMemo(()=>r=>i&&i[r]!==void 0&&i[r]===!1?!1:o(r),[i,o,c]),p=n.useMemo(()=>{var r,d,l,u,h;return{canEdit:((r=s==null?void 0:s.permissions)==null?void 0:r.canEdit)??a.canUserEdit(e),canUseFilters:((d=s==null?void 0:s.permissions)==null?void 0:d.canEdit)??a.canUserUseFilters(e),canManageDashboards:((l=s==null?void 0:s.permissions)==null?void 0:l.canCreateDashboard)??a.canUserManageDashboards(e),canCreateDashboards:((u=s==null?void 0:s.permissions)==null?void 0:u.canCreateDashboard)??a.canUserCreateDashboards(e),canAccessVisuals:((h=s==null?void 0:s.permissions)==null?void 0:h.canEdit)??a.canUserAccessVisuals(e)}},[e,s]);return{displayPreferences:c,shouldShowElement:t,permissions:p,currentUser:e}}exports.useRoleAwareDisplayPreferences=f;
@@ -1,4 +1,4 @@
1
- import { b as m, e as t, g as D, f as U, h as b, i as u, j as E, k as g } from "./index-CBcPi9pm.js";
1
+ import { b as m, e as t, g as D, f as U, h as b, i as u, j as E, k as g } from "./index-D0TdW88i.js";
2
2
  import { useMemo as i } from "react";
3
3
  function S() {
4
4
  const { displayPreferences: n, shouldShowElement: c } = m(), { currentUser: a, userContext: s } = t(), r = i(
@@ -1,4 +1,4 @@
1
- import { bT as G, l as Y, bP as J, bQ as K, bU as X, by as Q, bs as Z, u as v, bV as q, bW as ee, I as $, bX as te, bA as f } from "./index-CBcPi9pm.js";
1
+ import { bI as G, l as J, bJ as K, bK as Y, bL as X, by as _, bs as Z, u as v, bM as q, bN as ee, I as V, bO as te, bA as f } from "./index-D0TdW88i.js";
2
2
  import { useState as j, useEffect as re, useCallback as A } from "react";
3
3
  function se(e) {
4
4
  const a = e.toUpperCase().indexOf("WHERE"), t = e.toUpperCase().indexOf("GROUP BY"), r = e.toUpperCase().indexOf("LIMIT"), s = e.toUpperCase().indexOf("ORDER BY");
@@ -96,7 +96,7 @@ async function k(e, a, t, r) {
96
96
  if (n)
97
97
  return console.log("Using cached visual data for:", t), { data: n, fromCache: !0 };
98
98
  console.log("Fetching visual data from network for:", t);
99
- const i = $.loading("Loading visual...", {
99
+ const i = V.loading("Loading visual...", {
100
100
  position: "top-center"
101
101
  });
102
102
  try {
@@ -111,12 +111,12 @@ async function k(e, a, t, r) {
111
111
  if (!o.ok)
112
112
  throw new Error("Failed to load visual");
113
113
  const d = await o.json();
114
- return r.setQueryData(s, d), $.dismiss(i), { data: d, fromCache: !1 };
114
+ return r.setQueryData(s, d), V.dismiss(i), { data: d, fromCache: !1 };
115
115
  } catch (o) {
116
- throw $.dismiss(i), o;
116
+ throw V.dismiss(i), o;
117
117
  }
118
118
  }
119
- function _(e) {
119
+ function H(e) {
120
120
  if (typeof e == "string")
121
121
  return JSON.parse(e);
122
122
  if (typeof e == "object")
@@ -128,7 +128,7 @@ function ce(e, a) {
128
128
  const t = (e == null ? void 0 : e.frameObject) ?? ((n = e == null ? void 0 : e.visual) == null ? void 0 : n.frameObject);
129
129
  if (!t)
130
130
  return !1;
131
- const r = _(t);
131
+ const r = H(t);
132
132
  if (!(r != null && r.cards) || r.cards.length === 0)
133
133
  return !1;
134
134
  const s = (i = r.cards) == null ? void 0 : i.find(
@@ -143,7 +143,7 @@ function ce(e, a) {
143
143
  }
144
144
  function ie() {
145
145
  var S;
146
- const { setCardSql: e } = Q(), a = f((c) => c.frame), t = f((c) => c.card), r = f((c) => c.isDevMode), s = oe(
146
+ const { setCardSql: e } = _(), a = f((c) => c.frame), t = f((c) => c.card), r = f((c) => c.isDevMode), s = oe(
147
147
  ((S = t.customCardPreferences) == null ? void 0 : S.url) || ""
148
148
  ), n = f(
149
149
  (c) => c.selectedSchemaName
@@ -204,7 +204,7 @@ function ie() {
204
204
  ]) };
205
205
  }
206
206
  function ue() {
207
- const { authToken: e, tokenProps: a } = Y(), t = J(), r = K(), { selectVisual: s } = X(), {
207
+ const { authToken: e, tokenProps: a } = J(), t = K(), r = Y(), { selectVisual: s } = X(), {
208
208
  setFrame: n,
209
209
  setCard: i,
210
210
  setIsDevMode: o,
@@ -212,26 +212,26 @@ function ue() {
212
212
  setActiveTabCardId: m,
213
213
  updateDataSource: h,
214
214
  setQueryResultColumns: p,
215
- setSelectedConnectionId: V,
215
+ setSelectedConnectionId: $,
216
216
  setSelectedDatabaseName: S,
217
217
  setSelectedSchemaName: c,
218
218
  setSelectedTableName: C,
219
219
  setSelectedDatamodelId: U,
220
220
  setFilterValues: w,
221
221
  setApplyFilters: I
222
- } = Q(), {
222
+ } = _(), {
223
223
  setIsDashboardEditing: b,
224
224
  setIsVisualEditing: D,
225
225
  setSelectedFrameId: N,
226
- clearSelectedFrameId: T,
227
- addFrame: O,
228
- setIsDashboardPanelOpen: P
229
- } = Z(), y = v((l) => l.selectedSheetId), W = v((l) => l.selectedFrameId), x = v((l) => l.dashboard), B = v((l) => l.filterValues), E = q((r == null ? void 0 : r.id) || "", {
226
+ clearSelectedFrameId: O,
227
+ addFrame: M,
228
+ setIsDashboardPanelOpen: T
229
+ } = Z(), y = v((l) => l.selectedSheetId), x = v((l) => l.selectedFrameId), B = v((l) => l.dashboard), L = v((l) => l.filterValues), E = q((r == null ? void 0 : r.id) || "", {
230
230
  enabled: !!(r != null && r.id) && !!(e != null && e.accessToken)
231
- }), H = A(
231
+ }), Q = A(
232
232
  async (l) => {
233
233
  try {
234
- s(l), T();
234
+ s(l), O();
235
235
  const { data: g, fromCache: u } = await k(
236
236
  a.apiServiceUrl,
237
237
  (e == null ? void 0 : e.accessToken) || "",
@@ -246,7 +246,7 @@ function ue() {
246
246
  setActiveTabCardId: m,
247
247
  updateDataSource: h,
248
248
  setQueryResultColumns: p,
249
- setSelectedConnectionId: V,
249
+ setSelectedConnectionId: $,
250
250
  setSelectedDatabaseName: S,
251
251
  setSelectedSchemaName: c,
252
252
  setSelectedTableName: C,
@@ -255,10 +255,10 @@ function ue() {
255
255
  setApplyFilters: I,
256
256
  setIsDashboardEditing: b,
257
257
  setIsVisualEditing: D,
258
- dashboard: x,
258
+ dashboard: B,
259
259
  selectedSheetId: y,
260
- selectedFrameId: W,
261
- filterValues: B
260
+ selectedFrameId: x,
261
+ filterValues: L
262
262
  }))
263
263
  throw new Error("Failed to setup editor with visual data");
264
264
  return { success: !0, fromCache: u };
@@ -280,18 +280,18 @@ function ue() {
280
280
  m,
281
281
  h,
282
282
  p,
283
- V,
283
+ $,
284
284
  S,
285
285
  c,
286
286
  C,
287
287
  U,
288
288
  w,
289
289
  I,
290
- T,
291
- x,
290
+ O,
291
+ B,
292
292
  y,
293
- W,
294
- B
293
+ x,
294
+ L
295
295
  ]
296
296
  ), z = A(
297
297
  async (l) => {
@@ -302,23 +302,23 @@ function ue() {
302
302
  success: !1,
303
303
  error: "No sheet selected. Please select a sheet first."
304
304
  };
305
- const { data: u, fromCache: R } = await k(
305
+ const { data: u, fromCache: P } = await k(
306
306
  a.apiServiceUrl,
307
307
  (e == null ? void 0 : e.accessToken) || "",
308
308
  l.id,
309
309
  t
310
- ), M = (u == null ? void 0 : u.frameObject) ?? ((g = u == null ? void 0 : u.visual) == null ? void 0 : g.frameObject);
311
- if (!M)
310
+ ), R = (u == null ? void 0 : u.frameObject) ?? ((g = u == null ? void 0 : u.visual) == null ? void 0 : g.frameObject);
311
+ if (!R)
312
312
  return { success: !1, error: "Visual has no frame data" };
313
- const F = _(M);
313
+ const F = H(R);
314
314
  if (!(F != null && F.cards) || F.cards.length === 0)
315
315
  return { success: !1, error: "Visual frame is malformed" };
316
- const L = {
316
+ const W = {
317
317
  ...ee(F),
318
318
  visualId: l.id
319
319
  // Link this frame to the library visual
320
320
  };
321
- return O(y, L, "end"), b(!0), N(L.id), P(!1), { success: !0, fromCache: R };
321
+ return M(y, W, "end"), b(!0), N(W.id), T(!1), { success: !0, fromCache: P };
322
322
  } catch (u) {
323
323
  return console.error("Error adding visual:", u), { success: !1, error: "Failed to add visual to dashboard" };
324
324
  }
@@ -329,10 +329,10 @@ function ue() {
329
329
  t,
330
330
  s,
331
331
  y,
332
- O,
332
+ M,
333
333
  b,
334
334
  N,
335
- P
335
+ T
336
336
  ]
337
337
  );
338
338
  return {
@@ -340,7 +340,7 @@ function ue() {
340
340
  isLoading: E.isLoading,
341
341
  isError: E.isError,
342
342
  error: E.error,
343
- handleEditLibraryVisual: H,
343
+ handleEditLibraryVisual: Q,
344
344
  handleAddLibraryVisual: z,
345
345
  getUpdatedFrame: ie().getUpdatedFrame,
346
346
  refetch: E.refetch
@@ -1 +1 @@
1
- "use strict";const a=require("./index-DQOwJyRp.js"),g=require("react");function H(e){const n=e.toUpperCase().indexOf("WHERE"),t=e.toUpperCase().indexOf("GROUP BY"),r=e.toUpperCase().indexOf("LIMIT"),s=e.toUpperCase().indexOf("ORDER BY");let c=e.length;if(s!==-1&&(c=s),r!==-1&&r<c&&(c=r),n!==-1){const d=e.substring(0,n),o=e.substring(n);return`${d} {{ filters | where }} AND ${o.substring(6)}`}else if(t!==-1){const d=e.substring(0,t),o=e.substring(t);return`${d} {{ filters | where }} ${o}`}else{const d=e.substring(0,c),o=e.substring(c);return console.log("beforeClause",d),console.log("afterClause",o),o?`${d} {{ filters | where }} ${o}`:`${d.replace(/;$/,"")} {{ filters | where }}`}}function k(e){const[n,t]=g.useState(null),[r,s]=g.useState(null),c=a.useEnsureReactGlobals();return g.useEffect(()=>{if(!e||e.trim()===""){t(null),s(null);return}if(!c)return;(async()=>{try{if(!e.startsWith("http://")&&!e.startsWith("https://"))throw new Error(`Invalid URL format: ${e}`);try{new URL(e)}catch{throw new Error(`Invalid URL: ${e}`)}const l=`${e.endsWith("/")?e:`${e}/`}index.js`;try{if(!(await fetch(l,{method:"HEAD"})).ok)throw new Error(`Module not found at ${l}`)}catch{}const h=await import(l);if(typeof h.useChartStore!="function")throw new Error("useChartStore is not a function");t(()=>h.useChartStore),s(null)}catch(o){const l=o instanceof Error?o.message:"Unknown error";console.error("Failed to load remote chart store:",l),s(l),t(null)}})()},[e,c]),n}function Q(e,n){if(e.length===0)return"";const t=e.find(r=>{var s,c;return((s=r.customCardPreferences)==null?void 0:s.visualType)==="multiple"||!!((c=r.customCardPreferences)!=null&&c.dataInputCardIds)});if(t)return t.id;if(n){const r=e.find(s=>s.id===n);if(r){const s=r.tabTitle;if(s=="All__Header")return e[0].id;if(s&&s.endsWith("__Header")){const d=s.split("__")[0],o=e.find(l=>l.tabTitle===d);return o?o.id:e[0].id}return n}}return e[0].id}const z=e=>{if(!e||!("detailTableBackup"in e))return e;const{detailTableBackup:n,...t}=e;return t};async function M(e,n,t,r){if(!n||!t)throw new Error("Missing auth token or visual ID");const s=["resource-by-id","visual",t],c=r.getQueryData(s);if(c)return console.log("Using cached visual data for:",t),{data:c,fromCache:!0};console.log("Fetching visual data from network for:",t);const d=a.ue.loading("Loading visual...",{position:"top-center"});try{const o=await fetch(`${e}/management/v1/visuals/${t}`,{headers:{Authorization:`Bearer ${n}`}});if(!o.ok)throw new Error("Failed to load visual");const l=await o.json();return r.setQueryData(s,l),a.ue.dismiss(d),{data:l,fromCache:!1}}catch(o){throw a.ue.dismiss(d),o}}function L(e){if(typeof e=="string")return JSON.parse(e);if(typeof e=="object")return e;throw new Error("Invalid frame object format")}function G(e,n){var c,d;const t=(e==null?void 0:e.frameObject)??((c=e==null?void 0:e.visual)==null?void 0:c.frameObject);if(!t)return!1;const r=L(t);if(!(r!=null&&r.cards)||r.cards.length===0)return!1;const s=(d=r.cards)==null?void 0:d.find(o=>o.id===r.activeCardId);return s?(a.setupEditorWithCard({...n,frame:r,card:s,visualId:(e==null?void 0:e.id)||r.visualId}),!0):!1}function Y(){var C;const{setCardSql:e}=a.useEditorActions(),n=a.useEditorStore(i=>i.frame),t=a.useEditorStore(i=>i.card),r=a.useEditorStore(i=>i.isDevMode),s=k(((C=t.customCardPreferences)==null?void 0:C.url)||""),c=a.useEditorStore(i=>i.selectedSchemaName),d=a.useEditorStore(i=>i.selectedDatamodelId),o=a.useEditorStore(i=>i.selectedDatabaseName),l=a.useEditorStore(i=>i.selectedTableName),h=a.useEditorStore(i=>i.selectedConnectionId),m=a.useEditorStore(i=>i.isShowingVisual),p=t.sql;return{getUpdatedFrame:g.useCallback(()=>{var I;let i=p;p&&!p.includes("{{")&&(i=H(p),e(i));const w=(I=s==null?void 0:s.getState())==null?void 0:I.settings,v={...t,dataSource:t.dataSource||{mode:"directSource"},lastSelectedSchema:c,lastSelectedDatamodelId:d,lastSelectedDatabase:o,lastSelectedTable:l,connectionId:h,sql:r?i:void 0,python:r?t.python:void 0,config:r?void 0:z(t.config),customCfg:m?t.customCfg:null,preferences:t.preferences,...w&&{customCardPreferences:{...t.customCardPreferences,settings:w}}},E=n.cards.map(S=>S.id===t.id?v:S);return{...n,cards:E,activeCardId:Q(E,n.activeCardId)}},[t,n,r,m,c,d,o,l,h,e,s,p])}}function J(){const{authToken:e,tokenProps:n}=a.useSemaphorContext(),t=a.useQueryClient(),r=a.useSelectedVisual(),{selectVisual:s}=a.useManagementActions(),{setFrame:c,setCard:d,setIsDevMode:o,initializeModeDrafts:l,setActiveTabCardId:h,updateDataSource:m,setQueryResultColumns:p,setSelectedConnectionId:D,setSelectedDatabaseName:C,setSelectedSchemaName:i,setSelectedTableName:w,setSelectedDatamodelId:v,setFilterValues:E,setApplyFilters:I}=a.useEditorActions(),{setIsDashboardEditing:S,setIsVisualEditing:V,setSelectedFrameId:$,clearSelectedFrameId:A,addFrame:N,setIsDashboardPanelOpen:R}=a.useDashboardActions(),y=a.useDashboardStore(u=>u.selectedSheetId),O=a.useDashboardStore(u=>u.selectedFrameId),T=a.useDashboardStore(u=>u.dashboard),x=a.useDashboardStore(u=>u.filterValues),F=a.useVisualById((r==null?void 0:r.id)||"",{enabled:!!(r!=null&&r.id)&&!!(e!=null&&e.accessToken)}),j=g.useCallback(async u=>{try{s(u),A();const{data:b,fromCache:f}=await M(n.apiServiceUrl,(e==null?void 0:e.accessToken)||"",u.id,t);if(!G(b,{setFrame:c,setCard:d,setIsDevMode:o,initializeModeDrafts:l,setActiveTabCardId:h,updateDataSource:m,setQueryResultColumns:p,setSelectedConnectionId:D,setSelectedDatabaseName:C,setSelectedSchemaName:i,setSelectedTableName:w,setSelectedDatamodelId:v,setFilterValues:E,setApplyFilters:I,setIsDashboardEditing:S,setIsVisualEditing:V,dashboard:T,selectedSheetId:y,selectedFrameId:O,filterValues:x}))throw new Error("Failed to setup editor with visual data");return{success:!0,fromCache:f}}catch(b){return console.error("Error editing visual:",b),{success:!1,error:"Failed to load visual for editing"}}},[e==null?void 0:e.accessToken,n.apiServiceUrl,t,s,c,d,S,V,o,l,h,m,p,D,C,i,w,v,E,I,A,T,y,O,x]),_=g.useCallback(async u=>{var b;try{if(s(u),!y)return{success:!1,error:"No sheet selected. Please select a sheet first."};const{data:f,fromCache:B}=await M(n.apiServiceUrl,(e==null?void 0:e.accessToken)||"",u.id,t),P=(f==null?void 0:f.frameObject)??((b=f==null?void 0:f.visual)==null?void 0:b.frameObject);if(!P)return{success:!1,error:"Visual has no frame data"};const U=L(P);if(!(U!=null&&U.cards)||U.cards.length===0)return{success:!1,error:"Visual frame is malformed"};const W={...a.cloneFrameWithNewIds(U),visualId:u.id};return N(y,W,"end"),S(!0),$(W.id),R(!1),{success:!0,fromCache:B}}catch(f){return console.error("Error adding visual:",f),{success:!1,error:"Failed to add visual to dashboard"}}},[e==null?void 0:e.accessToken,n.apiServiceUrl,t,s,y,N,S,$,R]);return{visual:F.data,isLoading:F.isLoading,isError:F.isError,error:F.error,handleEditLibraryVisual:j,handleAddLibraryVisual:_,getUpdatedFrame:Y().getUpdatedFrame,refetch:F.refetch}}exports.useRemoteChartStore=k;exports.useVisualUtils=J;
1
+ "use strict";const a=require("./index-DSA80lEg.js"),g=require("react");function H(e){const n=e.toUpperCase().indexOf("WHERE"),t=e.toUpperCase().indexOf("GROUP BY"),r=e.toUpperCase().indexOf("LIMIT"),s=e.toUpperCase().indexOf("ORDER BY");let c=e.length;if(s!==-1&&(c=s),r!==-1&&r<c&&(c=r),n!==-1){const d=e.substring(0,n),o=e.substring(n);return`${d} {{ filters | where }} AND ${o.substring(6)}`}else if(t!==-1){const d=e.substring(0,t),o=e.substring(t);return`${d} {{ filters | where }} ${o}`}else{const d=e.substring(0,c),o=e.substring(c);return console.log("beforeClause",d),console.log("afterClause",o),o?`${d} {{ filters | where }} ${o}`:`${d.replace(/;$/,"")} {{ filters | where }}`}}function k(e){const[n,t]=g.useState(null),[r,s]=g.useState(null),c=a.useEnsureReactGlobals();return g.useEffect(()=>{if(!e||e.trim()===""){t(null),s(null);return}if(!c)return;(async()=>{try{if(!e.startsWith("http://")&&!e.startsWith("https://"))throw new Error(`Invalid URL format: ${e}`);try{new URL(e)}catch{throw new Error(`Invalid URL: ${e}`)}const l=`${e.endsWith("/")?e:`${e}/`}index.js`;try{if(!(await fetch(l,{method:"HEAD"})).ok)throw new Error(`Module not found at ${l}`)}catch{}const h=await import(l);if(typeof h.useChartStore!="function")throw new Error("useChartStore is not a function");t(()=>h.useChartStore),s(null)}catch(o){const l=o instanceof Error?o.message:"Unknown error";console.error("Failed to load remote chart store:",l),s(l),t(null)}})()},[e,c]),n}function Q(e,n){if(e.length===0)return"";const t=e.find(r=>{var s,c;return((s=r.customCardPreferences)==null?void 0:s.visualType)==="multiple"||!!((c=r.customCardPreferences)!=null&&c.dataInputCardIds)});if(t)return t.id;if(n){const r=e.find(s=>s.id===n);if(r){const s=r.tabTitle;if(s=="All__Header")return e[0].id;if(s&&s.endsWith("__Header")){const d=s.split("__")[0],o=e.find(l=>l.tabTitle===d);return o?o.id:e[0].id}return n}}return e[0].id}const z=e=>{if(!e||!("detailTableBackup"in e))return e;const{detailTableBackup:n,...t}=e;return t};async function W(e,n,t,r){if(!n||!t)throw new Error("Missing auth token or visual ID");const s=["resource-by-id","visual",t],c=r.getQueryData(s);if(c)return console.log("Using cached visual data for:",t),{data:c,fromCache:!0};console.log("Fetching visual data from network for:",t);const d=a.ue.loading("Loading visual...",{position:"top-center"});try{const o=await fetch(`${e}/management/v1/visuals/${t}`,{headers:{Authorization:`Bearer ${n}`}});if(!o.ok)throw new Error("Failed to load visual");const l=await o.json();return r.setQueryData(s,l),a.ue.dismiss(d),{data:l,fromCache:!1}}catch(o){throw a.ue.dismiss(d),o}}function L(e){if(typeof e=="string")return JSON.parse(e);if(typeof e=="object")return e;throw new Error("Invalid frame object format")}function G(e,n){var c,d;const t=(e==null?void 0:e.frameObject)??((c=e==null?void 0:e.visual)==null?void 0:c.frameObject);if(!t)return!1;const r=L(t);if(!(r!=null&&r.cards)||r.cards.length===0)return!1;const s=(d=r.cards)==null?void 0:d.find(o=>o.id===r.activeCardId);return s?(a.setupEditorWithCard({...n,frame:r,card:s,visualId:(e==null?void 0:e.id)||r.visualId}),!0):!1}function Y(){var C;const{setCardSql:e}=a.useEditorActions(),n=a.useEditorStore(i=>i.frame),t=a.useEditorStore(i=>i.card),r=a.useEditorStore(i=>i.isDevMode),s=k(((C=t.customCardPreferences)==null?void 0:C.url)||""),c=a.useEditorStore(i=>i.selectedSchemaName),d=a.useEditorStore(i=>i.selectedDatamodelId),o=a.useEditorStore(i=>i.selectedDatabaseName),l=a.useEditorStore(i=>i.selectedTableName),h=a.useEditorStore(i=>i.selectedConnectionId),m=a.useEditorStore(i=>i.isShowingVisual),p=t.sql;return{getUpdatedFrame:g.useCallback(()=>{var I;let i=p;p&&!p.includes("{{")&&(i=H(p),e(i));const E=(I=s==null?void 0:s.getState())==null?void 0:I.settings,v={...t,dataSource:t.dataSource||{mode:"directSource"},lastSelectedSchema:c,lastSelectedDatamodelId:d,lastSelectedDatabase:o,lastSelectedTable:l,connectionId:h,sql:r?i:void 0,python:r?t.python:void 0,config:r?void 0:z(t.config),customCfg:m?t.customCfg:null,preferences:t.preferences,...E&&{customCardPreferences:{...t.customCardPreferences,settings:E}}},w=n.cards.map(S=>S.id===t.id?v:S);return{...n,cards:w,activeCardId:Q(w,n.activeCardId)}},[t,n,r,m,c,d,o,l,h,e,s,p])}}function J(){const{authToken:e,tokenProps:n}=a.useSemaphorContext(),t=a.useQueryClient(),r=a.useSelectedVisual(),{selectVisual:s}=a.useManagementActions(),{setFrame:c,setCard:d,setIsDevMode:o,initializeModeDrafts:l,setActiveTabCardId:h,updateDataSource:m,setQueryResultColumns:p,setSelectedConnectionId:D,setSelectedDatabaseName:C,setSelectedSchemaName:i,setSelectedTableName:E,setSelectedDatamodelId:v,setFilterValues:w,setApplyFilters:I}=a.useEditorActions(),{setIsDashboardEditing:S,setIsVisualEditing:V,setSelectedFrameId:$,clearSelectedFrameId:A,addFrame:R,setIsDashboardPanelOpen:N}=a.useDashboardActions(),y=a.useDashboardStore(u=>u.selectedSheetId),O=a.useDashboardStore(u=>u.selectedFrameId),T=a.useDashboardStore(u=>u.dashboard),x=a.useDashboardStore(u=>u.filterValues),F=a.useVisualById((r==null?void 0:r.id)||"",{enabled:!!(r!=null&&r.id)&&!!(e!=null&&e.accessToken)}),j=g.useCallback(async u=>{try{s(u),A();const{data:b,fromCache:f}=await W(n.apiServiceUrl,(e==null?void 0:e.accessToken)||"",u.id,t);if(!G(b,{setFrame:c,setCard:d,setIsDevMode:o,initializeModeDrafts:l,setActiveTabCardId:h,updateDataSource:m,setQueryResultColumns:p,setSelectedConnectionId:D,setSelectedDatabaseName:C,setSelectedSchemaName:i,setSelectedTableName:E,setSelectedDatamodelId:v,setFilterValues:w,setApplyFilters:I,setIsDashboardEditing:S,setIsVisualEditing:V,dashboard:T,selectedSheetId:y,selectedFrameId:O,filterValues:x}))throw new Error("Failed to setup editor with visual data");return{success:!0,fromCache:f}}catch(b){return console.error("Error editing visual:",b),{success:!1,error:"Failed to load visual for editing"}}},[e==null?void 0:e.accessToken,n.apiServiceUrl,t,s,c,d,S,V,o,l,h,m,p,D,C,i,E,v,w,I,A,T,y,O,x]),_=g.useCallback(async u=>{var b;try{if(s(u),!y)return{success:!1,error:"No sheet selected. Please select a sheet first."};const{data:f,fromCache:B}=await W(n.apiServiceUrl,(e==null?void 0:e.accessToken)||"",u.id,t),M=(f==null?void 0:f.frameObject)??((b=f==null?void 0:f.visual)==null?void 0:b.frameObject);if(!M)return{success:!1,error:"Visual has no frame data"};const U=L(M);if(!(U!=null&&U.cards)||U.cards.length===0)return{success:!1,error:"Visual frame is malformed"};const P={...a.cloneLinkedFrameWithSourceMapping(U),visualId:u.id};return R(y,P,"end"),S(!0),$(P.id),N(!1),{success:!0,fromCache:B}}catch(f){return console.error("Error adding visual:",f),{success:!1,error:"Failed to add visual to dashboard"}}},[e==null?void 0:e.accessToken,n.apiServiceUrl,t,s,y,R,S,$,N]);return{visual:F.data,isLoading:F.isLoading,isError:F.isError,error:F.error,handleEditLibraryVisual:j,handleAddLibraryVisual:_,getUpdatedFrame:Y().getUpdatedFrame,refetch:F.refetch}}exports.useRemoteChartStore=k;exports.useVisualUtils=J;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../chunks/index-DQOwJyRp.js"),o=require("../chunks/common-types-CfJLrTJd.js");exports.Dashboard=e.Dashboard;exports.EMPTY_SELECTION=o.EMPTY_SELECTION;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../chunks/index-DSA80lEg.js"),o=require("../chunks/common-types-CfJLrTJd.js");exports.Dashboard=e.Dashboard;exports.EMPTY_SELECTION=o.EMPTY_SELECTION;
@@ -1,4 +1,4 @@
1
- import { D as a } from "../chunks/index-CBcPi9pm.js";
1
+ import { D as a } from "../chunks/index-D0TdW88i.js";
2
2
  import { E as s } from "../chunks/common-types-DhqlRVrq.js";
3
3
  export {
4
4
  a as Dashboard,
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./chunks/index-DQOwJyRp.js"),j=require("./chunks/common-types-CfJLrTJd.js"),D=require("./chunks/dashboard-summary-settings-dialog-tJueBNph.js"),t=require("react/jsx-runtime"),C=require("react"),v=require("./chunks/resource-management-panel-NqaNfAq3.js"),N=require("./types/index.cjs");require("react-dom");const c=require("./chunks/notification-bell-DyzIftQU.js");function P(r){const a=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(r){for(const o in r)if(o!=="default"){const i=Object.getOwnPropertyDescriptor(r,o);Object.defineProperty(a,o,i.get?i:{enumerable:!0,get:()=>r[o]})}}return a.default=r,Object.freeze(a)}const h=P(C);function M(r){const{displayPreferences:a,...o}=r,i={...o,id:r.dashboardId};return t.jsx(e.ErrorBoundary,{FallbackComponent:e.Fallback,children:t.jsxs(e.SemaphorContextProvider,{dashboardProps:i,children:[t.jsx(e.SemaphorReadyIndicator,{componentType:"visual",componentId:r.cardId}),t.jsx(e.UXProvider,{children:t.jsx(e.DisplayPreferencesProvider,{displayPreferences:a,children:t.jsx(e.Container,{type:"visual",...i,children:t.jsx(_,{cardId:r.cardId})})})})]})})}function _({cardId:r}){const a=e.useDashboardStore(n=>{var l;return(l=n.dashboard)==null?void 0:l.sheets}),{card:o,frame:i}=C.useMemo(()=>{const n=a==null?void 0:a.flatMap(s=>s.frames),l=n==null?void 0:n.flatMap(s=>s==null?void 0:s.cards),x=l==null?void 0:l.find(s=>(s==null?void 0:s.id)===r),u=n==null?void 0:n.find(s=>{var p;return(p=s==null?void 0:s.cards)==null?void 0:p.find(m=>(m==null?void 0:m.id)===r)});return{card:x,frame:u}},[a,r]);return!o||!i?t.jsx(e.FallbackVisual,{error:new Error("Card not found"),resetErrorBoundary:()=>{},customerFacingMessage:`Card not found with ID: ${r}`}):t.jsx("main",{className:"flex h-full grow flex-col",children:t.jsx(e.ErrorBoundary,{FallbackComponent:({error:n,resetErrorBoundary:l})=>t.jsx(e.FallbackVisual,{error:n,resetErrorBoundary:l,customerFacingMessage:"Error creating visual. Please try again."}),children:t.jsx(e.DashboardCard,{card:o,frame:i})})})}function I({name:r,items:a,value:o,onChange:i,isLoading:n,isError:l,refetch:x,className:u,icon:s,showNone:p=!1}){const m=h.useRef(null),[f,y]=h.useState(!1),[E,S]=h.useState("100%"),g=p?[...a||[],{id:"none",name:"None"}]:a;h.useLayoutEffect(()=>{m.current&&S(m.current.offsetWidth)},[]);function b(){var d;return n?"Loading...":l?"Error":o?(d=a==null?void 0:a.find(A=>A.id===o))==null?void 0:d.name:`Select ${r}`}function T(d,A){i(A),y(!1)}return t.jsxs(e.Popover,{open:f,onOpenChange:y,children:[t.jsx(e.PopoverTrigger,{asChild:!0,children:t.jsxs(e.Button,{ref:m,variant:"outline",role:"combobox","aria-expanded":f,className:e.cn("flex h-9 w-full justify-between",u),children:[t.jsxs("div",{className:"flex items-center gap-2",children:[s&&t.jsx("div",{className:"mr-2",children:s}),t.jsx("span",{className:"max-w-[150px] overflow-hidden truncate text-ellipsis whitespace-nowrap",children:b()})]}),t.jsx(e.ChevronDown,{className:"size-4 opacity-50"})]})}),t.jsx(e.PopoverContent,{className:"w-full p-0",style:{minWidth:E},children:t.jsxs(e.Command,{children:[t.jsxs("div",{className:"flex h-9 items-center justify-between border-b pr-1",children:[t.jsx(e.CommandInput,{className:"h-9",placeholder:"Search..."}),t.jsx(e.IconButton,{className:"h-7",onClick:x,children:t.jsx(e.RefreshCw,{className:e.cn("size-3.5 opacity-50",n&&"animate-spin")})})]}),t.jsxs(e.CommandList,{children:[t.jsxs(e.CommandEmpty,{children:["No ",r==null?void 0:r.toLowerCase()," found."]}),t.jsx(e.CommandGroup,{children:g==null?void 0:g.map(d=>t.jsx(e.CommandItem,{className:"overflow-x-auto",value:d.name,onSelect:A=>T(A,d.id),children:t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx(e.Check,{className:e.cn("size-4",o===d.id?"opacity-100":"opacity-0")}),t.jsx("div",{title:d.name,children:d.name})]})},d.id))})]})]})})]})}function R(r,a){C.useEffect(()=>(r&&a&&(window.__SEMAPHOR_PRINT_STATE__={...a}),()=>{r&&window.__SEMAPHOR_PRINT_STATE__&&delete window.__SEMAPHOR_PRINT_STATE__}),[r,a])}function w(){var l,x;const{quotasQuery:r,usageQuery:a}=e.useAlertQuotas(),o=((l=r.data)==null?void 0:l.quotas)||[],i=((x=a.data)==null?void 0:x.usage)||[],n=new Map(i.map(u=>[u.tenantId||"org",u]));return t.jsxs("div",{className:"space-y-4 p-4",children:[t.jsxs("div",{className:"flex items-center justify-between",children:[t.jsx("h2",{className:"text-xl font-semibold",children:"Alert Quotas"}),t.jsx(e.Button,{variant:"outline",size:"sm",onClick:()=>{r.refetch(),a.refetch()},children:"Refresh"})]}),r.isLoading||a.isLoading?t.jsx("p",{className:"text-sm text-muted-foreground",children:"Loading quota usage..."}):null,t.jsx("div",{className:"overflow-hidden rounded-lg border",children:t.jsxs("table",{className:"w-full text-sm",children:[t.jsx("thead",{className:"bg-muted/40",children:t.jsxs("tr",{children:[t.jsx("th",{className:"px-3 py-2 text-left font-medium",children:"Tenant"}),t.jsx("th",{className:"px-3 py-2 text-left font-medium",children:"Active Alerts"}),t.jsx("th",{className:"px-3 py-2 text-left font-medium",children:"Max Active"}),t.jsx("th",{className:"px-3 py-2 text-left font-medium",children:"Min Cadence"}),t.jsx("th",{className:"px-3 py-2 text-left font-medium",children:"Max Context Sources"})]})}),t.jsx("tbody",{children:o.map(u=>{const s=u.tenantId||"org",p=n.get(s);return t.jsxs("tr",{className:"border-t",children:[t.jsx("td",{className:"px-3 py-2",children:s}),t.jsx("td",{className:"px-3 py-2",children:(p==null?void 0:p.activeAlerts)??0}),t.jsx("td",{className:"px-3 py-2",children:u.policy.maxActiveAlerts}),t.jsxs("td",{className:"px-3 py-2",children:[u.policy.minCadenceMinutes," min"]}),t.jsx("td",{className:"px-3 py-2",children:u.policy.maxContextSources})]},s)})})]})})]})}exports.AlertCreationDialog=e.AlertCreationDialog;exports.AlertManagementPage=e.AlertManagementPage;exports.AlertsApiError=e.AlertsApiError;exports.CALCULATED_FIELD_ENTITY_MARKER=e.CALCULATED_FIELD_ENTITY_MARKER;exports.CardAlertIndicator=e.CardAlertIndicator;exports.CardSummary=e.CardSummary;exports.DATE_FORMAT_VALUES=e.DATE_FORMAT_VALUES;exports.Dashboard=e.Dashboard;exports.DashboardExportDialog=e.DashboardExportDialog;exports.DashboardWC=e.DashboardWC;exports.ExportError=e.ExportError;exports.PivotMarkerEnum=e.PivotMarkerEnum;exports.ResourceType=e.ResourceType;exports.SemaphorContextProvider=e.SemaphorContextProvider;exports.SemaphorDataProvider=e.SemaphorQueryClient;exports.SemaphorQueryClient=e.SemaphorQueryClient;exports.ShareDialog=e.ShareDialog;exports.SummaryCard=e.SummaryCard;exports.Surfboard=e.DashboardPlus;exports.backtestAlert=e.backtestAlert;exports.cancelExport=e.cancelExport;exports.cloneDeep=e.cloneDeep;exports.createAlert=e.createAlert;exports.createEmptyKpiConfig=e.createEmptyKpiConfig;exports.createExport=e.createExport;exports.createSqlGenConfig=e.createSqlGenConfig;exports.deleteAlert=e.deleteAlert;exports.downloadPdf=e.downloadPdf;exports.emitDashboardLoad=e.emitDashboardLoad;exports.emitDashboardUnload=e.emitDashboardUnload;exports.fmt=e.fmt;exports.formatFileSize=e.formatFileSize;exports.getAlert=e.getAlert;exports.getAlertContextSources=e.getAlertContextSources;exports.getAlertHistory=e.getAlertHistory;exports.getAlertQuotaUsage=e.getAlertQuotaUsage;exports.getAlertRunDeliveries=e.getAlertRunDeliveries;exports.getAlertRunSteps=e.getAlertRunSteps;exports.getAlertRuns=e.getAlertRuns;exports.getAlertState=e.getAlertState;exports.getColumnDataType=e.getColumnDataType;exports.getDownloadUrl=e.getDownloadUrl;exports.getExportStatus=e.getExportStatus;exports.getExports=e.getExports;exports.getFilterValueType=e.getFilterValueType;exports.getFormattedTableNameForQuery=e.getFormattedTableNameForQuery;exports.getQualifiedTableName=e.getQualifiedTableName;exports.getSql=e.getSql;exports.interpretAlertContext=e.interpretAlertContext;exports.invalidateToken=e.invalidateToken;exports.isBooleanDataType=e.isBooleanDataType;exports.isCalculatedDimension=e.isCalculatedDimension;exports.isCalculatedField=e.isCalculatedField;exports.isCalculatedMetric=e.isCalculatedMetric;exports.isColumnInSqlGen=e.isColumnInSqlGen;exports.isDateDataType=e.isDateDataType;exports.isExportComplete=e.isExportComplete;exports.isExportInProgress=e.isExportInProgress;exports.isNumberDataType=e.isNumberDataType;exports.isTextDataType=e.isTextDataType;exports.listAlertQuotas=e.listAlertQuotas;exports.listAlerts=e.listAlerts;exports.previewAlertDeliverable=e.previewAlertDeliverable;exports.resolveDataType=e.resolveDataType;exports.resolveDatamodelName=e.resolveDatamodelName;exports.triggerAlertNow=e.triggerAlertNow;exports.updateAlert=e.updateAlert;exports.updateAlertContextSources=e.updateAlertContextSources;exports.updateAlertQuota=e.updateAlertQuota;exports.useActiveExports=e.useActiveExports;exports.useAlertActions=e.useAlertActions;exports.useAlertBacktest=e.useAlertBacktest;exports.useAlertContextBuilder=e.useAlertContextBuilder;exports.useAlertDeliveries=e.useAlertDeliveries;exports.useAlertDetail=e.useAlertDetail;exports.useAlertDraft=e.useAlertDraft;exports.useAlertFilters=e.useAlertFilters;exports.useAlertHistory=e.useAlertHistory;exports.useAlertQuotas=e.useAlertQuotas;exports.useAlertRuns=e.useAlertRuns;exports.useAlertState=e.useAlertState;exports.useAlertStore=e.useAlertStore;exports.useAlerts=e.useAlerts;exports.useAlertsBootstrap=e.useAlertsBootstrap;exports.useAlertsById=e.useAlertsById;exports.useAlertsForCard=e.useAlertsForCard;exports.useCard=e.useCard;exports.useCardAlertMap=e.useCardAlertMap;exports.useCardSummary=e.useCardSummary;exports.useCurrentActiveCard=e.useCurrentActiveCard;exports.useCurrentCardConfig=e.useCurrentCardConfig;exports.useCurrentSheetActiveCards=e.useCurrentSheetActiveCards;exports.useDashboardActions=e.useDashboardActions;exports.useDashboardById=e.useDashboardById;exports.useDashboardQuery=e.useDashboardQuery;exports.useDashboardStore=e.useDashboardStore;exports.useDashboardSummary=e.useDashboardSummary;exports.useDataColumns=e.useDataColumns;exports.useDateFilterHook=e.useDateFilterHook;exports.useEditorActions=e.useEditorActions;exports.useEditorAside=e.useEditorAside;exports.useEditorStore=e.useEditorStore;exports.useExportActions=e.useExportActions;exports.useExportStore=e.useExportStore;exports.useInProgressExportsCount=e.useInProgressExportsCount;exports.useManagementStore=e.useManagementStore;exports.useResourceManagement=e.useResourceManagement;exports.useSelectedAlertId=e.useSelectedAlertId;exports.useTextFilterHook=e.useTextFilterHook;exports.EMPTY_SELECTION=j.EMPTY_SELECTION;exports.CalendarPreferencesDialog=D.CalendarPreferencesDialog;exports.DashboardSummarySettingsDialog=D.DashboardSummarySettingsDialog;exports.ResourceManagementPanel=v.ResourceManagementPanel;exports.DEFAULT_CALENDAR_CONTEXT=N.DEFAULT_CALENDAR_CONTEXT;exports.AdvancedModeToggle=c.AdvancedModeToggle;exports.ExportNotificationItem=c.ExportNotificationItem;exports.ExportNotificationList=c.ExportNotificationList;exports.NotificationBell=c.NotificationBell;exports.ScheduleDashboard=c.ScheduleDashboard;exports.UnsavedChangesAlert=c.UnsavedChangesAlert;exports.VisualEditingControls=c.VisualEditingControls;exports.useExportPolling=c.useExportPolling;exports.useExportRecovery=c.useExportRecovery;exports.usePristineSnapshotInitializer=c.usePristineSnapshotInitializer;exports.Combobox=I;exports.TenantQuotaPage=w;exports.Visual=M;exports.useExposePrintState=R;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./chunks/index-DSA80lEg.js"),j=require("./chunks/common-types-CfJLrTJd.js"),D=require("./chunks/dashboard-summary-settings-dialog-BoX18wiA.js"),t=require("react/jsx-runtime"),C=require("react"),v=require("./chunks/resource-management-panel-BhiWNPcw.js"),N=require("./types/index.cjs");require("react-dom");const c=require("./chunks/notification-bell-D2V1-ARa.js");function P(r){const a=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(r){for(const o in r)if(o!=="default"){const i=Object.getOwnPropertyDescriptor(r,o);Object.defineProperty(a,o,i.get?i:{enumerable:!0,get:()=>r[o]})}}return a.default=r,Object.freeze(a)}const h=P(C);function M(r){const{displayPreferences:a,...o}=r,i={...o,id:r.dashboardId};return t.jsx(e.ErrorBoundary,{FallbackComponent:e.Fallback,children:t.jsxs(e.SemaphorContextProvider,{dashboardProps:i,children:[t.jsx(e.SemaphorReadyIndicator,{componentType:"visual",componentId:r.cardId}),t.jsx(e.UXProvider,{children:t.jsx(e.DisplayPreferencesProvider,{displayPreferences:a,children:t.jsx(e.Container,{type:"visual",...i,children:t.jsx(_,{cardId:r.cardId})})})})]})})}function _({cardId:r}){const a=e.useDashboardStore(n=>{var l;return(l=n.dashboard)==null?void 0:l.sheets}),{card:o,frame:i}=C.useMemo(()=>{const n=a==null?void 0:a.flatMap(s=>s.frames),l=n==null?void 0:n.flatMap(s=>s==null?void 0:s.cards),x=l==null?void 0:l.find(s=>(s==null?void 0:s.id)===r),u=n==null?void 0:n.find(s=>{var p;return(p=s==null?void 0:s.cards)==null?void 0:p.find(m=>(m==null?void 0:m.id)===r)});return{card:x,frame:u}},[a,r]);return!o||!i?t.jsx(e.FallbackVisual,{error:new Error("Card not found"),resetErrorBoundary:()=>{},customerFacingMessage:`Card not found with ID: ${r}`}):t.jsx("main",{className:"flex h-full grow flex-col",children:t.jsx(e.ErrorBoundary,{FallbackComponent:({error:n,resetErrorBoundary:l})=>t.jsx(e.FallbackVisual,{error:n,resetErrorBoundary:l,customerFacingMessage:"Error creating visual. Please try again."}),children:t.jsx(e.DashboardCard,{card:o,frame:i})})})}function I({name:r,items:a,value:o,onChange:i,isLoading:n,isError:l,refetch:x,className:u,icon:s,showNone:p=!1}){const m=h.useRef(null),[f,y]=h.useState(!1),[E,S]=h.useState("100%"),g=p?[...a||[],{id:"none",name:"None"}]:a;h.useLayoutEffect(()=>{m.current&&S(m.current.offsetWidth)},[]);function b(){var d;return n?"Loading...":l?"Error":o?(d=a==null?void 0:a.find(A=>A.id===o))==null?void 0:d.name:`Select ${r}`}function T(d,A){i(A),y(!1)}return t.jsxs(e.Popover,{open:f,onOpenChange:y,children:[t.jsx(e.PopoverTrigger,{asChild:!0,children:t.jsxs(e.Button,{ref:m,variant:"outline",role:"combobox","aria-expanded":f,className:e.cn("flex h-9 w-full justify-between",u),children:[t.jsxs("div",{className:"flex items-center gap-2",children:[s&&t.jsx("div",{className:"mr-2",children:s}),t.jsx("span",{className:"max-w-[150px] overflow-hidden truncate text-ellipsis whitespace-nowrap",children:b()})]}),t.jsx(e.ChevronDown,{className:"size-4 opacity-50"})]})}),t.jsx(e.PopoverContent,{className:"w-full p-0",style:{minWidth:E},children:t.jsxs(e.Command,{children:[t.jsxs("div",{className:"flex h-9 items-center justify-between border-b pr-1",children:[t.jsx(e.CommandInput,{className:"h-9",placeholder:"Search..."}),t.jsx(e.IconButton,{className:"h-7",onClick:x,children:t.jsx(e.RefreshCw,{className:e.cn("size-3.5 opacity-50",n&&"animate-spin")})})]}),t.jsxs(e.CommandList,{children:[t.jsxs(e.CommandEmpty,{children:["No ",r==null?void 0:r.toLowerCase()," found."]}),t.jsx(e.CommandGroup,{children:g==null?void 0:g.map(d=>t.jsx(e.CommandItem,{className:"overflow-x-auto",value:d.name,onSelect:A=>T(A,d.id),children:t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx(e.Check,{className:e.cn("size-4",o===d.id?"opacity-100":"opacity-0")}),t.jsx("div",{title:d.name,children:d.name})]})},d.id))})]})]})})]})}function R(r,a){C.useEffect(()=>(r&&a&&(window.__SEMAPHOR_PRINT_STATE__={...a}),()=>{r&&window.__SEMAPHOR_PRINT_STATE__&&delete window.__SEMAPHOR_PRINT_STATE__}),[r,a])}function w(){var l,x;const{quotasQuery:r,usageQuery:a}=e.useAlertQuotas(),o=((l=r.data)==null?void 0:l.quotas)||[],i=((x=a.data)==null?void 0:x.usage)||[],n=new Map(i.map(u=>[u.tenantId||"org",u]));return t.jsxs("div",{className:"space-y-4 p-4",children:[t.jsxs("div",{className:"flex items-center justify-between",children:[t.jsx("h2",{className:"text-xl font-semibold",children:"Alert Quotas"}),t.jsx(e.Button,{variant:"outline",size:"sm",onClick:()=>{r.refetch(),a.refetch()},children:"Refresh"})]}),r.isLoading||a.isLoading?t.jsx("p",{className:"text-sm text-muted-foreground",children:"Loading quota usage..."}):null,t.jsx("div",{className:"overflow-hidden rounded-lg border",children:t.jsxs("table",{className:"w-full text-sm",children:[t.jsx("thead",{className:"bg-muted/40",children:t.jsxs("tr",{children:[t.jsx("th",{className:"px-3 py-2 text-left font-medium",children:"Tenant"}),t.jsx("th",{className:"px-3 py-2 text-left font-medium",children:"Active Alerts"}),t.jsx("th",{className:"px-3 py-2 text-left font-medium",children:"Max Active"}),t.jsx("th",{className:"px-3 py-2 text-left font-medium",children:"Min Cadence"}),t.jsx("th",{className:"px-3 py-2 text-left font-medium",children:"Max Context Sources"})]})}),t.jsx("tbody",{children:o.map(u=>{const s=u.tenantId||"org",p=n.get(s);return t.jsxs("tr",{className:"border-t",children:[t.jsx("td",{className:"px-3 py-2",children:s}),t.jsx("td",{className:"px-3 py-2",children:(p==null?void 0:p.activeAlerts)??0}),t.jsx("td",{className:"px-3 py-2",children:u.policy.maxActiveAlerts}),t.jsxs("td",{className:"px-3 py-2",children:[u.policy.minCadenceMinutes," min"]}),t.jsx("td",{className:"px-3 py-2",children:u.policy.maxContextSources})]},s)})})]})})]})}exports.AlertCreationDialog=e.AlertCreationDialog;exports.AlertManagementPage=e.AlertManagementPage;exports.AlertsApiError=e.AlertsApiError;exports.CALCULATED_FIELD_ENTITY_MARKER=e.CALCULATED_FIELD_ENTITY_MARKER;exports.CardAlertIndicator=e.CardAlertIndicator;exports.CardSummary=e.CardSummary;exports.DATE_FORMAT_VALUES=e.DATE_FORMAT_VALUES;exports.Dashboard=e.Dashboard;exports.DashboardExportDialog=e.DashboardExportDialog;exports.DashboardWC=e.DashboardWC;exports.ExportError=e.ExportError;exports.PivotMarkerEnum=e.PivotMarkerEnum;exports.ResourceType=e.ResourceType;exports.SemaphorContextProvider=e.SemaphorContextProvider;exports.SemaphorDataProvider=e.SemaphorQueryClient;exports.SemaphorQueryClient=e.SemaphorQueryClient;exports.ShareDialog=e.ShareDialog;exports.SummaryCard=e.SummaryCard;exports.Surfboard=e.DashboardPlus;exports.backtestAlert=e.backtestAlert;exports.cancelExport=e.cancelExport;exports.cloneDeep=e.cloneDeep;exports.createAlert=e.createAlert;exports.createEmptyKpiConfig=e.createEmptyKpiConfig;exports.createExport=e.createExport;exports.createSqlGenConfig=e.createSqlGenConfig;exports.deleteAlert=e.deleteAlert;exports.downloadPdf=e.downloadPdf;exports.emitDashboardLoad=e.emitDashboardLoad;exports.emitDashboardUnload=e.emitDashboardUnload;exports.fmt=e.fmt;exports.formatFileSize=e.formatFileSize;exports.getAlert=e.getAlert;exports.getAlertContextSources=e.getAlertContextSources;exports.getAlertHistory=e.getAlertHistory;exports.getAlertQuotaUsage=e.getAlertQuotaUsage;exports.getAlertRunDeliveries=e.getAlertRunDeliveries;exports.getAlertRunSteps=e.getAlertRunSteps;exports.getAlertRuns=e.getAlertRuns;exports.getAlertState=e.getAlertState;exports.getColumnDataType=e.getColumnDataType;exports.getDownloadUrl=e.getDownloadUrl;exports.getExportStatus=e.getExportStatus;exports.getExports=e.getExports;exports.getFilterValueType=e.getFilterValueType;exports.getFormattedTableNameForQuery=e.getFormattedTableNameForQuery;exports.getQualifiedTableName=e.getQualifiedTableName;exports.getSql=e.getSql;exports.interpretAlertContext=e.interpretAlertContext;exports.invalidateToken=e.invalidateToken;exports.isBooleanDataType=e.isBooleanDataType;exports.isCalculatedDimension=e.isCalculatedDimension;exports.isCalculatedField=e.isCalculatedField;exports.isCalculatedMetric=e.isCalculatedMetric;exports.isColumnInSqlGen=e.isColumnInSqlGen;exports.isDateDataType=e.isDateDataType;exports.isExportComplete=e.isExportComplete;exports.isExportInProgress=e.isExportInProgress;exports.isNumberDataType=e.isNumberDataType;exports.isTextDataType=e.isTextDataType;exports.listAlertQuotas=e.listAlertQuotas;exports.listAlerts=e.listAlerts;exports.previewAlertDeliverable=e.previewAlertDeliverable;exports.resolveDataType=e.resolveDataType;exports.resolveDatamodelName=e.resolveDatamodelName;exports.triggerAlertNow=e.triggerAlertNow;exports.updateAlert=e.updateAlert;exports.updateAlertContextSources=e.updateAlertContextSources;exports.updateAlertQuota=e.updateAlertQuota;exports.useActiveExports=e.useActiveExports;exports.useAlertActions=e.useAlertActions;exports.useAlertBacktest=e.useAlertBacktest;exports.useAlertContextBuilder=e.useAlertContextBuilder;exports.useAlertDeliveries=e.useAlertDeliveries;exports.useAlertDetail=e.useAlertDetail;exports.useAlertDraft=e.useAlertDraft;exports.useAlertFilters=e.useAlertFilters;exports.useAlertHistory=e.useAlertHistory;exports.useAlertQuotas=e.useAlertQuotas;exports.useAlertRuns=e.useAlertRuns;exports.useAlertState=e.useAlertState;exports.useAlertStore=e.useAlertStore;exports.useAlerts=e.useAlerts;exports.useAlertsBootstrap=e.useAlertsBootstrap;exports.useAlertsById=e.useAlertsById;exports.useAlertsForCard=e.useAlertsForCard;exports.useCard=e.useCard;exports.useCardAlertMap=e.useCardAlertMap;exports.useCardSummary=e.useCardSummary;exports.useCurrentActiveCard=e.useCurrentActiveCard;exports.useCurrentCardConfig=e.useCurrentCardConfig;exports.useCurrentSheetActiveCards=e.useCurrentSheetActiveCards;exports.useDashboardActions=e.useDashboardActions;exports.useDashboardById=e.useDashboardById;exports.useDashboardQuery=e.useDashboardQuery;exports.useDashboardStore=e.useDashboardStore;exports.useDashboardSummary=e.useDashboardSummary;exports.useDataColumns=e.useDataColumns;exports.useDateFilterHook=e.useDateFilterHook;exports.useEditorActions=e.useEditorActions;exports.useEditorAside=e.useEditorAside;exports.useEditorStore=e.useEditorStore;exports.useExportActions=e.useExportActions;exports.useExportStore=e.useExportStore;exports.useInProgressExportsCount=e.useInProgressExportsCount;exports.useManagementStore=e.useManagementStore;exports.useResourceManagement=e.useResourceManagement;exports.useSelectedAlertId=e.useSelectedAlertId;exports.useTextFilterHook=e.useTextFilterHook;exports.EMPTY_SELECTION=j.EMPTY_SELECTION;exports.CalendarPreferencesDialog=D.CalendarPreferencesDialog;exports.DashboardSummarySettingsDialog=D.DashboardSummarySettingsDialog;exports.ResourceManagementPanel=v.ResourceManagementPanel;exports.DEFAULT_CALENDAR_CONTEXT=N.DEFAULT_CALENDAR_CONTEXT;exports.AdvancedModeToggle=c.AdvancedModeToggle;exports.ExportNotificationItem=c.ExportNotificationItem;exports.ExportNotificationList=c.ExportNotificationList;exports.NotificationBell=c.NotificationBell;exports.ScheduleDashboard=c.ScheduleDashboard;exports.UnsavedChangesAlert=c.UnsavedChangesAlert;exports.VisualEditingControls=c.VisualEditingControls;exports.useExportPolling=c.useExportPolling;exports.useExportRecovery=c.useExportRecovery;exports.usePristineSnapshotInitializer=c.usePristineSnapshotInitializer;exports.Combobox=I;exports.TenantQuotaPage=w;exports.Visual=M;exports.useExposePrintState=R;
package/dist/index.js CHANGED
@@ -1,14 +1,14 @@
1
- import { T as y, U as T, V as P, W as _, Y as w, Z as M, _ as I, u as R, $ as g, a0 as F, P as L, s as k, B as E, a1 as B, c as A, t as Q, v as U, w as V, a2 as q, a3 as z, x as H, y as O, z as j, A as W, E as G, a4 as K } from "./chunks/index-CBcPi9pm.js";
2
- import { a5 as ie, a6 as de, a7 as ce, a8 as ue, a9 as me, aa as pe, ab as he, D as be, ac as fe, ad as Ae, ae as xe, af as Ce, ag as ge, ah as ye, ah as Ee, ai as Ne, aj as De, a as ve, ak as Se, al as Te, am as Pe, an as _e, ao as we, ap as Me, aq as Ie, ar as Re, as as Fe, at as Le, au as ke, av as Be, aw as Qe, ax as Ue, ay as Ve, az as qe, aA as ze, aB as He, aC as Oe, aD as je, aE as We, aF as Ge, aG as Ke, aH as Ye, aI as $e, aJ as Xe, aK as Ze, aL as Je, aM as ea, aN as aa, aO as sa, aP as ta, aQ as ra, aR as oa, aS as na, aT as la, aU as ia, aV as da, aW as ca, aX as ua, aY as ma, aZ as pa, a_ as ha, a$ as ba, b0 as fa, b1 as Aa, b2 as xa, b3 as Ca, b4 as ga, b5 as ya, b6 as Ea, b7 as Na, b8 as Da, b9 as va, ba as Sa, bb as Ta, bc as Pa, bd as _a, be as wa, bf as Ma, bg as Ia, bh as Ra, bi as Fa, bj as La, bk as ka, bl as Ba, bm as Qa, bn as Ua, bo as Va, bp as qa, bq as za, br as Ha, bs as Oa, bt as ja, bu as Wa, bv as Ga, bw as Ka, bx as Ya, by as $a, bz as Xa, bA as Za, bB as Ja, bC as es, bD as as, bE as ss, bF as ts, bG as rs, bH as os } from "./chunks/index-CBcPi9pm.js";
1
+ import { T as y, U as T, V as P, W as _, Y as w, Z as M, _ as I, u as R, $ as g, a0 as F, P as L, s as k, B as E, a1 as B, c as A, t as Q, v as U, w as V, a2 as q, a3 as z, x as H, y as O, z as j, A as W, E as G, a4 as K } from "./chunks/index-D0TdW88i.js";
2
+ import { a5 as ie, a6 as de, a7 as ce, a8 as ue, a9 as me, aa as pe, ab as he, D as be, ac as fe, ad as Ae, ae as xe, af as Ce, ag as ge, ah as ye, ah as Ee, ai as Ne, aj as De, a as ve, ak as Se, al as Te, am as Pe, an as _e, ao as we, ap as Me, aq as Ie, ar as Re, as as Fe, at as Le, au as ke, av as Be, aw as Qe, ax as Ue, ay as Ve, az as qe, aA as ze, aB as He, aC as Oe, aD as je, aE as We, aF as Ge, aG as Ke, aH as Ye, aI as $e, aJ as Xe, aK as Ze, aL as Je, aM as ea, aN as aa, aO as sa, aP as ta, aQ as ra, aR as oa, aS as na, aT as la, aU as ia, aV as da, aW as ca, aX as ua, aY as ma, aZ as pa, a_ as ha, a$ as ba, b0 as fa, b1 as Aa, b2 as xa, b3 as Ca, b4 as ga, b5 as ya, b6 as Ea, b7 as Na, b8 as Da, b9 as va, ba as Sa, bb as Ta, bc as Pa, bd as _a, be as wa, bf as Ma, bg as Ia, bh as Ra, bi as Fa, bj as La, bk as ka, bl as Ba, bm as Qa, bn as Ua, bo as Va, bp as qa, bq as za, br as Ha, bs as Oa, bt as ja, bu as Wa, bv as Ga, bw as Ka, bx as Ya, by as $a, bz as Xa, bA as Za, bB as Ja, bC as es, bD as as, bE as ss, bF as ts, bG as rs, bH as os } from "./chunks/index-D0TdW88i.js";
3
3
  import { E as ls } from "./chunks/common-types-DhqlRVrq.js";
4
- import { C as ds, D as cs } from "./chunks/dashboard-summary-settings-dialog-DmccX33N.js";
4
+ import { C as ds, D as cs } from "./chunks/dashboard-summary-settings-dialog-CO1SwHHD.js";
5
5
  import { jsx as e, jsxs as o } from "react/jsx-runtime";
6
6
  import * as b from "react";
7
7
  import { useMemo as Y, useEffect as $ } from "react";
8
- import { ResourceManagementPanel as ms } from "./chunks/resource-management-panel-D_mSi7Cm.js";
8
+ import { ResourceManagementPanel as ms } from "./chunks/resource-management-panel-DS_WEv1x.js";
9
9
  import { DEFAULT_CALENDAR_CONTEXT as hs } from "./types/index.js";
10
10
  import "react-dom";
11
- import { A as fs, E as As, a as xs, N as Cs, S as gs, U as ys, V as Es, u as Ns, b as Ds, c as vs } from "./chunks/notification-bell-B-OVf20Q.js";
11
+ import { A as fs, E as As, a as xs, N as Cs, S as gs, U as ys, V as Es, u as Ns, b as Ds, c as vs } from "./chunks/notification-bell-DFiRaeJQ.js";
12
12
  function se(a) {
13
13
  const { displayPreferences: s, ...i } = a, c = {
14
14
  ...i,
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("../chunks/index-DQOwJyRp.js"),a=require("../chunks/common-types-CfJLrTJd.js"),e=require("../chunks/dashboard-summary-settings-dialog-tJueBNph.js");exports.Surfboard=r.DashboardPlus;exports.EMPTY_SELECTION=a.EMPTY_SELECTION;exports.CalendarPreferencesDialog=e.CalendarPreferencesDialog;exports.DashboardSummarySettingsDialog=e.DashboardSummarySettingsDialog;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("../chunks/index-DSA80lEg.js"),a=require("../chunks/common-types-CfJLrTJd.js"),e=require("../chunks/dashboard-summary-settings-dialog-BoX18wiA.js");exports.Surfboard=r.DashboardPlus;exports.EMPTY_SELECTION=a.EMPTY_SELECTION;exports.CalendarPreferencesDialog=e.CalendarPreferencesDialog;exports.DashboardSummarySettingsDialog=e.DashboardSummarySettingsDialog;
@@ -1,6 +1,6 @@
1
- import { a as o } from "../chunks/index-CBcPi9pm.js";
1
+ import { a as o } from "../chunks/index-D0TdW88i.js";
2
2
  import { E as s } from "../chunks/common-types-DhqlRVrq.js";
3
- import { C as m, D as t } from "../chunks/dashboard-summary-settings-dialog-DmccX33N.js";
3
+ import { C as m, D as t } from "../chunks/dashboard-summary-settings-dialog-CO1SwHHD.js";
4
4
  export {
5
5
  m as CalendarPreferencesDialog,
6
6
  t as DashboardSummarySettingsDialog,
@@ -187,7 +187,7 @@ declare interface CardInteractionConfig {
187
187
  * V2: Unified interactions array.
188
188
  * Each interaction includes a trigger that specifies what element must be clicked.
189
189
  */
190
- interactions?: Interaction[];
190
+ interactions?: PersistedInteraction[];
191
191
  allowedDrillTargets?: Field[];
192
192
  drillHierarchies?: DrillHierarchy[];
193
193
  }
@@ -879,6 +879,11 @@ declare interface InlineDrillInteraction {
879
879
  */
880
880
  declare type Interaction = ClickFilterInteraction | DrillDownInteraction | DrillThroughInteraction | DrillToDetailInteraction | DrillToURLInteraction | InlineDrillInteraction | DrillUpInteraction | DynamicDrillInteraction;
881
881
 
882
+ declare interface InteractionTargetOverride {
883
+ applyToCardIds?: string[] | null;
884
+ excludeCardIds?: string[] | null;
885
+ }
886
+
882
887
  /**
883
888
  * Defines what element must be clicked to trigger an interaction.
884
889
  *
@@ -1053,6 +1058,10 @@ declare type Params = {
1053
1058
  [key: string]: string | number | string[] | number[];
1054
1059
  };
1055
1060
 
1061
+ declare type PersistedInteraction = Interaction & {
1062
+ id?: string;
1063
+ };
1064
+
1056
1065
  declare interface PivotByField extends Field {
1057
1066
  role: 'pivotby';
1058
1067
  }
@@ -1333,6 +1342,8 @@ export declare type TCard = {
1333
1342
  dataSource?: DataSource;
1334
1343
  config?: CardConfig;
1335
1344
  interactionConfig?: CardInteractionConfig;
1345
+ linkedSourceCardId?: string;
1346
+ linkedInteractionTargetOverrides?: Record<string, InteractionTargetOverride>;
1336
1347
  paginationConfig?: PaginationConfig;
1337
1348
  queryConfig?: QueryConfig;
1338
1349
  customCfg?: any;
@@ -822,7 +822,7 @@ export declare interface CardInteractionConfig {
822
822
  * V2: Unified interactions array.
823
823
  * Each interaction includes a trigger that specifies what element must be clicked.
824
824
  */
825
- interactions?: Interaction[];
825
+ interactions?: PersistedInteraction[];
826
826
  allowedDrillTargets?: Field[];
827
827
  drillHierarchies?: DrillHierarchy[];
828
828
  }
@@ -2340,6 +2340,11 @@ export declare interface InteractionState {
2340
2340
  targetDashboardId?: string;
2341
2341
  }
2342
2342
 
2343
+ export declare interface InteractionTargetOverride {
2344
+ applyToCardIds?: string[] | null;
2345
+ excludeCardIds?: string[] | null;
2346
+ }
2347
+
2343
2348
  /**
2344
2349
  * Defines what element must be clicked to trigger an interaction.
2345
2350
  *
@@ -2642,6 +2647,10 @@ declare type Params = {
2642
2647
  [key: string]: string | number | string[] | number[];
2643
2648
  };
2644
2649
 
2650
+ export declare type PersistedInteraction = Interaction & {
2651
+ id?: string;
2652
+ };
2653
+
2645
2654
  export declare interface PivotByField extends Field {
2646
2655
  role: 'pivotby';
2647
2656
  }
@@ -3184,6 +3193,8 @@ export declare type TCard = {
3184
3193
  dataSource?: DataSource;
3185
3194
  config?: CardConfig;
3186
3195
  interactionConfig?: CardInteractionConfig;
3196
+ linkedSourceCardId?: string;
3197
+ linkedInteractionTargetOverrides?: Record<string, InteractionTargetOverride>;
3187
3198
  paginationConfig?: PaginationConfig;
3188
3199
  queryConfig?: QueryConfig;
3189
3200
  customCfg?: any;
@@ -4024,6 +4035,7 @@ declare interface UpdateResourceRequest {
4024
4035
  title?: string;
4025
4036
  description?: string;
4026
4037
  isPrivate?: boolean;
4038
+ expectedLastModified?: string;
4027
4039
  }
4028
4040
 
4029
4041
  export declare interface UpdateUserPreferenceRequest {
@@ -194,7 +194,7 @@ declare interface CardInteractionConfig {
194
194
  * V2: Unified interactions array.
195
195
  * Each interaction includes a trigger that specifies what element must be clicked.
196
196
  */
197
- interactions?: Interaction[];
197
+ interactions?: PersistedInteraction[];
198
198
  allowedDrillTargets?: Field[];
199
199
  drillHierarchies?: DrillHierarchy[];
200
200
  }
@@ -899,6 +899,11 @@ declare interface InlineDrillInteraction {
899
899
  */
900
900
  declare type Interaction = ClickFilterInteraction | DrillDownInteraction | DrillThroughInteraction | DrillToDetailInteraction | DrillToURLInteraction | InlineDrillInteraction | DrillUpInteraction | DynamicDrillInteraction;
901
901
 
902
+ declare interface InteractionTargetOverride {
903
+ applyToCardIds?: string[] | null;
904
+ excludeCardIds?: string[] | null;
905
+ }
906
+
902
907
  /**
903
908
  * Defines what element must be clicked to trigger an interaction.
904
909
  *
@@ -1073,6 +1078,10 @@ declare type Params = {
1073
1078
  [key: string]: string | number | string[] | number[];
1074
1079
  };
1075
1080
 
1081
+ declare type PersistedInteraction = Interaction & {
1082
+ id?: string;
1083
+ };
1084
+
1076
1085
  declare interface PivotByField extends Field {
1077
1086
  role: 'pivotby';
1078
1087
  }
@@ -1355,6 +1364,8 @@ export declare type TCard = {
1355
1364
  dataSource?: DataSource;
1356
1365
  config?: CardConfig;
1357
1366
  interactionConfig?: CardInteractionConfig;
1367
+ linkedSourceCardId?: string;
1368
+ linkedInteractionTargetOverrides?: Record<string, InteractionTargetOverride>;
1358
1369
  paginationConfig?: PaginationConfig;
1359
1370
  queryConfig?: QueryConfig;
1360
1371
  customCfg?: any;
@@ -393,7 +393,7 @@ declare interface CardInteractionConfig {
393
393
  * V2: Unified interactions array.
394
394
  * Each interaction includes a trigger that specifies what element must be clicked.
395
395
  */
396
- interactions?: Interaction[];
396
+ interactions?: PersistedInteraction[];
397
397
  allowedDrillTargets?: Field[];
398
398
  drillHierarchies?: DrillHierarchy[];
399
399
  }
@@ -1114,6 +1114,11 @@ declare interface InlineDrillInteraction {
1114
1114
  */
1115
1115
  declare type Interaction = ClickFilterInteraction | DrillDownInteraction | DrillThroughInteraction | DrillToDetailInteraction | DrillToURLInteraction | InlineDrillInteraction | DrillUpInteraction | DynamicDrillInteraction;
1116
1116
 
1117
+ declare interface InteractionTargetOverride {
1118
+ applyToCardIds?: string[] | null;
1119
+ excludeCardIds?: string[] | null;
1120
+ }
1121
+
1117
1122
  /**
1118
1123
  * Defines what element must be clicked to trigger an interaction.
1119
1124
  *
@@ -1288,6 +1293,10 @@ declare type Params = {
1288
1293
  [key: string]: string | number | string[] | number[];
1289
1294
  };
1290
1295
 
1296
+ declare type PersistedInteraction = Interaction & {
1297
+ id?: string;
1298
+ };
1299
+
1291
1300
  declare interface PivotByField extends Field {
1292
1301
  role: 'pivotby';
1293
1302
  }
@@ -1584,6 +1593,8 @@ export declare type TCard = {
1584
1593
  dataSource?: DataSource;
1585
1594
  config?: CardConfig;
1586
1595
  interactionConfig?: CardInteractionConfig;
1596
+ linkedSourceCardId?: string;
1597
+ linkedInteractionTargetOverrides?: Record<string, InteractionTargetOverride>;
1587
1598
  paginationConfig?: PaginationConfig;
1588
1599
  queryConfig?: QueryConfig;
1589
1600
  customCfg?: any;
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "email": "support@semaphor.cloud"
6
6
  },
7
7
  "license": "MIT",
8
- "version": "0.1.208",
8
+ "version": "0.1.209",
9
9
  "description": "Fully interactive and customizable dashboards for your apps.",
10
10
  "keywords": [
11
11
  "react",