@eric-emg/symphiq-components 1.2.40 → 1.2.42

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.
@@ -20743,7 +20743,7 @@ function SymphiqFunnelAnalysisDashboardComponent_Conditional_80_Conditional_29_F
20743
20743
  i0.ɵɵclassMap(ctx_r2.getBentoCardClass(metric_r19, ɵ$index_447_r20));
20744
20744
  i0.ɵɵstyleProp("animation-delay", 0.6 + ɵ$index_438_r21 * 0.15 + ɵ$index_447_r20 * 0.08 + "s");
20745
20745
  i0.ɵɵadvance();
20746
- i0.ɵɵproperty("metric", metric_r19)("insights", ctx_r2.insights())("charts", ctx_r2.chartsForMetric(metric_r19))("allCharts", ctx_r2.allCharts())("analysis", ctx_r2.funnelAnalysis())("isLightMode", ctx_r2.isLightMode())("viewMode", ctx_r2.viewMode())("isCompactMode", false);
20746
+ i0.ɵɵproperty("metric", metric_r19)("insights", ctx_r2.insights())("charts", ctx_r2.chartsForMetric(metric_r19))("allCharts", ctx_r2.allCharts())("analysis", ctx_r2.analysisData())("isLightMode", ctx_r2.isLightMode())("viewMode", ctx_r2.viewMode())("isCompactMode", false);
20747
20747
  } }
20748
20748
  function SymphiqFunnelAnalysisDashboardComponent_Conditional_80_Conditional_29_For_2_Conditional_2_Conditional_0_Template(rf, ctx) { if (rf & 1) {
20749
20749
  i0.ɵɵelementStart(0, "div", 127);
@@ -20765,7 +20765,7 @@ function SymphiqFunnelAnalysisDashboardComponent_Conditional_80_Conditional_29_F
20765
20765
  const ctx_r2 = i0.ɵɵnextContext(3);
20766
20766
  i0.ɵɵstyleProp("animation-delay", 0.6 + ɵ$index_438_r21 * 0.15 + ɵ$index_455_r24 * 0.08 + "s");
20767
20767
  i0.ɵɵadvance();
20768
- i0.ɵɵproperty("metric", metric_r23)("insights", ctx_r2.insights())("charts", ctx_r2.chartsForMetric(metric_r23))("allCharts", ctx_r2.allCharts())("analysis", ctx_r2.funnelAnalysis())("isLightMode", ctx_r2.isLightMode())("viewMode", ctx_r2.viewMode())("isCompactMode", true);
20768
+ i0.ɵɵproperty("metric", metric_r23)("insights", ctx_r2.insights())("charts", ctx_r2.chartsForMetric(metric_r23))("allCharts", ctx_r2.allCharts())("analysis", ctx_r2.analysisData())("isLightMode", ctx_r2.isLightMode())("viewMode", ctx_r2.viewMode())("isCompactMode", true);
20769
20769
  } }
20770
20770
  function SymphiqFunnelAnalysisDashboardComponent_Conditional_80_Conditional_29_For_2_Conditional_2_Conditional_1_Template(rf, ctx) { if (rf & 1) {
20771
20771
  i0.ɵɵelementStart(0, "div", 128);
@@ -20834,7 +20834,7 @@ function SymphiqFunnelAnalysisDashboardComponent_Conditional_80_Conditional_29_F
20834
20834
  i0.ɵɵstyleProp("animation-delay", 0.5 + ɵ$index_438_r21 * 0.15 + "s");
20835
20835
  i0.ɵɵproperty("libSymphiqSearchHighlight", ctx_r2.searchService.highlightedResultId())("highlightId", "metric-" + ɵ$index_438_r21);
20836
20836
  i0.ɵɵadvance();
20837
- i0.ɵɵproperty("metric", funnelGroup_r22.funnelMetric)("insights", ctx_r2.insights())("charts", ctx_r2.chartsForMetric(funnelGroup_r22.funnelMetric))("allCharts", ctx_r2.allCharts())("analysis", ctx_r2.funnelAnalysis())("isLightMode", ctx_r2.isLightMode())("viewMode", ctx_r2.viewMode())("isCompactMode", ctx_r2.viewModeService.isCompact());
20837
+ i0.ɵɵproperty("metric", funnelGroup_r22.funnelMetric)("insights", ctx_r2.insights())("charts", ctx_r2.chartsForMetric(funnelGroup_r22.funnelMetric))("allCharts", ctx_r2.allCharts())("analysis", ctx_r2.analysisData())("isLightMode", ctx_r2.isLightMode())("viewMode", ctx_r2.viewMode())("isCompactMode", ctx_r2.viewModeService.isCompact());
20838
20838
  i0.ɵɵadvance();
20839
20839
  i0.ɵɵconditional(funnelGroup_r22.relatedMetrics.length > 0 ? 2 : -1);
20840
20840
  } }
