@eric-emg/symphiq-components 1.2.395 → 1.2.396

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.
@@ -68326,23 +68326,47 @@ class SymphiqBusinessAnalysisDashboardComponent {
68326
68326
  function DashboardHeaderComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
68327
68327
  i0.ɵɵelement(0, "div", 6);
68328
68328
  } }
68329
- function DashboardHeaderComponent_Conditional_20_Template(rf, ctx) { if (rf & 1) {
68330
- i0.ɵɵelementStart(0, "div", 14)(1, "div", 15);
68329
+ function DashboardHeaderComponent_Conditional_11_Template(rf, ctx) { if (rf & 1) {
68330
+ const _r1 = i0.ɵɵgetCurrentView();
68331
+ i0.ɵɵelementStart(0, "div", 7)(1, "symphiq-search-button", 16);
68332
+ i0.ɵɵlistener("searchClick", function DashboardHeaderComponent_Conditional_11_Template_symphiq_search_button_searchClick_1_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onSearchClick()); });
68333
+ i0.ɵɵelementEnd();
68334
+ i0.ɵɵelementStart(2, "button", 17);
68335
+ i0.ɵɵlistener("click", function DashboardHeaderComponent_Conditional_11_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onViewModeClick()); });
68336
+ i0.ɵɵnamespaceSVG();
68337
+ i0.ɵɵelementStart(3, "svg", 18);
68338
+ i0.ɵɵelement(4, "path", 19)(5, "path", 20);
68339
+ i0.ɵɵelementEnd();
68340
+ i0.ɵɵnamespaceHTML();
68341
+ i0.ɵɵelementStart(6, "span");
68342
+ i0.ɵɵtext(7);
68343
+ i0.ɵɵelementEnd()()();
68344
+ } if (rf & 2) {
68345
+ const ctx_r1 = i0.ɵɵnextContext();
68346
+ i0.ɵɵadvance();
68347
+ i0.ɵɵproperty("isLightMode", ctx_r1.isLightMode());
68348
+ i0.ɵɵadvance();
68349
+ i0.ɵɵproperty("ngClass", ctx_r1.getViewModeButtonClasses());
68350
+ i0.ɵɵadvance(5);
68351
+ i0.ɵɵtextInterpolate(ctx_r1.viewModeLabel());
68352
+ } }
68353
+ function DashboardHeaderComponent_Conditional_13_Template(rf, ctx) { if (rf & 1) {
68354
+ i0.ɵɵelementStart(0, "div", 9)(1, "div", 10);
68331
68355
  i0.ɵɵtext(2, "Generated At");
68332
68356
  i0.ɵɵelementEnd();
68333
- i0.ɵɵelementStart(3, "div", 16);
68357
+ i0.ɵɵelementStart(3, "div", 11);
68334
68358
  i0.ɵɵtext(4);
68335
68359
  i0.ɵɵelementEnd()();
68336
68360
  } if (rf & 2) {
68337
- const ctx_r0 = i0.ɵɵnextContext();
68361
+ const ctx_r1 = i0.ɵɵnextContext();
68338
68362
  i0.ɵɵadvance();
68339
- i0.ɵɵclassMap(ctx_r0.metaLabelClass());
68363
+ i0.ɵɵclassMap(ctx_r1.metaLabelClass());
68340
68364
  i0.ɵɵadvance(2);
68341
- i0.ɵɵclassMap(ctx_r0.headerTitleClass());
68365
+ i0.ɵɵclassMap(ctx_r1.headerTitleClass());
68342
68366
  i0.ɵɵadvance();
68343
- i0.ɵɵtextInterpolate(ctx_r0.formattedGeneratedDate());
68367
+ i0.ɵɵtextInterpolate(ctx_r1.formattedGeneratedDate());
68344
68368
  } }
68345
- function DashboardHeaderComponent_Conditional_33_Conditional_3_Template(rf, ctx) { if (rf & 1) {
68369
+ function DashboardHeaderComponent_Conditional_26_Conditional_3_Template(rf, ctx) { if (rf & 1) {
68346
68370
  i0.ɵɵelementStart(0, "span", 5);
68347
68371
  i0.ɵɵtext(1, "\u203A");
68348
68372
  i0.ɵɵelementEnd();
@@ -68350,27 +68374,44 @@ function DashboardHeaderComponent_Conditional_33_Conditional_3_Template(rf, ctx)
68350
68374
  i0.ɵɵtext(3);
68351
68375
  i0.ɵɵelementEnd();
68352
68376
  } if (rf & 2) {
68353
- const ctx_r0 = i0.ɵɵnextContext(2);
68354
- i0.ɵɵproperty("ngClass", ctx_r0.isLightMode() ? "text-slate-400" : "text-slate-500");
68377
+ const ctx_r1 = i0.ɵɵnextContext(2);
68378
+ i0.ɵɵproperty("ngClass", ctx_r1.isLightMode() ? "text-slate-400" : "text-slate-500");
68355
68379
  i0.ɵɵadvance(2);
68356
- i0.ɵɵproperty("ngClass", ctx_r0.isLightMode() ? "text-slate-500" : "text-slate-500");
68380
+ i0.ɵɵproperty("ngClass", ctx_r1.isLightMode() ? "text-slate-500" : "text-slate-500");
68357
68381
  i0.ɵɵadvance();
68358
- i0.ɵɵtextInterpolate1(" ", ctx_r0.currentSubsection(), " ");
68382
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.currentSubsection(), " ");
68359
68383
  } }
68360
- function DashboardHeaderComponent_Conditional_33_Template(rf, ctx) { if (rf & 1) {
68361
- i0.ɵɵelementStart(0, "div", 20)(1, "span", 5);
68384
+ function DashboardHeaderComponent_Conditional_26_Template(rf, ctx) { if (rf & 1) {
68385
+ i0.ɵɵelementStart(0, "div", 15)(1, "span", 5);
68362
68386
  i0.ɵɵtext(2);
68363
68387
  i0.ɵɵelementEnd();
68364
- i0.ɵɵconditionalCreate(3, DashboardHeaderComponent_Conditional_33_Conditional_3_Template, 4, 3);
68388
+ i0.ɵɵconditionalCreate(3, DashboardHeaderComponent_Conditional_26_Conditional_3_Template, 4, 3);
68365
68389
  i0.ɵɵelementEnd();
68366
68390
  } if (rf & 2) {
68367
- const ctx_r0 = i0.ɵɵnextContext();
68391
+ const ctx_r1 = i0.ɵɵnextContext();
68392
+ i0.ɵɵadvance();
68393
+ i0.ɵɵproperty("ngClass", ctx_r1.isLightMode() ? "text-slate-600 font-medium" : "text-slate-400 font-medium");
68368
68394
  i0.ɵɵadvance();
68369
- i0.ɵɵproperty("ngClass", ctx_r0.isLightMode() ? "text-slate-600 font-medium" : "text-slate-400 font-medium");
68395
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.currentSection(), " ");
68370
68396
  i0.ɵɵadvance();
68371
- i0.ɵɵtextInterpolate1(" ", ctx_r0.currentSection(), " ");
68397
+ i0.ɵɵconditional(ctx_r1.currentSubsection() ? 3 : -1);
68398
+ } }
68399
+ function DashboardHeaderComponent_Conditional_27_Template(rf, ctx) { if (rf & 1) {
68400
+ const _r3 = i0.ɵɵgetCurrentView();
68401
+ i0.ɵɵelementStart(0, "symphiq-search-button", 21);
68402
+ i0.ɵɵlistener("searchClick", function DashboardHeaderComponent_Conditional_27_Template_symphiq_search_button_searchClick_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onSearchClick()); });
68403
+ i0.ɵɵelementEnd();
68404
+ i0.ɵɵelementStart(1, "button", 22);
68405
+ i0.ɵɵlistener("click", function DashboardHeaderComponent_Conditional_27_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onViewModeClick()); });
68406
+ i0.ɵɵnamespaceSVG();
68407
+ i0.ɵɵelementStart(2, "svg", 18);
68408
+ i0.ɵɵelement(3, "path", 19)(4, "path", 20);
68409
+ i0.ɵɵelementEnd()();
68410
+ } if (rf & 2) {
68411
+ const ctx_r1 = i0.ɵɵnextContext();
68412
+ i0.ɵɵproperty("isLightMode", ctx_r1.isLightMode())("minimized", true);
68372
68413
  i0.ɵɵadvance();
68373
- i0.ɵɵconditional(ctx_r0.currentSubsection() ? 3 : -1);
68414
+ i0.ɵɵproperty("ngClass", ctx_r1.getViewModeButtonClasses());
68374
68415
  } }
