@myop/sdk 0.3.13 → 0.3.15

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 (34) hide show
  1. package/README.md +1 -19
  2. package/dist/bundled-declarations.d.ts +61 -1
  3. package/dist/cjs/{_IframeSDK.06523760.js → _IframeSDK.9748f61d.js} +170 -1
  4. package/dist/cjs/{_IframeSDK.06523760.js.map → _IframeSDK.9748f61d.js.map} +3 -3
  5. package/dist/cjs/_IframeSDK.9bd2ab9c.min.js +1 -0
  6. package/dist/cjs/_WebComponentSDK.28ac5568.min.js +1 -0
  7. package/dist/cjs/{_WebComponentSDK.4ed98c20.js → _WebComponentSDK.6157152e.js} +170 -1
  8. package/dist/cjs/{_WebComponentSDK.4ed98c20.js.map → _WebComponentSDK.6157152e.js.map} +3 -3
  9. package/dist/cjs/{_hostSDK.f8d320df.js → _hostSDK.0fb0e40a.js} +170 -1
  10. package/dist/cjs/{_hostSDK.f8d320df.js.map → _hostSDK.0fb0e40a.js.map} +3 -3
  11. package/dist/cjs/_hostSDK.c253d85a.min.js +1 -0
  12. package/dist/cjs/myop_sdk.js +11 -11
  13. package/dist/cjs/myop_sdk.js.map +1 -1
  14. package/dist/cjs/myop_sdk.min.js +1 -1
  15. package/dist/cjs-bundled/myop_sdk.bundled.js +181 -3
  16. package/dist/cjs-bundled/myop_sdk.bundled.js.map +4 -4
  17. package/dist/cjs-bundled/myop_sdk.bundled.min.js +1 -1
  18. package/dist/module/Iframe/index.js +173 -2
  19. package/dist/module/Iframe/index.js.map +3 -3
  20. package/dist/module/SDK.js +183 -3
  21. package/dist/module/SDK.js.map +4 -4
  22. package/dist/module/embeddedSDK.js +1 -1
  23. package/dist/module/host/components/myopExtractedWebComponent.d.ts +40 -0
  24. package/dist/module/host/embeddedSDK.js +1 -1
  25. package/dist/module/host/index.d.ts +1 -0
  26. package/dist/module/host/index.js +174 -2
  27. package/dist/module/host/index.js.map +3 -3
  28. package/dist/module/host/loaders/HTMLComponentLoader.d.ts +18 -1
  29. package/dist/module/webcomponent/index.js +173 -2
  30. package/dist/module/webcomponent/index.js.map +3 -3
  31. package/package.json +1 -1
  32. package/dist/cjs/_IframeSDK.5b34af50.min.js +0 -1
  33. package/dist/cjs/_WebComponentSDK.acba38a4.min.js +0 -1
  34. package/dist/cjs/_hostSDK.dc07390b.min.js +0 -1
