@burdenoff/fe-libs 2026.1023.12 → 2026.1023.14

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.
@@ -1,15 +1,15 @@
1
1
  import { normalizeProductSlug as e } from "../../config/productSlug.js";
2
- import { PRODUCTS as t, getProductLogoUrl as n, getProductUrl as r } from "../../config/products.js";
3
- import { useGatewayClient as i } from "../../graphql/GatewayContext.js";
2
+ import { PRODUCTS as t, getProductLogoUrl as n, getProductUrl as r, toCurrentEstateAppUrl as i } from "../../config/products.js";
3
+ import { useGatewayClient as a } from "../../graphql/GatewayContext.js";
4
4
  import "../../../shared-graphql.js";
5
- import { useCallback as a, useEffect as o, useState as s } from "react";
6
- import { gql as c } from "@apollo/client/core";
5
+ import { useCallback as o, useEffect as s, useState as c } from "react";
6
+ import { gql as l } from "@apollo/client/core";
7
7
  //#region src/shared/hooks/shell/useProducts.ts
8
- var l = new Set(t.map((t) => e(t.id))), u = new Map(t.map((t) => [e(t.id), t.comingSoon === !0]));
9
- function d(t, n, r) {
10
- return u.get(e(t)) ? !0 : n !== "ACTIVE" || !r;
8
+ var u = new Set(t.map((t) => e(t.id))), d = new Map(t.map((t) => [e(t.id), t.comingSoon === !0]));
9
+ function f(t, n, r) {
10
+ return d.get(e(t)) ? !0 : n !== "ACTIVE" || !r;
11
11
  }
12
- var f = c`
12
+ var p = l`
13
13
  query GetAccessibleProducts($limit: Int, $offset: Int) {
14
14
  myAccessibleProducts(limit: $limit, offset: $offset) {
15
15
  items {
@@ -26,13 +26,13 @@ var f = c`
26
26
  }
27
27
  }
28
28
  `;
29
- function p(t) {
30
- return l.has(e(t));
31
- }
32
29
  function m(t) {
33
- return new Map(t.filter((e) => p(e.slug)).map((t) => [e(t.slug), t]));
30
+ return u.has(e(t));
31
+ }
32
+ function h(t) {
33
+ return new Map(t.filter((e) => m(e.slug)).map((t) => [e(t.slug), t]));
34
34
  }
35
- function h(e) {
35
+ function g(e) {
36
36
  if (!e || !e.startsWith("https://") || e.includes("localhost") || e.includes("127.0.0.1")) return !1;
37
37
  try {
38
38
  let t = new URL(e);
@@ -41,7 +41,7 @@ function h(e) {
41
41
  return !1;
42
42
  }
43
43
  }
44
- function g() {
44
+ function _() {
45
45
  return t.map((e) => ({
46
46
  id: e.id,
47
47
  name: e.name,
@@ -52,48 +52,48 @@ function g() {
52
52
  comingSoon: e.comingSoon === !0
53
53
  }));
54
54
  }
55
- function _(c) {
56
- let l = i("global"), [u, p] = s(g()), [_, v] = s(c?.autoFetch !== !1), [y, b] = s(null), x = a(async () => {
57
- v(!0), b(null);
55
+ function v(l) {
56
+ let u = a("global"), [d, m] = c(_()), [v, y] = c(l?.autoFetch !== !1), [b, x] = c(null), S = o(async () => {
57
+ y(!0), x(null);
58
58
  try {
59
- let i = m((await l.query({
60
- query: f,
59
+ let a = h((await u.query({
60
+ query: p,
61
61
  variables: {
62
62
  limit: 50,
63
63
  offset: 0
64
64
  },
65
65
  fetchPolicy: "cache-first"
66
- })).data?.myAccessibleProducts?.items || []), a = t.map((t) => {
67
- let a = i.get(e(t.id));
66
+ })).data?.myAccessibleProducts?.items || []), o = t.map((t) => {
67
+ let o = a.get(e(t.id));
68
68
  return {
69
69
  id: t.id,
70
70
  name: t.name,
71
- url: h(a?.appUrl) ? a.appUrl : r(t.id),
71
+ url: g(o?.appUrl) ? i(o.appUrl) : r(t.id),
72
72
  icon: t.icon,
73
- color: a?.metadata && typeof a.metadata.color == "string" ? a.metadata.color : t.color,
73
+ color: o?.metadata && typeof o.metadata.color == "string" ? o.metadata.color : t.color,
74
74
  logoUrl: n(t.id),
75
- comingSoon: a ? d(t.id, a.status, a.appUrl) : t.comingSoon === !0
75
+ comingSoon: o ? f(t.id, o.status, o.appUrl) : t.comingSoon === !0
76
76
  };
77
77
  });
78
- a.sort((e, t) => e.name.localeCompare(t.name)), p(a);
78
+ o.sort((e, t) => e.name.localeCompare(t.name)), m(o);
79
79
  } catch (e) {
80
- b(e instanceof Error ? e.message : "Failed to fetch products"), p(g());
80
+ x(e instanceof Error ? e.message : "Failed to fetch products"), m(_());
81
81
  } finally {
82
- v(!1);
82
+ y(!1);
83
83
  }
84
- }, [l]);
85
- return o(() => {
86
- if (c?.autoFetch === !1) {
87
- v(!1);
84
+ }, [u]);
85
+ return s(() => {
86
+ if (l?.autoFetch === !1) {
87
+ y(!1);
88
88
  return;
89
89
  }
90
- x();
90
+ S();
91
91
  }, []), {
92
- products: u,
93
- isLoading: _,
94
- error: y,
95
- refetch: x
92
+ products: d,
93
+ isLoading: v,
94
+ error: b,
95
+ refetch: S
96
96
  };
97
97
  }
98
98
  //#endregion
99
- export { _ as useProducts };
99
+ export { v as useProducts };
@@ -0,0 +1,58 @@
1
+ import { KeyboardShortcut } from './types';
2
+ /**
3
+ * The parts of a command-palette action a chord needs. Structurally a subset
4
+ * of `CommandAction` (fe-libs/chrome/CommandPalette), declared here so the
5
+ * keyboard module does not import from chrome.
6
+ */
7
+ export interface CommandChordSource {
8
+ readonly id: string;
9
+ readonly label: string;
10
+ readonly shortcut?: string;
11
+ readonly section?: string;
12
+ readonly hidden?: boolean;
13
+ readonly action: () => void | Promise<void>;
14
+ }
15
+ export interface CommandChordOptions {
16
+ /**
17
+ * Dialog category for chords derived from palette actions. Defaults to
18
+ * 'Navigation'. Pass `null` to use each action's own palette section.
19
+ */
20
+ readonly category?: string | null;
21
+ /**
22
+ * Host-supplied chords that have no palette entry. They are bound and listed
23
+ * exactly like the derived ones, and win over a palette action that uses the
24
+ * same sequence.
25
+ */
26
+ readonly extra?: readonly KeyboardShortcut[];
27
+ }
28
+ /** Prefix of the ids given to chords derived from palette actions. */
29
+ export declare const COMMAND_CHORD_ID_PREFIX = "command-chord:";
30
+ /**
31
+ * True for a key sequence such as "g h" or "g ,"; false for a modifier combo
32
+ * ("mod+shift+k"), a single key ("?") or an empty string.
33
+ */
34
+ export declare function isChordShortcut(shortcut: string | undefined): shortcut is string;
35
+ /**
36
+ * Canonical form of a sequence for comparison: keys normalised the same way
37
+ * `useKeyboardShortcuts` normalises a key press, single-space separated.
38
+ */
39
+ export declare function normalizeChord(shortcut: string): string;
40
+ /**
41
+ * The palette actions that advertise a key sequence, as keyboard shortcuts.
42
+ *
43
+ * Hidden actions are skipped (the palette does not show them, so the dialog
44
+ * must not either). When two actions advertise the same sequence the first one
45
+ * wins and the later one is dropped, so the key can only ever run the action
46
+ * listed first.
47
+ */
48
+ export declare function commandChordShortcuts(actions: readonly CommandChordSource[], options?: Pick<CommandChordOptions, 'category'>): KeyboardShortcut[];
49
+ /**
50
+ * `base` (usually `createGlobalShortcuts(...)`) plus the host's chords: the
51
+ * `extra` chords first, then the ones derived from `actions`.
52
+ *
53
+ * Any `base` shortcut bound to a sequence the host also binds is dropped, so
54
+ * the host's product-aware chord is the only thing that sequence runs and the
55
+ * only row the dialog shows for it. Modifier combos in `base` (search, theme,
56
+ * sidebar, help) are kept unless the host chords happen to reuse their id.
57
+ */
58
+ export declare function withCommandChords(base: readonly KeyboardShortcut[], actions: readonly CommandChordSource[], options?: CommandChordOptions): KeyboardShortcut[];
@@ -0,0 +1,51 @@
1
+ import { isKeySequence as e, normalizeKey as t } from "./utils.js";
2
+ //#region src/shared/keyboard/commandChords.ts
3
+ var n = "command-chord:";
4
+ function r(t) {
5
+ if (!t) return !1;
6
+ let n = t.trim();
7
+ return n.length > 0 && e(n);
8
+ }
9
+ function i(e) {
10
+ return e.trim().split(/\s+/).map((e) => t(e)).join(" ");
11
+ }
12
+ function a(e) {
13
+ return Array.isArray(e) ? e : [
14
+ ...e.mac ?? [],
15
+ ...e.windows ?? [],
16
+ ...e.linux ?? [],
17
+ ...e.default ?? []
18
+ ];
19
+ }
20
+ function o(t) {
21
+ return a(t.keys).filter((n) => e(n) || t.isSequence === !0).map((e) => i(e));
22
+ }
23
+ function s(e, t = {}) {
24
+ let a = t.category === void 0 ? "Navigation" : t.category, o = /* @__PURE__ */ new Set(), s = [];
25
+ for (let t of e) {
26
+ if (t.hidden || !r(t.shortcut)) continue;
27
+ let e = i(t.shortcut);
28
+ if (o.has(e)) continue;
29
+ o.add(e);
30
+ let c = t.action;
31
+ s.push({
32
+ id: `${n}${t.id}`,
33
+ keys: [e],
34
+ description: t.label,
35
+ category: a ?? t.section ?? "Navigation",
36
+ isSequence: !0,
37
+ action: () => {
38
+ Promise.resolve().then(c).catch((n) => {
39
+ console.error(`Command chord "${e}" (${t.id}) failed:`, n);
40
+ });
41
+ }
42
+ });
43
+ }
44
+ return s;
45
+ }
46
+ function c(e, t, n = {}) {
47
+ let r = n.extra ?? [], i = new Set(r.flatMap((e) => o(e))), a = s(t, n).filter((e) => o(e).every((e) => !i.has(e))), c = [...r, ...a], l = new Set(c.flatMap((e) => o(e))), u = new Set(c.map((e) => e.id));
48
+ return [...e.filter((e) => !u.has(e.id) && o(e).every((e) => !l.has(e))), ...c];
49
+ }
50
+ //#endregion
51
+ export { n as COMMAND_CHORD_ID_PREFIX, s as commandChordShortcuts, r as isChordShortcut, i as normalizeChord, c as withCommandChords };
@@ -37,3 +37,5 @@ export { useShortcutHelp } from './useShortcutHelp';
37
37
  export { detectPlatform, isMac, normalizeKey, parseKeyCombo, matchesKeyCombo, formatKeyCombo, normalizePlatformCombo, shouldIgnoreShortcut, getShortcutLabel, getDisplayKeysForPlatform, isMobileDevice, isTabletDevice, } from './utils';
38
38
  export { createGlobalShortcuts, getGlobalShortcutsByCategory, mergeShortcuts, GLOBAL_SHORTCUT_CATEGORIES, } from './globalShortcuts';
39
39
  export type { GlobalShortcutsConfig, GlobalShortcutHandlers } from './globalShortcuts';
40
+ export { commandChordShortcuts, withCommandChords, isChordShortcut, normalizeChord, COMMAND_CHORD_ID_PREFIX, } from './commandChords';
41
+ export type { CommandChordSource, CommandChordOptions } from './commandChords';
@@ -161,5 +161,8 @@ function p(t) {
161
161
  }
162
162
  return f(r);
163
163
  }
164
+ function m(e) {
165
+ return e.includes(" ") && !e.includes("+");
166
+ }
164
167
  //#endregion
165
- export { e as detectPlatform, l as formatKeyCombo, p as getDisplayKeysForPlatform, f as getShortcutLabel, i as isMac, t as isMobileDevice, n as isTabletDevice, c as matchesKeyCombo, a as normalizeKey, u as normalizePlatformCombo, o as parseKeyCombo, r as shouldEnableKeyboardShortcuts, d as shouldIgnoreShortcut };
168
+ export { e as detectPlatform, l as formatKeyCombo, p as getDisplayKeysForPlatform, f as getShortcutLabel, m as isKeySequence, i as isMac, t as isMobileDevice, n as isTabletDevice, c as matchesKeyCombo, a as normalizeKey, u as normalizePlatformCombo, o as parseKeyCombo, r as shouldEnableKeyboardShortcuts, d as shouldIgnoreShortcut };
@@ -1,11 +1,11 @@
1
1
  import { resolveGatewayUrls as e } from "./shared/config/gatewayUrls.js";
2
2
  import { resolveAuthBridgeConfig as t, resolveShellAuthBridgeConfig as n } from "./shared/config/authBridgeUrls.js";
3
3
  import { PRODUCT_SLUG_EMIT as r, PRODUCT_SLUG_RENAMES as i, emitProductSlug as a, isSameProductSlug as o, legacyProductSlug as s, normalizeProductSlug as c } from "./shared/config/productSlug.js";
4
- import { BOTMANOR_PRODUCT_SLUG as l, PRODUCTS as u, PRODUCT_URLS as d, findProductConfig as f, getProductUrl as p, getProductsWithUrls as m } from "./shared/config/products.js";
5
- import { CANONICAL_DOCS_HOSTS as h, buildProductDocsUrl as g, canonicalizeDocsOrigin as _, getCatalogDocsOrigin as v, normalizeDocsPath as y, resolveDocsEnvironment as b, resolveProductDocsOrigin as x, toEnvironmentDocsOrigin as S, toTrustedDocsOrigin as C } from "./shared/config/docsUrls.js";
6
- import { COMMON_SHELL_LESS_ROUTES as w, DEFAULT_SHELL_CONFIG as T, getShellConfig as E, isShellLessRoute as D, shouldShowBreadcrumb as O, shouldShowSidebar as k } from "./shared/config/shellRoutes.js";
4
+ import { BOTMANOR_PRODUCT_SLUG as l, PRODUCTS as u, PRODUCT_URLS as d, findProductConfig as f, getProductUrl as p, getProductsWithUrls as m, isAlphaAppShell as h, toAlphaAppUrl as g, toCurrentEstateAppUrl as _ } from "./shared/config/products.js";
5
+ import { CANONICAL_DOCS_HOSTS as v, buildProductDocsUrl as y, canonicalizeDocsOrigin as b, getCatalogDocsOrigin as x, normalizeDocsPath as S, resolveDocsEnvironment as C, resolveProductDocsOrigin as w, toEnvironmentDocsOrigin as T, toTrustedDocsOrigin as E } from "./shared/config/docsUrls.js";
6
+ import { COMMON_SHELL_LESS_ROUTES as D, DEFAULT_SHELL_CONFIG as O, getShellConfig as k, isShellLessRoute as A, shouldShowBreadcrumb as j, shouldShowSidebar as M } from "./shared/config/shellRoutes.js";
7
7
  //#region src/shared/config/index.ts
8
- var A = 20, j = {
8
+ var N = 20, P = {
9
9
  workspace: {
10
10
  defaultBaseUrl: "https://gw-wspace.local.burdenoff.com",
11
11
  graphql: "/workspaces/graphql",
@@ -18,18 +18,18 @@ var A = 20, j = {
18
18
  ws: "/global/graphql/ws"
19
19
  }
20
20
  };
21
- function M(e, t) {
21
+ function F(e, t) {
22
22
  let n = e.endsWith("/") ? e.slice(0, -1) : e;
23
23
  return t === "workspaces" ? `${n}/workspaces/graphql` : `${n}/global/graphql`;
24
24
  }
25
- function N(e) {
26
- return j[e];
25
+ function I(e) {
26
+ return P[e];
27
27
  }
28
- function P(e, t) {
29
- let n = j[t], r = e || F(t) || n.defaultBaseUrl;
28
+ function L(e, t) {
29
+ let n = P[t], r = e || R(t) || n.defaultBaseUrl;
30
30
  return `${r.endsWith("/") ? r.slice(0, -1) : r}${n.graphql}`;
31
31
  }
32
- function F(t) {
32
+ function R(t) {
33
33
  try {
34
34
  let n = e();
35
35
  return t === "workspace" ? n.workspaceBaseUrl : n.globalBaseUrl;
@@ -38,4 +38,4 @@ function F(t) {
38
38
  }
39
39
  }
40
40
  //#endregion
41
- export { l as BOTMANOR_PRODUCT_SLUG, h as CANONICAL_DOCS_HOSTS, w as COMMON_SHELL_LESS_ROUTES, A as DEFAULT_PAGE_SIZE, T as DEFAULT_SHELL_CONFIG, j as GATEWAYS, u as PRODUCTS, r as PRODUCT_SLUG_EMIT, i as PRODUCT_SLUG_RENAMES, d as PRODUCT_URLS, g as buildProductDocsUrl, _ as canonicalizeDocsOrigin, a as emitProductSlug, f as findProductConfig, v as getCatalogDocsOrigin, N as getGatewayConfig, P as getGatewayUrl, M as getGraphQLEndpoint, p as getProductUrl, m as getProductsWithUrls, E as getShellConfig, o as isSameProductSlug, D as isShellLessRoute, s as legacyProductSlug, y as normalizeDocsPath, c as normalizeProductSlug, t as resolveAuthBridgeConfig, b as resolveDocsEnvironment, e as resolveGatewayUrls, x as resolveProductDocsOrigin, n as resolveShellAuthBridgeConfig, O as shouldShowBreadcrumb, k as shouldShowSidebar, S as toEnvironmentDocsOrigin, C as toTrustedDocsOrigin };
41
+ export { l as BOTMANOR_PRODUCT_SLUG, v as CANONICAL_DOCS_HOSTS, D as COMMON_SHELL_LESS_ROUTES, N as DEFAULT_PAGE_SIZE, O as DEFAULT_SHELL_CONFIG, P as GATEWAYS, u as PRODUCTS, r as PRODUCT_SLUG_EMIT, i as PRODUCT_SLUG_RENAMES, d as PRODUCT_URLS, y as buildProductDocsUrl, b as canonicalizeDocsOrigin, a as emitProductSlug, f as findProductConfig, x as getCatalogDocsOrigin, I as getGatewayConfig, L as getGatewayUrl, F as getGraphQLEndpoint, p as getProductUrl, m as getProductsWithUrls, k as getShellConfig, h as isAlphaAppShell, o as isSameProductSlug, A as isShellLessRoute, s as legacyProductSlug, S as normalizeDocsPath, c as normalizeProductSlug, t as resolveAuthBridgeConfig, C as resolveDocsEnvironment, e as resolveGatewayUrls, w as resolveProductDocsOrigin, n as resolveShellAuthBridgeConfig, j as shouldShowBreadcrumb, M as shouldShowSidebar, g as toAlphaAppUrl, _ as toCurrentEstateAppUrl, T as toEnvironmentDocsOrigin, E as toTrustedDocsOrigin };
@@ -17,32 +17,33 @@ import { useExclusiveMenu as P } from "./shared/hooks/useExclusiveMenu.js";
17
17
  import { useLocalStorage as F } from "./shared/hooks/useLocalStorage.js";
18
18
  import { useSessionStorage as I } from "./shared/hooks/useSessionStorage.js";
19
19
  import { usePrevious as L, usePreviousDistinct as R, usePreviousHistory as z } from "./shared/hooks/usePrevious.js";
20
- import { useConditionalToggle as B, useToggle as V, useToggleObject as te } from "./shared/hooks/useToggle.js";
21
- import { usePagination as H } from "./shared/hooks/usePagination.js";
22
- import { useAsync as U, useAsyncImmediate as W } from "./shared/hooks/useAsync.js";
23
- import { MODIFIER_KEYS as G, PLATFORM_TYPES as K } from "./shared/keyboard/types.js";
20
+ import { useConditionalToggle as B, useToggle as V, useToggleObject as H } from "./shared/hooks/useToggle.js";
21
+ import { usePagination as U } from "./shared/hooks/usePagination.js";
22
+ import { useAsync as W, useAsyncImmediate as G } from "./shared/hooks/useAsync.js";
23
+ import { MODIFIER_KEYS as te, PLATFORM_TYPES as K } from "./shared/keyboard/types.js";
24
24
  import { useKeyboardShortcuts as q } from "./shared/keyboard/useKeyboardShortcuts.js";
25
25
  import { useHotkeys as J } from "./shared/keyboard/useHotkeys.js";
26
26
  import { useShortcutHelp as Y } from "./shared/keyboard/useShortcutHelp.js";
27
27
  import { GLOBAL_SHORTCUT_CATEGORIES as X, createGlobalShortcuts as Z, getGlobalShortcutsByCategory as Q, mergeShortcuts as ne } from "./shared/keyboard/globalShortcuts.js";
28
+ import { COMMAND_CHORD_ID_PREFIX as re, commandChordShortcuts as ie, isChordShortcut as ae, normalizeChord as oe, withCommandChords as se } from "./shared/keyboard/commandChords.js";
28
29
  import "./shared-keyboard.js";
29
- import { useLogger as re } from "./shared/logger/useLogger.js";
30
+ import { useLogger as ce } from "./shared/logger/useLogger.js";
30
31
  import "./shared-logger.js";
31
- import { useHasAnimated as ie } from "./shared/hooks/useHasAnimated.js";
32
- import { useReferralAttribution as ae } from "./shared/hooks/useReferralAttribution.js";
33
- import { useRecordProductVisit as oe } from "./shared/hooks/useRecordProductVisit.js";
34
- import { usePushDeviceRegistration as se } from "./shared/hooks/usePushDeviceRegistration.js";
35
- import { QUOTA_EXHAUSTED_EVENT as ce, dispatchQuotaExhausted as le, useQuotaErrorToast as ue } from "./shared/hooks/useQuotaErrorToast.js";
36
- import { PLAN_USAGE_SNAPSHOT_EVENT as de, publishPlanUsageSnapshot as fe, useUpgradePrompt as pe } from "./shared/hooks/useUpgradePrompt.js";
37
- import { appendContextToPath as me, useCurrentContextSearchParams as he } from "./shared/hooks/useCurrentContextSearchParams.js";
38
- import { UNSAVED_CHANGE_LABEL_MAX as ge, listUnsavedChanges as _e, registerUnsavedChange as ve, unsavedChangesBlocking as ye, useUnsavedChanges as be } from "./shared/navigation/unsavedChanges.js";
39
- import xe, { use as Se } from "react";
32
+ import { useHasAnimated as le } from "./shared/hooks/useHasAnimated.js";
33
+ import { useReferralAttribution as ue } from "./shared/hooks/useReferralAttribution.js";
34
+ import { useRecordProductVisit as de } from "./shared/hooks/useRecordProductVisit.js";
35
+ import { usePushDeviceRegistration as fe } from "./shared/hooks/usePushDeviceRegistration.js";
36
+ import { QUOTA_EXHAUSTED_EVENT as pe, dispatchQuotaExhausted as me, useQuotaErrorToast as he } from "./shared/hooks/useQuotaErrorToast.js";
37
+ import { PLAN_USAGE_SNAPSHOT_EVENT as ge, publishPlanUsageSnapshot as _e, useUpgradePrompt as ve } from "./shared/hooks/useUpgradePrompt.js";
38
+ import { appendContextToPath as ye, useCurrentContextSearchParams as be } from "./shared/hooks/useCurrentContextSearchParams.js";
39
+ import { UNSAVED_CHANGE_LABEL_MAX as xe, listUnsavedChanges as Se, registerUnsavedChange as Ce, unsavedChangesBlocking as we, useUnsavedChanges as Te } from "./shared/navigation/unsavedChanges.js";
40
+ import Ee, { use as De } from "react";
40
41
  //#region src/shared/hooks/index.ts
41
- var $ = xe.createContext(null);
42
- function Ce() {
43
- let e = Se($);
42
+ var $ = Ee.createContext(null);
43
+ function Oe() {
44
+ let e = De($);
44
45
  if (!e) throw Error("useMicrofrontendContext must be used within a MicrofrontendProvider");
45
46
  return e;
46
47
  }
47
48
  //#endregion
48
- export { D as BREAKPOINTS, a as ConsoleTransport, X as GLOBAL_SHORTCUT_CATEGORIES, n as LogLevel, r as LogManager, ee as Logger, G as MODIFIER_KEYS, $ as MicrofrontendContext, de as PLAN_USAGE_SNAPSHOT_EVENT, K as PLATFORM_TYPES, s as PUSH_DEVICE_ID_STORAGE_KEY, ce as QUOTA_EXHAUSTED_EVENT, ge as UNSAVED_CHANGE_LABEL_MAX, me as appendContextToPath, Z as createGlobalShortcuts, f as detectPlatform, le as dispatchQuotaExhausted, p as formatKeyCombo, m as getDisplayKeysForPlatform, Q as getGlobalShortcutsByCategory, c as getOrCreatePushDeviceId, h as getShortcutLabel, g as isMac, _ as isMobileDevice, v as isTabletDevice, _e as listUnsavedChanges, i as logManager, y as matchesKeyCombo, ne as mergeShortcuts, b as normalizeKey, x as normalizePlatformCombo, S as parseKeyCombo, fe as publishPlanUsageSnapshot, l as registerPushDevice, ve as registerUnsavedChange, C as shouldEnableKeyboardShortcuts, w as shouldIgnoreShortcut, u as unregisterPushDevice, ye as unsavedChangesBlocking, U as useAsync, W as useAsyncImmediate, O as useBreakpoint, B as useConditionalToggle, e as useCopyToClipboard, he as useCurrentContextSearchParams, T as useDebounce, P as useExclusiveMenu, ie as useHasAnimated, J as useHotkeys, M as useKeyPress, N as useKeyboardShortcut, q as useKeyboardShortcuts, F as useLocalStorage, re as useLogger, t as useMediaQuery, Ce as useMicrofrontendContext, k as useMobileBreakpoint, A as useOnClickOutside, j as useOnClickOutsideWithRef, d as usePWA, H as usePagination, L as usePrevious, R as usePreviousDistinct, z as usePreviousHistory, se as usePushDeviceRegistration, ue as useQuotaErrorToast, oe as useRecordProductVisit, ae as useReferralAttribution, o as useReturnFocus, I as useSessionStorage, Y as useShortcutHelp, E as useThrottle, V as useToggle, te as useToggleObject, be as useUnsavedChanges, pe as useUpgradePrompt };
49
+ export { D as BREAKPOINTS, re as COMMAND_CHORD_ID_PREFIX, a as ConsoleTransport, X as GLOBAL_SHORTCUT_CATEGORIES, n as LogLevel, r as LogManager, ee as Logger, te as MODIFIER_KEYS, $ as MicrofrontendContext, ge as PLAN_USAGE_SNAPSHOT_EVENT, K as PLATFORM_TYPES, s as PUSH_DEVICE_ID_STORAGE_KEY, pe as QUOTA_EXHAUSTED_EVENT, xe as UNSAVED_CHANGE_LABEL_MAX, ye as appendContextToPath, ie as commandChordShortcuts, Z as createGlobalShortcuts, f as detectPlatform, me as dispatchQuotaExhausted, p as formatKeyCombo, m as getDisplayKeysForPlatform, Q as getGlobalShortcutsByCategory, c as getOrCreatePushDeviceId, h as getShortcutLabel, ae as isChordShortcut, g as isMac, _ as isMobileDevice, v as isTabletDevice, Se as listUnsavedChanges, i as logManager, y as matchesKeyCombo, ne as mergeShortcuts, oe as normalizeChord, b as normalizeKey, x as normalizePlatformCombo, S as parseKeyCombo, _e as publishPlanUsageSnapshot, l as registerPushDevice, Ce as registerUnsavedChange, C as shouldEnableKeyboardShortcuts, w as shouldIgnoreShortcut, u as unregisterPushDevice, we as unsavedChangesBlocking, W as useAsync, G as useAsyncImmediate, O as useBreakpoint, B as useConditionalToggle, e as useCopyToClipboard, be as useCurrentContextSearchParams, T as useDebounce, P as useExclusiveMenu, le as useHasAnimated, J as useHotkeys, M as useKeyPress, N as useKeyboardShortcut, q as useKeyboardShortcuts, F as useLocalStorage, ce as useLogger, t as useMediaQuery, Oe as useMicrofrontendContext, k as useMobileBreakpoint, A as useOnClickOutside, j as useOnClickOutsideWithRef, d as usePWA, U as usePagination, L as usePrevious, R as usePreviousDistinct, z as usePreviousHistory, fe as usePushDeviceRegistration, he as useQuotaErrorToast, de as useRecordProductVisit, ue as useReferralAttribution, o as useReturnFocus, I as useSessionStorage, Y as useShortcutHelp, E as useThrottle, V as useToggle, H as useToggleObject, Te as useUnsavedChanges, ve as useUpgradePrompt, se as withCommandChords };
@@ -4,4 +4,5 @@ import { useKeyboardShortcut as h, useKeyboardShortcuts as g } from "./shared/ke
4
4
  import { useHotkeys as _ } from "./shared/keyboard/useHotkeys.js";
5
5
  import { useShortcutHelp as v } from "./shared/keyboard/useShortcutHelp.js";
6
6
  import { GLOBAL_SHORTCUT_CATEGORIES as y, createGlobalShortcuts as b, getGlobalShortcutsByCategory as x, mergeShortcuts as S } from "./shared/keyboard/globalShortcuts.js";
7
- export { y as GLOBAL_SHORTCUT_CATEGORIES, p as MODIFIER_KEYS, m as PLATFORM_TYPES, b as createGlobalShortcuts, e as detectPlatform, t as formatKeyCombo, n as getDisplayKeysForPlatform, x as getGlobalShortcutsByCategory, r as getShortcutLabel, i as isMac, a as isMobileDevice, o as isTabletDevice, s as matchesKeyCombo, S as mergeShortcuts, c as normalizeKey, l as normalizePlatformCombo, u as parseKeyCombo, d as shouldEnableKeyboardShortcuts, f as shouldIgnoreShortcut, _ as useHotkeys, h as useKeyboardShortcut, g as useKeyboardShortcuts, v as useShortcutHelp };
7
+ import { COMMAND_CHORD_ID_PREFIX as C, commandChordShortcuts as w, isChordShortcut as T, normalizeChord as E, withCommandChords as D } from "./shared/keyboard/commandChords.js";
8
+ export { C as COMMAND_CHORD_ID_PREFIX, y as GLOBAL_SHORTCUT_CATEGORIES, p as MODIFIER_KEYS, m as PLATFORM_TYPES, w as commandChordShortcuts, b as createGlobalShortcuts, e as detectPlatform, t as formatKeyCombo, n as getDisplayKeysForPlatform, x as getGlobalShortcutsByCategory, r as getShortcutLabel, T as isChordShortcut, i as isMac, a as isMobileDevice, o as isTabletDevice, s as matchesKeyCombo, S as mergeShortcuts, E as normalizeChord, c as normalizeKey, l as normalizePlatformCombo, u as parseKeyCombo, d as shouldEnableKeyboardShortcuts, f as shouldIgnoreShortcut, _ as useHotkeys, h as useKeyboardShortcut, g as useKeyboardShortcuts, v as useShortcutHelp, D as withCommandChords };