68375
68416
  class DashboardHeaderComponent {
68376
68417
  constructor() {
@@ -68383,6 +68424,7 @@ class DashboardHeaderComponent {
68383
68424
  this.currentSection = input(...(ngDevMode ? [undefined, { debugName: "currentSection" }] : []));
68384
68425
  this.currentSubsection = input(...(ngDevMode ? [undefined, { debugName: "currentSubsection" }] : []));
68385
68426
  this.isLoading = input(...(ngDevMode ? [undefined, { debugName: "isLoading" }] : []));
68427
+ this.showControls = input(true, ...(ngDevMode ? [{ debugName: "showControls" }] : []));
68386
68428
  this.searchClick = output();
68387
68429
  this.viewModeClick = output();
68388
68430
  this.headerScrollService = inject(HeaderScrollService);
@@ -68439,7 +68481,7 @@ class DashboardHeaderComponent {
68439
68481
  : 'bg-slate-800 hover:bg-slate-700 text-slate-300 border border-slate-700';
68440
68482
  }
68441
68483
  static { this.ɵfac = function DashboardHeaderComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || DashboardHeaderComponent)(); }; }
68442
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DashboardHeaderComponent, selectors: [["symphiq-dashboard-header"]], inputs: { requestedByUser: [1, "requestedByUser"], createdDate: [1, "createdDate"], title: [1, "title"], subtitle: [1, "subtitle"], viewMode: [1, "viewMode"], viewModeLabel: [1, "viewModeLabel"], currentSection: [1, "currentSection"], currentSubsection: [1, "currentSubsection"], isLoading: [1, "isLoading"] }, outputs: { searchClick: "searchClick", viewModeClick: "viewModeClick" }, decls: 39, vars: 46, consts: [[1, "sticky", "top-0", "z-50", 3, "ngClass"], [1, "transition-all", "duration-300", "ease-in-out", "overflow-hidden"], [1, "max-w-7xl", "mx-auto", "px-4", "sm:px-6", "lg:px-8", "py-8"], [1, "flex", "items-center", "justify-between"], [1, "flex", "items-center", "gap-3"], [3, "ngClass"], ["title", "Refreshing data...", 1, "animate-spin", "w-4", "h-4", "border-2", "border-blue-500/30", "border-t-blue-500", "rounded-full"], [1, "flex", "items-center", "gap-2"], [3, "searchClick", "isLightMode"], ["type", "button", 1, "cursor-pointer", "flex", "items-center", "gap-2", "px-3", "py-1.5", "rounded-lg", "text-xs", "font-medium", "transition-all", "duration-200", "hover:scale-105", 3, "click", "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-4", "h-4"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M15 12a3 3 0 11-6 0 3 3 0 016 0z"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"], [1, "flex", "flex-col", "gap-4", "min-w-[180px]"], [1, "text-left", "sm:text-right"], [1, "text-xs", "sm:text-sm"], [1, "text-sm", "sm:text-base", "font-medium"], [1, "max-w-7xl", "mx-auto", "px-4", "sm:px-6", "lg:px-8", "py-3"], [1, "flex-1", "min-w-0", "mr-4"], [1, "flex", "items-center", "gap-4"], [1, "flex", "items-center", "gap-2", "text-sm", "flex-shrink-0"], [3, "searchClick", "isLightMode", "minimized"], ["type", "button", 1, "cursor-pointer", "flex", "items-center", "gap-2", "px-2", "py-1.5", "rounded-lg", "text-xs", "font-medium", "transition-all", "duration-200", "hover:scale-105", 3, "click", "ngClass"]], template: function DashboardHeaderComponent_Template(rf, ctx) { if (rf & 1) {
68484
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DashboardHeaderComponent, selectors: [["symphiq-dashboard-header"]], inputs: { requestedByUser: [1, "requestedByUser"], createdDate: [1, "createdDate"], title: [1, "title"], subtitle: [1, "subtitle"], viewMode: [1, "viewMode"], viewModeLabel: [1, "viewModeLabel"], currentSection: [1, "currentSection"], currentSubsection: [1, "currentSubsection"], isLoading: [1, "isLoading"], showControls: [1, "showControls"] }, outputs: { searchClick: "searchClick", viewModeClick: "viewModeClick" }, decls: 28, vars: 42, consts: [[1, "sticky", "top-0", "z-50", 3, "ngClass"], [1, "transition-all", "duration-300", "ease-in-out", "overflow-hidden"], [1, "max-w-7xl", "mx-auto", "px-4", "sm:px-6", "lg:px-8", "py-8"], [1, "flex", "items-center", "justify-between"], [1, "flex", "items-center", "gap-3"], [3, "ngClass"], ["title", "Refreshing data...", 1, "animate-spin", "w-4", "h-4", "border-2", "border-blue-500/30", "border-t-blue-500", "rounded-full"], [1, "flex", "items-center", "gap-2"], [1, "flex", "flex-col", "gap-4", "min-w-[180px]"], [1, "text-left", "sm:text-right"], [1, "text-xs", "sm:text-sm"], [1, "text-sm", "sm:text-base", "font-medium"], [1, "max-w-7xl", "mx-auto", "px-4", "sm:px-6", "lg:px-8", "py-3"], [1, "flex-1", "min-w-0", "mr-4"], [1, "flex", "items-center", "gap-4"], [1, "flex", "items-center", "gap-2", "text-sm", "flex-shrink-0"], [3, "searchClick", "isLightMode"], ["type", "button", 1, "cursor-pointer", "flex", "items-center", "gap-2", "px-3", "py-1.5", "rounded-lg", "text-xs", "font-medium", "transition-all", "duration-200", "hover:scale-105", 3, "click", "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-4", "h-4"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M15 12a3 3 0 11-6 0 3 3 0 016 0z"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"], [3, "searchClick", "isLightMode", "minimized"], ["type", "button", 1, "cursor-pointer", "flex", "items-center", "gap-2", "px-2", "py-1.5", "rounded-lg", "text-xs", "font-medium", "transition-all", "duration-200", "hover:scale-105", 3, "click", "ngClass"]], template: function DashboardHeaderComponent_Template(rf, ctx) { if (rf & 1) {
68443
68485
  i0.ɵɵelementStart(0, "header", 0)(1, "div", 1)(2, "div", 2)(3, "div", 3)(4, "div")(5, "div", 4)(6, "h1", 5);
68444
68486
  i0.ɵɵtext(7);
68445
68487
  i0.ɵɵelementEnd();
@@ -68448,43 +68490,24 @@ class DashboardHeaderComponent {
68448
68490
  i0.ɵɵelementStart(9, "p", 5);
68449
68491
  i0.ɵɵtext(10);
68450
68492
  i0.ɵɵelementEnd()();
68451
- i0.ɵɵelementStart(11, "div", 7)(12, "symphiq-search-button", 8);
68452
- i0.ɵɵlistener("searchClick", function DashboardHeaderComponent_Template_symphiq_search_button_searchClick_12_listener() { return ctx.onSearchClick(); });
68453
- i0.ɵɵelementEnd();
68454
- i0.ɵɵelementStart(13, "button", 9);
68455
- i0.ɵɵlistener("click", function DashboardHeaderComponent_Template_button_click_13_listener() { return ctx.onViewModeClick(); });
68456
- i0.ɵɵnamespaceSVG();
68457
- i0.ɵɵelementStart(14, "svg", 10);
68458
- i0.ɵɵelement(15, "path", 11)(16, "path", 12);
68493
+ i0.ɵɵconditionalCreate(11, DashboardHeaderComponent_Conditional_11_Template, 8, 3, "div", 7);
68494
+ i0.ɵɵelementStart(12, "div", 8);
68495
+ i0.ɵɵconditionalCreate(13, DashboardHeaderComponent_Conditional_13_Template, 5, 5, "div", 9);
68496
+ i0.ɵɵelementStart(14, "div", 9)(15, "div", 10);
68497
+ i0.ɵɵtext(16, "Requested by");
68459
68498
  i0.ɵɵelementEnd();
68460
- i0.ɵɵnamespaceHTML();
68461
- i0.ɵɵelementStart(17, "span");
68499
+ i0.ɵɵelementStart(17, "div", 11);
68462
68500
  i0.ɵɵtext(18);
68463
- i0.ɵɵelementEnd()()();
68464
- i0.ɵɵelementStart(19, "div", 13);
68465
- i0.ɵɵconditionalCreate(20, DashboardHeaderComponent_Conditional_20_Template, 5, 5, "div", 14);
68466
- i0.ɵɵelementStart(21, "div", 14)(22, "div", 15);
68467
- i0.ɵɵtext(23, "Requested by");
68468
- i0.ɵɵelementEnd();
68469
- i0.ɵɵelementStart(24, "div", 16);
68470
- i0.ɵɵtext(25);
68471
68501
  i0.ɵɵelementEnd()()()()()();
68472
- i0.ɵɵelementStart(26, "div", 1)(27, "div", 17)(28, "div", 3)(29, "div", 18)(30, "h1", 5);
68473
- i0.ɵɵtext(31);
68502
+ i0.ɵɵelementStart(19, "div", 1)(20, "div", 12)(21, "div", 3)(22, "div", 13)(23, "h1", 5);
68503
+ i0.ɵɵtext(24);
68474
68504
  i0.ɵɵelementEnd()();
68475
- i0.ɵɵelementStart(32, "div", 19);
68476
- i0.ɵɵconditionalCreate(33, DashboardHeaderComponent_Conditional_33_Template, 4, 3, "div", 20);
68477
- i0.ɵɵelementStart(34, "symphiq-search-button", 21);
68478
- i0.ɵɵlistener("searchClick", function DashboardHeaderComponent_Template_symphiq_search_button_searchClick_34_listener() { return ctx.onSearchClick(); });
68479
- i0.ɵɵelementEnd();
68480
- i0.ɵɵelementStart(35, "button", 22);
68481
- i0.ɵɵlistener("click", function DashboardHeaderComponent_Template_button_click_35_listener() { return ctx.onViewModeClick(); });
68482
- i0.ɵɵnamespaceSVG();
68483
- i0.ɵɵelementStart(36, "svg", 10);
68484
- i0.ɵɵelement(37, "path", 11)(38, "path", 12);
68485
- i0.ɵɵelementEnd()()()()()()();
68505
+ i0.ɵɵelementStart(25, "div", 14);
68506
+ i0.ɵɵconditionalCreate(26, DashboardHeaderComponent_Conditional_26_Template, 4, 3, "div", 15);
68507
+ i0.ɵɵconditionalCreate(27, DashboardHeaderComponent_Conditional_27_Template, 5, 3);
68508
+ i0.ɵɵelementEnd()()()()();
68486
68509
  } if (rf & 2) {
68487
- let tmp_18_0;
68510
+ let tmp_16_0;
68488
68511
  i0.ɵɵproperty("ngClass", ctx.getHeaderClasses());
68489
68512
  i0.ɵɵadvance();
68490
68513
  i0.ɵɵclassProp("max-h-0", ctx.headerScrollService.isScrolled())("opacity-0", ctx.headerScrollService.isScrolled())("max-h-96", !ctx.headerScrollService.isScrolled())("opacity-100", !ctx.headerScrollService.isScrolled());
@@ -68500,20 +68523,16 @@ class DashboardHeaderComponent {
68500
68523
  i0.ɵɵproperty("ngClass", ctx.getSubtitleClasses());
68501
68524
  i0.ɵɵadvance();
68502
68525
  i0.ɵɵtextInterpolate1(" ", ctx.subtitle(), " ");
68503
- i0.ɵɵadvance(2);
68504
- i0.ɵɵproperty("isLightMode", ctx.isLightMode());
68505
68526
  i0.ɵɵadvance();
68506
- i0.ɵɵproperty("ngClass", ctx.getViewModeButtonClasses());
68507
- i0.ɵɵadvance(5);
68508
- i0.ɵɵtextInterpolate(ctx.viewModeLabel());
68527
+ i0.ɵɵconditional(ctx.showControls() ? 11 : -1);
68509
68528
  i0.ɵɵadvance(2);
68510
- i0.ɵɵconditional(ctx.formattedGeneratedDate() ? 20 : -1);
68529
+ i0.ɵɵconditional(ctx.formattedGeneratedDate() ? 13 : -1);
68511
68530
  i0.ɵɵadvance(2);
68512
68531
  i0.ɵɵclassMap(ctx.metaLabelClass());
68513
68532
  i0.ɵɵadvance(2);
68514
68533
  i0.ɵɵclassMap(ctx.headerTitleClass());
68515
68534
  i0.ɵɵadvance();
68516
- i0.ɵɵtextInterpolate2("", (tmp_18_0 = ctx.requestedByUser()) == null ? null : tmp_18_0.firstName, " ", (tmp_18_0 = ctx.requestedByUser()) == null ? null : tmp_18_0.lastName);
68535
+ i0.ɵɵtextInterpolate2("", (tmp_16_0 = ctx.requestedByUser()) == null ? null : tmp_16_0.firstName, " ", (tmp_16_0 = ctx.requestedByUser()) == null ? null : tmp_16_0.lastName);
68517
68536
  i0.ɵɵadvance();
68518
68537
  i0.ɵɵclassProp("max-h-0", !ctx.headerScrollService.isScrolled())("opacity-0", !ctx.headerScrollService.isScrolled())("max-h-20", ctx.headerScrollService.isScrolled())("opacity-100", ctx.headerScrollService.isScrolled());
68519
68538
  i0.ɵɵadvance();
@@ -68523,11 +68542,9 @@ class DashboardHeaderComponent {
68523
68542
  i0.ɵɵadvance();
68524
68543
  i0.ɵɵtextInterpolate1(" ", ctx.title(), " ");
68525
68544
  i0.ɵɵadvance(2);
68526
- i0.ɵɵconditional(ctx.currentSection() ? 33 : -1);
68527
- i0.ɵɵadvance();
68528
- i0.ɵɵproperty("isLightMode", ctx.isLightMode())("minimized", true);
68545
+ i0.ɵɵconditional(ctx.currentSection() ? 26 : -1);
68529
68546
  i0.ɵɵadvance();
68530
- i0.ɵɵproperty("ngClass", ctx.getViewModeButtonClasses());
68547
+ i0.ɵɵconditional(ctx.showControls() ? 27 : -1);
68531
68548
  } }, dependencies: [CommonModule, i1$1.NgClass, SearchButtonComponent], encapsulation: 2, changeDetection: 0 }); }
68532
68549
  }
68533
68550
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DashboardHeaderComponent, [{
@@ -68564,23 +68581,25 @@ class DashboardHeaderComponent {
68564
68581
  {{ subtitle() }}
68565
68582
  </p>
68566
68583
  </div>
68567
- <div class="flex items-center gap-2">
68568
- <symphiq-search-button
68569
- [isLightMode]="isLightMode()"
68570
- (searchClick)="onSearchClick()"
68571
- />
68572
- <button
68573
- type="button"
68574
- (click)="onViewModeClick()"
68575
- [ngClass]="getViewModeButtonClasses()"
68576
- class="cursor-pointer flex items-center gap-2 px-3 py-1.5 rounded-lg text-xs font-medium transition-all duration-200 hover:scale-105">
68577
- <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
68578
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"></path>
68579
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"></path>
68580
- </svg>
68581
- <span>{{ viewModeLabel() }}</span>
68582
- </button>
68583
- </div>
68584
+ @if (showControls()) {
68585
+ <div class="flex items-center gap-2">
68586
+ <symphiq-search-button
68587
+ [isLightMode]="isLightMode()"
68588
+ (searchClick)="onSearchClick()"
68589
+ />
68590
+ <button
68591
+ type="button"
68592
+ (click)="onViewModeClick()"
68593
+ [ngClass]="getViewModeButtonClasses()"
68594
+ class="cursor-pointer flex items-center gap-2 px-3 py-1.5 rounded-lg text-xs font-medium transition-all duration-200 hover:scale-105">
68595
+ <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
68596
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"></path>
68597
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"></path>
68598
+ </svg>
68599
+ <span>{{ viewModeLabel() }}</span>
68600
+ </button>
68601
+ </div>
68602
+ }
68584
68603
  <div class="flex flex-col gap-4 min-w-[180px]">
68585
68604
  @if (formattedGeneratedDate()) {
68586
68605
  <div class="text-left sm:text-right">
@@ -68628,21 +68647,23 @@ class DashboardHeaderComponent {
68628
68647
  }
68629
68648
  </div>
68630
68649
  }
68631
- <symphiq-search-button
68632
- [isLightMode]="isLightMode()"
68633
- [minimized]="true"
68634
- (searchClick)="onSearchClick()"
68635
- />
68636
- <button
68637
- type="button"
68638
- (click)="onViewModeClick()"
68639
- [ngClass]="getViewModeButtonClasses()"
68640
- class="cursor-pointer flex items-center gap-2 px-2 py-1.5 rounded-lg text-xs font-medium transition-all duration-200 hover:scale-105">
68641
- <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
68642
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"></path>
68643
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"></path>
68644
- </svg>
68645
- </button>
68650
+ @if (showControls()) {
68651
+ <symphiq-search-button
68652
+ [isLightMode]="isLightMode()"
68653
+ [minimized]="true"
68654
+ (searchClick)="onSearchClick()"
68655
+ />
68656
+ <button
68657
+ type="button"
68658
+ (click)="onViewModeClick()"
68659
+ [ngClass]="getViewModeButtonClasses()"
68660
+ class="cursor-pointer flex items-center gap-2 px-2 py-1.5 rounded-lg text-xs font-medium transition-all duration-200 hover:scale-105">
68661
+ <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
68662
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"></path>
68663
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"></path>
68664
+ </svg>
68665
+ </button>
68666
+ }
68646
68667
  </div>
68647
68668
  </div>
68648
68669
  </div>
@@ -68650,8 +68671,8 @@ class DashboardHeaderComponent {
68650
68671
  </header>
68651
68672
  `
68652
68673
  }]
68653
- }], null, { requestedByUser: [{ type: i0.Input, args: [{ isSignal: true, alias: "requestedByUser", required: false }] }], createdDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "createdDate", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], subtitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "subtitle", required: false }] }], viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], viewModeLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewModeLabel", required: false }] }], currentSection: [{ type: i0.Input, args: [{ isSignal: true, alias: "currentSection", required: false }] }], currentSubsection: [{ type: i0.Input, args: [{ isSignal: true, alias: "currentSubsection", required: false }] }], isLoading: [{ type: i0.Input, args: [{ isSignal: true, alias: "isLoading", required: false }] }], searchClick: [{ type: i0.Output, args: ["searchClick"] }], viewModeClick: [{ type: i0.Output, args: ["viewModeClick"] }] }); })();
68654
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(DashboardHeaderComponent, { className: "DashboardHeaderComponent", filePath: "lib/components/shared/dashboard-header.component.ts", lineNumber: 126 }); })();
68674
+ }], null, { requestedByUser: [{ type: i0.Input, args: [{ isSignal: true, alias: "requestedByUser", required: false }] }], createdDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "createdDate", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], subtitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "subtitle", required: false }] }], viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], viewModeLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewModeLabel", required: false }] }], currentSection: [{ type: i0.Input, args: [{ isSignal: true, alias: "currentSection", required: false }] }], currentSubsection: [{ type: i0.Input, args: [{ isSignal: true, alias: "currentSubsection", required: false }] }], isLoading: [{ type: i0.Input, args: [{ isSignal: true, alias: "isLoading", required: false }] }], showControls: [{ type: i0.Input, args: [{ isSignal: true, alias: "showControls", required: false }] }], searchClick: [{ type: i0.Output, args: ["searchClick"] }], viewModeClick: [{ type: i0.Output, args: ["viewModeClick"] }] }); })();
68675
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(DashboardHeaderComponent, { className: "DashboardHeaderComponent", filePath: "lib/components/shared/dashboard-header.component.ts", lineNumber: 130 }); })();
68655
68676
 
68656
68677
  class GradeBadgeComponent {
68657
68678
  constructor() {
@@ -87912,6 +87933,7 @@ function ShopProfileCategoryListComponent_For_2_Template(rf, ctx) { if (rf & 1)
87912
87933
  i0.ɵɵadvance(4);
87913
87934
  i0.ɵɵproperty("ngClass", ctx_r2.getProgressBarContainerClasses());
87914
87935
  i0.ɵɵadvance();
87936
+ i0.ɵɵclassMap(ctx_r2.delayAnimation() ? "h-full rounded-full" : "h-full transition-all duration-500 ease-out rounded-full");
87915
87937
  i0.ɵɵstyleProp("width", item_r2.progress, "%");
87916
87938
  i0.ɵɵproperty("ngClass", ctx_r2.getProgressBarFillClasses());
87917
87939
  i0.ɵɵadvance(2);
@@ -87923,6 +87945,7 @@ class ShopProfileCategoryListComponent {
87923
87945
  constructor() {
87924
87946
  this.viewMode = input(ViewModeEnum.LIGHT, ...(ngDevMode ? [{ debugName: "viewMode" }] : []));
87925
87947
  this.items = input([], ...(ngDevMode ? [{ debugName: "items" }] : []));
87948
+ this.delayAnimation = input(false, ...(ngDevMode ? [{ debugName: "delayAnimation" }] : []));
87926
87949
  this.itemClick = output();
87927
87950
  }
87928
87951
  onItemClick(item) {
@@ -87977,9 +88000,9 @@ class ShopProfileCategoryListComponent {
87977
88000
  : 'text-emerald-600';
87978
88001
  }
87979
88002
  static { this.ɵfac = function ShopProfileCategoryListComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ShopProfileCategoryListComponent)(); }; }
87980
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ShopProfileCategoryListComponent, selectors: [["symphiq-shop-profile-category-list"]], inputs: { viewMode: [1, "viewMode"], items: [1, "items"] }, outputs: { itemClick: "itemClick" }, decls: 3, vars: 0, consts: [[1, "space-y-4"], [1, "rounded-xl", "p-6", "transition-all", "duration-300", "hover:scale-[1.01]", 3, "ngClass"], [1, "flex", "items-start", "justify-between", "gap-4"], [1, "flex-1", "min-w-0"], [1, "text-xs", "font-semibold", "uppercase", "tracking-wider", "mb-2", 3, "ngClass"], [1, "text-lg", "font-semibold", "leading-tight", 3, "ngClass"], ["type", "button", 1, "flex-shrink-0", "px-5", "py-2.5", "rounded-lg", "font-medium", "text-sm", "transition-all", "duration-300", "flex", "items-center", "gap-2", "hover:scale-105", "active:scale-95", 3, "click", "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-4", "h-4"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M9 5l7 7-7 7"], [1, "space-y-2"], [1, "h-2", "rounded-full", "overflow-hidden", 3, "ngClass"], [1, "h-full", "transition-all", "duration-500", "ease-out", "rounded-full", 3, "ngClass"], [1, "flex", "justify-between", "items-center"], [1, "text-sm", "font-medium", 3, "ngClass"]], template: function ShopProfileCategoryListComponent_Template(rf, ctx) { if (rf & 1) {
88003
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ShopProfileCategoryListComponent, selectors: [["symphiq-shop-profile-category-list"]], inputs: { viewMode: [1, "viewMode"], items: [1, "items"], delayAnimation: [1, "delayAnimation"] }, outputs: { itemClick: "itemClick" }, decls: 3, vars: 0, consts: [[1, "space-y-4"], [1, "rounded-xl", "p-6", "transition-all", "duration-300", "hover:scale-[1.01]", 3, "ngClass"], [1, "flex", "items-start", "justify-between", "gap-4"], [1, "flex-1", "min-w-0"], [1, "text-xs", "font-semibold", "uppercase", "tracking-wider", "mb-2", 3, "ngClass"], [1, "text-lg", "font-semibold", "leading-tight", 3, "ngClass"], ["type", "button", 1, "flex-shrink-0", "px-5", "py-2.5", "rounded-lg", "font-medium", "text-sm", "transition-all", "duration-300", "flex", "items-center", "gap-2", "hover:scale-105", "active:scale-95", 3, "click", "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-4", "h-4"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M9 5l7 7-7 7"], [1, "space-y-2"], [1, "h-2", "rounded-full", "overflow-hidden", 3, "ngClass"], [3, "ngClass"], [1, "flex", "justify-between", "items-center"], [1, "text-sm", "font-medium", 3, "ngClass"]], template: function ShopProfileCategoryListComponent_Template(rf, ctx) { if (rf & 1) {
87981
88004
  i0.ɵɵelementStart(0, "div", 0);
87982
- i0.ɵɵrepeaterCreate(1, ShopProfileCategoryListComponent_For_2_Template, 19, 14, "div", 1, _forTrack0$5);
88005
+ i0.ɵɵrepeaterCreate(1, ShopProfileCategoryListComponent_For_2_Template, 19, 16, "div", 1, _forTrack0$5);
87983
88006
  i0.ɵɵelementEnd();
87984
88007
  } if (rf & 2) {
87985
88008
  i0.ɵɵadvance();
@@ -87993,59 +88016,59 @@ class ShopProfileCategoryListComponent {
87993
88016
  standalone: true,
87994
88017
  imports: [CommonModule],
87995
88018
  changeDetection: ChangeDetectionStrategy.OnPush,
87996
- template: `
87997
- <div class="space-y-4">
87998
- @for (item of items(); track item.id) {
87999
- <div
88000
- [ngClass]="getCardClasses()"
88001
- class="rounded-xl p-6 transition-all duration-300 hover:scale-[1.01]"
88002
- >
88003
- <div class="space-y-4">
88004
- <div class="flex items-start justify-between gap-4">
88005
- <div class="flex-1 min-w-0">
88006
- <div [ngClass]="getLabelClasses()" class="text-xs font-semibold uppercase tracking-wider mb-2">
88007
- {{ item.label }}
88008
- </div>
88009
- <h3 [ngClass]="getNameClasses()" class="text-lg font-semibold leading-tight">
88010
- {{ item.name }}
88011
- </h3>
88012
- </div>
88013
-
88014
- <button
88015
- type="button"
88016
- (click)="onItemClick(item)"
88017
- [ngClass]="getButtonClasses(item)"
88018
- class="flex-shrink-0 px-5 py-2.5 rounded-lg font-medium text-sm transition-all duration-300 flex items-center gap-2 hover:scale-105 active:scale-95"
88019
- >
88020
- <span>{{ getButtonText(item) }}</span>
88021
- <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
88022
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"></path>
88023
- </svg>
88024
- </button>
88025
- </div>
88026
-
88027
- <div class="space-y-2">
88028
- <div [ngClass]="getProgressBarContainerClasses()" class="h-2 rounded-full overflow-hidden">
88029
- <div
88030
- [ngClass]="getProgressBarFillClasses()"
88031
- class="h-full transition-all duration-500 ease-out rounded-full"
88032
- [style.width.%]="item.progress"
88033
- ></div>
88034
- </div>
88035
-
88036
- <div class="flex justify-between items-center">
88037
- <span [ngClass]="getProgressTextClasses()" class="text-sm font-medium">
88038
- {{ item.answeredQuestions }} / {{ item.totalQuestions }} questions answered
88039
- </span>
88040
- </div>
88041
- </div>
88042
- </div>
88043
- </div>
88044
- }
88045
- </div>
88019
+ template: `
88020
+ <div class="space-y-4">
88021
+ @for (item of items(); track item.id) {
88022
+ <div
88023
+ [ngClass]="getCardClasses()"
88024
+ class="rounded-xl p-6 transition-all duration-300 hover:scale-[1.01]"
88025
+ >
88026
+ <div class="space-y-4">
88027
+ <div class="flex items-start justify-between gap-4">
88028
+ <div class="flex-1 min-w-0">
88029
+ <div [ngClass]="getLabelClasses()" class="text-xs font-semibold uppercase tracking-wider mb-2">
88030
+ {{ item.label }}
88031
+ </div>
88032
+ <h3 [ngClass]="getNameClasses()" class="text-lg font-semibold leading-tight">
88033
+ {{ item.name }}
88034
+ </h3>
88035
+ </div>
88036
+
88037
+ <button
88038
+ type="button"
88039
+ (click)="onItemClick(item)"
88040
+ [ngClass]="getButtonClasses(item)"
88041
+ class="flex-shrink-0 px-5 py-2.5 rounded-lg font-medium text-sm transition-all duration-300 flex items-center gap-2 hover:scale-105 active:scale-95"
88042
+ >
88043
+ <span>{{ getButtonText(item) }}</span>
88044
+ <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
88045
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"></path>
88046
+ </svg>
88047
+ </button>
88048
+ </div>
88049
+
88050
+ <div class="space-y-2">
88051
+ <div [ngClass]="getProgressBarContainerClasses()" class="h-2 rounded-full overflow-hidden">
88052
+ <div
88053
+ [ngClass]="getProgressBarFillClasses()"
88054
+ [class]="delayAnimation() ? 'h-full rounded-full' : 'h-full transition-all duration-500 ease-out rounded-full'"
88055
+ [style.width.%]="item.progress"
88056
+ ></div>
88057
+ </div>
88058
+
88059
+ <div class="flex justify-between items-center">
88060
+ <span [ngClass]="getProgressTextClasses()" class="text-sm font-medium">
88061
+ {{ item.answeredQuestions }} / {{ item.totalQuestions }} questions answered
88062
+ </span>
88063
+ </div>
88064
+ </div>
88065
+ </div>
88066
+ </div>
88067
+ }
88068
+ </div>
88046
88069
  `
88047
88070
  }]
88048
- }], null, { viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], itemClick: [{ type: i0.Output, args: ["itemClick"] }] }); })();
88071
+ }], null, { viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], delayAnimation: [{ type: i0.Input, args: [{ isSignal: true, alias: "delayAnimation", required: false }] }], itemClick: [{ type: i0.Output, args: ["itemClick"] }] }); })();
88049
88072
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ShopProfileCategoryListComponent, { className: "ShopProfileCategoryListComponent", filePath: "lib/components/profile-analysis-dashboard/cards/shop-profile-category-list.component.ts", lineNumber: 71 }); })();
88050
88073
 
88051
88074
  class ShopProfileViewToggleComponent {
@@ -90416,19 +90439,20 @@ class ShopProfileQuestionsModalComponent {
90416
90439
  }, ...(ngDevMode ? [{ debugName: "displayTitle" }] : []));
90417
90440
  this.filteredQuestions = computed(() => {
90418
90441
  const allQuestions = this.questions();
90442
+ const sortQuestions = (questions) => [...questions].sort((a, b) => (a.id ?? 0) - (b.id ?? 0));
90419
90443
  if (this.showAllQuestions()) {
90420
- return allQuestions;
90444
+ return sortQuestions(allQuestions);
90421
90445
  }
90422
90446
  const categoryId = this.selectedCategoryId();
90423
90447
  const focusAreaId = this.selectedFocusAreaId();
90424
90448
  if (categoryId) {
90425
- return allQuestions.filter(q => q.category === categoryId);
90449
+ return sortQuestions(allQuestions.filter(q => q.category === categoryId));
90426
90450
  }
90427
90451
  else if (focusAreaId) {
90428
- return allQuestions.filter(q => {
90452
+ return sortQuestions(allQuestions.filter(q => {
90429
90453
  const focusAreas = q.focusAreaDomains || [];
90430
90454
  return focusAreas.includes(focusAreaId);
90431
- });
90455
+ }));
90432
90456
  }
90433
90457
  return [];
90434
90458
  }, ...(ngDevMode ? [{ debugName: "filteredQuestions" }] : []));
@@ -90986,37 +91010,54 @@ function ShopProfileStatusCardComponent_Conditional_25_Template(rf, ctx) { if (r
90986
91010
  i0.ɵɵadvance();
90987
91011
  i0.ɵɵproperty("viewMode", ctx_r1.viewMode())("currentView", ctx_r1.currentView());
90988
91012
  i0.ɵɵadvance();
90989
- i0.ɵɵproperty("viewMode", ctx_r1.viewMode())("items", ctx_r1.currentGroupedQuestions());
91013
+ i0.ɵɵproperty("viewMode", ctx_r1.viewMode())("items", ctx_r1.currentGroupedQuestions())("delayAnimation", ctx_r1.questionsModalOpen());
90990
91014
  } }
90991
- function ShopProfileStatusCardComponent_Conditional_26_Template(rf, ctx) { if (rf & 1) {
91015
+ function ShopProfileStatusCardComponent_Conditional_26_Conditional_1_Template(rf, ctx) { if (rf & 1) {
90992
91016
  const _r4 = i0.ɵɵgetCurrentView();
90993
- i0.ɵɵelementStart(0, "div", 20)(1, "button", 26);
90994
- i0.ɵɵlistener("click", function ShopProfileStatusCardComponent_Conditional_26_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.adminAnswerAction.emit(false)); });
91017
+ i0.ɵɵelementStart(0, "button", 27);
91018
+ i0.ɵɵlistener("click", function ShopProfileStatusCardComponent_Conditional_26_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.adminAnswerAction.emit(false)); });
90995
91019
  i0.ɵɵnamespaceSVG();
90996
- i0.ɵɵelementStart(2, "svg", 27);
90997
- i0.ɵɵelement(3, "path", 28);
91020
+ i0.ɵɵelementStart(1, "svg", 28);
91021
+ i0.ɵɵelement(2, "path", 29);
90998
91022
  i0.ɵɵelementEnd();
90999
91023
  i0.ɵɵnamespaceHTML();
91000
- i0.ɵɵelementStart(4, "span");
91001
- i0.ɵɵtext(5);
91024
+ i0.ɵɵelementStart(3, "span");
91025
+ i0.ɵɵtext(4);
91002
91026
  i0.ɵɵelementEnd()();
91003
- i0.ɵɵelementStart(6, "button", 26);
91004
- i0.ɵɵlistener("click", function ShopProfileStatusCardComponent_Conditional_26_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.adminAnswerAction.emit(true)); });
91027
+ } if (rf & 2) {
91028
+ const ctx_r1 = i0.ɵɵnextContext(2);
91029
+ i0.ɵɵadvance(4);
91030
+ i0.ɵɵtextInterpolate1("Un-answer ", ctx_r1.computedAnsweredCount(), " ?s");
91031
+ } }
91032
+ function ShopProfileStatusCardComponent_Conditional_26_Conditional_2_Template(rf, ctx) { if (rf & 1) {
91033
+ const _r5 = i0.ɵɵgetCurrentView();
91034
+ i0.ɵɵelementStart(0, "button", 27);
91035
+ i0.ɵɵlistener("click", function ShopProfileStatusCardComponent_Conditional_26_Conditional_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.adminAnswerAction.emit(true)); });
91005
91036
  i0.ɵɵnamespaceSVG();