package/README.md CHANGED
@@ -408,25 +408,7 @@ For comprehensive documentation, guides, and examples, visit **[docs.myop.dev](h
408
408
 
409
409
  - [Getting Started Guide](https://docs.myop.dev/docs/quickstart)
410
410
  - [SDK Reference](https://docs.myop.dev/docs/sdk)
411
-
412
- ## Development
413
-
414
- ```bash
415
- # Install dependencies
416
- npm install
417
-
418
- # Start development server
419
- npm run dev
420
-
421
- # Run tests
422
- npm test
423
-
424
- # Build for production
425
- npm run build
426
-
427
- # Generate documentation
428
- npm run build:docs
429
- ```
411
+ - [Auto-Generated Packages](https://docs.myop.dev/docs/learnMyop/AutoGeneratedPackages)
430
412
 
431
413
  ## Related Resources
432
414
 
@@ -571,6 +571,48 @@ declare module "@myop/sdk/host/componentCore" {
571
571
  [K in keyof T]: T[K] extends (...args: infer A) => infer R ? (...args: A) => Promise<R> : T[K];
572
572
  };
573
573
  }
574
+ declare module "@myop/sdk/host/components/myopExtractedWebComponent" {
575
+ import { BaseMyopComponent } from "@myop/sdk/host/components/IMyopComponent";
576
+ import { BaseMyopMessage } from "@myop/sdk/messages";
577
+ import { CleanupHandler, IComponentDefinitionConfig, ISkinConfig } from "@myop/sdk/common";
578
+ import { loaderOptions } from "@myop/sdk/host/hostSDK";
579
+ /**
580
+ * Component wrapper for Myop Web Components that are extracted from HTML
581
+ * and run directly on the host document (not in an iframe).
582
+ *
583
+ * These components use the native Web Components API (Custom Elements + Shadow DOM)
584
+ * and communicate via direct method calls and CustomEvents instead of postMessage.
585
+ */
586
+ export class MyopExtractedWebComponent extends BaseMyopComponent {
587
+ container: HTMLElement;
588
+ private customElement;
589
+ private tagName;
590
+ private ctaCleanup?;
591
+ constructor(componentDefinition: IComponentDefinitionConfig, skin: ISkinConfig, container: HTMLElement, customElement: HTMLElement, tagName: string, options?: loaderOptions);
592
+ cleanupInspect: CleanupHandler;
593
+ inspect(): CleanupHandler;
594
+ hide(): void;
595
+ show(): void;
596
+ /**
597
+ * Initialize the component with data by calling myop_init_interface directly
598
+ */
599
+ initWithData(data: unknown): void;
600
+ /**
601
+ * Get current data from the component
602
+ */
603
+ getData(): unknown;
604
+ /**
605
+ * Set up CTA handler to listen for myop-cta events
606
+ */
607
+ onCta(handler: (action: string, payload: unknown) => void): () => void;
608
+ /**
609
+ * For compatibility with message-based components.
610
+ * Web components don't use postMessage, so this is a no-op for most messages.
611
+ */
612
+ send: (message: BaseMyopMessage<any>) => CleanupHandler;
613
+ dispose: () => void;
614
+ }
615
+ }
574
616
  declare module "@myop/sdk/host/myopLoader" {
575
617
  export const LOADER_GRADIENT = "linear-gradient(135deg, #FF8651 0%, #FFBEA8 50%, #A397F5 100%)";
576
618
  export const FALLBACK_GRADIENT = "linear-gradient(135deg, #9CA3AF 0%, #D1D5DB 50%, #E5E7EB 100%)";
@@ -657,6 +699,7 @@ declare module "@myop/sdk/host" {
657
699
  export { hostSDK } from "@myop/sdk/host/hostSDK";
658
700
  export type { loaderOptions } from "@myop/sdk/host/hostSDK";
659
701
  export * from "@myop/sdk/host/components/IMyopComponent";
702
+ export * from "@myop/sdk/host/components/myopExtractedWebComponent";
660
703
  export * from "@myop/sdk/host/loaders/IMyopLoader";
661
704
  export * from "@myop/sdk/host/componentCore";
662
705
  export * from "@myop/sdk/host/myopLoader";
@@ -1531,13 +1574,30 @@ declare module "@myop/sdk/host/embeddedSDK" {
1531
1574
  }
1532
1575
  declare module "@myop/sdk/host/loaders/HTMLComponentLoader" {
1533
1576
  import { MyopWebComponent } from "@myop/sdk/host/components/myopWebcomponent";
1577
+ import { MyopExtractedWebComponent } from "@myop/sdk/host/components/myopExtractedWebComponent";
1534
1578
  import { BaseMyopLoader } from "@myop/sdk/host/loaders/IMyopLoader";
1535
1579
  import { loaderOptions } from "@myop/sdk/host/hostSDK";
1536
1580
  import { IComponentDefinitionConfig, ISkinConfig } from "@myop/sdk/common";
1537
1581
  import { MyopIframeComponent } from "@myop/sdk/host/components/myopIframeComponent";
1538
1582
  export class HTMLComponentLoader extends BaseMyopLoader {
1539
1583
  type: "HTMLLoader";
1540
- load: (componentDefinition: IComponentDefinitionConfig, skin: ISkinConfig, container: HTMLElement, options?: loaderOptions) => Promise<MyopIframeComponent | MyopWebComponent>;
1584
+ /**
1585
+ * Detect if HTML is a Myop Web Component (starts with marker comment)
1586
+ */
1587
+ private isMyopWebComponent;
1588
+ /**
1589
+ * Extract the web component script content from HTML
1590
+ */
1591
+ private extractWebComponentScript;
1592
+ /**
1593
+ * Execute the web component script on the host document
1594
+ */
1595
+ private executeWebComponentScript;
1596
+ /**
1597
+ * Load a Myop Web Component (extracted and run on host document)
1598
+ */
1599
+ private loadExtractedWebComponent;
1600
+ load: (componentDefinition: IComponentDefinitionConfig, skin: ISkinConfig, container: HTMLElement, options?: loaderOptions) => Promise<MyopExtractedWebComponent | MyopIframeComponent | MyopWebComponent>;
1541
1601
  }
1542
1602
  }
1543
1603
  declare module "@myop/sdk/helpers/applyStylesheet" {
@@ -1818,7 +1818,93 @@ var WebcomponentLoader = class extends BaseMyopLoader {
1818
1818
  };
1819
1819
 
1820
1820
  // version:myop-sdk-version
1821
- var myop_sdk_version_default = "0.3.13";
1821
+ var myop_sdk_version_default = "0.3.15";
1822
+
1823
+ // src/host/components/myopExtractedWebComponent.ts
1824
+ var MyopExtractedWebComponent = class extends BaseMyopComponent {
1825
+ constructor(componentDefinition, skin, container, customElement, tagName, options) {
1826
+ super(componentDefinition, container, options);
1827
+ this.container = container;
1828
+ this.customElement = customElement;
1829
+ this.tagName = tagName;
1830
+ __publicField(this, "ctaCleanup");
1831
+ __publicField(this, "cleanupInspect", () => {
1832
+ });
1833
+ /**
1834
+ * For compatibility with message-based components.
1835
+ * Web components don't use postMessage, so this is a no-op for most messages.
1836
+ */
1837
+ __publicField(this, "send", (message) => {
1838
+ const cleanupHandler = super.send(message);
1839
+ console.debug("[MyopExtractedWebComponent] send() called - web components use direct API instead", message);
1840
+ return cleanupHandler;
1841
+ });
1842
+ __publicField(this, "dispose", () => {
1843
+ var _a;
1844
+ if (this.ctaCleanup) {
1845
+ this.ctaCleanup();
1846
+ }
1847
+ super.dispose();
1848
+ (_a = this.customElement.parentNode) == null ? void 0 : _a.removeChild(this.customElement);
1849
+ });
1850
+ this.element = customElement;
1851
+ this.setInitiated();
1852
+ }
1853
+ inspect() {
1854
+ this.cleanupInspect = setDebugStyle(this.id, "MyopExtractedWebComponent", 0, this.container, this.customElement, this.componentDefinition);
1855
+ return this.cleanupInspect;
1856
+ }
1857
+ hide() {
1858
+ this.customElement.style.opacity = "0";
1859
+ this.customElement.style.position = "absolute";
1860
+ this.customElement.style.pointerEvents = "none";
1861
+ this.customElement.style.visibility = "hidden";
1862
+ this.customElement.style.height = "0";
1863
+ this.customElement.style.width = "0";
1864
+ }
1865
+ show() {
1866
+ this.customElement.style.opacity = "1";
1867
+ this.customElement.style.position = "unset";
1868
+ this.customElement.style.pointerEvents = "all";
1869
+ this.customElement.style.visibility = "visible";
1870
+ this.customElement.style.height = "";
1871
+ this.customElement.style.width = "";
1872
+ }
1873
+ /**
1874
+ * Initialize the component with data by calling myop_init_interface directly
1875
+ */
1876
+ initWithData(data) {
1877
+ if (typeof this.customElement.myop_init_interface === "function") {
1878
+ this.customElement.myop_init_interface(data);
1879
+ }
1880
+ }
1881
+ /**
1882
+ * Get current data from the component
1883
+ */
1884
+ getData() {
1885
+ if (typeof this.customElement.myop_init_interface === "function") {
1886
+ return this.customElement.myop_init_interface();
1887
+ }
1888
+ return void 0;
1889
+ }
1890
+ /**
1891
+ * Set up CTA handler to listen for myop-cta events
1892
+ */
1893
+ onCta(handler) {
1894
+ const listener = (e) => {
1895
+ const customEvent = e;
1896
+ if (customEvent.detail && customEvent.detail.action) {
1897
+ handler(customEvent.detail.action, customEvent.detail.payload);
1898
+ }
1899
+ };
1900
+ this.customElement.addEventListener("myop-cta", listener);
1901
+ const cleanup = () => {
1902
+ this.customElement.removeEventListener("myop-cta", listener);
1903
+ };
1904
+ this.ctaCleanup = cleanup;
1905
+ return cleanup;
1906
+ }
1907
+ };
1822
1908
 
1823
1909
  // src/webcomponent/messageHandlers/BaseWebComponentMessageHandler.ts
1824
1910
  var BaseWebComponentMessageHandler = class extends BaseContextMessageHandler {
@@ -2148,6 +2234,9 @@ var EMBEDDED_SDK_CONTENT = "";
2148
2234
  var HAS_EMBEDDED_SDK = false;
2149
2235
 
2150
2236
  // src/host/loaders/HTMLComponentLoader.ts
2237
+ var MYOP_WEB_COMPONENT_MARKER = "<!-- myop-web-component -->";
2238
+ var MYOP_WEB_COMPONENT_SCRIPT_ID = "myop-web-component";
2239
+ var extractedWebComponentScripts = /* @__PURE__ */ new Set();
2151
2240
  var seen2 = [];
2152
2241
  var sdk;
2153
2242
  var getInitiatedSdk = async () => {
@@ -2186,6 +2275,9 @@ var HTMLComponentLoader = class extends BaseMyopLoader {
2186
2275
  __publicField(this, "type", SkinLoaders.HTMLLoader);
2187
2276
  __publicField(this, "load", async (componentDefinition, skin, container, options) => {
2188
2277
  const loaderConfig = skin.loader;
2278
+ if (this.isMyopWebComponent(loaderConfig.HTML)) {
2279
+ return this.loadExtractedWebComponent(componentDefinition, skin, container, loaderConfig.HTML, options);
2280
+ }
2189
2281
  let domId = "myop-comp-".concat(uuidv4());
2190
2282
  let element;
2191
2283
  if (loaderConfig.shadowRootMode === ShadowRootModeType.localFrame) {
@@ -2270,6 +2362,83 @@ var HTMLComponentLoader = class extends BaseMyopLoader {
2270
2362
  return new MyopWebComponent(componentDefinition, skin, container, element, options);
2271
2363
  });
2272
2364
  }
2365
+ /**
2366
+ * Detect if HTML is a Myop Web Component (starts with marker comment)
2367
+ */
2368
+ isMyopWebComponent(html) {
2369
+ return html.trimStart().startsWith(MYOP_WEB_COMPONENT_MARKER);
2370
+ }
2371
+ /**
2372
+ * Extract the web component script content from HTML
2373
+ */
2374
+ extractWebComponentScript(html) {
2375
+ const parser = new DOMParser();
2376
+ const doc = parser.parseFromString(html, "text/html");
2377
+ const script = doc.getElementById(MYOP_WEB_COMPONENT_SCRIPT_ID);
2378
+ return (script == null ? void 0 : script.textContent) || null;
2379
+ }
2380
+ /**
2381
+ * Execute the web component script on the host document
2382
+ */
2383
+ executeWebComponentScript(scriptContent, scriptId) {
2384
+ if (extractedWebComponentScripts.has(scriptId)) {
2385
+ console.log("[MyopWebComponent] Script already executed for ".concat(scriptId, ", skipping"));
2386
+ return;
2387
+ }
2388
+ const script = document.createElement("script");
2389
+ script.textContent = scriptContent;
2390
+ script.id = "myop-extracted-".concat(scriptId);
2391
+ document.head.appendChild(script);
2392
+ extractedWebComponentScripts.add(scriptId);
2393
+ console.log("[MyopWebComponent] Executed web component script: ".concat(scriptId));
2394
+ }
2395
+ /**
2396
+ * Load a Myop Web Component (extracted and run on host document)
2397
+ */
2398
+ async loadExtractedWebComponent(componentDefinition, skin, container, html, options) {
2399
+ const scriptContent = this.extractWebComponentScript(html);
2400
+ if (!scriptContent) {
2401
+ throw new Error('[MyopWebComponent] No <script id="myop-web-component"> found in HTML');
2402
+ }
2403
+ const scriptId = "".concat(componentDefinition.id, "-").concat(skin.id);
2404
+ const previousTagName = window.__MYOP_TAG_NAME__;
2405
+ this.executeWebComponentScript(scriptContent, scriptId);
2406
+ const tagName = window.__MYOP_TAG_NAME__;
2407
+ if (!tagName) {
2408
+ throw new Error("[MyopWebComponent] Script did not set window.__MYOP_TAG_NAME__");
2409
+ }
2410
+ if (previousTagName && previousTagName !== tagName) {
2411
+ console.warn("[MyopWebComponent] __MYOP_TAG_NAME__ changed from ".concat(previousTagName, " to ").concat(tagName));
2412
+ }
2413
+ const domId = "myop-comp-".concat(uuidv4());
2414
+ const element = document.createElement(tagName);
2415
+ element.id = domId;
2416
+ if (options == null ? void 0 : options.hidden) {
2417
+ element.style.opacity = "0";
2418
+ element.style.position = "absolute";
2419
+ element.style.height = "0";
2420
+ element.style.width = "0";
2421
+ element.style.pointerEvents = "none";
2422
+ element.style.visibility = "hidden";
2423
+ }
2424
+ if (!container.querySelector('[id^="myop-comp-"]')) {
2425
+ container.innerHTML = "";
2426
+ }
2427
+ this.appendChild(container, element, options);
2428
+ const component = new MyopExtractedWebComponent(
2429
+ componentDefinition,
2430
+ skin,
2431
+ container,
2432
+ element,
2433
+ tagName,
2434
+ options
2435
+ );
2436
+ if ((options == null ? void 0 : options.data) !== void 0) {
2437
+ component.initWithData(options.data);
2438
+ }
2439
+ console.log("[MyopWebComponent] Loaded <".concat(tagName, "> into container"));
2440
+ return component;
2441
+ }
2273
2442
  };
2274
2443
 
2275
2444
  // src/helpers/CloudRepository.ts