@ai-matrx/context-menu 0.1.9 → 0.1.11

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 (70) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/builder.cjs +17 -18
  3. package/dist/builder.cjs.map +1 -1
  4. package/dist/builder.js +2 -3
  5. package/dist/builder.js.map +1 -1
  6. package/dist/{chunk-ECKA474B.js → chunk-2B37SXQW.js} +21 -12
  7. package/dist/chunk-2B37SXQW.js.map +1 -0
  8. package/dist/{chunk-TSOUI723.cjs → chunk-7TIZAANU.cjs} +26 -11
  9. package/dist/chunk-7TIZAANU.cjs.map +1 -0
  10. package/dist/{chunk-A24SBKSA.js → chunk-EG23Y2KW.js} +14 -13
  11. package/dist/{chunk-A24SBKSA.js.map → chunk-EG23Y2KW.js.map} +1 -1
  12. package/dist/{chunk-7VDSMZWI.cjs → chunk-ERFH2RZC.cjs} +18 -17
  13. package/dist/chunk-ERFH2RZC.cjs.map +1 -0
  14. package/dist/{chunk-EIP5YS4Y.js → chunk-HJU3RU2B.js} +27 -12
  15. package/dist/chunk-HJU3RU2B.js.map +1 -0
  16. package/dist/{chunk-SWEWOUHK.cjs → chunk-IH5WN5JP.cjs} +31 -26
  17. package/dist/chunk-IH5WN5JP.cjs.map +1 -0
  18. package/dist/{chunk-QXHLM7SS.cjs → chunk-LDMYNYFC.cjs} +42 -33
  19. package/dist/chunk-LDMYNYFC.cjs.map +1 -0
  20. package/dist/{chunk-ANJYKQAA.cjs → chunk-MBU4Y22O.cjs} +3 -3
  21. package/dist/{chunk-ANJYKQAA.cjs.map → chunk-MBU4Y22O.cjs.map} +1 -1
  22. package/dist/{chunk-L6DPISFT.js → chunk-NBEXJ25Z.js} +24 -19
  23. package/dist/{chunk-L6DPISFT.js.map → chunk-NBEXJ25Z.js.map} +1 -1
  24. package/dist/{chunk-LE6ZUVCO.js → chunk-PB3PMDKV.js} +2 -2
  25. package/dist/{chunk-NOYMFNSU.js → chunk-SJWKMZEJ.js} +33 -12
  26. package/dist/chunk-SJWKMZEJ.js.map +1 -0
  27. package/dist/{chunk-XERD2YCJ.cjs → chunk-WROBL3DR.cjs} +32 -11
  28. package/dist/chunk-WROBL3DR.cjs.map +1 -0
  29. package/dist/design-store.cjs +0 -1
  30. package/dist/design-store.cjs.map +1 -1
  31. package/dist/design-store.js +0 -1
  32. package/dist/design-store.js.map +1 -1
  33. package/dist/engine.cjs +64 -96
  34. package/dist/engine.cjs.map +1 -1
  35. package/dist/engine.d.cts +7 -7
  36. package/dist/engine.d.ts +7 -7
  37. package/dist/engine.js +72 -104
  38. package/dist/engine.js.map +1 -1
  39. package/dist/index.cjs +3 -4
  40. package/dist/index.cjs.map +1 -1
  41. package/dist/index.js +2 -3
  42. package/dist/menu-content.cjs +18 -19
  43. package/dist/menu-content.cjs.map +1 -1
  44. package/dist/menu-content.js +4 -5
  45. package/dist/menu-content.js.map +1 -1
  46. package/dist/menu-inspect.cjs +0 -1
  47. package/dist/menu-inspect.cjs.map +1 -1
  48. package/dist/menu-inspect.js +0 -1
  49. package/dist/menu-inspect.js.map +1 -1
  50. package/dist/model.cjs +4 -5
  51. package/dist/model.cjs.map +1 -1
  52. package/dist/model.js +3 -4
  53. package/dist/react.cjs +52 -44
  54. package/dist/react.cjs.map +1 -1
  55. package/dist/react.js +30 -22
  56. package/dist/react.js.map +1 -1
  57. package/package.json +6 -6
  58. package/dist/chunk-7VDSMZWI.cjs.map +0 -1
  59. package/dist/chunk-CUODNUAD.cjs +0 -24
  60. package/dist/chunk-CUODNUAD.cjs.map +0 -1
  61. package/dist/chunk-ECKA474B.js.map +0 -1
  62. package/dist/chunk-EIP5YS4Y.js.map +0 -1
  63. package/dist/chunk-NOYMFNSU.js.map +0 -1
  64. package/dist/chunk-PE3ZHHM5.js +0 -24
  65. package/dist/chunk-PE3ZHHM5.js.map +0 -1
  66. package/dist/chunk-QXHLM7SS.cjs.map +0 -1
  67. package/dist/chunk-SWEWOUHK.cjs.map +0 -1
  68. package/dist/chunk-TSOUI723.cjs.map +0 -1
  69. package/dist/chunk-XERD2YCJ.cjs.map +0 -1
  70. /package/dist/{chunk-LE6ZUVCO.js.map → chunk-PB3PMDKV.js.map} +0 -0
@@ -5,7 +5,7 @@ import {
5
5
  } from "./chunk-63WDXKZ7.js";
6
6
  import {
7
7
  MenuPanel
8
- } from "./chunk-ECKA474B.js";
8
+ } from "./chunk-2B37SXQW.js";
9
9
 
10
10
  // src/design/catalog.ts
11
11
  var o = (id, label, icon, group, extra = {}) => ({ id, label, icon, group, status: "live", ...extra });
@@ -354,4 +354,4 @@ export {
354
354
  slotOptions,
355
355
  MenuPreview
356
356
  };
357
- //# sourceMappingURL=chunk-LE6ZUVCO.js.map
357
+ //# sourceMappingURL=chunk-PB3PMDKV.js.map
@@ -1,17 +1,26 @@
1
1
  "use client";
2
- import {
3
- __reExport
4
- } from "./chunk-PE3ZHHM5.js";
5
2
 
6
3
  // src/engine/types.ts
7
- var types_exports = {};
8
- __reExport(types_exports, types_star);
9
- import * as types_star from "@ai-matrx/chat/context-menu/types";
4
+ import {
5
+ CANONICAL_MENU_VERSION_V3,
6
+ CONTEXT_MENU_ENTITY_KEY,
7
+ CONTEXT_MENU_HEADING_KEY,
8
+ DEFAULT_MENU_DENSITY,
9
+ DEFAULT_MENU_LAYOUT
10
+ } from "@ai-matrx/chat/context-menu/types";
10
11
 
11
12
  // src/engine/utils/selection-tracking.ts
12
- var selection_tracking_exports = {};
13
- __reExport(selection_tracking_exports, selection_tracking_star);
14
- import * as selection_tracking_star from "@ai-matrx/chat/context-menu/utils/selection-tracking";
13
+ import {
14
+ captureDomSelection,
15
+ captureTextareaSelection,
16
+ extractElementText,
17
+ getEditableSelectionOffsets,
18
+ getSelectionRect,
19
+ mouseFallbackRect,
20
+ restoreDomSelection,
21
+ restoreTextareaSelection,
22
+ spliceInputValue
23
+ } from "@ai-matrx/chat/context-menu/utils/selection-tracking";
15
24
 
16
25
  // src/engine/utils/key-combo.ts