91006
- i0.ɵɵelementStart(7, "svg", 27);
91007
- i0.ɵɵelement(8, "path", 29);
91037
+ i0.ɵɵelementStart(1, "svg", 28);
91038
+ i0.ɵɵelement(2, "path", 30);
91008
91039
  i0.ɵɵelementEnd();
91009
91040
  i0.ɵɵnamespaceHTML();
91010
- i0.ɵɵelementStart(9, "span");
91011
- i0.ɵɵtext(10);
91012
- i0.ɵɵelementEnd()()();
91041
+ i0.ɵɵelementStart(3, "span");
91042
+ i0.ɵɵtext(4);
91043
+ i0.ɵɵelementEnd()();
91013
91044
  } if (rf & 2) {
91014
- const ctx_r1 = i0.ɵɵnextContext();
91015
- i0.ɵɵadvance(5);
91016
- i0.ɵɵtextInterpolate1("Un-answer ", ctx_r1.answeredQuestions(), " ?s");
91017
- i0.ɵɵadvance(5);
91045
+ const ctx_r1 = i0.ɵɵnextContext(2);
91046
+ i0.ɵɵadvance(4);
91018
91047
  i0.ɵɵtextInterpolate1("Answer ", ctx_r1.unansweredQuestions(), " ?s");
91019
91048
  } }
