@eric-emg/symphiq-components 1.2.41 → 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.
@@ -21670,16 +21670,56 @@ class SymphiqFunnelAnalysisDashboardComponent {
21670
21670
  // Store reference for use in scrollToSection and tooltips
21671
21671
  this.embeddedScrollContainer = scrollElement;
21672
21672
  this.tooltipService.setScrollContainer(scrollElement);
21673
- // Check initial scroll position and update header state
21674
- const initialScrollTop = scrollElement.scrollTop;
21675
- if (initialScrollTop > 50) {
21676
- console.log('[SCROLL DEBUG] Initial scroll position > 50, collapsing header', { initialScrollTop });
21677
- this.isScrolled.set(true);
21678
- }
21679
- else {
21680
- console.log('[SCROLL DEBUG] Initial scroll position <= 50, expanding header', { initialScrollTop });
21681
- this.isScrolled.set(false);
21682
- }
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();
21683
21723
  // Attach scroll listeners
21684
21724
  scrollElement.addEventListener('scroll', () => this.onContainerScroll(scrollElement), { passive: true });
21685
21725
  ionContent.addEventListener('ionScroll', () => this.onContainerScroll(scrollElement), { passive: true });
@@ -21706,12 +21746,48 @@ class SymphiqFunnelAnalysisDashboardComponent {
21706
21746
  });
21707
21747
  this.embeddedScrollContainer = element;
21708
21748
  this.tooltipService.setScrollContainer(element);
21709
- // Check initial scroll position
21710
- const initialScrollTop = element.scrollTop;
21711
- if (initialScrollTop > 50) {
21712
- console.log('[SCROLL DEBUG] Initial scroll position > 50, collapsing header', { initialScrollTop });
21713
- this.isScrolled.set(true);
21714
- }
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();
21715
21791
  element.addEventListener('scroll', () => this.onContainerScroll(element), { passive: true });
21716
21792
  return true;
21717
21793
  }
@@ -21723,12 +21799,48 @@ class SymphiqFunnelAnalysisDashboardComponent {
21723
21799
  });
21724
21800
  this.embeddedScrollContainer = element;
21725
21801
  this.tooltipService.setScrollContainer(element);
21726
- // Check initial scroll position
21727
- const initialScrollTop = element.scrollTop;
21728
- if (initialScrollTop > 50) {
21729
- console.log('[SCROLL DEBUG] Initial scroll position > 50, collapsing header', { initialScrollTop });
21730
- this.isScrolled.set(true);
21731
- }
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();
21732
21844
  element.addEventListener('scroll', () => this.onContainerScroll(element), { passive: true });
21733
21845
  return true;
21734
21846
  }
@@ -23687,12 +23799,14 @@ class SymphiqFunnelAnalysisPreviewComponent {
23687
23799
  this.analysisInput = input(undefined, ...(ngDevMode ? [{ debugName: "analysisInput", alias: 'funnelAnalysis' }] : [{ alias: 'funnelAnalysis' }]));
23688
23800
  this.viewMode = input(ViewModeEnum.LIGHT, ...(ngDevMode ? [{ debugName: "viewMode" }] : []));
23689
23801
  this.useSampleData = input(false, ...(ngDevMode ? [{ debugName: "useSampleData" }] : []));
23802
+ this.scrollContainerId = input(undefined, ...(ngDevMode ? [{ debugName: "scrollContainerId" }] : []));
23690
23803
  // Computed theme
23691
23804
  this.isLightMode = computed(() => this.viewMode() === ViewModeEnum.LIGHT, ...(ngDevMode ? [{ debugName: "isLightMode" }] : []));
23692
23805
  // Outputs
23693
23806
  this.onViewAnalysis = output();
23694
23807
  // Services
23695
23808
  this.tooltipDataService = inject(TooltipDataService);
23809
+ this.tooltipService = inject(TooltipService);
23696
23810
  this.competitiveScoreService = inject(CompetitiveScoreService);
23697
23811
  // Analysis data - use sample data if useSampleData is true, otherwise use provided data
23698
23812
  this.analysisData = computed(() => {
@@ -23902,6 +24016,60 @@ class SymphiqFunnelAnalysisPreviewComponent {
23902
24016
  }, ...(ngDevMode ? [{ debugName: "statusIconClass" }] : []));
23903
24017
  this.insightsCardClass = computed(() => getInsightsCardClasses(this.viewMode()), ...(ngDevMode ? [{ debugName: "insightsCardClass" }] : []));
23904
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
+ });
23905
24073
  }
23906
24074
  // Helper methods for metrics
23907
24075
  metricMiniCardClass(metric) {
@@ -24014,7 +24182,7 @@ class SymphiqFunnelAnalysisPreviewComponent {
24014
24182
  this.onViewAnalysis.emit();
24015
24183
  }
24016
24184
  static { this.ɵfac = function SymphiqFunnelAnalysisPreviewComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SymphiqFunnelAnalysisPreviewComponent)(); }; }
24017
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SymphiqFunnelAnalysisPreviewComponent, selectors: [["symphiq-funnel-analysis-preview"]], inputs: { analysisInput: [1, "funnelAnalysis", "analysisInput"], viewMode: [1, "viewMode"], useSampleData: [1, "useSampleData"] }, 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) {
24018
24186
  i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2)(3, "h3", 3);
24019
24187
  i0.ɵɵtext(4, "Funnel Analysis");
24020
24188
  i0.ɵɵelementEnd();
@@ -24276,8 +24444,8 @@ class SymphiqFunnelAnalysisPreviewComponent {
24276
24444
  <!-- Tooltip Container -->
24277
24445
  <symphiq-tooltip-container />
24278
24446
  `, styles: ["@keyframes statusPulse{0%,to{opacity:1}50%{opacity:.6}}.status-pulse{animation:statusPulse 2s ease-in-out infinite}\n"] }]
24279
- }], null, { 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 }] }], onViewAnalysis: [{ type: i0.Output, args: ["onViewAnalysis"] }] }); })();
24280
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SymphiqFunnelAnalysisPreviewComponent, { className: "SymphiqFunnelAnalysisPreviewComponent", filePath: "lib/components/funnel-analysis-preview/symphiq-funnel-analysis-preview.component.ts", lineNumber: 214 }); })();
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 }); })();
24281
24449
 
24282
24450
  const _c0$3 = ["chartdiv"];
24283
24451
  class LineChartComponent {