@revendo_ch/trade-in-components-angular 0.0.0-stage → 0.1.0-beta.3

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/LICENSE ADDED
@@ -0,0 +1,25 @@
1
+ Copyright (c) 2026 Revendo AG. All rights reserved.
2
+
3
+ This software, including its source code, compiled code and documentation (the
4
+ "Software"), is the exclusive property of Revendo AG and is protected by
5
+ copyright law.
6
+
7
+ No right or license to use, copy, modify, merge, publish, distribute,
8
+ sublicense, sell or create derivative works of the Software, in whole or in
9
+ part, is granted to anyone, except to partners of Revendo AG who have a written
10
+ agreement with Revendo AG that expressly permits it, and only to the extent and
11
+ for the purpose set out in that agreement. Any other use is prohibited.
12
+
13
+ The availability of the Software in a public package registry or any other
14
+ public location does not grant any right to use it.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
18
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. TO THE EXTENT PERMITTED BY
19
+ APPLICABLE LAW, IN NO EVENT SHALL REVENDO AG BE LIABLE FOR ANY CLAIM, DAMAGES OR
20
+ OTHER LIABILITY ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR ITS
21
+ USE.
22
+
23
+ Third-party open-source components included in the Software, such as the
24
+ Stencil runtime (MIT License, Copyright (c) Ionic Group, Inc.), remain subject
25
+ to their own licenses.
package/README.md CHANGED
@@ -1,3 +1,7 @@
1
- # Temporary Holding Version
1
+ # @revendo_ch/trade-in-components-angular
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ Proprietary package of Revendo AG, for Revendo's partners only. It is not intended
4
+ for public use, and no use is permitted without a written agreement with Revendo AG
5
+ (see `LICENSE`).
6
+
7
+ Partners receive the integration documentation from Revendo.
package/checkout.d.ts ADDED
@@ -0,0 +1 @@
1
+ export declare function defineCheckoutInBackground(): Promise<void>;
@@ -0,0 +1,28 @@
1
+ /**
2
+ * `<trade-in-checkout>` is internal to the wizard, which mounts it when a
3
+ * customer reaches checkout. With script tags the wizard fetches it from
4
+ * `checkout-asset-url`; through this package it is defined here instead, from
5
+ * a dynamic import, so the Angular CLI emits it as its own lazy chunk and a
6
+ * visitor who never sells doesn't download it up front. The wizard waits for
7
+ * the definition when it needs it (`loadCheckoutBundle`).
8
+ *
9
+ * Kept in sync with `packages/trade-in-components-react/src/checkout.ts`.
10
+ */
11
+ const CHECKOUT_TAG = 'trade-in-checkout';
12
+ let pending;
13
+ export function defineCheckoutInBackground() {
14
+ if (typeof window === 'undefined' || !window.customElements)
15
+ return Promise.resolve();
16
+ if (window.customElements.get(CHECKOUT_TAG))
17
+ return Promise.resolve();
18
+ pending ??= import('@revendo_ch/trade-in-components/dist/components/trade-in-checkout.js')
19
+ .then((m) => m.defineCustomElement())
20
+ .catch((error) => {
21
+ // Let the next instance try again; the wizard reports the failure to the
22
+ // customer if checkout is reached without a definition.
23
+ pending = undefined;
24
+ console.error('[trade-in] could not load the checkout component', error);
25
+ });
26
+ return pending;
27
+ }
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tvdXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2hlY2tvdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxZQUFZLEdBQUcsbUJBQW1CLENBQUM7QUFFekMsSUFBSSxPQUFrQyxDQUFDO0FBRXZDLE1BQU0sVUFBVSwwQkFBMEI7SUFDeEMsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYztRQUFFLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3RGLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDO1FBQUUsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDdEUsT0FBTyxLQUFLLE1BQU0sQ0FBQyxzRUFBc0UsQ0FBQztTQUN2RixJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1NBQ3BDLEtBQUssQ0FBQyxDQUFDLEtBQWMsRUFBRSxFQUFFO1FBQ3hCLHlFQUF5RTtRQUN6RSx3REFBd0Q7UUFDeEQsT0FBTyxHQUFHLFNBQVMsQ0FBQztRQUNwQixPQUFPLENBQUMsS0FBSyxDQUFDLGtEQUFrRCxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzNFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogYDx0cmFkZS1pbi1jaGVja291dD5gIGlzIGludGVybmFsIHRvIHRoZSB3aXphcmQsIHdoaWNoIG1vdW50cyBpdCB3aGVuIGFcbiAqIGN1c3RvbWVyIHJlYWNoZXMgY2hlY2tvdXQuIFdpdGggc2NyaXB0IHRhZ3MgdGhlIHdpemFyZCBmZXRjaGVzIGl0IGZyb21cbiAqIGBjaGVja291dC1hc3NldC11cmxgOyB0aHJvdWdoIHRoaXMgcGFja2FnZSBpdCBpcyBkZWZpbmVkIGhlcmUgaW5zdGVhZCwgZnJvbVxuICogYSBkeW5hbWljIGltcG9ydCwgc28gdGhlIEFuZ3VsYXIgQ0xJIGVtaXRzIGl0IGFzIGl0cyBvd24gbGF6eSBjaHVuayBhbmQgYVxuICogdmlzaXRvciB3aG8gbmV2ZXIgc2VsbHMgZG9lc24ndCBkb3dubG9hZCBpdCB1cCBmcm9udC4gVGhlIHdpemFyZCB3YWl0cyBmb3JcbiAqIHRoZSBkZWZpbml0aW9uIHdoZW4gaXQgbmVlZHMgaXQgKGBsb2FkQ2hlY2tvdXRCdW5kbGVgKS5cbiAqXG4gKiBLZXB0IGluIHN5bmMgd2l0aCBgcGFja2FnZXMvdHJhZGUtaW4tY29tcG9uZW50cy1yZWFjdC9zcmMvY2hlY2tvdXQudHNgLlxuICovXG5jb25zdCBDSEVDS09VVF9UQUcgPSAndHJhZGUtaW4tY2hlY2tvdXQnO1xuXG5sZXQgcGVuZGluZzogUHJvbWlzZTx2b2lkPiB8IHVuZGVmaW5lZDtcblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUNoZWNrb3V0SW5CYWNrZ3JvdW5kKCk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgIXdpbmRvdy5jdXN0b21FbGVtZW50cykgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICBpZiAod2luZG93LmN1c3RvbUVsZW1lbnRzLmdldChDSEVDS09VVF9UQUcpKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIHBlbmRpbmcgPz89IGltcG9ydCgnQHJldmVuZG9fY2gvdHJhZGUtaW4tY29tcG9uZW50cy9kaXN0L2NvbXBvbmVudHMvdHJhZGUtaW4tY2hlY2tvdXQuanMnKVxuICAgIC50aGVuKChtKSA9PiBtLmRlZmluZUN1c3RvbUVsZW1lbnQoKSlcbiAgICAuY2F0Y2goKGVycm9yOiB1bmtub3duKSA9PiB7XG4gICAgICAvLyBMZXQgdGhlIG5leHQgaW5zdGFuY2UgdHJ5IGFnYWluOyB0aGUgd2l6YXJkIHJlcG9ydHMgdGhlIGZhaWx1cmUgdG8gdGhlXG4gICAgICAvLyBjdXN0b21lciBpZiBjaGVja291dCBpcyByZWFjaGVkIHdpdGhvdXQgYSBkZWZpbml0aW9uLlxuICAgICAgcGVuZGluZyA9IHVuZGVmaW5lZDtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1t0cmFkZS1pbl0gY291bGQgbm90IGxvYWQgdGhlIGNoZWNrb3V0IGNvbXBvbmVudCcsIGVycm9yKTtcbiAgICB9KTtcbiAgcmV0dXJuIHBlbmRpbmc7XG59XG4iXX0=
@@ -0,0 +1,107 @@
1
+ /* eslint-disable */
2
+ /* tslint:disable */
3
+ import { inject, PLATFORM_ID } from '@angular/core';
4
+ import { fromEvent } from 'rxjs';
5
+ const serverInstances = new WeakSet();
6
+ /**
7
+ * Records a wrapper created during server rendering. Call from the constructor.
8
+ */
9
+ export const markServer = (instance) => {
10
+ // what `isPlatformServer()` from `@angular/common` checks
11
+ if (inject(PLATFORM_ID) === 'server') {
12
+ serverInstances.add(instance);
13
+ }
14
+ };
15
+ /**
16
+ * Stencil's own prop name to attribute name conversion (`prop1` -> `prop-1`).
17
+ */
18
+ const toDashCase = (str) => str
19
+ .replace(/([A-Z0-9])/g, (match) => ` ${match[0]}`)
20
+ .trim()
21
+ .split(' ')
22
+ .join('-')
23
+ .toLowerCase();
24
+ /**
25
+ * Angular's server DOM never writes properties to the HTML, so on the server an input becomes an
26
+ * attribute, which Stencil's `renderToString()` reads:
27
+ * - a string or number as itself, and `true` as an empty attribute, so the component's first
28
+ * render in the browser sees them too;
29
+ * - `false`, anything that isn't a primitive, and any value for a prop with no attribute through
30
+ * `ssrProp()`, which gives the server render the exact value and leaves no attribute behind.
31
+ */
32
+ const setServerAttribute = (el, item, val, ssr) => {
33
+ const name = ssr.attributes?.[item] ?? toDashCase(item);
34
+ if (val == null) {
35
+ el.removeAttribute(name);
36
+ }
37
+ else if (ssr.refs?.includes(item) ||
38
+ val === false ||
39
+ (typeof val !== 'string' && typeof val !== 'number' && val !== true)) {
40
+ el.setAttribute(name, ssr.ssrProp(val));
41
+ }
42
+ else {
43
+ el.setAttribute(name, val === true ? '' : String(val));
44
+ }
45
+ };
46
+ export const proxyInputs = (Cmp, inputs, ssr) => {
47
+ const Prototype = Cmp.prototype;
48
+ inputs.forEach((item) => {
49
+ Object.defineProperty(Prototype, item, {
50
+ get() {
51
+ return this.el[item];
52
+ },
53
+ set(val) {
54
+ if (ssr && serverInstances.has(this)) {
55
+ // kept on the element too, so reading the input back on the server works
56
+ this.el[item] = val;
57
+ setServerAttribute(this.el, item, val, ssr);
58
+ return;
59
+ }
60
+ this.z.runOutsideAngular(() => (this.el[item] = val));
61
+ },
62
+ /**
63
+ * In the event that proxyInputs is called
64
+ * multiple times re-defining these inputs
65
+ * will cause an error to be thrown. As a result
66
+ * we set configurable: true to indicate these
67
+ * properties can be changed.
68
+ */
69
+ configurable: true,
70
+ });
71
+ });
72
+ };
73
+ export const proxyMethods = (Cmp, methods) => {
74
+ const Prototype = Cmp.prototype;
75
+ methods.forEach((methodName) => {
76
+ Prototype[methodName] = function () {
77
+ const args = arguments;
78
+ return this.z.runOutsideAngular(() => this.el[methodName].apply(this.el, args));
79
+ };
80
+ });
81
+ };
82
+ export const proxyOutputs = (instance, el, events) => {
83
+ events.forEach((eventName) => (instance[eventName] = fromEvent(el, eventName)));
84
+ };
85
+ export const defineCustomElement = (tagName, customElement) => {
86
+ if (customElement !== undefined && typeof customElements !== 'undefined' && !customElements.get(tagName)) {
87
+ customElements.define(tagName, customElement);
88
+ }
89
+ };
90
+ // tslint:disable-next-line: only-arrow-functions
91
+ export function ProxyCmp(opts) {
92
+ const decorator = function (cls) {
93
+ const { defineCustomElementFn, inputs, methods, ssr } = opts;
94
+ if (defineCustomElementFn !== undefined) {
95
+ defineCustomElementFn();
96
+ }
97
+ if (inputs) {
98
+ proxyInputs(cls, inputs, ssr);
99
+ }
100
+ if (methods) {
101
+ proxyMethods(cls, methods);
102
+ }
103
+ return cls;
104
+ };
105
+ return decorator;
106
+ }
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZ2VuZXJhdGVkL2FuZ3VsYXItY29tcG9uZW50LWxpYi91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvQkFBb0I7QUFDcEIsb0JBQW9CO0FBQ3BCLE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFjakMsTUFBTSxlQUFlLEdBQUcsSUFBSSxPQUFPLEVBQVUsQ0FBQztBQUU5Qzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLFFBQWdCLEVBQUUsRUFBRTtJQUM3QywwREFBMEQ7SUFDMUQsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssUUFBUSxFQUFFO1FBQ3BDLGVBQWUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDL0I7QUFDSCxDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sVUFBVSxHQUFHLENBQUMsR0FBVyxFQUFVLEVBQUUsQ0FDekMsR0FBRztLQUNBLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7S0FDakQsSUFBSSxFQUFFO0tBQ04sS0FBSyxDQUFDLEdBQUcsQ0FBQztLQUNWLElBQUksQ0FBQyxHQUFHLENBQUM7S0FDVCxXQUFXLEVBQUUsQ0FBQztBQUVuQjs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEVBQU8sRUFBRSxJQUFZLEVBQUUsR0FBUSxFQUFFLEdBQWUsRUFBRSxFQUFFO0lBQzlFLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEQsSUFB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LG1CQUFtQixHQUFHLENBQUMsT0FBZSxFQUFFLGFBQWtCLEVBQUUsRUFBRTtJQUN6RSxJQUFJLGFBQWEsS0FBSyxTQUFTLElBQUksT0FBTyxjQUFjLEtBQUssV0FBVyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUN4RyxjQUFjLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztLQUMvQztBQUNILENBQUMsQ0FBQztBQUVGLGlEQUFpRDtBQUNqRCxNQUFNLFVBQVUsUUFBUSxDQUFDLElBQTJGO0lBQ2xILE1BQU0sU0FBUyxHQUFHLFVBQVUsR0FBUTtRQUNsQyxNQUFNLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFFN0QsSUFBSSxxQkFBcUIsS0FBSyxTQUFTLEVBQUU7WUFDdkMscUJBQXFCLEVBQUUsQ0FBQztTQUN6QjtRQUVELElBQUksTUFBTSxFQUFFO1lBQ1YsV0FBVyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDL0I7UUFDRCxJQUFJLE9BQU8sRUFBRTtZQUNYLFlBQVksQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDNUI7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUMsQ0FBQztJQUNGLE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuLyogdHNsaW50OmRpc2FibGUgKi9cbmltcG9ydCB7IGluamVjdCwgUExBVEZPUk1fSUQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xuXG4vKipcbiAqIFNlcnZlciByZW5kZXJpbmcgb3B0aW9ucyAodGhlIG91dHB1dCB0YXJnZXQncyBgc3NyUHJvcE1vZHVsZWApLlxuICovXG5pbnRlcmZhY2UgU3NyT3B0aW9ucyB7XG4gIC8qKiBUaGUgY29tcG9uZW50IGxpYnJhcnkncyBgc3NyUHJvcCgpYCwgd2hpY2ggaGFuZHMgYSB2YWx1ZSB0byBTdGVuY2lsJ3Mgc2VydmVyIHJlbmRlci4gKi9cbiAgc3NyUHJvcDogKHZhbHVlOiBhbnkpID0+IGFueTtcbiAgLyoqIElucHV0cyB3aG9zZSBhdHRyaWJ1dGUgaXNuJ3QgU3RlbmNpbCdzIGRhc2gtY2FzZWQgcHJvcCBuYW1lLiAqL1xuICBhdHRyaWJ1dGVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIElucHV0cyB3aXRoIG5vIGF0dHJpYnV0ZTogZXZlcnkgdmFsdWUgZ29lcyB0aHJvdWdoIGBzc3JQcm9wKClgLiAqL1xuICByZWZzPzogc3RyaW5nW107XG59XG5cbmNvbnN0IHNlcnZlckluc3RhbmNlcyA9IG5ldyBXZWFrU2V0PG9iamVjdD4oKTtcblxuLyoqXG4gKiBSZWNvcmRzIGEgd3JhcHBlciBjcmVhdGVkIGR1cmluZyBzZXJ2ZXIgcmVuZGVyaW5nLiBDYWxsIGZyb20gdGhlIGNvbnN0cnVjdG9yLlxuICovXG5leHBvcnQgY29uc3QgbWFya1NlcnZlciA9IChpbnN0YW5jZTogb2JqZWN0KSA9PiB7XG4gIC8vIHdoYXQgYGlzUGxhdGZvcm1TZXJ2ZXIoKWAgZnJvbSBgQGFuZ3VsYXIvY29tbW9uYCBjaGVja3NcbiAgaWYgKGluamVjdChQTEFURk9STV9JRCkgPT09ICdzZXJ2ZXInKSB7XG4gICAgc2VydmVySW5zdGFuY2VzLmFkZChpbnN0YW5jZSk7XG4gIH1cbn07XG5cbi8qKlxuICogU3RlbmNpbCdzIG93biBwcm9wIG5hbWUgdG8gYXR0cmlidXRlIG5hbWUgY29udmVyc2lvbiAoYHByb3AxYCAtPiBgcHJvcC0xYCkuXG4gKi9cbmNvbnN0IHRvRGFzaENhc2UgPSAoc3RyOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgc3RyXG4gICAgLnJlcGxhY2UoLyhbQS1aMC05XSkvZywgKG1hdGNoKSA9PiBgICR7bWF0Y2hbMF19YClcbiAgICAudHJpbSgpXG4gICAgLnNwbGl0KCcgJylcbiAgICAuam9pbignLScpXG4gICAgLnRvTG93ZXJDYXNlKCk7XG5cbi8qKlxuICogQW5ndWxhcidzIHNlcnZlciBET00gbmV2ZXIgd3JpdGVzIHByb3BlcnRpZXMgdG8gdGhlIEhUTUwsIHNvIG9uIHRoZSBzZXJ2ZXIgYW4gaW5wdXQgYmVjb21lcyBhblxuICogYXR0cmlidXRlLCB3aGljaCBTdGVuY2lsJ3MgYHJlbmRlclRvU3RyaW5nKClgIHJlYWRzOlxuICogLSBhIHN0cmluZyBvciBudW1iZXIgYXMgaXRzZWxmLCBhbmQgYHRydWVgIGFzIGFuIGVtcHR5IGF0dHJpYnV0ZSwgc28gdGhlIGNvbXBvbmVudCdzIGZpcnN0XG4gKiAgIHJlbmRlciBpbiB0aGUgYnJvd3NlciBzZWVzIHRoZW0gdG9vO1xuICogLSBgZmFsc2VgLCBhbnl0aGluZyB0aGF0IGlzbid0IGEgcHJpbWl0aXZlLCBhbmQgYW55IHZhbHVlIGZvciBhIHByb3Agd2l0aCBubyBhdHRyaWJ1dGUgdGhyb3VnaFxuICogICBgc3NyUHJvcCgpYCwgd2hpY2ggZ2l2ZXMgdGhlIHNlcnZlciByZW5kZXIgdGhlIGV4YWN0IHZhbHVlIGFuZCBsZWF2ZXMgbm8gYXR0cmlidXRlIGJlaGluZC5cbiAqL1xuY29uc3Qgc2V0U2VydmVyQXR0cmlidXRlID0gKGVsOiBhbnksIGl0ZW06IHN0cmluZywgdmFsOiBhbnksIHNzcjogU3NyT3B0aW9ucykgPT4ge1xuICBjb25zdCBuYW1lID0gc3NyLmF0dHJpYnV0ZXM/LltpdGVtXSA/PyB0b0Rhc2hDYXNlKGl0ZW0pO1xuICBpZiAodmFsID09IG51bGwpIHtcbiAgICBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIH0gZWxzZSBpZiAoXG4gICAgc3NyLnJlZnM/LmluY2x1ZGVzKGl0ZW0pIHx8XG4gICAgdmFsID09PSBmYWxzZSB8fFxuICAgICh0eXBlb2YgdmFsICE9PSAnc3RyaW5nJyAmJiB0eXBlb2YgdmFsICE9PSAnbnVtYmVyJyAmJiB2YWwgIT09IHRydWUpXG4gICkge1xuICAgIGVsLnNldEF0dHJpYnV0ZShuYW1lLCBzc3Iuc3NyUHJvcCh2YWwpKTtcbiAgfSBlbHNlIHtcbiAgICBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsID09PSB0cnVlID8gJycgOiBTdHJpbmcodmFsKSk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBwcm94eUlucHV0cyA9IChDbXA6IGFueSwgaW5wdXRzOiBzdHJpbmdbXSwgc3NyPzogU3NyT3B0aW9ucykgPT4ge1xuICBjb25zdCBQcm90b3R5cGUgPSBDbXAucHJvdG90eXBlO1xuICBpbnB1dHMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQcm90b3R5cGUsIGl0ZW0sIHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxbaXRlbV07XG4gICAgICB9LFxuICAgICAgc2V0KHZhbDogYW55KSB7XG4gICAgICAgIGlmIChzc3IgJiYgc2VydmVySW5zdGFuY2VzLmhhcyh0aGlzKSkge1xuICAgICAgICAgIC8vIGtlcHQgb24gdGhlIGVsZW1lbnQgdG9vLCBzbyByZWFkaW5nIHRoZSBpbnB1dCBiYWNrIG9uIHRoZSBzZXJ2ZXIgd29ya3NcbiAgICAgICAgICB0aGlzLmVsW2l0ZW1dID0gdmFsO1xuICAgICAgICAgIHNldFNlcnZlckF0dHJpYnV0ZSh0aGlzLmVsLCBpdGVtLCB2YWwsIHNzcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuei5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiAodGhpcy5lbFtpdGVtXSA9IHZhbCkpO1xuICAgICAgfSxcbiAgICAgIC8qKlxuICAgICAgICogSW4gdGhlIGV2ZW50IHRoYXQgcHJveHlJbnB1dHMgaXMgY2FsbGVkXG4gICAgICAgKiBtdWx0aXBsZSB0aW1lcyByZS1kZWZpbmluZyB0aGVzZSBpbnB1dHNcbiAgICAgICAqIHdpbGwgY2F1c2UgYW4gZXJyb3IgdG8gYmUgdGhyb3duLiBBcyBhIHJlc3VsdFxuICAgICAgICogd2Ugc2V0IGNvbmZpZ3VyYWJsZTogdHJ1ZSB0byBpbmRpY2F0ZSB0aGVzZVxuICAgICAgICogcHJvcGVydGllcyBjYW4gYmUgY2hhbmdlZC5cbiAgICAgICAqL1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIH0pO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBwcm94eU1ldGhvZHMgPSAoQ21wOiBhbnksIG1ldGhvZHM6IHN0cmluZ1tdKSA9PiB7XG4gIGNvbnN0IFByb3RvdHlwZSA9IENtcC5wcm90b3R5cGU7XG4gIG1ldGhvZHMuZm9yRWFjaCgobWV0aG9kTmFtZSkgPT4ge1xuICAgIFByb3RvdHlwZVttZXRob2ROYW1lXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICByZXR1cm4gdGhpcy56LnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHRoaXMuZWxbbWV0aG9kTmFtZV0uYXBwbHkodGhpcy5lbCwgYXJncykpO1xuICAgIH07XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHByb3h5T3V0cHV0cyA9IChpbnN0YW5jZTogYW55LCBlbDogYW55LCBldmVudHM6IHN0cmluZ1tdKSA9PiB7XG4gIGV2ZW50cy5mb3JFYWNoKChldmVudE5hbWUpID0+IChpbnN0YW5jZVtldmVudE5hbWVdID0gZnJvbUV2ZW50KGVsLCBldmVudE5hbWUpKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVmaW5lQ3VzdG9tRWxlbWVudCA9ICh0YWdOYW1lOiBzdHJpbmcsIGN1c3RvbUVsZW1lbnQ6IGFueSkgPT4ge1xuICBpZiAoY3VzdG9tRWxlbWVudCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBjdXN0b21FbGVtZW50cyAhPT0gJ3VuZGVmaW5lZCcgJiYgIWN1c3RvbUVsZW1lbnRzLmdldCh0YWdOYW1lKSkge1xuICAgIGN1c3RvbUVsZW1lbnRzLmRlZmluZSh0YWdOYW1lLCBjdXN0b21FbGVtZW50KTtcbiAgfVxufTtcblxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBvbmx5LWFycm93LWZ1bmN0aW9uc1xuZXhwb3J0IGZ1bmN0aW9uIFByb3h5Q21wKG9wdHM6IHsgZGVmaW5lQ3VzdG9tRWxlbWVudEZuPzogKCkgPT4gdm9pZDsgaW5wdXRzPzogYW55OyBtZXRob2RzPzogYW55OyBzc3I/OiBTc3JPcHRpb25zIH0pIHtcbiAgY29uc3QgZGVjb3JhdG9yID0gZnVuY3Rpb24gKGNsczogYW55KSB7XG4gICAgY29uc3QgeyBkZWZpbmVDdXN0b21FbGVtZW50Rm4sIGlucHV0cywgbWV0aG9kcywgc3NyIH0gPSBvcHRzO1xuXG4gICAgaWYgKGRlZmluZUN1c3RvbUVsZW1lbnRGbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZWZpbmVDdXN0b21FbGVtZW50Rm4oKTtcbiAgICB9XG5cbiAgICBpZiAoaW5wdXRzKSB7XG4gICAgICBwcm94eUlucHV0cyhjbHMsIGlucHV0cywgc3NyKTtcbiAgICB9XG4gICAgaWYgKG1ldGhvZHMpIHtcbiAgICAgIHByb3h5TWV0aG9kcyhjbHMsIG1ldGhvZHMpO1xuICAgIH1cbiAgICByZXR1cm4gY2xzO1xuICB9O1xuICByZXR1cm4gZGVjb3JhdG9yO1xufVxuIl19
@@ -0,0 +1,208 @@
1
+ import { __decorate } from "tslib";
2
+ /* tslint:disable */
3
+ /* auto-generated angular directive proxies */
4
+ import { ChangeDetectionStrategy, Component, EventEmitter, Output } from '@angular/core';
5
+ import { ProxyCmp } from './angular-component-lib/utils';
6
+ import { defineCustomElement as defineTradeInWizard } from '@revendo_ch/trade-in-components/dist/components/trade-in-wizard.js';
7
+ import * as i0 from "@angular/core";
8
+ let TradeInWizard = class TradeInWizard {
9
+ /**
10
+ * Absolute API base for cross-origin partners — Revendo's partner API,
11
+ `https://api.revendo.ch/public/v1` (staging: `https://api-stage.revendo.dev/public/v1`).
12
+ Takes precedence over `proxyBase`. See `EMBEDDING.md`.
13
+ */
14
+ set apiBase(_) { }
15
+ ;
16
+ /**
17
+ * Numeric variant ID of the $0 placeholder product (required for `instant`).
18
+ */
19
+ set dummyVariantId(_) { }
20
+ ;
21
+ /**
22
+ * Fetch the whole picker tree once and walk it locally (no request per pick).
23
+ Set `false` to force the stepwise `/facets` path.
24
+
25
+ Left on by default: a backend without `/facets/tree` (it is not on prod
26
+ yet) makes the first fetch fail, and the wizard falls back to stepwise for
27
+ the rest of the session on its own — so this needs no per-environment flip. @default true
28
+ */
29
+ set facetTree(_) { }
30
+ ;
31
+ /**
32
+ * Checkout flow. `direct` works anywhere; `instant` needs a Shopify host. @default 'direct'
33
+ */
34
+ set flow(_) { }
35
+ ;
36
+ /**
37
+ * Feature flag: show the business "code for business" fields at checkout
38
+ (default off → the published component stays partner-neutral). @default false
39
+ */
40
+ set businessFields(_) { }
41
+ ;
42
+ /**
43
+ * Feature flag: show newsletter/SMS marketing opt-ins at checkout (default off). @default false
44
+ */
45
+ set marketingOptins(_) { }
46
+ ;
47
+ /**
48
+ * Voucher payout bonus in CHF, shown as a badge on the checkout's Gutschein
49
+ option (display only — the payout math happens on the Revendo side).
50
+ */
51
+ set voucherBonus(_) { }
52
+ ;
53
+ /**
54
+ * Explainer line under the checkout's Gutschein option, shown only while
55
+ Gutschein is the selected payment type. Overrides the built-in
56
+ `coVoucherHint` copy.
57
+ */
58
+ set voucherHint(_) { }
59
+ ;
60
+ /**
61
+ * UI language (2-letter). Falls back to `de`. Read from the `lang` attribute. @default 'de'
62
+ */
63
+ set locale(_) { }
64
+ ;
65
+ /**
66
+ * How the wizard mounts. `inline` renders a self-contained card in the page;
67
+ `modal` renders a launcher button that opens a centered modal / mobile
68
+ bottom-sheet with a backdrop. @default 'inline'
69
+ */
70
+ set presentation(_) { }
71
+ ;
72
+ /**
73
+ * Same-origin app-proxy base (Shopify hosts). Used when `apiBase` is unset. @default '/apps/trade-in'
74
+ */
75
+ set proxyBase(_) { }
76
+ ;
77
+ /**
78
+ * Publishable, origin-locked API key issued by Revendo for `apiBase` (sent as
79
+ `X-Publishable-Key`). NOT a secret: it only works from the partner's registered origins.
80
+ */
81
+ set publishableKey(_) { }
82
+ ;
83
+ /**
84
+ * Customer-rating USP row: average score and number of reviews. Both come
85
+ from the host, because the review platform is the host's, not ours — on
86
+ revendo.ch the theme block reads Judge.me's `judgeme.shop_reviews_rating`
87
+ / `judgeme.shop_reviews_count` shop metafields and passes them down.
88
+
89
+ The row is omitted entirely when `reviewCount` is missing or not a number.
90
+ It used to render a hardcoded "4.8 / 11'000", which was both stale and
91
+ above the real figure — and a published component must not advertise
92
+ Revendo's reviews on a partner's page. No numbers, no claim.
93
+ */
94
+ set reviewRating(_) { }
95
+ ;
96
+ set reviewCount(_) { }
97
+ ;
98
+ /**
99
+ * Deal-breaker answers: comma-separated `question:answer` pairs that end the
100
+ appraisal on the spot and jump straight to the quote, skipping every
101
+ question still ahead — e.g. `is_functional:no` ("Does the device work
102
+ properly?" → "No"; the backend already prices that as a manual appraisal,
103
+ so the optical grade and battery answers behind it change nothing).
104
+
105
+ Each side matches the stable `content_type` first and the raw id/value
106
+ second, so `is_functional:no` keeps working when the backend re-authors the
107
+ question under a new id — which it does (see `core/skip-rules.ts`). Left
108
+ empty the wizard asks every question, as before.
109
+ */
110
+ set skipToQuoteOn(_) { }
111
+ ;
112
+ /**
113
+ * Show the intro screen (eyebrow + headline + USP list, "find price" CTA)
114
+ as the first thing a fresh session sees. Set `false` to open straight on
115
+ the picker — for hosts whose own page already carries that pitch, where
116
+ the intro is a second sales screen the customer has to click past.
117
+
118
+ Purely a starting point, not a mode: everything that returns to the start
119
+ ("sell another device", closing and reopening the modal) lands on
120
+ whichever screen this selects. @default true
121
+ */
122
+ set showIntro(_) { }
123
+ ;
124
+ /**
125
+ * Optionally open the picker inside one device family (e.g. "iPhone").
126
+
127
+ A shortcut, not a filter: it only seeds the category the picker starts on
128
+ (and the one a fresh pick returns to), so Back and the category chip still
129
+ clear it and show the full family tiles. A deep link's `ti_cat` wins over
130
+ it.
131
+ */
132
+ set startCategory(_) { }
133
+ ;
134
+ /**
135
+ * Where this widget sits, as a label for the quote's attribution — e.g.
136
+ `landing-page`, `pdp-iphone`, `blog-sell-your-mac`. Travels with every
137
+ price call and is persisted by Revendo on the offer and the order behind
138
+ it, so a placement can be measured against the orders it produced.
139
+
140
+ Free-form and set by the host page (the theme block exposes it as a
141
+ setting); nothing in the flow keys off it. Left empty the field is simply
142
+ omitted, as before. Ignored by the partner API, which attributes every
143
+ quote to the partner server-side.
144
+ */
145
+ set embedSource(_) { }
146
+ ;
147
+ set custFirstName(_) { }
148
+ ;
149
+ set custLastName(_) { }
150
+ ;
151
+ set custEmail(_) { }
152
+ ;
153
+ set custPhone(_) { }
154
+ ;
155
+ set custStreet(_) { }
156
+ ;
157
+ set custZip(_) { }
158
+ ;
159
+ set custCity(_) { }
160
+ ;
161
+ set custCountry(_) { }
162
+ ;
163
+ /**
164
+ * URL of the separately-built checkout bundle — needed with script tags
165
+ (Shopify theme asset, partner page). Not with the npm `loader` or the
166
+ React/Angular packages, which define the checkout themselves.
167
+ */
168
+ set checkoutAssetUrl(_) { }
169
+ ;
170
+ constructor(c, r, z) {
171
+ this.z = z;
172
+ this.tradeInDeviceSelected = new EventEmitter();
173
+ this.tradeInAnalytics = new EventEmitter();
174
+ this.tradeInError = new EventEmitter();
175
+ this.tradeInOrderComplete = new EventEmitter();
176
+ c.detach();
177
+ this.el = r.nativeElement;
178
+ }
179
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TradeInWizard, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
180
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TradeInWizard, selector: "trade-in-wizard", inputs: { apiBase: "apiBase", businessFields: "businessFields", checkoutAssetUrl: "checkoutAssetUrl", custCity: "custCity", custCountry: "custCountry", custEmail: "custEmail", custFirstName: "custFirstName", custLastName: "custLastName", custPhone: "custPhone", custStreet: "custStreet", custZip: "custZip", dummyVariantId: "dummyVariantId", embedSource: "embedSource", facetTree: "facetTree", flow: "flow", locale: "locale", marketingOptins: "marketingOptins", presentation: "presentation", proxyBase: "proxyBase", publishableKey: "publishableKey", reviewCount: "reviewCount", reviewRating: "reviewRating", showIntro: "showIntro", skipToQuoteOn: "skipToQuoteOn", startCategory: "startCategory", voucherBonus: "voucherBonus", voucherHint: "voucherHint" }, outputs: { tradeInDeviceSelected: "tradeInDeviceSelected", tradeInAnalytics: "tradeInAnalytics", tradeInError: "tradeInError", tradeInOrderComplete: "tradeInOrderComplete" }, ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
181
+ };
182
+ TradeInWizard = __decorate([
183
+ ProxyCmp({
184
+ defineCustomElementFn: defineTradeInWizard,
185
+ inputs: ['apiBase', 'businessFields', 'checkoutAssetUrl', 'custCity', 'custCountry', 'custEmail', 'custFirstName', 'custLastName', 'custPhone', 'custStreet', 'custZip', 'dummyVariantId', 'embedSource', 'facetTree', 'flow', 'locale', 'marketingOptins', 'presentation', 'proxyBase', 'publishableKey', 'reviewCount', 'reviewRating', 'showIntro', 'skipToQuoteOn', 'startCategory', 'voucherBonus', 'voucherHint']
186
+ })
187
+ ], TradeInWizard);
188
+ export { TradeInWizard };
189
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TradeInWizard, decorators: [{
190
+ type: Component,
191
+ args: [{
192
+ selector: 'trade-in-wizard',
193
+ changeDetection: ChangeDetectionStrategy.OnPush,
194
+ template: '<ng-content></ng-content>',
195
+ // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property
196
+ inputs: ['apiBase', 'businessFields', 'checkoutAssetUrl', 'custCity', 'custCountry', 'custEmail', 'custFirstName', 'custLastName', 'custPhone', 'custStreet', 'custZip', 'dummyVariantId', 'embedSource', 'facetTree', 'flow', 'locale', 'marketingOptins', 'presentation', 'proxyBase', 'publishableKey', 'reviewCount', 'reviewRating', 'showIntro', 'skipToQuoteOn', 'startCategory', 'voucherBonus', 'voucherHint'],
197
+ outputs: ['tradeInDeviceSelected', 'tradeInAnalytics', 'tradeInError', 'tradeInOrderComplete'],
198
+ }]
199
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i0.NgZone }], propDecorators: { tradeInDeviceSelected: [{
200
+ type: Output
201
+ }], tradeInAnalytics: [{
202
+ type: Output
203
+ }], tradeInError: [{
204
+ type: Output
205
+ }], tradeInOrderComplete: [{
206
+ type: Output
207
+ }] } });
208
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJveGllcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9nZW5lcmF0ZWQvcHJveGllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsb0JBQW9CO0FBQ3BCLDhDQUE4QztBQUM5QyxPQUFPLEVBQUUsdUJBQXVCLEVBQXFCLFNBQVMsRUFBYyxZQUFZLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRWhJLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUl6RCxPQUFPLEVBQUUsbUJBQW1CLElBQUksbUJBQW1CLEVBQUUsTUFBTSxvRUFBb0UsQ0FBQzs7QUFhekgsSUFBTSxhQUFhLEdBQW5CLE1BQU0sYUFBYTtJQUV0Qjs7OztLQUlDO0lBQ0gsSUFBSSxPQUFPLENBQUMsQ0FBc0MsSUFBRyxDQUFDO0lBQUEsQ0FBQztJQUNyRDs7S0FFQztJQUNILElBQUksY0FBYyxDQUFDLENBQTZDLElBQUcsQ0FBQztJQUFBLENBQUM7SUFDbkU7Ozs7Ozs7S0FPQztJQUNILElBQUksU0FBUyxDQUFDLENBQXdDLElBQUcsQ0FBQztJQUFBLENBQUM7SUFDekQ7O0tBRUM7SUFDSCxJQUFJLElBQUksQ0FBQyxDQUFtQyxJQUFHLENBQUM7SUFBQSxDQUFDO0lBQy9DOzs7S0FHQztJQUNILElBQUksY0FBYyxDQUFDLENBQTZDLElBQUcsQ0FBQztJQUFBLENBQUM7SUFDbkU7O0tBRUM7SUFDSCxJQUFJLGVBQWUsQ0FBQyxDQUE4QyxJQUFHLENBQUM7SUFBQSxDQUFDO0lBQ3JFOzs7S0FHQztJQUNILElBQUksWUFBWSxDQUFDLENBQTJDLElBQUcsQ0FBQztJQUFBLENBQUM7SUFDL0Q7Ozs7S0FJQztJQUNILElBQUksV0FBVyxDQUFDLENBQTBDLElBQUcsQ0FBQztJQUFBLENBQUM7SUFDN0Q7O0tBRUM7SUFDSCxJQUFJLE1BQU0sQ0FBQyxDQUFxQyxJQUFHLENBQUM7SUFBQSxDQUFDO0lBQ25EOzs7O0tBSUM7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RSwyQkFBMkI7b0JBQ3JDLHVFQUF1RTtvQkFDdkUsTUFBTSxFQUFFLENBQUMsU0FBUyxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsYUFBYSxDQUFDO29CQUN2WixPQUFPLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsc0JBQXNCLENBQUM7aUJBQy9GO29JQWtKVyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyogdHNsaW50OmRpc2FibGUgKi9cbi8qIGF1dG8tZ2VuZXJhdGVkIGFuZ3VsYXIgZGlyZWN0aXZlIHByb3hpZXMgKi9cbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIE91dHB1dCwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFByb3h5Q21wIH0gZnJvbSAnLi9hbmd1bGFyLWNvbXBvbmVudC1saWIvdXRpbHMnO1xuXG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudHMgfSBmcm9tICdAcmV2ZW5kb19jaC90cmFkZS1pbi1jb21wb25lbnRzL2Rpc3QvY29tcG9uZW50cyc7XG5cbmltcG9ydCB7IGRlZmluZUN1c3RvbUVsZW1lbnQgYXMgZGVmaW5lVHJhZGVJbldpemFyZCB9IGZyb20gJ0ByZXZlbmRvX2NoL3RyYWRlLWluLWNvbXBvbmVudHMvZGlzdC9jb21wb25lbnRzL3RyYWRlLWluLXdpemFyZC5qcyc7XG5AUHJveHlDbXAoe1xuICBkZWZpbmVDdXN0b21FbGVtZW50Rm46IGRlZmluZVRyYWRlSW5XaXphcmQsXG4gIGlucHV0czogWydhcGlCYXNlJywgJ2J1c2luZXNzRmllbGRzJywgJ2NoZWNrb3V0QXNzZXRVcmwnLCAnY3VzdENpdHknLCAnY3VzdENvdW50cnknLCAnY3VzdEVtYWlsJywgJ2N1c3RGaXJzdE5hbWUnLCAnY3VzdExhc3ROYW1lJywgJ2N1c3RQaG9uZScsICdjdXN0U3RyZWV0JywgJ2N1c3RaaXAnLCAnZHVtbXlWYXJpYW50SWQnLCAnZW1iZWRTb3VyY2UnLCAnZmFjZXRUcmVlJywgJ2Zsb3cnLCAnbG9jYWxlJywgJ21hcmtldGluZ09wdGlucycsICdwcmVzZW50YXRpb24nLCAncHJveHlCYXNlJywgJ3B1Ymxpc2hhYmxlS2V5JywgJ3Jldmlld0NvdW50JywgJ3Jldmlld1JhdGluZycsICdzaG93SW50cm8nLCAnc2tpcFRvUXVvdGVPbicsICdzdGFydENhdGVnb3J5JywgJ3ZvdWNoZXJCb251cycsICd2b3VjaGVySGludCddXG59KVxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndHJhZGUtaW4td2l6YXJkJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHRlbXBsYXRlOiAnPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PicsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8taW5wdXRzLW1ldGFkYXRhLXByb3BlcnR5XG4gIGlucHV0czogWydhcGlCYXNlJywgJ2J1c2luZXNzRmllbGRzJywgJ2NoZWNrb3V0QXNzZXRVcmwnLCAnY3VzdENpdHknLCAnY3VzdENvdW50cnknLCAnY3VzdEVtYWlsJywgJ2N1c3RGaXJzdE5hbWUnLCAnY3VzdExhc3ROYW1lJywgJ2N1c3RQaG9uZScsICdjdXN0U3RyZWV0JywgJ2N1c3RaaXAnLCAnZHVtbXlWYXJpYW50SWQnLCAnZW1iZWRTb3VyY2UnLCAnZmFjZXRUcmVlJywgJ2Zsb3cnLCAnbG9jYWxlJywgJ21hcmtldGluZ09wdGlucycsICdwcmVzZW50YXRpb24nLCAncHJveHlCYXNlJywgJ3B1Ymxpc2hhYmxlS2V5JywgJ3Jldmlld0NvdW50JywgJ3Jldmlld1JhdGluZycsICdzaG93SW50cm8nLCAnc2tpcFRvUXVvdGVPbicsICdzdGFydENhdGVnb3J5JywgJ3ZvdWNoZXJCb251cycsICd2b3VjaGVySGludCddLFxuICBvdXRwdXRzOiBbJ3RyYWRlSW5EZXZpY2VTZWxlY3RlZCcsICd0cmFkZUluQW5hbHl0aWNzJywgJ3RyYWRlSW5FcnJvcicsICd0cmFkZUluT3JkZXJDb21wbGV0ZSddLFxufSlcbmV4cG9ydCBjbGFzcyBUcmFkZUluV2l6YXJkIHtcbiAgcHJvdGVjdGVkIGVsOiBIVE1MVHJhZGVJbldpemFyZEVsZW1lbnQ7XG4gICAgLyoqXG4gICAqIEFic29sdXRlIEFQSSBiYXNlIGZvciBjcm9zcy1vcmlnaW4gcGFydG5lcnMg4oCUIFJldmVuZG8ncyBwYXJ0bmVyIEFQSSxcbmBodHRwczovL2FwaS5yZXZlbmRvLmNoL3B1YmxpYy92MWAgKHN0YWdpbmc6IGBodHRwczovL2FwaS1zdGFnZS5yZXZlbmRvLmRldi9wdWJsaWMvdjFgKS5cblRha2VzIHByZWNlZGVuY2Ugb3ZlciBgcHJveHlCYXNlYC4gU2VlIGBFTUJFRERJTkcubWRgLlxuICAgKi9cbiAgc2V0IGFwaUJhc2UoXzogQ29tcG9uZW50cy5UcmFkZUluV2l6YXJkWydhcGlCYXNlJ10pIHt9O1xuICAgIC8qKlxuICAgKiBOdW1lcmljIHZhcmlhbnQgSUQgb2YgdGhlICQwIHBsYWNlaG9sZGVyIHByb2R1Y3QgKHJlcXVpcmVkIGZvciBgaW5zdGFudGApLlxuICAgKi9cbiAgc2V0IGR1bW15VmFyaWFudElkKF86IENvbXBvbmVudHMuVHJhZGVJbldpemFyZFsnZHVtbXlWYXJpYW50SWQnXSkge307XG4gICAgLyoqXG4gICAqIEZldGNoIHRoZSB3aG9sZSBwaWNrZXIgdHJlZSBvbmNlIGFuZCB3YWxrIGl0IGxvY2FsbHkgKG5vIHJlcXVlc3QgcGVyIHBpY2spLlxuU2V0IGBmYWxzZWAgdG8gZm9yY2UgdGhlIHN0ZXB3aXNlIGAvZmFjZXRzYCBwYXRoLlxuXG5MZWZ0IG9uIGJ5IGRlZmF1bHQ6IGEgYmFja2VuZCB3aXRob3V0IGAvZmFjZXRzL3RyZWVgIChpdCBpcyBub3Qgb24gcHJvZFxueWV0KSBtYWtlcyB0aGUgZmlyc3QgZmV0Y2ggZmFpbCwgYW5kIHRoZSB3aXphcmQgZmFsbHMgYmFjayB0byBzdGVwd2lzZSBmb3JcbnRoZSByZXN0IG9mIHRoZSBzZXNzaW9uIG9uIGl0cyBvd24g4oCUIHNvIHRoaXMgbmVlZHMgbm8gcGVyLWVudmlyb25tZW50IGZsaXAuIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHNldCBmYWNldFRyZWUoXzogQ29tcG9uZW50cy5UcmFkZUluV2l6YXJkWydmYWNldFRyZWUnXSkge307XG4gICAgLyoqXG4gICAqIENoZWNrb3V0IGZsb3cuIGBkaXJlY3RgIHdvcmtzIGFueXdoZXJlOyBgaW5zdGFudGAgbmVlZHMgYSBTaG9waWZ5IGhvc3QuIEBkZWZhdWx0ICdkaXJlY3QnXG4gICAqL1xuICBzZXQgZmxvdyhfOiBDb21wb25lbnRzLlRyYWRlSW5XaXphcmRbJ2Zsb3cnXSkge307XG4gICAgLyoqXG4gICAqIEZlYXR1cmUgZmxhZzogc2hvdyB0aGUgYnVzaW5lc3MgXCJjb2RlIGZvciBidXNpbmVzc1wiIGZpZWxkcyBhdCBjaGVja291dFxuKGRlZmF1bHQgb2ZmIOKGkiB0aGUgcHVibGlzaGVkIGNvbXBvbmVudCBzdGF5cyBwYXJ0bmVyLW5ldXRyYWwpLiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgc2V0IGJ1c2luZXNzRmllbGRzKF86IENvbXBvbmVudHMuVHJhZGVJbldpemFyZFsnYnVzaW5lc3NGaWVsZHMnXSkge307XG4gICAgLyoqXG4gICAqIEZlYXR1cmUgZmxhZzogc2hvdyBuZXdzbGV0dGVyL1NNUyBtYXJrZXRpbmcgb3B0LWlucyBhdCBjaGVja291dCAoZGVmYXVsdCBvZmYpLiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgc2V0IG1hcmtldGluZ09wdGlucyhfOiBDb21wb25lbnRzLlRyYWRlSW5XaXphcmRbJ21hcmtldGluZ09wdGlucyddKSB7fTtcbiAgICAvKipcbiAgICogVm91Y2hlciBwYXlvdXQgYm9udXMgaW4gQ0hGLCBzaG93biBhcyBhIGJhZGdlIG9uIHRoZSBjaGVja291dCdzIEd1dHNjaGVpblxub3B0aW9uIChkaXNwbGF5IG9ubHkg4oCUIHRoZSBwYXlvdXQgbWF0aCBoYXBwZW5zIG9uIHRoZSBSZXZlbmRvIHNpZGUpLlxuICAgKi9cbiAgc2V0IHZvdWNoZXJCb251cyhfOiBDb21wb25lbnRzLlRyYWRlSW5XaXphcmRbJ3ZvdWNoZXJCb251cyddKSB7fTtcbiAgICAvKipcbiAgICogRXhwbGFpbmVyIGxpbmUgdW5kZXIgdGhlIGNoZWNrb3V0J3MgR3V0c2NoZWluIG9wdGlvbiwgc2hvd24gb25seSB3aGlsZVxuR3V0c2NoZWluIGlzIHRoZSBzZWxlY3RlZCBwYXltZW50IHR5cGUuIE92ZXJyaWRlcyB0aGUgYnVpbHQtaW5cbmBjb1ZvdWNoZXJIaW50YCBjb3B5LlxuICAgKi9cbiAgc2V0IHZvdWNoZXJIaW50KF86IENvbXBvbmVudHMuVHJhZGVJbldpemFyZFsndm91Y2hlckhpbnQnXSkge307XG4gICAgLyoqXG4gICAqIFVJIGxhbmd1YWdlICgyLWxldHRlcikuIEZhbGxzIGJhY2sgdG8gYGRlYC4gUmVhZCBmcm9tIHRoZSBgbGFuZ2AgYXR0cmlidXRlLiBAZGVmYXVsdCAnZGUnXG4gICAqL1xuICBzZXQgbG9jYWxlKF86IENvbXBvbmVudHMuVHJhZGVJbldpemFyZFsnbG9jYWxlJ10pIHt9O1xuICAgIC8qKlxuICAgKiBIb3cgdGhlIHdpemFyZCBtb3VudHMuIGBpbmxpbmVgIHJlbmRlcnMgYSBzZWxmLWNvbnRhaW5lZCBjYXJkIGluIHRoZSBwYWdlO1xuYG1vZGFsYCByZW5kZXJzIGEgbGF1bmNoZXIgYnV0dG9uIHRoYXQgb3BlbnMgYSBjZW50ZXJlZCBtb2RhbCAvIG1vYmlsZVxuYm90dG9tLXNoZWV0IHdpdGggYSBiYWNrZHJvcC4gQGRlZmF1bHQgJ2lubGluZSdcbiAgICovXG4gIHNldCBwcmVzZW50YXRpb24oXzogQ29tcG9uZW50cy5UcmFkZUluV2l6YXJkWydwcmVzZW50YXRpb24nXSkge307XG4gICAgLyoqXG4gICAqIFNhbWUtb3JpZ2luIGFwcC1wcm94eSBiYXNlIChTaG9waWZ5IGhvc3RzKS4gVXNlZCB3aGVuIGBhcGlCYXNlYCBpcyB1bnNldC4gQGRlZmF1bHQgJy9hcHBzL3RyYWRlLWluJ1xuICAgKi9cbiAgc2V0IHByb3h5QmFzZShfOiBDb21wb25lbnRzLlRyYWRlSW5XaXphcmRbJ3Byb3h5QmFzZSddKSB7fTtcbiAgICAvKipcbiAgICogUHVibGlzaGFibGUsIG9yaWdpbi1sb2NrZWQgQVBJIGtleSBpc3N1ZWQgYnkgUmV2ZW5kbyBmb3IgYGFwaUJhc2VgIChzZW50IGFzXG5gWC1QdWJsaXNoYWJsZS1LZXlgKS4gTk9UIGEgc2VjcmV0OiBpdCBvbmx5IHdvcmtzIGZyb20gdGhlIHBhcnRuZXIncyByZWdpc3RlcmVkIG9yaWdpbnMuXG4gICAqL1xuICBzZXQgcHVibGlzaGFibGVLZXkoXzogQ29tcG9uZW50cy5UcmFkZUluV2l6YXJkWydwdWJsaXNoYWJsZUtleSddKSB7fTtcbiAgICAvKipcbiAgICogQ3VzdG9tZXItcmF0aW5nIFVTUCByb3c6IGF2ZXJhZ2Ugc2NvcmUgYW5kIG51bWJlciBvZiByZXZpZXdzLiBCb3RoIGNvbWVcbmZyb20gdGhlIGhvc3QsIGJlY2F1c2UgdGhlIHJldmlldyBwbGF0Zm9ybSBpcyB0aGUgaG9zdCdzLCBub3Qgb3VycyDigJQgb25cbnJldmVuZG8uY2ggdGhlIHRoZW1lIGJsb2NrIHJlYWRzIEp1ZGdlLm1lJ3MgYGp1ZGdlbWUuc2hvcF9yZXZpZXdzX3JhdGluZ2Bcbi8gYGp1ZGdlbWUuc2hvcF9yZXZpZXdzX2NvdW50YCBzaG9wIG1ldGFmaWVsZHMgYW5kIHBhc3NlcyB0aGVtIGRvd24uXG5cblRoZSByb3cgaXMgb21pdHRlZCBlbnRpcmVseSB3aGVuIGByZXZpZXdDb3VudGAgaXMgbWlzc2luZyBvciBub3QgYSBudW1iZXIuXG5JdCB1c2VkIHRvIHJlbmRlciBhIGhhcmRjb2RlZCBcIjQuOCAvIDExJzAwMFwiLCB3aGljaCB3YXMgYm90aCBzdGFsZSBhbmRcbmFib3ZlIHRoZSByZWFsIGZpZ3VyZSDigJQgYW5kIGEgcHVibGlzaGVkIGNvbXBvbmVudCBtdXN0IG5vdCBhZHZlcnRpc2VcblJldmVuZG8ncyByZXZpZXdzIG9uIGEgcGFydG5lcidzIHBhZ2UuIE5vIG51bWJlcnMsIG5vIGNsYWltLlxuICAgKi9cbiAgc2V0IHJldmlld1JhdGluZyhfOiBDb21wb25lbnRzLlRyYWRlSW5XaXphcmRbJ3Jldmlld1JhdGluZyddKSB7fTtcbiAgXG4gIHNldCByZXZpZXdDb3VudChfOiBDb21wb25lbnRzLlRyYWRlSW5XaXphcmRbJ3Jldmlld0NvdW50J10pIHt9O1xuICAgIC8qKlxuICAgKiBEZWFsLWJyZWFrZXIgYW5zd2VyczogY29tbWEtc2VwYXJhdGVkIGBxdWVzdGlvbjphbnN3ZXJgIHBhaXJzIHRoYXQgZW5kIHRoZVxuYXBwcmFpc2FsIG9uIHRoZSBzcG90IGFuZCBqdW1wIHN0cmFpZ2h0IHRvIHRoZSBxdW90ZSwgc2tpcHBpbmcgZXZlcnlcbnF1ZXN0aW9uIHN0aWxsIGFoZWFkIOKAlCBlLmcuIGBpc19mdW5jdGlvbmFsOm5vYCAoXCJEb2VzIHRoZSBkZXZpY2Ugd29ya1xucHJvcGVybHk/XCIg4oaSIFwiTm9cIjsgdGhlIGJhY2tlbmQgYWxyZWFkeSBwcmljZXMgdGhhdCBhcyBhIG1hbnVhbCBhcHByYWlzYWwsXG5zbyB0aGUgb3B0aWNhbCBncmFkZSBhbmQgYmF0dGVyeSBhbnN3ZXJzIGJlaGluZCBpdCBjaGFuZ2Ugbm90aGluZykuXG5cbkVhY2ggc2lkZSBtYXRjaGVzIHRoZSBzdGFibGUgYGNvbnRlbnRfdHlwZWAgZmlyc3QgYW5kIHRoZSByYXcgaWQvdmFsdWVcbnNlY29uZCwgc28gYGlzX2Z1bmN0aW9uYWw6bm9gIGtlZXBzIHdvcmtpbmcgd2hlbiB0aGUgYmFja2VuZCByZS1hdXRob3JzIHRoZVxucXVlc3Rpb24gdW5kZXIgYSBuZXcgaWQg4oCUIHdoaWNoIGl0IGRvZXMgKHNlZSBgY29yZS9za2lwLXJ1bGVzLnRzYCkuIExlZnRcbmVtcHR5IHRoZSB3aXphcmQgYXNrcyBldmVyeSBxdWVzdGlvbiwgYXMgYmVmb3JlLlxuICAgKi9cbiAgc2V0IHNraXBUb1F1b3RlT24oXzogQ29tcG9uZW50cy5UcmFkZUluV2l6YXJkWydza2lwVG9RdW90ZU9uJ10pIHt9O1xuICAgIC8qKlxuICAgKiBTaG93IHRoZSBpbnRybyBzY3JlZW4gKGV5ZWJyb3cgKyBoZWFkbGluZSArIFVTUCBsaXN0LCBcImZpbmQgcHJpY2VcIiBDVEEpXG5hcyB0aGUgZmlyc3QgdGhpbmcgYSBmcmVzaCBzZXNzaW9uIHNlZXMuIFNldCBgZmFsc2VgIHRvIG9wZW4gc3RyYWlnaHQgb25cbnRoZSBwaWNrZXIg4oCUIGZvciBob3N0cyB3aG9zZSBvd24gcGFnZSBhbHJlYWR5IGNhcnJpZXMgdGhhdCBwaXRjaCwgd2hlcmVcbnRoZSBpbnRybyBpcyBhIHNlY29uZCBzYWxlcyBzY3JlZW4gdGhlIGN1c3RvbWVyIGhhcyB0byBjbGljayBwYXN0LlxuXG5QdXJlbHkgYSBzdGFydGluZyBwb2ludCwgbm90IGEgbW9kZTogZXZlcnl0aGluZyB0aGF0IHJldHVybnMgdG8gdGhlIHN0YXJ0XG4oXCJzZWxsIGFub3RoZXIgZGV2aWNlXCIsIGNsb3NpbmcgYW5kIHJlb3BlbmluZyB0aGUgbW9kYWwpIGxhbmRzIG9uXG53aGljaGV2ZXIgc2NyZWVuIHRoaXMgc2VsZWN0cy4gQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgc2V0IHNob3dJbnRybyhfOiBDb21wb25lbnRzLlRyYWRlSW5XaXphcmRbJ3Nob3dJbnRybyddKSB7fTtcbiAgICAvKipcbiAgICogT3B0aW9uYWxseSBvcGVuIHRoZSBwaWNrZXIgaW5zaWRlIG9uZSBkZXZpY2UgZmFtaWx5IChlLmcuIFwiaVBob25lXCIpLlxuXG5BIHNob3J0Y3V0LCBub3QgYSBmaWx0ZXI6IGl0IG9ubHkgc2VlZHMgdGhlIGNhdGVnb3J5IHRoZSBwaWNrZXIgc3RhcnRzIG9uXG4oYW5kIHRoZSBvbmUgYSBmcmVzaCBwaWNrIHJldHVybnMgdG8pLCBzbyBCYWNrIGFuZCB0aGUgY2F0ZWdvcnkgY2hpcCBzdGlsbFxuY2xlYXIgaXQgYW5kIHNob3cgdGhlIGZ1bGwgZmFtaWx5IHRpbGVzLiBBIGRlZXAgbGluaydzIGB0aV9jYXRgIHdpbnMgb3ZlclxuaXQuXG4gICAqL1xuICBzZXQgc3RhcnRDYXRlZ29yeShfOiBDb21wb25lbnRzLlRyYWRlSW5XaXphcmRbJ3N0YXJ0Q2F0ZWdvcnknXSkge307XG4gICAgLyoqXG4gICAqIFdoZXJlIHRoaXMgd2lkZ2V0IHNpdHMsIGFzIGEgbGFiZWwgZm9yIHRoZSBxdW90ZSdzIGF0dHJpYnV0aW9uIOKAlCBlLmcuXG5gbGFuZGluZy1wYWdlYCwgYHBkcC1pcGhvbmVgLCBgYmxvZy1zZWxsLXlvdXItbWFjYC4gVHJhdmVscyB3aXRoIGV2ZXJ5XG5wcmljZSBjYWxsIGFuZCBpcyBwZXJzaXN0ZWQgYnkgUmV2ZW5kbyBvbiB0aGUgb2ZmZXIgYW5kIHRoZSBvcmRlciBiZWhpbmRcbml0LCBzbyBhIHBsYWNlbWVudCBjYW4gYmUgbWVhc3VyZWQgYWdhaW5zdCB0aGUgb3JkZXJzIGl0IHByb2R1Y2VkLlxuXG5GcmVlLWZvcm0gYW5kIHNldCBieSB0aGUgaG9zdCBwYWdlICh0aGUgdGhlbWUgYmxvY2sgZXhwb3NlcyBpdCBhcyBhXG5zZXR0aW5nKTsgbm90aGluZyBpbiB0aGUgZmxvdyBrZXlzIG9mZiBpdC4gTGVmdCBlbXB0eSB0aGUgZmllbGQgaXMgc2ltcGx5XG5vbWl0dGVkLCBhcyBiZWZvcmUuIElnbm9yZWQgYnkgdGhlIHBhcnRuZXIgQVBJLCB3aGljaCBhdHRyaWJ1dGVzIGV2ZXJ5XG5xdW90ZSB0byB0aGUgcGFydG5lciBzZXJ2ZXItc2lkZS5cbiAgICovXG4gIHNldCBlbWJlZFNvdXJjZShfOiBDb21wb25lbnRzLlRyYWRlSW5XaXphcmRbJ2VtYmVkU291cmNlJ10pIHt9O1xuICBcbiAgc2V0IGN1c3RGaXJzdE5hbWUoXzogQ29tcG9uZW50cy5UcmFkZUluV2l6YXJkWydjdXN0Rmlyc3ROYW1lJ10pIHt9O1xuICBcbiAgc2V0IGN1c3RMYXN0TmFtZShfOiBDb21wb25lbnRzLlRyYWRlSW5XaXphcmRbJ2N1c3RMYXN0TmFtZSddKSB7fTtcbiAgXG4gIHNldCBjdXN0RW1haWwoXzogQ29tcG9uZW50cy5UcmFkZUluV2l6YXJkWydjdXN0RW1haWwnXSkge307XG4gIFxuICBzZXQgY3VzdFBob25lKF86IENvbXBvbmVudHMuVHJhZGVJbldpemFyZFsnY3VzdFBob25lJ10pIHt9O1xuICBcbiAgc2V0IGN1c3RTdHJlZXQoXzogQ29tcG9uZW50cy5UcmFkZUluV2l6YXJkWydjdXN0U3RyZWV0J10pIHt9O1xuICBcbiAgc2V0IGN1c3RaaXAoXzogQ29tcG9uZW50cy5UcmFkZUluV2l6YXJkWydjdXN0WmlwJ10pIHt9O1xuICBcbiAgc2V0IGN1c3RDaXR5KF86IENvbXBvbmVudHMuVHJhZGVJbldpemFyZFsnY3VzdENpdHknXSkge307XG4gIFxuICBzZXQgY3VzdENvdW50cnkoXzogQ29tcG9uZW50cy5UcmFkZUluV2l6YXJkWydjdXN0Q291bnRyeSddKSB7fTtcbiAgICAvKipcbiAgICogVVJMIG9mIHRoZSBzZXBhcmF0ZWx5LWJ1aWx0IGNoZWNrb3V0IGJ1bmRsZSDigJQgbmVlZGVkIHdpdGggc2NyaXB0IHRhZ3NcbihTaG9waWZ5IHRoZW1lIGFzc2V0LCBwYXJ0bmVyIHBhZ2UpLiBOb3Qgd2l0aCB0aGUgbnBtIGBsb2FkZXJgIG9yIHRoZVxuUmVhY3QvQW5ndWxhciBwYWNrYWdlcywgd2hpY2ggZGVmaW5lIHRoZSBjaGVja291dCB0aGVtc2VsdmVzLlxuICAgKi9cbiAgc2V0IGNoZWNrb3V0QXNzZXRVcmwoXzogQ29tcG9uZW50cy5UcmFkZUluV2l6YXJkWydjaGVja291dEFzc2V0VXJsJ10pIHt9O1xuICBAT3V0cHV0KCkgdHJhZGVJbkRldmljZVNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxUcmFkZUluV2l6YXJkQ3VzdG9tRXZlbnQ8SVRyYWRlSW5XaXphcmRUcmFkZUluRGV2aWNlU2VsZWN0ZWREZXRhaWw+PigpO1xuICBAT3V0cHV0KCkgdHJhZGVJbkFuYWx5dGljcyA9IG5ldyBFdmVudEVtaXR0ZXI8VHJhZGVJbldpemFyZEN1c3RvbUV2ZW50PElUcmFkZUluV2l6YXJkVHJhZGVJbkFuYWx5dGljc0RldGFpbD4+KCk7XG4gIEBPdXRwdXQoKSB0cmFkZUluRXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPFRyYWRlSW5XaXphcmRDdXN0b21FdmVudDxJVHJhZGVJbldpemFyZFRyYWRlSW5FcnJvckRldGFpbD4+KCk7XG4gIEBPdXRwdXQoKSB0cmFkZUluT3JkZXJDb21wbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8VHJhZGVJbldpemFyZEN1c3RvbUV2ZW50PElUcmFkZUluV2l6YXJkVHJhZGVJbk9yZGVyQ29tcGxldGVEZXRhaWw+PigpO1xuICBjb25zdHJ1Y3RvcihjOiBDaGFuZ2VEZXRlY3RvclJlZiwgcjogRWxlbWVudFJlZiwgcHJvdGVjdGVkIHo6IE5nWm9uZSkge1xuICAgIGMuZGV0YWNoKCk7XG4gICAgdGhpcy5lbCA9IHIubmF0aXZlRWxlbWVudDtcbiAgfVxufVxuXG5cbmltcG9ydCB0eXBlIHsgVHJhZGVJbldpemFyZEN1c3RvbUV2ZW50IH0gZnJvbSAnQHJldmVuZG9fY2gvdHJhZGUtaW4tY29tcG9uZW50cy9kaXN0L2NvbXBvbmVudHMnO1xuaW1wb3J0IHR5cGUgeyBUcmFkZUluRGV2aWNlU2VsZWN0ZWREZXRhaWwgYXMgSVRyYWRlSW5XaXphcmRUcmFkZUluRGV2aWNlU2VsZWN0ZWREZXRhaWwgfSBmcm9tICdAcmV2ZW5kb19jaC90cmFkZS1pbi1jb21wb25lbnRzL2Rpc3QvY29tcG9uZW50cyc7XG5pbXBvcnQgdHlwZSB7IFRyYWRlSW5BbmFseXRpY3NEZXRhaWwgYXMgSVRyYWRlSW5XaXphcmRUcmFkZUluQW5hbHl0aWNzRGV0YWlsIH0gZnJvbSAnQHJldmVuZG9fY2gvdHJhZGUtaW4tY29tcG9uZW50cy9kaXN0L2NvbXBvbmVudHMnO1xuaW1wb3J0IHR5cGUgeyBUcmFkZUluRXJyb3JEZXRhaWwgYXMgSVRyYWRlSW5XaXphcmRUcmFkZUluRXJyb3JEZXRhaWwgfSBmcm9tICdAcmV2ZW5kb19jaC90cmFkZS1pbi1jb21wb25lbnRzL2Rpc3QvY29tcG9uZW50cyc7XG5pbXBvcnQgdHlwZSB7IFRyYWRlSW5PcmRlckNvbXBsZXRlRGV0YWlsIGFzIElUcmFkZUluV2l6YXJkVHJhZGVJbk9yZGVyQ29tcGxldGVEZXRhaWwgfSBmcm9tICdAcmV2ZW5kb19jaC90cmFkZS1pbi1jb21wb25lbnRzL2Rpc3QvY29tcG9uZW50cyc7XG5cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBUcmFkZUluV2l6YXJkIGV4dGVuZHMgQ29tcG9uZW50cy5UcmFkZUluV2l6YXJkIHtcbiAgLyoqXG4gICAqIEN1c3RvbWVyIGFjY2VwdGVkIGEgcXVvdGUuXG4gICAqL1xuICB0cmFkZUluRGV2aWNlU2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxUcmFkZUluV2l6YXJkQ3VzdG9tRXZlbnQ8SVRyYWRlSW5XaXphcmRUcmFkZUluRGV2aWNlU2VsZWN0ZWREZXRhaWw+PjtcbiAgLyoqXG4gICAqIFByaXZhY3ktc2FmZSBmdW5uZWwgZXZlbnQgZm9yIGhvc3QgYW5hbHl0aWNzIGludGVncmF0aW9ucy5cbiAgICovXG4gIHRyYWRlSW5BbmFseXRpY3M6IEV2ZW50RW1pdHRlcjxUcmFkZUluV2l6YXJkQ3VzdG9tRXZlbnQ8SVRyYWRlSW5XaXphcmRUcmFkZUluQW5hbHl0aWNzRGV0YWlsPj47XG4gIC8qKlxuICAgKiBBIHJlY292ZXJhYmxlIGVycm9yIHN1cmZhY2VkIHRvIHRoZSBob3N0LlxuICAgKi9cbiAgdHJhZGVJbkVycm9yOiBFdmVudEVtaXR0ZXI8VHJhZGVJbldpemFyZEN1c3RvbUV2ZW50PElUcmFkZUluV2l6YXJkVHJhZGVJbkVycm9yRGV0YWlsPj47XG4gIC8qKlxuICAgKiBPcmRlciBmaW5hbGl6ZWQgKGhvc3QgYmFja2VuZCBtdXN0IHN0aWxsIHZlcmlmeSBzZXJ2ZXItdG8tc2VydmVyKS5cbiAgICovXG4gIHRyYWRlSW5PcmRlckNvbXBsZXRlOiBFdmVudEVtaXR0ZXI8VHJhZGVJbldpemFyZEN1c3RvbUV2ZW50PElUcmFkZUluV2l6YXJkVHJhZGVJbk9yZGVyQ29tcGxldGVEZXRhaWw+Pjtcbn1cblxuXG4iXX0=
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Angular bindings for `<trade-in-wizard>` (standalone component).
3
+ *
4
+ * import { TradeInWizard } from '@revendo_ch/trade-in-components-angular';
5
+ * @Component({ imports: [TradeInWizard], template: `
6
+ * <trade-in-wizard apiBase="…" publishableKey="pk_…" flow="direct"
7
+ * (tradeInOrderComplete)="done($event)"></trade-in-wizard>` })
8
+ *
9
+ * `./generated/` is written by the Stencil Angular output target on every
10
+ * build of `@revendo_ch/trade-in-components` — do not edit it. This file only adds
11
+ * what the generator can't: defining the internal checkout element. Inputs,
12
+ * outputs and the element proxying are inherited from the generated class.
13
+ */
14
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
15
+ import { TradeInWizard as GeneratedTradeInWizard } from './generated/proxies';
16
+ import { defineCheckoutInBackground } from './checkout';
17
+ import * as i0 from "@angular/core";
18
+ export class TradeInWizard extends GeneratedTradeInWizard {
19
+ constructor() {
20
+ super(...arguments);
21
+ this.checkoutDefined = defineCheckoutInBackground();
22
+ }
23
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TradeInWizard, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
24
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TradeInWizard, isStandalone: true, selector: "trade-in-wizard", usesInheritance: true, ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
25
+ }
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TradeInWizard, decorators: [{
27
+ type: Component,
28
+ args: [{
29
+ selector: 'trade-in-wizard',
30
+ standalone: true,
31
+ changeDetection: ChangeDetectionStrategy.OnPush,
32
+ template: '<ng-content></ng-content>',
33
+ }]
34
+ }] });
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLGFBQWEsSUFBSSxzQkFBc0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLFlBQVksQ0FBQzs7QUFReEQsTUFBTSxPQUFPLGFBQWMsU0FBUSxzQkFBc0I7SUFOekQ7O1FBT21CLG9CQUFlLEdBQUcsMEJBQTBCLEVBQUUsQ0FBQztLQUNqRTsrR0FGWSxhQUFhO21HQUFiLGFBQWEsa0dBRmQsMkJBQTJCOzs0RkFFMUIsYUFBYTtrQkFOekIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLFFBQVEsRUFBRSwyQkFBMkI7aUJBQ3RDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBbmd1bGFyIGJpbmRpbmdzIGZvciBgPHRyYWRlLWluLXdpemFyZD5gIChzdGFuZGFsb25lIGNvbXBvbmVudCkuXG4gKlxuICogICBpbXBvcnQgeyBUcmFkZUluV2l6YXJkIH0gZnJvbSAnQHJldmVuZG9fY2gvdHJhZGUtaW4tY29tcG9uZW50cy1hbmd1bGFyJztcbiAqICAgQENvbXBvbmVudCh7IGltcG9ydHM6IFtUcmFkZUluV2l6YXJkXSwgdGVtcGxhdGU6IGBcbiAqICAgICA8dHJhZGUtaW4td2l6YXJkIGFwaUJhc2U9XCLigKZcIiBwdWJsaXNoYWJsZUtleT1cInBrX+KAplwiIGZsb3c9XCJkaXJlY3RcIlxuICogICAgICAgKHRyYWRlSW5PcmRlckNvbXBsZXRlKT1cImRvbmUoJGV2ZW50KVwiPjwvdHJhZGUtaW4td2l6YXJkPmAgfSlcbiAqXG4gKiBgLi9nZW5lcmF0ZWQvYCBpcyB3cml0dGVuIGJ5IHRoZSBTdGVuY2lsIEFuZ3VsYXIgb3V0cHV0IHRhcmdldCBvbiBldmVyeVxuICogYnVpbGQgb2YgYEByZXZlbmRvX2NoL3RyYWRlLWluLWNvbXBvbmVudHNgIOKAlCBkbyBub3QgZWRpdCBpdC4gVGhpcyBmaWxlIG9ubHkgYWRkc1xuICogd2hhdCB0aGUgZ2VuZXJhdG9yIGNhbid0OiBkZWZpbmluZyB0aGUgaW50ZXJuYWwgY2hlY2tvdXQgZWxlbWVudC4gSW5wdXRzLFxuICogb3V0cHV0cyBhbmQgdGhlIGVsZW1lbnQgcHJveHlpbmcgYXJlIGluaGVyaXRlZCBmcm9tIHRoZSBnZW5lcmF0ZWQgY2xhc3MuXG4gKi9cbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYWRlSW5XaXphcmQgYXMgR2VuZXJhdGVkVHJhZGVJbldpemFyZCB9IGZyb20gJy4vZ2VuZXJhdGVkL3Byb3hpZXMnO1xuaW1wb3J0IHsgZGVmaW5lQ2hlY2tvdXRJbkJhY2tncm91bmQgfSBmcm9tICcuL2NoZWNrb3V0JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndHJhZGUtaW4td2l6YXJkJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHRlbXBsYXRlOiAnPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PicsXG59KVxuZXhwb3J0IGNsYXNzIFRyYWRlSW5XaXphcmQgZXh0ZW5kcyBHZW5lcmF0ZWRUcmFkZUluV2l6YXJkIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjaGVja291dERlZmluZWQgPSBkZWZpbmVDaGVja291dEluQmFja2dyb3VuZCgpO1xufVxuXG5leHBvcnQgdHlwZSB7XG4gIFRyYWRlSW5BbmFseXRpY3NEZXRhaWwsXG4gIFRyYWRlSW5EZXZpY2VTZWxlY3RlZERldGFpbCxcbiAgVHJhZGVJbkVycm9yRGV0YWlsLFxuICBUcmFkZUluT3JkZXJDb21wbGV0ZURldGFpbCxcbiAgVHJhZGVJbldpemFyZEN1c3RvbUV2ZW50LFxufSBmcm9tICdAcmV2ZW5kb19jaC90cmFkZS1pbi1jb21wb25lbnRzJztcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV2ZW5kb19jaC10cmFkZS1pbi1jb21wb25lbnRzLWFuZ3VsYXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmV2ZW5kb19jaC10cmFkZS1pbi1jb21wb25lbnRzLWFuZ3VsYXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
@@ -0,0 +1,376 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, PLATFORM_ID, EventEmitter, Output, ChangeDetectionStrategy, Component } from '@angular/core';
3
+ import { __decorate } from 'tslib';
4
+ import { fromEvent } from 'rxjs';
5
+ import { defineCustomElement as defineCustomElement$1 } from '@revendo_ch/trade-in-components/dist/components/trade-in-wizard.js';
6
+
7
+ /* eslint-disable */
8
+ /* tslint:disable */
9
+ const serverInstances = new WeakSet();
10
+ /**
11
+ * Records a wrapper created during server rendering. Call from the constructor.
12
+ */
13
+ const markServer = (instance) => {
14
+ // what `isPlatformServer()` from `@angular/common` checks
15
+ if (inject(PLATFORM_ID) === 'server') {
16
+ serverInstances.add(instance);
17
+ }
18
+ };
19
+ /**
20
+ * Stencil's own prop name to attribute name conversion (`prop1` -> `prop-1`).
21
+ */
22
+ const toDashCase = (str) => str
23
+ .replace(/([A-Z0-9])/g, (match) => ` ${match[0]}`)
24
+ .trim()
25
+ .split(' ')
26
+ .join('-')
27
+ .toLowerCase();
28
+ /**
29
+ * Angular's server DOM never writes properties to the HTML, so on the server an input becomes an
30
+ * attribute, which Stencil's `renderToString()` reads:
31
+ * - a string or number as itself, and `true` as an empty attribute, so the component's first
32
+ * render in the browser sees them too;
33
+ * - `false`, anything that isn't a primitive, and any value for a prop with no attribute through
34
+ * `ssrProp()`, which gives the server render the exact value and leaves no attribute behind.
35
+ */
36
+ const setServerAttribute = (el, item, val, ssr) => {
37
+ const name = ssr.attributes?.[item] ?? toDashCase(item);
38
+ if (val == null) {
39
+ el.removeAttribute(name);
40
+ }
41
+ else if (ssr.refs?.includes(item) ||
42
+ val === false ||
43
+ (typeof val !== 'string' && typeof val !== 'number' && val !== true)) {
44
+ el.setAttribute(name, ssr.ssrProp(val));
45
+ }
46
+ else {
47
+ el.setAttribute(name, val === true ? '' : String(val));
48
+ }
49
+ };
50
+ const proxyInputs = (Cmp, inputs, ssr) => {
51
+ const Prototype = Cmp.prototype;
52
+ inputs.forEach((item) => {
53
+ Object.defineProperty(Prototype, item, {
54
+ get() {
55
+ return this.el[item];
56
+ },
57
+ set(val) {
58
+ if (ssr && serverInstances.has(this)) {
59
+ // kept on the element too, so reading the input back on the server works
60
+ this.el[item] = val;
61
+ setServerAttribute(this.el, item, val, ssr);
62
+ return;
63
+ }
64
+ this.z.runOutsideAngular(() => (this.el[item] = val));
65
+ },
66
+ /**
67
+ * In the event that proxyInputs is called
68
+ * multiple times re-defining these inputs
69
+ * will cause an error to be thrown. As a result
70
+ * we set configurable: true to indicate these
71
+ * properties can be changed.
72
+ */
73
+ configurable: true,
74
+ });
75
+ });
76
+ };
77
+ const proxyMethods = (Cmp, methods) => {
78
+ const Prototype = Cmp.prototype;
79
+ methods.forEach((methodName) => {
80
+ Prototype[methodName] = function () {
81
+ const args = arguments;
82
+ return this.z.runOutsideAngular(() => this.el[methodName].apply(this.el, args));
83
+ };
84
+ });
85
+ };
86
+ const proxyOutputs = (instance, el, events) => {
87
+ events.forEach((eventName) => (instance[eventName] = fromEvent(el, eventName)));
88
+ };
89
+ const defineCustomElement = (tagName, customElement) => {
90
+ if (customElement !== undefined && typeof customElements !== 'undefined' && !customElements.get(tagName)) {
91
+ customElements.define(tagName, customElement);
92
+ }
93
+ };
94
+ // tslint:disable-next-line: only-arrow-functions
95
+ function ProxyCmp(opts) {
96
+ const decorator = function (cls) {
97
+ const { defineCustomElementFn, inputs, methods, ssr } = opts;
98
+ if (defineCustomElementFn !== undefined) {
99
+ defineCustomElementFn();
100
+ }
101
+ if (inputs) {
102
+ proxyInputs(cls, inputs, ssr);
103
+ }
104
+ if (methods) {
105
+ proxyMethods(cls, methods);
106
+ }
107
+ return cls;
108
+ };
109
+ return decorator;
110
+ }
111
+
112
+ let TradeInWizard$1 = class TradeInWizard {
113
+ /**
114
+ * Absolute API base for cross-origin partners — Revendo's partner API,
115
+ `https://api.revendo.ch/public/v1` (staging: `https://api-stage.revendo.dev/public/v1`).
116
+ Takes precedence over `proxyBase`. See `EMBEDDING.md`.
117
+ */
118
+ set apiBase(_) { }
119
+ ;
120
+ /**
121
+ * Numeric variant ID of the $0 placeholder product (required for `instant`).
122
+ */
123
+ set dummyVariantId(_) { }
124
+ ;
125
+ /**
126
+ * Fetch the whole picker tree once and walk it locally (no request per pick).
127
+ Set `false` to force the stepwise `/facets` path.
128
+
129
+ Left on by default: a backend without `/facets/tree` (it is not on prod
130
+ yet) makes the first fetch fail, and the wizard falls back to stepwise for
131
+ the rest of the session on its own — so this needs no per-environment flip. @default true
132
+ */
133
+ set facetTree(_) { }
134
+ ;
135
+ /**
136
+ * Checkout flow. `direct` works anywhere; `instant` needs a Shopify host. @default 'direct'
137
+ */
138
+ set flow(_) { }
139
+ ;
140
+ /**
141
+ * Feature flag: show the business "code for business" fields at checkout
142
+ (default off → the published component stays partner-neutral). @default false
143
+ */
144
+ set businessFields(_) { }
145
+ ;
146
+ /**
147
+ * Feature flag: show newsletter/SMS marketing opt-ins at checkout (default off). @default false
148
+ */
149
+ set marketingOptins(_) { }
150
+ ;
151
+ /**
152
+ * Voucher payout bonus in CHF, shown as a badge on the checkout's Gutschein
153
+ option (display only — the payout math happens on the Revendo side).
154
+ */
155
+ set voucherBonus(_) { }
156
+ ;
157
+ /**
158
+ * Explainer line under the checkout's Gutschein option, shown only while
159
+ Gutschein is the selected payment type. Overrides the built-in
160
+ `coVoucherHint` copy.
161
+ */
162
+ set voucherHint(_) { }
163
+ ;
164
+ /**
165
+ * UI language (2-letter). Falls back to `de`. Read from the `lang` attribute. @default 'de'
166
+ */
167
+ set locale(_) { }
168
+ ;
169
+ /**
170
+ * How the wizard mounts. `inline` renders a self-contained card in the page;
171
+ `modal` renders a launcher button that opens a centered modal / mobile
172
+ bottom-sheet with a backdrop. @default 'inline'
173
+ */
174
+ set presentation(_) { }
175
+ ;
176
+ /**
177
+ * Same-origin app-proxy base (Shopify hosts). Used when `apiBase` is unset. @default '/apps/trade-in'
178
+ */
179
+ set proxyBase(_) { }
180
+ ;
181
+ /**
182
+ * Publishable, origin-locked API key issued by Revendo for `apiBase` (sent as
183
+ `X-Publishable-Key`). NOT a secret: it only works from the partner's registered origins.
184
+ */
185
+ set publishableKey(_) { }
186
+ ;
187
+ /**
188
+ * Customer-rating USP row: average score and number of reviews. Both come
189
+ from the host, because the review platform is the host's, not ours — on
190
+ revendo.ch the theme block reads Judge.me's `judgeme.shop_reviews_rating`
191
+ / `judgeme.shop_reviews_count` shop metafields and passes them down.
192
+
193
+ The row is omitted entirely when `reviewCount` is missing or not a number.
194
+ It used to render a hardcoded "4.8 / 11'000", which was both stale and
195
+ above the real figure — and a published component must not advertise
196
+ Revendo's reviews on a partner's page. No numbers, no claim.
197
+ */
198
+ set reviewRating(_) { }
199
+ ;
200
+ set reviewCount(_) { }
201
+ ;
202
+ /**
203
+ * Deal-breaker answers: comma-separated `question:answer` pairs that end the
204
+ appraisal on the spot and jump straight to the quote, skipping every
205
+ question still ahead — e.g. `is_functional:no` ("Does the device work
206
+ properly?" → "No"; the backend already prices that as a manual appraisal,
207
+ so the optical grade and battery answers behind it change nothing).
208
+
209
+ Each side matches the stable `content_type` first and the raw id/value
210
+ second, so `is_functional:no` keeps working when the backend re-authors the
211
+ question under a new id — which it does (see `core/skip-rules.ts`). Left
212
+ empty the wizard asks every question, as before.
213
+ */
214
+ set skipToQuoteOn(_) { }
215
+ ;
216
+ /**
217
+ * Show the intro screen (eyebrow + headline + USP list, "find price" CTA)
218
+ as the first thing a fresh session sees. Set `false` to open straight on
219
+ the picker — for hosts whose own page already carries that pitch, where
220
+ the intro is a second sales screen the customer has to click past.
221
+
222
+ Purely a starting point, not a mode: everything that returns to the start
223
+ ("sell another device", closing and reopening the modal) lands on
224
+ whichever screen this selects. @default true
225
+ */
226
+ set showIntro(_) { }
227
+ ;
228
+ /**
229
+ * Optionally open the picker inside one device family (e.g. "iPhone").
230
+
231
+ A shortcut, not a filter: it only seeds the category the picker starts on
232
+ (and the one a fresh pick returns to), so Back and the category chip still
233
+ clear it and show the full family tiles. A deep link's `ti_cat` wins over
234
+ it.
235
+ */
236
+ set startCategory(_) { }
237
+ ;
238
+ /**
239
+ * Where this widget sits, as a label for the quote's attribution — e.g.
240
+ `landing-page`, `pdp-iphone`, `blog-sell-your-mac`. Travels with every
241
+ price call and is persisted by Revendo on the offer and the order behind
242
+ it, so a placement can be measured against the orders it produced.
243
+
244
+ Free-form and set by the host page (the theme block exposes it as a
245
+ setting); nothing in the flow keys off it. Left empty the field is simply
246
+ omitted, as before. Ignored by the partner API, which attributes every
247
+ quote to the partner server-side.
248
+ */
249
+ set embedSource(_) { }
250
+ ;
251
+ set custFirstName(_) { }
252
+ ;
253
+ set custLastName(_) { }
254
+ ;
255
+ set custEmail(_) { }
256
+ ;
257
+ set custPhone(_) { }
258
+ ;
259
+ set custStreet(_) { }
260
+ ;
261
+ set custZip(_) { }
262
+ ;
263
+ set custCity(_) { }
264
+ ;
265
+ set custCountry(_) { }
266
+ ;
267
+ /**
268
+ * URL of the separately-built checkout bundle — needed with script tags
269
+ (Shopify theme asset, partner page). Not with the npm `loader` or the
270
+ React/Angular packages, which define the checkout themselves.
271
+ */
272
+ set checkoutAssetUrl(_) { }
273
+ ;
274
+ constructor(c, r, z) {
275
+ this.z = z;
276
+ this.tradeInDeviceSelected = new EventEmitter();
277
+ this.tradeInAnalytics = new EventEmitter();
278
+ this.tradeInError = new EventEmitter();
279
+ this.tradeInOrderComplete = new EventEmitter();
280
+ c.detach();
281
+ this.el = r.nativeElement;
282
+ }
283
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TradeInWizard, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
284
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TradeInWizard, selector: "trade-in-wizard", inputs: { apiBase: "apiBase", businessFields: "businessFields", checkoutAssetUrl: "checkoutAssetUrl", custCity: "custCity", custCountry: "custCountry", custEmail: "custEmail", custFirstName: "custFirstName", custLastName: "custLastName", custPhone: "custPhone", custStreet: "custStreet", custZip: "custZip", dummyVariantId: "dummyVariantId", embedSource: "embedSource", facetTree: "facetTree", flow: "flow", locale: "locale", marketingOptins: "marketingOptins", presentation: "presentation", proxyBase: "proxyBase", publishableKey: "publishableKey", reviewCount: "reviewCount", reviewRating: "reviewRating", showIntro: "showIntro", skipToQuoteOn: "skipToQuoteOn", startCategory: "startCategory", voucherBonus: "voucherBonus", voucherHint: "voucherHint" }, outputs: { tradeInDeviceSelected: "tradeInDeviceSelected", tradeInAnalytics: "tradeInAnalytics", tradeInError: "tradeInError", tradeInOrderComplete: "tradeInOrderComplete" }, ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
285
+ };
286
+ TradeInWizard$1 = __decorate([
287
+ ProxyCmp({
288
+ defineCustomElementFn: defineCustomElement$1,
289
+ inputs: ['apiBase', 'businessFields', 'checkoutAssetUrl', 'custCity', 'custCountry', 'custEmail', 'custFirstName', 'custLastName', 'custPhone', 'custStreet', 'custZip', 'dummyVariantId', 'embedSource', 'facetTree', 'flow', 'locale', 'marketingOptins', 'presentation', 'proxyBase', 'publishableKey', 'reviewCount', 'reviewRating', 'showIntro', 'skipToQuoteOn', 'startCategory', 'voucherBonus', 'voucherHint']
290
+ })
291
+ ], TradeInWizard$1);
292
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TradeInWizard$1, decorators: [{
293
+ type: Component,
294
+ args: [{
295
+ selector: 'trade-in-wizard',
296
+ changeDetection: ChangeDetectionStrategy.OnPush,
297
+ template: '<ng-content></ng-content>',
298
+ // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property
299
+ inputs: ['apiBase', 'businessFields', 'checkoutAssetUrl', 'custCity', 'custCountry', 'custEmail', 'custFirstName', 'custLastName', 'custPhone', 'custStreet', 'custZip', 'dummyVariantId', 'embedSource', 'facetTree', 'flow', 'locale', 'marketingOptins', 'presentation', 'proxyBase', 'publishableKey', 'reviewCount', 'reviewRating', 'showIntro', 'skipToQuoteOn', 'startCategory', 'voucherBonus', 'voucherHint'],
300
+ outputs: ['tradeInDeviceSelected', 'tradeInAnalytics', 'tradeInError', 'tradeInOrderComplete'],
301
+ }]
302
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i0.NgZone }], propDecorators: { tradeInDeviceSelected: [{
303
+ type: Output
304
+ }], tradeInAnalytics: [{
305
+ type: Output
306
+ }], tradeInError: [{
307
+ type: Output
308
+ }], tradeInOrderComplete: [{
309
+ type: Output
310
+ }] } });
311
+
312
+ /**
313
+ * `<trade-in-checkout>` is internal to the wizard, which mounts it when a
314
+ * customer reaches checkout. With script tags the wizard fetches it from
315
+ * `checkout-asset-url`; through this package it is defined here instead, from
316
+ * a dynamic import, so the Angular CLI emits it as its own lazy chunk and a
317
+ * visitor who never sells doesn't download it up front. The wizard waits for
318
+ * the definition when it needs it (`loadCheckoutBundle`).
319
+ *
320
+ * Kept in sync with `packages/trade-in-components-react/src/checkout.ts`.
321
+ */
322
+ const CHECKOUT_TAG = 'trade-in-checkout';
323
+ let pending;
324
+ function defineCheckoutInBackground() {
325
+ if (typeof window === 'undefined' || !window.customElements)
326
+ return Promise.resolve();
327
+ if (window.customElements.get(CHECKOUT_TAG))
328
+ return Promise.resolve();
329
+ pending ??= import('@revendo_ch/trade-in-components/dist/components/trade-in-checkout.js')
330
+ .then((m) => m.defineCustomElement())
331
+ .catch((error) => {
332
+ // Let the next instance try again; the wizard reports the failure to the
333
+ // customer if checkout is reached without a definition.
334
+ pending = undefined;
335
+ console.error('[trade-in] could not load the checkout component', error);
336
+ });
337
+ return pending;
338
+ }
339
+
340
+ /**
341
+ * Angular bindings for `<trade-in-wizard>` (standalone component).
342
+ *
343
+ * import { TradeInWizard } from '@revendo_ch/trade-in-components-angular';
344
+ * @Component({ imports: [TradeInWizard], template: `
345
+ * <trade-in-wizard apiBase="…" publishableKey="pk_…" flow="direct"
346
+ * (tradeInOrderComplete)="done($event)"></trade-in-wizard>` })
347
+ *
348
+ * `./generated/` is written by the Stencil Angular output target on every
349
+ * build of `@revendo_ch/trade-in-components` — do not edit it. This file only adds
350
+ * what the generator can't: defining the internal checkout element. Inputs,
351
+ * outputs and the element proxying are inherited from the generated class.
352
+ */
353
+ class TradeInWizard extends TradeInWizard$1 {
354
+ constructor() {
355
+ super(...arguments);
356
+ this.checkoutDefined = defineCheckoutInBackground();
357
+ }
358
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TradeInWizard, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
359
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TradeInWizard, isStandalone: true, selector: "trade-in-wizard", usesInheritance: true, ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
360
+ }
361
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TradeInWizard, decorators: [{
362
+ type: Component,
363
+ args: [{
364
+ selector: 'trade-in-wizard',
365
+ standalone: true,
366
+ changeDetection: ChangeDetectionStrategy.OnPush,
367
+ template: '<ng-content></ng-content>',
368
+ }]
369
+ }] });
370
+
371
+ /**
372
+ * Generated bundle index. Do not edit.
373
+ */
374
+
375
+ export { TradeInWizard };
376
+ //# sourceMappingURL=revendo_ch-trade-in-components-angular.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revendo_ch-trade-in-components-angular.mjs","sources":["../../src/generated/angular-component-lib/utils.ts","../../src/generated/proxies.ts","../../src/checkout.ts","../../src/public-api.ts","../../src/revendo_ch-trade-in-components-angular.ts"],"sourcesContent":["/* eslint-disable */\n/* tslint:disable */\nimport { inject, PLATFORM_ID } from '@angular/core';\nimport { fromEvent } from 'rxjs';\n\n/**\n * Server rendering options (the output target's `ssrPropModule`).\n */\ninterface SsrOptions {\n /** The component library's `ssrProp()`, which hands a value to Stencil's server render. */\n ssrProp: (value: any) => any;\n /** Inputs whose attribute isn't Stencil's dash-cased prop name. */\n attributes?: Record<string, string>;\n /** Inputs with no attribute: every value goes through `ssrProp()`. */\n refs?: string[];\n}\n\nconst serverInstances = new WeakSet<object>();\n\n/**\n * Records a wrapper created during server rendering. Call from the constructor.\n */\nexport const markServer = (instance: object) => {\n // what `isPlatformServer()` from `@angular/common` checks\n if (inject(PLATFORM_ID) === 'server') {\n serverInstances.add(instance);\n }\n};\n\n/**\n * Stencil's own prop name to attribute name conversion (`prop1` -> `prop-1`).\n */\nconst toDashCase = (str: string): string =>\n str\n .replace(/([A-Z0-9])/g, (match) => ` ${match[0]}`)\n .trim()\n .split(' ')\n .join('-')\n .toLowerCase();\n\n/**\n * Angular's server DOM never writes properties to the HTML, so on the server an input becomes an\n * attribute, which Stencil's `renderToString()` reads:\n * - a string or number as itself, and `true` as an empty attribute, so the component's first\n * render in the browser sees them too;\n * - `false`, anything that isn't a primitive, and any value for a prop with no attribute through\n * `ssrProp()`, which gives the server render the exact value and leaves no attribute behind.\n */\nconst setServerAttribute = (el: any, item: string, val: any, ssr: SsrOptions) => {\n const name = ssr.attributes?.[item] ?? toDashCase(item);\n if (val == null) {\n el.removeAttribute(name);\n } else if (\n ssr.refs?.includes(item) ||\n val === false ||\n (typeof val !== 'string' && typeof val !== 'number' && val !== true)\n ) {\n el.setAttribute(name, ssr.ssrProp(val));\n } else {\n el.setAttribute(name, val === true ? '' : String(val));\n }\n};\n\nexport const proxyInputs = (Cmp: any, inputs: string[], ssr?: SsrOptions) => {\n const Prototype = Cmp.prototype;\n inputs.forEach((item) => {\n Object.defineProperty(Prototype, item, {\n get() {\n return this.el[item];\n },\n set(val: any) {\n if (ssr && serverInstances.has(this)) {\n // kept on the element too, so reading the input back on the server works\n this.el[item] = val;\n setServerAttribute(this.el, item, val, ssr);\n return;\n }\n this.z.runOutsideAngular(() => (this.el[item] = val));\n },\n /**\n * In the event that proxyInputs is called\n * multiple times re-defining these inputs\n * will cause an error to be thrown. As a result\n * we set configurable: true to indicate these\n * properties can be changed.\n */\n configurable: true,\n });\n });\n};\n\nexport const proxyMethods = (Cmp: any, methods: string[]) => {\n const Prototype = Cmp.prototype;\n methods.forEach((methodName) => {\n Prototype[methodName] = function () {\n const args = arguments;\n return this.z.runOutsideAngular(() => this.el[methodName].apply(this.el, args));\n };\n });\n};\n\nexport const proxyOutputs = (instance: any, el: any, events: string[]) => {\n events.forEach((eventName) => (instance[eventName] = fromEvent(el, eventName)));\n};\n\nexport const defineCustomElement = (tagName: string, customElement: any) => {\n if (customElement !== undefined && typeof customElements !== 'undefined' && !customElements.get(tagName)) {\n customElements.define(tagName, customElement);\n }\n};\n\n// tslint:disable-next-line: only-arrow-functions\nexport function ProxyCmp(opts: { defineCustomElementFn?: () => void; inputs?: any; methods?: any; ssr?: SsrOptions }) {\n const decorator = function (cls: any) {\n const { defineCustomElementFn, inputs, methods, ssr } = opts;\n\n if (defineCustomElementFn !== undefined) {\n defineCustomElementFn();\n }\n\n if (inputs) {\n proxyInputs(cls, inputs, ssr);\n }\n if (methods) {\n proxyMethods(cls, methods);\n }\n return cls;\n };\n return decorator;\n}\n","/* tslint:disable */\n/* auto-generated angular directive proxies */\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, Output, NgZone } from '@angular/core';\n\nimport { ProxyCmp } from './angular-component-lib/utils';\n\nimport type { Components } from '@revendo_ch/trade-in-components/dist/components';\n\nimport { defineCustomElement as defineTradeInWizard } from '@revendo_ch/trade-in-components/dist/components/trade-in-wizard.js';\n@ProxyCmp({\n defineCustomElementFn: defineTradeInWizard,\n inputs: ['apiBase', 'businessFields', 'checkoutAssetUrl', 'custCity', 'custCountry', 'custEmail', 'custFirstName', 'custLastName', 'custPhone', 'custStreet', 'custZip', 'dummyVariantId', 'embedSource', 'facetTree', 'flow', 'locale', 'marketingOptins', 'presentation', 'proxyBase', 'publishableKey', 'reviewCount', 'reviewRating', 'showIntro', 'skipToQuoteOn', 'startCategory', 'voucherBonus', 'voucherHint']\n})\n@Component({\n selector: 'trade-in-wizard',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content></ng-content>',\n // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property\n inputs: ['apiBase', 'businessFields', 'checkoutAssetUrl', 'custCity', 'custCountry', 'custEmail', 'custFirstName', 'custLastName', 'custPhone', 'custStreet', 'custZip', 'dummyVariantId', 'embedSource', 'facetTree', 'flow', 'locale', 'marketingOptins', 'presentation', 'proxyBase', 'publishableKey', 'reviewCount', 'reviewRating', 'showIntro', 'skipToQuoteOn', 'startCategory', 'voucherBonus', 'voucherHint'],\n outputs: ['tradeInDeviceSelected', 'tradeInAnalytics', 'tradeInError', 'tradeInOrderComplete'],\n})\nexport class TradeInWizard {\n protected el: HTMLTradeInWizardElement;\n /**\n * Absolute API base for cross-origin partners — Revendo's partner API,\n`https://api.revendo.ch/public/v1` (staging: `https://api-stage.revendo.dev/public/v1`).\nTakes precedence over `proxyBase`. See `EMBEDDING.md`.\n */\n set apiBase(_: Components.TradeInWizard['apiBase']) {};\n /**\n * Numeric variant ID of the $0 placeholder product (required for `instant`).\n */\n set dummyVariantId(_: Components.TradeInWizard['dummyVariantId']) {};\n /**\n * Fetch the whole picker tree once and walk it locally (no request per pick).\nSet `false` to force the stepwise `/facets` path.\n\nLeft on by default: a backend without `/facets/tree` (it is not on prod\nyet) makes the first fetch fail, and the wizard falls back to stepwise for\nthe rest of the session on its own — so this needs no per-environment flip. @default true\n */\n set facetTree(_: Components.TradeInWizard['facetTree']) {};\n /**\n * Checkout flow. `direct` works anywhere; `instant` needs a Shopify host. @default 'direct'\n */\n set flow(_: Components.TradeInWizard['flow']) {};\n /**\n * Feature flag: show the business \"code for business\" fields at checkout\n(default off → the published component stays partner-neutral). @default false\n */\n set businessFields(_: Components.TradeInWizard['businessFields']) {};\n /**\n * Feature flag: show newsletter/SMS marketing opt-ins at checkout (default off). @default false\n */\n set marketingOptins(_: Components.TradeInWizard['marketingOptins']) {};\n /**\n * Voucher payout bonus in CHF, shown as a badge on the checkout's Gutschein\noption (display only — the payout math happens on the Revendo side).\n */\n set voucherBonus(_: Components.TradeInWizard['voucherBonus']) {};\n /**\n * Explainer line under the checkout's Gutschein option, shown only while\nGutschein is the selected payment type. Overrides the built-in\n`coVoucherHint` copy.\n */\n set voucherHint(_: Components.TradeInWizard['voucherHint']) {};\n /**\n * UI language (2-letter). Falls back to `de`. Read from the `lang` attribute. @default 'de'\n */\n set locale(_: Components.TradeInWizard['locale']) {};\n /**\n * How the wizard mounts. `inline` renders a self-contained card in the page;\n`modal` renders a launcher button that opens a centered modal / mobile\nbottom-sheet with a backdrop. @default 'inline'\n */\n set presentation(_: Components.TradeInWizard['presentation']) {};\n /**\n * Same-origin app-proxy base (Shopify hosts). Used when `apiBase` is unset. @default '/apps/trade-in'\n */\n set proxyBase(_: Components.TradeInWizard['proxyBase']) {};\n /**\n * Publishable, origin-locked API key issued by Revendo for `apiBase` (sent as\n`X-Publishable-Key`). NOT a secret: it only works from the partner's registered origins.\n */\n set publishableKey(_: Components.TradeInWizard['publishableKey']) {};\n /**\n * Customer-rating USP row: average score and number of reviews. Both come\nfrom the host, because the review platform is the host's, not ours — on\nrevendo.ch the theme block reads Judge.me's `judgeme.shop_reviews_rating`\n/ `judgeme.shop_reviews_count` shop metafields and passes them down.\n\nThe row is omitted entirely when `reviewCount` is missing or not a number.\nIt used to render a hardcoded \"4.8 / 11'000\", which was both stale and\nabove the real figure — and a published component must not advertise\nRevendo's reviews on a partner's page. No numbers, no claim.\n */\n set reviewRating(_: Components.TradeInWizard['reviewRating']) {};\n \n set reviewCount(_: Components.TradeInWizard['reviewCount']) {};\n /**\n * Deal-breaker answers: comma-separated `question:answer` pairs that end the\nappraisal on the spot and jump straight to the quote, skipping every\nquestion still ahead — e.g. `is_functional:no` (\"Does the device work\nproperly?\" → \"No\"; the backend already prices that as a manual appraisal,\nso the optical grade and battery answers behind it change nothing).\n\nEach side matches the stable `content_type` first and the raw id/value\nsecond, so `is_functional:no` keeps working when the backend re-authors the\nquestion under a new id — which it does (see `core/skip-rules.ts`). Left\nempty the wizard asks every question, as before.\n */\n set skipToQuoteOn(_: Components.TradeInWizard['skipToQuoteOn']) {};\n /**\n * Show the intro screen (eyebrow + headline + USP list, \"find price\" CTA)\nas the first thing a fresh session sees. Set `false` to open straight on\nthe picker — for hosts whose own page already carries that pitch, where\nthe intro is a second sales screen the customer has to click past.\n\nPurely a starting point, not a mode: everything that returns to the start\n(\"sell another device\", closing and reopening the modal) lands on\nwhichever screen this selects. @default true\n */\n set showIntro(_: Components.TradeInWizard['showIntro']) {};\n /**\n * Optionally open the picker inside one device family (e.g. \"iPhone\").\n\nA shortcut, not a filter: it only seeds the category the picker starts on\n(and the one a fresh pick returns to), so Back and the category chip still\nclear it and show the full family tiles. A deep link's `ti_cat` wins over\nit.\n */\n set startCategory(_: Components.TradeInWizard['startCategory']) {};\n /**\n * Where this widget sits, as a label for the quote's attribution — e.g.\n`landing-page`, `pdp-iphone`, `blog-sell-your-mac`. Travels with every\nprice call and is persisted by Revendo on the offer and the order behind\nit, so a placement can be measured against the orders it produced.\n\nFree-form and set by the host page (the theme block exposes it as a\nsetting); nothing in the flow keys off it. Left empty the field is simply\nomitted, as before. Ignored by the partner API, which attributes every\nquote to the partner server-side.\n */\n set embedSource(_: Components.TradeInWizard['embedSource']) {};\n \n set custFirstName(_: Components.TradeInWizard['custFirstName']) {};\n \n set custLastName(_: Components.TradeInWizard['custLastName']) {};\n \n set custEmail(_: Components.TradeInWizard['custEmail']) {};\n \n set custPhone(_: Components.TradeInWizard['custPhone']) {};\n \n set custStreet(_: Components.TradeInWizard['custStreet']) {};\n \n set custZip(_: Components.TradeInWizard['custZip']) {};\n \n set custCity(_: Components.TradeInWizard['custCity']) {};\n \n set custCountry(_: Components.TradeInWizard['custCountry']) {};\n /**\n * URL of the separately-built checkout bundle — needed with script tags\n(Shopify theme asset, partner page). Not with the npm `loader` or the\nReact/Angular packages, which define the checkout themselves.\n */\n set checkoutAssetUrl(_: Components.TradeInWizard['checkoutAssetUrl']) {};\n @Output() tradeInDeviceSelected = new EventEmitter<TradeInWizardCustomEvent<ITradeInWizardTradeInDeviceSelectedDetail>>();\n @Output() tradeInAnalytics = new EventEmitter<TradeInWizardCustomEvent<ITradeInWizardTradeInAnalyticsDetail>>();\n @Output() tradeInError = new EventEmitter<TradeInWizardCustomEvent<ITradeInWizardTradeInErrorDetail>>();\n @Output() tradeInOrderComplete = new EventEmitter<TradeInWizardCustomEvent<ITradeInWizardTradeInOrderCompleteDetail>>();\n constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) {\n c.detach();\n this.el = r.nativeElement;\n }\n}\n\n\nimport type { TradeInWizardCustomEvent } from '@revendo_ch/trade-in-components/dist/components';\nimport type { TradeInDeviceSelectedDetail as ITradeInWizardTradeInDeviceSelectedDetail } from '@revendo_ch/trade-in-components/dist/components';\nimport type { TradeInAnalyticsDetail as ITradeInWizardTradeInAnalyticsDetail } from '@revendo_ch/trade-in-components/dist/components';\nimport type { TradeInErrorDetail as ITradeInWizardTradeInErrorDetail } from '@revendo_ch/trade-in-components/dist/components';\nimport type { TradeInOrderCompleteDetail as ITradeInWizardTradeInOrderCompleteDetail } from '@revendo_ch/trade-in-components/dist/components';\n\nexport declare interface TradeInWizard extends Components.TradeInWizard {\n /**\n * Customer accepted a quote.\n */\n tradeInDeviceSelected: EventEmitter<TradeInWizardCustomEvent<ITradeInWizardTradeInDeviceSelectedDetail>>;\n /**\n * Privacy-safe funnel event for host analytics integrations.\n */\n tradeInAnalytics: EventEmitter<TradeInWizardCustomEvent<ITradeInWizardTradeInAnalyticsDetail>>;\n /**\n * A recoverable error surfaced to the host.\n */\n tradeInError: EventEmitter<TradeInWizardCustomEvent<ITradeInWizardTradeInErrorDetail>>;\n /**\n * Order finalized (host backend must still verify server-to-server).\n */\n tradeInOrderComplete: EventEmitter<TradeInWizardCustomEvent<ITradeInWizardTradeInOrderCompleteDetail>>;\n}\n\n\n","/**\n * `<trade-in-checkout>` is internal to the wizard, which mounts it when a\n * customer reaches checkout. With script tags the wizard fetches it from\n * `checkout-asset-url`; through this package it is defined here instead, from\n * a dynamic import, so the Angular CLI emits it as its own lazy chunk and a\n * visitor who never sells doesn't download it up front. The wizard waits for\n * the definition when it needs it (`loadCheckoutBundle`).\n *\n * Kept in sync with `packages/trade-in-components-react/src/checkout.ts`.\n */\nconst CHECKOUT_TAG = 'trade-in-checkout';\n\nlet pending: Promise<void> | undefined;\n\nexport function defineCheckoutInBackground(): Promise<void> {\n if (typeof window === 'undefined' || !window.customElements) return Promise.resolve();\n if (window.customElements.get(CHECKOUT_TAG)) return Promise.resolve();\n pending ??= import('@revendo_ch/trade-in-components/dist/components/trade-in-checkout.js')\n .then((m) => m.defineCustomElement())\n .catch((error: unknown) => {\n // Let the next instance try again; the wizard reports the failure to the\n // customer if checkout is reached without a definition.\n pending = undefined;\n console.error('[trade-in] could not load the checkout component', error);\n });\n return pending;\n}\n","/**\n * Angular bindings for `<trade-in-wizard>` (standalone component).\n *\n * import { TradeInWizard } from '@revendo_ch/trade-in-components-angular';\n * @Component({ imports: [TradeInWizard], template: `\n * <trade-in-wizard apiBase=\"…\" publishableKey=\"pk_…\" flow=\"direct\"\n * (tradeInOrderComplete)=\"done($event)\"></trade-in-wizard>` })\n *\n * `./generated/` is written by the Stencil Angular output target on every\n * build of `@revendo_ch/trade-in-components` — do not edit it. This file only adds\n * what the generator can't: defining the internal checkout element. Inputs,\n * outputs and the element proxying are inherited from the generated class.\n */\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { TradeInWizard as GeneratedTradeInWizard } from './generated/proxies';\nimport { defineCheckoutInBackground } from './checkout';\n\n@Component({\n selector: 'trade-in-wizard',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content></ng-content>',\n})\nexport class TradeInWizard extends GeneratedTradeInWizard {\n private readonly checkoutDefined = defineCheckoutInBackground();\n}\n\nexport type {\n TradeInAnalyticsDetail,\n TradeInDeviceSelectedDetail,\n TradeInErrorDetail,\n TradeInOrderCompleteDetail,\n TradeInWizardCustomEvent,\n} from '@revendo_ch/trade-in-components';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["TradeInWizard","defineTradeInWizard","GeneratedTradeInWizard"],"mappings":";;;;;;AAAA;AACA;AAgBA,MAAM,eAAe,GAAG,IAAI,OAAO,EAAU;AAE7C;;AAEG;AACI,MAAM,UAAU,GAAG,CAAC,QAAgB,KAAI;;AAE7C,IAAA,IAAI,MAAM,CAAC,WAAW,CAAC,KAAK,QAAQ,EAAE;AACpC,QAAA,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC9B,IAAA;AACH,CAAC;AAED;;AAEG;AACH,MAAM,UAAU,GAAG,CAAC,GAAW,KAC7B;AACG,KAAA,OAAO,CAAC,aAAa,EAAE,CAAC,KAAK,KAAK,CAAA,CAAA,EAAI,KAAK,CAAC,CAAC,CAAC,EAAE;AAChD,KAAA,IAAI;KACJ,KAAK,CAAC,GAAG;KACT,IAAI,CAAC,GAAG;AACR,KAAA,WAAW,EAAE;AAElB;;;;;;;AAOG;AACH,MAAM,kBAAkB,GAAG,CAAC,EAAO,EAAE,IAAY,EAAE,GAAQ,EAAE,GAAe,KAAI;AAC9E,IAAA,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC;IACvD,IAAI,GAAG,IAAI,IAAI,EAAE;AACf,QAAA,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC;AACzB,IAAA;AAAM,SAAA,IACL,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;AACxB,QAAA,GAAG,KAAK,KAAK;AACb,SAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,CAAC,EACpE;AACA,QAAA,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACxC,IAAA;AAAM,SAAA;QACL,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,GAAG,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;AACvD,IAAA;AACH,CAAC;AAEM,MAAM,WAAW,GAAG,CAAC,GAAQ,EAAE,MAAgB,EAAE,GAAgB,KAAI;AAC1E,IAAA,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS;AAC/B,IAAA,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACtB,QAAA,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,EAAE;YACrC,GAAG,GAAA;AACD,gBAAA,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;YACtB,CAAC;AACD,YAAA,GAAG,CAAC,GAAQ,EAAA;gBACV,IAAI,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;;AAEpC,oBAAA,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,GAAG;oBACnB,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC;oBAC3C;AACD,gBAAA;AACD,gBAAA,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;YACvD,CAAC;AACD;;;;;;AAMG;AACH,YAAA,YAAY,EAAE,IAAI;AACnB,SAAA,CAAC;AACJ,IAAA,CAAC,CAAC;AACJ,CAAC;AAEM,MAAM,YAAY,GAAG,CAAC,GAAQ,EAAE,OAAiB,KAAI;AAC1D,IAAA,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS;AAC/B,IAAA,OAAO,CAAC,OAAO,CAAC,CAAC,UAAU,KAAI;QAC7B,SAAS,CAAC,UAAU,CAAC,GAAG,YAAA;YACtB,MAAM,IAAI,GAAG,SAAS;YACtB,OAAO,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AACjF,QAAA,CAAC;AACH,IAAA,CAAC,CAAC;AACJ,CAAC;AAEM,MAAM,YAAY,GAAG,CAAC,QAAa,EAAE,EAAO,EAAE,MAAgB,KAAI;IACvE,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,MAAM,QAAQ,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC;AACjF,CAAC;AAEM,MAAM,mBAAmB,GAAG,CAAC,OAAe,EAAE,aAAkB,KAAI;AACzE,IAAA,IAAI,aAAa,KAAK,SAAS,IAAI,OAAO,cAAc,KAAK,WAAW,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AACxG,QAAA,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC;AAC9C,IAAA;AACH,CAAC;AAED;AACM,SAAU,QAAQ,CAAC,IAA2F,EAAA;IAClH,MAAM,SAAS,GAAG,UAAU,GAAQ,EAAA;QAClC,MAAM,EAAE,qBAAqB,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,IAAI;QAE5D,IAAI,qBAAqB,KAAK,SAAS,EAAE;AACvC,YAAA,qBAAqB,EAAE;AACxB,QAAA;AAED,QAAA,IAAI,MAAM,EAAE;AACV,YAAA,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC;AAC9B,QAAA;AACD,QAAA,IAAI,OAAO,EAAE;AACX,YAAA,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC;AAC3B,QAAA;AACD,QAAA,OAAO,GAAG;AACZ,IAAA,CAAC;AACD,IAAA,OAAO,SAAS;AAClB;;AC5GO,IAAMA,eAAa,GAAnB,MAAM,aAAa,CAAA;AAEtB;;;;AAIC;AACH,IAAA,IAAI,OAAO,CAAC,CAAsC,EAAA,EAAG;;AACnD;;AAEC;AACH,IAAA,IAAI,cAAc,CAAC,CAA6C,EAAA,EAAG;;AACjE;;;;;;;AAOC;AACH,IAAA,IAAI,SAAS,CAAC,CAAwC,EAAA,EAAG;;AACvD;;AAEC;AACH,IAAA,IAAI,IAAI,CAAC,CAAmC,EAAA,EAAG;;AAC7C;;;AAGC;AACH,IAAA,IAAI,cAAc,CAAC,CAA6C,EAAA,EAAG;;AACjE;;AAEC;AACH,IAAA,IAAI,eAAe,CAAC,CAA8C,EAAA,EAAG;;AACnE;;;AAGC;AACH,IAAA,IAAI,YAAY,CAAC,CAA2C,EAAA,EAAG;;AAC7D;;;;AAIC;AACH,IAAA,IAAI,WAAW,CAAC,CAA0C,EAAA,EAAG;;AAC3D;;AAEC;AACH,IAAA,IAAI,MAAM,CAAC,CAAqC,EAAA,EAAG;;AACjD;;;;AAIC;AACH,IAAA,IAAI,YAAY,CAAC,CAA2C,EAAA,EAAG;;AAC7D;;AAEC;AACH,IAAA,IAAI,SAAS,CAAC,CAAwC,EAAA,EAAG;;AACvD;;;AAGC;AACH,IAAA,IAAI,cAAc,CAAC,CAA6C,EAAA,EAAG;;AACjE;;;;;;;;;;AAUC;AACH,IAAA,IAAI,YAAY,CAAC,CAA2C,EAAA,EAAG;;AAE/D,IAAA,IAAI,WAAW,CAAC,CAA0C,EAAA,EAAG;;AAC3D;;;;;;;;;;;AAWC;AACH,IAAA,IAAI,aAAa,CAAC,CAA4C,EAAA,EAAG;;AAC/D;;;;;;;;;AASC;AACH,IAAA,IAAI,SAAS,CAAC,CAAwC,EAAA,EAAG;;AACvD;;;;;;;AAOC;AACH,IAAA,IAAI,aAAa,CAAC,CAA4C,EAAA,EAAG;;AAC/D;;;;;;;;;;AAUC;AACH,IAAA,IAAI,WAAW,CAAC,CAA0C,EAAA,EAAG;;AAE7D,IAAA,IAAI,aAAa,CAAC,CAA4C,EAAA,EAAG;;AAEjE,IAAA,IAAI,YAAY,CAAC,CAA2C,EAAA,EAAG;;AAE/D,IAAA,IAAI,SAAS,CAAC,CAAwC,EAAA,EAAG;;AAEzD,IAAA,IAAI,SAAS,CAAC,CAAwC,EAAA,EAAG;;AAEzD,IAAA,IAAI,UAAU,CAAC,CAAyC,EAAA,EAAG;;AAE3D,IAAA,IAAI,OAAO,CAAC,CAAsC,EAAA,EAAG;;AAErD,IAAA,IAAI,QAAQ,CAAC,CAAuC,EAAA,EAAG;;AAEvD,IAAA,IAAI,WAAW,CAAC,CAA0C,EAAA,EAAG;;AAC3D;;;;AAIC;AACH,IAAA,IAAI,gBAAgB,CAAC,CAA+C,EAAA,EAAG;;AAKvE,IAAA,WAAA,CAAY,CAAoB,EAAE,CAAa,EAAY,CAAS,EAAA;QAAT,IAAA,CAAA,CAAC,GAAD,CAAC;AAJlD,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,YAAY,EAAuE;AAC/G,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAkE;AACrG,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAA8D;AAC7F,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,YAAY,EAAsE;QAErH,CAAC,CAAC,MAAM,EAAE;AACV,QAAA,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,aAAa;IAC3B;+GAxJW,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,aAAa,09BALd,2BAA2B,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;AAK1BA,eAAa,GAAA,UAAA,CAAA;AAZzB,IAAA,QAAQ,CAAC;AACR,QAAA,qBAAqB,EAAEC,qBAAmB;QAC1C,MAAM,EAAE,CAAC,SAAS,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,cAAc,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa;KACvZ;AASY,CAAA,EAAAD,eAAa,CAyJzB;4FAzJYA,eAAa,EAAA,UAAA,EAAA,CAAA;kBARzB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;oBAC3B,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE,2BAA2B;;oBAErC,MAAM,EAAE,CAAC,SAAS,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,cAAc,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,CAAC;oBACvZ,OAAO,EAAE,CAAC,uBAAuB,EAAE,kBAAkB,EAAE,cAAc,EAAE,sBAAsB,CAAC;AAC/F,iBAAA;oIAkJW,qBAAqB,EAAA,CAAA;sBAA9B;gBACS,gBAAgB,EAAA,CAAA;sBAAzB;gBACS,YAAY,EAAA,CAAA;sBAArB;gBACS,oBAAoB,EAAA,CAAA;sBAA7B;;;ACzKH;;;;;;;;;AASG;AACH,MAAM,YAAY,GAAG,mBAAmB;AAExC,IAAI,OAAkC;SAEtB,0BAA0B,GAAA;IACxC,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,CAAC,MAAM,CAAC,cAAc;AAAE,QAAA,OAAO,OAAO,CAAC,OAAO,EAAE;AACrF,IAAA,IAAI,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC;AAAE,QAAA,OAAO,OAAO,CAAC,OAAO,EAAE;AACrE,IAAA,OAAO,KAAK,OAAO,sEAAsE;SACtF,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,EAAE;AACnC,SAAA,KAAK,CAAC,CAAC,KAAc,KAAI;;;QAGxB,OAAO,GAAG,SAAS;AACnB,QAAA,OAAO,CAAC,KAAK,CAAC,kDAAkD,EAAE,KAAK,CAAC;AAC1E,IAAA,CAAC,CAAC;AACJ,IAAA,OAAO,OAAO;AAChB;;AC1BA;;;;;;;;;;;;AAYG;AAWG,MAAO,aAAc,SAAQE,eAAsB,CAAA;AANzD,IAAA,WAAA,GAAA;;QAOmB,IAAA,CAAA,eAAe,GAAG,0BAA0B,EAAE;AAChE,IAAA;+GAFY,aAAa,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,aAAa,kGAFd,2BAA2B,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAE1B,aAAa,EAAA,UAAA,EAAA,CAAA;kBANzB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE,2BAA2B;AACtC,iBAAA;;;ACtBD;;AAEG;;;;"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Server rendering options (the output target's `ssrPropModule`).
3
+ */
4
+ interface SsrOptions {
5
+ /** The component library's `ssrProp()`, which hands a value to Stencil's server render. */
6
+ ssrProp: (value: any) => any;
7
+ /** Inputs whose attribute isn't Stencil's dash-cased prop name. */
8
+ attributes?: Record<string, string>;
9
+ /** Inputs with no attribute: every value goes through `ssrProp()`. */
10
+ refs?: string[];
11
+ }
12
+ /**
13
+ * Records a wrapper created during server rendering. Call from the constructor.
14
+ */
15
+ export declare const markServer: (instance: object) => void;
16
+ export declare const proxyInputs: (Cmp: any, inputs: string[], ssr?: SsrOptions) => void;
17
+ export declare const proxyMethods: (Cmp: any, methods: string[]) => void;
18
+ export declare const proxyOutputs: (instance: any, el: any, events: string[]) => void;
19
+ export declare const defineCustomElement: (tagName: string, customElement: any) => void;
20
+ export declare function ProxyCmp(opts: {
21
+ defineCustomElementFn?: () => void;
22
+ inputs?: any;
23
+ methods?: any;
24
+ ssr?: SsrOptions;
25
+ }): (cls: any) => any;
26
+ export {};
@@ -0,0 +1,171 @@
1
+ import { ChangeDetectorRef, ElementRef, EventEmitter, NgZone } from '@angular/core';
2
+ import type { Components } from '@revendo_ch/trade-in-components/dist/components';
3
+ import type { TradeInWizardCustomEvent } from '@revendo_ch/trade-in-components/dist/components';
4
+ import type { TradeInDeviceSelectedDetail as ITradeInWizardTradeInDeviceSelectedDetail } from '@revendo_ch/trade-in-components/dist/components';
5
+ import type { TradeInAnalyticsDetail as ITradeInWizardTradeInAnalyticsDetail } from '@revendo_ch/trade-in-components/dist/components';
6
+ import type { TradeInErrorDetail as ITradeInWizardTradeInErrorDetail } from '@revendo_ch/trade-in-components/dist/components';
7
+ import type { TradeInOrderCompleteDetail as ITradeInWizardTradeInOrderCompleteDetail } from '@revendo_ch/trade-in-components/dist/components';
8
+ import * as i0 from "@angular/core";
9
+ export declare class TradeInWizard {
10
+ protected z: NgZone;
11
+ protected el: HTMLTradeInWizardElement;
12
+ /**
13
+ * Absolute API base for cross-origin partners — Revendo's partner API,
14
+ `https://api.revendo.ch/public/v1` (staging: `https://api-stage.revendo.dev/public/v1`).
15
+ Takes precedence over `proxyBase`. See `EMBEDDING.md`.
16
+ */
17
+ set apiBase(_: Components.TradeInWizard['apiBase']);
18
+ /**
19
+ * Numeric variant ID of the $0 placeholder product (required for `instant`).
20
+ */
21
+ set dummyVariantId(_: Components.TradeInWizard['dummyVariantId']);
22
+ /**
23
+ * Fetch the whole picker tree once and walk it locally (no request per pick).
24
+ Set `false` to force the stepwise `/facets` path.
25
+
26
+ Left on by default: a backend without `/facets/tree` (it is not on prod
27
+ yet) makes the first fetch fail, and the wizard falls back to stepwise for
28
+ the rest of the session on its own — so this needs no per-environment flip. @default true
29
+ */
30
+ set facetTree(_: Components.TradeInWizard['facetTree']);
31
+ /**
32
+ * Checkout flow. `direct` works anywhere; `instant` needs a Shopify host. @default 'direct'
33
+ */
34
+ set flow(_: Components.TradeInWizard['flow']);
35
+ /**
36
+ * Feature flag: show the business "code for business" fields at checkout
37
+ (default off → the published component stays partner-neutral). @default false
38
+ */
39
+ set businessFields(_: Components.TradeInWizard['businessFields']);
40
+ /**
41
+ * Feature flag: show newsletter/SMS marketing opt-ins at checkout (default off). @default false
42
+ */
43
+ set marketingOptins(_: Components.TradeInWizard['marketingOptins']);
44
+ /**
45
+ * Voucher payout bonus in CHF, shown as a badge on the checkout's Gutschein
46
+ option (display only — the payout math happens on the Revendo side).
47
+ */
48
+ set voucherBonus(_: Components.TradeInWizard['voucherBonus']);
49
+ /**
50
+ * Explainer line under the checkout's Gutschein option, shown only while
51
+ Gutschein is the selected payment type. Overrides the built-in
52
+ `coVoucherHint` copy.
53
+ */
54
+ set voucherHint(_: Components.TradeInWizard['voucherHint']);
55
+ /**
56
+ * UI language (2-letter). Falls back to `de`. Read from the `lang` attribute. @default 'de'
57
+ */
58
+ set locale(_: Components.TradeInWizard['locale']);
59
+ /**
60
+ * How the wizard mounts. `inline` renders a self-contained card in the page;
61
+ `modal` renders a launcher button that opens a centered modal / mobile
62
+ bottom-sheet with a backdrop. @default 'inline'
63
+ */
64
+ set presentation(_: Components.TradeInWizard['presentation']);
65
+ /**
66
+ * Same-origin app-proxy base (Shopify hosts). Used when `apiBase` is unset. @default '/apps/trade-in'
67
+ */
68
+ set proxyBase(_: Components.TradeInWizard['proxyBase']);
69
+ /**
70
+ * Publishable, origin-locked API key issued by Revendo for `apiBase` (sent as
71
+ `X-Publishable-Key`). NOT a secret: it only works from the partner's registered origins.
72
+ */
73
+ set publishableKey(_: Components.TradeInWizard['publishableKey']);
74
+ /**
75
+ * Customer-rating USP row: average score and number of reviews. Both come
76
+ from the host, because the review platform is the host's, not ours — on
77
+ revendo.ch the theme block reads Judge.me's `judgeme.shop_reviews_rating`
78
+ / `judgeme.shop_reviews_count` shop metafields and passes them down.
79
+
80
+ The row is omitted entirely when `reviewCount` is missing or not a number.
81
+ It used to render a hardcoded "4.8 / 11'000", which was both stale and
82
+ above the real figure — and a published component must not advertise
83
+ Revendo's reviews on a partner's page. No numbers, no claim.
84
+ */
85
+ set reviewRating(_: Components.TradeInWizard['reviewRating']);
86
+ set reviewCount(_: Components.TradeInWizard['reviewCount']);
87
+ /**
88
+ * Deal-breaker answers: comma-separated `question:answer` pairs that end the
89
+ appraisal on the spot and jump straight to the quote, skipping every
90
+ question still ahead — e.g. `is_functional:no` ("Does the device work
91
+ properly?" → "No"; the backend already prices that as a manual appraisal,
92
+ so the optical grade and battery answers behind it change nothing).
93
+
94
+ Each side matches the stable `content_type` first and the raw id/value
95
+ second, so `is_functional:no` keeps working when the backend re-authors the
96
+ question under a new id — which it does (see `core/skip-rules.ts`). Left
97
+ empty the wizard asks every question, as before.
98
+ */
99
+ set skipToQuoteOn(_: Components.TradeInWizard['skipToQuoteOn']);
100
+ /**
101
+ * Show the intro screen (eyebrow + headline + USP list, "find price" CTA)
102
+ as the first thing a fresh session sees. Set `false` to open straight on
103
+ the picker — for hosts whose own page already carries that pitch, where
104
+ the intro is a second sales screen the customer has to click past.
105
+
106
+ Purely a starting point, not a mode: everything that returns to the start
107
+ ("sell another device", closing and reopening the modal) lands on
108
+ whichever screen this selects. @default true
109
+ */
110
+ set showIntro(_: Components.TradeInWizard['showIntro']);
111
+ /**
112
+ * Optionally open the picker inside one device family (e.g. "iPhone").
113
+
114
+ A shortcut, not a filter: it only seeds the category the picker starts on
115
+ (and the one a fresh pick returns to), so Back and the category chip still
116
+ clear it and show the full family tiles. A deep link's `ti_cat` wins over
117
+ it.
118
+ */
119
+ set startCategory(_: Components.TradeInWizard['startCategory']);
120
+ /**
121
+ * Where this widget sits, as a label for the quote's attribution — e.g.
122
+ `landing-page`, `pdp-iphone`, `blog-sell-your-mac`. Travels with every
123
+ price call and is persisted by Revendo on the offer and the order behind
124
+ it, so a placement can be measured against the orders it produced.
125
+
126
+ Free-form and set by the host page (the theme block exposes it as a
127
+ setting); nothing in the flow keys off it. Left empty the field is simply
128
+ omitted, as before. Ignored by the partner API, which attributes every
129
+ quote to the partner server-side.
130
+ */
131
+ set embedSource(_: Components.TradeInWizard['embedSource']);
132
+ set custFirstName(_: Components.TradeInWizard['custFirstName']);
133
+ set custLastName(_: Components.TradeInWizard['custLastName']);
134
+ set custEmail(_: Components.TradeInWizard['custEmail']);
135
+ set custPhone(_: Components.TradeInWizard['custPhone']);
136
+ set custStreet(_: Components.TradeInWizard['custStreet']);
137
+ set custZip(_: Components.TradeInWizard['custZip']);
138
+ set custCity(_: Components.TradeInWizard['custCity']);
139
+ set custCountry(_: Components.TradeInWizard['custCountry']);
140
+ /**
141
+ * URL of the separately-built checkout bundle — needed with script tags
142
+ (Shopify theme asset, partner page). Not with the npm `loader` or the
143
+ React/Angular packages, which define the checkout themselves.
144
+ */
145
+ set checkoutAssetUrl(_: Components.TradeInWizard['checkoutAssetUrl']);
146
+ tradeInDeviceSelected: EventEmitter<TradeInWizardCustomEvent<ITradeInWizardTradeInDeviceSelectedDetail>>;
147
+ tradeInAnalytics: EventEmitter<TradeInWizardCustomEvent<ITradeInWizardTradeInAnalyticsDetail>>;
148
+ tradeInError: EventEmitter<TradeInWizardCustomEvent<ITradeInWizardTradeInErrorDetail>>;
149
+ tradeInOrderComplete: EventEmitter<TradeInWizardCustomEvent<ITradeInWizardTradeInOrderCompleteDetail>>;
150
+ constructor(c: ChangeDetectorRef, r: ElementRef, z: NgZone);
151
+ static ɵfac: i0.ɵɵFactoryDeclaration<TradeInWizard, never>;
152
+ static ɵcmp: i0.ɵɵComponentDeclaration<TradeInWizard, "trade-in-wizard", never, { "apiBase": { "alias": "apiBase"; "required": false; }; "businessFields": { "alias": "businessFields"; "required": false; }; "checkoutAssetUrl": { "alias": "checkoutAssetUrl"; "required": false; }; "custCity": { "alias": "custCity"; "required": false; }; "custCountry": { "alias": "custCountry"; "required": false; }; "custEmail": { "alias": "custEmail"; "required": false; }; "custFirstName": { "alias": "custFirstName"; "required": false; }; "custLastName": { "alias": "custLastName"; "required": false; }; "custPhone": { "alias": "custPhone"; "required": false; }; "custStreet": { "alias": "custStreet"; "required": false; }; "custZip": { "alias": "custZip"; "required": false; }; "dummyVariantId": { "alias": "dummyVariantId"; "required": false; }; "embedSource": { "alias": "embedSource"; "required": false; }; "facetTree": { "alias": "facetTree"; "required": false; }; "flow": { "alias": "flow"; "required": false; }; "locale": { "alias": "locale"; "required": false; }; "marketingOptins": { "alias": "marketingOptins"; "required": false; }; "presentation": { "alias": "presentation"; "required": false; }; "proxyBase": { "alias": "proxyBase"; "required": false; }; "publishableKey": { "alias": "publishableKey"; "required": false; }; "reviewCount": { "alias": "reviewCount"; "required": false; }; "reviewRating": { "alias": "reviewRating"; "required": false; }; "showIntro": { "alias": "showIntro"; "required": false; }; "skipToQuoteOn": { "alias": "skipToQuoteOn"; "required": false; }; "startCategory": { "alias": "startCategory"; "required": false; }; "voucherBonus": { "alias": "voucherBonus"; "required": false; }; "voucherHint": { "alias": "voucherHint"; "required": false; }; }, { "tradeInDeviceSelected": "tradeInDeviceSelected"; "tradeInAnalytics": "tradeInAnalytics"; "tradeInError": "tradeInError"; "tradeInOrderComplete": "tradeInOrderComplete"; }, never, ["*"], false, never>;
153
+ }
154
+ export declare interface TradeInWizard extends Components.TradeInWizard {
155
+ /**
156
+ * Customer accepted a quote.
157
+ */
158
+ tradeInDeviceSelected: EventEmitter<TradeInWizardCustomEvent<ITradeInWizardTradeInDeviceSelectedDetail>>;
159
+ /**
160
+ * Privacy-safe funnel event for host analytics integrations.
161
+ */
162
+ tradeInAnalytics: EventEmitter<TradeInWizardCustomEvent<ITradeInWizardTradeInAnalyticsDetail>>;
163
+ /**
164
+ * A recoverable error surfaced to the host.
165
+ */
166
+ tradeInError: EventEmitter<TradeInWizardCustomEvent<ITradeInWizardTradeInErrorDetail>>;
167
+ /**
168
+ * Order finalized (host backend must still verify server-to-server).
169
+ */
170
+ tradeInOrderComplete: EventEmitter<TradeInWizardCustomEvent<ITradeInWizardTradeInOrderCompleteDetail>>;
171
+ }
package/index.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="@revendo_ch/trade-in-components-angular" />
5
+ export * from './public-api';
package/package.json CHANGED
@@ -1,6 +1,36 @@
1
1
  {
2
2
  "name": "@revendo_ch/trade-in-components-angular",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "0.1.0-beta.3",
4
+ "description": "Angular bindings for the Revendo trade-in wizard (@revendo_ch/trade-in-components).",
5
+ "license": "SEE LICENSE IN LICENSE",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/revendo/instant-direct-trade-in.git",
9
+ "directory": "packages/trade-in-components-angular"
10
+ },
11
+ "dependencies": {
12
+ "@revendo_ch/trade-in-components": "0.1.0-beta.3",
13
+ "tslib": "^2.3.0"
14
+ },
15
+ "peerDependencies": {
16
+ "@angular/core": ">=17.0.0",
17
+ "rxjs": "^7.4.0"
18
+ },
19
+ "publishConfig": {
20
+ "access": "public"
21
+ },
22
+ "module": "fesm2022/revendo_ch-trade-in-components-angular.mjs",
23
+ "typings": "index.d.ts",
24
+ "exports": {
25
+ "./package.json": {
26
+ "default": "./package.json"
27
+ },
28
+ ".": {
29
+ "types": "./index.d.ts",
30
+ "esm2022": "./esm2022/revendo_ch-trade-in-components-angular.mjs",
31
+ "esm": "./esm2022/revendo_ch-trade-in-components-angular.mjs",
32
+ "default": "./fesm2022/revendo_ch-trade-in-components-angular.mjs"
33
+ }
34
+ },
35
+ "sideEffects": false
6
36
  }
@@ -0,0 +1,8 @@
1
+ import { TradeInWizard as GeneratedTradeInWizard } from './generated/proxies';
2
+ import * as i0 from "@angular/core";
3
+ export declare class TradeInWizard extends GeneratedTradeInWizard {
4
+ private readonly checkoutDefined;
5
+ static ɵfac: i0.ɵɵFactoryDeclaration<TradeInWizard, never>;
6
+ static ɵcmp: i0.ɵɵComponentDeclaration<TradeInWizard, "trade-in-wizard", never, {}, {}, never, ["*"], true, never>;
7
+ }
8
+ export type { TradeInAnalyticsDetail, TradeInDeviceSelectedDetail, TradeInErrorDetail, TradeInOrderCompleteDetail, TradeInWizardCustomEvent, } from '@revendo_ch/trade-in-components';