@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
@@ -1675,7 +1675,93 @@ var WebcomponentLoader = class extends BaseMyopLoader {
1675
1675
  };
1676
1676
 
1677
1677
  // version:myop-sdk-version
1678
- var myop_sdk_version_default = "0.3.13";
1678
+ var myop_sdk_version_default = "0.3.15";
1679
+
1680
+ // src/host/components/myopExtractedWebComponent.ts
1681
+ var MyopExtractedWebComponent = class extends BaseMyopComponent {
1682
+ constructor(componentDefinition, skin, container, customElement, tagName, options) {
1683
+ super(componentDefinition, container, options);
1684
+ this.container = container;
1685
+ this.customElement = customElement;
1686
+ this.tagName = tagName;
1687
+ __publicField(this, "ctaCleanup");
1688
+ __publicField(this, "cleanupInspect", () => {
1689
+ });
1690
+ /**
1691
+ * For compatibility with message-based components.
1692
+ * Web components don't use postMessage, so this is a no-op for most messages.
1693
+ */
1694
+ __publicField(this, "send", (message) => {
1695
+ const cleanupHandler = super.send(message);
1696
+ console.debug("[MyopExtractedWebComponent] send() called - web components use direct API instead", message);
1697
+ return cleanupHandler;
1698
+ });
1699
+ __publicField(this, "dispose", () => {
1700
+ var _a;
1701
+ if (this.ctaCleanup) {
1702
+ this.ctaCleanup();
1703
+ }
1704
+ super.dispose();
1705
+ (_a = this.customElement.parentNode) == null ? void 0 : _a.removeChild(this.customElement);
1706
+ });
1707
+ this.element = customElement;
1708
+ this.setInitiated();
1709
+ }
1710
+ inspect() {
1711
+ this.cleanupInspect = setDebugStyle(this.id, "MyopExtractedWebComponent", 0, this.container, this.customElement, this.componentDefinition);
1712
+ return this.cleanupInspect;
1713
+ }
1714
+ hide() {
1715
+ this.customElement.style.opacity = "0";
1716
+ this.customElement.style.position = "absolute";
1717
+ this.customElement.style.pointerEvents = "none";
1718
+ this.customElement.style.visibility = "hidden";
1719
+ this.customElement.style.height = "0";
1720
+ this.customElement.style.width = "0";
1721
+ }
1722
+ show() {
1723
+ this.customElement.style.opacity = "1";
1724
+ this.customElement.style.position = "unset";
1725
+ this.customElement.style.pointerEvents = "all";
1726
+ this.customElement.style.visibility = "visible";
1727
+ this.customElement.style.height = "";
1728
+ this.customElement.style.width = "";
1729
+ }
1730
+ /**
1731
+ * Initialize the component with data by calling myop_init_interface directly
1732
+ */
1733
+ initWithData(data) {
1734
+ if (typeof this.customElement.myop_init_interface === "function") {
1735
+ this.customElement.myop_init_interface(data);
1736
+ }
1737
+ }
1738
+ /**
1739
+ * Get current data from the component
1740
+ */
1741
+ getData() {
1742
+ if (typeof this.customElement.myop_init_interface === "function") {
1743
+ return this.customElement.myop_init_interface();
1744
+ }
1745
+ return void 0;
1746
+ }
1747
+ /**
1748
+ * Set up CTA handler to listen for myop-cta events
1749
+ */
1750
+ onCta(handler) {
1751
+ const listener = (e) => {
1752
+ const customEvent = e;
1753
+ if (customEvent.detail && customEvent.detail.action) {
1754
+ handler(customEvent.detail.action, customEvent.detail.payload);
1755
+ }
1756
+ };
1757
+ this.customElement.addEventListener("myop-cta", listener);
1758
+ const cleanup = () => {
1759
+ this.customElement.removeEventListener("myop-cta", listener);
1760
+ };
1761
+ this.ctaCleanup = cleanup;
1762
+ return cleanup;
1763
+ }
1764
+ };
1679
1765
 
1680
1766
  // src/webcomponent/messageHandlers/BaseWebComponentMessageHandler.ts
