@symbiotejs/symbiote 3.8.0 → 3.8.1

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/README.md CHANGED
@@ -1,24 +1,27 @@
1
1
  [![Tests](https://github.com/symbiotejs/symbiote.js/actions/workflows/tests.yml/badge.svg)](https://github.com/symbiotejs/symbiote.js/actions/workflows/tests.yml)
2
2
  [![npm version](https://img.shields.io/npm/v/@symbiotejs/symbiote)](https://www.npmjs.com/package/@symbiotejs/symbiote)
3
3
  [![npm downloads](https://img.shields.io/npm/dm/@symbiotejs/symbiote)](https://www.npmjs.com/package/@symbiotejs/symbiote)
4
- ![bundle size](https://img.shields.io/badge/brotli-7.3_kb-blue)
5
- ![types](https://img.shields.io/badge/types-JSDoc+d.ts-blue)
6
4
  ![license](https://img.shields.io/badge/license-MIT-green)
7
5
 
8
6
  # Symbiote.js
9
7
 
10
8
  <img src="https://rnd-pro.com/svg/symbiote/index.svg" width="200" alt="Symbiote.js">
11
9
 
12
- A lightweight, standards-first UI library built on Web Components. No virtual DOM, no compiler, no build step required - works directly in the browser. A bundler is recommended for production performance, but entirely optional. **~7.3kb** brotli / **~8.1kb** gzip.
10
+ A lightweight, standards-first UI library built on Web Components. No virtual DOM, no compiler, no black boxes, no excess repaints. No build step required - works directly in the browser. A bundler is recommended for production performance, but entirely optional.
13
11
 
14
- Symbiote.js gives you the convenience of a modern framework while staying close to the native platform - HTML, CSS, and DOM APIs. Components are real custom elements that work everywhere: in any framework, in plain HTML, or in a micro-frontend architecture. And with **isomorphic mode**, the same component code works on the server and the client - server-rendered pages hydrate automatically, no diffing, no mismatch errors.
12
+ Symbiote.js gives you the convenience of a modern framework while staying close to the native platform - HTML, CSS, and DOM APIs. Components are custom elements that work everywhere: in any framework, in plain HTML, in a micro-frontend architecture. And with **isomorphic mode**, the same component code works on the server and the client - server-rendered pages hydrate automatically, no diffing, no mismatch errors.
15
13
 
16
- ## What's new?
14
+ Here are the three most important differences between Symbiote.js and other frameworks:
15
+ 1. Natural DOM Extension Philosophy - designed to extend platform, not to replace it
16
+ 2. Runtime-Agnostic HTML Templates - outstanding flexibility for rendering strategies and further customization
17
+ 3. Powerful App-wide State Management - combine data contexts without bloated boilerplate or external tools
17
18
 
18
- - **Experimental WebMCP support** - expose live Symbiote UI actions as browser-native tools for agents. See the [WebMCP docs](https://github.com/symbiotejs/symbiote.js/blob/webmcp/docs/webmcp.md).
19
+ ## What's new in v3.x?
20
+
21
+ - **WebMCP support** - expose live Symbiote UI actions as browser-native tools for agents. See the [WebMCP docs](https://github.com/symbiotejs/symbiote.js/blob/webmcp/docs/webmcp.md).
19
22
  - **Server-Side Rendering** - render components to HTML with `SSR.processHtml()` or stream chunks with `SSR.renderToStream()`. Client-side hydration via `ssrMode` attaches bindings to existing DOM without re-rendering.
20
23
  - **Isomorphic components** - `isoMode` flag makes components work in both SSR and client-only scenarios automatically. If server-rendered content exists, it hydrates; otherwise it renders the template from scratch. One component, zero conditional logic.
21
- - **Computed properties** - reactive derived state with microtask batching.
24
+ - **Computed properties refined** - reactive derived state with microtask batching.
22
25
  - **Path-based router** - optional `AppRouter` module with `:param` extraction, route guards, and lazy loading.
23
26
  - **Exit animations** - `animateOut(el)` for CSS-driven exit transitions, integrated into itemize API.
24
27
  - **Dev mode** - `Symbiote.devMode` enables verbose warnings; import `devMessages.js` for full human-readable messages.
@@ -336,18 +339,7 @@ CSS values are parsed automatically - quoted strings become strings, numbers bec
336
339
  - **Reusable component libraries** - works in React, Vue, Angular, or plain HTML
337
340
  - **SSR-powered apps** - lightweight server rendering without framework lock-in
338
341
  - **Framework-agnostic solutions** - one codebase, any context
339
-
340
- ## Bundle size
341
-
342
- | Library | Minified | Gzip | Brotli |
343
- |---------|----------|------|--------|
344
- | **Symbiote.js** (core) | 23.6 kb | 8.1 kb | **7.3 kb** |
345
- | **Symbiote.js** (full, with AppRouter + WebMCP export) | 35.6 kb | 12.1 kb | **11.0 kb** |
346
- | **Symbiote.js** (WebMCP extension) | 31.4 kb | 10.6 kb | **9.6 kb** |
347
- | **Lit** 3.3 | 15.5 kb | 6.0 kb | **~5.1 kb** |
348
- | **React 19 + ReactDOM** | ~186 kb | ~59 kb | **~50 kb** |
349
-
350
- Symbiote and Lit have similar base sizes, but Symbiote's **7.3 kb** core includes more built-in features: global state management, lists (itemize API), exit animations, computed properties etc. Lit needs additional packages for comparable features. React is **~7× larger** before adding a router, state manager, or SSR framework.
342
+ - **Modern AI-first web** - expose the application state to WebMCP tools automatically
351
343
 
352
344
  ## Browser support
353
345
 
package/core/webmcp.js CHANGED
@@ -22,7 +22,7 @@ import { parseProp } from './parseProp.js';
22
22
  * @property {string | ((owner?: any) => string)} [description]
23
23
  * @property {Object | ((owner?: any) => Object)} [inputSchema]
24
24
  * @property {(args?: Object, owner?: any, event?: Event) => any} [execute]
25
- * @property {() => boolean} [when]
25
+ * @property {(owner?: any) => boolean} [when]
26
26
  * @property {string[]} [deps]
27
27
  * @property {string[]} [exposedTo]
28
28
  * @property {Object} [annotations]
@@ -53,6 +53,7 @@ let installedClasses = new WeakSet();
53
53
  let pendingOwnerSync = new WeakSet();
54
54
  /** @type {WeakMap<object, number>} */
55
55
  let ownerVersions = new WeakMap();
56
+ let _modelContext;
56
57
 
57
58
  function isToolDescriptor(val) {
58
59
  return !!val?.[DICT.MCP_TOOL_DESCRIPTOR_MARKER];
@@ -244,13 +245,16 @@ function ownerId(owner) {
244
245
  }
245
246
 
246
247
  function getModelContext() {
248
+ if (_modelContext) return _modelContext;
247
249
  let docCtx = /** @type {any} */ (globalThis.document)?.modelContext;
248
250
  if (docCtx?.registerTool) {
249
- return docCtx;
251
+ _modelContext = docCtx;
252
+ return _modelContext;
250
253
  }
251
254
  let navCtx = /** @type {any} */ (globalThis.navigator)?.modelContext;
252
255
  if (navCtx?.registerTool) {
253
- return navCtx;
256
+ _modelContext = navCtx;
257
+ return _modelContext;
254
258
  }
255
259
  return null;
256
260
  }
@@ -591,13 +595,16 @@ function scheduleOwnerSync(owner) {
591
595
  }
592
596
 
593
597
  export class ToolDescriptor {
598
+ /** @type {((args?: Object, owner?: any, event?: Event) => any) | undefined} */
599
+ #fn;
600
+
594
601
  /** @param {ToolDescriptorOptions} options */
595
602
  constructor(options = {}) {
596
603
  this[DICT.MCP_TOOL_DESCRIPTOR_MARKER] = true;
597
604
  this.name = options.name;
598
605
  this.description = options.description || 'Symbiote WebMCP tool.';
599
606
  this.inputSchema = options.inputSchema || emptySchema();
600
- this.fn = options.execute;
607
+ this.#fn = options.execute;
601
608
  this.when = options.when;
602
609
  this.deps = options.deps || [];
603
610
  this.exposedTo = options.exposedTo;
@@ -611,15 +618,15 @@ export class ToolDescriptor {
611
618
  * @returns {any}
612
619
  */
613
620
  execute(args = {}, owner, event) {
614
- if (typeof this.fn !== 'function') {
621
+ if (typeof this.#fn !== 'function') {
615
622
  throw new Error('ToolDescriptor requires an execute function.');
616
623
  }
617
- return this.fn.call(owner, args || {}, owner, event);
624
+ return this.#fn.call(owner, args || {}, owner, event);
618
625
  }
619
626
  }
620
627
 
621
628
  export const webMCPRegistry = (() => {
622
- let existing = PubSub.getCtx(REGISTRY_UID, false);
629
+ let existing = PubSub.getCtx(REGISTRY_UID);
623
630
  let root = existing || PubSub.registerCtx({}, REGISTRY_UID);
624
631
  ensureNestedCtx(root, 'tools');
625
632
  ensureNestedCtx(root, 'owners');
@@ -662,32 +669,23 @@ export function registerWebMCPTool(owner, key, descriptor) {
662
669
  webMCPRegistry.store.tools.add(publicName, resolvedEntry, true);
663
670
  }
664
671
  return resolvedEntry;
672
+ }).catch((e) => {
673
+ setDiagnostic('lastError', e);
674
+ throw e;
665
675
  });
666
676
  }
667
677
  webMCPRegistry.store.tools.add(publicName, entry, true);
668
678
  return entry;
669
679
  }
670
680
 
671
- /** @param {any} owner */
672
- export function syncWebMCPTools(owner) {
673
- if (!owner) return;
674
- if (isElementOwner(owner) && !owner.isConnected) {
675
- unregisterWebMCPTools(owner);
676
- return;
677
- }
678
- let version = bumpOwnerVersion(owner);
679
- let id = ownerId(owner);
680
- let desired = collectDesiredTools(owner);
681
- setupDeps(owner, desired);
682
- let owners = webMCPRegistry.store.owners;
683
- let ownerEntry = owners.has(id)
684
- ? owners.read(id)
685
- : {
686
- ownerId: id,
687
- ownerType: ownerType(owner),
688
- ownerName: ownerName(owner),
689
- toolsByKey: {},
690
- };
681
+ /**
682
+ * @param {any} owner
683
+ * @param {string} id
684
+ * @param {{ownerId: string, ownerType: string, ownerName: string, toolsByKey: Record<string, string>}} ownerEntry
685
+ * @param {Array<{key: string, baseName: string, descriptor: ToolDescriptor, executor: Function}>} desired
686
+ * @param {string} componentDescription
687
+ */
688
+ function applyDesiredTools(owner, id, ownerEntry, desired, componentDescription) {
691
689
  let nextKeys = new Set();
692
690
  for (let item of desired) {
693
691
  nextKeys.add(item.key);
@@ -703,17 +701,9 @@ export function syncWebMCPTools(owner) {
703
701
  if (hasToolName(publicName)) {
704
702
  unregisterToolName(publicName);
705
703
  }
706
- let entry = makeEntry(publicName, item.key, item.descriptor, owner, item.executor);
704
+ let entry = makeEntryWithComponentDescription(publicName, item.key, item.descriptor, owner, item.executor, componentDescription);
707
705
  ownerEntry.toolsByKey[item.key] = publicName;
708
- if (entry instanceof Promise) {
709
- entry.then((resolvedEntry) => {
710
- if (isCurrentOwnerVersion(owner, version)) {
711
- webMCPRegistry.store.tools.add(publicName, resolvedEntry, true);
712
- }
713
- });
714
- } else {
715
- webMCPRegistry.store.tools.add(publicName, entry, true);
716
- }
706
+ webMCPRegistry.store.tools.add(publicName, entry, true);
717
707
  }
718
708
  for (let key in ownerEntry.toolsByKey) {
719
709
  if (!nextKeys.has(key)) {
@@ -723,9 +713,40 @@ export function syncWebMCPTools(owner) {
723
713
  }
724
714
  if (Object.keys(ownerEntry.toolsByKey).length) {
725
715
  updateOwnerEntry(id, ownerEntry);
726
- } else if (owners.has(id)) {
727
- owners.delete(id);
716
+ } else if (webMCPRegistry.store.owners.has(id)) {
717
+ webMCPRegistry.store.owners.delete(id);
718
+ }
719
+ }
720
+
721
+ /** @param {any} owner */
722
+ export function syncWebMCPTools(owner) {
723
+ if (!owner) return;
724
+ if (isElementOwner(owner) && !owner.isConnected) {
725
+ unregisterWebMCPTools(owner);
726
+ return;
727
+ }
728
+ let version = bumpOwnerVersion(owner);
729
+ let id = ownerId(owner);
730
+ let desired = collectDesiredTools(owner);
731
+ setupDeps(owner, desired);
732
+ let owners = webMCPRegistry.store.owners;
733
+ let ownerEntry = owners.has(id)
734
+ ? owners.read(id)
735
+ : {
736
+ ownerId: id,
737
+ ownerType: ownerType(owner),
738
+ ownerName: ownerName(owner),
739
+ toolsByKey: {},
740
+ };
741
+ let componentDescription = readComponentDescription(owner);
742
+ if (typeof componentDescription !== 'string') {
743
+ componentDescription.then((resolved) => {
744
+ if (!isCurrentOwnerVersion(owner, version)) return;
745
+ applyDesiredTools(owner, id, ownerEntry, desired, resolved);
746
+ }).catch((e) => setDiagnostic('lastError', e));
747
+ return;
728
748
  }
749
+ applyDesiredTools(owner, id, ownerEntry, desired, componentDescription);
729
750
  }
730
751
 
731
752
  /** @param {any} owner */
package/docs/webmcp.md CHANGED
@@ -1,12 +1,6 @@
1
- # WebMCP Experimental
1
+ # WebMCP
2
2
 
3
- Symbiote.js can expose the current browser UI state as native WebMCP tools. This feature is experimental and intended for testing with browser builds that expose native WebMCP APIs, such as Chrome Canary 150.
4
-
5
- Install the experimental npm release with the `webmcp` tag:
6
-
7
- ```shell
8
- npm i @symbiotejs/symbiote@webmcp
9
- ```
3
+ Symbiote.js can expose the current browser UI state as native WebMCP tools.
10
4
 
11
5
  ## Activation
12
6
 
@@ -14,7 +8,7 @@ WebMCP is optional. Import the extension before WebMCP-enabled components render
14
8
 
15
9
  ```js
16
10
  import Symbiote, { html } from '@symbiotejs/symbiote';
17
- import { ToolDescriptor } from '@symbiotejs/symbiote/webmcp';
11
+ import '@symbiotejs/symbiote/webmcp';
18
12
  ```
19
13
 
20
14
  ## Automatic Tools
@@ -64,6 +58,8 @@ removeItem_in_task-list_task-item_alpha
64
58
  Use `ToolDescriptor` for descriptions, input schemas, execution logic, and dynamic visibility:
65
59
 
66
60
  ```js
61
+ import { ToolDescriptor } from '@symbiotejs/symbiote/webmcp';
62
+
67
63
  class WebmcpPanel extends Symbiote {
68
64
  componentDescription = async () => {
69
65
  return 'Visible order editor with selected item state.';
package/llms-full.txt CHANGED
@@ -2,16 +2,21 @@
2
2
 
3
3
  <img src="https://rnd-pro.com/svg/symbiote/index.svg" width="200" alt="Symbiote.js">
4
4
 
5
- A lightweight, standards-first UI library built on Web Components. No virtual DOM, no compiler, no build step required - works directly in the browser. A bundler is recommended for production performance, but entirely optional. **~7.3kb** brotli / **~8.1kb** gzip.
5
+ A lightweight, standards-first UI library built on Web Components. No virtual DOM, no compiler, no black boxes, no excess repaints. No build step required - works directly in the browser. A bundler is recommended for production performance, but entirely optional.
6
6
 
7
- Symbiote.js gives you the convenience of a modern framework while staying close to the native platform - HTML, CSS, and DOM APIs. Components are real custom elements that work everywhere: in any framework, in plain HTML, or in a micro-frontend architecture. And with **isomorphic mode**, the same component code works on the server and the client - server-rendered pages hydrate automatically, no diffing, no mismatch errors.
7
+ Symbiote.js gives you the convenience of a modern framework while staying close to the native platform - HTML, CSS, and DOM APIs. Components are custom elements that work everywhere: in any framework, in plain HTML, in a micro-frontend architecture. And with **isomorphic mode**, the same component code works on the server and the client - server-rendered pages hydrate automatically, no diffing, no mismatch errors.
8
8
 
9
- ## What's new?
9
+ Here are the three most important differences between Symbiote.js and other frameworks:
10
+ 1. Natural DOM Extension Philosophy - designed to extend platform, not to replace it
11
+ 2. Runtime-Agnostic HTML Templates - outstanding flexibility for rendering strategies and further customization
12
+ 3. Powerful App-wide State Management - combine data contexts without bloated boilerplate or external tools
10
13
 
11
- - **Experimental WebMCP support** - expose live Symbiote UI actions as browser-native tools for agents. See the [WebMCP docs](https://github.com/symbiotejs/symbiote.js/blob/webmcp/docs/webmcp.md).
14
+ ## What's new in v3.x?
15
+
16
+ - **WebMCP support** - expose live Symbiote UI actions as browser-native tools for agents. See the [WebMCP docs](https://github.com/symbiotejs/symbiote.js/blob/webmcp/docs/webmcp.md).
12
17
  - **Server-Side Rendering** - render components to HTML with `SSR.processHtml()` or stream chunks with `SSR.renderToStream()`. Client-side hydration via `ssrMode` attaches bindings to existing DOM without re-rendering.
13
18
  - **Isomorphic components** - `isoMode` flag makes components work in both SSR and client-only scenarios automatically. If server-rendered content exists, it hydrates; otherwise it renders the template from scratch. One component, zero conditional logic.
14
- - **Computed properties** - reactive derived state with microtask batching.
19
+ - **Computed properties refined** - reactive derived state with microtask batching.
15
20
  - **Path-based router** - optional `AppRouter` module with `:param` extraction, route guards, and lazy loading.
16
21
  - **Exit animations** - `animateOut(el)` for CSS-driven exit transitions, integrated into itemize API.
17
22
  - **Dev mode** - `Symbiote.devMode` enables verbose warnings; import `devMessages.js` for full human-readable messages.
@@ -329,18 +334,7 @@ CSS values are parsed automatically - quoted strings become strings, numbers bec
329
334
  - **Reusable component libraries** - works in React, Vue, Angular, or plain HTML
330
335
  - **SSR-powered apps** - lightweight server rendering without framework lock-in
331
336
  - **Framework-agnostic solutions** - one codebase, any context
332
-
333
- ## Bundle size
334
-
335
- | Library | Minified | Gzip | Brotli |
336
- |---------|----------|------|--------|
337
- | **Symbiote.js** (core) | 23.6 kb | 8.1 kb | **7.3 kb** |
338
- | **Symbiote.js** (full, with AppRouter + WebMCP export) | 35.6 kb | 12.1 kb | **11.0 kb** |
339
- | **Symbiote.js** (WebMCP extension) | 31.4 kb | 10.6 kb | **9.6 kb** |
340
- | **Lit** 3.3 | 15.5 kb | 6.0 kb | **~5.1 kb** |
341
- | **React 19 + ReactDOM** | ~186 kb | ~59 kb | **~50 kb** |
342
-
343
- Symbiote and Lit have similar base sizes, but Symbiote's **7.3 kb** core includes more built-in features: global state management, lists (itemize API), exit animations, computed properties etc. Lit needs additional packages for comparable features. React is **~7× larger** before adding a router, state manager, or SSR framework.
337
+ - **Modern AI-first web** - expose the application state to WebMCP tools automatically
344
338
 
345
339
  ## Browser support
346
340
 
@@ -5149,15 +5143,9 @@ Use Symbiote dev/runtime diagnostics for template binding correctness, because t
5149
5143
 
5150
5144
  ---
5151
5145
 
5152
- # WebMCP Experimental
5153
-
5154
- Symbiote.js can expose the current browser UI state as native WebMCP tools. This feature is experimental and intended for testing with browser builds that expose native WebMCP APIs, such as Chrome Canary 150.
5155
-
5156
- Install the experimental npm release with the `webmcp` tag:
5146
+ # WebMCP
5157
5147
 
5158
- ```shell
5159
- npm i @symbiotejs/symbiote@webmcp
5160
- ```
5148
+ Symbiote.js can expose the current browser UI state as native WebMCP tools.
5161
5149
 
5162
5150
  ## Activation
5163
5151
 
@@ -5165,7 +5153,7 @@ WebMCP is optional. Import the extension before WebMCP-enabled components render
5165
5153
 
5166
5154
  ```js
5167
5155
  import Symbiote, { html } from '@symbiotejs/symbiote';
5168
- import { ToolDescriptor } from '@symbiotejs/symbiote/webmcp';
5156
+ import '@symbiotejs/symbiote/webmcp';
5169
5157
  ```
5170
5158
 
5171
5159
  ## Automatic Tools
@@ -5215,6 +5203,8 @@ removeItem_in_task-list_task-item_alpha
5215
5203
  Use `ToolDescriptor` for descriptions, input schemas, execution logic, and dynamic visibility:
5216
5204
 
5217
5205
  ```js
5206
+ import { ToolDescriptor } from '@symbiotejs/symbiote/webmcp';
5207
+
5218
5208
  class WebmcpPanel extends Symbiote {
5219
5209
  componentDescription = async () => {
5220
5210
  return 'Visible order editor with selected item state.';
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@symbiotejs/symbiote",
4
- "version": "3.8.0",
4
+ "version": "3.8.1",
5
5
  "description": "Symbiote.js - zero-dependency close-to-platform frontend library to build super-powered web components",
6
6
  "author": "team@rnd-pro.com",
7
7
  "license": "MIT",
@@ -12,12 +12,12 @@ export class ToolDescriptor {
12
12
  name: string;
13
13
  description: string | ((owner?: any) => string);
14
14
  inputSchema: any;
15
- fn: (args?: any, owner?: any, event?: Event) => any;
16
- when: () => boolean;
15
+ when: (owner?: any) => boolean;
17
16
  deps: string[];
18
17
  exposedTo: string[];
19
18
  annotations: any;
20
19
  execute(args?: any, owner?: any, event?: Event): any;
20
+ #private;
21
21
  }
22
22
  export const webMCPRegistry: PubSub<any>;
23
23
  declare namespace _default {
@@ -43,7 +43,7 @@ export type ToolDescriptorOptions = {
43
43
  description?: string | ((owner?: any) => string);
44
44
  inputSchema?: any | ((owner?: any) => any);
45
45
  execute?: (args?: any, owner?: any, event?: Event) => any;
46
- when?: () => boolean;
46
+ when?: (owner?: any) => boolean;
47
47
  deps?: string[];
48
48
  exposedTo?: string[];
49
49
  annotations?: any;
@@ -1 +1 @@
1
- {"version":3,"file":"webmcp.d.ts","sourceRoot":"","sources":["../../core/webmcp.js"],"names":[],"mappings":"AA8nBA,0CALW,GAAG,OACH,MAAM,cACN,cAAc,GACZ,CAAC,mBAAmB,GAAG;IAAC,UAAU,EAAE,eAAe,GAAG,IAAI,CAAA;CAAC,CAAC,GAAG,OAAO,CAAC,mBAAmB,GAAG;IAAC,UAAU,EAAE,eAAe,GAAG,IAAI,CAAA;CAAC,CAAC,CAgC9I;AAGD,uCADY,GAAG,QA0Dd;AAGD,6CADY,GAAG,QAyBd;AAGD,wCADc,mBAAmB,EAAE,CAIlC;AAGD,8CADY,OAAO,QAAQ,QA+B1B;AA1MD;IAEE,sBADY,qBAAqB,EAWhC;IARC,aAAwB;IACxB,gCAhkB6B,GAAG,KAAK,MAAM,EAgkBsB;IACjE,iBAAuD;IACvD,yBAhkBkC,GAAG,UAAU,KAAK,KAAK,GAAG,CAgkBnC;IACzB,YAhkBgB,OAAO,CAgkBC;IACxB,eAA8B;IAC9B,oBAAkC;IAClC,iBAAsC;IASxC,4BAJW,GAAG,UACH,KAAK,GACH,GAAG,CAOf;CACF;AAED,yCAUK;;;;;;;;;;;;UA9mBS,MAAM;UACN,MAAM;;;cAKN,oBAAoB,EAAE;cACtB,OAAO;;;WAKP,MAAM;kBACN,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,MAAM,CAAC;kBAClC,MAAS,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,QAAW,CAAC;cAClC,CAAC,IAAI,CAAC,KAAQ,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,KAAK,KAAK,GAAG;WAClD,MAAM,OAAO;WACb,MAAM,EAAE;gBACR,MAAM,EAAE;;;;UAMR,MAAM;SACN,MAAM;aACN,MAAM;eACN,WAAW,GAAG,SAAS;eACvB,MAAM;0BACN,MAAM;iBACN,MAAM;;YAEN,OAAO;kBACP,OAAO;;qBAxCA,eAAe;mBADjB,aAAa"}
1
+ {"version":3,"file":"webmcp.d.ts","sourceRoot":"","sources":["../../core/webmcp.js"],"names":[],"mappings":"AAqoBA,0CALW,GAAG,OACH,MAAM,cACN,cAAc,GACZ,CAAC,mBAAmB,GAAG;IAAC,UAAU,EAAE,eAAe,GAAG,IAAI,CAAA;CAAC,CAAC,GAAG,OAAO,CAAC,mBAAmB,GAAG;IAAC,UAAU,EAAE,eAAe,GAAG,IAAI,CAAA;CAAC,CAAC,CAmC9I;AA2CD,uCADY,GAAG,QA6Bd;AAGD,6CADY,GAAG,QAyBd;AAGD,wCADc,mBAAmB,EAAE,CAIlC;AAGD,8CADY,OAAO,QAAQ,QA+B1B;AA3ND;IAKE,sBADY,qBAAqB,EAWhC;IARC,aAAwB;IACxB,gCAvkB6B,GAAG,KAAK,MAAM,EAukBsB;IACjE,iBAAuD;IAEvD,eAvkBmB,GAAG,KAAK,OAAO,CAukBV;IACxB,eAA8B;IAC9B,oBAAkC;IAClC,iBAAsC;IASxC,4BAJW,GAAG,UACH,KAAK,GACH,GAAG,CAOf;;CACF;AAED,yCAUK;;;;;;;;;;;;UArnBS,MAAM;UACN,MAAM;;;cAKN,oBAAoB,EAAE;cACtB,OAAO;;;WAKP,MAAM;kBACN,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,MAAM,CAAC;kBAClC,MAAS,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,QAAW,CAAC;cAClC,CAAC,IAAI,CAAC,KAAQ,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,KAAK,KAAK,GAAG;WAClD,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,OAAO;WACxB,MAAM,EAAE;gBACR,MAAM,EAAE;;;;UAMR,MAAM;SACN,MAAM;aACN,MAAM;eACN,WAAW,GAAG,SAAS;eACvB,MAAM;0BACN,MAAM;iBACN,MAAM;;YAEN,OAAO;kBACP,OAAO;;qBAxCA,eAAe;mBADjB,aAAa"}