17
26
  var MOD_ALIASES = {
@@ -77,11 +86,23 @@ function compact(value) {
77
86
  }
78
87
 
79
88
  export {
80
- types_exports,
81
- selection_tracking_exports,
89
+ CANONICAL_MENU_VERSION_V3,
90
+ CONTEXT_MENU_ENTITY_KEY,
91
+ CONTEXT_MENU_HEADING_KEY,
92
+ DEFAULT_MENU_DENSITY,
93
+ DEFAULT_MENU_LAYOUT,
94
+ captureDomSelection,
95
+ captureTextareaSelection,
96
+ extractElementText,
97
+ getEditableSelectionOffsets,
98
+ getSelectionRect,
99
+ mouseFallbackRect,
100
+ restoreDomSelection,
101
+ restoreTextareaSelection,
102
+ spliceInputValue,
82
103
  compact,
83
104
  parseKeyCombo,
84
105
  eventMatchesCombo,
85
106
  findComboMatch
86
107
  };
87
- //# sourceMappingURL=chunk-NOYMFNSU.js.map
108
+ //# sourceMappingURL=chunk-SJWKMZEJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/engine/types.ts","../src/engine/utils/selection-tracking.ts","../src/engine/utils/key-combo.ts","../src/engine/utils/compact.ts"],"sourcesContent":["import \"./host-types\";\nimport \"../designed/menu-design-prop\";\n// Named, never `export *`: the bundler (esbuild) cannot see through a nested\n// `export * from \"<external>\"`, so the names went missing from the ESM entry and\n// every internal reader went through a runtime namespace copy (a TDZ under ts-jest).\nexport {\n CANONICAL_MENU_VERSION_V3,\n CONTEXT_MENU_ENTITY_KEY,\n CONTEXT_MENU_HEADING_KEY,\n DEFAULT_MENU_DENSITY,\n DEFAULT_MENU_LAYOUT,\n} from \"@ai-matrx/chat/context-menu/types\";\nexport type {\n ContentSource,\n ContextMenuContextData,\n ContextMenuDensity,\n ContextMenuEntityRef,\n ContextMenuExtraItem,\n ContextMenuExtraSection,\n ContextMenuHeading,\n ContextMenuHostTypes,\n ContextMenuIcon,\n ContextMenuLayout,\n ContextMenuV3CoreProps,\n ContextMenuV3Props,\n EditableContextMenuExtras,\n EditableContextMenuProps,\n ExtraSectionAnchor,\n MenuContentProps,\n MenuVariant,\n NonEditableContextMenuProps,\n PlacementKey,\n PlacementMode,\n PlacementVisibility,\n ResolvedContextMenuContext,\n ResourceType,\n RichDocumentAction,\n RichDocumentActionContext,\n} from \"@ai-matrx/chat/context-menu/types\";\n","// Named, never `export *`: the bundler (esbuild) cannot see through a nested\n// `export * from \"<external>\"`, so the names went missing from the ESM entry and\n// every internal reader went through a runtime namespace copy (a TDZ under ts-jest).\nexport {\n captureDomSelection,\n captureTextareaSelection,\n extractElementText,\n getEditableSelectionOffsets,\n getSelectionRect,\n mouseFallbackRect,\n restoreDomSelection,\n restoreTextareaSelection,\n spliceInputValue,\n} from \"@ai-matrx/chat/context-menu/utils/selection-tracking\";\nexport type {\n CapturedSelection,\n EditableSelectionRange,\n NonEditableSelectionRange,\n SelectionRange,\n} from \"@ai-matrx/chat/context-menu/utils/selection-tracking\";\n","// features/context-menu-v3/utils/key-combo.ts\n//\n// THE ONE READER OF A SHORTCUT'S ADVERTISED KEY COMBO (\"Alt+Shift+S\").\n//\n// The menu prints `keyboard_shortcut` beside an item; the shell's key listener\n// runs it. Both read the combo HERE, so an advertised combo either runs or is\n// not shown (`parseKeyCombo` returns null → the menu draws no hint).\n//\n// MATCH ON `code`, NEVER `key`: on macOS Option rewrites the character —\n// Alt+Shift+S arrives as `key: \"Í\"`, `code: \"KeyS\"` (2026-10-02 → 10-05, the\n// advertised combo did nothing on /notes).\n\nexport interface KeyCombo {\n alt: boolean;\n shift: boolean;\n ctrl: boolean;\n meta: boolean;\n /** `KeyboardEvent.code` for letters/digits (\"KeyS\", \"Digit1\"), else null. */\n code: string | null;\n /** Lowercased `KeyboardEvent.key` for named keys (\"enter\", \"/\"), else null. */\n key: string | null;\n}\n\nconst MOD_ALIASES: Record<string, keyof Pick<KeyCombo, \"alt\" | \"shift\" | \"ctrl\" | \"meta\"> | \"mod\"> = {\n alt: \"alt\",\n option: \"alt\",\n opt: \"alt\",\n \"⌥\": \"alt\",\n shift: \"shift\",\n \"⇧\": \"shift\",\n ctrl: \"ctrl\",\n control: \"ctrl\",\n \"⌃\": \"ctrl\",\n cmd: \"meta\",\n command: \"meta\",\n meta: \"meta\",\n \"⌘\": \"meta\",\n win: \"meta\",\n mod: \"mod\",\n};\n\nfunction isApplePlatform(): boolean {\n if (typeof navigator === \"undefined\") return false;\n return /mac|iphone|ipad|ipod/i.test(navigator.platform || navigator.userAgent || \"\");\n}\n\n/**\n * Parse an advertised combo. Null when it cannot be a combo this listener can\n * honour: no non-Shift modifier (plain typing), or no key.\n */\nexport function parseKeyCombo(raw: string | null | undefined): KeyCombo | null {\n if (!raw) return null;\n const parts = raw\n .split(/\\s*\\+\\s*/)\n .map((p) => p.trim())\n .filter(Boolean);\n if (parts.length < 2) return null;\n const combo: KeyCombo = { alt: false, shift: false, ctrl: false, meta: false, code: null, key: null };\n const last = parts[parts.length - 1]!;\n for (const part of parts.slice(0, -1)) {\n const mod = MOD_ALIASES[part.toLowerCase()];\n if (!mod) return null;\n if (mod === \"mod\") combo[isApplePlatform() ? \"meta\" : \"ctrl\"] = true;\n else combo[mod] = true;\n }\n if (/^[a-z]$/i.test(last)) combo.code = `Key${last.toUpperCase()}`;\n else if (/^[0-9]$/.test(last)) combo.code = `Digit${last}`;\n else combo.key = last.toLowerCase();\n if (!combo.alt && !combo.ctrl && !combo.meta) return null;\n // ⌘/Ctrl+Shift+K opens the palette on every surface (ContextMenuV3); a\n // shortcut cannot take the platform's key, so it is not advertised either.\n if ((combo.ctrl || combo.meta) && combo.shift && !combo.alt && combo.code === \"KeyK\") return null;\n return combo;\n}\n\ntype KeyEventLike = Pick<KeyboardEvent, \"altKey\" | \"shiftKey\" | \"ctrlKey\" | \"metaKey\" | \"code\" | \"key\">;\n\nexport function eventMatchesCombo(e: KeyEventLike, combo: KeyCombo): boolean {\n if (!!e.altKey !== combo.alt || !!e.shiftKey !== combo.shift) return false;\n if (!!e.ctrlKey !== combo.ctrl || !!e.metaKey !== combo.meta) return false;\n if (combo.code) return e.code === combo.code;\n return !!combo.key && (e.key ?? \"\").toLowerCase() === combo.key;\n}\n\n/** First item whose advertised combo this key event presses. */\nexport function findComboMatch<T>(\n e: KeyEventLike,\n items: readonly T[],\n comboOf: (item: T) => string | null | undefined,\n): T | null {\n if (!e.altKey && !e.ctrlKey && !e.metaKey) return null;\n for (const item of items) {\n const combo = parseKeyCombo(comboOf(item));\n if (combo && eventMatchesCombo(e, combo)) return item;\n }\n return null;\n}\n","/**\n * Drops the keys whose value is `undefined`, so an object assembled from\n * maybe-present values satisfies a target whose optional properties do not\n * accept `undefined` (`exactOptionalPropertyTypes`). Reading any dropped key\n * still yields `undefined` — the only difference is `\"key\" in obj`.\n */\ntype Present<T> = { [K in keyof T as undefined extends T[K] ? never : K]: T[K] };\ntype Maybe<T> = { [K in keyof T as undefined extends T[K] ? K : never]?: Exclude<T[K], undefined> };\nexport type Compact<T> = Present<T> & Maybe<T>;\n\nexport function compact<T extends object>(value: T): Compact<T> {\n const out: Record<string, unknown> = {};\n for (const [key, v] of Object.entries(value)) if (v !== undefined) out[key] = v;\n return out as Compact<T>;\n}\n"],"mappings":";;;AAKA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;;;ACRP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;;;ACUP,IAAM,cAA+F;AAAA,EACnG,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,UAAK;AAAA,EACL,OAAO;AAAA,EACP,UAAK;AAAA,EACL,MAAM;AAAA,EACN,SAAS;AAAA,EACT,UAAK;AAAA,EACL,KAAK;AAAA,EACL,SAAS;AAAA,EACT,MAAM;AAAA,EACN,UAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AACP;AAEA,SAAS,kBAA2B;AAClC,MAAI,OAAO,cAAc,YAAa,QAAO;AAC7C,SAAO,wBAAwB,KAAK,UAAU,YAAY,UAAU,aAAa,EAAE;AACrF;AAMO,SAAS,cAAc,KAAiD;AAC7E,MAAI,CAAC,IAAK,QAAO;AACjB,QAAM,QAAQ,IACX,MAAM,UAAU,EAChB,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EACnB,OAAO,OAAO;AACjB,MAAI,MAAM,SAAS,EAAG,QAAO;AAC7B,QAAM,QAAkB,EAAE,KAAK,OAAO,OAAO,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,MAAM,KAAK,KAAK;AACpG,QAAM,OAAO,MAAM,MAAM,SAAS,CAAC;AACnC,aAAW,QAAQ,MAAM,MAAM,GAAG,EAAE,GAAG;AACrC,UAAM,MAAM,YAAY,KAAK,YAAY,CAAC;AAC1C,QAAI,CAAC,IAAK,QAAO;AACjB,QAAI,QAAQ,MAAO,OAAM,gBAAgB,IAAI,SAAS,MAAM,IAAI;AAAA,QAC3D,OAAM,GAAG,IAAI;AAAA,EACpB;AACA,MAAI,WAAW,KAAK,IAAI,EAAG,OAAM,OAAO,MAAM,KAAK,YAAY,CAAC;AAAA,WACvD,UAAU,KAAK,IAAI,EAAG,OAAM,OAAO,QAAQ,IAAI;AAAA,MACnD,OAAM,MAAM,KAAK,YAAY;AAClC,MAAI,CAAC,MAAM,OAAO,CAAC,MAAM,QAAQ,CAAC,MAAM,KAAM,QAAO;AAGrD,OAAK,MAAM,QAAQ,MAAM,SAAS,MAAM,SAAS,CAAC,MAAM,OAAO,MAAM,SAAS,OAAQ,QAAO;AAC7F,SAAO;AACT;AAIO,SAAS,kBAAkB,GAAiB,OAA0B;AAC3E,MAAI,CAAC,CAAC,EAAE,WAAW,MAAM,OAAO,CAAC,CAAC,EAAE,aAAa,MAAM,MAAO,QAAO;AACrE,MAAI,CAAC,CAAC,EAAE,YAAY,MAAM,QAAQ,CAAC,CAAC,EAAE,YAAY,MAAM,KAAM,QAAO;AACrE,MAAI,MAAM,KAAM,QAAO,EAAE,SAAS,MAAM;AACxC,SAAO,CAAC,CAAC,MAAM,QAAQ,EAAE,OAAO,IAAI,YAAY,MAAM,MAAM;AAC9D;AAGO,SAAS,eACd,GACA,OACA,SACU;AACV,MAAI,CAAC,EAAE,UAAU,CAAC,EAAE,WAAW,CAAC,EAAE,QAAS,QAAO;AAClD,aAAW,QAAQ,OAAO;AACxB,UAAM,QAAQ,cAAc,QAAQ,IAAI,CAAC;AACzC,QAAI,SAAS,kBAAkB,GAAG,KAAK,EAAG,QAAO;AAAA,EACnD;AACA,SAAO;AACT;;;ACtFO,SAAS,QAA0B,OAAsB;AAC9D,QAAM,MAA+B,CAAC;AACtC,aAAW,CAAC,KAAK,CAAC,KAAK,OAAO,QAAQ,KAAK,EAAG,KAAI,MAAM,OAAW,KAAI,GAAG,IAAI;AAC9E,SAAO;AACT;","names":[]}
@@ -1,17 +1,26 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }"use client";
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }"use client";
2
+
3
+ // src/engine/types.ts
4
+
2
5
 
3
6
 
4
- var _chunkCUODNUADcjs = require('./chunk-CUODNUAD.cjs');
5
7
 
6
- // src/engine/types.ts
7
- var types_exports = {};
8
- _chunkCUODNUADcjs.__reExport.call(void 0, types_exports, types_star);
9
- var _types = require('@ai-matrx/chat/context-menu/types'); var types_star = _interopRequireWildcard(_types);
8
+
9
+
10
+ var _types = require('@ai-matrx/chat/context-menu/types');
10
11
 