1681
1767
  var BaseWebComponentMessageHandler = class extends BaseContextMessageHandler {
@@ -2027,6 +2113,9 @@ var EMBEDDED_SDK_CONTENT = "";
2027
2113
  var HAS_EMBEDDED_SDK = false;
2028
2114
 
2029
2115
  // src/host/loaders/HTMLComponentLoader.ts
2116
+ var MYOP_WEB_COMPONENT_MARKER = "<!-- myop-web-component -->";
2117
+ var MYOP_WEB_COMPONENT_SCRIPT_ID = "myop-web-component";
2118
+ var extractedWebComponentScripts = /* @__PURE__ */ new Set();
2030
2119
  var seen2 = [];
2031
2120
  var sdk;
2032
2121
  var getInitiatedSdk = async () => {
@@ -2065,6 +2154,9 @@ var HTMLComponentLoader = class extends BaseMyopLoader {
2065
2154
  __publicField(this, "type", SkinLoaders.HTMLLoader);
2066
2155
  __publicField(this, "load", async (componentDefinition, skin, container, options) => {
2067
2156
  const loaderConfig = skin.loader;
2157
+ if (this.isMyopWebComponent(loaderConfig.HTML)) {
2158
+ return this.loadExtractedWebComponent(componentDefinition, skin, container, loaderConfig.HTML, options);
2159
+ }
2068
2160
  let domId = "myop-comp-".concat(uuidv4());
2069
2161
  let element;
2070
2162
  if (loaderConfig.shadowRootMode === ShadowRootModeType.localFrame) {
@@ -2149,6 +2241,83 @@ var HTMLComponentLoader = class extends BaseMyopLoader {
2149
2241
  return new MyopWebComponent(componentDefinition, skin, container, element, options);
2150
2242
  });
2151
2243
  }
2244
+ /**
2245
+ * Detect if HTML is a Myop Web Component (starts with marker comment)
2246
+ */
2247
+ isMyopWebComponent(html) {
2248
+ return html.trimStart().startsWith(MYOP_WEB_COMPONENT_MARKER);
2249
+ }
2250
+ /**
2251
+ * Extract the web component script content from HTML
2252
+ */
2253
+ extractWebComponentScript(html) {
2254
+ const parser = new DOMParser();
2255
+ const doc = parser.parseFromString(html, "text/html");
2256
+ const script = doc.getElementById(MYOP_WEB_COMPONENT_SCRIPT_ID);
2257
+ return (script == null ? void 0 : script.textContent) || null;
2258
+ }
2259
+ /**
2260
+ * Execute the web component script on the host document
2261
+ */
2262
+ executeWebComponentScript(scriptContent, scriptId) {
2263
+ if (extractedWebComponentScripts.has(scriptId)) {
2264
+ console.log("[MyopWebComponent] Script already executed for ".concat(scriptId, ", skipping"));
2265
+ return;
2266
+ }
2267
+ const script = document.createElement("script");
2268
+ script.textContent = scriptContent;
2269
+ script.id = "myop-extracted-".concat(scriptId);
2270
+ document.head.appendChild(script);
2271
+ extractedWebComponentScripts.add(scriptId);
2272
+ console.log("[MyopWebComponent] Executed web component script: ".concat(scriptId));
2273
+ }
2274
+ /**
2275
+ * Load a Myop Web Component (extracted and run on host document)
2276
+ */
2277
+ async loadExtractedWebComponent(componentDefinition, skin, container, html, options) {
2278
+ const scriptContent = this.extractWebComponentScript(html);
2279
+ if (!scriptContent) {
2280
+ throw new Error('[MyopWebComponent] No <script id="myop-web-component"> found in HTML');
2281
+ }
2282
+ const scriptId = "".concat(componentDefinition.id, "-").concat(skin.id);
2283
+ const previousTagName = window.__MYOP_TAG_NAME__;
2284
+ this.executeWebComponentScript(scriptContent, scriptId);
2285
+ const tagName = window.__MYOP_TAG_NAME__;
2286
+ if (!tagName) {
2287
+ throw new Error("[MyopWebComponent] Script did not set window.__MYOP_TAG_NAME__");
2288
+ }
2289
+ if (previousTagName && previousTagName !== tagName) {
2290
+ console.warn("[MyopWebComponent] __MYOP_TAG_NAME__ changed from ".concat(previousTagName, " to ").concat(tagName));
2291
+ }
2292
+ const domId = "myop-comp-".concat(uuidv4());
2293
+ const element = document.createElement(tagName);
2294
+ element.id = domId;
2295
+ if (options == null ? void 0 : options.hidden) {
2296
+ element.style.opacity = "0";
2297
+ element.style.position = "absolute";
2298
+ element.style.height = "0";
2299
+ element.style.width = "0";
2300
+ element.style.pointerEvents = "none";
2301
+ element.style.visibility = "hidden";
2302
+ }
2303
+ if (!container.querySelector('[id^="myop-comp-"]')) {
2304
+ container.innerHTML = "";
2305
+ }
2306
+ this.appendChild(container, element, options);
2307
+ const component = new MyopExtractedWebComponent(
2308
+ componentDefinition,
2309
+ skin,
2310
+ container,
2311
+ element,
2312
+ tagName,
2313
+ options
2314
+ );
2315
+ if ((options == null ? void 0 : options.data) !== void 0) {
2316
+ component.initWithData(options.data);
2317
+ }
2318
+ console.log("[MyopWebComponent] Loaded <".concat(tagName, "> into container"));
2319
+ return component;
2320
+ }
2152
2321
  };
2153
2322
 
2154
2323
  // src/helpers/CloudRepository.ts