@@ -21243,10 +21243,11 @@ class SymphiqFunnelAnalysisDashboardComponent {
21243
21243
  // Input signals (Angular 20 signal-based inputs)
21244
21244
  this.requestedByUser = input(...(ngDevMode ? [undefined, { debugName: "requestedByUser" }] : []));
21245
21245
  this.viewMode = input(ViewModeEnum.LIGHT, ...(ngDevMode ? [{ debugName: "viewMode" }] : []));
21246
- this.funnelAnalysis = input(FUNNEL_ANALYSIS, ...(ngDevMode ? [{ debugName: "funnelAnalysis" }] : []));
21246
+ this.funnelAnalysis = input(...(ngDevMode ? [undefined, { debugName: "funnelAnalysis" }] : []));
21247
21247
  this.embedded = input(false, ...(ngDevMode ? [{ debugName: "embedded" }] : []));
21248
21248
  this.scrollContainerId = input(...(ngDevMode ? [undefined, { debugName: "scrollContainerId" }] : []));
21249
21249
  this.isLoading = input(false, ...(ngDevMode ? [{ debugName: "isLoading" }] : []));
21250
+ this.useSampleData = input(false, ...(ngDevMode ? [{ debugName: "useSampleData" }] : []));
21250
21251
  // State signals
21251
21252
  this.selectedCategory = signal('ALL', ...(ngDevMode ? [{ debugName: "selectedCategory" }] : []));
21252
21253
  this.reverseSortOrder = signal(false, ...(ngDevMode ? [{ debugName: "reverseSortOrder" }] : []));
@@ -21289,7 +21290,17 @@ class SymphiqFunnelAnalysisDashboardComponent {
21289
21290
  ];
21290
21291
  // Computed signals (automatically memoized)
21291
21292
  this.isLightMode = computed(() => this.viewMode() === ViewModeEnum.LIGHT, ...(ngDevMode ? [{ debugName: "isLightMode" }] : []));
21292
- this.performanceOverview = computed(() => normalizeToV3(this.funnelAnalysis()?.performanceOverviewStructured), ...(ngDevMode ? [{ debugName: "performanceOverview" }] : []));
21293
+ // Analysis data - use sample data if useSampleData is true, otherwise use provided data
21294
+ this.analysisData = computed(() => {
21295
+ if (this.useSampleData()) {
21296
+ return FUNNEL_ANALYSIS;
21297
+ }
21298
+ return this.funnelAnalysis();
21299
+ }, ...(ngDevMode ? [{ debugName: "analysisData" }] : []));
21300
+ this.performanceOverview = computed(() => {
21301
+ const analysis = this.analysisData();
21302
+ return analysis ? normalizeToV3(analysis.performanceOverviewStructured) : { overallAssessment: {}, insights: [], metrics: [], breakdowns: [], charts: [] };
21303
+ }, ...(ngDevMode ? [{ debugName: "performanceOverview" }] : []));
21293
21304
  // Derived data signals
21294
21305
  this.insights = computed(() => {
21295
21306
  const overview = this.performanceOverview();
@@ -21621,6 +21632,11 @@ class SymphiqFunnelAnalysisDashboardComponent {
21621
21632
  // Manage overall assessment loading state during view mode transitions
21622
21633
  }
21623
21634
  ngAfterViewInit() {
21635
+ console.log('[SCROLL DEBUG] ngAfterViewInit called', {
21636
+ embedded: this.embedded(),
21637
+ scrollContainerId: this.scrollContainerId(),
21638
+ isScrolled: this.isScrolled()
21639
+ });
21624
21640
  // Ensure modal has data after view is initialized
21625
21641
  if (this.modalComponent) {
21626
21642
  this.modalComponent.setMetricsAndInsights(this.allMetrics(), this.insights(), this.allCharts());
@@ -21632,6 +21648,11 @@ class SymphiqFunnelAnalysisDashboardComponent {
21632
21648
  if (this.scrollContainerId()) {
21633
21649
  const setupScrollContainer = () => {
21634
21650
  const element = document.getElementById(this.scrollContainerId());
21651
+ console.log('[SCROLL DEBUG] setupScrollContainer attempt', {
21652
+ scrollContainerId: this.scrollContainerId(),
21653
+ elementFound: !!element,
21654
+ elementTag: element?.tagName
21655
+ });
21635
21656
  if (!element) {
21636
21657
  return false;
21637
21658
  }
@@ -21641,9 +21662,64 @@ class SymphiqFunnelAnalysisDashboardComponent {
21641
21662
  // Get the scrollable element from Ionic
21642
21663
  if (typeof ionContent.getScrollElement === 'function') {
21643
21664
  ionContent.getScrollElement().then((scrollElement) => {
21665
+ console.log('[SCROLL DEBUG] Ionic scroll element found', {
21666
+ scrollTop: scrollElement.scrollTop,
21667
+ scrollHeight: scrollElement.scrollHeight,
21668
+ clientHeight: scrollElement.clientHeight
21669
+ });
21644
21670
  // Store reference for use in scrollToSection and tooltips
21645
21671
  this.embeddedScrollContainer = scrollElement;
21646
21672
  this.tooltipService.setScrollContainer(scrollElement);
21673
+ // Helper function to check and update scroll state
21674
+ const checkInitialScroll = () => {
21675
+ const currentScrollTop = scrollElement.scrollTop;
21676
+ const scrollHeight = scrollElement.scrollHeight;
21677
+ const clientHeight = scrollElement.clientHeight;
21678
+ console.log('[SCROLL DEBUG] Checking initial scroll position', {
21679
+ scrollTop: currentScrollTop,
21680
+ scrollHeight,
21681
+ clientHeight,
21682
+ shouldCollapse: currentScrollTop > 50
21683
+ });
21684
+ if (currentScrollTop > 50) {
21685
+ console.log('[SCROLL DEBUG] Collapsing header due to scroll position', { currentScrollTop });
21686
+ this.isScrolled.set(true);
21687
+ }
21688
+ else {
21689
+ console.log('[SCROLL DEBUG] Expanding header due to scroll position', { currentScrollTop });
21690
+ this.isScrolled.set(false);
21691
+ }
21692
+ };
21693
+ // Use ResizeObserver to detect when content has finished rendering
21694
+ let lastHeight = scrollElement.scrollHeight;
21695
+ let stableCount = 0;
21696
+ const resizeObserver = new ResizeObserver(() => {
21697
+ const currentHeight = scrollElement.scrollHeight;
21698
+ console.log('[SCROLL DEBUG] Content height changed', {
21699
+ lastHeight,
21700
+ currentHeight,
21701
+ stableCount
21702
+ });
21703
+ if (currentHeight === lastHeight) {
21704
+ stableCount++;
21705
+ // Height has been stable for 2 consecutive observations
21706
+ if (stableCount >= 2) {
21707
+ console.log('[SCROLL DEBUG] Content height stabilized, checking scroll position');
21708
+ checkInitialScroll();
21709
+ resizeObserver.disconnect();
21710
+ }
21711
+ }
21712
+ else {
21713
+ stableCount = 0;
21714
+ lastHeight = currentHeight;
21715
+ // Check on each significant height change
21716
+ checkInitialScroll();
21717
+ }
21718
+ });
21719
+ // Observe the scroll element for size changes
21720
+ resizeObserver.observe(scrollElement);
21721
+ // Also check immediately
21722
+ checkInitialScroll();
21647
21723
  // Attach scroll listeners
21648
21724
  scrollElement.addEventListener('scroll', () => this.onContainerScroll(scrollElement), { passive: true });
21649
21725
  ionContent.addEventListener('ionScroll', () => this.onContainerScroll(scrollElement), { passive: true });
@@ -21665,16 +21741,106 @@ class SymphiqFunnelAnalysisDashboardComponent {
21665
21741
  }
21666
21742
  else {
21667
21743
  // Fallback for older Ionic versions
21744
+ console.log('[SCROLL DEBUG] Using fallback for older Ionic', {
21745
+ scrollTop: element.scrollTop
21746
+ });
21668
21747
  this.embeddedScrollContainer = element;
21669
21748
  this.tooltipService.setScrollContainer(element);
21749
+ // Helper function to check and update scroll state
21750
+ const checkInitialScroll = () => {
21751
+ const currentScrollTop = element.scrollTop;
21752
+ console.log('[SCROLL DEBUG] Checking initial scroll position (fallback)', {
21753
+ scrollTop: currentScrollTop,
21754
+ shouldCollapse: currentScrollTop > 50
21755
+ });
21756
+ if (currentScrollTop > 50) {
21757
+ console.log('[SCROLL DEBUG] Collapsing header due to scroll position', { currentScrollTop });
21758
+ this.isScrolled.set(true);
21759
+ }
21760
+ else {
21761
+ console.log('[SCROLL DEBUG] Expanding header due to scroll position', { currentScrollTop });
21762
+ this.isScrolled.set(false);
21763
+ }
21764
+ };
21765
+ // Use ResizeObserver to detect when content has finished rendering
21766
+ let lastHeight = element.scrollHeight;
21767
+ let stableCount = 0;
21768
+ const resizeObserver = new ResizeObserver(() => {
21769
+ const currentHeight = element.scrollHeight;
21770
+ console.log('[SCROLL DEBUG] Content height changed (fallback)', {
21771
+ lastHeight,
21772
+ currentHeight,
21773
+ stableCount
21774
+ });
21775
+ if (currentHeight === lastHeight) {
21776
+ stableCount++;
21777
+ if (stableCount >= 2) {
21778
+ console.log('[SCROLL DEBUG] Content height stabilized (fallback), checking scroll position');
21779
+ checkInitialScroll();
21780
+ resizeObserver.disconnect();
21781
+ }
21782
+ }
21783
+ else {
21784
+ stableCount = 0;
21785
+ lastHeight = currentHeight;
21786
+ checkInitialScroll();
21787
+ }
21788
+ });
21789
+ resizeObserver.observe(element);
21790
+ checkInitialScroll();
21670
21791
  element.addEventListener('scroll', () => this.onContainerScroll(element), { passive: true });
21671
21792
  return true;
21672
21793
  }
21673
21794
  }
21674
21795
  else {
21675
21796
  // Regular HTML element
21797
+ console.log('[SCROLL DEBUG] Regular HTML element setup', {
21798
+ scrollTop: element.scrollTop
21799
+ });
21676
21800
  this.embeddedScrollContainer = element;
21677
21801
  this.tooltipService.setScrollContainer(element);
21802
+ // Helper function to check and update scroll state
21803
+ const checkInitialScroll = () => {
21804
+ const currentScrollTop = element.scrollTop;
21805
+ console.log('[SCROLL DEBUG] Checking initial scroll position (regular)', {
21806
+ scrollTop: currentScrollTop,
21807
+ shouldCollapse: currentScrollTop > 50
21808
+ });
21809
+ if (currentScrollTop > 50) {
21810
+ console.log('[SCROLL DEBUG] Collapsing header due to scroll position', { currentScrollTop });
21811
+ this.isScrolled.set(true);
21812
+ }
21813
+ else {
21814
+ console.log('[SCROLL DEBUG] Expanding header due to scroll position', { currentScrollTop });
21815
+ this.isScrolled.set(false);
21816
+ }
21817
+ };
21818
+ // Use ResizeObserver to detect when content has finished rendering
21819
+ let lastHeight = element.scrollHeight;
21820
+ let stableCount = 0;
21821
+ const resizeObserver = new ResizeObserver(() => {
21822
+ const currentHeight = element.scrollHeight;
21823
+ console.log('[SCROLL DEBUG] Content height changed (regular)', {
21824
+ lastHeight,
21825
+ currentHeight,
21826
+ stableCount
21827
+ });
21828
+ if (currentHeight === lastHeight) {
21829
+ stableCount++;
21830
+ if (stableCount >= 2) {
21831
+ console.log('[SCROLL DEBUG] Content height stabilized (regular), checking scroll position');
21832
+ checkInitialScroll();
21833
+ resizeObserver.disconnect();
21834
+ }
21835
+ }
21836
+ else {
21837
+ stableCount = 0;
21838
+ lastHeight = currentHeight;
21839
+ checkInitialScroll();
21840
+ }
21841
+ });
21842
+ resizeObserver.observe(element);
21843
+ checkInitialScroll();
21678
21844
  element.addEventListener('scroll', () => this.onContainerScroll(element), { passive: true });
21679
21845
  return true;
21680
21846
  }
@@ -21914,6 +22080,12 @@ class SymphiqFunnelAnalysisDashboardComponent {
21914
22080
  return;
21915
22081
  }
21916
22082
  const scrollPosition = container.scrollTop;
22083
+ console.log('[SCROLL DEBUG] onContainerScroll', {
22084
+ scrollPosition,
22085
+ isScrolled: this.isScrolled(),
22086
+ isProgrammaticScroll: this.isProgrammaticScroll,
22087
+ lastScrollPosition: this.lastScrollPosition
22088
+ });
21917
22089
  // Update scroll progress for smooth bar animation
21918
22090
  const containerHeight = container.clientHeight;
21919
22091
  const scrollHeight = container.scrollHeight;
@@ -21922,11 +22094,13 @@ class SymphiqFunnelAnalysisDashboardComponent {
21922
22094
  this.scrollProgress.set(Math.min(100, Math.max(0, progress)));
21923
22095
  // Skip header state updates during programmatic scrolling or cooldown
21924
22096
  if (this.isProgrammaticScroll) {
22097
+ console.log('[SCROLL DEBUG] Skipping - programmatic scroll');
21925
22098
  return;
21926
22099
  }
21927
22100
  const now = Date.now();
21928
22101
  const timeSinceLastChange = now - this.lastStateChangeTime;
21929
22102
  if (timeSinceLastChange < this.STATE_CHANGE_COOLDOWN) {
22103
+ console.log('[SCROLL DEBUG] Skipping - within cooldown', { timeSinceLastChange });
21930
22104
  return;
21931
22105
  }
21932
22106
  if (this.scrollTimeout) {
@@ -21939,11 +22113,14 @@ class SymphiqFunnelAnalysisDashboardComponent {
21939
22113
  let newState = currentState;
21940
22114
  if (!currentState && scrollPosition > COLLAPSE_THRESHOLD) {
21941
22115
  newState = true;
22116
+ console.log('[SCROLL DEBUG] Should collapse header', { scrollPosition, COLLAPSE_THRESHOLD });
21942
22117
  }
21943
22118
  else if (currentState && scrollPosition < EXPAND_THRESHOLD) {
21944
22119
  newState = false;
22120
+ console.log('[SCROLL DEBUG] Should expand header', { scrollPosition, EXPAND_THRESHOLD });
21945
22121
  }
21946
22122
  if (newState !== currentState) {
22123
+ console.log('[SCROLL DEBUG] Changing header state', { from: currentState, to: newState });
21947
22124
  this.isScrolled.set(newState);
21948
22125
  this.lastStateChangeTime = Date.now();
21949
22126
  }
@@ -22120,7 +22297,7 @@ class SymphiqFunnelAnalysisDashboardComponent {
22120
22297
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.dashboardContainer = _t.first);
22121
22298
  } }, hostBindings: function SymphiqFunnelAnalysisDashboardComponent_HostBindings(rf, ctx) { if (rf & 1) {
22122
22299
  i0.ɵɵlistener("scroll", function SymphiqFunnelAnalysisDashboardComponent_scroll_HostBindingHandler($event) { return ctx.onScroll($event); }, i0.ɵɵresolveWindow);
22123
- } }, inputs: { requestedByUser: [1, "requestedByUser"], viewMode: [1, "viewMode"], funnelAnalysis: [1, "funnelAnalysis"], embedded: [1, "embedded"], scrollContainerId: [1, "scrollContainerId"], isLoading: [1, "isLoading"] }, decls: 88, vars: 102, consts: [["dashboardContainer", ""], [1, "bg-transparent"], [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, "absolute", "inset-0", 3, "ngClass"], [1, "absolute", "inset-0", "opacity-[0.03]", "z-20", 2, "background-image", "url('data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23000000' fill-opacity='1'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E')"], [1, "absolute", "top-0", "right-0", "w-[800px]", "h-[800px]", "rounded-full", "blur-3xl", "z-0", 3, "ngClass"], [1, "absolute", "bottom-0", "left-0", "w-[600px]", "h-[600px]", "rounded-full", "blur-3xl", "z-0", 3, "ngClass"], [1, "absolute", "top-1/2", "left-1/2", "-translate-x-1/2", "-translate-y-1/2", "w-[700px]", "h-[700px]", "rounded-full", "blur-3xl", "z-0", 3, "ngClass"], [1, "h-full", "transition-all", "duration-200", "ease-out", 3, "ngClass"], [1, "sticky", "top-0", "z-50", "animate-fade-in", 2, "animation-delay", "0s"], [1, "transition-all", "duration-300", "ease-in-out", "overflow-hidden"], [1, "max-w-7xl", "mx-auto", "px-6", "sm:px-8", "py-6", "sm:py-8"], [1, "flex", "flex-col", "sm:flex-row", "items-start", "sm:items-center", "justify-between", "gap-3", "sm:gap-0"], [1, "flex-1"], [1, "flex", "items-center", "gap-3"], [1, "text-2xl", "sm:text-3xl", "font-bold", "mb-2", "bg-gradient-to-r", "from-blue-600", "via-purple-600", "to-indigo-600", "bg-clip-text", "text-transparent"], ["title", "Refreshing data...", 1, "animate-spin", "w-4", "h-4", "border-2", "border-blue-500/30", "border-t-blue-500", "rounded-full"], [1, "flex", "flex-wrap", "items-center", "justify-between", "gap-3", "sm:gap-4"], [1, "text-sm", "sm:text-base"], [1, "flex", "items-center", "gap-4"], ["type", "button", "title", "Search (/ or Cmd+K)", 1, "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"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-4", "h-4"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"], [1, "flex", "items-center", "gap-2"], ["type", "button", 1, "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"], [1, "flex", "items-center", "gap-2", "sm:gap-3", "whitespace-nowrap"], [1, "text-xs", "sm:text-sm", "font-medium"], [3, "click", "mousedown", "pointerdown"], [1, "px-3", "sm:px-4", "py-1.5", "rounded-lg", "text-xs", "sm:text-sm", "font-medium", "focus:outline-none", "focus:ring-2", "focus:ring-blue-500", "focus:border-transparent", "transition-colors", "duration-200", "cursor-pointer", 3, "ngModelChange", "ngModel"], [3, "value"], [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-6", "sm:px-8", "py-3"], [1, "flex", "items-center", "justify-between", "gap-4"], [1, "flex", "items-center", "gap-4", "flex-1", "min-w-0"], [1, "text-lg", "font-bold", "truncate", "bg-gradient-to-r", "from-blue-600", "via-purple-600", "to-indigo-600", "bg-clip-text", "text-transparent"], [1, "hidden", "lg:flex", "items-center", "gap-3", "px-4", "py-1.5", "rounded-lg", 3, "ngClass"], ["type", "button", "title", "Search (/ or Cmd+K)", 1, "p-2", "rounded-lg", "transition-all", "duration-200", "hover:scale-110", 3, "click"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-5", "h-5"], ["type", "button", 1, "p-2", "rounded-lg", "transition-all", "duration-200", "hover:scale-110", 3, "click", "title"], [1, "px-3", "py-1.5", "rounded-lg", "text-xs", "font-medium", "focus:outline-none", "focus:ring-2", "focus:ring-blue-500", "focus:border-transparent", "transition-colors", "duration-200", "cursor-pointer", 3, "ngModelChange", "ngModel"], [1, "sticky", "top-[var(--header-height)]", "z-40", "border-b", "backdrop-blur-md", "animate-slide-up-fade", 3, "ngClass"], [1, "fixed", "right-6", "top-1/2", "-translate-y-1/2", "z-40", "hidden", "xl:flex", "flex-col", "gap-3"], [1, "w-3", "h-3", "rounded-full", "transition-all", "duration-200", "hover:scale-150", "active:scale-100", 3, "title", "ngClass"], [1, "max-w-7xl", "mx-auto", "px-6", "sm:px-8"], [1, "pt-8", "sm:pt-12", "pb-16", "sm:pb-24"], ["id", "overall-section", 1, "animate-fade-in-up", "mb-20", "sm:mb-28", 2, "animation-delay", "0.1s"], [3, "isLightMode"], [3, "resultSelected", "isLightMode"], [3, "expandedChange", "scrollToTop", "toggleView", "isLightMode", "isCompactMode", "isExpanded"], [3, "navigate", "isLightMode", "sections", "activeSection"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M4 6h16M4 12h16M4 18h16"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M4 6a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2H6a2 2 0 01-2-2V6zM14 6a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2h-2a2 2 0 01-2-2V6zM4 16a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2H6a2 2 0 01-2-2v-2zM14 16a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2h-2a2 2 0 01-2-2v-2z"], [1, "text-xs", "font-medium"], [1, "text-sm", "font-bold"], [1, "text-xs", "font-semibold", 3, "ngClass"], [1, "flex", "items-center", "gap-3", "flex-1", "min-w-0"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-5", "h-5", "flex-shrink-0", 3, "ngClass"], [1, "flex", "items-center", "gap-2", "flex-1", "min-w-0"], [1, "text-sm", "font-medium", 3, "ngClass"], [1, "text-sm", "font-semibold", "truncate", 3, "ngClass"], [1, "px-2", "py-0.5", "rounded", "text-xs", "font-medium", "uppercase", "border", "flex-shrink-0", 3, "ngClass"], ["title", "Clear search", 1, "p-2", "rounded-lg", "transition-colors", "flex-shrink-0", 3, "click", "ngClass"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M6 18L18 6M6 6l12 12"], [1, "w-3", "h-3", "rounded-full", "transition-all", "duration-200", "hover:scale-150", "active:scale-100", 3, "click", "title", "ngClass"], [1, "rounded-xl", "border", "p-6", "sm:p-8", "animate-pulse", 3, "ngClass"], [3, "assessment", "revenueMetric", "charts", "metrics", "isLightMode", "isLoading", "isCompactMode", "isChartsLoading"], [1, "space-y-6"], [3, "width", "height", "isLightMode"], [1, "flex-1", "space-y-2"], [1, "space-y-2"], [1, "grid", "grid-cols-1", "md:grid-cols-2", "gap-4", "mt-6"], [1, "relative", "mb-16", "sm:mb-20", "animate-fade-in", 2, "animation-delay", "0.15s"], ["id", "insights-section", 1, "relative"], [1, "absolute", "inset-0", "-mx-6", "sm:-mx-8", "-mt-8", "rounded-3xl", "opacity-30", "backdrop-blur-sm", 2, "mask-image", "radial-gradient(ellipse at center, black 0%, transparent 70%)", 3, "ngClass"], [1, "relative"], [1, "flex", "items-center", "justify-between", "mb-6", "sm:mb-8", "animate-fade-in", 2, "animation-delay", "0.2s"], [1, "pl-4", 3, "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-6", "h-6", 3, "ngClass"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M9.663 17h4.673M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z"], [1, "text-xl", "sm:text-2xl", "font-bold"], [1, "masonry-grid"], [1, "grid", "grid-cols-1", "md:grid-cols-2", "lg:grid-cols-3", "gap-4"], ["aria-hidden", "true", 1, "absolute", "inset-0", "flex", "items-center"], [1, "w-full", "h-px", "bg-gradient-to-r", 3, "ngClass"], [1, "relative", "flex", "justify-center"], [1, "px-4", "py-2", "rounded-full", 3, "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-5", "h-5", 3, "ngClass"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M13 10V3L4 14h7v7l9-11h-7z"], [1, "rounded-xl", "border", "p-6", "animate-pulse", "min-h-[280px]", 3, "ngClass"], [1, "space-y-4"], [1, "flex", "items-center", "gap-3", "mb-4"], [1, "mt-6", "space-y-2"], [1, "flex", "gap-2", "mt-4"], [1, "animate-fade-in-up", 3, "class", "animation-delay", "libSymphiqSearchHighlight", "highlightId"], [1, "animate-fade-in-up", 3, "libSymphiqSearchHighlight", "highlightId"], [3, "insight", "allMetrics", "charts", "allCharts", "isLightMode", "viewMode", "isCompactMode"], [1, "animate-fade-in-up", 3, "animation-delay", "libSymphiqSearchHighlight", "highlightId"], [1, "relative", "mb-14", "sm:mb-24", "mt-24", "sm:mt-32", "animate-fade-in", 2, "animation-delay", "0.35s"], ["id", "metrics-section", 1, "relative"], [1, "absolute", "inset-0", "-mx-6", "sm:-mx-8", "-mt-8", "rounded-3xl", "opacity-30", "backdrop-blur-sm", 2, "mask-image", "radial-gradient(ellipse at top right, black 0%, transparent 70%)", 3, "ngClass"], [1, "flex", "flex-col", "gap-4", "mb-6", "sm:mb-8", "animate-fade-in", 2, "animation-delay", "0.4s"], [1, "flex", "items-center", "justify-between"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"], [1, "hidden", "sm:flex", "gap-2", "sm:gap-3", "items-center", "relative"], [1, "absolute", "-right-2", "top-1/2", "-translate-y-1/2", "z-10"], [1, "px-3", "sm:px-4", "py-2", "rounded-lg", "text-xs", "sm:text-sm", "font-medium", "focus:outline-none", "focus:ring-2", "focus:ring-blue-500", "focus:border-transparent", "transition-all", "duration-200", "cursor-pointer", 3, "ngModelChange", "ngModel"], [1, "px-3", "sm:px-4", "py-2", "rounded-lg", "text-xs", "sm:text-sm", "font-medium", "focus:outline-none", "focus:ring-2", "focus:ring-blue-500", "transition-all", "flex", "items-center", "gap-2", "cursor-pointer", "hover:scale-105", "active:scale-95", 3, "click", "title"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M3 4h13M3 8h9m-9 4h6m4 0l4-4m0 0l4 4m-4-4v12"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M3 4h13M3 8h9m-9 4h9m5-4v12m0 0l-4-4m4 4l4-4"], [1, "sm:hidden", "-mx-6", "px-6"], [1, "flex", "gap-2", "overflow-x-auto", "pb-2", "snap-x", "snap-mandatory", "scrollbar-hide"], [1, "space-y-8", "sm:space-y-10"], [1, "space-y-8", "sm:space-y-10", 3, "animate-content-change", "transition-opacity-slow"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M7 12l3-3 3 3 4-4M8 21l4-4 4 4M3 4h18M4 4h16v12a1 1 0 01-1 1H5a1 1 0 01-1-1V4z"], [1, "w-4", "h-4", "border-2", "border-blue-500/30", "border-t-blue-500", "rounded-full", "animate-spin"], ["disabled", "", 1, "font-semibold", 3, "value"], [1, "px-4", "py-2", "rounded-full", "text-xs", "font-medium", "whitespace-nowrap", "transition-all", "duration-200", "flex-shrink-0", "snap-start", "active:scale-95", 3, "ngClass", "opacity-70"], [1, "px-4", "py-2", "rounded-full", "text-xs", "font-medium", "whitespace-nowrap", "transition-all", "duration-200", "flex-shrink-0", "snap-start", "active:scale-95", 3, "click", "ngClass"], [1, "rounded-xl", "border", "p-6", "animate-pulse", 3, "ngClass"], [1, "flex", "items-center", "justify-between", "mb-4"], [1, "grid", "grid-cols-2", "md:grid-cols-4", "gap-4", "mt-6"], [1, "rounded-xl", "p-12", "border", "text-center", "animate-fade-in", 3, "ngClass"], [1, "w-full", "animate-fade-in-up", 3, "libSymphiqSearchHighlight", "highlightId"], [3, "metric", "insights", "charts", "allCharts", "analysis", "isLightMode", "viewMode", "isCompactMode"], [1, "bento-grid", "mt-4"], [1, "grid", "grid-cols-1", "md:grid-cols-2", "lg:grid-cols-4", "gap-3", "sm:gap-4", "mt-4"], [1, "animate-fade-in-up", 3, "class", "animation-delay"], [1, "animate-fade-in-up"], [1, "h-full", 3, "metric", "insights", "charts", "allCharts", "analysis", "isLightMode", "viewMode", "isCompactMode"], [1, "animate-fade-in-up", 3, "animation-delay"], [1, "rounded-xl", "border", "p-6", "animate-pulse", "min-h-[240px]", 3, "ngClass"], [1, "flex", "items-center", "gap-3", "mt-4"], [1, "mt-4"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-16", "h-16", "mx-auto", "mb-4", 3, "ngClass"], [1, "text-lg", "font-semibold", "mb-2", 3, "ngClass"], [1, "text-sm", 3, "ngClass"], [1, "relative", "mb-16", "sm:mb-20", "mt-28", "sm:mt-36", "animate-fade-in", 2, "animation-delay", "0.65s"], ["id", "breakdowns-section", 1, "relative"], [1, "absolute", "inset-0", "-mx-6", "sm:-mx-8", "-mt-8", "rounded-3xl", "opacity-30", "backdrop-blur-sm", 2, "mask-image", "radial-gradient(ellipse at bottom left, black 0%, transparent 70%)", 3, "ngClass"], [1, "flex", "flex-col", "sm:flex-row", "sm:items-center", "justify-between", "gap-4", "mb-6", "sm:mb-8", "animate-fade-in", 2, "animation-delay", "0.7s"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M4 5a1 1 0 011-1h14a1 1 0 011 1v2a1 1 0 01-1 1H5a1 1 0 01-1-1V5zM4 13a1 1 0 011-1h6a1 1 0 011 1v6a1 1 0 01-1 1H5a1 1 0 01-1-1v-6zM16 13a1 1 1 0 011-1h2a1 1 0 011 1v6a1 1 0 01-1 1h-2a1 1 0 01-1-1v-6z"], [1, "relative", "inline-block", 3, "click", "mousedown", "pointerdown"], [1, "px-3", "py-2", "text-sm", "rounded-lg", "border", "transition-all", "duration-200", "cursor-pointer", "focus:ring-2", "focus:ring-blue-500", "focus:outline-none", 3, "ngModelChange", "ngModel", "ngClass"], [1, "space-y-6", 3, "animate-content-change", "transition-opacity-slow"], [1, "w-4", "h-4", "border-2", "border-purple-500/30", "border-t-purple-500", "rounded-full", "animate-spin"], [1, "space-y-3"], [1, "flex", "items-center", "justify-between", "p-3", "rounded-lg", 3, "ngClass"], [3, "breakdown", "charts", "isLightMode", "isCompactMode"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M4 5a1 1 0 011-1h14a1 1 0 011 1v2a1 1 0 01-1 1H5a1 1 0 01-1-1V5zM4 13a1 1 0 011-1h6a1 1 0 011 1v6a1 1 0 01-1 1H5a1 1 0 01-1-1v-6zM16 13a1 1 0 011-1h2a1 1 0 011 1v6a1 1 0 01-1 1h-2a1 1 0 01-1-1v-6z"], [1, "relative", "mb-16", "sm:mb-20", "mt-28", "sm:mt-36", "animate-fade-in", 2, "animation-delay", "0.85s"], ["id", "competitive-section", 1, "relative"], [1, "flex", "items-center", "justify-between", "mb-6", "sm:mb-8", "animate-fade-in", 2, "animation-delay", "0.9s"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0h5M9 7h1m-1 4h1m4-4h1m-1 4h1m-5 10v-5a1 1 0 011-1h2a1 1 0 011 1v5m-4 0h4"], [1, "hidden", "sm:block", "relative"], [3, "metrics", "allCharts", "isLightMode", "isCompactMode"], [1, "w-4", "h-4", "border-2", "border-indigo-500/30", "border-t-indigo-500", "rounded-full", "animate-spin"], [1, "grid", "grid-cols-1", "md:grid-cols-3", "gap-4", "mt-6"]], template: function SymphiqFunnelAnalysisDashboardComponent_Template(rf, ctx) { if (rf & 1) {
22300
+ } }, inputs: { requestedByUser: [1, "requestedByUser"], viewMode: [1, "viewMode"], funnelAnalysis: [1, "funnelAnalysis"], embedded: [1, "embedded"], scrollContainerId: [1, "scrollContainerId"], isLoading: [1, "isLoading"], useSampleData: [1, "useSampleData"] }, decls: 88, vars: 102, consts: [["dashboardContainer", ""], [1, "bg-transparent"], [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, "absolute", "inset-0", 3, "ngClass"], [1, "absolute", "inset-0", "opacity-[0.03]", "z-20", 2, "background-image", "url('data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23000000' fill-opacity='1'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E')"], [1, "absolute", "top-0", "right-0", "w-[800px]", "h-[800px]", "rounded-full", "blur-3xl", "z-0", 3, "ngClass"], [1, "absolute", "bottom-0", "left-0", "w-[600px]", "h-[600px]", "rounded-full", "blur-3xl", "z-0", 3, "ngClass"], [1, "absolute", "top-1/2", "left-1/2", "-translate-x-1/2", "-translate-y-1/2", "w-[700px]", "h-[700px]", "rounded-full", "blur-3xl", "z-0", 3, "ngClass"], [1, "h-full", "transition-all", "duration-200", "ease-out", 3, "ngClass"], [1, "sticky", "top-0", "z-50", "animate-fade-in", 2, "animation-delay", "0s"], [1, "transition-all", "duration-300", "ease-in-out", "overflow-hidden"], [1, "max-w-7xl", "mx-auto", "px-6", "sm:px-8", "py-6", "sm:py-8"], [1, "flex", "flex-col", "sm:flex-row", "items-start", "sm:items-center", "justify-between", "gap-3", "sm:gap-0"], [1, "flex-1"], [1, "flex", "items-center", "gap-3"], [1, "text-2xl", "sm:text-3xl", "font-bold", "mb-2", "bg-gradient-to-r", "from-blue-600", "via-purple-600", "to-indigo-600", "bg-clip-text", "text-transparent"], ["title", "Refreshing data...", 1, "animate-spin", "w-4", "h-4", "border-2", "border-blue-500/30", "border-t-blue-500", "rounded-full"], [1, "flex", "flex-wrap", "items-center", "justify-between", "gap-3", "sm:gap-4"], [1, "text-sm", "sm:text-base"], [1, "flex", "items-center", "gap-4"], ["type", "button", "title", "Search (/ or Cmd+K)", 1, "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"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-4", "h-4"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"], [1, "flex", "items-center", "gap-2"], ["type", "button", 1, "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"], [1, "flex", "items-center", "gap-2", "sm:gap-3", "whitespace-nowrap"], [1, "text-xs", "sm:text-sm", "font-medium"], [3, "click", "mousedown", "pointerdown"], [1, "px-3", "sm:px-4", "py-1.5", "rounded-lg", "text-xs", "sm:text-sm", "font-medium", "focus:outline-none", "focus:ring-2", "focus:ring-blue-500", "focus:border-transparent", "transition-colors", "duration-200", "cursor-pointer", 3, "ngModelChange", "ngModel"], [3, "value"], [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-6", "sm:px-8", "py-3"], [1, "flex", "items-center", "justify-between", "gap-4"], [1, "flex", "items-center", "gap-4", "flex-1", "min-w-0"], [1, "text-lg", "font-bold", "truncate", "bg-gradient-to-r", "from-blue-600", "via-purple-600", "to-indigo-600", "bg-clip-text", "text-transparent"], [1, "hidden", "lg:flex", "items-center", "gap-3", "px-4", "py-1.5", "rounded-lg", 3, "ngClass"], ["type", "button", "title", "Search (/ or Cmd+K)", 1, "p-2", "rounded-lg", "transition-all", "duration-200", "hover:scale-110", 3, "click"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-5", "h-5"], ["type", "button", 1, "p-2", "rounded-lg", "transition-all", "duration-200", "hover:scale-110", 3, "click", "title"], [1, "px-3", "py-1.5", "rounded-lg", "text-xs", "font-medium", "focus:outline-none", "focus:ring-2", "focus:ring-blue-500", "focus:border-transparent", "transition-colors", "duration-200", "cursor-pointer", 3, "ngModelChange", "ngModel"], [1, "sticky", "top-[var(--header-height)]", "z-40", "border-b", "backdrop-blur-md", "animate-slide-up-fade", 3, "ngClass"], [1, "fixed", "right-6", "top-1/2", "-translate-y-1/2", "z-40", "hidden", "xl:flex", "flex-col", "gap-3"], [1, "w-3", "h-3", "rounded-full", "transition-all", "duration-200", "hover:scale-150", "active:scale-100", 3, "title", "ngClass"], [1, "max-w-7xl", "mx-auto", "px-6", "sm:px-8"], [1, "pt-8", "sm:pt-12", "pb-16", "sm:pb-24"], ["id", "overall-section", 1, "animate-fade-in-up", "mb-20", "sm:mb-28", 2, "animation-delay", "0.1s"], [3, "isLightMode"], [3, "resultSelected", "isLightMode"], [3, "expandedChange", "scrollToTop", "toggleView", "isLightMode", "isCompactMode", "isExpanded"], [3, "navigate", "isLightMode", "sections", "activeSection"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M4 6h16M4 12h16M4 18h16"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M4 6a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2H6a2 2 0 01-2-2V6zM14 6a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2h-2a2 2 0 01-2-2V6zM4 16a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2H6a2 2 0 01-2-2v-2zM14 16a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2h-2a2 2 0 01-2-2v-2z"], [1, "text-xs", "font-medium"], [1, "text-sm", "font-bold"], [1, "text-xs", "font-semibold", 3, "ngClass"], [1, "flex", "items-center", "gap-3", "flex-1", "min-w-0"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-5", "h-5", "flex-shrink-0", 3, "ngClass"], [1, "flex", "items-center", "gap-2", "flex-1", "min-w-0"], [1, "text-sm", "font-medium", 3, "ngClass"], [1, "text-sm", "font-semibold", "truncate", 3, "ngClass"], [1, "px-2", "py-0.5", "rounded", "text-xs", "font-medium", "uppercase", "border", "flex-shrink-0", 3, "ngClass"], ["title", "Clear search", 1, "p-2", "rounded-lg", "transition-colors", "flex-shrink-0", 3, "click", "ngClass"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M6 18L18 6M6 6l12 12"], [1, "w-3", "h-3", "rounded-full", "transition-all", "duration-200", "hover:scale-150", "active:scale-100", 3, "click", "title", "ngClass"], [1, "rounded-xl", "border", "p-6", "sm:p-8", "animate-pulse", 3, "ngClass"], [3, "assessment", "revenueMetric", "charts", "metrics", "isLightMode", "isLoading", "isCompactMode", "isChartsLoading"], [1, "space-y-6"], [3, "width", "height", "isLightMode"], [1, "flex-1", "space-y-2"], [1, "space-y-2"], [1, "grid", "grid-cols-1", "md:grid-cols-2", "gap-4", "mt-6"], [1, "relative", "mb-16", "sm:mb-20", "animate-fade-in", 2, "animation-delay", "0.15s"], ["id", "insights-section", 1, "relative"], [1, "absolute", "inset-0", "-mx-6", "sm:-mx-8", "-mt-8", "rounded-3xl", "opacity-30", "backdrop-blur-sm", 2, "mask-image", "radial-gradient(ellipse at center, black 0%, transparent 70%)", 3, "ngClass"], [1, "relative"], [1, "flex", "items-center", "justify-between", "mb-6", "sm:mb-8", "animate-fade-in", 2, "animation-delay", "0.2s"], [1, "pl-4", 3, "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-6", "h-6", 3, "ngClass"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M9.663 17h4.673M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z"], [1, "text-xl", "sm:text-2xl", "font-bold"], [1, "masonry-grid"], [1, "grid", "grid-cols-1", "md:grid-cols-2", "lg:grid-cols-3", "gap-4"], ["aria-hidden", "true", 1, "absolute", "inset-0", "flex", "items-center"], [1, "w-full", "h-px", "bg-gradient-to-r", 3, "ngClass"], [1, "relative", "flex", "justify-center"], [1, "px-4", "py-2", "rounded-full", 3, "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-5", "h-5", 3, "ngClass"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M13 10V3L4 14h7v7l9-11h-7z"], [1, "rounded-xl", "border", "p-6", "animate-pulse", "min-h-[280px]", 3, "ngClass"], [1, "space-y-4"], [1, "flex", "items-center", "gap-3", "mb-4"], [1, "mt-6", "space-y-2"], [1, "flex", "gap-2", "mt-4"], [1, "animate-fade-in-up", 3, "class", "animation-delay", "libSymphiqSearchHighlight", "highlightId"], [1, "animate-fade-in-up", 3, "libSymphiqSearchHighlight", "highlightId"], [3, "insight", "allMetrics", "charts", "allCharts", "isLightMode", "viewMode", "isCompactMode"], [1, "animate-fade-in-up", 3, "animation-delay", "libSymphiqSearchHighlight", "highlightId"], [1, "relative", "mb-14", "sm:mb-24", "mt-24", "sm:mt-32", "animate-fade-in", 2, "animation-delay", "0.35s"], ["id", "metrics-section", 1, "relative"], [1, "absolute", "inset-0", "-mx-6", "sm:-mx-8", "-mt-8", "rounded-3xl", "opacity-30", "backdrop-blur-sm", 2, "mask-image", "radial-gradient(ellipse at top right, black 0%, transparent 70%)", 3, "ngClass"], [1, "flex", "flex-col", "gap-4", "mb-6", "sm:mb-8", "animate-fade-in", 2, "animation-delay", "0.4s"], [1, "flex", "items-center", "justify-between"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"], [1, "hidden", "sm:flex", "gap-2", "sm:gap-3", "items-center", "relative"], [1, "absolute", "-right-2", "top-1/2", "-translate-y-1/2", "z-10"], [1, "px-3", "sm:px-4", "py-2", "rounded-lg", "text-xs", "sm:text-sm", "font-medium", "focus:outline-none", "focus:ring-2", "focus:ring-blue-500", "focus:border-transparent", "transition-all", "duration-200", "cursor-pointer", 3, "ngModelChange", "ngModel"], [1, "px-3", "sm:px-4", "py-2", "rounded-lg", "text-xs", "sm:text-sm", "font-medium", "focus:outline-none", "focus:ring-2", "focus:ring-blue-500", "transition-all", "flex", "items-center", "gap-2", "cursor-pointer", "hover:scale-105", "active:scale-95", 3, "click", "title"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M3 4h13M3 8h9m-9 4h6m4 0l4-4m0 0l4 4m-4-4v12"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M3 4h13M3 8h9m-9 4h9m5-4v12m0 0l-4-4m4 4l4-4"], [1, "sm:hidden", "-mx-6", "px-6"], [1, "flex", "gap-2", "overflow-x-auto", "pb-2", "snap-x", "snap-mandatory", "scrollbar-hide"], [1, "space-y-8", "sm:space-y-10"], [1, "space-y-8", "sm:space-y-10", 3, "animate-content-change", "transition-opacity-slow"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M7 12l3-3 3 3 4-4M8 21l4-4 4 4M3 4h18M4 4h16v12a1 1 0 01-1 1H5a1 1 0 01-1-1V4z"], [1, "w-4", "h-4", "border-2", "border-blue-500/30", "border-t-blue-500", "rounded-full", "animate-spin"], ["disabled", "", 1, "font-semibold", 3, "value"], [1, "px-4", "py-2", "rounded-full", "text-xs", "font-medium", "whitespace-nowrap", "transition-all", "duration-200", "flex-shrink-0", "snap-start", "active:scale-95", 3, "ngClass", "opacity-70"], [1, "px-4", "py-2", "rounded-full", "text-xs", "font-medium", "whitespace-nowrap", "transition-all", "duration-200", "flex-shrink-0", "snap-start", "active:scale-95", 3, "click", "ngClass"], [1, "rounded-xl", "border", "p-6", "animate-pulse", 3, "ngClass"], [1, "flex", "items-center", "justify-between", "mb-4"], [1, "grid", "grid-cols-2", "md:grid-cols-4", "gap-4", "mt-6"], [1, "rounded-xl", "p-12", "border", "text-center", "animate-fade-in", 3, "ngClass"], [1, "w-full", "animate-fade-in-up", 3, "libSymphiqSearchHighlight", "highlightId"], [3, "metric", "insights", "charts", "allCharts", "analysis", "isLightMode", "viewMode", "isCompactMode"], [1, "bento-grid", "mt-4"], [1, "grid", "grid-cols-1", "md:grid-cols-2", "lg:grid-cols-4", "gap-3", "sm:gap-4", "mt-4"], [1, "animate-fade-in-up", 3, "class", "animation-delay"], [1, "animate-fade-in-up"], [1, "h-full", 3, "metric", "insights", "charts", "allCharts", "analysis", "isLightMode", "viewMode", "isCompactMode"], [1, "animate-fade-in-up", 3, "animation-delay"], [1, "rounded-xl", "border", "p-6", "animate-pulse", "min-h-[240px]", 3, "ngClass"], [1, "flex", "items-center", "gap-3", "mt-4"], [1, "mt-4"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-16", "h-16", "mx-auto", "mb-4", 3, "ngClass"], [1, "text-lg", "font-semibold", "mb-2", 3, "ngClass"], [1, "text-sm", 3, "ngClass"], [1, "relative", "mb-16", "sm:mb-20", "mt-28", "sm:mt-36", "animate-fade-in", 2, "animation-delay", "0.65s"], ["id", "breakdowns-section", 1, "relative"], [1, "absolute", "inset-0", "-mx-6", "sm:-mx-8", "-mt-8", "rounded-3xl", "opacity-30", "backdrop-blur-sm", 2, "mask-image", "radial-gradient(ellipse at bottom left, black 0%, transparent 70%)", 3, "ngClass"], [1, "flex", "flex-col", "sm:flex-row", "sm:items-center", "justify-between", "gap-4", "mb-6", "sm:mb-8", "animate-fade-in", 2, "animation-delay", "0.7s"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M4 5a1 1 0 011-1h14a1 1 0 011 1v2a1 1 0 01-1 1H5a1 1 0 01-1-1V5zM4 13a1 1 0 011-1h6a1 1 0 011 1v6a1 1 0 01-1 1H5a1 1 0 01-1-1v-6zM16 13a1 1 1 0 011-1h2a1 1 0 011 1v6a1 1 0 01-1 1h-2a1 1 0 01-1-1v-6z"], [1, "relative", "inline-block", 3, "click", "mousedown", "pointerdown"], [1, "px-3", "py-2", "text-sm", "rounded-lg", "border", "transition-all", "duration-200", "cursor-pointer", "focus:ring-2", "focus:ring-blue-500", "focus:outline-none", 3, "ngModelChange", "ngModel", "ngClass"], [1, "space-y-6", 3, "animate-content-change", "transition-opacity-slow"], [1, "w-4", "h-4", "border-2", "border-purple-500/30", "border-t-purple-500", "rounded-full", "animate-spin"], [1, "space-y-3"], [1, "flex", "items-center", "justify-between", "p-3", "rounded-lg", 3, "ngClass"], [3, "breakdown", "charts", "isLightMode", "isCompactMode"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M4 5a1 1 0 011-1h14a1 1 0 011 1v2a1 1 0 01-1 1H5a1 1 0 01-1-1V5zM4 13a1 1 0 011-1h6a1 1 0 011 1v6a1 1 0 01-1 1H5a1 1 0 01-1-1v-6zM16 13a1 1 0 011-1h2a1 1 0 011 1v6a1 1 0 01-1 1h-2a1 1 0 01-1-1v-6z"], [1, "relative", "mb-16", "sm:mb-20", "mt-28", "sm:mt-36", "animate-fade-in", 2, "animation-delay", "0.85s"], ["id", "competitive-section", 1, "relative"], [1, "flex", "items-center", "justify-between", "mb-6", "sm:mb-8", "animate-fade-in", 2, "animation-delay", "0.9s"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0h5M9 7h1m-1 4h1m4-4h1m-1 4h1m-5 10v-5a1 1 0 011-1h2a1 1 0 011 1v5m-4 0h4"], [1, "hidden", "sm:block", "relative"], [3, "metrics", "allCharts", "isLightMode", "isCompactMode"], [1, "w-4", "h-4", "border-2", "border-indigo-500/30", "border-t-indigo-500", "rounded-full", "animate-spin"], [1, "grid", "grid-cols-1", "md:grid-cols-3", "gap-4", "mt-6"]], template: function SymphiqFunnelAnalysisDashboardComponent_Template(rf, ctx) { if (rf & 1) {
22124
22301
  const _r1 = i0.ɵɵgetCurrentView();
22125
22302
  i0.ɵɵelementStart(0, "div", 1, 0);
22126
22303
  i0.ɵɵelement(2, "div", 2);
@@ -22250,7 +22427,7 @@ class SymphiqFunnelAnalysisDashboardComponent {
22250
22427
  i0.ɵɵadvance();
22251
22428
  i0.ɵɵclassProp("pointer-events-none", ctx.isScrolled())("pointer-events-auto", !ctx.isScrolled());
22252
22429
  i0.ɵɵadvance(5);
22253
- i0.ɵɵtextInterpolate((tmp_21_0 = ctx.funnelAnalysis()) == null ? null : tmp_21_0.title);
22430
+ i0.ɵɵtextInterpolate((tmp_21_0 = ctx.analysisData()) == null ? null : tmp_21_0.title);
22254
22431
  i0.ɵɵadvance();
22255
22432
  i0.ɵɵconditional(ctx.isLoading() && !ctx.isShowingLoader() ? 19 : -1);
22256
22433
  i0.ɵɵadvance(2);
@@ -22285,7 +22462,7 @@ class SymphiqFunnelAnalysisDashboardComponent {
22285
22462
  i0.ɵɵadvance();
22286
22463
  i0.ɵɵclassProp("pointer-events-none", !ctx.isScrolled())("pointer-events-auto", ctx.isScrolled());
22287
22464
  i0.ɵɵadvance(4);
22288
- i0.ɵɵtextInterpolate((tmp_43_0 = ctx.funnelAnalysis()) == null ? null : tmp_43_0.title);
22465
+ i0.ɵɵtextInterpolate((tmp_43_0 = ctx.analysisData()) == null ? null : tmp_43_0.title);
22289
22466
  i0.ɵɵadvance();
22290
22467
  i0.ɵɵconditional(ctx.revenueMetric() ? 57 : -1);
22291
22468
  i0.ɵɵadvance(2);
@@ -22431,7 +22608,7 @@ class SymphiqFunnelAnalysisDashboardComponent {
22431
22608
  <div class="flex flex-col sm:flex-row items-start sm:items-center justify-between gap-3 sm:gap-0">
22432
22609
  <div class="flex-1">
22433
22610
  <div class="flex items-center gap-3">
22434
- <h1 class="text-2xl sm:text-3xl font-bold mb-2 bg-gradient-to-r from-blue-600 via-purple-600 to-indigo-600 bg-clip-text text-transparent">{{funnelAnalysis()?.title}}</h1>
22611
+ <h1 class="text-2xl sm:text-3xl font-bold mb-2 bg-gradient-to-r from-blue-600 via-purple-600 to-indigo-600 bg-clip-text text-transparent">{{analysisData()?.title}}</h1>
22435
22612
  @if (isLoading() && !isShowingLoader()) {
22436
22613
  <!-- Subtle refresh indicator -->
22437
22614
  <div class="animate-spin w-4 h-4 border-2 border-blue-500/30 border-t-blue-500 rounded-full" title="Refreshing data..."></div>
@@ -22516,7 +22693,7 @@ class SymphiqFunnelAnalysisDashboardComponent {
22516
22693
  [class.pointer-events-auto]="isScrolled()">
22517
22694
  <div class="flex items-center justify-between gap-4">
22518
22695
  <div class="flex items-center gap-4 flex-1 min-w-0">
22519
- <h1 class="text-lg font-bold truncate bg-gradient-to-r from-blue-600 via-purple-600 to-indigo-600 bg-clip-text text-transparent">{{funnelAnalysis()?.title}}</h1>
22696
+ <h1 class="text-lg font-bold truncate bg-gradient-to-r from-blue-600 via-purple-600 to-indigo-600 bg-clip-text text-transparent">{{analysisData()?.title}}</h1>
22520
22697
  @if (revenueMetric()) {
22521
22698
  <div class="hidden lg:flex items-center gap-3 px-4 py-1.5 rounded-lg" [ngClass]="isLightMode() ? 'bg-emerald-50 border border-emerald-200' : 'bg-emerald-500/10 border border-emerald-500/20'">
22522
22699
  <span [class]="metaLabelClass()" class="text-xs font-medium">Revenue:</span>
@@ -22919,7 +23096,7 @@ class SymphiqFunnelAnalysisDashboardComponent {
22919
23096
  [insights]="insights()"
22920
23097
  [charts]="chartsForMetric(funnelGroup.funnelMetric)"
22921
23098
  [allCharts]="allCharts()"
22922
- [analysis]="funnelAnalysis()"
23099
+ [analysis]="analysisData()"
22923
23100
  [isLightMode]="isLightMode()"
22924
23101
  [viewMode]="viewMode()"
22925
23102
  [isCompactMode]="viewModeService.isCompact()" />
@@ -22939,7 +23116,7 @@ class SymphiqFunnelAnalysisDashboardComponent {
22939
23116
  [insights]="insights()"
22940
23117
  [charts]="chartsForMetric(metric)"
22941
23118
  [allCharts]="allCharts()"
22942
- [analysis]="funnelAnalysis()"
23119
+ [analysis]="analysisData()"
22943
23120
  [isLightMode]="isLightMode()"
22944
23121
  [viewMode]="viewMode()"
22945
23122
  [isCompactMode]="false" />
@@ -22956,7 +23133,7 @@ class SymphiqFunnelAnalysisDashboardComponent {
22956
23133
  [insights]="insights()"
22957
23134
  [charts]="chartsForMetric(metric)"
22958
23135
  [allCharts]="allCharts()"
22959
- [analysis]="funnelAnalysis()"
23136
+ [analysis]="analysisData()"
22960
23137
  [isLightMode]="isLightMode()"
22961
23138
  [viewMode]="viewMode()"
22962
23139
  [isCompactMode]="true" />
@@ -23217,7 +23394,7 @@ class SymphiqFunnelAnalysisDashboardComponent {
23217
23394
  }], dashboardContainer: [{
23218
23395
  type: ViewChild,
23219
23396
  args: ['dashboardContainer', { static: false }]
23220
- }], requestedByUser: [{ type: i0.Input, args: [{ isSignal: true, alias: "requestedByUser", required: false }] }], viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], funnelAnalysis: [{ type: i0.Input, args: [{ isSignal: true, alias: "funnelAnalysis", required: false }] }], embedded: [{ type: i0.Input, args: [{ isSignal: true, alias: "embedded", required: false }] }], scrollContainerId: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollContainerId", required: false }] }], isLoading: [{ type: i0.Input, args: [{ isSignal: true, alias: "isLoading", required: false }] }], onScroll: [{
23397
+ }], requestedByUser: [{ type: i0.Input, args: [{ isSignal: true, alias: "requestedByUser", required: false }] }], viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], funnelAnalysis: [{ type: i0.Input, args: [{ isSignal: true, alias: "funnelAnalysis", required: false }] }], embedded: [{ type: i0.Input, args: [{ isSignal: true, alias: "embedded", required: false }] }], scrollContainerId: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollContainerId", required: false }] }], isLoading: [{ type: i0.Input, args: [{ isSignal: true, alias: "isLoading", required: false }] }], useSampleData: [{ type: i0.Input, args: [{ isSignal: true, alias: "useSampleData", required: false }] }], onScroll: [{
23221
23398
  type: HostListener,
23222
23399
  args: ['window:scroll', ['$event']]
23223
23400
  }] }); })();
@@ -23619,20 +23796,30 @@ function SymphiqFunnelAnalysisPreviewComponent_Conditional_24_Template(rf, ctx)
23619
23796
  class SymphiqFunnelAnalysisPreviewComponent {
23620
23797
  constructor() {
23621
23798
  // Inputs
23622
- this.analysisInput = input.required(...(ngDevMode ? [{ debugName: "analysisInput", alias: 'funnelAnalysis' }] : [{ alias: 'funnelAnalysis' }]));
23799
+ this.analysisInput = input(undefined, ...(ngDevMode ? [{ debugName: "analysisInput", alias: 'funnelAnalysis' }] : [{ alias: 'funnelAnalysis' }]));
23623
23800
  this.viewMode = input(ViewModeEnum.LIGHT, ...(ngDevMode ? [{ debugName: "viewMode" }] : []));
23801
+ this.useSampleData = input(false, ...(ngDevMode ? [{ debugName: "useSampleData" }] : []));
23802
+ this.scrollContainerId = input(undefined, ...(ngDevMode ? [{ debugName: "scrollContainerId" }] : []));
23624
23803
  // Computed theme
23625
23804
  this.isLightMode = computed(() => this.viewMode() === ViewModeEnum.LIGHT, ...(ngDevMode ? [{ debugName: "isLightMode" }] : []));
23626
23805
  // Outputs
23627
23806
  this.onViewAnalysis = output();
23628
23807
  // Services
23629
23808
  this.tooltipDataService = inject(TooltipDataService);
23809
+ this.tooltipService = inject(TooltipService);
23630
23810
  this.competitiveScoreService = inject(CompetitiveScoreService);
23811
+ // Analysis data - use sample data if useSampleData is true, otherwise use provided data
23812
+ this.analysisData = computed(() => {
23813
+ if (this.useSampleData()) {
23814
+ return FUNNEL_ANALYSIS;
23815
+ }
23816
+ return this.analysisInput();
23817
+ }, ...(ngDevMode ? [{ debugName: "analysisData" }] : []));
23631
23818
  // Normalized analysis data
23632
- this.title = computed(() => this.analysisInput()?.title || '', ...(ngDevMode ? [{ debugName: "title" }] : []));
23819
+ this.title = computed(() => this.analysisData()?.title || '', ...(ngDevMode ? [{ debugName: "title" }] : []));
23633
23820
  this.analysis = computed(() => {
23634
- const rawAnalysis = this.analysisInput();
23635
- return normalizeToV3(rawAnalysis?.performanceOverviewStructured);
23821
+ const rawAnalysis = this.analysisData();
23822
+ return rawAnalysis ? normalizeToV3(rawAnalysis.performanceOverviewStructured) : { overallAssessment: {}, insights: [], metrics: [], breakdowns: [], charts: [] };
23636
23823
  }, ...(ngDevMode ? [{ debugName: "analysis" }] : []));
23637
23824
  this.overallAssessment = computed(() => this.analysis().overallAssessment || {}, ...(ngDevMode ? [{ debugName: "overallAssessment" }] : []));
23638
23825
  this.metrics = computed(() => this.analysis().metrics || [], ...(ngDevMode ? [{ debugName: "metrics" }] : []));
@@ -23829,6 +24016,60 @@ class SymphiqFunnelAnalysisPreviewComponent {
23829
24016
  }, ...(ngDevMode ? [{ debugName: "statusIconClass" }] : []));
23830
24017
  this.insightsCardClass = computed(() => getInsightsCardClasses(this.viewMode()), ...(ngDevMode ? [{ debugName: "insightsCardClass" }] : []));
23831
24018
  this.insightsBadgeClass = computed(() => getInsightsBadgeClasses(this.viewMode()), ...(ngDevMode ? [{ debugName: "insightsBadgeClass" }] : []));
24019
+ // Set up scroll container for tooltips when scrollContainerId changes
24020
+ effect(() => {
24021
+ const containerId = this.scrollContainerId();
24022
+ if (containerId) {
24023
+ const setupTooltipScrollContainer = () => {
24024
+ const element = document.getElementById(containerId);
24025
+ if (!element) {
24026
+ return false;
24027
+ }
24028
+ // Check if this is an Ionic ion-content element
24029
+ if (element.tagName.toLowerCase() === 'ion-content') {
24030
+ const ionContent = element;
24031
+ // Get the scrollable element from Ionic
24032
+ if (typeof ionContent.getScrollElement === 'function') {
24033
+ ionContent.getScrollElement().then((scrollElement) => {
24034
+ this.tooltipService.setScrollContainer(scrollElement);
24035
+ }).catch((error) => {
24036
+ console.error('Error getting Ionic scroll element for tooltips:', error);
24037
+ });
24038
+ return true;
24039
+ }
24040
+ else {
24041
+ // Fallback for older Ionic versions
24042
+ this.tooltipService.setScrollContainer(element);
24043
+ return true;
24044
+ }
24045
+ }
24046
+ else {
24047
+ // Regular HTML element
24048
+ this.tooltipService.setScrollContainer(element);
24049
+ return true;
24050
+ }
24051
+ };
24052
+ // Try to set up immediately
24053
+ if (!setupTooltipScrollContainer()) {
24054
+ // If not found, retry with delays (element might not be in DOM yet)
24055
+ let retries = 0;
24056
+ const maxRetries = 10;
24057
+ const retryInterval = setInterval(() => {
24058
+ retries++;
24059
+ if (setupTooltipScrollContainer() || retries >= maxRetries) {
24060
+ clearInterval(retryInterval);
24061
+ if (retries >= maxRetries) {
24062
+ console.warn(`Tooltip scroll container with id "${containerId}" not found after ${maxRetries} retries.`);
24063
+ }
24064
+ }
24065
+ }, 100);
24066
+ }
24067
+ }
24068
+ else {
24069
+ // No scroll container specified, reset to null (use window)
24070
+ this.tooltipService.setScrollContainer(null);
24071
+ }
24072
+ });
23832
24073
  }
23833
24074
  // Helper methods for metrics
23834
24075
  metricMiniCardClass(metric) {
@@ -23919,8 +24160,8 @@ class SymphiqFunnelAnalysisPreviewComponent {
23919
24160
  extractChartData(performanceItemId) {
23920
24161
  if (!performanceItemId)
23921
24162
  return undefined;
23922
- const analysis = this.analysisInput();
23923
- const charts = analysis.performanceOverviewStructured?.charts || [];
24163
+ const analysis = this.analysisData();
24164
+ const charts = analysis?.performanceOverviewStructured?.charts || [];
23924
24165
  const chart = charts.find((c) => c.performanceItemId === performanceItemId && c.areaChartData);
23925
24166
  if (!chart || !chart.areaChartData || !chart.areaChartData.series) {
23926
24167
  return undefined;
@@ -23941,7 +24182,7 @@ class SymphiqFunnelAnalysisPreviewComponent {
23941
24182
  this.onViewAnalysis.emit();
23942
24183
  }
23943
24184
  static { this.ɵfac = function SymphiqFunnelAnalysisPreviewComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SymphiqFunnelAnalysisPreviewComponent)(); }; }
23944
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SymphiqFunnelAnalysisPreviewComponent, selectors: [["symphiq-funnel-analysis-preview"]], inputs: { analysisInput: [1, "funnelAnalysis", "analysisInput"], viewMode: [1, "viewMode"] }, outputs: { onViewAnalysis: "onViewAnalysis" }, decls: 34, vars: 40, consts: [[1, "w-full", "sm:max-w-md", "rounded-xl", "border", "shadow-lg", "backdrop-blur-lg", "transition-all", "duration-300", "sm:hover:shadow-xl", "sm:hover:scale-[1.01]", "overflow-hidden"], [1, "px-3", "py-2", "sm:px-4", "sm:py-3", "border-b", "flex", "items-center", "justify-between", "gap-2", "sm:gap-3"], [1, "flex-1", "min-w-0"], [1, "text-sm", "font-bold", "truncate"], [1, "text-xs", "truncate", "cursor-help", 3, "libSymphiqTooltip", "tooltipPosition"], [1, "flex", "items-center", "gap-1.5", "sm:gap-2", "flex-shrink-0"], ["tooltipType", "badge", 1, "px-2", "py-1", "rounded", "text-center", "min-w-[44px]", "min-h-[44px]", "flex", "items-center", "justify-center", 3, "libSymphiqTooltip", "tooltipPosition"], [1, "text-lg", "font-bold"], [1, "p-3", "sm:p-4", "space-y-2.5", "sm:space-y-3"], ["tooltipType", "metric", 1, "rounded-lg", "p-2.5", "sm:p-3", "border", "transition-all", "duration-200", "sm:hover:scale-105", "cursor-help", "active:scale-[0.98]", 3, "class", "libSymphiqTooltip", "tooltipPosition"], [1, "grid", "grid-cols-2", "gap-1.5", "sm:gap-2"], ["tooltipType", "metric", 1, "rounded-lg", "p-1.5", "sm:p-2", "border", "transition-all", "duration-200", "sm:hover:scale-105", "active:scale-[0.98]", 3, "class", "libSymphiqTooltip", "tooltipPosition"], [1, "rounded-lg", "p-2.5", "sm:p-3", "border", "transition-all", "duration-200", "sm:hover:scale-105", "active:scale-[0.98]", 3, "class"], [1, "rounded-lg", "p-2.5", "sm:p-3", "border", "transition-all", "duration-200", "sm:hover:scale-105", "active:scale-[0.98]"], [1, "flex", "items-center", "justify-between", "mb-2"], [1, "flex", "items-center", "gap-1.5", "sm:gap-2"], [1, "text-lg"], [1, "text-xs", "sm:text-sm", "font-bold"], ["tooltipType", "competitive", 1, "px-2", "py-0.5", "rounded", "text-xs", "font-bold", 3, "class", "animate-pulse", "libSymphiqTooltip", "tooltipPosition"], ["tooltipType", "narrative", 1, "text-xs", "leading-relaxed", "line-clamp-3", "cursor-help", 3, "libSymphiqTooltip", "tooltipPosition"], [1, "px-3", "py-1.5", "sm:px-4", "sm:py-2", "border-t"], [1, "w-full", "py-2.5", "sm:py-2", "rounded-lg", "font-semibold", "text-xs", "transition-all", "duration-300", "sm:hover:scale-105", "active:scale-[0.98]", "flex", "items-center", "justify-center", "gap-2", "group", "cursor-pointer", "min-h-[44px]", 3, "click"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-3", "h-3", "transition-transform", "duration-300", "group-hover:translate-x-1"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M13 7l5 5m0 0l-5 5m5-5H6"], ["tooltipType", "metric", 1, "rounded-lg", "p-2.5", "sm:p-3", "border", "transition-all", "duration-200", "sm:hover:scale-105", "cursor-help", "active:scale-[0.98]", 3, "libSymphiqTooltip", "tooltipPosition"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-3.5", "h-3.5", "sm:w-4", "sm:h-4"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1M21 12a9 9 0 11-18 0 9 9 0 0118 0z"], [1, "text-xs", "font-semibold"], ["tooltipType", "status", 1, "px-2", "py-1", "rounded", "text-xs", "font-bold", "flex", "items-center", "gap-1", "relative", "z-10", "min-h-[32px]", 3, "mouseenter", "mouseleave", "libSymphiqTooltip", "tooltipPosition"], [1, "flex", "items-baseline", "justify-between"], [1, "text-lg", "sm:text-xl", "font-bold"], [1, "flex", "items-center", "gap-1"], ["fill", "currentColor", "viewBox", "0 0 20 20", 1, "w-3", "h-3"], ["fill-rule", "evenodd", "d", "M5.293 9.707a1 1 0 010-1.414l4-4a1 1 0 011.414 0l4 4a1 1 0 01-1.414 1.414L11 7.414V15a1 1 0 11-2 0V7.414L6.707 9.707a1 1 0 01-1.414 0z", "clip-rule", "evenodd"], ["tooltipType", "metric", 1, "rounded-lg", "p-1.5", "sm:p-2", "border", "transition-all", "duration-200", "sm:hover:scale-105", "active:scale-[0.98]", 3, "libSymphiqTooltip", "tooltipPosition"], [1, "flex", "items-center", "justify-between", "mb-1"], [1, "text-xs", "font-medium", "truncate", "flex-1"], [1, "w-2", "h-2", "rounded-full", "flex-shrink-0"], [1, "flex", "items-center", "justify-between"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M9.663 17h4.673M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z"], ["tooltipType", "insightsList", 1, "px-2", "py-0.5", "rounded", "text-xs", "font-bold", 3, "libSymphiqTooltip", "tooltipPosition"], ["tooltipType", "competitive", 1, "px-2", "py-0.5", "rounded", "text-xs", "font-bold", 3, "libSymphiqTooltip", "tooltipPosition"]], template: function SymphiqFunnelAnalysisPreviewComponent_Template(rf, ctx) { if (rf & 1) {
24185
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SymphiqFunnelAnalysisPreviewComponent, selectors: [["symphiq-funnel-analysis-preview"]], inputs: { analysisInput: [1, "funnelAnalysis", "analysisInput"], viewMode: [1, "viewMode"], useSampleData: [1, "useSampleData"], scrollContainerId: [1, "scrollContainerId"] }, outputs: { onViewAnalysis: "onViewAnalysis" }, decls: 34, vars: 40, consts: [[1, "w-full", "sm:max-w-md", "rounded-xl", "border", "shadow-lg", "backdrop-blur-lg", "transition-all", "duration-300", "sm:hover:shadow-xl", "sm:hover:scale-[1.01]", "overflow-hidden"], [1, "px-3", "py-2", "sm:px-4", "sm:py-3", "border-b", "flex", "items-center", "justify-between", "gap-2", "sm:gap-3"], [1, "flex-1", "min-w-0"], [1, "text-sm", "font-bold", "truncate"], [1, "text-xs", "truncate", "cursor-help", 3, "libSymphiqTooltip", "tooltipPosition"], [1, "flex", "items-center", "gap-1.5", "sm:gap-2", "flex-shrink-0"], ["tooltipType", "badge", 1, "px-2", "py-1", "rounded", "text-center", "min-w-[44px]", "min-h-[44px]", "flex", "items-center", "justify-center", 3, "libSymphiqTooltip", "tooltipPosition"], [1, "text-lg", "font-bold"], [1, "p-3", "sm:p-4", "space-y-2.5", "sm:space-y-3"], ["tooltipType", "metric", 1, "rounded-lg", "p-2.5", "sm:p-3", "border", "transition-all", "duration-200", "sm:hover:scale-105", "cursor-help", "active:scale-[0.98]", 3, "class", "libSymphiqTooltip", "tooltipPosition"], [1, "grid", "grid-cols-2", "gap-1.5", "sm:gap-2"], ["tooltipType", "metric", 1, "rounded-lg", "p-1.5", "sm:p-2", "border", "transition-all", "duration-200", "sm:hover:scale-105", "active:scale-[0.98]", 3, "class", "libSymphiqTooltip", "tooltipPosition"], [1, "rounded-lg", "p-2.5", "sm:p-3", "border", "transition-all", "duration-200", "sm:hover:scale-105", "active:scale-[0.98]", 3, "class"], [1, "rounded-lg", "p-2.5", "sm:p-3", "border", "transition-all", "duration-200", "sm:hover:scale-105", "active:scale-[0.98]"], [1, "flex", "items-center", "justify-between", "mb-2"], [1, "flex", "items-center", "gap-1.5", "sm:gap-2"], [1, "text-lg"], [1, "text-xs", "sm:text-sm", "font-bold"], ["tooltipType", "competitive", 1, "px-2", "py-0.5", "rounded", "text-xs", "font-bold", 3, "class", "animate-pulse", "libSymphiqTooltip", "tooltipPosition"], ["tooltipType", "narrative", 1, "text-xs", "leading-relaxed", "line-clamp-3", "cursor-help", 3, "libSymphiqTooltip", "tooltipPosition"], [1, "px-3", "py-1.5", "sm:px-4", "sm:py-2", "border-t"], [1, "w-full", "py-2.5", "sm:py-2", "rounded-lg", "font-semibold", "text-xs", "transition-all", "duration-300", "sm:hover:scale-105", "active:scale-[0.98]", "flex", "items-center", "justify-center", "gap-2", "group", "cursor-pointer", "min-h-[44px]", 3, "click"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-3", "h-3", "transition-transform", "duration-300", "group-hover:translate-x-1"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M13 7l5 5m0 0l-5 5m5-5H6"], ["tooltipType", "metric", 1, "rounded-lg", "p-2.5", "sm:p-3", "border", "transition-all", "duration-200", "sm:hover:scale-105", "cursor-help", "active:scale-[0.98]", 3, "libSymphiqTooltip", "tooltipPosition"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-3.5", "h-3.5", "sm:w-4", "sm:h-4"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1M21 12a9 9 0 11-18 0 9 9 0 0118 0z"], [1, "text-xs", "font-semibold"], ["tooltipType", "status", 1, "px-2", "py-1", "rounded", "text-xs", "font-bold", "flex", "items-center", "gap-1", "relative", "z-10", "min-h-[32px]", 3, "mouseenter", "mouseleave", "libSymphiqTooltip", "tooltipPosition"], [1, "flex", "items-baseline", "justify-between"], [1, "text-lg", "sm:text-xl", "font-bold"], [1, "flex", "items-center", "gap-1"], ["fill", "currentColor", "viewBox", "0 0 20 20", 1, "w-3", "h-3"], ["fill-rule", "evenodd", "d", "M5.293 9.707a1 1 0 010-1.414l4-4a1 1 0 011.414 0l4 4a1 1 0 01-1.414 1.414L11 7.414V15a1 1 0 11-2 0V7.414L6.707 9.707a1 1 0 01-1.414 0z", "clip-rule", "evenodd"], ["tooltipType", "metric", 1, "rounded-lg", "p-1.5", "sm:p-2", "border", "transition-all", "duration-200", "sm:hover:scale-105", "active:scale-[0.98]", 3, "libSymphiqTooltip", "tooltipPosition"], [1, "flex", "items-center", "justify-between", "mb-1"], [1, "text-xs", "font-medium", "truncate", "flex-1"], [1, "w-2", "h-2", "rounded-full", "flex-shrink-0"], [1, "flex", "items-center", "justify-between"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M9.663 17h4.673M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z"], ["tooltipType", "insightsList", 1, "px-2", "py-0.5", "rounded", "text-xs", "font-bold", 3, "libSymphiqTooltip", "tooltipPosition"], ["tooltipType", "competitive", 1, "px-2", "py-0.5", "rounded", "text-xs", "font-bold", 3, "libSymphiqTooltip", "tooltipPosition"]], template: function SymphiqFunnelAnalysisPreviewComponent_Template(rf, ctx) { if (rf & 1) {
23945
24186
  i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2)(3, "h3", 3);
23946
24187
  i0.ɵɵtext(4, "Funnel Analysis");
23947
24188
  i0.ɵɵelementEnd();
@@ -24203,8 +24444,8 @@ class SymphiqFunnelAnalysisPreviewComponent {
24203
24444
  <!-- Tooltip Container -->
24204
24445
  <symphiq-tooltip-container />
24205
24446
  `, styles: ["@keyframes statusPulse{0%,to{opacity:1}50%{opacity:.6}}.status-pulse{animation:statusPulse 2s ease-in-out infinite}\n"] }]
24206
- }], null, { analysisInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "funnelAnalysis", required: true }] }], viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], onViewAnalysis: [{ type: i0.Output, args: ["onViewAnalysis"] }] }); })();
24207
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SymphiqFunnelAnalysisPreviewComponent, { className: "SymphiqFunnelAnalysisPreviewComponent", filePath: "lib/components/funnel-analysis-preview/symphiq-funnel-analysis-preview.component.ts", lineNumber: 213 }); })();
24447
+ }], () => [], { analysisInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "funnelAnalysis", required: false }] }], viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], useSampleData: [{ type: i0.Input, args: [{ isSignal: true, alias: "useSampleData", required: false }] }], scrollContainerId: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollContainerId", required: false }] }], onViewAnalysis: [{ type: i0.Output, args: ["onViewAnalysis"] }] }); })();
24448
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SymphiqFunnelAnalysisPreviewComponent, { className: "SymphiqFunnelAnalysisPreviewComponent", filePath: "lib/components/funnel-analysis-preview/symphiq-funnel-analysis-preview.component.ts", lineNumber: 216 }); })();
24208
24449
 
24209
24450
  const _c0$3 = ["chartdiv"];
24210
24451
  class LineChartComponent {