11
12
  // src/engine/utils/selection-tracking.ts
12
- var selection_tracking_exports = {};
13
- _chunkCUODNUADcjs.__reExport.call(void 0, selection_tracking_exports, selection_tracking_star);
14
- var _selectiontracking = require('@ai-matrx/chat/context-menu/utils/selection-tracking'); var selection_tracking_star = _interopRequireWildcard(_selectiontracking);
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+ var _selectiontracking = require('@ai-matrx/chat/context-menu/utils/selection-tracking');
15
24
 
16
25
  // src/engine/utils/key-combo.ts
17
26
  var MOD_ALIASES = {
@@ -83,5 +92,17 @@ function compact(value) {
83
92
 
84
93
 
85
94
 
86
- exports.types_exports = types_exports; exports.selection_tracking_exports = selection_tracking_exports; exports.compact = compact; exports.parseKeyCombo = parseKeyCombo; exports.eventMatchesCombo = eventMatchesCombo; exports.findComboMatch = findComboMatch;
87
- //# sourceMappingURL=chunk-XERD2YCJ.cjs.map
95
+
96
+
97
+
98
+
99
+
100
+
101
+
102
+
103
+
104
+
105
+
106
+
107
+ exports.CANONICAL_MENU_VERSION_V3 = _types.CANONICAL_MENU_VERSION_V3; exports.CONTEXT_MENU_ENTITY_KEY = _types.CONTEXT_MENU_ENTITY_KEY; exports.CONTEXT_MENU_HEADING_KEY = _types.CONTEXT_MENU_HEADING_KEY; exports.DEFAULT_MENU_DENSITY = _types.DEFAULT_MENU_DENSITY; exports.DEFAULT_MENU_LAYOUT = _types.DEFAULT_MENU_LAYOUT; exports.captureDomSelection = _selectiontracking.captureDomSelection; exports.captureTextareaSelection = _selectiontracking.captureTextareaSelection; exports.extractElementText = _selectiontracking.extractElementText; exports.getEditableSelectionOffsets = _selectiontracking.getEditableSelectionOffsets; exports.getSelectionRect = _selectiontracking.getSelectionRect; exports.mouseFallbackRect = _selectiontracking.mouseFallbackRect; exports.restoreDomSelection = _selectiontracking.restoreDomSelection; exports.restoreTextareaSelection = _selectiontracking.restoreTextareaSelection; exports.spliceInputValue = _selectiontracking.spliceInputValue; exports.compact = compact; exports.parseKeyCombo = parseKeyCombo; exports.eventMatchesCombo = eventMatchesCombo; exports.findComboMatch = findComboMatch;
108
+ //# sourceMappingURL=chunk-WROBL3DR.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/aidream/aidream/apps/shared/context-menu/dist/chunk-WROBL3DR.cjs","../src/engine/types.ts","../src/engine/utils/selection-tracking.ts","../src/engine/utils/key-combo.ts","../src/engine/utils/compact.ts"],"names":[],"mappings":"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","file":"/home/runner/work/aidream/aidream/apps/shared/context-menu/dist/chunk-WROBL3DR.cjs","sourcesContent":[null,"import \"./host-types\";\nimport \"../designed/menu-design-prop\";\n// Named, never `export *`: the bundler (esbuild) cannot see through a nested\n// `export * from \"<external>\"`, so the names went missing from the ESM entry and\n// every internal reader went through a runtime namespace copy (a TDZ under ts-jest).\nexport {\n CANONICAL_MENU_VERSION_V3,\n CONTEXT_MENU_ENTITY_KEY,\n CONTEXT_MENU_HEADING_KEY,\n DEFAULT_MENU_DENSITY,\n DEFAULT_MENU_LAYOUT,\n} from \"@ai-matrx/chat/context-menu/types\";\nexport type {\n ContentSource,\n ContextMenuContextData,\n ContextMenuDensity,\n ContextMenuEntityRef,\n ContextMenuExtraItem,\n ContextMenuExtraSection,\n ContextMenuHeading,\n ContextMenuHostTypes,\n ContextMenuIcon,\n ContextMenuLayout,\n ContextMenuV3CoreProps,\n ContextMenuV3Props,\n EditableContextMenuExtras,\n EditableContextMenuProps,\n ExtraSectionAnchor,\n MenuContentProps,\n MenuVariant,\n NonEditableContextMenuProps,\n PlacementKey,\n PlacementMode,\n PlacementVisibility,\n ResolvedContextMenuContext,\n ResourceType,\n RichDocumentAction,\n RichDocumentActionContext,\n} from \"@ai-matrx/chat/context-menu/types\";\n","// Named, never `export *`: the bundler (esbuild) cannot see through a nested\n// `export * from \"<external>\"`, so the names went missing from the ESM entry and\n// every internal reader went through a runtime namespace copy (a TDZ under ts-jest).\nexport {\n captureDomSelection,\n captureTextareaSelection,\n extractElementText,\n getEditableSelectionOffsets,\n getSelectionRect,\n mouseFallbackRect,\n restoreDomSelection,\n restoreTextareaSelection,\n spliceInputValue,\n} from \"@ai-matrx/chat/context-menu/utils/selection-tracking\";\nexport type {\n CapturedSelection,\n EditableSelectionRange,\n NonEditableSelectionRange,\n SelectionRange,\n} from \"@ai-matrx/chat/context-menu/utils/selection-tracking\";\n","// features/context-menu-v3/utils/key-combo.ts\n//\n// THE ONE READER OF A SHORTCUT'S ADVERTISED KEY COMBO (\"Alt+Shift+S\").\n//\n// The menu prints `keyboard_shortcut` beside an item; the shell's key listener\n// runs it. Both read the combo HERE, so an advertised combo either runs or is\n// not shown (`parseKeyCombo` returns null → the menu draws no hint).\n//\n// MATCH ON `code`, NEVER `key`: on macOS Option rewrites the character —\n// Alt+Shift+S arrives as `key: \"Í\"`, `code: \"KeyS\"` (2026-10-02 → 10-05, the\n// advertised combo did nothing on /notes).\n\nexport interface KeyCombo {\n alt: boolean;\n shift: boolean;\n ctrl: boolean;\n meta: boolean;\n /** `KeyboardEvent.code` for letters/digits (\"KeyS\", \"Digit1\"), else null. */\n code: string | null;\n /** Lowercased `KeyboardEvent.key` for named keys (\"enter\", \"/\"), else null. */\n key: string | null;\n}\n\nconst MOD_ALIASES: Record<string, keyof Pick<KeyCombo, \"alt\" | \"shift\" | \"ctrl\" | \"meta\"> | \"mod\"> = {\n alt: \"alt\",\n option: \"alt\",\n opt: \"alt\",\n \"⌥\": \"alt\",\n shift: \"shift\",\n \"⇧\": \"shift\",\n ctrl: \"ctrl\",\n control: \"ctrl\",\n \"⌃\": \"ctrl\",\n cmd: \"meta\",\n command: \"meta\",\n meta: \"meta\",\n \"⌘\": \"meta\",\n win: \"meta\",\n mod: \"mod\",\n};\n\nfunction isApplePlatform(): boolean {\n if (typeof navigator === \"undefined\") return false;\n return /mac|iphone|ipad|ipod/i.test(navigator.platform || navigator.userAgent || \"\");\n}\n\n/**\n * Parse an advertised combo. Null when it cannot be a combo this listener can\n * honour: no non-Shift modifier (plain typing), or no key.\n */\nexport function parseKeyCombo(raw: string | null | undefined): KeyCombo | null {\n if (!raw) return null;\n const parts = raw\n .split(/\\s*\\+\\s*/)\n .map((p) => p.trim())\n .filter(Boolean);\n if (parts.length < 2) return null;\n const combo: KeyCombo = { alt: false, shift: false, ctrl: false, meta: false, code: null, key: null };\n const last = parts[parts.length - 1]!;\n for (const part of parts.slice(0, -1)) {\n const mod = MOD_ALIASES[part.toLowerCase()];\n if (!mod) return null;\n if (mod === \"mod\") combo[isApplePlatform() ? \"meta\" : \"ctrl\"] = true;\n else combo[mod] = true;\n }\n if (/^[a-z]$/i.test(last)) combo.code = `Key${last.toUpperCase()}`;\n else if (/^[0-9]$/.test(last)) combo.code = `Digit${last}`;\n else combo.key = last.toLowerCase();\n if (!combo.alt && !combo.ctrl && !combo.meta) return null;\n // ⌘/Ctrl+Shift+K opens the palette on every surface (ContextMenuV3); a\n // shortcut cannot take the platform's key, so it is not advertised either.\n if ((combo.ctrl || combo.meta) && combo.shift && !combo.alt && combo.code === \"KeyK\") return null;\n return combo;\n}\n\ntype KeyEventLike = Pick<KeyboardEvent, \"altKey\" | \"shiftKey\" | \"ctrlKey\" | \"metaKey\" | \"code\" | \"key\">;\n\nexport function eventMatchesCombo(e: KeyEventLike, combo: KeyCombo): boolean {\n if (!!e.altKey !== combo.alt || !!e.shiftKey !== combo.shift) return false;\n if (!!e.ctrlKey !== combo.ctrl || !!e.metaKey !== combo.meta) return false;\n if (combo.code) return e.code === combo.code;\n return !!combo.key && (e.key ?? \"\").toLowerCase() === combo.key;\n}\n\n/** First item whose advertised combo this key event presses. */\nexport function findComboMatch<T>(\n e: KeyEventLike,\n items: readonly T[],\n comboOf: (item: T) => string | null | undefined,\n): T | null {\n if (!e.altKey && !e.ctrlKey && !e.metaKey) return null;\n for (const item of items) {\n const combo = parseKeyCombo(comboOf(item));\n if (combo && eventMatchesCombo(e, combo)) return item;\n }\n return null;\n}\n","/**\n * Drops the keys whose value is `undefined`, so an object assembled from\n * maybe-present values satisfies a target whose optional properties do not\n * accept `undefined` (`exactOptionalPropertyTypes`). Reading any dropped key\n * still yields `undefined` — the only difference is `\"key\" in obj`.\n */\ntype Present<T> = { [K in keyof T as undefined extends T[K] ? never : K]: T[K] };\ntype Maybe<T> = { [K in keyof T as undefined extends T[K] ? K : never]?: Exclude<T[K], undefined> };\nexport type Compact<T> = Present<T> & Maybe<T>;\n\nexport function compact<T extends object>(value: T): Compact<T> {\n const out: Record<string, unknown> = {};\n for (const [key, v] of Object.entries(value)) if (v !== undefined) out[key] = v;\n return out as Compact<T>;\n}\n"]}
@@ -3,7 +3,6 @@
3
3
 
4
4
 
5
5
  var _chunkPDHJTEZKcjs = require('./chunk-PDHJTEZK.cjs');
6
- require('./chunk-CUODNUAD.cjs');
7
6
 
8
7
  // src/design/store.ts
9
8
  var _typedtable = require('@ai-matrx/records/typed-table');
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/aidream/aidream/apps/shared/context-menu/dist/design-store.cjs","../src/design/store.ts"],"names":[],"mappings":"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","file":"/home/runner/work/aidream/aidream/apps/shared/context-menu/dist/design-store.cjs","sourcesContent":[null,"// src/design/store.ts — @ai-matrx/context-menu/design-store: WHERE MENU DESIGNS ARE SAVED.\n//\n// Every Save writes a NEW VERSION of a design; nothing is overwritten, so any earlier version can be\n// opened again. Two stores answer the same interface:\n// - recordsDesignStore: a typed table in the record store (`custom.*`), so a saved design is real\n// shared data the builder's author, Claude, and the app can all read — no hand-made schema;\n// - localDesignStore: this browser's storage, for a playground with no sign-in; it says so.\n\nimport { listAppRows, removeAppRow, upsertAppRow, defineTypedTable, f } from \"@ai-matrx/records/typed-table\";\nimport type { RecordsClient } from \"@ai-matrx/records/core\";\nimport { parseDesign, serializeDesign, type MenuDesign } from \"./model\";\n\nexport const menuDesignTable = defineTypedTable({\n name: \"Menu designs\",\n slug: \"menu_designs\",\n kept_for: \"context_menu\",\n scope: \"organization\",\n owner: \"lane:CONTEXT-MENU\",\n key: \"version_key\",\n declared_in: \"aidream:apps/shared/context-menu/src/design/store.ts\",\n fields: {\n version_key: f.text({ label: \"Version key\", unique: true, required: true }),\n design_id: f.text({ label: \"Design id\", required: true }),\n name: f.text({ label: \"Name\", required: true }),\n version: f.integer({ label: \"Version\", required: true }),\n doc: f.longText({ label: \"Menu\", required: true }),\n note: f.text({ label: \"Note\" }),\n saved_by: f.text({ label: \"Saved by\" }),\n saved_at: f.datetime({ label: \"Saved\" }),\n },\n});\n\nexport interface SavedDesignVersion {\n /** The stored row (record id, or a local key). */\n rowId: string;\n designId: string;\n name: string;\n version: number;\n note: string;\n savedAt: string;\n savedBy: string;\n design: MenuDesign;\n}\n\nexport interface DesignStore {\n /** \"live\" saves to shared data; \"local\" saves to this browser only. */\n readonly kind: \"live\" | \"local\";\n /** Every saved version of every design, newest first. */\n list(): Promise<SavedDesignVersion[]>;\n /** Save `design` as its next version. Answers the saved version. */\n save(design: MenuDesign, note?: string): Promise<SavedDesignVersion>;\n /** Archive one version (restorable from the record store's archive). */\n remove(rowId: string): Promise<void>;\n}\n\nconst byNewest = (a: SavedDesignVersion, b: SavedDesignVersion) =>\n b.savedAt.localeCompare(a.savedAt) || b.version - a.version;\n\nfunction nextVersion(all: SavedDesignVersion[], designId: string): number {\n return all.filter((v) => v.designId === designId).reduce((m, v) => Math.max(m, v.version), 0) + 1;\n}\n\nexport function recordsDesignStore(client: RecordsClient, options: { organizationId: string; savedBy?: string }): DesignStore {\n const list = async (): Promise<SavedDesignVersion[]> => {\n const read = await listAppRows(client, menuDesignTable);\n if (!read.ok) throw new Error(read.error.message);\n return read.data.rows\n .map((r) => ({\n rowId: String(r._id),\n designId: String(r.design_id),\n name: String(r.name),\n version: Number(r.version),\n note: String(r.note ?? \"\"),\n savedAt: String(r.saved_at ?? \"\"),\n savedBy: String(r.saved_by ?? \"\"),\n design: parseDesign(r.doc),\n }))\n .sort(byNewest);\n };\n return {\n kind: \"live\",\n list,\n async save(design, note = \"\") {\n const all = await list();\n const version = nextVersion(all, design.designId);\n const savedAt = new Date().toISOString();\n const savedBy = options.savedBy ?? \"\";\n const wrote = await upsertAppRow(\n client,\n menuDesignTable,\n {\n version_key: `${design.designId}@${version}`,\n design_id: design.designId,\n name: design.name,\n version,\n doc: serializeDesign(design),\n note,\n saved_by: savedBy,\n saved_at: savedAt,\n },\n { organizationId: options.organizationId },\n );\n if (!wrote.ok) throw new Error(wrote.error.message);\n return { rowId: wrote.data, designId: design.designId, name: design.name, version, note, savedAt, savedBy, design };\n },\n async remove(rowId) {\n const gone = await removeAppRow(client, menuDesignTable, rowId, { organizationId: options.organizationId });\n if (!gone.ok) throw new Error(gone.error.message);\n },\n };\n}\n\nconst LOCAL_KEY = \"matrx.context-menu.designs.v1\";\n\nexport function localDesignStore(): DesignStore {\n const read = (): SavedDesignVersion[] => {\n try {\n const raw = globalThis.localStorage?.getItem(LOCAL_KEY);\n const rows = raw ? (JSON.parse(raw) as SavedDesignVersion[]) : [];\n return rows.map((r) => ({ ...r, design: parseDesign(r.design) }));\n } catch {\n return [];\n }\n };\n const write = (rows: SavedDesignVersion[]) => {\n try {\n globalThis.localStorage?.setItem(LOCAL_KEY, JSON.stringify(rows));\n } catch {\n /* storage blocked: the save still answers; the next reload will not have it */\n }\n };\n return {\n kind: \"local\",\n async list() {\n return read().sort(byNewest);\n },\n async save(design, note = \"\") {\n const all = read();\n const version = nextVersion(all, design.designId);\n const saved: SavedDesignVersion = {\n rowId: `${design.designId}@${version}`,\n designId: design.designId,\n name: design.name,\n version,\n note,\n savedAt: new Date().toISOString(),\n savedBy: \"this browser\",\n design,\n };\n write([saved, ...all]);\n return saved;\n },\n async remove(rowId) {\n write(read().filter((r) => r.rowId !== rowId));\n },\n };\n}\n"]}
1
+ {"version":3,"sources":["/home/runner/work/aidream/aidream/apps/shared/context-menu/dist/design-store.cjs","../src/design/store.ts"],"names":[],"mappings":"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","file":"/home/runner/work/aidream/aidream/apps/shared/context-menu/dist/design-store.cjs","sourcesContent":[null,"// src/design/store.ts — @ai-matrx/context-menu/design-store: WHERE MENU DESIGNS ARE SAVED.\n//\n// Every Save writes a NEW VERSION of a design; nothing is overwritten, so any earlier version can be\n// opened again. Two stores answer the same interface:\n// - recordsDesignStore: a typed table in the record store (`custom.*`), so a saved design is real\n// shared data the builder's author, Claude, and the app can all read — no hand-made schema;\n// - localDesignStore: this browser's storage, for a playground with no sign-in; it says so.\n\nimport { listAppRows, removeAppRow, upsertAppRow, defineTypedTable, f } from \"@ai-matrx/records/typed-table\";\nimport type { RecordsClient } from \"@ai-matrx/records/core\";\nimport { parseDesign, serializeDesign, type MenuDesign } from \"./model\";\n\nexport const menuDesignTable = defineTypedTable({\n name: \"Menu designs\",\n slug: \"menu_designs\",\n kept_for: \"context_menu\",\n scope: \"organization\",\n owner: \"lane:CONTEXT-MENU\",\n key: \"version_key\",\n declared_in: \"aidream:apps/shared/context-menu/src/design/store.ts\",\n fields: {\n version_key: f.text({ label: \"Version key\", unique: true, required: true }),\n design_id: f.text({ label: \"Design id\", required: true }),\n name: f.text({ label: \"Name\", required: true }),\n version: f.integer({ label: \"Version\", required: true }),\n doc: f.longText({ label: \"Menu\", required: true }),\n note: f.text({ label: \"Note\" }),\n saved_by: f.text({ label: \"Saved by\" }),\n saved_at: f.datetime({ label: \"Saved\" }),\n },\n});\n\nexport interface SavedDesignVersion {\n /** The stored row (record id, or a local key). */\n rowId: string;\n designId: string;\n name: string;\n version: number;\n note: string;\n savedAt: string;\n savedBy: string;\n design: MenuDesign;\n}\n\nexport interface DesignStore {\n /** \"live\" saves to shared data; \"local\" saves to this browser only. */\n readonly kind: \"live\" | \"local\";\n /** Every saved version of every design, newest first. */\n list(): Promise<SavedDesignVersion[]>;\n /** Save `design` as its next version. Answers the saved version. */\n save(design: MenuDesign, note?: string): Promise<SavedDesignVersion>;\n /** Archive one version (restorable from the record store's archive). */\n remove(rowId: string): Promise<void>;\n}\n\nconst byNewest = (a: SavedDesignVersion, b: SavedDesignVersion) =>\n b.savedAt.localeCompare(a.savedAt) || b.version - a.version;\n\nfunction nextVersion(all: SavedDesignVersion[], designId: string): number {\n return all.filter((v) => v.designId === designId).reduce((m, v) => Math.max(m, v.version), 0) + 1;\n}\n\nexport function recordsDesignStore(client: RecordsClient, options: { organizationId: string; savedBy?: string }): DesignStore {\n const list = async (): Promise<SavedDesignVersion[]> => {\n const read = await listAppRows(client, menuDesignTable);\n if (!read.ok) throw new Error(read.error.message);\n return read.data.rows\n .map((r) => ({\n rowId: String(r._id),\n designId: String(r.design_id),\n name: String(r.name),\n version: Number(r.version),\n note: String(r.note ?? \"\"),\n savedAt: String(r.saved_at ?? \"\"),\n savedBy: String(r.saved_by ?? \"\"),\n design: parseDesign(r.doc),\n }))\n .sort(byNewest);\n };\n return {\n kind: \"live\",\n list,\n async save(design, note = \"\") {\n const all = await list();\n const version = nextVersion(all, design.designId);\n const savedAt = new Date().toISOString();\n const savedBy = options.savedBy ?? \"\";\n const wrote = await upsertAppRow(\n client,\n menuDesignTable,\n {\n version_key: `${design.designId}@${version}`,\n design_id: design.designId,\n name: design.name,\n version,\n doc: serializeDesign(design),\n note,\n saved_by: savedBy,\n saved_at: savedAt,\n },\n { organizationId: options.organizationId },\n );\n if (!wrote.ok) throw new Error(wrote.error.message);\n return { rowId: wrote.data, designId: design.designId, name: design.name, version, note, savedAt, savedBy, design };\n },\n async remove(rowId) {\n const gone = await removeAppRow(client, menuDesignTable, rowId, { organizationId: options.organizationId });\n if (!gone.ok) throw new Error(gone.error.message);\n },\n };\n}\n\nconst LOCAL_KEY = \"matrx.context-menu.designs.v1\";\n\nexport function localDesignStore(): DesignStore {\n const read = (): SavedDesignVersion[] => {\n try {\n const raw = globalThis.localStorage?.getItem(LOCAL_KEY);\n const rows = raw ? (JSON.parse(raw) as SavedDesignVersion[]) : [];\n return rows.map((r) => ({ ...r, design: parseDesign(r.design) }));\n } catch {\n return [];\n }\n };\n const write = (rows: SavedDesignVersion[]) => {\n try {\n globalThis.localStorage?.setItem(LOCAL_KEY, JSON.stringify(rows));\n } catch {\n /* storage blocked: the save still answers; the next reload will not have it */\n }\n };\n return {\n kind: \"local\",\n async list() {\n return read().sort(byNewest);\n },\n async save(design, note = \"\") {\n const all = read();\n const version = nextVersion(all, design.designId);\n const saved: SavedDesignVersion = {\n rowId: `${design.designId}@${version}`,\n designId: design.designId,\n name: design.name,\n version,\n note,\n savedAt: new Date().toISOString(),\n savedBy: \"this browser\",\n design,\n };\n write([saved, ...all]);\n return saved;\n },\n async remove(rowId) {\n write(read().filter((r) => r.rowId !== rowId));\n },\n };\n}\n"]}
@@ -3,7 +3,6 @@ import {
3
3
  parseDesign,
4
4
  serializeDesign
5
5
  } from "./chunk-63WDXKZ7.js";
6
- import "./chunk-PE3ZHHM5.js";
7
6
 
8
7
  // src/design/store.ts
9
8
  import { listAppRows, removeAppRow, upsertAppRow, defineTypedTable, f } from "@ai-matrx/records/typed-table";
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/design/store.ts"],"sourcesContent":["// src/design/store.ts — @ai-matrx/context-menu/design-store: WHERE MENU DESIGNS ARE SAVED.\n//\n// Every Save writes a NEW VERSION of a design; nothing is overwritten, so any earlier version can be\n// opened again. Two stores answer the same interface:\n// - recordsDesignStore: a typed table in the record store (`custom.*`), so a saved design is real\n// shared data the builder's author, Claude, and the app can all read — no hand-made schema;\n// - localDesignStore: this browser's storage, for a playground with no sign-in; it says so.\n\nimport { listAppRows, removeAppRow, upsertAppRow, defineTypedTable, f } from \"@ai-matrx/records/typed-table\";\nimport type { RecordsClient } from \"@ai-matrx/records/core\";\nimport { parseDesign, serializeDesign, type MenuDesign } from \"./model\";\n\nexport const menuDesignTable = defineTypedTable({\n name: \"Menu designs\",\n slug: \"menu_designs\",\n kept_for: \"context_menu\",\n scope: \"organization\",\n owner: \"lane:CONTEXT-MENU\",\n key: \"version_key\",\n declared_in: \"aidream:apps/shared/context-menu/src/design/store.ts\",\n fields: {\n version_key: f.text({ label: \"Version key\", unique: true, required: true }),\n design_id: f.text({ label: \"Design id\", required: true }),\n name: f.text({ label: \"Name\", required: true }),\n version: f.integer({ label: \"Version\", required: true }),\n doc: f.longText({ label: \"Menu\", required: true }),\n note: f.text({ label: \"Note\" }),\n saved_by: f.text({ label: \"Saved by\" }),\n saved_at: f.datetime({ label: \"Saved\" }),\n },\n});\n\nexport interface SavedDesignVersion {\n /** The stored row (record id, or a local key). */\n rowId: string;\n designId: string;\n name: string;\n version: number;\n note: string;\n savedAt: string;\n savedBy: string;\n design: MenuDesign;\n}\n\nexport interface DesignStore {\n /** \"live\" saves to shared data; \"local\" saves to this browser only. */\n readonly kind: \"live\" | \"local\";\n /** Every saved version of every design, newest first. */\n list(): Promise<SavedDesignVersion[]>;\n /** Save `design` as its next version. Answers the saved version. */\n save(design: MenuDesign, note?: string): Promise<SavedDesignVersion>;\n /** Archive one version (restorable from the record store's archive). */\n remove(rowId: string): Promise<void>;\n}\n\nconst byNewest = (a: SavedDesignVersion, b: SavedDesignVersion) =>\n b.savedAt.localeCompare(a.savedAt) || b.version - a.version;\n\nfunction nextVersion(all: SavedDesignVersion[], designId: string): number {\n return all.filter((v) => v.designId === designId).reduce((m, v) => Math.max(m, v.version), 0) + 1;\n}\n\nexport function recordsDesignStore(client: RecordsClient, options: { organizationId: string; savedBy?: string }): DesignStore {\n const list = async (): Promise<SavedDesignVersion[]> => {\n const read = await listAppRows(client, menuDesignTable);\n if (!read.ok) throw new Error(read.error.message);\n return read.data.rows\n .map((r) => ({\n rowId: String(r._id),\n designId: String(r.design_id),\n name: String(r.name),\n version: Number(r.version),\n note: String(r.note ?? \"\"),\n savedAt: String(r.saved_at ?? \"\"),\n savedBy: String(r.saved_by ?? \"\"),\n design: parseDesign(r.doc),\n }))\n .sort(byNewest);\n };\n return {\n kind: \"live\",\n list,\n async save(design, note = \"\") {\n const all = await list();\n const version = nextVersion(all, design.designId);\n const savedAt = new Date().toISOString();\n const savedBy = options.savedBy ?? \"\";\n const wrote = await upsertAppRow(\n client,\n menuDesignTable,\n {\n version_key: `${design.designId}@${version}`,\n design_id: design.designId,\n name: design.name,\n version,\n doc: serializeDesign(design),\n note,\n saved_by: savedBy,\n saved_at: savedAt,\n },\n { organizationId: options.organizationId },\n );\n if (!wrote.ok) throw new Error(wrote.error.message);\n return { rowId: wrote.data, designId: design.designId, name: design.name, version, note, savedAt, savedBy, design };\n },\n async remove(rowId) {\n const gone = await removeAppRow(client, menuDesignTable, rowId, { organizationId: options.organizationId });\n if (!gone.ok) throw new Error(gone.error.message);\n },\n };\n}\n\nconst LOCAL_KEY = \"matrx.context-menu.designs.v1\";\n\nexport function localDesignStore(): DesignStore {\n const read = (): SavedDesignVersion[] => {\n try {\n const raw = globalThis.localStorage?.getItem(LOCAL_KEY);\n const rows = raw ? (JSON.parse(raw) as SavedDesignVersion[]) : [];\n return rows.map((r) => ({ ...r, design: parseDesign(r.design) }));\n } catch {\n return [];\n }\n };\n const write = (rows: SavedDesignVersion[]) => {\n try {\n globalThis.localStorage?.setItem(LOCAL_KEY, JSON.stringify(rows));\n } catch {\n /* storage blocked: the save still answers; the next reload will not have it */\n }\n };\n return {\n kind: \"local\",\n async list() {\n return read().sort(byNewest);\n },\n async save(design, note = \"\") {\n const all = read();\n const version = nextVersion(all, design.designId);\n const saved: SavedDesignVersion = {\n rowId: `${design.designId}@${version}`,\n designId: design.designId,\n name: design.name,\n version,\n note,\n savedAt: new Date().toISOString(),\n savedBy: \"this browser\",\n design,\n };\n write([saved, ...all]);\n return saved;\n },\n async remove(rowId) {\n write(read().filter((r) => r.rowId !== rowId));\n },\n };\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/design/store.ts"],"sourcesContent":["// src/design/store.ts — @ai-matrx/context-menu/design-store: WHERE MENU DESIGNS ARE SAVED.\n//\n// Every Save writes a NEW VERSION of a design; nothing is overwritten, so any earlier version can be\n// opened again. Two stores answer the same interface:\n// - recordsDesignStore: a typed table in the record store (`custom.*`), so a saved design is real\n// shared data the builder's author, Claude, and the app can all read — no hand-made schema;\n// - localDesignStore: this browser's storage, for a playground with no sign-in; it says so.\n\nimport { listAppRows, removeAppRow, upsertAppRow, defineTypedTable, f } from \"@ai-matrx/records/typed-table\";\nimport type { RecordsClient } from \"@ai-matrx/records/core\";\nimport { parseDesign, serializeDesign, type MenuDesign } from \"./model\";\n\nexport const menuDesignTable = defineTypedTable({\n name: \"Menu designs\",\n slug: \"menu_designs\",\n kept_for: \"context_menu\",\n scope: \"organization\",\n owner: \"lane:CONTEXT-MENU\",\n key: \"version_key\",\n declared_in: \"aidream:apps/shared/context-menu/src/design/store.ts\",\n fields: {\n version_key: f.text({ label: \"Version key\", unique: true, required: true }),\n design_id: f.text({ label: \"Design id\", required: true }),\n name: f.text({ label: \"Name\", required: true }),\n version: f.integer({ label: \"Version\", required: true }),\n doc: f.longText({ label: \"Menu\", required: true }),\n note: f.text({ label: \"Note\" }),\n saved_by: f.text({ label: \"Saved by\" }),\n saved_at: f.datetime({ label: \"Saved\" }),\n },\n});\n\nexport interface SavedDesignVersion {\n /** The stored row (record id, or a local key). */\n rowId: string;\n designId: string;\n name: string;\n version: number;\n note: string;\n savedAt: string;\n savedBy: string;\n design: MenuDesign;\n}\n\nexport interface DesignStore {\n /** \"live\" saves to shared data; \"local\" saves to this browser only. */\n readonly kind: \"live\" | \"local\";\n /** Every saved version of every design, newest first. */\n list(): Promise<SavedDesignVersion[]>;\n /** Save `design` as its next version. Answers the saved version. */\n save(design: MenuDesign, note?: string): Promise<SavedDesignVersion>;\n /** Archive one version (restorable from the record store's archive). */\n remove(rowId: string): Promise<void>;\n}\n\nconst byNewest = (a: SavedDesignVersion, b: SavedDesignVersion) =>\n b.savedAt.localeCompare(a.savedAt) || b.version - a.version;\n\nfunction nextVersion(all: SavedDesignVersion[], designId: string): number {\n return all.filter((v) => v.designId === designId).reduce((m, v) => Math.max(m, v.version), 0) + 1;\n}\n\nexport function recordsDesignStore(client: RecordsClient, options: { organizationId: string; savedBy?: string }): DesignStore {\n const list = async (): Promise<SavedDesignVersion[]> => {\n const read = await listAppRows(client, menuDesignTable);\n if (!read.ok) throw new Error(read.error.message);\n return read.data.rows\n .map((r) => ({\n rowId: String(r._id),\n designId: String(r.design_id),\n name: String(r.name),\n version: Number(r.version),\n note: String(r.note ?? \"\"),\n savedAt: String(r.saved_at ?? \"\"),\n savedBy: String(r.saved_by ?? \"\"),\n design: parseDesign(r.doc),\n }))\n .sort(byNewest);\n };\n return {\n kind: \"live\",\n list,\n async save(design, note = \"\") {\n const all = await list();\n const version = nextVersion(all, design.designId);\n const savedAt = new Date().toISOString();\n const savedBy = options.savedBy ?? \"\";\n const wrote = await upsertAppRow(\n client,\n menuDesignTable,\n {\n version_key: `${design.designId}@${version}`,\n design_id: design.designId,\n name: design.name,\n version,\n doc: serializeDesign(design),\n note,\n saved_by: savedBy,\n saved_at: savedAt,\n },\n { organizationId: options.organizationId },\n );\n if (!wrote.ok) throw new Error(wrote.error.message);\n return { rowId: wrote.data, designId: design.designId, name: design.name, version, note, savedAt, savedBy, design };\n },\n async remove(rowId) {\n const gone = await removeAppRow(client, menuDesignTable, rowId, { organizationId: options.organizationId });\n if (!gone.ok) throw new Error(gone.error.message);\n },\n };\n}\n\nconst LOCAL_KEY = \"matrx.context-menu.designs.v1\";\n\nexport function localDesignStore(): DesignStore {\n const read = (): SavedDesignVersion[] => {\n try {\n const raw = globalThis.localStorage?.getItem(LOCAL_KEY);\n const rows = raw ? (JSON.parse(raw) as SavedDesignVersion[]) : [];\n return rows.map((r) => ({ ...r, design: parseDesign(r.design) }));\n } catch {\n return [];\n }\n };\n const write = (rows: SavedDesignVersion[]) => {\n try {\n globalThis.localStorage?.setItem(LOCAL_KEY, JSON.stringify(rows));\n } catch {\n /* storage blocked: the save still answers; the next reload will not have it */\n }\n };\n return {\n kind: \"local\",\n async list() {\n return read().sort(byNewest);\n },\n async save(design, note = \"\") {\n const all = read();\n const version = nextVersion(all, design.designId);\n const saved: SavedDesignVersion = {\n rowId: `${design.designId}@${version}`,\n designId: design.designId,\n name: design.name,\n version,\n note,\n savedAt: new Date().toISOString(),\n savedBy: \"this browser\",\n design,\n };\n write([saved, ...all]);\n return saved;\n },\n async remove(rowId) {\n write(read().filter((r) => r.rowId !== rowId));\n },\n };\n}\n"],"mappings":"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","names":[]}
package/dist/engine.cjs CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }"use client";
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }"use client";
2
2
 
