@burdenoff/fe-libs 2026.1023.8 → 2026.1023.10

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.
@@ -51,6 +51,27 @@ export declare function shouldDropAnalyticsKey(key: string, eventName: Burdenoff
51
51
  * event bus emissions as Rybbit custom events.
52
52
  */
53
53
  export declare function RybbitSink({ siteId, scriptUrl, rename, allowlist, identifyOn, skipRoutes, pathname, }: RybbitSinkProps): null;
54
+ /**
55
+ * BOFF-8246: while the consent banner is shown it publishes the space it takes from the bottom of
56
+ * the viewport (its height plus its 16px bottom offset and an 8px gap) as this CSS custom property
57
+ * on `<html>`; it is removed when the banner goes away. Bottom-anchored UI that must stay usable
58
+ * (an assistant launcher, a bottom sheet with a composer) should MOVE its bottom anchor up by it,
59
+ * e.g. `bottom: max(<usual anchor>, var(--bf-consent-banner-offset, 0px))`, and cap any fixed
60
+ * height to the space left, rather than pad inside: padding a fixed-height sheet can clip its
61
+ * composer on short viewports. Scope it to the widths where the banner can overlap the element
62
+ * (the banner is bottom-left, at most 24rem wide). At 390px the banner spans the viewport.
63
+ */
64
+ export declare const CONSENT_BANNER_OFFSET_VAR = "--bf-consent-banner-offset";
65
+ type ResizeObserverConstructor = new (callback: () => void) => {
66
+ observe: (target: Element) => void;
67
+ disconnect: () => void;
68
+ };
69
+ /**
70
+ * Publishes `banner`'s bottom space on `root` and keeps it current. Returns the cleanup. With more
71
+ * than one banner shown the largest space is published, and the property is removed only when
72
+ * the last one goes.
73
+ */
74
+ export declare function publishConsentBannerOffset(banner: Element, root: HTMLElement, ResizeObserverImpl?: ResizeObserverConstructor | undefined): () => void;
54
75
  /**
55
76
  * The optional-analytics prompt.
56
77
  *
@@ -152,34 +152,59 @@ function k({ siteId: e, scriptUrl: o = "https://app.rybbit.io/api/script.js", re
152
152
  d
153
153
  ]), null;
154
154
  }
155
- function A({ productName: t }) {
156
- let [n, r] = a(() => b() === null), i = e();
157
- return !n || y() ? null : /* @__PURE__ */ s("aside", {
155
+ var A = "--bf-consent-banner-offset", j = 24, M = /* @__PURE__ */ new WeakMap();
156
+ function N(e, t) {
157
+ if (t.size === 0) {
158
+ e.style.removeProperty(A);
159
+ return;
160
+ }
161
+ e.style.setProperty(A, `${Math.max(...t.values())}px`);
162
+ }
163
+ function P(e, t, n = typeof ResizeObserver > "u" ? void 0 : ResizeObserver) {
164
+ let r = M.get(t);
165
+ r || (r = /* @__PURE__ */ new Map(), M.set(t, r));
166
+ let i = r, a = () => {
167
+ let n = Math.ceil(e.getBoundingClientRect().height);
168
+ i.set(e, n + j), N(t, i);
169
+ };
170
+ a();
171
+ let o = n ? new n(a) : null;
172
+ return o?.observe(e), () => {
173
+ o?.disconnect(), i.delete(e), N(t, i);
174
+ };
175
+ }
176
+ function F({ productName: t }) {
177
+ let [n, c] = a(() => b() === null), l = e(), u = n && !y(), d = i(null);
178
+ return r(() => {
179
+ let e = d.current;
180
+ if (!(!u || !e)) return P(e, document.documentElement);
181
+ }, [u]), u ? /* @__PURE__ */ s("aside", {
182
+ ref: d,
158
183
  className: "fixed bottom-4 left-4 z-[100] w-[calc(100%-2rem)] max-w-sm rounded-xl border border-border-seam bg-bg-surface p-4 text-text-primary shadow-pop",
159
- "aria-label": i("privacyConsent.ariaLabel", "Privacy choices"),
184
+ "aria-label": l("privacyConsent.ariaLabel", "Privacy choices"),
160
185
  "data-testid": "analytics-consent-banner",
161
186
  children: [/* @__PURE__ */ o("p", {
162
187
  className: "text-sm",
163
- children: i("privacyConsent.message", "Allow optional analytics to help improve {{productName}}? Essential product operation works either way.", { productName: t ?? i("privacyConsent.productFallback", "this product") })
188
+ children: l("privacyConsent.message", "Allow optional analytics to help improve {{productName}}? Essential product operation works either way.", { productName: t ?? l("privacyConsent.productFallback", "this product") })
164
189
  }), /* @__PURE__ */ s("div", {
165
190
  className: "mt-3 flex gap-2",
166
191
  children: [/* @__PURE__ */ o("button", {
167
192
  type: "button",
168
193
  className: "rounded-md border border-border-seam px-3 py-2 text-sm",
169
194
  onClick: () => {
170
- S(!1), r(!1);
195
+ S(!1), c(!1);
171
196
  },
172
- children: i("privacyConsent.reject", "Reject optional")
197
+ children: l("privacyConsent.reject", "Reject optional")
173
198
  }), /* @__PURE__ */ o("button", {
174
199
  type: "button",
175
200
  className: "rounded-md bg-action-primary-bg px-3 py-2 text-sm text-action-primary-text",
176
201
  onClick: () => {
177
- S(!0), r(!1);
202
+ S(!0), c(!1);
178
203
  },
179
- children: i("privacyConsent.allow", "Allow analytics")
204
+ children: l("privacyConsent.allow", "Allow analytics")
180
205
  })]
181
206
  })]
182
- });
207
+ }) : null;
183
208
  }
184
209
  //#endregion
185
- export { A as AnalyticsConsentBanner, c as DEFAULT_RYBBIT_ALLOWLIST, k as RybbitSink, x as readAnalyticsConsent, b as readAnalyticsConsentChoice, S as setAnalyticsConsent };
210
+ export { F as AnalyticsConsentBanner, A as CONSENT_BANNER_OFFSET_VAR, c as DEFAULT_RYBBIT_ALLOWLIST, k as RybbitSink, P as publishConsentBannerOffset, x as readAnalyticsConsent, b as readAnalyticsConsentChoice, S as setAnalyticsConsent };
@@ -1,7 +1,7 @@
1
1
  export { DevtoolsSink } from './DevtoolsSink';
2
2
  export { BroadcastChannelSink } from './BroadcastChannelSink';
3
3
  export { BackendAuditSink } from './BackendAuditSink';
4
- export { RybbitSink, AnalyticsConsentBanner, readAnalyticsConsent, readAnalyticsConsentChoice, setAnalyticsConsent, } from './RybbitSink';
4
+ export { RybbitSink, AnalyticsConsentBanner, CONSENT_BANNER_OFFSET_VAR, publishConsentBannerOffset, readAnalyticsConsent, readAnalyticsConsentChoice, setAnalyticsConsent, } from './RybbitSink';
5
5
  export type { AnalyticsConsentChoice } from './RybbitSink';
6
6
  export { compileRybbitRoutePattern, isRybbitSkippedRoute } from './rybbitRoutes';
7
7
  export { OtelBrowserSink } from './OtelBrowserSink';
@@ -95,6 +95,22 @@ export interface ActiveContextBootstrapFields {
95
95
  * around it needs a DOM.
96
96
  */
97
97
  export declare function applyAuthStoreContextFallback(resolved: ActiveContextBootstrapFields, authStore: AuthStoreContextSnapshot): ActiveContextBootstrapFields;
98
+ /**
99
+ * Pair the URL's context with the tab's saved one, axis by axis, without ever
100
+ * mixing two contexts.
101
+ *
102
+ * A URL value always wins. A saved child axis is used only while every parent
103
+ * axis is still the saved one: once the URL names another organization, the
104
+ * saved workspace and project belong to the old one, and once it names another
105
+ * workspace, the saved project does. A deep link such as
106
+ * `/workflows/runs?org=<o>&workspace=<other>` used to keep the previous
107
+ * workspace's saved project, so the shell asked for a workspace token for a
108
+ * project outside the workspace, never got one, and the module waited for it
109
+ * for ever (and wrote the stale `project=` back into the URL).
110
+ *
111
+ * Exported so this can be unit-tested directly: it is pure.
112
+ */
113
+ export declare function mergeUrlWithSavedContext(fromUrl: ActiveContextBootstrapFields, readSaved: (field: 'organization' | 'workspace' | 'project') => string | null): ActiveContextBootstrapFields;
98
114
  /**
99
115
  * Resolve the organization / workspace / project the provider should start
100
116
  * from: URL (when synced) > ActiveContext's own storage > persisted auth store.
@@ -42,40 +42,44 @@ function D(e, t) {
42
42
  projectId: e.projectId ?? (a ? t.projectId : null)
43
43
  };
44
44
  }
45
- function O(e, t, n, r) {
46
- if (n) {
47
- let e = s(t);
48
- if (e) return e;
49
- }
50
- return c(e, r) || null;
45
+ function O(e, t) {
46
+ let n = /* @__PURE__ */ new Map(), r = (e) => (n.has(e) || n.set(e, t(e)), n.get(e) ?? null), i = e.organizationId ?? r("organization"), a = () => i === r("organization"), o = e.workspaceId ?? (a() ? r("workspace") : null);
47
+ return {
48
+ organizationId: i,
49
+ workspaceId: o,
50
+ projectId: e.projectId ?? (a() && o === r("workspace") ? r("project") : null)
51
+ };
52
+ }
53
+ function k(e, t) {
54
+ return t && s(e) || null;
51
55
  }
52
- function k(t) {
56
+ function A(t) {
53
57
  if (typeof window > "u") return {
54
58
  organizationId: null,
55
59
  workspaceId: null,
56
60
  projectId: null
57
61
  };
58
- let { storageKey: n, syncToUrl: r, urlParams: i } = t, o = {
59
- organizationId: O("organization", i.organization ?? a.organization, r, n),
60
- workspaceId: O("workspace", i.workspace ?? a.workspace, r, n),
61
- projectId: O("project", i.project ?? a.project, r, n)
62
- }, c = r && s(i.project ?? a.project), u = (t) => {
63
- if (c) try {
62
+ let { storageKey: n, syncToUrl: r, urlParams: i } = t, o = O({
63
+ organizationId: k(i.organization ?? a.organization, r),
64
+ workspaceId: k(i.workspace ?? a.workspace, r),
65
+ projectId: k(i.project ?? a.project, r)
66
+ }, (e) => c(e, n) || null), u = r && s(i.project ?? a.project), d = (t) => {
67
+ if (u) try {
64
68
  e() && f(t);
65
69
  } catch {}
66
70
  };
67
- if (u(o), !c && p(o)) return {
71
+ if (d(o), !u && p(o)) return {
68
72
  ...o,
69
73
  projectId: null
70
74
  };
71
75
  if (o.organizationId !== null && o.workspaceId !== null && o.projectId !== null) return o;
72
- let d = D(o, l());
73
- return u(d), !c && p(d) ? {
74
- ...d,
76
+ let m = D(o, l());
77
+ return d(m), !u && p(m) ? {
78
+ ...m,
75
79
  projectId: null
76
- } : d;
80
+ } : m;
77
81
  }
78
- function A(e) {
82
+ function j(e) {
79
83
  if (typeof window > "u" || m() || window.location.pathname.startsWith("/auth/")) return;
80
84
  let t = new URL(window.location.href);
81
85
  Object.entries(e).forEach(([e, n]) => {
@@ -84,20 +88,20 @@ function A(e) {
84
88
  let n = window.history.state ?? null;
85
89
  window.history.replaceState(n, "", t.toString());
86
90
  }
87
- function j(e, t) {
91
+ function M(e, t) {
88
92
  return e === null || e === "" || e === t ? { apply: !1 } : {
89
93
  apply: !0,
90
94
  value: e
91
95
  };
92
96
  }
93
- function M({ children: e, defaultOrganizationId: l = null, defaultWorkspaceId: m = null, defaultProjectId: h = null, defaultTenantId: g = null, storageKey: T = i, syncToUrl: D = !1, urlParams: O = a }) {
94
- let [M] = x(() => k({
97
+ function N({ children: e, defaultOrganizationId: l = null, defaultWorkspaceId: m = null, defaultProjectId: h = null, defaultTenantId: g = null, storageKey: T = i, syncToUrl: D = !1, urlParams: O = a }) {
98
+ let [k] = x(() => A({
95
99
  storageKey: T,
96
100
  syncToUrl: D,
97
101
  urlParams: O
98
- })), [N, P] = x(() => typeof window > "u" ? l : M.organizationId ?? l), [F, I] = x(() => {
102
+ })), [N, P] = x(() => typeof window > "u" ? l : k.organizationId ?? l), [F, I] = x(() => {
99
103
  if (typeof window > "u") return m;
100
- let e = M.workspaceId ?? m;
104
+ let e = k.workspaceId ?? m;
101
105
  if (e) {
102
106
  let i = n();
103
107
  if (i) {
@@ -109,13 +113,14 @@ function M({ children: e, defaultOrganizationId: l = null, defaultWorkspaceId: m
109
113
  }
110
114
  }
111
115
  return e;
112
- }), [L, R] = x(() => typeof window > "u" ? h : p(M) && !M.projectId ? null : M.projectId ?? h), [z, B] = x(() => {
116
+ }), [L, R] = x(() => typeof window > "u" ? h : p(k) && !k.projectId ? null : k.projectId ?? h), [z, B] = x(() => {
113
117
  if (typeof window > "u") return g;
114
118
  if (D) {
115
119
  let e = s(O.tenant);
116
120
  if (e) return e;
117
121
  }
118
- return c("tenant", T) || g;
122
+ let e = c("organization", T) || null;
123
+ return e !== null && k.organizationId !== null && k.organizationId !== e ? g : c("tenant", T) || g;
119
124
  }), V = b(null);
120
125
  V.current === null && (V.current = w(N));
121
126
  let H = b(null);
@@ -148,7 +153,7 @@ function M({ children: e, defaultOrganizationId: l = null, defaultWorkspaceId: m
148
153
  L,
149
154
  z
150
155
  ]), v(() => {
151
- D && A({
156
+ D && j({
152
157
  [O.organization]: N,
153
158
  [O.workspace]: F,
154
159
  [O.project]: L,
@@ -164,13 +169,13 @@ function M({ children: e, defaultOrganizationId: l = null, defaultWorkspaceId: m
164
169
  ]), v(() => {
165
170
  if (!D) return;
166
171
  let e = () => {
167
- let e = s(O.organization), t = s(O.workspace), n = s(O.project), r = s(O.tenant), i = j(e, N);
172
+ let e = s(O.organization), t = s(O.workspace), n = s(O.project), r = s(O.tenant), i = M(e, N);
168
173
  i.apply && (P(i.value), V.current.previous = V.current.current, V.current.current = i.value);
169
- let a = j(t, F);
174
+ let a = M(t, F);
170
175
  a.apply && (I(a.value), H.current.previous = H.current.current, H.current.current = a.value);
171
- let o = j(n, L);
176
+ let o = M(n, L);
172
177
  o.apply && (R(o.value), U.current.previous = U.current.current, U.current.current = o.value);
173
- let c = j(r, z);
178
+ let c = M(r, z);
174
179
  c.apply && (B(c.value), W.current.previous = W.current.current, W.current.current = c.value);
175
180
  };
176
181
  return window.addEventListener("popstate", e), () => window.removeEventListener("popstate", e);
@@ -183,7 +188,7 @@ function M({ children: e, defaultOrganizationId: l = null, defaultWorkspaceId: m
183
188
  z
184
189
  ]);
185
190
  let G = _((e, t) => {
186
- D && A({ [O[e] ?? a[e]]: t });
191
+ D && j({ [O[e] ?? a[e]]: t });
187
192
  }, [D, O]), K = _((e) => {
188
193
  if (!E("organizationId", V.current, e, Date.now())) return;
189
194
  P(e), d("organization", e, T), G("organization", e);
@@ -259,10 +264,10 @@ function M({ children: e, defaultOrganizationId: l = null, defaultWorkspaceId: m
259
264
  children: e
260
265
  });
261
266
  }
262
- function N() {
267
+ function P() {
263
268
  let e = g(C);
264
269
  if (!e) throw Error("useActiveContext must be used within an ActiveContextProvider");
265
270
  return e;
266
271
  }
267
272
  //#endregion
268
- export { M as ActiveContextProvider, N as useActiveContext };
273
+ export { N as ActiveContextProvider, P as useActiveContext };
@@ -4,13 +4,13 @@ import { DevtoolsSink as n } from "./shared/events/sinks/DevtoolsSink.js";
4
4
  import { BroadcastChannelSink as r } from "./shared/events/sinks/BroadcastChannelSink.js";
5
5
  import { BackendAuditSink as i } from "./shared/events/sinks/BackendAuditSink.js";
6
6
  import { compileRybbitRoutePattern as a, isRybbitSkippedRoute as o } from "./shared/events/sinks/rybbitRoutes.js";
7
- import { AnalyticsConsentBanner as s, RybbitSink as c, readAnalyticsConsent as l, readAnalyticsConsentChoice as u, setAnalyticsConsent as d } from "./shared/events/sinks/RybbitSink.js";
8
- import { OtelBrowserSink as f } from "./shared/events/sinks/OtelBrowserSink.js";
7
+ import { AnalyticsConsentBanner as s, CONSENT_BANNER_OFFSET_VAR as c, RybbitSink as l, publishConsentBannerOffset as u, readAnalyticsConsent as d, readAnalyticsConsentChoice as f, setAnalyticsConsent as p } from "./shared/events/sinks/RybbitSink.js";
8
+ import { OtelBrowserSink as m } from "./shared/events/sinks/OtelBrowserSink.js";
9
9
  import "./shared/events/sinks/index.js";
10
- import { createContext as p, use as m, useCallback as h, useEffect as g, useMemo as _ } from "react";
11
- import { jsx as v } from "react/jsx-runtime";
10
+ import { createContext as h, use as g, useCallback as _, useEffect as v, useMemo as y } from "react";
11
+ import { jsx as b } from "react/jsx-runtime";
12
12
  //#region src/shared/events/index.tsx
13
- var y = p({
13
+ var x = h({
14
14
  emit: () => {},
15
15
  emitCustom: () => {},
16
16
  on: () => () => {},
@@ -18,22 +18,22 @@ var y = p({
18
18
  getBuffer: () => [],
19
19
  onAny: () => () => {}
20
20
  });
21
- function b(e, t) {
22
- if (!e) return x();
21
+ function S(e, t) {
22
+ if (!e) return C();
23
23
  let n = e.getItem(t);
24
24
  if (n) return n;
25
- let r = x();
25
+ let r = C();
26
26
  return e.setItem(t, r), r;
27
27
  }
28
- function x() {
28
+ function C() {
29
29
  return typeof crypto < "u" && "randomUUID" in crypto ? crypto.randomUUID() : `${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;
30
30
  }
31
- function S() {
31
+ function w() {
32
32
  if (typeof document > "u") return "light";
33
33
  let e = document.documentElement;
34
34
  return e.classList.contains("hc") || e.dataset.theme === "hc" ? "hc" : e.classList.contains("dark") || e.dataset.theme === "dark" ? "dark" : "light";
35
35
  }
36
- function C(t, n, r) {
36
+ function T(t, n, r) {
37
37
  let i = typeof window < "u" ? window.location : void 0, a = e(), o = typeof navigator < "u" ? navigator : {
38
38
  userAgent: "",
39
39
  language: "en"
@@ -43,11 +43,11 @@ function C(t, n, r) {
43
43
  pathname: i?.pathname ?? "",
44
44
  search: i?.search ?? ""
45
45
  },
46
- sessionId: b(typeof sessionStorage < "u" ? sessionStorage : void 0, "bf-event-session-id"),
47
- deviceId: b(typeof localStorage < "u" ? localStorage : void 0, "bf-event-device-id"),
46
+ sessionId: S(typeof sessionStorage < "u" ? sessionStorage : void 0, "bf-event-session-id"),
47
+ deviceId: S(typeof localStorage < "u" ? localStorage : void 0, "bf-event-device-id"),
48
48
  userAgent: o.userAgent,
49
49
  locale: o.language || "en",
50
- theme: S(),
50
+ theme: w(),
51
51
  app: {
52
52
  name: t,
53
53
  version: n,
@@ -57,8 +57,8 @@ function C(t, n, r) {
57
57
  spanId: a.spanId
58
58
  };
59
59
  }
60
- function w({ appName: e, appVersion: t = "0.0.0", appEnv: n = "dev", sourceMfe: r = e, children: i }) {
61
- let a = _(() => T({
60
+ function E({ appName: e, appVersion: t = "0.0.0", appEnv: n = "dev", sourceMfe: r = e, children: i }) {
61
+ let a = y(() => D({
62
62
  appName: e,
63
63
  appVersion: t,
64
64
  appEnv: n,
@@ -69,16 +69,16 @@ function w({ appName: e, appVersion: t = "0.0.0", appEnv: n = "dev", sourceMfe:
69
69
  t,
70
70
  r
71
71
  ]);
72
- return /* @__PURE__ */ v(y.Provider, {
72
+ return /* @__PURE__ */ b(x.Provider, {
73
73
  value: a,
74
74
  children: i
75
75
  });
76
76
  }
77
- function T({ appName: e, appVersion: t = "0.0.0", appEnv: n = "dev", sourceMfe: r = e }) {
77
+ function D({ appName: e, appVersion: t = "0.0.0", appEnv: n = "dev", sourceMfe: r = e }) {
78
78
  let i = /* @__PURE__ */ new Map(), a = /* @__PURE__ */ new Set(), o = [];
79
79
  function s(i, a, o) {
80
80
  return {
81
- id: x(),
81
+ id: C(),
82
82
  name: i,
83
83
  version: 1,
84
84
  source: {
@@ -88,7 +88,7 @@ function T({ appName: e, appVersion: t = "0.0.0", appEnv: n = "dev", sourceMfe:
88
88
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
89
89
  monotonic: performance.now(),
90
90
  payload: a,
91
- metadata: C(e, t, n)
91
+ metadata: T(e, t, n)
92
92
  };
93
93
  }
94
94
  function c(e) {
@@ -123,24 +123,24 @@ function T({ appName: e, appVersion: t = "0.0.0", appEnv: n = "dev", sourceMfe:
123
123
  }
124
124
  };
125
125
  }
126
- function E() {
127
- return m(y);
126
+ function O() {
127
+ return g(x);
128
128
  }
129
- function D(e, t) {
130
- let n = E();
131
- g(() => n.on(e, t), [
129
+ function k(e, t) {
130
+ let n = O();
131
+ v(() => n.on(e, t), [
132
132
  n,
133
133
  t,
134
134
  e
135
135
  ]);
136
136
  }
137
- function O(e, t) {
138
- let n = E();
139
- return h((r) => n.emit(e, r, t), [
137
+ function A(e, t) {
138
+ let n = O();
139
+ return _((r) => n.emit(e, r, t), [
140
140
  n,
141
141
  e,
142
142
  t
143
143
  ]);
144
144
  }
145
145
  //#endregion
146
- export { s as AnalyticsConsentBanner, i as BackendAuditSink, r as BroadcastChannelSink, n as DevtoolsSink, w as EventBusProvider, t as FLUIDGRIDS_RYBBIT_EVENTS, f as OtelBrowserSink, c as RybbitSink, a as compileRybbitRoutePattern, T as createEventBus, o as isRybbitSkippedRoute, l as readAnalyticsConsent, u as readAnalyticsConsentChoice, d as setAnalyticsConsent, D as useEvent, E as useEventBus, O as useEventEmitter };
146
+ export { s as AnalyticsConsentBanner, i as BackendAuditSink, r as BroadcastChannelSink, c as CONSENT_BANNER_OFFSET_VAR, n as DevtoolsSink, E as EventBusProvider, t as FLUIDGRIDS_RYBBIT_EVENTS, m as OtelBrowserSink, l as RybbitSink, a as compileRybbitRoutePattern, D as createEventBus, o as isRybbitSkippedRoute, u as publishConsentBannerOffset, d as readAnalyticsConsent, f as readAnalyticsConsentChoice, p as setAnalyticsConsent, k as useEvent, O as useEventBus, A as useEventEmitter };
package/dist/shared.js CHANGED
@@ -99,56 +99,56 @@ import { DevtoolsSink as Ra } from "./shared/events/sinks/DevtoolsSink.js";
99
99
  import { BroadcastChannelSink as za } from "./shared/events/sinks/BroadcastChannelSink.js";
100
100
  import { BackendAuditSink as Ba } from "./shared/events/sinks/BackendAuditSink.js";
101
101
  import { compileRybbitRoutePattern as Va, isRybbitSkippedRoute as Ha } from "./shared/events/sinks/rybbitRoutes.js";
102
- import { AnalyticsConsentBanner as Ua, RybbitSink as Wa, readAnalyticsConsent as Ga, readAnalyticsConsentChoice as Ka, setAnalyticsConsent as qa } from "./shared/events/sinks/RybbitSink.js";
103
- import { OtelBrowserSink as Ja } from "./shared/events/sinks/OtelBrowserSink.js";
104
- import { EventBusProvider as Ya, createEventBus as Xa, useEvent as Za, useEventBus as Qa, useEventEmitter as $a } from "./shared-events.js";
105
- import { useDebounce as eo } from "./shared/hooks/useDebounce.js";
106
- import { useThrottle as to } from "./shared/hooks/useThrottle.js";
107
- import { BREAKPOINTS as no, useBreakpoint as ro, useMobileBreakpoint as io } from "./shared/hooks/useBreakpoint.js";
108
- import { useOnClickOutside as ao, useOnClickOutsideWithRef as oo } from "./shared/hooks/useOnClickOutside.js";
109
- import { useKeyPress as so, useKeyboardShortcut as co } from "./shared/hooks/useKeyPress.js";
110
- import { useExclusiveMenu as lo } from "./shared/hooks/useExclusiveMenu.js";
111
- import { useLocalStorage as uo } from "./shared/hooks/useLocalStorage.js";
112
- import { useSessionStorage as fo } from "./shared/hooks/useSessionStorage.js";
113
- import { usePrevious as po, usePreviousDistinct as mo, usePreviousHistory as ho } from "./shared/hooks/usePrevious.js";
114
- import { useConditionalToggle as go, useToggle as _o, useToggleObject as vo } from "./shared/hooks/useToggle.js";
115
- import { usePagination as yo } from "./shared/hooks/usePagination.js";
116
- import { useAsync as bo, useAsyncImmediate as xo } from "./shared/hooks/useAsync.js";
117
- import { MODIFIER_KEYS as So, PLATFORM_TYPES as Co } from "./shared/keyboard/types.js";
118
- import { useKeyboardShortcuts as wo } from "./shared/keyboard/useKeyboardShortcuts.js";
119
- import { useHotkeys as To } from "./shared/keyboard/useHotkeys.js";
120
- import { useShortcutHelp as Eo } from "./shared/keyboard/useShortcutHelp.js";
121
- import { GLOBAL_SHORTCUT_CATEGORIES as Do, createGlobalShortcuts as Oo, getGlobalShortcutsByCategory as ko, mergeShortcuts as Ao } from "./shared/keyboard/globalShortcuts.js";
122
- import { useLogger as jo } from "./shared/logger/useLogger.js";
123
- import { useHasAnimated as Mo } from "./shared/hooks/useHasAnimated.js";
124
- import { useReferralAttribution as No } from "./shared/hooks/useReferralAttribution.js";
125
- import { useRecordProductVisit as Po } from "./shared/hooks/useRecordProductVisit.js";
126
- import { usePushDeviceRegistration as Fo } from "./shared/hooks/usePushDeviceRegistration.js";
127
- import { QUOTA_EXHAUSTED_EVENT as Io, dispatchQuotaExhausted as Lo, useQuotaErrorToast as Ro } from "./shared/hooks/useQuotaErrorToast.js";
128
- import { PLAN_USAGE_SNAPSHOT_EVENT as zo, publishPlanUsageSnapshot as Bo, useUpgradePrompt as Vo } from "./shared/hooks/useUpgradePrompt.js";
129
- import { appendContextToPath as Ho, useCurrentContextSearchParams as Uo } from "./shared/hooks/useCurrentContextSearchParams.js";
130
- import { UNSAVED_CHANGE_LABEL_MAX as Wo, listUnsavedChanges as Go, registerUnsavedChange as Ko, unsavedChangesBlocking as qo, useUnsavedChanges as Jo } from "./shared/navigation/unsavedChanges.js";
131
- import { MicrofrontendContext as Yo, useMicrofrontendContext as Xo } from "./shared-hooks.js";
132
- import { withTourProgressStatus as Zo } from "./shared/tours/progress.js";
133
- import { detectDeviceType as Qo, getResponsiveSelector as $o } from "./shared/tours/types.js";
134
- import { useTourPlayer as es } from "./shared/tours/useTourPlayer.js";
135
- import { TourSpotlight as ts } from "./shared/tours/TourSpotlight.js";
136
- import { TourTooltip as ns } from "./shared/tours/TourTooltip.js";
137
- import { TourPlayerProvider as rs, useIsTourPlaying as is, useStartTour as as, useStopTour as os, useTourPlayerContext as ss } from "./shared/tours/TourPlayerProvider.js";
138
- import { TourPlayer as cs, TourTriggerButton as ls, usePlayTour as us } from "./shared/tours/TourPlayer.js";
139
- import { BIGCONSOLE_TOUR_ROUTE_CATALOG as ds, BUILDMYIQ_TOUR_ROUTE_CATALOG as fs, BUILT_IN_TOUR_ROUTE_CATALOGS as ps, COLLABKIN_TOUR_ROUTE_CATALOG as ms, FLUIDGRIDS_TOUR_ROUTE_CATALOG as hs, INTELWATCHTOWER_TOUR_ROUTE_CATALOG as gs, MANUFACTUREDOPS_TOUR_ROUTE_CATALOG as _s, VIBECONTROLS_TOUR_ROUTE_CATALOG as vs, getBuiltInTourRouteCatalog as ys, listBuiltInTourRouteCatalogProductIds as bs } from "./shared/tours/catalogs.js";
140
- import { createTourPageIdResolver as xs, getTourContextRank as Ss, getTourRouteCatalog as Cs, getTourRouteCatalogVersion as ws, getTourRouteModules as Ts, getTourRoutePages as Es, hasRegisteredTourRouteCatalog as Ds, isTourVisibleForContext as Os, normalizeTourPath as ks, registerTourRouteCatalog as As, resolveTourTargetPath as js, subscribeTourRouteCatalogs as Ms } from "./shared/tours/routeCatalog.js";
141
- import { ToursProvider as Ns, useAutoStartTour as Ps, useSafeToursContext as Fs, useTours as Is, useToursContext as Ls } from "./shared/tours/ToursContext.js";
142
- import { TourInitializer as Rs } from "./shared/tours/TourInitializer.js";
143
- import { useRegisterTourRouteCatalog as zs, useTourRouteCatalog as Bs } from "./shared/tours/useTourRouteCatalog.js";
144
- import { AppShellProvider as Vs, resolveAppShellObservabilityConfig as Hs } from "./shared/providers/AppShellProvider.js";
145
- import { MicrofrontendProvider as Us } from "./shared-providers.js";
146
- import { TourTrigger as Ws } from "./shared/tours/TourTrigger.js";
102
+ import { AnalyticsConsentBanner as Ua, CONSENT_BANNER_OFFSET_VAR as Wa, RybbitSink as Ga, publishConsentBannerOffset as Ka, readAnalyticsConsent as qa, readAnalyticsConsentChoice as Ja, setAnalyticsConsent as Ya } from "./shared/events/sinks/RybbitSink.js";
103
+ import { OtelBrowserSink as Xa } from "./shared/events/sinks/OtelBrowserSink.js";
104
+ import { EventBusProvider as Za, createEventBus as Qa, useEvent as $a, useEventBus as eo, useEventEmitter as to } from "./shared-events.js";
105
+ import { useDebounce as no } from "./shared/hooks/useDebounce.js";
106
+ import { useThrottle as ro } from "./shared/hooks/useThrottle.js";
107
+ import { BREAKPOINTS as io, useBreakpoint as ao, useMobileBreakpoint as oo } from "./shared/hooks/useBreakpoint.js";
108
+ import { useOnClickOutside as so, useOnClickOutsideWithRef as co } from "./shared/hooks/useOnClickOutside.js";
109
+ import { useKeyPress as lo, useKeyboardShortcut as uo } from "./shared/hooks/useKeyPress.js";
110
+ import { useExclusiveMenu as fo } from "./shared/hooks/useExclusiveMenu.js";
111
+ import { useLocalStorage as po } from "./shared/hooks/useLocalStorage.js";
112
+ import { useSessionStorage as mo } from "./shared/hooks/useSessionStorage.js";
113
+ import { usePrevious as ho, usePreviousDistinct as go, usePreviousHistory as _o } from "./shared/hooks/usePrevious.js";
114
+ import { useConditionalToggle as vo, useToggle as yo, useToggleObject as bo } from "./shared/hooks/useToggle.js";
115
+ import { usePagination as xo } from "./shared/hooks/usePagination.js";
116
+ import { useAsync as So, useAsyncImmediate as Co } from "./shared/hooks/useAsync.js";
117
+ import { MODIFIER_KEYS as wo, PLATFORM_TYPES as To } from "./shared/keyboard/types.js";
118
+ import { useKeyboardShortcuts as Eo } from "./shared/keyboard/useKeyboardShortcuts.js";
119
+ import { useHotkeys as Do } from "./shared/keyboard/useHotkeys.js";
120
+ import { useShortcutHelp as Oo } from "./shared/keyboard/useShortcutHelp.js";
121
+ import { GLOBAL_SHORTCUT_CATEGORIES as ko, createGlobalShortcuts as Ao, getGlobalShortcutsByCategory as jo, mergeShortcuts as Mo } from "./shared/keyboard/globalShortcuts.js";
122
+ import { useLogger as No } from "./shared/logger/useLogger.js";
123
+ import { useHasAnimated as Po } from "./shared/hooks/useHasAnimated.js";
124
+ import { useReferralAttribution as Fo } from "./shared/hooks/useReferralAttribution.js";
125
+ import { useRecordProductVisit as Io } from "./shared/hooks/useRecordProductVisit.js";
126
+ import { usePushDeviceRegistration as Lo } from "./shared/hooks/usePushDeviceRegistration.js";
127
+ import { QUOTA_EXHAUSTED_EVENT as Ro, dispatchQuotaExhausted as zo, useQuotaErrorToast as Bo } from "./shared/hooks/useQuotaErrorToast.js";
128
+ import { PLAN_USAGE_SNAPSHOT_EVENT as Vo, publishPlanUsageSnapshot as Ho, useUpgradePrompt as Uo } from "./shared/hooks/useUpgradePrompt.js";
129
+ import { appendContextToPath as Wo, useCurrentContextSearchParams as Go } from "./shared/hooks/useCurrentContextSearchParams.js";
130
+ import { UNSAVED_CHANGE_LABEL_MAX as Ko, listUnsavedChanges as qo, registerUnsavedChange as Jo, unsavedChangesBlocking as Yo, useUnsavedChanges as Xo } from "./shared/navigation/unsavedChanges.js";
131
+ import { MicrofrontendContext as Zo, useMicrofrontendContext as Qo } from "./shared-hooks.js";
132
+ import { withTourProgressStatus as $o } from "./shared/tours/progress.js";
133
+ import { detectDeviceType as es, getResponsiveSelector as ts } from "./shared/tours/types.js";
134
+ import { useTourPlayer as ns } from "./shared/tours/useTourPlayer.js";
135
+ import { TourSpotlight as rs } from "./shared/tours/TourSpotlight.js";
136
+ import { TourTooltip as is } from "./shared/tours/TourTooltip.js";
137
+ import { TourPlayerProvider as as, useIsTourPlaying as os, useStartTour as ss, useStopTour as cs, useTourPlayerContext as ls } from "./shared/tours/TourPlayerProvider.js";
138
+ import { TourPlayer as us, TourTriggerButton as ds, usePlayTour as fs } from "./shared/tours/TourPlayer.js";
139
+ import { BIGCONSOLE_TOUR_ROUTE_CATALOG as ps, BUILDMYIQ_TOUR_ROUTE_CATALOG as ms, BUILT_IN_TOUR_ROUTE_CATALOGS as hs, COLLABKIN_TOUR_ROUTE_CATALOG as gs, FLUIDGRIDS_TOUR_ROUTE_CATALOG as _s, INTELWATCHTOWER_TOUR_ROUTE_CATALOG as vs, MANUFACTUREDOPS_TOUR_ROUTE_CATALOG as ys, VIBECONTROLS_TOUR_ROUTE_CATALOG as bs, getBuiltInTourRouteCatalog as xs, listBuiltInTourRouteCatalogProductIds as Ss } from "./shared/tours/catalogs.js";
140
+ import { createTourPageIdResolver as Cs, getTourContextRank as ws, getTourRouteCatalog as Ts, getTourRouteCatalogVersion as Es, getTourRouteModules as Ds, getTourRoutePages as Os, hasRegisteredTourRouteCatalog as ks, isTourVisibleForContext as As, normalizeTourPath as js, registerTourRouteCatalog as Ms, resolveTourTargetPath as Ns, subscribeTourRouteCatalogs as Ps } from "./shared/tours/routeCatalog.js";
141
+ import { ToursProvider as Fs, useAutoStartTour as Is, useSafeToursContext as Ls, useTours as Rs, useToursContext as zs } from "./shared/tours/ToursContext.js";
142
+ import { TourInitializer as Bs } from "./shared/tours/TourInitializer.js";
143
+ import { useRegisterTourRouteCatalog as Vs, useTourRouteCatalog as Hs } from "./shared/tours/useTourRouteCatalog.js";
144
+ import { AppShellProvider as Us, resolveAppShellObservabilityConfig as Ws } from "./shared/providers/AppShellProvider.js";
145
+ import { MicrofrontendProvider as Gs } from "./shared-providers.js";
146
+ import { TourTrigger as Ks } from "./shared/tours/TourTrigger.js";
147
147
  import "./shared-tours.js";
148
- import { acknowledgeNativePurchase as Gs, getNativeProducts as Ks, getNativePurchases as qs, installNativeIAP as Js, isNativeIAPAvailable as Ys, purchaseNativeProduct as Xs, restoreNativePurchases as Zs } from "./shared/native/purchases.js";
148
+ import { acknowledgeNativePurchase as qs, getNativeProducts as Js, getNativePurchases as Ys, installNativeIAP as Xs, isNativeIAPAvailable as Zs, purchaseNativeProduct as Qs, restoreNativePurchases as $s } from "./shared/native/purchases.js";
149
149
  import "./shared-native.js";
150
150
  import "./shared/actors/index.js";
151
151
  //#region src/shared/index.ts
152
- var Qs = "1.0.0";
152
+ var ec = "1.0.0";
153
153
  //#endregion
154
- export { xa as ASSISTANT_WIDGET_TOGGLE_EVENT, pi as AccessDenied, Xr as ActorIdentity, Ua as AnalyticsConsentBanner, Qt as ApolloClient, $t as ApolloProvider, Ci as AppErrorBoundary, er as AppInitializer, Vs as AppShellProvider, Sa as AssistantWidget, bt as BACKEND_ERROR_EVENT, ds as BIGCONSOLE_TOUR_ROUTE_CATALOG, ze as BOTMANOR_PRODUCT_SLUG, no as BREAKPOINTS, fs as BUILDMYIQ_TOUR_ROUTE_CATALOG, ps as BUILT_IN_TOUR_ROUTE_CATALOGS, Ba as BackendAuditSink, za as BroadcastChannelSink, Ge as CANONICAL_DOCS_HOSTS, m as CHART_SERIES_COUNT, ms as COLLABKIN_TOUR_ROUTE_CATALOG, et as COMMON_SHELL_LESS_ROUTES, xt as CONNECTION_STATUS_EVENT, bi as ConditionalShell, sr as ConsoleTransport, Mi as ContextConversationWidget, h as DATA_TYPES, ot as DEFAULT_PAGE_SIZE, Qi as DEFAULT_QUOTA_UPGRADE_COPY, tt as DEFAULT_SHELL_CONFIG, te as DESKTOP_UPDATE_UNSUPPORTED, ne as DESKTOP_WINDOW_STATE_DEFAULT, Ia as DesktopUpdateToast, Ra as DevtoolsSink, ca as DocsLink, g as EDGE_KINDS, si as ErrorBoundary, hi as ErrorFallback, Ya as EventBusProvider, Qs as FE_SHARED_VERSION, La as FLUIDGRIDS_RYBBIT_EVENTS, hs as FLUIDGRIDS_TOUR_ROUTE_CATALOG, wi as FeatureFlagProvider, ji as FeatureGate, st as GATEWAYS, Do as GLOBAL_SHORTCUT_CATEGORIES, Wt as GatewayProvider, Sr as INLINE_ENCODE, gs as INTELWATCHTOWER_TOUR_ROUTE_CATALOG, en as InMemoryCache, Ki as KeyboardHelpDialogWrapper, ga as LandingGateView, _a as LandingOrDashboardRedirect, gi as LoadingFallback, rr as LogLevel, ar as LogManager, ir as Logger, Fr as MAIN_CONTENT_ID, _s as MANUFACTUREDOPS_TOUR_ROUTE_CATALOG, So as MODIFIER_KEYS, Ir as MainLandmark, Ca as Markdown, Yo as MicrofrontendContext, yi as MicrofrontendErrorBoundary, Us as MicrofrontendProvider, _ as NODE_CATEGORIES, v as NODE_STATES, Ja as OtelBrowserSink, zo as PLAN_USAGE_SNAPSHOT_EVENT, Co as PLATFORM_TYPES, Be as PRODUCTS, Ne as PRODUCT_SLUG_EMIT, Pe as PRODUCT_SLUG_RENAMES, Ve as PRODUCT_URLS, la as PUBLIC_PRODUCT_DOCS_URL_QUERY, Gr as PULL_TO_REFRESH_THRESHOLD, ri as PUSH_DEVICE_ID_STORAGE_KEY, Si as PWAInstallBanner, _i as PageLoadingFallback, ui as PermissionButton, mi as PermissionDenied, di as PermissionGate, fi as PermissionLink, Lr as PublicLayout, pr as QUOTA_EXHAUSTED_CODE, Io as QUOTA_EXHAUSTED_EVENT, qi as QuotaMeter, $i as QuotaUpgradeBridge, mr as RESOURCE_CAP_EXCEEDED_CODE, ci as RequireAuth, li as RequireGuest, Wa as RybbitSink, Rt as SSELink, In as SSORedirectSpinner, Hn as SSO_DEPOSITED_PARAM, hr as STORAGE_QUOTA_EXCEEDED_CODE, Vr as SafeAreaView, vi as SectionLoadingFallback, Rr as SkipToContentLink, Rs as TourInitializer, cs as TourPlayer, rs as TourPlayerProvider, ts as TourSpotlight, ns as TourTooltip, Ws as TourTrigger, ls as TourTriggerButton, Ns as ToursProvider, Wo as UNSAVED_CHANGE_LABEL_MAX, gr as UPGRADE_ERROR_CODES, Ji as UPGRADE_PROMPT_EVENT, Zi as UpgradeInlineBanner, Yi as UpgradePromptModal, vs as VIBECONTROLS_TOUR_ROUTE_CATALOG, pt as WORKSPACE_CONTEXT_CHANGED, mt as WORKSPACE_CONTEXT_MISMATCH_EVENT, ht as WORKSPACE_WRITE_REFUSED_EVENT, gt as WORKSPACE_WRITE_REFUSED_MESSAGE, _t as WorkspaceContextChangedError, Xt as WsLink, Gs as acknowledgeNativePurchase, r as alertTokens, Ho as appendContextToPath, Mn as assignLocationWithAllowlist, cn as attemptTokenRefresh, Un as beginSsoNavigation, re as bootDesktopShell, Zr as buildActorFallback, Ke as buildProductDocsUrl, _r as buildQuotaExhaustedMessage, Wn as buildSsoDepositUrl, qe as canonicalizeDocsOrigin, j as capitalizeFirst, M as capitalizeWords, ea as captureQuotaDialogOwners, i as categoryTokens, y as chartSeriesColor, b as chartSeriesIndex, Ln as checkRemoteSLO, Rn as checkSLO, ta as claimQuotaDialog, ln as clearAuthSessionStorage, kt as clearGraphqlFetchResponseCache, zn as clearLocalAuthState, mn as clearSSoCookie, hn as clearShellSsoCookies, Gn as clearSsoDepositState, Kn as clearSsoNavigation, cr as clearUserContext, Tr as cn, Va as compileRybbitRoutePattern, Kr as computePullOffset, qr as computePullProgress, qn as consumeSsoDepositMarker, n as createApolloClient, Xa as createEventBus, Oo as createGlobalShortcuts, zt as createGraphQLClient, dr as createProfileScopedStorage, xs as createTourPageIdResolver, x as dataTypeColor, S as dataTypeTextClasses, ie as desktopCheckForUpdates, ae as desktopDeepLinkToPath, oe as desktopInstallUpdate, se as desktopNotify, ce as desktopOpenExternal, le as desktopSetBadgeCount, ue as desktopSetLocale, de as desktopSetTheme, fe as desktopSetTrayQuickActions, Qo as detectDeviceType, Ni as detectPlatform, St as dispatchBackendErrorEvent, na as dispatchProductQuotaExhausted, Lo as dispatchQuotaExhausted, Xi as dispatchUpgradePrompt, Cr as downscaleImage, C as edgeColor, Fe as emitProductSlug, Ct as extractBackendError, vr as extractQuotaExhaustedExtensions, yr as extractUpgradeErrorExtensions, ua as fetchRegistryDocsUrl, He as findProductConfig, zr as focusSkipTarget, N as formatBytes, P as formatCompactNumber, F as formatCurrency, I as formatCurrencyCompact, L as formatDate, R as formatDateTime, z as formatDuration, Pi as formatKeyCombo, B as formatList, V as formatNumber, H as formatOrdinal, U as formatPercentage, W as formatRelativeTime, G as formatTime, a as getAlertTokens, ys as getBuiltInTourRouteCatalog, $ as getCapacitorPlatform, Je as getCatalogDocsOrigin, o as getCategoryTokens, pe as getDesktopAuthBridgeConfig, me as getDesktopBridge, he as getDesktopGatewayBases, ge as getDesktopGatewayUrls, _e as getDesktopRuntimeConfig, ve as getDesktopUpdateState, ye as getDesktopWindowState, Fi as getDisplayKeysForPlatform, ct as getGatewayConfig, lt as getGatewayUrl, Bt as getGlobalClient, ko as getGlobalShortcutsByCategory, ut as getGraphQLEndpoint, be as getLegacyDesktopRuntime, Sn as getNativeBridge, ma as getNativeEntryRoutes, Ks as getNativeProducts, qs as getNativePurchases, ii as getOrCreatePushDeviceId, Cn as getPlatform, Ue as getProductUrl, We as getProductsWithUrls, fr as getProfileScopedKey, s as getProgressTokens, $r as getPushOptInController, $o as getResponsiveSelector, Bn as getSSORedirectUrl, gn as getSSoCookie, nt as getShellConfig, Ii as getShortcutLabel, c as getStatusBadgeTokens, l as getStatusTokens, At as getStoredAuthToken, jt as getStoredLocale, Mt as getStoredOrganizationId, Nt as getStoredProjectId, Pt as getStoredWorkspaceId, Ft as getStoredWorkspaceToken, Ss as getTourContextRank, Cs as getTourRouteCatalog, ws as getTourRouteCatalogVersion, Ts as getTourRouteModules, Es as getTourRoutePages, u as getTrendTokens, Vt as getWorkspaceClient, dt as getWorkspaceTokenPayload, tn as gql, It as graphqlFetch, un as hasAuthGraphQLErrors, Ds as hasRegisteredTourRouteCatalog, va as hasStoredValidSession, Ht as initializeAppClients, lr as initializeLogger, xe as installDesktopDeepLinkHandler, Se as installDesktopNavigateHandler, Oe as installGatewayFetchRewrite, Js as installNativeIAP, wt as isAbortError, Nn as isAllowedRedirectUrl, wn as isAndroid, dn as isAuthGraphQLError, fn as isAuthNetworkError, Tt as isBackendErrorDisplay, ee as isCapacitorNative, Z as isChunkLoadError, Ce as isDesktop, Tn as isElectron, En as isIOS, Dn as isInstalledApp, Li as isMac, Ri as isMobileDevice, On as isNative, Ys as isNativeIAPAvailable, br as isQuotaExhaustedError, Ha as isRybbitSkippedRoute, Ie as isSameProductSlug, _n as isSharedSsoCookieDomain, rt as isShellLessRoute, Jn as isSsoNavigationPending, kn as isStandalonePWA, zi as isTabletDevice, Os as isTourVisibleForContext, Et as isTransportError, vn as isTrustedSsoOrigin, xr as isUpgradeError, An as isWeb, jn as isWebBrowser, vt as isWorkspaceContextChangedError, ft as isWorkspaceTokenValidForContext, Q as lazyWithRetry, Le as legacyProductSlug, bs as listBuiltInTourRouteCatalogProductIds, Go as listUnsavedChanges, or as logManager, Dt as markConnectionHealthy, Yn as markSsoDepositDone, Xn as markSsoDepositPending, Bi as matchesKeyCombo, Ao as mergeShortcuts, Zn as mintSsoSessionTokens, Er as nativeActionSheet, Dr as nativeConfirm, Or as nativeCopyText, kr as nativeImpact, Ar as nativeNotify, jr as nativeOpenUrl, Mr as nativeSelection, Nr as nativeShare, Pr as nativeToast, w as nodeCategoryClasses, T as nodeCategoryColor, E as nodeCategorySubtleColor, D as nodeStateColor, O as nodeStateRingClasses, Ye as normalizeDocsPath, Vi as normalizeKey, Hi as normalizePlatformCombo, Re as normalizeProductSlug, ks as normalizeTourPath, we as onDesktopUpdateState, Te as onDesktopWindowState, Pn as openUrlInNewTabWithAllowlist, Ui as parseKeyCombo, K as pluralize, Zt as prepareWorkspaceRequest, d as progressTokens, Bo as publishPlanUsageSnapshot, Xs as purchaseNativeProduct, ra as quotaEventKind, Ga as readAnalyticsConsent, Ka as readAnalyticsConsentChoice, yt as readContextInputWorkspaceId, Hr as readInitialNetworkStatus, da as readRegistryDocsUrl, yn as readShellSsoCookie, Qn as readSsoDepositState, ei as recordPushPermissionPromptDismissed, pn as redirectToLogin, Vn as redirectToSSO, Ur as reduceNetworkStatus, Ee as registerDesktopNavigator, ai as registerPushDevice, ti as registerPushOptInController, As as registerTourRouteCatalog, Ko as registerUnsavedChange, Fn as replaceLocationWithAllowlist, Ut as resetAppClients, ja as resolveActionSheetOutcome, Hs as resolveAppShellObservabilityConfig, je as resolveAuthBridgeConfig, Xe as resolveDocsEnvironment, ke as resolveGatewayBases, Lt as resolveGatewayUrl, De as resolveGatewayUrls, ya as resolveLandingGate, Ze as resolveProductDocsOrigin, ia as resolveQuotaUpgradeCopy, Me as resolveShellAuthBridgeConfig, js as resolveTourTargetPath, Zs as restoreNativePurchases, wr as selectInlineBase64, qa as setAnalyticsConsent, bn as setSSoCookie, xn as setShellSsoCookies, ur as setUserContext, $n as shouldAttemptSsoDeposit, Wi as shouldEnableKeyboardShortcuts, Gi as shouldIgnoreShortcut, ni as shouldPromptForPushPermission, it as shouldShowBreadcrumb, ha as shouldShowNativeWelcome, at as shouldShowSidebar, Ot as shouldToastBackendError, q as slugify, f as statusTokens, Ms as subscribeTourRouteCatalogs, Ae as suppressConsole, J as toCamelCase, k as toDataType, Qe as toEnvironmentDocsOrigin, A as toNodeCategory, Y as toPascalCase, $e as toTrustedDocsOrigin, p as trendTokens, X as truncateText, oi as unregisterPushDevice, qo as unsavedChangesBlocking, Ma as useActionSheet, Qr as useActorProfiles, nn as useApolloClient, Da as useAppState, bo as useAsync, xo as useAsyncImmediate, Ps as useAutoStartTour, ro as useBreakpoint, go as useConditionalToggle, e as useCopyToClipboard, Uo as useCurrentContextSearchParams, eo as useDebounce, Na as useDesktop, Pa as useDesktopUpdateState, Fa as useDesktopWindowState, Oa as useDeviceInfo, Za as useEvent, Qa as useEventBus, $a as useEventEmitter, lo as useExclusiveMenu, Di as useFeatureFlag, Oi as useFeatureFlagDetails, ki as useFeatureFlagValue, Ti as useFeatureFlags, Gt as useGateway, Kt as useGatewayClient, ka as useHaptics, Mo as useHasAnimated, Yt as useHasAuthToken, To as useHotkeys, Br as useInsideMainLandmark, is as useIsTourPlaying, so as useKeyPress, co as useKeyboardShortcut, wo as useKeyboardShortcuts, rn as useLazyQuery, uo as useLocalStorage, jo as useLogger, t as useMediaQuery, Xo as useMicrofrontendContext, io as useMobileBreakpoint, an as useMutation, Ea as useNativeKeyboard, wa as useNativePlatform, Wr as useNetworkStatus, ao as useOnClickOutside, oo as useOnClickOutsideWithRef, Ai as useOptionalFeatureFlag, Ei as useOptionalFeatureFlags, xi as usePWA, yo as usePagination, us as usePlayTour, po as usePrevious, mo as usePreviousDistinct, ho as usePreviousHistory, fa as useProductDocsOrigin, pa as useProductDocsUrl, Jr as usePullToRefresh, Fo as usePushDeviceRegistration, on as useQuery, aa as useQuotaDialogOwnership, Ro as useQuotaErrorToast, oa as useQuotaUpgradeBridge, Po as useRecordProductVisit, No as useReferralAttribution, zs as useRegisterTourRouteCatalog, tr as useRegistryHelpers, Yr as useReturnFocus, Ta as useSafeArea, qt as useSafeGateway, Jt as useSafeGatewayClient, Fs as useSafeToursContext, fo as useSessionStorage, nr as useShellNavigate, Eo as useShortcutHelp, as as useStartTour, Aa as useStatusBar, os as useStopTour, sn as useSubscription, to as useThrottle, _o as useToggle, vo as useToggleObject, es as useTourPlayer, ss as useTourPlayerContext, Bs as useTourRouteCatalog, Is as useTours, Ls as useToursContext, Jo as useUnsavedChanges, Vo as useUpgradePrompt, ba as useVoiceInput, sa as withQuotaDialogOwnership, Zo as withTourProgressStatus };
154
+ export { xa as ASSISTANT_WIDGET_TOGGLE_EVENT, pi as AccessDenied, Xr as ActorIdentity, Ua as AnalyticsConsentBanner, Qt as ApolloClient, $t as ApolloProvider, Ci as AppErrorBoundary, er as AppInitializer, Us as AppShellProvider, Sa as AssistantWidget, bt as BACKEND_ERROR_EVENT, ps as BIGCONSOLE_TOUR_ROUTE_CATALOG, ze as BOTMANOR_PRODUCT_SLUG, io as BREAKPOINTS, ms as BUILDMYIQ_TOUR_ROUTE_CATALOG, hs as BUILT_IN_TOUR_ROUTE_CATALOGS, Ba as BackendAuditSink, za as BroadcastChannelSink, Ge as CANONICAL_DOCS_HOSTS, m as CHART_SERIES_COUNT, gs as COLLABKIN_TOUR_ROUTE_CATALOG, et as COMMON_SHELL_LESS_ROUTES, xt as CONNECTION_STATUS_EVENT, Wa as CONSENT_BANNER_OFFSET_VAR, bi as ConditionalShell, sr as ConsoleTransport, Mi as ContextConversationWidget, h as DATA_TYPES, ot as DEFAULT_PAGE_SIZE, Qi as DEFAULT_QUOTA_UPGRADE_COPY, tt as DEFAULT_SHELL_CONFIG, te as DESKTOP_UPDATE_UNSUPPORTED, ne as DESKTOP_WINDOW_STATE_DEFAULT, Ia as DesktopUpdateToast, Ra as DevtoolsSink, ca as DocsLink, g as EDGE_KINDS, si as ErrorBoundary, hi as ErrorFallback, Za as EventBusProvider, ec as FE_SHARED_VERSION, La as FLUIDGRIDS_RYBBIT_EVENTS, _s as FLUIDGRIDS_TOUR_ROUTE_CATALOG, wi as FeatureFlagProvider, ji as FeatureGate, st as GATEWAYS, ko as GLOBAL_SHORTCUT_CATEGORIES, Wt as GatewayProvider, Sr as INLINE_ENCODE, vs as INTELWATCHTOWER_TOUR_ROUTE_CATALOG, en as InMemoryCache, Ki as KeyboardHelpDialogWrapper, ga as LandingGateView, _a as LandingOrDashboardRedirect, gi as LoadingFallback, rr as LogLevel, ar as LogManager, ir as Logger, Fr as MAIN_CONTENT_ID, ys as MANUFACTUREDOPS_TOUR_ROUTE_CATALOG, wo as MODIFIER_KEYS, Ir as MainLandmark, Ca as Markdown, Zo as MicrofrontendContext, yi as MicrofrontendErrorBoundary, Gs as MicrofrontendProvider, _ as NODE_CATEGORIES, v as NODE_STATES, Xa as OtelBrowserSink, Vo as PLAN_USAGE_SNAPSHOT_EVENT, To as PLATFORM_TYPES, Be as PRODUCTS, Ne as PRODUCT_SLUG_EMIT, Pe as PRODUCT_SLUG_RENAMES, Ve as PRODUCT_URLS, la as PUBLIC_PRODUCT_DOCS_URL_QUERY, Gr as PULL_TO_REFRESH_THRESHOLD, ri as PUSH_DEVICE_ID_STORAGE_KEY, Si as PWAInstallBanner, _i as PageLoadingFallback, ui as PermissionButton, mi as PermissionDenied, di as PermissionGate, fi as PermissionLink, Lr as PublicLayout, pr as QUOTA_EXHAUSTED_CODE, Ro as QUOTA_EXHAUSTED_EVENT, qi as QuotaMeter, $i as QuotaUpgradeBridge, mr as RESOURCE_CAP_EXCEEDED_CODE, ci as RequireAuth, li as RequireGuest, Ga as RybbitSink, Rt as SSELink, In as SSORedirectSpinner, Hn as SSO_DEPOSITED_PARAM, hr as STORAGE_QUOTA_EXCEEDED_CODE, Vr as SafeAreaView, vi as SectionLoadingFallback, Rr as SkipToContentLink, Bs as TourInitializer, us as TourPlayer, as as TourPlayerProvider, rs as TourSpotlight, is as TourTooltip, Ks as TourTrigger, ds as TourTriggerButton, Fs as ToursProvider, Ko as UNSAVED_CHANGE_LABEL_MAX, gr as UPGRADE_ERROR_CODES, Ji as UPGRADE_PROMPT_EVENT, Zi as UpgradeInlineBanner, Yi as UpgradePromptModal, bs as VIBECONTROLS_TOUR_ROUTE_CATALOG, pt as WORKSPACE_CONTEXT_CHANGED, mt as WORKSPACE_CONTEXT_MISMATCH_EVENT, ht as WORKSPACE_WRITE_REFUSED_EVENT, gt as WORKSPACE_WRITE_REFUSED_MESSAGE, _t as WorkspaceContextChangedError, Xt as WsLink, qs as acknowledgeNativePurchase, r as alertTokens, Wo as appendContextToPath, Mn as assignLocationWithAllowlist, cn as attemptTokenRefresh, Un as beginSsoNavigation, re as bootDesktopShell, Zr as buildActorFallback, Ke as buildProductDocsUrl, _r as buildQuotaExhaustedMessage, Wn as buildSsoDepositUrl, qe as canonicalizeDocsOrigin, j as capitalizeFirst, M as capitalizeWords, ea as captureQuotaDialogOwners, i as categoryTokens, y as chartSeriesColor, b as chartSeriesIndex, Ln as checkRemoteSLO, Rn as checkSLO, ta as claimQuotaDialog, ln as clearAuthSessionStorage, kt as clearGraphqlFetchResponseCache, zn as clearLocalAuthState, mn as clearSSoCookie, hn as clearShellSsoCookies, Gn as clearSsoDepositState, Kn as clearSsoNavigation, cr as clearUserContext, Tr as cn, Va as compileRybbitRoutePattern, Kr as computePullOffset, qr as computePullProgress, qn as consumeSsoDepositMarker, n as createApolloClient, Qa as createEventBus, Ao as createGlobalShortcuts, zt as createGraphQLClient, dr as createProfileScopedStorage, Cs as createTourPageIdResolver, x as dataTypeColor, S as dataTypeTextClasses, ie as desktopCheckForUpdates, ae as desktopDeepLinkToPath, oe as desktopInstallUpdate, se as desktopNotify, ce as desktopOpenExternal, le as desktopSetBadgeCount, ue as desktopSetLocale, de as desktopSetTheme, fe as desktopSetTrayQuickActions, es as detectDeviceType, Ni as detectPlatform, St as dispatchBackendErrorEvent, na as dispatchProductQuotaExhausted, zo as dispatchQuotaExhausted, Xi as dispatchUpgradePrompt, Cr as downscaleImage, C as edgeColor, Fe as emitProductSlug, Ct as extractBackendError, vr as extractQuotaExhaustedExtensions, yr as extractUpgradeErrorExtensions, ua as fetchRegistryDocsUrl, He as findProductConfig, zr as focusSkipTarget, N as formatBytes, P as formatCompactNumber, F as formatCurrency, I as formatCurrencyCompact, L as formatDate, R as formatDateTime, z as formatDuration, Pi as formatKeyCombo, B as formatList, V as formatNumber, H as formatOrdinal, U as formatPercentage, W as formatRelativeTime, G as formatTime, a as getAlertTokens, xs as getBuiltInTourRouteCatalog, $ as getCapacitorPlatform, Je as getCatalogDocsOrigin, o as getCategoryTokens, pe as getDesktopAuthBridgeConfig, me as getDesktopBridge, he as getDesktopGatewayBases, ge as getDesktopGatewayUrls, _e as getDesktopRuntimeConfig, ve as getDesktopUpdateState, ye as getDesktopWindowState, Fi as getDisplayKeysForPlatform, ct as getGatewayConfig, lt as getGatewayUrl, Bt as getGlobalClient, jo as getGlobalShortcutsByCategory, ut as getGraphQLEndpoint, be as getLegacyDesktopRuntime, Sn as getNativeBridge, ma as getNativeEntryRoutes, Js as getNativeProducts, Ys as getNativePurchases, ii as getOrCreatePushDeviceId, Cn as getPlatform, Ue as getProductUrl, We as getProductsWithUrls, fr as getProfileScopedKey, s as getProgressTokens, $r as getPushOptInController, ts as getResponsiveSelector, Bn as getSSORedirectUrl, gn as getSSoCookie, nt as getShellConfig, Ii as getShortcutLabel, c as getStatusBadgeTokens, l as getStatusTokens, At as getStoredAuthToken, jt as getStoredLocale, Mt as getStoredOrganizationId, Nt as getStoredProjectId, Pt as getStoredWorkspaceId, Ft as getStoredWorkspaceToken, ws as getTourContextRank, Ts as getTourRouteCatalog, Es as getTourRouteCatalogVersion, Ds as getTourRouteModules, Os as getTourRoutePages, u as getTrendTokens, Vt as getWorkspaceClient, dt as getWorkspaceTokenPayload, tn as gql, It as graphqlFetch, un as hasAuthGraphQLErrors, ks as hasRegisteredTourRouteCatalog, va as hasStoredValidSession, Ht as initializeAppClients, lr as initializeLogger, xe as installDesktopDeepLinkHandler, Se as installDesktopNavigateHandler, Oe as installGatewayFetchRewrite, Xs as installNativeIAP, wt as isAbortError, Nn as isAllowedRedirectUrl, wn as isAndroid, dn as isAuthGraphQLError, fn as isAuthNetworkError, Tt as isBackendErrorDisplay, ee as isCapacitorNative, Z as isChunkLoadError, Ce as isDesktop, Tn as isElectron, En as isIOS, Dn as isInstalledApp, Li as isMac, Ri as isMobileDevice, On as isNative, Zs as isNativeIAPAvailable, br as isQuotaExhaustedError, Ha as isRybbitSkippedRoute, Ie as isSameProductSlug, _n as isSharedSsoCookieDomain, rt as isShellLessRoute, Jn as isSsoNavigationPending, kn as isStandalonePWA, zi as isTabletDevice, As as isTourVisibleForContext, Et as isTransportError, vn as isTrustedSsoOrigin, xr as isUpgradeError, An as isWeb, jn as isWebBrowser, vt as isWorkspaceContextChangedError, ft as isWorkspaceTokenValidForContext, Q as lazyWithRetry, Le as legacyProductSlug, Ss as listBuiltInTourRouteCatalogProductIds, qo as listUnsavedChanges, or as logManager, Dt as markConnectionHealthy, Yn as markSsoDepositDone, Xn as markSsoDepositPending, Bi as matchesKeyCombo, Mo as mergeShortcuts, Zn as mintSsoSessionTokens, Er as nativeActionSheet, Dr as nativeConfirm, Or as nativeCopyText, kr as nativeImpact, Ar as nativeNotify, jr as nativeOpenUrl, Mr as nativeSelection, Nr as nativeShare, Pr as nativeToast, w as nodeCategoryClasses, T as nodeCategoryColor, E as nodeCategorySubtleColor, D as nodeStateColor, O as nodeStateRingClasses, Ye as normalizeDocsPath, Vi as normalizeKey, Hi as normalizePlatformCombo, Re as normalizeProductSlug, js as normalizeTourPath, we as onDesktopUpdateState, Te as onDesktopWindowState, Pn as openUrlInNewTabWithAllowlist, Ui as parseKeyCombo, K as pluralize, Zt as prepareWorkspaceRequest, d as progressTokens, Ka as publishConsentBannerOffset, Ho as publishPlanUsageSnapshot, Qs as purchaseNativeProduct, ra as quotaEventKind, qa as readAnalyticsConsent, Ja as readAnalyticsConsentChoice, yt as readContextInputWorkspaceId, Hr as readInitialNetworkStatus, da as readRegistryDocsUrl, yn as readShellSsoCookie, Qn as readSsoDepositState, ei as recordPushPermissionPromptDismissed, pn as redirectToLogin, Vn as redirectToSSO, Ur as reduceNetworkStatus, Ee as registerDesktopNavigator, ai as registerPushDevice, ti as registerPushOptInController, Ms as registerTourRouteCatalog, Jo as registerUnsavedChange, Fn as replaceLocationWithAllowlist, Ut as resetAppClients, ja as resolveActionSheetOutcome, Ws as resolveAppShellObservabilityConfig, je as resolveAuthBridgeConfig, Xe as resolveDocsEnvironment, ke as resolveGatewayBases, Lt as resolveGatewayUrl, De as resolveGatewayUrls, ya as resolveLandingGate, Ze as resolveProductDocsOrigin, ia as resolveQuotaUpgradeCopy, Me as resolveShellAuthBridgeConfig, Ns as resolveTourTargetPath, $s as restoreNativePurchases, wr as selectInlineBase64, Ya as setAnalyticsConsent, bn as setSSoCookie, xn as setShellSsoCookies, ur as setUserContext, $n as shouldAttemptSsoDeposit, Wi as shouldEnableKeyboardShortcuts, Gi as shouldIgnoreShortcut, ni as shouldPromptForPushPermission, it as shouldShowBreadcrumb, ha as shouldShowNativeWelcome, at as shouldShowSidebar, Ot as shouldToastBackendError, q as slugify, f as statusTokens, Ps as subscribeTourRouteCatalogs, Ae as suppressConsole, J as toCamelCase, k as toDataType, Qe as toEnvironmentDocsOrigin, A as toNodeCategory, Y as toPascalCase, $e as toTrustedDocsOrigin, p as trendTokens, X as truncateText, oi as unregisterPushDevice, Yo as unsavedChangesBlocking, Ma as useActionSheet, Qr as useActorProfiles, nn as useApolloClient, Da as useAppState, So as useAsync, Co as useAsyncImmediate, Is as useAutoStartTour, ao as useBreakpoint, vo as useConditionalToggle, e as useCopyToClipboard, Go as useCurrentContextSearchParams, no as useDebounce, Na as useDesktop, Pa as useDesktopUpdateState, Fa as useDesktopWindowState, Oa as useDeviceInfo, $a as useEvent, eo as useEventBus, to as useEventEmitter, fo as useExclusiveMenu, Di as useFeatureFlag, Oi as useFeatureFlagDetails, ki as useFeatureFlagValue, Ti as useFeatureFlags, Gt as useGateway, Kt as useGatewayClient, ka as useHaptics, Po as useHasAnimated, Yt as useHasAuthToken, Do as useHotkeys, Br as useInsideMainLandmark, os as useIsTourPlaying, lo as useKeyPress, uo as useKeyboardShortcut, Eo as useKeyboardShortcuts, rn as useLazyQuery, po as useLocalStorage, No as useLogger, t as useMediaQuery, Qo as useMicrofrontendContext, oo as useMobileBreakpoint, an as useMutation, Ea as useNativeKeyboard, wa as useNativePlatform, Wr as useNetworkStatus, so as useOnClickOutside, co as useOnClickOutsideWithRef, Ai as useOptionalFeatureFlag, Ei as useOptionalFeatureFlags, xi as usePWA, xo as usePagination, fs as usePlayTour, ho as usePrevious, go as usePreviousDistinct, _o as usePreviousHistory, fa as useProductDocsOrigin, pa as useProductDocsUrl, Jr as usePullToRefresh, Lo as usePushDeviceRegistration, on as useQuery, aa as useQuotaDialogOwnership, Bo as useQuotaErrorToast, oa as useQuotaUpgradeBridge, Io as useRecordProductVisit, Fo as useReferralAttribution, Vs as useRegisterTourRouteCatalog, tr as useRegistryHelpers, Yr as useReturnFocus, Ta as useSafeArea, qt as useSafeGateway, Jt as useSafeGatewayClient, Ls as useSafeToursContext, mo as useSessionStorage, nr as useShellNavigate, Oo as useShortcutHelp, ss as useStartTour, Aa as useStatusBar, cs as useStopTour, sn as useSubscription, ro as useThrottle, yo as useToggle, bo as useToggleObject, ns as useTourPlayer, ls as useTourPlayerContext, Hs as useTourRouteCatalog, Rs as useTours, zs as useToursContext, Xo as useUnsavedChanges, Uo as useUpgradePrompt, ba as useVoiceInput, sa as withQuotaDialogOwnership, $o as withTourProgressStatus };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@burdenoff/fe-libs",
3
- "version": "2026.1023.8",
3
+ "version": "2026.1023.10",
4
4
  "description": "Burdenoff frontend primitives and domain libraries",
5
5
  "type": "module",
6
6
  "bin": {
@@ -330,7 +330,7 @@
330
330
  "test:package-livekit-optional": "node scripts/validate-livekit-optional.mjs",
331
331
  "verify:package": "node scripts/verify-package-contents.mjs",
332
332
  "test:handsfree-browser": "node scripts/handsfree-browser-run.mjs",
333
- "test": "bun test scripts/graphql-schema-drift/__tests__ scripts/a11y-audit/__tests__ scripts/i18n/__tests__ src/credentials src/connections src/storage src/shared/assistant src/shared/feature-flags src/platform-pages src/admin-overview src/shared/components src/shared/graphql/links/sse-link.test.ts src/shared/graphql/fetch.test.ts src/shared/graphql/prepareWorkspaceRequest.test.ts src/shared/graphql/client.test.ts src/shared/utils/apollo.test.ts src/shared/utils/canvasTokens.test.ts src/shared/utils/brandContrast.test.ts src/shared/graphql/tourWorkspaceAuth.test.ts src/shared/config/gatewayUrls.test.ts src/shared/config/authBridgeUrls.test.ts src/shared/config/shellRoutes.test.ts src/shared/config/gatewayFallback.test.ts scripts/__tests__ src/shared/config/products.test.ts src/shared/config/docsUrls.test.ts src/shared/config/productSlug.test.ts src/shared/hooks/shell/useProducts.test.ts src/shared/hooks/shell/useGlobalSearch.test.ts src/shared/providers/shell/brandAttribute.test.ts src/chrome/ProductSwitcher.test.ts src/shared/utils/backendErrors.test.ts src/shared/utils/gatewayFetchRewrite.test.ts src/shared/utils/authCookie.test.ts src/shared/utils/redirectAllowlist.test.ts src/shared/providers/shell/ProfileStorageManager.test.ts src/shared/providers/AppShellProvider.test.ts src/shared/providers/shell/interpolate.test.ts src/shared/providers/shell/resolveTranslation.test.ts src/shared/providers/shell/I18nProvider.render.test.tsx src/shared/providers/shell/I18nProvider.client.test.tsx src/shared/providers/shell/translationStore.test.ts src/shared/providers/shell/translationLayers.test.ts src/shared/providers/shell/directionMode.test.ts src/shared/providers/shell/authProvider/ssoRelay.test.ts src/shared/providers/shell/authProvider/useAuthActions.signOut.test.tsx src/shared/providers/shell/personaSurfaceRemote.test.ts src/shared/providers/shell/workspaceSwitch.client.test.tsx src/shared/events/sinks/RybbitSink.test.ts src/shared/events/sinks/RybbitSink.client.test.tsx src/shell-native src/shared/native src/shared/navigation src/shared/tours src/chrome/__tests__ src/ui/__tests__ src/shared/graphql/workspaceSwitchGuard.test.ts",
333
+ "test": "bun test scripts/graphql-schema-drift/__tests__ scripts/a11y-audit/__tests__ scripts/i18n/__tests__ src/credentials src/connections src/storage src/shared/assistant src/shared/feature-flags src/platform-pages src/admin-overview src/shared/components src/shared/graphql/links/sse-link.test.ts src/shared/graphql/fetch.test.ts src/shared/graphql/prepareWorkspaceRequest.test.ts src/shared/graphql/client.test.ts src/shared/utils/apollo.test.ts src/shared/utils/canvasTokens.test.ts src/shared/utils/brandContrast.test.ts src/shared/graphql/tourWorkspaceAuth.test.ts src/shared/config/gatewayUrls.test.ts src/shared/config/authBridgeUrls.test.ts src/shared/config/shellRoutes.test.ts src/shared/config/gatewayFallback.test.ts scripts/__tests__ src/shared/config/products.test.ts src/shared/config/docsUrls.test.ts src/shared/config/productSlug.test.ts src/shared/hooks/shell/useProducts.test.ts src/shared/hooks/shell/useGlobalSearch.test.ts src/shared/providers/shell/brandAttribute.test.ts src/chrome/ProductSwitcher.test.ts src/shared/utils/backendErrors.test.ts src/shared/utils/gatewayFetchRewrite.test.ts src/shared/utils/authCookie.test.ts src/shared/utils/redirectAllowlist.test.ts src/shared/providers/shell/ProfileStorageManager.test.ts src/shared/providers/shell/ActiveContextProvider.test.ts src/shared/providers/AppShellProvider.test.ts src/shared/providers/shell/interpolate.test.ts src/shared/providers/shell/resolveTranslation.test.ts src/shared/providers/shell/I18nProvider.render.test.tsx src/shared/providers/shell/I18nProvider.client.test.tsx src/shared/providers/shell/translationStore.test.ts src/shared/providers/shell/translationLayers.test.ts src/shared/providers/shell/directionMode.test.ts src/shared/providers/shell/authProvider/ssoRelay.test.ts src/shared/providers/shell/authProvider/useAuthActions.signOut.test.tsx src/shared/providers/shell/personaSurfaceRemote.test.ts src/shared/providers/shell/workspaceSwitch.client.test.tsx src/shared/events/sinks/RybbitSink.test.ts src/shared/events/sinks/RybbitSink.client.test.tsx src/shell-native src/shared/native src/shared/navigation src/shared/tours src/chrome/__tests__ src/ui/__tests__ src/shared/graphql/workspaceSwitchGuard.test.ts",
334
334
  "sanity": "bash scripts/build-limits.sh --gate bash -c 'bun run lint:sanity && bun run format && bun run type:check && bun run test && bun run build && bun run verify:package'",
335
335
  "switch:status": "bun scripts/deps-mode.ts status",
336
336
  "switch:remote": "bun scripts/deps-mode.ts remote",