@isaiahiroko/tilmart-ngx-apps-buyer 0.2.4 → 0.2.5
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/fesm2022/{isaiahiroko-tilmart-ngx-apps-buyer-account.module-BTRypX8P.mjs → isaiahiroko-tilmart-ngx-apps-buyer-account.module-CLVC0SX-.mjs} +8 -5
- package/fesm2022/isaiahiroko-tilmart-ngx-apps-buyer-account.module-CLVC0SX-.mjs.map +1 -0
- package/fesm2022/isaiahiroko-tilmart-ngx-apps-buyer.mjs +2 -2
- package/package.json +1 -1
- package/fesm2022/isaiahiroko-tilmart-ngx-apps-buyer-account.module-BTRypX8P.mjs.map +0 -1
|
@@ -102,11 +102,11 @@ class AccountComponent extends BaseDirective {
|
|
|
102
102
|
this.router.navigate(['/start']);
|
|
103
103
|
}
|
|
104
104
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: AccountComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
105
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.16", type: AccountComponent, isStandalone: false, selector: "x-account", usesInheritance: true, ngImport: i0, template: "<div class=\"x-acct\">\n @if (loading) {\n <div class=\"x-acct-note\">Loading your account\u2026</div>\n } @else if (!isLoggedIn) {\n <div class=\"x-acct-signin\">\n <h1>Your account</h1>\n <p>Sign in to see your orders, saved systems, addresses and settings.</p>\n <button type=\"button\" class=\"x-acct-btn\" (click)=\"signIn()\">Sign in</button>\n <p class=\"x-acct-muted\">\n No account yet? You can still\n <a routerLink=\"/track\">track an order</a> with your order number.\n </p>\n </div>\n } @else {\n <header class=\"x-acct-head\">\n <h1>{{ customerName }}</h1>\n </header>\n <div class=\"x-acct-body\">\n <nav class=\"x-acct-nav\">\n @for (item of nav; track item.path) {\n <a\n [routerLink]=\"item.path\"\n routerLinkActive=\"x-acct-nav-on\"\n class=\"x-acct-nav-link\"\n >\n <i class=\"fa-solid\" [class]=\"item.icon\"></i>\n <span>{{ item.label }}</span>\n </a>\n }\n </nav>\n <main class=\"x-acct-main\">\n <router-outlet></router-outlet>\n </main>\n </div>\n }\n</div>\n", styles: [".x-acct{max-width:1080px;margin:0 auto;padding:24px 20px 64px}.x-acct-note,.x-acct-muted{font-size:13.5px;color:var(--color-text-muted)}.x-acct-signin{max-width:420px;margin:48px auto;text-align:center}.x-acct-signin h1{font-size:26px;font-weight:800;color:var(--color-text);margin-bottom:10px}.x-acct-signin p{font-size:14.5px;color:var(--color-text-muted);margin-bottom:18px}.x-acct-signin a{color:var(--color-accent-hover);font-weight:700}.x-acct-head h1{font-size:28px;font-weight:800;color:var(--color-text);margin:4px 0 24px}.x-acct-body{display:grid;grid-template-columns:208px 1fr;gap:32px}.x-acct-nav{display:flex;flex-direction:column;gap:2px}.x-acct-nav-link{display:flex;align-items:center;gap:12px;padding:11px 14px;border-radius:var(--radius-lg);font-size:14px;font-weight:700;color:var(--color-text-muted);text-decoration:none;cursor:pointer}.x-acct-nav-link i{width:16px;text-align:center}.x-acct-nav-link:hover{background:var(--color-surface-2);color:var(--color-text)}.x-acct-nav-on{background:color-mix(in srgb,var(--color-accent) 12%,var(--color-surface));color:var(--color-accent-hover)}.x-acct-main{min-width:0}.x-acct-h2{font-size:19px;font-weight:800;color:var(--color-text);margin:0 0 4px}.x-acct-sub{font-size:13.5px;color:var(--color-text-muted);margin:0 0 20px}.x-acct-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-xl);padding:20px;margin-bottom:16px}.x-acct-row{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 0;border-bottom:1px solid var(--color-border-muted)}.x-acct-row:last-child{border-bottom:0}.x-acct-empty{font-size:13.5px;color:var(--color-text-muted);padding:8px 0}.x-acct-btn{display:inline-block;background:var(--color-accent);color:var(--color-accent-fg);border:0;border-radius:var(--radius-lg);padding:11px 18px;font-size:14px;font-weight:800;cursor:pointer;text-decoration:none}.x-acct-btn:hover:not(:disabled){background:var(--color-accent-hover)}.x-acct-btn:disabled{opacity:.55;cursor:default}.x-acct-btn-ghost{background:transparent;color:var(--color-accent-hover);border:1px solid var(--color-border);padding:9px 14px;border-radius:var(--radius-lg);font-size:13px;font-weight:700;cursor:pointer}.x-acct-btn-ghost:hover{border-color:var(--color-accent)}.x-acct-pill{display:inline-block;font-size:11.5px;font-weight:800;padding:3px 9px;border-radius:var(--radius-sm);background:var(--color-surface-2);color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.3px}.x-acct-pill-ok{background:color-mix(in srgb,var(--color-accent) 15%,var(--color-surface));color:var(--color-accent-hover)}.x-acct-pill-warn{background:color-mix(in srgb,var(--color-warn) 20%,var(--color-surface));color:color-mix(in srgb,var(--color-warn) 72%,black)}.x-acct-pill-bad{background:color-mix(in srgb,var(--color-danger) 15%,var(--color-surface));color:var(--color-danger)}.x-acct-field{margin-bottom:16px}.x-acct-field label{display:block;font-size:11.5px;font-weight:800;text-transform:uppercase;letter-spacing:.4px;color:var(--color-text-muted);margin-bottom:7px}.x-acct-field input,.x-acct-field select{width:100%;box-sizing:border-box;padding:12px 14px;border-radius:var(--radius-lg);border:1px solid var(--color-border);font:inherit;font-size:14.5px;background:var(--color-surface);color:var(--color-text);outline:none}.x-acct-err{font-size:12.5px;color:var(--color-danger);margin-bottom:12px}.x-acct-ok{font-size:12.5px;color:var(--color-accent-hover);margin-bottom:12px}.x-acct-checkline{display:flex;align-items:center;gap:10px;padding:9px 0;font-size:13.5px;color:var(--color-text)}.x-acct-checkline input{width:auto}@media(max-width:720px){.x-acct-body{grid-template-columns:1fr;gap:16px}.x-acct-nav{flex-direction:row;flex-wrap:wrap}}\n"], dependencies: [{ kind: "directive", type: i1.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
105
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.16", type: AccountComponent, isStandalone: false, selector: "x-account", usesInheritance: true, ngImport: i0, template: "<div class=\"x-acct\">\n @if (loading) {\n <div class=\"x-acct-note\">Loading your account\u2026</div>\n } @else if (!isLoggedIn) {\n <div class=\"x-acct-signin\">\n <h1>Your account</h1>\n <p>Sign in to see your orders, saved systems, addresses and settings.</p>\n <button type=\"button\" class=\"x-acct-btn\" (click)=\"signIn()\">Sign in</button>\n <p class=\"x-acct-muted\">\n No account yet? You can still\n <a routerLink=\"/track\">track an order</a> with your order number.\n </p>\n </div>\n } @else {\n <header class=\"x-acct-head\">\n <h1>{{ customerName }}</h1>\n </header>\n <div class=\"x-acct-body\">\n <nav class=\"x-acct-nav\">\n @for (item of nav; track item.path) {\n <a\n [routerLink]=\"item.path\"\n routerLinkActive=\"x-acct-nav-on\"\n class=\"x-acct-nav-link\"\n >\n <i class=\"fa-solid\" [class]=\"item.icon\"></i>\n <span>{{ item.label }}</span>\n </a>\n }\n </nav>\n <main class=\"x-acct-main\">\n <router-outlet></router-outlet>\n </main>\n </div>\n }\n</div>\n", styles: [".x-acct{max-width:1080px;margin:0 auto;padding:24px 20px 64px}.x-acct-note,.x-acct-muted{font-size:13.5px;color:var(--color-text-muted)}.x-acct-signin{max-width:420px;margin:48px auto;text-align:center}.x-acct-signin h1{font-size:26px;font-weight:800;color:var(--color-text);margin-bottom:10px}.x-acct-signin p{font-size:14.5px;color:var(--color-text-muted);margin-bottom:18px}.x-acct-signin a{color:var(--color-accent-hover);font-weight:700}.x-acct-head h1{font-size:28px;font-weight:800;color:var(--color-text);margin:4px 0 24px}.x-acct-body{display:grid;grid-template-columns:208px 1fr;gap:32px}.x-acct-nav{display:flex;flex-direction:column;gap:2px}.x-acct-nav-link{display:flex;align-items:center;gap:12px;padding:11px 14px;border-radius:var(--radius-lg);font-size:14px;font-weight:700;color:var(--color-text-muted);text-decoration:none;cursor:pointer}.x-acct-nav-link i{width:16px;text-align:center}.x-acct-nav-link:hover{background:var(--color-surface-2);color:var(--color-text)}.x-acct-nav-on{background:color-mix(in srgb,var(--color-accent) 12%,var(--color-surface));color:var(--color-accent-hover)}.x-acct-main{min-width:0}.x-acct-h2{font-size:19px;font-weight:800;color:var(--color-text);margin:0 0 4px}.x-acct-sub{font-size:13.5px;color:var(--color-text-muted);margin:0 0 20px}.x-acct-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-xl);padding:20px;margin-bottom:16px}.x-acct-row{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 0;border-bottom:1px solid var(--color-border-muted)}.x-acct-row:last-child{border-bottom:0}.x-acct-empty{font-size:13.5px;color:var(--color-text-muted);padding:8px 0}.x-acct-btn{display:inline-block;background:var(--color-accent);color:var(--color-accent-fg);border:0;border-radius:var(--radius-lg);padding:11px 18px;font-size:14px;font-weight:800;cursor:pointer;text-decoration:none}.x-acct-btn:hover:not(:disabled){background:var(--color-accent-hover)}.x-acct-btn:disabled{opacity:.55;cursor:default}.x-acct-btn-ghost{background:transparent;color:var(--color-accent-hover);border:1px solid var(--color-border);padding:9px 14px;border-radius:var(--radius-lg);font-size:13px;font-weight:700;cursor:pointer}.x-acct-btn-ghost:hover{border-color:var(--color-accent)}.x-acct-pill{display:inline-block;font-size:11.5px;font-weight:800;padding:3px 9px;border-radius:var(--radius-sm);background:var(--color-surface-2);color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.3px}.x-acct-pill-ok{background:color-mix(in srgb,var(--color-accent) 15%,var(--color-surface));color:var(--color-accent-hover)}.x-acct-pill-warn{background:color-mix(in srgb,var(--color-warn) 20%,var(--color-surface));color:color-mix(in srgb,var(--color-warn) 72%,black)}.x-acct-pill-bad{background:color-mix(in srgb,var(--color-danger) 15%,var(--color-surface));color:var(--color-danger)}.x-acct-field{margin-bottom:16px}.x-acct-field label{display:block;font-size:11.5px;font-weight:800;text-transform:uppercase;letter-spacing:.4px;color:var(--color-text-muted);margin-bottom:7px}.x-acct-field input,.x-acct-field select{width:100%;box-sizing:border-box;padding:12px 14px;border-radius:var(--radius-lg);border:1px solid var(--color-border);font:inherit;font-size:14.5px;background:var(--color-surface);color:var(--color-text);outline:none}.x-acct-field .x-acct-pwd{position:relative;display:flex}.x-acct-field .x-acct-pwd input{padding-right:42px}.x-acct-field .x-acct-pwd-toggle{position:absolute;right:6px;top:50%;transform:translateY(-50%);border:none;background:transparent;color:var(--color-text-muted);padding:6px 8px;cursor:pointer}.x-acct-field .x-acct-pwd-toggle:hover{color:var(--color-text)}.x-acct-err{font-size:12.5px;color:var(--color-danger);margin-bottom:12px}.x-acct-ok{font-size:12.5px;color:var(--color-accent-hover);margin-bottom:12px}.x-acct-checkline{display:flex;align-items:center;gap:10px;padding:9px 0;font-size:13.5px;color:var(--color-text)}.x-acct-checkline input{width:auto}@media(max-width:720px){.x-acct-body{grid-template-columns:1fr;gap:16px}.x-acct-nav{flex-direction:row;flex-wrap:wrap}}\n"], dependencies: [{ kind: "directive", type: i1.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
106
106
|
}
|
|
107
107
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: AccountComponent, decorators: [{
|
|
108
108
|
type: Component,
|
|
109
|
-
args: [{ standalone: false, selector: 'x-account', encapsulation: ViewEncapsulation.None, template: "<div class=\"x-acct\">\n @if (loading) {\n <div class=\"x-acct-note\">Loading your account\u2026</div>\n } @else if (!isLoggedIn) {\n <div class=\"x-acct-signin\">\n <h1>Your account</h1>\n <p>Sign in to see your orders, saved systems, addresses and settings.</p>\n <button type=\"button\" class=\"x-acct-btn\" (click)=\"signIn()\">Sign in</button>\n <p class=\"x-acct-muted\">\n No account yet? You can still\n <a routerLink=\"/track\">track an order</a> with your order number.\n </p>\n </div>\n } @else {\n <header class=\"x-acct-head\">\n <h1>{{ customerName }}</h1>\n </header>\n <div class=\"x-acct-body\">\n <nav class=\"x-acct-nav\">\n @for (item of nav; track item.path) {\n <a\n [routerLink]=\"item.path\"\n routerLinkActive=\"x-acct-nav-on\"\n class=\"x-acct-nav-link\"\n >\n <i class=\"fa-solid\" [class]=\"item.icon\"></i>\n <span>{{ item.label }}</span>\n </a>\n }\n </nav>\n <main class=\"x-acct-main\">\n <router-outlet></router-outlet>\n </main>\n </div>\n }\n</div>\n", styles: [".x-acct{max-width:1080px;margin:0 auto;padding:24px 20px 64px}.x-acct-note,.x-acct-muted{font-size:13.5px;color:var(--color-text-muted)}.x-acct-signin{max-width:420px;margin:48px auto;text-align:center}.x-acct-signin h1{font-size:26px;font-weight:800;color:var(--color-text);margin-bottom:10px}.x-acct-signin p{font-size:14.5px;color:var(--color-text-muted);margin-bottom:18px}.x-acct-signin a{color:var(--color-accent-hover);font-weight:700}.x-acct-head h1{font-size:28px;font-weight:800;color:var(--color-text);margin:4px 0 24px}.x-acct-body{display:grid;grid-template-columns:208px 1fr;gap:32px}.x-acct-nav{display:flex;flex-direction:column;gap:2px}.x-acct-nav-link{display:flex;align-items:center;gap:12px;padding:11px 14px;border-radius:var(--radius-lg);font-size:14px;font-weight:700;color:var(--color-text-muted);text-decoration:none;cursor:pointer}.x-acct-nav-link i{width:16px;text-align:center}.x-acct-nav-link:hover{background:var(--color-surface-2);color:var(--color-text)}.x-acct-nav-on{background:color-mix(in srgb,var(--color-accent) 12%,var(--color-surface));color:var(--color-accent-hover)}.x-acct-main{min-width:0}.x-acct-h2{font-size:19px;font-weight:800;color:var(--color-text);margin:0 0 4px}.x-acct-sub{font-size:13.5px;color:var(--color-text-muted);margin:0 0 20px}.x-acct-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-xl);padding:20px;margin-bottom:16px}.x-acct-row{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 0;border-bottom:1px solid var(--color-border-muted)}.x-acct-row:last-child{border-bottom:0}.x-acct-empty{font-size:13.5px;color:var(--color-text-muted);padding:8px 0}.x-acct-btn{display:inline-block;background:var(--color-accent);color:var(--color-accent-fg);border:0;border-radius:var(--radius-lg);padding:11px 18px;font-size:14px;font-weight:800;cursor:pointer;text-decoration:none}.x-acct-btn:hover:not(:disabled){background:var(--color-accent-hover)}.x-acct-btn:disabled{opacity:.55;cursor:default}.x-acct-btn-ghost{background:transparent;color:var(--color-accent-hover);border:1px solid var(--color-border);padding:9px 14px;border-radius:var(--radius-lg);font-size:13px;font-weight:700;cursor:pointer}.x-acct-btn-ghost:hover{border-color:var(--color-accent)}.x-acct-pill{display:inline-block;font-size:11.5px;font-weight:800;padding:3px 9px;border-radius:var(--radius-sm);background:var(--color-surface-2);color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.3px}.x-acct-pill-ok{background:color-mix(in srgb,var(--color-accent) 15%,var(--color-surface));color:var(--color-accent-hover)}.x-acct-pill-warn{background:color-mix(in srgb,var(--color-warn) 20%,var(--color-surface));color:color-mix(in srgb,var(--color-warn) 72%,black)}.x-acct-pill-bad{background:color-mix(in srgb,var(--color-danger) 15%,var(--color-surface));color:var(--color-danger)}.x-acct-field{margin-bottom:16px}.x-acct-field label{display:block;font-size:11.5px;font-weight:800;text-transform:uppercase;letter-spacing:.4px;color:var(--color-text-muted);margin-bottom:7px}.x-acct-field input,.x-acct-field select{width:100%;box-sizing:border-box;padding:12px 14px;border-radius:var(--radius-lg);border:1px solid var(--color-border);font:inherit;font-size:14.5px;background:var(--color-surface);color:var(--color-text);outline:none}.x-acct-err{font-size:12.5px;color:var(--color-danger);margin-bottom:12px}.x-acct-ok{font-size:12.5px;color:var(--color-accent-hover);margin-bottom:12px}.x-acct-checkline{display:flex;align-items:center;gap:10px;padding:9px 0;font-size:13.5px;color:var(--color-text)}.x-acct-checkline input{width:auto}@media(max-width:720px){.x-acct-body{grid-template-columns:1fr;gap:16px}.x-acct-nav{flex-direction:row;flex-wrap:wrap}}\n"] }]
|
|
109
|
+
args: [{ standalone: false, selector: 'x-account', encapsulation: ViewEncapsulation.None, template: "<div class=\"x-acct\">\n @if (loading) {\n <div class=\"x-acct-note\">Loading your account\u2026</div>\n } @else if (!isLoggedIn) {\n <div class=\"x-acct-signin\">\n <h1>Your account</h1>\n <p>Sign in to see your orders, saved systems, addresses and settings.</p>\n <button type=\"button\" class=\"x-acct-btn\" (click)=\"signIn()\">Sign in</button>\n <p class=\"x-acct-muted\">\n No account yet? You can still\n <a routerLink=\"/track\">track an order</a> with your order number.\n </p>\n </div>\n } @else {\n <header class=\"x-acct-head\">\n <h1>{{ customerName }}</h1>\n </header>\n <div class=\"x-acct-body\">\n <nav class=\"x-acct-nav\">\n @for (item of nav; track item.path) {\n <a\n [routerLink]=\"item.path\"\n routerLinkActive=\"x-acct-nav-on\"\n class=\"x-acct-nav-link\"\n >\n <i class=\"fa-solid\" [class]=\"item.icon\"></i>\n <span>{{ item.label }}</span>\n </a>\n }\n </nav>\n <main class=\"x-acct-main\">\n <router-outlet></router-outlet>\n </main>\n </div>\n }\n</div>\n", styles: [".x-acct{max-width:1080px;margin:0 auto;padding:24px 20px 64px}.x-acct-note,.x-acct-muted{font-size:13.5px;color:var(--color-text-muted)}.x-acct-signin{max-width:420px;margin:48px auto;text-align:center}.x-acct-signin h1{font-size:26px;font-weight:800;color:var(--color-text);margin-bottom:10px}.x-acct-signin p{font-size:14.5px;color:var(--color-text-muted);margin-bottom:18px}.x-acct-signin a{color:var(--color-accent-hover);font-weight:700}.x-acct-head h1{font-size:28px;font-weight:800;color:var(--color-text);margin:4px 0 24px}.x-acct-body{display:grid;grid-template-columns:208px 1fr;gap:32px}.x-acct-nav{display:flex;flex-direction:column;gap:2px}.x-acct-nav-link{display:flex;align-items:center;gap:12px;padding:11px 14px;border-radius:var(--radius-lg);font-size:14px;font-weight:700;color:var(--color-text-muted);text-decoration:none;cursor:pointer}.x-acct-nav-link i{width:16px;text-align:center}.x-acct-nav-link:hover{background:var(--color-surface-2);color:var(--color-text)}.x-acct-nav-on{background:color-mix(in srgb,var(--color-accent) 12%,var(--color-surface));color:var(--color-accent-hover)}.x-acct-main{min-width:0}.x-acct-h2{font-size:19px;font-weight:800;color:var(--color-text);margin:0 0 4px}.x-acct-sub{font-size:13.5px;color:var(--color-text-muted);margin:0 0 20px}.x-acct-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-xl);padding:20px;margin-bottom:16px}.x-acct-row{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 0;border-bottom:1px solid var(--color-border-muted)}.x-acct-row:last-child{border-bottom:0}.x-acct-empty{font-size:13.5px;color:var(--color-text-muted);padding:8px 0}.x-acct-btn{display:inline-block;background:var(--color-accent);color:var(--color-accent-fg);border:0;border-radius:var(--radius-lg);padding:11px 18px;font-size:14px;font-weight:800;cursor:pointer;text-decoration:none}.x-acct-btn:hover:not(:disabled){background:var(--color-accent-hover)}.x-acct-btn:disabled{opacity:.55;cursor:default}.x-acct-btn-ghost{background:transparent;color:var(--color-accent-hover);border:1px solid var(--color-border);padding:9px 14px;border-radius:var(--radius-lg);font-size:13px;font-weight:700;cursor:pointer}.x-acct-btn-ghost:hover{border-color:var(--color-accent)}.x-acct-pill{display:inline-block;font-size:11.5px;font-weight:800;padding:3px 9px;border-radius:var(--radius-sm);background:var(--color-surface-2);color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.3px}.x-acct-pill-ok{background:color-mix(in srgb,var(--color-accent) 15%,var(--color-surface));color:var(--color-accent-hover)}.x-acct-pill-warn{background:color-mix(in srgb,var(--color-warn) 20%,var(--color-surface));color:color-mix(in srgb,var(--color-warn) 72%,black)}.x-acct-pill-bad{background:color-mix(in srgb,var(--color-danger) 15%,var(--color-surface));color:var(--color-danger)}.x-acct-field{margin-bottom:16px}.x-acct-field label{display:block;font-size:11.5px;font-weight:800;text-transform:uppercase;letter-spacing:.4px;color:var(--color-text-muted);margin-bottom:7px}.x-acct-field input,.x-acct-field select{width:100%;box-sizing:border-box;padding:12px 14px;border-radius:var(--radius-lg);border:1px solid var(--color-border);font:inherit;font-size:14.5px;background:var(--color-surface);color:var(--color-text);outline:none}.x-acct-field .x-acct-pwd{position:relative;display:flex}.x-acct-field .x-acct-pwd input{padding-right:42px}.x-acct-field .x-acct-pwd-toggle{position:absolute;right:6px;top:50%;transform:translateY(-50%);border:none;background:transparent;color:var(--color-text-muted);padding:6px 8px;cursor:pointer}.x-acct-field .x-acct-pwd-toggle:hover{color:var(--color-text)}.x-acct-err{font-size:12.5px;color:var(--color-danger);margin-bottom:12px}.x-acct-ok{font-size:12.5px;color:var(--color-accent-hover);margin-bottom:12px}.x-acct-checkline{display:flex;align-items:center;gap:10px;padding:9px 0;font-size:13.5px;color:var(--color-text)}.x-acct-checkline input{width:auto}@media(max-width:720px){.x-acct-body{grid-template-columns:1fr;gap:16px}.x-acct-nav{flex-direction:row;flex-wrap:wrap}}\n"] }]
|
|
110
110
|
}] });
|
|
111
111
|
|
|
112
112
|
function blankForm() {
|
|
@@ -1101,6 +1101,9 @@ class AccountSettingsComponent extends BaseDirective {
|
|
|
1101
1101
|
this.currentSecret = '';
|
|
1102
1102
|
this.newSecret = '';
|
|
1103
1103
|
this.confirmNewSecret = '';
|
|
1104
|
+
this.showCurrentSecret = false;
|
|
1105
|
+
this.showNewSecret = false;
|
|
1106
|
+
this.showConfirmSecret = false;
|
|
1104
1107
|
this.changingPassword = false;
|
|
1105
1108
|
this.passwordError = '';
|
|
1106
1109
|
this.passwordDone = false;
|
|
@@ -1246,11 +1249,11 @@ class AccountSettingsComponent extends BaseDirective {
|
|
|
1246
1249
|
}
|
|
1247
1250
|
}
|
|
1248
1251
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: AccountSettingsComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
1249
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.16", type: AccountSettingsComponent, isStandalone: false, selector: "x-account-settings", usesInheritance: true, ngImport: i0, template: "<h2 class=\"x-acct-h2\">Settings</h2>\n<p class=\"x-acct-sub\">Profile, security, appearance and how we reach you.</p>\n\n<div class=\"x-acct-card\">\n <strong>Profile</strong>\n @if (loadingProfile) {\n <div class=\"x-acct-empty\">Loading\u2026</div>\n } @else {\n <div style=\"margin-top: 14px\">\n <div class=\"x-acct-field\">\n <label>Name</label>\n <input [value]=\"fullName\" disabled />\n </div>\n <div class=\"x-acct-field\">\n <label>Phone number</label>\n <input type=\"tel\" [(ngModel)]=\"phoneNumber\" placeholder=\"+234\u2026\" />\n </div>\n @if (profileError) {\n <div class=\"x-acct-err\">{{ profileError }}</div>\n }\n <button type=\"button\" class=\"x-acct-btn\" [disabled]=\"savingProfile\" (click)=\"saveProfile()\">\n {{ savingProfile ? 'Saving\u2026' : 'Save profile' }}\n </button>\n </div>\n }\n</div>\n\n<div class=\"x-acct-card\">\n <strong>Change password</strong>\n <div style=\"margin-top: 14px\">\n <div class=\"x-acct-field\">\n <label>Current password</label>\n <input type=\"password\" [(ngModel)]=\"currentSecret\" />\n </div>\n <div class=\"x-acct-field\">\n <label>New password</label>\n <input type=\"password\" [(ngModel)]=\"newSecret\" />\n </div>\n <div class=\"x-acct-field\">\n <label>Confirm new password</label>\n <input type=\"password\" [(ngModel)]=\"confirmNewSecret\" />\n </div>\n @if (passwordError) {\n <div class=\"x-acct-err\">{{ passwordError }}</div>\n }\n @if (passwordDone) {\n <div class=\"x-acct-ok\">Password changed. Signing you out\u2026</div>\n }\n <button\n type=\"button\"\n class=\"x-acct-btn\"\n [disabled]=\"!canChangePassword || changingPassword\"\n (click)=\"changePassword()\"\n >\n {{ changingPassword ? 'Saving\u2026' : 'Change password' }}\n </button>\n </div>\n</div>\n\n<div class=\"x-acct-card\">\n <strong>Appearance</strong>\n <div class=\"x-acct-field\" style=\"margin-top: 14px; max-width: 240px\">\n <label>Theme</label>\n <select aria-label=\"Theme\" [ngModel]=\"theme\" (ngModelChange)=\"setTheme($event)\">\n <option value=\"system\">Match my device</option>\n <option value=\"light\">Light</option>\n <option value=\"dark\">Dark</option>\n </select>\n </div>\n</div>\n\n<div class=\"x-acct-card\">\n <strong>Notifications</strong>\n @if (loadingPrefs) {\n <div class=\"x-acct-empty\">Loading\u2026</div>\n } @else {\n <p class=\"x-acct-sub\" style=\"margin: 8px 0 16px\">\n Order and payment updates are always sent. Everything else is up to you.\n </p>\n\n @for (cat of categories; track cat.key) {\n <div style=\"padding: 10px 0; border-bottom: 1px solid var(--color-border-muted)\">\n <div style=\"font-weight: 700; font-size: 13.5px; margin-bottom: 8px\">\n {{ cat.label }}\n @if (cat.locked) {\n <span class=\"x-acct-pill\" style=\"margin-left: 6px\">Always on</span>\n }\n </div>\n @if (cat.consent && !marketingConsent) {\n <label class=\"x-acct-checkline\">\n <input type=\"checkbox\" [(ngModel)]=\"marketingConsent\" />\n Opt in to offers and promotions\n </label>\n } @else {\n <div style=\"display: flex; gap: 16px; flex-wrap: wrap\">\n @for (ch of channels; track ch.key) {\n <label class=\"x-acct-checkline\">\n <input\n type=\"checkbox\"\n [disabled]=\"cat.locked || unsubscribedAll || (cat.consent && !marketingConsent)\"\n [checked]=\"channelOn(cat.key, ch.key)\"\n (change)=\"toggleChannel(cat.key, ch.key)\"\n />\n {{ ch.label }}\n </label>\n }\n </div>\n @if (cat.consent && marketingConsent) {\n <label class=\"x-acct-checkline\" style=\"margin-top: 4px\">\n <input type=\"checkbox\" [(ngModel)]=\"marketingConsent\" />\n Keep me opted in to offers\n </label>\n }\n }\n </div>\n }\n\n <div style=\"padding: 14px 0\">\n <label class=\"x-acct-checkline\">\n <input type=\"checkbox\" [(ngModel)]=\"quietHoursEnabled\" />\n Quiet hours \u2014 hold non-urgent messages overnight\n </label>\n @if (quietHoursEnabled) {\n <div style=\"display: flex; gap: 12px; margin-top: 8px\">\n <div class=\"x-acct-field\" style=\"margin: 0\">\n <label>From</label>\n <input type=\"time\" [(ngModel)]=\"quietHoursStart\" />\n </div>\n <div class=\"x-acct-field\" style=\"margin: 0\">\n <label>To</label>\n <input type=\"time\" [(ngModel)]=\"quietHoursEnd\" />\n </div>\n </div>\n }\n </div>\n\n <label class=\"x-acct-checkline\">\n <input type=\"checkbox\" [(ngModel)]=\"unsubscribedAll\" />\n Unsubscribe from everything except order & payment updates\n </label>\n\n @if (prefsError) {\n <div class=\"x-acct-err\" style=\"margin-top: 12px\">{{ prefsError }}</div>\n }\n <button\n type=\"button\"\n class=\"x-acct-btn\"\n style=\"margin-top: 14px\"\n [disabled]=\"savingPrefs\"\n (click)=\"savePrefs()\"\n >\n {{ savingPrefs ? 'Saving\u2026' : 'Save preferences' }}\n </button>\n }\n</div>\n", dependencies: [{ kind: "directive", type: i1$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1$1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
|
|
1252
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.16", type: AccountSettingsComponent, isStandalone: false, selector: "x-account-settings", usesInheritance: true, ngImport: i0, template: "<h2 class=\"x-acct-h2\">Settings</h2>\n<p class=\"x-acct-sub\">Profile, security, appearance and how we reach you.</p>\n\n<div class=\"x-acct-card\">\n <strong>Profile</strong>\n @if (loadingProfile) {\n <div class=\"x-acct-empty\">Loading\u2026</div>\n } @else {\n <div style=\"margin-top: 14px\">\n <div class=\"x-acct-field\">\n <label>Name</label>\n <input [value]=\"fullName\" disabled />\n </div>\n <div class=\"x-acct-field\">\n <label>Phone number</label>\n <input type=\"tel\" [(ngModel)]=\"phoneNumber\" placeholder=\"+234\u2026\" />\n </div>\n @if (profileError) {\n <div class=\"x-acct-err\">{{ profileError }}</div>\n }\n <button type=\"button\" class=\"x-acct-btn\" [disabled]=\"savingProfile\" (click)=\"saveProfile()\">\n {{ savingProfile ? 'Saving\u2026' : 'Save profile' }}\n </button>\n </div>\n }\n</div>\n\n<div class=\"x-acct-card\">\n <strong>Change password</strong>\n <div style=\"margin-top: 14px\">\n <div class=\"x-acct-field\">\n <label>Current password</label>\n <div class=\"x-acct-pwd\">\n <input [type]=\"showCurrentSecret ? 'text' : 'password'\" [(ngModel)]=\"currentSecret\" />\n <button\n type=\"button\"\n class=\"x-acct-pwd-toggle\"\n [title]=\"showCurrentSecret ? 'Hide password' : 'Show password'\"\n [attr.aria-label]=\"showCurrentSecret ? 'Hide password' : 'Show password'\"\n (click)=\"showCurrentSecret = !showCurrentSecret\"\n >\n <i class=\"fa-solid\" [ngClass]=\"showCurrentSecret ? 'fa-eye' : 'fa-eye-slash'\"></i>\n </button>\n </div>\n </div>\n <div class=\"x-acct-field\">\n <label>New password</label>\n <div class=\"x-acct-pwd\">\n <input [type]=\"showNewSecret ? 'text' : 'password'\" [(ngModel)]=\"newSecret\" />\n <button\n type=\"button\"\n class=\"x-acct-pwd-toggle\"\n [title]=\"showNewSecret ? 'Hide password' : 'Show password'\"\n [attr.aria-label]=\"showNewSecret ? 'Hide password' : 'Show password'\"\n (click)=\"showNewSecret = !showNewSecret\"\n >\n <i class=\"fa-solid\" [ngClass]=\"showNewSecret ? 'fa-eye' : 'fa-eye-slash'\"></i>\n </button>\n </div>\n </div>\n <div class=\"x-acct-field\">\n <label>Confirm new password</label>\n <div class=\"x-acct-pwd\">\n <input [type]=\"showConfirmSecret ? 'text' : 'password'\" [(ngModel)]=\"confirmNewSecret\" />\n <button\n type=\"button\"\n class=\"x-acct-pwd-toggle\"\n [title]=\"showConfirmSecret ? 'Hide password' : 'Show password'\"\n [attr.aria-label]=\"showConfirmSecret ? 'Hide password' : 'Show password'\"\n (click)=\"showConfirmSecret = !showConfirmSecret\"\n >\n <i class=\"fa-solid\" [ngClass]=\"showConfirmSecret ? 'fa-eye' : 'fa-eye-slash'\"></i>\n </button>\n </div>\n </div>\n @if (passwordError) {\n <div class=\"x-acct-err\">{{ passwordError }}</div>\n }\n @if (passwordDone) {\n <div class=\"x-acct-ok\">Password changed. Signing you out\u2026</div>\n }\n <button\n type=\"button\"\n class=\"x-acct-btn\"\n [disabled]=\"!canChangePassword || changingPassword\"\n (click)=\"changePassword()\"\n >\n {{ changingPassword ? 'Saving\u2026' : 'Change password' }}\n </button>\n </div>\n</div>\n\n<div class=\"x-acct-card\">\n <strong>Appearance</strong>\n <div class=\"x-acct-field\" style=\"margin-top: 14px; max-width: 240px\">\n <label>Theme</label>\n <select aria-label=\"Theme\" [ngModel]=\"theme\" (ngModelChange)=\"setTheme($event)\">\n <option value=\"system\">Match my device</option>\n <option value=\"light\">Light</option>\n <option value=\"dark\">Dark</option>\n </select>\n </div>\n</div>\n\n<div class=\"x-acct-card\">\n <strong>Notifications</strong>\n @if (loadingPrefs) {\n <div class=\"x-acct-empty\">Loading\u2026</div>\n } @else {\n <p class=\"x-acct-sub\" style=\"margin: 8px 0 16px\">\n Order and payment updates are always sent. Everything else is up to you.\n </p>\n\n @for (cat of categories; track cat.key) {\n <div style=\"padding: 10px 0; border-bottom: 1px solid var(--color-border-muted)\">\n <div style=\"font-weight: 700; font-size: 13.5px; margin-bottom: 8px\">\n {{ cat.label }}\n @if (cat.locked) {\n <span class=\"x-acct-pill\" style=\"margin-left: 6px\">Always on</span>\n }\n </div>\n @if (cat.consent && !marketingConsent) {\n <label class=\"x-acct-checkline\">\n <input type=\"checkbox\" [(ngModel)]=\"marketingConsent\" />\n Opt in to offers and promotions\n </label>\n } @else {\n <div style=\"display: flex; gap: 16px; flex-wrap: wrap\">\n @for (ch of channels; track ch.key) {\n <label class=\"x-acct-checkline\">\n <input\n type=\"checkbox\"\n [disabled]=\"cat.locked || unsubscribedAll || (cat.consent && !marketingConsent)\"\n [checked]=\"channelOn(cat.key, ch.key)\"\n (change)=\"toggleChannel(cat.key, ch.key)\"\n />\n {{ ch.label }}\n </label>\n }\n </div>\n @if (cat.consent && marketingConsent) {\n <label class=\"x-acct-checkline\" style=\"margin-top: 4px\">\n <input type=\"checkbox\" [(ngModel)]=\"marketingConsent\" />\n Keep me opted in to offers\n </label>\n }\n }\n </div>\n }\n\n <div style=\"padding: 14px 0\">\n <label class=\"x-acct-checkline\">\n <input type=\"checkbox\" [(ngModel)]=\"quietHoursEnabled\" />\n Quiet hours \u2014 hold non-urgent messages overnight\n </label>\n @if (quietHoursEnabled) {\n <div style=\"display: flex; gap: 12px; margin-top: 8px\">\n <div class=\"x-acct-field\" style=\"margin: 0\">\n <label>From</label>\n <input type=\"time\" [(ngModel)]=\"quietHoursStart\" />\n </div>\n <div class=\"x-acct-field\" style=\"margin: 0\">\n <label>To</label>\n <input type=\"time\" [(ngModel)]=\"quietHoursEnd\" />\n </div>\n </div>\n }\n </div>\n\n <label class=\"x-acct-checkline\">\n <input type=\"checkbox\" [(ngModel)]=\"unsubscribedAll\" />\n Unsubscribe from everything except order & payment updates\n </label>\n\n @if (prefsError) {\n <div class=\"x-acct-err\" style=\"margin-top: 12px\">{{ prefsError }}</div>\n }\n <button\n type=\"button\"\n class=\"x-acct-btn\"\n style=\"margin-top: 14px\"\n [disabled]=\"savingPrefs\"\n (click)=\"savePrefs()\"\n >\n {{ savingPrefs ? 'Saving\u2026' : 'Save preferences' }}\n </button>\n }\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1$1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
|
|
1250
1253
|
}
|
|
1251
1254
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: AccountSettingsComponent, decorators: [{
|
|
1252
1255
|
type: Component,
|
|
1253
|
-
args: [{ standalone: false, selector: 'x-account-settings', template: "<h2 class=\"x-acct-h2\">Settings</h2>\n<p class=\"x-acct-sub\">Profile, security, appearance and how we reach you.</p>\n\n<div class=\"x-acct-card\">\n <strong>Profile</strong>\n @if (loadingProfile) {\n <div class=\"x-acct-empty\">Loading\u2026</div>\n } @else {\n <div style=\"margin-top: 14px\">\n <div class=\"x-acct-field\">\n <label>Name</label>\n <input [value]=\"fullName\" disabled />\n </div>\n <div class=\"x-acct-field\">\n <label>Phone number</label>\n <input type=\"tel\" [(ngModel)]=\"phoneNumber\" placeholder=\"+234\u2026\" />\n </div>\n @if (profileError) {\n <div class=\"x-acct-err\">{{ profileError }}</div>\n }\n <button type=\"button\" class=\"x-acct-btn\" [disabled]=\"savingProfile\" (click)=\"saveProfile()\">\n {{ savingProfile ? 'Saving\u2026' : 'Save profile' }}\n </button>\n </div>\n }\n</div>\n\n<div class=\"x-acct-card\">\n <strong>Change password</strong>\n <div style=\"margin-top: 14px\">\n <div class=\"x-acct-field\">\n <label>Current password</label>\n <input type=\"password\" [(ngModel)]=\"currentSecret\" />\n </div>\n <div class=\"x-acct-field\">\n <label>New password</label>\n <input type=\"password\" [(ngModel)]=\"newSecret\" />\n </div>\n <div class=\"x-acct-field\">\n <label>Confirm new password</label>\n <input type=\"password\" [(ngModel)]=\"confirmNewSecret\" />\n </div>\n @if (passwordError) {\n <div class=\"x-acct-err\">{{ passwordError }}</div>\n }\n @if (passwordDone) {\n <div class=\"x-acct-ok\">Password changed. Signing you out\u2026</div>\n }\n <button\n type=\"button\"\n class=\"x-acct-btn\"\n [disabled]=\"!canChangePassword || changingPassword\"\n (click)=\"changePassword()\"\n >\n {{ changingPassword ? 'Saving\u2026' : 'Change password' }}\n </button>\n </div>\n</div>\n\n<div class=\"x-acct-card\">\n <strong>Appearance</strong>\n <div class=\"x-acct-field\" style=\"margin-top: 14px; max-width: 240px\">\n <label>Theme</label>\n <select aria-label=\"Theme\" [ngModel]=\"theme\" (ngModelChange)=\"setTheme($event)\">\n <option value=\"system\">Match my device</option>\n <option value=\"light\">Light</option>\n <option value=\"dark\">Dark</option>\n </select>\n </div>\n</div>\n\n<div class=\"x-acct-card\">\n <strong>Notifications</strong>\n @if (loadingPrefs) {\n <div class=\"x-acct-empty\">Loading\u2026</div>\n } @else {\n <p class=\"x-acct-sub\" style=\"margin: 8px 0 16px\">\n Order and payment updates are always sent. Everything else is up to you.\n </p>\n\n @for (cat of categories; track cat.key) {\n <div style=\"padding: 10px 0; border-bottom: 1px solid var(--color-border-muted)\">\n <div style=\"font-weight: 700; font-size: 13.5px; margin-bottom: 8px\">\n {{ cat.label }}\n @if (cat.locked) {\n <span class=\"x-acct-pill\" style=\"margin-left: 6px\">Always on</span>\n }\n </div>\n @if (cat.consent && !marketingConsent) {\n <label class=\"x-acct-checkline\">\n <input type=\"checkbox\" [(ngModel)]=\"marketingConsent\" />\n Opt in to offers and promotions\n </label>\n } @else {\n <div style=\"display: flex; gap: 16px; flex-wrap: wrap\">\n @for (ch of channels; track ch.key) {\n <label class=\"x-acct-checkline\">\n <input\n type=\"checkbox\"\n [disabled]=\"cat.locked || unsubscribedAll || (cat.consent && !marketingConsent)\"\n [checked]=\"channelOn(cat.key, ch.key)\"\n (change)=\"toggleChannel(cat.key, ch.key)\"\n />\n {{ ch.label }}\n </label>\n }\n </div>\n @if (cat.consent && marketingConsent) {\n <label class=\"x-acct-checkline\" style=\"margin-top: 4px\">\n <input type=\"checkbox\" [(ngModel)]=\"marketingConsent\" />\n Keep me opted in to offers\n </label>\n }\n }\n </div>\n }\n\n <div style=\"padding: 14px 0\">\n <label class=\"x-acct-checkline\">\n <input type=\"checkbox\" [(ngModel)]=\"quietHoursEnabled\" />\n Quiet hours \u2014 hold non-urgent messages overnight\n </label>\n @if (quietHoursEnabled) {\n <div style=\"display: flex; gap: 12px; margin-top: 8px\">\n <div class=\"x-acct-field\" style=\"margin: 0\">\n <label>From</label>\n <input type=\"time\" [(ngModel)]=\"quietHoursStart\" />\n </div>\n <div class=\"x-acct-field\" style=\"margin: 0\">\n <label>To</label>\n <input type=\"time\" [(ngModel)]=\"quietHoursEnd\" />\n </div>\n </div>\n }\n </div>\n\n <label class=\"x-acct-checkline\">\n <input type=\"checkbox\" [(ngModel)]=\"unsubscribedAll\" />\n Unsubscribe from everything except order & payment updates\n </label>\n\n @if (prefsError) {\n <div class=\"x-acct-err\" style=\"margin-top: 12px\">{{ prefsError }}</div>\n }\n <button\n type=\"button\"\n class=\"x-acct-btn\"\n style=\"margin-top: 14px\"\n [disabled]=\"savingPrefs\"\n (click)=\"savePrefs()\"\n >\n {{ savingPrefs ? 'Saving\u2026' : 'Save preferences' }}\n </button>\n }\n</div>\n" }]
|
|
1256
|
+
args: [{ standalone: false, selector: 'x-account-settings', template: "<h2 class=\"x-acct-h2\">Settings</h2>\n<p class=\"x-acct-sub\">Profile, security, appearance and how we reach you.</p>\n\n<div class=\"x-acct-card\">\n <strong>Profile</strong>\n @if (loadingProfile) {\n <div class=\"x-acct-empty\">Loading\u2026</div>\n } @else {\n <div style=\"margin-top: 14px\">\n <div class=\"x-acct-field\">\n <label>Name</label>\n <input [value]=\"fullName\" disabled />\n </div>\n <div class=\"x-acct-field\">\n <label>Phone number</label>\n <input type=\"tel\" [(ngModel)]=\"phoneNumber\" placeholder=\"+234\u2026\" />\n </div>\n @if (profileError) {\n <div class=\"x-acct-err\">{{ profileError }}</div>\n }\n <button type=\"button\" class=\"x-acct-btn\" [disabled]=\"savingProfile\" (click)=\"saveProfile()\">\n {{ savingProfile ? 'Saving\u2026' : 'Save profile' }}\n </button>\n </div>\n }\n</div>\n\n<div class=\"x-acct-card\">\n <strong>Change password</strong>\n <div style=\"margin-top: 14px\">\n <div class=\"x-acct-field\">\n <label>Current password</label>\n <div class=\"x-acct-pwd\">\n <input [type]=\"showCurrentSecret ? 'text' : 'password'\" [(ngModel)]=\"currentSecret\" />\n <button\n type=\"button\"\n class=\"x-acct-pwd-toggle\"\n [title]=\"showCurrentSecret ? 'Hide password' : 'Show password'\"\n [attr.aria-label]=\"showCurrentSecret ? 'Hide password' : 'Show password'\"\n (click)=\"showCurrentSecret = !showCurrentSecret\"\n >\n <i class=\"fa-solid\" [ngClass]=\"showCurrentSecret ? 'fa-eye' : 'fa-eye-slash'\"></i>\n </button>\n </div>\n </div>\n <div class=\"x-acct-field\">\n <label>New password</label>\n <div class=\"x-acct-pwd\">\n <input [type]=\"showNewSecret ? 'text' : 'password'\" [(ngModel)]=\"newSecret\" />\n <button\n type=\"button\"\n class=\"x-acct-pwd-toggle\"\n [title]=\"showNewSecret ? 'Hide password' : 'Show password'\"\n [attr.aria-label]=\"showNewSecret ? 'Hide password' : 'Show password'\"\n (click)=\"showNewSecret = !showNewSecret\"\n >\n <i class=\"fa-solid\" [ngClass]=\"showNewSecret ? 'fa-eye' : 'fa-eye-slash'\"></i>\n </button>\n </div>\n </div>\n <div class=\"x-acct-field\">\n <label>Confirm new password</label>\n <div class=\"x-acct-pwd\">\n <input [type]=\"showConfirmSecret ? 'text' : 'password'\" [(ngModel)]=\"confirmNewSecret\" />\n <button\n type=\"button\"\n class=\"x-acct-pwd-toggle\"\n [title]=\"showConfirmSecret ? 'Hide password' : 'Show password'\"\n [attr.aria-label]=\"showConfirmSecret ? 'Hide password' : 'Show password'\"\n (click)=\"showConfirmSecret = !showConfirmSecret\"\n >\n <i class=\"fa-solid\" [ngClass]=\"showConfirmSecret ? 'fa-eye' : 'fa-eye-slash'\"></i>\n </button>\n </div>\n </div>\n @if (passwordError) {\n <div class=\"x-acct-err\">{{ passwordError }}</div>\n }\n @if (passwordDone) {\n <div class=\"x-acct-ok\">Password changed. Signing you out\u2026</div>\n }\n <button\n type=\"button\"\n class=\"x-acct-btn\"\n [disabled]=\"!canChangePassword || changingPassword\"\n (click)=\"changePassword()\"\n >\n {{ changingPassword ? 'Saving\u2026' : 'Change password' }}\n </button>\n </div>\n</div>\n\n<div class=\"x-acct-card\">\n <strong>Appearance</strong>\n <div class=\"x-acct-field\" style=\"margin-top: 14px; max-width: 240px\">\n <label>Theme</label>\n <select aria-label=\"Theme\" [ngModel]=\"theme\" (ngModelChange)=\"setTheme($event)\">\n <option value=\"system\">Match my device</option>\n <option value=\"light\">Light</option>\n <option value=\"dark\">Dark</option>\n </select>\n </div>\n</div>\n\n<div class=\"x-acct-card\">\n <strong>Notifications</strong>\n @if (loadingPrefs) {\n <div class=\"x-acct-empty\">Loading\u2026</div>\n } @else {\n <p class=\"x-acct-sub\" style=\"margin: 8px 0 16px\">\n Order and payment updates are always sent. Everything else is up to you.\n </p>\n\n @for (cat of categories; track cat.key) {\n <div style=\"padding: 10px 0; border-bottom: 1px solid var(--color-border-muted)\">\n <div style=\"font-weight: 700; font-size: 13.5px; margin-bottom: 8px\">\n {{ cat.label }}\n @if (cat.locked) {\n <span class=\"x-acct-pill\" style=\"margin-left: 6px\">Always on</span>\n }\n </div>\n @if (cat.consent && !marketingConsent) {\n <label class=\"x-acct-checkline\">\n <input type=\"checkbox\" [(ngModel)]=\"marketingConsent\" />\n Opt in to offers and promotions\n </label>\n } @else {\n <div style=\"display: flex; gap: 16px; flex-wrap: wrap\">\n @for (ch of channels; track ch.key) {\n <label class=\"x-acct-checkline\">\n <input\n type=\"checkbox\"\n [disabled]=\"cat.locked || unsubscribedAll || (cat.consent && !marketingConsent)\"\n [checked]=\"channelOn(cat.key, ch.key)\"\n (change)=\"toggleChannel(cat.key, ch.key)\"\n />\n {{ ch.label }}\n </label>\n }\n </div>\n @if (cat.consent && marketingConsent) {\n <label class=\"x-acct-checkline\" style=\"margin-top: 4px\">\n <input type=\"checkbox\" [(ngModel)]=\"marketingConsent\" />\n Keep me opted in to offers\n </label>\n }\n }\n </div>\n }\n\n <div style=\"padding: 14px 0\">\n <label class=\"x-acct-checkline\">\n <input type=\"checkbox\" [(ngModel)]=\"quietHoursEnabled\" />\n Quiet hours \u2014 hold non-urgent messages overnight\n </label>\n @if (quietHoursEnabled) {\n <div style=\"display: flex; gap: 12px; margin-top: 8px\">\n <div class=\"x-acct-field\" style=\"margin: 0\">\n <label>From</label>\n <input type=\"time\" [(ngModel)]=\"quietHoursStart\" />\n </div>\n <div class=\"x-acct-field\" style=\"margin: 0\">\n <label>To</label>\n <input type=\"time\" [(ngModel)]=\"quietHoursEnd\" />\n </div>\n </div>\n }\n </div>\n\n <label class=\"x-acct-checkline\">\n <input type=\"checkbox\" [(ngModel)]=\"unsubscribedAll\" />\n Unsubscribe from everything except order & payment updates\n </label>\n\n @if (prefsError) {\n <div class=\"x-acct-err\" style=\"margin-top: 12px\">{{ prefsError }}</div>\n }\n <button\n type=\"button\"\n class=\"x-acct-btn\"\n style=\"margin-top: 14px\"\n [disabled]=\"savingPrefs\"\n (click)=\"savePrefs()\"\n >\n {{ savingPrefs ? 'Saving\u2026' : 'Save preferences' }}\n </button>\n }\n</div>\n" }]
|
|
1254
1257
|
}] });
|
|
1255
1258
|
|
|
1256
1259
|
// P5.6, ACC-06 — one registered system: product, serial, dates,
|
|
@@ -1772,4 +1775,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
|
|
|
1772
1775
|
}] });
|
|
1773
1776
|
|
|
1774
1777
|
export { AccountModule };
|
|
1775
|
-
//# sourceMappingURL=isaiahiroko-tilmart-ngx-apps-buyer-account.module-
|
|
1778
|
+
//# sourceMappingURL=isaiahiroko-tilmart-ngx-apps-buyer-account.module-CLVC0SX-.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isaiahiroko-tilmart-ngx-apps-buyer-account.module-CLVC0SX-.mjs","sources":["../../../projects/buyer/src/lib/pages/account/account-store.service.ts","../../../projects/buyer/src/lib/pages/account/account.component.ts","../../../projects/buyer/src/lib/pages/account/account.component.html","../../../projects/buyer/src/lib/pages/account/addresses/addresses.component.ts","../../../projects/buyer/src/lib/pages/account/addresses/addresses.component.html","../../../projects/buyer/src/lib/pages/account/order-status.ts","../../../projects/buyer/src/lib/pages/account/dashboard/dashboard.component.ts","../../../projects/buyer/src/lib/pages/account/dashboard/dashboard.component.html","../../../projects/buyer/src/lib/pages/account/order-detail/order-detail.component.ts","../../../projects/buyer/src/lib/pages/account/order-detail/order-detail.component.html","../../../projects/buyer/src/lib/pages/account/orders/orders.component.ts","../../../projects/buyer/src/lib/pages/account/orders/orders.component.html","../../../projects/buyer/src/lib/pages/account/payments/payments.component.ts","../../../projects/buyer/src/lib/pages/account/payments/payments.component.html","../../../projects/buyer/src/lib/pages/account/privacy/privacy.component.ts","../../../projects/buyer/src/lib/pages/account/privacy/privacy.component.html","../../../projects/buyer/src/lib/pages/account/returns/return-detail.component.ts","../../../projects/buyer/src/lib/pages/account/returns/return-detail.component.html","../../../projects/buyer/src/lib/pages/account/returns/return-request.component.ts","../../../projects/buyer/src/lib/pages/account/returns/return-request.component.html","../../../projects/buyer/src/lib/pages/account/returns/returns.component.ts","../../../projects/buyer/src/lib/pages/account/returns/returns.component.html","../../../projects/buyer/src/lib/services/account-api.service.ts","../../../projects/buyer/src/lib/pages/account/settings/settings.component.ts","../../../projects/buyer/src/lib/pages/account/settings/settings.component.html","../../../projects/buyer/src/lib/pages/account/systems/system-detail.component.ts","../../../projects/buyer/src/lib/pages/account/systems/system-detail.component.html","../../../projects/buyer/src/lib/pages/account/systems/systems.component.ts","../../../projects/buyer/src/lib/pages/account/systems/systems.component.html","../../../projects/buyer/src/lib/pages/account/systems/warranty-claim.component.ts","../../../projects/buyer/src/lib/pages/account/systems/warranty-claim.component.html","../../../projects/buyer/src/lib/pages/account/wishlists/wishlists.component.ts","../../../projects/buyer/src/lib/pages/account/wishlists/wishlists.component.html","../../../projects/buyer/src/lib/pages/account/account.module.ts"],"sourcesContent":["import { Injectable, inject } from '@angular/core';\nimport { ApiService, ControlService } from '@thescaffold/ngx-core';\nimport { Observable, ReplaySubject, catchError, firstValueFrom, map, of } from 'rxjs';\n\nexport interface AccountCustomer {\n id: string;\n userId?: string;\n name?: string;\n email?: string;\n phone?: string;\n}\n\n// P5.3 — resolves the signed-in visitor's commerce `Customer` once and\n// shares it across the account sub-pages (each of orders / addresses /\n// payments / wishlists needs the `customerId` to filter its own list).\n// A guest has no `Customer` here — the shell shows a sign-in prompt\n// instead of the sub-pages.\n@Injectable()\nexport class AccountStoreService {\n private readonly apiService = inject(ApiService);\n private readonly controlService = inject(ControlService);\n\n private customer$ = new ReplaySubject<AccountCustomer | null>(1);\n private loaded = false;\n\n customer(): Observable<AccountCustomer | null> {\n if (!this.loaded) {\n this.loaded = true;\n this.load();\n }\n return this.customer$.asObservable();\n }\n\n async refreshCustomer(): Promise<AccountCustomer | null> {\n const c = await this.fetch();\n this.customer$.next(c);\n return c;\n }\n\n private load(): void {\n this.fetch().then((c) => this.customer$.next(c));\n }\n\n private async fetch(): Promise<AccountCustomer | null> {\n if (!this.controlService.isLoggedIn()) return null;\n const userId = this.controlService.getContext()?.userId;\n if (!userId) return null;\n return firstValueFrom(\n this.apiService\n .on('apps/commerce/customer')\n .getMany({ userId, perPage: 1 } as any)\n .pipe(\n map((res: any) => {\n const row = (res?.data ?? [])[0];\n return row ? (row as AccountCustomer) : null;\n }),\n catchError(() => of(null)),\n ),\n );\n }\n}\n","import { Component, ViewEncapsulation, inject } from '@angular/core';\nimport { BaseDirective, ControlService, using } from '@thescaffold/ngx-core';\nimport { takeUntil } from 'rxjs';\nimport { AccountStoreService } from './account-store.service';\n\ninterface AccountNavItem {\n path: string;\n label: string;\n icon: string;\n}\n\nconst NAV: AccountNavItem[] = [\n { path: 'dashboard', label: 'Overview', icon: 'fa-gauge' },\n { path: 'orders', label: 'Orders', icon: 'fa-box' },\n { path: 'systems', label: 'My Systems', icon: 'fa-solar-panel' },\n { path: 'returns', label: 'Returns', icon: 'fa-rotate-left' },\n { path: 'addresses', label: 'Addresses', icon: 'fa-location-dot' },\n { path: 'payments', label: 'Payments', icon: 'fa-credit-card' },\n { path: 'wishlists', label: 'Wishlists', icon: 'fa-heart' },\n { path: 'settings', label: 'Settings', icon: 'fa-gear' },\n { path: 'privacy', label: 'Privacy & data', icon: 'fa-shield-halved' },\n];\n\n// P5.3, ACC-02…ACC-10 — the storefront account area. A shell with a nav\n// rail + `<router-outlet>`; the signed-in `Customer` is resolved once\n// here (via `AccountStoreService`) and read by every sub-page. Guest-\n// first like the rest of the storefront: a signed-out visitor sees a\n// sign-in prompt, not a redirect.\n@Component({\n standalone: false,\n selector: 'x-account',\n templateUrl: './account.component.html',\n styleUrl: './account.component.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class AccountComponent extends BaseDirective {\n private readonly controlService = inject(ControlService);\n private readonly store = inject(AccountStoreService);\n\n readonly nav = NAV;\n isLoggedIn = false;\n loading = true;\n customerName = '';\n\n override init = () => {\n this.isLoggedIn = this.controlService.isLoggedIn();\n if (!this.isLoggedIn) {\n this.loading = false;\n return;\n }\n this.store\n .customer()\n .pipe(takeUntil(this.$))\n .subscribe(\n using((customer) => {\n this.loading = false;\n this.customerName =\n customer?.name || customer?.email || customer?.phone || 'Your account';\n }),\n );\n };\n\n signIn(): void {\n this.router.navigate(['/start']);\n }\n}\n","<div class=\"x-acct\">\n @if (loading) {\n <div class=\"x-acct-note\">Loading your account…</div>\n } @else if (!isLoggedIn) {\n <div class=\"x-acct-signin\">\n <h1>Your account</h1>\n <p>Sign in to see your orders, saved systems, addresses and settings.</p>\n <button type=\"button\" class=\"x-acct-btn\" (click)=\"signIn()\">Sign in</button>\n <p class=\"x-acct-muted\">\n No account yet? You can still\n <a routerLink=\"/track\">track an order</a> with your order number.\n </p>\n </div>\n } @else {\n <header class=\"x-acct-head\">\n <h1>{{ customerName }}</h1>\n </header>\n <div class=\"x-acct-body\">\n <nav class=\"x-acct-nav\">\n @for (item of nav; track item.path) {\n <a\n [routerLink]=\"item.path\"\n routerLinkActive=\"x-acct-nav-on\"\n class=\"x-acct-nav-link\"\n >\n <i class=\"fa-solid\" [class]=\"item.icon\"></i>\n <span>{{ item.label }}</span>\n </a>\n }\n </nav>\n <main class=\"x-acct-main\">\n <router-outlet></router-outlet>\n </main>\n </div>\n }\n</div>\n","import { Component, inject } from '@angular/core';\nimport { BaseDirective, notify, using } from '@thescaffold/ngx-core';\nimport { catchError, firstValueFrom, of, takeUntil } from 'rxjs';\nimport { AccountStoreService } from '../account-store.service';\nimport { StaticListOption, StaticListService } from '../../../services/static-list.service';\n\ninterface AddressVm {\n id: string;\n label: string;\n state?: string;\n lga?: string;\n city?: string;\n street: string;\n area?: string;\n landmark?: string;\n buildingInfo?: string;\n notes?: string;\n isDefault: boolean;\n}\n\ntype AddressForm = Omit<AddressVm, 'id' | 'isDefault'> & { id?: string };\n\nfunction blankForm(): AddressForm {\n return {\n label: '',\n state: '',\n lga: '',\n city: '',\n street: '',\n area: '',\n landmark: '',\n buildingInfo: '',\n notes: '',\n };\n}\n\n// P5.3, ACC-04 — the address book. Labelled addresses with one default,\n// editable and deletable, shared with checkout + (R2) installation.\n@Component({\n standalone: false,\n selector: 'x-account-addresses',\n templateUrl: './addresses.component.html',\n})\nexport class AccountAddressesComponent extends BaseDirective {\n private readonly store = inject(AccountStoreService);\n private readonly staticList = inject(StaticListService);\n\n states: StaticListOption[] = [];\n lgas: StaticListOption[] = [];\n lgasLoading = false;\n\n loading = true;\n customerId = '';\n addresses: AddressVm[] = [];\n\n editing = false;\n saving = false;\n form: AddressForm = blankForm();\n formError = '';\n\n override init = () => {\n void this.staticList.getStates().then((states) => (this.states = states));\n this.store\n .customer()\n .pipe(takeUntil(this.$))\n .subscribe(\n using((customer) => {\n if (!customer) {\n this.loading = false;\n return;\n }\n this.customerId = customer.id;\n void this.load();\n }),\n );\n };\n\n async onFormStateChange(): Promise<void> {\n this.form.lga = '';\n await this.loadLgas(this.form.state);\n }\n\n private async loadLgas(state?: string): Promise<void> {\n if (!state) {\n this.lgas = [];\n return;\n }\n this.lgasLoading = true;\n try {\n this.lgas = await this.staticList.getLgas(state).catch(() => []);\n } finally {\n this.lgasLoading = false;\n }\n }\n\n private async load(): Promise<void> {\n const res: any = await firstValueFrom(\n this.apiService\n .on('apps/commerce/address')\n .getMany({ customerId: this.customerId, perPage: 100 } as any)\n .pipe(catchError(() => of({ data: [] }))),\n );\n this.addresses = (res?.data ?? []).map((a: any) => ({\n id: a.id,\n label: a.label,\n state: a.state,\n lga: a.lga,\n city: a.city,\n street: a.street,\n area: a.area,\n landmark: a.landmark,\n buildingInfo: a.buildingInfo,\n notes: a.notes,\n isDefault: !!a.isDefault,\n }));\n this.loading = false;\n }\n\n startAdd(): void {\n this.form = blankForm();\n this.formError = '';\n this.editing = true;\n this.lgas = [];\n }\n\n startEdit(a: AddressVm): void {\n this.form = { ...a };\n this.formError = '';\n this.editing = true;\n void this.loadLgas(this.form.state);\n }\n\n cancel(): void {\n this.editing = false;\n }\n\n async save(): Promise<void> {\n if (this.saving) return;\n if (!this.form.label.trim() || !this.form.state || !this.form.street.trim()) {\n this.formError = 'Label, state and street are required.';\n return;\n }\n this.saving = true;\n this.formError = '';\n\n const payload: any = {\n customerId: this.customerId,\n label: this.form.label.trim(),\n state: this.form.state,\n lga: this.form.lga || undefined,\n city: this.form.city || undefined,\n street: this.form.street.trim(),\n area: this.form.area || this.form.city || this.form.state,\n landmark: this.form.landmark || undefined,\n buildingInfo: this.form.buildingInfo || undefined,\n notes: this.form.notes || undefined,\n };\n\n try {\n if (this.form.id) {\n await firstValueFrom(\n this.apiService.on('apps/commerce/address').update(this.form.id, payload),\n );\n } else {\n payload.isDefault = this.addresses.length === 0;\n await firstValueFrom(this.apiService.on('apps/commerce/address').create(payload));\n }\n this.editing = false;\n await this.load();\n } catch (err: any) {\n this.formError = err?.error?.message ?? 'Could not save this address.';\n } finally {\n this.saving = false;\n }\n }\n\n async remove(a: AddressVm): Promise<void> {\n if (!confirm(`Delete \"${a.label}\"?`)) return;\n try {\n await firstValueFrom(\n this.apiService.on('apps/commerce/address').remove(a.id),\n );\n await this.load();\n } catch {\n notify('Could not delete that address.', undefined, 'error');\n }\n }\n\n async makeDefault(a: AddressVm): Promise<void> {\n if (a.isDefault) return;\n const current = this.addresses.find((x) => x.isDefault);\n try {\n await firstValueFrom(\n this.apiService.on('apps/commerce/address').update(a.id, { isDefault: true }),\n );\n if (current) {\n await firstValueFrom(\n this.apiService\n .on('apps/commerce/address')\n .update(current.id, { isDefault: false }),\n );\n }\n await this.load();\n } catch {\n notify('Could not update the default address.', undefined, 'error');\n }\n }\n}\n","<h2 class=\"x-acct-h2\">Addresses</h2>\n<p class=\"x-acct-sub\">Used for delivery and, later, installation visits.</p>\n\n@if (loading) {\n <div class=\"x-acct-empty\">Loading…</div>\n} @else {\n @if (editing) {\n <div class=\"x-acct-card\">\n <strong>{{ form.id ? 'Edit address' : 'New address' }}</strong>\n <div style=\"margin-top: 14px\">\n <div class=\"x-acct-field\">\n <label>Label</label>\n <input [(ngModel)]=\"form.label\" placeholder=\"Home, Office, Site…\" />\n </div>\n <div class=\"x-acct-field\">\n <label>State</label>\n <select aria-label=\"State\" data-testid=\"address-state\" [(ngModel)]=\"form.state\" (ngModelChange)=\"onFormStateChange()\">\n <option value=\"\">Select a state</option>\n @for (s of states; track s.value) {\n <option [value]=\"s.value\">{{ s.label }}</option>\n }\n </select>\n </div>\n <div class=\"x-acct-field\">\n <label>LGA / area</label>\n <select aria-label=\"LGA\" data-testid=\"address-lga\" [(ngModel)]=\"form.lga\" [disabled]=\"!form.state || lgasLoading\">\n <option value=\"\">{{ form.state ? 'Select an LGA' : 'Select a state first' }}</option>\n @for (l of lgas; track l.value) {\n <option [value]=\"l.value\">{{ l.label }}</option>\n }\n </select>\n </div>\n <div class=\"x-acct-field\">\n <label>Street</label>\n <input [(ngModel)]=\"form.street\" />\n </div>\n <div class=\"x-acct-field\">\n <label>Nearest landmark</label>\n <input [(ngModel)]=\"form.landmark\" placeholder=\"e.g. opposite Zenith Bank\" />\n </div>\n <div class=\"x-acct-field\">\n <label>Building / flat info</label>\n <input [(ngModel)]=\"form.buildingInfo\" />\n </div>\n <div class=\"x-acct-field\">\n <label>Delivery notes</label>\n <input [(ngModel)]=\"form.notes\" />\n </div>\n @if (formError) {\n <div class=\"x-acct-err\">{{ formError }}</div>\n }\n <button type=\"button\" class=\"x-acct-btn\" [disabled]=\"saving\" (click)=\"save()\">\n {{ saving ? 'Saving…' : 'Save address' }}\n </button>\n <button type=\"button\" class=\"x-acct-btn-ghost\" (click)=\"cancel()\" style=\"margin-left: 8px\">\n Cancel\n </button>\n </div>\n </div>\n } @else {\n <button type=\"button\" class=\"x-acct-btn\" (click)=\"startAdd()\">Add an address</button>\n }\n\n @for (a of addresses; track a.id) {\n <div class=\"x-acct-card\">\n <div class=\"x-acct-row\" style=\"border-bottom: 0; padding-top: 0\">\n <strong>\n {{ a.label }}\n @if (a.isDefault) {\n <span class=\"x-acct-pill x-acct-pill-ok\" style=\"margin-left: 6px\">Default</span>\n }\n </strong>\n <span>\n <button type=\"button\" class=\"x-acct-btn-ghost\" (click)=\"startEdit(a)\">Edit</button>\n <button type=\"button\" class=\"x-acct-btn-ghost\" (click)=\"remove(a)\" style=\"margin-left: 6px\">\n Delete\n </button>\n </span>\n </div>\n <p class=\"x-acct-sub\" style=\"margin: 0\">\n {{ a.street }}@if (a.landmark) {, near {{ a.landmark }}}<br />\n {{ a.lga ? a.lga + ', ' : '' }}{{ a.state }}\n </p>\n @if (!a.isDefault) {\n <button\n type=\"button\"\n class=\"x-acct-btn-ghost\"\n style=\"margin-top: 10px\"\n (click)=\"makeDefault(a)\"\n >\n Make default\n </button>\n }\n </div>\n } @empty {\n @if (!editing) {\n <div class=\"x-acct-empty\">No saved addresses yet.</div>\n }\n }\n}\n","// PRD Appendix B — the 17 order states, buyer-friendly labels. Shared by\n// the account dashboard / orders / order-detail pages (the guest `/track`\n// page keeps its own copy — it's a separate module tree).\nexport const ORDER_STATUS_LABELS: Record<string, string> = {\n pending_payment: 'Awaiting payment',\n payment_received: 'Payment received',\n on_hold: 'On hold',\n confirmed: 'Confirmed',\n processing: 'Being prepared',\n partially_fulfilled: 'Partly on the way',\n ready_to_ship: 'Ready to ship',\n ready_for_pickup: 'Ready for pickup',\n dispatched: 'Dispatched',\n out_for_delivery: 'Out for delivery',\n failed_delivery: 'Delivery attempt failed',\n delivered: 'Delivered',\n completed: 'Completed',\n cancelled: 'Cancelled',\n return_in_flight: 'Return in progress',\n returned: 'Returned',\n refunded: 'Refunded',\n};\n\nexport function orderStatusLabel(status: string): string {\n return ORDER_STATUS_LABELS[status] ?? status;\n}\n\nexport function orderStatusTone(status: string): 'ok' | 'warn' | 'bad' | '' {\n if (status === 'delivered' || status === 'completed') return 'ok';\n if (status === 'cancelled' || status === 'refunded' || status === 'failed_delivery')\n return 'bad';\n if (status === 'pending_payment' || status === 'on_hold' || status === 'return_in_flight')\n return 'warn';\n return '';\n}\n","import { Component, inject } from '@angular/core';\nimport { BaseDirective, using } from '@thescaffold/ngx-core';\nimport { catchError, firstValueFrom, of, switchMap, takeUntil } from 'rxjs';\nimport { AccountStoreService } from '../account-store.service';\nimport { orderStatusLabel } from '../order-status';\n\ninterface DashOrderVm {\n id: string;\n orderNumber: string;\n status: string;\n statusLabel: string;\n placedAt?: string;\n grandTotal: number;\n currency: string;\n}\n\ninterface DashWarrantyVm {\n id: string;\n label: string;\n expiresAt?: string;\n daysLeft: number;\n}\n\nconst OPEN_STATUSES = new Set([\n 'pending_payment',\n 'payment_received',\n 'on_hold',\n 'confirmed',\n 'processing',\n 'partially_fulfilled',\n 'ready_to_ship',\n 'ready_for_pickup',\n 'dispatched',\n 'out_for_delivery',\n 'failed_delivery',\n]);\n\n// P5.3, ACC-02 — the account overview. Open-order count, the three most\n// recent orders, warranties inside 60 days of expiry, and quick links.\n// Bookings / wallet balance are R2 / PAY-11 (not built) — deliberately\n// left off rather than stubbed.\n@Component({\n standalone: false,\n selector: 'x-account-dashboard',\n templateUrl: './dashboard.component.html',\n})\nexport class AccountDashboardComponent extends BaseDirective {\n private readonly store = inject(AccountStoreService);\n\n loading = true;\n customerId = '';\n openCount = 0;\n recentOrders: DashOrderVm[] = [];\n expiringWarranties: DashWarrantyVm[] = [];\n wishlistCount = 0;\n\n referralCode = '';\n referralConverted = 0;\n referralPending = 0;\n\n override init = () => {\n this.store\n .customer()\n .pipe(\n takeUntil(this.$),\n switchMap((customer) => {\n if (!customer) return of(null);\n this.customerId = customer.id;\n return of(customer);\n }),\n )\n .subscribe(\n using((customer) => {\n if (!customer) {\n this.loading = false;\n return;\n }\n void this.hydrate(customer.id);\n }),\n );\n };\n\n private async hydrate(customerId: string): Promise<void> {\n const [orders, warranties, wishlists, refCode, refs] = await Promise.all([\n firstValueFrom(\n this.apiService\n .on('apps/commerce/order')\n .getMany({ customerId, perPage: 100 } as any)\n .pipe(catchError(() => of({ data: [] } as any))),\n ),\n firstValueFrom(\n this.apiService\n .on('apps/commerce/warranty')\n .getMany({ customerId, perPage: 100 } as any)\n .pipe(catchError(() => of({ data: [] } as any))),\n ),\n firstValueFrom(\n this.apiService\n .on('apps/commerce/wishlist')\n .getMany({ customerId, perPage: 100 } as any)\n .pipe(catchError(() => of({ data: [] } as any))),\n ),\n firstValueFrom(\n this.apiService\n .get('apps/commerce/referral/my-code')\n .pipe(catchError(() => of(undefined))),\n ),\n firstValueFrom(\n this.apiService\n .get('apps/commerce/referral/mine')\n .pipe(catchError(() => of({ data: [] } as any))),\n ),\n ]);\n\n this.referralCode = (refCode as any)?.data?.code ?? '';\n const refRows: any[] = (refs as any)?.data ?? [];\n this.referralConverted = refRows.filter(\n (r) => r.status === 'converted' || r.status === 'rewarded',\n ).length;\n this.referralPending = refRows.filter(\n (r) => r.status === 'pending' && r.refereeCustomerId,\n ).length;\n\n const orderRows: any[] = orders?.data ?? [];\n this.openCount = orderRows.filter((o) => OPEN_STATUSES.has(o.status)).length;\n this.recentOrders = orderRows\n .slice()\n .sort((a, b) => this.ts(b.placedAt ?? b.createdAt) - this.ts(a.placedAt ?? a.createdAt))\n .slice(0, 3)\n .map((o) => ({\n id: o.id,\n orderNumber: o.orderNumber,\n status: o.status,\n statusLabel: orderStatusLabel(o.status),\n placedAt: o.placedAt ?? o.createdAt,\n grandTotal: Number(o.grandTotal ?? 0),\n currency: o.currency ?? 'NGN',\n }));\n\n const now = Date.now();\n this.expiringWarranties = (warranties?.data ?? [])\n .filter((w: any) => w.expiresAt)\n .map((w: any) => ({\n id: w.id,\n label: w.serialNumberId ? 'Registered unit' : 'Warranty',\n expiresAt: w.expiresAt,\n daysLeft: Math.round((this.ts(w.expiresAt) - now) / 86_400_000),\n }))\n .filter((w: DashWarrantyVm) => w.daysLeft >= 0 && w.daysLeft <= 60)\n .sort((a: DashWarrantyVm, b: DashWarrantyVm) => a.daysLeft - b.daysLeft);\n\n this.wishlistCount = (wishlists?.data ?? []).length;\n this.loading = false;\n }\n\n private ts(v?: string): number {\n const t = v ? Date.parse(v) : NaN;\n return Number.isNaN(t) ? 0 : t;\n }\n}\n","<h2 class=\"x-acct-h2\">Overview</h2>\n<p class=\"x-acct-sub\">A snapshot of your orders and cover.</p>\n\n@if (loading) {\n <div class=\"x-acct-empty\">Loading…</div>\n} @else {\n <div class=\"x-acct-card\">\n <div class=\"x-acct-row\">\n <span>Open orders</span>\n <strong>{{ openCount }}</strong>\n </div>\n <div class=\"x-acct-row\">\n <span>Saved wishlists</span>\n <a routerLink=\"../wishlists\">{{ wishlistCount }}</a>\n </div>\n </div>\n\n <div class=\"x-acct-card\">\n <div class=\"x-acct-row\" style=\"border-bottom: 0; padding-bottom: 4px\">\n <strong>Recent orders</strong>\n <a routerLink=\"../orders\" class=\"x-acct-btn-ghost\">All orders</a>\n </div>\n @for (order of recentOrders; track order.id) {\n <a class=\"x-acct-row\" [routerLink]=\"['../orders', order.id]\">\n <span>\n <strong>{{ order.orderNumber }}</strong>\n <br />\n <span class=\"x-acct-pill\">{{ order.statusLabel }}</span>\n </span>\n <span>{{ order.currency }} {{ order.grandTotal | number: '1.2-2' }}</span>\n </a>\n } @empty {\n <div class=\"x-acct-empty\">No orders yet.</div>\n }\n </div>\n\n @if (referralCode) {\n <div class=\"x-acct-card\">\n <div class=\"x-acct-row\" style=\"border-bottom: 0; padding-bottom: 4px\">\n <strong>Refer a friend</strong>\n </div>\n <p class=\"x-acct-sub\" style=\"margin: 0 0 8px\">\n Share your code — you both benefit when they complete their first order.\n </p>\n <div class=\"x-acct-row\">\n <span>Your code</span>\n <strong style=\"letter-spacing: 1px\">{{ referralCode }}</strong>\n </div>\n @if (referralConverted || referralPending) {\n <div class=\"x-acct-row\">\n <span>Referrals</span>\n <span>{{ referralConverted }} completed · {{ referralPending }} pending</span>\n </div>\n }\n </div>\n }\n\n @if (expiringWarranties.length) {\n <div class=\"x-acct-card\">\n <div class=\"x-acct-row\" style=\"border-bottom: 0; padding-bottom: 4px\">\n <strong>Warranties expiring soon</strong>\n <a routerLink=\"../systems\" class=\"x-acct-btn-ghost\">My Systems</a>\n </div>\n @for (w of expiringWarranties; track w.id) {\n <div class=\"x-acct-row\">\n <span>{{ w.label }}</span>\n <span class=\"x-acct-pill-warn x-acct-pill\">{{ w.daysLeft }} days left</span>\n </div>\n }\n </div>\n }\n}\n","import { Component, inject } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { BaseDirective, notify, using } from '@thescaffold/ngx-core';\nimport { catchError, forkJoin, of, takeUntil } from 'rxjs';\nimport { CartStoreService } from '../../../services/cart-store.service';\nimport { orderStatusLabel, orderStatusTone } from '../order-status';\n\ninterface LineVm {\n variantId: string;\n name: string;\n quantity: number;\n unitPrice: number;\n lineTotal: number;\n fulfilmentStatus?: string;\n}\n\ninterface TimelineVm {\n toStatus: string;\n label: string;\n at?: string;\n reason?: string;\n}\n\ninterface PaymentVm {\n provider?: string;\n method?: string;\n status?: string;\n amount: number;\n}\n\n// P5.3, ACC-03 — one order in full: lines, totals, the transition\n// timeline, payments, and the context actions (reorder, invoice, track,\n// return). Return / review targets are P5.9 / P5.11 — linked when they\n// exist, absent otherwise rather than dead-ended.\n@Component({\n standalone: false,\n selector: 'x-account-order-detail',\n templateUrl: './order-detail.component.html',\n})\nexport class AccountOrderDetailComponent extends BaseDirective {\n private readonly route = inject(ActivatedRoute);\n private readonly cart = inject(CartStoreService);\n\n loading = true;\n found = false;\n\n orderId = '';\n orderNumber = '';\n status = '';\n statusLabel = '';\n tone = '';\n placedAt?: string;\n currency = 'NGN';\n recipientName = '';\n recipientPhone = '';\n\n lines: LineVm[] = [];\n subtotal = 0;\n deliveryTotal = 0;\n taxTotal = 0;\n discountTotal = 0;\n grandTotal = 0;\n amountPaid = 0;\n codAmountDue = 0;\n\n timeline: TimelineVm[] = [];\n payments: PaymentVm[] = [];\n\n override init = () => {\n this.orderId = this.route.snapshot.paramMap.get('id') ?? '';\n if (!this.orderId) {\n this.loading = false;\n return;\n }\n\n forkJoin({\n order: this.apiService\n .on('apps/commerce/order')\n .getOne(this.orderId)\n .pipe(catchError(() => of(undefined))),\n lines: this.apiService\n .on('apps/commerce/order-line')\n .getMany({ orderId: this.orderId, perPage: 200 } as any)\n .pipe(catchError(() => of(undefined))),\n history: this.apiService\n .on('apps/commerce/order-status-history')\n .getMany({ orderId: this.orderId, perPage: 200 } as any)\n .pipe(catchError(() => of(undefined))),\n payments: this.apiService\n .on('apps/commerce/payment')\n .getMany({ orderId: this.orderId, perPage: 50 } as any)\n .pipe(catchError(() => of(undefined))),\n })\n .pipe(takeUntil(this.$))\n .subscribe(\n using((res: any) => {\n this.loading = false;\n const order = res?.order?.data;\n if (!order) return;\n this.found = true;\n\n this.orderNumber = order.orderNumber;\n this.status = order.status;\n this.statusLabel = orderStatusLabel(order.status);\n this.tone = orderStatusTone(order.status);\n this.placedAt = order.placedAt ?? order.createdAt;\n this.currency = order.currency ?? 'NGN';\n this.recipientName = order.recipientName ?? '';\n this.recipientPhone = order.recipientPhone ?? '';\n this.subtotal = Number(order.subtotal ?? 0);\n this.deliveryTotal = Number(order.deliveryTotal ?? 0);\n this.taxTotal = Number(order.taxTotal ?? 0);\n this.discountTotal = Number(order.discountTotal ?? 0);\n this.grandTotal = Number(order.grandTotal ?? 0);\n this.amountPaid = Number(order.amountPaid ?? 0);\n this.codAmountDue = Number(order.codAmountDue ?? 0);\n\n this.lines = (res?.lines?.data ?? []).map((l: any) => ({\n variantId: l.variantId,\n name: l.nameSnapshot || 'Item',\n quantity: Number(l.quantity ?? 1),\n unitPrice: Number(l.unitPrice ?? 0),\n lineTotal: Number(l.unitPrice ?? 0) * Number(l.quantity ?? 1),\n fulfilmentStatus: l.fulfilmentStatus,\n }));\n\n this.timeline = (res?.history?.data ?? [])\n .slice()\n .sort((a: any, b: any) => this.ts(a.at ?? a.createdAt) - this.ts(b.at ?? b.createdAt))\n .map((h: any) => ({\n toStatus: h.toStatus,\n label: orderStatusLabel(h.toStatus),\n at: h.at ?? h.createdAt,\n reason: h.reason,\n }));\n\n this.payments = (res?.payments?.data ?? []).map((p: any) => ({\n provider: p.provider,\n method: p.method,\n status: p.status,\n amount: Number(p.amount ?? 0),\n }));\n }),\n );\n };\n\n reorder(): void {\n if (!this.lines.length) return;\n for (const line of this.lines) {\n this.cart.addLine({\n variantId: line.variantId,\n productId: '',\n name: line.name,\n quantity: line.quantity,\n unitPrice: line.unitPrice,\n currency: this.currency,\n });\n }\n notify('Added to your cart', undefined, 'success');\n this.router.navigate(['/cart']);\n }\n\n private ts(v?: string): number {\n const t = v ? Date.parse(v) : NaN;\n return Number.isNaN(t) ? 0 : t;\n }\n}\n","<a routerLink=\"../\" class=\"x-acct-btn-ghost\">‹ All orders</a>\n\n@if (loading) {\n <div class=\"x-acct-empty\" style=\"margin-top: 16px\">Loading…</div>\n} @else if (!found) {\n <div class=\"x-acct-card\" style=\"margin-top: 16px\">\n <div class=\"x-acct-empty\">We couldn't find that order.</div>\n </div>\n} @else {\n <header style=\"margin: 16px 0 8px\">\n <h2 class=\"x-acct-h2\">{{ orderNumber }}</h2>\n <p class=\"x-acct-sub\">\n @if (placedAt) {\n Placed {{ placedAt | date: 'medium' }} ·\n }\n <span\n class=\"x-acct-pill\"\n [class.x-acct-pill-ok]=\"tone === 'ok'\"\n [class.x-acct-pill-warn]=\"tone === 'warn'\"\n [class.x-acct-pill-bad]=\"tone === 'bad'\"\n >{{ statusLabel }}</span\n >\n </p>\n </header>\n\n <div class=\"x-acct-card\" style=\"display: flex; flex-wrap: wrap; gap: 10px\">\n <button type=\"button\" class=\"x-acct-btn\" (click)=\"reorder()\">Buy these again</button>\n <a\n class=\"x-acct-btn-ghost\"\n [routerLink]=\"['/order/invoice']\"\n [queryParams]=\"{ orderId: orderId }\"\n >VAT invoice</a\n >\n <a\n class=\"x-acct-btn-ghost\"\n [routerLink]=\"['/track']\"\n [queryParams]=\"{ number: orderNumber }\"\n >Track delivery</a\n >\n <a class=\"x-acct-btn-ghost\" [routerLink]=\"['return']\">Request a return</a>\n <a class=\"x-acct-btn-ghost\" routerLink=\"/help\">Contact support</a>\n </div>\n\n <div class=\"x-acct-card\">\n <strong>Items</strong>\n @for (line of lines; track line.variantId) {\n <div class=\"x-acct-row\">\n <span>\n {{ line.name }}\n <span class=\"x-acct-sub\" style=\"display: block; margin-top: 2px\">\n Qty {{ line.quantity }} · {{ currency }} {{ line.unitPrice | number: '1.2-2' }} each\n @if (line.fulfilmentStatus) {\n · {{ line.fulfilmentStatus }}\n }\n </span>\n </span>\n <strong>{{ currency }} {{ line.lineTotal | number: '1.2-2' }}</strong>\n </div>\n }\n <div class=\"x-acct-row\"><span>Subtotal</span><span>{{ currency }} {{ subtotal | number: '1.2-2' }}</span></div>\n @if (discountTotal > 0) {\n <div class=\"x-acct-row\"><span>Discount</span><span>− {{ currency }} {{ discountTotal | number: '1.2-2' }}</span></div>\n }\n <div class=\"x-acct-row\"><span>Delivery</span><span>{{ currency }} {{ deliveryTotal | number: '1.2-2' }}</span></div>\n <div class=\"x-acct-row\"><span>VAT (incl.)</span><span>{{ currency }} {{ taxTotal | number: '1.2-2' }}</span></div>\n <div class=\"x-acct-row\"><strong>Total</strong><strong>{{ currency }} {{ grandTotal | number: '1.2-2' }}</strong></div>\n <div class=\"x-acct-row\"><span>Paid</span><span>{{ currency }} {{ amountPaid | number: '1.2-2' }}</span></div>\n @if (codAmountDue > 0) {\n <div class=\"x-acct-row\">\n <span>Due on delivery</span>\n <strong>{{ currency }} {{ codAmountDue | number: '1.2-2' }}</strong>\n </div>\n }\n </div>\n\n @if (recipientName || recipientPhone) {\n <div class=\"x-acct-card\">\n <strong>Delivery to</strong>\n <div class=\"x-acct-row\">\n <span>{{ recipientName }}</span>\n <span>{{ recipientPhone }}</span>\n </div>\n </div>\n }\n\n @if (payments.length) {\n <div class=\"x-acct-card\">\n <strong>Payments</strong>\n @for (p of payments; track $index) {\n <div class=\"x-acct-row\">\n <span>{{ p.method || p.provider || 'Payment' }}</span>\n <span class=\"x-acct-pill\">{{ p.status }}</span>\n <span>{{ currency }} {{ p.amount | number: '1.2-2' }}</span>\n </div>\n }\n </div>\n }\n\n @if (timeline.length) {\n <div class=\"x-acct-card\">\n <strong>Progress</strong>\n @for (step of timeline; track $index) {\n <div class=\"x-acct-row\">\n <span>\n {{ step.label }}\n @if (step.reason) {\n <span class=\"x-acct-sub\" style=\"display: block; margin-top: 2px\">{{ step.reason }}</span>\n }\n </span>\n <span class=\"x-acct-sub\">{{ step.at | date: 'short' }}</span>\n </div>\n }\n </div>\n }\n}\n","import { Component, inject } from '@angular/core';\nimport { BaseDirective, using } from '@thescaffold/ngx-core';\nimport { catchError, firstValueFrom, of, takeUntil } from 'rxjs';\nimport { AccountStoreService } from '../account-store.service';\nimport { orderStatusLabel, orderStatusTone } from '../order-status';\n\ninterface OrderRowVm {\n id: string;\n orderNumber: string;\n status: string;\n statusLabel: string;\n tone: string;\n placedAt?: string;\n lineCount: number;\n grandTotal: number;\n codAmountDue: number;\n currency: string;\n}\n\n// P5.3, ACC-03 — the buyer's order history. Every Order for their\n// Customer, newest first, each linking to the detail page (reorder /\n// invoice / track / return live there).\n@Component({\n standalone: false,\n selector: 'x-account-orders',\n templateUrl: './orders.component.html',\n})\nexport class AccountOrdersComponent extends BaseDirective {\n private readonly store = inject(AccountStoreService);\n\n loading = true;\n orders: OrderRowVm[] = [];\n\n override init = () => {\n this.store\n .customer()\n .pipe(takeUntil(this.$))\n .subscribe(\n using((customer) => {\n if (!customer) {\n this.loading = false;\n return;\n }\n void this.load(customer.id);\n }),\n );\n };\n\n private async load(customerId: string): Promise<void> {\n const res: any = await firstValueFrom(\n this.apiService\n .on('apps/commerce/order')\n .getMany({ customerId, perPage: 200 } as any)\n .pipe(catchError(() => of({ data: [] }))),\n );\n this.orders = (res?.data ?? [])\n .slice()\n .sort(\n (a: any, b: any) =>\n this.ts(b.placedAt ?? b.createdAt) - this.ts(a.placedAt ?? a.createdAt),\n )\n .map((o: any) => ({\n id: o.id,\n orderNumber: o.orderNumber,\n status: o.status,\n statusLabel: orderStatusLabel(o.status),\n tone: orderStatusTone(o.status),\n placedAt: o.placedAt ?? o.createdAt,\n lineCount: Number(o.lineCount ?? 0),\n grandTotal: Number(o.grandTotal ?? 0),\n codAmountDue: Number(o.codAmountDue ?? 0),\n currency: o.currency ?? 'NGN',\n }));\n this.loading = false;\n }\n\n private ts(v?: string): number {\n const t = v ? Date.parse(v) : NaN;\n return Number.isNaN(t) ? 0 : t;\n }\n}\n","<h2 class=\"x-acct-h2\">Orders</h2>\n<p class=\"x-acct-sub\">Track a delivery, download an invoice or start a return.</p>\n\n@if (loading) {\n <div class=\"x-acct-empty\">Loading your orders…</div>\n} @else if (!orders.length) {\n <div class=\"x-acct-card\">\n <div class=\"x-acct-empty\">\n No orders yet. When you place one it'll show up here.\n </div>\n </div>\n} @else {\n <div class=\"x-acct-card\">\n @for (order of orders; track order.id) {\n <a class=\"x-acct-row\" [routerLink]=\"[order.id]\">\n <span>\n <strong>{{ order.orderNumber }}</strong>\n @if (order.placedAt) {\n <span class=\"x-acct-sub\" style=\"margin: 2px 0 0; display: block\">\n {{ order.placedAt | date: 'mediumDate' }}\n </span>\n }\n </span>\n <span\n class=\"x-acct-pill\"\n [class.x-acct-pill-ok]=\"order.tone === 'ok'\"\n [class.x-acct-pill-warn]=\"order.tone === 'warn'\"\n [class.x-acct-pill-bad]=\"order.tone === 'bad'\"\n >{{ order.statusLabel }}</span\n >\n <span style=\"text-align: right\">\n <strong>{{ order.currency }} {{ order.grandTotal | number: '1.2-2' }}</strong>\n @if (order.codAmountDue > 0) {\n <span class=\"x-acct-sub\" style=\"margin: 2px 0 0; display: block\">\n {{ order.currency }} {{ order.codAmountDue | number: '1.2-2' }} on delivery\n </span>\n }\n </span>\n </a>\n }\n </div>\n}\n","import { Component, inject } from '@angular/core';\nimport { BaseDirective, using } from '@thescaffold/ngx-core';\nimport { catchError, firstValueFrom, of, takeUntil } from 'rxjs';\nimport { AccountStoreService } from '../account-store.service';\n\ninterface PaymentRowVm {\n id: string;\n orderId?: string;\n orderNumber: string;\n provider?: string;\n method?: string;\n status?: string;\n amount: number;\n currency: string;\n paidAt?: string;\n createdAt?: string;\n}\n\n// P5.3, ACC-05 (the R1 slice) — a read-only payment history across the\n// buyer's orders. Saved / tokenised cards are P1 and not built.\n@Component({\n standalone: false,\n selector: 'x-account-payments',\n templateUrl: './payments.component.html',\n})\nexport class AccountPaymentsComponent extends BaseDirective {\n private readonly store = inject(AccountStoreService);\n\n loading = true;\n payments: PaymentRowVm[] = [];\n\n override init = () => {\n this.store\n .customer()\n .pipe(takeUntil(this.$))\n .subscribe(\n using((customer) => {\n if (!customer) {\n this.loading = false;\n return;\n }\n void this.load(customer.id);\n }),\n );\n };\n\n private async load(customerId: string): Promise<void> {\n const ordersRes: any = await firstValueFrom(\n this.apiService\n .on('apps/commerce/order')\n .getMany({ customerId, perPage: 200 } as any)\n .pipe(catchError(() => of({ data: [] }))),\n );\n const orders: any[] = ordersRes?.data ?? [];\n const numberById = new Map<string, string>(\n orders.map((o) => [o.id, o.orderNumber]),\n );\n\n const perOrder = await Promise.all(\n orders.map((o) =>\n firstValueFrom(\n this.apiService\n .on('apps/commerce/payment')\n .getMany({ orderId: o.id, perPage: 50 } as any)\n .pipe(catchError(() => of({ data: [] }))),\n ),\n ),\n );\n\n this.payments = perOrder\n .flatMap((res: any) => res?.data ?? [])\n .map((p: any) => ({\n id: p.id,\n orderId: p.orderId,\n orderNumber: numberById.get(p.orderId) ?? '',\n provider: p.provider,\n method: p.method,\n status: p.status,\n amount: Number(p.amount ?? 0),\n currency: p.currency ?? 'NGN',\n paidAt: p.paidAt,\n createdAt: p.createdAt,\n }))\n .sort((a, b) => this.ts(b.paidAt ?? b.createdAt) - this.ts(a.paidAt ?? a.createdAt));\n this.loading = false;\n }\n\n private ts(v?: string): number {\n const t = v ? Date.parse(v) : NaN;\n return Number.isNaN(t) ? 0 : t;\n }\n}\n","<h2 class=\"x-acct-h2\">Payments</h2>\n<p class=\"x-acct-sub\">Every payment across your orders.</p>\n\n@if (loading) {\n <div class=\"x-acct-empty\">Loading…</div>\n} @else if (!payments.length) {\n <div class=\"x-acct-card\"><div class=\"x-acct-empty\">No payments yet.</div></div>\n} @else {\n <div class=\"x-acct-card\">\n @for (p of payments; track p.id) {\n <div class=\"x-acct-row\">\n <span>\n @if (p.orderId) {\n <a [routerLink]=\"['../orders', p.orderId]\"><strong>{{ p.orderNumber }}</strong></a>\n } @else {\n <strong>{{ p.orderNumber || 'Payment' }}</strong>\n }\n <span class=\"x-acct-sub\" style=\"display: block; margin-top: 2px\">\n {{ p.method || p.provider }} · {{ (p.paidAt || p.createdAt) | date: 'mediumDate' }}\n </span>\n </span>\n <span class=\"x-acct-pill\" [class.x-acct-pill-ok]=\"p.status === 'success'\">\n {{ p.status }}\n </span>\n <strong>{{ p.currency }} {{ p.amount | number: '1.2-2' }}</strong>\n </div>\n }\n </div>\n}\n","import { Component, inject } from '@angular/core';\nimport { ApiService, BaseDirective, notify } from '@thescaffold/ngx-core';\nimport { firstValueFrom } from 'rxjs';\nimport { AccountStoreService } from '../account-store.service';\n\n// P7.7, SEC-04 / SEC-05 (NDPR) — the customer's data controls: export a\n// copy of everything held about them, and lodge an account-deletion\n// request. Cookie / tracking consent is the site-wide consent bar; this\n// page is the data-subject access + erasure surface.\n@Component({\n standalone: false,\n selector: 'x-account-privacy',\n templateUrl: './privacy.component.html',\n})\nexport class AccountPrivacyComponent extends BaseDirective {\n private readonly api = inject(ApiService);\n private readonly store = inject(AccountStoreService);\n\n customerId?: string;\n exporting = false;\n requesting = false;\n deletionLodged = false;\n deletionReason = '';\n\n override init = () => {\n this.store\n .customer()\n .subscribe((c) => (this.customerId = c?.id));\n };\n\n async downloadData(): Promise<void> {\n if (this.exporting) return;\n this.exporting = true;\n try {\n const res: any = await firstValueFrom(\n this.api.post('apps/commerce/data-request/export', {\n customerId: this.customerId,\n }),\n );\n const bundle = res?.data ?? res;\n const blob = new Blob([JSON.stringify(bundle, null, 2)], {\n type: 'application/json',\n });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = `tilmart-data-${new Date().toISOString().slice(0, 10)}.json`;\n a.click();\n URL.revokeObjectURL(url);\n } catch {\n notify('We couldn’t prepare your data right now. Please try again.', undefined, 'error');\n } finally {\n this.exporting = false;\n }\n }\n\n async requestDeletion(): Promise<void> {\n if (this.requesting) return;\n this.requesting = true;\n try {\n await firstValueFrom(\n this.api.post('apps/commerce/data-request', {\n type: 'deletion',\n customerId: this.customerId,\n note: this.deletionReason || undefined,\n }),\n );\n this.deletionLodged = true;\n notify('Your deletion request has been lodged.', undefined, 'success');\n } catch {\n notify('We couldn’t lodge your request. Please try again.', undefined, 'error');\n } finally {\n this.requesting = false;\n }\n }\n}\n","<div class=\"x-pv\">\n <h1 class=\"x-pv-title\">Privacy & your data</h1>\n <p class=\"x-pv-intro\">\n Under the Nigeria Data Protection Act you can get a copy of the personal\n data we hold about you, and ask us to delete your account.\n </p>\n\n <section class=\"x-pv-card\">\n <h2>Download my data</h2>\n <p>\n A machine-readable copy of your profile, addresses, orders, returns,\n warranties, reviews, questions, support messages, notification\n preferences and saved tools.\n </p>\n <button\n type=\"button\"\n class=\"x-pv-btn\"\n [disabled]=\"exporting || !customerId\"\n (click)=\"downloadData()\"\n >\n {{ exporting ? 'Preparing…' : 'Download my data (JSON)' }}\n </button>\n </section>\n\n <section class=\"x-pv-card\">\n <h2>Delete my account</h2>\n @if (deletionLodged) {\n <p class=\"x-pv-ok\">\n Your request is lodged. Our team will complete it within 30 days and\n email you when it’s done.\n </p>\n } @else {\n <p>\n We’ll remove your personal details. Some records are kept where the\n law requires — see below.\n </p>\n <textarea\n class=\"x-pv-reason\"\n rows=\"2\"\n placeholder=\"Anything you'd like us to know (optional)\"\n [(ngModel)]=\"deletionReason\"\n ></textarea>\n <button\n type=\"button\"\n class=\"x-pv-btn x-pv-btn-danger\"\n [disabled]=\"requesting || !customerId\"\n (click)=\"requestDeletion()\"\n >\n {{ requesting ? 'Sending…' : 'Request account deletion' }}\n </button>\n }\n </section>\n\n <section class=\"x-pv-card x-pv-retain\">\n <h2>What we keep, and why</h2>\n <ul>\n <li><strong>Order & payment records</strong> — financial and tax law.</li>\n <li><strong>Warranty registrations & claim outcomes</strong> — our ongoing warranty obligation to the product owner.</li>\n <li><strong>Audit-log entries</strong> — security and accountability.</li>\n </ul>\n <p class=\"x-pv-fine\">\n Kept records are stripped of contact details where possible and are not\n used for marketing.\n </p>\n </section>\n</div>\n\n<style>\n .x-pv { max-width: 640px; }\n .x-pv-title { font-size: 22px; font-weight: 800; color: var(--color-text); margin: 0 0 6px; }\n .x-pv-intro { font-size: 14px; color: var(--color-text-muted); line-height: 1.6; margin: 0 0 20px; }\n .x-pv-card { border: 1px solid var(--color-border); border-radius: 12px; padding: 16px 18px; margin-bottom: 14px; }\n .x-pv-card h2 { font-size: 15px; font-weight: 700; color: var(--color-text); margin: 0 0 6px; }\n .x-pv-card p { font-size: 13.5px; color: var(--color-text-muted); line-height: 1.6; margin: 0 0 12px; }\n .x-pv-btn { font: inherit; font-weight: 700; font-size: 13.5px; padding: 10px 18px; border: 0; border-radius: 8px; background: var(--color-brand); color: #fff; cursor: pointer; }\n .x-pv-btn:disabled { opacity: 0.5; cursor: not-allowed; }\n .x-pv-btn-danger { background: var(--color-danger, #c0392b); }\n .x-pv-reason { width: 100%; box-sizing: border-box; font: inherit; padding: 8px 10px; border: 1px solid var(--color-border); border-radius: 6px; background: var(--color-surface, #fff); color: var(--color-text); margin-bottom: 12px; }\n .x-pv-ok { color: var(--color-text); }\n .x-pv-retain ul { margin: 0 0 8px; padding-left: 18px; font-size: 13.5px; color: var(--color-text-muted); line-height: 1.7; }\n .x-pv-fine { font-size: 12.5px; }\n</style>\n","import { Component, inject } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { BaseDirective, using } from '@thescaffold/ngx-core';\nimport { catchError, firstValueFrom, forkJoin, of, takeUntil } from 'rxjs';\n\ninterface ReturnLineVm {\n name: string;\n quantity: number;\n inspectionOutcome: string;\n acceptedQuantity?: number;\n disposition?: string;\n}\n\nconst STATUS_LABELS: Record<string, string> = {\n requested: 'Requested',\n approved: 'Approved',\n rejected: 'Rejected',\n awaiting_return: 'Awaiting your return',\n in_transit: 'On its way back',\n received: 'Received',\n inspecting: 'Being inspected',\n resolved: 'Resolved',\n cancelled: 'Cancelled',\n};\n\n// P5.9, RET-03 — one RMA in full: status, instructions, per-line\n// inspection outcome, the resolution and any refund amount.\n@Component({\n standalone: false,\n selector: 'x-account-return-detail',\n templateUrl: './return-detail.component.html',\n})\nexport class AccountReturnDetailComponent extends BaseDirective {\n private readonly route = inject(ActivatedRoute);\n\n loading = true;\n found = false;\n\n rmaNumber = '';\n status = '';\n statusLabel = '';\n reasonCode = '';\n method?: string;\n instructions?: string;\n whoPaysReturn?: string;\n resolution?: string;\n refundAmount?: number;\n createdAt?: string;\n resolvedAt?: string;\n orderId = '';\n lines: ReturnLineVm[] = [];\n\n override init = () => {\n const id = this.route.snapshot.paramMap.get('id') ?? '';\n if (!id) {\n this.loading = false;\n return;\n }\n\n forkJoin({\n request: this.apiService\n .on('apps/commerce/return-request')\n .getOne(id)\n .pipe(catchError(() => of(undefined))),\n lines: this.apiService\n .on('apps/commerce/return-line')\n .getMany({ returnRequestId: id, perPage: 100 } as any)\n .pipe(catchError(() => of({ data: [] }))),\n })\n .pipe(takeUntil(this.$))\n .subscribe(\n using((res: any) => {\n this.loading = false;\n const r = res?.request?.data;\n if (!r) return;\n this.found = true;\n this.rmaNumber = r.rmaNumber;\n this.status = r.status;\n this.statusLabel = STATUS_LABELS[r.status] ?? r.status;\n this.reasonCode = r.reasonCode;\n this.method = r.method;\n this.instructions = r.instructions;\n this.whoPaysReturn = r.whoPaysReturn;\n this.resolution = r.resolution;\n this.refundAmount = r.refundAmount != null ? Number(r.refundAmount) : undefined;\n this.createdAt = r.createdAt;\n this.resolvedAt = r.resolvedAt;\n this.orderId = r.orderId;\n const rawLines: any[] = res?.lines?.data ?? [];\n this.lines = rawLines.map((l: any) => ({\n name: 'Item',\n quantity: Number(l.quantity ?? 1),\n inspectionOutcome: l.inspectionOutcome,\n acceptedQuantity: l.acceptedQuantity,\n disposition: l.disposition,\n }));\n void this.nameLines(r.orderId, rawLines);\n }),\n );\n };\n\n private async nameLines(orderId: string, rawLines: any[]): Promise<void> {\n const orderLines: any = await firstValueFrom(\n this.apiService\n .on('apps/commerce/order-line')\n .getMany({ orderId, perPage: 200 } as any)\n .pipe(catchError(() => of({ data: [] }))),\n );\n const nameById = new Map<string, string>(\n (orderLines?.data ?? []).map((o: any) => [o.id, o.nameSnapshot || 'Item']),\n );\n this.lines = this.lines.map((vm, i) => ({\n ...vm,\n name: nameById.get(rawLines[i]?.orderLineId) ?? 'Item',\n }));\n }\n}\n","<a routerLink=\"../\" class=\"x-acct-btn-ghost\">‹ All returns</a>\n\n@if (loading) {\n <div class=\"x-acct-empty\" style=\"margin-top: 16px\">Loading…</div>\n} @else if (!found) {\n <div class=\"x-acct-card\" style=\"margin-top: 16px\">\n <div class=\"x-acct-empty\">We couldn't find that return.</div>\n </div>\n} @else {\n <header style=\"margin: 16px 0 8px\">\n <h2 class=\"x-acct-h2\">{{ rmaNumber }}</h2>\n <p class=\"x-acct-sub\">\n <span class=\"x-acct-pill\">{{ statusLabel }}</span>\n · requested {{ createdAt | date: 'mediumDate' }}\n @if (orderId) {\n · <a [routerLink]=\"['/account/orders', orderId]\">view order</a>\n }\n </p>\n </header>\n\n @if (instructions) {\n <div class=\"x-acct-card\">\n <strong>What to do</strong>\n <p class=\"x-acct-sub\" style=\"margin: 6px 0 0\">{{ instructions }}</p>\n </div>\n }\n\n <div class=\"x-acct-card\">\n <strong>Items</strong>\n @for (line of lines; track $index) {\n <div class=\"x-acct-row\">\n <span>\n {{ line.name }}\n <span class=\"x-acct-sub\" style=\"display: block; margin-top: 2px\">\n Qty {{ line.quantity }}\n @if (line.inspectionOutcome !== 'pending') {\n · inspected: {{ line.inspectionOutcome }}\n @if (line.acceptedQuantity != null) {\n ({{ line.acceptedQuantity }} accepted)\n }\n }\n </span>\n </span>\n </div>\n }\n </div>\n\n @if (resolution) {\n <div class=\"x-acct-card\">\n <strong>Outcome</strong>\n <div class=\"x-acct-row\">\n <span>{{ resolution }}</span>\n @if (refundAmount != null) {\n <strong>Refund: {{ refundAmount | number: '1.2-2' }}</strong>\n }\n </div>\n @if (resolvedAt) {\n <p class=\"x-acct-sub\" style=\"margin: 0\">Resolved {{ resolvedAt | date: 'medium' }}</p>\n }\n </div>\n }\n}\n","import { Component, inject } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { BaseDirective, notify } from '@thescaffold/ngx-core';\nimport { catchError, firstValueFrom, of } from 'rxjs';\nimport { AccountStoreService } from '../account-store.service';\n\ninterface ReturnableLineVm {\n orderLineId: string;\n name: string;\n orderedQty: number;\n selected: boolean;\n quantity: number;\n}\n\nconst REASONS: { code: string; label: string }[] = [\n { code: 'damaged_in_transit', label: 'Damaged in transit' },\n { code: 'wrong_item', label: 'Wrong item sent' },\n { code: 'not_as_described', label: 'Not as described' },\n { code: 'faulty_on_arrival', label: 'Faulty on arrival' },\n { code: 'changed_mind', label: 'Changed my mind' },\n { code: 'missing_parts', label: 'Missing parts' },\n];\n\nconst METHODS: { code: string; label: string }[] = [\n { code: 'pickup', label: 'Pickup from my address' },\n { code: 'drop_off', label: 'Drop off at a collection point' },\n { code: 'station', label: 'Drop at a pickup station' },\n];\n\n// P5.9, RET-02 — the self-serve return request. Pick items + a reason;\n// the eligibility check (window, who pays) runs before the RMA is minted.\n@Component({\n standalone: false,\n selector: 'x-account-return-request',\n templateUrl: './return-request.component.html',\n})\nexport class AccountReturnRequestComponent extends BaseDirective {\n private readonly route = inject(ActivatedRoute);\n private readonly store = inject(AccountStoreService);\n\n readonly reasons = REASONS;\n readonly methods = METHODS;\n\n loading = true;\n orderId = '';\n orderNumber = '';\n customerId = '';\n lines: ReturnableLineVm[] = [];\n\n reasonCode = '';\n method = 'pickup';\n notes = '';\n\n checking = false;\n eligibility: { eligible: boolean; reasons: string[]; windowDays: number; whoPaysReturn: string } | null = null;\n submitting = false;\n error = '';\n createdRma = '';\n\n override init = () => {\n this.orderId = this.route.snapshot.paramMap.get('id') ?? '';\n this.store.customer().subscribe((c) => (this.customerId = c?.id ?? ''));\n void this.load();\n };\n\n private async load(): Promise<void> {\n const [order, lines] = await Promise.all([\n firstValueFrom(\n this.apiService\n .on('apps/commerce/order')\n .getOne(this.orderId)\n .pipe(catchError(() => of(undefined))),\n ),\n firstValueFrom(\n this.apiService\n .on('apps/commerce/order-line')\n .getMany({ orderId: this.orderId, perPage: 200 } as any)\n .pipe(catchError(() => of({ data: [] }))),\n ),\n ]);\n this.orderNumber = (order as any)?.data?.orderNumber ?? '';\n this.lines = ((lines as any)?.data ?? []).map((l: any) => ({\n orderLineId: l.id,\n name: l.nameSnapshot || 'Item',\n orderedQty: Number(l.quantity ?? 1),\n selected: false,\n quantity: Number(l.quantity ?? 1),\n }));\n this.loading = false;\n }\n\n get selectedLines(): ReturnableLineVm[] {\n return this.lines.filter((l) => l.selected);\n }\n\n get canSubmit(): boolean {\n return (\n !!this.reasonCode &&\n this.selectedLines.length > 0 &&\n this.eligibility?.eligible === true\n );\n }\n\n async checkEligibility(): Promise<void> {\n if (!this.reasonCode) {\n this.eligibility = null;\n return;\n }\n this.checking = true;\n try {\n const res: any = await firstValueFrom(\n this.apiService.post('apps/commerce/return-request/eligibility', {\n orderId: this.orderId,\n reasonCode: this.reasonCode,\n }),\n );\n this.eligibility = res?.data ?? null;\n } catch {\n this.eligibility = null;\n } finally {\n this.checking = false;\n }\n }\n\n async submit(): Promise<void> {\n if (this.submitting || !this.canSubmit) return;\n this.submitting = true;\n this.error = '';\n try {\n const res: any = await firstValueFrom(\n this.apiService.post('apps/commerce/return-request/request', {\n orderId: this.orderId,\n customerId: this.customerId || undefined,\n reasonCode: this.reasonCode,\n method: this.method,\n notes: this.notes || undefined,\n lines: this.selectedLines.map((l) => ({\n orderLineId: l.orderLineId,\n quantity: Math.min(l.quantity, l.orderedQty),\n })),\n }),\n );\n if (res?.status === 'error') {\n this.error = res?.message ?? 'Could not create your return.';\n return;\n }\n this.createdRma = res?.data?.rmaNumber ?? '';\n notify('Return requested', undefined, 'success');\n } catch (err: any) {\n this.error = err?.error?.message ?? 'Could not create your return.';\n } finally {\n this.submitting = false;\n }\n }\n}\n","<a [routerLink]=\"['/account/orders', orderId]\" class=\"x-acct-btn-ghost\">‹ Back to order</a>\n\n@if (loading) {\n <div class=\"x-acct-empty\" style=\"margin-top: 16px\">Loading…</div>\n} @else if (createdRma) {\n <div class=\"x-acct-card\" style=\"margin-top: 16px\">\n <h2 class=\"x-acct-h2\">Return requested</h2>\n <p class=\"x-acct-sub\">\n Your RMA number is <strong>{{ createdRma }}</strong>. We've emailed the\n instructions — you can also see them on the returns page.\n </p>\n <a class=\"x-acct-btn\" routerLink=\"/account/returns\">View my returns</a>\n </div>\n} @else {\n <h2 class=\"x-acct-h2\" style=\"margin-top: 16px\">Return an item</h2>\n <p class=\"x-acct-sub\">Order {{ orderNumber }}</p>\n\n <div class=\"x-acct-card\">\n <strong>Which items?</strong>\n @for (line of lines; track line.orderLineId) {\n <div class=\"x-acct-row\">\n <label class=\"x-acct-checkline\" style=\"flex: 1\">\n <input type=\"checkbox\" [(ngModel)]=\"line.selected\" />\n {{ line.name }}\n </label>\n @if (line.selected && line.orderedQty > 1) {\n <input\n type=\"number\"\n min=\"1\"\n [max]=\"line.orderedQty\"\n [(ngModel)]=\"line.quantity\"\n style=\"width: 64px\"\n />\n }\n <span class=\"x-acct-sub\">of {{ line.orderedQty }}</span>\n </div>\n }\n </div>\n\n <div class=\"x-acct-card\">\n <div class=\"x-acct-field\">\n <label>Reason</label>\n <select aria-label=\"Reason\" [ngModel]=\"reasonCode\" (ngModelChange)=\"reasonCode = $event; checkEligibility()\">\n <option value=\"\">Choose a reason</option>\n @for (r of reasons; track r.code) {\n <option [value]=\"r.code\">{{ r.label }}</option>\n }\n </select>\n </div>\n\n @if (checking) {\n <div class=\"x-acct-empty\">Checking eligibility…</div>\n } @else if (eligibility) {\n @if (eligibility.eligible) {\n <div class=\"x-acct-ok\">\n Eligible — {{ eligibility.windowDays }}-day window.\n {{ eligibility.whoPaysReturn === 'customer' ? 'You cover return delivery for this reason.' : 'Return delivery is on us.' }}\n </div>\n } @else {\n <div class=\"x-acct-err\">\n @switch (eligibility.reasons[0]) {\n @case ('window-closed') { The return window for this order has closed. }\n @case ('change-of-mind-not-allowed') { Change-of-mind returns aren't accepted for these items. }\n @case ('returns-not-offered') { Returns aren't available for this order. }\n @default { This return isn't eligible. }\n }\n </div>\n }\n }\n\n <div class=\"x-acct-field\">\n <label>How will you return it?</label>\n <select aria-label=\"How will you return it?\" [(ngModel)]=\"method\">\n @for (m of methods; track m.code) {\n <option [value]=\"m.code\">{{ m.label }}</option>\n }\n </select>\n </div>\n\n <div class=\"x-acct-field\">\n <label>Anything else we should know? (optional)</label>\n <input [(ngModel)]=\"notes\" />\n </div>\n\n @if (error) {\n <div class=\"x-acct-err\">{{ error }}</div>\n }\n <button\n type=\"button\"\n class=\"x-acct-btn\"\n [disabled]=\"!canSubmit || submitting\"\n (click)=\"submit()\"\n >\n {{ submitting ? 'Submitting…' : 'Request return' }}\n </button>\n </div>\n}\n","import { Component, inject } from '@angular/core';\nimport { BaseDirective, using } from '@thescaffold/ngx-core';\nimport { catchError, firstValueFrom, of, takeUntil } from 'rxjs';\nimport { AccountStoreService } from '../account-store.service';\n\ninterface ReturnRowVm {\n id: string;\n rmaNumber: string;\n reasonCode: string;\n status: string;\n statusLabel: string;\n tone: string;\n resolution?: string;\n createdAt?: string;\n}\n\nconst STATUS_LABELS: Record<string, string> = {\n requested: 'Requested',\n approved: 'Approved',\n rejected: 'Rejected',\n awaiting_return: 'Awaiting your return',\n in_transit: 'On its way back',\n received: 'Received',\n inspecting: 'Being inspected',\n resolved: 'Resolved',\n cancelled: 'Cancelled',\n};\n\nconst REASON_LABELS: Record<string, string> = {\n damaged_in_transit: 'Damaged in transit',\n wrong_item: 'Wrong item',\n not_as_described: 'Not as described',\n faulty_on_arrival: 'Faulty on arrival',\n changed_mind: 'Changed mind',\n missing_parts: 'Missing parts',\n};\n\n// P5.9, RET-02/03 — the buyer's returns list. Each RMA links to its\n// detail (status timeline + resolution).\n@Component({\n standalone: false,\n selector: 'x-account-returns',\n templateUrl: './returns.component.html',\n})\nexport class AccountReturnsComponent extends BaseDirective {\n private readonly store = inject(AccountStoreService);\n\n loading = true;\n returns: ReturnRowVm[] = [];\n\n override init = () => {\n this.store\n .customer()\n .pipe(takeUntil(this.$))\n .subscribe(\n using((customer) => {\n if (!customer) {\n this.loading = false;\n return;\n }\n void this.load(customer.id);\n }),\n );\n };\n\n private async load(customerId: string): Promise<void> {\n const res: any = await firstValueFrom(\n this.apiService\n .on('apps/commerce/return-request')\n .getMany({ customerId, perPage: 100 } as any)\n .pipe(catchError(() => of({ data: [] }))),\n );\n this.returns = (res?.data ?? [])\n .slice()\n .sort((a: any, b: any) => this.ts(b.createdAt) - this.ts(a.createdAt))\n .map((r: any) => ({\n id: r.id,\n rmaNumber: r.rmaNumber,\n reasonCode: REASON_LABELS[r.reasonCode] ?? r.reasonCode,\n status: r.status,\n statusLabel: STATUS_LABELS[r.status] ?? r.status,\n tone:\n r.status === 'resolved'\n ? 'ok'\n : r.status === 'rejected' || r.status === 'cancelled'\n ? 'bad'\n : 'warn',\n resolution: r.resolution,\n createdAt: r.createdAt,\n }));\n this.loading = false;\n }\n\n private ts(v?: string): number {\n const t = v ? Date.parse(v) : NaN;\n return Number.isNaN(t) ? 0 : t;\n }\n}\n","<h2 class=\"x-acct-h2\">Returns</h2>\n<p class=\"x-acct-sub\">Start a return from any order — it'll show up here.</p>\n\n@if (loading) {\n <div class=\"x-acct-empty\">Loading…</div>\n} @else if (!returns.length) {\n <div class=\"x-acct-card\">\n <div class=\"x-acct-empty\">\n No returns yet. Open an order and choose \"Request a return\".\n </div>\n </div>\n} @else {\n <div class=\"x-acct-card\">\n @for (r of returns; track r.id) {\n <a class=\"x-acct-row\" [routerLink]=\"[r.id]\">\n <span>\n <strong>{{ r.rmaNumber }}</strong>\n <span class=\"x-acct-sub\" style=\"display: block; margin-top: 2px\">\n {{ r.reasonCode }} · {{ r.createdAt | date: 'mediumDate' }}\n </span>\n </span>\n <span\n class=\"x-acct-pill\"\n [class.x-acct-pill-ok]=\"r.tone === 'ok'\"\n [class.x-acct-pill-warn]=\"r.tone === 'warn'\"\n [class.x-acct-pill-bad]=\"r.tone === 'bad'\"\n >{{ r.statusLabel }}</span\n >\n @if (r.resolution) {\n <span class=\"x-acct-sub\">{{ r.resolution }}</span>\n }\n </a>\n }\n </div>\n}\n","import { Injectable, inject } from '@angular/core';\nimport { ApiService } from '@thescaffold/ngx-core';\nimport { firstValueFrom } from 'rxjs';\n\nexport interface AccountProfile {\n first_name?: string;\n last_name?: string;\n phone_number?: string;\n referral_code?: string;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AccountApiService {\n private readonly apiService = inject(ApiService);\n\n async getProfile(): Promise<AccountProfile> {\n const res: any = await firstValueFrom(\n this.apiService.get('apps/identity/attributes'),\n );\n return res?.data?.attributes?.user ?? {};\n }\n\n async updateProfile(payload: {\n phone_number?: string;\n referral_code?: string;\n }): Promise<void> {\n await firstValueFrom(\n this.apiService.patch('apps/identity/attributes/user', payload),\n );\n }\n\n async changePassword(payload: {\n currentSecret: string;\n newSecret: string;\n confirmNewSecret: string;\n }): Promise<void> {\n await firstValueFrom(\n this.apiService.post('apps/identity/reset-secret/change', payload),\n );\n }\n}\n","import { Component, inject } from '@angular/core';\nimport { ThemeService } from '@thescaffold/ngx-common';\nimport { BaseDirective, ControlService, notify } from '@thescaffold/ngx-core';\nimport { firstValueFrom } from 'rxjs';\nimport { AccountApiService } from '../../../services/account-api.service';\n\ntype ThemeChoice = 'light' | 'dark' | 'system';\n\nconst CATEGORIES: { key: string; label: string; locked?: boolean; consent?: boolean }[] = [\n { key: 'transactional', label: 'Order & payment updates', locked: true },\n { key: 'delivery', label: 'Delivery & dispatch' },\n { key: 'marketing', label: 'Offers & promotions', consent: true },\n { key: 'price_alert', label: 'Price drop alerts' },\n { key: 'back_in_stock', label: 'Back-in-stock alerts' },\n];\n\nconst CHANNELS: { key: string; label: string }[] = [\n { key: 'email', label: 'Email' },\n { key: 'sms', label: 'SMS' },\n { key: 'whatsapp', label: 'WhatsApp' },\n];\n\n// P5.3, ACC-01 / ACC-09 / ACC-10 — profile, password, theme and\n// notification preferences in one place. Theme rides the scaffold\n// PreferenceService (P5.2); notifications call `notification-preference/\n// mine` (P5.2's NotificationPreferenceWorkflow).\n@Component({\n standalone: false,\n selector: 'x-account-settings',\n templateUrl: './settings.component.html',\n})\nexport class AccountSettingsComponent extends BaseDirective {\n private readonly accountApi = inject(AccountApiService);\n private readonly themeService = inject(ThemeService);\n private readonly controlService = inject(ControlService);\n\n readonly categories = CATEGORIES;\n readonly channels = CHANNELS;\n\n loadingProfile = true;\n savingProfile = false;\n profileError = '';\n fullName = '';\n phoneNumber = '';\n\n currentSecret = '';\n newSecret = '';\n confirmNewSecret = '';\n showCurrentSecret = false;\n showNewSecret = false;\n showConfirmSecret = false;\n changingPassword = false;\n passwordError = '';\n passwordDone = false;\n\n theme: ThemeChoice = 'system';\n\n loadingPrefs = true;\n savingPrefs = false;\n prefsError = '';\n prefCategories: Record<string, string[]> = {};\n marketingConsent = false;\n quietHoursEnabled = false;\n quietHoursStart = '21:00';\n quietHoursEnd = '07:00';\n unsubscribedAll = false;\n\n get canChangePassword(): boolean {\n return (\n !!this.currentSecret &&\n !!this.newSecret &&\n this.newSecret === this.confirmNewSecret\n );\n }\n\n override init = () => {\n void this.loadProfile();\n void this.loadTheme();\n void this.loadPrefs();\n };\n\n private async loadProfile(): Promise<void> {\n try {\n const p = await this.accountApi.getProfile();\n this.fullName = [p.first_name, p.last_name].filter(Boolean).join(' ');\n this.phoneNumber = p.phone_number ?? '';\n } catch {\n this.profileError = 'Could not load your profile.';\n } finally {\n this.loadingProfile = false;\n }\n }\n\n private async loadTheme(): Promise<void> {\n try {\n const v = await firstValueFrom(this.themeService.get());\n if (v === 'light' || v === 'dark' || v === 'system') this.theme = v;\n } catch {\n // keep default\n }\n }\n\n private async loadPrefs(): Promise<void> {\n try {\n const res: any = await firstValueFrom(\n this.apiService.get('apps/commerce/notification-preference/mine'),\n );\n const pref = res?.data;\n if (pref) {\n this.prefCategories = pref.categories ?? {};\n this.marketingConsent = !!pref.marketingConsent;\n this.quietHoursEnabled = !!pref.quietHoursEnabled;\n this.quietHoursStart = pref.quietHoursStart ?? '21:00';\n this.quietHoursEnd = pref.quietHoursEnd ?? '07:00';\n this.unsubscribedAll = !!pref.unsubscribedAll;\n }\n } catch {\n this.prefsError = 'Could not load your notification preferences.';\n } finally {\n this.loadingPrefs = false;\n }\n }\n\n async saveProfile(): Promise<void> {\n if (this.savingProfile) return;\n this.savingProfile = true;\n this.profileError = '';\n try {\n await this.accountApi.updateProfile({ phone_number: this.phoneNumber });\n notify('Profile saved', undefined, 'success');\n } catch (err: any) {\n this.profileError = err?.error?.message ?? 'Could not save your profile.';\n } finally {\n this.savingProfile = false;\n }\n }\n\n async changePassword(): Promise<void> {\n if (this.changingPassword || !this.canChangePassword) return;\n this.changingPassword = true;\n this.passwordError = '';\n try {\n await this.accountApi.changePassword({\n currentSecret: this.currentSecret,\n newSecret: this.newSecret,\n confirmNewSecret: this.confirmNewSecret,\n });\n this.passwordDone = true;\n setTimeout(() => {\n this.controlService.logout();\n this.router.navigate(['/start']);\n }, 1500);\n } catch (err: any) {\n this.passwordError =\n err?.error?.message ?? 'Could not change your password.';\n } finally {\n this.changingPassword = false;\n }\n }\n\n setTheme(choice: ThemeChoice): void {\n this.theme = choice;\n this.themeService.set({ value: choice });\n }\n\n channelOn(category: string, channel: string): boolean {\n return (this.prefCategories[category] ?? []).includes(channel);\n }\n\n toggleChannel(category: string, channel: string): void {\n const set = new Set(this.prefCategories[category] ?? []);\n set.has(channel) ? set.delete(channel) : set.add(channel);\n this.prefCategories = { ...this.prefCategories, [category]: Array.from(set) };\n }\n\n async savePrefs(): Promise<void> {\n if (this.savingPrefs) return;\n this.savingPrefs = true;\n this.prefsError = '';\n try {\n await firstValueFrom(\n this.apiService.post('apps/commerce/notification-preference/mine', {\n categories: this.prefCategories,\n marketingConsent: this.marketingConsent,\n marketingConsentSource: 'account',\n quietHoursEnabled: this.quietHoursEnabled,\n quietHoursStart: this.quietHoursStart,\n quietHoursEnd: this.quietHoursEnd,\n unsubscribedAll: this.unsubscribedAll,\n }),\n );\n notify('Preferences saved', undefined, 'success');\n } catch (err: any) {\n this.prefsError = err?.error?.message ?? 'Could not save your preferences.';\n } finally {\n this.savingPrefs = false;\n }\n }\n}\n","<h2 class=\"x-acct-h2\">Settings</h2>\n<p class=\"x-acct-sub\">Profile, security, appearance and how we reach you.</p>\n\n<div class=\"x-acct-card\">\n <strong>Profile</strong>\n @if (loadingProfile) {\n <div class=\"x-acct-empty\">Loading…</div>\n } @else {\n <div style=\"margin-top: 14px\">\n <div class=\"x-acct-field\">\n <label>Name</label>\n <input [value]=\"fullName\" disabled />\n </div>\n <div class=\"x-acct-field\">\n <label>Phone number</label>\n <input type=\"tel\" [(ngModel)]=\"phoneNumber\" placeholder=\"+234…\" />\n </div>\n @if (profileError) {\n <div class=\"x-acct-err\">{{ profileError }}</div>\n }\n <button type=\"button\" class=\"x-acct-btn\" [disabled]=\"savingProfile\" (click)=\"saveProfile()\">\n {{ savingProfile ? 'Saving…' : 'Save profile' }}\n </button>\n </div>\n }\n</div>\n\n<div class=\"x-acct-card\">\n <strong>Change password</strong>\n <div style=\"margin-top: 14px\">\n <div class=\"x-acct-field\">\n <label>Current password</label>\n <div class=\"x-acct-pwd\">\n <input [type]=\"showCurrentSecret ? 'text' : 'password'\" [(ngModel)]=\"currentSecret\" />\n <button\n type=\"button\"\n class=\"x-acct-pwd-toggle\"\n [title]=\"showCurrentSecret ? 'Hide password' : 'Show password'\"\n [attr.aria-label]=\"showCurrentSecret ? 'Hide password' : 'Show password'\"\n (click)=\"showCurrentSecret = !showCurrentSecret\"\n >\n <i class=\"fa-solid\" [ngClass]=\"showCurrentSecret ? 'fa-eye' : 'fa-eye-slash'\"></i>\n </button>\n </div>\n </div>\n <div class=\"x-acct-field\">\n <label>New password</label>\n <div class=\"x-acct-pwd\">\n <input [type]=\"showNewSecret ? 'text' : 'password'\" [(ngModel)]=\"newSecret\" />\n <button\n type=\"button\"\n class=\"x-acct-pwd-toggle\"\n [title]=\"showNewSecret ? 'Hide password' : 'Show password'\"\n [attr.aria-label]=\"showNewSecret ? 'Hide password' : 'Show password'\"\n (click)=\"showNewSecret = !showNewSecret\"\n >\n <i class=\"fa-solid\" [ngClass]=\"showNewSecret ? 'fa-eye' : 'fa-eye-slash'\"></i>\n </button>\n </div>\n </div>\n <div class=\"x-acct-field\">\n <label>Confirm new password</label>\n <div class=\"x-acct-pwd\">\n <input [type]=\"showConfirmSecret ? 'text' : 'password'\" [(ngModel)]=\"confirmNewSecret\" />\n <button\n type=\"button\"\n class=\"x-acct-pwd-toggle\"\n [title]=\"showConfirmSecret ? 'Hide password' : 'Show password'\"\n [attr.aria-label]=\"showConfirmSecret ? 'Hide password' : 'Show password'\"\n (click)=\"showConfirmSecret = !showConfirmSecret\"\n >\n <i class=\"fa-solid\" [ngClass]=\"showConfirmSecret ? 'fa-eye' : 'fa-eye-slash'\"></i>\n </button>\n </div>\n </div>\n @if (passwordError) {\n <div class=\"x-acct-err\">{{ passwordError }}</div>\n }\n @if (passwordDone) {\n <div class=\"x-acct-ok\">Password changed. Signing you out…</div>\n }\n <button\n type=\"button\"\n class=\"x-acct-btn\"\n [disabled]=\"!canChangePassword || changingPassword\"\n (click)=\"changePassword()\"\n >\n {{ changingPassword ? 'Saving…' : 'Change password' }}\n </button>\n </div>\n</div>\n\n<div class=\"x-acct-card\">\n <strong>Appearance</strong>\n <div class=\"x-acct-field\" style=\"margin-top: 14px; max-width: 240px\">\n <label>Theme</label>\n <select aria-label=\"Theme\" [ngModel]=\"theme\" (ngModelChange)=\"setTheme($event)\">\n <option value=\"system\">Match my device</option>\n <option value=\"light\">Light</option>\n <option value=\"dark\">Dark</option>\n </select>\n </div>\n</div>\n\n<div class=\"x-acct-card\">\n <strong>Notifications</strong>\n @if (loadingPrefs) {\n <div class=\"x-acct-empty\">Loading…</div>\n } @else {\n <p class=\"x-acct-sub\" style=\"margin: 8px 0 16px\">\n Order and payment updates are always sent. Everything else is up to you.\n </p>\n\n @for (cat of categories; track cat.key) {\n <div style=\"padding: 10px 0; border-bottom: 1px solid var(--color-border-muted)\">\n <div style=\"font-weight: 700; font-size: 13.5px; margin-bottom: 8px\">\n {{ cat.label }}\n @if (cat.locked) {\n <span class=\"x-acct-pill\" style=\"margin-left: 6px\">Always on</span>\n }\n </div>\n @if (cat.consent && !marketingConsent) {\n <label class=\"x-acct-checkline\">\n <input type=\"checkbox\" [(ngModel)]=\"marketingConsent\" />\n Opt in to offers and promotions\n </label>\n } @else {\n <div style=\"display: flex; gap: 16px; flex-wrap: wrap\">\n @for (ch of channels; track ch.key) {\n <label class=\"x-acct-checkline\">\n <input\n type=\"checkbox\"\n [disabled]=\"cat.locked || unsubscribedAll || (cat.consent && !marketingConsent)\"\n [checked]=\"channelOn(cat.key, ch.key)\"\n (change)=\"toggleChannel(cat.key, ch.key)\"\n />\n {{ ch.label }}\n </label>\n }\n </div>\n @if (cat.consent && marketingConsent) {\n <label class=\"x-acct-checkline\" style=\"margin-top: 4px\">\n <input type=\"checkbox\" [(ngModel)]=\"marketingConsent\" />\n Keep me opted in to offers\n </label>\n }\n }\n </div>\n }\n\n <div style=\"padding: 14px 0\">\n <label class=\"x-acct-checkline\">\n <input type=\"checkbox\" [(ngModel)]=\"quietHoursEnabled\" />\n Quiet hours — hold non-urgent messages overnight\n </label>\n @if (quietHoursEnabled) {\n <div style=\"display: flex; gap: 12px; margin-top: 8px\">\n <div class=\"x-acct-field\" style=\"margin: 0\">\n <label>From</label>\n <input type=\"time\" [(ngModel)]=\"quietHoursStart\" />\n </div>\n <div class=\"x-acct-field\" style=\"margin: 0\">\n <label>To</label>\n <input type=\"time\" [(ngModel)]=\"quietHoursEnd\" />\n </div>\n </div>\n }\n </div>\n\n <label class=\"x-acct-checkline\">\n <input type=\"checkbox\" [(ngModel)]=\"unsubscribedAll\" />\n Unsubscribe from everything except order & payment updates\n </label>\n\n @if (prefsError) {\n <div class=\"x-acct-err\" style=\"margin-top: 12px\">{{ prefsError }}</div>\n }\n <button\n type=\"button\"\n class=\"x-acct-btn\"\n style=\"margin-top: 14px\"\n [disabled]=\"savingPrefs\"\n (click)=\"savePrefs()\"\n >\n {{ savingPrefs ? 'Saving…' : 'Save preferences' }}\n </button>\n }\n</div>\n","import { Component, inject } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { BaseDirective, using } from '@thescaffold/ngx-core';\nimport { catchError, firstValueFrom, of, takeUntil } from 'rxjs';\n\ninterface ClaimVm {\n id: string;\n status: string;\n faultDescription?: string;\n triageOutcome?: string;\n createdAt?: string;\n}\n\ninterface NoticeVm {\n id: string;\n severity: string;\n title: string;\n message: string;\n actionRequired?: string;\n}\n\n// P5.6, ACC-06 — one registered system: product, serial, dates,\n// certificate download (P4.18), any open safety notice for the variant,\n// and the claim history. \"Start a claim\" links to the claim form.\n@Component({\n standalone: false,\n selector: 'x-account-system-detail',\n templateUrl: './system-detail.component.html',\n})\nexport class AccountSystemDetailComponent extends BaseDirective {\n private readonly route = inject(ActivatedRoute);\n\n loading = true;\n found = false;\n\n warrantyId = '';\n productName = 'Registered unit';\n productSlug?: string;\n variantId = '';\n serial?: string;\n isVerified = false;\n startsAt?: string;\n expiresAt?: string;\n monthsLeft: number | null = null;\n status = '';\n orderLineId?: string;\n\n claims: ClaimVm[] = [];\n notices: NoticeVm[] = [];\n downloadingCert = false;\n\n override init = () => {\n this.warrantyId = this.route.snapshot.paramMap.get('id') ?? '';\n if (!this.warrantyId) {\n this.loading = false;\n return;\n }\n\n this.apiService\n .on('apps/commerce/warranty')\n .getOne(this.warrantyId)\n .pipe(\n takeUntil(this.$),\n catchError(() => of(undefined)),\n )\n .subscribe(\n using((res: any) => {\n const w = res?.data;\n if (!w) {\n this.loading = false;\n return;\n }\n this.found = true;\n this.variantId = w.variantId;\n this.isVerified = !!w.isVerified;\n this.startsAt = w.startsAt;\n this.expiresAt = w.expiresAt;\n this.status = w.status;\n this.orderLineId = w.orderLineId;\n this.monthsLeft = w.expiresAt\n ? Math.max(\n 0,\n Math.round(\n (Date.parse(w.expiresAt) - Date.now()) / (86_400_000 * 30.44),\n ),\n )\n : null;\n void this.hydrate(w);\n }),\n );\n };\n\n private async hydrate(w: any): Promise<void> {\n const [variant, claims, notices] = await Promise.all([\n firstValueFrom(\n this.apiService\n .on('apps/commerce/product-variant')\n .getOne(w.variantId)\n .pipe(catchError(() => of(undefined))),\n ),\n firstValueFrom(\n this.apiService\n .on('apps/commerce/warranty-claim')\n .getMany({ warrantyId: w.id, perPage: 50 } as any)\n .pipe(catchError(() => of({ data: [] }))),\n ),\n firstValueFrom(\n this.apiService\n .on('apps/commerce/safety-notice')\n .getMany({ variantId: w.variantId, status: 'published', perPage: 20 } as any)\n .pipe(catchError(() => of({ data: [] }))),\n ),\n ]);\n\n const v: any = variant;\n if (v?.data?.productId) {\n const p: any = await firstValueFrom(\n this.apiService\n .on('apps/commerce/product')\n .getOne(v.data.productId)\n .pipe(catchError(() => of(undefined))),\n );\n this.productName = p?.data?.name ?? v?.data?.sku ?? this.productName;\n this.productSlug = p?.data?.slug;\n }\n\n this.claims = ((claims as any)?.data ?? []).map((c: any) => ({\n id: c.id,\n status: c.status,\n faultDescription: c.faultDescription,\n triageOutcome: c.triageOutcome,\n createdAt: c.createdAt,\n }));\n this.notices = ((notices as any)?.data ?? []).map((n: any) => ({\n id: n.id,\n severity: n.severity,\n title: n.title,\n message: n.message,\n actionRequired: n.actionRequired,\n }));\n this.loading = false;\n }\n\n // The doc endpoint needs the session token (global AuthMiddleware), so a\n // plain <a href> won't do — fetch the print HTML through ApiService and\n // hand it to a new window (RET-06 \"certificates are downloadable\").\n async downloadCertificate(): Promise<void> {\n if (this.downloadingCert) return;\n this.downloadingCert = true;\n try {\n const res: any = await firstValueFrom(\n this.apiService.get(\n `apps/commerce/document/warranty/${this.warrantyId}/certificate`,\n { format: 'html' },\n ),\n );\n const html = typeof res === 'string' ? res : (res?.data ?? res?.html);\n const win = window.open('', '_blank');\n if (win && typeof html === 'string') {\n win.document.open();\n win.document.write(html);\n win.document.close();\n }\n } finally {\n this.downloadingCert = false;\n }\n }\n}\n","<a routerLink=\"../\" class=\"x-acct-btn-ghost\">‹ My Systems</a>\n\n@if (loading) {\n <div class=\"x-acct-empty\" style=\"margin-top: 16px\">Loading…</div>\n} @else if (!found) {\n <div class=\"x-acct-card\" style=\"margin-top: 16px\">\n <div class=\"x-acct-empty\">We couldn't find that record.</div>\n </div>\n} @else {\n <header style=\"margin: 16px 0 8px\">\n <h2 class=\"x-acct-h2\">\n @if (productSlug) {\n <a [routerLink]=\"['/p', productSlug]\">{{ productName }}</a>\n } @else {\n {{ productName }}\n }\n </h2>\n <p class=\"x-acct-sub\">\n @if (isVerified) {\n <span class=\"x-acct-pill x-acct-pill-ok\">Verified</span>\n } @else {\n <span class=\"x-acct-pill\">Self-added</span>\n }\n @if (status === 'claimed') {\n <span class=\"x-acct-pill x-acct-pill-warn\" style=\"margin-left: 6px\">Claim in progress</span>\n }\n </p>\n </header>\n\n @for (n of notices; track n.id) {\n <div\n class=\"x-acct-card\"\n [class.x-acct-pill-bad]=\"n.severity === 'recall'\"\n style=\"border-color: var(--color-warn)\"\n >\n <strong>⚠ {{ n.title }}</strong>\n <p class=\"x-acct-sub\" style=\"margin: 6px 0 0\">{{ n.message }}</p>\n @if (n.actionRequired) {\n <p style=\"margin: 8px 0 0; font-weight: 700; font-size: 13px\">\n What to do: {{ n.actionRequired }}\n </p>\n }\n </div>\n }\n\n <div class=\"x-acct-card\">\n <div class=\"x-acct-row\"><span>Serial</span><span>{{ serial || '—' }}</span></div>\n <div class=\"x-acct-row\"><span>Registered</span><span>{{ startsAt | date: 'mediumDate' }}</span></div>\n <div class=\"x-acct-row\">\n <span>Warranty until</span>\n <span>\n {{ expiresAt ? (expiresAt | date: 'mediumDate') : '—' }}\n @if (monthsLeft !== null) {\n ({{ monthsLeft > 0 ? monthsLeft + ' months left' : 'expired' }})\n }\n </span>\n </div>\n </div>\n\n <div class=\"x-acct-card\" style=\"display: flex; gap: 10px; flex-wrap: wrap\">\n @if (isVerified) {\n <button\n type=\"button\"\n class=\"x-acct-btn-ghost\"\n [disabled]=\"downloadingCert\"\n (click)=\"downloadCertificate()\"\n >\n {{ downloadingCert ? 'Opening…' : 'View / print certificate' }}\n </button>\n }\n <a class=\"x-acct-btn\" routerLink=\"claim\">Start a claim</a>\n </div>\n\n @if (claims.length) {\n <div class=\"x-acct-card\">\n <strong>Claims</strong>\n @for (c of claims; track c.id) {\n <div class=\"x-acct-row\">\n <span>\n {{ c.faultDescription || 'Claim' }}\n <span class=\"x-acct-sub\" style=\"display: block; margin-top: 2px\">\n {{ c.createdAt | date: 'mediumDate' }}\n @if (c.triageOutcome) {\n · {{ c.triageOutcome }}\n }\n </span>\n </span>\n <span class=\"x-acct-pill\">{{ c.status }}</span>\n </div>\n }\n </div>\n }\n}\n","import { Component, inject } from '@angular/core';\nimport { BaseDirective, notify, using } from '@thescaffold/ngx-core';\nimport { catchError, firstValueFrom, of, takeUntil } from 'rxjs';\nimport { AccountStoreService } from '../account-store.service';\n\ninterface SystemVm {\n id: string;\n name: string;\n slug?: string;\n serial?: string;\n isVerified: boolean;\n expiresAt?: string;\n monthsLeft: number | null;\n status: string;\n}\n\n// P5.6, ACC-06 / RET-06 — \"My Systems\": every product the customer owns,\n// its serial, its warranty standing. Auto-populated by delivery (P4.15);\n// a unit bought elsewhere is added here as unverified.\n@Component({\n standalone: false,\n selector: 'x-account-systems',\n templateUrl: './systems.component.html',\n})\nexport class AccountSystemsComponent extends BaseDirective {\n private readonly store = inject(AccountStoreService);\n\n loading = true;\n customerId = '';\n clientId = '';\n workspaceId = '';\n systems: SystemVm[] = [];\n\n adding = false;\n savingExternal = false;\n externalError = '';\n ext = { variantSku: '', serial: '', startsAt: '', months: 12 };\n\n override init = () => {\n this.store\n .customer()\n .pipe(takeUntil(this.$))\n .subscribe(\n using((customer) => {\n if (!customer) {\n this.loading = false;\n return;\n }\n this.customerId = customer.id;\n void this.load();\n }),\n );\n };\n\n private async load(): Promise<void> {\n const res: any = await firstValueFrom(\n this.apiService\n .on('apps/commerce/warranty')\n .getMany({ customerId: this.customerId, perPage: 200 } as any)\n .pipe(catchError(() => of({ data: [] }))),\n );\n const rows: any[] = res?.data ?? [];\n this.systems = await Promise.all(\n rows.map(async (w) => {\n const { name, slug } = await this.resolveProduct(w.variantId);\n const monthsLeft = w.expiresAt\n ? Math.max(\n 0,\n Math.round(\n (Date.parse(w.expiresAt) - Date.now()) / (86_400_000 * 30.44),\n ),\n )\n : null;\n return {\n id: w.id,\n name,\n slug,\n serial: undefined as string | undefined,\n isVerified: !!w.isVerified,\n expiresAt: w.expiresAt,\n monthsLeft,\n status: w.status,\n };\n }),\n );\n this.loading = false;\n }\n\n private async resolveProduct(\n variantId: string,\n ): Promise<{ name: string; slug?: string }> {\n try {\n const v: any = await firstValueFrom(\n this.apiService.on('apps/commerce/product-variant').getOne(variantId),\n );\n const productId = v?.data?.productId;\n if (productId) {\n const p: any = await firstValueFrom(\n this.apiService.on('apps/commerce/product').getOne(productId),\n );\n return { name: p?.data?.name ?? v?.data?.sku ?? 'Registered unit', slug: p?.data?.slug };\n }\n return { name: v?.data?.sku ?? 'Registered unit' };\n } catch {\n return { name: 'Registered unit' };\n }\n }\n\n async addExternal(): Promise<void> {\n if (this.savingExternal) return;\n const sku = this.ext.variantSku.trim();\n if (!sku) {\n this.externalError = 'Enter the product SKU or model shown on the label.';\n return;\n }\n this.savingExternal = true;\n this.externalError = '';\n try {\n // Resolve the SKU to a variant id (the label carries the SKU/model).\n const found: any = await firstValueFrom(\n this.apiService\n .on('apps/commerce/product-variant')\n .getMany({ sku, perPage: 1 } as any)\n .pipe(catchError(() => of({ data: [] }))),\n );\n const variantId = (found?.data ?? [])[0]?.id;\n if (!variantId) {\n this.externalError = \"We couldn't match that SKU to a product we stock.\";\n return;\n }\n const res: any = await firstValueFrom(\n this.apiService.post('apps/commerce/warranty/external', {\n customerId: this.customerId,\n variantId,\n serial: this.ext.serial || undefined,\n startsAt: this.ext.startsAt || undefined,\n months: this.ext.months || undefined,\n }),\n );\n if (res?.status === 'error') {\n this.externalError = res?.message ?? 'Could not add that unit.';\n return;\n }\n this.adding = false;\n this.ext = { variantSku: '', serial: '', startsAt: '', months: 12 };\n notify('Added to My Systems', undefined, 'success');\n await this.load();\n } catch (err: any) {\n this.externalError = err?.error?.message ?? 'Could not add that unit.';\n } finally {\n this.savingExternal = false;\n }\n }\n}\n","<h2 class=\"x-acct-h2\">My Systems</h2>\n<p class=\"x-acct-sub\">\n Every product you've bought from us, with its serial and warranty. Units bought\n elsewhere can be added for context.\n</p>\n\n@if (loading) {\n <div class=\"x-acct-empty\">Loading…</div>\n} @else {\n @if (adding) {\n <div class=\"x-acct-card\">\n <strong>Add a unit bought elsewhere</strong>\n <p class=\"x-acct-sub\" style=\"margin: 6px 0 14px\">\n Unverified — it won't have a Tilmart certificate, but the compatibility\n checker and support can use it.\n </p>\n <div class=\"x-acct-field\">\n <label>Product SKU / model (on the label)</label>\n <input [(ngModel)]=\"ext.variantSku\" />\n </div>\n <div class=\"x-acct-field\">\n <label>Serial number (optional)</label>\n <input [(ngModel)]=\"ext.serial\" />\n </div>\n <div class=\"x-acct-field\">\n <label>Purchase date (optional)</label>\n <input type=\"date\" [(ngModel)]=\"ext.startsAt\" />\n </div>\n <div class=\"x-acct-field\" style=\"max-width: 160px\">\n <label>Warranty months</label>\n <input type=\"number\" [(ngModel)]=\"ext.months\" />\n </div>\n @if (externalError) {\n <div class=\"x-acct-err\">{{ externalError }}</div>\n }\n <button type=\"button\" class=\"x-acct-btn\" [disabled]=\"savingExternal\" (click)=\"addExternal()\">\n {{ savingExternal ? 'Adding…' : 'Add unit' }}\n </button>\n <button type=\"button\" class=\"x-acct-btn-ghost\" (click)=\"adding = false\" style=\"margin-left: 8px\">\n Cancel\n </button>\n </div>\n } @else {\n <button type=\"button\" class=\"x-acct-btn\" (click)=\"adding = true\">Add external unit</button>\n }\n\n @for (sys of systems; track sys.id) {\n <a class=\"x-acct-card\" [routerLink]=\"[sys.id]\" style=\"display: block; text-decoration: none\">\n <div class=\"x-acct-row\" style=\"border-bottom: 0; padding-top: 0\">\n <strong style=\"color: var(--color-text)\">{{ sys.name }}</strong>\n @if (sys.isVerified) {\n <span class=\"x-acct-pill x-acct-pill-ok\">Verified</span>\n } @else {\n <span class=\"x-acct-pill\">Self-added</span>\n }\n </div>\n <p class=\"x-acct-sub\" style=\"margin: 0\">\n @if (sys.monthsLeft !== null) {\n @if (sys.monthsLeft > 0) {\n {{ sys.monthsLeft }} months of warranty left\n } @else {\n Warranty expired\n }\n } @else {\n Warranty length not set\n }\n @if (sys.status === 'claimed') {\n · claim in progress\n }\n </p>\n </a>\n } @empty {\n @if (!adding) {\n <div class=\"x-acct-empty\">\n Nothing here yet — a warranty is registered automatically when a\n serialised item is delivered.\n </div>\n }\n }\n}\n","import { Component, inject } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { BaseDirective, notify } from '@thescaffold/ngx-core';\nimport { firstValueFrom } from 'rxjs';\nimport { AccountStoreService } from '../account-store.service';\n\nconst SYMPTOM_OPTIONS = [\n 'Not turning on',\n 'Shuts down under load',\n 'Overheating',\n 'Error code / warning light',\n 'Unusual noise',\n 'Not charging',\n 'Reduced runtime / output',\n 'Physical damage',\n];\n\n// P5.6, RET-07 — the warranty claim form. Fault description + a symptoms\n// checklist + whether a Tilmart installer fitted it. Photo/video upload\n// is a follow-up (needs the blobs pipeline) — noted, not blocking.\n@Component({\n standalone: false,\n selector: 'x-account-warranty-claim',\n templateUrl: './warranty-claim.component.html',\n})\nexport class AccountWarrantyClaimComponent extends BaseDirective {\n private readonly route = inject(ActivatedRoute);\n private readonly store = inject(AccountStoreService);\n\n readonly symptomOptions = SYMPTOM_OPTIONS;\n\n warrantyId = '';\n customerId = '';\n\n faultDescription = '';\n symptoms: Record<string, boolean> = {};\n installedByTilmart = false;\n\n submitting = false;\n error = '';\n done = false;\n\n override init = () => {\n this.warrantyId = this.route.snapshot.paramMap.get('id') ?? '';\n this.store.customer().subscribe((c) => (this.customerId = c?.id ?? ''));\n };\n\n get canSubmit(): boolean {\n return !!this.faultDescription.trim();\n }\n\n async submit(): Promise<void> {\n if (this.submitting || !this.canSubmit) return;\n this.submitting = true;\n this.error = '';\n try {\n const res: any = await firstValueFrom(\n this.apiService.post(\n `apps/commerce/warranty/${this.warrantyId}/claim`,\n {\n customerId: this.customerId || undefined,\n faultDescription: this.faultDescription.trim(),\n symptoms: Object.keys(this.symptoms).filter((k) => this.symptoms[k]),\n installedByTilmart: this.installedByTilmart,\n },\n ),\n );\n if (res?.status === 'error') {\n this.error = res?.message ?? 'Could not submit your claim.';\n return;\n }\n this.done = true;\n notify('Claim submitted', undefined, 'success');\n } catch (err: any) {\n this.error = err?.error?.message ?? 'Could not submit your claim.';\n } finally {\n this.submitting = false;\n }\n }\n}\n","<a routerLink=\"../\" class=\"x-acct-btn-ghost\">‹ Back to system</a>\n\n@if (done) {\n <div class=\"x-acct-card\" style=\"margin-top: 16px\">\n <h2 class=\"x-acct-h2\">Claim submitted</h2>\n <p class=\"x-acct-sub\">\n We'll review the details and get back to you with next steps. You can see\n the status on the system's page.\n </p>\n <a class=\"x-acct-btn\" routerLink=\"../\">Back to system</a>\n </div>\n} @else {\n <h2 class=\"x-acct-h2\" style=\"margin-top: 16px\">Start a warranty claim</h2>\n <p class=\"x-acct-sub\">Tell us what's wrong and we'll take it from there.</p>\n\n <div class=\"x-acct-card\">\n <div class=\"x-acct-field\">\n <label>What's the problem?</label>\n <input\n [(ngModel)]=\"faultDescription\"\n placeholder=\"Describe the fault in your own words\"\n />\n </div>\n\n <div style=\"margin: 8px 0 16px\">\n <div style=\"font-weight: 700; font-size: 13px; margin-bottom: 8px\">Symptoms</div>\n @for (s of symptomOptions; track s) {\n <label class=\"x-acct-checkline\">\n <input type=\"checkbox\" [(ngModel)]=\"symptoms[s]\" />\n {{ s }}\n </label>\n }\n </div>\n\n <label class=\"x-acct-checkline\">\n <input type=\"checkbox\" [(ngModel)]=\"installedByTilmart\" />\n A Tilmart installer fitted this unit\n </label>\n\n @if (error) {\n <div class=\"x-acct-err\" style=\"margin-top: 12px\">{{ error }}</div>\n }\n <button\n type=\"button\"\n class=\"x-acct-btn\"\n style=\"margin-top: 14px\"\n [disabled]=\"!canSubmit || submitting\"\n (click)=\"submit()\"\n >\n {{ submitting ? 'Submitting…' : 'Submit claim' }}\n </button>\n <p class=\"x-acct-sub\" style=\"margin-top: 12px\">\n Photos and video help us diagnose faster — you'll be able to add them once\n the claim is open.\n </p>\n </div>\n}\n","import { Component, inject } from '@angular/core';\nimport { BaseDirective, notify, using } from '@thescaffold/ngx-core';\nimport { catchError, firstValueFrom, of, takeUntil } from 'rxjs';\nimport { AccountStoreService } from '../account-store.service';\n\ninterface WishlistItemVm {\n id: string;\n variantId: string;\n name: string;\n slug?: string;\n}\n\ninterface WishlistVm {\n id: string;\n name: string;\n isPublic: boolean;\n shareToken?: string;\n items: WishlistItemVm[];\n renaming?: boolean;\n draftName?: string;\n}\n\n// P5.3, CART-06 — saved lists. View / rename / delete a list, toggle\n// public sharing, remove an item. Adding items happens on the product\n// pages (a wishlist button there, P2 PDP work).\n@Component({\n standalone: false,\n selector: 'x-account-wishlists',\n templateUrl: './wishlists.component.html',\n})\nexport class AccountWishlistsComponent extends BaseDirective {\n private readonly store = inject(AccountStoreService);\n\n loading = true;\n customerId = '';\n wishlists: WishlistVm[] = [];\n\n override init = () => {\n this.store\n .customer()\n .pipe(takeUntil(this.$))\n .subscribe(\n using((customer) => {\n if (!customer) {\n this.loading = false;\n return;\n }\n this.customerId = customer.id;\n void this.load();\n }),\n );\n };\n\n private async load(): Promise<void> {\n const listsRes: any = await firstValueFrom(\n this.apiService\n .on('apps/commerce/wishlist')\n .getMany({ customerId: this.customerId, perPage: 50 } as any)\n .pipe(catchError(() => of({ data: [] }))),\n );\n const lists: any[] = listsRes?.data ?? [];\n\n const withItems = await Promise.all(\n lists.map(async (list) => {\n const itemsRes: any = await firstValueFrom(\n this.apiService\n .on('apps/commerce/wishlist-item')\n .getMany({ wishlistId: list.id, perPage: 200 } as any)\n .pipe(catchError(() => of({ data: [] }))),\n );\n const items = await Promise.all(\n (itemsRes?.data ?? []).map((it: any) => this.resolveItem(it)),\n );\n return {\n id: list.id,\n name: list.name,\n isPublic: !!list.isPublic,\n shareToken: list.shareToken,\n items,\n } as WishlistVm;\n }),\n );\n this.wishlists = withItems;\n this.loading = false;\n }\n\n private async resolveItem(it: any): Promise<WishlistItemVm> {\n let name = 'Saved item';\n let slug: string | undefined;\n try {\n const v: any = await firstValueFrom(\n this.apiService.on('apps/commerce/product-variant').getOne(it.variantId),\n );\n const productId = v?.data?.productId;\n if (productId) {\n const p: any = await firstValueFrom(\n this.apiService.on('apps/commerce/product').getOne(productId),\n );\n name = p?.data?.name ?? v?.data?.sku ?? name;\n slug = p?.data?.slug;\n }\n } catch {\n // leave the fallback name\n }\n return { id: it.id, variantId: it.variantId, name, slug };\n }\n\n startRename(list: WishlistVm): void {\n list.renaming = true;\n list.draftName = list.name;\n }\n\n async saveName(list: WishlistVm): Promise<void> {\n const name = (list.draftName ?? '').trim();\n if (!name) return;\n try {\n await firstValueFrom(\n this.apiService.on('apps/commerce/wishlist').update(list.id, { name }),\n );\n list.name = name;\n list.renaming = false;\n } catch {\n notify('Could not rename that list.', undefined, 'error');\n }\n }\n\n async togglePublic(list: WishlistVm): Promise<void> {\n try {\n await firstValueFrom(\n this.apiService\n .on('apps/commerce/wishlist')\n .update(list.id, { isPublic: !list.isPublic }),\n );\n await this.load();\n } catch {\n notify('Could not update sharing.', undefined, 'error');\n }\n }\n\n async removeList(list: WishlistVm): Promise<void> {\n if (!confirm(`Delete \"${list.name}\"?`)) return;\n try {\n await firstValueFrom(this.apiService.on('apps/commerce/wishlist').remove(list.id));\n await this.load();\n } catch {\n notify('Could not delete that list.', undefined, 'error');\n }\n }\n\n async removeItem(list: WishlistVm, item: WishlistItemVm): Promise<void> {\n try {\n await firstValueFrom(\n this.apiService.on('apps/commerce/wishlist-item').remove(item.id),\n );\n list.items = list.items.filter((x) => x.id !== item.id);\n } catch {\n notify('Could not remove that item.', undefined, 'error');\n }\n }\n}\n","<h2 class=\"x-acct-h2\">Wishlists</h2>\n<p class=\"x-acct-sub\">Add items from any product page. Share a list with an installer or a colleague.</p>\n\n@if (loading) {\n <div class=\"x-acct-empty\">Loading…</div>\n} @else if (!wishlists.length) {\n <div class=\"x-acct-card\">\n <div class=\"x-acct-empty\">\n No saved lists yet — tap the heart on a product to start one.\n </div>\n </div>\n} @else {\n @for (list of wishlists; track list.id) {\n <div class=\"x-acct-card\">\n <div class=\"x-acct-row\" style=\"border-bottom: 0; padding-top: 0\">\n @if (list.renaming) {\n <input class=\"x-acct-field\" style=\"margin: 0; max-width: 240px\" [(ngModel)]=\"list.draftName\" />\n <span>\n <button type=\"button\" class=\"x-acct-btn-ghost\" (click)=\"saveName(list)\">Save</button>\n <button type=\"button\" class=\"x-acct-btn-ghost\" (click)=\"list.renaming = false\" style=\"margin-left: 6px\">\n Cancel\n </button>\n </span>\n } @else {\n <strong>\n {{ list.name }}\n @if (list.isPublic) {\n <span class=\"x-acct-pill x-acct-pill-ok\" style=\"margin-left: 6px\">Shared</span>\n }\n </strong>\n <span>\n <button type=\"button\" class=\"x-acct-btn-ghost\" (click)=\"startRename(list)\">Rename</button>\n <button type=\"button\" class=\"x-acct-btn-ghost\" (click)=\"togglePublic(list)\" style=\"margin-left: 6px\">\n {{ list.isPublic ? 'Make private' : 'Share' }}\n </button>\n <button type=\"button\" class=\"x-acct-btn-ghost\" (click)=\"removeList(list)\" style=\"margin-left: 6px\">\n Delete\n </button>\n </span>\n }\n </div>\n\n @for (item of list.items; track item.id) {\n <div class=\"x-acct-row\">\n @if (item.slug) {\n <a [routerLink]=\"['/p', item.slug]\">{{ item.name }}</a>\n } @else {\n <span>{{ item.name }}</span>\n }\n <button type=\"button\" class=\"x-acct-btn-ghost\" (click)=\"removeItem(list, item)\">Remove</button>\n </div>\n } @empty {\n <div class=\"x-acct-empty\">This list is empty.</div>\n }\n </div>\n }\n}\n","import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { SharedModule } from '@thescaffold/ngx-core';\nimport { AccountStoreService } from './account-store.service';\nimport { AccountComponent } from './account.component';\nimport { AccountAddressesComponent } from './addresses/addresses.component';\nimport { AccountDashboardComponent } from './dashboard/dashboard.component';\nimport { AccountOrderDetailComponent } from './order-detail/order-detail.component';\nimport { AccountOrdersComponent } from './orders/orders.component';\nimport { AccountPaymentsComponent } from './payments/payments.component';\nimport { AccountPrivacyComponent } from './privacy/privacy.component';\nimport { AccountReturnDetailComponent } from './returns/return-detail.component';\nimport { AccountReturnRequestComponent } from './returns/return-request.component';\nimport { AccountReturnsComponent } from './returns/returns.component';\nimport { AccountSettingsComponent } from './settings/settings.component';\nimport { AccountSystemDetailComponent } from './systems/system-detail.component';\nimport { AccountSystemsComponent } from './systems/systems.component';\nimport { AccountWarrantyClaimComponent } from './systems/warranty-claim.component';\nimport { AccountWishlistsComponent } from './wishlists/wishlists.component';\n\n@NgModule({\n declarations: [\n AccountComponent,\n AccountDashboardComponent,\n AccountOrdersComponent,\n AccountOrderDetailComponent,\n AccountAddressesComponent,\n AccountPaymentsComponent,\n AccountWishlistsComponent,\n AccountSettingsComponent,\n AccountSystemsComponent,\n AccountSystemDetailComponent,\n AccountWarrantyClaimComponent,\n AccountReturnsComponent,\n AccountReturnDetailComponent,\n AccountReturnRequestComponent,\n AccountPrivacyComponent,\n ],\n providers: [AccountStoreService],\n imports: [\n SharedModule,\n RouterModule.forChild([\n {\n path: '',\n component: AccountComponent,\n children: [\n { path: '', pathMatch: 'full', redirectTo: 'dashboard' },\n { path: 'dashboard', component: AccountDashboardComponent },\n { path: 'orders', component: AccountOrdersComponent },\n { path: 'orders/:id', component: AccountOrderDetailComponent },\n { path: 'orders/:id/return', component: AccountReturnRequestComponent },\n { path: 'returns', component: AccountReturnsComponent },\n { path: 'returns/:id', component: AccountReturnDetailComponent },\n { path: 'systems', component: AccountSystemsComponent },\n { path: 'systems/:id', component: AccountSystemDetailComponent },\n { path: 'systems/:id/claim', component: AccountWarrantyClaimComponent },\n { path: 'addresses', component: AccountAddressesComponent },\n { path: 'payments', component: AccountPaymentsComponent },\n { path: 'wishlists', component: AccountWishlistsComponent },\n { path: 'settings', component: AccountSettingsComponent },\n { path: 'privacy', component: AccountPrivacyComponent },\n ],\n },\n ]),\n ],\n})\nexport class AccountModule {}\n"],"names":["i1","STATUS_LABELS","i2"],"mappings":"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"}
|
|
@@ -242,7 +242,7 @@ class PagesModule {
|
|
|
242
242
|
// (ACC-02…ACC-10). Guest-first — the shell shows a sign-in
|
|
243
243
|
// prompt, no route guard.
|
|
244
244
|
path: 'account',
|
|
245
|
-
loadChildren: () => import('./isaiahiroko-tilmart-ngx-apps-buyer-account.module-
|
|
245
|
+
loadChildren: () => import('./isaiahiroko-tilmart-ngx-apps-buyer-account.module-CLVC0SX-.mjs').then((m) => m.AccountModule),
|
|
246
246
|
},
|
|
247
247
|
{
|
|
248
248
|
path: 'invite/:inviteId',
|
|
@@ -404,7 +404,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
|
|
|
404
404
|
// (ACC-02…ACC-10). Guest-first — the shell shows a sign-in
|
|
405
405
|
// prompt, no route guard.
|
|
406
406
|
path: 'account',
|
|
407
|
-
loadChildren: () => import('./isaiahiroko-tilmart-ngx-apps-buyer-account.module-
|
|
407
|
+
loadChildren: () => import('./isaiahiroko-tilmart-ngx-apps-buyer-account.module-CLVC0SX-.mjs').then((m) => m.AccountModule),
|
|
408
408
|
},
|
|
409
409
|
{
|
|
410
410
|
path: 'invite/:inviteId',
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"isaiahiroko-tilmart-ngx-apps-buyer-account.module-BTRypX8P.mjs","sources":["../../../projects/buyer/src/lib/pages/account/account-store.service.ts","../../../projects/buyer/src/lib/pages/account/account.component.ts","../../../projects/buyer/src/lib/pages/account/account.component.html","../../../projects/buyer/src/lib/pages/account/addresses/addresses.component.ts","../../../projects/buyer/src/lib/pages/account/addresses/addresses.component.html","../../../projects/buyer/src/lib/pages/account/order-status.ts","../../../projects/buyer/src/lib/pages/account/dashboard/dashboard.component.ts","../../../projects/buyer/src/lib/pages/account/dashboard/dashboard.component.html","../../../projects/buyer/src/lib/pages/account/order-detail/order-detail.component.ts","../../../projects/buyer/src/lib/pages/account/order-detail/order-detail.component.html","../../../projects/buyer/src/lib/pages/account/orders/orders.component.ts","../../../projects/buyer/src/lib/pages/account/orders/orders.component.html","../../../projects/buyer/src/lib/pages/account/payments/payments.component.ts","../../../projects/buyer/src/lib/pages/account/payments/payments.component.html","../../../projects/buyer/src/lib/pages/account/privacy/privacy.component.ts","../../../projects/buyer/src/lib/pages/account/privacy/privacy.component.html","../../../projects/buyer/src/lib/pages/account/returns/return-detail.component.ts","../../../projects/buyer/src/lib/pages/account/returns/return-detail.component.html","../../../projects/buyer/src/lib/pages/account/returns/return-request.component.ts","../../../projects/buyer/src/lib/pages/account/returns/return-request.component.html","../../../projects/buyer/src/lib/pages/account/returns/returns.component.ts","../../../projects/buyer/src/lib/pages/account/returns/returns.component.html","../../../projects/buyer/src/lib/services/account-api.service.ts","../../../projects/buyer/src/lib/pages/account/settings/settings.component.ts","../../../projects/buyer/src/lib/pages/account/settings/settings.component.html","../../../projects/buyer/src/lib/pages/account/systems/system-detail.component.ts","../../../projects/buyer/src/lib/pages/account/systems/system-detail.component.html","../../../projects/buyer/src/lib/pages/account/systems/systems.component.ts","../../../projects/buyer/src/lib/pages/account/systems/systems.component.html","../../../projects/buyer/src/lib/pages/account/systems/warranty-claim.component.ts","../../../projects/buyer/src/lib/pages/account/systems/warranty-claim.component.html","../../../projects/buyer/src/lib/pages/account/wishlists/wishlists.component.ts","../../../projects/buyer/src/lib/pages/account/wishlists/wishlists.component.html","../../../projects/buyer/src/lib/pages/account/account.module.ts"],"sourcesContent":["import { Injectable, inject } from '@angular/core';\nimport { ApiService, ControlService } from '@thescaffold/ngx-core';\nimport { Observable, ReplaySubject, catchError, firstValueFrom, map, of } from 'rxjs';\n\nexport interface AccountCustomer {\n id: string;\n userId?: string;\n name?: string;\n email?: string;\n phone?: string;\n}\n\n// P5.3 — resolves the signed-in visitor's commerce `Customer` once and\n// shares it across the account sub-pages (each of orders / addresses /\n// payments / wishlists needs the `customerId` to filter its own list).\n// A guest has no `Customer` here — the shell shows a sign-in prompt\n// instead of the sub-pages.\n@Injectable()\nexport class AccountStoreService {\n private readonly apiService = inject(ApiService);\n private readonly controlService = inject(ControlService);\n\n private customer$ = new ReplaySubject<AccountCustomer | null>(1);\n private loaded = false;\n\n customer(): Observable<AccountCustomer | null> {\n if (!this.loaded) {\n this.loaded = true;\n this.load();\n }\n return this.customer$.asObservable();\n }\n\n async refreshCustomer(): Promise<AccountCustomer | null> {\n const c = await this.fetch();\n this.customer$.next(c);\n return c;\n }\n\n private load(): void {\n this.fetch().then((c) => this.customer$.next(c));\n }\n\n private async fetch(): Promise<AccountCustomer | null> {\n if (!this.controlService.isLoggedIn()) return null;\n const userId = this.controlService.getContext()?.userId;\n if (!userId) return null;\n return firstValueFrom(\n this.apiService\n .on('apps/commerce/customer')\n .getMany({ userId, perPage: 1 } as any)\n .pipe(\n map((res: any) => {\n const row = (res?.data ?? [])[0];\n return row ? (row as AccountCustomer) : null;\n }),\n catchError(() => of(null)),\n ),\n );\n }\n}\n","import { Component, ViewEncapsulation, inject } from '@angular/core';\nimport { BaseDirective, ControlService, using } from '@thescaffold/ngx-core';\nimport { takeUntil } from 'rxjs';\nimport { AccountStoreService } from './account-store.service';\n\ninterface AccountNavItem {\n path: string;\n label: string;\n icon: string;\n}\n\nconst NAV: AccountNavItem[] = [\n { path: 'dashboard', label: 'Overview', icon: 'fa-gauge' },\n { path: 'orders', label: 'Orders', icon: 'fa-box' },\n { path: 'systems', label: 'My Systems', icon: 'fa-solar-panel' },\n { path: 'returns', label: 'Returns', icon: 'fa-rotate-left' },\n { path: 'addresses', label: 'Addresses', icon: 'fa-location-dot' },\n { path: 'payments', label: 'Payments', icon: 'fa-credit-card' },\n { path: 'wishlists', label: 'Wishlists', icon: 'fa-heart' },\n { path: 'settings', label: 'Settings', icon: 'fa-gear' },\n { path: 'privacy', label: 'Privacy & data', icon: 'fa-shield-halved' },\n];\n\n// P5.3, ACC-02…ACC-10 — the storefront account area. A shell with a nav\n// rail + `<router-outlet>`; the signed-in `Customer` is resolved once\n// here (via `AccountStoreService`) and read by every sub-page. Guest-\n// first like the rest of the storefront: a signed-out visitor sees a\n// sign-in prompt, not a redirect.\n@Component({\n standalone: false,\n selector: 'x-account',\n templateUrl: './account.component.html',\n styleUrl: './account.component.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class AccountComponent extends BaseDirective {\n private readonly controlService = inject(ControlService);\n private readonly store = inject(AccountStoreService);\n\n readonly nav = NAV;\n isLoggedIn = false;\n loading = true;\n customerName = '';\n\n override init = () => {\n this.isLoggedIn = this.controlService.isLoggedIn();\n if (!this.isLoggedIn) {\n this.loading = false;\n return;\n }\n this.store\n .customer()\n .pipe(takeUntil(this.$))\n .subscribe(\n using((customer) => {\n this.loading = false;\n this.customerName =\n customer?.name || customer?.email || customer?.phone || 'Your account';\n }),\n );\n };\n\n signIn(): void {\n this.router.navigate(['/start']);\n }\n}\n","<div class=\"x-acct\">\n @if (loading) {\n <div class=\"x-acct-note\">Loading your account…</div>\n } @else if (!isLoggedIn) {\n <div class=\"x-acct-signin\">\n <h1>Your account</h1>\n <p>Sign in to see your orders, saved systems, addresses and settings.</p>\n <button type=\"button\" class=\"x-acct-btn\" (click)=\"signIn()\">Sign in</button>\n <p class=\"x-acct-muted\">\n No account yet? You can still\n <a routerLink=\"/track\">track an order</a> with your order number.\n </p>\n </div>\n } @else {\n <header class=\"x-acct-head\">\n <h1>{{ customerName }}</h1>\n </header>\n <div class=\"x-acct-body\">\n <nav class=\"x-acct-nav\">\n @for (item of nav; track item.path) {\n <a\n [routerLink]=\"item.path\"\n routerLinkActive=\"x-acct-nav-on\"\n class=\"x-acct-nav-link\"\n >\n <i class=\"fa-solid\" [class]=\"item.icon\"></i>\n <span>{{ item.label }}</span>\n </a>\n }\n </nav>\n <main class=\"x-acct-main\">\n <router-outlet></router-outlet>\n </main>\n </div>\n }\n</div>\n","import { Component, inject } from '@angular/core';\nimport { BaseDirective, notify, using } from '@thescaffold/ngx-core';\nimport { catchError, firstValueFrom, of, takeUntil } from 'rxjs';\nimport { AccountStoreService } from '../account-store.service';\nimport { StaticListOption, StaticListService } from '../../../services/static-list.service';\n\ninterface AddressVm {\n id: string;\n label: string;\n state?: string;\n lga?: string;\n city?: string;\n street: string;\n area?: string;\n landmark?: string;\n buildingInfo?: string;\n notes?: string;\n isDefault: boolean;\n}\n\ntype AddressForm = Omit<AddressVm, 'id' | 'isDefault'> & { id?: string };\n\nfunction blankForm(): AddressForm {\n return {\n label: '',\n state: '',\n lga: '',\n city: '',\n street: '',\n area: '',\n landmark: '',\n buildingInfo: '',\n notes: '',\n };\n}\n\n// P5.3, ACC-04 — the address book. Labelled addresses with one default,\n// editable and deletable, shared with checkout + (R2) installation.\n@Component({\n standalone: false,\n selector: 'x-account-addresses',\n templateUrl: './addresses.component.html',\n})\nexport class AccountAddressesComponent extends BaseDirective {\n private readonly store = inject(AccountStoreService);\n private readonly staticList = inject(StaticListService);\n\n states: StaticListOption[] = [];\n lgas: StaticListOption[] = [];\n lgasLoading = false;\n\n loading = true;\n customerId = '';\n addresses: AddressVm[] = [];\n\n editing = false;\n saving = false;\n form: AddressForm = blankForm();\n formError = '';\n\n override init = () => {\n void this.staticList.getStates().then((states) => (this.states = states));\n this.store\n .customer()\n .pipe(takeUntil(this.$))\n .subscribe(\n using((customer) => {\n if (!customer) {\n this.loading = false;\n return;\n }\n this.customerId = customer.id;\n void this.load();\n }),\n );\n };\n\n async onFormStateChange(): Promise<void> {\n this.form.lga = '';\n await this.loadLgas(this.form.state);\n }\n\n private async loadLgas(state?: string): Promise<void> {\n if (!state) {\n this.lgas = [];\n return;\n }\n this.lgasLoading = true;\n try {\n this.lgas = await this.staticList.getLgas(state).catch(() => []);\n } finally {\n this.lgasLoading = false;\n }\n }\n\n private async load(): Promise<void> {\n const res: any = await firstValueFrom(\n this.apiService\n .on('apps/commerce/address')\n .getMany({ customerId: this.customerId, perPage: 100 } as any)\n .pipe(catchError(() => of({ data: [] }))),\n );\n this.addresses = (res?.data ?? []).map((a: any) => ({\n id: a.id,\n label: a.label,\n state: a.state,\n lga: a.lga,\n city: a.city,\n street: a.street,\n area: a.area,\n landmark: a.landmark,\n buildingInfo: a.buildingInfo,\n notes: a.notes,\n isDefault: !!a.isDefault,\n }));\n this.loading = false;\n }\n\n startAdd(): void {\n this.form = blankForm();\n this.formError = '';\n this.editing = true;\n this.lgas = [];\n }\n\n startEdit(a: AddressVm): void {\n this.form = { ...a };\n this.formError = '';\n this.editing = true;\n void this.loadLgas(this.form.state);\n }\n\n cancel(): void {\n this.editing = false;\n }\n\n async save(): Promise<void> {\n if (this.saving) return;\n if (!this.form.label.trim() || !this.form.state || !this.form.street.trim()) {\n this.formError = 'Label, state and street are required.';\n return;\n }\n this.saving = true;\n this.formError = '';\n\n const payload: any = {\n customerId: this.customerId,\n label: this.form.label.trim(),\n state: this.form.state,\n lga: this.form.lga || undefined,\n city: this.form.city || undefined,\n street: this.form.street.trim(),\n area: this.form.area || this.form.city || this.form.state,\n landmark: this.form.landmark || undefined,\n buildingInfo: this.form.buildingInfo || undefined,\n notes: this.form.notes || undefined,\n };\n\n try {\n if (this.form.id) {\n await firstValueFrom(\n this.apiService.on('apps/commerce/address').update(this.form.id, payload),\n );\n } else {\n payload.isDefault = this.addresses.length === 0;\n await firstValueFrom(this.apiService.on('apps/commerce/address').create(payload));\n }\n this.editing = false;\n await this.load();\n } catch (err: any) {\n this.formError = err?.error?.message ?? 'Could not save this address.';\n } finally {\n this.saving = false;\n }\n }\n\n async remove(a: AddressVm): Promise<void> {\n if (!confirm(`Delete \"${a.label}\"?`)) return;\n try {\n await firstValueFrom(\n this.apiService.on('apps/commerce/address').remove(a.id),\n );\n await this.load();\n } catch {\n notify('Could not delete that address.', undefined, 'error');\n }\n }\n\n async makeDefault(a: AddressVm): Promise<void> {\n if (a.isDefault) return;\n const current = this.addresses.find((x) => x.isDefault);\n try {\n await firstValueFrom(\n this.apiService.on('apps/commerce/address').update(a.id, { isDefault: true }),\n );\n if (current) {\n await firstValueFrom(\n this.apiService\n .on('apps/commerce/address')\n .update(current.id, { isDefault: false }),\n );\n }\n await this.load();\n } catch {\n notify('Could not update the default address.', undefined, 'error');\n }\n }\n}\n","<h2 class=\"x-acct-h2\">Addresses</h2>\n<p class=\"x-acct-sub\">Used for delivery and, later, installation visits.</p>\n\n@if (loading) {\n <div class=\"x-acct-empty\">Loading…</div>\n} @else {\n @if (editing) {\n <div class=\"x-acct-card\">\n <strong>{{ form.id ? 'Edit address' : 'New address' }}</strong>\n <div style=\"margin-top: 14px\">\n <div class=\"x-acct-field\">\n <label>Label</label>\n <input [(ngModel)]=\"form.label\" placeholder=\"Home, Office, Site…\" />\n </div>\n <div class=\"x-acct-field\">\n <label>State</label>\n <select aria-label=\"State\" data-testid=\"address-state\" [(ngModel)]=\"form.state\" (ngModelChange)=\"onFormStateChange()\">\n <option value=\"\">Select a state</option>\n @for (s of states; track s.value) {\n <option [value]=\"s.value\">{{ s.label }}</option>\n }\n </select>\n </div>\n <div class=\"x-acct-field\">\n <label>LGA / area</label>\n <select aria-label=\"LGA\" data-testid=\"address-lga\" [(ngModel)]=\"form.lga\" [disabled]=\"!form.state || lgasLoading\">\n <option value=\"\">{{ form.state ? 'Select an LGA' : 'Select a state first' }}</option>\n @for (l of lgas; track l.value) {\n <option [value]=\"l.value\">{{ l.label }}</option>\n }\n </select>\n </div>\n <div class=\"x-acct-field\">\n <label>Street</label>\n <input [(ngModel)]=\"form.street\" />\n </div>\n <div class=\"x-acct-field\">\n <label>Nearest landmark</label>\n <input [(ngModel)]=\"form.landmark\" placeholder=\"e.g. opposite Zenith Bank\" />\n </div>\n <div class=\"x-acct-field\">\n <label>Building / flat info</label>\n <input [(ngModel)]=\"form.buildingInfo\" />\n </div>\n <div class=\"x-acct-field\">\n <label>Delivery notes</label>\n <input [(ngModel)]=\"form.notes\" />\n </div>\n @if (formError) {\n <div class=\"x-acct-err\">{{ formError }}</div>\n }\n <button type=\"button\" class=\"x-acct-btn\" [disabled]=\"saving\" (click)=\"save()\">\n {{ saving ? 'Saving…' : 'Save address' }}\n </button>\n <button type=\"button\" class=\"x-acct-btn-ghost\" (click)=\"cancel()\" style=\"margin-left: 8px\">\n Cancel\n </button>\n </div>\n </div>\n } @else {\n <button type=\"button\" class=\"x-acct-btn\" (click)=\"startAdd()\">Add an address</button>\n }\n\n @for (a of addresses; track a.id) {\n <div class=\"x-acct-card\">\n <div class=\"x-acct-row\" style=\"border-bottom: 0; padding-top: 0\">\n <strong>\n {{ a.label }}\n @if (a.isDefault) {\n <span class=\"x-acct-pill x-acct-pill-ok\" style=\"margin-left: 6px\">Default</span>\n }\n </strong>\n <span>\n <button type=\"button\" class=\"x-acct-btn-ghost\" (click)=\"startEdit(a)\">Edit</button>\n <button type=\"button\" class=\"x-acct-btn-ghost\" (click)=\"remove(a)\" style=\"margin-left: 6px\">\n Delete\n </button>\n </span>\n </div>\n <p class=\"x-acct-sub\" style=\"margin: 0\">\n {{ a.street }}@if (a.landmark) {, near {{ a.landmark }}}<br />\n {{ a.lga ? a.lga + ', ' : '' }}{{ a.state }}\n </p>\n @if (!a.isDefault) {\n <button\n type=\"button\"\n class=\"x-acct-btn-ghost\"\n style=\"margin-top: 10px\"\n (click)=\"makeDefault(a)\"\n >\n Make default\n </button>\n }\n </div>\n } @empty {\n @if (!editing) {\n <div class=\"x-acct-empty\">No saved addresses yet.</div>\n }\n }\n}\n","// PRD Appendix B — the 17 order states, buyer-friendly labels. Shared by\n// the account dashboard / orders / order-detail pages (the guest `/track`\n// page keeps its own copy — it's a separate module tree).\nexport const ORDER_STATUS_LABELS: Record<string, string> = {\n pending_payment: 'Awaiting payment',\n payment_received: 'Payment received',\n on_hold: 'On hold',\n confirmed: 'Confirmed',\n processing: 'Being prepared',\n partially_fulfilled: 'Partly on the way',\n ready_to_ship: 'Ready to ship',\n ready_for_pickup: 'Ready for pickup',\n dispatched: 'Dispatched',\n out_for_delivery: 'Out for delivery',\n failed_delivery: 'Delivery attempt failed',\n delivered: 'Delivered',\n completed: 'Completed',\n cancelled: 'Cancelled',\n return_in_flight: 'Return in progress',\n returned: 'Returned',\n refunded: 'Refunded',\n};\n\nexport function orderStatusLabel(status: string): string {\n return ORDER_STATUS_LABELS[status] ?? status;\n}\n\nexport function orderStatusTone(status: string): 'ok' | 'warn' | 'bad' | '' {\n if (status === 'delivered' || status === 'completed') return 'ok';\n if (status === 'cancelled' || status === 'refunded' || status === 'failed_delivery')\n return 'bad';\n if (status === 'pending_payment' || status === 'on_hold' || status === 'return_in_flight')\n return 'warn';\n return '';\n}\n","import { Component, inject } from '@angular/core';\nimport { BaseDirective, using } from '@thescaffold/ngx-core';\nimport { catchError, firstValueFrom, of, switchMap, takeUntil } from 'rxjs';\nimport { AccountStoreService } from '../account-store.service';\nimport { orderStatusLabel } from '../order-status';\n\ninterface DashOrderVm {\n id: string;\n orderNumber: string;\n status: string;\n statusLabel: string;\n placedAt?: string;\n grandTotal: number;\n currency: string;\n}\n\ninterface DashWarrantyVm {\n id: string;\n label: string;\n expiresAt?: string;\n daysLeft: number;\n}\n\nconst OPEN_STATUSES = new Set([\n 'pending_payment',\n 'payment_received',\n 'on_hold',\n 'confirmed',\n 'processing',\n 'partially_fulfilled',\n 'ready_to_ship',\n 'ready_for_pickup',\n 'dispatched',\n 'out_for_delivery',\n 'failed_delivery',\n]);\n\n// P5.3, ACC-02 — the account overview. Open-order count, the three most\n// recent orders, warranties inside 60 days of expiry, and quick links.\n// Bookings / wallet balance are R2 / PAY-11 (not built) — deliberately\n// left off rather than stubbed.\n@Component({\n standalone: false,\n selector: 'x-account-dashboard',\n templateUrl: './dashboard.component.html',\n})\nexport class AccountDashboardComponent extends BaseDirective {\n private readonly store = inject(AccountStoreService);\n\n loading = true;\n customerId = '';\n openCount = 0;\n recentOrders: DashOrderVm[] = [];\n expiringWarranties: DashWarrantyVm[] = [];\n wishlistCount = 0;\n\n referralCode = '';\n referralConverted = 0;\n referralPending = 0;\n\n override init = () => {\n this.store\n .customer()\n .pipe(\n takeUntil(this.$),\n switchMap((customer) => {\n if (!customer) return of(null);\n this.customerId = customer.id;\n return of(customer);\n }),\n )\n .subscribe(\n using((customer) => {\n if (!customer) {\n this.loading = false;\n return;\n }\n void this.hydrate(customer.id);\n }),\n );\n };\n\n private async hydrate(customerId: string): Promise<void> {\n const [orders, warranties, wishlists, refCode, refs] = await Promise.all([\n firstValueFrom(\n this.apiService\n .on('apps/commerce/order')\n .getMany({ customerId, perPage: 100 } as any)\n .pipe(catchError(() => of({ data: [] } as any))),\n ),\n firstValueFrom(\n this.apiService\n .on('apps/commerce/warranty')\n .getMany({ customerId, perPage: 100 } as any)\n .pipe(catchError(() => of({ data: [] } as any))),\n ),\n firstValueFrom(\n this.apiService\n .on('apps/commerce/wishlist')\n .getMany({ customerId, perPage: 100 } as any)\n .pipe(catchError(() => of({ data: [] } as any))),\n ),\n firstValueFrom(\n this.apiService\n .get('apps/commerce/referral/my-code')\n .pipe(catchError(() => of(undefined))),\n ),\n firstValueFrom(\n this.apiService\n .get('apps/commerce/referral/mine')\n .pipe(catchError(() => of({ data: [] } as any))),\n ),\n ]);\n\n this.referralCode = (refCode as any)?.data?.code ?? '';\n const refRows: any[] = (refs as any)?.data ?? [];\n this.referralConverted = refRows.filter(\n (r) => r.status === 'converted' || r.status === 'rewarded',\n ).length;\n this.referralPending = refRows.filter(\n (r) => r.status === 'pending' && r.refereeCustomerId,\n ).length;\n\n const orderRows: any[] = orders?.data ?? [];\n this.openCount = orderRows.filter((o) => OPEN_STATUSES.has(o.status)).length;\n this.recentOrders = orderRows\n .slice()\n .sort((a, b) => this.ts(b.placedAt ?? b.createdAt) - this.ts(a.placedAt ?? a.createdAt))\n .slice(0, 3)\n .map((o) => ({\n id: o.id,\n orderNumber: o.orderNumber,\n status: o.status,\n statusLabel: orderStatusLabel(o.status),\n placedAt: o.placedAt ?? o.createdAt,\n grandTotal: Number(o.grandTotal ?? 0),\n currency: o.currency ?? 'NGN',\n }));\n\n const now = Date.now();\n this.expiringWarranties = (warranties?.data ?? [])\n .filter((w: any) => w.expiresAt)\n .map((w: any) => ({\n id: w.id,\n label: w.serialNumberId ? 'Registered unit' : 'Warranty',\n expiresAt: w.expiresAt,\n daysLeft: Math.round((this.ts(w.expiresAt) - now) / 86_400_000),\n }))\n .filter((w: DashWarrantyVm) => w.daysLeft >= 0 && w.daysLeft <= 60)\n .sort((a: DashWarrantyVm, b: DashWarrantyVm) => a.daysLeft - b.daysLeft);\n\n this.wishlistCount = (wishlists?.data ?? []).length;\n this.loading = false;\n }\n\n private ts(v?: string): number {\n const t = v ? Date.parse(v) : NaN;\n return Number.isNaN(t) ? 0 : t;\n }\n}\n","<h2 class=\"x-acct-h2\">Overview</h2>\n<p class=\"x-acct-sub\">A snapshot of your orders and cover.</p>\n\n@if (loading) {\n <div class=\"x-acct-empty\">Loading…</div>\n} @else {\n <div class=\"x-acct-card\">\n <div class=\"x-acct-row\">\n <span>Open orders</span>\n <strong>{{ openCount }}</strong>\n </div>\n <div class=\"x-acct-row\">\n <span>Saved wishlists</span>\n <a routerLink=\"../wishlists\">{{ wishlistCount }}</a>\n </div>\n </div>\n\n <div class=\"x-acct-card\">\n <div class=\"x-acct-row\" style=\"border-bottom: 0; padding-bottom: 4px\">\n <strong>Recent orders</strong>\n <a routerLink=\"../orders\" class=\"x-acct-btn-ghost\">All orders</a>\n </div>\n @for (order of recentOrders; track order.id) {\n <a class=\"x-acct-row\" [routerLink]=\"['../orders', order.id]\">\n <span>\n <strong>{{ order.orderNumber }}</strong>\n <br />\n <span class=\"x-acct-pill\">{{ order.statusLabel }}</span>\n </span>\n <span>{{ order.currency }} {{ order.grandTotal | number: '1.2-2' }}</span>\n </a>\n } @empty {\n <div class=\"x-acct-empty\">No orders yet.</div>\n }\n </div>\n\n @if (referralCode) {\n <div class=\"x-acct-card\">\n <div class=\"x-acct-row\" style=\"border-bottom: 0; padding-bottom: 4px\">\n <strong>Refer a friend</strong>\n </div>\n <p class=\"x-acct-sub\" style=\"margin: 0 0 8px\">\n Share your code — you both benefit when they complete their first order.\n </p>\n <div class=\"x-acct-row\">\n <span>Your code</span>\n <strong style=\"letter-spacing: 1px\">{{ referralCode }}</strong>\n </div>\n @if (referralConverted || referralPending) {\n <div class=\"x-acct-row\">\n <span>Referrals</span>\n <span>{{ referralConverted }} completed · {{ referralPending }} pending</span>\n </div>\n }\n </div>\n }\n\n @if (expiringWarranties.length) {\n <div class=\"x-acct-card\">\n <div class=\"x-acct-row\" style=\"border-bottom: 0; padding-bottom: 4px\">\n <strong>Warranties expiring soon</strong>\n <a routerLink=\"../systems\" class=\"x-acct-btn-ghost\">My Systems</a>\n </div>\n @for (w of expiringWarranties; track w.id) {\n <div class=\"x-acct-row\">\n <span>{{ w.label }}</span>\n <span class=\"x-acct-pill-warn x-acct-pill\">{{ w.daysLeft }} days left</span>\n </div>\n }\n </div>\n }\n}\n","import { Component, inject } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { BaseDirective, notify, using } from '@thescaffold/ngx-core';\nimport { catchError, forkJoin, of, takeUntil } from 'rxjs';\nimport { CartStoreService } from '../../../services/cart-store.service';\nimport { orderStatusLabel, orderStatusTone } from '../order-status';\n\ninterface LineVm {\n variantId: string;\n name: string;\n quantity: number;\n unitPrice: number;\n lineTotal: number;\n fulfilmentStatus?: string;\n}\n\ninterface TimelineVm {\n toStatus: string;\n label: string;\n at?: string;\n reason?: string;\n}\n\ninterface PaymentVm {\n provider?: string;\n method?: string;\n status?: string;\n amount: number;\n}\n\n// P5.3, ACC-03 — one order in full: lines, totals, the transition\n// timeline, payments, and the context actions (reorder, invoice, track,\n// return). Return / review targets are P5.9 / P5.11 — linked when they\n// exist, absent otherwise rather than dead-ended.\n@Component({\n standalone: false,\n selector: 'x-account-order-detail',\n templateUrl: './order-detail.component.html',\n})\nexport class AccountOrderDetailComponent extends BaseDirective {\n private readonly route = inject(ActivatedRoute);\n private readonly cart = inject(CartStoreService);\n\n loading = true;\n found = false;\n\n orderId = '';\n orderNumber = '';\n status = '';\n statusLabel = '';\n tone = '';\n placedAt?: string;\n currency = 'NGN';\n recipientName = '';\n recipientPhone = '';\n\n lines: LineVm[] = [];\n subtotal = 0;\n deliveryTotal = 0;\n taxTotal = 0;\n discountTotal = 0;\n grandTotal = 0;\n amountPaid = 0;\n codAmountDue = 0;\n\n timeline: TimelineVm[] = [];\n payments: PaymentVm[] = [];\n\n override init = () => {\n this.orderId = this.route.snapshot.paramMap.get('id') ?? '';\n if (!this.orderId) {\n this.loading = false;\n return;\n }\n\n forkJoin({\n order: this.apiService\n .on('apps/commerce/order')\n .getOne(this.orderId)\n .pipe(catchError(() => of(undefined))),\n lines: this.apiService\n .on('apps/commerce/order-line')\n .getMany({ orderId: this.orderId, perPage: 200 } as any)\n .pipe(catchError(() => of(undefined))),\n history: this.apiService\n .on('apps/commerce/order-status-history')\n .getMany({ orderId: this.orderId, perPage: 200 } as any)\n .pipe(catchError(() => of(undefined))),\n payments: this.apiService\n .on('apps/commerce/payment')\n .getMany({ orderId: this.orderId, perPage: 50 } as any)\n .pipe(catchError(() => of(undefined))),\n })\n .pipe(takeUntil(this.$))\n .subscribe(\n using((res: any) => {\n this.loading = false;\n const order = res?.order?.data;\n if (!order) return;\n this.found = true;\n\n this.orderNumber = order.orderNumber;\n this.status = order.status;\n this.statusLabel = orderStatusLabel(order.status);\n this.tone = orderStatusTone(order.status);\n this.placedAt = order.placedAt ?? order.createdAt;\n this.currency = order.currency ?? 'NGN';\n this.recipientName = order.recipientName ?? '';\n this.recipientPhone = order.recipientPhone ?? '';\n this.subtotal = Number(order.subtotal ?? 0);\n this.deliveryTotal = Number(order.deliveryTotal ?? 0);\n this.taxTotal = Number(order.taxTotal ?? 0);\n this.discountTotal = Number(order.discountTotal ?? 0);\n this.grandTotal = Number(order.grandTotal ?? 0);\n this.amountPaid = Number(order.amountPaid ?? 0);\n this.codAmountDue = Number(order.codAmountDue ?? 0);\n\n this.lines = (res?.lines?.data ?? []).map((l: any) => ({\n variantId: l.variantId,\n name: l.nameSnapshot || 'Item',\n quantity: Number(l.quantity ?? 1),\n unitPrice: Number(l.unitPrice ?? 0),\n lineTotal: Number(l.unitPrice ?? 0) * Number(l.quantity ?? 1),\n fulfilmentStatus: l.fulfilmentStatus,\n }));\n\n this.timeline = (res?.history?.data ?? [])\n .slice()\n .sort((a: any, b: any) => this.ts(a.at ?? a.createdAt) - this.ts(b.at ?? b.createdAt))\n .map((h: any) => ({\n toStatus: h.toStatus,\n label: orderStatusLabel(h.toStatus),\n at: h.at ?? h.createdAt,\n reason: h.reason,\n }));\n\n this.payments = (res?.payments?.data ?? []).map((p: any) => ({\n provider: p.provider,\n method: p.method,\n status: p.status,\n amount: Number(p.amount ?? 0),\n }));\n }),\n );\n };\n\n reorder(): void {\n if (!this.lines.length) return;\n for (const line of this.lines) {\n this.cart.addLine({\n variantId: line.variantId,\n productId: '',\n name: line.name,\n quantity: line.quantity,\n unitPrice: line.unitPrice,\n currency: this.currency,\n });\n }\n notify('Added to your cart', undefined, 'success');\n this.router.navigate(['/cart']);\n }\n\n private ts(v?: string): number {\n const t = v ? Date.parse(v) : NaN;\n return Number.isNaN(t) ? 0 : t;\n }\n}\n","<a routerLink=\"../\" class=\"x-acct-btn-ghost\">‹ All orders</a>\n\n@if (loading) {\n <div class=\"x-acct-empty\" style=\"margin-top: 16px\">Loading…</div>\n} @else if (!found) {\n <div class=\"x-acct-card\" style=\"margin-top: 16px\">\n <div class=\"x-acct-empty\">We couldn't find that order.</div>\n </div>\n} @else {\n <header style=\"margin: 16px 0 8px\">\n <h2 class=\"x-acct-h2\">{{ orderNumber }}</h2>\n <p class=\"x-acct-sub\">\n @if (placedAt) {\n Placed {{ placedAt | date: 'medium' }} ·\n }\n <span\n class=\"x-acct-pill\"\n [class.x-acct-pill-ok]=\"tone === 'ok'\"\n [class.x-acct-pill-warn]=\"tone === 'warn'\"\n [class.x-acct-pill-bad]=\"tone === 'bad'\"\n >{{ statusLabel }}</span\n >\n </p>\n </header>\n\n <div class=\"x-acct-card\" style=\"display: flex; flex-wrap: wrap; gap: 10px\">\n <button type=\"button\" class=\"x-acct-btn\" (click)=\"reorder()\">Buy these again</button>\n <a\n class=\"x-acct-btn-ghost\"\n [routerLink]=\"['/order/invoice']\"\n [queryParams]=\"{ orderId: orderId }\"\n >VAT invoice</a\n >\n <a\n class=\"x-acct-btn-ghost\"\n [routerLink]=\"['/track']\"\n [queryParams]=\"{ number: orderNumber }\"\n >Track delivery</a\n >\n <a class=\"x-acct-btn-ghost\" [routerLink]=\"['return']\">Request a return</a>\n <a class=\"x-acct-btn-ghost\" routerLink=\"/help\">Contact support</a>\n </div>\n\n <div class=\"x-acct-card\">\n <strong>Items</strong>\n @for (line of lines; track line.variantId) {\n <div class=\"x-acct-row\">\n <span>\n {{ line.name }}\n <span class=\"x-acct-sub\" style=\"display: block; margin-top: 2px\">\n Qty {{ line.quantity }} · {{ currency }} {{ line.unitPrice | number: '1.2-2' }} each\n @if (line.fulfilmentStatus) {\n · {{ line.fulfilmentStatus }}\n }\n </span>\n </span>\n <strong>{{ currency }} {{ line.lineTotal | number: '1.2-2' }}</strong>\n </div>\n }\n <div class=\"x-acct-row\"><span>Subtotal</span><span>{{ currency }} {{ subtotal | number: '1.2-2' }}</span></div>\n @if (discountTotal > 0) {\n <div class=\"x-acct-row\"><span>Discount</span><span>− {{ currency }} {{ discountTotal | number: '1.2-2' }}</span></div>\n }\n <div class=\"x-acct-row\"><span>Delivery</span><span>{{ currency }} {{ deliveryTotal | number: '1.2-2' }}</span></div>\n <div class=\"x-acct-row\"><span>VAT (incl.)</span><span>{{ currency }} {{ taxTotal | number: '1.2-2' }}</span></div>\n <div class=\"x-acct-row\"><strong>Total</strong><strong>{{ currency }} {{ grandTotal | number: '1.2-2' }}</strong></div>\n <div class=\"x-acct-row\"><span>Paid</span><span>{{ currency }} {{ amountPaid | number: '1.2-2' }}</span></div>\n @if (codAmountDue > 0) {\n <div class=\"x-acct-row\">\n <span>Due on delivery</span>\n <strong>{{ currency }} {{ codAmountDue | number: '1.2-2' }}</strong>\n </div>\n }\n </div>\n\n @if (recipientName || recipientPhone) {\n <div class=\"x-acct-card\">\n <strong>Delivery to</strong>\n <div class=\"x-acct-row\">\n <span>{{ recipientName }}</span>\n <span>{{ recipientPhone }}</span>\n </div>\n </div>\n }\n\n @if (payments.length) {\n <div class=\"x-acct-card\">\n <strong>Payments</strong>\n @for (p of payments; track $index) {\n <div class=\"x-acct-row\">\n <span>{{ p.method || p.provider || 'Payment' }}</span>\n <span class=\"x-acct-pill\">{{ p.status }}</span>\n <span>{{ currency }} {{ p.amount | number: '1.2-2' }}</span>\n </div>\n }\n </div>\n }\n\n @if (timeline.length) {\n <div class=\"x-acct-card\">\n <strong>Progress</strong>\n @for (step of timeline; track $index) {\n <div class=\"x-acct-row\">\n <span>\n {{ step.label }}\n @if (step.reason) {\n <span class=\"x-acct-sub\" style=\"display: block; margin-top: 2px\">{{ step.reason }}</span>\n }\n </span>\n <span class=\"x-acct-sub\">{{ step.at | date: 'short' }}</span>\n </div>\n }\n </div>\n }\n}\n","import { Component, inject } from '@angular/core';\nimport { BaseDirective, using } from '@thescaffold/ngx-core';\nimport { catchError, firstValueFrom, of, takeUntil } from 'rxjs';\nimport { AccountStoreService } from '../account-store.service';\nimport { orderStatusLabel, orderStatusTone } from '../order-status';\n\ninterface OrderRowVm {\n id: string;\n orderNumber: string;\n status: string;\n statusLabel: string;\n tone: string;\n placedAt?: string;\n lineCount: number;\n grandTotal: number;\n codAmountDue: number;\n currency: string;\n}\n\n// P5.3, ACC-03 — the buyer's order history. Every Order for their\n// Customer, newest first, each linking to the detail page (reorder /\n// invoice / track / return live there).\n@Component({\n standalone: false,\n selector: 'x-account-orders',\n templateUrl: './orders.component.html',\n})\nexport class AccountOrdersComponent extends BaseDirective {\n private readonly store = inject(AccountStoreService);\n\n loading = true;\n orders: OrderRowVm[] = [];\n\n override init = () => {\n this.store\n .customer()\n .pipe(takeUntil(this.$))\n .subscribe(\n using((customer) => {\n if (!customer) {\n this.loading = false;\n return;\n }\n void this.load(customer.id);\n }),\n );\n };\n\n private async load(customerId: string): Promise<void> {\n const res: any = await firstValueFrom(\n this.apiService\n .on('apps/commerce/order')\n .getMany({ customerId, perPage: 200 } as any)\n .pipe(catchError(() => of({ data: [] }))),\n );\n this.orders = (res?.data ?? [])\n .slice()\n .sort(\n (a: any, b: any) =>\n this.ts(b.placedAt ?? b.createdAt) - this.ts(a.placedAt ?? a.createdAt),\n )\n .map((o: any) => ({\n id: o.id,\n orderNumber: o.orderNumber,\n status: o.status,\n statusLabel: orderStatusLabel(o.status),\n tone: orderStatusTone(o.status),\n placedAt: o.placedAt ?? o.createdAt,\n lineCount: Number(o.lineCount ?? 0),\n grandTotal: Number(o.grandTotal ?? 0),\n codAmountDue: Number(o.codAmountDue ?? 0),\n currency: o.currency ?? 'NGN',\n }));\n this.loading = false;\n }\n\n private ts(v?: string): number {\n const t = v ? Date.parse(v) : NaN;\n return Number.isNaN(t) ? 0 : t;\n }\n}\n","<h2 class=\"x-acct-h2\">Orders</h2>\n<p class=\"x-acct-sub\">Track a delivery, download an invoice or start a return.</p>\n\n@if (loading) {\n <div class=\"x-acct-empty\">Loading your orders…</div>\n} @else if (!orders.length) {\n <div class=\"x-acct-card\">\n <div class=\"x-acct-empty\">\n No orders yet. When you place one it'll show up here.\n </div>\n </div>\n} @else {\n <div class=\"x-acct-card\">\n @for (order of orders; track order.id) {\n <a class=\"x-acct-row\" [routerLink]=\"[order.id]\">\n <span>\n <strong>{{ order.orderNumber }}</strong>\n @if (order.placedAt) {\n <span class=\"x-acct-sub\" style=\"margin: 2px 0 0; display: block\">\n {{ order.placedAt | date: 'mediumDate' }}\n </span>\n }\n </span>\n <span\n class=\"x-acct-pill\"\n [class.x-acct-pill-ok]=\"order.tone === 'ok'\"\n [class.x-acct-pill-warn]=\"order.tone === 'warn'\"\n [class.x-acct-pill-bad]=\"order.tone === 'bad'\"\n >{{ order.statusLabel }}</span\n >\n <span style=\"text-align: right\">\n <strong>{{ order.currency }} {{ order.grandTotal | number: '1.2-2' }}</strong>\n @if (order.codAmountDue > 0) {\n <span class=\"x-acct-sub\" style=\"margin: 2px 0 0; display: block\">\n {{ order.currency }} {{ order.codAmountDue | number: '1.2-2' }} on delivery\n </span>\n }\n </span>\n </a>\n }\n </div>\n}\n","import { Component, inject } from '@angular/core';\nimport { BaseDirective, using } from '@thescaffold/ngx-core';\nimport { catchError, firstValueFrom, of, takeUntil } from 'rxjs';\nimport { AccountStoreService } from '../account-store.service';\n\ninterface PaymentRowVm {\n id: string;\n orderId?: string;\n orderNumber: string;\n provider?: string;\n method?: string;\n status?: string;\n amount: number;\n currency: string;\n paidAt?: string;\n createdAt?: string;\n}\n\n// P5.3, ACC-05 (the R1 slice) — a read-only payment history across the\n// buyer's orders. Saved / tokenised cards are P1 and not built.\n@Component({\n standalone: false,\n selector: 'x-account-payments',\n templateUrl: './payments.component.html',\n})\nexport class AccountPaymentsComponent extends BaseDirective {\n private readonly store = inject(AccountStoreService);\n\n loading = true;\n payments: PaymentRowVm[] = [];\n\n override init = () => {\n this.store\n .customer()\n .pipe(takeUntil(this.$))\n .subscribe(\n using((customer) => {\n if (!customer) {\n this.loading = false;\n return;\n }\n void this.load(customer.id);\n }),\n );\n };\n\n private async load(customerId: string): Promise<void> {\n const ordersRes: any = await firstValueFrom(\n this.apiService\n .on('apps/commerce/order')\n .getMany({ customerId, perPage: 200 } as any)\n .pipe(catchError(() => of({ data: [] }))),\n );\n const orders: any[] = ordersRes?.data ?? [];\n const numberById = new Map<string, string>(\n orders.map((o) => [o.id, o.orderNumber]),\n );\n\n const perOrder = await Promise.all(\n orders.map((o) =>\n firstValueFrom(\n this.apiService\n .on('apps/commerce/payment')\n .getMany({ orderId: o.id, perPage: 50 } as any)\n .pipe(catchError(() => of({ data: [] }))),\n ),\n ),\n );\n\n this.payments = perOrder\n .flatMap((res: any) => res?.data ?? [])\n .map((p: any) => ({\n id: p.id,\n orderId: p.orderId,\n orderNumber: numberById.get(p.orderId) ?? '',\n provider: p.provider,\n method: p.method,\n status: p.status,\n amount: Number(p.amount ?? 0),\n currency: p.currency ?? 'NGN',\n paidAt: p.paidAt,\n createdAt: p.createdAt,\n }))\n .sort((a, b) => this.ts(b.paidAt ?? b.createdAt) - this.ts(a.paidAt ?? a.createdAt));\n this.loading = false;\n }\n\n private ts(v?: string): number {\n const t = v ? Date.parse(v) : NaN;\n return Number.isNaN(t) ? 0 : t;\n }\n}\n","<h2 class=\"x-acct-h2\">Payments</h2>\n<p class=\"x-acct-sub\">Every payment across your orders.</p>\n\n@if (loading) {\n <div class=\"x-acct-empty\">Loading…</div>\n} @else if (!payments.length) {\n <div class=\"x-acct-card\"><div class=\"x-acct-empty\">No payments yet.</div></div>\n} @else {\n <div class=\"x-acct-card\">\n @for (p of payments; track p.id) {\n <div class=\"x-acct-row\">\n <span>\n @if (p.orderId) {\n <a [routerLink]=\"['../orders', p.orderId]\"><strong>{{ p.orderNumber }}</strong></a>\n } @else {\n <strong>{{ p.orderNumber || 'Payment' }}</strong>\n }\n <span class=\"x-acct-sub\" style=\"display: block; margin-top: 2px\">\n {{ p.method || p.provider }} · {{ (p.paidAt || p.createdAt) | date: 'mediumDate' }}\n </span>\n </span>\n <span class=\"x-acct-pill\" [class.x-acct-pill-ok]=\"p.status === 'success'\">\n {{ p.status }}\n </span>\n <strong>{{ p.currency }} {{ p.amount | number: '1.2-2' }}</strong>\n </div>\n }\n </div>\n}\n","import { Component, inject } from '@angular/core';\nimport { ApiService, BaseDirective, notify } from '@thescaffold/ngx-core';\nimport { firstValueFrom } from 'rxjs';\nimport { AccountStoreService } from '../account-store.service';\n\n// P7.7, SEC-04 / SEC-05 (NDPR) — the customer's data controls: export a\n// copy of everything held about them, and lodge an account-deletion\n// request. Cookie / tracking consent is the site-wide consent bar; this\n// page is the data-subject access + erasure surface.\n@Component({\n standalone: false,\n selector: 'x-account-privacy',\n templateUrl: './privacy.component.html',\n})\nexport class AccountPrivacyComponent extends BaseDirective {\n private readonly api = inject(ApiService);\n private readonly store = inject(AccountStoreService);\n\n customerId?: string;\n exporting = false;\n requesting = false;\n deletionLodged = false;\n deletionReason = '';\n\n override init = () => {\n this.store\n .customer()\n .subscribe((c) => (this.customerId = c?.id));\n };\n\n async downloadData(): Promise<void> {\n if (this.exporting) return;\n this.exporting = true;\n try {\n const res: any = await firstValueFrom(\n this.api.post('apps/commerce/data-request/export', {\n customerId: this.customerId,\n }),\n );\n const bundle = res?.data ?? res;\n const blob = new Blob([JSON.stringify(bundle, null, 2)], {\n type: 'application/json',\n });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = `tilmart-data-${new Date().toISOString().slice(0, 10)}.json`;\n a.click();\n URL.revokeObjectURL(url);\n } catch {\n notify('We couldn’t prepare your data right now. Please try again.', undefined, 'error');\n } finally {\n this.exporting = false;\n }\n }\n\n async requestDeletion(): Promise<void> {\n if (this.requesting) return;\n this.requesting = true;\n try {\n await firstValueFrom(\n this.api.post('apps/commerce/data-request', {\n type: 'deletion',\n customerId: this.customerId,\n note: this.deletionReason || undefined,\n }),\n );\n this.deletionLodged = true;\n notify('Your deletion request has been lodged.', undefined, 'success');\n } catch {\n notify('We couldn’t lodge your request. Please try again.', undefined, 'error');\n } finally {\n this.requesting = false;\n }\n }\n}\n","<div class=\"x-pv\">\n <h1 class=\"x-pv-title\">Privacy & your data</h1>\n <p class=\"x-pv-intro\">\n Under the Nigeria Data Protection Act you can get a copy of the personal\n data we hold about you, and ask us to delete your account.\n </p>\n\n <section class=\"x-pv-card\">\n <h2>Download my data</h2>\n <p>\n A machine-readable copy of your profile, addresses, orders, returns,\n warranties, reviews, questions, support messages, notification\n preferences and saved tools.\n </p>\n <button\n type=\"button\"\n class=\"x-pv-btn\"\n [disabled]=\"exporting || !customerId\"\n (click)=\"downloadData()\"\n >\n {{ exporting ? 'Preparing…' : 'Download my data (JSON)' }}\n </button>\n </section>\n\n <section class=\"x-pv-card\">\n <h2>Delete my account</h2>\n @if (deletionLodged) {\n <p class=\"x-pv-ok\">\n Your request is lodged. Our team will complete it within 30 days and\n email you when it’s done.\n </p>\n } @else {\n <p>\n We’ll remove your personal details. Some records are kept where the\n law requires — see below.\n </p>\n <textarea\n class=\"x-pv-reason\"\n rows=\"2\"\n placeholder=\"Anything you'd like us to know (optional)\"\n [(ngModel)]=\"deletionReason\"\n ></textarea>\n <button\n type=\"button\"\n class=\"x-pv-btn x-pv-btn-danger\"\n [disabled]=\"requesting || !customerId\"\n (click)=\"requestDeletion()\"\n >\n {{ requesting ? 'Sending…' : 'Request account deletion' }}\n </button>\n }\n </section>\n\n <section class=\"x-pv-card x-pv-retain\">\n <h2>What we keep, and why</h2>\n <ul>\n <li><strong>Order & payment records</strong> — financial and tax law.</li>\n <li><strong>Warranty registrations & claim outcomes</strong> — our ongoing warranty obligation to the product owner.</li>\n <li><strong>Audit-log entries</strong> — security and accountability.</li>\n </ul>\n <p class=\"x-pv-fine\">\n Kept records are stripped of contact details where possible and are not\n used for marketing.\n </p>\n </section>\n</div>\n\n<style>\n .x-pv { max-width: 640px; }\n .x-pv-title { font-size: 22px; font-weight: 800; color: var(--color-text); margin: 0 0 6px; }\n .x-pv-intro { font-size: 14px; color: var(--color-text-muted); line-height: 1.6; margin: 0 0 20px; }\n .x-pv-card { border: 1px solid var(--color-border); border-radius: 12px; padding: 16px 18px; margin-bottom: 14px; }\n .x-pv-card h2 { font-size: 15px; font-weight: 700; color: var(--color-text); margin: 0 0 6px; }\n .x-pv-card p { font-size: 13.5px; color: var(--color-text-muted); line-height: 1.6; margin: 0 0 12px; }\n .x-pv-btn { font: inherit; font-weight: 700; font-size: 13.5px; padding: 10px 18px; border: 0; border-radius: 8px; background: var(--color-brand); color: #fff; cursor: pointer; }\n .x-pv-btn:disabled { opacity: 0.5; cursor: not-allowed; }\n .x-pv-btn-danger { background: var(--color-danger, #c0392b); }\n .x-pv-reason { width: 100%; box-sizing: border-box; font: inherit; padding: 8px 10px; border: 1px solid var(--color-border); border-radius: 6px; background: var(--color-surface, #fff); color: var(--color-text); margin-bottom: 12px; }\n .x-pv-ok { color: var(--color-text); }\n .x-pv-retain ul { margin: 0 0 8px; padding-left: 18px; font-size: 13.5px; color: var(--color-text-muted); line-height: 1.7; }\n .x-pv-fine { font-size: 12.5px; }\n</style>\n","import { Component, inject } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { BaseDirective, using } from '@thescaffold/ngx-core';\nimport { catchError, firstValueFrom, forkJoin, of, takeUntil } from 'rxjs';\n\ninterface ReturnLineVm {\n name: string;\n quantity: number;\n inspectionOutcome: string;\n acceptedQuantity?: number;\n disposition?: string;\n}\n\nconst STATUS_LABELS: Record<string, string> = {\n requested: 'Requested',\n approved: 'Approved',\n rejected: 'Rejected',\n awaiting_return: 'Awaiting your return',\n in_transit: 'On its way back',\n received: 'Received',\n inspecting: 'Being inspected',\n resolved: 'Resolved',\n cancelled: 'Cancelled',\n};\n\n// P5.9, RET-03 — one RMA in full: status, instructions, per-line\n// inspection outcome, the resolution and any refund amount.\n@Component({\n standalone: false,\n selector: 'x-account-return-detail',\n templateUrl: './return-detail.component.html',\n})\nexport class AccountReturnDetailComponent extends BaseDirective {\n private readonly route = inject(ActivatedRoute);\n\n loading = true;\n found = false;\n\n rmaNumber = '';\n status = '';\n statusLabel = '';\n reasonCode = '';\n method?: string;\n instructions?: string;\n whoPaysReturn?: string;\n resolution?: string;\n refundAmount?: number;\n createdAt?: string;\n resolvedAt?: string;\n orderId = '';\n lines: ReturnLineVm[] = [];\n\n override init = () => {\n const id = this.route.snapshot.paramMap.get('id') ?? '';\n if (!id) {\n this.loading = false;\n return;\n }\n\n forkJoin({\n request: this.apiService\n .on('apps/commerce/return-request')\n .getOne(id)\n .pipe(catchError(() => of(undefined))),\n lines: this.apiService\n .on('apps/commerce/return-line')\n .getMany({ returnRequestId: id, perPage: 100 } as any)\n .pipe(catchError(() => of({ data: [] }))),\n })\n .pipe(takeUntil(this.$))\n .subscribe(\n using((res: any) => {\n this.loading = false;\n const r = res?.request?.data;\n if (!r) return;\n this.found = true;\n this.rmaNumber = r.rmaNumber;\n this.status = r.status;\n this.statusLabel = STATUS_LABELS[r.status] ?? r.status;\n this.reasonCode = r.reasonCode;\n this.method = r.method;\n this.instructions = r.instructions;\n this.whoPaysReturn = r.whoPaysReturn;\n this.resolution = r.resolution;\n this.refundAmount = r.refundAmount != null ? Number(r.refundAmount) : undefined;\n this.createdAt = r.createdAt;\n this.resolvedAt = r.resolvedAt;\n this.orderId = r.orderId;\n const rawLines: any[] = res?.lines?.data ?? [];\n this.lines = rawLines.map((l: any) => ({\n name: 'Item',\n quantity: Number(l.quantity ?? 1),\n inspectionOutcome: l.inspectionOutcome,\n acceptedQuantity: l.acceptedQuantity,\n disposition: l.disposition,\n }));\n void this.nameLines(r.orderId, rawLines);\n }),\n );\n };\n\n private async nameLines(orderId: string, rawLines: any[]): Promise<void> {\n const orderLines: any = await firstValueFrom(\n this.apiService\n .on('apps/commerce/order-line')\n .getMany({ orderId, perPage: 200 } as any)\n .pipe(catchError(() => of({ data: [] }))),\n );\n const nameById = new Map<string, string>(\n (orderLines?.data ?? []).map((o: any) => [o.id, o.nameSnapshot || 'Item']),\n );\n this.lines = this.lines.map((vm, i) => ({\n ...vm,\n name: nameById.get(rawLines[i]?.orderLineId) ?? 'Item',\n }));\n }\n}\n","<a routerLink=\"../\" class=\"x-acct-btn-ghost\">‹ All returns</a>\n\n@if (loading) {\n <div class=\"x-acct-empty\" style=\"margin-top: 16px\">Loading…</div>\n} @else if (!found) {\n <div class=\"x-acct-card\" style=\"margin-top: 16px\">\n <div class=\"x-acct-empty\">We couldn't find that return.</div>\n </div>\n} @else {\n <header style=\"margin: 16px 0 8px\">\n <h2 class=\"x-acct-h2\">{{ rmaNumber }}</h2>\n <p class=\"x-acct-sub\">\n <span class=\"x-acct-pill\">{{ statusLabel }}</span>\n · requested {{ createdAt | date: 'mediumDate' }}\n @if (orderId) {\n · <a [routerLink]=\"['/account/orders', orderId]\">view order</a>\n }\n </p>\n </header>\n\n @if (instructions) {\n <div class=\"x-acct-card\">\n <strong>What to do</strong>\n <p class=\"x-acct-sub\" style=\"margin: 6px 0 0\">{{ instructions }}</p>\n </div>\n }\n\n <div class=\"x-acct-card\">\n <strong>Items</strong>\n @for (line of lines; track $index) {\n <div class=\"x-acct-row\">\n <span>\n {{ line.name }}\n <span class=\"x-acct-sub\" style=\"display: block; margin-top: 2px\">\n Qty {{ line.quantity }}\n @if (line.inspectionOutcome !== 'pending') {\n · inspected: {{ line.inspectionOutcome }}\n @if (line.acceptedQuantity != null) {\n ({{ line.acceptedQuantity }} accepted)\n }\n }\n </span>\n </span>\n </div>\n }\n </div>\n\n @if (resolution) {\n <div class=\"x-acct-card\">\n <strong>Outcome</strong>\n <div class=\"x-acct-row\">\n <span>{{ resolution }}</span>\n @if (refundAmount != null) {\n <strong>Refund: {{ refundAmount | number: '1.2-2' }}</strong>\n }\n </div>\n @if (resolvedAt) {\n <p class=\"x-acct-sub\" style=\"margin: 0\">Resolved {{ resolvedAt | date: 'medium' }}</p>\n }\n </div>\n }\n}\n","import { Component, inject } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { BaseDirective, notify } from '@thescaffold/ngx-core';\nimport { catchError, firstValueFrom, of } from 'rxjs';\nimport { AccountStoreService } from '../account-store.service';\n\ninterface ReturnableLineVm {\n orderLineId: string;\n name: string;\n orderedQty: number;\n selected: boolean;\n quantity: number;\n}\n\nconst REASONS: { code: string; label: string }[] = [\n { code: 'damaged_in_transit', label: 'Damaged in transit' },\n { code: 'wrong_item', label: 'Wrong item sent' },\n { code: 'not_as_described', label: 'Not as described' },\n { code: 'faulty_on_arrival', label: 'Faulty on arrival' },\n { code: 'changed_mind', label: 'Changed my mind' },\n { code: 'missing_parts', label: 'Missing parts' },\n];\n\nconst METHODS: { code: string; label: string }[] = [\n { code: 'pickup', label: 'Pickup from my address' },\n { code: 'drop_off', label: 'Drop off at a collection point' },\n { code: 'station', label: 'Drop at a pickup station' },\n];\n\n// P5.9, RET-02 — the self-serve return request. Pick items + a reason;\n// the eligibility check (window, who pays) runs before the RMA is minted.\n@Component({\n standalone: false,\n selector: 'x-account-return-request',\n templateUrl: './return-request.component.html',\n})\nexport class AccountReturnRequestComponent extends BaseDirective {\n private readonly route = inject(ActivatedRoute);\n private readonly store = inject(AccountStoreService);\n\n readonly reasons = REASONS;\n readonly methods = METHODS;\n\n loading = true;\n orderId = '';\n orderNumber = '';\n customerId = '';\n lines: ReturnableLineVm[] = [];\n\n reasonCode = '';\n method = 'pickup';\n notes = '';\n\n checking = false;\n eligibility: { eligible: boolean; reasons: string[]; windowDays: number; whoPaysReturn: string } | null = null;\n submitting = false;\n error = '';\n createdRma = '';\n\n override init = () => {\n this.orderId = this.route.snapshot.paramMap.get('id') ?? '';\n this.store.customer().subscribe((c) => (this.customerId = c?.id ?? ''));\n void this.load();\n };\n\n private async load(): Promise<void> {\n const [order, lines] = await Promise.all([\n firstValueFrom(\n this.apiService\n .on('apps/commerce/order')\n .getOne(this.orderId)\n .pipe(catchError(() => of(undefined))),\n ),\n firstValueFrom(\n this.apiService\n .on('apps/commerce/order-line')\n .getMany({ orderId: this.orderId, perPage: 200 } as any)\n .pipe(catchError(() => of({ data: [] }))),\n ),\n ]);\n this.orderNumber = (order as any)?.data?.orderNumber ?? '';\n this.lines = ((lines as any)?.data ?? []).map((l: any) => ({\n orderLineId: l.id,\n name: l.nameSnapshot || 'Item',\n orderedQty: Number(l.quantity ?? 1),\n selected: false,\n quantity: Number(l.quantity ?? 1),\n }));\n this.loading = false;\n }\n\n get selectedLines(): ReturnableLineVm[] {\n return this.lines.filter((l) => l.selected);\n }\n\n get canSubmit(): boolean {\n return (\n !!this.reasonCode &&\n this.selectedLines.length > 0 &&\n this.eligibility?.eligible === true\n );\n }\n\n async checkEligibility(): Promise<void> {\n if (!this.reasonCode) {\n this.eligibility = null;\n return;\n }\n this.checking = true;\n try {\n const res: any = await firstValueFrom(\n this.apiService.post('apps/commerce/return-request/eligibility', {\n orderId: this.orderId,\n reasonCode: this.reasonCode,\n }),\n );\n this.eligibility = res?.data ?? null;\n } catch {\n this.eligibility = null;\n } finally {\n this.checking = false;\n }\n }\n\n async submit(): Promise<void> {\n if (this.submitting || !this.canSubmit) return;\n this.submitting = true;\n this.error = '';\n try {\n const res: any = await firstValueFrom(\n this.apiService.post('apps/commerce/return-request/request', {\n orderId: this.orderId,\n customerId: this.customerId || undefined,\n reasonCode: this.reasonCode,\n method: this.method,\n notes: this.notes || undefined,\n lines: this.selectedLines.map((l) => ({\n orderLineId: l.orderLineId,\n quantity: Math.min(l.quantity, l.orderedQty),\n })),\n }),\n );\n if (res?.status === 'error') {\n this.error = res?.message ?? 'Could not create your return.';\n return;\n }\n this.createdRma = res?.data?.rmaNumber ?? '';\n notify('Return requested', undefined, 'success');\n } catch (err: any) {\n this.error = err?.error?.message ?? 'Could not create your return.';\n } finally {\n this.submitting = false;\n }\n }\n}\n","<a [routerLink]=\"['/account/orders', orderId]\" class=\"x-acct-btn-ghost\">‹ Back to order</a>\n\n@if (loading) {\n <div class=\"x-acct-empty\" style=\"margin-top: 16px\">Loading…</div>\n} @else if (createdRma) {\n <div class=\"x-acct-card\" style=\"margin-top: 16px\">\n <h2 class=\"x-acct-h2\">Return requested</h2>\n <p class=\"x-acct-sub\">\n Your RMA number is <strong>{{ createdRma }}</strong>. We've emailed the\n instructions — you can also see them on the returns page.\n </p>\n <a class=\"x-acct-btn\" routerLink=\"/account/returns\">View my returns</a>\n </div>\n} @else {\n <h2 class=\"x-acct-h2\" style=\"margin-top: 16px\">Return an item</h2>\n <p class=\"x-acct-sub\">Order {{ orderNumber }}</p>\n\n <div class=\"x-acct-card\">\n <strong>Which items?</strong>\n @for (line of lines; track line.orderLineId) {\n <div class=\"x-acct-row\">\n <label class=\"x-acct-checkline\" style=\"flex: 1\">\n <input type=\"checkbox\" [(ngModel)]=\"line.selected\" />\n {{ line.name }}\n </label>\n @if (line.selected && line.orderedQty > 1) {\n <input\n type=\"number\"\n min=\"1\"\n [max]=\"line.orderedQty\"\n [(ngModel)]=\"line.quantity\"\n style=\"width: 64px\"\n />\n }\n <span class=\"x-acct-sub\">of {{ line.orderedQty }}</span>\n </div>\n }\n </div>\n\n <div class=\"x-acct-card\">\n <div class=\"x-acct-field\">\n <label>Reason</label>\n <select aria-label=\"Reason\" [ngModel]=\"reasonCode\" (ngModelChange)=\"reasonCode = $event; checkEligibility()\">\n <option value=\"\">Choose a reason</option>\n @for (r of reasons; track r.code) {\n <option [value]=\"r.code\">{{ r.label }}</option>\n }\n </select>\n </div>\n\n @if (checking) {\n <div class=\"x-acct-empty\">Checking eligibility…</div>\n } @else if (eligibility) {\n @if (eligibility.eligible) {\n <div class=\"x-acct-ok\">\n Eligible — {{ eligibility.windowDays }}-day window.\n {{ eligibility.whoPaysReturn === 'customer' ? 'You cover return delivery for this reason.' : 'Return delivery is on us.' }}\n </div>\n } @else {\n <div class=\"x-acct-err\">\n @switch (eligibility.reasons[0]) {\n @case ('window-closed') { The return window for this order has closed. }\n @case ('change-of-mind-not-allowed') { Change-of-mind returns aren't accepted for these items. }\n @case ('returns-not-offered') { Returns aren't available for this order. }\n @default { This return isn't eligible. }\n }\n </div>\n }\n }\n\n <div class=\"x-acct-field\">\n <label>How will you return it?</label>\n <select aria-label=\"How will you return it?\" [(ngModel)]=\"method\">\n @for (m of methods; track m.code) {\n <option [value]=\"m.code\">{{ m.label }}</option>\n }\n </select>\n </div>\n\n <div class=\"x-acct-field\">\n <label>Anything else we should know? (optional)</label>\n <input [(ngModel)]=\"notes\" />\n </div>\n\n @if (error) {\n <div class=\"x-acct-err\">{{ error }}</div>\n }\n <button\n type=\"button\"\n class=\"x-acct-btn\"\n [disabled]=\"!canSubmit || submitting\"\n (click)=\"submit()\"\n >\n {{ submitting ? 'Submitting…' : 'Request return' }}\n </button>\n </div>\n}\n","import { Component, inject } from '@angular/core';\nimport { BaseDirective, using } from '@thescaffold/ngx-core';\nimport { catchError, firstValueFrom, of, takeUntil } from 'rxjs';\nimport { AccountStoreService } from '../account-store.service';\n\ninterface ReturnRowVm {\n id: string;\n rmaNumber: string;\n reasonCode: string;\n status: string;\n statusLabel: string;\n tone: string;\n resolution?: string;\n createdAt?: string;\n}\n\nconst STATUS_LABELS: Record<string, string> = {\n requested: 'Requested',\n approved: 'Approved',\n rejected: 'Rejected',\n awaiting_return: 'Awaiting your return',\n in_transit: 'On its way back',\n received: 'Received',\n inspecting: 'Being inspected',\n resolved: 'Resolved',\n cancelled: 'Cancelled',\n};\n\nconst REASON_LABELS: Record<string, string> = {\n damaged_in_transit: 'Damaged in transit',\n wrong_item: 'Wrong item',\n not_as_described: 'Not as described',\n faulty_on_arrival: 'Faulty on arrival',\n changed_mind: 'Changed mind',\n missing_parts: 'Missing parts',\n};\n\n// P5.9, RET-02/03 — the buyer's returns list. Each RMA links to its\n// detail (status timeline + resolution).\n@Component({\n standalone: false,\n selector: 'x-account-returns',\n templateUrl: './returns.component.html',\n})\nexport class AccountReturnsComponent extends BaseDirective {\n private readonly store = inject(AccountStoreService);\n\n loading = true;\n returns: ReturnRowVm[] = [];\n\n override init = () => {\n this.store\n .customer()\n .pipe(takeUntil(this.$))\n .subscribe(\n using((customer) => {\n if (!customer) {\n this.loading = false;\n return;\n }\n void this.load(customer.id);\n }),\n );\n };\n\n private async load(customerId: string): Promise<void> {\n const res: any = await firstValueFrom(\n this.apiService\n .on('apps/commerce/return-request')\n .getMany({ customerId, perPage: 100 } as any)\n .pipe(catchError(() => of({ data: [] }))),\n );\n this.returns = (res?.data ?? [])\n .slice()\n .sort((a: any, b: any) => this.ts(b.createdAt) - this.ts(a.createdAt))\n .map((r: any) => ({\n id: r.id,\n rmaNumber: r.rmaNumber,\n reasonCode: REASON_LABELS[r.reasonCode] ?? r.reasonCode,\n status: r.status,\n statusLabel: STATUS_LABELS[r.status] ?? r.status,\n tone:\n r.status === 'resolved'\n ? 'ok'\n : r.status === 'rejected' || r.status === 'cancelled'\n ? 'bad'\n : 'warn',\n resolution: r.resolution,\n createdAt: r.createdAt,\n }));\n this.loading = false;\n }\n\n private ts(v?: string): number {\n const t = v ? Date.parse(v) : NaN;\n return Number.isNaN(t) ? 0 : t;\n }\n}\n","<h2 class=\"x-acct-h2\">Returns</h2>\n<p class=\"x-acct-sub\">Start a return from any order — it'll show up here.</p>\n\n@if (loading) {\n <div class=\"x-acct-empty\">Loading…</div>\n} @else if (!returns.length) {\n <div class=\"x-acct-card\">\n <div class=\"x-acct-empty\">\n No returns yet. Open an order and choose \"Request a return\".\n </div>\n </div>\n} @else {\n <div class=\"x-acct-card\">\n @for (r of returns; track r.id) {\n <a class=\"x-acct-row\" [routerLink]=\"[r.id]\">\n <span>\n <strong>{{ r.rmaNumber }}</strong>\n <span class=\"x-acct-sub\" style=\"display: block; margin-top: 2px\">\n {{ r.reasonCode }} · {{ r.createdAt | date: 'mediumDate' }}\n </span>\n </span>\n <span\n class=\"x-acct-pill\"\n [class.x-acct-pill-ok]=\"r.tone === 'ok'\"\n [class.x-acct-pill-warn]=\"r.tone === 'warn'\"\n [class.x-acct-pill-bad]=\"r.tone === 'bad'\"\n >{{ r.statusLabel }}</span\n >\n @if (r.resolution) {\n <span class=\"x-acct-sub\">{{ r.resolution }}</span>\n }\n </a>\n }\n </div>\n}\n","import { Injectable, inject } from '@angular/core';\nimport { ApiService } from '@thescaffold/ngx-core';\nimport { firstValueFrom } from 'rxjs';\n\nexport interface AccountProfile {\n first_name?: string;\n last_name?: string;\n phone_number?: string;\n referral_code?: string;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AccountApiService {\n private readonly apiService = inject(ApiService);\n\n async getProfile(): Promise<AccountProfile> {\n const res: any = await firstValueFrom(\n this.apiService.get('apps/identity/attributes'),\n );\n return res?.data?.attributes?.user ?? {};\n }\n\n async updateProfile(payload: {\n phone_number?: string;\n referral_code?: string;\n }): Promise<void> {\n await firstValueFrom(\n this.apiService.patch('apps/identity/attributes/user', payload),\n );\n }\n\n async changePassword(payload: {\n currentSecret: string;\n newSecret: string;\n confirmNewSecret: string;\n }): Promise<void> {\n await firstValueFrom(\n this.apiService.post('apps/identity/reset-secret/change', payload),\n );\n }\n}\n","import { Component, inject } from '@angular/core';\nimport { ThemeService } from '@thescaffold/ngx-common';\nimport { BaseDirective, ControlService, notify } from '@thescaffold/ngx-core';\nimport { firstValueFrom } from 'rxjs';\nimport { AccountApiService } from '../../../services/account-api.service';\n\ntype ThemeChoice = 'light' | 'dark' | 'system';\n\nconst CATEGORIES: { key: string; label: string; locked?: boolean; consent?: boolean }[] = [\n { key: 'transactional', label: 'Order & payment updates', locked: true },\n { key: 'delivery', label: 'Delivery & dispatch' },\n { key: 'marketing', label: 'Offers & promotions', consent: true },\n { key: 'price_alert', label: 'Price drop alerts' },\n { key: 'back_in_stock', label: 'Back-in-stock alerts' },\n];\n\nconst CHANNELS: { key: string; label: string }[] = [\n { key: 'email', label: 'Email' },\n { key: 'sms', label: 'SMS' },\n { key: 'whatsapp', label: 'WhatsApp' },\n];\n\n// P5.3, ACC-01 / ACC-09 / ACC-10 — profile, password, theme and\n// notification preferences in one place. Theme rides the scaffold\n// PreferenceService (P5.2); notifications call `notification-preference/\n// mine` (P5.2's NotificationPreferenceWorkflow).\n@Component({\n standalone: false,\n selector: 'x-account-settings',\n templateUrl: './settings.component.html',\n})\nexport class AccountSettingsComponent extends BaseDirective {\n private readonly accountApi = inject(AccountApiService);\n private readonly themeService = inject(ThemeService);\n private readonly controlService = inject(ControlService);\n\n readonly categories = CATEGORIES;\n readonly channels = CHANNELS;\n\n loadingProfile = true;\n savingProfile = false;\n profileError = '';\n fullName = '';\n phoneNumber = '';\n\n currentSecret = '';\n newSecret = '';\n confirmNewSecret = '';\n changingPassword = false;\n passwordError = '';\n passwordDone = false;\n\n theme: ThemeChoice = 'system';\n\n loadingPrefs = true;\n savingPrefs = false;\n prefsError = '';\n prefCategories: Record<string, string[]> = {};\n marketingConsent = false;\n quietHoursEnabled = false;\n quietHoursStart = '21:00';\n quietHoursEnd = '07:00';\n unsubscribedAll = false;\n\n get canChangePassword(): boolean {\n return (\n !!this.currentSecret &&\n !!this.newSecret &&\n this.newSecret === this.confirmNewSecret\n );\n }\n\n override init = () => {\n void this.loadProfile();\n void this.loadTheme();\n void this.loadPrefs();\n };\n\n private async loadProfile(): Promise<void> {\n try {\n const p = await this.accountApi.getProfile();\n this.fullName = [p.first_name, p.last_name].filter(Boolean).join(' ');\n this.phoneNumber = p.phone_number ?? '';\n } catch {\n this.profileError = 'Could not load your profile.';\n } finally {\n this.loadingProfile = false;\n }\n }\n\n private async loadTheme(): Promise<void> {\n try {\n const v = await firstValueFrom(this.themeService.get());\n if (v === 'light' || v === 'dark' || v === 'system') this.theme = v;\n } catch {\n // keep default\n }\n }\n\n private async loadPrefs(): Promise<void> {\n try {\n const res: any = await firstValueFrom(\n this.apiService.get('apps/commerce/notification-preference/mine'),\n );\n const pref = res?.data;\n if (pref) {\n this.prefCategories = pref.categories ?? {};\n this.marketingConsent = !!pref.marketingConsent;\n this.quietHoursEnabled = !!pref.quietHoursEnabled;\n this.quietHoursStart = pref.quietHoursStart ?? '21:00';\n this.quietHoursEnd = pref.quietHoursEnd ?? '07:00';\n this.unsubscribedAll = !!pref.unsubscribedAll;\n }\n } catch {\n this.prefsError = 'Could not load your notification preferences.';\n } finally {\n this.loadingPrefs = false;\n }\n }\n\n async saveProfile(): Promise<void> {\n if (this.savingProfile) return;\n this.savingProfile = true;\n this.profileError = '';\n try {\n await this.accountApi.updateProfile({ phone_number: this.phoneNumber });\n notify('Profile saved', undefined, 'success');\n } catch (err: any) {\n this.profileError = err?.error?.message ?? 'Could not save your profile.';\n } finally {\n this.savingProfile = false;\n }\n }\n\n async changePassword(): Promise<void> {\n if (this.changingPassword || !this.canChangePassword) return;\n this.changingPassword = true;\n this.passwordError = '';\n try {\n await this.accountApi.changePassword({\n currentSecret: this.currentSecret,\n newSecret: this.newSecret,\n confirmNewSecret: this.confirmNewSecret,\n });\n this.passwordDone = true;\n setTimeout(() => {\n this.controlService.logout();\n this.router.navigate(['/start']);\n }, 1500);\n } catch (err: any) {\n this.passwordError =\n err?.error?.message ?? 'Could not change your password.';\n } finally {\n this.changingPassword = false;\n }\n }\n\n setTheme(choice: ThemeChoice): void {\n this.theme = choice;\n this.themeService.set({ value: choice });\n }\n\n channelOn(category: string, channel: string): boolean {\n return (this.prefCategories[category] ?? []).includes(channel);\n }\n\n toggleChannel(category: string, channel: string): void {\n const set = new Set(this.prefCategories[category] ?? []);\n set.has(channel) ? set.delete(channel) : set.add(channel);\n this.prefCategories = { ...this.prefCategories, [category]: Array.from(set) };\n }\n\n async savePrefs(): Promise<void> {\n if (this.savingPrefs) return;\n this.savingPrefs = true;\n this.prefsError = '';\n try {\n await firstValueFrom(\n this.apiService.post('apps/commerce/notification-preference/mine', {\n categories: this.prefCategories,\n marketingConsent: this.marketingConsent,\n marketingConsentSource: 'account',\n quietHoursEnabled: this.quietHoursEnabled,\n quietHoursStart: this.quietHoursStart,\n quietHoursEnd: this.quietHoursEnd,\n unsubscribedAll: this.unsubscribedAll,\n }),\n );\n notify('Preferences saved', undefined, 'success');\n } catch (err: any) {\n this.prefsError = err?.error?.message ?? 'Could not save your preferences.';\n } finally {\n this.savingPrefs = false;\n }\n }\n}\n","<h2 class=\"x-acct-h2\">Settings</h2>\n<p class=\"x-acct-sub\">Profile, security, appearance and how we reach you.</p>\n\n<div class=\"x-acct-card\">\n <strong>Profile</strong>\n @if (loadingProfile) {\n <div class=\"x-acct-empty\">Loading…</div>\n } @else {\n <div style=\"margin-top: 14px\">\n <div class=\"x-acct-field\">\n <label>Name</label>\n <input [value]=\"fullName\" disabled />\n </div>\n <div class=\"x-acct-field\">\n <label>Phone number</label>\n <input type=\"tel\" [(ngModel)]=\"phoneNumber\" placeholder=\"+234…\" />\n </div>\n @if (profileError) {\n <div class=\"x-acct-err\">{{ profileError }}</div>\n }\n <button type=\"button\" class=\"x-acct-btn\" [disabled]=\"savingProfile\" (click)=\"saveProfile()\">\n {{ savingProfile ? 'Saving…' : 'Save profile' }}\n </button>\n </div>\n }\n</div>\n\n<div class=\"x-acct-card\">\n <strong>Change password</strong>\n <div style=\"margin-top: 14px\">\n <div class=\"x-acct-field\">\n <label>Current password</label>\n <input type=\"password\" [(ngModel)]=\"currentSecret\" />\n </div>\n <div class=\"x-acct-field\">\n <label>New password</label>\n <input type=\"password\" [(ngModel)]=\"newSecret\" />\n </div>\n <div class=\"x-acct-field\">\n <label>Confirm new password</label>\n <input type=\"password\" [(ngModel)]=\"confirmNewSecret\" />\n </div>\n @if (passwordError) {\n <div class=\"x-acct-err\">{{ passwordError }}</div>\n }\n @if (passwordDone) {\n <div class=\"x-acct-ok\">Password changed. Signing you out…</div>\n }\n <button\n type=\"button\"\n class=\"x-acct-btn\"\n [disabled]=\"!canChangePassword || changingPassword\"\n (click)=\"changePassword()\"\n >\n {{ changingPassword ? 'Saving…' : 'Change password' }}\n </button>\n </div>\n</div>\n\n<div class=\"x-acct-card\">\n <strong>Appearance</strong>\n <div class=\"x-acct-field\" style=\"margin-top: 14px; max-width: 240px\">\n <label>Theme</label>\n <select aria-label=\"Theme\" [ngModel]=\"theme\" (ngModelChange)=\"setTheme($event)\">\n <option value=\"system\">Match my device</option>\n <option value=\"light\">Light</option>\n <option value=\"dark\">Dark</option>\n </select>\n </div>\n</div>\n\n<div class=\"x-acct-card\">\n <strong>Notifications</strong>\n @if (loadingPrefs) {\n <div class=\"x-acct-empty\">Loading…</div>\n } @else {\n <p class=\"x-acct-sub\" style=\"margin: 8px 0 16px\">\n Order and payment updates are always sent. Everything else is up to you.\n </p>\n\n @for (cat of categories; track cat.key) {\n <div style=\"padding: 10px 0; border-bottom: 1px solid var(--color-border-muted)\">\n <div style=\"font-weight: 700; font-size: 13.5px; margin-bottom: 8px\">\n {{ cat.label }}\n @if (cat.locked) {\n <span class=\"x-acct-pill\" style=\"margin-left: 6px\">Always on</span>\n }\n </div>\n @if (cat.consent && !marketingConsent) {\n <label class=\"x-acct-checkline\">\n <input type=\"checkbox\" [(ngModel)]=\"marketingConsent\" />\n Opt in to offers and promotions\n </label>\n } @else {\n <div style=\"display: flex; gap: 16px; flex-wrap: wrap\">\n @for (ch of channels; track ch.key) {\n <label class=\"x-acct-checkline\">\n <input\n type=\"checkbox\"\n [disabled]=\"cat.locked || unsubscribedAll || (cat.consent && !marketingConsent)\"\n [checked]=\"channelOn(cat.key, ch.key)\"\n (change)=\"toggleChannel(cat.key, ch.key)\"\n />\n {{ ch.label }}\n </label>\n }\n </div>\n @if (cat.consent && marketingConsent) {\n <label class=\"x-acct-checkline\" style=\"margin-top: 4px\">\n <input type=\"checkbox\" [(ngModel)]=\"marketingConsent\" />\n Keep me opted in to offers\n </label>\n }\n }\n </div>\n }\n\n <div style=\"padding: 14px 0\">\n <label class=\"x-acct-checkline\">\n <input type=\"checkbox\" [(ngModel)]=\"quietHoursEnabled\" />\n Quiet hours — hold non-urgent messages overnight\n </label>\n @if (quietHoursEnabled) {\n <div style=\"display: flex; gap: 12px; margin-top: 8px\">\n <div class=\"x-acct-field\" style=\"margin: 0\">\n <label>From</label>\n <input type=\"time\" [(ngModel)]=\"quietHoursStart\" />\n </div>\n <div class=\"x-acct-field\" style=\"margin: 0\">\n <label>To</label>\n <input type=\"time\" [(ngModel)]=\"quietHoursEnd\" />\n </div>\n </div>\n }\n </div>\n\n <label class=\"x-acct-checkline\">\n <input type=\"checkbox\" [(ngModel)]=\"unsubscribedAll\" />\n Unsubscribe from everything except order & payment updates\n </label>\n\n @if (prefsError) {\n <div class=\"x-acct-err\" style=\"margin-top: 12px\">{{ prefsError }}</div>\n }\n <button\n type=\"button\"\n class=\"x-acct-btn\"\n style=\"margin-top: 14px\"\n [disabled]=\"savingPrefs\"\n (click)=\"savePrefs()\"\n >\n {{ savingPrefs ? 'Saving…' : 'Save preferences' }}\n </button>\n }\n</div>\n","import { Component, inject } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { BaseDirective, using } from '@thescaffold/ngx-core';\nimport { catchError, firstValueFrom, of, takeUntil } from 'rxjs';\n\ninterface ClaimVm {\n id: string;\n status: string;\n faultDescription?: string;\n triageOutcome?: string;\n createdAt?: string;\n}\n\ninterface NoticeVm {\n id: string;\n severity: string;\n title: string;\n message: string;\n actionRequired?: string;\n}\n\n// P5.6, ACC-06 — one registered system: product, serial, dates,\n// certificate download (P4.18), any open safety notice for the variant,\n// and the claim history. \"Start a claim\" links to the claim form.\n@Component({\n standalone: false,\n selector: 'x-account-system-detail',\n templateUrl: './system-detail.component.html',\n})\nexport class AccountSystemDetailComponent extends BaseDirective {\n private readonly route = inject(ActivatedRoute);\n\n loading = true;\n found = false;\n\n warrantyId = '';\n productName = 'Registered unit';\n productSlug?: string;\n variantId = '';\n serial?: string;\n isVerified = false;\n startsAt?: string;\n expiresAt?: string;\n monthsLeft: number | null = null;\n status = '';\n orderLineId?: string;\n\n claims: ClaimVm[] = [];\n notices: NoticeVm[] = [];\n downloadingCert = false;\n\n override init = () => {\n this.warrantyId = this.route.snapshot.paramMap.get('id') ?? '';\n if (!this.warrantyId) {\n this.loading = false;\n return;\n }\n\n this.apiService\n .on('apps/commerce/warranty')\n .getOne(this.warrantyId)\n .pipe(\n takeUntil(this.$),\n catchError(() => of(undefined)),\n )\n .subscribe(\n using((res: any) => {\n const w = res?.data;\n if (!w) {\n this.loading = false;\n return;\n }\n this.found = true;\n this.variantId = w.variantId;\n this.isVerified = !!w.isVerified;\n this.startsAt = w.startsAt;\n this.expiresAt = w.expiresAt;\n this.status = w.status;\n this.orderLineId = w.orderLineId;\n this.monthsLeft = w.expiresAt\n ? Math.max(\n 0,\n Math.round(\n (Date.parse(w.expiresAt) - Date.now()) / (86_400_000 * 30.44),\n ),\n )\n : null;\n void this.hydrate(w);\n }),\n );\n };\n\n private async hydrate(w: any): Promise<void> {\n const [variant, claims, notices] = await Promise.all([\n firstValueFrom(\n this.apiService\n .on('apps/commerce/product-variant')\n .getOne(w.variantId)\n .pipe(catchError(() => of(undefined))),\n ),\n firstValueFrom(\n this.apiService\n .on('apps/commerce/warranty-claim')\n .getMany({ warrantyId: w.id, perPage: 50 } as any)\n .pipe(catchError(() => of({ data: [] }))),\n ),\n firstValueFrom(\n this.apiService\n .on('apps/commerce/safety-notice')\n .getMany({ variantId: w.variantId, status: 'published', perPage: 20 } as any)\n .pipe(catchError(() => of({ data: [] }))),\n ),\n ]);\n\n const v: any = variant;\n if (v?.data?.productId) {\n const p: any = await firstValueFrom(\n this.apiService\n .on('apps/commerce/product')\n .getOne(v.data.productId)\n .pipe(catchError(() => of(undefined))),\n );\n this.productName = p?.data?.name ?? v?.data?.sku ?? this.productName;\n this.productSlug = p?.data?.slug;\n }\n\n this.claims = ((claims as any)?.data ?? []).map((c: any) => ({\n id: c.id,\n status: c.status,\n faultDescription: c.faultDescription,\n triageOutcome: c.triageOutcome,\n createdAt: c.createdAt,\n }));\n this.notices = ((notices as any)?.data ?? []).map((n: any) => ({\n id: n.id,\n severity: n.severity,\n title: n.title,\n message: n.message,\n actionRequired: n.actionRequired,\n }));\n this.loading = false;\n }\n\n // The doc endpoint needs the session token (global AuthMiddleware), so a\n // plain <a href> won't do — fetch the print HTML through ApiService and\n // hand it to a new window (RET-06 \"certificates are downloadable\").\n async downloadCertificate(): Promise<void> {\n if (this.downloadingCert) return;\n this.downloadingCert = true;\n try {\n const res: any = await firstValueFrom(\n this.apiService.get(\n `apps/commerce/document/warranty/${this.warrantyId}/certificate`,\n { format: 'html' },\n ),\n );\n const html = typeof res === 'string' ? res : (res?.data ?? res?.html);\n const win = window.open('', '_blank');\n if (win && typeof html === 'string') {\n win.document.open();\n win.document.write(html);\n win.document.close();\n }\n } finally {\n this.downloadingCert = false;\n }\n }\n}\n","<a routerLink=\"../\" class=\"x-acct-btn-ghost\">‹ My Systems</a>\n\n@if (loading) {\n <div class=\"x-acct-empty\" style=\"margin-top: 16px\">Loading…</div>\n} @else if (!found) {\n <div class=\"x-acct-card\" style=\"margin-top: 16px\">\n <div class=\"x-acct-empty\">We couldn't find that record.</div>\n </div>\n} @else {\n <header style=\"margin: 16px 0 8px\">\n <h2 class=\"x-acct-h2\">\n @if (productSlug) {\n <a [routerLink]=\"['/p', productSlug]\">{{ productName }}</a>\n } @else {\n {{ productName }}\n }\n </h2>\n <p class=\"x-acct-sub\">\n @if (isVerified) {\n <span class=\"x-acct-pill x-acct-pill-ok\">Verified</span>\n } @else {\n <span class=\"x-acct-pill\">Self-added</span>\n }\n @if (status === 'claimed') {\n <span class=\"x-acct-pill x-acct-pill-warn\" style=\"margin-left: 6px\">Claim in progress</span>\n }\n </p>\n </header>\n\n @for (n of notices; track n.id) {\n <div\n class=\"x-acct-card\"\n [class.x-acct-pill-bad]=\"n.severity === 'recall'\"\n style=\"border-color: var(--color-warn)\"\n >\n <strong>⚠ {{ n.title }}</strong>\n <p class=\"x-acct-sub\" style=\"margin: 6px 0 0\">{{ n.message }}</p>\n @if (n.actionRequired) {\n <p style=\"margin: 8px 0 0; font-weight: 700; font-size: 13px\">\n What to do: {{ n.actionRequired }}\n </p>\n }\n </div>\n }\n\n <div class=\"x-acct-card\">\n <div class=\"x-acct-row\"><span>Serial</span><span>{{ serial || '—' }}</span></div>\n <div class=\"x-acct-row\"><span>Registered</span><span>{{ startsAt | date: 'mediumDate' }}</span></div>\n <div class=\"x-acct-row\">\n <span>Warranty until</span>\n <span>\n {{ expiresAt ? (expiresAt | date: 'mediumDate') : '—' }}\n @if (monthsLeft !== null) {\n ({{ monthsLeft > 0 ? monthsLeft + ' months left' : 'expired' }})\n }\n </span>\n </div>\n </div>\n\n <div class=\"x-acct-card\" style=\"display: flex; gap: 10px; flex-wrap: wrap\">\n @if (isVerified) {\n <button\n type=\"button\"\n class=\"x-acct-btn-ghost\"\n [disabled]=\"downloadingCert\"\n (click)=\"downloadCertificate()\"\n >\n {{ downloadingCert ? 'Opening…' : 'View / print certificate' }}\n </button>\n }\n <a class=\"x-acct-btn\" routerLink=\"claim\">Start a claim</a>\n </div>\n\n @if (claims.length) {\n <div class=\"x-acct-card\">\n <strong>Claims</strong>\n @for (c of claims; track c.id) {\n <div class=\"x-acct-row\">\n <span>\n {{ c.faultDescription || 'Claim' }}\n <span class=\"x-acct-sub\" style=\"display: block; margin-top: 2px\">\n {{ c.createdAt | date: 'mediumDate' }}\n @if (c.triageOutcome) {\n · {{ c.triageOutcome }}\n }\n </span>\n </span>\n <span class=\"x-acct-pill\">{{ c.status }}</span>\n </div>\n }\n </div>\n }\n}\n","import { Component, inject } from '@angular/core';\nimport { BaseDirective, notify, using } from '@thescaffold/ngx-core';\nimport { catchError, firstValueFrom, of, takeUntil } from 'rxjs';\nimport { AccountStoreService } from '../account-store.service';\n\ninterface SystemVm {\n id: string;\n name: string;\n slug?: string;\n serial?: string;\n isVerified: boolean;\n expiresAt?: string;\n monthsLeft: number | null;\n status: string;\n}\n\n// P5.6, ACC-06 / RET-06 — \"My Systems\": every product the customer owns,\n// its serial, its warranty standing. Auto-populated by delivery (P4.15);\n// a unit bought elsewhere is added here as unverified.\n@Component({\n standalone: false,\n selector: 'x-account-systems',\n templateUrl: './systems.component.html',\n})\nexport class AccountSystemsComponent extends BaseDirective {\n private readonly store = inject(AccountStoreService);\n\n loading = true;\n customerId = '';\n clientId = '';\n workspaceId = '';\n systems: SystemVm[] = [];\n\n adding = false;\n savingExternal = false;\n externalError = '';\n ext = { variantSku: '', serial: '', startsAt: '', months: 12 };\n\n override init = () => {\n this.store\n .customer()\n .pipe(takeUntil(this.$))\n .subscribe(\n using((customer) => {\n if (!customer) {\n this.loading = false;\n return;\n }\n this.customerId = customer.id;\n void this.load();\n }),\n );\n };\n\n private async load(): Promise<void> {\n const res: any = await firstValueFrom(\n this.apiService\n .on('apps/commerce/warranty')\n .getMany({ customerId: this.customerId, perPage: 200 } as any)\n .pipe(catchError(() => of({ data: [] }))),\n );\n const rows: any[] = res?.data ?? [];\n this.systems = await Promise.all(\n rows.map(async (w) => {\n const { name, slug } = await this.resolveProduct(w.variantId);\n const monthsLeft = w.expiresAt\n ? Math.max(\n 0,\n Math.round(\n (Date.parse(w.expiresAt) - Date.now()) / (86_400_000 * 30.44),\n ),\n )\n : null;\n return {\n id: w.id,\n name,\n slug,\n serial: undefined as string | undefined,\n isVerified: !!w.isVerified,\n expiresAt: w.expiresAt,\n monthsLeft,\n status: w.status,\n };\n }),\n );\n this.loading = false;\n }\n\n private async resolveProduct(\n variantId: string,\n ): Promise<{ name: string; slug?: string }> {\n try {\n const v: any = await firstValueFrom(\n this.apiService.on('apps/commerce/product-variant').getOne(variantId),\n );\n const productId = v?.data?.productId;\n if (productId) {\n const p: any = await firstValueFrom(\n this.apiService.on('apps/commerce/product').getOne(productId),\n );\n return { name: p?.data?.name ?? v?.data?.sku ?? 'Registered unit', slug: p?.data?.slug };\n }\n return { name: v?.data?.sku ?? 'Registered unit' };\n } catch {\n return { name: 'Registered unit' };\n }\n }\n\n async addExternal(): Promise<void> {\n if (this.savingExternal) return;\n const sku = this.ext.variantSku.trim();\n if (!sku) {\n this.externalError = 'Enter the product SKU or model shown on the label.';\n return;\n }\n this.savingExternal = true;\n this.externalError = '';\n try {\n // Resolve the SKU to a variant id (the label carries the SKU/model).\n const found: any = await firstValueFrom(\n this.apiService\n .on('apps/commerce/product-variant')\n .getMany({ sku, perPage: 1 } as any)\n .pipe(catchError(() => of({ data: [] }))),\n );\n const variantId = (found?.data ?? [])[0]?.id;\n if (!variantId) {\n this.externalError = \"We couldn't match that SKU to a product we stock.\";\n return;\n }\n const res: any = await firstValueFrom(\n this.apiService.post('apps/commerce/warranty/external', {\n customerId: this.customerId,\n variantId,\n serial: this.ext.serial || undefined,\n startsAt: this.ext.startsAt || undefined,\n months: this.ext.months || undefined,\n }),\n );\n if (res?.status === 'error') {\n this.externalError = res?.message ?? 'Could not add that unit.';\n return;\n }\n this.adding = false;\n this.ext = { variantSku: '', serial: '', startsAt: '', months: 12 };\n notify('Added to My Systems', undefined, 'success');\n await this.load();\n } catch (err: any) {\n this.externalError = err?.error?.message ?? 'Could not add that unit.';\n } finally {\n this.savingExternal = false;\n }\n }\n}\n","<h2 class=\"x-acct-h2\">My Systems</h2>\n<p class=\"x-acct-sub\">\n Every product you've bought from us, with its serial and warranty. Units bought\n elsewhere can be added for context.\n</p>\n\n@if (loading) {\n <div class=\"x-acct-empty\">Loading…</div>\n} @else {\n @if (adding) {\n <div class=\"x-acct-card\">\n <strong>Add a unit bought elsewhere</strong>\n <p class=\"x-acct-sub\" style=\"margin: 6px 0 14px\">\n Unverified — it won't have a Tilmart certificate, but the compatibility\n checker and support can use it.\n </p>\n <div class=\"x-acct-field\">\n <label>Product SKU / model (on the label)</label>\n <input [(ngModel)]=\"ext.variantSku\" />\n </div>\n <div class=\"x-acct-field\">\n <label>Serial number (optional)</label>\n <input [(ngModel)]=\"ext.serial\" />\n </div>\n <div class=\"x-acct-field\">\n <label>Purchase date (optional)</label>\n <input type=\"date\" [(ngModel)]=\"ext.startsAt\" />\n </div>\n <div class=\"x-acct-field\" style=\"max-width: 160px\">\n <label>Warranty months</label>\n <input type=\"number\" [(ngModel)]=\"ext.months\" />\n </div>\n @if (externalError) {\n <div class=\"x-acct-err\">{{ externalError }}</div>\n }\n <button type=\"button\" class=\"x-acct-btn\" [disabled]=\"savingExternal\" (click)=\"addExternal()\">\n {{ savingExternal ? 'Adding…' : 'Add unit' }}\n </button>\n <button type=\"button\" class=\"x-acct-btn-ghost\" (click)=\"adding = false\" style=\"margin-left: 8px\">\n Cancel\n </button>\n </div>\n } @else {\n <button type=\"button\" class=\"x-acct-btn\" (click)=\"adding = true\">Add external unit</button>\n }\n\n @for (sys of systems; track sys.id) {\n <a class=\"x-acct-card\" [routerLink]=\"[sys.id]\" style=\"display: block; text-decoration: none\">\n <div class=\"x-acct-row\" style=\"border-bottom: 0; padding-top: 0\">\n <strong style=\"color: var(--color-text)\">{{ sys.name }}</strong>\n @if (sys.isVerified) {\n <span class=\"x-acct-pill x-acct-pill-ok\">Verified</span>\n } @else {\n <span class=\"x-acct-pill\">Self-added</span>\n }\n </div>\n <p class=\"x-acct-sub\" style=\"margin: 0\">\n @if (sys.monthsLeft !== null) {\n @if (sys.monthsLeft > 0) {\n {{ sys.monthsLeft }} months of warranty left\n } @else {\n Warranty expired\n }\n } @else {\n Warranty length not set\n }\n @if (sys.status === 'claimed') {\n · claim in progress\n }\n </p>\n </a>\n } @empty {\n @if (!adding) {\n <div class=\"x-acct-empty\">\n Nothing here yet — a warranty is registered automatically when a\n serialised item is delivered.\n </div>\n }\n }\n}\n","import { Component, inject } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { BaseDirective, notify } from '@thescaffold/ngx-core';\nimport { firstValueFrom } from 'rxjs';\nimport { AccountStoreService } from '../account-store.service';\n\nconst SYMPTOM_OPTIONS = [\n 'Not turning on',\n 'Shuts down under load',\n 'Overheating',\n 'Error code / warning light',\n 'Unusual noise',\n 'Not charging',\n 'Reduced runtime / output',\n 'Physical damage',\n];\n\n// P5.6, RET-07 — the warranty claim form. Fault description + a symptoms\n// checklist + whether a Tilmart installer fitted it. Photo/video upload\n// is a follow-up (needs the blobs pipeline) — noted, not blocking.\n@Component({\n standalone: false,\n selector: 'x-account-warranty-claim',\n templateUrl: './warranty-claim.component.html',\n})\nexport class AccountWarrantyClaimComponent extends BaseDirective {\n private readonly route = inject(ActivatedRoute);\n private readonly store = inject(AccountStoreService);\n\n readonly symptomOptions = SYMPTOM_OPTIONS;\n\n warrantyId = '';\n customerId = '';\n\n faultDescription = '';\n symptoms: Record<string, boolean> = {};\n installedByTilmart = false;\n\n submitting = false;\n error = '';\n done = false;\n\n override init = () => {\n this.warrantyId = this.route.snapshot.paramMap.get('id') ?? '';\n this.store.customer().subscribe((c) => (this.customerId = c?.id ?? ''));\n };\n\n get canSubmit(): boolean {\n return !!this.faultDescription.trim();\n }\n\n async submit(): Promise<void> {\n if (this.submitting || !this.canSubmit) return;\n this.submitting = true;\n this.error = '';\n try {\n const res: any = await firstValueFrom(\n this.apiService.post(\n `apps/commerce/warranty/${this.warrantyId}/claim`,\n {\n customerId: this.customerId || undefined,\n faultDescription: this.faultDescription.trim(),\n symptoms: Object.keys(this.symptoms).filter((k) => this.symptoms[k]),\n installedByTilmart: this.installedByTilmart,\n },\n ),\n );\n if (res?.status === 'error') {\n this.error = res?.message ?? 'Could not submit your claim.';\n return;\n }\n this.done = true;\n notify('Claim submitted', undefined, 'success');\n } catch (err: any) {\n this.error = err?.error?.message ?? 'Could not submit your claim.';\n } finally {\n this.submitting = false;\n }\n }\n}\n","<a routerLink=\"../\" class=\"x-acct-btn-ghost\">‹ Back to system</a>\n\n@if (done) {\n <div class=\"x-acct-card\" style=\"margin-top: 16px\">\n <h2 class=\"x-acct-h2\">Claim submitted</h2>\n <p class=\"x-acct-sub\">\n We'll review the details and get back to you with next steps. You can see\n the status on the system's page.\n </p>\n <a class=\"x-acct-btn\" routerLink=\"../\">Back to system</a>\n </div>\n} @else {\n <h2 class=\"x-acct-h2\" style=\"margin-top: 16px\">Start a warranty claim</h2>\n <p class=\"x-acct-sub\">Tell us what's wrong and we'll take it from there.</p>\n\n <div class=\"x-acct-card\">\n <div class=\"x-acct-field\">\n <label>What's the problem?</label>\n <input\n [(ngModel)]=\"faultDescription\"\n placeholder=\"Describe the fault in your own words\"\n />\n </div>\n\n <div style=\"margin: 8px 0 16px\">\n <div style=\"font-weight: 700; font-size: 13px; margin-bottom: 8px\">Symptoms</div>\n @for (s of symptomOptions; track s) {\n <label class=\"x-acct-checkline\">\n <input type=\"checkbox\" [(ngModel)]=\"symptoms[s]\" />\n {{ s }}\n </label>\n }\n </div>\n\n <label class=\"x-acct-checkline\">\n <input type=\"checkbox\" [(ngModel)]=\"installedByTilmart\" />\n A Tilmart installer fitted this unit\n </label>\n\n @if (error) {\n <div class=\"x-acct-err\" style=\"margin-top: 12px\">{{ error }}</div>\n }\n <button\n type=\"button\"\n class=\"x-acct-btn\"\n style=\"margin-top: 14px\"\n [disabled]=\"!canSubmit || submitting\"\n (click)=\"submit()\"\n >\n {{ submitting ? 'Submitting…' : 'Submit claim' }}\n </button>\n <p class=\"x-acct-sub\" style=\"margin-top: 12px\">\n Photos and video help us diagnose faster — you'll be able to add them once\n the claim is open.\n </p>\n </div>\n}\n","import { Component, inject } from '@angular/core';\nimport { BaseDirective, notify, using } from '@thescaffold/ngx-core';\nimport { catchError, firstValueFrom, of, takeUntil } from 'rxjs';\nimport { AccountStoreService } from '../account-store.service';\n\ninterface WishlistItemVm {\n id: string;\n variantId: string;\n name: string;\n slug?: string;\n}\n\ninterface WishlistVm {\n id: string;\n name: string;\n isPublic: boolean;\n shareToken?: string;\n items: WishlistItemVm[];\n renaming?: boolean;\n draftName?: string;\n}\n\n// P5.3, CART-06 — saved lists. View / rename / delete a list, toggle\n// public sharing, remove an item. Adding items happens on the product\n// pages (a wishlist button there, P2 PDP work).\n@Component({\n standalone: false,\n selector: 'x-account-wishlists',\n templateUrl: './wishlists.component.html',\n})\nexport class AccountWishlistsComponent extends BaseDirective {\n private readonly store = inject(AccountStoreService);\n\n loading = true;\n customerId = '';\n wishlists: WishlistVm[] = [];\n\n override init = () => {\n this.store\n .customer()\n .pipe(takeUntil(this.$))\n .subscribe(\n using((customer) => {\n if (!customer) {\n this.loading = false;\n return;\n }\n this.customerId = customer.id;\n void this.load();\n }),\n );\n };\n\n private async load(): Promise<void> {\n const listsRes: any = await firstValueFrom(\n this.apiService\n .on('apps/commerce/wishlist')\n .getMany({ customerId: this.customerId, perPage: 50 } as any)\n .pipe(catchError(() => of({ data: [] }))),\n );\n const lists: any[] = listsRes?.data ?? [];\n\n const withItems = await Promise.all(\n lists.map(async (list) => {\n const itemsRes: any = await firstValueFrom(\n this.apiService\n .on('apps/commerce/wishlist-item')\n .getMany({ wishlistId: list.id, perPage: 200 } as any)\n .pipe(catchError(() => of({ data: [] }))),\n );\n const items = await Promise.all(\n (itemsRes?.data ?? []).map((it: any) => this.resolveItem(it)),\n );\n return {\n id: list.id,\n name: list.name,\n isPublic: !!list.isPublic,\n shareToken: list.shareToken,\n items,\n } as WishlistVm;\n }),\n );\n this.wishlists = withItems;\n this.loading = false;\n }\n\n private async resolveItem(it: any): Promise<WishlistItemVm> {\n let name = 'Saved item';\n let slug: string | undefined;\n try {\n const v: any = await firstValueFrom(\n this.apiService.on('apps/commerce/product-variant').getOne(it.variantId),\n );\n const productId = v?.data?.productId;\n if (productId) {\n const p: any = await firstValueFrom(\n this.apiService.on('apps/commerce/product').getOne(productId),\n );\n name = p?.data?.name ?? v?.data?.sku ?? name;\n slug = p?.data?.slug;\n }\n } catch {\n // leave the fallback name\n }\n return { id: it.id, variantId: it.variantId, name, slug };\n }\n\n startRename(list: WishlistVm): void {\n list.renaming = true;\n list.draftName = list.name;\n }\n\n async saveName(list: WishlistVm): Promise<void> {\n const name = (list.draftName ?? '').trim();\n if (!name) return;\n try {\n await firstValueFrom(\n this.apiService.on('apps/commerce/wishlist').update(list.id, { name }),\n );\n list.name = name;\n list.renaming = false;\n } catch {\n notify('Could not rename that list.', undefined, 'error');\n }\n }\n\n async togglePublic(list: WishlistVm): Promise<void> {\n try {\n await firstValueFrom(\n this.apiService\n .on('apps/commerce/wishlist')\n .update(list.id, { isPublic: !list.isPublic }),\n );\n await this.load();\n } catch {\n notify('Could not update sharing.', undefined, 'error');\n }\n }\n\n async removeList(list: WishlistVm): Promise<void> {\n if (!confirm(`Delete \"${list.name}\"?`)) return;\n try {\n await firstValueFrom(this.apiService.on('apps/commerce/wishlist').remove(list.id));\n await this.load();\n } catch {\n notify('Could not delete that list.', undefined, 'error');\n }\n }\n\n async removeItem(list: WishlistVm, item: WishlistItemVm): Promise<void> {\n try {\n await firstValueFrom(\n this.apiService.on('apps/commerce/wishlist-item').remove(item.id),\n );\n list.items = list.items.filter((x) => x.id !== item.id);\n } catch {\n notify('Could not remove that item.', undefined, 'error');\n }\n }\n}\n","<h2 class=\"x-acct-h2\">Wishlists</h2>\n<p class=\"x-acct-sub\">Add items from any product page. Share a list with an installer or a colleague.</p>\n\n@if (loading) {\n <div class=\"x-acct-empty\">Loading…</div>\n} @else if (!wishlists.length) {\n <div class=\"x-acct-card\">\n <div class=\"x-acct-empty\">\n No saved lists yet — tap the heart on a product to start one.\n </div>\n </div>\n} @else {\n @for (list of wishlists; track list.id) {\n <div class=\"x-acct-card\">\n <div class=\"x-acct-row\" style=\"border-bottom: 0; padding-top: 0\">\n @if (list.renaming) {\n <input class=\"x-acct-field\" style=\"margin: 0; max-width: 240px\" [(ngModel)]=\"list.draftName\" />\n <span>\n <button type=\"button\" class=\"x-acct-btn-ghost\" (click)=\"saveName(list)\">Save</button>\n <button type=\"button\" class=\"x-acct-btn-ghost\" (click)=\"list.renaming = false\" style=\"margin-left: 6px\">\n Cancel\n </button>\n </span>\n } @else {\n <strong>\n {{ list.name }}\n @if (list.isPublic) {\n <span class=\"x-acct-pill x-acct-pill-ok\" style=\"margin-left: 6px\">Shared</span>\n }\n </strong>\n <span>\n <button type=\"button\" class=\"x-acct-btn-ghost\" (click)=\"startRename(list)\">Rename</button>\n <button type=\"button\" class=\"x-acct-btn-ghost\" (click)=\"togglePublic(list)\" style=\"margin-left: 6px\">\n {{ list.isPublic ? 'Make private' : 'Share' }}\n </button>\n <button type=\"button\" class=\"x-acct-btn-ghost\" (click)=\"removeList(list)\" style=\"margin-left: 6px\">\n Delete\n </button>\n </span>\n }\n </div>\n\n @for (item of list.items; track item.id) {\n <div class=\"x-acct-row\">\n @if (item.slug) {\n <a [routerLink]=\"['/p', item.slug]\">{{ item.name }}</a>\n } @else {\n <span>{{ item.name }}</span>\n }\n <button type=\"button\" class=\"x-acct-btn-ghost\" (click)=\"removeItem(list, item)\">Remove</button>\n </div>\n } @empty {\n <div class=\"x-acct-empty\">This list is empty.</div>\n }\n </div>\n }\n}\n","import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { SharedModule } from '@thescaffold/ngx-core';\nimport { AccountStoreService } from './account-store.service';\nimport { AccountComponent } from './account.component';\nimport { AccountAddressesComponent } from './addresses/addresses.component';\nimport { AccountDashboardComponent } from './dashboard/dashboard.component';\nimport { AccountOrderDetailComponent } from './order-detail/order-detail.component';\nimport { AccountOrdersComponent } from './orders/orders.component';\nimport { AccountPaymentsComponent } from './payments/payments.component';\nimport { AccountPrivacyComponent } from './privacy/privacy.component';\nimport { AccountReturnDetailComponent } from './returns/return-detail.component';\nimport { AccountReturnRequestComponent } from './returns/return-request.component';\nimport { AccountReturnsComponent } from './returns/returns.component';\nimport { AccountSettingsComponent } from './settings/settings.component';\nimport { AccountSystemDetailComponent } from './systems/system-detail.component';\nimport { AccountSystemsComponent } from './systems/systems.component';\nimport { AccountWarrantyClaimComponent } from './systems/warranty-claim.component';\nimport { AccountWishlistsComponent } from './wishlists/wishlists.component';\n\n@NgModule({\n declarations: [\n AccountComponent,\n AccountDashboardComponent,\n AccountOrdersComponent,\n AccountOrderDetailComponent,\n AccountAddressesComponent,\n AccountPaymentsComponent,\n AccountWishlistsComponent,\n AccountSettingsComponent,\n AccountSystemsComponent,\n AccountSystemDetailComponent,\n AccountWarrantyClaimComponent,\n AccountReturnsComponent,\n AccountReturnDetailComponent,\n AccountReturnRequestComponent,\n AccountPrivacyComponent,\n ],\n providers: [AccountStoreService],\n imports: [\n SharedModule,\n RouterModule.forChild([\n {\n path: '',\n component: AccountComponent,\n children: [\n { path: '', pathMatch: 'full', redirectTo: 'dashboard' },\n { path: 'dashboard', component: AccountDashboardComponent },\n { path: 'orders', component: AccountOrdersComponent },\n { path: 'orders/:id', component: AccountOrderDetailComponent },\n { path: 'orders/:id/return', component: AccountReturnRequestComponent },\n { path: 'returns', component: AccountReturnsComponent },\n { path: 'returns/:id', component: AccountReturnDetailComponent },\n { path: 'systems', component: AccountSystemsComponent },\n { path: 'systems/:id', component: AccountSystemDetailComponent },\n { path: 'systems/:id/claim', component: AccountWarrantyClaimComponent },\n { path: 'addresses', component: AccountAddressesComponent },\n { path: 'payments', component: AccountPaymentsComponent },\n { path: 'wishlists', component: AccountWishlistsComponent },\n { path: 'settings', component: AccountSettingsComponent },\n { path: 'privacy', component: AccountPrivacyComponent },\n ],\n },\n ]),\n ],\n})\nexport class AccountModule {}\n"],"names":["i1","STATUS_LABELS","i2"],"mappings":";;;;;;;;;;;AAYA;AACA;AACA;AACA;AACA;MAEa,mBAAmB,CAAA;AADhC,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AAEhD,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,aAAa,CAAyB,CAAC,CAAC;QACxD,IAAA,CAAA,MAAM,GAAG,KAAK;AAqCvB,IAAA;IAnCC,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;YAClB,IAAI,CAAC,IAAI,EAAE;QACb;AACA,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;IACtC;AAEA,IAAA,MAAM,eAAe,GAAA;AACnB,QAAA,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE;AAC5B,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AACtB,QAAA,OAAO,CAAC;IACV;IAEQ,IAAI,GAAA;QACV,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClD;AAEQ,IAAA,MAAM,KAAK,GAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE;AAAE,YAAA,OAAO,IAAI;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,EAAE,MAAM;AACvD,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,IAAI;AACxB,QAAA,OAAO,cAAc,CACnB,IAAI,CAAC;aACF,EAAE,CAAC,wBAAwB;aAC3B,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAS;AACrC,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,GAAQ,KAAI;AACf,YAAA,MAAM,GAAG,GAAG,CAAC,GAAG,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;YAChC,OAAO,GAAG,GAAI,GAAuB,GAAG,IAAI;AAC9C,QAAA,CAAC,CAAC,EACF,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAC3B,CACJ;IACH;+GAzCW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAnB,mBAAmB,EAAA,CAAA,CAAA;;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B;;;ACND,MAAM,GAAG,GAAqB;IAC5B,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE;IAC1D,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;IACnD,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,gBAAgB,EAAE;IAChE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,EAAE;IAC7D,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,EAAE;IAClE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,gBAAgB,EAAE;IAC/D,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE;IAC3D,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE;IACxD,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,kBAAkB,EAAE;CACvE;AAED;AACA;AACA;AACA;AACA;AAQM,MAAO,gBAAiB,SAAQ,aAAa,CAAA;AAPnD,IAAA,WAAA,GAAA;;AAQmB,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AACvC,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,mBAAmB,CAAC;QAE3C,IAAA,CAAA,GAAG,GAAG,GAAG;QAClB,IAAA,CAAA,UAAU,GAAG,KAAK;QAClB,IAAA,CAAA,OAAO,GAAG,IAAI;QACd,IAAA,CAAA,YAAY,GAAG,EAAE;QAER,IAAA,CAAA,IAAI,GAAG,MAAK;YACnB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE;AAClD,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK;gBACpB;YACF;AACA,YAAA,IAAI,CAAC;AACF,iBAAA,QAAQ;AACR,iBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AACtB,iBAAA,SAAS,CACR,KAAK,CAAC,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,gBAAA,IAAI,CAAC,YAAY;AACf,oBAAA,QAAQ,EAAE,IAAI,IAAI,QAAQ,EAAE,KAAK,IAAI,QAAQ,EAAE,KAAK,IAAI,cAAc;YAC1E,CAAC,CAAC,CACH;AACL,QAAA,CAAC;AAKF,IAAA;IAHC,MAAM,GAAA;QACJ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC;IAClC;+GA7BW,gBAAgB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,6FCnC7B,2pCAoCA,EAAA,MAAA,EAAA,CAAA,ksHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,uBAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FDDa,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAP5B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,KAAK,EAAA,QAAA,EACP,WAAW,EAAA,aAAA,EAGN,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,2pCAAA,EAAA,MAAA,EAAA,CAAA,ksHAAA,CAAA,EAAA;;;AEXvC,SAAS,SAAS,GAAA;IAChB,OAAO;AACL,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,GAAG,EAAE,EAAE;AACP,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,QAAQ,EAAE,EAAE;AACZ,QAAA,YAAY,EAAE,EAAE;AAChB,QAAA,KAAK,EAAE,EAAE;KACV;AACH;AAEA;AACA;AAMM,MAAO,yBAA0B,SAAQ,aAAa,CAAA;AAL5D,IAAA,WAAA,GAAA;;AAMmB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACnC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,iBAAiB,CAAC;QAEvD,IAAA,CAAA,MAAM,GAAuB,EAAE;QAC/B,IAAA,CAAA,IAAI,GAAuB,EAAE;QAC7B,IAAA,CAAA,WAAW,GAAG,KAAK;QAEnB,IAAA,CAAA,OAAO,GAAG,IAAI;QACd,IAAA,CAAA,UAAU,GAAG,EAAE;QACf,IAAA,CAAA,SAAS,GAAgB,EAAE;QAE3B,IAAA,CAAA,OAAO,GAAG,KAAK;QACf,IAAA,CAAA,MAAM,GAAG,KAAK;QACd,IAAA,CAAA,IAAI,GAAgB,SAAS,EAAE;QAC/B,IAAA,CAAA,SAAS,GAAG,EAAE;QAEL,IAAA,CAAA,IAAI,GAAG,MAAK;YACnB,KAAK,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,MAAM,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;AACzE,YAAA,IAAI,CAAC;AACF,iBAAA,QAAQ;AACR,iBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AACtB,iBAAA,SAAS,CACR,KAAK,CAAC,CAAC,QAAQ,KAAI;gBACjB,IAAI,CAAC,QAAQ,EAAE;AACb,oBAAA,IAAI,CAAC,OAAO,GAAG,KAAK;oBACpB;gBACF;AACA,gBAAA,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,EAAE;AAC7B,gBAAA,KAAK,IAAI,CAAC,IAAI,EAAE;YAClB,CAAC,CAAC,CACH;AACL,QAAA,CAAC;AAoIF,IAAA;AAlIC,IAAA,MAAM,iBAAiB,GAAA;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE;QAClB,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IACtC;IAEQ,MAAM,QAAQ,CAAC,KAAc,EAAA;QACnC,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,IAAI,CAAC,IAAI,GAAG,EAAE;YACd;QACF;AACA,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI;YACF,IAAI,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAClE;gBAAU;AACR,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;QAC1B;IACF;AAEQ,IAAA,MAAM,IAAI,GAAA;AAChB,QAAA,MAAM,GAAG,GAAQ,MAAM,cAAc,CACnC,IAAI,CAAC;aACF,EAAE,CAAC,uBAAuB;AAC1B,aAAA,OAAO,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG,EAAS;AAC5D,aAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAC5C;AACD,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,EAAE,IAAI,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAM,MAAM;YAClD,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,GAAG,EAAE,CAAC,CAAC,GAAG;YACV,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,YAAY,EAAE,CAAC,CAAC,YAAY;YAC5B,KAAK,EAAE,CAAC,CAAC,KAAK;AACd,YAAA,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;AACzB,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;IACtB;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,GAAG,SAAS,EAAE;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAI,CAAC,IAAI,GAAG,EAAE;IAChB;AAEA,IAAA,SAAS,CAAC,CAAY,EAAA;AACpB,QAAA,IAAI,CAAC,IAAI,GAAG,EAAE,GAAG,CAAC,EAAE;AACpB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACnB,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IACrC;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;IACtB;AAEA,IAAA,MAAM,IAAI,GAAA;QACR,IAAI,IAAI,CAAC,MAAM;YAAE;QACjB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE;AAC3E,YAAA,IAAI,CAAC,SAAS,GAAG,uCAAuC;YACxD;QACF;AACA,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAClB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AAEnB,QAAA,MAAM,OAAO,GAAQ;YACnB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;AAC7B,YAAA,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK;AACtB,YAAA,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,SAAS;AAC/B,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,SAAS;YACjC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AAC/B,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK;AACzD,YAAA,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,SAAS;AACzC,YAAA,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,SAAS;AACjD,YAAA,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,SAAS;SACpC;AAED,QAAA,IAAI;AACF,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE;gBAChB,MAAM,cAAc,CAClB,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAC1E;YACH;iBAAO;gBACL,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;AAC/C,gBAAA,MAAM,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACnF;AACA,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,YAAA,MAAM,IAAI,CAAC,IAAI,EAAE;QACnB;QAAE,OAAO,GAAQ,EAAE;YACjB,IAAI,CAAC,SAAS,GAAG,GAAG,EAAE,KAAK,EAAE,OAAO,IAAI,8BAA8B;QACxE;gBAAU;AACR,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK;QACrB;IACF;IAEA,MAAM,MAAM,CAAC,CAAY,EAAA;QACvB,IAAI,CAAC,OAAO,CAAC,CAAA,QAAA,EAAW,CAAC,CAAC,KAAK,IAAI,CAAC;YAAE;AACtC,QAAA,IAAI;AACF,YAAA,MAAM,cAAc,CAClB,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CACzD;AACD,YAAA,MAAM,IAAI,CAAC,IAAI,EAAE;QACnB;AAAE,QAAA,MAAM;AACN,YAAA,MAAM,CAAC,gCAAgC,EAAE,SAAS,EAAE,OAAO,CAAC;QAC9D;IACF;IAEA,MAAM,WAAW,CAAC,CAAY,EAAA;QAC5B,IAAI,CAAC,CAAC,SAAS;YAAE;AACjB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC;AACvD,QAAA,IAAI;YACF,MAAM,cAAc,CAClB,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAC9E;YACD,IAAI,OAAO,EAAE;AACX,gBAAA,MAAM,cAAc,CAClB,IAAI,CAAC;qBACF,EAAE,CAAC,uBAAuB;AAC1B,qBAAA,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAC5C;YACH;AACA,YAAA,MAAM,IAAI,CAAC,IAAI,EAAE;QACnB;AAAE,QAAA,MAAM;AACN,YAAA,MAAM,CAAC,uCAAuC,EAAE,SAAS,EAAE,OAAO,CAAC;QACrE;IACF;+GAnKW,yBAAyB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,uGC3CtC,4wHAoGA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDzDa,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBALrC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,KAAK,YACP,qBAAqB,EAAA,QAAA,EAAA,4wHAAA,EAAA;;;AExCjC;AACA;AACA;AACO,MAAM,mBAAmB,GAA2B;AACzD,IAAA,eAAe,EAAE,kBAAkB;AACnC,IAAA,gBAAgB,EAAE,kBAAkB;AACpC,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,SAAS,EAAE,WAAW;AACtB,IAAA,UAAU,EAAE,gBAAgB;AAC5B,IAAA,mBAAmB,EAAE,mBAAmB;AACxC,IAAA,aAAa,EAAE,eAAe;AAC9B,IAAA,gBAAgB,EAAE,kBAAkB;AACpC,IAAA,UAAU,EAAE,YAAY;AACxB,IAAA,gBAAgB,EAAE,kBAAkB;AACpC,IAAA,eAAe,EAAE,yBAAyB;AAC1C,IAAA,SAAS,EAAE,WAAW;AACtB,IAAA,SAAS,EAAE,WAAW;AACtB,IAAA,SAAS,EAAE,WAAW;AACtB,IAAA,gBAAgB,EAAE,oBAAoB;AACtC,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,QAAQ,EAAE,UAAU;CACrB;AAEK,SAAU,gBAAgB,CAAC,MAAc,EAAA;AAC7C,IAAA,OAAO,mBAAmB,CAAC,MAAM,CAAC,IAAI,MAAM;AAC9C;AAEM,SAAU,eAAe,CAAC,MAAc,EAAA;AAC5C,IAAA,IAAI,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,WAAW;AAAE,QAAA,OAAO,IAAI;IACjE,IAAI,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,iBAAiB;AACjF,QAAA,OAAO,KAAK;IACd,IAAI,MAAM,KAAK,iBAAiB,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,kBAAkB;AACvF,QAAA,OAAO,MAAM;AACf,IAAA,OAAO,EAAE;AACX;;ACXA,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC;IAC5B,iBAAiB;IACjB,kBAAkB;IAClB,SAAS;IACT,WAAW;IACX,YAAY;IACZ,qBAAqB;IACrB,eAAe;IACf,kBAAkB;IAClB,YAAY;IACZ,kBAAkB;IAClB,iBAAiB;AAClB,CAAA,CAAC;AAEF;AACA;AACA;AACA;AAMM,MAAO,yBAA0B,SAAQ,aAAa,CAAA;AAL5D,IAAA,WAAA,GAAA;;AAMmB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,mBAAmB,CAAC;QAEpD,IAAA,CAAA,OAAO,GAAG,IAAI;QACd,IAAA,CAAA,UAAU,GAAG,EAAE;QACf,IAAA,CAAA,SAAS,GAAG,CAAC;QACb,IAAA,CAAA,YAAY,GAAkB,EAAE;QAChC,IAAA,CAAA,kBAAkB,GAAqB,EAAE;QACzC,IAAA,CAAA,aAAa,GAAG,CAAC;QAEjB,IAAA,CAAA,YAAY,GAAG,EAAE;QACjB,IAAA,CAAA,iBAAiB,GAAG,CAAC;QACrB,IAAA,CAAA,eAAe,GAAG,CAAC;QAEV,IAAA,CAAA,IAAI,GAAG,MAAK;AACnB,YAAA,IAAI,CAAC;AACF,iBAAA,QAAQ;AACR,iBAAA,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EACjB,SAAS,CAAC,CAAC,QAAQ,KAAI;AACrB,gBAAA,IAAI,CAAC,QAAQ;AAAE,oBAAA,OAAO,EAAE,CAAC,IAAI,CAAC;AAC9B,gBAAA,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,EAAE;AAC7B,gBAAA,OAAO,EAAE,CAAC,QAAQ,CAAC;AACrB,YAAA,CAAC,CAAC;AAEH,iBAAA,SAAS,CACR,KAAK,CAAC,CAAC,QAAQ,KAAI;gBACjB,IAAI,CAAC,QAAQ,EAAE;AACb,oBAAA,IAAI,CAAC,OAAO,GAAG,KAAK;oBACpB;gBACF;gBACA,KAAK,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChC,CAAC,CAAC,CACH;AACL,QAAA,CAAC;AA+EF,IAAA;IA7ES,MAAM,OAAO,CAAC,UAAkB,EAAA;AACtC,QAAA,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACvE,cAAc,CACZ,IAAI,CAAC;iBACF,EAAE,CAAC,qBAAqB;iBACxB,OAAO,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAS;AAC3C,iBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAS,CAAC,CAAC,CAAC,CACnD;YACD,cAAc,CACZ,IAAI,CAAC;iBACF,EAAE,CAAC,wBAAwB;iBAC3B,OAAO,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAS;AAC3C,iBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAS,CAAC,CAAC,CAAC,CACnD;YACD,cAAc,CACZ,IAAI,CAAC;iBACF,EAAE,CAAC,wBAAwB;iBAC3B,OAAO,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAS;AAC3C,iBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAS,CAAC,CAAC,CAAC,CACnD;YACD,cAAc,CACZ,IAAI,CAAC;iBACF,GAAG,CAAC,gCAAgC;AACpC,iBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CACzC;YACD,cAAc,CACZ,IAAI,CAAC;iBACF,GAAG,CAAC,6BAA6B;AACjC,iBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAS,CAAC,CAAC,CAAC,CACnD;AACF,SAAA,CAAC;QAEF,IAAI,CAAC,YAAY,GAAI,OAAe,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE;AACtD,QAAA,MAAM,OAAO,GAAW,IAAY,EAAE,IAAI,IAAI,EAAE;QAChD,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,MAAM,CACrC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,WAAW,IAAI,CAAC,CAAC,MAAM,KAAK,UAAU,CAC3D,CAAC,MAAM;QACR,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,MAAM,CACnC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,iBAAiB,CACrD,CAAC,MAAM;AAER,QAAA,MAAM,SAAS,GAAU,MAAM,EAAE,IAAI,IAAI,EAAE;QAC3C,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;QAC5E,IAAI,CAAC,YAAY,GAAG;AACjB,aAAA,KAAK;AACL,aAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,SAAS,CAAC;AACtF,aAAA,KAAK,CAAC,CAAC,EAAE,CAAC;AACV,aAAA,GAAG,CAAC,CAAC,CAAC,MAAM;YACX,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,MAAM,EAAE,CAAC,CAAC,MAAM;AAChB,YAAA,WAAW,EAAE,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC;AACvC,YAAA,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,SAAS;YACnC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC;AACrC,YAAA,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,KAAK;AAC9B,SAAA,CAAC,CAAC;AAEL,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;QACtB,IAAI,CAAC,kBAAkB,GAAG,CAAC,UAAU,EAAE,IAAI,IAAI,EAAE;aAC9C,MAAM,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,SAAS;AAC9B,aAAA,GAAG,CAAC,CAAC,CAAM,MAAM;YAChB,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,KAAK,EAAE,CAAC,CAAC,cAAc,GAAG,iBAAiB,GAAG,UAAU;YACxD,SAAS,EAAE,CAAC,CAAC,SAAS;AACtB,YAAA,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,GAAG,IAAI,UAAU,CAAC;AAChE,SAAA,CAAC;AACD,aAAA,MAAM,CAAC,CAAC,CAAiB,KAAK,CAAC,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,EAAE;AACjE,aAAA,IAAI,CAAC,CAAC,CAAiB,EAAE,CAAiB,KAAK,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;AAE1E,QAAA,IAAI,CAAC,aAAa,GAAG,CAAC,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,MAAM;AACnD,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;IACtB;AAEQ,IAAA,EAAE,CAAC,CAAU,EAAA;AACnB,QAAA,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG;AACjC,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAChC;+GAhHW,yBAAyB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,uGC9CtC,y+EAwEA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FD1Ba,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBALrC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,KAAK,YACP,qBAAqB,EAAA,QAAA,EAAA,y+EAAA,EAAA;;;AEbjC;AACA;AACA;AACA;AAMM,MAAO,2BAA4B,SAAQ,aAAa,CAAA;AAL9D,IAAA,WAAA,GAAA;;AAMmB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;AAC9B,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,gBAAgB,CAAC;QAEhD,IAAA,CAAA,OAAO,GAAG,IAAI;QACd,IAAA,CAAA,KAAK,GAAG,KAAK;QAEb,IAAA,CAAA,OAAO,GAAG,EAAE;QACZ,IAAA,CAAA,WAAW,GAAG,EAAE;QAChB,IAAA,CAAA,MAAM,GAAG,EAAE;QACX,IAAA,CAAA,WAAW,GAAG,EAAE;QAChB,IAAA,CAAA,IAAI,GAAG,EAAE;QAET,IAAA,CAAA,QAAQ,GAAG,KAAK;QAChB,IAAA,CAAA,aAAa,GAAG,EAAE;QAClB,IAAA,CAAA,cAAc,GAAG,EAAE;QAEnB,IAAA,CAAA,KAAK,GAAa,EAAE;QACpB,IAAA,CAAA,QAAQ,GAAG,CAAC;QACZ,IAAA,CAAA,aAAa,GAAG,CAAC;QACjB,IAAA,CAAA,QAAQ,GAAG,CAAC;QACZ,IAAA,CAAA,aAAa,GAAG,CAAC;QACjB,IAAA,CAAA,UAAU,GAAG,CAAC;QACd,IAAA,CAAA,UAAU,GAAG,CAAC;QACd,IAAA,CAAA,YAAY,GAAG,CAAC;QAEhB,IAAA,CAAA,QAAQ,GAAiB,EAAE;QAC3B,IAAA,CAAA,QAAQ,GAAgB,EAAE;QAEjB,IAAA,CAAA,IAAI,GAAG,MAAK;AACnB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AAC3D,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK;gBACpB;YACF;AAEA,YAAA,QAAQ,CAAC;gBACP,KAAK,EAAE,IAAI,CAAC;qBACT,EAAE,CAAC,qBAAqB;AACxB,qBAAA,MAAM,CAAC,IAAI,CAAC,OAAO;qBACnB,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;gBACxC,KAAK,EAAE,IAAI,CAAC;qBACT,EAAE,CAAC,0BAA0B;AAC7B,qBAAA,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAS;qBACtD,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;gBACxC,OAAO,EAAE,IAAI,CAAC;qBACX,EAAE,CAAC,oCAAoC;AACvC,qBAAA,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAS;qBACtD,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;gBACxC,QAAQ,EAAE,IAAI,CAAC;qBACZ,EAAE,CAAC,uBAAuB;AAC1B,qBAAA,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAS;qBACrD,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;aACzC;AACE,iBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AACtB,iBAAA,SAAS,CACR,KAAK,CAAC,CAAC,GAAQ,KAAI;AACjB,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,gBAAA,MAAM,KAAK,GAAG,GAAG,EAAE,KAAK,EAAE,IAAI;AAC9B,gBAAA,IAAI,CAAC,KAAK;oBAAE;AACZ,gBAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AAEjB,gBAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW;AACpC,gBAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM;gBAC1B,IAAI,CAAC,WAAW,GAAG,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC;gBACjD,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC;gBACzC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,SAAS;gBACjD,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK;gBACvC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,IAAI,EAAE;gBAC9C,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc,IAAI,EAAE;gBAChD,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC;gBAC3C,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC;gBACrD,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC;gBAC3C,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC;gBACrD,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC;gBAC/C,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC;gBAC/C,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC;gBAEnD,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAM,MAAM;oBACrD,SAAS,EAAE,CAAC,CAAC,SAAS;AACtB,oBAAA,IAAI,EAAE,CAAC,CAAC,YAAY,IAAI,MAAM;oBAC9B,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC;oBACjC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC;AACnC,oBAAA,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC;oBAC7D,gBAAgB,EAAE,CAAC,CAAC,gBAAgB;AACrC,iBAAA,CAAC,CAAC;gBAEH,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,IAAI,EAAE;AACtC,qBAAA,KAAK;AACL,qBAAA,IAAI,CAAC,CAAC,CAAM,EAAE,CAAM,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC;AACpF,qBAAA,GAAG,CAAC,CAAC,CAAM,MAAM;oBAChB,QAAQ,EAAE,CAAC,CAAC,QAAQ;AACpB,oBAAA,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC;AACnC,oBAAA,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,SAAS;oBACvB,MAAM,EAAE,CAAC,CAAC,MAAM;AACjB,iBAAA,CAAC,CAAC;gBAEL,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAM,MAAM;oBAC3D,QAAQ,EAAE,CAAC,CAAC,QAAQ;oBACpB,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;AAC9B,iBAAA,CAAC,CAAC;YACL,CAAC,CAAC,CACH;AACL,QAAA,CAAC;AAsBF,IAAA;IApBC,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE;AACxB,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;AAC7B,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;gBAChB,SAAS,EAAE,IAAI,CAAC,SAAS;AACzB,gBAAA,SAAS,EAAE,EAAE;gBACb,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACxB,aAAA,CAAC;QACJ;AACA,QAAA,MAAM,CAAC,oBAAoB,EAAE,SAAS,EAAE,SAAS,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC;IACjC;AAEQ,IAAA,EAAE,CAAC,CAAU,EAAA;AACnB,QAAA,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG;AACjC,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAChC;+GA9HW,2BAA2B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,0GCvCxC,2sIAmHA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FD5Ea,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBALvC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,KAAK,YACP,wBAAwB,EAAA,QAAA,EAAA,2sIAAA,EAAA;;;AEjBpC;AACA;AACA;AAMM,MAAO,sBAAuB,SAAQ,aAAa,CAAA;AALzD,IAAA,WAAA,GAAA;;AAMmB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,mBAAmB,CAAC;QAEpD,IAAA,CAAA,OAAO,GAAG,IAAI;QACd,IAAA,CAAA,MAAM,GAAiB,EAAE;QAEhB,IAAA,CAAA,IAAI,GAAG,MAAK;AACnB,YAAA,IAAI,CAAC;AACF,iBAAA,QAAQ;AACR,iBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AACtB,iBAAA,SAAS,CACR,KAAK,CAAC,CAAC,QAAQ,KAAI;gBACjB,IAAI,CAAC,QAAQ,EAAE;AACb,oBAAA,IAAI,CAAC,OAAO,GAAG,KAAK;oBACpB;gBACF;gBACA,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,CAAC,CAAC,CACH;AACL,QAAA,CAAC;AAkCF,IAAA;IAhCS,MAAM,IAAI,CAAC,UAAkB,EAAA;AACnC,QAAA,MAAM,GAAG,GAAQ,MAAM,cAAc,CACnC,IAAI,CAAC;aACF,EAAE,CAAC,qBAAqB;aACxB,OAAO,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAS;AAC3C,aAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAC5C;QACD,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,IAAI,IAAI,EAAE;AAC3B,aAAA,KAAK;AACL,aAAA,IAAI,CACH,CAAC,CAAM,EAAE,CAAM,KACb,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,SAAS,CAAC;AAE1E,aAAA,GAAG,CAAC,CAAC,CAAM,MAAM;YAChB,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,MAAM,EAAE,CAAC,CAAC,MAAM;AAChB,YAAA,WAAW,EAAE,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC;AACvC,YAAA,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC;AAC/B,YAAA,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,SAAS;YACnC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC;YACnC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC;YACrC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC;AACzC,YAAA,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,KAAK;AAC9B,SAAA,CAAC,CAAC;AACL,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;IACtB;AAEQ,IAAA,EAAE,CAAC,CAAU,EAAA;AACnB,QAAA,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG;AACjC,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAChC;+GApDW,sBAAsB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,oGC3BnC,qgDA0CA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDfa,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBALlC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,KAAK,YACP,kBAAkB,EAAA,QAAA,EAAA,qgDAAA,EAAA;;;AEN9B;AACA;AAMM,MAAO,wBAAyB,SAAQ,aAAa,CAAA;AAL3D,IAAA,WAAA,GAAA;;AAMmB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,mBAAmB,CAAC;QAEpD,IAAA,CAAA,OAAO,GAAG,IAAI;QACd,IAAA,CAAA,QAAQ,GAAmB,EAAE;QAEpB,IAAA,CAAA,IAAI,GAAG,MAAK;AACnB,YAAA,IAAI,CAAC;AACF,iBAAA,QAAQ;AACR,iBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AACtB,iBAAA,SAAS,CACR,KAAK,CAAC,CAAC,QAAQ,KAAI;gBACjB,IAAI,CAAC,QAAQ,EAAE;AACb,oBAAA,IAAI,CAAC,OAAO,GAAG,KAAK;oBACpB;gBACF;gBACA,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,CAAC,CAAC,CACH;AACL,QAAA,CAAC;AA+CF,IAAA;IA7CS,MAAM,IAAI,CAAC,UAAkB,EAAA;AACnC,QAAA,MAAM,SAAS,GAAQ,MAAM,cAAc,CACzC,IAAI,CAAC;aACF,EAAE,CAAC,qBAAqB;aACxB,OAAO,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAS;AAC3C,aAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAC5C;AACD,QAAA,MAAM,MAAM,GAAU,SAAS,EAAE,IAAI,IAAI,EAAE;QAC3C,MAAM,UAAU,GAAG,IAAI,GAAG,CACxB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CACzC;QAED,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAChC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KACX,cAAc,CACZ,IAAI,CAAC;aACF,EAAE,CAAC,uBAAuB;AAC1B,aAAA,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAS;AAC7C,aAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAC5C,CACF,CACF;QAED,IAAI,CAAC,QAAQ,GAAG;aACb,OAAO,CAAC,CAAC,GAAQ,KAAK,GAAG,EAAE,IAAI,IAAI,EAAE;AACrC,aAAA,GAAG,CAAC,CAAC,CAAM,MAAM;YAChB,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,WAAW,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE;YAC5C,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;AAC7B,YAAA,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,KAAK;YAC7B,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,SAAS,EAAE,CAAC,CAAC,SAAS;AACvB,SAAA,CAAC;AACD,aAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC;AACtF,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;IACtB;AAEQ,IAAA,EAAE,CAAC,CAAU,EAAA;AACnB,QAAA,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG;AACjC,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAChC;+GAjEW,wBAAwB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,sGCzBrC,ulCA6BA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDJa,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBALpC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,KAAK,YACP,oBAAoB,EAAA,QAAA,EAAA,ulCAAA,EAAA;;;AEjBhC;AACA;AACA;AACA;AAMM,MAAO,uBAAwB,SAAQ,aAAa,CAAA;AAL1D,IAAA,WAAA,GAAA;;AAMmB,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC;AACxB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,mBAAmB,CAAC;QAGpD,IAAA,CAAA,SAAS,GAAG,KAAK;QACjB,IAAA,CAAA,UAAU,GAAG,KAAK;QAClB,IAAA,CAAA,cAAc,GAAG,KAAK;QACtB,IAAA,CAAA,cAAc,GAAG,EAAE;QAEV,IAAA,CAAA,IAAI,GAAG,MAAK;AACnB,YAAA,IAAI,CAAC;AACF,iBAAA,QAAQ;AACR,iBAAA,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;AAChD,QAAA,CAAC;AA+CF,IAAA;AA7CC,IAAA,MAAM,YAAY,GAAA;QAChB,IAAI,IAAI,CAAC,SAAS;YAAE;AACpB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI;AACF,YAAA,MAAM,GAAG,GAAQ,MAAM,cAAc,CACnC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,mCAAmC,EAAE;gBACjD,UAAU,EAAE,IAAI,CAAC,UAAU;AAC5B,aAAA,CAAC,CACH;AACD,YAAA,MAAM,MAAM,GAAG,GAAG,EAAE,IAAI,IAAI,GAAG;AAC/B,YAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;AACvD,gBAAA,IAAI,EAAE,kBAAkB;AACzB,aAAA,CAAC;YACF,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;YACrC,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AACrC,YAAA,CAAC,CAAC,IAAI,GAAG,GAAG;AACZ,YAAA,CAAC,CAAC,QAAQ,GAAG,gBAAgB,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO;YACzE,CAAC,CAAC,KAAK,EAAE;AACT,YAAA,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC;QAC1B;AAAE,QAAA,MAAM;AACN,YAAA,MAAM,CAAC,4DAA4D,EAAE,SAAS,EAAE,OAAO,CAAC;QAC1F;gBAAU;AACR,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;QACxB;IACF;AAEA,IAAA,MAAM,eAAe,GAAA;QACnB,IAAI,IAAI,CAAC,UAAU;YAAE;AACrB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI;YACF,MAAM,cAAc,CAClB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,4BAA4B,EAAE;AAC1C,gBAAA,IAAI,EAAE,UAAU;gBAChB,UAAU,EAAE,IAAI,CAAC,UAAU;AAC3B,gBAAA,IAAI,EAAE,IAAI,CAAC,cAAc,IAAI,SAAS;AACvC,aAAA,CAAC,CACH;AACD,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,YAAA,MAAM,CAAC,wCAAwC,EAAE,SAAS,EAAE,SAAS,CAAC;QACxE;AAAE,QAAA,MAAM;AACN,YAAA,MAAM,CAAC,mDAAmD,EAAE,SAAS,EAAE,OAAO,CAAC;QACjF;gBAAU;AACR,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;QACzB;IACF;+GA5DW,uBAAuB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,qGCdpC,6gHAkFA,EAAA,MAAA,EAAA,CAAA,qmCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDpEa,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBALnC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,KAAK,YACP,mBAAmB,EAAA,QAAA,EAAA,6gHAAA,EAAA;;;AEE/B,MAAMC,eAAa,GAA2B;AAC5C,IAAA,SAAS,EAAE,WAAW;AACtB,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,eAAe,EAAE,sBAAsB;AACvC,IAAA,UAAU,EAAE,iBAAiB;AAC7B,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,UAAU,EAAE,iBAAiB;AAC7B,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,SAAS,EAAE,WAAW;CACvB;AAED;AACA;AAMM,MAAO,4BAA6B,SAAQ,aAAa,CAAA;AAL/D,IAAA,WAAA,GAAA;;AAMmB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;QAE/C,IAAA,CAAA,OAAO,GAAG,IAAI;QACd,IAAA,CAAA,KAAK,GAAG,KAAK;QAEb,IAAA,CAAA,SAAS,GAAG,EAAE;QACd,IAAA,CAAA,MAAM,GAAG,EAAE;QACX,IAAA,CAAA,WAAW,GAAG,EAAE;QAChB,IAAA,CAAA,UAAU,GAAG,EAAE;QAQf,IAAA,CAAA,OAAO,GAAG,EAAE;QACZ,IAAA,CAAA,KAAK,GAAmB,EAAE;QAEjB,IAAA,CAAA,IAAI,GAAG,MAAK;AACnB,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;YACvD,IAAI,CAAC,EAAE,EAAE;AACP,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK;gBACpB;YACF;AAEA,YAAA,QAAQ,CAAC;gBACP,OAAO,EAAE,IAAI,CAAC;qBACX,EAAE,CAAC,8BAA8B;qBACjC,MAAM,CAAC,EAAE;qBACT,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;gBACxC,KAAK,EAAE,IAAI,CAAC;qBACT,EAAE,CAAC,2BAA2B;qBAC9B,OAAO,CAAC,EAAE,eAAe,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAS;AACpD,qBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;aAC5C;AACE,iBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AACtB,iBAAA,SAAS,CACR,KAAK,CAAC,CAAC,GAAQ,KAAI;AACjB,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,gBAAA,MAAM,CAAC,GAAG,GAAG,EAAE,OAAO,EAAE,IAAI;AAC5B,gBAAA,IAAI,CAAC,CAAC;oBAAE;AACR,gBAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,gBAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS;AAC5B,gBAAA,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM;AACtB,gBAAA,IAAI,CAAC,WAAW,GAAGA,eAAa,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM;AACtD,gBAAA,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU;AAC9B,gBAAA,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM;AACtB,gBAAA,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY;AAClC,gBAAA,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,aAAa;AACpC,gBAAA,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU;gBAC9B,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY,IAAI,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,SAAS;AAC/E,gBAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS;AAC5B,gBAAA,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU;AAC9B,gBAAA,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO;gBACxB,MAAM,QAAQ,GAAU,GAAG,EAAE,KAAK,EAAE,IAAI,IAAI,EAAE;AAC9C,gBAAA,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAM,MAAM;AACrC,oBAAA,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC;oBACjC,iBAAiB,EAAE,CAAC,CAAC,iBAAiB;oBACtC,gBAAgB,EAAE,CAAC,CAAC,gBAAgB;oBACpC,WAAW,EAAE,CAAC,CAAC,WAAW;AAC3B,iBAAA,CAAC,CAAC;gBACH,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC;YAC1C,CAAC,CAAC,CACH;AACL,QAAA,CAAC;AAiBF,IAAA;AAfS,IAAA,MAAM,SAAS,CAAC,OAAe,EAAE,QAAe,EAAA;AACtD,QAAA,MAAM,UAAU,GAAQ,MAAM,cAAc,CAC1C,IAAI,CAAC;aACF,EAAE,CAAC,0BAA0B;aAC7B,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAS;AACxC,aAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAC5C;AACD,QAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,CACtB,CAAC,UAAU,EAAE,IAAI,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,IAAI,MAAM,CAAC,CAAC,CAC3E;AACD,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM;AACtC,YAAA,GAAG,EAAE;AACL,YAAA,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,IAAI,MAAM;AACvD,SAAA,CAAC,CAAC;IACL;+GAnFW,4BAA4B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA5B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,4BAA4B,2GChCzC,s8DA8DA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FD9Ba,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBALxC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,KAAK,YACP,yBAAyB,EAAA,QAAA,EAAA,s8DAAA,EAAA;;;AEfrC,MAAM,OAAO,GAAsC;AACjD,IAAA,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,oBAAoB,EAAE;AAC3D,IAAA,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,iBAAiB,EAAE;AAChD,IAAA,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,kBAAkB,EAAE;AACvD,IAAA,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,mBAAmB,EAAE;AACzD,IAAA,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,iBAAiB,EAAE;AAClD,IAAA,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE;CAClD;AAED,MAAM,OAAO,GAAsC;AACjD,IAAA,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,wBAAwB,EAAE;AACnD,IAAA,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,gCAAgC,EAAE;AAC7D,IAAA,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,0BAA0B,EAAE;CACvD;AAED;AACA;AAMM,MAAO,6BAA8B,SAAQ,aAAa,CAAA;AALhE,IAAA,WAAA,GAAA;;AAMmB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;AAC9B,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,mBAAmB,CAAC;QAE3C,IAAA,CAAA,OAAO,GAAG,OAAO;QACjB,IAAA,CAAA,OAAO,GAAG,OAAO;QAE1B,IAAA,CAAA,OAAO,GAAG,IAAI;QACd,IAAA,CAAA,OAAO,GAAG,EAAE;QACZ,IAAA,CAAA,WAAW,GAAG,EAAE;QAChB,IAAA,CAAA,UAAU,GAAG,EAAE;QACf,IAAA,CAAA,KAAK,GAAuB,EAAE;QAE9B,IAAA,CAAA,UAAU,GAAG,EAAE;QACf,IAAA,CAAA,MAAM,GAAG,QAAQ;QACjB,IAAA,CAAA,KAAK,GAAG,EAAE;QAEV,IAAA,CAAA,QAAQ,GAAG,KAAK;QAChB,IAAA,CAAA,WAAW,GAA+F,IAAI;QAC9G,IAAA,CAAA,UAAU,GAAG,KAAK;QAClB,IAAA,CAAA,KAAK,GAAG,EAAE;QACV,IAAA,CAAA,UAAU,GAAG,EAAE;QAEN,IAAA,CAAA,IAAI,GAAG,MAAK;AACnB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;YAC3D,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;AACvE,YAAA,KAAK,IAAI,CAAC,IAAI,EAAE;AAClB,QAAA,CAAC;AA2FF,IAAA;AAzFS,IAAA,MAAM,IAAI,GAAA;QAChB,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACvC,cAAc,CACZ,IAAI,CAAC;iBACF,EAAE,CAAC,qBAAqB;AACxB,iBAAA,MAAM,CAAC,IAAI,CAAC,OAAO;AACnB,iBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CACzC;YACD,cAAc,CACZ,IAAI,CAAC;iBACF,EAAE,CAAC,0BAA0B;AAC7B,iBAAA,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAS;AACtD,iBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAC5C;AACF,SAAA,CAAC;QACF,IAAI,CAAC,WAAW,GAAI,KAAa,EAAE,IAAI,EAAE,WAAW,IAAI,EAAE;AAC1D,QAAA,IAAI,CAAC,KAAK,GAAG,CAAE,KAAa,EAAE,IAAI,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAM,MAAM;YACzD,WAAW,EAAE,CAAC,CAAC,EAAE;AACjB,YAAA,IAAI,EAAE,CAAC,CAAC,YAAY,IAAI,MAAM;YAC9B,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC;AACnC,YAAA,QAAQ,EAAE,KAAK;YACf,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC;AAClC,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;IACtB;AAEA,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC;IAC7C;AAEA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,QACE,CAAC,CAAC,IAAI,CAAC,UAAU;AACjB,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;AAC7B,YAAA,IAAI,CAAC,WAAW,EAAE,QAAQ,KAAK,IAAI;IAEvC;AAEA,IAAA,MAAM,gBAAgB,GAAA;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;YACvB;QACF;AACA,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI;AACF,YAAA,MAAM,GAAG,GAAQ,MAAM,cAAc,CACnC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,0CAA0C,EAAE;gBAC/D,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,UAAU,EAAE,IAAI,CAAC,UAAU;AAC5B,aAAA,CAAC,CACH;YACD,IAAI,CAAC,WAAW,GAAG,GAAG,EAAE,IAAI,IAAI,IAAI;QACtC;AAAE,QAAA,MAAM;AACN,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;QACzB;gBAAU;AACR,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;QACvB;IACF;AAEA,IAAA,MAAM,MAAM,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE;AACxC,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,QAAA,IAAI;AACF,YAAA,MAAM,GAAG,GAAQ,MAAM,cAAc,CACnC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,sCAAsC,EAAE;gBAC3D,OAAO,EAAE,IAAI,CAAC,OAAO;AACrB,gBAAA,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,SAAS;gBACxC,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,MAAM,EAAE,IAAI,CAAC,MAAM;AACnB,gBAAA,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,SAAS;AAC9B,gBAAA,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;oBACpC,WAAW,EAAE,CAAC,CAAC,WAAW;AAC1B,oBAAA,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,UAAU,CAAC;AAC7C,iBAAA,CAAC,CAAC;AACJ,aAAA,CAAC,CACH;AACD,YAAA,IAAI,GAAG,EAAE,MAAM,KAAK,OAAO,EAAE;gBAC3B,IAAI,CAAC,KAAK,GAAG,GAAG,EAAE,OAAO,IAAI,+BAA+B;gBAC5D;YACF;YACA,IAAI,CAAC,UAAU,GAAG,GAAG,EAAE,IAAI,EAAE,SAAS,IAAI,EAAE;AAC5C,YAAA,MAAM,CAAC,kBAAkB,EAAE,SAAS,EAAE,SAAS,CAAC;QAClD;QAAE,OAAO,GAAQ,EAAE;YACjB,IAAI,CAAC,KAAK,GAAG,GAAG,EAAE,KAAK,EAAE,OAAO,IAAI,+BAA+B;QACrE;gBAAU;AACR,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;QACzB;IACF;+GArHW,6BAA6B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA7B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,6BAA6B,4GCpC1C,m9GAiGA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,iGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,uGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gHAAA,EAAA,MAAA,EAAA,CAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gHAAA,EAAA,MAAA,EAAA,CAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FD7Da,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBALzC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,KAAK,YACP,0BAA0B,EAAA,QAAA,EAAA,m9GAAA,EAAA;;;AEjBtC,MAAM,aAAa,GAA2B;AAC5C,IAAA,SAAS,EAAE,WAAW;AACtB,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,eAAe,EAAE,sBAAsB;AACvC,IAAA,UAAU,EAAE,iBAAiB;AAC7B,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,UAAU,EAAE,iBAAiB;AAC7B,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,SAAS,EAAE,WAAW;CACvB;AAED,MAAM,aAAa,GAA2B;AAC5C,IAAA,kBAAkB,EAAE,oBAAoB;AACxC,IAAA,UAAU,EAAE,YAAY;AACxB,IAAA,gBAAgB,EAAE,kBAAkB;AACpC,IAAA,iBAAiB,EAAE,mBAAmB;AACtC,IAAA,YAAY,EAAE,cAAc;AAC5B,IAAA,aAAa,EAAE,eAAe;CAC/B;AAED;AACA;AAMM,MAAO,uBAAwB,SAAQ,aAAa,CAAA;AAL1D,IAAA,WAAA,GAAA;;AAMmB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,mBAAmB,CAAC;QAEpD,IAAA,CAAA,OAAO,GAAG,IAAI;QACd,IAAA,CAAA,OAAO,GAAkB,EAAE;QAElB,IAAA,CAAA,IAAI,GAAG,MAAK;AACnB,YAAA,IAAI,CAAC;AACF,iBAAA,QAAQ;AACR,iBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AACtB,iBAAA,SAAS,CACR,KAAK,CAAC,CAAC,QAAQ,KAAI;gBACjB,IAAI,CAAC,QAAQ,EAAE;AACb,oBAAA,IAAI,CAAC,OAAO,GAAG,KAAK;oBACpB;gBACF;gBACA,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,CAAC,CAAC,CACH;AACL,QAAA,CAAC;AAkCF,IAAA;IAhCS,MAAM,IAAI,CAAC,UAAkB,EAAA;AACnC,QAAA,MAAM,GAAG,GAAQ,MAAM,cAAc,CACnC,IAAI,CAAC;aACF,EAAE,CAAC,8BAA8B;aACjC,OAAO,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAS;AAC3C,aAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAC5C;QACD,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,EAAE,IAAI,IAAI,EAAE;AAC5B,aAAA,KAAK;aACL,IAAI,CAAC,CAAC,CAAM,EAAE,CAAM,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACpE,aAAA,GAAG,CAAC,CAAC,CAAM,MAAM;YAChB,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,UAAU;YACvD,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM;AAChD,YAAA,IAAI,EACF,CAAC,CAAC,MAAM,KAAK;AACX,kBAAE;kBACA,CAAC,CAAC,MAAM,KAAK,UAAU,IAAI,CAAC,CAAC,MAAM,KAAK;AACxC,sBAAE;AACF,sBAAE,MAAM;YACd,UAAU,EAAE,CAAC,CAAC,UAAU;YACxB,SAAS,EAAE,CAAC,CAAC,SAAS;AACvB,SAAA,CAAC,CAAC;AACL,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;IACtB;AAEQ,IAAA,EAAE,CAAC,CAAU,EAAA;AACnB,QAAA,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG;AACjC,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAChC;+GApDW,uBAAuB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,qGC5CpC,6pCAmCA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDSa,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBALnC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,KAAK,YACP,mBAAmB,EAAA,QAAA,EAAA,6pCAAA,EAAA;;;ME3BlB,iBAAiB,CAAA;AAH9B,IAAA,WAAA,GAAA;AAImB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AA2BjD,IAAA;AAzBC,IAAA,MAAM,UAAU,GAAA;AACd,QAAA,MAAM,GAAG,GAAQ,MAAM,cAAc,CACnC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAChD;QACD,OAAO,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,IAAI,EAAE;IAC1C;IAEA,MAAM,aAAa,CAAC,OAGnB,EAAA;AACC,QAAA,MAAM,cAAc,CAClB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,+BAA+B,EAAE,OAAO,CAAC,CAChE;IACH;IAEA,MAAM,cAAc,CAAC,OAIpB,EAAA;AACC,QAAA,MAAM,cAAc,CAClB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,mCAAmC,EAAE,OAAO,CAAC,CACnE;IACH;+GA3BW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cAFhB,MAAM,EAAA,CAAA,CAAA;;4FAEP,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACLD,MAAM,UAAU,GAA0E;IACxF,EAAE,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,yBAAyB,EAAE,MAAM,EAAE,IAAI,EAAE;AACxE,IAAA,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,qBAAqB,EAAE;IACjD,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,qBAAqB,EAAE,OAAO,EAAE,IAAI,EAAE;AACjE,IAAA,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,mBAAmB,EAAE;AAClD,IAAA,EAAE,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,sBAAsB,EAAE;CACxD;AAED,MAAM,QAAQ,GAAqC;AACjD,IAAA,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;AAChC,IAAA,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;AAC5B,IAAA,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;CACvC;AAED;AACA;AACA;AACA;AAMM,MAAO,wBAAyB,SAAQ,aAAa,CAAA;AAL3D,IAAA,WAAA,GAAA;;AAMmB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACtC,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;QAE/C,IAAA,CAAA,UAAU,GAAG,UAAU;QACvB,IAAA,CAAA,QAAQ,GAAG,QAAQ;QAE5B,IAAA,CAAA,cAAc,GAAG,IAAI;QACrB,IAAA,CAAA,aAAa,GAAG,KAAK;QACrB,IAAA,CAAA,YAAY,GAAG,EAAE;QACjB,IAAA,CAAA,QAAQ,GAAG,EAAE;QACb,IAAA,CAAA,WAAW,GAAG,EAAE;QAEhB,IAAA,CAAA,aAAa,GAAG,EAAE;QAClB,IAAA,CAAA,SAAS,GAAG,EAAE;QACd,IAAA,CAAA,gBAAgB,GAAG,EAAE;QACrB,IAAA,CAAA,gBAAgB,GAAG,KAAK;QACxB,IAAA,CAAA,aAAa,GAAG,EAAE;QAClB,IAAA,CAAA,YAAY,GAAG,KAAK;QAEpB,IAAA,CAAA,KAAK,GAAgB,QAAQ;QAE7B,IAAA,CAAA,YAAY,GAAG,IAAI;QACnB,IAAA,CAAA,WAAW,GAAG,KAAK;QACnB,IAAA,CAAA,UAAU,GAAG,EAAE;QACf,IAAA,CAAA,cAAc,GAA6B,EAAE;QAC7C,IAAA,CAAA,gBAAgB,GAAG,KAAK;QACxB,IAAA,CAAA,iBAAiB,GAAG,KAAK;QACzB,IAAA,CAAA,eAAe,GAAG,OAAO;QACzB,IAAA,CAAA,aAAa,GAAG,OAAO;QACvB,IAAA,CAAA,eAAe,GAAG,KAAK;QAUd,IAAA,CAAA,IAAI,GAAG,MAAK;AACnB,YAAA,KAAK,IAAI,CAAC,WAAW,EAAE;AACvB,YAAA,KAAK,IAAI,CAAC,SAAS,EAAE;AACrB,YAAA,KAAK,IAAI,CAAC,SAAS,EAAE;AACvB,QAAA,CAAC;AAuHF,IAAA;AAnIC,IAAA,IAAI,iBAAiB,GAAA;AACnB,QAAA,QACE,CAAC,CAAC,IAAI,CAAC,aAAa;YACpB,CAAC,CAAC,IAAI,CAAC,SAAS;AAChB,YAAA,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,gBAAgB;IAE5C;AAQQ,IAAA,MAAM,WAAW,GAAA;AACvB,QAAA,IAAI;YACF,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE;YAC5C,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YACrE,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,YAAY,IAAI,EAAE;QACzC;AAAE,QAAA,MAAM;AACN,YAAA,IAAI,CAAC,YAAY,GAAG,8BAA8B;QACpD;gBAAU;AACR,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK;QAC7B;IACF;AAEQ,IAAA,MAAM,SAAS,GAAA;AACrB,QAAA,IAAI;AACF,YAAA,MAAM,CAAC,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;YACvD,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,QAAQ;AAAE,gBAAA,IAAI,CAAC,KAAK,GAAG,CAAC;QACrE;AAAE,QAAA,MAAM;;QAER;IACF;AAEQ,IAAA,MAAM,SAAS,GAAA;AACrB,QAAA,IAAI;AACF,YAAA,MAAM,GAAG,GAAQ,MAAM,cAAc,CACnC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAClE;AACD,YAAA,MAAM,IAAI,GAAG,GAAG,EAAE,IAAI;YACtB,IAAI,IAAI,EAAE;gBACR,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,IAAI,EAAE;gBAC3C,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,gBAAgB;gBAC/C,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC,iBAAiB;gBACjD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,IAAI,OAAO;gBACtD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,OAAO;gBAClD,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,IAAI,CAAC,eAAe;YAC/C;QACF;AAAE,QAAA,MAAM;AACN,YAAA,IAAI,CAAC,UAAU,GAAG,+CAA+C;QACnE;gBAAU;AACR,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK;QAC3B;IACF;AAEA,IAAA,MAAM,WAAW,GAAA;QACf,IAAI,IAAI,CAAC,aAAa;YAAE;AACxB,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;AACtB,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;AACvE,YAAA,MAAM,CAAC,eAAe,EAAE,SAAS,EAAE,SAAS,CAAC;QAC/C;QAAE,OAAO,GAAQ,EAAE;YACjB,IAAI,CAAC,YAAY,GAAG,GAAG,EAAE,KAAK,EAAE,OAAO,IAAI,8BAA8B;QAC3E;gBAAU;AACR,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK;QAC5B;IACF;AAEA,IAAA,MAAM,cAAc,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,iBAAiB;YAAE;AACtD,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE;AACvB,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC;gBACnC,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;AACxC,aAAA,CAAC;AACF,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;YACxB,UAAU,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;gBAC5B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC;YAClC,CAAC,EAAE,IAAI,CAAC;QACV;QAAE,OAAO,GAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,aAAa;AAChB,gBAAA,GAAG,EAAE,KAAK,EAAE,OAAO,IAAI,iCAAiC;QAC5D;gBAAU;AACR,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;QAC/B;IACF;AAEA,IAAA,QAAQ,CAAC,MAAmB,EAAA;AAC1B,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM;QACnB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAC1C;IAEA,SAAS,CAAC,QAAgB,EAAE,OAAe,EAAA;AACzC,QAAA,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,OAAO,CAAC;IAChE;IAEA,aAAa,CAAC,QAAgB,EAAE,OAAe,EAAA;AAC7C,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACxD,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;QACzD,IAAI,CAAC,cAAc,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;IAC/E;AAEA,IAAA,MAAM,SAAS,GAAA;QACb,IAAI,IAAI,CAAC,WAAW;YAAE;AACtB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,QAAA,IAAI;YACF,MAAM,cAAc,CAClB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,4CAA4C,EAAE;gBACjE,UAAU,EAAE,IAAI,CAAC,cAAc;gBAC/B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;AACvC,gBAAA,sBAAsB,EAAE,SAAS;gBACjC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;gBACzC,eAAe,EAAE,IAAI,CAAC,eAAe;gBACrC,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,eAAe,EAAE,IAAI,CAAC,eAAe;AACtC,aAAA,CAAC,CACH;AACD,YAAA,MAAM,CAAC,mBAAmB,EAAE,SAAS,EAAE,SAAS,CAAC;QACnD;QAAE,OAAO,GAAQ,EAAE;YACjB,IAAI,CAAC,UAAU,GAAG,GAAG,EAAE,KAAK,EAAE,OAAO,IAAI,kCAAkC;QAC7E;gBAAU;AACR,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;QAC1B;IACF;+GAnKW,wBAAwB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,sGC/BrC,+3KA2JA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,uGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FD5Ha,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBALpC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,KAAK,YACP,oBAAoB,EAAA,QAAA,EAAA,+3KAAA,EAAA;;;AEPhC;AACA;AACA;AAMM,MAAO,4BAA6B,SAAQ,aAAa,CAAA;AAL/D,IAAA,WAAA,GAAA;;AAMmB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;QAE/C,IAAA,CAAA,OAAO,GAAG,IAAI;QACd,IAAA,CAAA,KAAK,GAAG,KAAK;QAEb,IAAA,CAAA,UAAU,GAAG,EAAE;QACf,IAAA,CAAA,WAAW,GAAG,iBAAiB;QAE/B,IAAA,CAAA,SAAS,GAAG,EAAE;QAEd,IAAA,CAAA,UAAU,GAAG,KAAK;QAGlB,IAAA,CAAA,UAAU,GAAkB,IAAI;QAChC,IAAA,CAAA,MAAM,GAAG,EAAE;QAGX,IAAA,CAAA,MAAM,GAAc,EAAE;QACtB,IAAA,CAAA,OAAO,GAAe,EAAE;QACxB,IAAA,CAAA,eAAe,GAAG,KAAK;QAEd,IAAA,CAAA,IAAI,GAAG,MAAK;AACnB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AAC9D,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK;gBACpB;YACF;AAEA,YAAA,IAAI,CAAC;iBACF,EAAE,CAAC,wBAAwB;AAC3B,iBAAA,MAAM,CAAC,IAAI,CAAC,UAAU;AACtB,iBAAA,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EACjB,UAAU,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC;AAEhC,iBAAA,SAAS,CACR,KAAK,CAAC,CAAC,GAAQ,KAAI;AACjB,gBAAA,MAAM,CAAC,GAAG,GAAG,EAAE,IAAI;gBACnB,IAAI,CAAC,CAAC,EAAE;AACN,oBAAA,IAAI,CAAC,OAAO,GAAG,KAAK;oBACpB;gBACF;AACA,gBAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,gBAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS;gBAC5B,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU;AAChC,gBAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ;AAC1B,gBAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS;AAC5B,gBAAA,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM;AACtB,gBAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW;AAChC,gBAAA,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;AAClB,sBAAE,IAAI,CAAC,GAAG,CACN,CAAC,EACD,IAAI,CAAC,KAAK,CACR,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,UAAU,GAAG,KAAK,CAAC,CAC9D;sBAEH,IAAI;AACR,gBAAA,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YACtB,CAAC,CAAC,CACH;AACL,QAAA,CAAC;AA6EF,IAAA;IA3ES,MAAM,OAAO,CAAC,CAAM,EAAA;AAC1B,QAAA,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACnD,cAAc,CACZ,IAAI,CAAC;iBACF,EAAE,CAAC,+BAA+B;AAClC,iBAAA,MAAM,CAAC,CAAC,CAAC,SAAS;AAClB,iBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CACzC;YACD,cAAc,CACZ,IAAI,CAAC;iBACF,EAAE,CAAC,8BAA8B;AACjC,iBAAA,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAS;AAChD,iBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAC5C;YACD,cAAc,CACZ,IAAI,CAAC;iBACF,EAAE,CAAC,6BAA6B;AAChC,iBAAA,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,EAAS;AAC3E,iBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAC5C;AACF,SAAA,CAAC;QAEF,MAAM,CAAC,GAAQ,OAAO;AACtB,QAAA,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE;AACtB,YAAA,MAAM,CAAC,GAAQ,MAAM,cAAc,CACjC,IAAI,CAAC;iBACF,EAAE,CAAC,uBAAuB;AAC1B,iBAAA,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS;AACvB,iBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CACzC;AACD,YAAA,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,WAAW;YACpE,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI;QAClC;AAEA,QAAA,IAAI,CAAC,MAAM,GAAG,CAAE,MAAc,EAAE,IAAI,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAM,MAAM;YAC3D,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,gBAAgB,EAAE,CAAC,CAAC,gBAAgB;YACpC,aAAa,EAAE,CAAC,CAAC,aAAa;YAC9B,SAAS,EAAE,CAAC,CAAC,SAAS;AACvB,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,OAAO,GAAG,CAAE,OAAe,EAAE,IAAI,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAM,MAAM;YAC7D,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,cAAc,EAAE,CAAC,CAAC,cAAc;AACjC,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;IACtB;;;;AAKA,IAAA,MAAM,mBAAmB,GAAA;QACvB,IAAI,IAAI,CAAC,eAAe;YAAE;AAC1B,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,QAAA,IAAI;YACF,MAAM,GAAG,GAAQ,MAAM,cAAc,CACnC,IAAI,CAAC,UAAU,CAAC,GAAG,CACjB,CAAA,gCAAA,EAAmC,IAAI,CAAC,UAAU,CAAA,YAAA,CAAc,EAChE,EAAE,MAAM,EAAE,MAAM,EAAE,CACnB,CACF;YACD,MAAM,IAAI,GAAG,OAAO,GAAG,KAAK,QAAQ,GAAG,GAAG,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,IAAI,CAAC;YACrE,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC;AACrC,YAAA,IAAI,GAAG,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AACnC,gBAAA,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE;AACnB,gBAAA,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;AACxB,gBAAA,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE;YACtB;QACF;gBAAU;AACR,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;QAC9B;IACF;+GAzIW,4BAA4B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA5B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,4BAA4B,2GC7BzC,8gGA6FA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDhEa,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBALxC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,KAAK,YACP,yBAAyB,EAAA,QAAA,EAAA,8gGAAA,EAAA;;;AEVrC;AACA;AACA;AAMM,MAAO,uBAAwB,SAAQ,aAAa,CAAA;AAL1D,IAAA,WAAA,GAAA;;AAMmB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,mBAAmB,CAAC;QAEpD,IAAA,CAAA,OAAO,GAAG,IAAI;QACd,IAAA,CAAA,UAAU,GAAG,EAAE;QACf,IAAA,CAAA,QAAQ,GAAG,EAAE;QACb,IAAA,CAAA,WAAW,GAAG,EAAE;QAChB,IAAA,CAAA,OAAO,GAAe,EAAE;QAExB,IAAA,CAAA,MAAM,GAAG,KAAK;QACd,IAAA,CAAA,cAAc,GAAG,KAAK;QACtB,IAAA,CAAA,aAAa,GAAG,EAAE;AAClB,QAAA,IAAA,CAAA,GAAG,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QAErD,IAAA,CAAA,IAAI,GAAG,MAAK;AACnB,YAAA,IAAI,CAAC;AACF,iBAAA,QAAQ;AACR,iBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AACtB,iBAAA,SAAS,CACR,KAAK,CAAC,CAAC,QAAQ,KAAI;gBACjB,IAAI,CAAC,QAAQ,EAAE;AACb,oBAAA,IAAI,CAAC,OAAO,GAAG,KAAK;oBACpB;gBACF;AACA,gBAAA,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,EAAE;AAC7B,gBAAA,KAAK,IAAI,CAAC,IAAI,EAAE;YAClB,CAAC,CAAC,CACH;AACL,QAAA,CAAC;AAqGF,IAAA;AAnGS,IAAA,MAAM,IAAI,GAAA;AAChB,QAAA,MAAM,GAAG,GAAQ,MAAM,cAAc,CACnC,IAAI,CAAC;aACF,EAAE,CAAC,wBAAwB;AAC3B,aAAA,OAAO,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG,EAAS;AAC5D,aAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAC5C;AACD,QAAA,MAAM,IAAI,GAAU,GAAG,EAAE,IAAI,IAAI,EAAE;AACnC,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC9B,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAI;AACnB,YAAA,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7D,YAAA,MAAM,UAAU,GAAG,CAAC,CAAC;AACnB,kBAAE,IAAI,CAAC,GAAG,CACN,CAAC,EACD,IAAI,CAAC,KAAK,CACR,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,UAAU,GAAG,KAAK,CAAC,CAC9D;kBAEH,IAAI;YACR,OAAO;gBACL,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,IAAI;gBACJ,IAAI;AACJ,gBAAA,MAAM,EAAE,SAA+B;AACvC,gBAAA,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU;gBAC1B,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,UAAU;gBACV,MAAM,EAAE,CAAC,CAAC,MAAM;aACjB;QACH,CAAC,CAAC,CACH;AACD,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;IACtB;IAEQ,MAAM,cAAc,CAC1B,SAAiB,EAAA;AAEjB,QAAA,IAAI;AACF,YAAA,MAAM,CAAC,GAAQ,MAAM,cAAc,CACjC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,+BAA+B,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CACtE;AACD,YAAA,MAAM,SAAS,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS;YACpC,IAAI,SAAS,EAAE;AACb,gBAAA,MAAM,CAAC,GAAQ,MAAM,cAAc,CACjC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAC9D;gBACD,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,iBAAiB,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE;YAC1F;YACA,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,iBAAiB,EAAE;QACpD;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE;QACpC;IACF;AAEA,IAAA,MAAM,WAAW,GAAA;QACf,IAAI,IAAI,CAAC,cAAc;YAAE;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE;QACtC,IAAI,CAAC,GAAG,EAAE;AACR,YAAA,IAAI,CAAC,aAAa,GAAG,oDAAoD;YACzE;QACF;AACA,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE;AACvB,QAAA,IAAI;;AAEF,YAAA,MAAM,KAAK,GAAQ,MAAM,cAAc,CACrC,IAAI,CAAC;iBACF,EAAE,CAAC,+BAA+B;iBAClC,OAAO,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAS;AAClC,iBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAC5C;AACD,YAAA,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE;YAC5C,IAAI,CAAC,SAAS,EAAE;AACd,gBAAA,IAAI,CAAC,aAAa,GAAG,mDAAmD;gBACxE;YACF;AACA,YAAA,MAAM,GAAG,GAAQ,MAAM,cAAc,CACnC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,iCAAiC,EAAE;gBACtD,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,SAAS;AACT,gBAAA,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,SAAS;AACpC,gBAAA,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,SAAS;AACxC,gBAAA,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,SAAS;AACrC,aAAA,CAAC,CACH;AACD,YAAA,IAAI,GAAG,EAAE,MAAM,KAAK,OAAO,EAAE;gBAC3B,IAAI,CAAC,aAAa,GAAG,GAAG,EAAE,OAAO,IAAI,0BAA0B;gBAC/D;YACF;AACA,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK;YACnB,IAAI,CAAC,GAAG,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;AACnE,YAAA,MAAM,CAAC,qBAAqB,EAAE,SAAS,EAAE,SAAS,CAAC;AACnD,YAAA,MAAM,IAAI,CAAC,IAAI,EAAE;QACnB;QAAE,OAAO,GAAQ,EAAE;YACjB,IAAI,CAAC,aAAa,GAAG,GAAG,EAAE,KAAK,EAAE,OAAO,IAAI,0BAA0B;QACxE;gBAAU;AACR,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK;QAC7B;IACF;+GAhIW,uBAAuB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,qGCxBpC,43FAgFA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,iGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDxDa,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBALnC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,KAAK,YACP,mBAAmB,EAAA,QAAA,EAAA,43FAAA,EAAA;;;AEf/B,MAAM,eAAe,GAAG;IACtB,gBAAgB;IAChB,uBAAuB;IACvB,aAAa;IACb,4BAA4B;IAC5B,eAAe;IACf,cAAc;IACd,0BAA0B;IAC1B,iBAAiB;CAClB;AAED;AACA;AACA;AAMM,MAAO,6BAA8B,SAAQ,aAAa,CAAA;AALhE,IAAA,WAAA,GAAA;;AAMmB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;AAC9B,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,mBAAmB,CAAC;QAE3C,IAAA,CAAA,cAAc,GAAG,eAAe;QAEzC,IAAA,CAAA,UAAU,GAAG,EAAE;QACf,IAAA,CAAA,UAAU,GAAG,EAAE;QAEf,IAAA,CAAA,gBAAgB,GAAG,EAAE;QACrB,IAAA,CAAA,QAAQ,GAA4B,EAAE;QACtC,IAAA,CAAA,kBAAkB,GAAG,KAAK;QAE1B,IAAA,CAAA,UAAU,GAAG,KAAK;QAClB,IAAA,CAAA,KAAK,GAAG,EAAE;QACV,IAAA,CAAA,IAAI,GAAG,KAAK;QAEH,IAAA,CAAA,IAAI,GAAG,MAAK;AACnB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;YAC9D,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;AACzE,QAAA,CAAC;AAkCF,IAAA;AAhCC,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;IACvC;AAEA,IAAA,MAAM,MAAM,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE;AACxC,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,QAAA,IAAI;AACF,YAAA,MAAM,GAAG,GAAQ,MAAM,cAAc,CACnC,IAAI,CAAC,UAAU,CAAC,IAAI,CAClB,CAAA,uBAAA,EAA0B,IAAI,CAAC,UAAU,QAAQ,EACjD;AACE,gBAAA,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,SAAS;AACxC,gBAAA,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;gBAC9C,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACpE,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;AAC5C,aAAA,CACF,CACF;AACD,YAAA,IAAI,GAAG,EAAE,MAAM,KAAK,OAAO,EAAE;gBAC3B,IAAI,CAAC,KAAK,GAAG,GAAG,EAAE,OAAO,IAAI,8BAA8B;gBAC3D;YACF;AACA,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,YAAA,MAAM,CAAC,iBAAiB,EAAE,SAAS,EAAE,SAAS,CAAC;QACjD;QAAE,OAAO,GAAQ,EAAE;YACjB,IAAI,CAAC,KAAK,GAAG,GAAG,EAAE,KAAK,EAAE,OAAO,IAAI,8BAA8B;QACpE;gBAAU;AACR,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;QACzB;IACF;+GArDW,6BAA6B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA7B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,6BAA6B,4GCzB1C,i5DAyDA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,uGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDhCa,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBALzC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,KAAK,YACP,0BAA0B,EAAA,QAAA,EAAA,i5DAAA,EAAA;;;AEAtC;AACA;AACA;AAMM,MAAO,yBAA0B,SAAQ,aAAa,CAAA;AAL5D,IAAA,WAAA,GAAA;;AAMmB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,mBAAmB,CAAC;QAEpD,IAAA,CAAA,OAAO,GAAG,IAAI;QACd,IAAA,CAAA,UAAU,GAAG,EAAE;QACf,IAAA,CAAA,SAAS,GAAiB,EAAE;QAEnB,IAAA,CAAA,IAAI,GAAG,MAAK;AACnB,YAAA,IAAI,CAAC;AACF,iBAAA,QAAQ;AACR,iBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AACtB,iBAAA,SAAS,CACR,KAAK,CAAC,CAAC,QAAQ,KAAI;gBACjB,IAAI,CAAC,QAAQ,EAAE;AACb,oBAAA,IAAI,CAAC,OAAO,GAAG,KAAK;oBACpB;gBACF;AACA,gBAAA,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,EAAE;AAC7B,gBAAA,KAAK,IAAI,CAAC,IAAI,EAAE;YAClB,CAAC,CAAC,CACH;AACL,QAAA,CAAC;AA4GF,IAAA;AA1GS,IAAA,MAAM,IAAI,GAAA;AAChB,QAAA,MAAM,QAAQ,GAAQ,MAAM,cAAc,CACxC,IAAI,CAAC;aACF,EAAE,CAAC,wBAAwB;AAC3B,aAAA,OAAO,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,EAAS;AAC3D,aAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAC5C;AACD,QAAA,MAAM,KAAK,GAAU,QAAQ,EAAE,IAAI,IAAI,EAAE;AAEzC,QAAA,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CACjC,KAAK,CAAC,GAAG,CAAC,OAAO,IAAI,KAAI;AACvB,YAAA,MAAM,QAAQ,GAAQ,MAAM,cAAc,CACxC,IAAI,CAAC;iBACF,EAAE,CAAC,6BAA6B;AAChC,iBAAA,OAAO,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,EAAS;AACpD,iBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAC5C;AACD,YAAA,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAC7B,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,EAAO,KAAK,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAC9D;YACD,OAAO;gBACL,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,gBAAA,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ;gBACzB,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,KAAK;aACQ;QACjB,CAAC,CAAC,CACH;AACD,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC1B,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;IACtB;IAEQ,MAAM,WAAW,CAAC,EAAO,EAAA;QAC/B,IAAI,IAAI,GAAG,YAAY;AACvB,QAAA,IAAI,IAAwB;AAC5B,QAAA,IAAI;YACF,MAAM,CAAC,GAAQ,MAAM,cAAc,CACjC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,+BAA+B,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CACzE;AACD,YAAA,MAAM,SAAS,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS;YACpC,IAAI,SAAS,EAAE;AACb,gBAAA,MAAM,CAAC,GAAQ,MAAM,cAAc,CACjC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAC9D;AACD,gBAAA,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,IAAI;AAC5C,gBAAA,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI;YACtB;QACF;AAAE,QAAA,MAAM;;QAER;AACA,QAAA,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE;IAC3D;AAEA,IAAA,WAAW,CAAC,IAAgB,EAAA;AAC1B,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI;IAC5B;IAEA,MAAM,QAAQ,CAAC,IAAgB,EAAA;AAC7B,QAAA,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,EAAE,IAAI,EAAE;AAC1C,QAAA,IAAI,CAAC,IAAI;YAAE;AACX,QAAA,IAAI;YACF,MAAM,cAAc,CAClB,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,wBAAwB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CACvE;AACD,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;QACvB;AAAE,QAAA,MAAM;AACN,YAAA,MAAM,CAAC,6BAA6B,EAAE,SAAS,EAAE,OAAO,CAAC;QAC3D;IACF;IAEA,MAAM,YAAY,CAAC,IAAgB,EAAA;AACjC,QAAA,IAAI;AACF,YAAA,MAAM,cAAc,CAClB,IAAI,CAAC;iBACF,EAAE,CAAC,wBAAwB;AAC3B,iBAAA,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CACjD;AACD,YAAA,MAAM,IAAI,CAAC,IAAI,EAAE;QACnB;AAAE,QAAA,MAAM;AACN,YAAA,MAAM,CAAC,2BAA2B,EAAE,SAAS,EAAE,OAAO,CAAC;QACzD;IACF;IAEA,MAAM,UAAU,CAAC,IAAgB,EAAA;QAC/B,IAAI,CAAC,OAAO,CAAC,CAAA,QAAA,EAAW,IAAI,CAAC,IAAI,IAAI,CAAC;YAAE;AACxC,QAAA,IAAI;AACF,YAAA,MAAM,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,wBAAwB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAClF,YAAA,MAAM,IAAI,CAAC,IAAI,EAAE;QACnB;AAAE,QAAA,MAAM;AACN,YAAA,MAAM,CAAC,6BAA6B,EAAE,SAAS,EAAE,OAAO,CAAC;QAC3D;IACF;AAEA,IAAA,MAAM,UAAU,CAAC,IAAgB,EAAE,IAAoB,EAAA;AACrD,QAAA,IAAI;AACF,YAAA,MAAM,cAAc,CAClB,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,6BAA6B,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAClE;YACD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACzD;AAAE,QAAA,MAAM;AACN,YAAA,MAAM,CAAC,6BAA6B,EAAE,SAAS,EAAE,OAAO,CAAC;QAC3D;IACF;+GAhIW,yBAAyB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,uGC9BtC,sxEAyDA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FD3Ba,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBALrC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,KAAK,YACP,qBAAqB,EAAA,QAAA,EAAA,sxEAAA,EAAA;;;MEuCpB,aAAa,CAAA;+GAAb,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,iBA5CtB,gBAAgB;YAChB,yBAAyB;YACzB,sBAAsB;YACtB,2BAA2B;YAC3B,yBAAyB;YACzB,wBAAwB;YACxB,yBAAyB;YACzB,wBAAwB;YACxB,uBAAuB;YACvB,4BAA4B;YAC5B,6BAA6B;YAC7B,uBAAuB;YACvB,4BAA4B;YAC5B,6BAA6B;AAC7B,YAAA,uBAAuB,aAIvB,YAAY,EAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,CAAA;AA0BH,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,EAAA,SAAA,EA5Bb,CAAC,mBAAmB,CAAC,YAE9B,YAAY;YACZ,YAAY,CAAC,QAAQ,CAAC;AACpB,gBAAA;AACE,oBAAA,IAAI,EAAE,EAAE;AACR,oBAAA,SAAS,EAAE,gBAAgB;AAC3B,oBAAA,QAAQ,EAAE;wBACR,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE;AACxD,wBAAA,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,yBAAyB,EAAE;AAC3D,wBAAA,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,sBAAsB,EAAE;AACrD,wBAAA,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,2BAA2B,EAAE;AAC9D,wBAAA,EAAE,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,6BAA6B,EAAE;AACvE,wBAAA,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,uBAAuB,EAAE;AACvD,wBAAA,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,4BAA4B,EAAE;AAChE,wBAAA,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,uBAAuB,EAAE;AACvD,wBAAA,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,4BAA4B,EAAE;AAChE,wBAAA,EAAE,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,6BAA6B,EAAE;AACvE,wBAAA,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,yBAAyB,EAAE;AAC3D,wBAAA,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,wBAAwB,EAAE;AACzD,wBAAA,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,yBAAyB,EAAE;AAC3D,wBAAA,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,wBAAwB,EAAE;AACzD,wBAAA,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,uBAAuB,EAAE;AACxD,qBAAA;AACF,iBAAA;aACF,CAAC,CAAA,EAAA,CAAA,CAAA;;4FAGO,aAAa,EAAA,UAAA,EAAA,CAAA;kBA9CzB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,gBAAgB;wBAChB,yBAAyB;wBACzB,sBAAsB;wBACtB,2BAA2B;wBAC3B,yBAAyB;wBACzB,wBAAwB;wBACxB,yBAAyB;wBACzB,wBAAwB;wBACxB,uBAAuB;wBACvB,4BAA4B;wBAC5B,6BAA6B;wBAC7B,uBAAuB;wBACvB,4BAA4B;wBAC5B,6BAA6B;wBAC7B,uBAAuB;AACxB,qBAAA;oBACD,SAAS,EAAE,CAAC,mBAAmB,CAAC;AAChC,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,YAAY,CAAC,QAAQ,CAAC;AACpB,4BAAA;AACE,gCAAA,IAAI,EAAE,EAAE;AACR,gCAAA,SAAS,EAAE,gBAAgB;AAC3B,gCAAA,QAAQ,EAAE;oCACR,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE;AACxD,oCAAA,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,yBAAyB,EAAE;AAC3D,oCAAA,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,sBAAsB,EAAE;AACrD,oCAAA,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,2BAA2B,EAAE;AAC9D,oCAAA,EAAE,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,6BAA6B,EAAE;AACvE,oCAAA,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,uBAAuB,EAAE;AACvD,oCAAA,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,4BAA4B,EAAE;AAChE,oCAAA,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,uBAAuB,EAAE;AACvD,oCAAA,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,4BAA4B,EAAE;AAChE,oCAAA,EAAE,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,6BAA6B,EAAE;AACvE,oCAAA,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,yBAAyB,EAAE;AAC3D,oCAAA,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,wBAAwB,EAAE;AACzD,oCAAA,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,yBAAyB,EAAE;AAC3D,oCAAA,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,wBAAwB,EAAE;AACzD,oCAAA,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,uBAAuB,EAAE;AACxD,iCAAA;AACF,6BAAA;yBACF,CAAC;AACH,qBAAA;AACF,iBAAA;;;;;"}
|