3
3
 
4
4
 
@@ -29,7 +29,7 @@
29
29
 
30
30
 
31
31
 
32
- var _chunk7VDSMZWIcjs = require('./chunk-7VDSMZWI.cjs');
32
+ var _chunkERFH2RZCcjs = require('./chunk-ERFH2RZC.cjs');
33
33
 
34
34
 
35
35
 
@@ -52,111 +52,56 @@ var _chunk6E24ONDYcjs = require('./chunk-6E24ONDY.cjs');
52
52
 
53
53
 
54
54
 
55
- var _chunkTSOUI723cjs = require('./chunk-TSOUI723.cjs');
56
55
 
57
56
 
58
57
 
59
58
 
60
59
 
61
60
 
62
- var _chunkXERD2YCJcjs = require('./chunk-XERD2YCJ.cjs');
63
61
 
64
62
 
65
63
 
64
+ var _chunk7TIZAANUcjs = require('./chunk-7TIZAANU.cjs');
66
65
 
67
66
 
68
67
 
69
68
 
70
- var _chunkPUSFH5CVcjs = require('./chunk-PUSFH5CV.cjs');
71
69
 
72
70
 
73
71
 
74
- var _chunkCUODNUADcjs = require('./chunk-CUODNUAD.cjs');
75
-
76
- // src/engine/index.ts
77
- var engine_exports = {};
78
- _chunkCUODNUADcjs.__export.call(void 0, engine_exports, {
79
- CONTEXT_MENU_ENGINE_ID_PREFIXES: () => CONTEXT_MENU_ENGINE_ID_PREFIXES,
80
- CONTEXT_MENU_ENGINE_ROWS: () => CONTEXT_MENU_ENGINE_ROWS,
81
- CONTEXT_MENU_SELECTION_HOST_KEY: () => _chunk7VDSMZWIcjs.CONTEXT_MENU_SELECTION_HOST_KEY,
82
- CONTEXT_REGION_TRIGGER_ATTRS: () => _chunk7VDSMZWIcjs.CONTEXT_REGION_TRIGGER_ATTRS,
83
- DEFAULT_CONTEXT_MENU_HOST: () => _chunkPUSFH5CVcjs.DEFAULT_CONTEXT_MENU_HOST,
84
- FIELD_PREVIEW_MAX: () => _chunkTSOUI723cjs.FIELD_PREVIEW_MAX,
85
- MANAGED_CONTEXT_MENU_AGENT_CONFIG: () => _chunkTSOUI723cjs.MANAGED_CONTEXT_MENU_AGENT_CONFIG,
86
- OWN_ROWS_MAX: () => OWN_ROWS_MAX,
87
- PROPOSED_MENU_GROUPING: () => PROPOSED_MENU_GROUPING,
88
- RECORD_MENU_ATTR: () => _chunk7VDSMZWIcjs.RECORD_MENU_ATTR,
89
- REGROUP_ID_PREFIX: () => _chunk6E24ONDYcjs.REGROUP_ID_PREFIX,
90
- STRIP_MAX: () => STRIP_MAX,
91
- actionLabel: () => _chunk6E24ONDYcjs.actionLabel,
92
- actionsAlreadyHere: () => _chunkTSOUI723cjs.actionsAlreadyHere,
93
- auditRegroup: () => _chunk6E24ONDYcjs.auditRegroup,
94
- buildDefaultTableRowMenuDescriptor: () => _chunk7VDSMZWIcjs.buildDefaultTableRowMenuDescriptor,
95
- buildEditableWidgetHandle: () => _chunk7VDSMZWIcjs.buildEditableWidgetHandle,
96
- buildJsonMenuSection: () => _chunkTSOUI723cjs.buildJsonMenuSection,
97
- clickedKind: () => clickedKind,
98
- configureContextMenuHost: () => _chunkPUSFH5CVcjs.configureContextMenuHost,
99
- contextMenuSelectionProvider: () => _chunk7VDSMZWIcjs.contextMenuSelectionProvider,
100
- createDefaultTableRowMenuDescriptor: () => _chunk7VDSMZWIcjs.createDefaultTableRowMenuDescriptor,
101
- createTableRowMenuDescriptor: () => _chunk7VDSMZWIcjs.createTableRowMenuDescriptor,
102
- currentModel: () => _chunk6E24ONDYcjs.currentModel,
103
- destinationFor: () => _chunk6E24ONDYcjs.destinationFor,
104
- drawnPlaces: () => _chunk6E24ONDYcjs.drawnPlaces,
105
- eventMatchesCombo: () => _chunkXERD2YCJcjs.eventMatchesCombo,
106
- fieldLabelOf: () => _chunkTSOUI723cjs.fieldLabelOf,
107
- fieldPreview: () => _chunkTSOUI723cjs.fieldPreview,
108
- findComboMatch: () => _chunkXERD2YCJcjs.findComboMatch,
109
- getContextMenuHost: () => _chunkPUSFH5CVcjs.getContextMenuHost,
110
- itemMenuConfigToExtraSections: () => _chunk7VDSMZWIcjs.itemMenuConfigToExtraSections,
111
- itemToastPromise: () => _chunk7VDSMZWIcjs.toastPromise,
112
- joinExtraSections: () => _chunk7VDSMZWIcjs.joinExtraSections,
113
- joinRowAndSurfaceContext: () => _chunk7VDSMZWIcjs.joinRowAndSurfaceContext,
114
- jsonSectionLabel: () => _chunkTSOUI723cjs.jsonSectionLabel,
115
- loadContextMenuHost: () => _chunkPUSFH5CVcjs.loadContextMenuHost,
116
- matchRule: () => _chunk6E24ONDYcjs.matchRule,
117
- mergeFieldName: () => _chunkTSOUI723cjs.mergeFieldName,
118
- mergeResolvedContextData: () => _chunk7VDSMZWIcjs.mergeResolvedContextData,
119
- openContextMenuForElement: () => openContextMenuForElement,
120
- openRecordMenu: () => _chunk7VDSMZWIcjs.openRecordMenu,
121
- parseKeyCombo: () => _chunkXERD2YCJcjs.parseKeyCombo,
122
- preloadTableShape: () => _chunk7VDSMZWIcjs.preloadTableShape,
123
- proposedArrangement: () => proposedArrangement,
124
- recordMenuChanged: () => _chunk7VDSMZWIcjs.recordMenuChanged,
125
- recordMenusRevision: () => _chunk7VDSMZWIcjs.recordMenusRevision,
126
- registerRecordMenu: () => _chunk7VDSMZWIcjs.registerRecordMenu,
127
- registerTableRowContextResolver: () => _chunk7VDSMZWIcjs.registerTableRowContextResolver,
128
- regroupResolved: () => _chunk6E24ONDYcjs.regroupResolved,
129
- resetContextMenuHost: () => _chunkPUSFH5CVcjs.resetContextMenuHost,
130
- resolveEffectiveEntity: () => _chunk7VDSMZWIcjs.resolveEffectiveEntity,
131
- resolveEffectiveEntityWithDom: () => _chunk7VDSMZWIcjs.resolveEffectiveEntityWithDom,
132
- resolveRecordMenu: () => _chunk7VDSMZWIcjs.resolveRecordMenu,
133
- resolveTableRowItem: () => _chunk7VDSMZWIcjs.resolveTableRowItem,
134
- resolveTableRowMenuDescriptor: () => _chunk7VDSMZWIcjs.resolveTableRowMenuDescriptor,
135
- rowRecordName: () => _chunk7VDSMZWIcjs.rowRecordName,
136
- sniffEntityFromDom: () => _chunk7VDSMZWIcjs.sniffEntityFromDom,
137
- subscribeRecordMenus: () => _chunk7VDSMZWIcjs.subscribeRecordMenus,
138
- tableRowEditCommands: () => _chunk7VDSMZWIcjs.tableRowEditCommands,
139
- tableTextAtTarget: () => _chunk7VDSMZWIcjs.tableTextAtTarget,
140
- topLevelRowCount: () => _chunk6E24ONDYcjs.topLevelRowCount,
141
- useContextMenuHostBindings: () => _chunkPUSFH5CVcjs.useContextMenuHostBindings
142
- });
143
- _chunkCUODNUADcjs.__reExport.call(void 0, engine_exports, _chunkXERD2YCJcjs.types_exports);
72
+
73
+
74
+
75
+
76
+
77
+
78
+
79
+
80
+
81
+
82
+
83
+ var _chunkWROBL3DRcjs = require('./chunk-WROBL3DR.cjs');
84
+
85
+
86
+
87
+
88
+
89
+
90
+
91
+ var _chunkPUSFH5CVcjs = require('./chunk-PUSFH5CV.cjs');
144
92
 
