@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.
- package/CHANGELOG.md +12 -0
- package/dist/builder.cjs +17 -18
- package/dist/builder.cjs.map +1 -1
- package/dist/builder.js +2 -3
- package/dist/builder.js.map +1 -1
- package/dist/{chunk-ECKA474B.js → chunk-2B37SXQW.js} +21 -12
- package/dist/chunk-2B37SXQW.js.map +1 -0
- package/dist/{chunk-TSOUI723.cjs → chunk-7TIZAANU.cjs} +26 -11
- package/dist/chunk-7TIZAANU.cjs.map +1 -0
- package/dist/{chunk-A24SBKSA.js → chunk-EG23Y2KW.js} +14 -13
- package/dist/{chunk-A24SBKSA.js.map → chunk-EG23Y2KW.js.map} +1 -1
- package/dist/{chunk-7VDSMZWI.cjs → chunk-ERFH2RZC.cjs} +18 -17
- package/dist/chunk-ERFH2RZC.cjs.map +1 -0
- package/dist/{chunk-EIP5YS4Y.js → chunk-HJU3RU2B.js} +27 -12
- package/dist/chunk-HJU3RU2B.js.map +1 -0
- package/dist/{chunk-SWEWOUHK.cjs → chunk-IH5WN5JP.cjs} +31 -26
- package/dist/chunk-IH5WN5JP.cjs.map +1 -0
- package/dist/{chunk-QXHLM7SS.cjs → chunk-LDMYNYFC.cjs} +42 -33
- package/dist/chunk-LDMYNYFC.cjs.map +1 -0
- package/dist/{chunk-ANJYKQAA.cjs → chunk-MBU4Y22O.cjs} +3 -3
- package/dist/{chunk-ANJYKQAA.cjs.map → chunk-MBU4Y22O.cjs.map} +1 -1
- package/dist/{chunk-L6DPISFT.js → chunk-NBEXJ25Z.js} +24 -19
- package/dist/{chunk-L6DPISFT.js.map → chunk-NBEXJ25Z.js.map} +1 -1
- package/dist/{chunk-LE6ZUVCO.js → chunk-PB3PMDKV.js} +2 -2
- package/dist/{chunk-NOYMFNSU.js → chunk-SJWKMZEJ.js} +33 -12
- package/dist/chunk-SJWKMZEJ.js.map +1 -0
- package/dist/{chunk-XERD2YCJ.cjs → chunk-WROBL3DR.cjs} +32 -11
- package/dist/chunk-WROBL3DR.cjs.map +1 -0
- package/dist/design-store.cjs +0 -1
- package/dist/design-store.cjs.map +1 -1
- package/dist/design-store.js +0 -1
- package/dist/design-store.js.map +1 -1
- package/dist/engine.cjs +64 -96
- package/dist/engine.cjs.map +1 -1
- package/dist/engine.d.cts +7 -7
- package/dist/engine.d.ts +7 -7
- package/dist/engine.js +72 -104
- package/dist/engine.js.map +1 -1
- package/dist/index.cjs +3 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +2 -3
- package/dist/menu-content.cjs +18 -19
- package/dist/menu-content.cjs.map +1 -1
- package/dist/menu-content.js +4 -5
- package/dist/menu-content.js.map +1 -1
- package/dist/menu-inspect.cjs +0 -1
- package/dist/menu-inspect.cjs.map +1 -1
- package/dist/menu-inspect.js +0 -1
- package/dist/menu-inspect.js.map +1 -1
- package/dist/model.cjs +4 -5
- package/dist/model.cjs.map +1 -1
- package/dist/model.js +3 -4
- package/dist/react.cjs +52 -44
- package/dist/react.cjs.map +1 -1
- package/dist/react.js +30 -22
- package/dist/react.js.map +1 -1
- package/package.json +6 -6
- package/dist/chunk-7VDSMZWI.cjs.map +0 -1
- package/dist/chunk-CUODNUAD.cjs +0 -24
- package/dist/chunk-CUODNUAD.cjs.map +0 -1
- package/dist/chunk-ECKA474B.js.map +0 -1
- package/dist/chunk-EIP5YS4Y.js.map +0 -1
- package/dist/chunk-NOYMFNSU.js.map +0 -1
- package/dist/chunk-PE3ZHHM5.js +0 -24
- package/dist/chunk-PE3ZHHM5.js.map +0 -1
- package/dist/chunk-QXHLM7SS.cjs.map +0 -1
- package/dist/chunk-SWEWOUHK.cjs.map +0 -1
- package/dist/chunk-TSOUI723.cjs.map +0 -1
- package/dist/chunk-XERD2YCJ.cjs.map +0 -1
- /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-
|
|
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-
|
|
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
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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
|
-
|
|
81
|
-
|
|
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-
|
|
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
|
|
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
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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
|
-
|
|
87
|
-
|
|
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"]}
|
package/dist/design-store.cjs
CHANGED
|
@@ -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":"AAAA,6rBAAY;AACZ;AACE;AACA;AACF,wDAA6B;AAC7B
|
|
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"]}
|
package/dist/design-store.js
CHANGED
package/dist/design-store.js.map
CHANGED
|
@@ -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":"
|
|
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
|
|
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
|
|
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
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
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
|
-
|
|
151
|
-
|
|
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
|
-
|
|
159
|
-
|
|
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
|
-
|
|
188
|
-
|
|
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
|
-
|
|
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
|