91049
+ function ShopProfileStatusCardComponent_Conditional_26_Template(rf, ctx) { if (rf & 1) {
91050
+ i0.ɵɵelementStart(0, "div", 20);
91051
+ i0.ɵɵconditionalCreate(1, ShopProfileStatusCardComponent_Conditional_26_Conditional_1_Template, 5, 1, "button", 26);
91052
+ i0.ɵɵconditionalCreate(2, ShopProfileStatusCardComponent_Conditional_26_Conditional_2_Template, 5, 1, "button", 26);
91053
+ i0.ɵɵelementEnd();
91054
+ } if (rf & 2) {
91055
+ const ctx_r1 = i0.ɵɵnextContext();
91056
+ i0.ɵɵadvance();
91057
+ i0.ɵɵconditional(ctx_r1.computedAnsweredCount() > 0 ? 1 : -1);
91058
+ i0.ɵɵadvance();
91059
+ i0.ɵɵconditional(ctx_r1.unansweredQuestions() > 0 ? 2 : -1);
91060
+ } }
91020
91061
  class ShopProfileStatusCardComponent {
91021
91062
  constructor() {
91022
91063
  this.viewMode = input(ViewModeEnum.LIGHT, ...(ngDevMode ? [{ debugName: "viewMode" }] : []));
@@ -91038,17 +91079,22 @@ class ShopProfileStatusCardComponent {
91038
91079
  this.selectedFocusAreaId = signal(null, ...(ngDevMode ? [{ debugName: "selectedFocusAreaId" }] : []));
91039
91080
  this.showAllQuestions = signal(false, ...(ngDevMode ? [{ debugName: "showAllQuestions" }] : []));
91040
91081
  this.startDirectAnswer = signal(false, ...(ngDevMode ? [{ debugName: "startDirectAnswer" }] : []));
91082
+ this.computedAnsweredCount = computed(() => {
91083
+ const questions = this.questions();
91084
+ const answers = this.profileAnswers();
91085
+ return questions.filter(q => answers.some(a => a.profileQuestionId === q.id)).length;
91086
+ }, ...(ngDevMode ? [{ debugName: "computedAnsweredCount" }] : []));
91041
91087
  this.completionPercentage = computed(() => {
91042
91088
  const total = this.totalQuestions();
91043
91089
  if (total === 0)
91044
91090
  return 0;
91045
- return (this.answeredQuestions() / total) * 100;
91091
+ return (this.computedAnsweredCount() / total) * 100;
91046
91092
  }, ...(ngDevMode ? [{ debugName: "completionPercentage" }] : []));
91047
91093
  this.notStartedPercentage = computed(() => {
91048
91094
  return 100 - this.completionPercentage();
91049
91095
  }, ...(ngDevMode ? [{ debugName: "notStartedPercentage" }] : []));
91050
91096
  this.shouldShowFullIntro = computed(() => {
91051
- return this.answeredQuestions() === 0;
91097
+ return this.computedAnsweredCount() === 0;
91052
91098
  }, ...(ngDevMode ? [{ debugName: "shouldShowFullIntro" }] : []));
91053
91099
  this.hasQuestions = computed(() => {
91054
91100
  return this.questions().length > 0;
@@ -91057,7 +91103,7 @@ class ShopProfileStatusCardComponent {
91057
91103
  return EMAIL_IS_EMG_APPS(this.currentUser()?.email);
91058
91104
  }, ...(ngDevMode ? [{ debugName: "showAdminButtons" }] : []));
91059
91105
  this.unansweredQuestions = computed(() => {
91060
- return this.totalQuestions() - this.answeredQuestions();
91106
+ return this.totalQuestions() - this.computedAnsweredCount();
91061
91107
  }, ...(ngDevMode ? [{ debugName: "unansweredQuestions" }] : []));
91062
91108
  this.questionsByCategory = computed(() => {
91063
91109
  const questions = this.questions();
@@ -91129,6 +91175,32 @@ class ShopProfileStatusCardComponent {
91129
91175
  ? this.questionsByCategory()
91130
91176
  : this.questionsByFocusArea();
91131
91177
  }, ...(ngDevMode ? [{ debugName: "currentGroupedQuestions" }] : []));
91178
+ effect(() => {
91179
+ const completionPct = this.completionPercentage();
91180
+ const notStartedPct = this.notStartedPercentage();
91181
+ this.updateChartData(completionPct, notStartedPct);
91182
+ });
91183
+ }
91184
+ updateChartData(completionPct, notStartedPct) {
91185
+ if (!this.chartSeries || !this.centerLabel)
91186
+ return;
91187
+ const pieData = [];
91188
+ if (completionPct > 0) {
91189
+ pieData.push({
91190
+ category: 'Complete',
91191
+ value: completionPct,
91192
+ sliceSettings: { fill: color(0x0BA5EC) }
91193
+ });
91194
+ }
91195
+ if (notStartedPct > 0) {
91196
+ pieData.push({
91197
+ category: 'Not started',
91198
+ value: notStartedPct,
91199
+ sliceSettings: { fill: color(0xF04438) }
91200
+ });
91201
+ }
91202
+ this.chartSeries.data.setAll(pieData);
91203
+ this.centerLabel.set('text', `${completionPct.toFixed(1)}%\nComplete`);
91132
91204
  }
91133
91205
  handleViewChange(view) {
91134
91206
  this.currentView.set(view);
@@ -91191,6 +91263,8 @@ class ShopProfileStatusCardComponent {
91191
91263
  this.root.dispose();
91192
91264
  }
91193
91265
  this.chartElement = undefined;
91266
+ this.chartSeries = undefined;
91267
+ this.centerLabel = undefined;
91194
91268
  this.root = undefined;
91195
91269
  }
91196
91270
  createChart() {
@@ -91204,33 +91278,33 @@ class ShopProfileStatusCardComponent {
91204
91278
  radius: percent(95),
91205
91279
  innerRadius: percent(60)
91206
91280
  }));
91207
- const series = this.chartElement.series.push(PieSeries.new(this.root, {
91281
+ this.chartSeries = this.chartElement.series.push(PieSeries.new(this.root, {
91208
91282
  valueField: 'value',
91209
91283
  categoryField: 'category',
91210
91284
  alignLabels: false
91211
91285
  }));
91212
- series.slices.template.setAll({
91286
+ this.chartSeries.slices.template.setAll({
91213
91287
  templateField: 'sliceSettings',
91214
91288
  strokeOpacity: 0
91215
91289
  });
91216
- series.labels.template.setAll({
91290
+ this.chartSeries.labels.template.setAll({
91217
91291
  textType: 'circular',
91218
91292
  fill: color(0xFFFFFF),
91219
91293
  text: '{category}',
91220
91294
  fontSize: 12
91221
91295
  });
91222
- series.ticks.template.set('forceHidden', true);
91223
- series.states.create('hidden', {
91296
+ this.chartSeries.ticks.template.set('forceHidden', true);
91297
+ this.chartSeries.states.create('hidden', {
91224
91298
  startAngle: 180,
91225
91299
  endAngle: 180
91226
91300
  });
91227
- series.slices.template.states.create('hover', {
91301
+ this.chartSeries.slices.template.states.create('hover', {
91228
91302
  scale: 1
91229
91303
  });
91230
- series.slices.template.states.create('active', {
91304
+ this.chartSeries.slices.template.states.create('active', {
91231
91305
  shiftRadius: 0
91232
91306
  });
91233
- series.labels.template.adapters.add('visible', function (visible, radialLabel) {
91307
+ this.chartSeries.labels.template.adapters.add('visible', function (visible, radialLabel) {
91234
91308
  if (radialLabel.dataItem && radialLabel.dataItem.dataContext) {
91235
91309
  const pieData = radialLabel.dataItem.dataContext;
91236
91310
  if (pieData.value < 8) {
@@ -91239,30 +91313,9 @@ class ShopProfileStatusCardComponent {
91239
91313
  }
91240
91314
  return visible;
91241
91315
  });
91242
- const pieData = [];
91243
91316
  const completionPct = this.completionPercentage();
91244
- const notStartedPct = this.notStartedPercentage();
91245
- if (completionPct > 0) {
91246
- pieData.push({
91247
- category: 'Complete',
91248
- value: completionPct,
91249
- sliceSettings: {
91250
- fill: color(0x0BA5EC)
91251
- }
91252
- });
91253
- }
91254
- if (notStartedPct > 0) {
91255
- pieData.push({
91256
- category: 'Not started',
91257
- value: notStartedPct,
91258
- sliceSettings: {
91259
- fill: color(0xF04438)
91260
- }
91261
- });
91262
- }
91263
- series.data.setAll(pieData);
91264
91317
  const percentageText = `${completionPct.toFixed(1)}%\nComplete`;
91265
- this.chartElement.children.unshift(Label.new(this.root, {
91318
+ this.centerLabel = Label.new(this.root, {
91266
91319
  text: percentageText,
91267
91320
  fontSize: 16,
91268
91321
  fill: color(0xFFFFFF),
@@ -91274,9 +91327,11 @@ class ShopProfileStatusCardComponent {
91274
91327
  centerY: percent(50),
91275
91328
  paddingTop: 0,
91276
91329
  paddingBottom: 0
91277
- }));
91330
+ });
91331
+ this.chartElement.children.unshift(this.centerLabel);
91332
+ this.updateChartData(completionPct, this.notStartedPercentage());
91278
91333
  this.chartElement.appear(1000, 100);
91279
- series.appear();
91334
+ this.chartSeries.appear();
91280
91335
  }
91281
91336
  containerClasses() {
91282
91337
  return this.viewMode() === ViewModeEnum.DARK
@@ -91334,7 +91389,7 @@ class ShopProfileStatusCardComponent {
91334
91389
  } if (rf & 2) {
91335
91390
  let _t;
91336
91391
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.chartDiv = _t.first);
91337
- } }, inputs: { viewMode: [1, "viewMode"], totalQuestions: [1, "totalQuestions"], answeredQuestions: [1, "answeredQuestions"], questions: [1, "questions"], profileAnswers: [1, "profileAnswers"], profileAnswerHistories: [1, "profileAnswerHistories"], users: [1, "users"], startAnsweringAll: [1, "startAnsweringAll"], currentUser: [1, "currentUser"] }, outputs: { startCategoryQuestions: "startCategoryQuestions", questionAnswerRequested: "questionAnswerRequested", answerSave: "answerSave", adminAnswerAction: "adminAnswerAction" }, decls: 28, vars: 23, consts: [["chartdiv", ""], [1, "rounded-2xl", "border", "shadow-lg", "overflow-hidden", 3, "ngClass"], [1, "px-6", "py-5", "border-b", 3, "ngClass"], [1, "flex", "items-center", "justify-between"], [1, "flex", "items-center", "gap-3"], [1, "p-2.5", "rounded-lg", 3, "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-5", "h-5"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-3 7h3m-3 4h3m-6-4h.01M9 16h.01"], [1, "text-xl", "font-bold", 3, "ngClass"], [1, "text-sm", "mt-0.5", 3, "ngClass"], [1, "p-6", 3, "ngClass"], [1, "flex", "flex-wrap", "items-center", "gap-6", "mb-8"], [1, "rounded-xl", "p-6", "flex-1", "min-w-[300px]", 3, "ngClass"], [1, "flex", "items-start", "gap-4"], [1, "flex-shrink-0", "p-2", "rounded-lg", 3, "ngClass"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"], [1, "flex-1"], [1, "leading-relaxed", 3, "ngClass"], [1, "flex-shrink-0"], [1, "w-[250px]", "h-[250px]"], [1, "flex", "items-center", "justify-center", "gap-4", "mt-6", "pt-6", "border-t", "border-slate-700/50"], [3, "close", "questionAnswerClick", "answerSave", "isOpen", "questions", "profileAnswers", "profileAnswerHistories", "users", "selectedCategoryId", "selectedFocusAreaId", "showAllQuestions", "startDirectAnswer", "viewMode"], [1, "font-semibold", "text-lg", "mb-3", 3, "ngClass"], [1, "flex", "justify-center", "mb-6"], [3, "viewChanged", "viewMode", "currentView"], [3, "itemClick", "viewMode", "items"], ["type", "button", 1, "flex", "items-center", "gap-2", "px-4", "py-2", "rounded-lg", "border-2", "border-violet-500/70", "bg-transparent", "text-violet-400", "hover:bg-violet-500/10", "transition-colors", 3, "click"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-4", "h-4"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M6 18L18 6M6 6l12 12"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M5 13l4 4L19 7"]], template: function ShopProfileStatusCardComponent_Template(rf, ctx) { if (rf & 1) {
91392
+ } }, inputs: { viewMode: [1, "viewMode"], totalQuestions: [1, "totalQuestions"], answeredQuestions: [1, "answeredQuestions"], questions: [1, "questions"], profileAnswers: [1, "profileAnswers"], profileAnswerHistories: [1, "profileAnswerHistories"], users: [1, "users"], startAnsweringAll: [1, "startAnsweringAll"], currentUser: [1, "currentUser"] }, outputs: { startCategoryQuestions: "startCategoryQuestions", questionAnswerRequested: "questionAnswerRequested", answerSave: "answerSave", adminAnswerAction: "adminAnswerAction" }, decls: 28, vars: 23, consts: [["chartdiv", ""], [1, "rounded-2xl", "border", "shadow-lg", "overflow-hidden", 3, "ngClass"], [1, "px-6", "py-5", "border-b", 3, "ngClass"], [1, "flex", "items-center", "justify-between"], [1, "flex", "items-center", "gap-3"], [1, "p-2.5", "rounded-lg", 3, "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-5", "h-5"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-3 7h3m-3 4h3m-6-4h.01M9 16h.01"], [1, "text-xl", "font-bold", 3, "ngClass"], [1, "text-sm", "mt-0.5", 3, "ngClass"], [1, "p-6", 3, "ngClass"], [1, "flex", "flex-wrap", "items-center", "gap-6", "mb-8"], [1, "rounded-xl", "p-6", "flex-1", "min-w-[300px]", 3, "ngClass"], [1, "flex", "items-start", "gap-4"], [1, "flex-shrink-0", "p-2", "rounded-lg", 3, "ngClass"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"], [1, "flex-1"], [1, "leading-relaxed", 3, "ngClass"], [1, "flex-shrink-0"], [1, "w-[250px]", "h-[250px]"], [1, "flex", "items-center", "justify-center", "gap-4", "mt-6", "pt-6", "border-t", "border-slate-700/50"], [3, "close", "questionAnswerClick", "answerSave", "isOpen", "questions", "profileAnswers", "profileAnswerHistories", "users", "selectedCategoryId", "selectedFocusAreaId", "showAllQuestions", "startDirectAnswer", "viewMode"], [1, "font-semibold", "text-lg", "mb-3", 3, "ngClass"], [1, "flex", "justify-center", "mb-6"], [3, "viewChanged", "viewMode", "currentView"], [3, "itemClick", "viewMode", "items", "delayAnimation"], ["type", "button", 1, "flex", "items-center", "gap-2", "px-4", "py-2", "rounded-lg", "border-2", "border-violet-500/70", "bg-transparent", "text-violet-400", "hover:bg-violet-500/10", "transition-colors"], ["type", "button", 1, "flex", "items-center", "gap-2", "px-4", "py-2", "rounded-lg", "border-2", "border-violet-500/70", "bg-transparent", "text-violet-400", "hover:bg-violet-500/10", "transition-colors", 3, "click"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-4", "h-4"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M6 18L18 6M6 6l12 12"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M5 13l4 4L19 7"]], template: function ShopProfileStatusCardComponent_Template(rf, ctx) { if (rf & 1) {
91338
91393
  const _r1 = i0.ɵɵgetCurrentView();
91339
91394
  i0.ɵɵelementStart(0, "div", 1)(1, "div", 2)(2, "div", 3)(3, "div", 4)(4, "div", 5);
91340
91395
  i0.ɵɵnamespaceSVG();
@@ -91360,8 +91415,8 @@ class ShopProfileStatusCardComponent {
91360
91415
  i0.ɵɵelementStart(22, "div", 18);
91361
91416
  i0.ɵɵelement(23, "div", 19, 0);
91362
91417
  i0.ɵɵelementEnd()();
91363
- i0.ɵɵconditionalCreate(25, ShopProfileStatusCardComponent_Conditional_25_Template, 3, 4);
91364
- i0.ɵɵconditionalCreate(26, ShopProfileStatusCardComponent_Conditional_26_Template, 11, 2, "div", 20);
91418
+ i0.ɵɵconditionalCreate(25, ShopProfileStatusCardComponent_Conditional_25_Template, 3, 5);
91419
+ i0.ɵɵconditionalCreate(26, ShopProfileStatusCardComponent_Conditional_26_Template, 3, 2, "div", 20);
91365
91420
  i0.ɵɵelementEnd()();
91366
91421
  i0.ɵɵelementStart(27, "symphiq-shop-profile-questions-modal", 21);
91367
91422
  i0.ɵɵlistener("close", function ShopProfileStatusCardComponent_Template_symphiq_shop_profile_questions_modal_close_27_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onQuestionsModalClose()); })("questionAnswerClick", function ShopProfileStatusCardComponent_Template_symphiq_shop_profile_questions_modal_questionAnswerClick_27_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onQuestionAnswerClick($event)); })("answerSave", function ShopProfileStatusCardComponent_Template_symphiq_shop_profile_questions_modal_answerSave_27_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onAnswerSave($event)); });
@@ -91401,129 +91456,134 @@ class ShopProfileStatusCardComponent {
91401
91456
  standalone: true,
91402
91457
  imports: [CommonModule, ShopProfileCategoryListComponent, ShopProfileViewToggleComponent, ShopProfileQuestionsModalComponent],
91403
91458
  changeDetection: ChangeDetectionStrategy.OnPush,
91404
- template: `
91405
- <div [ngClass]="containerClasses()" class="rounded-2xl border shadow-lg overflow-hidden">
91406
- <div [ngClass]="headerClasses()" class="px-6 py-5 border-b">
91407
- <div class="flex items-center justify-between">
91408
- <div class="flex items-center gap-3">
91409
- <div [ngClass]="iconContainerClasses()" class="p-2.5 rounded-lg">
91410
- <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
91411
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-3 7h3m-3 4h3m-6-4h.01M9 16h.01"></path>
91412
- </svg>
91413
- </div>
91414
- <div>
91415
- <h2 [ngClass]="titleClasses()" class="text-xl font-bold">
91416
- Shop Profile
91417
- </h2>
91418
- <p [ngClass]="subtitleClasses()" class="text-sm mt-0.5">
91419
- {{ answeredQuestions() }} of {{ totalQuestions() }} questions answered
91420
- </p>
91421
- </div>
91422
- </div>
91423
- </div>
91424
- </div>
91425
-
91426
- <div [ngClass]="contentClasses()" class="p-6">
91427
- <!-- Chart and Explanatory Text Side by Side -->
91428
- <div class="flex flex-wrap items-center gap-6 mb-8">
91429
- <!-- Explanatory Text -->
91430
- <div [ngClass]="getIntroductionContainerClasses()" class="rounded-xl p-6 flex-1 min-w-[300px]">
91431
- <div class="flex items-start gap-4">
91432
- <div [ngClass]="getIntroIconClasses()" class="flex-shrink-0 p-2 rounded-lg">
91433
- <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
91434
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path>
91435
- </svg>
91436
- </div>
91437
- <div class="flex-1">
91438
- @if (shouldShowFullIntro()) {
91439
- <h3 [ngClass]="getIntroTitleClasses()" class="font-semibold text-lg mb-3">
91440
- Why Shop Profile Questions Matter
91441
- </h3>
91442
- <p [ngClass]="getIntroTextClasses()" class="leading-relaxed">
91443
- Shop Profile questions are a <strong>critical part of your onboarding journey</strong>. These questions provide crucial qualitative data to the Symphiq engine, enabling personalized analysis and strategic recommendations tailored to your business. Your insights help us understand your unique operations, challenges, and goals.
91444
- </p>
91445
- } @else {
91446
- <p [ngClass]="getIntroTextClasses()" class="leading-relaxed">
91447
- <strong>Great progress!</strong> Continue answering questions to unlock deeper insights and more accurate recommendations. Each answer helps Symphiq better understand your business context.
91448
- </p>
91449
- }
91450
- </div>
91451
- </div>
91452
- </div>
91453
-
91454
- <!-- Donut Chart -->
91455
- <div class="flex-shrink-0">
91456
- <div #chartdiv class="w-[250px] h-[250px]"></div>
91457
- </div>
91458
- </div>
91459
-
91460
- <!-- View Toggle -->
91461
- @if (hasQuestions()) {
91462
- <div class="flex justify-center mb-6">
91463
- <symphiq-shop-profile-view-toggle
91464
- [viewMode]="viewMode()"
91465
- [currentView]="currentView()"
91466
- (viewChanged)="handleViewChange($event)"
91467
- />
91468
- </div>
91469
-
91470
- <!-- Category/Focus Area List -->
91471
- <symphiq-shop-profile-category-list
91472
- [viewMode]="viewMode()"
91473
- [items]="currentGroupedQuestions()"
91474
- (itemClick)="handleItemClick($event)"
91475
- />
91476
- }
91477
-
91478
- @if (showAdminButtons()) {
91479
- <div class="flex items-center justify-center gap-4 mt-6 pt-6 border-t border-slate-700/50">
91480
- <button
91481
- type="button"
91482
- (click)="adminAnswerAction.emit(false)"
91483
- class="flex items-center gap-2 px-4 py-2 rounded-lg border-2 border-violet-500/70 bg-transparent text-violet-400 hover:bg-violet-500/10 transition-colors"
91484
- >
91485
- <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
91486
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"></path>
91487
- </svg>
91488
- <span>Un-answer {{ answeredQuestions() }} ?s</span>
91489
- </button>
91490
- <button
91491
- type="button"
91492
- (click)="adminAnswerAction.emit(true)"
91493
- class="flex items-center gap-2 px-4 py-2 rounded-lg border-2 border-violet-500/70 bg-transparent text-violet-400 hover:bg-violet-500/10 transition-colors"
91494
- >
91495
- <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
91496
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path>
91497
- </svg>
91498
- <span>Answer {{ unansweredQuestions() }} ?s</span>
91499
- </button>
91500
- </div>
91501
- }
91502
- </div>
91503
- </div>
91504
-
91505
- <!-- Questions Modal -->
91506
- <symphiq-shop-profile-questions-modal
91507
- [isOpen]="questionsModalOpen()"
91508
- [questions]="questions()"
91509
- [profileAnswers]="profileAnswers()"
91510
- [profileAnswerHistories]="profileAnswerHistories()"
91511
- [users]="users()"
91512
- [selectedCategoryId]="selectedCategoryId()"
91513
- [selectedFocusAreaId]="selectedFocusAreaId()"
91514
- [showAllQuestions]="showAllQuestions()"
91515
- [startDirectAnswer]="startDirectAnswer()"
91516
- [viewMode]="viewMode()"
91517
- (close)="onQuestionsModalClose()"
91518
- (questionAnswerClick)="onQuestionAnswerClick($event)"
91519
- (answerSave)="onAnswerSave($event)" />
91459
+ template: `
91460
+ <div [ngClass]="containerClasses()" class="rounded-2xl border shadow-lg overflow-hidden">
91461
+ <div [ngClass]="headerClasses()" class="px-6 py-5 border-b">
91462
+ <div class="flex items-center justify-between">
91463
+ <div class="flex items-center gap-3">
91464
+ <div [ngClass]="iconContainerClasses()" class="p-2.5 rounded-lg">
91465
+ <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
91466
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-3 7h3m-3 4h3m-6-4h.01M9 16h.01"></path>
91467
+ </svg>
91468
+ </div>
91469
+ <div>
91470
+ <h2 [ngClass]="titleClasses()" class="text-xl font-bold">
91471
+ Shop Profile
91472
+ </h2>
91473
+ <p [ngClass]="subtitleClasses()" class="text-sm mt-0.5">
91474
+ {{ answeredQuestions() }} of {{ totalQuestions() }} questions answered
91475
+ </p>
91476
+ </div>
91477
+ </div>
91478
+ </div>
91479
+ </div>
91480
+
91481
+ <div [ngClass]="contentClasses()" class="p-6">
91482
+ <!-- Chart and Explanatory Text Side by Side -->
91483
+ <div class="flex flex-wrap items-center gap-6 mb-8">
91484
+ <!-- Explanatory Text -->
91485
+ <div [ngClass]="getIntroductionContainerClasses()" class="rounded-xl p-6 flex-1 min-w-[300px]">
91486
+ <div class="flex items-start gap-4">
91487
+ <div [ngClass]="getIntroIconClasses()" class="flex-shrink-0 p-2 rounded-lg">
91488
+ <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
91489
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path>
91490
+ </svg>
91491
+ </div>
91492
+ <div class="flex-1">
91493
+ @if (shouldShowFullIntro()) {
91494
+ <h3 [ngClass]="getIntroTitleClasses()" class="font-semibold text-lg mb-3">
91495
+ Why Shop Profile Questions Matter
91496
+ </h3>
91497
+ <p [ngClass]="getIntroTextClasses()" class="leading-relaxed">
91498
+ Shop Profile questions are a <strong>critical part of your onboarding journey</strong>. These questions provide crucial qualitative data to the Symphiq engine, enabling personalized analysis and strategic recommendations tailored to your business. Your insights help us understand your unique operations, challenges, and goals.
91499
+ </p>
91500
+ } @else {
91501
+ <p [ngClass]="getIntroTextClasses()" class="leading-relaxed">
91502
+ <strong>Great progress!</strong> Continue answering questions to unlock deeper insights and more accurate recommendations. Each answer helps Symphiq better understand your business context.
91503
+ </p>
91504
+ }
91505
+ </div>
91506
+ </div>
91507
+ </div>
91508
+
91509
+ <!-- Donut Chart -->
91510
+ <div class="flex-shrink-0">
91511
+ <div #chartdiv class="w-[250px] h-[250px]"></div>
91512
+ </div>
91513
+ </div>
91514
+
91515
+ <!-- View Toggle -->
91516
+ @if (hasQuestions()) {
91517
+ <div class="flex justify-center mb-6">
91518
+ <symphiq-shop-profile-view-toggle
91519
+ [viewMode]="viewMode()"
91520
+ [currentView]="currentView()"
91521
+ (viewChanged)="handleViewChange($event)"
91522
+ />
91523
+ </div>
91524
+
91525
+ <!-- Category/Focus Area List -->
91526
+ <symphiq-shop-profile-category-list
91527
+ [viewMode]="viewMode()"
91528
+ [items]="currentGroupedQuestions()"
91529
+ [delayAnimation]="questionsModalOpen()"
91530
+ (itemClick)="handleItemClick($event)"
91531
+ />
91532
+ }
91533
+
91534
+ @if (showAdminButtons()) {
91535
+ <div class="flex items-center justify-center gap-4 mt-6 pt-6 border-t border-slate-700/50">
91536
+ @if (computedAnsweredCount() > 0) {
91537
+ <button
91538
+ type="button"
91539
+ (click)="adminAnswerAction.emit(false)"
91540
+ class="flex items-center gap-2 px-4 py-2 rounded-lg border-2 border-violet-500/70 bg-transparent text-violet-400 hover:bg-violet-500/10 transition-colors"
91541
+ >
91542
+ <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
91543
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"></path>
91544
+ </svg>
91545
+ <span>Un-answer {{ computedAnsweredCount() }} ?s</span>
91546
+ </button>
91547
+ }
91548
+ @if (unansweredQuestions() > 0) {
91549
+ <button
91550
+ type="button"
91551
+ (click)="adminAnswerAction.emit(true)"
91552
+ class="flex items-center gap-2 px-4 py-2 rounded-lg border-2 border-violet-500/70 bg-transparent text-violet-400 hover:bg-violet-500/10 transition-colors"
91553
+ >
91554
+ <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
91555
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path>
91556
+ </svg>
91557
+ <span>Answer {{ unansweredQuestions() }} ?s</span>
91558
+ </button>
91559
+ }
91560
+ </div>
91561
+ }
91562
+ </div>
91563
+ </div>
91564
+
91565
+ <!-- Questions Modal -->
91566
+ <symphiq-shop-profile-questions-modal
91567
+ [isOpen]="questionsModalOpen()"
91568
+ [questions]="questions()"
91569
+ [profileAnswers]="profileAnswers()"
91570
+ [profileAnswerHistories]="profileAnswerHistories()"
91571
+ [users]="users()"
91572
+ [selectedCategoryId]="selectedCategoryId()"
91573
+ [selectedFocusAreaId]="selectedFocusAreaId()"
91574
+ [showAllQuestions]="showAllQuestions()"
91575
+ [startDirectAnswer]="startDirectAnswer()"
91576
+ [viewMode]="viewMode()"
91577
+ (close)="onQuestionsModalClose()"
91578
+ (questionAnswerClick)="onQuestionAnswerClick($event)"
91579
+ (answerSave)="onAnswerSave($event)" />
91520
91580
  `
91521
91581
  }]
91522
- }], null, { viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], totalQuestions: [{ type: i0.Input, args: [{ isSignal: true, alias: "totalQuestions", required: false }] }], answeredQuestions: [{ type: i0.Input, args: [{ isSignal: true, alias: "answeredQuestions", required: false }] }], questions: [{ type: i0.Input, args: [{ isSignal: true, alias: "questions", required: false }] }], profileAnswers: [{ type: i0.Input, args: [{ isSignal: true, alias: "profileAnswers", required: false }] }], profileAnswerHistories: [{ type: i0.Input, args: [{ isSignal: true, alias: "profileAnswerHistories", required: false }] }], users: [{ type: i0.Input, args: [{ isSignal: true, alias: "users", required: false }] }], startAnsweringAll: [{ type: i0.Input, args: [{ isSignal: true, alias: "startAnsweringAll", required: false }] }], currentUser: [{ type: i0.Input, args: [{ isSignal: true, alias: "currentUser", required: false }] }], startCategoryQuestions: [{ type: i0.Output, args: ["startCategoryQuestions"] }], questionAnswerRequested: [{ type: i0.Output, args: ["questionAnswerRequested"] }], answerSave: [{ type: i0.Output, args: ["answerSave"] }], adminAnswerAction: [{ type: i0.Output, args: ["adminAnswerAction"] }], chartDiv: [{
91582
+ }], () => [], { viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], totalQuestions: [{ type: i0.Input, args: [{ isSignal: true, alias: "totalQuestions", required: false }] }], answeredQuestions: [{ type: i0.Input, args: [{ isSignal: true, alias: "answeredQuestions", required: false }] }], questions: [{ type: i0.Input, args: [{ isSignal: true, alias: "questions", required: false }] }], profileAnswers: [{ type: i0.Input, args: [{ isSignal: true, alias: "profileAnswers", required: false }] }], profileAnswerHistories: [{ type: i0.Input, args: [{ isSignal: true, alias: "profileAnswerHistories", required: false }] }], users: [{ type: i0.Input, args: [{ isSignal: true, alias: "users", required: false }] }], startAnsweringAll: [{ type: i0.Input, args: [{ isSignal: true, alias: "startAnsweringAll", required: false }] }], currentUser: [{ type: i0.Input, args: [{ isSignal: true, alias: "currentUser", required: false }] }], startCategoryQuestions: [{ type: i0.Output, args: ["startCategoryQuestions"] }], questionAnswerRequested: [{ type: i0.Output, args: ["questionAnswerRequested"] }], answerSave: [{ type: i0.Output, args: ["answerSave"] }], adminAnswerAction: [{ type: i0.Output, args: ["adminAnswerAction"] }], chartDiv: [{
91523
91583
  type: ViewChild,
91524
91584
  args: ['chartdiv', { static: false }]
91525
91585
  }] }); })();
91526
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ShopProfileStatusCardComponent, { className: "ShopProfileStatusCardComponent", filePath: "lib/components/profile-analysis-dashboard/cards/shop-profile-status-card.component.ts", lineNumber: 153 }); })();
91586
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ShopProfileStatusCardComponent, { className: "ShopProfileStatusCardComponent", filePath: "lib/components/profile-analysis-dashboard/cards/shop-profile-status-card.component.ts", lineNumber: 159 }); })();
91527
91587
 
91528
91588
  function ShopProfileStickyFooterComponent_Conditional_7_Template(rf, ctx) { if (rf & 1) {
91529
91589
  i0.ɵɵelementStart(0, "div", 5);
@@ -93069,11 +93129,16 @@ class SymphiqProfileAnalysisDashboardComponent {
93069
93129
  const profileShop = this.profileShop();
93070
93130
  return profileShop && profileShop.selfContentStatus === AiDynamicContentStatusEnum.GENERATED;
93071
93131
  }, ...(ngDevMode ? [{ debugName: "shouldShowShopProfileStatus" }] : []));
93132
+ this.shouldShowHeaderControls = computed(() => {
93133
+ return !!this.profileAnalysis() && this.profileShop()?.selfContentStatus === AiDynamicContentStatusEnum.GENERATED;
93134
+ }, ...(ngDevMode ? [{ debugName: "shouldShowHeaderControls" }] : []));
93072
93135
  this.totalShopQuestions = computed(() => {
93073
93136
  return this.profileShopQuestions()?.length || 0;
93074
93137
  }, ...(ngDevMode ? [{ debugName: "totalShopQuestions" }] : []));
93075
93138
  this.answeredShopQuestions = computed(() => {
93076
- return this.profileShopQuestions()?.filter(q => q.answered === true).length || 0;
93139
+ const questions = this.profileShopQuestions() || [];
93140
+ const answers = this.profileAnswers() || [];
93141
+ return questions.filter(q => answers.some(a => a.profileQuestionId === q.id)).length;
93077
93142
  }, ...(ngDevMode ? [{ debugName: "answeredShopQuestions" }] : []));
93078
93143
  this.shopQuestionsCompletionPercentage = computed(() => {
93079
93144
  const total = this.totalShopQuestions();
@@ -93900,7 +93965,7 @@ class SymphiqProfileAnalysisDashboardComponent {
93900
93965
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.shopProfileStatusCard = _t.first);
93901
93966
  } }, hostBindings: function SymphiqProfileAnalysisDashboardComponent_HostBindings(rf, ctx) { if (rf & 1) {
93902
93967
  i0.ɵɵlistener("scroll", function SymphiqProfileAnalysisDashboardComponent_scroll_HostBindingHandler($event) { return ctx.onWindowScroll($event); }, i0.ɵɵresolveWindow);
93903
- } }, inputs: { viewMode: [1, "viewMode"], requestedByUser: [1, "requestedByUser"], createdDate: [1, "createdDate"], embedded: [1, "embedded"], profileAnalysis: [1, "profileAnalysis"], profile: [1, "profile"], funnelAnalysis: [1, "funnelAnalysis"], analysisType: [1, "analysisType"], focusAreaDetails: [1, "focusAreaDetails"], account: [1, "account"], profileShop: [1, "profileShop"], profileShopQuestions: [1, "profileShopQuestions"], profileAnswers: [1, "profileAnswers"], profileAnswerHistories: [1, "profileAnswerHistories"], itemStatusProfileShop: [1, "itemStatusProfileShop"], itemStatusProfileAnalysis: [1, "itemStatusProfileAnalysis"], planCardInfos: [1, "planCardInfos"], isOnboarded: [1, "isOnboarded"], scrollEvent: [1, "scrollEvent"], scrollElement: [1, "scrollElement"], users: [1, "users"], isLoading: [1, "isLoading"], forDemo: [1, "forDemo"], currentUser: [1, "currentUser"], maxAccessibleStepId: [1, "maxAccessibleStepId"] }, outputs: { stepClick: "stepClick", nextStepClick: "nextStepClick", currencySelectionClick: "currencySelectionClick", editCurrencyClick: "editCurrencyClick", periodUnitChanged: "periodUnitChanged", planSelected: "planSelected", checkoutPlanClick: "checkoutPlanClick", answerShopProfileQuestions: "answerShopProfileQuestions", continueShopProfileQuestions: "continueShopProfileQuestions", profileQuestionAnswerSave: "profileQuestionAnswerSave", shopProfileAdminAnswerAction: "shopProfileAdminAnswerAction" }, features: [i0.ɵɵNgOnChangesFeature], decls: 30, vars: 51, consts: [["shopProfileStatusCard", ""], [1, "min-h-screen", "relative", 3, "ngClass"], [1, "animated-bubbles", 2, "position", "fixed", "top", "0", "left", "0", "right", "0", "bottom", "0", "width", "100vw", "height", "100vh", "z-index", "1", "pointer-events", "none"], [1, "h-full", "transition-all", "duration-200", "ease-out", 3, "ngClass"], [1, "relative", "z-[51]"], [3, "searchClick", "viewModeClick", "title", "subtitle", "currentSection", "viewMode", "viewModeLabel", "isLoading", "requestedByUser", "createdDate"], [3, "viewMode", "currentStepId", "showNextStepAction", "forDemo", "maxAccessibleStepId"], [1, "relative", "z-10", "max-w-7xl", "mx-auto", "px-4", "sm:px-6", "lg:px-8", "py-12", "space-y-12"], [1, "mb-12"], [3, "sections", "viewMode", "embedded", "scrollElement"], [3, "close", "isOpen", "isLightMode"], [3, "close", "modeSelected", "isOpen", "currentMode", "viewMode"], [3, "isLightMode", "allMetrics", "allInsights", "allBusinessInsights", "allCharts"], [3, "goal", "viewMode", "isInModal", "allMetrics", "allCharts", "allInsights", "currentModalState", "businessProfile"], [3, "goal", "viewMode"], [3, "objective", "goalTitle", "viewMode"], [3, "strategy", "objectiveTitle", "goalTitle", "viewMode", "allMetrics", "allCharts", "allInsights", "allBusinessInsights", "currentModalState"], [3, "category", "viewMode", "scrollToSection"], [3, "strength", "viewMode", "allFunnelStrengths", "currentModalState"], [3, "gap", "viewMode", "allGoals", "allWeaknesses", "currentModalState"], [3, "opportunity", "viewMode", "allStrengths", "currentModalState"], [3, "isLightMode", "viewMode", "allMetrics", "allInsights", "allCharts"], [3, "isLightMode"], [3, "viewMode", "isEnabled", "isLoading"], [3, "viewMode", "totalQuestions", "answeredQuestions"], [1, "fixed", "bottom-0", "left-0", "right-0", "z-50", "border-t", "backdrop-blur-lg", 3, "ngClass"], [3, "nextStepClick", "stepClick", "viewMode", "currentStepId", "showNextStepAction", "forDemo", "maxAccessibleStepId"], [3, "viewMode", "businessName", "isOnboarded"], [3, "viewMode", "focusAreaDomain", "focusAreaName", "focusAreaDetails"], [3, "viewMode", "metricName", "isOnboarded"], [1, "mb-8"], [3, "startCategoryQuestions", "answerSave", "adminAnswerAction", "viewMode", "totalQuestions", "answeredQuestions", "questions", "profileAnswers", "profileAnswerHistories", "users", "currentUser"], [1, "rounded-2xl", "border", "shadow-lg", "overflow-hidden", 3, "ngClass"], [3, "goals", "viewMode"], ["title", "Generating Your Shop Profile", "subtitle", "We're analyzing your data to create shop specific questions and answers. They will appear when ready.", 3, "itemStatus", "viewMode"], [3, "viewMoreClick", "goals", "viewMode"], [1, "mb-32"], [3, "viewMode", "selectedCurrency"], [3, "currencySelected", "viewMode", "isLoading", "initialCurrency"], [3, "viewMode"], [3, "periodUnitChanged", "planSelected", "editCurrency", "checkout", "viewMode", "selectedCurrency", "planCardInfos", "isLoading", "selectedPeriodUnit"], [3, "editCurrency", "viewMode", "selectedCurrency"], [3, "sections", "viewMode", "executiveSummary", "focusAreaExecutiveSummary", "metricExecutiveSummary", "metricName", "allGoals", "allMetrics", "allCharts", "allInsights", "businessProfile"], ["id", "section-executive-summary", 1, "space-y-6", "scroll-mt-24"], [3, "viewMode", "summary", "allGoals"], [3, "viewMode", "summary", "metricName", "allGoals"], [1, "space-y-8"], [1, "rounded-2xl", "p-8", "shadow-xl", 3, "ngClass"], [1, "space-y-6"], [1, "flex", "items-start", "justify-between", "gap-4"], [1, "flex-1"], [1, "text-2xl", "font-bold", "mb-3", 3, "ngClass"], [1, "text-lg", "leading-relaxed", 3, "ngClass"], [3, "grade", "gradeRationale", "viewMode"], [1, "rounded-xl", "p-6", 3, "ngClass"], [1, "grid", "grid-cols-1", "md:grid-cols-3", "gap-4"], ["type", "button", 1, "p-4", "rounded-xl", "text-left", "transition-all", "duration-200", "hover:scale-[1.02]", "active:scale-[0.98]", "group", "cursor-pointer", 3, "click", "ngClass"], [1, "text-xs", "font-semibold", "uppercase", "mb-1", 3, "ngClass"], [1, "text-3xl", "font-bold", "mb-2", 3, "ngClass"], [1, "flex", "items-center", "gap-1.5", "text-xs", "font-medium"], [3, "ngClass"], ["size", "w-4 h-4", 1, "transition-transform", "group-hover:translate-x-1", 3, "icon", "ngClass"], ["size", "w-4 h-4", 1, "transition-transform", "group-hover:translate-y-1", "animate-bounce", 3, "icon", "ngClass"], ["id", "quick-wins-section", 1, "space-y-4", "scroll-mt-24"], [1, "text-lg", "font-semibold", "mb-3", 3, "ngClass"], [1, "relative"], [1, "mb-6", "lg:float-left", "lg:mr-6", "lg:mb-4", "lg:max-w-[66%]"], [1, "text-sm", "leading-relaxed", "whitespace-pre-line", 3, "ngClass"], [1, "clear-both"], [3, "visual", "viewMode"], [1, "text-xl", "font-bold", 3, "ngClass"], [1, "grid", "grid-cols-1", "lg:grid-cols-2", "gap-6"], [1, "rounded-xl", "p-6", "transition-all", "duration-300", 3, "ngClass"], [1, "space-y-4"], [1, "flex", "items-start", "gap-3"], [1, "flex-shrink-0", "w-8", "h-8", "rounded-full", "flex", "items-center", "justify-center", "text-sm", "font-bold", 3, "ngClass"], [1, "font-semibold", "leading-tight", "flex-1", 3, "ngClass"], [1, "flex", "flex-wrap", "gap-2"], [1, "px-3", "py-1", "rounded-full", "text-xs", "font-semibold", 3, "ngClass"], [1, "flex", "items-center", "gap-2", "text-sm", 3, "ngClass"], [1, "space-y-2"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-4", "h-4"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"], [1, "text-xs", "font-semibold", "uppercase", "tracking-wider", 3, "ngClass"], [3, "relatedGoalIds", "allGoals", "viewMode"], [3, "topPrioritiesClick", "priorityDetailClick", "viewMode", "summary", "allGoals"], [3, "topPrioritiesClick", "priorityDetailClick", "viewMode", "summary", "metricName", "allGoals"], [3, "viewMode", "sectionIcon"], [1, "rounded-xl", "p-8", "scroll-mt-24", 3, "id", "ngClass"], [1, "flex", "items-start", "gap-3", "mb-6"], [1, "flex-shrink-0", "w-12", "h-12", "rounded-xl", "flex", "items-center", "justify-center", 3, "ngClass"], [1, "text-2xl", "font-bold", 3, "ngClass"], [1, "mb-6", "flex", "flex-col", "lg:flex-row", "gap-6", "items-start", 3, "lg:flex-row-reverse"], [3, "section", "executiveSummary", "viewMode", "sectionIndex", "allGoals", "allMetrics", "allCharts", "allInsights", "businessProfile"], ["size", "w-6 h-6", 3, "icon"], [1, "mb-6", "flex", "flex-col", "lg:flex-row", "gap-6", "items-start"], [1, "w-full", "lg:w-2/3"], [1, "w-full", 3, "lg:w-1/3", "lg:w-full"], [1, "w-full"], [3, "continueClick", "viewMode", "isEnabled", "isLoading"], [3, "continueClick", "viewMode", "totalQuestions", "answeredQuestions"], [1, "max-w-7xl", "mx-auto", "px-4", "sm:px-6", "lg:px-8", "py-4"], [1, "flex", "items-center", "gap-4"], [1, "px-6", "py-4", "rounded-xl", "font-semibold", "text-lg", "transition-all", "duration-300", "cursor-pointer", 3, "click", "ngClass"], [1, "flex-1", "px-6", "py-4", "rounded-xl", "font-semibold", "text-lg", "transition-all", "duration-300", "flex", "items-center", "justify-center", "gap-3", "shadow-2xl", 3, "click", "disabled", "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-6", "h-6", "transition-transform", "duration-200"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M13 7l5 5m0 0l-5 5m5-5H6"]], template: function SymphiqProfileAnalysisDashboardComponent_Template(rf, ctx) { if (rf & 1) {
93968
+ } }, inputs: { viewMode: [1, "viewMode"], requestedByUser: [1, "requestedByUser"], createdDate: [1, "createdDate"], embedded: [1, "embedded"], profileAnalysis: [1, "profileAnalysis"], profile: [1, "profile"], funnelAnalysis: [1, "funnelAnalysis"], analysisType: [1, "analysisType"], focusAreaDetails: [1, "focusAreaDetails"], account: [1, "account"], profileShop: [1, "profileShop"], profileShopQuestions: [1, "profileShopQuestions"], profileAnswers: [1, "profileAnswers"], profileAnswerHistories: [1, "profileAnswerHistories"], itemStatusProfileShop: [1, "itemStatusProfileShop"], itemStatusProfileAnalysis: [1, "itemStatusProfileAnalysis"], planCardInfos: [1, "planCardInfos"], isOnboarded: [1, "isOnboarded"], scrollEvent: [1, "scrollEvent"], scrollElement: [1, "scrollElement"], users: [1, "users"], isLoading: [1, "isLoading"], forDemo: [1, "forDemo"], currentUser: [1, "currentUser"], maxAccessibleStepId: [1, "maxAccessibleStepId"] }, outputs: { stepClick: "stepClick", nextStepClick: "nextStepClick", currencySelectionClick: "currencySelectionClick", editCurrencyClick: "editCurrencyClick", periodUnitChanged: "periodUnitChanged", planSelected: "planSelected", checkoutPlanClick: "checkoutPlanClick", answerShopProfileQuestions: "answerShopProfileQuestions", continueShopProfileQuestions: "continueShopProfileQuestions", profileQuestionAnswerSave: "profileQuestionAnswerSave", shopProfileAdminAnswerAction: "shopProfileAdminAnswerAction" }, features: [i0.ɵɵNgOnChangesFeature], decls: 30, vars: 52, consts: [["shopProfileStatusCard", ""], [1, "min-h-screen", "relative", 3, "ngClass"], [1, "animated-bubbles", 2, "position", "fixed", "top", "0", "left", "0", "right", "0", "bottom", "0", "width", "100vw", "height", "100vh", "z-index", "1", "pointer-events", "none"], [1, "h-full", "transition-all", "duration-200", "ease-out", 3, "ngClass"], [1, "relative", "z-[51]"], [3, "searchClick", "viewModeClick", "title", "subtitle", "currentSection", "viewMode", "viewModeLabel", "isLoading", "requestedByUser", "createdDate", "showControls"], [3, "viewMode", "currentStepId", "showNextStepAction", "forDemo", "maxAccessibleStepId"], [1, "relative", "z-10", "max-w-7xl", "mx-auto", "px-4", "sm:px-6", "lg:px-8", "py-12", "space-y-12"], [1, "mb-12"], [3, "sections", "viewMode", "embedded", "scrollElement"], [3, "close", "isOpen", "isLightMode"], [3, "close", "modeSelected", "isOpen", "currentMode", "viewMode"], [3, "isLightMode", "allMetrics", "allInsights", "allBusinessInsights", "allCharts"], [3, "goal", "viewMode", "isInModal", "allMetrics", "allCharts", "allInsights", "currentModalState", "businessProfile"], [3, "goal", "viewMode"], [3, "objective", "goalTitle", "viewMode"], [3, "strategy", "objectiveTitle", "goalTitle", "viewMode", "allMetrics", "allCharts", "allInsights", "allBusinessInsights", "currentModalState"], [3, "category", "viewMode", "scrollToSection"], [3, "strength", "viewMode", "allFunnelStrengths", "currentModalState"], [3, "gap", "viewMode", "allGoals", "allWeaknesses", "currentModalState"], [3, "opportunity", "viewMode", "allStrengths", "currentModalState"], [3, "isLightMode", "viewMode", "allMetrics", "allInsights", "allCharts"], [3, "isLightMode"], [3, "viewMode", "isEnabled", "isLoading"], [3, "viewMode", "totalQuestions", "answeredQuestions"], [1, "fixed", "bottom-0", "left-0", "right-0", "z-50", "border-t", "backdrop-blur-lg", 3, "ngClass"], [3, "nextStepClick", "stepClick", "viewMode", "currentStepId", "showNextStepAction", "forDemo", "maxAccessibleStepId"], [3, "viewMode", "businessName", "isOnboarded"], [3, "viewMode", "focusAreaDomain", "focusAreaName", "focusAreaDetails"], [3, "viewMode", "metricName", "isOnboarded"], [1, "mb-8"], [3, "startCategoryQuestions", "answerSave", "adminAnswerAction", "viewMode", "totalQuestions", "answeredQuestions", "questions", "profileAnswers", "profileAnswerHistories", "users", "currentUser"], [1, "rounded-2xl", "border", "shadow-lg", "overflow-hidden", 3, "ngClass"], [3, "goals", "viewMode"], ["title", "Generating Your Shop Profile", "subtitle", "We're analyzing your data to create shop specific questions and answers. They will appear when ready.", 3, "itemStatus", "viewMode"], [3, "viewMoreClick", "goals", "viewMode"], [1, "mb-32"], [3, "viewMode", "selectedCurrency"], [3, "currencySelected", "viewMode", "isLoading", "initialCurrency"], [3, "viewMode"], [3, "periodUnitChanged", "planSelected", "editCurrency", "checkout", "viewMode", "selectedCurrency", "planCardInfos", "isLoading", "selectedPeriodUnit"], [3, "editCurrency", "viewMode", "selectedCurrency"], [3, "sections", "viewMode", "executiveSummary", "focusAreaExecutiveSummary", "metricExecutiveSummary", "metricName", "allGoals", "allMetrics", "allCharts", "allInsights", "businessProfile"], ["id", "section-executive-summary", 1, "space-y-6", "scroll-mt-24"], [3, "viewMode", "summary", "allGoals"], [3, "viewMode", "summary", "metricName", "allGoals"], [1, "space-y-8"], [1, "rounded-2xl", "p-8", "shadow-xl", 3, "ngClass"], [1, "space-y-6"], [1, "flex", "items-start", "justify-between", "gap-4"], [1, "flex-1"], [1, "text-2xl", "font-bold", "mb-3", 3, "ngClass"], [1, "text-lg", "leading-relaxed", 3, "ngClass"], [3, "grade", "gradeRationale", "viewMode"], [1, "rounded-xl", "p-6", 3, "ngClass"], [1, "grid", "grid-cols-1", "md:grid-cols-3", "gap-4"], ["type", "button", 1, "p-4", "rounded-xl", "text-left", "transition-all", "duration-200", "hover:scale-[1.02]", "active:scale-[0.98]", "group", "cursor-pointer", 3, "click", "ngClass"], [1, "text-xs", "font-semibold", "uppercase", "mb-1", 3, "ngClass"], [1, "text-3xl", "font-bold", "mb-2", 3, "ngClass"], [1, "flex", "items-center", "gap-1.5", "text-xs", "font-medium"], [3, "ngClass"], ["size", "w-4 h-4", 1, "transition-transform", "group-hover:translate-x-1", 3, "icon", "ngClass"], ["size", "w-4 h-4", 1, "transition-transform", "group-hover:translate-y-1", "animate-bounce", 3, "icon", "ngClass"], ["id", "quick-wins-section", 1, "space-y-4", "scroll-mt-24"], [1, "text-lg", "font-semibold", "mb-3", 3, "ngClass"], [1, "relative"], [1, "mb-6", "lg:float-left", "lg:mr-6", "lg:mb-4", "lg:max-w-[66%]"], [1, "text-sm", "leading-relaxed", "whitespace-pre-line", 3, "ngClass"], [1, "clear-both"], [3, "visual", "viewMode"], [1, "text-xl", "font-bold", 3, "ngClass"], [1, "grid", "grid-cols-1", "lg:grid-cols-2", "gap-6"], [1, "rounded-xl", "p-6", "transition-all", "duration-300", 3, "ngClass"], [1, "space-y-4"], [1, "flex", "items-start", "gap-3"], [1, "flex-shrink-0", "w-8", "h-8", "rounded-full", "flex", "items-center", "justify-center", "text-sm", "font-bold", 3, "ngClass"], [1, "font-semibold", "leading-tight", "flex-1", 3, "ngClass"], [1, "flex", "flex-wrap", "gap-2"], [1, "px-3", "py-1", "rounded-full", "text-xs", "font-semibold", 3, "ngClass"], [1, "flex", "items-center", "gap-2", "text-sm", 3, "ngClass"], [1, "space-y-2"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-4", "h-4"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"], [1, "text-xs", "font-semibold", "uppercase", "tracking-wider", 3, "ngClass"], [3, "relatedGoalIds", "allGoals", "viewMode"], [3, "topPrioritiesClick", "priorityDetailClick", "viewMode", "summary", "allGoals"], [3, "topPrioritiesClick", "priorityDetailClick", "viewMode", "summary", "metricName", "allGoals"], [3, "viewMode", "sectionIcon"], [1, "rounded-xl", "p-8", "scroll-mt-24", 3, "id", "ngClass"], [1, "flex", "items-start", "gap-3", "mb-6"], [1, "flex-shrink-0", "w-12", "h-12", "rounded-xl", "flex", "items-center", "justify-center", 3, "ngClass"], [1, "text-2xl", "font-bold", 3, "ngClass"], [1, "mb-6", "flex", "flex-col", "lg:flex-row", "gap-6", "items-start", 3, "lg:flex-row-reverse"], [3, "section", "executiveSummary", "viewMode", "sectionIndex", "allGoals", "allMetrics", "allCharts", "allInsights", "businessProfile"], ["size", "w-6 h-6", 3, "icon"], [1, "mb-6", "flex", "flex-col", "lg:flex-row", "gap-6", "items-start"], [1, "w-full", "lg:w-2/3"], [1, "w-full", 3, "lg:w-1/3", "lg:w-full"], [1, "w-full"], [3, "continueClick", "viewMode", "isEnabled", "isLoading"], [3, "continueClick", "viewMode", "totalQuestions", "answeredQuestions"], [1, "max-w-7xl", "mx-auto", "px-4", "sm:px-6", "lg:px-8", "py-4"], [1, "flex", "items-center", "gap-4"], [1, "px-6", "py-4", "rounded-xl", "font-semibold", "text-lg", "transition-all", "duration-300", "cursor-pointer", 3, "click", "ngClass"], [1, "flex-1", "px-6", "py-4", "rounded-xl", "font-semibold", "text-lg", "transition-all", "duration-300", "flex", "items-center", "justify-center", "gap-3", "shadow-2xl", 3, "click", "disabled", "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-6", "h-6", "transition-transform", "duration-200"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M13 7l5 5m0 0l-5 5m5-5H6"]], template: function SymphiqProfileAnalysisDashboardComponent_Template(rf, ctx) { if (rf & 1) {
93904
93969
  i0.ɵɵelementStart(0, "div", 1);
93905
93970
  i0.ɵɵelement(1, "div", 2);
93906
93971
  i0.ɵɵelementStart(2, "div");
@@ -93941,7 +94006,6 @@ class SymphiqProfileAnalysisDashboardComponent {
93941
94006
  } if (rf & 2) {
93942
94007
  let tmp_5_0;
93943
94008
  let tmp_12_0;
93944
- let tmp_30_0;
93945
94009
  let tmp_31_0;
93946
94010
  let tmp_32_0;
93947
94011
  let tmp_33_0;
@@ -93949,6 +94013,7 @@ class SymphiqProfileAnalysisDashboardComponent {
93949
94013
  let tmp_35_0;
93950
94014
  let tmp_36_0;
93951
94015
  let tmp_37_0;
94016
+ let tmp_38_0;
93952
94017
  i0.ɵɵproperty("ngClass", ctx.getContainerClasses());
93953
94018
  i0.ɵɵadvance();
93954
94019
  i0.ɵɵclassProp("light-mode", ctx.isLightMode());
@@ -93958,7 +94023,7 @@ class SymphiqProfileAnalysisDashboardComponent {
93958
94023
  i0.ɵɵstyleProp("width", ctx.scrollProgress(), "%");
93959
94024
  i0.ɵɵproperty("ngClass", ctx.isLightMode() ? "bg-gradient-to-r from-blue-500 to-purple-500" : "bg-gradient-to-r from-blue-400 to-purple-400");
93960
94025
  i0.ɵɵadvance(2);
93961
- i0.ɵɵproperty("title", ((tmp_5_0 = ctx.profileAnalysis()) == null ? null : tmp_5_0.profileAnalysisStructured == null ? null : tmp_5_0.profileAnalysisStructured.businessName) || "Profile Analysis")("subtitle", ctx.getAnalysisSubtitle())("currentSection", ctx.getAnalysisSubtitle())("viewMode", ctx.viewMode())("viewModeLabel", ctx.displayModeLabel())("isLoading", ctx.isLoading())("requestedByUser", ctx.requestedByUser())("createdDate", (tmp_12_0 = ctx.profileAnalysis()) == null ? null : tmp_12_0.selfContentCompletedDate);
94026
+ i0.ɵɵproperty("title", ((tmp_5_0 = ctx.profileAnalysis()) == null ? null : tmp_5_0.profileAnalysisStructured == null ? null : tmp_5_0.profileAnalysisStructured.businessName) || "Profile Analysis")("subtitle", ctx.getAnalysisSubtitle())("currentSection", ctx.getAnalysisSubtitle())("viewMode", ctx.viewMode())("viewModeLabel", ctx.displayModeLabel())("isLoading", ctx.isLoading())("requestedByUser", ctx.requestedByUser())("createdDate", (tmp_12_0 = ctx.profileAnalysis()) == null ? null : tmp_12_0.selfContentCompletedDate)("showControls", ctx.shouldShowHeaderControls());
93962
94027
  i0.ɵɵadvance();
93963
94028
  i0.ɵɵconditional(ctx.isSimplifiedView() && !ctx.isOnboarded() ? 6 : -1);
93964
94029
  i0.ɵɵadvance();
@@ -93980,21 +94045,21 @@ class SymphiqProfileAnalysisDashboardComponent {
93980
94045
  i0.ɵɵadvance();
93981
94046
  i0.ɵɵproperty("isLightMode", ctx.isLightMode())("allMetrics", ctx.allMetrics())("allInsights", ctx.allInsights())("allBusinessInsights", ctx.allBusinessInsights())("allCharts", ctx.allCharts());
93982
94047
  i0.ɵɵadvance();
93983
- i0.ɵɵconditional((tmp_30_0 = ctx.modalType() === "goal-detail" && ctx.getGoalDetailData()) ? 16 : -1, tmp_30_0);
94048
+ i0.ɵɵconditional((tmp_31_0 = ctx.modalType() === "goal-detail" && ctx.getGoalDetailData()) ? 16 : -1, tmp_31_0);
93984
94049
  i0.ɵɵadvance();
93985
- i0.ɵɵconditional((tmp_31_0 = ctx.modalType() === "goal-objectives" && ctx.getGoalDetailData()) ? 17 : -1, tmp_31_0);
94050
+ i0.ɵɵconditional((tmp_32_0 = ctx.modalType() === "goal-objectives" && ctx.getGoalDetailData()) ? 17 : -1, tmp_32_0);
93986
94051
  i0.ɵɵadvance();
93987
- i0.ɵɵconditional((tmp_32_0 = ctx.modalType() === "objective-strategies" && ctx.getObjectiveStrategiesData()) ? 18 : -1, tmp_32_0);
94052
+ i0.ɵɵconditional((tmp_33_0 = ctx.modalType() === "objective-strategies" && ctx.getObjectiveStrategiesData()) ? 18 : -1, tmp_33_0);
93988
94053
  i0.ɵɵadvance();
93989
- i0.ɵɵconditional((tmp_33_0 = ctx.modalType() === "strategy-recommendations" && ctx.getStrategyRecommendationsData()) ? 19 : -1, tmp_33_0);
94054
+ i0.ɵɵconditional((tmp_34_0 = ctx.modalType() === "strategy-recommendations" && ctx.getStrategyRecommendationsData()) ? 19 : -1, tmp_34_0);
93990
94055
  i0.ɵɵadvance();
93991
- i0.ɵɵconditional((tmp_34_0 = ctx.modalType() === "category-detail" && ctx.getCategoryDetailData()) ? 20 : -1, tmp_34_0);
94056
+ i0.ɵɵconditional((tmp_35_0 = ctx.modalType() === "category-detail" && ctx.getCategoryDetailData()) ? 20 : -1, tmp_35_0);
93992
94057
  i0.ɵɵadvance();
93993
- i0.ɵɵconditional((tmp_35_0 = ctx.modalType() === "strength-detail" && ctx.getStrengthDetailData()) ? 21 : -1, tmp_35_0);
94058
+ i0.ɵɵconditional((tmp_36_0 = ctx.modalType() === "strength-detail" && ctx.getStrengthDetailData()) ? 21 : -1, tmp_36_0);
93994
94059
  i0.ɵɵadvance();
93995
- i0.ɵɵconditional((tmp_36_0 = ctx.modalType() === "gap-detail" && ctx.getGapDetailData()) ? 22 : -1, tmp_36_0);
94060
+ i0.ɵɵconditional((tmp_37_0 = ctx.modalType() === "gap-detail" && ctx.getGapDetailData()) ? 22 : -1, tmp_37_0);
93996
94061
  i0.ɵɵadvance();
93997
- i0.ɵɵconditional((tmp_37_0 = ctx.modalType() === "opportunity-detail" && ctx.getOpportunityDetailData()) ? 23 : -1, tmp_37_0);
94062
+ i0.ɵɵconditional((tmp_38_0 = ctx.modalType() === "opportunity-detail" && ctx.getOpportunityDetailData()) ? 23 : -1, tmp_38_0);
93998
94063
  i0.ɵɵadvance();
93999
94064
  i0.ɵɵproperty("isLightMode", ctx.isLightMode())("viewMode", ctx.viewMode())("allMetrics", ctx.allMetrics())("allInsights", ctx.allInsights())("allCharts", ctx.allCharts());
94000
94065
  i0.ɵɵadvance();
@@ -94014,660 +94079,661 @@ class SymphiqProfileAnalysisDashboardComponent {
94014
94079
  standalone: true,
94015
94080
  imports: [CommonModule, DashboardHeaderComponent, SearchModalComponent, ViewModeSwitcherModalComponent, JourneyProgressIndicatorComponent, FloatingTocComponent, SectionNavigationComponent, GradeBadgeComponent, ShopWelcomeBannerComponent, FocusAreaWelcomeBannerComponent, MetricWelcomeBannerComponent, FocusAreaExecutiveSummaryComponent, MetricExecutiveSummaryComponent, NapkinVisualPlaceholderComponent, TooltipContainerComponent, ProfileSectionContentComponent, ProfileAnalysisModalComponent, ModalComponent, GoalCardComponent, GoalObjectivesModalContentComponent, ObjectiveStrategiesModalContentComponent, StrategyRecommendationsModalContentComponent, CategoryDetailModalContentComponent, StrengthDetailModalContentComponent, GapDetailModalContentComponent, OpportunityDetailModalContentComponent, BusinessAnalysisModalComponent, SectionDividerComponent, SymphiqIconComponent, RelatedGoalChipsComponent, StrategicGoalsTiledGridComponent, CollapsibleAnalysisSectionGroupComponent, BillingCurrencySelectorCardComponent, PlanSelectionPlaceholderCardComponent, PlanSelectionContainerComponent, SubscriptionValuePropositionCardComponent, StickySubscriptionContinueButtonComponent, ContentGenerationProgressComponent, ShopProfileStatusCardComponent, ShopProfileStickyFooterComponent],
94016
94081
  changeDetection: ChangeDetectionStrategy.OnPush,
94017
- template: `
94018
- <div [ngClass]="getContainerClasses()" class="min-h-screen relative">
94019
- <div class="animated-bubbles" [class.light-mode]="isLightMode()"
94020
- style="position: fixed; top: 0; left: 0; right: 0; bottom: 0; width: 100vw; height: 100vh; z-index: 1; pointer-events: none;"></div>
94021
-
94022
- <!-- Scroll Progress Bar -->
94023
- <div
94024
- [class]="embedded() ? 'sticky top-0 left-0 right-0 h-1 z-[60] bg-slate-200/30' : 'fixed top-0 left-0 right-0 h-1 z-[60] bg-slate-200/30'">
94025
- <div
94026
- [style.width.%]="scrollProgress()"
94027
- [ngClass]="isLightMode() ? 'bg-gradient-to-r from-blue-500 to-purple-500' : 'bg-gradient-to-r from-blue-400 to-purple-400'"
94028
- class="h-full transition-all duration-200 ease-out">
94029
- </div>
94030
- </div>
94031
-
94032
- <div class="relative z-[51]">
94033
- <!-- Dashboard Header -->
94034
- <symphiq-dashboard-header
94035
- [title]="profileAnalysis()?.profileAnalysisStructured?.businessName || 'Profile Analysis'"
94036
- [subtitle]="getAnalysisSubtitle()"
94037
- [currentSection]="getAnalysisSubtitle()"
94038
- [viewMode]="viewMode()"
94039
- [viewModeLabel]="displayModeLabel()"
94040
- [isLoading]="isLoading()"
94041
- [requestedByUser]="requestedByUser()"
94042
- [createdDate]="profileAnalysis()?.selfContentCompletedDate"
94043
- (searchClick)="openSearch()"
94044
- (viewModeClick)="openViewModeSwitcher()"
94045
- />
94046
-
94047
- <!-- Journey Progress Banner -->
94048
- @if (isSimplifiedView() && !isOnboarded()) {
94049
- <symphiq-journey-progress-indicator
94050
- [viewMode]="viewMode()"
94051
- [currentStepId]="currentStepId()"
94052
- [showNextStepAction]="shouldShowContinueButton()"
94053
- [forDemo]="forDemo()"
94054
- [maxAccessibleStepId]="maxAccessibleStepId()"
94055
- (nextStepClick)="nextStepClick.emit()"
94056
- (stepClick)="stepClick.emit($event)"
94057
- />
94058
- }
94059
-
94060
- <!-- Main Content -->
94061
- <main class="relative z-10 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12 space-y-12"
94062
- [class.pb-32]="shouldShowStickyButton() || shouldShowShopProfileStickyFooter()">
94063
-
94064
- <!-- Welcome Banner (Simplified View Only) -->
94065
- @if (isSimplifiedView()) {
94066
- <div class="mb-12">
94067
- @if (!isFocusAreaAnalysis() && !isMetricAnalysis()) {
94068
- <symphiq-shop-welcome-banner
94069
- [viewMode]="viewMode()"
94070
- [businessName]="profileAnalysis()?.profileAnalysisStructured?.businessName || 'your shop'"
94071
- [isOnboarded]="isOnboarded()"
94072
- />
94073
- }
94074
- @if (isFocusAreaAnalysis()) {
94075
- <symphiq-focus-area-welcome-banner
94076
- [viewMode]="viewMode()"
94077
- [focusAreaDomain]="focusAreaDomain()"
94078
- [focusAreaName]="focusAreaName()"
94079
- [focusAreaDetails]="focusAreaDetails()"
94080
- />
94081
- }
94082
- @if (isMetricAnalysis()) {
94083
- <symphiq-metric-welcome-banner
94084
- [viewMode]="viewMode()"
94085
- [metricName]="profileAnalysis()?.profileAnalysisStructured?.metricExecutiveSummary?.metric"
94086
- [isOnboarded]="isOnboarded()"
94087
- />
94088
- }
94089
- </div>
94090
- }
94091
-
94092
- <!-- Simplified View Content -->
94093
- @if (isSimplifiedView()) {
94094
- <!-- Shop Profile Status Card -->
94095
- @if (shouldShowShopProfileStatus() && !isFocusAreaAnalysis() && !isMetricAnalysis()) {
94096
- <div class="mb-8">
94097
- <symphiq-shop-profile-status-card
94098
- #shopProfileStatusCard
94099
- [viewMode]="viewMode()"
94100
- [totalQuestions]="totalShopQuestions()"
94101
- [answeredQuestions]="answeredShopQuestions()"
94102
- [questions]="profileShopQuestions() || []"
94103
- [profileAnswers]="profileAnswers() || []"
94104
- [profileAnswerHistories]="profileAnswerHistories() || []"
94105
- [users]="users() || []"
94106
- [currentUser]="currentUser()"
94107
- (startCategoryQuestions)="handleStartCategoryQuestions($event)"
94108
- (answerSave)="handleProfileQuestionAnswerSave($event)"
94109
- (adminAnswerAction)="shopProfileAdminAnswerAction.emit($event)"
94110
- />
94111
- </div>
94112
- }
94113
-
94114
- <!-- Strategic Insights & Goals (or Subscription Flow) -->
94115
- @if (profileAnalysis()) {
94116
- <div class="mb-8">
94117
- @if (isSubscriptionActive() || isFocusAreaAnalysis() || isMetricAnalysis()) {
94118
- @if (isProfileShopGenerating() && !isFocusAreaAnalysis() && !isMetricAnalysis()) {
94119
- <div [ngClass]="getProgressCardClasses()" class="rounded-2xl border shadow-lg overflow-hidden">
94120
- <symphiq-content-generation-progress
94121
- [itemStatus]="itemStatusProfileShop()"
94122
- [viewMode]="viewMode()"
94123
- title="Generating Your Shop Profile"
94124
- subtitle="We're analyzing your data to create shop specific questions and answers. They will appear when ready."
94125
- />
94126
- </div>
94127
- } @else {
94128
- <symphiq-strategic-goals-tiled-grid
94129
- [goals]="strategicRoadmapGoals()"
94130
- [viewMode]="viewMode()"
94131
- (viewMoreClick)="openGoalModal($event)"
94132
- />
94133
- }
94134
- } @else {
94135
- <!-- Subscription Value Proposition -->
94136
- @if (!hasBillingCurrency() || isEditingCurrency()) {
94137
- @if (!hasBillingCurrency()) {
94138
- <div class="mb-8">
94139
- <symphiq-subscription-value-proposition-card
94140
- [viewMode]="viewMode()"
94141
- />
94142
- </div>
94143
- }
94144
-
94145
- <!-- Currency Selection -->
94146
- <symphiq-billing-currency-selector-card
94147
- [viewMode]="viewMode()"
94148
- [isLoading]="isCurrencySelectionLoading()"
94149
- [initialCurrency]="isEditingCurrency() ? (account()?.billingCurrencyCode || null) : null"
94150
- (currencySelected)="handleCurrencyChange($event)"
94151
- />
94152
- } @else if (showPlanSelection()) {
94153
- <!-- Plan Selection -->
94154
-
94155
- <div class="mb-32">
94156
- <symphiq-plan-selection-container
94157
- [viewMode]="viewMode()"
94158
- [selectedCurrency]="account()?.billingCurrencyCode || CurrencyCodeEnum.USD"
94159
- [planCardInfos]="planCardInfos()"
94160
- [isLoading]="isPlanLoading()"
94161
- [selectedPeriodUnit]="selectedPeriodUnit()"
94162
- (periodUnitChanged)="handlePeriodUnitChange($event)"
94163
- (planSelected)="handlePlanSelection($event)"
94164
- (editCurrency)="handleEditCurrencyClick()"
94165
- (checkout)="checkoutPlanClick.emit($event)"
94166
- />
94167
- </div>
94168
- } @else {
94169
- <symphiq-plan-selection-placeholder-card
94170
- [viewMode]="viewMode()"
94171
- [selectedCurrency]="account()?.billingCurrencyCode || CurrencyCodeEnum.USD"
94172
- (editCurrency)="handleEditCurrencyClick()"
94173
- />
94174
- }
94175
- }
94176
- </div>
94177
- }
94178
-
94179
- <!-- Supporting Business Context -->
94180
- @if (nonStrategicSections().length > 0) {
94181
- <div>
94182
- <symphiq-collapsible-analysis-section-group
94183
- [sections]="nonStrategicSections()"
94184
- [viewMode]="viewMode()"
94185
- [executiveSummary]="executiveSummary()"
94186
- [focusAreaExecutiveSummary]="focusAreaExecutiveSummary()"
94187
- [metricExecutiveSummary]="metricExecutiveSummary()"
94188
- [metricName]="metricName()"
94189
- [allGoals]="allGoals()"
94190
- [allMetrics]="allMetrics()"
94191
- [allCharts]="allCharts()"
94192
- [allInsights]="allInsights()"
94193
- [businessProfile]="profile()"
94194
- />
94195
- </div>
94196
- }
94197
- }
94198
-
94199
- <!-- Compact & Expanded View Content -->
94200
- @if (!isSimplifiedView()) {
94201
- <!-- SHOP Executive Summary -->
94202
- @if (!isFocusAreaAnalysis() && executiveSummary(); as summary) {
94203
- <section id="section-executive-summary" class="space-y-6 scroll-mt-24">
94204
- <!-- Summary Banner -->
94205
- <div [ngClass]="getBannerClasses()" class="rounded-2xl p-8 shadow-xl">
94206
- <div class="space-y-6">
94207
- <div class="flex items-start justify-between gap-4">
94208
- <div class="flex-1">
94209
- <h2 [ngClass]="getSectionTitleClasses()" class="text-2xl font-bold mb-3">
94210
- Executive Summary
94211
- </h2>
94212
- <p [ngClass]="getTextClasses()" class="text-lg leading-relaxed">
94213
- {{ summary.gradeRationale }}
94214
- </p>
94215
- </div>
94216
- @if (summary.overallGrade) {
94217
- <symphiq-grade-badge
94218
- [grade]="summary.overallGrade"
94219
- [gradeRationale]="summary.gradeRationale || ''"
94220
- [viewMode]="viewMode()"
94221
- />
94222
- }
94223
- </div>
94224
-
94225
- @if (summary.narrative) {
94226
- <div [ngClass]="getNarrativeClasses()" class="rounded-xl p-6">
94227
- <h3 [ngClass]="getSubheadingClasses()" class="text-lg font-semibold mb-3">
94228
- Analysis Narrative
94229
- </h3>
94230
- <div class="relative">
94231
- @if (summary.napkinVisual && summary.napkinVisual.enabled) {
94232
- <div class="mb-6 lg:float-left lg:mr-6 lg:mb-4 lg:max-w-[66%]">
94233
- <symphiq-napkin-visual-placeholder
94234
- [visual]="summary.napkinVisual"
94235
- [viewMode]="viewMode()"
94236
- />
94237
- </div>
94238
- }
94239
- <p [ngClass]="getTextClasses()" class="text-sm leading-relaxed whitespace-pre-line">
94240
- {{ summary.narrative }}
94241
- </p>
94242
- <div class="clear-both"></div>
94243
- </div>
94244
- </div>
94245
- }
94246
-
94247
- <!-- Stats -->
94248
- <div class="grid grid-cols-1 md:grid-cols-3 gap-4">
94249
- <button
94250
- type="button"
94251
- (click)="onKeyStrengthsClick(summary)"
94252
- [ngClass]="getKeyStrengthsStatCardClasses()"
94253
- class="p-4 rounded-xl text-left transition-all duration-200 hover:scale-[1.02] active:scale-[0.98] group cursor-pointer">
94254
- <div [ngClass]="getKeyStrengthsStatLabelClasses()" class="text-xs font-semibold uppercase mb-1">
94255
- Key Strengths
94256
- </div>
94257
- <div [ngClass]="getKeyStrengthsStatValueClasses()" class="text-3xl font-bold mb-2">
94258
- {{ summary.keyStrengths?.length || 0 }}
94259
- </div>
94260
- <div class="flex items-center gap-1.5 text-xs font-medium">
94261
- <span [ngClass]="getKeyStrengthsButtonTextClasses()">View Details</span>
94262
- <symphiq-icon
94263
- [icon]="{ name: 'chevron-right', source: IconSourceEnum.HEROICONS }"
94264
- size="w-4 h-4"
94265
- [ngClass]="getKeyStrengthsButtonTextClasses()"
94266
- class="transition-transform group-hover:translate-x-1"
94267
- />
94268
- </div>
94269
- </button>
94270
- <button
94271
- type="button"
94272
- (click)="onCriticalGapsClick(summary)"
94273
- [ngClass]="getCriticalGapsStatCardClasses()"
94274
- class="p-4 rounded-xl text-left transition-all duration-200 hover:scale-[1.02] active:scale-[0.98] group cursor-pointer">
94275
- <div [ngClass]="getCriticalGapsStatLabelClasses()" class="text-xs font-semibold uppercase mb-1">
94276
- Critical Gaps
94277
- </div>
94278
- <div [ngClass]="getCriticalGapsStatValueClasses()" class="text-3xl font-bold mb-2">
94279
- {{ summary.criticalGaps?.length || 0 }}
94280
- </div>
94281
- <div class="flex items-center gap-1.5 text-xs font-medium">
94282
- <span [ngClass]="getCriticalGapsButtonTextClasses()">View Details</span>
94283
- <symphiq-icon
94284
- [icon]="{ name: 'chevron-right', source: IconSourceEnum.HEROICONS }"
94285
- size="w-4 h-4"
94286
- [ngClass]="getCriticalGapsButtonTextClasses()"
94287
- class="transition-transform group-hover:translate-x-1"
94288
- />
94289
- </div>
94290
- </button>
94291
- <button
94292
- type="button"
94293
- (click)="scrollToQuickWins()"
94294
- [ngClass]="getQuickWinsStatCardClasses()"
94295
- class="p-4 rounded-xl text-left transition-all duration-200 hover:scale-[1.02] active:scale-[0.98] group cursor-pointer">
94296
- <div [ngClass]="getQuickWinsStatLabelClasses()" class="text-xs font-semibold uppercase mb-1">
94297
- Quick Wins
94298
- </div>
94299
- <div [ngClass]="getQuickWinsStatValueClasses()" class="text-3xl font-bold mb-2">
94300
- {{ summary.quickWins?.length || 0 }}
94301
- </div>
94302
- <div class="flex items-center gap-1.5 text-xs font-medium">
94303
- <span [ngClass]="getQuickWinsButtonTextClasses()">Details Below</span>
94304
- <symphiq-icon
94305
- [icon]="{ name: 'chevron-down', source: IconSourceEnum.HEROICONS }"
94306
- size="w-4 h-4"
94307
- [ngClass]="getQuickWinsButtonTextClasses()"
94308
- class="transition-transform group-hover:translate-y-1 animate-bounce"
94309
- />
94310
- </div>
94311
- </button>
94312
- </div>
94313
- </div>
94314
- </div>
94315
-
94316
- <!-- Quick Wins -->
94317
- @if (summary.quickWins && summary.quickWins.length > 0) {
94318
- <div id="quick-wins-section" class="space-y-4 scroll-mt-24">
94319
- <h3 [ngClass]="getSectionTitleClasses()" class="text-xl font-bold">
94320
- Quick Wins
94321
- </h3>
94322
- <div class="grid grid-cols-1 lg:grid-cols-2 gap-6">
94323
- @for (win of summary.quickWins; track $index) {
94324
- <div [ngClass]="getQuickWinCardClasses()"
94325
- class="rounded-xl p-6 transition-all duration-300">
94326
- <div class="space-y-4">
94327
- <div class="flex items-start gap-3">
94328
- <span [ngClass]="getNumberBadgeClasses()"
94329
- class="flex-shrink-0 w-8 h-8 rounded-full flex items-center justify-center text-sm font-bold">
94330
- {{ $index + 1 }}
94331
- </span>
94332
- <p [ngClass]="getQuickWinTextClasses()" class="font-semibold leading-tight flex-1">
94333
- {{ win.action }}
94334
- </p>
94335
- </div>
94336
-
94337
- <div class="flex flex-wrap gap-2">
94338
- <span [ngClass]="getEffortBadgeClasses(win.effort)"
94339
- class="px-3 py-1 rounded-full text-xs font-semibold">
94340
- {{ formatLabel(win.effort) }} Effort
94341
- </span>
94342
- <span [ngClass]="getImpactBadgeClasses(win.impact)"
94343
- class="px-3 py-1 rounded-full text-xs font-semibold">
94344
- {{ formatLabel(win.impact) }} Impact
94345
- </span>
94346
- </div>
94347
-
94348
- @if (win.estimatedTimeframe) {
94349
- <div class="flex items-center gap-2 text-sm" [ngClass]="getMetaTextClasses()">
94350
- <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
94351
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
94352
- d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"/>
94353
- </svg>
94354
- <span>{{ win.estimatedTimeframe }}</span>
94355
- </div>
94356
- }
94357
-
94358
- @if (win.relatedGoalId) {
94359
- <div class="space-y-2">
94360
- <h4 [ngClass]="getMetaTextClasses()"
94361
- class="text-xs font-semibold uppercase tracking-wider">
94362
- Related Goal
94363
- </h4>
94364
- <symphiq-related-goal-chips
94365
- [relatedGoalIds]="[win.relatedGoalId]"
94366
- [allGoals]="allGoals()"
94367
- [viewMode]="viewMode()"
94368
- />
94369
- </div>
94370
- }
94371
- </div>
94372
- </div>
94373
- }
94374
- </div>
94375
- </div>
94376
- }
94377
- </section>
94378
- }
94379
-
94380
- <!-- FOCUS_AREA Executive Summary -->
94381
- @if (isFocusAreaAnalysis() && focusAreaExecutiveSummary(); as summary) {
94382
- <symphiq-focus-area-executive-summary
94383
- [viewMode]="viewMode()"
94384
- [summary]="summary"
94385
- [allGoals]="allGoals()"
94386
- (topPrioritiesClick)="handleTopPrioritiesClick()"
94387
- (priorityDetailClick)="handlePriorityDetailClick($event)"
94388
- />
94389
- }
94390
-
94391
- <!-- METRIC Executive Summary -->
94392
- @if (isMetricAnalysis() && metricExecutiveSummary(); as summary) {
94393
- <symphiq-metric-executive-summary
94394
- [viewMode]="viewMode()"
94395
- [summary]="summary"
94396
- [metricName]="metricName()"
94397
- [allGoals]="allGoals()"
94398
- (topPrioritiesClick)="handleMetricTopPrioritiesClick()"
94399
- (priorityDetailClick)="handleMetricPriorityDetailClick($event)"
94400
- />
94401
- }
94402
-
94403
- <!-- Divider Before First Section -->
94404
- @if (sections(); as sectionList) {
94405
- @if (sectionList.length > 0 && sectionList[0].icon) {
94406
- <symphiq-section-divider
94407
- [viewMode]="viewMode()"
94408
- [sectionIcon]="sectionList[0].icon"
94409
- />
94410
- }
94411
- }
94412
-
94413
- <!-- Profile Analysis Sections -->
94414
- @if (sections(); as sectionList) {
94415
- <section class="space-y-8">
94416
- @for (section of sectionList; track section.id; let idx = $index; let last = $last) {
94417
- <div [id]="'section-' + section.id" [ngClass]="getSectionCardClasses()"
94418
- class="rounded-xl p-8 scroll-mt-24">
94419
- <!-- Icon and Title -->
94420
- <div class="flex items-start gap-3 mb-6">
94421
- @if (section.icon) {
94422
- <div [ngClass]="getSectionIconClasses()"
94423
- class="flex-shrink-0 w-12 h-12 rounded-xl flex items-center justify-center">
94424
- <symphiq-icon [icon]="section.icon" size="w-6 h-6"></symphiq-icon>
94425
- </div>
94426
- }
94427
- <div class="flex-1">
94428
- <h3 [ngClass]="getSectionTitleClasses()" class="text-2xl font-bold">
94429
- {{ section.title }}
94430
- </h3>
94431
- </div>
94432
- </div>
94433
-
94434
- <!-- Description and Visual Side-by-Side -->
94435
- @if (section.description || (section.visual && section.visual.enabled)) {
94436
- <div class="mb-6 flex flex-col lg:flex-row gap-6 items-start"
94437
- [class.lg:flex-row-reverse]="idx % 2 === 0">
94438
- @if (section.visual && section.visual.enabled) {
94439
- <div class="w-full lg:w-2/3">
94440
- <symphiq-napkin-visual-placeholder
94441
- [visual]="section.visual"
94442
- [viewMode]="viewMode()"
94443
- />
94444
- </div>
94445
- }
94446
- @if (section.description) {
94447
- <div class="w-full"
94448
- [class.lg:w-1/3]="section.visual && section.visual.enabled" [class.lg:w-full]="!section.visual || !section.visual.enabled">
94449
- <p [ngClass]="getSectionDescriptionClasses()"
94450
- class="text-sm leading-relaxed whitespace-pre-line">
94451
- {{ section.description }}
94452
- </p>
94453
- </div>
94454
- }
94455
- </div>
94456
- }
94457
-
94458
- <!-- Section Content -->
94459
- <symphiq-profile-section-content
94460
- [section]="section"
94461
- [executiveSummary]="section.id === 'executive-summary' ? executiveSummary() : undefined"
94462
- [viewMode]="viewMode()"
94463
- [sectionIndex]="idx"
94464
- [allGoals]="allGoals()"
94465
- [allMetrics]="allMetrics()"
94466
- [allCharts]="allCharts()"
94467
- [allInsights]="allInsights()"
94468
- [businessProfile]="profile()"
94469
- />
94470
- </div>
94471
-
94472
- <!-- Section Divider (between sections) -->
94473
- @if (!last) {
94474
- <symphiq-section-divider
94475
- [viewMode]="viewMode()"
94476
- [sectionIcon]="sectionList[idx + 1].icon"
94477
- />
94478
- }
94479
- }
94480
- </section>
94481
- }
94482
- }
94483
-
94484
- </main>
94485
-
94486
- <!-- Table of Contents (Compact & Expanded Views) -->
94487
- @if (!isSimplifiedView() && sections()) {
94488
- <symphiq-floating-toc
94489
- [sections]="tocSections()"
94490
- [viewMode]="viewMode()"
94491
- [embedded]="embedded()"
94492
- [scrollElement]="scrollElement() ?? undefined"
94493
- />
94494
- }
94495
-
94496
- <!-- Section Navigation Dots (Compact & Expanded Views) -->
94497
- @if (!isSimplifiedView() && sections()) {
94498
- <symphiq-section-navigation
94499
- [sections]="tocSections()"
94500
- [viewMode]="viewMode()"
94501
- [embedded]="embedded()"
94502
- [scrollElement]="scrollElement() ?? undefined"
94503
- />
94504
- }
94505
-
94506
- <!-- Search Modal -->
94507
- <symphiq-search-modal
94508
- [isOpen]="isSearchOpen()"
94509
- [isLightMode]="isLightMode()"
94510
- (close)="closeSearch()"
94511
- />
94512
-
94513
- <!-- View Mode Switcher Modal -->
94514
- <symphiq-view-mode-switcher-modal
94515
- [isOpen]="isViewModeSwitcherOpen()"
94516
- [currentMode]="currentDisplayMode()"
94517
- [viewMode]="viewMode()"
94518
- (close)="closeViewModeSwitcher()"
94519
- (modeSelected)="handleDisplayModeChange($event)"
94520
- />
94521
-
94522
- <!-- Profile Analysis Modal -->
94523
- <symphiq-profile-analysis-modal
94524
- [isLightMode]="isLightMode()"
94525
- [allMetrics]="allMetrics()"
94526
- [allInsights]="allInsights()"
94527
- [allBusinessInsights]="allBusinessInsights()"
94528
- [allCharts]="allCharts()"
94529
- >
94530
- @if (modalType() === 'goal-detail' && getGoalDetailData(); as data) {
94531
- <symphiq-goal-card
94532
- [goal]="data.goal"
94533
- [viewMode]="data.viewMode"
94534
- [isInModal]="true"
94535
- [allMetrics]="allMetrics()"
94536
- [allCharts]="allCharts()"
94537
- [allInsights]="allInsights()"
94538
- [currentModalState]="getCurrentModalState()"
94539
- [businessProfile]="profile()"
94540
- />
94541
- }
94542
- @if (modalType() === 'goal-objectives' && getGoalDetailData(); as data) {
94543
- <symphiq-goal-objectives-modal-content
94544
- [goal]="data.goal"
94545
- [viewMode]="data.viewMode"
94546
- />
94547
- }
94548
- @if (modalType() === 'objective-strategies' && getObjectiveStrategiesData(); as data) {
94549
- <symphiq-objective-strategies-modal-content
94550
- [objective]="data.objective"
94551
- [goalTitle]="data.goalTitle"
94552
- [viewMode]="data.viewMode"
94553
- />
94554
- }
94555
- @if (modalType() === 'strategy-recommendations' && getStrategyRecommendationsData(); as data) {
94556
- <symphiq-strategy-recommendations-modal-content
94557
- [strategy]="data.strategy"
94558
- [objectiveTitle]="data.objectiveTitle"
94559
- [goalTitle]="data.goalTitle"
94560
- [viewMode]="data.viewMode"
94561
- [allMetrics]="allMetrics()"
94562
- [allCharts]="allCharts()"
94563
- [allInsights]="allInsights()"
94564
- [allBusinessInsights]="allBusinessInsights()"
94565
- [currentModalState]="getCurrentModalState()"
94566
- />
94567
- }
94568
- @if (modalType() === 'category-detail' && getCategoryDetailData(); as data) {
94569
- <symphiq-category-detail-modal-content
94570
- [category]="data.category"
94571
- [viewMode]="data.viewMode"
94572
- [scrollToSection]="data.scrollToSection"
94573
- />
94574
- }
94575
- @if (modalType() === 'strength-detail' && getStrengthDetailData(); as data) {
94576
- <symphiq-strength-detail-modal-content
94577
- [strength]="data.strength"
94578
- [viewMode]="data.viewMode"
94579
- [allFunnelStrengths]="funnelStrengths()"
94580
- [currentModalState]="getCurrentModalState()"
94581
- />
94582
- }
94583
- @if (modalType() === 'gap-detail' && getGapDetailData(); as data) {
94584
- <symphiq-gap-detail-modal-content
94585
- [gap]="data.gap"
94586
- [viewMode]="data.viewMode"
94587
- [allGoals]="allGoals()"
94588
- [allWeaknesses]="funnelWeaknesses()"
94589
- [currentModalState]="getCurrentModalState()"
94590
- />
94591
- }
94592
- @if (modalType() === 'opportunity-detail' && getOpportunityDetailData(); as data) {
94593
- <symphiq-opportunity-detail-modal-content
94594
- [opportunity]="data.opportunity"
94595
- [viewMode]="data.viewMode"
94596
- [allStrengths]="funnelStrengths()"
94597
- [currentModalState]="getCurrentModalState()"
94598
- />
94599
- }
94600
- </symphiq-profile-analysis-modal>
94601
-
94602
- <!-- Funnel Analysis Modal (for insights and metrics from profile goals) -->
94603
- <symphiq-funnel-analysis-modal
94604
- [isLightMode]="isLightMode()"
94605
- [viewMode]="viewMode()"
94606
- [allMetrics]="allMetrics()"
94607
- [allInsights]="allInsights()"
94608
- [allCharts]="allCharts()"
94609
- />
94610
-
94611
- <!-- Business Analysis Modal (for napkin visuals and other content) -->
94612
- <symphiq-business-analysis-modal [isLightMode]="isLightMode()"/>
94613
-
94614
- <!-- Tooltip Container -->
94615
- <symphiq-tooltip-container/>
94616
-
94617
- <!-- Sticky Continue Button (Only shown when not subscribed and no currency selected) -->
94618
- @if (!isSubscriptionActive() && !hasBillingCurrency() && isSimplifiedView() && !isFocusAreaAnalysis() && !isMetricAnalysis()) {
94619
- <symphiq-sticky-subscription-continue-button
94620
- [viewMode]="viewMode()"
94621
- [isEnabled]="hasCurrencySelected()"
94622
- [isLoading]="isCurrencySelectionLoading()"
94623
- (continueClick)="handleStickyButtonClick()"
94624
- />
94625
- }
94626
-
94627
- <!-- Shop Profile Sticky Footer -->
94628
- @if (shouldShowShopProfileStickyFooter()) {
94629
- <symphiq-shop-profile-sticky-footer
94630
- [viewMode]="viewMode()"
94631
- [totalQuestions]="totalShopQuestions()"
94632
- [answeredQuestions]="answeredShopQuestions()"
94633
- (continueClick)="handleShopProfileContinueClick()"
94634
- />
94635
- }
94636
-
94637
- <!-- Sticky Footer for Edit Currency Mode -->
94638
- @if (isEditingCurrency()) {
94639
- <div
94640
- [ngClass]="getEditCurrencyFooterClasses()"
94641
- class="fixed bottom-0 left-0 right-0 z-50 border-t backdrop-blur-lg"
94642
- >
94643
- <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-4">
94644
- <div class="flex items-center gap-4">
94645
- <button
94646
- (click)="handleCancelCurrencyEdit()"
94647
- [ngClass]="getEditCurrencyCancelButtonClasses()"
94648
- class="px-6 py-4 rounded-xl font-semibold text-lg transition-all duration-300 cursor-pointer"
94649
- >
94650
- Cancel
94651
- </button>
94652
- <button
94653
- (click)="handleContinueToPlans()"
94654
- [disabled]="!editingCurrencySelection()"
94655
- [ngClass]="getEditCurrencyContinueButtonClasses()"
94656
- class="flex-1 px-6 py-4 rounded-xl font-semibold text-lg transition-all duration-300 flex items-center justify-center gap-3 shadow-2xl"
94657
- >
94658
- <span>Continue to Plans</span>
94659
- <svg class="w-6 h-6 transition-transform duration-200"
94660
- [class.translate-x-1]="editingCurrencySelection()" fill="none" stroke="currentColor"
94661
- viewBox="0 0 24 24">
94662
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
94663
- d="M13 7l5 5m0 0l-5 5m5-5H6"></path>
94664
- </svg>
94665
- </button>
94666
- </div>
94667
- </div>
94668
- </div>
94669
- }
94670
- </div>
94082
+ template: `
94083
+ <div [ngClass]="getContainerClasses()" class="min-h-screen relative">
94084
+ <div class="animated-bubbles" [class.light-mode]="isLightMode()"
94085
+ style="position: fixed; top: 0; left: 0; right: 0; bottom: 0; width: 100vw; height: 100vh; z-index: 1; pointer-events: none;"></div>
94086
+
94087
+ <!-- Scroll Progress Bar -->
94088
+ <div
94089
+ [class]="embedded() ? 'sticky top-0 left-0 right-0 h-1 z-[60] bg-slate-200/30' : 'fixed top-0 left-0 right-0 h-1 z-[60] bg-slate-200/30'">
94090
+ <div
94091
+ [style.width.%]="scrollProgress()"
94092
+ [ngClass]="isLightMode() ? 'bg-gradient-to-r from-blue-500 to-purple-500' : 'bg-gradient-to-r from-blue-400 to-purple-400'"
94093
+ class="h-full transition-all duration-200 ease-out">
94094
+ </div>
94095
+ </div>
94096
+
94097
+ <div class="relative z-[51]">
94098
+ <!-- Dashboard Header -->
94099
+ <symphiq-dashboard-header
94100
+ [title]="profileAnalysis()?.profileAnalysisStructured?.businessName || 'Profile Analysis'"
94101
+ [subtitle]="getAnalysisSubtitle()"
94102
+ [currentSection]="getAnalysisSubtitle()"
94103
+ [viewMode]="viewMode()"
94104
+ [viewModeLabel]="displayModeLabel()"
94105
+ [isLoading]="isLoading()"
94106
+ [requestedByUser]="requestedByUser()"
94107
+ [createdDate]="profileAnalysis()?.selfContentCompletedDate"
94108
+ [showControls]="shouldShowHeaderControls()"
94109
+ (searchClick)="openSearch()"
94110
+ (viewModeClick)="openViewModeSwitcher()"
94111
+ />
94112
+
94113
+ <!-- Journey Progress Banner -->
94114
+ @if (isSimplifiedView() && !isOnboarded()) {
94115
+ <symphiq-journey-progress-indicator
94116
+ [viewMode]="viewMode()"
94117
+ [currentStepId]="currentStepId()"
94118
+ [showNextStepAction]="shouldShowContinueButton()"
94119
+ [forDemo]="forDemo()"
94120
+ [maxAccessibleStepId]="maxAccessibleStepId()"
94121
+ (nextStepClick)="nextStepClick.emit()"
94122
+ (stepClick)="stepClick.emit($event)"
94123
+ />
94124
+ }
94125
+
94126
+ <!-- Main Content -->
94127
+ <main class="relative z-10 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12 space-y-12"
94128
+ [class.pb-32]="shouldShowStickyButton() || shouldShowShopProfileStickyFooter()">
94129
+
94130
+ <!-- Welcome Banner (Simplified View Only) -->
94131
+ @if (isSimplifiedView()) {
94132
+ <div class="mb-12">
94133
+ @if (!isFocusAreaAnalysis() && !isMetricAnalysis()) {
94134
+ <symphiq-shop-welcome-banner
94135
+ [viewMode]="viewMode()"
94136
+ [businessName]="profileAnalysis()?.profileAnalysisStructured?.businessName || 'your shop'"
94137
+ [isOnboarded]="isOnboarded()"
94138
+ />
94139
+ }
94140
+ @if (isFocusAreaAnalysis()) {
94141
+ <symphiq-focus-area-welcome-banner
94142
+ [viewMode]="viewMode()"
94143
+ [focusAreaDomain]="focusAreaDomain()"
94144
+ [focusAreaName]="focusAreaName()"
94145
+ [focusAreaDetails]="focusAreaDetails()"
94146
+ />
94147
+ }
94148
+ @if (isMetricAnalysis()) {
94149
+ <symphiq-metric-welcome-banner
94150
+ [viewMode]="viewMode()"
94151
+ [metricName]="profileAnalysis()?.profileAnalysisStructured?.metricExecutiveSummary?.metric"
94152
+ [isOnboarded]="isOnboarded()"
94153
+ />
94154
+ }
94155
+ </div>
94156
+ }
94157
+
94158
+ <!-- Simplified View Content -->
94159
+ @if (isSimplifiedView()) {
94160
+ <!-- Shop Profile Status Card -->
94161
+ @if (shouldShowShopProfileStatus() && !isFocusAreaAnalysis() && !isMetricAnalysis()) {
94162
+ <div class="mb-8">
94163
+ <symphiq-shop-profile-status-card
94164
+ #shopProfileStatusCard
94165
+ [viewMode]="viewMode()"
94166
+ [totalQuestions]="totalShopQuestions()"
94167
+ [answeredQuestions]="answeredShopQuestions()"
94168
+ [questions]="profileShopQuestions() || []"
94169
+ [profileAnswers]="profileAnswers() || []"
94170
+ [profileAnswerHistories]="profileAnswerHistories() || []"
94171
+ [users]="users() || []"
94172
+ [currentUser]="currentUser()"
94173
+ (startCategoryQuestions)="handleStartCategoryQuestions($event)"
94174
+ (answerSave)="handleProfileQuestionAnswerSave($event)"
94175
+ (adminAnswerAction)="shopProfileAdminAnswerAction.emit($event)"
94176
+ />
94177
+ </div>
94178
+ }
94179
+
94180
+ <!-- Strategic Insights & Goals (or Subscription Flow) -->
94181
+ @if (profileAnalysis()) {
94182
+ <div class="mb-8">
94183
+ @if (isSubscriptionActive() || isFocusAreaAnalysis() || isMetricAnalysis()) {
94184
+ @if (isProfileShopGenerating() && !isFocusAreaAnalysis() && !isMetricAnalysis()) {
94185
+ <div [ngClass]="getProgressCardClasses()" class="rounded-2xl border shadow-lg overflow-hidden">
94186
+ <symphiq-content-generation-progress
94187
+ [itemStatus]="itemStatusProfileShop()"
94188
+ [viewMode]="viewMode()"
94189
+ title="Generating Your Shop Profile"
94190
+ subtitle="We're analyzing your data to create shop specific questions and answers. They will appear when ready."
94191
+ />
94192
+ </div>
94193
+ } @else {
94194
+ <symphiq-strategic-goals-tiled-grid
94195
+ [goals]="strategicRoadmapGoals()"
94196
+ [viewMode]="viewMode()"
94197
+ (viewMoreClick)="openGoalModal($event)"
94198
+ />
94199
+ }
94200
+ } @else {
94201
+ <!-- Subscription Value Proposition -->
94202
+ @if (!hasBillingCurrency() || isEditingCurrency()) {
94203
+ @if (!hasBillingCurrency()) {
94204
+ <div class="mb-8">
94205
+ <symphiq-subscription-value-proposition-card
94206
+ [viewMode]="viewMode()"
94207
+ />
94208
+ </div>
94209
+ }
94210
+
94211
+ <!-- Currency Selection -->
94212
+ <symphiq-billing-currency-selector-card
94213
+ [viewMode]="viewMode()"
94214
+ [isLoading]="isCurrencySelectionLoading()"
94215
+ [initialCurrency]="isEditingCurrency() ? (account()?.billingCurrencyCode || null) : null"
94216
+ (currencySelected)="handleCurrencyChange($event)"
94217
+ />
94218
+ } @else if (showPlanSelection()) {
94219
+ <!-- Plan Selection -->
94220
+
94221
+ <div class="mb-32">
94222
+ <symphiq-plan-selection-container
94223
+ [viewMode]="viewMode()"
94224
+ [selectedCurrency]="account()?.billingCurrencyCode || CurrencyCodeEnum.USD"
94225
+ [planCardInfos]="planCardInfos()"
94226
+ [isLoading]="isPlanLoading()"
94227
+ [selectedPeriodUnit]="selectedPeriodUnit()"
94228
+ (periodUnitChanged)="handlePeriodUnitChange($event)"
94229
+ (planSelected)="handlePlanSelection($event)"
94230
+ (editCurrency)="handleEditCurrencyClick()"
94231
+ (checkout)="checkoutPlanClick.emit($event)"
94232
+ />
94233
+ </div>
94234
+ } @else {
94235
+ <symphiq-plan-selection-placeholder-card
94236
+ [viewMode]="viewMode()"
94237
+ [selectedCurrency]="account()?.billingCurrencyCode || CurrencyCodeEnum.USD"
94238
+ (editCurrency)="handleEditCurrencyClick()"
94239
+ />
94240
+ }
94241
+ }
94242
+ </div>
94243
+ }
94244
+
94245
+ <!-- Supporting Business Context -->
94246
+ @if (nonStrategicSections().length > 0) {
94247
+ <div>
94248
+ <symphiq-collapsible-analysis-section-group
94249
+ [sections]="nonStrategicSections()"
94250
+ [viewMode]="viewMode()"
94251
+ [executiveSummary]="executiveSummary()"
94252
+ [focusAreaExecutiveSummary]="focusAreaExecutiveSummary()"
94253
+ [metricExecutiveSummary]="metricExecutiveSummary()"
94254
+ [metricName]="metricName()"
94255
+ [allGoals]="allGoals()"
94256
+ [allMetrics]="allMetrics()"
94257
+ [allCharts]="allCharts()"
94258
+ [allInsights]="allInsights()"
94259
+ [businessProfile]="profile()"
94260
+ />
94261
+ </div>
94262
+ }
94263
+ }
94264
+
94265
+ <!-- Compact & Expanded View Content -->
94266
+ @if (!isSimplifiedView()) {
94267
+ <!-- SHOP Executive Summary -->
94268
+ @if (!isFocusAreaAnalysis() && executiveSummary(); as summary) {
94269
+ <section id="section-executive-summary" class="space-y-6 scroll-mt-24">
94270
+ <!-- Summary Banner -->
94271
+ <div [ngClass]="getBannerClasses()" class="rounded-2xl p-8 shadow-xl">
94272
+ <div class="space-y-6">
94273
+ <div class="flex items-start justify-between gap-4">
94274
+ <div class="flex-1">
94275
+ <h2 [ngClass]="getSectionTitleClasses()" class="text-2xl font-bold mb-3">
94276
+ Executive Summary
94277
+ </h2>
94278
+ <p [ngClass]="getTextClasses()" class="text-lg leading-relaxed">
94279
+ {{ summary.gradeRationale }}
94280
+ </p>
94281
+ </div>
94282
+ @if (summary.overallGrade) {
94283
+ <symphiq-grade-badge
94284
+ [grade]="summary.overallGrade"
94285
+ [gradeRationale]="summary.gradeRationale || ''"
94286
+ [viewMode]="viewMode()"
94287
+ />
94288
+ }
94289
+ </div>
94290
+
94291
+ @if (summary.narrative) {
94292
+ <div [ngClass]="getNarrativeClasses()" class="rounded-xl p-6">
94293
+ <h3 [ngClass]="getSubheadingClasses()" class="text-lg font-semibold mb-3">
94294
+ Analysis Narrative
94295
+ </h3>
94296
+ <div class="relative">
94297
+ @if (summary.napkinVisual && summary.napkinVisual.enabled) {
94298
+ <div class="mb-6 lg:float-left lg:mr-6 lg:mb-4 lg:max-w-[66%]">
94299
+ <symphiq-napkin-visual-placeholder
94300
+ [visual]="summary.napkinVisual"
94301
+ [viewMode]="viewMode()"
94302
+ />
94303
+ </div>
94304
+ }
94305
+ <p [ngClass]="getTextClasses()" class="text-sm leading-relaxed whitespace-pre-line">
94306
+ {{ summary.narrative }}
94307
+ </p>
94308
+ <div class="clear-both"></div>
94309
+ </div>
94310
+ </div>
94311
+ }
94312
+
94313
+ <!-- Stats -->
94314
+ <div class="grid grid-cols-1 md:grid-cols-3 gap-4">
94315
+ <button
94316
+ type="button"
94317
+ (click)="onKeyStrengthsClick(summary)"
94318
+ [ngClass]="getKeyStrengthsStatCardClasses()"
94319
+ class="p-4 rounded-xl text-left transition-all duration-200 hover:scale-[1.02] active:scale-[0.98] group cursor-pointer">
94320
+ <div [ngClass]="getKeyStrengthsStatLabelClasses()" class="text-xs font-semibold uppercase mb-1">
94321
+ Key Strengths
94322
+ </div>
94323
+ <div [ngClass]="getKeyStrengthsStatValueClasses()" class="text-3xl font-bold mb-2">
94324
+ {{ summary.keyStrengths?.length || 0 }}
94325
+ </div>
94326
+ <div class="flex items-center gap-1.5 text-xs font-medium">
94327
+ <span [ngClass]="getKeyStrengthsButtonTextClasses()">View Details</span>
94328
+ <symphiq-icon
94329
+ [icon]="{ name: 'chevron-right', source: IconSourceEnum.HEROICONS }"
94330
+ size="w-4 h-4"
94331
+ [ngClass]="getKeyStrengthsButtonTextClasses()"
94332
+ class="transition-transform group-hover:translate-x-1"
94333
+ />
94334
+ </div>
94335
+ </button>
94336
+ <button
94337
+ type="button"
94338
+ (click)="onCriticalGapsClick(summary)"
94339
+ [ngClass]="getCriticalGapsStatCardClasses()"
94340
+ class="p-4 rounded-xl text-left transition-all duration-200 hover:scale-[1.02] active:scale-[0.98] group cursor-pointer">
94341
+ <div [ngClass]="getCriticalGapsStatLabelClasses()" class="text-xs font-semibold uppercase mb-1">
94342
+ Critical Gaps
94343
+ </div>
94344
+ <div [ngClass]="getCriticalGapsStatValueClasses()" class="text-3xl font-bold mb-2">
94345
+ {{ summary.criticalGaps?.length || 0 }}
94346
+ </div>
94347
+ <div class="flex items-center gap-1.5 text-xs font-medium">
94348
+ <span [ngClass]="getCriticalGapsButtonTextClasses()">View Details</span>
94349
+ <symphiq-icon
94350
+ [icon]="{ name: 'chevron-right', source: IconSourceEnum.HEROICONS }"
94351
+ size="w-4 h-4"
94352
+ [ngClass]="getCriticalGapsButtonTextClasses()"
94353
+ class="transition-transform group-hover:translate-x-1"
94354
+ />
94355
+ </div>
94356
+ </button>
94357
+ <button
94358
+ type="button"
94359
+ (click)="scrollToQuickWins()"
94360
+ [ngClass]="getQuickWinsStatCardClasses()"
94361
+ class="p-4 rounded-xl text-left transition-all duration-200 hover:scale-[1.02] active:scale-[0.98] group cursor-pointer">
94362
+ <div [ngClass]="getQuickWinsStatLabelClasses()" class="text-xs font-semibold uppercase mb-1">
94363
+ Quick Wins
94364
+ </div>
94365
+ <div [ngClass]="getQuickWinsStatValueClasses()" class="text-3xl font-bold mb-2">
94366
+ {{ summary.quickWins?.length || 0 }}
94367
+ </div>
94368
+ <div class="flex items-center gap-1.5 text-xs font-medium">
94369
+ <span [ngClass]="getQuickWinsButtonTextClasses()">Details Below</span>
94370
+ <symphiq-icon
94371
+ [icon]="{ name: 'chevron-down', source: IconSourceEnum.HEROICONS }"
94372
+ size="w-4 h-4"
94373
+ [ngClass]="getQuickWinsButtonTextClasses()"
94374
+ class="transition-transform group-hover:translate-y-1 animate-bounce"
94375
+ />
94376
+ </div>
94377
+ </button>
94378
+ </div>
94379
+ </div>
94380
+ </div>
94381
+
94382
+ <!-- Quick Wins -->
94383
+ @if (summary.quickWins && summary.quickWins.length > 0) {
94384
+ <div id="quick-wins-section" class="space-y-4 scroll-mt-24">
94385
+ <h3 [ngClass]="getSectionTitleClasses()" class="text-xl font-bold">
94386
+ Quick Wins
94387
+ </h3>
94388
+ <div class="grid grid-cols-1 lg:grid-cols-2 gap-6">
94389
+ @for (win of summary.quickWins; track $index) {
94390
+ <div [ngClass]="getQuickWinCardClasses()"
94391
+ class="rounded-xl p-6 transition-all duration-300">
94392
+ <div class="space-y-4">
94393
+ <div class="flex items-start gap-3">
94394
+ <span [ngClass]="getNumberBadgeClasses()"
94395
+ class="flex-shrink-0 w-8 h-8 rounded-full flex items-center justify-center text-sm font-bold">
94396
+ {{ $index + 1 }}
94397
+ </span>
94398
+ <p [ngClass]="getQuickWinTextClasses()" class="font-semibold leading-tight flex-1">
94399
+ {{ win.action }}
94400
+ </p>
94401
+ </div>
94402
+
94403
+ <div class="flex flex-wrap gap-2">
94404
+ <span [ngClass]="getEffortBadgeClasses(win.effort)"
94405
+ class="px-3 py-1 rounded-full text-xs font-semibold">
94406
+ {{ formatLabel(win.effort) }} Effort
94407
+ </span>
94408
+ <span [ngClass]="getImpactBadgeClasses(win.impact)"
94409
+ class="px-3 py-1 rounded-full text-xs font-semibold">
94410
+ {{ formatLabel(win.impact) }} Impact
94411
+ </span>
94412
+ </div>
94413
+
94414
+ @if (win.estimatedTimeframe) {
94415
+ <div class="flex items-center gap-2 text-sm" [ngClass]="getMetaTextClasses()">
94416
+ <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
94417
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
94418
+ d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"/>
94419
+ </svg>
94420
+ <span>{{ win.estimatedTimeframe }}</span>
94421
+ </div>
94422
+ }
94423
+
94424
+ @if (win.relatedGoalId) {
94425
+ <div class="space-y-2">
94426
+ <h4 [ngClass]="getMetaTextClasses()"
94427
+ class="text-xs font-semibold uppercase tracking-wider">
94428
+ Related Goal
94429
+ </h4>
94430
+ <symphiq-related-goal-chips
94431
+ [relatedGoalIds]="[win.relatedGoalId]"
94432
+ [allGoals]="allGoals()"
94433
+ [viewMode]="viewMode()"
94434
+ />
94435
+ </div>
94436
+ }
94437
+ </div>
94438
+ </div>
94439
+ }
94440
+ </div>
94441
+ </div>
94442
+ }
94443
+ </section>
94444
+ }
94445
+
94446
+ <!-- FOCUS_AREA Executive Summary -->
94447
+ @if (isFocusAreaAnalysis() && focusAreaExecutiveSummary(); as summary) {
94448
+ <symphiq-focus-area-executive-summary
94449
+ [viewMode]="viewMode()"
94450
+ [summary]="summary"
94451
+ [allGoals]="allGoals()"
94452
+ (topPrioritiesClick)="handleTopPrioritiesClick()"
94453
+ (priorityDetailClick)="handlePriorityDetailClick($event)"
94454
+ />
94455
+ }
94456
+
94457
+ <!-- METRIC Executive Summary -->
94458
+ @if (isMetricAnalysis() && metricExecutiveSummary(); as summary) {
94459
+ <symphiq-metric-executive-summary
94460
+ [viewMode]="viewMode()"
94461
+ [summary]="summary"
94462
+ [metricName]="metricName()"
94463
+ [allGoals]="allGoals()"
94464
+ (topPrioritiesClick)="handleMetricTopPrioritiesClick()"
94465
+ (priorityDetailClick)="handleMetricPriorityDetailClick($event)"
94466
+ />
94467
+ }
94468
+
94469
+ <!-- Divider Before First Section -->
94470
+ @if (sections(); as sectionList) {
94471
+ @if (sectionList.length > 0 && sectionList[0].icon) {
94472
+ <symphiq-section-divider
94473
+ [viewMode]="viewMode()"
94474
+ [sectionIcon]="sectionList[0].icon"
94475
+ />
94476
+ }
94477
+ }
94478
+
94479
+ <!-- Profile Analysis Sections -->
94480
+ @if (sections(); as sectionList) {
94481
+ <section class="space-y-8">
94482
+ @for (section of sectionList; track section.id; let idx = $index; let last = $last) {
94483
+ <div [id]="'section-' + section.id" [ngClass]="getSectionCardClasses()"
94484
+ class="rounded-xl p-8 scroll-mt-24">
94485
+ <!-- Icon and Title -->
94486
+ <div class="flex items-start gap-3 mb-6">
94487
+ @if (section.icon) {
94488
+ <div [ngClass]="getSectionIconClasses()"
94489
+ class="flex-shrink-0 w-12 h-12 rounded-xl flex items-center justify-center">
94490
+ <symphiq-icon [icon]="section.icon" size="w-6 h-6"></symphiq-icon>
94491
+ </div>
94492
+ }
94493
+ <div class="flex-1">
94494
+ <h3 [ngClass]="getSectionTitleClasses()" class="text-2xl font-bold">
94495
+ {{ section.title }}
94496
+ </h3>
94497
+ </div>
94498
+ </div>
94499
+
94500
+ <!-- Description and Visual Side-by-Side -->
94501
+ @if (section.description || (section.visual && section.visual.enabled)) {
94502
+ <div class="mb-6 flex flex-col lg:flex-row gap-6 items-start"
94503
+ [class.lg:flex-row-reverse]="idx % 2 === 0">
94504
+ @if (section.visual && section.visual.enabled) {
94505
+ <div class="w-full lg:w-2/3">
94506
+ <symphiq-napkin-visual-placeholder
94507
+ [visual]="section.visual"
94508
+ [viewMode]="viewMode()"
94509
+ />
94510
+ </div>
94511
+ }
94512
+ @if (section.description) {
94513
+ <div class="w-full"
94514
+ [class.lg:w-1/3]="section.visual && section.visual.enabled" [class.lg:w-full]="!section.visual || !section.visual.enabled">
94515
+ <p [ngClass]="getSectionDescriptionClasses()"
94516
+ class="text-sm leading-relaxed whitespace-pre-line">
94517
+ {{ section.description }}
94518
+ </p>
94519
+ </div>
94520
+ }
94521
+ </div>
94522
+ }
94523
+
94524
+ <!-- Section Content -->
94525
+ <symphiq-profile-section-content
94526
+ [section]="section"
94527
+ [executiveSummary]="section.id === 'executive-summary' ? executiveSummary() : undefined"
94528
+ [viewMode]="viewMode()"
94529
+ [sectionIndex]="idx"
94530
+ [allGoals]="allGoals()"
94531
+ [allMetrics]="allMetrics()"
94532
+ [allCharts]="allCharts()"
94533
+ [allInsights]="allInsights()"
94534
+ [businessProfile]="profile()"
94535
+ />
94536
+ </div>
94537
+
94538
+ <!-- Section Divider (between sections) -->
94539
+ @if (!last) {
94540
+ <symphiq-section-divider
94541
+ [viewMode]="viewMode()"
94542
+ [sectionIcon]="sectionList[idx + 1].icon"
94543
+ />
94544
+ }
94545
+ }
94546
+ </section>
94547
+ }
94548
+ }
94549
+
94550
+ </main>
94551
+
94552
+ <!-- Table of Contents (Compact & Expanded Views) -->
94553
+ @if (!isSimplifiedView() && sections()) {
94554
+ <symphiq-floating-toc
94555
+ [sections]="tocSections()"
94556
+ [viewMode]="viewMode()"
94557
+ [embedded]="embedded()"
94558
+ [scrollElement]="scrollElement() ?? undefined"
94559
+ />
94560
+ }
94561
+
94562
+ <!-- Section Navigation Dots (Compact & Expanded Views) -->
94563
+ @if (!isSimplifiedView() && sections()) {
94564
+ <symphiq-section-navigation
94565
+ [sections]="tocSections()"
94566
+ [viewMode]="viewMode()"
94567
+ [embedded]="embedded()"
94568
+ [scrollElement]="scrollElement() ?? undefined"
94569
+ />
94570
+ }
94571
+
94572
+ <!-- Search Modal -->
94573
+ <symphiq-search-modal
94574
+ [isOpen]="isSearchOpen()"
94575
+ [isLightMode]="isLightMode()"
94576
+ (close)="closeSearch()"
94577
+ />
94578
+
94579
+ <!-- View Mode Switcher Modal -->
94580
+ <symphiq-view-mode-switcher-modal
94581
+ [isOpen]="isViewModeSwitcherOpen()"
94582
+ [currentMode]="currentDisplayMode()"
94583
+ [viewMode]="viewMode()"
94584
+ (close)="closeViewModeSwitcher()"
94585
+ (modeSelected)="handleDisplayModeChange($event)"
94586
+ />
94587
+
94588
+ <!-- Profile Analysis Modal -->
94589
+ <symphiq-profile-analysis-modal
94590
+ [isLightMode]="isLightMode()"
94591
+ [allMetrics]="allMetrics()"
94592
+ [allInsights]="allInsights()"
94593
+ [allBusinessInsights]="allBusinessInsights()"
94594
+ [allCharts]="allCharts()"
94595
+ >
94596
+ @if (modalType() === 'goal-detail' && getGoalDetailData(); as data) {
94597
+ <symphiq-goal-card
94598
+ [goal]="data.goal"
94599
+ [viewMode]="data.viewMode"
94600
+ [isInModal]="true"
94601
+ [allMetrics]="allMetrics()"
94602
+ [allCharts]="allCharts()"
94603
+ [allInsights]="allInsights()"
94604
+ [currentModalState]="getCurrentModalState()"
94605
+ [businessProfile]="profile()"
94606
+ />
94607
+ }
94608
+ @if (modalType() === 'goal-objectives' && getGoalDetailData(); as data) {
94609
+ <symphiq-goal-objectives-modal-content
94610
+ [goal]="data.goal"
94611
+ [viewMode]="data.viewMode"
94612
+ />
94613
+ }
94614
+ @if (modalType() === 'objective-strategies' && getObjectiveStrategiesData(); as data) {
94615
+ <symphiq-objective-strategies-modal-content
94616
+ [objective]="data.objective"
94617
+ [goalTitle]="data.goalTitle"
94618
+ [viewMode]="data.viewMode"
94619
+ />
94620
+ }
94621
+ @if (modalType() === 'strategy-recommendations' && getStrategyRecommendationsData(); as data) {
94622
+ <symphiq-strategy-recommendations-modal-content
94623
+ [strategy]="data.strategy"
94624
+ [objectiveTitle]="data.objectiveTitle"
94625
+ [goalTitle]="data.goalTitle"
94626
+ [viewMode]="data.viewMode"
94627
+ [allMetrics]="allMetrics()"
94628
+ [allCharts]="allCharts()"
94629
+ [allInsights]="allInsights()"
94630
+ [allBusinessInsights]="allBusinessInsights()"
94631
+ [currentModalState]="getCurrentModalState()"
94632
+ />
94633
+ }
94634
+ @if (modalType() === 'category-detail' && getCategoryDetailData(); as data) {
94635
+ <symphiq-category-detail-modal-content
94636
+ [category]="data.category"
94637
+ [viewMode]="data.viewMode"
94638
+ [scrollToSection]="data.scrollToSection"
94639
+ />
94640
+ }
94641
+ @if (modalType() === 'strength-detail' && getStrengthDetailData(); as data) {
94642
+ <symphiq-strength-detail-modal-content
94643
+ [strength]="data.strength"
94644
+ [viewMode]="data.viewMode"
94645
+ [allFunnelStrengths]="funnelStrengths()"
94646
+ [currentModalState]="getCurrentModalState()"
94647
+ />
94648
+ }
94649
+ @if (modalType() === 'gap-detail' && getGapDetailData(); as data) {
94650
+ <symphiq-gap-detail-modal-content
94651
+ [gap]="data.gap"
94652
+ [viewMode]="data.viewMode"
94653
+ [allGoals]="allGoals()"
94654
+ [allWeaknesses]="funnelWeaknesses()"
94655
+ [currentModalState]="getCurrentModalState()"
94656
+ />
94657
+ }
94658
+ @if (modalType() === 'opportunity-detail' && getOpportunityDetailData(); as data) {
94659
+ <symphiq-opportunity-detail-modal-content
94660
+ [opportunity]="data.opportunity"
94661
+ [viewMode]="data.viewMode"
94662
+ [allStrengths]="funnelStrengths()"
94663
+ [currentModalState]="getCurrentModalState()"
94664
+ />
94665
+ }
94666
+ </symphiq-profile-analysis-modal>
94667
+
94668
+ <!-- Funnel Analysis Modal (for insights and metrics from profile goals) -->
94669
+ <symphiq-funnel-analysis-modal
94670
+ [isLightMode]="isLightMode()"
94671
+ [viewMode]="viewMode()"
94672
+ [allMetrics]="allMetrics()"
94673
+ [allInsights]="allInsights()"
94674
+ [allCharts]="allCharts()"
94675
+ />
94676
+
94677
+ <!-- Business Analysis Modal (for napkin visuals and other content) -->
94678
+ <symphiq-business-analysis-modal [isLightMode]="isLightMode()"/>
94679
+
94680
+ <!-- Tooltip Container -->
94681
+ <symphiq-tooltip-container/>
94682
+
94683
+ <!-- Sticky Continue Button (Only shown when not subscribed and no currency selected) -->
94684
+ @if (!isSubscriptionActive() && !hasBillingCurrency() && isSimplifiedView() && !isFocusAreaAnalysis() && !isMetricAnalysis()) {
94685
+ <symphiq-sticky-subscription-continue-button
94686
+ [viewMode]="viewMode()"
94687
+ [isEnabled]="hasCurrencySelected()"
94688
+ [isLoading]="isCurrencySelectionLoading()"
94689
+ (continueClick)="handleStickyButtonClick()"
94690
+ />
94691
+ }
94692
+
94693
+ <!-- Shop Profile Sticky Footer -->
94694
+ @if (shouldShowShopProfileStickyFooter()) {
94695
+ <symphiq-shop-profile-sticky-footer
94696
+ [viewMode]="viewMode()"
94697
+ [totalQuestions]="totalShopQuestions()"
94698
+ [answeredQuestions]="answeredShopQuestions()"
94699
+ (continueClick)="handleShopProfileContinueClick()"
94700
+ />
94701
+ }
94702
+
94703
+ <!-- Sticky Footer for Edit Currency Mode -->
94704
+ @if (isEditingCurrency()) {
94705
+ <div
94706
+ [ngClass]="getEditCurrencyFooterClasses()"
94707
+ class="fixed bottom-0 left-0 right-0 z-50 border-t backdrop-blur-lg"
94708
+ >
94709
+ <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-4">
94710
+ <div class="flex items-center gap-4">
94711
+ <button
94712
+ (click)="handleCancelCurrencyEdit()"
94713
+ [ngClass]="getEditCurrencyCancelButtonClasses()"
94714
+ class="px-6 py-4 rounded-xl font-semibold text-lg transition-all duration-300 cursor-pointer"
94715
+ >
94716
+ Cancel
94717
+ </button>
94718
+ <button
94719
+ (click)="handleContinueToPlans()"
94720
+ [disabled]="!editingCurrencySelection()"
94721
+ [ngClass]="getEditCurrencyContinueButtonClasses()"
94722
+ class="flex-1 px-6 py-4 rounded-xl font-semibold text-lg transition-all duration-300 flex items-center justify-center gap-3 shadow-2xl"
94723
+ >
94724
+ <span>Continue to Plans</span>
94725
+ <svg class="w-6 h-6 transition-transform duration-200"
94726
+ [class.translate-x-1]="editingCurrencySelection()" fill="none" stroke="currentColor"
94727
+ viewBox="0 0 24 24">
94728
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
94729
+ d="M13 7l5 5m0 0l-5 5m5-5H6"></path>
94730
+ </svg>
94731
+ </button>
94732
+ </div>
94733
+ </div>
94734
+ </div>
94735
+ }
94736
+ </div>
94671
94737
  `
94672
94738
  }]
94673
94739
  }], () => [], { funnelModalComponent: [{
@@ -94680,7 +94746,7 @@ class SymphiqProfileAnalysisDashboardComponent {
94680
94746
  type: HostListener,
94681
94747
  args: ['window:scroll', ['$event']]
94682
94748
  }] }); })();
94683
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SymphiqProfileAnalysisDashboardComponent, { className: "SymphiqProfileAnalysisDashboardComponent", filePath: "lib/components/profile-analysis-dashboard/symphiq-profile-analysis-dashboard.component.ts", lineNumber: 781 }); })();
94749
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SymphiqProfileAnalysisDashboardComponent, { className: "SymphiqProfileAnalysisDashboardComponent", filePath: "lib/components/profile-analysis-dashboard/symphiq-profile-analysis-dashboard.component.ts", lineNumber: 782 }); })();
94684
94750
 
94685
94751
  class ScrollProgressBarComponent {
94686
94752
  constructor() {