145
93
  // src/engine/utils/build-application-scope.ts
146
- var build_application_scope_exports = {};
147
- _chunkCUODNUADcjs.__reExport.call(void 0, build_application_scope_exports, build_application_scope_star);
148
- var _buildapplicationscope = require('@ai-matrx/chat/context-menu/utils/build-application-scope'); var build_application_scope_star = _interopRequireWildcard(_buildapplicationscope);
149
94
 
150
- // src/engine/index.ts
151
- _chunkCUODNUADcjs.__reExport.call(void 0, engine_exports, build_application_scope_exports);
95
+
96
+ var _buildapplicationscope = require('@ai-matrx/chat/context-menu/utils/build-application-scope');
152
97
 
153
98
  // src/engine/utils/availability.ts
154
- var availability_exports = {};
155
- _chunkCUODNUADcjs.__reExport.call(void 0, availability_exports, availability_star);
156
- var _availability = require('@ai-matrx/chat/context-menu/utils/availability'); var availability_star = _interopRequireWildcard(_availability);
157
99
 
158
- // src/engine/index.ts
159
- _chunkCUODNUADcjs.__reExport.call(void 0, engine_exports, availability_exports);
100
+
101
+
102
+
103
+
104
+ var _availability = require('@ai-matrx/chat/context-menu/utils/availability');
160
105
 
