@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.
- package/README.md +1 -19
- package/dist/bundled-declarations.d.ts +61 -1
- package/dist/cjs/{_IframeSDK.06523760.js → _IframeSDK.9748f61d.js} +170 -1
- package/dist/cjs/{_IframeSDK.06523760.js.map → _IframeSDK.9748f61d.js.map} +3 -3
- package/dist/cjs/_IframeSDK.9bd2ab9c.min.js +1 -0
- package/dist/cjs/_WebComponentSDK.28ac5568.min.js +1 -0
- package/dist/cjs/{_WebComponentSDK.4ed98c20.js → _WebComponentSDK.6157152e.js} +170 -1
- package/dist/cjs/{_WebComponentSDK.4ed98c20.js.map → _WebComponentSDK.6157152e.js.map} +3 -3
- package/dist/cjs/{_hostSDK.f8d320df.js → _hostSDK.0fb0e40a.js} +170 -1
- package/dist/cjs/{_hostSDK.f8d320df.js.map → _hostSDK.0fb0e40a.js.map} +3 -3
- package/dist/cjs/_hostSDK.c253d85a.min.js +1 -0
- package/dist/cjs/myop_sdk.js +11 -11
- package/dist/cjs/myop_sdk.js.map +1 -1
- package/dist/cjs/myop_sdk.min.js +1 -1
- package/dist/cjs-bundled/myop_sdk.bundled.js +181 -3
- package/dist/cjs-bundled/myop_sdk.bundled.js.map +4 -4
- package/dist/cjs-bundled/myop_sdk.bundled.min.js +1 -1
- package/dist/module/Iframe/index.js +173 -2
- package/dist/module/Iframe/index.js.map +3 -3
- package/dist/module/SDK.js +183 -3
- package/dist/module/SDK.js.map +4 -4
- package/dist/module/embeddedSDK.js +1 -1
- package/dist/module/host/components/myopExtractedWebComponent.d.ts +40 -0
- package/dist/module/host/embeddedSDK.js +1 -1
- package/dist/module/host/index.d.ts +1 -0
- package/dist/module/host/index.js +174 -2
- package/dist/module/host/index.js.map +3 -3
- package/dist/module/host/loaders/HTMLComponentLoader.d.ts +18 -1
- package/dist/module/webcomponent/index.js +173 -2
- package/dist/module/webcomponent/index.js.map +3 -3
- package/package.json +1 -1
- package/dist/cjs/_IframeSDK.5b34af50.min.js +0 -1
- package/dist/cjs/_WebComponentSDK.acba38a4.min.js +0 -1
- 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
|
-
|
|
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.
|
|
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
|