161
106
  // src/engine/utils/open-context-menu.ts
162
107
  function openContextMenuForElement(element) {
@@ -175,18 +120,10 @@ function openContextMenuForElement(element) {
175
120
  );
176
121
  }
177
122
 
178
- // src/engine/index.ts
179
- _chunkCUODNUADcjs.__reExport.call(void 0, engine_exports, _chunkXERD2YCJcjs.selection_tracking_exports);
180
- _chunkCUODNUADcjs.__reExport.call(void 0, engine_exports, _chunkTSOUI723cjs.menu_deadline_exports);
181
-
182
123
  // src/engine/utils/resolveMarkdownContext.ts
183
- var resolveMarkdownContext_exports = {};
184
- _chunkCUODNUADcjs.__reExport.call(void 0, resolveMarkdownContext_exports, resolveMarkdownContext_star);
185
- var _resolveMarkdownContext = require('@ai-matrx/chat/context-menu/utils/resolveMarkdownContext'); var resolveMarkdownContext_star = _interopRequireWildcard(_resolveMarkdownContext);
186
124
 
187
- // src/engine/index.ts
188
- _chunkCUODNUADcjs.__reExport.call(void 0, engine_exports, resolveMarkdownContext_exports);
189
- _chunkCUODNUADcjs.__reExport.call(void 0, engine_exports, _chunkTSOUI723cjs.requirement_gate_exports);
125
+
126
+ var _resolveMarkdownContext = require('@ai-matrx/chat/context-menu/utils/resolveMarkdownContext');
190
127
 
191
128
  // src/engine/regroup/engine-rows.ts
192
129
  var CONTEXT_MENU_ENGINE_ROWS = [
@@ -624,5 +561,36 @@ function proposedArrangement(target, resolved, { noun }) {
624
561
 
625
562
 
626
563
 
627
- exports.CONTEXT_MENU_ENGINE_ID_PREFIXES = CONTEXT_MENU_ENGINE_ID_PREFIXES; exports.CONTEXT_MENU_ENGINE_ROWS = CONTEXT_MENU_ENGINE_ROWS; exports.CONTEXT_MENU_SELECTION_HOST_KEY = _chunk7VDSMZWIcjs.CONTEXT_MENU_SELECTION_HOST_KEY; exports.CONTEXT_REGION_TRIGGER_ATTRS = _chunk7VDSMZWIcjs.CONTEXT_REGION_TRIGGER_ATTRS; exports.DEFAULT_CONTEXT_MENU_HOST = _chunkPUSFH5CVcjs.DEFAULT_CONTEXT_MENU_HOST; exports.FIELD_PREVIEW_MAX = _chunkTSOUI723cjs.FIELD_PREVIEW_MAX; exports.MANAGED_CONTEXT_MENU_AGENT_CONFIG = _chunkTSOUI723cjs.MANAGED_CONTEXT_MENU_AGENT_CONFIG; exports.OWN_ROWS_MAX = OWN_ROWS_MAX; exports.PROPOSED_MENU_GROUPING = PROPOSED_MENU_GROUPING; exports.RECORD_MENU_ATTR = _chunk7VDSMZWIcjs.RECORD_MENU_ATTR; exports.REGROUP_ID_PREFIX = _chunk6E24ONDYcjs.REGROUP_ID_PREFIX; exports.STRIP_MAX = STRIP_MAX; exports.actionLabel = _chunk6E24ONDYcjs.actionLabel; exports.actionsAlreadyHere = _chunkTSOUI723cjs.actionsAlreadyHere; exports.auditRegroup = _chunk6E24ONDYcjs.auditRegroup; exports.buildDefaultTableRowMenuDescriptor = _chunk7VDSMZWIcjs.buildDefaultTableRowMenuDescriptor; exports.buildEditableWidgetHandle = _chunk7VDSMZWIcjs.buildEditableWidgetHandle; exports.buildJsonMenuSection = _chunkTSOUI723cjs.buildJsonMenuSection; exports.clickedKind = clickedKind; exports.configureContextMenuHost = _chunkPUSFH5CVcjs.configureContextMenuHost; exports.contextMenuSelectionProvider = _chunk7VDSMZWIcjs.contextMenuSelectionProvider; exports.createDefaultTableRowMenuDescriptor = _chunk7VDSMZWIcjs.createDefaultTableRowMenuDescriptor; exports.createTableRowMenuDescriptor = _chunk7VDSMZWIcjs.createTableRowMenuDescriptor; exports.currentModel = _chunk6E24ONDYcjs.currentModel; exports.destinationFor = _chunk6E24ONDYcjs.destinationFor; exports.drawnPlaces = _chunk6E24ONDYcjs.drawnPlaces; exports.eventMatchesCombo = _chunkXERD2YCJcjs.eventMatchesCombo; exports.fieldLabelOf = _chunkTSOUI723cjs.fieldLabelOf; exports.fieldPreview = _chunkTSOUI723cjs.fieldPreview; exports.findComboMatch = _chunkXERD2YCJcjs.findComboMatch; exports.getContextMenuHost = _chunkPUSFH5CVcjs.getContextMenuHost; exports.itemMenuConfigToExtraSections = _chunk7VDSMZWIcjs.itemMenuConfigToExtraSections; exports.itemToastPromise = _chunk7VDSMZWIcjs.toastPromise; exports.joinExtraSections = _chunk7VDSMZWIcjs.joinExtraSections; exports.joinRowAndSurfaceContext = _chunk7VDSMZWIcjs.joinRowAndSurfaceContext; exports.jsonSectionLabel = _chunkTSOUI723cjs.jsonSectionLabel; exports.loadContextMenuHost = _chunkPUSFH5CVcjs.loadContextMenuHost; exports.matchRule = _chunk6E24ONDYcjs.matchRule; exports.mergeFieldName = _chunkTSOUI723cjs.mergeFieldName; exports.mergeResolvedContextData = _chunk7VDSMZWIcjs.mergeResolvedContextData; exports.openContextMenuForElement = openContextMenuForElement; exports.openRecordMenu = _chunk7VDSMZWIcjs.openRecordMenu; exports.parseKeyCombo = _chunkXERD2YCJcjs.parseKeyCombo; exports.preloadTableShape = _chunk7VDSMZWIcjs.preloadTableShape; exports.proposedArrangement = proposedArrangement; exports.recordMenuChanged = _chunk7VDSMZWIcjs.recordMenuChanged; exports.recordMenusRevision = _chunk7VDSMZWIcjs.recordMenusRevision; exports.registerRecordMenu = _chunk7VDSMZWIcjs.registerRecordMenu; exports.registerTableRowContextResolver = _chunk7VDSMZWIcjs.registerTableRowContextResolver; exports.regroupResolved = _chunk6E24ONDYcjs.regroupResolved; exports.resetContextMenuHost = _chunkPUSFH5CVcjs.resetContextMenuHost; exports.resolveEffectiveEntity = _chunk7VDSMZWIcjs.resolveEffectiveEntity; exports.resolveEffectiveEntityWithDom = _chunk7VDSMZWIcjs.resolveEffectiveEntityWithDom; exports.resolveRecordMenu = _chunk7VDSMZWIcjs.resolveRecordMenu; exports.resolveTableRowItem = _chunk7VDSMZWIcjs.resolveTableRowItem; exports.resolveTableRowMenuDescriptor = _chunk7VDSMZWIcjs.resolveTableRowMenuDescriptor; exports.rowRecordName = _chunk7VDSMZWIcjs.rowRecordName; exports.sniffEntityFromDom = _chunk7VDSMZWIcjs.sniffEntityFromDom; exports.subscribeRecordMenus = _chunk7VDSMZWIcjs.subscribeRecordMenus; exports.tableRowEditCommands = _chunk7VDSMZWIcjs.tableRowEditCommands; exports.tableTextAtTarget = _chunk7VDSMZWIcjs.tableTextAtTarget; exports.topLevelRowCount = _chunk6E24ONDYcjs.topLevelRowCount; exports.useContextMenuHostBindings = _chunkPUSFH5CVcjs.useContextMenuHostBindings;
564
+
565
+
566
+
567
+
568
+
569
+
570
+
571
+
572
+
573
+
574
+
575
+
576
+
577
+
578
+
579
+
580
+
581
+
582
+
583
+
584
+
585
+
586
+
587
+
588
+
589
+
590
+
591
+
592
+
593
+
594
+
595
+ exports.CANONICAL_MENU_VERSION_V3 = _chunkWROBL3DRcjs.CANONICAL_MENU_VERSION_V3; exports.CONTEXT_MENU_ENGINE_ID_PREFIXES = CONTEXT_MENU_ENGINE_ID_PREFIXES; exports.CONTEXT_MENU_ENGINE_ROWS = CONTEXT_MENU_ENGINE_ROWS; exports.CONTEXT_MENU_ENTITY_KEY = _chunkWROBL3DRcjs.CONTEXT_MENU_ENTITY_KEY; exports.CONTEXT_MENU_HEADING_KEY = _chunkWROBL3DRcjs.CONTEXT_MENU_HEADING_KEY; exports.CONTEXT_MENU_SELECTION_HOST_KEY = _chunkERFH2RZCcjs.CONTEXT_MENU_SELECTION_HOST_KEY; exports.CONTEXT_REGION_TRIGGER_ATTRS = _chunkERFH2RZCcjs.CONTEXT_REGION_TRIGGER_ATTRS; exports.DEFAULT_CONTEXT_MENU_HOST = _chunkPUSFH5CVcjs.DEFAULT_CONTEXT_MENU_HOST; exports.DEFAULT_MENU_DENSITY = _chunkWROBL3DRcjs.DEFAULT_MENU_DENSITY; exports.DEFAULT_MENU_LAYOUT = _chunkWROBL3DRcjs.DEFAULT_MENU_LAYOUT; exports.FIELD_PREVIEW_MAX = _chunk7TIZAANUcjs.FIELD_PREVIEW_MAX; exports.GLOBAL_SCOPE = _chunk7TIZAANUcjs.GLOBAL_SCOPE; exports.MANAGED_CONTEXT_MENU_AGENT_CONFIG = _chunk7TIZAANUcjs.MANAGED_CONTEXT_MENU_AGENT_CONFIG; exports.MENU_LIBRARY_DEADLINE_MS = _chunk7TIZAANUcjs.MENU_LIBRARY_DEADLINE_MS; exports.MenuLibraryTimeoutError = _chunk7TIZAANUcjs.MenuLibraryTimeoutError; exports.OWN_ROWS_MAX = OWN_ROWS_MAX; exports.PROPOSED_MENU_GROUPING = PROPOSED_MENU_GROUPING; exports.RECORD_MENU_ATTR = _chunkERFH2RZCcjs.RECORD_MENU_ATTR; exports.REGROUP_ID_PREFIX = _chunk6E24ONDYcjs.REGROUP_ID_PREFIX; exports.STRIP_MAX = STRIP_MAX; exports.actionLabel = _chunk6E24ONDYcjs.actionLabel; exports.actionsAlreadyHere = _chunk7TIZAANUcjs.actionsAlreadyHere; exports.applyAvailability = _availability.applyAvailability; exports.auditRegroup = _chunk6E24ONDYcjs.auditRegroup; exports.buildApplicationScopeFromMenuContext = _buildapplicationscope.buildApplicationScopeFromMenuContext; exports.buildAvailableKeys = _chunk7TIZAANUcjs.buildAvailableKeys; exports.buildDefaultTableRowMenuDescriptor = _chunkERFH2RZCcjs.buildDefaultTableRowMenuDescriptor; exports.buildEditableWidgetHandle = _chunkERFH2RZCcjs.buildEditableWidgetHandle; exports.buildJsonMenuSection = _chunk7TIZAANUcjs.buildJsonMenuSection; exports.captureDomSelection = _chunkWROBL3DRcjs.captureDomSelection; exports.captureTextareaSelection = _chunkWROBL3DRcjs.captureTextareaSelection; exports.clickedKind = clickedKind; exports.configureContextMenuHost = _chunkPUSFH5CVcjs.configureContextMenuHost; exports.contextMenuSelectionProvider = _chunkERFH2RZCcjs.contextMenuSelectionProvider; exports.createDefaultTableRowMenuDescriptor = _chunkERFH2RZCcjs.createDefaultTableRowMenuDescriptor; exports.createTableRowMenuDescriptor = _chunkERFH2RZCcjs.createTableRowMenuDescriptor; exports.currentModel = _chunk6E24ONDYcjs.currentModel; exports.decideOffer = _chunk7TIZAANUcjs.decideOffer; exports.destinationFor = _chunk6E24ONDYcjs.destinationFor; exports.domainOfSurfaceName = _chunk7TIZAANUcjs.domainOfSurfaceName; exports.drawnPlaces = _chunk6E24ONDYcjs.drawnPlaces; exports.eventMatchesCombo = _chunkWROBL3DRcjs.eventMatchesCombo; exports.extractElementText = _chunkWROBL3DRcjs.extractElementText; exports.fieldLabelOf = _chunk7TIZAANUcjs.fieldLabelOf; exports.fieldPreview = _chunk7TIZAANUcjs.fieldPreview; exports.findComboMatch = _chunkWROBL3DRcjs.findComboMatch; exports.getContextMenuHost = _chunkPUSFH5CVcjs.getContextMenuHost; exports.getEditableSelectionOffsets = _chunkWROBL3DRcjs.getEditableSelectionOffsets; exports.getSelectionRect = _chunkWROBL3DRcjs.getSelectionRect; exports.itemMenuConfigToExtraSections = _chunkERFH2RZCcjs.itemMenuConfigToExtraSections; exports.itemToastPromise = _chunkERFH2RZCcjs.toastPromise; exports.joinExtraSections = _chunkERFH2RZCcjs.joinExtraSections; exports.joinRowAndSurfaceContext = _chunkERFH2RZCcjs.joinRowAndSurfaceContext; exports.jsonSectionLabel = _chunk7TIZAANUcjs.jsonSectionLabel; exports.loadContextMenuHost = _chunkPUSFH5CVcjs.loadContextMenuHost; exports.matchRule = _chunk6E24ONDYcjs.matchRule; exports.mergeFieldName = _chunk7TIZAANUcjs.mergeFieldName; exports.mergeResolvedContextData = _chunkERFH2RZCcjs.mergeResolvedContextData; exports.mouseFallbackRect = _chunkWROBL3DRcjs.mouseFallbackRect; exports.needs = _availability.needs; exports.openContextMenuForElement = openContextMenuForElement; exports.openRecordMenu = _chunkERFH2RZCcjs.openRecordMenu; exports.parseKeyCombo = _chunkWROBL3DRcjs.parseKeyCombo; exports.preloadTableShape = _chunkERFH2RZCcjs.preloadTableShape; exports.proposedArrangement = proposedArrangement; exports.readMenuScope = _chunk7TIZAANUcjs.readMenuScope; exports.recordMenuChanged = _chunkERFH2RZCcjs.recordMenuChanged; exports.recordMenusRevision = _chunkERFH2RZCcjs.recordMenusRevision; exports.registerRecordMenu = _chunkERFH2RZCcjs.registerRecordMenu; exports.registerTableRowContextResolver = _chunkERFH2RZCcjs.registerTableRowContextResolver; exports.regroupResolved = _chunk6E24ONDYcjs.regroupResolved; exports.requirementsOf = _chunk7TIZAANUcjs.requirementsOf; exports.resetContextMenuHost = _chunkPUSFH5CVcjs.resetContextMenuHost; exports.resolveEffectiveEntity = _chunkERFH2RZCcjs.resolveEffectiveEntity; exports.resolveEffectiveEntityWithDom = _chunkERFH2RZCcjs.resolveEffectiveEntityWithDom; exports.resolveMarkdownContext = _resolveMarkdownContext.resolveMarkdownContext; exports.resolveRecordMenu = _chunkERFH2RZCcjs.resolveRecordMenu; exports.resolveTableRowItem = _chunkERFH2RZCcjs.resolveTableRowItem; exports.resolveTableRowMenuDescriptor = _chunkERFH2RZCcjs.resolveTableRowMenuDescriptor; exports.restoreDomSelection = _chunkWROBL3DRcjs.restoreDomSelection; exports.restoreTextareaSelection = _chunkWROBL3DRcjs.restoreTextareaSelection; exports.rowRecordName = _chunkERFH2RZCcjs.rowRecordName; exports.scopeReaches = _chunk7TIZAANUcjs.scopeReaches; exports.sniffEntityFromDom = _chunkERFH2RZCcjs.sniffEntityFromDom; exports.spliceInputValue = _chunkWROBL3DRcjs.spliceInputValue; exports.subscribeRecordMenus = _chunkERFH2RZCcjs.subscribeRecordMenus; exports.tableRowEditCommands = _chunkERFH2RZCcjs.tableRowEditCommands; exports.tableTextAtTarget = _chunkERFH2RZCcjs.tableTextAtTarget; exports.topLevelRowCount = _chunk6E24ONDYcjs.topLevelRowCount; exports.unavailableHere = _availability.unavailableHere; exports.useContextMenuHostBindings = _chunkPUSFH5CVcjs.useContextMenuHostBindings; exports.withAvailability = _availability.withAvailability; exports.withMenuDeadline = _chunk7TIZAANUcjs.withMenuDeadline; exports.writeMenuScope = _chunk7TIZAANUcjs.writeMenuScope;
628
596
  //# sourceMappingURL=engine.cjs.map