From a811ff40ecb548de222c52c1002e07d8b1468903 Mon Sep 17 00:00:00 2001 From: PostHog Bot Date: Wed, 30 Oct 2024 11:42:25 +0000 Subject: [PATCH] Storybook build for a9a77ace552df5492c1adc7b0f00728325d8d097 --- docs/iframe.html | 2 +- ...22653d.iframe.bundle.js => main.6eed8218.iframe.bundle.js} | 4 ++-- ...frame.bundle.js.map => main.6eed8218.iframe.bundle.js.map} | 2 +- docs/project.json | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) rename docs/{main.a422653d.iframe.bundle.js => main.6eed8218.iframe.bundle.js} (97%) rename docs/{main.a422653d.iframe.bundle.js.map => main.6eed8218.iframe.bundle.js.map} (99%) diff --git a/docs/iframe.html b/docs/iframe.html index 14d382cbd..b82afc6d0 100644 --- a/docs/iframe.html +++ b/docs/iframe.html @@ -352,4 +352,4 @@ import './73206.379e8a85.iframe.bundle.js'; - import './main.a422653d.iframe.bundle.js'; \ No newline at end of file + import './main.6eed8218.iframe.bundle.js'; \ No newline at end of file diff --git a/docs/main.a422653d.iframe.bundle.js b/docs/main.6eed8218.iframe.bundle.js similarity index 97% rename from docs/main.a422653d.iframe.bundle.js rename to docs/main.6eed8218.iframe.bundle.js index a6ebf388b..cd0461cef 100644 --- a/docs/main.a422653d.iframe.bundle.js +++ b/docs/main.6eed8218.iframe.bundle.js @@ -1,4 +1,4 @@ -(self.webpackChunkposthog=self.webpackChunkposthog||[]).push([[40179],{"./frontend/src lazy recursive ^\\.\\/.*$ include: (?:\\/frontend\\/src(?:\\/(?%21\\.)(?:(?:(?%21(?:^%7C\\/)\\.).)*?)\\/%7C\\/%7C$)(?%21\\.)(?=.)[^/]*?\\.stories\\.(js%7Cjsx%7Cts%7Ctsx%7Cmdx))$":(module,__unused_webpack_exports,__webpack_require__)=>{var map={"./exporter/Exporter.stories":["./frontend/src/exporter/Exporter.stories.tsx",18146,53342,85564,26299,74653,89245],"./exporter/Exporter.stories.tsx":["./frontend/src/exporter/Exporter.stories.tsx",18146,53342,85564,26299,74653,89245],"./layout/ErrorProjectUnavailable.stories":["./frontend/src/layout/ErrorProjectUnavailable.stories.tsx",89716],"./layout/ErrorProjectUnavailable.stories.tsx":["./frontend/src/layout/ErrorProjectUnavailable.stories.tsx",89716],"./layout/FeaturePreviews/FeaturePreviews.stories":["./frontend/src/layout/FeaturePreviews/FeaturePreviews.stories.tsx",57578],"./layout/FeaturePreviews/FeaturePreviews.stories.tsx":["./frontend/src/layout/FeaturePreviews/FeaturePreviews.stories.tsx",57578],"./layout/navigation-3000/Navigation.stories":["./frontend/src/layout/navigation-3000/Navigation.stories.tsx",29749,36125],"./layout/navigation-3000/Navigation.stories.tsx":["./frontend/src/layout/navigation-3000/Navigation.stories.tsx",29749,36125],"./layout/navigation-3000/components/KeyboardShortcut.stories":["./frontend/src/layout/navigation-3000/components/KeyboardShortcut.stories.tsx",39298],"./layout/navigation-3000/components/KeyboardShortcut.stories.tsx":["./frontend/src/layout/navigation-3000/components/KeyboardShortcut.stories.tsx",39298],"./layout/navigation-3000/components/Sidebar.stories":["./frontend/src/layout/navigation-3000/components/Sidebar.stories.tsx",43847],"./layout/navigation-3000/components/Sidebar.stories.tsx":["./frontend/src/layout/navigation-3000/components/Sidebar.stories.tsx",43847],"./layout/navigation-3000/sidepanel/SidePanel.stories":["./frontend/src/layout/navigation-3000/sidepanel/SidePanel.stories.tsx",67197],"./layout/navigation-3000/sidepanel/SidePanel.stories.tsx":["./frontend/src/layout/navigation-3000/sidepanel/SidePanel.stories.tsx",67197],"./lib/components/ActivityLog/ActivityLog.stories":["./frontend/src/lib/components/ActivityLog/ActivityLog.stories.tsx",94831],"./lib/components/ActivityLog/ActivityLog.stories.tsx":["./frontend/src/lib/components/ActivityLog/ActivityLog.stories.tsx",94831],"./lib/components/ActivityLog/SentenceList.stories":["./frontend/src/lib/components/ActivityLog/SentenceList.stories.tsx",92223],"./lib/components/ActivityLog/SentenceList.stories.tsx":["./frontend/src/lib/components/ActivityLog/SentenceList.stories.tsx",92223],"./lib/components/Animation/Animation.stories":["./frontend/src/lib/components/Animation/Animation.stories.tsx",85566],"./lib/components/Animation/Animation.stories.tsx":["./frontend/src/lib/components/Animation/Animation.stories.tsx",85566],"./lib/components/Cards/InsightCard/InsightCard.stories":["./frontend/src/lib/components/Cards/InsightCard/InsightCard.stories.tsx",18146,85564,23407],"./lib/components/Cards/InsightCard/InsightCard.stories.tsx":["./frontend/src/lib/components/Cards/InsightCard/InsightCard.stories.tsx",18146,85564,23407],"./lib/components/Cards/InsightCard/InsightDetails.stories":["./frontend/src/lib/components/Cards/InsightCard/InsightDetails.stories.tsx",18146,85564,71831],"./lib/components/Cards/InsightCard/InsightDetails.stories.tsx":["./frontend/src/lib/components/Cards/InsightCard/InsightDetails.stories.tsx",18146,85564,71831],"./lib/components/Cards/TextCard/TextCard.stories":["./frontend/src/lib/components/Cards/TextCard/TextCard.stories.tsx",2543],"./lib/components/Cards/TextCard/TextCard.stories.tsx":["./frontend/src/lib/components/Cards/TextCard/TextCard.stories.tsx",2543],"./lib/components/CodeSnippet/CodeSnippet.stories":["./frontend/src/lib/components/CodeSnippet/CodeSnippet.stories.tsx",90346],"./lib/components/CodeSnippet/CodeSnippet.stories.tsx":["./frontend/src/lib/components/CodeSnippet/CodeSnippet.stories.tsx",90346],"./lib/components/CommandBar/CommandBar.stories":["./frontend/src/lib/components/CommandBar/CommandBar.stories.tsx",75110],"./lib/components/CommandBar/CommandBar.stories.tsx":["./frontend/src/lib/components/CommandBar/CommandBar.stories.tsx",75110],"./lib/components/CompactList/CompactList.stories":["./frontend/src/lib/components/CompactList/CompactList.stories.tsx",30444],"./lib/components/CompactList/CompactList.stories.tsx":["./frontend/src/lib/components/CompactList/CompactList.stories.tsx",30444],"./lib/components/EditableField/EditableField.stories":["./frontend/src/lib/components/EditableField/EditableField.stories.tsx",6319],"./lib/components/EditableField/EditableField.stories.tsx":["./frontend/src/lib/components/EditableField/EditableField.stories.tsx",6319],"./lib/components/EmptyMessage/EmptyMessage.stories":["./frontend/src/lib/components/EmptyMessage/EmptyMessage.stories.tsx",78095],"./lib/components/EmptyMessage/EmptyMessage.stories.tsx":["./frontend/src/lib/components/EmptyMessage/EmptyMessage.stories.tsx",78095],"./lib/components/Errors/ErrorDisplay.stories":["./frontend/src/lib/components/Errors/ErrorDisplay.stories.tsx",73949],"./lib/components/Errors/ErrorDisplay.stories.tsx":["./frontend/src/lib/components/Errors/ErrorDisplay.stories.tsx",73949],"./lib/components/EventSelect/EventSelect.stories":["./frontend/src/lib/components/EventSelect/EventSelect.stories.tsx",96062],"./lib/components/EventSelect/EventSelect.stories.tsx":["./frontend/src/lib/components/EventSelect/EventSelect.stories.tsx",96062],"./lib/components/HTMLElementsDisplay/HTMLElementsDisplay.stories":["./frontend/src/lib/components/HTMLElementsDisplay/HTMLElementsDisplay.stories.tsx",59545],"./lib/components/HTMLElementsDisplay/HTMLElementsDisplay.stories.tsx":["./frontend/src/lib/components/HTMLElementsDisplay/HTMLElementsDisplay.stories.tsx",59545],"./lib/components/HedgehogBuddy/HedgehogBuddy.stories":["./frontend/src/lib/components/HedgehogBuddy/HedgehogBuddy.stories.tsx",46460],"./lib/components/HedgehogBuddy/HedgehogBuddy.stories.tsx":["./frontend/src/lib/components/HedgehogBuddy/HedgehogBuddy.stories.tsx",46460],"./lib/components/HogQLEditor/HogQLEditor.stories":["./frontend/src/lib/components/HogQLEditor/HogQLEditor.stories.tsx",23398],"./lib/components/HogQLEditor/HogQLEditor.stories.tsx":["./frontend/src/lib/components/HogQLEditor/HogQLEditor.stories.tsx",23398],"./lib/components/Hogfetti/Hogfetti.stories":["./frontend/src/lib/components/Hogfetti/Hogfetti.stories.tsx",986],"./lib/components/Hogfetti/Hogfetti.stories.tsx":["./frontend/src/lib/components/Hogfetti/Hogfetti.stories.tsx",986],"./lib/components/Map/Map.stories":["./frontend/src/lib/components/Map/Map.stories.tsx",91175],"./lib/components/Map/Map.stories.tsx":["./frontend/src/lib/components/Map/Map.stories.tsx",91175],"./lib/components/NotFound/NotFound.stories":["./frontend/src/lib/components/NotFound/NotFound.stories.tsx",32146],"./lib/components/NotFound/NotFound.stories.tsx":["./frontend/src/lib/components/NotFound/NotFound.stories.tsx",32146],"./lib/components/ObjectTags/ObjectTags.stories":["./frontend/src/lib/components/ObjectTags/ObjectTags.stories.tsx",88082],"./lib/components/ObjectTags/ObjectTags.stories.tsx":["./frontend/src/lib/components/ObjectTags/ObjectTags.stories.tsx",88082],"./lib/components/PathCleanFilters/PathCleanFilters.stories":["./frontend/src/lib/components/PathCleanFilters/PathCleanFilters.stories.tsx",68097],"./lib/components/PathCleanFilters/PathCleanFilters.stories.tsx":["./frontend/src/lib/components/PathCleanFilters/PathCleanFilters.stories.tsx",68097],"./lib/components/PayGateMini/PayGateMini.stories":["./frontend/src/lib/components/PayGateMini/PayGateMini.stories.tsx",6875,15773],"./lib/components/PayGateMini/PayGateMini.stories.tsx":["./frontend/src/lib/components/PayGateMini/PayGateMini.stories.tsx",6875,15773],"./lib/components/Playlist/Playlist.stories":["./frontend/src/lib/components/Playlist/Playlist.stories.tsx",11923],"./lib/components/Playlist/Playlist.stories.tsx":["./frontend/src/lib/components/Playlist/Playlist.stories.tsx",11923],"./lib/components/ProductIntroduction/ProductIntroduction.stories":["./frontend/src/lib/components/ProductIntroduction/ProductIntroduction.stories.tsx",87111],"./lib/components/ProductIntroduction/ProductIntroduction.stories.tsx":["./frontend/src/lib/components/ProductIntroduction/ProductIntroduction.stories.tsx",87111],"./lib/components/PropertiesTable/PropertiesTable.stories":["./frontend/src/lib/components/PropertiesTable/PropertiesTable.stories.tsx",10057],"./lib/components/PropertiesTable/PropertiesTable.stories.tsx":["./frontend/src/lib/components/PropertiesTable/PropertiesTable.stories.tsx",10057],"./lib/components/PropertiesTimeline/PropertiesTimeline.stories":["./frontend/src/lib/components/PropertiesTimeline/PropertiesTimeline.stories.tsx",39127],"./lib/components/PropertiesTimeline/PropertiesTimeline.stories.tsx":["./frontend/src/lib/components/PropertiesTimeline/PropertiesTimeline.stories.tsx",39127],"./lib/components/PropertyFilters/PropertyFilters.stories":["./frontend/src/lib/components/PropertyFilters/PropertyFilters.stories.tsx",85205],"./lib/components/PropertyFilters/PropertyFilters.stories.tsx":["./frontend/src/lib/components/PropertyFilters/PropertyFilters.stories.tsx",85205],"./lib/components/PropertyFilters/components/OperatorValueSelect.stories":["./frontend/src/lib/components/PropertyFilters/components/OperatorValueSelect.stories.tsx",24792],"./lib/components/PropertyFilters/components/OperatorValueSelect.stories.tsx":["./frontend/src/lib/components/PropertyFilters/components/OperatorValueSelect.stories.tsx",24792],"./lib/components/PropertyFilters/components/PropertyFilterButton.stories":["./frontend/src/lib/components/PropertyFilters/components/PropertyFilterButton.stories.tsx",59931],"./lib/components/PropertyFilters/components/PropertyFilterButton.stories.tsx":["./frontend/src/lib/components/PropertyFilters/components/PropertyFilterButton.stories.tsx",59931],"./lib/components/PropertyIcon.stories":["./frontend/src/lib/components/PropertyIcon.stories.tsx",99387],"./lib/components/PropertyIcon.stories.tsx":["./frontend/src/lib/components/PropertyIcon.stories.tsx",99387],"./lib/components/PropertyKeyInfo.stories":["./frontend/src/lib/components/PropertyKeyInfo.stories.tsx",60665],"./lib/components/PropertyKeyInfo.stories.tsx":["./frontend/src/lib/components/PropertyKeyInfo.stories.tsx",60665],"./lib/components/PropertySelect/PropertySelect.stories":["./frontend/src/lib/components/PropertySelect/PropertySelect.stories.tsx",92176],"./lib/components/PropertySelect/PropertySelect.stories.tsx":["./frontend/src/lib/components/PropertySelect/PropertySelect.stories.tsx",92176],"./lib/components/ScrollableShadows/ScrollableShadows.stories":["./frontend/src/lib/components/ScrollableShadows/ScrollableShadows.stories.tsx",2313],"./lib/components/ScrollableShadows/ScrollableShadows.stories.tsx":["./frontend/src/lib/components/ScrollableShadows/ScrollableShadows.stories.tsx",2313],"./lib/components/Sharing/SharingModal.stories":["./frontend/src/lib/components/Sharing/SharingModal.stories.tsx",40722],"./lib/components/Sharing/SharingModal.stories.tsx":["./frontend/src/lib/components/Sharing/SharingModal.stories.tsx",40722],"./lib/components/Subscriptions/SubscriptionsModal.stories":["./frontend/src/lib/components/Subscriptions/SubscriptionsModal.stories.tsx",25733],"./lib/components/Subscriptions/SubscriptionsModal.stories.tsx":["./frontend/src/lib/components/Subscriptions/SubscriptionsModal.stories.tsx",25733],"./lib/components/TZLabel/TZLabel.stories":["./frontend/src/lib/components/TZLabel/TZLabel.stories.tsx",68987],"./lib/components/TZLabel/TZLabel.stories.tsx":["./frontend/src/lib/components/TZLabel/TZLabel.stories.tsx",68987],"./lib/components/TaxonomicFilter/TaxonomicFilter.stories":["./frontend/src/lib/components/TaxonomicFilter/TaxonomicFilter.stories.tsx",47124],"./lib/components/TaxonomicFilter/TaxonomicFilter.stories.tsx":["./frontend/src/lib/components/TaxonomicFilter/TaxonomicFilter.stories.tsx",47124],"./lib/components/TaxonomicPopover/TaxonomicPopover.stories":["./frontend/src/lib/components/TaxonomicPopover/TaxonomicPopover.stories.tsx",18373],"./lib/components/TaxonomicPopover/TaxonomicPopover.stories.tsx":["./frontend/src/lib/components/TaxonomicPopover/TaxonomicPopover.stories.tsx",18373],"./lib/components/UniversalFilters/UniversalFilters.stories":["./frontend/src/lib/components/UniversalFilters/UniversalFilters.stories.tsx",95858],"./lib/components/UniversalFilters/UniversalFilters.stories.tsx":["./frontend/src/lib/components/UniversalFilters/UniversalFilters.stories.tsx",95858],"./lib/components/hedgehogs.stories":["./frontend/src/lib/components/hedgehogs.stories.tsx",63833],"./lib/components/hedgehogs.stories.tsx":["./frontend/src/lib/components/hedgehogs.stories.tsx",63833],"./lib/lemon-ui/LemonBadge/LemonBadge.stories":["./frontend/src/lib/lemon-ui/LemonBadge/LemonBadge.stories.tsx",28308],"./lib/lemon-ui/LemonBadge/LemonBadge.stories.tsx":["./frontend/src/lib/lemon-ui/LemonBadge/LemonBadge.stories.tsx",28308],"./lib/lemon-ui/LemonBadge/LemonBadgeNumber.stories":["./frontend/src/lib/lemon-ui/LemonBadge/LemonBadgeNumber.stories.tsx",15545],"./lib/lemon-ui/LemonBadge/LemonBadgeNumber.stories.tsx":["./frontend/src/lib/lemon-ui/LemonBadge/LemonBadgeNumber.stories.tsx",15545],"./lib/lemon-ui/LemonBanner/LemonBanner.stories":["./frontend/src/lib/lemon-ui/LemonBanner/LemonBanner.stories.tsx",55409],"./lib/lemon-ui/LemonBanner/LemonBanner.stories.tsx":["./frontend/src/lib/lemon-ui/LemonBanner/LemonBanner.stories.tsx",55409],"./lib/lemon-ui/LemonButton/LemonButton.stories":["./frontend/src/lib/lemon-ui/LemonButton/LemonButton.stories.tsx",90001],"./lib/lemon-ui/LemonButton/LemonButton.stories.tsx":["./frontend/src/lib/lemon-ui/LemonButton/LemonButton.stories.tsx",90001],"./lib/lemon-ui/LemonCalendar/LemonCalendar.stories":["./frontend/src/lib/lemon-ui/LemonCalendar/LemonCalendar.stories.tsx",33214],"./lib/lemon-ui/LemonCalendar/LemonCalendar.stories.tsx":["./frontend/src/lib/lemon-ui/LemonCalendar/LemonCalendar.stories.tsx",33214],"./lib/lemon-ui/LemonCalendar/LemonCalendarSelect.stories":["./frontend/src/lib/lemon-ui/LemonCalendar/LemonCalendarSelect.stories.tsx",72281],"./lib/lemon-ui/LemonCalendar/LemonCalendarSelect.stories.tsx":["./frontend/src/lib/lemon-ui/LemonCalendar/LemonCalendarSelect.stories.tsx",72281],"./lib/lemon-ui/LemonCalendar/LemonCalendarSelectInput.stories":["./frontend/src/lib/lemon-ui/LemonCalendar/LemonCalendarSelectInput.stories.tsx",1094],"./lib/lemon-ui/LemonCalendar/LemonCalendarSelectInput.stories.tsx":["./frontend/src/lib/lemon-ui/LemonCalendar/LemonCalendarSelectInput.stories.tsx",1094],"./lib/lemon-ui/LemonCalendarRange/LemonCalendarRange.stories":["./frontend/src/lib/lemon-ui/LemonCalendarRange/LemonCalendarRange.stories.tsx",86910],"./lib/lemon-ui/LemonCalendarRange/LemonCalendarRange.stories.tsx":["./frontend/src/lib/lemon-ui/LemonCalendarRange/LemonCalendarRange.stories.tsx",86910],"./lib/lemon-ui/LemonCalendarRange/LemonCalendarRangeInline.stories":["./frontend/src/lib/lemon-ui/LemonCalendarRange/LemonCalendarRangeInline.stories.tsx",85903],"./lib/lemon-ui/LemonCalendarRange/LemonCalendarRangeInline.stories.tsx":["./frontend/src/lib/lemon-ui/LemonCalendarRange/LemonCalendarRangeInline.stories.tsx",85903],"./lib/lemon-ui/LemonCheckbox/LemonCheckbox.stories":["./frontend/src/lib/lemon-ui/LemonCheckbox/LemonCheckbox.stories.tsx",38597],"./lib/lemon-ui/LemonCheckbox/LemonCheckbox.stories.tsx":["./frontend/src/lib/lemon-ui/LemonCheckbox/LemonCheckbox.stories.tsx",38597],"./lib/lemon-ui/LemonCollapse/LemonCollapse.stories":["./frontend/src/lib/lemon-ui/LemonCollapse/LemonCollapse.stories.tsx",50339],"./lib/lemon-ui/LemonCollapse/LemonCollapse.stories.tsx":["./frontend/src/lib/lemon-ui/LemonCollapse/LemonCollapse.stories.tsx",50339],"./lib/lemon-ui/LemonDialog/LemonDialog.stories":["./frontend/src/lib/lemon-ui/LemonDialog/LemonDialog.stories.tsx",39513],"./lib/lemon-ui/LemonDialog/LemonDialog.stories.tsx":["./frontend/src/lib/lemon-ui/LemonDialog/LemonDialog.stories.tsx",39513],"./lib/lemon-ui/LemonDivider/LemonDivider.stories":["./frontend/src/lib/lemon-ui/LemonDivider/LemonDivider.stories.tsx",58168],"./lib/lemon-ui/LemonDivider/LemonDivider.stories.tsx":["./frontend/src/lib/lemon-ui/LemonDivider/LemonDivider.stories.tsx",58168],"./lib/lemon-ui/LemonField/LemonField.stories":["./frontend/src/lib/lemon-ui/LemonField/LemonField.stories.tsx",7422],"./lib/lemon-ui/LemonField/LemonField.stories.tsx":["./frontend/src/lib/lemon-ui/LemonField/LemonField.stories.tsx",7422],"./lib/lemon-ui/LemonFileInput/LemonFileInput.stories":["./frontend/src/lib/lemon-ui/LemonFileInput/LemonFileInput.stories.tsx",53617],"./lib/lemon-ui/LemonFileInput/LemonFileInput.stories.tsx":["./frontend/src/lib/lemon-ui/LemonFileInput/LemonFileInput.stories.tsx",53617],"./lib/lemon-ui/LemonInput/LemonInput.stories":["./frontend/src/lib/lemon-ui/LemonInput/LemonInput.stories.tsx",55394],"./lib/lemon-ui/LemonInput/LemonInput.stories.tsx":["./frontend/src/lib/lemon-ui/LemonInput/LemonInput.stories.tsx",55394],"./lib/lemon-ui/LemonInputSelect/LemonInputSelect.stories":["./frontend/src/lib/lemon-ui/LemonInputSelect/LemonInputSelect.stories.tsx",10223],"./lib/lemon-ui/LemonInputSelect/LemonInputSelect.stories.tsx":["./frontend/src/lib/lemon-ui/LemonInputSelect/LemonInputSelect.stories.tsx",10223],"./lib/lemon-ui/LemonLabel/LemonLabel.stories":["./frontend/src/lib/lemon-ui/LemonLabel/LemonLabel.stories.tsx",60518],"./lib/lemon-ui/LemonLabel/LemonLabel.stories.tsx":["./frontend/src/lib/lemon-ui/LemonLabel/LemonLabel.stories.tsx",60518],"./lib/lemon-ui/LemonMarkdown/LemonMarkdown.stories":["./frontend/src/lib/lemon-ui/LemonMarkdown/LemonMarkdown.stories.tsx",29456],"./lib/lemon-ui/LemonMarkdown/LemonMarkdown.stories.tsx":["./frontend/src/lib/lemon-ui/LemonMarkdown/LemonMarkdown.stories.tsx",29456],"./lib/lemon-ui/LemonMenu/LemonMenu.stories":["./frontend/src/lib/lemon-ui/LemonMenu/LemonMenu.stories.tsx",95844],"./lib/lemon-ui/LemonMenu/LemonMenu.stories.tsx":["./frontend/src/lib/lemon-ui/LemonMenu/LemonMenu.stories.tsx",95844],"./lib/lemon-ui/LemonModal/LemonModal.stories":["./frontend/src/lib/lemon-ui/LemonModal/LemonModal.stories.tsx",66646],"./lib/lemon-ui/LemonModal/LemonModal.stories.tsx":["./frontend/src/lib/lemon-ui/LemonModal/LemonModal.stories.tsx",66646],"./lib/lemon-ui/LemonProgress/LemonProgress.stories":["./frontend/src/lib/lemon-ui/LemonProgress/LemonProgress.stories.tsx",52375],"./lib/lemon-ui/LemonProgress/LemonProgress.stories.tsx":["./frontend/src/lib/lemon-ui/LemonProgress/LemonProgress.stories.tsx",52375],"./lib/lemon-ui/LemonProgressCircle/LemonProgressCircle.stories":["./frontend/src/lib/lemon-ui/LemonProgressCircle/LemonProgressCircle.stories.tsx",16498],"./lib/lemon-ui/LemonProgressCircle/LemonProgressCircle.stories.tsx":["./frontend/src/lib/lemon-ui/LemonProgressCircle/LemonProgressCircle.stories.tsx",16498],"./lib/lemon-ui/LemonRadio/LemonRadio.stories":["./frontend/src/lib/lemon-ui/LemonRadio/LemonRadio.stories.tsx",2677],"./lib/lemon-ui/LemonRadio/LemonRadio.stories.tsx":["./frontend/src/lib/lemon-ui/LemonRadio/LemonRadio.stories.tsx",2677],"./lib/lemon-ui/LemonRow/LemonRow.stories":["./frontend/src/lib/lemon-ui/LemonRow/LemonRow.stories.tsx",23708],"./lib/lemon-ui/LemonRow/LemonRow.stories.tsx":["./frontend/src/lib/lemon-ui/LemonRow/LemonRow.stories.tsx",23708],"./lib/lemon-ui/LemonSegmentedButton/LemonSegmentedButton.stories":["./frontend/src/lib/lemon-ui/LemonSegmentedButton/LemonSegmentedButton.stories.tsx",78334],"./lib/lemon-ui/LemonSegmentedButton/LemonSegmentedButton.stories.tsx":["./frontend/src/lib/lemon-ui/LemonSegmentedButton/LemonSegmentedButton.stories.tsx",78334],"./lib/lemon-ui/LemonSelect/LemonSelect.stories":["./frontend/src/lib/lemon-ui/LemonSelect/LemonSelect.stories.tsx",57354],"./lib/lemon-ui/LemonSelect/LemonSelect.stories.tsx":["./frontend/src/lib/lemon-ui/LemonSelect/LemonSelect.stories.tsx",57354],"./lib/lemon-ui/LemonSkeleton/LemonSkeleton.stories":["./frontend/src/lib/lemon-ui/LemonSkeleton/LemonSkeleton.stories.tsx",56428],"./lib/lemon-ui/LemonSkeleton/LemonSkeleton.stories.tsx":["./frontend/src/lib/lemon-ui/LemonSkeleton/LemonSkeleton.stories.tsx",56428],"./lib/lemon-ui/LemonSlider/LemonSlider.stories":["./frontend/src/lib/lemon-ui/LemonSlider/LemonSlider.stories.tsx",51554],"./lib/lemon-ui/LemonSlider/LemonSlider.stories.tsx":["./frontend/src/lib/lemon-ui/LemonSlider/LemonSlider.stories.tsx",51554],"./lib/lemon-ui/LemonSnack/LemonSnack.stories":["./frontend/src/lib/lemon-ui/LemonSnack/LemonSnack.stories.tsx",64014],"./lib/lemon-ui/LemonSnack/LemonSnack.stories.tsx":["./frontend/src/lib/lemon-ui/LemonSnack/LemonSnack.stories.tsx",64014],"./lib/lemon-ui/LemonSwitch/LemonSwitch.stories":["./frontend/src/lib/lemon-ui/LemonSwitch/LemonSwitch.stories.tsx",80844],"./lib/lemon-ui/LemonSwitch/LemonSwitch.stories.tsx":["./frontend/src/lib/lemon-ui/LemonSwitch/LemonSwitch.stories.tsx",80844],"./lib/lemon-ui/LemonTable/LemonTable.stories":["./frontend/src/lib/lemon-ui/LemonTable/LemonTable.stories.tsx",12398],"./lib/lemon-ui/LemonTable/LemonTable.stories.tsx":["./frontend/src/lib/lemon-ui/LemonTable/LemonTable.stories.tsx",12398],"./lib/lemon-ui/LemonTabs/LemonTabs.stories":["./frontend/src/lib/lemon-ui/LemonTabs/LemonTabs.stories.tsx",82821],"./lib/lemon-ui/LemonTabs/LemonTabs.stories.tsx":["./frontend/src/lib/lemon-ui/LemonTabs/LemonTabs.stories.tsx",82821],"./lib/lemon-ui/LemonTag/LemonTag.stories":["./frontend/src/lib/lemon-ui/LemonTag/LemonTag.stories.tsx",81809],"./lib/lemon-ui/LemonTag/LemonTag.stories.tsx":["./frontend/src/lib/lemon-ui/LemonTag/LemonTag.stories.tsx",81809],"./lib/lemon-ui/LemonTextArea/LemonTextArea.stories":["./frontend/src/lib/lemon-ui/LemonTextArea/LemonTextArea.stories.tsx",19801],"./lib/lemon-ui/LemonTextArea/LemonTextArea.stories.tsx":["./frontend/src/lib/lemon-ui/LemonTextArea/LemonTextArea.stories.tsx",19801],"./lib/lemon-ui/LemonToast/LemonToast.stories":["./frontend/src/lib/lemon-ui/LemonToast/LemonToast.stories.tsx",50962],"./lib/lemon-ui/LemonToast/LemonToast.stories.tsx":["./frontend/src/lib/lemon-ui/LemonToast/LemonToast.stories.tsx",50962],"./lib/lemon-ui/Lettermark/Lettermark.stories":["./frontend/src/lib/lemon-ui/Lettermark/Lettermark.stories.tsx",74973],"./lib/lemon-ui/Lettermark/Lettermark.stories.tsx":["./frontend/src/lib/lemon-ui/Lettermark/Lettermark.stories.tsx",74973],"./lib/lemon-ui/Link/Link.stories":["./frontend/src/lib/lemon-ui/Link/Link.stories.tsx",69106],"./lib/lemon-ui/Link/Link.stories.tsx":["./frontend/src/lib/lemon-ui/Link/Link.stories.tsx",69106],"./lib/lemon-ui/PaginationControl/PaginationControl.stories":["./frontend/src/lib/lemon-ui/PaginationControl/PaginationControl.stories.tsx",18587],"./lib/lemon-ui/PaginationControl/PaginationControl.stories.tsx":["./frontend/src/lib/lemon-ui/PaginationControl/PaginationControl.stories.tsx",18587],"./lib/lemon-ui/Popover/Popover.stories":["./frontend/src/lib/lemon-ui/Popover/Popover.stories.tsx",28089],"./lib/lemon-ui/Popover/Popover.stories.tsx":["./frontend/src/lib/lemon-ui/Popover/Popover.stories.tsx",28089],"./lib/lemon-ui/ProfilePicture/ProfileBubbles.stories":["./frontend/src/lib/lemon-ui/ProfilePicture/ProfileBubbles.stories.tsx",48379],"./lib/lemon-ui/ProfilePicture/ProfileBubbles.stories.tsx":["./frontend/src/lib/lemon-ui/ProfilePicture/ProfileBubbles.stories.tsx",48379],"./lib/lemon-ui/Spinner/Spinner.stories":["./frontend/src/lib/lemon-ui/Spinner/Spinner.stories.tsx",92168],"./lib/lemon-ui/Spinner/Spinner.stories.tsx":["./frontend/src/lib/lemon-ui/Spinner/Spinner.stories.tsx",92168],"./lib/lemon-ui/Splotch/Splotch.stories":["./frontend/src/lib/lemon-ui/Splotch/Splotch.stories.tsx",14989],"./lib/lemon-ui/Splotch/Splotch.stories.tsx":["./frontend/src/lib/lemon-ui/Splotch/Splotch.stories.tsx",14989],"./lib/lemon-ui/UploadedLogo/UploadedLogo.stories":["./frontend/src/lib/lemon-ui/UploadedLogo/UploadedLogo.stories.tsx",24378],"./lib/lemon-ui/UploadedLogo/UploadedLogo.stories.tsx":["./frontend/src/lib/lemon-ui/UploadedLogo/UploadedLogo.stories.tsx",24378],"./lib/lemon-ui/colors.stories":["./frontend/src/lib/lemon-ui/colors.stories.tsx",57297],"./lib/lemon-ui/colors.stories.tsx":["./frontend/src/lib/lemon-ui/colors.stories.tsx",57297],"./lib/lemon-ui/icons/icons.stories":["./frontend/src/lib/lemon-ui/icons/icons.stories.tsx",28462],"./lib/lemon-ui/icons/icons.stories.tsx":["./frontend/src/lib/lemon-ui/icons/icons.stories.tsx",28462],"./lib/lemon-ui/icons/icons3000.stories":["./frontend/src/lib/lemon-ui/icons/icons3000.stories.tsx",77309],"./lib/lemon-ui/icons/icons3000.stories.tsx":["./frontend/src/lib/lemon-ui/icons/icons3000.stories.tsx",77309],"./queries/nodes/DataNode/DataNode.stories":["./frontend/src/queries/nodes/DataNode/DataNode.stories.tsx",89290,71059],"./queries/nodes/DataNode/DataNode.stories.tsx":["./frontend/src/queries/nodes/DataNode/DataNode.stories.tsx",89290,71059],"./queries/nodes/DataTable/DataTable.stories":["./frontend/src/queries/nodes/DataTable/DataTable.stories.tsx",89290,44214],"./queries/nodes/DataTable/DataTable.stories.tsx":["./frontend/src/queries/nodes/DataTable/DataTable.stories.tsx",89290,44214],"./queries/nodes/InsightViz/PropertyGroupFilters/AndOrFilterSelect.stories":["./frontend/src/queries/nodes/InsightViz/PropertyGroupFilters/AndOrFilterSelect.stories.tsx",48419],"./queries/nodes/InsightViz/PropertyGroupFilters/AndOrFilterSelect.stories.tsx":["./frontend/src/queries/nodes/InsightViz/PropertyGroupFilters/AndOrFilterSelect.stories.tsx",48419],"./scenes/PreflightCheck/PreflightCheck.stories":["./frontend/src/scenes/PreflightCheck/PreflightCheck.stories.tsx",38396],"./scenes/PreflightCheck/PreflightCheck.stories.tsx":["./frontend/src/scenes/PreflightCheck/PreflightCheck.stories.tsx",38396],"./scenes/Unsubscribe/Unsubscribe.stories":["./frontend/src/scenes/Unsubscribe/Unsubscribe.stories.tsx",14047],"./scenes/Unsubscribe/Unsubscribe.stories.tsx":["./frontend/src/scenes/Unsubscribe/Unsubscribe.stories.tsx",14047],"./scenes/actions/Action.stories":["./frontend/src/scenes/actions/Action.stories.tsx",92412],"./scenes/actions/Action.stories.tsx":["./frontend/src/scenes/actions/Action.stories.tsx",92412],"./scenes/activity/explore/Events.stories":["./frontend/src/scenes/activity/explore/Events.stories.tsx",23046],"./scenes/activity/explore/Events.stories.tsx":["./frontend/src/scenes/activity/explore/Events.stories.tsx",23046],"./scenes/annotations/Annotations.stories":["./frontend/src/scenes/annotations/Annotations.stories.tsx",87121],"./scenes/annotations/Annotations.stories.tsx":["./frontend/src/scenes/annotations/Annotations.stories.tsx",87121],"./scenes/authentication/InviteSignup.stories":["./frontend/src/scenes/authentication/InviteSignup.stories.tsx",41694],"./scenes/authentication/InviteSignup.stories.tsx":["./frontend/src/scenes/authentication/InviteSignup.stories.tsx",41694],"./scenes/authentication/Login.stories":["./frontend/src/scenes/authentication/Login.stories.tsx",60711],"./scenes/authentication/Login.stories.tsx":["./frontend/src/scenes/authentication/Login.stories.tsx",60711],"./scenes/authentication/PasswordReset.stories":["./frontend/src/scenes/authentication/PasswordReset.stories.tsx",16680],"./scenes/authentication/PasswordReset.stories.tsx":["./frontend/src/scenes/authentication/PasswordReset.stories.tsx",16680],"./scenes/authentication/PasswordResetComplete.stories":["./frontend/src/scenes/authentication/PasswordResetComplete.stories.tsx",46925],"./scenes/authentication/PasswordResetComplete.stories.tsx":["./frontend/src/scenes/authentication/PasswordResetComplete.stories.tsx",46925],"./scenes/authentication/signup/Signup.stories":["./frontend/src/scenes/authentication/signup/Signup.stories.tsx",11854],"./scenes/authentication/signup/Signup.stories.tsx":["./frontend/src/scenes/authentication/signup/Signup.stories.tsx",11854],"./scenes/authentication/signup/verify-email/VerifyEmail.stories":["./frontend/src/scenes/authentication/signup/verify-email/VerifyEmail.stories.tsx",9416],"./scenes/authentication/signup/verify-email/VerifyEmail.stories.tsx":["./frontend/src/scenes/authentication/signup/verify-email/VerifyEmail.stories.tsx",9416],"./scenes/billing/Billing.stories":["./frontend/src/scenes/billing/Billing.stories.tsx",32375],"./scenes/billing/Billing.stories.tsx":["./frontend/src/scenes/billing/Billing.stories.tsx",32375],"./scenes/billing/BillingProduct.stories":["./frontend/src/scenes/billing/BillingProduct.stories.tsx",22244],"./scenes/billing/BillingProduct.stories.tsx":["./frontend/src/scenes/billing/BillingProduct.stories.tsx",22244],"./scenes/cohorts/CohortFilters/CohortCriteriaRowBuilder.stories":["./frontend/src/scenes/cohorts/CohortFilters/CohortCriteriaRowBuilder.stories.tsx",31340],"./scenes/cohorts/CohortFilters/CohortCriteriaRowBuilder.stories.tsx":["./frontend/src/scenes/cohorts/CohortFilters/CohortCriteriaRowBuilder.stories.tsx",31340],"./scenes/cohorts/CohortFilters/CohortNumberField.stories":["./frontend/src/scenes/cohorts/CohortFilters/CohortNumberField.stories.tsx",91736],"./scenes/cohorts/CohortFilters/CohortNumberField.stories.tsx":["./frontend/src/scenes/cohorts/CohortFilters/CohortNumberField.stories.tsx",91736],"./scenes/cohorts/CohortFilters/CohortPersonPropertiesValuesField.stories":["./frontend/src/scenes/cohorts/CohortFilters/CohortPersonPropertiesValuesField.stories.tsx",79799],"./scenes/cohorts/CohortFilters/CohortPersonPropertiesValuesField.stories.tsx":["./frontend/src/scenes/cohorts/CohortFilters/CohortPersonPropertiesValuesField.stories.tsx",79799],"./scenes/cohorts/CohortFilters/CohortSelectorField.stories":["./frontend/src/scenes/cohorts/CohortFilters/CohortSelectorField.stories.tsx",36795],"./scenes/cohorts/CohortFilters/CohortSelectorField.stories.tsx":["./frontend/src/scenes/cohorts/CohortFilters/CohortSelectorField.stories.tsx",36795],"./scenes/cohorts/CohortFilters/CohortTaxonomicField.stories":["./frontend/src/scenes/cohorts/CohortFilters/CohortTaxonomicField.stories.tsx",97562],"./scenes/cohorts/CohortFilters/CohortTaxonomicField.stories.tsx":["./frontend/src/scenes/cohorts/CohortFilters/CohortTaxonomicField.stories.tsx",97562],"./scenes/cohorts/CohortFilters/CohortTextField.stories":["./frontend/src/scenes/cohorts/CohortFilters/CohortTextField.stories.tsx",29179],"./scenes/cohorts/CohortFilters/CohortTextField.stories.tsx":["./frontend/src/scenes/cohorts/CohortFilters/CohortTextField.stories.tsx",29179],"./scenes/dashboard/DashboardInsightCardLegend.stories":["./frontend/src/scenes/dashboard/DashboardInsightCardLegend.stories.tsx",48780],"./scenes/dashboard/DashboardInsightCardLegend.stories.tsx":["./frontend/src/scenes/dashboard/DashboardInsightCardLegend.stories.tsx",48780],"./scenes/dashboard/DashboardTemplateEditor.stories":["./frontend/src/scenes/dashboard/DashboardTemplateEditor.stories.tsx",47858],"./scenes/dashboard/DashboardTemplateEditor.stories.tsx":["./frontend/src/scenes/dashboard/DashboardTemplateEditor.stories.tsx",47858],"./scenes/dashboard/Dashboards.stories":["./frontend/src/scenes/dashboard/Dashboards.stories.tsx",29749,84851],"./scenes/dashboard/Dashboards.stories.tsx":["./frontend/src/scenes/dashboard/Dashboards.stories.tsx",29749,84851],"./scenes/data-management/DataManagementScene.stories":["./frontend/src/scenes/data-management/DataManagementScene.stories.tsx",82250],"./scenes/data-management/DataManagementScene.stories.tsx":["./frontend/src/scenes/data-management/DataManagementScene.stories.tsx",82250],"./scenes/early-access-features/EarlyAccessFeatures.stories":["./frontend/src/scenes/early-access-features/EarlyAccessFeatures.stories.tsx",57195],"./scenes/early-access-features/EarlyAccessFeatures.stories.tsx":["./frontend/src/scenes/early-access-features/EarlyAccessFeatures.stories.tsx",57195],"./scenes/error-tracking/ErrorTracking.stories":["./frontend/src/scenes/error-tracking/ErrorTracking.stories.tsx",91480],"./scenes/error-tracking/ErrorTracking.stories.tsx":["./frontend/src/scenes/error-tracking/ErrorTracking.stories.tsx",91480],"./scenes/experiments/Experiment.stories":["./frontend/src/scenes/experiments/Experiment.stories.tsx",63486],"./scenes/experiments/Experiment.stories.tsx":["./frontend/src/scenes/experiments/Experiment.stories.tsx",63486],"./scenes/feature-flags/FeatureFlagCodeInstructions.stories":["./frontend/src/scenes/feature-flags/FeatureFlagCodeInstructions.stories.tsx",86983],"./scenes/feature-flags/FeatureFlagCodeInstructions.stories.tsx":["./frontend/src/scenes/feature-flags/FeatureFlagCodeInstructions.stories.tsx",86983],"./scenes/feature-flags/FeatureFlags.stories":["./frontend/src/scenes/feature-flags/FeatureFlags.stories.tsx",16023],"./scenes/feature-flags/FeatureFlags.stories.tsx":["./frontend/src/scenes/feature-flags/FeatureFlags.stories.tsx",16023],"./scenes/funnels/FunnelTooltip.stories":["./frontend/src/scenes/funnels/FunnelTooltip.stories.tsx",49136],"./scenes/funnels/FunnelTooltip.stories.tsx":["./frontend/src/scenes/funnels/FunnelTooltip.stories.tsx",49136],"./scenes/heatmaps/HeatmapsBrowser.stories":["./frontend/src/scenes/heatmaps/HeatmapsBrowser.stories.tsx",86721],"./scenes/heatmaps/HeatmapsBrowser.stories.tsx":["./frontend/src/scenes/heatmaps/HeatmapsBrowser.stories.tsx",86721],"./scenes/insights/EmptyStates/EmptyStates.stories":["./frontend/src/scenes/insights/EmptyStates/EmptyStates.stories.tsx",17723],"./scenes/insights/EmptyStates/EmptyStates.stories.tsx":["./frontend/src/scenes/insights/EmptyStates/EmptyStates.stories.tsx",17723],"./scenes/insights/InsightTooltip/InsightTooltip.stories":["./frontend/src/scenes/insights/InsightTooltip/InsightTooltip.stories.tsx",40961],"./scenes/insights/InsightTooltip/InsightTooltip.stories.tsx":["./frontend/src/scenes/insights/InsightTooltip/InsightTooltip.stories.tsx",40961],"./scenes/insights/Insights.stories":["./frontend/src/scenes/insights/Insights.stories.tsx",18146,53342,26299,74653,15778],"./scenes/insights/Insights.stories.tsx":["./frontend/src/scenes/insights/Insights.stories.tsx",18146,53342,26299,74653,15778],"./scenes/insights/filters/ActionFilter/ActionFilter.stories":["./frontend/src/scenes/insights/filters/ActionFilter/ActionFilter.stories.tsx",53342,6396],"./scenes/insights/filters/ActionFilter/ActionFilter.stories.tsx":["./frontend/src/scenes/insights/filters/ActionFilter/ActionFilter.stories.tsx",53342,6396],"./scenes/insights/views/BoldNumber/Textfit.stories":["./frontend/src/scenes/insights/views/BoldNumber/Textfit.stories.tsx",5180],"./scenes/insights/views/BoldNumber/Textfit.stories.tsx":["./frontend/src/scenes/insights/views/BoldNumber/Textfit.stories.tsx",5180],"./scenes/insights/views/Funnels/FunnelCorrelationTable.stories":["./frontend/src/scenes/insights/views/Funnels/FunnelCorrelationTable.stories.tsx",16495],"./scenes/insights/views/Funnels/FunnelCorrelationTable.stories.tsx":["./frontend/src/scenes/insights/views/Funnels/FunnelCorrelationTable.stories.tsx",16495],"./scenes/insights/views/Funnels/FunnelPropertyCorrelationTable.stories":["./frontend/src/scenes/insights/views/Funnels/FunnelPropertyCorrelationTable.stories.tsx",38639],"./scenes/insights/views/Funnels/FunnelPropertyCorrelationTable.stories.tsx":["./frontend/src/scenes/insights/views/Funnels/FunnelPropertyCorrelationTable.stories.tsx",38639],"./scenes/insights/views/InsightsTable/InsightsTable.stories":["./frontend/src/scenes/insights/views/InsightsTable/InsightsTable.stories.tsx",53342,50991],"./scenes/insights/views/InsightsTable/InsightsTable.stories.tsx":["./frontend/src/scenes/insights/views/InsightsTable/InsightsTable.stories.tsx",53342,50991],"./scenes/max/Max.stories":["./frontend/src/scenes/max/Max.stories.tsx",73086],"./scenes/max/Max.stories.tsx":["./frontend/src/scenes/max/Max.stories.tsx",73086],"./scenes/notebooks/Notebook/Notebook.stories":["./frontend/src/scenes/notebooks/Notebook/Notebook.stories.tsx",1808],"./scenes/notebooks/Notebook/Notebook.stories.tsx":["./frontend/src/scenes/notebooks/Notebook/Notebook.stories.tsx",1808],"./scenes/notebooks/NotebookSelectButton/NotebookSelectButton.stories":["./frontend/src/scenes/notebooks/NotebookSelectButton/NotebookSelectButton.stories.tsx",93070],"./scenes/notebooks/NotebookSelectButton/NotebookSelectButton.stories.tsx":["./frontend/src/scenes/notebooks/NotebookSelectButton/NotebookSelectButton.stories.tsx",93070],"./scenes/onboarding/Onboarding.stories":["./frontend/src/scenes/onboarding/Onboarding.stories.tsx",6875,36501],"./scenes/onboarding/Onboarding.stories.tsx":["./frontend/src/scenes/onboarding/Onboarding.stories.tsx",6875,36501],"./scenes/persons-management/PersonsManagementScene.stories":["./frontend/src/scenes/persons-management/PersonsManagementScene.stories.tsx",68330],"./scenes/persons-management/PersonsManagementScene.stories.tsx":["./frontend/src/scenes/persons-management/PersonsManagementScene.stories.tsx",68330],"./scenes/pipeline/Pipeline.stories":["./frontend/src/scenes/pipeline/Pipeline.stories.tsx",92991],"./scenes/pipeline/Pipeline.stories.tsx":["./frontend/src/scenes/pipeline/Pipeline.stories.tsx",92991],"./scenes/products/Products.stories":["./frontend/src/scenes/products/Products.stories.tsx",16116],"./scenes/products/Products.stories.tsx":["./frontend/src/scenes/products/Products.stories.tsx",16116],"./scenes/project-homepage/ProjectHomepage.stories":["./frontend/src/scenes/project-homepage/ProjectHomepage.stories.tsx",29749,82723],"./scenes/project-homepage/ProjectHomepage.stories.tsx":["./frontend/src/scenes/project-homepage/ProjectHomepage.stories.tsx",29749,82723],"./scenes/project-homepage/WatchNextList.stories":["./frontend/src/scenes/project-homepage/WatchNextList.stories.tsx",52425],"./scenes/project-homepage/WatchNextList.stories.tsx":["./frontend/src/scenes/project-homepage/WatchNextList.stories.tsx",52425],"./scenes/saved-insights/SavedInsights.stories":["./frontend/src/scenes/saved-insights/SavedInsights.stories.tsx",26299,26657],"./scenes/saved-insights/SavedInsights.stories.tsx":["./frontend/src/scenes/saved-insights/SavedInsights.stories.tsx",26299,26657],"./scenes/session-recordings/SessionsRecordings-player-failure.stories":["./frontend/src/scenes/session-recordings/SessionsRecordings-player-failure.stories.tsx",23237,34377],"./scenes/session-recordings/SessionsRecordings-player-failure.stories.tsx":["./frontend/src/scenes/session-recordings/SessionsRecordings-player-failure.stories.tsx",23237,34377],"./scenes/session-recordings/SessionsRecordings-player-success.stories":["./frontend/src/scenes/session-recordings/SessionsRecordings-player-success.stories.tsx",23237,38383],"./scenes/session-recordings/SessionsRecordings-player-success.stories.tsx":["./frontend/src/scenes/session-recordings/SessionsRecordings-player-success.stories.tsx",23237,38383],"./scenes/session-recordings/SessionsRecordings-playlist-listing.stories":["./frontend/src/scenes/session-recordings/SessionsRecordings-playlist-listing.stories.tsx",70138],"./scenes/session-recordings/SessionsRecordings-playlist-listing.stories.tsx":["./frontend/src/scenes/session-recordings/SessionsRecordings-playlist-listing.stories.tsx",70138],"./scenes/session-recordings/apm/playerInspector/ItemPerformanceEvent.stories":["./frontend/src/scenes/session-recordings/apm/playerInspector/ItemPerformanceEvent.stories.tsx",739],"./scenes/session-recordings/apm/playerInspector/ItemPerformanceEvent.stories.tsx":["./frontend/src/scenes/session-recordings/apm/playerInspector/ItemPerformanceEvent.stories.tsx",739],"./scenes/session-recordings/player/inspector/components/ItemComment.stories":["./frontend/src/scenes/session-recordings/player/inspector/components/ItemComment.stories.tsx",70904],"./scenes/session-recordings/player/inspector/components/ItemComment.stories.tsx":["./frontend/src/scenes/session-recordings/player/inspector/components/ItemComment.stories.tsx",70904],"./scenes/session-recordings/player/inspector/components/ItemEvent.stories":["./frontend/src/scenes/session-recordings/player/inspector/components/ItemEvent.stories.tsx",69269],"./scenes/session-recordings/player/inspector/components/ItemEvent.stories.tsx":["./frontend/src/scenes/session-recordings/player/inspector/components/ItemEvent.stories.tsx",69269],"./scenes/session-recordings/player/inspector/components/NavigationItem.stories":["./frontend/src/scenes/session-recordings/player/inspector/components/NavigationItem.stories.tsx",98065],"./scenes/session-recordings/player/inspector/components/NavigationItem.stories.tsx":["./frontend/src/scenes/session-recordings/player/inspector/components/NavigationItem.stories.tsx",98065],"./scenes/session-recordings/player/inspector/components/Timing/NetworkRequestTiming.stories":["./frontend/src/scenes/session-recordings/player/inspector/components/Timing/NetworkRequestTiming.stories.tsx",16115],"./scenes/session-recordings/player/inspector/components/Timing/NetworkRequestTiming.stories.tsx":["./frontend/src/scenes/session-recordings/player/inspector/components/Timing/NetworkRequestTiming.stories.tsx",16115],"./scenes/session-recordings/playlist/SessionRecordingPreview.stories":["./frontend/src/scenes/session-recordings/playlist/SessionRecordingPreview.stories.tsx",74710],"./scenes/session-recordings/playlist/SessionRecordingPreview.stories.tsx":["./frontend/src/scenes/session-recordings/playlist/SessionRecordingPreview.stories.tsx",74710],"./scenes/settings/SettingsScene.stories":["./frontend/src/scenes/settings/SettingsScene.stories.tsx",94678],"./scenes/settings/SettingsScene.stories.tsx":["./frontend/src/scenes/settings/SettingsScene.stories.tsx",94678],"./scenes/settings/environment/SlackIntegration.stories":["./frontend/src/scenes/settings/environment/SlackIntegration.stories.tsx",71251],"./scenes/settings/environment/SlackIntegration.stories.tsx":["./frontend/src/scenes/settings/environment/SlackIntegration.stories.tsx",71251],"./scenes/settings/organization/Invites.stories":["./frontend/src/scenes/settings/organization/Invites.stories.tsx",72134],"./scenes/settings/organization/Invites.stories.tsx":["./frontend/src/scenes/settings/organization/Invites.stories.tsx",72134],"./scenes/settings/organization/VerifiedDomains/SSOSelect.stories":["./frontend/src/scenes/settings/organization/VerifiedDomains/SSOSelect.stories.tsx",69700],"./scenes/settings/organization/VerifiedDomains/SSOSelect.stories.tsx":["./frontend/src/scenes/settings/organization/VerifiedDomains/SSOSelect.stories.tsx",69700],"./scenes/surveys/Surveys.stories":["./frontend/src/scenes/surveys/Surveys.stories.tsx",10749],"./scenes/surveys/Surveys.stories.tsx":["./frontend/src/scenes/surveys/Surveys.stories.tsx",10749],"./scenes/trends/persons-modal/PersonsModal.stories":["./frontend/src/scenes/trends/persons-modal/PersonsModal.stories.tsx",95866],"./scenes/trends/persons-modal/PersonsModal.stories.tsx":["./frontend/src/scenes/trends/persons-modal/PersonsModal.stories.tsx",95866],"./scenes/web-analytics/SessionAttributionExplorer/sessionAttributionExplorer.stories":["./frontend/src/scenes/web-analytics/SessionAttributionExplorer/sessionAttributionExplorer.stories.tsx",59001],"./scenes/web-analytics/SessionAttributionExplorer/sessionAttributionExplorer.stories.tsx":["./frontend/src/scenes/web-analytics/SessionAttributionExplorer/sessionAttributionExplorer.stories.tsx",59001],"./stories/Hello.stories.mdx":["./frontend/src/stories/Hello.stories.mdx",20527],"./stories/How to add tabs to a scene.stories.mdx":["./frontend/src/stories/How to add tabs to a scene.stories.mdx",8056],"./stories/How to build a form.stories.mdx":["./frontend/src/stories/How to build a form.stories.mdx",92029],"./stories/How to build a scene.stories.mdx":["./frontend/src/stories/How to build a scene.stories.mdx",73570],"./stories/How to create stories.stories.mdx":["./frontend/src/stories/How to create stories.stories.mdx",17549],"./stories/How to mock requests.stories.mdx":["./frontend/src/stories/How to mock requests.stories.mdx",79960],"./stories/How to use components.stories.mdx":["./frontend/src/stories/How to use components.stories.mdx",23384],"./stories/Lemon UI.stories.mdx":["./frontend/src/stories/Lemon UI.stories.mdx",32728],"./stories/Missing components.stories.mdx":["./frontend/src/stories/Missing components.stories.mdx",43342],"./stories/Missing scenes.stories.mdx":["./frontend/src/stories/Missing scenes.stories.mdx",40892],"./toolbar/Toolbar.stories":["./frontend/src/toolbar/Toolbar.stories.tsx",19651,75576,45021],"./toolbar/Toolbar.stories.tsx":["./frontend/src/toolbar/Toolbar.stories.tsx",19651,75576,45021]};function webpackAsyncContext(req){if(!__webpack_require__.o(map,req))return Promise.resolve().then(()=>{var e=Error("Cannot find module '"+req+"'");throw e.code="MODULE_NOT_FOUND",e});var ids=map[req],id=ids[0];return Promise.all(ids.slice(1).map(__webpack_require__.e)).then(()=>__webpack_require__(id))}webpackAsyncContext.keys=()=>Object.keys(map),webpackAsyncContext.id="./frontend/src lazy recursive ^\\.\\/.*$ include: (?:\\/frontend\\/src(?:\\/(?%21\\.)(?:(?:(?%21(?:^%7C\\/)\\.).)*?)\\/%7C\\/%7C$)(?%21\\.)(?=.)[^/]*?\\.stories\\.(js%7Cjsx%7Cts%7Ctsx%7Cmdx))$",module.exports=webpackAsyncContext},"./.storybook/preview.tsx":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{decorators:()=>decorators,default:()=>_storybook_preview,parameters:()=>parameters}),__webpack_require__("./frontend/src/styles/index.tsx");var dist=__webpack_require__("./node_modules/.pnpm/@storybook+blocks@7.6.4_@types+react-dom@18.2.14_@types+react@17.0.52_react-dom@18.2.0_react@18.2.0/node_modules/@storybook/blocks/dist/index.mjs"),browser=__webpack_require__("./frontend/src/mocks/browser.tsx"),esm_exports=__webpack_require__("./node_modules/.pnpm/@sentry+core@7.112.1/node_modules/@sentry/core/esm/exports.js"),sdk=__webpack_require__("./node_modules/.pnpm/@sentry+react@7.112.1_react@18.2.0/node_modules/@sentry/react/esm/sdk.js"),constants=__webpack_require__("./frontend/src/lib/constants.tsx"),dist_module=__webpack_require__("./node_modules/.pnpm/posthog-js@1.177.0/node_modules/posthog-js/dist/module.js");let configWithSentry=config=>(window.SENTRY_DSN&&(config.on_xhr_error=failedRequest=>{let status=failedRequest.status,statusText=failedRequest.statusText||"no status text in error";esm_exports.Tb(Error(`Failed with status ${status} while sending to PostHog. Message: ${statusText}`),{tags:{status,statusText}})}),config);var features=__webpack_require__("./frontend/src/mocks/features.ts"),node_modules_history=__webpack_require__("./node_modules/.pnpm/history@5.3.0/node_modules/history/index.js"),initKea=__webpack_require__("./frontend/src/initKea.ts"),lib=__webpack_require__("./node_modules/.pnpm/kea-router@3.2.0_kea@3.1.5/node_modules/kea-router/lib/index.js"),index_esm=__webpack_require__("./node_modules/.pnpm/kea@3.1.5_react@18.2.0/node_modules/kea/lib/index.esm.js"),react=__webpack_require__("./node_modules/.pnpm/react@18.2.0/node_modules/react/index.js"),App=__webpack_require__("./frontend/src/scenes/App.tsx"),featureFlagLogic=__webpack_require__("./frontend/src/lib/logic/featureFlagLogic.ts"),teamLogic=__webpack_require__("./frontend/src/scenes/teamLogic.tsx"),userLogic=__webpack_require__("./frontend/src/scenes/userLogic.ts"),projectLogic=__webpack_require__("./frontend/src/scenes/projectLogic.ts"),jsx_runtime=__webpack_require__("./node_modules/.pnpm/react@18.2.0/node_modules/react/jsx-runtime.js");function KeaStory(_ref){let{children}=_ref,[didReset,setDidReset]=(0,react.useState)(!1);return(0,react.useEffect)(()=>{didReset||(function(){browser.KK.resetHandlers();let history=(0,node_modules_history.PP)({});history.pushState=history.push,history.replaceState=history.replace,(0,initKea.J1)({routerLocation:history.location,routerHistory:history}),featureFlagLogic.h.mount(),teamLogic.H.mount(),projectLogic.K.mount(),userLogic.userLogic.mount(),lib.router.mount();let{store}=(0,index_esm.getContext)();store.dispatch({type:"storybook init"})}(),setDidReset(!0))},[didReset]),didReset?children||(0,jsx_runtime.jsx)(App.g,{}):null}var mockdate=__webpack_require__("./node_modules/.pnpm/mockdate@3.0.5/node_modules/mockdate/lib/mockdate.js"),mockdate_default=__webpack_require__.n(mockdate),handlers=__webpack_require__("./frontend/src/mocks/handlers.ts"),apiHost=__webpack_require__("./frontend/src/lib/utils/apiHost.ts"),api_mock=__webpack_require__("./frontend/src/lib/api.mock.ts");browser.KK.start({quiet:!0,onUnhandledRequest(request,print){["/images/"].some(path=>request.url.pathname.startsWith(path))||print.warning()}}),window.__mockServiceWorker=browser.KK,window.POSTHOG_APP_CONTEXT={anonymous:!1,current_team:api_mock.k3,current_project:api_mock.w8,current_user:void 0,default_event_name:"$pageview",persisted_feature_flags:[],commit_sha:void 0,preflight:null,switched_team:null},window.JS_POSTHOG_HOST=(0,apiHost.Y)(),function(){if(window.JS_POSTHOG_API_KEY){dist_module.ZP.init(window.JS_POSTHOG_API_KEY,configWithSentry({opt_out_useragent_filter:"localhost"===window.location.hostname,api_host:window.JS_POSTHOG_HOST,ui_host:window.JS_POSTHOG_UI_HOST,rageclick:!0,persistence:"localStorage+cookie",bootstrap:window.POSTHOG_USER_IDENTITY_WITH_FLAGS?window.POSTHOG_USER_IDENTITY_WITH_FLAGS:{},opt_in_site_apps:!0,api_transport:"fetch",loaded:posthog=>{posthog.sessionRecording&&(posthog.sessionRecording._forceAllowLocalhostNetworkCapture=!0),window.IMPERSONATED_SESSION?posthog.opt_out_capturing():posthog.opt_in_capturing()},scroll_root_selector:["main","html"],autocapture:{capture_copied_text:!0},person_profiles:"always",_onCapture:window._cypress_posthog_captures?(_,event)=>window._cypress_posthog_captures.push(event):void 0}));let Cypress=window.Cypress;Cypress&&Object.entries(Cypress.env()).forEach(_ref=>{let[key,value]=_ref;key.startsWith("POSTHOG_PROPERTY_")&&dist_module.ZP.register_for_session({[key.replace("POSTHOG_PROPERTY_","E2E_TESTING_").toLowerCase()]:value})});let shouldResetSessionOnLoad=dist_module.ZP.getFeatureFlag(constants.y8.SESSION_RESET_ON_LOAD);shouldResetSessionOnLoad&&dist_module.ZP.sessionManager?.resetSessionId(),window.posthog=dist_module.ZP}else dist_module.ZP.init("fake token",{autocapture:!1,loaded:function(ph){ph.opt_out_capturing()}});window.SENTRY_DSN&&sdk.S({dsn:window.SENTRY_DSN,environment:window.SENTRY_ENVIRONMENT,...location.host.includes("posthog.com")&&{integrations:[new dist_module.ZP.SentryIntegration(dist_module.ZP,"posthog",1899813,void 0,"*")]}})}();let parameters={actions:{argTypesRegex:"^on[A-Z].*",disabled:!0},controls:{matchers:{color:/(background|color)$/i,date:/Date$/}},options:{showPanel:!1,storySort:{method:"alphabetical",order:["Lemon UI",["Overview","Utilities","Icons"],"Components","Forms",["Field"],"Filters","Layout"]}},viewMode:"docs",docs:{source:{state:"closed"}},msw:{mocks:handlers.jI}},decorators=[Story=>((0,features.y)([]),(0,jsx_runtime.jsx)(KeaStory,{children:(0,jsx_runtime.jsx)(Story,{})})),(Story,_ref)=>{let{parameters}=_ref;return parameters.mockDate?mockdate_default().set(parameters.mockDate):mockdate_default().reset(),(0,jsx_runtime.jsx)(Story,{})},(Story,_ref)=>{let{parameters}=_ref;return parameters.featureFlags&&(0,browser.zt)(parameters.featureFlags),(0,jsx_runtime.jsx)(Story,{})},(Story,context)=>{let theme=context.globals.theme;return document.body.setAttribute("theme","dark"===theme?"dark":"light"),(0,jsx_runtime.jsx)(Story,{})}],_storybook_preview={parameters:{actions:{argTypesRegex:"^on[A-Z].*"},controls:{matchers:{color:/(background|color)$/i,date:/Date$/}},docs:{page:()=>(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[(0,jsx_runtime.jsx)(dist.Dx,{}),(0,jsx_runtime.jsx)(dist.QE,{}),(0,jsx_runtime.jsx)(dist.dk,{}),(0,jsx_runtime.jsx)(dist.sq,{}),(0,jsx_runtime.jsx)(dist.ZX,{}),(0,jsx_runtime.jsx)(dist.fQ,{})]})}},globalTypes:{theme:{description:"",defaultValue:"light",toolbar:{title:"Theme",items:[{value:"light",icon:"sun",title:"Light"},{value:"dark",icon:"moon",title:"Dark"}],dynamicTitle:!0}}}}},"./frontend/@posthog/apps-common/src/index.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{IZ:()=>scenes_persons_PersonDisplay__WEBPACK_IMPORTED_MODULE_4__.I,Tk:()=>scenes_persons_PersonDisplay__WEBPACK_IMPORTED_MODULE_4__.T,hi:()=>api,jk:()=>scenes_urls__WEBPACK_IMPORTED_MODULE_5__.j,rU:()=>lib_lemon_ui_Link__WEBPACK_IMPORTED_MODULE_2__.r,w4:()=>lib_components_TZLabel__WEBPACK_IMPORTED_MODULE_3__.w}),__webpack_require__("./frontend/src/styles/index.tsx"),__webpack_require__("./frontend/src/initKea.ts");var lib_lemon_ui_Link__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./frontend/src/lib/lemon-ui/Link/index.ts"),lib_components_TZLabel__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./frontend/src/lib/components/TZLabel/index.tsx"),scenes_persons_PersonDisplay__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__("./frontend/src/scenes/persons/PersonDisplay.tsx"),scenes_urls__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__("./frontend/src/scenes/urls.ts"),lib_api__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__("./frontend/src/lib/api.ts");let api=lib_api__WEBPACK_IMPORTED_MODULE_6__.ZP},"./frontend/@posthog/lemon-ui/src/index.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{Mo:()=>LemonBadge.M,Vp:()=>LemonBanner.V,Jp:()=>lemon_ui_LemonButton.J,$K:()=>lemon_ui_LemonButton.$,he:()=>LemonCalendarSelect.he,Mi:()=>LemonCard.M,Hw:()=>LemonCheckbox.H,JL:()=>LemonCollapse.J,dn:()=>LemonDialog.d,p2:()=>LemonDivider.p,Qw:()=>LemonDropdown.Q,mH:()=>LemonFileInput.m,DF:()=>LemonInput.D,nt:()=>LemonInputSelect.n,HQ:()=>LemonLabel.H,d6:()=>LemonMenu.d,fQ:()=>LemonModal.f,Qs:()=>LemonRow.Q,P4:()=>LemonSegmentedButton.P,Yv:()=>LemonSelect.Yv,yW:()=>LemonSkeleton.y,LV:()=>LemonSnack.L,f4:()=>LemonSwitch.f,g3:()=>LemonTable.g,TP:()=>LemonTabs.T,oe:()=>LemonTag.o,_V:()=>LemonTextArea._,X7:()=>LemonTextArea.X,_j:()=>LemonWidget._,BR:()=>Lettermark.B,rU:()=>Link.r,R9:()=>PaginationControl.R,J2:()=>lemon_ui_Popover.J2,Sn:()=>lemon_ui_Popover.Sn,YY:()=>ProfilePicture.Y,$j:()=>Spinner.$,t2:()=>Spinner.t,u:()=>Tooltip.u,UJ:()=>LemonToast.U,h0:()=>PaginationControl.h}),__webpack_require__("./frontend/src/styles/global.scss"),__webpack_require__("./frontend/src/lib/lemon-ui/hooks.ts");var injectStylesIntoStyleTag=__webpack_require__("./node_modules/.pnpm/style-loader@2.0.0_webpack@5.88.2/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),injectStylesIntoStyleTag_default=__webpack_require__.n(injectStylesIntoStyleTag),LemonActionableTooltip=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/lemon-ui/LemonActionableTooltip/LemonActionableTooltip.scss"),LemonActionableTooltip_default=__webpack_require__.n(LemonActionableTooltip),options={};options.insert="head",options.singleton=!1,injectStylesIntoStyleTag_default()(LemonActionableTooltip_default(),options),LemonActionableTooltip_default().locals,__webpack_require__("./node_modules/.pnpm/@posthog+icons@0.8.5_react-dom@18.2.0_react@18.2.0/node_modules/@posthog/icons/dist/posthog-icons.es.js"),__webpack_require__("./frontend/src/lib/lemon-ui/icons/index.ts"),__webpack_require__("./frontend/src/lib/lemon-ui/Popover/Popover.tsx"),__webpack_require__("./node_modules/.pnpm/react@18.2.0/node_modules/react/jsx-runtime.js");var LemonBadge=__webpack_require__("./frontend/src/lib/lemon-ui/LemonBadge/index.ts"),LemonBanner=__webpack_require__("./frontend/src/lib/lemon-ui/LemonBanner/index.ts"),lemon_ui_LemonButton=__webpack_require__("./frontend/src/lib/lemon-ui/LemonButton/index.ts");__webpack_require__("./frontend/src/lib/lemon-ui/LemonCalendar/LemonCalendar.tsx");var LemonCalendarSelect=__webpack_require__("./frontend/src/lib/lemon-ui/LemonCalendar/LemonCalendarSelect.tsx");__webpack_require__("./frontend/src/lib/lemon-ui/LemonCalendarRange/LemonCalendarRange.tsx"),__webpack_require__("./frontend/src/lib/lemon-ui/LemonCalendarRange/LemonCalendarRangeInline.tsx");var LemonCard=__webpack_require__("./frontend/src/lib/lemon-ui/LemonCard/LemonCard.tsx"),LemonCheckbox=__webpack_require__("./frontend/src/lib/lemon-ui/LemonCheckbox/index.ts"),LemonCollapse=__webpack_require__("./frontend/src/lib/lemon-ui/LemonCollapse/index.ts"),LemonDialog=__webpack_require__("./frontend/src/lib/lemon-ui/LemonDialog/index.ts"),LemonDivider=__webpack_require__("./frontend/src/lib/lemon-ui/LemonDivider/index.ts"),LemonDropdown=__webpack_require__("./frontend/src/lib/lemon-ui/LemonDropdown/index.ts"),LemonFileInput=__webpack_require__("./frontend/src/lib/lemon-ui/LemonFileInput/index.ts"),LemonInput=__webpack_require__("./frontend/src/lib/lemon-ui/LemonInput/index.ts"),LemonLabel=__webpack_require__("./frontend/src/lib/lemon-ui/LemonLabel/index.ts"),LemonMenu=__webpack_require__("./frontend/src/lib/lemon-ui/LemonMenu/index.ts"),LemonModal=__webpack_require__("./frontend/src/lib/lemon-ui/LemonModal/index.ts"),LemonRow=__webpack_require__("./frontend/src/lib/lemon-ui/LemonRow/index.ts"),LemonSegmentedButton=__webpack_require__("./frontend/src/lib/lemon-ui/LemonSegmentedButton/index.ts"),LemonSelect=__webpack_require__("./frontend/src/lib/lemon-ui/LemonSelect/index.ts"),LemonInputSelect=__webpack_require__("./frontend/src/lib/lemon-ui/LemonInputSelect/index.ts"),LemonSkeleton=__webpack_require__("./frontend/src/lib/lemon-ui/LemonSkeleton/index.ts"),LemonSnack=__webpack_require__("./frontend/src/lib/lemon-ui/LemonSnack/index.ts"),LemonSwitch=__webpack_require__("./frontend/src/lib/lemon-ui/LemonSwitch/index.ts"),LemonTable=__webpack_require__("./frontend/src/lib/lemon-ui/LemonTable/index.ts"),LemonTabs=__webpack_require__("./frontend/src/lib/lemon-ui/LemonTabs/index.ts"),LemonTag=__webpack_require__("./frontend/src/lib/lemon-ui/LemonTag/index.ts"),LemonTextArea=__webpack_require__("./frontend/src/lib/lemon-ui/LemonTextArea/index.ts"),LemonToast=__webpack_require__("./frontend/src/lib/lemon-ui/LemonToast/index.ts"),LemonWidget=__webpack_require__("./frontend/src/lib/lemon-ui/LemonWidget/index.ts"),Lettermark=__webpack_require__("./frontend/src/lib/lemon-ui/Lettermark/index.ts"),Link=__webpack_require__("./frontend/src/lib/lemon-ui/Link/index.ts"),PaginationControl=__webpack_require__("./frontend/src/lib/lemon-ui/PaginationControl/index.ts"),lemon_ui_Popover=__webpack_require__("./frontend/src/lib/lemon-ui/Popover/index.ts"),ProfilePicture=__webpack_require__("./frontend/src/lib/lemon-ui/ProfilePicture/index.ts"),Spinner=__webpack_require__("./frontend/src/lib/lemon-ui/Spinner/index.ts");__webpack_require__("./frontend/src/lib/lemon-ui/Splotch/index.ts");var Tooltip=__webpack_require__("./frontend/src/lib/lemon-ui/Tooltip/index.ts")},"./frontend/src/exporter/exporterViewLogic.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{k:()=>getCurrentExporterData,y:()=>exporterViewLogic});var kea__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./node_modules/.pnpm/kea@3.1.5_react@18.2.0/node_modules/kea/lib/index.esm.js");let exporterViewLogic=(0,kea__WEBPACK_IMPORTED_MODULE_0__.kea)([(0,kea__WEBPACK_IMPORTED_MODULE_0__.path)(()=>["scenes","exporter","exporterLogic"]),(0,kea__WEBPACK_IMPORTED_MODULE_0__.props)({}),(0,kea__WEBPACK_IMPORTED_MODULE_0__.selectors)(()=>({exportedData:[()=>[(_,props)=>props],props=>props]}))]),getCurrentExporterData=()=>exporterViewLogic.findMounted()?.values.exportedData},"./frontend/src/initKea.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{J1:()=>initKea});var kea__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./node_modules/.pnpm/kea@3.1.5_react@18.2.0/node_modules/kea/lib/index.esm.js"),kea_forms__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/.pnpm/kea-forms@3.2.0_kea@3.1.5/node_modules/kea-forms/lib/index.js"),kea_loaders__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./node_modules/.pnpm/kea-loaders@3.0.0_kea@3.1.5/node_modules/kea-loaders/lib/index.js"),kea_localstorage__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./node_modules/.pnpm/kea-localstorage@3.1.0_kea@3.1.5/node_modules/kea-localstorage/lib/index.js"),kea_router__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__("./node_modules/.pnpm/kea-router@3.2.0_kea@3.1.5/node_modules/kea-router/lib/index.js"),kea_subscriptions__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__("./node_modules/.pnpm/kea-subscriptions@3.0.1_kea@3.1.5/node_modules/kea-subscriptions/lib/index.js"),kea_waitfor__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__("./node_modules/.pnpm/kea-waitfor@0.2.1_kea@3.1.5/node_modules/kea-waitfor/lib/index.js"),kea_window_values__WEBPACK_IMPORTED_MODULE_7__=__webpack_require__("./node_modules/.pnpm/kea-window-values@3.0.0_kea@3.1.5/node_modules/kea-window-values/lib/index.js"),lib_lemon_ui_LemonToast_LemonToast__WEBPACK_IMPORTED_MODULE_8__=__webpack_require__("./frontend/src/lib/lemon-ui/LemonToast/LemonToast.tsx"),lib_utils__WEBPACK_IMPORTED_MODULE_9__=__webpack_require__("./frontend/src/lib/utils.tsx"),lib_utils_router_utils__WEBPACK_IMPORTED_MODULE_10__=__webpack_require__("./frontend/src/lib/utils/router-utils.ts");let ERROR_FILTER_ALLOW_LIST=["loadPreflight","loadUser","loadFunnels","authenticate","signup","loadLatestVersion","loadBilling","loadData","loadRecordingMeta"],loggerPlugin=()=>({name:"verbose-kea-logger",events:{beforeReduxStore(options){options.middleware.push(store=>next=>action=>{let response=next(action);return console.groupCollapsed("KEA LOGGER",action),console.log(store.getState()),console.groupEnd(),response})}}});function initKea(){let{routerHistory,routerLocation,beforePlugins}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},plugins=[...beforePlugins||[],kea_localstorage__WEBPACK_IMPORTED_MODULE_3__.localStoragePlugin,(0,kea_window_values__WEBPACK_IMPORTED_MODULE_7__.windowValuesPlugin)({window:window}),(0,kea_router__WEBPACK_IMPORTED_MODULE_4__.routerPlugin)({history:routerHistory,location:routerLocation,urlPatternOptions:{segmentValueCharset:"a-zA-Z0-9-_~ %.@()!'|"},pathFromRoutesToWindow:path=>(0,lib_utils_router_utils__WEBPACK_IMPORTED_MODULE_10__.Jf)(path),transformPathInActions:path=>(0,lib_utils_router_utils__WEBPACK_IMPORTED_MODULE_10__.Jf)(path),pathFromWindowToRoutes:path=>(0,lib_utils_router_utils__WEBPACK_IMPORTED_MODULE_10__.sv)(path)}),kea_forms__WEBPACK_IMPORTED_MODULE_1__.formsPlugin,(0,kea_loaders__WEBPACK_IMPORTED_MODULE_2__.loadersPlugin)({onFailure(_ref){let{error,reducerKey,actionKey}=_ref;if(!ERROR_FILTER_ALLOW_LIST.includes(actionKey)&&error?.status!==void 0&&![200,201,204,401].includes(error.status)){let errorMessage=error.detail||error.statusText;errorMessage||404!==error.status||(errorMessage="URL not found"),errorMessage&&lib_lemon_ui_LemonToast_LemonToast__WEBPACK_IMPORTED_MODULE_8__.UJ.error(`${(0,lib_utils__WEBPACK_IMPORTED_MODULE_9__.UV)(actionKey)} failed: ${errorMessage}`)}console.error({error,reducerKey,actionKey}),window.Sentry?.captureException(error)}}),kea_subscriptions__WEBPACK_IMPORTED_MODULE_5__.nV,kea_waitfor__WEBPACK_IMPORTED_MODULE_6__.waitForPlugin];(window.JS_KEA_VERBOSE_LOGGING||"localStorage"in window&&window.localStorage.getItem("ph-kea-debug"))&&plugins.push(loggerPlugin),window.__REDUX_DEVTOOLS_EXTENSION__&&console.log("NB Redux Dev Tools are disabled on PostHog. See: https://github.com/PostHog/posthog/issues/17482"),(0,kea__WEBPACK_IMPORTED_MODULE_0__.resetContext)({plugins:plugins,createStore:{compose:function(){for(var _len=arguments.length,funcs=Array(_len),_key=0;_key<_len;_key++)funcs[_key]=arguments[_key];return 0===funcs.length?arg=>arg:1===funcs.length?funcs[0]:funcs.reduce((a,b)=>function(){return a(b(...arguments))})}}})}},"./frontend/src/layout/ErrorBoundary/index.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{S:()=>ErrorBoundary_ErrorBoundary_ErrorBoundary});var injectStylesIntoStyleTag=__webpack_require__("./node_modules/.pnpm/style-loader@2.0.0_webpack@5.88.2/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),injectStylesIntoStyleTag_default=__webpack_require__.n(injectStylesIntoStyleTag),ErrorBoundary=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/layout/ErrorBoundary/ErrorBoundary.scss"),ErrorBoundary_default=__webpack_require__.n(ErrorBoundary),options={};options.insert="head",options.singleton=!1,injectStylesIntoStyleTag_default()(ErrorBoundary_default(),options),ErrorBoundary_default().locals;var hub=__webpack_require__("./node_modules/.pnpm/@sentry+core@7.112.1/node_modules/@sentry/core/esm/hub.js"),errorboundary=__webpack_require__("./node_modules/.pnpm/@sentry+react@7.112.1_react@18.2.0/node_modules/@sentry/react/esm/errorboundary.js"),index_esm=__webpack_require__("./node_modules/.pnpm/kea@3.1.5_react@18.2.0/node_modules/kea/lib/index.esm.js"),supportLogic=__webpack_require__("./frontend/src/lib/components/Support/supportLogic.ts"),LemonButton=__webpack_require__("./frontend/src/lib/lemon-ui/LemonButton/index.ts"),teamLogic=__webpack_require__("./frontend/src/scenes/teamLogic.tsx"),jsx_runtime=__webpack_require__("./node_modules/.pnpm/react@18.2.0/node_modules/react/jsx-runtime.js");function ErrorBoundary_ErrorBoundary_ErrorBoundary(_ref){let{children,tags={}}=_ref,isSentryInitialized=!!(0,hub.Gd)().getClient(),{currentTeamId}=(0,index_esm.useValues)(teamLogic.H),{openSupportForm}=(0,index_esm.useActions)(supportLogic.Pw);return(0,jsx_runtime.jsx)(errorboundary.SV,{beforeCapture:scope=>{void 0!==currentTeamId&&scope.setTag("team_id",currentTeamId),scope.setTags(tags)},fallback:_ref2=>{let{error,eventId}=_ref2;return(0,jsx_runtime.jsx)("div",{className:"ErrorBoundary",children:(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[(0,jsx_runtime.jsx)("h2",{children:"An error has occurred"}),(0,jsx_runtime.jsx)("pre",{children:(0,jsx_runtime.jsx)("code",{children:error.stack||(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[error.name,(0,jsx_runtime.jsx)("br",{}),error.message]})})}),isSentryInitialized&&eventId?.match(/[^0]/)?`We've registered this event for analysis (ID ${eventId}), but feel free to contact us directly too.`:"Please help us resolve the issue by sending a screenshot of this message.",(0,jsx_runtime.jsx)(LemonButton.J,{type:"primary",fullWidth:!0,center:!0,onClick:()=>openSupportForm({kind:"bug",isEmailFormOpen:!0}),targetBlank:!0,className:"mt-2",children:"Email an engineer"})]})})},children:children})}},"./frontend/src/layout/FeaturePreviews/FeaturePreviews.tsx":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{F:()=>FeaturePreviews});var _posthog_lemon_ui__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./frontend/@posthog/lemon-ui/src/index.ts"),clsx__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__("./node_modules/.pnpm/clsx@1.2.1/node_modules/clsx/dist/clsx.m.js"),kea__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/.pnpm/kea@3.1.5_react@18.2.0/node_modules/kea/lib/index.esm.js"),lib_lemon_ui_Spinner__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./frontend/src/lib/lemon-ui/Spinner/index.ts"),react__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./node_modules/.pnpm/react@18.2.0/node_modules/react/index.js"),_featurePreviewsLogic__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__("./frontend/src/layout/FeaturePreviews/featurePreviewsLogic.tsx"),react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__("./node_modules/.pnpm/react@18.2.0/node_modules/react/jsx-runtime.js");function FeaturePreviews(){let{earlyAccessFeatures,rawEarlyAccessFeaturesLoading}=(0,kea__WEBPACK_IMPORTED_MODULE_1__.useValues)(_featurePreviewsLogic__WEBPACK_IMPORTED_MODULE_4__.Z),{loadEarlyAccessFeatures}=(0,kea__WEBPACK_IMPORTED_MODULE_1__.useActions)(_featurePreviewsLogic__WEBPACK_IMPORTED_MODULE_4__.Z);return(0,react__WEBPACK_IMPORTED_MODULE_3__.useLayoutEffect)(()=>loadEarlyAccessFeatures(),[]),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)("div",{className:(0,clsx__WEBPACK_IMPORTED_MODULE_6__.default)("flex flex-col relative min-h-24",0===earlyAccessFeatures.length&&"items-center justify-center"),children:[earlyAccessFeatures.map((feature,i)=>!!feature.flagKey&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)("div",{children:[i>0&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_posthog_lemon_ui__WEBPACK_IMPORTED_MODULE_0__.p2,{className:"my-4"}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(FeaturePreview,{feature:feature},feature.flagKey)]},feature.flagKey)),rawEarlyAccessFeaturesLoading?(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(lib_lemon_ui_Spinner__WEBPACK_IMPORTED_MODULE_2__.t,{}):0===earlyAccessFeatures.length?(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)("i",{className:"text-center",children:["No feature previews currently available.",(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("br",{}),"Check back later!"]}):null]})}function FeaturePreview(_ref){let{feature}=_ref,{activeFeedbackFlagKey,activeFeedbackFlagKeyLoading}=(0,kea__WEBPACK_IMPORTED_MODULE_1__.useValues)(_featurePreviewsLogic__WEBPACK_IMPORTED_MODULE_4__.Z),{beginEarlyAccessFeatureFeedback,cancelEarlyAccessFeatureFeedback,updateEarlyAccessFeatureEnrollment}=(0,kea__WEBPACK_IMPORTED_MODULE_1__.useActions)(_featurePreviewsLogic__WEBPACK_IMPORTED_MODULE_4__.Z),{submitEarlyAccessFeatureFeedback}=(0,kea__WEBPACK_IMPORTED_MODULE_1__.useAsyncActions)(_featurePreviewsLogic__WEBPACK_IMPORTED_MODULE_4__.Z),{flagKey,enabled,name,description,documentationUrl}=feature,isFeedbackActive=activeFeedbackFlagKey===flagKey,[feedback,setFeedback]=(0,react__WEBPACK_IMPORTED_MODULE_3__.useState)("");return(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)("div",{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)("div",{className:"flex items-center justify-between",children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("h4",{className:"font-semibold mb-0",children:name}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_posthog_lemon_ui__WEBPACK_IMPORTED_MODULE_0__.f4,{checked:enabled,onChange:newChecked=>updateEarlyAccessFeatureEnrollment(flagKey,newChecked)})]}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("p",{className:"my-2",children:description||(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("i",{children:"No description."})}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)("div",{children:[isFeedbackActive?null:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_posthog_lemon_ui__WEBPACK_IMPORTED_MODULE_0__.rU,{onClick:()=>beginEarlyAccessFeatureFeedback(flagKey),children:"Give feedback"}),documentationUrl&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.Fragment,{children:[" • ",(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_posthog_lemon_ui__WEBPACK_IMPORTED_MODULE_0__.rU,{to:documentationUrl,target:"_blank",children:"Learn more"})]})]}),isFeedbackActive&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_posthog_lemon_ui__WEBPACK_IMPORTED_MODULE_0__._V,{autoFocus:!0,placeholder:`What's your experience with ${name} been like?`,className:"mt-2",value:feedback,onChange:value=>setFeedback(value),onKeyDown:e=>{"Enter"===e.key&&e.metaKey?updateEarlyAccessFeatureEnrollment(flagKey,enabled):"Escape"===e.key&&(cancelEarlyAccessFeatureFeedback(),setFeedback(""),e.stopPropagation())}}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)("div",{className:"flex items-center gap-2",children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_posthog_lemon_ui__WEBPACK_IMPORTED_MODULE_0__.Jp,{type:"secondary",onClick:()=>{cancelEarlyAccessFeatureFeedback(),setFeedback("")},children:"Cancel"}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_posthog_lemon_ui__WEBPACK_IMPORTED_MODULE_0__.Jp,{type:"primary",onClick:()=>{submitEarlyAccessFeatureFeedback(feedback).then(()=>{setFeedback("")})},loading:activeFeedbackFlagKeyLoading,className:"flex-1",center:!0,children:"Submit feedback"})]})]})]})}},"./frontend/src/layout/FeaturePreviews/featurePreviewsLogic.tsx":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{N:()=>CONSTRAINED_PREVIEWS,Z:()=>featurePreviewsLogic});var kea__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./node_modules/.pnpm/kea@3.1.5_react@18.2.0/node_modules/kea/lib/index.esm.js"),kea_loaders__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/.pnpm/kea-loaders@3.0.0_kea@3.1.5/node_modules/kea-loaders/lib/index.js"),lib_components_Support_supportLogic__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./frontend/src/lib/components/Support/supportLogic.ts"),lib_logic_featureFlagLogic__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./frontend/src/lib/logic/featureFlagLogic.ts"),posthog_js__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__("./node_modules/.pnpm/posthog-js@1.177.0/node_modules/posthog-js/dist/module.js"),scenes_userLogic__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__("./frontend/src/scenes/userLogic.ts");let CONSTRAINED_PREVIEWS=new Set([]),featurePreviewsLogic=(0,kea__WEBPACK_IMPORTED_MODULE_0__.kea)([(0,kea__WEBPACK_IMPORTED_MODULE_0__.path)(["layout","FeaturePreviews","featurePreviewsLogic"]),(0,kea__WEBPACK_IMPORTED_MODULE_0__.connect)({values:[lib_logic_featureFlagLogic__WEBPACK_IMPORTED_MODULE_3__.h,["featureFlags"],scenes_userLogic__WEBPACK_IMPORTED_MODULE_5__.userLogic,["user"]],actions:[lib_components_Support_supportLogic__WEBPACK_IMPORTED_MODULE_2__.Pw,["submitZendeskTicket"]]}),(0,kea__WEBPACK_IMPORTED_MODULE_0__.actions)({updateEarlyAccessFeatureEnrollment:(flagKey,enabled)=>({flagKey,enabled}),beginEarlyAccessFeatureFeedback:flagKey=>({flagKey}),cancelEarlyAccessFeatureFeedback:!0,submitEarlyAccessFeatureFeedback:message=>({message})}),(0,kea_loaders__WEBPACK_IMPORTED_MODULE_1__.loaders)(_ref=>{let{values}=_ref;return{rawEarlyAccessFeatures:[[],{loadEarlyAccessFeatures:async()=>await new Promise(resolve=>posthog_js__WEBPACK_IMPORTED_MODULE_4__.LJ.getEarlyAccessFeatures(features=>resolve(features),!0))}],activeFeedbackFlagKey:[null,{submitEarlyAccessFeatureFeedback:async _ref2=>{let{message}=_ref2;if(!values.user)throw Error("Cannot submit early access feature feedback without a user");if(!values.activeFeedbackFlagKey)throw Error("Cannot submit early access feature feedback without an active flag key");return await lib_components_Support_supportLogic__WEBPACK_IMPORTED_MODULE_2__.Pw.asyncActions.submitZendeskTicket({name:values.user.first_name,email:values.user.email,kind:"feedback",target_area:values.activeFeedbackFlagKey,severity_level:"low",message}),null}}]}}),(0,kea__WEBPACK_IMPORTED_MODULE_0__.reducers)({activeFeedbackFlagKey:{beginEarlyAccessFeatureFeedback:(_,_ref3)=>{let{flagKey}=_ref3;return flagKey},cancelEarlyAccessFeatureFeedback:()=>null}}),(0,kea__WEBPACK_IMPORTED_MODULE_0__.listeners)(()=>({updateEarlyAccessFeatureEnrollment:_ref4=>{let{flagKey,enabled}=_ref4;posthog_js__WEBPACK_IMPORTED_MODULE_4__.LJ.updateEarlyAccessFeatureEnrollment(flagKey,enabled)}})),(0,kea__WEBPACK_IMPORTED_MODULE_0__.selectors)({earlyAccessFeatures:[s=>[s.rawEarlyAccessFeatures,s.featureFlags],(rawEarlyAccessFeatures,featureFlags)=>rawEarlyAccessFeatures.filter(feature=>!!feature.flagKey&&(!CONSTRAINED_PREVIEWS.has(feature.flagKey)||!!featureFlags[`${feature.flagKey}-preview`])).map(feature=>{if(!feature.flagKey)throw Error("Early access feature without flagKey was not filtered out");return{...feature,flagKey:feature.flagKey,enabled:!!featureFlags[feature.flagKey]}})]})])},"./frontend/src/layout/GlobalModals.tsx":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{B:()=>GlobalModals,p:()=>globalModalsLogic});var src=__webpack_require__("./frontend/@posthog/lemon-ui/src/index.ts"),index_esm=__webpack_require__("./node_modules/.pnpm/kea@3.1.5_react@18.2.0/node_modules/kea/lib/index.esm.js"),posthog_icons_es=__webpack_require__("./node_modules/.pnpm/@posthog+icons@0.8.5_react-dom@18.2.0_react@18.2.0/node_modules/@posthog/icons/dist/posthog-icons.es.js"),react=__webpack_require__("./node_modules/.pnpm/react@18.2.0/node_modules/react/index.js"),billing_utils=__webpack_require__("./frontend/src/scenes/billing/billing-utils.ts"),billingLogic=__webpack_require__("./frontend/src/scenes/billing/billingLogic.tsx");let confirmUpgradeModalLogic=(0,index_esm.kea)([(0,index_esm.path)(["lib","components","ConfirmUpgradeModal","confirmUpgradeModalLogic"]),(0,index_esm.actions)({showConfirmUpgradeModal:(upgradePlan,confirmCallback,cancelCallback)=>({upgradePlan,confirmCallback,cancelCallback}),hideConfirmUpgradeModal:!0,confirm:!0,cancel:!0}),(0,index_esm.reducers)({upgradePlan:[null,{showConfirmUpgradeModal:(_,_ref)=>{let{upgradePlan}=_ref;return upgradePlan},hideConfirmUpgradeModal:()=>null}],confirmCallback:[null,{showConfirmUpgradeModal:(_,_ref2)=>{let{confirmCallback}=_ref2;return confirmCallback},hideConfirmUpgradeModal:()=>null}],cancelCallback:[null,{showConfirmUpgradeModal:(_,_ref3)=>{let{cancelCallback}=_ref3;return cancelCallback},hideConfirmUpgradeModal:()=>null}]}),(0,index_esm.listeners)(_ref4=>{let{actions,values}=_ref4;return{confirm:async(_,breakpoint)=>{await breakpoint(100),values.confirmCallback&&values.confirmCallback(),actions.hideConfirmUpgradeModal()},cancel:async(_,breakpoint)=>{await breakpoint(100),values.cancelCallback&&values.cancelCallback(),actions.hideConfirmUpgradeModal()}}})]);var jsx_runtime=__webpack_require__("./node_modules/.pnpm/react@18.2.0/node_modules/react/jsx-runtime.js");function ConfirmUpgradeModal(){let{upgradePlan}=(0,index_esm.useValues)(confirmUpgradeModalLogic),{timeRemainingInSeconds,timeTotalInSeconds,billing}=(0,index_esm.useValues)(billingLogic.kr),{hideConfirmUpgradeModal,confirm,cancel}=(0,index_esm.useActions)(confirmUpgradeModalLogic),{prorationAmount,isProrated}=(0,react.useMemo)(()=>(0,billing_utils.MG)({timeRemainingInSeconds,timeTotalInSeconds,amountUsd:upgradePlan?.unit_amount_usd,hasActiveSubscription:billing?.has_active_subscription}),[billing?.has_active_subscription,upgradePlan,timeRemainingInSeconds,timeTotalInSeconds]);return(0,jsx_runtime.jsx)(src.fQ,{onClose:hideConfirmUpgradeModal,isOpen:!!upgradePlan,closable:!1,title:`Ready to subscribe to the ${upgradePlan?.name}?`,footer:(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[(0,jsx_runtime.jsx)(src.Jp,{type:"secondary",onClick:()=>cancel(),children:"Cancel"}),(0,jsx_runtime.jsx)(src.Jp,{type:"primary",onClick:()=>confirm(),children:"Sign me up"})]}),children:(0,jsx_runtime.jsxs)("div",{className:"max-w-140",children:[(0,jsx_runtime.jsxs)("p",{children:["Woo! You're gonna love the ",upgradePlan?.name,". We're just confirming that this is a $",Number(upgradePlan?.unit_amount_usd)," / ",upgradePlan?.unit," subscription."," ",isProrated?`The first payment will be prorated to ~$${prorationAmount} and it will be charged immediately.`:"The first payment will be charged immediately."]}),upgradePlan&&upgradePlan?.features?.length>1&&(0,jsx_runtime.jsxs)("div",{children:[(0,jsx_runtime.jsx)("p",{className:"ml-0 mb-2 max-w-200",children:"Here are the features included:"}),(0,jsx_runtime.jsx)("div",{className:"grid grid-cols-2 gap-x-4",children:upgradePlan?.features.map((feature,index)=>jsx_runtime.jsxs("div",{className:"flex gap-x-2 items-center mb-2",children:[jsx_runtime.jsx(posthog_icons_es.IconCheckCircle,{className:"text-success"}),jsx_runtime.jsx(src.u,{title:feature.description,children:jsx_runtime.jsxs("b",{children:[feature.name,feature.note?": "+feature.note:""]})},feature.key)]},"addon-features-"+index))})]})]})})}__webpack_require__("./frontend/src/lib/components/HedgehogBuddy/HedgehogBuddy.scss");var membersLogic=__webpack_require__("./frontend/src/scenes/organization/membersLogic.tsx"),userLogic=__webpack_require__("./frontend/src/scenes/userLogic.ts"),HedgehogBuddy_HedgehogBuddy=__webpack_require__("./frontend/src/lib/components/HedgehogBuddy/HedgehogBuddy.tsx"),hedgehogBuddyLogic=__webpack_require__("./frontend/src/lib/components/HedgehogBuddy/hedgehogBuddyLogic.ts");function HedgehogBuddyWithLogic(){let{hedgehogConfig}=(0,index_esm.useValues)(hedgehogBuddyLogic.r),{patchHedgehogConfig}=(0,index_esm.useActions)(hedgehogBuddyLogic.r),{user}=(0,index_esm.useValues)(userLogic.userLogic),{members}=(0,index_esm.useValues)(membersLogic.m),{ensureAllMembersLoaded}=(0,index_esm.useActions)(membersLogic.m);return(0,react.useEffect)(()=>ensureAllMembersLoaded(),[hedgehogConfig.enabled]),hedgehogConfig.enabled?(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[(0,jsx_runtime.jsx)(HedgehogBuddy_HedgehogBuddy.Tf,{onClose:()=>patchHedgehogConfig({enabled:!1})}),hedgehogConfig.party_mode_enabled?members?.map(member=>{if(member.user.uuid!==user?.uuid&&member.user.hedgehog_config)return jsx_runtime.jsx(HedgehogBuddy_HedgehogBuddy.Iv,{member:member},member.user.uuid)}):null]}):(0,jsx_runtime.jsx)(jsx_runtime.Fragment,{})}var TimeSensitiveAuthentication=__webpack_require__("./frontend/src/lib/components/TimeSensitiveAuthentication/TimeSensitiveAuthentication.tsx"),PayGateMini=__webpack_require__("./frontend/src/lib/components/PayGateMini/PayGateMini.tsx"),upgradeModalLogic=__webpack_require__("./frontend/src/lib/components/UpgradeModal/upgradeModalLogic.ts");function UpgradeModal(){let{upgradeModalFeatureKey,upgradeModalFeatureUsage,upgradeModalIsGrandfathered}=(0,index_esm.useValues)(upgradeModalLogic.J),{hideUpgradeModal}=(0,index_esm.useActions)(upgradeModalLogic.J);return upgradeModalFeatureKey?(0,jsx_runtime.jsx)(src.fQ,{onClose:hideUpgradeModal,isOpen:!!upgradeModalFeatureKey,children:(0,jsx_runtime.jsx)("div",{className:"max-w-2xl",children:(0,jsx_runtime.jsx)(PayGateMini.E,{feature:upgradeModalFeatureKey,currentUsage:null!=upgradeModalFeatureUsage?upgradeModalFeatureUsage:void 0,isGrandfathered:null!=upgradeModalIsGrandfathered?upgradeModalIsGrandfathered:void 0,background:!1,children:(0,jsx_runtime.jsx)("div",{className:"pr-7",children:"You should have access to this feature already. If you are still seeing this modal, please let us know \uD83D\uDE42"})})})}):(0,jsx_runtime.jsx)(jsx_runtime.Fragment,{})}var Setup2FA=__webpack_require__("./frontend/src/scenes/authentication/Setup2FA.tsx"),CreateOrganizationModal=__webpack_require__("./frontend/src/scenes/organization/CreateOrganizationModal.tsx"),LemonField=__webpack_require__("./frontend/src/lib/lemon-ui/LemonField/index.ts"),eventUsageLogic=__webpack_require__("./frontend/src/lib/utils/eventUsageLogic.ts"),projectLogic=__webpack_require__("./frontend/src/scenes/projectLogic.ts"),teamLogic=__webpack_require__("./frontend/src/scenes/teamLogic.tsx"),organizationLogic=__webpack_require__("./frontend/src/scenes/organizationLogic.tsx");function CreateEnvironmentModal(_ref){let{isVisible,onClose,inline=!1}=_ref,{currentProject}=(0,index_esm.useValues)(projectLogic.K),{currentTeamLoading}=(0,index_esm.useValues)(teamLogic.H),{createTeam}=(0,index_esm.useActions)(teamLogic.H),{currentOrganization}=(0,index_esm.useValues)(organizationLogic.p),{reportProjectCreationSubmitted}=(0,index_esm.useActions)(eventUsageLogic.vx),[name,setName]=(0,react.useState)(""),closeModal=()=>{onClose&&(onClose(),name&&setName(""))},handleSubmit=()=>{createTeam({name,is_demo:!1}),reportProjectCreationSubmitted(currentOrganization?.teams?currentOrganization.teams.length:0,name.length)};return(0,react.useEffect)(()=>{closeModal()},[currentProject]),(0,jsx_runtime.jsx)(src.fQ,{width:560,title:currentProject?`Create an environment within ${currentProject.name}`:"Create a environment",description:(0,jsx_runtime.jsx)("p",{children:"Use environments to keep your data completely separate, while sharing the setup (such as dashboards or taxonomy). The common pattern is having separate production, staging, and development environments."}),footer:(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[onClose&&(0,jsx_runtime.jsx)(src.Jp,{type:"secondary",onClick:onClose,disabledReason:currentTeamLoading?"Creating environment...":void 0,children:"Cancel"}),(0,jsx_runtime.jsx)(src.Jp,{type:"primary",onClick:handleSubmit,loading:currentTeamLoading,disabledReason:name?null:"Think of a name!",children:"Create environment"})]}),isOpen:isVisible,onClose:onClose,inline:inline,closable:!currentTeamLoading,children:(0,jsx_runtime.jsx)(LemonField.D.Pure,{label:"Environment name",children:(0,jsx_runtime.jsx)(src.DF,{placeholder:"E.g. development",maxLength:64,autoFocus:!0,value:name,onChange:value=>setName(value),onKeyDown:e=>{"Enter"===e.key&&handleSubmit()},disabled:currentTeamLoading})})})}var CreateProjectModal=__webpack_require__("./frontend/src/scenes/project/CreateProjectModal.tsx"),SessionRecordingPlayer=__webpack_require__("./frontend/src/scenes/session-recordings/player/SessionRecordingPlayer.tsx"),PlayerMeta=__webpack_require__("./frontend/src/scenes/session-recordings/player/PlayerMeta.tsx"),sessionRecordingPlayerLogic=__webpack_require__("./frontend/src/scenes/session-recordings/player/sessionRecordingPlayerLogic.ts"),sessionPlayerModalLogic=__webpack_require__("./frontend/src/scenes/session-recordings/player/modal/sessionPlayerModalLogic.ts");function SessionPlayerModal(){let{activeSessionRecording}=(0,index_esm.useValues)((0,sessionPlayerModalLogic.A)()),{closeSessionPlayer}=(0,index_esm.useActions)((0,sessionPlayerModalLogic.A)()),eventUUIDs=activeSessionRecording?.matching_events?.filter(matchingEvents=>matchingEvents.session_id===activeSessionRecording?.id).flatMap(matchedRecording=>matchedRecording.events.map(x=>x.uuid))||[],logicProps={playerKey:"modal",sessionRecordingId:activeSessionRecording?.id||"",autoPlay:!0,matchingEventsMatchType:{matchType:"uuid",eventUUIDs:eventUUIDs}},{isFullScreen}=(0,index_esm.useValues)((0,sessionRecordingPlayerLogic.d$)(logicProps));return(0,jsx_runtime.jsxs)(src.fQ,{isOpen:!!activeSessionRecording,onClose:closeSessionPlayer,simple:!0,title:"",width:1600,fullScreen:isFullScreen,closable:!isFullScreen,zIndex:"1061",hideCloseButton:!0,children:[(0,jsx_runtime.jsx)("header",{children:activeSessionRecording?(0,jsx_runtime.jsx)(index_esm.BindLogic,{logic:sessionRecordingPlayerLogic.d$,props:logicProps,children:(0,jsx_runtime.jsx)(PlayerMeta.L,{})}):null}),(0,jsx_runtime.jsx)(src.fQ.Content,{embedded:!0,children:activeSessionRecording?.id&&(0,jsx_runtime.jsx)(SessionRecordingPlayer.d,{...logicProps,noMeta:!0,noBorder:!0})})]})}var inviteLogic=__webpack_require__("./frontend/src/scenes/settings/organization/inviteLogic.ts"),InviteModal=__webpack_require__("./frontend/src/scenes/settings/organization/InviteModal.tsx");let globalModalsLogic=(0,index_esm.kea)([(0,index_esm.path)(["layout","navigation","globalModalsLogic"]),(0,index_esm.actions)({showCreateOrganizationModal:!0,hideCreateOrganizationModal:!0,showCreateProjectModal:!0,hideCreateProjectModal:!0,showCreateEnvironmentModal:!0,hideCreateEnvironmentModal:!0}),(0,index_esm.reducers)({isCreateOrganizationModalShown:[!1,{showCreateOrganizationModal:()=>!0,hideCreateOrganizationModal:()=>!1}],isCreateProjectModalShown:[!1,{showCreateProjectModal:()=>!0,hideCreateProjectModal:()=>!1}],isCreateEnvironmentModalShown:[!1,{showCreateEnvironmentModal:()=>!0,hideCreateEnvironmentModal:()=>!1}]})]);function GlobalModals(){let{isCreateOrganizationModalShown,isCreateProjectModalShown,isCreateEnvironmentModalShown}=(0,index_esm.useValues)(globalModalsLogic),{hideCreateOrganizationModal,hideCreateProjectModal,hideCreateEnvironmentModal}=(0,index_esm.useActions)(globalModalsLogic),{isInviteModalShown}=(0,index_esm.useValues)(inviteLogic.n),{hideInviteModal}=(0,index_esm.useActions)(inviteLogic.n),{user}=(0,index_esm.useValues)(userLogic.userLogic);return(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[(0,jsx_runtime.jsx)(InviteModal.Gx,{isOpen:isInviteModalShown,onClose:hideInviteModal}),(0,jsx_runtime.jsx)(CreateOrganizationModal.y,{isVisible:isCreateOrganizationModalShown,onClose:hideCreateOrganizationModal}),(0,jsx_runtime.jsx)(CreateProjectModal.P,{isVisible:isCreateProjectModalShown,onClose:hideCreateProjectModal}),(0,jsx_runtime.jsx)(CreateEnvironmentModal,{isVisible:isCreateEnvironmentModalShown,onClose:hideCreateEnvironmentModal}),(0,jsx_runtime.jsx)(UpgradeModal,{}),(0,jsx_runtime.jsx)(ConfirmUpgradeModal,{}),(0,jsx_runtime.jsx)(TimeSensitiveAuthentication.g,{}),(0,jsx_runtime.jsx)(SessionPlayerModal,{}),user&&user.organization?.enforce_2fa&&!user.is_2fa_enabled&&(0,jsx_runtime.jsxs)(src.fQ,{title:"Set up 2FA",closable:!1,children:[(0,jsx_runtime.jsx)("p",{children:(0,jsx_runtime.jsx)("b",{children:"Your organization requires you to set up 2FA."})}),(0,jsx_runtime.jsx)("p",{children:(0,jsx_runtime.jsx)("b",{children:"Use an authenticator app like Google Authenticator or 1Password to scan the QR code below."})}),(0,jsx_runtime.jsx)(Setup2FA.g,{onSuccess:()=>{userLogic.userLogic.actions.loadUser(),membersLogic.m.actions.loadAllMembers()}})]}),(0,jsx_runtime.jsx)(HedgehogBuddyWithLogic,{})]})}},"./frontend/src/layout/navigation-3000/components/KeyboardShortcut.tsx":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{e:()=>KeyboardShortcut_KeyboardShortcut});var injectStylesIntoStyleTag=__webpack_require__("./node_modules/.pnpm/style-loader@2.0.0_webpack@5.88.2/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),injectStylesIntoStyleTag_default=__webpack_require__.n(injectStylesIntoStyleTag),KeyboardShortcut=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/layout/navigation-3000/components/KeyboardShortcut.scss"),KeyboardShortcut_default=__webpack_require__.n(KeyboardShortcut),options={};options.insert="head",options.singleton=!1,injectStylesIntoStyleTag_default()(KeyboardShortcut_default(),options),KeyboardShortcut_default().locals;var clsx_m=__webpack_require__("./node_modules/.pnpm/clsx@1.2.1/node_modules/clsx/dist/clsx.m.js"),utils=__webpack_require__("./frontend/src/lib/utils.tsx"),jsx_runtime=__webpack_require__("./node_modules/.pnpm/react@18.2.0/node_modules/react/jsx-runtime.js");let IS_MAC=(0,utils.V5)(),KEY_TO_SYMBOL={shift:"⇧",command:IS_MAC?"⌘":"ctrl",option:IS_MAC?"⌥":"alt",arrowup:"↑",arrowdown:"↓",arrowleft:"←",arrowright:"→",enter:"↵",escape:"esc",tab:"⇥",space:"␣",forwardslash:"/"},MODIFIER_PRIORITY=["shift","command","option"];function KeyboardShortcut_KeyboardShortcut(_ref){let{muted,className,...keys}=_ref,sortedKeys=Object.keys(keys).sort((a,b)=>(-MODIFIER_PRIORITY.indexOf(a)||0)-(-MODIFIER_PRIORITY.indexOf(b)||0));return(0,utils.tq)()?null:(0,jsx_runtime.jsx)("span",{className:(0,clsx_m.default)("KeyboardShortcut space-x-0.5",muted&&"KeyboardShortcut--muted",className),children:sortedKeys.map(key=>(0,jsx_runtime.jsx)("span",{children:KEY_TO_SYMBOL[key]||key},key))})}},"./frontend/src/layout/navigation-3000/components/Sidebar.tsx":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{Y:()=>Sidebar});var posthog_icons_es=__webpack_require__("./node_modules/.pnpm/@posthog+icons@0.8.5_react-dom@18.2.0_react@18.2.0/node_modules/@posthog/icons/dist/posthog-icons.es.js"),src=__webpack_require__("./frontend/@posthog/lemon-ui/src/index.ts"),clsx_m=__webpack_require__("./node_modules/.pnpm/clsx@1.2.1/node_modules/clsx/dist/clsx.m.js"),index_esm=__webpack_require__("./node_modules/.pnpm/kea@3.1.5_react@18.2.0/node_modules/kea/lib/index.esm.js"),Spinner=__webpack_require__("./frontend/src/lib/lemon-ui/Spinner/index.ts"),utils=__webpack_require__("./frontend/src/lib/utils.tsx"),react=__webpack_require__("./node_modules/.pnpm/react@18.2.0/node_modules/react/index.js"),index_module=__webpack_require__("./node_modules/.pnpm/use-debounce@9.0.3_react@18.2.0/node_modules/use-debounce/dist/index.module.js"),navigationLogic=__webpack_require__("./frontend/src/layout/navigation-3000/navigationLogic.tsx"),KeyboardShortcut=__webpack_require__("./frontend/src/layout/navigation-3000/components/KeyboardShortcut.tsx"),icons=__webpack_require__("./frontend/src/lib/lemon-ui/icons/index.ts"),apps_common_src=__webpack_require__("./frontend/@posthog/apps-common/src/index.ts"),esm_exports=__webpack_require__("./node_modules/.pnpm/@sentry+core@7.112.1/node_modules/@sentry/core/esm/exports.js"),dayjs=__webpack_require__("./frontend/src/lib/dayjs.ts"),LemonMenu=__webpack_require__("./frontend/src/lib/lemon-ui/LemonMenu/index.ts"),LemonSkeleton=__webpack_require__("./frontend/src/lib/lemon-ui/LemonSkeleton/index.ts"),AutoSizer=__webpack_require__("./node_modules/.pnpm/react-virtualized@9.22.5_react-dom@18.2.0_react@18.2.0/node_modules/react-virtualized/dist/es/AutoSizer/index.js"),InfiniteLoader=__webpack_require__("./node_modules/.pnpm/react-virtualized@9.22.5_react-dom@18.2.0_react@18.2.0/node_modules/react-virtualized/dist/es/InfiniteLoader/index.js"),List=__webpack_require__("./node_modules/.pnpm/react-virtualized@9.22.5_react-dom@18.2.0_react@18.2.0/node_modules/react-virtualized/dist/es/List/index.js"),jsx_runtime=__webpack_require__("./node_modules/.pnpm/react@18.2.0/node_modules/react/jsx-runtime.js");function SidebarList(_ref){let{category}=_ref,{normalizedActiveListItemKey,sidebarWidth,newItemInlineCategory,savingNewItem}=(0,index_esm.useValues)(navigationLogic.f),{cancelNewItem}=(0,index_esm.useActions)(navigationLogic.f),{saveNewItem}=(0,index_esm.useAsyncActions)(navigationLogic.f),emptyStateSkeletonCount=(0,react.useMemo)(()=>4+Math.floor(4*Math.random()),[]),{items,remote}=category,addingNewItem=newItemInlineCategory===category.key,firstItem=items.find(Boolean),listProps={className:"SidebarList",width:sidebarWidth,rowHeight:firstItem&&"summary"in firstItem?46:32,rowRenderer:_ref2=>{let active,{index:rawIndex,style}=_ref2,index=addingNewItem?rawIndex-1:rawIndex;if(-1===index)return(0,jsx_runtime.jsx)(SidebarListItem,{item:{key:"__tentative__",onSave:async newName=>saveNewItem(newName),onCancel:cancelNewItem,loading:savingNewItem},validateName:category.validateName,style:style},index);let item=items[index];if(!item)return(0,jsx_runtime.jsx)(SidebarListItemSkeleton,{style:style},index);let normalizedItemKey=Array.isArray(item.key)?item.key.map(keyPart=>`${category.key}${navigationLogic.l}${keyPart}`):`${category.key}${navigationLogic.l}${item.key}`;return active=Array.isArray(normalizedItemKey)?"string"==typeof normalizedActiveListItemKey&&normalizedItemKey.includes(normalizedActiveListItemKey):normalizedItemKey===normalizedActiveListItemKey,(0,jsx_runtime.jsx)(SidebarListItem,{item:item,validateName:category.validateName,active:active,style:style},index)},overscanRowCount:20,tabIndex:null};return(0,jsx_runtime.jsx)("div",{className:"flex-1","aria-busy":category.loading,children:(0,jsx_runtime.jsx)(AutoSizer.q,{disableWidth:!0,children:_ref3=>{let{height}=_ref3;return category.loading&&0===category.items.length?Array(emptyStateSkeletonCount).fill(null).map((_,index)=>(0,jsx_runtime.jsx)(SidebarListItemSkeleton,{style:{height:32}},index)):remote?(0,jsx_runtime.jsx)(InfiniteLoader.b,{isRowLoaded:_ref4=>{let{index}=_ref4;return remote.isItemLoaded(index)},loadMoreRows:_ref5=>{let{startIndex,stopIndex}=_ref5;return remote.loadMoreItems(startIndex,stopIndex)},rowCount:remote.itemCount,minimumBatchSize:remote.minimumBatchSize||100,children:_ref6=>{let{onRowsRendered,registerChild}=_ref6;return(0,jsx_runtime.jsx)(List.aV,{...listProps,ref:registerChild,height:height,rowCount:remote.itemCount+Number(addingNewItem),onRowsRendered:onRowsRendered})}}):(0,jsx_runtime.jsx)(List.aV,{...listProps,height:height,rowCount:items.length+Number(addingNewItem)})}})})}function isItemTentative(item){return"onSave"in item}function SidebarListItem(_ref7){let content,{item,validateName,active,style}=_ref7,[isMenuOpen,setIsMenuOpen]=(0,react.useState)(!1),[newName,setNewName]=(0,react.useState)(null),[newNameValidationError,setNewNameValidationError]=(0,react.useState)(null),[isSavingName,setIsSavingName]=(0,react.useState)(!1),ref=(0,react.useRef)(null);item.ref=ref;let isSaving=isItemTentative(item)?item.loading:isSavingName,menuItems=(0,react.useMemo)(()=>{if(!isItemTentative(item)){if(item.onRename){if("function"!=typeof item.menuItems)throw Error('menuItems must be a function for renamable items so that the "Rename" item is shown');return item.menuItems(()=>setNewName(item.name))}return"function"==typeof item.menuItems?item.menuItems(()=>console.error("Cannot rename item without onRename handler")):item.menuItems}},[item,setNewName]),cancel=()=>{isItemTentative(item)&&item.onCancel(),setNewName(null),setNewNameValidationError(null)},validate=name=>{if(validateName){let validation=validateName(name);return setNewNameValidationError(validation||null),!validation}return!0},save=isItemTentative(item)?async name=>{validate(name)&&await item.onSave(name)}:item.onRename?async newName=>{if(!newName||newName===item.name)return cancel();if(validate(newName)){setIsSavingName(!0);try{await item.onRename?.(newName)}catch(error){(0,esm_exports.Tb)(error),src.UJ.error("Could not rename item")}finally{setIsSavingName(!1),cancel()}}}:null;if((0,react.useEffect)(()=>{if(!isItemTentative(item)&&save&&null===newName){let onDoubleClick=()=>{setNewName(item.name)},element=ref.current;if(element)return element.addEventListener("dblclick",onDoubleClick),()=>{element.removeEventListener("dblclick",onDoubleClick)}}}),save&&(isItemTentative(item)||null!==newName))content=(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[(0,jsx_runtime.jsx)("div",{className:"SidebarListItem__rename",ref:ref,children:(0,jsx_runtime.jsx)("input",{value:newName||"",onChange:e=>setNewName(e.target.value),onKeyDown:e=>{"ArrowDown"===e.key?(navigationLogic.f.actions.focusNextItem(),e.preventDefault()):"ArrowUp"===e.key?(navigationLogic.f.actions.focusPreviousItem(),e.preventDefault()):"Enter"===e.key?(save(newName||"").then(()=>{setTimeout(()=>ref.current?.focus(),0)}),e.preventDefault()):"Escape"===e.key&&(cancel(),setTimeout(()=>ref.current?.focus(),0),e.preventDefault())},onFocus:e=>{navigationLogic.f.actions.setLastFocusedItemByKey(Array.isArray(item.key)?item.key[0]:item.key),e.target.select()},onBlur:e=>{e.relatedTarget?.ariaLabel==="Save name"?save(newName||""):cancel()},placeholder:isItemTentative(item)?"Adding something new…":`Renaming ${item.name}…`,disabled:isSaving,autoFocus:!0})}),newNameValidationError&&(0,jsx_runtime.jsx)("div",{className:"SidebarListItem__error",children:newNameValidationError})]});else{if(isItemTentative(item))throw Error("Tentative items should not be rendered in read mode");let formattedName=item.searchMatch?.nameHighlightRanges?.length?(0,jsx_runtime.jsx)(TextWithHighlights,{ranges:item.searchMatch.nameHighlightRanges,children:item.name}):item.name;(!item.url||item.isNamePlaceholder)&&(formattedName=(0,jsx_runtime.jsx)("i",{children:formattedName})),item.tag&&(formattedName=(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[formattedName,(0,jsx_runtime.jsx)(src.oe,{type:item.tag.status,size:"small",className:"ml-2",children:item.tag.text})]})),content=(0,jsx_runtime.jsx)(apps_common_src.rU,{ref:ref,to:item.url||void 0,className:"SidebarListItem__link",onKeyDown:e=>{"ArrowDown"===e.key?e.metaKey||e.ctrlKey?e.target.click():(navigationLogic.f.actions.focusNextItem(),e.preventDefault()):"ArrowUp"===e.key?(navigationLogic.f.actions.focusPreviousItem(),e.preventDefault()):save&&"Enter"===e.key&&(setNewName(item.name),e.preventDefault())},onFocus:()=>{navigationLogic.f.actions.setLastFocusedItemByKey(Array.isArray(item.key)?item.key[0]:item.key)},children:"summary"in item?(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[(0,jsx_runtime.jsxs)("div",{className:"flex space-between gap-1",children:[(0,jsx_runtime.jsx)("h5",{className:"flex-1",children:formattedName}),(0,jsx_runtime.jsx)("div",{children:(0,jsx_runtime.jsx)(ExtraContext,{data:item.extraContextTop})})]}),(0,jsx_runtime.jsxs)("div",{className:"flex space-between gap-1",children:[(0,jsx_runtime.jsx)("div",{className:"flex-1 overflow-hidden text-ellipsis",children:item.searchMatch?.matchingFields?`Matching fields: ${item.searchMatch.matchingFields.map(field=>field.replace(/_/g," ")).join(", ")}`:item.summary}),(0,jsx_runtime.jsx)("div",{children:(0,jsx_runtime.jsx)(ExtraContext,{data:item.extraContextBottom})})]})]}):(0,jsx_runtime.jsx)("h5",{children:formattedName})})}return(0,jsx_runtime.jsxs)("li",{id:`sidebar-${item.key}`,title:isItemTentative(item)?"New item":item.name,className:(0,clsx_m.default)("SidebarListItem","menuItems"in item&&item.menuItems?.length&&"SidebarListItem--has-menu",isMenuOpen&&"SidebarListItem--is-menu-open",(isItemTentative(item)||null!==newName)&&"SidebarListItem--is-renaming","marker"in item&&!!item.marker&&`SidebarListItem--marker-${item.marker.type}`,"marker"in item&&!!item.marker?.status&&`SidebarListItem--marker-status-${item.marker.status}`,"summary"in item&&"SidebarListItem--extended"),"aria-disabled":!isItemTentative(item)&&!item.url,"aria-current":active?"page":void 0,"aria-invalid":!!newNameValidationError,style:style,children:[content,isItemTentative(item)||null!==newName?(0,jsx_runtime.jsxs)("div",{className:"SidebarListItem__actions",children:[!isSaving&&(0,jsx_runtime.jsx)(src.Jp,{size:"small",noPadding:!0,icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconX,{}),tooltip:(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:["Cancel ",(0,jsx_runtime.jsx)(KeyboardShortcut.e,{escape:!0})]}),"aria-label":"Cancel"}),(0,jsx_runtime.jsx)(src.Jp,{size:"small",noPadding:!0,icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconCheckCircle,{}),tooltip:isSaving?null:(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:["Save name ",(0,jsx_runtime.jsx)(KeyboardShortcut.e,{enter:!0})]}),loading:isSaving,"aria-label":"Save name"})]}):!!menuItems?.length&&(0,jsx_runtime.jsx)(LemonMenu.d,{items:menuItems,onVisibilityChange:setIsMenuOpen,children:(0,jsx_runtime.jsx)("div",{className:"SidebarListItem__actions",children:(0,jsx_runtime.jsx)(src.Jp,{size:"small",noPadding:!0,icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconEllipsis,{})})})})]})}function TextWithHighlights(_ref8){let{children,ranges}=_ref8,segments=[],previousBoldEnd=0,segmentIndex=0;for(let i=0;ipreviousBoldEnd&&(segments.push((0,jsx_runtime.jsx)(react.Fragment,{children:children.slice(previousBoldEnd,currentBoldStart)},segmentIndex)),segmentIndex++),segments.push((0,jsx_runtime.jsx)("b",{children:children.slice(currentBoldStart,currentBoldEnd)},segmentIndex)),segmentIndex++,previousBoldEnd=currentBoldEnd}return previousBoldEnd0?()=>toggleAccordion(key):void 0,children:[loading?(0,jsx_runtime.jsx)(Spinner.$,{}):(0,jsx_runtime.jsx)(icons.VG,{}),(0,jsx_runtime.jsxs)("h4",{children:[(0,utils.fm)(pluralizeCategory(category.noun)),!loading&&isEmpty&&(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[" ",(0,jsx_runtime.jsx)("i",{children:"(empty)"})]})]}),(0,jsx_runtime.jsx)(NewItemButton,{category:category})]}),isExpanded&&(0,jsx_runtime.jsx)(SidebarList,{category:category})]})}function pluralizeCategory(noun){return Array.isArray(noun)?noun[1]:`${noun}s`}function NewItemButton(_ref){var noun;let{category}=_ref,{newItemCategory}=(0,index_esm.useValues)(navigationLogic.f),{initiateNewItemInCategory}=(0,index_esm.useActions)(navigationLogic.f);return category.onAdd?(0,jsx_runtime.jsx)(src.Jp,{icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconPlus,{}),size:"small",noPadding:!0,to:"string"==typeof category.onAdd?category.onAdd:void 0,onClick:e=>{"function"==typeof category.onAdd&&initiateNewItemInCategory(category.key),e.stopPropagation()},active:newItemCategory===category.key,tooltip:`New ${Array.isArray(noun=category.noun)?noun[0]:noun}`,tooltipPlacement:"bottom"}):null}function Sidebar(_ref){let{navbarItem}=_ref,inputElementRef=(0,react.useRef)(null),{sidebarWidth:width,isSidebarShown:isShown,isResizeInProgress,sidebarOverslideDirection:overslideDirection,isSidebarKeyboardShortcutAcknowledged,isSearchShown}=(0,index_esm.useValues)((0,navigationLogic.f)({inputElement:inputElementRef.current})),{beginResize}=(0,index_esm.useActions)((0,navigationLogic.f)({inputElement:inputElementRef.current})),{contents}=(0,index_esm.useValues)(navbarItem.logic),onlyCategoryTitle=1===contents.length?(0,utils.fm)(pluralizeCategory(contents[0].noun)):null,title=onlyCategoryTitle&&onlyCategoryTitle.toLowerCase()!==navbarItem.label.toLowerCase()?`${navbarItem.label} — ${onlyCategoryTitle}`:navbarItem.label;return(0,jsx_runtime.jsxs)("div",{className:(0,clsx_m.default)("Sidebar3000",isResizeInProgress&&"Sidebar3000--resizing",overslideDirection&&`Sidebar3000--overslide-${overslideDirection}`),"aria-hidden":!isShown,style:{"--sidebar-width":`${isShown?width:0}px`},children:[(0,jsx_runtime.jsxs)("div",{className:"Sidebar3000__content",children:[(0,jsx_runtime.jsxs)("div",{className:"Sidebar3000__header",children:[(0,jsx_runtime.jsx)("h3",{className:"grow",children:title}),(0,jsx_runtime.jsx)(SidebarActions,{activeSidebarLogic:navbarItem.logic})]}),navbarItem?.logic&&isSearchShown&&(0,jsx_runtime.jsx)(SidebarSearchBar,{activeSidebarLogic:navbarItem.logic,inputElementRef:inputElementRef}),(0,jsx_runtime.jsx)("div",{className:"Sidebar3000__lists",children:navbarItem?.logic&&(0,jsx_runtime.jsx)(SidebarContent,{activeSidebarLogic:navbarItem.logic})}),!isSidebarKeyboardShortcutAcknowledged&&(0,jsx_runtime.jsx)(SidebarKeyboardShortcut,{}),contents.filter(_ref2=>{let{modalContent}=_ref2;return modalContent}).map(category=>(0,jsx_runtime.jsx)(react.Fragment,{children:category.modalContent},category.key))]}),(0,jsx_runtime.jsx)("div",{className:"Sidebar3000__slider",onMouseDown:e=>{0===e.button&&beginResize()}})]})}function SidebarActions(_ref3){let{activeSidebarLogic}=_ref3,{isSearchShown}=(0,index_esm.useValues)(navigationLogic.f),{setIsSearchShown}=(0,index_esm.useActions)(navigationLogic.f),{contents}=(0,index_esm.useValues)(activeSidebarLogic);return(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[1===contents.length&&(0,jsx_runtime.jsx)(NewItemButton,{category:contents[0]}),(0,jsx_runtime.jsx)(src.Jp,{icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconSearch,{}),size:"small",noPadding:!0,onClick:()=>setIsSearchShown(!isSearchShown),active:isSearchShown,tooltip:(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:["Find ",(0,jsx_runtime.jsx)(KeyboardShortcut.e,{shift:!0,command:!0,f:!0})]}),tooltipPlacement:"bottom"})]})}function SidebarSearchBar(_ref4){let{activeSidebarLogic,inputElementRef}=_ref4,{searchTerm}=(0,index_esm.useValues)(navigationLogic.f),{setIsSearchShown,setSearchTerm,focusNextItem,setLastFocusedItemIndex}=(0,index_esm.useActions)(navigationLogic.f),{contents,debounceSearch}=(0,index_esm.useValues)(activeSidebarLogic),[localSearchTerm,setLocalSearchTerm]=(0,react.useState)(searchTerm),setSearchTermDebounced=(0,index_module.y1)(value=>setSearchTerm(value),debounceSearch?300:void 0),isLoading=contents.some(item=>item.loading);return(0,jsx_runtime.jsx)("div",{children:(0,jsx_runtime.jsx)(src.DF,{inputRef:inputElementRef,type:"search",value:localSearchTerm,onChange:value=>{setLocalSearchTerm(value),setSearchTermDebounced(value)},size:"small",prefix:(localSearchTerm||searchTerm)&&(localSearchTerm!==searchTerm||isLoading)?(0,jsx_runtime.jsx)(Spinner.$,{textColored:!0}):null,placeholder:"Search...",onKeyDown:e=>{"Escape"===e.key?(setIsSearchShown(!1),e.preventDefault()):"ArrowDown"===e.key&&(focusNextItem(),e.preventDefault())},onFocus:()=>{setLastFocusedItemIndex(-1)},autoFocus:!0,suffix:(0,jsx_runtime.jsx)(KeyboardShortcut.e,{muted:!0,arrowdown:!0,arrowup:!0})})})}function SidebarContent(_ref5){let{activeSidebarLogic}=_ref5,{contents}=(0,index_esm.useValues)(activeSidebarLogic);return 1!==contents.length?(0,jsx_runtime.jsx)(jsx_runtime.Fragment,{children:contents.map(accordion=>(0,jsx_runtime.jsx)(SidebarAccordion,{category:accordion},accordion.key))}):(0,jsx_runtime.jsx)(SidebarList,{category:contents[0]})}function SidebarKeyboardShortcut(){let{acknowledgeSidebarKeyboardShortcut}=(0,index_esm.useActions)(navigationLogic.f);return(0,jsx_runtime.jsxs)("div",{className:"Sidebar3000__hint",children:[(0,jsx_runtime.jsxs)("span",{className:"truncate",children:[(0,jsx_runtime.jsx)("i",{children:"Tip:"})," Press ",(0,jsx_runtime.jsx)(KeyboardShortcut.e,{command:!0,b:!0})," to toggle this sidebar"]}),(0,jsx_runtime.jsx)(src.Jp,{icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconX,{}),size:"small",onClick:()=>acknowledgeSidebarKeyboardShortcut(),noPadding:!0})]})}},"./frontend/src/layout/navigation-3000/navigationLogic.tsx":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{l:()=>ITEM_KEY_PART_SEPARATOR,f:()=>navigation3000Logic});var posthog_icons_es=__webpack_require__("./node_modules/.pnpm/@posthog+icons@0.8.5_react-dom@18.2.0_react@18.2.0/node_modules/@posthog/icons/dist/posthog-icons.es.js"),src=__webpack_require__("./frontend/@posthog/lemon-ui/src/index.ts"),esm_exports=__webpack_require__("./node_modules/.pnpm/@sentry+core@7.112.1/node_modules/@sentry/core/esm/exports.js"),index_esm=__webpack_require__("./node_modules/.pnpm/kea@3.1.5_react@18.2.0/node_modules/kea/lib/index.esm.js"),lib=__webpack_require__("./node_modules/.pnpm/kea-router@3.2.0_kea@3.1.5/node_modules/kea-router/lib/index.js"),kea_subscriptions_lib=__webpack_require__("./node_modules/.pnpm/kea-subscriptions@3.0.1_kea@3.1.5/node_modules/kea-subscriptions/lib/index.js"),constants=__webpack_require__("./frontend/src/lib/constants.tsx"),LemonMenu=__webpack_require__("./frontend/src/lib/lemon-ui/LemonMenu/LemonMenu.tsx"),featureFlagLogic=__webpack_require__("./frontend/src/lib/logic/featureFlagLogic.ts"),utils=__webpack_require__("./frontend/src/lib/utils.tsx"),react=__webpack_require__("./node_modules/.pnpm/react@18.2.0/node_modules/react/index.js"),sceneLogic=__webpack_require__("./frontend/src/scenes/sceneLogic.ts"),sceneTypes=__webpack_require__("./frontend/src/scenes/sceneTypes.ts"),teamLogic=__webpack_require__("./frontend/src/scenes/teamLogic.tsx"),urls=__webpack_require__("./frontend/src/scenes/urls.ts"),dashboardsModel=__webpack_require__("./frontend/src/models/dashboardsModel.tsx"),types=__webpack_require__("./frontend/src/types.ts"),navigationLogic=__webpack_require__("./frontend/src/layout/navigation/navigationLogic.ts"),fuse_esm=__webpack_require__("./node_modules/.pnpm/fuse.js@6.6.2/node_modules/fuse.js/dist/fuse.esm.js"),eventUsageLogic=__webpack_require__("./frontend/src/lib/utils/eventUsageLogic.ts"),dashboardLogic=__webpack_require__("./frontend/src/scenes/dashboard/dashboardLogic.tsx"),deleteDashboardLogic=__webpack_require__("./frontend/src/scenes/dashboard/deleteDashboardLogic.ts"),duplicateDashboardLogic=__webpack_require__("./frontend/src/scenes/dashboard/duplicateDashboardLogic.ts"),newDashboardLogic=__webpack_require__("./frontend/src/scenes/dashboard/newDashboardLogic.ts"),NewDashboardModal=__webpack_require__("./frontend/src/scenes/dashboard/NewDashboardModal.tsx"),jsx_runtime=__webpack_require__("./node_modules/.pnpm/react@18.2.0/node_modules/react/jsx-runtime.js");let fuse=new fuse_esm.Z([],{keys:[{name:"name",weight:2},"description","tags"],threshold:.3,ignoreLocation:!0,includeMatches:!0}),dashboardsSidebarLogic=(0,index_esm.kea)([(0,index_esm.path)(["layout","navigation-3000","sidebars","dashboardsSidebarLogic"]),(0,index_esm.connect)({values:[dashboardsModel.h,["pinSortedDashboards","dashboardsLoading"],sceneLogic.k,["activeScene","sceneParams"]],actions:[dashboardsModel.h,["pinDashboard","unpinDashboard"],duplicateDashboardLogic.T,["showDuplicateDashboardModal"],deleteDashboardLogic.r,["showDeleteDashboardModal"],newDashboardLogic.Z,["showNewDashboardModal"]]}),(0,index_esm.selectors)(_ref=>{let{actions}=_ref;return{contents:[s=>[s.relevantDashboards,s.dashboardsLoading],(relevantDashboards,dashboardsLoading)=>[{key:"dashboards",noun:"dashboard",loading:dashboardsLoading,onAdd:()=>actions.showNewDashboardModal(),modalContent:(0,jsx_runtime.jsx)(NewDashboardModal.O,{}),items:relevantDashboards.map(_ref2=>{let[dashboard,matches]=_ref2;return{key:dashboard.id,name:dashboard.name,url:urls.j.dashboard(dashboard.id),marker:dashboard.pinned?{type:"fold"}:void 0,searchMatch:matches?{matchingFields:matches.map(match=>match.key),nameHighlightRanges:matches.find(match=>"name"===match.key)?.indices}:null,menuItems:initiateRename=>[{items:[{to:urls.j.dashboard(dashboard.id),onClick:()=>{(0,dashboardLogic.BM)({id:dashboard.id}).mount(),(0,dashboardLogic.BM)({id:dashboard.id}).actions.setDashboardMode(types.MN.Edit,eventUsageLogic.GU.DashboardsList)},label:"Edit"},{onClick:()=>{actions.showDuplicateDashboardModal(dashboard.id,dashboard.name)},label:"Duplicate"}]},{items:[{onClick:()=>{(dashboard.pinned?actions.unpinDashboard:actions.pinDashboard)(dashboard.id,eventUsageLogic.GU.MoreDropdown)},label:dashboard.pinned?"Unpin":"Pin"}]},{items:[{onClick:initiateRename,label:"Rename",keyboardShortcut:["enter"]},{onClick:()=>{actions.showDeleteDashboardModal(dashboard.id)},status:"danger",label:"Delete dashboard"}]}],onRename:async newName=>{await dashboardsModel.h.asyncActions.updateDashboard({id:dashboard.id,name:newName})}}})}]],activeListItemKey:[s=>[s.activeScene,s.sceneParams],(activeScene,sceneParams)=>activeScene===sceneTypes.x.Dashboard&&sceneParams.params.id?["dashboards",parseInt(sceneParams.params.id)]:null],relevantDashboards:[s=>[s.pinSortedDashboards,navigation3000Logic.selectors.searchTerm],(pinSortedDashboards,searchTerm)=>searchTerm?fuse.search(searchTerm).map(result=>[result.item,result.matches]):pinSortedDashboards.map(dashboard=>[dashboard,null])]}}),(0,kea_subscriptions_lib.Vt)({pinSortedDashboards:pinSortedDashboards=>{fuse.setCollection(pinSortedDashboards)}})]);var kea_loaders_lib=__webpack_require__("./node_modules/.pnpm/kea-loaders@3.0.0_kea@3.1.5/node_modules/kea-loaders/lib/index.js"),api=__webpack_require__("./frontend/src/lib/api.ts"),TaxonomicFilter_types=__webpack_require__("./frontend/src/lib/components/TaxonomicFilter/types.ts"),taxonomy=__webpack_require__("./frontend/src/lib/taxonomy.tsx"),actionsLogic=__webpack_require__("./frontend/src/scenes/actions/actionsLogic.ts");function findSearchTermInItemName(name,searchTerm){if(!searchTerm||!name)return null;let ranges=[],workingName=name.toLowerCase(),workingSearchTerm=searchTerm.toLowerCase(),index=workingName.indexOf(workingSearchTerm);for(;-1!==index;)ranges.push([index,index+searchTerm.length]),index=workingName.indexOf(workingSearchTerm,index+1);return ranges.length?{nameHighlightRanges:ranges}:null}let dataManagementSidebarLogic=(0,index_esm.kea)([(0,index_esm.path)(["layout","navigation-3000","sidebars","dataManagementSidebarLogic"]),(0,index_esm.connect)(()=>({values:[sceneLogic.k,["activeScene","sceneParams"],navigation3000Logic,["searchTerm"],actionsLogic.M,["actions","actionsLoading"]]})),(0,index_esm.actions)({loadEventDefinitions:(startIndex,stopIndex)=>({startIndex,stopIndex}),loadPropertyDefinitions:(startIndex,stopIndex)=>({startIndex,stopIndex})}),(0,kea_loaders_lib.loaders)(_ref=>{let{values,cache}=_ref;return{infiniteEventDefinitions:[[[],0],{loadEventDefinitions:async _ref2=>{let{startIndex,stopIndex}=_ref2;startIndex||(cache.requestedEventDefinitions=[]);for(let i=startIndex;i{let{startIndex,stopIndex}=_ref3;startIndex||(cache.requestedPropertyDefinitions=[]);for(let i=startIndex;i{let{actions,values,cache}=_ref4;return{contents:[s=>[s.infiniteEventDefinitions,s.infiniteEventDefinitionsLoading,s.infinitePropertyDefinitions,s.infinitePropertyDefinitionsLoading,s.relevantActions,s.actionsLoading],(_ref5,infiniteEventDefinitionsLoading,_ref6,infinitePropertyDefinitionsLoading,relevantActions,actionsLoading)=>{let[eventDefinitions,eventDefinitionCount]=_ref5,[propertyDefinitions,propertyDefinitionCount]=_ref6;return[{key:"event-definitions",noun:"event definition",loading:infiniteEventDefinitionsLoading,items:eventDefinitions.map(eventDefinition=>eventDefinition&&{key:eventDefinition.id,name:(0,taxonomy.R6)(eventDefinition.name,TaxonomicFilter_types.t.Events),url:urls.j.eventDefinition(eventDefinition.id),searchMatch:findSearchTermInItemName((0,taxonomy.R6)(eventDefinition.name,TaxonomicFilter_types.t.Events),values.searchTerm),menuItems:[{label:"View recordings",to:urls.j.replay(types.yd.Home,{filter_group:{type:types.J2.And,values:[{type:types.J2.And,values:[{id:eventDefinition.name,type:"events",order:0,name:eventDefinition.name}]}]}})}]}),remote:{isItemLoaded:index=>!!(cache.requestedEventDefinitions[index]||eventDefinitions[index]),loadMoreItems:(startIndex,stopIndex)=>actions.loadEventDefinitions(startIndex,stopIndex),itemCount:eventDefinitionCount}},{key:"property-definitions",noun:"property definition",loading:infinitePropertyDefinitionsLoading,items:propertyDefinitions.map(propertyDefinition=>propertyDefinition&&{key:propertyDefinition.id,name:(0,taxonomy.R6)(propertyDefinition.name,TaxonomicFilter_types.t.EventProperties),url:urls.j.propertyDefinition(propertyDefinition.id),searchMatch:findSearchTermInItemName((0,taxonomy.R6)(propertyDefinition.name,TaxonomicFilter_types.t.EventProperties),values.searchTerm)}),remote:{isItemLoaded:index=>!!(cache.requestedPropertyDefinitions[index]||propertyDefinitions[index]),loadMoreItems:(startIndex,stopIndex)=>actions.loadPropertyDefinitions(startIndex,stopIndex),itemCount:propertyDefinitionCount}},{key:"actions",noun:"action",loading:actionsLoading,onAdd:urls.j.action("new"),items:relevantActions.map(_ref7=>{let[action,matches]=_ref7;return{key:action.id,name:action.name,url:urls.j.action(action.id),searchMatch:matches?{matchingFields:matches.map(match=>match.key),nameHighlightRanges:matches.find(match=>"name"===match.key)?.indices}:null}})}]}],activeListItemKey:[s=>[s.activeScene,s.sceneParams],(activeScene,sceneParams)=>activeScene===sceneTypes.x.EventDefinition?["event-definitions",sceneParams.params.id]:activeScene===sceneTypes.x.PropertyDefinition?["property-definitions",sceneParams.params.id]:activeScene===sceneTypes.x.Action?["actions",sceneParams.params.id]:null],debounceSearch:[s=>[s.searchTerm],()=>!0],relevantActions:[s=>[s.actions,navigation3000Logic.selectors.searchTerm],(actions,searchTerm)=>searchTerm?actionsLogic.J.search(searchTerm).map(result=>[result.item,result.matches]):actions.map(action=>[action,null])]}}),(0,kea_subscriptions_lib.Vt)(_ref8=>{let{actions}=_ref8;return{searchTerm:()=>{actions.loadEventDefinitions(0,100),actions.loadPropertyDefinitions(0,100)}}}),(0,index_esm.afterMount)(_ref9=>{let{actions,cache}=_ref9;cache.requestedEventDefinitions=[],cache.requestedPropertyDefinitions=[],actions.loadEventDefinitions(0,100),actions.loadPropertyDefinitions(0,100)})]);var dayjs=__webpack_require__("./frontend/src/lib/dayjs.ts"),experimentsLogic=__webpack_require__("./frontend/src/scenes/experiments/experimentsLogic.ts");let experiments_fuse=new fuse_esm.Z([],{keys:[{name:"name",weight:2},"description"],threshold:.3,ignoreLocation:!0,includeMatches:!0}),EXPERIMENT_STATUS_TO_RIBBON_STATUS={draft:"muted",running:"success",complete:"completion"},experimentsSidebarLogic=(0,index_esm.kea)([(0,index_esm.path)(["layout","navigation-3000","sidebars","experimentsSidebarLogic"]),(0,index_esm.connect)({values:[experimentsLogic.OK,["experiments","experimentsLoading"],sceneLogic.k,["activeScene","sceneParams"]],actions:[experimentsLogic.OK,["loadExperiments","deleteExperiment"]]}),(0,index_esm.selectors)(_ref=>{let{actions}=_ref;return{contents:[s=>[s.relevantExperiments,s.experimentsLoading],(relevantExperiments,experimentsLoading)=>[{key:"experiments",noun:"experiment",loading:experimentsLoading,items:relevantExperiments.map(_ref2=>{let[experiment,matches]=_ref2,experimentStatus=(0,experimentsLogic.Ot)(experiment);return{key:experiment.id,name:experiment.name,summary:experimentStatus===types.mN.Draft?"Draft":experimentStatus===types.mN.Complete?`Completed ${(0,dayjs.Bv)(experiment.start_date).fromNow()}`:`Running for ${(0,dayjs.Bv)(experiment.start_date).fromNow(!0)} now`,extraContextTop:(0,dayjs.Bv)(experiment.created_at),extraContextBottom:`by ${experiment.created_by?.first_name||"unknown"}`,url:urls.j.experiment(experiment.id),searchMatch:matches?{matchingFields:matches.map(match=>match.key),nameHighlightRanges:matches.find(match=>"name"===match.key)?.indices}:null,marker:{type:"ribbon",status:EXPERIMENT_STATUS_TO_RIBBON_STATUS[experimentStatus]},menuItems:[{items:[{label:"Delete experiment",onClick:()=>actions.deleteExperiment(experiment.id),status:"danger"}]}]}}),onAdd:urls.j.experiment("new")}]],activeListItemKey:[s=>[s.activeScene,s.sceneParams],(activeScene,sceneParams)=>activeScene===sceneTypes.x.Experiment&&sceneParams.params.id?["experiments",parseInt(sceneParams.params.id)]:null],relevantExperiments:[s=>[s.experiments,navigation3000Logic.selectors.searchTerm],(experiments,searchTerm)=>searchTerm?experiments_fuse.search(searchTerm).map(result=>[result.item,result.matches]):experiments.map(experiment=>[experiment,null])]}}),(0,kea_subscriptions_lib.Vt)({experiments:experiments=>{experiments_fuse.setCollection(experiments)}})]);var copyToClipboard=__webpack_require__("./frontend/src/lib/utils/copyToClipboard.tsx"),deleteWithUndo=__webpack_require__("./frontend/src/lib/utils/deleteWithUndo.tsx"),feature_flags_featureFlagLogic=__webpack_require__("./frontend/src/scenes/feature-flags/featureFlagLogic.ts"),FeatureFlags=__webpack_require__("./frontend/src/scenes/feature-flags/FeatureFlags.tsx"),featureFlagsLogic=__webpack_require__("./frontend/src/scenes/feature-flags/featureFlagsLogic.ts"),groupsModel=__webpack_require__("./frontend/src/models/groupsModel.ts"),schema=__webpack_require__("./frontend/src/queries/schema.ts");let featureFlags_fuse=new fuse_esm.Z([],{keys:[{name:"key",weight:2},"name","tags"],threshold:.3,ignoreLocation:!0,includeMatches:!0}),featureFlagsSidebarLogic=(0,index_esm.kea)([(0,index_esm.path)(["layout","navigation-3000","sidebars","featureFlagsSidebarLogic"]),(0,index_esm.connect)({values:[featureFlagsLogic.b,["featureFlags","featureFlagsLoading"],teamLogic.H,["currentTeamId"],sceneLogic.k,["activeScene","sceneParams"],groupsModel.$,["aggregationLabel"]],actions:[featureFlagsLogic.b,["updateFeatureFlag","loadFeatureFlags"]]}),(0,index_esm.selectors)(_ref=>{let{actions}=_ref;return{contents:[s=>[s.relevantFeatureFlags,s.featureFlagsLoading,s.currentTeamId,s.aggregationLabel],(relevantFeatureFlags,featureFlagsLoading,currentTeamId,aggregationLabel)=>[{key:"feature-flags",noun:"feature flag",loading:featureFlagsLoading,onAdd:urls.j.featureFlag("new"),items:relevantFeatureFlags.map(_ref2=>{let[featureFlag,matches]=_ref2;if(!featureFlag.id)throw Error("Feature flag ID should never be missing in the sidebar");let query={kind:schema.OH.InsightVizNode,source:{kind:schema.OH.TrendsQuery,series:[{event:"$pageview",name:"$pageview",kind:schema.OH.EventsNode,math:types.vN.UniqueUsers}],breakdownFilter:{breakdown:`$feature/${featureFlag.key}`,breakdown_type:"event"}}};return{key:featureFlag.id,name:featureFlag.key,url:urls.j.featureFlag(featureFlag.id),summary:featureFlag.active?(0,FeatureFlags.groupFilters)(featureFlag.filters,!0,aggregationLabel):(0,jsx_runtime.jsx)("i",{children:"Disabled"}),extraContextTop:(0,dayjs.Bv)(featureFlag.created_at),extraContextBottom:`by ${featureFlag.created_by?.first_name||"unknown"}`,marker:{type:"ribbon",status:featureFlag.active?"success":"danger"},searchMatch:matches?{matchingFields:matches.map(match=>"name"===match.key?"description":match.key),nameHighlightRanges:matches.find(match=>"key"===match.key)?.indices}:null,menuItems:[{items:[{label:"Edit",to:urls.j.featureFlag(featureFlag.id),onClick:()=>{(0,feature_flags_featureFlagLogic.hk)({id:featureFlag.id}).mount(),(0,feature_flags_featureFlagLogic.hk)({id:featureFlag.id}).actions.editFeatureFlag(!0)},disabledReason:featureFlag.can_edit?null:"You don't have permission to edit this feature flag."}]},{items:[{label:`${featureFlag.active?"Disable":"Enable"} flag`,onClick:()=>actions.updateFeatureFlag({id:featureFlag.id,payload:{active:!featureFlag.active}}),disabledReason:featureFlag.can_edit?null:"You don't have permission to edit this feature flag."},{label:"Copy flag key",onClick:()=>{(0,copyToClipboard.v)(featureFlag.key,"feature flag key")}},{label:"Try out in Insights",to:urls.j.insightNew(void 0,void 0,query),"data-attr":"usage"}]},{items:[{label:"Delete feature flag",onClick:()=>{(0,deleteWithUndo.S)({endpoint:`projects/${currentTeamId}/feature_flags`,object:{name:featureFlag.key,id:featureFlag.id},callback:actions.loadFeatureFlags})},disabledReason:featureFlag.can_edit?null:"You don't have permission to edit this feature flag.",status:"danger"}]}]}})}]],activeListItemKey:[s=>[s.activeScene,s.sceneParams],(activeScene,sceneParams)=>activeScene===sceneTypes.x.FeatureFlag&&sceneParams.params.id?["feature-flags",parseInt(sceneParams.params.id)]:null],relevantFeatureFlags:[s=>[s.featureFlags,navigation3000Logic.selectors.searchTerm],(featureFlags,searchTerm)=>searchTerm?featureFlags_fuse.search(searchTerm).map(result=>[result.item,result.matches]):featureFlags.map(featureFlag=>[featureFlag,null])]}}),(0,kea_subscriptions_lib.Vt)({featureFlags:featureFlags=>{featureFlags_fuse.setCollection(featureFlags)}})]);var utils_api=__webpack_require__("./frontend/src/scenes/insights/utils/api.ts"),savedInsightsLogic=__webpack_require__("./frontend/src/scenes/saved-insights/savedInsightsLogic.ts"),insightsModel=__webpack_require__("./frontend/src/models/insightsModel.tsx");let insightsSidebarLogic=(0,index_esm.kea)([(0,index_esm.path)(["layout","navigation-3000","sidebars","insightsSidebarLogic"]),(0,index_esm.connect)(()=>({values:[savedInsightsLogic.w,["insights","insightsLoading","paramsFromFilters"],sceneLogic.k,["activeScene","sceneParams"],navigation3000Logic,["searchTerm"]],actions:[savedInsightsLogic.w,["loadInsights","setSavedInsightsFilters","duplicateInsight"]]})),(0,index_esm.reducers)(()=>({infiniteInsights:[[],{[savedInsightsLogic.w.actionTypes.loadInsightsSuccess]:(state,_ref)=>{let{insights}=_ref,items=0===insights.offset?[]:state.slice();for(let i=0;i{let{actions,values,cache}=_ref2;return{contents:[s=>[s.insights,s.infiniteInsights,s.insightsLoading,teamLogic.H.selectors.currentTeamId],(insights,infiniteInsights,insightsLoading,currentTeamId)=>[{key:"insights",noun:"insight",onAdd:urls.j.insightNew(),items:infiniteInsights.map(insight=>{if(insight)return{key:insight.short_id,name:insight.name||insight.derived_name||"Untitled",isNamePlaceholder:!insight.name,url:urls.j.insightView(insight.short_id),searchMatch:findSearchTermInItemName(insight.name||insight.derived_name||"",values.searchTerm),menuItems:initiateRename=>[{items:[{to:urls.j.insightEdit(insight.short_id),label:"Edit"},{onClick:()=>{actions.duplicateInsight(insight)},label:"Duplicate"}]},{items:[{onClick:initiateRename,label:"Rename",keyboardShortcut:["enter"]},{onClick:()=>{(0,deleteWithUndo.c)({object:insight,endpoint:`projects/${currentTeamId}/insights`,callback:actions.loadInsights})},status:"danger",label:"Delete insight"}]}],onRename:async newName=>{let updatedItem=await utils_api.L.update(insight.id,{name:newName});insightsModel.U.actions.renameInsightSuccess(updatedItem)}}}),loading:insightsLoading,remote:{isItemLoaded:index=>!!(cache.requestedInsights[index]||infiniteInsights[index]),loadMoreItems:async startIndex=>{for(let i=startIndex;i[s.activeScene,s.sceneParams],(activeScene,sceneParams)=>activeScene===sceneTypes.x.Insight&&sceneParams.params.shortId?["insights",sceneParams.params.shortId]:null],debounceSearch:[s=>[s.searchTerm],()=>!0]}}),(0,index_esm.listeners)(_ref3=>{let{values,cache}=_ref3;return{loadInsights:()=>{values.paramsFromFilters.offset||(cache.requestedInsights=[])}}}),(0,kea_subscriptions_lib.Vt)(_ref4=>{let{actions}=_ref4;return{searchTerm:searchTerm=>{actions.setSavedInsightsFilters({search:searchTerm},!1,!1)}}}),(0,index_esm.afterMount)(_ref5=>{let{cache}=_ref5;cache.requestedInsights=[]})]);var apps_common_src=__webpack_require__("./frontend/@posthog/apps-common/src/index.ts"),groupsListLogic=__webpack_require__("./frontend/src/scenes/groups/groupsListLogic.ts"),GroupActorDisplay=__webpack_require__("./frontend/src/scenes/persons/GroupActorDisplay.tsx"),person_utils=__webpack_require__("./frontend/src/scenes/persons/person-utils.ts"),personsLogic=__webpack_require__("./frontend/src/scenes/persons/personsLogic.tsx");let personsAndGroupsSidebarLogic=(0,index_esm.kea)([(0,index_esm.path)(["layout","navigation-3000","sidebars","personsAndGroupsSidebarLogic"]),(0,index_esm.connect)(()=>({values:[personsLogic.T,["persons","personsLoading"],groupsModel.$,["groupTypes"],sceneLogic.k,["activeScene","sceneParams"],navigation3000Logic,["searchTerm"]],actions:[personsLogic.T,["setListFilters as setPersonsListFilters","loadPersons"]]})),(0,index_esm.reducers)(()=>({infinitePersons:[[],{[personsLogic.T.actionTypes.loadPersonsSuccess]:(state,_ref)=>{let{persons}=_ref,items=0===persons.offset?[]:state.slice();for(let i=0;i{let{values,cache}=_ref2;return{contents:[s=>[s.persons,s.infinitePersons,s.personsLoading,s.groupTypes,s.groups,s.groupsLoading],(persons,infinitePersons,personsLoading,groupTypes,groups,groupsLoading)=>[{key:"persons",noun:"person",items:infinitePersons.map(person=>{if(!person)return person;let name=(0,person_utils.y)(person),{searchTerm}=values;return{key:person.distinct_ids,name:(0,person_utils.y)(person),url:(0,person_utils.s)(person),searchMatch:findSearchTermInItemName(name,searchTerm)}}),loading:personsLoading,remote:{isItemLoaded:index=>!!(cache.requestedPersons[index]||infinitePersons[index]),loadMoreItems:async(startIndex,stopIndex)=>{let moreUrl=persons.next||persons.previous;if(!moreUrl)throw Error("No URL for loading more persons is known");for(let i=startIndex;i<=stopIndex;i++)cache.requestedPersons[i]=!0;moreUrl=(0,lib.combineUrl)(moreUrl,{offset:startIndex,limit:stopIndex-startIndex+1}).url,await personsLogic.T.asyncActions.loadPersons(moreUrl)},itemCount:persons.count,minimumBatchSize:100}},...Array.from(groupTypes.values()).map(groupType=>({key:`groups-${groupType.group_type_index}`,noun:[groupType.name_singular||`${groupType.group_type} group`,groupType.name_plural||`${groupType.group_type} groups`],items:groups[groupType.group_type_index]?.results.map(group=>{let{searchTerm}=values,displayId=GroupActorDisplay.O(group.group_key,group.group_properties);return{key:group.group_key,name:displayId,url:apps_common_src.jk.group(groupType.group_type_index,group.group_key),searchMatch:findSearchTermInItemName(displayId,searchTerm)}})||[],loading:groupsLoading[groupType.group_type_index]}))]],groups:[s=>[,,,,,].fill(null).map((_,groupTypeIndex)=>state=>{if(s.groupTypes(state)[groupTypeIndex])return(0,groupsListLogic.z)({groupTypeIndex}).mount(),(0,groupsListLogic.z)({groupTypeIndex}).selectors.groups(state)}),(groups0,groups1,groups2,groups3,groups4)=>[groups0,groups1,groups2,groups3,groups4]],groupsLoading:[s=>[,,,,,].fill(null).map((_,groupTypeIndex)=>state=>{if(s.groupTypes(state)[groupTypeIndex])return(0,groupsListLogic.z)({groupTypeIndex}).mount(),(0,groupsListLogic.z)({groupTypeIndex}).selectors.groupsLoading(state)}),(groupsLoading0,groupsLoading1,groupsLoading2,groupsLoading3,groupsLoading4)=>[groupsLoading0,groupsLoading1,groupsLoading2,groupsLoading3,groupsLoading4]],activeListItemKey:[s=>[s.activeScene,s.sceneParams],(activeScene,sceneParams)=>{if(activeScene===sceneTypes.x.Person){let{_:personDistinctId}=sceneParams.params;return personDistinctId?["persons",personDistinctId]:null}if(activeScene===sceneTypes.x.Group){let{groupKey,groupTypeIndex}=sceneParams.params;return groupKey?[`groups-${groupTypeIndex}`,decodeURIComponent(groupKey)]:null}return null}],debounceSearch:[s=>[s.searchTerm],()=>!0]}}),(0,index_esm.listeners)(_ref3=>{let{cache}=_ref3;return{loadPersons:async _ref4=>{let{url}=_ref4,offset=url?parseInt(new URL(url).searchParams.get("offset")||"0"):0;0===offset&&(cache.requestedPersons=[])}}}),(0,kea_subscriptions_lib.Vt)(_ref5=>{let{actions,values}=_ref5;return{searchTerm:searchTerm=>{for(let{group_type_index:groupTypeIndex}of(actions.setPersonsListFilters({search:searchTerm}),actions.loadPersons(),Object.values(values.groupTypes)))(0,groupsListLogic.z)({groupTypeIndex}).actions.setSearch(searchTerm,!1)}}}),(0,index_esm.afterMount)(_ref6=>{let{actions,cache}=_ref6;cache.requestedPersons=[],actions.loadPersons()})]),ITEM_KEY_PART_SEPARATOR="::",navigation3000Logic=(0,index_esm.kea)([(0,index_esm.path)(["layout","navigation-3000","navigationLogic"]),(0,index_esm.props)({}),(0,index_esm.connect)(()=>({values:[sceneLogic.k,["sceneConfig"],navigationLogic.f,["mobileLayout"],teamLogic.H,["currentTeam","hasOnboardedAnyProduct"]],actions:[navigationLogic.f,["closeAccountPopover"]]})),(0,index_esm.actions)({hideSidebar:!0,showSidebar:newNavbarItemId=>({newNavbarItemId}),toggleNavCollapsed:override=>({override}),showNavOnMobile:!0,hideNavOnMobile:!0,toggleSidebar:!0,setSidebarWidth:width=>({width}),setSidebarOverslide:overslide=>({overslide}),syncSidebarWidthWithMouseMove:delta=>({delta}),syncSidebarWidthWithViewport:!0,beginResize:!0,endResize:!0,acknowledgeSidebarKeyboardShortcut:!0,setIsSearchShown:isSearchShown=>({isSearchShown}),setSearchTerm:searchTerm=>({searchTerm}),initiateNewItemInCategory:category=>({category}),initiateNewItemInlineInCategory:category=>({category}),cancelNewItem:!0,saveNewItem:itemName=>({itemName}),saveNewItemComplete:!0,setLastFocusedItemIndex:index=>({index}),setLastFocusedItemByKey:key=>({key}),focusNextItem:!0,focusPreviousItem:!0,toggleAccordion:key=>({key})}),(0,index_esm.reducers)({isSidebarShown:[!0,{persist:!0},{hideSidebar:()=>!1,showSidebar:()=>!0,toggleSidebar:isSidebarShown=>!isSidebarShown}],sidebarWidth:[288,{persist:!0},{setSidebarWidth:(_,_ref)=>{let{width}=_ref;return width}}],sidebarOverslide:[0,{setSidebarOverslide:(_,_ref2)=>{let{overslide}=_ref2;return overslide}}],isResizeInProgress:[!1,{beginResize:()=>!0,endResize:()=>!1}],isNavCollapsedDesktop:[!1,{persist:!0},{toggleNavCollapsed:(state,_ref3)=>{let{override}=_ref3;return null!=override?override:!state}}],isNavShownMobile:[!1,{persist:!0},{showNavOnMobile:()=>!0,hideNavOnMobile:()=>!1,closeAccountPopover:()=>!1}],isSidebarKeyboardShortcutAcknowledged:[!1,{persist:!0},{acknowledgeSidebarKeyboardShortcut:()=>!0}],activeNavbarItemIdRaw:[sceneTypes.x.Dashboards,{persist:!0},{showSidebar:(state,_ref4)=>{let{newNavbarItemId}=_ref4;return newNavbarItemId||state}}],isSearchShown:[!1,{setIsSearchShown:(_,_ref5)=>{let{isSearchShown}=_ref5;return isSearchShown}}],internalSearchTerm:["",{setSearchTerm:(_,_ref6)=>{let{searchTerm}=_ref6;return searchTerm}}],lastFocusedItemIndex:[-1,{setLastFocusedItemIndex:(_,_ref7)=>{let{index}=_ref7;return index}}],accordionCollapseMapping:[{},{persist:!0},{toggleAccordion:(state,_ref8)=>{let{key}=_ref8;return{...state,[key]:!state[key]}}}],newItemInlineCategory:[null,{initiateNewItemInlineInCategory:(_,_ref9)=>{let{category}=_ref9;return category},saveNewItemComplete:()=>null,cancelNewItem:()=>null,toggleSidebar:()=>null,showSidebar:()=>null,hideSidebar:()=>null}],savingNewItem:[!1,{saveNewItem:()=>!0,saveNewItemComplete:()=>!1}]}),(0,index_esm.listeners)(_ref10=>{let{actions,values}=_ref10;return{initiateNewItemInCategory:_ref11=>{let{category:categoryKey}=_ref11,category=values.activeNavbarItem?.logic.values.contents?.find(item=>item.key===categoryKey);if(category){if(!category.onAdd||"function"!=typeof category.onAdd)throw Error(`Sidebar category '${categoryKey}' doesn't support onAdd`)}else throw Error(`Sidebar category '${categoryKey}' doesn't exist`);0===category.onAdd.length?category.onAdd():actions.initiateNewItemInlineInCategory(categoryKey)},saveNewItem:async _ref12=>{let{itemName}=_ref12;try{let categoryKey=values.newItemInlineCategory;if(!categoryKey)throw Error("Can't save new sidebar item without a category");let category=values.activeNavbarItem?.logic.values.contents?.find(item=>item.key===categoryKey);if(category){if(!category.onAdd||"function"!=typeof category.onAdd)throw Error(`Sidebar category '${categoryKey}' doesn't support onAdd`)}else throw Error(`Sidebar category '${categoryKey}' doesn't exist`);await category.onAdd(itemName)}catch(e){(0,esm_exports.Tb)(e),console.error(e),src.UJ.error("Something went wrong while saving the item. Please try again.")}finally{actions.saveNewItemComplete()}},syncSidebarWidthWithMouseMove:_ref13=>{let{delta}=_ref13,newWidthRaw=values.sidebarWidth+values.sidebarOverslide+delta,newWidth=newWidthRaw;newWidth<192?newWidth=192:newWidth>1024&&(newWidth=1024),newWidth>.5*window.innerWidth&&(newWidth=.5*window.innerWidth),actions.setSidebarWidth(newWidth),actions.setSidebarOverslide(newWidthRaw-newWidth),newWidthRaw<96?values.isSidebarShown&&actions.hideSidebar():values.isSidebarShown||actions.showSidebar()},syncSidebarWidthWithViewport:()=>{values.sidebarWidth>.5*window.innerWidth&&actions.setSidebarWidth(.5*window.innerWidth)},endResize:()=>{actions.setSidebarOverslide(values.isSidebarShown?0:-192)},toggleSidebar:()=>{actions.endResize()},focusNextItem:()=>{let nextIndex=values.lastFocusedItemIndex+1;nextIndex{let nextIndex=values.lastFocusedItemIndex-1;nextIndex>=-1&&actions.setLastFocusedItemIndex(nextIndex)},setLastFocusedItemByKey:_ref14=>{let{key}=_ref14,index=values.sidebarContentsFlattened.findIndex(item=>Array.isArray(item.key)?item.key.includes(key):item.key===key);-1!==index&&actions.setLastFocusedItemIndex(index)}}}),(0,index_esm.selectors)({mode:[s=>[s.sceneConfig],sceneConfig=>sceneConfig?.layout!=="plain"||sceneConfig.allowUnauthenticated?sceneConfig?.layout!=="plain"?"full":"none":"minimal"],isNavShown:[s=>[s.isNavShownMobile,s.mobileLayout],(isNavShownMobile,mobileLayout)=>!mobileLayout||isNavShownMobile],isNavCollapsed:[s=>[s.isNavCollapsedDesktop,s.mobileLayout],(isNavCollapsedDesktop,mobileLayout)=>!mobileLayout&&isNavCollapsedDesktop],navbarItems:[s=>[featureFlagLogic.h.selectors.featureFlags,dashboardsModel.h.selectors.dashboardsLoading,dashboardsModel.h.selectors.pinnedDashboards,s.currentTeam,s.hasOnboardedAnyProduct],(featureFlags,dashboardsLoading,pinnedDashboards,currentTeam,hasOnboardedAnyProduct)=>{let isUsingSidebar=featureFlags[constants.y8.POSTHOG_3000_NAV],hasOnboardedFeatureFlags=currentTeam?.has_completed_onboarding_for?.[types.Md.FEATURE_FLAGS],sectionOne=hasOnboardedAnyProduct?[{identifier:sceneTypes.x.ProjectHomepage,label:"Home",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconHome,{}),to:urls.j.projectHomepage()},{identifier:sceneTypes.x.Dashboards,label:"Dashboards",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconDashboard,{}),logic:isUsingSidebar?dashboardsSidebarLogic:void 0,to:isUsingSidebar?void 0:urls.j.dashboards(),sideAction:{identifier:"pinned-dashboards-dropdown",dropdown:{overlay:(0,jsx_runtime.jsx)(LemonMenu.iy,{items:[{title:"Pinned dashboards",items:pinnedDashboards.map(dashboard=>({label:dashboard.name,to:urls.j.dashboard(dashboard.id)})),footer:dashboardsLoading&&(0,jsx_runtime.jsxs)("div",{className:"px-2 py-1 text-text-secondary-3000",children:[(0,jsx_runtime.jsx)(src.$j,{})," Loading…"]})}]}),placement:"bottom-end"}}},{identifier:sceneTypes.x.Notebooks,label:"Notebooks",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconNotebook,{}),to:urls.j.notebooks()},{identifier:sceneTypes.x.DataManagement,label:"Data management",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconDatabase,{}),logic:isUsingSidebar?dataManagementSidebarLogic:void 0,to:isUsingSidebar?void 0:urls.j.eventDefinitions()},{identifier:sceneTypes.x.PersonsManagement,label:"People and groups",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconPeople,{}),logic:isUsingSidebar?personsAndGroupsSidebarLogic:void 0,to:isUsingSidebar?void 0:urls.j.persons()},{identifier:sceneTypes.x.Activity,label:"Activity",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconLive,{}),to:urls.j.activity()}]:[{identifier:sceneTypes.x.Products,label:"Welcome to PostHog",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconLogomark,{}),to:urls.j.products()}];return featureFlags[constants.y8.ARTIFICIAL_HOG]&§ionOne.splice(1,0,{identifier:sceneTypes.x.Max,label:"Max AI",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconSparkles,{}),to:urls.j.max()}),[sectionOne,[{identifier:sceneTypes.x.SavedInsights,label:"Product analytics",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconGraph,{}),logic:isUsingSidebar?insightsSidebarLogic:void 0,to:isUsingSidebar?void 0:urls.j.savedInsights(),sideAction:{icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconPlusSmall,{}),to:urls.j.insightNew(),tooltip:"New insight",identifier:sceneTypes.x.Insight}},{identifier:sceneTypes.x.WebAnalytics,label:"Web analytics",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconPieChart,{}),to:isUsingSidebar?void 0:urls.j.webAnalytics()},{identifier:sceneTypes.x.Replay,label:"Session replay",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconRewindPlay,{}),to:urls.j.replay()},featureFlags[constants.y8.ERROR_TRACKING]?{identifier:sceneTypes.x.ErrorTracking,label:"Error tracking",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconWarning,{}),to:urls.j.errorTracking(),tag:"alpha"}:null,featureFlags[constants.y8.HEATMAPS_UI]?{identifier:sceneTypes.x.Heatmaps,label:"Heatmaps",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconCursorClick,{}),to:isUsingSidebar?void 0:urls.j.heatmaps(),tag:"alpha"}:null,{identifier:sceneTypes.x.FeatureFlags,label:"Feature flags",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconToggle,{}),logic:isUsingSidebar?featureFlagsSidebarLogic:void 0,to:isUsingSidebar?void 0:urls.j.featureFlags()},{identifier:sceneTypes.x.Experiments,label:"Experiments",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconTestTube,{}),logic:isUsingSidebar?experimentsSidebarLogic:void 0,to:isUsingSidebar?void 0:urls.j.experiments()},{identifier:sceneTypes.x.Surveys,label:"Surveys",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconChat,{}),to:urls.j.surveys()},"test"!==featureFlags[constants.y8.PRODUCT_INTRO_PAGES]||hasOnboardedFeatureFlags?{identifier:sceneTypes.x.EarlyAccessFeatures,label:"Early access features",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconRocket,{}),to:urls.j.earlyAccessFeatures()}:null,{identifier:sceneTypes.x.DataWarehouse,label:"Data warehouse",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconServer,{}),to:isUsingSidebar?void 0:urls.j.dataWarehouse()},featureFlags[constants.y8.DATA_MODELING]&&hasOnboardedAnyProduct?{identifier:sceneTypes.x.DataModel,label:"Data model",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconServer,{}),to:isUsingSidebar?void 0:urls.j.dataModel()}:null,hasOnboardedAnyProduct?{identifier:sceneTypes.x.Pipeline,label:"Data pipeline",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconDecisionTree,{}),to:urls.j.pipeline()}:null,featureFlags[constants.y8.MESSAGING]&&hasOnboardedAnyProduct?{identifier:sceneTypes.x.MessagingBroadcasts,label:"Messaging",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconMegaphone,{}),to:urls.j.messagingBroadcasts(),tag:"alpha"}:null].filter(utils.DX)]}],navbarItemIdMapping:[s=>[s.navbarItems],navbarItems=>Object.fromEntries(navbarItems.flat().map(item=>[item.identifier,item]))],sidebarOverslideDirection:[s=>[s.sidebarOverslide],sidebarOverslide=>sidebarOverslide<0?"min":sidebarOverslide>0?"max":null],activeNavbarItem:[s=>[s.activeNavbarItemId,s.navbarItemIdMapping],(activeNavbarItemId,navbarItemIdMapping)=>{let item=activeNavbarItemId?navbarItemIdMapping[activeNavbarItemId]:null;return item&&"logic"in item?item:null}],searchTerm:[s=>[s.internalSearchTerm,s.isSearchShown],(internalSearchTerm,isSearchShown)=>isSearchShown?internalSearchTerm:""],sidebarContentsFlattened:[s=>[state=>s.activeNavbarItem(state)?.logic?.findMounted()?.selectors.contents(state)||null],sidebarContents=>sidebarContents?sidebarContents.flatMap(item=>"items"in item?item.items:item):[]],normalizedActiveListItemKey:[s=>[state=>s.activeNavbarItem(state)?.logic?.findMounted()?.selectors.activeListItemKey?.(state)||null],activeListItemKey=>activeListItemKey?Array.isArray(activeListItemKey)?activeListItemKey.join(ITEM_KEY_PART_SEPARATOR):activeListItemKey:null],activeNavbarItemId:[s=>[s.activeNavbarItemIdRaw,featureFlagLogic.h.selectors.featureFlags],(activeNavbarItemIdRaw,featureFlags)=>featureFlags[constants.y8.POSTHOG_3000_NAV]?activeNavbarItemIdRaw:null],newItemCategory:[s=>[state=>s.activeNavbarItem(state)?.logic?.findMounted()?.selectors.contents(state)||null,s.newItemInlineCategory,lib.router.selectors.location],(sidebarContents,newItemInlineCategory,location1)=>sidebarContents&&(newItemInlineCategory||sidebarContents.find(category=>"string"==typeof category.onAdd&&category.onAdd===location1.pathname)?.key)||null]}),(0,kea_subscriptions_lib.Vt)(_ref15=>{let{props,cache,actions,values}=_ref15;return{isResizeInProgress:isResizeInProgress=>{if(isResizeInProgress)return cache.onMouseMove=e=>actions.syncSidebarWidthWithMouseMove(e.movementX),cache.onMouseUp=e=>{0===e.button&&actions.endResize()},document.addEventListener("mousemove",cache.onMouseMove),document.addEventListener("mouseup",cache.onMouseUp),()=>{};document.removeEventListener("mousemove",cache.onMouseMove),document.removeEventListener("mouseup",cache.onMouseUp)},sidebarContentsFlattened:sidebarContentsFlattened=>{for(let item of sidebarContentsFlattened)item.ref||(item.ref=react.createRef());actions.setLastFocusedItemIndex(-1)},lastFocusedItemIndex:lastFocusedItemIndex=>{if(lastFocusedItemIndex>=0){let item=values.sidebarContentsFlattened[lastFocusedItemIndex];item.ref?.current?.focus()}else props.inputElement?.focus()}}}),(0,index_esm.events)(_ref16=>{let{props,actions,cache}=_ref16;return{afterMount:()=>{cache.onResize=()=>actions.syncSidebarWidthWithViewport(),cache.onKeyDown=e=>{"b"===e.key&&(e.metaKey||e.ctrlKey)&&(actions.toggleSidebar(),e.preventDefault()),"f"===e.key&&e.shiftKey&&(e.metaKey||e.ctrlKey)&&(actions.setIsSearchShown(!0),props.inputElement?.focus(),e.preventDefault())},window.addEventListener("resize",cache.onResize),window.addEventListener("keydown",cache.onKeyDown)},beforeUnmount:()=>{window.removeEventListener("resize",cache.onResize),window.removeEventListener("resize",cache.onKeyDown)}}})])},"./frontend/src/layout/navigation-3000/sidepanel/SidePanel.tsx":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{h:()=>SIDE_PANEL_TABS,W:()=>SidePanel_SidePanel});var injectStylesIntoStyleTag=__webpack_require__("./node_modules/.pnpm/style-loader@2.0.0_webpack@5.88.2/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),injectStylesIntoStyleTag_default=__webpack_require__.n(injectStylesIntoStyleTag),SidePanel=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/layout/navigation-3000/sidepanel/SidePanel.scss"),SidePanel_default=__webpack_require__.n(SidePanel),options={};options.insert="head",options.singleton=!1,injectStylesIntoStyleTag_default()(SidePanel_default(),options),SidePanel_default().locals;var posthog_icons_es=__webpack_require__("./node_modules/.pnpm/@posthog+icons@0.8.5_react-dom@18.2.0_react@18.2.0/node_modules/@posthog/icons/dist/posthog-icons.es.js"),src=__webpack_require__("./frontend/@posthog/lemon-ui/src/index.ts"),clsx_m=__webpack_require__("./node_modules/.pnpm/clsx@1.2.1/node_modules/clsx/dist/clsx.m.js"),index_esm=__webpack_require__("./node_modules/.pnpm/kea@3.1.5_react@18.2.0/node_modules/kea/lib/index.esm.js"),Resizer=__webpack_require__("./frontend/src/lib/components/Resizer/Resizer.tsx"),resizerLogic=__webpack_require__("./frontend/src/lib/components/Resizer/resizerLogic.ts"),react=__webpack_require__("./node_modules/.pnpm/react@18.2.0/node_modules/react/index.js"),NotebookPanel=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/notebooks/NotebookPanel/NotebookPanel.scss"),NotebookPanel_default=__webpack_require__.n(NotebookPanel),NotebookPanel_options={};NotebookPanel_options.insert="head",NotebookPanel_options.singleton=!1,injectStylesIntoStyleTag_default()(NotebookPanel_default(),NotebookPanel_options),NotebookPanel_default().locals;var useResizeObserver=__webpack_require__("./frontend/src/lib/hooks/useResizeObserver.ts"),icons=__webpack_require__("./frontend/src/lib/lemon-ui/icons/index.ts"),urls=__webpack_require__("./frontend/src/scenes/urls.ts"),sidePanelStateLogic=__webpack_require__("./frontend/src/layout/navigation-3000/sidepanel/sidePanelStateLogic.tsx"),jsx_runtime=__webpack_require__("./node_modules/.pnpm/react@18.2.0/node_modules/react/jsx-runtime.js");function SidePanelPaneHeader(_ref){let{children,title}=_ref,{modalMode}=(0,index_esm.useValues)(sidePanelStateLogic.f),{closeSidePanel}=(0,index_esm.useActions)(sidePanelStateLogic.f);return(0,jsx_runtime.jsxs)("header",{className:(0,clsx_m.default)("border-b shrink-0 flex items-center justify-end gap-1",{"p-1 h-10":!modalMode,"pb-2 mt-2 mx-3":modalMode}),children:[title?(0,jsx_runtime.jsx)("h3",{className:(0,clsx_m.default)("flex-1 flex items-center gap-1 font-semibold mb-0 truncate",{"text-base px-2":!modalMode}),children:title}):null,children,(0,jsx_runtime.jsx)(src.u,{placement:modalMode?"top":"bottom-end",title:modalMode?"Close":"Close this side panel",children:(0,jsx_runtime.jsx)(src.Jp,{size:"small",sideIcon:(0,jsx_runtime.jsx)(posthog_icons_es.IconX,{}),onClick:()=>closeSidePanel()})})]})}var types=__webpack_require__("./frontend/src/types.ts"),Notebook=__webpack_require__("./frontend/src/scenes/notebooks/Notebook/Notebook.tsx"),notebooksModel=__webpack_require__("./frontend/src/models/notebooksModel.ts"),NotebookSelectButton=__webpack_require__("./frontend/src/scenes/notebooks/NotebookSelectButton/NotebookSelectButton.tsx");function NotebookListMini(_ref){let{selectedNotebookId}=_ref,{notebooks,notebookTemplates}=(0,index_esm.useValues)(notebooksModel.L),selectedTitle="scratchpad"===selectedNotebookId?"My scratchpad":notebookTemplates.find(notebook=>notebook.short_id===selectedNotebookId)?.title||notebooks.find(notebook=>notebook.short_id===selectedNotebookId)?.title||"Untitled";return(0,jsx_runtime.jsx)(NotebookSelectButton.tI,{placement:"bottom-start",children:(0,jsx_runtime.jsx)(src.Jp,{size:"small",truncate:!0,children:selectedTitle||"Notebooks"})})}var notebookLogic=__webpack_require__("./frontend/src/scenes/notebooks/Notebook/notebookLogic.ts"),NotebookMeta=__webpack_require__("./frontend/src/scenes/notebooks/Notebook/NotebookMeta.tsx"),NotebookMenu=__webpack_require__("./frontend/src/scenes/notebooks/NotebookMenu.tsx"),notebookPanelLogic=__webpack_require__("./frontend/src/scenes/notebooks/NotebookPanel/notebookPanelLogic.ts");function NotebookPanelDropzone(){let[isDragActive,setIsDragActive]=(0,react.useState)(!1),{dropMode,droppedResource}=(0,index_esm.useValues)(notebookPanelLogic.F),{setDroppedResource}=(0,index_esm.useActions)(notebookPanelLogic.F);return dropMode||droppedResource?(0,jsx_runtime.jsx)("div",{className:(0,clsx_m.default)("NotebookPanelDropzone",{"NotebookPanelDropzone--active":isDragActive,"NotebookPanelDropzone--dropped":!!droppedResource}),onDragEnter:()=>setIsDragActive(!0),onDragLeave:()=>setIsDragActive(!1),onDragOver:e=>e.preventDefault(),onDrop:event=>{if(event.preventDefault(),setIsDragActive(!1),!event.dataTransfer)return null;let text=event.dataTransfer.getData("text/plain"),node=event.dataTransfer.getData("node"),properties=event.dataTransfer.getData("properties");setDroppedResource(node?{type:node,attrs:properties?JSON.parse(properties):{}}:text)},children:droppedResource?(0,jsx_runtime.jsxs)("div",{className:"NotebookPanelDropzone__dropped",children:[(0,jsx_runtime.jsxs)("div",{className:"flex items-start justify-between",children:[(0,jsx_runtime.jsx)("h2",{children:"Add dropped resource to..."}),(0,jsx_runtime.jsx)(src.Jp,{size:"small",onClick:()=>setDroppedResource(null),children:"Cancel"})]}),(0,jsx_runtime.jsx)(NotebookSelectButton.Ld,{onNotebookOpened:notebookLogic=>{setDroppedResource(null),droppedResource&&("string"!=typeof droppedResource?notebookLogic.actions.insertAfterLastNode(droppedResource):notebookLogic.actions.pasteAfterLastNode(droppedResource))},resource:!0})]}):(0,jsx_runtime.jsx)("div",{className:"NotebookPanelDropzone__message",children:"Drop here for a different Notebook"})}):null}var exporter=__webpack_require__("./frontend/src/lib/components/ExportButton/exporter.tsx"),dayjs=__webpack_require__("./frontend/src/lib/dayjs.ts"),exportsLogic=__webpack_require__("./frontend/src/lib/components/ExportButton/exportsLogic.ts"),featureFlagLogic=__webpack_require__("./frontend/src/lib/logic/featureFlagLogic.ts"),activityForSceneLogic=__webpack_require__("./frontend/src/layout/navigation-3000/sidepanel/panels/activity/activityForSceneLogic.ts");let sidePanelExportsLogic=(0,index_esm.kea)([(0,index_esm.path)(["scenes","navigation","sidepanel","sidePanelExportsLogic"]),(0,index_esm.connect)({values:[featureFlagLogic.h,["featureFlags"],activityForSceneLogic.C,["sceneActivityFilters"],exportsLogic.exportsLogic,["exports","freshUndownloadedExports"]],actions:[sidePanelStateLogic.f,["openSidePanel"],exportsLogic.exportsLogic,["loadExports","removeFresh"]]}),(0,index_esm.afterMount)(_ref=>{let{actions}=_ref;actions.loadExports()})]),ExportsContent=()=>{let{exports,freshUndownloadedExports}=(0,index_esm.useValues)(sidePanelExportsLogic),{loadExports,removeFresh}=(0,index_esm.useActions)(sidePanelExportsLogic);return(0,jsx_runtime.jsx)("div",{className:"flex flex-col flex-1 overflow-hidden",children:(0,jsx_runtime.jsxs)("div",{className:"flex-1 overflow-y-auto p-2",children:[(0,jsx_runtime.jsx)("div",{className:"flex justify-end",children:(0,jsx_runtime.jsx)(src.Jp,{onClick:loadExports,type:"tertiary",size:"small",icon:(0,jsx_runtime.jsx)(icons.tr,{}),children:"Refresh"})}),exports.map(asset=>{let isNotDownloaded=freshUndownloadedExports.some(fresh=>fresh.id===asset.id);return(0,jsx_runtime.jsx)(src.Jp,{type:isNotDownloaded?"primary":"secondary",fullWidth:!0,className:"mt-2",disabledReason:asset.has_content?void 0:"Export not ready yet",onClick:()=>{removeFresh(asset),(0,exporter._)(asset)},sideIcon:asset.has_content?(0,jsx_runtime.jsx)(posthog_icons_es.IconDownload,{className:"text-link"}):void 0,children:(0,jsx_runtime.jsxs)("div",{className:"flex items-center justify-between flex-auto p-2",children:[(0,jsx_runtime.jsxs)("div",{children:[(0,jsx_runtime.jsx)("span",{className:"text-link font-medium block",children:asset.filename}),asset.created_at&&(0,jsx_runtime.jsx)("span",{className:"text-xs mt-1",children:(0,dayjs.Bv)(asset.created_at).fromNow()}),asset.expires_after&&(0,jsx_runtime.jsxs)("span",{className:"text-xs text-muted mt-1",children:[" ","\xb7 expires ",(0,dayjs.Bv)(asset.expires_after).fromNow()]}),isNotDownloaded&&(0,jsx_runtime.jsx)("span",{className:"text-xs text-muted mt-1",children:" \xb7 not downloaded yet"})]}),(0,jsx_runtime.jsx)("div",{children:!asset.has_content&&(0,jsx_runtime.jsx)(src.$j,{})})]})},asset.id)})]})})};var themeLogic=__webpack_require__("./frontend/src/layout/navigation-3000/themeLogic.ts"),hedgehogs=__webpack_require__("./frontend/src/lib/components/hedgehogs.tsx"),LemonProgressCircle=__webpack_require__("./frontend/src/lib/lemon-ui/LemonProgressCircle/LemonProgressCircle.tsx"),eventUsageLogic=__webpack_require__("./frontend/src/lib/utils/eventUsageLogic.ts"),activationLogic=__webpack_require__("./frontend/src/layout/navigation-3000/sidepanel/panels/activation/activationLogic.ts");let ActivationTask=_ref2=>{let{id,name,description,completed,canSkip,skipped,url}=_ref2,{runTask,skipTask}=(0,index_esm.useActions)(activationLogic.z),{reportActivationSideBarTaskClicked}=(0,index_esm.useActions)(eventUsageLogic.vx),content=(0,jsx_runtime.jsxs)("div",{className:"my-4 mx-2",children:[(0,jsx_runtime.jsx)("p",{className:"m-0",children:name}),!completed&&!skipped&&(0,jsx_runtime.jsx)("p",{className:"font-normal text-xs mt-2 mb-0 mx-0",children:description})]}),params={id,fullWidth:!0,type:"secondary",icon:completed?(0,jsx_runtime.jsx)(posthog_icons_es.IconCheckCircle,{}):skipped?(0,jsx_runtime.jsx)(posthog_icons_es.IconX,{}):null,tooltip:name};return url?(params.to=url,params.targetBlank=!0,params.onClick=()=>{reportActivationSideBarTaskClicked(id)}):params.onClick=()=>{runTask(id),reportActivationSideBarTaskClicked(id)},(0,jsx_runtime.jsx)("li",{children:completed||skipped||!canSkip?(0,jsx_runtime.jsx)(src.Jp,{...params,children:content}):(0,jsx_runtime.jsx)(src.Jp,{...params,sideAction:{icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconX,{}),tooltip:"Skip task",onClick:()=>skipTask(id)},children:content})})};var ActivityLog=__webpack_require__("./frontend/src/lib/components/ActivityLog/ActivityLog.tsx"),humanizeActivity=__webpack_require__("./frontend/src/lib/components/ActivityLog/humanizeActivity.tsx"),MemberSelect=__webpack_require__("./frontend/src/lib/components/MemberSelect.tsx"),PayGateMini=__webpack_require__("./frontend/src/lib/components/PayGateMini/PayGateMini.tsx"),ScrollableShadows=__webpack_require__("./frontend/src/lib/components/ScrollableShadows/ScrollableShadows.tsx"),constants=__webpack_require__("./frontend/src/lib/constants.tsx"),usePageVisibility=__webpack_require__("./frontend/src/lib/hooks/usePageVisibility.ts"),userLogic=__webpack_require__("./frontend/src/scenes/userLogic.ts"),sidePanelActivityLogic=__webpack_require__("./frontend/src/layout/navigation-3000/sidepanel/panels/activity/sidePanelActivityLogic.tsx"),KeyboardShortcut=__webpack_require__("./frontend/src/layout/navigation-3000/components/KeyboardShortcut.tsx"),commentsLogic=__webpack_require__("./frontend/src/scenes/comments/commentsLogic.ts");let CommentComposer=props=>{let{key,composedComment,commentsLoading,replyingCommentId,itemContext}=(0,index_esm.useValues)((0,commentsLogic.x)(props)),{setComposedComment,sendComposedContent,setReplyingComment,setComposerRef,clearItemContext}=(0,index_esm.useActions)((0,commentsLogic.x)(props)),placeholder=replyingCommentId?"Reply...":`Comment on ${props.item_id?"this ":""}${(0,humanizeActivity.VI)(props.scope,!!props.item_id)}`;return(0,react.useEffect)(()=>()=>clearItemContext(),[key]),(0,jsx_runtime.jsxs)("div",{className:"space-y-2",children:[(0,jsx_runtime.jsx)(src.X7,{"data-attr":"comment-composer",placeholder:placeholder,value:composedComment,onChange:setComposedComment,disabled:commentsLoading,onPressCmdEnter:sendComposedContent,ref:setComposerRef}),(0,jsx_runtime.jsxs)("div",{className:"flex justify-between items-center gap-2",children:[(0,jsx_runtime.jsx)("div",{className:"flex-1"}),replyingCommentId?(0,jsx_runtime.jsx)(src.Jp,{type:"secondary",onClick:()=>setReplyingComment(null),children:"Cancel reply"}):null,itemContext?(0,jsx_runtime.jsx)(src.Jp,{type:"secondary",onClick:()=>clearItemContext(),children:"Cancel"}):null,(0,jsx_runtime.jsxs)(src.Jp,{type:"primary",onClick:sendComposedContent,disabledReason:composedComment?null:"No message",sideIcon:(0,jsx_runtime.jsx)(KeyboardShortcut.e,{command:!0,enter:!0}),"data-attr":"discussions-comment",children:["Add ",replyingCommentId?"reply":"comment"]})]})]})};var apps_common_src=__webpack_require__("./frontend/@posthog/apps-common/src/index.ts"),LemonMarkdown=__webpack_require__("./frontend/src/lib/lemon-ui/LemonMarkdown/index.ts");let Comment=_ref=>{var _comment$created_by$f;let{comment}=_ref,{editingComment,commentsLoading,replyingCommentId}=(0,index_esm.useValues)(commentsLogic.x),{deleteComment,setEditingComment,persistEditedComment,setReplyingComment}=(0,index_esm.useActions)(commentsLogic.x),ref=(0,react.useRef)(null),isHighlighted=replyingCommentId===comment.id||editingComment?.id===comment.id;return(0,react.useEffect)(()=>{isHighlighted&&ref.current?.scrollIntoView()},[isHighlighted]),(0,jsx_runtime.jsxs)("div",{ref:ref,className:(0,clsx_m.default)("Comment border rounded-lg bg-bg-light",isHighlighted&&"border-primary-3000"),"data-comment-id":comment.id,children:[(0,jsx_runtime.jsxs)("div",{className:"flex-1 flex justify-start p-2 gap-2",children:[(0,jsx_runtime.jsx)(src.YY,{className:"mt-1",size:"xl",user:comment.created_by}),(0,jsx_runtime.jsxs)("div",{className:"flex flex-col flex-1",children:[(0,jsx_runtime.jsxs)("div",{className:"flex items-center gap-2",children:[(0,jsx_runtime.jsx)("span",{className:"flex-1 font-semibold ",children:null!==(_comment$created_by$f=comment.created_by?.first_name)&&void 0!==_comment$created_by$f?_comment$created_by$f:"Unknown user"}),comment.created_at?(0,jsx_runtime.jsx)("span",{className:"text-xs",children:(0,jsx_runtime.jsx)(apps_common_src.w4,{time:comment.created_at})}):null,(0,jsx_runtime.jsx)(src.d6,{items:[{icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconShare,{}),label:"Reply",onClick:()=>{var _comment$source_comme;return setReplyingComment(null!==(_comment$source_comme=comment.source_comment)&&void 0!==_comment$source_comme?_comment$source_comme:comment.id)}},{icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconPencil,{}),label:"Edit",onClick:()=>setEditingComment(comment)},{icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconCheck,{}),label:"Delete",onClick:()=>deleteComment(comment)}],children:(0,jsx_runtime.jsx)(src.Jp,{icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconEllipsis,{}),size:"xsmall"})})]}),(0,jsx_runtime.jsx)(LemonMarkdown.j,{lowKeyHeadings:!0,children:comment.content}),comment.version?(0,jsx_runtime.jsx)("span",{className:"text-xs text-muted italic",children:"(edited)"}):null]})]}),editingComment?.id===comment.id?(0,jsx_runtime.jsxs)("div",{className:"space-y-2 border-t p-2",children:[(0,jsx_runtime.jsx)(src.X7,{"data-attr":"comment-composer",placeholder:"Edit comment",value:editingComment.content,onChange:value=>setEditingComment({...editingComment,content:value}),disabled:commentsLoading,onPressCmdEnter:persistEditedComment}),(0,jsx_runtime.jsxs)("div",{className:"flex justify-between items-center gap-2",children:[(0,jsx_runtime.jsx)("div",{className:"flex-1"}),(0,jsx_runtime.jsx)(src.Jp,{type:"secondary",onClick:()=>setEditingComment(null),disabled:commentsLoading,children:"Cancel"}),(0,jsx_runtime.jsx)(src.Jp,{type:"primary",onClick:persistEditedComment,disabledReason:editingComment.content?commentsLoading?"Saving...":null:"No message",sideIcon:(0,jsx_runtime.jsx)(KeyboardShortcut.e,{command:!0,enter:!0}),children:"Save changes"})]})]}):null]})},CommentWithReplies=_ref2=>{let{commentWithReplies}=_ref2,{comment,replies}=commentWithReplies;return(0,jsx_runtime.jsxs)("div",{className:"relative space-y-2",children:[comment?(0,jsx_runtime.jsx)(Comment,{comment:comment}):(0,jsx_runtime.jsx)("div",{className:"border rounded border-dashed p-2 font-semibold italic bg-bg-accent-3000 text-muted-alt",children:"Deleted comment"}),(0,jsx_runtime.jsx)("div",{className:"pl-8 space-y-2",children:replies?.map(x=>jsx_runtime.jsx(CommentWithReplies,{commentWithReplies:{id:x.id,comment:x,replies:[]}},x.id))})]})},CommentsList=props=>{let{key,commentsWithReplies,commentsLoading}=(0,index_esm.useValues)((0,commentsLogic.x)(props)),{loadComments}=(0,index_esm.useActions)((0,commentsLogic.x)(props));return(0,react.useEffect)(()=>{loadComments()},[key]),(0,jsx_runtime.jsx)(index_esm.BindLogic,{logic:commentsLogic.x,props:props,children:(0,jsx_runtime.jsxs)("div",{className:"flex flex-col",children:[!commentsWithReplies?.length&&commentsLoading?(0,jsx_runtime.jsx)("div",{className:"space-y-2",children:(0,jsx_runtime.jsx)(src.yW,{className:"h-10 w-full"})}):commentsWithReplies?.length?null:(0,jsx_runtime.jsxs)("div",{className:"mx-auto p-8 max-w-160 mt-8 space-y-4",children:[(0,jsx_runtime.jsx)("div",{className:"max-w-120 mx-auto",children:(0,jsx_runtime.jsx)(hedgehogs.PhonePairHogs,{className:"w-full h-full"})}),(0,jsx_runtime.jsx)("h2",{children:"Start the discussion!"}),(0,jsx_runtime.jsx)("p",{children:"You can add comments about this page for your team members to see. Great for sharing context or ideas without getting in the way of the thing you are commenting on"})]}),(0,jsx_runtime.jsx)("div",{className:"space-y-2",children:commentsWithReplies?.map(x=>jsx_runtime.jsx(CommentWithReplies,{commentWithReplies:x},x.id))})]})})};var lib=__webpack_require__("./node_modules/.pnpm/kea-loaders@3.0.0_kea@3.1.5/node_modules/kea-loaders/lib/index.js"),kea_subscriptions_lib=__webpack_require__("./node_modules/.pnpm/kea-subscriptions@3.0.1_kea@3.1.5/node_modules/kea-subscriptions/lib/index.js"),api=__webpack_require__("./frontend/src/lib/api.ts");let sidePanelDiscussionLogic=(0,index_esm.kea)([(0,index_esm.path)(["scenes","navigation","sidepanel","sidePanelDiscussionLogic"]),(0,index_esm.actions)({loadCommentCount:!0,resetCommentCount:!0}),(0,index_esm.connect)({values:[featureFlagLogic.h,["featureFlags"],activityForSceneLogic.C,["sceneActivityFilters"]]}),(0,lib.loaders)(_ref=>{let{values}=_ref;return{commentCount:[0,{loadCommentCount:async(_,breakpoint)=>{if(!values.featureFlags[constants.y8.DISCUSSIONS]||!values.commentsLogicProps)return 0;await breakpoint(100);let response=await api.ZP.comments.getCount({...values.commentsLogicProps});return breakpoint(),response},resetCommentCount:()=>0}]}}),(0,index_esm.selectors)({commentsLogicProps:[s=>[s.sceneActivityFilters],activityFilters=>activityFilters?.scope?{scope:activityFilters.scope,item_id:activityFilters.item_id}:null]}),(0,kea_subscriptions_lib.Vt)(_ref2=>{let{actions}=_ref2;return{commentsLogicProps:props=>{props?actions.loadCommentCount():actions.resetCommentCount()}}})]),DiscussionContent=_ref=>{let{logicProps}=_ref,{selectedTabOptions}=(0,index_esm.useValues)(sidePanelStateLogic.f),{setReplyingComment}=(0,index_esm.useActions)((0,commentsLogic.x)(logicProps));return(0,react.useEffect)(()=>{selectedTabOptions&&setReplyingComment(selectedTabOptions)},[selectedTabOptions]),(0,jsx_runtime.jsxs)("div",{className:"flex flex-col flex-1 overflow-hidden",children:[(0,jsx_runtime.jsx)("div",{className:"flex-1 overflow-y-auto p-2",children:(0,jsx_runtime.jsx)(CommentsList,{...logicProps})}),(0,jsx_runtime.jsx)("div",{className:"border-t px-3 pb-3",children:(0,jsx_runtime.jsx)(CommentComposer,{...logicProps})})]})};var kea_router_lib=__webpack_require__("./node_modules/.pnpm/kea-router@3.2.0_kea@3.1.5/node_modules/kea-router/lib/index.js"),sceneLogic=__webpack_require__("./frontend/src/scenes/sceneLogic.ts");let POSTHOG_WEBSITE_ORIGIN="https://posthog.com",sanitizePath=path=>"/"===path[0]?path:`/${path}`,getPathFromUrl=urlOrPath=>{try{let url=new URL(urlOrPath);return url.pathname+url.search+url.hash}catch(e){return urlOrPath}},sidePanelDocsLogic=(0,index_esm.kea)([(0,index_esm.path)(["scenes","navigation","sidepanel","sidePanelDocsLogic"]),(0,index_esm.props)({}),(0,index_esm.connect)({actions:[sidePanelStateLogic.f,["openSidePanel","closeSidePanel","setSidePanelOptions"]],values:[sceneLogic.k,["sceneConfig"],sidePanelStateLogic.f,["selectedTabOptions"]]}),(0,index_esm.actions)({updatePath:path=>({path}),setInitialPath:path=>({path}),unmountIframe:!0,handleExternalUrl:urlOrPath=>({urlOrPath}),setMenuOptions:menuOptions=>({menuOptions}),setIframeReady:ready=>({ready}),setActiveMenuName:activeMenuName=>({activeMenuName}),navigateToPage:path=>({path})}),(0,index_esm.reducers)(()=>({iframeReady:[!1,{setIframeReady:(_,_ref)=>{let{ready}=_ref;return ready}}],menuOptions:[null,{setMenuOptions:(_,_ref2)=>{let{menuOptions}=_ref2;return menuOptions}}],activeMenuName:[null,{setActiveMenuName:(_,_ref3)=>{let{activeMenuName}=_ref3;return activeMenuName}}],currentPath:[null,{updatePath:(_,_ref4)=>{let{path}=_ref4;return sanitizePath(path)}}],initialPath:["/docs",{persist:!0},{setInitialPath:(_,_ref5)=>{let{path}=_ref5;return sanitizePath(path)}}]})),(0,index_esm.selectors)({iframeSrc:[s=>[s.initialPath],initialPath=>`${POSTHOG_WEBSITE_ORIGIN}${null!=initialPath?initialPath:""}`],currentUrl:[s=>[s.currentPath],currentPath=>`${POSTHOG_WEBSITE_ORIGIN}${null!=currentPath?currentPath:""}`]}),(0,index_esm.listeners)(_ref6=>{let{actions,values,props}=_ref6;return{openSidePanel:_ref7=>{let{options}=_ref7;if(options){let initialPath=getPathFromUrl(options);actions.setInitialPath(initialPath),actions.navigateToPage(initialPath)}},unmountIframe:()=>{var _values$currentPath;actions.setInitialPath(null!==(_values$currentPath=values.currentPath)&&void 0!==_values$currentPath?_values$currentPath:"/docs")},handleExternalUrl:_ref8=>{let{urlOrPath}=_ref8;kea_router_lib.router.actions.push(getPathFromUrl(urlOrPath))},navigateToPage:_ref9=>{let{path}=_ref9;path&&props.iframeRef.current?.contentWindow?.postMessage({type:"navigate",url:path},"*")},updatePath:_ref10=>{let{path}=_ref10;actions.setSidePanelOptions(path)}}}),(0,index_esm.afterMount)(_ref11=>{let{actions,values,cache}=_ref11;if(values.selectedTabOptions){let initialPath=getPathFromUrl(values.selectedTabOptions);actions.setInitialPath(initialPath)}else values.sceneConfig?.defaultDocsPath&&actions.setInitialPath(values.sceneConfig?.defaultDocsPath);cache.onWindowMessage=event=>{if(event.origin===POSTHOG_WEBSITE_ORIGIN){if("internal-navigation"===event.data.type){actions.updatePath(event.data.url);return}if("docs-ready"===event.data.type){actions.setIframeReady(!0);return}if("external-navigation"===event.data.type){actions.handleExternalUrl(event.data.url);return}if("docs-menu"===event.data.type){actions.setMenuOptions(event.data.menu);return}if("docs-active-menu"===event.data.type){actions.setActiveMenuName(event.data.activeMenuName);return}console.warn("Unhandled iframe message from Docs:",event.data)}},window.addEventListener("message",cache.onWindowMessage)}),(0,index_esm.beforeUnmount)(_ref12=>{var _values$currentPath2;let{actions,values,cache}=_ref12;actions.setInitialPath(null!==(_values$currentPath2=values.currentPath)&&void 0!==_values$currentPath2?_values$currentPath2:"/docs"),window.removeEventListener("message",cache.onWindowMessage)})]);function SidePanelDocsSkeleton(){return(0,jsx_runtime.jsxs)("div",{className:"absolute inset-0 p-4 space-y-2",children:[(0,jsx_runtime.jsx)(src.yW,{className:"w-full h-10 mb-12"}),(0,jsx_runtime.jsx)(src.yW,{className:"w-1/3 h-8"}),(0,jsx_runtime.jsx)(src.yW,{className:"w-1/2 h-4 mb-10"}),(0,jsx_runtime.jsx)(src.yW,{className:"w-full h-4"}),(0,jsx_runtime.jsx)(src.yW,{className:"w-full h-4 opacity-80"}),(0,jsx_runtime.jsx)(src.yW,{className:"w-full h-4 opacity-60"}),(0,jsx_runtime.jsx)(src.yW,{className:"w-full h-4 opacity-40"}),(0,jsx_runtime.jsx)(src.yW,{className:"w-1/2 h-4 opacity-20"})]})}var experimentLogic=__webpack_require__("./frontend/src/scenes/experiments/experimentLogic.tsx"),feature_flags_featureFlagLogic=__webpack_require__("./frontend/src/scenes/feature-flags/featureFlagLogic.ts"),FeatureFlagReleaseConditions=__webpack_require__("./frontend/src/scenes/feature-flags/FeatureFlagReleaseConditions.tsx"),FeaturePreviews=__webpack_require__("./frontend/src/layout/FeaturePreviews/FeaturePreviews.tsx"),Settings=__webpack_require__("./frontend/src/scenes/settings/Settings.tsx"),settingsLogic=__webpack_require__("./frontend/src/scenes/settings/settingsLogic.ts"),sidePanelSettingsLogic=__webpack_require__("./frontend/src/layout/navigation-3000/sidepanel/panels/sidePanelSettingsLogic.tsx"),utils=__webpack_require__("./frontend/src/lib/utils.tsx"),sidePanelLogic=__webpack_require__("./frontend/src/layout/navigation-3000/sidepanel/sidePanelLogic.tsx"),sidePanelStatusLogic=__webpack_require__("./frontend/src/layout/navigation-3000/sidepanel/panels/sidePanelStatusLogic.tsx"),SupportForm=__webpack_require__("./frontend/src/lib/components/Support/SupportForm.tsx"),supportLogic=__webpack_require__("./frontend/src/lib/components/Support/supportLogic.ts"),billingLogic=__webpack_require__("./frontend/src/scenes/billing/billingLogic.tsx"),organizationLogic=__webpack_require__("./frontend/src/scenes/organizationLogic.tsx"),preflightLogic=__webpack_require__("./frontend/src/scenes/PreflightCheck/preflightLogic.tsx"),teamLogic=__webpack_require__("./frontend/src/scenes/teamLogic.tsx"),algoliasearch_lite_umd=__webpack_require__("./node_modules/.pnpm/algoliasearch@4.22.1/node_modules/algoliasearch/dist/algoliasearch-lite.umd.js"),algoliasearch_lite_umd_default=__webpack_require__.n(algoliasearch_lite_umd),useHits=__webpack_require__("./node_modules/.pnpm/react-instantsearch-core@7.6.0_algoliasearch@4.22.1_react@18.2.0/node_modules/react-instantsearch-core/dist/es/connectors/useHits.js"),useSearchBox=__webpack_require__("./node_modules/.pnpm/react-instantsearch-core@7.6.0_algoliasearch@4.22.1_react@18.2.0/node_modules/react-instantsearch-core/dist/es/connectors/useSearchBox.js"),useRefinementList=__webpack_require__("./node_modules/.pnpm/react-instantsearch-core@7.6.0_algoliasearch@4.22.1_react@18.2.0/node_modules/react-instantsearch-core/dist/es/connectors/useRefinementList.js"),InstantSearch=__webpack_require__("./node_modules/.pnpm/react-instantsearch-core@7.6.0_algoliasearch@4.22.1_react@18.2.0/node_modules/react-instantsearch-core/dist/es/components/InstantSearch.js"),AutoSizer=__webpack_require__("./node_modules/.pnpm/react-virtualized@9.22.5_react-dom@18.2.0_react@18.2.0/node_modules/react-virtualized/dist/es/AutoSizer/index.js"),List=__webpack_require__("./node_modules/.pnpm/react-virtualized@9.22.5_react-dom@18.2.0_react@18.2.0/node_modules/react-virtualized/dist/es/List/index.js");let searchClient=algoliasearch_lite_umd_default()("7VNQB5W0TX","37f41fd37095bc85af76ed4edc85eb5a"),rowRenderer=_ref=>{let{key,index,style,hits,activeOption}=_ref,{slug,title,type,resolved}=hits[index];return(0,jsx_runtime.jsx)("li",{style:style,role:"listitem",tabIndex:-1,className:"p-1 border-b last:border-b-0",children:(0,jsx_runtime.jsx)(src.Jp,{active:activeOption===index,to:`https://posthog.com/${slug}`,className:"[&_>span>span]:flex-col [&_>span>span]:items-start [&_>span>span]:space-y-1",children:(0,jsx_runtime.jsxs)("span",{children:[(0,jsx_runtime.jsxs)("span",{className:"flex space-x-2 items-center",children:[(0,jsx_runtime.jsx)("p",{className:"m-0 font-bold font-sans line-clamp-1",children:title}),"question"===type&&resolved&&(0,jsx_runtime.jsx)(posthog_icons_es.IconCheckCircle,{className:"text-success size-4 flex-shrink-0"})]}),(0,jsx_runtime.jsxs)("p",{className:"text-xs m-0 opacity-80 font-normal font-sans line-clamp-1",children:["/",slug]})]})})},key)},Hits=_ref2=>{let{activeOption}=_ref2,{hits}=(0,useHits.O)();return(0,jsx_runtime.jsx)("ol",{role:"listbox",className:"list-none m-0 p-0 h-[80vh]",children:(0,jsx_runtime.jsx)(AutoSizer.q,{children:_ref3=>{let{height,width}=_ref3;return(0,jsx_runtime.jsx)(List.aV,{scrollToIndex:activeOption,width:width,height:height,rowCount:hits.length,rowHeight:50,rowRenderer:options=>rowRenderer({...options,hits,activeOption})})}})})},SearchInput=_ref4=>{let{value,setValue}=_ref4,{refine}=(0,useSearchBox.l)();return(0,jsx_runtime.jsx)(src.DF,{onChange:value=>{setValue(value),refine(value)},value:value,type:"search",fullWidth:!0,placeholder:"Search..."})},tags=[{type:"all",label:"All"},{type:"docs",label:"Docs"},{type:"question",label:"Questions"},{type:"tutorial",label:"Tutorials"}],SearchTag=_ref5=>{let{type,label,active,onClick}=_ref5,{refine,items}=(0,useRefinementList.c)({attribute:"type"}),itemCount="all"!==type&&items.find(_ref6=>{let{value}=_ref6;return value===type})?.count;return(0,react.useEffect)(()=>{refine(type)},[]),(0,jsx_runtime.jsx)("button",{className:"p-0 cursor-pointer bg-bg-light",onClick:e=>{e.stopPropagation(),onClick(type)},children:(0,jsx_runtime.jsxs)(src.oe,{size:"medium",type:active?"primary":"option",children:[(0,jsx_runtime.jsx)("span",{children:label}),"all"!==type&&(0,jsx_runtime.jsxs)("span",{children:["(",null!=itemCount?itemCount:0,")"]})]})})},Tags=_ref7=>{let{activeTag,setActiveTag}=_ref7,handleClick=type=>{setActiveTag(type)};return(0,jsx_runtime.jsx)("ul",{className:"list-none m-0 p-0 flex space-x-1 mt-1 mb-0.5 pb-1.5 border-b px-2",children:tags.map(tag=>{let{type}=tag;return(0,jsx_runtime.jsx)("li",{children:(0,jsx_runtime.jsx)(SearchTag,{...tag,active:activeTag===type,onClick:handleClick})},type)})})},Search=()=>{let{openSidePanel}=(0,index_esm.useActions)(sidePanelStateLogic.f),{hits}=(0,useHits.O)(),{items,refine}=(0,useRefinementList.c)({attribute:"type"}),ref=(0,react.useRef)(null),[searchValue,setSearchValue]=(0,react.useState)(""),[activeOption,setActiveOption]=(0,react.useState)(),[activeTag,setActiveTag]=(0,react.useState)("all"),[searchOpen,setSearchOpen]=(0,react.useState)(!1);return(0,react.useEffect)(()=>{setSearchOpen(!!searchValue),setActiveOption(0)},[searchValue]),(0,react.useEffect)(()=>{if(setActiveOption(0),"all"===activeTag){let filteredItems=items.filter(_ref10=>{let{value}=_ref10;return tags.some(_ref11=>{let{type}=_ref11;return type===value})});filteredItems.forEach(_ref12=>{let{value,isRefined}=_ref12;isRefined||refine(value)})}else items.forEach(_ref13=>{let{value,isRefined}=_ref13;isRefined&&refine(value)}),refine(activeTag)},[activeTag]),(0,react.useEffect)(()=>{let handleClick=e=>{ref?.current?.contains(e.target)||setSearchOpen(!1)};return window.addEventListener("click",handleClick),()=>{window.removeEventListener("click",handleClick)}},[]),(0,jsx_runtime.jsxs)("div",{className:"relative",ref:ref,onKeyDown:e=>{switch(e.key){case"Enter":void 0!==activeOption&&openSidePanel(types.H$.Docs,`https://posthog.com/${hits[activeOption].slug}`);break;case"Escape":setSearchOpen(!1);break;case"ArrowDown":e.preventDefault(),setActiveOption(currOption=>void 0===currOption||currOption>=hits.length-1?0:currOption+1);break;case"ArrowUp":e.preventDefault(),setActiveOption(currOption=>{if(void 0!==currOption)return currOption<=0?hits.length-1:currOption-1});break;case"Tab":case"ArrowRight":{e.preventDefault();let currTagIndex=tags.findIndex(_ref8=>{let{type}=_ref8;return type===activeTag});setActiveTag(tags[currTagIndex>=tags.length-1?0:currTagIndex+1].type);break}case"ArrowLeft":{e.preventDefault();let currTagIndex=tags.findIndex(_ref9=>{let{type}=_ref9;return type===activeTag});setActiveTag(tags[currTagIndex<=0?tags.length-1:currTagIndex-1].type)}}},children:[(0,jsx_runtime.jsx)(SearchInput,{value:searchValue,setValue:setSearchValue}),searchOpen&&(0,jsx_runtime.jsxs)("div",{className:"absolute w-full bg-bg-light z-50 border rounded-lg shadow-xl mt-0.5",children:[(0,jsx_runtime.jsx)(Tags,{activeTag:activeTag,setActiveTag:setActiveTag}),(0,jsx_runtime.jsx)(Hits,{activeOption:activeOption})]})]})};function AlgoliaSearch(){return(0,jsx_runtime.jsx)(InstantSearch.p,{searchClient:searchClient,indexName:"prod_posthog_com",children:(0,jsx_runtime.jsx)(Search,{})})}let PRODUCTS=[{name:"Product OS",slug:"product-os",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconStack,{className:"text-danger h-5 w-5"})},{name:"Product analytics",slug:"product-analytics",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconTrends,{className:"text-brand-blue h-5 w-5"})},{name:"Web analytics",slug:"web-analytics",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconPieChart,{className:"text-[#36C46F] h-5 w-5"})},{name:"Session replay",slug:"session-replay",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconRewindPlay,{className:"text-warning h-5 w-5"})},{name:"Feature flags",slug:"feature-flags",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconToggle,{className:"text-success h-5 w-5"})},{name:"Experiments",slug:"experiments",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconFlask,{className:"text-purple h-5 w-5"})},{name:"Surveys",slug:"surveys",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconMessage,{className:"text-danger h-5 w-5"})},{name:"Data pipelines",slug:"cdp",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconDecisionTree,{className:"text-[#2EA2D3] h-5 w-5"})},{name:"Data warehouse",slug:"data-warehouse",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconDatabase,{className:"text-[#8567FF] h-5 w-5"})},{name:"AI engineering",slug:"ai-engineering",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconAI,{className:"text-[#681291] dark:text-[#C170E8] h-5 w-5"})}],Section=_ref=>{let{title,children}=_ref;return(0,jsx_runtime.jsxs)("section",{className:"mb-6",children:[(0,jsx_runtime.jsx)("h3",{children:title}),children]})},SupportFormBlock=_ref2=>{let{onCancel}=_ref2,{supportPlans,hasSupportAddonPlan}=(0,index_esm.useValues)(billingLogic.kr);return(0,jsx_runtime.jsxs)(Section,{title:"Email an engineer",children:[(0,jsx_runtime.jsx)(SupportForm.H,{}),(0,jsx_runtime.jsx)(src.Jp,{form:"support-modal-form",htmlType:"submit",type:"primary","data-attr":"submit",fullWidth:!0,center:!0,className:"mt-4",children:"Submit"}),(0,jsx_runtime.jsx)(src.Jp,{form:"support-modal-form",type:"secondary",onClick:onCancel,fullWidth:!0,center:!0,className:"mt-2 mb-4",children:"Cancel"}),(0,jsx_runtime.jsx)("br",{}),(0,jsx_runtime.jsxs)("div",{className:"grid grid-cols-2 border rounded [&_>*]:px-2 [&_>*]:py-0.5 mb-4 bg-bg-light pt-4",children:[(0,jsx_runtime.jsxs)("div",{className:"col-span-full flex justify-between border-b bg-bg-white py-1",children:[(0,jsx_runtime.jsx)("div",{children:(0,jsx_runtime.jsx)("strong",{children:"Avg support response times"})}),(0,jsx_runtime.jsx)("div",{children:(0,jsx_runtime.jsx)(src.rU,{to:urls.j.organizationBilling([types.Md.PLATFORM_AND_SUPPORT]),children:"Explore options"})})]}),supportPlans?.map(plan=>{let currentPlan=plan.current_plan&&(!hasSupportAddonPlan||plan.plan_key?.includes("addon"));return jsx_runtime.jsxs(react.Fragment,{children:[jsx_runtime.jsxs("div",{className:currentPlan?"font-bold":void 0,children:[plan.name,currentPlan&&jsx_runtime.jsxs(jsx_runtime.Fragment,{children:[" ",jsx_runtime.jsx("span",{className:"font-normal opacity-60 text-sm",children:"(your plan)"})]})]}),jsx_runtime.jsx("div",{className:currentPlan?"font-bold":void 0,children:plan.features.find(f=>f.key==types.P$.SUPPORT_RESPONSE_TIME)?.note})]},`support-panel-${plan.plan_key}`)})]})]})},SIDE_PANEL_TABS={[types.H$.Notebooks]:{label:"Notebooks",Icon:posthog_icons_es.IconNotebook,Content:function(){let{selectedNotebook,initialAutofocus,droppedResource,dropProperties}=(0,index_esm.useValues)(notebookPanelLogic.F),{selectNotebook,closeSidePanel}=(0,index_esm.useActions)(notebookPanelLogic.F),{notebook}=(0,index_esm.useValues)((0,notebookLogic.T)({shortId:selectedNotebook,target:types.bZ.Popover})),editable=!notebook?.is_template,{ref,size}=(0,useResizeObserver.S)({0:"small",832:"medium"}),contentWidthHasEffect=(0,react.useMemo)(()=>"medium"===size,[size]);return(0,jsx_runtime.jsxs)("div",{ref:ref,className:"NotebookPanel",...dropProperties,children:[droppedResource?null:(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[(0,jsx_runtime.jsxs)(SidePanelPaneHeader,{children:[(0,jsx_runtime.jsx)(NotebookListMini,{selectedNotebookId:selectedNotebook,onSelectNotebook:notebook=>{selectNotebook(notebook.short_id)}}),(0,jsx_runtime.jsx)("div",{className:"flex-1"}),selectedNotebook&&(0,jsx_runtime.jsx)(NotebookMeta.B,{shortId:selectedNotebook}),(0,jsx_runtime.jsx)(src.Jp,{size:"small",to:urls.j.notebook(selectedNotebook),onClick:()=>closeSidePanel(),icon:(0,jsx_runtime.jsx)(icons.pF,{}),tooltip:"Open as main focus",tooltipPlacement:"left"}),contentWidthHasEffect&&(0,jsx_runtime.jsx)(NotebookMeta.t,{size:"small"}),(0,jsx_runtime.jsx)(NotebookMenu.z,{shortId:selectedNotebook})]}),(0,jsx_runtime.jsx)("div",{className:"flex flex-col flex-1 overflow-y-auto px-4 py-2",children:(0,jsx_runtime.jsx)(Notebook.a,{shortId:selectedNotebook,editable:editable,initialAutofocus:initialAutofocus},selectedNotebook)})]}),(0,jsx_runtime.jsx)(NotebookPanelDropzone,{})]})},noModalSupport:!0},[types.H$.Support]:{label:"Help",Icon:posthog_icons_es.IconSupport,Content:()=>{let{openSidePanel,closeSidePanel}=(0,index_esm.useActions)(sidePanelStateLogic.f),{preflight,isCloud}=(0,index_esm.useValues)(preflightLogic.preflightLogic),{currentOrganization}=(0,index_esm.useValues)(organizationLogic.p),{currentTeam}=(0,index_esm.useValues)(teamLogic.H),{status}=(0,index_esm.useValues)(sidePanelStatusLogic.BE),theLogic=(0,supportLogic.Pw)({onClose:()=>closeSidePanel(types.H$.Support)}),{openEmailForm,closeEmailForm}=(0,index_esm.useActions)(theLogic),{title,isEmailFormOpen}=(0,index_esm.useValues)(theLogic),region=preflight?.region;return(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[(0,jsx_runtime.jsx)(SidePanelPaneHeader,{title:isEmailFormOpen?title:SIDE_PANEL_TABS[types.H$.Support].label}),(0,jsx_runtime.jsx)("div",{className:"overflow-y-auto","data-attr":"side-panel-support-container",children:(0,jsx_runtime.jsx)("div",{className:"p-3 max-w-160 w-full mx-auto",children:isEmailFormOpen?(0,jsx_runtime.jsx)(SupportFormBlock,{onCancel:()=>closeEmailForm()}):(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[(0,jsx_runtime.jsx)(Section,{title:"Search docs & community questions",children:(0,jsx_runtime.jsx)(AlgoliaSearch,{})}),(0,jsx_runtime.jsx)(Section,{title:"Explore the docs",children:(0,jsx_runtime.jsx)("ul",{className:"border rounded divide-y bg-bg-light dark:bg-transparent font-title font-medium",children:PRODUCTS.map((product,index)=>(0,jsx_runtime.jsx)("li",{children:(0,jsx_runtime.jsxs)(src.rU,{to:`https://posthog.com/docs/${product.slug}`,className:"group flex items-center justify-between px-2 py-1.5",children:[(0,jsx_runtime.jsxs)("div",{className:"flex items-center gap-1.5",children:[product.icon,(0,jsx_runtime.jsx)("span",{className:"text-text-3000 opacity-75 group-hover:opacity-100",children:product.name})]}),(0,jsx_runtime.jsx)("div",{children:(0,jsx_runtime.jsx)(posthog_icons_es.IconChevronDown,{className:"text-text-3000 h-6 w-6 opacity-60 -rotate-90 group-hover:opacity-90"})})]})},index))})}),"operational"!==status?(0,jsx_runtime.jsx)(Section,{title:"",children:(0,jsx_runtime.jsx)(src.Vp,{type:status.includes("outage")?"error":"warning",children:(0,jsx_runtime.jsxs)("div",{children:[(0,jsx_runtime.jsxs)("span",{children:["We are experiencing ",status.includes("outage")?"major":""," issues."]}),(0,jsx_runtime.jsx)(src.Jp,{type:"secondary",fullWidth:!0,center:!0,targetBlank:!0,onClick:()=>openSidePanel(types.H$.Status),className:"mt-2 bg-[white]",children:"View system status"})]})})}):null,isCloud?(0,jsx_runtime.jsxs)(Section,{title:"Contact us",children:[(0,jsx_runtime.jsx)("p",{children:"Can't find what you need in the docs?"}),(0,jsx_runtime.jsx)(src.Jp,{type:"primary",fullWidth:!0,center:!0,onClick:()=>openEmailForm(),targetBlank:!0,className:"mt-2",children:"Email an engineer"})]}):null,(0,jsx_runtime.jsx)(Section,{title:"Ask the community",children:(0,jsx_runtime.jsxs)("p",{children:["Questions about features, how-tos, or use cases? There are thousands of discussions in our community forums."," ",(0,jsx_runtime.jsx)(src.rU,{to:"https://posthog.com/questions",children:"Ask a question"})]})}),(0,jsx_runtime.jsx)(Section,{title:"Share feedback",children:(0,jsx_runtime.jsxs)("ul",{children:[(0,jsx_runtime.jsx)("li",{children:(0,jsx_runtime.jsx)(src.Jp,{type:"secondary",status:"alt",to:"https://posthog.com/wip",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconHelmet,{}),targetBlank:!0,children:"See what we're building"})}),(0,jsx_runtime.jsx)("li",{children:(0,jsx_runtime.jsx)(src.Jp,{type:"secondary",status:"alt",to:"https://posthog.com/roadmap",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconMap,{}),targetBlank:!0,children:"Vote on our roadmap"})}),(0,jsx_runtime.jsx)("li",{children:(0,jsx_runtime.jsx)(src.Jp,{type:"secondary",status:"alt",to:`https://github.com/PostHog/posthog/issues/new?&labels=enhancement&template=feature_request.yml&debug-info=${encodeURIComponent((0,supportLogic.nP)(region,currentOrganization,currentTeam))}`,icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconFeatures,{}),targetBlank:!0,children:"Request a feature"})})]})})]})})})]})}},[types.H$.Docs]:{label:"Docs",Icon:posthog_icons_es.IconInfo,Content:()=>{let ref=(0,react.useRef)(null),logic=sidePanelDocsLogic({iframeRef:ref}),{iframeSrc,iframeReady,currentUrl,activeMenuName,menuOptions}=(0,index_esm.useValues)(logic),{navigateToPage,unmountIframe,closeSidePanel}=(0,index_esm.useActions)(logic),{isDarkModeOn}=(0,index_esm.useValues)(themeLogic.b);return(0,react.useEffect)(()=>{ref.current?.contentWindow?.postMessage({type:"theme-toggle",isDarkModeOn},"*")},[isDarkModeOn,ref.current]),(0,react.useEffect)(()=>(window.addEventListener("beforeunload",unmountIframe),()=>{window.removeEventListener("beforeunload",unmountIframe),unmountIframe()}),[]),(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[(0,jsx_runtime.jsxs)(SidePanelPaneHeader,{children:[(0,jsx_runtime.jsx)(src.Jp,{size:"small",sideIcon:(0,jsx_runtime.jsx)(posthog_icons_es.IconHome,{}),type:"secondary",onClick:()=>{ref.current?.contentWindow?.postMessage({type:"navigate",url:"/docs"},"*")}}),menuOptions&&(0,jsx_runtime.jsx)(src.Yv,{placeholder:"Navigate",dropdownMatchSelectWidth:!1,onChange:navigateToPage,size:"small",value:null!=activeMenuName?activeMenuName:"",options:menuOptions.map(_ref=>{let{name,url}=_ref;return{label:name,value:url}})}),(0,jsx_runtime.jsx)("div",{className:"flex-1"}),(0,jsx_runtime.jsx)(src.Jp,{size:"small",sideIcon:(0,jsx_runtime.jsx)(posthog_icons_es.IconExternal,{}),targetBlank:!0,onClick:()=>{window.open(currentUrl,"_blank")?.focus(),closeSidePanel()},children:"Open in new tab"})]}),(0,jsx_runtime.jsxs)("div",{className:"relative flex-1 overflow-hidden",children:[(0,jsx_runtime.jsx)("iframe",{src:iframeSrc,title:"Docs",className:(0,clsx_m.default)("w-full h-full",!iframeReady&&"hidden"),ref:ref}),!iframeReady&&(0,jsx_runtime.jsx)(SidePanelDocsSkeleton,{})]})]})},noModalSupport:!0},[types.H$.Activation]:{label:"Quick start",Icon:_ref=>{let{className}=_ref,{activeTasks,completionPercent}=(0,index_esm.useValues)(activationLogic.z);return(0,jsx_runtime.jsx)(LemonProgressCircle.L,{progress:completionPercent/100,strokePercentage:.15,size:20,className:className,children:(0,jsx_runtime.jsx)("span",{className:"text-xs font-semibold",children:activeTasks.length})})},Content:()=>{let{activeTasks,completionPercent,completedTasks}=(0,index_esm.useValues)(activationLogic.z);return(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[(0,jsx_runtime.jsx)(SidePanelPaneHeader,{title:"Quick start"}),(0,jsx_runtime.jsxs)("div",{className:"p-4 space-y-2 overflow-y-auto",children:[(0,jsx_runtime.jsx)("p",{children:"Use our Quick Start guide to learn about everything PostHog can do for you and your product."}),(0,jsx_runtime.jsxs)("div",{className:"flex items-center justify-center",children:[(0,jsx_runtime.jsxs)("div",{className:"flex flex-col items-center",children:[(0,jsx_runtime.jsx)(LemonProgressCircle.L,{progress:completionPercent/100,size:100,className:"text-primary",children:(0,jsx_runtime.jsx)("span",{className:"text-2xl",children:activeTasks.length})}),(0,jsx_runtime.jsx)("p",{className:"text-muted mt-2 ",children:"still to go"})]}),(0,jsx_runtime.jsx)("div",{className:"h-60",children:(0,jsx_runtime.jsx)(hedgehogs.ProfessorHog,{className:"max-h-full w-auto object-contain"})})]}),activeTasks.length>0&&(0,jsx_runtime.jsxs)("div",{children:[(0,jsx_runtime.jsx)("h4",{children:"What's next?"}),(0,jsx_runtime.jsx)("ul",{className:"space-y-2",children:activeTasks.map(task=>(0,jsx_runtime.jsx)(ActivationTask,{...task},task.id))})]}),completedTasks.length>0&&(0,jsx_runtime.jsxs)("div",{children:[(0,jsx_runtime.jsx)("h4",{children:"Completed"}),(0,jsx_runtime.jsx)("ul",{className:"space-y-2",children:completedTasks.map(task=>(0,jsx_runtime.jsx)(ActivationTask,{...task},task.id))})]})]})]})}},[types.H$.Settings]:{label:"Settings",Icon:posthog_icons_es.IconGear,Content:()=>{var _settings$sectionId;let{settings}=(0,index_esm.useValues)(sidePanelSettingsLogic.A),{closeSidePanel,setSettings}=(0,index_esm.useActions)(sidePanelSettingsLogic.A),settingsLogicProps={...settings,logicKey:"sidepanel"},{selectedSectionId,selectedLevel}=(0,index_esm.useValues)((0,settingsLogic.h)(settingsLogicProps));return(0,react.useEffect)(()=>{setSettings({sectionId:null!=selectedSectionId?selectedSectionId:void 0,settingLevelId:selectedLevel})},[selectedSectionId,selectedLevel]),(0,jsx_runtime.jsxs)("div",{className:"flex flex-col overflow-hidden",children:[(0,jsx_runtime.jsx)(SidePanelPaneHeader,{children:(0,jsx_runtime.jsx)(src.Jp,{size:"small",to:urls.j.settings(null!==(_settings$sectionId=settings.sectionId)&&void 0!==_settings$sectionId?_settings$sectionId:settings.settingLevelId,settings.settingId),onClick:()=>closeSidePanel(),sideIcon:(0,jsx_runtime.jsx)(posthog_icons_es.IconExternal,{}),children:"All settings"})}),(0,jsx_runtime.jsx)("div",{className:"flex-1 p-4 overflow-y-auto",children:(0,jsx_runtime.jsx)(Settings.Z,{hideSections:!0,...settingsLogicProps})})]})}},[types.H$.FeaturePreviews]:{label:"Feature previews",Icon:posthog_icons_es.IconFeatures,Content:()=>(0,jsx_runtime.jsxs)("div",{className:"flex flex-col overflow-hidden",children:[(0,jsx_runtime.jsx)(SidePanelPaneHeader,{title:"Feature previews"}),(0,jsx_runtime.jsxs)("div",{className:"flex-1 p-4 overflow-y-auto space-y-4",children:[(0,jsx_runtime.jsx)(src.Vp,{type:"info",children:"Get early access to these upcoming features. Let us know what you think!"}),(0,jsx_runtime.jsx)(FeaturePreviews.F,{})]})]})},[types.H$.Activity]:{label:"Team activity",Icon:props=>{let{unreadCount}=(0,index_esm.useValues)(sidePanelActivityLogic.t);return(0,jsx_runtime.jsx)(icons.Xd,{count:unreadCount,...props,children:(0,jsx_runtime.jsx)(posthog_icons_es.IconNotification,{})})},Content:()=>{var _filters$item_id,_filters$user,_filtersForCurrentPag;let{hasNotifications,notifications,activeTab,allActivity,allActivityResponseLoading,allActivityHasNext,importantChangesLoading,hasUnread,filters,filtersForCurrentPage,showDetails}=(0,index_esm.useValues)(sidePanelActivityLogic.t),{togglePolling,setActiveTab,maybeLoadOlderActivity,markAllAsRead,loadImportantChanges,setFilters,toggleShowDetails}=(0,index_esm.useActions)(sidePanelActivityLogic.t),{user}=(0,index_esm.useValues)(userLogic.userLogic),{featureFlags}=(0,index_esm.useValues)(featureFlagLogic.h);(0,usePageVisibility.d)(pageIsVisible=>{togglePolling(pageIsVisible)}),(0,react.useEffect)(()=>(loadImportantChanges(!1),()=>{markAllAsRead(),togglePolling(!1)}),[]);let lastScrollPositionRef=(0,react.useRef)(0),contentRef=(0,react.useRef)(null),scopeMenuOptions=[{value:null,label:"All activity"},...Object.values(types.jc).map(x=>({value:x,label:(0,humanizeActivity.VI)(x)}))],activeScopeMenuOption=filters?.scope?filters.scope+`${null!==(_filters$item_id=filters.item_id)&&void 0!==_filters$item_id?_filters$item_id:""}`:null;filtersForCurrentPage?.scope&&filtersForCurrentPage?.item_id&&scopeMenuOptions.unshift({value:`${filtersForCurrentPage.scope}${null!==(_filtersForCurrentPag=filtersForCurrentPage.item_id)&&void 0!==_filtersForCurrentPag?_filtersForCurrentPag:""}`,label:`This ${(0,humanizeActivity.VI)(filtersForCurrentPage.scope,!0)}`});let toggleExtendedDescription=(0,jsx_runtime.jsx)(jsx_runtime.Fragment,{children:(0,jsx_runtime.jsx)(src.f4,{bordered:!0,label:"Show details",checked:showDetails,onChange:toggleShowDetails})});return(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[(0,jsx_runtime.jsx)(SidePanelPaneHeader,{title:"Team activity"}),(0,jsx_runtime.jsx)(PayGateMini.E,{feature:types.P$.AUDIT_LOGS,className:"flex flex-col overflow-hidden flex-1",overrideShouldShowGate:user?.is_impersonated||!!featureFlags[constants.y8.AUDIT_LOGS_ACCESS],children:(0,jsx_runtime.jsxs)("div",{className:"flex flex-col overflow-hidden flex-1",children:[(0,jsx_runtime.jsx)("div",{className:"shrink-0 mx-2",children:(0,jsx_runtime.jsx)(src.TP,{activeKey:activeTab,onChange:key=>setActiveTab(key),tabs:[{key:sidePanelActivityLogic.H.Unread,label:"My notifications"},{key:sidePanelActivityLogic.H.All,label:"All activity"}]})}),(0,jsx_runtime.jsx)("div",{className:"shrink-0 space-y-2 px-2 pb-2",children:activeTab===sidePanelActivityLogic.H.Unread?(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[(0,jsx_runtime.jsxs)(src.Vp,{type:"info",dismissKey:"notifications-introduction",children:["Notifications shows you changes others make to"," ",(0,jsx_runtime.jsx)(src.rU,{to:urls.j.savedInsights("history"),children:"Insights"})," and"," ",(0,jsx_runtime.jsx)(src.rU,{to:urls.j.featureFlags("history"),children:"Feature Flags"})," that you created. Come join ",(0,jsx_runtime.jsx)(src.rU,{to:"https://posthog.com/community",children:"our community forum"})," and tell us what else should be here!"]}),(0,jsx_runtime.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[toggleExtendedDescription,hasUnread?(0,jsx_runtime.jsx)(src.Jp,{type:"secondary",onClick:()=>markAllAsRead(),children:"Mark all as read"}):null]})]}):activeTab===sidePanelActivityLogic.H.All?(0,jsx_runtime.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,jsx_runtime.jsxs)("div",{className:"flex items-center gap-2",children:[toggleExtendedDescription,allActivityResponseLoading?(0,jsx_runtime.jsx)(src.$j,{textColored:!0}):null]}),(0,jsx_runtime.jsxs)("div",{className:"flex items-center gap-2",children:[(0,jsx_runtime.jsx)("span",{children:"Filter for activity on:"}),(0,jsx_runtime.jsx)(src.Yv,{size:"small",options:scopeMenuOptions,placeholder:"All activity",value:null!=activeScopeMenuOption?activeScopeMenuOption:void 0,onChange:value=>setFilters({...filters,scope:null!=value?value:void 0,item_id:void 0}),dropdownMatchSelectWidth:!1}),(0,jsx_runtime.jsx)("span",{children:"by"}),(0,jsx_runtime.jsx)(MemberSelect.a,{value:null!==(_filters$user=filters?.user)&&void 0!==_filters$user?_filters$user:null,onChange:user=>{var _user$id;return setFilters({...filters,user:null!==(_user$id=user?.id)&&void 0!==_user$id?_user$id:void 0})}})]})]}):null}),(0,jsx_runtime.jsx)("div",{className:"flex flex-col flex-1 overflow-hidden",ref:contentRef,onScroll:e=>{if(e.currentTarget.scrollTop>lastScrollPositionRef.current){let scrollPosition=e.currentTarget.scrollTop+e.currentTarget.clientHeight;e.currentTarget.scrollHeight-scrollPosition<100&&maybeLoadOlderActivity()}lastScrollPositionRef.current=e.currentTarget.scrollTop},children:(0,jsx_runtime.jsx)(ScrollableShadows.D,{direction:"vertical",innerClassName:"p-2 space-y-px",children:activeTab===sidePanelActivityLogic.H.Unread?(0,jsx_runtime.jsx)(jsx_runtime.Fragment,{children:importantChangesLoading&&!hasNotifications?(0,jsx_runtime.jsx)(src.yW,{className:"my-2 h-12",repeat:10,fade:!0}):hasNotifications?notifications.map((logItem,index)=>(0,jsx_runtime.jsx)(ActivityLog.h,{logItem:logItem,showExtendedDescription:showDetails},index)):(0,jsx_runtime.jsx)("div",{className:"border rounded text-center border-dashed p-6 text-muted-alt",children:"You're all caught up!"})}):activeTab===sidePanelActivityLogic.H.All?(0,jsx_runtime.jsx)(jsx_runtime.Fragment,{children:allActivityResponseLoading&&!allActivity.length?(0,jsx_runtime.jsx)(src.yW,{className:"my-2 h-12",repeat:10,fade:!0}):allActivity.length?(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[allActivity.map((logItem,index)=>(0,jsx_runtime.jsx)(ActivityLog.h,{logItem:logItem,showExtendedDescription:showDetails},index)),(0,jsx_runtime.jsx)("div",{className:"m-4 h-10 flex items-center justify-center gap-2 text-muted-alt",children:allActivityResponseLoading?(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[(0,jsx_runtime.jsx)(src.$j,{textColored:!0})," Loading older activity"]}):allActivityHasNext?(0,jsx_runtime.jsx)(src.Jp,{type:"secondary",fullWidth:!0,center:!0,onClick:()=>maybeLoadOlderActivity(),children:"Load more"}):"No more results"})]}):(0,jsx_runtime.jsxs)("div",{className:"border rounded text-center border-dashed p-6 flex flex-col gap-2 items-center",children:[(0,jsx_runtime.jsx)("span",{children:"No activity yet"}),filters?(0,jsx_runtime.jsx)(src.Jp,{type:"secondary",onClick:()=>setFilters(null),children:"Clear filters"}):null]})}):null})})]})})]})}},[types.H$.Discussion]:{label:"Discussion",Icon:props=>{let{commentCount}=(0,index_esm.useValues)(sidePanelDiscussionLogic);return(0,jsx_runtime.jsx)(icons.Xd,{count:commentCount,...props,children:(0,jsx_runtime.jsx)(posthog_icons_es.IconChat,{})})},Content:()=>{let{commentsLogicProps}=(0,index_esm.useValues)(sidePanelDiscussionLogic),{scope,item_id}=null!=commentsLogicProps?commentsLogicProps:{};return(0,jsx_runtime.jsxs)("div",{className:"flex flex-col overflow-hidden flex-1",children:[(0,jsx_runtime.jsx)(SidePanelPaneHeader,{title:(0,jsx_runtime.jsxs)("div",{className:"flex space-x-2",children:[(0,jsx_runtime.jsxs)("span",{children:["Discussion"," ",scope?(0,jsx_runtime.jsxs)("span",{className:"font-normal text-muted-alt",children:["about ",item_id?"this":""," ",(0,humanizeActivity.VI)(scope,!!item_id)]}):null]}),(0,jsx_runtime.jsx)(src.u,{title:"This is a feature we are experimenting with! We'd love to get your feedback on it and whether this is something useful for working with PostHog.",children:(0,jsx_runtime.jsx)(src.oe,{type:"completion",children:"Experimental"})})]})}),commentsLogicProps?(0,jsx_runtime.jsx)(DiscussionContent,{logicProps:commentsLogicProps}):(0,jsx_runtime.jsxs)("div",{className:"mx-auto p-8 max-w-160 mt-8 space-y-4",children:[(0,jsx_runtime.jsx)("div",{className:"max-w-80 mx-auto",children:(0,jsx_runtime.jsx)(hedgehogs.WarningHog,{className:"w-full h-full"})}),(0,jsx_runtime.jsx)("h2",{children:"Discussions aren't supported here yet..."}),(0,jsx_runtime.jsx)("p",{children:"This a beta feature that is currently only available when viewing things like an Insight, Dashboard or Notebook."})]})]})}},[types.H$.Exports]:{label:"Exports",Icon:()=>{let{freshUndownloadedExports}=(0,index_esm.useValues)(sidePanelExportsLogic);return(0,jsx_runtime.jsx)(icons.Xd,{count:freshUndownloadedExports.length,children:(0,jsx_runtime.jsx)(posthog_icons_es.IconDownload,{})})},Content:()=>(0,jsx_runtime.jsxs)("div",{className:"flex flex-col overflow-hidden flex-1",children:[(0,jsx_runtime.jsx)(SidePanelPaneHeader,{title:(0,jsx_runtime.jsx)("div",{className:"flex space-x-2",children:(0,jsx_runtime.jsx)("span",{children:"Exports"})})}),(0,jsx_runtime.jsx)("p",{className:"m-4",children:"Retrieve your exports here. Exports are generated asynchronously and may take a few seconds to complete."}),(0,jsx_runtime.jsx)(ExportsContent,{})]})},[types.H$.Status]:{label:"System status",Icon:props=>{let{status,statusPage}=(0,index_esm.useValues)(sidePanelStatusLogic.BE),title=statusPage?.status.description?(0,utils.fm)(statusPage.status.description.toLowerCase()):null;return(0,jsx_runtime.jsx)(src.u,{title:title,placement:"left",children:(0,jsx_runtime.jsx)("span",{...props,children:(0,jsx_runtime.jsx)(icons.T,{content:"operational"!==status?"!":"✓",status:status.includes("outage")?"danger":status.includes("degraded")||status.includes("monitoring")?"warning":"success",children:(0,jsx_runtime.jsx)(posthog_icons_es.IconCloud,{})})})})},Content:()=>{let{closeSidePanel}=(0,index_esm.useActions)(sidePanelLogic.x),[ready,setReady]=(0,react.useState)(!1);return(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[(0,jsx_runtime.jsxs)(SidePanelPaneHeader,{children:[(0,jsx_runtime.jsx)("div",{className:"flex-1"}),(0,jsx_runtime.jsx)(src.Jp,{size:"small",sideIcon:(0,jsx_runtime.jsx)(posthog_icons_es.IconExternal,{}),targetBlank:!0,onClick:()=>{window.open(sidePanelStatusLogic.UH,"_blank")?.focus(),closeSidePanel()},children:"Open in new tab"})]}),(0,jsx_runtime.jsxs)("div",{className:"relative flex-1 overflow-hidden",children:[(0,jsx_runtime.jsx)("iframe",{src:sidePanelStatusLogic.UH,title:"Status",className:(0,clsx_m.default)("w-full h-full",!ready&&"hidden"),onLoad:()=>setReady(!0)}),!ready&&(0,jsx_runtime.jsx)(SidePanelDocsSkeleton,{})]})]})},noModalSupport:!0},[types.H$.ExperimentFeatureFlag]:{label:"Release conditions",Icon:posthog_icons_es.IconFlag,Content:()=>{var _experiment$feature_f,_featureFlag$filters;let{closeSidePanel}=(0,index_esm.useActions)(sidePanelStateLogic.f),{currentLocation}=(0,index_esm.useValues)(kea_router_lib.router);(0,react.useEffect)(()=>{let isExperimentPath=/^\/project\/[0-9]+\/experiments\/[0-9]+/.test(currentLocation.pathname);isExperimentPath||closeSidePanel()},[currentLocation,closeSidePanel]);let experimentId=(0,react.useMemo)(()=>{let match=currentLocation.pathname.match(/\/experiments\/(\d+)/);return match?parseInt(match[1]):null},[currentLocation.pathname]),{experiment}=(0,index_esm.useValues)((0,experimentLogic.W)({experimentId:null!=experimentId?experimentId:"new"})),_featureFlagLogic=(0,feature_flags_featureFlagLogic.hk)({id:null!==(_experiment$feature_f=experiment.feature_flag?.id)&&void 0!==_experiment$feature_f?_experiment$feature_f:null}),{featureFlag,areVariantRolloutsValid,variantRolloutSum,featureFlagLoading,nonEmptyVariants}=(0,index_esm.useValues)(_featureFlagLogic),{setFeatureFlagFilters,saveSidebarExperimentFeatureFlag,distributeVariantsEqually}=(0,index_esm.useActions)(_featureFlagLogic),variants=featureFlag?.filters?.multivariate?.variants||[],handleRolloutPercentageChange=(index,value)=>{if(!featureFlag?.filters?.multivariate||!value)return;let updatedVariants=featureFlag.filters.multivariate.variants.map((variant,i)=>i===index?{...variant,rollout_percentage:value}:variant),updatedFilters={...featureFlag.filters,multivariate:{...featureFlag.filters.multivariate,variants:updatedVariants}};setFeatureFlagFilters(updatedFilters,null)};return featureFlagLoading||!featureFlag.id?(0,jsx_runtime.jsx)("div",{className:"flex items-center justify-center h-full",children:(0,jsx_runtime.jsx)(src.$j,{className:"text-3xl"})}):(0,jsx_runtime.jsxs)("div",{className:"space-y-6 p-2",children:[(0,jsx_runtime.jsx)(src.Vp,{type:"info",children:(0,jsx_runtime.jsxs)("div",{className:"space-y-3",children:[(0,jsx_runtime.jsx)("div",{children:"Adjusting variant distribution or user targeting may impact the validity of your results. Adjust only if you're aware of how changes will affect your experiment."}),(0,jsx_runtime.jsxs)("div",{children:["For full feature flag settings, go to"," ",(0,jsx_runtime.jsx)(src.rU,{target:"_blank",className:"font-semibold",to:experiment.feature_flag?urls.j.featureFlag(experiment.feature_flag.id):void 0,children:experiment.feature_flag?.key})," ","."]})]})}),(0,jsx_runtime.jsxs)("div",{children:[(0,jsx_runtime.jsx)("h3",{className:"l3",children:"Experiment variants"}),(0,jsx_runtime.jsx)(src.g3,{dataSource:variants,columns:[{title:"Variant Key",dataIndex:"key",key:"key",render:value=>(0,jsx_runtime.jsx)("span",{className:"font-semibold",children:value}),width:"50%"},{title:(0,jsx_runtime.jsxs)("div",{className:"flex items-center justify-between space-x-2",children:[(0,jsx_runtime.jsx)("span",{children:"Rollout Percentage"}),(0,jsx_runtime.jsx)(src.Jp,{onClick:distributeVariantsEqually,tooltip:"Redistribute variant rollout percentages equally",children:(0,jsx_runtime.jsx)(posthog_icons_es.IconBalance,{})})]}),dataIndex:"rollout_percentage",key:"rollout_percentage",render:(_,record,index)=>(0,jsx_runtime.jsx)(src.DF,{type:"number",value:record.rollout_percentage,onChange:changedValue=>{if(null!==changedValue){let valueInt=void 0!==changedValue?parseInt(changedValue.toString()):0;isNaN(valueInt)||handleRolloutPercentageChange(index,changedValue)}},min:0,max:100,suffix:(0,jsx_runtime.jsx)("span",{children:"%"})})}]}),variants.length>0&&!areVariantRolloutsValid&&(0,jsx_runtime.jsxs)("p",{className:"text-danger",children:["Percentage rollouts for variants must sum to 100 (currently ",variantRolloutSum,")."]})]}),(0,jsx_runtime.jsx)(FeatureFlagReleaseConditions.I,{id:`${experiment.feature_flag?.id}`,filters:null!==(_featureFlag$filters=featureFlag?.filters)&&void 0!==_featureFlag$filters?_featureFlag$filters:[],onChange:setFeatureFlagFilters,nonEmptyFeatureFlagVariants:nonEmptyVariants}),(0,jsx_runtime.jsx)(src.p2,{}),(0,jsx_runtime.jsx)("div",{children:(0,jsx_runtime.jsx)(src.Jp,{className:"-mt-4",type:"primary",onClick:()=>{saveSidebarExperimentFeatureFlag(featureFlag)},children:"Save"})})]})}}};function SidePanel_SidePanel(){var _theme$sidebarStyle;let{theme}=(0,index_esm.useValues)(themeLogic.b),{visibleTabs,extraTabs}=(0,index_esm.useValues)(sidePanelLogic.x),{selectedTab,sidePanelOpen,modalMode}=(0,index_esm.useValues)(sidePanelStateLogic.f),{openSidePanel,closeSidePanel,setSidePanelAvailable}=(0,index_esm.useActions)(sidePanelStateLogic.f),activeTab=sidePanelOpen&&selectedTab,PanelConent=activeTab?SIDE_PANEL_TABS[activeTab]?.Content:null,ref=(0,react.useRef)(null),resizerLogicProps={containerRef:ref,logicKey:"side-panel",persistent:!0,closeThreshold:200,placement:"left",onToggleClosed:shouldBeClosed=>{shouldBeClosed?closeSidePanel():selectedTab&&openSidePanel(selectedTab)}},{desiredSize,isResizeInProgress}=(0,index_esm.useValues)((0,resizerLogic.Z)(resizerLogicProps));if((0,react.useEffect)(()=>(setSidePanelAvailable(!0),()=>{setSidePanelAvailable(!1)}),[]),!visibleTabs.length)return null;let sidePanelOpenAndAvailable=selectedTab&&sidePanelOpen&&visibleTabs.includes(selectedTab),menuOptions=extraTabs?[{title:"Open in side panel",items:extraTabs.map(tab=>{let{Icon,label}=SIDE_PANEL_TABS[tab];return{label:label,icon:(0,jsx_runtime.jsx)(Icon,{}),onClick:()=>openSidePanel(tab)}})}]:void 0;if(modalMode){let supportsModal=!activeTab||!SIDE_PANEL_TABS[activeTab]?.noModalSupport;return(0,jsx_runtime.jsx)(src.fQ,{simple:!0,isOpen:!!PanelConent&&supportsModal,onClose:closeSidePanel,hideCloseButton:!0,width:"40rem",children:PanelConent?(0,jsx_runtime.jsx)(PanelConent,{}):null})}return(0,jsx_runtime.jsxs)("div",{className:(0,clsx_m.default)("SidePanel3000",sidePanelOpenAndAvailable&&"SidePanel3000--open",isResizeInProgress&&"SidePanel3000--resizing"),ref:ref,style:{width:sidePanelOpenAndAvailable?null!=desiredSize?desiredSize:512:void 0,...null!==(_theme$sidebarStyle=theme?.sidebarStyle)&&void 0!==_theme$sidebarStyle?_theme$sidebarStyle:{}},children:[(0,jsx_runtime.jsx)(Resizer.w,{...resizerLogicProps}),(0,jsx_runtime.jsxs)("div",{className:"SidePanel3000__bar",children:[(0,jsx_runtime.jsx)("div",{className:"SidePanel3000__tabs",children:(0,jsx_runtime.jsx)("div",{className:"SidePanel3000__tabs-content",children:visibleTabs.map(tab=>{let{Icon,label}=SIDE_PANEL_TABS[tab];return(0,jsx_runtime.jsx)(src.Jp,{icon:(0,jsx_runtime.jsx)(Icon,{}),onClick:()=>activeTab===tab?closeSidePanel():openSidePanel(tab),"data-attr":`sidepanel-tab-${tab}`,"data-ph-capture-attribute-state-before-click":activeTab===tab?"open":"closed",active:activeTab===tab,type:"secondary",status:"alt",children:label},tab)})})}),menuOptions?(0,jsx_runtime.jsx)("div",{className:"shrink-0 flex items-center m-2",children:(0,jsx_runtime.jsx)(src.d6,{items:menuOptions,children:(0,jsx_runtime.jsx)(src.Jp,{size:"small",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconEllipsis,{})})})}):null]}),(0,jsx_runtime.jsx)(Resizer.w,{...resizerLogicProps,offset:"3rem"}),PanelConent?(0,jsx_runtime.jsx)("div",{className:"SidePanel3000__content",children:(0,jsx_runtime.jsx)(PanelConent,{})}):null]})}},"./frontend/src/layout/navigation-3000/sidepanel/panels/activation/activationLogic.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{z:()=>activationLogic});var index_esm=__webpack_require__("./node_modules/.pnpm/kea@3.1.5_react@18.2.0/node_modules/kea/lib/index.esm.js"),lib=__webpack_require__("./node_modules/.pnpm/kea-loaders@3.0.0_kea@3.1.5/node_modules/kea-loaders/lib/index.js"),kea_router_lib=__webpack_require__("./node_modules/.pnpm/kea-router@3.2.0_kea@3.1.5/node_modules/kea-router/lib/index.js"),api=__webpack_require__("./frontend/src/lib/api.ts"),schema=__webpack_require__("./frontend/src/queries/schema.ts"),utils=__webpack_require__("./frontend/src/queries/utils.ts");let reverseProxyCheckerLogic=(0,index_esm.kea)([(0,index_esm.path)(["components","ReverseProxyChecker","reverseProxyCheckerLogic"]),(0,lib.loaders)({hasReverseProxy:[!1,{loadHasReverseProxy:async()=>{let query={kind:schema.OH.HogQLQuery,query:(0,utils.zP)`SELECT properties.$lib_custom_api_host AS lib_custom_api_host +(self.webpackChunkposthog=self.webpackChunkposthog||[]).push([[40179],{"./frontend/src lazy recursive ^\\.\\/.*$ include: (?:\\/frontend\\/src(?:\\/(?%21\\.)(?:(?:(?%21(?:^%7C\\/)\\.).)*?)\\/%7C\\/%7C$)(?%21\\.)(?=.)[^/]*?\\.stories\\.(js%7Cjsx%7Cts%7Ctsx%7Cmdx))$":(module,__unused_webpack_exports,__webpack_require__)=>{var map={"./exporter/Exporter.stories":["./frontend/src/exporter/Exporter.stories.tsx",18146,53342,85564,26299,74653,89245],"./exporter/Exporter.stories.tsx":["./frontend/src/exporter/Exporter.stories.tsx",18146,53342,85564,26299,74653,89245],"./layout/ErrorProjectUnavailable.stories":["./frontend/src/layout/ErrorProjectUnavailable.stories.tsx",89716],"./layout/ErrorProjectUnavailable.stories.tsx":["./frontend/src/layout/ErrorProjectUnavailable.stories.tsx",89716],"./layout/FeaturePreviews/FeaturePreviews.stories":["./frontend/src/layout/FeaturePreviews/FeaturePreviews.stories.tsx",57578],"./layout/FeaturePreviews/FeaturePreviews.stories.tsx":["./frontend/src/layout/FeaturePreviews/FeaturePreviews.stories.tsx",57578],"./layout/navigation-3000/Navigation.stories":["./frontend/src/layout/navigation-3000/Navigation.stories.tsx",29749,36125],"./layout/navigation-3000/Navigation.stories.tsx":["./frontend/src/layout/navigation-3000/Navigation.stories.tsx",29749,36125],"./layout/navigation-3000/components/KeyboardShortcut.stories":["./frontend/src/layout/navigation-3000/components/KeyboardShortcut.stories.tsx",39298],"./layout/navigation-3000/components/KeyboardShortcut.stories.tsx":["./frontend/src/layout/navigation-3000/components/KeyboardShortcut.stories.tsx",39298],"./layout/navigation-3000/components/Sidebar.stories":["./frontend/src/layout/navigation-3000/components/Sidebar.stories.tsx",43847],"./layout/navigation-3000/components/Sidebar.stories.tsx":["./frontend/src/layout/navigation-3000/components/Sidebar.stories.tsx",43847],"./layout/navigation-3000/sidepanel/SidePanel.stories":["./frontend/src/layout/navigation-3000/sidepanel/SidePanel.stories.tsx",67197],"./layout/navigation-3000/sidepanel/SidePanel.stories.tsx":["./frontend/src/layout/navigation-3000/sidepanel/SidePanel.stories.tsx",67197],"./lib/components/ActivityLog/ActivityLog.stories":["./frontend/src/lib/components/ActivityLog/ActivityLog.stories.tsx",94831],"./lib/components/ActivityLog/ActivityLog.stories.tsx":["./frontend/src/lib/components/ActivityLog/ActivityLog.stories.tsx",94831],"./lib/components/ActivityLog/SentenceList.stories":["./frontend/src/lib/components/ActivityLog/SentenceList.stories.tsx",92223],"./lib/components/ActivityLog/SentenceList.stories.tsx":["./frontend/src/lib/components/ActivityLog/SentenceList.stories.tsx",92223],"./lib/components/Animation/Animation.stories":["./frontend/src/lib/components/Animation/Animation.stories.tsx",85566],"./lib/components/Animation/Animation.stories.tsx":["./frontend/src/lib/components/Animation/Animation.stories.tsx",85566],"./lib/components/Cards/InsightCard/InsightCard.stories":["./frontend/src/lib/components/Cards/InsightCard/InsightCard.stories.tsx",18146,85564,23407],"./lib/components/Cards/InsightCard/InsightCard.stories.tsx":["./frontend/src/lib/components/Cards/InsightCard/InsightCard.stories.tsx",18146,85564,23407],"./lib/components/Cards/InsightCard/InsightDetails.stories":["./frontend/src/lib/components/Cards/InsightCard/InsightDetails.stories.tsx",18146,85564,71831],"./lib/components/Cards/InsightCard/InsightDetails.stories.tsx":["./frontend/src/lib/components/Cards/InsightCard/InsightDetails.stories.tsx",18146,85564,71831],"./lib/components/Cards/TextCard/TextCard.stories":["./frontend/src/lib/components/Cards/TextCard/TextCard.stories.tsx",2543],"./lib/components/Cards/TextCard/TextCard.stories.tsx":["./frontend/src/lib/components/Cards/TextCard/TextCard.stories.tsx",2543],"./lib/components/CodeSnippet/CodeSnippet.stories":["./frontend/src/lib/components/CodeSnippet/CodeSnippet.stories.tsx",90346],"./lib/components/CodeSnippet/CodeSnippet.stories.tsx":["./frontend/src/lib/components/CodeSnippet/CodeSnippet.stories.tsx",90346],"./lib/components/CommandBar/CommandBar.stories":["./frontend/src/lib/components/CommandBar/CommandBar.stories.tsx",75110],"./lib/components/CommandBar/CommandBar.stories.tsx":["./frontend/src/lib/components/CommandBar/CommandBar.stories.tsx",75110],"./lib/components/CompactList/CompactList.stories":["./frontend/src/lib/components/CompactList/CompactList.stories.tsx",30444],"./lib/components/CompactList/CompactList.stories.tsx":["./frontend/src/lib/components/CompactList/CompactList.stories.tsx",30444],"./lib/components/EditableField/EditableField.stories":["./frontend/src/lib/components/EditableField/EditableField.stories.tsx",6319],"./lib/components/EditableField/EditableField.stories.tsx":["./frontend/src/lib/components/EditableField/EditableField.stories.tsx",6319],"./lib/components/EmptyMessage/EmptyMessage.stories":["./frontend/src/lib/components/EmptyMessage/EmptyMessage.stories.tsx",78095],"./lib/components/EmptyMessage/EmptyMessage.stories.tsx":["./frontend/src/lib/components/EmptyMessage/EmptyMessage.stories.tsx",78095],"./lib/components/Errors/ErrorDisplay.stories":["./frontend/src/lib/components/Errors/ErrorDisplay.stories.tsx",73949],"./lib/components/Errors/ErrorDisplay.stories.tsx":["./frontend/src/lib/components/Errors/ErrorDisplay.stories.tsx",73949],"./lib/components/EventSelect/EventSelect.stories":["./frontend/src/lib/components/EventSelect/EventSelect.stories.tsx",96062],"./lib/components/EventSelect/EventSelect.stories.tsx":["./frontend/src/lib/components/EventSelect/EventSelect.stories.tsx",96062],"./lib/components/HTMLElementsDisplay/HTMLElementsDisplay.stories":["./frontend/src/lib/components/HTMLElementsDisplay/HTMLElementsDisplay.stories.tsx",59545],"./lib/components/HTMLElementsDisplay/HTMLElementsDisplay.stories.tsx":["./frontend/src/lib/components/HTMLElementsDisplay/HTMLElementsDisplay.stories.tsx",59545],"./lib/components/HedgehogBuddy/HedgehogBuddy.stories":["./frontend/src/lib/components/HedgehogBuddy/HedgehogBuddy.stories.tsx",46460],"./lib/components/HedgehogBuddy/HedgehogBuddy.stories.tsx":["./frontend/src/lib/components/HedgehogBuddy/HedgehogBuddy.stories.tsx",46460],"./lib/components/HogQLEditor/HogQLEditor.stories":["./frontend/src/lib/components/HogQLEditor/HogQLEditor.stories.tsx",23398],"./lib/components/HogQLEditor/HogQLEditor.stories.tsx":["./frontend/src/lib/components/HogQLEditor/HogQLEditor.stories.tsx",23398],"./lib/components/Hogfetti/Hogfetti.stories":["./frontend/src/lib/components/Hogfetti/Hogfetti.stories.tsx",986],"./lib/components/Hogfetti/Hogfetti.stories.tsx":["./frontend/src/lib/components/Hogfetti/Hogfetti.stories.tsx",986],"./lib/components/Map/Map.stories":["./frontend/src/lib/components/Map/Map.stories.tsx",91175],"./lib/components/Map/Map.stories.tsx":["./frontend/src/lib/components/Map/Map.stories.tsx",91175],"./lib/components/NotFound/NotFound.stories":["./frontend/src/lib/components/NotFound/NotFound.stories.tsx",32146],"./lib/components/NotFound/NotFound.stories.tsx":["./frontend/src/lib/components/NotFound/NotFound.stories.tsx",32146],"./lib/components/ObjectTags/ObjectTags.stories":["./frontend/src/lib/components/ObjectTags/ObjectTags.stories.tsx",88082],"./lib/components/ObjectTags/ObjectTags.stories.tsx":["./frontend/src/lib/components/ObjectTags/ObjectTags.stories.tsx",88082],"./lib/components/PathCleanFilters/PathCleanFilters.stories":["./frontend/src/lib/components/PathCleanFilters/PathCleanFilters.stories.tsx",68097],"./lib/components/PathCleanFilters/PathCleanFilters.stories.tsx":["./frontend/src/lib/components/PathCleanFilters/PathCleanFilters.stories.tsx",68097],"./lib/components/PayGateMini/PayGateMini.stories":["./frontend/src/lib/components/PayGateMini/PayGateMini.stories.tsx",6875,15773],"./lib/components/PayGateMini/PayGateMini.stories.tsx":["./frontend/src/lib/components/PayGateMini/PayGateMini.stories.tsx",6875,15773],"./lib/components/Playlist/Playlist.stories":["./frontend/src/lib/components/Playlist/Playlist.stories.tsx",11923],"./lib/components/Playlist/Playlist.stories.tsx":["./frontend/src/lib/components/Playlist/Playlist.stories.tsx",11923],"./lib/components/ProductIntroduction/ProductIntroduction.stories":["./frontend/src/lib/components/ProductIntroduction/ProductIntroduction.stories.tsx",87111],"./lib/components/ProductIntroduction/ProductIntroduction.stories.tsx":["./frontend/src/lib/components/ProductIntroduction/ProductIntroduction.stories.tsx",87111],"./lib/components/PropertiesTable/PropertiesTable.stories":["./frontend/src/lib/components/PropertiesTable/PropertiesTable.stories.tsx",10057],"./lib/components/PropertiesTable/PropertiesTable.stories.tsx":["./frontend/src/lib/components/PropertiesTable/PropertiesTable.stories.tsx",10057],"./lib/components/PropertiesTimeline/PropertiesTimeline.stories":["./frontend/src/lib/components/PropertiesTimeline/PropertiesTimeline.stories.tsx",39127],"./lib/components/PropertiesTimeline/PropertiesTimeline.stories.tsx":["./frontend/src/lib/components/PropertiesTimeline/PropertiesTimeline.stories.tsx",39127],"./lib/components/PropertyFilters/PropertyFilters.stories":["./frontend/src/lib/components/PropertyFilters/PropertyFilters.stories.tsx",85205],"./lib/components/PropertyFilters/PropertyFilters.stories.tsx":["./frontend/src/lib/components/PropertyFilters/PropertyFilters.stories.tsx",85205],"./lib/components/PropertyFilters/components/OperatorValueSelect.stories":["./frontend/src/lib/components/PropertyFilters/components/OperatorValueSelect.stories.tsx",24792],"./lib/components/PropertyFilters/components/OperatorValueSelect.stories.tsx":["./frontend/src/lib/components/PropertyFilters/components/OperatorValueSelect.stories.tsx",24792],"./lib/components/PropertyFilters/components/PropertyFilterButton.stories":["./frontend/src/lib/components/PropertyFilters/components/PropertyFilterButton.stories.tsx",59931],"./lib/components/PropertyFilters/components/PropertyFilterButton.stories.tsx":["./frontend/src/lib/components/PropertyFilters/components/PropertyFilterButton.stories.tsx",59931],"./lib/components/PropertyIcon.stories":["./frontend/src/lib/components/PropertyIcon.stories.tsx",99387],"./lib/components/PropertyIcon.stories.tsx":["./frontend/src/lib/components/PropertyIcon.stories.tsx",99387],"./lib/components/PropertyKeyInfo.stories":["./frontend/src/lib/components/PropertyKeyInfo.stories.tsx",60665],"./lib/components/PropertyKeyInfo.stories.tsx":["./frontend/src/lib/components/PropertyKeyInfo.stories.tsx",60665],"./lib/components/PropertySelect/PropertySelect.stories":["./frontend/src/lib/components/PropertySelect/PropertySelect.stories.tsx",92176],"./lib/components/PropertySelect/PropertySelect.stories.tsx":["./frontend/src/lib/components/PropertySelect/PropertySelect.stories.tsx",92176],"./lib/components/ScrollableShadows/ScrollableShadows.stories":["./frontend/src/lib/components/ScrollableShadows/ScrollableShadows.stories.tsx",2313],"./lib/components/ScrollableShadows/ScrollableShadows.stories.tsx":["./frontend/src/lib/components/ScrollableShadows/ScrollableShadows.stories.tsx",2313],"./lib/components/Sharing/SharingModal.stories":["./frontend/src/lib/components/Sharing/SharingModal.stories.tsx",40722],"./lib/components/Sharing/SharingModal.stories.tsx":["./frontend/src/lib/components/Sharing/SharingModal.stories.tsx",40722],"./lib/components/Subscriptions/SubscriptionsModal.stories":["./frontend/src/lib/components/Subscriptions/SubscriptionsModal.stories.tsx",25733],"./lib/components/Subscriptions/SubscriptionsModal.stories.tsx":["./frontend/src/lib/components/Subscriptions/SubscriptionsModal.stories.tsx",25733],"./lib/components/TZLabel/TZLabel.stories":["./frontend/src/lib/components/TZLabel/TZLabel.stories.tsx",68987],"./lib/components/TZLabel/TZLabel.stories.tsx":["./frontend/src/lib/components/TZLabel/TZLabel.stories.tsx",68987],"./lib/components/TaxonomicFilter/TaxonomicFilter.stories":["./frontend/src/lib/components/TaxonomicFilter/TaxonomicFilter.stories.tsx",47124],"./lib/components/TaxonomicFilter/TaxonomicFilter.stories.tsx":["./frontend/src/lib/components/TaxonomicFilter/TaxonomicFilter.stories.tsx",47124],"./lib/components/TaxonomicPopover/TaxonomicPopover.stories":["./frontend/src/lib/components/TaxonomicPopover/TaxonomicPopover.stories.tsx",18373],"./lib/components/TaxonomicPopover/TaxonomicPopover.stories.tsx":["./frontend/src/lib/components/TaxonomicPopover/TaxonomicPopover.stories.tsx",18373],"./lib/components/UniversalFilters/UniversalFilters.stories":["./frontend/src/lib/components/UniversalFilters/UniversalFilters.stories.tsx",95858],"./lib/components/UniversalFilters/UniversalFilters.stories.tsx":["./frontend/src/lib/components/UniversalFilters/UniversalFilters.stories.tsx",95858],"./lib/components/hedgehogs.stories":["./frontend/src/lib/components/hedgehogs.stories.tsx",63833],"./lib/components/hedgehogs.stories.tsx":["./frontend/src/lib/components/hedgehogs.stories.tsx",63833],"./lib/lemon-ui/LemonBadge/LemonBadge.stories":["./frontend/src/lib/lemon-ui/LemonBadge/LemonBadge.stories.tsx",28308],"./lib/lemon-ui/LemonBadge/LemonBadge.stories.tsx":["./frontend/src/lib/lemon-ui/LemonBadge/LemonBadge.stories.tsx",28308],"./lib/lemon-ui/LemonBadge/LemonBadgeNumber.stories":["./frontend/src/lib/lemon-ui/LemonBadge/LemonBadgeNumber.stories.tsx",15545],"./lib/lemon-ui/LemonBadge/LemonBadgeNumber.stories.tsx":["./frontend/src/lib/lemon-ui/LemonBadge/LemonBadgeNumber.stories.tsx",15545],"./lib/lemon-ui/LemonBanner/LemonBanner.stories":["./frontend/src/lib/lemon-ui/LemonBanner/LemonBanner.stories.tsx",55409],"./lib/lemon-ui/LemonBanner/LemonBanner.stories.tsx":["./frontend/src/lib/lemon-ui/LemonBanner/LemonBanner.stories.tsx",55409],"./lib/lemon-ui/LemonButton/LemonButton.stories":["./frontend/src/lib/lemon-ui/LemonButton/LemonButton.stories.tsx",90001],"./lib/lemon-ui/LemonButton/LemonButton.stories.tsx":["./frontend/src/lib/lemon-ui/LemonButton/LemonButton.stories.tsx",90001],"./lib/lemon-ui/LemonCalendar/LemonCalendar.stories":["./frontend/src/lib/lemon-ui/LemonCalendar/LemonCalendar.stories.tsx",33214],"./lib/lemon-ui/LemonCalendar/LemonCalendar.stories.tsx":["./frontend/src/lib/lemon-ui/LemonCalendar/LemonCalendar.stories.tsx",33214],"./lib/lemon-ui/LemonCalendar/LemonCalendarSelect.stories":["./frontend/src/lib/lemon-ui/LemonCalendar/LemonCalendarSelect.stories.tsx",72281],"./lib/lemon-ui/LemonCalendar/LemonCalendarSelect.stories.tsx":["./frontend/src/lib/lemon-ui/LemonCalendar/LemonCalendarSelect.stories.tsx",72281],"./lib/lemon-ui/LemonCalendar/LemonCalendarSelectInput.stories":["./frontend/src/lib/lemon-ui/LemonCalendar/LemonCalendarSelectInput.stories.tsx",1094],"./lib/lemon-ui/LemonCalendar/LemonCalendarSelectInput.stories.tsx":["./frontend/src/lib/lemon-ui/LemonCalendar/LemonCalendarSelectInput.stories.tsx",1094],"./lib/lemon-ui/LemonCalendarRange/LemonCalendarRange.stories":["./frontend/src/lib/lemon-ui/LemonCalendarRange/LemonCalendarRange.stories.tsx",86910],"./lib/lemon-ui/LemonCalendarRange/LemonCalendarRange.stories.tsx":["./frontend/src/lib/lemon-ui/LemonCalendarRange/LemonCalendarRange.stories.tsx",86910],"./lib/lemon-ui/LemonCalendarRange/LemonCalendarRangeInline.stories":["./frontend/src/lib/lemon-ui/LemonCalendarRange/LemonCalendarRangeInline.stories.tsx",85903],"./lib/lemon-ui/LemonCalendarRange/LemonCalendarRangeInline.stories.tsx":["./frontend/src/lib/lemon-ui/LemonCalendarRange/LemonCalendarRangeInline.stories.tsx",85903],"./lib/lemon-ui/LemonCheckbox/LemonCheckbox.stories":["./frontend/src/lib/lemon-ui/LemonCheckbox/LemonCheckbox.stories.tsx",38597],"./lib/lemon-ui/LemonCheckbox/LemonCheckbox.stories.tsx":["./frontend/src/lib/lemon-ui/LemonCheckbox/LemonCheckbox.stories.tsx",38597],"./lib/lemon-ui/LemonCollapse/LemonCollapse.stories":["./frontend/src/lib/lemon-ui/LemonCollapse/LemonCollapse.stories.tsx",50339],"./lib/lemon-ui/LemonCollapse/LemonCollapse.stories.tsx":["./frontend/src/lib/lemon-ui/LemonCollapse/LemonCollapse.stories.tsx",50339],"./lib/lemon-ui/LemonDialog/LemonDialog.stories":["./frontend/src/lib/lemon-ui/LemonDialog/LemonDialog.stories.tsx",39513],"./lib/lemon-ui/LemonDialog/LemonDialog.stories.tsx":["./frontend/src/lib/lemon-ui/LemonDialog/LemonDialog.stories.tsx",39513],"./lib/lemon-ui/LemonDivider/LemonDivider.stories":["./frontend/src/lib/lemon-ui/LemonDivider/LemonDivider.stories.tsx",58168],"./lib/lemon-ui/LemonDivider/LemonDivider.stories.tsx":["./frontend/src/lib/lemon-ui/LemonDivider/LemonDivider.stories.tsx",58168],"./lib/lemon-ui/LemonField/LemonField.stories":["./frontend/src/lib/lemon-ui/LemonField/LemonField.stories.tsx",7422],"./lib/lemon-ui/LemonField/LemonField.stories.tsx":["./frontend/src/lib/lemon-ui/LemonField/LemonField.stories.tsx",7422],"./lib/lemon-ui/LemonFileInput/LemonFileInput.stories":["./frontend/src/lib/lemon-ui/LemonFileInput/LemonFileInput.stories.tsx",53617],"./lib/lemon-ui/LemonFileInput/LemonFileInput.stories.tsx":["./frontend/src/lib/lemon-ui/LemonFileInput/LemonFileInput.stories.tsx",53617],"./lib/lemon-ui/LemonInput/LemonInput.stories":["./frontend/src/lib/lemon-ui/LemonInput/LemonInput.stories.tsx",55394],"./lib/lemon-ui/LemonInput/LemonInput.stories.tsx":["./frontend/src/lib/lemon-ui/LemonInput/LemonInput.stories.tsx",55394],"./lib/lemon-ui/LemonInputSelect/LemonInputSelect.stories":["./frontend/src/lib/lemon-ui/LemonInputSelect/LemonInputSelect.stories.tsx",10223],"./lib/lemon-ui/LemonInputSelect/LemonInputSelect.stories.tsx":["./frontend/src/lib/lemon-ui/LemonInputSelect/LemonInputSelect.stories.tsx",10223],"./lib/lemon-ui/LemonLabel/LemonLabel.stories":["./frontend/src/lib/lemon-ui/LemonLabel/LemonLabel.stories.tsx",60518],"./lib/lemon-ui/LemonLabel/LemonLabel.stories.tsx":["./frontend/src/lib/lemon-ui/LemonLabel/LemonLabel.stories.tsx",60518],"./lib/lemon-ui/LemonMarkdown/LemonMarkdown.stories":["./frontend/src/lib/lemon-ui/LemonMarkdown/LemonMarkdown.stories.tsx",29456],"./lib/lemon-ui/LemonMarkdown/LemonMarkdown.stories.tsx":["./frontend/src/lib/lemon-ui/LemonMarkdown/LemonMarkdown.stories.tsx",29456],"./lib/lemon-ui/LemonMenu/LemonMenu.stories":["./frontend/src/lib/lemon-ui/LemonMenu/LemonMenu.stories.tsx",95844],"./lib/lemon-ui/LemonMenu/LemonMenu.stories.tsx":["./frontend/src/lib/lemon-ui/LemonMenu/LemonMenu.stories.tsx",95844],"./lib/lemon-ui/LemonModal/LemonModal.stories":["./frontend/src/lib/lemon-ui/LemonModal/LemonModal.stories.tsx",66646],"./lib/lemon-ui/LemonModal/LemonModal.stories.tsx":["./frontend/src/lib/lemon-ui/LemonModal/LemonModal.stories.tsx",66646],"./lib/lemon-ui/LemonProgress/LemonProgress.stories":["./frontend/src/lib/lemon-ui/LemonProgress/LemonProgress.stories.tsx",52375],"./lib/lemon-ui/LemonProgress/LemonProgress.stories.tsx":["./frontend/src/lib/lemon-ui/LemonProgress/LemonProgress.stories.tsx",52375],"./lib/lemon-ui/LemonProgressCircle/LemonProgressCircle.stories":["./frontend/src/lib/lemon-ui/LemonProgressCircle/LemonProgressCircle.stories.tsx",16498],"./lib/lemon-ui/LemonProgressCircle/LemonProgressCircle.stories.tsx":["./frontend/src/lib/lemon-ui/LemonProgressCircle/LemonProgressCircle.stories.tsx",16498],"./lib/lemon-ui/LemonRadio/LemonRadio.stories":["./frontend/src/lib/lemon-ui/LemonRadio/LemonRadio.stories.tsx",2677],"./lib/lemon-ui/LemonRadio/LemonRadio.stories.tsx":["./frontend/src/lib/lemon-ui/LemonRadio/LemonRadio.stories.tsx",2677],"./lib/lemon-ui/LemonRow/LemonRow.stories":["./frontend/src/lib/lemon-ui/LemonRow/LemonRow.stories.tsx",23708],"./lib/lemon-ui/LemonRow/LemonRow.stories.tsx":["./frontend/src/lib/lemon-ui/LemonRow/LemonRow.stories.tsx",23708],"./lib/lemon-ui/LemonSegmentedButton/LemonSegmentedButton.stories":["./frontend/src/lib/lemon-ui/LemonSegmentedButton/LemonSegmentedButton.stories.tsx",78334],"./lib/lemon-ui/LemonSegmentedButton/LemonSegmentedButton.stories.tsx":["./frontend/src/lib/lemon-ui/LemonSegmentedButton/LemonSegmentedButton.stories.tsx",78334],"./lib/lemon-ui/LemonSelect/LemonSelect.stories":["./frontend/src/lib/lemon-ui/LemonSelect/LemonSelect.stories.tsx",57354],"./lib/lemon-ui/LemonSelect/LemonSelect.stories.tsx":["./frontend/src/lib/lemon-ui/LemonSelect/LemonSelect.stories.tsx",57354],"./lib/lemon-ui/LemonSkeleton/LemonSkeleton.stories":["./frontend/src/lib/lemon-ui/LemonSkeleton/LemonSkeleton.stories.tsx",56428],"./lib/lemon-ui/LemonSkeleton/LemonSkeleton.stories.tsx":["./frontend/src/lib/lemon-ui/LemonSkeleton/LemonSkeleton.stories.tsx",56428],"./lib/lemon-ui/LemonSlider/LemonSlider.stories":["./frontend/src/lib/lemon-ui/LemonSlider/LemonSlider.stories.tsx",51554],"./lib/lemon-ui/LemonSlider/LemonSlider.stories.tsx":["./frontend/src/lib/lemon-ui/LemonSlider/LemonSlider.stories.tsx",51554],"./lib/lemon-ui/LemonSnack/LemonSnack.stories":["./frontend/src/lib/lemon-ui/LemonSnack/LemonSnack.stories.tsx",64014],"./lib/lemon-ui/LemonSnack/LemonSnack.stories.tsx":["./frontend/src/lib/lemon-ui/LemonSnack/LemonSnack.stories.tsx",64014],"./lib/lemon-ui/LemonSwitch/LemonSwitch.stories":["./frontend/src/lib/lemon-ui/LemonSwitch/LemonSwitch.stories.tsx",80844],"./lib/lemon-ui/LemonSwitch/LemonSwitch.stories.tsx":["./frontend/src/lib/lemon-ui/LemonSwitch/LemonSwitch.stories.tsx",80844],"./lib/lemon-ui/LemonTable/LemonTable.stories":["./frontend/src/lib/lemon-ui/LemonTable/LemonTable.stories.tsx",12398],"./lib/lemon-ui/LemonTable/LemonTable.stories.tsx":["./frontend/src/lib/lemon-ui/LemonTable/LemonTable.stories.tsx",12398],"./lib/lemon-ui/LemonTabs/LemonTabs.stories":["./frontend/src/lib/lemon-ui/LemonTabs/LemonTabs.stories.tsx",82821],"./lib/lemon-ui/LemonTabs/LemonTabs.stories.tsx":["./frontend/src/lib/lemon-ui/LemonTabs/LemonTabs.stories.tsx",82821],"./lib/lemon-ui/LemonTag/LemonTag.stories":["./frontend/src/lib/lemon-ui/LemonTag/LemonTag.stories.tsx",81809],"./lib/lemon-ui/LemonTag/LemonTag.stories.tsx":["./frontend/src/lib/lemon-ui/LemonTag/LemonTag.stories.tsx",81809],"./lib/lemon-ui/LemonTextArea/LemonTextArea.stories":["./frontend/src/lib/lemon-ui/LemonTextArea/LemonTextArea.stories.tsx",19801],"./lib/lemon-ui/LemonTextArea/LemonTextArea.stories.tsx":["./frontend/src/lib/lemon-ui/LemonTextArea/LemonTextArea.stories.tsx",19801],"./lib/lemon-ui/LemonToast/LemonToast.stories":["./frontend/src/lib/lemon-ui/LemonToast/LemonToast.stories.tsx",50962],"./lib/lemon-ui/LemonToast/LemonToast.stories.tsx":["./frontend/src/lib/lemon-ui/LemonToast/LemonToast.stories.tsx",50962],"./lib/lemon-ui/Lettermark/Lettermark.stories":["./frontend/src/lib/lemon-ui/Lettermark/Lettermark.stories.tsx",74973],"./lib/lemon-ui/Lettermark/Lettermark.stories.tsx":["./frontend/src/lib/lemon-ui/Lettermark/Lettermark.stories.tsx",74973],"./lib/lemon-ui/Link/Link.stories":["./frontend/src/lib/lemon-ui/Link/Link.stories.tsx",69106],"./lib/lemon-ui/Link/Link.stories.tsx":["./frontend/src/lib/lemon-ui/Link/Link.stories.tsx",69106],"./lib/lemon-ui/PaginationControl/PaginationControl.stories":["./frontend/src/lib/lemon-ui/PaginationControl/PaginationControl.stories.tsx",18587],"./lib/lemon-ui/PaginationControl/PaginationControl.stories.tsx":["./frontend/src/lib/lemon-ui/PaginationControl/PaginationControl.stories.tsx",18587],"./lib/lemon-ui/Popover/Popover.stories":["./frontend/src/lib/lemon-ui/Popover/Popover.stories.tsx",28089],"./lib/lemon-ui/Popover/Popover.stories.tsx":["./frontend/src/lib/lemon-ui/Popover/Popover.stories.tsx",28089],"./lib/lemon-ui/ProfilePicture/ProfileBubbles.stories":["./frontend/src/lib/lemon-ui/ProfilePicture/ProfileBubbles.stories.tsx",48379],"./lib/lemon-ui/ProfilePicture/ProfileBubbles.stories.tsx":["./frontend/src/lib/lemon-ui/ProfilePicture/ProfileBubbles.stories.tsx",48379],"./lib/lemon-ui/Spinner/Spinner.stories":["./frontend/src/lib/lemon-ui/Spinner/Spinner.stories.tsx",92168],"./lib/lemon-ui/Spinner/Spinner.stories.tsx":["./frontend/src/lib/lemon-ui/Spinner/Spinner.stories.tsx",92168],"./lib/lemon-ui/Splotch/Splotch.stories":["./frontend/src/lib/lemon-ui/Splotch/Splotch.stories.tsx",14989],"./lib/lemon-ui/Splotch/Splotch.stories.tsx":["./frontend/src/lib/lemon-ui/Splotch/Splotch.stories.tsx",14989],"./lib/lemon-ui/UploadedLogo/UploadedLogo.stories":["./frontend/src/lib/lemon-ui/UploadedLogo/UploadedLogo.stories.tsx",24378],"./lib/lemon-ui/UploadedLogo/UploadedLogo.stories.tsx":["./frontend/src/lib/lemon-ui/UploadedLogo/UploadedLogo.stories.tsx",24378],"./lib/lemon-ui/colors.stories":["./frontend/src/lib/lemon-ui/colors.stories.tsx",57297],"./lib/lemon-ui/colors.stories.tsx":["./frontend/src/lib/lemon-ui/colors.stories.tsx",57297],"./lib/lemon-ui/icons/icons.stories":["./frontend/src/lib/lemon-ui/icons/icons.stories.tsx",28462],"./lib/lemon-ui/icons/icons.stories.tsx":["./frontend/src/lib/lemon-ui/icons/icons.stories.tsx",28462],"./lib/lemon-ui/icons/icons3000.stories":["./frontend/src/lib/lemon-ui/icons/icons3000.stories.tsx",77309],"./lib/lemon-ui/icons/icons3000.stories.tsx":["./frontend/src/lib/lemon-ui/icons/icons3000.stories.tsx",77309],"./queries/nodes/DataNode/DataNode.stories":["./frontend/src/queries/nodes/DataNode/DataNode.stories.tsx",89290,71059],"./queries/nodes/DataNode/DataNode.stories.tsx":["./frontend/src/queries/nodes/DataNode/DataNode.stories.tsx",89290,71059],"./queries/nodes/DataTable/DataTable.stories":["./frontend/src/queries/nodes/DataTable/DataTable.stories.tsx",89290,44214],"./queries/nodes/DataTable/DataTable.stories.tsx":["./frontend/src/queries/nodes/DataTable/DataTable.stories.tsx",89290,44214],"./queries/nodes/InsightViz/PropertyGroupFilters/AndOrFilterSelect.stories":["./frontend/src/queries/nodes/InsightViz/PropertyGroupFilters/AndOrFilterSelect.stories.tsx",48419],"./queries/nodes/InsightViz/PropertyGroupFilters/AndOrFilterSelect.stories.tsx":["./frontend/src/queries/nodes/InsightViz/PropertyGroupFilters/AndOrFilterSelect.stories.tsx",48419],"./scenes/PreflightCheck/PreflightCheck.stories":["./frontend/src/scenes/PreflightCheck/PreflightCheck.stories.tsx",38396],"./scenes/PreflightCheck/PreflightCheck.stories.tsx":["./frontend/src/scenes/PreflightCheck/PreflightCheck.stories.tsx",38396],"./scenes/Unsubscribe/Unsubscribe.stories":["./frontend/src/scenes/Unsubscribe/Unsubscribe.stories.tsx",14047],"./scenes/Unsubscribe/Unsubscribe.stories.tsx":["./frontend/src/scenes/Unsubscribe/Unsubscribe.stories.tsx",14047],"./scenes/actions/Action.stories":["./frontend/src/scenes/actions/Action.stories.tsx",92412],"./scenes/actions/Action.stories.tsx":["./frontend/src/scenes/actions/Action.stories.tsx",92412],"./scenes/activity/explore/Events.stories":["./frontend/src/scenes/activity/explore/Events.stories.tsx",23046],"./scenes/activity/explore/Events.stories.tsx":["./frontend/src/scenes/activity/explore/Events.stories.tsx",23046],"./scenes/annotations/Annotations.stories":["./frontend/src/scenes/annotations/Annotations.stories.tsx",87121],"./scenes/annotations/Annotations.stories.tsx":["./frontend/src/scenes/annotations/Annotations.stories.tsx",87121],"./scenes/authentication/InviteSignup.stories":["./frontend/src/scenes/authentication/InviteSignup.stories.tsx",41694],"./scenes/authentication/InviteSignup.stories.tsx":["./frontend/src/scenes/authentication/InviteSignup.stories.tsx",41694],"./scenes/authentication/Login.stories":["./frontend/src/scenes/authentication/Login.stories.tsx",60711],"./scenes/authentication/Login.stories.tsx":["./frontend/src/scenes/authentication/Login.stories.tsx",60711],"./scenes/authentication/PasswordReset.stories":["./frontend/src/scenes/authentication/PasswordReset.stories.tsx",16680],"./scenes/authentication/PasswordReset.stories.tsx":["./frontend/src/scenes/authentication/PasswordReset.stories.tsx",16680],"./scenes/authentication/PasswordResetComplete.stories":["./frontend/src/scenes/authentication/PasswordResetComplete.stories.tsx",46925],"./scenes/authentication/PasswordResetComplete.stories.tsx":["./frontend/src/scenes/authentication/PasswordResetComplete.stories.tsx",46925],"./scenes/authentication/signup/Signup.stories":["./frontend/src/scenes/authentication/signup/Signup.stories.tsx",11854],"./scenes/authentication/signup/Signup.stories.tsx":["./frontend/src/scenes/authentication/signup/Signup.stories.tsx",11854],"./scenes/authentication/signup/verify-email/VerifyEmail.stories":["./frontend/src/scenes/authentication/signup/verify-email/VerifyEmail.stories.tsx",9416],"./scenes/authentication/signup/verify-email/VerifyEmail.stories.tsx":["./frontend/src/scenes/authentication/signup/verify-email/VerifyEmail.stories.tsx",9416],"./scenes/billing/Billing.stories":["./frontend/src/scenes/billing/Billing.stories.tsx",32375],"./scenes/billing/Billing.stories.tsx":["./frontend/src/scenes/billing/Billing.stories.tsx",32375],"./scenes/billing/BillingProduct.stories":["./frontend/src/scenes/billing/BillingProduct.stories.tsx",22244],"./scenes/billing/BillingProduct.stories.tsx":["./frontend/src/scenes/billing/BillingProduct.stories.tsx",22244],"./scenes/cohorts/CohortFilters/CohortCriteriaRowBuilder.stories":["./frontend/src/scenes/cohorts/CohortFilters/CohortCriteriaRowBuilder.stories.tsx",31340],"./scenes/cohorts/CohortFilters/CohortCriteriaRowBuilder.stories.tsx":["./frontend/src/scenes/cohorts/CohortFilters/CohortCriteriaRowBuilder.stories.tsx",31340],"./scenes/cohorts/CohortFilters/CohortNumberField.stories":["./frontend/src/scenes/cohorts/CohortFilters/CohortNumberField.stories.tsx",91736],"./scenes/cohorts/CohortFilters/CohortNumberField.stories.tsx":["./frontend/src/scenes/cohorts/CohortFilters/CohortNumberField.stories.tsx",91736],"./scenes/cohorts/CohortFilters/CohortPersonPropertiesValuesField.stories":["./frontend/src/scenes/cohorts/CohortFilters/CohortPersonPropertiesValuesField.stories.tsx",79799],"./scenes/cohorts/CohortFilters/CohortPersonPropertiesValuesField.stories.tsx":["./frontend/src/scenes/cohorts/CohortFilters/CohortPersonPropertiesValuesField.stories.tsx",79799],"./scenes/cohorts/CohortFilters/CohortSelectorField.stories":["./frontend/src/scenes/cohorts/CohortFilters/CohortSelectorField.stories.tsx",36795],"./scenes/cohorts/CohortFilters/CohortSelectorField.stories.tsx":["./frontend/src/scenes/cohorts/CohortFilters/CohortSelectorField.stories.tsx",36795],"./scenes/cohorts/CohortFilters/CohortTaxonomicField.stories":["./frontend/src/scenes/cohorts/CohortFilters/CohortTaxonomicField.stories.tsx",97562],"./scenes/cohorts/CohortFilters/CohortTaxonomicField.stories.tsx":["./frontend/src/scenes/cohorts/CohortFilters/CohortTaxonomicField.stories.tsx",97562],"./scenes/cohorts/CohortFilters/CohortTextField.stories":["./frontend/src/scenes/cohorts/CohortFilters/CohortTextField.stories.tsx",29179],"./scenes/cohorts/CohortFilters/CohortTextField.stories.tsx":["./frontend/src/scenes/cohorts/CohortFilters/CohortTextField.stories.tsx",29179],"./scenes/dashboard/DashboardInsightCardLegend.stories":["./frontend/src/scenes/dashboard/DashboardInsightCardLegend.stories.tsx",48780],"./scenes/dashboard/DashboardInsightCardLegend.stories.tsx":["./frontend/src/scenes/dashboard/DashboardInsightCardLegend.stories.tsx",48780],"./scenes/dashboard/DashboardTemplateEditor.stories":["./frontend/src/scenes/dashboard/DashboardTemplateEditor.stories.tsx",47858],"./scenes/dashboard/DashboardTemplateEditor.stories.tsx":["./frontend/src/scenes/dashboard/DashboardTemplateEditor.stories.tsx",47858],"./scenes/dashboard/Dashboards.stories":["./frontend/src/scenes/dashboard/Dashboards.stories.tsx",29749,84851],"./scenes/dashboard/Dashboards.stories.tsx":["./frontend/src/scenes/dashboard/Dashboards.stories.tsx",29749,84851],"./scenes/data-management/DataManagementScene.stories":["./frontend/src/scenes/data-management/DataManagementScene.stories.tsx",82250],"./scenes/data-management/DataManagementScene.stories.tsx":["./frontend/src/scenes/data-management/DataManagementScene.stories.tsx",82250],"./scenes/early-access-features/EarlyAccessFeatures.stories":["./frontend/src/scenes/early-access-features/EarlyAccessFeatures.stories.tsx",57195],"./scenes/early-access-features/EarlyAccessFeatures.stories.tsx":["./frontend/src/scenes/early-access-features/EarlyAccessFeatures.stories.tsx",57195],"./scenes/error-tracking/ErrorTracking.stories":["./frontend/src/scenes/error-tracking/ErrorTracking.stories.tsx",91480],"./scenes/error-tracking/ErrorTracking.stories.tsx":["./frontend/src/scenes/error-tracking/ErrorTracking.stories.tsx",91480],"./scenes/experiments/Experiment.stories":["./frontend/src/scenes/experiments/Experiment.stories.tsx",63486],"./scenes/experiments/Experiment.stories.tsx":["./frontend/src/scenes/experiments/Experiment.stories.tsx",63486],"./scenes/feature-flags/FeatureFlagCodeInstructions.stories":["./frontend/src/scenes/feature-flags/FeatureFlagCodeInstructions.stories.tsx",86983],"./scenes/feature-flags/FeatureFlagCodeInstructions.stories.tsx":["./frontend/src/scenes/feature-flags/FeatureFlagCodeInstructions.stories.tsx",86983],"./scenes/feature-flags/FeatureFlags.stories":["./frontend/src/scenes/feature-flags/FeatureFlags.stories.tsx",16023],"./scenes/feature-flags/FeatureFlags.stories.tsx":["./frontend/src/scenes/feature-flags/FeatureFlags.stories.tsx",16023],"./scenes/funnels/FunnelTooltip.stories":["./frontend/src/scenes/funnels/FunnelTooltip.stories.tsx",49136],"./scenes/funnels/FunnelTooltip.stories.tsx":["./frontend/src/scenes/funnels/FunnelTooltip.stories.tsx",49136],"./scenes/heatmaps/HeatmapsBrowser.stories":["./frontend/src/scenes/heatmaps/HeatmapsBrowser.stories.tsx",86721],"./scenes/heatmaps/HeatmapsBrowser.stories.tsx":["./frontend/src/scenes/heatmaps/HeatmapsBrowser.stories.tsx",86721],"./scenes/insights/EmptyStates/EmptyStates.stories":["./frontend/src/scenes/insights/EmptyStates/EmptyStates.stories.tsx",17723],"./scenes/insights/EmptyStates/EmptyStates.stories.tsx":["./frontend/src/scenes/insights/EmptyStates/EmptyStates.stories.tsx",17723],"./scenes/insights/InsightTooltip/InsightTooltip.stories":["./frontend/src/scenes/insights/InsightTooltip/InsightTooltip.stories.tsx",40961],"./scenes/insights/InsightTooltip/InsightTooltip.stories.tsx":["./frontend/src/scenes/insights/InsightTooltip/InsightTooltip.stories.tsx",40961],"./scenes/insights/Insights.stories":["./frontend/src/scenes/insights/Insights.stories.tsx",18146,53342,26299,74653,15778],"./scenes/insights/Insights.stories.tsx":["./frontend/src/scenes/insights/Insights.stories.tsx",18146,53342,26299,74653,15778],"./scenes/insights/filters/ActionFilter/ActionFilter.stories":["./frontend/src/scenes/insights/filters/ActionFilter/ActionFilter.stories.tsx",53342,6396],"./scenes/insights/filters/ActionFilter/ActionFilter.stories.tsx":["./frontend/src/scenes/insights/filters/ActionFilter/ActionFilter.stories.tsx",53342,6396],"./scenes/insights/views/BoldNumber/Textfit.stories":["./frontend/src/scenes/insights/views/BoldNumber/Textfit.stories.tsx",5180],"./scenes/insights/views/BoldNumber/Textfit.stories.tsx":["./frontend/src/scenes/insights/views/BoldNumber/Textfit.stories.tsx",5180],"./scenes/insights/views/Funnels/FunnelCorrelationTable.stories":["./frontend/src/scenes/insights/views/Funnels/FunnelCorrelationTable.stories.tsx",16495],"./scenes/insights/views/Funnels/FunnelCorrelationTable.stories.tsx":["./frontend/src/scenes/insights/views/Funnels/FunnelCorrelationTable.stories.tsx",16495],"./scenes/insights/views/Funnels/FunnelPropertyCorrelationTable.stories":["./frontend/src/scenes/insights/views/Funnels/FunnelPropertyCorrelationTable.stories.tsx",38639],"./scenes/insights/views/Funnels/FunnelPropertyCorrelationTable.stories.tsx":["./frontend/src/scenes/insights/views/Funnels/FunnelPropertyCorrelationTable.stories.tsx",38639],"./scenes/insights/views/InsightsTable/InsightsTable.stories":["./frontend/src/scenes/insights/views/InsightsTable/InsightsTable.stories.tsx",53342,50991],"./scenes/insights/views/InsightsTable/InsightsTable.stories.tsx":["./frontend/src/scenes/insights/views/InsightsTable/InsightsTable.stories.tsx",53342,50991],"./scenes/max/Max.stories":["./frontend/src/scenes/max/Max.stories.tsx",73086],"./scenes/max/Max.stories.tsx":["./frontend/src/scenes/max/Max.stories.tsx",73086],"./scenes/notebooks/Notebook/Notebook.stories":["./frontend/src/scenes/notebooks/Notebook/Notebook.stories.tsx",1808],"./scenes/notebooks/Notebook/Notebook.stories.tsx":["./frontend/src/scenes/notebooks/Notebook/Notebook.stories.tsx",1808],"./scenes/notebooks/NotebookSelectButton/NotebookSelectButton.stories":["./frontend/src/scenes/notebooks/NotebookSelectButton/NotebookSelectButton.stories.tsx",93070],"./scenes/notebooks/NotebookSelectButton/NotebookSelectButton.stories.tsx":["./frontend/src/scenes/notebooks/NotebookSelectButton/NotebookSelectButton.stories.tsx",93070],"./scenes/onboarding/Onboarding.stories":["./frontend/src/scenes/onboarding/Onboarding.stories.tsx",6875,36501],"./scenes/onboarding/Onboarding.stories.tsx":["./frontend/src/scenes/onboarding/Onboarding.stories.tsx",6875,36501],"./scenes/persons-management/PersonsManagementScene.stories":["./frontend/src/scenes/persons-management/PersonsManagementScene.stories.tsx",68330],"./scenes/persons-management/PersonsManagementScene.stories.tsx":["./frontend/src/scenes/persons-management/PersonsManagementScene.stories.tsx",68330],"./scenes/pipeline/Pipeline.stories":["./frontend/src/scenes/pipeline/Pipeline.stories.tsx",92991],"./scenes/pipeline/Pipeline.stories.tsx":["./frontend/src/scenes/pipeline/Pipeline.stories.tsx",92991],"./scenes/products/Products.stories":["./frontend/src/scenes/products/Products.stories.tsx",16116],"./scenes/products/Products.stories.tsx":["./frontend/src/scenes/products/Products.stories.tsx",16116],"./scenes/project-homepage/ProjectHomepage.stories":["./frontend/src/scenes/project-homepage/ProjectHomepage.stories.tsx",29749,82723],"./scenes/project-homepage/ProjectHomepage.stories.tsx":["./frontend/src/scenes/project-homepage/ProjectHomepage.stories.tsx",29749,82723],"./scenes/project-homepage/WatchNextList.stories":["./frontend/src/scenes/project-homepage/WatchNextList.stories.tsx",52425],"./scenes/project-homepage/WatchNextList.stories.tsx":["./frontend/src/scenes/project-homepage/WatchNextList.stories.tsx",52425],"./scenes/saved-insights/SavedInsights.stories":["./frontend/src/scenes/saved-insights/SavedInsights.stories.tsx",26299,26657],"./scenes/saved-insights/SavedInsights.stories.tsx":["./frontend/src/scenes/saved-insights/SavedInsights.stories.tsx",26299,26657],"./scenes/session-recordings/SessionsRecordings-player-failure.stories":["./frontend/src/scenes/session-recordings/SessionsRecordings-player-failure.stories.tsx",23237,34377],"./scenes/session-recordings/SessionsRecordings-player-failure.stories.tsx":["./frontend/src/scenes/session-recordings/SessionsRecordings-player-failure.stories.tsx",23237,34377],"./scenes/session-recordings/SessionsRecordings-player-success.stories":["./frontend/src/scenes/session-recordings/SessionsRecordings-player-success.stories.tsx",23237,38383],"./scenes/session-recordings/SessionsRecordings-player-success.stories.tsx":["./frontend/src/scenes/session-recordings/SessionsRecordings-player-success.stories.tsx",23237,38383],"./scenes/session-recordings/SessionsRecordings-playlist-listing.stories":["./frontend/src/scenes/session-recordings/SessionsRecordings-playlist-listing.stories.tsx",70138],"./scenes/session-recordings/SessionsRecordings-playlist-listing.stories.tsx":["./frontend/src/scenes/session-recordings/SessionsRecordings-playlist-listing.stories.tsx",70138],"./scenes/session-recordings/apm/playerInspector/ItemPerformanceEvent.stories":["./frontend/src/scenes/session-recordings/apm/playerInspector/ItemPerformanceEvent.stories.tsx",739],"./scenes/session-recordings/apm/playerInspector/ItemPerformanceEvent.stories.tsx":["./frontend/src/scenes/session-recordings/apm/playerInspector/ItemPerformanceEvent.stories.tsx",739],"./scenes/session-recordings/player/inspector/components/ItemComment.stories":["./frontend/src/scenes/session-recordings/player/inspector/components/ItemComment.stories.tsx",70904],"./scenes/session-recordings/player/inspector/components/ItemComment.stories.tsx":["./frontend/src/scenes/session-recordings/player/inspector/components/ItemComment.stories.tsx",70904],"./scenes/session-recordings/player/inspector/components/ItemEvent.stories":["./frontend/src/scenes/session-recordings/player/inspector/components/ItemEvent.stories.tsx",69269],"./scenes/session-recordings/player/inspector/components/ItemEvent.stories.tsx":["./frontend/src/scenes/session-recordings/player/inspector/components/ItemEvent.stories.tsx",69269],"./scenes/session-recordings/player/inspector/components/NavigationItem.stories":["./frontend/src/scenes/session-recordings/player/inspector/components/NavigationItem.stories.tsx",98065],"./scenes/session-recordings/player/inspector/components/NavigationItem.stories.tsx":["./frontend/src/scenes/session-recordings/player/inspector/components/NavigationItem.stories.tsx",98065],"./scenes/session-recordings/player/inspector/components/Timing/NetworkRequestTiming.stories":["./frontend/src/scenes/session-recordings/player/inspector/components/Timing/NetworkRequestTiming.stories.tsx",16115],"./scenes/session-recordings/player/inspector/components/Timing/NetworkRequestTiming.stories.tsx":["./frontend/src/scenes/session-recordings/player/inspector/components/Timing/NetworkRequestTiming.stories.tsx",16115],"./scenes/session-recordings/playlist/SessionRecordingPreview.stories":["./frontend/src/scenes/session-recordings/playlist/SessionRecordingPreview.stories.tsx",74710],"./scenes/session-recordings/playlist/SessionRecordingPreview.stories.tsx":["./frontend/src/scenes/session-recordings/playlist/SessionRecordingPreview.stories.tsx",74710],"./scenes/settings/SettingsScene.stories":["./frontend/src/scenes/settings/SettingsScene.stories.tsx",94678],"./scenes/settings/SettingsScene.stories.tsx":["./frontend/src/scenes/settings/SettingsScene.stories.tsx",94678],"./scenes/settings/environment/SlackIntegration.stories":["./frontend/src/scenes/settings/environment/SlackIntegration.stories.tsx",71251],"./scenes/settings/environment/SlackIntegration.stories.tsx":["./frontend/src/scenes/settings/environment/SlackIntegration.stories.tsx",71251],"./scenes/settings/organization/Invites.stories":["./frontend/src/scenes/settings/organization/Invites.stories.tsx",72134],"./scenes/settings/organization/Invites.stories.tsx":["./frontend/src/scenes/settings/organization/Invites.stories.tsx",72134],"./scenes/settings/organization/VerifiedDomains/SSOSelect.stories":["./frontend/src/scenes/settings/organization/VerifiedDomains/SSOSelect.stories.tsx",69700],"./scenes/settings/organization/VerifiedDomains/SSOSelect.stories.tsx":["./frontend/src/scenes/settings/organization/VerifiedDomains/SSOSelect.stories.tsx",69700],"./scenes/surveys/Surveys.stories":["./frontend/src/scenes/surveys/Surveys.stories.tsx",10749],"./scenes/surveys/Surveys.stories.tsx":["./frontend/src/scenes/surveys/Surveys.stories.tsx",10749],"./scenes/trends/persons-modal/PersonsModal.stories":["./frontend/src/scenes/trends/persons-modal/PersonsModal.stories.tsx",95866],"./scenes/trends/persons-modal/PersonsModal.stories.tsx":["./frontend/src/scenes/trends/persons-modal/PersonsModal.stories.tsx",95866],"./scenes/web-analytics/SessionAttributionExplorer/sessionAttributionExplorer.stories":["./frontend/src/scenes/web-analytics/SessionAttributionExplorer/sessionAttributionExplorer.stories.tsx",59001],"./scenes/web-analytics/SessionAttributionExplorer/sessionAttributionExplorer.stories.tsx":["./frontend/src/scenes/web-analytics/SessionAttributionExplorer/sessionAttributionExplorer.stories.tsx",59001],"./stories/Hello.stories.mdx":["./frontend/src/stories/Hello.stories.mdx",20527],"./stories/How to add tabs to a scene.stories.mdx":["./frontend/src/stories/How to add tabs to a scene.stories.mdx",8056],"./stories/How to build a form.stories.mdx":["./frontend/src/stories/How to build a form.stories.mdx",92029],"./stories/How to build a scene.stories.mdx":["./frontend/src/stories/How to build a scene.stories.mdx",73570],"./stories/How to create stories.stories.mdx":["./frontend/src/stories/How to create stories.stories.mdx",17549],"./stories/How to mock requests.stories.mdx":["./frontend/src/stories/How to mock requests.stories.mdx",79960],"./stories/How to use components.stories.mdx":["./frontend/src/stories/How to use components.stories.mdx",23384],"./stories/Lemon UI.stories.mdx":["./frontend/src/stories/Lemon UI.stories.mdx",32728],"./stories/Missing components.stories.mdx":["./frontend/src/stories/Missing components.stories.mdx",43342],"./stories/Missing scenes.stories.mdx":["./frontend/src/stories/Missing scenes.stories.mdx",40892],"./toolbar/Toolbar.stories":["./frontend/src/toolbar/Toolbar.stories.tsx",19651,75576,45021],"./toolbar/Toolbar.stories.tsx":["./frontend/src/toolbar/Toolbar.stories.tsx",19651,75576,45021]};function webpackAsyncContext(req){if(!__webpack_require__.o(map,req))return Promise.resolve().then(()=>{var e=Error("Cannot find module '"+req+"'");throw e.code="MODULE_NOT_FOUND",e});var ids=map[req],id=ids[0];return Promise.all(ids.slice(1).map(__webpack_require__.e)).then(()=>__webpack_require__(id))}webpackAsyncContext.keys=()=>Object.keys(map),webpackAsyncContext.id="./frontend/src lazy recursive ^\\.\\/.*$ include: (?:\\/frontend\\/src(?:\\/(?%21\\.)(?:(?:(?%21(?:^%7C\\/)\\.).)*?)\\/%7C\\/%7C$)(?%21\\.)(?=.)[^/]*?\\.stories\\.(js%7Cjsx%7Cts%7Ctsx%7Cmdx))$",module.exports=webpackAsyncContext},"./.storybook/preview.tsx":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{decorators:()=>decorators,default:()=>_storybook_preview,parameters:()=>parameters}),__webpack_require__("./frontend/src/styles/index.tsx");var config,dist=__webpack_require__("./node_modules/.pnpm/@storybook+blocks@7.6.4_@types+react-dom@18.2.14_@types+react@17.0.52_react-dom@18.2.0_react@18.2.0/node_modules/@storybook/blocks/dist/index.mjs"),browser=__webpack_require__("./frontend/src/mocks/browser.tsx"),esm_exports=__webpack_require__("./node_modules/.pnpm/@sentry+core@7.112.1/node_modules/@sentry/core/esm/exports.js"),sdk=__webpack_require__("./node_modules/.pnpm/@sentry+react@7.112.1_react@18.2.0/node_modules/@sentry/react/esm/sdk.js"),constants=__webpack_require__("./frontend/src/lib/constants.tsx"),dist_module=__webpack_require__("./node_modules/.pnpm/posthog-js@1.177.0/node_modules/posthog-js/dist/module.js"),features=__webpack_require__("./frontend/src/mocks/features.ts"),node_modules_history=__webpack_require__("./node_modules/.pnpm/history@5.3.0/node_modules/history/index.js"),initKea=__webpack_require__("./frontend/src/initKea.ts"),lib=__webpack_require__("./node_modules/.pnpm/kea-router@3.2.0_kea@3.1.5/node_modules/kea-router/lib/index.js"),index_esm=__webpack_require__("./node_modules/.pnpm/kea@3.1.5_react@18.2.0/node_modules/kea/lib/index.esm.js"),react=__webpack_require__("./node_modules/.pnpm/react@18.2.0/node_modules/react/index.js"),App=__webpack_require__("./frontend/src/scenes/App.tsx"),featureFlagLogic=__webpack_require__("./frontend/src/lib/logic/featureFlagLogic.ts"),teamLogic=__webpack_require__("./frontend/src/scenes/teamLogic.tsx"),userLogic=__webpack_require__("./frontend/src/scenes/userLogic.ts"),projectLogic=__webpack_require__("./frontend/src/scenes/projectLogic.ts"),jsx_runtime=__webpack_require__("./node_modules/.pnpm/react@18.2.0/node_modules/react/jsx-runtime.js");function KeaStory(_ref){let{children}=_ref,[didReset,setDidReset]=(0,react.useState)(!1);return(0,react.useEffect)(()=>{didReset||(function(){browser.KK.resetHandlers();let history=(0,node_modules_history.PP)({});history.pushState=history.push,history.replaceState=history.replace,(0,initKea.J1)({routerLocation:history.location,routerHistory:history}),featureFlagLogic.h.mount(),teamLogic.H.mount(),projectLogic.K.mount(),userLogic.userLogic.mount(),lib.router.mount();let{store}=(0,index_esm.getContext)();store.dispatch({type:"storybook init"})}(),setDidReset(!0))},[didReset]),didReset?children||(0,jsx_runtime.jsx)(App.g,{}):null}var mockdate=__webpack_require__("./node_modules/.pnpm/mockdate@3.0.5/node_modules/mockdate/lib/mockdate.js"),mockdate_default=__webpack_require__.n(mockdate),handlers=__webpack_require__("./frontend/src/mocks/handlers.ts"),apiHost=__webpack_require__("./frontend/src/lib/utils/apiHost.ts"),api_mock=__webpack_require__("./frontend/src/lib/api.mock.ts");browser.KK.start({quiet:!0,onUnhandledRequest(request,print){["/images/"].some(path=>request.url.pathname.startsWith(path))||print.warning()}}),window.__mockServiceWorker=browser.KK,window.POSTHOG_APP_CONTEXT={anonymous:!1,current_team:api_mock.k3,current_project:api_mock.w8,current_user:void 0,default_event_name:"$pageview",persisted_feature_flags:[],commit_sha:void 0,preflight:null,switched_team:null},window.JS_POSTHOG_HOST=(0,apiHost.Y)(),window.JS_POSTHOG_API_KEY?dist_module.ZP.init(window.JS_POSTHOG_API_KEY,(config={opt_out_useragent_filter:"localhost"===window.location.hostname,api_host:window.JS_POSTHOG_HOST,ui_host:window.JS_POSTHOG_UI_HOST,rageclick:!0,persistence:"localStorage+cookie",bootstrap:window.POSTHOG_USER_IDENTITY_WITH_FLAGS?window.POSTHOG_USER_IDENTITY_WITH_FLAGS:{},opt_in_site_apps:!0,api_transport:"fetch",loaded:loadedInstance=>{loadedInstance.sessionRecording&&(loadedInstance.sessionRecording._forceAllowLocalhostNetworkCapture=!0),window.IMPERSONATED_SESSION?(loadedInstance.sessionManager?.resetSessionId(),loadedInstance.opt_out_capturing()):loadedInstance.opt_in_capturing();let Cypress=window.Cypress;Cypress&&Object.entries(Cypress.env()).forEach(_ref=>{let[key,value]=_ref;key.startsWith("POSTHOG_PROPERTY_")&&loadedInstance.register_for_session({[key.replace("POSTHOG_PROPERTY_","E2E_TESTING_").toLowerCase()]:value})});let shouldResetSessionOnLoad=loadedInstance.getFeatureFlag(constants.y8.SESSION_RESET_ON_LOAD);shouldResetSessionOnLoad&&loadedInstance.sessionManager?.resetSessionId(),window.posthog=loadedInstance},scroll_root_selector:["main","html"],autocapture:{capture_copied_text:!0},person_profiles:"always",_onCapture:window._cypress_posthog_captures?(_,event)=>window._cypress_posthog_captures.push(event):void 0},window.SENTRY_DSN&&(config.on_xhr_error=failedRequest=>{let status=failedRequest.status,statusText=failedRequest.statusText||"no status text in error";esm_exports.Tb(Error(`Failed with status ${status} while sending to PostHog. Message: ${statusText}`),{tags:{status,statusText}})}),config)):dist_module.ZP.init("fake token",{autocapture:!1,loaded:function(ph){ph.opt_out_capturing()}}),window.SENTRY_DSN&&sdk.S({dsn:window.SENTRY_DSN,environment:window.SENTRY_ENVIRONMENT,...location.host.includes("posthog.com")&&{integrations:[new dist_module.ZP.SentryIntegration(dist_module.ZP,"posthog",1899813,void 0,"*")]}});let parameters={actions:{argTypesRegex:"^on[A-Z].*",disabled:!0},controls:{matchers:{color:/(background|color)$/i,date:/Date$/}},options:{showPanel:!1,storySort:{method:"alphabetical",order:["Lemon UI",["Overview","Utilities","Icons"],"Components","Forms",["Field"],"Filters","Layout"]}},viewMode:"docs",docs:{source:{state:"closed"}},msw:{mocks:handlers.jI}},decorators=[Story=>((0,features.y)([]),(0,jsx_runtime.jsx)(KeaStory,{children:(0,jsx_runtime.jsx)(Story,{})})),(Story,_ref)=>{let{parameters}=_ref;return parameters.mockDate?mockdate_default().set(parameters.mockDate):mockdate_default().reset(),(0,jsx_runtime.jsx)(Story,{})},(Story,_ref)=>{let{parameters}=_ref;return parameters.featureFlags&&(0,browser.zt)(parameters.featureFlags),(0,jsx_runtime.jsx)(Story,{})},(Story,context)=>{let theme=context.globals.theme;return document.body.setAttribute("theme","dark"===theme?"dark":"light"),(0,jsx_runtime.jsx)(Story,{})}],_storybook_preview={parameters:{actions:{argTypesRegex:"^on[A-Z].*"},controls:{matchers:{color:/(background|color)$/i,date:/Date$/}},docs:{page:()=>(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[(0,jsx_runtime.jsx)(dist.Dx,{}),(0,jsx_runtime.jsx)(dist.QE,{}),(0,jsx_runtime.jsx)(dist.dk,{}),(0,jsx_runtime.jsx)(dist.sq,{}),(0,jsx_runtime.jsx)(dist.ZX,{}),(0,jsx_runtime.jsx)(dist.fQ,{})]})}},globalTypes:{theme:{description:"",defaultValue:"light",toolbar:{title:"Theme",items:[{value:"light",icon:"sun",title:"Light"},{value:"dark",icon:"moon",title:"Dark"}],dynamicTitle:!0}}}}},"./frontend/@posthog/apps-common/src/index.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{IZ:()=>scenes_persons_PersonDisplay__WEBPACK_IMPORTED_MODULE_4__.I,Tk:()=>scenes_persons_PersonDisplay__WEBPACK_IMPORTED_MODULE_4__.T,hi:()=>api,jk:()=>scenes_urls__WEBPACK_IMPORTED_MODULE_5__.j,rU:()=>lib_lemon_ui_Link__WEBPACK_IMPORTED_MODULE_2__.r,w4:()=>lib_components_TZLabel__WEBPACK_IMPORTED_MODULE_3__.w}),__webpack_require__("./frontend/src/styles/index.tsx"),__webpack_require__("./frontend/src/initKea.ts");var lib_lemon_ui_Link__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./frontend/src/lib/lemon-ui/Link/index.ts"),lib_components_TZLabel__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./frontend/src/lib/components/TZLabel/index.tsx"),scenes_persons_PersonDisplay__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__("./frontend/src/scenes/persons/PersonDisplay.tsx"),scenes_urls__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__("./frontend/src/scenes/urls.ts"),lib_api__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__("./frontend/src/lib/api.ts");let api=lib_api__WEBPACK_IMPORTED_MODULE_6__.ZP},"./frontend/@posthog/lemon-ui/src/index.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{Mo:()=>LemonBadge.M,Vp:()=>LemonBanner.V,Jp:()=>lemon_ui_LemonButton.J,$K:()=>lemon_ui_LemonButton.$,he:()=>LemonCalendarSelect.he,Mi:()=>LemonCard.M,Hw:()=>LemonCheckbox.H,JL:()=>LemonCollapse.J,dn:()=>LemonDialog.d,p2:()=>LemonDivider.p,Qw:()=>LemonDropdown.Q,mH:()=>LemonFileInput.m,DF:()=>LemonInput.D,nt:()=>LemonInputSelect.n,HQ:()=>LemonLabel.H,d6:()=>LemonMenu.d,fQ:()=>LemonModal.f,Qs:()=>LemonRow.Q,P4:()=>LemonSegmentedButton.P,Yv:()=>LemonSelect.Yv,yW:()=>LemonSkeleton.y,LV:()=>LemonSnack.L,f4:()=>LemonSwitch.f,g3:()=>LemonTable.g,TP:()=>LemonTabs.T,oe:()=>LemonTag.o,_V:()=>LemonTextArea._,X7:()=>LemonTextArea.X,_j:()=>LemonWidget._,BR:()=>Lettermark.B,rU:()=>Link.r,R9:()=>PaginationControl.R,J2:()=>lemon_ui_Popover.J2,Sn:()=>lemon_ui_Popover.Sn,YY:()=>ProfilePicture.Y,$j:()=>Spinner.$,t2:()=>Spinner.t,u:()=>Tooltip.u,UJ:()=>LemonToast.U,h0:()=>PaginationControl.h}),__webpack_require__("./frontend/src/styles/global.scss"),__webpack_require__("./frontend/src/lib/lemon-ui/hooks.ts");var injectStylesIntoStyleTag=__webpack_require__("./node_modules/.pnpm/style-loader@2.0.0_webpack@5.88.2/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),injectStylesIntoStyleTag_default=__webpack_require__.n(injectStylesIntoStyleTag),LemonActionableTooltip=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/lemon-ui/LemonActionableTooltip/LemonActionableTooltip.scss"),LemonActionableTooltip_default=__webpack_require__.n(LemonActionableTooltip),options={};options.insert="head",options.singleton=!1,injectStylesIntoStyleTag_default()(LemonActionableTooltip_default(),options),LemonActionableTooltip_default().locals,__webpack_require__("./node_modules/.pnpm/@posthog+icons@0.8.5_react-dom@18.2.0_react@18.2.0/node_modules/@posthog/icons/dist/posthog-icons.es.js"),__webpack_require__("./frontend/src/lib/lemon-ui/icons/index.ts"),__webpack_require__("./frontend/src/lib/lemon-ui/Popover/Popover.tsx"),__webpack_require__("./node_modules/.pnpm/react@18.2.0/node_modules/react/jsx-runtime.js");var LemonBadge=__webpack_require__("./frontend/src/lib/lemon-ui/LemonBadge/index.ts"),LemonBanner=__webpack_require__("./frontend/src/lib/lemon-ui/LemonBanner/index.ts"),lemon_ui_LemonButton=__webpack_require__("./frontend/src/lib/lemon-ui/LemonButton/index.ts");__webpack_require__("./frontend/src/lib/lemon-ui/LemonCalendar/LemonCalendar.tsx");var LemonCalendarSelect=__webpack_require__("./frontend/src/lib/lemon-ui/LemonCalendar/LemonCalendarSelect.tsx");__webpack_require__("./frontend/src/lib/lemon-ui/LemonCalendarRange/LemonCalendarRange.tsx"),__webpack_require__("./frontend/src/lib/lemon-ui/LemonCalendarRange/LemonCalendarRangeInline.tsx");var LemonCard=__webpack_require__("./frontend/src/lib/lemon-ui/LemonCard/LemonCard.tsx"),LemonCheckbox=__webpack_require__("./frontend/src/lib/lemon-ui/LemonCheckbox/index.ts"),LemonCollapse=__webpack_require__("./frontend/src/lib/lemon-ui/LemonCollapse/index.ts"),LemonDialog=__webpack_require__("./frontend/src/lib/lemon-ui/LemonDialog/index.ts"),LemonDivider=__webpack_require__("./frontend/src/lib/lemon-ui/LemonDivider/index.ts"),LemonDropdown=__webpack_require__("./frontend/src/lib/lemon-ui/LemonDropdown/index.ts"),LemonFileInput=__webpack_require__("./frontend/src/lib/lemon-ui/LemonFileInput/index.ts"),LemonInput=__webpack_require__("./frontend/src/lib/lemon-ui/LemonInput/index.ts"),LemonLabel=__webpack_require__("./frontend/src/lib/lemon-ui/LemonLabel/index.ts"),LemonMenu=__webpack_require__("./frontend/src/lib/lemon-ui/LemonMenu/index.ts"),LemonModal=__webpack_require__("./frontend/src/lib/lemon-ui/LemonModal/index.ts"),LemonRow=__webpack_require__("./frontend/src/lib/lemon-ui/LemonRow/index.ts"),LemonSegmentedButton=__webpack_require__("./frontend/src/lib/lemon-ui/LemonSegmentedButton/index.ts"),LemonSelect=__webpack_require__("./frontend/src/lib/lemon-ui/LemonSelect/index.ts"),LemonInputSelect=__webpack_require__("./frontend/src/lib/lemon-ui/LemonInputSelect/index.ts"),LemonSkeleton=__webpack_require__("./frontend/src/lib/lemon-ui/LemonSkeleton/index.ts"),LemonSnack=__webpack_require__("./frontend/src/lib/lemon-ui/LemonSnack/index.ts"),LemonSwitch=__webpack_require__("./frontend/src/lib/lemon-ui/LemonSwitch/index.ts"),LemonTable=__webpack_require__("./frontend/src/lib/lemon-ui/LemonTable/index.ts"),LemonTabs=__webpack_require__("./frontend/src/lib/lemon-ui/LemonTabs/index.ts"),LemonTag=__webpack_require__("./frontend/src/lib/lemon-ui/LemonTag/index.ts"),LemonTextArea=__webpack_require__("./frontend/src/lib/lemon-ui/LemonTextArea/index.ts"),LemonToast=__webpack_require__("./frontend/src/lib/lemon-ui/LemonToast/index.ts"),LemonWidget=__webpack_require__("./frontend/src/lib/lemon-ui/LemonWidget/index.ts"),Lettermark=__webpack_require__("./frontend/src/lib/lemon-ui/Lettermark/index.ts"),Link=__webpack_require__("./frontend/src/lib/lemon-ui/Link/index.ts"),PaginationControl=__webpack_require__("./frontend/src/lib/lemon-ui/PaginationControl/index.ts"),lemon_ui_Popover=__webpack_require__("./frontend/src/lib/lemon-ui/Popover/index.ts"),ProfilePicture=__webpack_require__("./frontend/src/lib/lemon-ui/ProfilePicture/index.ts"),Spinner=__webpack_require__("./frontend/src/lib/lemon-ui/Spinner/index.ts");__webpack_require__("./frontend/src/lib/lemon-ui/Splotch/index.ts");var Tooltip=__webpack_require__("./frontend/src/lib/lemon-ui/Tooltip/index.ts")},"./frontend/src/exporter/exporterViewLogic.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{k:()=>getCurrentExporterData,y:()=>exporterViewLogic});var kea__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./node_modules/.pnpm/kea@3.1.5_react@18.2.0/node_modules/kea/lib/index.esm.js");let exporterViewLogic=(0,kea__WEBPACK_IMPORTED_MODULE_0__.kea)([(0,kea__WEBPACK_IMPORTED_MODULE_0__.path)(()=>["scenes","exporter","exporterLogic"]),(0,kea__WEBPACK_IMPORTED_MODULE_0__.props)({}),(0,kea__WEBPACK_IMPORTED_MODULE_0__.selectors)(()=>({exportedData:[()=>[(_,props)=>props],props=>props]}))]),getCurrentExporterData=()=>exporterViewLogic.findMounted()?.values.exportedData},"./frontend/src/initKea.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{J1:()=>initKea});var kea__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./node_modules/.pnpm/kea@3.1.5_react@18.2.0/node_modules/kea/lib/index.esm.js"),kea_forms__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/.pnpm/kea-forms@3.2.0_kea@3.1.5/node_modules/kea-forms/lib/index.js"),kea_loaders__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./node_modules/.pnpm/kea-loaders@3.0.0_kea@3.1.5/node_modules/kea-loaders/lib/index.js"),kea_localstorage__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./node_modules/.pnpm/kea-localstorage@3.1.0_kea@3.1.5/node_modules/kea-localstorage/lib/index.js"),kea_router__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__("./node_modules/.pnpm/kea-router@3.2.0_kea@3.1.5/node_modules/kea-router/lib/index.js"),kea_subscriptions__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__("./node_modules/.pnpm/kea-subscriptions@3.0.1_kea@3.1.5/node_modules/kea-subscriptions/lib/index.js"),kea_waitfor__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__("./node_modules/.pnpm/kea-waitfor@0.2.1_kea@3.1.5/node_modules/kea-waitfor/lib/index.js"),kea_window_values__WEBPACK_IMPORTED_MODULE_7__=__webpack_require__("./node_modules/.pnpm/kea-window-values@3.0.0_kea@3.1.5/node_modules/kea-window-values/lib/index.js"),lib_lemon_ui_LemonToast_LemonToast__WEBPACK_IMPORTED_MODULE_8__=__webpack_require__("./frontend/src/lib/lemon-ui/LemonToast/LemonToast.tsx"),lib_utils__WEBPACK_IMPORTED_MODULE_9__=__webpack_require__("./frontend/src/lib/utils.tsx"),lib_utils_router_utils__WEBPACK_IMPORTED_MODULE_10__=__webpack_require__("./frontend/src/lib/utils/router-utils.ts");let ERROR_FILTER_ALLOW_LIST=["loadPreflight","loadUser","loadFunnels","authenticate","signup","loadLatestVersion","loadBilling","loadData","loadRecordingMeta"],loggerPlugin=()=>({name:"verbose-kea-logger",events:{beforeReduxStore(options){options.middleware.push(store=>next=>action=>{let response=next(action);return console.groupCollapsed("KEA LOGGER",action),console.log(store.getState()),console.groupEnd(),response})}}});function initKea(){let{routerHistory,routerLocation,beforePlugins}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},plugins=[...beforePlugins||[],kea_localstorage__WEBPACK_IMPORTED_MODULE_3__.localStoragePlugin,(0,kea_window_values__WEBPACK_IMPORTED_MODULE_7__.windowValuesPlugin)({window:window}),(0,kea_router__WEBPACK_IMPORTED_MODULE_4__.routerPlugin)({history:routerHistory,location:routerLocation,urlPatternOptions:{segmentValueCharset:"a-zA-Z0-9-_~ %.@()!'|"},pathFromRoutesToWindow:path=>(0,lib_utils_router_utils__WEBPACK_IMPORTED_MODULE_10__.Jf)(path),transformPathInActions:path=>(0,lib_utils_router_utils__WEBPACK_IMPORTED_MODULE_10__.Jf)(path),pathFromWindowToRoutes:path=>(0,lib_utils_router_utils__WEBPACK_IMPORTED_MODULE_10__.sv)(path)}),kea_forms__WEBPACK_IMPORTED_MODULE_1__.formsPlugin,(0,kea_loaders__WEBPACK_IMPORTED_MODULE_2__.loadersPlugin)({onFailure(_ref){let{error,reducerKey,actionKey}=_ref;if(!ERROR_FILTER_ALLOW_LIST.includes(actionKey)&&error?.status!==void 0&&![200,201,204,401].includes(error.status)){let errorMessage=error.detail||error.statusText;errorMessage||404!==error.status||(errorMessage="URL not found"),errorMessage&&lib_lemon_ui_LemonToast_LemonToast__WEBPACK_IMPORTED_MODULE_8__.UJ.error(`${(0,lib_utils__WEBPACK_IMPORTED_MODULE_9__.UV)(actionKey)} failed: ${errorMessage}`)}console.error({error,reducerKey,actionKey}),window.Sentry?.captureException(error)}}),kea_subscriptions__WEBPACK_IMPORTED_MODULE_5__.nV,kea_waitfor__WEBPACK_IMPORTED_MODULE_6__.waitForPlugin];(window.JS_KEA_VERBOSE_LOGGING||"localStorage"in window&&window.localStorage.getItem("ph-kea-debug"))&&plugins.push(loggerPlugin),window.__REDUX_DEVTOOLS_EXTENSION__&&console.log("NB Redux Dev Tools are disabled on PostHog. See: https://github.com/PostHog/posthog/issues/17482"),(0,kea__WEBPACK_IMPORTED_MODULE_0__.resetContext)({plugins:plugins,createStore:{compose:function(){for(var _len=arguments.length,funcs=Array(_len),_key=0;_key<_len;_key++)funcs[_key]=arguments[_key];return 0===funcs.length?arg=>arg:1===funcs.length?funcs[0]:funcs.reduce((a,b)=>function(){return a(b(...arguments))})}}})}},"./frontend/src/layout/ErrorBoundary/index.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{S:()=>ErrorBoundary_ErrorBoundary_ErrorBoundary});var injectStylesIntoStyleTag=__webpack_require__("./node_modules/.pnpm/style-loader@2.0.0_webpack@5.88.2/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),injectStylesIntoStyleTag_default=__webpack_require__.n(injectStylesIntoStyleTag),ErrorBoundary=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/layout/ErrorBoundary/ErrorBoundary.scss"),ErrorBoundary_default=__webpack_require__.n(ErrorBoundary),options={};options.insert="head",options.singleton=!1,injectStylesIntoStyleTag_default()(ErrorBoundary_default(),options),ErrorBoundary_default().locals;var hub=__webpack_require__("./node_modules/.pnpm/@sentry+core@7.112.1/node_modules/@sentry/core/esm/hub.js"),errorboundary=__webpack_require__("./node_modules/.pnpm/@sentry+react@7.112.1_react@18.2.0/node_modules/@sentry/react/esm/errorboundary.js"),index_esm=__webpack_require__("./node_modules/.pnpm/kea@3.1.5_react@18.2.0/node_modules/kea/lib/index.esm.js"),supportLogic=__webpack_require__("./frontend/src/lib/components/Support/supportLogic.ts"),LemonButton=__webpack_require__("./frontend/src/lib/lemon-ui/LemonButton/index.ts"),teamLogic=__webpack_require__("./frontend/src/scenes/teamLogic.tsx"),jsx_runtime=__webpack_require__("./node_modules/.pnpm/react@18.2.0/node_modules/react/jsx-runtime.js");function ErrorBoundary_ErrorBoundary_ErrorBoundary(_ref){let{children,tags={}}=_ref,isSentryInitialized=!!(0,hub.Gd)().getClient(),{currentTeamId}=(0,index_esm.useValues)(teamLogic.H),{openSupportForm}=(0,index_esm.useActions)(supportLogic.Pw);return(0,jsx_runtime.jsx)(errorboundary.SV,{beforeCapture:scope=>{void 0!==currentTeamId&&scope.setTag("team_id",currentTeamId),scope.setTags(tags)},fallback:_ref2=>{let{error,eventId}=_ref2;return(0,jsx_runtime.jsx)("div",{className:"ErrorBoundary",children:(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[(0,jsx_runtime.jsx)("h2",{children:"An error has occurred"}),(0,jsx_runtime.jsx)("pre",{children:(0,jsx_runtime.jsx)("code",{children:error.stack||(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[error.name,(0,jsx_runtime.jsx)("br",{}),error.message]})})}),isSentryInitialized&&eventId?.match(/[^0]/)?`We've registered this event for analysis (ID ${eventId}), but feel free to contact us directly too.`:"Please help us resolve the issue by sending a screenshot of this message.",(0,jsx_runtime.jsx)(LemonButton.J,{type:"primary",fullWidth:!0,center:!0,onClick:()=>openSupportForm({kind:"bug",isEmailFormOpen:!0}),targetBlank:!0,className:"mt-2",children:"Email an engineer"})]})})},children:children})}},"./frontend/src/layout/FeaturePreviews/FeaturePreviews.tsx":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{F:()=>FeaturePreviews});var _posthog_lemon_ui__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./frontend/@posthog/lemon-ui/src/index.ts"),clsx__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__("./node_modules/.pnpm/clsx@1.2.1/node_modules/clsx/dist/clsx.m.js"),kea__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/.pnpm/kea@3.1.5_react@18.2.0/node_modules/kea/lib/index.esm.js"),lib_lemon_ui_Spinner__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./frontend/src/lib/lemon-ui/Spinner/index.ts"),react__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./node_modules/.pnpm/react@18.2.0/node_modules/react/index.js"),_featurePreviewsLogic__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__("./frontend/src/layout/FeaturePreviews/featurePreviewsLogic.tsx"),react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__("./node_modules/.pnpm/react@18.2.0/node_modules/react/jsx-runtime.js");function FeaturePreviews(){let{earlyAccessFeatures,rawEarlyAccessFeaturesLoading}=(0,kea__WEBPACK_IMPORTED_MODULE_1__.useValues)(_featurePreviewsLogic__WEBPACK_IMPORTED_MODULE_4__.Z),{loadEarlyAccessFeatures}=(0,kea__WEBPACK_IMPORTED_MODULE_1__.useActions)(_featurePreviewsLogic__WEBPACK_IMPORTED_MODULE_4__.Z);return(0,react__WEBPACK_IMPORTED_MODULE_3__.useLayoutEffect)(()=>loadEarlyAccessFeatures(),[]),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)("div",{className:(0,clsx__WEBPACK_IMPORTED_MODULE_6__.default)("flex flex-col relative min-h-24",0===earlyAccessFeatures.length&&"items-center justify-center"),children:[earlyAccessFeatures.map((feature,i)=>!!feature.flagKey&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)("div",{children:[i>0&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_posthog_lemon_ui__WEBPACK_IMPORTED_MODULE_0__.p2,{className:"my-4"}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(FeaturePreview,{feature:feature},feature.flagKey)]},feature.flagKey)),rawEarlyAccessFeaturesLoading?(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(lib_lemon_ui_Spinner__WEBPACK_IMPORTED_MODULE_2__.t,{}):0===earlyAccessFeatures.length?(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)("i",{className:"text-center",children:["No feature previews currently available.",(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("br",{}),"Check back later!"]}):null]})}function FeaturePreview(_ref){let{feature}=_ref,{activeFeedbackFlagKey,activeFeedbackFlagKeyLoading}=(0,kea__WEBPACK_IMPORTED_MODULE_1__.useValues)(_featurePreviewsLogic__WEBPACK_IMPORTED_MODULE_4__.Z),{beginEarlyAccessFeatureFeedback,cancelEarlyAccessFeatureFeedback,updateEarlyAccessFeatureEnrollment}=(0,kea__WEBPACK_IMPORTED_MODULE_1__.useActions)(_featurePreviewsLogic__WEBPACK_IMPORTED_MODULE_4__.Z),{submitEarlyAccessFeatureFeedback}=(0,kea__WEBPACK_IMPORTED_MODULE_1__.useAsyncActions)(_featurePreviewsLogic__WEBPACK_IMPORTED_MODULE_4__.Z),{flagKey,enabled,name,description,documentationUrl}=feature,isFeedbackActive=activeFeedbackFlagKey===flagKey,[feedback,setFeedback]=(0,react__WEBPACK_IMPORTED_MODULE_3__.useState)("");return(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)("div",{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)("div",{className:"flex items-center justify-between",children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("h4",{className:"font-semibold mb-0",children:name}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_posthog_lemon_ui__WEBPACK_IMPORTED_MODULE_0__.f4,{checked:enabled,onChange:newChecked=>updateEarlyAccessFeatureEnrollment(flagKey,newChecked)})]}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("p",{className:"my-2",children:description||(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("i",{children:"No description."})}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)("div",{children:[isFeedbackActive?null:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_posthog_lemon_ui__WEBPACK_IMPORTED_MODULE_0__.rU,{onClick:()=>beginEarlyAccessFeatureFeedback(flagKey),children:"Give feedback"}),documentationUrl&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.Fragment,{children:[" • ",(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_posthog_lemon_ui__WEBPACK_IMPORTED_MODULE_0__.rU,{to:documentationUrl,target:"_blank",children:"Learn more"})]})]}),isFeedbackActive&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_posthog_lemon_ui__WEBPACK_IMPORTED_MODULE_0__._V,{autoFocus:!0,placeholder:`What's your experience with ${name} been like?`,className:"mt-2",value:feedback,onChange:value=>setFeedback(value),onKeyDown:e=>{"Enter"===e.key&&e.metaKey?updateEarlyAccessFeatureEnrollment(flagKey,enabled):"Escape"===e.key&&(cancelEarlyAccessFeatureFeedback(),setFeedback(""),e.stopPropagation())}}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)("div",{className:"flex items-center gap-2",children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_posthog_lemon_ui__WEBPACK_IMPORTED_MODULE_0__.Jp,{type:"secondary",onClick:()=>{cancelEarlyAccessFeatureFeedback(),setFeedback("")},children:"Cancel"}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_posthog_lemon_ui__WEBPACK_IMPORTED_MODULE_0__.Jp,{type:"primary",onClick:()=>{submitEarlyAccessFeatureFeedback(feedback).then(()=>{setFeedback("")})},loading:activeFeedbackFlagKeyLoading,className:"flex-1",center:!0,children:"Submit feedback"})]})]})]})}},"./frontend/src/layout/FeaturePreviews/featurePreviewsLogic.tsx":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{N:()=>CONSTRAINED_PREVIEWS,Z:()=>featurePreviewsLogic});var kea__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./node_modules/.pnpm/kea@3.1.5_react@18.2.0/node_modules/kea/lib/index.esm.js"),kea_loaders__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/.pnpm/kea-loaders@3.0.0_kea@3.1.5/node_modules/kea-loaders/lib/index.js"),lib_components_Support_supportLogic__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./frontend/src/lib/components/Support/supportLogic.ts"),lib_logic_featureFlagLogic__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./frontend/src/lib/logic/featureFlagLogic.ts"),posthog_js__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__("./node_modules/.pnpm/posthog-js@1.177.0/node_modules/posthog-js/dist/module.js"),scenes_userLogic__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__("./frontend/src/scenes/userLogic.ts");let CONSTRAINED_PREVIEWS=new Set([]),featurePreviewsLogic=(0,kea__WEBPACK_IMPORTED_MODULE_0__.kea)([(0,kea__WEBPACK_IMPORTED_MODULE_0__.path)(["layout","FeaturePreviews","featurePreviewsLogic"]),(0,kea__WEBPACK_IMPORTED_MODULE_0__.connect)({values:[lib_logic_featureFlagLogic__WEBPACK_IMPORTED_MODULE_3__.h,["featureFlags"],scenes_userLogic__WEBPACK_IMPORTED_MODULE_5__.userLogic,["user"]],actions:[lib_components_Support_supportLogic__WEBPACK_IMPORTED_MODULE_2__.Pw,["submitZendeskTicket"]]}),(0,kea__WEBPACK_IMPORTED_MODULE_0__.actions)({updateEarlyAccessFeatureEnrollment:(flagKey,enabled)=>({flagKey,enabled}),beginEarlyAccessFeatureFeedback:flagKey=>({flagKey}),cancelEarlyAccessFeatureFeedback:!0,submitEarlyAccessFeatureFeedback:message=>({message})}),(0,kea_loaders__WEBPACK_IMPORTED_MODULE_1__.loaders)(_ref=>{let{values}=_ref;return{rawEarlyAccessFeatures:[[],{loadEarlyAccessFeatures:async()=>await new Promise(resolve=>posthog_js__WEBPACK_IMPORTED_MODULE_4__.LJ.getEarlyAccessFeatures(features=>resolve(features),!0))}],activeFeedbackFlagKey:[null,{submitEarlyAccessFeatureFeedback:async _ref2=>{let{message}=_ref2;if(!values.user)throw Error("Cannot submit early access feature feedback without a user");if(!values.activeFeedbackFlagKey)throw Error("Cannot submit early access feature feedback without an active flag key");return await lib_components_Support_supportLogic__WEBPACK_IMPORTED_MODULE_2__.Pw.asyncActions.submitZendeskTicket({name:values.user.first_name,email:values.user.email,kind:"feedback",target_area:values.activeFeedbackFlagKey,severity_level:"low",message}),null}}]}}),(0,kea__WEBPACK_IMPORTED_MODULE_0__.reducers)({activeFeedbackFlagKey:{beginEarlyAccessFeatureFeedback:(_,_ref3)=>{let{flagKey}=_ref3;return flagKey},cancelEarlyAccessFeatureFeedback:()=>null}}),(0,kea__WEBPACK_IMPORTED_MODULE_0__.listeners)(()=>({updateEarlyAccessFeatureEnrollment:_ref4=>{let{flagKey,enabled}=_ref4;posthog_js__WEBPACK_IMPORTED_MODULE_4__.LJ.updateEarlyAccessFeatureEnrollment(flagKey,enabled)}})),(0,kea__WEBPACK_IMPORTED_MODULE_0__.selectors)({earlyAccessFeatures:[s=>[s.rawEarlyAccessFeatures,s.featureFlags],(rawEarlyAccessFeatures,featureFlags)=>rawEarlyAccessFeatures.filter(feature=>!!feature.flagKey&&(!CONSTRAINED_PREVIEWS.has(feature.flagKey)||!!featureFlags[`${feature.flagKey}-preview`])).map(feature=>{if(!feature.flagKey)throw Error("Early access feature without flagKey was not filtered out");return{...feature,flagKey:feature.flagKey,enabled:!!featureFlags[feature.flagKey]}})]})])},"./frontend/src/layout/GlobalModals.tsx":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{B:()=>GlobalModals,p:()=>globalModalsLogic});var src=__webpack_require__("./frontend/@posthog/lemon-ui/src/index.ts"),index_esm=__webpack_require__("./node_modules/.pnpm/kea@3.1.5_react@18.2.0/node_modules/kea/lib/index.esm.js"),posthog_icons_es=__webpack_require__("./node_modules/.pnpm/@posthog+icons@0.8.5_react-dom@18.2.0_react@18.2.0/node_modules/@posthog/icons/dist/posthog-icons.es.js"),react=__webpack_require__("./node_modules/.pnpm/react@18.2.0/node_modules/react/index.js"),billing_utils=__webpack_require__("./frontend/src/scenes/billing/billing-utils.ts"),billingLogic=__webpack_require__("./frontend/src/scenes/billing/billingLogic.tsx");let confirmUpgradeModalLogic=(0,index_esm.kea)([(0,index_esm.path)(["lib","components","ConfirmUpgradeModal","confirmUpgradeModalLogic"]),(0,index_esm.actions)({showConfirmUpgradeModal:(upgradePlan,confirmCallback,cancelCallback)=>({upgradePlan,confirmCallback,cancelCallback}),hideConfirmUpgradeModal:!0,confirm:!0,cancel:!0}),(0,index_esm.reducers)({upgradePlan:[null,{showConfirmUpgradeModal:(_,_ref)=>{let{upgradePlan}=_ref;return upgradePlan},hideConfirmUpgradeModal:()=>null}],confirmCallback:[null,{showConfirmUpgradeModal:(_,_ref2)=>{let{confirmCallback}=_ref2;return confirmCallback},hideConfirmUpgradeModal:()=>null}],cancelCallback:[null,{showConfirmUpgradeModal:(_,_ref3)=>{let{cancelCallback}=_ref3;return cancelCallback},hideConfirmUpgradeModal:()=>null}]}),(0,index_esm.listeners)(_ref4=>{let{actions,values}=_ref4;return{confirm:async(_,breakpoint)=>{await breakpoint(100),values.confirmCallback&&values.confirmCallback(),actions.hideConfirmUpgradeModal()},cancel:async(_,breakpoint)=>{await breakpoint(100),values.cancelCallback&&values.cancelCallback(),actions.hideConfirmUpgradeModal()}}})]);var jsx_runtime=__webpack_require__("./node_modules/.pnpm/react@18.2.0/node_modules/react/jsx-runtime.js");function ConfirmUpgradeModal(){let{upgradePlan}=(0,index_esm.useValues)(confirmUpgradeModalLogic),{timeRemainingInSeconds,timeTotalInSeconds,billing}=(0,index_esm.useValues)(billingLogic.kr),{hideConfirmUpgradeModal,confirm,cancel}=(0,index_esm.useActions)(confirmUpgradeModalLogic),{prorationAmount,isProrated}=(0,react.useMemo)(()=>(0,billing_utils.MG)({timeRemainingInSeconds,timeTotalInSeconds,amountUsd:upgradePlan?.unit_amount_usd,hasActiveSubscription:billing?.has_active_subscription}),[billing?.has_active_subscription,upgradePlan,timeRemainingInSeconds,timeTotalInSeconds]);return(0,jsx_runtime.jsx)(src.fQ,{onClose:hideConfirmUpgradeModal,isOpen:!!upgradePlan,closable:!1,title:`Ready to subscribe to the ${upgradePlan?.name}?`,footer:(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[(0,jsx_runtime.jsx)(src.Jp,{type:"secondary",onClick:()=>cancel(),children:"Cancel"}),(0,jsx_runtime.jsx)(src.Jp,{type:"primary",onClick:()=>confirm(),children:"Sign me up"})]}),children:(0,jsx_runtime.jsxs)("div",{className:"max-w-140",children:[(0,jsx_runtime.jsxs)("p",{children:["Woo! You're gonna love the ",upgradePlan?.name,". We're just confirming that this is a $",Number(upgradePlan?.unit_amount_usd)," / ",upgradePlan?.unit," subscription."," ",isProrated?`The first payment will be prorated to ~$${prorationAmount} and it will be charged immediately.`:"The first payment will be charged immediately."]}),upgradePlan&&upgradePlan?.features?.length>1&&(0,jsx_runtime.jsxs)("div",{children:[(0,jsx_runtime.jsx)("p",{className:"ml-0 mb-2 max-w-200",children:"Here are the features included:"}),(0,jsx_runtime.jsx)("div",{className:"grid grid-cols-2 gap-x-4",children:upgradePlan?.features.map((feature,index)=>jsx_runtime.jsxs("div",{className:"flex gap-x-2 items-center mb-2",children:[jsx_runtime.jsx(posthog_icons_es.IconCheckCircle,{className:"text-success"}),jsx_runtime.jsx(src.u,{title:feature.description,children:jsx_runtime.jsxs("b",{children:[feature.name,feature.note?": "+feature.note:""]})},feature.key)]},"addon-features-"+index))})]})]})})}__webpack_require__("./frontend/src/lib/components/HedgehogBuddy/HedgehogBuddy.scss");var membersLogic=__webpack_require__("./frontend/src/scenes/organization/membersLogic.tsx"),userLogic=__webpack_require__("./frontend/src/scenes/userLogic.ts"),HedgehogBuddy_HedgehogBuddy=__webpack_require__("./frontend/src/lib/components/HedgehogBuddy/HedgehogBuddy.tsx"),hedgehogBuddyLogic=__webpack_require__("./frontend/src/lib/components/HedgehogBuddy/hedgehogBuddyLogic.ts");function HedgehogBuddyWithLogic(){let{hedgehogConfig}=(0,index_esm.useValues)(hedgehogBuddyLogic.r),{patchHedgehogConfig}=(0,index_esm.useActions)(hedgehogBuddyLogic.r),{user}=(0,index_esm.useValues)(userLogic.userLogic),{members}=(0,index_esm.useValues)(membersLogic.m),{ensureAllMembersLoaded}=(0,index_esm.useActions)(membersLogic.m);return(0,react.useEffect)(()=>ensureAllMembersLoaded(),[hedgehogConfig.enabled]),hedgehogConfig.enabled?(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[(0,jsx_runtime.jsx)(HedgehogBuddy_HedgehogBuddy.Tf,{onClose:()=>patchHedgehogConfig({enabled:!1})}),hedgehogConfig.party_mode_enabled?members?.map(member=>{if(member.user.uuid!==user?.uuid&&member.user.hedgehog_config)return jsx_runtime.jsx(HedgehogBuddy_HedgehogBuddy.Iv,{member:member},member.user.uuid)}):null]}):(0,jsx_runtime.jsx)(jsx_runtime.Fragment,{})}var TimeSensitiveAuthentication=__webpack_require__("./frontend/src/lib/components/TimeSensitiveAuthentication/TimeSensitiveAuthentication.tsx"),PayGateMini=__webpack_require__("./frontend/src/lib/components/PayGateMini/PayGateMini.tsx"),upgradeModalLogic=__webpack_require__("./frontend/src/lib/components/UpgradeModal/upgradeModalLogic.ts");function UpgradeModal(){let{upgradeModalFeatureKey,upgradeModalFeatureUsage,upgradeModalIsGrandfathered}=(0,index_esm.useValues)(upgradeModalLogic.J),{hideUpgradeModal}=(0,index_esm.useActions)(upgradeModalLogic.J);return upgradeModalFeatureKey?(0,jsx_runtime.jsx)(src.fQ,{onClose:hideUpgradeModal,isOpen:!!upgradeModalFeatureKey,children:(0,jsx_runtime.jsx)("div",{className:"max-w-2xl",children:(0,jsx_runtime.jsx)(PayGateMini.E,{feature:upgradeModalFeatureKey,currentUsage:null!=upgradeModalFeatureUsage?upgradeModalFeatureUsage:void 0,isGrandfathered:null!=upgradeModalIsGrandfathered?upgradeModalIsGrandfathered:void 0,background:!1,children:(0,jsx_runtime.jsx)("div",{className:"pr-7",children:"You should have access to this feature already. If you are still seeing this modal, please let us know \uD83D\uDE42"})})})}):(0,jsx_runtime.jsx)(jsx_runtime.Fragment,{})}var Setup2FA=__webpack_require__("./frontend/src/scenes/authentication/Setup2FA.tsx"),CreateOrganizationModal=__webpack_require__("./frontend/src/scenes/organization/CreateOrganizationModal.tsx"),LemonField=__webpack_require__("./frontend/src/lib/lemon-ui/LemonField/index.ts"),eventUsageLogic=__webpack_require__("./frontend/src/lib/utils/eventUsageLogic.ts"),projectLogic=__webpack_require__("./frontend/src/scenes/projectLogic.ts"),teamLogic=__webpack_require__("./frontend/src/scenes/teamLogic.tsx"),organizationLogic=__webpack_require__("./frontend/src/scenes/organizationLogic.tsx");function CreateEnvironmentModal(_ref){let{isVisible,onClose,inline=!1}=_ref,{currentProject}=(0,index_esm.useValues)(projectLogic.K),{currentTeamLoading}=(0,index_esm.useValues)(teamLogic.H),{createTeam}=(0,index_esm.useActions)(teamLogic.H),{currentOrganization}=(0,index_esm.useValues)(organizationLogic.p),{reportProjectCreationSubmitted}=(0,index_esm.useActions)(eventUsageLogic.vx),[name,setName]=(0,react.useState)(""),closeModal=()=>{onClose&&(onClose(),name&&setName(""))},handleSubmit=()=>{createTeam({name,is_demo:!1}),reportProjectCreationSubmitted(currentOrganization?.teams?currentOrganization.teams.length:0,name.length)};return(0,react.useEffect)(()=>{closeModal()},[currentProject]),(0,jsx_runtime.jsx)(src.fQ,{width:560,title:currentProject?`Create an environment within ${currentProject.name}`:"Create a environment",description:(0,jsx_runtime.jsx)("p",{children:"Use environments to keep your data completely separate, while sharing the setup (such as dashboards or taxonomy). The common pattern is having separate production, staging, and development environments."}),footer:(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[onClose&&(0,jsx_runtime.jsx)(src.Jp,{type:"secondary",onClick:onClose,disabledReason:currentTeamLoading?"Creating environment...":void 0,children:"Cancel"}),(0,jsx_runtime.jsx)(src.Jp,{type:"primary",onClick:handleSubmit,loading:currentTeamLoading,disabledReason:name?null:"Think of a name!",children:"Create environment"})]}),isOpen:isVisible,onClose:onClose,inline:inline,closable:!currentTeamLoading,children:(0,jsx_runtime.jsx)(LemonField.D.Pure,{label:"Environment name",children:(0,jsx_runtime.jsx)(src.DF,{placeholder:"E.g. development",maxLength:64,autoFocus:!0,value:name,onChange:value=>setName(value),onKeyDown:e=>{"Enter"===e.key&&handleSubmit()},disabled:currentTeamLoading})})})}var CreateProjectModal=__webpack_require__("./frontend/src/scenes/project/CreateProjectModal.tsx"),SessionRecordingPlayer=__webpack_require__("./frontend/src/scenes/session-recordings/player/SessionRecordingPlayer.tsx"),PlayerMeta=__webpack_require__("./frontend/src/scenes/session-recordings/player/PlayerMeta.tsx"),sessionRecordingPlayerLogic=__webpack_require__("./frontend/src/scenes/session-recordings/player/sessionRecordingPlayerLogic.ts"),sessionPlayerModalLogic=__webpack_require__("./frontend/src/scenes/session-recordings/player/modal/sessionPlayerModalLogic.ts");function SessionPlayerModal(){let{activeSessionRecording}=(0,index_esm.useValues)((0,sessionPlayerModalLogic.A)()),{closeSessionPlayer}=(0,index_esm.useActions)((0,sessionPlayerModalLogic.A)()),eventUUIDs=activeSessionRecording?.matching_events?.filter(matchingEvents=>matchingEvents.session_id===activeSessionRecording?.id).flatMap(matchedRecording=>matchedRecording.events.map(x=>x.uuid))||[],logicProps={playerKey:"modal",sessionRecordingId:activeSessionRecording?.id||"",autoPlay:!0,matchingEventsMatchType:{matchType:"uuid",eventUUIDs:eventUUIDs}},{isFullScreen}=(0,index_esm.useValues)((0,sessionRecordingPlayerLogic.d$)(logicProps));return(0,jsx_runtime.jsxs)(src.fQ,{isOpen:!!activeSessionRecording,onClose:closeSessionPlayer,simple:!0,title:"",width:1600,fullScreen:isFullScreen,closable:!isFullScreen,zIndex:"1061",hideCloseButton:!0,children:[(0,jsx_runtime.jsx)("header",{children:activeSessionRecording?(0,jsx_runtime.jsx)(index_esm.BindLogic,{logic:sessionRecordingPlayerLogic.d$,props:logicProps,children:(0,jsx_runtime.jsx)(PlayerMeta.L,{})}):null}),(0,jsx_runtime.jsx)(src.fQ.Content,{embedded:!0,children:activeSessionRecording?.id&&(0,jsx_runtime.jsx)(SessionRecordingPlayer.d,{...logicProps,noMeta:!0,noBorder:!0})})]})}var inviteLogic=__webpack_require__("./frontend/src/scenes/settings/organization/inviteLogic.ts"),InviteModal=__webpack_require__("./frontend/src/scenes/settings/organization/InviteModal.tsx");let globalModalsLogic=(0,index_esm.kea)([(0,index_esm.path)(["layout","navigation","globalModalsLogic"]),(0,index_esm.actions)({showCreateOrganizationModal:!0,hideCreateOrganizationModal:!0,showCreateProjectModal:!0,hideCreateProjectModal:!0,showCreateEnvironmentModal:!0,hideCreateEnvironmentModal:!0}),(0,index_esm.reducers)({isCreateOrganizationModalShown:[!1,{showCreateOrganizationModal:()=>!0,hideCreateOrganizationModal:()=>!1}],isCreateProjectModalShown:[!1,{showCreateProjectModal:()=>!0,hideCreateProjectModal:()=>!1}],isCreateEnvironmentModalShown:[!1,{showCreateEnvironmentModal:()=>!0,hideCreateEnvironmentModal:()=>!1}]})]);function GlobalModals(){let{isCreateOrganizationModalShown,isCreateProjectModalShown,isCreateEnvironmentModalShown}=(0,index_esm.useValues)(globalModalsLogic),{hideCreateOrganizationModal,hideCreateProjectModal,hideCreateEnvironmentModal}=(0,index_esm.useActions)(globalModalsLogic),{isInviteModalShown}=(0,index_esm.useValues)(inviteLogic.n),{hideInviteModal}=(0,index_esm.useActions)(inviteLogic.n),{user}=(0,index_esm.useValues)(userLogic.userLogic);return(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[(0,jsx_runtime.jsx)(InviteModal.Gx,{isOpen:isInviteModalShown,onClose:hideInviteModal}),(0,jsx_runtime.jsx)(CreateOrganizationModal.y,{isVisible:isCreateOrganizationModalShown,onClose:hideCreateOrganizationModal}),(0,jsx_runtime.jsx)(CreateProjectModal.P,{isVisible:isCreateProjectModalShown,onClose:hideCreateProjectModal}),(0,jsx_runtime.jsx)(CreateEnvironmentModal,{isVisible:isCreateEnvironmentModalShown,onClose:hideCreateEnvironmentModal}),(0,jsx_runtime.jsx)(UpgradeModal,{}),(0,jsx_runtime.jsx)(ConfirmUpgradeModal,{}),(0,jsx_runtime.jsx)(TimeSensitiveAuthentication.g,{}),(0,jsx_runtime.jsx)(SessionPlayerModal,{}),user&&user.organization?.enforce_2fa&&!user.is_2fa_enabled&&(0,jsx_runtime.jsxs)(src.fQ,{title:"Set up 2FA",closable:!1,children:[(0,jsx_runtime.jsx)("p",{children:(0,jsx_runtime.jsx)("b",{children:"Your organization requires you to set up 2FA."})}),(0,jsx_runtime.jsx)("p",{children:(0,jsx_runtime.jsx)("b",{children:"Use an authenticator app like Google Authenticator or 1Password to scan the QR code below."})}),(0,jsx_runtime.jsx)(Setup2FA.g,{onSuccess:()=>{userLogic.userLogic.actions.loadUser(),membersLogic.m.actions.loadAllMembers()}})]}),(0,jsx_runtime.jsx)(HedgehogBuddyWithLogic,{})]})}},"./frontend/src/layout/navigation-3000/components/KeyboardShortcut.tsx":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{e:()=>KeyboardShortcut_KeyboardShortcut});var injectStylesIntoStyleTag=__webpack_require__("./node_modules/.pnpm/style-loader@2.0.0_webpack@5.88.2/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),injectStylesIntoStyleTag_default=__webpack_require__.n(injectStylesIntoStyleTag),KeyboardShortcut=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/layout/navigation-3000/components/KeyboardShortcut.scss"),KeyboardShortcut_default=__webpack_require__.n(KeyboardShortcut),options={};options.insert="head",options.singleton=!1,injectStylesIntoStyleTag_default()(KeyboardShortcut_default(),options),KeyboardShortcut_default().locals;var clsx_m=__webpack_require__("./node_modules/.pnpm/clsx@1.2.1/node_modules/clsx/dist/clsx.m.js"),utils=__webpack_require__("./frontend/src/lib/utils.tsx"),jsx_runtime=__webpack_require__("./node_modules/.pnpm/react@18.2.0/node_modules/react/jsx-runtime.js");let IS_MAC=(0,utils.V5)(),KEY_TO_SYMBOL={shift:"⇧",command:IS_MAC?"⌘":"ctrl",option:IS_MAC?"⌥":"alt",arrowup:"↑",arrowdown:"↓",arrowleft:"←",arrowright:"→",enter:"↵",escape:"esc",tab:"⇥",space:"␣",forwardslash:"/"},MODIFIER_PRIORITY=["shift","command","option"];function KeyboardShortcut_KeyboardShortcut(_ref){let{muted,className,...keys}=_ref,sortedKeys=Object.keys(keys).sort((a,b)=>(-MODIFIER_PRIORITY.indexOf(a)||0)-(-MODIFIER_PRIORITY.indexOf(b)||0));return(0,utils.tq)()?null:(0,jsx_runtime.jsx)("span",{className:(0,clsx_m.default)("KeyboardShortcut space-x-0.5",muted&&"KeyboardShortcut--muted",className),children:sortedKeys.map(key=>(0,jsx_runtime.jsx)("span",{children:KEY_TO_SYMBOL[key]||key},key))})}},"./frontend/src/layout/navigation-3000/components/Sidebar.tsx":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{Y:()=>Sidebar});var posthog_icons_es=__webpack_require__("./node_modules/.pnpm/@posthog+icons@0.8.5_react-dom@18.2.0_react@18.2.0/node_modules/@posthog/icons/dist/posthog-icons.es.js"),src=__webpack_require__("./frontend/@posthog/lemon-ui/src/index.ts"),clsx_m=__webpack_require__("./node_modules/.pnpm/clsx@1.2.1/node_modules/clsx/dist/clsx.m.js"),index_esm=__webpack_require__("./node_modules/.pnpm/kea@3.1.5_react@18.2.0/node_modules/kea/lib/index.esm.js"),Spinner=__webpack_require__("./frontend/src/lib/lemon-ui/Spinner/index.ts"),utils=__webpack_require__("./frontend/src/lib/utils.tsx"),react=__webpack_require__("./node_modules/.pnpm/react@18.2.0/node_modules/react/index.js"),index_module=__webpack_require__("./node_modules/.pnpm/use-debounce@9.0.3_react@18.2.0/node_modules/use-debounce/dist/index.module.js"),navigationLogic=__webpack_require__("./frontend/src/layout/navigation-3000/navigationLogic.tsx"),KeyboardShortcut=__webpack_require__("./frontend/src/layout/navigation-3000/components/KeyboardShortcut.tsx"),icons=__webpack_require__("./frontend/src/lib/lemon-ui/icons/index.ts"),apps_common_src=__webpack_require__("./frontend/@posthog/apps-common/src/index.ts"),esm_exports=__webpack_require__("./node_modules/.pnpm/@sentry+core@7.112.1/node_modules/@sentry/core/esm/exports.js"),dayjs=__webpack_require__("./frontend/src/lib/dayjs.ts"),LemonMenu=__webpack_require__("./frontend/src/lib/lemon-ui/LemonMenu/index.ts"),LemonSkeleton=__webpack_require__("./frontend/src/lib/lemon-ui/LemonSkeleton/index.ts"),AutoSizer=__webpack_require__("./node_modules/.pnpm/react-virtualized@9.22.5_react-dom@18.2.0_react@18.2.0/node_modules/react-virtualized/dist/es/AutoSizer/index.js"),InfiniteLoader=__webpack_require__("./node_modules/.pnpm/react-virtualized@9.22.5_react-dom@18.2.0_react@18.2.0/node_modules/react-virtualized/dist/es/InfiniteLoader/index.js"),List=__webpack_require__("./node_modules/.pnpm/react-virtualized@9.22.5_react-dom@18.2.0_react@18.2.0/node_modules/react-virtualized/dist/es/List/index.js"),jsx_runtime=__webpack_require__("./node_modules/.pnpm/react@18.2.0/node_modules/react/jsx-runtime.js");function SidebarList(_ref){let{category}=_ref,{normalizedActiveListItemKey,sidebarWidth,newItemInlineCategory,savingNewItem}=(0,index_esm.useValues)(navigationLogic.f),{cancelNewItem}=(0,index_esm.useActions)(navigationLogic.f),{saveNewItem}=(0,index_esm.useAsyncActions)(navigationLogic.f),emptyStateSkeletonCount=(0,react.useMemo)(()=>4+Math.floor(4*Math.random()),[]),{items,remote}=category,addingNewItem=newItemInlineCategory===category.key,firstItem=items.find(Boolean),listProps={className:"SidebarList",width:sidebarWidth,rowHeight:firstItem&&"summary"in firstItem?46:32,rowRenderer:_ref2=>{let active,{index:rawIndex,style}=_ref2,index=addingNewItem?rawIndex-1:rawIndex;if(-1===index)return(0,jsx_runtime.jsx)(SidebarListItem,{item:{key:"__tentative__",onSave:async newName=>saveNewItem(newName),onCancel:cancelNewItem,loading:savingNewItem},validateName:category.validateName,style:style},index);let item=items[index];if(!item)return(0,jsx_runtime.jsx)(SidebarListItemSkeleton,{style:style},index);let normalizedItemKey=Array.isArray(item.key)?item.key.map(keyPart=>`${category.key}${navigationLogic.l}${keyPart}`):`${category.key}${navigationLogic.l}${item.key}`;return active=Array.isArray(normalizedItemKey)?"string"==typeof normalizedActiveListItemKey&&normalizedItemKey.includes(normalizedActiveListItemKey):normalizedItemKey===normalizedActiveListItemKey,(0,jsx_runtime.jsx)(SidebarListItem,{item:item,validateName:category.validateName,active:active,style:style},index)},overscanRowCount:20,tabIndex:null};return(0,jsx_runtime.jsx)("div",{className:"flex-1","aria-busy":category.loading,children:(0,jsx_runtime.jsx)(AutoSizer.q,{disableWidth:!0,children:_ref3=>{let{height}=_ref3;return category.loading&&0===category.items.length?Array(emptyStateSkeletonCount).fill(null).map((_,index)=>(0,jsx_runtime.jsx)(SidebarListItemSkeleton,{style:{height:32}},index)):remote?(0,jsx_runtime.jsx)(InfiniteLoader.b,{isRowLoaded:_ref4=>{let{index}=_ref4;return remote.isItemLoaded(index)},loadMoreRows:_ref5=>{let{startIndex,stopIndex}=_ref5;return remote.loadMoreItems(startIndex,stopIndex)},rowCount:remote.itemCount,minimumBatchSize:remote.minimumBatchSize||100,children:_ref6=>{let{onRowsRendered,registerChild}=_ref6;return(0,jsx_runtime.jsx)(List.aV,{...listProps,ref:registerChild,height:height,rowCount:remote.itemCount+Number(addingNewItem),onRowsRendered:onRowsRendered})}}):(0,jsx_runtime.jsx)(List.aV,{...listProps,height:height,rowCount:items.length+Number(addingNewItem)})}})})}function isItemTentative(item){return"onSave"in item}function SidebarListItem(_ref7){let content,{item,validateName,active,style}=_ref7,[isMenuOpen,setIsMenuOpen]=(0,react.useState)(!1),[newName,setNewName]=(0,react.useState)(null),[newNameValidationError,setNewNameValidationError]=(0,react.useState)(null),[isSavingName,setIsSavingName]=(0,react.useState)(!1),ref=(0,react.useRef)(null);item.ref=ref;let isSaving=isItemTentative(item)?item.loading:isSavingName,menuItems=(0,react.useMemo)(()=>{if(!isItemTentative(item)){if(item.onRename){if("function"!=typeof item.menuItems)throw Error('menuItems must be a function for renamable items so that the "Rename" item is shown');return item.menuItems(()=>setNewName(item.name))}return"function"==typeof item.menuItems?item.menuItems(()=>console.error("Cannot rename item without onRename handler")):item.menuItems}},[item,setNewName]),cancel=()=>{isItemTentative(item)&&item.onCancel(),setNewName(null),setNewNameValidationError(null)},validate=name=>{if(validateName){let validation=validateName(name);return setNewNameValidationError(validation||null),!validation}return!0},save=isItemTentative(item)?async name=>{validate(name)&&await item.onSave(name)}:item.onRename?async newName=>{if(!newName||newName===item.name)return cancel();if(validate(newName)){setIsSavingName(!0);try{await item.onRename?.(newName)}catch(error){(0,esm_exports.Tb)(error),src.UJ.error("Could not rename item")}finally{setIsSavingName(!1),cancel()}}}:null;if((0,react.useEffect)(()=>{if(!isItemTentative(item)&&save&&null===newName){let onDoubleClick=()=>{setNewName(item.name)},element=ref.current;if(element)return element.addEventListener("dblclick",onDoubleClick),()=>{element.removeEventListener("dblclick",onDoubleClick)}}}),save&&(isItemTentative(item)||null!==newName))content=(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[(0,jsx_runtime.jsx)("div",{className:"SidebarListItem__rename",ref:ref,children:(0,jsx_runtime.jsx)("input",{value:newName||"",onChange:e=>setNewName(e.target.value),onKeyDown:e=>{"ArrowDown"===e.key?(navigationLogic.f.actions.focusNextItem(),e.preventDefault()):"ArrowUp"===e.key?(navigationLogic.f.actions.focusPreviousItem(),e.preventDefault()):"Enter"===e.key?(save(newName||"").then(()=>{setTimeout(()=>ref.current?.focus(),0)}),e.preventDefault()):"Escape"===e.key&&(cancel(),setTimeout(()=>ref.current?.focus(),0),e.preventDefault())},onFocus:e=>{navigationLogic.f.actions.setLastFocusedItemByKey(Array.isArray(item.key)?item.key[0]:item.key),e.target.select()},onBlur:e=>{e.relatedTarget?.ariaLabel==="Save name"?save(newName||""):cancel()},placeholder:isItemTentative(item)?"Adding something new…":`Renaming ${item.name}…`,disabled:isSaving,autoFocus:!0})}),newNameValidationError&&(0,jsx_runtime.jsx)("div",{className:"SidebarListItem__error",children:newNameValidationError})]});else{if(isItemTentative(item))throw Error("Tentative items should not be rendered in read mode");let formattedName=item.searchMatch?.nameHighlightRanges?.length?(0,jsx_runtime.jsx)(TextWithHighlights,{ranges:item.searchMatch.nameHighlightRanges,children:item.name}):item.name;(!item.url||item.isNamePlaceholder)&&(formattedName=(0,jsx_runtime.jsx)("i",{children:formattedName})),item.tag&&(formattedName=(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[formattedName,(0,jsx_runtime.jsx)(src.oe,{type:item.tag.status,size:"small",className:"ml-2",children:item.tag.text})]})),content=(0,jsx_runtime.jsx)(apps_common_src.rU,{ref:ref,to:item.url||void 0,className:"SidebarListItem__link",onKeyDown:e=>{"ArrowDown"===e.key?e.metaKey||e.ctrlKey?e.target.click():(navigationLogic.f.actions.focusNextItem(),e.preventDefault()):"ArrowUp"===e.key?(navigationLogic.f.actions.focusPreviousItem(),e.preventDefault()):save&&"Enter"===e.key&&(setNewName(item.name),e.preventDefault())},onFocus:()=>{navigationLogic.f.actions.setLastFocusedItemByKey(Array.isArray(item.key)?item.key[0]:item.key)},children:"summary"in item?(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[(0,jsx_runtime.jsxs)("div",{className:"flex space-between gap-1",children:[(0,jsx_runtime.jsx)("h5",{className:"flex-1",children:formattedName}),(0,jsx_runtime.jsx)("div",{children:(0,jsx_runtime.jsx)(ExtraContext,{data:item.extraContextTop})})]}),(0,jsx_runtime.jsxs)("div",{className:"flex space-between gap-1",children:[(0,jsx_runtime.jsx)("div",{className:"flex-1 overflow-hidden text-ellipsis",children:item.searchMatch?.matchingFields?`Matching fields: ${item.searchMatch.matchingFields.map(field=>field.replace(/_/g," ")).join(", ")}`:item.summary}),(0,jsx_runtime.jsx)("div",{children:(0,jsx_runtime.jsx)(ExtraContext,{data:item.extraContextBottom})})]})]}):(0,jsx_runtime.jsx)("h5",{children:formattedName})})}return(0,jsx_runtime.jsxs)("li",{id:`sidebar-${item.key}`,title:isItemTentative(item)?"New item":item.name,className:(0,clsx_m.default)("SidebarListItem","menuItems"in item&&item.menuItems?.length&&"SidebarListItem--has-menu",isMenuOpen&&"SidebarListItem--is-menu-open",(isItemTentative(item)||null!==newName)&&"SidebarListItem--is-renaming","marker"in item&&!!item.marker&&`SidebarListItem--marker-${item.marker.type}`,"marker"in item&&!!item.marker?.status&&`SidebarListItem--marker-status-${item.marker.status}`,"summary"in item&&"SidebarListItem--extended"),"aria-disabled":!isItemTentative(item)&&!item.url,"aria-current":active?"page":void 0,"aria-invalid":!!newNameValidationError,style:style,children:[content,isItemTentative(item)||null!==newName?(0,jsx_runtime.jsxs)("div",{className:"SidebarListItem__actions",children:[!isSaving&&(0,jsx_runtime.jsx)(src.Jp,{size:"small",noPadding:!0,icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconX,{}),tooltip:(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:["Cancel ",(0,jsx_runtime.jsx)(KeyboardShortcut.e,{escape:!0})]}),"aria-label":"Cancel"}),(0,jsx_runtime.jsx)(src.Jp,{size:"small",noPadding:!0,icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconCheckCircle,{}),tooltip:isSaving?null:(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:["Save name ",(0,jsx_runtime.jsx)(KeyboardShortcut.e,{enter:!0})]}),loading:isSaving,"aria-label":"Save name"})]}):!!menuItems?.length&&(0,jsx_runtime.jsx)(LemonMenu.d,{items:menuItems,onVisibilityChange:setIsMenuOpen,children:(0,jsx_runtime.jsx)("div",{className:"SidebarListItem__actions",children:(0,jsx_runtime.jsx)(src.Jp,{size:"small",noPadding:!0,icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconEllipsis,{})})})})]})}function TextWithHighlights(_ref8){let{children,ranges}=_ref8,segments=[],previousBoldEnd=0,segmentIndex=0;for(let i=0;ipreviousBoldEnd&&(segments.push((0,jsx_runtime.jsx)(react.Fragment,{children:children.slice(previousBoldEnd,currentBoldStart)},segmentIndex)),segmentIndex++),segments.push((0,jsx_runtime.jsx)("b",{children:children.slice(currentBoldStart,currentBoldEnd)},segmentIndex)),segmentIndex++,previousBoldEnd=currentBoldEnd}return previousBoldEnd0?()=>toggleAccordion(key):void 0,children:[loading?(0,jsx_runtime.jsx)(Spinner.$,{}):(0,jsx_runtime.jsx)(icons.VG,{}),(0,jsx_runtime.jsxs)("h4",{children:[(0,utils.fm)(pluralizeCategory(category.noun)),!loading&&isEmpty&&(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[" ",(0,jsx_runtime.jsx)("i",{children:"(empty)"})]})]}),(0,jsx_runtime.jsx)(NewItemButton,{category:category})]}),isExpanded&&(0,jsx_runtime.jsx)(SidebarList,{category:category})]})}function pluralizeCategory(noun){return Array.isArray(noun)?noun[1]:`${noun}s`}function NewItemButton(_ref){var noun;let{category}=_ref,{newItemCategory}=(0,index_esm.useValues)(navigationLogic.f),{initiateNewItemInCategory}=(0,index_esm.useActions)(navigationLogic.f);return category.onAdd?(0,jsx_runtime.jsx)(src.Jp,{icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconPlus,{}),size:"small",noPadding:!0,to:"string"==typeof category.onAdd?category.onAdd:void 0,onClick:e=>{"function"==typeof category.onAdd&&initiateNewItemInCategory(category.key),e.stopPropagation()},active:newItemCategory===category.key,tooltip:`New ${Array.isArray(noun=category.noun)?noun[0]:noun}`,tooltipPlacement:"bottom"}):null}function Sidebar(_ref){let{navbarItem}=_ref,inputElementRef=(0,react.useRef)(null),{sidebarWidth:width,isSidebarShown:isShown,isResizeInProgress,sidebarOverslideDirection:overslideDirection,isSidebarKeyboardShortcutAcknowledged,isSearchShown}=(0,index_esm.useValues)((0,navigationLogic.f)({inputElement:inputElementRef.current})),{beginResize}=(0,index_esm.useActions)((0,navigationLogic.f)({inputElement:inputElementRef.current})),{contents}=(0,index_esm.useValues)(navbarItem.logic),onlyCategoryTitle=1===contents.length?(0,utils.fm)(pluralizeCategory(contents[0].noun)):null,title=onlyCategoryTitle&&onlyCategoryTitle.toLowerCase()!==navbarItem.label.toLowerCase()?`${navbarItem.label} — ${onlyCategoryTitle}`:navbarItem.label;return(0,jsx_runtime.jsxs)("div",{className:(0,clsx_m.default)("Sidebar3000",isResizeInProgress&&"Sidebar3000--resizing",overslideDirection&&`Sidebar3000--overslide-${overslideDirection}`),"aria-hidden":!isShown,style:{"--sidebar-width":`${isShown?width:0}px`},children:[(0,jsx_runtime.jsxs)("div",{className:"Sidebar3000__content",children:[(0,jsx_runtime.jsxs)("div",{className:"Sidebar3000__header",children:[(0,jsx_runtime.jsx)("h3",{className:"grow",children:title}),(0,jsx_runtime.jsx)(SidebarActions,{activeSidebarLogic:navbarItem.logic})]}),navbarItem?.logic&&isSearchShown&&(0,jsx_runtime.jsx)(SidebarSearchBar,{activeSidebarLogic:navbarItem.logic,inputElementRef:inputElementRef}),(0,jsx_runtime.jsx)("div",{className:"Sidebar3000__lists",children:navbarItem?.logic&&(0,jsx_runtime.jsx)(SidebarContent,{activeSidebarLogic:navbarItem.logic})}),!isSidebarKeyboardShortcutAcknowledged&&(0,jsx_runtime.jsx)(SidebarKeyboardShortcut,{}),contents.filter(_ref2=>{let{modalContent}=_ref2;return modalContent}).map(category=>(0,jsx_runtime.jsx)(react.Fragment,{children:category.modalContent},category.key))]}),(0,jsx_runtime.jsx)("div",{className:"Sidebar3000__slider",onMouseDown:e=>{0===e.button&&beginResize()}})]})}function SidebarActions(_ref3){let{activeSidebarLogic}=_ref3,{isSearchShown}=(0,index_esm.useValues)(navigationLogic.f),{setIsSearchShown}=(0,index_esm.useActions)(navigationLogic.f),{contents}=(0,index_esm.useValues)(activeSidebarLogic);return(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[1===contents.length&&(0,jsx_runtime.jsx)(NewItemButton,{category:contents[0]}),(0,jsx_runtime.jsx)(src.Jp,{icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconSearch,{}),size:"small",noPadding:!0,onClick:()=>setIsSearchShown(!isSearchShown),active:isSearchShown,tooltip:(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:["Find ",(0,jsx_runtime.jsx)(KeyboardShortcut.e,{shift:!0,command:!0,f:!0})]}),tooltipPlacement:"bottom"})]})}function SidebarSearchBar(_ref4){let{activeSidebarLogic,inputElementRef}=_ref4,{searchTerm}=(0,index_esm.useValues)(navigationLogic.f),{setIsSearchShown,setSearchTerm,focusNextItem,setLastFocusedItemIndex}=(0,index_esm.useActions)(navigationLogic.f),{contents,debounceSearch}=(0,index_esm.useValues)(activeSidebarLogic),[localSearchTerm,setLocalSearchTerm]=(0,react.useState)(searchTerm),setSearchTermDebounced=(0,index_module.y1)(value=>setSearchTerm(value),debounceSearch?300:void 0),isLoading=contents.some(item=>item.loading);return(0,jsx_runtime.jsx)("div",{children:(0,jsx_runtime.jsx)(src.DF,{inputRef:inputElementRef,type:"search",value:localSearchTerm,onChange:value=>{setLocalSearchTerm(value),setSearchTermDebounced(value)},size:"small",prefix:(localSearchTerm||searchTerm)&&(localSearchTerm!==searchTerm||isLoading)?(0,jsx_runtime.jsx)(Spinner.$,{textColored:!0}):null,placeholder:"Search...",onKeyDown:e=>{"Escape"===e.key?(setIsSearchShown(!1),e.preventDefault()):"ArrowDown"===e.key&&(focusNextItem(),e.preventDefault())},onFocus:()=>{setLastFocusedItemIndex(-1)},autoFocus:!0,suffix:(0,jsx_runtime.jsx)(KeyboardShortcut.e,{muted:!0,arrowdown:!0,arrowup:!0})})})}function SidebarContent(_ref5){let{activeSidebarLogic}=_ref5,{contents}=(0,index_esm.useValues)(activeSidebarLogic);return 1!==contents.length?(0,jsx_runtime.jsx)(jsx_runtime.Fragment,{children:contents.map(accordion=>(0,jsx_runtime.jsx)(SidebarAccordion,{category:accordion},accordion.key))}):(0,jsx_runtime.jsx)(SidebarList,{category:contents[0]})}function SidebarKeyboardShortcut(){let{acknowledgeSidebarKeyboardShortcut}=(0,index_esm.useActions)(navigationLogic.f);return(0,jsx_runtime.jsxs)("div",{className:"Sidebar3000__hint",children:[(0,jsx_runtime.jsxs)("span",{className:"truncate",children:[(0,jsx_runtime.jsx)("i",{children:"Tip:"})," Press ",(0,jsx_runtime.jsx)(KeyboardShortcut.e,{command:!0,b:!0})," to toggle this sidebar"]}),(0,jsx_runtime.jsx)(src.Jp,{icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconX,{}),size:"small",onClick:()=>acknowledgeSidebarKeyboardShortcut(),noPadding:!0})]})}},"./frontend/src/layout/navigation-3000/navigationLogic.tsx":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{l:()=>ITEM_KEY_PART_SEPARATOR,f:()=>navigation3000Logic});var posthog_icons_es=__webpack_require__("./node_modules/.pnpm/@posthog+icons@0.8.5_react-dom@18.2.0_react@18.2.0/node_modules/@posthog/icons/dist/posthog-icons.es.js"),src=__webpack_require__("./frontend/@posthog/lemon-ui/src/index.ts"),esm_exports=__webpack_require__("./node_modules/.pnpm/@sentry+core@7.112.1/node_modules/@sentry/core/esm/exports.js"),index_esm=__webpack_require__("./node_modules/.pnpm/kea@3.1.5_react@18.2.0/node_modules/kea/lib/index.esm.js"),lib=__webpack_require__("./node_modules/.pnpm/kea-router@3.2.0_kea@3.1.5/node_modules/kea-router/lib/index.js"),kea_subscriptions_lib=__webpack_require__("./node_modules/.pnpm/kea-subscriptions@3.0.1_kea@3.1.5/node_modules/kea-subscriptions/lib/index.js"),constants=__webpack_require__("./frontend/src/lib/constants.tsx"),LemonMenu=__webpack_require__("./frontend/src/lib/lemon-ui/LemonMenu/LemonMenu.tsx"),featureFlagLogic=__webpack_require__("./frontend/src/lib/logic/featureFlagLogic.ts"),utils=__webpack_require__("./frontend/src/lib/utils.tsx"),react=__webpack_require__("./node_modules/.pnpm/react@18.2.0/node_modules/react/index.js"),sceneLogic=__webpack_require__("./frontend/src/scenes/sceneLogic.ts"),sceneTypes=__webpack_require__("./frontend/src/scenes/sceneTypes.ts"),teamLogic=__webpack_require__("./frontend/src/scenes/teamLogic.tsx"),urls=__webpack_require__("./frontend/src/scenes/urls.ts"),dashboardsModel=__webpack_require__("./frontend/src/models/dashboardsModel.tsx"),types=__webpack_require__("./frontend/src/types.ts"),navigationLogic=__webpack_require__("./frontend/src/layout/navigation/navigationLogic.ts"),fuse_esm=__webpack_require__("./node_modules/.pnpm/fuse.js@6.6.2/node_modules/fuse.js/dist/fuse.esm.js"),eventUsageLogic=__webpack_require__("./frontend/src/lib/utils/eventUsageLogic.ts"),dashboardLogic=__webpack_require__("./frontend/src/scenes/dashboard/dashboardLogic.tsx"),deleteDashboardLogic=__webpack_require__("./frontend/src/scenes/dashboard/deleteDashboardLogic.ts"),duplicateDashboardLogic=__webpack_require__("./frontend/src/scenes/dashboard/duplicateDashboardLogic.ts"),newDashboardLogic=__webpack_require__("./frontend/src/scenes/dashboard/newDashboardLogic.ts"),NewDashboardModal=__webpack_require__("./frontend/src/scenes/dashboard/NewDashboardModal.tsx"),jsx_runtime=__webpack_require__("./node_modules/.pnpm/react@18.2.0/node_modules/react/jsx-runtime.js");let fuse=new fuse_esm.Z([],{keys:[{name:"name",weight:2},"description","tags"],threshold:.3,ignoreLocation:!0,includeMatches:!0}),dashboardsSidebarLogic=(0,index_esm.kea)([(0,index_esm.path)(["layout","navigation-3000","sidebars","dashboardsSidebarLogic"]),(0,index_esm.connect)({values:[dashboardsModel.h,["pinSortedDashboards","dashboardsLoading"],sceneLogic.k,["activeScene","sceneParams"]],actions:[dashboardsModel.h,["pinDashboard","unpinDashboard"],duplicateDashboardLogic.T,["showDuplicateDashboardModal"],deleteDashboardLogic.r,["showDeleteDashboardModal"],newDashboardLogic.Z,["showNewDashboardModal"]]}),(0,index_esm.selectors)(_ref=>{let{actions}=_ref;return{contents:[s=>[s.relevantDashboards,s.dashboardsLoading],(relevantDashboards,dashboardsLoading)=>[{key:"dashboards",noun:"dashboard",loading:dashboardsLoading,onAdd:()=>actions.showNewDashboardModal(),modalContent:(0,jsx_runtime.jsx)(NewDashboardModal.O,{}),items:relevantDashboards.map(_ref2=>{let[dashboard,matches]=_ref2;return{key:dashboard.id,name:dashboard.name,url:urls.j.dashboard(dashboard.id),marker:dashboard.pinned?{type:"fold"}:void 0,searchMatch:matches?{matchingFields:matches.map(match=>match.key),nameHighlightRanges:matches.find(match=>"name"===match.key)?.indices}:null,menuItems:initiateRename=>[{items:[{to:urls.j.dashboard(dashboard.id),onClick:()=>{(0,dashboardLogic.BM)({id:dashboard.id}).mount(),(0,dashboardLogic.BM)({id:dashboard.id}).actions.setDashboardMode(types.MN.Edit,eventUsageLogic.GU.DashboardsList)},label:"Edit"},{onClick:()=>{actions.showDuplicateDashboardModal(dashboard.id,dashboard.name)},label:"Duplicate"}]},{items:[{onClick:()=>{(dashboard.pinned?actions.unpinDashboard:actions.pinDashboard)(dashboard.id,eventUsageLogic.GU.MoreDropdown)},label:dashboard.pinned?"Unpin":"Pin"}]},{items:[{onClick:initiateRename,label:"Rename",keyboardShortcut:["enter"]},{onClick:()=>{actions.showDeleteDashboardModal(dashboard.id)},status:"danger",label:"Delete dashboard"}]}],onRename:async newName=>{await dashboardsModel.h.asyncActions.updateDashboard({id:dashboard.id,name:newName})}}})}]],activeListItemKey:[s=>[s.activeScene,s.sceneParams],(activeScene,sceneParams)=>activeScene===sceneTypes.x.Dashboard&&sceneParams.params.id?["dashboards",parseInt(sceneParams.params.id)]:null],relevantDashboards:[s=>[s.pinSortedDashboards,navigation3000Logic.selectors.searchTerm],(pinSortedDashboards,searchTerm)=>searchTerm?fuse.search(searchTerm).map(result=>[result.item,result.matches]):pinSortedDashboards.map(dashboard=>[dashboard,null])]}}),(0,kea_subscriptions_lib.Vt)({pinSortedDashboards:pinSortedDashboards=>{fuse.setCollection(pinSortedDashboards)}})]);var kea_loaders_lib=__webpack_require__("./node_modules/.pnpm/kea-loaders@3.0.0_kea@3.1.5/node_modules/kea-loaders/lib/index.js"),api=__webpack_require__("./frontend/src/lib/api.ts"),TaxonomicFilter_types=__webpack_require__("./frontend/src/lib/components/TaxonomicFilter/types.ts"),taxonomy=__webpack_require__("./frontend/src/lib/taxonomy.tsx"),actionsLogic=__webpack_require__("./frontend/src/scenes/actions/actionsLogic.ts");function findSearchTermInItemName(name,searchTerm){if(!searchTerm||!name)return null;let ranges=[],workingName=name.toLowerCase(),workingSearchTerm=searchTerm.toLowerCase(),index=workingName.indexOf(workingSearchTerm);for(;-1!==index;)ranges.push([index,index+searchTerm.length]),index=workingName.indexOf(workingSearchTerm,index+1);return ranges.length?{nameHighlightRanges:ranges}:null}let dataManagementSidebarLogic=(0,index_esm.kea)([(0,index_esm.path)(["layout","navigation-3000","sidebars","dataManagementSidebarLogic"]),(0,index_esm.connect)(()=>({values:[sceneLogic.k,["activeScene","sceneParams"],navigation3000Logic,["searchTerm"],actionsLogic.M,["actions","actionsLoading"]]})),(0,index_esm.actions)({loadEventDefinitions:(startIndex,stopIndex)=>({startIndex,stopIndex}),loadPropertyDefinitions:(startIndex,stopIndex)=>({startIndex,stopIndex})}),(0,kea_loaders_lib.loaders)(_ref=>{let{values,cache}=_ref;return{infiniteEventDefinitions:[[[],0],{loadEventDefinitions:async _ref2=>{let{startIndex,stopIndex}=_ref2;startIndex||(cache.requestedEventDefinitions=[]);for(let i=startIndex;i{let{startIndex,stopIndex}=_ref3;startIndex||(cache.requestedPropertyDefinitions=[]);for(let i=startIndex;i{let{actions,values,cache}=_ref4;return{contents:[s=>[s.infiniteEventDefinitions,s.infiniteEventDefinitionsLoading,s.infinitePropertyDefinitions,s.infinitePropertyDefinitionsLoading,s.relevantActions,s.actionsLoading],(_ref5,infiniteEventDefinitionsLoading,_ref6,infinitePropertyDefinitionsLoading,relevantActions,actionsLoading)=>{let[eventDefinitions,eventDefinitionCount]=_ref5,[propertyDefinitions,propertyDefinitionCount]=_ref6;return[{key:"event-definitions",noun:"event definition",loading:infiniteEventDefinitionsLoading,items:eventDefinitions.map(eventDefinition=>eventDefinition&&{key:eventDefinition.id,name:(0,taxonomy.R6)(eventDefinition.name,TaxonomicFilter_types.t.Events),url:urls.j.eventDefinition(eventDefinition.id),searchMatch:findSearchTermInItemName((0,taxonomy.R6)(eventDefinition.name,TaxonomicFilter_types.t.Events),values.searchTerm),menuItems:[{label:"View recordings",to:urls.j.replay(types.yd.Home,{filter_group:{type:types.J2.And,values:[{type:types.J2.And,values:[{id:eventDefinition.name,type:"events",order:0,name:eventDefinition.name}]}]}})}]}),remote:{isItemLoaded:index=>!!(cache.requestedEventDefinitions[index]||eventDefinitions[index]),loadMoreItems:(startIndex,stopIndex)=>actions.loadEventDefinitions(startIndex,stopIndex),itemCount:eventDefinitionCount}},{key:"property-definitions",noun:"property definition",loading:infinitePropertyDefinitionsLoading,items:propertyDefinitions.map(propertyDefinition=>propertyDefinition&&{key:propertyDefinition.id,name:(0,taxonomy.R6)(propertyDefinition.name,TaxonomicFilter_types.t.EventProperties),url:urls.j.propertyDefinition(propertyDefinition.id),searchMatch:findSearchTermInItemName((0,taxonomy.R6)(propertyDefinition.name,TaxonomicFilter_types.t.EventProperties),values.searchTerm)}),remote:{isItemLoaded:index=>!!(cache.requestedPropertyDefinitions[index]||propertyDefinitions[index]),loadMoreItems:(startIndex,stopIndex)=>actions.loadPropertyDefinitions(startIndex,stopIndex),itemCount:propertyDefinitionCount}},{key:"actions",noun:"action",loading:actionsLoading,onAdd:urls.j.action("new"),items:relevantActions.map(_ref7=>{let[action,matches]=_ref7;return{key:action.id,name:action.name,url:urls.j.action(action.id),searchMatch:matches?{matchingFields:matches.map(match=>match.key),nameHighlightRanges:matches.find(match=>"name"===match.key)?.indices}:null}})}]}],activeListItemKey:[s=>[s.activeScene,s.sceneParams],(activeScene,sceneParams)=>activeScene===sceneTypes.x.EventDefinition?["event-definitions",sceneParams.params.id]:activeScene===sceneTypes.x.PropertyDefinition?["property-definitions",sceneParams.params.id]:activeScene===sceneTypes.x.Action?["actions",sceneParams.params.id]:null],debounceSearch:[s=>[s.searchTerm],()=>!0],relevantActions:[s=>[s.actions,navigation3000Logic.selectors.searchTerm],(actions,searchTerm)=>searchTerm?actionsLogic.J.search(searchTerm).map(result=>[result.item,result.matches]):actions.map(action=>[action,null])]}}),(0,kea_subscriptions_lib.Vt)(_ref8=>{let{actions}=_ref8;return{searchTerm:()=>{actions.loadEventDefinitions(0,100),actions.loadPropertyDefinitions(0,100)}}}),(0,index_esm.afterMount)(_ref9=>{let{actions,cache}=_ref9;cache.requestedEventDefinitions=[],cache.requestedPropertyDefinitions=[],actions.loadEventDefinitions(0,100),actions.loadPropertyDefinitions(0,100)})]);var dayjs=__webpack_require__("./frontend/src/lib/dayjs.ts"),experimentsLogic=__webpack_require__("./frontend/src/scenes/experiments/experimentsLogic.ts");let experiments_fuse=new fuse_esm.Z([],{keys:[{name:"name",weight:2},"description"],threshold:.3,ignoreLocation:!0,includeMatches:!0}),EXPERIMENT_STATUS_TO_RIBBON_STATUS={draft:"muted",running:"success",complete:"completion"},experimentsSidebarLogic=(0,index_esm.kea)([(0,index_esm.path)(["layout","navigation-3000","sidebars","experimentsSidebarLogic"]),(0,index_esm.connect)({values:[experimentsLogic.OK,["experiments","experimentsLoading"],sceneLogic.k,["activeScene","sceneParams"]],actions:[experimentsLogic.OK,["loadExperiments","deleteExperiment"]]}),(0,index_esm.selectors)(_ref=>{let{actions}=_ref;return{contents:[s=>[s.relevantExperiments,s.experimentsLoading],(relevantExperiments,experimentsLoading)=>[{key:"experiments",noun:"experiment",loading:experimentsLoading,items:relevantExperiments.map(_ref2=>{let[experiment,matches]=_ref2,experimentStatus=(0,experimentsLogic.Ot)(experiment);return{key:experiment.id,name:experiment.name,summary:experimentStatus===types.mN.Draft?"Draft":experimentStatus===types.mN.Complete?`Completed ${(0,dayjs.Bv)(experiment.start_date).fromNow()}`:`Running for ${(0,dayjs.Bv)(experiment.start_date).fromNow(!0)} now`,extraContextTop:(0,dayjs.Bv)(experiment.created_at),extraContextBottom:`by ${experiment.created_by?.first_name||"unknown"}`,url:urls.j.experiment(experiment.id),searchMatch:matches?{matchingFields:matches.map(match=>match.key),nameHighlightRanges:matches.find(match=>"name"===match.key)?.indices}:null,marker:{type:"ribbon",status:EXPERIMENT_STATUS_TO_RIBBON_STATUS[experimentStatus]},menuItems:[{items:[{label:"Delete experiment",onClick:()=>actions.deleteExperiment(experiment.id),status:"danger"}]}]}}),onAdd:urls.j.experiment("new")}]],activeListItemKey:[s=>[s.activeScene,s.sceneParams],(activeScene,sceneParams)=>activeScene===sceneTypes.x.Experiment&&sceneParams.params.id?["experiments",parseInt(sceneParams.params.id)]:null],relevantExperiments:[s=>[s.experiments,navigation3000Logic.selectors.searchTerm],(experiments,searchTerm)=>searchTerm?experiments_fuse.search(searchTerm).map(result=>[result.item,result.matches]):experiments.map(experiment=>[experiment,null])]}}),(0,kea_subscriptions_lib.Vt)({experiments:experiments=>{experiments_fuse.setCollection(experiments)}})]);var copyToClipboard=__webpack_require__("./frontend/src/lib/utils/copyToClipboard.tsx"),deleteWithUndo=__webpack_require__("./frontend/src/lib/utils/deleteWithUndo.tsx"),feature_flags_featureFlagLogic=__webpack_require__("./frontend/src/scenes/feature-flags/featureFlagLogic.ts"),FeatureFlags=__webpack_require__("./frontend/src/scenes/feature-flags/FeatureFlags.tsx"),featureFlagsLogic=__webpack_require__("./frontend/src/scenes/feature-flags/featureFlagsLogic.ts"),groupsModel=__webpack_require__("./frontend/src/models/groupsModel.ts"),schema=__webpack_require__("./frontend/src/queries/schema.ts");let featureFlags_fuse=new fuse_esm.Z([],{keys:[{name:"key",weight:2},"name","tags"],threshold:.3,ignoreLocation:!0,includeMatches:!0}),featureFlagsSidebarLogic=(0,index_esm.kea)([(0,index_esm.path)(["layout","navigation-3000","sidebars","featureFlagsSidebarLogic"]),(0,index_esm.connect)({values:[featureFlagsLogic.b,["featureFlags","featureFlagsLoading"],teamLogic.H,["currentTeamId"],sceneLogic.k,["activeScene","sceneParams"],groupsModel.$,["aggregationLabel"]],actions:[featureFlagsLogic.b,["updateFeatureFlag","loadFeatureFlags"]]}),(0,index_esm.selectors)(_ref=>{let{actions}=_ref;return{contents:[s=>[s.relevantFeatureFlags,s.featureFlagsLoading,s.currentTeamId,s.aggregationLabel],(relevantFeatureFlags,featureFlagsLoading,currentTeamId,aggregationLabel)=>[{key:"feature-flags",noun:"feature flag",loading:featureFlagsLoading,onAdd:urls.j.featureFlag("new"),items:relevantFeatureFlags.map(_ref2=>{let[featureFlag,matches]=_ref2;if(!featureFlag.id)throw Error("Feature flag ID should never be missing in the sidebar");let query={kind:schema.OH.InsightVizNode,source:{kind:schema.OH.TrendsQuery,series:[{event:"$pageview",name:"$pageview",kind:schema.OH.EventsNode,math:types.vN.UniqueUsers}],breakdownFilter:{breakdown:`$feature/${featureFlag.key}`,breakdown_type:"event"}}};return{key:featureFlag.id,name:featureFlag.key,url:urls.j.featureFlag(featureFlag.id),summary:featureFlag.active?(0,FeatureFlags.groupFilters)(featureFlag.filters,!0,aggregationLabel):(0,jsx_runtime.jsx)("i",{children:"Disabled"}),extraContextTop:(0,dayjs.Bv)(featureFlag.created_at),extraContextBottom:`by ${featureFlag.created_by?.first_name||"unknown"}`,marker:{type:"ribbon",status:featureFlag.active?"success":"danger"},searchMatch:matches?{matchingFields:matches.map(match=>"name"===match.key?"description":match.key),nameHighlightRanges:matches.find(match=>"key"===match.key)?.indices}:null,menuItems:[{items:[{label:"Edit",to:urls.j.featureFlag(featureFlag.id),onClick:()=>{(0,feature_flags_featureFlagLogic.hk)({id:featureFlag.id}).mount(),(0,feature_flags_featureFlagLogic.hk)({id:featureFlag.id}).actions.editFeatureFlag(!0)},disabledReason:featureFlag.can_edit?null:"You don't have permission to edit this feature flag."}]},{items:[{label:`${featureFlag.active?"Disable":"Enable"} flag`,onClick:()=>actions.updateFeatureFlag({id:featureFlag.id,payload:{active:!featureFlag.active}}),disabledReason:featureFlag.can_edit?null:"You don't have permission to edit this feature flag."},{label:"Copy flag key",onClick:()=>{(0,copyToClipboard.v)(featureFlag.key,"feature flag key")}},{label:"Try out in Insights",to:urls.j.insightNew(void 0,void 0,query),"data-attr":"usage"}]},{items:[{label:"Delete feature flag",onClick:()=>{(0,deleteWithUndo.S)({endpoint:`projects/${currentTeamId}/feature_flags`,object:{name:featureFlag.key,id:featureFlag.id},callback:actions.loadFeatureFlags})},disabledReason:featureFlag.can_edit?null:"You don't have permission to edit this feature flag.",status:"danger"}]}]}})}]],activeListItemKey:[s=>[s.activeScene,s.sceneParams],(activeScene,sceneParams)=>activeScene===sceneTypes.x.FeatureFlag&&sceneParams.params.id?["feature-flags",parseInt(sceneParams.params.id)]:null],relevantFeatureFlags:[s=>[s.featureFlags,navigation3000Logic.selectors.searchTerm],(featureFlags,searchTerm)=>searchTerm?featureFlags_fuse.search(searchTerm).map(result=>[result.item,result.matches]):featureFlags.map(featureFlag=>[featureFlag,null])]}}),(0,kea_subscriptions_lib.Vt)({featureFlags:featureFlags=>{featureFlags_fuse.setCollection(featureFlags)}})]);var utils_api=__webpack_require__("./frontend/src/scenes/insights/utils/api.ts"),savedInsightsLogic=__webpack_require__("./frontend/src/scenes/saved-insights/savedInsightsLogic.ts"),insightsModel=__webpack_require__("./frontend/src/models/insightsModel.tsx");let insightsSidebarLogic=(0,index_esm.kea)([(0,index_esm.path)(["layout","navigation-3000","sidebars","insightsSidebarLogic"]),(0,index_esm.connect)(()=>({values:[savedInsightsLogic.w,["insights","insightsLoading","paramsFromFilters"],sceneLogic.k,["activeScene","sceneParams"],navigation3000Logic,["searchTerm"]],actions:[savedInsightsLogic.w,["loadInsights","setSavedInsightsFilters","duplicateInsight"]]})),(0,index_esm.reducers)(()=>({infiniteInsights:[[],{[savedInsightsLogic.w.actionTypes.loadInsightsSuccess]:(state,_ref)=>{let{insights}=_ref,items=0===insights.offset?[]:state.slice();for(let i=0;i{let{actions,values,cache}=_ref2;return{contents:[s=>[s.insights,s.infiniteInsights,s.insightsLoading,teamLogic.H.selectors.currentTeamId],(insights,infiniteInsights,insightsLoading,currentTeamId)=>[{key:"insights",noun:"insight",onAdd:urls.j.insightNew(),items:infiniteInsights.map(insight=>{if(insight)return{key:insight.short_id,name:insight.name||insight.derived_name||"Untitled",isNamePlaceholder:!insight.name,url:urls.j.insightView(insight.short_id),searchMatch:findSearchTermInItemName(insight.name||insight.derived_name||"",values.searchTerm),menuItems:initiateRename=>[{items:[{to:urls.j.insightEdit(insight.short_id),label:"Edit"},{onClick:()=>{actions.duplicateInsight(insight)},label:"Duplicate"}]},{items:[{onClick:initiateRename,label:"Rename",keyboardShortcut:["enter"]},{onClick:()=>{(0,deleteWithUndo.c)({object:insight,endpoint:`projects/${currentTeamId}/insights`,callback:actions.loadInsights})},status:"danger",label:"Delete insight"}]}],onRename:async newName=>{let updatedItem=await utils_api.L.update(insight.id,{name:newName});insightsModel.U.actions.renameInsightSuccess(updatedItem)}}}),loading:insightsLoading,remote:{isItemLoaded:index=>!!(cache.requestedInsights[index]||infiniteInsights[index]),loadMoreItems:async startIndex=>{for(let i=startIndex;i[s.activeScene,s.sceneParams],(activeScene,sceneParams)=>activeScene===sceneTypes.x.Insight&&sceneParams.params.shortId?["insights",sceneParams.params.shortId]:null],debounceSearch:[s=>[s.searchTerm],()=>!0]}}),(0,index_esm.listeners)(_ref3=>{let{values,cache}=_ref3;return{loadInsights:()=>{values.paramsFromFilters.offset||(cache.requestedInsights=[])}}}),(0,kea_subscriptions_lib.Vt)(_ref4=>{let{actions}=_ref4;return{searchTerm:searchTerm=>{actions.setSavedInsightsFilters({search:searchTerm},!1,!1)}}}),(0,index_esm.afterMount)(_ref5=>{let{cache}=_ref5;cache.requestedInsights=[]})]);var apps_common_src=__webpack_require__("./frontend/@posthog/apps-common/src/index.ts"),groupsListLogic=__webpack_require__("./frontend/src/scenes/groups/groupsListLogic.ts"),GroupActorDisplay=__webpack_require__("./frontend/src/scenes/persons/GroupActorDisplay.tsx"),person_utils=__webpack_require__("./frontend/src/scenes/persons/person-utils.ts"),personsLogic=__webpack_require__("./frontend/src/scenes/persons/personsLogic.tsx");let personsAndGroupsSidebarLogic=(0,index_esm.kea)([(0,index_esm.path)(["layout","navigation-3000","sidebars","personsAndGroupsSidebarLogic"]),(0,index_esm.connect)(()=>({values:[personsLogic.T,["persons","personsLoading"],groupsModel.$,["groupTypes"],sceneLogic.k,["activeScene","sceneParams"],navigation3000Logic,["searchTerm"]],actions:[personsLogic.T,["setListFilters as setPersonsListFilters","loadPersons"]]})),(0,index_esm.reducers)(()=>({infinitePersons:[[],{[personsLogic.T.actionTypes.loadPersonsSuccess]:(state,_ref)=>{let{persons}=_ref,items=0===persons.offset?[]:state.slice();for(let i=0;i{let{values,cache}=_ref2;return{contents:[s=>[s.persons,s.infinitePersons,s.personsLoading,s.groupTypes,s.groups,s.groupsLoading],(persons,infinitePersons,personsLoading,groupTypes,groups,groupsLoading)=>[{key:"persons",noun:"person",items:infinitePersons.map(person=>{if(!person)return person;let name=(0,person_utils.y)(person),{searchTerm}=values;return{key:person.distinct_ids,name:(0,person_utils.y)(person),url:(0,person_utils.s)(person),searchMatch:findSearchTermInItemName(name,searchTerm)}}),loading:personsLoading,remote:{isItemLoaded:index=>!!(cache.requestedPersons[index]||infinitePersons[index]),loadMoreItems:async(startIndex,stopIndex)=>{let moreUrl=persons.next||persons.previous;if(!moreUrl)throw Error("No URL for loading more persons is known");for(let i=startIndex;i<=stopIndex;i++)cache.requestedPersons[i]=!0;moreUrl=(0,lib.combineUrl)(moreUrl,{offset:startIndex,limit:stopIndex-startIndex+1}).url,await personsLogic.T.asyncActions.loadPersons(moreUrl)},itemCount:persons.count,minimumBatchSize:100}},...Array.from(groupTypes.values()).map(groupType=>({key:`groups-${groupType.group_type_index}`,noun:[groupType.name_singular||`${groupType.group_type} group`,groupType.name_plural||`${groupType.group_type} groups`],items:groups[groupType.group_type_index]?.results.map(group=>{let{searchTerm}=values,displayId=GroupActorDisplay.O(group.group_key,group.group_properties);return{key:group.group_key,name:displayId,url:apps_common_src.jk.group(groupType.group_type_index,group.group_key),searchMatch:findSearchTermInItemName(displayId,searchTerm)}})||[],loading:groupsLoading[groupType.group_type_index]}))]],groups:[s=>[,,,,,].fill(null).map((_,groupTypeIndex)=>state=>{if(s.groupTypes(state)[groupTypeIndex])return(0,groupsListLogic.z)({groupTypeIndex}).mount(),(0,groupsListLogic.z)({groupTypeIndex}).selectors.groups(state)}),(groups0,groups1,groups2,groups3,groups4)=>[groups0,groups1,groups2,groups3,groups4]],groupsLoading:[s=>[,,,,,].fill(null).map((_,groupTypeIndex)=>state=>{if(s.groupTypes(state)[groupTypeIndex])return(0,groupsListLogic.z)({groupTypeIndex}).mount(),(0,groupsListLogic.z)({groupTypeIndex}).selectors.groupsLoading(state)}),(groupsLoading0,groupsLoading1,groupsLoading2,groupsLoading3,groupsLoading4)=>[groupsLoading0,groupsLoading1,groupsLoading2,groupsLoading3,groupsLoading4]],activeListItemKey:[s=>[s.activeScene,s.sceneParams],(activeScene,sceneParams)=>{if(activeScene===sceneTypes.x.Person){let{_:personDistinctId}=sceneParams.params;return personDistinctId?["persons",personDistinctId]:null}if(activeScene===sceneTypes.x.Group){let{groupKey,groupTypeIndex}=sceneParams.params;return groupKey?[`groups-${groupTypeIndex}`,decodeURIComponent(groupKey)]:null}return null}],debounceSearch:[s=>[s.searchTerm],()=>!0]}}),(0,index_esm.listeners)(_ref3=>{let{cache}=_ref3;return{loadPersons:async _ref4=>{let{url}=_ref4,offset=url?parseInt(new URL(url).searchParams.get("offset")||"0"):0;0===offset&&(cache.requestedPersons=[])}}}),(0,kea_subscriptions_lib.Vt)(_ref5=>{let{actions,values}=_ref5;return{searchTerm:searchTerm=>{for(let{group_type_index:groupTypeIndex}of(actions.setPersonsListFilters({search:searchTerm}),actions.loadPersons(),Object.values(values.groupTypes)))(0,groupsListLogic.z)({groupTypeIndex}).actions.setSearch(searchTerm,!1)}}}),(0,index_esm.afterMount)(_ref6=>{let{actions,cache}=_ref6;cache.requestedPersons=[],actions.loadPersons()})]),ITEM_KEY_PART_SEPARATOR="::",navigation3000Logic=(0,index_esm.kea)([(0,index_esm.path)(["layout","navigation-3000","navigationLogic"]),(0,index_esm.props)({}),(0,index_esm.connect)(()=>({values:[sceneLogic.k,["sceneConfig"],navigationLogic.f,["mobileLayout"],teamLogic.H,["currentTeam","hasOnboardedAnyProduct"]],actions:[navigationLogic.f,["closeAccountPopover"]]})),(0,index_esm.actions)({hideSidebar:!0,showSidebar:newNavbarItemId=>({newNavbarItemId}),toggleNavCollapsed:override=>({override}),showNavOnMobile:!0,hideNavOnMobile:!0,toggleSidebar:!0,setSidebarWidth:width=>({width}),setSidebarOverslide:overslide=>({overslide}),syncSidebarWidthWithMouseMove:delta=>({delta}),syncSidebarWidthWithViewport:!0,beginResize:!0,endResize:!0,acknowledgeSidebarKeyboardShortcut:!0,setIsSearchShown:isSearchShown=>({isSearchShown}),setSearchTerm:searchTerm=>({searchTerm}),initiateNewItemInCategory:category=>({category}),initiateNewItemInlineInCategory:category=>({category}),cancelNewItem:!0,saveNewItem:itemName=>({itemName}),saveNewItemComplete:!0,setLastFocusedItemIndex:index=>({index}),setLastFocusedItemByKey:key=>({key}),focusNextItem:!0,focusPreviousItem:!0,toggleAccordion:key=>({key})}),(0,index_esm.reducers)({isSidebarShown:[!0,{persist:!0},{hideSidebar:()=>!1,showSidebar:()=>!0,toggleSidebar:isSidebarShown=>!isSidebarShown}],sidebarWidth:[288,{persist:!0},{setSidebarWidth:(_,_ref)=>{let{width}=_ref;return width}}],sidebarOverslide:[0,{setSidebarOverslide:(_,_ref2)=>{let{overslide}=_ref2;return overslide}}],isResizeInProgress:[!1,{beginResize:()=>!0,endResize:()=>!1}],isNavCollapsedDesktop:[!1,{persist:!0},{toggleNavCollapsed:(state,_ref3)=>{let{override}=_ref3;return null!=override?override:!state}}],isNavShownMobile:[!1,{persist:!0},{showNavOnMobile:()=>!0,hideNavOnMobile:()=>!1,closeAccountPopover:()=>!1}],isSidebarKeyboardShortcutAcknowledged:[!1,{persist:!0},{acknowledgeSidebarKeyboardShortcut:()=>!0}],activeNavbarItemIdRaw:[sceneTypes.x.Dashboards,{persist:!0},{showSidebar:(state,_ref4)=>{let{newNavbarItemId}=_ref4;return newNavbarItemId||state}}],isSearchShown:[!1,{setIsSearchShown:(_,_ref5)=>{let{isSearchShown}=_ref5;return isSearchShown}}],internalSearchTerm:["",{setSearchTerm:(_,_ref6)=>{let{searchTerm}=_ref6;return searchTerm}}],lastFocusedItemIndex:[-1,{setLastFocusedItemIndex:(_,_ref7)=>{let{index}=_ref7;return index}}],accordionCollapseMapping:[{},{persist:!0},{toggleAccordion:(state,_ref8)=>{let{key}=_ref8;return{...state,[key]:!state[key]}}}],newItemInlineCategory:[null,{initiateNewItemInlineInCategory:(_,_ref9)=>{let{category}=_ref9;return category},saveNewItemComplete:()=>null,cancelNewItem:()=>null,toggleSidebar:()=>null,showSidebar:()=>null,hideSidebar:()=>null}],savingNewItem:[!1,{saveNewItem:()=>!0,saveNewItemComplete:()=>!1}]}),(0,index_esm.listeners)(_ref10=>{let{actions,values}=_ref10;return{initiateNewItemInCategory:_ref11=>{let{category:categoryKey}=_ref11,category=values.activeNavbarItem?.logic.values.contents?.find(item=>item.key===categoryKey);if(category){if(!category.onAdd||"function"!=typeof category.onAdd)throw Error(`Sidebar category '${categoryKey}' doesn't support onAdd`)}else throw Error(`Sidebar category '${categoryKey}' doesn't exist`);0===category.onAdd.length?category.onAdd():actions.initiateNewItemInlineInCategory(categoryKey)},saveNewItem:async _ref12=>{let{itemName}=_ref12;try{let categoryKey=values.newItemInlineCategory;if(!categoryKey)throw Error("Can't save new sidebar item without a category");let category=values.activeNavbarItem?.logic.values.contents?.find(item=>item.key===categoryKey);if(category){if(!category.onAdd||"function"!=typeof category.onAdd)throw Error(`Sidebar category '${categoryKey}' doesn't support onAdd`)}else throw Error(`Sidebar category '${categoryKey}' doesn't exist`);await category.onAdd(itemName)}catch(e){(0,esm_exports.Tb)(e),console.error(e),src.UJ.error("Something went wrong while saving the item. Please try again.")}finally{actions.saveNewItemComplete()}},syncSidebarWidthWithMouseMove:_ref13=>{let{delta}=_ref13,newWidthRaw=values.sidebarWidth+values.sidebarOverslide+delta,newWidth=newWidthRaw;newWidth<192?newWidth=192:newWidth>1024&&(newWidth=1024),newWidth>.5*window.innerWidth&&(newWidth=.5*window.innerWidth),actions.setSidebarWidth(newWidth),actions.setSidebarOverslide(newWidthRaw-newWidth),newWidthRaw<96?values.isSidebarShown&&actions.hideSidebar():values.isSidebarShown||actions.showSidebar()},syncSidebarWidthWithViewport:()=>{values.sidebarWidth>.5*window.innerWidth&&actions.setSidebarWidth(.5*window.innerWidth)},endResize:()=>{actions.setSidebarOverslide(values.isSidebarShown?0:-192)},toggleSidebar:()=>{actions.endResize()},focusNextItem:()=>{let nextIndex=values.lastFocusedItemIndex+1;nextIndex{let nextIndex=values.lastFocusedItemIndex-1;nextIndex>=-1&&actions.setLastFocusedItemIndex(nextIndex)},setLastFocusedItemByKey:_ref14=>{let{key}=_ref14,index=values.sidebarContentsFlattened.findIndex(item=>Array.isArray(item.key)?item.key.includes(key):item.key===key);-1!==index&&actions.setLastFocusedItemIndex(index)}}}),(0,index_esm.selectors)({mode:[s=>[s.sceneConfig],sceneConfig=>sceneConfig?.layout!=="plain"||sceneConfig.allowUnauthenticated?sceneConfig?.layout!=="plain"?"full":"none":"minimal"],isNavShown:[s=>[s.isNavShownMobile,s.mobileLayout],(isNavShownMobile,mobileLayout)=>!mobileLayout||isNavShownMobile],isNavCollapsed:[s=>[s.isNavCollapsedDesktop,s.mobileLayout],(isNavCollapsedDesktop,mobileLayout)=>!mobileLayout&&isNavCollapsedDesktop],navbarItems:[s=>[featureFlagLogic.h.selectors.featureFlags,dashboardsModel.h.selectors.dashboardsLoading,dashboardsModel.h.selectors.pinnedDashboards,s.currentTeam,s.hasOnboardedAnyProduct],(featureFlags,dashboardsLoading,pinnedDashboards,currentTeam,hasOnboardedAnyProduct)=>{let isUsingSidebar=featureFlags[constants.y8.POSTHOG_3000_NAV],hasOnboardedFeatureFlags=currentTeam?.has_completed_onboarding_for?.[types.Md.FEATURE_FLAGS],sectionOne=hasOnboardedAnyProduct?[{identifier:sceneTypes.x.ProjectHomepage,label:"Home",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconHome,{}),to:urls.j.projectHomepage()},{identifier:sceneTypes.x.Dashboards,label:"Dashboards",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconDashboard,{}),logic:isUsingSidebar?dashboardsSidebarLogic:void 0,to:isUsingSidebar?void 0:urls.j.dashboards(),sideAction:{identifier:"pinned-dashboards-dropdown",dropdown:{overlay:(0,jsx_runtime.jsx)(LemonMenu.iy,{items:[{title:"Pinned dashboards",items:pinnedDashboards.map(dashboard=>({label:dashboard.name,to:urls.j.dashboard(dashboard.id)})),footer:dashboardsLoading&&(0,jsx_runtime.jsxs)("div",{className:"px-2 py-1 text-text-secondary-3000",children:[(0,jsx_runtime.jsx)(src.$j,{})," Loading…"]})}]}),placement:"bottom-end"}}},{identifier:sceneTypes.x.Notebooks,label:"Notebooks",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconNotebook,{}),to:urls.j.notebooks()},{identifier:sceneTypes.x.DataManagement,label:"Data management",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconDatabase,{}),logic:isUsingSidebar?dataManagementSidebarLogic:void 0,to:isUsingSidebar?void 0:urls.j.eventDefinitions()},{identifier:sceneTypes.x.PersonsManagement,label:"People and groups",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconPeople,{}),logic:isUsingSidebar?personsAndGroupsSidebarLogic:void 0,to:isUsingSidebar?void 0:urls.j.persons()},{identifier:sceneTypes.x.Activity,label:"Activity",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconLive,{}),to:urls.j.activity()}]:[{identifier:sceneTypes.x.Products,label:"Welcome to PostHog",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconLogomark,{}),to:urls.j.products()}];return featureFlags[constants.y8.ARTIFICIAL_HOG]&§ionOne.splice(1,0,{identifier:sceneTypes.x.Max,label:"Max AI",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconSparkles,{}),to:urls.j.max()}),[sectionOne,[{identifier:sceneTypes.x.SavedInsights,label:"Product analytics",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconGraph,{}),logic:isUsingSidebar?insightsSidebarLogic:void 0,to:isUsingSidebar?void 0:urls.j.savedInsights(),sideAction:{icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconPlusSmall,{}),to:urls.j.insightNew(),tooltip:"New insight",identifier:sceneTypes.x.Insight}},{identifier:sceneTypes.x.WebAnalytics,label:"Web analytics",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconPieChart,{}),to:isUsingSidebar?void 0:urls.j.webAnalytics()},{identifier:sceneTypes.x.Replay,label:"Session replay",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconRewindPlay,{}),to:urls.j.replay()},featureFlags[constants.y8.ERROR_TRACKING]?{identifier:sceneTypes.x.ErrorTracking,label:"Error tracking",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconWarning,{}),to:urls.j.errorTracking(),tag:"alpha"}:null,featureFlags[constants.y8.HEATMAPS_UI]?{identifier:sceneTypes.x.Heatmaps,label:"Heatmaps",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconCursorClick,{}),to:isUsingSidebar?void 0:urls.j.heatmaps(),tag:"alpha"}:null,{identifier:sceneTypes.x.FeatureFlags,label:"Feature flags",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconToggle,{}),logic:isUsingSidebar?featureFlagsSidebarLogic:void 0,to:isUsingSidebar?void 0:urls.j.featureFlags()},{identifier:sceneTypes.x.Experiments,label:"Experiments",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconTestTube,{}),logic:isUsingSidebar?experimentsSidebarLogic:void 0,to:isUsingSidebar?void 0:urls.j.experiments()},{identifier:sceneTypes.x.Surveys,label:"Surveys",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconChat,{}),to:urls.j.surveys()},"test"!==featureFlags[constants.y8.PRODUCT_INTRO_PAGES]||hasOnboardedFeatureFlags?{identifier:sceneTypes.x.EarlyAccessFeatures,label:"Early access features",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconRocket,{}),to:urls.j.earlyAccessFeatures()}:null,{identifier:sceneTypes.x.DataWarehouse,label:"Data warehouse",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconServer,{}),to:isUsingSidebar?void 0:urls.j.dataWarehouse()},featureFlags[constants.y8.DATA_MODELING]&&hasOnboardedAnyProduct?{identifier:sceneTypes.x.DataModel,label:"Data model",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconServer,{}),to:isUsingSidebar?void 0:urls.j.dataModel()}:null,hasOnboardedAnyProduct?{identifier:sceneTypes.x.Pipeline,label:"Data pipeline",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconDecisionTree,{}),to:urls.j.pipeline()}:null,featureFlags[constants.y8.MESSAGING]&&hasOnboardedAnyProduct?{identifier:sceneTypes.x.MessagingBroadcasts,label:"Messaging",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconMegaphone,{}),to:urls.j.messagingBroadcasts(),tag:"alpha"}:null].filter(utils.DX)]}],navbarItemIdMapping:[s=>[s.navbarItems],navbarItems=>Object.fromEntries(navbarItems.flat().map(item=>[item.identifier,item]))],sidebarOverslideDirection:[s=>[s.sidebarOverslide],sidebarOverslide=>sidebarOverslide<0?"min":sidebarOverslide>0?"max":null],activeNavbarItem:[s=>[s.activeNavbarItemId,s.navbarItemIdMapping],(activeNavbarItemId,navbarItemIdMapping)=>{let item=activeNavbarItemId?navbarItemIdMapping[activeNavbarItemId]:null;return item&&"logic"in item?item:null}],searchTerm:[s=>[s.internalSearchTerm,s.isSearchShown],(internalSearchTerm,isSearchShown)=>isSearchShown?internalSearchTerm:""],sidebarContentsFlattened:[s=>[state=>s.activeNavbarItem(state)?.logic?.findMounted()?.selectors.contents(state)||null],sidebarContents=>sidebarContents?sidebarContents.flatMap(item=>"items"in item?item.items:item):[]],normalizedActiveListItemKey:[s=>[state=>s.activeNavbarItem(state)?.logic?.findMounted()?.selectors.activeListItemKey?.(state)||null],activeListItemKey=>activeListItemKey?Array.isArray(activeListItemKey)?activeListItemKey.join(ITEM_KEY_PART_SEPARATOR):activeListItemKey:null],activeNavbarItemId:[s=>[s.activeNavbarItemIdRaw,featureFlagLogic.h.selectors.featureFlags],(activeNavbarItemIdRaw,featureFlags)=>featureFlags[constants.y8.POSTHOG_3000_NAV]?activeNavbarItemIdRaw:null],newItemCategory:[s=>[state=>s.activeNavbarItem(state)?.logic?.findMounted()?.selectors.contents(state)||null,s.newItemInlineCategory,lib.router.selectors.location],(sidebarContents,newItemInlineCategory,location1)=>sidebarContents&&(newItemInlineCategory||sidebarContents.find(category=>"string"==typeof category.onAdd&&category.onAdd===location1.pathname)?.key)||null]}),(0,kea_subscriptions_lib.Vt)(_ref15=>{let{props,cache,actions,values}=_ref15;return{isResizeInProgress:isResizeInProgress=>{if(isResizeInProgress)return cache.onMouseMove=e=>actions.syncSidebarWidthWithMouseMove(e.movementX),cache.onMouseUp=e=>{0===e.button&&actions.endResize()},document.addEventListener("mousemove",cache.onMouseMove),document.addEventListener("mouseup",cache.onMouseUp),()=>{};document.removeEventListener("mousemove",cache.onMouseMove),document.removeEventListener("mouseup",cache.onMouseUp)},sidebarContentsFlattened:sidebarContentsFlattened=>{for(let item of sidebarContentsFlattened)item.ref||(item.ref=react.createRef());actions.setLastFocusedItemIndex(-1)},lastFocusedItemIndex:lastFocusedItemIndex=>{if(lastFocusedItemIndex>=0){let item=values.sidebarContentsFlattened[lastFocusedItemIndex];item.ref?.current?.focus()}else props.inputElement?.focus()}}}),(0,index_esm.events)(_ref16=>{let{props,actions,cache}=_ref16;return{afterMount:()=>{cache.onResize=()=>actions.syncSidebarWidthWithViewport(),cache.onKeyDown=e=>{"b"===e.key&&(e.metaKey||e.ctrlKey)&&(actions.toggleSidebar(),e.preventDefault()),"f"===e.key&&e.shiftKey&&(e.metaKey||e.ctrlKey)&&(actions.setIsSearchShown(!0),props.inputElement?.focus(),e.preventDefault())},window.addEventListener("resize",cache.onResize),window.addEventListener("keydown",cache.onKeyDown)},beforeUnmount:()=>{window.removeEventListener("resize",cache.onResize),window.removeEventListener("resize",cache.onKeyDown)}}})])},"./frontend/src/layout/navigation-3000/sidepanel/SidePanel.tsx":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{h:()=>SIDE_PANEL_TABS,W:()=>SidePanel_SidePanel});var injectStylesIntoStyleTag=__webpack_require__("./node_modules/.pnpm/style-loader@2.0.0_webpack@5.88.2/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),injectStylesIntoStyleTag_default=__webpack_require__.n(injectStylesIntoStyleTag),SidePanel=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/layout/navigation-3000/sidepanel/SidePanel.scss"),SidePanel_default=__webpack_require__.n(SidePanel),options={};options.insert="head",options.singleton=!1,injectStylesIntoStyleTag_default()(SidePanel_default(),options),SidePanel_default().locals;var posthog_icons_es=__webpack_require__("./node_modules/.pnpm/@posthog+icons@0.8.5_react-dom@18.2.0_react@18.2.0/node_modules/@posthog/icons/dist/posthog-icons.es.js"),src=__webpack_require__("./frontend/@posthog/lemon-ui/src/index.ts"),clsx_m=__webpack_require__("./node_modules/.pnpm/clsx@1.2.1/node_modules/clsx/dist/clsx.m.js"),index_esm=__webpack_require__("./node_modules/.pnpm/kea@3.1.5_react@18.2.0/node_modules/kea/lib/index.esm.js"),Resizer=__webpack_require__("./frontend/src/lib/components/Resizer/Resizer.tsx"),resizerLogic=__webpack_require__("./frontend/src/lib/components/Resizer/resizerLogic.ts"),react=__webpack_require__("./node_modules/.pnpm/react@18.2.0/node_modules/react/index.js"),NotebookPanel=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/notebooks/NotebookPanel/NotebookPanel.scss"),NotebookPanel_default=__webpack_require__.n(NotebookPanel),NotebookPanel_options={};NotebookPanel_options.insert="head",NotebookPanel_options.singleton=!1,injectStylesIntoStyleTag_default()(NotebookPanel_default(),NotebookPanel_options),NotebookPanel_default().locals;var useResizeObserver=__webpack_require__("./frontend/src/lib/hooks/useResizeObserver.ts"),icons=__webpack_require__("./frontend/src/lib/lemon-ui/icons/index.ts"),urls=__webpack_require__("./frontend/src/scenes/urls.ts"),sidePanelStateLogic=__webpack_require__("./frontend/src/layout/navigation-3000/sidepanel/sidePanelStateLogic.tsx"),jsx_runtime=__webpack_require__("./node_modules/.pnpm/react@18.2.0/node_modules/react/jsx-runtime.js");function SidePanelPaneHeader(_ref){let{children,title}=_ref,{modalMode}=(0,index_esm.useValues)(sidePanelStateLogic.f),{closeSidePanel}=(0,index_esm.useActions)(sidePanelStateLogic.f);return(0,jsx_runtime.jsxs)("header",{className:(0,clsx_m.default)("border-b shrink-0 flex items-center justify-end gap-1",{"p-1 h-10":!modalMode,"pb-2 mt-2 mx-3":modalMode}),children:[title?(0,jsx_runtime.jsx)("h3",{className:(0,clsx_m.default)("flex-1 flex items-center gap-1 font-semibold mb-0 truncate",{"text-base px-2":!modalMode}),children:title}):null,children,(0,jsx_runtime.jsx)(src.u,{placement:modalMode?"top":"bottom-end",title:modalMode?"Close":"Close this side panel",children:(0,jsx_runtime.jsx)(src.Jp,{size:"small",sideIcon:(0,jsx_runtime.jsx)(posthog_icons_es.IconX,{}),onClick:()=>closeSidePanel()})})]})}var types=__webpack_require__("./frontend/src/types.ts"),Notebook=__webpack_require__("./frontend/src/scenes/notebooks/Notebook/Notebook.tsx"),notebooksModel=__webpack_require__("./frontend/src/models/notebooksModel.ts"),NotebookSelectButton=__webpack_require__("./frontend/src/scenes/notebooks/NotebookSelectButton/NotebookSelectButton.tsx");function NotebookListMini(_ref){let{selectedNotebookId}=_ref,{notebooks,notebookTemplates}=(0,index_esm.useValues)(notebooksModel.L),selectedTitle="scratchpad"===selectedNotebookId?"My scratchpad":notebookTemplates.find(notebook=>notebook.short_id===selectedNotebookId)?.title||notebooks.find(notebook=>notebook.short_id===selectedNotebookId)?.title||"Untitled";return(0,jsx_runtime.jsx)(NotebookSelectButton.tI,{placement:"bottom-start",children:(0,jsx_runtime.jsx)(src.Jp,{size:"small",truncate:!0,children:selectedTitle||"Notebooks"})})}var notebookLogic=__webpack_require__("./frontend/src/scenes/notebooks/Notebook/notebookLogic.ts"),NotebookMeta=__webpack_require__("./frontend/src/scenes/notebooks/Notebook/NotebookMeta.tsx"),NotebookMenu=__webpack_require__("./frontend/src/scenes/notebooks/NotebookMenu.tsx"),notebookPanelLogic=__webpack_require__("./frontend/src/scenes/notebooks/NotebookPanel/notebookPanelLogic.ts");function NotebookPanelDropzone(){let[isDragActive,setIsDragActive]=(0,react.useState)(!1),{dropMode,droppedResource}=(0,index_esm.useValues)(notebookPanelLogic.F),{setDroppedResource}=(0,index_esm.useActions)(notebookPanelLogic.F);return dropMode||droppedResource?(0,jsx_runtime.jsx)("div",{className:(0,clsx_m.default)("NotebookPanelDropzone",{"NotebookPanelDropzone--active":isDragActive,"NotebookPanelDropzone--dropped":!!droppedResource}),onDragEnter:()=>setIsDragActive(!0),onDragLeave:()=>setIsDragActive(!1),onDragOver:e=>e.preventDefault(),onDrop:event=>{if(event.preventDefault(),setIsDragActive(!1),!event.dataTransfer)return null;let text=event.dataTransfer.getData("text/plain"),node=event.dataTransfer.getData("node"),properties=event.dataTransfer.getData("properties");setDroppedResource(node?{type:node,attrs:properties?JSON.parse(properties):{}}:text)},children:droppedResource?(0,jsx_runtime.jsxs)("div",{className:"NotebookPanelDropzone__dropped",children:[(0,jsx_runtime.jsxs)("div",{className:"flex items-start justify-between",children:[(0,jsx_runtime.jsx)("h2",{children:"Add dropped resource to..."}),(0,jsx_runtime.jsx)(src.Jp,{size:"small",onClick:()=>setDroppedResource(null),children:"Cancel"})]}),(0,jsx_runtime.jsx)(NotebookSelectButton.Ld,{onNotebookOpened:notebookLogic=>{setDroppedResource(null),droppedResource&&("string"!=typeof droppedResource?notebookLogic.actions.insertAfterLastNode(droppedResource):notebookLogic.actions.pasteAfterLastNode(droppedResource))},resource:!0})]}):(0,jsx_runtime.jsx)("div",{className:"NotebookPanelDropzone__message",children:"Drop here for a different Notebook"})}):null}var exporter=__webpack_require__("./frontend/src/lib/components/ExportButton/exporter.tsx"),dayjs=__webpack_require__("./frontend/src/lib/dayjs.ts"),exportsLogic=__webpack_require__("./frontend/src/lib/components/ExportButton/exportsLogic.ts"),featureFlagLogic=__webpack_require__("./frontend/src/lib/logic/featureFlagLogic.ts"),activityForSceneLogic=__webpack_require__("./frontend/src/layout/navigation-3000/sidepanel/panels/activity/activityForSceneLogic.ts");let sidePanelExportsLogic=(0,index_esm.kea)([(0,index_esm.path)(["scenes","navigation","sidepanel","sidePanelExportsLogic"]),(0,index_esm.connect)({values:[featureFlagLogic.h,["featureFlags"],activityForSceneLogic.C,["sceneActivityFilters"],exportsLogic.exportsLogic,["exports","freshUndownloadedExports"]],actions:[sidePanelStateLogic.f,["openSidePanel"],exportsLogic.exportsLogic,["loadExports","removeFresh"]]}),(0,index_esm.afterMount)(_ref=>{let{actions}=_ref;actions.loadExports()})]),ExportsContent=()=>{let{exports,freshUndownloadedExports}=(0,index_esm.useValues)(sidePanelExportsLogic),{loadExports,removeFresh}=(0,index_esm.useActions)(sidePanelExportsLogic);return(0,jsx_runtime.jsx)("div",{className:"flex flex-col flex-1 overflow-hidden",children:(0,jsx_runtime.jsxs)("div",{className:"flex-1 overflow-y-auto p-2",children:[(0,jsx_runtime.jsx)("div",{className:"flex justify-end",children:(0,jsx_runtime.jsx)(src.Jp,{onClick:loadExports,type:"tertiary",size:"small",icon:(0,jsx_runtime.jsx)(icons.tr,{}),children:"Refresh"})}),exports.map(asset=>{let isNotDownloaded=freshUndownloadedExports.some(fresh=>fresh.id===asset.id);return(0,jsx_runtime.jsx)(src.Jp,{type:isNotDownloaded?"primary":"secondary",fullWidth:!0,className:"mt-2",disabledReason:asset.has_content?void 0:"Export not ready yet",onClick:()=>{removeFresh(asset),(0,exporter._)(asset)},sideIcon:asset.has_content?(0,jsx_runtime.jsx)(posthog_icons_es.IconDownload,{className:"text-link"}):void 0,children:(0,jsx_runtime.jsxs)("div",{className:"flex items-center justify-between flex-auto p-2",children:[(0,jsx_runtime.jsxs)("div",{children:[(0,jsx_runtime.jsx)("span",{className:"text-link font-medium block",children:asset.filename}),asset.created_at&&(0,jsx_runtime.jsx)("span",{className:"text-xs mt-1",children:(0,dayjs.Bv)(asset.created_at).fromNow()}),asset.expires_after&&(0,jsx_runtime.jsxs)("span",{className:"text-xs text-muted mt-1",children:[" ","\xb7 expires ",(0,dayjs.Bv)(asset.expires_after).fromNow()]}),isNotDownloaded&&(0,jsx_runtime.jsx)("span",{className:"text-xs text-muted mt-1",children:" \xb7 not downloaded yet"})]}),(0,jsx_runtime.jsx)("div",{children:!asset.has_content&&(0,jsx_runtime.jsx)(src.$j,{})})]})},asset.id)})]})})};var themeLogic=__webpack_require__("./frontend/src/layout/navigation-3000/themeLogic.ts"),hedgehogs=__webpack_require__("./frontend/src/lib/components/hedgehogs.tsx"),LemonProgressCircle=__webpack_require__("./frontend/src/lib/lemon-ui/LemonProgressCircle/LemonProgressCircle.tsx"),eventUsageLogic=__webpack_require__("./frontend/src/lib/utils/eventUsageLogic.ts"),activationLogic=__webpack_require__("./frontend/src/layout/navigation-3000/sidepanel/panels/activation/activationLogic.ts");let ActivationTask=_ref2=>{let{id,name,description,completed,canSkip,skipped,url}=_ref2,{runTask,skipTask}=(0,index_esm.useActions)(activationLogic.z),{reportActivationSideBarTaskClicked}=(0,index_esm.useActions)(eventUsageLogic.vx),content=(0,jsx_runtime.jsxs)("div",{className:"my-4 mx-2",children:[(0,jsx_runtime.jsx)("p",{className:"m-0",children:name}),!completed&&!skipped&&(0,jsx_runtime.jsx)("p",{className:"font-normal text-xs mt-2 mb-0 mx-0",children:description})]}),params={id,fullWidth:!0,type:"secondary",icon:completed?(0,jsx_runtime.jsx)(posthog_icons_es.IconCheckCircle,{}):skipped?(0,jsx_runtime.jsx)(posthog_icons_es.IconX,{}):null,tooltip:name};return url?(params.to=url,params.targetBlank=!0,params.onClick=()=>{reportActivationSideBarTaskClicked(id)}):params.onClick=()=>{runTask(id),reportActivationSideBarTaskClicked(id)},(0,jsx_runtime.jsx)("li",{children:completed||skipped||!canSkip?(0,jsx_runtime.jsx)(src.Jp,{...params,children:content}):(0,jsx_runtime.jsx)(src.Jp,{...params,sideAction:{icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconX,{}),tooltip:"Skip task",onClick:()=>skipTask(id)},children:content})})};var ActivityLog=__webpack_require__("./frontend/src/lib/components/ActivityLog/ActivityLog.tsx"),humanizeActivity=__webpack_require__("./frontend/src/lib/components/ActivityLog/humanizeActivity.tsx"),MemberSelect=__webpack_require__("./frontend/src/lib/components/MemberSelect.tsx"),PayGateMini=__webpack_require__("./frontend/src/lib/components/PayGateMini/PayGateMini.tsx"),ScrollableShadows=__webpack_require__("./frontend/src/lib/components/ScrollableShadows/ScrollableShadows.tsx"),constants=__webpack_require__("./frontend/src/lib/constants.tsx"),usePageVisibility=__webpack_require__("./frontend/src/lib/hooks/usePageVisibility.ts"),userLogic=__webpack_require__("./frontend/src/scenes/userLogic.ts"),sidePanelActivityLogic=__webpack_require__("./frontend/src/layout/navigation-3000/sidepanel/panels/activity/sidePanelActivityLogic.tsx"),KeyboardShortcut=__webpack_require__("./frontend/src/layout/navigation-3000/components/KeyboardShortcut.tsx"),commentsLogic=__webpack_require__("./frontend/src/scenes/comments/commentsLogic.ts");let CommentComposer=props=>{let{key,composedComment,commentsLoading,replyingCommentId,itemContext}=(0,index_esm.useValues)((0,commentsLogic.x)(props)),{setComposedComment,sendComposedContent,setReplyingComment,setComposerRef,clearItemContext}=(0,index_esm.useActions)((0,commentsLogic.x)(props)),placeholder=replyingCommentId?"Reply...":`Comment on ${props.item_id?"this ":""}${(0,humanizeActivity.VI)(props.scope,!!props.item_id)}`;return(0,react.useEffect)(()=>()=>clearItemContext(),[key]),(0,jsx_runtime.jsxs)("div",{className:"space-y-2",children:[(0,jsx_runtime.jsx)(src.X7,{"data-attr":"comment-composer",placeholder:placeholder,value:composedComment,onChange:setComposedComment,disabled:commentsLoading,onPressCmdEnter:sendComposedContent,ref:setComposerRef}),(0,jsx_runtime.jsxs)("div",{className:"flex justify-between items-center gap-2",children:[(0,jsx_runtime.jsx)("div",{className:"flex-1"}),replyingCommentId?(0,jsx_runtime.jsx)(src.Jp,{type:"secondary",onClick:()=>setReplyingComment(null),children:"Cancel reply"}):null,itemContext?(0,jsx_runtime.jsx)(src.Jp,{type:"secondary",onClick:()=>clearItemContext(),children:"Cancel"}):null,(0,jsx_runtime.jsxs)(src.Jp,{type:"primary",onClick:sendComposedContent,disabledReason:composedComment?null:"No message",sideIcon:(0,jsx_runtime.jsx)(KeyboardShortcut.e,{command:!0,enter:!0}),"data-attr":"discussions-comment",children:["Add ",replyingCommentId?"reply":"comment"]})]})]})};var apps_common_src=__webpack_require__("./frontend/@posthog/apps-common/src/index.ts"),LemonMarkdown=__webpack_require__("./frontend/src/lib/lemon-ui/LemonMarkdown/index.ts");let Comment=_ref=>{var _comment$created_by$f;let{comment}=_ref,{editingComment,commentsLoading,replyingCommentId}=(0,index_esm.useValues)(commentsLogic.x),{deleteComment,setEditingComment,persistEditedComment,setReplyingComment}=(0,index_esm.useActions)(commentsLogic.x),ref=(0,react.useRef)(null),isHighlighted=replyingCommentId===comment.id||editingComment?.id===comment.id;return(0,react.useEffect)(()=>{isHighlighted&&ref.current?.scrollIntoView()},[isHighlighted]),(0,jsx_runtime.jsxs)("div",{ref:ref,className:(0,clsx_m.default)("Comment border rounded-lg bg-bg-light",isHighlighted&&"border-primary-3000"),"data-comment-id":comment.id,children:[(0,jsx_runtime.jsxs)("div",{className:"flex-1 flex justify-start p-2 gap-2",children:[(0,jsx_runtime.jsx)(src.YY,{className:"mt-1",size:"xl",user:comment.created_by}),(0,jsx_runtime.jsxs)("div",{className:"flex flex-col flex-1",children:[(0,jsx_runtime.jsxs)("div",{className:"flex items-center gap-2",children:[(0,jsx_runtime.jsx)("span",{className:"flex-1 font-semibold ",children:null!==(_comment$created_by$f=comment.created_by?.first_name)&&void 0!==_comment$created_by$f?_comment$created_by$f:"Unknown user"}),comment.created_at?(0,jsx_runtime.jsx)("span",{className:"text-xs",children:(0,jsx_runtime.jsx)(apps_common_src.w4,{time:comment.created_at})}):null,(0,jsx_runtime.jsx)(src.d6,{items:[{icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconShare,{}),label:"Reply",onClick:()=>{var _comment$source_comme;return setReplyingComment(null!==(_comment$source_comme=comment.source_comment)&&void 0!==_comment$source_comme?_comment$source_comme:comment.id)}},{icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconPencil,{}),label:"Edit",onClick:()=>setEditingComment(comment)},{icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconCheck,{}),label:"Delete",onClick:()=>deleteComment(comment)}],children:(0,jsx_runtime.jsx)(src.Jp,{icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconEllipsis,{}),size:"xsmall"})})]}),(0,jsx_runtime.jsx)(LemonMarkdown.j,{lowKeyHeadings:!0,children:comment.content}),comment.version?(0,jsx_runtime.jsx)("span",{className:"text-xs text-muted italic",children:"(edited)"}):null]})]}),editingComment?.id===comment.id?(0,jsx_runtime.jsxs)("div",{className:"space-y-2 border-t p-2",children:[(0,jsx_runtime.jsx)(src.X7,{"data-attr":"comment-composer",placeholder:"Edit comment",value:editingComment.content,onChange:value=>setEditingComment({...editingComment,content:value}),disabled:commentsLoading,onPressCmdEnter:persistEditedComment}),(0,jsx_runtime.jsxs)("div",{className:"flex justify-between items-center gap-2",children:[(0,jsx_runtime.jsx)("div",{className:"flex-1"}),(0,jsx_runtime.jsx)(src.Jp,{type:"secondary",onClick:()=>setEditingComment(null),disabled:commentsLoading,children:"Cancel"}),(0,jsx_runtime.jsx)(src.Jp,{type:"primary",onClick:persistEditedComment,disabledReason:editingComment.content?commentsLoading?"Saving...":null:"No message",sideIcon:(0,jsx_runtime.jsx)(KeyboardShortcut.e,{command:!0,enter:!0}),children:"Save changes"})]})]}):null]})},CommentWithReplies=_ref2=>{let{commentWithReplies}=_ref2,{comment,replies}=commentWithReplies;return(0,jsx_runtime.jsxs)("div",{className:"relative space-y-2",children:[comment?(0,jsx_runtime.jsx)(Comment,{comment:comment}):(0,jsx_runtime.jsx)("div",{className:"border rounded border-dashed p-2 font-semibold italic bg-bg-accent-3000 text-muted-alt",children:"Deleted comment"}),(0,jsx_runtime.jsx)("div",{className:"pl-8 space-y-2",children:replies?.map(x=>jsx_runtime.jsx(CommentWithReplies,{commentWithReplies:{id:x.id,comment:x,replies:[]}},x.id))})]})},CommentsList=props=>{let{key,commentsWithReplies,commentsLoading}=(0,index_esm.useValues)((0,commentsLogic.x)(props)),{loadComments}=(0,index_esm.useActions)((0,commentsLogic.x)(props));return(0,react.useEffect)(()=>{loadComments()},[key]),(0,jsx_runtime.jsx)(index_esm.BindLogic,{logic:commentsLogic.x,props:props,children:(0,jsx_runtime.jsxs)("div",{className:"flex flex-col",children:[!commentsWithReplies?.length&&commentsLoading?(0,jsx_runtime.jsx)("div",{className:"space-y-2",children:(0,jsx_runtime.jsx)(src.yW,{className:"h-10 w-full"})}):commentsWithReplies?.length?null:(0,jsx_runtime.jsxs)("div",{className:"mx-auto p-8 max-w-160 mt-8 space-y-4",children:[(0,jsx_runtime.jsx)("div",{className:"max-w-120 mx-auto",children:(0,jsx_runtime.jsx)(hedgehogs.PhonePairHogs,{className:"w-full h-full"})}),(0,jsx_runtime.jsx)("h2",{children:"Start the discussion!"}),(0,jsx_runtime.jsx)("p",{children:"You can add comments about this page for your team members to see. Great for sharing context or ideas without getting in the way of the thing you are commenting on"})]}),(0,jsx_runtime.jsx)("div",{className:"space-y-2",children:commentsWithReplies?.map(x=>jsx_runtime.jsx(CommentWithReplies,{commentWithReplies:x},x.id))})]})})};var lib=__webpack_require__("./node_modules/.pnpm/kea-loaders@3.0.0_kea@3.1.5/node_modules/kea-loaders/lib/index.js"),kea_subscriptions_lib=__webpack_require__("./node_modules/.pnpm/kea-subscriptions@3.0.1_kea@3.1.5/node_modules/kea-subscriptions/lib/index.js"),api=__webpack_require__("./frontend/src/lib/api.ts");let sidePanelDiscussionLogic=(0,index_esm.kea)([(0,index_esm.path)(["scenes","navigation","sidepanel","sidePanelDiscussionLogic"]),(0,index_esm.actions)({loadCommentCount:!0,resetCommentCount:!0}),(0,index_esm.connect)({values:[featureFlagLogic.h,["featureFlags"],activityForSceneLogic.C,["sceneActivityFilters"]]}),(0,lib.loaders)(_ref=>{let{values}=_ref;return{commentCount:[0,{loadCommentCount:async(_,breakpoint)=>{if(!values.featureFlags[constants.y8.DISCUSSIONS]||!values.commentsLogicProps)return 0;await breakpoint(100);let response=await api.ZP.comments.getCount({...values.commentsLogicProps});return breakpoint(),response},resetCommentCount:()=>0}]}}),(0,index_esm.selectors)({commentsLogicProps:[s=>[s.sceneActivityFilters],activityFilters=>activityFilters?.scope?{scope:activityFilters.scope,item_id:activityFilters.item_id}:null]}),(0,kea_subscriptions_lib.Vt)(_ref2=>{let{actions}=_ref2;return{commentsLogicProps:props=>{props?actions.loadCommentCount():actions.resetCommentCount()}}})]),DiscussionContent=_ref=>{let{logicProps}=_ref,{selectedTabOptions}=(0,index_esm.useValues)(sidePanelStateLogic.f),{setReplyingComment}=(0,index_esm.useActions)((0,commentsLogic.x)(logicProps));return(0,react.useEffect)(()=>{selectedTabOptions&&setReplyingComment(selectedTabOptions)},[selectedTabOptions]),(0,jsx_runtime.jsxs)("div",{className:"flex flex-col flex-1 overflow-hidden",children:[(0,jsx_runtime.jsx)("div",{className:"flex-1 overflow-y-auto p-2",children:(0,jsx_runtime.jsx)(CommentsList,{...logicProps})}),(0,jsx_runtime.jsx)("div",{className:"border-t px-3 pb-3",children:(0,jsx_runtime.jsx)(CommentComposer,{...logicProps})})]})};var kea_router_lib=__webpack_require__("./node_modules/.pnpm/kea-router@3.2.0_kea@3.1.5/node_modules/kea-router/lib/index.js"),sceneLogic=__webpack_require__("./frontend/src/scenes/sceneLogic.ts");let POSTHOG_WEBSITE_ORIGIN="https://posthog.com",sanitizePath=path=>"/"===path[0]?path:`/${path}`,getPathFromUrl=urlOrPath=>{try{let url=new URL(urlOrPath);return url.pathname+url.search+url.hash}catch(e){return urlOrPath}},sidePanelDocsLogic=(0,index_esm.kea)([(0,index_esm.path)(["scenes","navigation","sidepanel","sidePanelDocsLogic"]),(0,index_esm.props)({}),(0,index_esm.connect)({actions:[sidePanelStateLogic.f,["openSidePanel","closeSidePanel","setSidePanelOptions"]],values:[sceneLogic.k,["sceneConfig"],sidePanelStateLogic.f,["selectedTabOptions"]]}),(0,index_esm.actions)({updatePath:path=>({path}),setInitialPath:path=>({path}),unmountIframe:!0,handleExternalUrl:urlOrPath=>({urlOrPath}),setMenuOptions:menuOptions=>({menuOptions}),setIframeReady:ready=>({ready}),setActiveMenuName:activeMenuName=>({activeMenuName}),navigateToPage:path=>({path})}),(0,index_esm.reducers)(()=>({iframeReady:[!1,{setIframeReady:(_,_ref)=>{let{ready}=_ref;return ready}}],menuOptions:[null,{setMenuOptions:(_,_ref2)=>{let{menuOptions}=_ref2;return menuOptions}}],activeMenuName:[null,{setActiveMenuName:(_,_ref3)=>{let{activeMenuName}=_ref3;return activeMenuName}}],currentPath:[null,{updatePath:(_,_ref4)=>{let{path}=_ref4;return sanitizePath(path)}}],initialPath:["/docs",{persist:!0},{setInitialPath:(_,_ref5)=>{let{path}=_ref5;return sanitizePath(path)}}]})),(0,index_esm.selectors)({iframeSrc:[s=>[s.initialPath],initialPath=>`${POSTHOG_WEBSITE_ORIGIN}${null!=initialPath?initialPath:""}`],currentUrl:[s=>[s.currentPath],currentPath=>`${POSTHOG_WEBSITE_ORIGIN}${null!=currentPath?currentPath:""}`]}),(0,index_esm.listeners)(_ref6=>{let{actions,values,props}=_ref6;return{openSidePanel:_ref7=>{let{options}=_ref7;if(options){let initialPath=getPathFromUrl(options);actions.setInitialPath(initialPath),actions.navigateToPage(initialPath)}},unmountIframe:()=>{var _values$currentPath;actions.setInitialPath(null!==(_values$currentPath=values.currentPath)&&void 0!==_values$currentPath?_values$currentPath:"/docs")},handleExternalUrl:_ref8=>{let{urlOrPath}=_ref8;kea_router_lib.router.actions.push(getPathFromUrl(urlOrPath))},navigateToPage:_ref9=>{let{path}=_ref9;path&&props.iframeRef.current?.contentWindow?.postMessage({type:"navigate",url:path},"*")},updatePath:_ref10=>{let{path}=_ref10;actions.setSidePanelOptions(path)}}}),(0,index_esm.afterMount)(_ref11=>{let{actions,values,cache}=_ref11;if(values.selectedTabOptions){let initialPath=getPathFromUrl(values.selectedTabOptions);actions.setInitialPath(initialPath)}else values.sceneConfig?.defaultDocsPath&&actions.setInitialPath(values.sceneConfig?.defaultDocsPath);cache.onWindowMessage=event=>{if(event.origin===POSTHOG_WEBSITE_ORIGIN){if("internal-navigation"===event.data.type){actions.updatePath(event.data.url);return}if("docs-ready"===event.data.type){actions.setIframeReady(!0);return}if("external-navigation"===event.data.type){actions.handleExternalUrl(event.data.url);return}if("docs-menu"===event.data.type){actions.setMenuOptions(event.data.menu);return}if("docs-active-menu"===event.data.type){actions.setActiveMenuName(event.data.activeMenuName);return}console.warn("Unhandled iframe message from Docs:",event.data)}},window.addEventListener("message",cache.onWindowMessage)}),(0,index_esm.beforeUnmount)(_ref12=>{var _values$currentPath2;let{actions,values,cache}=_ref12;actions.setInitialPath(null!==(_values$currentPath2=values.currentPath)&&void 0!==_values$currentPath2?_values$currentPath2:"/docs"),window.removeEventListener("message",cache.onWindowMessage)})]);function SidePanelDocsSkeleton(){return(0,jsx_runtime.jsxs)("div",{className:"absolute inset-0 p-4 space-y-2",children:[(0,jsx_runtime.jsx)(src.yW,{className:"w-full h-10 mb-12"}),(0,jsx_runtime.jsx)(src.yW,{className:"w-1/3 h-8"}),(0,jsx_runtime.jsx)(src.yW,{className:"w-1/2 h-4 mb-10"}),(0,jsx_runtime.jsx)(src.yW,{className:"w-full h-4"}),(0,jsx_runtime.jsx)(src.yW,{className:"w-full h-4 opacity-80"}),(0,jsx_runtime.jsx)(src.yW,{className:"w-full h-4 opacity-60"}),(0,jsx_runtime.jsx)(src.yW,{className:"w-full h-4 opacity-40"}),(0,jsx_runtime.jsx)(src.yW,{className:"w-1/2 h-4 opacity-20"})]})}var experimentLogic=__webpack_require__("./frontend/src/scenes/experiments/experimentLogic.tsx"),feature_flags_featureFlagLogic=__webpack_require__("./frontend/src/scenes/feature-flags/featureFlagLogic.ts"),FeatureFlagReleaseConditions=__webpack_require__("./frontend/src/scenes/feature-flags/FeatureFlagReleaseConditions.tsx"),FeaturePreviews=__webpack_require__("./frontend/src/layout/FeaturePreviews/FeaturePreviews.tsx"),Settings=__webpack_require__("./frontend/src/scenes/settings/Settings.tsx"),settingsLogic=__webpack_require__("./frontend/src/scenes/settings/settingsLogic.ts"),sidePanelSettingsLogic=__webpack_require__("./frontend/src/layout/navigation-3000/sidepanel/panels/sidePanelSettingsLogic.tsx"),utils=__webpack_require__("./frontend/src/lib/utils.tsx"),sidePanelLogic=__webpack_require__("./frontend/src/layout/navigation-3000/sidepanel/sidePanelLogic.tsx"),sidePanelStatusLogic=__webpack_require__("./frontend/src/layout/navigation-3000/sidepanel/panels/sidePanelStatusLogic.tsx"),SupportForm=__webpack_require__("./frontend/src/lib/components/Support/SupportForm.tsx"),supportLogic=__webpack_require__("./frontend/src/lib/components/Support/supportLogic.ts"),billingLogic=__webpack_require__("./frontend/src/scenes/billing/billingLogic.tsx"),organizationLogic=__webpack_require__("./frontend/src/scenes/organizationLogic.tsx"),preflightLogic=__webpack_require__("./frontend/src/scenes/PreflightCheck/preflightLogic.tsx"),teamLogic=__webpack_require__("./frontend/src/scenes/teamLogic.tsx"),algoliasearch_lite_umd=__webpack_require__("./node_modules/.pnpm/algoliasearch@4.22.1/node_modules/algoliasearch/dist/algoliasearch-lite.umd.js"),algoliasearch_lite_umd_default=__webpack_require__.n(algoliasearch_lite_umd),useHits=__webpack_require__("./node_modules/.pnpm/react-instantsearch-core@7.6.0_algoliasearch@4.22.1_react@18.2.0/node_modules/react-instantsearch-core/dist/es/connectors/useHits.js"),useSearchBox=__webpack_require__("./node_modules/.pnpm/react-instantsearch-core@7.6.0_algoliasearch@4.22.1_react@18.2.0/node_modules/react-instantsearch-core/dist/es/connectors/useSearchBox.js"),useRefinementList=__webpack_require__("./node_modules/.pnpm/react-instantsearch-core@7.6.0_algoliasearch@4.22.1_react@18.2.0/node_modules/react-instantsearch-core/dist/es/connectors/useRefinementList.js"),InstantSearch=__webpack_require__("./node_modules/.pnpm/react-instantsearch-core@7.6.0_algoliasearch@4.22.1_react@18.2.0/node_modules/react-instantsearch-core/dist/es/components/InstantSearch.js"),AutoSizer=__webpack_require__("./node_modules/.pnpm/react-virtualized@9.22.5_react-dom@18.2.0_react@18.2.0/node_modules/react-virtualized/dist/es/AutoSizer/index.js"),List=__webpack_require__("./node_modules/.pnpm/react-virtualized@9.22.5_react-dom@18.2.0_react@18.2.0/node_modules/react-virtualized/dist/es/List/index.js");let searchClient=algoliasearch_lite_umd_default()("7VNQB5W0TX","37f41fd37095bc85af76ed4edc85eb5a"),rowRenderer=_ref=>{let{key,index,style,hits,activeOption}=_ref,{slug,title,type,resolved}=hits[index];return(0,jsx_runtime.jsx)("li",{style:style,role:"listitem",tabIndex:-1,className:"p-1 border-b last:border-b-0",children:(0,jsx_runtime.jsx)(src.Jp,{active:activeOption===index,to:`https://posthog.com/${slug}`,className:"[&_>span>span]:flex-col [&_>span>span]:items-start [&_>span>span]:space-y-1",children:(0,jsx_runtime.jsxs)("span",{children:[(0,jsx_runtime.jsxs)("span",{className:"flex space-x-2 items-center",children:[(0,jsx_runtime.jsx)("p",{className:"m-0 font-bold font-sans line-clamp-1",children:title}),"question"===type&&resolved&&(0,jsx_runtime.jsx)(posthog_icons_es.IconCheckCircle,{className:"text-success size-4 flex-shrink-0"})]}),(0,jsx_runtime.jsxs)("p",{className:"text-xs m-0 opacity-80 font-normal font-sans line-clamp-1",children:["/",slug]})]})})},key)},Hits=_ref2=>{let{activeOption}=_ref2,{hits}=(0,useHits.O)();return(0,jsx_runtime.jsx)("ol",{role:"listbox",className:"list-none m-0 p-0 h-[80vh]",children:(0,jsx_runtime.jsx)(AutoSizer.q,{children:_ref3=>{let{height,width}=_ref3;return(0,jsx_runtime.jsx)(List.aV,{scrollToIndex:activeOption,width:width,height:height,rowCount:hits.length,rowHeight:50,rowRenderer:options=>rowRenderer({...options,hits,activeOption})})}})})},SearchInput=_ref4=>{let{value,setValue}=_ref4,{refine}=(0,useSearchBox.l)();return(0,jsx_runtime.jsx)(src.DF,{onChange:value=>{setValue(value),refine(value)},value:value,type:"search",fullWidth:!0,placeholder:"Search..."})},tags=[{type:"all",label:"All"},{type:"docs",label:"Docs"},{type:"question",label:"Questions"},{type:"tutorial",label:"Tutorials"}],SearchTag=_ref5=>{let{type,label,active,onClick}=_ref5,{refine,items}=(0,useRefinementList.c)({attribute:"type"}),itemCount="all"!==type&&items.find(_ref6=>{let{value}=_ref6;return value===type})?.count;return(0,react.useEffect)(()=>{refine(type)},[]),(0,jsx_runtime.jsx)("button",{className:"p-0 cursor-pointer bg-bg-light",onClick:e=>{e.stopPropagation(),onClick(type)},children:(0,jsx_runtime.jsxs)(src.oe,{size:"medium",type:active?"primary":"option",children:[(0,jsx_runtime.jsx)("span",{children:label}),"all"!==type&&(0,jsx_runtime.jsxs)("span",{children:["(",null!=itemCount?itemCount:0,")"]})]})})},Tags=_ref7=>{let{activeTag,setActiveTag}=_ref7,handleClick=type=>{setActiveTag(type)};return(0,jsx_runtime.jsx)("ul",{className:"list-none m-0 p-0 flex space-x-1 mt-1 mb-0.5 pb-1.5 border-b px-2",children:tags.map(tag=>{let{type}=tag;return(0,jsx_runtime.jsx)("li",{children:(0,jsx_runtime.jsx)(SearchTag,{...tag,active:activeTag===type,onClick:handleClick})},type)})})},Search=()=>{let{openSidePanel}=(0,index_esm.useActions)(sidePanelStateLogic.f),{hits}=(0,useHits.O)(),{items,refine}=(0,useRefinementList.c)({attribute:"type"}),ref=(0,react.useRef)(null),[searchValue,setSearchValue]=(0,react.useState)(""),[activeOption,setActiveOption]=(0,react.useState)(),[activeTag,setActiveTag]=(0,react.useState)("all"),[searchOpen,setSearchOpen]=(0,react.useState)(!1);return(0,react.useEffect)(()=>{setSearchOpen(!!searchValue),setActiveOption(0)},[searchValue]),(0,react.useEffect)(()=>{if(setActiveOption(0),"all"===activeTag){let filteredItems=items.filter(_ref10=>{let{value}=_ref10;return tags.some(_ref11=>{let{type}=_ref11;return type===value})});filteredItems.forEach(_ref12=>{let{value,isRefined}=_ref12;isRefined||refine(value)})}else items.forEach(_ref13=>{let{value,isRefined}=_ref13;isRefined&&refine(value)}),refine(activeTag)},[activeTag]),(0,react.useEffect)(()=>{let handleClick=e=>{ref?.current?.contains(e.target)||setSearchOpen(!1)};return window.addEventListener("click",handleClick),()=>{window.removeEventListener("click",handleClick)}},[]),(0,jsx_runtime.jsxs)("div",{className:"relative",ref:ref,onKeyDown:e=>{switch(e.key){case"Enter":void 0!==activeOption&&openSidePanel(types.H$.Docs,`https://posthog.com/${hits[activeOption].slug}`);break;case"Escape":setSearchOpen(!1);break;case"ArrowDown":e.preventDefault(),setActiveOption(currOption=>void 0===currOption||currOption>=hits.length-1?0:currOption+1);break;case"ArrowUp":e.preventDefault(),setActiveOption(currOption=>{if(void 0!==currOption)return currOption<=0?hits.length-1:currOption-1});break;case"Tab":case"ArrowRight":{e.preventDefault();let currTagIndex=tags.findIndex(_ref8=>{let{type}=_ref8;return type===activeTag});setActiveTag(tags[currTagIndex>=tags.length-1?0:currTagIndex+1].type);break}case"ArrowLeft":{e.preventDefault();let currTagIndex=tags.findIndex(_ref9=>{let{type}=_ref9;return type===activeTag});setActiveTag(tags[currTagIndex<=0?tags.length-1:currTagIndex-1].type)}}},children:[(0,jsx_runtime.jsx)(SearchInput,{value:searchValue,setValue:setSearchValue}),searchOpen&&(0,jsx_runtime.jsxs)("div",{className:"absolute w-full bg-bg-light z-50 border rounded-lg shadow-xl mt-0.5",children:[(0,jsx_runtime.jsx)(Tags,{activeTag:activeTag,setActiveTag:setActiveTag}),(0,jsx_runtime.jsx)(Hits,{activeOption:activeOption})]})]})};function AlgoliaSearch(){return(0,jsx_runtime.jsx)(InstantSearch.p,{searchClient:searchClient,indexName:"prod_posthog_com",children:(0,jsx_runtime.jsx)(Search,{})})}let PRODUCTS=[{name:"Product OS",slug:"product-os",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconStack,{className:"text-danger h-5 w-5"})},{name:"Product analytics",slug:"product-analytics",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconTrends,{className:"text-brand-blue h-5 w-5"})},{name:"Web analytics",slug:"web-analytics",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconPieChart,{className:"text-[#36C46F] h-5 w-5"})},{name:"Session replay",slug:"session-replay",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconRewindPlay,{className:"text-warning h-5 w-5"})},{name:"Feature flags",slug:"feature-flags",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconToggle,{className:"text-success h-5 w-5"})},{name:"Experiments",slug:"experiments",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconFlask,{className:"text-purple h-5 w-5"})},{name:"Surveys",slug:"surveys",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconMessage,{className:"text-danger h-5 w-5"})},{name:"Data pipelines",slug:"cdp",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconDecisionTree,{className:"text-[#2EA2D3] h-5 w-5"})},{name:"Data warehouse",slug:"data-warehouse",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconDatabase,{className:"text-[#8567FF] h-5 w-5"})},{name:"AI engineering",slug:"ai-engineering",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconAI,{className:"text-[#681291] dark:text-[#C170E8] h-5 w-5"})}],Section=_ref=>{let{title,children}=_ref;return(0,jsx_runtime.jsxs)("section",{className:"mb-6",children:[(0,jsx_runtime.jsx)("h3",{children:title}),children]})},SupportFormBlock=_ref2=>{let{onCancel}=_ref2,{supportPlans,hasSupportAddonPlan}=(0,index_esm.useValues)(billingLogic.kr);return(0,jsx_runtime.jsxs)(Section,{title:"Email an engineer",children:[(0,jsx_runtime.jsx)(SupportForm.H,{}),(0,jsx_runtime.jsx)(src.Jp,{form:"support-modal-form",htmlType:"submit",type:"primary","data-attr":"submit",fullWidth:!0,center:!0,className:"mt-4",children:"Submit"}),(0,jsx_runtime.jsx)(src.Jp,{form:"support-modal-form",type:"secondary",onClick:onCancel,fullWidth:!0,center:!0,className:"mt-2 mb-4",children:"Cancel"}),(0,jsx_runtime.jsx)("br",{}),(0,jsx_runtime.jsxs)("div",{className:"grid grid-cols-2 border rounded [&_>*]:px-2 [&_>*]:py-0.5 mb-4 bg-bg-light pt-4",children:[(0,jsx_runtime.jsxs)("div",{className:"col-span-full flex justify-between border-b bg-bg-white py-1",children:[(0,jsx_runtime.jsx)("div",{children:(0,jsx_runtime.jsx)("strong",{children:"Avg support response times"})}),(0,jsx_runtime.jsx)("div",{children:(0,jsx_runtime.jsx)(src.rU,{to:urls.j.organizationBilling([types.Md.PLATFORM_AND_SUPPORT]),children:"Explore options"})})]}),supportPlans?.map(plan=>{let currentPlan=plan.current_plan&&(!hasSupportAddonPlan||plan.plan_key?.includes("addon"));return jsx_runtime.jsxs(react.Fragment,{children:[jsx_runtime.jsxs("div",{className:currentPlan?"font-bold":void 0,children:[plan.name,currentPlan&&jsx_runtime.jsxs(jsx_runtime.Fragment,{children:[" ",jsx_runtime.jsx("span",{className:"font-normal opacity-60 text-sm",children:"(your plan)"})]})]}),jsx_runtime.jsx("div",{className:currentPlan?"font-bold":void 0,children:plan.features.find(f=>f.key==types.P$.SUPPORT_RESPONSE_TIME)?.note})]},`support-panel-${plan.plan_key}`)})]})]})},SIDE_PANEL_TABS={[types.H$.Notebooks]:{label:"Notebooks",Icon:posthog_icons_es.IconNotebook,Content:function(){let{selectedNotebook,initialAutofocus,droppedResource,dropProperties}=(0,index_esm.useValues)(notebookPanelLogic.F),{selectNotebook,closeSidePanel}=(0,index_esm.useActions)(notebookPanelLogic.F),{notebook}=(0,index_esm.useValues)((0,notebookLogic.T)({shortId:selectedNotebook,target:types.bZ.Popover})),editable=!notebook?.is_template,{ref,size}=(0,useResizeObserver.S)({0:"small",832:"medium"}),contentWidthHasEffect=(0,react.useMemo)(()=>"medium"===size,[size]);return(0,jsx_runtime.jsxs)("div",{ref:ref,className:"NotebookPanel",...dropProperties,children:[droppedResource?null:(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[(0,jsx_runtime.jsxs)(SidePanelPaneHeader,{children:[(0,jsx_runtime.jsx)(NotebookListMini,{selectedNotebookId:selectedNotebook,onSelectNotebook:notebook=>{selectNotebook(notebook.short_id)}}),(0,jsx_runtime.jsx)("div",{className:"flex-1"}),selectedNotebook&&(0,jsx_runtime.jsx)(NotebookMeta.B,{shortId:selectedNotebook}),(0,jsx_runtime.jsx)(src.Jp,{size:"small",to:urls.j.notebook(selectedNotebook),onClick:()=>closeSidePanel(),icon:(0,jsx_runtime.jsx)(icons.pF,{}),tooltip:"Open as main focus",tooltipPlacement:"left"}),contentWidthHasEffect&&(0,jsx_runtime.jsx)(NotebookMeta.t,{size:"small"}),(0,jsx_runtime.jsx)(NotebookMenu.z,{shortId:selectedNotebook})]}),(0,jsx_runtime.jsx)("div",{className:"flex flex-col flex-1 overflow-y-auto px-4 py-2",children:(0,jsx_runtime.jsx)(Notebook.a,{shortId:selectedNotebook,editable:editable,initialAutofocus:initialAutofocus},selectedNotebook)})]}),(0,jsx_runtime.jsx)(NotebookPanelDropzone,{})]})},noModalSupport:!0},[types.H$.Support]:{label:"Help",Icon:posthog_icons_es.IconSupport,Content:()=>{let{openSidePanel,closeSidePanel}=(0,index_esm.useActions)(sidePanelStateLogic.f),{preflight,isCloud}=(0,index_esm.useValues)(preflightLogic.preflightLogic),{currentOrganization}=(0,index_esm.useValues)(organizationLogic.p),{currentTeam}=(0,index_esm.useValues)(teamLogic.H),{status}=(0,index_esm.useValues)(sidePanelStatusLogic.BE),theLogic=(0,supportLogic.Pw)({onClose:()=>closeSidePanel(types.H$.Support)}),{openEmailForm,closeEmailForm}=(0,index_esm.useActions)(theLogic),{title,isEmailFormOpen}=(0,index_esm.useValues)(theLogic),region=preflight?.region;return(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[(0,jsx_runtime.jsx)(SidePanelPaneHeader,{title:isEmailFormOpen?title:SIDE_PANEL_TABS[types.H$.Support].label}),(0,jsx_runtime.jsx)("div",{className:"overflow-y-auto","data-attr":"side-panel-support-container",children:(0,jsx_runtime.jsx)("div",{className:"p-3 max-w-160 w-full mx-auto",children:isEmailFormOpen?(0,jsx_runtime.jsx)(SupportFormBlock,{onCancel:()=>closeEmailForm()}):(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[(0,jsx_runtime.jsx)(Section,{title:"Search docs & community questions",children:(0,jsx_runtime.jsx)(AlgoliaSearch,{})}),(0,jsx_runtime.jsx)(Section,{title:"Explore the docs",children:(0,jsx_runtime.jsx)("ul",{className:"border rounded divide-y bg-bg-light dark:bg-transparent font-title font-medium",children:PRODUCTS.map((product,index)=>(0,jsx_runtime.jsx)("li",{children:(0,jsx_runtime.jsxs)(src.rU,{to:`https://posthog.com/docs/${product.slug}`,className:"group flex items-center justify-between px-2 py-1.5",children:[(0,jsx_runtime.jsxs)("div",{className:"flex items-center gap-1.5",children:[product.icon,(0,jsx_runtime.jsx)("span",{className:"text-text-3000 opacity-75 group-hover:opacity-100",children:product.name})]}),(0,jsx_runtime.jsx)("div",{children:(0,jsx_runtime.jsx)(posthog_icons_es.IconChevronDown,{className:"text-text-3000 h-6 w-6 opacity-60 -rotate-90 group-hover:opacity-90"})})]})},index))})}),"operational"!==status?(0,jsx_runtime.jsx)(Section,{title:"",children:(0,jsx_runtime.jsx)(src.Vp,{type:status.includes("outage")?"error":"warning",children:(0,jsx_runtime.jsxs)("div",{children:[(0,jsx_runtime.jsxs)("span",{children:["We are experiencing ",status.includes("outage")?"major":""," issues."]}),(0,jsx_runtime.jsx)(src.Jp,{type:"secondary",fullWidth:!0,center:!0,targetBlank:!0,onClick:()=>openSidePanel(types.H$.Status),className:"mt-2 bg-[white]",children:"View system status"})]})})}):null,isCloud?(0,jsx_runtime.jsxs)(Section,{title:"Contact us",children:[(0,jsx_runtime.jsx)("p",{children:"Can't find what you need in the docs?"}),(0,jsx_runtime.jsx)(src.Jp,{type:"primary",fullWidth:!0,center:!0,onClick:()=>openEmailForm(),targetBlank:!0,className:"mt-2",children:"Email an engineer"})]}):null,(0,jsx_runtime.jsx)(Section,{title:"Ask the community",children:(0,jsx_runtime.jsxs)("p",{children:["Questions about features, how-tos, or use cases? There are thousands of discussions in our community forums."," ",(0,jsx_runtime.jsx)(src.rU,{to:"https://posthog.com/questions",children:"Ask a question"})]})}),(0,jsx_runtime.jsx)(Section,{title:"Share feedback",children:(0,jsx_runtime.jsxs)("ul",{children:[(0,jsx_runtime.jsx)("li",{children:(0,jsx_runtime.jsx)(src.Jp,{type:"secondary",status:"alt",to:"https://posthog.com/wip",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconHelmet,{}),targetBlank:!0,children:"See what we're building"})}),(0,jsx_runtime.jsx)("li",{children:(0,jsx_runtime.jsx)(src.Jp,{type:"secondary",status:"alt",to:"https://posthog.com/roadmap",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconMap,{}),targetBlank:!0,children:"Vote on our roadmap"})}),(0,jsx_runtime.jsx)("li",{children:(0,jsx_runtime.jsx)(src.Jp,{type:"secondary",status:"alt",to:`https://github.com/PostHog/posthog/issues/new?&labels=enhancement&template=feature_request.yml&debug-info=${encodeURIComponent((0,supportLogic.nP)(region,currentOrganization,currentTeam))}`,icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconFeatures,{}),targetBlank:!0,children:"Request a feature"})})]})})]})})})]})}},[types.H$.Docs]:{label:"Docs",Icon:posthog_icons_es.IconInfo,Content:()=>{let ref=(0,react.useRef)(null),logic=sidePanelDocsLogic({iframeRef:ref}),{iframeSrc,iframeReady,currentUrl,activeMenuName,menuOptions}=(0,index_esm.useValues)(logic),{navigateToPage,unmountIframe,closeSidePanel}=(0,index_esm.useActions)(logic),{isDarkModeOn}=(0,index_esm.useValues)(themeLogic.b);return(0,react.useEffect)(()=>{ref.current?.contentWindow?.postMessage({type:"theme-toggle",isDarkModeOn},"*")},[isDarkModeOn,ref.current]),(0,react.useEffect)(()=>(window.addEventListener("beforeunload",unmountIframe),()=>{window.removeEventListener("beforeunload",unmountIframe),unmountIframe()}),[]),(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[(0,jsx_runtime.jsxs)(SidePanelPaneHeader,{children:[(0,jsx_runtime.jsx)(src.Jp,{size:"small",sideIcon:(0,jsx_runtime.jsx)(posthog_icons_es.IconHome,{}),type:"secondary",onClick:()=>{ref.current?.contentWindow?.postMessage({type:"navigate",url:"/docs"},"*")}}),menuOptions&&(0,jsx_runtime.jsx)(src.Yv,{placeholder:"Navigate",dropdownMatchSelectWidth:!1,onChange:navigateToPage,size:"small",value:null!=activeMenuName?activeMenuName:"",options:menuOptions.map(_ref=>{let{name,url}=_ref;return{label:name,value:url}})}),(0,jsx_runtime.jsx)("div",{className:"flex-1"}),(0,jsx_runtime.jsx)(src.Jp,{size:"small",sideIcon:(0,jsx_runtime.jsx)(posthog_icons_es.IconExternal,{}),targetBlank:!0,onClick:()=>{window.open(currentUrl,"_blank")?.focus(),closeSidePanel()},children:"Open in new tab"})]}),(0,jsx_runtime.jsxs)("div",{className:"relative flex-1 overflow-hidden",children:[(0,jsx_runtime.jsx)("iframe",{src:iframeSrc,title:"Docs",className:(0,clsx_m.default)("w-full h-full",!iframeReady&&"hidden"),ref:ref}),!iframeReady&&(0,jsx_runtime.jsx)(SidePanelDocsSkeleton,{})]})]})},noModalSupport:!0},[types.H$.Activation]:{label:"Quick start",Icon:_ref=>{let{className}=_ref,{activeTasks,completionPercent}=(0,index_esm.useValues)(activationLogic.z);return(0,jsx_runtime.jsx)(LemonProgressCircle.L,{progress:completionPercent/100,strokePercentage:.15,size:20,className:className,children:(0,jsx_runtime.jsx)("span",{className:"text-xs font-semibold",children:activeTasks.length})})},Content:()=>{let{activeTasks,completionPercent,completedTasks}=(0,index_esm.useValues)(activationLogic.z);return(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[(0,jsx_runtime.jsx)(SidePanelPaneHeader,{title:"Quick start"}),(0,jsx_runtime.jsxs)("div",{className:"p-4 space-y-2 overflow-y-auto",children:[(0,jsx_runtime.jsx)("p",{children:"Use our Quick Start guide to learn about everything PostHog can do for you and your product."}),(0,jsx_runtime.jsxs)("div",{className:"flex items-center justify-center",children:[(0,jsx_runtime.jsxs)("div",{className:"flex flex-col items-center",children:[(0,jsx_runtime.jsx)(LemonProgressCircle.L,{progress:completionPercent/100,size:100,className:"text-primary",children:(0,jsx_runtime.jsx)("span",{className:"text-2xl",children:activeTasks.length})}),(0,jsx_runtime.jsx)("p",{className:"text-muted mt-2 ",children:"still to go"})]}),(0,jsx_runtime.jsx)("div",{className:"h-60",children:(0,jsx_runtime.jsx)(hedgehogs.ProfessorHog,{className:"max-h-full w-auto object-contain"})})]}),activeTasks.length>0&&(0,jsx_runtime.jsxs)("div",{children:[(0,jsx_runtime.jsx)("h4",{children:"What's next?"}),(0,jsx_runtime.jsx)("ul",{className:"space-y-2",children:activeTasks.map(task=>(0,jsx_runtime.jsx)(ActivationTask,{...task},task.id))})]}),completedTasks.length>0&&(0,jsx_runtime.jsxs)("div",{children:[(0,jsx_runtime.jsx)("h4",{children:"Completed"}),(0,jsx_runtime.jsx)("ul",{className:"space-y-2",children:completedTasks.map(task=>(0,jsx_runtime.jsx)(ActivationTask,{...task},task.id))})]})]})]})}},[types.H$.Settings]:{label:"Settings",Icon:posthog_icons_es.IconGear,Content:()=>{var _settings$sectionId;let{settings}=(0,index_esm.useValues)(sidePanelSettingsLogic.A),{closeSidePanel,setSettings}=(0,index_esm.useActions)(sidePanelSettingsLogic.A),settingsLogicProps={...settings,logicKey:"sidepanel"},{selectedSectionId,selectedLevel}=(0,index_esm.useValues)((0,settingsLogic.h)(settingsLogicProps));return(0,react.useEffect)(()=>{setSettings({sectionId:null!=selectedSectionId?selectedSectionId:void 0,settingLevelId:selectedLevel})},[selectedSectionId,selectedLevel]),(0,jsx_runtime.jsxs)("div",{className:"flex flex-col overflow-hidden",children:[(0,jsx_runtime.jsx)(SidePanelPaneHeader,{children:(0,jsx_runtime.jsx)(src.Jp,{size:"small",to:urls.j.settings(null!==(_settings$sectionId=settings.sectionId)&&void 0!==_settings$sectionId?_settings$sectionId:settings.settingLevelId,settings.settingId),onClick:()=>closeSidePanel(),sideIcon:(0,jsx_runtime.jsx)(posthog_icons_es.IconExternal,{}),children:"All settings"})}),(0,jsx_runtime.jsx)("div",{className:"flex-1 p-4 overflow-y-auto",children:(0,jsx_runtime.jsx)(Settings.Z,{hideSections:!0,...settingsLogicProps})})]})}},[types.H$.FeaturePreviews]:{label:"Feature previews",Icon:posthog_icons_es.IconFeatures,Content:()=>(0,jsx_runtime.jsxs)("div",{className:"flex flex-col overflow-hidden",children:[(0,jsx_runtime.jsx)(SidePanelPaneHeader,{title:"Feature previews"}),(0,jsx_runtime.jsxs)("div",{className:"flex-1 p-4 overflow-y-auto space-y-4",children:[(0,jsx_runtime.jsx)(src.Vp,{type:"info",children:"Get early access to these upcoming features. Let us know what you think!"}),(0,jsx_runtime.jsx)(FeaturePreviews.F,{})]})]})},[types.H$.Activity]:{label:"Team activity",Icon:props=>{let{unreadCount}=(0,index_esm.useValues)(sidePanelActivityLogic.t);return(0,jsx_runtime.jsx)(icons.Xd,{count:unreadCount,...props,children:(0,jsx_runtime.jsx)(posthog_icons_es.IconNotification,{})})},Content:()=>{var _filters$item_id,_filters$user,_filtersForCurrentPag;let{hasNotifications,notifications,activeTab,allActivity,allActivityResponseLoading,allActivityHasNext,importantChangesLoading,hasUnread,filters,filtersForCurrentPage,showDetails}=(0,index_esm.useValues)(sidePanelActivityLogic.t),{togglePolling,setActiveTab,maybeLoadOlderActivity,markAllAsRead,loadImportantChanges,setFilters,toggleShowDetails}=(0,index_esm.useActions)(sidePanelActivityLogic.t),{user}=(0,index_esm.useValues)(userLogic.userLogic),{featureFlags}=(0,index_esm.useValues)(featureFlagLogic.h);(0,usePageVisibility.d)(pageIsVisible=>{togglePolling(pageIsVisible)}),(0,react.useEffect)(()=>(loadImportantChanges(!1),()=>{markAllAsRead(),togglePolling(!1)}),[]);let lastScrollPositionRef=(0,react.useRef)(0),contentRef=(0,react.useRef)(null),scopeMenuOptions=[{value:null,label:"All activity"},...Object.values(types.jc).map(x=>({value:x,label:(0,humanizeActivity.VI)(x)}))],activeScopeMenuOption=filters?.scope?filters.scope+`${null!==(_filters$item_id=filters.item_id)&&void 0!==_filters$item_id?_filters$item_id:""}`:null;filtersForCurrentPage?.scope&&filtersForCurrentPage?.item_id&&scopeMenuOptions.unshift({value:`${filtersForCurrentPage.scope}${null!==(_filtersForCurrentPag=filtersForCurrentPage.item_id)&&void 0!==_filtersForCurrentPag?_filtersForCurrentPag:""}`,label:`This ${(0,humanizeActivity.VI)(filtersForCurrentPage.scope,!0)}`});let toggleExtendedDescription=(0,jsx_runtime.jsx)(jsx_runtime.Fragment,{children:(0,jsx_runtime.jsx)(src.f4,{bordered:!0,label:"Show details",checked:showDetails,onChange:toggleShowDetails})});return(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[(0,jsx_runtime.jsx)(SidePanelPaneHeader,{title:"Team activity"}),(0,jsx_runtime.jsx)(PayGateMini.E,{feature:types.P$.AUDIT_LOGS,className:"flex flex-col overflow-hidden flex-1",overrideShouldShowGate:user?.is_impersonated||!!featureFlags[constants.y8.AUDIT_LOGS_ACCESS],children:(0,jsx_runtime.jsxs)("div",{className:"flex flex-col overflow-hidden flex-1",children:[(0,jsx_runtime.jsx)("div",{className:"shrink-0 mx-2",children:(0,jsx_runtime.jsx)(src.TP,{activeKey:activeTab,onChange:key=>setActiveTab(key),tabs:[{key:sidePanelActivityLogic.H.Unread,label:"My notifications"},{key:sidePanelActivityLogic.H.All,label:"All activity"}]})}),(0,jsx_runtime.jsx)("div",{className:"shrink-0 space-y-2 px-2 pb-2",children:activeTab===sidePanelActivityLogic.H.Unread?(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[(0,jsx_runtime.jsxs)(src.Vp,{type:"info",dismissKey:"notifications-introduction",children:["Notifications shows you changes others make to"," ",(0,jsx_runtime.jsx)(src.rU,{to:urls.j.savedInsights("history"),children:"Insights"})," and"," ",(0,jsx_runtime.jsx)(src.rU,{to:urls.j.featureFlags("history"),children:"Feature Flags"})," that you created. Come join ",(0,jsx_runtime.jsx)(src.rU,{to:"https://posthog.com/community",children:"our community forum"})," and tell us what else should be here!"]}),(0,jsx_runtime.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[toggleExtendedDescription,hasUnread?(0,jsx_runtime.jsx)(src.Jp,{type:"secondary",onClick:()=>markAllAsRead(),children:"Mark all as read"}):null]})]}):activeTab===sidePanelActivityLogic.H.All?(0,jsx_runtime.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,jsx_runtime.jsxs)("div",{className:"flex items-center gap-2",children:[toggleExtendedDescription,allActivityResponseLoading?(0,jsx_runtime.jsx)(src.$j,{textColored:!0}):null]}),(0,jsx_runtime.jsxs)("div",{className:"flex items-center gap-2",children:[(0,jsx_runtime.jsx)("span",{children:"Filter for activity on:"}),(0,jsx_runtime.jsx)(src.Yv,{size:"small",options:scopeMenuOptions,placeholder:"All activity",value:null!=activeScopeMenuOption?activeScopeMenuOption:void 0,onChange:value=>setFilters({...filters,scope:null!=value?value:void 0,item_id:void 0}),dropdownMatchSelectWidth:!1}),(0,jsx_runtime.jsx)("span",{children:"by"}),(0,jsx_runtime.jsx)(MemberSelect.a,{value:null!==(_filters$user=filters?.user)&&void 0!==_filters$user?_filters$user:null,onChange:user=>{var _user$id;return setFilters({...filters,user:null!==(_user$id=user?.id)&&void 0!==_user$id?_user$id:void 0})}})]})]}):null}),(0,jsx_runtime.jsx)("div",{className:"flex flex-col flex-1 overflow-hidden",ref:contentRef,onScroll:e=>{if(e.currentTarget.scrollTop>lastScrollPositionRef.current){let scrollPosition=e.currentTarget.scrollTop+e.currentTarget.clientHeight;e.currentTarget.scrollHeight-scrollPosition<100&&maybeLoadOlderActivity()}lastScrollPositionRef.current=e.currentTarget.scrollTop},children:(0,jsx_runtime.jsx)(ScrollableShadows.D,{direction:"vertical",innerClassName:"p-2 space-y-px",children:activeTab===sidePanelActivityLogic.H.Unread?(0,jsx_runtime.jsx)(jsx_runtime.Fragment,{children:importantChangesLoading&&!hasNotifications?(0,jsx_runtime.jsx)(src.yW,{className:"my-2 h-12",repeat:10,fade:!0}):hasNotifications?notifications.map((logItem,index)=>(0,jsx_runtime.jsx)(ActivityLog.h,{logItem:logItem,showExtendedDescription:showDetails},index)):(0,jsx_runtime.jsx)("div",{className:"border rounded text-center border-dashed p-6 text-muted-alt",children:"You're all caught up!"})}):activeTab===sidePanelActivityLogic.H.All?(0,jsx_runtime.jsx)(jsx_runtime.Fragment,{children:allActivityResponseLoading&&!allActivity.length?(0,jsx_runtime.jsx)(src.yW,{className:"my-2 h-12",repeat:10,fade:!0}):allActivity.length?(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[allActivity.map((logItem,index)=>(0,jsx_runtime.jsx)(ActivityLog.h,{logItem:logItem,showExtendedDescription:showDetails},index)),(0,jsx_runtime.jsx)("div",{className:"m-4 h-10 flex items-center justify-center gap-2 text-muted-alt",children:allActivityResponseLoading?(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[(0,jsx_runtime.jsx)(src.$j,{textColored:!0})," Loading older activity"]}):allActivityHasNext?(0,jsx_runtime.jsx)(src.Jp,{type:"secondary",fullWidth:!0,center:!0,onClick:()=>maybeLoadOlderActivity(),children:"Load more"}):"No more results"})]}):(0,jsx_runtime.jsxs)("div",{className:"border rounded text-center border-dashed p-6 flex flex-col gap-2 items-center",children:[(0,jsx_runtime.jsx)("span",{children:"No activity yet"}),filters?(0,jsx_runtime.jsx)(src.Jp,{type:"secondary",onClick:()=>setFilters(null),children:"Clear filters"}):null]})}):null})})]})})]})}},[types.H$.Discussion]:{label:"Discussion",Icon:props=>{let{commentCount}=(0,index_esm.useValues)(sidePanelDiscussionLogic);return(0,jsx_runtime.jsx)(icons.Xd,{count:commentCount,...props,children:(0,jsx_runtime.jsx)(posthog_icons_es.IconChat,{})})},Content:()=>{let{commentsLogicProps}=(0,index_esm.useValues)(sidePanelDiscussionLogic),{scope,item_id}=null!=commentsLogicProps?commentsLogicProps:{};return(0,jsx_runtime.jsxs)("div",{className:"flex flex-col overflow-hidden flex-1",children:[(0,jsx_runtime.jsx)(SidePanelPaneHeader,{title:(0,jsx_runtime.jsxs)("div",{className:"flex space-x-2",children:[(0,jsx_runtime.jsxs)("span",{children:["Discussion"," ",scope?(0,jsx_runtime.jsxs)("span",{className:"font-normal text-muted-alt",children:["about ",item_id?"this":""," ",(0,humanizeActivity.VI)(scope,!!item_id)]}):null]}),(0,jsx_runtime.jsx)(src.u,{title:"This is a feature we are experimenting with! We'd love to get your feedback on it and whether this is something useful for working with PostHog.",children:(0,jsx_runtime.jsx)(src.oe,{type:"completion",children:"Experimental"})})]})}),commentsLogicProps?(0,jsx_runtime.jsx)(DiscussionContent,{logicProps:commentsLogicProps}):(0,jsx_runtime.jsxs)("div",{className:"mx-auto p-8 max-w-160 mt-8 space-y-4",children:[(0,jsx_runtime.jsx)("div",{className:"max-w-80 mx-auto",children:(0,jsx_runtime.jsx)(hedgehogs.WarningHog,{className:"w-full h-full"})}),(0,jsx_runtime.jsx)("h2",{children:"Discussions aren't supported here yet..."}),(0,jsx_runtime.jsx)("p",{children:"This a beta feature that is currently only available when viewing things like an Insight, Dashboard or Notebook."})]})]})}},[types.H$.Exports]:{label:"Exports",Icon:()=>{let{freshUndownloadedExports}=(0,index_esm.useValues)(sidePanelExportsLogic);return(0,jsx_runtime.jsx)(icons.Xd,{count:freshUndownloadedExports.length,children:(0,jsx_runtime.jsx)(posthog_icons_es.IconDownload,{})})},Content:()=>(0,jsx_runtime.jsxs)("div",{className:"flex flex-col overflow-hidden flex-1",children:[(0,jsx_runtime.jsx)(SidePanelPaneHeader,{title:(0,jsx_runtime.jsx)("div",{className:"flex space-x-2",children:(0,jsx_runtime.jsx)("span",{children:"Exports"})})}),(0,jsx_runtime.jsx)("p",{className:"m-4",children:"Retrieve your exports here. Exports are generated asynchronously and may take a few seconds to complete."}),(0,jsx_runtime.jsx)(ExportsContent,{})]})},[types.H$.Status]:{label:"System status",Icon:props=>{let{status,statusPage}=(0,index_esm.useValues)(sidePanelStatusLogic.BE),title=statusPage?.status.description?(0,utils.fm)(statusPage.status.description.toLowerCase()):null;return(0,jsx_runtime.jsx)(src.u,{title:title,placement:"left",children:(0,jsx_runtime.jsx)("span",{...props,children:(0,jsx_runtime.jsx)(icons.T,{content:"operational"!==status?"!":"✓",status:status.includes("outage")?"danger":status.includes("degraded")||status.includes("monitoring")?"warning":"success",children:(0,jsx_runtime.jsx)(posthog_icons_es.IconCloud,{})})})})},Content:()=>{let{closeSidePanel}=(0,index_esm.useActions)(sidePanelLogic.x),[ready,setReady]=(0,react.useState)(!1);return(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[(0,jsx_runtime.jsxs)(SidePanelPaneHeader,{children:[(0,jsx_runtime.jsx)("div",{className:"flex-1"}),(0,jsx_runtime.jsx)(src.Jp,{size:"small",sideIcon:(0,jsx_runtime.jsx)(posthog_icons_es.IconExternal,{}),targetBlank:!0,onClick:()=>{window.open(sidePanelStatusLogic.UH,"_blank")?.focus(),closeSidePanel()},children:"Open in new tab"})]}),(0,jsx_runtime.jsxs)("div",{className:"relative flex-1 overflow-hidden",children:[(0,jsx_runtime.jsx)("iframe",{src:sidePanelStatusLogic.UH,title:"Status",className:(0,clsx_m.default)("w-full h-full",!ready&&"hidden"),onLoad:()=>setReady(!0)}),!ready&&(0,jsx_runtime.jsx)(SidePanelDocsSkeleton,{})]})]})},noModalSupport:!0},[types.H$.ExperimentFeatureFlag]:{label:"Release conditions",Icon:posthog_icons_es.IconFlag,Content:()=>{var _experiment$feature_f,_featureFlag$filters;let{closeSidePanel}=(0,index_esm.useActions)(sidePanelStateLogic.f),{currentLocation}=(0,index_esm.useValues)(kea_router_lib.router);(0,react.useEffect)(()=>{let isExperimentPath=/^\/project\/[0-9]+\/experiments\/[0-9]+/.test(currentLocation.pathname);isExperimentPath||closeSidePanel()},[currentLocation,closeSidePanel]);let experimentId=(0,react.useMemo)(()=>{let match=currentLocation.pathname.match(/\/experiments\/(\d+)/);return match?parseInt(match[1]):null},[currentLocation.pathname]),{experiment}=(0,index_esm.useValues)((0,experimentLogic.W)({experimentId:null!=experimentId?experimentId:"new"})),_featureFlagLogic=(0,feature_flags_featureFlagLogic.hk)({id:null!==(_experiment$feature_f=experiment.feature_flag?.id)&&void 0!==_experiment$feature_f?_experiment$feature_f:null}),{featureFlag,areVariantRolloutsValid,variantRolloutSum,featureFlagLoading,nonEmptyVariants}=(0,index_esm.useValues)(_featureFlagLogic),{setFeatureFlagFilters,saveSidebarExperimentFeatureFlag,distributeVariantsEqually}=(0,index_esm.useActions)(_featureFlagLogic),variants=featureFlag?.filters?.multivariate?.variants||[],handleRolloutPercentageChange=(index,value)=>{if(!featureFlag?.filters?.multivariate||!value)return;let updatedVariants=featureFlag.filters.multivariate.variants.map((variant,i)=>i===index?{...variant,rollout_percentage:value}:variant),updatedFilters={...featureFlag.filters,multivariate:{...featureFlag.filters.multivariate,variants:updatedVariants}};setFeatureFlagFilters(updatedFilters,null)};return featureFlagLoading||!featureFlag.id?(0,jsx_runtime.jsx)("div",{className:"flex items-center justify-center h-full",children:(0,jsx_runtime.jsx)(src.$j,{className:"text-3xl"})}):(0,jsx_runtime.jsxs)("div",{className:"space-y-6 p-2",children:[(0,jsx_runtime.jsx)(src.Vp,{type:"info",children:(0,jsx_runtime.jsxs)("div",{className:"space-y-3",children:[(0,jsx_runtime.jsx)("div",{children:"Adjusting variant distribution or user targeting may impact the validity of your results. Adjust only if you're aware of how changes will affect your experiment."}),(0,jsx_runtime.jsxs)("div",{children:["For full feature flag settings, go to"," ",(0,jsx_runtime.jsx)(src.rU,{target:"_blank",className:"font-semibold",to:experiment.feature_flag?urls.j.featureFlag(experiment.feature_flag.id):void 0,children:experiment.feature_flag?.key})," ","."]})]})}),(0,jsx_runtime.jsxs)("div",{children:[(0,jsx_runtime.jsx)("h3",{className:"l3",children:"Experiment variants"}),(0,jsx_runtime.jsx)(src.g3,{dataSource:variants,columns:[{title:"Variant Key",dataIndex:"key",key:"key",render:value=>(0,jsx_runtime.jsx)("span",{className:"font-semibold",children:value}),width:"50%"},{title:(0,jsx_runtime.jsxs)("div",{className:"flex items-center justify-between space-x-2",children:[(0,jsx_runtime.jsx)("span",{children:"Rollout Percentage"}),(0,jsx_runtime.jsx)(src.Jp,{onClick:distributeVariantsEqually,tooltip:"Redistribute variant rollout percentages equally",children:(0,jsx_runtime.jsx)(posthog_icons_es.IconBalance,{})})]}),dataIndex:"rollout_percentage",key:"rollout_percentage",render:(_,record,index)=>(0,jsx_runtime.jsx)(src.DF,{type:"number",value:record.rollout_percentage,onChange:changedValue=>{if(null!==changedValue){let valueInt=void 0!==changedValue?parseInt(changedValue.toString()):0;isNaN(valueInt)||handleRolloutPercentageChange(index,changedValue)}},min:0,max:100,suffix:(0,jsx_runtime.jsx)("span",{children:"%"})})}]}),variants.length>0&&!areVariantRolloutsValid&&(0,jsx_runtime.jsxs)("p",{className:"text-danger",children:["Percentage rollouts for variants must sum to 100 (currently ",variantRolloutSum,")."]})]}),(0,jsx_runtime.jsx)(FeatureFlagReleaseConditions.I,{id:`${experiment.feature_flag?.id}`,filters:null!==(_featureFlag$filters=featureFlag?.filters)&&void 0!==_featureFlag$filters?_featureFlag$filters:[],onChange:setFeatureFlagFilters,nonEmptyFeatureFlagVariants:nonEmptyVariants}),(0,jsx_runtime.jsx)(src.p2,{}),(0,jsx_runtime.jsx)("div",{children:(0,jsx_runtime.jsx)(src.Jp,{className:"-mt-4",type:"primary",onClick:()=>{saveSidebarExperimentFeatureFlag(featureFlag)},children:"Save"})})]})}}};function SidePanel_SidePanel(){var _theme$sidebarStyle;let{theme}=(0,index_esm.useValues)(themeLogic.b),{visibleTabs,extraTabs}=(0,index_esm.useValues)(sidePanelLogic.x),{selectedTab,sidePanelOpen,modalMode}=(0,index_esm.useValues)(sidePanelStateLogic.f),{openSidePanel,closeSidePanel,setSidePanelAvailable}=(0,index_esm.useActions)(sidePanelStateLogic.f),activeTab=sidePanelOpen&&selectedTab,PanelConent=activeTab?SIDE_PANEL_TABS[activeTab]?.Content:null,ref=(0,react.useRef)(null),resizerLogicProps={containerRef:ref,logicKey:"side-panel",persistent:!0,closeThreshold:200,placement:"left",onToggleClosed:shouldBeClosed=>{shouldBeClosed?closeSidePanel():selectedTab&&openSidePanel(selectedTab)}},{desiredSize,isResizeInProgress}=(0,index_esm.useValues)((0,resizerLogic.Z)(resizerLogicProps));if((0,react.useEffect)(()=>(setSidePanelAvailable(!0),()=>{setSidePanelAvailable(!1)}),[]),!visibleTabs.length)return null;let sidePanelOpenAndAvailable=selectedTab&&sidePanelOpen&&visibleTabs.includes(selectedTab),menuOptions=extraTabs?[{title:"Open in side panel",items:extraTabs.map(tab=>{let{Icon,label}=SIDE_PANEL_TABS[tab];return{label:label,icon:(0,jsx_runtime.jsx)(Icon,{}),onClick:()=>openSidePanel(tab)}})}]:void 0;if(modalMode){let supportsModal=!activeTab||!SIDE_PANEL_TABS[activeTab]?.noModalSupport;return(0,jsx_runtime.jsx)(src.fQ,{simple:!0,isOpen:!!PanelConent&&supportsModal,onClose:closeSidePanel,hideCloseButton:!0,width:"40rem",children:PanelConent?(0,jsx_runtime.jsx)(PanelConent,{}):null})}return(0,jsx_runtime.jsxs)("div",{className:(0,clsx_m.default)("SidePanel3000",sidePanelOpenAndAvailable&&"SidePanel3000--open",isResizeInProgress&&"SidePanel3000--resizing"),ref:ref,style:{width:sidePanelOpenAndAvailable?null!=desiredSize?desiredSize:512:void 0,...null!==(_theme$sidebarStyle=theme?.sidebarStyle)&&void 0!==_theme$sidebarStyle?_theme$sidebarStyle:{}},children:[(0,jsx_runtime.jsx)(Resizer.w,{...resizerLogicProps}),(0,jsx_runtime.jsxs)("div",{className:"SidePanel3000__bar",children:[(0,jsx_runtime.jsx)("div",{className:"SidePanel3000__tabs",children:(0,jsx_runtime.jsx)("div",{className:"SidePanel3000__tabs-content",children:visibleTabs.map(tab=>{let{Icon,label}=SIDE_PANEL_TABS[tab];return(0,jsx_runtime.jsx)(src.Jp,{icon:(0,jsx_runtime.jsx)(Icon,{}),onClick:()=>activeTab===tab?closeSidePanel():openSidePanel(tab),"data-attr":`sidepanel-tab-${tab}`,"data-ph-capture-attribute-state-before-click":activeTab===tab?"open":"closed",active:activeTab===tab,type:"secondary",status:"alt",children:label},tab)})})}),menuOptions?(0,jsx_runtime.jsx)("div",{className:"shrink-0 flex items-center m-2",children:(0,jsx_runtime.jsx)(src.d6,{items:menuOptions,children:(0,jsx_runtime.jsx)(src.Jp,{size:"small",icon:(0,jsx_runtime.jsx)(posthog_icons_es.IconEllipsis,{})})})}):null]}),(0,jsx_runtime.jsx)(Resizer.w,{...resizerLogicProps,offset:"3rem"}),PanelConent?(0,jsx_runtime.jsx)("div",{className:"SidePanel3000__content",children:(0,jsx_runtime.jsx)(PanelConent,{})}):null]})}},"./frontend/src/layout/navigation-3000/sidepanel/panels/activation/activationLogic.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{z:()=>activationLogic});var index_esm=__webpack_require__("./node_modules/.pnpm/kea@3.1.5_react@18.2.0/node_modules/kea/lib/index.esm.js"),lib=__webpack_require__("./node_modules/.pnpm/kea-loaders@3.0.0_kea@3.1.5/node_modules/kea-loaders/lib/index.js"),kea_router_lib=__webpack_require__("./node_modules/.pnpm/kea-router@3.2.0_kea@3.1.5/node_modules/kea-router/lib/index.js"),api=__webpack_require__("./frontend/src/lib/api.ts"),schema=__webpack_require__("./frontend/src/queries/schema.ts"),utils=__webpack_require__("./frontend/src/queries/utils.ts");let reverseProxyCheckerLogic=(0,index_esm.kea)([(0,index_esm.path)(["components","ReverseProxyChecker","reverseProxyCheckerLogic"]),(0,lib.loaders)({hasReverseProxy:[!1,{loadHasReverseProxy:async()=>{let query={kind:schema.OH.HogQLQuery,query:(0,utils.zP)`SELECT properties.$lib_custom_api_host AS lib_custom_api_host FROM events WHERE timestamp >= now() - INTERVAL 1 DAY AND timestamp <= now() @@ -362,4 +362,4 @@ MIICVjCCAb+gAwIBAgIBADANBgkqhkiG9w0BAQ0FADBIMQswCQYDVQQGEwJ1czEL AND timestamp <= '${endDate}' LIMIT 20 `},responseJSON=await api.ZP.query(query),{results}=responseJSON,events=results?.map(r=>{let distinct_id=r[0],properties=JSON.parse(r[1]),personProperties=JSON.parse(r[2]);return{distinct_id,properties,personProperties}})||[];return{...values.surveyOpenTextResults,[questionIndex]:{events}}}}}}),(0,index_esm.listeners)(_ref10=>{let{actions,values}=_ref10;return{createSurveySuccess:_ref11=>{let{survey}=_ref11;src.UJ.success((0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:["Survey ",survey.name," created"]})),actions.loadSurveys(),kea_router_lib.router.actions.replace(urls.j.survey(survey.id)),actions.reportSurveyCreated(survey)},updateSurveySuccess:_ref12=>{let{survey}=_ref12;src.UJ.success((0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:["Survey ",survey.name," updated"]})),actions.editingSurvey(!1),actions.reportSurveyEdited(survey),actions.loadSurveys()},duplicateSurveySuccess:()=>{actions.loadSurveys()},launchSurveySuccess:_ref13=>{let{survey}=_ref13;src.UJ.success((0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:["Survey ",survey.name," launched"]})),actions.loadSurveys()},stopSurveySuccess:()=>{actions.loadSurveys()},resumeSurveySuccess:()=>{actions.loadSurveys()},archiveSurvey:()=>{actions.updateSurvey({archived:!0})},loadSurveySuccess:()=>{actions.loadSurveyUserStats()},resetTargeting:()=>{actions.setSurveyValue("linked_flag_id",constants.Uo.linked_flag_id),actions.setSurveyValue("targeting_flag_filters",constants.Uo.targeting_flag_filters),actions.setSurveyValue("linked_flag",constants.Uo.linked_flag),actions.setSurveyValue("targeting_flag",constants.Uo.targeting_flag),actions.setSurveyValue("conditions",constants.Uo.conditions),actions.setSurveyValue("remove_targeting_flag",!0),actions.setSurveyValue("responses_limit",constants.Uo.responses_limit),actions.setSurveyValues({iteration_count:constants.Uo.iteration_count,iteration_frequency_days:constants.Uo.iteration_frequency_days})},submitSurveyFailure:async()=>{(0,utils.bv)(values.flagPropertyErrors)||values.urlMatchTypeValidationError?actions.setSelectedSection(SurveyEditSection.DisplayConditions):actions.setSelectedSection(SurveyEditSection.Steps),setTimeout(()=>document.querySelector(".Field--error")?.scrollIntoView({block:"center",behavior:"smooth"}),5)}}}),(0,index_esm.reducers)({isEditingSurvey:[!1,{editingSurvey:(_,_ref14)=>{let{editing}=_ref14;return editing}}],surveyMissing:[!1,{setSurveyMissing:()=>!0}],survey:[{...constants.Uo},{setDefaultForQuestionType:(state,_ref15)=>{let{idx,type,isEditingQuestion,isEditingDescription,isEditingThankYouMessage}=_ref15,question=isEditingQuestion?state.questions[idx].question:constants.Tc[type].questions[0].question,description=isEditingDescription?state.questions[idx].description:constants.Tc[type].questions[0].description,thankYouMessageHeader=isEditingThankYouMessage?state.appearance?.thankYouMessageHeader:constants.Tc[type].appearance.thankYouMessageHeader,newQuestions=[...state.questions];return newQuestions[idx]={...state.questions[idx],...constants.Tc[type].questions[0],question,description},{...state,questions:newQuestions,appearance:{...state.appearance,...constants.Tc[type].appearance,thankYouMessageHeader}}},setSurveyTemplateValues:(_,_ref16)=>{let{template}=_ref16,newTemplateSurvey={...constants.Uo,...template};return newTemplateSurvey},setQuestionBranchingType:(state,_ref17)=>{let{questionIndex,type,specificQuestionIndex}=_ref17,newQuestions=[...state.questions],question=newQuestions[questionIndex];if(type===types.kv.NextQuestion)delete question.branching;else if(type===types.kv.End)question.branching={type:types.kv.End};else if(type===types.kv.ResponseBased){if(question.type!==types.I9.Rating&&question.type!==types.I9.SingleChoice)throw Error(`Survey question type must be ${types.I9.Rating} or ${types.I9.SingleChoice}`);question.branching={type:types.kv.ResponseBased,responseValues:{}}}else type===types.kv.SpecificQuestion&&(question.branching={type:types.kv.SpecificQuestion,index:specificQuestionIndex});return newQuestions[questionIndex]=question,{...state,questions:newQuestions}},setResponseBasedBranchingForQuestion:(state,_ref18)=>{let{questionIndex,responseValue,nextStep,specificQuestionIndex}=_ref18,newQuestions=[...state.questions],question=newQuestions[questionIndex];if(question.type!==types.I9.Rating&&question.type!==types.I9.SingleChoice)throw Error(`Survey question type must be ${types.I9.Rating} or ${types.I9.SingleChoice}`);if(question.branching?.type!==types.kv.ResponseBased)throw Error(`Survey question branching type must be ${types.kv.ResponseBased}`);return"responseValues"in question.branching&&(nextStep===types.kv.NextQuestion?delete question.branching.responseValues[responseValue]:nextStep===types.kv.End?question.branching.responseValues[responseValue]=types.kv.End:nextStep===types.kv.SpecificQuestion&&(question.branching.responseValues[responseValue]=specificQuestionIndex)),newQuestions[questionIndex]=question,{...state,questions:newQuestions}},resetBranchingForQuestion:(state,_ref19)=>{let{questionIndex}=_ref19,newQuestions=[...state.questions],question=newQuestions[questionIndex];return delete question.branching,newQuestions[questionIndex]=question,{...state,questions:newQuestions}},deleteBranchingLogic:state=>{let newQuestions=[...state.questions];return newQuestions.forEach(question=>{delete question.branching}),{...state,questions:newQuestions}}}],selectedPageIndex:[0,{setSelectedPageIndex:(_,_ref20)=>{let{idx}=_ref20;return idx}}],selectedSection:[SurveyEditSection.Steps,{setSelectedSection:(_,_ref21)=>{let{section}=_ref21;return section}}],surveyRatingResultsReady:[{},{loadSurveyRatingResultsSuccess:(state,_ref22)=>{let{payload}=_ref22;return payload&&payload.hasOwnProperty("questionIndex")?{...state,[payload.questionIndex]:!0}:{...state}}}],surveyRecurringNPSResultsReady:[{},{loadSurveyRecurringNPSResultsSuccess:(state,_ref23)=>{let{payload}=_ref23;return payload&&payload.hasOwnProperty("questionIndex")?{...state,[payload.questionIndex]:!0}:{...state}}}],surveySingleChoiceResultsReady:[{},{loadSurveySingleChoiceResultsSuccess:(state,_ref24)=>{let{payload}=_ref24;return payload&&payload.hasOwnProperty("questionIndex")?{...state,[payload.questionIndex]:!0}:{...state}}}],surveyMultipleChoiceResultsReady:[{},{loadSurveyMultipleChoiceResultsSuccess:(state,_ref25)=>{let{payload}=_ref25;return payload&&payload.hasOwnProperty("questionIndex")?{...state,[payload.questionIndex]:!0}:{...state}}}],surveyOpenTextResultsReady:[{},{loadSurveyOpenTextResultsSuccess:(state,_ref26)=>{let{payload}=_ref26;return payload&&payload.hasOwnProperty("questionIndex")?{...state,[payload.questionIndex]:!0}:{...state}}}],writingHTMLDescription:[!1,{setWritingHTMLDescription:(_,_ref27)=>{let{writingHTML}=_ref27;return writingHTML}}],schedule:["once",{setSchedule:(_,_ref28)=>{let{schedule}=_ref28;return schedule}}],flagPropertyErrors:[null,{setFlagPropertyErrors:(_,_ref29)=>{let{errors}=_ref29;return errors}}]}),(0,index_esm.selectors)({isSurveyRunning:[s=>[s.survey],survey=>!!(survey.start_date&&!survey.end_date)],surveyShufflingQuestionsAvailable:[s=>[s.survey],survey=>survey.questions.length>1],showSurveyRepeatSchedule:[s=>[s.schedule],schedule=>"recurring"==schedule],descriptionContentType:[s=>[s.survey],survey=>questionIndex=>survey.questions[questionIndex].descriptionContentType],surveyRepeatedActivationAvailable:[s=>[s.survey],survey=>survey.conditions?.events?.values!=void 0&&survey.conditions?.events?.values?.length>0],hasTargetingSet:[s=>[s.survey],survey=>{let hasLinkedFlag=!!survey.linked_flag_id||survey.linked_flag&&Object.keys(survey.linked_flag).length>0,hasTargetingFlag=survey.targeting_flag&&Object.keys(survey.targeting_flag).length>0||survey.targeting_flag_filters&&Object.keys(survey.targeting_flag_filters).length>0,hasOtherConditions=survey.conditions&&Object.keys(survey.conditions).length>0;return!!hasLinkedFlag||!!hasTargetingFlag||!!hasOtherConditions}],breadcrumbs:[s=>[s.survey],survey=>[{key:sceneTypes.x.Surveys,name:"Surveys",path:urls.j.surveys()},{key:[sceneTypes.x.Survey,survey?.id||"new"],name:survey.name}]],dataTableQuery:[s=>[s.survey],survey=>{if("new"===survey.id)return null;let startDate=survey.start_date||survey.created_at;return{kind:schema.OH.DataTableNode,source:{kind:schema.OH.EventsQuery,select:["*",...survey.questions.map((q,i)=>q.type===types.I9.MultipleChoice?`coalesce(arrayStringConcat(JSONExtractArrayRaw(properties, '${getResponseField(i)}'), ', ')) -- ${q.question}`:`coalesce(JSONExtractString(properties, '${getResponseField(i)}')) -- ${q.question}`),"timestamp","person","coalesce(JSONExtractString(properties, '$lib_version')) -- Library Version","coalesce(JSONExtractString(properties, '$lib')) -- Library","coalesce(JSONExtractString(properties, '$current_url')) -- URL"],orderBy:["timestamp DESC"],where:["event == 'survey sent'"],after:startDate,properties:[{type:types.FT.Event,key:"$survey_id",operator:types.WV.Exact,value:survey.id}]},propertiesViaUrl:!0,showExport:!0,showReload:!0,showEventFilter:!1,showPropertyFilter:!0,showTimings:!1}}],targetingFlagFilters:[s=>[s.survey],survey=>survey.targeting_flag_filters?{...survey.targeting_flag_filters,groups:survey.targeting_flag_filters.groups,multivariate:null,payloads:{},super_groups:void 0}:survey.targeting_flag?.filters||void 0],urlMatchTypeValidationError:[s=>[s.survey],survey=>{if(survey.conditions?.urlMatchType===types.HI.Regex&&survey.conditions.url)try{new RegExp(survey.conditions.url)}catch(e){return e.message}return null}],surveyNPSScore:[s=>[s.surveyRatingResults],surveyRatingResults=>{if(surveyRatingResults){let questionIdx=Object.keys(surveyRatingResults)[0],questionResults=surveyRatingResults[questionIdx];if(0===questionResults.total)return"No data available";let data=questionResults.data;if(11===data.length){let promoters=data.slice(9,11).reduce((a,b)=>a+b,0),passives=data.slice(7,9).reduce((a,b)=>a+b,0),detractors=data.slice(0,7).reduce((a,b)=>a+b,0);return((promoters-detractors)/(promoters+passives+detractors)*100).toFixed(1)}}}],getBranchingDropdownValue:[s=>[s.survey],survey=>(questionIndex,question)=>{if(question.branching?.type){let{type}=question.branching;if(type===types.kv.SpecificQuestion){let nextQuestionIndex=question.branching.index;return`${types.kv.SpecificQuestion}:${nextQuestionIndex}`}return type}return questionIndex[s.survey],survey=>(questionIndex,question,response)=>{if(!question.branching||!("responseValues"in question.branching))return types.kv.NextQuestion;if(Number.isInteger(question.branching.responseValues[response])){let nextQuestionIndex=question.branching.responseValues[response];return`${types.kv.SpecificQuestion}:${nextQuestionIndex}`}return question.branching?.responseValues?.[response]?question.branching.responseValues[response]:questionIndex[s.survey],survey=>{let graph=new Map;survey.questions.forEach((question,fromIndex)=>{if(graph.has(fromIndex)||graph.set(fromIndex,new Set),question.branching?.type!==types.kv.End){if(question.branching?.type===types.kv.SpecificQuestion&&Number.isInteger(question.branching.index)){let toIndex=question.branching.index;graph.get(fromIndex).add(toIndex);return}if(question.branching?.type===types.kv.ResponseBased&&(0,utils.Kn)(question.branching?.responseValues))for(let[_,toIndex]of Object.entries(question.branching?.responseValues))Number.isInteger(toIndex)&&graph.get(fromIndex).add(toIndex);if(fromIndex[s.survey],survey=>survey.questions.some(question=>question.branching&&Object.keys(question.branching).length>0)],surveyAsInsightURL:[s=>[s.survey],survey=>{let query={kind:schema.OH.InsightVizNode,source:{kind:schema.OH.TrendsQuery,properties:[{key:"$survey_id",value:survey.id,operator:types.WV.Exact,type:types.FT.Event}],series:[{kind:schema.OH.EventsNode,event:"survey sent",name:"survey sent",math:types.vN.TotalCount},{kind:schema.OH.EventsNode,event:"survey shown",name:"survey shown",math:types.vN.TotalCount},{kind:schema.OH.EventsNode,event:"survey dismissed",name:"survey dismissed",math:types.vN.TotalCount}]}};return urls.j.insightNew(void 0,void 0,query)}]}),(0,lib.forms)(_ref30=>{let{actions,props,values}=_ref30;return{survey:{defaults:{...constants.Uo},errors:_ref31=>{let{name,questions}=_ref31;return{name:!name&&"Please enter a name.",questions:questions.map(question=>{let questionErrors={question:!question.question&&"Please enter a question label."};return question.type===types.I9.Rating?{...questionErrors,display:!question.display&&"Please choose a display type.",scale:!question.scale&&"Please choose a scale.",lowerBoundLabel:!question.lowerBoundLabel&&"Please enter a lower bound label.",upperBoundLabel:!question.upperBoundLabel&&"Please enter an upper bound label."}:question.type===types.I9.SingleChoice||question.type===types.I9.MultipleChoice?{...questionErrors,choices:question.choices.some(choice=>!choice.trim())?"Please ensure all choices are non-empty.":void 0}:questionErrors}),targeting_flag_filters:values.flagPropertyErrors,urlMatchType:values.urlMatchTypeValidationError}},submit:surveyPayload=>{if(values.hasCycle)return actions.reportSurveyCycleDetected(values.survey),src.UJ.error("Your survey contains an endless cycle. Please revisit your branching rules.");actions.editingSurvey(!1),props.id&&"new"!==props.id?actions.updateSurvey(surveyPayload):actions.createSurvey(surveyPayload)}}}}),(0,kea_router_lib.urlToAction)(_ref32=>{var _props$id;let{actions,props}=_ref32;return{[urls.j.survey(null!==(_props$id=props.id)&&void 0!==_props$id?_props$id:"new")]:(_,_ref33,__,_ref34)=>{let{edit}=_ref33,{method}=_ref34;"new"===props.id&&actions.editingSurvey(!0),"PUSH"===method&&(props.id?actions.loadSurvey():actions.resetSurvey()),edit&&actions.editingSurvey(!0)}}}),(0,kea_router_lib.actionToUrl)(_ref35=>{let{values}=_ref35;return{setSurveyTemplateValues:()=>{let hashParams=kea_router_lib.router.values.hashParams;return hashParams.fromTemplate=!0,[urls.j.survey(values.survey.id),kea_router_lib.router.values.searchParams,hashParams]},editingSurvey:_ref36=>{let{editing}=_ref36,searchParams=kea_router_lib.router.values.searchParams;return editing?searchParams.edit=!0:delete searchParams.edit,[kea_router_lib.router.values.location.pathname,kea_router_lib.router.values.searchParams,kea_router_lib.router.values.hashParams]}}}),(0,index_esm.afterMount)(_ref37=>{let{props,actions}=_ref37;"new"!==props.id&&actions.loadSurvey(),"new"===props.id&&actions.resetSurvey()})]);function sanitizeQuestions(surveyPayload){if(!surveyPayload.questions)return surveyPayload;let sanitizedThankYouHeader=sanitizeHTML(surveyPayload.appearance?.thankYouMessageHeader||""),sanitizedThankYouDescription=sanitizeHTML(surveyPayload.appearance?.thankYouMessageDescription||"");return{...surveyPayload,questions:surveyPayload.questions?.map(rawQuestion=>({...rawQuestion,description:sanitizeHTML(rawQuestion.description||""),question:sanitizeHTML(rawQuestion.question||"")})),appearance:{...surveyPayload.appearance,...sanitizedThankYouHeader&&{thankYouMessageHeader:sanitizedThankYouHeader},...sanitizedThankYouDescription&&{thankYouMessageDescription:sanitizedThankYouDescription}}}}},"./frontend/src/scenes/surveys/surveysLogic.tsx":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{Iq:()=>SurveysTabs,kT:()=>surveysLogic,zs:()=>getSurveyStatus});var _posthog_lemon_ui__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./frontend/@posthog/lemon-ui/src/index.ts"),fuse_js__WEBPACK_IMPORTED_MODULE_10__=__webpack_require__("./node_modules/.pnpm/fuse.js@6.6.2/node_modules/fuse.js/dist/fuse.esm.js"),kea__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/.pnpm/kea@3.1.5_react@18.2.0/node_modules/kea/lib/index.esm.js"),kea_loaders__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./node_modules/.pnpm/kea-loaders@3.0.0_kea@3.1.5/node_modules/kea-loaders/lib/index.js"),kea_router__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./node_modules/.pnpm/kea-router@3.2.0_kea@3.1.5/node_modules/kea-router/lib/index.js"),lib_api__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__("./frontend/src/lib/api.ts"),scenes_sceneTypes__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__("./frontend/src/scenes/sceneTypes.ts"),scenes_teamLogic__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__("./frontend/src/scenes/teamLogic.tsx"),scenes_urls__WEBPACK_IMPORTED_MODULE_7__=__webpack_require__("./frontend/src/scenes/urls.ts"),scenes_userLogic__WEBPACK_IMPORTED_MODULE_8__=__webpack_require__("./frontend/src/scenes/userLogic.ts"),_types__WEBPACK_IMPORTED_MODULE_9__=__webpack_require__("./frontend/src/types.ts");let SurveysTabs=function(SurveysTabs){return SurveysTabs.Active="active",SurveysTabs.Yours="yours",SurveysTabs.Archived="archived",SurveysTabs.Notifications="notifications",SurveysTabs.History="history",SurveysTabs.Settings="settings",SurveysTabs}({});function getSurveyStatus(survey){return survey.start_date?survey.end_date?_types__WEBPACK_IMPORTED_MODULE_9__.mN.Complete:_types__WEBPACK_IMPORTED_MODULE_9__.mN.Running:_types__WEBPACK_IMPORTED_MODULE_9__.mN.Draft}let surveysLogic=(0,kea__WEBPACK_IMPORTED_MODULE_1__.kea)([(0,kea__WEBPACK_IMPORTED_MODULE_1__.path)(["scenes","surveys","surveysLogic"]),(0,kea__WEBPACK_IMPORTED_MODULE_1__.connect)(()=>({values:[scenes_userLogic__WEBPACK_IMPORTED_MODULE_8__.userLogic,["hasAvailableFeature"],scenes_teamLogic__WEBPACK_IMPORTED_MODULE_6__.H,["currentTeam","currentTeamLoading"]],actions:[scenes_teamLogic__WEBPACK_IMPORTED_MODULE_6__.H,["loadCurrentTeam"]]})),(0,kea__WEBPACK_IMPORTED_MODULE_1__.actions)({setSearchTerm:searchTerm=>({searchTerm}),setSurveysFilters:(filters,replace)=>({filters,replace}),setTab:tab=>({tab})}),(0,kea_loaders__WEBPACK_IMPORTED_MODULE_2__.loaders)(_ref=>{let{values}=_ref;return{surveys:{__default:[],loadSurveys:async()=>{let responseSurveys=await lib_api__WEBPACK_IMPORTED_MODULE_4__.ZP.surveys.list();return responseSurveys.results},deleteSurvey:async id=>(await lib_api__WEBPACK_IMPORTED_MODULE_4__.ZP.surveys.delete(id),values.surveys.filter(survey=>survey.id!==id)),updateSurvey:async _ref2=>{let{id,updatePayload}=_ref2,updatedSurvey=await lib_api__WEBPACK_IMPORTED_MODULE_4__.ZP.surveys.update(id,{...updatePayload});return values.surveys.map(survey=>survey.id===id?updatedSurvey:survey)}},surveysResponsesCount:{__default:{},loadResponsesCount:async()=>{let surveysResponsesCount=await lib_api__WEBPACK_IMPORTED_MODULE_4__.ZP.surveys.getResponsesCount();return surveysResponsesCount}}}}),(0,kea__WEBPACK_IMPORTED_MODULE_1__.reducers)({tab:[SurveysTabs.Active,{setTab:(_,_ref3)=>{let{tab}=_ref3;return tab}}],searchTerm:{setSearchTerm:(_,_ref4)=>{let{searchTerm}=_ref4;return searchTerm}},filters:[{archived:!1,status:"any",created_by:null},{setSurveysFilters:(state,_ref5)=>{let{filters}=_ref5;return{...state,...filters}}}]}),(0,kea__WEBPACK_IMPORTED_MODULE_1__.listeners)(_ref6=>{let{actions,values}=_ref6;return{deleteSurveySuccess:()=>{_posthog_lemon_ui__WEBPACK_IMPORTED_MODULE_0__.UJ.success("Survey deleted"),kea_router__WEBPACK_IMPORTED_MODULE_3__.router.actions.push(scenes_urls__WEBPACK_IMPORTED_MODULE_7__.j.surveys())},updateSurveySuccess:()=>{_posthog_lemon_ui__WEBPACK_IMPORTED_MODULE_0__.UJ.success("Survey updated"),actions.loadCurrentTeam()},setSurveysFilters:()=>{actions.loadSurveys(),actions.loadResponsesCount()},loadSurveysSuccess:()=>{actions.loadCurrentTeam()},setTab:_ref7=>{let{tab}=_ref7;actions.setSurveysFilters({...values.filters,archived:tab===SurveysTabs.Archived})}}}),(0,kea__WEBPACK_IMPORTED_MODULE_1__.selectors)({searchedSurveys:[selectors=>[selectors.surveys,selectors.searchTerm,selectors.filters],(surveys,searchTerm,filters)=>{let searchedSurveys=surveys;if(!searchTerm&&0===Object.keys(filters).length)return searchedSurveys;searchTerm&&(searchedSurveys=new fuse_js__WEBPACK_IMPORTED_MODULE_10__.Z(searchedSurveys,{keys:["key","name"],threshold:.3}).search(searchTerm).map(result=>result.item));let{status,created_by,archived}=filters;return"any"!==status&&(searchedSurveys=searchedSurveys.filter(survey=>getSurveyStatus(survey)===status)),created_by&&(searchedSurveys=searchedSurveys.filter(survey=>survey.created_by?.id===created_by)),searchedSurveys=archived?searchedSurveys.filter(survey=>survey.archived):searchedSurveys.filter(survey=>!survey.archived)}],breadcrumbs:[()=>[],()=>[{key:scenes_sceneTypes__WEBPACK_IMPORTED_MODULE_5__.x.Surveys,name:"Surveys",path:scenes_urls__WEBPACK_IMPORTED_MODULE_7__.j.surveys()}]],surveysStylingAvailable:[s=>[s.hasAvailableFeature],hasAvailableFeature=>hasAvailableFeature(_types__WEBPACK_IMPORTED_MODULE_9__.P$.SURVEYS_STYLING)],globalSurveyAppearanceConfigAvailable:[s=>[s.hasAvailableFeature],hasAvailableFeature=>hasAvailableFeature(_types__WEBPACK_IMPORTED_MODULE_9__.P$.SURVEYS_STYLING)],surveysHTMLAvailable:[s=>[s.hasAvailableFeature],hasAvailableFeature=>hasAvailableFeature(_types__WEBPACK_IMPORTED_MODULE_9__.P$.SURVEYS_TEXT_HTML)],surveysMultipleQuestionsAvailable:[s=>[s.hasAvailableFeature],hasAvailableFeature=>hasAvailableFeature(_types__WEBPACK_IMPORTED_MODULE_9__.P$.SURVEYS_MULTIPLE_QUESTIONS)],surveysRecurringScheduleAvailable:[s=>[s.hasAvailableFeature],hasAvailableFeature=>hasAvailableFeature(_types__WEBPACK_IMPORTED_MODULE_9__.P$.SURVEYS_RECURRING)],surveysEventsAvailable:[s=>[s.hasAvailableFeature],hasAvailableFeature=>hasAvailableFeature(_types__WEBPACK_IMPORTED_MODULE_9__.P$.SURVEYS_EVENTS)],surveysActionsAvailable:[s=>[s.hasAvailableFeature],hasAvailableFeature=>hasAvailableFeature(_types__WEBPACK_IMPORTED_MODULE_9__.P$.SURVEYS_ACTIONS)],showSurveysDisabledBanner:[s=>[s.currentTeam,s.currentTeamLoading,s.surveys],(currentTeam,currentTeamLoading,surveys)=>!currentTeamLoading&¤tTeam&&!currentTeam.surveys_opt_in&&surveys.some(s=>s.start_date&&!s.end_date&&s.type!==_types__WEBPACK_IMPORTED_MODULE_9__.d_.API)]}),(0,kea_router__WEBPACK_IMPORTED_MODULE_3__.actionToUrl)(_ref8=>{let{values}=_ref8;return{setTab:()=>[kea_router__WEBPACK_IMPORTED_MODULE_3__.router.values.location.pathname,{...kea_router__WEBPACK_IMPORTED_MODULE_3__.router.values.searchParams,tab:values.tab}]}}),(0,kea_router__WEBPACK_IMPORTED_MODULE_3__.urlToAction)(_ref9=>{let{actions}=_ref9;return{[scenes_urls__WEBPACK_IMPORTED_MODULE_7__.j.surveys()]:(_,_ref10)=>{let{tab}=_ref10;tab&&actions.setTab(tab)}}}),(0,kea__WEBPACK_IMPORTED_MODULE_1__.afterMount)(_ref11=>{let{actions}=_ref11;actions.loadSurveys(),actions.loadResponsesCount()})])},"./frontend/src/scenes/teamLogic.tsx":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{H:()=>teamLogic,R:()=>isAuthenticatedTeam});var kea__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./node_modules/.pnpm/kea@3.1.5_react@18.2.0/node_modules/kea/lib/index.esm.js"),kea_loaders__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/.pnpm/kea-loaders@3.0.0_kea@3.1.5/node_modules/kea-loaders/lib/index.js"),lib_api__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./frontend/src/lib/api.ts"),lib_constants__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./frontend/src/lib/constants.tsx"),lib_lemon_ui_icons__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__("./frontend/src/lib/lemon-ui/icons/index.ts"),lib_lemon_ui_LemonToast_LemonToast__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__("./frontend/src/lib/lemon-ui/LemonToast/LemonToast.tsx"),lib_logic_featureFlagLogic__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__("./frontend/src/lib/logic/featureFlagLogic.ts"),lib_utils__WEBPACK_IMPORTED_MODULE_7__=__webpack_require__("./frontend/src/lib/utils.tsx"),lib_utils_eventUsageLogic__WEBPACK_IMPORTED_MODULE_8__=__webpack_require__("./frontend/src/lib/utils/eventUsageLogic.ts"),lib_utils_getAppContext__WEBPACK_IMPORTED_MODULE_9__=__webpack_require__("./frontend/src/lib/utils/getAppContext.ts"),_organizationLogic__WEBPACK_IMPORTED_MODULE_10__=__webpack_require__("./frontend/src/scenes/organizationLogic.tsx"),_projectLogic__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__("./frontend/src/scenes/projectLogic.ts"),_userLogic__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__("./frontend/src/scenes/userLogic.ts"),react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__=__webpack_require__("./node_modules/.pnpm/react@18.2.0/node_modules/react/jsx-runtime.js");let parseUpdatedAttributeName=attr=>"slack_incoming_webhook"===attr?"Webhook":"app_urls"===attr?"Authorized URLs":attr?(0,lib_utils__WEBPACK_IMPORTED_MODULE_7__.UV)(attr):"Project";function isAuthenticatedTeam(team){return!!team&&"api_token"in team}let teamLogic=(0,kea__WEBPACK_IMPORTED_MODULE_0__.kea)([(0,kea__WEBPACK_IMPORTED_MODULE_0__.path)(["scenes","teamLogic"]),(0,kea__WEBPACK_IMPORTED_MODULE_0__.connect)(()=>({actions:[_userLogic__WEBPACK_IMPORTED_MODULE_12__.userLogic,["loadUser","switchTeam"]],values:[_projectLogic__WEBPACK_IMPORTED_MODULE_11__.K,["currentProject"],lib_logic_featureFlagLogic__WEBPACK_IMPORTED_MODULE_6__.h,["featureFlags"]]})),(0,kea__WEBPACK_IMPORTED_MODULE_0__.actions)({deleteTeam:team=>({team}),deleteTeamSuccess:!0,deleteTeamFailure:!0}),(0,kea__WEBPACK_IMPORTED_MODULE_0__.reducers)({teamBeingDeleted:[null,{deleteTeam:(_,_ref)=>{let{team}=_ref;return team},deleteTeamSuccess:()=>null,deleteTeamFailure:()=>null}]}),(0,kea_loaders__WEBPACK_IMPORTED_MODULE_1__.loaders)(_ref2=>{let{values,actions}=_ref2;return{currentTeam:[null,{loadCurrentTeam:async()=>{if(!(0,lib_utils__WEBPACK_IMPORTED_MODULE_7__.Pc)())return null;try{return await lib_api__WEBPACK_IMPORTED_MODULE_2__.ZP.get("api/environments/@current")}catch{return values.currentTeam}},updateCurrentTeam:async(payload,breakpoint)=>{let message;if(!values.currentTeam)throw Error("Current team has not been loaded yet, so it cannot be updated!");payload.session_replay_config&&(payload.session_replay_config={...values.currentTeam.session_replay_config,...payload.session_replay_config});let promises=[lib_api__WEBPACK_IMPORTED_MODULE_2__.ZP.update(`api/environments/${values.currentTeam.id}`,payload),void 0];1===Object.keys(payload).length&&payload.name&&values.currentProject&&!values.featureFlags[lib_constants__WEBPACK_IMPORTED_MODULE_3__.y8.ENVIRONMENTS]&&(promises[0]=lib_api__WEBPACK_IMPORTED_MODULE_2__.ZP.update(`api/projects/${values.currentProject.id}`,{name:payload.name}));let[patchedTeam]=await Promise.all(promises);breakpoint(),actions.loadUser();let updatedAttribute=1===Object.keys(payload).length?Object.keys(payload)[0]:null;return message="slack_incoming_webhook"===updatedAttribute?payload.slack_incoming_webhook?`Webhook integration enabled – you should be seeing a message on ${(0,lib_utils__WEBPACK_IMPORTED_MODULE_7__.rt)(payload.slack_incoming_webhook)}`:"Webhook integration disabled":"completed_snippet_onboarding"===updatedAttribute||"has_completed_onboarding_for"===updatedAttribute?"Congrats! You're now ready to use PostHog.":`${parseUpdatedAttributeName(updatedAttribute)} updated successfully!`,Object.keys(payload).map(property=>{lib_utils_eventUsageLogic__WEBPACK_IMPORTED_MODULE_8__.vx.findMounted()?.actions?.reportTeamSettingChange(property,payload[property])}),window.location.pathname.match(/\/(onboarding|products)/)||lib_lemon_ui_LemonToast_LemonToast__WEBPACK_IMPORTED_MODULE_5__.UJ.success(message),patchedTeam},createTeam:async _ref3=>{let{name,is_demo}=_ref3;if(!values.currentProject)throw Error("Environment could not be created, because the parent project has not been loaded yet!");return await lib_api__WEBPACK_IMPORTED_MODULE_2__.ZP.create(`api/projects/${values.currentProject.id}/environments/`,{name,is_demo})},resetToken:async()=>await lib_api__WEBPACK_IMPORTED_MODULE_2__.ZP.update(`api/environments/${values.currentTeamId}/reset_token`,{}),addProductIntent:async _ref4=>{let{product_type,intent_context}=_ref4;return await lib_api__WEBPACK_IMPORTED_MODULE_2__.ZP.update(`api/environments/${values.currentTeamId}/add_product_intent`,{product_type,intent_context:null!=intent_context?intent_context:void 0})},recordProductIntentOnboardingComplete:async _ref5=>{let{product_type}=_ref5;return await lib_api__WEBPACK_IMPORTED_MODULE_2__.ZP.update(`api/environments/${values.currentTeamId}/complete_product_onboarding`,{product_type})}}]}}),(0,kea__WEBPACK_IMPORTED_MODULE_0__.selectors)(()=>({hasOnboardedAnyProduct:[selectors=>[selectors.currentTeam],currentTeam=>!currentTeam||!!currentTeam.completed_snippet_onboarding||!!Object.keys(currentTeam.has_completed_onboarding_for||{}).length],currentTeamId:[selectors=>[selectors.currentTeam],currentTeam=>currentTeam?currentTeam.id:null],isCurrentTeamUnavailable:[selectors=>[selectors.currentTeam,selectors.currentTeamLoading],(currentTeam,currentTeamLoading)=>!currentTeam?.effective_membership_level&&!currentTeamLoading],demoOnlyProject:[selectors=>[selectors.currentTeam,_organizationLogic__WEBPACK_IMPORTED_MODULE_10__.p.selectors.currentOrganization],(currentTeam,currentOrganization)=>currentTeam?.is_demo&¤tOrganization?.teams&&1==currentOrganization.teams.length||!1],funnelCorrelationConfig:[selectors=>[selectors.currentTeam],currentTeam=>currentTeam?.correlation_config||{}],timezone:[selectors=>[selectors.currentTeam],currentTeam=>currentTeam?.timezone||"UTC"],weekStartDay:[selectors=>[selectors.currentTeam],currentTeam=>currentTeam?.week_start_day||0],isTeamTokenResetAvailable:[selectors=>[selectors.currentTeam],currentTeam=>!!currentTeam?.effective_membership_level&¤tTeam.effective_membership_level>=lib_constants__WEBPACK_IMPORTED_MODULE_3__.Dk.Admin],testAccountFilterFrequentMistakes:[selectors=>[selectors.currentTeam],currentTeam=>{if(!currentTeam)return[];let frequentMistakes=[];for(let filter of currentTeam.test_account_filters||[])"email"===filter.key&&"event"===filter.type&&frequentMistakes.push({key:"email",type:"event",fix:"it is more common to filter email by person properties, not event properties"});return frequentMistakes}]})),(0,kea__WEBPACK_IMPORTED_MODULE_0__.listeners)(_ref6=>{let{actions}=_ref6;return{loadCurrentTeamSuccess:_ref7=>{let{currentTeam}=_ref7;currentTeam&&lib_api__WEBPACK_IMPORTED_MODULE_2__.x7.setCurrentTeamId(currentTeam.id)},createTeamSuccess:_ref8=>{let{currentTeam}=_ref8;currentTeam&&actions.switchTeam(currentTeam.id)},deleteTeam:async _ref9=>{let{team}=_ref9;try{await lib_api__WEBPACK_IMPORTED_MODULE_2__.ZP.delete(`api/environments/${team.id}`),location.reload(),actions.deleteTeamSuccess()}catch{actions.deleteTeamFailure()}},deleteTeamSuccess:()=>{lib_lemon_ui_LemonToast_LemonToast__WEBPACK_IMPORTED_MODULE_5__.UJ.success("Project has been deleted")}}}),(0,kea__WEBPACK_IMPORTED_MODULE_0__.afterMount)(_ref10=>{let{actions,values}=_ref10,appContext=(0,lib_utils_getAppContext__WEBPACK_IMPORTED_MODULE_9__.Fj)(),currentTeam=appContext?.current_team,currentProject=appContext?.current_project,switchedTeam=appContext?.switched_team;switchedTeam&&lib_lemon_ui_LemonToast_LemonToast__WEBPACK_IMPORTED_MODULE_5__.UJ.info((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.Fragment,{children:["You've switched to\xa0project"," ",values.featureFlags[lib_constants__WEBPACK_IMPORTED_MODULE_3__.y8.ENVIRONMENTS]?`${currentProject?.name}, environment ${currentTeam?.name}`:currentTeam?.name]}),{button:{label:"Switch back",action:()=>actions.switchTeam(switchedTeam)},icon:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(lib_lemon_ui_icons__WEBPACK_IMPORTED_MODULE_4__._S,{})}),currentTeam?actions.loadCurrentTeamSuccess(currentTeam):actions.loadCurrentTeam()})])},"./frontend/src/scenes/trends/mathsLogic.tsx":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{J$:()=>apiValueToMathType,X1:()=>PROPERTY_MATH_DEFINITIONS,YG:()=>BASE_MATH_DEFINITIONS,Yw:()=>mathTypeToApiValues,Z$:()=>MathCategory,fx:()=>mathsLogic,xo:()=>COUNT_PER_ACTOR_MATH_DEFINITIONS});var kea__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./node_modules/.pnpm/kea@3.1.5_react@18.2.0/node_modules/kea/lib/index.esm.js"),lib_constants__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./frontend/src/lib/constants.tsx"),lib_introductions_groupsAccessLogic__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./frontend/src/lib/introductions/groupsAccessLogic.ts"),lib_logic_featureFlagLogic__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./frontend/src/lib/logic/featureFlagLogic.ts"),_models_groupsModel__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__("./frontend/src/models/groupsModel.ts"),_types__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__("./frontend/src/types.ts"),react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__("./node_modules/.pnpm/react@18.2.0/node_modules/react/jsx-runtime.js");let MathCategory=function(MathCategory){return MathCategory[MathCategory.EventCount=0]="EventCount",MathCategory[MathCategory.SessionCount=1]="SessionCount",MathCategory[MathCategory.ActorCount=2]="ActorCount",MathCategory[MathCategory.EventCountPerActor=3]="EventCountPerActor",MathCategory[MathCategory.PropertyValue=4]="PropertyValue",MathCategory[MathCategory.HogQLExpression=5]="HogQLExpression",MathCategory}({}),FUNNEL_MATH_DEFINITIONS={[_types__WEBPACK_IMPORTED_MODULE_5__.S7.AnyMatch]:{name:"Any events match",shortName:"any event",description:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.Fragment,{children:"Any event of this type that matches the filter will count towards the funnel"}),category:MathCategory.EventCount},[_types__WEBPACK_IMPORTED_MODULE_5__.S7.FirstTimeForUser]:{name:"First event for user",shortName:"first event",description:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.Fragment,{children:["Only the first time the user performed this event will count towards the funnel, and only if it matches the event filters.",(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("br",{}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("br",{}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("i",{children:"Example: If the we are looking for pageview events to posthog.com/about, but the user's first pageview was on posthog.com, it will not match, even if they went to posthog.com/about afterwards."})]}),category:MathCategory.EventCount},[_types__WEBPACK_IMPORTED_MODULE_5__.S7.FirstTimeForUserWithFilters]:{name:"First matching event for user",shortName:"first matching event",description:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.Fragment,{children:["The first time the user performed this event that matches the event filters will count towards the funnel.",(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("br",{}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("br",{}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("i",{children:"Example: If the we are looking for pageview events to posthog.com/about, and the user's first pageview was on posthog.com but then they navigated to posthog.com/about, it will match the pageview event from posthog.com/about"})]}),category:MathCategory.EventCount}},BASE_MATH_DEFINITIONS={[_types__WEBPACK_IMPORTED_MODULE_5__.vN.TotalCount]:{name:"Total count",shortName:"count",description:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.Fragment,{children:["Total event count. Total number of times the event was performed by any user.",(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("br",{}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("br",{}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("i",{children:"Example: If a user performs an event 3 times in the given period, it counts as 3."})]}),category:MathCategory.EventCount},[_types__WEBPACK_IMPORTED_MODULE_5__.vN.UniqueUsers]:{name:"Unique users",shortName:"unique users",description:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.Fragment,{children:["Number of unique users who performed the event in the specified period.",(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("br",{}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("br",{}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("i",{children:"Example: If a single user performs an event 3 times in a given day/week/month, it counts only as 1."})]}),category:MathCategory.ActorCount},[_types__WEBPACK_IMPORTED_MODULE_5__.vN.WeeklyActiveUsers]:{name:"Weekly active users",shortName:"WAUs",description:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.Fragment,{children:["Users active in the past week (7 days).",(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("br",{}),"This is a trailing count that aggregates distinct users in the past 7 days for each day in the time series"]}),category:MathCategory.ActorCount},[_types__WEBPACK_IMPORTED_MODULE_5__.vN.MonthlyActiveUsers]:{name:"Monthly active users",shortName:"MAUs",description:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.Fragment,{children:["Users active in the past month (30 days).",(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("br",{}),"This is a trailing count that aggregates distinct users in the past 30 days for each day in the time series"]}),category:MathCategory.ActorCount},[_types__WEBPACK_IMPORTED_MODULE_5__.vN.UniqueSessions]:{name:"Unique sessions",shortName:"unique sessions",description:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.Fragment,{children:["Number of unique sessions where the event was performed in the specified period.",(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("br",{}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("br",{}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("i",{children:"Example: If a single user performs an event 3 times in two separate sessions, it counts as two sessions."})]}),category:MathCategory.SessionCount},[_types__WEBPACK_IMPORTED_MODULE_5__.vN.FirstTimeForUser]:{name:"First time for user",shortName:"first time",description:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.Fragment,{children:["Only count events if users do it for the first time.",(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("br",{}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("br",{}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("i",{children:"Example: If a single user performs an event for the first time ever within a given period, it counts as 1. Subsequent events by the same user will not be counted."})]}),category:MathCategory.EventCount}},PROPERTY_MATH_DEFINITIONS={[_types__WEBPACK_IMPORTED_MODULE_5__.O4.Average]:{name:"Average",shortName:"average",description:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.Fragment,{children:["Average of a property value within an event or action.",(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("br",{}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("br",{}),"For example 3 events captured with property ",(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("code",{children:"amount"})," equal to 10, 12 and 20, result in 14."]}),category:MathCategory.PropertyValue},[_types__WEBPACK_IMPORTED_MODULE_5__.O4.Sum]:{name:"Sum",shortName:"sum",description:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.Fragment,{children:["Sum of property values within an event or action.",(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("br",{}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("br",{}),"For example 3 events captured with property ",(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("code",{children:"amount"})," equal to 10, 12 and 20, result in 42."]}),category:MathCategory.PropertyValue},[_types__WEBPACK_IMPORTED_MODULE_5__.O4.Minimum]:{name:"Minimum",shortName:"minimum",description:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.Fragment,{children:["Event property minimum.",(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("br",{}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("br",{}),"For example 3 events captured with property ",(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("code",{children:"amount"})," equal to 10, 12 and 20, result in 10."]}),category:MathCategory.PropertyValue},[_types__WEBPACK_IMPORTED_MODULE_5__.O4.Maximum]:{name:"Maximum",shortName:"maximum",description:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.Fragment,{children:["Event property maximum.",(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("br",{}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("br",{}),"For example 3 events captured with property ",(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("code",{children:"amount"})," equal to 10, 12 and 20, result in 20."]}),category:MathCategory.PropertyValue},[_types__WEBPACK_IMPORTED_MODULE_5__.O4.Median]:{name:"Median",shortName:"median",description:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.Fragment,{children:["Event property median (50th percentile).",(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("br",{}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("br",{}),"For example 100 events captured with property ",(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("code",{children:"amount"})," equal to 101..200, result in 150."]}),category:MathCategory.PropertyValue},[_types__WEBPACK_IMPORTED_MODULE_5__.O4.P90]:{name:"90th percentile",shortName:"90th percentile",description:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.Fragment,{children:["Event property 90th percentile.",(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("br",{}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("br",{}),"For example 100 events captured with property ",(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("code",{children:"amount"})," equal to 101..200, result in 190."]}),category:MathCategory.PropertyValue},[_types__WEBPACK_IMPORTED_MODULE_5__.O4.P95]:{name:"95th percentile",shortName:"95th percentile",description:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.Fragment,{children:["Event property 95th percentile.",(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("br",{}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("br",{}),"For example 100 events captured with property ",(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("code",{children:"amount"})," equal to 101..200, result in 195."]}),category:MathCategory.PropertyValue},[_types__WEBPACK_IMPORTED_MODULE_5__.O4.P99]:{name:"99th percentile",shortName:"99th percentile",description:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.Fragment,{children:["Event property 99th percentile.",(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("br",{}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("br",{}),"For example 100 events captured with property ",(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("code",{children:"amount"})," equal to 101..200, result in 199."]}),category:MathCategory.PropertyValue}},HOGQL_MATH_DEFINITIONS={[_types__WEBPACK_IMPORTED_MODULE_5__.mY.HogQL]:{name:"HogQL expression",shortName:"HogQL expression",description:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.Fragment,{children:"Aggregate with a custom HogQL expression."}),category:MathCategory.HogQLExpression}},COUNT_PER_ACTOR_MATH_DEFINITIONS={[_types__WEBPACK_IMPORTED_MODULE_5__.D7.Average]:{name:"Average",shortName:"average",description:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.Fragment,{children:"Event count per actor average."}),category:MathCategory.EventCountPerActor},[_types__WEBPACK_IMPORTED_MODULE_5__.D7.Minimum]:{name:"Minimum",shortName:"minimum",description:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.Fragment,{children:"Event count per actor minimum."}),category:MathCategory.EventCountPerActor},[_types__WEBPACK_IMPORTED_MODULE_5__.D7.Maximum]:{name:"Maximum",shortName:"maximum",description:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.Fragment,{children:"Event count per actor maximum."}),category:MathCategory.EventCountPerActor},[_types__WEBPACK_IMPORTED_MODULE_5__.D7.Median]:{name:"Median",shortName:"median",description:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.Fragment,{children:"Event count per actor 50th percentile."}),category:MathCategory.EventCountPerActor},[_types__WEBPACK_IMPORTED_MODULE_5__.D7.P90]:{name:"90th percentile",shortName:"90th percentile",description:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.Fragment,{children:"Event count per actor 90th percentile."}),category:MathCategory.EventCountPerActor},[_types__WEBPACK_IMPORTED_MODULE_5__.D7.P95]:{name:"95th percentile",shortName:"95th percentile",description:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.Fragment,{children:"Event count per actor 95th percentile."}),category:MathCategory.EventCountPerActor},[_types__WEBPACK_IMPORTED_MODULE_5__.D7.P99]:{name:"99th percentile",shortName:"99th percentile",description:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.Fragment,{children:"Event count per actor 99th percentile."}),category:MathCategory.EventCountPerActor}};function mathTypeToApiValues(mathType){let[math,mathGroupTypeIndexRaw]=mathType.split("::"),mathGroupTypeIndex=void 0!==mathGroupTypeIndexRaw?parseInt(mathGroupTypeIndexRaw):NaN;return isNaN(mathGroupTypeIndex)?{math}:{math,math_group_type_index:mathGroupTypeIndex}}function apiValueToMathType(math,groupTypeIndex){let assembledMath=math||_types__WEBPACK_IMPORTED_MODULE_5__.vN.TotalCount;return"unique_group"===math&&(assembledMath+=`::${groupTypeIndex}`),assembledMath}let mathsLogic=(0,kea__WEBPACK_IMPORTED_MODULE_0__.kea)([(0,kea__WEBPACK_IMPORTED_MODULE_0__.path)(["scenes","trends","mathsLogic"]),(0,kea__WEBPACK_IMPORTED_MODULE_0__.connect)({values:[_models_groupsModel__WEBPACK_IMPORTED_MODULE_4__.$,["groupTypes","aggregationLabel"],lib_introductions_groupsAccessLogic__WEBPACK_IMPORTED_MODULE_2__.e,["needsUpgradeForGroups","canStartUsingGroups"],lib_logic_featureFlagLogic__WEBPACK_IMPORTED_MODULE_3__.h,["featureFlags"]]}),(0,kea__WEBPACK_IMPORTED_MODULE_0__.selectors)({mathDefinitions:[s=>[s.groupsMathDefinitions,s.featureFlags],(groupsMathDefinitions,featureFlags)=>{let allMathDefinitions={...BASE_MATH_DEFINITIONS,...groupsMathDefinitions,...PROPERTY_MATH_DEFINITIONS,...COUNT_PER_ACTOR_MATH_DEFINITIONS,...HOGQL_MATH_DEFINITIONS};return filterMathTypesUnderFeatureFlags(allMathDefinitions,featureFlags)}],funnelMathDefinitions:[s=>[s.featureFlags],featureFlags=>{let funnelMathDefinitions={...FUNNEL_MATH_DEFINITIONS};return filterMathTypesUnderFeatureFlags(funnelMathDefinitions,featureFlags)}],staticMathDefinitions:[s=>[s.groupsMathDefinitions,s.needsUpgradeForGroups,s.featureFlags],(groupsMathDefinitions,needsUpgradeForGroups,featureFlags)=>{let staticMathDefinitions={...BASE_MATH_DEFINITIONS,...needsUpgradeForGroups?{}:groupsMathDefinitions};return filterMathTypesUnderFeatureFlags(staticMathDefinitions,featureFlags)}],staticActorsOnlyMathDefinitions:[s=>[s.staticMathDefinitions],staticMathDefinitions=>Object.fromEntries(Object.entries(staticMathDefinitions).filter(_ref=>{let[,mathDefinition]=_ref;return mathDefinition.category===MathCategory.ActorCount}))],groupsMathDefinitions:[s=>[s.groupTypes,s.aggregationLabel],(groupTypes,aggregationLabel)=>Object.fromEntries(Array.from(groupTypes.values()).map(groupType=>[apiValueToMathType("unique_group",groupType.group_type_index),{name:`Unique ${aggregationLabel(groupType.group_type_index).plural}`,shortName:`unique ${aggregationLabel(groupType.group_type_index).plural}`,description:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.Fragment,{children:["Number of unique ",aggregationLabel(groupType.group_type_index).plural," who performed the event in the specified period.",(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("br",{}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("br",{}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)("i",{children:["Example: If 7 users in a single $",aggregationLabel(groupType.group_type_index).singular," perform an event 9 times in the given period, it counts only as 1."]})]}),category:MathCategory.ActorCount}]).filter(Boolean))]})]);function filterMathTypesUnderFeatureFlags(mathDefinitions,featureFlags){let copy={...mathDefinitions};return featureFlags[lib_constants__WEBPACK_IMPORTED_MODULE_1__.y8.FIRST_TIME_FOR_USER_MATH]||delete copy[_types__WEBPACK_IMPORTED_MODULE_5__.vN.FirstTimeForUser],copy}},"./frontend/src/scenes/trends/persons-modal/PersonsModal.tsx":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{JY:()=>MissingPersonsAlert,AP:()=>PersonsModal_PersonsModal,Yp:()=>openPersonsModal});var injectStylesIntoStyleTag=__webpack_require__("./node_modules/.pnpm/style-loader@2.0.0_webpack@5.88.2/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),injectStylesIntoStyleTag_default=__webpack_require__.n(injectStylesIntoStyleTag),PersonsModal=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/trends/persons-modal/PersonsModal.scss"),PersonsModal_default=__webpack_require__.n(PersonsModal),options={};options.insert="head",options.singleton=!1,injectStylesIntoStyleTag_default()(PersonsModal_default(),options),PersonsModal_default().locals;var posthog_icons_es=__webpack_require__("./node_modules/.pnpm/@posthog+icons@0.8.5_react-dom@18.2.0_react@18.2.0/node_modules/@posthog/icons/dist/posthog-icons.es.js"),src=__webpack_require__("./frontend/@posthog/lemon-ui/src/index.ts"),index_esm=__webpack_require__("./node_modules/.pnpm/kea@3.1.5_react@18.2.0/node_modules/kea/lib/index.esm.js"),CopyToClipboard=__webpack_require__("./frontend/src/lib/components/CopyToClipboard.tsx"),exportsLogic=__webpack_require__("./frontend/src/lib/components/ExportButton/exportsLogic.ts"),PropertiesTable=__webpack_require__("./frontend/src/lib/components/PropertiesTable/index.ts"),PropertiesTimeline=__webpack_require__("./frontend/src/lib/components/PropertiesTimeline/index.ts"),icons=__webpack_require__("./frontend/src/lib/lemon-ui/icons/index.ts"),LemonTabs=__webpack_require__("./frontend/src/lib/lemon-ui/LemonTabs/index.ts"),ProfilePicture=__webpack_require__("./frontend/src/lib/lemon-ui/ProfilePicture/index.ts"),Spinner=__webpack_require__("./frontend/src/lib/lemon-ui/Spinner/Spinner.tsx"),Tooltip=__webpack_require__("./frontend/src/lib/lemon-ui/Tooltip/index.ts"),utils=__webpack_require__("./frontend/src/lib/utils.tsx"),react=__webpack_require__("./node_modules/.pnpm/react@18.2.0/node_modules/react/index.js"),client=__webpack_require__("./node_modules/.pnpm/react-dom@18.2.0_react@18.2.0/node_modules/react-dom/client.js"),EmptyStates=__webpack_require__("./frontend/src/scenes/insights/EmptyStates/index.ts"),insights_utils=__webpack_require__("./frontend/src/scenes/insights/utils.tsx"),GroupActorDisplay=__webpack_require__("./frontend/src/scenes/persons/GroupActorDisplay.tsx"),person_utils=__webpack_require__("./frontend/src/scenes/persons/person-utils.ts"),PersonDisplay=__webpack_require__("./frontend/src/scenes/persons/PersonDisplay.tsx"),sessionPlayerModalLogic=__webpack_require__("./frontend/src/scenes/session-recordings/player/modal/sessionPlayerModalLogic.ts"),teamLogic=__webpack_require__("./frontend/src/scenes/teamLogic.tsx"),DataTableExport=__webpack_require__("./frontend/src/queries/nodes/DataTable/DataTableExport.tsx"),types=__webpack_require__("./frontend/src/types.ts"),persons_modal_utils=__webpack_require__("./frontend/src/scenes/trends/persons-modal/persons-modal-utils.tsx"),personsModalLogic=__webpack_require__("./frontend/src/scenes/trends/persons-modal/personsModalLogic.ts"),jsx_runtime=__webpack_require__("./node_modules/.pnpm/react@18.2.0/node_modules/react/jsx-runtime.js");function SaveCohortModal(_ref){let{onSave,onCancel,isOpen}=_ref,[cohortTitle,setCohortTitle]=(0,react.useState)("");return(0,jsx_runtime.jsx)(src.fQ,{title:"New cohort",footer:(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[(0,jsx_runtime.jsx)(src.Jp,{type:"secondary",onClick:onCancel,children:"Cancel"}),(0,jsx_runtime.jsx)(src.Jp,{type:"primary",disabledReason:!cohortTitle&&"Please add a title to your cohort",onClick:()=>{onSave(cohortTitle),setCohortTitle("")},children:"Save"})]}),onClose:onCancel,isOpen:isOpen,children:(0,jsx_runtime.jsx)("div",{className:"mb-4",children:(0,jsx_runtime.jsx)(src.DF,{autoFocus:!0,placeholder:"Cohort name...",value:cohortTitle,"data-attr":"cohort-name",onChange:setCohortTitle})})})}function PersonsModal_PersonsModal(_ref){let{url:_url,urlsIndex,urls,query:_query,title,onAfterClose,inline,additionalSelect,orderBy}=_ref,[selectedUrlIndex,setSelectedUrlIndex]=(0,react.useState)(urlsIndex||0),originalUrl=(urls||[])[selectedUrlIndex]?.value||_url||"",logic=(0,personsModalLogic.D)({url:originalUrl,query:_query,additionalSelect,orderBy}),{query,actors,actorsResponseLoading,actorsResponse,errorObject,validationError,insightActorsQueryOptions,searchTerm,actorLabel,isCohortModalOpen,isModalOpen,missingActorsCount,propertiesTimelineFilterFromUrl,exploreUrl,actorsQuery}=(0,index_esm.useValues)(logic),{updateActorsQuery,setSearchTerm,saveAsCohort,setIsCohortModalOpen,closeModal,loadNextActors}=(0,index_esm.useActions)(logic),{openSessionPlayer}=(0,index_esm.useActions)(sessionPlayerModalLogic.A),{currentTeam}=(0,index_esm.useValues)(teamLogic.H),{startExport}=(0,index_esm.useActions)(exportsLogic.exportsLogic),totalActorsCount=missingActorsCount+actors.length,getTitle=(0,react.useCallback)(()=>"function"==typeof title?title((0,utils.fm)(actorLabel.plural)):(0,insights_utils.sc)(title)?"Other":title,[title,actorLabel.plural]);return(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[(0,jsx_runtime.jsxs)(src.fQ,{title:null,isOpen:isModalOpen,onClose:closeModal,onAfterClose:onAfterClose,simple:!0,width:560,inline:inline,children:[(0,jsx_runtime.jsx)(src.fQ.Header,{children:(0,jsx_runtime.jsx)("h3",{children:getTitle()})}),(0,jsx_runtime.jsxs)("div",{className:"px-4 py-2",children:[actorsResponse&&!!missingActorsCount&&(0,jsx_runtime.jsx)(MissingPersonsAlert,{actorLabel:actorLabel,missingActorsCount:missingActorsCount}),(0,jsx_runtime.jsx)(src.DF,{type:"search",placeholder:"Search for persons by email, name, or ID",fullWidth:!0,value:searchTerm,onChange:setSearchTerm,className:"my-2"}),urls?(0,jsx_runtime.jsx)(src.Yv,{fullWidth:!0,className:"mb-2",value:selectedUrlIndex,onChange:v=>{null!==v&&v>=0&&setSelectedUrlIndex(v)},options:(urls||[]).map((url,index)=>({value:index,label:url.label}))}):null,query&&(0,persons_modal_utils.Nc)(insightActorsQueryOptions,query).map(_ref2=>{var _query$key;let[key,options]=_ref2;return"breakdowns"===key?options.map((_ref3,index)=>{var _query$breakdown$inde;let{values}=_ref3;return(0,jsx_runtime.jsx)("div",{children:(0,jsx_runtime.jsx)(src.Yv,{fullWidth:!0,className:"mb-2",value:null!==(_query$breakdown$inde=query?.breakdown?.[index])&&void 0!==_query$breakdown$inde?_query$breakdown$inde:null,onChange:v=>{let breakdown=Array.isArray(query.breakdown)?[...query.breakdown]:[];breakdown[index]=v,updateActorsQuery({breakdown})},options:values})},`${key}_${index}`)}):(0,jsx_runtime.jsx)("div",{children:(0,jsx_runtime.jsx)(src.Yv,{fullWidth:!0,className:"mb-2",value:null!==(_query$key=query?.[key])&&void 0!==_query$key?_query$key:null,onChange:v=>updateActorsQuery({[key]:v}),options:options})},key)}),(0,jsx_runtime.jsx)("div",{className:"flex items-center gap-2 text-muted",children:actorsResponseLoading?(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[(0,jsx_runtime.jsx)(Spinner.$,{}),(0,jsx_runtime.jsxs)("span",{children:["Loading ",actorLabel.plural,"..."]})]}):(0,jsx_runtime.jsxs)("span",{children:[actorsResponse?.next||actorsResponse?.offset?"More than ":"",(0,jsx_runtime.jsxs)("b",{children:[totalActorsCount||"No"," unique"," ",(0,utils.Zi)(totalActorsCount,actorLabel.singular,actorLabel.plural,!1)]})]})})]}),(0,jsx_runtime.jsx)("div",{className:"px-4 overflow-hidden flex flex-col",children:(0,jsx_runtime.jsxs)("div",{className:"relative min-h-20 p-2 space-y-2 rounded bg-border-light overflow-y-auto mb-2",children:[errorObject?validationError?(0,jsx_runtime.jsx)(EmptyStates._f,{query:query,detail:validationError}):(0,jsx_runtime.jsx)(EmptyStates.jC,{query:query}):actors&&actors.length>0?(0,jsx_runtime.jsx)(jsx_runtime.Fragment,{children:actors.map(actor=>(0,jsx_runtime.jsx)(ActorRow,{actor:actor,onOpenRecording:sessionRecording=>{openSessionPlayer(sessionRecording)},propertiesTimelineFilter:"person"==actor.type&¤tTeam?.person_on_events_querying_enabled?propertiesTimelineFilterFromUrl:void 0},actor.id))}):actorsResponseLoading?(0,jsx_runtime.jsxs)("div",{className:"space-y-3",children:[(0,jsx_runtime.jsx)(src.yW,{active:!1,className:"h-4 w-full"}),(0,jsx_runtime.jsx)(src.yW,{active:!1,className:"h-4 w-3/5"})]}):(0,jsx_runtime.jsxs)("div",{className:"text-center p-5",children:["We couldn't find any matching ",actorLabel.plural," for this data point."]}),(actorsResponse?.next||actorsResponse?.offset)&&(0,jsx_runtime.jsx)("div",{className:"m-4 flex justify-center",children:(0,jsx_runtime.jsxs)(src.Jp,{type:"primary",onClick:loadNextActors,loading:actorsResponseLoading,children:["Load more ",actorLabel.plural]})})]})}),(0,jsx_runtime.jsx)(src.fQ.Footer,{children:(0,jsx_runtime.jsxs)("div",{className:"flex justify-between gap-2 w-full",children:[(0,jsx_runtime.jsxs)("div",{className:"flex gap-2",children:[actors.length>0&&(0,jsx_runtime.jsx)(src.Jp,{type:"secondary",onClick:()=>{startExport({export_format:types.P5.CSV,export_context:query?{source:{...actorsQuery,select:actorsQuery.select?.filter(c=>"matched_recordings"!==c),source:{...actorsQuery.source,includeRecordings:!1}}}:{path:originalUrl}})},tooltip:`Up to ${DataTableExport.yP} persons will be exported`,"data-attr":"person-modal-download-csv",children:"Download CSV"}),actors.length>0&&!(0,utils.tK)(actors[0])&&(0,jsx_runtime.jsx)(src.Jp,{onClick:()=>setIsCohortModalOpen(!0),type:"secondary","data-attr":"person-modal-save-as-cohort",disabled:!actors.length,children:"Save as cohort"})]}),exploreUrl&&(0,jsx_runtime.jsx)(src.Jp,{type:"primary",to:exploreUrl,"data-attr":"person-modal-new-insight",onClick:()=>{closeModal()},children:"Explore"})]})})]}),(0,jsx_runtime.jsx)(SaveCohortModal,{onSave:title=>saveAsCohort(title),onCancel:()=>setIsCohortModalOpen(!1),isOpen:isCohortModalOpen})]})}function ActorRow(_ref4){let{actor,onOpenRecording,propertiesTimelineFilter}=_ref4,[expanded,setExpanded]=(0,react.useState)(!1),[tab,setTab]=(0,react.useState)("properties"),name=(0,utils.tK)(actor)?(0,GroupActorDisplay.O)(actor.group_key,actor.properties):(0,person_utils.y)(actor),matchedRecordings=actor.matched_recordings||[];return(0,jsx_runtime.jsxs)("div",{className:"relative border rounded bg-bg-light",children:[(0,jsx_runtime.jsxs)("div",{className:"flex items-center gap-2 p-2",children:[(0,jsx_runtime.jsx)(src.Jp,{noPadding:!0,active:expanded,onClick:()=>setExpanded(!expanded),icon:expanded?(0,jsx_runtime.jsx)(posthog_icons_es.IconCollapse,{}):(0,jsx_runtime.jsx)(posthog_icons_es.IconExpand,{}),title:expanded?"Show less":"Show more","data-attr":`persons-modal-expand-${actor.id}`}),(0,jsx_runtime.jsx)(ProfilePicture.Y,{name:name,size:"md"}),(0,jsx_runtime.jsx)("div",{className:"flex-1 overflow-hidden",children:(0,utils.tK)(actor)?(0,jsx_runtime.jsx)("div",{className:"font-bold",children:(0,jsx_runtime.jsx)(GroupActorDisplay.k,{actor:actor})}):(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[(0,jsx_runtime.jsx)("div",{className:"font-bold flex items-start",children:(0,jsx_runtime.jsx)(PersonDisplay.I,{person:actor,withIcon:!1})}),actor.distinct_ids?.[0]&&(0,jsx_runtime.jsx)(CopyToClipboard.D,{explicitValue:actor.distinct_ids[0],iconStyle:{color:"var(--primary)"},iconPosition:"end",className:"text-xs text-muted-alt",children:(0,utils.mq)(actor.distinct_ids[0],32)})]})}),matchedRecordings.length&&matchedRecordings.length>0?(0,jsx_runtime.jsx)("div",{className:"shrink-0",children:(0,jsx_runtime.jsx)(src.Jp,{onClick:()=>{actor.matched_recordings&&(actor.matched_recordings?.length>1?(setExpanded(!0),setTab("recordings")):actor.matched_recordings[0].session_id&&onOpenRecording({id:actor.matched_recordings[0].session_id,matching_events:actor.matched_recordings}))},sideIcon:1===matchedRecordings.length?(0,jsx_runtime.jsx)(icons.Ud,{}):null,type:"secondary",status:matchedRecordings.length>1?"alt":void 0,size:"small",children:matchedRecordings.length>1?`${matchedRecordings.length} recordings`:"View recording"})}):null]}),expanded?(0,jsx_runtime.jsx)("div",{className:"PersonsModal__tabs bg-bg-3000 border-t rounded-b",children:(0,jsx_runtime.jsx)(LemonTabs.T,{activeKey:tab,onChange:setTab,tabs:[{key:"properties",label:"Properties",content:propertiesTimelineFilter?(0,jsx_runtime.jsx)(PropertiesTimeline.v,{actor:actor,filter:propertiesTimelineFilter}):(0,jsx_runtime.jsx)(PropertiesTable.V,{type:actor.type,properties:actor.properties})},{key:"recordings",label:"Recordings",content:(0,jsx_runtime.jsxs)("div",{className:"p-2 space-y-2 font-medium mt-1",children:[(0,jsx_runtime.jsx)("div",{className:"flex justify-between items-center px-2",children:(0,jsx_runtime.jsx)("span",{children:(0,utils.Zi)(matchedRecordings.length,"matched recording")})}),(0,jsx_runtime.jsx)("ul",{className:"space-y-px",children:matchedRecordings?.length?matchedRecordings.map((recording,i)=>(0,jsx_runtime.jsxs)(react.Fragment,{children:[(0,jsx_runtime.jsx)(src.p2,{className:"my-0"}),(0,jsx_runtime.jsx)("li",{children:(0,jsx_runtime.jsx)(src.Jp,{fullWidth:!0,onClick:()=>{recording.session_id&&onOpenRecording({id:recording.session_id,matching_events:[{events:recording.events,session_id:recording.session_id}]})},children:(0,jsx_runtime.jsxs)("div",{className:"flex flex-1 justify-between gap-2 items-center",children:[(0,jsx_runtime.jsxs)("span",{children:["View recording ",i+1]}),(0,jsx_runtime.jsx)(icons.Ud,{className:"text-xl text-muted"})]})})})]},i)):null})]})}]})}):null,null!==actor.value_at_data_point&&(0,jsx_runtime.jsx)(Tooltip.u,{title:`${name}'s value for this data point.`,children:(0,jsx_runtime.jsx)(src.Mo.Number,{count:actor.value_at_data_point,maxDigits:1/0,position:"top-right",style:{pointerEvents:"auto"}})})]})}function MissingPersonsAlert(_ref5){let{actorLabel,missingActorsCount}=_ref5;return(0,jsx_runtime.jsxs)(src.Vp,{type:"info",className:"mb-2",children:[missingActorsCount," ",missingActorsCount>1?`${actorLabel.plural} are`:`${actorLabel.singular} is`," not shown because they've been merged with those listed, or\xa0deleted."," ",(0,jsx_runtime.jsx)(src.rU,{to:"https://posthog.com/docs/how-posthog-works/queries#insights-counting-unique-persons",children:"Learn more."})]})}let openPersonsModal=props=>{let div=document.createElement("div"),root=(0,client.createRoot)(div);document.body.appendChild(div),root.render((0,jsx_runtime.jsx)(PersonsModal_PersonsModal,{...props,onAfterClose:function(){root.unmount(),div.parentNode&&div.parentNode.removeChild(div)}}))}},"./frontend/src/scenes/trends/persons-modal/persons-modal-utils.tsx":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{Nc:()=>cleanedInsightActorsQueryOptions,Vx:()=>pathsTitle,un:()=>funnelTitle});var lib_components_PropertyKeyInfo__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./frontend/src/lib/components/PropertyKeyInfo.tsx"),lib_components_TaxonomicFilter_types__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./frontend/src/lib/components/TaxonomicFilter/types.ts"),lib_taxonomy__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./frontend/src/lib/taxonomy.tsx"),lib_utils__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./frontend/src/lib/utils.tsx"),_queries_utils__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__("./frontend/src/queries/utils.ts"),_types__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__("./frontend/src/types.ts"),react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__("./node_modules/.pnpm/react@18.2.0/node_modules/react/jsx-runtime.js");let funnelTitle=props=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.Fragment,{children:[props.order_type===_types__WEBPACK_IMPORTED_MODULE_5__.kO.UNORDERED?(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.Fragment,{children:props.converted?(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.Fragment,{children:["Completed ",(0,lib_utils__WEBPACK_IMPORTED_MODULE_3__.Zi)(props.step,"step","steps")," "]}):(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.Fragment,{children:["Completed ",(0,lib_utils__WEBPACK_IMPORTED_MODULE_3__.Zi)(props.step-1,"step","steps"),", did not complete"," ",(0,lib_utils__WEBPACK_IMPORTED_MODULE_3__.Zi)(props.step,"step","steps")," "]})}):(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.Fragment,{children:[props.converted?"Completed":"Dropped off at"," step ",props.step," •"," ",(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(lib_components_PropertyKeyInfo__WEBPACK_IMPORTED_MODULE_0__.T,{value:props.label||"",disablePopover:!0,type:lib_components_TaxonomicFilter_types__WEBPACK_IMPORTED_MODULE_1__.t.Events})," "]}),props?.breakdown_value?`• ${props.breakdown_value}`:""]}),pathsTitle=props=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.Fragment,{children:[{completion:"Completed",dropOff:"Dropped off after",continue:"Continued after"}[props.mode]," step"," ",(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(lib_components_PropertyKeyInfo__WEBPACK_IMPORTED_MODULE_0__.T,{value:props.label.replace(/(^[0-9]+_)/,"")||"",disablePopover:!0})]}),cleanedInsightActorsQueryOptions=(insightActorsQueryOptions,query)=>{let cleanedOptions=Object.entries(null!=insightActorsQueryOptions?insightActorsQueryOptions:{}).filter(_ref=>{let[,value]=_ref;return Array.isArray(value)&&!!value.length}),source=query?.source,seriesNames=(0,_queries_utils__WEBPACK_IMPORTED_MODULE_4__.kX)(source)?source.series.map(s=>s.custom_name):[],cleanedOptionsWithAdjustedSeriesNames=cleanedOptions.map(_ref2=>{let[key,value]=_ref2;return"series"===key?[key,value.map((v,index)=>{var _ref3,_seriesNames$index;return{...v,label:null!==(_ref3=null!==(_seriesNames$index=seriesNames[index])&&void 0!==_seriesNames$index?_seriesNames$index:lib_taxonomy__WEBPACK_IMPORTED_MODULE_2__.NV(v.label,lib_components_TaxonomicFilter_types__WEBPACK_IMPORTED_MODULE_1__.t.Events)?.label)&&void 0!==_ref3?_ref3:v.label}})]:[key,value]});return cleanedOptionsWithAdjustedSeriesNames}},"./frontend/src/scenes/trends/persons-modal/personsModalLogic.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{D:()=>personsModalLogic});var _posthog_lemon_ui__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./frontend/@posthog/lemon-ui/src/index.ts"),kea__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/.pnpm/kea@3.1.5_react@18.2.0/node_modules/kea/lib/index.esm.js"),kea_loaders__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./node_modules/.pnpm/kea-loaders@3.0.0_kea@3.1.5/node_modules/kea-loaders/lib/index.js"),kea_router__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./node_modules/.pnpm/kea-router@3.2.0_kea@3.1.5/node_modules/kea-router/lib/index.js"),lib_api__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__("./frontend/src/lib/api.ts"),lib_utils__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__("./frontend/src/lib/utils.tsx"),lib_utils_eventUsageLogic__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__("./frontend/src/lib/utils/eventUsageLogic.ts"),scenes_insights_utils_cleanFilters__WEBPACK_IMPORTED_MODULE_7__=__webpack_require__("./frontend/src/scenes/insights/utils/cleanFilters.ts"),scenes_urls__WEBPACK_IMPORTED_MODULE_8__=__webpack_require__("./frontend/src/scenes/urls.ts"),_models_cohortsModel__WEBPACK_IMPORTED_MODULE_9__=__webpack_require__("./frontend/src/models/cohortsModel.ts"),_models_groupsModel__WEBPACK_IMPORTED_MODULE_10__=__webpack_require__("./frontend/src/models/groupsModel.ts"),_queries_query__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__("./frontend/src/queries/query.ts"),_queries_schema__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__("./frontend/src/queries/schema.ts");let personsModalLogic=(0,kea__WEBPACK_IMPORTED_MODULE_1__.kea)([(0,kea__WEBPACK_IMPORTED_MODULE_1__.path)(["scenes","trends","personsModalLogic"]),(0,kea__WEBPACK_IMPORTED_MODULE_1__.props)({}),(0,kea__WEBPACK_IMPORTED_MODULE_1__.actions)({setSearchTerm:search=>({search}),saveAsCohort:cohortName=>({cohortName}),resetActors:()=>!0,closeModal:()=>!0,setIsCohortModalOpen:isOpen=>({isOpen}),loadActors:_ref=>{let{url,clear,offset}=_ref;return{url,clear,offset}},loadNextActors:!0,updateQuery:query=>({query}),updateActorsQuery:query=>({query}),loadActorsQueryOptions:query=>({query})}),(0,kea__WEBPACK_IMPORTED_MODULE_1__.connect)({values:[_models_groupsModel__WEBPACK_IMPORTED_MODULE_10__.$,["groupTypes","aggregationLabel"]],actions:[lib_utils_eventUsageLogic__WEBPACK_IMPORTED_MODULE_6__.vx,["reportPersonsModalViewed"]]}),(0,kea_loaders__WEBPACK_IMPORTED_MODULE_2__.loaders)(_ref2=>{let{values,actions,props}=_ref2;return{actorsResponse:[null,{loadActors:async(_ref3,breakpoint)=>{let{url,clear,offset}=_ref3;if(url&&(url+="&include_recordings=true",values.searchTerm&&(url+=`&search=${values.searchTerm}`)),url&&!values.actorsQuery){let res=await lib_api__WEBPACK_IMPORTED_MODULE_4__.ZP.get(url);return breakpoint(),clear&&actions.resetActors(),res}if(values.actorsQuery){let response=await (0,_queries_query__WEBPACK_IMPORTED_MODULE_11__.jr)({...values.actorsQuery,limit:offset?2*offset:100,offset});breakpoint();let assembledSelectFields=values.selectFields,additionalFieldIndices=Object.values(props.additionalSelect||{}).map(field=>assembledSelectFields.indexOf(field)),newResponse={results:[{count:response.results.length,people:response.results.map(result=>{if(void 0!==result[0].group_type_index){let group={type:"group",id:result[0].id,group_key:result[0].group_key,group_type_index:result[0].group_type_index,properties:result[0].group_properties,created_at:result[0].created_at,matched_recordings:[],value_at_data_point:null};return Object.keys(props.additionalSelect||{}).forEach((field,index)=>{group[field]=result[additionalFieldIndices[index]]}),group}let person={type:"person",id:result[0].id,uuid:result[0].id,distinct_ids:result[0].distinct_ids,is_identified:result[0].is_identified,properties:result[0].properties,created_at:result[0].created_at,matched_recordings:[],value_at_data_point:null};return Object.keys(props.additionalSelect||{}).forEach((field,index)=>{person[field]=result[additionalFieldIndices[index]]}),person})}]};return newResponse.offset=response.hasMore?response.offset+response.limit:void 0,newResponse.missing_persons=response.missing_actors_count,clear&&actions.resetActors(),newResponse}return null}}],insightActorsQueryOptions:[null,{loadActorsQueryOptions:async _ref4=>{let{query}=_ref4;if(!query)return values.insightActorsQueryOptions||null;let optionsQuery={kind:_queries_schema__WEBPACK_IMPORTED_MODULE_12__.OH.InsightActorsQueryOptions,source:query},response=await (0,_queries_query__WEBPACK_IMPORTED_MODULE_11__.jr)(optionsQuery,{async:!1});return Object.fromEntries(Object.entries(response).filter(_ref5=>{let[key,_]=_ref5;return _queries_schema__WEBPACK_IMPORTED_MODULE_12__.$V.includes(key)}))}}]}}),(0,kea__WEBPACK_IMPORTED_MODULE_1__.reducers)(_ref6=>{let{props}=_ref6;return{query:[props.query,{updateQuery:(_,_ref7)=>{let{query}=_ref7;return query}}],actors:[[],{loadActorsSuccess:(state,_ref8)=>{let{actorsResponse}=_ref8;return[...state,...actorsResponse?.results?.[0]?.people||[]]},resetActors:()=>[]}],errorObject:[null,{loadActors:()=>null,loadActorsFailure:(_,_ref9)=>{let{errorObject}=_ref9;return errorObject},loadActorsSuccess:()=>null}],missingActorsCount:[0,{loadActorsSuccess:(state,_ref10)=>{let{actorsResponse}=_ref10;return state+(actorsResponse?.missing_persons||0)},resetActors:()=>0}],searchTerm:["",{setSearchTerm:(_,_ref11)=>{let{search}=_ref11;return search}}],isModalOpen:[!0,{closeModal:()=>!1}],isCohortModalOpen:[!1,{setIsCohortModalOpen:(_,_ref12)=>{let{isOpen}=_ref12;return isOpen},closeModal:()=>!1}]}}),(0,kea__WEBPACK_IMPORTED_MODULE_1__.listeners)(_ref13=>{let{actions,values,props}=_ref13;return{setSearchTerm:async(_,breakpoint)=>{await breakpoint(500),actions.loadActors({url:props.url,clear:!0})},saveAsCohort:async _ref14=>{let{cohortName}=_ref14,cohort=await lib_api__WEBPACK_IMPORTED_MODULE_4__.ZP.create("api/cohort",{is_static:!0,name:cohortName,query:values.actorsQuery});_models_cohortsModel__WEBPACK_IMPORTED_MODULE_9__.Q.actions.cohortCreated(cohort),_posthog_lemon_ui__WEBPACK_IMPORTED_MODULE_0__.UJ.success("Cohort saved",{toastId:`cohort-saved-${cohort.id}`,button:{label:"View cohort",action:()=>kea_router__WEBPACK_IMPORTED_MODULE_3__.router.actions.push(scenes_urls__WEBPACK_IMPORTED_MODULE_8__.j.cohort(cohort.id))}}),actions.setIsCohortModalOpen(!1)},loadNextActors:()=>{values.actorsResponse?.next&&actions.loadActors({url:values.actorsResponse.next}),values.actorsResponse?.offset&&actions.loadActors({offset:values.actorsResponse.offset})},loadActors:()=>{values.query&&!values.insightActorsQueryOptions&&actions.loadActorsQueryOptions(values.query)},updateActorsQuery:_ref15=>{let{query:q}=_ref15;q&&values.query&&(actions.updateQuery({...values.query,...q}),actions.loadActors({offset:0,clear:!0}))}}}),(0,kea__WEBPACK_IMPORTED_MODULE_1__.selectors)({actorLabel:[s=>[s.actors,s.aggregationLabel],(actors,aggregationLabel)=>{let firstResult=actors[0];return firstResult?aggregationLabel((0,lib_utils__WEBPACK_IMPORTED_MODULE_5__.tK)(firstResult)?firstResult.group_type_index:void 0):{singular:"result",plural:"results"}}],validationError:[s=>[s.errorObject],errorObject=>errorObject?.status===400||errorObject?.status===512?errorObject.detail:null],propertiesTimelineFilterFromUrl:[()=>[(_,p)=>p.url],url=>{let params=new URLSearchParams(url.split("?")[1]),eventsString=params.get("events"),actionsString=params.get("actions"),propertiesString=params.get("properties"),aggregationGroupTypeIndexString=params.get("aggregation_group_type_index"),filter={date_from:params.get("date_from")||void 0,date_to:params.get("date_to")||void 0,interval:params.get("interval")||void 0,events:eventsString?JSON.parse(eventsString):void 0,actions:actionsString?JSON.parse(actionsString):void 0,properties:propertiesString?JSON.parse(propertiesString):void 0,aggregation_group_type_index:aggregationGroupTypeIndexString?parseInt(aggregationGroupTypeIndexString):void 0,display:params.get("display")||void 0,breakdown:params.get("breakdown")||void 0,breakdown_type:params.get("breakdown_type")||void 0};return(0,scenes_insights_utils_cleanFilters__WEBPACK_IMPORTED_MODULE_7__.Ow)(filter)}],selectFields:[()=>[(_,p)=>p.additionalSelect],additionalSelect=>{let extra=Object.values(additionalSelect||{});return["actor","created_at",...extra]}],actorsQuery:[s=>[(_,p)=>p.orderBy,s.query,s.searchTerm,s.selectFields],(orderBy,query,searchTerm,selectFields)=>query?{kind:_queries_schema__WEBPACK_IMPORTED_MODULE_12__.OH.ActorsQuery,source:query,select:selectFields,orderBy:orderBy||["created_at DESC"],search:searchTerm}:null],exploreUrl:[s=>[s.actorsQuery],actorsQuery=>{if(!actorsQuery)return null;let{select:_select,...source}=actorsQuery,query={kind:_queries_schema__WEBPACK_IMPORTED_MODULE_12__.OH.DataTableNode,source,full:!0};return scenes_urls__WEBPACK_IMPORTED_MODULE_8__.j.insightNew(void 0,void 0,query)}]}),(0,kea__WEBPACK_IMPORTED_MODULE_1__.afterMount)(_ref16=>{let{actions,props}=_ref16;actions.loadActors({url:props.url}),actions.reportPersonsModalViewed({url:props.url,query:props.query})}),(0,kea_router__WEBPACK_IMPORTED_MODULE_3__.urlToAction)(_ref17=>{let{cache,actions}=_ref17;return{"*":(_a,_b,_c,_ref18)=>{let{pathname}=_ref18;if(!cache.lastPathname){cache.lastPathname=pathname;return}cache.lastPathname!==pathname&&actions.closeModal()}}}),(0,kea__WEBPACK_IMPORTED_MODULE_1__.propsChanged)((_ref19,oldProps)=>{let{props,actions}=_ref19;props.url!==oldProps.url&&actions.loadActors({url:props.url,clear:!0})})])},"./frontend/src/scenes/trends/trendsDataLogic.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{i:()=>trendsDataLogic});var kea__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./node_modules/.pnpm/kea@3.1.5_react@18.2.0/node_modules/kea/lib/index.esm.js"),lib_dayjs__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./frontend/src/lib/dayjs.ts"),scenes_insights_insightVizDataLogic__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./frontend/src/scenes/insights/insightVizDataLogic.ts"),scenes_insights_sharedUtils__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./frontend/src/scenes/insights/sharedUtils.ts"),scenes_insights_utils__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__("./frontend/src/scenes/insights/utils.tsx"),_types__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__("./frontend/src/types.ts");let POSSIBLY_FRACTIONAL_MATH_TYPES=new Set([_types__WEBPACK_IMPORTED_MODULE_5__.D7.Average].concat(Object.values(_types__WEBPACK_IMPORTED_MODULE_5__.mY)).concat(Object.values(_types__WEBPACK_IMPORTED_MODULE_5__.O4))),trendsDataLogic=(0,kea__WEBPACK_IMPORTED_MODULE_0__.kea)([(0,kea__WEBPACK_IMPORTED_MODULE_0__.props)({}),(0,kea__WEBPACK_IMPORTED_MODULE_0__.key)((0,scenes_insights_sharedUtils__WEBPACK_IMPORTED_MODULE_3__.bk)("all_trends")),(0,kea__WEBPACK_IMPORTED_MODULE_0__.path)(key=>["scenes","trends","trendsDataLogic",key]),(0,kea__WEBPACK_IMPORTED_MODULE_0__.connect)(props=>({values:[(0,scenes_insights_insightVizDataLogic__WEBPACK_IMPORTED_MODULE_2__.Z)(props),["querySource","insightData","insightDataLoading","series","formula","display","compareFilter","interval","enabledIntervals","breakdownFilter","showValuesOnSeries","showLabelOnSeries","showPercentStackView","supportsPercentStackView","insightFilter","trendsFilter","lifecycleFilter","stickinessFilter","isTrends","isDataWarehouseSeries","isLifecycle","isStickiness","isNonTimeSeriesDisplay","isSingleSeries","hasLegend","showLegend","vizSpecificOptions","yAxisScaleType"]],actions:[(0,scenes_insights_insightVizDataLogic__WEBPACK_IMPORTED_MODULE_2__.Z)(props),["setInsightData","updateInsightFilter","updateBreakdownFilter","updateHiddenLegendIndexes"]]})),(0,kea__WEBPACK_IMPORTED_MODULE_0__.actions)({loadMoreBreakdownValues:!0,setBreakdownValuesLoading:loading=>({loading}),toggleHiddenLegendIndex:index=>({index})}),(0,kea__WEBPACK_IMPORTED_MODULE_0__.reducers)({breakdownValuesLoading:[!1,{setBreakdownValuesLoading:(_,_ref)=>{let{loading}=_ref;return loading}}]}),(0,kea__WEBPACK_IMPORTED_MODULE_0__.selectors)(_ref2=>{let{values}=_ref2;return{alertSeries:[s=>[s.querySource],queryNode=>null===queryNode?[]:queryNode.series],results:[s=>[s.insightData],insightData=>insightData?.result&&Array.isArray(insightData.result)?insightData.result:[]],hasBreakdownMore:[s=>[s.insightData,s.isTrends],(insightData,isTrends)=>!!isTrends&&!!insightData.hasMore],indexedResults:[s=>[s.results,s.display,s.lifecycleFilter],(results,display,lifecycleFilter)=>{let defaultLifecyclesOrder=["new","resurrecting","returning","dormant"],indexedResults=results.map((result,index)=>({...result,seriesIndex:index}));display&&(display===_types__WEBPACK_IMPORTED_MODULE_5__.Qb.ActionsBarValue||display===_types__WEBPACK_IMPORTED_MODULE_5__.Qb.ActionsPie)?indexedResults.sort((a,b)=>{let aValue=a.breakdown_value===scenes_insights_utils__WEBPACK_IMPORTED_MODULE_4__.T8?-scenes_insights_utils__WEBPACK_IMPORTED_MODULE_4__.Oq:a.breakdown_value===scenes_insights_utils__WEBPACK_IMPORTED_MODULE_4__.ZA?-scenes_insights_utils__WEBPACK_IMPORTED_MODULE_4__.Tu:a.aggregated_value,bValue=b.breakdown_value===scenes_insights_utils__WEBPACK_IMPORTED_MODULE_4__.T8?-scenes_insights_utils__WEBPACK_IMPORTED_MODULE_4__.Oq:b.breakdown_value===scenes_insights_utils__WEBPACK_IMPORTED_MODULE_4__.ZA?-scenes_insights_utils__WEBPACK_IMPORTED_MODULE_4__.Tu:b.aggregated_value;return bValue-aValue}):lifecycleFilter&&(lifecycleFilter.toggledLifecycles&&(indexedResults=indexedResults.filter(result=>lifecycleFilter.toggledLifecycles.includes(String(result.status)))),indexedResults=indexedResults.sort((a,b)=>defaultLifecyclesOrder.indexOf(String(b.status))-defaultLifecyclesOrder.indexOf(String(a.status))));let uniqSeries=Array.from(new Set(indexedResults.map(item=>`${item.label}_${item.action?.order}_${item?.breakdown_value}`)));return indexedResults.map((item,index)=>{let colorIndex=uniqSeries.findIndex(identifier=>identifier===`${item.label}_${item.action?.order}_${item?.breakdown_value}`);return{...item,colorIndex:colorIndex,id:index}})}],labelGroupType:[s=>[s.series,s.querySource,s.isLifecycle],(series,querySource,isLifecycle)=>{var _firstAggregationGrou;let firstAggregationGroupTypeIndex;if(isLifecycle)firstAggregationGroupTypeIndex=querySource?.aggregation_group_type_index;else if(firstAggregationGroupTypeIndex=series?.[0]?.math_group_type_index,!series?.every(eOrA=>eOrA?.math_group_type_index===firstAggregationGroupTypeIndex))return"none";return null!==(_firstAggregationGrou=firstAggregationGroupTypeIndex)&&void 0!==_firstAggregationGrou?_firstAggregationGrou:"people"}],incompletenessOffsetFromEnd:[s=>[s.results,s.interval],(results,interval)=>{if(results[0]?.days===void 0)return 0;let startDate=(0,lib_dayjs__WEBPACK_IMPORTED_MODULE_1__.Bv)().tz("utc",!0).startOf(null!=interval?interval:"d"),startIndex=results[0].days.findIndex(day=>(0,lib_dayjs__WEBPACK_IMPORTED_MODULE_1__.Bv)(day).tz("utc",!0)>=startDate);return void 0!==startIndex&&-1!==startIndex?startIndex-results[0].days.length:0}],pieChartVizOptions:[()=>[()=>values.vizSpecificOptions],vizSpecificOptions=>vizSpecificOptions?.[_types__WEBPACK_IMPORTED_MODULE_5__.Qb.ActionsPie]],mightContainFractionalNumbers:[s=>[s.formula,s.series],(formula,series)=>!!formula||!!series&&series.some(s=>s.math&&POSSIBLY_FRACTIONAL_MATH_TYPES.has(s.math))],hiddenLegendIndexes:[s=>[s.trendsFilter,s.stickinessFilter],(trendsFilter,stickinessFilter)=>trendsFilter?.hiddenLegendIndexes||stickinessFilter?.hiddenLegendIndexes||[]]}}),(0,kea__WEBPACK_IMPORTED_MODULE_0__.listeners)(_ref3=>{let{actions,values}=_ref3;return{toggleHiddenLegendIndex:_ref4=>{let{index}=_ref4;values.insightFilter?.hiddenLegendIndexes?.includes(index)?actions.updateHiddenLegendIndexes(values.insightFilter.hiddenLegendIndexes?.filter(idx=>idx!==index)):actions.updateHiddenLegendIndexes([...values.insightFilter?.hiddenLegendIndexes||[],index])}}})])},"./frontend/src/scenes/urls.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{j:()=>urls});var kea_router__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./node_modules/.pnpm/kea-router@3.2.0_kea@3.1.5/node_modules/kea-router/lib/index.js"),lib_utils_getAppContext__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./frontend/src/lib/utils/getAppContext.ts"),_types__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./frontend/src/types.ts");let urls={absolute:function(){let path=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return window.location.origin+path},default:()=>"/",project:function(id){let path=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return`/project/${id}`+path},currentProject:function(){let path=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return urls.project((0,lib_utils_getAppContext__WEBPACK_IMPORTED_MODULE_1__.ev)(),path)},dashboards:()=>"/dashboard",dashboard:(id,highlightInsightId)=>(0,kea_router__WEBPACK_IMPORTED_MODULE_0__.combineUrl)(`/dashboard/${id}`,highlightInsightId?{highlightInsightId}:{}).url,dashboardTextTile:(id,textTileId)=>`${urls.dashboard(id)}/text-tiles/${textTileId}`,dashboardSharing:id=>`/dashboard/${id}/sharing`,dashboardSubcriptions:id=>`/dashboard/${id}/subscriptions`,dashboardSubcription:(id,subscriptionId)=>`/dashboard/${id}/subscriptions/${subscriptionId}`,sharedDashboard:shareToken=>`/shared_dashboard/${shareToken}`,createAction:()=>"/data-management/actions/new",duplicateAction:action=>{let queryParams=action?`?copy=${encodeURIComponent(JSON.stringify(action))}`:"";return`/data-management/actions/new/${queryParams}`},action:id=>`/data-management/actions/${id}`,actions:()=>"/data-management/actions",eventDefinitions:()=>"/data-management/events",eventDefinition:id=>`/data-management/events/${id}`,eventDefinitionEdit:id=>`/data-management/events/${id}/edit`,propertyDefinitions:type=>(0,kea_router__WEBPACK_IMPORTED_MODULE_0__.combineUrl)("/data-management/properties",type?{type}:{}).url,propertyDefinition:id=>`/data-management/properties/${id}`,propertyDefinitionEdit:id=>`/data-management/properties/${id}/edit`,dataManagementHistory:()=>"/data-management/history",database:()=>"/data-management/database",activity:function(){let tab=arguments.length>0&&void 0!==arguments[0]?arguments[0]:_types__WEBPACK_IMPORTED_MODULE_2__.ZO.ExploreEvents;return`/activity/${tab}`},event:(id,timestamp)=>`/events/${encodeURIComponent(id)}/${encodeURIComponent(timestamp)}`,ingestionWarnings:()=>"/data-management/ingestion-warnings",insights:()=>"/insights",insightNew:(type,dashboardId,query)=>(0,kea_router__WEBPACK_IMPORTED_MODULE_0__.combineUrl)("/insights/new",dashboardId?{dashboard:dashboardId}:{},{...type?{insight:type}:{},...query?{q:"string"==typeof query?query:JSON.stringify(query)}:{}}).url,insightNewHogQL:(query,filters)=>(0,kea_router__WEBPACK_IMPORTED_MODULE_0__.combineUrl)("/data-warehouse",{},{q:JSON.stringify({kind:"DataTableNode",full:!0,source:{kind:"HogQLQuery",query,filters}})}).url,insightEdit:id=>`/insights/${id}/edit`,insightView:(id,dashboardId,variablesOverride)=>{let params=[{param:"dashboard",value:dashboardId},{param:"variables_override",value:variablesOverride}].filter(n=>!!n.value).map(n=>`${n.param}=${encodeURIComponent(JSON.stringify(n.value))}`).join("&");return`/insights/${id}${params.length?`?${params}`:""}`},insightSubcriptions:id=>`/insights/${id}/subscriptions`,insightSubcription:(id,subscriptionId)=>`/insights/${id}/subscriptions/${subscriptionId}`,insightSharing:id=>`/insights/${id}/sharing`,savedInsights:tab=>`/insights${tab?`?tab=${tab}`:""}`,webAnalytics:()=>"/web",replay:(tab,filters,sessionRecordingId,order)=>(0,kea_router__WEBPACK_IMPORTED_MODULE_0__.combineUrl)(tab?`/replay/${tab}`:"/replay/home",{...filters?{filters}:{},...sessionRecordingId?{sessionRecordingId}:{},...order?{order}:{}}).url,replayPlaylist:id=>`/replay/playlists/${id}`,replaySingle:id=>`/replay/${id}`,replayFilePlayback:()=>"/replay/file-playback",personByDistinctId:function(id){let encode=!(arguments.length>1)||void 0===arguments[1]||arguments[1];return encode?`/person/${encodeURIComponent(id)}`:`/person/${id}`},personByUUID:function(uuid){let encode=!(arguments.length>1)||void 0===arguments[1]||arguments[1];return encode?`/persons/${encodeURIComponent(uuid)}`:`/persons/${uuid}`},persons:()=>"/persons",pipelineNodeNew:(stage,id)=>`/pipeline/new/${stage}${id?`/${id}`:""}`,pipeline:tab=>`/pipeline/${tab||_types__WEBPACK_IMPORTED_MODULE_2__.J9.Overview}`,pipelineNode:(stage,id,nodeTab)=>`/pipeline/${stage.startsWith(":")||stage?.endsWith("s")?stage:`${stage}s`}/${id}${nodeTab?`/${nodeTab}`:""}`,messagingBroadcasts:()=>"/messaging/broadcasts",messagingBroadcast:id=>`/messaging/broadcasts/${id}`,messagingBroadcastNew:()=>"/messaging/broadcasts/new",messagingProviders:()=>"/messaging/providers",messagingProvider:id=>`/messaging/providers/${id}`,messagingProviderNew:template=>"/messaging/providers/new"+(template?`/${template}`:""),groups:groupTypeIndex=>`/groups/${groupTypeIndex}`,group:function(groupTypeIndex,groupKey){let encode=!(arguments.length>2)||void 0===arguments[2]||arguments[2],tab=arguments.length>3?arguments[3]:void 0;return`/groups/${groupTypeIndex}/${encode?encodeURIComponent(groupKey):groupKey}${tab?`/${tab}`:""}`},cohort:id=>`/cohorts/${id}`,cohorts:()=>"/cohorts",experiment:id=>`/experiments/${id}`,experiments:()=>"/experiments",featureFlags:tab=>`/feature_flags${tab?`?tab=${tab}`:""}`,featureFlag:id=>`/feature_flags/${id}`,earlyAccessFeatures:()=>"/early_access_features",earlyAccessFeature:id=>`/early_access_features/${id}`,errorTracking:()=>"/error_tracking",errorTrackingGroup:fingerprint=>`/error_tracking/${":fingerprint"===fingerprint?fingerprint:encodeURIComponent(fingerprint)}`,surveys:tab=>`/surveys${tab?`?tab=${tab}`:""}`,survey:id=>`/surveys/${id}`,surveyTemplates:()=>"/survey_templates",dataModel:()=>"/data-model",dataWarehouse:query=>(0,kea_router__WEBPACK_IMPORTED_MODULE_0__.combineUrl)("/data-warehouse",{},query?{q:"string"==typeof query?query:JSON.stringify(query)}:{}).url,dataWarehouseView:id=>(0,kea_router__WEBPACK_IMPORTED_MODULE_0__.combineUrl)(`/data-warehouse/view/${id}`).url,dataWarehouseTable:()=>"/data-warehouse/new",dataWarehouseRedirect:kind=>`/data-warehouse/${kind}/redirect`,annotations:()=>"/data-management/annotations",annotation:id=>`/data-management/annotations/${id}`,organizationCreateFirst:()=>"/create-organization",projectCreateFirst:()=>"/organization/create-project",projectHomepage:()=>"/",max:()=>"/max",settings:function(){let section=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"project",setting=arguments.length>1?arguments[1]:void 0;return(0,kea_router__WEBPACK_IMPORTED_MODULE_0__.combineUrl)(`/settings/${section}`,void 0,setting).url},organizationCreationConfirm:()=>"/organization/confirm-creation",toolbarLaunch:()=>"/toolbar",site:url=>`/site/${":url"===url?url:encodeURIComponent(url)}`,login:()=>"/login",login2FA:()=>"/login/2fa",login2FASetup:()=>"/login/2fa_setup",passwordReset:()=>"/reset",passwordResetComplete:(userUuid,token)=>`/reset/${userUuid}/${token}`,preflight:()=>"/preflight",signup:()=>"/signup",verifyEmail:function(){let userUuid=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",token=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return`/verify_email${userUuid?`/${userUuid}`:""}${token?`/${token}`:""}`},inviteSignup:id=>`/signup/${id}`,products:()=>"/products",onboarding:(productKey,stepKey,sdk)=>`/onboarding/${productKey}${stepKey?"?step="+stepKey:""}${sdk&&stepKey?"&sdk="+sdk:sdk?"?sdk="+sdk:""}`,organizationBilling:products=>`/organization/billing${products&&products.length?`?products=${products.join(",")}`:""}`,billingAuthorizationStatus:()=>"/billing/authorization_status",instanceStatus:()=>"/instance/status",instanceStaffUsers:()=>"/instance/staff_users",instanceKafkaInspector:()=>"/instance/kafka_inspector",instanceSettings:()=>"/instance/settings",instanceMetrics:()=>"/instance/metrics",asyncMigrations:()=>"/instance/async_migrations",asyncMigrationsFuture:()=>"/instance/async_migrations/future",asyncMigrationsSettings:()=>"/instance/async_migrations/settings",deadLetterQueue:()=>"/instance/dead_letter_queue",unsubscribe:()=>"/unsubscribe",integrationsRedirect:kind=>`/integrations/${kind}/callback`,shared:function(token){let exportOptions=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(0,kea_router__WEBPACK_IMPORTED_MODULE_0__.combineUrl)(`/shared/${token}`,Object.entries(exportOptions).filter(x=>x[1]).reduce((acc,_ref)=>{let[key,val]=_ref;return{...acc,[key]:!0===val?null:val}},{})).url},embedded:(token,exportOptions)=>urls.shared(token,exportOptions).replace("/shared/","/embedded/"),debugQuery:query=>(0,kea_router__WEBPACK_IMPORTED_MODULE_0__.combineUrl)("/debug",{},query?{q:"string"==typeof query?query:JSON.stringify(query)}:{}).url,feedback:()=>"/feedback",issues:()=>"/issues",notebooks:()=>"/notebooks",notebook:shortId=>`/notebooks/${shortId}`,canvas:()=>"/canvas",moveToPostHogCloud:()=>"/move-to-cloud",heatmaps:params=>`/heatmaps${params?`?${params.startsWith("?")?params.slice(1):params}`:""}`,alert:alertId=>`/insights?tab=alerts&alert_id=${alertId}`,alerts:()=>"/insights?tab=alerts",insightAlerts:insightShortId=>`/insights/${insightShortId}/alerts`,insightAlert:(insightShortId,alertId)=>`/insights/${insightShortId}/alerts?alert_id=${alertId}`,sessionAttributionExplorer:()=>"/web/session-attribution-explorer"}},"./frontend/src/scenes/userLogic.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{userLogic:()=>userLogic});var kea__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./node_modules/.pnpm/kea@3.1.5_react@18.2.0/node_modules/kea/lib/index.esm.js"),kea_forms__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/.pnpm/kea-forms@3.2.0_kea@3.1.5/node_modules/kea-forms/lib/index.js"),kea_loaders__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./node_modules/.pnpm/kea-loaders@3.0.0_kea@3.1.5/node_modules/kea-loaders/lib/index.js"),kea_router__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./node_modules/.pnpm/kea-router@3.2.0_kea@3.1.5/node_modules/kea-router/lib/index.js"),lib_api__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__("./frontend/src/lib/api.ts"),lib_lemon_ui_LemonToast_LemonToast__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__("./frontend/src/lib/lemon-ui/LemonToast/LemonToast.tsx"),lib_utils_getAppContext__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__("./frontend/src/lib/utils/getAppContext.ts"),posthog_js__WEBPACK_IMPORTED_MODULE_7__=__webpack_require__("./node_modules/.pnpm/posthog-js@1.177.0/node_modules/posthog-js/dist/module.js"),_urls__WEBPACK_IMPORTED_MODULE_8__=__webpack_require__("./frontend/src/scenes/urls.ts");let userLogic=(0,kea__WEBPACK_IMPORTED_MODULE_0__.kea)([(0,kea__WEBPACK_IMPORTED_MODULE_0__.path)(["scenes","userLogic"]),(0,kea__WEBPACK_IMPORTED_MODULE_0__.actions)(()=>({loadUser:resetOnFailure=>({resetOnFailure}),updateCurrentOrganization:(organizationId,destination)=>({organizationId,destination}),logout:!0,updateUser:(user,successCallback)=>({user,successCallback}),setUserScenePersonalisation:(scene,dashboard)=>({scene,dashboard}),updateHasSeenProductIntroFor:(productKey,value)=>({productKey,value}),switchTeam:teamId=>({teamId})})),(0,kea_forms__WEBPACK_IMPORTED_MODULE_1__.forms)(_ref=>{let{actions}=_ref;return{userDetails:{errors:_ref2=>{let{first_name,email}=_ref2;return{first_name:first_name?first_name.length>150?"This name is too long. Please keep it under 151 characters.":null:"You need to have a name.",email:email?email.length>254?"This email is too long. Please keep it under 255 characters.":null:"You need to have an email."}},submit:user=>{actions.updateUser(user)}}}}),(0,kea_loaders__WEBPACK_IMPORTED_MODULE_2__.loaders)(_ref3=>{let{values,actions}=_ref3;return{user:[null,{loadUser:async()=>{try{return await lib_api__WEBPACK_IMPORTED_MODULE_4__.ZP.get("api/users/@me/")}catch(error){console.error(error),actions.loadUserFailure(error.message)}return null},updateUser:async _ref4=>{let{user,successCallback}=_ref4;if(!values.user)throw Error("Current user has not been loaded yet, so it cannot be updated!");try{let response=await lib_api__WEBPACK_IMPORTED_MODULE_4__.ZP.update("api/users/@me/",user);return successCallback&&successCallback(),response}catch(error){console.error(error),actions.updateUserFailure(error.message)}},setUserScenePersonalisation:async _ref5=>{let{scene,dashboard}=_ref5;if(!values.user)throw Error("Current user has not been loaded yet, so it cannot be updated!");try{return await lib_api__WEBPACK_IMPORTED_MODULE_4__.ZP.create("api/users/@me/scene_personalisation",{scene,dashboard})}catch(error){console.error(error),actions.updateUserFailure(error.message)}}}]}}),(0,kea__WEBPACK_IMPORTED_MODULE_0__.reducers)({userDetails:[{},{loadUserSuccess:(_,_ref6)=>{let{user}=_ref6;return{first_name:user?.first_name||"",last_name:user?.last_name||"",email:user?.email||""}},updateUserSuccess:(_,_ref7)=>{let{user}=_ref7;return{first_name:user?.first_name||"",last_name:user?.last_name||"",email:user?.email||""}}}]}),(0,kea__WEBPACK_IMPORTED_MODULE_0__.listeners)(_ref8=>{let{actions,values}=_ref8;return{logout:()=>{posthog_js__WEBPACK_IMPORTED_MODULE_7__.ZP.reset(),window.location.href="/logout"},loadUserSuccess:_ref9=>{let{user}=_ref9;if(user&&user.uuid){let Sentry=window.Sentry;Sentry?.setUser({email:user.email,id:user.uuid}),posthog_js__WEBPACK_IMPORTED_MODULE_7__.ZP&&(posthog_js__WEBPACK_IMPORTED_MODULE_7__.ZP.identify(user.distinct_id),posthog_js__WEBPACK_IMPORTED_MODULE_7__.ZP.people.set({email:user.anonymize_data?null:user.email,realm:user.realm}),posthog_js__WEBPACK_IMPORTED_MODULE_7__.ZP.register({is_demo_project:user.team?.is_demo}),user.team&&posthog_js__WEBPACK_IMPORTED_MODULE_7__.ZP.group("project",user.team.uuid,{id:user.team.id,uuid:user.team.uuid,name:user.team.name,ingested_event:user.team.ingested_event,is_demo:user.team.is_demo,timezone:user.team.timezone,instance_tag:user.organization?.metadata?.instance_tag}),user.organization&&(posthog_js__WEBPACK_IMPORTED_MODULE_7__.ZP.group("organization",user.organization.id,{id:user.organization.id,name:user.organization.name,slug:user.organization.slug,created_at:user.organization.created_at,available_product_features:user.organization.available_product_features,...user.organization.metadata}),user.organization.customer_id&&posthog_js__WEBPACK_IMPORTED_MODULE_7__.ZP.group("customer",user.organization.customer_id)))}},updateUserSuccess:()=>{lib_lemon_ui_LemonToast_LemonToast__WEBPACK_IMPORTED_MODULE_5__.UJ.dismiss("updateUser"),lib_lemon_ui_LemonToast_LemonToast__WEBPACK_IMPORTED_MODULE_5__.UJ.success("Preferences saved",{toastId:"updateUser"})},updateUserFailure:()=>{lib_lemon_ui_LemonToast_LemonToast__WEBPACK_IMPORTED_MODULE_5__.UJ.error("Error saving preferences",{toastId:"updateUser"})},updateCurrentOrganization:async(_ref10,breakpoint)=>{let{organizationId,destination}=_ref10;values.user?.organization?.id!==organizationId&&(await breakpoint(10),await lib_api__WEBPACK_IMPORTED_MODULE_4__.ZP.update("api/users/@me/",{set_current_organization:organizationId}),window.location.href=destination||"/")},updateHasSeenProductIntroFor:async(_ref11,breakpoint)=>{let{productKey,value}=_ref11;await breakpoint(10),await lib_api__WEBPACK_IMPORTED_MODULE_4__.ZP.update("api/users/@me/",{has_seen_product_intro_for:{...values.user?.has_seen_product_intro_for,[productKey]:value}}).then(()=>{actions.loadUser()})},switchTeam:_ref12=>{let{teamId}=_ref12;window.location.href=_urls__WEBPACK_IMPORTED_MODULE_8__.j.project(teamId)}}}),(0,kea__WEBPACK_IMPORTED_MODULE_0__.selectors)({hasAvailableFeature:[s=>[s.user],user=>(feature,currentUsage)=>{let availableProductFeatures=user?.organization?.available_product_features;if(availableProductFeatures&&availableProductFeatures.length>0){let availableFeature=availableProductFeatures.find(obj=>obj.key===feature);return!!availableFeature&&(!currentUsage||!availableFeature?.limit||availableFeature?.limit>currentUsage)}return!1}],availableFeature:[s=>[s.user],user=>feature=>{let availableProductFeatures=user?.organization?.available_product_features;return availableProductFeatures&&availableProductFeatures.length>0?availableProductFeatures.find(obj=>obj.key===feature):null}],otherOrganizations:[s=>[s.user],user=>user&&user.organizations?.filter(organization=>organization.id!==user.organization?.id).sort((orgA,orgB)=>orgA.id===user?.organization?.id?-2:orgA.name.localeCompare(orgB.name))||[]],themeMode:[s=>[s.user],user=>user?.theme_mode||"light"]}),(0,kea__WEBPACK_IMPORTED_MODULE_0__.afterMount)(_ref13=>{let{actions}=_ref13,preloadedUser=lib_utils_getAppContext__WEBPACK_IMPORTED_MODULE_6__.Fj()?.current_user;preloadedUser?actions.loadUserSuccess(preloadedUser):null===preloadedUser?actions.loadUserFailure("Logged out"):actions.loadUser()}),(0,kea_router__WEBPACK_IMPORTED_MODULE_3__.urlToAction)(_ref14=>{let{values}=_ref14;return{"/year_in_posthog/2023":()=>{window.POSTHOG_APP_CONTEXT?.year_in_hog_url&&(window.location.href=`${window.location.origin}${window.POSTHOG_APP_CONTEXT.year_in_hog_url}`),values.user?.uuid&&(window.location.href=`${window.location.origin}/year_in_posthog/2023/${values.user?.uuid}`)}}})])},"./frontend/src/styles/index.tsx":(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__("./frontend/src/styles/global.scss")},"./frontend/src/toolbar/assets/Logo.tsx":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{T:()=>Logo});var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./node_modules/.pnpm/react@18.2.0/node_modules/react/jsx-runtime.js");function Logo(_ref){let{style}=_ref;return(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("svg",{style:style,fill:"none",width:"8.125em",height:"2em",viewBox:"0 0 130 32",xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("g",{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path",{d:"m12.3708 17.2868c-.2868.5737-1.1056.5737-1.3925 0l-.6861-1.3722c-.1095-.2192-.1095-.4771 0-.6963l.6861-1.3722c.2869-.5737 1.1057-.5737 1.3925 0l.6861 1.3722c.1096.2192.1096.4771 0 .6963z",fill:"var(--brand-blue)"}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path",{d:"m12.3708 25.069c-.2868.5737-1.1056.5737-1.3925 0l-.6861-1.3722c-.1095-.2191-.1095-.4771 0-.6963l.6861-1.3721c.2869-.5738 1.1057-.5738 1.3925 0l.6861 1.3721c.1096.2192.1096.4772 0 .6963z",fill:"var(--brand-blue)"}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path",{d:"m3.89258 22.1149c0-.6935.83849-1.0408 1.32888-.5504l3.56791 3.5679c.49039.4904.14308 1.3289-.55044 1.3289h-3.56791c-.42992 0-.77844-.3486-.77844-.7785zm0-3.7582c0 .2065.08201.4045.228.5505l7.32612 7.3261c.146.1459.344.228.5504.228h4.0239c.6935 0 1.0409-.8385.5505-1.3289l-11.35004-11.35c-.49039-.4904-1.32888-.1431-1.32888.5504zm0-7.7821c0 .2065.08201.4045.228.5505l15.10822 15.1082c.146.1459.344.228.5504.228h4.0239c.6935 0 1.0409-.8385.5505-1.3289l-19.13214-19.13213c-.49039-.49039-1.32888-.14307-1.32888.55044zm7.78212 0c0 .2065.082.4045.228.5505l14.0073 14.0073c.4904.4904 1.3289.143 1.3289-.5505v-4.0239c0-.2064-.082-.4044-.228-.5504l-14.0073-14.00733c-.4904-.49039-1.3289-.14307-1.3289.55044zm9.111-4.57433c-.4904-.49039-1.3289-.14307-1.3289.55044v4.02389c0 .2065.082.4045.228.5505l6.2252 6.2252c.4904.4904 1.3289.1431 1.3289-.5505v-4.0239c0-.2064-.082-.4044-.228-.5504z",fill:"var(--brand-yellow)"}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path",{d:"m36.9955 22.2104-7.3273-7.3273c-.4904-.4904-1.3288-.1431-1.3288.5504v10.2493c0 .43.3485.7785.7784.7785h11.3502c.4299 0 .7784-.3485.7784-.7785v-.9334c0-.4299-.35-.7732-.7763-.8287-1.3084-.1703-2.5321-.7679-3.4746-1.7103zm-4.9207 1.7606c-.6874 0-1.2452-.5578-1.2452-1.2451s.5578-1.2452 1.2452-1.2452c.6873 0 1.2451.5579 1.2451 1.2452s-.5578 1.2451-1.2451 1.2451z",fill:"var(--brand-key)"}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("g",{fill:"var(--brand-blue)",children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path",{d:"m3.89258 25.6831c0 .4299.34852.7784.77844.7784h3.56791c.69352 0 1.04083-.8385.55044-1.3289l-3.56791-3.5679c-.49039-.4904-1.32888-.1431-1.32888.5505z"}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path",{d:"m11.6747 12.4535-6.45324-6.45323c-.49039-.49039-1.32888-.14307-1.32888.55044v4.02389c0 .2065.08201.4045.228.5505l7.55412 7.5541z"}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path",{d:"m5.22146 13.7825c-.49039-.4904-1.32888-.1431-1.32888.5504v4.0239c0 .2065.08201.4045.228.5505l7.55412 7.5541v-6.2257z"})]}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path",{d:"m19.4569 12.7759c0-.2064-.082-.4044-.228-.5504l-6.2252-6.22523c-.4904-.49039-1.3289-.14307-1.3289.55044v4.02389c0 .2065.082.4045.228.5505l7.5541 7.5541z",fill:"var(--brand-red)"}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path",{d:"m11.6748 26.4615h4.3464c.6935 0 1.0408-.8385.5504-1.3289l-4.8968-4.8968z",fill:"var(--brand-red)"}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path",{d:"m11.6748 12.4536v5.9032c0 .2065.082.4045.228.5505l7.5541 7.5541v-5.9032c0-.2065-.082-.4045-.228-.5505z",fill:"var(--brand-red)"})]}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("g",{fill:"var(--brand-key)",children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path",{d:"m50.3259 23.3537h3.1979v-5.3028h2.6716c2.9347 0 4.817-1.7406 4.817-4.4324 0-2.6919-1.8823-4.43246-4.817-4.43246h-5.8695zm3.1979-8.0351v-3.4002h2.3478c1.2143 0 1.943.6476 1.943 1.7001 0 1.0524-.7287 1.7001-1.943 1.7001z"}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path",{d:"m66.7977 23.5156c3.1169 0 5.3837-2.2263 5.3837-5.2623 0-3.0359-2.2668-5.2622-5.3837-5.2622-3.1573 0-5.3837 2.2263-5.3837 5.2622 0 3.036 2.2264 5.2623 5.3837 5.2623zm-2.4287-5.2623c0-1.6191.9715-2.7323 2.4287-2.7323 1.437 0 2.4085 1.1132 2.4085 2.7323 0 1.6192-.9715 2.7324-2.4085 2.7324-1.4572 0-2.4287-1.1132-2.4287-2.7324z"}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path",{d:"m77.2989 23.5156c2.3882 0 4.0074-1.4977 4.0074-3.2585 0-4.1289-5.4849-2.7931-5.4849-4.4123 0-.4452.4655-.7286 1.1334-.7286.6882 0 1.518.425 1.7811 1.3561l2.3883-.9918c-.4656-1.4775-2.1859-2.4894-4.2706-2.4894-2.2466 0-3.6431 1.3358-3.6431 2.9347 0 3.8657 5.404 2.7931 5.404 4.392 0 .5667-.5263.9512-1.3156.9512-1.1334 0-1.9228-.7893-2.1656-1.7406l-2.3883.931c.5262 1.5383 2.0644 3.0562 4.5539 3.0562z"}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path",{d:"m88.9994 23.2525-.2024-2.5704c-.3441.1821-.7894.2429-1.1537.2429-.7286 0-1.2143-.5263-1.2143-1.437v-3.8658h2.4692v-2.4692h-2.4692v-2.955h-2.9752v2.955h-1.6192v2.4692h1.6192v4.2503c0 2.4692 1.6798 3.6431 3.8859 3.6431.6072 0 1.1739-.1012 1.6597-.2631z"}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path",{d:"m99.3728 9.18604v5.50516h-5.6266v-5.50516h-3.1979v14.16766h3.1979v-5.9302h5.6266v5.9302h3.2182v-14.16766z"}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path",{d:"m109.689 23.5156c3.117 0 5.384-2.2263 5.384-5.2623 0-3.0359-2.267-5.2622-5.384-5.2622-3.157 0-5.384 2.2263-5.384 5.2622 0 3.036 2.227 5.2623 5.384 5.2623zm-2.429-5.2623c0-1.6191.972-2.7323 2.429-2.7323 1.437 0 2.408 1.1132 2.408 2.7323 0 1.6192-.971 2.7324-2.408 2.7324-1.457 0-2.429-1.1132-2.429-2.7324z"}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path",{d:"m120.815 23.0299c1.113 0 2.105-.3846 2.631-1.0525v.9715c0 1.1334-.911 1.9228-2.307 1.9228-.992 0-1.862-.4858-2.004-1.3156l-2.712.425c.364 1.9228 2.328 3.2181 4.716 3.2181 3.137 0 5.222-1.8418 5.222-4.5741v-9.4721h-2.935v.8703c-.546-.6274-1.477-1.0322-2.672-1.0322-2.833 0-4.614 1.943-4.614 5.0194s1.781 5.0194 4.675 5.0194zm-1.781-5.0194c0-1.518.891-2.4895 2.267-2.4895 1.396 0 2.287.9715 2.287 2.4895 0 1.5179-.891 2.4894-2.287 2.4894-1.376 0-2.267-.9715-2.267-2.4894z"})]})]})}},"./frontend/src/toolbar/toolbarConfigLogic.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{O:()=>toolbarFetch,W:()=>toolbarConfigLogic});var kea__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./node_modules/.pnpm/kea@3.1.5_react@18.2.0/node_modules/kea/lib/index.esm.js"),kea_router__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/.pnpm/kea-router@3.2.0_kea@3.1.5/node_modules/kea-router/lib/index.js"),lib_lemon_ui_LemonToast_LemonToast__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./frontend/src/lib/lemon-ui/LemonToast/LemonToast.tsx"),_toolbar_toolbarPosthogJS__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./frontend/src/toolbar/toolbarPosthogJS.ts"),_utils__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__("./frontend/src/toolbar/utils.ts");let toolbarConfigLogic=(0,kea__WEBPACK_IMPORTED_MODULE_0__.kea)([(0,kea__WEBPACK_IMPORTED_MODULE_0__.path)(["toolbar","toolbarConfigLogic"]),(0,kea__WEBPACK_IMPORTED_MODULE_0__.props)({}),(0,kea__WEBPACK_IMPORTED_MODULE_0__.actions)({authenticate:!0,logout:!0,tokenExpired:!0,clearUserIntent:!0,showButton:!0,hideButton:!0,persistConfig:!0}),(0,kea__WEBPACK_IMPORTED_MODULE_0__.reducers)(_ref=>{let{props}=_ref;return{props:[props],temporaryToken:[props.temporaryToken||null,{logout:()=>null,tokenExpired:()=>null,authenticate:()=>null}],actionId:[props.actionId||null,{logout:()=>null,clearUserIntent:()=>null}],userIntent:[props.userIntent||null,{logout:()=>null,clearUserIntent:()=>null}],buttonVisible:[!0,{showButton:()=>!0,hideButton:()=>!1,logout:()=>!1}]}}),(0,kea__WEBPACK_IMPORTED_MODULE_0__.selectors)({posthog:[s=>[s.props],props=>{var _props$posthog;return null!==(_props$posthog=props.posthog)&&void 0!==_props$posthog?_props$posthog:null}],apiURL:[s=>[s.props],props=>`${props.apiURL?.endsWith("/")?props.apiURL.replace(/\/+$/,""):props.apiURL}`],jsURL:[s=>[s.props,s.apiURL],(props,apiUrl)=>`${props.jsURL?props.jsURL.endsWith("/")?props.jsURL.replace(/\/+$/,""):props.jsURL:apiUrl}`],dataAttributes:[s=>[s.props],props=>{var _props$dataAttributes;return null!==(_props$dataAttributes=props.dataAttributes)&&void 0!==_props$dataAttributes?_props$dataAttributes:[]}],isAuthenticated:[s=>[s.temporaryToken],temporaryToken=>!!temporaryToken]}),(0,kea__WEBPACK_IMPORTED_MODULE_0__.listeners)(_ref2=>{let{values,actions}=_ref2;return{authenticate:()=>{_toolbar_toolbarPosthogJS__WEBPACK_IMPORTED_MODULE_3__.T.capture("toolbar authenticate",{is_authenticated:values.isAuthenticated});let encodedUrl=encodeURIComponent(window.location.href);actions.persistConfig(),window.location.href=`${values.apiURL}/authorize_and_redirect/?redirect=${encodedUrl}`},logout:()=>{_toolbar_toolbarPosthogJS__WEBPACK_IMPORTED_MODULE_3__.T.capture("toolbar logout"),localStorage.removeItem(_utils__WEBPACK_IMPORTED_MODULE_4__.k2)},tokenExpired:()=>{_toolbar_toolbarPosthogJS__WEBPACK_IMPORTED_MODULE_3__.T.capture("toolbar token expired"),console.warn("PostHog Toolbar API token expired. Clearing session."),"localstorage"!==values.props.source&&lib_lemon_ui_LemonToast_LemonToast__WEBPACK_IMPORTED_MODULE_2__.UJ.error("PostHog Toolbar API token expired."),actions.persistConfig()},persistConfig:()=>{var _values$temporaryToke,_values$actionId,_values$userIntent;let toolbarParams={...values.props,temporaryToken:null!==(_values$temporaryToke=values.temporaryToken)&&void 0!==_values$temporaryToke?_values$temporaryToke:void 0,actionId:null!==(_values$actionId=values.actionId)&&void 0!==_values$actionId?_values$actionId:void 0,userIntent:null!==(_values$userIntent=values.userIntent)&&void 0!==_values$userIntent?_values$userIntent:void 0,posthog:void 0,featureFlags:void 0};localStorage.setItem(_utils__WEBPACK_IMPORTED_MODULE_4__.k2,JSON.stringify(toolbarParams))}}}),(0,kea__WEBPACK_IMPORTED_MODULE_0__.afterMount)(_ref3=>{let{props,values}=_ref3;if(props.instrument){let distinctId=props.distinctId;_toolbar_toolbarPosthogJS__WEBPACK_IMPORTED_MODULE_3__.T.optIn(),distinctId&&_toolbar_toolbarPosthogJS__WEBPACK_IMPORTED_MODULE_3__.T.identify(distinctId,props.userEmail?{email:props.userEmail}:{})}_toolbar_toolbarPosthogJS__WEBPACK_IMPORTED_MODULE_3__.T.capture("toolbar loaded",{is_authenticated:values.isAuthenticated})})]);async function toolbarFetch(url){let fullUrl,method=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"GET",payload=arguments.length>2?arguments[2]:void 0,urlConstruction=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"full",temporaryToken=toolbarConfigLogic.findMounted()?.values.temporaryToken,apiURL=toolbarConfigLogic.findMounted()?.values.apiURL;if("use-as-provided"===urlConstruction)fullUrl=url;else{let{pathname,searchParams}=(0,kea_router__WEBPACK_IMPORTED_MODULE_1__.combineUrl)(url),params={...searchParams,temporary_token:temporaryToken};fullUrl=`${apiURL}${pathname}${(0,kea_router__WEBPACK_IMPORTED_MODULE_1__.encodeParams)(params,"?")}`}let payloadData=payload?{body:JSON.stringify(payload),headers:{"Content-Type":"application/json"}}:{},response=await fetch(fullUrl,{method,...payloadData});if(403===response.status){let responseData=await response.json();"You don't have access to the project."===responseData.detail&&toolbarConfigLogic.actions.authenticate()}return 401==response.status&&toolbarConfigLogic.actions.tokenExpired(),response}},"./frontend/src/toolbar/toolbarPosthogJS.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{O:()=>useToolbarFeatureFlag,T:()=>toolbarPosthogJS});var posthog_js_lite__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./node_modules/.pnpm/posthog-js-lite@3.0.0/node_modules/posthog-js-lite/lib/index.esm.js"),react__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/.pnpm/react@18.2.0/node_modules/react/index.js");let DEFAULT_API_KEY="sTMFPsFhdP1Ssg",runningOnPosthog=!!window.POSTHOG_APP_CONTEXT,apiKey=runningOnPosthog?window.JS_POSTHOG_API_KEY:DEFAULT_API_KEY,apiHost=runningOnPosthog?window.JS_POSTHOG_HOST:"https://internal-t.posthog.com",toolbarPosthogJS=new posthog_js_lite__WEBPACK_IMPORTED_MODULE_0__.Z(apiKey||DEFAULT_API_KEY,{host:apiHost,defaultOptIn:!1,persistence:"memory",persistence_name:apiKey+"_toolbar",preloadFeatureFlags:!1});runningOnPosthog&&window.JS_POSTHOG_SELF_CAPTURE&&toolbarPosthogJS.debug();let useToolbarFeatureFlag=(flag,match)=>{let[flagValue,setFlagValue]=(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(toolbarPosthogJS.getFeatureFlag(flag));return((0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>toolbarPosthogJS.onFeatureFlag(flag,value=>setFlagValue(value)),[flag,match]),match)?flagValue===match:!!flagValue}},"./frontend/src/toolbar/utils.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{KC:()=>getHeatMapHue,Nb:()=>TOOLBAR_ID,OS:()=>trimElement,R6:()=>function getAllClickTargets(){let startNode=arguments.length>0&&void 0!==arguments[0]?arguments[0]:document,selector=arguments.length>1?arguments[1]:void 0,targetSelector=selector||lib_actionUtils__WEBPACK_IMPORTED_MODULE_0__.cR,elements=startNode.querySelectorAll(targetSelector),allElements=[...startNode.querySelectorAll("*")],pointerElements=allElements.filter(el=>{if(lib_actionUtils__WEBPACK_IMPORTED_MODULE_0__.OK.indexOf(el.tagName.toLowerCase())>=0)return!1;let compStyles=window.getComputedStyle(el);return"pointer"===compStyles.getPropertyValue("cursor")}),shadowElements=allElements.filter(el=>el.shadowRoot&&el.getAttribute("id")!==TOOLBAR_ID).map(el=>el.shadowRoot?getAllClickTargets(el.shadowRoot,targetSelector):[]).reduce((a,b)=>[...a,...b],[]),selectedElements=[...elements,...pointerElements,...shadowElements].map(e=>trimElement(e,targetSelector)).filter(e=>e),uniqueElements=Array.from(new Set(selectedElements));return uniqueElements},bE:()=>elementToActionStep,dZ:()=>elementToQuery,gj:()=>actionStepToActionStepFormItem,k2:()=>LOCALSTORAGE_KEY,lz:()=>getBoxColors,nL:()=>inBounds,o:()=>getElementForStep,sV:()=>stepToDatabaseFormat,vf:()=>getRectForElement});var _medv_finder__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./node_modules/.pnpm/@medv+finder@3.1.0/node_modules/@medv/finder/finder.js"),lib_actionUtils__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./frontend/src/lib/actionUtils.ts"),lib_utils_cssEscape__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./frontend/src/lib/utils/cssEscape.ts"),query_selector_shadow_dom__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./node_modules/.pnpm/query-selector-shadow-dom@1.0.0/node_modules/query-selector-shadow-dom/src/querySelectorDeep.js");let TOOLBAR_ID="__POSTHOG_TOOLBAR__",LOCALSTORAGE_KEY="_postHogToolbarParams";function elementToQuery(element,dataAttributes){if(element){for(let{name,value}of Array.from(element.attributes)){if(!dataAttributes.includes(name))continue;let selector=`[${(0,lib_utils_cssEscape__WEBPACK_IMPORTED_MODULE_1__.Q)(name)}="${(0,lib_utils_cssEscape__WEBPACK_IMPORTED_MODULE_1__.Q)(value)}"]`;if(1==(0,query_selector_shadow_dom__WEBPACK_IMPORTED_MODULE_2__.Jp)(selector).length)return selector}try{return(0,_medv_finder__WEBPACK_IMPORTED_MODULE_3__.w)(element,{tagName:name=>!lib_actionUtils__WEBPACK_IMPORTED_MODULE_0__.Kr.includes(name),seedMinLength:5,attr:name=>name.startsWith("data-")})}catch(error){console.warn("Error while trying to find a selector for element",element,error);return}}}function elementToActionStep(element,dataAttributes){let query=elementToQuery(element,dataAttributes);return{event:"$autocapture",href:element.getAttribute("href")||"",text:function(el){if(!el.childNodes||!el.childNodes.length)return"";let elText="";return el.childNodes.forEach(child=>{3===child.nodeType&&child.textContent&&(elText+=child.textContent.trim().replace(/[\r\n]/g," ").replace(/[ ]+/g," ").substring(0,255))}),elText}(element)||"",selector:query||"",url:window.location.protocol+"//"+window.location.host+window.location.pathname,url_matching:"exact"}}function getParent(element){let parent=element.parentNode;return parent?.nodeType===window.Node.DOCUMENT_FRAGMENT_NODE?parent.host:parent?.nodeType===window.Node.ELEMENT_NODE?parent:null}function trimElement(element,selector){let target_selector=selector||lib_actionUtils__WEBPACK_IMPORTED_MODULE_0__.cR;if(!element)return null;let rootElement=window.document.getElementById(TOOLBAR_ID)||null;if(rootElement&&isParentOf(element,rootElement))return null;let loopElement=element;for(;;)if(1===loopElement.children.length)loopElement=loopElement.children[0];else break;for(;loopElement;){let parent=getParent(loopElement);if(!parent)break;if(loopElement.matches?.(target_selector))return loopElement;let compStyles=window.getComputedStyle(loopElement);if("pointer"===compStyles.getPropertyValue("cursor")){let parentStyles=parent?window.getComputedStyle(parent):null;if(!parentStyles||"pointer"!==parentStyles.getPropertyValue("cursor"))return loopElement}loopElement=parent}return null}function inBounds(min,value,max){return Math.max(min,Math.min(max,value))}function isParentOf(element,possibleParent){let loopElement=element;for(;loopElement;){if(loopElement!==element&&loopElement===possibleParent)return!0;loopElement=getParent(loopElement)}return!1}function getElementForStep(step,allElements){if(!step)return null;let selector="";step.selector&&(step.selector_selected||void 0===step.selector_selected)&&(selector=step.selector),step.href&&(step.href_selected||void 0===step.href_selected)&&(selector+=`[href="${(0,lib_utils_cssEscape__WEBPACK_IMPORTED_MODULE_1__.Q)(step.href)}"]`);let hasText=step.text&&step.text.trim()&&(step.text_selected||void 0===step.text_selected);if(!selector&&!hasText)return null;let elements=[];try{elements=[...(0,query_selector_shadow_dom__WEBPACK_IMPORTED_MODULE_2__.Jp)(selector||"*",document,allElements)]}catch(e){return console.error("Cannot use selector:",selector,". with exception: ",e),null}if(hasText&&step?.text){let textToSearch=step.text.toString().trim();elements=(elements=elements.filter(e=>-1===lib_actionUtils__WEBPACK_IMPORTED_MODULE_0__.Kr.indexOf(e.tagName.toLowerCase())&&e.innerText?.trim()===textToSearch&&(e.matches(lib_actionUtils__WEBPACK_IMPORTED_MODULE_0__.cR)||window.getComputedStyle(e)?.getPropertyValue("cursor")==="pointer"))).filter(e=>!elements.find(e2=>isParentOf(e2,e)))}return 1===elements.length?elements[0]:null}function getBoxColors(color){let hover=arguments.length>1&&void 0!==arguments[1]&&arguments[1],opacity=arguments.length>2&&void 0!==arguments[2]?arguments[2]:.2;return"blue"===color?{backgroundBlendMode:"multiply",background:`hsla(240, 90%, 58%, ${opacity})`,boxShadow:`hsla(240, 90%, 27%, 0.2) 0px 3px 10px ${hover?4:0}px`,outline:"hsla(240, 90%, 58%, 0.5) solid 1px"}:"red"===color?{backgroundBlendMode:"multiply",background:`hsla(4, 90%, 58%, ${opacity})`,boxShadow:`hsla(4, 90%, 27%, 0.2) 0px 3px 10px ${hover?5:0}px`,outline:"hsla(4, 90%, 58%, 0.5) solid 1px"}:void 0}function actionStepToActionStepFormItem(step){let isNew=arguments.length>1&&void 0!==arguments[1]&&arguments[1],includedPropertyKeys=arguments.length>2?arguments[2]:void 0;if(!step)return{};if(void 0!==step.selector_selected)return step;if(isNew){let hasSelector=!!step.selector;return"a"===step.tag_name?{...step,href_selected:!0,selector_selected:hasSelector,text_selected:includedPropertyKeys?.includes("text")||!1,url_selected:includedPropertyKeys?.includes("url")||!1}:"button"===step.tag_name?{...step,text_selected:!0,selector_selected:hasSelector,href_selected:includedPropertyKeys?.includes("href")||!1,url_selected:includedPropertyKeys?.includes("url")||!1}:{...step,selector_selected:hasSelector,text_selected:includedPropertyKeys?.includes("text")||!1,url_selected:includedPropertyKeys?.includes("url")||!1,href_selected:includedPropertyKeys?.includes("href")||!1}}return{...step,url_matching:step.url_matching||"exact",href_selected:void 0!==step.href&&null!==step.href,text_selected:void 0!==step.text&&null!==step.text,selector_selected:void 0!==step.selector&&null!==step.selector,url_selected:void 0!==step.url&&null!==step.url}}function stepToDatabaseFormat(step){let{href_selected,text_selected,selector_selected,url_selected,...rest}=step;return{...rest,href:href_selected&&rest.href||null,text:text_selected&&rest.text||null,selector:selector_selected&&rest.selector||null,url:url_selected&&rest.url||null}}function getRectForElement(element){let elements=[elementToAreaRect(element)],loopElement=element;for(;1===loopElement.children.length;)elements.push(elementToAreaRect(loopElement=loopElement.children[0]));let maxArea=0,maxRect=elements[0].rect;for(let{rect,area}of elements)area>=maxArea&&(maxArea=area,maxRect=rect);return maxRect}let getZoomLevel=el=>{let zooms=[],getZoom=el=>{let zoom=window.getComputedStyle(el).getPropertyValue("zoom"),rzoom=zoom?parseFloat(zoom):1;1!==rzoom&&zooms.push(rzoom),el.parentElement?.parentElement&&getZoom(el.parentElement)};return getZoom(el),zooms.reverse(),zooms},getRect=el=>{if(!el)return{x:0,y:0,width:0,height:0,top:0,right:0,bottom:0,left:0};let rect=el?.getBoundingClientRect(),zooms=getZoomLevel(el),rectWithZoom={bottom:zooms.reduce((a,b)=>a*b,rect.bottom),height:zooms.reduce((a,b)=>a*b,rect.height),left:zooms.reduce((a,b)=>a*b,rect.left),right:zooms.reduce((a,b)=>a*b,rect.right),top:zooms.reduce((a,b)=>a*b,rect.top),width:zooms.reduce((a,b)=>a*b,rect.width),x:zooms.reduce((a,b)=>a*b,rect.x),y:zooms.reduce((a,b)=>a*b,rect.y)};return rectWithZoom};function elementToAreaRect(element){var _rect$width,_rect$height;let rect=getRect(element);return{element,rect,area:(null!==(_rect$width=rect.width)&&void 0!==_rect$width?_rect$width:0)*(null!==(_rect$height=rect.height)&&void 0!==_rect$height?_rect$height:0)}}function getHeatMapHue(count,maxCount){return 0===maxCount?60:60-count/maxCount*40}},"./frontend/src/types.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{B_:()=>Realm,Cz:()=>NotebookNodeType,D7:()=>CountPerActorMathType,DC:()=>EntityTypes,EF:()=>SessionRecordingSidebarStacking,F4:()=>DashboardPlacement,F7:()=>ExperimentsTabs,FB:()=>TemplateAvailabilityContext,FT:()=>PropertyFilterType,G2:()=>BehavioralEventType,H$:()=>SidePanelTab,HI:()=>SurveyUrlMatchType,Hh:()=>SingleFieldDateType,I9:()=>SurveyQuestionType,Iz:()=>ChartDisplayCategory,J2:()=>FilterLogicalOperator,J9:()=>PipelineTab,KU:()=>GraphType,LO:()=>ItemMode,MK:()=>ActorGroupType,ML:()=>EarlyAccessFeatureTabs,MN:()=>DashboardMode,Md:()=>ProductKey,NE:()=>BehavioralLifecycleType,O4:()=>PropertyMathType,OU:()=>GroupMathType,P$:()=>AvailableFeature,P5:()=>ExporterFormat,P6:()=>InsightColor,Qb:()=>ChartDisplayType,Qo:()=>SnapshotSourceType,S7:()=>FunnelMathType,SR:()=>RolloutConditionType,Sm:()=>SessionRecordingUsageType,Ts:()=>LayoutView,U6:()=>isDataWarehouseFilter,Ui:()=>FunnelVizType,VI:()=>FunnelCorrelationType,Vb:()=>BehavioralCohortType,WV:()=>PropertyOperator,We:()=>PipelineStage,XF:()=>FunnelStepReference,Xy:()=>TimeUnitType,Yy:()=>SessionPlayerState,ZO:()=>ActivityTab,_L:()=>SDKTag,_z:()=>Resource,aI:()=>FeatureFlagReleaseType,ak:()=>PluginInstallationType,bZ:()=>NotebookTarget,cB:()=>PathType,cr:()=>SessionRecordingSidebarTab,d_:()=>SurveyType,dc:()=>AnnotationScope,dw:()=>InsightType,e2:()=>BATCH_EXPORT_SERVICE_NAMES,fL:()=>ScheduledChangeOperationType,fS:()=>FunnelCorrelationResultsType,hP:()=>FunnelPathType,ih:()=>FunnelConversionWindowTimeUnit,il:()=>PipelineNodeTab,j3:()=>PersonsTabType,jc:()=>ActivityScope,kO:()=>StepOrderValue,kR:()=>DateOperatorType,kv:()=>SurveyQuestionBranchingType,l4:()=>SavedInsightsTabs,lh:()=>SDKKey,ll:()=>PropertyDefinitionType,mN:()=>ProgressStatus,mY:()=>HogQLMathType,nE:()=>EarlyAccessFeatureStage,q9:()=>BreakdownAttributionType,si:()=>HogWatcherState,u7:()=>SignificanceCode,uJ:()=>ValueOptionType,uS:()=>PropertyType,uW:()=>EventDefinitionType,uv:()=>AccessLevel,v3:()=>SessionRecordingPlayerTab,vN:()=>BaseMathType,wz:()=>PropertyDefinitionState,xW:()=>RetentionPeriod,yd:()=>ReplayTabs,yp:()=>Region,zD:()=>manualLinkSources});let AvailableFeature=function(AvailableFeature){return AvailableFeature.APPS="apps",AvailableFeature.SLACK_INTEGRATION="slack_integration",AvailableFeature.MICROSOFT_TEAMS_INTEGRATION="microsoft_teams_integration",AvailableFeature.DISCORD_INTEGRATION="discord_integration",AvailableFeature.ZAPIER="zapier",AvailableFeature.APP_METRICS="app_metrics",AvailableFeature.DATA_PIPELINES="data_pipelines",AvailableFeature.RECORDINGS_PLAYLISTS="recordings_playlists",AvailableFeature.SESSION_REPLAY_DATA_RETENTION="session_replay_data_retention",AvailableFeature.CONSOLE_LOGS="console_logs",AvailableFeature.RECORDINGS_PERFORMANCE="recordings_performance",AvailableFeature.SESSION_REPLAY_NETWORK_PAYLOADS="session_replay_network_payloads",AvailableFeature.RECORDINGS_FILE_EXPORT="recordings_file_export",AvailableFeature.SESSION_REPLAY_SAMPLING="session_replay_sampling",AvailableFeature.REPLAY_RECORDING_DURATION_MINIMUM="replay_recording_duration_minimum",AvailableFeature.REPLAY_FEATURE_FLAG_BASED_RECORDING="replay_feature_flag_based_recording",AvailableFeature.REPLAY_MASK_SENSITIVE_DATA="replay_mask_sensitive_data",AvailableFeature.REPLAY_SHARING_EMBEDDING="replay_sharing_embedding",AvailableFeature.REPLAY_PRODUCT_ANALYTICS_INTEGRATION="replay_product_analytics_integration",AvailableFeature.REPLAY_FILTER_PERSON_PROPERTIES="replay_filter_person_properties",AvailableFeature.REPLAY_FILTER_EVENTS="replay_filter_events",AvailableFeature.REPLAY_DOM_EXPLORER="replay_dom_explorer",AvailableFeature.WORKS_WITH_POSTHOG_JS="works_with_posthog_js",AvailableFeature.REPLAY_AUTOMATIC_PLAYLISTS="replay_automatic_playlists",AvailableFeature.GROUP_ANALYTICS="group_analytics",AvailableFeature.SURVEYS_UNLIMITED_SURVEYS="surveys_unlimited_surveys",AvailableFeature.SURVEYS_ALL_QUESTION_TYPES="surveys_all_question_types",AvailableFeature.SURVEYS_MULTIPLE_QUESTIONS="surveys_multiple_questions",AvailableFeature.SURVEYS_USER_TARGETING="surveys_user_targeting",AvailableFeature.SURVEYS_USER_SAMPLING="surveys_user_sampling",AvailableFeature.SURVEYS_STYLING="surveys_styling",AvailableFeature.SURVEYS_TEXT_HTML="surveys_text_html",AvailableFeature.SURVEYS_API_MODE="surveys_api_mode",AvailableFeature.SURVEYS_RESULTS_ANALYSIS="surveys_results_analysis",AvailableFeature.SURVEYS_TEMPLATES="surveys_templates",AvailableFeature.SURVEYS_DATA_RETENTION="surveys_data_retention",AvailableFeature.SURVEYS_LINK_QUESTION_TYPE="surveys_link_question_type",AvailableFeature.SURVEYS_SLACK_NOTIFICATIONS="surveys_slack_notifications",AvailableFeature.SURVEYS_WAIT_PERIODS="surveys_wait_periods",AvailableFeature.SURVEYS_RECURRING="surveys_recurring",AvailableFeature.SURVEYS_EVENTS="surveys_events",AvailableFeature.SURVEYS_ACTIONS="surveys_actions",AvailableFeature.TRACKED_USERS="tracked_users",AvailableFeature.TEAM_MEMBERS="team_members",AvailableFeature.API_ACCESS="api_access",AvailableFeature.ORGANIZATIONS_PROJECTS="organizations_projects",AvailableFeature.ROLE_BASED_ACCESS="role_based_access",AvailableFeature.SOCIAL_SSO="social_sso",AvailableFeature.PROJECT_BASED_PERMISSIONING="project_based_permissioning",AvailableFeature.SAML="saml",AvailableFeature.SSO_ENFORCEMENT="sso_enforcement",AvailableFeature.WHITE_LABELLING="white_labelling",AvailableFeature.COMMUNITY_SUPPORT="community_support",AvailableFeature.DEDICATED_SUPPORT="dedicated_support",AvailableFeature.EMAIL_SUPPORT="email_support",AvailableFeature.ACCOUNT_MANAGER="account_manager",AvailableFeature.TRAINING="training",AvailableFeature.CONFIGURATION_SUPPORT="configuration_support",AvailableFeature.TERMS_AND_CONDITIONS="terms_and_conditions",AvailableFeature.SECURITY_ASSESSMENT="security_assessment",AvailableFeature.BESPOKE_PRICING="bespoke_pricing",AvailableFeature.INVOICE_PAYMENTS="invoice_payments",AvailableFeature.BOOLEAN_FLAGS="boolean_flags",AvailableFeature.FEATURE_FLAGS_DATA_RETENTION="feature_flags_data_retention",AvailableFeature.MULTIVARIATE_FLAGS="multivariate_flags",AvailableFeature.PERSIST_FLAGS_CROSS_AUTHENTICATION="persist_flags_cross_authentication",AvailableFeature.FEATURE_FLAG_PAYLOADS="feature_flag_payloads",AvailableFeature.MULTIPLE_RELEASE_CONDITIONS="multiple_release_conditions",AvailableFeature.RELEASE_CONDITION_OVERRIDES="release_condition_overrides",AvailableFeature.TARGETING_BY_GROUP="targeting_by_group",AvailableFeature.LOCAL_EVALUATION_AND_BOOTSTRAPPING="local_evaluation_and_bootstrapping",AvailableFeature.FLAG_USAGE_STATS="flag_usage_stats",AvailableFeature.MULTIPLE_ENVIRONMENTS="multiple_environments",AvailableFeature.USER_OPT_IN="user_opt_in",AvailableFeature.INSTANT_ROLLBACKS="instant_rollbacks",AvailableFeature.EXPERIMENTATION="experimentation",AvailableFeature.GROUP_EXPERIMENTS="group_experiments",AvailableFeature.FUNNEL_EXPERIMENTS="funnel_experiments",AvailableFeature.SECONDARY_METRICS="secondary_metrics",AvailableFeature.STATISTICAL_ANALYSIS="statistical_analysis",AvailableFeature.PRODUCT_ANALYTICS_DATA_RETENTION="product_analytics_data_retention",AvailableFeature.DASHBOARDS="dashboards",AvailableFeature.FUNNELS="funnels",AvailableFeature.GRAPHS_TRENDS="graphs_trends",AvailableFeature.PATHS="paths",AvailableFeature.INSIGHTS="insights",AvailableFeature.SUBSCRIPTIONS="subscriptions",AvailableFeature.ADVANCED_PERMISSIONS="advanced_permissions",AvailableFeature.INGESTION_TAXONOMY="ingestion_taxonomy",AvailableFeature.PATHS_ADVANCED="paths_advanced",AvailableFeature.CORRELATION_ANALYSIS="correlation_analysis",AvailableFeature.TAGGING="tagging",AvailableFeature.BEHAVIORAL_COHORT_FILTERING="behavioral_cohort_filtering",AvailableFeature.PRODUCT_ANALYTICS_RETENTION="product_analytics_retention",AvailableFeature.PRODUCT_ANALYTICS_STICKINESS="product_analytics_stickiness",AvailableFeature.AUTOCAPTURE="autocapture",AvailableFeature.DATA_VISUALIZATION="data_visualization",AvailableFeature.PRODUCT_ANALYTICS_SQL_QUERIES="product_analytics_sql_queries",AvailableFeature.TWOFA_ENFORCEMENT="2fa_enforcement",AvailableFeature.AUDIT_LOGS="audit_logs",AvailableFeature.HIPAA_BAA="hipaa_baa",AvailableFeature.CUSTOM_MSA="custom_msa",AvailableFeature.TWOFA="2fa",AvailableFeature.PRIORITY_SUPPORT="priority_support",AvailableFeature.SUPPORT_RESPONSE_TIME="support_response_time",AvailableFeature.DATA_PIPELINES_TRANSFORMATIONS="data_pipelines_transformations",AvailableFeature.AUTOMATIC_PROVISIONING="automatic_provisioning",AvailableFeature.MANAGED_REVERSE_PROXY="managed_reverse_proxy",AvailableFeature}({}),ProductKey=function(ProductKey){return ProductKey.COHORTS="cohorts",ProductKey.ACTIONS="actions",ProductKey.ALERTS="alerts",ProductKey.EXPERIMENTS="experiments",ProductKey.FEATURE_FLAGS="feature_flags",ProductKey.ANNOTATIONS="annotations",ProductKey.HISTORY="history",ProductKey.HEATMAPS="heatmaps",ProductKey.INGESTION_WARNINGS="ingestion_warnings",ProductKey.PERSONS="persons",ProductKey.SURVEYS="surveys",ProductKey.SESSION_REPLAY="session_replay",ProductKey.DATA_WAREHOUSE="data_warehouse",ProductKey.DATA_WAREHOUSE_SAVED_QUERY="data_warehouse_saved_queries",ProductKey.EARLY_ACCESS_FEATURES="early_access_features",ProductKey.PRODUCT_ANALYTICS="product_analytics",ProductKey.PIPELINE_TRANSFORMATIONS="pipeline_transformations",ProductKey.PIPELINE_DESTINATIONS="pipeline_destinations",ProductKey.SITE_APPS="site_apps",ProductKey.DATA_PIPELINES="data_pipelines",ProductKey.GROUP_ANALYTICS="group_analytics",ProductKey.INTEGRATIONS="integrations",ProductKey.PLATFORM_AND_SUPPORT="platform_and_support",ProductKey.TEAMS="teams",ProductKey.WEB_ANALYTICS="web_analytics",ProductKey}({}),Realm=function(Realm){return Realm.Cloud="cloud",Realm.Demo="demo",Realm.SelfHostedPostgres="hosted",Realm.SelfHostedClickHouse="hosted-clickhouse",Realm}({}),Region=function(Region){return Region.US="US",Region.EU="EU",Region}({}),PropertyOperator=function(PropertyOperator){return PropertyOperator.Exact="exact",PropertyOperator.IsNot="is_not",PropertyOperator.IContains="icontains",PropertyOperator.NotIContains="not_icontains",PropertyOperator.Regex="regex",PropertyOperator.NotRegex="not_regex",PropertyOperator.GreaterThan="gt",PropertyOperator.GreaterThanOrEqual="gte",PropertyOperator.LessThan="lt",PropertyOperator.LessThanOrEqual="lte",PropertyOperator.IsSet="is_set",PropertyOperator.IsNotSet="is_not_set",PropertyOperator.IsDateExact="is_date_exact",PropertyOperator.IsDateBefore="is_date_before",PropertyOperator.IsDateAfter="is_date_after",PropertyOperator.Between="between",PropertyOperator.NotBetween="not_between",PropertyOperator.Minimum="min",PropertyOperator.Maximum="max",PropertyOperator.In="in",PropertyOperator.NotIn="not_in",PropertyOperator}({}),SavedInsightsTabs=function(SavedInsightsTabs){return SavedInsightsTabs.All="all",SavedInsightsTabs.Yours="yours",SavedInsightsTabs.Favorites="favorites",SavedInsightsTabs.History="history",SavedInsightsTabs.Alerts="alerts",SavedInsightsTabs}({}),ReplayTabs=function(ReplayTabs){return ReplayTabs.Templates="templates",ReplayTabs.Home="home",ReplayTabs.Playlists="playlists",ReplayTabs.Errors="errors",ReplayTabs}({}),ExperimentsTabs=function(ExperimentsTabs){return ExperimentsTabs.All="all",ExperimentsTabs.Yours="yours",ExperimentsTabs.Archived="archived",ExperimentsTabs.Holdouts="holdouts",ExperimentsTabs}({}),ActivityTab=function(ActivityTab){return ActivityTab.ExploreEvents="explore",ActivityTab.LiveEvents="live",ActivityTab}({}),PipelineTab=function(PipelineTab){return PipelineTab.Overview="overview",PipelineTab.Transformations="transformations",PipelineTab.Destinations="destinations",PipelineTab.SiteApps="site-apps",PipelineTab.Sources="sources",PipelineTab.ImportApps="legacy-sources",PipelineTab.AppsManagement="apps-management",PipelineTab.History="history",PipelineTab}({}),PipelineStage=function(PipelineStage){return PipelineStage.Transformation="transformation",PipelineStage.Destination="destination",PipelineStage.Source="source",PipelineStage.SiteApp="site-app",PipelineStage.ImportApp="legacy-source",PipelineStage}({}),PipelineNodeTab=function(PipelineNodeTab){return PipelineNodeTab.Configuration="configuration",PipelineNodeTab.Runs="runs",PipelineNodeTab.Logs="logs",PipelineNodeTab.Metrics="metrics",PipelineNodeTab.History="history",PipelineNodeTab.Schemas="schemas",PipelineNodeTab.Syncs="syncs",PipelineNodeTab.SourceConfiguration="source configuration",PipelineNodeTab}({}),ProgressStatus=function(ProgressStatus){return ProgressStatus.Draft="draft",ProgressStatus.Running="running",ProgressStatus.Complete="complete",ProgressStatus}({}),PropertyFilterType=function(PropertyFilterType){return PropertyFilterType.Meta="meta",PropertyFilterType.Event="event",PropertyFilterType.Person="person",PropertyFilterType.Element="element",PropertyFilterType.Feature="feature",PropertyFilterType.Session="session",PropertyFilterType.Cohort="cohort",PropertyFilterType.Recording="recording",PropertyFilterType.LogEntry="log_entry",PropertyFilterType.Group="group",PropertyFilterType.HogQL="hogql",PropertyFilterType.DataWarehouse="data_warehouse",PropertyFilterType.DataWarehousePersonProperty="data_warehouse_person_property",PropertyFilterType}({}),SnapshotSourceType={blob:"blob",realtime:"realtime",file:"file"},SessionRecordingUsageType=function(SessionRecordingUsageType){return SessionRecordingUsageType.VIEWED="viewed",SessionRecordingUsageType.ANALYZED="analyzed",SessionRecordingUsageType.LOADED="loaded",SessionRecordingUsageType}({}),SessionRecordingSidebarTab=function(SessionRecordingSidebarTab){return SessionRecordingSidebarTab.OVERVIEW="overview",SessionRecordingSidebarTab.INSPECTOR="inspector",SessionRecordingSidebarTab.DEBUGGER="debugger",SessionRecordingSidebarTab}({}),SessionRecordingSidebarStacking=function(SessionRecordingSidebarStacking){return SessionRecordingSidebarStacking.Vertical="vertical",SessionRecordingSidebarStacking.Horizontal="horizontal",SessionRecordingSidebarStacking}({}),SessionRecordingPlayerTab=function(SessionRecordingPlayerTab){return SessionRecordingPlayerTab.ALL="all",SessionRecordingPlayerTab.EVENTS="events",SessionRecordingPlayerTab.CONSOLE="console",SessionRecordingPlayerTab.NETWORK="network",SessionRecordingPlayerTab.DOCTOR="doctor",SessionRecordingPlayerTab}({}),SessionPlayerState=function(SessionPlayerState){return SessionPlayerState.READY="ready",SessionPlayerState.BUFFER="buffer",SessionPlayerState.PLAY="play",SessionPlayerState.PAUSE="pause",SessionPlayerState.SCRUB="scrub",SessionPlayerState.SKIP="skip",SessionPlayerState.ERROR="error",SessionPlayerState}({}),EntityTypes=function(EntityTypes){return EntityTypes.ACTIONS="actions",EntityTypes.EVENTS="events",EntityTypes.DATA_WAREHOUSE="data_warehouse",EntityTypes}({}),isDataWarehouseFilter=filter=>filter.type===EntityTypes.DATA_WAREHOUSE,StepOrderValue=function(StepOrderValue){return StepOrderValue.STRICT="strict",StepOrderValue.UNORDERED="unordered",StepOrderValue.ORDERED="ordered",StepOrderValue}({}),PersonsTabType=function(PersonsTabType){return PersonsTabType.FEED="feed",PersonsTabType.EVENTS="events",PersonsTabType.SESSION_RECORDINGS="sessionRecordings",PersonsTabType.PROPERTIES="properties",PersonsTabType.COHORTS="cohorts",PersonsTabType.RELATED="related",PersonsTabType.HISTORY="history",PersonsTabType.FEATURE_FLAGS="featureFlags",PersonsTabType.DASHBOARD="dashboard",PersonsTabType}({}),LayoutView=function(LayoutView){return LayoutView.Card="card",LayoutView.List="list",LayoutView}({}),InsightColor=function(InsightColor){return InsightColor.White="white",InsightColor.Black="black",InsightColor.Blue="blue",InsightColor.Green="green",InsightColor.Purple="purple",InsightColor}({}),TemplateAvailabilityContext=function(TemplateAvailabilityContext){return TemplateAvailabilityContext.GENERAL="general",TemplateAvailabilityContext.ONBOARDING="onboarding",TemplateAvailabilityContext}({}),PluginInstallationType=function(PluginInstallationType){return PluginInstallationType.Local="local",PluginInstallationType.Custom="custom",PluginInstallationType.Repository="repository",PluginInstallationType.Source="source",PluginInstallationType.Inline="inline",PluginInstallationType}({}),AnnotationScope=function(AnnotationScope){return AnnotationScope.Insight="dashboard_item",AnnotationScope.Dashboard="dashboard",AnnotationScope.Project="project",AnnotationScope.Organization="organization",AnnotationScope}({}),ChartDisplayType=function(ChartDisplayType){return ChartDisplayType.ActionsLineGraph="ActionsLineGraph",ChartDisplayType.ActionsBar="ActionsBar",ChartDisplayType.ActionsStackedBar="ActionsStackedBar",ChartDisplayType.ActionsAreaGraph="ActionsAreaGraph",ChartDisplayType.ActionsLineGraphCumulative="ActionsLineGraphCumulative",ChartDisplayType.BoldNumber="BoldNumber",ChartDisplayType.ActionsPie="ActionsPie",ChartDisplayType.ActionsBarValue="ActionsBarValue",ChartDisplayType.ActionsTable="ActionsTable",ChartDisplayType.WorldMap="WorldMap",ChartDisplayType}({}),ChartDisplayCategory=function(ChartDisplayCategory){return ChartDisplayCategory.TimeSeries="TimeSeries",ChartDisplayCategory.CumulativeTimeSeries="CumulativeTimeSeries",ChartDisplayCategory.TotalValue="TotalValue",ChartDisplayCategory}({}),InsightType=function(InsightType){return InsightType.TRENDS="TRENDS",InsightType.STICKINESS="STICKINESS",InsightType.LIFECYCLE="LIFECYCLE",InsightType.FUNNELS="FUNNELS",InsightType.RETENTION="RETENTION",InsightType.PATHS="PATHS",InsightType.JSON="JSON",InsightType.SQL="SQL",InsightType.HOG="HOG",InsightType}({}),PathType=function(PathType){return PathType.PageView="$pageview",PathType.Screen="$screen",PathType.CustomEvent="custom_event",PathType.HogQL="hogql",PathType}({}),FunnelPathType=function(FunnelPathType){return FunnelPathType.before="funnel_path_before_step",FunnelPathType.between="funnel_path_between_steps",FunnelPathType.after="funnel_path_after_step",FunnelPathType}({}),FunnelVizType=function(FunnelVizType){return FunnelVizType.Steps="steps",FunnelVizType.TimeToConvert="time_to_convert",FunnelVizType.Trends="trends",FunnelVizType}({}),RetentionPeriod=function(RetentionPeriod){return RetentionPeriod.Hour="Hour",RetentionPeriod.Day="Day",RetentionPeriod.Week="Week",RetentionPeriod.Month="Month",RetentionPeriod}({}),FunnelConversionWindowTimeUnit=function(FunnelConversionWindowTimeUnit){return FunnelConversionWindowTimeUnit.Second="second",FunnelConversionWindowTimeUnit.Minute="minute",FunnelConversionWindowTimeUnit.Hour="hour",FunnelConversionWindowTimeUnit.Day="day",FunnelConversionWindowTimeUnit.Week="week",FunnelConversionWindowTimeUnit.Month="month",FunnelConversionWindowTimeUnit}({}),FunnelStepReference=function(FunnelStepReference){return FunnelStepReference.total="total",FunnelStepReference.previous="previous",FunnelStepReference}({}),FunnelCorrelationType=function(FunnelCorrelationType){return FunnelCorrelationType.Success="success",FunnelCorrelationType.Failure="failure",FunnelCorrelationType}({}),FunnelCorrelationResultsType=function(FunnelCorrelationResultsType){return FunnelCorrelationResultsType.Events="events",FunnelCorrelationResultsType.Properties="properties",FunnelCorrelationResultsType.EventWithProperties="event_with_properties",FunnelCorrelationResultsType}({}),BreakdownAttributionType=function(BreakdownAttributionType){return BreakdownAttributionType.FirstTouch="first_touch",BreakdownAttributionType.LastTouch="last_touch",BreakdownAttributionType.AllSteps="all_events",BreakdownAttributionType.Step="step",BreakdownAttributionType}({}),SurveyUrlMatchType=function(SurveyUrlMatchType){return SurveyUrlMatchType.Exact="exact",SurveyUrlMatchType.IsNot="is_not",SurveyUrlMatchType.Contains="icontains",SurveyUrlMatchType.NotIContains="not_icontains",SurveyUrlMatchType.Regex="regex",SurveyUrlMatchType.NotRegex="not_regex",SurveyUrlMatchType}({}),SurveyType=function(SurveyType){return SurveyType.Popover="popover",SurveyType.Widget="widget",SurveyType.FullScreen="full_screen",SurveyType.Email="email",SurveyType.API="api",SurveyType}({}),SurveyQuestionType=function(SurveyQuestionType){return SurveyQuestionType.Open="open",SurveyQuestionType.MultipleChoice="multiple_choice",SurveyQuestionType.SingleChoice="single_choice",SurveyQuestionType.Rating="rating",SurveyQuestionType.Link="link",SurveyQuestionType}({}),SurveyQuestionBranchingType=function(SurveyQuestionBranchingType){return SurveyQuestionBranchingType.NextQuestion="next_question",SurveyQuestionBranchingType.End="end",SurveyQuestionBranchingType.ResponseBased="response_based",SurveyQuestionBranchingType.SpecificQuestion="specific_question",SurveyQuestionBranchingType}({}),EarlyAccessFeatureStage=function(EarlyAccessFeatureStage){return EarlyAccessFeatureStage.Draft="draft",EarlyAccessFeatureStage.Concept="concept",EarlyAccessFeatureStage.Alpha="alpha",EarlyAccessFeatureStage.Beta="beta",EarlyAccessFeatureStage.GeneralAvailability="general-availability",EarlyAccessFeatureStage.Archived="archived",EarlyAccessFeatureStage}({}),EarlyAccessFeatureTabs=function(EarlyAccessFeatureTabs){return EarlyAccessFeatureTabs.OptedIn="opted-in",EarlyAccessFeatureTabs.OptedOut="opted-out",EarlyAccessFeatureTabs}({}),ScheduledChangeOperationType=function(ScheduledChangeOperationType){return ScheduledChangeOperationType.UpdateStatus="update_status",ScheduledChangeOperationType.AddReleaseCondition="add_release_condition",ScheduledChangeOperationType}({}),ItemMode=function(ItemMode){return ItemMode.Edit="edit",ItemMode.View="view",ItemMode.Subscriptions="subscriptions",ItemMode.Sharing="sharing",ItemMode.Alerts="alerts",ItemMode}({}),DashboardPlacement=function(DashboardPlacement){return DashboardPlacement.Dashboard="dashboard",DashboardPlacement.ProjectHomepage="project-homepage",DashboardPlacement.FeatureFlag="feature-flag",DashboardPlacement.Public="public",DashboardPlacement.Export="export",DashboardPlacement.Person="person",DashboardPlacement.Group="group",DashboardPlacement}({}),DashboardMode=function(DashboardMode){return DashboardMode.Edit="edit",DashboardMode.Fullscreen="fullscreen",DashboardMode.Sharing="sharing",DashboardMode}({}),PropertyType=function(PropertyType){return PropertyType.DateTime="DateTime",PropertyType.String="String",PropertyType.Numeric="Numeric",PropertyType.Boolean="Boolean",PropertyType.Duration="Duration",PropertyType.Selector="Selector",PropertyType.Cohort="Cohort",PropertyType}({}),PropertyDefinitionType=function(PropertyDefinitionType){return PropertyDefinitionType.Event="event",PropertyDefinitionType.Person="person",PropertyDefinitionType.Group="group",PropertyDefinitionType.Session="session",PropertyDefinitionType.LogEntry="log_entry",PropertyDefinitionType}({}),PropertyDefinitionState=function(PropertyDefinitionState){return PropertyDefinitionState.Pending="pending",PropertyDefinitionState.Loading="loading",PropertyDefinitionState.Missing="missing",PropertyDefinitionState.Error="error",PropertyDefinitionState}({}),FilterLogicalOperator=function(FilterLogicalOperator){return FilterLogicalOperator.And="AND",FilterLogicalOperator.Or="OR",FilterLogicalOperator}({}),SignificanceCode=function(SignificanceCode){return SignificanceCode.Significant="significant",SignificanceCode.NotEnoughExposure="not_enough_exposure",SignificanceCode.LowWinProbability="low_win_probability",SignificanceCode.HighLoss="high_loss",SignificanceCode.HighPValue="high_p_value",SignificanceCode}({}),GraphType=function(GraphType){return GraphType.Bar="bar",GraphType.HorizontalBar="horizontalBar",GraphType.Line="line",GraphType.Histogram="histogram",GraphType.Pie="doughnut",GraphType}({}),FunnelMathType=function(FunnelMathType){return FunnelMathType.AnyMatch="total",FunnelMathType.FirstTimeForUser="first_time_for_user",FunnelMathType.FirstTimeForUserWithFilters="first_time_for_user_with_filters",FunnelMathType}({}),BaseMathType=function(BaseMathType){return BaseMathType.TotalCount="total",BaseMathType.UniqueUsers="dau",BaseMathType.WeeklyActiveUsers="weekly_active",BaseMathType.MonthlyActiveUsers="monthly_active",BaseMathType.UniqueSessions="unique_session",BaseMathType.FirstTimeForUser="first_time_for_user",BaseMathType}({}),PropertyMathType=function(PropertyMathType){return PropertyMathType.Average="avg",PropertyMathType.Sum="sum",PropertyMathType.Minimum="min",PropertyMathType.Maximum="max",PropertyMathType.Median="median",PropertyMathType.P90="p90",PropertyMathType.P95="p95",PropertyMathType.P99="p99",PropertyMathType}({}),CountPerActorMathType=function(CountPerActorMathType){return CountPerActorMathType.Average="avg_count_per_actor",CountPerActorMathType.Minimum="min_count_per_actor",CountPerActorMathType.Maximum="max_count_per_actor",CountPerActorMathType.Median="median_count_per_actor",CountPerActorMathType.P90="p90_count_per_actor",CountPerActorMathType.P95="p95_count_per_actor",CountPerActorMathType.P99="p99_count_per_actor",CountPerActorMathType}({}),HogQLMathType=function(HogQLMathType){return HogQLMathType.HogQL="hogql",HogQLMathType}({}),GroupMathType=function(GroupMathType){return GroupMathType.UniqueGroup="unique_group",GroupMathType}({}),ActorGroupType=function(ActorGroupType){return ActorGroupType.Person="person",ActorGroupType.GroupPrefix="group",ActorGroupType}({}),BehavioralEventType=function(BehavioralEventType){return BehavioralEventType.PerformEvent="performed_event",BehavioralEventType.PerformMultipleEvents="performed_event_multiple",BehavioralEventType.PerformSequenceEvents="performed_event_sequence",BehavioralEventType.NotPerformedEvent="not_performed_event",BehavioralEventType.NotPerformSequenceEvents="not_performed_event_sequence",BehavioralEventType.HaveProperty="have_property",BehavioralEventType.NotHaveProperty="not_have_property",BehavioralEventType}({}),BehavioralCohortType=function(BehavioralCohortType){return BehavioralCohortType.InCohort="in_cohort",BehavioralCohortType.NotInCohort="not_in_cohort",BehavioralCohortType}({}),BehavioralLifecycleType=function(BehavioralLifecycleType){return BehavioralLifecycleType.PerformEventFirstTime="performed_event_first_time",BehavioralLifecycleType.PerformEventRegularly="performed_event_regularly",BehavioralLifecycleType.StopPerformEvent="stopped_performing_event",BehavioralLifecycleType.StartPerformEventAgain="restarted_performing_event",BehavioralLifecycleType}({}),TimeUnitType=function(TimeUnitType){return TimeUnitType.Day="day",TimeUnitType.Week="week",TimeUnitType.Month="month",TimeUnitType.Year="year",TimeUnitType}({}),DateOperatorType=function(DateOperatorType){return DateOperatorType.BeforeTheLast="before_the_last",DateOperatorType.Between="between",DateOperatorType.NotBetween="not_between",DateOperatorType.OnTheDate="on_the_date",DateOperatorType.NotOnTheDate="not_on_the_date",DateOperatorType.Since="since",DateOperatorType.Before="before",DateOperatorType.IsSet="is_set",DateOperatorType.IsNotSet="is_not_set",DateOperatorType}({}),SingleFieldDateType=function(SingleFieldDateType){return SingleFieldDateType.IsDateExact="is_date_exact",SingleFieldDateType.IsDateBefore="is_date_before",SingleFieldDateType.IsDateAfter="is_date_after",SingleFieldDateType}({}),ValueOptionType=function(ValueOptionType){return ValueOptionType.MostRecent="most_recent",ValueOptionType.Previous="previous",ValueOptionType.OnDate="on_date",ValueOptionType}({}),EventDefinitionType=function(EventDefinitionType){return EventDefinitionType.Event="event",EventDefinitionType.EventCustom="event_custom",EventDefinitionType.EventPostHog="event_posthog",EventDefinitionType}({}),ExporterFormat=function(ExporterFormat){return ExporterFormat.PNG="image/png",ExporterFormat.CSV="text/csv",ExporterFormat.PDF="application/pdf",ExporterFormat.JSON="application/json",ExporterFormat.XLSX="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",ExporterFormat}({}),FeatureFlagReleaseType=function(FeatureFlagReleaseType){return FeatureFlagReleaseType.ReleaseToggle="Release toggle",FeatureFlagReleaseType.Variants="Multiple variants",FeatureFlagReleaseType}({}),RolloutConditionType=function(RolloutConditionType){return RolloutConditionType.Insight="insight",RolloutConditionType.Sentry="sentry",RolloutConditionType}({}),Resource=function(Resource){return Resource.FEATURE_FLAGS="feature flags",Resource}({}),AccessLevel=function(AccessLevel){return AccessLevel[AccessLevel.READ=21]="READ",AccessLevel[AccessLevel.WRITE=37]="WRITE",AccessLevel}({}),ActivityScope=function(ActivityScope){return ActivityScope.FEATURE_FLAG="FeatureFlag",ActivityScope.PERSON="Person",ActivityScope.INSIGHT="Insight",ActivityScope.PLUGIN="Plugin",ActivityScope.PLUGIN_CONFIG="PluginConfig",ActivityScope.HOG_FUNCTION="HogFunction",ActivityScope.DATA_MANAGEMENT="DataManagement",ActivityScope.EVENT_DEFINITION="EventDefinition",ActivityScope.PROPERTY_DEFINITION="PropertyDefinition",ActivityScope.NOTEBOOK="Notebook",ActivityScope.DASHBOARD="Dashboard",ActivityScope.REPLAY="Replay",ActivityScope.EXPERIMENT="Experiment",ActivityScope.SURVEY="Survey",ActivityScope.EARLY_ACCESS_FEATURE="EarlyAccessFeature",ActivityScope.COMMENT="Comment",ActivityScope.COHORT="Cohort",ActivityScope.TEAM="Team",ActivityScope}({}),NotebookNodeType=function(NotebookNodeType){return NotebookNodeType.Mention="ph-mention",NotebookNodeType.Query="ph-query",NotebookNodeType.Recording="ph-recording",NotebookNodeType.RecordingPlaylist="ph-recording-playlist",NotebookNodeType.FeatureFlag="ph-feature-flag",NotebookNodeType.FeatureFlagCodeExample="ph-feature-flag-code-example",NotebookNodeType.Experiment="ph-experiment",NotebookNodeType.EarlyAccessFeature="ph-early-access-feature",NotebookNodeType.Survey="ph-survey",NotebookNodeType.Person="ph-person",NotebookNodeType.Group="ph-group",NotebookNodeType.Cohort="ph-cohort",NotebookNodeType.Backlink="ph-backlink",NotebookNodeType.ReplayTimestamp="ph-replay-timestamp",NotebookNodeType.Image="ph-image",NotebookNodeType.PersonFeed="ph-person-feed",NotebookNodeType.Properties="ph-properties",NotebookNodeType.Map="ph-map",NotebookNodeType.Embed="ph-embed",NotebookNodeType}({}),NotebookTarget=function(NotebookTarget){return NotebookTarget.Popover="popover",NotebookTarget.Scene="scene",NotebookTarget}({}),manualLinkSources=["aws","google-cloud","cloudflare-r2","azure"],BATCH_EXPORT_SERVICE_NAMES=["S3","Snowflake","Postgres","BigQuery","Redshift","HTTP"],SDKKey=function(SDKKey){return SDKKey.ANDROID="android",SDKKey.ANGULAR="angular",SDKKey.ASTRO="astro",SDKKey.API="api",SDKKey.BUBBLE="bubble",SDKKey.DJANGO="django",SDKKey.DOCUSAURUS="docusaurus",SDKKey.ELIXIR="elixir",SDKKey.FRAMER="framer",SDKKey.FLUTTER="flutter",SDKKey.GATSBY="gatsby",SDKKey.GO="go",SDKKey.GOOGLE_TAG_MANAGER="google_tag_manager",SDKKey.HELICONE="helicone",SDKKey.HTML_SNIPPET="html",SDKKey.IOS="ios",SDKKey.JAVA="java",SDKKey.JS_WEB="javascript_web",SDKKey.LARAVEL="laravel",SDKKey.LANGFUSE="langfuse",SDKKey.NEXT_JS="nextjs",SDKKey.NODE_JS="nodejs",SDKKey.NUXT_JS="nuxtjs",SDKKey.PHP="php",SDKKey.PYTHON="python",SDKKey.REACT="react",SDKKey.REACT_NATIVE="react_native",SDKKey.REMIX="remix",SDKKey.RETOOL="retool",SDKKey.RUBY="ruby",SDKKey.RUDDERSTACK="rudderstack",SDKKey.RUST="rust",SDKKey.SEGMENT="segment",SDKKey.SENTRY="sentry",SDKKey.SHOPIFY="shopify",SDKKey.SVELTE="svelte",SDKKey.TRACELOOP="traceloop",SDKKey.VUE_JS="vuejs",SDKKey.WEBFLOW="webflow",SDKKey.WORDPRESS="wordpress",SDKKey}({}),SDKTag=function(SDKTag){return SDKTag.WEB="Web",SDKTag.MOBILE="Mobile",SDKTag.SERVER="Server",SDKTag.INTEGRATION="Integration",SDKTag.RECOMMENDED="Recommended",SDKTag.LLM="LLM",SDKTag.OTHER="Other",SDKTag}({}),SidePanelTab=function(SidePanelTab){return SidePanelTab.Notebooks="notebook",SidePanelTab.Support="support",SidePanelTab.Docs="docs",SidePanelTab.Activation="activation",SidePanelTab.Settings="settings",SidePanelTab.FeaturePreviews="feature-previews",SidePanelTab.Activity="activity",SidePanelTab.Discussion="discussion",SidePanelTab.Status="status",SidePanelTab.Exports="exports",SidePanelTab.ExperimentFeatureFlag="experiment-feature-flag",SidePanelTab}({}),HogWatcherState=function(HogWatcherState){return HogWatcherState[HogWatcherState.healthy=1]="healthy",HogWatcherState[HogWatcherState.overflowed=2]="overflowed",HogWatcherState[HogWatcherState.disabledForPeriod=3]="disabledForPeriod",HogWatcherState[HogWatcherState.disabledIndefinitely=4]="disabledIndefinitely",HogWatcherState}({})},"./storybook-config-entry.js":(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__)=>{"use strict";var external_STORYBOOK_MODULE_GLOBAL_=__webpack_require__("@storybook/global"),external_STORYBOOK_MODULE_PREVIEW_API_=__webpack_require__("@storybook/preview-api"),external_STORYBOOK_MODULE_CHANNELS_=__webpack_require__("@storybook/channels");let pipeline=x=>x(),importers=[async path=>{if(!/^\.[\\/](?:frontend\/src(?:\/(?!\.)(?:(?:(?!(?:^|\/)\.).)*?)\/|\/|$)(?!\.)(?=.)[^/]*?\.stories\.(js|jsx|ts|tsx|mdx))$/.exec(path))return;let pathRemainder=path.substring(15);return __webpack_require__("./frontend/src lazy recursive ^\\.\\/.*$ include: (?:\\/frontend\\/src(?:\\/(?%21\\.)(?:(?:(?%21(?:^%7C\\/)\\.).)*?)\\/%7C\\/%7C$)(?%21\\.)(?=.)[^/]*?\\.stories\\.(js%7Cjsx%7Cts%7Ctsx%7Cmdx))$")("./"+pathRemainder)}];async function importFn(path){for(let i=0;iimporters[i](path));if(moduleExports)return moduleExports}}let channel=(0,external_STORYBOOK_MODULE_CHANNELS_.createBrowserChannel)({page:"preview"});external_STORYBOOK_MODULE_PREVIEW_API_.addons.setChannel(channel),"DEVELOPMENT"===external_STORYBOOK_MODULE_GLOBAL_.global.CONFIG_TYPE&&(window.__STORYBOOK_SERVER_CHANNEL__=channel);let preview=new external_STORYBOOK_MODULE_PREVIEW_API_.PreviewWeb;window.__STORYBOOK_PREVIEW__=preview,window.__STORYBOOK_STORY_STORE__=preview.storyStore,window.__STORYBOOK_ADDONS_CHANNEL__=channel,window.__STORYBOOK_CLIENT_API__=new external_STORYBOOK_MODULE_PREVIEW_API_.ClientApi({storyStore:preview.storyStore}),preview.initialize({importFn:importFn,getProjectAnnotations:()=>(0,external_STORYBOOK_MODULE_PREVIEW_API_.composeConfigs)([__webpack_require__("./node_modules/.pnpm/@storybook+react@7.6.4_react-dom@18.2.0_react@18.2.0_typescript@4.9.5/node_modules/@storybook/react/dist/entry-preview.mjs"),__webpack_require__("./node_modules/.pnpm/@storybook+react@7.6.4_react-dom@18.2.0_react@18.2.0_typescript@4.9.5/node_modules/@storybook/react/dist/entry-preview-docs.mjs"),__webpack_require__("./node_modules/.pnpm/@storybook+addon-docs@7.6.4_@types+react-dom@18.2.14_@types+react@17.0.52_react-dom@18.2.0_react@18.2.0/node_modules/@storybook/addon-docs/dist/preview.mjs"),__webpack_require__("./node_modules/.pnpm/@storybook+addon-links@7.6.4_react@18.2.0/node_modules/@storybook/addon-links/dist/preview.js"),__webpack_require__("./node_modules/.pnpm/@storybook+addon-essentials@7.6.4_@types+react-dom@18.2.14_@types+react@17.0.52_react-dom@18.2.0_react@18.2.0/node_modules/@storybook/addon-essentials/dist/actions/preview.js"),__webpack_require__("./node_modules/.pnpm/@storybook+addon-essentials@7.6.4_@types+react-dom@18.2.14_@types+react@17.0.52_react-dom@18.2.0_react@18.2.0/node_modules/@storybook/addon-essentials/dist/backgrounds/preview.js"),__webpack_require__("./node_modules/.pnpm/@storybook+addon-essentials@7.6.4_@types+react-dom@18.2.14_@types+react@17.0.52_react-dom@18.2.0_react@18.2.0/node_modules/@storybook/addon-essentials/dist/measure/preview.js"),__webpack_require__("./node_modules/.pnpm/@storybook+addon-essentials@7.6.4_@types+react-dom@18.2.14_@types+react@17.0.52_react-dom@18.2.0_react@18.2.0/node_modules/@storybook/addon-essentials/dist/outline/preview.js"),__webpack_require__("./node_modules/.pnpm/@storybook+addon-essentials@7.6.4_@types+react-dom@18.2.14_@types+react@17.0.52_react-dom@18.2.0_react@18.2.0/node_modules/@storybook/addon-essentials/dist/highlight/preview.js"),__webpack_require__("./node_modules/.pnpm/@storybook+addon-a11y@7.6.4/node_modules/@storybook/addon-a11y/dist/preview.js"),__webpack_require__("./node_modules/.pnpm/storybook-addon-pseudo-states@2.1.2_@storybook+components@7.6.4_@storybook+core-events@7.6.4__ryvooa6ckff6nihvuhqddxt4ke/node_modules/storybook-addon-pseudo-states/dist/preview.mjs"),__webpack_require__("./.storybook/preview.tsx")])})},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/layout/ErrorBoundary/ErrorBoundary.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".ErrorBoundary{background:var(--danger-highlight);border-radius:var(--radius);height:-moz-fit-content;height:fit-content;margin:1.5rem;min-width:0;padding:.75rem 1rem 1rem}.ErrorBoundary h2{color:var(--danger);font-weight:600;margin-bottom:.75rem}.ErrorBoundary pre{background:var(--border-light);border-radius:var(--radius);margin-bottom:.75rem;padding:.75rem 1rem}.ErrorBoundary .help-button{margin-top:.75rem}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/layout/navigation-3000/Navigation.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,'.Navigation3000{--breadcrumbs-height-full:3.75rem;--breadcrumbs-height-compact:2.75rem;--scene-padding:1rem;--scene-padding-bottom:var(--scene-padding);background:var(--bg-3000);display:flex;height:100vh;overflow:hidden;width:100%}.storybook-test-runner .Navigation3000{height:auto}.Navigation3000>main{flex:1;min-width:0;overflow:auto}.Navigation3000 .BridgePage{background:none;height:100%;overflow:visible}@media screen and (max-width:576px){.Navigation3000{--scene-padding-bottom:calc(var(--scene-padding) + max(env(safe-area-inset-bottom), 80px))}}@media screen and (max-width:992px){.Navigation3000{--scene-padding:0.5rem}}.Navigation3000__scene{margin:var(--scene-padding);margin-bottom:var(--scene-padding-bottom);min-height:calc(100vh - var(--breadcrumbs-height-full) - var(--scene-padding) - var(--scene-padding-bottom));position:relative}.Navigation3000__scene.Navigation3000__scene--raw{--scene-padding:0px;--scene-padding-bottom:0px;display:flex;flex-direction:column}.Navigation3000__scene.Navigation3000__scene--canvas{--scene-padding:0px;display:flex;flex-direction:column;overflow:hidden}.Navbar3000{border-right-width:1px;display:flex;flex-direction:column;max-height:100vh;opacity:.99999;position:relative;transition:transform .1s ease-out}.Navigation3000--mobile .Navbar3000{bottom:0;left:0;position:fixed;top:0;z-index:var(--z-lemon-sidebar)}.Navbar3000.Navbar3000--hidden{transform:translateX(-100%)}.Navbar3000 .Navbar3000__content{background:var(--accent-3000);display:flex;flex:1;flex-direction:column;justify-content:space-between;overflow-y:auto;z-index:var(--z-main-nav)}.Navbar3000 .Navbar3000__content .LemonButton__chrome{--lemon-button-padding-horizontal:0.25rem!important}.Navbar3000 .Navbar3000__content .Navbar3000__bottom,.Navbar3000 .Navbar3000__content .Navbar3000__top{padding:0 .375rem}.Navbar3000 .Navbar3000__content ul{padding:.5rem 0}.Navbar3000 .Navbar3000__content ul+ul{border-top-width:1px}.Navbar3000__top{overflow:auto}.Navbar3000__overlay{-webkit-backdrop-filter:blur(var(--modal-backdrop-blur));backdrop-filter:blur(var(--modal-backdrop-blur));background-color:var(--modal-backdrop-color);height:100%;opacity:1;position:fixed;transition:opacity .1s ease-out,-webkit-backdrop-filter .1s ease-out;transition:opacity .1s ease-out,backdrop-filter .1s ease-out;transition:opacity .1s ease-out,backdrop-filter .1s ease-out,-webkit-backdrop-filter .1s ease-out;width:100%;z-index:var(--z-mobile-nav-overlay)}.Navbar3000__overlay.Navbar3000--hidden{-webkit-backdrop-filter:blur(0);backdrop-filter:blur(0);opacity:0;pointer-events:none}.NavbarButton{position:relative}.NavbarButton.NavbarButton--here:after{bottom:.25rem;color:var(--text-3000);content:"•";font-size:1.25rem;left:0;line-height:.5625rem;position:absolute;right:0;text-align:center}.NavbarButton.NavbarButton--here .LemonButton__icon{color:var(--text-3000);transform:translateY(-.25rem)}.Sidebar3000{--sidebar-slider-padding:0.125rem;--sidebar-horizontal-padding:0.5rem;--sidebar-row-height:2rem;--sidebar-background:var(--bg-3000);border-right:min(1px,var(--sidebar-width)) solid transparent;box-sizing:initial;flex:0 0 var(--sidebar-width);height:100vh;position:relative}[theme=dark] .Sidebar3000{--sidebar-background:var(--accent-3000)}.Sidebar3000.Sidebar3000--resizing{will-change:flex-basis}.Sidebar3000 h3,.Sidebar3000 h4,.Sidebar3000 h5{color:var(--text-3000);line-height:inherit;margin:0;overflow:hidden;text-overflow:ellipsis}.Sidebar3000 h3{font-size:.75rem;font-weight:600;line-height:2rem}.Sidebar3000 h4{flex-grow:1;font-size:.6875rem;font-weight:600;line-height:1.75rem}.Sidebar3000 h5{font-size:.75rem;font-weight:400;letter-spacing:normal;text-transform:none}.Sidebar3000 b{font-weight:700}.Sidebar3000 .LemonInput--type-search{border-color:transparent;border-radius:0;max-width:none;transition:none}.Sidebar3000__content{align-items:stretch;background:var(--sidebar-background);border-right:min(1px,var(--sidebar-width)) solid var(--border);box-sizing:initial;display:flex;flex-direction:column;font-size:.6875rem;height:100vh;overflow:hidden;position:fixed;top:0;white-space:nowrap;width:var(--sidebar-width)}.Sidebar3000--resizing .Sidebar3000__content{will-change:width}.Sidebar3000__content>div:not(:first-child){border-top-width:1px}.Sidebar3000__lists{align-items:stretch;display:flex;flex-direction:column;flex-grow:1;overflow:hidden auto;position:relative}.Sidebar3000__hint{align-items:center;background:var(--bg-3000);border-top-width:1px;display:flex;flex:0 0 var(--sidebar-row-height);font-weight:500;justify-content:space-between;padding:0 var(--sidebar-horizontal-padding);z-index:1}.Sidebar3000__hint,.Sidebar3000__slider{-webkit-user-select:none;-moz-user-select:none;user-select:none}.Sidebar3000__slider{bottom:0;cursor:col-resize;position:absolute;right:calc(var(--sidebar-slider-padding)*-1 - min(1px,var(--sidebar-width)));top:0;width:calc(var(--sidebar-slider-padding)*2 + 1px);z-index:var(--z-notifications-popover)}.Sidebar3000__slider:after,.Sidebar3000__slider:before{bottom:0;content:"";left:var(--sidebar-slider-padding);pointer-events:none;position:absolute;top:0;width:1px}.Sidebar3000__slider:before{background:var(--border);transition:transform .1s ease}.Sidebar3000__slider:after{background:var(--text-3000);opacity:0;transition:transform .1s ease}.Sidebar3000--resizing .Sidebar3000__slider:after,.Sidebar3000__slider:hover:after{opacity:.25}.Sidebar3000--resizing .Sidebar3000__slider:after,.Sidebar3000--resizing .Sidebar3000__slider:before{transform:scaleX(3)}.Sidebar3000[aria-hidden=true] .Sidebar3000__slider{cursor:e-resize}.Sidebar3000__header{align-items:center;display:flex;flex:0 0 var(--sidebar-row-height);gap:.25rem;padding:0 var(--sidebar-horizontal-padding)}.Accordion{--accordion-arrow-size:1rem;--accordion-row-height:1.75rem;--accordion-inset-expandable:1.25rem;--accordion-header-background:var(--accent-3000);--accordion-inset:0rem;display:flex;flex-basis:0;flex-direction:column;flex-shrink:0;min-height:var(--accordion-row-height)}[theme=dark] .Accordion{--accordion-header-background:var(--bg-3000)}.Accordion[aria-expanded]{--accordion-inset:var(--accordion-inset-expandable)}.Accordion:not([aria-expanded=false]){flex-grow:1}.Accordion:not([aria-expanded=false]):not(:last-child){border-bottom-width:1px}.Accordion[aria-disabled=true] .Accordion__header{cursor:default}.Accordion[aria-disabled=true] .Accordion__header:hover{background:var(--accordion-header-background)}.Accordion[aria-disabled=true]:not([aria-busy=true]) .Accordion__header .LemonIcon{visibility:hidden}.Accordion__header{align-items:center;background:var(--accordion-header-background);border-bottom-width:1px;cursor:pointer;display:flex;height:var(--accordion-row-height);padding:0 var(--sidebar-horizontal-padding);-webkit-user-select:none;-moz-user-select:none;user-select:none;z-index:1}.Accordion__header:hover{background:var(--border-3000)}.Accordion__header>.LemonIcon{flex-shrink:0;font-size:var(--accordion-arrow-size);margin-right:calc(var(--accordion-inset-expandable) - var(--accordion-arrow-size));transition:transform 50ms ease}.Accordion[aria-expanded=true] .Accordion__header>.LemonIcon{transform:rotate(90deg)}.SidebarListItem{--sidebar-list-item-status-color:var(--muted);--sidebar-list-item-fold-size:0.5rem;--sidebar-list-item-ribbon-width:0.1875rem;--sidebar-list-item-background:var(--sidebar-background);background:var(--sidebar-list-item-background);border-bottom-width:1px;color:var(--muted);line-height:1.125rem;list-style:none;opacity:.9;position:relative}.SidebarListItem.SidebarListItem--is-renaming,.SidebarListItem:hover:not([aria-disabled=true]),.SidebarListItem[aria-current=page]{--sidebar-list-item-background:var(--border-3000);opacity:1}.SidebarListItem.SidebarListItem--is-menu-open .SidebarListItem__actions,.SidebarListItem.SidebarListItem--is-renaming .SidebarListItem__actions,.SidebarListItem:focus-within .SidebarListItem__actions,.SidebarListItem:hover .SidebarListItem__actions,.SidebarListItem[aria-current=page] .SidebarListItem__actions{display:flex}.SidebarListItem.SidebarListItem--is-menu-open.SidebarListItem--has-menu:not(.SidebarListItem--extended) .SidebarListItem__link,.SidebarListItem.SidebarListItem--is-renaming.SidebarListItem--has-menu:not(.SidebarListItem--extended) .SidebarListItem__link,.SidebarListItem:focus-within.SidebarListItem--has-menu:not(.SidebarListItem--extended) .SidebarListItem__link,.SidebarListItem:hover.SidebarListItem--has-menu:not(.SidebarListItem--extended) .SidebarListItem__link,.SidebarListItem[aria-current=page].SidebarListItem--has-menu:not(.SidebarListItem--extended) .SidebarListItem__link{padding-right:calc(var(--sidebar-horizontal-padding) + 1.25rem)}.SidebarListItem.SidebarListItem--is-menu-open.SidebarListItem--has-menu.SidebarListItem--extended:after,.SidebarListItem.SidebarListItem--is-renaming.SidebarListItem--has-menu.SidebarListItem--extended:after,.SidebarListItem:focus-within.SidebarListItem--has-menu.SidebarListItem--extended:after,.SidebarListItem:hover.SidebarListItem--has-menu.SidebarListItem--extended:after,.SidebarListItem[aria-current=page].SidebarListItem--has-menu.SidebarListItem--extended:after{background:linear-gradient(to left,var(--sidebar-list-item-background) 0,var(--sidebar-list-item-background) 50%,transparent 100%);bottom:1px;content:"";position:absolute;right:1px;top:1px;width:3.5rem}.SidebarListItem.SidebarListItem--marker-fold:before,.SidebarListItem.SidebarListItem--marker-ribbon:before{content:"";display:block;left:0;position:absolute;top:0;z-index:1}.SidebarListItem.SidebarListItem--marker-fold:before{border-bottom:var(--sidebar-list-item-fold-size) solid transparent;border-left:var(--sidebar-list-item-fold-size) solid var(--sidebar-list-item-status-color);height:0;width:0}.SidebarListItem.SidebarListItem--marker-ribbon{--sidebar-list-item-marker-offset:var(--sidebar-list-item-ribbon-width)}.SidebarListItem.SidebarListItem--marker-ribbon:before{background:var(--sidebar-list-item-status-color);height:100%;width:var(--sidebar-list-item-ribbon-width)}.SidebarListItem.SidebarListItem--marker-status-success{--sidebar-list-item-status-color:var(--success)}.SidebarListItem.SidebarListItem--marker-status-warning{--sidebar-list-item-status-color:var(--warning)}.SidebarListItem.SidebarListItem--marker-status-danger{--sidebar-list-item-status-color:var(--danger)}.SidebarListItem.SidebarListItem--marker-status-completion{--sidebar-list-item-status-color:var(--purple)}.SidebarListItem__link,.SidebarListItem__rename{--sidebar-list-item-inset:calc(var(--accordion-inset, 0px) + var(--sidebar-horizontal-padding) + var(--sidebar-list-item-marker-offset, 0px));color:inherit;display:flex;flex-direction:column;height:100%;justify-content:center;position:relative;width:100%}.SidebarListItem__link:focus-visible:after,.SidebarListItem__rename:focus-visible:after{border:1px solid var(--border-3000);content:"";inset:0 0 -1px;pointer-events:none;position:absolute}.SidebarListItem__link{color:inherit!important;padding:0 var(--sidebar-horizontal-padding) 0 var(--sidebar-list-item-inset);row-gap:1px}.SidebarListItem[aria-disabled=true] .SidebarListItem__link{cursor:default}.SidebarListItem__rename{background:var(--bg-light)}.SidebarListItem__rename input{background:none;color:var(--text-3000);font-size:.75rem;height:100%;outline:none;padding:0 calc(var(--sidebar-horizontal-padding) + 2.5rem) 0 var(--sidebar-list-item-inset);width:100%}.SidebarListItem__rename:after{border:1px solid var(--border);content:"";inset:0 0 -1px;pointer-events:none;position:absolute}.SidebarListItem[aria-invalid=true] .SidebarListItem__rename:after{border-color:var(--danger)}.SidebarListItem__error{background:var(--danger);color:#fff;left:0;line-height:1.25rem;padding:0 .25rem;position:absolute;top:2rem;white-space:normal;z-index:1}.SidebarListItem__error:before{border-bottom:.25rem solid transparent;border-bottom-color:var(--danger);border-left:.25rem solid transparent;border-left-color:var(--danger);border-right:.25rem solid transparent;border-top:.25rem solid transparent;content:"";display:block;left:0;position:absolute;top:-.5rem}.SidebarListItem__actions{display:none;position:absolute;right:var(--sidebar-horizontal-padding);top:50%;transform:translateY(-50%);z-index:1}',""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/layout/navigation-3000/components/KeyboardShortcut.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".KeyboardShortcut{align-items:center;background:var(--accent-3000);border-color:var(--secondary-3000-button-border-hover);border-radius:.25rem;border-width:1px 1px 2px;color:var(--text-3000);display:inline-flex;font-size:.75rem;height:1.25rem;justify-content:center;min-width:1.25rem;padding:.125rem .25rem;text-transform:capitalize;-webkit-user-select:none;-moz-user-select:none;user-select:none}.KeyboardShortcut--muted>.KeyboardShortcut{background:none;color:var(--muted)}.KeyboardShortcut+.KeyboardShortcut__key{margin-left:.25rem}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/layout/navigation-3000/components/TopBar.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,'.TopBar3000{--breadcrumbs-compaction-rate:0;align-items:start;display:flex;height:var(--breadcrumbs-height-full);pointer-events:none;position:sticky;top:0;white-space:nowrap;z-index:var(--z-top-navigation)}.TopBar3000 .EditableField__display{text-overflow:ellipsis;white-space:nowrap}.TopBar3000__content{align-items:center;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:var(--glass-bg-3000);border-bottom:1px solid var(--glass-border-3000);display:flex;font-size:calc(.75rem + .0625rem*var(--breadcrumbs-compaction-rate));font-weight:600;gap:.5rem;height:calc(var(--breadcrumbs-height-full) - (var(--breadcrumbs-height-full) - var(--breadcrumbs-height-compact))*var(--breadcrumbs-compaction-rate));line-height:1rem;padding:0 1rem;pointer-events:auto;width:100%}.TopBar3000__hamburger{margin-left:-.5rem}.TopBar3000__breadcrumbs{flex-grow:1;flex-shrink:1;min-width:0;overflow:hidden}.TopBar3000__trail{align-items:center;display:flex;margin-top:calc(.25rem*(1 - var(--breadcrumbs-compaction-rate)));overflow:visible}.TopBar3000:not(.TopBar3000--compact) .TopBar3000__trail{height:1rem}.TopBar3000__here{box-sizing:initial;font-family:var(--font-sans)!important;font-size:1rem;font-weight:700;height:calc(1.2em*(1 - var(--breadcrumbs-compaction-rate)));line-height:1.2;margin:0;overflow:hidden;padding:calc(.5rem*(1 - var(--breadcrumbs-compaction-rate))) 0 0;position:relative}.TopBar3000--compact .TopBar3000__here{visibility:hidden}.TopBar3000__here>*{bottom:.25rem;height:1.2em;position:absolute}.TopBar3000__breadcrumb{align-items:center;color:var(--muted);cursor:default;display:flex;flex-shrink:0;overflow:hidden;white-space:pre}.TopBar3000__breadcrumb.Link:hover{color:inherit}.TopBar3000__breadcrumb .LemonIcon{font-size:1rem;margin-left:.125rem}.TopBar3000__breadcrumb .LemonTag--default{border-color:var(--muted);font-weight:600;opacity:.5;text-transform:uppercase}.TopBar3000__breadcrumb.TopBar3000__breadcrumb--here{color:var(--text-3000);cursor:default;flex-shrink:1}.TopBar3000--full .TopBar3000__breadcrumb.TopBar3000__breadcrumb--here{visibility:hidden}.TopBar3000__breadcrumb.TopBar3000__breadcrumb--here>*{transform:translateY(calc(100%*(1 - var(--breadcrumbs-compaction-rate))))}.TopBar3000__breadcrumb.TopBar3000__breadcrumb--actionable{cursor:pointer}.TopBar3000__breadcrumb.TopBar3000__breadcrumb--actionable.TopBar3000__breadcrumb--open,.TopBar3000__breadcrumb.TopBar3000__breadcrumb--actionable:hover{color:var(--text-3000)}.TopBar3000__breadcrumb.TopBar3000__breadcrumb--actionable.TopBar3000__breadcrumb--open .LemonTag--default,.TopBar3000__breadcrumb.TopBar3000__breadcrumb--actionable:hover .LemonTag--default{opacity:1}.TopBar3000__separator{flex-shrink:0;margin:0 .5rem;opacity:.5}.TopBar3000__separator:after{content:"/"}.TopBar3000__more{margin-left:.5rem}.TopBar3000__actions{align-items:center;display:flex;flex-grow:1;gap:.5rem;justify-content:flex-end}',""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/layout/navigation-3000/sidepanel/SidePanel.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".SidePanel3000{--side-panel-bar-width:3rem;background:var(--accent-3000);box-sizing:initial;display:flex;flex-shrink:0;position:relative;width:3rem;z-index:var(--z-main-nav)}.SidePanel3000--open{max-width:60%;min-width:28rem;position:relative;width:min(30%,40rem)}@media(max-width:1200px){.SidePanel3000--open{box-shadow:0 0 30px rgba(0,0,0,.2);max-width:calc(100vw - var(--side-panel-bar-width));position:fixed;right:0;top:0}[theme=dark] .SidePanel3000--open{box-shadow:none}}.SidePanel3000--resizing{pointer-events:none}.SidePanel3000__bar{align-items:center;border-left-width:1px;display:flex;flex-direction:column;height:100vh;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:var(--side-panel-bar-width)}.SidePanel3000__bar .LemonButton__icon{transform:rotate(-90deg)}.SidePanel3000__tabs{flex:1;overflow:hidden auto;width:var(--side-panel-bar-width)}.SidePanel3000__tabs::-webkit-scrollbar{display:none}.SidePanel3000__tabs-content{align-items:center;display:flex;gap:.25rem;height:var(--side-panel-bar-width);margin-top:calc((var(--side-panel-bar-width) - .25rem)*-1);transform:rotate(90deg);transform-origin:bottom left}.SidePanel3000__tabs-content .LemonButton{padding-bottom:0!important;padding-right:1px!important}.SidePanel3000__tabs-content .LemonButton .LemonButton__chrome{padding:.25rem calc(var(--lemon-button-padding-right, var(--lemon-button-padding-horizontal)) + var(--lemon-button-chrome-depth)*.5) .25rem calc(var(--lemon-button-padding-left, var(--lemon-button-padding-horizontal)) - var(--lemon-button-chrome-depth)*.5)!important}.SidePanel3000__tabs-content .LemonButton .LemonButton__chrome:after{box-shadow:var(--lemon-button-chrome-depth) 0 0 -1px var(--lemon-button-frame-bg-color)!important;inset:-1px calc(var(--lemon-button-chrome-depth) - 1px) -1px -1px!important}.SidePanel3000__tabs-content .LemonButton:hover:not([aria-disabled=true]) .LemonButton__chrome,.SidePanel3000__tabs-content .LemonButton:not([aria-disabled=true]):active .LemonButton__chrome{transform:translateX(var(--lemon-button-depth))!important}.SidePanel3000__tabs-content .LemonButton:hover:not([aria-disabled=true]) .LemonButton__chrome:after,.SidePanel3000__tabs-content .LemonButton:not([aria-disabled=true]):active .LemonButton__chrome:after{box-shadow:calc(var(--lemon-button-chrome-depth) - var(--lemon-button-depth)) 0 0 -1px var(--lemon-button-frame-bg-color)!important}.SidePanel3000__tabs-content .LemonButton:hover:not([aria-disabled=true]) .LemonButton__chrome:before,.SidePanel3000__tabs-content .LemonButton:not([aria-disabled=true]):active .LemonButton__chrome:before{bottom:-1px!important;right:calc(var(--lemon-button-depth) - 1px)!important}.SidePanel3000__content{border-left-width:1px;display:flex;flex:1;flex-direction:column;height:100vh;overflow-y:auto}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/layout/navigation/TopBar/AccountPopover.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".AccountPopover{max-width:22rem;min-width:16rem}.AccountPopover__side-link{color:var(--primary-3000);flex-grow:1;font-size:.8125rem;font-weight:600;margin-left:.5rem;text-align:right}.AccountPopover__section{border-bottom:1px solid var(--border);padding:.5rem 0;width:100%}.AccountPopover__section:first-child{padding-top:0}.AccountPopover__section:last-child{border-bottom:none;padding-bottom:0}.AccountInfo{align-items:center;display:flex}.AccountInfo__identification{margin-left:.5rem;overflow:hidden;width:100%}.AccessLevelIndicator{font-size:.625rem;margin-left:.5rem;text-transform:uppercase}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/components/ActivityLog/ActivityLog.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".ActivityLog.notifications-menu{max-width:25rem}.ActivityLog .ActivityDescription{background:var(--bg-light);border:1px solid var(--border);border-radius:var(--radius);padding:1rem}.ActivityLog .ActivityDescription .taxonomic-breakdown-filter.tag-pill{background:none;border:none;border-radius:0;font-size:.8125rem;padding:0;vertical-align:unset}.ActivityLog .ActivityDescription section:not(:last-child){margin-bottom:.5rem}.ActivityLog .page-caption{max-width:50rem}.ActivityLogRow{display:flex;gap:.5rem;line-height:24px;max-width:50rem;overflow-wrap:anywhere;padding:.5rem}.ActivityLogRow--unread{background-color:var(--primary-highlight);border-radius:var(--radius)}.ActivityLogRow .ProfilePicture{flex-grow:0}.ActivityLogRow .ActivityLogRow__details{flex-grow:1}.ActivityLogRow .ActivityLogRow__details .highlighted-activity{background-color:var(--mark);display:inline}.ActivityLogRow .ActivityLogRow__details .highlighted-activity>.PersonDisplay{min-width:5.5rem}.ActivityLogRow .ActivityLogRow__description ul.bullet-list{list-style-type:disc;padding-left:20px}.ActivityLogRow .ActivityLogRow__description ul.bullet-list li{display:list-item}.ActivityLogRow .ActivityLogRow__description__extended{margin-bottom:.5rem;margin-top:.5rem}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/components/ActivityLog/SentenceList.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".sentence-list,.sentence-list .sentence-part{display:inline}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/components/Animation/Animation.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".Animation{align-items:center;aspect-ratio:1/1;display:inline-flex;justify-content:center;max-width:300px;opacity:1;overflow:hidden;transition:opacity .4s ease}.Animation.Animation--hidden{opacity:0}.Animation .Animation__player{display:block;height:100%;width:100%}.Animation .Animation__player svg{display:block}.Animation.Animation--large{width:100%}.Animation.Animation--small{overflow:visible}.Animation.Animation--small svg{height:45px!important;width:45px!important}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/components/AnnotationsOverlay/AnnotationsOverlay.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".AnnotationsOverlay{left:var(--annotations-overlay-chart-area-left);position:absolute;top:var(--annotations-overlay-chart-area-height)}.AnnotationsBadge{align-items:center;-webkit-appearance:none!important;-moz-appearance:none!important;appearance:none!important;background:none;border:none;cursor:pointer;display:flex;height:3rem;justify-content:center;margin-left:calc(var(--annotations-overlay-tick-interval)*var(--annotations-badge-index) - var(--annotations-overlay-chart-area-left) + var(--annotations-overlay-first-tick-left));position:absolute;transform:translate(-50%,-50%);width:var(--annotations-overlay-tick-interval)}.AnnotationsBadge>.LemonBadge{border-color:var(--bg-light);transform:scale(var(--annotations-badge-scale));transform-origin:center;transition:transform .2s ease}.AnnotationsPopover{--annotations-popover-width:30rem;transition:left .2s ease,opacity .1s ease,transform .1s ease;z-index:var(--z-annotation-popover)!important}.AnnotationsPopover .LemonModal{border:none;box-shadow:none;margin:0;max-width:var(--annotations-popover-width);min-height:100%;min-width:var(--annotations-popover-width)}.AnnotationCard .profile-package{vertical-align:bottom}.AnnotationCard h5{margin:0}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/components/Cards/CardMeta.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".InsightCard .handle,.TextCard .handle{align-items:flex-end;display:flex;height:100%;justify-content:center;pointer-events:none;position:absolute;width:100%;z-index:var(--z-raised)}.InsightCard .handle.horizontal svg,.TextCard .handle.horizontal svg{transform:rotate(90deg) translateX(.75rem)}.InsightCard .handle.vertical,.TextCard .handle.vertical{flex-direction:column}.InsightCard .handle.vertical svg,.TextCard .handle.vertical svg{transform:translateX(.5rem)}.InsightCard .handle.corner,.TextCard .handle.corner{justify-content:flex-end}.InsightCard .handle.corner svg,.TextCard .handle.corner svg{transform:translate(.5rem,.5rem)}.CardMeta{background:var(--bg-light);border-radius:var(--radius);display:flex;flex-direction:column;flex-shrink:0;max-height:calc(100% - 2rem);position:relative;width:100%;z-index:var(--z-raised)}.CardMeta--with-details .CardMeta__top{height:1.5rem}.CardMeta h5{color:var(--muted);line-height:1rem;margin-bottom:0}.CardMeta h4,.CardMeta h5{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.CardMeta h4{font-size:1rem;font-weight:600;height:1.5em;margin-bottom:.125rem}.CardMeta .CardMeta__primary{display:flex;padding:1rem;width:100%}.CardMeta .CardMeta__divider{background:var(--border);height:1px;margin:0 1rem;opacity:0;transition:opacity .2s ease}.CardMeta .CardMeta__details{background:var(--bg-light);border-bottom-width:1px;left:0;margin-top:-1px;max-height:24rem;overflow-y:auto;position:absolute;right:0;top:100%;transition:box-shadow .2s ease,height .2s ease,margin .2s ease}.CardMeta .CardMeta__details .CardMeta__details__content{overflow-y:auto;pointer-events:none}.CardMeta.CardMeta--details-shown .CardMeta__details{box-shadow:var(--shadow-elevation-3000);margin-top:0}.CardMeta.CardMeta--details-shown .CardMeta__details .CardMeta__details__content{opacity:1;pointer-events:all}.CardMeta.CardMeta--details-shown .CardMeta__divider{opacity:1}.CardMeta__ribbon{align-self:stretch;background:var(--muted);border-radius:var(--radius);flex-shrink:0;margin:0 .75rem 0 -.25rem;width:.375rem}.CardMeta__ribbon.blue{background:var(--blue)}.CardMeta__ribbon.purple{background:var(--purple)}.CardMeta__ribbon.green{background:var(--green)}.CardMeta__ribbon.black{background:var(--black)}.CardMeta__main{align-items:flex-start;display:flex;flex-direction:column;height:-moz-fit-content;height:fit-content;min-height:2rem;width:100%}.CardMeta__main>*{max-width:100%}.CardMeta__top{align-items:center;align-self:stretch;display:flex;height:2rem;justify-content:space-between}.CardMeta__top .LemonButton{height:1.75rem}.CardMeta__controls{align-items:center;display:flex;gap:.25rem}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/components/Cards/InsightCard/InsightCard.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,'.InsightCard{background:var(--bg-light);border:1px solid var(--border);border-radius:var(--radius);display:flex;flex-direction:column;height:30rem;max-width:100%;min-width:0;position:relative;transition:border .2s ease;z-index:3}.InsightCard--highlighted{border-color:var(--primary-3000);outline:1px solid var(--primary-3000)}.InsightCard .ErrorBoundary{height:100%;margin:auto;width:100%}.InsightCard__viz{border-radius:0 0 var(--radius) var(--radius);display:flex;flex:1;flex-direction:column;overflow:auto;position:relative;width:100%}.InsightCard__viz .AnnotationsOverlay,.InsightCard__viz .LineGraph{padding:.5rem}.InsightCard__viz .insight-empty-state{font-size:.875rem;height:100%;padding-bottom:0;padding-top:0}.InsightCard__viz .LemonTable{background:none;border:none;border-radius:0}.WebAnalyticsDashboard .InsightVizDisplay .InsightCard__viz{min-height:var(--insight-viz-min-height)}.CardMeta .InsightDetails,.InsightDetails{font-size:.8125rem;line-height:1.5rem}.CardMeta .InsightDetails h5,.InsightDetails h5{line-height:1.5rem;margin-bottom:.125rem}.CardMeta .InsightDetails section:not(:last-child),.InsightDetails section:not(:last-child){margin-bottom:.5rem}.CardMeta .InsightDetails .LemonRow,.InsightDetails .LemonRow{font-size:inherit;min-height:2rem}.InsightDetails__query{border-radius:var(--radius);border-width:1px;margin-top:.25rem;padding:.375rem .5rem}.InsightDetails__query .LemonRow{padding-left:0;padding-right:0}.InsightDetails__formula code{font-weight:600;margin-left:.375rem}.InsightDetails__series{margin:-.125rem 0}.InsightDetails__series:not(:first-child){margin-top:.5rem}.InsightDetails__series .LemonDivider{margin-left:1.5rem;width:calc(100% - 1.5rem)}.InsightDetails__footer{display:flex;flex-wrap:wrap;gap:.5rem 2rem}.InsightDetails__footer .profile-package{vertical-align:middle}.InsightDetails__footer .taxonomic-breakdown-filter.tag-pill{background:none;border:none;border-radius:0;font-size:.8125rem;padding:0;vertical-align:unset}.SeriesDisplay{line-height:1.5rem}.SeriesDisplay__raw-name{align-items:center;background:var(--primary-highlight);border-radius:var(--radius);color:var(--text-3000);display:inline-flex;font-size:.6875rem;font-weight:600;line-height:1rem;margin:0 .25rem;padding:.125rem .25rem;vertical-align:middle}.SeriesDisplay__raw-name.SeriesDisplay__raw-name--action,.SeriesDisplay__raw-name.SeriesDisplay__raw-name--event{padding:.25rem}.SeriesDisplay__raw-name.SeriesDisplay__raw-name--action:before,.SeriesDisplay__raw-name.SeriesDisplay__raw-name--event:before{background:var(--primary-3000);border-radius:var(--radius);color:var(--bg-light);display:inline-block;flex-shrink:0;font-size:.625rem;font-weight:700;line-height:1rem;margin-right:.25rem;text-align:center;width:1rem}.SeriesDisplay__raw-name.SeriesDisplay__raw-name--action:before{content:"A"}.SeriesDisplay__raw-name.SeriesDisplay__raw-name--event:before{content:"E"}.SeriesDisplay__condition{display:flex}.SeriesDisplay__arrow{color:var(--border-bold);flex-shrink:0;font-size:1.25rem;margin-right:.25rem}',""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/components/Cards/TextCard/TextCard.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".TextCard__body{flex:1;overflow-y:auto}.TextCard__body ul{list-style-position:inside;list-style-type:disc}.TextCard__body ol{list-style-position:inside;list-style-type:numeric}.TextCard__body img{max-width:100%}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/components/CodeSnippet/CodeSnippet.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".CodeSnippet{font-size:.875rem;position:relative}.CodeSnippet.CodeSnippet--compact{font-size:.8125rem}.CodeSnippet.CodeSnippet--compact .CodeSnippet__actions{right:.375rem;top:.375rem}.CodeSnippet.CodeSnippet--compact pre{padding-top:.375rem}.CodeSnippet .CodeSnippet__actions{background:var(--accent-3000)!important;display:flex;gap:.5rem;position:absolute;right:.5rem;top:.75rem}.CodeSnippet pre{background:var(--accent-3000)!important;border:1px solid var(--border-3000)!important;border-radius:var(--radius)!important;margin:0;padding:.75rem 1rem}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/components/CommandBar/index.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".LemonInput.CommandBar__input{border-color:transparent!important;border-radius:0;height:3rem;padding-left:1rem;padding-right:.5rem}.SearchBarTab:hover{border-left:2px solid var(--border-3000)}.SearchBarTab.SearchBarTab__active{border-color:var(--primary-3000)}.SearchResults{height:calc(100% - 2.875rem)}.CommandBar__overlay{align-items:center;-webkit-backdrop-filter:blur(var(--modal-backdrop-blur));backdrop-filter:blur(var(--modal-backdrop-blur));background-color:var(--modal-backdrop-color);display:flex;flex-direction:column;height:100%;justify-content:center;left:0;padding:.75rem;position:fixed;top:0;width:100%;z-index:var(--z-command-palette)}.CommandBar__overlay-content{height:100%;max-height:40rem;max-width:62rem;overflow:hidden;width:100%}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/components/DateDisplay/DateDisplay.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".dated-highlight{background-color:var(--bg-light);border:1px solid var(--border-light);border-radius:var(--radius);color:var(--muted);margin-right:4px;padding:.125rem .25rem}.date-display-dates,.dated-highlight{white-space:nowrap}.date-display-dates .secondary-date{color:var(--muted-alt);font-weight:400;margin-left:2px}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/components/DateFilter/RollingDateRangeFilter.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".RollingDateRangeFilter{align-items:center;color:var(--text-3000);cursor:pointer;display:flex;font-size:.875rem;font-weight:400;height:1.6875rem;line-height:1.375em;min-height:2rem;padding:1.25rem 0;transition:background .3s ease}.RollingDateRangeFilter:hover{background-color:var(--bg-3000)}.RollingDateRangeFilter input::-webkit-inner-spin-button,.RollingDateRangeFilter input::-webkit-outer-spin-button{-webkit-appearance:none;appearance:none;margin:0}.RollingDateRangeFilter input[type=number]{-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.RollingDateRangeFilter__label{flex-shrink:0;margin:0 auto}.RollingDateRangeFilter__counter{align-items:center;background-color:var(--bg-light);border:1px solid var(--border);border-radius:var(--radius);box-sizing:border-box;display:flex;height:1.6875rem;line-height:1.5rem;margin:0 .25rem}.RollingDateRangeFilter__counter .LemonInput{border:none;height:unset;min-height:0;padding:0;width:3rem}.RollingDateRangeFilter__counter .LemonInput input{text-align:center}.RollingDateRangeFilter__counter .RollingDateRangeFilter__counter__step{border-radius:calc(var(--radius) - 1px);height:100%;margin:0;padding:0;text-align:center;width:1.25rem}.RollingDateRangeFilter__counter .RollingDateRangeFilter__counter__step:first-child{border-bottom-right-radius:0;border-top-right-radius:0}.RollingDateRangeFilter__counter .RollingDateRangeFilter__counter__step:last-child{border-bottom-left-radius:0;border-top-left-radius:0}.RollingDateRangeFilter__counter .RollingDateRangeFilter__counter__step:hover{background-color:var(--accent-3000)}.RollingDateRangeFilter__select{width:6rem}.RollingDateRangeFilter__popover{z-index:9999}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/components/DefinitionPopover/DefinitionPopover.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".definition-popover{max-width:20rem;min-width:17rem;padding:.5rem .75rem .75rem}.definition-popover .definition-popover-header{display:flex;flex-direction:column}.definition-popover .definition-popover-header .definition-popover-header-row{display:flex;flex-direction:row;justify-content:space-between;line-height:2rem;margin-bottom:.25rem}.definition-popover .definition-popover-header .definition-popover-header-row .definition-popover-header-row-title{color:var(--muted);font-size:.6875rem;font-weight:600;letter-spacing:.05em;text-transform:uppercase}.definition-popover .definition-popover-header .definition-popover-header-row .definition-popover-header-row-buttons{display:flex;flex-direction:row;font-size:.8125rem}.definition-popover .definition-popover-header .definition-popover-header-row .definition-popover-header-row-buttons a{margin-left:1rem;-webkit-user-select:none;-moz-user-select:none;user-select:none}.definition-popover .definition-popover-header .definition-popover-header-row .definition-popover-header-row-buttons .definition-popover-disabled-button{color:var(--muted);cursor:not-allowed}.definition-popover .definition-popover-header .definition-popover-title{align-items:center;display:flex;font-size:1.25rem;font-weight:600;line-height:1.2;margin-bottom:.25rem;min-height:1.5rem;white-space:normal}.definition-popover .definition-popover-header .definition-popover-title svg.taxonomy-icon{flex-shrink:0;font-size:1.5rem;margin-right:.75rem}.definition-popover .definition-popover-header .definition-popover-title svg.taxonomy-icon.taxonomy-icon-muted{color:var(--muted-alt)}.definition-popover .definition-popover-header .definition-popover-title svg.taxonomy-icon.taxonomy-icon-verified{color:var(--success)}.definition-popover .definition-popover-header .definition-popover-title svg.taxonomy-icon.taxonomy-icon-built-in{color:var(--primary-3000)}.definition-popover .definition-popover-tags{margin:0!important}.definition-popover .definition-popover-description{font-weight:400;margin:.5rem 0;overflow-wrap:break-word}.definition-popover .definition-popover-description.empty{color:var(--muted);font-style:italic}.definition-popover .definition-popover-examples{font-style:italic;margin-bottom:.25rem}.definition-popover .definition-popover-timemeta{margin:.5rem 0}.definition-popover .definition-popover-timemeta .definition-popover-timemeta-user{display:inline-flex}.definition-popover .definition-popover-timemeta .definition-popover-timemeta-spacer{margin-right:.5rem}.definition-popover .DefinitionPopover{background-color:var(--bg-3000)}.definition-popover .DefinitionPopover .DefinitionPopover__label{align-items:flex-start;font-size:.6875rem;margin-bottom:1rem;margin-top:1rem;text-transform:uppercase}.definition-popover .definition-popover-grid{display:grid;grid-gap:.5rem}.definition-popover .definition-popover-grid .definition-popover-grid-card{display:flex;flex-direction:column}.definition-popover .definition-popover-grid .definition-popover-grid-card .definition-popover-grid-card-title{color:var(--muted);font-size:.6875rem;font-weight:600;letter-spacing:.05em;text-transform:uppercase}.definition-popover .definition-popover-grid .definition-popover-grid-card .definition-popover-grid-card-content{margin-top:.25rem}.definition-popover .definition-popover-edit-form{display:flex;flex-direction:column}.definition-popover .definition-popover-edit-form .label-text{font-weight:600;margin-right:.25rem}.definition-popover .definition-popover-edit-form .definition-popover-edit-form-label{margin-bottom:.5rem}.definition-popover .definition-popover-edit-form .definition-popover-edit-form-value{margin-bottom:1rem}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/components/EditableField/EditableField.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".EditableField{align-items:center;display:flex;max-width:100%}.EditableField:not(.EditableField--multiline){line-height:1.15em}.EditableField i{color:var(--muted)}.EditableField .EditableField__notice{color:var(--muted);font-size:1.5rem;margin-left:.5rem}.EditableField .EditableField__highlight{align-items:center;display:flex;flex-direction:row;margin:-.25rem;max-width:calc(100% + .5rem);overflow:auto;padding:.25rem;width:-moz-fit-content;width:fit-content}.EditableField .EditableField__display{overflow:hidden;white-space:pre-wrap}.EditableField.EditableField--editing .EditableField__highlight{align-items:flex-end;border-radius:var(--radius);flex-grow:1;max-width:calc(100% + .5rem);outline:1px solid var(--border);width:auto}.EditableField.EditableField--underlined .EditableField__highlight{margin-bottom:0;margin-top:0;padding-bottom:0;padding-top:0}.EditableField.EditableField--underlined.EditableField--editing .EditableField__highlight{outline:none}.EditableField.EditableField--underlined.EditableField--editing .EditableField__highlight input{border-bottom:1px dashed var(--muted);margin-bottom:-1px}.EditableField .EditableField__actions{align-items:center;display:flex;flex-shrink:0;gap:.5rem;margin-left:.5rem;overflow:hidden}.EditableField input,.EditableField textarea{background:transparent;border:none;color:var(--text-3000);font:inherit;max-width:100%;outline:none;padding:0}.EditableField textarea{align-self:center;width:100%}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/components/EmptyMessage/EmptyMessage.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".empty-message{align-items:center;display:flex;flex-direction:column;height:100%;justify-content:center}.empty-message .description,.empty-message .title{text-align:center}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/components/Fade/Fade.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,"@keyframes Fade__fade-in{0%{opacity:0}to{opacity:1}}@keyframes Fade__fade-out{0%{opacity:1}to{opacity:0}}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/components/HTMLElementsDisplay/SelectableElement.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".SelectableElement{border:1px solid transparent;border-radius:var(--radius);transition:background-color .2s ease,color .2s ease,border .2s ease}.SelectableElement.SelectableElement--selected{background:var(--primary-3000)}.SelectableElement:hover{background:var(--primary-3000-hover)}.SelectableElement:active{background:var(--primary-3000-active)}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/components/HedgehogBuddy/HedgehogBuddy.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".HedgehogBuddy{cursor:pointer;margin:0;z-index:var(--z-hedgehog-buddy)}.HedgehogBuddy:after{content:attr(data-content);height:0;overflow:hidden;position:absolute;width:0;z-index:-1}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/components/InsightLabel/InsightLabel.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".insights-label{max-width:100%}.insights-label .value{font-size:1.176em;font-weight:700;margin-left:.3rem;padding-right:4px}.insights-label .graph-series-glyph{margin-left:2px;margin-right:4px;padding:0 6px}.insights-label .color-icon{border:2px solid #fff;border-radius:50%;box-sizing:border-box;margin-left:2px;margin-right:6px}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/components/InsightLegend/InsightLegend.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".InsightLegendMenu{background-color:var(--bg-light);box-shadow:none!important;max-height:100%}.InsightLegendMenu.InsightLegendMenu--in-card-view{max-width:40%}.InsightLegendMenu.InsightLegendMenu--horizontal{max-width:100%}.InsightLegendMenu.InsightLegendMenu--horizontal .InsightLegendMenu-scroll{display:flex;flex-wrap:wrap}.InsightLegendMenu.InsightLegendMenu--horizontal .InsightLegendMenu-scroll .InsightLegendMenu-item{width:auto}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/components/Map/Maplibre.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".maplibregl-ctrl-attrib-button:focus,.maplibregl-ctrl-group button:focus{box-shadow:0 0 2px 2px var(--primary-3000)}@media screen{.maplibregl-ctrl-attrib.maplibregl-compact{background-color:var(--bg-light);color:var(--muted-3000)}.maplibregl-ctrl-attrib .maplibregl-ctrl-attrib-button{background-color:var(--bg-3000)}[theme=dark] .maplibregl-ctrl-attrib .maplibregl-ctrl-attrib-button{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='%23fff' fill-rule='evenodd' viewBox='0 0 20 20'%3E%3Cpath d='M4 10a6 6 0 1 0 12 0 6 6 0 1 0-12 0m5-3a1 1 0 1 0 2 0 1 1 0 1 0-2 0m0 3a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0'/%3E%3C/svg%3E\")}.maplibregl-ctrl-attrib.maplibregl-compact-show .maplibregl-ctrl-attrib-button{background-color:var(--bg-3000)}[theme=dark] .maplibregl-ctrl-attrib.maplibregl-compact-show .maplibregl-ctrl-attrib-button{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='%23fff' fill-rule='evenodd' viewBox='0 0 20 20'%3E%3Cpath d='M4 10a6 6 0 1 0 12 0 6 6 0 1 0-12 0m5-3a1 1 0 1 0 2 0 1 1 0 1 0-2 0m0 3a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0'/%3E%3C/svg%3E\")}.maplibregl-ctrl-attrib a{color:var(--text-3000)}}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/components/NotFound/NotFound.scss":(module,exports,__webpack_require__)=>{var ___CSS_LOADER_API_IMPORT___=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js"),___CSS_LOADER_GET_URL_IMPORT___=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/getUrl.js"),___CSS_LOADER_URL_IMPORT_0___=__webpack_require__("./frontend/public/not-found-astrohog.png");exports=___CSS_LOADER_API_IMPORT___(!1);var ___CSS_LOADER_URL_REPLACEMENT_0___=___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);exports.push([module.id,".NotFoundComponent{align-items:center;display:flex;flex-direction:column;margin:6rem auto;max-width:50rem;padding:0 1rem;text-align:center}.NotFoundComponent .NotFoundComponent__graphic{background:url("+___CSS_LOADER_URL_REPLACEMENT_0___+") no-repeat 50%;height:270px;width:100%}.NotebookNode .NotFoundComponent{align-items:center;background-color:var(--danger-highlight);display:flex;flex:1;flex-direction:column;justify-content:center;margin:0;max-width:100%;padding:2rem}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/components/Playlist/Playlist.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".Playlist{align-items:flex-start;border:1px solid var(--border);border-radius:var(--radius);flex-direction:row;justify-content:flex-start}.Playlist,.Playlist .Playlist__list{display:flex;height:100%;overflow:hidden}.Playlist .Playlist__list{flex-direction:column;flex-shrink:0;position:relative}.Playlist .Playlist__list:not(.Playlist__list--collapsed){max-width:320px;min-width:285px;width:25%}.Playlist .Playlist__list .text-link{color:var(--text-3000)!important}.Playlist .Playlist__main{flex:1;height:100%;overflow:hidden;width:100%}.Playlist--embedded{border:none}.Playlist--wide .Playlist__main{flex:1;height:100%}.SessionRecordingPlaylistHeightWrapper{height:calc(100vh - 15rem);min-height:25rem}.SessionRecordingPreview{border-left:3px solid transparent}.SessionRecordingPreview--active{border-left-color:var(--primary-3000)}.SessionRecordingPreview:hover{background-color:var(--primary-highlight)}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/components/PropertiesTable/PropertiesTable.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".properties-table-key{display:flex;max-width:24rem;min-width:8rem}.properties-table-value{align-items:center;display:flex;max-width:-moz-fit-content;max-width:fit-content;min-width:12rem}.properties-table-value .value-link>*{vertical-align:middle}.properties-table-value .value-link>svg{font-size:1rem;margin-left:.25rem}.properties-table-value .editable{border:1px solid transparent;border-radius:calc(var(--radius)*.75);cursor:pointer;margin-left:-.25rem;padding:.125rem .25rem}.properties-table-value .editable:hover{background:var(--bg-light);border:1px solid var(--border-light)}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/components/PropertyFilters/PropertyFilters.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".PropertyFilters{display:flex;gap:.5rem}.PropertyFilters .PropertyFilters__content{display:flex;flex:1;flex-wrap:wrap;gap:.5rem}.PropertyFilters .PropertyFilters__prefix{color:var(--border-bold-3000);font-size:18px;padding:0 5px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.PropertyFilters .logical-row-divider{align-items:flex-start;font-size:12px;font-weight:600;margin-bottom:0;margin-top:.5rem;text-transform:uppercase}.PropertyFilters .logical-row-divider:after,.PropertyFilters .logical-row-divider:before{border-top:1px solid var(--border)}.PropertyFilters .logical-row-divider:before{width:1.5%}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/components/PropertyFilters/components/FilterRow.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".property-filter-row{flex-basis:100%}.property-filter-row.wrap-filters{flex-basis:auto}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/components/PropertyFilters/components/PropertyFilterButton.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".PropertyFilterButton{align-items:center;background:var(--border);border:1px solid var(--secondary-3000-button-border);border-radius:99rem;color:var(--text-3000);cursor:default;display:inline-flex;gap:.375rem;height:2rem;outline:0;overflow:hidden;padding:.25rem .625rem;white-space:nowrap}.PropertyFilterButton[aria-disabled=true]:not(.LemonButton--loading){cursor:not-allowed;opacity:var(--opacity-disabled)}.PropertyFilterButton:focus,.PropertyFilterButton:hover:not([aria-disabled=true]){border-color:var(--secondary-3000-button-border-hover)}.PropertyFilterButton:not(.PropertyFilterButton--clickable){border-color:transparent}.PropertyFilterButton.PropertyFilterButton--clickable{cursor:pointer;touch-action:manipulation}.PropertyFilterButton.PropertyFilterButton--closable{padding-right:.5rem}.PropertyFilterButton>:not(.PropertyFilterButton-content){flex-shrink:0}.PropertyFilterButton .PropertyFilterButton-content{flex:1;overflow:hidden;text-overflow:ellipsis}.PropertyFilterButton>.LemonIcon{font-size:1rem}.PropertyFilterButton .LemonButton{border-radius:99rem;margin:0 -.375rem 0 -.125rem}.PropertyFilterButton .LemonButton__chrome{min-height:auto;padding:.1875rem}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/components/PropertyFilters/components/TaxonomicPropertyFilter.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".TaxonomicPropertyFilter{overflow:hidden;width:100%}.TaxonomicPropertyFilter--in-dropdown{background:var(--bg-light);max-width:100%;min-width:300px;width:900px}.TaxonomicPropertyFilter--in-dropdown .TaxonomicPropertyFilter__row-items>:first-child{width:10rem}.TaxonomicPropertyFilter__row{display:flex;gap:.5rem;overflow:hidden}.TaxonomicPropertyFilter__row-operator{align-items:center;display:flex;flex-shrink:0;height:40px;justify-content:flex-end;width:4.5rem}.TaxonomicPropertyFilter__row--or-filtering .TaxonomicPropertyFilter__row-operator{width:2rem}.TaxonomicPropertyFilter__row-arrow{color:var(--border-bold-3000);font-size:18px;font-weight:700;position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none}.TaxonomicPropertyFilter__row-items{align-items:center;display:flex;flex:1;flex-wrap:wrap;gap:.5rem;overflow:hidden}.TaxonomicPropertyFilter__row-items>*{max-width:100%;overflow:hidden}.TaxonomicPropertyFilter__row--showing-operators .TaxonomicPropertyFilter__row-items>:first-child{flex-grow:1;min-width:10rem;width:30%}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/components/PropertyKeyInfo.scss":(module,exports,__webpack_require__)=>{var ___CSS_LOADER_API_IMPORT___=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js"),___CSS_LOADER_GET_URL_IMPORT___=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/getUrl.js"),___CSS_LOADER_URL_IMPORT_0___=__webpack_require__("./frontend/public/posthog-icon.svg"),___CSS_LOADER_URL_IMPORT_1___=__webpack_require__("./frontend/public/langfuse-icon.svg");exports=___CSS_LOADER_API_IMPORT___(!1);var ___CSS_LOADER_URL_REPLACEMENT_0___=___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___),___CSS_LOADER_URL_REPLACEMENT_1___=___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_1___);exports.push([module.id,".PropertyKeyInfo,.PropertyKeyInfo__header{align-items:center;display:inline-flex;gap:.25rem;max-width:100%;overflow:hidden;vertical-align:bottom}.PropertyKeyInfo__header{font-weight:600}.PropertyKeyInfo__text.PropertyKeyInfo__text--ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.PropertyKeyInfo__logo{background-size:cover;display:inline-block;flex-shrink:0;height:1rem;width:1rem}.PropertyKeyInfo__logo--posthog{background-image:url("+___CSS_LOADER_URL_REPLACEMENT_0___+")}.PropertyKeyInfo__logo--langfuse{background-image:url("+___CSS_LOADER_URL_REPLACEMENT_1___+")}.PropertyKeyInfo__overlay{padding:.25rem}.PropertyKeyInfo__overlay p{margin-bottom:.25rem}.PropertyKeyInfo__overlay p:last-child{margin-bottom:0}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/components/Resizer/Resizer.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,'.Resizer{--resizer-thickness:8px;position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;z-index:var(--z-notifications-popover)}.Resizer--left,.Resizer--right{--scale:scaleX(3);bottom:0;cursor:col-resize;top:0;width:var(--resizer-thickness)}.Resizer--left .Resizer__handle,.Resizer--right .Resizer__handle{bottom:0;left:calc(var(--resizer-thickness)/2);top:0;width:1px}.Resizer--left .Resizer__handle:after,.Resizer--left .Resizer__handle:before,.Resizer--right .Resizer__handle:after,.Resizer--right .Resizer__handle:before{bottom:0;top:0;width:1px}.Resizer--bottom,.Resizer--top{--scale:scaleY(3);cursor:row-resize;height:var(--resizer-thickness);left:0;right:0}.Resizer--bottom .Resizer__handle,.Resizer--top .Resizer__handle{height:1px;left:0;right:0;top:calc(var(--resizer-thickness)/2)}.Resizer--bottom .Resizer__handle:after,.Resizer--bottom .Resizer__handle:before,.Resizer--top .Resizer__handle:after,.Resizer--top .Resizer__handle:before{height:1px;left:0;right:0}.Resizer[aria-hidden=true] .Resizer{cursor:e-resize}.Resizer .Resizer__handle{position:absolute}.Resizer .Resizer__handle:after,.Resizer .Resizer__handle:before{box-sizing:initial;content:"";position:absolute}.Resizer .Resizer__handle:before{background:var(--border);transition:transform .1s ease}.Resizer .Resizer__handle:after{background:var(--text-3000);opacity:0;transition:transform .1s ease}.Resizer--left{left:0;transform:translateX(calc(var(--resizer-thickness)/2*-1))}.Resizer--right{right:0;transform:translateX(calc(var(--resizer-thickness)/2*1))}.Resizer--top{top:0;transform:translateY(calc(var(--resizer-thickness)/2*-1))}.Resizer--bottom{bottom:0;transform:translateY(calc(var(--resizer-thickness)/2*1))}.Resizer--resizing .Resizer__handle:after,.Resizer:hover .Resizer__handle:after{opacity:.25}.Resizer--resizing .Resizer__handle:after,.Resizer--resizing .Resizer__handle:before{transform:var(--scale)}',""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/components/ScrollableShadows/ScrollableShadows.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,'.ScrollableShadows{display:flex;overflow:hidden;position:relative}.ScrollableShadows:after,.ScrollableShadows:before{content:"";height:100%;left:0;opacity:0;pointer-events:none;position:absolute;top:0;transition:opacity .2s ease;width:100%;z-index:1}.ScrollableShadows .ScrollableShadows__inner{flex:1}.ScrollableShadows.ScrollableShadows--horizontal{height:100%}.ScrollableShadows.ScrollableShadows--horizontal .ScrollableShadows__inner{overflow-x:auto}.ScrollableShadows.ScrollableShadows--horizontal:before{box-shadow:inset 16px 0 16px -16px rgba(0,0,0,.25)}.ScrollableShadows.ScrollableShadows--horizontal:after{box-shadow:inset -16px 0 16px -16px rgba(0,0,0,.25)}.ScrollableShadows.ScrollableShadows--vertical{width:100%}.ScrollableShadows.ScrollableShadows--vertical .ScrollableShadows__inner{overflow-y:auto}.ScrollableShadows.ScrollableShadows--vertical:before{box-shadow:inset 0 16px 16px -16px rgba(0,0,0,.25)}.ScrollableShadows.ScrollableShadows--vertical:after{box-shadow:inset 0 -16px 16px -16px rgba(0,0,0,.25)}.ScrollableShadows.ScrollableShadows--bottom:after,.ScrollableShadows.ScrollableShadows--left:before,.ScrollableShadows.ScrollableShadows--right:after,.ScrollableShadows.ScrollableShadows--top:before{opacity:1}',""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/components/Sharing/SharingModal.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".SharingPreview{background-color:var(--bg-3000);padding:.5rem}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/components/TZLabel/index.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".TZLabelPopover .TZLabelPopover__row{display:flex;margin-top:.5rem}.TZLabelPopover .TZLabelPopover__row>:first-child{color:var(--primary-alt);font-weight:700;margin-right:8px}.TZLabelPopover .TZLabelPopover__row>:nth-child(2):not(:empty){color:var(--primary-alt);font-weight:700;margin-right:6px}.TZLabelPopover .TZLabelPopover__row>:nth-child(3){color:var(--muted);flex-grow:1;margin-right:16px}.TZLabelPopover .TZLabelPopover__row>:nth-child(4){min-width:10rem;text-align:right}.TZLabelPopover--seconds .TZLabelPopover .TZLabelPopover__row>:nth-child(4){min-width:12rem}.TZLabelPopover .TZLabelPopover__row--muted,.TZLabelPopover .TZLabelPopover__row--muted>:first-child,.TZLabelPopover .TZLabelPopover__row--muted>:nth-child(2):not(:empty){color:var(--muted)}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/components/TaxonomicFilter/InfiniteList.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".taxonomic-infinite-list{flex-grow:1;min-height:200px}.taxonomic-infinite-list.empty-infinite-list{align-items:center;display:flex;justify-content:center;width:100%}.taxonomic-infinite-list.empty-infinite-list .no-infinite-results{color:#666}.taxonomic-infinite-list .taxonomic-list-row{align-items:center;border:none;color:var(--text-3000);cursor:pointer;display:flex;justify-content:space-between;padding:4px 12px}.taxonomic-infinite-list .taxonomic-list-row .taxonomic-list-row-contents{align-items:center;display:flex;-webkit-user-select:none;-moz-user-select:none;user-select:none}.taxonomic-infinite-list .taxonomic-list-row .taxonomic-list-row-contents .taxonomic-list-row-contents-icon{display:flex;font-size:1.25rem;justify-content:center;margin-left:-4px;margin-right:4px;min-width:30px}.taxonomic-infinite-list .taxonomic-list-row .taxonomic-list-row-contents .taxonomic-list-row-contents-icon svg.taxonomy-icon{flex-shrink:0;vertical-align:middle}.taxonomic-infinite-list .taxonomic-list-row .taxonomic-list-row-contents .taxonomic-list-row-contents-icon svg.taxonomy-icon.taxonomy-icon-muted{color:var(--muted-alt)}.taxonomic-infinite-list .taxonomic-list-row .taxonomic-list-row-contents .taxonomic-list-row-contents-icon svg.taxonomy-icon.taxonomy-icon-verified{color:var(--success)}.taxonomic-infinite-list .taxonomic-list-row .taxonomic-list-row-contents .taxonomic-list-row-contents-icon svg.taxonomy-icon.taxonomy-icon-built-in{color:var(--primary-3000)}.taxonomic-infinite-list .taxonomic-list-row>div{max-width:100%}.taxonomic-infinite-list .taxonomic-list-row>div>span{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.taxonomic-infinite-list .taxonomic-list-row.hover{background-color:var(--bg-3000);border-radius:var(--radius)}.taxonomic-infinite-list .taxonomic-list-row.selected{font-weight:700}.taxonomic-infinite-list .taxonomic-list-row.expand-row{color:var(--primary-3000)}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/components/TaxonomicFilter/TaxonomicFilter.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".taxonomic-filter{background:var(--bg-light);display:flex;flex-direction:column;max-width:calc(100vw - 40px);width:550px}.taxonomic-filter.force-minimum-width{min-width:300px}.taxonomic-filter.one-taxonomic-tab .taxonomic-infinite-list{margin-top:10px}.taxonomic-filter .taxonomic-group-title{align-items:stretch;color:var(--muted);display:flex;font-size:12px;font-weight:600;line-height:12px;padding-left:10px;padding-top:10px;text-transform:uppercase;width:100%}.taxonomic-filter .taxonomic-pills{margin-bottom:8px;margin-top:8px;padding-left:10px}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/components/TimelineSeekbar/TimelineSeekbar.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,'.TimelineSeekbar{--timeline-seekbar-thickness:0.125rem;--timeline-seekbar-arrow-width:0.5rem;--timeline-seekbar-arrow-height:0.75rem;margin:.75rem .5rem}.TimelineSeekbar__meta{display:flex;gap:.5rem;justify-content:space-between}.TimelineSeekbar__note{align-items:center;display:flex;font-size:.8125rem;line-height:1.25rem}.TimelineSeekbar__current{background:var(--primary-3000);border-radius:var(--radius);color:var(--bg-light);font-size:.75rem;font-weight:500;line-height:1.25rem;padding:0 .25rem;width:-moz-fit-content;width:fit-content}.TimelineSeekbar__current::-moz-selection{background:var(--primary-3000-hover)}.TimelineSeekbar__current::selection{background:var(--primary-3000-hover)}.TimelineSeekbar__current .Spinner{margin-right:.25rem}.TimelineSeekbar__seekbar{height:1.25rem;margin-top:.5rem;position:relative}.TimelineSeekbar__points{display:flex;height:100%;left:calc(var(--timeline-seekbar-thickness)*2);position:relative;top:0;width:calc(100% - var(--timeline-seekbar-arrow-width) - var(--timeline-seekbar-thickness)*3 - 1.25rem)}.TimelineSeekbar__points .LemonBadge:not(.LemonBadge--active){background-clip:padding-box;border-right-color:transparent}.TimelineSeekbar__section{border-left:var(--timeline-seekbar-thickness) solid var(--bg-light);cursor:pointer;left:calc(var(--timeline-seekbar-section-progress-current) - var(--timeline-seekbar-thickness));position:absolute;width:var(--timeline-seekbar-section-progress-next)}.TimelineSeekbar__section:last-child{width:calc(var(--timeline-seekbar-section-progress-next) + 1.25rem)}.TimelineSeekbar__line{background:var(--primary-3000);height:var(--timeline-seekbar-thickness);left:0;position:absolute;top:calc(50% - var(--timeline-seekbar-thickness)/2);width:calc(100% - var(--timeline-seekbar-arrow-width))}.TimelineSeekbar__line-end,.TimelineSeekbar__line-start{height:1.25rem;position:absolute;top:calc(var(--timeline-seekbar-thickness)/2 - .625rem)}.TimelineSeekbar__line-end:before,.TimelineSeekbar__line-start:before{background:var(--primary-3000);content:"";display:block;height:var(--timeline-seekbar-arrow-height);margin:calc(var(--timeline-seekbar-thickness) + .125rem) 0}.TimelineSeekbar__line-start{left:0;width:var(--timeline-seekbar-thickness)}.TimelineSeekbar__line-end{cursor:pointer;left:100%;width:var(--timeline-seekbar-arrow-width)}.TimelineSeekbar__line-end:before{-webkit-clip-path:polygon(0 0,100% 50%,0 100%);clip-path:polygon(0 0,100% 50%,0 100%)}',""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/components/UniversalFilters/UniversalFilterButton.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".UniversalFilterButton{align-items:center;background:var(--border);border:1px solid var(--secondary-3000-button-border);border-radius:99rem;color:var(--text-3000);cursor:default;display:inline-flex;gap:.375rem;height:2rem;outline:0;overflow:hidden;padding:.25rem .625rem;white-space:nowrap}.UniversalFilterButton[aria-disabled=true]:not(.LemonButton--loading){cursor:not-allowed;opacity:var(--opacity-disabled)}.UniversalFilterButton:focus,.UniversalFilterButton:hover:not([aria-disabled=true]){border-color:var(--secondary-3000-button-border-hover)}.UniversalFilterButton:not(.UniversalFilterButton--clickable){border-color:transparent}.UniversalFilterButton.UniversalFilterButton--clickable{cursor:pointer;touch-action:manipulation}.UniversalFilterButton.UniversalFilterButton--closable{padding-right:.5rem}.UniversalFilterButton>:not(.UniversalFilterButton-content){flex-shrink:0}.UniversalFilterButton .UniversalFilterButton-content{flex:1;overflow:hidden;text-overflow:ellipsis}.UniversalFilterButton>.LemonIcon{font-size:1rem}.UniversalFilterButton .LemonButton{border-radius:99rem;margin:0 -.375rem 0 -.125rem}.UniversalFilterButton .LemonButton__chrome{min-height:auto;padding:.1875rem}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/components/UserActivityIndicator/UserActivityIndicator.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".UserActivityIndicator{align-items:center;display:flex;font-size:.8125rem;overflow-x:auto;white-space:nowrap}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/lemon-ui/LemonActionableTooltip/LemonActionableTooltip.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".LemonActionableTooltip{max-width:var(--in-app-prompts-width);padding:.5rem}.LemonActionableTooltip>*+*{margin-top:.5rem}.LemonActionableTooltip .LemonActionableTooltip__header{display:flex;justify-content:space-between}.LemonActionableTooltip .LemonActionableTooltip__header>*+*{margin-left:.5rem}.LemonActionableTooltip .LemonActionableTooltip__title{font-size:1.125rem;font-weight:500;line-height:1.75rem}.LemonActionableTooltip .LemonActionableTooltip__icon{align-items:center;color:var(--primary-3000);display:flex;height:1.5rem;width:1.5rem}.LemonActionableTooltip .LemonActionableTooltip__icon>svg{height:100%;width:100%}.LemonActionableTooltip .LemonActionableTooltip__body>*+*{margin-top:.5rem}.LemonActionableTooltip .LemonActionableTooltip__footer{display:flex;justify-content:space-between;margin-top:1rem}.LemonActionableTooltip .LemonActionableTooltip__url-buttons{display:flex;flex-direction:column;width:100%}.LemonActionableTooltip .LemonActionableTooltip__url-buttons>*+*{margin-top:.25rem}.LemonActionableTooltip .LemonActionableTooltip__action-buttons{display:flex;flex-direction:column;width:100%}.LemonActionableTooltip .LemonActionableTooltip__action-buttons>*+*{margin-top:.25rem}.LemonActionableTooltip .LemonActionableTooltip__navigation{align-items:center;color:var(--muted);display:flex}.LemonActionableTooltip .LemonActionableTooltip__navigation>*+*{margin-left:.25rem}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/lemon-ui/LemonBadge/LemonBadge.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".LemonBadge{--lemon-badge-color:var(--primary-3000);--lemon-badge-size:1.5rem;--lemon-badge-font-size:0.75rem;--lemon-badge-position-offset:0.5rem;--lemon-badge-border-width:0.125rem;align-items:center;background:var(--lemon-badge-color);border:var(--lemon-badge-border-width) solid var(--accent-3000);border-radius:calc(var(--lemon-badge-size)/2);color:var(--bg-light);display:flex;flex-shrink:0;font-size:var(--lemon-badge-font-size);font-weight:700;height:var(--lemon-badge-size);justify-content:center;line-height:var(--lemon-badge-size);min-width:var(--lemon-badge-size);padding:calc(var(--lemon-badge-size)/8);pointer-events:none;position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:-moz-fit-content;width:fit-content;z-index:1}.LemonBadge>*{height:calc(var(--lemon-badge-size) - var(--lemon-badge-border-width)*2);margin:calc(var(--lemon-badge-size)*-1/8);width:calc(var(--lemon-badge-size) - var(--lemon-badge-border-width)*2)}.LemonBadge.LemonBadge--success{--lemon-badge-color:var(--success)}.LemonBadge.LemonBadge--warning{--lemon-badge-color:var(--warning)}.LemonBadge.LemonBadge--danger{--lemon-badge-color:var(--danger)}.LemonBadge.LemonBadge--muted{--lemon-badge-color:var(--muted)}.LemonBadge.LemonBadge--data{--lemon-badge-color:var(--data-color-1)}.LemonBadge.LemonBadge--position-none{position:relative}.LemonBadge.LemonBadge--position-top-left{left:calc(var(--lemon-badge-position-offset)*-1);top:calc(var(--lemon-badge-position-offset)*-1)}.LemonBadge.LemonBadge--position-top-right{right:calc(var(--lemon-badge-position-offset)*-1);top:calc(var(--lemon-badge-position-offset)*-1)}.LemonBadge.LemonBadge--position-bottom-left{bottom:calc(var(--lemon-badge-position-offset)*-1);left:calc(var(--lemon-badge-position-offset)*-1)}.LemonBadge.LemonBadge--position-bottom-right{bottom:calc(var(--lemon-badge-position-offset)*-1);right:calc(var(--lemon-badge-position-offset)*-1)}.LemonBadge.LemonBadge--small{--lemon-badge-size:1.125rem;--lemon-badge-font-size:0.625rem}.LemonBadge.LemonBadge--large{--lemon-badge-size:1.75rem;--lemon-badge-font-size:0.875rem}.LemonBadge.LemonBadge--dot{height:calc(var(--lemon-badge-size)*.5 + var(--lemon-badge-border-width));min-width:0;width:calc(var(--lemon-badge-size)*.5 + var(--lemon-badge-border-width))}.LemonBadge.LemonBadge--active{outline:calc(var(--lemon-badge-font-size)/5) solid var(--lemon-badge-color);z-index:var(--z-raised)}.LemonBadge.LemonBadge--enter{opacity:0;transform:scale(.5)}.LemonBadge.LemonBadge--enter-active{opacity:1;transform:scale(1);transition:all .2s ease-out}.LemonBadge.LemonBadge--exit{opacity:1;transform:scale(1)}.LemonBadge.LemonBadge--exit-active{opacity:0;transform:scale(.5);transition:all .2s ease-in}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/lemon-ui/LemonBanner/LemonBanner.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".LemonBanner{border:1px solid var(--border-3000);border-radius:var(--radius);color:var(--primary-alt);display:flex;flex-direction:column;font-weight:500;gap:.5rem;min-height:3rem;padding:.5rem;text-align:left}.LemonBanner.LemonBanner--info{background-color:var(--primary-alt-highlight)}.LemonBanner.LemonBanner--warning{background-color:var(--warning-highlight);color:var(--warning-dark)}.LemonBanner.LemonBanner--error{background-color:var(--danger-highlight);color:var(--danger)}.LemonBanner.LemonBanner--success{background-color:var(--success-highlight);color:var(--success)}.LemonBanner .LemonBanner__icon{flex-shrink:0;font-size:1.5rem;line-height:0}.LemonBanner p{margin-bottom:.25em}.LemonBanner p:last-child{margin-bottom:0}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/lemon-ui/LemonButton/LemonButton.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,'.LemonButton,.Link.LemonButton{--lemon-button-hover-depth:-0.03125rem;--lemon-button-press-depth:0.03125rem;--lemon-button-padding-adjacent-icon:0.375rem;--lemon-button-transition:opacity 200ms ease,transform 200ms ease;--lemon-button-border-width:0;--lemon-button-bg-color:transparent;--button-border-color:none;--lemon-button-border-color-hover:none;--lemon-button-frame-bg-color:none;--lemon-button-font-size:0.875rem;--lemon-button-icon-size:1.5rem;--lemon-button-height:2.3125rem;--lemon-button-gap:0.5rem;--lemon-button-icon-opacity:0.8;--lemon-button-color:var(--text-3000);align-items:center;-webkit-appearance:none!important;-moz-appearance:none!important;appearance:none!important;background:none;border-radius:var(--radius);cursor:pointer;display:flex;flex-shrink:0;font-family:var(--font-title);outline:none;padding:0;position:relative;transition:var(--lemon-button-transition);-webkit-user-select:none;-moz-user-select:none;user-select:none;--lemon-button-chrome-depth:0.1875rem;--lemon-button-padding-horizontal:0.75rem;--lemon-button-side-action-width:2rem}.LemonButton .font-normal,.LemonButton.font-normal,.Link.LemonButton .font-normal,.Link.LemonButton.font-normal{font-family:var(--font-sans)}.LemonButton .LemonButton__chrome,.Link.LemonButton .LemonButton__chrome{align-items:center;background:none;border-color:transparent;border-style:solid;border-width:var(--lemon-button-border-width);color:var(--lemon-button-color);display:flex;flex:1;flex-direction:row;flex-shrink:0;font-size:var(--lemon-button-font-size);font-weight:500;gap:var(--lemon-button-gap);height:100%;justify-content:flex-start;line-height:1.5rem;min-height:var(--lemon-button-height);padding:.25rem var(--lemon-button-padding-horizontal);position:relative;text-align:left;width:100%}.LemonButton .LemonButton__chrome .LemonButton__content,.Link.LemonButton .LemonButton__chrome .LemonButton__content{align-items:center;display:flex;flex:1;line-height:normal;overflow:hidden}.LemonButton .LemonButton__chrome .LemonButton__icon,.Link.LemonButton .LemonButton__chrome .LemonButton__icon{display:flex;flex-shrink:0;font-size:var(--lemon-button-icon-size);place-items:center center;transition:color .2s ease}.LemonButton .LemonButton__chrome .LemonButton__icon .LemonIcon,.Link.LemonButton .LemonButton__chrome .LemonButton__icon .LemonIcon{opacity:var(--lemon-button-icon-opacity)}.LemonButton[aria-disabled=true]:not(.LemonButton--loading),.Link.LemonButton[aria-disabled=true]:not(.LemonButton--loading){cursor:not-allowed;opacity:var(--opacity-disabled)}.LemonButton.LemonButton--active,.LemonButton:hover:not([aria-disabled=true]),.LemonButton:not([aria-disabled=true]):active,.Link.LemonButton.LemonButton--active,.Link.LemonButton:hover:not([aria-disabled=true]),.Link.LemonButton:not([aria-disabled=true]):active{--lemon-button-icon-opacity:0.75}.LemonButton.LemonButton--full-width,.Link.LemonButton.LemonButton--full-width{--lemon-button-padding-horizontal:0.5rem;width:100%}.LemonButton.LemonButton--loading,.Link.LemonButton.LemonButton--loading{cursor:default}.LemonButton.LemonButton--no-padding,.Link.LemonButton.LemonButton--no-padding{height:auto;min-height:0;padding:0;width:auto}.LemonButton.LemonButton--no-padding .LemonButton__chrome,.Link.LemonButton.LemonButton--no-padding .LemonButton__chrome{min-height:0;padding:0}.LemonButton.LemonButton--no-padding.LemonButton--full-width,.Link.LemonButton.LemonButton--no-padding.LemonButton--full-width{width:100%}.LemonButton.LemonButton--truncate,.Link.LemonButton.LemonButton--truncate{flex-shrink:1;min-width:0;white-space:nowrap}.LemonButton.LemonButton--truncate .LemonButton__content,.Link.LemonButton.LemonButton--truncate .LemonButton__content{display:initial;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.LemonButton.LemonButton--centered .LemonButton__chrome,.Link.LemonButton.LemonButton--centered .LemonButton__chrome{justify-content:center!important}.LemonButton.LemonButton--centered .LemonButton__content,.Link.LemonButton.LemonButton--centered .LemonButton__content{flex:initial!important;text-align:center!important}.LemonButton.LemonButton--primary,.Link.LemonButton.LemonButton--primary{--lemon-button-bg-color:var(--primary-3000-button-bg);--lemon-button-bg-color-active:var(--primary-3000-button-bg);--button-border-color:var(--primary-3000-button-border);--lemon-button-border-color-hover:var(--primary-3000-button-border-hover);--lemon-button-frame-bg-color:var(--primary-3000-frame-bg);--lemon-button-color:var(--text-3000-light)}.LemonButton.LemonButton--primary.LemonButton--status-alt,.Link.LemonButton.LemonButton--primary.LemonButton--status-alt{--lemon-button-bg-color:var(--primary-3000-frame-bg-light);--lemon-button-bg-color-active:var(--lemon-button-bg-color);--button-border-color:var(--primary-3000-button-border);--lemon-button-border-color-hover:var(--primary-3000-button-border-hover);--lemon-button-frame-bg-color:var(--primary-3000-button-bg-dark);--lemon-button-color:var(--text-3000-light)}.LemonButton.LemonButton--secondary.LemonButton--status-alt.LemonButton--active,.LemonButton.LemonButton--secondary.LemonButton--status-alt:hover,.LemonButton.LemonButton--secondary:not(.LemonButton--status-alt):not(.LemonButton--status-danger),.Link.LemonButton.LemonButton--secondary.LemonButton--status-alt.LemonButton--active,.Link.LemonButton.LemonButton--secondary.LemonButton--status-alt:hover,.Link.LemonButton.LemonButton--secondary:not(.LemonButton--status-alt):not(.LemonButton--status-danger){--button-border-color:var(--secondary-3000-button-border);--lemon-button-bg-color-active:var(--bg-light);--lemon-button-border-color-hover:var(--secondary-3000-button-border-hover);--lemon-button-frame-bg-color:var(--secondary-3000-frame-bg)}.LemonButton.LemonButton--primary.LemonButton--status-danger,.LemonButton.LemonButton--secondary.LemonButton--status-danger,.LemonButton.LemonButton--status-danger,.Link.LemonButton.LemonButton--primary.LemonButton--status-danger,.Link.LemonButton.LemonButton--secondary.LemonButton--status-danger,.Link.LemonButton.LemonButton--status-danger{--lemon-button-color:var(--danger-3000-button-border-hover);--button-border-color:var(--danger-3000-button-border);--lemon-button-border-color-hover:var(--danger-3000-button-border-hover);--lemon-button-frame-bg-color:var(--danger-3000-frame-bg);--lemon-button-icon-opacity:1}.LemonButton.LemonButton--secondary.LemonButton--status-alt,.Link.LemonButton.LemonButton--secondary.LemonButton--status-alt{--lemon-button-color:var(--muted)}.LemonButton.LemonButton--secondary.LemonButton--status-alt.LemonButton--active,.LemonButton.LemonButton--secondary.LemonButton--status-alt:hover:not([aria-disabled=true]),.Link.LemonButton.LemonButton--secondary.LemonButton--status-alt.LemonButton--active,.Link.LemonButton.LemonButton--secondary.LemonButton--status-alt:hover:not([aria-disabled=true]){--lemon-button-color:var(--text-3000)}.LemonButton.LemonButton--primary,.LemonButton.LemonButton--secondary,.Link.LemonButton.LemonButton--primary,.Link.LemonButton.LemonButton--secondary{--lemon-button-border-width:1px}.LemonButton.LemonButton--primary:not([aria-disabled=true]):hover .LemonButton__chrome:after,.LemonButton.LemonButton--secondary:not([aria-disabled=true]):hover .LemonButton__chrome:after,.Link.LemonButton.LemonButton--primary:not([aria-disabled=true]):hover .LemonButton__chrome:after,.Link.LemonButton.LemonButton--secondary:not([aria-disabled=true]):hover .LemonButton__chrome:after{border-color:var(--lemon-button-border-color-hover)}.LemonButton.LemonButton--primary.LemonButton--has-icon:not(.LemonButton--no-content):not(.LemonButton--no-padding),.LemonButton.LemonButton--secondary.LemonButton--has-icon:not(.LemonButton--no-content):not(.LemonButton--no-padding),.Link.LemonButton.LemonButton--primary.LemonButton--has-icon:not(.LemonButton--no-content):not(.LemonButton--no-padding),.Link.LemonButton.LemonButton--secondary.LemonButton--has-icon:not(.LemonButton--no-content):not(.LemonButton--no-padding){--lemon-button-padding-left:var(--lemon-button-padding-adjacent-icon)}.LemonButton.LemonButton--primary.LemonButton--has-side-icon:not(.LemonButton--no-content):not(.LemonButton--no-padding),.LemonButton.LemonButton--secondary.LemonButton--has-side-icon:not(.LemonButton--no-content):not(.LemonButton--no-padding),.Link.LemonButton.LemonButton--primary.LemonButton--has-side-icon:not(.LemonButton--no-content):not(.LemonButton--no-padding),.Link.LemonButton.LemonButton--secondary.LemonButton--has-side-icon:not(.LemonButton--no-content):not(.LemonButton--no-padding){--lemon-button-padding-right:var(--lemon-button-padding-adjacent-icon)}.LemonButton.LemonButton--primary .LemonButton__chrome,.LemonButton.LemonButton--secondary .LemonButton__chrome,.Link.LemonButton.LemonButton--primary .LemonButton__chrome,.Link.LemonButton.LemonButton--secondary .LemonButton__chrome{background:transparent;padding:calc(.25rem - var(--lemon-button-chrome-depth)*.5) var(--lemon-button-padding-right,var(--lemon-button-padding-horizontal)) calc(.25rem + var(--lemon-button-chrome-depth)*.5) var(--lemon-button-padding-left,var(--lemon-button-padding-horizontal))}.LemonButton.LemonButton--primary .LemonButton__chrome>*,.LemonButton.LemonButton--secondary .LemonButton__chrome>*,.Link.LemonButton.LemonButton--primary .LemonButton__chrome>*,.Link.LemonButton.LemonButton--secondary .LemonButton__chrome>*{z-index:1}.LemonButton.LemonButton--primary .LemonButton__chrome:before,.LemonButton.LemonButton--secondary .LemonButton__chrome:before,.Link.LemonButton.LemonButton--primary .LemonButton__chrome:before,.Link.LemonButton.LemonButton--secondary .LemonButton__chrome:before{border:1px solid var(--button-border-color);border-radius:var(--radius);content:"";inset:-1px;position:absolute;z-index:0}.LemonButton.LemonButton--primary .LemonButton__chrome:after,.LemonButton.LemonButton--secondary .LemonButton__chrome:after,.Link.LemonButton.LemonButton--primary .LemonButton__chrome:after,.Link.LemonButton.LemonButton--secondary .LemonButton__chrome:after{background:var(--lemon-button-bg-color);border:1px solid var(--button-border-color);border-radius:var(--radius);box-shadow:0 var(--lemon-button-chrome-depth) 0 -1px var(--lemon-button-frame-bg-color);content:"";inset:-1px -1px calc(var(--lemon-button-chrome-depth) - 1px) -1px;position:absolute;transition:opacity .2s ease;z-index:0}.LemonButton.LemonButton--primary.LemonButton--active .LemonButton__chrome:after,.LemonButton.LemonButton--primary:not([aria-disabled=true]):active .LemonButton__chrome:after,.LemonButton.LemonButton--secondary.LemonButton--active .LemonButton__chrome:after,.LemonButton.LemonButton--secondary:not([aria-disabled=true]):active .LemonButton__chrome:after,.Link.LemonButton.LemonButton--primary.LemonButton--active .LemonButton__chrome:after,.Link.LemonButton.LemonButton--primary:not([aria-disabled=true]):active .LemonButton__chrome:after,.Link.LemonButton.LemonButton--secondary.LemonButton--active .LemonButton__chrome:after,.Link.LemonButton.LemonButton--secondary:not([aria-disabled=true]):active .LemonButton__chrome:after{border:1px solid var(--lemon-button-border-color-hover)}.LemonButton.LemonButton--primary:hover:not([aria-disabled=true]),.LemonButton.LemonButton--secondary:hover:not([aria-disabled=true]),.Link.LemonButton.LemonButton--primary:hover:not([aria-disabled=true]),.Link.LemonButton.LemonButton--secondary:hover:not([aria-disabled=true]){--lemon-button-depth:var(--lemon-button-hover-depth)}.LemonButton.LemonButton--primary:not([aria-disabled=true]):active,.LemonButton.LemonButton--secondary:not([aria-disabled=true]):active,.Link.LemonButton.LemonButton--primary:not([aria-disabled=true]):active,.Link.LemonButton.LemonButton--secondary:not([aria-disabled=true]):active{--lemon-button-depth:var(--lemon-button-press-depth)}.LemonButton.LemonButton--primary:hover:not([aria-disabled=true]) .LemonButton__chrome,.LemonButton.LemonButton--primary:not([aria-disabled=true]):active .LemonButton__chrome,.LemonButton.LemonButton--secondary:hover:not([aria-disabled=true]) .LemonButton__chrome,.LemonButton.LemonButton--secondary:not([aria-disabled=true]):active .LemonButton__chrome,.Link.LemonButton.LemonButton--primary:hover:not([aria-disabled=true]) .LemonButton__chrome,.Link.LemonButton.LemonButton--primary:not([aria-disabled=true]):active .LemonButton__chrome,.Link.LemonButton.LemonButton--secondary:hover:not([aria-disabled=true]) .LemonButton__chrome,.Link.LemonButton.LemonButton--secondary:not([aria-disabled=true]):active .LemonButton__chrome{transform:translateY(var(--lemon-button-depth))}.LemonButton.LemonButton--primary:hover:not([aria-disabled=true]) .LemonButton__chrome:after,.LemonButton.LemonButton--primary:not([aria-disabled=true]):active .LemonButton__chrome:after,.LemonButton.LemonButton--secondary:hover:not([aria-disabled=true]) .LemonButton__chrome:after,.LemonButton.LemonButton--secondary:not([aria-disabled=true]):active .LemonButton__chrome:after,.Link.LemonButton.LemonButton--primary:hover:not([aria-disabled=true]) .LemonButton__chrome:after,.Link.LemonButton.LemonButton--primary:not([aria-disabled=true]):active .LemonButton__chrome:after,.Link.LemonButton.LemonButton--secondary:hover:not([aria-disabled=true]) .LemonButton__chrome:after,.Link.LemonButton.LemonButton--secondary:not([aria-disabled=true]):active .LemonButton__chrome:after{box-shadow:0 calc(var(--lemon-button-chrome-depth) - var(--lemon-button-depth)) 0 -1px var(--lemon-button-frame-bg-color)}.LemonButton.LemonButton--primary:hover:not([aria-disabled=true]) .LemonButton__chrome:before,.LemonButton.LemonButton--primary:not([aria-disabled=true]):active .LemonButton__chrome:before,.LemonButton.LemonButton--secondary:hover:not([aria-disabled=true]) .LemonButton__chrome:before,.LemonButton.LemonButton--secondary:not([aria-disabled=true]):active .LemonButton__chrome:before,.Link.LemonButton.LemonButton--primary:hover:not([aria-disabled=true]) .LemonButton__chrome:before,.Link.LemonButton.LemonButton--primary:not([aria-disabled=true]):active .LemonButton__chrome:before,.Link.LemonButton.LemonButton--secondary:hover:not([aria-disabled=true]) .LemonButton__chrome:before,.Link.LemonButton.LemonButton--secondary:not([aria-disabled=true]):active .LemonButton__chrome:before{bottom:calc(var(--lemon-button-depth) - 1px)}.LemonButton.LemonButton--primary.LemonButton--active .LemonButton__chrome:after,.LemonButton.LemonButton--secondary.LemonButton--active .LemonButton__chrome:after,.Link.LemonButton.LemonButton--primary.LemonButton--active .LemonButton__chrome:after,.Link.LemonButton.LemonButton--secondary.LemonButton--active .LemonButton__chrome:after{background:var(--lemon-button-bg-color-active)}.LemonButton.LemonButton--tertiary.LemonButton--active,.LemonButton.LemonButton--tertiary:not([aria-disabled=true]):hover,.Link.LemonButton.LemonButton--tertiary.LemonButton--active,.Link.LemonButton.LemonButton--tertiary:not([aria-disabled=true]):hover{background-color:var(--glass-border-3000)}.LemonButton.LemonButton--tertiary.LemonButton--status-danger.LemonButton--active,.LemonButton.LemonButton--tertiary.LemonButton--status-danger:not([aria-disabled=true]):hover,.Link.LemonButton.LemonButton--tertiary.LemonButton--status-danger.LemonButton--active,.Link.LemonButton.LemonButton--tertiary.LemonButton--status-danger:not([aria-disabled=true]):hover{background-color:var(--danger-highlight)}.LemonButton--xsmall,.Link.LemonButton--xsmall{--lemon-button-padding-horizontal:0.375rem;--lemon-button-padding-adjacent-icon:0.25rem;--lemon-button-font-size:0.75rem;--lemon-button-icon-size:0.875rem;--lemon-button-height:1.625rem;--lemon-button-gap:0.25rem;--lemon-button-side-action-width:1.5rem}.LemonButton--small,.Link.LemonButton--small{--lemon-button-padding-horizontal:0.5rem;--lemon-button-height:2.0625rem;--lemon-button-gap:0.25rem;--lemon-button-side-action-width:1.75rem;--lemon-button-icon-size:1.25rem}.LemonButton--large,.Link.LemonButton--large{--lemon-button-font-size:1rem;--lemon-button-icon-size:1.75rem;--lemon-button-padding-adjacent-icon:0.75rem;--lemon-button-height:3.0625rem;--lemon-button-gap:0.75rem}.LemonButtonWithSideAction{position:relative;width:-moz-fit-content;width:fit-content;--lemon-button-chrome-depth:0.1875rem;--lemon-button-padding-horizontal:0.75rem;--lemon-button-side-action-width:2rem}.LemonButtonWithSideAction--full-width{width:100%}.LemonButtonWithSideAction--tertiary .LemonButtonWithSideAction__side-button{--lemon-button-chrome-depth:0px}.LemonButtonWithSideAction:hover>.LemonButton--secondary.LemonButton--status-alt{--button-border-color:var(--secondary-3000-button-border);--lemon-button-bg-color-active:var(--bg-light);--lemon-button-border-color-hover:var(--secondary-3000-button-border-hover);--lemon-button-frame-bg-color:var(--secondary-3000-frame-bg)}.LemonButtonWithSideAction .LemonButtonWithSideAction__spacer{box-sizing:initial;color:var(--muted);height:calc(var(--lemon-button-height) - 1.0625rem);width:calc(var(--lemon-button-side-action-width) - var(--lemon-button-padding-right, var(--lemon-button-padding-horizontal)))}.LemonButtonWithSideAction .LemonButtonWithSideAction__spacer--divider{border-left:1px solid;margin-left:calc(var(--lemon-button-padding-horizontal)/2);padding:0}.LemonButtonWithSideAction .LemonButtonWithSideAction__side-button{background:none;border-bottom-right-radius:calc(var(--radius) - 1px);border-top-right-radius:calc(var(--radius) - 1px);bottom:calc(var(--lemon-button-chrome-depth) + 1px);position:absolute;right:1px;top:1px;transform:none;z-index:1}.LemonButtonWithSideAction .LemonButtonWithSideAction__side-button .LemonButton{--lemon-button-depth:0px;border-bottom-left-radius:0;border-top-left-radius:0;height:100%;width:var(--lemon-button-side-action-width)}.LemonButtonWithSideAction .LemonButtonWithSideAction__side-button .LemonButton__chrome{border:none!important;justify-content:center!important;padding:0!important}.LemonButtonWithSideAction .LemonButtonWithSideAction__side-button .LemonButton__chrome:after,.LemonButtonWithSideAction .LemonButtonWithSideAction__side-button .LemonButton__chrome:before{content:none!important}.LemonButtonWithSideAction .LemonButtonWithSideAction__side-button:not([aria-disabled=true]):active .LemonButton__chrome{transform:none!important}.LemonButtonWithSideAction .LemonButtonWithSideAction__side-button .LemonButton__icon{color:currentColor}.LemonButtonWithSideAction .LemonButtonWithSideAction__side-button:not([aria-disabled=true]):hover{background:rgba(0,0,0,.1)}.LemonButtonWithSideAction--xsmall{--lemon-button-padding-horizontal:0.375rem;--lemon-button-padding-adjacent-icon:0.25rem;--lemon-button-font-size:0.75rem;--lemon-button-icon-size:0.875rem;--lemon-button-height:1.625rem;--lemon-button-gap:0.25rem;--lemon-button-side-action-width:1.5rem}.LemonButtonWithSideAction--small{--lemon-button-padding-horizontal:0.5rem;--lemon-button-height:2.0625rem;--lemon-button-gap:0.25rem;--lemon-button-side-action-width:1.75rem;--lemon-button-icon-size:1.25rem}.LemonButtonWithSideAction--large{--lemon-button-font-size:1rem;--lemon-button-icon-size:1.75rem;--lemon-button-padding-adjacent-icon:0.75rem;--lemon-button-height:3.0625rem;--lemon-button-gap:0.75rem}',""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/lemon-ui/LemonCalendar/LemonCalendar.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,'.LemonCalendar{--lemon-calendar-row-gap:2px;--lemon-calendar-day-width:40px;--lemon-calendar-today-radius:2px;--lemon-calendar-time-column-width:50px;--lemon-calendar-time-button-height:2.3125rem}.LemonCalendar .LemonCalendar__month{width:100%}.LemonCalendar .LemonCalendar__month>tbody>tr>td,.LemonCalendar .LemonCalendar__month>thead>tr:first-child>th{padding:calc(var(--lemon-calendar-row-gap)/2) 0}.LemonCalendar .LemonCalendar__month>tbody>tr>td,.LemonCalendar .LemonCalendar__month>thead>tr:first-child>th:first-child,.LemonCalendar .LemonCalendar__month>thead>tr:first-child>th:last-child{width:var(--lemon-calendar-day-width)}.LemonCalendar .LemonCalendar__month tr .LemonButton.rounded-none{border-radius:0}.LemonCalendar .LemonCalendar__month tr .LemonButton.rounded-r-none{border-bottom-right-radius:0;border-top-right-radius:0}.LemonCalendar .LemonCalendar__month tr .LemonButton.rounded-l-none{border-bottom-left-radius:0;border-top-left-radius:0}.LemonCalendar .LemonCalendar__month tr .LemonCalendar__today{position:relative}.LemonCalendar .LemonCalendar__month tr .LemonCalendar__today:after{background:currentColor;border-radius:100%;bottom:5px;content:"";height:calc(var(--lemon-calendar-today-radius)*2);left:calc(50% - var(--lemon-calendar-today-radius));position:absolute;width:calc(var(--lemon-calendar-today-radius)*2)}.LemonCalendar .LemonCalendar__range--boundary{background-color:var(--glass-border-3000)}.LemonCalendar--hour{--lemon-calendar-time-columns:2}.LemonCalendar--minute{--lemon-calendar-time-columns:3}.LemonCalendar--hour,.LemonCalendar--minute{padding-right:calc(var(--lemon-calendar-time-columns)*var(--lemon-calendar-time-column-width) + 2px)}.LemonCalendar--hour .LemonCalendar__time>div,.LemonCalendar--minute .LemonCalendar__time>div{width:var(--lemon-calendar-time-column-width)}.LemonCalendar--hour .LemonCalendar__time>div.ScrollableShadows .ScrollableShadows__inner,.LemonCalendar--minute .LemonCalendar__time>div.ScrollableShadows .ScrollableShadows__inner{scroll-behavior:smooth;scrollbar-width:none}.LemonCalendar--hour .LemonCalendar__time--scroll-spacer,.LemonCalendar--minute .LemonCalendar__time--scroll-spacer{height:calc(100% - var(--lemon-calendar-time-button-height))}',""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/lemon-ui/LemonCard/LemonCard.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".LemonCard{transition:.2s ease}.LemonCard.LemonCard--hoverEffect:hover{box-shadow:var(--shadow-elevation-3000);transform:scale(1.01)}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/lemon-ui/LemonCheckbox/LemonCheckbox.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".LemonCheckbox{--lemon-checkbox-height:calc(2.125rem + 3px);align-items:center;display:flex;font-weight:500;line-height:1.5rem;width:-moz-fit-content;width:fit-content}.LemonCheckbox .LemonCheckbox__input{-webkit-appearance:none!important;-moz-appearance:none!important;appearance:none!important;height:0!important;width:0!important}.LemonCheckbox label{--tick-length:12.73;--box-color:var(--primary-3000);align-items:center;cursor:pointer;display:flex;gap:.5rem;min-height:1.5rem}.LemonCheckbox label>.LemonCheckbox__box{background:var(--bg-light);border:1.5px solid var(--border-bold);border-radius:.25rem;flex-shrink:0;height:1rem;transition:border .2s ease,background .2s ease;width:1rem}.LemonCheckbox label>.LemonCheckbox__box path{stroke:var(--bg-light);stroke-dasharray:var(--tick-length);stroke-dashoffset:var(--tick-length);transition:stroke-dashoffset .2s ease}.LemonCheckbox.LemonCheckbox--disabled label{color:var(--muted);cursor:not-allowed}.LemonCheckbox.LemonCheckbox--full-width,.LemonCheckbox.LemonCheckbox--full-width label{width:100%}.LemonCheckbox.LemonCheckbox--indeterminate label{--tick-length:9}.LemonCheckbox.LemonCheckbox:not(.LemonCheckbox--disabled):active label,.LemonCheckbox.LemonCheckbox:not(.LemonCheckbox--disabled):hover label{--box-color:var(--primary-3000-hover)}.LemonCheckbox.LemonCheckbox:not(.LemonCheckbox--disabled):active label .LemonCheckbox__box,.LemonCheckbox.LemonCheckbox:not(.LemonCheckbox--disabled):hover label .LemonCheckbox__box{border-color:var(--box-color)}.LemonCheckbox.LemonCheckbox:not(.LemonCheckbox--disabled):active label{--box-color:var(--primary-3000-active)}.LemonCheckbox.LemonCheckbox--checked label .LemonCheckbox__box{background:var(--box-color);border-color:transparent}.LemonCheckbox.LemonCheckbox--checked label .LemonCheckbox__box path{stroke-dashoffset:0}.LemonCheckbox.LemonCheckbox--bordered{line-height:1.4}.LemonCheckbox.LemonCheckbox--bordered label{background:var(--bg-light);border:1px solid var(--border);border-radius:var(--radius);min-height:var(--lemon-checkbox-height);padding:0 .75rem}.LemonCheckbox.LemonCheckbox--bordered.LemonCheckbox--small label{min-height:2rem;padding:0 .5rem}.Field--error .LemonCheckbox.LemonCheckbox--bordered label{border:1px solid var(--danger)}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/lemon-ui/LemonCollapse/LemonCollapse.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".LemonCollapse{align-items:stretch;border:1px solid var(--border);border-radius:var(--radius);display:flex;flex-direction:column;overflow:hidden}.LemonCollapse--embedded{border:none;border-radius:0}.LemonCollapsePanel{align-items:stretch;display:flex;flex-direction:column}.LemonCollapsePanel:not(:last-child){border-bottom-width:1px}.LemonCollapsePanel__header{background:var(--bg-light);border-radius:0!important;font-weight:500!important;min-height:2.875rem!important;padding:.5rem .75rem!important}.LemonCollapsePanel__header.LemonButton:active{transform:inherit}.LemonCollapsePanel__body{border-top-width:1px;box-sizing:initial;height:0;overflow:hidden;transition:height .2s ease}.storybook-test-runner .LemonCollapsePanel__body{height:-moz-fit-content!important;height:fit-content!important}.LemonCollapsePanel__content{padding:1rem}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/lemon-ui/LemonDivider/LemonDivider.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,'.LemonDivider{background:var(--border);flex-shrink:0;height:1px;width:100%}.LemonDivider--dashed{background:repeating-linear-gradient(to right,var(--border),var(--border) 4px,transparent 4px,transparent 8px)}.LemonDivider--thick{height:3px}.LemonDivider--vertical{align-self:stretch;height:auto;width:1px}.LemonDivider--vertical.LemonDivider--thick{width:3px}.LemonDivider--vertical.LemonDivider--dashed{background:repeating-linear-gradient(to bottom,var(--border),var(--border) 4px,transparent 4px,transparent 8px)}.LemonDivider--with-label{background:none;display:flex;height:unset}.LemonDivider--with-label:after,.LemonDivider--with-label:before{border-top:1px solid var(--border);content:"";display:block;position:relative;top:50%;transform:translateY(50%);width:50%}',""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/lemon-ui/LemonFileInput/LemonFileInput.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,'.FileDropTarget{position:relative}.FileDropTarget--active:after{--file-drop-target-padding:0.5rem;border:3px dashed var(--primary-3000);border-radius:var(--radius);content:"";height:calc(100% + var(--file-drop-target-padding)*2);left:calc(var(--file-drop-target-padding)*-1);position:absolute;top:calc(var(--file-drop-target-padding)*-1);width:calc(100% + var(--file-drop-target-padding)*2)}',""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/lemon-ui/LemonInput/LemonInput.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,'.LemonInput{--lemon-input-height:calc(2.125rem + 3px);align-items:center;background:none;background-color:var(--bg-light);border:1px solid var(--border);border-radius:var(--radius);color:var(--text-3000);cursor:text;display:flex;font-size:.875rem;gap:.375rem;height:var(--lemon-input-height);justify-content:left;line-height:1.25rem;min-height:var(--lemon-input-height);padding:.25rem .5rem;text-align:left}.LemonInput[aria-disabled=true]{cursor:not-allowed}.LemonInput.LemonInput--focused:not([aria-disabled=true]),.LemonInput:hover:not([aria-disabled=true]){border-color:var(--border-bold)}.LemonInput.LemonInput--transparent-background{background-color:inherit}.Field--error .LemonInput,.LemonInput.LemonInput--status-danger{border-color:var(--danger)!important}.LemonInput .LemonInput__input{align-self:stretch;background:none;border:none;cursor:inherit;flex:1;outline:none;padding:0;width:100%}.LemonInput .LemonInput__input:disabled{opacity:var(--opacity-disabled)}.LemonInput .LemonIcon{color:var(--muted-alt);flex-shrink:0;font-size:1.25rem;height:1em;transition:color .2s ease;width:1em}.LemonInput.LemonInput--xsmall{--lemon-input-height:1.5rem;padding:.125rem .25rem}.LemonInput.LemonInput--xsmall .LemonIcon{font-size:1rem}.LemonInput.LemonInput--small{--lemon-input-height:2rem;padding:.125rem .25rem}.LemonInput.LemonInput--small .LemonIcon{font-size:1.25rem}.LemonInput.LemonInput--large{--lemon-input-height:3rem}.LemonInput.LemonInput--large .LemonIcon{font-size:1.5rem}.LemonInput.LemonInput--has-content>.LemonIcon{color:var(--primary-3000)}.LemonInput.LemonInput--type-search{max-width:240px}.LemonInput.LemonInput--type-number .LemonInput__input{font-feature-settings:"tnum";font-variant-numeric:tabular-nums;text-overflow:clip}.LemonInput.LemonInput--full-width{max-width:100%;width:100%}',""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/lemon-ui/LemonLabel/LemonLabel.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".LemonLabel{align-items:center;-moz-column-gap:.25rem;column-gap:.25rem;display:inline-flex;flex-wrap:wrap;font-weight:600;line-height:1.5rem}.LemonLabel .LemonLabel__extra{font-weight:400}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/lemon-ui/LemonMarkdown/LemonMarkdown.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".LemonMarkdown>*{margin:0 0 .5em}.LemonMarkdown>:last-child{margin-bottom:0}.LemonMarkdown dl,.LemonMarkdown ol,.LemonMarkdown ul{padding-left:1.5em}.LemonMarkdown ol{list-style-type:decimal}.LemonMarkdown ul{list-style-type:disc}.LemonMarkdown strong[level]{display:block}.LemonMarkdown hr{margin:1em 0}.LemonMarkdown h1{font-weight:600;margin-bottom:.25em}.LemonMarkdown img{max-width:100%}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/lemon-ui/LemonModal/LemonModal.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".LemonModal__overlay{align-items:center;display:flex;inset:0;justify-content:center;position:fixed;transition:background-color var(--modal-transition-time) ease-out,-webkit-backdrop-filter var(--modal-transition-time) ease-out;transition:background-color var(--modal-transition-time) ease-out,backdrop-filter var(--modal-transition-time) ease-out;transition:background-color var(--modal-transition-time) ease-out,backdrop-filter var(--modal-transition-time) ease-out,-webkit-backdrop-filter var(--modal-transition-time) ease-out;z-index:var(--z-modal)}.LemonModal__overlay.LemonModal__overlay--force-modal-above-popovers{z-index:var(--z-force-modal-above-popovers)}.LemonModal__overlay.ReactModal__Overlay--after-open{-webkit-backdrop-filter:blur(var(--modal-backdrop-blur));backdrop-filter:blur(var(--modal-backdrop-blur));background-color:var(--modal-backdrop-color)}.LemonModal__overlay.ReactModal__Overlay--before-close{-webkit-backdrop-filter:blur(0);backdrop-filter:blur(0);background-color:transparent}.LemonModal__overlay.LemonModal__overlay--z-1061{z-index:1061}.LemonModal__overlay.LemonModal__overlay--z-1062{z-index:1062}.LemonModal__overlay.LemonModal__overlay--z-1066{z-index:1066}.LemonModal__overlay.LemonModal__overlay--z-1067{z-index:1067}.LemonModal__overlay.LemonModal__overlay--z-1068{z-index:1068}.LemonModal__overlay.LemonModal__overlay--z-1069{z-index:1069}.LemonModal{background-color:var(--bg-light);border:1px solid var(--border-bold);border-radius:var(--radius);box-shadow:var(--modal-shadow-elevation);display:flex;flex-direction:column;margin:1rem auto;max-height:90%;max-width:90%;min-width:min(28rem,100%);opacity:0;position:relative;transform:scale(.85);transition:opacity var(--modal-transition-time) ease-out,transform var(--modal-transition-time) ease-out;width:-moz-fit-content;width:fit-content;will-change:transform}.LemonModal.LemonModal--fullscreen{border:none;border-radius:0;height:100%;margin:0;max-height:100%;max-width:100%;width:100%}.LemonModal.ReactModal__Content--after-open:not(.ReactModal__Content--before-close){opacity:1;transform:scale(1)}.LemonModal .LemonModal__close{position:absolute;right:1rem;top:.75rem;z-index:1}.LemonModal .LemonModal__close.LemonModal__close--highlighted{animation:LemonModal__tilt-shake .4s}.LemonModal .LemonModal__layout{display:flex;flex:1;flex-direction:column;overflow-y:hidden}.LemonModal .LemonModal__content{overflow-y:auto;padding:1rem}.LemonModal .LemonModal__content.LemonModal__content--embedded{padding:0}.LemonModal .LemonModal__container{display:flex;height:100%;overflow:hidden}.LemonModal__header{border-bottom:1px solid var(--border);margin:1rem 1rem 0;padding-bottom:1rem}.LemonModal__header h3{font-size:1.125rem;font-weight:700;line-height:1.5rem;margin-bottom:0;margin-right:2.5rem}.LemonModal__header p{margin:.5rem 0 -.25rem}.LemonModal__footer{align-items:center;border-top:1px solid var(--border);display:flex;flex-wrap:wrap;gap:.5rem;justify-content:flex-end;margin:0 1rem 1rem;padding-top:1rem;white-space:nowrap}.LemonModal__header+.LemonModal__footer{border-top:none}@keyframes LemonModal__tilt-shake{0%{transform:rotate(0deg)}16.666%{transform:rotate(12deg)}50%{transform:rotate(-10deg)}83.333%{transform:rotate(8deg)}to{transform:rotate(0deg)}}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/lemon-ui/LemonProgressCircle/LemonProgressCircle.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".LemonProgressCircle{display:inline-block;position:relative;vertical-align:text-bottom}.LemonProgressCircle circle{transform:rotate(-90deg);transform-origin:50% 50%;transition:stroke-dashoffset .35s}.LemonProgressCircle .LemonProgressCircle__content{align-items:center;display:flex;inset:0;justify-content:center;position:absolute}.LemonButton__icon .LemonProgressCircle{display:inline-flex}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/lemon-ui/LemonRow/LemonRow.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".LemonRow{align-items:flex-start;background:none;border:none;border-radius:var(--radius);display:flex;flex-direction:column;flex-shrink:0;font-size:.875rem;justify-content:center;line-height:1.25rem;min-height:2.5rem;padding:.25rem 1rem;text-align:left;transition:background-color .2s ease,color .2s ease,border .2s ease,opacity .2s ease}.LemonRow.LemonRow--status-highlighted{background:var(--primary-highlight);color:var(--text-3000);font-weight:600}.LemonRow.LemonRow--status-highlighted .LemonRow__icon{color:var(--primary-3000)}.LemonRow.LemonRow--status-danger .LemonRow__icon{color:var(--danger)}.LemonRow.LemonRow--status-warning .LemonRow__icon{color:var(--warning)}.LemonRow.LemonRow--status-success .LemonRow__icon{color:var(--success)}.LemonRow.LemonRow--status-muted{background:var(--bg-3000)}.LemonRow.LemonRow--disabled{opacity:var(--opacity-disabled)}.LemonRow__main-area{align-items:center;display:flex;height:100%;justify-content:center;width:100%}.LemonRow__extended-area{display:flex;flex-direction:column;font-size:.8125rem;margin-left:1.875rem;padding-bottom:.125rem}.LemonRow--outlined{border:1px solid var(--border)}.LemonRow--full-width{padding-left:.5rem;padding-right:.5rem;width:100%}.LemonRow--full-width .LemonRow__icon:not(:first-child):last-child{margin-right:0}.LemonRow--full-width>.LemonRow__main-area{justify-content:flex-start}.LemonRow--center .LemonRow__main-area{justify-content:center!important}.LemonRow--center .LemonRow__content{flex-grow:0}.LemonRow--symbolic{display:block;height:1.5rem;min-height:0;padding:0;width:1.5rem}.LemonRow--large,.LemonRow--tall{min-height:3.5rem;padding:.5rem 1rem}.LemonRow--symbolic.LemonRow--large,.LemonRow--tall.LemonRow--symbolic{height:1.75rem;min-height:0;padding:0;width:1.75rem}.LemonRow--large{font-size:1rem}.LemonRow--large .LemonRow__icon{font-size:1.75rem}.LemonRow--small{min-height:2rem;padding:.125rem .5rem}.LemonRow--small.LemonRow--symbolic{height:1.25rem;min-height:0;padding:0;width:1.25rem}.LemonRow--small .LemonRow__icon{font-size:1.25rem}.LemonRow__icon{color:var(--muted-alt);display:flex;flex-shrink:0;font-size:1.5rem;transition:background-color .2s ease,color .2s ease}.LemonRow__content{align-items:center;display:flex;flex-grow:1;min-width:0}.LemonRow__content:not(:first-child),.LemonRow__icon:not(:first-child){margin-left:.5rem}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/lemon-ui/LemonSegmentedButton/LemonSegmentedButton.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".LemonSegmentedButton{border-radius:var(--radius);flex-shrink:0;position:relative;width:-moz-fit-content;width:fit-content}.LemonSegmentedButton>ul{align-items:stretch;display:flex;list-style:none;z-index:1}.LemonSegmentedButton.LemonSegmentedButton--full-width{width:100%}.LemonSegmentedButton .LemonSegmentedButton__option{display:flex;flex:1}.LemonSegmentedButton .LemonSegmentedButton__option .LemonButton__content{white-space:nowrap}.LemonSegmentedButton .LemonSegmentedButton__option .LemonButton,.LemonSegmentedButton .LemonSegmentedButton__option .LemonButton>.LemonButton__chrome:after,.LemonSegmentedButton .LemonSegmentedButton__option .LemonButton>.LemonButton__chrome:before{border-radius:0!important}.LemonSegmentedButton .LemonSegmentedButton__option .LemonButton:not(:hover) .LemonButton__content{opacity:var(--lemon-button-icon-opacity)}.LemonSegmentedButton .LemonSegmentedButton__option .LemonButton.LemonButton--secondary:not([aria-disabled=true]):hover>.LemonButton__chrome:after{border-color:var(--secondary-3000-button-border)}.LemonSegmentedButton .LemonSegmentedButton__option:first-child,.LemonSegmentedButton .LemonSegmentedButton__option:first-child .LemonButton,.LemonSegmentedButton .LemonSegmentedButton__option:first-child .LemonButton>.LemonButton__chrome:after,.LemonSegmentedButton .LemonSegmentedButton__option:first-child .LemonButton>.LemonButton__chrome:before{border-bottom-left-radius:var(--radius)!important;border-top-left-radius:var(--radius)!important}.LemonSegmentedButton .LemonSegmentedButton__option:last-child,.LemonSegmentedButton .LemonSegmentedButton__option:last-child .LemonButton,.LemonSegmentedButton .LemonSegmentedButton__option:last-child .LemonButton>.LemonButton__chrome:after,.LemonSegmentedButton .LemonSegmentedButton__option:last-child .LemonButton>.LemonButton__chrome:before{border-bottom-right-radius:var(--radius)!important;border-top-right-radius:var(--radius)!important}.LemonSegmentedButton .LemonSegmentedButton__option:not(:first-child) .LemonButton__chrome{margin-left:-1px}.LemonSegmentedButton .LemonSegmentedButton__option.LemonSegmentedButton__option--selected{z-index:2}.LemonSegmentedButton .LemonSegmentedButton__option.LemonSegmentedButton__option--selected .LemonButton{--lemon-button-icon-opacity:1}.LemonSegmentedButton .LemonSegmentedButton__option--disabled>div{width:100%}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/lemon-ui/LemonSkeleton/LemonSkeleton.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".LemonSkeleton{animation:LemonSkeleton__shimmer 2s ease infinite;background:linear-gradient(90deg,hsla(0,0%,75%,.2) 25%,hsla(0,0%,51%,.24) 45%,hsla(0,0%,75%,.2) 65%);background-size:400% 100%}.LemonSkeleton.LemonSkeleton--static{animation:none}.LemonSkeleton>span{display:block;height:1px;overflow:hidden;white-space:nowrap;width:1px}@media(prefers-reduced-motion){.LemonSkeleton{animation:none}}@keyframes LemonSkeleton__shimmer{0%{background-position:100% 50%}to{background-position:0 50%}}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/lemon-ui/LemonSwitch/LemonSwitch.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".LemonSwitch{--lemon-switch-height:1.125rem;--lemon-switch-width:calc(var(--lemon-switch-height)*1.83333);align-items:center;display:flex;font-weight:500;gap:.5rem;line-height:1.5rem;width:-moz-fit-content;width:fit-content}.LemonSwitch label[for]{cursor:pointer}.LemonSwitch label{cursor:inherit;flex:1}.LemonSwitch.LemonSwitch--full-width{padding-left:.5rem;padding-right:.5rem;width:100%}.LemonSwitch.LemonSwitch--bordered{background:var(--bg-light);border:1px solid var(--border);border-radius:var(--radius);line-height:1.4;min-height:calc(2.125rem + 3px);padding:0 .75rem}.LemonSwitch.LemonSwitch--bordered.LemonSwitch--small{gap:.5rem;min-height:calc(1.875rem + 3px);padding:0 .5rem}.LemonSwitch>.LemonIcon{color:var(--muted-alt);font-size:1.5rem}.LemonSwitch.LemonSwitch--disabled{cursor:not-allowed;opacity:var(--opacity-disabled)}.LemonSwitch.LemonSwitch--disabled label[for]{cursor:not-allowed}.LemonSwitch__button{background:none;border:none;cursor:pointer;display:inline-block;flex-shrink:0;height:var(--lemon-switch-height);padding:0;position:relative;width:var(--lemon-switch-width)}.LemonSwitch--disabled .LemonSwitch__button{cursor:not-allowed}.LemonSwitch__slider{background-color:var(--border-bold);border-radius:var(--lemon-switch-height);display:inline-block;height:100%;left:0;pointer-events:none;position:absolute;top:0;transition:background-color .1s ease;width:100%}.LemonSwitch--checked .LemonSwitch__slider{background-color:var(--primary-3000)}.LemonSwitch__handle{--lemon-switch-handle-ratio:0.75;--lemon-switch-handle-gutter:calc(var(--lemon-switch-height)*(1 - var(--lemon-switch-handle-ratio))/2);--lemon-switch-handle-width:calc(var(--lemon-switch-height)*var(--lemon-switch-handle-ratio));--lemon-switch-active-translate:translateX(calc(var(--lemon-switch-width) - var(--lemon-switch-handle-width) - var(--lemon-switch-handle-gutter)*2));align-items:center;background-color:#fff;border:none;border-radius:.625rem;cursor:inherit;display:flex;height:calc(var(--lemon-switch-height)*var(--lemon-switch-handle-ratio));justify-content:center;left:var(--lemon-switch-handle-gutter);pointer-events:none;position:absolute;top:var(--lemon-switch-handle-gutter);transition:background-color .1s ease,transform .1s ease,width .1s ease,border-color .1s ease;width:var(--lemon-switch-handle-width)}.LemonSwitch--checked .LemonSwitch__handle{background-color:#fff;border-color:var(--primary-3000);transform:var(--lemon-switch-active-translate)}.LemonSwitch--active .LemonSwitch__handle{--lemon-switch-handle-width:calc(var(--lemon-switch-height)*var(--lemon-switch-handle-ratio)*1.2);transform:none}.LemonSwitch--active.LemonSwitch--checked .LemonSwitch__handle{transform:var(--lemon-switch-active-translate)}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/lemon-ui/LemonTable/LemonTable.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,'.LemonTable{--row-base-height:auto;--row-horizontal-padding:1rem;--lemon-table-background-color:var(--bg-table);background:var(--lemon-table-background-color);border:1px solid var(--border);border-radius:var(--radius);flex:1;font-size:13px;overflow:hidden;position:relative;width:100%}.Insight .LemonTable,.InsightCard__viz .LemonTable,.WebAnalyticsDashboard .LemonTable{--lemon-table-background-color:var(--bg-light)}.WebAnalyticsDashboard .LemonTable,.WebAnalyticsModal .LemonTable{border:none}.LemonTable.LemonTable--with-ribbon{--row-ribbon-width:0.25rem}.LemonTable.LemonTable--with-ribbon .LemonTable__content>table>tbody>tr>:first-child{position:relative}.LemonTable.LemonTable--with-ribbon .LemonTable__content>table>tbody>tr>:first-child:after{background:var(--row-ribbon-color);content:"";height:100%;left:0;position:absolute;top:0;width:var(--row-ribbon-width)}.LemonTable--xs .LemonTable__content>table>tbody>tr>td{padding-bottom:.25rem;padding-top:.25rem}.LemonTable--embedded{background:none;border:none;border-radius:0}.LemonTable--stealth{background:none}.LemonTable--stealth .LemonTable__content>table>thead{background:none;border-bottom:none}.LemonTable--stealth .LemonTable__content>table>tbody>tr:not(:first-child),.LemonTable--stealth .LemonTable__content>table>thead>tr:not(:first-child){border-top:none}.LemonTable--lowercase-header .LemonTable__content>table>thead{letter-spacing:normal;text-transform:none}.LemonTable.LemonTable--inset{--row-horizontal-padding:0.5rem}.LemonTable .PaginationControl{border-top:1px solid var(--border);height:var(--row-base-height);padding:.5rem}.LemonTable a.Link{color:var(--text-3000)}.LemonTable a.Link:not(:disabled):hover{color:var(--primary-3000-hover)}.LemonTable__content>table{border-collapse:collapse;border-spacing:0;width:100%}.LemonTable__content>table>thead{background:var(--lemon-table-background-color);font-size:.75rem;letter-spacing:.03125rem;position:relative;text-transform:uppercase}.LemonTable__content>table>thead>tr>th{box-shadow:inset 0 -1px var(--border);font-weight:700;padding-bottom:.5rem;padding-top:.5rem;text-align:left}.LemonTable__content>table>thead>tr>th .LemonButton{margin:-.5rem 0}.LemonTable__content>table>thead>tr.LemonTable__row--grouping{--row-base-height:2.5rem}.LemonTable__content>table>tbody>tr:not(:first-child){border-top:1px solid var(--border)}.LemonTable__content>table>tbody>tr.LemonTable__expansion{background:var(--bg-3000);position:relative}.LemonTable__content>table>tbody>tr.LemonTable__expansion>td{padding:0!important}.LemonTable__content>table>tbody>tr.LemonTable__row--status-highlighted{color:var(--text-3000);font-weight:600}.LemonTable__content>table>tbody>tr.LemonTable__row--status-highlighted>td:not(.LemonTable__cell--sticky){background:var(--primary-highlight)}.LemonTable__content>table>tbody>tr>td{color:var(--text-secondary-3000);padding-bottom:.3125rem;padding-top:.3125rem}.LemonTable__content>table>tbody>tr>td .LemonButton{margin-bottom:-.25rem;margin-top:-.25rem}.LemonTable__content>table>tbody>tr>td .CodeSnippet__actions>.LemonButton,.LemonTable__content>table>tbody>tr>td .LemonButtonWithSideAction__side-button>.LemonButton{margin-bottom:0;margin-top:0}.LemonTable__content>table>tbody>tr,.LemonTable__content>table>thead>tr{height:var(--row-base-height)}.LemonTable__content>table>tbody>tr>td,.LemonTable__content>table>tbody>tr>th,.LemonTable__content>table>thead>tr>td,.LemonTable__content>table>thead>tr>th{overflow:hidden;padding-right:var(--row-horizontal-padding);text-overflow:ellipsis}.LemonTable__content>table>tbody>tr>td:first-child,.LemonTable__content>table>tbody>tr>th:first-child,.LemonTable__content>table>thead>tr>td:first-child,.LemonTable__content>table>thead>tr>th:first-child{padding-left:calc(var(--row-horizontal-padding) + var(--row-ribbon-width, 0px))}.LemonTable__content>table>tbody>tr>td.LemonTable__boundary:not(:first-child),.LemonTable__content>table>tbody>tr>th.LemonTable__boundary:not(:first-child),.LemonTable__content>table>thead>tr>td.LemonTable__boundary:not(:first-child),.LemonTable__content>table>thead>tr>th.LemonTable__boundary:not(:first-child){padding-left:var(--row-horizontal-padding)}.LemonTable__content>table>tbody>tr>td.LemonTable__boundary:not(:first-of-type),.LemonTable__content>table>tbody>tr>th.LemonTable__boundary:not(:first-of-type),.LemonTable__content>table>thead>tr>td.LemonTable__boundary:not(:first-of-type),.LemonTable__content>table>thead>tr>th.LemonTable__boundary:not(:first-of-type){border-left:1px solid var(--border)}.LemonTable__content>table>tbody>tr>td.LemonTable__toggle,.LemonTable__content>table>tbody>tr>th.LemonTable__toggle,.LemonTable__content>table>thead>tr>td.LemonTable__toggle,.LemonTable__content>table>thead>tr>th.LemonTable__toggle{padding-right:0}.LemonTable__content>table>tbody>tr>td.LemonTable__toggle+*,.LemonTable__content>table>tbody>tr>th.LemonTable__toggle+*,.LemonTable__content>table>thead>tr>td.LemonTable__toggle+*,.LemonTable__content>table>thead>tr>th.LemonTable__toggle+*{border-left:none!important}.LemonTable__content>table>tbody>tr>td[colspan="0"],.LemonTable__content>table>tbody>tr>th[colspan="0"],.LemonTable__content>table>thead>tr>td[colspan="0"],.LemonTable__content>table>thead>tr>th[colspan="0"]{padding-left:0!important;padding-right:0!important}.LemonTable__empty-state{color:var(--muted-alt)}.LemonTable__overlay{background:var(--lemon-table-background-color);height:100%;left:0;opacity:0;pointer-events:none;position:absolute;top:0;transition:opacity .2s ease;width:100%;z-index:2}.LemonTable--loading .LemonTable__overlay{opacity:.5;pointer-events:auto}.LemonTable__header{cursor:default}.LemonTable__header .LemonTable__header-content{color:var(--text-secondary-3000)}.LemonTable__header.LemonTable__header--actionable{cursor:pointer}.LemonTable__header.LemonTable__header--actionable:hover:not(:has(.LemonTable__header--no-hover:hover)) .LemonTable__header-content{color:var(--text-3000)}.LemonTable__header.LemonTable__header--actionable:active .LemonTable__header-content{color:var(--text-3000)}.LemonTable__header-content{align-items:center;display:flex;justify-content:space-between;line-height:1.5}.LemonTable__header-content div{white-space:nowrap}.LemonTable__footer{border-top:1px solid var(--border);cursor:default}.LemonTable__cell--sticky{background:var(--lemon-table-background-color)}.LemonTable__row--status-highlighted .LemonTable__cell--sticky:before{background:var(--primary-highlight)}.LemonTable__header--sticky{background:var(--lemon-table-background-color)}body:not(.storybook-test-runner) .LemonTable__cell--sticky,body:not(.storybook-test-runner) .LemonTable__header--sticky{left:0;overflow:visible!important;position:sticky!important;z-index:1}body:not(.storybook-test-runner) .LemonTable__cell--sticky:before,body:not(.storybook-test-runner) .LemonTable__header--sticky:before{box-shadow:-16px 0 16px 16px transparent;-webkit-clip-path:inset(0 -16px 0 0);clip-path:inset(0 -16px 0 0);content:"";inset:0;position:absolute;transition:box-shadow .2s ease;z-index:-1}body:not(.storybook-test-runner) .ScrollableShadows--left .LemonTable__cell--sticky:before,body:not(.storybook-test-runner) .ScrollableShadows--left .LemonTable__header--sticky:before{box-shadow:-16px 0 16px 16px rgba(0,0,0,.25)}',""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/lemon-ui/LemonTable/LemonTableLoader.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,'.LemonTableLoader{background:var(--primary-highlight);border:none!important;height:0;left:0;overflow:hidden;padding:.05rem!important;position:absolute;transition:height .2s ease,top .2s ease;width:100%;z-index:10}.LemonTableLoader:after{animation:LemonTableLoader__swooping 1.5s linear infinite;background:var(--primary-3000);content:"";height:100%;left:0;position:absolute;top:0;width:50%}.LemonTableLoader.LemonTableLoader--enter-active,.LemonTableLoader.LemonTableLoader--enter-done{height:.125rem}@keyframes LemonTableLoader__swooping{0%{left:0;transform:translateX(-100%);width:33.333%}50%{width:50%}to{left:100%;transform:translateX(100%);width:33.333%}}',""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/lemon-ui/LemonTabs/LemonTabs.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,'.LemonTabs{--lemon-tabs-gap:2rem;--lemon-tabs-margin-bottom:1rem;--lemon-tabs-content-padding:0.75rem 0;align-self:stretch;display:flex;flex-direction:column;position:relative}.LemonTabs--small{--lemon-tabs-gap:1rem;--lemon-tabs-margin-bottom:0.5rem;--lemon-tabs-content-padding:0.375rem 0}.Navigation3000__scene>.LemonTabs:first-child,.Navigation3000__scene>:first-child>.LemonTabs:first-child{margin-top:-.75rem}.LemonTabs__bar{align-items:stretch;display:flex;flex-direction:row;flex-shrink:0;gap:var(--lemon-tabs-gap);list-style:none;margin-bottom:var(--lemon-tabs-margin-bottom);overflow-x:auto;position:relative}.LemonTabs__bar:before{background:var(--border);bottom:0;content:"";height:1px;left:0;position:absolute;width:100%}.LemonTabs__bar:after{background:var(--link);bottom:0;content:"";height:.125rem;left:0;position:absolute;transform:translateX(var(--lemon-tabs-slider-offset));width:var(--lemon-tabs-slider-width)}.LemonTabs--transitioning .LemonTabs__bar:after{transition:width .15s ease,transform .15s ease}.LemonTabs--transitioning .LemonTabs__bar .LemonTabs__tab{transition:color .15s ease}.LemonTabs__bar .LemonTabs__tab:hover{color:var(--link)}.LemonTabs__bar .LemonTabs__tab:active{color:var(--primary-3000-active)}.LemonTabs__bar .LemonTabs__tab.LemonTabs__tab--active{color:var(--link);text-shadow:0 0 .25px currentColor}.LemonTabs__bar .LemonTabs__tab a{color:inherit;-webkit-text-decoration:none;text-decoration:none;transition:none}.LemonTabs__bar .LemonTabs__tab .LemonTabs__tab-content{align-items:center;cursor:pointer;display:flex;padding:var(--lemon-tabs-content-padding);white-space:nowrap}',""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/lemon-ui/LemonTag/LemonTag.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".LemonTag{align-items:center;background:var(--border);border-radius:var(--radius-sm);color:var(--text-3000);display:inline-flex;font-size:.75rem;font-weight:var(--font-medium);gap:.125rem;line-height:1rem;padding:.125rem .25rem;white-space:nowrap}.LemonTag.LemonTag--normal{font-weight:400}.LemonTag:not(.LemonTag--breakdown){background:none;border-radius:var(--radius-sm);border-style:solid;border-width:1px;font-size:.6875rem;padding:.075rem .25rem}.LemonTag.LemonTag--primary{background:none;border-color:var(--primary-3000);color:var(--primary-3000)}.LemonTag.LemonTag--option{background-color:var(--accent-3000);color:var(--primary-3000)}.LemonTag.LemonTag--highlight{background:none;border-color:var(--highlight);color:var(--highlight)}.LemonTag.LemonTag--warning{background-color:none;border-color:var(--warning);color:var(--warning)}.LemonTag.LemonTag--danger{background:none;border-color:var(--danger);color:var(--danger)}.LemonTag.LemonTag--success{background:none;border-color:var(--success);color:var(--success)}.LemonTag.LemonTag--completion{background:none;border-color:var(--purple);color:var(--purple)}.LemonTag.LemonTag--caution{background:none;border-color:var(--danger-lighter);color:var(--danger-lighter)}.LemonTag.LemonTag--muted{background-color:var(--accent-3000);color:var(--muted)}.LemonTag.LemonTag--none{background:none}.LemonTag.LemonTag--breakdown{background-color:var(--primary-highlight);border-radius:40px;color:var(--primary-alt);font-size:14px;font-weight:400;line-height:16px;padding:8px 12px;vertical-align:bottom}.LemonTag.LemonTag--size-small{font-size:.625rem;line-height:.875rem;padding:0 .1875rem}.LemonTag .LemonTag__icon{display:flex;font-size:.875rem;margin-right:.125rem}.LemonTag .LemonTag__right-button{margin-left:.25rem;min-height:1.5rem!important;padding:.125rem!important}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/lemon-ui/LemonTextArea/LemonTextArea.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".LemonTextArea{background:none;background-color:var(--bg-light);border:1px solid var(--border);border-radius:var(--radius);color:var(--text-3000);cursor:text;display:block;font-size:.875rem;line-height:1.25rem;min-height:2.5rem;outline:none;padding:.5rem;text-align:left;text-overflow:ellipsis;width:100%}.LemonTextArea:focus:not(:disabled),.LemonTextArea:not(:disabled):hover{border:1px solid var(--border-bold)}.LemonTextArea:disabled{cursor:not-allowed;opacity:var(--opacity-disabled)}.Field--error .LemonTextArea{border:1px solid var(--danger)}.LemonTextArea--preview ul{list-style-position:inside;list-style-type:disc}.LemonTextArea--preview ol{list-style-position:inside;list-style-type:decimal}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/lemon-ui/LemonWidget/LemonWidget.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".LemonWidget{background:var(--bg-light);border:1px solid var(--border);border-radius:var(--radius)}.LemonWidget .LemonWidget__header{align-items:center;color:var(--muted-alt-3000,var(--primary));display:flex;font-size:.875rem;font-weight:500;justify-content:space-between;padding:.25rem}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/lemon-ui/Lettermark/Lettermark.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".Lettermark{align-items:center;background:var(--lettemark-bg,var(--lettermark-1-bg));border-radius:var(--radius-sm);color:var(--lettermark-text,var(--lettermark-1-text));display:inline-flex;flex-shrink:0;font-size:.75rem;font-weight:600;height:2em;justify-content:center;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:2em}.Lettermark.Lettermark--rounded{border-radius:1.5rem}.Lettermark.Lettermark--outlined{background:none;border:1.5px dashed var(--lettermark-bg);color:var(--lettermark-bg)}.Lettermark.Lettermark--variant-gray{background:var(--border);color:var(--text-3000)}.Lettermark.Lettermark--xsmall{font-size:.5rem}.Lettermark.Lettermark--xlarge{border-radius:var(--radius);font-size:2rem}.Lettermark.Lettermark--variant-1{--lettermark-text:var(--lettermark-1-text);--lettermark-bg:var(--lettermark-1-bg)}.Lettermark.Lettermark--variant-2{--lettermark-text:var(--lettermark-2-text);--lettermark-bg:var(--lettermark-2-bg)}.Lettermark.Lettermark--variant-3{--lettermark-text:var(--lettermark-3-text);--lettermark-bg:var(--lettermark-3-bg)}.Lettermark.Lettermark--variant-4{--lettermark-text:var(--lettermark-4-text);--lettermark-bg:var(--lettermark-4-bg)}.Lettermark.Lettermark--variant-5{--lettermark-text:var(--lettermark-5-text);--lettermark-bg:var(--lettermark-5-bg)}.Lettermark.Lettermark--variant-6{--lettermark-text:var(--lettermark-6-text);--lettermark-bg:var(--lettermark-6-bg)}.Lettermark.Lettermark--variant-7{--lettermark-text:var(--lettermark-7-text);--lettermark-bg:var(--lettermark-7-bg)}.Lettermark.Lettermark--variant-8{--lettermark-text:var(--lettermark-8-text);--lettermark-bg:var(--lettermark-8-bg)}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/lemon-ui/Link/Link.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".Link{background:none;border:none;color:var(--link);cursor:pointer;line-height:inherit;outline:none;padding:0;text-align:left;transition:none}.Link:not(:disabled):hover{color:var(--primary-3000-hover)}.Link:not(:disabled):active{color:var(--primary-3000-active)}.Link:disabled{cursor:not-allowed;opacity:var(--opacity-disabled)}.Link>.LemonIcon:last-child{margin-left:.15em}.Link--subtle{color:var(--text-3000)}.Link--subtle:not(:disabled):hover{color:var(--primary-3000-hover)}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/lemon-ui/LoadingBar/LoadingBar.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".progress-outer{align-items:center;display:flex}.progress{background:#eee;border-radius:var(--radius-sm);height:10px;min-height:1px;overflow:hidden;position:relative;width:100%}.progress-bar{background:var(--primary-3000-active);height:100%;left:0;position:absolute}.storybook-test-runner .progress-bar{width:50%!important}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/lemon-ui/PaginationControl/PaginationControl.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".PaginationControl{align-items:center;align-self:flex-end;display:flex;justify-content:flex-end}.PaginationControl>span{margin-right:.5rem}.PaginationControl--bordered{border:1px solid var(--border);border-radius:var(--radius);padding:.5rem}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/lemon-ui/Popover/Popover.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".Popover{display:flex;flex-direction:row;perspective:80rem;perspective-origin:top;z-index:var(--z-popover)}.Popover h5{margin:.25rem .5rem}.Popover p:last-child{margin-bottom:0}.Popover[data-floating-placement^=top]{perspective-origin:bottom}.Popover.Popover--top-centered{left:50%;top:1rem;transform:translate(-50%)}.Popover__box{background:var(--bg-light);border:1px solid var(--secondary-3000-button-border);border-radius:var(--radius);box-shadow:var(--shadow-elevation-3000);flex-grow:1;max-width:100%;opacity:0;overflow:visible;position:relative;transform-origin:top;transition:opacity 50ms ease,transform 50ms ease}.Popover[data-placement^=bottom] .Popover__box{margin-top:.25rem;transform:rotateX(-6deg);transform-origin:top}.Popover[data-placement^=bottom].Popover--with-arrow .Popover__box{margin-top:.5rem}.Popover[data-placement^=top] .Popover__box{margin-bottom:.25rem;transform:rotateX(6deg);transform-origin:bottom}.Popover[data-placement^=top].Popover--with-arrow .Popover__box{margin-bottom:.5rem}.Popover[data-placement^=left] .Popover__box{margin-right:.25rem;transform:rotateY(-6deg);transform-origin:right}.Popover[data-placement^=left].Popover--with-arrow .Popover__box{margin-right:.5rem}.Popover[data-placement^=right] .Popover__box{margin-left:.25rem;transform:rotateY(6deg);transform-origin:left}.Popover[data-placement^=right].Popover--with-arrow .Popover__box{margin-left:.5rem}.Popover.Popover--enter-active .Popover__box,.Popover.Popover--enter-done .Popover__box{opacity:1;transform:none}.Popover--max-content-width .Popover__box{width:-moz-max-content;width:max-content}.Popover__arrow{background:var(--bg-light);height:.5rem;position:absolute;transform:rotate(45deg);width:.5rem}[data-placement^=bottom] .Popover__arrow{border-left:1px solid var(--border);border-top:1px solid var(--border);top:-.3125rem}[data-placement^=top] .Popover__arrow{border-bottom:1px solid var(--border);border-right:1px solid var(--border);bottom:-.3125rem}[data-placement^=left] .Popover__arrow{border-right:1px solid var(--border);border-top:1px solid var(--border);right:-.3125rem}[data-placement^=right] .Popover__arrow{border-bottom:1px solid var(--border);border-left:1px solid var(--border);left:-.3125rem}.Popover__content{border-radius:calc(var(--radius) - 1px);max-height:100%}.Popover--padded .Popover__content>.ScrollableShadows__inner{padding:.25rem}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/lemon-ui/ProfilePicture/ProfilePicture.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".profile-package{align-items:center;display:inline-flex}.profile-name,.profile-package:not(:first-child){margin-left:.375rem}.profile-name{font-weight:500}.ProfilePicture{align-items:center;border-radius:50%;display:inline-flex;flex-shrink:0;font-weight:600;justify-content:center;position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ProfilePicture.xxl{font-size:20px;height:48px;line-height:48px;width:48px}.ProfilePicture.xl{font-size:20px;height:40px;line-height:40px;width:40px}.ProfilePicture.lg{font-size:18px;height:32px;line-height:32px;width:32px}.ProfilePicture.md{font-size:14px;height:24px;line-height:24px;width:24px}.ProfilePicture.sm{font-size:12px;height:18px;line-height:18px;width:18px}.ProfilePicture.xs{font-size:11px;height:16px;line-height:16px;width:16px}.ProfilePicture .Lettermark{font-size:inherit;height:inherit;line-height:inherit;width:inherit}.ProfileBubbles{align-items:center;display:flex}.ProfileBubbles>*{outline:.125rem solid var(--bg-light)}.ProfileBubbles>:not(:first-child){margin-left:-.125rem}.ProfileBubbles__more{align-items:center;background:var(--primary-3000);border-radius:50%;color:#fff;display:flex;font-size:.625rem;font-weight:600;height:1.5rem;justify-content:center;letter-spacing:-.05em;position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:1.5rem}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/lemon-ui/Spinner/Spinner.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,'.Spinner{--spinner-color:var(--primary-3000);display:inline-block;flex-shrink:0;height:1em;vertical-align:-.15em;width:1em}.Spinner.Spinner--textColored{--spinner-color:currentColor}.Spinner__layer,.Spinner__layer>circle{transform-origin:center}.Spinner__layer>circle{display:block;fill:transparent;stroke:var(--spinner-color);stroke-linecap:round;stroke-width:8px}.Spinner__layer:first-child{opacity:.333}.Spinner__layer:nth-child(2){animation:spin 1s linear infinite}.Spinner__layer:nth-child(2)>circle{animation:Spinner__writhe 1.5s ease infinite both}@keyframes Spinner__writhe{0%,to{stroke-dasharray:70;stroke-dashoffset:-60}50%{stroke-dasharray:70;stroke-dashoffset:-30}}.SpinnerOverlay{align-items:center;display:flex;inset:0;justify-content:center;min-height:min(100%,6rem);position:absolute;text-align:center;transition:opacity .2s ease;z-index:var(--z-content-overlay)}.SpinnerOverlay[aria-hidden=true]{opacity:0;pointer-events:none}.SpinnerOverlay:before{background:var(--bg-light);content:"";inset:0;opacity:.5;position:absolute}.SpinnerOverlay .Spinner{position:relative}.SpinnerOverlay.SpinnerOverlay--scene-level:before{background:var(--bg-3000)}',""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/lemon-ui/Splotch/Splotch.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".Splotch{height:1.5rem;padding:.25rem;width:1.5rem}.Splotch__paint{border-radius:var(--radius);height:1rem;width:1rem}.Splotch--blue .Splotch__paint{background:var(--blue)}.Splotch--purple .Splotch__paint{background:var(--purple)}.Splotch--green .Splotch__paint{background:var(--green)}.Splotch--black .Splotch__paint{background:var(--black)}.Splotch--white .Splotch__paint{background:#fff;border:1px solid var(--border)}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/lemon-ui/Tooltip/Tooltip.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".Tooltip{box-shadow:var(--modal-shadow-elevation);z-index:var(--z-tooltip)}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/lemon-ui/icons/icons.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".LemonIcon{display:inline-block;vertical-align:-.15em;width:1em}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/monaco/CodeEditor.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents{display:block!important}.editor-wrapper .monaco-editor,.editor-wrapper .overflow-guard{border-radius:0}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left>.signature-label{text-align:right;width:100%}.CodeEditorInline .monaco-editor,.CodeEditorResizeable .monaco-editor{--vscode-textLink-foreground:transparent;--vscode-focusBorder:transparent;border-radius:var(--radius)}.CodeEditorInline .monaco-editor .overflow-guard,.CodeEditorResizeable .monaco-editor .overflow-guard{border-radius:var(--radius)}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/queries/nodes/DataTable/ColumnConfigurator/ColumnConfigurator.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".ColumnConfiguratorModal .Columns{background-color:var(--bg-3000);border-radius:var(--radius);-moz-column-gap:1rem;column-gap:1rem;display:flex;padding:.5rem;width:700px}@media(max-width:960px){.ColumnConfiguratorModal .Columns{display:block;width:auto}}.ColumnConfiguratorModal .HalfColumn{width:50%}@media(max-width:960px){.ColumnConfiguratorModal .HalfColumn{width:100%}}.ColumnConfiguratorModal .SelectedColumn{align-items:center;background-color:var(--primary-highlight);border-radius:var(--radius);display:flex;justify-content:flex-start;margin:calc(var(--radius)/2) 0;overflow:hidden;padding:0 .5rem}.ColumnConfiguratorModal .selected-column-col{display:flex;flex-direction:column}.ColumnConfiguratorModal .drag-handle{color:var(--text-3000);cursor:move;font-size:1.2em;padding-right:.25rem}.ColumnConfiguratorModal .drag-handle svg{transform:rotate(90deg)}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/queries/nodes/DataTable/DataTable.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".DataTable td{max-width:20rem}.DataTable .DataTable__row--highlight_once{animation:DataTable__highlight 2s ease-out}.DataTable .DataTable__row--category_row{background-color:var(--bg-3000);color:var(--muted);font-size:.75rem;font-weight:600;height:2rem;text-align:center}@keyframes DataTable__highlight{0%{background-color:var(--mark)}to{background-color:initial}}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/queries/nodes/DataVisualization/Components/Chart.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".DataVisualization{--viz-min-height:calc(80vh - 6rem)}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/queries/nodes/DataVisualization/Components/Charts/LineGraph.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".DataVisualization__LineGraph{min-height:var(--viz-min-height)}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/queries/nodes/DataVisualization/Components/ConditionalFormatting/ConditionalFormattingTab.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".ConditionalFormattingTab__ColorPicker .LemonButton__chrome{gap:0;padding-left:6px!important}.ConditionalFormattingTab .LemonCollapsePanel__header{padding-left:0!important}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/queries/nodes/DataVisualization/Components/SideBar.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".DataVisualization .LemonTabs .LemonTabs__bar{margin-bottom:0}.DataVisualization .SideBar{border-radius:var(--radius);max-width:18rem;min-height:var(--viz-min-height);min-width:18rem}.DataVisualization .SideBar .LemonInput.LemonInput--medium{display:flex}.DataVisualization .SideBar .LemonInput.LemonInput--medium .LemonInput__input{flex:1;width:0}.DataVisualization .SideBar .grow-2{flex-grow:2}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/queries/nodes/DataVisualization/Components/Variables/Variables.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".DataVizVariable_Button .LemonButton__chrome{justify-content:flex-end!important}.DataVizVariable_Popover .ScrollableShadows__inner{padding:0!important}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/queries/nodes/InsightViz/EditorFilterGroup.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".EditorFilterGroup .EditorFilterGroup__title{display:none}.EditorFilterGroup .EditorFilterGroup__content>*+*{margin-top:1rem}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/queries/nodes/InsightViz/EditorFilters.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".EditorFiltersWrapper{--editor-panel-group-min-width:24rem;background:var(--bg-light);flex-shrink:0}.EditorFiltersWrapper:not(.EditorFiltersWrapper--embedded){border:1px solid var(--border);border-radius:var(--radius);padding:1rem}.EditorFiltersWrapper .EditorFilters{display:flex;flex-flow:row wrap;gap:1rem}.EditorFiltersWrapper .EditorFilters .EditorFilterGroup{flex:1;max-width:100%;min-width:var(--editor-panel-group-min-width)}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/queries/nodes/InsightViz/InsightViz.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".InsightViz{container-type:inline-size;display:flex;flex:1;flex-direction:column;gap:1rem;overflow:hidden}.InsightViz.InsightViz--horizontal{align-items:start;flex-flow:row wrap}.InsightViz.InsightViz--horizontal .EditorFiltersWrapper{width:100%}@container (min-width: 768px){.InsightViz.InsightViz--horizontal .EditorFiltersWrapper{max-width:30rem;min-width:26rem;width:30%}}.InsightVizDisplay{--insight-viz-min-height:min(calc(80vh - 6rem),32rem);display:flex;flex-direction:column}.ErrorTracking__breakdowns .InsightVizDisplay,.ExportedInsight .InsightVizDisplay,.InsightCard .InsightVizDisplay,.NotebookNode .InsightVizDisplay,.WebAnalyticsDashboard .InsightVizDisplay{flex:1;height:100%}.ErrorTracking__breakdowns .InsightVizDisplay .LineGraph,.ExportedInsight .InsightVizDisplay .LineGraph,.InsightCard .InsightVizDisplay .LineGraph,.NotebookNode .InsightVizDisplay .LineGraph,.WebAnalyticsDashboard .InsightVizDisplay .LineGraph{padding:.5rem}.InsightVizDisplay .InsightVizDisplay__content{display:flex;flex:1;flex-direction:column;height:100%;position:relative}.InsightVizDisplay .InsightVizDisplay__content--with-legend{flex-direction:row}.InsightVizDisplay .InsightVizDisplay__content .InsightVizDisplay__content__left{display:flex;flex:1;flex-direction:column;position:relative;width:100%}.InsightVizDisplay .InsightVizDisplay__content .InsightVizDisplay__content__right{align-items:center;display:flex;flex-shrink:1;margin:1rem;max-height:var(--insight-viz-min-height);max-width:45%;width:-moz-fit-content;width:fit-content}.InsightVizDisplay .InsightDisplayConfig{border-bottom-width:1px;padding:.5rem}.WebAnalyticsDashboard .InsightVizDisplay{--insight-viz-min-height:25rem}.RetentionContainer{display:flex;flex:1;flex-direction:column;width:100%}.RetentionContainer .RetentionContainer__graph{flex:1;margin:.5rem}.RetentionContainer .RetentionContainer__table{flex-shrink:0}.RetentionContainer .LineGraph{min-height:30vh;position:relative!important;width:100%!important}.ExportedInsight .RetentionContainer .LineGraph,.InsightCard .RetentionContainer .LineGraph,.NotebookNode .RetentionContainer .LineGraph,.WebAnalyticsDashboard .RetentionContainer .LineGraph{min-height:100px;position:relative}.TrendsInsight{display:flex;flex:1;flex-direction:column;margin:.5rem;min-height:var(--insight-viz-min-height);position:relative}.ExportedInsight .TrendsInsight,.InsightCard .TrendsInsight,.NotebookNode .TrendsInsight,.WebAnalyticsDashboard .TrendsInsight{min-height:auto}.TrendsInsight--ActionsTable,.TrendsInsight--BoldNumber,.TrendsInsight--WorldMap{margin:0;min-height:auto}.TrendsInsight--BoldNumber{align-items:center;display:flex;justify-content:center}.FunnelInsight{display:flex;flex:1;flex-direction:column;width:100%}.FunnelInsight--type-steps-vertical,.FunnelInsight--type-time_to_convert,.FunnelInsight--type-trends{min-height:var(--insight-viz-min-height)}.ExportedInsight .FunnelInsight--type-steps-vertical,.ExportedInsight .FunnelInsight--type-time_to_convert,.ExportedInsight .FunnelInsight--type-trends,.InsightCard .FunnelInsight--type-steps-vertical,.InsightCard .FunnelInsight--type-time_to_convert,.InsightCard .FunnelInsight--type-trends,.NotebookNode .FunnelInsight--type-steps-vertical,.NotebookNode .FunnelInsight--type-time_to_convert,.NotebookNode .FunnelInsight--type-trends,.WebAnalyticsDashboard .FunnelInsight--type-steps-vertical,.WebAnalyticsDashboard .FunnelInsight--type-time_to_convert,.WebAnalyticsDashboard .FunnelInsight--type-trends{min-height:auto}.funnel-significance-highlight{background:var(--primary);color:var(--bg-light);display:inline-flex}.funnel-significance-highlight .LemonIcon{color:var(--bg-light)}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/queries/nodes/InsightViz/PropertyGroupFilters/PropertyGroupFilters.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,'.PropertyGroupFilters .property-group{background-color:var(--bg-3000);border-radius:var(--radius);border-width:1px;padding:.5rem}.PropertyGroupFilters .property-group-and-or-separator{color:var(--primary-alt);font-size:12px;font-weight:600;padding:.5rem 0;position:relative}.PropertyGroupFilters .property-group-and-or-separator:before{background-color:var(--border-light);content:" ";height:100%;left:17px;position:absolute;top:0;width:2px}.PropertyGroupFilters .property-group-and-or-separator>span{background-color:var(--bg-light);display:inline-block;padding:.25rem;position:relative;text-align:center;width:35px;z-index:1}',""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/activity/explore/EventDetails.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".LemonTabs[data-attr=event-details] ul{padding:0 .75rem}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/authentication/Setup2FA.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".Setup2FA__image{margin:0 auto;min-height:215px;min-width:215px}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/billing/Billing.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".BillingPlan{flex-grow:1;max-width:500px}.BillingPlan .BillingPlan__description ol,.BillingPlan .BillingPlan__description ul{list-style:none;margin-top:1rem;padding-left:0;text-align:center}.BillingPlan .BillingPlan__description ol li,.BillingPlan .BillingPlan__description ul li{line-height:1.2rem;margin-bottom:1rem}.BillingPlan .BillingPlan__description ol .disclaimer,.BillingPlan .BillingPlan__description ul .disclaimer{font-size:10px;font-weight:700;padding-left:1px;vertical-align:top}.BillingPlan .BillingPlan__description .disclaimer-details{color:var(--muted);font-size:.75rem;margin-top:1rem}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/billing/BillingGauge.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".BillingGaugeItem{animation:BillingGaugeItem__expand .8s cubic-bezier(.15,.15,.2,1) forwards}.BillingGaugeItem .BillingGaugeItem__info{background:var(--bg-light);border-left:1px solid var(--border);bottom:100%;font-size:.8rem;left:100%;line-height:1rem;margin-left:-1px;padding:0 .25rem .5rem;position:absolute;white-space:nowrap}.BillingGaugeItem .BillingGaugeItem__info--bottom{bottom:auto;padding:.5rem .25rem 0;top:100%}.BillingGaugeItem .BillingGaugeItem__info:hover{z-index:100}.BillingGaugeItem.BillingGaugeItem--billing_limit,.BillingGaugeItem.BillingGaugeItem--free_tier{background-color:var(--border-light-opaque)}.BillingGaugeItem.BillingGaugeItem--current_usage{background:var(--danger)}.BillingGaugeItem.BillingGaugeItem--current_usage.BillingGaugeItem--within-usage-limit{background:var(--brand-blue)}.BillingGaugeItem.BillingGaugeItem--projected_usage{background:repeating-linear-gradient(-45deg,var(--danger-3000-button-border-dark),var(--danger-3000-button-border-dark) .5rem,var(--danger-3000-button-border-hover-dark) .5rem,var(--danger-3000-button-border-hover-dark) 1rem);opacity:.5}.BillingGaugeItem.BillingGaugeItem--projected_usage.BillingGaugeItem--within-usage-limit{background:repeating-linear-gradient(-45deg,var(--data-color-1),var(--data-color-1) .5rem,var(--data-color-1-hover) .5rem,var(--data-color-1-hover) 1rem)}@keyframes BillingGaugeItem__expand{0%{width:0}to{width:var(--billing-gauge-item-width)}}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/billing/PlanComparison.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".PlanComparisonModal{max-width:900px}table.PlanComparison{table-layout:fixed}table.PlanComparison td{padding:.75rem 1rem;vertical-align:top}table.PlanComparison td.PlanTable__td__upgradeButton{padding-bottom:1rem;padding-top:1rem}table.PlanComparison th{font-weight:600;padding:.75rem 1rem;text-align:left;vertical-align:top}table.PlanComparison th.PlanTable__th__section{font-weight:500;padding:.25rem 1rem}table.PlanComparison th.PlanTable__th__feature{font-weight:600;padding:.75rem 1rem .75rem 3.25rem}table.PlanComparison th.PlanTable__th__feature.PlanTable__th__feature--reduced_padding{padding:.75rem 1rem}table.PlanComparison th.PlanTable__th__last-feature{padding-bottom:2rem}table.PlanComparison th p{font-weight:400}.PlanTable__tr__border{border-bottom:3px dotted rgba(0,0,0,.07)}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/billing/UnsubscribeSurveyModal.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".UnsubscribeSurveyCostControl .LemonCollapsePanel__header{background:var(--bg-3000);padding:0!important}.UnsubscribeSurveyCostControl .LemonButton__chrome{padding:0!important}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/cohorts/CohortFilters/CohortCriteriaRowBuilder.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".CohortCriteriaRow{padding:0 .5rem}.CohortCriteriaRow .CohortCriteriaRow__Criteria{border:1px solid transparent;border-radius:var(--radius);padding:.25rem .5rem}.CohortCriteriaRow .CohortCriteriaRow__Criteria.CohortCriteriaRow__Criteria--error{border:1px solid var(--danger)}.CohortCriteriaRow .CohortCriteriaRow__Criteria .CohortCriteriaRow__Criteria__error-row{margin:.25rem 0}.CohortCriteriaRow .CohortCriteriaRow__Criteria .CohortCriteriaRow__Criteria__Field{margin:.25rem 0;min-width:0}.CohortCriteriaRow .CohortCriteriaRow__Criteria .CohortCriteriaRow__Criteria__Field.CohortCriteriaRow__Criteria__Field--error .CohortField{border:1px solid var(--danger)}.CohortCriteriaRow .CohortCriteriaRow__Criteria .CohortCriteriaRow__Criteria__Field:not(:last-child){margin-right:.5rem}.CohortCriteriaRow .logical-row-divider{color:var(--primary-alt);font-size:12px;font-weight:600;text-transform:uppercase}.CohortCriteriaRow .logical-row-divider:after,.CohortCriteriaRow .logical-row-divider:before{border-top:1px solid var(--border)}.CohortCriteriaRow .logical-row-divider:before{width:1.5%}.CohortCriteriaRow .logical-row-divider:after{width:95%}.CohortCriteriaRow .CohortCriteriaRow__inline-divider{background-color:var(--border);flex:1;height:1px;margin:0 .5rem}.CohortCriteriaRow .CohortCriteriaRow__Criteria__arrow{color:var(--muted);flex-shrink:0;font-size:18px;font-weight:700;padding-left:6px;padding-right:8px;position:relative;top:6px;-webkit-user-select:none;-moz-user-select:none;user-select:none}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/cohorts/CohortFilters/CohortField.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".Popover__CohortField .Popover__box{max-height:30rem}.CohortField__dropdown{max-width:calc(100vw - 14rem);min-width:14rem}.CohortField__CohortTextField{font-weight:500}.CohortField__CohortNumberField{max-width:4rem}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/dashboard/DashboardItems.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".dashboard-items-wrapper{margin-top:1rem;width:100%}.react-grid-layout{margin-bottom:2rem;position:relative;transition:height .1s ease}.react-grid-layout.dashboard-view-mode .react-grid-item{transition:border-color .1s ease}.react-grid-item.cssTransforms{transition-property:transform}.react-grid-item.resizing{will-change:width,height;z-index:1}.react-grid-item.react-draggable .CardMeta,.react-grid-item.react-draggable .TextCard__body{cursor:move;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-grid-item.react-draggable-dragging{transition:none;will-change:transform;z-index:105}.react-grid-item.dropping{visibility:hidden}.react-grid-item.react-grid-placeholder{border:1px solid var(--primary-3000);border-radius:var(--radius);max-width:100%;outline:1px solid var(--primary-3000);position:relative;transition:.1s ease;-webkit-user-select:none;-moz-user-select:none;user-select:none;z-index:2}.react-resizable-hide>.react-resizable-handle{display:none}.react-grid-item{transition:all .1s ease;transition-property:left,top}.react-grid-item>.react-resizable-handle{bottom:-.5rem;cursor:se-resize;height:2rem;position:absolute;right:-.5rem;width:2rem;z-index:10}.react-grid-item>.react-resizable-handle.react-resizable-handle-se{cursor:se-resize}.react-grid-item>.react-resizable-handle.react-resizable-handle-e{bottom:2rem;cursor:ew-resize;height:auto;top:0}.react-grid-item>.react-resizable-handle.react-resizable-handle-s{cursor:ns-resize;left:0;right:2rem;width:auto}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/dashboard/DashboardTemplateChooser.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".DashboardTemplateChooser{display:grid;gap:.5em .5em;grid-template-columns:repeat(3,1fr);max-width:780px}.DashboardTemplateChooser .TemplateItem{height:210px;width:240px}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/dashboard/EmptyDashboardComponent.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,'.EmptyDashboard .EmptyDashboard__fade:after{background:linear-gradient(to top,var(--bg-light),transparent);bottom:0;content:"";height:3rem;pointer-events:none;position:absolute}.EmptyDashboard{margin-top:1rem;position:relative}.EmptyDashboard .EmptyDashboard__fade{height:150px;margin-top:1rem;overflow:hidden;position:relative}.EmptyDashboard .EmptyDashboard__fade:after{--bg-light:var(--bg-3000);height:150px;width:100%}.EmptyDashboard .EmptyDashboard__cta{background:var(--bg-light);border-radius:var(--radius);border-width:1px;box-shadow:var(--shadow-elevation-3000);left:50%;max-width:calc(100% - 32px);padding:1.5rem;position:absolute;top:16px;transform:translateX(-50%);width:360px;z-index:var(--z-content-overlay)}',""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/data-management/properties/PropertyDefinitionsTable.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".event-properties-definition-table .LemonTable__content>table>tbody td.definition-column-icon{padding-right:.5rem;width:36px}.event-properties-definition-table .LemonTable__content>table>tbody td.definition-column-icon .definition-column-name-icon{align-items:center;display:flex;font-size:1.2rem;justify-content:center;width:30px}.event-properties-definition-table .LemonTable__content>table>tbody td.definition-column-icon .definition-column-name-icon svg.taxonomy-icon{flex-shrink:0}.event-properties-definition-table .LemonTable__content>table>tbody td.definition-column-icon .definition-column-name-icon svg.taxonomy-icon.taxonomy-icon-muted{color:var(--muted-alt)}.event-properties-definition-table .LemonTable__content>table>tbody td.definition-column-icon .definition-column-name-icon svg.taxonomy-icon.taxonomy-icon-verified{color:var(--success)}.event-properties-definition-table .LemonTable__content>table>tbody td.definition-column-name .definition-column-name-content{display:flex;flex-direction:column;justify-content:center;min-height:32px;position:relative}.event-properties-definition-table .LemonTable__content>table>tbody td.definition-column-name .definition-column-name-content .definition-column-name-content-title{align-items:center;cursor:pointer;display:flex;font-weight:600;gap:.25rem}.event-properties-definition-table .LemonTable__content>table>tbody td.definition-column-name .definition-column-name-content .definition-column-name-content-title svg{color:var(--success)}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/data-warehouse/ViewLinkModal.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".form-error{color:var(--danger)}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/experiments/Experiment.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,'.experiment-form .metrics-selection,.experiment-form .person-selection{border-top:1px solid var(--border);padding-top:1rem;width:100%}.experiment-form .person-selection{align-items:center;justify-content:space-between}.experiment-form .experiment-preview{border-bottom:1px solid var(--border);margin-bottom:1rem}.experiment-form .variants{margin-top:.5rem;padding-bottom:1rem}.experiment-form .variants .border-top{border-top-left-radius:4px;border-top-right-radius:4px}.experiment-form .variants .border-bottom{border-bottom-left-radius:4px;border-bottom-right-radius:4px}.experiment-form .variants .feature-flag-variant{align-items:center;background:var(--bg-light);border-color:var(--border);border-left-style:solid;border-right-style:solid;border-top-style:solid;border-width:1px;display:flex;padding:.5rem}.experiment-form .variants .feature-flag-variant .extend-variant-fully{flex:1}.experiment-form .variants .variant-label{align-items:center;border-radius:var(--radius);color:#fff;display:flex;flex-direction:row;font-size:12px;font-weight:500;justify-content:center;letter-spacing:.01em;margin-right:8px;min-width:52px;padding:2px 6px}.experiment-form .secondary-metrics{border-top:1px solid var(--border);margin-bottom:1rem;margin-top:1rem;padding-top:1rem;width:100%}.view-experiment .draft-header{border-bottom:1px solid var(--border);margin-bottom:1rem}.view-experiment .exp-description{font-style:italic}.view-experiment .participants{background-color:#fff}.view-experiment .variants-list li{display:inline}.view-experiment .variants-list li:after{content:", "}.view-experiment .variants-list li:last-child:after{content:""}.view-experiment .experiment-result{padding-top:1rem}.view-experiment .secondary-progress{margin-top:.5rem}.view-experiment .secondary-progress li:before{content:"•";display:inline-block;font-weight:900;margin-right:4px}.view-experiment .no-experiment-results{align-items:center;background-color:var(--bg-3000);border:1px solid var(--border);display:flex;font-size:24px;justify-content:center;margin-top:1rem;min-height:320px;width:100%}.view-experiment .computation-time-and-sampling-notice{margin-top:8px}.experiment-preview-row{border-bottom:1px solid var(--border);margin-bottom:1rem;padding-bottom:1rem}.experiment-preview-row:last-child{border-bottom:none;margin-bottom:0;padding-bottom:0}.metric-name{border:1px solid var(--border);border-radius:var(--radius);flex:1;margin-left:.5rem;padding:8px 8px 8px 16px}.exp-flag-copy-label{font-size:11px;font-weight:600;letter-spacing:.5px;text-transform:uppercase}',""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/feature-flags/FeatureFlag.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".VariantFormList{border:1px solid var(--border);border-radius:var(--radius);font-size:13px;margin-top:16px;padding:16px}.VariantFormList .label-row{font-weight:700}.VariantFormList .VariantFormList__row{grid-template-columns:repeat(24,minmax(0,1fr))}.feature-flag-property-display{align-items:center;display:flex;flex-flow:row wrap;gap:.5rem;margin-top:.5rem}.feature-flag-property-display .arrow-right{margin-right:-8px;margin-top:.25rem}.feature-flag-property-display .display-value{word-break:break-all}.condition-set-separator{color:var(--primary-alt);font-size:12px;font-weight:var(--font-semibold);margin-bottom:.5rem;margin-left:.5rem}.feature-flag-form-row{align-items:center;display:flex;flex-wrap:wrap;width:100%}.feature-flag-form-row .centered{align-items:center;display:flex;white-space:pre-wrap}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/feature-flags/FeatureFlagInstructions.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".FeatureFlagInstructionsHeader{flex-wrap:nowrap}.FeatureFlagInstructionsHeader .FeatureFlagInstructionsHeader__header-title{display:flex;justify-items:center}.FeatureFlagInstructionsHeader .FeatureFlagInstructionsHeader__header-title .FeatureFlagInstructionsHeader__header-title__icon{color:var(--text-muted-alt);font-size:1.6em;margin-right:12px}.FeatureFlagInstructionsHeader__option{display:flex;justify-items:center}.FeatureFlagInstructionsHeader__option .FeatureFlagInstructionsHeader__option__icon{margin-right:8px;margin-top:2px}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/funnels/Funnel.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".funnel-bin-filter-dropdown .funnel-bins-custom-picker{margin:5px 0 5px 13px;width:43px}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/funnels/FunnelBarHorizontal/FunnelBarHorizontal.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".FunnelBarHorizontal .funnel-step header .funnel-step-title{max-width:calc(100% - 8px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.FunnelBarHorizontal{min-height:100%;padding:1rem}.InsightCard .FunnelBarHorizontal{padding-left:1rem;padding-right:1rem}.FunnelBarHorizontal .funnel-step{padding-left:2rem;position:relative}.FunnelBarHorizontal .funnel-step:not(:first-child),.FunnelBarHorizontal .funnel-step:not(:first-child) .funnel-series-container{padding-top:.75rem}.FunnelBarHorizontal .funnel-step .graph-series-glyph{z-index:2}.FunnelBarHorizontal .funnel-step .funnel-conversion-metadata{align-items:center;display:flex;justify-content:space-between}.FunnelBarHorizontal .funnel-step .funnel-conversion-metadata .funnel-inspect-button{line-height:1.5rem}.FunnelBarHorizontal .funnel-step .funnel-conversion-metadata .funnel-inspect-button .value-inspector-button-icon{font-size:1.5rem;margin-right:.25rem;vertical-align:bottom}.FunnelBarHorizontal .funnel-step .funnel-series-container{align-items:center;display:flex;flex-direction:column;height:100%;left:0;position:absolute;top:0;width:1.5rem}.FunnelBarHorizontal .funnel-step .funnel-series-container .graph-series-glyph{-webkit-user-select:none;-moz-user-select:none;user-select:none}.FunnelBarHorizontal .funnel-step .funnel-series-container .funnel-series-linebox{border-right:2px solid var(--border);box-sizing:border-box;left:0;opacity:.5;position:absolute;width:calc(.75rem + 1px)}.FunnelBarHorizontal .funnel-step .funnel-series-container .funnel-series-linebox.before{height:11.5px;top:0}.FunnelBarHorizontal .funnel-step .funnel-series-container .funnel-series-linebox.after{bottom:0;height:calc(100% - 11.5px);top:11.5px}.FunnelBarHorizontal .funnel-step .funnel-step-metadata{display:flex;flex-wrap:wrap}.FunnelBarHorizontal .funnel-step footer,.FunnelBarHorizontal .funnel-step header{align-items:center;display:flex;line-height:23px}.FunnelBarHorizontal .funnel-step header{display:flex;flex-wrap:wrap;justify-content:space-between;position:relative}.FunnelBarHorizontal .funnel-step header .funnel-step-title{font-weight:700}.FunnelBarHorizontal .funnel-step header button{margin-left:.375rem}.FunnelBarHorizontal .funnel-bar-wrapper{background-color:var(--border-3000);border-radius:var(--radius);display:flex;flex-direction:row;height:32px;margin:4px 0}.FunnelBarHorizontal .funnel-bar-wrapper .funnel-bar{background:var(--primary-3000);height:100%;position:relative;transition:width .2s ease,height .2s ease}.FunnelBarHorizontal .funnel-bar-wrapper .funnel-bar.first{border-radius:var(--radius) 0 0 4px}.FunnelBarHorizontal .funnel-bar-wrapper .funnel-bar.last{border-radius:0 4px 4px 0}.FunnelBarHorizontal .funnel-bar-wrapper .funnel-bar.only{border-radius:var(--radius)}.FunnelBarHorizontal .funnel-bar-wrapper .funnel-bar .funnel-bar-percentage{color:#fff;font-weight:700;line-height:16px;position:absolute;top:8px}.FunnelBarHorizontal .funnel-bar-wrapper .funnel-bar .funnel-bar-percentage.inside{right:8px}.FunnelBarHorizontal .funnel-bar-wrapper .funnel-bar .funnel-bar-percentage.outside{color:var(--text-3000);left:calc(100% + 8px)}.storybook-test-runner .InsightCard .funnel-bar{display:none}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/funnels/FunnelBarVertical/FunnelBarVertical.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".FunnelBarVertical{flex:1;height:100%;overflow:hidden;position:relative;width:100%}.FunnelBarVertical table{--bar-width:0.5rem;--bar-row-height:18rem;--bar-padding-top:1rem;--bar-padding-bottom:1.5rem;height:100%;width:100%}.FunnelBarVertical table>tbody>tr:first-child{border-bottom:1px solid var(--border)}.FunnelBarVertical table>tbody>tr:first-child>td{padding-bottom:var(--bar-padding-bottom);padding-top:var(--bar-padding-top)}.FunnelBarVertical table>tbody>tr>td{padding:.75rem 0}.StepBars{align-items:flex-end;border-bottom:1px solid var(--border);display:flex;gap:.125rem;height:calc(var(--bar-row-height) - var(--bar-padding-top) - var(--bar-padding-bottom));padding:0 1rem;position:relative}.StepBars:not(.StepBars--first){border-left:1px dashed var(--border)}.StepBars__grid{align-items:stretch;bottom:0;display:flex;flex-direction:column;height:100%;left:0;position:absolute;width:100%}.StepBars__gridline{flex-grow:1}.StepBars__gridline.StepBars__gridline--horizontal{border-top:1px dashed var(--border)}.StepBar{--series-color:#000;--conversion-rate:100%;border-radius:var(--radius);flex-shrink:0;height:100%;position:relative;width:calc(var(--bar-width)/2)}.InsightCard .StepBar{width:calc(var(--bar-width)/2)!important}@media screen and (min-width:992px){.StepBar{width:var(--bar-width)}}.StepBar__backdrop,.StepBar__fill{border-radius:var(--radius);bottom:0;cursor:pointer;left:0;position:absolute;width:100%}.InsightCard .StepBar__backdrop,.InsightCard .StepBar__fill,.StepBar__unclickable .StepBar__backdrop,.StepBar__unclickable .StepBar__fill{cursor:default}.StepBar__backdrop{background:repeating-linear-gradient(-22.5deg,transparent,transparent .5rem,hsla(0,0%,100%,.5) .5rem,hsla(0,0%,100%,.5) 1rem),var(--series-color);height:100%;opacity:.125;transition:opacity .2s ease}.StepBar__backdrop:hover{opacity:.2}.StepBar__backdrop:active{opacity:.25}.StepBar__fill{background:var(--series-color);height:var(--conversion-rate);transition:filter .2s ease}.StepBar__fill:hover{filter:brightness(.9)}.StepBar__fill:active{filter:brightness(.85)}.StepBarLabels{align-items:flex-end;display:flex;flex-direction:column-reverse;height:calc(var(--bar-row-height) - var(--bar-padding-top) - var(--bar-padding-bottom))}.StepBarLabels__segment{flex-grow:1;padding:0 .5rem}.StepBarLabels__segment:first-child{flex-grow:0;height:0}.StepBarLabels__label{font-size:.75rem;font-weight:500;transform:translateY(-50%)}.StepLegend{border-left:1px solid var(--border);height:100%;white-space:nowrap}.StepLegend>.LemonRow{font-weight:500;margin-top:.25rem;min-height:1.5rem;padding:0 .5rem}.StepLegend>.LemonRow:first-child{font-weight:600;margin-top:0;width:-moz-fit-content;width:fit-content}.StepLegend .funnel-inspect-button{font-weight:inherit;line-height:1.5rem}.FunnelTooltip{width:20rem}.FunnelTooltip table{border-collapse:collapse;border-spacing:0;width:100%}.FunnelTooltip tr{height:1.75rem}.FunnelTooltip td:first-child{font-weight:500;padding:0 .5rem}.FunnelTooltip td:last-child{font-weight:600;padding-right:.5rem;text-align:right}.FunnelTooltip .table-subtext{padding-bottom:.25rem}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/funnels/FunnelHistogram.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".FunnelHistogram{flex:1}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/insights/EmptyStates/EmptyStates.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".insight-empty-state{align-items:center;color:var(--muted);display:flex;flex-direction:column;flex-grow:1;font-size:1.1em;justify-content:center;padding:1rem}.insight-empty-state.error h2{color:var(--danger)}.insight-empty-state.warning h2{color:var(--warning)}.insight-empty-state h2{color:var(--primary-alt);font-size:1.5rem;font-weight:600;line-height:1.6rem}.insight-empty-state .empty-state-inner{align-items:center;display:flex;flex-direction:column;max-width:600px}.insight-empty-state .empty-state-inner .illustration-main{font-size:2.5rem}.insight-empty-state .empty-state-inner h2{text-align:center}.insight-empty-state .empty-state-inner ol{margin:.5rem 0}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/insights/InsightTooltip/InsightTooltip.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".InsightTooltipWrapper{pointer-events:none;position:absolute;transition:all .4s;z-index:var(--z-graph-tooltip)}.InsightTooltip{background:var(--bg-light);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-elevation-3000);font-size:.8125rem;max-width:30rem;overflow:hidden;pointer-events:none}.InsightTooltip--embedded{border:none;border-radius:0;box-shadow:none}.InsightTooltip .LemonRow{font-size:.8125rem}.InsightTooltip .LemonTable{border:none;border-bottom-left-radius:0;border-bottom-right-radius:0;font-size:.75rem}.InsightTooltip .LemonTable:not(:last-child){border-bottom:1px solid var(--border)}.InsightTooltip .LemonTable .insights-label{margin:0}.InsightTooltip .LemonTable .datum-column{overflow-wrap:anywhere;padding-left:.5rem}.InsightTooltip .LemonTable .LemonTable__content>table>thead{letter-spacing:0}.InsightTooltip .LemonTable .LemonTable__content>table>thead .datum-column .LemonTable__header-content{white-space:nowrap}.InsightTooltip .LemonTable .LemonTable__content>table .datum-label-column{align-items:center;display:flex;font-weight:600}.InsightTooltip .LemonTable .LemonTable__content>table .series-data-cell{font-weight:600}.InsightTooltip .LemonTable .LemonTable__content>table .tag-pill{background-color:var(--border-3000);border:0;color:var(--primary-alt);margin-right:0;overflow:hidden;vertical-align:middle}.InsightTooltip .table-subtext{background-color:var(--bg-light);color:var(--muted);font-size:.75rem;padding:.5rem 1rem;text-align:center}.InsightTooltip .table-subtext .table-subtext-truncated{margin-bottom:4px}.InsightTooltip .table-subtext .table-subtext-click-to-inspect{align-items:center;color:var(--text-3000);display:flex;font-weight:600;justify-content:center;white-space:nowrap}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/insights/filters/ActionFilter/ActionFilter.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".ActionFilter ul>li+li,.ActionFilter>*+*{margin-top:.5rem}.ActionFilter .ActionFilterRow-filters{padding:.5rem 0}.ActionFilter.ActionFilter--bordered{border:1px solid var(--border);border-radius:var(--radius)}.ActionFilter.ActionFilter--bordered .ActionFilterRow{margin-top:0}.ActionFilter.ActionFilter--bordered .ActionFilterRow .ActionFilterRow-content{border-bottom:1px solid var(--border);margin-bottom:0;padding:1rem}.ActionFilter.ActionFilter--bordered .ActionFilter-footer{margin-top:0;padding:.5rem}.ActionFilter.ActionFilter--bordered .ActionFilterRow-filters{background-color:var(--bg-3000);border-bottom:1px solid var(--border);padding:.5rem}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/insights/filters/ActionFilter/ActionFilterRow/ActionFilterRow.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".ActionFilterRow .ActionFilterRow-content{align-items:flex-start;display:flex}.ActionFilterRow .ActionFilterRow-content>*+*{margin-left:.5rem}.ActionFilterRow .ActionFilterRow__center,.ActionFilterRow .ActionFilterRow__end,.ActionFilterRow .ActionFilterRow__start{align-items:center;display:flex}.ActionFilterRow .ActionFilterRow__end,.ActionFilterRow .ActionFilterRow__start{align-items:center;display:flex;flex:0;gap:.25rem;height:40px}.ActionFilterRow .ActionFilterRow__center{flex:1;flex-wrap:wrap;gap:.5rem;overflow:hidden}.ActionFilterRowDragHandle{color:var(--text-3000);cursor:move;font-size:1.2em;transform:rotate(90deg)}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/insights/filters/BreakdownFilter/BreakdownTagMenu.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".histogram-bin-input{background-color:var(--bg-light);margin:0 .5rem;padding:.25rem;width:60px}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/insights/views/BoldNumber/BoldNumber.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".BoldNumber{align-items:center;display:flex;flex:1;flex-direction:column;justify-content:center;padding:2rem 3rem 3rem;width:100%}.InsightCard .BoldNumber{padding:1rem}.BoldNumber.HogQL{padding:5rem}.BoldNumber .BoldNumber__value{font-weight:700;letter-spacing:-.025em;width:100%}@media screen and (min-width:768px){.BoldNumber{padding:3rem 5rem 5rem}.InsightCard .BoldNumber{padding:2rem}}.BoldNumber__comparison{color:var(--muted-alt);cursor:default;font-weight:500;margin-bottom:-1.5rem;margin-top:.5rem}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/insights/views/Funnels/CorrelationMatrix.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".correlation-table-wrapper table{border:1px solid var(--border);border-collapse:initial;border-radius:var(--radius);border-spacing:0;margin:0 auto}.correlation-table-wrapper table td{border-left:1px solid var(--border);border-top:1px solid var(--border);padding:.5rem 1rem;text-align:center}.correlation-table-wrapper table td .percentage{font-weight:700;padding-bottom:.25rem}.correlation-table-wrapper table td:first-child{border-left:none}.correlation-table-wrapper table .table-title{color:var(--muted-alt)}.correlation-table-wrapper table .table-title td{border-top:none}.correlation-table-wrapper table .horizontal-header,.correlation-table-wrapper table thead{background-color:var(--bg-3000);color:var(--muted);font-weight:700;text-transform:uppercase}.correlation-table-wrapper table tbody td:not(.horizontal-header){text-align:right}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/insights/views/Funnels/FunnelCorrelation.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".funnel-correlation{margin-bottom:3rem}.funnel-correlation .skew-warning{background-color:var(--bg-light);border:1px solid var(--warning);border-radius:var(--radius);line-height:2em;margin-top:1rem}.funnel-correlation .skew-warning h4{align-items:center;border-bottom:1px solid var(--border);display:flex;font-size:1.1em;justify-content:space-between;padding:.5rem;position:relative}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/insights/views/Funnels/FunnelCorrelationTable.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".FunnelCorrelationTable .table-options .LemonCheckbox:not(:last-child) label{border-radius:var(--radius) 0 0 var(--radius);border-right:none}.FunnelCorrelationTable .table-options .LemonCheckbox:last-child label{border-radius:0 var(--radius) var(--radius) 0}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/insights/views/Histogram/Histogram.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".dashboard-wrapper{height:calc(100% - 2rem);width:100%}.histogram-container{display:flex}.histogram-container svg{margin-left:1rem;margin-right:1rem}.histogram-container svg g#x-axis .domain,.histogram-container svg g#y-axis .domain{stroke:var(--funnel-axis)}.histogram-container svg g#x-axis .tick{color:var(--funnel-axis)}.histogram-container svg g#x-axis text,.histogram-container svg g#y-axis text{font-family:var(--font-sans);font-size:.75rem;font-weight:500;fill:var(--text-3000)}.histogram-container svg g#y-gridlines{stroke-dasharray:4,2}.histogram-container svg g#y-gridlines g.tick:not(:first-child){color:var(--funnel-grid)}.histogram-container svg g#y-gridlines .domain,.histogram-container svg g#y-gridlines g.tick:first-of-type{display:none}.histogram-container svg g#bars{fill:var(--primary-3000)}.histogram-container svg g#labels text.bar-label{font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;fill:var(--white)}.histogram-container svg g#labels text.bar-label.outside{fill:#0f0f0f}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/insights/views/InsightsTable/InsightsTable.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".series-name-wrapper-col{align-items:center;display:flex}.series-name-wrapper-col .edit-icon{color:var(--primary-3000);cursor:pointer;font-size:1rem}.series-name-wrapper-col .insights-label.editable{cursor:pointer}.series-name-wrapper-col .insights-label.editable .EntityFilterInfo:not(.text-muted){color:var(--primary-3000);font-weight:500}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/insights/views/InsightsTable/columns/AggregationColumn.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".AggregationColumn__title{color:var(--text-secondary-3000)}.AggregationColumn__title:hover{color:var(--text-3000)}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/insights/views/WorldMap/WorldMap.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".WorldMap{color:var(--border);padding:1rem 0;width:100%}.WorldMap .landxx{fill:currentColor;fill-rule:evenodd;stroke:var(--bg-light);stroke-width:.125rem}.WorldMap .landxx:hover{color:var(--data-color-1-hover)!important}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/notebooks/AddToNotebook/DraggableToNotebook.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".DraggableToNotebook{position:relative}.DraggableToNotebook--dragging{background-color:var(--bg-light);outline:1px solid var(--primary-3000);transform:translateZ(0)}.DraggableToNotebook[draggable=true]{cursor:grab}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/notebooks/Nodes/NodeWrapper.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".NotebookNode{--notebook-node-meta-height:2.5rem;--notebook-node-meta-padding:0.25rem;--border-color:var(--border);transform:translateZ(0)}.NotebookNode .NotebookNode__box{background-color:var(--bg-light);border:1px solid var(--border-color);border-radius:var(--radius);overflow:hidden;transform:translateZ(0);transition:border .15s linear,margin-bottom .15s linear}.NotebookNode .NotebookNode__box .NotebookNode__meta{align-items:center;border-bottom:1px solid var(--border);color:var(--primary-alt);display:flex;font-size:.875rem;font-weight:500;height:var(--notebook-node-meta-height);justify-content:space-between;overflow:hidden;padding:var(--notebook-node-meta-padding)}.NotebookNode .NotebookNode__box .NotebookNode__settings{border-bottom:1px solid var(--border)}.NotebookNode .NotebookNode__box .NotebookNode__content{transition:box-shadow .15s ease-out;z-index:1}.NotebookNode .NotebookNode__gap{align-items:center;display:flex;gap:.2rem;height:1.375rem;opacity:0;overflow:hidden;transition:all .15s linear 1s}.NotebookNode--editable:hover .NotebookNode__gap,.NotebookNode--selected .NotebookNode__gap{height:1.875rem;opacity:1;transition:all .15s linear}.NotebookNode--selected{--border-color:var(--border-bold)}.NotebookNode--auto-hide-metadata{--border-color:transparent}.NotebookNode--auto-hide-metadata .NotebookNode__meta{background-color:var(--bg-light);left:0;pointer-events:none;position:absolute;right:0;top:0;visibility:hidden;z-index:var(--z-popover)}.Notebook--editable .NotebookNode--auto-hide-metadata.NotebookNode--selected,.Notebook--editable .NotebookNode--auto-hide-metadata:hover{border-color:var(--border-color)}.Notebook--editable .NotebookNode--auto-hide-metadata.NotebookNode--selected .NotebookNode__meta,.Notebook--editable .NotebookNode--auto-hide-metadata:hover .NotebookNode__meta{pointer-events:all;visibility:visible}.NotebookNode--auto-hide-metadata:hover{--border-color:var(--border)}.NotebookNode.ph-image img{flex:1;height:100%;object-fit:contain;width:100%}.NotebookNodeTitle{overflow:hidden;padding:.25rem;text-overflow:ellipsis;white-space:nowrap}.NotebookNodeTitle--editable{border-radius:var(--radius);transition:background-color .15s linear}.NotebookNodeTitle--editable:hover{background-color:var(--border)}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/notebooks/Notebook/Notebook.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,'.Notebook{display:flex;flex:1;flex-direction:column;width:100%}.Notebook .NotebookEditor{flex:1;overflow:hidden;position:relative;width:100%}.Notebook .NotebookEditor .ProseMirror-focused{outline:none}.Notebook .NotebookEditor .ProseMirror>h1,.Notebook .NotebookEditor .ProseMirror>h2,.Notebook .NotebookEditor .ProseMirror>h3,.Notebook .NotebookEditor .ProseMirror>h4,.Notebook .NotebookEditor .ProseMirror>h5{margin-top:.5rem}.Notebook .NotebookEditor .ProseMirror>p{margin-bottom:.2rem}.Notebook .NotebookEditor .ProseMirror>.is-empty:before{color:rgba(0,0,0,.2);content:attr(data-placeholder);float:left;height:0;pointer-events:none}[theme=dark] .Notebook .NotebookEditor .ProseMirror>.is-empty:before{color:hsla(0,0%,100%,.2)}.Notebook .NotebookEditor .ProseMirror>ol{list-style-type:decimal}.Notebook .NotebookEditor .ProseMirror>ol ol{list-style-type:lower-alpha}.Notebook .NotebookEditor .ProseMirror>ul{list-style-type:disc}.Notebook .NotebookEditor .ProseMirror>ul ul{list-style-type:circle}.Notebook .NotebookEditor .ProseMirror>ul[data-type=taskList]{list-style-type:none;padding-left:0}.Notebook .NotebookEditor .ProseMirror>ul[data-type=taskList] li{display:flex}.Notebook .NotebookEditor .ProseMirror>ul[data-type=taskList] li>label{flex:0 0 auto;margin-right:.5rem;-webkit-user-select:none;-moz-user-select:none;user-select:none}.Notebook .NotebookEditor .ProseMirror>ul[data-type=taskList] li>div{flex:1 1 auto}.Notebook .NotebookEditor .ProseMirror>ul[data-type=taskList] li ol li,.Notebook .NotebookEditor .ProseMirror>ul[data-type=taskList] li ul li{display:list-item}.Notebook .NotebookEditor .ProseMirror>ul[data-type=taskList] li ul[data-type=taskList]>li{display:flex}.Notebook .NotebookEditor .ProseMirror>ol,.Notebook .NotebookEditor .ProseMirror>ol ol,.Notebook .NotebookEditor .ProseMirror>ol ul,.Notebook .NotebookEditor .ProseMirror>ul,.Notebook .NotebookEditor .ProseMirror>ul ol,.Notebook .NotebookEditor .ProseMirror>ul ul{padding-left:2rem}.Notebook .NotebookEditor .ProseMirror>ol li p,.Notebook .NotebookEditor .ProseMirror>ul li p{margin-bottom:.2rem}.Notebook .NotebookEditor .ProseMirror>pre{background-color:rgba(0,0,0,.05);border-radius:var(--radius);margin-bottom:.5rem;overflow-x:auto;padding:.5rem}.Notebook .NotebookEditor .ProseMirror>code,.Notebook .NotebookEditor .ProseMirror>p code{background-color:rgba(0,0,0,.05);border-radius:var(--radius);padding:.2rem}.Notebook .NotebookEditor .Backlink{background-color:var(--bg-light);border:1px solid var(--border);border-radius:var(--radius);padding:.125rem .25rem}.Notebook .NotebookEditor .Backlink:hover{background-color:var(--bg-3000)}.Notebook .NotebookEditor .Backlink svg{color:var(--text-3000)}.Notebook .NotebookEditor .Backlink.Backlink--selected{border-color:var(--primary-3000)}.Notebook .NotebookEditor .Backlink.Backlink--active{background:var(--primary-3000);border:1px solid var(--primary-3000);color:var(--white)}.Notebook .NotebookEditor .Backlink.Backlink--active .Backlink__label,.Notebook .NotebookEditor .Backlink.Backlink--active svg{color:var(--white)}.Notebook .NotebookEditor .Backlink.Backlink--active span::-moz-selection{color:var(--white)}.Notebook .NotebookEditor .Backlink.Backlink--active span::selection{color:var(--white)}.Notebook .NotebookEditor[contenteditable=true] a{cursor:text}.Notebook--compact:not(.Notebook--canvas) .NotebookEditor{max-width:800px}.Notebook .NotebookColumn{--notebook-sidebar-height:calc(100vh - 9rem);position:relative;transition:width var(--notebook-popover-transition-properties);width:0}.Notebook .NotebookColumn .NotebookColumn__content{align-self:flex-start;position:sticky;top:0;transform:translateX(-100%);transition:transform var(--notebook-popover-transition-properties)}.NotebookScene .Notebook .NotebookColumn{--notebook-sidebar-height:calc(100vh - 11rem)}.NotebookScene .Notebook .NotebookColumn .NotebookColumn__padding{height:4rem}.NotebookScene .Notebook .NotebookColumn .NotebookColumn__content{top:4rem}.Notebook .NotebookColumn--left .NotebookColumn__content{transform:translateX(-100%);width:var(--notebook-column-left-width)}.Notebook .NotebookColumn--left .NotebookColumn__content>.LemonWidget .LemonWidget__content{max-height:var(--notebook-sidebar-height);overflow:auto}.Notebook .NotebookColumn--right .NotebookColumn__content{transform:translateX(100%);width:var(--notebook-column-right-width)}.Notebook .NotebookColumn--showing.NotebookColumn--left{margin-right:1rem;width:var(--notebook-column-left-width)}.Notebook .NotebookColumn--showing.NotebookColumn--right{margin-left:1rem;width:var(--notebook-column-right-width)}.Notebook .NotebookColumn--showing .NotebookColumn__content{transform:translateX(0)}.Notebook--editable .NotebookEditor .ProseMirror{flex:1;padding-bottom:10rem}.Notebook--editable .NotebookColumn--left.NotebookColumn--showing+.NotebookEditor .ProseMirror{padding-bottom:100vh}.Notebook .NotebookHistory{display:flex;flex:1;flex-direction:column}.Notebook .NotebookInlineMenu{box-shadow:0 4px 10px 0 rgba(0,0,0,.1);margin-bottom:-.2rem}.Notebook .NotebookInlineMenu .LemonInput{border:0;min-height:0}.Notebook .LemonTable__content>table>thead{position:sticky;top:0;z-index:1}.Notebook .NotebookMention,.Notebook .NotebookRecordingTimestamp{display:inline-flex;max-height:22px}.Notebook .NotebookComment{--notebook-comment-background-opacity:0.25;position:relative;transform-style:preserve-3d}.Notebook .NotebookComment:hover{--notebook-comment-background-opacity:0.5}.Notebook .NotebookComment:after{background:var(--primary-3000);content:"";inset:0;opacity:var(--notebook-comment-background-opacity);position:absolute;z-index:-1}.Notebook .InsightVizDisplay .InsightDisplayConfig{border-bottom-width:0;padding:0}',""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/notebooks/NotebookPanel/NotebookPanel.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".NotebookPanel{background-color:var(--accent-3000);display:flex;flex:1;flex-direction:column;overflow:hidden}.NotebookPanel .NotebookPanelDropzone{border:2px dashed var(--border-3000);border-radius:var(--radius);display:flex;height:4rem;margin:.5rem;transition:all .15s}.NotebookPanel .NotebookPanelDropzone .NotebookPanelDropzone__message{align-items:center;background-color:var(--bg-light);color:var(--muted-alt);display:flex;flex:1;flex-direction:column;font-size:1rem;font-weight:700;justify-content:center;opacity:.75;padding:1rem;pointer-events:none;text-align:center;transition:all .15s}.NotebookPanel .NotebookPanelDropzone .NotebookPanelDropzone__dropped{display:flex;flex:1;flex-direction:column;overflow:hidden}.NotebookPanel .NotebookPanelDropzone--active{border-color:var(--primary-3000);height:8rem}.NotebookPanel .NotebookPanelDropzone--active .NotebookPanelDropzone__message{opacity:1}.NotebookPanel .NotebookPanelDropzone--dropped{align-items:normal;border:none;height:100%;justify-content:flex-start;margin:1rem}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/notebooks/NotebookScene.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".Navigation3000 .NotebookScene{inset:0;overflow-y:auto;padding:0 1rem;position:absolute}.NotebookScene .ProseMirror>.react-renderer{scroll-margin-top:65px}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/notebooks/Suggestions/FloatingSuggestions.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".FloatingSuggestion{height:1.375rem;position:absolute}.NotebookFloatingButton{left:0;position:absolute;z-index:var(--z-popover)}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/paths/Paths.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".Paths{height:720px;max-height:100%;overflow-y:hidden;position:relative;width:100%}.Paths .Paths__canvas{height:100%!important;width:100%}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/persons/PersonDisplay.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".PersonDisplay{display:inline}.PersonDisplay .ProfilePicture{margin-right:.5rem;transition:opacity .2s ease}.PersonDisplay a:hover .ProfilePicture{opacity:.75}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/retention/RetentionTable.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".RetentionTable{--retention-table-color:var(--primary-3000);font-weight:500;width:100%}.RetentionTable th{border-bottom:10px solid transparent;border-left:1px solid var(--border);border-top:10px solid transparent;font-weight:500;padding:0 .5rem;text-align:left;white-space:nowrap}.RetentionTable th:first-of-type{border-left:none}.RetentionTable tr{border-left:.25rem solid transparent}.RetentionTable tr:not(:nth-of-type(-n+2)){cursor:pointer}.RetentionTable tr:not(:nth-of-type(-n+2)):hover{border-left-color:var(--retention-table-color)}.RetentionTable .RetentionTable__TextTab{padding:0 1rem 0 .5rem;white-space:nowrap}.RetentionTable .RetentionTable__Tab{background-color:var(--retention-table-color);border-radius:var(--radius);margin:2px;min-height:2rem;padding:.5rem;text-align:right}.RetentionTable .RetentionTable__Tab.RetentionTable__Tab--clickable{transition:transform .2s ease-out}.RetentionTable .RetentionTable__Tab.RetentionTable__Tab--clickable:hover{transform:scale(1.05)}.RetentionTable .RetentionTable__Tab.RetentionTable__Tab--period{background-color:var(--bg-light);border-style:solid;border:1px dashed var(--border);color:var(--muted)}.RetentionTable.RetentionTable--non-interactive tr:hover{border-left-color:transparent}.RetentionTable.RetentionTable--non-interactive .RetentionTable__Tab{cursor:auto}.RetentionTable.RetentionTable--non-interactive .RetentionTable__Tab:hover{transform:none}.RetentionTable.RetentionTable--small-layout{font-size:.75rem;line-height:1rem}.RetentionTable.RetentionTable--small-layout .RetentionTable__TextTab,.RetentionTable.RetentionTable--small-layout th{padding-left:.25rem;padding-right:.25rem}.RetentionTable.RetentionTable--small-layout .RetentionTable__Tab{margin:0;padding:.5rem .25rem}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/saved-insights/SavedInsights.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".saved-insights .new-insight-dropdown-btn{background-color:var(--primary-3000);border:1px solid var(--border);border-radius:var(--radius);color:#fff;cursor:pointer;height:40px;padding:8px 12px 8px 16px}.saved-insights .saved-insight-empty-state{align-items:center;display:flex;justify-content:center;text-align:center}.saved-insights .saved-insight-empty-state .insight-empty-state__wrapper{margin-bottom:17rem;margin-top:5rem;max-width:600px}.saved-insights .saved-insight-empty-state .insight-empty-state__wrapper .illustration-main{color:var(--border);font-size:5rem;line-height:1em;margin-bottom:1rem;text-align:center}.saved-insights .saved-insight-empty-state .insight-empty-state__wrapper .empty-state__title{font-size:1.5rem;font-weight:600;line-height:1.6rem}.saved-insights .saved-insight-empty-state .insight-empty-state__wrapper .empty-state__description{color:var(--muted);font-size:1rem;font-weight:500;line-height:1.7rem}.new-insight-overlay{width:21rem}.insight-type-icon-wrapper{align-items:center;display:flex}.insight-type-icon-wrapper .icon-container{height:22px;margin-right:8px;position:relative;width:22px}.insight-type-icon-wrapper .icon-container .icon-container-inner{font-size:22px;margin-left:-2px}.saved-insights-grid{display:grid;position:relative;grid-gap:1rem}@media screen and (min-width:1200px){.saved-insights-grid{grid-template-columns:repeat(2,1fr)}}@media screen and (min-width:1600px){.saved-insights-grid{grid-template-columns:repeat(3,1fr)}}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/session-recordings/apm/NetworkView.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".NetworkView .NetworkView__table table{table-layout:fixed}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/session-recordings/player/PlayerFrame.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,'.PlayerFrame{align-items:center;background-color:var(--bg-3000-dark);display:flex;height:100%;justify-content:center;overflow:hidden;position:relative;width:100%}.PlayerFrame .PlayerFrame__content{position:absolute}.PlayerFrame .PlayerFrame__content iframe{background-color:#fff;border:0}.PlayerFrame .PlayerFrame__content .replayer-wrapper{position:relative}.PlayerFrame .PlayerFrame__content .replayer-mouse{background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMDAiIGhlaWdodD0iMzAwIiBkYXRhLW5hbWU9IkxheWVyIDEiIHZpZXdCb3g9IjAgMCA1MCA1MCI+PHBhdGggZD0iTTQ4LjcxIDQyLjkxIDM0LjA4IDI4LjI5IDQ0LjMzIDE4YTEgMSAwIDAgMC0uMzMtMS42MUwyLjM1IDEuMDZhMSAxIDAgMCAwLTEuMjkgMS4yOUwxNi4zOSA0NGExIDEgMCAwIDAgMS42NS4zNmwxMC4yNS0xMC4yOCAxNC42MiAxNC42M2ExIDEgMCAwIDAgMS40MSAwbDQuMzgtNC4zOGExIDEgMCAwIDAgLjAxLTEuNDJtLTUuMDkgMy42N0wyOSAzMmExIDEgMCAwIDAtMS40MSAwbC05Ljg1IDkuODVMMy42OSAzLjY5bDM4LjEyIDE0TDMyIDI3LjU4QTEgMSAwIDAgMCAzMiAyOWwxNC41OSAxNC42MloiLz48L3N2Zz4=");background-position:50%;background-repeat:no-repeat;background-size:contain;border-color:transparent;height:20px;position:absolute;transition:left .05s linear,top .05s linear;width:20px}.PlayerFrame .PlayerFrame__content .replayer-mouse:after{background:#4950f6;border-radius:100%;content:"";display:inline-block;height:20px;opacity:.3;transform:translate(-50%,-50%);width:20px}.PlayerFrame .PlayerFrame__content .replayer-mouse.active:after{animation:PlayerFrame__click .2s ease-in-out 1}.PlayerFrame .PlayerFrame__content .replayer-mouse.touch-device{background-image:none;border:4px solid rgba(73,80,246,0);border-radius:100%;height:70px;margin-left:-37px;margin-top:-37px;transition:left 0s linear,top 0s linear,border-color .2s ease-in-out;width:70px}.PlayerFrame .PlayerFrame__content .replayer-mouse.touch-device.touch-active{border-color:#4950f6;transition:left .25s linear,top .25s linear,border-color .2s ease-in-out}.PlayerFrame .PlayerFrame__content .replayer-mouse.touch-device:after{opacity:0}.PlayerFrame .PlayerFrame__content .replayer-mouse.touch-device.active:after{animation:PlayerFrame__touch-click .2s ease-in-out 1}.PlayerFrame .PlayerFrame__content .replayer-mouse-tail{pointer-events:none;position:absolute}@keyframes PlayerFrame__click{0%{height:20px;opacity:.3;width:20px}50%{height:10px;opacity:.5;width:10px}}@keyframes PlayerFrame__touch-click{0%{height:20px;opacity:0;width:20px}50%{height:10px;opacity:.5;width:10px}}',""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/session-recordings/player/PlayerFrameOverlay.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".PlayerFrameOverlay{inset:0;position:absolute;z-index:10}.PlayerFrameOverlay .PlayerFrameOverlay__content{align-items:center;background-color:rgba(0,0,0,.15);display:flex;inset:0;justify-content:center;opacity:.8;position:absolute;transition:opacity .1s;z-index:1}.PlayerFrameOverlay .PlayerFrameOverlay__content:hover{opacity:1}.PlayerFrameOverlay .PlayerFrameOverlay__content--only-hover{opacity:0}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/session-recordings/player/PlayerMeta.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".PlayerMeta{display:flex;flex-direction:column;flex-shrink:0;overflow:hidden;position:relative}.PlayerMeta .PlayerMetaPersonProperties{background:var(--bg-3000);border-bottom:1px solid transparent;overflow:auto;padding:.5rem}.PlayerMeta:not(.PlayerMeta--fullscreen) .PlayerMetaPersonProperties{transition:height .2s ease-out,border-bottom-color .2s ease-out}.PlayerMeta:not(.PlayerMeta--fullscreen) .PlayerMetaPersonProperties--enter{height:0}.PlayerMeta:not(.PlayerMeta--fullscreen) .PlayerMetaPersonProperties--enter-active,.PlayerMeta:not(.PlayerMeta--fullscreen) .PlayerMetaPersonProperties--enter-done,.PlayerMeta:not(.PlayerMeta--fullscreen) .PlayerMetaPersonProperties--exit{border-bottom-color:var(--border);height:14rem}.PlayerMeta:not(.PlayerMeta--fullscreen) .PlayerMetaPersonProperties--exit-active{height:0}.LemonModal .PlayerMeta:not(.PlayerMeta--fullscreen) .PlayerMeta__top{padding-right:3.5rem!important}.PlayerMeta--fullscreen{align-items:center;flex-direction:row;height:48px;justify-content:space-between}.PlayerMeta--fullscreen .PlayerMetaPersonProperties{border-right:1px solid var(--border);bottom:97px;left:0;max-width:40rem;position:fixed;top:48px;transition:transform .2s ease-out;width:100%;z-index:1}.PlayerMeta--fullscreen .PlayerMetaPersonProperties--enter{transform:translateX(-100%)}.PlayerMeta--fullscreen .PlayerMetaPersonProperties--enter-active,.PlayerMeta--fullscreen .PlayerMetaPersonProperties--enter-done,.PlayerMeta--fullscreen .PlayerMetaPersonProperties--exit{transform:translateX(0)}.PlayerMeta--fullscreen .PlayerMetaPersonProperties--exit-active{transform:translateX(-100%)}.PlayerMeta .Link{color:var(--text-3000)}.PlayerMeta .Link:hover{color:var(--primary-3000)}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/session-recordings/player/PlayerUpNext.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".PlayerUpNext{bottom:1rem;position:absolute;right:1rem;transition:transform .25s ease-out;z-index:11}.PlayerUpNext--enter{transform:translateY(200%)}.PlayerUpNext--enter-active,.PlayerUpNext--enter-done,.PlayerUpNext--exit{transform:translateY(0)}.PlayerUpNext--exit-active{transform:translateY(200%)}.PlayerUpNextButton{align-items:center;-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);background-color:hsla(0,0%,100%,.75);border:1px solid rgba(0,0,0,.5);border-radius:var(--radius);box-shadow:var(--shadow-elevation-3000);cursor:pointer;display:flex;font-weight:600;line-height:1.5rem;min-height:2.5rem;overflow:hidden;padding:.25rem .75rem;position:relative}.PlayerUpNextButton .PlayerUpNextButtonBackground{background-color:var(--bg-light);bottom:0;color:var(--primary-alt);left:0;position:absolute;top:0;width:0}.PlayerUpNextButton.PlayerUpNextButton--animating .PlayerUpNextButtonBackground{animation:PlayerUpNextButtonBackground__expand 3s linear forwards}.PlayerUpNextButton:hover .PlayerUpNextButtonBackground{animation:none;width:100%}@keyframes PlayerUpNextButtonBackground__expand{0%{width:0}to{width:100%}}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/session-recordings/player/SessionRecordingPlayer.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".SessionRecordingPlayer{background-color:var(--bg-light);border:1px solid var(--border);border-radius:var(--radius);display:flex;flex-direction:row;height:100%;overflow:hidden;position:relative;width:100%}.SessionRecordingPlayer--no-border{border:none;border-radius:0}.SessionRecordingPlayer .SessionRecordingPlayer__body{background-color:var(--bg-light);height:100%;min-width:1px;overflow:hidden;position:relative;z-index:0}.SessionRecordingPlayer .SessionRecordingPlayer__main{flex:1}.SessionRecordingPlayer--fullscreen{background-color:var(--bg-light);border:none;border-radius:0;inset:0;overflow-y:auto;position:fixed;z-index:var(--z-modal)}.SessionRecordingPlayer--fullscreen .SessionRecordingPlayer__body{border-radius:0;height:100%;margin:0}.SessionRecordingPlayer .SessionRecordingPlayer__main,.SessionRecordingPlayer .SessionRecordingPlayer__sidebar{display:flex;flex-direction:column;overflow:hidden}.LemonModal .SessionRecordingPlayer .SessionRecordingPlayer__body{height:calc(90vh - 15rem)}.SessionRecordingPlayer .SessionRecordingPlayer__sidebar{flex-shrink:0;max-width:50%;min-width:20rem;position:relative}.SessionRecordingPlayer .SessionRecordingPlayer__sidebar--collapsed{min-width:0}.SessionRecordingPlayer .SessionRecordingPlayer__sidebar__tabs .LemonTabs__tab-content{padding:10px 0}.SessionRecordingPlayer--stacked-vertically{flex-direction:column}.SessionRecordingPlayer--stacked-vertically .SessionRecordingPlayer__sidebar{max-height:60%;max-width:100%;min-width:100%}.PlayerControlSeekIcon{display:flex;position:relative}.PlayerControlSeekIcon .PlayerControlSeekIcon__seconds{align-items:center;display:flex;font-size:6px;font-weight:700;inset:0;justify-content:center;position:absolute;text-align:center}.PlayerControlSeekIcon .PlayerControlSeekIcon__icon{font-size:1.3rem}.PlayerControlSeekIcon .PlayerControlSeekIcon__icon--forward{transform:rotateY(180deg)}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/session-recordings/player/controller/Seekbar.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".PlayerSeekbar{--bar-height:4px;--slider-height:20px;--thumb-size:15px;display:flex;height:var(--slider-height);position:relative;width:100%}.PlayerSeekbar--scrubbing,.PlayerSeekbar:hover{--bar-height:8px}.PlayerSeekbar--scrubbing .PlayerSeekBarPreview,.PlayerSeekbar:hover .PlayerSeekBarPreview{opacity:1}.PlayerSeekbar .PlayerSeekbar__slider{background-color:var(--border-light);border-radius:var(--bar-height);cursor:pointer;height:var(--bar-height);left:0;position:absolute;right:0;top:calc((var(--slider-height) - var(--bar-height))/2);transition:height .15s ease-in-out,top .15s ease-in-out;z-index:2}.PlayerSeekbar .PlayerSeekbar__slider .PlayerSeekbar__bufferbar,.PlayerSeekbar .PlayerSeekbar__slider .PlayerSeekbar__currentbar,.PlayerSeekbar .PlayerSeekbar__slider .PlayerSeekbar__segments{height:100%;left:0;position:absolute;top:0;width:0}.PlayerSeekbar .PlayerSeekbar__slider .PlayerSeekbar__bufferbar{background-color:var(--border);border-radius:var(--bar-height);z-index:2}.PlayerSeekbar .PlayerSeekbar__slider .PlayerSeekbar__currentbar{background-color:var(--primary-3000);border-radius:var(--bar-height) 0 0 var(--bar-height);z-index:3}.PlayerSeekbar .PlayerSeekbar__slider .PlayerSeekbar__segments{height:100%;white-space:nowrap;width:100%;z-index:4}.PlayerSeekbar .PlayerSeekbar__slider .PlayerSeekbar__segments .PlayerSeekbar__segments__item{background-color:var(--bg-light);float:left;height:100%;opacity:.5}.PlayerSeekbar .PlayerSeekbar__slider .PlayerSeekbar__segments .PlayerSeekbar__segments__item--active{opacity:0}.PlayerSeekbar .PlayerSeekbar__slider .PlayerSeekbar__thumb{backface-visibility:hidden;background-color:var(--primary-3000);border:2px solid var(--bg-light);border-radius:50%;height:var(--thumb-size);margin-top:calc(var(--thumb-size)/2*-1);position:absolute;top:calc(var(--bar-height)/2);transition:top .15s ease-in-out;width:var(--thumb-size);z-index:5}.PlayerSeekbar .PlayerSeekBarPreview{bottom:100%;opacity:0;pointer-events:none;position:absolute;transition:opacity .15s ease-in-out;width:100%;z-index:6}.PlayerSeekbar .PlayerSeekBarPreview .PlayerSeekBarPreview__tooltip{width:100%}.PlayerSeekbar .PlayerSeekBarPreview .PlayerSeekBarPreview__tooltip .PlayerSeekBarPreview__tooltip__content{background-color:var(--tooltip-bg);border-radius:var(--radius);color:#fff;display:inline-block;font-size:.8rem;font-weight:600;margin-bottom:.5rem;padding:.1rem;transform:translateX(-50%)}.PlayerSeekbarTicks{height:.75rem;position:relative;width:100%;z-index:1}.PlayerSeekbarTicks .PlayerSeekbarTick{--tick-color:var(--muted-alt);--tick-width:3px;cursor:pointer;height:100%;position:absolute;top:0;transition:transform .15s ease-in-out}.PlayerSeekbarTicks .PlayerSeekbarTick--warning{--tick-color:var(--warning)}.PlayerSeekbarTicks .PlayerSeekbarTick--danger{--tick-color:var(--danger)}.PlayerSeekbarTicks .PlayerSeekbarTick--primary{--tick-color:var(--primary-3000)}.PlayerSeekbarTicks .PlayerSeekbarTick .PlayerSeekbarTick__line{background-color:var(--tick-color);border-radius:2px;height:100%;margin-left:calc(var(--tick-width)/2*-1);opacity:.5;position:absolute;width:var(--tick-width)}.PlayerSeekbarTicks .PlayerSeekbarTick .PlayerSeekbarTick__info{background-color:var(--tick-color);border-radius:var(--radius);bottom:100%;color:#fff;font-size:.8rem;margin-bottom:.25rem;max-width:20rem;opacity:0;padding:.25rem .5rem;position:absolute;transform:translateX(-50%);transition:opacity .15s ease-in-out;visibility:hidden;white-space:nowrap}.PlayerSeekbarTicks .PlayerSeekbarTick:hover{--tick-width:5px}.PlayerSeekbarTicks .PlayerSeekbarTick:hover .PlayerSeekbarTick__info{opacity:1;visibility:visible}.PlayerSeekbarTicks .PlayerSeekbarTick:hover .PlayerSeekbarTick__line{opacity:1}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/session-recordings/player/inspector/PlayerInspectorList.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,"#PlayerInspectorListMarker{background-color:var(--primary-3000);border-radius:var(--radius) 0 0 var(--radius);height:.5rem;margin-top:.25rem;pointer-events:none;position:absolute;right:0;top:0;transition:transform .2s linear;width:1rem;will-change:transform;z-index:1}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/session-recordings/player/view-explorer/SessionRecordingPlayerExplorer.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".SessionRecordingPlayerExplorer{display:flex;flex:1;flex-direction:column;height:100%;overflow:hidden;padding:.5rem}.SessionRecordingPlayerExplorer .SessionRecordingPlayerExplorer__wrapper{background-color:var(--text-3000);border:1px solid var(--border);flex:1;overflow:hidden;padding:.5rem}.SessionRecordingPlayerExplorer .SessionRecordingPlayerExplorer__wrapper .SessionRecordingPlayerExplorer__iframe{transform-origin:top left}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/settings/Settings.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".Settings{align-items:start;display:flex;gap:2rem;margin-top:0}.Settings .Settings__sections{flex-shrink:0;max-width:20rem;min-width:14rem;position:sticky;top:4rem;width:20%}.SidePanel3000 .Settings .Settings__sections{top:0}.Settings--compact{flex-direction:column;gap:0}.Settings--compact .Settings__sections{max-width:100%;min-width:100%;position:relative;width:100%}.LemonModal .Settings{margin-top:0}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/settings/organization/InviteModal.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".InviteModal__share_link{display:flex;overflow:scroll;white-space:nowrap;width:175px;-ms-overflow-style:none;scrollbar-width:none}.InviteModal__share_link::-webkit-scrollbar{display:none}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/surveys/EditSurvey.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".presentation-preview .CodeSnippet__actions{display:none}.SurveyForm .LemonCollapsePanel__header{background:var(--border-light)}.question-choice-open-ended-footer{background-color:var(--bg-3000);bottom:-5px;font-size:10px;left:6px;padding:0 5px;position:absolute}.SurveyQuestionDragHandle{color:var(--text-3000);cursor:move;font-size:1.2em;transform:rotate(90deg)}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/surveys/SurveyView.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".masonry-container{-moz-column-count:4;column-count:4;-moz-column-gap:10px;column-gap:10px}@media screen and (max-width:1024px){.masonry-container{-moz-column-count:2;column-count:2}}.masonry-item{box-sizing:border-box;display:grid;grid-template-rows:1fr auto;margin:0 0 10px;page-break-inside:avoid;-moz-column-break-inside:avoid;break-inside:avoid}.survey-view .survey-form{z-index:0!important}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/trends/persons-modal/PersonsModal.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".PersonsModal__tabs [role=tablist]{margin-bottom:0;padding:0 1rem}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/trends/viz/ActionsPie.scss":(module,exports,__webpack_require__)=>{(exports=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js")(!1)).push([module.id,".ActionsPie{display:flex;flex:1;flex-direction:row;gap:.5rem;height:100%;width:100%}.ActionsPie .ActionsPie__component{flex:1;min-width:33%;padding:1rem}.ActionsPie .ActionsPie__component .ActionsPie__chart{height:calc(100% - 4.5rem);position:relative;transition:height .5s;width:100%}.ActionsPie .ActionsPie__component h3{letter-spacing:-.025em}",""]),module.exports=exports},"./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/styles/global.scss":(module,exports,__webpack_require__)=>{var ___CSS_LOADER_API_IMPORT___=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/api.js"),___CSS_LOADER_GET_URL_IMPORT___=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/runtime/getUrl.js"),___CSS_LOADER_URL_IMPORT_0___=__webpack_require__("./frontend/public/Inter.woff2"),___CSS_LOADER_URL_IMPORT_1___=__webpack_require__("./frontend/public/Inter.woff");exports=___CSS_LOADER_API_IMPORT___(!1);var ___CSS_LOADER_URL_REPLACEMENT_0___=___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___),___CSS_LOADER_URL_REPLACEMENT_1___=___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_1___);exports.push([module.id,":root{--toastify-color-light:#fff;--toastify-color-dark:#121212;--toastify-color-info:#3498db;--toastify-color-success:#07bc0c;--toastify-color-warning:#f1c40f;--toastify-color-error:#e74c3c;--toastify-color-transparent:hsla(0,0%,100%,.7);--toastify-icon-color-info:var(--toastify-color-info);--toastify-icon-color-success:var(--toastify-color-success);--toastify-icon-color-warning:var(--toastify-color-warning);--toastify-icon-color-error:var(--toastify-color-error);--toastify-toast-width:320px;--toastify-toast-background:#fff;--toastify-toast-min-height:64px;--toastify-toast-max-height:800px;--toastify-font-family:sans-serif;--toastify-z-index:9999;--toastify-text-color-dark:#fff;--toastify-text-color-info:#fff;--toastify-text-color-success:#fff;--toastify-text-color-warning:#fff;--toastify-text-color-error:#fff;--toastify-spinner-color:#616161;--toastify-spinner-color-empty-area:#e0e0e0;--toastify-color-progress-light:linear-gradient(90deg,#4cd964,#5ac8fa,#007aff,#34aadc,#5856d6,#ff2d55);--toastify-color-progress-dark:#bb86fc}.Toastify__toast-container{box-sizing:border-box;color:#fff;padding:4px;position:fixed;-webkit-transform:translate3d(0,0,var(--toastify-z-index) px);width:var(--toastify-toast-width);z-index:var(--toastify-z-index)}.Toastify__toast-container--top-left{left:1em;top:1em}.Toastify__toast-container--top-center{left:50%;top:1em;transform:translateX(-50%)}.Toastify__toast-container--top-right{right:1em;top:1em}.Toastify__toast-container--bottom-left{bottom:1em;left:1em}.Toastify__toast-container--bottom-center{bottom:1em;left:50%;transform:translateX(-50%)}.Toastify__toast-container--bottom-right{bottom:1em;right:1em}@media only screen and (max-width:480px){.Toastify__toast-container{left:0;margin:0;padding:0;width:100vw}.Toastify__toast-container--top-center,.Toastify__toast-container--top-left,.Toastify__toast-container--top-right{top:0;transform:translateX(0)}.Toastify__toast-container--bottom-center,.Toastify__toast-container--bottom-left,.Toastify__toast-container--bottom-right{bottom:0;transform:translateX(0)}.Toastify__toast-container--rtl{left:auto;right:0}}.Toastify__toast{border-radius:4px;box-shadow:0 1px 10px 0 rgba(0,0,0,.1),0 2px 15px 0 rgba(0,0,0,.05);box-sizing:border-box;cursor:pointer;direction:ltr;display:flex;font-family:var(--toastify-font-family);justify-content:space-between;margin-bottom:1rem;max-height:var(--toastify-toast-max-height);min-height:var(--toastify-toast-min-height);overflow:hidden;padding:8px;position:relative}.Toastify__toast--rtl{direction:rtl}.Toastify__toast-body{align-items:center;display:flex;flex:1 1 auto;margin:auto 0;padding:6px}.Toastify__toast-body>div:last-child{flex:1}.Toastify__toast-icon{display:flex;flex-shrink:0;margin-inline-end:10px;width:20px}.Toastify--animate{animation-duration:.7s;animation-fill-mode:both}.Toastify--animate-icon{animation-duration:.3s;animation-fill-mode:both}@media only screen and (max-width:480px){.Toastify__toast{border-radius:0;margin-bottom:0}}.Toastify__toast-theme--dark{background:var(--toastify-color-dark);color:var(--toastify-text-color-dark)}.Toastify__toast-theme--colored.Toastify__toast--default,.Toastify__toast-theme--light{background:var(--toastify-color-light);color:var(--toastify-text-color-light)}.Toastify__toast-theme--colored.Toastify__toast--info{background:var(--toastify-color-info);color:var(--toastify-text-color-info)}.Toastify__toast-theme--colored.Toastify__toast--success{background:var(--toastify-color-success);color:var(--toastify-text-color-success)}.Toastify__toast-theme--colored.Toastify__toast--warning{background:var(--toastify-color-warning);color:var(--toastify-text-color-warning)}.Toastify__toast-theme--colored.Toastify__toast--error{background:var(--toastify-color-error);color:var(--toastify-text-color-error)}.Toastify__progress-bar-theme--light{background:var(--toastify-color-progress-light)}.Toastify__progress-bar-theme--dark{background:var(--toastify-color-progress-dark)}.Toastify__progress-bar--info{background:var(--toastify-color-progress-info)}.Toastify__progress-bar--success{background:var(--toastify-color-progress-success)}.Toastify__progress-bar--warning{background:var(--toastify-color-progress-warning)}.Toastify__progress-bar--error{background:var(--toastify-color-progress-error)}.Toastify__progress-bar-theme--colored.Toastify__progress-bar--error,.Toastify__progress-bar-theme--colored.Toastify__progress-bar--info,.Toastify__progress-bar-theme--colored.Toastify__progress-bar--success,.Toastify__progress-bar-theme--colored.Toastify__progress-bar--warning{background:var(--toastify-color-transparent)}.Toastify__close-button{align-self:flex-start;background:transparent;border:none;color:#fff;cursor:pointer;opacity:.7;outline:none;padding:0;transition:.3s ease}.Toastify__close-button--light{color:#000;opacity:.3}.Toastify__close-button>svg{fill:currentColor;height:16px;width:14px}.Toastify__close-button:focus,.Toastify__close-button:hover{opacity:1}@keyframes Toastify__trackProgress{0%{transform:scaleX(1)}to{transform:scaleX(0)}}.Toastify__progress-bar{bottom:0;height:5px;left:0;opacity:.7;position:absolute;transform-origin:left;width:100%;z-index:var(--toastify-z-index)}.Toastify__progress-bar--animated{animation:Toastify__trackProgress linear 1 forwards}.Toastify__progress-bar--controlled{transition:transform .2s}.Toastify__progress-bar--rtl{left:auto;right:0;transform-origin:right}.Toastify__spinner{animation:Toastify__spin .65s linear infinite;border:2px solid;border-color:var(--toastify-spinner-color-empty-area);border-radius:100%;border-right-color:var(--toastify-spinner-color);box-sizing:border-box;height:20px;width:20px}@keyframes Toastify__bounceInRight{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(3000px,0,0)}60%{opacity:1;transform:translate3d(-25px,0,0)}75%{transform:translate3d(10px,0,0)}90%{transform:translate3d(-5px,0,0)}to{transform:none}}@keyframes Toastify__bounceOutRight{20%{opacity:1;transform:translate3d(-20px,0,0)}to{opacity:0;transform:translate3d(2000px,0,0)}}@keyframes Toastify__bounceInLeft{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(-3000px,0,0)}60%{opacity:1;transform:translate3d(25px,0,0)}75%{transform:translate3d(-10px,0,0)}90%{transform:translate3d(5px,0,0)}to{transform:none}}@keyframes Toastify__bounceOutLeft{20%{opacity:1;transform:translate3d(20px,0,0)}to{opacity:0;transform:translate3d(-2000px,0,0)}}@keyframes Toastify__bounceInUp{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(0,3000px,0)}60%{opacity:1;transform:translate3d(0,-20px,0)}75%{transform:translate3d(0,10px,0)}90%{transform:translate3d(0,-5px,0)}to{transform:translateZ(0)}}@keyframes Toastify__bounceOutUp{20%{transform:translate3d(0,-10px,0)}40%,45%{opacity:1;transform:translate3d(0,20px,0)}to{opacity:0;transform:translate3d(0,-2000px,0)}}@keyframes Toastify__bounceInDown{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(0,-3000px,0)}60%{opacity:1;transform:translate3d(0,25px,0)}75%{transform:translate3d(0,-10px,0)}90%{transform:translate3d(0,5px,0)}to{transform:none}}@keyframes Toastify__bounceOutDown{20%{transform:translate3d(0,10px,0)}40%,45%{opacity:1;transform:translate3d(0,-20px,0)}to{opacity:0;transform:translate3d(0,2000px,0)}}.Toastify__bounce-enter--bottom-left,.Toastify__bounce-enter--top-left{animation-name:Toastify__bounceInLeft}.Toastify__bounce-enter--bottom-right,.Toastify__bounce-enter--top-right{animation-name:Toastify__bounceInRight}.Toastify__bounce-enter--top-center{animation-name:Toastify__bounceInDown}.Toastify__bounce-enter--bottom-center{animation-name:Toastify__bounceInUp}.Toastify__bounce-exit--bottom-left,.Toastify__bounce-exit--top-left{animation-name:Toastify__bounceOutLeft}.Toastify__bounce-exit--bottom-right,.Toastify__bounce-exit--top-right{animation-name:Toastify__bounceOutRight}.Toastify__bounce-exit--top-center{animation-name:Toastify__bounceOutUp}.Toastify__bounce-exit--bottom-center{animation-name:Toastify__bounceOutDown}@keyframes Toastify__zoomIn{0%{opacity:0;transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes Toastify__zoomOut{0%{opacity:1}50%{opacity:0;transform:scale3d(.3,.3,.3)}to{opacity:0}}.Toastify__zoom-enter{animation-name:Toastify__zoomIn}.Toastify__zoom-exit{animation-name:Toastify__zoomOut}@keyframes Toastify__flipIn{0%{animation-timing-function:ease-in;opacity:0;transform:perspective(400px) rotateX(90deg)}40%{animation-timing-function:ease-in;transform:perspective(400px) rotateX(-20deg)}60%{opacity:1;transform:perspective(400px) rotateX(10deg)}80%{transform:perspective(400px) rotateX(-5deg)}to{transform:perspective(400px)}}@keyframes Toastify__flipOut{0%{transform:perspective(400px)}30%{opacity:1;transform:perspective(400px) rotateX(-20deg)}to{opacity:0;transform:perspective(400px) rotateX(90deg)}}.Toastify__flip-enter{animation-name:Toastify__flipIn}.Toastify__flip-exit{animation-name:Toastify__flipOut}@keyframes Toastify__slideInRight{0%{transform:translate3d(110%,0,0);visibility:visible}to{transform:translateZ(0)}}@keyframes Toastify__slideInLeft{0%{transform:translate3d(-110%,0,0);visibility:visible}to{transform:translateZ(0)}}@keyframes Toastify__slideInUp{0%{transform:translate3d(0,110%,0);visibility:visible}to{transform:translateZ(0)}}@keyframes Toastify__slideInDown{0%{transform:translate3d(0,-110%,0);visibility:visible}to{transform:translateZ(0)}}@keyframes Toastify__slideOutRight{0%{transform:translateZ(0)}to{transform:translate3d(110%,0,0);visibility:hidden}}@keyframes Toastify__slideOutLeft{0%{transform:translateZ(0)}to{transform:translate3d(-110%,0,0);visibility:hidden}}@keyframes Toastify__slideOutDown{0%{transform:translateZ(0)}to{transform:translate3d(0,500px,0);visibility:hidden}}@keyframes Toastify__slideOutUp{0%{transform:translateZ(0)}to{transform:translate3d(0,-500px,0);visibility:hidden}}.Toastify__slide-enter--bottom-left,.Toastify__slide-enter--top-left{animation-name:Toastify__slideInLeft}.Toastify__slide-enter--bottom-right,.Toastify__slide-enter--top-right{animation-name:Toastify__slideInRight}.Toastify__slide-enter--top-center{animation-name:Toastify__slideInDown}.Toastify__slide-enter--bottom-center{animation-name:Toastify__slideInUp}.Toastify__slide-exit--bottom-left,.Toastify__slide-exit--top-left{animation-name:Toastify__slideOutLeft}.Toastify__slide-exit--bottom-right,.Toastify__slide-exit--top-right{animation-name:Toastify__slideOutRight}.Toastify__slide-exit--top-center{animation-name:Toastify__slideOutUp}.Toastify__slide-exit--bottom-center{animation-name:Toastify__slideOutDown}@keyframes Toastify__spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:700;src:url("+___CSS_LOADER_URL_REPLACEMENT_0___+') format("woff2"),url('+___CSS_LOADER_URL_REPLACEMENT_1___+') format("woff");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:500;src:url('+___CSS_LOADER_URL_REPLACEMENT_0___+') format("woff2"),url('+___CSS_LOADER_URL_REPLACEMENT_1___+') format("woff");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:400;src:url('+___CSS_LOADER_URL_REPLACEMENT_0___+') format("woff2"),url('+___CSS_LOADER_URL_REPLACEMENT_1___+') format("woff");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:MatterSQ;font-style:normal;font-weight:800;src:url(https://d1sdjtjk6xzm7.cloudfront.net/MatterSQ-Bold.woff2) format("woff2"),url(https://d1sdjtjk6xzm7.cloudfront.net/MatterSQ-Bold.woff) format("woff")}@font-face{font-display:swap;font-family:MatterSQ;font-style:normal;font-weight:700;src:url(https://d1sdjtjk6xzm7.cloudfront.net/MatterSQ-SemiBold.woff2) format("woff2"),url(https://d1sdjtjk6xzm7.cloudfront.net/MatterSQ-SemiBold.woff) format("woff")}@font-face{font-display:swap;font-family:MatterSQ;font-style:normal;font-weight:500;src:url(https://d1sdjtjk6xzm7.cloudfront.net/MatterSQ-Medium.woff2) format("woff2"),url(https://d1sdjtjk6xzm7.cloudfront.net/MatterSQ-Medium.woff) format("woff")}.\\!container{width:100%!important}.container{width:100%}@media (min-width:576px){.\\!container{max-width:576px!important}.container{max-width:576px}}@media (min-width:768px){.\\!container{max-width:768px!important}.container{max-width:768px}}@media (min-width:992px){.\\!container{max-width:992px!important}.container{max-width:992px}}@media (min-width:1200px){.\\!container{max-width:1200px!important}.container{max-width:1200px}}@media (min-width:1600px){.\\!container{max-width:1600px!important}.container{max-width:1600px}}/*! tailwindcss v3.4.0 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid;box-sizing:border-box}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:-apple-system,BlinkMacSystemFont,Inter,Segoe UI,Roboto,Helvetica Neue,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-feature-settings:normal;font-variation-settings:normal;-moz-tab-size:4;tab-size:4;-webkit-tap-highlight-color:transparent}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-feature-settings:normal;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{color:inherit;font-family:inherit;font-feature-settings:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.pointer-events-none{pointer-events:none!important}.pointer-events-auto{pointer-events:auto!important}.\\!visible,.visible{visibility:visible!important}.invisible{visibility:hidden!important}.collapse{visibility:collapse!important}.static{position:static!important}.fixed{position:fixed!important}.absolute{position:absolute!important}.relative{position:relative!important}.sticky{position:sticky!important}.-inset-2{inset:-.5rem!important}.inset-0{inset:0!important}.-bottom-px{bottom:-1px!important}.-left-4{left:-1rem!important}.-left-5{left:-1.25rem!important}.-top-10{top:-2.5rem!important}.-top-4{top:-1rem!important}.-top-px{top:-1px!important}.bottom-0{bottom:0!important}.bottom-0\\.5{bottom:.125rem!important}.bottom-1{bottom:.25rem!important}.bottom-2{bottom:.5rem!important}.bottom-3{bottom:.75rem!important}.left-0{left:0!important}.left-1{left:.25rem!important}.left-1\\/2{left:50%!important}.left-4{left:1rem!important}.right-0{right:0!important}.right-2{right:.5rem!important}.right-3{right:.75rem!important}.right-4{right:1rem!important}.top-0{top:0!important}.top-1\\/2{top:50%!important}.top-2{top:.5rem!important}.top-4{top:1rem!important}.top-\\[var\\(--breadcrumbs-height-compact\\)\\]{top:var(--breadcrumbs-height-compact)!important}.top-\\[var\\(--breadcrumbs-height-full\\)\\]{top:var(--breadcrumbs-height-full)!important}.isolate{isolation:isolate!important}.z-0{z-index:0!important}.z-10{z-index:10!important}.z-20{z-index:20!important}.z-50{z-index:50!important}.z-\\[1000\\]{z-index:1000!important}.z-\\[1\\]{z-index:1!important}.z-\\[2147483010\\]{z-index:2147483010!important}.z-\\[2147483021\\]{z-index:2147483021!important}.z-\\[7\\]{z-index:7!important}.col-span-1{grid-column:span 1/span 1!important}.col-span-2{grid-column:span 2/span 2!important}.col-span-3{grid-column:span 3/span 3!important}.col-span-4{grid-column:span 4/span 4!important}.col-span-6{grid-column:span 6/span 6!important}.col-span-8{grid-column:span 8/span 8!important}.col-span-full{grid-column:1/-1!important}.col-start-2{grid-column-start:2!important}.row-span-1{grid-row:span 1/span 1!important}.row-start-2{grid-row-start:2!important}.float-right{float:right!important}.-m-1{margin:-.25rem!important}.-m-1\\.5{margin:-.375rem!important}.-m-4{margin:-1rem!important}.-m-6{margin:-1.5rem!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-10{margin:2.5rem!important}.m-2{margin:.5rem!important}.m-3{margin:.75rem!important}.m-4{margin:1rem!important}.m-5{margin:1.25rem!important}.m-6{margin:1.5rem!important}.m-\\[-2px\\]{margin:-2px!important}.m-auto{margin:auto!important}.-mx-1{margin-left:-.25rem!important;margin-right:-.25rem!important}.-mx-2{margin-left:-.5rem!important;margin-right:-.5rem!important}.-my-1{margin-bottom:-.25rem!important;margin-top:-.25rem!important}.-my-5{margin-bottom:-1.25rem!important;margin-top:-1.25rem!important}.mx-0{margin-left:0!important;margin-right:0!important}.mx-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-10{margin-left:2.5rem!important;margin-right:2.5rem!important}.mx-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-3{margin-left:.75rem!important;margin-right:.75rem!important}.mx-4{margin-left:1rem!important;margin-right:1rem!important}.mx-auto{margin-left:auto!important;margin-right:auto!important}.my-0{margin-bottom:0!important;margin-top:0!important}.my-0\\.5{margin-bottom:.125rem!important;margin-top:.125rem!important}.my-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-10{margin-bottom:2.5rem!important;margin-top:2.5rem!important}.my-16{margin-bottom:4rem!important;margin-top:4rem!important}.my-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-2\\.5{margin-bottom:.625rem!important;margin-top:.625rem!important}.my-20{margin-bottom:5rem!important;margin-top:5rem!important}.my-3{margin-bottom:.75rem!important;margin-top:.75rem!important}.my-4{margin-bottom:1rem!important;margin-top:1rem!important}.my-6{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-8{margin-bottom:2rem!important;margin-top:2rem!important}.my-auto{margin-bottom:auto!important;margin-top:auto!important}.-mb-12{margin-bottom:-3rem!important}.-mb-14{margin-bottom:-3.5rem!important}.-mb-6{margin-bottom:-1.5rem!important}.-mr-0{margin-right:0!important}.-mr-0\\.5{margin-right:-.125rem!important}.-mr-1{margin-right:-.25rem!important}.-mr-2{margin-right:-.5rem!important}.-mt-1{margin-top:-.25rem!important}.-mt-14{margin-top:-3.5rem!important}.-mt-2{margin-top:-.5rem!important}.-mt-4{margin-top:-1rem!important}.-mt-8{margin-top:-2rem!important}.mb-0{margin-bottom:0!important}.mb-0\\.5{margin-bottom:.125rem!important}.mb-1{margin-bottom:.25rem!important}.mb-1\\.5{margin-bottom:.375rem!important}.mb-10{margin-bottom:2.5rem!important}.mb-12{margin-bottom:3rem!important}.mb-16{margin-bottom:4rem!important}.mb-2{margin-bottom:.5rem!important}.mb-2\\.5{margin-bottom:.625rem!important}.mb-3{margin-bottom:.75rem!important}.mb-4{margin-bottom:1rem!important}.mb-5{margin-bottom:1.25rem!important}.mb-6{margin-bottom:1.5rem!important}.mb-8{margin-bottom:2rem!important}.ml-0{margin-left:0!important}.ml-0\\.5{margin-left:.125rem!important}.ml-1{margin-left:.25rem!important}.ml-1\\.5{margin-left:.375rem!important}.ml-10{margin-left:2.5rem!important}.ml-11{margin-left:2.75rem!important}.ml-2{margin-left:.5rem!important}.ml-3{margin-left:.75rem!important}.ml-4{margin-left:1rem!important}.ml-5{margin-left:1.25rem!important}.ml-8{margin-left:2rem!important}.ml-9{margin-left:2.25rem!important}.ml-auto{margin-left:auto!important}.mr-0{margin-right:0!important}.mr-0\\.5{margin-right:.125rem!important}.mr-1{margin-right:.25rem!important}.mr-1\\.5{margin-right:.375rem!important}.mr-2{margin-right:.5rem!important}.mr-20{margin-right:5rem!important}.mr-3{margin-right:.75rem!important}.mr-4{margin-right:1rem!important}.mr-5{margin-right:1.25rem!important}.mr-6{margin-right:1.5rem!important}.mr-8{margin-right:2rem!important}.mr-auto{margin-right:auto!important}.mt-0{margin-top:0!important}.mt-0\\.5{margin-top:.125rem!important}.mt-1{margin-top:.25rem!important}.mt-1\\.5{margin-top:.375rem!important}.mt-10{margin-top:2.5rem!important}.mt-12{margin-top:3rem!important}.mt-16{margin-top:4rem!important}.mt-2{margin-top:.5rem!important}.mt-2\\.5{margin-top:.625rem!important}.mt-20{margin-top:5rem!important}.mt-3{margin-top:.75rem!important}.mt-4{margin-top:1rem!important}.mt-5{margin-top:1.25rem!important}.mt-6{margin-top:1.5rem!important}.mt-8{margin-top:2rem!important}.mt-auto{margin-top:auto!important}.box-content{box-sizing:initial!important}.line-clamp-1{-webkit-line-clamp:1!important}.line-clamp-1,.line-clamp-2{display:-webkit-box!important;overflow:hidden!important;-webkit-box-orient:vertical!important}.line-clamp-2{-webkit-line-clamp:2!important}.block{display:block!important}.inline-block{display:inline-block!important}.inline{display:inline!important}.flex{display:flex!important}.inline-flex{display:inline-flex!important}.\\!table,.table{display:table!important}.grid{display:grid!important}.inline-grid{display:inline-grid!important}.\\!contents,.contents{display:contents!important}.hidden{display:none!important}.size-16{height:4rem!important;width:4rem!important}.size-20{height:5rem!important;width:5rem!important}.size-3{height:.75rem!important;width:.75rem!important}.size-4{height:1rem!important;width:1rem!important}.size-5{height:1.25rem!important;width:1.25rem!important}.size-6{height:1.5rem!important;width:1.5rem!important}.size-\\[18px\\]{height:18px!important;width:18px!important}.size-\\[400\\%\\]{height:400%!important;width:400%!important}.size-full{height:100%!important;width:100%!important}.h-0{height:0!important}.h-1{height:.25rem!important}.h-1\\.5{height:.375rem!important}.h-10{height:2.5rem!important}.h-100{height:25rem!important}.h-12{height:3rem!important}.h-120{height:30rem!important}.h-14{height:3.5rem!important}.h-15{height:3.75rem!important}.h-16{height:4rem!important}.h-2{height:.5rem!important}.h-2\\.5{height:.625rem!important}.h-20{height:5rem!important}.h-24{height:6rem!important}.h-3{height:.75rem!important}.h-3\\.5{height:.875rem!important}.h-30{height:7.5rem!important}.h-4{height:1rem!important}.h-40{height:10rem!important}.h-5{height:1.25rem!important}.h-50{height:12.5rem!important}.h-52{height:13rem!important}.h-6{height:1.5rem!important}.h-60{height:15rem!important}.h-7{height:1.75rem!important}.h-8{height:2rem!important}.h-80{height:20rem!important}.h-9{height:2.25rem!important}.h-96{height:24rem!important}.h-\\[100vh\\]{height:100vh!important}.h-\\[180px\\]{height:180px!important}.h-\\[200px\\]{height:200px!important}.h-\\[222px\\]{height:222px!important}.h-\\[300px\\]{height:300px!important}.h-\\[30rem\\]{height:30rem!important}.h-\\[33px\\]{height:33px!important}.h-\\[360px\\]{height:360px!important}.h-\\[50vh\\]{height:50vh!important}.h-\\[80\\%\\]{height:80%!important}.h-\\[80vh\\]{height:80vh!important}.h-\\[90vh\\]{height:90vh!important}.h-\\[calc\\(100vh-var\\(--breadcrumbs-height-full\\)-2\\*var\\(--scene-padding\\)\\)\\]{height:calc(100vh - var(--breadcrumbs-height-full) - var(--scene-padding)*2)!important}.h-auto{height:auto!important}.h-fit{height:-moz-fit-content!important;height:fit-content!important}.h-full{height:100%!important}.h-px{height:1px!important}.h-screen{height:100vh!important}.max-h-140{max-height:35rem!important}.max-h-16{max-height:4rem!important}.max-h-200{max-height:50rem!important}.max-h-60{max-height:15rem!important}.max-h-64{max-height:16rem!important}.max-h-80{max-height:20rem!important}.max-h-\\[100vh\\]{max-height:100vh!important}.max-h-\\[80vh\\]{max-height:80vh!important}.max-h-full{max-height:100%!important}.min-h-10{min-height:2.5rem!important}.min-h-100{min-height:25rem!important}.min-h-120{min-height:30rem!important}.min-h-16{min-height:4rem!important}.min-h-20{min-height:5rem!important}.min-h-24{min-height:6rem!important}.min-h-30{min-height:7.5rem!important}.min-h-4{min-height:1rem!important}.min-h-40{min-height:10rem!important}.min-h-50{min-height:12.5rem!important}.min-h-56{min-height:14rem!important}.min-h-6{min-height:1.5rem!important}.min-h-60{min-height:15rem!important}.min-h-8{min-height:2rem!important}.min-h-\\[30rem\\]{min-height:30rem!important}.min-h-\\[32rem\\]{min-height:32rem!important}.min-h-\\[420px\\]{min-height:420px!important}.min-h-\\[42px\\]{min-height:42px!important}.min-h-\\[80vh\\]{min-height:80vh!important}.w-0{width:0!important}.w-1\\/2{width:50%!important}.w-1\\/3{width:33.333333%!important}.w-1\\/4{width:25%!important}.w-1\\/6{width:16.666667%!important}.w-10{width:2.5rem!important}.w-100{width:25rem!important}.w-12{width:3rem!important}.w-120{width:30rem!important}.w-14{width:3.5rem!important}.w-140{width:35rem!important}.w-15{width:3.75rem!important}.w-16{width:4rem!important}.w-160{width:40rem!important}.w-18{width:4.5rem!important}.w-192{width:48rem!important}.w-2{width:.5rem!important}.w-2\\.5{width:.625rem!important}.w-2\\/3{width:66.666667%!important}.w-2\\/5{width:40%!important}.w-20{width:5rem!important}.w-200{width:50rem!important}.w-24{width:6rem!important}.w-28{width:7rem!important}.w-3{width:.75rem!important}.w-3\\.5{width:.875rem!important}.w-3\\/4{width:75%!important}.w-3\\/5{width:60%!important}.w-30{width:7.5rem!important}.w-32{width:8rem!important}.w-4{width:1rem!important}.w-40{width:10rem!important}.w-44{width:11rem!important}.w-48{width:12rem!important}.w-5{width:1.25rem!important}.w-5\\/6{width:83.333333%!important}.w-50{width:12.5rem!important}.w-52{width:13rem!important}.w-6{width:1.5rem!important}.w-60{width:15rem!important}.w-64{width:16rem!important}.w-7{width:1.75rem!important}.w-8{width:2rem!important}.w-80{width:20rem!important}.w-\\[12\\.5\\%\\]{width:12.5%!important}.w-\\[12rem\\]{width:12rem!important}.w-\\[15\\%\\]{width:15%!important}.w-\\[200px\\]{width:200px!important}.w-\\[20px\\]{width:20px!important}.w-\\[24rem\\]{width:24rem!important}.w-\\[350px\\]{width:350px!important}.w-\\[500px\\]{width:500px!important}.w-\\[50vw\\]{width:50vw!important}.w-\\[min\\(40rem\\2c 100\\%\\)\\]{width:min(40rem,100%)!important}.w-auto{width:auto!important}.w-fit{width:-moz-fit-content!important;width:fit-content!important}.w-full{width:100%!important}.w-max{width:-moz-max-content!important;width:max-content!important}.w-px{width:1px!important}.min-w-0{min-width:0!important}.min-w-1{min-width:.25rem!important}.min-w-1\\.5{min-width:.375rem!important}.min-w-1\\/3{min-width:33.333333%!important}.min-w-100{min-width:25rem!important}.min-w-120{min-width:30rem!important}.min-w-16{min-width:4rem!important}.min-w-30{min-width:7.5rem!important}.min-w-32{min-width:8rem!important}.min-w-44{min-width:11rem!important}.min-w-5{min-width:1.25rem!important}.min-w-50{min-width:12.5rem!important}.min-w-6{min-width:1.5rem!important}.min-w-60{min-width:15rem!important}.min-w-64{min-width:16rem!important}.min-w-80{min-width:20rem!important}.min-w-96{min-width:24rem!important}.min-w-\\[0\\.5rem\\]{min-width:.5rem!important}.min-w-\\[10rem\\]{min-width:10rem!important}.min-w-\\[12\\.5rem\\]{min-width:12.5rem!important}.min-w-\\[15rem\\]{min-width:15rem!important}.min-w-\\[1rem\\]{min-width:1rem!important}.min-w-\\[200px\\]{min-width:200px!important}.min-w-\\[20rem\\]{min-width:20rem!important}.min-w-\\[25rem\\]{min-width:25rem!important}.min-w-\\[2rem\\]{min-width:2rem!important}.min-w-\\[300px\\]{min-width:300px!important}.min-w-\\[40rem\\]{min-width:40rem!important}.min-w-\\[50rem\\]{min-width:50rem!important}.min-w-\\[5rem\\]{min-width:5rem!important}.min-w-\\[7\\.5rem\\]{min-width:7.5rem!important}.min-w-full{min-width:100%!important}.max-w-1\\/2{max-width:50%!important}.max-w-100{max-width:25rem!important}.max-w-120{max-width:30rem!important}.max-w-140{max-width:35rem!important}.max-w-160{max-width:40rem!important}.max-w-192{max-width:48rem!important}.max-w-20{max-width:5rem!important}.max-w-200{max-width:50rem!important}.max-w-24{max-width:6rem!important}.max-w-248{max-width:62rem!important}.max-w-28{max-width:7rem!important}.max-w-2xl{max-width:42rem!important}.max-w-30{max-width:7.5rem!important}.max-w-300{max-width:75rem!important}.max-w-40{max-width:10rem!important}.max-w-44{max-width:11rem!important}.max-w-48{max-width:12rem!important}.max-w-4xl{max-width:56rem!important}.max-w-50{max-width:12.5rem!important}.max-w-52{max-width:13rem!important}.max-w-56{max-width:14rem!important}.max-w-60{max-width:15rem!important}.max-w-64{max-width:16rem!important}.max-w-6xl{max-width:72rem!important}.max-w-72{max-width:18rem!important}.max-w-80{max-width:20rem!important}.max-w-96{max-width:24rem!important}.max-w-\\[30rem\\]{max-width:30rem!important}.max-w-\\[50rem\\]{max-width:50rem!important}.max-w-\\[60vw\\]{max-width:60vw!important}.max-w-\\[90\\%\\]{max-width:90%!important}.max-w-\\[920px\\]{max-width:920px!important}.max-w-full{max-width:100%!important}.max-w-lg{max-width:32rem!important}.max-w-max{max-width:-moz-max-content!important;max-width:max-content!important}.max-w-md{max-width:28rem!important}.max-w-none{max-width:none!important}.max-w-screen-md{max-width:768px!important}.max-w-screen-xl{max-width:1200px!important}.max-w-sm{max-width:24rem!important}.max-w-xl{max-width:36rem!important}.max-w-xs{max-width:20rem!important}.flex-1{flex:1 1 0%!important}.flex-2{flex:2 2 0%!important}.flex-auto{flex:1 1 auto!important}.flex-none{flex:none!important}.flex-shrink{flex-shrink:1!important}.flex-shrink-0{flex-shrink:0!important}.shrink{flex-shrink:1!important}.shrink-0{flex-shrink:0!important}.flex-grow,.grow{flex-grow:1!important}.grow-0{flex-grow:0!important}.grow-\\[1000\\]{flex-grow:1000!important}.basis-full{flex-basis:100%!important}.table-auto{table-layout:auto!important}.table-fixed{table-layout:fixed!important}.border-collapse{border-collapse:collapse!important}.border-spacing-2{--tw-border-spacing-x:0.5rem!important;--tw-border-spacing-y:0.5rem!important;border-spacing:var(--tw-border-spacing-x) var(--tw-border-spacing-y)!important}.origin-top-left{transform-origin:top left!important}.-translate-x-1\\/2{--tw-translate-x:-50%!important}.-translate-x-1\\/2,.-translate-y-1\\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.-translate-y-1\\/2{--tw-translate-y:-50%!important}.-translate-y-2{--tw-translate-y:-0.5rem!important}.-translate-y-2,.translate-x-\\[-3\\%\\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.translate-x-\\[-3\\%\\]{--tw-translate-x:-3%!important}.translate-x-\\[-50\\%\\]{--tw-translate-x:-50%!important}.translate-x-\\[-50\\%\\],.translate-y-10{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.translate-y-10{--tw-translate-y:2.5rem!important}.translate-y-2{--tw-translate-y:0.5rem!important}.translate-y-2,.translate-y-\\[10\\%\\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.translate-y-\\[10\\%\\]{--tw-translate-y:10%!important}.-rotate-90{--tw-rotate:-90deg!important}.-rotate-90,.rotate-270{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.rotate-270{--tw-rotate:270deg!important}.rotate-90{--tw-rotate:90deg!important}.rotate-90,.scale-90{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.scale-90{--tw-scale-x:.9!important;--tw-scale-y:.9!important}.scale-\\[0\\.8\\]{--tw-scale-x:0.8!important;--tw-scale-y:0.8!important}.scale-\\[0\\.8\\],.scale-\\[1\\.8\\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.scale-\\[1\\.8\\]{--tw-scale-x:1.8!important;--tw-scale-y:1.8!important}.scale-x-\\[-1\\]{--tw-scale-x:-1!important}.scale-x-\\[-1\\],.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}@keyframes pulse{50%{opacity:.5}}.animate-\\[pulse_1s_ease-out_infinite\\]{animation:pulse 1s ease-out infinite!important}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}.animate-ping{animation:ping 1s cubic-bezier(0,0,.2,1) infinite!important}.cursor-auto{cursor:auto!important}.cursor-default{cursor:default!important}.cursor-grab{cursor:grab!important}.cursor-grabbing{cursor:grabbing!important}.cursor-help{cursor:help!important}.cursor-move{cursor:move!important}.cursor-not-allowed{cursor:not-allowed!important}.cursor-pointer{cursor:pointer!important}.cursor-s-resize{cursor:s-resize!important}.cursor-text{cursor:text!important}.cursor-zoom-in{cursor:zoom-in!important}.select-none{-webkit-user-select:none!important;-moz-user-select:none!important;user-select:none!important}.select-text{-webkit-user-select:text!important;-moz-user-select:text!important;user-select:text!important}.resize-y{resize:vertical!important}.resize{resize:both!important}.list-inside{list-style-position:inside!important}.list-disc{list-style-type:disc!important}.list-none{list-style-type:none!important}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))!important}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))!important}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))!important}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))!important}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))!important}.grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))!important}.grid-cols-\\[min-content_auto\\]{grid-template-columns:min-content auto!important}.grid-cols-\\[repeat\\(2\\2c _minmax\\(min-content\\2c _160px\\)\\)\\]{grid-template-columns:repeat(2,minmax(min-content,160px))!important}.grid-rows-\\[160px\\]{grid-template-rows:160px!important}.grid-rows-\\[repeat\\(2\\2c _48px\\)\\]{grid-template-rows:repeat(2,48px)!important}.flex-row{flex-direction:row!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-col{flex-direction:column!important}.flex-wrap{flex-wrap:wrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-nowrap{flex-wrap:nowrap!important}.place-items-center{place-items:center!important}.items-start{align-items:flex-start!important}.items-end{align-items:flex-end!important}.items-center{align-items:center!important}.items-baseline{align-items:baseline!important}.items-stretch{align-items:stretch!important}.justify-start{justify-content:flex-start!important}.justify-end{justify-content:flex-end!important}.justify-center{justify-content:center!important}.justify-between{justify-content:space-between!important}.justify-around{justify-content:space-around!important}.justify-items-center{justify-items:center!important}.gap-0{gap:0!important}.gap-0\\.5{gap:.125rem!important}.gap-1{gap:.25rem!important}.gap-1\\.5{gap:.375rem!important}.gap-10{gap:2.5rem!important}.gap-2{gap:.5rem!important}.gap-2\\.5{gap:.625rem!important}.gap-3{gap:.75rem!important}.gap-3\\.5{gap:.875rem!important}.gap-4{gap:1rem!important}.gap-5{gap:1.25rem!important}.gap-6{gap:1.5rem!important}.gap-8{gap:2rem!important}.gap-\\[10\\%\\]{gap:10%!important}.gap-x-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.gap-x-12{-moz-column-gap:3rem!important;column-gap:3rem!important}.gap-x-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.gap-x-3{-moz-column-gap:.75rem!important;column-gap:.75rem!important}.gap-x-4{-moz-column-gap:1rem!important;column-gap:1rem!important}.gap-x-8{-moz-column-gap:2rem!important;column-gap:2rem!important}.gap-y-1{row-gap:.25rem!important}.gap-y-12{row-gap:3rem!important}.gap-y-2{row-gap:.5rem!important}.gap-y-4{row-gap:1rem!important}.gap-y-px{row-gap:1px!important}.space-x-0>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0!important;margin-left:calc(0px*(1 - var(--tw-space-x-reverse)))!important;margin-right:calc(0px*var(--tw-space-x-reverse))!important}.space-x-0\\.5>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0!important;margin-left:calc(.125rem*(1 - var(--tw-space-x-reverse)))!important;margin-right:calc(.125rem*var(--tw-space-x-reverse))!important}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0!important;margin-left:calc(.25rem*(1 - var(--tw-space-x-reverse)))!important;margin-right:calc(.25rem*var(--tw-space-x-reverse))!important}.space-x-1\\.5>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0!important;margin-left:calc(.375rem*(1 - var(--tw-space-x-reverse)))!important;margin-right:calc(.375rem*var(--tw-space-x-reverse))!important}.space-x-12>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0!important;margin-left:calc(3rem*(1 - var(--tw-space-x-reverse)))!important;margin-right:calc(3rem*var(--tw-space-x-reverse))!important}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0!important;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))!important;margin-right:calc(.5rem*var(--tw-space-x-reverse))!important}.space-x-2\\.5>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0!important;margin-left:calc(.625rem*(1 - var(--tw-space-x-reverse)))!important;margin-right:calc(.625rem*var(--tw-space-x-reverse))!important}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0!important;margin-left:calc(.75rem*(1 - var(--tw-space-x-reverse)))!important;margin-right:calc(.75rem*var(--tw-space-x-reverse))!important}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0!important;margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)))!important;margin-right:calc(1rem*var(--tw-space-x-reverse))!important}.space-x-6>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0!important;margin-left:calc(1.5rem*(1 - var(--tw-space-x-reverse)))!important;margin-right:calc(1.5rem*var(--tw-space-x-reverse))!important}.space-x-8>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0!important;margin-left:calc(2rem*(1 - var(--tw-space-x-reverse)))!important;margin-right:calc(2rem*var(--tw-space-x-reverse))!important}.space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0!important;margin-bottom:calc(0px*var(--tw-space-y-reverse))!important;margin-top:calc(0px*(1 - var(--tw-space-y-reverse)))!important}.space-y-0\\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0!important;margin-bottom:calc(.125rem*var(--tw-space-y-reverse))!important;margin-top:calc(.125rem*(1 - var(--tw-space-y-reverse)))!important}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0!important;margin-bottom:calc(.25rem*var(--tw-space-y-reverse))!important;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))!important}.space-y-1\\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0!important;margin-bottom:calc(.375rem*var(--tw-space-y-reverse))!important;margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)))!important}.space-y-12>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0!important;margin-bottom:calc(3rem*var(--tw-space-y-reverse))!important;margin-top:calc(3rem*(1 - var(--tw-space-y-reverse)))!important}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0!important;margin-bottom:calc(.5rem*var(--tw-space-y-reverse))!important;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))!important}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0!important;margin-bottom:calc(.75rem*var(--tw-space-y-reverse))!important;margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)))!important}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0!important;margin-bottom:calc(1rem*var(--tw-space-y-reverse))!important;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))!important}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0!important;margin-bottom:calc(1.25rem*var(--tw-space-y-reverse))!important;margin-top:calc(1.25rem*(1 - var(--tw-space-y-reverse)))!important}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0!important;margin-bottom:calc(1.5rem*var(--tw-space-y-reverse))!important;margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)))!important}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0!important;margin-bottom:calc(2rem*var(--tw-space-y-reverse))!important;margin-top:calc(2rem*(1 - var(--tw-space-y-reverse)))!important}.space-y-px>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0!important;margin-bottom:calc(1px*var(--tw-space-y-reverse))!important;margin-top:calc(1px*(1 - var(--tw-space-y-reverse)))!important}.divide-x>:not([hidden])~:not([hidden]){--tw-divide-x-reverse:0!important;border-left-width:calc(1px*(1 - var(--tw-divide-x-reverse)))!important;border-right-width:calc(1px*var(--tw-divide-x-reverse))!important}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0!important;border-bottom-width:calc(1px*var(--tw-divide-y-reverse))!important;border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))!important}.self-start{align-self:flex-start!important}.self-center{align-self:center!important}.self-stretch{align-self:stretch!important}.justify-self-center{justify-self:center!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-clip{overflow:clip!important}.overflow-scroll{overflow:scroll!important}.overflow-x-auto{overflow-x:auto!important}.overflow-y-auto{overflow-y:auto!important}.overflow-y-hidden{overflow-y:hidden!important}.overflow-y-scroll{overflow-y:scroll!important}.overscroll-contain{overscroll-behavior:contain!important}.overscroll-none{overscroll-behavior:none!important}.truncate{overflow:hidden!important;white-space:nowrap!important}.overflow-ellipsis,.text-ellipsis,.truncate{text-overflow:ellipsis!important}.whitespace-nowrap{white-space:nowrap!important}.whitespace-pre{white-space:pre!important}.whitespace-pre-line{white-space:pre-line!important}.whitespace-pre-wrap{white-space:pre-wrap!important}.text-wrap{text-wrap:wrap!important}.text-nowrap{text-wrap:nowrap!important}.text-balance{text-wrap:balance!important}.text-pretty{text-wrap:pretty!important}.break-words{overflow-wrap:break-word!important}.break-all{word-break:break-all!important}.break-keep{word-break:keep-all!important}.rounded{border-radius:.375rem!important}.rounded-\\[0\\.625rem\\]{border-radius:.625rem!important}.rounded-\\[var\\(--radius\\)\\]{border-radius:var(--radius)!important}.rounded-full{border-radius:9999px!important}.rounded-lg{border-radius:.5rem!important}.rounded-none{border-radius:0!important}.rounded-sm{border-radius:.25rem!important}.rounded-b{border-bottom-right-radius:.375rem!important}.rounded-b,.rounded-l{border-bottom-left-radius:.375rem!important}.rounded-l{border-top-left-radius:.375rem!important}.rounded-l-none{border-bottom-left-radius:0!important;border-top-left-radius:0!important}.rounded-r{border-bottom-right-radius:.375rem!important;border-top-right-radius:.375rem!important}.rounded-r-none{border-bottom-right-radius:0!important;border-top-right-radius:0!important}.rounded-t{border-top-left-radius:.375rem!important;border-top-right-radius:.375rem!important}.rounded-t-none{border-top-left-radius:0!important;border-top-right-radius:0!important}.border{border-width:1px!important}.border-0{border-width:0!important}.border-2{border-width:2px!important}.border-y{border-top-width:1px!important}.border-b,.border-y{border-bottom-width:1px!important}.border-b-2{border-bottom-width:2px!important}.border-l{border-left-width:1px!important}.border-l-2{border-left-width:2px!important}.border-l-4{border-left-width:4px!important}.border-l-\\[5px\\]{border-left-width:5px!important}.border-r{border-right-width:1px!important}.border-t{border-top-width:1px!important}.border-t-0{border-top-width:0!important}.border-dashed{border-style:dashed!important}.border-dotted{border-style:dotted!important}.border-none{border-style:none!important}.border-\\[var\\(--glass-border-3000\\)\\]{border-color:var(--glass-border-3000)!important}.border-l-\\[\\#8F98FF\\]{--tw-border-opacity:1!important;border-left-color:rgb(143 152 255/var(--tw-border-opacity))!important}.border-l-\\[\\#94D674\\]{--tw-border-opacity:1!important;border-left-color:rgb(148 214 116/var(--tw-border-opacity))!important}.border-l-\\[\\#FF9870\\]{--tw-border-opacity:1!important;border-left-color:rgb(255 152 112/var(--tw-border-opacity))!important}.bg-\\[\\#000\\]{--tw-bg-opacity:1!important;background-color:rgb(0 0 0/var(--tw-bg-opacity))!important}.bg-\\[hsla\\(100\\2c 74\\%\\2c 98\\%\\2c 1\\)\\]{background-color:#f9fef6!important}.bg-\\[hsla\\(19\\2c 99\\%\\2c 99\\%\\2c 1\\)\\]{background-color:#fffcfa!important}.bg-\\[hsla\\(235\\2c 100\\%\\2c 99\\%\\2c 1\\)\\]{background-color:#fafaff!important}.bg-\\[var\\(--bg-light\\)\\]{background-color:var(--bg-light)!important}.bg-\\[var\\(--bg-table\\)\\]{background-color:var(--bg-table)!important}.bg-\\[var\\(--glass-bg-3000\\)\\]{background-color:var(--glass-bg-3000)!important}.bg-\\[var\\(--tooltip-bg\\)\\]{background-color:var(--tooltip-bg)!important}.bg-\\[white\\]{--tw-bg-opacity:1!important;background-color:rgb(255 255 255/var(--tw-bg-opacity))!important}.bg-contain{background-size:contain!important}.bg-cover{background-size:cover!important}.bg-no-repeat{background-repeat:no-repeat!important}.object-contain{object-fit:contain!important}.object-cover{object-fit:cover!important}.p-0{padding:0!important}.p-0\\.5{padding:.125rem!important}.p-1{padding:.25rem!important}.p-1\\.5{padding:.375rem!important}.p-10{padding:2.5rem!important}.p-16{padding:4rem!important}.p-2{padding:.5rem!important}.p-20{padding:5rem!important}.p-3{padding:.75rem!important}.p-4{padding:1rem!important}.p-5{padding:1.25rem!important}.p-6{padding:1.5rem!important}.p-8{padding:2rem!important}.px-0{padding-left:0!important;padding-right:0!important}.px-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-1\\.5{padding-left:.375rem!important;padding-right:.375rem!important}.px-12{padding-left:3rem!important;padding-right:3rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-3{padding-left:.75rem!important;padding-right:.75rem!important}.px-4{padding-left:1rem!important;padding-right:1rem!important}.px-5{padding-left:1.25rem!important;padding-right:1.25rem!important}.px-6{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-8{padding-left:2rem!important;padding-right:2rem!important}.px-px{padding-left:1px!important;padding-right:1px!important}.py-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-1\\.5{padding-bottom:.375rem!important;padding-top:.375rem!important}.py-10{padding-bottom:2.5rem!important;padding-top:2.5rem!important}.py-12{padding-bottom:3rem!important;padding-top:3rem!important}.py-15{padding-bottom:3.75rem!important;padding-top:3.75rem!important}.py-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-20{padding-bottom:5rem!important;padding-top:5rem!important}.py-3{padding-bottom:.75rem!important;padding-top:.75rem!important}.py-4{padding-bottom:1rem!important;padding-top:1rem!important}.py-5{padding-bottom:1.25rem!important;padding-top:1.25rem!important}.py-6{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-8{padding-bottom:2rem!important;padding-top:2rem!important}.py-px{padding-bottom:1px!important;padding-top:1px!important}.pb-1{padding-bottom:.25rem!important}.pb-1\\.5{padding-bottom:.375rem!important}.pb-2{padding-bottom:.5rem!important}.pb-2\\.5{padding-bottom:.625rem!important}.pb-3{padding-bottom:.75rem!important}.pb-4{padding-bottom:1rem!important}.pb-6{padding-bottom:1.5rem!important}.pb-8{padding-bottom:2rem!important}.pb-\\[30rem\\]{padding-bottom:30rem!important}.pl-1{padding-left:.25rem!important}.pl-1\\.5{padding-left:.375rem!important}.pl-10{padding-left:2.5rem!important}.pl-16{padding-left:4rem!important}.pl-2{padding-left:.5rem!important}.pl-3{padding-left:.75rem!important}.pl-4{padding-left:1rem!important}.pl-7{padding-left:1.75rem!important}.pl-8{padding-left:2rem!important}.pr-1{padding-right:.25rem!important}.pr-1\\.5{padding-right:.375rem!important}.pr-10{padding-right:2.5rem!important}.pr-2{padding-right:.5rem!important}.pr-3{padding-right:.75rem!important}.pr-4{padding-right:1rem!important}.pr-7{padding-right:1.75rem!important}.pr-9{padding-right:2.25rem!important}.pt-1{padding-top:.25rem!important}.pt-1\\.5{padding-top:.375rem!important}.pt-12{padding-top:3rem!important}.pt-16{padding-top:4rem!important}.pt-2{padding-top:.5rem!important}.pt-4{padding-top:1rem!important}.pt-5{padding-top:1.25rem!important}.pt-6{padding-top:1.5rem!important}.pt-8{padding-top:2rem!important}.pt-px{padding-top:1px!important}.text-left{text-align:left!important}.text-center{text-align:center!important}.text-right{text-align:right!important}.text-start{text-align:start!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-\\[-0\\.25em\\]{vertical-align:-.25em!important}.font-mono{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace!important}.font-sans{font-family:-apple-system,BlinkMacSystemFont,Inter,Segoe UI,Roboto,Helvetica Neue,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol!important}.font-title{font-family:MatterSQ,-apple-system,BlinkMacSystemFont,Inter,Segoe UI,Roboto,Helvetica Neue,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol!important}.text-2xl{font-size:1.5rem!important;line-height:2rem!important}.text-3xl{font-size:1.875rem!important;line-height:2.25rem!important}.text-4xl{font-size:2.25rem!important;line-height:2.5rem!important}.text-5xl{font-size:3rem!important;line-height:1!important}.text-6xl{font-size:3.75rem!important;line-height:1!important}.text-7xl{font-size:4.5rem!important;line-height:1!important}.text-\\[0\\.8125rem\\]{font-size:.8125rem!important}.text-\\[11px\\]{font-size:11px!important}.text-\\[13px\\]{font-size:13px!important}.text-\\[15px\\]{font-size:15px!important}.text-\\[17px\\]{font-size:17px!important}.text-base{font-size:1rem!important;line-height:1.5rem!important}.text-lg{font-size:1.125rem!important;line-height:1.75rem!important}.text-sm{font-size:.875rem!important;line-height:1.25rem!important}.text-xl{font-size:1.25rem!important;line-height:1.75rem!important}.text-xs{font-size:.75rem!important;line-height:1rem!important}.text-xxs{font-size:.625rem!important;line-height:.75rem!important}.font-bold{font-weight:700!important}.font-medium{font-weight:500!important}.font-normal{font-weight:400!important}.font-semibold{font-weight:600!important}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.capitalize{text-transform:capitalize!important}.italic{font-style:italic!important}.not-italic{font-style:normal!important}.tabular-nums{--tw-numeric-spacing:tabular-nums!important;font-feature-settings:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)!important;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)!important}.leading-10{line-height:2.5rem!important}.leading-4{line-height:1rem!important}.leading-5{line-height:1.25rem!important}.leading-6{line-height:1.5rem!important}.leading-7{line-height:1.75rem!important}.leading-8{line-height:2rem!important}.leading-\\[0px\\]{line-height:0px!important}.leading-\\[normal\\]{line-height:normal!important}.leading-none{line-height:1!important}.leading-tight{line-height:1.25!important}.tracking-normal{letter-spacing:0!important}.tracking-tight{letter-spacing:-.025em!important}.tracking-wide{letter-spacing:.025em!important}.tracking-wider{letter-spacing:.05em!important}.text-\\[\\#2EA2D3\\]{--tw-text-opacity:1!important;color:rgb(46 162 211/var(--tw-text-opacity))!important}.text-\\[\\#36C46F\\]{--tw-text-opacity:1!important;color:rgb(54 196 111/var(--tw-text-opacity))!important}.text-\\[\\#681291\\]{--tw-text-opacity:1!important;color:rgb(104 18 145/var(--tw-text-opacity))!important}.text-\\[\\#8567FF\\]{--tw-text-opacity:1!important;color:rgb(133 103 255/var(--tw-text-opacity))!important}.text-\\[var\\(--trace-3000\\)\\]{color:var(--trace-3000)!important}.text-purple{--tw-text-opacity:1!important;color:rgb(182 42 217/var(--tw-text-opacity))!important}.underline{text-decoration-line:underline!important}.line-through{text-decoration-line:line-through!important}.opacity-0{opacity:0!important}.opacity-100{opacity:1!important}.opacity-20{opacity:.2!important}.opacity-25{opacity:.25!important}.opacity-40{opacity:.4!important}.opacity-50{opacity:.5!important}.opacity-60{opacity:.6!important}.opacity-75{opacity:.75!important}.opacity-80{opacity:.8!important}.opacity-\\[var\\(--opacity-disabled\\)\\]{opacity:var(--opacity-disabled)!important}.bg-blend-overlay{background-blend-mode:overlay!important}.shadow{--tw-shadow:var(--shadow-elevation-3000)!important;--tw-shadow-colored:var(--shadow-elevation-3000)!important}.shadow,.shadow-md{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1)!important;--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)!important}.shadow-none{--tw-shadow:0 0 #0000!important;--tw-shadow-colored:0 0 #0000!important}.shadow-none,.shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1)!important;--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)!important}.outline{outline-style:solid!important}.ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)!important;--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)!important}.ring-0,.ring-2{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)!important}.ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)!important;--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)!important}.blur{--tw-blur:blur(8px)!important}.blur,.drop-shadow-xl{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.drop-shadow-xl{--tw-drop-shadow:drop-shadow(0 20px 13px rgba(0,0,0,.03)) drop-shadow(0 8px 5px rgba(0,0,0,.08))!important}.invert{--tw-invert:invert(100%)!important}.invert,.sepia{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.sepia{--tw-sepia:sepia(100%)!important}.\\!filter,.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.backdrop-blur{--tw-backdrop-blur:blur(8px)!important}.backdrop-blur,.backdrop-blur-md{-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)!important;backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)!important}.backdrop-blur-md{--tw-backdrop-blur:blur(12px)!important}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)!important;backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)!important}.transition{transition-duration:.15s!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.transition-all{transition-duration:.15s!important;transition-property:all!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.transition-colors{transition-duration:.15s!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.transition-opacity{transition-duration:.15s!important;transition-property:opacity!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.transition-shadow{transition-duration:.15s!important;transition-property:box-shadow!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.duration-100{transition-duration:.1s!important}.duration-200{transition-duration:.2s!important}.duration-300{transition-duration:.3s!important}.duration-75{transition-duration:75ms!important}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.\\@container,.\\@container\\/og{container-type:inline-size!important}.\\@container\\/og{container-name:og!important}.rendering-pixelated{image-rendering:pixelated!important}.text-primary{color:var(--primary)!important}.bg-primary{background-color:var(--primary)!important}.border-primary{border-color:var(--primary)!important}.border-l-primary{border-left-color:var(--primary)!important}.border-r-primary{border-right-color:var(--primary)!important}.border-t-primary{border-top-color:var(--primary)!important}.border-b-primary{border-bottom-color:var(--primary)!important}.border-x-primary{border-left-color:var(--primary)!important;border-right-color:var(--primary)!important}.border-y-primary{border-bottom-color:var(--primary)!important;border-top-color:var(--primary)!important}.decoration-primary{text-decoration-color:var(--primary)!important}.text-danger-highlight{color:var(--danger-highlight)!important}.bg-danger-highlight{background-color:var(--danger-highlight)!important}.border-danger-highlight{border-color:var(--danger-highlight)!important}.border-l-danger-highlight{border-left-color:var(--danger-highlight)!important}.border-r-danger-highlight{border-right-color:var(--danger-highlight)!important}.border-t-danger-highlight{border-top-color:var(--danger-highlight)!important}.border-b-danger-highlight{border-bottom-color:var(--danger-highlight)!important}.border-x-danger-highlight{border-left-color:var(--danger-highlight)!important;border-right-color:var(--danger-highlight)!important}.border-y-danger-highlight{border-bottom-color:var(--danger-highlight)!important;border-top-color:var(--danger-highlight)!important}.decoration-danger-highlight{text-decoration-color:var(--danger-highlight)!important}.text-danger-lighter{color:var(--danger-lighter)!important}.bg-danger-lighter{background-color:var(--danger-lighter)!important}.border-danger-lighter{border-color:var(--danger-lighter)!important}.border-l-danger-lighter{border-left-color:var(--danger-lighter)!important}.border-r-danger-lighter{border-right-color:var(--danger-lighter)!important}.border-t-danger-lighter{border-top-color:var(--danger-lighter)!important}.border-b-danger-lighter{border-bottom-color:var(--danger-lighter)!important}.border-x-danger-lighter{border-left-color:var(--danger-lighter)!important;border-right-color:var(--danger-lighter)!important}.border-y-danger-lighter{border-bottom-color:var(--danger-lighter)!important;border-top-color:var(--danger-lighter)!important}.decoration-danger-lighter{text-decoration-color:var(--danger-lighter)!important}.text-danger-light{color:var(--danger-light)!important}.bg-danger-light{background-color:var(--danger-light)!important}.border-danger-light{border-color:var(--danger-light)!important}.border-l-danger-light{border-left-color:var(--danger-light)!important}.border-r-danger-light{border-right-color:var(--danger-light)!important}.border-t-danger-light{border-top-color:var(--danger-light)!important}.border-b-danger-light{border-bottom-color:var(--danger-light)!important}.border-x-danger-light{border-left-color:var(--danger-light)!important;border-right-color:var(--danger-light)!important}.border-y-danger-light{border-bottom-color:var(--danger-light)!important;border-top-color:var(--danger-light)!important}.decoration-danger-light{text-decoration-color:var(--danger-light)!important}.text-danger{color:var(--danger)!important}.bg-danger{background-color:var(--danger)!important}.border-danger{border-color:var(--danger)!important}.border-l-danger{border-left-color:var(--danger)!important}.border-r-danger{border-right-color:var(--danger)!important}.border-t-danger{border-top-color:var(--danger)!important}.border-b-danger{border-bottom-color:var(--danger)!important}.border-x-danger{border-left-color:var(--danger)!important;border-right-color:var(--danger)!important}.border-y-danger{border-bottom-color:var(--danger)!important;border-top-color:var(--danger)!important}.decoration-danger{text-decoration-color:var(--danger)!important}.text-danger-dark{color:var(--danger-dark)!important}.bg-danger-dark{background-color:var(--danger-dark)!important}.border-danger-dark{border-color:var(--danger-dark)!important}.border-l-danger-dark{border-left-color:var(--danger-dark)!important}.border-r-danger-dark{border-right-color:var(--danger-dark)!important}.border-t-danger-dark{border-top-color:var(--danger-dark)!important}.border-b-danger-dark{border-bottom-color:var(--danger-dark)!important}.border-x-danger-dark{border-left-color:var(--danger-dark)!important;border-right-color:var(--danger-dark)!important}.border-y-danger-dark{border-bottom-color:var(--danger-dark)!important;border-top-color:var(--danger-dark)!important}.decoration-danger-dark{text-decoration-color:var(--danger-dark)!important}.text-warning-highlight{color:var(--warning-highlight)!important}.bg-warning-highlight{background-color:var(--warning-highlight)!important}.border-warning-highlight{border-color:var(--warning-highlight)!important}.border-l-warning-highlight{border-left-color:var(--warning-highlight)!important}.border-r-warning-highlight{border-right-color:var(--warning-highlight)!important}.border-t-warning-highlight{border-top-color:var(--warning-highlight)!important}.border-b-warning-highlight{border-bottom-color:var(--warning-highlight)!important}.border-x-warning-highlight{border-left-color:var(--warning-highlight)!important;border-right-color:var(--warning-highlight)!important}.border-y-warning-highlight{border-bottom-color:var(--warning-highlight)!important;border-top-color:var(--warning-highlight)!important}.decoration-warning-highlight{text-decoration-color:var(--warning-highlight)!important}.text-warning{color:var(--warning)!important}.bg-warning{background-color:var(--warning)!important}.border-warning{border-color:var(--warning)!important}.border-l-warning{border-left-color:var(--warning)!important}.border-r-warning{border-right-color:var(--warning)!important}.border-t-warning{border-top-color:var(--warning)!important}.border-b-warning{border-bottom-color:var(--warning)!important}.border-x-warning{border-left-color:var(--warning)!important;border-right-color:var(--warning)!important}.border-y-warning{border-bottom-color:var(--warning)!important;border-top-color:var(--warning)!important}.decoration-warning{text-decoration-color:var(--warning)!important}.text-warning-dark{color:var(--warning-dark)!important}.bg-warning-dark{background-color:var(--warning-dark)!important}.border-warning-dark{border-color:var(--warning-dark)!important}.border-l-warning-dark{border-left-color:var(--warning-dark)!important}.border-r-warning-dark{border-right-color:var(--warning-dark)!important}.border-t-warning-dark{border-top-color:var(--warning-dark)!important}.border-b-warning-dark{border-bottom-color:var(--warning-dark)!important}.border-x-warning-dark{border-left-color:var(--warning-dark)!important;border-right-color:var(--warning-dark)!important}.border-y-warning-dark{border-bottom-color:var(--warning-dark)!important;border-top-color:var(--warning-dark)!important}.decoration-warning-dark{text-decoration-color:var(--warning-dark)!important}.text-highlight{color:var(--highlight)!important}.bg-highlight{background-color:var(--highlight)!important}.border-highlight{border-color:var(--highlight)!important}.border-l-highlight{border-left-color:var(--highlight)!important}.border-r-highlight{border-right-color:var(--highlight)!important}.border-t-highlight{border-top-color:var(--highlight)!important}.border-b-highlight{border-bottom-color:var(--highlight)!important}.border-x-highlight{border-left-color:var(--highlight)!important;border-right-color:var(--highlight)!important}.border-y-highlight{border-bottom-color:var(--highlight)!important;border-top-color:var(--highlight)!important}.decoration-highlight{text-decoration-color:var(--highlight)!important}.text-success-highlight{color:var(--success-highlight)!important}.bg-success-highlight{background-color:var(--success-highlight)!important}.border-success-highlight{border-color:var(--success-highlight)!important}.border-l-success-highlight{border-left-color:var(--success-highlight)!important}.border-r-success-highlight{border-right-color:var(--success-highlight)!important}.border-t-success-highlight{border-top-color:var(--success-highlight)!important}.border-b-success-highlight{border-bottom-color:var(--success-highlight)!important}.border-x-success-highlight{border-left-color:var(--success-highlight)!important;border-right-color:var(--success-highlight)!important}.border-y-success-highlight{border-bottom-color:var(--success-highlight)!important;border-top-color:var(--success-highlight)!important}.decoration-success-highlight{text-decoration-color:var(--success-highlight)!important}.text-success-light{color:var(--success-light)!important}.bg-success-light{background-color:var(--success-light)!important}.border-success-light{border-color:var(--success-light)!important}.border-l-success-light{border-left-color:var(--success-light)!important}.border-r-success-light{border-right-color:var(--success-light)!important}.border-t-success-light{border-top-color:var(--success-light)!important}.border-b-success-light{border-bottom-color:var(--success-light)!important}.border-x-success-light{border-left-color:var(--success-light)!important;border-right-color:var(--success-light)!important}.border-y-success-light{border-bottom-color:var(--success-light)!important;border-top-color:var(--success-light)!important}.decoration-success-light{text-decoration-color:var(--success-light)!important}.text-success{color:var(--success)!important}.bg-success{background-color:var(--success)!important}.border-success{border-color:var(--success)!important}.border-l-success{border-left-color:var(--success)!important}.border-r-success{border-right-color:var(--success)!important}.border-t-success{border-top-color:var(--success)!important}.border-b-success{border-bottom-color:var(--success)!important}.border-x-success{border-left-color:var(--success)!important;border-right-color:var(--success)!important}.border-y-success{border-bottom-color:var(--success)!important;border-top-color:var(--success)!important}.decoration-success{text-decoration-color:var(--success)!important}.text-success-dark{color:var(--success-dark)!important}.bg-success-dark{background-color:var(--success-dark)!important}.border-success-dark{border-color:var(--success-dark)!important}.border-l-success-dark{border-left-color:var(--success-dark)!important}.border-r-success-dark{border-right-color:var(--success-dark)!important}.border-t-success-dark{border-top-color:var(--success-dark)!important}.border-b-success-dark{border-bottom-color:var(--success-dark)!important}.border-x-success-dark{border-left-color:var(--success-dark)!important;border-right-color:var(--success-dark)!important}.border-y-success-dark{border-bottom-color:var(--success-dark)!important;border-top-color:var(--success-dark)!important}.decoration-success-dark{text-decoration-color:var(--success-dark)!important}.text-muted{color:var(--muted)!important}.bg-muted{background-color:var(--muted)!important}.border-muted{border-color:var(--muted)!important}.border-l-muted{border-left-color:var(--muted)!important}.border-r-muted{border-right-color:var(--muted)!important}.border-t-muted{border-top-color:var(--muted)!important}.border-b-muted{border-bottom-color:var(--muted)!important}.border-x-muted{border-left-color:var(--muted)!important;border-right-color:var(--muted)!important}.border-y-muted{border-bottom-color:var(--muted)!important;border-top-color:var(--muted)!important}.decoration-muted{text-decoration-color:var(--muted)!important}.text-muted-alt{color:var(--muted-alt)!important}.bg-muted-alt{background-color:var(--muted-alt)!important}.border-muted-alt{border-color:var(--muted-alt)!important}.border-l-muted-alt{border-left-color:var(--muted-alt)!important}.border-r-muted-alt{border-right-color:var(--muted-alt)!important}.border-t-muted-alt{border-top-color:var(--muted-alt)!important}.border-b-muted-alt{border-bottom-color:var(--muted-alt)!important}.border-x-muted-alt{border-left-color:var(--muted-alt)!important;border-right-color:var(--muted-alt)!important}.border-y-muted-alt{border-bottom-color:var(--muted-alt)!important;border-top-color:var(--muted-alt)!important}.decoration-muted-alt{text-decoration-color:var(--muted-alt)!important}.text-mark{color:var(--mark)!important}.bg-mark{background-color:var(--mark)!important}.border-mark{border-color:var(--mark)!important}.border-l-mark{border-left-color:var(--mark)!important}.border-r-mark{border-right-color:var(--mark)!important}.border-t-mark{border-top-color:var(--mark)!important}.border-b-mark{border-bottom-color:var(--mark)!important}.border-x-mark{border-left-color:var(--mark)!important;border-right-color:var(--mark)!important}.border-y-mark{border-bottom-color:var(--mark)!important;border-top-color:var(--mark)!important}.decoration-mark{text-decoration-color:var(--mark)!important}.text-white{color:var(--white)!important}.bg-white{background-color:var(--white)!important}.border-white{border-color:var(--white)!important}.border-l-white{border-left-color:var(--white)!important}.border-r-white{border-right-color:var(--white)!important}.border-t-white{border-top-color:var(--white)!important}.border-b-white{border-bottom-color:var(--white)!important}.border-x-white{border-left-color:var(--white)!important;border-right-color:var(--white)!important}.border-y-white{border-bottom-color:var(--white)!important;border-top-color:var(--white)!important}.decoration-white{text-decoration-color:var(--white)!important}.text-bg-light{color:var(--bg-light)!important}.bg-bg-light{background-color:var(--bg-light)!important}.border-bg-light{border-color:var(--bg-light)!important}.border-l-bg-light{border-left-color:var(--bg-light)!important}.border-r-bg-light{border-right-color:var(--bg-light)!important}.border-t-bg-light{border-top-color:var(--bg-light)!important}.border-b-bg-light{border-bottom-color:var(--bg-light)!important}.border-x-bg-light{border-left-color:var(--bg-light)!important;border-right-color:var(--bg-light)!important}.border-y-bg-light{border-bottom-color:var(--bg-light)!important;border-top-color:var(--bg-light)!important}.decoration-bg-light{text-decoration-color:var(--bg-light)!important}.text-side{color:var(--side)!important}.bg-side{background-color:var(--side)!important}.border-side{border-color:var(--side)!important}.border-l-side{border-left-color:var(--side)!important}.border-r-side{border-right-color:var(--side)!important}.border-t-side{border-top-color:var(--side)!important}.border-b-side{border-bottom-color:var(--side)!important}.border-x-side{border-left-color:var(--side)!important;border-right-color:var(--side)!important}.border-y-side{border-bottom-color:var(--side)!important;border-top-color:var(--side)!important}.decoration-side{text-decoration-color:var(--side)!important}.text-mid{color:var(--mid)!important}.bg-mid{background-color:var(--mid)!important}.border-mid{border-color:var(--mid)!important}.border-l-mid{border-left-color:var(--mid)!important}.border-r-mid{border-right-color:var(--mid)!important}.border-t-mid{border-top-color:var(--mid)!important}.border-b-mid{border-bottom-color:var(--mid)!important}.border-x-mid{border-left-color:var(--mid)!important;border-right-color:var(--mid)!important}.border-y-mid{border-bottom-color:var(--mid)!important;border-top-color:var(--mid)!important}.decoration-mid{text-decoration-color:var(--mid)!important}.text-border{color:var(--border)!important}.bg-border{background-color:var(--border)!important}.border-border{border-color:var(--border)!important}.border-l-border{border-left-color:var(--border)!important}.border-r-border{border-right-color:var(--border)!important}.border-t-border{border-top-color:var(--border)!important}.border-b-border{border-bottom-color:var(--border)!important}.border-x-border{border-left-color:var(--border)!important;border-right-color:var(--border)!important}.border-y-border{border-bottom-color:var(--border)!important;border-top-color:var(--border)!important}.decoration-border{text-decoration-color:var(--border)!important}.text-border-light{color:var(--border-light)!important}.bg-border-light{background-color:var(--border-light)!important}.border-border-light{border-color:var(--border-light)!important}.border-l-border-light{border-left-color:var(--border-light)!important}.border-r-border-light{border-right-color:var(--border-light)!important}.border-t-border-light{border-top-color:var(--border-light)!important}.border-b-border-light{border-bottom-color:var(--border-light)!important}.border-x-border-light{border-left-color:var(--border-light)!important;border-right-color:var(--border-light)!important}.border-y-border-light{border-bottom-color:var(--border-light)!important;border-top-color:var(--border-light)!important}.decoration-border-light{text-decoration-color:var(--border-light)!important}.text-border-bold{color:var(--border-bold)!important}.bg-border-bold{background-color:var(--border-bold)!important}.border-border-bold{border-color:var(--border-bold)!important}.border-l-border-bold{border-left-color:var(--border-bold)!important}.border-r-border-bold{border-right-color:var(--border-bold)!important}.border-t-border-bold{border-top-color:var(--border-bold)!important}.border-b-border-bold{border-bottom-color:var(--border-bold)!important}.border-x-border-bold{border-left-color:var(--border-bold)!important;border-right-color:var(--border-bold)!important}.border-y-border-bold{border-bottom-color:var(--border-bold)!important;border-top-color:var(--border-bold)!important}.decoration-border-bold{text-decoration-color:var(--border-bold)!important}.text-transparent{color:var(--transparent)!important}.bg-transparent{background-color:var(--transparent)!important}.border-transparent{border-color:var(--transparent)!important}.border-l-transparent{border-left-color:var(--transparent)!important}.border-r-transparent{border-right-color:var(--transparent)!important}.border-t-transparent{border-top-color:var(--transparent)!important}.border-b-transparent{border-bottom-color:var(--transparent)!important}.border-x-transparent{border-left-color:var(--transparent)!important;border-right-color:var(--transparent)!important}.border-y-transparent{border-bottom-color:var(--transparent)!important;border-top-color:var(--transparent)!important}.decoration-transparent{text-decoration-color:var(--transparent)!important}.text-link{color:var(--link)!important}.bg-link{background-color:var(--link)!important}.border-link{border-color:var(--link)!important}.border-l-link{border-left-color:var(--link)!important}.border-r-link{border-right-color:var(--link)!important}.border-t-link{border-top-color:var(--link)!important}.border-b-link{border-bottom-color:var(--link)!important}.border-x-link{border-left-color:var(--link)!important;border-right-color:var(--link)!important}.border-y-link{border-bottom-color:var(--link)!important;border-top-color:var(--link)!important}.decoration-link{text-decoration-color:var(--link)!important}.text-brand-blue{color:var(--brand-blue)!important}.bg-brand-blue{background-color:var(--brand-blue)!important}.border-brand-blue{border-color:var(--brand-blue)!important}.border-l-brand-blue{border-left-color:var(--brand-blue)!important}.border-r-brand-blue{border-right-color:var(--brand-blue)!important}.border-t-brand-blue{border-top-color:var(--brand-blue)!important}.border-b-brand-blue{border-bottom-color:var(--brand-blue)!important}.border-x-brand-blue{border-left-color:var(--brand-blue)!important;border-right-color:var(--brand-blue)!important}.border-y-brand-blue{border-bottom-color:var(--brand-blue)!important;border-top-color:var(--brand-blue)!important}.decoration-brand-blue{text-decoration-color:var(--brand-blue)!important}.text-brand-red{color:var(--brand-red)!important}.bg-brand-red{background-color:var(--brand-red)!important}.border-brand-red{border-color:var(--brand-red)!important}.border-l-brand-red{border-left-color:var(--brand-red)!important}.border-r-brand-red{border-right-color:var(--brand-red)!important}.border-t-brand-red{border-top-color:var(--brand-red)!important}.border-b-brand-red{border-bottom-color:var(--brand-red)!important}.border-x-brand-red{border-left-color:var(--brand-red)!important;border-right-color:var(--brand-red)!important}.border-y-brand-red{border-bottom-color:var(--brand-red)!important;border-top-color:var(--brand-red)!important}.decoration-brand-red{text-decoration-color:var(--brand-red)!important}.text-brand-yellow{color:var(--brand-yellow)!important}.bg-brand-yellow{background-color:var(--brand-yellow)!important}.border-brand-yellow{border-color:var(--brand-yellow)!important}.border-l-brand-yellow{border-left-color:var(--brand-yellow)!important}.border-r-brand-yellow{border-right-color:var(--brand-yellow)!important}.border-t-brand-yellow{border-top-color:var(--brand-yellow)!important}.border-b-brand-yellow{border-bottom-color:var(--brand-yellow)!important}.border-x-brand-yellow{border-left-color:var(--brand-yellow)!important;border-right-color:var(--brand-yellow)!important}.border-y-brand-yellow{border-bottom-color:var(--brand-yellow)!important;border-top-color:var(--brand-yellow)!important}.decoration-brand-yellow{text-decoration-color:var(--brand-yellow)!important}.text-brand-key{color:var(--brand-key)!important}.bg-brand-key{background-color:var(--brand-key)!important}.border-brand-key{border-color:var(--brand-key)!important}.border-l-brand-key{border-left-color:var(--brand-key)!important}.border-r-brand-key{border-right-color:var(--brand-key)!important}.border-t-brand-key{border-top-color:var(--brand-key)!important}.border-b-brand-key{border-bottom-color:var(--brand-key)!important}.border-x-brand-key{border-left-color:var(--brand-key)!important;border-right-color:var(--brand-key)!important}.border-y-brand-key{border-bottom-color:var(--brand-key)!important;border-top-color:var(--brand-key)!important}.decoration-brand-key{text-decoration-color:var(--brand-key)!important}.text-text-3000-light{color:var(--text-3000-light)!important}.bg-text-3000-light{background-color:var(--text-3000-light)!important}.border-text-3000-light{border-color:var(--text-3000-light)!important}.border-l-text-3000-light{border-left-color:var(--text-3000-light)!important}.border-r-text-3000-light{border-right-color:var(--text-3000-light)!important}.border-t-text-3000-light{border-top-color:var(--text-3000-light)!important}.border-b-text-3000-light{border-bottom-color:var(--text-3000-light)!important}.border-x-text-3000-light{border-left-color:var(--text-3000-light)!important;border-right-color:var(--text-3000-light)!important}.border-y-text-3000-light{border-bottom-color:var(--text-3000-light)!important;border-top-color:var(--text-3000-light)!important}.decoration-text-3000-light{text-decoration-color:var(--text-3000-light)!important}.text-text-secondary-3000-light{color:var(--text-secondary-3000-light)!important}.bg-text-secondary-3000-light{background-color:var(--text-secondary-3000-light)!important}.border-text-secondary-3000-light{border-color:var(--text-secondary-3000-light)!important}.border-l-text-secondary-3000-light{border-left-color:var(--text-secondary-3000-light)!important}.border-r-text-secondary-3000-light{border-right-color:var(--text-secondary-3000-light)!important}.border-t-text-secondary-3000-light{border-top-color:var(--text-secondary-3000-light)!important}.border-b-text-secondary-3000-light{border-bottom-color:var(--text-secondary-3000-light)!important}.border-x-text-secondary-3000-light{border-left-color:var(--text-secondary-3000-light)!important;border-right-color:var(--text-secondary-3000-light)!important}.border-y-text-secondary-3000-light{border-bottom-color:var(--text-secondary-3000-light)!important;border-top-color:var(--text-secondary-3000-light)!important}.decoration-text-secondary-3000-light{text-decoration-color:var(--text-secondary-3000-light)!important}.text-muted-3000-light{color:var(--muted-3000-light)!important}.bg-muted-3000-light{background-color:var(--muted-3000-light)!important}.border-muted-3000-light{border-color:var(--muted-3000-light)!important}.border-l-muted-3000-light{border-left-color:var(--muted-3000-light)!important}.border-r-muted-3000-light{border-right-color:var(--muted-3000-light)!important}.border-t-muted-3000-light{border-top-color:var(--muted-3000-light)!important}.border-b-muted-3000-light{border-bottom-color:var(--muted-3000-light)!important}.border-x-muted-3000-light{border-left-color:var(--muted-3000-light)!important;border-right-color:var(--muted-3000-light)!important}.border-y-muted-3000-light{border-bottom-color:var(--muted-3000-light)!important;border-top-color:var(--muted-3000-light)!important}.decoration-muted-3000-light{text-decoration-color:var(--muted-3000-light)!important}.text-trace-3000-light{color:var(--trace-3000-light)!important}.bg-trace-3000-light{background-color:var(--trace-3000-light)!important}.border-trace-3000-light{border-color:var(--trace-3000-light)!important}.border-l-trace-3000-light{border-left-color:var(--trace-3000-light)!important}.border-r-trace-3000-light{border-right-color:var(--trace-3000-light)!important}.border-t-trace-3000-light{border-top-color:var(--trace-3000-light)!important}.border-b-trace-3000-light{border-bottom-color:var(--trace-3000-light)!important}.border-x-trace-3000-light{border-left-color:var(--trace-3000-light)!important;border-right-color:var(--trace-3000-light)!important}.border-y-trace-3000-light{border-bottom-color:var(--trace-3000-light)!important;border-top-color:var(--trace-3000-light)!important}.decoration-trace-3000-light{text-decoration-color:var(--trace-3000-light)!important}.text-primary-3000-light{color:var(--primary-3000-light)!important}.bg-primary-3000-light{background-color:var(--primary-3000-light)!important}.border-primary-3000-light{border-color:var(--primary-3000-light)!important}.border-l-primary-3000-light{border-left-color:var(--primary-3000-light)!important}.border-r-primary-3000-light{border-right-color:var(--primary-3000-light)!important}.border-t-primary-3000-light{border-top-color:var(--primary-3000-light)!important}.border-b-primary-3000-light{border-bottom-color:var(--primary-3000-light)!important}.border-x-primary-3000-light{border-left-color:var(--primary-3000-light)!important;border-right-color:var(--primary-3000-light)!important}.border-y-primary-3000-light{border-bottom-color:var(--primary-3000-light)!important;border-top-color:var(--primary-3000-light)!important}.decoration-primary-3000-light{text-decoration-color:var(--primary-3000-light)!important}.text-primary-highlight-light{color:var(--primary-highlight-light)!important}.bg-primary-highlight-light{background-color:var(--primary-highlight-light)!important}.border-primary-highlight-light{border-color:var(--primary-highlight-light)!important}.border-l-primary-highlight-light{border-left-color:var(--primary-highlight-light)!important}.border-r-primary-highlight-light{border-right-color:var(--primary-highlight-light)!important}.border-t-primary-highlight-light{border-top-color:var(--primary-highlight-light)!important}.border-b-primary-highlight-light{border-bottom-color:var(--primary-highlight-light)!important}.border-x-primary-highlight-light{border-left-color:var(--primary-highlight-light)!important;border-right-color:var(--primary-highlight-light)!important}.border-y-primary-highlight-light{border-bottom-color:var(--primary-highlight-light)!important;border-top-color:var(--primary-highlight-light)!important}.decoration-primary-highlight-light{text-decoration-color:var(--primary-highlight-light)!important}.text-primary-3000-hover-light{color:var(--primary-3000-hover-light)!important}.bg-primary-3000-hover-light{background-color:var(--primary-3000-hover-light)!important}.border-primary-3000-hover-light{border-color:var(--primary-3000-hover-light)!important}.border-l-primary-3000-hover-light{border-left-color:var(--primary-3000-hover-light)!important}.border-r-primary-3000-hover-light{border-right-color:var(--primary-3000-hover-light)!important}.border-t-primary-3000-hover-light{border-top-color:var(--primary-3000-hover-light)!important}.border-b-primary-3000-hover-light{border-bottom-color:var(--primary-3000-hover-light)!important}.border-x-primary-3000-hover-light{border-left-color:var(--primary-3000-hover-light)!important;border-right-color:var(--primary-3000-hover-light)!important}.border-y-primary-3000-hover-light{border-bottom-color:var(--primary-3000-hover-light)!important;border-top-color:var(--primary-3000-hover-light)!important}.decoration-primary-3000-hover-light{text-decoration-color:var(--primary-3000-hover-light)!important}.text-primary-3000-active-light{color:var(--primary-3000-active-light)!important}.bg-primary-3000-active-light{background-color:var(--primary-3000-active-light)!important}.border-primary-3000-active-light{border-color:var(--primary-3000-active-light)!important}.border-l-primary-3000-active-light{border-left-color:var(--primary-3000-active-light)!important}.border-r-primary-3000-active-light{border-right-color:var(--primary-3000-active-light)!important}.border-t-primary-3000-active-light{border-top-color:var(--primary-3000-active-light)!important}.border-b-primary-3000-active-light{border-bottom-color:var(--primary-3000-active-light)!important}.border-x-primary-3000-active-light{border-left-color:var(--primary-3000-active-light)!important;border-right-color:var(--primary-3000-active-light)!important}.border-y-primary-3000-active-light{border-bottom-color:var(--primary-3000-active-light)!important;border-top-color:var(--primary-3000-active-light)!important}.decoration-primary-3000-active-light{text-decoration-color:var(--primary-3000-active-light)!important}.text-secondary-3000-light{color:var(--secondary-3000-light)!important}.bg-secondary-3000-light{background-color:var(--secondary-3000-light)!important}.border-secondary-3000-light{border-color:var(--secondary-3000-light)!important}.border-l-secondary-3000-light{border-left-color:var(--secondary-3000-light)!important}.border-r-secondary-3000-light{border-right-color:var(--secondary-3000-light)!important}.border-t-secondary-3000-light{border-top-color:var(--secondary-3000-light)!important}.border-b-secondary-3000-light{border-bottom-color:var(--secondary-3000-light)!important}.border-x-secondary-3000-light{border-left-color:var(--secondary-3000-light)!important;border-right-color:var(--secondary-3000-light)!important}.border-y-secondary-3000-light{border-bottom-color:var(--secondary-3000-light)!important;border-top-color:var(--secondary-3000-light)!important}.decoration-secondary-3000-light{text-decoration-color:var(--secondary-3000-light)!important}.text-secondary-3000-hover-light{color:var(--secondary-3000-hover-light)!important}.bg-secondary-3000-hover-light{background-color:var(--secondary-3000-hover-light)!important}.border-secondary-3000-hover-light{border-color:var(--secondary-3000-hover-light)!important}.border-l-secondary-3000-hover-light{border-left-color:var(--secondary-3000-hover-light)!important}.border-r-secondary-3000-hover-light{border-right-color:var(--secondary-3000-hover-light)!important}.border-t-secondary-3000-hover-light{border-top-color:var(--secondary-3000-hover-light)!important}.border-b-secondary-3000-hover-light{border-bottom-color:var(--secondary-3000-hover-light)!important}.border-x-secondary-3000-hover-light{border-left-color:var(--secondary-3000-hover-light)!important;border-right-color:var(--secondary-3000-hover-light)!important}.border-y-secondary-3000-hover-light{border-bottom-color:var(--secondary-3000-hover-light)!important;border-top-color:var(--secondary-3000-hover-light)!important}.decoration-secondary-3000-hover-light{text-decoration-color:var(--secondary-3000-hover-light)!important}.text-accent-3000-light{color:var(--accent-3000-light)!important}.bg-accent-3000-light{background-color:var(--accent-3000-light)!important}.border-accent-3000-light{border-color:var(--accent-3000-light)!important}.border-l-accent-3000-light{border-left-color:var(--accent-3000-light)!important}.border-r-accent-3000-light{border-right-color:var(--accent-3000-light)!important}.border-t-accent-3000-light{border-top-color:var(--accent-3000-light)!important}.border-b-accent-3000-light{border-bottom-color:var(--accent-3000-light)!important}.border-x-accent-3000-light{border-left-color:var(--accent-3000-light)!important;border-right-color:var(--accent-3000-light)!important}.border-y-accent-3000-light{border-bottom-color:var(--accent-3000-light)!important;border-top-color:var(--accent-3000-light)!important}.decoration-accent-3000-light{text-decoration-color:var(--accent-3000-light)!important}.text-bg-3000-light{color:var(--bg-3000-light)!important}.bg-bg-3000-light{background-color:var(--bg-3000-light)!important}.border-bg-3000-light{border-color:var(--bg-3000-light)!important}.border-l-bg-3000-light{border-left-color:var(--bg-3000-light)!important}.border-r-bg-3000-light{border-right-color:var(--bg-3000-light)!important}.border-t-bg-3000-light{border-top-color:var(--bg-3000-light)!important}.border-b-bg-3000-light{border-bottom-color:var(--bg-3000-light)!important}.border-x-bg-3000-light{border-left-color:var(--bg-3000-light)!important;border-right-color:var(--bg-3000-light)!important}.border-y-bg-3000-light{border-bottom-color:var(--bg-3000-light)!important;border-top-color:var(--bg-3000-light)!important}.decoration-bg-3000-light{text-decoration-color:var(--bg-3000-light)!important}.text-border-3000-light{color:var(--border-3000-light)!important}.bg-border-3000-light{background-color:var(--border-3000-light)!important}.border-border-3000-light{border-color:var(--border-3000-light)!important}.border-l-border-3000-light{border-left-color:var(--border-3000-light)!important}.border-r-border-3000-light{border-right-color:var(--border-3000-light)!important}.border-t-border-3000-light{border-top-color:var(--border-3000-light)!important}.border-b-border-3000-light{border-bottom-color:var(--border-3000-light)!important}.border-x-border-3000-light{border-left-color:var(--border-3000-light)!important;border-right-color:var(--border-3000-light)!important}.border-y-border-3000-light{border-bottom-color:var(--border-3000-light)!important;border-top-color:var(--border-3000-light)!important}.decoration-border-3000-light{text-decoration-color:var(--border-3000-light)!important}.text-border-bold-3000-light{color:var(--border-bold-3000-light)!important}.bg-border-bold-3000-light{background-color:var(--border-bold-3000-light)!important}.border-border-bold-3000-light{border-color:var(--border-bold-3000-light)!important}.border-l-border-bold-3000-light{border-left-color:var(--border-bold-3000-light)!important}.border-r-border-bold-3000-light{border-right-color:var(--border-bold-3000-light)!important}.border-t-border-bold-3000-light{border-top-color:var(--border-bold-3000-light)!important}.border-b-border-bold-3000-light{border-bottom-color:var(--border-bold-3000-light)!important}.border-x-border-bold-3000-light{border-left-color:var(--border-bold-3000-light)!important;border-right-color:var(--border-bold-3000-light)!important}.border-y-border-bold-3000-light{border-bottom-color:var(--border-bold-3000-light)!important;border-top-color:var(--border-bold-3000-light)!important}.decoration-border-bold-3000-light{text-decoration-color:var(--border-bold-3000-light)!important}.text-glass-bg-3000-light{color:var(--glass-bg-3000-light)!important}.bg-glass-bg-3000-light{background-color:var(--glass-bg-3000-light)!important}.border-glass-bg-3000-light{border-color:var(--glass-bg-3000-light)!important}.border-l-glass-bg-3000-light{border-left-color:var(--glass-bg-3000-light)!important}.border-r-glass-bg-3000-light{border-right-color:var(--glass-bg-3000-light)!important}.border-t-glass-bg-3000-light{border-top-color:var(--glass-bg-3000-light)!important}.border-b-glass-bg-3000-light{border-bottom-color:var(--glass-bg-3000-light)!important}.border-x-glass-bg-3000-light{border-left-color:var(--glass-bg-3000-light)!important;border-right-color:var(--glass-bg-3000-light)!important}.border-y-glass-bg-3000-light{border-bottom-color:var(--glass-bg-3000-light)!important;border-top-color:var(--glass-bg-3000-light)!important}.decoration-glass-bg-3000-light{text-decoration-color:var(--glass-bg-3000-light)!important}.text-glass-border-3000-light{color:var(--glass-border-3000-light)!important}.bg-glass-border-3000-light{background-color:var(--glass-border-3000-light)!important}.border-glass-border-3000-light{border-color:var(--glass-border-3000-light)!important}.border-l-glass-border-3000-light{border-left-color:var(--glass-border-3000-light)!important}.border-r-glass-border-3000-light{border-right-color:var(--glass-border-3000-light)!important}.border-t-glass-border-3000-light{border-top-color:var(--glass-border-3000-light)!important}.border-b-glass-border-3000-light{border-bottom-color:var(--glass-border-3000-light)!important}.border-x-glass-border-3000-light{border-left-color:var(--glass-border-3000-light)!important;border-right-color:var(--glass-border-3000-light)!important}.border-y-glass-border-3000-light{border-bottom-color:var(--glass-border-3000-light)!important;border-top-color:var(--glass-border-3000-light)!important}.decoration-glass-border-3000-light{text-decoration-color:var(--glass-border-3000-light)!important}.text-link-3000-light{color:var(--link-3000-light)!important}.bg-link-3000-light{background-color:var(--link-3000-light)!important}.border-link-3000-light{border-color:var(--link-3000-light)!important}.border-l-link-3000-light{border-left-color:var(--link-3000-light)!important}.border-r-link-3000-light{border-right-color:var(--link-3000-light)!important}.border-t-link-3000-light{border-top-color:var(--link-3000-light)!important}.border-b-link-3000-light{border-bottom-color:var(--link-3000-light)!important}.border-x-link-3000-light{border-left-color:var(--link-3000-light)!important;border-right-color:var(--link-3000-light)!important}.border-y-link-3000-light{border-bottom-color:var(--link-3000-light)!important;border-top-color:var(--link-3000-light)!important}.decoration-link-3000-light{text-decoration-color:var(--link-3000-light)!important}.text-primary-3000-frame-bg-light{color:var(--primary-3000-frame-bg-light)!important}.bg-primary-3000-frame-bg-light{background-color:var(--primary-3000-frame-bg-light)!important}.border-primary-3000-frame-bg-light{border-color:var(--primary-3000-frame-bg-light)!important}.border-l-primary-3000-frame-bg-light{border-left-color:var(--primary-3000-frame-bg-light)!important}.border-r-primary-3000-frame-bg-light{border-right-color:var(--primary-3000-frame-bg-light)!important}.border-t-primary-3000-frame-bg-light{border-top-color:var(--primary-3000-frame-bg-light)!important}.border-b-primary-3000-frame-bg-light{border-bottom-color:var(--primary-3000-frame-bg-light)!important}.border-x-primary-3000-frame-bg-light{border-left-color:var(--primary-3000-frame-bg-light)!important;border-right-color:var(--primary-3000-frame-bg-light)!important}.border-y-primary-3000-frame-bg-light{border-bottom-color:var(--primary-3000-frame-bg-light)!important;border-top-color:var(--primary-3000-frame-bg-light)!important}.decoration-primary-3000-frame-bg-light{text-decoration-color:var(--primary-3000-frame-bg-light)!important}.text-primary-3000-button-bg-light{color:var(--primary-3000-button-bg-light)!important}.bg-primary-3000-button-bg-light{background-color:var(--primary-3000-button-bg-light)!important}.border-primary-3000-button-bg-light{border-color:var(--primary-3000-button-bg-light)!important}.border-l-primary-3000-button-bg-light{border-left-color:var(--primary-3000-button-bg-light)!important}.border-r-primary-3000-button-bg-light{border-right-color:var(--primary-3000-button-bg-light)!important}.border-t-primary-3000-button-bg-light{border-top-color:var(--primary-3000-button-bg-light)!important}.border-b-primary-3000-button-bg-light{border-bottom-color:var(--primary-3000-button-bg-light)!important}.border-x-primary-3000-button-bg-light{border-left-color:var(--primary-3000-button-bg-light)!important;border-right-color:var(--primary-3000-button-bg-light)!important}.border-y-primary-3000-button-bg-light{border-bottom-color:var(--primary-3000-button-bg-light)!important;border-top-color:var(--primary-3000-button-bg-light)!important}.decoration-primary-3000-button-bg-light{text-decoration-color:var(--primary-3000-button-bg-light)!important}.text-primary-3000-button-border-light{color:var(--primary-3000-button-border-light)!important}.bg-primary-3000-button-border-light{background-color:var(--primary-3000-button-border-light)!important}.border-primary-3000-button-border-light{border-color:var(--primary-3000-button-border-light)!important}.border-l-primary-3000-button-border-light{border-left-color:var(--primary-3000-button-border-light)!important}.border-r-primary-3000-button-border-light{border-right-color:var(--primary-3000-button-border-light)!important}.border-t-primary-3000-button-border-light{border-top-color:var(--primary-3000-button-border-light)!important}.border-b-primary-3000-button-border-light{border-bottom-color:var(--primary-3000-button-border-light)!important}.border-x-primary-3000-button-border-light{border-left-color:var(--primary-3000-button-border-light)!important;border-right-color:var(--primary-3000-button-border-light)!important}.border-y-primary-3000-button-border-light{border-bottom-color:var(--primary-3000-button-border-light)!important;border-top-color:var(--primary-3000-button-border-light)!important}.decoration-primary-3000-button-border-light{text-decoration-color:var(--primary-3000-button-border-light)!important}.text-primary-3000-button-border-hover-light{color:var(--primary-3000-button-border-hover-light)!important}.bg-primary-3000-button-border-hover-light{background-color:var(--primary-3000-button-border-hover-light)!important}.border-primary-3000-button-border-hover-light{border-color:var(--primary-3000-button-border-hover-light)!important}.border-l-primary-3000-button-border-hover-light{border-left-color:var(--primary-3000-button-border-hover-light)!important}.border-r-primary-3000-button-border-hover-light{border-right-color:var(--primary-3000-button-border-hover-light)!important}.border-t-primary-3000-button-border-hover-light{border-top-color:var(--primary-3000-button-border-hover-light)!important}.border-b-primary-3000-button-border-hover-light{border-bottom-color:var(--primary-3000-button-border-hover-light)!important}.border-x-primary-3000-button-border-hover-light{border-left-color:var(--primary-3000-button-border-hover-light)!important;border-right-color:var(--primary-3000-button-border-hover-light)!important}.border-y-primary-3000-button-border-hover-light{border-bottom-color:var(--primary-3000-button-border-hover-light)!important;border-top-color:var(--primary-3000-button-border-hover-light)!important}.decoration-primary-3000-button-border-hover-light{text-decoration-color:var(--primary-3000-button-border-hover-light)!important}.text-secondary-3000-frame-bg-light{color:var(--secondary-3000-frame-bg-light)!important}.bg-secondary-3000-frame-bg-light{background-color:var(--secondary-3000-frame-bg-light)!important}.border-secondary-3000-frame-bg-light{border-color:var(--secondary-3000-frame-bg-light)!important}.border-l-secondary-3000-frame-bg-light{border-left-color:var(--secondary-3000-frame-bg-light)!important}.border-r-secondary-3000-frame-bg-light{border-right-color:var(--secondary-3000-frame-bg-light)!important}.border-t-secondary-3000-frame-bg-light{border-top-color:var(--secondary-3000-frame-bg-light)!important}.border-b-secondary-3000-frame-bg-light{border-bottom-color:var(--secondary-3000-frame-bg-light)!important}.border-x-secondary-3000-frame-bg-light{border-left-color:var(--secondary-3000-frame-bg-light)!important;border-right-color:var(--secondary-3000-frame-bg-light)!important}.border-y-secondary-3000-frame-bg-light{border-bottom-color:var(--secondary-3000-frame-bg-light)!important;border-top-color:var(--secondary-3000-frame-bg-light)!important}.decoration-secondary-3000-frame-bg-light{text-decoration-color:var(--secondary-3000-frame-bg-light)!important}.text-secondary-3000-button-bg-light{color:var(--secondary-3000-button-bg-light)!important}.bg-secondary-3000-button-bg-light{background-color:var(--secondary-3000-button-bg-light)!important}.border-secondary-3000-button-bg-light{border-color:var(--secondary-3000-button-bg-light)!important}.border-l-secondary-3000-button-bg-light{border-left-color:var(--secondary-3000-button-bg-light)!important}.border-r-secondary-3000-button-bg-light{border-right-color:var(--secondary-3000-button-bg-light)!important}.border-t-secondary-3000-button-bg-light{border-top-color:var(--secondary-3000-button-bg-light)!important}.border-b-secondary-3000-button-bg-light{border-bottom-color:var(--secondary-3000-button-bg-light)!important}.border-x-secondary-3000-button-bg-light{border-left-color:var(--secondary-3000-button-bg-light)!important;border-right-color:var(--secondary-3000-button-bg-light)!important}.border-y-secondary-3000-button-bg-light{border-bottom-color:var(--secondary-3000-button-bg-light)!important;border-top-color:var(--secondary-3000-button-bg-light)!important}.decoration-secondary-3000-button-bg-light{text-decoration-color:var(--secondary-3000-button-bg-light)!important}.text-secondary-3000-button-border-light{color:var(--secondary-3000-button-border-light)!important}.bg-secondary-3000-button-border-light{background-color:var(--secondary-3000-button-border-light)!important}.border-secondary-3000-button-border-light{border-color:var(--secondary-3000-button-border-light)!important}.border-l-secondary-3000-button-border-light{border-left-color:var(--secondary-3000-button-border-light)!important}.border-r-secondary-3000-button-border-light{border-right-color:var(--secondary-3000-button-border-light)!important}.border-t-secondary-3000-button-border-light{border-top-color:var(--secondary-3000-button-border-light)!important}.border-b-secondary-3000-button-border-light{border-bottom-color:var(--secondary-3000-button-border-light)!important}.border-x-secondary-3000-button-border-light{border-left-color:var(--secondary-3000-button-border-light)!important;border-right-color:var(--secondary-3000-button-border-light)!important}.border-y-secondary-3000-button-border-light{border-bottom-color:var(--secondary-3000-button-border-light)!important;border-top-color:var(--secondary-3000-button-border-light)!important}.decoration-secondary-3000-button-border-light{text-decoration-color:var(--secondary-3000-button-border-light)!important}.text-secondary-3000-button-border-hover-light{color:var(--secondary-3000-button-border-hover-light)!important}.bg-secondary-3000-button-border-hover-light{background-color:var(--secondary-3000-button-border-hover-light)!important}.border-secondary-3000-button-border-hover-light{border-color:var(--secondary-3000-button-border-hover-light)!important}.border-l-secondary-3000-button-border-hover-light{border-left-color:var(--secondary-3000-button-border-hover-light)!important}.border-r-secondary-3000-button-border-hover-light{border-right-color:var(--secondary-3000-button-border-hover-light)!important}.border-t-secondary-3000-button-border-hover-light{border-top-color:var(--secondary-3000-button-border-hover-light)!important}.border-b-secondary-3000-button-border-hover-light{border-bottom-color:var(--secondary-3000-button-border-hover-light)!important}.border-x-secondary-3000-button-border-hover-light{border-left-color:var(--secondary-3000-button-border-hover-light)!important;border-right-color:var(--secondary-3000-button-border-hover-light)!important}.border-y-secondary-3000-button-border-hover-light{border-bottom-color:var(--secondary-3000-button-border-hover-light)!important;border-top-color:var(--secondary-3000-button-border-hover-light)!important}.decoration-secondary-3000-button-border-hover-light{text-decoration-color:var(--secondary-3000-button-border-hover-light)!important}.text-danger-3000-frame-bg-light{color:var(--danger-3000-frame-bg-light)!important}.bg-danger-3000-frame-bg-light{background-color:var(--danger-3000-frame-bg-light)!important}.border-danger-3000-frame-bg-light{border-color:var(--danger-3000-frame-bg-light)!important}.border-l-danger-3000-frame-bg-light{border-left-color:var(--danger-3000-frame-bg-light)!important}.border-r-danger-3000-frame-bg-light{border-right-color:var(--danger-3000-frame-bg-light)!important}.border-t-danger-3000-frame-bg-light{border-top-color:var(--danger-3000-frame-bg-light)!important}.border-b-danger-3000-frame-bg-light{border-bottom-color:var(--danger-3000-frame-bg-light)!important}.border-x-danger-3000-frame-bg-light{border-left-color:var(--danger-3000-frame-bg-light)!important;border-right-color:var(--danger-3000-frame-bg-light)!important}.border-y-danger-3000-frame-bg-light{border-bottom-color:var(--danger-3000-frame-bg-light)!important;border-top-color:var(--danger-3000-frame-bg-light)!important}.decoration-danger-3000-frame-bg-light{text-decoration-color:var(--danger-3000-frame-bg-light)!important}.text-danger-3000-button-border-light{color:var(--danger-3000-button-border-light)!important}.bg-danger-3000-button-border-light{background-color:var(--danger-3000-button-border-light)!important}.border-danger-3000-button-border-light{border-color:var(--danger-3000-button-border-light)!important}.border-l-danger-3000-button-border-light{border-left-color:var(--danger-3000-button-border-light)!important}.border-r-danger-3000-button-border-light{border-right-color:var(--danger-3000-button-border-light)!important}.border-t-danger-3000-button-border-light{border-top-color:var(--danger-3000-button-border-light)!important}.border-b-danger-3000-button-border-light{border-bottom-color:var(--danger-3000-button-border-light)!important}.border-x-danger-3000-button-border-light{border-left-color:var(--danger-3000-button-border-light)!important;border-right-color:var(--danger-3000-button-border-light)!important}.border-y-danger-3000-button-border-light{border-bottom-color:var(--danger-3000-button-border-light)!important;border-top-color:var(--danger-3000-button-border-light)!important}.decoration-danger-3000-button-border-light{text-decoration-color:var(--danger-3000-button-border-light)!important}.text-danger-3000-button-border-hover-light{color:var(--danger-3000-button-border-hover-light)!important}.bg-danger-3000-button-border-hover-light{background-color:var(--danger-3000-button-border-hover-light)!important}.border-danger-3000-button-border-hover-light{border-color:var(--danger-3000-button-border-hover-light)!important}.border-l-danger-3000-button-border-hover-light{border-left-color:var(--danger-3000-button-border-hover-light)!important}.border-r-danger-3000-button-border-hover-light{border-right-color:var(--danger-3000-button-border-hover-light)!important}.border-t-danger-3000-button-border-hover-light{border-top-color:var(--danger-3000-button-border-hover-light)!important}.border-b-danger-3000-button-border-hover-light{border-bottom-color:var(--danger-3000-button-border-hover-light)!important}.border-x-danger-3000-button-border-hover-light{border-left-color:var(--danger-3000-button-border-hover-light)!important;border-right-color:var(--danger-3000-button-border-hover-light)!important}.border-y-danger-3000-button-border-hover-light{border-bottom-color:var(--danger-3000-button-border-hover-light)!important;border-top-color:var(--danger-3000-button-border-hover-light)!important}.decoration-danger-3000-button-border-hover-light{text-decoration-color:var(--danger-3000-button-border-hover-light)!important}.text-shadow-elevation-3000-light{color:var(--shadow-elevation-3000-light)!important}.bg-shadow-elevation-3000-light{background-color:var(--shadow-elevation-3000-light)!important}.border-shadow-elevation-3000-light{border-color:var(--shadow-elevation-3000-light)!important}.border-l-shadow-elevation-3000-light{border-left-color:var(--shadow-elevation-3000-light)!important}.border-r-shadow-elevation-3000-light{border-right-color:var(--shadow-elevation-3000-light)!important}.border-t-shadow-elevation-3000-light{border-top-color:var(--shadow-elevation-3000-light)!important}.border-b-shadow-elevation-3000-light{border-bottom-color:var(--shadow-elevation-3000-light)!important}.border-x-shadow-elevation-3000-light{border-left-color:var(--shadow-elevation-3000-light)!important;border-right-color:var(--shadow-elevation-3000-light)!important}.border-y-shadow-elevation-3000-light{border-bottom-color:var(--shadow-elevation-3000-light)!important;border-top-color:var(--shadow-elevation-3000-light)!important}.decoration-shadow-elevation-3000-light{text-decoration-color:var(--shadow-elevation-3000-light)!important}.text-shadow-elevation-3000-dark{color:var(--shadow-elevation-3000-dark)!important}.bg-shadow-elevation-3000-dark{background-color:var(--shadow-elevation-3000-dark)!important}.border-shadow-elevation-3000-dark{border-color:var(--shadow-elevation-3000-dark)!important}.border-l-shadow-elevation-3000-dark{border-left-color:var(--shadow-elevation-3000-dark)!important}.border-r-shadow-elevation-3000-dark{border-right-color:var(--shadow-elevation-3000-dark)!important}.border-t-shadow-elevation-3000-dark{border-top-color:var(--shadow-elevation-3000-dark)!important}.border-b-shadow-elevation-3000-dark{border-bottom-color:var(--shadow-elevation-3000-dark)!important}.border-x-shadow-elevation-3000-dark{border-left-color:var(--shadow-elevation-3000-dark)!important;border-right-color:var(--shadow-elevation-3000-dark)!important}.border-y-shadow-elevation-3000-dark{border-bottom-color:var(--shadow-elevation-3000-dark)!important;border-top-color:var(--shadow-elevation-3000-dark)!important}.decoration-shadow-elevation-3000-dark{text-decoration-color:var(--shadow-elevation-3000-dark)!important}.text-text-3000-dark{color:var(--text-3000-dark)!important}.bg-text-3000-dark{background-color:var(--text-3000-dark)!important}.border-text-3000-dark{border-color:var(--text-3000-dark)!important}.border-l-text-3000-dark{border-left-color:var(--text-3000-dark)!important}.border-r-text-3000-dark{border-right-color:var(--text-3000-dark)!important}.border-t-text-3000-dark{border-top-color:var(--text-3000-dark)!important}.border-b-text-3000-dark{border-bottom-color:var(--text-3000-dark)!important}.border-x-text-3000-dark{border-left-color:var(--text-3000-dark)!important;border-right-color:var(--text-3000-dark)!important}.border-y-text-3000-dark{border-bottom-color:var(--text-3000-dark)!important;border-top-color:var(--text-3000-dark)!important}.decoration-text-3000-dark{text-decoration-color:var(--text-3000-dark)!important}.text-text-secondary-3000-dark{color:var(--text-secondary-3000-dark)!important}.bg-text-secondary-3000-dark{background-color:var(--text-secondary-3000-dark)!important}.border-text-secondary-3000-dark{border-color:var(--text-secondary-3000-dark)!important}.border-l-text-secondary-3000-dark{border-left-color:var(--text-secondary-3000-dark)!important}.border-r-text-secondary-3000-dark{border-right-color:var(--text-secondary-3000-dark)!important}.border-t-text-secondary-3000-dark{border-top-color:var(--text-secondary-3000-dark)!important}.border-b-text-secondary-3000-dark{border-bottom-color:var(--text-secondary-3000-dark)!important}.border-x-text-secondary-3000-dark{border-left-color:var(--text-secondary-3000-dark)!important;border-right-color:var(--text-secondary-3000-dark)!important}.border-y-text-secondary-3000-dark{border-bottom-color:var(--text-secondary-3000-dark)!important;border-top-color:var(--text-secondary-3000-dark)!important}.decoration-text-secondary-3000-dark{text-decoration-color:var(--text-secondary-3000-dark)!important}.text-muted-3000-dark{color:var(--muted-3000-dark)!important}.bg-muted-3000-dark{background-color:var(--muted-3000-dark)!important}.border-muted-3000-dark{border-color:var(--muted-3000-dark)!important}.border-l-muted-3000-dark{border-left-color:var(--muted-3000-dark)!important}.border-r-muted-3000-dark{border-right-color:var(--muted-3000-dark)!important}.border-t-muted-3000-dark{border-top-color:var(--muted-3000-dark)!important}.border-b-muted-3000-dark{border-bottom-color:var(--muted-3000-dark)!important}.border-x-muted-3000-dark{border-left-color:var(--muted-3000-dark)!important;border-right-color:var(--muted-3000-dark)!important}.border-y-muted-3000-dark{border-bottom-color:var(--muted-3000-dark)!important;border-top-color:var(--muted-3000-dark)!important}.decoration-muted-3000-dark{text-decoration-color:var(--muted-3000-dark)!important}.text-trace-3000-dark{color:var(--trace-3000-dark)!important}.bg-trace-3000-dark{background-color:var(--trace-3000-dark)!important}.border-trace-3000-dark{border-color:var(--trace-3000-dark)!important}.border-l-trace-3000-dark{border-left-color:var(--trace-3000-dark)!important}.border-r-trace-3000-dark{border-right-color:var(--trace-3000-dark)!important}.border-t-trace-3000-dark{border-top-color:var(--trace-3000-dark)!important}.border-b-trace-3000-dark{border-bottom-color:var(--trace-3000-dark)!important}.border-x-trace-3000-dark{border-left-color:var(--trace-3000-dark)!important;border-right-color:var(--trace-3000-dark)!important}.border-y-trace-3000-dark{border-bottom-color:var(--trace-3000-dark)!important;border-top-color:var(--trace-3000-dark)!important}.decoration-trace-3000-dark{text-decoration-color:var(--trace-3000-dark)!important}.text-primary-3000-dark{color:var(--primary-3000-dark)!important}.bg-primary-3000-dark{background-color:var(--primary-3000-dark)!important}.border-primary-3000-dark{border-color:var(--primary-3000-dark)!important}.border-l-primary-3000-dark{border-left-color:var(--primary-3000-dark)!important}.border-r-primary-3000-dark{border-right-color:var(--primary-3000-dark)!important}.border-t-primary-3000-dark{border-top-color:var(--primary-3000-dark)!important}.border-b-primary-3000-dark{border-bottom-color:var(--primary-3000-dark)!important}.border-x-primary-3000-dark{border-left-color:var(--primary-3000-dark)!important;border-right-color:var(--primary-3000-dark)!important}.border-y-primary-3000-dark{border-bottom-color:var(--primary-3000-dark)!important;border-top-color:var(--primary-3000-dark)!important}.decoration-primary-3000-dark{text-decoration-color:var(--primary-3000-dark)!important}.text-primary-highlight-dark{color:var(--primary-highlight-dark)!important}.bg-primary-highlight-dark{background-color:var(--primary-highlight-dark)!important}.border-primary-highlight-dark{border-color:var(--primary-highlight-dark)!important}.border-l-primary-highlight-dark{border-left-color:var(--primary-highlight-dark)!important}.border-r-primary-highlight-dark{border-right-color:var(--primary-highlight-dark)!important}.border-t-primary-highlight-dark{border-top-color:var(--primary-highlight-dark)!important}.border-b-primary-highlight-dark{border-bottom-color:var(--primary-highlight-dark)!important}.border-x-primary-highlight-dark{border-left-color:var(--primary-highlight-dark)!important;border-right-color:var(--primary-highlight-dark)!important}.border-y-primary-highlight-dark{border-bottom-color:var(--primary-highlight-dark)!important;border-top-color:var(--primary-highlight-dark)!important}.decoration-primary-highlight-dark{text-decoration-color:var(--primary-highlight-dark)!important}.text-primary-3000-hover-dark{color:var(--primary-3000-hover-dark)!important}.bg-primary-3000-hover-dark{background-color:var(--primary-3000-hover-dark)!important}.border-primary-3000-hover-dark{border-color:var(--primary-3000-hover-dark)!important}.border-l-primary-3000-hover-dark{border-left-color:var(--primary-3000-hover-dark)!important}.border-r-primary-3000-hover-dark{border-right-color:var(--primary-3000-hover-dark)!important}.border-t-primary-3000-hover-dark{border-top-color:var(--primary-3000-hover-dark)!important}.border-b-primary-3000-hover-dark{border-bottom-color:var(--primary-3000-hover-dark)!important}.border-x-primary-3000-hover-dark{border-left-color:var(--primary-3000-hover-dark)!important;border-right-color:var(--primary-3000-hover-dark)!important}.border-y-primary-3000-hover-dark{border-bottom-color:var(--primary-3000-hover-dark)!important;border-top-color:var(--primary-3000-hover-dark)!important}.decoration-primary-3000-hover-dark{text-decoration-color:var(--primary-3000-hover-dark)!important}.text-primary-3000-active-dark{color:var(--primary-3000-active-dark)!important}.bg-primary-3000-active-dark{background-color:var(--primary-3000-active-dark)!important}.border-primary-3000-active-dark{border-color:var(--primary-3000-active-dark)!important}.border-l-primary-3000-active-dark{border-left-color:var(--primary-3000-active-dark)!important}.border-r-primary-3000-active-dark{border-right-color:var(--primary-3000-active-dark)!important}.border-t-primary-3000-active-dark{border-top-color:var(--primary-3000-active-dark)!important}.border-b-primary-3000-active-dark{border-bottom-color:var(--primary-3000-active-dark)!important}.border-x-primary-3000-active-dark{border-left-color:var(--primary-3000-active-dark)!important;border-right-color:var(--primary-3000-active-dark)!important}.border-y-primary-3000-active-dark{border-bottom-color:var(--primary-3000-active-dark)!important;border-top-color:var(--primary-3000-active-dark)!important}.decoration-primary-3000-active-dark{text-decoration-color:var(--primary-3000-active-dark)!important}.text-primary-alt-highlight-light{color:var(--primary-alt-highlight-light)!important}.bg-primary-alt-highlight-light{background-color:var(--primary-alt-highlight-light)!important}.border-primary-alt-highlight-light{border-color:var(--primary-alt-highlight-light)!important}.border-l-primary-alt-highlight-light{border-left-color:var(--primary-alt-highlight-light)!important}.border-r-primary-alt-highlight-light{border-right-color:var(--primary-alt-highlight-light)!important}.border-t-primary-alt-highlight-light{border-top-color:var(--primary-alt-highlight-light)!important}.border-b-primary-alt-highlight-light{border-bottom-color:var(--primary-alt-highlight-light)!important}.border-x-primary-alt-highlight-light{border-left-color:var(--primary-alt-highlight-light)!important;border-right-color:var(--primary-alt-highlight-light)!important}.border-y-primary-alt-highlight-light{border-bottom-color:var(--primary-alt-highlight-light)!important;border-top-color:var(--primary-alt-highlight-light)!important}.decoration-primary-alt-highlight-light{text-decoration-color:var(--primary-alt-highlight-light)!important}.text-secondary-3000-dark{color:var(--secondary-3000-dark)!important}.bg-secondary-3000-dark{background-color:var(--secondary-3000-dark)!important}.border-secondary-3000-dark{border-color:var(--secondary-3000-dark)!important}.border-l-secondary-3000-dark{border-left-color:var(--secondary-3000-dark)!important}.border-r-secondary-3000-dark{border-right-color:var(--secondary-3000-dark)!important}.border-t-secondary-3000-dark{border-top-color:var(--secondary-3000-dark)!important}.border-b-secondary-3000-dark{border-bottom-color:var(--secondary-3000-dark)!important}.border-x-secondary-3000-dark{border-left-color:var(--secondary-3000-dark)!important;border-right-color:var(--secondary-3000-dark)!important}.border-y-secondary-3000-dark{border-bottom-color:var(--secondary-3000-dark)!important;border-top-color:var(--secondary-3000-dark)!important}.decoration-secondary-3000-dark{text-decoration-color:var(--secondary-3000-dark)!important}.text-secondary-3000-hover-dark{color:var(--secondary-3000-hover-dark)!important}.bg-secondary-3000-hover-dark{background-color:var(--secondary-3000-hover-dark)!important}.border-secondary-3000-hover-dark{border-color:var(--secondary-3000-hover-dark)!important}.border-l-secondary-3000-hover-dark{border-left-color:var(--secondary-3000-hover-dark)!important}.border-r-secondary-3000-hover-dark{border-right-color:var(--secondary-3000-hover-dark)!important}.border-t-secondary-3000-hover-dark{border-top-color:var(--secondary-3000-hover-dark)!important}.border-b-secondary-3000-hover-dark{border-bottom-color:var(--secondary-3000-hover-dark)!important}.border-x-secondary-3000-hover-dark{border-left-color:var(--secondary-3000-hover-dark)!important;border-right-color:var(--secondary-3000-hover-dark)!important}.border-y-secondary-3000-hover-dark{border-bottom-color:var(--secondary-3000-hover-dark)!important;border-top-color:var(--secondary-3000-hover-dark)!important}.decoration-secondary-3000-hover-dark{text-decoration-color:var(--secondary-3000-hover-dark)!important}.text-accent-3000-dark{color:var(--accent-3000-dark)!important}.bg-accent-3000-dark{background-color:var(--accent-3000-dark)!important}.border-accent-3000-dark{border-color:var(--accent-3000-dark)!important}.border-l-accent-3000-dark{border-left-color:var(--accent-3000-dark)!important}.border-r-accent-3000-dark{border-right-color:var(--accent-3000-dark)!important}.border-t-accent-3000-dark{border-top-color:var(--accent-3000-dark)!important}.border-b-accent-3000-dark{border-bottom-color:var(--accent-3000-dark)!important}.border-x-accent-3000-dark{border-left-color:var(--accent-3000-dark)!important;border-right-color:var(--accent-3000-dark)!important}.border-y-accent-3000-dark{border-bottom-color:var(--accent-3000-dark)!important;border-top-color:var(--accent-3000-dark)!important}.decoration-accent-3000-dark{text-decoration-color:var(--accent-3000-dark)!important}.text-bg-3000-dark{color:var(--bg-3000-dark)!important}.bg-bg-3000-dark{background-color:var(--bg-3000-dark)!important}.border-bg-3000-dark{border-color:var(--bg-3000-dark)!important}.border-l-bg-3000-dark{border-left-color:var(--bg-3000-dark)!important}.border-r-bg-3000-dark{border-right-color:var(--bg-3000-dark)!important}.border-t-bg-3000-dark{border-top-color:var(--bg-3000-dark)!important}.border-b-bg-3000-dark{border-bottom-color:var(--bg-3000-dark)!important}.border-x-bg-3000-dark{border-left-color:var(--bg-3000-dark)!important;border-right-color:var(--bg-3000-dark)!important}.border-y-bg-3000-dark{border-bottom-color:var(--bg-3000-dark)!important;border-top-color:var(--bg-3000-dark)!important}.decoration-bg-3000-dark{text-decoration-color:var(--bg-3000-dark)!important}.text-border-3000-dark{color:var(--border-3000-dark)!important}.bg-border-3000-dark{background-color:var(--border-3000-dark)!important}.border-border-3000-dark{border-color:var(--border-3000-dark)!important}.border-l-border-3000-dark{border-left-color:var(--border-3000-dark)!important}.border-r-border-3000-dark{border-right-color:var(--border-3000-dark)!important}.border-t-border-3000-dark{border-top-color:var(--border-3000-dark)!important}.border-b-border-3000-dark{border-bottom-color:var(--border-3000-dark)!important}.border-x-border-3000-dark{border-left-color:var(--border-3000-dark)!important;border-right-color:var(--border-3000-dark)!important}.border-y-border-3000-dark{border-bottom-color:var(--border-3000-dark)!important;border-top-color:var(--border-3000-dark)!important}.decoration-border-3000-dark{text-decoration-color:var(--border-3000-dark)!important}.text-border-bold-3000-dark{color:var(--border-bold-3000-dark)!important}.bg-border-bold-3000-dark{background-color:var(--border-bold-3000-dark)!important}.border-border-bold-3000-dark{border-color:var(--border-bold-3000-dark)!important}.border-l-border-bold-3000-dark{border-left-color:var(--border-bold-3000-dark)!important}.border-r-border-bold-3000-dark{border-right-color:var(--border-bold-3000-dark)!important}.border-t-border-bold-3000-dark{border-top-color:var(--border-bold-3000-dark)!important}.border-b-border-bold-3000-dark{border-bottom-color:var(--border-bold-3000-dark)!important}.border-x-border-bold-3000-dark{border-left-color:var(--border-bold-3000-dark)!important;border-right-color:var(--border-bold-3000-dark)!important}.border-y-border-bold-3000-dark{border-bottom-color:var(--border-bold-3000-dark)!important;border-top-color:var(--border-bold-3000-dark)!important}.decoration-border-bold-3000-dark{text-decoration-color:var(--border-bold-3000-dark)!important}.text-glass-bg-3000-dark{color:var(--glass-bg-3000-dark)!important}.bg-glass-bg-3000-dark{background-color:var(--glass-bg-3000-dark)!important}.border-glass-bg-3000-dark{border-color:var(--glass-bg-3000-dark)!important}.border-l-glass-bg-3000-dark{border-left-color:var(--glass-bg-3000-dark)!important}.border-r-glass-bg-3000-dark{border-right-color:var(--glass-bg-3000-dark)!important}.border-t-glass-bg-3000-dark{border-top-color:var(--glass-bg-3000-dark)!important}.border-b-glass-bg-3000-dark{border-bottom-color:var(--glass-bg-3000-dark)!important}.border-x-glass-bg-3000-dark{border-left-color:var(--glass-bg-3000-dark)!important;border-right-color:var(--glass-bg-3000-dark)!important}.border-y-glass-bg-3000-dark{border-bottom-color:var(--glass-bg-3000-dark)!important;border-top-color:var(--glass-bg-3000-dark)!important}.decoration-glass-bg-3000-dark{text-decoration-color:var(--glass-bg-3000-dark)!important}.text-glass-border-3000-dark{color:var(--glass-border-3000-dark)!important}.bg-glass-border-3000-dark{background-color:var(--glass-border-3000-dark)!important}.border-glass-border-3000-dark{border-color:var(--glass-border-3000-dark)!important}.border-l-glass-border-3000-dark{border-left-color:var(--glass-border-3000-dark)!important}.border-r-glass-border-3000-dark{border-right-color:var(--glass-border-3000-dark)!important}.border-t-glass-border-3000-dark{border-top-color:var(--glass-border-3000-dark)!important}.border-b-glass-border-3000-dark{border-bottom-color:var(--glass-border-3000-dark)!important}.border-x-glass-border-3000-dark{border-left-color:var(--glass-border-3000-dark)!important;border-right-color:var(--glass-border-3000-dark)!important}.border-y-glass-border-3000-dark{border-bottom-color:var(--glass-border-3000-dark)!important;border-top-color:var(--glass-border-3000-dark)!important}.decoration-glass-border-3000-dark{text-decoration-color:var(--glass-border-3000-dark)!important}.text-link-3000-dark{color:var(--link-3000-dark)!important}.bg-link-3000-dark{background-color:var(--link-3000-dark)!important}.border-link-3000-dark{border-color:var(--link-3000-dark)!important}.border-l-link-3000-dark{border-left-color:var(--link-3000-dark)!important}.border-r-link-3000-dark{border-right-color:var(--link-3000-dark)!important}.border-t-link-3000-dark{border-top-color:var(--link-3000-dark)!important}.border-b-link-3000-dark{border-bottom-color:var(--link-3000-dark)!important}.border-x-link-3000-dark{border-left-color:var(--link-3000-dark)!important;border-right-color:var(--link-3000-dark)!important}.border-y-link-3000-dark{border-bottom-color:var(--link-3000-dark)!important;border-top-color:var(--link-3000-dark)!important}.decoration-link-3000-dark{text-decoration-color:var(--link-3000-dark)!important}.text-primary-3000-frame-bg-dark{color:var(--primary-3000-frame-bg-dark)!important}.bg-primary-3000-frame-bg-dark{background-color:var(--primary-3000-frame-bg-dark)!important}.border-primary-3000-frame-bg-dark{border-color:var(--primary-3000-frame-bg-dark)!important}.border-l-primary-3000-frame-bg-dark{border-left-color:var(--primary-3000-frame-bg-dark)!important}.border-r-primary-3000-frame-bg-dark{border-right-color:var(--primary-3000-frame-bg-dark)!important}.border-t-primary-3000-frame-bg-dark{border-top-color:var(--primary-3000-frame-bg-dark)!important}.border-b-primary-3000-frame-bg-dark{border-bottom-color:var(--primary-3000-frame-bg-dark)!important}.border-x-primary-3000-frame-bg-dark{border-left-color:var(--primary-3000-frame-bg-dark)!important;border-right-color:var(--primary-3000-frame-bg-dark)!important}.border-y-primary-3000-frame-bg-dark{border-bottom-color:var(--primary-3000-frame-bg-dark)!important;border-top-color:var(--primary-3000-frame-bg-dark)!important}.decoration-primary-3000-frame-bg-dark{text-decoration-color:var(--primary-3000-frame-bg-dark)!important}.text-primary-3000-button-bg-dark{color:var(--primary-3000-button-bg-dark)!important}.bg-primary-3000-button-bg-dark{background-color:var(--primary-3000-button-bg-dark)!important}.border-primary-3000-button-bg-dark{border-color:var(--primary-3000-button-bg-dark)!important}.border-l-primary-3000-button-bg-dark{border-left-color:var(--primary-3000-button-bg-dark)!important}.border-r-primary-3000-button-bg-dark{border-right-color:var(--primary-3000-button-bg-dark)!important}.border-t-primary-3000-button-bg-dark{border-top-color:var(--primary-3000-button-bg-dark)!important}.border-b-primary-3000-button-bg-dark{border-bottom-color:var(--primary-3000-button-bg-dark)!important}.border-x-primary-3000-button-bg-dark{border-left-color:var(--primary-3000-button-bg-dark)!important;border-right-color:var(--primary-3000-button-bg-dark)!important}.border-y-primary-3000-button-bg-dark{border-bottom-color:var(--primary-3000-button-bg-dark)!important;border-top-color:var(--primary-3000-button-bg-dark)!important}.decoration-primary-3000-button-bg-dark{text-decoration-color:var(--primary-3000-button-bg-dark)!important}.text-primary-3000-button-border-dark{color:var(--primary-3000-button-border-dark)!important}.bg-primary-3000-button-border-dark{background-color:var(--primary-3000-button-border-dark)!important}.border-primary-3000-button-border-dark{border-color:var(--primary-3000-button-border-dark)!important}.border-l-primary-3000-button-border-dark{border-left-color:var(--primary-3000-button-border-dark)!important}.border-r-primary-3000-button-border-dark{border-right-color:var(--primary-3000-button-border-dark)!important}.border-t-primary-3000-button-border-dark{border-top-color:var(--primary-3000-button-border-dark)!important}.border-b-primary-3000-button-border-dark{border-bottom-color:var(--primary-3000-button-border-dark)!important}.border-x-primary-3000-button-border-dark{border-left-color:var(--primary-3000-button-border-dark)!important;border-right-color:var(--primary-3000-button-border-dark)!important}.border-y-primary-3000-button-border-dark{border-bottom-color:var(--primary-3000-button-border-dark)!important;border-top-color:var(--primary-3000-button-border-dark)!important}.decoration-primary-3000-button-border-dark{text-decoration-color:var(--primary-3000-button-border-dark)!important}.text-primary-3000-button-border-hover-dark{color:var(--primary-3000-button-border-hover-dark)!important}.bg-primary-3000-button-border-hover-dark{background-color:var(--primary-3000-button-border-hover-dark)!important}.border-primary-3000-button-border-hover-dark{border-color:var(--primary-3000-button-border-hover-dark)!important}.border-l-primary-3000-button-border-hover-dark{border-left-color:var(--primary-3000-button-border-hover-dark)!important}.border-r-primary-3000-button-border-hover-dark{border-right-color:var(--primary-3000-button-border-hover-dark)!important}.border-t-primary-3000-button-border-hover-dark{border-top-color:var(--primary-3000-button-border-hover-dark)!important}.border-b-primary-3000-button-border-hover-dark{border-bottom-color:var(--primary-3000-button-border-hover-dark)!important}.border-x-primary-3000-button-border-hover-dark{border-left-color:var(--primary-3000-button-border-hover-dark)!important;border-right-color:var(--primary-3000-button-border-hover-dark)!important}.border-y-primary-3000-button-border-hover-dark{border-bottom-color:var(--primary-3000-button-border-hover-dark)!important;border-top-color:var(--primary-3000-button-border-hover-dark)!important}.decoration-primary-3000-button-border-hover-dark{text-decoration-color:var(--primary-3000-button-border-hover-dark)!important}.text-primary-alt-highlight-dark{color:var(--primary-alt-highlight-dark)!important}.bg-primary-alt-highlight-dark{background-color:var(--primary-alt-highlight-dark)!important}.border-primary-alt-highlight-dark{border-color:var(--primary-alt-highlight-dark)!important}.border-l-primary-alt-highlight-dark{border-left-color:var(--primary-alt-highlight-dark)!important}.border-r-primary-alt-highlight-dark{border-right-color:var(--primary-alt-highlight-dark)!important}.border-t-primary-alt-highlight-dark{border-top-color:var(--primary-alt-highlight-dark)!important}.border-b-primary-alt-highlight-dark{border-bottom-color:var(--primary-alt-highlight-dark)!important}.border-x-primary-alt-highlight-dark{border-left-color:var(--primary-alt-highlight-dark)!important;border-right-color:var(--primary-alt-highlight-dark)!important}.border-y-primary-alt-highlight-dark{border-bottom-color:var(--primary-alt-highlight-dark)!important;border-top-color:var(--primary-alt-highlight-dark)!important}.decoration-primary-alt-highlight-dark{text-decoration-color:var(--primary-alt-highlight-dark)!important}.text-secondary-3000-frame-bg-dark{color:var(--secondary-3000-frame-bg-dark)!important}.bg-secondary-3000-frame-bg-dark{background-color:var(--secondary-3000-frame-bg-dark)!important}.border-secondary-3000-frame-bg-dark{border-color:var(--secondary-3000-frame-bg-dark)!important}.border-l-secondary-3000-frame-bg-dark{border-left-color:var(--secondary-3000-frame-bg-dark)!important}.border-r-secondary-3000-frame-bg-dark{border-right-color:var(--secondary-3000-frame-bg-dark)!important}.border-t-secondary-3000-frame-bg-dark{border-top-color:var(--secondary-3000-frame-bg-dark)!important}.border-b-secondary-3000-frame-bg-dark{border-bottom-color:var(--secondary-3000-frame-bg-dark)!important}.border-x-secondary-3000-frame-bg-dark{border-left-color:var(--secondary-3000-frame-bg-dark)!important;border-right-color:var(--secondary-3000-frame-bg-dark)!important}.border-y-secondary-3000-frame-bg-dark{border-bottom-color:var(--secondary-3000-frame-bg-dark)!important;border-top-color:var(--secondary-3000-frame-bg-dark)!important}.decoration-secondary-3000-frame-bg-dark{text-decoration-color:var(--secondary-3000-frame-bg-dark)!important}.text-secondary-3000-button-bg-dark{color:var(--secondary-3000-button-bg-dark)!important}.bg-secondary-3000-button-bg-dark{background-color:var(--secondary-3000-button-bg-dark)!important}.border-secondary-3000-button-bg-dark{border-color:var(--secondary-3000-button-bg-dark)!important}.border-l-secondary-3000-button-bg-dark{border-left-color:var(--secondary-3000-button-bg-dark)!important}.border-r-secondary-3000-button-bg-dark{border-right-color:var(--secondary-3000-button-bg-dark)!important}.border-t-secondary-3000-button-bg-dark{border-top-color:var(--secondary-3000-button-bg-dark)!important}.border-b-secondary-3000-button-bg-dark{border-bottom-color:var(--secondary-3000-button-bg-dark)!important}.border-x-secondary-3000-button-bg-dark{border-left-color:var(--secondary-3000-button-bg-dark)!important;border-right-color:var(--secondary-3000-button-bg-dark)!important}.border-y-secondary-3000-button-bg-dark{border-bottom-color:var(--secondary-3000-button-bg-dark)!important;border-top-color:var(--secondary-3000-button-bg-dark)!important}.decoration-secondary-3000-button-bg-dark{text-decoration-color:var(--secondary-3000-button-bg-dark)!important}.text-secondary-3000-button-border-dark{color:var(--secondary-3000-button-border-dark)!important}.bg-secondary-3000-button-border-dark{background-color:var(--secondary-3000-button-border-dark)!important}.border-secondary-3000-button-border-dark{border-color:var(--secondary-3000-button-border-dark)!important}.border-l-secondary-3000-button-border-dark{border-left-color:var(--secondary-3000-button-border-dark)!important}.border-r-secondary-3000-button-border-dark{border-right-color:var(--secondary-3000-button-border-dark)!important}.border-t-secondary-3000-button-border-dark{border-top-color:var(--secondary-3000-button-border-dark)!important}.border-b-secondary-3000-button-border-dark{border-bottom-color:var(--secondary-3000-button-border-dark)!important}.border-x-secondary-3000-button-border-dark{border-left-color:var(--secondary-3000-button-border-dark)!important;border-right-color:var(--secondary-3000-button-border-dark)!important}.border-y-secondary-3000-button-border-dark{border-bottom-color:var(--secondary-3000-button-border-dark)!important;border-top-color:var(--secondary-3000-button-border-dark)!important}.decoration-secondary-3000-button-border-dark{text-decoration-color:var(--secondary-3000-button-border-dark)!important}.text-secondary-3000-button-border-hover-dark{color:var(--secondary-3000-button-border-hover-dark)!important}.bg-secondary-3000-button-border-hover-dark{background-color:var(--secondary-3000-button-border-hover-dark)!important}.border-secondary-3000-button-border-hover-dark{border-color:var(--secondary-3000-button-border-hover-dark)!important}.border-l-secondary-3000-button-border-hover-dark{border-left-color:var(--secondary-3000-button-border-hover-dark)!important}.border-r-secondary-3000-button-border-hover-dark{border-right-color:var(--secondary-3000-button-border-hover-dark)!important}.border-t-secondary-3000-button-border-hover-dark{border-top-color:var(--secondary-3000-button-border-hover-dark)!important}.border-b-secondary-3000-button-border-hover-dark{border-bottom-color:var(--secondary-3000-button-border-hover-dark)!important}.border-x-secondary-3000-button-border-hover-dark{border-left-color:var(--secondary-3000-button-border-hover-dark)!important;border-right-color:var(--secondary-3000-button-border-hover-dark)!important}.border-y-secondary-3000-button-border-hover-dark{border-bottom-color:var(--secondary-3000-button-border-hover-dark)!important;border-top-color:var(--secondary-3000-button-border-hover-dark)!important}.decoration-secondary-3000-button-border-hover-dark{text-decoration-color:var(--secondary-3000-button-border-hover-dark)!important}.text-danger-3000-frame-bg-dark{color:var(--danger-3000-frame-bg-dark)!important}.bg-danger-3000-frame-bg-dark{background-color:var(--danger-3000-frame-bg-dark)!important}.border-danger-3000-frame-bg-dark{border-color:var(--danger-3000-frame-bg-dark)!important}.border-l-danger-3000-frame-bg-dark{border-left-color:var(--danger-3000-frame-bg-dark)!important}.border-r-danger-3000-frame-bg-dark{border-right-color:var(--danger-3000-frame-bg-dark)!important}.border-t-danger-3000-frame-bg-dark{border-top-color:var(--danger-3000-frame-bg-dark)!important}.border-b-danger-3000-frame-bg-dark{border-bottom-color:var(--danger-3000-frame-bg-dark)!important}.border-x-danger-3000-frame-bg-dark{border-left-color:var(--danger-3000-frame-bg-dark)!important;border-right-color:var(--danger-3000-frame-bg-dark)!important}.border-y-danger-3000-frame-bg-dark{border-bottom-color:var(--danger-3000-frame-bg-dark)!important;border-top-color:var(--danger-3000-frame-bg-dark)!important}.decoration-danger-3000-frame-bg-dark{text-decoration-color:var(--danger-3000-frame-bg-dark)!important}.text-danger-3000-button-border-dark{color:var(--danger-3000-button-border-dark)!important}.bg-danger-3000-button-border-dark{background-color:var(--danger-3000-button-border-dark)!important}.border-danger-3000-button-border-dark{border-color:var(--danger-3000-button-border-dark)!important}.border-l-danger-3000-button-border-dark{border-left-color:var(--danger-3000-button-border-dark)!important}.border-r-danger-3000-button-border-dark{border-right-color:var(--danger-3000-button-border-dark)!important}.border-t-danger-3000-button-border-dark{border-top-color:var(--danger-3000-button-border-dark)!important}.border-b-danger-3000-button-border-dark{border-bottom-color:var(--danger-3000-button-border-dark)!important}.border-x-danger-3000-button-border-dark{border-left-color:var(--danger-3000-button-border-dark)!important;border-right-color:var(--danger-3000-button-border-dark)!important}.border-y-danger-3000-button-border-dark{border-bottom-color:var(--danger-3000-button-border-dark)!important;border-top-color:var(--danger-3000-button-border-dark)!important}.decoration-danger-3000-button-border-dark{text-decoration-color:var(--danger-3000-button-border-dark)!important}.text-danger-3000-button-border-hover-dark{color:var(--danger-3000-button-border-hover-dark)!important}.bg-danger-3000-button-border-hover-dark{background-color:var(--danger-3000-button-border-hover-dark)!important}.border-danger-3000-button-border-hover-dark{border-color:var(--danger-3000-button-border-hover-dark)!important}.border-l-danger-3000-button-border-hover-dark{border-left-color:var(--danger-3000-button-border-hover-dark)!important}.border-r-danger-3000-button-border-hover-dark{border-right-color:var(--danger-3000-button-border-hover-dark)!important}.border-t-danger-3000-button-border-hover-dark{border-top-color:var(--danger-3000-button-border-hover-dark)!important}.border-b-danger-3000-button-border-hover-dark{border-bottom-color:var(--danger-3000-button-border-hover-dark)!important}.border-x-danger-3000-button-border-hover-dark{border-left-color:var(--danger-3000-button-border-hover-dark)!important;border-right-color:var(--danger-3000-button-border-hover-dark)!important}.border-y-danger-3000-button-border-hover-dark{border-bottom-color:var(--danger-3000-button-border-hover-dark)!important;border-top-color:var(--danger-3000-button-border-hover-dark)!important}.decoration-danger-3000-button-border-hover-dark{text-decoration-color:var(--danger-3000-button-border-hover-dark)!important}.text-default{color:var(--default)!important}.bg-default{background-color:var(--default)!important}.border-default{border-color:var(--default)!important}.border-l-default{border-left-color:var(--default)!important}.border-r-default{border-right-color:var(--default)!important}.border-t-default{border-top-color:var(--default)!important}.border-b-default{border-bottom-color:var(--default)!important}.border-x-default{border-left-color:var(--default)!important;border-right-color:var(--default)!important}.border-y-default{border-bottom-color:var(--default)!important;border-top-color:var(--default)!important}.decoration-default{text-decoration-color:var(--default)!important}.text-text-3000{color:var(--text-3000)!important}.bg-text-3000{background-color:var(--text-3000)!important}.border-text-3000{border-color:var(--text-3000)!important}.border-l-text-3000{border-left-color:var(--text-3000)!important}.border-r-text-3000{border-right-color:var(--text-3000)!important}.border-t-text-3000{border-top-color:var(--text-3000)!important}.border-b-text-3000{border-bottom-color:var(--text-3000)!important}.border-x-text-3000{border-left-color:var(--text-3000)!important;border-right-color:var(--text-3000)!important}.border-y-text-3000{border-bottom-color:var(--text-3000)!important;border-top-color:var(--text-3000)!important}.decoration-text-3000{text-decoration-color:var(--text-3000)!important}.text-text-secondary-3000{color:var(--text-secondary-3000)!important}.bg-text-secondary-3000{background-color:var(--text-secondary-3000)!important}.border-text-secondary-3000{border-color:var(--text-secondary-3000)!important}.border-l-text-secondary-3000{border-left-color:var(--text-secondary-3000)!important}.border-r-text-secondary-3000{border-right-color:var(--text-secondary-3000)!important}.border-t-text-secondary-3000{border-top-color:var(--text-secondary-3000)!important}.border-b-text-secondary-3000{border-bottom-color:var(--text-secondary-3000)!important}.border-x-text-secondary-3000{border-left-color:var(--text-secondary-3000)!important;border-right-color:var(--text-secondary-3000)!important}.border-y-text-secondary-3000{border-bottom-color:var(--text-secondary-3000)!important;border-top-color:var(--text-secondary-3000)!important}.decoration-text-secondary-3000{text-decoration-color:var(--text-secondary-3000)!important}.text-muted-3000{color:var(--muted-3000)!important}.bg-muted-3000{background-color:var(--muted-3000)!important}.border-muted-3000{border-color:var(--muted-3000)!important}.border-l-muted-3000{border-left-color:var(--muted-3000)!important}.border-r-muted-3000{border-right-color:var(--muted-3000)!important}.border-t-muted-3000{border-top-color:var(--muted-3000)!important}.border-b-muted-3000{border-bottom-color:var(--muted-3000)!important}.border-x-muted-3000{border-left-color:var(--muted-3000)!important;border-right-color:var(--muted-3000)!important}.border-y-muted-3000{border-bottom-color:var(--muted-3000)!important;border-top-color:var(--muted-3000)!important}.decoration-muted-3000{text-decoration-color:var(--muted-3000)!important}.text-primary-3000{color:var(--primary-3000)!important}.bg-primary-3000{background-color:var(--primary-3000)!important}.border-primary-3000{border-color:var(--primary-3000)!important}.border-l-primary-3000{border-left-color:var(--primary-3000)!important}.border-r-primary-3000{border-right-color:var(--primary-3000)!important}.border-t-primary-3000{border-top-color:var(--primary-3000)!important}.border-b-primary-3000{border-bottom-color:var(--primary-3000)!important}.border-x-primary-3000{border-left-color:var(--primary-3000)!important;border-right-color:var(--primary-3000)!important}.border-y-primary-3000{border-bottom-color:var(--primary-3000)!important;border-top-color:var(--primary-3000)!important}.decoration-primary-3000{text-decoration-color:var(--primary-3000)!important}.text-secondary-3000{color:var(--secondary-3000)!important}.bg-secondary-3000{background-color:var(--secondary-3000)!important}.border-secondary-3000{border-color:var(--secondary-3000)!important}.border-l-secondary-3000{border-left-color:var(--secondary-3000)!important}.border-r-secondary-3000{border-right-color:var(--secondary-3000)!important}.border-t-secondary-3000{border-top-color:var(--secondary-3000)!important}.border-b-secondary-3000{border-bottom-color:var(--secondary-3000)!important}.border-x-secondary-3000{border-left-color:var(--secondary-3000)!important;border-right-color:var(--secondary-3000)!important}.border-y-secondary-3000{border-bottom-color:var(--secondary-3000)!important;border-top-color:var(--secondary-3000)!important}.decoration-secondary-3000{text-decoration-color:var(--secondary-3000)!important}.text-secondary-3000-hover{color:var(--secondary-3000-hover)!important}.bg-secondary-3000-hover{background-color:var(--secondary-3000-hover)!important}.border-secondary-3000-hover{border-color:var(--secondary-3000-hover)!important}.border-l-secondary-3000-hover{border-left-color:var(--secondary-3000-hover)!important}.border-r-secondary-3000-hover{border-right-color:var(--secondary-3000-hover)!important}.border-t-secondary-3000-hover{border-top-color:var(--secondary-3000-hover)!important}.border-b-secondary-3000-hover{border-bottom-color:var(--secondary-3000-hover)!important}.border-x-secondary-3000-hover{border-left-color:var(--secondary-3000-hover)!important;border-right-color:var(--secondary-3000-hover)!important}.border-y-secondary-3000-hover{border-bottom-color:var(--secondary-3000-hover)!important;border-top-color:var(--secondary-3000-hover)!important}.decoration-secondary-3000-hover{text-decoration-color:var(--secondary-3000-hover)!important}.text-accent-3000{color:var(--accent-3000)!important}.bg-accent-3000{background-color:var(--accent-3000)!important}.border-accent-3000{border-color:var(--accent-3000)!important}.border-l-accent-3000{border-left-color:var(--accent-3000)!important}.border-r-accent-3000{border-right-color:var(--accent-3000)!important}.border-t-accent-3000{border-top-color:var(--accent-3000)!important}.border-b-accent-3000{border-bottom-color:var(--accent-3000)!important}.border-x-accent-3000{border-left-color:var(--accent-3000)!important;border-right-color:var(--accent-3000)!important}.border-y-accent-3000{border-bottom-color:var(--accent-3000)!important;border-top-color:var(--accent-3000)!important}.decoration-accent-3000{text-decoration-color:var(--accent-3000)!important}.text-bg-3000{color:var(--bg-3000)!important}.bg-bg-3000{background-color:var(--bg-3000)!important}.border-bg-3000{border-color:var(--bg-3000)!important}.border-l-bg-3000{border-left-color:var(--bg-3000)!important}.border-r-bg-3000{border-right-color:var(--bg-3000)!important}.border-t-bg-3000{border-top-color:var(--bg-3000)!important}.border-b-bg-3000{border-bottom-color:var(--bg-3000)!important}.border-x-bg-3000{border-left-color:var(--bg-3000)!important;border-right-color:var(--bg-3000)!important}.border-y-bg-3000{border-bottom-color:var(--bg-3000)!important;border-top-color:var(--bg-3000)!important}.decoration-bg-3000{text-decoration-color:var(--bg-3000)!important}.text-primary-highlight{color:var(--primary-highlight)!important}.bg-primary-highlight{background-color:var(--primary-highlight)!important}.border-primary-highlight{border-color:var(--primary-highlight)!important}.border-l-primary-highlight{border-left-color:var(--primary-highlight)!important}.border-r-primary-highlight{border-right-color:var(--primary-highlight)!important}.border-t-primary-highlight{border-top-color:var(--primary-highlight)!important}.border-b-primary-highlight{border-bottom-color:var(--primary-highlight)!important}.border-x-primary-highlight{border-left-color:var(--primary-highlight)!important;border-right-color:var(--primary-highlight)!important}.border-y-primary-highlight{border-bottom-color:var(--primary-highlight)!important;border-top-color:var(--primary-highlight)!important}.decoration-primary-highlight{text-decoration-color:var(--primary-highlight)!important}.text-primary-alt-highlight{color:var(--primary-alt-highlight)!important}.bg-primary-alt-highlight{background-color:var(--primary-alt-highlight)!important}.border-primary-alt-highlight{border-color:var(--primary-alt-highlight)!important}.border-l-primary-alt-highlight{border-left-color:var(--primary-alt-highlight)!important}.border-r-primary-alt-highlight{border-right-color:var(--primary-alt-highlight)!important}.border-t-primary-alt-highlight{border-top-color:var(--primary-alt-highlight)!important}.border-b-primary-alt-highlight{border-bottom-color:var(--primary-alt-highlight)!important}.border-x-primary-alt-highlight{border-left-color:var(--primary-alt-highlight)!important;border-right-color:var(--primary-alt-highlight)!important}.border-y-primary-alt-highlight{border-bottom-color:var(--primary-alt-highlight)!important;border-top-color:var(--primary-alt-highlight)!important}.decoration-primary-alt-highlight{text-decoration-color:var(--primary-alt-highlight)!important}.text-primary-alt{color:var(--primary-alt)!important}.bg-primary-alt{background-color:var(--primary-alt)!important}.border-primary-alt{border-color:var(--primary-alt)!important}.border-l-primary-alt{border-left-color:var(--primary-alt)!important}.border-r-primary-alt{border-right-color:var(--primary-alt)!important}.border-t-primary-alt{border-top-color:var(--primary-alt)!important}.border-b-primary-alt{border-bottom-color:var(--primary-alt)!important}.border-x-primary-alt{border-left-color:var(--primary-alt)!important;border-right-color:var(--primary-alt)!important}.border-y-primary-alt{border-bottom-color:var(--primary-alt)!important;border-top-color:var(--primary-alt)!important}.decoration-primary-alt{text-decoration-color:var(--primary-alt)!important}.hover\\:text-primary:hover{color:#1d4aff!important}.hover\\:bg-primary:hover{background-color:#1d4aff!important}.hover\\:border-primary:hover{border-color:#1d4aff!important}.hover\\:text-danger-highlight:hover{color:rgba(219,55,7,.1)!important}.hover\\:bg-danger-highlight:hover{background-color:rgba(219,55,7,.1)!important}.hover\\:border-danger-highlight:hover{border-color:rgba(219,55,7,.1)!important}.hover\\:text-danger-lighter:hover{color:#ffa599!important}.hover\\:bg-danger-lighter:hover{background-color:#ffa599!important}.hover\\:border-danger-lighter:hover{border-color:#ffa599!important}.hover\\:text-danger-light:hover{color:#df4b20!important}.hover\\:bg-danger-light:hover{background-color:#df4b20!important}.hover\\:border-danger-light:hover{border-color:#df4b20!important}.hover\\:text-danger:hover{color:#db3707!important}.hover\\:bg-danger:hover{background-color:#db3707!important}.hover\\:border-danger:hover{border-color:#db3707!important}.hover\\:text-danger-dark:hover{color:#992705!important}.hover\\:bg-danger-dark:hover{background-color:#992705!important}.hover\\:border-danger-dark:hover{border-color:#992705!important}.hover\\:text-warning-highlight:hover{color:rgba(247,165,1,.1)!important}.hover\\:bg-warning-highlight:hover{background-color:rgba(247,165,1,.1)!important}.hover\\:border-warning-highlight:hover{border-color:rgba(247,165,1,.1)!important}.hover\\:text-warning:hover{color:#f7a501!important}.hover\\:bg-warning:hover{background-color:#f7a501!important}.hover\\:border-warning:hover{border-color:#f7a501!important}.hover\\:text-warning-dark:hover{color:#e09423!important}.hover\\:bg-warning-dark:hover{background-color:#e09423!important}.hover\\:border-warning-dark:hover{border-color:#e09423!important}.hover\\:text-highlight:hover{color:#e49f2c!important}.hover\\:bg-highlight:hover{background-color:#e49f2c!important}.hover\\:border-highlight:hover{border-color:#e49f2c!important}.hover\\:text-success-highlight:hover{color:rgba(56,134,0,.1)!important}.hover\\:bg-success-highlight:hover{background-color:rgba(56,134,0,.1)!important}.hover\\:border-success-highlight:hover{border-color:rgba(56,134,0,.1)!important}.hover\\:text-success-light:hover{color:#5f9d32!important}.hover\\:bg-success-light:hover{background-color:#5f9d32!important}.hover\\:border-success-light:hover{border-color:#5f9d32!important}.hover\\:text-success:hover{color:#388600!important}.hover\\:bg-success:hover{background-color:#388600!important}.hover\\:border-success:hover{border-color:#388600!important}.hover\\:text-success-dark:hover{color:#245700!important}.hover\\:bg-success-dark:hover{background-color:#245700!important}.hover\\:border-success-dark:hover{border-color:#245700!important}.hover\\:text-muted:hover{color:#5f5f5f!important}.hover\\:bg-muted:hover{background-color:#5f5f5f!important}.hover\\:border-muted:hover{border-color:#5f5f5f!important}.hover\\:text-muted-alt:hover{color:#747ea1!important}.hover\\:bg-muted-alt:hover{background-color:#747ea1!important}.hover\\:border-muted-alt:hover{border-color:#747ea1!important}.hover\\:text-mark:hover{color:hsla(42,94%,86%,.8)!important}.hover\\:bg-mark:hover{background-color:hsla(42,94%,86%,.8)!important}.hover\\:border-mark:hover{border-color:hsla(42,94%,86%,.8)!important}.hover\\:text-white:hover{color:#fff!important}.hover\\:bg-white:hover{background-color:#fff!important}.hover\\:border-white:hover{border-color:#fff!important}.hover\\:text-bg-light:hover{color:#fff!important}.hover\\:bg-bg-light:hover{background-color:#fff!important}.hover\\:border-bg-light:hover{border-color:#fff!important}.hover\\:text-side:hover{color:#fafaf9!important}.hover\\:bg-side:hover{background-color:#fafaf9!important}.hover\\:border-side:hover{border-color:#fafaf9!important}.hover\\:text-mid:hover{color:#f2f2f2!important}.hover\\:bg-mid:hover{background-color:#f2f2f2!important}.hover\\:border-mid:hover{border-color:#f2f2f2!important}.hover\\:text-border:hover{color:rgba(0,0,0,.15)!important}.hover\\:bg-border:hover{background-color:rgba(0,0,0,.15)!important}.hover\\:border-border:hover{border-color:rgba(0,0,0,.15)!important}.hover\\:text-border-light:hover{color:rgba(0,0,0,.08)!important}.hover\\:bg-border-light:hover{background-color:rgba(0,0,0,.08)!important}.hover\\:border-border-light:hover{border-color:rgba(0,0,0,.08)!important}.hover\\:text-border-bold:hover{color:rgba(0,0,0,.24)!important}.hover\\:bg-border-bold:hover{background-color:rgba(0,0,0,.24)!important}.hover\\:border-border-bold:hover{border-color:rgba(0,0,0,.24)!important}.hover\\:text-transparent:hover{color:transparent!important}.hover\\:bg-transparent:hover{background-color:transparent!important}.hover\\:border-transparent:hover{border-color:transparent!important}.hover\\:text-link:hover{color:var(--primary-3000)!important}.hover\\:bg-link:hover{background-color:var(--primary-3000)!important}.hover\\:border-link:hover{border-color:var(--primary-3000)!important}.hover\\:text-brand-blue:hover{color:#1d4aff!important}.hover\\:bg-brand-blue:hover{background-color:#1d4aff!important}.hover\\:border-brand-blue:hover{border-color:#1d4aff!important}.hover\\:text-brand-red:hover{color:#f54e00!important}.hover\\:bg-brand-red:hover{background-color:#f54e00!important}.hover\\:border-brand-red:hover{border-color:#f54e00!important}.hover\\:text-brand-yellow:hover{color:#f9bd2b!important}.hover\\:bg-brand-yellow:hover{background-color:#f9bd2b!important}.hover\\:border-brand-yellow:hover{border-color:#f9bd2b!important}.hover\\:text-brand-key:hover{color:#000!important}.hover\\:bg-brand-key:hover{background-color:#000!important}.hover\\:border-brand-key:hover{border-color:#000!important}.hover\\:text-text-3000-light:hover{color:#111!important}.hover\\:bg-text-3000-light:hover{background-color:#111!important}.hover\\:border-text-3000-light:hover{border-color:#111!important}.hover\\:text-text-secondary-3000-light:hover{color:hsla(0,0%,7%,.7)!important}.hover\\:bg-text-secondary-3000-light:hover{background-color:hsla(0,0%,7%,.7)!important}.hover\\:border-text-secondary-3000-light:hover{border-color:hsla(0,0%,7%,.7)!important}.hover\\:text-muted-3000-light:hover{color:hsla(0,0%,7%,.6)!important}.hover\\:bg-muted-3000-light:hover{background-color:hsla(0,0%,7%,.6)!important}.hover\\:border-muted-3000-light:hover{border-color:hsla(0,0%,7%,.6)!important}.hover\\:text-trace-3000-light:hover{color:hsla(0,0%,7%,.25)!important}.hover\\:bg-trace-3000-light:hover{background-color:hsla(0,0%,7%,.25)!important}.hover\\:border-trace-3000-light:hover{border-color:hsla(0,0%,7%,.25)!important}.hover\\:text-primary-3000-light:hover{color:#f54e01!important}.hover\\:bg-primary-3000-light:hover{background-color:#f54e01!important}.hover\\:border-primary-3000-light:hover{border-color:#f54e01!important}.hover\\:text-primary-highlight-light:hover{color:rgba(245,78,1,.1)!important}.hover\\:bg-primary-highlight-light:hover{background-color:rgba(245,78,1,.1)!important}.hover\\:border-primary-highlight-light:hover{border-color:rgba(245,78,1,.1)!important}.hover\\:text-primary-3000-hover-light:hover{color:#f54e01!important}.hover\\:bg-primary-3000-hover-light:hover{background-color:#f54e01!important}.hover\\:border-primary-3000-hover-light:hover{border-color:#f54e01!important}.hover\\:text-primary-3000-active-light:hover{color:#f54e01!important}.hover\\:bg-primary-3000-active-light:hover{background-color:#f54e01!important}.hover\\:border-primary-3000-active-light:hover{border-color:#f54e01!important}.hover\\:text-secondary-3000-light:hover{color:hsla(68,14%,79%,.6)!important}.hover\\:bg-secondary-3000-light:hover{background-color:hsla(68,14%,79%,.6)!important}.hover\\:border-secondary-3000-light:hover{border-color:hsla(68,14%,79%,.6)!important}.hover\\:text-secondary-3000-hover-light:hover{color:#cfd1c2!important}.hover\\:bg-secondary-3000-hover-light:hover{background-color:#cfd1c2!important}.hover\\:border-secondary-3000-hover-light:hover{border-color:#cfd1c2!important}.hover\\:text-accent-3000-light:hover{color:#eeefe9!important}.hover\\:bg-accent-3000-light:hover{background-color:#eeefe9!important}.hover\\:border-accent-3000-light:hover{border-color:#eeefe9!important}.hover\\:text-bg-3000-light:hover{color:#f3f4ef!important}.hover\\:bg-bg-3000-light:hover{background-color:#f3f4ef!important}.hover\\:border-bg-3000-light:hover{border-color:#f3f4ef!important}.hover\\:text-border-3000-light:hover{color:#dadbd2!important}.hover\\:bg-border-3000-light:hover{background-color:#dadbd2!important}.hover\\:border-border-3000-light:hover{border-color:#dadbd2!important}.hover\\:text-border-bold-3000-light:hover{color:#c1c2b9!important}.hover\\:bg-border-bold-3000-light:hover{background-color:#c1c2b9!important}.hover\\:border-border-bold-3000-light:hover{border-color:#c1c2b9!important}.hover\\:text-glass-bg-3000-light:hover{color:hsla(69,12%,88%,.702)!important}.hover\\:bg-glass-bg-3000-light:hover{background-color:hsla(69,12%,88%,.702)!important}.hover\\:border-glass-bg-3000-light:hover{border-color:hsla(69,12%,88%,.702)!important}.hover\\:text-glass-border-3000-light:hover{color:#e4e5de!important}.hover\\:bg-glass-border-3000-light:hover{background-color:#e4e5de!important}.hover\\:border-glass-border-3000-light:hover{border-color:#e4e5de!important}.hover\\:text-link-3000-light:hover{color:#f54e00!important}.hover\\:bg-link-3000-light:hover{background-color:#f54e00!important}.hover\\:border-link-3000-light:hover{border-color:#f54e00!important}.hover\\:text-primary-3000-frame-bg-light:hover{color:#eb9d2a!important}.hover\\:bg-primary-3000-frame-bg-light:hover{background-color:#eb9d2a!important}.hover\\:border-primary-3000-frame-bg-light:hover{border-color:#eb9d2a!important}.hover\\:text-primary-3000-button-bg-light:hover{color:#fff!important}.hover\\:bg-primary-3000-button-bg-light:hover{background-color:#fff!important}.hover\\:border-primary-3000-button-bg-light:hover{border-color:#fff!important}.hover\\:text-primary-3000-button-border-light:hover{color:#b17816!important}.hover\\:bg-primary-3000-button-border-light:hover{background-color:#b17816!important}.hover\\:border-primary-3000-button-border-light:hover{border-color:#b17816!important}.hover\\:text-primary-3000-button-border-hover-light:hover{color:#8e5b03!important}.hover\\:bg-primary-3000-button-border-hover-light:hover{background-color:#8e5b03!important}.hover\\:border-primary-3000-button-border-hover-light:hover{border-color:#8e5b03!important}.hover\\:text-secondary-3000-frame-bg-light:hover{color:#e1dddd!important}.hover\\:bg-secondary-3000-frame-bg-light:hover{background-color:#e1dddd!important}.hover\\:border-secondary-3000-frame-bg-light:hover{border-color:#e1dddd!important}.hover\\:text-secondary-3000-button-bg-light:hover{color:#f3f4ef!important}.hover\\:bg-secondary-3000-button-bg-light:hover{background-color:#f3f4ef!important}.hover\\:border-secondary-3000-button-bg-light:hover{border-color:#f3f4ef!important}.hover\\:text-secondary-3000-button-border-light:hover{color:#ccc!important}.hover\\:bg-secondary-3000-button-border-light:hover{background-color:#ccc!important}.hover\\:border-secondary-3000-button-border-light:hover{border-color:#ccc!important}.hover\\:text-secondary-3000-button-border-hover-light:hover{color:#aaa!important}.hover\\:bg-secondary-3000-button-border-hover-light:hover{background-color:#aaa!important}.hover\\:border-secondary-3000-button-border-hover-light:hover{border-color:#aaa!important}.hover\\:text-danger-3000-frame-bg-light:hover{color:rgba(245,78,0,.502)!important}.hover\\:bg-danger-3000-frame-bg-light:hover{background-color:rgba(245,78,0,.502)!important}.hover\\:border-danger-3000-frame-bg-light:hover{border-color:rgba(245,78,0,.502)!important}.hover\\:text-danger-3000-button-border-light:hover{color:#e96b30!important}.hover\\:bg-danger-3000-button-border-light:hover{background-color:#e96b30!important}.hover\\:border-danger-3000-button-border-light:hover{border-color:#e96b30!important}.hover\\:text-danger-3000-button-border-hover-light:hover{color:#f54e00!important}.hover\\:bg-danger-3000-button-border-hover-light:hover{background-color:#f54e00!important}.hover\\:border-danger-3000-button-border-hover-light:hover{border-color:#f54e00!important}.hover\\:text-shadow-elevation-3000-light:hover{color:0 3px 0 var(--border-3000-light)!important}.hover\\:bg-shadow-elevation-3000-light:hover{background-color:0 3px 0 var(--border-3000-light)!important}.hover\\:border-shadow-elevation-3000-light:hover{border-color:0 3px 0 var(--border-3000-light)!important}.hover\\:text-shadow-elevation-3000-dark:hover{color:0 3px 0 var(--border-3000-dark)!important}.hover\\:bg-shadow-elevation-3000-dark:hover{background-color:0 3px 0 var(--border-3000-dark)!important}.hover\\:border-shadow-elevation-3000-dark:hover{border-color:0 3px 0 var(--border-3000-dark)!important}.hover\\:text-text-3000-dark:hover{color:#fff!important}.hover\\:bg-text-3000-dark:hover{background-color:#fff!important}.hover\\:border-text-3000-dark:hover{border-color:#fff!important}.hover\\:text-text-secondary-3000-dark:hover{color:hsla(0,0%,100%,.7)!important}.hover\\:bg-text-secondary-3000-dark:hover{background-color:hsla(0,0%,100%,.7)!important}.hover\\:border-text-secondary-3000-dark:hover{border-color:hsla(0,0%,100%,.7)!important}.hover\\:text-muted-3000-dark:hover{color:hsla(0,0%,100%,.5)!important}.hover\\:bg-muted-3000-dark:hover{background-color:hsla(0,0%,100%,.5)!important}.hover\\:border-muted-3000-dark:hover{border-color:hsla(0,0%,100%,.5)!important}.hover\\:text-trace-3000-dark:hover{color:hsla(0,0%,100%,.25)!important}.hover\\:bg-trace-3000-dark:hover{background-color:hsla(0,0%,100%,.25)!important}.hover\\:border-trace-3000-dark:hover{border-color:hsla(0,0%,100%,.25)!important}.hover\\:text-primary-3000-dark:hover{color:#f7a503!important}.hover\\:bg-primary-3000-dark:hover{background-color:#f7a503!important}.hover\\:border-primary-3000-dark:hover{border-color:#f7a503!important}.hover\\:text-primary-highlight-dark:hover{color:rgba(247,165,3,.1)!important}.hover\\:bg-primary-highlight-dark:hover{background-color:rgba(247,165,3,.1)!important}.hover\\:border-primary-highlight-dark:hover{border-color:rgba(247,165,3,.1)!important}.hover\\:text-primary-3000-hover-dark:hover{color:#f7a503!important}.hover\\:bg-primary-3000-hover-dark:hover{background-color:#f7a503!important}.hover\\:border-primary-3000-hover-dark:hover{border-color:#f7a503!important}.hover\\:text-primary-3000-active-dark:hover{color:#f7a503!important}.hover\\:bg-primary-3000-active-dark:hover{background-color:#f7a503!important}.hover\\:border-primary-3000-active-dark:hover{border-color:#f7a503!important}.hover\\:text-primary-alt-highlight-light:hover{color:#e5e7e0!important}.hover\\:bg-primary-alt-highlight-light:hover{background-color:#e5e7e0!important}.hover\\:border-primary-alt-highlight-light:hover{border-color:#e5e7e0!important}.hover\\:text-secondary-3000-dark:hover{color:#1d1f27!important}.hover\\:bg-secondary-3000-dark:hover{background-color:#1d1f27!important}.hover\\:border-secondary-3000-dark:hover{border-color:#1d1f27!important}.hover\\:text-secondary-3000-hover-dark:hover{color:#575d77!important}.hover\\:bg-secondary-3000-hover-dark:hover{background-color:#575d77!important}.hover\\:border-secondary-3000-hover-dark:hover{border-color:#575d77!important}.hover\\:text-accent-3000-dark:hover{color:#21242b!important}.hover\\:bg-accent-3000-dark:hover{background-color:#21242b!important}.hover\\:border-accent-3000-dark:hover{border-color:#21242b!important}.hover\\:text-bg-3000-dark:hover{color:#1d1f27!important}.hover\\:bg-bg-3000-dark:hover{background-color:#1d1f27!important}.hover\\:border-bg-3000-dark:hover{border-color:#1d1f27!important}.hover\\:text-border-3000-dark:hover{color:#35373e!important}.hover\\:bg-border-3000-dark:hover{background-color:#35373e!important}.hover\\:border-border-3000-dark:hover{border-color:#35373e!important}.hover\\:text-border-bold-3000-dark:hover{color:#3f4046!important}.hover\\:bg-border-bold-3000-dark:hover{background-color:#3f4046!important}.hover\\:border-border-bold-3000-dark:hover{border-color:#3f4046!important}.hover\\:text-glass-bg-3000-dark:hover{color:rgba(36,38,42,.6)!important}.hover\\:bg-glass-bg-3000-dark:hover{background-color:rgba(36,38,42,.6)!important}.hover\\:border-glass-bg-3000-dark:hover{border-color:rgba(36,38,42,.6)!important}.hover\\:text-glass-border-3000-dark:hover{color:var(--border-3000-dark)!important}.hover\\:bg-glass-border-3000-dark:hover{background-color:var(--border-3000-dark)!important}.hover\\:border-glass-border-3000-dark:hover{border-color:var(--border-3000-dark)!important}.hover\\:text-link-3000-dark:hover{color:#f1a82c!important}.hover\\:bg-link-3000-dark:hover{background-color:#f1a82c!important}.hover\\:border-link-3000-dark:hover{border-color:#f1a82c!important}.hover\\:text-primary-3000-frame-bg-dark:hover{color:#926826!important}.hover\\:bg-primary-3000-frame-bg-dark:hover{background-color:#926826!important}.hover\\:border-primary-3000-frame-bg-dark:hover{border-color:#926826!important}.hover\\:text-primary-3000-button-bg-dark:hover{color:#e0a045!important}.hover\\:bg-primary-3000-button-bg-dark:hover{background-color:#e0a045!important}.hover\\:border-primary-3000-button-bg-dark:hover{border-color:#e0a045!important}.hover\\:text-primary-3000-button-border-dark:hover{color:#b17816!important}.hover\\:bg-primary-3000-button-border-dark:hover{background-color:#b17816!important}.hover\\:border-primary-3000-button-border-dark:hover{border-color:#b17816!important}.hover\\:text-primary-3000-button-border-hover-dark:hover{color:#8e5b03!important}.hover\\:bg-primary-3000-button-border-hover-dark:hover{background-color:#8e5b03!important}.hover\\:border-primary-3000-button-border-hover-dark:hover{border-color:#8e5b03!important}.hover\\:text-primary-alt-highlight-dark:hover{color:#232429!important}.hover\\:bg-primary-alt-highlight-dark:hover{background-color:#232429!important}.hover\\:border-primary-alt-highlight-dark:hover{border-color:#232429!important}.hover\\:text-secondary-3000-frame-bg-dark:hover{color:#323232!important}.hover\\:bg-secondary-3000-frame-bg-dark:hover{background-color:#323232!important}.hover\\:border-secondary-3000-frame-bg-dark:hover{border-color:#323232!important}.hover\\:text-secondary-3000-button-bg-dark:hover{color:#1d1f27!important}.hover\\:bg-secondary-3000-button-bg-dark:hover{background-color:#1d1f27!important}.hover\\:border-secondary-3000-button-bg-dark:hover{border-color:#1d1f27!important}.hover\\:text-secondary-3000-button-border-dark:hover{color:#4a4c52!important}.hover\\:bg-secondary-3000-button-border-dark:hover{background-color:#4a4c52!important}.hover\\:border-secondary-3000-button-border-dark:hover{border-color:#4a4c52!important}.hover\\:text-secondary-3000-button-border-hover-dark:hover{color:#5e6064!important}.hover\\:bg-secondary-3000-button-border-hover-dark:hover{background-color:#5e6064!important}.hover\\:border-secondary-3000-button-border-hover-dark:hover{border-color:#5e6064!important}.hover\\:text-danger-3000-frame-bg-dark:hover{color:rgba(245,78,0,.502)!important}.hover\\:bg-danger-3000-frame-bg-dark:hover{background-color:rgba(245,78,0,.502)!important}.hover\\:border-danger-3000-frame-bg-dark:hover{border-color:rgba(245,78,0,.502)!important}.hover\\:text-danger-3000-button-border-dark:hover{color:#c44003!important}.hover\\:bg-danger-3000-button-border-dark:hover{background-color:#c44003!important}.hover\\:border-danger-3000-button-border-dark:hover{border-color:#c44003!important}.hover\\:text-danger-3000-button-border-hover-dark:hover{color:#f54e00!important}.hover\\:bg-danger-3000-button-border-hover-dark:hover{background-color:#f54e00!important}.hover\\:border-danger-3000-button-border-hover-dark:hover{border-color:#f54e00!important}.hover\\:text-default:hover{color:var(--default)!important}.hover\\:bg-default:hover{background-color:var(--default)!important}.hover\\:border-default:hover{border-color:var(--default)!important}.hover\\:text-text-3000:hover{color:var(--text-3000)!important}.hover\\:bg-text-3000:hover{background-color:var(--text-3000)!important}.hover\\:border-text-3000:hover{border-color:var(--text-3000)!important}.hover\\:text-text-secondary-3000:hover{color:var(--text-secondary-3000)!important}.hover\\:bg-text-secondary-3000:hover{background-color:var(--text-secondary-3000)!important}.hover\\:border-text-secondary-3000:hover{border-color:var(--text-secondary-3000)!important}.hover\\:text-muted-3000:hover{color:var(--muted-3000)!important}.hover\\:bg-muted-3000:hover{background-color:var(--muted-3000)!important}.hover\\:border-muted-3000:hover{border-color:var(--muted-3000)!important}.hover\\:text-primary-3000:hover{color:var(--primary-3000)!important}.hover\\:bg-primary-3000:hover{background-color:var(--primary-3000)!important}.hover\\:border-primary-3000:hover{border-color:var(--primary-3000)!important}.hover\\:text-secondary-3000:hover{color:var(--secondary-3000)!important}.hover\\:bg-secondary-3000:hover{background-color:var(--secondary-3000)!important}.hover\\:border-secondary-3000:hover{border-color:var(--secondary-3000)!important}.hover\\:text-secondary-3000-hover:hover{color:var(--secondary-3000-hover)!important}.hover\\:bg-secondary-3000-hover:hover{background-color:var(--secondary-3000-hover)!important}.hover\\:border-secondary-3000-hover:hover{border-color:var(--secondary-3000-hover)!important}.hover\\:text-accent-3000:hover{color:var(--accent-3000)!important}.hover\\:bg-accent-3000:hover{background-color:var(--accent-3000)!important}.hover\\:border-accent-3000:hover{border-color:var(--accent-3000)!important}.hover\\:text-bg-3000:hover{color:var(--bg-3000)!important}.hover\\:bg-bg-3000:hover{background-color:var(--bg-3000)!important}.hover\\:border-bg-3000:hover{border-color:var(--bg-3000)!important}.hover\\:text-primary-highlight:hover{color:var(--primary-highlight)!important}.hover\\:bg-primary-highlight:hover{background-color:var(--primary-highlight)!important}.hover\\:border-primary-highlight:hover{border-color:var(--primary-highlight)!important}.hover\\:text-primary-alt-highlight:hover{color:var(--primary-alt-highlight)!important}.hover\\:bg-primary-alt-highlight:hover{background-color:var(--primary-alt-highlight)!important}.hover\\:border-primary-alt-highlight:hover{border-color:var(--primary-alt-highlight)!important}.hover\\:text-primary-alt:hover{color:var(--primary-alt)!important}.hover\\:bg-primary-alt:hover{background-color:var(--primary-alt)!important}.hover\\:border-primary-alt:hover{border-color:var(--primary-alt)!important}.placeholder\\:\\*\\:\\*\\:text-default>*>::-moz-placeholder{color:var(--default)}.placeholder\\:\\*\\:\\*\\:text-default>*>::placeholder{color:var(--default)}.subtitle{align-items:center;display:flex;font-size:22px;font-weight:700;line-height:26px;margin-top:12px}.subtitle.highlighted{padding:1rem 1rem 1rem .5rem}.l3{font-size:16px;font-weight:600;line-height:19px}.l4{font-size:14px;font-weight:700}.col{max-width:100%;min-height:1px;position:relative}.highlighted{animation:highlight 2s ease-out;border-radius:var(--radius)}:root{--bg-bridge:#ebece8;--radius:0.375rem;--radius-sm:0.25rem;--modal-shadow-elevation:0px 16px 16px -16px rgba(0,0,0,.35);--opacity-disabled:0.6;--font-medium:500;--font-semibold:600;--font-sans:-apple-system,BlinkMacSystemFont,"Inter","Segoe UI","Roboto","Helvetica Neue",helvetica,arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--font-title:"MatterSQ",-apple-system,BlinkMacSystemFont,"Inter","Segoe UI","Roboto","Helvetica Neue",helvetica,arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--font-mono:ui-monospace,"SFMono-Regular","SF Mono","Menlo","Consolas","Liberation Mono",monospace;--blue:#597dce;--purple:#c278cf;--green:var(--success);--black:var(--text-3000);--data-color-1:#1d4aff;--data-color-2:#621da6;--data-color-3:#42827e;--data-color-4:#ce0e74;--data-color-5:#f14f58;--data-color-6:#7c440e;--data-color-7:#529a0a;--data-color-8:#0476fb;--data-color-9:#fe729e;--data-color-10:#35416b;--data-color-11:#41cbc4;--data-color-12:#b64b02;--data-color-13:#e4a604;--data-color-14:#a56eff;--data-color-15:#30d5c8;--lifecycle-new:#1d4aff;--lifecycle-returning:#388600;--lifecycle-resurrecting:#a56eff;--lifecycle-dormant:#db3707;--lifecycle-new-hover:#0024b6;--lifecycle-returning-hover:#0d2000;--lifecycle-resurrecting-hover:#6608ff;--lifecycle-dormant-hover:#781e04;--funnel-axis:var(--border);--funnel-grid:#ddd;--z-bottom-notice:5100;--z-command-palette:1875;--z-force-modal-above-popovers:1850;--z-tooltip:1070;--z-definition-popover:1065;--z-popover:1064;--z-graph-tooltip:1063;--z-modal:1060;--z-hedgehog-buddy:1059;--z-annotation-popover:1049;--z-drawer:950;--z-notifications-popover:949;--z-main-nav:948;--z-lemon-sidebar:940;--z-lemon-activation-sidebar:939;--z-mobile-nav-overlay:931;--z-top-navigation:800;--z-content-overlay:488;--z-raised:5;--toastify-color-dark:var(--accent-3000-dark);--toastify-color-light:var(--bg-light);--toastify-color-info:var(--primary);--toastify-color-success:var(--success);--toastify-color-warning:var(--warning);--toastify-color-error:var(--danger);--toastify-color-progress-info:var(--toastify-color-info);--toastify-color-progress-success:var(--toastify-color-success);--toastify-color-progress-warning:var(--toastify-color-warning);--toastify-color-progress-error:var(--toastify-color-error);--toastify-toast-background:var(--bg-light);--toastify-toast-width:26rem;--toastify-toast-min-height:3.5rem;--toastify-toast-max-height:16rem;--toastify-text-color-light:#757575;--in-app-prompts-width:26rem;--lettermark-1-bg:#dcb1e3;--lettermark-1-text:#572e5e;--lettermark-2-bg:#ffc4b2;--lettermark-2-text:#3e5891;--lettermark-3-bg:#fdedc9;--lettermark-3-text:#3e5891;--lettermark-4-bg:#3e5891;--lettermark-4-text:#ffc4b2;--lettermark-5-bg:#8da9e7;--lettermark-5-text:#572e5e;--lettermark-6-bg:#572e5e;--lettermark-6-text:#dcb1e3;--lettermark-7-bg:#ffc035;--lettermark-7-text:#35416b;--lettermark-8-bg:#ff906e;--lettermark-8-text:#2a3d65;--modal-backdrop-blur:5px;--modal-backdrop-color:rgba(0,0,0,.2);--modal-transition-time:200ms;--tooltip-bg-light:#2d2d2d;--tooltip-bg-dark:#656d81;--notebook-popover-transition-properties:150ms cubic-bezier(0,0.5,0.5,1);--notebook-column-left-width:27rem;--notebook-column-right-width:20rem;--primary:#1d4aff;--danger-highlight:rgba(219,55,7,.1);--danger-lighter:#ffa599;--danger-light:#df4b20;--danger:#db3707;--danger-dark:#992705;--warning-highlight:rgba(247,165,1,.1);--warning:#f7a501;--warning-dark:#e09423;--highlight:#e49f2c;--success-highlight:rgba(56,134,0,.1);--success-light:#5f9d32;--success:#388600;--success-dark:#245700;--muted:#5f5f5f;--muted-alt:#747ea1;--mark:hsla(42,93%,86%,.8);--white:#fff;--bg-light:#fff;--side:#fafaf9;--mid:#f2f2f2;--border:rgba(0,0,0,.15);--border-light:rgba(0,0,0,.08);--border-bold:rgba(0,0,0,.24);--transparent:transparent;--link:var(--primary-3000);--brand-blue:#1d4aff;--brand-red:#f54e00;--brand-yellow:#f9bd2b;--brand-key:#000;--text-3000-light:#111;--text-secondary-3000-light:hsla(0,0%,7%,.7);--muted-3000-light:hsla(0,0%,7%,.6);--trace-3000-light:hsla(0,0%,7%,.25);--primary-3000-light:#f54e01;--primary-highlight-light:rgba(245,78,1,.1);--primary-3000-hover-light:#f54e01;--primary-3000-active-light:#f54e01;--secondary-3000-light:hsla(68,14%,79%,.6);--secondary-3000-hover-light:#cfd1c2;--accent-3000-light:#eeefe9;--bg-3000-light:#f3f4ef;--border-3000-light:#dadbd2;--border-bold-3000-light:#c1c2b9;--glass-bg-3000-light:hsla(69,12%,88%,.702);--glass-border-3000-light:#e4e5de;--link-3000-light:#f54e00;--primary-3000-frame-bg-light:#eb9d2a;--primary-3000-button-bg-light:#fff;--primary-3000-button-border-light:#b17816;--primary-3000-button-border-hover-light:#8e5b03;--secondary-3000-frame-bg-light:#e1dddd;--secondary-3000-button-bg-light:#f3f4ef;--secondary-3000-button-border-light:#ccc;--secondary-3000-button-border-hover-light:#aaa;--danger-3000-frame-bg-light:rgba(245,78,0,.502);--danger-3000-button-border-light:#e96b30;--danger-3000-button-border-hover-light:#f54e00;--shadow-elevation-3000-light:0 3px 0 var(--border-3000-light);--shadow-elevation-3000-dark:0 3px 0 var(--border-3000-dark);--text-3000-dark:#fff;--text-secondary-3000-dark:hsla(0,0%,100%,.7);--muted-3000-dark:hsla(0,0%,100%,.5);--trace-3000-dark:hsla(0,0%,100%,.25);--primary-3000-dark:#f7a503;--primary-highlight-dark:rgba(247,165,3,.1);--primary-3000-hover-dark:#f7a503;--primary-3000-active-dark:#f7a503;--primary-alt-highlight-light:#e5e7e0;--secondary-3000-dark:#1d1f27;--secondary-3000-hover-dark:#575d77;--accent-3000-dark:#21242b;--bg-3000-dark:#1d1f27;--border-3000-dark:#35373e;--border-bold-3000-dark:#3f4046;--glass-bg-3000-dark:rgba(36,38,42,.6);--glass-border-3000-dark:var(--border-3000-dark);--link-3000-dark:#f1a82c;--primary-3000-frame-bg-dark:#926826;--primary-3000-button-bg-dark:#e0a045;--primary-3000-button-border-dark:#b17816;--primary-3000-button-border-hover-dark:#8e5b03;--primary-alt-highlight-dark:#232429;--secondary-3000-frame-bg-dark:#323232;--secondary-3000-button-bg-dark:#1d1f27;--secondary-3000-button-border-dark:#4a4c52;--secondary-3000-button-border-hover-dark:#5e6064;--danger-3000-frame-bg-dark:rgba(245,78,0,.502);--danger-3000-button-border-dark:#c44003;--danger-3000-button-border-hover-dark:#f54e00;--default:var(--default);--text-3000:var(--text-3000);--text-secondary-3000:var(--text-secondary-3000);--muted-3000:var(--muted-3000);--primary-3000:var(--primary-3000);--secondary-3000:var(--secondary-3000);--secondary-3000-hover:var(--secondary-3000-hover);--accent-3000:var(--accent-3000);--bg-3000:var(--bg-3000);--primary-highlight:var(--primary-highlight);--primary-alt-highlight:var(--primary-alt-highlight);--primary-alt:var(--primary-alt)}*,:after,:before{border-color:var(--border)}input[type=radio]{accent-color:var(--primary-3000)}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration,input[type=search]::-webkit-search-results-button,input[type=search]::-webkit-search-results-decoration{display:none}.page-title-row{align-items:center;display:flex;flex-wrap:wrap;gap:.5rem 1rem;margin:1rem 0 .25rem;min-height:2.5rem}@media screen and (min-width:768px){.page-title-row{flex-wrap:nowrap}}.page-title{font-size:28px;font-weight:600;line-height:34px;margin:0;min-width:0}.page-caption{font-size:.875rem;line-height:1.25rem;margin-bottom:1rem;max-width:48rem}.page-caption.tabbed{margin-bottom:.5rem}.secondary{background:none;border:0;color:var(--primary-alt);font-size:.9em;font-weight:var(--font-medium);letter-spacing:1px;text-transform:uppercase}.card-secondary{color:var(--muted);font-size:11px;font-weight:600;letter-spacing:.5px;text-transform:uppercase}mark{background-color:var(--mark)!important;border-radius:var(--radius)}hr{border-top:1px solid var(--border);margin:1em 0}input::-ms-clear{display:none}@keyframes highlight{0%{background-color:var(--mark)}to{background-color:initial}}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.Toastify__toast{align-items:center;border:1px solid var(--secondary-3000-button-border);border-radius:var(--radius);box-shadow:var(--shadow-elevation-3000);cursor:unset;font-family:var(--font-sans);font-size:1rem;margin-bottom:.5rem;opacity:1!important;padding:.75rem}.Toastify__toast-container{padding:0}.Toastify__toast-body{color:var(--text-3000);font-size:.875rem;font-weight:500;line-height:1.25rem;padding:0}.Toastify__toast-body b,.Toastify__toast-body strong{font-weight:700}.Toastify__toast-body button{margin:0 .75rem}.Toastify__toast-icon{color:var(--muted-alt);font-size:1.5rem;height:1.5rem;margin-right:.75rem;width:1.5rem}.Toastify__toast--success .Toastify__toast-icon{color:var(--toastify-color-success)}.Toastify__toast--warning .Toastify__toast-icon{color:var(--toastify-color-warning)}.Toastify__toast--error .Toastify__toast-icon{color:var(--toastify-color-error)}.Toastify__progress-bar{height:var(--radius)}.error-on-blur.errored:not(:focus){border-color:var(--danger)!important}.info-indicator{color:var(--primary-alt)!important;cursor:pointer;margin-left:4px}.info-indicator.left{margin-left:0;margin-right:4px}.graph-series-glyph{align-items:center;border:2px solid var(--text-3000);border-radius:50%;display:flex;flex-shrink:0;font-size:12px;font-weight:700;height:22px;justify-content:center;pointer-events:none;width:22px}.graph-series-glyph.funnel-step-glyph{background-color:var(--bg-light);border-color:var(--border);color:var(--primary-alt);font-size:unset;height:23px;width:23px}#bottom-notice{background:#000;bottom:0;color:#fff;display:flex!important;flex-direction:row;font-size:.75rem;left:0;line-height:1.5rem;position:fixed;width:100%;z-index:var(--z-bottom-notice)}#bottom-notice code{color:inherit;font-size:inherit}#bottom-notice.warning div{background:var(--danger);height:auto}#bottom-notice.tricolor{cursor:pointer}#bottom-notice.tricolor div:first-child{background:var(--brand-blue)}#bottom-notice.tricolor div:nth-child(2){background:var(--brand-red)}#bottom-notice.tricolor div:nth-child(3){background:var(--brand-yellow)}#bottom-notice.tricolor span{cursor:text}#bottom-notice div{flex-basis:0;flex-grow:1;height:1.5rem;text-align:center}#bottom-notice span{display:none}#bottom-notice button{background:transparent;border:none;color:inherit;cursor:pointer;font-size:1rem;font-weight:700;height:1.5rem;padding:0;width:1.5rem}@media screen and (min-width:750px){#bottom-notice{font-size:1rem;line-height:2rem}#bottom-notice div{height:2rem}#bottom-notice span{display:inline}#bottom-notice button{font-size:1.25rem;height:2rem;width:2rem}}html{-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}input::-moz-placeholder,textarea::-moz-placeholder{color:var(--muted)}input::placeholder,textarea::placeholder{color:var(--muted)}body{background:var(--bg-3000);color:var(--text-3000);font-size:14px;line-height:1.5715;touch-action:manipulation;--primary:var(--primary-3000);--muted:var(--muted-3000);--default:var(--text-3000);--muted-alt:var(--muted-3000);--primary-alt:var(--text-3000);--border:var(--border-3000);--border-bold:var(--border-bold-3000);--data-color-1:#1d4aff;--data-color-1-hover:#1a3cf6;--data-color-10:#35416b}body[theme=light]{--text-3000:var(--text-3000-light);--text-secondary-3000:var(--text-secondary-3000-light);--muted-3000:var(--muted-3000-light);--trace-3000:var(--trace-3000-light);--primary-3000:var(--primary-3000-light);--primary-highlight:var(--primary-highlight-light);--primary-3000-hover:var(--primary-3000-hover-light);--primary-3000-active:var(--primary-3000-active-light);--secondary-3000:var(--secondary-3000-light);--secondary-3000-hover:var(--secondary-3000-hover-light);--accent-3000:var(--accent-3000-light);--bg-3000:var(--bg-3000-light);--border-3000:var(--border-3000-light);--border-light-opaque:#eee;--border-bold-3000:var(--border-bold-3000-light);--glass-bg-3000:var(--glass-bg-3000-light);--glass-border-3000:var(--glass-border-3000-light);--bg-light:#fff;--bg-table:#f9faf7;--link:var(--link-3000-light);--shadow-elevation-3000:var(--shadow-elevation-3000-light);--primary-3000-frame-bg:var(--primary-3000-frame-bg-light);--primary-3000-button-bg:var(--primary-3000-button-bg-light);--primary-3000-button-border:var(--primary-3000-button-border-light);--primary-3000-button-border-hover:var(--primary-3000-button-border-hover-light);--primary-alt-highlight:var(--primary-alt-highlight-light);--secondary-3000-frame-bg:var(--secondary-3000-frame-bg-light);--secondary-3000-button-bg:var(--secondary-3000-button-bg-light);--secondary-3000-button-border:var(--secondary-3000-button-border-light);--secondary-3000-button-border-hover:var(--secondary-3000-button-border-hover-light);--danger-3000-frame-bg:var(--danger-3000-frame-bg-light);--danger-3000-button-border:var(--danger-3000-button-border-light);--danger-3000-button-border-hover:var(--danger-3000-button-border-hover-light);--tooltip-bg:var(--tooltip-bg-light)}body[theme=dark]{--text-3000:var(--text-3000-dark);--text-secondary-3000:var(--text-secondary-3000-dark);--muted-3000:var(--muted-3000-dark);--trace-3000:var(--trace-3000-dark);--primary-3000:var(--primary-3000-dark);--primary-highlight:var(--primary-highlight-dark);--primary-3000-hover:var(--primary-3000-hover-dark);--primary-3000-active:var(--primary-3000-active-dark);--secondary-3000:var(--secondary-3000-dark);--secondary-3000-hover:var(--secondary-3000-hover-dark);--accent-3000:var(--accent-3000-dark);--bg-3000:var(--bg-3000-dark);--border-3000:var(--border-3000-dark);--border-light-opaque:#1e2028;--border-bold-3000:var(--border-bold-3000-dark);--glass-bg-3000:var(--glass-bg-3000-dark);--glass-border-3000:var(--glass-border-3000-dark);--bg-light:var(--accent-3000);--bg-table:#232429;--brand-key:#fff;--link:var(--link-3000-dark);--shadow-elevation-3000:var(--shadow-elevation-3000-dark);--primary-3000-frame-bg:var(--primary-3000-frame-bg-dark);--primary-3000-button-bg:var(--primary-3000-button-bg-dark);--primary-3000-button-border:var(--primary-3000-button-border-dark);--primary-3000-button-border-hover:var(--primary-3000-button-border-hover-dark);--primary-alt-highlight:var(--primary-alt-highlight-dark);--secondary-3000-frame-bg:var(--secondary-3000-frame-bg-dark);--secondary-3000-button-bg:var(--secondary-3000-button-bg-dark);--secondary-3000-button-border:var(--secondary-3000-button-border-dark);--secondary-3000-button-border-hover:var(--secondary-3000-button-border-hover-dark);--danger-3000-frame-bg:var(--danger-3000-frame-bg-dark);--danger-3000-button-border:var(--danger-3000-button-border-dark);--danger-3000-button-border-hover:var(--danger-3000-button-border-hover-dark);--tooltip-bg:var(--tooltip-bg-dark);--data-color-2:#7f26d9;--data-color-3:#3e7a76;--data-color-4:#bf0d6c;--data-color-5:#f0474f;--data-color-6:#b36114;--data-color-10:#6576b3}body *>::-webkit-scrollbar{height:.5rem;width:.5rem}body *>::-webkit-scrollbar-track{background:var(--accent-3000)}body *>::-webkit-scrollbar-thumb{background:var(--trace-3000);border-radius:var(--radius)}body *>::-webkit-scrollbar-thumb:hover{background:var(--muted-3000)}body b,body strong{font-weight:600}body h1,body h2,body h3,body h4,body h5{font-family:var(--font-title);font-weight:500;margin-bottom:.5em;margin-top:0}body h1,body h2,body h3,body h4{color:var(--text-3000)}body h1{font-size:1.75rem}body h2{font-size:1.3125rem}body h3{font-size:1rem}body h5{color:var(--muted-alt);font-size:.6875rem;font-weight:600;letter-spacing:.075em;line-height:1.5rem;margin-bottom:.25rem;text-transform:uppercase}body pre{margin-bottom:1em;margin-top:0;overflow:auto}body .LemonButton .text-link,body .Link .text-link{color:var(--text-3000)!important}body .LemonButton:hover .text-link,body .Link:hover .text-link{color:var(--primary-3000)!important}a{color:var(--link);-webkit-text-decoration:none;text-decoration:none}p{margin-bottom:1em;margin-top:0}img{border-style:none;vertical-align:middle}[tabindex="-1"]:focus{outline:none!important}.storybook-test-runner.storybook-test-runner--fullscreen{height:-moz-fit-content;height:fit-content}.storybook-test-runner.storybook-test-runner--padded #storybook-root{display:inline-block}.storybook-test-runner *,.storybook-test-runner :after,.storybook-test-runner :before{animation-duration:0ms!important;animation-fill-mode:forwards!important;animation-iteration-count:1!important;transition-duration:0ms!important}.storybook-test-runner *>::-webkit-scrollbar,.storybook-test-runner .LemonTabs__bar:after,.storybook-test-runner .scrollable:after,.storybook-test-runner .scrollable:before,.storybook-test-runner ::-webkit-scrollbar{display:none}.storybook-test-runner #storybook-root:empty~.ReactModalPortal>.ReactModal__Overlay,.storybook-test-runner #storybook-root>.fixed:only-child{position:static!important}.ligatures-none{font-feature-settings:none;font-variant-ligatures:none}.hide-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.hide-scrollbar::-webkit-scrollbar{display:none}.\\*\\:w-80>*{width:20rem!important}.\\*\\:grow>*{flex-grow:1!important}.\\*\\:p-1>*{padding:.25rem!important}.\\*\\:\\*\\:font-medium>*>*{font-weight:500!important}.placeholder\\:\\*\\:\\*\\:font-medium>*>::-moz-placeholder{font-weight:500!important}.placeholder\\:\\*\\:\\*\\:font-medium>*>::placeholder{font-weight:500!important}.before\\:absolute:before{content:var(--tw-content)!important;position:absolute!important}.before\\:inset-0:before{content:var(--tw-content)!important;inset:0!important}.before\\:rounded:before{border-radius:.375rem!important;content:var(--tw-content)!important}.before\\:border:before{border-width:1px!important;content:var(--tw-content)!important}.first\\:mt-0:first-child{margin-top:0!important}.first\\:border-t-0:first-child{border-top-width:0!important}.last\\:border-b-0:last-child{border-bottom-width:0!important}.odd\\:last\\:\\*\\:col-span-2>:last-child:nth-child(odd){grid-column:span 2/span 2!important}.hover\\:bg-\\[var\\(--bg-light\\)\\]:hover{background-color:var(--bg-light)!important}.hover\\:underline:hover{text-decoration-line:underline!important}.hover\\:opacity-100:hover{opacity:1!important}.hover\\:ring-2:hover{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)!important;--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)!important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)!important}.group:hover .group-hover\\:visible{visibility:visible!important}.group:hover .group-hover\\:flex{display:flex!important}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}.group:hover .group-hover\\:animate-bounce{animation:bounce 1s infinite!important}.group:hover .group-hover\\:opacity-100{opacity:1!important}.group:hover .group-hover\\:opacity-90{opacity:.9!important}@container og (min-width: 20rem){.\\@xs\\/og\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))!important}}@container og (min-width: 28rem){.\\@md\\/og\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))!important}}@container (min-width: 28rem){.\\@md\\:block{display:block!important}.\\@md\\:flex{display:flex!important}.\\@md\\:hidden{display:none!important}.\\@md\\:px-1{padding-left:.25rem!important;padding-right:.25rem!important}}@container (min-width: 56rem){.\\@4xl\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))!important}}@media not all and (min-width:576px){.max-sm\\:hidden{display:none!important}}@media (min-width:576px){.sm\\:block{display:block!important}.sm\\:flex{display:flex!important}.sm\\:min-w-0{min-width:0!important}.sm\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))!important}.sm\\:flex-row{flex-direction:row!important}.sm\\:justify-center{justify-content:center!important}.sm\\:p-6{padding:1.5rem!important}.sm\\:pb-0{padding-bottom:0!important}.sm\\:pb-8{padding-bottom:2rem!important}}@media (min-width:768px){.md\\:col-span-1{grid-column:span 1/span 1!important}.md\\:col-span-2{grid-column:span 2/span 2!important}.md\\:col-span-6{grid-column:span 6/span 6!important}.md\\:col-span-full{grid-column:1/-1!important}.md\\:row-span-1{grid-row:span 1/span 1!important}.md\\:block{display:block!important}.md\\:inline{display:inline!important}.md\\:flex{display:flex!important}.md\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))!important}.md\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))!important}.md\\:grid-cols-\\[repeat\\(3\\2c _minmax\\(min-content\\2c _160px\\)\\)\\]{grid-template-columns:repeat(3,minmax(min-content,160px))!important}}@media (min-width:992px){.lg\\:w-3\\/4{width:75%!important}}@media (min-width:1200px){.xl\\:mt-0{margin-top:0!important}.xl\\:flex{display:flex!important}.xl\\:pl-2{padding-left:.5rem!important}}@media (prefers-color-scheme:dark){.dark\\:text-\\[\\#C170E8\\]{--tw-text-opacity:1!important;color:rgb(193 112 232/var(--tw-text-opacity))!important}}.\\[\\&\\>input\\:\\:-webkit-inner-spin-button\\]\\:appearance-none>input::-webkit-inner-spin-button{-webkit-appearance:none!important;appearance:none!important}.\\[\\&_\\>\\*\\]\\:px-2>*{padding-left:.5rem!important;padding-right:.5rem!important}.\\[\\&_\\>\\*\\]\\:py-0\\.5>*{padding-bottom:.125rem!important;padding-top:.125rem!important}.\\[\\&_\\>span\\>span\\]\\:flex-col>span>span{flex-direction:column!important}.\\[\\&_\\>span\\>span\\]\\:items-start>span>span{align-items:flex-start!important}.\\[\\&_\\>span\\>span\\]\\:space-y-1>span>span>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0!important;margin-bottom:calc(.25rem*var(--tw-space-y-reverse))!important;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))!important}',""]),module.exports=exports},"./frontend/public/hedgehog/running-hog.png":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{Z:()=>__WEBPACK_DEFAULT_EXPORT__});let __WEBPACK_DEFAULT_EXPORT__=__webpack_require__.p+"images/running-hog.d286878cf0d59615f60a05cc434e29a0.png"},"./frontend/public/langfuse-icon.svg":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});let __WEBPACK_DEFAULT_EXPORT__=__webpack_require__.p+"images/langfuse-icon.7106297f8ddfacfd23f2e0a5a16846e1.svg"},"./frontend/public/not-found-astrohog.png":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});let __WEBPACK_DEFAULT_EXPORT__=__webpack_require__.p+"images/not-found-astrohog.a4e3a59b90ccd886ab4231c270e5d92f.png"},"./frontend/public/posthog-icon.svg":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});let __WEBPACK_DEFAULT_EXPORT__=__webpack_require__.p+"images/posthog-icon.14d048148d45b6fe9c0a5d829469b0e5.svg"},"./frontend/public/services/aws-s3.png":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{Z:()=>__WEBPACK_DEFAULT_EXPORT__});let __WEBPACK_DEFAULT_EXPORT__=__webpack_require__.p+"images/aws-s3.ec2332979c65a4e9a2fa28ddc65f0468.png"},"./frontend/public/services/bigquery.png":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{Z:()=>__WEBPACK_DEFAULT_EXPORT__});let __WEBPACK_DEFAULT_EXPORT__=__webpack_require__.p+"images/bigquery.1bd7c5187189fe1c78abeab849f5e0ec.png"},"./frontend/public/services/google-cloud-storage.png":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{Z:()=>__WEBPACK_DEFAULT_EXPORT__});let __WEBPACK_DEFAULT_EXPORT__=__webpack_require__.p+"images/google-cloud-storage.e1bd2d5efb0bf56cf48e9e90cd2c6c3a.png"},"./frontend/public/services/hubspot.png":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{Z:()=>__WEBPACK_DEFAULT_EXPORT__});let __WEBPACK_DEFAULT_EXPORT__=__webpack_require__.p+"images/hubspot.aa61b2aaad7e9eeeb43f46d98988323d.png"},"./frontend/public/services/postgres.png":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{Z:()=>__WEBPACK_DEFAULT_EXPORT__});let __WEBPACK_DEFAULT_EXPORT__=__webpack_require__.p+"images/postgres.dc5b1b72f73b1a6c2c9d6d354a204e17.png"},"./frontend/public/services/salesforce.png":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{Z:()=>__WEBPACK_DEFAULT_EXPORT__});let __WEBPACK_DEFAULT_EXPORT__=__webpack_require__.p+"images/salesforce.3b4908e6f4a90fc0607f295de7908a58.png"},"./frontend/public/services/snowflake.png":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{Z:()=>__WEBPACK_DEFAULT_EXPORT__});let __WEBPACK_DEFAULT_EXPORT__=__webpack_require__.p+"images/snowflake.e08a91548c74ea3172ae2f0c9d22b0f8.png"},"./frontend/public/Inter.woff":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});let __WEBPACK_DEFAULT_EXPORT__=__webpack_require__.p+"fonts/Inter.10f84849b8a69b4844b2925080f81a97.woff"},"./frontend/public/Inter.woff2":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});let __WEBPACK_DEFAULT_EXPORT__=__webpack_require__.p+"fonts/Inter.7cb807e6006c622d46c52bf1fdf0ece1.woff2"},"./node_modules/.pnpm/memoizerific@1.11.3/node_modules/memoizerific sync recursive":module=>{function webpackEmptyContext(req){var e=Error("Cannot find module '"+req+"'");throw e.code="MODULE_NOT_FOUND",e}webpackEmptyContext.keys=()=>[],webpackEmptyContext.resolve=webpackEmptyContext,webpackEmptyContext.id="./node_modules/.pnpm/memoizerific@1.11.3/node_modules/memoizerific sync recursive",module.exports=webpackEmptyContext},"./frontend/src/lib/components/Cards/InsightCard/InsightCard.scss":(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__)=>{"use strict";var _node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./node_modules/.pnpm/style-loader@2.0.0_webpack@5.88.2/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),_node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default=__webpack_require__.n(_node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__),_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_InsightCard_scss__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/components/Cards/InsightCard/InsightCard.scss"),_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_InsightCard_scss__WEBPACK_IMPORTED_MODULE_1___default=__webpack_require__.n(_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_InsightCard_scss__WEBPACK_IMPORTED_MODULE_1__),options={};options.insert="head",options.singleton=!1,_node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_InsightCard_scss__WEBPACK_IMPORTED_MODULE_1___default(),options),_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_InsightCard_scss__WEBPACK_IMPORTED_MODULE_1___default().locals},"./frontend/src/lib/components/HedgehogBuddy/HedgehogBuddy.scss":(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__)=>{"use strict";var _node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./node_modules/.pnpm/style-loader@2.0.0_webpack@5.88.2/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),_node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default=__webpack_require__.n(_node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__),_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_HedgehogBuddy_scss__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/components/HedgehogBuddy/HedgehogBuddy.scss"),_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_HedgehogBuddy_scss__WEBPACK_IMPORTED_MODULE_1___default=__webpack_require__.n(_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_HedgehogBuddy_scss__WEBPACK_IMPORTED_MODULE_1__),options={};options.insert="head",options.singleton=!1,_node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_HedgehogBuddy_scss__WEBPACK_IMPORTED_MODULE_1___default(),options),_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_HedgehogBuddy_scss__WEBPACK_IMPORTED_MODULE_1___default().locals},"./frontend/src/lib/lemon-ui/Popover/Popover.scss":(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__)=>{"use strict";var _node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./node_modules/.pnpm/style-loader@2.0.0_webpack@5.88.2/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),_node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default=__webpack_require__.n(_node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__),_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_Popover_scss__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/lib/lemon-ui/Popover/Popover.scss"),_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_Popover_scss__WEBPACK_IMPORTED_MODULE_1___default=__webpack_require__.n(_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_Popover_scss__WEBPACK_IMPORTED_MODULE_1__),options={};options.insert="head",options.singleton=!1,_node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_Popover_scss__WEBPACK_IMPORTED_MODULE_1___default(),options),_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_Popover_scss__WEBPACK_IMPORTED_MODULE_1___default().locals},"./frontend/src/scenes/experiments/Experiment.scss":(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__)=>{"use strict";var _node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./node_modules/.pnpm/style-loader@2.0.0_webpack@5.88.2/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),_node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default=__webpack_require__.n(_node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__),_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_Experiment_scss__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/experiments/Experiment.scss"),_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_Experiment_scss__WEBPACK_IMPORTED_MODULE_1___default=__webpack_require__.n(_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_Experiment_scss__WEBPACK_IMPORTED_MODULE_1__),options={};options.insert="head",options.singleton=!1,_node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_Experiment_scss__WEBPACK_IMPORTED_MODULE_1___default(),options),_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_Experiment_scss__WEBPACK_IMPORTED_MODULE_1___default().locals},"./frontend/src/scenes/feature-flags/FeatureFlag.scss":(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__)=>{"use strict";var _node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./node_modules/.pnpm/style-loader@2.0.0_webpack@5.88.2/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),_node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default=__webpack_require__.n(_node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__),_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_FeatureFlag_scss__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/feature-flags/FeatureFlag.scss"),_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_FeatureFlag_scss__WEBPACK_IMPORTED_MODULE_1___default=__webpack_require__.n(_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_FeatureFlag_scss__WEBPACK_IMPORTED_MODULE_1__),options={};options.insert="head",options.singleton=!1,_node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_FeatureFlag_scss__WEBPACK_IMPORTED_MODULE_1___default(),options),_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_FeatureFlag_scss__WEBPACK_IMPORTED_MODULE_1___default().locals},"./frontend/src/scenes/insights/InsightTooltip/InsightTooltip.scss":(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__)=>{"use strict";var _node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./node_modules/.pnpm/style-loader@2.0.0_webpack@5.88.2/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),_node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default=__webpack_require__.n(_node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__),_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_InsightTooltip_scss__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/insights/InsightTooltip/InsightTooltip.scss"),_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_InsightTooltip_scss__WEBPACK_IMPORTED_MODULE_1___default=__webpack_require__.n(_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_InsightTooltip_scss__WEBPACK_IMPORTED_MODULE_1__),options={};options.insert="head",options.singleton=!1,_node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_InsightTooltip_scss__WEBPACK_IMPORTED_MODULE_1___default(),options),_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_InsightTooltip_scss__WEBPACK_IMPORTED_MODULE_1___default().locals},"./frontend/src/scenes/insights/filters/BreakdownFilter/BreakdownTagMenu.scss":(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__)=>{"use strict";var _node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./node_modules/.pnpm/style-loader@2.0.0_webpack@5.88.2/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),_node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default=__webpack_require__.n(_node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__),_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_BreakdownTagMenu_scss__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/insights/filters/BreakdownFilter/BreakdownTagMenu.scss"),_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_BreakdownTagMenu_scss__WEBPACK_IMPORTED_MODULE_1___default=__webpack_require__.n(_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_BreakdownTagMenu_scss__WEBPACK_IMPORTED_MODULE_1__),options={};options.insert="head",options.singleton=!1,_node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_BreakdownTagMenu_scss__WEBPACK_IMPORTED_MODULE_1___default(),options),_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_BreakdownTagMenu_scss__WEBPACK_IMPORTED_MODULE_1___default().locals},"./frontend/src/scenes/insights/views/Funnels/FunnelCorrelationTable.scss":(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__)=>{"use strict";var _node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./node_modules/.pnpm/style-loader@2.0.0_webpack@5.88.2/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),_node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default=__webpack_require__.n(_node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__),_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_FunnelCorrelationTable_scss__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/insights/views/Funnels/FunnelCorrelationTable.scss"),_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_FunnelCorrelationTable_scss__WEBPACK_IMPORTED_MODULE_1___default=__webpack_require__.n(_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_FunnelCorrelationTable_scss__WEBPACK_IMPORTED_MODULE_1__),options={};options.insert="head",options.singleton=!1,_node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_FunnelCorrelationTable_scss__WEBPACK_IMPORTED_MODULE_1___default(),options),_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_FunnelCorrelationTable_scss__WEBPACK_IMPORTED_MODULE_1___default().locals},"./frontend/src/scenes/notebooks/NotebookScene.scss":(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__)=>{"use strict";var _node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./node_modules/.pnpm/style-loader@2.0.0_webpack@5.88.2/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),_node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default=__webpack_require__.n(_node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__),_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_NotebookScene_scss__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/notebooks/NotebookScene.scss"),_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_NotebookScene_scss__WEBPACK_IMPORTED_MODULE_1___default=__webpack_require__.n(_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_NotebookScene_scss__WEBPACK_IMPORTED_MODULE_1__),options={};options.insert="head",options.singleton=!1,_node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_NotebookScene_scss__WEBPACK_IMPORTED_MODULE_1___default(),options),_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_NotebookScene_scss__WEBPACK_IMPORTED_MODULE_1___default().locals},"./frontend/src/scenes/persons/PersonDisplay.scss":(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__)=>{"use strict";var _node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./node_modules/.pnpm/style-loader@2.0.0_webpack@5.88.2/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),_node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default=__webpack_require__.n(_node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__),_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_PersonDisplay_scss__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/persons/PersonDisplay.scss"),_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_PersonDisplay_scss__WEBPACK_IMPORTED_MODULE_1___default=__webpack_require__.n(_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_PersonDisplay_scss__WEBPACK_IMPORTED_MODULE_1__),options={};options.insert="head",options.singleton=!1,_node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_PersonDisplay_scss__WEBPACK_IMPORTED_MODULE_1___default(),options),_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_PersonDisplay_scss__WEBPACK_IMPORTED_MODULE_1___default().locals},"./frontend/src/scenes/session-recordings/player/PlayerMeta.scss":(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__)=>{"use strict";var _node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./node_modules/.pnpm/style-loader@2.0.0_webpack@5.88.2/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),_node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default=__webpack_require__.n(_node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__),_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_PlayerMeta_scss__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/scenes/session-recordings/player/PlayerMeta.scss"),_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_PlayerMeta_scss__WEBPACK_IMPORTED_MODULE_1___default=__webpack_require__.n(_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_PlayerMeta_scss__WEBPACK_IMPORTED_MODULE_1__),options={};options.insert="head",options.singleton=!1,_node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_PlayerMeta_scss__WEBPACK_IMPORTED_MODULE_1___default(),options),_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_PlayerMeta_scss__WEBPACK_IMPORTED_MODULE_1___default().locals},"./frontend/src/styles/global.scss":(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__)=>{"use strict";var _node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./node_modules/.pnpm/style-loader@2.0.0_webpack@5.88.2/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),_node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default=__webpack_require__.n(_node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__),_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_global_scss__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/.pnpm/css-loader@3.6.0_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!./node_modules/.pnpm/sass-loader@10.3.1_sass@1.56.0_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[2].use[3]!./frontend/src/styles/global.scss"),_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_global_scss__WEBPACK_IMPORTED_MODULE_1___default=__webpack_require__.n(_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_global_scss__WEBPACK_IMPORTED_MODULE_1__),options={};options.insert="head",options.singleton=!1,_node_modules_pnpm_style_loader_2_0_0_webpack_5_88_2_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_global_scss__WEBPACK_IMPORTED_MODULE_1___default(),options),_node_modules_pnpm_css_loader_3_6_0_webpack_5_88_2_node_modules_css_loader_dist_cjs_js_node_modules_pnpm_postcss_loader_4_3_0_postcss_8_4_31_webpack_5_88_2_node_modules_postcss_loader_dist_cjs_js_node_modules_pnpm_sass_loader_10_3_1_sass_1_56_0_webpack_5_88_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_2_use_3_global_scss__WEBPACK_IMPORTED_MODULE_1___default().locals},"@storybook/channels":module=>{"use strict";module.exports=__STORYBOOK_MODULE_CHANNELS__},"@storybook/client-logger":module=>{"use strict";module.exports=__STORYBOOK_MODULE_CLIENT_LOGGER__},"@storybook/core-events":module=>{"use strict";module.exports=__STORYBOOK_MODULE_CORE_EVENTS__},"@storybook/global":module=>{"use strict";module.exports=__STORYBOOK_MODULE_GLOBAL__},"@storybook/preview-api":module=>{"use strict";module.exports=__STORYBOOK_MODULE_PREVIEW_API__},"?cafa":()=>{},"?4c41":()=>{},"?0634":()=>{},"?8b23":()=>{},"?4d21":()=>{},"?46f2":()=>{},"./frontend/src/mocks/fixtures/_instance_status.json":module=>{"use strict";module.exports=JSON.parse('{"results":{"overview":[{"key":"posthog_git_sha","metric":"PostHog Git SHA","value":"Undefined"},{"key":"analytics_database","metric":"Analytics database in use","value":"ClickHouse"},{"key":"plugin_sever_alive","metric":"Plugin server alive","value":true},{"key":"plugin_sever_version","metric":"Plugin server version","value":"1.10.5"},{"key":"plugin_sever_job_queues","metric":"Job queues enabled in plugin server","value":"Graphile"},{"key":"db_alive","metric":"Postgres database alive","value":true},{"key":"pg_version","metric":"Postgres version","value":"12.0.9"},{"key":"async_migrations_ok","metric":"Async migrations up-to-date","value":true},{"key":"clickhouse_alive","metric":"Clickhouse database alive","value":true},{"key":"clickhouse_event_count","metric":"Events in ClickHouse","value":175843},{"key":"clickhouse_event_count_last_month","metric":"Events recorded last month","value":904},{"key":"clickhouse_event_count_month_to_date","metric":"Events recorded month to date","value":173420},{"key":"clickhouse_disk_0_free_space","metric":"Clickhouse disk free space","value":"28.79 GiB"},{"key":"clickhouse_disk_0_total_space","metric":"Clickhouse disk total space","value":"58.42 GiB"},{"key":"clickhouse_table_sizes","metric":"Clickhouse table sizes","value":"","subrows":{"columns":["Table","Size","Rows"],"rows":[["asynchronous_metric_log","161.20 MiB",137266041],["text_log","584.87 MiB",29580188],["metric_log","25.78 MiB",297922],["query_thread_log","18.04 MiB",219137],["events","34.39 MiB",176855],["events_dead_letter_queue","40.32 MiB",114794],["query_log","9.62 MiB",78456],["person","1.94 MiB",42393],["person_distinct_id2","1.63 MiB",40542],["person_distinct_id","1.55 MiB",40539],["plugin_log_entries","7.64 KiB",94],["session_recording_events","9.91 KiB",62],["infi_clickhouse_orm_migrations","1.58 KiB",46],["groups","5.25 KiB",22]]}},{"key":"clickhouse_system_metrics","metric":"Clickhouse system metrics","value":"","subrows":{"columns":["Metric","Value","Description"],"rows":[["ActiveAsyncDrainedConnections",0,"Number of active connections drained asynchronously."],["ActiveSyncDrainedConnections",0,"Number of active connections drained synchronously."],["AsyncDrainedConnections",0,"Number of connections drained asynchronously."],["AsynchronousMetricsCalculationTimeSpent",0.002780791],["BackgroundBufferFlushSchedulePoolTask",0,"Number of active tasks in BackgroundBufferFlushSchedulePool. This pool is used for periodic Buffer flushes"],["BackgroundDistributedSchedulePoolTask",0,"Number of active tasks in BackgroundDistributedSchedulePool. This pool is used for distributed sends that is done in background."],["BackgroundFetchesPoolTask",0,"Number of active tasks in BackgroundFetchesPool"],["BackgroundMessageBrokerSchedulePoolTask",15,"Number of active tasks in BackgroundProcessingPool for message streaming"],["BackgroundMovePoolTask",0,"Number of active tasks in BackgroundProcessingPool for moves"],["BackgroundPoolTask",0,"Number of active tasks in BackgroundProcessingPool (merges, mutations, or replication queue bookkeeping)"],["BackgroundSchedulePoolTask",0,"Number of active tasks in BackgroundSchedulePool. This pool is used for periodic ReplicatedMergeTree tasks, like cleaning old data parts, altering data parts, replica re-initialization, etc."],["BlockActiveTime_nbd0",0],["BlockActiveTime_nbd1",0],["BlockActiveTime_nbd10",0],["BlockActiveTime_nbd11",0],["BlockActiveTime_nbd12",0],["BlockActiveTime_nbd13",0],["BlockActiveTime_nbd14",0],["BlockActiveTime_nbd15",0],["BlockActiveTime_nbd2",0],["BlockActiveTime_nbd3",0],["BlockActiveTime_nbd4",0],["BlockActiveTime_nbd5",0],["BlockActiveTime_nbd6",0],["BlockActiveTime_nbd7",0],["BlockActiveTime_nbd8",0],["BlockActiveTime_nbd9",0],["BlockActiveTime_vda",0.000011],["BlockDiscardBytes_nbd0",0],["BlockDiscardBytes_nbd1",0],["BlockDiscardBytes_nbd10",0],["BlockDiscardBytes_nbd11",0],["BlockDiscardBytes_nbd12",0],["BlockDiscardBytes_nbd13",0],["BlockDiscardBytes_nbd14",0],["BlockDiscardBytes_nbd15",0],["BlockDiscardBytes_nbd2",0],["BlockDiscardBytes_nbd3",0],["BlockDiscardBytes_nbd4",0],["BlockDiscardBytes_nbd5",0],["BlockDiscardBytes_nbd6",0],["BlockDiscardBytes_nbd7",0],["BlockDiscardBytes_nbd8",0],["BlockDiscardBytes_nbd9",0],["BlockDiscardBytes_vda",0],["BlockDiscardMerges_nbd0",0],["BlockDiscardMerges_nbd1",0],["BlockDiscardMerges_nbd10",0],["BlockDiscardMerges_nbd11",0],["BlockDiscardMerges_nbd12",0],["BlockDiscardMerges_nbd13",0],["BlockDiscardMerges_nbd14",0],["BlockDiscardMerges_nbd15",0],["BlockDiscardMerges_nbd2",0],["BlockDiscardMerges_nbd3",0],["BlockDiscardMerges_nbd4",0],["BlockDiscardMerges_nbd5",0],["BlockDiscardMerges_nbd6",0],["BlockDiscardMerges_nbd7",0],["BlockDiscardMerges_nbd8",0],["BlockDiscardMerges_nbd9",0],["BlockDiscardMerges_vda",0],["BlockDiscardOps_nbd0",0],["BlockDiscardOps_nbd1",0],["BlockDiscardOps_nbd10",0],["BlockDiscardOps_nbd11",0],["BlockDiscardOps_nbd12",0],["BlockDiscardOps_nbd13",0],["BlockDiscardOps_nbd14",0],["BlockDiscardOps_nbd15",0],["BlockDiscardOps_nbd2",0],["BlockDiscardOps_nbd3",0],["BlockDiscardOps_nbd4",0],["BlockDiscardOps_nbd5",0],["BlockDiscardOps_nbd6",0],["BlockDiscardOps_nbd7",0],["BlockDiscardOps_nbd8",0],["BlockDiscardOps_nbd9",0],["BlockDiscardOps_vda",0],["BlockDiscardTime_nbd0",0],["BlockDiscardTime_nbd1",0],["BlockDiscardTime_nbd10",0],["BlockDiscardTime_nbd11",0],["BlockDiscardTime_nbd12",0],["BlockDiscardTime_nbd13",0],["BlockDiscardTime_nbd14",0],["BlockDiscardTime_nbd15",0],["BlockDiscardTime_nbd2",0],["BlockDiscardTime_nbd3",0],["BlockDiscardTime_nbd4",0],["BlockDiscardTime_nbd5",0],["BlockDiscardTime_nbd6",0],["BlockDiscardTime_nbd7",0],["BlockDiscardTime_nbd8",0],["BlockDiscardTime_nbd9",0],["BlockDiscardTime_vda",0],["BlockInFlightOps_nbd0",0],["BlockInFlightOps_nbd1",0],["BlockInFlightOps_nbd10",0],["BlockInFlightOps_nbd11",0],["BlockInFlightOps_nbd12",0],["BlockInFlightOps_nbd13",0],["BlockInFlightOps_nbd14",0],["BlockInFlightOps_nbd15",0],["BlockInFlightOps_nbd2",0],["BlockInFlightOps_nbd3",0],["BlockInFlightOps_nbd4",0],["BlockInFlightOps_nbd5",0],["BlockInFlightOps_nbd6",0],["BlockInFlightOps_nbd7",0],["BlockInFlightOps_nbd8",0],["BlockInFlightOps_nbd9",0],["BlockInFlightOps_vda",0],["BlockQueueTime_nbd0",0],["BlockQueueTime_nbd1",0],["BlockQueueTime_nbd10",0],["BlockQueueTime_nbd11",0],["BlockQueueTime_nbd12",0],["BlockQueueTime_nbd13",0],["BlockQueueTime_nbd14",0],["BlockQueueTime_nbd15",0],["BlockQueueTime_nbd2",0],["BlockQueueTime_nbd3",0],["BlockQueueTime_nbd4",0],["BlockQueueTime_nbd5",0],["BlockQueueTime_nbd6",0],["BlockQueueTime_nbd7",0],["BlockQueueTime_nbd8",0],["BlockQueueTime_nbd9",0],["BlockQueueTime_vda",0.000009999999999999999],["BlockReadBytes_nbd0",0],["BlockReadBytes_nbd1",0],["BlockReadBytes_nbd10",0],["BlockReadBytes_nbd11",0],["BlockReadBytes_nbd12",0],["BlockReadBytes_nbd13",0],["BlockReadBytes_nbd14",0],["BlockReadBytes_nbd15",0],["BlockReadBytes_nbd2",0],["BlockReadBytes_nbd3",0],["BlockReadBytes_nbd4",0],["BlockReadBytes_nbd5",0],["BlockReadBytes_nbd6",0],["BlockReadBytes_nbd7",0],["BlockReadBytes_nbd8",0],["BlockReadBytes_nbd9",0],["BlockReadBytes_vda",0],["BlockReadMerges_nbd0",0],["BlockReadMerges_nbd1",0],["BlockReadMerges_nbd10",0],["BlockReadMerges_nbd11",0],["BlockReadMerges_nbd12",0],["BlockReadMerges_nbd13",0],["BlockReadMerges_nbd14",0],["BlockReadMerges_nbd15",0],["BlockReadMerges_nbd2",0],["BlockReadMerges_nbd3",0],["BlockReadMerges_nbd4",0],["BlockReadMerges_nbd5",0],["BlockReadMerges_nbd6",0],["BlockReadMerges_nbd7",0],["BlockReadMerges_nbd8",0],["BlockReadMerges_nbd9",0],["BlockReadMerges_vda",0],["BlockReadOps_nbd0",0],["BlockReadOps_nbd1",0],["BlockReadOps_nbd10",0],["BlockReadOps_nbd11",0],["BlockReadOps_nbd12",0],["BlockReadOps_nbd13",0],["BlockReadOps_nbd14",0],["BlockReadOps_nbd15",0],["BlockReadOps_nbd2",0],["BlockReadOps_nbd3",0],["BlockReadOps_nbd4",0],["BlockReadOps_nbd5",0],["BlockReadOps_nbd6",0],["BlockReadOps_nbd7",0],["BlockReadOps_nbd8",0],["BlockReadOps_nbd9",0],["BlockReadOps_vda",0],["BlockReadTime_nbd0",0],["BlockReadTime_nbd1",0],["BlockReadTime_nbd10",0],["BlockReadTime_nbd11",0],["BlockReadTime_nbd12",0],["BlockReadTime_nbd13",0],["BlockReadTime_nbd14",0],["BlockReadTime_nbd15",0],["BlockReadTime_nbd2",0],["BlockReadTime_nbd3",0],["BlockReadTime_nbd4",0],["BlockReadTime_nbd5",0],["BlockReadTime_nbd6",0],["BlockReadTime_nbd7",0],["BlockReadTime_nbd8",0],["BlockReadTime_nbd9",0],["BlockReadTime_vda",0],["BlockWriteBytes_nbd0",0],["BlockWriteBytes_nbd1",0],["BlockWriteBytes_nbd10",0],["BlockWriteBytes_nbd11",0],["BlockWriteBytes_nbd12",0],["BlockWriteBytes_nbd13",0],["BlockWriteBytes_nbd14",0],["BlockWriteBytes_nbd15",0],["BlockWriteBytes_nbd2",0],["BlockWriteBytes_nbd3",0],["BlockWriteBytes_nbd4",0],["BlockWriteBytes_nbd5",0],["BlockWriteBytes_nbd6",0],["BlockWriteBytes_nbd7",0],["BlockWriteBytes_nbd8",0],["BlockWriteBytes_nbd9",0],["BlockWriteBytes_vda",253952],["BlockWriteMerges_nbd0",0],["BlockWriteMerges_nbd1",0],["BlockWriteMerges_nbd10",0],["BlockWriteMerges_nbd11",0],["BlockWriteMerges_nbd12",0],["BlockWriteMerges_nbd13",0],["BlockWriteMerges_nbd14",0],["BlockWriteMerges_nbd15",0],["BlockWriteMerges_nbd2",0],["BlockWriteMerges_nbd3",0],["BlockWriteMerges_nbd4",0],["BlockWriteMerges_nbd5",0],["BlockWriteMerges_nbd6",0],["BlockWriteMerges_nbd7",0],["BlockWriteMerges_nbd8",0],["BlockWriteMerges_nbd9",0],["BlockWriteMerges_vda",0],["BlockWriteOps_nbd0",0],["BlockWriteOps_nbd1",0],["BlockWriteOps_nbd10",0],["BlockWriteOps_nbd11",0],["BlockWriteOps_nbd12",0],["BlockWriteOps_nbd13",0],["BlockWriteOps_nbd14",0],["BlockWriteOps_nbd15",0],["BlockWriteOps_nbd2",0],["BlockWriteOps_nbd3",0],["BlockWriteOps_nbd4",0],["BlockWriteOps_nbd5",0],["BlockWriteOps_nbd6",0],["BlockWriteOps_nbd7",0],["BlockWriteOps_nbd8",0],["BlockWriteOps_nbd9",0],["BlockWriteOps_vda",12],["BlockWriteTime_nbd0",0],["BlockWriteTime_nbd1",0],["BlockWriteTime_nbd10",0],["BlockWriteTime_nbd11",0],["BlockWriteTime_nbd12",0],["BlockWriteTime_nbd13",0],["BlockWriteTime_nbd14",0],["BlockWriteTime_nbd15",0],["BlockWriteTime_nbd2",0],["BlockWriteTime_nbd3",0],["BlockWriteTime_nbd4",0],["BlockWriteTime_nbd5",0],["BlockWriteTime_nbd6",0],["BlockWriteTime_nbd7",0],["BlockWriteTime_nbd8",0],["BlockWriteTime_nbd9",0],["BlockWriteTime_vda",0.000008],["BrokenDistributedFilesToInsert",0,"Number of files for asynchronous insertion into Distributed tables that has been marked as broken. This metric will starts from 0 on start. Number of files for every shard is summed."],["CacheDictionaryUpdateQueueBatches",0,"Number of \'batches\' (a set of keys) in update queue in CacheDictionaries."],["CacheDictionaryUpdateQueueKeys",0,"Exact number of keys in update queue in CacheDictionaries."],["ContextLockWait",0,"Number of threads waiting for lock in Context. This is global lock."],["DelayedInserts",0,"Number of INSERT queries that are throttled due to high number of active data parts for partition in a MergeTree table."],["DictCacheRequests",0,"Number of requests in fly to data sources of dictionaries of cache type."],["DiskAvailable_default",30909685760],["DiskSpaceReservedForMerge",0,"Disk space reserved for currently running background merges. It is slightly more than the total size of currently merging parts."],["DiskTotal_default",62725623808],["DiskUnreserved_default",30909685760],["DiskUsed_default",31815938048],["DistributedFilesToInsert",0,"Number of pending files to process for asynchronous insertion into Distributed tables. Number of files for every shard is summed."],["DistributedSend",0,"Number of connections to remote servers sending data that was INSERTed into Distributed tables. Both synchronous and asynchronous mode."],["EphemeralNode",0,"Number of ephemeral nodes hold in ZooKeeper."],["FilesystemLogsPathAvailableBytes",30909685760],["FilesystemLogsPathAvailableINodes",3024789],["FilesystemLogsPathTotalBytes",62725623808],["FilesystemLogsPathTotalINodes",3907584],["FilesystemLogsPathUsedBytes",31815938048],["FilesystemLogsPathUsedINodes",882795],["FilesystemMainPathAvailableBytes",30909685760],["FilesystemMainPathAvailableINodes",3024789],["FilesystemMainPathTotalBytes",62725623808],["FilesystemMainPathTotalINodes",3907584],["FilesystemMainPathUsedBytes",31815938048],["FilesystemMainPathUsedINodes",882795],["GlobalThread",208,"Number of threads in global thread pool."],["GlobalThreadActive",164,"Number of threads in global thread pool running a task."],["HTTPConnection",0,"Number of connections to HTTP server"],["HTTPThreads",1],["InterserverConnection",0,"Number of connections from other replicas to fetch parts"],["InterserverThreads",0],["Jitter",0.000253],["LoadAverage1",0.56],["LoadAverage15",0.25],["LoadAverage5",0.34],["LocalThread",0,"Number of threads in local thread pools. The threads in local thread pools are taken from the global thread pool."],["LocalThreadActive",0,"Number of threads in local thread pools running a task."],["MMapCacheCells",0],["MMappedFileBytes",1958451168,"Sum size of mmapped file regions."],["MMappedFiles",7,"Total number of mmapped files."],["MarkCacheBytes",3995568],["MarkCacheFiles",6657],["MaxDDLEntryID",442,"Max processed DDL entry of DDLWorker."],["MaxPartCountForPartition",8],["MaxPushedDDLEntryID",442,"Max DDL entry of DDLWorker that pushed to zookeeper."],["MemoryCode",265568256],["MemoryDataAndStack",22894653440],["MemoryResident",757252096],["MemoryShared",270368768],["MemoryTracking",757483984,"Total amount of memory (bytes) allocated by the server."],["MemoryVirtual",25127219200],["Merge",0,"Number of executing background merges"],["MySQLConnection",0,"Number of client connections using MySQL protocol"],["MySQLThreads",0],["NetworkReceive",0,"Number of threads receiving data from network. Only ClickHouse-related network interaction is included, not by 3rd party libraries."],["NetworkReceiveBytes_eth0",20222],["NetworkReceiveBytes_ip6tnl0",0],["NetworkReceiveBytes_tunl0",0],["NetworkReceiveDrop_eth0",0],["NetworkReceiveDrop_ip6tnl0",0],["NetworkReceiveDrop_tunl0",0],["NetworkReceiveErrors_eth0",0],["NetworkReceiveErrors_ip6tnl0",0],["NetworkReceiveErrors_tunl0",0],["NetworkReceivePackets_eth0",59],["NetworkReceivePackets_ip6tnl0",0],["NetworkReceivePackets_tunl0",0],["NetworkSend",0,"Number of threads sending data to network. Only ClickHouse-related network interaction is included, not by 3rd party libraries."],["NetworkSendBytes_eth0",6902],["NetworkSendBytes_ip6tnl0",0],["NetworkSendBytes_tunl0",0],["NetworkSendDrop_eth0",0],["NetworkSendDrop_ip6tnl0",0],["NetworkSendDrop_tunl0",0],["NetworkSendErrors_eth0",0],["NetworkSendErrors_ip6tnl0",0],["NetworkSendErrors_tunl0",0],["NetworkSendPackets_eth0",32],["NetworkSendPackets_ip6tnl0",0],["NetworkSendPackets_tunl0",0],["NumberOfDatabases",4],["NumberOfTables",128],["OSContextSwitches",6175],["OSGuestNiceTime",0],["OSGuestNiceTimeCPU0",0],["OSGuestNiceTimeCPU1",0],["OSGuestNiceTimeCPU2",0],["OSGuestNiceTimeCPU3",0],["OSGuestNiceTimeCPU4",0],["OSGuestNiceTimeCPU5",0],["OSGuestNiceTimeCPU6",0],["OSGuestNiceTimeCPU7",0],["OSGuestNiceTimeNormalized",0],["OSGuestTime",0],["OSGuestTimeCPU0",0],["OSGuestTimeCPU1",0],["OSGuestTimeCPU2",0],["OSGuestTimeCPU3",0],["OSGuestTimeCPU4",0],["OSGuestTimeCPU5",0],["OSGuestTimeCPU6",0],["OSGuestTimeCPU7",0],["OSGuestTimeNormalized",0],["OSIOWaitTime",0],["OSIOWaitTimeCPU0",0],["OSIOWaitTimeCPU1",0],["OSIOWaitTimeCPU2",0],["OSIOWaitTimeCPU3",0],["OSIOWaitTimeCPU4",0],["OSIOWaitTimeCPU5",0],["OSIOWaitTimeCPU6",0],["OSIOWaitTimeCPU7",0],["OSIOWaitTimeNormalized",0],["OSIdleTime",6.238421679315133],["OSIdleTimeCPU0",0.7698052392744635],["OSIdleTimeCPU1",0.7997976511942478],["OSIdleTimeCPU2",0.719817886074823],["OSIdleTimeCPU3",0.7997976511942478],["OSIdleTimeCPU4",0.6698305328751826],["OSIdleTimeCPU5",0.8097951218341759],["OSIdleTimeCPU6",0.8197925924741041],["OSIdleTimeCPU7",0.8497850043938884],["OSIdleTimeNormalized",0.7798027099143916],["OSInterrupts",4856],["OSIrqTime",0],["OSIrqTimeCPU0",0],["OSIrqTimeCPU1",0],["OSIrqTimeCPU2",0],["OSIrqTimeCPU3",0],["OSIrqTimeCPU4",0],["OSIrqTimeCPU5",0],["OSIrqTimeCPU6",0],["OSIrqTimeCPU7",0],["OSIrqTimeNormalized",0],["OSMemoryAvailable",3400728576],["OSMemoryBuffers",424554496],["OSMemoryCached",2488438784],["OSMemoryFreePlusCached",3341795328],["OSMemoryFreeWithoutCached",853356544],["OSMemorySwapCached",1839104],["OSMemoryTotal",6227279872],["OSNiceTime",0],["OSNiceTimeCPU0",0],["OSNiceTimeCPU1",0],["OSNiceTimeCPU2",0],["OSNiceTimeCPU3",0],["OSNiceTimeCPU4",0],["OSNiceTimeCPU5",0],["OSNiceTimeCPU6",0],["OSNiceTimeCPU7",0],["OSNiceTimeNormalized",0],["OSOpenFiles",5248],["OSProcessesBlocked",0],["OSProcessesCreated",3],["OSProcessesRunning",4],["OSSoftIrqTime",0.06998229447949669],["OSSoftIrqTimeCPU0",0.029992411919784294],["OSSoftIrqTimeCPU1",0],["OSSoftIrqTimeCPU2",0.009997470639928098],["OSSoftIrqTimeCPU3",0.009997470639928098],["OSSoftIrqTimeCPU4",0],["OSSoftIrqTimeCPU5",0],["OSSoftIrqTimeCPU6",0.009997470639928098],["OSSoftIrqTimeCPU7",0.009997470639928098],["OSSoftIrqTimeNormalized",0.008747786809937087],["OSStealTime",0],["OSStealTimeCPU0",0],["OSStealTimeCPU1",0],["OSStealTimeCPU2",0],["OSStealTimeCPU3",0],["OSStealTimeCPU4",0],["OSStealTimeCPU5",0],["OSStealTimeCPU6",0],["OSStealTimeCPU7",0],["OSStealTimeNormalized",0],["OSSystemTime",0.28992664855791483],["OSSystemTimeCPU0",0.029992411919784294],["OSSystemTimeCPU1",0.03998988255971239],["OSSystemTimeCPU2",0.029992411919784294],["OSSystemTimeCPU3",0.03998988255971239],["OSSystemTimeCPU4",0.05998482383956859],["OSSystemTimeCPU5",0.029992411919784294],["OSSystemTimeCPU6",0.03998988255971239],["OSSystemTimeCPU7",0.029992411919784294],["OSSystemTimeNormalized",0.036240831069739354],["OSThreadsRunnable",4],["OSThreadsTotal",1084],["OSUptime",298274.46],["OSUserTime",0.309921589837771],["OSUserTimeCPU0",0.029992411919784294],["OSUserTimeCPU1",0.029992411919784294],["OSUserTimeCPU2",0.029992411919784294],["OSUserTimeCPU3",0.029992411919784294],["OSUserTimeCPU4",0.08997723575935287],["OSUserTimeCPU5",0.029992411919784294],["OSUserTimeCPU6",0.019994941279856196],["OSUserTimeCPU7",0.029992411919784294],["OSUserTimeNormalized",0.03874019872972138],["OpenFileForRead",31,"Number of files open for reading"],["OpenFileForWrite",0,"Number of files open for writing"],["PartMutation",0,"Number of mutations (ALTER DELETE/UPDATE)"],["PartsCommitted",95,"Active data part, used by current and upcoming SELECTs."],["PartsCompact",152,"Compact parts."],["PartsDeleteOnDestroy",0,"Part was moved to another disk and should be deleted in own destructor."],["PartsDeleting",0,"Not active data part with identity refcounter, it is deleting right now by a cleaner."],["PartsInMemory",0,"In-memory parts."],["PartsOutdated",93,"Not active data part, but could be used by only current SELECTs, could be deleted after SELECTs finishes."],["PartsPreCommitted",0,"The part is in data_parts, but not used for SELECTs."],["PartsTemporary",0,"The part is generating now, it is not in data_parts list."],["PartsWide",36,"Wide parts."],["PostgreSQLConnection",0,"Number of client connections using PostgreSQL protocol"],["Query",1,"Number of executing queries"],["QueryPreempted",0,"Number of queries that are stopped and waiting due to \'priority\' setting."],["QueryThread",0,"Number of query processing threads"],["RWLockActiveReaders",46,"Number of threads holding read lock in a table RWLock."],["RWLockActiveWriters",0,"Number of threads holding write lock in a table RWLock."],["RWLockWaitingReaders",0,"Number of threads waiting for read on a table RWLock."],["RWLockWaitingWriters",0,"Number of threads waiting for write on a table RWLock."],["Read",1,"Number of read (read, pread, io_getevents, etc.) syscalls in fly"],["ReadonlyReplica",0,"Number of Replicated tables that are currently in readonly state due to re-initialization after ZooKeeper session loss or due to startup without ZooKeeper configured."],["ReplicasMaxAbsoluteDelay",0],["ReplicasMaxInsertsInQueue",0],["ReplicasMaxMergesInQueue",0],["ReplicasMaxQueueSize",0],["ReplicasMaxRelativeDelay",0],["ReplicasSumInsertsInQueue",0],["ReplicasSumMergesInQueue",0],["ReplicasSumQueueSize",0],["ReplicatedChecks",0,"Number of data parts checking for consistency"],["ReplicatedFetch",0,"Number of data parts being fetched from replica"],["ReplicatedSend",0,"Number of data parts being sent to replicas"],["Revision",54454,"Revision of the server. It is a number incremented for every release or release candidate except patch releases."],["SendExternalTables",0,"Number of connections that are sending data for external tables to remote servers. External tables are used to implement GLOBAL IN and GLOBAL JOIN operators with distributed subqueries."],["SendScalars",0,"Number of connections that are sending data for scalars to remote servers."],["StorageBufferBytes",0,"Number of bytes in buffers of Buffer tables"],["StorageBufferRows",0,"Number of rows in buffers of Buffer tables"],["SyncDrainedConnections",0,"Number of connections drained synchronously."],["TCPConnection",2,"Number of connections to TCP server (clients with native interface), also included server-server distributed query connections"],["TCPThreads",2],["TablesToDropQueueSize",0,"Number of dropped tables, that are waiting for background data removal."],["TotalBytesOfMergeTreeTables",922069414],["TotalPartsOfMergeTreeTables",95],["TotalRowsOfMergeTreeTables",167857091],["UncompressedCacheBytes",0],["UncompressedCacheCells",0],["Uptime",297631],["VersionInteger",21009002,"Version of the server in a single integer number in base-1000. For example, version 11.22.33 is translated to 11022033."],["Write",0,"Number of write (write, pwrite, io_getevents, etc.) syscalls in fly"],["ZooKeeperRequest",0,"Number of requests to ZooKeeper in fly."],["ZooKeeperSession",1,"Number of sessions (connections) to ZooKeeper. Should be no more than one, because using more than one connection to ZooKeeper may lead to bugs due to lack of linearizability (stale reads) that ZooKeeper consistency model allows."],["ZooKeeperWatch",1,"Number of watches (event subscriptions) in ZooKeeper."],["jemalloc.active",415367168],["jemalloc.allocated",259537136],["jemalloc.arenas.all.dirty_purged",144941416],["jemalloc.arenas.all.muzzy_purged",138378738],["jemalloc.arenas.all.pactive",6338],["jemalloc.arenas.all.pdirty",14251],["jemalloc.arenas.all.pmuzzy",50],["jemalloc.background_thread.num_runs",0],["jemalloc.background_thread.num_threads",0],["jemalloc.background_thread.run_intervals",0],["jemalloc.epoch",297926],["jemalloc.mapped",5647564800],["jemalloc.metadata",45092944],["jemalloc.metadata_thp",0],["jemalloc.resident",1381040128],["jemalloc.retained",14753529856]]}},{"key":"last_event_ingested_timestamp","metric":"Last event ingested","value":"2022-03-16T10:16:44"},{"key":"dead_letter_queue_size","metric":"Dead letter queue size","value":114794},{"key":"dead_letter_queue_events_last_day","metric":"Events sent to dead letter queue in the last 24h","value":4682},{"key":"dead_letter_queue_ratio_ok","metric":"Dead letter queue ratio healthy","value":true},{"key":"redis_alive","metric":"Redis alive","value":true},{"metric":"Redis version","value":"6.2.6"},{"metric":"Redis current queue depth","value":"0"},{"metric":"Redis connected client count","value":"28"},{"metric":"Redis memory used","value":"3.04MB"},{"metric":"Redis memory peak","value":"4.04MB"},{"metric":"Redis total memory available","value":"5.80GB"}],"internal_metrics":{}}}')},"./frontend/src/mocks/fixtures/_preflight.json":module=>{"use strict";module.exports=JSON.parse('{"django":true,"redis":true,"plugins":false,"celery":false,"db":true,"clickhouse":true,"kafka":true,"initiated":true,"cloud":false,"demo":false,"object_storage":true,"realm":"hosted-clickhouse","region":"US","available_social_auth_providers":{"github":false,"gitlab":false,"google-oauth2":false,"saml":false},"can_create_org":false,"email_service_available":false,"db_backend":"clickhouse","available_timezones":{"Africa/Abidjan":0,"Africa/Accra":0,"Africa/Addis_Ababa":3,"Africa/Algiers":1,"Africa/Asmara":3,"Africa/Bamako":0,"Africa/Bangui":1,"Africa/Banjul":0,"Africa/Bissau":0,"Africa/Blantyre":2,"Africa/Brazzaville":1,"Africa/Bujumbura":2,"Africa/Cairo":2,"Africa/Casablanca":1,"Africa/Ceuta":1,"Africa/Conakry":0,"Africa/Dakar":0,"Africa/Dar_es_Salaam":3,"Africa/Djibouti":3,"Africa/Douala":1,"Africa/El_Aaiun":1,"Africa/Freetown":0,"Africa/Gaborone":2,"Africa/Harare":2,"Africa/Johannesburg":2,"Africa/Juba":2,"Africa/Kampala":3,"Africa/Khartoum":2,"Africa/Kigali":2,"Africa/Kinshasa":1,"Africa/Lagos":1,"Africa/Libreville":1,"Africa/Lome":0,"Africa/Luanda":1,"Africa/Lubumbashi":2,"Africa/Lusaka":2,"Africa/Malabo":1,"Africa/Maputo":2,"Africa/Maseru":2,"Africa/Mbabane":2,"Africa/Mogadishu":3,"Africa/Monrovia":0,"Africa/Nairobi":3,"Africa/Ndjamena":1,"Africa/Niamey":1,"Africa/Nouakchott":0,"Africa/Ouagadougou":0,"Africa/Porto-Novo":1,"Africa/Sao_Tome":0,"Africa/Tripoli":2,"Africa/Tunis":1,"Africa/Windhoek":2,"America/Adak":-9,"America/Anchorage":-8,"America/Anguilla":-4,"America/Antigua":-4,"America/Araguaina":-3,"America/Argentina/Buenos_Aires":-3,"America/Argentina/Catamarca":-3,"America/Argentina/Cordoba":-3,"America/Argentina/Jujuy":-3,"America/Argentina/La_Rioja":-3,"America/Argentina/Mendoza":-3,"America/Argentina/Rio_Gallegos":-3,"America/Argentina/Salta":-3,"America/Argentina/San_Juan":-3,"America/Argentina/San_Luis":-3,"America/Argentina/Tucuman":-3,"America/Argentina/Ushuaia":-3,"America/Aruba":-4,"America/Asuncion":-3,"America/Atikokan":-5,"America/Bahia":-3,"America/Bahia_Banderas":-6,"America/Barbados":-4,"America/Belem":-3,"America/Belize":-6,"America/Blanc-Sablon":-4,"America/Boa_Vista":-4,"America/Bogota":-5,"America/Boise":-6,"America/Cambridge_Bay":-6,"America/Campo_Grande":-4,"America/Cancun":-5,"America/Caracas":-4,"America/Cayenne":-3,"America/Cayman":-5,"America/Chicago":-5,"America/Chihuahua":-7,"America/Costa_Rica":-6,"America/Creston":-7,"America/Cuiaba":-4,"America/Curacao":-4,"America/Danmarkshavn":0,"America/Dawson":-7,"America/Dawson_Creek":-7,"America/Denver":-6,"America/Detroit":-4,"America/Dominica":-4,"America/Edmonton":-6,"America/Eirunepe":-5,"America/El_Salvador":-6,"America/Fort_Nelson":-7,"America/Fortaleza":-3,"America/Glace_Bay":-3,"America/Goose_Bay":-3,"America/Grand_Turk":-4,"America/Grenada":-4,"America/Guadeloupe":-4,"America/Guatemala":-6,"America/Guayaquil":-5,"America/Guyana":-4,"America/Halifax":-3,"America/Havana":-4,"America/Hermosillo":-7,"America/Indiana/Indianapolis":-4,"America/Indiana/Knox":-5,"America/Indiana/Marengo":-4,"America/Indiana/Petersburg":-4,"America/Indiana/Tell_City":-5,"America/Indiana/Vevay":-4,"America/Indiana/Vincennes":-4,"America/Indiana/Winamac":-4,"America/Inuvik":-6,"America/Iqaluit":-4,"America/Jamaica":-5,"America/Juneau":-8,"America/Kentucky/Louisville":-4,"America/Kentucky/Monticello":-4,"America/Kralendijk":-4,"America/La_Paz":-4,"America/Lima":-5,"America/Los_Angeles":-7,"America/Lower_Princes":-4,"America/Maceio":-3,"America/Managua":-6,"America/Manaus":-4,"America/Marigot":-4,"America/Martinique":-4,"America/Matamoros":-5,"America/Mazatlan":-7,"America/Menominee":-5,"America/Merida":-6,"America/Metlakatla":-8,"America/Mexico_City":-6,"America/Miquelon":-2,"America/Moncton":-3,"America/Monterrey":-6,"America/Montevideo":-3,"America/Montserrat":-4,"America/Nassau":-4,"America/New_York":-4,"America/Nipigon":-4,"America/Nome":-8,"America/Noronha":-2,"America/North_Dakota/Beulah":-5,"America/North_Dakota/Center":-5,"America/North_Dakota/New_Salem":-5,"America/Nuuk":-3,"America/Ojinaga":-6,"America/Panama":-5,"America/Pangnirtung":-4,"America/Paramaribo":-3,"America/Phoenix":-7,"America/Port-au-Prince":-4,"America/Port_of_Spain":-4,"America/Porto_Velho":-4,"America/Puerto_Rico":-4,"America/Punta_Arenas":-3,"America/Rainy_River":-5,"America/Rankin_Inlet":-5,"America/Recife":-3,"America/Regina":-6,"America/Resolute":-5,"America/Rio_Branco":-5,"America/Santarem":-3,"America/Santiago":-3,"America/Santo_Domingo":-4,"America/Sao_Paulo":-3,"America/Scoresbysund":-1,"America/Sitka":-8,"America/St_Barthelemy":-4,"America/St_Johns":-2.5,"America/St_Kitts":-4,"America/St_Lucia":-4,"America/St_Thomas":-4,"America/St_Vincent":-4,"America/Swift_Current":-6,"America/Tegucigalpa":-6,"America/Thule":-3,"America/Thunder_Bay":-4,"America/Tijuana":-7,"America/Toronto":-4,"America/Tortola":-4,"America/Vancouver":-7,"America/Whitehorse":-7,"America/Winnipeg":-5,"America/Yakutat":-8,"America/Yellowknife":-6,"Antarctica/Casey":11,"Antarctica/Davis":7,"Antarctica/DumontDUrville":10,"Antarctica/Macquarie":11,"Antarctica/Mawson":5,"Antarctica/McMurdo":13,"Antarctica/Palmer":-3,"Antarctica/Rothera":-3,"Antarctica/Syowa":3,"Antarctica/Troll":0,"Antarctica/Vostok":6,"Arctic/Longyearbyen":1,"Asia/Aden":3,"Asia/Almaty":6,"Asia/Amman":2,"Asia/Anadyr":12,"Asia/Aqtau":5,"Asia/Aqtobe":5,"Asia/Ashgabat":5,"Asia/Atyrau":5,"Asia/Baghdad":3,"Asia/Bahrain":3,"Asia/Baku":4,"Asia/Bangkok":7,"Asia/Barnaul":7,"Asia/Beirut":2,"Asia/Bishkek":6,"Asia/Brunei":8,"Asia/Chita":9,"Asia/Choibalsan":8,"Asia/Colombo":5.5,"Asia/Damascus":2,"Asia/Dhaka":6,"Asia/Dili":9,"Asia/Dubai":4,"Asia/Dushanbe":5,"Asia/Famagusta":2,"Asia/Gaza":2,"Asia/Hebron":2,"Asia/Ho_Chi_Minh":7,"Asia/Hong_Kong":8,"Asia/Hovd":7,"Asia/Irkutsk":8,"Asia/Jakarta":7,"Asia/Jayapura":9,"Asia/Jerusalem":2,"Asia/Kabul":4.5,"Asia/Kamchatka":12,"Asia/Karachi":5,"Asia/Kathmandu":5.75,"Asia/Khandyga":9,"Asia/Kolkata":5.5,"Asia/Krasnoyarsk":7,"Asia/Kuala_Lumpur":8,"Asia/Kuching":8,"Asia/Kuwait":3,"Asia/Macau":8,"Asia/Magadan":11,"Asia/Makassar":8,"Asia/Manila":8,"Asia/Muscat":4,"Asia/Nicosia":2,"Asia/Novokuznetsk":7,"Asia/Novosibirsk":7,"Asia/Omsk":6,"Asia/Oral":5,"Asia/Phnom_Penh":7,"Asia/Pontianak":7,"Asia/Pyongyang":9,"Asia/Qatar":3,"Asia/Qostanay":6,"Asia/Qyzylorda":5,"Asia/Riyadh":3,"Asia/Sakhalin":11,"Asia/Samarkand":5,"Asia/Seoul":9,"Asia/Shanghai":8,"Asia/Singapore":8,"Asia/Srednekolymsk":11,"Asia/Taipei":8,"Asia/Tashkent":5,"Asia/Tbilisi":4,"Asia/Tehran":3.5,"Asia/Thimphu":6,"Asia/Tokyo":9,"Asia/Tomsk":7,"Asia/Ulaanbaatar":8,"Asia/Urumqi":6,"Asia/Ust-Nera":10,"Asia/Vientiane":7,"Asia/Vladivostok":10,"Asia/Yakutsk":9,"Asia/Yangon":6.5,"Asia/Yekaterinburg":5,"Asia/Yerevan":4,"Atlantic/Azores":-1,"Atlantic/Bermuda":-3,"Atlantic/Canary":0,"Atlantic/Cape_Verde":-1,"Atlantic/Faroe":0,"Atlantic/Madeira":0,"Atlantic/Reykjavik":0,"Atlantic/South_Georgia":-2,"Atlantic/St_Helena":0,"Atlantic/Stanley":-3,"Australia/Adelaide":10.5,"Australia/Brisbane":10,"Australia/Broken_Hill":10.5,"Australia/Darwin":9.5,"Australia/Eucla":8.75,"Australia/Hobart":11,"Australia/Lindeman":10,"Australia/Lord_Howe":11,"Australia/Melbourne":11,"Australia/Perth":8,"Australia/Sydney":11,"Canada/Atlantic":-3,"Canada/Central":-5,"Canada/Eastern":-4,"Canada/Mountain":-6,"Canada/Newfoundland":-2.5,"Canada/Pacific":-7,"Europe/Amsterdam":1,"Europe/Andorra":1,"Europe/Astrakhan":4,"Europe/Athens":2,"Europe/Belgrade":1,"Europe/Berlin":1,"Europe/Bratislava":1,"Europe/Brussels":1,"Europe/Bucharest":2,"Europe/Budapest":1,"Europe/Busingen":1,"Europe/Chisinau":2,"Europe/Copenhagen":1,"Europe/Dublin":0,"Europe/Gibraltar":1,"Europe/Guernsey":0,"Europe/Helsinki":2,"Europe/Isle_of_Man":0,"Europe/Istanbul":3,"Europe/Jersey":0,"Europe/Kaliningrad":2,"Europe/Kiev":2,"Europe/Kirov":3,"Europe/Lisbon":0,"Europe/Ljubljana":1,"Europe/London":0,"Europe/Luxembourg":1,"Europe/Madrid":1,"Europe/Malta":1,"Europe/Mariehamn":2,"Europe/Minsk":3,"Europe/Monaco":1,"Europe/Moscow":3,"Europe/Oslo":1,"Europe/Paris":1,"Europe/Podgorica":1,"Europe/Prague":1,"Europe/Riga":2,"Europe/Rome":1,"Europe/Samara":4,"Europe/San_Marino":1,"Europe/Sarajevo":1,"Europe/Saratov":4,"Europe/Simferopol":3,"Europe/Skopje":1,"Europe/Sofia":2,"Europe/Stockholm":1,"Europe/Tallinn":2,"Europe/Tirane":1,"Europe/Ulyanovsk":4,"Europe/Uzhgorod":2,"Europe/Vaduz":1,"Europe/Vatican":1,"Europe/Vienna":1,"Europe/Vilnius":2,"Europe/Volgograd":3,"Europe/Warsaw":1,"Europe/Zagreb":1,"Europe/Zaporozhye":2,"Europe/Zurich":1,"GMT":0,"Indian/Antananarivo":3,"Indian/Chagos":6,"Indian/Christmas":7,"Indian/Cocos":6.5,"Indian/Comoro":3,"Indian/Kerguelen":5,"Indian/Mahe":4,"Indian/Maldives":5,"Indian/Mauritius":4,"Indian/Mayotte":3,"Indian/Reunion":4,"Pacific/Apia":14,"Pacific/Auckland":13,"Pacific/Bougainville":11,"Pacific/Chatham":13.75,"Pacific/Chuuk":10,"Pacific/Easter":-5,"Pacific/Efate":11,"Pacific/Enderbury":13,"Pacific/Fakaofo":13,"Pacific/Fiji":12,"Pacific/Funafuti":12,"Pacific/Galapagos":-6,"Pacific/Gambier":-9,"Pacific/Guadalcanal":11,"Pacific/Guam":10,"Pacific/Honolulu":-10,"Pacific/Kiritimati":14,"Pacific/Kosrae":11,"Pacific/Kwajalein":12,"Pacific/Majuro":12,"Pacific/Marquesas":-9.5,"Pacific/Midway":-11,"Pacific/Nauru":12,"Pacific/Niue":-11,"Pacific/Norfolk":12,"Pacific/Noumea":11,"Pacific/Pago_Pago":-11,"Pacific/Palau":9,"Pacific/Pitcairn":-8,"Pacific/Pohnpei":11,"Pacific/Port_Moresby":10,"Pacific/Rarotonga":-10,"Pacific/Saipan":10,"Pacific/Tahiti":-10,"Pacific/Tarawa":12,"Pacific/Tongatapu":13,"Pacific/Wake":12,"Pacific/Wallis":12,"US/Alaska":-8,"US/Arizona":-7,"US/Central":-5,"US/Eastern":-4,"US/Hawaii":-10,"US/Mountain":-6,"US/Pacific":-7,"UTC":0},"opt_out_capture":false,"is_debug":true,"licensed_users_available":21311,"site_url":"http://localhost:6006","instance_preferences":{"debug_queries":false,"disable_paid_fs":false}}')},"./frontend/src/mocks/fixtures/_system_status.json":module=>{"use strict";module.exports=JSON.parse('{"results":[{"key":"ingestion_server","metric":"Event ingestion via","value":"Plugin Server"},{"key":"plugin_sever_alive","metric":"Plugin server alive","value":true},{"key":"plugin_sever_version","metric":"Plugin server version","value":"0.15.5"},{"key":"db_alive","metric":"Postgres database alive","value":true},{"key":"pg_version","metric":"Postgres version","value":"13.0.1"},{"metric":"Postgres elements table size","value":"~3508 rows (~840 kB)"},{"metric":"Postgres events table size","value":"~5003 rows (~7032 kB)"},{"metric":"Postgres session recording table size","value":"~536 rows (~4608 kB)"},{"key":"redis_alive","metric":"Redis alive","value":true},{"metric":"Redis version","value":"6.0.10"},{"metric":"Redis current queue depth","value":"0"},{"metric":"Redis connected client count","value":"37"},{"metric":"Redis memory used","value":"2.10MB"},{"metric":"Redis memory peak","value":"12.00MB"},{"metric":"Redis total memory available","value":"64.00GB"}]}')},"./frontend/src/queries/schema.json":module=>{"use strict";module.exports=JSON.parse('{"$schema":"http://json-schema.org/draft-07/schema#","definitions":{"AIActionsNode":{"additionalProperties":false,"properties":{"custom_name":{"type":"string"},"event":{"description":"The event or `null` for all events.","type":["string","null"]},"fixedProperties":{"items":{"$ref":"#/definitions/AIPropertyFilter"},"type":"array"},"kind":{"const":"EventsNode","type":"string"},"math":{"$ref":"#/definitions/MathType"},"math_group_type_index":{"enum":[0,1,2,3,4],"type":"number"},"math_property":{"type":"string"},"math_property_type":{"type":"string"},"name":{"type":"string"},"orderBy":{"description":"Columns to order by","items":{"type":"string"},"type":"array"},"properties":{"items":{"$ref":"#/definitions/AIPropertyFilter"},"type":"array"},"response":{"type":"object"}},"required":["kind"],"type":"object"},"AIEventsNode":{"additionalProperties":false,"properties":{"custom_name":{"type":"string"},"event":{"description":"The event or `null` for all events.","type":["string","null"]},"fixedProperties":{"items":{"$ref":"#/definitions/AIPropertyFilter"},"type":"array"},"kind":{"const":"EventsNode","type":"string"},"math":{"$ref":"#/definitions/MathType"},"math_group_type_index":{"enum":[0,1,2,3,4],"type":"number"},"math_property":{"type":"string"},"math_property_type":{"type":"string"},"name":{"type":"string"},"orderBy":{"description":"Columns to order by","items":{"type":"string"},"type":"array"},"properties":{"items":{"$ref":"#/definitions/AIPropertyFilter"},"type":"array"},"response":{"type":"object"}},"required":["kind"],"type":"object"},"AIPropertyFilter":{"anyOf":[{"$ref":"#/definitions/EventPropertyFilter"},{"$ref":"#/definitions/PersonPropertyFilter"},{"$ref":"#/definitions/SessionPropertyFilter"},{"$ref":"#/definitions/GroupPropertyFilter"},{"$ref":"#/definitions/FeaturePropertyFilter"}]},"ActionConversionGoal":{"additionalProperties":false,"properties":{"actionId":{"type":"integer"}},"required":["actionId"],"type":"object"},"ActionsNode":{"additionalProperties":false,"properties":{"custom_name":{"type":"string"},"fixedProperties":{"description":"Fixed properties in the query, can\'t be edited in the interface (e.g. scoping down by person)","items":{"$ref":"#/definitions/AnyPropertyFilter"},"type":"array"},"id":{"type":"integer"},"kind":{"const":"ActionsNode","type":"string"},"math":{"$ref":"#/definitions/MathType"},"math_group_type_index":{"enum":[0,1,2,3,4],"type":"number"},"math_hogql":{"type":"string"},"math_property":{"type":"string"},"math_property_type":{"type":"string"},"name":{"type":"string"},"properties":{"description":"Properties configurable in the interface","items":{"$ref":"#/definitions/AnyPropertyFilter"},"type":"array"},"response":{"type":"object"}},"required":["id","kind"],"type":"object"},"ActorsPropertyTaxonomyQuery":{"additionalProperties":false,"properties":{"group_type_index":{"type":"integer"},"kind":{"const":"ActorsPropertyTaxonomyQuery","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"property":{"type":"string"},"response":{"$ref":"#/definitions/ActorsPropertyTaxonomyQueryResponse"}},"required":["kind","property"],"type":"object"},"ActorsPropertyTaxonomyQueryResponse":{"additionalProperties":false,"description":"All analytics query responses must inherit from this.","properties":{"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hogql":{"description":"Generated HogQL query.","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"$ref":"#/definitions/ActorsPropertyTaxonomyResponse"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"}},"required":["results"],"type":"object"},"ActorsPropertyTaxonomyResponse":{"additionalProperties":false,"properties":{"sample_count":{"type":"integer"},"sample_values":{"items":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"integer"}]},"type":"array"}},"required":["sample_values","sample_count"],"type":"object"},"ActorsQuery":{"additionalProperties":false,"properties":{"fixedProperties":{"description":"Currently only person filters supported. No filters for querying groups. See `filter_conditions()` in actor_strategies.py.","items":{"$ref":"#/definitions/AnyPersonScopeFilter"},"type":"array"},"kind":{"const":"ActorsQuery","type":"string"},"limit":{"type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"offset":{"type":"integer"},"orderBy":{"items":{"type":"string"},"type":"array"},"properties":{"description":"Currently only person filters supported. No filters for querying groups. See `filter_conditions()` in actor_strategies.py.","items":{"$ref":"#/definitions/AnyPersonScopeFilter"},"type":"array"},"response":{"$ref":"#/definitions/ActorsQueryResponse"},"search":{"type":"string"},"select":{"items":{"$ref":"#/definitions/HogQLExpression"},"type":"array"},"source":{"anyOf":[{"$ref":"#/definitions/InsightActorsQuery"},{"$ref":"#/definitions/FunnelsActorsQuery"},{"$ref":"#/definitions/FunnelCorrelationActorsQuery"},{"$ref":"#/definitions/HogQLQuery"}]}},"required":["kind"],"type":"object"},"ActorsQueryResponse":{"additionalProperties":false,"properties":{"columns":{"items":{},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hasMore":{"type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"limit":{"type":"integer"},"missing_actors_count":{"type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"offset":{"type":"integer"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{"items":{},"type":"array"},"type":"array"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"},"types":{"items":{"type":"string"},"type":"array"}},"required":["columns","hogql","limit","offset","results","types"],"type":"object"},"AggregationAxisFormat":{"enum":["numeric","duration","duration_ms","percentage","percentage_scaled"],"type":"string"},"AlertCalculationInterval":{"enum":["hourly","daily","weekly","monthly"],"type":"string"},"AlertCondition":{"additionalProperties":false,"properties":{"type":{"$ref":"#/definitions/AlertConditionType"}},"required":["type"],"type":"object"},"AlertConditionType":{"enum":["absolute_value","relative_increase","relative_decrease"],"type":"string"},"AlertState":{"enum":["Firing","Not firing","Errored","Snoozed"],"type":"string"},"AnyDataNode":{"anyOf":[{"$ref":"#/definitions/EventsNode"},{"$ref":"#/definitions/ActionsNode"},{"$ref":"#/definitions/PersonsNode"},{"$ref":"#/definitions/EventsQuery"},{"$ref":"#/definitions/ActorsQuery"},{"$ref":"#/definitions/InsightActorsQuery"},{"$ref":"#/definitions/InsightActorsQueryOptions"},{"$ref":"#/definitions/SessionsTimelineQuery"},{"$ref":"#/definitions/HogQuery"},{"$ref":"#/definitions/HogQLQuery"},{"$ref":"#/definitions/HogQLMetadata"},{"$ref":"#/definitions/HogQLAutocomplete"},{"$ref":"#/definitions/WebOverviewQuery"},{"$ref":"#/definitions/WebStatsTableQuery"},{"$ref":"#/definitions/WebExternalClicksTableQuery"},{"$ref":"#/definitions/WebTopClicksQuery"},{"$ref":"#/definitions/WebGoalsQuery"},{"$ref":"#/definitions/SessionAttributionExplorerQuery"},{"$ref":"#/definitions/ErrorTrackingQuery"},{"$ref":"#/definitions/ExperimentFunnelsQuery"},{"$ref":"#/definitions/ExperimentTrendsQuery"}]},"AnyEntityNode":{"anyOf":[{"$ref":"#/definitions/EventsNode"},{"$ref":"#/definitions/ActionsNode"},{"$ref":"#/definitions/DataWarehouseNode"}]},"AnyFilterLike":{"anyOf":[{"$ref":"#/definitions/AnyPropertyFilter"},{"$ref":"#/definitions/PropertyGroupFilter"},{"$ref":"#/definitions/PropertyGroupFilterValue"}]},"AnyPersonScopeFilter":{"anyOf":[{"$ref":"#/definitions/PersonPropertyFilter"},{"$ref":"#/definitions/CohortPropertyFilter"},{"$ref":"#/definitions/HogQLPropertyFilter"},{"$ref":"#/definitions/EmptyPropertyFilter"}],"description":"Any filter type supported by `property_to_expr(scope=\\"person\\", ...)`."},"AnyPropertyFilter":{"anyOf":[{"$ref":"#/definitions/EventPropertyFilter"},{"$ref":"#/definitions/PersonPropertyFilter"},{"$ref":"#/definitions/ElementPropertyFilter"},{"$ref":"#/definitions/SessionPropertyFilter"},{"$ref":"#/definitions/CohortPropertyFilter"},{"$ref":"#/definitions/RecordingPropertyFilter"},{"$ref":"#/definitions/LogEntryPropertyFilter"},{"$ref":"#/definitions/GroupPropertyFilter"},{"$ref":"#/definitions/FeaturePropertyFilter"},{"$ref":"#/definitions/HogQLPropertyFilter"},{"$ref":"#/definitions/EmptyPropertyFilter"},{"$ref":"#/definitions/DataWarehousePropertyFilter"},{"$ref":"#/definitions/DataWarehousePersonPropertyFilter"}]},"AnyResponseType":{"anyOf":[{"type":"object"},{"$ref":"#/definitions/HogQueryResponse"},{"$ref":"#/definitions/HogQLQueryResponse"},{"$ref":"#/definitions/HogQLMetadataResponse"},{"$ref":"#/definitions/HogQLAutocompleteResponse"},{"type":"object"},{"not":{}},{"$ref":"#/definitions/EventsQueryResponse"}]},"AssistantMessage":{"additionalProperties":false,"properties":{"content":{"type":"string"},"type":{"const":"ai","type":"string"}},"required":["type","content"],"type":"object"},"AssistantMessageType":{"enum":["human","ai","ai/viz"],"type":"string"},"AutocompleteCompletionItem":{"additionalProperties":false,"properties":{"detail":{"description":"A human-readable string with additional information about this item, like type or symbol information.","type":"string"},"documentation":{"description":"A human-readable string that represents a doc-comment.","type":"string"},"insertText":{"description":"A string or snippet that should be inserted in a document when selecting this completion.","type":"string"},"kind":{"description":"The kind of this completion item. Based on the kind an icon is chosen by the editor.","enum":["Method","Function","Constructor","Field","Variable","Class","Struct","Interface","Module","Property","Event","Operator","Unit","Value","Constant","Enum","EnumMember","Keyword","Text","Color","File","Reference","Customcolor","Folder","TypeParameter","User","Issue","Snippet"],"type":"string"},"label":{"description":"The label of this completion item. By default this is also the text that is inserted when selecting this completion.","type":"string"}},"required":["label","insertText","kind"],"type":"object"},"BaseMathType":{"enum":["total","dau","weekly_active","monthly_active","unique_session","first_time_for_user"],"type":"string"},"BinCountValue":{"anyOf":[{"type":"number"},{"const":"auto","type":"string"}]},"Breakdown":{"additionalProperties":false,"properties":{"group_type_index":{"anyOf":[{"type":"integer"},{"type":"null"}]},"histogram_bin_count":{"type":"integer"},"normalize_url":{"type":"boolean"},"property":{"type":"string"},"type":{"anyOf":[{"$ref":"#/definitions/MultipleBreakdownType"},{"type":"null"}]}},"required":["property"],"type":"object"},"BreakdownAttributionType":{"enum":["first_touch","last_touch","all_events","step"],"type":"string"},"BreakdownFilter":{"additionalProperties":false,"properties":{"breakdown":{"anyOf":[{"type":"string"},{"type":"integer"},{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array"},{"type":"null"}]},"breakdown_group_type_index":{"anyOf":[{"type":"integer"},{"type":"null"}]},"breakdown_hide_other_aggregation":{"type":["boolean","null"]},"breakdown_histogram_bin_count":{"type":"integer"},"breakdown_limit":{"type":"integer"},"breakdown_normalize_url":{"type":"boolean"},"breakdown_type":{"anyOf":[{"$ref":"#/definitions/BreakdownType"},{"type":"null"}],"default":"event"},"breakdowns":{"items":{"$ref":"#/definitions/Breakdown"},"maxLength":3,"type":"array"}},"type":"object"},"BreakdownItem":{"additionalProperties":false,"properties":{"label":{"type":"string"},"value":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/BreakdownValueInt"}]}},"required":["label","value"],"type":"object"},"BreakdownKeyType":{"anyOf":[{"type":"string"},{"type":"number"},{"items":{"type":["string","number"]},"type":"array"},{"type":"null"}]},"BreakdownType":{"enum":["cohort","person","event","group","session","hogql","data_warehouse","data_warehouse_person_property"],"type":"string"},"BreakdownValueInt":{"type":"integer"},"CacheMissResponse":{"additionalProperties":false,"properties":{"cache_key":{"type":["string","null"]},"query_status":{"$ref":"#/definitions/QueryStatus"}},"required":["cache_key"],"type":"object"},"CachedActorsPropertyTaxonomyQueryResponse":{"additionalProperties":false,"properties":{"cache_key":{"type":"string"},"cache_target_age":{"format":"date-time","type":"string"},"calculation_trigger":{"description":"What triggered the calculation of the query, leave empty if user/immediate","type":"string"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hogql":{"description":"Generated HogQL query.","type":"string"},"is_cached":{"type":"boolean"},"last_refresh":{"format":"date-time","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"next_allowed_client_refresh":{"format":"date-time","type":"string"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"$ref":"#/definitions/ActorsPropertyTaxonomyResponse"},"timezone":{"type":"string"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"}},"required":["cache_key","is_cached","last_refresh","next_allowed_client_refresh","results","timezone"],"type":"object"},"CachedActorsQueryResponse":{"additionalProperties":false,"properties":{"cache_key":{"type":"string"},"cache_target_age":{"format":"date-time","type":"string"},"calculation_trigger":{"description":"What triggered the calculation of the query, leave empty if user/immediate","type":"string"},"columns":{"items":{},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hasMore":{"type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"is_cached":{"type":"boolean"},"last_refresh":{"format":"date-time","type":"string"},"limit":{"type":"integer"},"missing_actors_count":{"type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"next_allowed_client_refresh":{"format":"date-time","type":"string"},"offset":{"type":"integer"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{"items":{},"type":"array"},"type":"array"},"timezone":{"type":"string"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"},"types":{"items":{"type":"string"},"type":"array"}},"required":["cache_key","columns","hogql","is_cached","last_refresh","limit","next_allowed_client_refresh","offset","results","timezone","types"],"type":"object"},"CachedErrorTrackingQueryResponse":{"additionalProperties":false,"properties":{"cache_key":{"type":"string"},"cache_target_age":{"format":"date-time","type":"string"},"calculation_trigger":{"description":"What triggered the calculation of the query, leave empty if user/immediate","type":"string"},"columns":{"items":{"type":"string"},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hasMore":{"type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"is_cached":{"type":"boolean"},"last_refresh":{"format":"date-time","type":"string"},"limit":{"type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"next_allowed_client_refresh":{"format":"date-time","type":"string"},"offset":{"type":"integer"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{"$ref":"#/definitions/ErrorTrackingGroup"},"type":"array"},"timezone":{"type":"string"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"}},"required":["cache_key","is_cached","last_refresh","next_allowed_client_refresh","results","timezone"],"type":"object"},"CachedEventTaxonomyQueryResponse":{"additionalProperties":false,"properties":{"cache_key":{"type":"string"},"cache_target_age":{"format":"date-time","type":"string"},"calculation_trigger":{"description":"What triggered the calculation of the query, leave empty if user/immediate","type":"string"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hogql":{"description":"Generated HogQL query.","type":"string"},"is_cached":{"type":"boolean"},"last_refresh":{"format":"date-time","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"next_allowed_client_refresh":{"format":"date-time","type":"string"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"$ref":"#/definitions/EventTaxonomyResponse"},"timezone":{"type":"string"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"}},"required":["cache_key","is_cached","last_refresh","next_allowed_client_refresh","results","timezone"],"type":"object"},"CachedEventsQueryResponse":{"additionalProperties":false,"properties":{"cache_key":{"type":"string"},"cache_target_age":{"format":"date-time","type":"string"},"calculation_trigger":{"description":"What triggered the calculation of the query, leave empty if user/immediate","type":"string"},"columns":{"items":{},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hasMore":{"type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"is_cached":{"type":"boolean"},"last_refresh":{"format":"date-time","type":"string"},"limit":{"type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"next_allowed_client_refresh":{"format":"date-time","type":"string"},"offset":{"type":"integer"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{"items":{},"type":"array"},"type":"array"},"timezone":{"type":"string"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"},"types":{"items":{"type":"string"},"type":"array"}},"required":["cache_key","columns","hogql","is_cached","last_refresh","next_allowed_client_refresh","results","timezone","types"],"type":"object"},"CachedExperimentFunnelsQueryResponse":{"additionalProperties":false,"properties":{"cache_key":{"type":"string"},"cache_target_age":{"format":"date-time","type":"string"},"calculation_trigger":{"description":"What triggered the calculation of the query, leave empty if user/immediate","type":"string"},"credible_intervals":{"additionalProperties":{"items":{"type":"number"},"maxItems":2,"minItems":2,"type":"array"},"type":"object"},"expected_loss":{"type":"number"},"insight":{"$ref":"#/definitions/FunnelsQueryResponse"},"is_cached":{"type":"boolean"},"last_refresh":{"format":"date-time","type":"string"},"next_allowed_client_refresh":{"format":"date-time","type":"string"},"probability":{"additionalProperties":{"type":"number"},"type":"object"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"significance_code":{"$ref":"#/definitions/ExperimentSignificanceCode"},"significant":{"type":"boolean"},"timezone":{"type":"string"},"variants":{"items":{"$ref":"#/definitions/ExperimentVariantFunnelsBaseStats"},"type":"array"}},"required":["cache_key","credible_intervals","expected_loss","insight","is_cached","last_refresh","next_allowed_client_refresh","probability","significance_code","significant","timezone","variants"],"type":"object"},"CachedExperimentTrendsQueryResponse":{"additionalProperties":false,"properties":{"cache_key":{"type":"string"},"cache_target_age":{"format":"date-time","type":"string"},"calculation_trigger":{"description":"What triggered the calculation of the query, leave empty if user/immediate","type":"string"},"credible_intervals":{"additionalProperties":{"items":{"type":"number"},"maxItems":2,"minItems":2,"type":"array"},"type":"object"},"insight":{"$ref":"#/definitions/TrendsQueryResponse"},"is_cached":{"type":"boolean"},"last_refresh":{"format":"date-time","type":"string"},"next_allowed_client_refresh":{"format":"date-time","type":"string"},"p_value":{"type":"number"},"probability":{"additionalProperties":{"type":"number"},"type":"object"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"significance_code":{"$ref":"#/definitions/ExperimentSignificanceCode"},"significant":{"type":"boolean"},"timezone":{"type":"string"},"variants":{"items":{"$ref":"#/definitions/ExperimentVariantTrendsBaseStats"},"type":"array"}},"required":["cache_key","credible_intervals","insight","is_cached","last_refresh","next_allowed_client_refresh","p_value","probability","significance_code","significant","timezone","variants"],"type":"object"},"CachedFunnelCorrelationResponse":{"additionalProperties":false,"properties":{"cache_key":{"type":"string"},"cache_target_age":{"format":"date-time","type":"string"},"calculation_trigger":{"description":"What triggered the calculation of the query, leave empty if user/immediate","type":"string"},"columns":{"items":{},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hasMore":{"type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"is_cached":{"type":"boolean"},"last_refresh":{"format":"date-time","type":"string"},"limit":{"type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"next_allowed_client_refresh":{"format":"date-time","type":"string"},"offset":{"type":"integer"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"$ref":"#/definitions/FunnelCorrelationResult"},"timezone":{"type":"string"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"},"types":{"items":{},"type":"array"}},"required":["cache_key","is_cached","last_refresh","next_allowed_client_refresh","results","timezone"],"type":"object"},"CachedFunnelsQueryResponse":{"additionalProperties":false,"properties":{"cache_key":{"type":"string"},"cache_target_age":{"format":"date-time","type":"string"},"calculation_trigger":{"description":"What triggered the calculation of the query, leave empty if user/immediate","type":"string"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hogql":{"description":"Generated HogQL query.","type":"string"},"isUdf":{"type":"boolean"},"is_cached":{"type":"boolean"},"last_refresh":{"format":"date-time","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"next_allowed_client_refresh":{"format":"date-time","type":"string"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"anyOf":[{"$ref":"#/definitions/FunnelStepsResults"},{"$ref":"#/definitions/FunnelStepsBreakdownResults"},{"$ref":"#/definitions/FunnelTimeToConvertResults"},{"$ref":"#/definitions/FunnelTrendsResults"}]},"timezone":{"type":"string"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"}},"required":["cache_key","is_cached","last_refresh","next_allowed_client_refresh","results","timezone"],"type":"object"},"CachedHogQLQueryResponse":{"additionalProperties":false,"properties":{"cache_key":{"type":"string"},"cache_target_age":{"format":"date-time","type":"string"},"calculation_trigger":{"description":"What triggered the calculation of the query, leave empty if user/immediate","type":"string"},"clickhouse":{"description":"Executed ClickHouse query","type":"string"},"columns":{"description":"Returned columns","items":{},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"explain":{"description":"Query explanation output","items":{"type":"string"},"type":"array"},"hasMore":{"type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"is_cached":{"type":"boolean"},"last_refresh":{"format":"date-time","type":"string"},"limit":{"type":"integer"},"metadata":{"$ref":"#/definitions/HogQLMetadataResponse","description":"Query metadata output"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"next_allowed_client_refresh":{"format":"date-time","type":"string"},"offset":{"type":"integer"},"query":{"description":"Input query string","type":"string"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{},"type":"array"},"timezone":{"type":"string"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"},"types":{"description":"Types of returned columns","items":{},"type":"array"}},"required":["cache_key","is_cached","last_refresh","next_allowed_client_refresh","results","timezone"],"type":"object"},"CachedInsightActorsQueryOptionsResponse":{"additionalProperties":false,"properties":{"breakdown":{"items":{"$ref":"#/definitions/BreakdownItem"},"type":"array"},"breakdowns":{"items":{"$ref":"#/definitions/MultipleBreakdownOptions"},"type":"array"},"cache_key":{"type":"string"},"cache_target_age":{"format":"date-time","type":"string"},"calculation_trigger":{"description":"What triggered the calculation of the query, leave empty if user/immediate","type":"string"},"compare":{"items":{"additionalProperties":false,"properties":{"label":{"type":"string"},"value":{"type":"string"}},"required":["label","value"],"type":"object"},"type":"array"},"day":{"items":{"additionalProperties":false,"properties":{"label":{"type":"string"},"value":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/DatetimeDay"},{"$ref":"#/definitions/Day"}]}},"required":["label","value"],"type":"object"},"type":"array"},"interval":{"items":{"additionalProperties":false,"properties":{"label":{"type":"string"},"value":{"description":"An interval selected out of available intervals in source query","type":"integer"}},"required":["label","value"],"type":"object"},"type":"array"},"is_cached":{"type":"boolean"},"last_refresh":{"format":"date-time","type":"string"},"next_allowed_client_refresh":{"format":"date-time","type":"string"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"series":{"items":{"additionalProperties":false,"properties":{"label":{"type":"string"},"value":{"type":"integer"}},"required":["label","value"],"type":"object"},"type":"array"},"status":{"items":{"additionalProperties":false,"properties":{"label":{"type":"string"},"value":{"type":"string"}},"required":["label","value"],"type":"object"},"type":"array"},"timezone":{"type":"string"}},"required":["cache_key","is_cached","last_refresh","next_allowed_client_refresh","timezone"],"type":"object"},"CachedLifecycleQueryResponse":{"additionalProperties":false,"properties":{"cache_key":{"type":"string"},"cache_target_age":{"format":"date-time","type":"string"},"calculation_trigger":{"description":"What triggered the calculation of the query, leave empty if user/immediate","type":"string"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hogql":{"description":"Generated HogQL query.","type":"string"},"is_cached":{"type":"boolean"},"last_refresh":{"format":"date-time","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"next_allowed_client_refresh":{"format":"date-time","type":"string"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{"type":"object"},"type":"array"},"timezone":{"type":"string"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"}},"required":["cache_key","is_cached","last_refresh","next_allowed_client_refresh","results","timezone"],"type":"object"},"CachedPathsQueryResponse":{"additionalProperties":false,"properties":{"cache_key":{"type":"string"},"cache_target_age":{"format":"date-time","type":"string"},"calculation_trigger":{"description":"What triggered the calculation of the query, leave empty if user/immediate","type":"string"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hogql":{"description":"Generated HogQL query.","type":"string"},"is_cached":{"type":"boolean"},"last_refresh":{"format":"date-time","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"next_allowed_client_refresh":{"format":"date-time","type":"string"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{"type":"object"},"type":"array"},"timezone":{"type":"string"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"}},"required":["cache_key","is_cached","last_refresh","next_allowed_client_refresh","results","timezone"],"type":"object"},"CachedRetentionQueryResponse":{"additionalProperties":false,"properties":{"cache_key":{"type":"string"},"cache_target_age":{"format":"date-time","type":"string"},"calculation_trigger":{"description":"What triggered the calculation of the query, leave empty if user/immediate","type":"string"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hogql":{"description":"Generated HogQL query.","type":"string"},"is_cached":{"type":"boolean"},"last_refresh":{"format":"date-time","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"next_allowed_client_refresh":{"format":"date-time","type":"string"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{"$ref":"#/definitions/RetentionResult"},"type":"array"},"timezone":{"type":"string"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"}},"required":["cache_key","is_cached","last_refresh","next_allowed_client_refresh","results","timezone"],"type":"object"},"CachedSessionAttributionExplorerQueryResponse":{"additionalProperties":false,"properties":{"cache_key":{"type":"string"},"cache_target_age":{"format":"date-time","type":"string"},"calculation_trigger":{"description":"What triggered the calculation of the query, leave empty if user/immediate","type":"string"},"columns":{"items":{},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hasMore":{"type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"is_cached":{"type":"boolean"},"last_refresh":{"format":"date-time","type":"string"},"limit":{"type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"next_allowed_client_refresh":{"format":"date-time","type":"string"},"offset":{"type":"integer"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{},"timezone":{"type":"string"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"},"types":{"items":{},"type":"array"}},"required":["cache_key","is_cached","last_refresh","next_allowed_client_refresh","results","timezone"],"type":"object"},"CachedSessionsTimelineQueryResponse":{"additionalProperties":false,"properties":{"cache_key":{"type":"string"},"cache_target_age":{"format":"date-time","type":"string"},"calculation_trigger":{"description":"What triggered the calculation of the query, leave empty if user/immediate","type":"string"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hasMore":{"type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"is_cached":{"type":"boolean"},"last_refresh":{"format":"date-time","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"next_allowed_client_refresh":{"format":"date-time","type":"string"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{"$ref":"#/definitions/TimelineEntry"},"type":"array"},"timezone":{"type":"string"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"}},"required":["cache_key","is_cached","last_refresh","next_allowed_client_refresh","results","timezone"],"type":"object"},"CachedStickinessQueryResponse":{"additionalProperties":false,"properties":{"cache_key":{"type":"string"},"cache_target_age":{"format":"date-time","type":"string"},"calculation_trigger":{"description":"What triggered the calculation of the query, leave empty if user/immediate","type":"string"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hogql":{"description":"Generated HogQL query.","type":"string"},"is_cached":{"type":"boolean"},"last_refresh":{"format":"date-time","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"next_allowed_client_refresh":{"format":"date-time","type":"string"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{"type":"object"},"type":"array"},"timezone":{"type":"string"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"}},"required":["cache_key","is_cached","last_refresh","next_allowed_client_refresh","results","timezone"],"type":"object"},"CachedSuggestedQuestionsQueryResponse":{"additionalProperties":false,"properties":{"cache_key":{"type":"string"},"cache_target_age":{"format":"date-time","type":"string"},"calculation_trigger":{"description":"What triggered the calculation of the query, leave empty if user/immediate","type":"string"},"is_cached":{"type":"boolean"},"last_refresh":{"format":"date-time","type":"string"},"next_allowed_client_refresh":{"format":"date-time","type":"string"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"questions":{"items":{"type":"string"},"type":"array"},"timezone":{"type":"string"}},"required":["cache_key","is_cached","last_refresh","next_allowed_client_refresh","questions","timezone"],"type":"object"},"CachedTeamTaxonomyQueryResponse":{"additionalProperties":false,"properties":{"cache_key":{"type":"string"},"cache_target_age":{"format":"date-time","type":"string"},"calculation_trigger":{"description":"What triggered the calculation of the query, leave empty if user/immediate","type":"string"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hogql":{"description":"Generated HogQL query.","type":"string"},"is_cached":{"type":"boolean"},"last_refresh":{"format":"date-time","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"next_allowed_client_refresh":{"format":"date-time","type":"string"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"$ref":"#/definitions/TeamTaxonomyResponse"},"timezone":{"type":"string"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"}},"required":["cache_key","is_cached","last_refresh","next_allowed_client_refresh","results","timezone"],"type":"object"},"CachedTrendsQueryResponse":{"additionalProperties":false,"properties":{"cache_key":{"type":"string"},"cache_target_age":{"format":"date-time","type":"string"},"calculation_trigger":{"description":"What triggered the calculation of the query, leave empty if user/immediate","type":"string"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hasMore":{"description":"Wether more breakdown values are available.","type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"is_cached":{"type":"boolean"},"last_refresh":{"format":"date-time","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"next_allowed_client_refresh":{"format":"date-time","type":"string"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{"type":"object"},"type":"array"},"timezone":{"type":"string"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"}},"required":["cache_key","is_cached","last_refresh","next_allowed_client_refresh","results","timezone"],"type":"object"},"CachedWebExternalClicksTableQueryResponse":{"additionalProperties":false,"properties":{"cache_key":{"type":"string"},"cache_target_age":{"format":"date-time","type":"string"},"calculation_trigger":{"description":"What triggered the calculation of the query, leave empty if user/immediate","type":"string"},"columns":{"items":{},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hasMore":{"type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"is_cached":{"type":"boolean"},"last_refresh":{"format":"date-time","type":"string"},"limit":{"type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"next_allowed_client_refresh":{"format":"date-time","type":"string"},"offset":{"type":"integer"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{},"type":"array"},"samplingRate":{"$ref":"#/definitions/SamplingRate"},"timezone":{"type":"string"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"},"types":{"items":{},"type":"array"}},"required":["cache_key","is_cached","last_refresh","next_allowed_client_refresh","results","timezone"],"type":"object"},"CachedWebGoalsQueryResponse":{"additionalProperties":false,"properties":{"cache_key":{"type":"string"},"cache_target_age":{"format":"date-time","type":"string"},"calculation_trigger":{"description":"What triggered the calculation of the query, leave empty if user/immediate","type":"string"},"columns":{"items":{},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hasMore":{"type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"is_cached":{"type":"boolean"},"last_refresh":{"format":"date-time","type":"string"},"limit":{"type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"next_allowed_client_refresh":{"format":"date-time","type":"string"},"offset":{"type":"integer"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{},"type":"array"},"samplingRate":{"$ref":"#/definitions/SamplingRate"},"timezone":{"type":"string"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"},"types":{"items":{},"type":"array"}},"required":["cache_key","is_cached","last_refresh","next_allowed_client_refresh","results","timezone"],"type":"object"},"CachedWebOverviewQueryResponse":{"additionalProperties":false,"properties":{"cache_key":{"type":"string"},"cache_target_age":{"format":"date-time","type":"string"},"calculation_trigger":{"description":"What triggered the calculation of the query, leave empty if user/immediate","type":"string"},"dateFrom":{"type":"string"},"dateTo":{"type":"string"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hogql":{"description":"Generated HogQL query.","type":"string"},"is_cached":{"type":"boolean"},"last_refresh":{"format":"date-time","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"next_allowed_client_refresh":{"format":"date-time","type":"string"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{"$ref":"#/definitions/WebOverviewItem"},"type":"array"},"samplingRate":{"$ref":"#/definitions/SamplingRate"},"timezone":{"type":"string"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"}},"required":["cache_key","is_cached","last_refresh","next_allowed_client_refresh","results","timezone"],"type":"object"},"CachedWebStatsTableQueryResponse":{"additionalProperties":false,"properties":{"cache_key":{"type":"string"},"cache_target_age":{"format":"date-time","type":"string"},"calculation_trigger":{"description":"What triggered the calculation of the query, leave empty if user/immediate","type":"string"},"columns":{"items":{},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hasMore":{"type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"is_cached":{"type":"boolean"},"last_refresh":{"format":"date-time","type":"string"},"limit":{"type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"next_allowed_client_refresh":{"format":"date-time","type":"string"},"offset":{"type":"integer"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{},"type":"array"},"samplingRate":{"$ref":"#/definitions/SamplingRate"},"timezone":{"type":"string"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"},"types":{"items":{},"type":"array"}},"required":["cache_key","is_cached","last_refresh","next_allowed_client_refresh","results","timezone"],"type":"object"},"CachedWebTopClicksQueryResponse":{"additionalProperties":false,"properties":{"cache_key":{"type":"string"},"cache_target_age":{"format":"date-time","type":"string"},"calculation_trigger":{"description":"What triggered the calculation of the query, leave empty if user/immediate","type":"string"},"columns":{"items":{},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hogql":{"description":"Generated HogQL query.","type":"string"},"is_cached":{"type":"boolean"},"last_refresh":{"format":"date-time","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"next_allowed_client_refresh":{"format":"date-time","type":"string"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{},"type":"array"},"samplingRate":{"$ref":"#/definitions/SamplingRate"},"timezone":{"type":"string"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"},"types":{"items":{},"type":"array"}},"required":["cache_key","is_cached","last_refresh","next_allowed_client_refresh","results","timezone"],"type":"object"},"ChartAxis":{"additionalProperties":false,"properties":{"column":{"type":"string"},"settings":{"additionalProperties":false,"properties":{"display":{"$ref":"#/definitions/ChartSettingsDisplay"},"formatting":{"$ref":"#/definitions/ChartSettingsFormatting"}},"type":"object"}},"required":["column"],"type":"object"},"ChartDisplayType":{"enum":["ActionsLineGraph","ActionsBar","ActionsStackedBar","ActionsAreaGraph","ActionsLineGraphCumulative","BoldNumber","ActionsPie","ActionsBarValue","ActionsTable","WorldMap"],"type":"string"},"ChartSettings":{"additionalProperties":false,"properties":{"goalLines":{"items":{"$ref":"#/definitions/GoalLine"},"type":"array"},"leftYAxisSettings":{"$ref":"#/definitions/YAxisSettings"},"rightYAxisSettings":{"$ref":"#/definitions/YAxisSettings"},"stackBars100":{"description":"Whether we fill the bars to 100% in stacked mode","type":"boolean"},"xAxis":{"$ref":"#/definitions/ChartAxis"},"yAxis":{"items":{"$ref":"#/definitions/ChartAxis"},"type":"array"},"yAxisAtZero":{"description":"Deprecated: use `[left|right]YAxisSettings`. Whether the Y axis should start at zero","type":"boolean"}},"type":"object"},"ChartSettingsDisplay":{"additionalProperties":false,"properties":{"displayType":{"enum":["auto","line","bar"],"type":"string"},"label":{"type":"string"},"trendLine":{"type":"boolean"},"yAxisPosition":{"enum":["left","right"],"type":"string"}},"type":"object"},"ChartSettingsFormatting":{"additionalProperties":false,"properties":{"decimalPlaces":{"type":"number"},"prefix":{"type":"string"},"style":{"enum":["none","number","percent"],"type":"string"},"suffix":{"type":"string"}},"type":"object"},"ClickhouseQueryProgress":{"additionalProperties":false,"properties":{"active_cpu_time":{"type":"integer"},"bytes_read":{"type":"integer"},"estimated_rows_total":{"type":"integer"},"rows_read":{"type":"integer"},"time_elapsed":{"type":"integer"}},"required":["bytes_read","rows_read","estimated_rows_total","time_elapsed","active_cpu_time"],"type":"object"},"CohortPropertyFilter":{"additionalProperties":false,"description":"Sync with plugin-server/src/types.ts","properties":{"key":{"const":"id","type":"string"},"label":{"type":"string"},"operator":{"$ref":"#/definitions/PropertyOperator","default":"in"},"type":{"const":"cohort","type":"string"},"value":{"type":"integer"}},"required":["key","operator","type","value"],"type":"object"},"CompareFilter":{"additionalProperties":false,"properties":{"compare":{"type":"boolean"},"compare_to":{"type":"string"}},"type":"object"},"ConditionalFormattingRule":{"additionalProperties":false,"properties":{"bytecode":{"items":{},"type":"array"},"color":{"type":"string"},"colorMode":{"enum":["light","dark"],"type":"string"},"columnName":{"type":"string"},"id":{"type":"string"},"input":{"type":"string"},"templateId":{"type":"string"}},"required":["id","templateId","columnName","bytecode","input","color"],"type":"object"},"CountPerActorMathType":{"enum":["avg_count_per_actor","min_count_per_actor","max_count_per_actor","median_count_per_actor","p90_count_per_actor","p95_count_per_actor","p99_count_per_actor"],"type":"string"},"CustomEventConversionGoal":{"additionalProperties":false,"properties":{"customEventName":{"type":"string"}},"required":["customEventName"],"type":"object"},"DashboardFilter":{"additionalProperties":false,"properties":{"date_from":{"type":["string","null"]},"date_to":{"type":["string","null"]},"properties":{"anyOf":[{"items":{"$ref":"#/definitions/AnyPropertyFilter"},"type":"array"},{"type":"null"}]}},"type":"object"},"DataTableNode":{"additionalProperties":false,"properties":{"allowSorting":{"description":"Can the user click on column headers to sort the table? (default: true)","type":"boolean"},"columns":{"description":"Columns shown in the table, unless the `source` provides them.","items":{"$ref":"#/definitions/HogQLExpression"},"type":"array"},"embedded":{"description":"Uses the embedded version of LemonTable","type":"boolean"},"expandable":{"description":"Can expand row to show raw event data (default: true)","type":"boolean"},"full":{"description":"Show with most visual options enabled. Used in scenes.","type":"boolean"},"hiddenColumns":{"description":"Columns that aren\'t shown in the table, even if in columns or returned data","items":{"$ref":"#/definitions/HogQLExpression"},"type":"array"},"kind":{"const":"DataTableNode","type":"string"},"propertiesViaUrl":{"description":"Link properties via the URL (default: false)","type":"boolean"},"response":{"anyOf":[{"properties":{},"type":"object"},{"additionalProperties":false,"properties":{"columns":{"items":{},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hasMore":{"type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"limit":{"type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"offset":{"type":"integer"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{"items":{},"type":"array"},"type":"array"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"},"types":{"items":{"type":"string"},"type":"array"}},"required":["columns","hogql","results","types"],"type":"object"},{"additionalProperties":false,"properties":{"columns":{"items":{},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hasMore":{"type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"limit":{"type":"integer"},"missing_actors_count":{"type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"offset":{"type":"integer"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{"items":{},"type":"array"},"type":"array"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"},"types":{"items":{"type":"string"},"type":"array"}},"required":["columns","hogql","limit","offset","results","types"],"type":"object"},{"additionalProperties":false,"properties":{"clickhouse":{"description":"Executed ClickHouse query","type":"string"},"columns":{"description":"Returned columns","items":{},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"explain":{"description":"Query explanation output","items":{"type":"string"},"type":"array"},"hasMore":{"type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"limit":{"type":"integer"},"metadata":{"$ref":"#/definitions/HogQLMetadataResponse","description":"Query metadata output"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"offset":{"type":"integer"},"query":{"description":"Input query string","type":"string"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{},"type":"array"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"},"types":{"description":"Types of returned columns","items":{},"type":"array"}},"required":["results"],"type":"object"},{"additionalProperties":false,"properties":{"dateFrom":{"type":"string"},"dateTo":{"type":"string"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hogql":{"description":"Generated HogQL query.","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{"$ref":"#/definitions/WebOverviewItem"},"type":"array"},"samplingRate":{"$ref":"#/definitions/SamplingRate"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"}},"required":["results"],"type":"object"},{"additionalProperties":false,"properties":{"columns":{"items":{},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hasMore":{"type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"limit":{"type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"offset":{"type":"integer"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{},"type":"array"},"samplingRate":{"$ref":"#/definitions/SamplingRate"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"},"types":{"items":{},"type":"array"}},"required":["results"],"type":"object"},{"additionalProperties":false,"properties":{"columns":{"items":{},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hasMore":{"type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"limit":{"type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"offset":{"type":"integer"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{},"type":"array"},"samplingRate":{"$ref":"#/definitions/SamplingRate"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"},"types":{"items":{},"type":"array"}},"required":["results"],"type":"object"},{"additionalProperties":false,"properties":{"columns":{"items":{},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hogql":{"description":"Generated HogQL query.","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{},"type":"array"},"samplingRate":{"$ref":"#/definitions/SamplingRate"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"},"types":{"items":{},"type":"array"}},"required":["results"],"type":"object"},{"additionalProperties":false,"properties":{"columns":{"items":{},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hasMore":{"type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"limit":{"type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"offset":{"type":"integer"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{},"type":"array"},"samplingRate":{"$ref":"#/definitions/SamplingRate"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"},"types":{"items":{},"type":"array"}},"required":["results"],"type":"object"},{"additionalProperties":false,"properties":{"columns":{"items":{},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hasMore":{"type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"limit":{"type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"offset":{"type":"integer"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"},"types":{"items":{},"type":"array"}},"required":["results"],"type":"object"},{"additionalProperties":false,"properties":{"columns":{"items":{"type":"string"},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hasMore":{"type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"limit":{"type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"offset":{"type":"integer"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{"$ref":"#/definitions/ErrorTrackingGroup"},"type":"array"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"}},"required":["results"],"type":"object"},{"additionalProperties":false,"properties":{"credible_intervals":{"additionalProperties":{"items":{"type":"number"},"maxItems":2,"minItems":2,"type":"array"},"type":"object"},"expected_loss":{"type":"number"},"insight":{"$ref":"#/definitions/FunnelsQueryResponse"},"probability":{"additionalProperties":{"type":"number"},"type":"object"},"significance_code":{"$ref":"#/definitions/ExperimentSignificanceCode"},"significant":{"type":"boolean"},"variants":{"items":{"$ref":"#/definitions/ExperimentVariantFunnelsBaseStats"},"type":"array"}},"required":["credible_intervals","expected_loss","insight","probability","significance_code","significant","variants"],"type":"object"},{"additionalProperties":false,"properties":{"credible_intervals":{"additionalProperties":{"items":{"type":"number"},"maxItems":2,"minItems":2,"type":"array"},"type":"object"},"insight":{"$ref":"#/definitions/TrendsQueryResponse"},"p_value":{"type":"number"},"probability":{"additionalProperties":{"type":"number"},"type":"object"},"significance_code":{"$ref":"#/definitions/ExperimentSignificanceCode"},"significant":{"type":"boolean"},"variants":{"items":{"$ref":"#/definitions/ExperimentVariantTrendsBaseStats"},"type":"array"}},"required":["credible_intervals","insight","p_value","probability","significance_code","significant","variants"],"type":"object"}]},"showActions":{"description":"Show the kebab menu at the end of the row","type":"boolean"},"showColumnConfigurator":{"description":"Show a button to configure the table\'s columns if possible","type":"boolean"},"showDateRange":{"description":"Show date range selector","type":"boolean"},"showElapsedTime":{"description":"Show the time it takes to run a query","type":"boolean"},"showEventFilter":{"description":"Include an event filter above the table (EventsNode only)","type":"boolean"},"showExport":{"description":"Show the export button","type":"boolean"},"showHogQLEditor":{"description":"Include a HogQL query editor above HogQL tables","type":"boolean"},"showOpenEditorButton":{"description":"Show a button to open the current query as a new insight. (default: true)","type":"boolean"},"showPersistentColumnConfigurator":{"description":"Show a button to configure and persist the table\'s default columns if possible","type":"boolean"},"showPropertyFilter":{"anyOf":[{"type":"boolean"},{"items":{"$ref":"#/definitions/TaxonomicFilterGroupType"},"type":"array"}],"description":"Include a property filter above the table"},"showReload":{"description":"Show a reload button","type":"boolean"},"showResultsTable":{"description":"Show a results table","type":"boolean"},"showSavedQueries":{"description":"Shows a list of saved queries","type":"boolean"},"showSearch":{"description":"Include a free text search field (PersonsNode only)","type":"boolean"},"showTestAccountFilters":{"description":"Show filter to exclude test accounts","type":"boolean"},"showTimings":{"description":"Show a detailed query timing breakdown","type":"boolean"},"source":{"anyOf":[{"$ref":"#/definitions/EventsNode"},{"$ref":"#/definitions/EventsQuery"},{"$ref":"#/definitions/PersonsNode"},{"$ref":"#/definitions/ActorsQuery"},{"$ref":"#/definitions/HogQLQuery"},{"$ref":"#/definitions/WebOverviewQuery"},{"$ref":"#/definitions/WebStatsTableQuery"},{"$ref":"#/definitions/WebExternalClicksTableQuery"},{"$ref":"#/definitions/WebTopClicksQuery"},{"$ref":"#/definitions/WebGoalsQuery"},{"$ref":"#/definitions/SessionAttributionExplorerQuery"},{"$ref":"#/definitions/ErrorTrackingQuery"},{"$ref":"#/definitions/ExperimentFunnelsQuery"},{"$ref":"#/definitions/ExperimentTrendsQuery"}],"description":"Source of the events"}},"required":["kind","source"],"type":"object"},"DataVisualizationNode":{"additionalProperties":false,"properties":{"chartSettings":{"$ref":"#/definitions/ChartSettings"},"display":{"$ref":"#/definitions/ChartDisplayType"},"kind":{"const":"DataVisualizationNode","type":"string"},"source":{"$ref":"#/definitions/HogQLQuery"},"tableSettings":{"$ref":"#/definitions/TableSettings"}},"required":["kind","source"],"type":"object"},"DataWarehouseEventsModifier":{"additionalProperties":false,"properties":{"distinct_id_field":{"type":"string"},"id_field":{"type":"string"},"table_name":{"type":"string"},"timestamp_field":{"type":"string"}},"required":["table_name","timestamp_field","distinct_id_field","id_field"],"type":"object"},"DataWarehouseNode":{"additionalProperties":false,"properties":{"custom_name":{"type":"string"},"distinct_id_field":{"type":"string"},"fixedProperties":{"description":"Fixed properties in the query, can\'t be edited in the interface (e.g. scoping down by person)","items":{"$ref":"#/definitions/AnyPropertyFilter"},"type":"array"},"id":{"type":"string"},"id_field":{"type":"string"},"kind":{"const":"DataWarehouseNode","type":"string"},"math":{"$ref":"#/definitions/MathType"},"math_group_type_index":{"enum":[0,1,2,3,4],"type":"number"},"math_hogql":{"type":"string"},"math_property":{"type":"string"},"math_property_type":{"type":"string"},"name":{"type":"string"},"properties":{"description":"Properties configurable in the interface","items":{"$ref":"#/definitions/AnyPropertyFilter"},"type":"array"},"response":{"type":"object"},"table_name":{"type":"string"},"timestamp_field":{"type":"string"}},"required":["distinct_id_field","id","id_field","kind","table_name","timestamp_field"],"type":"object"},"DataWarehousePersonPropertyFilter":{"additionalProperties":false,"properties":{"key":{"type":"string"},"label":{"type":"string"},"operator":{"$ref":"#/definitions/PropertyOperator"},"type":{"const":"data_warehouse_person_property","type":"string"},"value":{"$ref":"#/definitions/PropertyFilterValue"}},"required":["key","operator","type"],"type":"object"},"DataWarehousePropertyFilter":{"additionalProperties":false,"properties":{"key":{"type":"string"},"label":{"type":"string"},"operator":{"$ref":"#/definitions/PropertyOperator"},"type":{"const":"data_warehouse","type":"string"},"value":{"$ref":"#/definitions/PropertyFilterValue"}},"required":["key","operator","type"],"type":"object"},"DatabaseSchemaBatchExportTable":{"additionalProperties":false,"properties":{"fields":{"additionalProperties":{"$ref":"#/definitions/DatabaseSchemaField"},"type":"object"},"id":{"type":"string"},"name":{"type":"string"},"type":{"const":"batch_export","type":"string"}},"required":["fields","id","name","type"],"type":"object"},"DatabaseSchemaDataWarehouseTable":{"additionalProperties":false,"properties":{"fields":{"additionalProperties":{"$ref":"#/definitions/DatabaseSchemaField"},"type":"object"},"format":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"},"schema":{"$ref":"#/definitions/DatabaseSchemaSchema"},"source":{"$ref":"#/definitions/DatabaseSchemaSource"},"type":{"const":"data_warehouse","type":"string"},"url_pattern":{"type":"string"}},"required":["fields","format","id","name","type","url_pattern"],"type":"object"},"DatabaseSchemaField":{"additionalProperties":false,"properties":{"chain":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array"},"fields":{"items":{"type":"string"},"type":"array"},"hogql_value":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"},"schema_valid":{"type":"boolean"},"table":{"type":"string"},"type":{"$ref":"#/definitions/DatabaseSerializedFieldType"}},"required":["name","hogql_value","type","schema_valid"],"type":"object"},"DatabaseSchemaMaterializedViewTable":{"additionalProperties":false,"properties":{"fields":{"additionalProperties":{"$ref":"#/definitions/DatabaseSchemaField"},"type":"object"},"id":{"type":"string"},"last_run_at":{"type":"string"},"name":{"type":"string"},"query":{"$ref":"#/definitions/HogQLQuery"},"status":{"type":"string"},"type":{"const":"materialized_view","type":"string"}},"required":["fields","id","name","query","type"],"type":"object"},"DatabaseSchemaPostHogTable":{"additionalProperties":false,"properties":{"fields":{"additionalProperties":{"$ref":"#/definitions/DatabaseSchemaField"},"type":"object"},"id":{"type":"string"},"name":{"type":"string"},"type":{"const":"posthog","type":"string"}},"required":["fields","id","name","type"],"type":"object"},"DatabaseSchemaQuery":{"additionalProperties":false,"properties":{"kind":{"const":"DatabaseSchemaQuery","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"response":{"$ref":"#/definitions/DatabaseSchemaQueryResponse"}},"required":["kind"],"type":"object"},"DatabaseSchemaQueryResponse":{"additionalProperties":false,"properties":{"tables":{"additionalProperties":{"$ref":"#/definitions/DatabaseSchemaTable"},"type":"object"}},"required":["tables"],"type":"object"},"DatabaseSchemaSchema":{"additionalProperties":false,"properties":{"id":{"type":"string"},"incremental":{"type":"boolean"},"last_synced_at":{"type":"string"},"name":{"type":"string"},"should_sync":{"type":"boolean"},"status":{"type":"string"}},"required":["id","name","should_sync","incremental"],"type":"object"},"DatabaseSchemaSource":{"additionalProperties":false,"properties":{"id":{"type":"string"},"last_synced_at":{"type":"string"},"prefix":{"type":"string"},"source_type":{"type":"string"},"status":{"type":"string"}},"required":["id","status","source_type","prefix"],"type":"object"},"DatabaseSchemaTable":{"anyOf":[{"$ref":"#/definitions/DatabaseSchemaPostHogTable"},{"$ref":"#/definitions/DatabaseSchemaDataWarehouseTable"},{"$ref":"#/definitions/DatabaseSchemaViewTable"},{"$ref":"#/definitions/DatabaseSchemaBatchExportTable"},{"$ref":"#/definitions/DatabaseSchemaMaterializedViewTable"}]},"DatabaseSchemaTableCommon":{"additionalProperties":false,"properties":{"fields":{"additionalProperties":{"$ref":"#/definitions/DatabaseSchemaField"},"type":"object"},"id":{"type":"string"},"name":{"type":"string"},"type":{"enum":["posthog","data_warehouse","view","batch_export","materialized_view"],"type":"string"}},"required":["type","id","name","fields"],"type":"object"},"DatabaseSchemaViewTable":{"additionalProperties":false,"properties":{"fields":{"additionalProperties":{"$ref":"#/definitions/DatabaseSchemaField"},"type":"object"},"id":{"type":"string"},"name":{"type":"string"},"query":{"$ref":"#/definitions/HogQLQuery"},"type":{"const":"view","type":"string"}},"required":["fields","id","name","query","type"],"type":"object"},"DatabaseSerializedFieldType":{"enum":["integer","float","string","datetime","date","boolean","array","json","lazy_table","virtual_table","field_traverser","expression","view","materialized_view"],"type":"string"},"DateRange":{"additionalProperties":false,"properties":{"date_from":{"type":["string","null"]},"date_to":{"type":["string","null"]},"explicitDate":{"default":false,"description":"Whether the date_from and date_to should be used verbatim. Disables rounding to the start and end of period.","type":["boolean","null"]}},"type":"object"},"DatetimeDay":{"format":"date-time","type":"string"},"Day":{"type":"integer"},"DurationType":{"enum":["duration","active_seconds","inactive_seconds"],"type":"string"},"ElementPropertyFilter":{"additionalProperties":false,"description":"Sync with plugin-server/src/types.ts","properties":{"key":{"enum":["tag_name","text","href","selector"],"type":"string"},"label":{"type":"string"},"operator":{"$ref":"#/definitions/PropertyOperator"},"type":{"const":"element","type":"string"},"value":{"$ref":"#/definitions/PropertyFilterValue"}},"required":["key","operator","type"],"type":"object"},"ElementType":{"additionalProperties":false,"properties":{"attr_class":{"items":{"type":"string"},"type":"array"},"attr_id":{"type":"string"},"attributes":{"additionalProperties":{"type":"string"},"type":"object"},"href":{"type":"string"},"nth_child":{"type":"number"},"nth_of_type":{"type":"number"},"order":{"type":"number"},"tag_name":{"type":"string"},"text":{"type":"string"}},"required":["attributes","tag_name"],"type":"object"},"EmptyPropertyFilter":{"additionalProperties":false,"type":"object"},"EntityNode":{"additionalProperties":false,"properties":{"custom_name":{"type":"string"},"fixedProperties":{"description":"Fixed properties in the query, can\'t be edited in the interface (e.g. scoping down by person)","items":{"$ref":"#/definitions/AnyPropertyFilter"},"type":"array"},"kind":{"$ref":"#/definitions/NodeKind"},"math":{"$ref":"#/definitions/MathType"},"math_group_type_index":{"enum":[0,1,2,3,4],"type":"number"},"math_hogql":{"type":"string"},"math_property":{"type":"string"},"math_property_type":{"type":"string"},"name":{"type":"string"},"properties":{"description":"Properties configurable in the interface","items":{"$ref":"#/definitions/AnyPropertyFilter"},"type":"array"},"response":{"type":"object"}},"required":["kind"],"type":"object"},"EntityType":{"enum":["actions","events","data_warehouse","new_entity"],"type":"string"},"ErrorTrackingGroup":{"additionalProperties":false,"properties":{"assignee":{"type":["number","null"]},"description":{"type":["string","null"]},"exception_type":{"type":["string","null"]},"fingerprint":{"items":{"type":"string"},"type":"array"},"first_seen":{"format":"date-time","type":"string"},"last_seen":{"format":"date-time","type":"string"},"merged_fingerprints":{"items":{"items":{"type":"string"},"type":"array"},"type":"array"},"occurrences":{"type":"number"},"sessions":{"type":"number"},"status":{"enum":["archived","active","resolved","pending_release"],"type":"string"},"users":{"type":"number"},"volume":{}},"required":["fingerprint","exception_type","merged_fingerprints","occurrences","sessions","users","description","first_seen","last_seen","assignee","status"],"type":"object"},"ErrorTrackingQuery":{"additionalProperties":false,"properties":{"assignee":{"anyOf":[{"type":"integer"},{"type":"null"}]},"dateRange":{"$ref":"#/definitions/DateRange"},"filterGroup":{"$ref":"#/definitions/PropertyGroupFilter"},"filterTestAccounts":{"type":"boolean"},"fingerprint":{"items":{"type":"string"},"type":"array"},"kind":{"const":"ErrorTrackingQuery","type":"string"},"limit":{"type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"order":{"enum":["last_seen","first_seen","occurrences","users","sessions"],"type":"string"},"response":{"$ref":"#/definitions/ErrorTrackingQueryResponse"},"searchQuery":{"type":"string"},"select":{"items":{"$ref":"#/definitions/HogQLExpression"},"type":"array"}},"required":["dateRange","kind"],"type":"object"},"ErrorTrackingQueryResponse":{"additionalProperties":false,"properties":{"columns":{"items":{"type":"string"},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hasMore":{"type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"limit":{"type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"offset":{"type":"integer"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{"$ref":"#/definitions/ErrorTrackingGroup"},"type":"array"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"}},"required":["results"],"type":"object"},"EventDefinition":{"additionalProperties":false,"properties":{"elements":{"items":{},"type":"array"},"event":{"type":"string"},"properties":{"type":"object"}},"required":["event","properties","elements"],"type":"object"},"EventOddsRatioSerialized":{"additionalProperties":false,"properties":{"correlation_type":{"enum":["success","failure"],"type":"string"},"event":{"$ref":"#/definitions/EventDefinition"},"failure_count":{"type":"integer"},"odds_ratio":{"type":"number"},"success_count":{"type":"integer"}},"required":["event","success_count","failure_count","odds_ratio","correlation_type"],"type":"object"},"EventPropertyFilter":{"additionalProperties":false,"description":"Sync with plugin-server/src/types.ts","properties":{"key":{"type":"string"},"label":{"type":"string"},"operator":{"$ref":"#/definitions/PropertyOperator","default":"exact"},"type":{"const":"event","description":"Event properties","type":"string"},"value":{"$ref":"#/definitions/PropertyFilterValue"}},"required":["key","operator","type"],"type":"object"},"EventTaxonomyItem":{"additionalProperties":false,"properties":{"property":{"type":"string"},"sample_count":{"type":"integer"},"sample_values":{"items":{"type":"string"},"type":"array"}},"required":["property","sample_values","sample_count"],"type":"object"},"EventTaxonomyQuery":{"additionalProperties":false,"properties":{"event":{"type":"string"},"kind":{"const":"EventTaxonomyQuery","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"response":{"$ref":"#/definitions/EventTaxonomyQueryResponse"}},"required":["event","kind"],"type":"object"},"EventTaxonomyQueryResponse":{"additionalProperties":false,"description":"All analytics query responses must inherit from this.","properties":{"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hogql":{"description":"Generated HogQL query.","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"$ref":"#/definitions/EventTaxonomyResponse"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"}},"required":["results"],"type":"object"},"EventTaxonomyResponse":{"items":{"$ref":"#/definitions/EventTaxonomyItem"},"type":"array"},"EventType":{"additionalProperties":false,"properties":{"distinct_id":{"type":"string"},"elements":{"items":{"$ref":"#/definitions/ElementType"},"type":"array"},"elements_chain":{"type":["string","null"]},"event":{"type":"string"},"id":{"type":"string"},"person":{"additionalProperties":false,"properties":{"distinct_ids":{"items":{"type":"string"},"type":"array"},"is_identified":{"type":"boolean"},"properties":{"type":"object"}},"required":["distinct_ids","properties"],"type":"object"},"properties":{"type":"object"},"timestamp":{"type":"string"},"uuid":{"type":"string"}},"required":["id","distinct_id","properties","event","timestamp","elements"],"type":"object"},"EventsNode":{"additionalProperties":false,"properties":{"custom_name":{"type":"string"},"event":{"description":"The event or `null` for all events.","type":["string","null"]},"fixedProperties":{"description":"Fixed properties in the query, can\'t be edited in the interface (e.g. scoping down by person)","items":{"$ref":"#/definitions/AnyPropertyFilter"},"type":"array"},"kind":{"const":"EventsNode","type":"string"},"limit":{"type":"integer"},"math":{"$ref":"#/definitions/MathType"},"math_group_type_index":{"enum":[0,1,2,3,4],"type":"number"},"math_hogql":{"type":"string"},"math_property":{"type":"string"},"math_property_type":{"type":"string"},"name":{"type":"string"},"orderBy":{"description":"Columns to order by","items":{"type":"string"},"type":"array"},"properties":{"description":"Properties configurable in the interface","items":{"$ref":"#/definitions/AnyPropertyFilter"},"type":"array"},"response":{"type":"object"}},"required":["kind"],"type":"object"},"EventsQuery":{"additionalProperties":false,"properties":{"actionId":{"description":"Show events matching a given action","type":"integer"},"after":{"description":"Only fetch events that happened after this timestamp","type":"string"},"before":{"description":"Only fetch events that happened before this timestamp","type":"string"},"event":{"description":"Limit to events matching this string","type":["string","null"]},"filterTestAccounts":{"description":"Filter test accounts","type":"boolean"},"fixedProperties":{"description":"Fixed properties in the query, can\'t be edited in the interface (e.g. scoping down by person)","items":{"$ref":"#/definitions/AnyFilterLike"},"type":"array"},"kind":{"const":"EventsQuery","type":"string"},"limit":{"description":"Number of rows to return","type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"offset":{"description":"Number of rows to skip before returning rows","type":"integer"},"orderBy":{"description":"Columns to order by","items":{"type":"string"},"type":"array"},"personId":{"description":"Show events for a given person","type":"string"},"properties":{"description":"Properties configurable in the interface","items":{"$ref":"#/definitions/AnyPropertyFilter"},"type":"array"},"response":{"$ref":"#/definitions/EventsQueryResponse"},"select":{"description":"Return a limited set of data. Required.","items":{"$ref":"#/definitions/HogQLExpression"},"type":"array"},"where":{"description":"HogQL filters to apply on returned data","items":{"$ref":"#/definitions/HogQLExpression"},"type":"array"}},"required":["kind","select"],"type":"object"},"EventsQueryPersonColumn":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"distinct_id":{"type":"string"},"properties":{"additionalProperties":false,"properties":{"email":{"type":"string"},"name":{"type":"string"}},"type":"object"},"uuid":{"type":"string"}},"required":["uuid","created_at","properties","distinct_id"],"type":"object"},"EventsQueryResponse":{"additionalProperties":false,"properties":{"columns":{"items":{},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hasMore":{"type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"limit":{"type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"offset":{"type":"integer"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{"items":{},"type":"array"},"type":"array"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"},"types":{"items":{"type":"string"},"type":"array"}},"required":["columns","hogql","results","types"],"type":"object"},"ExperimentFunnelsQuery":{"additionalProperties":false,"properties":{"experiment_id":{"type":"integer"},"kind":{"const":"ExperimentFunnelsQuery","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"response":{"$ref":"#/definitions/ExperimentFunnelsQueryResponse"},"source":{"$ref":"#/definitions/FunnelsQuery"}},"required":["experiment_id","kind","source"],"type":"object"},"ExperimentFunnelsQueryResponse":{"additionalProperties":false,"properties":{"credible_intervals":{"additionalProperties":{"items":{"type":"number"},"maxItems":2,"minItems":2,"type":"array"},"type":"object"},"expected_loss":{"type":"number"},"insight":{"$ref":"#/definitions/FunnelsQueryResponse"},"probability":{"additionalProperties":{"type":"number"},"type":"object"},"significance_code":{"$ref":"#/definitions/ExperimentSignificanceCode"},"significant":{"type":"boolean"},"variants":{"items":{"$ref":"#/definitions/ExperimentVariantFunnelsBaseStats"},"type":"array"}},"required":["insight","variants","probability","significant","significance_code","expected_loss","credible_intervals"],"type":"object"},"ExperimentSignificanceCode":{"enum":["significant","not_enough_exposure","low_win_probability","high_loss","high_p_value"],"type":"string"},"ExperimentTrendsQuery":{"additionalProperties":false,"properties":{"count_query":{"$ref":"#/definitions/TrendsQuery"},"experiment_id":{"type":"integer"},"exposure_query":{"$ref":"#/definitions/TrendsQuery"},"kind":{"const":"ExperimentTrendsQuery","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"response":{"$ref":"#/definitions/ExperimentTrendsQueryResponse"}},"required":["count_query","experiment_id","kind"],"type":"object"},"ExperimentTrendsQueryResponse":{"additionalProperties":false,"properties":{"credible_intervals":{"additionalProperties":{"items":{"type":"number"},"maxItems":2,"minItems":2,"type":"array"},"type":"object"},"insight":{"$ref":"#/definitions/TrendsQueryResponse"},"p_value":{"type":"number"},"probability":{"additionalProperties":{"type":"number"},"type":"object"},"significance_code":{"$ref":"#/definitions/ExperimentSignificanceCode"},"significant":{"type":"boolean"},"variants":{"items":{"$ref":"#/definitions/ExperimentVariantTrendsBaseStats"},"type":"array"}},"required":["insight","variants","probability","significant","significance_code","p_value","credible_intervals"],"type":"object"},"ExperimentVariantFunnelsBaseStats":{"additionalProperties":false,"properties":{"failure_count":{"type":"number"},"key":{"type":"string"},"success_count":{"type":"number"}},"required":["key","success_count","failure_count"],"type":"object"},"ExperimentVariantTrendsBaseStats":{"additionalProperties":false,"properties":{"absolute_exposure":{"type":"number"},"count":{"type":"number"},"exposure":{"type":"number"},"key":{"type":"string"}},"required":["key","count","exposure","absolute_exposure"],"type":"object"},"ExperimentalAITrendsQuery":{"additionalProperties":false,"properties":{"aggregation_group_type_index":{"description":"Groups aggregation","type":"integer"},"breakdownFilter":{"additionalProperties":false,"description":"Breakdown of the events and actions","properties":{"breakdown_hide_other_aggregation":{"type":["boolean","null"]},"breakdown_histogram_bin_count":{"type":"integer"},"breakdown_limit":{"type":"integer"},"breakdowns":{"items":{"$ref":"#/definitions/Breakdown"},"maxLength":3,"type":"array"}},"type":"object"},"compareFilter":{"$ref":"#/definitions/CompareFilter","description":"Compare to date range"},"dateRange":{"$ref":"#/definitions/InsightDateRange","description":"Date range for the query"},"filterTestAccounts":{"default":false,"description":"Exclude internal and test users by applying the respective filters","type":"boolean"},"interval":{"$ref":"#/definitions/IntervalType","default":"day","description":"Granularity of the response. Can be one of `hour`, `day`, `week` or `month`"},"kind":{"const":"TrendsQuery","type":"string"},"properties":{"default":[],"description":"Property filters for all series","items":{"$ref":"#/definitions/AIPropertyFilter"},"type":"array"},"samplingFactor":{"description":"Sampling rate","type":["number","null"]},"series":{"description":"Events and actions to include","items":{"anyOf":[{"$ref":"#/definitions/AIEventsNode"},{"$ref":"#/definitions/AIActionsNode"}]},"type":"array"},"trendsFilter":{"$ref":"#/definitions/TrendsFilter","description":"Properties specific to the trends insight"}},"required":["kind","series"],"type":"object"},"FeaturePropertyFilter":{"additionalProperties":false,"properties":{"key":{"type":"string"},"label":{"type":"string"},"operator":{"$ref":"#/definitions/PropertyOperator"},"type":{"const":"feature","description":"Event property with \\"$feature/\\" prepended","type":"string"},"value":{"$ref":"#/definitions/PropertyFilterValue"}},"required":["key","operator","type"],"type":"object"},"FilterLogicalOperator":{"enum":["AND","OR"],"type":"string"},"FunnelConversionWindowTimeUnit":{"enum":["second","minute","hour","day","week","month"],"type":"string"},"FunnelCorrelationActorsQuery":{"additionalProperties":false,"properties":{"funnelCorrelationPersonConverted":{"type":"boolean"},"funnelCorrelationPersonEntity":{"$ref":"#/definitions/AnyEntityNode"},"funnelCorrelationPropertyValues":{"items":{"$ref":"#/definitions/AnyPropertyFilter"},"type":"array"},"includeRecordings":{"type":"boolean"},"kind":{"const":"FunnelCorrelationActorsQuery","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"response":{"$ref":"#/definitions/ActorsQueryResponse"},"source":{"$ref":"#/definitions/FunnelCorrelationQuery"}},"required":["kind","source"],"type":"object"},"FunnelCorrelationQuery":{"additionalProperties":false,"properties":{"funnelCorrelationEventExcludePropertyNames":{"items":{"type":"string"},"type":"array"},"funnelCorrelationEventNames":{"items":{"type":"string"},"type":"array"},"funnelCorrelationExcludeEventNames":{"items":{"type":"string"},"type":"array"},"funnelCorrelationExcludeNames":{"items":{"type":"string"},"type":"array"},"funnelCorrelationNames":{"items":{"type":"string"},"type":"array"},"funnelCorrelationType":{"$ref":"#/definitions/FunnelCorrelationResultsType"},"kind":{"const":"FunnelCorrelationQuery","type":"string"},"response":{"$ref":"#/definitions/FunnelCorrelationResponse"},"source":{"$ref":"#/definitions/FunnelsActorsQuery"}},"required":["funnelCorrelationType","kind","source"],"type":"object"},"FunnelCorrelationResponse":{"additionalProperties":false,"properties":{"columns":{"items":{},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hasMore":{"type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"limit":{"type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"offset":{"type":"integer"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"$ref":"#/definitions/FunnelCorrelationResult"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"},"types":{"items":{},"type":"array"}},"required":["results"],"type":"object"},"FunnelCorrelationResult":{"additionalProperties":false,"properties":{"events":{"items":{"$ref":"#/definitions/EventOddsRatioSerialized"},"type":"array"},"skewed":{"type":"boolean"}},"required":["events","skewed"],"type":"object"},"FunnelCorrelationResultsType":{"enum":["events","properties","event_with_properties"],"type":"string"},"FunnelExclusion":{"anyOf":[{"$ref":"#/definitions/FunnelExclusionEventsNode"},{"$ref":"#/definitions/FunnelExclusionActionsNode"}]},"FunnelExclusionActionsNode":{"additionalProperties":false,"properties":{"custom_name":{"type":"string"},"fixedProperties":{"description":"Fixed properties in the query, can\'t be edited in the interface (e.g. scoping down by person)","items":{"$ref":"#/definitions/AnyPropertyFilter"},"type":"array"},"funnelFromStep":{"type":"integer"},"funnelToStep":{"type":"integer"},"id":{"type":"integer"},"kind":{"const":"ActionsNode","type":"string"},"math":{"$ref":"#/definitions/MathType"},"math_group_type_index":{"enum":[0,1,2,3,4],"type":"number"},"math_hogql":{"type":"string"},"math_property":{"type":"string"},"math_property_type":{"type":"string"},"name":{"type":"string"},"properties":{"description":"Properties configurable in the interface","items":{"$ref":"#/definitions/AnyPropertyFilter"},"type":"array"},"response":{"type":"object"}},"required":["funnelFromStep","funnelToStep","id","kind"],"type":"object"},"FunnelExclusionEventsNode":{"additionalProperties":false,"properties":{"custom_name":{"type":"string"},"event":{"description":"The event or `null` for all events.","type":["string","null"]},"fixedProperties":{"description":"Fixed properties in the query, can\'t be edited in the interface (e.g. scoping down by person)","items":{"$ref":"#/definitions/AnyPropertyFilter"},"type":"array"},"funnelFromStep":{"type":"integer"},"funnelToStep":{"type":"integer"},"kind":{"const":"EventsNode","type":"string"},"limit":{"type":"integer"},"math":{"$ref":"#/definitions/MathType"},"math_group_type_index":{"enum":[0,1,2,3,4],"type":"number"},"math_hogql":{"type":"string"},"math_property":{"type":"string"},"math_property_type":{"type":"string"},"name":{"type":"string"},"orderBy":{"description":"Columns to order by","items":{"type":"string"},"type":"array"},"properties":{"description":"Properties configurable in the interface","items":{"$ref":"#/definitions/AnyPropertyFilter"},"type":"array"},"response":{"type":"object"}},"required":["funnelFromStep","funnelToStep","kind"],"type":"object"},"FunnelExclusionLegacy":{"additionalProperties":false,"properties":{"custom_name":{"type":["string","null"]},"funnel_from_step":{"type":"number"},"funnel_to_step":{"type":"number"},"id":{"type":["string","number","null"]},"index":{"type":"number"},"name":{"type":["string","null"]},"order":{"type":"number"},"type":{"$ref":"#/definitions/EntityType"}},"required":["funnel_from_step","funnel_to_step"],"type":"object"},"FunnelExclusionSteps":{"additionalProperties":false,"properties":{"funnelFromStep":{"type":"integer"},"funnelToStep":{"type":"integer"}},"required":["funnelFromStep","funnelToStep"],"type":"object"},"FunnelLayout":{"enum":["horizontal","vertical"],"type":"string"},"FunnelMathType":{"enum":["total","first_time_for_user","first_time_for_user_with_filters"],"type":"string"},"FunnelPathType":{"enum":["funnel_path_before_step","funnel_path_between_steps","funnel_path_after_step"],"type":"string"},"FunnelPathsFilter":{"additionalProperties":false,"properties":{"funnelPathType":{"$ref":"#/definitions/FunnelPathType"},"funnelSource":{"$ref":"#/definitions/FunnelsQuery"},"funnelStep":{"type":"integer"}},"required":["funnelSource"],"type":"object"},"FunnelStepReference":{"enum":["total","previous"],"type":"string"},"FunnelStepsBreakdownResults":{"items":{"items":{"type":"object"},"type":"array"},"type":"array"},"FunnelStepsResults":{"items":{"type":"object"},"type":"array"},"FunnelTimeToConvertResults":{"additionalProperties":false,"properties":{"average_conversion_time":{"type":["number","null"]},"bins":{"items":{"items":{"type":"integer"},"maxItems":2,"minItems":2,"type":"array"},"type":"array"}},"required":["average_conversion_time","bins"],"type":"object"},"FunnelTrendsResults":{"items":{"type":"object"},"type":"array"},"FunnelVizType":{"enum":["steps","time_to_convert","trends"],"type":"string"},"FunnelsActorsQuery":{"additionalProperties":false,"properties":{"funnelCustomSteps":{"description":"Custom step numbers to get persons for. This overrides `funnelStep`. Primarily for correlation use.","items":{"type":"integer"},"type":"array"},"funnelStep":{"description":"Index of the step for which we want to get the timestamp for, per person. Positive for converted persons, negative for dropped of persons.","type":"integer"},"funnelStepBreakdown":{"$ref":"#/definitions/BreakdownKeyType","description":"The breakdown value for which to get persons for. This is an array for person and event properties, a string for groups and an integer for cohorts."},"funnelTrendsDropOff":{"type":"boolean"},"funnelTrendsEntrancePeriodStart":{"description":"Used together with `funnelTrendsDropOff` for funnels time conversion date for the persons modal.","type":"string"},"includeRecordings":{"type":"boolean"},"kind":{"const":"FunnelsActorsQuery","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"response":{"$ref":"#/definitions/ActorsQueryResponse"},"source":{"$ref":"#/definitions/FunnelsQuery"}},"required":["kind","source"],"type":"object"},"FunnelsFilter":{"additionalProperties":false,"properties":{"binCount":{"type":"integer"},"breakdownAttributionType":{"$ref":"#/definitions/BreakdownAttributionType","default":"first_touch"},"breakdownAttributionValue":{"type":"integer"},"exclusions":{"default":[],"items":{"$ref":"#/definitions/FunnelExclusion"},"type":"array"},"funnelAggregateByHogQL":{"type":"string"},"funnelFromStep":{"type":"integer"},"funnelOrderType":{"$ref":"#/definitions/StepOrderValue","default":"ordered"},"funnelStepReference":{"$ref":"#/definitions/FunnelStepReference","default":"total"},"funnelToStep":{"type":"integer"},"funnelVizType":{"$ref":"#/definitions/FunnelVizType","default":"steps"},"funnelWindowInterval":{"default":14,"type":"integer"},"funnelWindowIntervalUnit":{"$ref":"#/definitions/FunnelConversionWindowTimeUnit","default":"day"},"hiddenLegendBreakdowns":{"items":{"type":"string"},"type":"array"},"layout":{"$ref":"#/definitions/FunnelLayout","default":"vertical"},"useUdf":{"type":"boolean"}},"type":"object"},"FunnelsFilterLegacy":{"additionalProperties":false,"description":"`FunnelsFilterType` minus everything inherited from `FilterType` and persons modal related params","properties":{"bin_count":{"$ref":"#/definitions/BinCountValue"},"breakdown_attribution_type":{"$ref":"#/definitions/BreakdownAttributionType"},"breakdown_attribution_value":{"type":"number"},"exclusions":{"items":{"$ref":"#/definitions/FunnelExclusionLegacy"},"type":"array"},"funnel_aggregate_by_hogql":{"type":"string"},"funnel_from_step":{"type":"number"},"funnel_order_type":{"$ref":"#/definitions/StepOrderValue"},"funnel_step_reference":{"$ref":"#/definitions/FunnelStepReference"},"funnel_to_step":{"type":"number"},"funnel_viz_type":{"$ref":"#/definitions/FunnelVizType"},"funnel_window_interval":{"type":"number"},"funnel_window_interval_unit":{"$ref":"#/definitions/FunnelConversionWindowTimeUnit"},"hidden_legend_keys":{"additionalProperties":{"anyOf":[{"type":"boolean"},{"not":{}}]},"type":"object"},"layout":{"$ref":"#/definitions/FunnelLayout"}},"type":"object"},"FunnelsQuery":{"additionalProperties":false,"properties":{"aggregation_group_type_index":{"description":"Groups aggregation","type":"integer"},"breakdownFilter":{"$ref":"#/definitions/BreakdownFilter","description":"Breakdown of the events and actions"},"dateRange":{"$ref":"#/definitions/InsightDateRange","description":"Date range for the query"},"filterTestAccounts":{"default":false,"description":"Exclude internal and test users by applying the respective filters","type":"boolean"},"funnelsFilter":{"$ref":"#/definitions/FunnelsFilter","description":"Properties specific to the funnels insight"},"interval":{"$ref":"#/definitions/IntervalType","description":"Granularity of the response. Can be one of `hour`, `day`, `week` or `month`"},"kind":{"const":"FunnelsQuery","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"properties":{"anyOf":[{"items":{"$ref":"#/definitions/AnyPropertyFilter"},"type":"array"},{"$ref":"#/definitions/PropertyGroupFilter"}],"default":[],"description":"Property filters for all series"},"response":{"$ref":"#/definitions/FunnelsQueryResponse"},"samplingFactor":{"description":"Sampling rate","type":["number","null"]},"series":{"description":"Events and actions to include","items":{"$ref":"#/definitions/AnyEntityNode"},"type":"array"}},"required":["kind","series"],"type":"object"},"FunnelsQueryResponse":{"additionalProperties":false,"properties":{"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hogql":{"description":"Generated HogQL query.","type":"string"},"isUdf":{"type":"boolean"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"anyOf":[{"$ref":"#/definitions/FunnelStepsResults"},{"$ref":"#/definitions/FunnelStepsBreakdownResults"},{"$ref":"#/definitions/FunnelTimeToConvertResults"},{"$ref":"#/definitions/FunnelTrendsResults"}]},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"}},"required":["results"],"type":"object"},"GenericCachedQueryResponse":{"properties":{"cache_key":{"type":"string"},"cache_target_age":{"format":"date-time","type":"string"},"calculation_trigger":{"description":"What triggered the calculation of the query, leave empty if user/immediate","type":"string"},"is_cached":{"type":"boolean"},"last_refresh":{"format":"date-time","type":"string"},"next_allowed_client_refresh":{"format":"date-time","type":"string"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"timezone":{"type":"string"}},"required":["cache_key","is_cached","last_refresh","next_allowed_client_refresh","timezone"],"type":"object"},"GoalLine":{"additionalProperties":false,"properties":{"label":{"type":"string"},"value":{"type":"number"}},"required":["label","value"],"type":"object"},"GroupMathType":{"const":"unique_group","type":"string"},"GroupPropertyFilter":{"additionalProperties":false,"properties":{"group_type_index":{"anyOf":[{"type":"integer"},{"type":"null"}]},"key":{"type":"string"},"label":{"type":"string"},"operator":{"$ref":"#/definitions/PropertyOperator"},"type":{"const":"group","type":"string"},"value":{"$ref":"#/definitions/PropertyFilterValue"}},"required":["key","operator","type"],"type":"object"},"HasPropertiesNode":{"anyOf":[{"$ref":"#/definitions/EventsNode"},{"$ref":"#/definitions/EventsQuery"},{"$ref":"#/definitions/PersonsNode"}]},"HogCompileResponse":{"additionalProperties":false,"properties":{"bytecode":{"items":{},"type":"array"}},"required":["bytecode"],"type":"object"},"HogLanguage":{"enum":["hog","hogJson","hogQL","hogQLExpr","hogTemplate"],"type":"string"},"HogQLAutocomplete":{"additionalProperties":false,"properties":{"endPosition":{"description":"End position of the editor word","type":"integer"},"filters":{"$ref":"#/definitions/HogQLFilters","description":"Table to validate the expression against"},"globals":{"description":"Global values in scope","type":"object"},"kind":{"const":"HogQLAutocomplete","type":"string"},"language":{"$ref":"#/definitions/HogLanguage","description":"Language to validate"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"query":{"description":"Query to validate","type":"string"},"response":{"$ref":"#/definitions/HogQLAutocompleteResponse"},"sourceQuery":{"$ref":"#/definitions/AnyDataNode","description":"Query in whose context to validate."},"startPosition":{"description":"Start position of the editor word","type":"integer"}},"required":["endPosition","kind","language","query","startPosition"],"type":"object"},"HogQLAutocompleteResponse":{"additionalProperties":false,"properties":{"incomplete_list":{"description":"Whether or not the suggestions returned are complete","type":"boolean"},"suggestions":{"items":{"$ref":"#/definitions/AutocompleteCompletionItem"},"type":"array"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"}},"required":["suggestions","incomplete_list"],"type":"object"},"HogQLExpression":{"type":"string"},"HogQLFilters":{"additionalProperties":false,"description":"Filters object that will be converted to a HogQL {filters} placeholder","properties":{"dateRange":{"$ref":"#/definitions/DateRange"},"filterTestAccounts":{"type":"boolean"},"properties":{"items":{"$ref":"#/definitions/AnyPropertyFilter"},"type":"array"}},"type":"object"},"HogQLMathType":{"const":"hogql","type":"string"},"HogQLMetadata":{"additionalProperties":false,"properties":{"debug":{"description":"Enable more verbose output, usually run from the /debug page","type":"boolean"},"filters":{"$ref":"#/definitions/HogQLFilters","description":"Extra filters applied to query via {filters}"},"globals":{"description":"Extra globals for the query","type":"object"},"kind":{"const":"HogQLMetadata","type":"string"},"language":{"$ref":"#/definitions/HogLanguage","description":"Language to validate"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"query":{"description":"Query to validate","type":"string"},"response":{"$ref":"#/definitions/HogQLMetadataResponse"},"sourceQuery":{"$ref":"#/definitions/AnyDataNode","description":"Query within which \\"expr\\" and \\"template\\" are validated. Defaults to \\"select * from events\\""},"variables":{"additionalProperties":{"$ref":"#/definitions/HogQLVariable"},"description":"Variables to be subsituted into the query","type":"object"}},"required":["kind","language","query"],"type":"object"},"HogQLMetadataResponse":{"additionalProperties":false,"properties":{"errors":{"items":{"$ref":"#/definitions/HogQLNotice"},"type":"array"},"isValid":{"type":"boolean"},"isValidView":{"type":"boolean"},"notices":{"items":{"$ref":"#/definitions/HogQLNotice"},"type":"array"},"query":{"type":"string"},"warnings":{"items":{"$ref":"#/definitions/HogQLNotice"},"type":"array"}},"required":["errors","warnings","notices"],"type":"object"},"HogQLNotice":{"additionalProperties":false,"properties":{"end":{"type":"integer"},"fix":{"type":"string"},"message":{"type":"string"},"start":{"type":"integer"}},"required":["message"],"type":"object"},"HogQLPropertyFilter":{"additionalProperties":false,"properties":{"key":{"type":"string"},"label":{"type":"string"},"type":{"const":"hogql","type":"string"},"value":{"$ref":"#/definitions/PropertyFilterValue"}},"required":["key","type"],"type":"object"},"HogQLQuery":{"additionalProperties":false,"properties":{"explain":{"deprecated":"use modifiers.debug instead","type":"boolean"},"filters":{"$ref":"#/definitions/HogQLFilters"},"kind":{"const":"HogQLQuery","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"query":{"type":"string"},"response":{"$ref":"#/definitions/HogQLQueryResponse"},"values":{"description":"Constant values that can be referenced with the {placeholder} syntax in the query","type":"object"},"variables":{"additionalProperties":{"$ref":"#/definitions/HogQLVariable"},"description":"Variables to be subsituted into the query","type":"object"}},"required":["kind","query"],"type":"object"},"HogQLQueryModifiers":{"additionalProperties":false,"description":"HogQL Query Options are automatically set per team. However, they can be overriden in the query.","properties":{"bounceRatePageViewMode":{"enum":["count_pageviews","uniq_urls","uniq_page_screen_autocaptures"],"type":"string"},"dataWarehouseEventsModifiers":{"items":{"$ref":"#/definitions/DataWarehouseEventsModifier"},"type":"array"},"debug":{"type":"boolean"},"inCohortVia":{"enum":["auto","leftjoin","subquery","leftjoin_conjoined"],"type":"string"},"materializationMode":{"enum":["auto","legacy_null_as_string","legacy_null_as_null","disabled"],"type":"string"},"optimizeJoinedFilters":{"type":"boolean"},"personsArgMaxVersion":{"enum":["auto","v1","v2"],"type":"string"},"personsJoinMode":{"enum":["inner","left"],"type":"string"},"personsOnEventsMode":{"enum":["disabled","person_id_no_override_properties_on_events","person_id_override_properties_on_events","person_id_override_properties_joined"],"type":"string"},"propertyGroupsMode":{"enum":["enabled","disabled","optimized"],"type":"string"},"s3TableUseInvalidColumns":{"type":"boolean"},"sessionTableVersion":{"enum":["auto","v1","v2"],"type":"string"},"useMaterializedViews":{"type":"boolean"}},"type":"object"},"HogQLQueryResponse":{"additionalProperties":false,"properties":{"clickhouse":{"description":"Executed ClickHouse query","type":"string"},"columns":{"description":"Returned columns","items":{},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"explain":{"description":"Query explanation output","items":{"type":"string"},"type":"array"},"hasMore":{"type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"limit":{"type":"integer"},"metadata":{"$ref":"#/definitions/HogQLMetadataResponse","description":"Query metadata output"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"offset":{"type":"integer"},"query":{"description":"Input query string","type":"string"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{},"type":"array"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"},"types":{"description":"Types of returned columns","items":{},"type":"array"}},"required":["results"],"type":"object"},"HogQLVariable":{"additionalProperties":false,"properties":{"code_name":{"type":"string"},"value":{},"variableId":{"type":"string"}},"required":["variableId","code_name"],"type":"object"},"HogQuery":{"additionalProperties":false,"properties":{"code":{"type":"string"},"kind":{"const":"HogQuery","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"response":{"$ref":"#/definitions/HogQueryResponse"}},"required":["kind"],"type":"object"},"HogQueryResponse":{"additionalProperties":false,"properties":{"bytecode":{"items":{},"type":"array"},"coloredBytecode":{"items":{},"type":"array"},"results":{},"stdout":{"type":"string"}},"required":["results"],"type":"object"},"HumanMessage":{"additionalProperties":false,"properties":{"content":{"type":"string"},"type":{"const":"human","type":"string"}},"required":["type","content"],"type":"object"},"InsightActorsQuery":{"additionalProperties":false,"properties":{"breakdown":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/BreakdownValueInt"},{"items":{"type":"string"},"type":"array"}]},"compare":{"enum":["current","previous"],"type":"string"},"day":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/Day"}]},"includeRecordings":{"type":"boolean"},"interval":{"description":"An interval selected out of available intervals in source query.","type":"integer"},"kind":{"const":"InsightActorsQuery","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"response":{"$ref":"#/definitions/ActorsQueryResponse"},"series":{"type":"integer"},"source":{"$ref":"#/definitions/InsightQuerySource"},"status":{"type":"string"}},"required":["kind","source"],"type":"object"},"InsightActorsQueryBase":{"additionalProperties":false,"properties":{"includeRecordings":{"type":"boolean"},"kind":{"$ref":"#/definitions/NodeKind"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"response":{"$ref":"#/definitions/ActorsQueryResponse"}},"required":["kind"],"type":"object"},"InsightActorsQueryOptions":{"additionalProperties":false,"properties":{"kind":{"const":"InsightActorsQueryOptions","type":"string"},"response":{"$ref":"#/definitions/InsightActorsQueryOptionsResponse"},"source":{"anyOf":[{"$ref":"#/definitions/InsightActorsQuery"},{"$ref":"#/definitions/FunnelsActorsQuery"},{"$ref":"#/definitions/FunnelCorrelationActorsQuery"}]}},"required":["kind","source"],"type":"object"},"InsightActorsQueryOptionsResponse":{"additionalProperties":false,"properties":{"breakdown":{"items":{"$ref":"#/definitions/BreakdownItem"},"type":"array"},"breakdowns":{"items":{"$ref":"#/definitions/MultipleBreakdownOptions"},"type":"array"},"compare":{"items":{"additionalProperties":false,"properties":{"label":{"type":"string"},"value":{"type":"string"}},"required":["label","value"],"type":"object"},"type":"array"},"day":{"items":{"additionalProperties":false,"properties":{"label":{"type":"string"},"value":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/DatetimeDay"},{"$ref":"#/definitions/Day"}]}},"required":["label","value"],"type":"object"},"type":"array"},"interval":{"items":{"additionalProperties":false,"properties":{"label":{"type":"string"},"value":{"description":"An interval selected out of available intervals in source query","type":"integer"}},"required":["label","value"],"type":"object"},"type":"array"},"series":{"items":{"additionalProperties":false,"properties":{"label":{"type":"string"},"value":{"type":"integer"}},"required":["label","value"],"type":"object"},"type":"array"},"status":{"items":{"additionalProperties":false,"properties":{"label":{"type":"string"},"value":{"type":"string"}},"required":["label","value"],"type":"object"},"type":"array"}},"type":"object"},"InsightDateRange":{"additionalProperties":false,"properties":{"date_from":{"default":"-7d","type":["string","null"]},"date_to":{"type":["string","null"]},"explicitDate":{"default":false,"description":"Whether the date_from and date_to should be used verbatim. Disables rounding to the start and end of period.","type":["boolean","null"]}},"type":"object"},"InsightFilter":{"anyOf":[{"$ref":"#/definitions/TrendsFilter"},{"$ref":"#/definitions/FunnelsFilter"},{"$ref":"#/definitions/RetentionFilter"},{"$ref":"#/definitions/PathsFilter"},{"$ref":"#/definitions/StickinessFilter"},{"$ref":"#/definitions/LifecycleFilter"}]},"InsightFilterProperty":{"enum":["trendsFilter","funnelsFilter","retentionFilter","pathsFilter","stickinessFilter","lifecycleFilter"],"type":"string"},"InsightNodeKind":{"enum":["TrendsQuery","FunnelsQuery","RetentionQuery","PathsQuery","StickinessQuery","LifecycleQuery"],"type":"string"},"InsightQueryNode":{"discriminator":{"propertyName":"kind"},"oneOf":[{"$ref":"#/definitions/TrendsQuery"},{"$ref":"#/definitions/FunnelsQuery"},{"$ref":"#/definitions/RetentionQuery"},{"$ref":"#/definitions/PathsQuery"},{"$ref":"#/definitions/StickinessQuery"},{"$ref":"#/definitions/LifecycleQuery"}],"required":["kind"],"type":"object"},"InsightQuerySource":{"$ref":"#/definitions/InsightQueryNode"},"InsightShortId":{"type":"string"},"InsightThreshold":{"additionalProperties":false,"properties":{"bounds":{"$ref":"#/definitions/InsightsThresholdBounds"},"type":{"$ref":"#/definitions/InsightThresholdType"}},"required":["type"],"type":"object"},"InsightThresholdType":{"enum":["absolute","percentage"],"type":"string"},"InsightVizNode":{"additionalProperties":false,"properties":{"embedded":{"description":"Query is embedded inside another bordered component","type":"boolean"},"full":{"description":"Show with most visual options enabled. Used in insight scene.","type":"boolean"},"hidePersonsModal":{"type":"boolean"},"kind":{"const":"InsightVizNode","type":"string"},"showCorrelationTable":{"type":"boolean"},"showFilters":{"type":"boolean"},"showHeader":{"type":"boolean"},"showLastComputation":{"type":"boolean"},"showLastComputationRefresh":{"type":"boolean"},"showResults":{"type":"boolean"},"showTable":{"type":"boolean"},"source":{"$ref":"#/definitions/InsightQueryNode"},"suppressSessionAnalysisWarning":{"type":"boolean"},"vizSpecificOptions":{"$ref":"#/definitions/VizSpecificOptions"}},"required":["kind","source"],"type":"object"},"InsightsQueryBase":{"additionalProperties":false,"description":"Base class for insight query nodes. Should not be used directly.","properties":{"aggregation_group_type_index":{"description":"Groups aggregation","type":"integer"},"dateRange":{"$ref":"#/definitions/InsightDateRange","description":"Date range for the query"},"filterTestAccounts":{"default":false,"description":"Exclude internal and test users by applying the respective filters","type":"boolean"},"kind":{"$ref":"#/definitions/NodeKind"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"properties":{"anyOf":[{"items":{"$ref":"#/definitions/AnyPropertyFilter"},"type":"array"},{"$ref":"#/definitions/PropertyGroupFilter"}],"default":[],"description":"Property filters for all series"},"response":{"$ref":"#/definitions/FunnelsQueryResponse"},"samplingFactor":{"description":"Sampling rate","type":["number","null"]}},"required":["kind"],"type":"object"},"InsightsQueryBase":{"additionalProperties":false,"description":"Base class for insight query nodes. Should not be used directly.","properties":{"aggregation_group_type_index":{"description":"Groups aggregation","type":"integer"},"dateRange":{"$ref":"#/definitions/InsightDateRange","description":"Date range for the query"},"filterTestAccounts":{"default":false,"description":"Exclude internal and test users by applying the respective filters","type":"boolean"},"kind":{"$ref":"#/definitions/NodeKind"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"properties":{"anyOf":[{"items":{"$ref":"#/definitions/AnyPropertyFilter"},"type":"array"},{"$ref":"#/definitions/PropertyGroupFilter"}],"default":[],"description":"Property filters for all series"},"response":{"$ref":"#/definitions/LifecycleQueryResponse"},"samplingFactor":{"description":"Sampling rate","type":["number","null"]}},"required":["kind"],"type":"object"},"InsightsQueryBase":{"additionalProperties":false,"description":"Base class for insight query nodes. Should not be used directly.","properties":{"aggregation_group_type_index":{"description":"Groups aggregation","type":"integer"},"dateRange":{"$ref":"#/definitions/InsightDateRange","description":"Date range for the query"},"filterTestAccounts":{"default":false,"description":"Exclude internal and test users by applying the respective filters","type":"boolean"},"kind":{"$ref":"#/definitions/NodeKind"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"properties":{"anyOf":[{"items":{"$ref":"#/definitions/AnyPropertyFilter"},"type":"array"},{"$ref":"#/definitions/PropertyGroupFilter"}],"default":[],"description":"Property filters for all series"},"response":{"$ref":"#/definitions/PathsQueryResponse"},"samplingFactor":{"description":"Sampling rate","type":["number","null"]}},"required":["kind"],"type":"object"},"InsightsQueryBase":{"additionalProperties":false,"description":"Base class for insight query nodes. Should not be used directly.","properties":{"aggregation_group_type_index":{"description":"Groups aggregation","type":"integer"},"dateRange":{"$ref":"#/definitions/InsightDateRange","description":"Date range for the query"},"filterTestAccounts":{"default":false,"description":"Exclude internal and test users by applying the respective filters","type":"boolean"},"kind":{"$ref":"#/definitions/NodeKind"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"properties":{"anyOf":[{"items":{"$ref":"#/definitions/AnyPropertyFilter"},"type":"array"},{"$ref":"#/definitions/PropertyGroupFilter"}],"default":[],"description":"Property filters for all series"},"response":{"$ref":"#/definitions/RetentionQueryResponse"},"samplingFactor":{"description":"Sampling rate","type":["number","null"]}},"required":["kind"],"type":"object"},"InsightsQueryBase":{"additionalProperties":false,"description":"Base class for insight query nodes. Should not be used directly.","properties":{"aggregation_group_type_index":{"description":"Groups aggregation","type":"integer"},"dateRange":{"$ref":"#/definitions/InsightDateRange","description":"Date range for the query"},"filterTestAccounts":{"default":false,"description":"Exclude internal and test users by applying the respective filters","type":"boolean"},"kind":{"$ref":"#/definitions/NodeKind"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"properties":{"anyOf":[{"items":{"$ref":"#/definitions/AnyPropertyFilter"},"type":"array"},{"$ref":"#/definitions/PropertyGroupFilter"}],"default":[],"description":"Property filters for all series"},"response":{"$ref":"#/definitions/TrendsQueryResponse"},"samplingFactor":{"description":"Sampling rate","type":["number","null"]}},"required":["kind"],"type":"object"},"InsightsThresholdBounds":{"additionalProperties":false,"properties":{"lower":{"type":"number"},"upper":{"type":"number"}},"type":"object"},"IntervalType":{"enum":["minute","hour","day","week","month"],"type":"string"},"LifecycleFilter":{"additionalProperties":false,"properties":{"showLegend":{"default":false,"type":"boolean"},"showValuesOnSeries":{"type":"boolean"},"toggledLifecycles":{"items":{"$ref":"#/definitions/LifecycleToggle"},"type":"array"}},"type":"object"},"LifecycleFilterLegacy":{"additionalProperties":false,"description":"`LifecycleFilterType` minus everything inherited from `FilterType`","properties":{"show_legend":{"type":"boolean"},"show_values_on_series":{"type":"boolean"},"toggledLifecycles":{"items":{"$ref":"#/definitions/LifecycleToggle"},"type":"array"}},"type":"object"},"LifecycleQuery":{"additionalProperties":false,"properties":{"aggregation_group_type_index":{"description":"Groups aggregation","type":"integer"},"dateRange":{"$ref":"#/definitions/InsightDateRange","description":"Date range for the query"},"filterTestAccounts":{"default":false,"description":"Exclude internal and test users by applying the respective filters","type":"boolean"},"interval":{"$ref":"#/definitions/IntervalType","default":"day","description":"Granularity of the response. Can be one of `hour`, `day`, `week` or `month`"},"kind":{"const":"LifecycleQuery","type":"string"},"lifecycleFilter":{"$ref":"#/definitions/LifecycleFilter","description":"Properties specific to the lifecycle insight"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"properties":{"anyOf":[{"items":{"$ref":"#/definitions/AnyPropertyFilter"},"type":"array"},{"$ref":"#/definitions/PropertyGroupFilter"}],"default":[],"description":"Property filters for all series"},"response":{"$ref":"#/definitions/LifecycleQueryResponse"},"samplingFactor":{"description":"Sampling rate","type":["number","null"]},"series":{"description":"Events and actions to include","items":{"$ref":"#/definitions/AnyEntityNode"},"type":"array"}},"required":["kind","series"],"type":"object"},"LifecycleQueryResponse":{"additionalProperties":false,"properties":{"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hogql":{"description":"Generated HogQL query.","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{"type":"object"},"type":"array"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"}},"required":["results"],"type":"object"},"LifecycleToggle":{"enum":["new","resurrecting","returning","dormant"],"type":"string"},"LogEntryPropertyFilter":{"additionalProperties":false,"properties":{"key":{"type":"string"},"label":{"type":"string"},"operator":{"$ref":"#/definitions/PropertyOperator"},"type":{"const":"log_entry","type":"string"},"value":{"$ref":"#/definitions/PropertyFilterValue"}},"required":["key","operator","type"],"type":"object"},"MatchedRecording":{"additionalProperties":false,"properties":{"events":{"items":{"$ref":"#/definitions/MatchedRecordingEvent"},"type":"array"},"session_id":{"type":"string"}},"required":["events"],"type":"object"},"MatchedRecordingEvent":{"additionalProperties":false,"properties":{"uuid":{"type":"string"}},"required":["uuid"],"type":"object"},"MathType":{"anyOf":[{"$ref":"#/definitions/BaseMathType"},{"$ref":"#/definitions/FunnelMathType"},{"$ref":"#/definitions/PropertyMathType"},{"$ref":"#/definitions/CountPerActorMathType"},{"$ref":"#/definitions/GroupMathType"},{"$ref":"#/definitions/HogQLMathType"}]},"MultipleBreakdownOptions":{"additionalProperties":false,"properties":{"values":{"items":{"$ref":"#/definitions/BreakdownItem"},"type":"array"}},"required":["values"],"type":"object"},"MultipleBreakdownType":{"enum":["person","event","group","session","hogql"],"type":"string"},"NodeKind":{"description":"PostHog Query Schema definition.\\n\\nThis file acts as the source of truth for:\\n\\n- frontend/src/queries/schema.json - generated from typescript via \\"pnpm run schema:build:json\\"\\n\\n- posthog/schema.py - generated from json the above json via \\"pnpm run schema:build:python\\"","enum":["EventsNode","ActionsNode","DataWarehouseNode","EventsQuery","PersonsNode","HogQuery","HogQLQuery","HogQLMetadata","HogQLAutocomplete","ActorsQuery","FunnelsActorsQuery","FunnelCorrelationActorsQuery","SessionsTimelineQuery","RecordingsQuery","SessionAttributionExplorerQuery","ErrorTrackingQuery","DataTableNode","DataVisualizationNode","SavedInsightNode","InsightVizNode","TrendsQuery","FunnelsQuery","RetentionQuery","PathsQuery","StickinessQuery","LifecycleQuery","InsightActorsQuery","InsightActorsQueryOptions","FunnelCorrelationQuery","WebOverviewQuery","WebTopClicksQuery","WebStatsTableQuery","WebExternalClicksTableQuery","WebGoalsQuery","ExperimentFunnelsQuery","ExperimentTrendsQuery","DatabaseSchemaQuery","SuggestedQuestionsQuery","TeamTaxonomyQuery","EventTaxonomyQuery","ActorsPropertyTaxonomyQuery"],"type":"string"},"PathCleaningFilter":{"additionalProperties":false,"properties":{"alias":{"type":"string"},"regex":{"type":"string"}},"type":"object"},"PathType":{"enum":["$pageview","$screen","custom_event","hogql"],"type":"string"},"PathsFilter":{"additionalProperties":false,"properties":{"edgeLimit":{"default":50,"type":"integer"},"endPoint":{"type":"string"},"excludeEvents":{"items":{"type":"string"},"type":"array"},"includeEventTypes":{"items":{"$ref":"#/definitions/PathType"},"type":"array"},"localPathCleaningFilters":{"items":{"$ref":"#/definitions/PathCleaningFilter"},"type":"array"},"maxEdgeWeight":{"type":"integer"},"minEdgeWeight":{"type":"integer"},"pathDropoffKey":{"description":"Relevant only within actors query","type":"string"},"pathEndKey":{"description":"Relevant only within actors query","type":"string"},"pathGroupings":{"items":{"type":"string"},"type":"array"},"pathReplacements":{"type":"boolean"},"pathStartKey":{"description":"Relevant only within actors query","type":"string"},"pathsHogQLExpression":{"type":"string"},"startPoint":{"type":"string"},"stepLimit":{"default":5,"type":"integer"}},"type":"object"},"PathsFilterLegacy":{"additionalProperties":false,"description":"`PathsFilterType` minus everything inherited from `FilterType` and persons modal related params","properties":{"edge_limit":{"type":"integer"},"end_point":{"type":"string"},"exclude_events":{"items":{"type":"string"},"type":"array"},"funnel_filter":{"type":"object"},"funnel_paths":{"$ref":"#/definitions/FunnelPathType"},"include_event_types":{"items":{"$ref":"#/definitions/PathType"},"type":"array"},"local_path_cleaning_filters":{"items":{"$ref":"#/definitions/PathCleaningFilter"},"type":"array"},"max_edge_weight":{"type":"integer"},"min_edge_weight":{"type":"integer"},"path_groupings":{"items":{"type":"string"},"type":"array"},"path_replacements":{"type":"boolean"},"path_type":{"$ref":"#/definitions/PathType"},"paths_hogql_expression":{"type":"string"},"start_point":{"type":"string"},"step_limit":{"type":"integer"}},"type":"object"},"PathsQuery":{"additionalProperties":false,"properties":{"aggregation_group_type_index":{"description":"Groups aggregation","type":"integer"},"dateRange":{"$ref":"#/definitions/InsightDateRange","description":"Date range for the query"},"filterTestAccounts":{"default":false,"description":"Exclude internal and test users by applying the respective filters","type":"boolean"},"funnelPathsFilter":{"$ref":"#/definitions/FunnelPathsFilter","description":"Used for displaying paths in relation to funnel steps."},"kind":{"const":"PathsQuery","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"pathsFilter":{"$ref":"#/definitions/PathsFilter","description":"Properties specific to the paths insight"},"properties":{"anyOf":[{"items":{"$ref":"#/definitions/AnyPropertyFilter"},"type":"array"},{"$ref":"#/definitions/PropertyGroupFilter"}],"default":[],"description":"Property filters for all series"},"response":{"$ref":"#/definitions/PathsQueryResponse"},"samplingFactor":{"description":"Sampling rate","type":["number","null"]}},"required":["kind","pathsFilter"],"type":"object"},"PathsQueryResponse":{"additionalProperties":false,"properties":{"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hogql":{"description":"Generated HogQL query.","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{"type":"object"},"type":"array"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"}},"required":["results"],"type":"object"},"PersonPropertyFilter":{"additionalProperties":false,"description":"Sync with plugin-server/src/types.ts","properties":{"key":{"type":"string"},"label":{"type":"string"},"operator":{"$ref":"#/definitions/PropertyOperator"},"type":{"const":"person","description":"Person properties","type":"string"},"value":{"$ref":"#/definitions/PropertyFilterValue"}},"required":["key","operator","type"],"type":"object"},"PersonType":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"distinct_ids":{"items":{"type":"string"},"type":"array"},"id":{"type":"string"},"is_identified":{"type":"boolean"},"name":{"type":"string"},"properties":{"type":"object"},"uuid":{"type":"string"}},"required":["distinct_ids","properties"],"type":"object"},"PersonsNode":{"additionalProperties":false,"deprecated":"Use `ActorsQuery` instead.","properties":{"cohort":{"type":"integer"},"distinctId":{"type":"string"},"fixedProperties":{"description":"Fixed properties in the query, can\'t be edited in the interface (e.g. scoping down by person)","items":{"$ref":"#/definitions/AnyPropertyFilter"},"type":"array"},"kind":{"const":"PersonsNode","type":"string"},"limit":{"type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"offset":{"type":"integer"},"properties":{"description":"Properties configurable in the interface","items":{"$ref":"#/definitions/AnyPropertyFilter"},"type":"array"},"response":{"type":"object"},"search":{"type":"string"}},"required":["kind"],"type":"object"},"PropertyFilterType":{"enum":["meta","event","person","element","feature","session","cohort","recording","log_entry","group","hogql","data_warehouse","data_warehouse_person_property"],"type":"string"},"PropertyFilterValue":{"anyOf":[{"type":"string"},{"type":"number"},{"items":{"type":["string","number"]},"type":"array"},{"type":"null"}]},"PropertyGroupFilter":{"additionalProperties":false,"properties":{"type":{"$ref":"#/definitions/FilterLogicalOperator"},"values":{"items":{"$ref":"#/definitions/PropertyGroupFilterValue"},"type":"array"}},"required":["type","values"],"type":"object"},"PropertyGroupFilterValue":{"additionalProperties":false,"properties":{"type":{"$ref":"#/definitions/FilterLogicalOperator"},"values":{"items":{"anyOf":[{"$ref":"#/definitions/AnyPropertyFilter"},{"$ref":"#/definitions/PropertyGroupFilterValue"}]},"type":"array"}},"required":["type","values"],"type":"object"},"PropertyMathType":{"enum":["avg","sum","min","max","median","p90","p95","p99"],"type":"string"},"PropertyOperator":{"description":"Sync with plugin-server/src/types.ts","enum":["exact","is_not","icontains","not_icontains","regex","not_regex","gt","gte","lt","lte","is_set","is_not_set","is_date_exact","is_date_before","is_date_after","between","not_between","min","max","in","not_in"],"type":"string"},"QueryRequest":{"additionalProperties":false,"properties":{"async":{"deprecated":"Use `refresh` instead.","type":"boolean"},"client_query_id":{"description":"Client provided query ID. Can be used to retrieve the status or cancel the query.","type":"string"},"filters_override":{"$ref":"#/definitions/DashboardFilter"},"query":{"$ref":"#/definitions/QuerySchema","description":"Submit a JSON string representing a query for PostHog data analysis, for example a HogQL query.\\n\\nExample payload:\\n\\n```\\n\\n{\\"query\\": {\\"kind\\": \\"HogQLQuery\\", \\"query\\": \\"select * from events limit 100\\"}}\\n\\n```\\n\\nFor more details on HogQL queries, see the [PostHog HogQL documentation](/docs/hogql#api-access)."},"refresh":{"$ref":"#/definitions/RefreshType","default":"blocking","description":"Whether results should be calculated sync or async, and how much to rely on the cache:\\n- `\'blocking\'` - calculate synchronously (returning only when the query is done), UNLESS there are very fresh results in the cache\\n- `\'async\'` - kick off background calculation (returning immediately with a query status), UNLESS there are very fresh results in the cache\\n- `\'lazy_async\'` - kick off background calculation, UNLESS there are somewhat fresh results in the cache\\n- `\'force_blocking\'` - calculate synchronously, even if fresh results are already cached\\n- `\'force_async\'` - kick off background calculation, even if fresh results are already cached\\n- `\'force_cache\'` - return cached data or a cache miss; always completes immediately as it never calculates Background calculation can be tracked using the `query_status` response field."},"variables_override":{"additionalProperties":{"type":"object"},"type":"object"}},"required":["query"],"type":"object"},"QueryResponseAlternative":{"anyOf":[{"type":"object"},{"additionalProperties":false,"properties":{"columns":{"items":{},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hasMore":{"type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"limit":{"type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"offset":{"type":"integer"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{"items":{},"type":"array"},"type":"array"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"},"types":{"items":{"type":"string"},"type":"array"}},"required":["columns","hogql","results","types"],"type":"object"},{"additionalProperties":false,"properties":{"columns":{"items":{},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hasMore":{"type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"limit":{"type":"integer"},"missing_actors_count":{"type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"offset":{"type":"integer"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{"items":{},"type":"array"},"type":"array"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"},"types":{"items":{"type":"string"},"type":"array"}},"required":["columns","hogql","limit","offset","results","types"],"type":"object"},{"additionalProperties":false,"properties":{"breakdown":{"items":{"$ref":"#/definitions/BreakdownItem"},"type":"array"},"breakdowns":{"items":{"$ref":"#/definitions/MultipleBreakdownOptions"},"type":"array"},"compare":{"items":{"additionalProperties":false,"properties":{"label":{"type":"string"},"value":{"type":"string"}},"required":["label","value"],"type":"object"},"type":"array"},"day":{"items":{"additionalProperties":false,"properties":{"label":{"type":"string"},"value":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/DatetimeDay"},{"$ref":"#/definitions/Day"}]}},"required":["label","value"],"type":"object"},"type":"array"},"interval":{"items":{"additionalProperties":false,"properties":{"label":{"type":"string"},"value":{"description":"An interval selected out of available intervals in source query","type":"integer"}},"required":["label","value"],"type":"object"},"type":"array"},"series":{"items":{"additionalProperties":false,"properties":{"label":{"type":"string"},"value":{"type":"integer"}},"required":["label","value"],"type":"object"},"type":"array"},"status":{"items":{"additionalProperties":false,"properties":{"label":{"type":"string"},"value":{"type":"string"}},"required":["label","value"],"type":"object"},"type":"array"}},"type":"object"},{"additionalProperties":false,"properties":{"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hasMore":{"type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{"$ref":"#/definitions/TimelineEntry"},"type":"array"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"}},"required":["results"],"type":"object"},{"additionalProperties":false,"properties":{"bytecode":{"items":{},"type":"array"},"coloredBytecode":{"items":{},"type":"array"},"results":{},"stdout":{"type":"string"}},"required":["results"],"type":"object"},{"additionalProperties":false,"properties":{"clickhouse":{"description":"Executed ClickHouse query","type":"string"},"columns":{"description":"Returned columns","items":{},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"explain":{"description":"Query explanation output","items":{"type":"string"},"type":"array"},"hasMore":{"type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"limit":{"type":"integer"},"metadata":{"$ref":"#/definitions/HogQLMetadataResponse","description":"Query metadata output"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"offset":{"type":"integer"},"query":{"description":"Input query string","type":"string"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{},"type":"array"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"},"types":{"description":"Types of returned columns","items":{},"type":"array"}},"required":["results"],"type":"object"},{"additionalProperties":false,"properties":{"errors":{"items":{"$ref":"#/definitions/HogQLNotice"},"type":"array"},"isValid":{"type":"boolean"},"isValidView":{"type":"boolean"},"notices":{"items":{"$ref":"#/definitions/HogQLNotice"},"type":"array"},"query":{"type":"string"},"warnings":{"items":{"$ref":"#/definitions/HogQLNotice"},"type":"array"}},"required":["errors","warnings","notices"],"type":"object"},{"additionalProperties":false,"properties":{"incomplete_list":{"description":"Whether or not the suggestions returned are complete","type":"boolean"},"suggestions":{"items":{"$ref":"#/definitions/AutocompleteCompletionItem"},"type":"array"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"}},"required":["suggestions","incomplete_list"],"type":"object"},{"additionalProperties":false,"properties":{"dateFrom":{"type":"string"},"dateTo":{"type":"string"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hogql":{"description":"Generated HogQL query.","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{"$ref":"#/definitions/WebOverviewItem"},"type":"array"},"samplingRate":{"$ref":"#/definitions/SamplingRate"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"}},"required":["results"],"type":"object"},{"additionalProperties":false,"properties":{"columns":{"items":{},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hasMore":{"type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"limit":{"type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"offset":{"type":"integer"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{},"type":"array"},"samplingRate":{"$ref":"#/definitions/SamplingRate"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"},"types":{"items":{},"type":"array"}},"required":["results"],"type":"object"},{"additionalProperties":false,"properties":{"columns":{"items":{},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hasMore":{"type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"limit":{"type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"offset":{"type":"integer"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{},"type":"array"},"samplingRate":{"$ref":"#/definitions/SamplingRate"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"},"types":{"items":{},"type":"array"}},"required":["results"],"type":"object"},{"additionalProperties":false,"properties":{"columns":{"items":{},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hogql":{"description":"Generated HogQL query.","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{},"type":"array"},"samplingRate":{"$ref":"#/definitions/SamplingRate"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"},"types":{"items":{},"type":"array"}},"required":["results"],"type":"object"},{"additionalProperties":false,"properties":{"columns":{"items":{},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hasMore":{"type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"limit":{"type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"offset":{"type":"integer"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{},"type":"array"},"samplingRate":{"$ref":"#/definitions/SamplingRate"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"},"types":{"items":{},"type":"array"}},"required":["results"],"type":"object"},{"additionalProperties":false,"properties":{"columns":{"items":{},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hasMore":{"type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"limit":{"type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"offset":{"type":"integer"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"},"types":{"items":{},"type":"array"}},"required":["results"],"type":"object"},{"additionalProperties":false,"properties":{"columns":{"items":{"type":"string"},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hasMore":{"type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"limit":{"type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"offset":{"type":"integer"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{"$ref":"#/definitions/ErrorTrackingGroup"},"type":"array"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"}},"required":["results"],"type":"object"},{"additionalProperties":false,"properties":{"credible_intervals":{"additionalProperties":{"items":{"type":"number"},"maxItems":2,"minItems":2,"type":"array"},"type":"object"},"expected_loss":{"type":"number"},"insight":{"$ref":"#/definitions/FunnelsQueryResponse"},"probability":{"additionalProperties":{"type":"number"},"type":"object"},"significance_code":{"$ref":"#/definitions/ExperimentSignificanceCode"},"significant":{"type":"boolean"},"variants":{"items":{"$ref":"#/definitions/ExperimentVariantFunnelsBaseStats"},"type":"array"}},"required":["insight","variants","probability","significant","significance_code","expected_loss","credible_intervals"],"type":"object"},{"additionalProperties":false,"properties":{"credible_intervals":{"additionalProperties":{"items":{"type":"number"},"maxItems":2,"minItems":2,"type":"array"},"type":"object"},"insight":{"$ref":"#/definitions/TrendsQueryResponse"},"p_value":{"type":"number"},"probability":{"additionalProperties":{"type":"number"},"type":"object"},"significance_code":{"$ref":"#/definitions/ExperimentSignificanceCode"},"significant":{"type":"boolean"},"variants":{"items":{"$ref":"#/definitions/ExperimentVariantTrendsBaseStats"},"type":"array"}},"required":["insight","variants","probability","significant","significance_code","p_value","credible_intervals"],"type":"object"},{"properties":{},"type":"object"},{"not":{}},{"additionalProperties":false,"properties":{"columns":{"items":{},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hasMore":{"type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"limit":{"type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"offset":{"type":"integer"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{"items":{},"type":"array"},"type":"array"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"},"types":{"items":{"type":"string"},"type":"array"}},"required":["columns","hogql","results","types"],"type":"object"},{"additionalProperties":false,"properties":{"columns":{"items":{},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hasMore":{"type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"limit":{"type":"integer"},"missing_actors_count":{"type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"offset":{"type":"integer"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{"items":{},"type":"array"},"type":"array"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"},"types":{"items":{"type":"string"},"type":"array"}},"required":["columns","hogql","limit","offset","results","types"],"type":"object"},{"additionalProperties":false,"properties":{"clickhouse":{"description":"Executed ClickHouse query","type":"string"},"columns":{"description":"Returned columns","items":{},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"explain":{"description":"Query explanation output","items":{"type":"string"},"type":"array"},"hasMore":{"type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"limit":{"type":"integer"},"metadata":{"$ref":"#/definitions/HogQLMetadataResponse","description":"Query metadata output"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"offset":{"type":"integer"},"query":{"description":"Input query string","type":"string"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{},"type":"array"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"},"types":{"description":"Types of returned columns","items":{},"type":"array"}},"required":["results"],"type":"object"},{"additionalProperties":false,"properties":{"dateFrom":{"type":"string"},"dateTo":{"type":"string"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hogql":{"description":"Generated HogQL query.","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{"$ref":"#/definitions/WebOverviewItem"},"type":"array"},"samplingRate":{"$ref":"#/definitions/SamplingRate"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"}},"required":["results"],"type":"object"},{"additionalProperties":false,"properties":{"columns":{"items":{},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hasMore":{"type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"limit":{"type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"offset":{"type":"integer"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{},"type":"array"},"samplingRate":{"$ref":"#/definitions/SamplingRate"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"},"types":{"items":{},"type":"array"}},"required":["results"],"type":"object"},{"additionalProperties":false,"properties":{"columns":{"items":{},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hasMore":{"type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"limit":{"type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"offset":{"type":"integer"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{},"type":"array"},"samplingRate":{"$ref":"#/definitions/SamplingRate"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"},"types":{"items":{},"type":"array"}},"required":["results"],"type":"object"},{"additionalProperties":false,"properties":{"columns":{"items":{},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hogql":{"description":"Generated HogQL query.","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{},"type":"array"},"samplingRate":{"$ref":"#/definitions/SamplingRate"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"},"types":{"items":{},"type":"array"}},"required":["results"],"type":"object"},{"additionalProperties":false,"properties":{"columns":{"items":{},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hasMore":{"type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"limit":{"type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"offset":{"type":"integer"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{},"type":"array"},"samplingRate":{"$ref":"#/definitions/SamplingRate"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"},"types":{"items":{},"type":"array"}},"required":["results"],"type":"object"},{"additionalProperties":false,"properties":{"columns":{"items":{},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hasMore":{"type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"limit":{"type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"offset":{"type":"integer"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"},"types":{"items":{},"type":"array"}},"required":["results"],"type":"object"},{"additionalProperties":false,"properties":{"columns":{"items":{"type":"string"},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hasMore":{"type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"limit":{"type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"offset":{"type":"integer"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{"$ref":"#/definitions/ErrorTrackingGroup"},"type":"array"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"}},"required":["results"],"type":"object"},{"additionalProperties":false,"properties":{"credible_intervals":{"additionalProperties":{"items":{"type":"number"},"maxItems":2,"minItems":2,"type":"array"},"type":"object"},"expected_loss":{"type":"number"},"insight":{"$ref":"#/definitions/FunnelsQueryResponse"},"probability":{"additionalProperties":{"type":"number"},"type":"object"},"significance_code":{"$ref":"#/definitions/ExperimentSignificanceCode"},"significant":{"type":"boolean"},"variants":{"items":{"$ref":"#/definitions/ExperimentVariantFunnelsBaseStats"},"type":"array"}},"required":["credible_intervals","expected_loss","insight","probability","significance_code","significant","variants"],"type":"object"},{"additionalProperties":false,"properties":{"credible_intervals":{"additionalProperties":{"items":{"type":"number"},"maxItems":2,"minItems":2,"type":"array"},"type":"object"},"insight":{"$ref":"#/definitions/TrendsQueryResponse"},"p_value":{"type":"number"},"probability":{"additionalProperties":{"type":"number"},"type":"object"},"significance_code":{"$ref":"#/definitions/ExperimentSignificanceCode"},"significant":{"type":"boolean"},"variants":{"items":{"$ref":"#/definitions/ExperimentVariantTrendsBaseStats"},"type":"array"}},"required":["credible_intervals","insight","p_value","probability","significance_code","significant","variants"],"type":"object"},{"additionalProperties":false,"properties":{"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hasMore":{"description":"Wether more breakdown values are available.","type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{"type":"object"},"type":"array"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"}},"required":["results"],"type":"object"},{"additionalProperties":false,"properties":{"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hogql":{"description":"Generated HogQL query.","type":"string"},"isUdf":{"type":"boolean"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"anyOf":[{"$ref":"#/definitions/FunnelStepsResults"},{"$ref":"#/definitions/FunnelStepsBreakdownResults"},{"$ref":"#/definitions/FunnelTimeToConvertResults"},{"$ref":"#/definitions/FunnelTrendsResults"}]},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"}},"required":["results"],"type":"object"},{"additionalProperties":false,"properties":{"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hogql":{"description":"Generated HogQL query.","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{"$ref":"#/definitions/RetentionResult"},"type":"array"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"}},"required":["results"],"type":"object"},{"additionalProperties":false,"properties":{"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hogql":{"description":"Generated HogQL query.","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{"type":"object"},"type":"array"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"}},"required":["results"],"type":"object"},{"additionalProperties":false,"properties":{"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hogql":{"description":"Generated HogQL query.","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{"type":"object"},"type":"array"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"}},"required":["results"],"type":"object"},{"additionalProperties":false,"properties":{"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hogql":{"description":"Generated HogQL query.","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{"type":"object"},"type":"array"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"}},"required":["results"],"type":"object"},{"additionalProperties":false,"properties":{"columns":{"items":{},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hasMore":{"type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"limit":{"type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"offset":{"type":"integer"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"$ref":"#/definitions/FunnelCorrelationResult"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"},"types":{"items":{},"type":"array"}},"required":["results"],"type":"object"},{"additionalProperties":false,"properties":{"tables":{"additionalProperties":{"$ref":"#/definitions/DatabaseSchemaTable"},"type":"object"}},"required":["tables"],"type":"object"},{"additionalProperties":false,"properties":{"questions":{"items":{"type":"string"},"type":"array"}},"required":["questions"],"type":"object"},{"additionalProperties":false,"properties":{"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hogql":{"description":"Generated HogQL query.","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"$ref":"#/definitions/TeamTaxonomyResponse"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"}},"required":["results"],"type":"object"},{"additionalProperties":false,"properties":{"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hogql":{"description":"Generated HogQL query.","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"$ref":"#/definitions/EventTaxonomyResponse"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"}},"required":["results"],"type":"object"},{"additionalProperties":false,"properties":{"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hogql":{"description":"Generated HogQL query.","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"$ref":"#/definitions/ActorsPropertyTaxonomyResponse"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"}},"required":["results"],"type":"object"}]},"QuerySchema":{"discriminator":{"propertyName":"kind"},"oneOf":[{"$ref":"#/definitions/EventsNode"},{"$ref":"#/definitions/ActionsNode"},{"$ref":"#/definitions/PersonsNode"},{"$ref":"#/definitions/DataWarehouseNode"},{"$ref":"#/definitions/EventsQuery"},{"$ref":"#/definitions/ActorsQuery"},{"$ref":"#/definitions/InsightActorsQuery"},{"$ref":"#/definitions/InsightActorsQueryOptions"},{"$ref":"#/definitions/SessionsTimelineQuery"},{"$ref":"#/definitions/HogQuery"},{"$ref":"#/definitions/HogQLQuery"},{"$ref":"#/definitions/HogQLMetadata"},{"$ref":"#/definitions/HogQLAutocomplete"},{"$ref":"#/definitions/WebOverviewQuery"},{"$ref":"#/definitions/WebStatsTableQuery"},{"$ref":"#/definitions/WebExternalClicksTableQuery"},{"$ref":"#/definitions/WebTopClicksQuery"},{"$ref":"#/definitions/WebGoalsQuery"},{"$ref":"#/definitions/SessionAttributionExplorerQuery"},{"$ref":"#/definitions/ErrorTrackingQuery"},{"$ref":"#/definitions/ExperimentFunnelsQuery"},{"$ref":"#/definitions/ExperimentTrendsQuery"},{"$ref":"#/definitions/DataVisualizationNode"},{"$ref":"#/definitions/DataTableNode"},{"$ref":"#/definitions/SavedInsightNode"},{"$ref":"#/definitions/InsightVizNode"},{"$ref":"#/definitions/TrendsQuery"},{"$ref":"#/definitions/FunnelsQuery"},{"$ref":"#/definitions/RetentionQuery"},{"$ref":"#/definitions/PathsQuery"},{"$ref":"#/definitions/StickinessQuery"},{"$ref":"#/definitions/LifecycleQuery"},{"$ref":"#/definitions/FunnelCorrelationQuery"},{"$ref":"#/definitions/DatabaseSchemaQuery"},{"$ref":"#/definitions/SuggestedQuestionsQuery"},{"$ref":"#/definitions/TeamTaxonomyQuery"},{"$ref":"#/definitions/EventTaxonomyQuery"},{"$ref":"#/definitions/ActorsPropertyTaxonomyQuery"}],"required":["kind"],"type":"object"},"QuerySchemaRoot":{"$ref":"#/definitions/QuerySchema"},"QueryStatus":{"additionalProperties":false,"properties":{"complete":{"default":false,"description":"Whether the query is still running. Will be true if the query is complete, even if it errored. Either result or error will be set.","type":"boolean"},"dashboard_id":{"type":"integer"},"end_time":{"description":"When did the query execution task finish (whether successfully or not).","format":"date-time","type":"string"},"error":{"default":false,"description":"If the query failed, this will be set to true. More information can be found in the error_message field.","type":"boolean"},"error_message":{"default":null,"type":["string","null"]},"expiration_time":{"format":"date-time","type":"string"},"id":{"type":"string"},"insight_id":{"type":"integer"},"labels":{"items":{"type":"string"},"type":"array"},"pickup_time":{"description":"When was the query execution task picked up by a worker.","format":"date-time","type":"string"},"query_async":{"const":true,"default":true,"description":"ONLY async queries use QueryStatus.","type":"boolean"},"query_progress":{"$ref":"#/definitions/ClickhouseQueryProgress"},"results":{},"start_time":{"description":"When was query execution task enqueued.","format":"date-time","type":"string"},"task_id":{"type":"string"},"team_id":{"type":"integer"}},"required":["id","query_async","team_id","error","complete","error_message"],"type":"object"},"QueryStatusResponse":{"additionalProperties":false,"properties":{"query_status":{"$ref":"#/definitions/QueryStatus"}},"required":["query_status"],"type":"object"},"QueryTiming":{"additionalProperties":false,"properties":{"k":{"description":"Key. Shortened to \'k\' to save on data.","type":"string"},"t":{"description":"Time in seconds. Shortened to \'t\' to save on data.","type":"number"}},"required":["k","t"],"type":"object"},"RecordingOrder":{"enum":["duration","recording_duration","inactive_seconds","active_seconds","start_time","console_error_count","click_count","keypress_count","mouse_activity_count","activity_score"],"type":"string"},"RecordingPropertyFilter":{"additionalProperties":false,"properties":{"key":{"anyOf":[{"$ref":"#/definitions/DurationType"},{"const":"snapshot_source","type":"string"},{"const":"visited_page","type":"string"}]},"label":{"type":"string"},"operator":{"$ref":"#/definitions/PropertyOperator"},"type":{"const":"recording","type":"string"},"value":{"$ref":"#/definitions/PropertyFilterValue"}},"required":["key","operator","type"],"type":"object"},"RecordingsQuery":{"additionalProperties":false,"properties":{"actions":{"items":{"type":"object"},"type":"array"},"console_log_filters":{"items":{"$ref":"#/definitions/LogEntryPropertyFilter"},"type":"array"},"date_from":{"type":["string","null"]},"date_to":{"type":["string","null"]},"events":{"items":{"type":"object"},"type":"array"},"filter_test_accounts":{"type":"boolean"},"having_predicates":{"items":{"$ref":"#/definitions/AnyPropertyFilter"},"type":"array"},"kind":{"const":"RecordingsQuery","type":"string"},"limit":{"type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"offset":{"type":"integer"},"operand":{"$ref":"#/definitions/FilterLogicalOperator"},"order":{"$ref":"#/definitions/RecordingOrder"},"person_uuid":{"type":"string"},"properties":{"items":{"$ref":"#/definitions/AnyPropertyFilter"},"type":"array"},"response":{"$ref":"#/definitions/RecordingsQueryResponse"},"session_ids":{"items":{"type":"string"},"type":"array"},"user_modified_filters":{"type":"object"}},"required":["kind"],"type":"object"},"RecordingsQueryResponse":{"additionalProperties":false,"properties":{"has_next":{"type":"boolean"},"results":{"items":{"$ref":"#/definitions/SessionRecordingType"},"type":"array"}},"required":["results","has_next"],"type":"object"},"RefreshType":{"anyOf":[{"type":"boolean"},{"const":"async","type":"string"},{"const":"async_except_on_cache_miss","type":"string"},{"const":"blocking","type":"string"},{"const":"force_async","type":"string"},{"const":"force_blocking","type":"string"},{"const":"force_cache","type":"string"},{"const":"lazy_async","type":"string"}]},"RetentionEntity":{"additionalProperties":false,"properties":{"custom_name":{"type":"string"},"id":{"type":["string","number"]},"kind":{"enum":["ActionsNode","EventsNode"],"type":"string"},"name":{"type":"string"},"order":{"type":"integer"},"type":{"$ref":"#/definitions/EntityType"},"uuid":{"type":"string"}},"type":"object"},"RetentionFilter":{"additionalProperties":false,"properties":{"cumulative":{"type":"boolean"},"period":{"$ref":"#/definitions/RetentionPeriod","default":"Day"},"retentionReference":{"enum":["total","previous"],"type":"string"},"retentionType":{"$ref":"#/definitions/RetentionType"},"returningEntity":{"$ref":"#/definitions/RetentionEntity"},"showMean":{"type":"boolean"},"targetEntity":{"$ref":"#/definitions/RetentionEntity"},"totalIntervals":{"default":11,"type":"integer"}},"type":"object"},"RetentionFilterLegacy":{"additionalProperties":false,"description":"`RetentionFilterType` minus everything inherited from `FilterType`","properties":{"cumulative":{"type":"boolean"},"period":{"$ref":"#/definitions/RetentionPeriod"},"retention_reference":{"enum":["total","previous"],"type":"string"},"retention_type":{"$ref":"#/definitions/RetentionType"},"returning_entity":{"$ref":"#/definitions/RetentionEntity"},"show_mean":{"type":"boolean"},"target_entity":{"$ref":"#/definitions/RetentionEntity"},"total_intervals":{"type":"integer"}},"type":"object"},"RetentionPeriod":{"enum":["Hour","Day","Week","Month"],"type":"string"},"RetentionQuery":{"additionalProperties":false,"properties":{"aggregation_group_type_index":{"description":"Groups aggregation","type":"integer"},"dateRange":{"$ref":"#/definitions/InsightDateRange","description":"Date range for the query"},"filterTestAccounts":{"default":false,"description":"Exclude internal and test users by applying the respective filters","type":"boolean"},"kind":{"const":"RetentionQuery","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"properties":{"anyOf":[{"items":{"$ref":"#/definitions/AnyPropertyFilter"},"type":"array"},{"$ref":"#/definitions/PropertyGroupFilter"}],"default":[],"description":"Property filters for all series"},"response":{"$ref":"#/definitions/RetentionQueryResponse"},"retentionFilter":{"$ref":"#/definitions/RetentionFilter","description":"Properties specific to the retention insight"},"samplingFactor":{"description":"Sampling rate","type":["number","null"]}},"required":["kind","retentionFilter"],"type":"object"},"RetentionQueryResponse":{"additionalProperties":false,"properties":{"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hogql":{"description":"Generated HogQL query.","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{"$ref":"#/definitions/RetentionResult"},"type":"array"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"}},"required":["results"],"type":"object"},"RetentionResult":{"additionalProperties":false,"properties":{"date":{"format":"date-time","type":"string"},"label":{"type":"string"},"values":{"items":{"$ref":"#/definitions/RetentionValue"},"type":"array"}},"required":["values","label","date"],"type":"object"},"RetentionType":{"enum":["retention_recurring","retention_first_time"],"type":"string"},"RetentionValue":{"additionalProperties":false,"properties":{"count":{"type":"integer"}},"required":["count"],"type":"object"},"RootAssistantMessage":{"anyOf":[{"$ref":"#/definitions/VisualizationMessage"},{"$ref":"#/definitions/AssistantMessage"},{"$ref":"#/definitions/HumanMessage"}]},"SamplingRate":{"additionalProperties":false,"properties":{"denominator":{"type":"number"},"numerator":{"type":"number"}},"required":["numerator"],"type":"object"},"SavedInsightNode":{"additionalProperties":false,"properties":{"allowSorting":{"description":"Can the user click on column headers to sort the table? (default: true)","type":"boolean"},"embedded":{"description":"Query is embedded inside another bordered component","type":"boolean"},"expandable":{"description":"Can expand row to show raw event data (default: true)","type":"boolean"},"full":{"description":"Show with most visual options enabled. Used in insight scene.","type":"boolean"},"hidePersonsModal":{"type":"boolean"},"kind":{"const":"SavedInsightNode","type":"string"},"propertiesViaUrl":{"description":"Link properties via the URL (default: false)","type":"boolean"},"shortId":{"$ref":"#/definitions/InsightShortId"},"showActions":{"description":"Show the kebab menu at the end of the row","type":"boolean"},"showColumnConfigurator":{"description":"Show a button to configure the table\'s columns if possible","type":"boolean"},"showCorrelationTable":{"type":"boolean"},"showDateRange":{"description":"Show date range selector","type":"boolean"},"showElapsedTime":{"description":"Show the time it takes to run a query","type":"boolean"},"showEventFilter":{"description":"Include an event filter above the table (EventsNode only)","type":"boolean"},"showExport":{"description":"Show the export button","type":"boolean"},"showFilters":{"type":"boolean"},"showHeader":{"type":"boolean"},"showHogQLEditor":{"description":"Include a HogQL query editor above HogQL tables","type":"boolean"},"showLastComputation":{"type":"boolean"},"showLastComputationRefresh":{"type":"boolean"},"showOpenEditorButton":{"description":"Show a button to open the current query as a new insight. (default: true)","type":"boolean"},"showPersistentColumnConfigurator":{"description":"Show a button to configure and persist the table\'s default columns if possible","type":"boolean"},"showPropertyFilter":{"anyOf":[{"type":"boolean"},{"items":{"$ref":"#/definitions/TaxonomicFilterGroupType"},"type":"array"}],"description":"Include a property filter above the table"},"showReload":{"description":"Show a reload button","type":"boolean"},"showResults":{"type":"boolean"},"showResultsTable":{"description":"Show a results table","type":"boolean"},"showSavedQueries":{"description":"Shows a list of saved queries","type":"boolean"},"showSearch":{"description":"Include a free text search field (PersonsNode only)","type":"boolean"},"showTable":{"type":"boolean"},"showTestAccountFilters":{"description":"Show filter to exclude test accounts","type":"boolean"},"showTimings":{"description":"Show a detailed query timing breakdown","type":"boolean"},"suppressSessionAnalysisWarning":{"type":"boolean"},"vizSpecificOptions":{"$ref":"#/definitions/VizSpecificOptions"}},"required":["kind","shortId"],"type":"object"},"SessionAttributionExplorerQuery":{"additionalProperties":false,"properties":{"filters":{"additionalProperties":false,"properties":{"dateRange":{"$ref":"#/definitions/DateRange"},"properties":{"items":{"$ref":"#/definitions/SessionPropertyFilter"},"type":"array"}},"type":"object"},"groupBy":{"items":{"$ref":"#/definitions/SessionAttributionGroupBy"},"type":"array"},"kind":{"const":"SessionAttributionExplorerQuery","type":"string"},"limit":{"type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"offset":{"type":"integer"},"response":{"$ref":"#/definitions/SessionAttributionExplorerQueryResponse"}},"required":["groupBy","kind"],"type":"object"},"SessionAttributionExplorerQueryResponse":{"additionalProperties":false,"properties":{"columns":{"items":{},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hasMore":{"type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"limit":{"type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"offset":{"type":"integer"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"},"types":{"items":{},"type":"array"}},"required":["results"],"type":"object"},"SessionAttributionGroupBy":{"enum":["ChannelType","Medium","Source","Campaign","AdIds","ReferringDomain","InitialURL"],"type":"string"},"SessionPropertyFilter":{"additionalProperties":false,"properties":{"key":{"type":"string"},"label":{"type":"string"},"operator":{"$ref":"#/definitions/PropertyOperator"},"type":{"const":"session","type":"string"},"value":{"$ref":"#/definitions/PropertyFilterValue"}},"required":["key","operator","type"],"type":"object"},"SessionRecordingType":{"additionalProperties":false,"properties":{"active_seconds":{"type":"number"},"activity_score":{"description":"calculated on the backend so that we can sort by it, definition may change over time","type":"number"},"click_count":{"type":"number"},"console_error_count":{"type":"number"},"console_log_count":{"type":"number"},"console_warn_count":{"type":"number"},"distinct_id":{"type":"string"},"email":{"type":"string"},"end_time":{"description":"When the recording ends in ISO format.","type":"string"},"id":{"type":"string"},"inactive_seconds":{"type":"number"},"keypress_count":{"type":"number"},"matching_events":{"description":"List of matching events. *","items":{"$ref":"#/definitions/MatchedRecording"},"type":"array"},"mouse_activity_count":{"description":"count of all mouse activity in the recording, not just clicks","type":"number"},"ongoing":{"description":"whether we have received data for this recording in the last 5 minutes (assumes the recording was loaded from ClickHouse)\\n*","type":"boolean"},"person":{"$ref":"#/definitions/PersonType"},"recording_duration":{"description":"Length of recording in seconds.","type":"number"},"snapshot_source":{"enum":["web","mobile","unknown"],"type":"string"},"start_time":{"description":"When the recording starts in ISO format.","type":"string"},"start_url":{"type":"string"},"storage":{"description":"Where this recording information was loaded from","enum":["object_storage_lts","object_storage"],"type":"string"},"summary":{"type":"string"},"viewed":{"description":"Whether this recording has been viewed already.","type":"boolean"}},"required":["id","viewed","recording_duration","start_time","end_time","snapshot_source"],"type":"object"},"SessionsTimelineQuery":{"additionalProperties":false,"properties":{"after":{"description":"Only fetch sessions that started after this timestamp (default: \'-24h\')","type":"string"},"before":{"description":"Only fetch sessions that started before this timestamp (default: \'+5s\')","type":"string"},"kind":{"const":"SessionsTimelineQuery","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"personId":{"description":"Fetch sessions only for a given person","type":"string"},"response":{"$ref":"#/definitions/SessionsTimelineQueryResponse"}},"required":["kind"],"type":"object"},"SessionsTimelineQueryResponse":{"additionalProperties":false,"properties":{"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hasMore":{"type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{"$ref":"#/definitions/TimelineEntry"},"type":"array"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"}},"required":["results"],"type":"object"},"StepOrderValue":{"enum":["strict","unordered","ordered"],"type":"string"},"StickinessFilter":{"additionalProperties":false,"properties":{"display":{"$ref":"#/definitions/ChartDisplayType"},"hiddenLegendIndexes":{"items":{"type":"integer"},"type":"array"},"showLegend":{"type":"boolean"},"showValuesOnSeries":{"type":"boolean"}},"type":"object"},"StickinessFilterLegacy":{"additionalProperties":false,"description":"`StickinessFilterType` minus everything inherited from `FilterType` and persons modal related params","properties":{"compare":{"type":"boolean"},"compare_to":{"type":"string"},"display":{"$ref":"#/definitions/ChartDisplayType"},"hidden_legend_keys":{"additionalProperties":{"anyOf":[{"type":"boolean"},{"not":{}}]},"type":"object"},"show_legend":{"type":"boolean"},"show_values_on_series":{"type":"boolean"}},"type":"object"},"StickinessQuery":{"additionalProperties":false,"properties":{"compareFilter":{"$ref":"#/definitions/CompareFilter","description":"Compare to date range"},"dateRange":{"$ref":"#/definitions/InsightDateRange","description":"Date range for the query"},"filterTestAccounts":{"default":false,"description":"Exclude internal and test users by applying the respective filters","type":"boolean"},"interval":{"$ref":"#/definitions/IntervalType","default":"day","description":"Granularity of the response. Can be one of `hour`, `day`, `week` or `month`"},"kind":{"const":"StickinessQuery","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"properties":{"anyOf":[{"items":{"$ref":"#/definitions/AnyPropertyFilter"},"type":"array"},{"$ref":"#/definitions/PropertyGroupFilter"}],"default":[],"description":"Property filters for all series"},"response":{"$ref":"#/definitions/StickinessQueryResponse"},"samplingFactor":{"description":"Sampling rate","type":["number","null"]},"series":{"description":"Events and actions to include","items":{"$ref":"#/definitions/AnyEntityNode"},"type":"array"},"stickinessFilter":{"$ref":"#/definitions/StickinessFilter","description":"Properties specific to the stickiness insight"}},"required":["kind","series"],"type":"object"},"StickinessQueryResponse":{"additionalProperties":false,"properties":{"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hogql":{"description":"Generated HogQL query.","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{"type":"object"},"type":"array"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"}},"required":["results"],"type":"object"},"SuggestedQuestionsQuery":{"additionalProperties":false,"properties":{"kind":{"const":"SuggestedQuestionsQuery","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"response":{"$ref":"#/definitions/SuggestedQuestionsQueryResponse"}},"required":["kind"],"type":"object"},"SuggestedQuestionsQueryResponse":{"additionalProperties":false,"properties":{"questions":{"items":{"type":"string"},"type":"array"}},"required":["questions"],"type":"object"},"TableSettings":{"additionalProperties":false,"properties":{"columns":{"items":{"$ref":"#/definitions/ChartAxis"},"type":"array"},"conditionalFormatting":{"items":{"$ref":"#/definitions/ConditionalFormattingRule"},"type":"array"}},"type":"object"},"TaxonomicFilterGroupType":{"enum":["metadata","actions","cohorts","cohorts_with_all","data_warehouse","data_warehouse_properties","data_warehouse_person_properties","elements","events","event_properties","event_feature_flags","numerical_event_properties","person_properties","pageview_urls","screens","custom_events","wildcard","groups","persons","feature_flags","insights","experiments","plugins","dashboards","name_groups","session_properties","hogql_expression","notebooks","log_entries","replay"],"type":"string"},"TeamTaxonomyItem":{"additionalProperties":false,"properties":{"count":{"type":"integer"},"event":{"type":"string"}},"required":["event","count"],"type":"object"},"TeamTaxonomyQuery":{"additionalProperties":false,"properties":{"kind":{"const":"TeamTaxonomyQuery","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"response":{"$ref":"#/definitions/TeamTaxonomyQueryResponse"}},"required":["kind"],"type":"object"},"TeamTaxonomyQueryResponse":{"additionalProperties":false,"description":"All analytics query responses must inherit from this.","properties":{"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hogql":{"description":"Generated HogQL query.","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"$ref":"#/definitions/TeamTaxonomyResponse"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"}},"required":["results"],"type":"object"},"TeamTaxonomyResponse":{"items":{"$ref":"#/definitions/TeamTaxonomyItem"},"type":"array"},"TestBasicQueryResponse":{"additionalProperties":false,"deprecated":"Only exported for use in test_query_runner.py! Don\'t use anywhere else.","properties":{"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hogql":{"description":"Generated HogQL query.","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{},"type":"array"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"}},"required":["results"],"type":"object"},"TestCachedBasicQueryResponse":{"additionalProperties":false,"deprecated":"Only exported for use in test_query_runner.py! Don\'t use anywhere else.","properties":{"cache_key":{"type":"string"},"cache_target_age":{"format":"date-time","type":"string"},"calculation_trigger":{"description":"What triggered the calculation of the query, leave empty if user/immediate","type":"string"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hogql":{"description":"Generated HogQL query.","type":"string"},"is_cached":{"type":"boolean"},"last_refresh":{"format":"date-time","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"next_allowed_client_refresh":{"format":"date-time","type":"string"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{},"type":"array"},"timezone":{"type":"string"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"}},"required":["cache_key","is_cached","last_refresh","next_allowed_client_refresh","results","timezone"],"type":"object"},"TimelineEntry":{"additionalProperties":false,"properties":{"events":{"items":{"$ref":"#/definitions/EventType"},"type":"array"},"recording_duration_s":{"description":"Duration of the recording in seconds.","type":"number"},"sessionId":{"description":"Session ID. None means out-of-session events","type":"string"}},"required":["events"],"type":"object"},"TrendsAlertConfig":{"additionalProperties":false,"properties":{"series_index":{"type":"integer"},"type":{"const":"TrendsAlertConfig","type":"string"}},"required":["type","series_index"],"type":"object"},"TrendsFilter":{"additionalProperties":false,"properties":{"aggregationAxisFormat":{"$ref":"#/definitions/AggregationAxisFormat","default":"numeric"},"aggregationAxisPostfix":{"type":"string"},"aggregationAxisPrefix":{"type":"string"},"breakdown_histogram_bin_count":{"type":"number"},"decimalPlaces":{"type":"number"},"display":{"$ref":"#/definitions/ChartDisplayType","default":"ActionsLineGraph"},"formula":{"type":"string"},"hiddenLegendIndexes":{"items":{"type":"integer"},"type":"array"},"showAlertThresholdLines":{"default":false,"type":"boolean"},"showLabelsOnSeries":{"type":"boolean"},"showLegend":{"default":false,"type":"boolean"},"showPercentStackView":{"default":false,"type":"boolean"},"showValuesOnSeries":{"default":false,"type":"boolean"},"smoothingIntervals":{"default":1,"type":"integer"},"yAxisScaleType":{"enum":["log10","linear"],"type":"string"}},"type":"object"},"TrendsFilterLegacy":{"additionalProperties":false,"description":"`TrendsFilterType` minus everything inherited from `FilterType` and `shown_as`","properties":{"aggregation_axis_format":{"$ref":"#/definitions/AggregationAxisFormat"},"aggregation_axis_postfix":{"type":"string"},"aggregation_axis_prefix":{"type":"string"},"breakdown_histogram_bin_count":{"type":"number"},"compare":{"type":"boolean"},"compare_to":{"type":"string"},"decimal_places":{"type":"number"},"display":{"$ref":"#/definitions/ChartDisplayType"},"formula":{"type":"string"},"hidden_legend_keys":{"additionalProperties":{"anyOf":[{"type":"boolean"},{"not":{}}]},"type":"object"},"show_alert_threshold_lines":{"type":"boolean"},"show_labels_on_series":{"type":"boolean"},"show_legend":{"type":"boolean"},"show_percent_stack_view":{"type":"boolean"},"show_values_on_series":{"type":"boolean"},"smoothing_intervals":{"type":"number"},"y_axis_scale_type":{"enum":["log10","linear"],"type":"string"}},"type":"object"},"TrendsQuery":{"additionalProperties":false,"properties":{"aggregation_group_type_index":{"description":"Groups aggregation","type":"integer"},"breakdownFilter":{"$ref":"#/definitions/BreakdownFilter","description":"Breakdown of the events and actions"},"compareFilter":{"$ref":"#/definitions/CompareFilter","description":"Compare to date range"},"dateRange":{"$ref":"#/definitions/InsightDateRange","description":"Date range for the query"},"filterTestAccounts":{"default":false,"description":"Exclude internal and test users by applying the respective filters","type":"boolean"},"interval":{"$ref":"#/definitions/IntervalType","default":"day","description":"Granularity of the response. Can be one of `hour`, `day`, `week` or `month`"},"kind":{"const":"TrendsQuery","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"properties":{"anyOf":[{"items":{"$ref":"#/definitions/AnyPropertyFilter"},"type":"array"},{"$ref":"#/definitions/PropertyGroupFilter"}],"default":[],"description":"Property filters for all series"},"response":{"$ref":"#/definitions/TrendsQueryResponse"},"samplingFactor":{"description":"Sampling rate","type":["number","null"]},"series":{"description":"Events and actions to include","items":{"$ref":"#/definitions/AnyEntityNode"},"type":"array"},"trendsFilter":{"$ref":"#/definitions/TrendsFilter","description":"Properties specific to the trends insight"}},"required":["kind","series"],"type":"object"},"TrendsQueryResponse":{"additionalProperties":false,"properties":{"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hasMore":{"description":"Wether more breakdown values are available.","type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{"type":"object"},"type":"array"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"}},"required":["results"],"type":"object"},"VisualizationMessage":{"additionalProperties":false,"properties":{"answer":{"$ref":"#/definitions/ExperimentalAITrendsQuery"},"plan":{"type":"string"},"reasoning_steps":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}]},"type":{"const":"ai/viz","type":"string"}},"required":["type"],"type":"object"},"VizSpecificOptions":{"additionalProperties":false,"description":"Chart specific rendering options. Use ChartRenderingMetadata for non-serializable values, e.g. onClick handlers","properties":{"ActionsPie":{"additionalProperties":false,"properties":{"disableHoverOffset":{"type":"boolean"},"hideAggregation":{"type":"boolean"}},"type":"object"},"RETENTION":{"additionalProperties":false,"properties":{"hideLineGraph":{"type":"boolean"},"hideSizeColumn":{"type":"boolean"},"useSmallLayout":{"type":"boolean"}},"type":"object"}},"type":"object"},"WebAnalyticsConversionGoal":{"anyOf":[{"$ref":"#/definitions/ActionConversionGoal"},{"$ref":"#/definitions/CustomEventConversionGoal"}]},"WebAnalyticsPropertyFilter":{"anyOf":[{"$ref":"#/definitions/EventPropertyFilter"},{"$ref":"#/definitions/PersonPropertyFilter"},{"$ref":"#/definitions/SessionPropertyFilter"}]},"WebAnalyticsPropertyFilters":{"items":{"$ref":"#/definitions/WebAnalyticsPropertyFilter"},"type":"array"},"WebExternalClicksTableQuery":{"additionalProperties":false,"properties":{"conversionGoal":{"anyOf":[{"$ref":"#/definitions/WebAnalyticsConversionGoal"},{"type":"null"}]},"dateRange":{"$ref":"#/definitions/DateRange"},"filterTestAccounts":{"type":"boolean"},"kind":{"const":"WebExternalClicksTableQuery","type":"string"},"limit":{"type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"properties":{"$ref":"#/definitions/WebAnalyticsPropertyFilters"},"response":{"$ref":"#/definitions/WebExternalClicksTableQueryResponse"},"sampling":{"additionalProperties":false,"properties":{"enabled":{"type":"boolean"},"forceSamplingRate":{"$ref":"#/definitions/SamplingRate"}},"type":"object"},"stripQueryParams":{"type":"boolean"},"useSessionsTable":{"deprecated":"ignored, always treated as enabled *","type":"boolean"}},"required":["kind","properties"],"type":"object"},"WebExternalClicksTableQueryResponse":{"additionalProperties":false,"properties":{"columns":{"items":{},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hasMore":{"type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"limit":{"type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"offset":{"type":"integer"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{},"type":"array"},"samplingRate":{"$ref":"#/definitions/SamplingRate"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"},"types":{"items":{},"type":"array"}},"required":["results"],"type":"object"},"WebGoalsQuery":{"additionalProperties":false,"properties":{"conversionGoal":{"anyOf":[{"$ref":"#/definitions/WebAnalyticsConversionGoal"},{"type":"null"}]},"dateRange":{"$ref":"#/definitions/DateRange"},"filterTestAccounts":{"type":"boolean"},"kind":{"const":"WebGoalsQuery","type":"string"},"limit":{"type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"properties":{"$ref":"#/definitions/WebAnalyticsPropertyFilters"},"response":{"$ref":"#/definitions/WebGoalsQueryResponse"},"sampling":{"additionalProperties":false,"properties":{"enabled":{"type":"boolean"},"forceSamplingRate":{"$ref":"#/definitions/SamplingRate"}},"type":"object"},"useSessionsTable":{"deprecated":"ignored, always treated as enabled *","type":"boolean"}},"required":["kind","properties"],"type":"object"},"WebGoalsQueryResponse":{"additionalProperties":false,"properties":{"columns":{"items":{},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hasMore":{"type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"limit":{"type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"offset":{"type":"integer"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{},"type":"array"},"samplingRate":{"$ref":"#/definitions/SamplingRate"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"},"types":{"items":{},"type":"array"}},"required":["results"],"type":"object"},"WebOverviewItem":{"additionalProperties":false,"properties":{"changeFromPreviousPct":{"type":"number"},"isIncreaseBad":{"type":"boolean"},"key":{"type":"string"},"kind":{"enum":["unit","duration_s","percentage"],"type":"string"},"previous":{"type":"number"},"value":{"type":"number"}},"required":["key","kind"],"type":"object"},"WebOverviewQuery":{"additionalProperties":false,"properties":{"compare":{"type":"boolean"},"conversionGoal":{"anyOf":[{"$ref":"#/definitions/WebAnalyticsConversionGoal"},{"type":"null"}]},"dateRange":{"$ref":"#/definitions/DateRange"},"filterTestAccounts":{"type":"boolean"},"includeLCPScore":{"type":"boolean"},"kind":{"const":"WebOverviewQuery","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"properties":{"$ref":"#/definitions/WebAnalyticsPropertyFilters"},"response":{"$ref":"#/definitions/WebOverviewQueryResponse"},"sampling":{"additionalProperties":false,"properties":{"enabled":{"type":"boolean"},"forceSamplingRate":{"$ref":"#/definitions/SamplingRate"}},"type":"object"},"useSessionsTable":{"deprecated":"ignored, always treated as enabled *","type":"boolean"}},"required":["kind","properties"],"type":"object"},"WebOverviewQueryResponse":{"additionalProperties":false,"properties":{"dateFrom":{"type":"string"},"dateTo":{"type":"string"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hogql":{"description":"Generated HogQL query.","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{"$ref":"#/definitions/WebOverviewItem"},"type":"array"},"samplingRate":{"$ref":"#/definitions/SamplingRate"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"}},"required":["results"],"type":"object"},"WebStatsBreakdown":{"enum":["Page","InitialPage","ExitPage","ExitClick","InitialChannelType","InitialReferringDomain","InitialUTMSource","InitialUTMCampaign","InitialUTMMedium","InitialUTMTerm","InitialUTMContent","InitialUTMSourceMediumCampaign","Browser","OS","DeviceType","Country","Region","City"],"type":"string"},"WebStatsTableQuery":{"additionalProperties":false,"properties":{"breakdownBy":{"$ref":"#/definitions/WebStatsBreakdown"},"conversionGoal":{"anyOf":[{"$ref":"#/definitions/WebAnalyticsConversionGoal"},{"type":"null"}]},"dateRange":{"$ref":"#/definitions/DateRange"},"doPathCleaning":{"type":"boolean"},"filterTestAccounts":{"type":"boolean"},"includeBounceRate":{"type":"boolean"},"includeScrollDepth":{"type":"boolean"},"kind":{"const":"WebStatsTableQuery","type":"string"},"limit":{"type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"properties":{"$ref":"#/definitions/WebAnalyticsPropertyFilters"},"response":{"$ref":"#/definitions/WebStatsTableQueryResponse"},"sampling":{"additionalProperties":false,"properties":{"enabled":{"type":"boolean"},"forceSamplingRate":{"$ref":"#/definitions/SamplingRate"}},"type":"object"},"useSessionsTable":{"deprecated":"ignored, always treated as enabled *","type":"boolean"}},"required":["breakdownBy","kind","properties"],"type":"object"},"WebStatsTableQueryResponse":{"additionalProperties":false,"properties":{"columns":{"items":{},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hasMore":{"type":"boolean"},"hogql":{"description":"Generated HogQL query.","type":"string"},"limit":{"type":"integer"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"offset":{"type":"integer"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{},"type":"array"},"samplingRate":{"$ref":"#/definitions/SamplingRate"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"},"types":{"items":{},"type":"array"}},"required":["results"],"type":"object"},"WebTopClicksQuery":{"additionalProperties":false,"properties":{"conversionGoal":{"anyOf":[{"$ref":"#/definitions/WebAnalyticsConversionGoal"},{"type":"null"}]},"dateRange":{"$ref":"#/definitions/DateRange"},"filterTestAccounts":{"type":"boolean"},"kind":{"const":"WebTopClicksQuery","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"properties":{"$ref":"#/definitions/WebAnalyticsPropertyFilters"},"response":{"$ref":"#/definitions/WebTopClicksQueryResponse"},"sampling":{"additionalProperties":false,"properties":{"enabled":{"type":"boolean"},"forceSamplingRate":{"$ref":"#/definitions/SamplingRate"}},"type":"object"},"useSessionsTable":{"deprecated":"ignored, always treated as enabled *","type":"boolean"}},"required":["kind","properties"],"type":"object"},"WebTopClicksQueryResponse":{"additionalProperties":false,"properties":{"columns":{"items":{},"type":"array"},"error":{"description":"Query error. Returned only if \'explain\' or `modifiers.debug` is true. Throws an error otherwise.","type":"string"},"hogql":{"description":"Generated HogQL query.","type":"string"},"modifiers":{"$ref":"#/definitions/HogQLQueryModifiers","description":"Modifiers used when performing the query"},"query_status":{"$ref":"#/definitions/QueryStatus","description":"Query status indicates whether next to the provided data, a query is still running."},"results":{"items":{},"type":"array"},"samplingRate":{"$ref":"#/definitions/SamplingRate"},"timings":{"description":"Measured timings for different parts of the query generation process","items":{"$ref":"#/definitions/QueryTiming"},"type":"array"},"types":{"items":{},"type":"array"}},"required":["results"],"type":"object"},"YAxisSettings":{"additionalProperties":false,"properties":{"scale":{"enum":["linear","logarithmic"],"type":"string"},"startAtZero":{"description":"Whether the Y axis should start at zero","type":"boolean"}},"type":"object"}}}')}},__webpack_require__=>{var __webpack_exec__=moduleId=>__webpack_require__(__webpack_require__.s=moduleId);__webpack_require__.O(0,[73206],()=>__webpack_exec__("./storybook-config-entry.js")),__webpack_require__.O()}]); -//# sourceMappingURL=main.a422653d.iframe.bundle.js.map \ No newline at end of file +//# sourceMappingURL=main.6eed8218.iframe.bundle.js.map \ No newline at end of file diff --git a/docs/main.a422653d.iframe.bundle.js.map b/docs/main.6eed8218.iframe.bundle.js.map similarity index 99% rename from docs/main.a422653d.iframe.bundle.js.map rename to docs/main.6eed8218.iframe.bundle.js.map index 4421f1d86..384847e3a 100644 --- a/docs/main.a422653d.iframe.bundle.js.map +++ b/docs/main.6eed8218.iframe.bundle.js.map @@ -1 +1 @@ -{"version":3,"file":"main.a422653d.iframe.bundle.js","mappings":";;;;;AAyBA;;;;;;;AC+KA;AClKA;;AC2BA;ACrCA;AAUA;AAOA;AA2BA;;AA4WA;AAAA;AAAA;AAAA;AA1XA;AAOA;;;;;;;ACkCA;;AC5EA;;;;;;;;;;;ACmPA;;;;;AAeA;;;AAcA;;;;;;;AAyDA;AC9QA;AC0gBA;AACA;ACnfA;AASA;;;AAWA;AC1GA;;;AAoBA;;;AAIA;AAKA;AACA;AAGA;;AAIA;;AAEA;AAGA;AACA;AAGA;AAGA;;AAEA;;AAWA;AACA;AACA;;;;;AAiCA;;;AAIA;AAKA;;;AAGA;AACA;AAGA;AACA;AACA;;AAWA;AACA;AACA;;;AAwBA;;;AAIA;;AAMA;;AAEA;;AAEA;;AAGA;AACA;AACA;;AAUA;AACA;AACA;;;AAwBA;;;AAIA;AAKA;;AAEA;AACA;AAGA;AACA;AACA;;AAUA;AACA;AACA;;;AA6BA;;;AAIA;AAKA;;AAEA;AACA;AAGA;AACA;AACA;;AAUA;AACA;AACA;;;AA8BA;;;AAyBA;;AAuBA;;;;AAyBA;;;;;;;AAOA;;;;AAIA;AACA;AAkBA;;;AAGA;;AAEA;;;AAGA;AAUA;;;AASA;AACA;;AAEA;;;AA6BA;;AAMA;;AAWA;;AAEA;;;;;;AAMA;;AAEA;;;;AAaA;;;;;;;;;;;;;AAaA;ACxeA;;;;;;;;;;;ACyLA;;;;;;;;;;;;;;;;;;;AC8nCA;;AC/tBA;AACA;AACA;AACA;;;ACvnBA;;;;;AAKA;AACA;AACA;;;ACQA;AC0EA;;;;;ACyIA;AACA;AACA;;;;AAIA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;;AAuCA;;;;AAIA;AACA;AACA;AACA;;AAEA;;;AA0CA;;;;AAIA;AACA;AACA;;AAEA;;AAuEA;;;;AAIA;AACA;AACA;;AAEA;;;AAkCA;;;AAGA;AACA;AACA;;;AAGA;;;;AA+CA;AACA;AACA;AACA;;AAEA","sources":["webpack://posthog/./frontend/src/lib/components/ReverseProxyChecker/reverseProxyCheckerLogic.ts","webpack://posthog/./frontend/src/lib/components/AuthorizedUrlList/authorizedUrlListLogic.ts","webpack://posthog/./frontend/src/lib/components/JSSnippet.tsx","webpack://posthog/./frontend/src/lib/components/Support/SupportForm.tsx","webpack://posthog/./frontend/src/lib/components/Support/supportLogic.ts","webpack://posthog/./frontend/src/lib/components/VersionChecker/versionCheckerLogic.ts","webpack://posthog/./frontend/src/lib/lemon-ui/LemonTextArea/LemonTextAreaMarkdown.tsx","webpack://posthog/./frontend/src/queries/examples.ts","webpack://posthog/./frontend/src/scenes/paths/renderPaths.ts","webpack://posthog/./frontend/src/scenes/billing/billingLogic.tsx","webpack://posthog/./frontend/src/scenes/early-access-features/InstructionsModal.tsx","webpack://posthog/./frontend/src/scenes/feature-flags/FeatureFlagSnippets.tsx","webpack://posthog/./frontend/src/scenes/notebooks/Nodes/NotebookNodeReplayTimestamp.tsx","webpack://posthog/./frontend/src/scenes/notebooks/Notebook/SlashCommands.tsx","webpack://posthog/./ee/frontend/mobile-replay/transformer/transformers.ts","webpack://posthog/./frontend/src/scenes/session-recordings/player/sessionRecordingDataLogic.ts","webpack://posthog/./frontend/src/scenes/session-recordings/playlist/sessionRecordingsListPropertiesLogic.ts","webpack://posthog/./frontend/src/scenes/settings/organization/VerifiedDomains/ConfigureSAMLModal.tsx","webpack://posthog/./frontend/src/scenes/settings/environment/ManagedReverseProxy.tsx","webpack://posthog/./frontend/src/scenes/surveys/surveyLogic.tsx"],"sourcesContent":["import { afterMount, kea, path, reducers } from 'kea'\nimport { loaders } from 'kea-loaders'\nimport api from 'lib/api'\n\nimport { HogQLQuery, NodeKind } from '~/queries/schema'\nimport { hogql } from '~/queries/utils'\n\nimport type { reverseProxyCheckerLogicType } from './reverseProxyCheckerLogicType'\n\nconst CHECK_INTERVAL_MS = 1000 * 60 * 60 // 1 hour\n\nexport const reverseProxyCheckerLogic = kea([\n path(['components', 'ReverseProxyChecker', 'reverseProxyCheckerLogic']),\n loaders({\n hasReverseProxy: [\n false as boolean | null,\n {\n loadHasReverseProxy: async () => {\n const query: HogQLQuery = {\n kind: NodeKind.HogQLQuery,\n query: hogql`SELECT properties.$lib_custom_api_host AS lib_custom_api_host\n FROM events\n WHERE timestamp >= now() - INTERVAL 1 DAY \n AND timestamp <= now()\n ORDER BY timestamp DESC\n limit 10`,\n }\n\n const res = await api.query(query)\n return !!res.results?.find((x) => !!x[0])\n },\n },\n ],\n }),\n reducers({\n lastCheckedTimestamp: [\n 0,\n { persist: true },\n {\n loadHasReverseProxySuccess: () => Date.now(),\n },\n ],\n }),\n afterMount(({ actions, values }) => {\n if (values.lastCheckedTimestamp < Date.now() - CHECK_INTERVAL_MS) {\n actions.loadHasReverseProxy()\n }\n }),\n])\n","import Fuse from 'fuse.js'\nimport {\n actions,\n afterMount,\n connect,\n kea,\n key,\n listeners,\n path,\n props,\n reducers,\n selectors,\n sharedListeners,\n} from 'kea'\nimport { forms } from 'kea-forms'\nimport { loaders } from 'kea-loaders'\nimport { encodeParams, urlToAction } from 'kea-router'\nimport { subscriptions } from 'kea-subscriptions'\nimport api from 'lib/api'\nimport { isDomain, isURL } from 'lib/utils'\nimport { apiHostOrigin } from 'lib/utils/apiHost'\nimport { teamLogic } from 'scenes/teamLogic'\nimport { urls } from 'scenes/urls'\n\nimport { HogQLQuery, NodeKind } from '~/queries/schema'\nimport { hogql } from '~/queries/utils'\nimport { ToolbarParams, ToolbarUserIntent } from '~/types'\n\nimport type { authorizedUrlListLogicType } from './authorizedUrlListLogicType'\n\nexport interface ProposeNewUrlFormType {\n url: string\n}\n\nexport enum AuthorizedUrlListType {\n TOOLBAR_URLS = 'TOOLBAR_URLS',\n RECORDING_DOMAINS = 'RECORDING_DOMAINS',\n}\n\n/**\n * Firefox does not allow you construct a new URL with e.g. https://*.example.com (which is to be fair more standards compliant than Chrome)\n * when used to probe for e.g. for authorized urls we only care if the proposed URL has a path so we can safely replace the wildcard with a character\n * NB this changes its input and shouldn't be used for general purpose URL parsing\n */\nexport function sanitizePossibleWildCardedURL(url: string): URL {\n const deWildCardedURL = url.replace(/\\*/g, 'x')\n return new URL(deWildCardedURL)\n}\n\n/**\n * Checks if the URL has a wildcard (*) in the port position eg http://localhost:*\n */\nexport function hasPortWildcard(input: string): boolean {\n if (!input || typeof input !== 'string') {\n return false\n }\n // This regex matches URLs with a wildcard (*) in the port position\n const portWildcardRegex = /^(https?:\\/\\/[^:/]+):\\*(.*)$/\n return portWildcardRegex.test(input.trim())\n}\n\nexport const validateProposedUrl = (\n proposedUrl: string,\n currentUrls: string[],\n onlyAllowDomains: boolean = false\n): string | undefined => {\n if (!isURL(proposedUrl)) {\n return 'Please enter a valid URL'\n }\n\n if (hasPortWildcard(proposedUrl)) {\n return 'Wildcards are not allowed in the port position'\n }\n\n if (onlyAllowDomains && !isDomain(sanitizePossibleWildCardedURL(proposedUrl))) {\n return \"Please enter a valid domain (URLs with a path aren't allowed)\"\n }\n\n if (proposedUrl.indexOf('*') > -1 && !proposedUrl.match(/^(.*)\\*[^*]*\\.[^*]+\\.[^*]+$/)) {\n return 'Wildcards can only be used for subdomains'\n }\n\n if (currentUrls.indexOf(proposedUrl) > -1) {\n return `This ${onlyAllowDomains ? 'domains' : 'URL'} already is registered`\n }\n\n return\n}\n\n/** defaultIntent: whether to launch with empty intent (i.e. toolbar mode is default) */\nexport function appEditorUrl(\n appUrl: string,\n options?: { actionId?: number | null; userIntent?: ToolbarUserIntent }\n): string {\n // See https://github.com/PostHog/posthog-js/blob/f7119c/src/extensions/toolbar.ts#L52 for where these params\n // are passed. `appUrl` is an extra `redirect_to_site` param.\n const params: ToolbarParams & { appUrl: string } = {\n userIntent: options?.userIntent ?? (options?.actionId ? 'edit-action' : 'add-action'),\n // Make sure to pass the app url, otherwise the api_host will be used by\n // the toolbar, which isn't correct when used behind a reverse proxy as\n // we require e.g. SSO login to the app, which will not work when placed\n // behind a proxy unless we register each domain with the OAuth2 client.\n apiURL: apiHostOrigin(),\n appUrl,\n ...(options?.actionId ? { actionId: options.actionId } : {}),\n }\n return '/api/user/redirect_to_site/' + encodeParams(params, '?')\n}\n\nexport const checkUrlIsAuthorized = (url: string | URL, authorizedUrls: string[]): boolean => {\n try {\n const parsedUrl = typeof url === 'string' ? sanitizePossibleWildCardedURL(url) : url\n const urlWithoutPath = parsedUrl.protocol + '//' + parsedUrl.host\n // Is this domain already in the list of urls?\n const exactMatch =\n authorizedUrls.filter((authorizedUrl) => authorizedUrl.indexOf(urlWithoutPath) > -1).length > 0\n\n if (exactMatch) {\n return true\n }\n\n const wildcardMatch = !!authorizedUrls.find((authorizedUrl) => {\n // Matches something like `https://*.example.com` against the urlWithoutPath\n const regex = new RegExp(authorizedUrl.replace(/\\./g, '\\\\.').replace(/\\*/g, '.*'))\n return urlWithoutPath.match(regex)\n })\n\n if (wildcardMatch) {\n return true\n }\n } catch (error) {\n // Ignore invalid URLs\n }\n\n return false\n}\n\nexport const filterNotAuthorizedUrls = (urls: string[], authorizedUrls: string[]): string[] => {\n const suggestedDomains: string[] = []\n\n urls.forEach((url) => {\n const parsedUrl = sanitizePossibleWildCardedURL(url)\n const urlWithoutPath = parsedUrl.protocol + '//' + parsedUrl.host\n // Have we already added this domain?\n if (suggestedDomains.indexOf(urlWithoutPath) > -1) {\n return\n }\n\n if (!checkUrlIsAuthorized(parsedUrl, authorizedUrls)) {\n suggestedDomains.push(urlWithoutPath)\n }\n })\n\n return suggestedDomains\n}\n\nexport const NEW_URL = 'https://'\n\nexport interface KeyedAppUrl {\n url: string\n type: 'authorized' | 'suggestion'\n originalIndex: number\n}\n\nexport interface AuthorizedUrlListLogicProps {\n actionId: number | null\n type: AuthorizedUrlListType\n}\nexport const authorizedUrlListLogic = kea([\n path((key) => ['lib', 'components', 'AuthorizedUrlList', 'authorizedUrlListLogic', key]),\n key((props) => `${props.type}-${props.actionId}`),\n props({} as AuthorizedUrlListLogicProps),\n connect({\n values: [teamLogic, ['currentTeam', 'currentTeamId']],\n actions: [teamLogic, ['updateCurrentTeam']],\n }),\n actions(() => ({\n setAuthorizedUrls: (authorizedUrls: string[]) => ({ authorizedUrls }),\n addUrl: (url: string, launch?: boolean) => ({ url, launch }),\n newUrl: true,\n removeUrl: (index: number) => ({ index }),\n updateUrl: (index: number, url: string) => ({ index, url }),\n launchAtUrl: (url: string) => ({ url }),\n setSearchTerm: (term: string) => ({ term }),\n setEditUrlIndex: (originalIndex: number | null) => ({ originalIndex }),\n cancelProposingUrl: true,\n })),\n loaders(({ values }) => ({\n suggestions: {\n __default: [] as string[],\n loadSuggestions: async () => {\n const query: HogQLQuery = {\n kind: NodeKind.HogQLQuery,\n query: hogql`select properties.$current_url, count()\n from events\n where event = '$pageview'\n and timestamp >= now() - interval 3 day \n and timestamp <= now()\n group by properties.$current_url\n order by count() desc\n limit 25`,\n }\n\n const response = await api.query(query)\n const result = response.results as [string, number][]\n\n if (result && result.length === 0) {\n return []\n }\n\n const suggestedDomains = filterNotAuthorizedUrls(\n result.map(([url]) => url),\n values.authorizedUrls\n )\n\n return suggestedDomains.slice(0, 20)\n },\n },\n })),\n subscriptions(({ props, actions }) => ({\n currentTeam: (currentTeam) => {\n actions.setAuthorizedUrls(\n (props.type === AuthorizedUrlListType.RECORDING_DOMAINS\n ? currentTeam.recording_domains\n : currentTeam.app_urls) || []\n )\n },\n })),\n afterMount(({ actions }) => {\n actions.loadSuggestions()\n }),\n forms(({ values, actions }) => ({\n proposedUrl: {\n defaults: { url: '' } as ProposeNewUrlFormType,\n errors: ({ url }) => ({\n url: validateProposedUrl(url, values.authorizedUrls, values.onlyAllowDomains),\n }),\n submit: async ({ url }) => {\n if (values.editUrlIndex !== null && values.editUrlIndex >= 0) {\n actions.updateUrl(values.editUrlIndex, url)\n } else {\n actions.addUrl(url)\n }\n },\n },\n })),\n reducers(() => ({\n showProposedURLForm: [\n false as boolean,\n {\n newUrl: () => true,\n submitProposedUrlSuccess: () => false,\n cancelProposingUrl: () => false,\n },\n ],\n authorizedUrls: [\n [] as string[],\n {\n setAuthorizedUrls: (_, { authorizedUrls }) => authorizedUrls,\n addUrl: (state, { url }) => (!state.includes(url) ? state.concat([url]) : state),\n updateUrl: (state, { index, url }) => Object.assign([...state], { [index]: url }),\n removeUrl: (state, { index }) => {\n const newUrls = [...state]\n newUrls.splice(index, 1)\n return newUrls\n },\n },\n ],\n suggestions: [\n [],\n {\n addUrl: (state, { url }) => [...state].filter((item) => url !== item),\n },\n ],\n searchTerm: [\n '',\n {\n setSearchTerm: (_, { term }) => term,\n },\n ],\n editUrlIndex: [\n null as number | null,\n {\n setEditUrlIndex: (_, { originalIndex }) => originalIndex,\n removeUrl: (editUrlIndex, { index }) =>\n editUrlIndex && index < editUrlIndex\n ? editUrlIndex - 1\n : index === editUrlIndex\n ? null\n : editUrlIndex,\n newUrl: () => -1,\n updateUrl: () => null,\n addUrl: () => null,\n cancelProposingUrl: () => null,\n },\n ],\n })),\n sharedListeners(({ values, props }) => ({\n saveUrls: async () => {\n if (props.type === AuthorizedUrlListType.RECORDING_DOMAINS) {\n await teamLogic.asyncActions.updateCurrentTeam({ recording_domains: values.authorizedUrls })\n } else {\n await teamLogic.asyncActions.updateCurrentTeam({ app_urls: values.authorizedUrls })\n }\n },\n })),\n listeners(({ sharedListeners, values, actions }) => ({\n setEditUrlIndex: () => {\n actions.setProposedUrlValue('url', values.urlToEdit)\n },\n newUrl: () => {\n actions.setProposedUrlValue('url', NEW_URL)\n },\n addUrl: [\n sharedListeners.saveUrls,\n ({ url, launch }) => {\n if (launch) {\n actions.launchAtUrl(url)\n }\n },\n ],\n removeUrl: sharedListeners.saveUrls,\n updateUrl: sharedListeners.saveUrls,\n launchAtUrl: ({ url }) => {\n window.location.href = values.launchUrl(url)\n },\n cancelProposingUrl: () => {\n actions.resetProposedUrl()\n },\n submitProposedUrlSuccess: () => {\n actions.setEditUrlIndex(null)\n actions.resetProposedUrl()\n },\n })),\n selectors({\n urlToEdit: [\n (s) => [s.authorizedUrls, s.editUrlIndex],\n (authorizedUrls, editUrlIndex) => {\n if (editUrlIndex === null || editUrlIndex === -1) {\n return NEW_URL\n }\n return authorizedUrls[editUrlIndex]\n },\n ],\n urlsKeyed: [\n (s) => [s.authorizedUrls, s.suggestions, s.searchTerm],\n (authorizedUrls, suggestions, searchTerm): KeyedAppUrl[] => {\n const keyedUrls = authorizedUrls\n .map((url, index) => ({\n url,\n type: 'authorized',\n originalIndex: index,\n }))\n .concat(\n suggestions.map((url, index) => ({\n url,\n type: 'suggestion',\n originalIndex: index,\n }))\n ) as KeyedAppUrl[]\n\n if (!searchTerm) {\n return keyedUrls\n }\n\n return new Fuse(keyedUrls, {\n keys: ['url'],\n threshold: 0.3,\n })\n .search(searchTerm)\n .map((result) => result.item)\n },\n ],\n launchUrl: [\n (_, p) => [p.actionId],\n (actionId) => (url: string) =>\n appEditorUrl(url, {\n actionId,\n }),\n ],\n isAddUrlFormVisible: [(s) => [s.editUrlIndex], (editUrlIndex) => editUrlIndex === -1],\n onlyAllowDomains: [(_, p) => [p.type], (type) => type === AuthorizedUrlListType.RECORDING_DOMAINS],\n\n checkUrlIsAuthorized: [\n (s) => [s.authorizedUrls],\n (authorizedUrls) => (url: string) => {\n return checkUrlIsAuthorized(url, authorizedUrls)\n },\n ],\n }),\n urlToAction(({ actions }) => ({\n [urls.toolbarLaunch()]: (_, searchParams) => {\n if (searchParams.addNew) {\n actions.newUrl()\n }\n },\n })),\n])\n","import { useValues } from 'kea'\nimport { CodeSnippet, Language } from 'lib/components/CodeSnippet'\nimport { FEATURE_FLAGS } from 'lib/constants'\nimport { featureFlagLogic } from 'lib/logic/featureFlagLogic'\nimport { apiHostOrigin } from 'lib/utils/apiHost'\nimport posthog from 'posthog-js'\nimport { teamLogic } from 'scenes/teamLogic'\n\nexport function snippetFunctions(): string {\n const methods: string[] = []\n const posthogPrototype = Object.getPrototypeOf(posthog)\n for (const key of Object.getOwnPropertyNames(posthogPrototype)) {\n if (\n typeof posthogPrototype[key] === 'function' &&\n !key.startsWith('_') &&\n !['constructor', 'toString', 'push'].includes(key)\n ) {\n methods.push(key)\n }\n }\n const snippetMethods = methods.join(' ')\n\n return `!function(t,e){var o,n,p,r;e.__SV||(window.posthog=e,e._i=[],e.init=function(i,s,a){function g(t,e){var o=e.split(\".\");2==o.length&&(t=t[o[0]],e=o[1]),t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}}(p=t.createElement(\"script\")).type=\"text/javascript\",p.crossOrigin=\"anonymous\",p.async=!0,p.src=s.api_host.replace(\".i.posthog.com\",\"-assets.i.posthog.com\")+\"/static/array.js\",(r=t.getElementsByTagName(\"script\")[0]).parentNode.insertBefore(p,r);var u=e;for(void 0!==a?u=e[a]=[]:a=\"posthog\",u.people=u.people||[],u.toString=function(t){var e=\"posthog\";return\"posthog\"!==a&&(e+=\".\"+a),t||(e+=\" (stub)\"),e},u.people.toString=function(){return u.toString(1)+\".people (stub)\"},o=\"${snippetMethods}\".split(\" \"),n=0;n',\n ` ${snippetFunctions()}`,\n ` posthog.init('${currentTeam?.api_token}',{api_host:'${apiHostOrigin()}', ${\n isPersonProfilesDisabled\n ? ``\n : `person_profiles: 'identified_only' // or 'always' to create profiles for anonymous users as well`\n }\n })`,\n '',\n ]\n .map((x) => ' '.repeat(indent) + x)\n .join('\\n')\n}\n\nexport function JSSnippet(): JSX.Element {\n const snippet = useJsSnippet()\n\n return {snippet}\n}\n","import { IconBug, IconInfo, IconQuestion } from '@posthog/icons'\nimport {\n LemonInput,\n LemonSegmentedButton,\n LemonSegmentedButtonOption,\n lemonToast,\n Link,\n Tooltip,\n} from '@posthog/lemon-ui'\nimport { useActions, useValues } from 'kea'\nimport { Form } from 'kea-forms'\nimport { useUploadFiles } from 'lib/hooks/useUploadFiles'\nimport { IconFeedback } from 'lib/lemon-ui/icons'\nimport { LemonField } from 'lib/lemon-ui/LemonField'\nimport { LemonFileInput } from 'lib/lemon-ui/LemonFileInput/LemonFileInput'\nimport { LemonSelect } from 'lib/lemon-ui/LemonSelect/LemonSelect'\nimport { LemonTextArea } from 'lib/lemon-ui/LemonTextArea/LemonTextArea'\nimport { useRef } from 'react'\nimport { preflightLogic } from 'scenes/PreflightCheck/preflightLogic'\nimport { userLogic } from 'scenes/userLogic'\n\nimport {\n SEVERITY_LEVEL_TO_NAME,\n SUPPORT_TICKET_TEMPLATES,\n supportLogic,\n SupportTicketKind,\n TARGET_AREA_TO_NAME,\n} from './supportLogic'\n\nconst SUPPORT_TICKET_OPTIONS: LemonSegmentedButtonOption[] = [\n {\n value: 'support',\n label: 'Question',\n icon: ,\n },\n {\n value: 'feedback',\n label: 'Feedback',\n icon: ,\n },\n {\n value: 'bug',\n label: 'Bug',\n icon: ,\n },\n]\n\nconst SUPPORT_TICKET_KIND_TO_PROMPT: Record = {\n bug: \"What's the bug?\",\n feedback: 'What feedback do you have?',\n support: 'What can we help you with?',\n}\n\nexport function SupportForm(): JSX.Element | null {\n const { sendSupportRequest } = useValues(supportLogic)\n const { setSendSupportRequestValue } = useActions(supportLogic)\n const { objectStorageAvailable } = useValues(preflightLogic)\n // the support model can be shown when logged out, file upload is not offered to anonymous users\n const { user } = useValues(userLogic)\n // only allow authentication issues for logged out users\n\n const dropRef = useRef(null)\n\n const { setFilesToUpload, filesToUpload, uploading } = useUploadFiles({\n onUpload: (url, fileName) => {\n setSendSupportRequestValue('message', sendSupportRequest.message + `\\n\\nAttachment \"${fileName}\": ${url}`)\n },\n onError: (detail) => {\n lemonToast.error(`Error uploading image: ${detail}`)\n },\n })\n\n const changeKind = (kind: SupportTicketKind): void => {\n setSendSupportRequestValue('kind', kind)\n if (kind === 'bug') {\n setSendSupportRequestValue('severity_level', 'medium')\n } else {\n setSendSupportRequestValue('severity_level', 'low')\n }\n }\n\n return (\n \n {!user && (\n <>\n \n \n \n \n \n \n \n )}\n \n \n \n \n \n \n \n {(props) => (\n
\n \n {objectStorageAvailable && !!user && (\n \n )}\n
\n )}\n \n
\n
\n \n \n Definitions\n \n
\n \n ({\n label: value,\n value: key,\n }))}\n />\n \n
\n \n )\n}\n","import { captureException } from '@sentry/react'\nimport * as Sentry from '@sentry/react'\nimport { actions, connect, kea, listeners, path, props, reducers, selectors } from 'kea'\nimport { forms } from 'kea-forms'\nimport { urlToAction } from 'kea-router'\nimport { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast'\nimport { uuid } from 'lib/utils'\nimport posthog from 'posthog-js'\nimport { organizationLogic } from 'scenes/organizationLogic'\nimport { preflightLogic } from 'scenes/PreflightCheck/preflightLogic'\nimport { teamLogic } from 'scenes/teamLogic'\nimport { userLogic } from 'scenes/userLogic'\n\nimport { sidePanelStateLogic } from '~/layout/navigation-3000/sidepanel/sidePanelStateLogic'\nimport { AvailableFeature, OrganizationBasicType, Region, SidePanelTab, TeamPublicType, UserType } from '~/types'\n\nimport type { supportLogicType } from './supportLogicType'\nimport { openSupportModal } from './SupportModal'\n\nexport function getPublicSupportSnippet(\n cloudRegion: Region | null | undefined,\n currentOrganization: OrganizationBasicType | null,\n currentTeam: TeamPublicType | null,\n includeCurrentLocation = true\n): string {\n if (!cloudRegion) {\n return ''\n }\n return (\n (includeCurrentLocation ? getCurrentLocationLink() : '') +\n getSessionReplayLink() +\n `\\nAdmin: http://go/adminOrg${cloudRegion}/${currentOrganization?.id} (project ID ${currentTeam?.id})` +\n getSentryLink(cloudRegion, currentTeam)\n ).trimStart()\n}\n\nfunction getCurrentLocationLink(): string {\n const cleanedCurrentUrl = window.location.href.replace(/panel=support[^&]*(&)?/, '').replace(/#$/, '')\n return `\\nLocation: ${cleanedCurrentUrl}`\n}\n\nfunction getSessionReplayLink(): string {\n const replayUrl = posthog\n .get_session_replay_url({ withTimestamp: true, timestampLookBack: 30 })\n .replace(window.location.origin + '/replay/', 'http://go/session/')\n return `\\nSession: ${replayUrl}`\n}\n\nfunction getDjangoAdminLink(\n user: UserType | null,\n cloudRegion: Region | null | undefined,\n currentOrganization: OrganizationBasicType | null,\n currentTeam: TeamPublicType | null\n): string {\n if (!user || !cloudRegion) {\n return ''\n }\n const link = `http://go/admin${cloudRegion}/${user.email}`\n return `\\nAdmin: ${link} (organization ID ${currentOrganization?.id}: ${currentOrganization?.name}, project ID ${currentTeam?.id}: ${currentTeam?.name})`\n}\n\nfunction getBillingAdminLink(currentOrganization: OrganizationBasicType | null): string {\n if (!currentOrganization) {\n return ''\n }\n return `\\nBilling admin: http://go/billing/${currentOrganization.id}`\n}\n\nfunction getSentryLink(cloudRegion: Region | null | undefined, currentTeam: TeamPublicType | null): string {\n if (!cloudRegion || !currentTeam) {\n return ''\n }\n return `\\nSentry: http://go/sentry${cloudRegion}/${currentTeam.id}`\n}\n\nconst SUPPORT_TICKET_KIND_TO_TITLE: Record = {\n support: 'Contact support',\n feedback: 'Give feedback',\n bug: 'Report a bug',\n}\n\nexport const TARGET_AREA_TO_NAME = [\n {\n title: 'General',\n options: [\n {\n value: 'apps',\n 'data-attr': `support-form-target-area-apps`,\n label: 'Data pipelines',\n },\n {\n value: 'login',\n 'data-attr': `support-form-target-area-login`,\n label: 'Authentication (incl. login, sign-up, invites)',\n },\n {\n value: 'billing',\n 'data-attr': `support-form-target-area-billing`,\n label: 'Billing',\n },\n {\n value: 'onboarding',\n 'data-attr': `support-form-target-area-onboarding`,\n label: 'Onboarding',\n },\n {\n value: 'sdk',\n 'data-attr': `support-form-target-area-onboarding`,\n label: 'SDK / Implementation',\n },\n {\n value: 'cohorts',\n 'data-attr': `support-form-target-area-cohorts`,\n label: 'Cohorts',\n },\n {\n value: 'data_management',\n 'data-attr': `support-form-target-area-data_management`,\n label: 'Data management (incl. events, actions, properties)',\n },\n {\n value: 'notebooks',\n 'data-attr': `support-form-target-area-notebooks`,\n label: 'Notebooks',\n },\n {\n value: 'mobile',\n 'data-attr': `support-form-target-area-mobile`,\n label: 'Mobile',\n },\n ],\n },\n {\n title: 'Individual product',\n options: [\n {\n value: 'experiments',\n 'data-attr': `support-form-target-area-experiments`,\n label: 'Experiments',\n },\n {\n value: 'data_warehouse',\n 'data-attr': `support-form-target-area-data_warehouse`,\n label: 'Data warehouse',\n },\n {\n value: 'feature_flags',\n 'data-attr': `support-form-target-area-feature_flags`,\n label: 'Feature flags',\n },\n {\n value: 'analytics',\n 'data-attr': `support-form-target-area-analytics`,\n label: 'Product analytics (incl. insights, dashboards, annotations)',\n },\n {\n value: 'session_replay',\n 'data-attr': `support-form-target-area-session_replay`,\n label: 'Session replay (incl. recordings)',\n },\n {\n value: 'toolbar',\n 'data-attr': `support-form-target-area-toolbar`,\n label: 'Toolbar (incl. heatmaps)',\n },\n {\n value: 'surveys',\n 'data-attr': `support-form-target-area-surveys`,\n label: 'Surveys',\n },\n {\n value: 'web_analytics',\n 'data-attr': `support-form-target-area-web_analytics`,\n label: 'Web Analytics',\n },\n ],\n },\n]\n\nexport const SEVERITY_LEVEL_TO_NAME = {\n critical: 'Outage, data loss, or data breach',\n high: 'Feature is not working at all',\n medium: 'Feature not working as expected',\n low: 'Question or feature request',\n}\n\nexport const SUPPORT_KIND_TO_SUBJECT = {\n bug: 'Bug Report',\n feedback: 'Feedback',\n support: 'Support Ticket',\n}\n\nexport type SupportTicketTargetArea =\n | 'experiments'\n | 'apps'\n | 'login'\n | 'billing'\n | 'onboarding'\n | 'cohorts'\n | 'data_management'\n | 'notebooks'\n | 'data_warehouse'\n | 'feature_flags'\n | 'analytics'\n | 'session_replay'\n | 'toolbar'\n | 'surveys'\n | 'web_analytics'\nexport type SupportTicketSeverityLevel = keyof typeof SEVERITY_LEVEL_TO_NAME\nexport type SupportTicketKind = keyof typeof SUPPORT_KIND_TO_SUBJECT\n\nexport const getLabelBasedOnTargetArea = (target_area: SupportTicketTargetArea): null | string => {\n for (const category of TARGET_AREA_TO_NAME) {\n for (const option of category.options) {\n if (option.value === target_area) {\n return option.label\n }\n }\n }\n return null // Return null if the value is not found\n}\n\nexport const URL_PATH_TO_TARGET_AREA: Record = {\n insights: 'analytics',\n recordings: 'session_replay',\n replay: 'session_replay',\n dashboard: 'analytics',\n feature_flags: 'feature_flags',\n experiments: 'experiments',\n 'web-performance': 'session_replay',\n events: 'analytics',\n 'data-management': 'data_management',\n cohorts: 'cohorts',\n annotations: 'analytics',\n persons: 'analytics',\n groups: 'analytics',\n app: 'apps',\n toolbar: 'session_replay',\n warehouse: 'data_warehouse',\n surveys: 'surveys',\n web: 'web_analytics',\n}\n\nexport const SUPPORT_TICKET_TEMPLATES = {\n bug: 'Please describe the bug you saw, and how to reproduce it.\\n\\nIf the bug appeared on a specific insight or dashboard, please include a link to it.',\n feedback:\n \"If your request is due to a problem, please describe the problem as best you can.\\n\\nPlease also describe the solution you'd like to see, and any alternatives you considered.\\n\\nYou can add images below to help illustrate your request, if needed!\",\n support:\n \"Please explain as fully as possible what you're aiming to do, and what you'd like help with.\\n\\nIf your question involves an existing insight or dashboard, please include a link to it.\",\n}\n\nexport function getURLPathToTargetArea(pathname: string): SupportTicketTargetArea | null {\n const first_part = pathname.split('/')[1]\n return URL_PATH_TO_TARGET_AREA[first_part] ?? null\n}\n\nexport type SupportFormLogicProps = {\n onClose?: () => void\n}\n\nexport type SupportFormFields = {\n name: string\n email: string\n kind: SupportTicketKind\n target_area: SupportTicketTargetArea | null\n severity_level: SupportTicketSeverityLevel | null\n message: string\n isEmailFormOpen?: boolean | 'true' | 'false'\n}\n\nexport const supportLogic = kea([\n props({} as SupportFormLogicProps),\n path(['lib', 'components', 'support', 'supportLogic']),\n connect(() => ({\n values: [\n userLogic,\n ['user'],\n preflightLogic,\n ['preflight'],\n sidePanelStateLogic,\n ['sidePanelAvailable'],\n userLogic,\n ['hasAvailableFeature'],\n ],\n actions: [sidePanelStateLogic, ['openSidePanel', 'setSidePanelOptions']],\n })),\n actions(() => ({\n closeSupportForm: true,\n openSupportForm: (values: Partial) => values,\n submitZendeskTicket: (form: SupportFormFields) => form,\n updateUrlParams: true,\n openEmailForm: true,\n closeEmailForm: true,\n })),\n reducers(() => ({\n isSupportFormOpen: [\n false,\n {\n openSupportForm: () => true,\n closeSupportForm: () => false,\n },\n ],\n isEmailFormOpen: [\n false,\n {\n openEmailForm: () => true,\n closeEmailForm: () => false,\n },\n ],\n })),\n forms(({ actions, values }) => ({\n sendSupportRequest: {\n defaults: {\n name: '',\n email: '',\n kind: 'support',\n severity_level: null,\n target_area: null,\n message: '',\n } as SupportFormFields,\n errors: ({ name, email, message, kind, target_area, severity_level }) => {\n return {\n name: !values.user ? (!name ? 'Please enter your name' : '') : '',\n email: !values.user ? (!email ? 'Please enter your email' : '') : '',\n message: !message ? 'Please enter a message' : '',\n kind: !kind ? 'Please choose' : undefined,\n severity_level: !severity_level ? 'Please choose' : undefined,\n target_area: !target_area ? 'Please choose' : undefined,\n }\n },\n submit: async (formValues) => {\n // name must be present for zendesk to accept the ticket\n formValues.name = values.user?.first_name ?? formValues.name ?? 'name not set'\n formValues.email = values.user?.email ?? formValues.email ?? ''\n actions.submitZendeskTicket(formValues)\n actions.closeSupportForm()\n actions.resetSendSupportRequest()\n },\n },\n })),\n selectors({\n title: [\n (s) => [s.sendSupportRequest ?? null],\n (sendSupportRequest) =>\n sendSupportRequest.kind\n ? SUPPORT_TICKET_KIND_TO_TITLE[sendSupportRequest.kind]\n : 'Leave a message with PostHog',\n ],\n }),\n listeners(({ actions, props, values }) => ({\n updateUrlParams: async () => {\n const panelOptions = [\n values.sendSupportRequest.kind ?? '',\n values.sendSupportRequest.target_area ?? '',\n values.sendSupportRequest.severity_level ?? '',\n values.isEmailFormOpen ?? 'false',\n ].join(':')\n\n if (panelOptions !== ':') {\n actions.setSidePanelOptions(panelOptions)\n }\n },\n openSupportForm: async ({ name, email, isEmailFormOpen, kind, target_area, severity_level, message }) => {\n let area = target_area ?? getURLPathToTargetArea(window.location.pathname)\n if (!userLogic.values.user) {\n area = 'login'\n }\n kind = kind ?? 'support'\n actions.resetSendSupportRequest({\n name: name ?? '',\n email: email ?? '',\n kind,\n target_area: area,\n severity_level: severity_level ?? null,\n message: message ?? '',\n })\n\n if (isEmailFormOpen === 'true' || isEmailFormOpen === true) {\n actions.openEmailForm()\n } else {\n actions.closeEmailForm()\n }\n\n if (values.sidePanelAvailable) {\n const panelOptions = [kind ?? '', area ?? ''].join(':')\n actions.openSidePanel(SidePanelTab.Support, panelOptions === ':' ? undefined : panelOptions)\n } else {\n openSupportModal()\n }\n\n actions.updateUrlParams()\n },\n submitZendeskTicket: async ({ name, email, kind, target_area, severity_level, message }) => {\n const zendesk_ticket_uuid = uuid()\n const subject =\n SUPPORT_KIND_TO_SUBJECT[kind ?? 'support'] +\n ': ' +\n (target_area\n ? getLabelBasedOnTargetArea(target_area) ?? `${target_area} (feature preview)`\n : 'General') +\n ' (' +\n zendesk_ticket_uuid +\n ')'\n const cloudRegion = preflightLogic.values.preflight?.region\n\n const payload = {\n request: {\n requester: { name: name, email: email },\n subject: subject,\n custom_fields: [\n {\n id: 22084126888475,\n value: severity_level,\n },\n {\n id: 22129191462555,\n value: posthog.get_distinct_id(),\n },\n {\n id: 27242745654043,\n value: target_area ?? '',\n },\n {\n id: 27031528411291,\n value: userLogic?.values?.user?.organization?.id ?? '',\n },\n {\n id: 26073267652251,\n value: values.hasAvailableFeature(AvailableFeature.PRIORITY_SUPPORT)\n ? 'priority_support'\n : values.hasAvailableFeature(AvailableFeature.EMAIL_SUPPORT)\n ? 'email_support'\n : 'free_support',\n },\n ],\n comment: {\n body:\n message +\n `\\n\\n-----` +\n `\\nKind: ${kind}` +\n `\\nTarget area: ${target_area}` +\n `\\nReport event: http://go/ticketByUUID/${zendesk_ticket_uuid}` +\n getSessionReplayLink() +\n getCurrentLocationLink() +\n getDjangoAdminLink(\n userLogic.values.user,\n cloudRegion,\n organizationLogic.values.currentOrganization,\n teamLogic.values.currentTeam\n ) +\n (target_area === 'billing' || target_area === 'login' || target_area === 'onboarding'\n ? getBillingAdminLink(organizationLogic.values.currentOrganization)\n : '') +\n getSentryLink(cloudRegion, teamLogic.values.currentTeam) +\n (cloudRegion && teamLogic.values.currentTeam\n ? '\\nPersons-on-events mode for project: ' +\n (teamLogic.values.currentTeam.modifiers?.personsOnEventsMode ??\n teamLogic.values.currentTeam.default_modifiers?.personsOnEventsMode ??\n 'unknown')\n : ''),\n },\n },\n }\n\n try {\n const zendeskRequestBody = JSON.stringify(payload, undefined, 4)\n const response = await fetch('https://posthoghelp.zendesk.com/api/v2/requests.json', {\n method: 'POST',\n body: zendeskRequestBody,\n headers: { 'Content-Type': 'application/json' },\n })\n if (!response.ok) {\n const error = new Error(`There was an error creating the support ticket with zendesk.`)\n const extra: Record = { zendeskBody: zendeskRequestBody }\n Object.entries(payload).forEach(([key, value]) => {\n extra[`payload_${key}`] = value\n })\n const body = await response.text()\n const contexts = {\n response: {\n status_code: response.status,\n data: body,\n body_size: body?.length,\n },\n }\n captureException(error, {\n extra,\n contexts,\n })\n lemonToast.error(`There was an error sending the message.`)\n return\n }\n\n const json = await response.json()\n\n const zendesk_ticket_id = json.request.id\n const zendesk_ticket_link = `https://posthoghelp.zendesk.com/agent/tickets/${zendesk_ticket_id}`\n const properties = {\n zendesk_ticket_uuid,\n kind,\n target_area,\n message,\n zendesk_ticket_id,\n zendesk_ticket_link,\n }\n posthog.capture('support_ticket', properties)\n Sentry.captureMessage('User submitted Zendesk ticket', {\n tags: {\n zendesk_ticket_uuid,\n zendesk_ticket_link,\n support_request_kind: kind,\n support_request_area: target_area,\n team_id: teamLogic.values.currentTeamId,\n },\n extra: properties,\n level: 'log',\n })\n lemonToast.success(\"Got the message! If we have follow-up information for you, we'll reply via email.\")\n } catch (e) {\n captureException(e)\n lemonToast.error(`There was an error sending the message.`)\n }\n },\n\n closeSupportForm: () => {\n props.onClose?.()\n },\n\n setSendSupportRequestValue: () => {\n actions.updateUrlParams()\n },\n })),\n\n urlToAction(({ actions, values }) => ({\n '*': (_, _search, hashParams) => {\n if (values.isSupportFormOpen) {\n return\n }\n\n const [panel, ...panelOptions] = (hashParams['panel'] ?? '').split(':')\n\n if (panel === SidePanelTab.Support) {\n const [kind, area, severity, isEmailFormOpen] = panelOptions\n\n actions.openSupportForm({\n kind: Object.keys(SUPPORT_KIND_TO_SUBJECT).includes(kind) ? kind : null,\n target_area: getLabelBasedOnTargetArea(area) ? area : null,\n severity_level: Object.keys(SEVERITY_LEVEL_TO_NAME).includes(severity) ? severity : null,\n isEmailFormOpen: isEmailFormOpen ?? 'false',\n })\n return\n }\n\n // Legacy supportModal param\n if ('supportModal' in hashParams) {\n const [kind, area, severity] = (hashParams['supportModal'] || '').split(':')\n\n actions.openSupportForm({\n kind: Object.keys(SUPPORT_KIND_TO_SUBJECT).includes(kind) ? kind : null,\n target_area: Object.keys(TARGET_AREA_TO_NAME).includes(area) ? area : null,\n severity_level: Object.keys(SEVERITY_LEVEL_TO_NAME).includes(severity) ? severity : null,\n })\n }\n },\n })),\n])\n","import { actions, afterMount, kea, key, listeners, path, props, reducers, sharedListeners } from 'kea'\nimport { loaders } from 'kea-loaders'\nimport api from 'lib/api'\nimport { isNotNil } from 'lib/utils'\nimport {\n diffVersions,\n highestVersion,\n isEqualVersion,\n parseVersion,\n SemanticVersion,\n tryParseVersion,\n versionToString,\n} from 'lib/utils/semver'\n\nimport { HogQLQuery, NodeKind } from '~/queries/schema'\nimport { hogql } from '~/queries/utils'\n\nimport type { versionCheckerLogicType } from './versionCheckerLogicType'\n\n// If you would like to deprecate all posthog-js versions older than a specific version\n// (i.e. after fixing an important bug) please edit\n// https://github.com/PostHog/posthog-js/blob/main/deprecation.json\n\nconst CHECK_INTERVAL_MS = 1000 * 60 * 60 * 6 // 6 hour\n\nexport type SDKVersion = {\n version: SemanticVersion\n timestamp?: string\n}\n\nexport type SDKVersionWarning = {\n latestUsedVersion: string\n latestAvailableVersion: string\n numVersionsBehind?: number\n level: 'warning' | 'info' | 'error'\n}\n\nexport interface PosthogJSDeprecation {\n deprecateBeforeVersion?: string\n deprecateOlderThanDays?: number\n}\n\nexport interface AvailableVersions {\n sdkVersions?: SemanticVersion[]\n deprecation?: PosthogJSDeprecation\n}\n\nexport interface VersionCheckerLogicProps {\n teamId: number | null\n}\n\nexport const versionCheckerLogic = kea([\n props({ teamId: null } as VersionCheckerLogicProps),\n key(({ teamId }) => teamId || 'no-team-id'),\n path((key) => ['components', 'VersionChecker', 'versionCheckerLogic', key]),\n actions({\n setVersionWarning: (versionWarning: SDKVersionWarning | null) => ({ versionWarning }),\n setSdkVersions: (sdkVersions: SDKVersion[]) => ({ sdkVersions }),\n }),\n loaders(({ values }) => ({\n availableVersions: [\n {} as AvailableVersions,\n {\n loadAvailableVersions: async (): Promise => {\n // Make both requests simultaneously and don't return until both have finished, to avoid a flash\n // of partial results in the UI.\n const availableVersionsPromise: Promise = fetch(\n 'https://api.github.com/repos/posthog/posthog-js/tags'\n )\n .then((r) => r.json())\n .then((r) => r.map((x: any) => tryParseVersion(x.name)).filter(isNotNil))\n const deprecationPromise: Promise = fetch(\n 'https://raw.githubusercontent.com/PostHog/posthog-js/main/deprecation.json'\n ).then((r) => r.json())\n const settled = await Promise.allSettled([availableVersionsPromise, deprecationPromise])\n const availableVersions = settled[0].status === 'fulfilled' ? settled[0].value : []\n const deprecation = settled[1].status === 'fulfilled' ? settled[1].value : {}\n // if one or more of the requests failed, merge in the previous value if we have one\n return {\n ...values.availableVersions,\n sdkVersions: availableVersions,\n deprecation: deprecation,\n }\n },\n },\n ],\n usedVersions: [\n null as SDKVersion[] | null,\n {\n loadUsedVersions: async () => {\n const query: HogQLQuery = {\n kind: NodeKind.HogQLQuery,\n query: hogql`SELECT properties.$lib_version AS lib_version, max(timestamp) AS latest_timestamp, count(lib_version) as count\n FROM events\n WHERE timestamp >= now() - INTERVAL 1 DAY \n AND timestamp <= now()\n AND properties.$lib = 'web'\n GROUP BY lib_version\n ORDER BY latest_timestamp DESC\n limit 10`,\n }\n\n const res = await api.query(query, undefined, undefined, true)\n\n return (\n res.results\n ?.map((x) => {\n const version = tryParseVersion(x[0])\n if (!version) {\n return null\n }\n return {\n version,\n timestamp: x[1],\n }\n })\n .filter(isNotNil) ?? null\n )\n },\n },\n ],\n })),\n\n reducers({\n lastCheckTimestamp: [\n 0,\n { persist: true },\n {\n loadUsedVersionsSuccess: () => Date.now(),\n },\n ],\n versionWarning: [\n null as SDKVersionWarning | null,\n // bumping cache key due to an incorrect tag being cached on 2024-02-12\n { persist: true, prefix: '2024-02-12' },\n {\n setVersionWarning: (_, { versionWarning }) => versionWarning,\n },\n ],\n }),\n\n sharedListeners(({ values, actions }) => ({\n checkForVersionWarning: () => {\n if (!values.usedVersions?.length) {\n return\n }\n const { deprecation, sdkVersions } = values.availableVersions\n\n // We want the highest semantic version to be the latest used one, rather than\n // the one with the latest timestamp, because secondary installations can spew old versions\n const latestUsedVersion = highestVersion(values.usedVersions.map((v) => v.version))\n\n // the latest version published on github\n const latestAvailableVersion = sdkVersions?.[0]\n\n // the version where, anything before this deprecated (i.e. this version is allowed, before it is not)\n const deprecateBeforeVersion = deprecation?.deprecateBeforeVersion\n ? parseVersion(deprecation.deprecateBeforeVersion)\n : null\n\n let warning: SDKVersionWarning | null = null\n\n if (deprecateBeforeVersion) {\n const diff = diffVersions(deprecateBeforeVersion, latestUsedVersion)\n // if they are behind the deprecatedBeforeVersion by any amount, show an error\n if (diff && diff.diff > 0) {\n warning = {\n latestUsedVersion: versionToString(latestUsedVersion),\n latestAvailableVersion: versionToString(latestAvailableVersion || deprecateBeforeVersion),\n level: 'error',\n }\n }\n }\n\n if (!warning && sdkVersions && latestAvailableVersion) {\n const diff = diffVersions(latestAvailableVersion, latestUsedVersion)\n if (diff && diff.diff > 0) {\n // there's a difference between the latest used version and the latest available version\n\n let numVersionsBehind = sdkVersions.findIndex((v) => isEqualVersion(v, latestUsedVersion))\n if (numVersionsBehind === -1) {\n // if we couldn't find the versions, use the length of the list as a fallback\n numVersionsBehind = sdkVersions.length - 1\n }\n if (numVersionsBehind < diff.diff) {\n // we might have deleted versions, but if the actual diff is X then we must be at least X versions behind\n numVersionsBehind = diff.diff\n }\n\n let level: 'warning' | 'info' | 'error' | undefined\n if (diff.kind === 'major' || numVersionsBehind >= 20) {\n level = 'error'\n } else if (diff.kind === 'minor' && diff.diff >= 15) {\n level = 'warning'\n } else if ((diff.kind === 'minor' && diff.diff >= 10) || numVersionsBehind >= 10) {\n level = 'info'\n } else if (latestUsedVersion.extra) {\n // if we have an extra (alpha/beta/rc/etc.) version, we should always show a warning if they aren't on the latest\n level = 'warning'\n } else {\n // don't warn for a small number of patch versions behind\n level = undefined\n }\n\n // we check if there is a \"latest user version string\" to avoid returning odd data in unexpected cases\n if (level && !!versionToString(latestUsedVersion).trim().length) {\n warning = {\n latestUsedVersion: versionToString(latestUsedVersion),\n latestAvailableVersion: versionToString(latestAvailableVersion),\n level,\n numVersionsBehind,\n }\n }\n }\n }\n\n actions.setVersionWarning(warning)\n },\n })),\n\n listeners(({ sharedListeners }) => ({\n loadAvailableVersionsSuccess: sharedListeners.checkForVersionWarning,\n loadUsedVersionsSuccess: sharedListeners.checkForVersionWarning,\n })),\n\n afterMount(({ actions, values }) => {\n if (values.lastCheckTimestamp < Date.now() - CHECK_INTERVAL_MS) {\n actions.loadAvailableVersions()\n actions.loadUsedVersions()\n }\n }),\n])\n","import { useValues } from 'kea'\nimport { TextContent } from 'lib/components/Cards/TextCard/TextCard'\nimport { useUploadFiles } from 'lib/hooks/useUploadFiles'\nimport { IconMarkdown, IconTools } from 'lib/lemon-ui/icons'\nimport { LemonFileInput } from 'lib/lemon-ui/LemonFileInput'\nimport { LemonTabs } from 'lib/lemon-ui/LemonTabs'\nimport { LemonTextArea, LemonTextAreaProps } from 'lib/lemon-ui/LemonTextArea/LemonTextArea'\nimport { lemonToast } from 'lib/lemon-ui/LemonToast'\nimport { Link } from 'lib/lemon-ui/Link'\nimport { Tooltip } from 'lib/lemon-ui/Tooltip'\nimport posthog from 'posthog-js'\nimport React, { useRef, useState } from 'react'\nimport { preflightLogic } from 'scenes/PreflightCheck/preflightLogic'\n\nexport const LemonTextAreaMarkdown = React.forwardRef(\n function _LemonTextAreaMarkdown({ value, onChange, ...editAreaProps }, ref): JSX.Element {\n const { objectStorageAvailable } = useValues(preflightLogic)\n\n const [isPreviewShown, setIsPreviewShown] = useState(false)\n const dropRef = useRef(null)\n\n const { setFilesToUpload, filesToUpload, uploading } = useUploadFiles({\n onUpload: (url, fileName) => {\n onChange?.(value + `\\n\\n![${fileName}](${url})`)\n posthog.capture('markdown image uploaded', { name: fileName })\n },\n onError: (detail) => {\n posthog.capture('markdown image upload failed', { error: detail })\n lemonToast.error(`Error uploading image: ${detail}`)\n },\n })\n\n return (\n setIsPreviewShown(key === 'preview')}\n tabs={[\n {\n key: 'write',\n label: 'Write',\n content: (\n
\n \n
\n \n Markdown formatting support\n
\n {objectStorageAvailable ? (\n \n ) : (\n
\n \n \n \n \n \n \n Add external images using{' '}\n \n {' '}\n Markdown image links\n \n .\n \n
\n )}\n
\n ),\n },\n {\n key: 'preview',\n label: 'Preview',\n content: value ? (\n \n ) : (\n Nothing to preview\n ),\n },\n ]}\n />\n )\n }\n)\n","// This file contains example queries, used in storybook and in the /query interface.\nimport { defaultDataTableColumns } from '~/queries/nodes/DataTable/utils'\nimport {\n ActionsNode,\n DataTableNode,\n DataVisualizationNode,\n EventsNode,\n EventsQuery,\n FunnelsQuery,\n HogQLQuery,\n HogQuery,\n InsightVizNode,\n LifecycleQuery,\n Node,\n NodeKind,\n PathsQuery,\n PersonsNode,\n RetentionQuery,\n StickinessQuery,\n TrendsQuery,\n} from '~/queries/schema'\nimport {\n ChartDisplayType,\n FilterLogicalOperator,\n PropertyFilterType,\n PropertyGroupFilter,\n PropertyOperator,\n StepOrderValue,\n} from '~/types'\n\nconst Events: EventsQuery = {\n kind: NodeKind.EventsQuery,\n select: defaultDataTableColumns(NodeKind.EventsQuery),\n properties: [\n { type: PropertyFilterType.Event, key: '$browser', operator: PropertyOperator.Exact, value: 'Chrome' },\n ],\n after: '-24h',\n limit: 100,\n}\n\nconst EventsTable: DataTableNode = {\n kind: NodeKind.DataTableNode,\n source: Events,\n}\nconst EventsTableFull: DataTableNode = {\n kind: NodeKind.DataTableNode,\n full: true,\n source: Events,\n}\n\nconst TotalEvents: EventsQuery = {\n kind: NodeKind.EventsQuery,\n select: ['count()'],\n}\n\nexport const TotalEventsTable: DataTableNode = {\n kind: NodeKind.DataTableNode,\n full: true,\n source: TotalEvents,\n}\n\nconst PropertyFormulas: EventsQuery = {\n kind: NodeKind.EventsQuery,\n select: [\n '1 + 2 + 3',\n 'event',\n 'person.created_at',\n \"concat(properties['$browser'], ' 💚 ', properties['$geoip_city_name']) -- Browser 💚 City\",\n \"'random string'\",\n ],\n limit: 100,\n}\n\nconst PropertyFormulasTable: DataTableNode = {\n kind: NodeKind.DataTableNode,\n full: true,\n source: PropertyFormulas,\n}\n\nconst EventAggregations: DataTableNode = {\n kind: NodeKind.DataTableNode,\n full: true,\n source: {\n kind: NodeKind.EventsQuery,\n select: [\n \"concat(properties['$geoip_city_name'], ' ', 'Rocks') -- City\",\n 'event',\n 'count() + 100000 -- Inflamed total',\n '1 + 2',\n ],\n orderBy: ['-count()'],\n },\n}\n\nconst Persons: PersonsNode = {\n kind: NodeKind.PersonsNode,\n properties: [\n { type: PropertyFilterType.Person, key: '$browser', operator: PropertyOperator.Exact, value: 'Chrome' },\n ],\n}\n\nconst PersonsTable: DataTableNode = {\n kind: NodeKind.DataTableNode,\n columns: defaultDataTableColumns(NodeKind.PersonsNode),\n source: Persons,\n}\n\nconst PersonsTableFull: DataTableNode = {\n kind: NodeKind.DataTableNode,\n full: true,\n columns: defaultDataTableColumns(NodeKind.PersonsNode),\n source: Persons,\n}\n\nconst properties: PropertyGroupFilter = {\n type: FilterLogicalOperator.And,\n values: [\n {\n type: FilterLogicalOperator.Or,\n values: [\n {\n type: PropertyFilterType.Event,\n key: '$current_url',\n operator: PropertyOperator.Exact,\n value: ['https://hedgebox.net/files/'],\n },\n {\n type: PropertyFilterType.Event,\n key: '$geoip_country_code',\n operator: PropertyOperator.Exact,\n value: ['US', 'AU'],\n },\n ],\n },\n ],\n}\n\nconst filterTestAccounts = false\nconst series: (EventsNode | ActionsNode)[] = [\n {\n kind: NodeKind.EventsNode,\n name: '$pageview',\n custom_name: 'Views',\n event: '$pageview',\n properties: [\n {\n type: PropertyFilterType.Event,\n key: '$browser',\n operator: PropertyOperator.Exact,\n value: 'Chrome',\n },\n {\n type: PropertyFilterType.Cohort,\n key: 'id',\n operator: PropertyOperator.In,\n value: 2,\n },\n ],\n },\n // {\n // kind: NodeKind.ActionsNode,\n // id: 1,\n // name: 'Interacted with file',\n // custom_name: 'Interactions',\n // properties: [\n // {\n // type: PropertyFilterType.Event,\n // key: '$geoip_country_code',\n // operator: PropertyOperator.Exact,\n // value: ['US'],\n // },\n // ],\n // math: PropertyMathType.Average,\n // math_property: '$session_duration',\n // },\n]\n\nconst InsightTrendsQuery: TrendsQuery = {\n kind: NodeKind.TrendsQuery,\n properties,\n filterTestAccounts,\n interval: 'day',\n dateRange: {\n date_from: '-7d',\n },\n series,\n trendsFilter: {\n display: ChartDisplayType.ActionsAreaGraph,\n },\n breakdownFilter: {\n breakdown: '$geoip_country_code',\n breakdown_type: 'event',\n },\n}\n\nconst InsightFunnelsQuery: FunnelsQuery = {\n kind: NodeKind.FunnelsQuery,\n properties,\n filterTestAccounts,\n interval: 'day',\n dateRange: {\n date_from: '-7d',\n },\n series,\n funnelsFilter: {\n funnelOrderType: StepOrderValue.ORDERED,\n },\n breakdownFilter: {\n breakdown: '$geoip_country_code',\n breakdown_type: 'event',\n },\n}\n\nconst InsightRetentionQuery: RetentionQuery = {\n kind: NodeKind.RetentionQuery,\n properties,\n filterTestAccounts,\n retentionFilter: {\n // TODO: this should be typed as (EventsNode | ActionsNode)[] without math and properties\n targetEntity: { type: 'events', id: '$pageview', name: '$pageview' },\n returningEntity: { type: 'events', id: '$pageview', name: '$pageview' },\n },\n}\n\nconst InsightPathsQuery: PathsQuery = {\n kind: NodeKind.PathsQuery,\n properties,\n filterTestAccounts,\n pathsFilter: {},\n}\n\nconst InsightStickinessQuery: StickinessQuery = {\n kind: NodeKind.StickinessQuery,\n properties,\n filterTestAccounts,\n interval: 'day',\n dateRange: {\n date_from: '-7d',\n },\n series,\n stickinessFilter: {},\n}\n\nconst InsightLifecycleQuery: LifecycleQuery = {\n kind: NodeKind.LifecycleQuery,\n properties,\n filterTestAccounts,\n dateRange: {\n date_from: '-7d',\n },\n series, // TODO: Visualization only supports one event or action\n}\n\nconst HogQLRaw: HogQLQuery = {\n kind: NodeKind.HogQLQuery,\n query: ` select event,\n person.properties.email,\n properties.$browser,\n count()\n from events\n where {filters} -- replaced with global date and property filters\n and person.properties.email is not null\n group by event,\n properties.$browser,\n person.properties.email\n order by count() desc\n limit 100`,\n filters: {\n dateRange: {\n date_from: '-24h',\n },\n },\n}\n\nconst HogQLForDataVisualization: HogQLQuery = {\n kind: NodeKind.HogQLQuery,\n query: `select toDate(timestamp) as timestamp, count()\nfrom events\nwhere {filters} and timestamp <= now()\ngroup by timestamp\norder by timestamp asc\nlimit 100`,\n explain: true,\n filters: {\n dateRange: {\n date_from: '-7d',\n },\n },\n}\n\nconst HogQLForDataWarehouse: HogQLQuery = {\n kind: NodeKind.HogQLQuery,\n query: `select toDate(timestamp) as timestamp, count()\nfrom events\ngroup by timestamp\nlimit 100`,\n explain: true,\n}\n\nconst DataWarehouse: DataVisualizationNode = {\n kind: NodeKind.DataVisualizationNode,\n source: HogQLForDataWarehouse,\n}\n\nconst HogQLTable: DataTableNode = {\n kind: NodeKind.DataTableNode,\n full: true,\n source: HogQLRaw,\n}\n\nconst DataVisualization: DataVisualizationNode = {\n kind: NodeKind.DataVisualizationNode,\n source: HogQLForDataVisualization,\n tableSettings: {\n columns: [\n {\n column: 'timestamp',\n settings: {\n formatting: {\n prefix: '',\n suffix: '',\n },\n },\n },\n {\n column: 'count()',\n settings: {\n formatting: {\n prefix: '',\n suffix: '',\n },\n },\n },\n ],\n },\n chartSettings: { goalLines: undefined },\n}\n\nconst Hog: HogQuery = {\n kind: NodeKind.HogQuery,\n code: 'return 1 + 2;',\n}\n\nconst Hoggonacci: HogQuery = {\n kind: NodeKind.HogQuery,\n code: `fn fibonacci(number) {\n if (number < 2) {\n return number;\n } else {\n return fibonacci(number - 1) + fibonacci(number - 2);\n }\n}\nreturn fibonacci(16);`,\n}\n/* a subset of examples including only those we can show all users and that don't use HogQL */\nexport const queryExamples: Record = {\n Events,\n EventsTable,\n EventsTableFull,\n TotalEventsTable,\n PropertyFormulasTable,\n EventAggregations,\n Persons,\n PersonsTable,\n PersonsTableFull,\n InsightTrendsQuery,\n InsightTrends: { kind: NodeKind.InsightVizNode, source: InsightTrendsQuery } as InsightVizNode,\n InsightFunnelsQuery,\n InsightFunnels: { kind: NodeKind.InsightVizNode, source: InsightFunnelsQuery } as InsightVizNode,\n InsightRetentionQuery,\n InsightRetention: {\n kind: NodeKind.InsightVizNode,\n source: InsightRetentionQuery,\n } as InsightVizNode,\n InsightPathsQuery,\n InsightPaths: { kind: NodeKind.InsightVizNode, source: InsightPathsQuery } as InsightVizNode,\n InsightStickinessQuery,\n InsightStickiness: {\n kind: NodeKind.InsightVizNode,\n source: InsightStickinessQuery,\n } as InsightVizNode,\n InsightLifecycleQuery,\n InsightLifecycle: {\n kind: NodeKind.InsightVizNode,\n source: InsightLifecycleQuery,\n } as InsightVizNode,\n}\n\nexport const stringifiedQueryExamples: Record = Object.fromEntries(\n Object.entries(queryExamples).map(([key, node]) => [key, JSON.stringify(node)])\n)\n\nexport const examples: Record = {\n ...queryExamples,\n HogQLRaw,\n HogQLTable,\n DataVisualization,\n Hog,\n Hoggonacci,\n DataWarehouse,\n}\n\nexport const stringifiedExamples: Record = Object.fromEntries(\n Object.entries(examples).map(([key, node]) => [key, JSON.stringify(node)])\n)\n","import * as d3 from 'd3'\nimport * as Sankey from 'd3-sankey'\nimport { D3Selector } from 'lib/hooks/useD3'\nimport { stripHTTP } from 'lib/utils'\nimport { Dispatch, RefObject, SetStateAction } from 'react'\n\nimport { FunnelPathsFilter, PathsFilter } from '~/queries/schema'\n\nimport { FALLBACK_CANVAS_WIDTH, HIDE_PATH_CARD_HEIGHT } from './Paths'\nimport { PathNode } from './pathsDataLogic'\nimport { isSelectedPathStartOrEnd, PathNodeData, PathTargetLink, roundedRect } from './pathUtils'\n\nconst createCanvas = (canvasRef: RefObject, width: number, height: number): D3Selector => {\n return d3\n .select(canvasRef.current)\n .append('svg')\n .classed('Paths__canvas', true)\n .style('background', 'var(--item-background)')\n .style('width', `${width}px`)\n .style('height', `${height}px`)\n}\n\nconst createSankey = (width: number, height: number): Sankey.SankeyLayout => {\n // @ts-expect-error - d3 sankey typing things\n return new Sankey.sankey()\n .nodeId((d: PathNodeData) => d.name)\n .nodeAlign(Sankey.sankeyJustify)\n .nodeSort(null)\n .nodeWidth(15)\n .size([width, height])\n}\n\nconst appendPathNodes = (\n svg: any,\n nodes: PathNodeData[],\n pathsFilter: PathsFilter,\n funnelPathsFilter: FunnelPathsFilter,\n setNodeCards: Dispatch>\n): void => {\n svg.append('g')\n .selectAll('rect')\n .data(nodes)\n .join('rect')\n .attr('x', (d: PathNodeData) => d.x0 + 1)\n .attr('y', (d: PathNodeData) => d.y0)\n .attr('height', (d: PathNodeData) => d.y1 - d.y0)\n .attr('width', (d: PathNodeData) => d.x1 - d.x0 - 2)\n .attr('fill', (d: PathNodeData) => {\n let c\n for (const link of d.sourceLinks) {\n if (c === undefined) {\n c = link.color\n } else if (c !== link.color) {\n c = null\n }\n }\n if (c === undefined) {\n for (const link of d.targetLinks) {\n if (c === undefined) {\n c = link.color\n } else if (c !== link.color) {\n c = null\n }\n }\n }\n if (isSelectedPathStartOrEnd(pathsFilter, funnelPathsFilter, d)) {\n return d3.color('purple')\n }\n const startNodeColor = c && d3.color(c) ? d3.color(c) : d3.color('#5375ff')\n return startNodeColor\n })\n .on('mouseover', (_event: MouseEvent, data: PathNodeData) => {\n if (data.y1 - data.y0 > HIDE_PATH_CARD_HEIGHT) {\n return\n }\n setNodeCards(\n nodes.map((node: PathNodeData) =>\n node.index === data.index\n ? { ...node, visible: true }\n : { ...node, visible: node.y1 - node.y0 > HIDE_PATH_CARD_HEIGHT }\n )\n )\n })\n .append('title')\n .text((d: PathNodeData) => `${stripHTTP(d.name)}\\n${d.value.toLocaleString()}`)\n}\n\nconst appendDropoffs = (svg: D3Selector): void => {\n const dropOffGradient = svg\n .append('defs')\n .append('linearGradient')\n .attr('id', 'dropoff-gradient')\n .attr('gradientTransform', 'rotate(90)')\n\n dropOffGradient.append('stop').attr('offset', '0%').attr('stop-color', 'rgba(220,53,69,0.7)')\n\n dropOffGradient.append('stop').attr('offset', '100%').attr('stop-color', 'var(--bg-light)')\n}\n\nconst appendPathLinks = (\n svg: any,\n links: PathNodeData[],\n nodes: PathNodeData[],\n setNodeCards: Dispatch>\n): void => {\n const link = svg\n .append('g')\n .attr('fill', 'none')\n .selectAll('g')\n .data(links)\n .join('g')\n .attr('stroke', 'var(--primary)')\n .attr('opacity', 0.35)\n\n link.append('path')\n .attr('d', Sankey.sankeyLinkHorizontal())\n .attr('id', (d: PathNodeData) => `path-${d.index}`)\n .attr('stroke-width', (d: PathNodeData) => {\n return Math.max(1, d.width)\n })\n .on('mouseover', (_event: MouseEvent, data: PathNodeData) => {\n svg.select(`#path-${data.index}`).attr('stroke', 'blue')\n if (data?.source?.targetLinks.length === 0) {\n return\n }\n const nodesToColor = [data.source]\n const pathCardsToShow: number[] = []\n while (nodesToColor.length > 0) {\n const _node = nodesToColor.pop()\n _node?.targetLinks.forEach((_link: PathTargetLink) => {\n svg.select(`#path-${_link.index}`).attr('stroke', 'blue')\n nodesToColor.push(_link.source)\n pathCardsToShow.push(_link.source.index)\n })\n }\n const pathCards = [data.target]\n pathCardsToShow.push(data.target.index, data.source.index)\n while (pathCards.length > 0) {\n const node = pathCards.pop()\n node?.sourceLinks.forEach((l: PathTargetLink) => {\n pathCards.push(l.target)\n pathCardsToShow.push(l.target.index)\n })\n }\n setNodeCards(\n nodes.map((node: PathNodeData) => ({\n ...node,\n ...{\n visible: pathCardsToShow.includes(node.index)\n ? true\n : node.y1 - node.y0 > HIDE_PATH_CARD_HEIGHT,\n },\n }))\n )\n })\n .on('mouseleave', () => {\n svg.selectAll('path').attr('stroke', 'var(--primary)')\n })\n\n link.append('g')\n .append('path')\n .attr('d', (data: PathNodeData) => {\n if (data.source.layer === 0) {\n return\n }\n const _height =\n data.source.y1 - data.source.y0 - data.source.sourceLinks.reduce((prev, curr) => prev + curr.width, 0)\n return roundedRect(0, 0, 30, _height, Math.min(25, _height), false, true, false, false)\n })\n .attr('fill', 'url(#dropoff-gradient)')\n .attr('stroke-width', 0)\n .attr('transform', (data: PathNodeData) => {\n return (\n 'translate(' +\n Math.round(data.source.x1) +\n ',' +\n Math.round(data.source.y0 + data.source.sourceLinks.reduce((prev, curr) => prev + curr.width, 0)) +\n ')'\n )\n })\n}\n\nconst addChartAxisLines = (svg: D3Selector, height: number, nodes: PathNodeData[], maxLayer: number): void => {\n if (maxLayer > 5) {\n const arr = [...Array(maxLayer)]\n const minWidthApart = nodes[1].x0 - nodes[0].x0\n arr.forEach((_, i) => {\n svg.append('line')\n .style('stroke', 'var(--border)')\n .attr('stroke-width', 2)\n .attr('x1', minWidthApart * (i + 1) - 20)\n .attr('y1', 0)\n .attr('x2', minWidthApart * (i + 1) - 20)\n .attr('y2', height)\n })\n }\n}\n\nexport function renderPaths(\n canvasRef: RefObject,\n canvasWidth: number,\n canvasHeight: number,\n paths: { links: PathNode[]; nodes: any[] },\n pathsFilter: PathsFilter,\n funnelPathsFilter: FunnelPathsFilter,\n setNodeCards: Dispatch>\n): void {\n if (!paths || paths.nodes.length === 0) {\n return\n }\n\n const maxLayer = paths.links.reduce((prev, curr) => {\n // @ts-expect-error - sometimes target is an object instead of string\n const currNum = curr.target.name || curr.target\n return Math.max(prev, Number(currNum.match(/[^_]*/)))\n }, 0)\n\n const minWidth = canvasWidth > FALLBACK_CANVAS_WIDTH || maxLayer < 3 ? canvasWidth : FALLBACK_CANVAS_WIDTH\n\n const width = maxLayer > 5 && canvasWidth ? (minWidth / 5) * maxLayer : minWidth\n const height = canvasHeight\n\n const svg = createCanvas(canvasRef, width, height)\n const sankey = createSankey(width, height)\n const { nodes, links } = sankey({\n nodes: paths.nodes.map((d) => ({ ...d })),\n links: paths.links.map((d) => ({ ...d })),\n })\n\n setNodeCards(nodes.map((node: PathNodeData) => ({ ...node, visible: node.y1 - node.y0 > HIDE_PATH_CARD_HEIGHT })))\n\n appendPathNodes(svg, nodes, pathsFilter, funnelPathsFilter, setNodeCards)\n appendDropoffs(svg)\n appendPathLinks(svg, links, nodes, setNodeCards)\n addChartAxisLines(svg, height, nodes, maxLayer)\n}\n","import { LemonDialog, lemonToast, Link } from '@posthog/lemon-ui'\nimport { actions, afterMount, connect, kea, listeners, path, reducers, selectors } from 'kea'\nimport { FieldNamePath, forms } from 'kea-forms'\nimport { loaders } from 'kea-loaders'\nimport { router, urlToAction } from 'kea-router'\nimport api, { getJSONOrNull } from 'lib/api'\nimport { FEATURE_FLAGS } from 'lib/constants'\nimport { dayjs } from 'lib/dayjs'\nimport { LemonBannerAction } from 'lib/lemon-ui/LemonBanner/LemonBanner'\nimport { lemonBannerLogic } from 'lib/lemon-ui/LemonBanner/lemonBannerLogic'\nimport { LemonButtonPropsBase } from 'lib/lemon-ui/LemonButton'\nimport { featureFlagLogic } from 'lib/logic/featureFlagLogic'\nimport { pluralize } from 'lib/utils'\nimport { eventUsageLogic } from 'lib/utils/eventUsageLogic'\nimport posthog from 'posthog-js'\nimport { preflightLogic } from 'scenes/PreflightCheck/preflightLogic'\nimport { userLogic } from 'scenes/userLogic'\n\nimport { BillingPlanType, BillingProductV2Type, BillingType, ProductKey } from '~/types'\n\nimport type { billingLogicType } from './billingLogicType'\n\nexport const ALLOCATION_THRESHOLD_ALERT = 0.85 // Threshold to show warning of event usage near limit\nexport const ALLOCATION_THRESHOLD_BLOCK = 1.2 // Threshold to block usage\n\nexport interface BillingAlertConfig {\n status: 'info' | 'warning' | 'error'\n title: string\n message?: string\n contactSupport?: boolean\n buttonCTA?: string\n dismissKey?: string\n action?: LemonBannerAction\n pathName?: string\n onClose?: () => void\n}\n\nexport enum BillingAPIErrorCodes {\n OPEN_INVOICES_ERROR = 'open_invoices_error',\n NO_ACTIVE_PAYMENT_METHOD_ERROR = 'no_active_payment_method_error',\n COULD_NOT_PAY_INVOICES_ERROR = 'could_not_pay_invoices_error',\n}\n\nexport interface UnsubscribeError {\n detail: string | JSX.Element\n link: JSX.Element\n}\n\nexport interface BillingError {\n status: 'info' | 'warning' | 'error'\n message: string\n action: LemonButtonPropsBase\n}\n\nconst parseBillingResponse = (data: Partial): BillingType => {\n if (data.billing_period) {\n data.billing_period = {\n current_period_start: dayjs(data.billing_period.current_period_start),\n current_period_end: dayjs(data.billing_period.current_period_end),\n interval: data.billing_period.interval,\n }\n }\n\n data.free_trial_until = data.free_trial_until ? dayjs(data.free_trial_until) : undefined\n data.amount_off_expires_at = data.amount_off_expires_at ? dayjs(data.amount_off_expires_at) : undefined\n // If expiration is in the middle of the current period, we let it expire at the end of the period\n if (\n data.amount_off_expires_at &&\n data.billing_period &&\n data.amount_off_expires_at.isBefore(data.billing_period.current_period_end) &&\n data.amount_off_expires_at.isAfter(data.billing_period.current_period_start)\n ) {\n data.amount_off_expires_at = data.billing_period.current_period_end\n }\n\n return data as BillingType\n}\n\nexport const billingLogic = kea([\n path(['scenes', 'billing', 'billingLogic']),\n actions({\n setProductSpecificAlert: (productSpecificAlert: BillingAlertConfig | null) => ({ productSpecificAlert }),\n setScrollToProductKey: (scrollToProductKey: ProductKey | null) => ({ scrollToProductKey }),\n setShowLicenseDirectInput: (show: boolean) => ({ show }),\n reportBillingAlertShown: (alertConfig: BillingAlertConfig) => ({ alertConfig }),\n reportBillingAlertActionClicked: (alertConfig: BillingAlertConfig) => ({ alertConfig }),\n reportCreditsFormSubmitted: (creditInput: number) => ({ creditInput }),\n reportCreditsModalShown: true,\n reportBillingShown: true,\n registerInstrumentationProps: true,\n reportCreditsCTAShown: (creditOverview: any) => ({ creditOverview }),\n setRedirectPath: true,\n setIsOnboarding: true,\n determineBillingAlert: true,\n setUnsubscribeError: (error: null | UnsubscribeError) => ({ error }),\n resetUnsubscribeError: true,\n setBillingAlert: (billingAlert: BillingAlertConfig | null) => ({ billingAlert }),\n showPurchaseCreditsModal: (isOpen: boolean) => ({ isOpen }),\n toggleCreditCTAHeroDismissed: (isDismissed: boolean) => ({ isDismissed }),\n setComputedDiscount: (discount: number) => ({ discount }),\n }),\n connect(() => ({\n values: [featureFlagLogic, ['featureFlags'], preflightLogic, ['preflight']],\n actions: [\n userLogic,\n ['loadUser'],\n eventUsageLogic,\n ['reportProductUnsubscribed'],\n lemonBannerLogic({ dismissKey: 'usage-limit-exceeded' }),\n ['resetDismissKey as resetUsageLimitExceededKey'],\n lemonBannerLogic({ dismissKey: 'usage-limit-approaching' }),\n ['resetDismissKey as resetUsageLimitApproachingKey'],\n ],\n })),\n reducers({\n billingAlert: [\n null as BillingAlertConfig | null,\n {\n setBillingAlert: (_, { billingAlert }) => billingAlert,\n },\n ],\n scrollToProductKey: [\n null as ProductKey | null,\n {\n setScrollToProductKey: (_, { scrollToProductKey }) => scrollToProductKey,\n },\n ],\n productSpecificAlert: [\n null as BillingAlertConfig | null,\n {\n setProductSpecificAlert: (_, { productSpecificAlert }) => productSpecificAlert,\n },\n ],\n showLicenseDirectInput: [\n false,\n {\n setShowLicenseDirectInput: (_, { show }) => show,\n },\n ],\n redirectPath: [\n '' as string,\n {\n setRedirectPath: () => {\n return window.location.pathname.includes('/onboarding')\n ? window.location.pathname + window.location.search\n : ''\n },\n },\n ],\n isOnboarding: [\n false,\n {\n setIsOnboarding: () => window.location.pathname.includes('/onboarding'),\n },\n ],\n unsubscribeError: [\n null as null | UnsubscribeError,\n {\n resetUnsubscribeError: () => null,\n setUnsubscribeError: (_, { error }) => error,\n },\n ],\n timeRemainingInSeconds: [\n 0,\n {\n loadBillingSuccess: (_, { billing }) => {\n if (!billing?.billing_period) {\n return 0\n }\n const currentTime = dayjs()\n const periodEnd = dayjs(billing.billing_period.current_period_end)\n return periodEnd.diff(currentTime, 'second')\n },\n },\n ],\n timeTotalInSeconds: [\n 0,\n {\n loadBillingSuccess: (_, { billing }) => {\n if (!billing?.billing_period) {\n return 0\n }\n const periodStart = dayjs(billing.billing_period.current_period_start)\n const periodEnd = dayjs(billing.billing_period.current_period_end)\n return periodEnd.diff(periodStart, 'second')\n },\n },\n ],\n isPurchaseCreditsModalOpen: [\n false,\n {\n showPurchaseCreditsModal: (_, { isOpen }) => isOpen,\n },\n ],\n isCreditCTAHeroDismissed: [\n false,\n { persist: true },\n {\n toggleCreditCTAHeroDismissed: (_, { isDismissed }) => isDismissed,\n },\n ],\n computedDiscount: [\n 0,\n {\n setComputedDiscount: (_, { discount }) => discount,\n },\n ],\n }),\n loaders(({ actions, values }) => ({\n billing: [\n null as BillingType | null,\n {\n loadBilling: async () => {\n const response = await api.get('api/billing')\n\n return parseBillingResponse(response)\n },\n\n updateBillingLimits: async (limits: { [key: string]: number | null }) => {\n try {\n const response = await api.update('api/billing', { custom_limits_usd: limits })\n lemonToast.success('Billing limits updated')\n return parseBillingResponse(response)\n } catch (error: any) {\n lemonToast.error(\n 'There was an error updating your billing limits. Please try again or contact support.'\n )\n throw error\n }\n },\n\n deactivateProduct: async (key: string) => {\n // clear upgrade params from URL\n const currentURL = new URL(window.location.href)\n currentURL.searchParams.delete('upgraded')\n currentURL.searchParams.delete('products')\n router.actions.push(currentURL.pathname + currentURL.search)\n\n actions.resetUnsubscribeError()\n try {\n const response = await api.getResponse('api/billing/deactivate?products=' + key)\n const jsonRes = await getJSONOrNull(response)\n lemonToast.success('You have been unsubscribed')\n actions.reportProductUnsubscribed(key)\n return parseBillingResponse(jsonRes)\n } catch (error: any) {\n if (error.code) {\n if (error.code === BillingAPIErrorCodes.OPEN_INVOICES_ERROR) {\n actions.setUnsubscribeError({\n detail: error.detail,\n link: (\n \n View invoices\n \n ),\n } as UnsubscribeError)\n } else if (error.code === BillingAPIErrorCodes.NO_ACTIVE_PAYMENT_METHOD_ERROR) {\n actions.setUnsubscribeError({\n detail: error.detail,\n } as UnsubscribeError)\n } else if (error.code === BillingAPIErrorCodes.COULD_NOT_PAY_INVOICES_ERROR) {\n actions.setUnsubscribeError({\n detail: error.detail,\n link: (\n \n {error.link ? 'View invoice' : 'View invoices'}\n \n ),\n } as UnsubscribeError)\n }\n } else {\n actions.setUnsubscribeError({\n detail:\n typeof error.detail === 'string'\n ? error.detail\n : `We encountered a problem. Please try again or submit a support ticket.`,\n } as UnsubscribeError)\n }\n console.error(error)\n // This is a bit of a hack to prevent the page from re-rendering.\n return values.billing\n }\n },\n },\n ],\n billingError: [\n null as BillingError | null,\n {\n getInvoices: async () => {\n // First check to see if there are open invoices\n try {\n const res = await api.getResponse('api/billing/get_invoices?status=open')\n const jsonRes = await getJSONOrNull(res)\n const numOpenInvoices = jsonRes['count']\n if (numOpenInvoices > 0) {\n const viewInvoicesButton = {\n to:\n numOpenInvoices == 1 && jsonRes['link']\n ? jsonRes['link']\n : values.billing?.stripe_portal_url,\n children: `View invoice${numOpenInvoices > 1 ? 's' : ''}`,\n targetBlank: true,\n }\n return {\n status: 'warning',\n message: `You have ${numOpenInvoices} open invoice${\n numOpenInvoices > 1 ? 's' : ''\n }. Please pay ${\n numOpenInvoices > 1 ? 'them' : 'it'\n } before adding items to your subscription.`,\n action: viewInvoicesButton,\n }\n }\n } catch (error: any) {\n console.error(error)\n }\n return null\n },\n },\n ],\n creditOverview: [\n {\n eligible: false,\n estimated_monthly_credit_amount_usd: 0,\n status: 'none',\n invoice_url: null,\n collection_method: null,\n cc_last_four: null,\n email: null,\n },\n {\n loadCreditOverview: async () => {\n // Check if the user is subscribed\n if (values.billing?.has_active_subscription) {\n const response = await api.get('api/billing/credits/overview')\n if (!values.creditForm.creditInput) {\n actions.setCreditFormValue(\n 'creditInput',\n Math.round(response.estimated_monthly_credit_amount_usd * 12)\n )\n }\n\n if (\n response.eligible &&\n response.status === 'none' &&\n values.featureFlags[FEATURE_FLAGS.PURCHASE_CREDITS]\n ) {\n actions.reportCreditsCTAShown(response)\n }\n return response\n }\n // Return default values if not subscribed\n return {\n eligible: false,\n estimated_monthly_credit_amount_usd: 0,\n status: 'none',\n invoice_url: null,\n collection_method: null,\n cc_last_four: null,\n email: null,\n }\n },\n },\n ],\n products: [\n [] as BillingProductV2Type[],\n {\n loadProducts: async () => {\n const response = await api.get('api/billing/available_products')\n return response\n },\n },\n ],\n })),\n selectors({\n upgradeLink: [(s) => [s.preflight], (): string => '/organization/billing'],\n isUnlicensedDebug: [\n (s) => [s.preflight, s.billing],\n (preflight, billing): boolean => !!preflight?.is_debug && !billing?.billing_period,\n ],\n projectedTotalAmountUsdWithBillingLimits: [\n (s) => [s.billing],\n (billing: BillingType): number => {\n if (!billing) {\n return 0\n }\n let projectedTotal = 0\n for (const product of billing.products || []) {\n const billingLimit =\n billing?.custom_limits_usd?.[product.type] ||\n (product.usage_key ? billing?.custom_limits_usd?.[product.usage_key] || 0 : 0)\n projectedTotal += Math.min(parseFloat(product.projected_amount_usd || '0'), billingLimit)\n }\n return projectedTotal\n },\n ],\n supportPlans: [\n (s) => [s.billing],\n (billing: BillingType): BillingPlanType[] => {\n const platformAndSupportProduct = billing?.products?.find(\n (product) => product.type == ProductKey.PLATFORM_AND_SUPPORT\n )\n if (!platformAndSupportProduct?.plans) {\n return []\n }\n\n const addonPlans = platformAndSupportProduct?.addons?.map((addon) => addon.plans).flat()\n const insertionIndex = Math.max(0, (platformAndSupportProduct?.plans?.length ?? 1) - 1)\n const allPlans = platformAndSupportProduct?.plans?.slice(0) || []\n allPlans.splice(insertionIndex, 0, ...addonPlans)\n return allPlans\n },\n ],\n hasSupportAddonPlan: [\n (s) => [s.billing],\n (billing: BillingType): boolean => {\n return !!billing?.products\n ?.find((product) => product.type == ProductKey.PLATFORM_AND_SUPPORT)\n ?.addons.find((addon) => addon.plans.find((plan) => plan.current_plan))\n },\n ],\n creditDiscount: [(s) => [s.computedDiscount], (computedDiscount) => computedDiscount || 0],\n }),\n forms(({ actions, values }) => ({\n activateLicense: {\n defaults: { license: '' } as { license: string },\n errors: ({ license }) => ({\n license: !license ? 'Please enter your license key' : undefined,\n }),\n submit: async ({ license }, breakpoint) => {\n await breakpoint(500)\n try {\n await api.update('api/billing/license', {\n license,\n })\n\n // Reset the URL so we don't trigger the license submission again\n router.actions.replace(\n `/${values.isOnboarding ? 'ingestion' : 'organization'}/billing?success=true`\n )\n setTimeout(() => {\n window.location.reload() // Permissions, projects etc will be out of date at this point, so refresh\n }, 100)\n } catch (e: any) {\n actions.setActivateLicenseManualErrors({\n license: e.detail || 'License could not be activated. Please contact support.',\n })\n throw e\n }\n },\n },\n creditForm: {\n defaults: {\n creditInput: '',\n collectionMethod: 'charge_automatically',\n },\n submit: async ({ creditInput, collectionMethod }) => {\n values.computedDiscount * 100,\n await api.create('api/billing/credits/purchase', {\n annual_amount_usd: +Math.round(+creditInput - +creditInput * values.creditDiscount),\n discount_percent: values.computedDiscount * 100,\n collection_method: collectionMethod,\n })\n\n actions.showPurchaseCreditsModal(false)\n actions.loadCreditOverview()\n actions.reportCreditsFormSubmitted(+creditInput)\n\n LemonDialog.open({\n title: 'Your credit purchase has been submitted',\n width: 536,\n content:\n collectionMethod === 'send_invoice' ? (\n <>\n

\n The invoice for your credits has been created and it will be emailed to the email on\n file.\n

\n

\n Once the invoice is paid we will apply the credits to your account. Until the\n invoice is paid you will be charged for usage as normal.\n

\n \n ) : (\n <>\n

\n Your card will be charged soon and the credits will be applied to your account.\n Please make sure your{' '}\n \n card on file\n {' '}\n is up to date. You will receive an email when the credits are applied.\n

\n \n ),\n })\n },\n errors: ({ creditInput, collectionMethod }) => ({\n creditInput: !creditInput\n ? 'Please enter the amount of credits you want to purchase'\n : // This value is used because 6667 - 10% = 6000\n +creditInput < 6667\n ? 'Please enter a credit amount greater than $6,666'\n : undefined,\n collectionMethod: !collectionMethod ? 'Please select a collection method' : undefined,\n }),\n },\n })),\n listeners(({ actions, values }) => ({\n reportBillingShown: () => {\n posthog.capture('billing v2 shown')\n },\n reportBillingAlertShown: ({ alertConfig }) => {\n posthog.capture('billing alert shown', {\n ...alertConfig,\n })\n },\n reportBillingAlertActionClicked: ({ alertConfig }) => {\n posthog.capture('billing alert action clicked', {\n ...alertConfig,\n })\n },\n reportCreditsModalShown: () => {\n posthog.capture('credits modal shown')\n },\n reportCreditsFormSubmitted: ({ creditInput }) => {\n posthog.capture('credits modal credit form submitted', {\n credit_amount_usd: creditInput,\n })\n },\n reportCreditsCTAShown: ({ creditOverview }) => {\n posthog.capture('credits cta shown', {\n eligible: creditOverview.eligible,\n status: creditOverview.status,\n estimated_monthly_credit_amount_usd: creditOverview.estimated_monthly_credit_amount_usd,\n })\n },\n toggleCreditCTAHeroDismissed: ({ isDismissed }) => {\n if (isDismissed) {\n posthog.capture('credits cta hero dismissed')\n }\n },\n loadBillingSuccess: () => {\n if (\n router.values.location.pathname.includes('/organization/billing') &&\n router.values.searchParams['success']\n ) {\n // if the activation is successful, we reload the user to get the updated billing info on the organization\n actions.loadUser()\n router.actions.replace('/organization/billing')\n }\n actions.registerInstrumentationProps()\n\n actions.determineBillingAlert()\n\n actions.loadCreditOverview()\n },\n determineBillingAlert: () => {\n if (values.productSpecificAlert) {\n actions.setBillingAlert(values.productSpecificAlert)\n return\n }\n\n if (!values.billing || !values.preflight?.cloud) {\n return\n }\n\n if (values.billing.free_trial_until && values.billing.free_trial_until.isAfter(dayjs())) {\n const remainingDays = values.billing.free_trial_until.diff(dayjs(), 'days')\n const remainingHours = values.billing.free_trial_until.diff(dayjs(), 'hours')\n\n if (remainingHours > 72) {\n return\n }\n\n actions.setBillingAlert({\n status: 'info',\n title: `Your free trial will end in ${\n remainingHours < 24 ? pluralize(remainingHours, 'hour') : pluralize(remainingDays, 'day')\n }.`,\n message: `Setup billing now to ensure you don't lose access to premium features.`,\n })\n return\n }\n\n if (values.billing.deactivated) {\n actions.setBillingAlert({\n status: 'error',\n title: 'Your organization has been temporarily suspended.',\n message: 'Please contact support to reactivate it.',\n contactSupport: true,\n })\n return\n }\n\n const productOverLimit = values.billing.products?.find((x: BillingProductV2Type) => {\n return x.percentage_usage > 1 && x.usage_key\n })\n\n if (productOverLimit) {\n actions.setBillingAlert({\n status: 'error',\n title: 'Usage limit exceeded',\n message: `You have exceeded the usage limit for ${productOverLimit.name}. Please \n ${productOverLimit.subscribed ? 'increase your billing limit' : 'upgrade your plan'}\n or ${\n productOverLimit.name === 'Data warehouse'\n ? 'data will not be synced'\n : 'data loss may occur'\n }.`,\n dismissKey: 'usage-limit-exceeded',\n })\n return\n }\n\n actions.resetUsageLimitExceededKey()\n\n const productApproachingLimit = values.billing.products?.find(\n (x) => x.percentage_usage > ALLOCATION_THRESHOLD_ALERT\n )\n\n if (productApproachingLimit) {\n actions.setBillingAlert({\n status: 'info',\n title: 'You will soon hit your usage limit',\n message: `You have currently used ${parseFloat(\n (productApproachingLimit.percentage_usage * 100).toFixed(2)\n )}% of your ${\n productApproachingLimit.usage_key && productApproachingLimit.usage_key.toLowerCase()\n } allocation.`,\n dismissKey: 'usage-limit-approaching',\n })\n return\n }\n\n actions.resetUsageLimitApproachingKey()\n },\n setCreditFormValue: ({ name, value }) => {\n if (name === 'creditInput' || (name as FieldNamePath)?.[0] === 'creditInput') {\n const spend = +value\n let discount = 0\n if (spend >= 100000) {\n discount = 0.35\n } else if (spend >= 60000) {\n discount = 0.25\n } else if (spend >= 20000) {\n discount = 0.2\n } else if (spend >= 6000) {\n discount = 0.1\n }\n actions.setComputedDiscount(discount)\n }\n },\n registerInstrumentationProps: async (_, breakpoint) => {\n await breakpoint(100)\n if (posthog && values.billing) {\n const payload = {\n has_billing_plan: !!values.billing.has_active_subscription,\n free_trial_until: values.billing.free_trial_until?.toISOString(),\n customer_deactivated: values.billing.deactivated,\n current_total_amount_usd: values.billing.current_total_amount_usd,\n }\n if (values.billing.custom_limits_usd) {\n for (const product of Object.keys(values.billing.custom_limits_usd)) {\n payload[`custom_limits_usd.${product}`] = values.billing.custom_limits_usd[product]\n }\n }\n if (values.billing.products) {\n for (const product of values.billing.products) {\n const type = product.type.toLowerCase()\n payload[`percentage_usage.${type}`] = product.percentage_usage\n payload[`current_amount_usd.${type}`] = product.current_amount_usd\n payload[`unit_amount_usd.${type}`] = product.unit_amount_usd\n payload[`usage_limit.${type}`] = product.usage_limit\n payload[`current_usage.${type}`] = product.current_usage\n payload[`projected_usage.${type}`] = product.projected_usage\n payload[`free_allocation.${type}`] = product.free_allocation\n }\n }\n if (values.billing.billing_period) {\n payload['billing_period_start'] = values.billing.billing_period.current_period_start\n payload['billing_period_end'] = values.billing.billing_period.current_period_end\n }\n posthog.register(payload)\n }\n },\n showPurchaseCreditsModal: ({ isOpen }) => {\n if (isOpen) {\n actions.reportCreditsModalShown()\n }\n },\n })),\n afterMount(({ actions }) => {\n actions.loadBilling()\n actions.getInvoices()\n }),\n urlToAction(({ actions }) => ({\n // IMPORTANT: This needs to be above the \"*\" so it takes precedence\n '/*/billing': (_params, _search, hash) => {\n if (hash.license) {\n actions.setShowLicenseDirectInput(true)\n actions.setActivateLicenseValues({ license: hash.license })\n actions.submitActivateLicense()\n }\n if (_search.products) {\n const products = _search.products.split(',')\n actions.setScrollToProductKey(products[0])\n }\n if (_search.billing_error) {\n actions.setBillingAlert({\n status: 'error',\n title: 'Error',\n message: _search.billing_error,\n })\n }\n actions.setRedirectPath()\n actions.setIsOnboarding()\n },\n '*': () => {\n actions.setRedirectPath()\n actions.setIsOnboarding()\n },\n })),\n])\n","import { LemonCollapse, LemonModal, Link } from '@posthog/lemon-ui'\nimport { useValues } from 'kea'\nimport { CodeSnippet, Language } from 'lib/components/CodeSnippet'\nimport EarlyAccessFeatureImage from 'public/early-access-feature-demo.png'\nimport { preflightLogic } from 'scenes/PreflightCheck/preflightLogic'\nimport { urls } from 'scenes/urls'\n\nimport { FeatureFlagType, PipelineStage, Region } from '~/types'\n\ninterface InstructionsModalProps {\n flag: FeatureFlagType['key']\n visible: boolean\n onClose: () => void\n}\n\nexport function InstructionsModal({ onClose, visible, flag }: InstructionsModalProps): JSX.Element {\n const { preflight } = useValues(preflightLogic)\n\n const getCloudPanels = (): JSX.Element => (\n \n Give your users a{' '}\n \n prebuilt widget\n {' '}\n to opt-in to features\n \n \n ),\n },\n {\n key: '2',\n header: 'Option 2: Custom implementation',\n content: (\n
\n Opt user in\n
\n \n
\n\n Opt user out\n
\n \n
\n\n Retrieve Previews\n
\n \n
\n
\n ),\n },\n ]}\n />\n )\n\n const getSelfHostedPanels = (): JSX.Element => (\n
\n Opt user in\n
\n \n
\n\n Opt user out\n
\n \n
\n\n Retrieve Previews\n
\n \n
\n
\n )\n\n const panels: JSX.Element = preflight?.cloud ? getCloudPanels() : getSelfHostedPanels()\n\n return (\n \n
\n
\n Implement manual release condition toggles to give your users the ability choose which features they\n want to try\n
\n {panels}\n
\n
\n )\n}\n\nfunction FeatureEnrollInstructions({ flag }: { flag: string }): JSX.Element {\n return (\n \n {`posthog.updateEarlyAccessFeatureEnrollment(\"${flag}\", true)\n`}\n \n )\n}\n\nfunction FeatureUnenrollInstructions({ flag }: { flag: string }): JSX.Element {\n return (\n \n {`posthog.updateEarlyAccessFeatureEnrollment(\"${flag}\", false)\n`}\n \n )\n}\n\nfunction RetrievePreviewsInstructions(): JSX.Element {\n return (\n \n {`posthog.getEarlyAccessFeatures((previewItemData) => {\n // do something with early access feature\n})\n`}\n \n )\n}\n","import { useValues } from 'kea'\nimport { CodeSnippet, Language } from 'lib/components/CodeSnippet'\nimport { apiHostOrigin } from 'lib/utils/apiHost'\nimport { teamLogic } from 'scenes/teamLogic'\n\nimport { GroupType } from '~/types'\n\nexport const UTM_TAGS = '?utm_medium=in-product&utm_campaign=feature-flag'\n\nexport interface FeatureFlagSnippet {\n flagKey: string\n multivariant?: boolean\n groupType?: GroupType\n localEvaluation?: boolean\n payload?: boolean\n samplePropertyName?: string\n instantlyAvailableProperties?: boolean\n}\n\nconst LOCAL_EVAL_REMINDER = `Remember to set a personal API key in the SDK to enable local evaluation.\n`\n\nexport function NodeJSSnippet({\n flagKey,\n groupType,\n multivariant,\n localEvaluation,\n payload,\n samplePropertyName,\n}: FeatureFlagSnippet): JSX.Element {\n const clientSuffix = 'await client.'\n const flagFunction = payload ? 'getFeatureFlagPayload' : multivariant ? 'getFeatureFlag' : 'isFeatureEnabled'\n\n const propertyName = samplePropertyName || 'is_authorized'\n\n const localEvalAddition = localEvaluation\n ? groupType\n ? `\n // add group properties used in the flag to ensure the flag\n // is evaluated locally, vs. going to our servers\n groupProperties: { ${groupType.group_type}: {'${propertyName}': 'value', 'name': 'xyz'}}`\n : `\n // add person properties used in the flag to ensure the flag\n // is evaluated locally, vs. going to our servers\n personProperties: {'${propertyName}': 'value'}`\n : ''\n\n const flagSnippet = groupType\n ? `${clientSuffix}${flagFunction}(\n '${flagKey}',\n 'user distinct id',${\n payload\n ? `\n undefined,`\n : ''\n }\n {\n groups: { '${groupType.group_type}': '<${groupType.name_singular || 'group'} ID>' },${localEvalAddition}\n }\n)`\n : localEvalAddition\n ? `${clientSuffix}${flagFunction}(\n '${flagKey}',\n 'user distinct id',${\n payload\n ? `\n undefined,`\n : ''\n }\n {${localEvalAddition}\n }\n)`\n : `${clientSuffix}${flagFunction}('${flagKey}', 'user distinct id')`\n\n const variableName = payload ? 'matchedFlagPayload' : multivariant ? 'enabledVariant' : 'isMyFlagEnabledForUser'\n\n const conditional = multivariant ? `${variableName} === 'example-variant'` : `${variableName}`\n\n const followUpCode = payload\n ? ''\n : `\n\nif (${conditional}) {\n // Do something differently for this ${groupType ? groupType.name_singular || 'group' : 'user'}\n}`\n\n return (\n <>\n \n {`${\n localEvaluation ? '// ' + LOCAL_EVAL_REMINDER : ''\n }const ${variableName} = ${flagSnippet}${followUpCode}`}\n \n \n )\n}\n\nexport function PHPSnippet({\n flagKey,\n groupType,\n multivariant,\n localEvaluation,\n samplePropertyName,\n}: FeatureFlagSnippet): JSX.Element {\n const clientSuffix = 'PostHog::'\n\n const flagFunction = multivariant ? 'getFeatureFlag' : 'isFeatureEnabled'\n\n const propertyName = samplePropertyName || 'is_authorized'\n\n const localEvalAddition = localEvaluation\n ? groupType\n ? `\n // empty person properties\n [],\n // add group properties used in the flag to ensure the flag\n // is evaluated locally, vs. going to our servers\n [${groupType.group_type} => ['${propertyName}' => 'value', 'name' => 'xyz']]`\n : `\n // add person properties used in the flag to ensure the flag\n // is evaluated locally, vs. going to our servers\n ['${propertyName}' => 'value']`\n : ''\n\n const flagSnippet = groupType\n ? `${clientSuffix}${flagFunction}(\n '${flagKey}',\n 'user distinct id',\n // group types\n ['${groupType.group_type}' => '<${groupType.name_singular || 'group'} ID>'],${localEvalAddition}\n)`\n : localEvalAddition\n ? `${clientSuffix}${flagFunction}(\n '${flagKey}',\n 'user distinct id',${localEvalAddition}\n)`\n : `${clientSuffix}${flagFunction}('${flagKey}', 'user distinct id')`\n const variableName = multivariant ? '$enabledVariant' : '$isMyFlagEnabledForUser'\n\n const conditional = multivariant ? `${variableName} === 'example-variant'` : `${variableName}`\n\n return (\n <>\n \n {`${localEvaluation ? '// ' + LOCAL_EVAL_REMINDER : ''}${variableName} = ${flagSnippet}\n\nif (${conditional}) {\n // Do something differently for this ${groupType ? groupType.name_singular || 'group' : 'user'}\n}`}\n \n \n )\n}\n\nexport function GolangSnippet({\n flagKey,\n groupType,\n multivariant,\n localEvaluation,\n samplePropertyName,\n}: FeatureFlagSnippet): JSX.Element {\n const clientSuffix = 'client.'\n\n const flagFunction = multivariant ? 'GetFeatureFlag' : 'IsFeatureEnabled'\n\n const propertyName = samplePropertyName || 'is_authorized'\n\n const localEvalAddition = localEvaluation\n ? groupType\n ? `\n // add group properties used in the flag to ensure the flag\n // is evaluated locally, vs. going to our servers\n groupProperties: map[string]Properties{\"${groupType.group_type}\": posthog.NewProperties().Set(\"${propertyName}\", \"value\").Set(\"name\", \"xyz\")}`\n : `\n // add person properties used in the flag to ensure the flag\n // is evaluated locally, vs. going to our servers\n PersonProperties: posthog.NewProperties().Set(\"${propertyName}\", \"value\")`\n : ''\n\n const flagSnippet = groupType\n ? `${clientSuffix}${flagFunction}(\n FeatureFlagPayload{\n Key: \"${flagKey}\",\n DistinctId: \"distinct-id\",\n Groups: Groups{'${groupType.group_type}': '<${groupType.name_singular || 'group'} ID>'},${localEvalAddition}\n }\n)`\n : `${clientSuffix}${flagFunction}(\n FeatureFlagPayload{\n Key: '${flagKey}',\n DistinctId: \"distinct-id\",${localEvalAddition}\n })`\n const variableName = multivariant ? 'enabledVariant, err' : 'isMyFlagEnabledForUser, err'\n\n const conditional = multivariant ? `enabledVariant == 'example-variant'` : `isMyFlagEnabledForUser`\n\n return (\n <>\n \n {`${localEvaluation ? '// ' + LOCAL_EVAL_REMINDER : ''}${variableName} := ${flagSnippet}\n\nif ${conditional} {\n // Do something differently for this ${groupType ? groupType.name_singular || 'group' : 'user'}\n}`}\n \n \n )\n}\n\nexport function RubySnippet({\n flagKey,\n groupType,\n multivariant,\n localEvaluation,\n payload,\n samplePropertyName,\n}: FeatureFlagSnippet): JSX.Element {\n const clientSuffix = 'posthog.'\n const flagFunction = payload ? 'get_feature_flag_payload' : multivariant ? 'get_feature_flag' : 'is_feature_enabled'\n\n const propertyName = samplePropertyName || 'is_authorized'\n\n const localEvalAddition = localEvaluation\n ? groupType\n ? `\n # add group properties used in the flag to ensure the flag\n # is evaluated locally, vs. going to our servers\n group_properties: { ${groupType.group_type}: {'${propertyName}': 'value', 'name': 'xyz'}}`\n : `\n # add person properties used in the flag to ensure the flag\n # is evaluated locally, vs. going to our servers\n person_properties: {'${propertyName}': 'value'}`\n : ''\n\n const flagSnippet = groupType\n ? `${clientSuffix}${flagFunction}(\n '${flagKey}',\n 'user distinct id',\n groups: { '${groupType.group_type}': '<${groupType.name_singular || 'group'} ID>' },${localEvalAddition}\n)`\n : localEvalAddition\n ? `${clientSuffix}${flagFunction}(\n '${flagKey}',\n 'user distinct id',${localEvalAddition}\n)`\n : `${clientSuffix}${flagFunction}('${flagKey}', 'user distinct id')`\n const variableName = payload ? 'matched_flag_payload' : multivariant ? 'enabled_variant' : 'is_my_flag_enabled'\n\n const conditional = multivariant ? `${variableName} == 'example-variant'` : `${variableName}`\n\n const followUpCode = payload\n ? ''\n : `\n\nif ${conditional}\n # Do something differently for this ${groupType ? groupType.name_singular || 'group' : 'user'}\nend`\n\n return (\n <>\n \n {`${localEvaluation ? '# ' + LOCAL_EVAL_REMINDER : ''}${variableName} = ${flagSnippet}${followUpCode}`}\n \n \n )\n}\n\nexport function PythonSnippet({\n flagKey,\n groupType,\n multivariant,\n localEvaluation,\n payload,\n samplePropertyName,\n}: FeatureFlagSnippet): JSX.Element {\n const clientSuffix = 'posthog.'\n const flagFunction = payload ? 'get_feature_flag_payload' : multivariant ? 'get_feature_flag' : 'feature_enabled'\n\n const propertyName = samplePropertyName || 'is_authorized'\n\n const localEvalAddition = localEvaluation\n ? groupType\n ? `\n # add group properties used in the flag to ensure the flag\n # is evaluated locally, vs. going to our servers\n group_properties={ ${groupType.group_type}: {'${propertyName}': 'value', 'name': 'xyz'}}`\n : `\n # add person properties used in the flag to ensure the flag\n # is evaluated locally, vs. going to our servers\n person_properties={'${propertyName}': 'value'}`\n : ''\n\n const flagSnippet = groupType\n ? `${clientSuffix}${flagFunction}(\n '${flagKey}',\n 'user distinct id',\n groups={ '${groupType.group_type}': '<${groupType.name_singular || 'group'} ID>' },${localEvalAddition}\n)`\n : localEvalAddition\n ? `${clientSuffix}${flagFunction}(\n '${flagKey}',\n 'user distinct id',${localEvalAddition}\n)`\n : `${clientSuffix}${flagFunction}('${flagKey}', 'user distinct id')`\n const variableName = payload ? 'matched_flag_payload' : multivariant ? 'enabled_variant' : 'is_my_flag_enabled'\n\n const conditional = multivariant ? `${variableName} == 'example-variant'` : `${variableName}`\n\n const followUpCode = payload\n ? ''\n : `\n\nif ${conditional}:\n # Do something differently for this ${groupType ? groupType.name_singular || 'group' : 'user'}\n`\n\n return (\n <>\n \n {`${localEvaluation ? '# ' + LOCAL_EVAL_REMINDER : ''}${variableName} = ${flagSnippet}${followUpCode}`}\n \n \n )\n}\n\nexport function AndroidSnippet({ flagKey, multivariant, payload }: FeatureFlagSnippet): JSX.Element {\n const clientSuffix = 'PostHog.'\n\n if (payload) {\n return (\n \n {`${clientSuffix}getFeatureFlagPayload(\"${flagKey}\")`}\n \n )\n }\n\n const flagFunction = multivariant ? 'getFeatureFlag' : 'isFeatureEnabled'\n\n const variantSuffix = multivariant ? ` == \"example-variant\"` : ''\n return (\n \n {`if (${clientSuffix}${flagFunction}(\"${flagKey}\")${variantSuffix}) {\n // do something\n}\n `}\n \n )\n}\n\nexport function FlutterSnippet({ flagKey, multivariant, payload }: FeatureFlagSnippet): JSX.Element {\n const clientSuffix = 'await Posthog().'\n\n if (payload) {\n return (\n \n {`${clientSuffix}getFeatureFlagPayload('${flagKey}');`}\n \n )\n }\n\n const flagFunction = multivariant ? 'getFeatureFlag' : 'isFeatureEnabled'\n\n const variantSuffix = multivariant ? ` == 'example-variant'` : ''\n\n return (\n \n {`if (${clientSuffix}${flagFunction}('${flagKey}')${variantSuffix}) {\n // do something\n}\n `}\n \n )\n}\n\nexport function iOSSnippet({ flagKey, multivariant, payload }: FeatureFlagSnippet): JSX.Element {\n const clientSuffix = 'PostHogSDK.shared.'\n\n if (payload) {\n return (\n \n {`${clientSuffix}getFeatureFlagPayload(\"${flagKey}\")`}\n \n )\n }\n\n const flagFunction = multivariant ? 'getFeatureFlag' : 'isFeatureEnabled'\n\n const variantSuffix = multivariant ? `as? String == \"example-variant\"` : ''\n return (\n \n {`if ${clientSuffix}${flagFunction}(\"${flagKey}\")${variantSuffix} {\n // do something\n}`}\n \n )\n}\n\nexport function ReactNativeSnippet({ flagKey, multivariant, payload }: FeatureFlagSnippet): JSX.Element {\n const clientSuffix = 'posthog.'\n\n if (payload) {\n return (\n \n {`${clientSuffix}getFeatureFlagPayload('${flagKey}')`}\n \n )\n }\n\n const flagFunction = multivariant ? 'getFeatureFlag' : 'isFeatureEnabled'\n\n const variantSuffix = multivariant ? ` == 'example-variant'` : ''\n return (\n \n {`// With a hook\nimport { useFeatureFlag } from 'posthog-react-native'\n\nconst MyComponent = () => {\n const showFlaggedFeature = useFeatureFlag('${flagKey}')\n\n if (showFlaggedFeature === undefined) {\n // the response is undefined if the flags are being loaded\n return null\n }\n\n return showFlaggedFeature ${variantSuffix} ? Testing feature 😄 : Not Testing feature 😢\n}\n\n// Or calling on the method directly\n${clientSuffix}${flagFunction}('${flagKey}')\n `}\n \n )\n}\n\nexport function ReactSnippet({ flagKey, multivariant, payload }: FeatureFlagSnippet): JSX.Element {\n const flagFunction = payload\n ? 'useFeatureFlagPayload'\n : multivariant\n ? 'useFeatureFlagVariantKey'\n : 'useFeatureFlagEnabled'\n\n const variable = payload ? 'payload' : multivariant ? 'variant' : 'flagEnabled'\n const variantSuffix = multivariant ? ` == 'example-variant'` : ''\n\n return (\n \n {`\nimport { ${flagFunction} } from 'posthog-js/react'\n\nfunction App() {\n const ${variable} = ${flagFunction}('${flagKey}')\n\n if (${variable}${variantSuffix}) {\n // do something\n }\n}`}\n \n )\n}\n\nexport function APISnippet({ groupType }: FeatureFlagSnippet): JSX.Element {\n const { currentTeam } = useValues(teamLogic)\n\n const groupAddition = groupType\n ? `\n \"groups\": { \"${groupType.group_type}\": \"<${groupType.name_singular || 'group'} ID>\" },`\n : ''\n\n return (\n <>\n \n {`curl ${apiHostOrigin()}/decide?v=3/ \\\\\n-X POST -H 'Content-Type: application/json' \\\\\n-d '{\n \"api_key\": \"${currentTeam ? currentTeam.api_token : '[project_api_key]'}\",\n \"distinct_id\": \"[user distinct id]\",${groupAddition}\n}'\n `}\n \n \n )\n}\n\nexport function JSSnippet({\n flagKey,\n multivariant,\n payload,\n groupType,\n instantlyAvailableProperties,\n samplePropertyName,\n}: FeatureFlagSnippet): JSX.Element {\n if (payload) {\n return (\n <>\n \n {`posthog.getFeatureFlagPayload('${flagKey ?? ''}')`}\n \n \n )\n }\n\n const propertyName = samplePropertyName || 'is_authorized'\n\n const propertyOverrideSnippet = `// Your flag depends on properties that are not instantly available. If you want\n// to make them available without waiting for server delays, send these properties for flag evaluation, like so:\n// Make sure to call this before evaluating flags. More info: https://posthog.com/docs/libraries/js#overriding-server-properties \nposthog.${\n groupType\n ? `setGroupPropertiesForFlags({ '${groupType.group_type}': {'${propertyName}': 'value'}})`\n : `setPersonPropertiesForFlags({'${propertyName}': 'value'})`\n }\n\n`\n\n const clientSuffix = 'posthog.'\n const flagFunction = multivariant ? 'getFeatureFlag' : 'isFeatureEnabled'\n\n const variantSuffix = multivariant ? ` == 'example-variant'` : ''\n return (\n <>\n \n {`${instantlyAvailableProperties ? '' : propertyOverrideSnippet}// Ensure flags are loaded before usage.\n// You'll only need to call this on the code for when the first time a user visits.\n${clientSuffix}onFeatureFlags(function() {\n // feature flags should be available at this point\n if (${clientSuffix}${flagFunction}('${flagKey ?? ''}') ${variantSuffix}) {\n // do something\n }\n})\n\n// Otherwise, you can just do:\nif (${clientSuffix}${flagFunction}('${flagKey ?? ''}') ${variantSuffix}) {\n // do something\n}`}\n \n \n )\n}\n\nexport function JSBootstrappingSnippet(): JSX.Element {\n return (\n \n {`// Initialise the posthog library with a distinct ID and feature flags for immediate loading\n// This avoids the delay between the library loading and feature flags becoming available to use.\n\nposthog.init('{project_api_key}', {\n api_host: '${apiHostOrigin()}'\n bootstrap:\n {\n distinctID: 'your-anonymous-id',\n featureFlags: {\n // input the flag values here from 'posthog.getAllFlags(distinct_id)' which you can find in the server-side libraries.\n // example:\n // 'flag-1': true,\n // 'variant-flag': 'control',\n // 'other-flag': false\n },\n }\n})\n `}\n \n )\n}\n","import { mergeAttributes, Node, NodeViewProps } from '@tiptap/core'\nimport { NodeViewWrapper, ReactNodeViewRenderer } from '@tiptap/react'\nimport { NotebookNodeType, NotebookTarget } from '~/types'\nimport { dayjs } from 'lib/dayjs'\nimport { JSONContent } from '../Notebook/utils'\nimport clsx from 'clsx'\nimport { urls } from 'scenes/urls'\nimport { LemonButton } from '@posthog/lemon-ui'\nimport { notebookLogic } from '../Notebook/notebookLogic'\nimport { useValues } from 'kea'\nimport { useMemo } from 'react'\nimport { openNotebook } from '~/models/notebooksModel'\n\nexport interface NotebookNodeReplayTimestampAttrs {\n playbackTime?: number\n sessionRecordingId: string\n sourceNodeId?: string\n}\n\nconst Component = (props: NodeViewProps): JSX.Element => {\n const { shortId, findNodeLogic, findNodeLogicById } = useValues(notebookLogic)\n const { sessionRecordingId, playbackTime = 0, sourceNodeId } = props.node.attrs as NotebookNodeReplayTimestampAttrs\n\n const relatedNodeInNotebook = useMemo(() => {\n const logicById = sourceNodeId ? findNodeLogicById(sourceNodeId) : null\n\n return logicById ?? findNodeLogic(NotebookNodeType.Recording, { id: sessionRecordingId })\n }, [findNodeLogic])\n\n const handlePlayInNotebook = (): void => {\n // TODO: Figure out how to send this action info to the playlist OR the replay node...\n\n relatedNodeInNotebook?.values.sendMessage('play-replay', {\n sessionRecordingId,\n time: playbackTime ?? 0,\n })\n }\n\n return (\n \n openNotebook(shortId, NotebookTarget.Popover)\n }\n to={\n !relatedNodeInNotebook\n ? urls.replaySingle(sessionRecordingId) + `?t=${playbackTime / 1000}`\n : undefined\n }\n >\n {formatTimestamp(playbackTime)}\n \n \n )\n}\n\nexport const NotebookNodeReplayTimestamp = Node.create({\n name: NotebookNodeType.ReplayTimestamp,\n inline: true,\n group: 'inline',\n atom: true,\n\n serializedText: (attrs: NotebookNodeReplayTimestampAttrs): string => {\n // timestamp is not a block so `getText` does not add a separator.\n // we need to add it manually\n return `${attrs.playbackTime ? formatTimestamp(attrs.playbackTime) : '00:00'}:\\n`\n },\n\n addAttributes() {\n return {\n playbackTime: { default: null, keepOnSplit: false },\n sessionRecordingId: { default: null, keepOnSplit: true, isRequired: true },\n sourceNodeId: { default: null, keepOnSplit: true },\n }\n },\n\n parseHTML() {\n return [{ tag: NotebookNodeType.ReplayTimestamp }]\n },\n\n renderHTML({ HTMLAttributes }) {\n return [NotebookNodeType.ReplayTimestamp, mergeAttributes(HTMLAttributes)]\n },\n\n addNodeView() {\n return ReactNodeViewRenderer(Component)\n },\n})\n\nexport function formatTimestamp(time: number): string {\n return dayjs.duration(time, 'milliseconds').format('HH:mm:ss').replace(/^00:/, '').trim()\n}\n\nexport function buildTimestampCommentContent(attrs: NotebookNodeReplayTimestampAttrs): JSONContent {\n return {\n type: 'paragraph',\n content: [\n {\n type: NotebookNodeType.ReplayTimestamp,\n attrs,\n },\n { type: 'text', text: ' ' },\n ],\n }\n}\n","import {\n IconCursor,\n IconFunnels,\n IconHogQL,\n IconLifecycle,\n IconPeople,\n IconRetention,\n IconRewindPlay,\n IconStickiness,\n IconTrends,\n IconUpload,\n IconUserPaths,\n} from '@posthog/icons'\nimport { IconCode } from '@posthog/icons'\nimport { LemonButton, LemonDivider, lemonToast } from '@posthog/lemon-ui'\nimport { Extension } from '@tiptap/core'\nimport { ReactRenderer } from '@tiptap/react'\nimport Suggestion from '@tiptap/suggestion'\nimport Fuse from 'fuse.js'\nimport { useValues } from 'kea'\nimport { IconBold, IconItalic } from 'lib/lemon-ui/icons'\nimport { Popover } from 'lib/lemon-ui/Popover'\nimport { selectFiles } from 'lib/utils/file-utils'\nimport { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useState } from 'react'\n\nimport { KeyboardShortcut } from '~/layout/navigation-3000/components/KeyboardShortcut'\nimport { defaultDataTableColumns } from '~/queries/nodes/DataTable/utils'\nimport { NodeKind } from '~/queries/schema'\nimport { BaseMathType, ChartDisplayType, FunnelVizType, NotebookNodeType, PathType, RetentionPeriod } from '~/types'\n\nimport { buildNodeEmbed } from '../Nodes/NotebookNodeEmbed'\nimport { buildInsightVizQueryContent, buildNodeQueryContent } from '../Nodes/NotebookNodeQuery'\nimport NotebookIconHeading from './NotebookIconHeading'\nimport { notebookLogic } from './notebookLogic'\nimport { EditorCommands, EditorRange } from './utils'\n\ntype SlashCommandConditionalProps =\n | {\n mode: 'add'\n getPos: () => number\n range?: never\n }\n | {\n mode: 'slash'\n getPos?: never\n range: EditorRange\n }\n\ntype SlashCommandsProps = SlashCommandConditionalProps & {\n query?: string\n decorationNode?: any\n onClose?: () => void\n}\n\ntype SlashCommandsPopoverProps = SlashCommandsProps & {\n visible: boolean\n children?: JSX.Element\n}\n\ntype SlashCommandsRef = {\n onKeyDown: (event: KeyboardEvent) => boolean\n}\n\ntype SlashCommandsItem = {\n title: string\n search?: string\n icon?: JSX.Element\n command: (chain: EditorCommands, pos: number | EditorRange) => EditorCommands | Promise\n}\n\nconst TEXT_CONTROLS: SlashCommandsItem[] = [\n {\n title: 'h1',\n icon: ,\n command: (chain) => chain.toggleHeading({ level: 1 }),\n },\n {\n title: 'h2',\n icon: ,\n command: (chain) => chain.toggleHeading({ level: 2 }),\n },\n {\n title: 'h3',\n icon: ,\n command: (chain) => chain.toggleHeading({ level: 3 }),\n },\n {\n title: 'bold',\n icon: ,\n command: (chain) => chain.toggleBold(),\n },\n {\n title: 'italic',\n icon: ,\n command: (chain) => chain.toggleItalic(),\n },\n]\n\nconst SLASH_COMMANDS: SlashCommandsItem[] = [\n {\n title: 'Trend',\n search: 'graph trend insight',\n icon: ,\n command: (chain, pos) =>\n chain.insertContentAt(\n pos,\n buildInsightVizQueryContent({\n kind: NodeKind.TrendsQuery,\n filterTestAccounts: false,\n series: [\n {\n kind: NodeKind.EventsNode,\n event: '$pageview',\n name: '$pageview',\n math: BaseMathType.TotalCount,\n },\n ],\n interval: 'day',\n trendsFilter: {\n display: ChartDisplayType.ActionsLineGraph,\n },\n })\n ),\n },\n {\n title: 'Funnel',\n search: 'funnel insight',\n icon: ,\n command: (chain, pos) =>\n chain.insertContentAt(\n pos,\n buildInsightVizQueryContent({\n kind: NodeKind.FunnelsQuery,\n series: [\n {\n kind: NodeKind.EventsNode,\n name: '$pageview',\n event: '$pageview',\n },\n {\n kind: NodeKind.EventsNode,\n name: '$pageview',\n event: '$pageview',\n },\n ],\n funnelsFilter: {\n funnelVizType: FunnelVizType.Steps,\n },\n })\n ),\n },\n {\n title: 'Retention',\n search: 'retention insight',\n icon: ,\n command: (chain, pos) =>\n chain.insertContentAt(\n pos,\n buildInsightVizQueryContent({\n kind: NodeKind.RetentionQuery,\n retentionFilter: {\n period: RetentionPeriod.Day,\n totalIntervals: 11,\n targetEntity: {\n id: '$pageview',\n name: '$pageview',\n type: 'events',\n },\n returningEntity: {\n id: '$pageview',\n name: '$pageview',\n type: 'events',\n },\n retentionType: 'retention_first_time',\n },\n })\n ),\n },\n {\n title: 'Paths',\n search: 'user paths insight',\n icon: ,\n command: (chain, pos) =>\n chain.insertContentAt(\n pos,\n buildInsightVizQueryContent({\n kind: NodeKind.PathsQuery,\n pathsFilter: {\n includeEventTypes: [PathType.PageView],\n },\n })\n ),\n },\n {\n title: 'Stickiness',\n search: 'stickiness insight',\n icon: ,\n command: (chain, pos) =>\n chain.insertContentAt(\n pos,\n buildInsightVizQueryContent({\n kind: NodeKind.StickinessQuery,\n series: [\n {\n kind: NodeKind.EventsNode,\n name: '$pageview',\n event: '$pageview',\n math: BaseMathType.TotalCount,\n },\n ],\n stickinessFilter: {},\n })\n ),\n },\n {\n title: 'Lifecycle',\n search: 'lifecycle insight',\n icon: ,\n command: (chain, pos) =>\n chain.insertContentAt(\n pos,\n buildInsightVizQueryContent({\n kind: NodeKind.LifecycleQuery,\n series: [\n {\n kind: NodeKind.EventsNode,\n name: '$pageview',\n event: '$pageview',\n math: BaseMathType.TotalCount,\n },\n ],\n })\n ),\n },\n {\n title: 'HogQL',\n search: 'sql',\n icon: ,\n command: (chain, pos) =>\n chain.insertContentAt(\n pos,\n buildNodeQueryContent({\n kind: NodeKind.DataTableNode,\n source: {\n kind: NodeKind.HogQLQuery,\n query: `select event,\n person.properties.email,\n properties.$browser,\n count()\n from events\n where {filters} -- replaced with global date and property filters\n and person.properties.email is not null\ngroup by event,\n properties.$browser,\n person.properties.email\norder by count() desc\n limit 100`,\n filters: {\n dateRange: {\n date_from: '-24h',\n },\n },\n },\n })\n ),\n },\n {\n title: 'Events',\n search: 'data explore',\n icon: ,\n command: (chain, pos) =>\n chain.insertContentAt(\n pos,\n buildNodeQueryContent({\n kind: NodeKind.DataTableNode,\n source: {\n kind: NodeKind.EventsQuery,\n select: defaultDataTableColumns(NodeKind.EventsQuery),\n properties: [],\n after: '-24h',\n limit: 100,\n },\n })\n ),\n },\n {\n title: 'People',\n search: 'persons users',\n icon: ,\n command: (chain, pos) =>\n chain.insertContentAt(\n pos,\n buildNodeQueryContent({\n kind: NodeKind.DataTableNode,\n columns: defaultDataTableColumns(NodeKind.ActorsQuery),\n source: {\n kind: NodeKind.ActorsQuery,\n properties: [],\n },\n })\n ),\n },\n {\n title: 'Session recordings',\n search: 'video replay',\n icon: ,\n command: (chain, pos) => chain.insertContentAt(pos, { type: NotebookNodeType.RecordingPlaylist, attrs: {} }),\n },\n {\n title: 'Image',\n search: 'picture gif',\n icon: ,\n command: async (chain, pos) => {\n // Trigger upload followed by insert\n try {\n const files = await selectFiles({ contentType: 'image/*', multiple: false })\n\n if (files.length) {\n return chain.insertContentAt(pos, { type: NotebookNodeType.Image, attrs: { file: files[0] } })\n }\n } catch (e) {\n lemonToast.error('Something went wrong when trying to select a file.')\n }\n\n return chain\n },\n },\n {\n title: 'Embedded iframe',\n search: 'iframe embed',\n icon: ,\n command: async (chain, pos) => {\n return chain.insertContentAt(pos, buildNodeEmbed())\n },\n },\n]\n\nexport const SlashCommands = forwardRef(function SlashCommands(\n { mode, range, getPos, onClose, query }: SlashCommandsProps,\n ref\n): JSX.Element | null {\n const { editor } = useValues(notebookLogic)\n // We start with 1 because the first item is the text controls\n const [selectedIndex, setSelectedIndex] = useState(0)\n const [selectedHorizontalIndex, setSelectedHorizontalIndex] = useState(0)\n\n const allCommmands = [...TEXT_CONTROLS, ...SLASH_COMMANDS]\n\n const fuse = useMemo(() => {\n return new Fuse(allCommmands, {\n keys: ['title', 'search'],\n threshold: 0.3,\n })\n }, [allCommmands])\n\n const filteredCommands = useMemo(() => {\n if (!query) {\n return allCommmands\n }\n return fuse.search(query).map((result) => result.item)\n }, [query, fuse])\n\n const filteredSlashCommands = useMemo(\n () => filteredCommands.filter((item) => SLASH_COMMANDS.includes(item)),\n [filteredCommands]\n )\n\n useEffect(() => {\n setSelectedIndex(0)\n setSelectedHorizontalIndex(0)\n }, [query])\n\n const execute = async (item: SlashCommandsItem): Promise => {\n if (editor) {\n const selectedNode = editor.getSelectedNode()\n const isTextNode = selectedNode === null || selectedNode.isText\n const isTextCommand = TEXT_CONTROLS.map((c) => c.title).includes(item.title)\n\n const position = mode === 'slash' ? range.from : getPos()\n let chain = mode === 'slash' ? editor.deleteRange(range) : editor.chain()\n\n if (!isTextNode && isTextCommand) {\n chain = chain.insertContentAt(position, { type: 'paragraph' })\n }\n\n const partialCommand = await item.command(chain, position)\n partialCommand.run()\n\n onClose?.()\n }\n }\n\n const onPressEnter = async (): Promise => {\n const command =\n selectedIndex === -1 ? TEXT_CONTROLS[selectedHorizontalIndex] : filteredSlashCommands[selectedIndex]\n\n await execute(command)\n }\n const onPressUp = (): void => {\n setSelectedIndex(Math.max(selectedIndex - 1, -1))\n }\n const onPressDown = (): void => {\n setSelectedIndex(Math.min(selectedIndex + 1, SLASH_COMMANDS.length - 1))\n }\n\n const onPressLeft = (): void => {\n setSelectedHorizontalIndex(Math.max(selectedHorizontalIndex - 1, 0))\n }\n const onPressRight = (): void => {\n setSelectedHorizontalIndex(Math.min(selectedHorizontalIndex + 1, TEXT_CONTROLS.length - 1))\n }\n\n const onKeyDown = useCallback(\n (event: KeyboardEvent): boolean => {\n const keyMappings = {\n ArrowUp: onPressUp,\n ArrowDown: onPressDown,\n ArrowLeft: onPressLeft,\n ArrowRight: onPressRight,\n Enter: onPressEnter,\n }\n\n if (keyMappings[event.key]) {\n keyMappings[event.key]()\n return true\n }\n\n return false\n },\n [selectedIndex, selectedHorizontalIndex, filteredCommands]\n )\n\n // Expose the keydown handler to the tiptap extension\n useImperativeHandle(ref, () => ({ onKeyDown }), [onKeyDown])\n\n useEffect(() => {\n if (mode !== 'add') {\n return\n }\n\n // If not opened from a slash command, we want to add our own keyboard listeners\n const keyDownListener = (event: KeyboardEvent): void => {\n const preventDefault = onKeyDown(event)\n if (preventDefault) {\n event.preventDefault()\n }\n }\n\n window.addEventListener('keydown', keyDownListener, true)\n\n return () => window.removeEventListener('keydown', keyDownListener, true)\n }, [onKeyDown, mode])\n\n if (!editor) {\n return null\n }\n\n return (\n
\n
\n {TEXT_CONTROLS.map((item, index) => (\n void execute(item)}\n icon={item.icon}\n />\n ))}\n
\n\n \n\n {filteredSlashCommands.map((item, index) => (\n void execute(item)}\n >\n {item.title}\n \n ))}\n\n {filteredSlashCommands.length === 0 && (\n
\n Nothing matching /{query}\n
\n )}\n\n {mode === 'add' && (\n <>\n \n
\n You can trigger this menu by typing \n
\n \n )}\n
\n )\n})\n\nexport const SlashCommandsPopover = forwardRef(\n function SlashCommandsPopover(\n { visible = true, decorationNode, children, onClose, ...props }: SlashCommandsPopoverProps,\n ref\n ): JSX.Element | null {\n return (\n }\n referenceElement={decorationNode}\n visible={visible}\n onClickOutside={onClose}\n >\n {children}\n \n )\n }\n)\n\nexport const SlashCommandsExtension = Extension.create({\n name: 'slash-commands',\n\n addProseMirrorPlugins() {\n return [\n Suggestion({\n editor: this.editor,\n char: '/',\n startOfLine: true,\n render: () => {\n let renderer: ReactRenderer\n\n return {\n onStart: (props) => {\n renderer = new ReactRenderer(SlashCommandsPopover, {\n props: { ...props, mode: 'slash' },\n editor: props.editor,\n })\n },\n\n onUpdate(props) {\n renderer.updateProps(props)\n\n if (!props.clientRect) {\n return\n }\n },\n\n onKeyDown(props) {\n if (props.event.key === 'Escape') {\n renderer.destroy()\n return true\n }\n return renderer.ref?.onKeyDown(props.event) ?? false\n },\n\n onExit() {\n renderer.destroy()\n },\n }\n },\n }),\n ]\n },\n})\n","import {\n addedNodeMutation,\n customEvent,\n EventType,\n fullSnapshotEvent,\n incrementalSnapshotEvent,\n IncrementalSource,\n metaEvent,\n mutationData,\n removedNodeMutation,\n} from '@rrweb/types'\nimport { captureMessage } from '@sentry/react'\nimport { isObject } from 'lib/utils'\nimport { PLACEHOLDER_SVG_DATA_IMAGE_URL } from 'scenes/session-recordings/player/rrweb'\n\nimport {\n attributes,\n documentNode,\n elementNode,\n fullSnapshotEvent as MobileFullSnapshotEvent,\n keyboardEvent,\n metaEvent as MobileMetaEvent,\n MobileIncrementalSnapshotEvent,\n MobileNodeMutation,\n MobileNodeType,\n NodeType,\n serializedNodeWithId,\n textNode,\n wireframe,\n wireframeButton,\n wireframeCheckBox,\n wireframeDiv,\n wireframeImage,\n wireframeInputComponent,\n wireframeNavigationBar,\n wireframePlaceholder,\n wireframeProgress,\n wireframeRadio,\n wireframeRadioGroup,\n wireframeRectangle,\n wireframeScreenshot,\n wireframeSelect,\n wireframeStatusBar,\n wireframeText,\n wireframeToggle,\n} from '../mobile.types'\nimport { makeNavigationBar, makeOpenKeyboardPlaceholder, makeStatusBar } from './screen-chrome'\nimport { ConversionContext, ConversionResult } from './types'\nimport {\n asStyleString,\n makeBodyStyles,\n makeColorStyles,\n makeDeterminateProgressStyles,\n makeHTMLStyles,\n makeIndeterminateProgressStyles,\n makeMinimalStyles,\n makePositionStyles,\n makeStylesString,\n} from './wireframeStyle'\n\nexport const BACKGROUND = '#f3f4ef'\nconst FOREGROUND = '#35373e'\n\n/**\n * generates a sequence of ids\n * from 100 to 9,999,999\n * the transformer reserves ids in the range 0 to 9,999,999\n * we reserve a range of ids because we need nodes to have stable ids across snapshots\n * in order for incremental snapshots to work\n * some mobile elements have to be wrapped in other elements in order to be styled correctly\n * which means the web version of a mobile replay will use ids that don't exist in the mobile replay,\n * and we need to ensure they don't clash\n * -----\n * id is typed as a number in rrweb\n * and there's a few places in their code where rrweb uses a check for `id === -1` to bail out of processing\n * so, it's safest to assume that id is expected to be a positive integer\n */\nfunction* ids(): Generator {\n let i = 100\n while (i < 9999999) {\n yield i++\n }\n}\n\nlet globalIdSequence = ids()\n\n// there are some fixed ids that we need to use for fixed elements or artificial mutations\nconst DOCUMENT_ID = 1\nconst HTML_DOC_TYPE_ID = 2\nconst HTML_ELEMENT_ID = 3\nconst HEAD_ID = 4\nconst BODY_ID = 5\n// the nav bar should always be the last item in the body so that it is at the top of the stack\nconst NAVIGATION_BAR_PARENT_ID = 7\nexport const NAVIGATION_BAR_ID = 8\n// the keyboard so that it is still before the nav bar\nconst KEYBOARD_PARENT_ID = 9\nexport const KEYBOARD_ID = 10\nexport const STATUS_BAR_PARENT_ID = 11\nexport const STATUS_BAR_ID = 12\n\nfunction isKeyboardEvent(x: unknown): x is keyboardEvent {\n return isObject(x) && 'data' in x && isObject(x.data) && 'tag' in x.data && x.data.tag === 'keyboard'\n}\n\nexport function _isPositiveInteger(id: unknown): id is number {\n return typeof id === 'number' && id > 0 && id % 1 === 0\n}\n\nfunction _isNullish(x: unknown): x is null | undefined {\n return x === null || x === undefined\n}\n\nfunction isRemovedNodeMutation(x: addedNodeMutation | removedNodeMutation): x is removedNodeMutation {\n return isObject(x) && 'id' in x\n}\n\nexport const makeCustomEvent = (\n mobileCustomEvent: (customEvent | keyboardEvent) & {\n timestamp: number\n delay?: number\n }\n): (customEvent | incrementalSnapshotEvent) & {\n timestamp: number\n delay?: number\n} => {\n if (isKeyboardEvent(mobileCustomEvent)) {\n // keyboard events are handled as incremental snapshots to add or remove a keyboard from the DOM\n // TODO eventually we can pass something to makeIncrementalEvent here\n const adds: addedNodeMutation[] = []\n const removes = []\n if (mobileCustomEvent.data.payload.open) {\n const keyboardPlaceHolder = makeOpenKeyboardPlaceholder(mobileCustomEvent, {\n timestamp: mobileCustomEvent.timestamp,\n idSequence: globalIdSequence,\n })\n if (keyboardPlaceHolder) {\n adds.push({\n parentId: KEYBOARD_PARENT_ID,\n nextId: null,\n node: keyboardPlaceHolder.result,\n })\n // mutations seem not to want a tree of nodes to add\n // so even though `keyboardPlaceholder` is a tree with content\n // we have to add the text content as well\n adds.push({\n parentId: keyboardPlaceHolder.result.id,\n nextId: null,\n node: {\n type: NodeType.Text,\n id: globalIdSequence.next().value,\n textContent: 'keyboard',\n },\n })\n } else {\n captureMessage('Failed to create keyboard placeholder', { extra: { mobileCustomEvent } })\n }\n } else {\n removes.push({\n parentId: KEYBOARD_PARENT_ID,\n id: KEYBOARD_ID,\n })\n }\n const mutation: mutationData = { adds, attributes: [], removes, source: IncrementalSource.Mutation, texts: [] }\n return {\n type: EventType.IncrementalSnapshot,\n data: mutation,\n timestamp: mobileCustomEvent.timestamp,\n }\n }\n return mobileCustomEvent\n}\n\nexport const makeMetaEvent = (\n mobileMetaEvent: MobileMetaEvent & {\n timestamp: number\n }\n): metaEvent & {\n timestamp: number\n delay?: number\n} => ({\n type: EventType.Meta,\n data: {\n href: mobileMetaEvent.data.href || '', // the replay doesn't use the href, so we safely ignore any absence\n // mostly we need width and height in order to size the viewport\n width: mobileMetaEvent.data.width,\n height: mobileMetaEvent.data.height,\n },\n timestamp: mobileMetaEvent.timestamp,\n})\n\nexport function makeDivElement(\n wireframe: wireframeDiv,\n children: serializedNodeWithId[],\n context: ConversionContext\n): ConversionResult | null {\n const _id = _isPositiveInteger(wireframe.id) ? wireframe.id : context.idSequence.next().value\n return {\n result: {\n type: NodeType.Element,\n tagName: 'div',\n attributes: {\n style: asStyleString([makeStylesString(wireframe), 'overflow:hidden', 'white-space:nowrap']),\n 'data-rrweb-id': _id,\n },\n id: _id,\n childNodes: children,\n },\n context,\n }\n}\n\nfunction makeTextElement(\n wireframe: wireframeText,\n children: serializedNodeWithId[],\n context: ConversionContext\n): ConversionResult | null {\n if (wireframe.type !== 'text') {\n console.error('Passed incorrect wireframe type to makeTextElement')\n return null\n }\n\n // because we might have to style the text, we always wrap it in a div\n // and apply styles to that\n const id = context.idSequence.next().value\n\n const childNodes = [...children]\n if (!_isNullish(wireframe.text)) {\n childNodes.unshift({\n type: NodeType.Text,\n textContent: wireframe.text,\n // since the text node is wrapped, we assign it a synthetic id\n id,\n })\n }\n\n return {\n result: {\n type: NodeType.Element,\n tagName: 'div',\n attributes: {\n style: asStyleString([makeStylesString(wireframe), 'overflow:hidden', 'white-space:normal']),\n 'data-rrweb-id': wireframe.id,\n },\n id: wireframe.id,\n childNodes,\n },\n context,\n }\n}\n\nfunction makeWebViewElement(\n wireframe: wireframe,\n children: serializedNodeWithId[],\n context: ConversionContext\n): ConversionResult | null {\n const labelledWireframe: wireframePlaceholder = { ...wireframe } as wireframePlaceholder\n if ('url' in wireframe) {\n labelledWireframe.label = wireframe.url\n }\n\n return makePlaceholderElement(labelledWireframe, children, context)\n}\n\nexport function makePlaceholderElement(\n wireframe: wireframe,\n children: serializedNodeWithId[],\n context: ConversionContext\n): ConversionResult | null {\n const txt = 'label' in wireframe && wireframe.label ? wireframe.label : wireframe.type || 'PLACEHOLDER'\n return {\n result: {\n type: NodeType.Element,\n tagName: 'div',\n attributes: {\n style: makeStylesString(wireframe, {\n verticalAlign: 'center',\n horizontalAlign: 'center',\n backgroundColor: wireframe.style?.backgroundColor || BACKGROUND,\n color: wireframe.style?.color || FOREGROUND,\n backgroundImage: PLACEHOLDER_SVG_DATA_IMAGE_URL,\n backgroundSize: 'auto',\n backgroundRepeat: 'unset',\n ...context.styleOverride,\n }),\n 'data-rrweb-id': wireframe.id,\n },\n id: wireframe.id,\n childNodes: [\n {\n type: NodeType.Text,\n // since the text node is wrapped, we assign it a synthetic id\n id: context.idSequence.next().value,\n textContent: txt,\n },\n ...children,\n ],\n },\n context,\n }\n}\n\nexport function dataURIOrPNG(src: string): string {\n // replace all new lines in src\n src = src.replace(/\\r?\\n|\\r/g, '')\n if (!src.startsWith('data:image/')) {\n return 'data:image/png;base64,' + src\n }\n return src\n}\n\nfunction makeImageElement(\n wireframe: wireframeImage | wireframeScreenshot,\n children: serializedNodeWithId[],\n context: ConversionContext\n): ConversionResult | null {\n if (!wireframe.base64) {\n return makePlaceholderElement(wireframe, children, context)\n }\n\n const src = dataURIOrPNG(wireframe.base64)\n return {\n result: {\n type: NodeType.Element,\n tagName: 'img',\n attributes: {\n src: src,\n width: wireframe.width,\n height: wireframe.height,\n style: makeStylesString(wireframe),\n 'data-rrweb-id': wireframe.id,\n },\n id: wireframe.id,\n childNodes: children,\n },\n context,\n }\n}\n\nfunction inputAttributes(wireframe: T): attributes {\n const attributes = {\n style: makeStylesString(wireframe),\n type: wireframe.inputType,\n ...(wireframe.disabled ? { disabled: wireframe.disabled } : {}),\n 'data-rrweb-id': wireframe.id,\n }\n\n switch (wireframe.inputType) {\n case 'checkbox':\n return {\n ...attributes,\n style: null, // checkboxes are styled by being combined with a label\n ...(wireframe.checked ? { checked: wireframe.checked } : {}),\n }\n case 'toggle':\n return {\n ...attributes,\n style: null, // toggle are styled by being combined with a label\n ...(wireframe.checked ? { checked: wireframe.checked } : {}),\n }\n case 'radio':\n return {\n ...attributes,\n style: null, // radio buttons are styled by being combined with a label\n ...(wireframe.checked ? { checked: wireframe.checked } : {}),\n // radio value defaults to the string \"on\" if not specified\n // we're not really submitting the form, so it doesn't matter 🤞\n // radio name is used to correctly uncheck values when one is checked\n // mobile doesn't really have it, and we will be checking based on snapshots,\n // so we can ignore it for now\n }\n case 'button':\n return {\n ...attributes,\n }\n case 'text_area':\n return {\n ...attributes,\n value: wireframe.value || '',\n }\n case 'progress':\n return {\n ...attributes,\n // indeterminate when omitted\n value: wireframe.value || null,\n // defaults to 1 when omitted\n max: wireframe.max || null,\n type: null, // progress has no type attribute\n }\n default:\n return {\n ...attributes,\n value: wireframe.value || '',\n }\n }\n}\n\nfunction makeButtonElement(\n wireframe: wireframeButton,\n children: serializedNodeWithId[],\n context: ConversionContext\n): ConversionResult | null {\n const buttonText: textNode | null = wireframe.value\n ? {\n type: NodeType.Text,\n textContent: wireframe.value,\n }\n : null\n\n return {\n result: {\n type: NodeType.Element,\n tagName: 'button',\n attributes: inputAttributes(wireframe),\n id: wireframe.id,\n childNodes: buttonText ? [{ ...buttonText, id: context.idSequence.next().value }, ...children] : children,\n },\n context,\n }\n}\n\nfunction makeSelectOptionElement(\n option: string,\n selected: boolean,\n context: ConversionContext\n): ConversionResult {\n const optionId = context.idSequence.next().value\n return {\n result: {\n type: NodeType.Element,\n tagName: 'option',\n attributes: {\n ...(selected ? { selected: selected } : {}),\n 'data-rrweb-id': optionId,\n },\n id: optionId,\n childNodes: [\n {\n type: NodeType.Text,\n textContent: option,\n id: context.idSequence.next().value,\n },\n ],\n },\n context,\n }\n}\n\nfunction makeSelectElement(\n wireframe: wireframeSelect,\n children: serializedNodeWithId[],\n context: ConversionContext\n): ConversionResult | null {\n const selectOptions: serializedNodeWithId[] = []\n if (wireframe.options) {\n let optionContext = context\n for (let i = 0; i < wireframe.options.length; i++) {\n const option = wireframe.options[i]\n const conversion = makeSelectOptionElement(option, wireframe.value === option, optionContext)\n selectOptions.push(conversion.result)\n optionContext = conversion.context\n }\n }\n return {\n result: {\n type: NodeType.Element,\n tagName: 'select',\n attributes: inputAttributes(wireframe),\n id: wireframe.id,\n childNodes: [...selectOptions, ...children],\n },\n context,\n }\n}\n\nfunction groupRadioButtons(children: serializedNodeWithId[], radioGroupName: string): serializedNodeWithId[] {\n return children.map((child) => {\n if (child.type === NodeType.Element && child.tagName === 'input' && child.attributes.type === 'radio') {\n return {\n ...child,\n attributes: {\n ...child.attributes,\n name: radioGroupName,\n 'data-rrweb-id': child.id,\n },\n }\n }\n return child\n })\n}\n\nfunction makeRadioGroupElement(\n wireframe: wireframeRadioGroup,\n children: serializedNodeWithId[],\n context: ConversionContext\n): ConversionResult | null {\n const radioGroupName = 'radio_group_' + wireframe.id\n return {\n result: {\n type: NodeType.Element,\n tagName: 'div',\n attributes: {\n style: makeStylesString(wireframe),\n 'data-rrweb-id': wireframe.id,\n },\n id: wireframe.id,\n childNodes: groupRadioButtons(children, radioGroupName),\n },\n context,\n }\n}\n\nfunction makeStar(title: string, path: string, context: ConversionContext): serializedNodeWithId {\n const svgId = context.idSequence.next().value\n const titleId = context.idSequence.next().value\n const pathId = context.idSequence.next().value\n return {\n type: NodeType.Element,\n tagName: 'svg',\n isSVG: true,\n attributes: {\n style: asStyleString(['height: 100%', 'overflow-clip-margin: content-box', 'overflow:hidden']),\n viewBox: '0 0 24 24',\n fill: 'currentColor',\n 'data-rrweb-id': svgId,\n },\n id: svgId,\n childNodes: [\n {\n type: NodeType.Element,\n tagName: 'title',\n isSVG: true,\n attributes: {\n 'data-rrweb-id': titleId,\n },\n id: titleId,\n childNodes: [\n {\n type: NodeType.Text,\n textContent: title,\n id: context.idSequence.next().value,\n },\n ],\n },\n {\n type: NodeType.Element,\n tagName: 'path',\n isSVG: true,\n attributes: {\n d: path,\n 'data-rrweb-id': pathId,\n },\n id: pathId,\n childNodes: [],\n },\n ],\n }\n}\n\nfunction filledStar(context: ConversionContext): serializedNodeWithId {\n return makeStar(\n 'filled star',\n 'M12,17.27L18.18,21L16.54,13.97L22,9.24L14.81,8.62L12,2L9.19,8.62L2,9.24L7.45,13.97L5.82,21L12,17.27Z',\n context\n )\n}\n\nfunction halfStar(context: ConversionContext): serializedNodeWithId {\n return makeStar(\n 'half-filled star',\n 'M12,15.4V6.1L13.71,10.13L18.09,10.5L14.77,13.39L15.76,17.67M22,9.24L14.81,8.63L12,2L9.19,8.63L2,9.24L7.45,13.97L5.82,21L12,17.27L18.18,21L16.54,13.97L22,9.24Z',\n context\n )\n}\n\nfunction emptyStar(context: ConversionContext): serializedNodeWithId {\n return makeStar(\n 'empty star',\n 'M12,15.39L8.24,17.66L9.23,13.38L5.91,10.5L10.29,10.13L12,6.09L13.71,10.13L18.09,10.5L14.77,13.38L15.76,17.66M22,9.24L14.81,8.63L12,2L9.19,8.63L2,9.24L7.45,13.97L5.82,21L12,17.27L18.18,21L16.54,13.97L22,9.24Z',\n context\n )\n}\n\nfunction makeRatingBar(\n wireframe: wireframeProgress,\n children: serializedNodeWithId[],\n context: ConversionContext\n): ConversionResult | null {\n // max is the number of stars... and value is the number of stars to fill\n\n // deliberate double equals, because we want to allow null and undefined\n if (wireframe.value == null || wireframe.max == null) {\n return makePlaceholderElement(wireframe, children, context)\n }\n\n const numberOfFilledStars = Math.floor(wireframe.value)\n const numberOfHalfStars = wireframe.value - numberOfFilledStars > 0 ? 1 : 0\n const numberOfEmptyStars = wireframe.max - numberOfFilledStars - numberOfHalfStars\n\n const filledStars = Array(numberOfFilledStars)\n .fill(undefined)\n .map(() => filledStar(context))\n const halfStars = Array(numberOfHalfStars)\n .fill(undefined)\n .map(() => halfStar(context))\n const emptyStars = Array(numberOfEmptyStars)\n .fill(undefined)\n .map(() => emptyStar(context))\n\n const ratingBarId = context.idSequence.next().value\n const ratingBar = {\n type: NodeType.Element,\n tagName: 'div',\n id: ratingBarId,\n attributes: {\n style: asStyleString([\n makeColorStyles(wireframe),\n 'position: relative',\n 'display: flex',\n 'flex-direction: row',\n 'padding: 2px 4px',\n ]),\n 'data-rrweb-id': ratingBarId,\n },\n childNodes: [...filledStars, ...halfStars, ...emptyStars],\n } as serializedNodeWithId\n\n return {\n result: {\n type: NodeType.Element,\n tagName: 'div',\n attributes: {\n style: makeStylesString(wireframe),\n 'data-rrweb-id': wireframe.id,\n },\n id: wireframe.id,\n childNodes: [ratingBar, ...children],\n },\n context,\n }\n}\n\nfunction makeProgressElement(\n wireframe: wireframeProgress,\n children: serializedNodeWithId[],\n context: ConversionContext\n): ConversionResult | null {\n if (wireframe.style?.bar === 'circular') {\n // value needs to be expressed as a number between 0 and 100\n const max = wireframe.max || 1\n let value = wireframe.value || null\n if (_isPositiveInteger(value) && value <= max) {\n value = (value / max) * 100\n } else {\n value = null\n }\n\n const styleOverride = {\n color: wireframe.style?.color || FOREGROUND,\n backgroundColor: wireframe.style?.backgroundColor || BACKGROUND,\n }\n\n // if not _isPositiveInteger(value) then we render a spinner,\n // so we need to add a style element with the spin keyframe\n const stylingChildren: serializedNodeWithId[] = _isPositiveInteger(value)\n ? []\n : [\n {\n type: NodeType.Element,\n tagName: 'style',\n attributes: {\n type: 'text/css',\n },\n id: context.idSequence.next().value,\n childNodes: [\n {\n type: NodeType.Text,\n textContent: `@keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }`,\n id: context.idSequence.next().value,\n },\n ],\n },\n ]\n\n const wrappingDivId = context.idSequence.next().value\n return {\n result: {\n type: NodeType.Element,\n tagName: 'div',\n attributes: {\n style: makeMinimalStyles(wireframe),\n 'data-rrweb-id': wireframe.id,\n },\n id: wireframe.id,\n childNodes: [\n {\n type: NodeType.Element,\n tagName: 'div',\n attributes: {\n // with no provided value we render a spinner\n style: _isPositiveInteger(value)\n ? makeDeterminateProgressStyles(wireframe, styleOverride)\n : makeIndeterminateProgressStyles(wireframe, styleOverride),\n 'data-rrweb-id': wrappingDivId,\n },\n id: wrappingDivId,\n childNodes: stylingChildren,\n },\n ...children,\n ],\n },\n context,\n }\n } else if (wireframe.style?.bar === 'rating') {\n return makeRatingBar(wireframe, children, context)\n }\n return {\n result: {\n type: NodeType.Element,\n tagName: 'progress',\n attributes: inputAttributes(wireframe),\n id: wireframe.id,\n childNodes: children,\n },\n context,\n }\n}\n\nfunction makeToggleParts(wireframe: wireframeToggle, context: ConversionContext): serializedNodeWithId[] {\n const togglePosition = wireframe.checked ? 'right' : 'left'\n const defaultColor = wireframe.checked ? '#1d4aff' : BACKGROUND\n const sliderPartId = context.idSequence.next().value\n const handlePartId = context.idSequence.next().value\n return [\n {\n type: NodeType.Element,\n tagName: 'div',\n attributes: {\n 'data-toggle-part': 'slider',\n style: asStyleString([\n 'position:absolute',\n 'top:33%',\n 'left:5%',\n 'display:inline-block',\n 'width:75%',\n 'height:33%',\n 'opacity: 0.2',\n 'border-radius:7.5%',\n `background-color:${wireframe.style?.color || defaultColor}`,\n ]),\n 'data-rrweb-id': sliderPartId,\n },\n id: sliderPartId,\n childNodes: [],\n },\n {\n type: NodeType.Element,\n tagName: 'div',\n attributes: {\n 'data-toggle-part': 'handle',\n style: asStyleString([\n 'position:absolute',\n 'top:1.5%',\n `${togglePosition}:5%`,\n 'display:flex',\n 'align-items:center',\n 'justify-content:center',\n 'width:40%',\n 'height:75%',\n 'cursor:inherit',\n 'border-radius:50%',\n `background-color:${wireframe.style?.color || defaultColor}`,\n `border:2px solid ${wireframe.style?.borderColor || wireframe.style?.color || defaultColor}`,\n ]),\n 'data-rrweb-id': handlePartId,\n },\n id: handlePartId,\n childNodes: [],\n },\n ]\n}\n\nfunction makeToggleElement(\n wireframe: wireframeToggle,\n context: ConversionContext\n): ConversionResult<\n elementNode & {\n id: number\n }\n> | null {\n const isLabelled = 'label' in wireframe\n const wrappingDivId = context.idSequence.next().value\n return {\n result: {\n type: NodeType.Element,\n tagName: 'div',\n attributes: {\n // if labelled take up available space, otherwise use provided positioning\n style: isLabelled ? asStyleString(['height:100%', 'flex:1']) : makePositionStyles(wireframe),\n 'data-rrweb-id': wireframe.id,\n },\n id: wireframe.id,\n childNodes: [\n {\n type: NodeType.Element,\n tagName: 'div',\n attributes: {\n // relative position, fills parent\n style: asStyleString(['position:relative', 'width:100%', 'height:100%']),\n 'data-rrweb-id': wrappingDivId,\n },\n id: wrappingDivId,\n childNodes: makeToggleParts(wireframe, context),\n },\n ],\n },\n context,\n }\n}\n\nfunction makeLabelledInput(\n wireframe: wireframeCheckBox | wireframeRadio | wireframeToggle,\n theInputElement: serializedNodeWithId,\n context: ConversionContext\n): ConversionResult {\n const theLabel: serializedNodeWithId = {\n type: NodeType.Text,\n textContent: wireframe.label || '',\n id: context.idSequence.next().value,\n }\n\n const orderedChildren = wireframe.inputType === 'toggle' ? [theLabel, theInputElement] : [theInputElement, theLabel]\n\n const labelId = context.idSequence.next().value\n return {\n result: {\n type: NodeType.Element,\n tagName: 'label',\n attributes: {\n style: makeStylesString(wireframe),\n 'data-rrweb-id': labelId,\n },\n id: labelId,\n childNodes: orderedChildren,\n },\n context,\n }\n}\n\nfunction makeInputElement(\n wireframe: wireframeInputComponent,\n children: serializedNodeWithId[],\n context: ConversionContext\n): ConversionResult | null {\n if (!wireframe.inputType) {\n return null\n }\n\n if (wireframe.inputType === 'button') {\n return makeButtonElement(wireframe, children, context)\n }\n\n if (wireframe.inputType === 'select') {\n return makeSelectElement(wireframe, children, context)\n }\n\n if (wireframe.inputType === 'progress') {\n return makeProgressElement(wireframe, children, context)\n }\n\n const theInputElement: ConversionResult | null =\n wireframe.inputType === 'toggle'\n ? makeToggleElement(wireframe, context)\n : {\n result: {\n type: NodeType.Element,\n tagName: 'input',\n attributes: inputAttributes(wireframe),\n id: wireframe.id,\n childNodes: children,\n },\n context,\n }\n\n if (!theInputElement) {\n return null\n }\n\n if ('label' in wireframe) {\n return makeLabelledInput(wireframe, theInputElement.result, theInputElement.context)\n }\n // when labelled no styles are needed, when un-labelled as here - we add the styling in.\n ;(theInputElement.result as elementNode).attributes.style = makeStylesString(wireframe)\n return theInputElement\n}\n\nfunction makeRectangleElement(\n wireframe: wireframeRectangle,\n children: serializedNodeWithId[],\n context: ConversionContext\n): ConversionResult | null {\n return {\n result: {\n type: NodeType.Element,\n tagName: 'div',\n attributes: {\n style: makeStylesString(wireframe),\n 'data-rrweb-id': wireframe.id,\n },\n id: wireframe.id,\n childNodes: children,\n },\n context,\n }\n}\n\nfunction chooseConverter(\n wireframe: T\n): (\n wireframe: T,\n children: serializedNodeWithId[],\n context: ConversionContext\n) => ConversionResult | null {\n // in theory type is always present\n // but since this is coming over the wire we can't really be sure,\n // and so we default to div\n const converterType: MobileNodeType = wireframe.type || 'div'\n const converterMapping: Record<\n MobileNodeType,\n (wireframe: T, children: serializedNodeWithId[]) => ConversionResult | null\n > = {\n // KLUDGE: TS can't tell that the wireframe type of each function is safe based on the converter type\n text: makeTextElement as any,\n image: makeImageElement as any,\n rectangle: makeRectangleElement as any,\n div: makeDivElement as any,\n input: makeInputElement as any,\n radio_group: makeRadioGroupElement as any,\n web_view: makeWebViewElement as any,\n placeholder: makePlaceholderElement as any,\n status_bar: makeStatusBar as any,\n navigation_bar: makeNavigationBar as any,\n screenshot: makeImageElement as any,\n }\n return converterMapping[converterType]\n}\n\nfunction convertWireframe(\n wireframe: wireframe,\n context: ConversionContext\n): ConversionResult | null {\n const children = convertWireframesFor(wireframe.childWireframes, context)\n const converted = chooseConverter(wireframe)?.(wireframe, children.result, children.context)\n return converted || null\n}\n\nfunction convertWireframesFor(\n wireframes: wireframe[] | undefined,\n context: ConversionContext\n): ConversionResult {\n if (!wireframes) {\n return { result: [], context }\n }\n\n const result: serializedNodeWithId[] = []\n for (const wireframe of wireframes) {\n const converted = convertWireframe(wireframe, context)\n if (converted) {\n result.push(converted.result)\n context = converted.context\n }\n }\n return { result, context }\n}\n\nfunction isMobileIncrementalSnapshotEvent(x: unknown): x is MobileIncrementalSnapshotEvent {\n const isIncrementalSnapshot = isObject(x) && 'type' in x && x.type === EventType.IncrementalSnapshot\n if (!isIncrementalSnapshot) {\n return false\n }\n const hasData = isObject(x) && 'data' in x\n const data = hasData ? x.data : null\n\n const hasMutationSource = isObject(data) && 'source' in data && data.source === IncrementalSource.Mutation\n\n const adds = isObject(data) && 'adds' in data && Array.isArray(data.adds) ? data.adds : null\n const updates = isObject(data) && 'updates' in data && Array.isArray(data.updates) ? data.updates : null\n\n const hasUpdatedWireframe = !!updates && updates.length > 0 && isObject(updates[0]) && 'wireframe' in updates[0]\n const hasAddedWireframe = !!adds && adds.length > 0 && isObject(adds[0]) && 'wireframe' in adds[0]\n\n return hasMutationSource && (hasAddedWireframe || hasUpdatedWireframe)\n}\n\nfunction chooseParentId(nodeType: MobileNodeType, providedParentId: number): number {\n return nodeType === 'screenshot' ? BODY_ID : providedParentId\n}\n\nfunction makeIncrementalAdd(add: MobileNodeMutation, context: ConversionContext): addedNodeMutation[] | null {\n const converted = convertWireframe(add.wireframe, context)\n\n if (!converted) {\n return null\n }\n\n const addition: addedNodeMutation = {\n parentId: chooseParentId(add.wireframe.type, add.parentId),\n nextId: null,\n node: converted.result,\n }\n const adds: addedNodeMutation[] = []\n if (addition) {\n const flattened = flattenMutationAdds(addition)\n flattened.forEach((x) => adds.push(x))\n return adds\n }\n return null\n}\n\n/**\n * When processing an update we remove the entire item, and then add it back in.\n */\nfunction makeIncrementalRemoveForUpdate(update: MobileNodeMutation): removedNodeMutation {\n return {\n parentId: chooseParentId(update.wireframe.type, update.parentId),\n id: update.wireframe.id,\n }\n}\n\nfunction isNode(x: unknown): x is serializedNodeWithId {\n // KLUDGE: really we should check that x.type is valid, but we're safe enough already\n return isObject(x) && 'type' in x && 'id' in x\n}\n\nfunction isNodeWithChildren(x: unknown): x is elementNode | documentNode {\n return isNode(x) && 'childNodes' in x && Array.isArray(x.childNodes)\n}\n\n/**\n * when creating incremental adds we have to flatten the node tree structure\n * there's no point, then keeping those child nodes in place\n */\nfunction cloneWithoutChildren(converted: addedNodeMutation): addedNodeMutation {\n const cloned = { ...converted }\n const clonedNode: serializedNodeWithId = { ...converted.node }\n if (isNodeWithChildren(clonedNode)) {\n clonedNode.childNodes = []\n }\n cloned.node = clonedNode\n return cloned\n}\n\nfunction flattenMutationAdds(converted: addedNodeMutation): addedNodeMutation[] {\n const flattened: addedNodeMutation[] = []\n\n flattened.push(cloneWithoutChildren(converted))\n\n const node: unknown = converted.node\n const newParentId = converted.node.id\n if (isNodeWithChildren(node)) {\n node.childNodes.forEach((child) => {\n flattened.push(\n cloneWithoutChildren({\n parentId: newParentId,\n nextId: null,\n node: child,\n })\n )\n if (isNodeWithChildren(child)) {\n flattened.push(...flattenMutationAdds({ parentId: newParentId, nextId: null, node: child }))\n }\n })\n }\n return flattened\n}\n\n/**\n * each update wireframe carries the entire tree because we don't want to diff on the client\n * that means that we might create multiple mutations for the same node\n * we only want to add it once, so we dedupe the mutations\n * the app guarantees that for a given ID that is present more than once in a single snapshot\n * every instance of that ID is identical\n * it might change in the next snapshot but for a single incremental snapshot there is one\n * and only one version of any given ID\n */\nfunction dedupeMutations(mutations: T[]): T[] {\n // KLUDGE: it's slightly yucky to stringify everything but since synthetic nodes\n // introduce a new id, we can't just compare the id\n const seen = new Set()\n\n // in case later mutations are the ones we want to keep, we reverse the array\n // this does help with the deduping, so, it's likely that the view for a single ID\n // is not consistent over a snapshot, but it's cheap to reverse so :YOLO:\n return mutations\n .reverse()\n .filter((mutation: addedNodeMutation | removedNodeMutation) => {\n let toCompare: string\n if (isRemovedNodeMutation(mutation)) {\n toCompare = JSON.stringify(mutation)\n } else {\n // if this is a synthetic addition, then we need to ignore the id,\n // since duplicates won't have duplicate ids\n toCompare = JSON.stringify({\n ...mutation.node,\n id: 0,\n })\n }\n\n if (seen.has(toCompare)) {\n return false\n }\n seen.add(toCompare)\n return true\n })\n .reverse()\n}\n\n/**\n * We want to ensure that any events don't use id = 0.\n * They must always represent a valid ID from the dom, so we swap in the body id when the id = 0.\n *\n * For \"removes\", we don't need to do anything, the id of the element to be removed remains valid. We won't try and remove other elements that we added during transformation in order to show that element.\n *\n * \"adds\" are converted from wireframes to nodes and converted to `incrementalSnapshotEvent.adds`\n *\n * \"updates\" are converted to a remove and an add.\n *\n */\nexport const makeIncrementalEvent = (\n mobileEvent: (MobileIncrementalSnapshotEvent | incrementalSnapshotEvent) & {\n timestamp: number\n delay?: number\n }\n): incrementalSnapshotEvent & {\n timestamp: number\n delay?: number\n} => {\n const converted = mobileEvent as unknown as incrementalSnapshotEvent & {\n timestamp: number\n delay?: number\n }\n if ('id' in converted.data && converted.data.id === 0) {\n converted.data.id = BODY_ID\n }\n\n if (isMobileIncrementalSnapshotEvent(mobileEvent)) {\n const adds: addedNodeMutation[] = []\n const removes: removedNodeMutation[] = mobileEvent.data.removes || []\n if ('adds' in mobileEvent.data && Array.isArray(mobileEvent.data.adds)) {\n const addsContext = {\n timestamp: mobileEvent.timestamp,\n idSequence: globalIdSequence,\n }\n\n mobileEvent.data.adds.forEach((add) => {\n makeIncrementalAdd(add, addsContext)?.forEach((x) => adds.push(x))\n })\n }\n if ('updates' in mobileEvent.data && Array.isArray(mobileEvent.data.updates)) {\n const updatesContext = {\n timestamp: mobileEvent.timestamp,\n idSequence: globalIdSequence,\n }\n const updateAdditions: addedNodeMutation[] = []\n mobileEvent.data.updates.forEach((update) => {\n const removal = makeIncrementalRemoveForUpdate(update)\n if (removal) {\n removes.push(removal)\n }\n makeIncrementalAdd(update, updatesContext)?.forEach((x) => updateAdditions.push(x))\n })\n dedupeMutations(updateAdditions).forEach((x) => adds.push(x))\n }\n\n converted.data = {\n source: IncrementalSource.Mutation,\n attributes: [],\n texts: [],\n adds: dedupeMutations(adds),\n // TODO: this assumes that removes are processed before adds 🤞\n removes: dedupeMutations(removes),\n }\n }\n\n return converted\n}\n\nfunction makeKeyboardParent(): serializedNodeWithId {\n return {\n type: NodeType.Element,\n tagName: 'div',\n attributes: {\n 'data-render-reason': 'a fixed placeholder to contain the keyboard in the correct stacking position',\n 'data-rrweb-id': KEYBOARD_PARENT_ID,\n },\n id: KEYBOARD_PARENT_ID,\n childNodes: [],\n }\n}\n\nfunction makeStatusBarNode(\n statusBar: wireframeStatusBar | undefined,\n context: ConversionContext\n): serializedNodeWithId {\n const childNodes = statusBar ? convertWireframesFor([statusBar], context).result : []\n return {\n type: NodeType.Element,\n tagName: 'div',\n attributes: {\n 'data-rrweb-id': STATUS_BAR_PARENT_ID,\n },\n id: STATUS_BAR_PARENT_ID,\n childNodes,\n }\n}\n\nfunction makeNavBarNode(\n navigationBar: wireframeNavigationBar | undefined,\n context: ConversionContext\n): serializedNodeWithId {\n const childNodes = navigationBar ? convertWireframesFor([navigationBar], context).result : []\n return {\n type: NodeType.Element,\n tagName: 'div',\n attributes: {\n 'data-rrweb-id': NAVIGATION_BAR_PARENT_ID,\n },\n id: NAVIGATION_BAR_PARENT_ID,\n childNodes,\n }\n}\n\nfunction stripBarsFromWireframe(wireframe: wireframe): {\n wireframe: wireframe | undefined\n statusBar: wireframeStatusBar | undefined\n navBar: wireframeNavigationBar | undefined\n} {\n if (wireframe.type === 'status_bar') {\n return { wireframe: undefined, statusBar: wireframe, navBar: undefined }\n } else if (wireframe.type === 'navigation_bar') {\n return { wireframe: undefined, statusBar: undefined, navBar: wireframe }\n }\n let statusBar: wireframeStatusBar | undefined\n let navBar: wireframeNavigationBar | undefined\n const wireframeToReturn: wireframe | undefined = { ...wireframe }\n wireframeToReturn.childWireframes = []\n for (const child of wireframe.childWireframes || []) {\n const {\n wireframe: childWireframe,\n statusBar: childStatusBar,\n navBar: childNavBar,\n } = stripBarsFromWireframe(child)\n statusBar = statusBar || childStatusBar\n navBar = navBar || childNavBar\n if (childWireframe) {\n wireframeToReturn.childWireframes.push(childWireframe)\n }\n }\n return { wireframe: wireframeToReturn, statusBar, navBar }\n}\n\n/**\n * We want to be able to place the status bar and navigation bar in the correct stacking order.\n * So, we lift them out of the tree, and return them separately.\n */\nexport function stripBarsFromWireframes(wireframes: wireframe[]): {\n statusBar: wireframeStatusBar | undefined\n navigationBar: wireframeNavigationBar | undefined\n appNodes: wireframe[]\n} {\n let statusBar: wireframeStatusBar | undefined\n let navigationBar: wireframeNavigationBar | undefined\n const copiedNodes: wireframe[] = []\n\n wireframes.forEach((w) => {\n const matches = stripBarsFromWireframe(w)\n if (matches.statusBar) {\n statusBar = matches.statusBar\n }\n if (matches.navBar) {\n navigationBar = matches.navBar\n }\n if (matches.wireframe) {\n copiedNodes.push(matches.wireframe)\n }\n })\n return { statusBar, navigationBar, appNodes: copiedNodes }\n}\n\nexport const makeFullEvent = (\n mobileEvent: MobileFullSnapshotEvent & {\n timestamp: number\n delay?: number\n }\n): fullSnapshotEvent & {\n timestamp: number\n delay?: number\n} => {\n // we can restart the id sequence on each full snapshot\n globalIdSequence = ids()\n\n if (!('wireframes' in mobileEvent.data)) {\n return mobileEvent as unknown as fullSnapshotEvent & {\n timestamp: number\n delay?: number\n }\n }\n\n const conversionContext = {\n timestamp: mobileEvent.timestamp,\n idSequence: globalIdSequence,\n }\n\n const { statusBar, navigationBar, appNodes } = stripBarsFromWireframes(mobileEvent.data.wireframes)\n\n const nodeGroups = {\n appNodes: convertWireframesFor(appNodes, conversionContext).result || [],\n statusBarNode: makeStatusBarNode(statusBar, conversionContext),\n navBarNode: makeNavBarNode(navigationBar, conversionContext),\n }\n\n return {\n type: EventType.FullSnapshot,\n timestamp: mobileEvent.timestamp,\n data: {\n node: {\n type: NodeType.Document,\n childNodes: [\n {\n type: NodeType.DocumentType,\n name: 'html',\n publicId: '',\n systemId: '',\n id: HTML_DOC_TYPE_ID,\n },\n {\n type: NodeType.Element,\n tagName: 'html',\n attributes: { style: makeHTMLStyles(), 'data-rrweb-id': HTML_ELEMENT_ID },\n id: HTML_ELEMENT_ID,\n childNodes: [\n {\n type: NodeType.Element,\n tagName: 'head',\n attributes: { 'data-rrweb-id': HEAD_ID },\n id: HEAD_ID,\n childNodes: [makeCSSReset(conversionContext)],\n },\n {\n type: NodeType.Element,\n tagName: 'body',\n attributes: { style: makeBodyStyles(), 'data-rrweb-id': BODY_ID },\n id: BODY_ID,\n childNodes: [\n // in the order they should stack if they ever clash\n // lower is higher in the stacking context\n ...nodeGroups.appNodes,\n makeKeyboardParent(),\n nodeGroups.navBarNode,\n nodeGroups.statusBarNode,\n ],\n },\n ],\n },\n ],\n id: DOCUMENT_ID,\n },\n initialOffset: {\n top: 0,\n left: 0,\n },\n },\n }\n}\n\nfunction makeCSSReset(context: ConversionContext): serializedNodeWithId {\n // we need to normalize CSS so browsers don't do unexpected things\n return {\n type: NodeType.Element,\n tagName: 'style',\n attributes: {\n type: 'text/css',\n },\n id: context.idSequence.next().value,\n childNodes: [\n {\n type: NodeType.Text,\n textContent: `\n body {\n margin: unset;\n }\n input, button, select, textarea {\n font: inherit;\n margin: 0;\n padding: 0;\n border: 0;\n outline: 0;\n background: transparent;\n padding-block: 0 !important;\n }\n .input:focus {\n outline: none;\n }\n img {\n border-style: none;\n }\n `,\n id: context.idSequence.next().value,\n },\n ],\n }\n}\n","import posthogEE from '@posthog/ee/exports'\nimport { customEvent, EventType, eventWithTime, fullSnapshotEvent, IncrementalSource } from '@rrweb/types'\nimport { captureException } from '@sentry/react'\nimport { gunzipSync, strFromU8, strToU8 } from 'fflate'\nimport {\n actions,\n afterMount,\n beforeUnmount,\n connect,\n defaults,\n kea,\n key,\n listeners,\n path,\n props,\n reducers,\n selectors,\n} from 'kea'\nimport { loaders } from 'kea-loaders'\nimport { subscriptions } from 'kea-subscriptions'\nimport api from 'lib/api'\nimport { FEATURE_FLAGS } from 'lib/constants'\nimport { Dayjs, dayjs } from 'lib/dayjs'\nimport { featureFlagLogic, FeatureFlagsSet } from 'lib/logic/featureFlagLogic'\nimport { isObject } from 'lib/utils'\nimport { chainToElements } from 'lib/utils/elements-chain'\nimport { eventUsageLogic } from 'lib/utils/eventUsageLogic'\nimport posthog from 'posthog-js'\nimport { compressedEventWithTime } from 'posthog-js/lib/src/extensions/replay/sessionrecording'\nimport { RecordingComment } from 'scenes/session-recordings/player/inspector/playerInspectorLogic'\nimport { teamLogic } from 'scenes/teamLogic'\n\nimport { HogQLQuery, NodeKind } from '~/queries/schema'\nimport { hogql } from '~/queries/utils'\nimport {\n AnyPropertyFilter,\n EncodedRecordingSnapshot,\n PersonType,\n PropertyFilterType,\n PropertyOperator,\n RecordingEventsFilters,\n RecordingEventType,\n RecordingReportLoadTimes,\n RecordingSegment,\n RecordingSnapshot,\n SessionPlayerData,\n SessionRecordingId,\n SessionRecordingSnapshotParams,\n SessionRecordingSnapshotSource,\n SessionRecordingSnapshotSourceResponse,\n SessionRecordingType,\n SessionRecordingUsageType,\n SnapshotSourceType,\n} from '~/types'\n\nimport { PostHogEE } from '../../../../@posthog/ee/types'\nimport { ExportedSessionRecordingFileV2 } from '../file-playback/types'\nimport type { sessionRecordingDataLogicType } from './sessionRecordingDataLogicType'\nimport { createSegments, mapSnapshotsToWindowId } from './utils/segmenter'\n\nconst IS_TEST_MODE = process.env.NODE_ENV === 'test'\nconst BUFFER_MS = 60000 // +- before and after start and end of a recording to query for.\nconst DEFAULT_REALTIME_POLLING_MILLIS = 3000\n\nlet postHogEEModule: PostHogEE\n\nfunction isRecordingSnapshot(x: unknown): x is RecordingSnapshot {\n return typeof x === 'object' && x !== null && 'type' in x && 'timestamp' in x\n}\n\n/*\n there was a bug in mobile SDK that didn't consistently send a meta event with a full snapshot.\n rrweb player hides itself until it has seen the meta event 🤷\n but we can patch a meta event into the recording data to make it work\n*/\nfunction patchMetaEventIntoMobileData(parsedLines: RecordingSnapshot[]): RecordingSnapshot[] {\n let fullSnapshotIndex: number = -1\n let metaIndex: number = -1\n try {\n fullSnapshotIndex = parsedLines.findIndex((l) => l.type === EventType.FullSnapshot)\n metaIndex = parsedLines.findIndex((l) => l.type === EventType.Meta)\n\n // then we need to patch the meta event into the snapshot data\n if (fullSnapshotIndex > -1 && metaIndex === -1) {\n const fullSnapshot = parsedLines[fullSnapshotIndex] as RecordingSnapshot & fullSnapshotEvent & eventWithTime\n // a full snapshot (particularly from the mobile transformer) has a relatively fixed structure,\n // but the types exposed by rrweb don't quite cover what we need , so...\n const mainNode = fullSnapshot.data.node as any\n const targetNode = mainNode.childNodes[1].childNodes[1].childNodes[0]\n const { width, height } = targetNode.attributes\n const metaEvent: RecordingSnapshot = {\n windowId: fullSnapshot.windowId,\n type: EventType.Meta,\n timestamp: fullSnapshot.timestamp,\n data: {\n href: getHrefFromSnapshot(fullSnapshot) || '',\n width,\n height,\n },\n }\n parsedLines.splice(fullSnapshotIndex, 0, metaEvent)\n }\n } catch (e) {\n captureException(e, {\n tags: { feature: 'session-recording-missing-meta-patching' },\n extra: { fullSnapshotIndex, metaIndex },\n })\n }\n\n return parsedLines\n}\n\nfunction hasAnyWireframes(snapshotData: Record[]): boolean {\n return snapshotData.some((d) => {\n return isObject(d.data) && 'wireframes' in d.data\n })\n}\n\nfunction isCompressedEvent(ev: unknown): ev is compressedEventWithTime {\n return typeof ev === 'object' && ev !== null && 'cv' in ev\n}\n\nfunction unzip(compressedStr: string): any {\n return JSON.parse(strFromU8(gunzipSync(strToU8(compressedStr, true))))\n}\n\n/**\n *\n * takes an event that might be from web, might be from mobile,\n * and might be partially compressed,\n * and decompresses it when possible\n *\n * you can't return a union of `KnownType | unknown`\n * so even though this returns `eventWithTime | unknown`\n * it has to be typed as only unknown\n */\nfunction decompressEvent(ev: unknown): unknown {\n try {\n if (isCompressedEvent(ev)) {\n if (ev.cv === '2024-10') {\n if (ev.type === EventType.FullSnapshot) {\n return {\n ...ev,\n data: unzip(ev.data),\n }\n } else if (ev.type === EventType.IncrementalSnapshot) {\n if (ev.data.source === IncrementalSource.StyleSheetRule) {\n return {\n ...ev,\n data: {\n ...ev.data,\n source: IncrementalSource.StyleSheetRule,\n adds: unzip(ev.data.adds),\n removes: unzip(ev.data.removes),\n },\n }\n } else if (ev.data.source === IncrementalSource.Mutation) {\n return {\n ...ev,\n data: {\n ...ev.data,\n source: IncrementalSource.Mutation,\n adds: unzip(ev.data.adds),\n removes: unzip(ev.data.removes),\n texts: unzip(ev.data.texts),\n attributes: unzip(ev.data.attributes),\n },\n }\n }\n }\n } else {\n posthog.captureException(new Error('Unknown compressed event version'), {\n feature: 'session-recording-compressed-event-decompression',\n compressedEvent: ev,\n compressionVersion: ev.cv,\n })\n // probably unplayable but we don't know how to decompress it\n return ev\n }\n }\n return ev\n } catch (e) {\n posthog.captureException((e as Error) || new Error('Could not decompress event'), {\n feature: 'session-recording-compressed-event-decompression',\n compressedEvent: ev,\n })\n return ev\n }\n}\n\n/**\n * We can receive data in one of multiple formats, so we treat it as unknown\n * And if we can't process it force it into eventWithTime\n *\n * If it can't be case as eventWithTime by this point then it's probably not a valid event anyway\n */\nfunction coerceToEventWithTime(d: unknown, withMobileTransformer: boolean): eventWithTime {\n // we decompress first so that we could support partial compression on mobile in future\n const currentEvent = decompressEvent(d)\n return withMobileTransformer\n ? postHogEEModule?.mobileReplay?.transformEventToWeb(currentEvent) || (currentEvent as eventWithTime)\n : (currentEvent as eventWithTime)\n}\n\nexport const parseEncodedSnapshots = async (\n items: (RecordingSnapshot | EncodedRecordingSnapshot | string)[],\n sessionId: string,\n // this is only kept so that we can export the untransformed data for debugging\n withMobileTransformer: boolean = true\n): Promise => {\n if (!postHogEEModule) {\n postHogEEModule = await posthogEE()\n }\n\n const lineCount = items.length\n const unparseableLines: string[] = []\n let isMobileSnapshots = false\n\n const parsedLines: RecordingSnapshot[] = items.flatMap((l) => {\n if (!l) {\n // blob files have an empty line at the end\n return []\n }\n try {\n const snapshotLine = typeof l === 'string' ? (JSON.parse(l) as EncodedRecordingSnapshot) : l\n const snapshotData = isRecordingSnapshot(snapshotLine) ? [snapshotLine] : snapshotLine['data']\n\n if (!isMobileSnapshots) {\n isMobileSnapshots = hasAnyWireframes(snapshotData)\n }\n\n return snapshotData.map((d: unknown) => {\n const snap = coerceToEventWithTime(d, withMobileTransformer)\n\n return {\n // this handles parsing data that was loaded from blob storage \"window_id\"\n // and data that was exported from the front-end \"windowId\"\n // we have more than one format of data that we store/pass around\n // but only one that we play back\n windowId: snapshotLine['window_id'] || snapshotLine['windowId'],\n ...snap,\n }\n })\n } catch (e) {\n if (typeof l === 'string') {\n unparseableLines.push(l)\n }\n return []\n }\n })\n\n if (unparseableLines.length) {\n const extra = {\n playbackSessionId: sessionId,\n totalLineCount: lineCount,\n unparseableLinesCount: unparseableLines.length,\n exampleLines: unparseableLines.slice(0, 3),\n }\n posthog.capture('session recording had unparseable lines', {\n ...extra,\n feature: 'session-recording-snapshot-processing',\n })\n }\n\n return isMobileSnapshots ? patchMetaEventIntoMobileData(parsedLines) : parsedLines\n}\n\nconst getHrefFromSnapshot = (snapshot: unknown): string | undefined => {\n return isObject(snapshot) && 'data' in snapshot\n ? (snapshot.data as any)?.href || (snapshot.data as any)?.payload?.href\n : undefined\n}\n\n/*\n cyrb53 (c) 2018 bryc (github.com/bryc)\n License: Public domain. Attribution appreciated.\n A fast and simple 53-bit string hash function with decent collision resistance.\n Largely inspired by MurmurHash2/3, but with a focus on speed/simplicity.\n*/\nconst cyrb53 = function (str: string, seed = 0): number {\n let h1 = 0xdeadbeef ^ seed,\n h2 = 0x41c6ce57 ^ seed\n for (let i = 0, ch; i < str.length; i++) {\n ch = str.charCodeAt(i)\n h1 = Math.imul(h1 ^ ch, 2654435761)\n h2 = Math.imul(h2 ^ ch, 1597334677)\n }\n h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507)\n h1 ^= Math.imul(h2 ^ (h2 >>> 13), 3266489909)\n h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507)\n h2 ^= Math.imul(h1 ^ (h1 >>> 13), 3266489909)\n return 4294967296 * (2097151 & h2) + (h1 >>> 0)\n}\n\nexport const deduplicateSnapshots = (snapshots: RecordingSnapshot[] | null): RecordingSnapshot[] => {\n const seenHashes: Set = new Set()\n\n return (snapshots ?? [])\n .filter((snapshot) => {\n // For a multitude of reasons, there can be duplicate snapshots in the same recording.\n // we have to stringify the snapshot to compare it to other snapshots.\n // so we can filter by storing them all in a set\n\n // we can see duplicates that only differ by delay - these still count as duplicates\n // even though the delay would hide that\n const { delay: _delay, ...delayFreeSnapshot } = snapshot\n // we check each item multiple times as new snapshots come in\n // so store the computer value on the object to save recalculating it so much\n const key = (snapshot as any).seen || cyrb53(JSON.stringify(delayFreeSnapshot))\n ;(snapshot as any).seen = key\n\n if (seenHashes.has(key)) {\n return false\n }\n seenHashes.add(key)\n return true\n })\n .sort((a, b) => a.timestamp - b.timestamp)\n}\n\nconst generateRecordingReportDurations = (cache: Record): RecordingReportLoadTimes => {\n return {\n metadata: cache.metadataLoadDuration || Math.round(performance.now() - cache.metaStartTime),\n snapshots: cache.snapshotsLoadDuration || Math.round(performance.now() - cache.snapshotsStartTime),\n events: cache.eventsLoadDuration || Math.round(performance.now() - cache.eventsStartTime),\n firstPaint: cache.firstPaintDuration,\n }\n}\n\nconst resetTimingsCache = (cache: Record): void => {\n cache.metaStartTime = null\n cache.metadataLoadDuration = null\n cache.snapshotsStartTime = null\n cache.snapshotsLoadDuration = null\n cache.eventsStartTime = null\n cache.eventsLoadDuration = null\n cache.firstPaintDuration = null\n}\n\nexport interface SessionRecordingDataLogicProps {\n sessionRecordingId: SessionRecordingId\n realTimePollingIntervalMilliseconds?: number\n}\n\nfunction makeEventsQuery(\n person: PersonType | null,\n distinctId: string | null,\n start: Dayjs,\n end: Dayjs,\n properties: AnyPropertyFilter[]\n): Promise {\n return api.query({\n kind: NodeKind.EventsQuery,\n // NOTE: Be careful adding fields here. We want to keep the payload as small as possible to load all events quickly\n select: [\n 'uuid',\n 'event',\n 'timestamp',\n 'elements_chain',\n 'properties.$window_id',\n 'properties.$current_url',\n 'properties.$event_type',\n ],\n orderBy: ['timestamp ASC'],\n limit: 1000000,\n personId: person ? String(person.id) : undefined,\n after: start.subtract(BUFFER_MS, 'ms').format(),\n before: end.add(BUFFER_MS, 'ms').format(),\n properties: properties,\n where: distinctId ? [`distinct_id = ('${distinctId}')`] : undefined,\n })\n}\n\nasync function processEncodedResponse(\n encodedResponse: (EncodedRecordingSnapshot | string)[],\n props: SessionRecordingDataLogicProps,\n featureFlags: FeatureFlagsSet\n): Promise<{ transformed: RecordingSnapshot[]; untransformed: RecordingSnapshot[] | null }> {\n let untransformed: RecordingSnapshot[] | null = null\n\n const transformed = await parseEncodedSnapshots(encodedResponse, props.sessionRecordingId)\n\n if (featureFlags[FEATURE_FLAGS.SESSION_REPLAY_EXPORT_MOBILE_DATA]) {\n untransformed = await parseEncodedSnapshots(\n encodedResponse,\n props.sessionRecordingId,\n false // don't transform mobile data\n )\n }\n\n return { transformed, untransformed }\n}\n\nconst getSourceKey = (source: SessionRecordingSnapshotSource): string => {\n // realtime sources vary so blob_key is not always present and is either null or undefined...\n // we only care about key when not realtime\n // and we'll always have a key when not realtime\n return `${source.source}-${source.blob_key || source.source}`\n}\n\nexport const sessionRecordingDataLogic = kea([\n path((key) => ['scenes', 'session-recordings', 'sessionRecordingDataLogic', key]),\n props({} as SessionRecordingDataLogicProps),\n key(({ sessionRecordingId }) => sessionRecordingId || 'no-session-recording-id'),\n connect({\n logic: [eventUsageLogic],\n values: [featureFlagLogic, ['featureFlags'], teamLogic, ['currentTeam']],\n }),\n defaults({\n sessionPlayerMetaData: null as SessionRecordingType | null,\n }),\n actions({\n setFilters: (filters: Partial) => ({ filters }),\n loadRecordingMeta: true,\n loadRecordingComments: true,\n maybeLoadRecordingMeta: true,\n loadSnapshots: true,\n loadSnapshotSources: true,\n loadNextSnapshotSource: true,\n loadSnapshotsForSource: (source: Pick) => ({ source }),\n loadEvents: true,\n loadFullEventData: (event: RecordingEventType | RecordingEventType[]) => ({ event }),\n markViewed: (delay?: number) => ({ delay }),\n reportUsageIfFullyLoaded: true,\n persistRecording: true,\n maybePersistRecording: true,\n pollRealtimeSnapshots: true,\n stopRealtimePolling: true,\n setTrackedWindow: (windowId: string | null) => ({ windowId }),\n setWasMarkedViewed: (wasMarkedViewed: boolean) => ({ wasMarkedViewed }),\n }),\n reducers(() => ({\n trackedWindow: [\n null as string | null,\n {\n setTrackedWindow: (_, { windowId }) => windowId,\n },\n ],\n filters: [\n {} as Partial,\n {\n setFilters: (state, { filters }) => ({ ...state, ...filters }),\n },\n ],\n isRealtimePolling: [\n false as boolean,\n {\n pollRealtimeSnapshots: () => true,\n stopRealtimePolling: () => false,\n },\n ],\n isNotFound: [\n false as boolean,\n {\n loadRecordingMeta: () => false,\n loadRecordingMetaSuccess: () => false,\n loadRecordingMetaFailure: () => true,\n },\n ],\n snapshotsBySource: [\n null as Record | null,\n {\n loadSnapshotsForSourceSuccess: (state, { snapshotsForSource }) => {\n const sourceKey = getSourceKey(snapshotsForSource.source)\n\n return {\n ...state,\n [sourceKey]: snapshotsForSource,\n }\n },\n },\n ],\n wasMarkedViewed: [\n false as boolean,\n {\n setWasMarkedViewed: (_, { wasMarkedViewed }) => wasMarkedViewed,\n },\n ],\n })),\n loaders(({ values, props, cache }) => ({\n sessionComments: {\n loadRecordingComments: async (_, breakpoint) => {\n const empty: RecordingComment[] = []\n if (!props.sessionRecordingId) {\n return empty\n }\n\n const response = await api.notebooks.recordingComments(props.sessionRecordingId)\n breakpoint()\n\n return response.results || empty\n },\n },\n sessionPlayerMetaData: {\n loadRecordingMeta: async (_, breakpoint) => {\n if (!props.sessionRecordingId) {\n return null\n }\n\n cache.metaStartTime = performance.now()\n\n const response = await api.recordings.get(props.sessionRecordingId)\n breakpoint()\n\n return response\n },\n\n persistRecording: async (_, breakpoint) => {\n if (!values.sessionPlayerMetaData) {\n return null\n }\n await breakpoint(100)\n await api.recordings.persist(props.sessionRecordingId)\n\n return {\n ...values.sessionPlayerMetaData,\n storage: 'object_storage_lts',\n }\n },\n },\n snapshotSources: [\n null as SessionRecordingSnapshotSource[] | null,\n {\n loadSnapshotSources: async () => {\n const response = await api.recordings.listSnapshotSources(props.sessionRecordingId)\n return response.sources ?? []\n },\n },\n ],\n snapshotsForSource: [\n null as SessionRecordingSnapshotSourceResponse | null,\n {\n loadSnapshotsForSource: async ({ source }, breakpoint) => {\n let params: SessionRecordingSnapshotParams\n\n if (source.source === SnapshotSourceType.blob) {\n if (!source.blob_key) {\n throw new Error('Missing key')\n }\n params = { blob_key: source.blob_key, source: 'blob' }\n } else if (source.source === SnapshotSourceType.realtime) {\n params = { source: 'realtime', version: '2024-04-30' }\n } else {\n throw new Error(`Unsupported source: ${source.source}`)\n }\n\n const snapshotLoadingStartTime = performance.now()\n\n if (!cache.snapshotsStartTime) {\n cache.snapshotsStartTime = snapshotLoadingStartTime\n }\n\n await breakpoint(1)\n\n const response = await api.recordings.getSnapshots(props.sessionRecordingId, params).catch((e) => {\n if (source.source === 'realtime' && e.status === 404) {\n // Realtime source is not always available so a 404 is expected\n return []\n }\n throw e\n })\n\n const { transformed, untransformed } = await processEncodedResponse(\n response,\n props,\n values.featureFlags\n )\n\n return { snapshots: transformed, untransformed_snapshots: untransformed ?? undefined, source }\n },\n },\n ],\n sessionEventsData: [\n null as null | RecordingEventType[],\n {\n loadEvents: async () => {\n if (!cache.eventsStartTime) {\n cache.eventsStartTime = performance.now()\n }\n\n const { start, end, person } = values.sessionPlayerData\n\n if (!person || !start || !end) {\n return null\n }\n\n const [sessionEvents, relatedEvents]: any[] = await Promise.all([\n // make one query for all events that are part of the session\n makeEventsQuery(null, null, start, end, [\n {\n key: '$session_id',\n value: [props.sessionRecordingId],\n operator: PropertyOperator.Exact,\n type: PropertyFilterType.Event,\n },\n ]),\n // make a second for all events from that person,\n // not marked as part of the session\n // but in the same time range\n // these are probably e.g. backend events for the session\n // but with no session id\n // since posthog-js must always add session id we can also\n // take advantage of lib being materialized and further filter\n makeEventsQuery(null, values.sessionPlayerMetaData?.distinct_id || null, start, end, [\n {\n key: '$session_id',\n value: '',\n operator: PropertyOperator.Exact,\n type: PropertyFilterType.Event,\n },\n {\n key: '$lib',\n value: ['web'],\n operator: PropertyOperator.IsNot,\n type: PropertyFilterType.Event,\n },\n ]),\n ])\n\n return [...sessionEvents.results, ...relatedEvents.results].map(\n (event: any): RecordingEventType => {\n const currentUrl = event[5]\n // We use the pathname to simplify the UI - we build it here instead of fetching it to keep data usage small\n let pathname: string | undefined\n try {\n pathname = event[5] ? new URL(event[5]).pathname : undefined\n } catch {\n pathname = undefined\n }\n\n return {\n id: event[0],\n event: event[1],\n timestamp: event[2],\n elements: chainToElements(event[3]),\n properties: {\n $window_id: event[4],\n $current_url: currentUrl,\n $event_type: event[6],\n $pathname: pathname,\n },\n playerTime: +dayjs(event[2]) - +start,\n fullyLoaded: false,\n }\n }\n )\n },\n\n loadFullEventData: async ({ event }) => {\n // box so we're always dealing with a list\n const events = Array.isArray(event) ? event : [event]\n\n let existingEvents = values.sessionEventsData?.filter((x) => events.some((e) => e.id === x.id))\n\n const allEventsAreFullyLoaded =\n existingEvents?.every((e) => e.fullyLoaded) && existingEvents.length === events.length\n if (!existingEvents || allEventsAreFullyLoaded) {\n return values.sessionEventsData\n }\n\n existingEvents = existingEvents.filter((e) => !e.fullyLoaded)\n const timestamps = existingEvents.map((ee) => dayjs(ee.timestamp).utc().valueOf())\n const eventNames = Array.from(new Set(existingEvents.map((ee) => ee.event)))\n const eventIds = existingEvents.map((ee) => ee.id)\n const earliestTimestamp = timestamps.reduce((a, b) => Math.min(a, b))\n const latestTimestamp = timestamps.reduce((a, b) => Math.max(a, b))\n try {\n const query: HogQLQuery = {\n kind: NodeKind.HogQLQuery,\n query: hogql`SELECT properties, uuid\n FROM events\n WHERE timestamp > ${(earliestTimestamp - 1000) / 1000}\n AND timestamp < ${(latestTimestamp + 1000) / 1000}\n AND event in ${eventNames}\n AND uuid in ${eventIds}`,\n }\n const response = await api.query(query)\n if (response.error) {\n throw new Error(response.error)\n }\n\n for (const event of existingEvents) {\n const result = response.results.find((x: any) => {\n return x[1] === event.id\n })\n\n if (result) {\n event.properties = JSON.parse(result[0])\n event.fullyLoaded = true\n }\n }\n } catch (e) {\n // NOTE: This is not ideal but should happen so rarely that it is tolerable.\n existingEvents.forEach((e) => (e.fullyLoaded = true))\n captureException(e, {\n tags: { feature: 'session-recording-load-full-event-data' },\n })\n }\n\n // here we map the events list because we want the result to be a new instance to trigger downstream recalculation\n return !values.sessionEventsData\n ? values.sessionEventsData\n : values.sessionEventsData.map((x) => {\n const event = existingEvents?.find((ee) => ee.id === x.id)\n return event\n ? ({\n ...x,\n properties: event.properties,\n fullyLoaded: event.fullyLoaded,\n } as RecordingEventType)\n : x\n })\n },\n },\n ],\n similarRecordings: [\n null as [string, number][] | null,\n {\n fetchSimilarRecordings: async () => {\n return await api.recordings.similarRecordings(props.sessionRecordingId)\n },\n },\n ],\n })),\n listeners(({ values, actions, cache, props }) => ({\n loadSnapshots: () => {\n // This kicks off the loading chain\n if (!values.snapshotSourcesLoading) {\n actions.loadSnapshotSources()\n }\n },\n maybeLoadRecordingMeta: () => {\n if (!values.sessionPlayerMetaDataLoading) {\n actions.loadRecordingMeta()\n }\n if (!values.sessionCommentsLoading) {\n actions.loadRecordingComments()\n }\n },\n loadSnapshotSources: () => {\n // We only load events once we actually start loading the recording\n actions.loadEvents()\n },\n loadRecordingMetaSuccess: () => {\n cache.metadataLoadDuration = Math.round(performance.now() - cache.metaStartTime)\n actions.reportUsageIfFullyLoaded()\n },\n loadRecordingMetaFailure: () => {\n cache.metadataLoadDuration = Math.round(performance.now() - cache.metaStartTime)\n },\n\n loadSnapshotSourcesSuccess: () => {\n // When we receive the list of sources we can kick off the loading chain\n actions.loadNextSnapshotSource()\n },\n\n loadSnapshotsForSourceSuccess: ({ snapshotsForSource }) => {\n const sources = values.snapshotSources\n const snapshots = snapshotsForSource.snapshots\n\n // Cache the last response count to detect if we're getting the same data over and over\n const newSnapshotsCount = snapshots.length\n\n if ((cache.lastSnapshotsCount ?? newSnapshotsCount) === newSnapshotsCount) {\n // if we're getting no results from realtime polling we can increment faster\n // so that we stop polling sooner\n const increment = newSnapshotsCount === 0 ? 2 : 1\n cache.lastSnapshotsUnchangedCount = (cache.lastSnapshotsUnchangedCount ?? 0) + increment\n } else {\n cache.lastSnapshotsUnchangedCount = 0\n }\n cache.lastSnapshotsCount = newSnapshotsCount\n\n if (!snapshots.length && sources?.length === 1) {\n // We got only a single source to load, loaded it successfully, but it had no snapshots.\n posthog.capture('recording_snapshots_v2_empty_response', {\n source: sources[0],\n })\n } else if (!cache.firstPaintDuration) {\n cache.firstPaintDuration = Math.round(performance.now() - cache.snapshotsStartTime)\n }\n if (!values.wasMarkedViewed) {\n actions.markViewed()\n }\n\n actions.loadNextSnapshotSource()\n },\n\n loadNextSnapshotSource: () => {\n const nextSourceToLoad = values.snapshotSources?.find((s) => {\n const sourceKey = getSourceKey(s)\n return !values.snapshotsBySource?.[sourceKey]\n })\n\n if (nextSourceToLoad) {\n return actions.loadSnapshotsForSource(nextSourceToLoad)\n }\n\n // TODO: Move this to a one time check - only report once per recording\n cache.snapshotsLoadDuration = Math.round(performance.now() - cache.snapshotsStartTime)\n actions.reportUsageIfFullyLoaded()\n\n // If we have a realtime source, start polling it\n const realTimeSource = values.snapshotSources?.find((s) => s.source === SnapshotSourceType.realtime)\n if (realTimeSource) {\n actions.pollRealtimeSnapshots()\n }\n },\n loadSnapshotsForSourceFailure: () => {\n cache.snapshotsLoadDuration = Math.round(performance.now() - cache.snapshotsStartTime)\n },\n pollRealtimeSnapshots: () => {\n // always make sure we've cleared up the last timeout\n clearTimeout(cache.realTimePollingTimeoutID)\n cache.realTimePollingTimeoutID = null\n\n // ten is an arbitrary limit to try to avoid sending requests to our backend unnecessarily\n // we could change this or add to it e.g. only poll if browser is visible to user\n if ((cache.lastSnapshotsUnchangedCount ?? 0) <= 10) {\n cache.realTimePollingTimeoutID = setTimeout(() => {\n actions.loadSnapshotsForSource({ source: SnapshotSourceType.realtime })\n }, props.realTimePollingIntervalMilliseconds || DEFAULT_REALTIME_POLLING_MILLIS)\n } else {\n actions.stopRealtimePolling()\n }\n },\n loadEventsSuccess: () => {\n cache.eventsLoadDuration = Math.round(performance.now() - cache.eventsStartTime)\n actions.reportUsageIfFullyLoaded()\n },\n loadEventsFailure: () => {\n cache.eventsLoadDuration = Math.round(performance.now() - cache.eventsStartTime)\n },\n reportUsageIfFullyLoaded: (_, breakpoint) => {\n breakpoint()\n if (values.fullyLoaded) {\n eventUsageLogic.actions.reportRecording(\n values.sessionPlayerData,\n generateRecordingReportDurations(cache),\n SessionRecordingUsageType.LOADED,\n values.sessionPlayerMetaData,\n 0\n )\n // Reset cache now that final usage report has been sent\n resetTimingsCache(cache)\n }\n },\n markViewed: async ({ delay }, breakpoint) => {\n const durations = generateRecordingReportDurations(cache)\n // Triggered on first paint\n breakpoint()\n if (values.wasMarkedViewed) {\n return\n }\n actions.setWasMarkedViewed(true) // this prevents us from calling the function multiple times\n\n await breakpoint(IS_TEST_MODE ? 1 : delay ?? 3000)\n await api.recordings.update(props.sessionRecordingId, {\n viewed: true,\n player_metadata: values.sessionPlayerMetaData,\n durations,\n })\n await breakpoint(IS_TEST_MODE ? 1 : 10000)\n await api.recordings.update(props.sessionRecordingId, {\n analyzed: true,\n player_metadata: values.sessionPlayerMetaData,\n durations,\n })\n },\n\n maybePersistRecording: () => {\n if (values.sessionPlayerMetaDataLoading) {\n return\n }\n\n if (values.sessionPlayerMetaData?.storage === 'object_storage') {\n actions.persistRecording()\n }\n },\n })),\n selectors(({ cache }) => ({\n webVitalsEvents: [\n (s) => [s.sessionEventsData],\n (sessionEventsData): RecordingEventType[] =>\n (sessionEventsData || []).filter((e) => e.event === '$web_vitals'),\n ],\n\n windowIdForTimestamp: [\n (s) => [s.segments],\n (segments) =>\n (timestamp: number): string | undefined => {\n return segments.find(\n (segment) => segment.startTimestamp <= timestamp && segment.endTimestamp >= timestamp\n )?.windowId\n },\n ],\n\n sessionPlayerData: [\n (s, p) => [\n s.sessionPlayerMetaData,\n s.snapshotsByWindowId,\n s.segments,\n s.bufferedToTime,\n s.start,\n s.end,\n s.durationMs,\n s.fullyLoaded,\n p.sessionRecordingId,\n ],\n (\n meta,\n snapshotsByWindowId,\n segments,\n bufferedToTime,\n start,\n end,\n durationMs,\n fullyLoaded,\n sessionRecordingId\n ): SessionPlayerData => ({\n person: meta?.person ?? null,\n start,\n end,\n durationMs,\n snapshotsByWindowId,\n segments,\n bufferedToTime,\n fullyLoaded,\n sessionRecordingId,\n }),\n ],\n\n snapshotsLoading: [\n (s) => [s.snapshotSourcesLoading, s.snapshotsForSourceLoading],\n (snapshotSourcesLoading, snapshotsForSourceLoading): boolean => {\n // if there's a realTimePollingTimeoutID, don't signal that we're loading\n // we don't want the UI to flip to \"loading\" every time we poll\n return !cache.realTimePollingTimeoutID && (snapshotSourcesLoading || snapshotsForSourceLoading)\n },\n ],\n\n snapshotsLoaded: [(s) => [s.snapshotSources], (snapshotSources): boolean => !!snapshotSources],\n\n fullyLoaded: [\n (s) => [s.snapshots, s.sessionPlayerMetaDataLoading, s.snapshotsLoading, s.sessionEventsDataLoading],\n (snapshots, sessionPlayerMetaDataLoading, snapshotsLoading, sessionEventsDataLoading): boolean => {\n // TODO: Do a proper check for all sources having been loaded\n return (\n !!snapshots.length &&\n !sessionPlayerMetaDataLoading &&\n !snapshotsLoading &&\n !sessionEventsDataLoading\n )\n },\n ],\n\n firstSnapshot: [\n (s) => [s.snapshots],\n (snapshots): RecordingSnapshot | null => {\n return snapshots[0] || null\n },\n ],\n\n lastSnapshot: [\n (s) => [s.snapshots],\n (snapshots): RecordingSnapshot | null => {\n return snapshots[snapshots.length - 1] || null\n },\n ],\n\n start: [\n (s) => [s.firstSnapshot, s.sessionPlayerMetaData],\n (firstSnapshot, meta): Dayjs | null => {\n const eventStart = meta?.start_time ? dayjs(meta.start_time) : null\n const snapshotStart = firstSnapshot ? dayjs(firstSnapshot.timestamp) : null\n\n // whichever is earliest\n if (eventStart && snapshotStart) {\n return eventStart.isBefore(snapshotStart) ? eventStart : snapshotStart\n }\n return eventStart || snapshotStart\n },\n ],\n\n end: [\n (s) => [s.lastSnapshot, s.sessionPlayerMetaData],\n (lastSnapshot, meta): Dayjs | null => {\n const eventEnd = meta?.end_time ? dayjs(meta.end_time) : null\n const snapshotEnd = lastSnapshot ? dayjs(lastSnapshot.timestamp) : null\n\n // whichever is latest\n if (eventEnd && snapshotEnd) {\n return eventEnd.isAfter(snapshotEnd) ? eventEnd : snapshotEnd\n }\n return eventEnd || snapshotEnd\n },\n ],\n\n durationMs: [\n (s) => [s.start, s.end],\n (start, end): number => {\n return !!start && !!end ? end.diff(start) : 0\n },\n ],\n\n segments: [\n (s) => [s.snapshots, s.start, s.end, s.trackedWindow],\n (snapshots, start, end, trackedWindow): RecordingSegment[] => {\n return createSegments(snapshots || [], start, end, trackedWindow)\n },\n ],\n\n urls: [\n (s) => [s.snapshots],\n (snapshots): { url: string; timestamp: number }[] => {\n return (\n snapshots\n .filter((snapshot) => getHrefFromSnapshot(snapshot))\n .map((snapshot) => {\n return {\n url: getHrefFromSnapshot(snapshot) as string,\n timestamp: snapshot.timestamp,\n }\n }) ?? []\n )\n },\n ],\n\n snapshots: [\n (s) => [s.snapshotSources, s.snapshotsBySource],\n (sources, snapshotsBySource): RecordingSnapshot[] => {\n const allSnapshots =\n sources?.flatMap((source) => {\n const sourceKey = getSourceKey(source)\n return snapshotsBySource?.[sourceKey]?.snapshots || []\n }) ?? []\n\n return deduplicateSnapshots(allSnapshots)\n },\n ],\n\n untransformedSnapshots: [\n (s) => [s.snapshotSources, s.snapshotsBySource],\n (sources, snapshotsBySource): RecordingSnapshot[] => {\n const allSnapshots =\n sources?.flatMap((source) => {\n const sourceKey = getSourceKey(source)\n return snapshotsBySource?.[sourceKey]?.untransformed_snapshots || []\n }) ?? []\n\n return deduplicateSnapshots(allSnapshots)\n },\n ],\n\n snapshotsByWindowId: [\n (s) => [s.snapshots],\n (snapshots): Record => {\n return mapSnapshotsToWindowId(snapshots || [])\n },\n ],\n\n snapshotsInvalid: [\n (s, p) => [s.snapshotsByWindowId, s.fullyLoaded, s.start, p.sessionRecordingId, s.currentTeam],\n (snapshotsByWindowId, fullyLoaded, start, sessionRecordingId, currentTeam): boolean => {\n if (!fullyLoaded || !start) {\n return false\n }\n\n const windowsHaveFullSnapshot = Object.entries(snapshotsByWindowId).reduce(\n (acc, [windowId, events]) => {\n acc[`window-id-${windowId}-has-full-snapshot`] = events.some(\n (event) => event.type === EventType.FullSnapshot\n )\n return acc\n },\n {}\n )\n const anyWindowMissingFullSnapshot = !Object.values(windowsHaveFullSnapshot).some((x) => x)\n const everyWindowMissingFullSnapshot = !Object.values(windowsHaveFullSnapshot).every((x) => x)\n\n if (everyWindowMissingFullSnapshot) {\n // video is definitely unplayable\n posthog.capture('recording_has_no_full_snapshot', {\n sessionId: sessionRecordingId,\n teamId: currentTeam?.id,\n teamName: currentTeam?.name,\n })\n } else if (anyWindowMissingFullSnapshot) {\n posthog.capture('recording_window_missing_full_snapshot', {\n sessionId: sessionRecordingId,\n teamID: currentTeam?.id,\n teamName: currentTeam?.name,\n })\n }\n\n return everyWindowMissingFullSnapshot\n },\n ],\n\n bufferedToTime: [\n (s) => [s.segments],\n (segments): number | null => {\n if (!segments.length) {\n return null\n }\n\n const startTime = segments[0].startTimestamp\n const lastSegment = segments[segments.length - 1]\n\n if (lastSegment.kind === 'buffer') {\n return lastSegment.startTimestamp - startTime\n }\n\n return lastSegment.endTimestamp - startTime\n },\n ],\n\n windowIds: [\n (s) => [s.snapshotsByWindowId],\n (snapshotsByWindowId) => {\n return Object.keys(snapshotsByWindowId)\n },\n ],\n\n createExportJSON: [\n (s) => [s.sessionPlayerMetaData, s.snapshots, s.untransformedSnapshots],\n (\n sessionPlayerMetaData,\n snapshots,\n untransformedSnapshots\n ): ((exportUntransformedMobileSnapshotData: boolean) => ExportedSessionRecordingFileV2) => {\n return (exportUntransformedMobileSnapshotData: boolean) => ({\n version: '2023-04-28',\n data: {\n id: sessionPlayerMetaData?.id ?? '',\n person: sessionPlayerMetaData?.person,\n snapshots: exportUntransformedMobileSnapshotData ? untransformedSnapshots : snapshots,\n },\n })\n },\n ],\n\n customRRWebEvents: [\n (s) => [s.snapshots],\n (snapshots): customEvent[] => {\n return snapshots.filter((snapshot) => snapshot.type === EventType.Custom).map((x) => x as customEvent)\n },\n ],\n })),\n subscriptions(({ actions, values }) => ({\n webVitalsEvents: (value: RecordingEventType[]) => {\n // we preload all web vitals data, so it can be used before user interaction\n if (!values.sessionEventsDataLoading) {\n actions.loadFullEventData(value)\n }\n },\n })),\n afterMount(({ cache }) => {\n resetTimingsCache(cache)\n }),\n beforeUnmount(({ cache }) => {\n resetTimingsCache(cache)\n }),\n])\n","import { actions, connect, kea, listeners, path, reducers } from 'kea'\nimport { loaders } from 'kea-loaders'\nimport api from 'lib/api'\nimport { dayjs } from 'lib/dayjs'\nimport { eventUsageLogic } from 'lib/utils/eventUsageLogic'\n\nimport { HogQLQuery, NodeKind } from '~/queries/schema'\nimport { hogql } from '~/queries/utils'\nimport { SessionRecordingPropertiesType, SessionRecordingType } from '~/types'\n\nimport type { sessionRecordingsListPropertiesLogicType } from './sessionRecordingsListPropertiesLogicType'\n\n// This logic is used to fetch properties for a list of recordings\n// It is used in a global way as the cached values can be re-used\nexport const sessionRecordingsListPropertiesLogic = kea([\n path(() => ['scenes', 'session-recordings', 'playlist', 'sessionRecordingsListPropertiesLogic']),\n connect(() => ({\n actions: [eventUsageLogic, ['reportRecordingsListPropertiesFetched']],\n })),\n\n actions({\n loadPropertiesForSessions: (sessions: SessionRecordingType[]) => ({ sessions }),\n maybeLoadPropertiesForSessions: (sessions: SessionRecordingType[]) => ({ sessions }),\n }),\n\n loaders(({ actions }) => ({\n recordingProperties: [\n [] as SessionRecordingPropertiesType[],\n {\n loadPropertiesForSessions: async ({ sessions }, breakpoint) => {\n await breakpoint(100)\n\n const startTime = performance.now()\n const sessionIds = sessions.map((x) => x.id)\n\n const oldestTimestamp = sessions.map((x) => x.start_time).sort()[0]\n const newestTimestamp = sessions.map((x) => x.end_time).sort()[sessions.length - 1]\n\n const query: HogQLQuery = {\n kind: NodeKind.HogQLQuery,\n query: hogql`SELECT properties.$session_id as session_id, any(properties) as properties\n FROM events\n WHERE event IN ['$pageview', '$autocapture']\n AND session_id IN ${sessionIds}\n -- the timestamp range here is only to avoid querying too much of the events table\n -- we don't really care about the absolute value, \n -- but we do care about whether timezones have an odd impact\n -- so, we extend the range by a day on each side so that timezones don't cause issues\n AND timestamp >= ${dayjs(oldestTimestamp).subtract(1, 'day')}\n AND timestamp <= ${dayjs(newestTimestamp).add(1, 'day')}\n GROUP BY session_id`,\n }\n\n const response = await api.query(query)\n const loadTimeMs = performance.now() - startTime\n\n actions.reportRecordingsListPropertiesFetched(loadTimeMs)\n\n breakpoint()\n return (response.results || []).map(\n (x: any): SessionRecordingPropertiesType => ({\n id: x[0],\n properties: JSON.parse(x[1] || '{}'),\n })\n )\n },\n },\n ],\n })),\n\n listeners(({ actions, values }) => ({\n maybeLoadPropertiesForSessions: ({ sessions }) => {\n const newSessions = sessions.filter((session) => !values.recordingPropertiesById[session.id])\n\n if (newSessions.length > 0) {\n actions.loadPropertiesForSessions(newSessions)\n }\n },\n })),\n\n reducers({\n recordingPropertiesById: [\n {} as Record,\n {\n loadPropertiesForSessionsSuccess: (\n state,\n { recordingProperties }\n ): Record => {\n const newState = { ...state }\n recordingProperties.forEach((properties) => {\n newState[properties.id] = properties.properties\n })\n\n return newState\n },\n },\n ],\n }),\n])\n","import { Link } from '@posthog/lemon-ui'\nimport { useActions, useValues } from 'kea'\nimport { Form } from 'kea-forms'\nimport { CopyToClipboardInline } from 'lib/components/CopyToClipboard'\nimport { LemonBanner } from 'lib/lemon-ui/LemonBanner'\nimport { LemonButton } from 'lib/lemon-ui/LemonButton'\nimport { LemonField } from 'lib/lemon-ui/LemonField'\nimport { LemonInput } from 'lib/lemon-ui/LemonInput/LemonInput'\nimport { LemonModal } from 'lib/lemon-ui/LemonModal'\nimport { LemonTextArea } from 'lib/lemon-ui/LemonTextArea/LemonTextArea'\nimport { preflightLogic } from 'scenes/PreflightCheck/preflightLogic'\n\nimport { verifiedDomainsLogic } from './verifiedDomainsLogic'\n\nexport function ConfigureSAMLModal(): JSX.Element {\n const { configureSAMLModalId, isSamlConfigSubmitting, samlConfig } = useValues(verifiedDomainsLogic)\n const { setConfigureSAMLModalId } = useActions(verifiedDomainsLogic)\n const { preflight } = useValues(preflightLogic)\n const siteUrl = preflight?.site_url ?? window.location.origin\n\n const samlReady = samlConfig.saml_acs_url && samlConfig.saml_entity_id && samlConfig.saml_x509_cert\n\n const handleClose = (): void => {\n setConfigureSAMLModalId(null)\n // clean()\n }\n\n return (\n \n
\n \n

Configure SAML authentication and provisioning

\n
\n \n

\n \n Read the docs\n \n

\n \n {`${siteUrl}/complete/saml/`}\n \n \n {configureSAMLModalId || 'unknown'}\n \n \n {siteUrl}\n \n \n \n \n \n \n \n \n \n \n {!samlReady && (\n \n SAML will not be enabled unless you enter all attributes above. However you can still\n settings as draft.\n \n )}\n
\n \n \n Save settings\n \n \n
\n
\n )\n}\n","import { IconEllipsis, IconInfo, IconPlus } from '@posthog/icons'\nimport {\n LemonBanner,\n LemonButton,\n LemonDialog,\n LemonInput,\n LemonMenu,\n LemonTable,\n LemonTableColumns,\n LemonTabs,\n Spinner,\n Tooltip,\n} from '@posthog/lemon-ui'\nimport clsx from 'clsx'\nimport { useActions, useValues } from 'kea'\nimport { Form } from 'kea-forms'\nimport { CodeSnippet, Language } from 'lib/components/CodeSnippet'\nimport { PayGateMini } from 'lib/components/PayGateMini/PayGateMini'\nimport { RestrictionScope, useRestrictedArea } from 'lib/components/RestrictedArea'\nimport { OrganizationMembershipLevel } from 'lib/constants'\nimport { LemonField } from 'lib/lemon-ui/LemonField'\nimport { LemonMarkdown } from 'lib/lemon-ui/LemonMarkdown'\n\nimport { AvailableFeature } from '~/types'\n\nimport { proxyLogic, ProxyRecord } from './proxyLogic'\n\nconst MAX_PROXY_RECORDS = 3\n\nconst statusText = {\n valid: 'live',\n timed_out: 'timed out',\n}\n\nexport function ManagedReverseProxy(): JSX.Element {\n const { formState, proxyRecords, proxyRecordsLoading } = useValues(proxyLogic)\n const { showForm, deleteRecord } = useActions(proxyLogic)\n\n const restrictionReason = useRestrictedArea({\n minimumAccessLevel: OrganizationMembershipLevel.Admin,\n scope: RestrictionScope.Organization,\n })\n\n const maxRecordsReached = proxyRecords.length >= MAX_PROXY_RECORDS\n\n const recordsWithMessages = proxyRecords.filter((record) => !!record.message)\n\n const columns: LemonTableColumns = [\n {\n title: 'Domain',\n dataIndex: 'domain',\n },\n {\n title: 'Status',\n dataIndex: 'status',\n render: function RenderStatus(status) {\n if (!status) {\n return Unknown\n }\n\n return (\n \n {status === 'issuing' && }\n {statusText[status] || status}\n {status === 'waiting' && (\n \n \n \n )}\n {status === 'timed_out' && (\n \n \n \n )}\n \n )\n },\n },\n {\n title: ,\n width: 20,\n className: 'flex justify-center',\n render: function Render(_, { id, status }) {\n return (\n status != 'deleting' &&\n !restrictionReason && (\n {\n LemonDialog.open({\n title: 'Delete managed proxy',\n width: '20rem',\n content:\n 'Are you sure you want to delete this managed proxy? This cannot be undone and if it is in use then events sent to the domain will not be processed.',\n primaryButton: {\n status: 'danger',\n onClick: () => deleteRecord(id),\n children: 'Delete',\n },\n secondaryButton: {\n children: 'Cancel',\n },\n })\n },\n },\n ]}\n >\n } />\n \n )\n )\n },\n },\n ]\n\n return (\n \n
\n {recordsWithMessages.map((r) => (\n \n {`**${r.domain}**\\n ${r.message}`}\n \n ))}\n ,\n }}\n />\n {formState === 'collapsed' ? (\n maxRecordsReached ? (\n \n There is a maximum of {MAX_PROXY_RECORDS} records allowed per organization\n \n ) : (\n
\n }\n disabledReason={restrictionReason}\n >\n New managed proxy\n \n
\n )\n ) : (\n \n )}\n
\n
\n )\n}\n\nconst ExpandedRow = ({ record }: { record: ProxyRecord }): JSX.Element => {\n return (\n
\n \n {record.target_cname}\n \n ),\n },\n ]}\n />\n
\n )\n}\n\nfunction CreateRecordForm(): JSX.Element {\n const { formState, proxyRecordsLoading, proxyRecords } = useValues(proxyLogic)\n const { collapseForm } = useActions(proxyLogic)\n\n const waitingRecords = proxyRecords.filter((r) => r.status === 'waiting')\n\n return (\n
\n {formState == 'active' ? (\n
\n \n \n \n
\n \n Cancel\n \n \n Add\n \n
\n
\n ) : (\n <>\n
Almost there
\n
\n You need to set the following CNAME records in your DNS provider:\n
\n {waitingRecords.map((r) => (\n
\n {r.domain}\n \n {r.target_cname}\n \n
\n ))}\n
\n \n Done\n \n
\n \n )}\n
\n )\n}\n","import { lemonToast } from '@posthog/lemon-ui'\nimport { actions, afterMount, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea'\nimport { forms } from 'kea-forms'\nimport { loaders } from 'kea-loaders'\nimport { actionToUrl, router, urlToAction } from 'kea-router'\nimport api from 'lib/api'\nimport { dayjs } from 'lib/dayjs'\nimport { featureFlagLogic as enabledFlagLogic } from 'lib/logic/featureFlagLogic'\nimport { hasFormErrors, isObject } from 'lib/utils'\nimport { eventUsageLogic } from 'lib/utils/eventUsageLogic'\nimport { Scene } from 'scenes/sceneTypes'\nimport { teamLogic } from 'scenes/teamLogic'\nimport { urls } from 'scenes/urls'\n\nimport { DataTableNode, HogQLQuery, InsightVizNode, NodeKind } from '~/queries/schema'\nimport { hogql } from '~/queries/utils'\nimport {\n BaseMathType,\n Breadcrumb,\n FeatureFlagFilters,\n MultipleSurveyQuestion,\n PropertyFilterType,\n PropertyOperator,\n RatingSurveyQuestion,\n Survey,\n SurveyQuestionBase,\n SurveyQuestionBranchingType,\n SurveyQuestionType,\n SurveyUrlMatchType,\n} from '~/types'\n\nimport { defaultSurveyAppearance, defaultSurveyFieldValues, NEW_SURVEY, NewSurvey } from './constants'\nimport type { surveyLogicType } from './surveyLogicType'\nimport { surveysLogic } from './surveysLogic'\nimport { sanitizeHTML } from './utils'\n\nexport enum SurveyEditSection {\n Steps = 'steps',\n Widget = 'widget',\n Presentation = 'presentation',\n Appearance = 'appearance',\n Customization = 'customization',\n DisplayConditions = 'DisplayConditions',\n Scheduling = 'scheduling',\n CompletionConditions = 'CompletionConditions',\n}\nexport interface SurveyLogicProps {\n /** Either a UUID or 'new'. */\n id: string\n}\n\nexport interface SurveyMetricsQueries {\n surveysShown: DataTableNode\n surveysDismissed: DataTableNode\n}\n\nexport interface SurveyUserStats {\n seen: number\n dismissed: number\n sent: number\n}\n\nexport interface SurveyRatingResults {\n [key: number]: {\n data: number[]\n total: number\n }\n}\n\nexport interface SurveyRecurringNPSResults {\n [key: number]: {\n data: number[]\n total: number\n }\n}\n\ntype SurveyNPSResult = {\n Promoters: number\n Detractors: number\n Passives: number\n}\n\nexport interface SurveySingleChoiceResults {\n [key: number]: {\n labels: string[]\n data: number[]\n total: number\n }\n}\n\nexport interface SurveyMultipleChoiceResults {\n [key: number]: {\n labels: string[]\n data: number[]\n }\n}\n\nexport interface SurveyOpenTextResults {\n [key: number]: {\n events: { distinct_id: string; properties: Record; personProperties: Record }[]\n }\n}\n\nexport interface QuestionResultsReady {\n [key: string]: boolean\n}\n\nexport type ScheduleType = 'once' | 'recurring'\n\nconst getResponseField = (i: number): string => (i === 0 ? '$survey_response' : `$survey_response_${i}`)\n\nfunction duplicateExistingSurvey(survey: Survey | NewSurvey): Partial {\n return {\n ...survey,\n id: NEW_SURVEY.id,\n name: `${survey.name} (copy)`,\n archived: false,\n start_date: null,\n end_date: null,\n targeting_flag_filters: survey.targeting_flag?.filters ?? NEW_SURVEY.targeting_flag_filters,\n linked_flag_id: survey.linked_flag?.id ?? NEW_SURVEY.linked_flag_id,\n }\n}\n\nexport const surveyLogic = kea([\n props({} as SurveyLogicProps),\n key(({ id }) => id),\n path((key) => ['scenes', 'surveys', 'surveyLogic', key]),\n connect(() => ({\n actions: [\n surveysLogic,\n ['loadSurveys'],\n eventUsageLogic,\n [\n 'reportSurveyCreated',\n 'reportSurveyEdited',\n 'reportSurveyArchived',\n 'reportSurveyViewed',\n 'reportSurveyCycleDetected',\n ],\n ],\n values: [enabledFlagLogic, ['featureFlags as enabledFlags'], surveysLogic, ['surveys']],\n })),\n actions({\n setSurveyMissing: true,\n editingSurvey: (editing: boolean) => ({ editing }),\n setDefaultForQuestionType: (\n idx: number,\n type: SurveyQuestionType,\n isEditingQuestion: boolean,\n isEditingDescription: boolean,\n isEditingThankYouMessage: boolean\n ) => ({\n idx,\n type,\n isEditingQuestion,\n isEditingDescription,\n isEditingThankYouMessage,\n }),\n setQuestionBranchingType: (questionIndex, type, specificQuestionIndex) => ({\n questionIndex,\n type,\n specificQuestionIndex,\n }),\n setResponseBasedBranchingForQuestion: (questionIndex, responseValue, nextStep, specificQuestionIndex) => ({\n questionIndex,\n responseValue,\n nextStep,\n specificQuestionIndex,\n }),\n resetBranchingForQuestion: (questionIndex) => ({ questionIndex }),\n deleteBranchingLogic: true,\n archiveSurvey: true,\n setWritingHTMLDescription: (writingHTML: boolean) => ({ writingHTML }),\n setSurveyTemplateValues: (template: any) => ({ template }),\n setSelectedPageIndex: (idx: number | null) => ({ idx }),\n setSelectedSection: (section: SurveyEditSection | null) => ({ section }),\n\n setSchedule: (schedule: ScheduleType) => ({ schedule }),\n resetTargeting: true,\n setFlagPropertyErrors: (errors: any) => ({ errors }),\n }),\n loaders(({ props, actions, values }) => ({\n survey: {\n loadSurvey: async () => {\n if (props.id && props.id !== 'new') {\n try {\n const survey = await api.surveys.get(props.id)\n actions.reportSurveyViewed(survey)\n return survey\n } catch (error: any) {\n if (error.status === 404) {\n actions.setSurveyMissing()\n return { ...NEW_SURVEY }\n }\n throw error\n }\n }\n if (props.id === 'new' && router.values.hashParams.fromTemplate) {\n const templatedSurvey = values.survey\n templatedSurvey.appearance = {\n ...defaultSurveyAppearance,\n ...teamLogic.values.currentTeam?.survey_config?.appearance,\n ...templatedSurvey.appearance,\n }\n return templatedSurvey\n }\n\n const newSurvey = NEW_SURVEY\n newSurvey.appearance = {\n ...defaultSurveyAppearance,\n ...teamLogic.values.currentTeam?.survey_config?.appearance,\n ...newSurvey.appearance,\n }\n\n return newSurvey\n },\n createSurvey: async (surveyPayload: Partial) => {\n return await api.surveys.create(sanitizeQuestions(surveyPayload))\n },\n updateSurvey: async (surveyPayload: Partial) => {\n return await api.surveys.update(props.id, sanitizeQuestions(surveyPayload))\n },\n launchSurvey: async () => {\n const startDate = dayjs()\n return await api.surveys.update(props.id, { start_date: startDate.toISOString() })\n },\n stopSurvey: async () => {\n return await api.surveys.update(props.id, { end_date: dayjs().toISOString() })\n },\n resumeSurvey: async () => {\n return await api.surveys.update(props.id, { end_date: null })\n },\n },\n duplicatedSurvey: {\n duplicateSurvey: async () => {\n const { survey } = values\n const payload = duplicateExistingSurvey(survey)\n const createdSurvey = await api.surveys.create(sanitizeQuestions(payload))\n\n lemonToast.success('Survey duplicated.', {\n toastId: `survey-duplicated-${createdSurvey.id}`,\n button: {\n label: 'View Survey',\n action: () => {\n router.actions.push(urls.survey(createdSurvey.id))\n },\n },\n })\n\n actions.reportSurveyCreated(createdSurvey, true)\n return survey\n },\n },\n surveyUserStats: {\n loadSurveyUserStats: async (): Promise => {\n const survey: Survey = values.survey as Survey\n const startDate = dayjs(survey.start_date || survey.created_at).format('YYYY-MM-DD')\n const endDate = survey.end_date\n ? dayjs(survey.end_date).add(1, 'day').format('YYYY-MM-DD')\n : dayjs().add(1, 'day').format('YYYY-MM-DD')\n\n const query: HogQLQuery = {\n kind: NodeKind.HogQLQuery,\n query: hogql`\n SELECT\n (SELECT COUNT(DISTINCT person_id)\n FROM events\n WHERE event = 'survey shown'\n AND properties.$survey_id = ${props.id}\n AND timestamp >= ${startDate}\n AND timestamp <= ${endDate}),\n (SELECT COUNT(DISTINCT person_id)\n FROM events\n WHERE event = 'survey dismissed'\n AND properties.$survey_id = ${props.id}\n AND timestamp >= ${startDate}\n AND timestamp <= ${endDate}),\n (SELECT COUNT(DISTINCT person_id)\n FROM events\n WHERE event = 'survey sent'\n AND properties.$survey_id = ${props.id}\n AND timestamp >= ${startDate}\n AND timestamp <= ${endDate})\n `,\n }\n const responseJSON = await api.query(query)\n const { results } = responseJSON\n if (results && results[0]) {\n const [totalSeen, dismissed, sent] = results[0]\n const onlySeen = totalSeen - dismissed - sent\n return { seen: onlySeen < 0 ? 0 : onlySeen, dismissed, sent }\n }\n return { seen: 0, dismissed: 0, sent: 0 }\n },\n },\n surveyRatingResults: {\n loadSurveyRatingResults: async ({\n questionIndex,\n iteration,\n }: {\n questionIndex: number\n iteration?: number | null | undefined\n }): Promise => {\n const question = values.survey.questions[questionIndex]\n if (question.type !== SurveyQuestionType.Rating) {\n throw new Error(`Survey question type must be ${SurveyQuestionType.Rating}`)\n }\n\n const survey: Survey = values.survey as Survey\n const startDate = dayjs(survey.start_date || survey.created_at).format('YYYY-MM-DD')\n const endDate = survey.end_date\n ? dayjs(survey.end_date).add(1, 'day').format('YYYY-MM-DD')\n : dayjs().add(1, 'day').format('YYYY-MM-DD')\n\n let iterationCondition = ''\n if (iteration && iteration > 0) {\n iterationCondition = ` AND properties.$survey_iteration='${iteration}' `\n }\n const query: HogQLQuery = {\n kind: NodeKind.HogQLQuery,\n query: `\n SELECT\n JSONExtractString(properties, '${getResponseField(questionIndex)}') AS survey_response,\n COUNT(survey_response)\n FROM events\n WHERE event = 'survey sent' \n AND properties.$survey_id = '${props.id}'\n ${iterationCondition}\n AND timestamp >= '${startDate}'\n AND timestamp <= '${endDate}'\n GROUP BY survey_response\n `,\n }\n const responseJSON = await api.query(query)\n // TODO:Dylan - I don't like how we lose our types here\n // would be cool if we could parse this in a more type-safe way\n const { results } = responseJSON\n\n let total = 0\n const dataSize = question.scale === 10 ? 11 : question.scale\n const data = new Array(dataSize).fill(0)\n results?.forEach(([value, count]) => {\n total += count\n\n const index = question.scale === 10 ? value : value - 1\n data[index] = count\n })\n\n return { ...values.surveyRatingResults, [questionIndex]: { total, data } }\n },\n },\n surveyRecurringNPSResults: {\n loadSurveyRecurringNPSResults: async ({\n questionIndex,\n }: {\n questionIndex: number\n }): Promise => {\n const question = values.survey.questions[questionIndex]\n if (question.type !== SurveyQuestionType.Rating) {\n throw new Error(`Survey question type must be ${SurveyQuestionType.Rating}`)\n }\n\n const survey: Survey = values.survey as Survey\n const startDate = dayjs(survey.start_date || survey.created_at).format('YYYY-MM-DD')\n const endDate = survey.end_date\n ? dayjs(survey.end_date).add(1, 'day').format('YYYY-MM-DD')\n : dayjs().add(1, 'day').format('YYYY-MM-DD')\n\n const query: HogQLQuery = {\n kind: NodeKind.HogQLQuery,\n query: `\n SELECT\n JSONExtractString(properties, '$survey_iteration') AS survey_iteration,\n JSONExtractString(properties, '${getResponseField(questionIndex)}') AS survey_response,\n COUNT(survey_response)\n FROM events\n WHERE event = 'survey sent'\n AND properties.$survey_id = '${props.id}'\n AND timestamp >= '${startDate}'\n AND timestamp <= '${endDate}'\n GROUP BY survey_response, survey_iteration\n `,\n }\n\n const responseJSON = await api.query(query)\n const { results } = responseJSON\n let total = 100\n const data = new Array(survey.iteration_count).fill(0)\n\n const iterations = new Map()\n\n results?.forEach(([iteration, response, count]) => {\n let promoters = 0\n let passives = 0\n let detractors = 0\n\n if (parseInt(response) >= 9) {\n // a Promoter is someone who gives a survey response of 9 or 10\n promoters += parseInt(count)\n } else if (parseInt(response) > 6) {\n // a Passive is someone who gives a survey response of 7 or 8\n passives += parseInt(count)\n } else {\n // a Detractor is someone who gives a survey response of 0 - 6\n detractors += parseInt(count)\n }\n\n if (iterations.has(iteration)) {\n const currentValue = iterations.get(iteration)\n if (currentValue !== undefined) {\n currentValue.Detractors += detractors\n currentValue.Promoters += promoters\n currentValue.Passives += passives\n }\n } else {\n iterations.set(iteration, {\n Detractors: detractors,\n Passives: passives,\n Promoters: promoters,\n })\n }\n })\n\n iterations.forEach((value: SurveyNPSResult, key: string) => {\n // NPS score is calculated with this formula\n // (Promoters / (Promoters + Passives + Detractors) * 100) - (Detractors / (Promoters + Passives + Detractors)* 100)\n const totalResponses = value.Promoters + value.Passives + value.Detractors\n const npsScore =\n (value.Promoters / totalResponses) * 100 - (value.Detractors / totalResponses) * 100\n data[parseInt(key) - 1] = npsScore\n total += 100\n })\n\n return { ...values.surveyRecurringNPSResults, [questionIndex]: { total, data } }\n },\n },\n surveySingleChoiceResults: {\n loadSurveySingleChoiceResults: async ({\n questionIndex,\n }: {\n questionIndex: number\n }): Promise => {\n const survey: Survey = values.survey as Survey\n const startDate = dayjs(survey.start_date || survey.created_at).format('YYYY-MM-DD')\n const endDate = survey.end_date\n ? dayjs(survey.end_date).add(1, 'day').format('YYYY-MM-DD')\n : dayjs().add(1, 'day').format('YYYY-MM-DD')\n\n const query: HogQLQuery = {\n kind: NodeKind.HogQLQuery,\n query: `\n SELECT\n JSONExtractString(properties, '${getResponseField(questionIndex)}') AS survey_response,\n COUNT(survey_response)\n FROM events\n WHERE event = 'survey sent' \n AND properties.$survey_id = '${props.id}'\n AND timestamp >= '${startDate}'\n AND timestamp <= '${endDate}'\n GROUP BY survey_response\n `,\n }\n const responseJSON = await api.query(query)\n const { results } = responseJSON\n\n const labels = results?.map((r) => r[0])\n const data = results?.map((r) => r[1])\n const total = data?.reduce((a, b) => a + b, 0)\n\n return { ...values.surveySingleChoiceResults, [questionIndex]: { labels, data, total } }\n },\n },\n surveyMultipleChoiceResults: {\n loadSurveyMultipleChoiceResults: async ({\n questionIndex,\n }: {\n questionIndex: number\n }): Promise => {\n const question = values.survey.questions[questionIndex]\n if (question.type !== SurveyQuestionType.MultipleChoice) {\n throw new Error(`Survey question type must be ${SurveyQuestionType.MultipleChoice}`)\n }\n\n const survey: Survey = values.survey as Survey\n const startDate = dayjs(survey.start_date || survey.created_at).format('YYYY-MM-DD')\n const endDate = survey.end_date\n ? dayjs(survey.end_date).add(1, 'day').format('YYYY-MM-DD')\n : dayjs().add(1, 'day').format('YYYY-MM-DD')\n\n const query: HogQLQuery = {\n kind: NodeKind.HogQLQuery,\n query: `\n SELECT \n count(),\n arrayJoin(JSONExtractArrayRaw(properties, '${getResponseField(questionIndex)}')) AS choice\n FROM events\n WHERE event == 'survey sent'\n AND properties.$survey_id == '${survey.id}'\n AND timestamp >= '${startDate}'\n AND timestamp <= '${endDate}'\n GROUP BY choice\n ORDER BY count() DESC\n `,\n }\n const responseJSON = await api.query(query)\n let { results } = responseJSON\n\n // Remove outside quotes\n results = results?.map((r) => {\n return [r[0], r[1].slice(1, r[1].length - 1)]\n })\n\n // Zero-fill choices that are not open-ended\n question.choices.forEach((choice, idx) => {\n const isOpenChoice = idx == question.choices.length - 1 && question?.hasOpenChoice\n if (results?.length && !isOpenChoice && !results.some((r) => r[1] === choice)) {\n results.push([0, choice])\n }\n })\n\n const data = results?.map((r) => r[0])\n const labels = results?.map((r) => r[1])\n\n return { ...values.surveyMultipleChoiceResults, [questionIndex]: { labels, data } }\n },\n },\n surveyOpenTextResults: {\n loadSurveyOpenTextResults: async ({\n questionIndex,\n }: {\n questionIndex: number\n }): Promise => {\n const question = values.survey.questions[questionIndex]\n if (question.type !== SurveyQuestionType.Open) {\n throw new Error(`Survey question type must be ${SurveyQuestionType.Open}`)\n }\n\n const survey: Survey = values.survey as Survey\n const startDate = dayjs(survey.start_date || survey.created_at).format('YYYY-MM-DD')\n const endDate = survey.end_date\n ? dayjs(survey.end_date).add(1, 'day').format('YYYY-MM-DD')\n : dayjs().add(1, 'day').format('YYYY-MM-DD')\n\n const query: HogQLQuery = {\n kind: NodeKind.HogQLQuery,\n query: `\n SELECT distinct_id, properties, person.properties\n FROM events\n WHERE event == 'survey sent'\n AND properties.$survey_id == '${survey.id}'\n AND trim(JSONExtractString(properties, '${getResponseField(questionIndex)}')) != ''\n AND timestamp >= '${startDate}'\n AND timestamp <= '${endDate}'\n LIMIT 20\n `,\n }\n\n const responseJSON = await api.query(query)\n const { results } = responseJSON\n\n const events =\n results?.map((r) => {\n const distinct_id = r[0]\n const properties = JSON.parse(r[1])\n const personProperties = JSON.parse(r[2])\n return { distinct_id, properties, personProperties }\n }) || []\n\n return { ...values.surveyOpenTextResults, [questionIndex]: { events } }\n },\n },\n })),\n listeners(({ actions, values }) => ({\n createSurveySuccess: ({ survey }) => {\n lemonToast.success(<>Survey {survey.name} created)\n actions.loadSurveys()\n router.actions.replace(urls.survey(survey.id))\n actions.reportSurveyCreated(survey)\n },\n updateSurveySuccess: ({ survey }) => {\n lemonToast.success(<>Survey {survey.name} updated)\n actions.editingSurvey(false)\n actions.reportSurveyEdited(survey)\n actions.loadSurveys()\n },\n duplicateSurveySuccess: () => {\n actions.loadSurveys()\n },\n launchSurveySuccess: ({ survey }) => {\n lemonToast.success(<>Survey {survey.name} launched)\n actions.loadSurveys()\n },\n stopSurveySuccess: () => {\n actions.loadSurveys()\n },\n resumeSurveySuccess: () => {\n actions.loadSurveys()\n },\n archiveSurvey: () => {\n actions.updateSurvey({ archived: true })\n },\n loadSurveySuccess: () => {\n actions.loadSurveyUserStats()\n },\n resetTargeting: () => {\n actions.setSurveyValue('linked_flag_id', NEW_SURVEY.linked_flag_id)\n actions.setSurveyValue('targeting_flag_filters', NEW_SURVEY.targeting_flag_filters)\n actions.setSurveyValue('linked_flag', NEW_SURVEY.linked_flag)\n actions.setSurveyValue('targeting_flag', NEW_SURVEY.targeting_flag)\n actions.setSurveyValue('conditions', NEW_SURVEY.conditions)\n actions.setSurveyValue('remove_targeting_flag', true)\n actions.setSurveyValue('responses_limit', NEW_SURVEY.responses_limit)\n actions.setSurveyValues({\n iteration_count: NEW_SURVEY.iteration_count,\n iteration_frequency_days: NEW_SURVEY.iteration_frequency_days,\n })\n },\n submitSurveyFailure: async () => {\n // When errors occur, scroll to the error, but wait for errors to be set in the DOM first\n if (hasFormErrors(values.flagPropertyErrors) || values.urlMatchTypeValidationError) {\n actions.setSelectedSection(SurveyEditSection.DisplayConditions)\n } else {\n actions.setSelectedSection(SurveyEditSection.Steps)\n }\n setTimeout(\n () => document.querySelector(`.Field--error`)?.scrollIntoView({ block: 'center', behavior: 'smooth' }),\n 5\n )\n },\n })),\n reducers({\n isEditingSurvey: [\n false,\n {\n editingSurvey: (_, { editing }) => editing,\n },\n ],\n surveyMissing: [\n false,\n {\n setSurveyMissing: () => true,\n },\n ],\n\n survey: [\n { ...NEW_SURVEY } as NewSurvey | Survey,\n {\n setDefaultForQuestionType: (\n state,\n { idx, type, isEditingQuestion, isEditingDescription, isEditingThankYouMessage }\n ) => {\n const question = isEditingQuestion\n ? state.questions[idx].question\n : defaultSurveyFieldValues[type].questions[0].question\n const description = isEditingDescription\n ? state.questions[idx].description\n : defaultSurveyFieldValues[type].questions[0].description\n const thankYouMessageHeader = isEditingThankYouMessage\n ? state.appearance?.thankYouMessageHeader\n : defaultSurveyFieldValues[type].appearance.thankYouMessageHeader\n const newQuestions = [...state.questions]\n newQuestions[idx] = {\n ...state.questions[idx],\n ...(defaultSurveyFieldValues[type].questions[0] as SurveyQuestionBase),\n question,\n description,\n }\n return {\n ...state,\n questions: newQuestions,\n appearance: {\n ...state.appearance,\n ...defaultSurveyFieldValues[type].appearance,\n thankYouMessageHeader,\n },\n }\n },\n setSurveyTemplateValues: (_, { template }) => {\n const newTemplateSurvey = { ...NEW_SURVEY, ...template }\n return newTemplateSurvey\n },\n setQuestionBranchingType: (state, { questionIndex, type, specificQuestionIndex }) => {\n const newQuestions = [...state.questions]\n const question = newQuestions[questionIndex]\n\n if (type === SurveyQuestionBranchingType.NextQuestion) {\n delete question.branching\n } else if (type === SurveyQuestionBranchingType.End) {\n question.branching = {\n type: SurveyQuestionBranchingType.End,\n }\n } else if (type === SurveyQuestionBranchingType.ResponseBased) {\n if (\n question.type !== SurveyQuestionType.Rating &&\n question.type !== SurveyQuestionType.SingleChoice\n ) {\n throw new Error(\n `Survey question type must be ${SurveyQuestionType.Rating} or ${SurveyQuestionType.SingleChoice}`\n )\n }\n\n question.branching = {\n type: SurveyQuestionBranchingType.ResponseBased,\n responseValues: {},\n }\n } else if (type === SurveyQuestionBranchingType.SpecificQuestion) {\n question.branching = {\n type: SurveyQuestionBranchingType.SpecificQuestion,\n index: specificQuestionIndex,\n }\n }\n\n newQuestions[questionIndex] = question\n return {\n ...state,\n questions: newQuestions,\n }\n },\n setResponseBasedBranchingForQuestion: (\n state,\n { questionIndex, responseValue, nextStep, specificQuestionIndex }\n ) => {\n const newQuestions = [...state.questions]\n const question = newQuestions[questionIndex]\n\n if (\n question.type !== SurveyQuestionType.Rating &&\n question.type !== SurveyQuestionType.SingleChoice\n ) {\n throw new Error(\n `Survey question type must be ${SurveyQuestionType.Rating} or ${SurveyQuestionType.SingleChoice}`\n )\n }\n\n if (question.branching?.type !== SurveyQuestionBranchingType.ResponseBased) {\n throw new Error(\n `Survey question branching type must be ${SurveyQuestionBranchingType.ResponseBased}`\n )\n }\n\n if ('responseValues' in question.branching) {\n if (nextStep === SurveyQuestionBranchingType.NextQuestion) {\n delete question.branching.responseValues[responseValue]\n } else if (nextStep === SurveyQuestionBranchingType.End) {\n question.branching.responseValues[responseValue] = SurveyQuestionBranchingType.End\n } else if (nextStep === SurveyQuestionBranchingType.SpecificQuestion) {\n question.branching.responseValues[responseValue] = specificQuestionIndex\n }\n }\n\n newQuestions[questionIndex] = question\n return {\n ...state,\n questions: newQuestions,\n }\n },\n resetBranchingForQuestion: (state, { questionIndex }) => {\n const newQuestions = [...state.questions]\n const question = newQuestions[questionIndex]\n delete question.branching\n\n newQuestions[questionIndex] = question\n return {\n ...state,\n questions: newQuestions,\n }\n },\n deleteBranchingLogic: (state) => {\n const newQuestions = [...state.questions]\n newQuestions.forEach((question) => {\n delete question.branching\n })\n\n return {\n ...state,\n questions: newQuestions,\n }\n },\n },\n ],\n selectedPageIndex: [\n 0 as number | null,\n {\n setSelectedPageIndex: (_, { idx }) => idx,\n },\n ],\n selectedSection: [\n SurveyEditSection.Steps as SurveyEditSection | null,\n {\n setSelectedSection: (_, { section }) => section,\n },\n ],\n surveyRatingResultsReady: [\n {},\n {\n loadSurveyRatingResultsSuccess: (state, { payload }) => {\n if (!payload || !payload.hasOwnProperty('questionIndex')) {\n return { ...state }\n }\n return { ...state, [payload.questionIndex]: true }\n },\n },\n ],\n surveyRecurringNPSResultsReady: [\n {},\n {\n loadSurveyRecurringNPSResultsSuccess: (state, { payload }) => {\n if (!payload || !payload.hasOwnProperty('questionIndex')) {\n return { ...state }\n }\n return { ...state, [payload.questionIndex]: true }\n },\n },\n ],\n surveySingleChoiceResultsReady: [\n {},\n {\n loadSurveySingleChoiceResultsSuccess: (state, { payload }) => {\n if (!payload || !payload.hasOwnProperty('questionIndex')) {\n return { ...state }\n }\n return { ...state, [payload.questionIndex]: true }\n },\n },\n ],\n surveyMultipleChoiceResultsReady: [\n {},\n {\n loadSurveyMultipleChoiceResultsSuccess: (state, { payload }) => {\n if (!payload || !payload.hasOwnProperty('questionIndex')) {\n return { ...state }\n }\n return { ...state, [payload.questionIndex]: true }\n },\n },\n ],\n surveyOpenTextResultsReady: [\n {},\n {\n loadSurveyOpenTextResultsSuccess: (state, { payload }) => {\n if (!payload || !payload.hasOwnProperty('questionIndex')) {\n return { ...state }\n }\n return { ...state, [payload.questionIndex]: true }\n },\n },\n ],\n writingHTMLDescription: [\n false,\n {\n setWritingHTMLDescription: (_, { writingHTML }) => writingHTML,\n },\n ],\n schedule: [\n 'once',\n {\n setSchedule: (_, { schedule }) => schedule,\n },\n ],\n flagPropertyErrors: [\n null as any,\n {\n setFlagPropertyErrors: (_, { errors }) => errors,\n },\n ],\n }),\n selectors({\n isSurveyRunning: [\n (s) => [s.survey],\n (survey: Survey): boolean => {\n return !!(survey.start_date && !survey.end_date)\n },\n ],\n surveyShufflingQuestionsAvailable: [\n (s) => [s.survey],\n (survey: Survey): boolean => {\n return survey.questions.length > 1\n },\n ],\n showSurveyRepeatSchedule: [(s) => [s.schedule], (schedule: ScheduleType) => schedule == 'recurring'],\n descriptionContentType: [\n (s) => [s.survey],\n (survey: Survey) => (questionIndex: number) => {\n return survey.questions[questionIndex].descriptionContentType\n },\n ],\n surveyRepeatedActivationAvailable: [\n (s) => [s.survey],\n (survey: Survey): boolean =>\n survey.conditions?.events?.values != undefined && survey.conditions?.events?.values?.length > 0,\n ],\n hasTargetingSet: [\n (s) => [s.survey],\n (survey: Survey): boolean => {\n const hasLinkedFlag =\n !!survey.linked_flag_id || (survey.linked_flag && Object.keys(survey.linked_flag).length > 0)\n const hasTargetingFlag =\n (survey.targeting_flag && Object.keys(survey.targeting_flag).length > 0) ||\n (survey.targeting_flag_filters && Object.keys(survey.targeting_flag_filters).length > 0)\n const hasOtherConditions = survey.conditions && Object.keys(survey.conditions).length > 0\n return !!hasLinkedFlag || !!hasTargetingFlag || !!hasOtherConditions\n },\n ],\n breadcrumbs: [\n (s) => [s.survey],\n (survey: Survey): Breadcrumb[] => [\n {\n key: Scene.Surveys,\n name: 'Surveys',\n path: urls.surveys(),\n },\n { key: [Scene.Survey, survey?.id || 'new'], name: survey.name },\n ],\n ],\n dataTableQuery: [\n (s) => [s.survey],\n (survey): DataTableNode | null => {\n if (survey.id === 'new') {\n return null\n }\n const surveyWithResults = survey as Survey\n const startDate = surveyWithResults.start_date || surveyWithResults.created_at\n return {\n kind: NodeKind.DataTableNode,\n source: {\n kind: NodeKind.EventsQuery,\n select: [\n '*',\n ...survey.questions.map((q, i) => {\n if (q.type === SurveyQuestionType.MultipleChoice) {\n // Join array items into a string\n return `coalesce(arrayStringConcat(JSONExtractArrayRaw(properties, '${getResponseField(\n i\n )}'), ', ')) -- ${q.question}`\n }\n\n return `coalesce(JSONExtractString(properties, '${getResponseField(i)}')) -- ${\n q.question\n }`\n }),\n 'timestamp',\n 'person',\n `coalesce(JSONExtractString(properties, '$lib_version')) -- Library Version`,\n `coalesce(JSONExtractString(properties, '$lib')) -- Library`,\n `coalesce(JSONExtractString(properties, '$current_url')) -- URL`,\n ],\n orderBy: ['timestamp DESC'],\n where: [`event == 'survey sent'`],\n after: startDate,\n properties: [\n {\n type: PropertyFilterType.Event,\n key: '$survey_id',\n operator: PropertyOperator.Exact,\n value: survey.id,\n },\n ],\n },\n propertiesViaUrl: true,\n showExport: true,\n showReload: true,\n showEventFilter: false,\n showPropertyFilter: true,\n showTimings: false,\n }\n },\n ],\n targetingFlagFilters: [\n (s) => [s.survey],\n (survey): FeatureFlagFilters | undefined => {\n if (survey.targeting_flag_filters) {\n return {\n ...survey.targeting_flag_filters,\n groups: survey.targeting_flag_filters.groups,\n multivariate: null,\n payloads: {},\n super_groups: undefined,\n }\n }\n return survey.targeting_flag?.filters || undefined\n },\n ],\n urlMatchTypeValidationError: [\n (s) => [s.survey],\n (survey): string | null => {\n if (survey.conditions?.urlMatchType === SurveyUrlMatchType.Regex && survey.conditions.url) {\n try {\n new RegExp(survey.conditions.url)\n } catch (e: any) {\n return e.message\n }\n }\n return null\n },\n ],\n surveyNPSScore: [\n (s) => [s.surveyRatingResults],\n (surveyRatingResults) => {\n if (surveyRatingResults) {\n const questionIdx = Object.keys(surveyRatingResults)[0]\n const questionResults = surveyRatingResults[questionIdx]\n\n // If we don't have any results, return 'No data available' instead of NaN.\n if (questionResults.total === 0) {\n return 'No data available'\n }\n\n const data: number[] = questionResults.data\n if (data.length === 11) {\n const promoters = data.slice(9, 11).reduce((a, b) => a + b, 0)\n const passives = data.slice(7, 9).reduce((a, b) => a + b, 0)\n const detractors = data.slice(0, 7).reduce((a, b) => a + b, 0)\n const npsScore = ((promoters - detractors) / (promoters + passives + detractors)) * 100\n return npsScore.toFixed(1)\n }\n }\n },\n ],\n getBranchingDropdownValue: [\n (s) => [s.survey],\n (survey) => (questionIndex: number, question: RatingSurveyQuestion | MultipleSurveyQuestion) => {\n if (question.branching?.type) {\n const { type } = question.branching\n\n if (type === SurveyQuestionBranchingType.SpecificQuestion) {\n const nextQuestionIndex = question.branching.index\n return `${SurveyQuestionBranchingType.SpecificQuestion}:${nextQuestionIndex}`\n }\n\n return type\n }\n\n // No branching specified, default to Next question / Confirmation message\n if (questionIndex < survey.questions.length - 1) {\n return SurveyQuestionBranchingType.NextQuestion\n }\n\n return SurveyQuestionBranchingType.End\n },\n ],\n getResponseBasedBranchingDropdownValue: [\n (s) => [s.survey],\n (survey) => (questionIndex: number, question: RatingSurveyQuestion | MultipleSurveyQuestion, response) => {\n if (!question.branching || !('responseValues' in question.branching)) {\n return SurveyQuestionBranchingType.NextQuestion\n }\n\n // If a value is mapped onto an integer, we're redirecting to a specific question\n if (Number.isInteger(question.branching.responseValues[response])) {\n const nextQuestionIndex = question.branching.responseValues[response]\n return `${SurveyQuestionBranchingType.SpecificQuestion}:${nextQuestionIndex}`\n }\n\n // If any other value is present (practically only Confirmation message), return that value\n if (question.branching?.responseValues?.[response]) {\n return question.branching.responseValues[response]\n }\n\n // No branching specified, default to Next question / Confirmation message\n if (questionIndex < survey.questions.length - 1) {\n return SurveyQuestionBranchingType.NextQuestion\n }\n\n return SurveyQuestionBranchingType.End\n },\n ],\n hasCycle: [\n (s) => [s.survey],\n (survey) => {\n const graph = new Map()\n survey.questions.forEach((question, fromIndex: number) => {\n if (!graph.has(fromIndex)) {\n graph.set(fromIndex, new Set())\n }\n\n if (question.branching?.type === SurveyQuestionBranchingType.End) {\n return\n } else if (\n question.branching?.type === SurveyQuestionBranchingType.SpecificQuestion &&\n Number.isInteger(question.branching.index)\n ) {\n const toIndex = question.branching.index\n graph.get(fromIndex).add(toIndex)\n return\n } else if (\n question.branching?.type === SurveyQuestionBranchingType.ResponseBased &&\n isObject(question.branching?.responseValues)\n ) {\n for (const [_, toIndex] of Object.entries(question.branching?.responseValues)) {\n if (Number.isInteger(toIndex)) {\n graph.get(fromIndex).add(toIndex)\n }\n }\n }\n\n // No branching - still need to connect the next question\n if (fromIndex < survey.questions.length - 1) {\n const toIndex = fromIndex + 1\n graph.get(fromIndex).add(toIndex)\n }\n })\n\n let cycleDetected = false\n function dfs(node: number, seen: number[]): void {\n if (cycleDetected) {\n return\n }\n\n for (const neighbor of graph.get(node) || []) {\n if (seen.includes(neighbor)) {\n cycleDetected = true\n return\n }\n dfs(neighbor, seen.concat(neighbor))\n }\n }\n dfs(0, [0])\n\n return cycleDetected\n },\n ],\n hasBranchingLogic: [\n (s) => [s.survey],\n (survey) =>\n survey.questions.some((question) => question.branching && Object.keys(question.branching).length > 0),\n ],\n surveyAsInsightURL: [\n (s) => [s.survey],\n (survey) => {\n const query: InsightVizNode = {\n kind: NodeKind.InsightVizNode,\n source: {\n kind: NodeKind.TrendsQuery,\n properties: [\n {\n key: '$survey_id',\n value: survey.id,\n operator: PropertyOperator.Exact,\n type: PropertyFilterType.Event,\n },\n ],\n series: [\n {\n kind: NodeKind.EventsNode,\n event: 'survey sent',\n name: 'survey sent',\n math: BaseMathType.TotalCount,\n },\n {\n kind: NodeKind.EventsNode,\n event: 'survey shown',\n name: 'survey shown',\n math: BaseMathType.TotalCount,\n },\n {\n kind: NodeKind.EventsNode,\n event: 'survey dismissed',\n name: 'survey dismissed',\n math: BaseMathType.TotalCount,\n },\n ],\n },\n }\n\n return urls.insightNew(undefined, undefined, query)\n },\n ],\n }),\n forms(({ actions, props, values }) => ({\n survey: {\n defaults: { ...NEW_SURVEY } as NewSurvey | Survey,\n errors: ({ name, questions }) => ({\n // NOTE: When more validation errors are added, the submitSurveyFailure listener should be updated\n // to scroll to the right error section\n name: !name && 'Please enter a name.',\n questions: questions.map((question) => {\n const questionErrors = {\n question: !question.question && 'Please enter a question label.',\n }\n\n if (question.type === SurveyQuestionType.Rating) {\n return {\n ...questionErrors,\n display: !question.display && 'Please choose a display type.',\n scale: !question.scale && 'Please choose a scale.',\n lowerBoundLabel: !question.lowerBoundLabel && 'Please enter a lower bound label.',\n upperBoundLabel: !question.upperBoundLabel && 'Please enter an upper bound label.',\n }\n } else if (\n question.type === SurveyQuestionType.SingleChoice ||\n question.type === SurveyQuestionType.MultipleChoice\n ) {\n return {\n ...questionErrors,\n choices: question.choices.some((choice) => !choice.trim())\n ? 'Please ensure all choices are non-empty.'\n : undefined,\n }\n }\n\n return questionErrors\n }),\n // release conditions controlled using a PureField in the form\n targeting_flag_filters: values.flagPropertyErrors,\n // controlled using a PureField in the form\n urlMatchType: values.urlMatchTypeValidationError,\n }),\n submit: (surveyPayload) => {\n if (values.hasCycle) {\n actions.reportSurveyCycleDetected(values.survey)\n\n return lemonToast.error(\n 'Your survey contains an endless cycle. Please revisit your branching rules.'\n )\n }\n\n // when the survey is being submitted, we should turn off editing mode\n actions.editingSurvey(false)\n if (props.id && props.id !== 'new') {\n actions.updateSurvey(surveyPayload)\n } else {\n actions.createSurvey(surveyPayload)\n }\n },\n },\n })),\n urlToAction(({ actions, props }) => ({\n [urls.survey(props.id ?? 'new')]: (_, { edit }, __, { method }) => {\n // We always set the editingSurvey to true when we create a new survey\n if (props.id === 'new') {\n actions.editingSurvey(true)\n }\n // If the URL was pushed (user clicked on a link), reset the scene's data.\n // This avoids resetting form fields if you click back/forward.\n if (method === 'PUSH') {\n if (props.id) {\n actions.loadSurvey()\n } else {\n actions.resetSurvey()\n }\n }\n\n if (edit) {\n actions.editingSurvey(true)\n }\n },\n })),\n actionToUrl(({ values }) => ({\n setSurveyTemplateValues: () => {\n const hashParams = router.values.hashParams\n hashParams['fromTemplate'] = true\n\n return [urls.survey(values.survey.id), router.values.searchParams, hashParams]\n },\n editingSurvey: ({ editing }) => {\n const searchParams = router.values.searchParams\n if (editing) {\n searchParams['edit'] = true\n } else {\n delete searchParams['edit']\n }\n\n return [router.values.location.pathname, router.values.searchParams, router.values.hashParams]\n },\n })),\n afterMount(({ props, actions }) => {\n if (props.id !== 'new') {\n actions.loadSurvey()\n }\n if (props.id === 'new') {\n actions.resetSurvey()\n }\n }),\n])\n\nfunction sanitizeQuestions(surveyPayload: Partial): Partial {\n if (!surveyPayload.questions) {\n return surveyPayload\n }\n\n const sanitizedThankYouHeader = sanitizeHTML(surveyPayload.appearance?.thankYouMessageHeader || '')\n const sanitizedThankYouDescription = sanitizeHTML(surveyPayload.appearance?.thankYouMessageDescription || '')\n\n return {\n ...surveyPayload,\n questions: surveyPayload.questions?.map((rawQuestion) => {\n return {\n ...rawQuestion,\n description: sanitizeHTML(rawQuestion.description || ''),\n question: sanitizeHTML(rawQuestion.question || ''),\n }\n }),\n appearance: {\n ...surveyPayload.appearance,\n ...(sanitizedThankYouHeader && { thankYouMessageHeader: sanitizedThankYouHeader }),\n ...(sanitizedThankYouDescription && { thankYouMessageDescription: sanitizedThankYouDescription }),\n },\n }\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"main.6eed8218.iframe.bundle.js","mappings":";;;;;AAyBA;;;;;;;AC+KA;AClKA;;AC2BA;ACrCA;AAUA;AAOA;AA2BA;;AA4WA;AAAA;AAAA;AAAA;AA1XA;AAOA;;;;;;;ACkCA;;AC5EA;;;;;;;;;;;ACmPA;;;;;AAeA;;;AAcA;;;;;;;AAyDA;AC9QA;AC0gBA;AACA;ACnfA;AASA;;;AAWA;AC1GA;;;AAoBA;;;AAIA;AAKA;AACA;AAGA;;AAIA;;AAEA;AAGA;AACA;AAGA;AAGA;;AAEA;;AAWA;AACA;AACA;;;;;AAiCA;;;AAIA;AAKA;;;AAGA;AACA;AAGA;AACA;AACA;;AAWA;AACA;AACA;;;AAwBA;;;AAIA;;AAMA;;AAEA;;AAEA;;AAGA;AACA;AACA;;AAUA;AACA;AACA;;;AAwBA;;;AAIA;AAKA;;AAEA;AACA;AAGA;AACA;AACA;;AAUA;AACA;AACA;;;AA6BA;;;AAIA;AAKA;;AAEA;AACA;AAGA;AACA;AACA;;AAUA;AACA;AACA;;;AA8BA;;;AAyBA;;AAuBA;;;;AAyBA;;;;;;;AAOA;;;;AAIA;AACA;AAkBA;;;AAGA;;AAEA;;;AAGA;AAUA;;;AASA;AACA;;AAEA;;;AA6BA;;AAMA;;AAWA;;AAEA;;;;;;AAMA;;AAEA;;;;AAaA;;;;;;;;;;;;;AAaA;ACxeA;;;;;;;;;;;ACyLA;;;;;;;;;;;;;;;;;;;AC8nCA;;AC/tBA;AACA;AACA;AACA;;;ACvnBA;;;;;AAKA;AACA;AACA;;;ACQA;AC0EA;;;;;ACyIA;AACA;AACA;;;;AAIA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;;AAuCA;;;;AAIA;AACA;AACA;AACA;;AAEA;;;AA0CA;;;;AAIA;AACA;AACA;;AAEA;;AAuEA;;;;AAIA;AACA;AACA;;AAEA;;;AAkCA;;;AAGA;AACA;AACA;;;AAGA;;;;AA+CA;AACA;AACA;AACA;;AAEA","sources":["webpack://posthog/./frontend/src/lib/components/ReverseProxyChecker/reverseProxyCheckerLogic.ts","webpack://posthog/./frontend/src/lib/components/AuthorizedUrlList/authorizedUrlListLogic.ts","webpack://posthog/./frontend/src/lib/components/JSSnippet.tsx","webpack://posthog/./frontend/src/lib/components/Support/SupportForm.tsx","webpack://posthog/./frontend/src/lib/components/Support/supportLogic.ts","webpack://posthog/./frontend/src/lib/components/VersionChecker/versionCheckerLogic.ts","webpack://posthog/./frontend/src/lib/lemon-ui/LemonTextArea/LemonTextAreaMarkdown.tsx","webpack://posthog/./frontend/src/queries/examples.ts","webpack://posthog/./frontend/src/scenes/paths/renderPaths.ts","webpack://posthog/./frontend/src/scenes/billing/billingLogic.tsx","webpack://posthog/./frontend/src/scenes/early-access-features/InstructionsModal.tsx","webpack://posthog/./frontend/src/scenes/feature-flags/FeatureFlagSnippets.tsx","webpack://posthog/./frontend/src/scenes/notebooks/Nodes/NotebookNodeReplayTimestamp.tsx","webpack://posthog/./frontend/src/scenes/notebooks/Notebook/SlashCommands.tsx","webpack://posthog/./ee/frontend/mobile-replay/transformer/transformers.ts","webpack://posthog/./frontend/src/scenes/session-recordings/player/sessionRecordingDataLogic.ts","webpack://posthog/./frontend/src/scenes/session-recordings/playlist/sessionRecordingsListPropertiesLogic.ts","webpack://posthog/./frontend/src/scenes/settings/organization/VerifiedDomains/ConfigureSAMLModal.tsx","webpack://posthog/./frontend/src/scenes/settings/environment/ManagedReverseProxy.tsx","webpack://posthog/./frontend/src/scenes/surveys/surveyLogic.tsx"],"sourcesContent":["import { afterMount, kea, path, reducers } from 'kea'\nimport { loaders } from 'kea-loaders'\nimport api from 'lib/api'\n\nimport { HogQLQuery, NodeKind } from '~/queries/schema'\nimport { hogql } from '~/queries/utils'\n\nimport type { reverseProxyCheckerLogicType } from './reverseProxyCheckerLogicType'\n\nconst CHECK_INTERVAL_MS = 1000 * 60 * 60 // 1 hour\n\nexport const reverseProxyCheckerLogic = kea([\n path(['components', 'ReverseProxyChecker', 'reverseProxyCheckerLogic']),\n loaders({\n hasReverseProxy: [\n false as boolean | null,\n {\n loadHasReverseProxy: async () => {\n const query: HogQLQuery = {\n kind: NodeKind.HogQLQuery,\n query: hogql`SELECT properties.$lib_custom_api_host AS lib_custom_api_host\n FROM events\n WHERE timestamp >= now() - INTERVAL 1 DAY \n AND timestamp <= now()\n ORDER BY timestamp DESC\n limit 10`,\n }\n\n const res = await api.query(query)\n return !!res.results?.find((x) => !!x[0])\n },\n },\n ],\n }),\n reducers({\n lastCheckedTimestamp: [\n 0,\n { persist: true },\n {\n loadHasReverseProxySuccess: () => Date.now(),\n },\n ],\n }),\n afterMount(({ actions, values }) => {\n if (values.lastCheckedTimestamp < Date.now() - CHECK_INTERVAL_MS) {\n actions.loadHasReverseProxy()\n }\n }),\n])\n","import Fuse from 'fuse.js'\nimport {\n actions,\n afterMount,\n connect,\n kea,\n key,\n listeners,\n path,\n props,\n reducers,\n selectors,\n sharedListeners,\n} from 'kea'\nimport { forms } from 'kea-forms'\nimport { loaders } from 'kea-loaders'\nimport { encodeParams, urlToAction } from 'kea-router'\nimport { subscriptions } from 'kea-subscriptions'\nimport api from 'lib/api'\nimport { isDomain, isURL } from 'lib/utils'\nimport { apiHostOrigin } from 'lib/utils/apiHost'\nimport { teamLogic } from 'scenes/teamLogic'\nimport { urls } from 'scenes/urls'\n\nimport { HogQLQuery, NodeKind } from '~/queries/schema'\nimport { hogql } from '~/queries/utils'\nimport { ToolbarParams, ToolbarUserIntent } from '~/types'\n\nimport type { authorizedUrlListLogicType } from './authorizedUrlListLogicType'\n\nexport interface ProposeNewUrlFormType {\n url: string\n}\n\nexport enum AuthorizedUrlListType {\n TOOLBAR_URLS = 'TOOLBAR_URLS',\n RECORDING_DOMAINS = 'RECORDING_DOMAINS',\n}\n\n/**\n * Firefox does not allow you construct a new URL with e.g. https://*.example.com (which is to be fair more standards compliant than Chrome)\n * when used to probe for e.g. for authorized urls we only care if the proposed URL has a path so we can safely replace the wildcard with a character\n * NB this changes its input and shouldn't be used for general purpose URL parsing\n */\nexport function sanitizePossibleWildCardedURL(url: string): URL {\n const deWildCardedURL = url.replace(/\\*/g, 'x')\n return new URL(deWildCardedURL)\n}\n\n/**\n * Checks if the URL has a wildcard (*) in the port position eg http://localhost:*\n */\nexport function hasPortWildcard(input: string): boolean {\n if (!input || typeof input !== 'string') {\n return false\n }\n // This regex matches URLs with a wildcard (*) in the port position\n const portWildcardRegex = /^(https?:\\/\\/[^:/]+):\\*(.*)$/\n return portWildcardRegex.test(input.trim())\n}\n\nexport const validateProposedUrl = (\n proposedUrl: string,\n currentUrls: string[],\n onlyAllowDomains: boolean = false\n): string | undefined => {\n if (!isURL(proposedUrl)) {\n return 'Please enter a valid URL'\n }\n\n if (hasPortWildcard(proposedUrl)) {\n return 'Wildcards are not allowed in the port position'\n }\n\n if (onlyAllowDomains && !isDomain(sanitizePossibleWildCardedURL(proposedUrl))) {\n return \"Please enter a valid domain (URLs with a path aren't allowed)\"\n }\n\n if (proposedUrl.indexOf('*') > -1 && !proposedUrl.match(/^(.*)\\*[^*]*\\.[^*]+\\.[^*]+$/)) {\n return 'Wildcards can only be used for subdomains'\n }\n\n if (currentUrls.indexOf(proposedUrl) > -1) {\n return `This ${onlyAllowDomains ? 'domains' : 'URL'} already is registered`\n }\n\n return\n}\n\n/** defaultIntent: whether to launch with empty intent (i.e. toolbar mode is default) */\nexport function appEditorUrl(\n appUrl: string,\n options?: { actionId?: number | null; userIntent?: ToolbarUserIntent }\n): string {\n // See https://github.com/PostHog/posthog-js/blob/f7119c/src/extensions/toolbar.ts#L52 for where these params\n // are passed. `appUrl` is an extra `redirect_to_site` param.\n const params: ToolbarParams & { appUrl: string } = {\n userIntent: options?.userIntent ?? (options?.actionId ? 'edit-action' : 'add-action'),\n // Make sure to pass the app url, otherwise the api_host will be used by\n // the toolbar, which isn't correct when used behind a reverse proxy as\n // we require e.g. SSO login to the app, which will not work when placed\n // behind a proxy unless we register each domain with the OAuth2 client.\n apiURL: apiHostOrigin(),\n appUrl,\n ...(options?.actionId ? { actionId: options.actionId } : {}),\n }\n return '/api/user/redirect_to_site/' + encodeParams(params, '?')\n}\n\nexport const checkUrlIsAuthorized = (url: string | URL, authorizedUrls: string[]): boolean => {\n try {\n const parsedUrl = typeof url === 'string' ? sanitizePossibleWildCardedURL(url) : url\n const urlWithoutPath = parsedUrl.protocol + '//' + parsedUrl.host\n // Is this domain already in the list of urls?\n const exactMatch =\n authorizedUrls.filter((authorizedUrl) => authorizedUrl.indexOf(urlWithoutPath) > -1).length > 0\n\n if (exactMatch) {\n return true\n }\n\n const wildcardMatch = !!authorizedUrls.find((authorizedUrl) => {\n // Matches something like `https://*.example.com` against the urlWithoutPath\n const regex = new RegExp(authorizedUrl.replace(/\\./g, '\\\\.').replace(/\\*/g, '.*'))\n return urlWithoutPath.match(regex)\n })\n\n if (wildcardMatch) {\n return true\n }\n } catch (error) {\n // Ignore invalid URLs\n }\n\n return false\n}\n\nexport const filterNotAuthorizedUrls = (urls: string[], authorizedUrls: string[]): string[] => {\n const suggestedDomains: string[] = []\n\n urls.forEach((url) => {\n const parsedUrl = sanitizePossibleWildCardedURL(url)\n const urlWithoutPath = parsedUrl.protocol + '//' + parsedUrl.host\n // Have we already added this domain?\n if (suggestedDomains.indexOf(urlWithoutPath) > -1) {\n return\n }\n\n if (!checkUrlIsAuthorized(parsedUrl, authorizedUrls)) {\n suggestedDomains.push(urlWithoutPath)\n }\n })\n\n return suggestedDomains\n}\n\nexport const NEW_URL = 'https://'\n\nexport interface KeyedAppUrl {\n url: string\n type: 'authorized' | 'suggestion'\n originalIndex: number\n}\n\nexport interface AuthorizedUrlListLogicProps {\n actionId: number | null\n type: AuthorizedUrlListType\n}\nexport const authorizedUrlListLogic = kea([\n path((key) => ['lib', 'components', 'AuthorizedUrlList', 'authorizedUrlListLogic', key]),\n key((props) => `${props.type}-${props.actionId}`),\n props({} as AuthorizedUrlListLogicProps),\n connect({\n values: [teamLogic, ['currentTeam', 'currentTeamId']],\n actions: [teamLogic, ['updateCurrentTeam']],\n }),\n actions(() => ({\n setAuthorizedUrls: (authorizedUrls: string[]) => ({ authorizedUrls }),\n addUrl: (url: string, launch?: boolean) => ({ url, launch }),\n newUrl: true,\n removeUrl: (index: number) => ({ index }),\n updateUrl: (index: number, url: string) => ({ index, url }),\n launchAtUrl: (url: string) => ({ url }),\n setSearchTerm: (term: string) => ({ term }),\n setEditUrlIndex: (originalIndex: number | null) => ({ originalIndex }),\n cancelProposingUrl: true,\n })),\n loaders(({ values }) => ({\n suggestions: {\n __default: [] as string[],\n loadSuggestions: async () => {\n const query: HogQLQuery = {\n kind: NodeKind.HogQLQuery,\n query: hogql`select properties.$current_url, count()\n from events\n where event = '$pageview'\n and timestamp >= now() - interval 3 day \n and timestamp <= now()\n group by properties.$current_url\n order by count() desc\n limit 25`,\n }\n\n const response = await api.query(query)\n const result = response.results as [string, number][]\n\n if (result && result.length === 0) {\n return []\n }\n\n const suggestedDomains = filterNotAuthorizedUrls(\n result.map(([url]) => url),\n values.authorizedUrls\n )\n\n return suggestedDomains.slice(0, 20)\n },\n },\n })),\n subscriptions(({ props, actions }) => ({\n currentTeam: (currentTeam) => {\n actions.setAuthorizedUrls(\n (props.type === AuthorizedUrlListType.RECORDING_DOMAINS\n ? currentTeam.recording_domains\n : currentTeam.app_urls) || []\n )\n },\n })),\n afterMount(({ actions }) => {\n actions.loadSuggestions()\n }),\n forms(({ values, actions }) => ({\n proposedUrl: {\n defaults: { url: '' } as ProposeNewUrlFormType,\n errors: ({ url }) => ({\n url: validateProposedUrl(url, values.authorizedUrls, values.onlyAllowDomains),\n }),\n submit: async ({ url }) => {\n if (values.editUrlIndex !== null && values.editUrlIndex >= 0) {\n actions.updateUrl(values.editUrlIndex, url)\n } else {\n actions.addUrl(url)\n }\n },\n },\n })),\n reducers(() => ({\n showProposedURLForm: [\n false as boolean,\n {\n newUrl: () => true,\n submitProposedUrlSuccess: () => false,\n cancelProposingUrl: () => false,\n },\n ],\n authorizedUrls: [\n [] as string[],\n {\n setAuthorizedUrls: (_, { authorizedUrls }) => authorizedUrls,\n addUrl: (state, { url }) => (!state.includes(url) ? state.concat([url]) : state),\n updateUrl: (state, { index, url }) => Object.assign([...state], { [index]: url }),\n removeUrl: (state, { index }) => {\n const newUrls = [...state]\n newUrls.splice(index, 1)\n return newUrls\n },\n },\n ],\n suggestions: [\n [],\n {\n addUrl: (state, { url }) => [...state].filter((item) => url !== item),\n },\n ],\n searchTerm: [\n '',\n {\n setSearchTerm: (_, { term }) => term,\n },\n ],\n editUrlIndex: [\n null as number | null,\n {\n setEditUrlIndex: (_, { originalIndex }) => originalIndex,\n removeUrl: (editUrlIndex, { index }) =>\n editUrlIndex && index < editUrlIndex\n ? editUrlIndex - 1\n : index === editUrlIndex\n ? null\n : editUrlIndex,\n newUrl: () => -1,\n updateUrl: () => null,\n addUrl: () => null,\n cancelProposingUrl: () => null,\n },\n ],\n })),\n sharedListeners(({ values, props }) => ({\n saveUrls: async () => {\n if (props.type === AuthorizedUrlListType.RECORDING_DOMAINS) {\n await teamLogic.asyncActions.updateCurrentTeam({ recording_domains: values.authorizedUrls })\n } else {\n await teamLogic.asyncActions.updateCurrentTeam({ app_urls: values.authorizedUrls })\n }\n },\n })),\n listeners(({ sharedListeners, values, actions }) => ({\n setEditUrlIndex: () => {\n actions.setProposedUrlValue('url', values.urlToEdit)\n },\n newUrl: () => {\n actions.setProposedUrlValue('url', NEW_URL)\n },\n addUrl: [\n sharedListeners.saveUrls,\n ({ url, launch }) => {\n if (launch) {\n actions.launchAtUrl(url)\n }\n },\n ],\n removeUrl: sharedListeners.saveUrls,\n updateUrl: sharedListeners.saveUrls,\n launchAtUrl: ({ url }) => {\n window.location.href = values.launchUrl(url)\n },\n cancelProposingUrl: () => {\n actions.resetProposedUrl()\n },\n submitProposedUrlSuccess: () => {\n actions.setEditUrlIndex(null)\n actions.resetProposedUrl()\n },\n })),\n selectors({\n urlToEdit: [\n (s) => [s.authorizedUrls, s.editUrlIndex],\n (authorizedUrls, editUrlIndex) => {\n if (editUrlIndex === null || editUrlIndex === -1) {\n return NEW_URL\n }\n return authorizedUrls[editUrlIndex]\n },\n ],\n urlsKeyed: [\n (s) => [s.authorizedUrls, s.suggestions, s.searchTerm],\n (authorizedUrls, suggestions, searchTerm): KeyedAppUrl[] => {\n const keyedUrls = authorizedUrls\n .map((url, index) => ({\n url,\n type: 'authorized',\n originalIndex: index,\n }))\n .concat(\n suggestions.map((url, index) => ({\n url,\n type: 'suggestion',\n originalIndex: index,\n }))\n ) as KeyedAppUrl[]\n\n if (!searchTerm) {\n return keyedUrls\n }\n\n return new Fuse(keyedUrls, {\n keys: ['url'],\n threshold: 0.3,\n })\n .search(searchTerm)\n .map((result) => result.item)\n },\n ],\n launchUrl: [\n (_, p) => [p.actionId],\n (actionId) => (url: string) =>\n appEditorUrl(url, {\n actionId,\n }),\n ],\n isAddUrlFormVisible: [(s) => [s.editUrlIndex], (editUrlIndex) => editUrlIndex === -1],\n onlyAllowDomains: [(_, p) => [p.type], (type) => type === AuthorizedUrlListType.RECORDING_DOMAINS],\n\n checkUrlIsAuthorized: [\n (s) => [s.authorizedUrls],\n (authorizedUrls) => (url: string) => {\n return checkUrlIsAuthorized(url, authorizedUrls)\n },\n ],\n }),\n urlToAction(({ actions }) => ({\n [urls.toolbarLaunch()]: (_, searchParams) => {\n if (searchParams.addNew) {\n actions.newUrl()\n }\n },\n })),\n])\n","import { useValues } from 'kea'\nimport { CodeSnippet, Language } from 'lib/components/CodeSnippet'\nimport { FEATURE_FLAGS } from 'lib/constants'\nimport { featureFlagLogic } from 'lib/logic/featureFlagLogic'\nimport { apiHostOrigin } from 'lib/utils/apiHost'\nimport posthog from 'posthog-js'\nimport { teamLogic } from 'scenes/teamLogic'\n\nexport function snippetFunctions(): string {\n const methods: string[] = []\n const posthogPrototype = Object.getPrototypeOf(posthog)\n for (const key of Object.getOwnPropertyNames(posthogPrototype)) {\n if (\n typeof posthogPrototype[key] === 'function' &&\n !key.startsWith('_') &&\n !['constructor', 'toString', 'push'].includes(key)\n ) {\n methods.push(key)\n }\n }\n const snippetMethods = methods.join(' ')\n\n return `!function(t,e){var o,n,p,r;e.__SV||(window.posthog=e,e._i=[],e.init=function(i,s,a){function g(t,e){var o=e.split(\".\");2==o.length&&(t=t[o[0]],e=o[1]),t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}}(p=t.createElement(\"script\")).type=\"text/javascript\",p.crossOrigin=\"anonymous\",p.async=!0,p.src=s.api_host.replace(\".i.posthog.com\",\"-assets.i.posthog.com\")+\"/static/array.js\",(r=t.getElementsByTagName(\"script\")[0]).parentNode.insertBefore(p,r);var u=e;for(void 0!==a?u=e[a]=[]:a=\"posthog\",u.people=u.people||[],u.toString=function(t){var e=\"posthog\";return\"posthog\"!==a&&(e+=\".\"+a),t||(e+=\" (stub)\"),e},u.people.toString=function(){return u.toString(1)+\".people (stub)\"},o=\"${snippetMethods}\".split(\" \"),n=0;n',\n ` ${snippetFunctions()}`,\n ` posthog.init('${currentTeam?.api_token}',{api_host:'${apiHostOrigin()}', ${\n isPersonProfilesDisabled\n ? ``\n : `person_profiles: 'identified_only' // or 'always' to create profiles for anonymous users as well`\n }\n })`,\n '',\n ]\n .map((x) => ' '.repeat(indent) + x)\n .join('\\n')\n}\n\nexport function JSSnippet(): JSX.Element {\n const snippet = useJsSnippet()\n\n return {snippet}\n}\n","import { IconBug, IconInfo, IconQuestion } from '@posthog/icons'\nimport {\n LemonInput,\n LemonSegmentedButton,\n LemonSegmentedButtonOption,\n lemonToast,\n Link,\n Tooltip,\n} from '@posthog/lemon-ui'\nimport { useActions, useValues } from 'kea'\nimport { Form } from 'kea-forms'\nimport { useUploadFiles } from 'lib/hooks/useUploadFiles'\nimport { IconFeedback } from 'lib/lemon-ui/icons'\nimport { LemonField } from 'lib/lemon-ui/LemonField'\nimport { LemonFileInput } from 'lib/lemon-ui/LemonFileInput/LemonFileInput'\nimport { LemonSelect } from 'lib/lemon-ui/LemonSelect/LemonSelect'\nimport { LemonTextArea } from 'lib/lemon-ui/LemonTextArea/LemonTextArea'\nimport { useRef } from 'react'\nimport { preflightLogic } from 'scenes/PreflightCheck/preflightLogic'\nimport { userLogic } from 'scenes/userLogic'\n\nimport {\n SEVERITY_LEVEL_TO_NAME,\n SUPPORT_TICKET_TEMPLATES,\n supportLogic,\n SupportTicketKind,\n TARGET_AREA_TO_NAME,\n} from './supportLogic'\n\nconst SUPPORT_TICKET_OPTIONS: LemonSegmentedButtonOption[] = [\n {\n value: 'support',\n label: 'Question',\n icon: ,\n },\n {\n value: 'feedback',\n label: 'Feedback',\n icon: ,\n },\n {\n value: 'bug',\n label: 'Bug',\n icon: ,\n },\n]\n\nconst SUPPORT_TICKET_KIND_TO_PROMPT: Record = {\n bug: \"What's the bug?\",\n feedback: 'What feedback do you have?',\n support: 'What can we help you with?',\n}\n\nexport function SupportForm(): JSX.Element | null {\n const { sendSupportRequest } = useValues(supportLogic)\n const { setSendSupportRequestValue } = useActions(supportLogic)\n const { objectStorageAvailable } = useValues(preflightLogic)\n // the support model can be shown when logged out, file upload is not offered to anonymous users\n const { user } = useValues(userLogic)\n // only allow authentication issues for logged out users\n\n const dropRef = useRef(null)\n\n const { setFilesToUpload, filesToUpload, uploading } = useUploadFiles({\n onUpload: (url, fileName) => {\n setSendSupportRequestValue('message', sendSupportRequest.message + `\\n\\nAttachment \"${fileName}\": ${url}`)\n },\n onError: (detail) => {\n lemonToast.error(`Error uploading image: ${detail}`)\n },\n })\n\n const changeKind = (kind: SupportTicketKind): void => {\n setSendSupportRequestValue('kind', kind)\n if (kind === 'bug') {\n setSendSupportRequestValue('severity_level', 'medium')\n } else {\n setSendSupportRequestValue('severity_level', 'low')\n }\n }\n\n return (\n \n {!user && (\n <>\n \n \n \n \n \n \n \n )}\n \n \n \n \n \n \n \n {(props) => (\n
\n \n {objectStorageAvailable && !!user && (\n \n )}\n
\n )}\n \n
\n
\n \n \n Definitions\n \n
\n \n ({\n label: value,\n value: key,\n }))}\n />\n \n
\n \n )\n}\n","import { captureException } from '@sentry/react'\nimport * as Sentry from '@sentry/react'\nimport { actions, connect, kea, listeners, path, props, reducers, selectors } from 'kea'\nimport { forms } from 'kea-forms'\nimport { urlToAction } from 'kea-router'\nimport { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast'\nimport { uuid } from 'lib/utils'\nimport posthog from 'posthog-js'\nimport { organizationLogic } from 'scenes/organizationLogic'\nimport { preflightLogic } from 'scenes/PreflightCheck/preflightLogic'\nimport { teamLogic } from 'scenes/teamLogic'\nimport { userLogic } from 'scenes/userLogic'\n\nimport { sidePanelStateLogic } from '~/layout/navigation-3000/sidepanel/sidePanelStateLogic'\nimport { AvailableFeature, OrganizationBasicType, Region, SidePanelTab, TeamPublicType, UserType } from '~/types'\n\nimport type { supportLogicType } from './supportLogicType'\nimport { openSupportModal } from './SupportModal'\n\nexport function getPublicSupportSnippet(\n cloudRegion: Region | null | undefined,\n currentOrganization: OrganizationBasicType | null,\n currentTeam: TeamPublicType | null,\n includeCurrentLocation = true\n): string {\n if (!cloudRegion) {\n return ''\n }\n return (\n (includeCurrentLocation ? getCurrentLocationLink() : '') +\n getSessionReplayLink() +\n `\\nAdmin: http://go/adminOrg${cloudRegion}/${currentOrganization?.id} (project ID ${currentTeam?.id})` +\n getSentryLink(cloudRegion, currentTeam)\n ).trimStart()\n}\n\nfunction getCurrentLocationLink(): string {\n const cleanedCurrentUrl = window.location.href.replace(/panel=support[^&]*(&)?/, '').replace(/#$/, '')\n return `\\nLocation: ${cleanedCurrentUrl}`\n}\n\nfunction getSessionReplayLink(): string {\n const replayUrl = posthog\n .get_session_replay_url({ withTimestamp: true, timestampLookBack: 30 })\n .replace(window.location.origin + '/replay/', 'http://go/session/')\n return `\\nSession: ${replayUrl}`\n}\n\nfunction getDjangoAdminLink(\n user: UserType | null,\n cloudRegion: Region | null | undefined,\n currentOrganization: OrganizationBasicType | null,\n currentTeam: TeamPublicType | null\n): string {\n if (!user || !cloudRegion) {\n return ''\n }\n const link = `http://go/admin${cloudRegion}/${user.email}`\n return `\\nAdmin: ${link} (organization ID ${currentOrganization?.id}: ${currentOrganization?.name}, project ID ${currentTeam?.id}: ${currentTeam?.name})`\n}\n\nfunction getBillingAdminLink(currentOrganization: OrganizationBasicType | null): string {\n if (!currentOrganization) {\n return ''\n }\n return `\\nBilling admin: http://go/billing/${currentOrganization.id}`\n}\n\nfunction getSentryLink(cloudRegion: Region | null | undefined, currentTeam: TeamPublicType | null): string {\n if (!cloudRegion || !currentTeam) {\n return ''\n }\n return `\\nSentry: http://go/sentry${cloudRegion}/${currentTeam.id}`\n}\n\nconst SUPPORT_TICKET_KIND_TO_TITLE: Record = {\n support: 'Contact support',\n feedback: 'Give feedback',\n bug: 'Report a bug',\n}\n\nexport const TARGET_AREA_TO_NAME = [\n {\n title: 'General',\n options: [\n {\n value: 'apps',\n 'data-attr': `support-form-target-area-apps`,\n label: 'Data pipelines',\n },\n {\n value: 'login',\n 'data-attr': `support-form-target-area-login`,\n label: 'Authentication (incl. login, sign-up, invites)',\n },\n {\n value: 'billing',\n 'data-attr': `support-form-target-area-billing`,\n label: 'Billing',\n },\n {\n value: 'onboarding',\n 'data-attr': `support-form-target-area-onboarding`,\n label: 'Onboarding',\n },\n {\n value: 'sdk',\n 'data-attr': `support-form-target-area-onboarding`,\n label: 'SDK / Implementation',\n },\n {\n value: 'cohorts',\n 'data-attr': `support-form-target-area-cohorts`,\n label: 'Cohorts',\n },\n {\n value: 'data_management',\n 'data-attr': `support-form-target-area-data_management`,\n label: 'Data management (incl. events, actions, properties)',\n },\n {\n value: 'notebooks',\n 'data-attr': `support-form-target-area-notebooks`,\n label: 'Notebooks',\n },\n {\n value: 'mobile',\n 'data-attr': `support-form-target-area-mobile`,\n label: 'Mobile',\n },\n ],\n },\n {\n title: 'Individual product',\n options: [\n {\n value: 'experiments',\n 'data-attr': `support-form-target-area-experiments`,\n label: 'Experiments',\n },\n {\n value: 'data_warehouse',\n 'data-attr': `support-form-target-area-data_warehouse`,\n label: 'Data warehouse',\n },\n {\n value: 'feature_flags',\n 'data-attr': `support-form-target-area-feature_flags`,\n label: 'Feature flags',\n },\n {\n value: 'analytics',\n 'data-attr': `support-form-target-area-analytics`,\n label: 'Product analytics (incl. insights, dashboards, annotations)',\n },\n {\n value: 'session_replay',\n 'data-attr': `support-form-target-area-session_replay`,\n label: 'Session replay (incl. recordings)',\n },\n {\n value: 'toolbar',\n 'data-attr': `support-form-target-area-toolbar`,\n label: 'Toolbar (incl. heatmaps)',\n },\n {\n value: 'surveys',\n 'data-attr': `support-form-target-area-surveys`,\n label: 'Surveys',\n },\n {\n value: 'web_analytics',\n 'data-attr': `support-form-target-area-web_analytics`,\n label: 'Web Analytics',\n },\n ],\n },\n]\n\nexport const SEVERITY_LEVEL_TO_NAME = {\n critical: 'Outage, data loss, or data breach',\n high: 'Feature is not working at all',\n medium: 'Feature not working as expected',\n low: 'Question or feature request',\n}\n\nexport const SUPPORT_KIND_TO_SUBJECT = {\n bug: 'Bug Report',\n feedback: 'Feedback',\n support: 'Support Ticket',\n}\n\nexport type SupportTicketTargetArea =\n | 'experiments'\n | 'apps'\n | 'login'\n | 'billing'\n | 'onboarding'\n | 'cohorts'\n | 'data_management'\n | 'notebooks'\n | 'data_warehouse'\n | 'feature_flags'\n | 'analytics'\n | 'session_replay'\n | 'toolbar'\n | 'surveys'\n | 'web_analytics'\nexport type SupportTicketSeverityLevel = keyof typeof SEVERITY_LEVEL_TO_NAME\nexport type SupportTicketKind = keyof typeof SUPPORT_KIND_TO_SUBJECT\n\nexport const getLabelBasedOnTargetArea = (target_area: SupportTicketTargetArea): null | string => {\n for (const category of TARGET_AREA_TO_NAME) {\n for (const option of category.options) {\n if (option.value === target_area) {\n return option.label\n }\n }\n }\n return null // Return null if the value is not found\n}\n\nexport const URL_PATH_TO_TARGET_AREA: Record = {\n insights: 'analytics',\n recordings: 'session_replay',\n replay: 'session_replay',\n dashboard: 'analytics',\n feature_flags: 'feature_flags',\n experiments: 'experiments',\n 'web-performance': 'session_replay',\n events: 'analytics',\n 'data-management': 'data_management',\n cohorts: 'cohorts',\n annotations: 'analytics',\n persons: 'analytics',\n groups: 'analytics',\n app: 'apps',\n toolbar: 'session_replay',\n warehouse: 'data_warehouse',\n surveys: 'surveys',\n web: 'web_analytics',\n}\n\nexport const SUPPORT_TICKET_TEMPLATES = {\n bug: 'Please describe the bug you saw, and how to reproduce it.\\n\\nIf the bug appeared on a specific insight or dashboard, please include a link to it.',\n feedback:\n \"If your request is due to a problem, please describe the problem as best you can.\\n\\nPlease also describe the solution you'd like to see, and any alternatives you considered.\\n\\nYou can add images below to help illustrate your request, if needed!\",\n support:\n \"Please explain as fully as possible what you're aiming to do, and what you'd like help with.\\n\\nIf your question involves an existing insight or dashboard, please include a link to it.\",\n}\n\nexport function getURLPathToTargetArea(pathname: string): SupportTicketTargetArea | null {\n const first_part = pathname.split('/')[1]\n return URL_PATH_TO_TARGET_AREA[first_part] ?? null\n}\n\nexport type SupportFormLogicProps = {\n onClose?: () => void\n}\n\nexport type SupportFormFields = {\n name: string\n email: string\n kind: SupportTicketKind\n target_area: SupportTicketTargetArea | null\n severity_level: SupportTicketSeverityLevel | null\n message: string\n isEmailFormOpen?: boolean | 'true' | 'false'\n}\n\nexport const supportLogic = kea([\n props({} as SupportFormLogicProps),\n path(['lib', 'components', 'support', 'supportLogic']),\n connect(() => ({\n values: [\n userLogic,\n ['user'],\n preflightLogic,\n ['preflight'],\n sidePanelStateLogic,\n ['sidePanelAvailable'],\n userLogic,\n ['hasAvailableFeature'],\n ],\n actions: [sidePanelStateLogic, ['openSidePanel', 'setSidePanelOptions']],\n })),\n actions(() => ({\n closeSupportForm: true,\n openSupportForm: (values: Partial) => values,\n submitZendeskTicket: (form: SupportFormFields) => form,\n updateUrlParams: true,\n openEmailForm: true,\n closeEmailForm: true,\n })),\n reducers(() => ({\n isSupportFormOpen: [\n false,\n {\n openSupportForm: () => true,\n closeSupportForm: () => false,\n },\n ],\n isEmailFormOpen: [\n false,\n {\n openEmailForm: () => true,\n closeEmailForm: () => false,\n },\n ],\n })),\n forms(({ actions, values }) => ({\n sendSupportRequest: {\n defaults: {\n name: '',\n email: '',\n kind: 'support',\n severity_level: null,\n target_area: null,\n message: '',\n } as SupportFormFields,\n errors: ({ name, email, message, kind, target_area, severity_level }) => {\n return {\n name: !values.user ? (!name ? 'Please enter your name' : '') : '',\n email: !values.user ? (!email ? 'Please enter your email' : '') : '',\n message: !message ? 'Please enter a message' : '',\n kind: !kind ? 'Please choose' : undefined,\n severity_level: !severity_level ? 'Please choose' : undefined,\n target_area: !target_area ? 'Please choose' : undefined,\n }\n },\n submit: async (formValues) => {\n // name must be present for zendesk to accept the ticket\n formValues.name = values.user?.first_name ?? formValues.name ?? 'name not set'\n formValues.email = values.user?.email ?? formValues.email ?? ''\n actions.submitZendeskTicket(formValues)\n actions.closeSupportForm()\n actions.resetSendSupportRequest()\n },\n },\n })),\n selectors({\n title: [\n (s) => [s.sendSupportRequest ?? null],\n (sendSupportRequest) =>\n sendSupportRequest.kind\n ? SUPPORT_TICKET_KIND_TO_TITLE[sendSupportRequest.kind]\n : 'Leave a message with PostHog',\n ],\n }),\n listeners(({ actions, props, values }) => ({\n updateUrlParams: async () => {\n const panelOptions = [\n values.sendSupportRequest.kind ?? '',\n values.sendSupportRequest.target_area ?? '',\n values.sendSupportRequest.severity_level ?? '',\n values.isEmailFormOpen ?? 'false',\n ].join(':')\n\n if (panelOptions !== ':') {\n actions.setSidePanelOptions(panelOptions)\n }\n },\n openSupportForm: async ({ name, email, isEmailFormOpen, kind, target_area, severity_level, message }) => {\n let area = target_area ?? getURLPathToTargetArea(window.location.pathname)\n if (!userLogic.values.user) {\n area = 'login'\n }\n kind = kind ?? 'support'\n actions.resetSendSupportRequest({\n name: name ?? '',\n email: email ?? '',\n kind,\n target_area: area,\n severity_level: severity_level ?? null,\n message: message ?? '',\n })\n\n if (isEmailFormOpen === 'true' || isEmailFormOpen === true) {\n actions.openEmailForm()\n } else {\n actions.closeEmailForm()\n }\n\n if (values.sidePanelAvailable) {\n const panelOptions = [kind ?? '', area ?? ''].join(':')\n actions.openSidePanel(SidePanelTab.Support, panelOptions === ':' ? undefined : panelOptions)\n } else {\n openSupportModal()\n }\n\n actions.updateUrlParams()\n },\n submitZendeskTicket: async ({ name, email, kind, target_area, severity_level, message }) => {\n const zendesk_ticket_uuid = uuid()\n const subject =\n SUPPORT_KIND_TO_SUBJECT[kind ?? 'support'] +\n ': ' +\n (target_area\n ? getLabelBasedOnTargetArea(target_area) ?? `${target_area} (feature preview)`\n : 'General') +\n ' (' +\n zendesk_ticket_uuid +\n ')'\n const cloudRegion = preflightLogic.values.preflight?.region\n\n const payload = {\n request: {\n requester: { name: name, email: email },\n subject: subject,\n custom_fields: [\n {\n id: 22084126888475,\n value: severity_level,\n },\n {\n id: 22129191462555,\n value: posthog.get_distinct_id(),\n },\n {\n id: 27242745654043,\n value: target_area ?? '',\n },\n {\n id: 27031528411291,\n value: userLogic?.values?.user?.organization?.id ?? '',\n },\n {\n id: 26073267652251,\n value: values.hasAvailableFeature(AvailableFeature.PRIORITY_SUPPORT)\n ? 'priority_support'\n : values.hasAvailableFeature(AvailableFeature.EMAIL_SUPPORT)\n ? 'email_support'\n : 'free_support',\n },\n ],\n comment: {\n body:\n message +\n `\\n\\n-----` +\n `\\nKind: ${kind}` +\n `\\nTarget area: ${target_area}` +\n `\\nReport event: http://go/ticketByUUID/${zendesk_ticket_uuid}` +\n getSessionReplayLink() +\n getCurrentLocationLink() +\n getDjangoAdminLink(\n userLogic.values.user,\n cloudRegion,\n organizationLogic.values.currentOrganization,\n teamLogic.values.currentTeam\n ) +\n (target_area === 'billing' || target_area === 'login' || target_area === 'onboarding'\n ? getBillingAdminLink(organizationLogic.values.currentOrganization)\n : '') +\n getSentryLink(cloudRegion, teamLogic.values.currentTeam) +\n (cloudRegion && teamLogic.values.currentTeam\n ? '\\nPersons-on-events mode for project: ' +\n (teamLogic.values.currentTeam.modifiers?.personsOnEventsMode ??\n teamLogic.values.currentTeam.default_modifiers?.personsOnEventsMode ??\n 'unknown')\n : ''),\n },\n },\n }\n\n try {\n const zendeskRequestBody = JSON.stringify(payload, undefined, 4)\n const response = await fetch('https://posthoghelp.zendesk.com/api/v2/requests.json', {\n method: 'POST',\n body: zendeskRequestBody,\n headers: { 'Content-Type': 'application/json' },\n })\n if (!response.ok) {\n const error = new Error(`There was an error creating the support ticket with zendesk.`)\n const extra: Record = { zendeskBody: zendeskRequestBody }\n Object.entries(payload).forEach(([key, value]) => {\n extra[`payload_${key}`] = value\n })\n const body = await response.text()\n const contexts = {\n response: {\n status_code: response.status,\n data: body,\n body_size: body?.length,\n },\n }\n captureException(error, {\n extra,\n contexts,\n })\n lemonToast.error(`There was an error sending the message.`)\n return\n }\n\n const json = await response.json()\n\n const zendesk_ticket_id = json.request.id\n const zendesk_ticket_link = `https://posthoghelp.zendesk.com/agent/tickets/${zendesk_ticket_id}`\n const properties = {\n zendesk_ticket_uuid,\n kind,\n target_area,\n message,\n zendesk_ticket_id,\n zendesk_ticket_link,\n }\n posthog.capture('support_ticket', properties)\n Sentry.captureMessage('User submitted Zendesk ticket', {\n tags: {\n zendesk_ticket_uuid,\n zendesk_ticket_link,\n support_request_kind: kind,\n support_request_area: target_area,\n team_id: teamLogic.values.currentTeamId,\n },\n extra: properties,\n level: 'log',\n })\n lemonToast.success(\"Got the message! If we have follow-up information for you, we'll reply via email.\")\n } catch (e) {\n captureException(e)\n lemonToast.error(`There was an error sending the message.`)\n }\n },\n\n closeSupportForm: () => {\n props.onClose?.()\n },\n\n setSendSupportRequestValue: () => {\n actions.updateUrlParams()\n },\n })),\n\n urlToAction(({ actions, values }) => ({\n '*': (_, _search, hashParams) => {\n if (values.isSupportFormOpen) {\n return\n }\n\n const [panel, ...panelOptions] = (hashParams['panel'] ?? '').split(':')\n\n if (panel === SidePanelTab.Support) {\n const [kind, area, severity, isEmailFormOpen] = panelOptions\n\n actions.openSupportForm({\n kind: Object.keys(SUPPORT_KIND_TO_SUBJECT).includes(kind) ? kind : null,\n target_area: getLabelBasedOnTargetArea(area) ? area : null,\n severity_level: Object.keys(SEVERITY_LEVEL_TO_NAME).includes(severity) ? severity : null,\n isEmailFormOpen: isEmailFormOpen ?? 'false',\n })\n return\n }\n\n // Legacy supportModal param\n if ('supportModal' in hashParams) {\n const [kind, area, severity] = (hashParams['supportModal'] || '').split(':')\n\n actions.openSupportForm({\n kind: Object.keys(SUPPORT_KIND_TO_SUBJECT).includes(kind) ? kind : null,\n target_area: Object.keys(TARGET_AREA_TO_NAME).includes(area) ? area : null,\n severity_level: Object.keys(SEVERITY_LEVEL_TO_NAME).includes(severity) ? severity : null,\n })\n }\n },\n })),\n])\n","import { actions, afterMount, kea, key, listeners, path, props, reducers, sharedListeners } from 'kea'\nimport { loaders } from 'kea-loaders'\nimport api from 'lib/api'\nimport { isNotNil } from 'lib/utils'\nimport {\n diffVersions,\n highestVersion,\n isEqualVersion,\n parseVersion,\n SemanticVersion,\n tryParseVersion,\n versionToString,\n} from 'lib/utils/semver'\n\nimport { HogQLQuery, NodeKind } from '~/queries/schema'\nimport { hogql } from '~/queries/utils'\n\nimport type { versionCheckerLogicType } from './versionCheckerLogicType'\n\n// If you would like to deprecate all posthog-js versions older than a specific version\n// (i.e. after fixing an important bug) please edit\n// https://github.com/PostHog/posthog-js/blob/main/deprecation.json\n\nconst CHECK_INTERVAL_MS = 1000 * 60 * 60 * 6 // 6 hour\n\nexport type SDKVersion = {\n version: SemanticVersion\n timestamp?: string\n}\n\nexport type SDKVersionWarning = {\n latestUsedVersion: string\n latestAvailableVersion: string\n numVersionsBehind?: number\n level: 'warning' | 'info' | 'error'\n}\n\nexport interface PosthogJSDeprecation {\n deprecateBeforeVersion?: string\n deprecateOlderThanDays?: number\n}\n\nexport interface AvailableVersions {\n sdkVersions?: SemanticVersion[]\n deprecation?: PosthogJSDeprecation\n}\n\nexport interface VersionCheckerLogicProps {\n teamId: number | null\n}\n\nexport const versionCheckerLogic = kea([\n props({ teamId: null } as VersionCheckerLogicProps),\n key(({ teamId }) => teamId || 'no-team-id'),\n path((key) => ['components', 'VersionChecker', 'versionCheckerLogic', key]),\n actions({\n setVersionWarning: (versionWarning: SDKVersionWarning | null) => ({ versionWarning }),\n setSdkVersions: (sdkVersions: SDKVersion[]) => ({ sdkVersions }),\n }),\n loaders(({ values }) => ({\n availableVersions: [\n {} as AvailableVersions,\n {\n loadAvailableVersions: async (): Promise => {\n // Make both requests simultaneously and don't return until both have finished, to avoid a flash\n // of partial results in the UI.\n const availableVersionsPromise: Promise = fetch(\n 'https://api.github.com/repos/posthog/posthog-js/tags'\n )\n .then((r) => r.json())\n .then((r) => r.map((x: any) => tryParseVersion(x.name)).filter(isNotNil))\n const deprecationPromise: Promise = fetch(\n 'https://raw.githubusercontent.com/PostHog/posthog-js/main/deprecation.json'\n ).then((r) => r.json())\n const settled = await Promise.allSettled([availableVersionsPromise, deprecationPromise])\n const availableVersions = settled[0].status === 'fulfilled' ? settled[0].value : []\n const deprecation = settled[1].status === 'fulfilled' ? settled[1].value : {}\n // if one or more of the requests failed, merge in the previous value if we have one\n return {\n ...values.availableVersions,\n sdkVersions: availableVersions,\n deprecation: deprecation,\n }\n },\n },\n ],\n usedVersions: [\n null as SDKVersion[] | null,\n {\n loadUsedVersions: async () => {\n const query: HogQLQuery = {\n kind: NodeKind.HogQLQuery,\n query: hogql`SELECT properties.$lib_version AS lib_version, max(timestamp) AS latest_timestamp, count(lib_version) as count\n FROM events\n WHERE timestamp >= now() - INTERVAL 1 DAY \n AND timestamp <= now()\n AND properties.$lib = 'web'\n GROUP BY lib_version\n ORDER BY latest_timestamp DESC\n limit 10`,\n }\n\n const res = await api.query(query, undefined, undefined, true)\n\n return (\n res.results\n ?.map((x) => {\n const version = tryParseVersion(x[0])\n if (!version) {\n return null\n }\n return {\n version,\n timestamp: x[1],\n }\n })\n .filter(isNotNil) ?? null\n )\n },\n },\n ],\n })),\n\n reducers({\n lastCheckTimestamp: [\n 0,\n { persist: true },\n {\n loadUsedVersionsSuccess: () => Date.now(),\n },\n ],\n versionWarning: [\n null as SDKVersionWarning | null,\n // bumping cache key due to an incorrect tag being cached on 2024-02-12\n { persist: true, prefix: '2024-02-12' },\n {\n setVersionWarning: (_, { versionWarning }) => versionWarning,\n },\n ],\n }),\n\n sharedListeners(({ values, actions }) => ({\n checkForVersionWarning: () => {\n if (!values.usedVersions?.length) {\n return\n }\n const { deprecation, sdkVersions } = values.availableVersions\n\n // We want the highest semantic version to be the latest used one, rather than\n // the one with the latest timestamp, because secondary installations can spew old versions\n const latestUsedVersion = highestVersion(values.usedVersions.map((v) => v.version))\n\n // the latest version published on github\n const latestAvailableVersion = sdkVersions?.[0]\n\n // the version where, anything before this deprecated (i.e. this version is allowed, before it is not)\n const deprecateBeforeVersion = deprecation?.deprecateBeforeVersion\n ? parseVersion(deprecation.deprecateBeforeVersion)\n : null\n\n let warning: SDKVersionWarning | null = null\n\n if (deprecateBeforeVersion) {\n const diff = diffVersions(deprecateBeforeVersion, latestUsedVersion)\n // if they are behind the deprecatedBeforeVersion by any amount, show an error\n if (diff && diff.diff > 0) {\n warning = {\n latestUsedVersion: versionToString(latestUsedVersion),\n latestAvailableVersion: versionToString(latestAvailableVersion || deprecateBeforeVersion),\n level: 'error',\n }\n }\n }\n\n if (!warning && sdkVersions && latestAvailableVersion) {\n const diff = diffVersions(latestAvailableVersion, latestUsedVersion)\n if (diff && diff.diff > 0) {\n // there's a difference between the latest used version and the latest available version\n\n let numVersionsBehind = sdkVersions.findIndex((v) => isEqualVersion(v, latestUsedVersion))\n if (numVersionsBehind === -1) {\n // if we couldn't find the versions, use the length of the list as a fallback\n numVersionsBehind = sdkVersions.length - 1\n }\n if (numVersionsBehind < diff.diff) {\n // we might have deleted versions, but if the actual diff is X then we must be at least X versions behind\n numVersionsBehind = diff.diff\n }\n\n let level: 'warning' | 'info' | 'error' | undefined\n if (diff.kind === 'major' || numVersionsBehind >= 20) {\n level = 'error'\n } else if (diff.kind === 'minor' && diff.diff >= 15) {\n level = 'warning'\n } else if ((diff.kind === 'minor' && diff.diff >= 10) || numVersionsBehind >= 10) {\n level = 'info'\n } else if (latestUsedVersion.extra) {\n // if we have an extra (alpha/beta/rc/etc.) version, we should always show a warning if they aren't on the latest\n level = 'warning'\n } else {\n // don't warn for a small number of patch versions behind\n level = undefined\n }\n\n // we check if there is a \"latest user version string\" to avoid returning odd data in unexpected cases\n if (level && !!versionToString(latestUsedVersion).trim().length) {\n warning = {\n latestUsedVersion: versionToString(latestUsedVersion),\n latestAvailableVersion: versionToString(latestAvailableVersion),\n level,\n numVersionsBehind,\n }\n }\n }\n }\n\n actions.setVersionWarning(warning)\n },\n })),\n\n listeners(({ sharedListeners }) => ({\n loadAvailableVersionsSuccess: sharedListeners.checkForVersionWarning,\n loadUsedVersionsSuccess: sharedListeners.checkForVersionWarning,\n })),\n\n afterMount(({ actions, values }) => {\n if (values.lastCheckTimestamp < Date.now() - CHECK_INTERVAL_MS) {\n actions.loadAvailableVersions()\n actions.loadUsedVersions()\n }\n }),\n])\n","import { useValues } from 'kea'\nimport { TextContent } from 'lib/components/Cards/TextCard/TextCard'\nimport { useUploadFiles } from 'lib/hooks/useUploadFiles'\nimport { IconMarkdown, IconTools } from 'lib/lemon-ui/icons'\nimport { LemonFileInput } from 'lib/lemon-ui/LemonFileInput'\nimport { LemonTabs } from 'lib/lemon-ui/LemonTabs'\nimport { LemonTextArea, LemonTextAreaProps } from 'lib/lemon-ui/LemonTextArea/LemonTextArea'\nimport { lemonToast } from 'lib/lemon-ui/LemonToast'\nimport { Link } from 'lib/lemon-ui/Link'\nimport { Tooltip } from 'lib/lemon-ui/Tooltip'\nimport posthog from 'posthog-js'\nimport React, { useRef, useState } from 'react'\nimport { preflightLogic } from 'scenes/PreflightCheck/preflightLogic'\n\nexport const LemonTextAreaMarkdown = React.forwardRef(\n function _LemonTextAreaMarkdown({ value, onChange, ...editAreaProps }, ref): JSX.Element {\n const { objectStorageAvailable } = useValues(preflightLogic)\n\n const [isPreviewShown, setIsPreviewShown] = useState(false)\n const dropRef = useRef(null)\n\n const { setFilesToUpload, filesToUpload, uploading } = useUploadFiles({\n onUpload: (url, fileName) => {\n onChange?.(value + `\\n\\n![${fileName}](${url})`)\n posthog.capture('markdown image uploaded', { name: fileName })\n },\n onError: (detail) => {\n posthog.capture('markdown image upload failed', { error: detail })\n lemonToast.error(`Error uploading image: ${detail}`)\n },\n })\n\n return (\n setIsPreviewShown(key === 'preview')}\n tabs={[\n {\n key: 'write',\n label: 'Write',\n content: (\n
\n \n
\n \n Markdown formatting support\n
\n {objectStorageAvailable ? (\n \n ) : (\n
\n \n \n \n \n \n \n Add external images using{' '}\n \n {' '}\n Markdown image links\n \n .\n \n
\n )}\n
\n ),\n },\n {\n key: 'preview',\n label: 'Preview',\n content: value ? (\n \n ) : (\n Nothing to preview\n ),\n },\n ]}\n />\n )\n }\n)\n","// This file contains example queries, used in storybook and in the /query interface.\nimport { defaultDataTableColumns } from '~/queries/nodes/DataTable/utils'\nimport {\n ActionsNode,\n DataTableNode,\n DataVisualizationNode,\n EventsNode,\n EventsQuery,\n FunnelsQuery,\n HogQLQuery,\n HogQuery,\n InsightVizNode,\n LifecycleQuery,\n Node,\n NodeKind,\n PathsQuery,\n PersonsNode,\n RetentionQuery,\n StickinessQuery,\n TrendsQuery,\n} from '~/queries/schema'\nimport {\n ChartDisplayType,\n FilterLogicalOperator,\n PropertyFilterType,\n PropertyGroupFilter,\n PropertyOperator,\n StepOrderValue,\n} from '~/types'\n\nconst Events: EventsQuery = {\n kind: NodeKind.EventsQuery,\n select: defaultDataTableColumns(NodeKind.EventsQuery),\n properties: [\n { type: PropertyFilterType.Event, key: '$browser', operator: PropertyOperator.Exact, value: 'Chrome' },\n ],\n after: '-24h',\n limit: 100,\n}\n\nconst EventsTable: DataTableNode = {\n kind: NodeKind.DataTableNode,\n source: Events,\n}\nconst EventsTableFull: DataTableNode = {\n kind: NodeKind.DataTableNode,\n full: true,\n source: Events,\n}\n\nconst TotalEvents: EventsQuery = {\n kind: NodeKind.EventsQuery,\n select: ['count()'],\n}\n\nexport const TotalEventsTable: DataTableNode = {\n kind: NodeKind.DataTableNode,\n full: true,\n source: TotalEvents,\n}\n\nconst PropertyFormulas: EventsQuery = {\n kind: NodeKind.EventsQuery,\n select: [\n '1 + 2 + 3',\n 'event',\n 'person.created_at',\n \"concat(properties['$browser'], ' 💚 ', properties['$geoip_city_name']) -- Browser 💚 City\",\n \"'random string'\",\n ],\n limit: 100,\n}\n\nconst PropertyFormulasTable: DataTableNode = {\n kind: NodeKind.DataTableNode,\n full: true,\n source: PropertyFormulas,\n}\n\nconst EventAggregations: DataTableNode = {\n kind: NodeKind.DataTableNode,\n full: true,\n source: {\n kind: NodeKind.EventsQuery,\n select: [\n \"concat(properties['$geoip_city_name'], ' ', 'Rocks') -- City\",\n 'event',\n 'count() + 100000 -- Inflamed total',\n '1 + 2',\n ],\n orderBy: ['-count()'],\n },\n}\n\nconst Persons: PersonsNode = {\n kind: NodeKind.PersonsNode,\n properties: [\n { type: PropertyFilterType.Person, key: '$browser', operator: PropertyOperator.Exact, value: 'Chrome' },\n ],\n}\n\nconst PersonsTable: DataTableNode = {\n kind: NodeKind.DataTableNode,\n columns: defaultDataTableColumns(NodeKind.PersonsNode),\n source: Persons,\n}\n\nconst PersonsTableFull: DataTableNode = {\n kind: NodeKind.DataTableNode,\n full: true,\n columns: defaultDataTableColumns(NodeKind.PersonsNode),\n source: Persons,\n}\n\nconst properties: PropertyGroupFilter = {\n type: FilterLogicalOperator.And,\n values: [\n {\n type: FilterLogicalOperator.Or,\n values: [\n {\n type: PropertyFilterType.Event,\n key: '$current_url',\n operator: PropertyOperator.Exact,\n value: ['https://hedgebox.net/files/'],\n },\n {\n type: PropertyFilterType.Event,\n key: '$geoip_country_code',\n operator: PropertyOperator.Exact,\n value: ['US', 'AU'],\n },\n ],\n },\n ],\n}\n\nconst filterTestAccounts = false\nconst series: (EventsNode | ActionsNode)[] = [\n {\n kind: NodeKind.EventsNode,\n name: '$pageview',\n custom_name: 'Views',\n event: '$pageview',\n properties: [\n {\n type: PropertyFilterType.Event,\n key: '$browser',\n operator: PropertyOperator.Exact,\n value: 'Chrome',\n },\n {\n type: PropertyFilterType.Cohort,\n key: 'id',\n operator: PropertyOperator.In,\n value: 2,\n },\n ],\n },\n // {\n // kind: NodeKind.ActionsNode,\n // id: 1,\n // name: 'Interacted with file',\n // custom_name: 'Interactions',\n // properties: [\n // {\n // type: PropertyFilterType.Event,\n // key: '$geoip_country_code',\n // operator: PropertyOperator.Exact,\n // value: ['US'],\n // },\n // ],\n // math: PropertyMathType.Average,\n // math_property: '$session_duration',\n // },\n]\n\nconst InsightTrendsQuery: TrendsQuery = {\n kind: NodeKind.TrendsQuery,\n properties,\n filterTestAccounts,\n interval: 'day',\n dateRange: {\n date_from: '-7d',\n },\n series,\n trendsFilter: {\n display: ChartDisplayType.ActionsAreaGraph,\n },\n breakdownFilter: {\n breakdown: '$geoip_country_code',\n breakdown_type: 'event',\n },\n}\n\nconst InsightFunnelsQuery: FunnelsQuery = {\n kind: NodeKind.FunnelsQuery,\n properties,\n filterTestAccounts,\n interval: 'day',\n dateRange: {\n date_from: '-7d',\n },\n series,\n funnelsFilter: {\n funnelOrderType: StepOrderValue.ORDERED,\n },\n breakdownFilter: {\n breakdown: '$geoip_country_code',\n breakdown_type: 'event',\n },\n}\n\nconst InsightRetentionQuery: RetentionQuery = {\n kind: NodeKind.RetentionQuery,\n properties,\n filterTestAccounts,\n retentionFilter: {\n // TODO: this should be typed as (EventsNode | ActionsNode)[] without math and properties\n targetEntity: { type: 'events', id: '$pageview', name: '$pageview' },\n returningEntity: { type: 'events', id: '$pageview', name: '$pageview' },\n },\n}\n\nconst InsightPathsQuery: PathsQuery = {\n kind: NodeKind.PathsQuery,\n properties,\n filterTestAccounts,\n pathsFilter: {},\n}\n\nconst InsightStickinessQuery: StickinessQuery = {\n kind: NodeKind.StickinessQuery,\n properties,\n filterTestAccounts,\n interval: 'day',\n dateRange: {\n date_from: '-7d',\n },\n series,\n stickinessFilter: {},\n}\n\nconst InsightLifecycleQuery: LifecycleQuery = {\n kind: NodeKind.LifecycleQuery,\n properties,\n filterTestAccounts,\n dateRange: {\n date_from: '-7d',\n },\n series, // TODO: Visualization only supports one event or action\n}\n\nconst HogQLRaw: HogQLQuery = {\n kind: NodeKind.HogQLQuery,\n query: ` select event,\n person.properties.email,\n properties.$browser,\n count()\n from events\n where {filters} -- replaced with global date and property filters\n and person.properties.email is not null\n group by event,\n properties.$browser,\n person.properties.email\n order by count() desc\n limit 100`,\n filters: {\n dateRange: {\n date_from: '-24h',\n },\n },\n}\n\nconst HogQLForDataVisualization: HogQLQuery = {\n kind: NodeKind.HogQLQuery,\n query: `select toDate(timestamp) as timestamp, count()\nfrom events\nwhere {filters} and timestamp <= now()\ngroup by timestamp\norder by timestamp asc\nlimit 100`,\n explain: true,\n filters: {\n dateRange: {\n date_from: '-7d',\n },\n },\n}\n\nconst HogQLForDataWarehouse: HogQLQuery = {\n kind: NodeKind.HogQLQuery,\n query: `select toDate(timestamp) as timestamp, count()\nfrom events\ngroup by timestamp\nlimit 100`,\n explain: true,\n}\n\nconst DataWarehouse: DataVisualizationNode = {\n kind: NodeKind.DataVisualizationNode,\n source: HogQLForDataWarehouse,\n}\n\nconst HogQLTable: DataTableNode = {\n kind: NodeKind.DataTableNode,\n full: true,\n source: HogQLRaw,\n}\n\nconst DataVisualization: DataVisualizationNode = {\n kind: NodeKind.DataVisualizationNode,\n source: HogQLForDataVisualization,\n tableSettings: {\n columns: [\n {\n column: 'timestamp',\n settings: {\n formatting: {\n prefix: '',\n suffix: '',\n },\n },\n },\n {\n column: 'count()',\n settings: {\n formatting: {\n prefix: '',\n suffix: '',\n },\n },\n },\n ],\n },\n chartSettings: { goalLines: undefined },\n}\n\nconst Hog: HogQuery = {\n kind: NodeKind.HogQuery,\n code: 'return 1 + 2;',\n}\n\nconst Hoggonacci: HogQuery = {\n kind: NodeKind.HogQuery,\n code: `fn fibonacci(number) {\n if (number < 2) {\n return number;\n } else {\n return fibonacci(number - 1) + fibonacci(number - 2);\n }\n}\nreturn fibonacci(16);`,\n}\n/* a subset of examples including only those we can show all users and that don't use HogQL */\nexport const queryExamples: Record = {\n Events,\n EventsTable,\n EventsTableFull,\n TotalEventsTable,\n PropertyFormulasTable,\n EventAggregations,\n Persons,\n PersonsTable,\n PersonsTableFull,\n InsightTrendsQuery,\n InsightTrends: { kind: NodeKind.InsightVizNode, source: InsightTrendsQuery } as InsightVizNode,\n InsightFunnelsQuery,\n InsightFunnels: { kind: NodeKind.InsightVizNode, source: InsightFunnelsQuery } as InsightVizNode,\n InsightRetentionQuery,\n InsightRetention: {\n kind: NodeKind.InsightVizNode,\n source: InsightRetentionQuery,\n } as InsightVizNode,\n InsightPathsQuery,\n InsightPaths: { kind: NodeKind.InsightVizNode, source: InsightPathsQuery } as InsightVizNode,\n InsightStickinessQuery,\n InsightStickiness: {\n kind: NodeKind.InsightVizNode,\n source: InsightStickinessQuery,\n } as InsightVizNode,\n InsightLifecycleQuery,\n InsightLifecycle: {\n kind: NodeKind.InsightVizNode,\n source: InsightLifecycleQuery,\n } as InsightVizNode,\n}\n\nexport const stringifiedQueryExamples: Record = Object.fromEntries(\n Object.entries(queryExamples).map(([key, node]) => [key, JSON.stringify(node)])\n)\n\nexport const examples: Record = {\n ...queryExamples,\n HogQLRaw,\n HogQLTable,\n DataVisualization,\n Hog,\n Hoggonacci,\n DataWarehouse,\n}\n\nexport const stringifiedExamples: Record = Object.fromEntries(\n Object.entries(examples).map(([key, node]) => [key, JSON.stringify(node)])\n)\n","import * as d3 from 'd3'\nimport * as Sankey from 'd3-sankey'\nimport { D3Selector } from 'lib/hooks/useD3'\nimport { stripHTTP } from 'lib/utils'\nimport { Dispatch, RefObject, SetStateAction } from 'react'\n\nimport { FunnelPathsFilter, PathsFilter } from '~/queries/schema'\n\nimport { FALLBACK_CANVAS_WIDTH, HIDE_PATH_CARD_HEIGHT } from './Paths'\nimport { PathNode } from './pathsDataLogic'\nimport { isSelectedPathStartOrEnd, PathNodeData, PathTargetLink, roundedRect } from './pathUtils'\n\nconst createCanvas = (canvasRef: RefObject, width: number, height: number): D3Selector => {\n return d3\n .select(canvasRef.current)\n .append('svg')\n .classed('Paths__canvas', true)\n .style('background', 'var(--item-background)')\n .style('width', `${width}px`)\n .style('height', `${height}px`)\n}\n\nconst createSankey = (width: number, height: number): Sankey.SankeyLayout => {\n // @ts-expect-error - d3 sankey typing things\n return new Sankey.sankey()\n .nodeId((d: PathNodeData) => d.name)\n .nodeAlign(Sankey.sankeyJustify)\n .nodeSort(null)\n .nodeWidth(15)\n .size([width, height])\n}\n\nconst appendPathNodes = (\n svg: any,\n nodes: PathNodeData[],\n pathsFilter: PathsFilter,\n funnelPathsFilter: FunnelPathsFilter,\n setNodeCards: Dispatch>\n): void => {\n svg.append('g')\n .selectAll('rect')\n .data(nodes)\n .join('rect')\n .attr('x', (d: PathNodeData) => d.x0 + 1)\n .attr('y', (d: PathNodeData) => d.y0)\n .attr('height', (d: PathNodeData) => d.y1 - d.y0)\n .attr('width', (d: PathNodeData) => d.x1 - d.x0 - 2)\n .attr('fill', (d: PathNodeData) => {\n let c\n for (const link of d.sourceLinks) {\n if (c === undefined) {\n c = link.color\n } else if (c !== link.color) {\n c = null\n }\n }\n if (c === undefined) {\n for (const link of d.targetLinks) {\n if (c === undefined) {\n c = link.color\n } else if (c !== link.color) {\n c = null\n }\n }\n }\n if (isSelectedPathStartOrEnd(pathsFilter, funnelPathsFilter, d)) {\n return d3.color('purple')\n }\n const startNodeColor = c && d3.color(c) ? d3.color(c) : d3.color('#5375ff')\n return startNodeColor\n })\n .on('mouseover', (_event: MouseEvent, data: PathNodeData) => {\n if (data.y1 - data.y0 > HIDE_PATH_CARD_HEIGHT) {\n return\n }\n setNodeCards(\n nodes.map((node: PathNodeData) =>\n node.index === data.index\n ? { ...node, visible: true }\n : { ...node, visible: node.y1 - node.y0 > HIDE_PATH_CARD_HEIGHT }\n )\n )\n })\n .append('title')\n .text((d: PathNodeData) => `${stripHTTP(d.name)}\\n${d.value.toLocaleString()}`)\n}\n\nconst appendDropoffs = (svg: D3Selector): void => {\n const dropOffGradient = svg\n .append('defs')\n .append('linearGradient')\n .attr('id', 'dropoff-gradient')\n .attr('gradientTransform', 'rotate(90)')\n\n dropOffGradient.append('stop').attr('offset', '0%').attr('stop-color', 'rgba(220,53,69,0.7)')\n\n dropOffGradient.append('stop').attr('offset', '100%').attr('stop-color', 'var(--bg-light)')\n}\n\nconst appendPathLinks = (\n svg: any,\n links: PathNodeData[],\n nodes: PathNodeData[],\n setNodeCards: Dispatch>\n): void => {\n const link = svg\n .append('g')\n .attr('fill', 'none')\n .selectAll('g')\n .data(links)\n .join('g')\n .attr('stroke', 'var(--primary)')\n .attr('opacity', 0.35)\n\n link.append('path')\n .attr('d', Sankey.sankeyLinkHorizontal())\n .attr('id', (d: PathNodeData) => `path-${d.index}`)\n .attr('stroke-width', (d: PathNodeData) => {\n return Math.max(1, d.width)\n })\n .on('mouseover', (_event: MouseEvent, data: PathNodeData) => {\n svg.select(`#path-${data.index}`).attr('stroke', 'blue')\n if (data?.source?.targetLinks.length === 0) {\n return\n }\n const nodesToColor = [data.source]\n const pathCardsToShow: number[] = []\n while (nodesToColor.length > 0) {\n const _node = nodesToColor.pop()\n _node?.targetLinks.forEach((_link: PathTargetLink) => {\n svg.select(`#path-${_link.index}`).attr('stroke', 'blue')\n nodesToColor.push(_link.source)\n pathCardsToShow.push(_link.source.index)\n })\n }\n const pathCards = [data.target]\n pathCardsToShow.push(data.target.index, data.source.index)\n while (pathCards.length > 0) {\n const node = pathCards.pop()\n node?.sourceLinks.forEach((l: PathTargetLink) => {\n pathCards.push(l.target)\n pathCardsToShow.push(l.target.index)\n })\n }\n setNodeCards(\n nodes.map((node: PathNodeData) => ({\n ...node,\n ...{\n visible: pathCardsToShow.includes(node.index)\n ? true\n : node.y1 - node.y0 > HIDE_PATH_CARD_HEIGHT,\n },\n }))\n )\n })\n .on('mouseleave', () => {\n svg.selectAll('path').attr('stroke', 'var(--primary)')\n })\n\n link.append('g')\n .append('path')\n .attr('d', (data: PathNodeData) => {\n if (data.source.layer === 0) {\n return\n }\n const _height =\n data.source.y1 - data.source.y0 - data.source.sourceLinks.reduce((prev, curr) => prev + curr.width, 0)\n return roundedRect(0, 0, 30, _height, Math.min(25, _height), false, true, false, false)\n })\n .attr('fill', 'url(#dropoff-gradient)')\n .attr('stroke-width', 0)\n .attr('transform', (data: PathNodeData) => {\n return (\n 'translate(' +\n Math.round(data.source.x1) +\n ',' +\n Math.round(data.source.y0 + data.source.sourceLinks.reduce((prev, curr) => prev + curr.width, 0)) +\n ')'\n )\n })\n}\n\nconst addChartAxisLines = (svg: D3Selector, height: number, nodes: PathNodeData[], maxLayer: number): void => {\n if (maxLayer > 5) {\n const arr = [...Array(maxLayer)]\n const minWidthApart = nodes[1].x0 - nodes[0].x0\n arr.forEach((_, i) => {\n svg.append('line')\n .style('stroke', 'var(--border)')\n .attr('stroke-width', 2)\n .attr('x1', minWidthApart * (i + 1) - 20)\n .attr('y1', 0)\n .attr('x2', minWidthApart * (i + 1) - 20)\n .attr('y2', height)\n })\n }\n}\n\nexport function renderPaths(\n canvasRef: RefObject,\n canvasWidth: number,\n canvasHeight: number,\n paths: { links: PathNode[]; nodes: any[] },\n pathsFilter: PathsFilter,\n funnelPathsFilter: FunnelPathsFilter,\n setNodeCards: Dispatch>\n): void {\n if (!paths || paths.nodes.length === 0) {\n return\n }\n\n const maxLayer = paths.links.reduce((prev, curr) => {\n // @ts-expect-error - sometimes target is an object instead of string\n const currNum = curr.target.name || curr.target\n return Math.max(prev, Number(currNum.match(/[^_]*/)))\n }, 0)\n\n const minWidth = canvasWidth > FALLBACK_CANVAS_WIDTH || maxLayer < 3 ? canvasWidth : FALLBACK_CANVAS_WIDTH\n\n const width = maxLayer > 5 && canvasWidth ? (minWidth / 5) * maxLayer : minWidth\n const height = canvasHeight\n\n const svg = createCanvas(canvasRef, width, height)\n const sankey = createSankey(width, height)\n const { nodes, links } = sankey({\n nodes: paths.nodes.map((d) => ({ ...d })),\n links: paths.links.map((d) => ({ ...d })),\n })\n\n setNodeCards(nodes.map((node: PathNodeData) => ({ ...node, visible: node.y1 - node.y0 > HIDE_PATH_CARD_HEIGHT })))\n\n appendPathNodes(svg, nodes, pathsFilter, funnelPathsFilter, setNodeCards)\n appendDropoffs(svg)\n appendPathLinks(svg, links, nodes, setNodeCards)\n addChartAxisLines(svg, height, nodes, maxLayer)\n}\n","import { LemonDialog, lemonToast, Link } from '@posthog/lemon-ui'\nimport { actions, afterMount, connect, kea, listeners, path, reducers, selectors } from 'kea'\nimport { FieldNamePath, forms } from 'kea-forms'\nimport { loaders } from 'kea-loaders'\nimport { router, urlToAction } from 'kea-router'\nimport api, { getJSONOrNull } from 'lib/api'\nimport { FEATURE_FLAGS } from 'lib/constants'\nimport { dayjs } from 'lib/dayjs'\nimport { LemonBannerAction } from 'lib/lemon-ui/LemonBanner/LemonBanner'\nimport { lemonBannerLogic } from 'lib/lemon-ui/LemonBanner/lemonBannerLogic'\nimport { LemonButtonPropsBase } from 'lib/lemon-ui/LemonButton'\nimport { featureFlagLogic } from 'lib/logic/featureFlagLogic'\nimport { pluralize } from 'lib/utils'\nimport { eventUsageLogic } from 'lib/utils/eventUsageLogic'\nimport posthog from 'posthog-js'\nimport { preflightLogic } from 'scenes/PreflightCheck/preflightLogic'\nimport { userLogic } from 'scenes/userLogic'\n\nimport { BillingPlanType, BillingProductV2Type, BillingType, ProductKey } from '~/types'\n\nimport type { billingLogicType } from './billingLogicType'\n\nexport const ALLOCATION_THRESHOLD_ALERT = 0.85 // Threshold to show warning of event usage near limit\nexport const ALLOCATION_THRESHOLD_BLOCK = 1.2 // Threshold to block usage\n\nexport interface BillingAlertConfig {\n status: 'info' | 'warning' | 'error'\n title: string\n message?: string\n contactSupport?: boolean\n buttonCTA?: string\n dismissKey?: string\n action?: LemonBannerAction\n pathName?: string\n onClose?: () => void\n}\n\nexport enum BillingAPIErrorCodes {\n OPEN_INVOICES_ERROR = 'open_invoices_error',\n NO_ACTIVE_PAYMENT_METHOD_ERROR = 'no_active_payment_method_error',\n COULD_NOT_PAY_INVOICES_ERROR = 'could_not_pay_invoices_error',\n}\n\nexport interface UnsubscribeError {\n detail: string | JSX.Element\n link: JSX.Element\n}\n\nexport interface BillingError {\n status: 'info' | 'warning' | 'error'\n message: string\n action: LemonButtonPropsBase\n}\n\nconst parseBillingResponse = (data: Partial): BillingType => {\n if (data.billing_period) {\n data.billing_period = {\n current_period_start: dayjs(data.billing_period.current_period_start),\n current_period_end: dayjs(data.billing_period.current_period_end),\n interval: data.billing_period.interval,\n }\n }\n\n data.free_trial_until = data.free_trial_until ? dayjs(data.free_trial_until) : undefined\n data.amount_off_expires_at = data.amount_off_expires_at ? dayjs(data.amount_off_expires_at) : undefined\n // If expiration is in the middle of the current period, we let it expire at the end of the period\n if (\n data.amount_off_expires_at &&\n data.billing_period &&\n data.amount_off_expires_at.isBefore(data.billing_period.current_period_end) &&\n data.amount_off_expires_at.isAfter(data.billing_period.current_period_start)\n ) {\n data.amount_off_expires_at = data.billing_period.current_period_end\n }\n\n return data as BillingType\n}\n\nexport const billingLogic = kea([\n path(['scenes', 'billing', 'billingLogic']),\n actions({\n setProductSpecificAlert: (productSpecificAlert: BillingAlertConfig | null) => ({ productSpecificAlert }),\n setScrollToProductKey: (scrollToProductKey: ProductKey | null) => ({ scrollToProductKey }),\n setShowLicenseDirectInput: (show: boolean) => ({ show }),\n reportBillingAlertShown: (alertConfig: BillingAlertConfig) => ({ alertConfig }),\n reportBillingAlertActionClicked: (alertConfig: BillingAlertConfig) => ({ alertConfig }),\n reportCreditsFormSubmitted: (creditInput: number) => ({ creditInput }),\n reportCreditsModalShown: true,\n reportBillingShown: true,\n registerInstrumentationProps: true,\n reportCreditsCTAShown: (creditOverview: any) => ({ creditOverview }),\n setRedirectPath: true,\n setIsOnboarding: true,\n determineBillingAlert: true,\n setUnsubscribeError: (error: null | UnsubscribeError) => ({ error }),\n resetUnsubscribeError: true,\n setBillingAlert: (billingAlert: BillingAlertConfig | null) => ({ billingAlert }),\n showPurchaseCreditsModal: (isOpen: boolean) => ({ isOpen }),\n toggleCreditCTAHeroDismissed: (isDismissed: boolean) => ({ isDismissed }),\n setComputedDiscount: (discount: number) => ({ discount }),\n }),\n connect(() => ({\n values: [featureFlagLogic, ['featureFlags'], preflightLogic, ['preflight']],\n actions: [\n userLogic,\n ['loadUser'],\n eventUsageLogic,\n ['reportProductUnsubscribed'],\n lemonBannerLogic({ dismissKey: 'usage-limit-exceeded' }),\n ['resetDismissKey as resetUsageLimitExceededKey'],\n lemonBannerLogic({ dismissKey: 'usage-limit-approaching' }),\n ['resetDismissKey as resetUsageLimitApproachingKey'],\n ],\n })),\n reducers({\n billingAlert: [\n null as BillingAlertConfig | null,\n {\n setBillingAlert: (_, { billingAlert }) => billingAlert,\n },\n ],\n scrollToProductKey: [\n null as ProductKey | null,\n {\n setScrollToProductKey: (_, { scrollToProductKey }) => scrollToProductKey,\n },\n ],\n productSpecificAlert: [\n null as BillingAlertConfig | null,\n {\n setProductSpecificAlert: (_, { productSpecificAlert }) => productSpecificAlert,\n },\n ],\n showLicenseDirectInput: [\n false,\n {\n setShowLicenseDirectInput: (_, { show }) => show,\n },\n ],\n redirectPath: [\n '' as string,\n {\n setRedirectPath: () => {\n return window.location.pathname.includes('/onboarding')\n ? window.location.pathname + window.location.search\n : ''\n },\n },\n ],\n isOnboarding: [\n false,\n {\n setIsOnboarding: () => window.location.pathname.includes('/onboarding'),\n },\n ],\n unsubscribeError: [\n null as null | UnsubscribeError,\n {\n resetUnsubscribeError: () => null,\n setUnsubscribeError: (_, { error }) => error,\n },\n ],\n timeRemainingInSeconds: [\n 0,\n {\n loadBillingSuccess: (_, { billing }) => {\n if (!billing?.billing_period) {\n return 0\n }\n const currentTime = dayjs()\n const periodEnd = dayjs(billing.billing_period.current_period_end)\n return periodEnd.diff(currentTime, 'second')\n },\n },\n ],\n timeTotalInSeconds: [\n 0,\n {\n loadBillingSuccess: (_, { billing }) => {\n if (!billing?.billing_period) {\n return 0\n }\n const periodStart = dayjs(billing.billing_period.current_period_start)\n const periodEnd = dayjs(billing.billing_period.current_period_end)\n return periodEnd.diff(periodStart, 'second')\n },\n },\n ],\n isPurchaseCreditsModalOpen: [\n false,\n {\n showPurchaseCreditsModal: (_, { isOpen }) => isOpen,\n },\n ],\n isCreditCTAHeroDismissed: [\n false,\n { persist: true },\n {\n toggleCreditCTAHeroDismissed: (_, { isDismissed }) => isDismissed,\n },\n ],\n computedDiscount: [\n 0,\n {\n setComputedDiscount: (_, { discount }) => discount,\n },\n ],\n }),\n loaders(({ actions, values }) => ({\n billing: [\n null as BillingType | null,\n {\n loadBilling: async () => {\n const response = await api.get('api/billing')\n\n return parseBillingResponse(response)\n },\n\n updateBillingLimits: async (limits: { [key: string]: number | null }) => {\n try {\n const response = await api.update('api/billing', { custom_limits_usd: limits })\n lemonToast.success('Billing limits updated')\n return parseBillingResponse(response)\n } catch (error: any) {\n lemonToast.error(\n 'There was an error updating your billing limits. Please try again or contact support.'\n )\n throw error\n }\n },\n\n deactivateProduct: async (key: string) => {\n // clear upgrade params from URL\n const currentURL = new URL(window.location.href)\n currentURL.searchParams.delete('upgraded')\n currentURL.searchParams.delete('products')\n router.actions.push(currentURL.pathname + currentURL.search)\n\n actions.resetUnsubscribeError()\n try {\n const response = await api.getResponse('api/billing/deactivate?products=' + key)\n const jsonRes = await getJSONOrNull(response)\n lemonToast.success('You have been unsubscribed')\n actions.reportProductUnsubscribed(key)\n return parseBillingResponse(jsonRes)\n } catch (error: any) {\n if (error.code) {\n if (error.code === BillingAPIErrorCodes.OPEN_INVOICES_ERROR) {\n actions.setUnsubscribeError({\n detail: error.detail,\n link: (\n \n View invoices\n \n ),\n } as UnsubscribeError)\n } else if (error.code === BillingAPIErrorCodes.NO_ACTIVE_PAYMENT_METHOD_ERROR) {\n actions.setUnsubscribeError({\n detail: error.detail,\n } as UnsubscribeError)\n } else if (error.code === BillingAPIErrorCodes.COULD_NOT_PAY_INVOICES_ERROR) {\n actions.setUnsubscribeError({\n detail: error.detail,\n link: (\n \n {error.link ? 'View invoice' : 'View invoices'}\n \n ),\n } as UnsubscribeError)\n }\n } else {\n actions.setUnsubscribeError({\n detail:\n typeof error.detail === 'string'\n ? error.detail\n : `We encountered a problem. Please try again or submit a support ticket.`,\n } as UnsubscribeError)\n }\n console.error(error)\n // This is a bit of a hack to prevent the page from re-rendering.\n return values.billing\n }\n },\n },\n ],\n billingError: [\n null as BillingError | null,\n {\n getInvoices: async () => {\n // First check to see if there are open invoices\n try {\n const res = await api.getResponse('api/billing/get_invoices?status=open')\n const jsonRes = await getJSONOrNull(res)\n const numOpenInvoices = jsonRes['count']\n if (numOpenInvoices > 0) {\n const viewInvoicesButton = {\n to:\n numOpenInvoices == 1 && jsonRes['link']\n ? jsonRes['link']\n : values.billing?.stripe_portal_url,\n children: `View invoice${numOpenInvoices > 1 ? 's' : ''}`,\n targetBlank: true,\n }\n return {\n status: 'warning',\n message: `You have ${numOpenInvoices} open invoice${\n numOpenInvoices > 1 ? 's' : ''\n }. Please pay ${\n numOpenInvoices > 1 ? 'them' : 'it'\n } before adding items to your subscription.`,\n action: viewInvoicesButton,\n }\n }\n } catch (error: any) {\n console.error(error)\n }\n return null\n },\n },\n ],\n creditOverview: [\n {\n eligible: false,\n estimated_monthly_credit_amount_usd: 0,\n status: 'none',\n invoice_url: null,\n collection_method: null,\n cc_last_four: null,\n email: null,\n },\n {\n loadCreditOverview: async () => {\n // Check if the user is subscribed\n if (values.billing?.has_active_subscription) {\n const response = await api.get('api/billing/credits/overview')\n if (!values.creditForm.creditInput) {\n actions.setCreditFormValue(\n 'creditInput',\n Math.round(response.estimated_monthly_credit_amount_usd * 12)\n )\n }\n\n if (\n response.eligible &&\n response.status === 'none' &&\n values.featureFlags[FEATURE_FLAGS.PURCHASE_CREDITS]\n ) {\n actions.reportCreditsCTAShown(response)\n }\n return response\n }\n // Return default values if not subscribed\n return {\n eligible: false,\n estimated_monthly_credit_amount_usd: 0,\n status: 'none',\n invoice_url: null,\n collection_method: null,\n cc_last_four: null,\n email: null,\n }\n },\n },\n ],\n products: [\n [] as BillingProductV2Type[],\n {\n loadProducts: async () => {\n const response = await api.get('api/billing/available_products')\n return response\n },\n },\n ],\n })),\n selectors({\n upgradeLink: [(s) => [s.preflight], (): string => '/organization/billing'],\n isUnlicensedDebug: [\n (s) => [s.preflight, s.billing],\n (preflight, billing): boolean => !!preflight?.is_debug && !billing?.billing_period,\n ],\n projectedTotalAmountUsdWithBillingLimits: [\n (s) => [s.billing],\n (billing: BillingType): number => {\n if (!billing) {\n return 0\n }\n let projectedTotal = 0\n for (const product of billing.products || []) {\n const billingLimit =\n billing?.custom_limits_usd?.[product.type] ||\n (product.usage_key ? billing?.custom_limits_usd?.[product.usage_key] || 0 : 0)\n projectedTotal += Math.min(parseFloat(product.projected_amount_usd || '0'), billingLimit)\n }\n return projectedTotal\n },\n ],\n supportPlans: [\n (s) => [s.billing],\n (billing: BillingType): BillingPlanType[] => {\n const platformAndSupportProduct = billing?.products?.find(\n (product) => product.type == ProductKey.PLATFORM_AND_SUPPORT\n )\n if (!platformAndSupportProduct?.plans) {\n return []\n }\n\n const addonPlans = platformAndSupportProduct?.addons?.map((addon) => addon.plans).flat()\n const insertionIndex = Math.max(0, (platformAndSupportProduct?.plans?.length ?? 1) - 1)\n const allPlans = platformAndSupportProduct?.plans?.slice(0) || []\n allPlans.splice(insertionIndex, 0, ...addonPlans)\n return allPlans\n },\n ],\n hasSupportAddonPlan: [\n (s) => [s.billing],\n (billing: BillingType): boolean => {\n return !!billing?.products\n ?.find((product) => product.type == ProductKey.PLATFORM_AND_SUPPORT)\n ?.addons.find((addon) => addon.plans.find((plan) => plan.current_plan))\n },\n ],\n creditDiscount: [(s) => [s.computedDiscount], (computedDiscount) => computedDiscount || 0],\n }),\n forms(({ actions, values }) => ({\n activateLicense: {\n defaults: { license: '' } as { license: string },\n errors: ({ license }) => ({\n license: !license ? 'Please enter your license key' : undefined,\n }),\n submit: async ({ license }, breakpoint) => {\n await breakpoint(500)\n try {\n await api.update('api/billing/license', {\n license,\n })\n\n // Reset the URL so we don't trigger the license submission again\n router.actions.replace(\n `/${values.isOnboarding ? 'ingestion' : 'organization'}/billing?success=true`\n )\n setTimeout(() => {\n window.location.reload() // Permissions, projects etc will be out of date at this point, so refresh\n }, 100)\n } catch (e: any) {\n actions.setActivateLicenseManualErrors({\n license: e.detail || 'License could not be activated. Please contact support.',\n })\n throw e\n }\n },\n },\n creditForm: {\n defaults: {\n creditInput: '',\n collectionMethod: 'charge_automatically',\n },\n submit: async ({ creditInput, collectionMethod }) => {\n values.computedDiscount * 100,\n await api.create('api/billing/credits/purchase', {\n annual_amount_usd: +Math.round(+creditInput - +creditInput * values.creditDiscount),\n discount_percent: values.computedDiscount * 100,\n collection_method: collectionMethod,\n })\n\n actions.showPurchaseCreditsModal(false)\n actions.loadCreditOverview()\n actions.reportCreditsFormSubmitted(+creditInput)\n\n LemonDialog.open({\n title: 'Your credit purchase has been submitted',\n width: 536,\n content:\n collectionMethod === 'send_invoice' ? (\n <>\n

\n The invoice for your credits has been created and it will be emailed to the email on\n file.\n

\n

\n Once the invoice is paid we will apply the credits to your account. Until the\n invoice is paid you will be charged for usage as normal.\n

\n \n ) : (\n <>\n

\n Your card will be charged soon and the credits will be applied to your account.\n Please make sure your{' '}\n \n card on file\n {' '}\n is up to date. You will receive an email when the credits are applied.\n

\n \n ),\n })\n },\n errors: ({ creditInput, collectionMethod }) => ({\n creditInput: !creditInput\n ? 'Please enter the amount of credits you want to purchase'\n : // This value is used because 6667 - 10% = 6000\n +creditInput < 6667\n ? 'Please enter a credit amount greater than $6,666'\n : undefined,\n collectionMethod: !collectionMethod ? 'Please select a collection method' : undefined,\n }),\n },\n })),\n listeners(({ actions, values }) => ({\n reportBillingShown: () => {\n posthog.capture('billing v2 shown')\n },\n reportBillingAlertShown: ({ alertConfig }) => {\n posthog.capture('billing alert shown', {\n ...alertConfig,\n })\n },\n reportBillingAlertActionClicked: ({ alertConfig }) => {\n posthog.capture('billing alert action clicked', {\n ...alertConfig,\n })\n },\n reportCreditsModalShown: () => {\n posthog.capture('credits modal shown')\n },\n reportCreditsFormSubmitted: ({ creditInput }) => {\n posthog.capture('credits modal credit form submitted', {\n credit_amount_usd: creditInput,\n })\n },\n reportCreditsCTAShown: ({ creditOverview }) => {\n posthog.capture('credits cta shown', {\n eligible: creditOverview.eligible,\n status: creditOverview.status,\n estimated_monthly_credit_amount_usd: creditOverview.estimated_monthly_credit_amount_usd,\n })\n },\n toggleCreditCTAHeroDismissed: ({ isDismissed }) => {\n if (isDismissed) {\n posthog.capture('credits cta hero dismissed')\n }\n },\n loadBillingSuccess: () => {\n if (\n router.values.location.pathname.includes('/organization/billing') &&\n router.values.searchParams['success']\n ) {\n // if the activation is successful, we reload the user to get the updated billing info on the organization\n actions.loadUser()\n router.actions.replace('/organization/billing')\n }\n actions.registerInstrumentationProps()\n\n actions.determineBillingAlert()\n\n actions.loadCreditOverview()\n },\n determineBillingAlert: () => {\n if (values.productSpecificAlert) {\n actions.setBillingAlert(values.productSpecificAlert)\n return\n }\n\n if (!values.billing || !values.preflight?.cloud) {\n return\n }\n\n if (values.billing.free_trial_until && values.billing.free_trial_until.isAfter(dayjs())) {\n const remainingDays = values.billing.free_trial_until.diff(dayjs(), 'days')\n const remainingHours = values.billing.free_trial_until.diff(dayjs(), 'hours')\n\n if (remainingHours > 72) {\n return\n }\n\n actions.setBillingAlert({\n status: 'info',\n title: `Your free trial will end in ${\n remainingHours < 24 ? pluralize(remainingHours, 'hour') : pluralize(remainingDays, 'day')\n }.`,\n message: `Setup billing now to ensure you don't lose access to premium features.`,\n })\n return\n }\n\n if (values.billing.deactivated) {\n actions.setBillingAlert({\n status: 'error',\n title: 'Your organization has been temporarily suspended.',\n message: 'Please contact support to reactivate it.',\n contactSupport: true,\n })\n return\n }\n\n const productOverLimit = values.billing.products?.find((x: BillingProductV2Type) => {\n return x.percentage_usage > 1 && x.usage_key\n })\n\n if (productOverLimit) {\n actions.setBillingAlert({\n status: 'error',\n title: 'Usage limit exceeded',\n message: `You have exceeded the usage limit for ${productOverLimit.name}. Please \n ${productOverLimit.subscribed ? 'increase your billing limit' : 'upgrade your plan'}\n or ${\n productOverLimit.name === 'Data warehouse'\n ? 'data will not be synced'\n : 'data loss may occur'\n }.`,\n dismissKey: 'usage-limit-exceeded',\n })\n return\n }\n\n actions.resetUsageLimitExceededKey()\n\n const productApproachingLimit = values.billing.products?.find(\n (x) => x.percentage_usage > ALLOCATION_THRESHOLD_ALERT\n )\n\n if (productApproachingLimit) {\n actions.setBillingAlert({\n status: 'info',\n title: 'You will soon hit your usage limit',\n message: `You have currently used ${parseFloat(\n (productApproachingLimit.percentage_usage * 100).toFixed(2)\n )}% of your ${\n productApproachingLimit.usage_key && productApproachingLimit.usage_key.toLowerCase()\n } allocation.`,\n dismissKey: 'usage-limit-approaching',\n })\n return\n }\n\n actions.resetUsageLimitApproachingKey()\n },\n setCreditFormValue: ({ name, value }) => {\n if (name === 'creditInput' || (name as FieldNamePath)?.[0] === 'creditInput') {\n const spend = +value\n let discount = 0\n if (spend >= 100000) {\n discount = 0.35\n } else if (spend >= 60000) {\n discount = 0.25\n } else if (spend >= 20000) {\n discount = 0.2\n } else if (spend >= 6000) {\n discount = 0.1\n }\n actions.setComputedDiscount(discount)\n }\n },\n registerInstrumentationProps: async (_, breakpoint) => {\n await breakpoint(100)\n if (posthog && values.billing) {\n const payload = {\n has_billing_plan: !!values.billing.has_active_subscription,\n free_trial_until: values.billing.free_trial_until?.toISOString(),\n customer_deactivated: values.billing.deactivated,\n current_total_amount_usd: values.billing.current_total_amount_usd,\n }\n if (values.billing.custom_limits_usd) {\n for (const product of Object.keys(values.billing.custom_limits_usd)) {\n payload[`custom_limits_usd.${product}`] = values.billing.custom_limits_usd[product]\n }\n }\n if (values.billing.products) {\n for (const product of values.billing.products) {\n const type = product.type.toLowerCase()\n payload[`percentage_usage.${type}`] = product.percentage_usage\n payload[`current_amount_usd.${type}`] = product.current_amount_usd\n payload[`unit_amount_usd.${type}`] = product.unit_amount_usd\n payload[`usage_limit.${type}`] = product.usage_limit\n payload[`current_usage.${type}`] = product.current_usage\n payload[`projected_usage.${type}`] = product.projected_usage\n payload[`free_allocation.${type}`] = product.free_allocation\n }\n }\n if (values.billing.billing_period) {\n payload['billing_period_start'] = values.billing.billing_period.current_period_start\n payload['billing_period_end'] = values.billing.billing_period.current_period_end\n }\n posthog.register(payload)\n }\n },\n showPurchaseCreditsModal: ({ isOpen }) => {\n if (isOpen) {\n actions.reportCreditsModalShown()\n }\n },\n })),\n afterMount(({ actions }) => {\n actions.loadBilling()\n actions.getInvoices()\n }),\n urlToAction(({ actions }) => ({\n // IMPORTANT: This needs to be above the \"*\" so it takes precedence\n '/*/billing': (_params, _search, hash) => {\n if (hash.license) {\n actions.setShowLicenseDirectInput(true)\n actions.setActivateLicenseValues({ license: hash.license })\n actions.submitActivateLicense()\n }\n if (_search.products) {\n const products = _search.products.split(',')\n actions.setScrollToProductKey(products[0])\n }\n if (_search.billing_error) {\n actions.setBillingAlert({\n status: 'error',\n title: 'Error',\n message: _search.billing_error,\n })\n }\n actions.setRedirectPath()\n actions.setIsOnboarding()\n },\n '*': () => {\n actions.setRedirectPath()\n actions.setIsOnboarding()\n },\n })),\n])\n","import { LemonCollapse, LemonModal, Link } from '@posthog/lemon-ui'\nimport { useValues } from 'kea'\nimport { CodeSnippet, Language } from 'lib/components/CodeSnippet'\nimport EarlyAccessFeatureImage from 'public/early-access-feature-demo.png'\nimport { preflightLogic } from 'scenes/PreflightCheck/preflightLogic'\nimport { urls } from 'scenes/urls'\n\nimport { FeatureFlagType, PipelineStage, Region } from '~/types'\n\ninterface InstructionsModalProps {\n flag: FeatureFlagType['key']\n visible: boolean\n onClose: () => void\n}\n\nexport function InstructionsModal({ onClose, visible, flag }: InstructionsModalProps): JSX.Element {\n const { preflight } = useValues(preflightLogic)\n\n const getCloudPanels = (): JSX.Element => (\n \n Give your users a{' '}\n \n prebuilt widget\n {' '}\n to opt-in to features\n \n \n ),\n },\n {\n key: '2',\n header: 'Option 2: Custom implementation',\n content: (\n
\n Opt user in\n
\n \n
\n\n Opt user out\n
\n \n
\n\n Retrieve Previews\n
\n \n
\n
\n ),\n },\n ]}\n />\n )\n\n const getSelfHostedPanels = (): JSX.Element => (\n
\n Opt user in\n
\n \n
\n\n Opt user out\n
\n \n
\n\n Retrieve Previews\n
\n \n
\n
\n )\n\n const panels: JSX.Element = preflight?.cloud ? getCloudPanels() : getSelfHostedPanels()\n\n return (\n \n
\n
\n Implement manual release condition toggles to give your users the ability choose which features they\n want to try\n
\n {panels}\n
\n
\n )\n}\n\nfunction FeatureEnrollInstructions({ flag }: { flag: string }): JSX.Element {\n return (\n \n {`posthog.updateEarlyAccessFeatureEnrollment(\"${flag}\", true)\n`}\n \n )\n}\n\nfunction FeatureUnenrollInstructions({ flag }: { flag: string }): JSX.Element {\n return (\n \n {`posthog.updateEarlyAccessFeatureEnrollment(\"${flag}\", false)\n`}\n \n )\n}\n\nfunction RetrievePreviewsInstructions(): JSX.Element {\n return (\n \n {`posthog.getEarlyAccessFeatures((previewItemData) => {\n // do something with early access feature\n})\n`}\n \n )\n}\n","import { useValues } from 'kea'\nimport { CodeSnippet, Language } from 'lib/components/CodeSnippet'\nimport { apiHostOrigin } from 'lib/utils/apiHost'\nimport { teamLogic } from 'scenes/teamLogic'\n\nimport { GroupType } from '~/types'\n\nexport const UTM_TAGS = '?utm_medium=in-product&utm_campaign=feature-flag'\n\nexport interface FeatureFlagSnippet {\n flagKey: string\n multivariant?: boolean\n groupType?: GroupType\n localEvaluation?: boolean\n payload?: boolean\n samplePropertyName?: string\n instantlyAvailableProperties?: boolean\n}\n\nconst LOCAL_EVAL_REMINDER = `Remember to set a personal API key in the SDK to enable local evaluation.\n`\n\nexport function NodeJSSnippet({\n flagKey,\n groupType,\n multivariant,\n localEvaluation,\n payload,\n samplePropertyName,\n}: FeatureFlagSnippet): JSX.Element {\n const clientSuffix = 'await client.'\n const flagFunction = payload ? 'getFeatureFlagPayload' : multivariant ? 'getFeatureFlag' : 'isFeatureEnabled'\n\n const propertyName = samplePropertyName || 'is_authorized'\n\n const localEvalAddition = localEvaluation\n ? groupType\n ? `\n // add group properties used in the flag to ensure the flag\n // is evaluated locally, vs. going to our servers\n groupProperties: { ${groupType.group_type}: {'${propertyName}': 'value', 'name': 'xyz'}}`\n : `\n // add person properties used in the flag to ensure the flag\n // is evaluated locally, vs. going to our servers\n personProperties: {'${propertyName}': 'value'}`\n : ''\n\n const flagSnippet = groupType\n ? `${clientSuffix}${flagFunction}(\n '${flagKey}',\n 'user distinct id',${\n payload\n ? `\n undefined,`\n : ''\n }\n {\n groups: { '${groupType.group_type}': '<${groupType.name_singular || 'group'} ID>' },${localEvalAddition}\n }\n)`\n : localEvalAddition\n ? `${clientSuffix}${flagFunction}(\n '${flagKey}',\n 'user distinct id',${\n payload\n ? `\n undefined,`\n : ''\n }\n {${localEvalAddition}\n }\n)`\n : `${clientSuffix}${flagFunction}('${flagKey}', 'user distinct id')`\n\n const variableName = payload ? 'matchedFlagPayload' : multivariant ? 'enabledVariant' : 'isMyFlagEnabledForUser'\n\n const conditional = multivariant ? `${variableName} === 'example-variant'` : `${variableName}`\n\n const followUpCode = payload\n ? ''\n : `\n\nif (${conditional}) {\n // Do something differently for this ${groupType ? groupType.name_singular || 'group' : 'user'}\n}`\n\n return (\n <>\n \n {`${\n localEvaluation ? '// ' + LOCAL_EVAL_REMINDER : ''\n }const ${variableName} = ${flagSnippet}${followUpCode}`}\n \n \n )\n}\n\nexport function PHPSnippet({\n flagKey,\n groupType,\n multivariant,\n localEvaluation,\n samplePropertyName,\n}: FeatureFlagSnippet): JSX.Element {\n const clientSuffix = 'PostHog::'\n\n const flagFunction = multivariant ? 'getFeatureFlag' : 'isFeatureEnabled'\n\n const propertyName = samplePropertyName || 'is_authorized'\n\n const localEvalAddition = localEvaluation\n ? groupType\n ? `\n // empty person properties\n [],\n // add group properties used in the flag to ensure the flag\n // is evaluated locally, vs. going to our servers\n [${groupType.group_type} => ['${propertyName}' => 'value', 'name' => 'xyz']]`\n : `\n // add person properties used in the flag to ensure the flag\n // is evaluated locally, vs. going to our servers\n ['${propertyName}' => 'value']`\n : ''\n\n const flagSnippet = groupType\n ? `${clientSuffix}${flagFunction}(\n '${flagKey}',\n 'user distinct id',\n // group types\n ['${groupType.group_type}' => '<${groupType.name_singular || 'group'} ID>'],${localEvalAddition}\n)`\n : localEvalAddition\n ? `${clientSuffix}${flagFunction}(\n '${flagKey}',\n 'user distinct id',${localEvalAddition}\n)`\n : `${clientSuffix}${flagFunction}('${flagKey}', 'user distinct id')`\n const variableName = multivariant ? '$enabledVariant' : '$isMyFlagEnabledForUser'\n\n const conditional = multivariant ? `${variableName} === 'example-variant'` : `${variableName}`\n\n return (\n <>\n \n {`${localEvaluation ? '// ' + LOCAL_EVAL_REMINDER : ''}${variableName} = ${flagSnippet}\n\nif (${conditional}) {\n // Do something differently for this ${groupType ? groupType.name_singular || 'group' : 'user'}\n}`}\n \n \n )\n}\n\nexport function GolangSnippet({\n flagKey,\n groupType,\n multivariant,\n localEvaluation,\n samplePropertyName,\n}: FeatureFlagSnippet): JSX.Element {\n const clientSuffix = 'client.'\n\n const flagFunction = multivariant ? 'GetFeatureFlag' : 'IsFeatureEnabled'\n\n const propertyName = samplePropertyName || 'is_authorized'\n\n const localEvalAddition = localEvaluation\n ? groupType\n ? `\n // add group properties used in the flag to ensure the flag\n // is evaluated locally, vs. going to our servers\n groupProperties: map[string]Properties{\"${groupType.group_type}\": posthog.NewProperties().Set(\"${propertyName}\", \"value\").Set(\"name\", \"xyz\")}`\n : `\n // add person properties used in the flag to ensure the flag\n // is evaluated locally, vs. going to our servers\n PersonProperties: posthog.NewProperties().Set(\"${propertyName}\", \"value\")`\n : ''\n\n const flagSnippet = groupType\n ? `${clientSuffix}${flagFunction}(\n FeatureFlagPayload{\n Key: \"${flagKey}\",\n DistinctId: \"distinct-id\",\n Groups: Groups{'${groupType.group_type}': '<${groupType.name_singular || 'group'} ID>'},${localEvalAddition}\n }\n)`\n : `${clientSuffix}${flagFunction}(\n FeatureFlagPayload{\n Key: '${flagKey}',\n DistinctId: \"distinct-id\",${localEvalAddition}\n })`\n const variableName = multivariant ? 'enabledVariant, err' : 'isMyFlagEnabledForUser, err'\n\n const conditional = multivariant ? `enabledVariant == 'example-variant'` : `isMyFlagEnabledForUser`\n\n return (\n <>\n \n {`${localEvaluation ? '// ' + LOCAL_EVAL_REMINDER : ''}${variableName} := ${flagSnippet}\n\nif ${conditional} {\n // Do something differently for this ${groupType ? groupType.name_singular || 'group' : 'user'}\n}`}\n \n \n )\n}\n\nexport function RubySnippet({\n flagKey,\n groupType,\n multivariant,\n localEvaluation,\n payload,\n samplePropertyName,\n}: FeatureFlagSnippet): JSX.Element {\n const clientSuffix = 'posthog.'\n const flagFunction = payload ? 'get_feature_flag_payload' : multivariant ? 'get_feature_flag' : 'is_feature_enabled'\n\n const propertyName = samplePropertyName || 'is_authorized'\n\n const localEvalAddition = localEvaluation\n ? groupType\n ? `\n # add group properties used in the flag to ensure the flag\n # is evaluated locally, vs. going to our servers\n group_properties: { ${groupType.group_type}: {'${propertyName}': 'value', 'name': 'xyz'}}`\n : `\n # add person properties used in the flag to ensure the flag\n # is evaluated locally, vs. going to our servers\n person_properties: {'${propertyName}': 'value'}`\n : ''\n\n const flagSnippet = groupType\n ? `${clientSuffix}${flagFunction}(\n '${flagKey}',\n 'user distinct id',\n groups: { '${groupType.group_type}': '<${groupType.name_singular || 'group'} ID>' },${localEvalAddition}\n)`\n : localEvalAddition\n ? `${clientSuffix}${flagFunction}(\n '${flagKey}',\n 'user distinct id',${localEvalAddition}\n)`\n : `${clientSuffix}${flagFunction}('${flagKey}', 'user distinct id')`\n const variableName = payload ? 'matched_flag_payload' : multivariant ? 'enabled_variant' : 'is_my_flag_enabled'\n\n const conditional = multivariant ? `${variableName} == 'example-variant'` : `${variableName}`\n\n const followUpCode = payload\n ? ''\n : `\n\nif ${conditional}\n # Do something differently for this ${groupType ? groupType.name_singular || 'group' : 'user'}\nend`\n\n return (\n <>\n \n {`${localEvaluation ? '# ' + LOCAL_EVAL_REMINDER : ''}${variableName} = ${flagSnippet}${followUpCode}`}\n \n \n )\n}\n\nexport function PythonSnippet({\n flagKey,\n groupType,\n multivariant,\n localEvaluation,\n payload,\n samplePropertyName,\n}: FeatureFlagSnippet): JSX.Element {\n const clientSuffix = 'posthog.'\n const flagFunction = payload ? 'get_feature_flag_payload' : multivariant ? 'get_feature_flag' : 'feature_enabled'\n\n const propertyName = samplePropertyName || 'is_authorized'\n\n const localEvalAddition = localEvaluation\n ? groupType\n ? `\n # add group properties used in the flag to ensure the flag\n # is evaluated locally, vs. going to our servers\n group_properties={ ${groupType.group_type}: {'${propertyName}': 'value', 'name': 'xyz'}}`\n : `\n # add person properties used in the flag to ensure the flag\n # is evaluated locally, vs. going to our servers\n person_properties={'${propertyName}': 'value'}`\n : ''\n\n const flagSnippet = groupType\n ? `${clientSuffix}${flagFunction}(\n '${flagKey}',\n 'user distinct id',\n groups={ '${groupType.group_type}': '<${groupType.name_singular || 'group'} ID>' },${localEvalAddition}\n)`\n : localEvalAddition\n ? `${clientSuffix}${flagFunction}(\n '${flagKey}',\n 'user distinct id',${localEvalAddition}\n)`\n : `${clientSuffix}${flagFunction}('${flagKey}', 'user distinct id')`\n const variableName = payload ? 'matched_flag_payload' : multivariant ? 'enabled_variant' : 'is_my_flag_enabled'\n\n const conditional = multivariant ? `${variableName} == 'example-variant'` : `${variableName}`\n\n const followUpCode = payload\n ? ''\n : `\n\nif ${conditional}:\n # Do something differently for this ${groupType ? groupType.name_singular || 'group' : 'user'}\n`\n\n return (\n <>\n \n {`${localEvaluation ? '# ' + LOCAL_EVAL_REMINDER : ''}${variableName} = ${flagSnippet}${followUpCode}`}\n \n \n )\n}\n\nexport function AndroidSnippet({ flagKey, multivariant, payload }: FeatureFlagSnippet): JSX.Element {\n const clientSuffix = 'PostHog.'\n\n if (payload) {\n return (\n \n {`${clientSuffix}getFeatureFlagPayload(\"${flagKey}\")`}\n \n )\n }\n\n const flagFunction = multivariant ? 'getFeatureFlag' : 'isFeatureEnabled'\n\n const variantSuffix = multivariant ? ` == \"example-variant\"` : ''\n return (\n \n {`if (${clientSuffix}${flagFunction}(\"${flagKey}\")${variantSuffix}) {\n // do something\n}\n `}\n \n )\n}\n\nexport function FlutterSnippet({ flagKey, multivariant, payload }: FeatureFlagSnippet): JSX.Element {\n const clientSuffix = 'await Posthog().'\n\n if (payload) {\n return (\n \n {`${clientSuffix}getFeatureFlagPayload('${flagKey}');`}\n \n )\n }\n\n const flagFunction = multivariant ? 'getFeatureFlag' : 'isFeatureEnabled'\n\n const variantSuffix = multivariant ? ` == 'example-variant'` : ''\n\n return (\n \n {`if (${clientSuffix}${flagFunction}('${flagKey}')${variantSuffix}) {\n // do something\n}\n `}\n \n )\n}\n\nexport function iOSSnippet({ flagKey, multivariant, payload }: FeatureFlagSnippet): JSX.Element {\n const clientSuffix = 'PostHogSDK.shared.'\n\n if (payload) {\n return (\n \n {`${clientSuffix}getFeatureFlagPayload(\"${flagKey}\")`}\n \n )\n }\n\n const flagFunction = multivariant ? 'getFeatureFlag' : 'isFeatureEnabled'\n\n const variantSuffix = multivariant ? `as? String == \"example-variant\"` : ''\n return (\n \n {`if ${clientSuffix}${flagFunction}(\"${flagKey}\")${variantSuffix} {\n // do something\n}`}\n \n )\n}\n\nexport function ReactNativeSnippet({ flagKey, multivariant, payload }: FeatureFlagSnippet): JSX.Element {\n const clientSuffix = 'posthog.'\n\n if (payload) {\n return (\n \n {`${clientSuffix}getFeatureFlagPayload('${flagKey}')`}\n \n )\n }\n\n const flagFunction = multivariant ? 'getFeatureFlag' : 'isFeatureEnabled'\n\n const variantSuffix = multivariant ? ` == 'example-variant'` : ''\n return (\n \n {`// With a hook\nimport { useFeatureFlag } from 'posthog-react-native'\n\nconst MyComponent = () => {\n const showFlaggedFeature = useFeatureFlag('${flagKey}')\n\n if (showFlaggedFeature === undefined) {\n // the response is undefined if the flags are being loaded\n return null\n }\n\n return showFlaggedFeature ${variantSuffix} ? Testing feature 😄 : Not Testing feature 😢\n}\n\n// Or calling on the method directly\n${clientSuffix}${flagFunction}('${flagKey}')\n `}\n \n )\n}\n\nexport function ReactSnippet({ flagKey, multivariant, payload }: FeatureFlagSnippet): JSX.Element {\n const flagFunction = payload\n ? 'useFeatureFlagPayload'\n : multivariant\n ? 'useFeatureFlagVariantKey'\n : 'useFeatureFlagEnabled'\n\n const variable = payload ? 'payload' : multivariant ? 'variant' : 'flagEnabled'\n const variantSuffix = multivariant ? ` == 'example-variant'` : ''\n\n return (\n \n {`\nimport { ${flagFunction} } from 'posthog-js/react'\n\nfunction App() {\n const ${variable} = ${flagFunction}('${flagKey}')\n\n if (${variable}${variantSuffix}) {\n // do something\n }\n}`}\n \n )\n}\n\nexport function APISnippet({ groupType }: FeatureFlagSnippet): JSX.Element {\n const { currentTeam } = useValues(teamLogic)\n\n const groupAddition = groupType\n ? `\n \"groups\": { \"${groupType.group_type}\": \"<${groupType.name_singular || 'group'} ID>\" },`\n : ''\n\n return (\n <>\n \n {`curl ${apiHostOrigin()}/decide?v=3/ \\\\\n-X POST -H 'Content-Type: application/json' \\\\\n-d '{\n \"api_key\": \"${currentTeam ? currentTeam.api_token : '[project_api_key]'}\",\n \"distinct_id\": \"[user distinct id]\",${groupAddition}\n}'\n `}\n \n \n )\n}\n\nexport function JSSnippet({\n flagKey,\n multivariant,\n payload,\n groupType,\n instantlyAvailableProperties,\n samplePropertyName,\n}: FeatureFlagSnippet): JSX.Element {\n if (payload) {\n return (\n <>\n \n {`posthog.getFeatureFlagPayload('${flagKey ?? ''}')`}\n \n \n )\n }\n\n const propertyName = samplePropertyName || 'is_authorized'\n\n const propertyOverrideSnippet = `// Your flag depends on properties that are not instantly available. If you want\n// to make them available without waiting for server delays, send these properties for flag evaluation, like so:\n// Make sure to call this before evaluating flags. More info: https://posthog.com/docs/libraries/js#overriding-server-properties \nposthog.${\n groupType\n ? `setGroupPropertiesForFlags({ '${groupType.group_type}': {'${propertyName}': 'value'}})`\n : `setPersonPropertiesForFlags({'${propertyName}': 'value'})`\n }\n\n`\n\n const clientSuffix = 'posthog.'\n const flagFunction = multivariant ? 'getFeatureFlag' : 'isFeatureEnabled'\n\n const variantSuffix = multivariant ? ` == 'example-variant'` : ''\n return (\n <>\n \n {`${instantlyAvailableProperties ? '' : propertyOverrideSnippet}// Ensure flags are loaded before usage.\n// You'll only need to call this on the code for when the first time a user visits.\n${clientSuffix}onFeatureFlags(function() {\n // feature flags should be available at this point\n if (${clientSuffix}${flagFunction}('${flagKey ?? ''}') ${variantSuffix}) {\n // do something\n }\n})\n\n// Otherwise, you can just do:\nif (${clientSuffix}${flagFunction}('${flagKey ?? ''}') ${variantSuffix}) {\n // do something\n}`}\n \n \n )\n}\n\nexport function JSBootstrappingSnippet(): JSX.Element {\n return (\n \n {`// Initialise the posthog library with a distinct ID and feature flags for immediate loading\n// This avoids the delay between the library loading and feature flags becoming available to use.\n\nposthog.init('{project_api_key}', {\n api_host: '${apiHostOrigin()}'\n bootstrap:\n {\n distinctID: 'your-anonymous-id',\n featureFlags: {\n // input the flag values here from 'posthog.getAllFlags(distinct_id)' which you can find in the server-side libraries.\n // example:\n // 'flag-1': true,\n // 'variant-flag': 'control',\n // 'other-flag': false\n },\n }\n})\n `}\n \n )\n}\n","import { mergeAttributes, Node, NodeViewProps } from '@tiptap/core'\nimport { NodeViewWrapper, ReactNodeViewRenderer } from '@tiptap/react'\nimport { NotebookNodeType, NotebookTarget } from '~/types'\nimport { dayjs } from 'lib/dayjs'\nimport { JSONContent } from '../Notebook/utils'\nimport clsx from 'clsx'\nimport { urls } from 'scenes/urls'\nimport { LemonButton } from '@posthog/lemon-ui'\nimport { notebookLogic } from '../Notebook/notebookLogic'\nimport { useValues } from 'kea'\nimport { useMemo } from 'react'\nimport { openNotebook } from '~/models/notebooksModel'\n\nexport interface NotebookNodeReplayTimestampAttrs {\n playbackTime?: number\n sessionRecordingId: string\n sourceNodeId?: string\n}\n\nconst Component = (props: NodeViewProps): JSX.Element => {\n const { shortId, findNodeLogic, findNodeLogicById } = useValues(notebookLogic)\n const { sessionRecordingId, playbackTime = 0, sourceNodeId } = props.node.attrs as NotebookNodeReplayTimestampAttrs\n\n const relatedNodeInNotebook = useMemo(() => {\n const logicById = sourceNodeId ? findNodeLogicById(sourceNodeId) : null\n\n return logicById ?? findNodeLogic(NotebookNodeType.Recording, { id: sessionRecordingId })\n }, [findNodeLogic])\n\n const handlePlayInNotebook = (): void => {\n // TODO: Figure out how to send this action info to the playlist OR the replay node...\n\n relatedNodeInNotebook?.values.sendMessage('play-replay', {\n sessionRecordingId,\n time: playbackTime ?? 0,\n })\n }\n\n return (\n \n openNotebook(shortId, NotebookTarget.Popover)\n }\n to={\n !relatedNodeInNotebook\n ? urls.replaySingle(sessionRecordingId) + `?t=${playbackTime / 1000}`\n : undefined\n }\n >\n {formatTimestamp(playbackTime)}\n
\n \n )\n}\n\nexport const NotebookNodeReplayTimestamp = Node.create({\n name: NotebookNodeType.ReplayTimestamp,\n inline: true,\n group: 'inline',\n atom: true,\n\n serializedText: (attrs: NotebookNodeReplayTimestampAttrs): string => {\n // timestamp is not a block so `getText` does not add a separator.\n // we need to add it manually\n return `${attrs.playbackTime ? formatTimestamp(attrs.playbackTime) : '00:00'}:\\n`\n },\n\n addAttributes() {\n return {\n playbackTime: { default: null, keepOnSplit: false },\n sessionRecordingId: { default: null, keepOnSplit: true, isRequired: true },\n sourceNodeId: { default: null, keepOnSplit: true },\n }\n },\n\n parseHTML() {\n return [{ tag: NotebookNodeType.ReplayTimestamp }]\n },\n\n renderHTML({ HTMLAttributes }) {\n return [NotebookNodeType.ReplayTimestamp, mergeAttributes(HTMLAttributes)]\n },\n\n addNodeView() {\n return ReactNodeViewRenderer(Component)\n },\n})\n\nexport function formatTimestamp(time: number): string {\n return dayjs.duration(time, 'milliseconds').format('HH:mm:ss').replace(/^00:/, '').trim()\n}\n\nexport function buildTimestampCommentContent(attrs: NotebookNodeReplayTimestampAttrs): JSONContent {\n return {\n type: 'paragraph',\n content: [\n {\n type: NotebookNodeType.ReplayTimestamp,\n attrs,\n },\n { type: 'text', text: ' ' },\n ],\n }\n}\n","import {\n IconCursor,\n IconFunnels,\n IconHogQL,\n IconLifecycle,\n IconPeople,\n IconRetention,\n IconRewindPlay,\n IconStickiness,\n IconTrends,\n IconUpload,\n IconUserPaths,\n} from '@posthog/icons'\nimport { IconCode } from '@posthog/icons'\nimport { LemonButton, LemonDivider, lemonToast } from '@posthog/lemon-ui'\nimport { Extension } from '@tiptap/core'\nimport { ReactRenderer } from '@tiptap/react'\nimport Suggestion from '@tiptap/suggestion'\nimport Fuse from 'fuse.js'\nimport { useValues } from 'kea'\nimport { IconBold, IconItalic } from 'lib/lemon-ui/icons'\nimport { Popover } from 'lib/lemon-ui/Popover'\nimport { selectFiles } from 'lib/utils/file-utils'\nimport { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useState } from 'react'\n\nimport { KeyboardShortcut } from '~/layout/navigation-3000/components/KeyboardShortcut'\nimport { defaultDataTableColumns } from '~/queries/nodes/DataTable/utils'\nimport { NodeKind } from '~/queries/schema'\nimport { BaseMathType, ChartDisplayType, FunnelVizType, NotebookNodeType, PathType, RetentionPeriod } from '~/types'\n\nimport { buildNodeEmbed } from '../Nodes/NotebookNodeEmbed'\nimport { buildInsightVizQueryContent, buildNodeQueryContent } from '../Nodes/NotebookNodeQuery'\nimport NotebookIconHeading from './NotebookIconHeading'\nimport { notebookLogic } from './notebookLogic'\nimport { EditorCommands, EditorRange } from './utils'\n\ntype SlashCommandConditionalProps =\n | {\n mode: 'add'\n getPos: () => number\n range?: never\n }\n | {\n mode: 'slash'\n getPos?: never\n range: EditorRange\n }\n\ntype SlashCommandsProps = SlashCommandConditionalProps & {\n query?: string\n decorationNode?: any\n onClose?: () => void\n}\n\ntype SlashCommandsPopoverProps = SlashCommandsProps & {\n visible: boolean\n children?: JSX.Element\n}\n\ntype SlashCommandsRef = {\n onKeyDown: (event: KeyboardEvent) => boolean\n}\n\ntype SlashCommandsItem = {\n title: string\n search?: string\n icon?: JSX.Element\n command: (chain: EditorCommands, pos: number | EditorRange) => EditorCommands | Promise\n}\n\nconst TEXT_CONTROLS: SlashCommandsItem[] = [\n {\n title: 'h1',\n icon: ,\n command: (chain) => chain.toggleHeading({ level: 1 }),\n },\n {\n title: 'h2',\n icon: ,\n command: (chain) => chain.toggleHeading({ level: 2 }),\n },\n {\n title: 'h3',\n icon: ,\n command: (chain) => chain.toggleHeading({ level: 3 }),\n },\n {\n title: 'bold',\n icon: ,\n command: (chain) => chain.toggleBold(),\n },\n {\n title: 'italic',\n icon: ,\n command: (chain) => chain.toggleItalic(),\n },\n]\n\nconst SLASH_COMMANDS: SlashCommandsItem[] = [\n {\n title: 'Trend',\n search: 'graph trend insight',\n icon: ,\n command: (chain, pos) =>\n chain.insertContentAt(\n pos,\n buildInsightVizQueryContent({\n kind: NodeKind.TrendsQuery,\n filterTestAccounts: false,\n series: [\n {\n kind: NodeKind.EventsNode,\n event: '$pageview',\n name: '$pageview',\n math: BaseMathType.TotalCount,\n },\n ],\n interval: 'day',\n trendsFilter: {\n display: ChartDisplayType.ActionsLineGraph,\n },\n })\n ),\n },\n {\n title: 'Funnel',\n search: 'funnel insight',\n icon: ,\n command: (chain, pos) =>\n chain.insertContentAt(\n pos,\n buildInsightVizQueryContent({\n kind: NodeKind.FunnelsQuery,\n series: [\n {\n kind: NodeKind.EventsNode,\n name: '$pageview',\n event: '$pageview',\n },\n {\n kind: NodeKind.EventsNode,\n name: '$pageview',\n event: '$pageview',\n },\n ],\n funnelsFilter: {\n funnelVizType: FunnelVizType.Steps,\n },\n })\n ),\n },\n {\n title: 'Retention',\n search: 'retention insight',\n icon: ,\n command: (chain, pos) =>\n chain.insertContentAt(\n pos,\n buildInsightVizQueryContent({\n kind: NodeKind.RetentionQuery,\n retentionFilter: {\n period: RetentionPeriod.Day,\n totalIntervals: 11,\n targetEntity: {\n id: '$pageview',\n name: '$pageview',\n type: 'events',\n },\n returningEntity: {\n id: '$pageview',\n name: '$pageview',\n type: 'events',\n },\n retentionType: 'retention_first_time',\n },\n })\n ),\n },\n {\n title: 'Paths',\n search: 'user paths insight',\n icon: ,\n command: (chain, pos) =>\n chain.insertContentAt(\n pos,\n buildInsightVizQueryContent({\n kind: NodeKind.PathsQuery,\n pathsFilter: {\n includeEventTypes: [PathType.PageView],\n },\n })\n ),\n },\n {\n title: 'Stickiness',\n search: 'stickiness insight',\n icon: ,\n command: (chain, pos) =>\n chain.insertContentAt(\n pos,\n buildInsightVizQueryContent({\n kind: NodeKind.StickinessQuery,\n series: [\n {\n kind: NodeKind.EventsNode,\n name: '$pageview',\n event: '$pageview',\n math: BaseMathType.TotalCount,\n },\n ],\n stickinessFilter: {},\n })\n ),\n },\n {\n title: 'Lifecycle',\n search: 'lifecycle insight',\n icon: ,\n command: (chain, pos) =>\n chain.insertContentAt(\n pos,\n buildInsightVizQueryContent({\n kind: NodeKind.LifecycleQuery,\n series: [\n {\n kind: NodeKind.EventsNode,\n name: '$pageview',\n event: '$pageview',\n math: BaseMathType.TotalCount,\n },\n ],\n })\n ),\n },\n {\n title: 'HogQL',\n search: 'sql',\n icon: ,\n command: (chain, pos) =>\n chain.insertContentAt(\n pos,\n buildNodeQueryContent({\n kind: NodeKind.DataTableNode,\n source: {\n kind: NodeKind.HogQLQuery,\n query: `select event,\n person.properties.email,\n properties.$browser,\n count()\n from events\n where {filters} -- replaced with global date and property filters\n and person.properties.email is not null\ngroup by event,\n properties.$browser,\n person.properties.email\norder by count() desc\n limit 100`,\n filters: {\n dateRange: {\n date_from: '-24h',\n },\n },\n },\n })\n ),\n },\n {\n title: 'Events',\n search: 'data explore',\n icon: ,\n command: (chain, pos) =>\n chain.insertContentAt(\n pos,\n buildNodeQueryContent({\n kind: NodeKind.DataTableNode,\n source: {\n kind: NodeKind.EventsQuery,\n select: defaultDataTableColumns(NodeKind.EventsQuery),\n properties: [],\n after: '-24h',\n limit: 100,\n },\n })\n ),\n },\n {\n title: 'People',\n search: 'persons users',\n icon: ,\n command: (chain, pos) =>\n chain.insertContentAt(\n pos,\n buildNodeQueryContent({\n kind: NodeKind.DataTableNode,\n columns: defaultDataTableColumns(NodeKind.ActorsQuery),\n source: {\n kind: NodeKind.ActorsQuery,\n properties: [],\n },\n })\n ),\n },\n {\n title: 'Session recordings',\n search: 'video replay',\n icon: ,\n command: (chain, pos) => chain.insertContentAt(pos, { type: NotebookNodeType.RecordingPlaylist, attrs: {} }),\n },\n {\n title: 'Image',\n search: 'picture gif',\n icon: ,\n command: async (chain, pos) => {\n // Trigger upload followed by insert\n try {\n const files = await selectFiles({ contentType: 'image/*', multiple: false })\n\n if (files.length) {\n return chain.insertContentAt(pos, { type: NotebookNodeType.Image, attrs: { file: files[0] } })\n }\n } catch (e) {\n lemonToast.error('Something went wrong when trying to select a file.')\n }\n\n return chain\n },\n },\n {\n title: 'Embedded iframe',\n search: 'iframe embed',\n icon: ,\n command: async (chain, pos) => {\n return chain.insertContentAt(pos, buildNodeEmbed())\n },\n },\n]\n\nexport const SlashCommands = forwardRef(function SlashCommands(\n { mode, range, getPos, onClose, query }: SlashCommandsProps,\n ref\n): JSX.Element | null {\n const { editor } = useValues(notebookLogic)\n // We start with 1 because the first item is the text controls\n const [selectedIndex, setSelectedIndex] = useState(0)\n const [selectedHorizontalIndex, setSelectedHorizontalIndex] = useState(0)\n\n const allCommmands = [...TEXT_CONTROLS, ...SLASH_COMMANDS]\n\n const fuse = useMemo(() => {\n return new Fuse(allCommmands, {\n keys: ['title', 'search'],\n threshold: 0.3,\n })\n }, [allCommmands])\n\n const filteredCommands = useMemo(() => {\n if (!query) {\n return allCommmands\n }\n return fuse.search(query).map((result) => result.item)\n }, [query, fuse])\n\n const filteredSlashCommands = useMemo(\n () => filteredCommands.filter((item) => SLASH_COMMANDS.includes(item)),\n [filteredCommands]\n )\n\n useEffect(() => {\n setSelectedIndex(0)\n setSelectedHorizontalIndex(0)\n }, [query])\n\n const execute = async (item: SlashCommandsItem): Promise => {\n if (editor) {\n const selectedNode = editor.getSelectedNode()\n const isTextNode = selectedNode === null || selectedNode.isText\n const isTextCommand = TEXT_CONTROLS.map((c) => c.title).includes(item.title)\n\n const position = mode === 'slash' ? range.from : getPos()\n let chain = mode === 'slash' ? editor.deleteRange(range) : editor.chain()\n\n if (!isTextNode && isTextCommand) {\n chain = chain.insertContentAt(position, { type: 'paragraph' })\n }\n\n const partialCommand = await item.command(chain, position)\n partialCommand.run()\n\n onClose?.()\n }\n }\n\n const onPressEnter = async (): Promise => {\n const command =\n selectedIndex === -1 ? TEXT_CONTROLS[selectedHorizontalIndex] : filteredSlashCommands[selectedIndex]\n\n await execute(command)\n }\n const onPressUp = (): void => {\n setSelectedIndex(Math.max(selectedIndex - 1, -1))\n }\n const onPressDown = (): void => {\n setSelectedIndex(Math.min(selectedIndex + 1, SLASH_COMMANDS.length - 1))\n }\n\n const onPressLeft = (): void => {\n setSelectedHorizontalIndex(Math.max(selectedHorizontalIndex - 1, 0))\n }\n const onPressRight = (): void => {\n setSelectedHorizontalIndex(Math.min(selectedHorizontalIndex + 1, TEXT_CONTROLS.length - 1))\n }\n\n const onKeyDown = useCallback(\n (event: KeyboardEvent): boolean => {\n const keyMappings = {\n ArrowUp: onPressUp,\n ArrowDown: onPressDown,\n ArrowLeft: onPressLeft,\n ArrowRight: onPressRight,\n Enter: onPressEnter,\n }\n\n if (keyMappings[event.key]) {\n keyMappings[event.key]()\n return true\n }\n\n return false\n },\n [selectedIndex, selectedHorizontalIndex, filteredCommands]\n )\n\n // Expose the keydown handler to the tiptap extension\n useImperativeHandle(ref, () => ({ onKeyDown }), [onKeyDown])\n\n useEffect(() => {\n if (mode !== 'add') {\n return\n }\n\n // If not opened from a slash command, we want to add our own keyboard listeners\n const keyDownListener = (event: KeyboardEvent): void => {\n const preventDefault = onKeyDown(event)\n if (preventDefault) {\n event.preventDefault()\n }\n }\n\n window.addEventListener('keydown', keyDownListener, true)\n\n return () => window.removeEventListener('keydown', keyDownListener, true)\n }, [onKeyDown, mode])\n\n if (!editor) {\n return null\n }\n\n return (\n
\n
\n {TEXT_CONTROLS.map((item, index) => (\n void execute(item)}\n icon={item.icon}\n />\n ))}\n
\n\n \n\n {filteredSlashCommands.map((item, index) => (\n void execute(item)}\n >\n {item.title}\n \n ))}\n\n {filteredSlashCommands.length === 0 && (\n
\n Nothing matching /{query}\n
\n )}\n\n {mode === 'add' && (\n <>\n \n
\n You can trigger this menu by typing \n
\n \n )}\n
\n )\n})\n\nexport const SlashCommandsPopover = forwardRef(\n function SlashCommandsPopover(\n { visible = true, decorationNode, children, onClose, ...props }: SlashCommandsPopoverProps,\n ref\n ): JSX.Element | null {\n return (\n }\n referenceElement={decorationNode}\n visible={visible}\n onClickOutside={onClose}\n >\n {children}\n \n )\n }\n)\n\nexport const SlashCommandsExtension = Extension.create({\n name: 'slash-commands',\n\n addProseMirrorPlugins() {\n return [\n Suggestion({\n editor: this.editor,\n char: '/',\n startOfLine: true,\n render: () => {\n let renderer: ReactRenderer\n\n return {\n onStart: (props) => {\n renderer = new ReactRenderer(SlashCommandsPopover, {\n props: { ...props, mode: 'slash' },\n editor: props.editor,\n })\n },\n\n onUpdate(props) {\n renderer.updateProps(props)\n\n if (!props.clientRect) {\n return\n }\n },\n\n onKeyDown(props) {\n if (props.event.key === 'Escape') {\n renderer.destroy()\n return true\n }\n return renderer.ref?.onKeyDown(props.event) ?? false\n },\n\n onExit() {\n renderer.destroy()\n },\n }\n },\n }),\n ]\n },\n})\n","import {\n addedNodeMutation,\n customEvent,\n EventType,\n fullSnapshotEvent,\n incrementalSnapshotEvent,\n IncrementalSource,\n metaEvent,\n mutationData,\n removedNodeMutation,\n} from '@rrweb/types'\nimport { captureMessage } from '@sentry/react'\nimport { isObject } from 'lib/utils'\nimport { PLACEHOLDER_SVG_DATA_IMAGE_URL } from 'scenes/session-recordings/player/rrweb'\n\nimport {\n attributes,\n documentNode,\n elementNode,\n fullSnapshotEvent as MobileFullSnapshotEvent,\n keyboardEvent,\n metaEvent as MobileMetaEvent,\n MobileIncrementalSnapshotEvent,\n MobileNodeMutation,\n MobileNodeType,\n NodeType,\n serializedNodeWithId,\n textNode,\n wireframe,\n wireframeButton,\n wireframeCheckBox,\n wireframeDiv,\n wireframeImage,\n wireframeInputComponent,\n wireframeNavigationBar,\n wireframePlaceholder,\n wireframeProgress,\n wireframeRadio,\n wireframeRadioGroup,\n wireframeRectangle,\n wireframeScreenshot,\n wireframeSelect,\n wireframeStatusBar,\n wireframeText,\n wireframeToggle,\n} from '../mobile.types'\nimport { makeNavigationBar, makeOpenKeyboardPlaceholder, makeStatusBar } from './screen-chrome'\nimport { ConversionContext, ConversionResult } from './types'\nimport {\n asStyleString,\n makeBodyStyles,\n makeColorStyles,\n makeDeterminateProgressStyles,\n makeHTMLStyles,\n makeIndeterminateProgressStyles,\n makeMinimalStyles,\n makePositionStyles,\n makeStylesString,\n} from './wireframeStyle'\n\nexport const BACKGROUND = '#f3f4ef'\nconst FOREGROUND = '#35373e'\n\n/**\n * generates a sequence of ids\n * from 100 to 9,999,999\n * the transformer reserves ids in the range 0 to 9,999,999\n * we reserve a range of ids because we need nodes to have stable ids across snapshots\n * in order for incremental snapshots to work\n * some mobile elements have to be wrapped in other elements in order to be styled correctly\n * which means the web version of a mobile replay will use ids that don't exist in the mobile replay,\n * and we need to ensure they don't clash\n * -----\n * id is typed as a number in rrweb\n * and there's a few places in their code where rrweb uses a check for `id === -1` to bail out of processing\n * so, it's safest to assume that id is expected to be a positive integer\n */\nfunction* ids(): Generator {\n let i = 100\n while (i < 9999999) {\n yield i++\n }\n}\n\nlet globalIdSequence = ids()\n\n// there are some fixed ids that we need to use for fixed elements or artificial mutations\nconst DOCUMENT_ID = 1\nconst HTML_DOC_TYPE_ID = 2\nconst HTML_ELEMENT_ID = 3\nconst HEAD_ID = 4\nconst BODY_ID = 5\n// the nav bar should always be the last item in the body so that it is at the top of the stack\nconst NAVIGATION_BAR_PARENT_ID = 7\nexport const NAVIGATION_BAR_ID = 8\n// the keyboard so that it is still before the nav bar\nconst KEYBOARD_PARENT_ID = 9\nexport const KEYBOARD_ID = 10\nexport const STATUS_BAR_PARENT_ID = 11\nexport const STATUS_BAR_ID = 12\n\nfunction isKeyboardEvent(x: unknown): x is keyboardEvent {\n return isObject(x) && 'data' in x && isObject(x.data) && 'tag' in x.data && x.data.tag === 'keyboard'\n}\n\nexport function _isPositiveInteger(id: unknown): id is number {\n return typeof id === 'number' && id > 0 && id % 1 === 0\n}\n\nfunction _isNullish(x: unknown): x is null | undefined {\n return x === null || x === undefined\n}\n\nfunction isRemovedNodeMutation(x: addedNodeMutation | removedNodeMutation): x is removedNodeMutation {\n return isObject(x) && 'id' in x\n}\n\nexport const makeCustomEvent = (\n mobileCustomEvent: (customEvent | keyboardEvent) & {\n timestamp: number\n delay?: number\n }\n): (customEvent | incrementalSnapshotEvent) & {\n timestamp: number\n delay?: number\n} => {\n if (isKeyboardEvent(mobileCustomEvent)) {\n // keyboard events are handled as incremental snapshots to add or remove a keyboard from the DOM\n // TODO eventually we can pass something to makeIncrementalEvent here\n const adds: addedNodeMutation[] = []\n const removes = []\n if (mobileCustomEvent.data.payload.open) {\n const keyboardPlaceHolder = makeOpenKeyboardPlaceholder(mobileCustomEvent, {\n timestamp: mobileCustomEvent.timestamp,\n idSequence: globalIdSequence,\n })\n if (keyboardPlaceHolder) {\n adds.push({\n parentId: KEYBOARD_PARENT_ID,\n nextId: null,\n node: keyboardPlaceHolder.result,\n })\n // mutations seem not to want a tree of nodes to add\n // so even though `keyboardPlaceholder` is a tree with content\n // we have to add the text content as well\n adds.push({\n parentId: keyboardPlaceHolder.result.id,\n nextId: null,\n node: {\n type: NodeType.Text,\n id: globalIdSequence.next().value,\n textContent: 'keyboard',\n },\n })\n } else {\n captureMessage('Failed to create keyboard placeholder', { extra: { mobileCustomEvent } })\n }\n } else {\n removes.push({\n parentId: KEYBOARD_PARENT_ID,\n id: KEYBOARD_ID,\n })\n }\n const mutation: mutationData = { adds, attributes: [], removes, source: IncrementalSource.Mutation, texts: [] }\n return {\n type: EventType.IncrementalSnapshot,\n data: mutation,\n timestamp: mobileCustomEvent.timestamp,\n }\n }\n return mobileCustomEvent\n}\n\nexport const makeMetaEvent = (\n mobileMetaEvent: MobileMetaEvent & {\n timestamp: number\n }\n): metaEvent & {\n timestamp: number\n delay?: number\n} => ({\n type: EventType.Meta,\n data: {\n href: mobileMetaEvent.data.href || '', // the replay doesn't use the href, so we safely ignore any absence\n // mostly we need width and height in order to size the viewport\n width: mobileMetaEvent.data.width,\n height: mobileMetaEvent.data.height,\n },\n timestamp: mobileMetaEvent.timestamp,\n})\n\nexport function makeDivElement(\n wireframe: wireframeDiv,\n children: serializedNodeWithId[],\n context: ConversionContext\n): ConversionResult | null {\n const _id = _isPositiveInteger(wireframe.id) ? wireframe.id : context.idSequence.next().value\n return {\n result: {\n type: NodeType.Element,\n tagName: 'div',\n attributes: {\n style: asStyleString([makeStylesString(wireframe), 'overflow:hidden', 'white-space:nowrap']),\n 'data-rrweb-id': _id,\n },\n id: _id,\n childNodes: children,\n },\n context,\n }\n}\n\nfunction makeTextElement(\n wireframe: wireframeText,\n children: serializedNodeWithId[],\n context: ConversionContext\n): ConversionResult | null {\n if (wireframe.type !== 'text') {\n console.error('Passed incorrect wireframe type to makeTextElement')\n return null\n }\n\n // because we might have to style the text, we always wrap it in a div\n // and apply styles to that\n const id = context.idSequence.next().value\n\n const childNodes = [...children]\n if (!_isNullish(wireframe.text)) {\n childNodes.unshift({\n type: NodeType.Text,\n textContent: wireframe.text,\n // since the text node is wrapped, we assign it a synthetic id\n id,\n })\n }\n\n return {\n result: {\n type: NodeType.Element,\n tagName: 'div',\n attributes: {\n style: asStyleString([makeStylesString(wireframe), 'overflow:hidden', 'white-space:normal']),\n 'data-rrweb-id': wireframe.id,\n },\n id: wireframe.id,\n childNodes,\n },\n context,\n }\n}\n\nfunction makeWebViewElement(\n wireframe: wireframe,\n children: serializedNodeWithId[],\n context: ConversionContext\n): ConversionResult | null {\n const labelledWireframe: wireframePlaceholder = { ...wireframe } as wireframePlaceholder\n if ('url' in wireframe) {\n labelledWireframe.label = wireframe.url\n }\n\n return makePlaceholderElement(labelledWireframe, children, context)\n}\n\nexport function makePlaceholderElement(\n wireframe: wireframe,\n children: serializedNodeWithId[],\n context: ConversionContext\n): ConversionResult | null {\n const txt = 'label' in wireframe && wireframe.label ? wireframe.label : wireframe.type || 'PLACEHOLDER'\n return {\n result: {\n type: NodeType.Element,\n tagName: 'div',\n attributes: {\n style: makeStylesString(wireframe, {\n verticalAlign: 'center',\n horizontalAlign: 'center',\n backgroundColor: wireframe.style?.backgroundColor || BACKGROUND,\n color: wireframe.style?.color || FOREGROUND,\n backgroundImage: PLACEHOLDER_SVG_DATA_IMAGE_URL,\n backgroundSize: 'auto',\n backgroundRepeat: 'unset',\n ...context.styleOverride,\n }),\n 'data-rrweb-id': wireframe.id,\n },\n id: wireframe.id,\n childNodes: [\n {\n type: NodeType.Text,\n // since the text node is wrapped, we assign it a synthetic id\n id: context.idSequence.next().value,\n textContent: txt,\n },\n ...children,\n ],\n },\n context,\n }\n}\n\nexport function dataURIOrPNG(src: string): string {\n // replace all new lines in src\n src = src.replace(/\\r?\\n|\\r/g, '')\n if (!src.startsWith('data:image/')) {\n return 'data:image/png;base64,' + src\n }\n return src\n}\n\nfunction makeImageElement(\n wireframe: wireframeImage | wireframeScreenshot,\n children: serializedNodeWithId[],\n context: ConversionContext\n): ConversionResult | null {\n if (!wireframe.base64) {\n return makePlaceholderElement(wireframe, children, context)\n }\n\n const src = dataURIOrPNG(wireframe.base64)\n return {\n result: {\n type: NodeType.Element,\n tagName: 'img',\n attributes: {\n src: src,\n width: wireframe.width,\n height: wireframe.height,\n style: makeStylesString(wireframe),\n 'data-rrweb-id': wireframe.id,\n },\n id: wireframe.id,\n childNodes: children,\n },\n context,\n }\n}\n\nfunction inputAttributes(wireframe: T): attributes {\n const attributes = {\n style: makeStylesString(wireframe),\n type: wireframe.inputType,\n ...(wireframe.disabled ? { disabled: wireframe.disabled } : {}),\n 'data-rrweb-id': wireframe.id,\n }\n\n switch (wireframe.inputType) {\n case 'checkbox':\n return {\n ...attributes,\n style: null, // checkboxes are styled by being combined with a label\n ...(wireframe.checked ? { checked: wireframe.checked } : {}),\n }\n case 'toggle':\n return {\n ...attributes,\n style: null, // toggle are styled by being combined with a label\n ...(wireframe.checked ? { checked: wireframe.checked } : {}),\n }\n case 'radio':\n return {\n ...attributes,\n style: null, // radio buttons are styled by being combined with a label\n ...(wireframe.checked ? { checked: wireframe.checked } : {}),\n // radio value defaults to the string \"on\" if not specified\n // we're not really submitting the form, so it doesn't matter 🤞\n // radio name is used to correctly uncheck values when one is checked\n // mobile doesn't really have it, and we will be checking based on snapshots,\n // so we can ignore it for now\n }\n case 'button':\n return {\n ...attributes,\n }\n case 'text_area':\n return {\n ...attributes,\n value: wireframe.value || '',\n }\n case 'progress':\n return {\n ...attributes,\n // indeterminate when omitted\n value: wireframe.value || null,\n // defaults to 1 when omitted\n max: wireframe.max || null,\n type: null, // progress has no type attribute\n }\n default:\n return {\n ...attributes,\n value: wireframe.value || '',\n }\n }\n}\n\nfunction makeButtonElement(\n wireframe: wireframeButton,\n children: serializedNodeWithId[],\n context: ConversionContext\n): ConversionResult | null {\n const buttonText: textNode | null = wireframe.value\n ? {\n type: NodeType.Text,\n textContent: wireframe.value,\n }\n : null\n\n return {\n result: {\n type: NodeType.Element,\n tagName: 'button',\n attributes: inputAttributes(wireframe),\n id: wireframe.id,\n childNodes: buttonText ? [{ ...buttonText, id: context.idSequence.next().value }, ...children] : children,\n },\n context,\n }\n}\n\nfunction makeSelectOptionElement(\n option: string,\n selected: boolean,\n context: ConversionContext\n): ConversionResult {\n const optionId = context.idSequence.next().value\n return {\n result: {\n type: NodeType.Element,\n tagName: 'option',\n attributes: {\n ...(selected ? { selected: selected } : {}),\n 'data-rrweb-id': optionId,\n },\n id: optionId,\n childNodes: [\n {\n type: NodeType.Text,\n textContent: option,\n id: context.idSequence.next().value,\n },\n ],\n },\n context,\n }\n}\n\nfunction makeSelectElement(\n wireframe: wireframeSelect,\n children: serializedNodeWithId[],\n context: ConversionContext\n): ConversionResult | null {\n const selectOptions: serializedNodeWithId[] = []\n if (wireframe.options) {\n let optionContext = context\n for (let i = 0; i < wireframe.options.length; i++) {\n const option = wireframe.options[i]\n const conversion = makeSelectOptionElement(option, wireframe.value === option, optionContext)\n selectOptions.push(conversion.result)\n optionContext = conversion.context\n }\n }\n return {\n result: {\n type: NodeType.Element,\n tagName: 'select',\n attributes: inputAttributes(wireframe),\n id: wireframe.id,\n childNodes: [...selectOptions, ...children],\n },\n context,\n }\n}\n\nfunction groupRadioButtons(children: serializedNodeWithId[], radioGroupName: string): serializedNodeWithId[] {\n return children.map((child) => {\n if (child.type === NodeType.Element && child.tagName === 'input' && child.attributes.type === 'radio') {\n return {\n ...child,\n attributes: {\n ...child.attributes,\n name: radioGroupName,\n 'data-rrweb-id': child.id,\n },\n }\n }\n return child\n })\n}\n\nfunction makeRadioGroupElement(\n wireframe: wireframeRadioGroup,\n children: serializedNodeWithId[],\n context: ConversionContext\n): ConversionResult | null {\n const radioGroupName = 'radio_group_' + wireframe.id\n return {\n result: {\n type: NodeType.Element,\n tagName: 'div',\n attributes: {\n style: makeStylesString(wireframe),\n 'data-rrweb-id': wireframe.id,\n },\n id: wireframe.id,\n childNodes: groupRadioButtons(children, radioGroupName),\n },\n context,\n }\n}\n\nfunction makeStar(title: string, path: string, context: ConversionContext): serializedNodeWithId {\n const svgId = context.idSequence.next().value\n const titleId = context.idSequence.next().value\n const pathId = context.idSequence.next().value\n return {\n type: NodeType.Element,\n tagName: 'svg',\n isSVG: true,\n attributes: {\n style: asStyleString(['height: 100%', 'overflow-clip-margin: content-box', 'overflow:hidden']),\n viewBox: '0 0 24 24',\n fill: 'currentColor',\n 'data-rrweb-id': svgId,\n },\n id: svgId,\n childNodes: [\n {\n type: NodeType.Element,\n tagName: 'title',\n isSVG: true,\n attributes: {\n 'data-rrweb-id': titleId,\n },\n id: titleId,\n childNodes: [\n {\n type: NodeType.Text,\n textContent: title,\n id: context.idSequence.next().value,\n },\n ],\n },\n {\n type: NodeType.Element,\n tagName: 'path',\n isSVG: true,\n attributes: {\n d: path,\n 'data-rrweb-id': pathId,\n },\n id: pathId,\n childNodes: [],\n },\n ],\n }\n}\n\nfunction filledStar(context: ConversionContext): serializedNodeWithId {\n return makeStar(\n 'filled star',\n 'M12,17.27L18.18,21L16.54,13.97L22,9.24L14.81,8.62L12,2L9.19,8.62L2,9.24L7.45,13.97L5.82,21L12,17.27Z',\n context\n )\n}\n\nfunction halfStar(context: ConversionContext): serializedNodeWithId {\n return makeStar(\n 'half-filled star',\n 'M12,15.4V6.1L13.71,10.13L18.09,10.5L14.77,13.39L15.76,17.67M22,9.24L14.81,8.63L12,2L9.19,8.63L2,9.24L7.45,13.97L5.82,21L12,17.27L18.18,21L16.54,13.97L22,9.24Z',\n context\n )\n}\n\nfunction emptyStar(context: ConversionContext): serializedNodeWithId {\n return makeStar(\n 'empty star',\n 'M12,15.39L8.24,17.66L9.23,13.38L5.91,10.5L10.29,10.13L12,6.09L13.71,10.13L18.09,10.5L14.77,13.38L15.76,17.66M22,9.24L14.81,8.63L12,2L9.19,8.63L2,9.24L7.45,13.97L5.82,21L12,17.27L18.18,21L16.54,13.97L22,9.24Z',\n context\n )\n}\n\nfunction makeRatingBar(\n wireframe: wireframeProgress,\n children: serializedNodeWithId[],\n context: ConversionContext\n): ConversionResult | null {\n // max is the number of stars... and value is the number of stars to fill\n\n // deliberate double equals, because we want to allow null and undefined\n if (wireframe.value == null || wireframe.max == null) {\n return makePlaceholderElement(wireframe, children, context)\n }\n\n const numberOfFilledStars = Math.floor(wireframe.value)\n const numberOfHalfStars = wireframe.value - numberOfFilledStars > 0 ? 1 : 0\n const numberOfEmptyStars = wireframe.max - numberOfFilledStars - numberOfHalfStars\n\n const filledStars = Array(numberOfFilledStars)\n .fill(undefined)\n .map(() => filledStar(context))\n const halfStars = Array(numberOfHalfStars)\n .fill(undefined)\n .map(() => halfStar(context))\n const emptyStars = Array(numberOfEmptyStars)\n .fill(undefined)\n .map(() => emptyStar(context))\n\n const ratingBarId = context.idSequence.next().value\n const ratingBar = {\n type: NodeType.Element,\n tagName: 'div',\n id: ratingBarId,\n attributes: {\n style: asStyleString([\n makeColorStyles(wireframe),\n 'position: relative',\n 'display: flex',\n 'flex-direction: row',\n 'padding: 2px 4px',\n ]),\n 'data-rrweb-id': ratingBarId,\n },\n childNodes: [...filledStars, ...halfStars, ...emptyStars],\n } as serializedNodeWithId\n\n return {\n result: {\n type: NodeType.Element,\n tagName: 'div',\n attributes: {\n style: makeStylesString(wireframe),\n 'data-rrweb-id': wireframe.id,\n },\n id: wireframe.id,\n childNodes: [ratingBar, ...children],\n },\n context,\n }\n}\n\nfunction makeProgressElement(\n wireframe: wireframeProgress,\n children: serializedNodeWithId[],\n context: ConversionContext\n): ConversionResult | null {\n if (wireframe.style?.bar === 'circular') {\n // value needs to be expressed as a number between 0 and 100\n const max = wireframe.max || 1\n let value = wireframe.value || null\n if (_isPositiveInteger(value) && value <= max) {\n value = (value / max) * 100\n } else {\n value = null\n }\n\n const styleOverride = {\n color: wireframe.style?.color || FOREGROUND,\n backgroundColor: wireframe.style?.backgroundColor || BACKGROUND,\n }\n\n // if not _isPositiveInteger(value) then we render a spinner,\n // so we need to add a style element with the spin keyframe\n const stylingChildren: serializedNodeWithId[] = _isPositiveInteger(value)\n ? []\n : [\n {\n type: NodeType.Element,\n tagName: 'style',\n attributes: {\n type: 'text/css',\n },\n id: context.idSequence.next().value,\n childNodes: [\n {\n type: NodeType.Text,\n textContent: `@keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }`,\n id: context.idSequence.next().value,\n },\n ],\n },\n ]\n\n const wrappingDivId = context.idSequence.next().value\n return {\n result: {\n type: NodeType.Element,\n tagName: 'div',\n attributes: {\n style: makeMinimalStyles(wireframe),\n 'data-rrweb-id': wireframe.id,\n },\n id: wireframe.id,\n childNodes: [\n {\n type: NodeType.Element,\n tagName: 'div',\n attributes: {\n // with no provided value we render a spinner\n style: _isPositiveInteger(value)\n ? makeDeterminateProgressStyles(wireframe, styleOverride)\n : makeIndeterminateProgressStyles(wireframe, styleOverride),\n 'data-rrweb-id': wrappingDivId,\n },\n id: wrappingDivId,\n childNodes: stylingChildren,\n },\n ...children,\n ],\n },\n context,\n }\n } else if (wireframe.style?.bar === 'rating') {\n return makeRatingBar(wireframe, children, context)\n }\n return {\n result: {\n type: NodeType.Element,\n tagName: 'progress',\n attributes: inputAttributes(wireframe),\n id: wireframe.id,\n childNodes: children,\n },\n context,\n }\n}\n\nfunction makeToggleParts(wireframe: wireframeToggle, context: ConversionContext): serializedNodeWithId[] {\n const togglePosition = wireframe.checked ? 'right' : 'left'\n const defaultColor = wireframe.checked ? '#1d4aff' : BACKGROUND\n const sliderPartId = context.idSequence.next().value\n const handlePartId = context.idSequence.next().value\n return [\n {\n type: NodeType.Element,\n tagName: 'div',\n attributes: {\n 'data-toggle-part': 'slider',\n style: asStyleString([\n 'position:absolute',\n 'top:33%',\n 'left:5%',\n 'display:inline-block',\n 'width:75%',\n 'height:33%',\n 'opacity: 0.2',\n 'border-radius:7.5%',\n `background-color:${wireframe.style?.color || defaultColor}`,\n ]),\n 'data-rrweb-id': sliderPartId,\n },\n id: sliderPartId,\n childNodes: [],\n },\n {\n type: NodeType.Element,\n tagName: 'div',\n attributes: {\n 'data-toggle-part': 'handle',\n style: asStyleString([\n 'position:absolute',\n 'top:1.5%',\n `${togglePosition}:5%`,\n 'display:flex',\n 'align-items:center',\n 'justify-content:center',\n 'width:40%',\n 'height:75%',\n 'cursor:inherit',\n 'border-radius:50%',\n `background-color:${wireframe.style?.color || defaultColor}`,\n `border:2px solid ${wireframe.style?.borderColor || wireframe.style?.color || defaultColor}`,\n ]),\n 'data-rrweb-id': handlePartId,\n },\n id: handlePartId,\n childNodes: [],\n },\n ]\n}\n\nfunction makeToggleElement(\n wireframe: wireframeToggle,\n context: ConversionContext\n): ConversionResult<\n elementNode & {\n id: number\n }\n> | null {\n const isLabelled = 'label' in wireframe\n const wrappingDivId = context.idSequence.next().value\n return {\n result: {\n type: NodeType.Element,\n tagName: 'div',\n attributes: {\n // if labelled take up available space, otherwise use provided positioning\n style: isLabelled ? asStyleString(['height:100%', 'flex:1']) : makePositionStyles(wireframe),\n 'data-rrweb-id': wireframe.id,\n },\n id: wireframe.id,\n childNodes: [\n {\n type: NodeType.Element,\n tagName: 'div',\n attributes: {\n // relative position, fills parent\n style: asStyleString(['position:relative', 'width:100%', 'height:100%']),\n 'data-rrweb-id': wrappingDivId,\n },\n id: wrappingDivId,\n childNodes: makeToggleParts(wireframe, context),\n },\n ],\n },\n context,\n }\n}\n\nfunction makeLabelledInput(\n wireframe: wireframeCheckBox | wireframeRadio | wireframeToggle,\n theInputElement: serializedNodeWithId,\n context: ConversionContext\n): ConversionResult {\n const theLabel: serializedNodeWithId = {\n type: NodeType.Text,\n textContent: wireframe.label || '',\n id: context.idSequence.next().value,\n }\n\n const orderedChildren = wireframe.inputType === 'toggle' ? [theLabel, theInputElement] : [theInputElement, theLabel]\n\n const labelId = context.idSequence.next().value\n return {\n result: {\n type: NodeType.Element,\n tagName: 'label',\n attributes: {\n style: makeStylesString(wireframe),\n 'data-rrweb-id': labelId,\n },\n id: labelId,\n childNodes: orderedChildren,\n },\n context,\n }\n}\n\nfunction makeInputElement(\n wireframe: wireframeInputComponent,\n children: serializedNodeWithId[],\n context: ConversionContext\n): ConversionResult | null {\n if (!wireframe.inputType) {\n return null\n }\n\n if (wireframe.inputType === 'button') {\n return makeButtonElement(wireframe, children, context)\n }\n\n if (wireframe.inputType === 'select') {\n return makeSelectElement(wireframe, children, context)\n }\n\n if (wireframe.inputType === 'progress') {\n return makeProgressElement(wireframe, children, context)\n }\n\n const theInputElement: ConversionResult | null =\n wireframe.inputType === 'toggle'\n ? makeToggleElement(wireframe, context)\n : {\n result: {\n type: NodeType.Element,\n tagName: 'input',\n attributes: inputAttributes(wireframe),\n id: wireframe.id,\n childNodes: children,\n },\n context,\n }\n\n if (!theInputElement) {\n return null\n }\n\n if ('label' in wireframe) {\n return makeLabelledInput(wireframe, theInputElement.result, theInputElement.context)\n }\n // when labelled no styles are needed, when un-labelled as here - we add the styling in.\n ;(theInputElement.result as elementNode).attributes.style = makeStylesString(wireframe)\n return theInputElement\n}\n\nfunction makeRectangleElement(\n wireframe: wireframeRectangle,\n children: serializedNodeWithId[],\n context: ConversionContext\n): ConversionResult | null {\n return {\n result: {\n type: NodeType.Element,\n tagName: 'div',\n attributes: {\n style: makeStylesString(wireframe),\n 'data-rrweb-id': wireframe.id,\n },\n id: wireframe.id,\n childNodes: children,\n },\n context,\n }\n}\n\nfunction chooseConverter(\n wireframe: T\n): (\n wireframe: T,\n children: serializedNodeWithId[],\n context: ConversionContext\n) => ConversionResult | null {\n // in theory type is always present\n // but since this is coming over the wire we can't really be sure,\n // and so we default to div\n const converterType: MobileNodeType = wireframe.type || 'div'\n const converterMapping: Record<\n MobileNodeType,\n (wireframe: T, children: serializedNodeWithId[]) => ConversionResult | null\n > = {\n // KLUDGE: TS can't tell that the wireframe type of each function is safe based on the converter type\n text: makeTextElement as any,\n image: makeImageElement as any,\n rectangle: makeRectangleElement as any,\n div: makeDivElement as any,\n input: makeInputElement as any,\n radio_group: makeRadioGroupElement as any,\n web_view: makeWebViewElement as any,\n placeholder: makePlaceholderElement as any,\n status_bar: makeStatusBar as any,\n navigation_bar: makeNavigationBar as any,\n screenshot: makeImageElement as any,\n }\n return converterMapping[converterType]\n}\n\nfunction convertWireframe(\n wireframe: wireframe,\n context: ConversionContext\n): ConversionResult | null {\n const children = convertWireframesFor(wireframe.childWireframes, context)\n const converted = chooseConverter(wireframe)?.(wireframe, children.result, children.context)\n return converted || null\n}\n\nfunction convertWireframesFor(\n wireframes: wireframe[] | undefined,\n context: ConversionContext\n): ConversionResult {\n if (!wireframes) {\n return { result: [], context }\n }\n\n const result: serializedNodeWithId[] = []\n for (const wireframe of wireframes) {\n const converted = convertWireframe(wireframe, context)\n if (converted) {\n result.push(converted.result)\n context = converted.context\n }\n }\n return { result, context }\n}\n\nfunction isMobileIncrementalSnapshotEvent(x: unknown): x is MobileIncrementalSnapshotEvent {\n const isIncrementalSnapshot = isObject(x) && 'type' in x && x.type === EventType.IncrementalSnapshot\n if (!isIncrementalSnapshot) {\n return false\n }\n const hasData = isObject(x) && 'data' in x\n const data = hasData ? x.data : null\n\n const hasMutationSource = isObject(data) && 'source' in data && data.source === IncrementalSource.Mutation\n\n const adds = isObject(data) && 'adds' in data && Array.isArray(data.adds) ? data.adds : null\n const updates = isObject(data) && 'updates' in data && Array.isArray(data.updates) ? data.updates : null\n\n const hasUpdatedWireframe = !!updates && updates.length > 0 && isObject(updates[0]) && 'wireframe' in updates[0]\n const hasAddedWireframe = !!adds && adds.length > 0 && isObject(adds[0]) && 'wireframe' in adds[0]\n\n return hasMutationSource && (hasAddedWireframe || hasUpdatedWireframe)\n}\n\nfunction chooseParentId(nodeType: MobileNodeType, providedParentId: number): number {\n return nodeType === 'screenshot' ? BODY_ID : providedParentId\n}\n\nfunction makeIncrementalAdd(add: MobileNodeMutation, context: ConversionContext): addedNodeMutation[] | null {\n const converted = convertWireframe(add.wireframe, context)\n\n if (!converted) {\n return null\n }\n\n const addition: addedNodeMutation = {\n parentId: chooseParentId(add.wireframe.type, add.parentId),\n nextId: null,\n node: converted.result,\n }\n const adds: addedNodeMutation[] = []\n if (addition) {\n const flattened = flattenMutationAdds(addition)\n flattened.forEach((x) => adds.push(x))\n return adds\n }\n return null\n}\n\n/**\n * When processing an update we remove the entire item, and then add it back in.\n */\nfunction makeIncrementalRemoveForUpdate(update: MobileNodeMutation): removedNodeMutation {\n return {\n parentId: chooseParentId(update.wireframe.type, update.parentId),\n id: update.wireframe.id,\n }\n}\n\nfunction isNode(x: unknown): x is serializedNodeWithId {\n // KLUDGE: really we should check that x.type is valid, but we're safe enough already\n return isObject(x) && 'type' in x && 'id' in x\n}\n\nfunction isNodeWithChildren(x: unknown): x is elementNode | documentNode {\n return isNode(x) && 'childNodes' in x && Array.isArray(x.childNodes)\n}\n\n/**\n * when creating incremental adds we have to flatten the node tree structure\n * there's no point, then keeping those child nodes in place\n */\nfunction cloneWithoutChildren(converted: addedNodeMutation): addedNodeMutation {\n const cloned = { ...converted }\n const clonedNode: serializedNodeWithId = { ...converted.node }\n if (isNodeWithChildren(clonedNode)) {\n clonedNode.childNodes = []\n }\n cloned.node = clonedNode\n return cloned\n}\n\nfunction flattenMutationAdds(converted: addedNodeMutation): addedNodeMutation[] {\n const flattened: addedNodeMutation[] = []\n\n flattened.push(cloneWithoutChildren(converted))\n\n const node: unknown = converted.node\n const newParentId = converted.node.id\n if (isNodeWithChildren(node)) {\n node.childNodes.forEach((child) => {\n flattened.push(\n cloneWithoutChildren({\n parentId: newParentId,\n nextId: null,\n node: child,\n })\n )\n if (isNodeWithChildren(child)) {\n flattened.push(...flattenMutationAdds({ parentId: newParentId, nextId: null, node: child }))\n }\n })\n }\n return flattened\n}\n\n/**\n * each update wireframe carries the entire tree because we don't want to diff on the client\n * that means that we might create multiple mutations for the same node\n * we only want to add it once, so we dedupe the mutations\n * the app guarantees that for a given ID that is present more than once in a single snapshot\n * every instance of that ID is identical\n * it might change in the next snapshot but for a single incremental snapshot there is one\n * and only one version of any given ID\n */\nfunction dedupeMutations(mutations: T[]): T[] {\n // KLUDGE: it's slightly yucky to stringify everything but since synthetic nodes\n // introduce a new id, we can't just compare the id\n const seen = new Set()\n\n // in case later mutations are the ones we want to keep, we reverse the array\n // this does help with the deduping, so, it's likely that the view for a single ID\n // is not consistent over a snapshot, but it's cheap to reverse so :YOLO:\n return mutations\n .reverse()\n .filter((mutation: addedNodeMutation | removedNodeMutation) => {\n let toCompare: string\n if (isRemovedNodeMutation(mutation)) {\n toCompare = JSON.stringify(mutation)\n } else {\n // if this is a synthetic addition, then we need to ignore the id,\n // since duplicates won't have duplicate ids\n toCompare = JSON.stringify({\n ...mutation.node,\n id: 0,\n })\n }\n\n if (seen.has(toCompare)) {\n return false\n }\n seen.add(toCompare)\n return true\n })\n .reverse()\n}\n\n/**\n * We want to ensure that any events don't use id = 0.\n * They must always represent a valid ID from the dom, so we swap in the body id when the id = 0.\n *\n * For \"removes\", we don't need to do anything, the id of the element to be removed remains valid. We won't try and remove other elements that we added during transformation in order to show that element.\n *\n * \"adds\" are converted from wireframes to nodes and converted to `incrementalSnapshotEvent.adds`\n *\n * \"updates\" are converted to a remove and an add.\n *\n */\nexport const makeIncrementalEvent = (\n mobileEvent: (MobileIncrementalSnapshotEvent | incrementalSnapshotEvent) & {\n timestamp: number\n delay?: number\n }\n): incrementalSnapshotEvent & {\n timestamp: number\n delay?: number\n} => {\n const converted = mobileEvent as unknown as incrementalSnapshotEvent & {\n timestamp: number\n delay?: number\n }\n if ('id' in converted.data && converted.data.id === 0) {\n converted.data.id = BODY_ID\n }\n\n if (isMobileIncrementalSnapshotEvent(mobileEvent)) {\n const adds: addedNodeMutation[] = []\n const removes: removedNodeMutation[] = mobileEvent.data.removes || []\n if ('adds' in mobileEvent.data && Array.isArray(mobileEvent.data.adds)) {\n const addsContext = {\n timestamp: mobileEvent.timestamp,\n idSequence: globalIdSequence,\n }\n\n mobileEvent.data.adds.forEach((add) => {\n makeIncrementalAdd(add, addsContext)?.forEach((x) => adds.push(x))\n })\n }\n if ('updates' in mobileEvent.data && Array.isArray(mobileEvent.data.updates)) {\n const updatesContext = {\n timestamp: mobileEvent.timestamp,\n idSequence: globalIdSequence,\n }\n const updateAdditions: addedNodeMutation[] = []\n mobileEvent.data.updates.forEach((update) => {\n const removal = makeIncrementalRemoveForUpdate(update)\n if (removal) {\n removes.push(removal)\n }\n makeIncrementalAdd(update, updatesContext)?.forEach((x) => updateAdditions.push(x))\n })\n dedupeMutations(updateAdditions).forEach((x) => adds.push(x))\n }\n\n converted.data = {\n source: IncrementalSource.Mutation,\n attributes: [],\n texts: [],\n adds: dedupeMutations(adds),\n // TODO: this assumes that removes are processed before adds 🤞\n removes: dedupeMutations(removes),\n }\n }\n\n return converted\n}\n\nfunction makeKeyboardParent(): serializedNodeWithId {\n return {\n type: NodeType.Element,\n tagName: 'div',\n attributes: {\n 'data-render-reason': 'a fixed placeholder to contain the keyboard in the correct stacking position',\n 'data-rrweb-id': KEYBOARD_PARENT_ID,\n },\n id: KEYBOARD_PARENT_ID,\n childNodes: [],\n }\n}\n\nfunction makeStatusBarNode(\n statusBar: wireframeStatusBar | undefined,\n context: ConversionContext\n): serializedNodeWithId {\n const childNodes = statusBar ? convertWireframesFor([statusBar], context).result : []\n return {\n type: NodeType.Element,\n tagName: 'div',\n attributes: {\n 'data-rrweb-id': STATUS_BAR_PARENT_ID,\n },\n id: STATUS_BAR_PARENT_ID,\n childNodes,\n }\n}\n\nfunction makeNavBarNode(\n navigationBar: wireframeNavigationBar | undefined,\n context: ConversionContext\n): serializedNodeWithId {\n const childNodes = navigationBar ? convertWireframesFor([navigationBar], context).result : []\n return {\n type: NodeType.Element,\n tagName: 'div',\n attributes: {\n 'data-rrweb-id': NAVIGATION_BAR_PARENT_ID,\n },\n id: NAVIGATION_BAR_PARENT_ID,\n childNodes,\n }\n}\n\nfunction stripBarsFromWireframe(wireframe: wireframe): {\n wireframe: wireframe | undefined\n statusBar: wireframeStatusBar | undefined\n navBar: wireframeNavigationBar | undefined\n} {\n if (wireframe.type === 'status_bar') {\n return { wireframe: undefined, statusBar: wireframe, navBar: undefined }\n } else if (wireframe.type === 'navigation_bar') {\n return { wireframe: undefined, statusBar: undefined, navBar: wireframe }\n }\n let statusBar: wireframeStatusBar | undefined\n let navBar: wireframeNavigationBar | undefined\n const wireframeToReturn: wireframe | undefined = { ...wireframe }\n wireframeToReturn.childWireframes = []\n for (const child of wireframe.childWireframes || []) {\n const {\n wireframe: childWireframe,\n statusBar: childStatusBar,\n navBar: childNavBar,\n } = stripBarsFromWireframe(child)\n statusBar = statusBar || childStatusBar\n navBar = navBar || childNavBar\n if (childWireframe) {\n wireframeToReturn.childWireframes.push(childWireframe)\n }\n }\n return { wireframe: wireframeToReturn, statusBar, navBar }\n}\n\n/**\n * We want to be able to place the status bar and navigation bar in the correct stacking order.\n * So, we lift them out of the tree, and return them separately.\n */\nexport function stripBarsFromWireframes(wireframes: wireframe[]): {\n statusBar: wireframeStatusBar | undefined\n navigationBar: wireframeNavigationBar | undefined\n appNodes: wireframe[]\n} {\n let statusBar: wireframeStatusBar | undefined\n let navigationBar: wireframeNavigationBar | undefined\n const copiedNodes: wireframe[] = []\n\n wireframes.forEach((w) => {\n const matches = stripBarsFromWireframe(w)\n if (matches.statusBar) {\n statusBar = matches.statusBar\n }\n if (matches.navBar) {\n navigationBar = matches.navBar\n }\n if (matches.wireframe) {\n copiedNodes.push(matches.wireframe)\n }\n })\n return { statusBar, navigationBar, appNodes: copiedNodes }\n}\n\nexport const makeFullEvent = (\n mobileEvent: MobileFullSnapshotEvent & {\n timestamp: number\n delay?: number\n }\n): fullSnapshotEvent & {\n timestamp: number\n delay?: number\n} => {\n // we can restart the id sequence on each full snapshot\n globalIdSequence = ids()\n\n if (!('wireframes' in mobileEvent.data)) {\n return mobileEvent as unknown as fullSnapshotEvent & {\n timestamp: number\n delay?: number\n }\n }\n\n const conversionContext = {\n timestamp: mobileEvent.timestamp,\n idSequence: globalIdSequence,\n }\n\n const { statusBar, navigationBar, appNodes } = stripBarsFromWireframes(mobileEvent.data.wireframes)\n\n const nodeGroups = {\n appNodes: convertWireframesFor(appNodes, conversionContext).result || [],\n statusBarNode: makeStatusBarNode(statusBar, conversionContext),\n navBarNode: makeNavBarNode(navigationBar, conversionContext),\n }\n\n return {\n type: EventType.FullSnapshot,\n timestamp: mobileEvent.timestamp,\n data: {\n node: {\n type: NodeType.Document,\n childNodes: [\n {\n type: NodeType.DocumentType,\n name: 'html',\n publicId: '',\n systemId: '',\n id: HTML_DOC_TYPE_ID,\n },\n {\n type: NodeType.Element,\n tagName: 'html',\n attributes: { style: makeHTMLStyles(), 'data-rrweb-id': HTML_ELEMENT_ID },\n id: HTML_ELEMENT_ID,\n childNodes: [\n {\n type: NodeType.Element,\n tagName: 'head',\n attributes: { 'data-rrweb-id': HEAD_ID },\n id: HEAD_ID,\n childNodes: [makeCSSReset(conversionContext)],\n },\n {\n type: NodeType.Element,\n tagName: 'body',\n attributes: { style: makeBodyStyles(), 'data-rrweb-id': BODY_ID },\n id: BODY_ID,\n childNodes: [\n // in the order they should stack if they ever clash\n // lower is higher in the stacking context\n ...nodeGroups.appNodes,\n makeKeyboardParent(),\n nodeGroups.navBarNode,\n nodeGroups.statusBarNode,\n ],\n },\n ],\n },\n ],\n id: DOCUMENT_ID,\n },\n initialOffset: {\n top: 0,\n left: 0,\n },\n },\n }\n}\n\nfunction makeCSSReset(context: ConversionContext): serializedNodeWithId {\n // we need to normalize CSS so browsers don't do unexpected things\n return {\n type: NodeType.Element,\n tagName: 'style',\n attributes: {\n type: 'text/css',\n },\n id: context.idSequence.next().value,\n childNodes: [\n {\n type: NodeType.Text,\n textContent: `\n body {\n margin: unset;\n }\n input, button, select, textarea {\n font: inherit;\n margin: 0;\n padding: 0;\n border: 0;\n outline: 0;\n background: transparent;\n padding-block: 0 !important;\n }\n .input:focus {\n outline: none;\n }\n img {\n border-style: none;\n }\n `,\n id: context.idSequence.next().value,\n },\n ],\n }\n}\n","import posthogEE from '@posthog/ee/exports'\nimport { customEvent, EventType, eventWithTime, fullSnapshotEvent, IncrementalSource } from '@rrweb/types'\nimport { captureException } from '@sentry/react'\nimport { gunzipSync, strFromU8, strToU8 } from 'fflate'\nimport {\n actions,\n afterMount,\n beforeUnmount,\n connect,\n defaults,\n kea,\n key,\n listeners,\n path,\n props,\n reducers,\n selectors,\n} from 'kea'\nimport { loaders } from 'kea-loaders'\nimport { subscriptions } from 'kea-subscriptions'\nimport api from 'lib/api'\nimport { FEATURE_FLAGS } from 'lib/constants'\nimport { Dayjs, dayjs } from 'lib/dayjs'\nimport { featureFlagLogic, FeatureFlagsSet } from 'lib/logic/featureFlagLogic'\nimport { isObject } from 'lib/utils'\nimport { chainToElements } from 'lib/utils/elements-chain'\nimport { eventUsageLogic } from 'lib/utils/eventUsageLogic'\nimport posthog from 'posthog-js'\nimport { compressedEventWithTime } from 'posthog-js/lib/src/extensions/replay/sessionrecording'\nimport { RecordingComment } from 'scenes/session-recordings/player/inspector/playerInspectorLogic'\nimport { teamLogic } from 'scenes/teamLogic'\n\nimport { HogQLQuery, NodeKind } from '~/queries/schema'\nimport { hogql } from '~/queries/utils'\nimport {\n AnyPropertyFilter,\n EncodedRecordingSnapshot,\n PersonType,\n PropertyFilterType,\n PropertyOperator,\n RecordingEventsFilters,\n RecordingEventType,\n RecordingReportLoadTimes,\n RecordingSegment,\n RecordingSnapshot,\n SessionPlayerData,\n SessionRecordingId,\n SessionRecordingSnapshotParams,\n SessionRecordingSnapshotSource,\n SessionRecordingSnapshotSourceResponse,\n SessionRecordingType,\n SessionRecordingUsageType,\n SnapshotSourceType,\n} from '~/types'\n\nimport { PostHogEE } from '../../../../@posthog/ee/types'\nimport { ExportedSessionRecordingFileV2 } from '../file-playback/types'\nimport type { sessionRecordingDataLogicType } from './sessionRecordingDataLogicType'\nimport { createSegments, mapSnapshotsToWindowId } from './utils/segmenter'\n\nconst IS_TEST_MODE = process.env.NODE_ENV === 'test'\nconst BUFFER_MS = 60000 // +- before and after start and end of a recording to query for.\nconst DEFAULT_REALTIME_POLLING_MILLIS = 3000\n\nlet postHogEEModule: PostHogEE\n\nfunction isRecordingSnapshot(x: unknown): x is RecordingSnapshot {\n return typeof x === 'object' && x !== null && 'type' in x && 'timestamp' in x\n}\n\n/*\n there was a bug in mobile SDK that didn't consistently send a meta event with a full snapshot.\n rrweb player hides itself until it has seen the meta event 🤷\n but we can patch a meta event into the recording data to make it work\n*/\nfunction patchMetaEventIntoMobileData(parsedLines: RecordingSnapshot[]): RecordingSnapshot[] {\n let fullSnapshotIndex: number = -1\n let metaIndex: number = -1\n try {\n fullSnapshotIndex = parsedLines.findIndex((l) => l.type === EventType.FullSnapshot)\n metaIndex = parsedLines.findIndex((l) => l.type === EventType.Meta)\n\n // then we need to patch the meta event into the snapshot data\n if (fullSnapshotIndex > -1 && metaIndex === -1) {\n const fullSnapshot = parsedLines[fullSnapshotIndex] as RecordingSnapshot & fullSnapshotEvent & eventWithTime\n // a full snapshot (particularly from the mobile transformer) has a relatively fixed structure,\n // but the types exposed by rrweb don't quite cover what we need , so...\n const mainNode = fullSnapshot.data.node as any\n const targetNode = mainNode.childNodes[1].childNodes[1].childNodes[0]\n const { width, height } = targetNode.attributes\n const metaEvent: RecordingSnapshot = {\n windowId: fullSnapshot.windowId,\n type: EventType.Meta,\n timestamp: fullSnapshot.timestamp,\n data: {\n href: getHrefFromSnapshot(fullSnapshot) || '',\n width,\n height,\n },\n }\n parsedLines.splice(fullSnapshotIndex, 0, metaEvent)\n }\n } catch (e) {\n captureException(e, {\n tags: { feature: 'session-recording-missing-meta-patching' },\n extra: { fullSnapshotIndex, metaIndex },\n })\n }\n\n return parsedLines\n}\n\nfunction hasAnyWireframes(snapshotData: Record[]): boolean {\n return snapshotData.some((d) => {\n return isObject(d.data) && 'wireframes' in d.data\n })\n}\n\nfunction isCompressedEvent(ev: unknown): ev is compressedEventWithTime {\n return typeof ev === 'object' && ev !== null && 'cv' in ev\n}\n\nfunction unzip(compressedStr: string): any {\n return JSON.parse(strFromU8(gunzipSync(strToU8(compressedStr, true))))\n}\n\n/**\n *\n * takes an event that might be from web, might be from mobile,\n * and might be partially compressed,\n * and decompresses it when possible\n *\n * you can't return a union of `KnownType | unknown`\n * so even though this returns `eventWithTime | unknown`\n * it has to be typed as only unknown\n */\nfunction decompressEvent(ev: unknown): unknown {\n try {\n if (isCompressedEvent(ev)) {\n if (ev.cv === '2024-10') {\n if (ev.type === EventType.FullSnapshot) {\n return {\n ...ev,\n data: unzip(ev.data),\n }\n } else if (ev.type === EventType.IncrementalSnapshot) {\n if (ev.data.source === IncrementalSource.StyleSheetRule) {\n return {\n ...ev,\n data: {\n ...ev.data,\n source: IncrementalSource.StyleSheetRule,\n adds: unzip(ev.data.adds),\n removes: unzip(ev.data.removes),\n },\n }\n } else if (ev.data.source === IncrementalSource.Mutation) {\n return {\n ...ev,\n data: {\n ...ev.data,\n source: IncrementalSource.Mutation,\n adds: unzip(ev.data.adds),\n removes: unzip(ev.data.removes),\n texts: unzip(ev.data.texts),\n attributes: unzip(ev.data.attributes),\n },\n }\n }\n }\n } else {\n posthog.captureException(new Error('Unknown compressed event version'), {\n feature: 'session-recording-compressed-event-decompression',\n compressedEvent: ev,\n compressionVersion: ev.cv,\n })\n // probably unplayable but we don't know how to decompress it\n return ev\n }\n }\n return ev\n } catch (e) {\n posthog.captureException((e as Error) || new Error('Could not decompress event'), {\n feature: 'session-recording-compressed-event-decompression',\n compressedEvent: ev,\n })\n return ev\n }\n}\n\n/**\n * We can receive data in one of multiple formats, so we treat it as unknown\n * And if we can't process it force it into eventWithTime\n *\n * If it can't be case as eventWithTime by this point then it's probably not a valid event anyway\n */\nfunction coerceToEventWithTime(d: unknown, withMobileTransformer: boolean): eventWithTime {\n // we decompress first so that we could support partial compression on mobile in future\n const currentEvent = decompressEvent(d)\n return withMobileTransformer\n ? postHogEEModule?.mobileReplay?.transformEventToWeb(currentEvent) || (currentEvent as eventWithTime)\n : (currentEvent as eventWithTime)\n}\n\nexport const parseEncodedSnapshots = async (\n items: (RecordingSnapshot | EncodedRecordingSnapshot | string)[],\n sessionId: string,\n // this is only kept so that we can export the untransformed data for debugging\n withMobileTransformer: boolean = true\n): Promise => {\n if (!postHogEEModule) {\n postHogEEModule = await posthogEE()\n }\n\n const lineCount = items.length\n const unparseableLines: string[] = []\n let isMobileSnapshots = false\n\n const parsedLines: RecordingSnapshot[] = items.flatMap((l) => {\n if (!l) {\n // blob files have an empty line at the end\n return []\n }\n try {\n const snapshotLine = typeof l === 'string' ? (JSON.parse(l) as EncodedRecordingSnapshot) : l\n const snapshotData = isRecordingSnapshot(snapshotLine) ? [snapshotLine] : snapshotLine['data']\n\n if (!isMobileSnapshots) {\n isMobileSnapshots = hasAnyWireframes(snapshotData)\n }\n\n return snapshotData.map((d: unknown) => {\n const snap = coerceToEventWithTime(d, withMobileTransformer)\n\n return {\n // this handles parsing data that was loaded from blob storage \"window_id\"\n // and data that was exported from the front-end \"windowId\"\n // we have more than one format of data that we store/pass around\n // but only one that we play back\n windowId: snapshotLine['window_id'] || snapshotLine['windowId'],\n ...snap,\n }\n })\n } catch (e) {\n if (typeof l === 'string') {\n unparseableLines.push(l)\n }\n return []\n }\n })\n\n if (unparseableLines.length) {\n const extra = {\n playbackSessionId: sessionId,\n totalLineCount: lineCount,\n unparseableLinesCount: unparseableLines.length,\n exampleLines: unparseableLines.slice(0, 3),\n }\n posthog.capture('session recording had unparseable lines', {\n ...extra,\n feature: 'session-recording-snapshot-processing',\n })\n }\n\n return isMobileSnapshots ? patchMetaEventIntoMobileData(parsedLines) : parsedLines\n}\n\nconst getHrefFromSnapshot = (snapshot: unknown): string | undefined => {\n return isObject(snapshot) && 'data' in snapshot\n ? (snapshot.data as any)?.href || (snapshot.data as any)?.payload?.href\n : undefined\n}\n\n/*\n cyrb53 (c) 2018 bryc (github.com/bryc)\n License: Public domain. Attribution appreciated.\n A fast and simple 53-bit string hash function with decent collision resistance.\n Largely inspired by MurmurHash2/3, but with a focus on speed/simplicity.\n*/\nconst cyrb53 = function (str: string, seed = 0): number {\n let h1 = 0xdeadbeef ^ seed,\n h2 = 0x41c6ce57 ^ seed\n for (let i = 0, ch; i < str.length; i++) {\n ch = str.charCodeAt(i)\n h1 = Math.imul(h1 ^ ch, 2654435761)\n h2 = Math.imul(h2 ^ ch, 1597334677)\n }\n h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507)\n h1 ^= Math.imul(h2 ^ (h2 >>> 13), 3266489909)\n h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507)\n h2 ^= Math.imul(h1 ^ (h1 >>> 13), 3266489909)\n return 4294967296 * (2097151 & h2) + (h1 >>> 0)\n}\n\nexport const deduplicateSnapshots = (snapshots: RecordingSnapshot[] | null): RecordingSnapshot[] => {\n const seenHashes: Set = new Set()\n\n return (snapshots ?? [])\n .filter((snapshot) => {\n // For a multitude of reasons, there can be duplicate snapshots in the same recording.\n // we have to stringify the snapshot to compare it to other snapshots.\n // so we can filter by storing them all in a set\n\n // we can see duplicates that only differ by delay - these still count as duplicates\n // even though the delay would hide that\n const { delay: _delay, ...delayFreeSnapshot } = snapshot\n // we check each item multiple times as new snapshots come in\n // so store the computer value on the object to save recalculating it so much\n const key = (snapshot as any).seen || cyrb53(JSON.stringify(delayFreeSnapshot))\n ;(snapshot as any).seen = key\n\n if (seenHashes.has(key)) {\n return false\n }\n seenHashes.add(key)\n return true\n })\n .sort((a, b) => a.timestamp - b.timestamp)\n}\n\nconst generateRecordingReportDurations = (cache: Record): RecordingReportLoadTimes => {\n return {\n metadata: cache.metadataLoadDuration || Math.round(performance.now() - cache.metaStartTime),\n snapshots: cache.snapshotsLoadDuration || Math.round(performance.now() - cache.snapshotsStartTime),\n events: cache.eventsLoadDuration || Math.round(performance.now() - cache.eventsStartTime),\n firstPaint: cache.firstPaintDuration,\n }\n}\n\nconst resetTimingsCache = (cache: Record): void => {\n cache.metaStartTime = null\n cache.metadataLoadDuration = null\n cache.snapshotsStartTime = null\n cache.snapshotsLoadDuration = null\n cache.eventsStartTime = null\n cache.eventsLoadDuration = null\n cache.firstPaintDuration = null\n}\n\nexport interface SessionRecordingDataLogicProps {\n sessionRecordingId: SessionRecordingId\n realTimePollingIntervalMilliseconds?: number\n}\n\nfunction makeEventsQuery(\n person: PersonType | null,\n distinctId: string | null,\n start: Dayjs,\n end: Dayjs,\n properties: AnyPropertyFilter[]\n): Promise {\n return api.query({\n kind: NodeKind.EventsQuery,\n // NOTE: Be careful adding fields here. We want to keep the payload as small as possible to load all events quickly\n select: [\n 'uuid',\n 'event',\n 'timestamp',\n 'elements_chain',\n 'properties.$window_id',\n 'properties.$current_url',\n 'properties.$event_type',\n ],\n orderBy: ['timestamp ASC'],\n limit: 1000000,\n personId: person ? String(person.id) : undefined,\n after: start.subtract(BUFFER_MS, 'ms').format(),\n before: end.add(BUFFER_MS, 'ms').format(),\n properties: properties,\n where: distinctId ? [`distinct_id = ('${distinctId}')`] : undefined,\n })\n}\n\nasync function processEncodedResponse(\n encodedResponse: (EncodedRecordingSnapshot | string)[],\n props: SessionRecordingDataLogicProps,\n featureFlags: FeatureFlagsSet\n): Promise<{ transformed: RecordingSnapshot[]; untransformed: RecordingSnapshot[] | null }> {\n let untransformed: RecordingSnapshot[] | null = null\n\n const transformed = await parseEncodedSnapshots(encodedResponse, props.sessionRecordingId)\n\n if (featureFlags[FEATURE_FLAGS.SESSION_REPLAY_EXPORT_MOBILE_DATA]) {\n untransformed = await parseEncodedSnapshots(\n encodedResponse,\n props.sessionRecordingId,\n false // don't transform mobile data\n )\n }\n\n return { transformed, untransformed }\n}\n\nconst getSourceKey = (source: SessionRecordingSnapshotSource): string => {\n // realtime sources vary so blob_key is not always present and is either null or undefined...\n // we only care about key when not realtime\n // and we'll always have a key when not realtime\n return `${source.source}-${source.blob_key || source.source}`\n}\n\nexport const sessionRecordingDataLogic = kea([\n path((key) => ['scenes', 'session-recordings', 'sessionRecordingDataLogic', key]),\n props({} as SessionRecordingDataLogicProps),\n key(({ sessionRecordingId }) => sessionRecordingId || 'no-session-recording-id'),\n connect({\n logic: [eventUsageLogic],\n values: [featureFlagLogic, ['featureFlags'], teamLogic, ['currentTeam']],\n }),\n defaults({\n sessionPlayerMetaData: null as SessionRecordingType | null,\n }),\n actions({\n setFilters: (filters: Partial) => ({ filters }),\n loadRecordingMeta: true,\n loadRecordingComments: true,\n maybeLoadRecordingMeta: true,\n loadSnapshots: true,\n loadSnapshotSources: true,\n loadNextSnapshotSource: true,\n loadSnapshotsForSource: (source: Pick) => ({ source }),\n loadEvents: true,\n loadFullEventData: (event: RecordingEventType | RecordingEventType[]) => ({ event }),\n markViewed: (delay?: number) => ({ delay }),\n reportUsageIfFullyLoaded: true,\n persistRecording: true,\n maybePersistRecording: true,\n pollRealtimeSnapshots: true,\n stopRealtimePolling: true,\n setTrackedWindow: (windowId: string | null) => ({ windowId }),\n setWasMarkedViewed: (wasMarkedViewed: boolean) => ({ wasMarkedViewed }),\n }),\n reducers(() => ({\n trackedWindow: [\n null as string | null,\n {\n setTrackedWindow: (_, { windowId }) => windowId,\n },\n ],\n filters: [\n {} as Partial,\n {\n setFilters: (state, { filters }) => ({ ...state, ...filters }),\n },\n ],\n isRealtimePolling: [\n false as boolean,\n {\n pollRealtimeSnapshots: () => true,\n stopRealtimePolling: () => false,\n },\n ],\n isNotFound: [\n false as boolean,\n {\n loadRecordingMeta: () => false,\n loadRecordingMetaSuccess: () => false,\n loadRecordingMetaFailure: () => true,\n },\n ],\n snapshotsBySource: [\n null as Record | null,\n {\n loadSnapshotsForSourceSuccess: (state, { snapshotsForSource }) => {\n const sourceKey = getSourceKey(snapshotsForSource.source)\n\n return {\n ...state,\n [sourceKey]: snapshotsForSource,\n }\n },\n },\n ],\n wasMarkedViewed: [\n false as boolean,\n {\n setWasMarkedViewed: (_, { wasMarkedViewed }) => wasMarkedViewed,\n },\n ],\n })),\n loaders(({ values, props, cache }) => ({\n sessionComments: {\n loadRecordingComments: async (_, breakpoint) => {\n const empty: RecordingComment[] = []\n if (!props.sessionRecordingId) {\n return empty\n }\n\n const response = await api.notebooks.recordingComments(props.sessionRecordingId)\n breakpoint()\n\n return response.results || empty\n },\n },\n sessionPlayerMetaData: {\n loadRecordingMeta: async (_, breakpoint) => {\n if (!props.sessionRecordingId) {\n return null\n }\n\n cache.metaStartTime = performance.now()\n\n const response = await api.recordings.get(props.sessionRecordingId)\n breakpoint()\n\n return response\n },\n\n persistRecording: async (_, breakpoint) => {\n if (!values.sessionPlayerMetaData) {\n return null\n }\n await breakpoint(100)\n await api.recordings.persist(props.sessionRecordingId)\n\n return {\n ...values.sessionPlayerMetaData,\n storage: 'object_storage_lts',\n }\n },\n },\n snapshotSources: [\n null as SessionRecordingSnapshotSource[] | null,\n {\n loadSnapshotSources: async () => {\n const response = await api.recordings.listSnapshotSources(props.sessionRecordingId)\n return response.sources ?? []\n },\n },\n ],\n snapshotsForSource: [\n null as SessionRecordingSnapshotSourceResponse | null,\n {\n loadSnapshotsForSource: async ({ source }, breakpoint) => {\n let params: SessionRecordingSnapshotParams\n\n if (source.source === SnapshotSourceType.blob) {\n if (!source.blob_key) {\n throw new Error('Missing key')\n }\n params = { blob_key: source.blob_key, source: 'blob' }\n } else if (source.source === SnapshotSourceType.realtime) {\n params = { source: 'realtime', version: '2024-04-30' }\n } else {\n throw new Error(`Unsupported source: ${source.source}`)\n }\n\n const snapshotLoadingStartTime = performance.now()\n\n if (!cache.snapshotsStartTime) {\n cache.snapshotsStartTime = snapshotLoadingStartTime\n }\n\n await breakpoint(1)\n\n const response = await api.recordings.getSnapshots(props.sessionRecordingId, params).catch((e) => {\n if (source.source === 'realtime' && e.status === 404) {\n // Realtime source is not always available so a 404 is expected\n return []\n }\n throw e\n })\n\n const { transformed, untransformed } = await processEncodedResponse(\n response,\n props,\n values.featureFlags\n )\n\n return { snapshots: transformed, untransformed_snapshots: untransformed ?? undefined, source }\n },\n },\n ],\n sessionEventsData: [\n null as null | RecordingEventType[],\n {\n loadEvents: async () => {\n if (!cache.eventsStartTime) {\n cache.eventsStartTime = performance.now()\n }\n\n const { start, end, person } = values.sessionPlayerData\n\n if (!person || !start || !end) {\n return null\n }\n\n const [sessionEvents, relatedEvents]: any[] = await Promise.all([\n // make one query for all events that are part of the session\n makeEventsQuery(null, null, start, end, [\n {\n key: '$session_id',\n value: [props.sessionRecordingId],\n operator: PropertyOperator.Exact,\n type: PropertyFilterType.Event,\n },\n ]),\n // make a second for all events from that person,\n // not marked as part of the session\n // but in the same time range\n // these are probably e.g. backend events for the session\n // but with no session id\n // since posthog-js must always add session id we can also\n // take advantage of lib being materialized and further filter\n makeEventsQuery(null, values.sessionPlayerMetaData?.distinct_id || null, start, end, [\n {\n key: '$session_id',\n value: '',\n operator: PropertyOperator.Exact,\n type: PropertyFilterType.Event,\n },\n {\n key: '$lib',\n value: ['web'],\n operator: PropertyOperator.IsNot,\n type: PropertyFilterType.Event,\n },\n ]),\n ])\n\n return [...sessionEvents.results, ...relatedEvents.results].map(\n (event: any): RecordingEventType => {\n const currentUrl = event[5]\n // We use the pathname to simplify the UI - we build it here instead of fetching it to keep data usage small\n let pathname: string | undefined\n try {\n pathname = event[5] ? new URL(event[5]).pathname : undefined\n } catch {\n pathname = undefined\n }\n\n return {\n id: event[0],\n event: event[1],\n timestamp: event[2],\n elements: chainToElements(event[3]),\n properties: {\n $window_id: event[4],\n $current_url: currentUrl,\n $event_type: event[6],\n $pathname: pathname,\n },\n playerTime: +dayjs(event[2]) - +start,\n fullyLoaded: false,\n }\n }\n )\n },\n\n loadFullEventData: async ({ event }) => {\n // box so we're always dealing with a list\n const events = Array.isArray(event) ? event : [event]\n\n let existingEvents = values.sessionEventsData?.filter((x) => events.some((e) => e.id === x.id))\n\n const allEventsAreFullyLoaded =\n existingEvents?.every((e) => e.fullyLoaded) && existingEvents.length === events.length\n if (!existingEvents || allEventsAreFullyLoaded) {\n return values.sessionEventsData\n }\n\n existingEvents = existingEvents.filter((e) => !e.fullyLoaded)\n const timestamps = existingEvents.map((ee) => dayjs(ee.timestamp).utc().valueOf())\n const eventNames = Array.from(new Set(existingEvents.map((ee) => ee.event)))\n const eventIds = existingEvents.map((ee) => ee.id)\n const earliestTimestamp = timestamps.reduce((a, b) => Math.min(a, b))\n const latestTimestamp = timestamps.reduce((a, b) => Math.max(a, b))\n try {\n const query: HogQLQuery = {\n kind: NodeKind.HogQLQuery,\n query: hogql`SELECT properties, uuid\n FROM events\n WHERE timestamp > ${(earliestTimestamp - 1000) / 1000}\n AND timestamp < ${(latestTimestamp + 1000) / 1000}\n AND event in ${eventNames}\n AND uuid in ${eventIds}`,\n }\n const response = await api.query(query)\n if (response.error) {\n throw new Error(response.error)\n }\n\n for (const event of existingEvents) {\n const result = response.results.find((x: any) => {\n return x[1] === event.id\n })\n\n if (result) {\n event.properties = JSON.parse(result[0])\n event.fullyLoaded = true\n }\n }\n } catch (e) {\n // NOTE: This is not ideal but should happen so rarely that it is tolerable.\n existingEvents.forEach((e) => (e.fullyLoaded = true))\n captureException(e, {\n tags: { feature: 'session-recording-load-full-event-data' },\n })\n }\n\n // here we map the events list because we want the result to be a new instance to trigger downstream recalculation\n return !values.sessionEventsData\n ? values.sessionEventsData\n : values.sessionEventsData.map((x) => {\n const event = existingEvents?.find((ee) => ee.id === x.id)\n return event\n ? ({\n ...x,\n properties: event.properties,\n fullyLoaded: event.fullyLoaded,\n } as RecordingEventType)\n : x\n })\n },\n },\n ],\n similarRecordings: [\n null as [string, number][] | null,\n {\n fetchSimilarRecordings: async () => {\n return await api.recordings.similarRecordings(props.sessionRecordingId)\n },\n },\n ],\n })),\n listeners(({ values, actions, cache, props }) => ({\n loadSnapshots: () => {\n // This kicks off the loading chain\n if (!values.snapshotSourcesLoading) {\n actions.loadSnapshotSources()\n }\n },\n maybeLoadRecordingMeta: () => {\n if (!values.sessionPlayerMetaDataLoading) {\n actions.loadRecordingMeta()\n }\n if (!values.sessionCommentsLoading) {\n actions.loadRecordingComments()\n }\n },\n loadSnapshotSources: () => {\n // We only load events once we actually start loading the recording\n actions.loadEvents()\n },\n loadRecordingMetaSuccess: () => {\n cache.metadataLoadDuration = Math.round(performance.now() - cache.metaStartTime)\n actions.reportUsageIfFullyLoaded()\n },\n loadRecordingMetaFailure: () => {\n cache.metadataLoadDuration = Math.round(performance.now() - cache.metaStartTime)\n },\n\n loadSnapshotSourcesSuccess: () => {\n // When we receive the list of sources we can kick off the loading chain\n actions.loadNextSnapshotSource()\n },\n\n loadSnapshotsForSourceSuccess: ({ snapshotsForSource }) => {\n const sources = values.snapshotSources\n const snapshots = snapshotsForSource.snapshots\n\n // Cache the last response count to detect if we're getting the same data over and over\n const newSnapshotsCount = snapshots.length\n\n if ((cache.lastSnapshotsCount ?? newSnapshotsCount) === newSnapshotsCount) {\n // if we're getting no results from realtime polling we can increment faster\n // so that we stop polling sooner\n const increment = newSnapshotsCount === 0 ? 2 : 1\n cache.lastSnapshotsUnchangedCount = (cache.lastSnapshotsUnchangedCount ?? 0) + increment\n } else {\n cache.lastSnapshotsUnchangedCount = 0\n }\n cache.lastSnapshotsCount = newSnapshotsCount\n\n if (!snapshots.length && sources?.length === 1) {\n // We got only a single source to load, loaded it successfully, but it had no snapshots.\n posthog.capture('recording_snapshots_v2_empty_response', {\n source: sources[0],\n })\n } else if (!cache.firstPaintDuration) {\n cache.firstPaintDuration = Math.round(performance.now() - cache.snapshotsStartTime)\n }\n if (!values.wasMarkedViewed) {\n actions.markViewed()\n }\n\n actions.loadNextSnapshotSource()\n },\n\n loadNextSnapshotSource: () => {\n const nextSourceToLoad = values.snapshotSources?.find((s) => {\n const sourceKey = getSourceKey(s)\n return !values.snapshotsBySource?.[sourceKey]\n })\n\n if (nextSourceToLoad) {\n return actions.loadSnapshotsForSource(nextSourceToLoad)\n }\n\n // TODO: Move this to a one time check - only report once per recording\n cache.snapshotsLoadDuration = Math.round(performance.now() - cache.snapshotsStartTime)\n actions.reportUsageIfFullyLoaded()\n\n // If we have a realtime source, start polling it\n const realTimeSource = values.snapshotSources?.find((s) => s.source === SnapshotSourceType.realtime)\n if (realTimeSource) {\n actions.pollRealtimeSnapshots()\n }\n },\n loadSnapshotsForSourceFailure: () => {\n cache.snapshotsLoadDuration = Math.round(performance.now() - cache.snapshotsStartTime)\n },\n pollRealtimeSnapshots: () => {\n // always make sure we've cleared up the last timeout\n clearTimeout(cache.realTimePollingTimeoutID)\n cache.realTimePollingTimeoutID = null\n\n // ten is an arbitrary limit to try to avoid sending requests to our backend unnecessarily\n // we could change this or add to it e.g. only poll if browser is visible to user\n if ((cache.lastSnapshotsUnchangedCount ?? 0) <= 10) {\n cache.realTimePollingTimeoutID = setTimeout(() => {\n actions.loadSnapshotsForSource({ source: SnapshotSourceType.realtime })\n }, props.realTimePollingIntervalMilliseconds || DEFAULT_REALTIME_POLLING_MILLIS)\n } else {\n actions.stopRealtimePolling()\n }\n },\n loadEventsSuccess: () => {\n cache.eventsLoadDuration = Math.round(performance.now() - cache.eventsStartTime)\n actions.reportUsageIfFullyLoaded()\n },\n loadEventsFailure: () => {\n cache.eventsLoadDuration = Math.round(performance.now() - cache.eventsStartTime)\n },\n reportUsageIfFullyLoaded: (_, breakpoint) => {\n breakpoint()\n if (values.fullyLoaded) {\n eventUsageLogic.actions.reportRecording(\n values.sessionPlayerData,\n generateRecordingReportDurations(cache),\n SessionRecordingUsageType.LOADED,\n values.sessionPlayerMetaData,\n 0\n )\n // Reset cache now that final usage report has been sent\n resetTimingsCache(cache)\n }\n },\n markViewed: async ({ delay }, breakpoint) => {\n const durations = generateRecordingReportDurations(cache)\n // Triggered on first paint\n breakpoint()\n if (values.wasMarkedViewed) {\n return\n }\n actions.setWasMarkedViewed(true) // this prevents us from calling the function multiple times\n\n await breakpoint(IS_TEST_MODE ? 1 : delay ?? 3000)\n await api.recordings.update(props.sessionRecordingId, {\n viewed: true,\n player_metadata: values.sessionPlayerMetaData,\n durations,\n })\n await breakpoint(IS_TEST_MODE ? 1 : 10000)\n await api.recordings.update(props.sessionRecordingId, {\n analyzed: true,\n player_metadata: values.sessionPlayerMetaData,\n durations,\n })\n },\n\n maybePersistRecording: () => {\n if (values.sessionPlayerMetaDataLoading) {\n return\n }\n\n if (values.sessionPlayerMetaData?.storage === 'object_storage') {\n actions.persistRecording()\n }\n },\n })),\n selectors(({ cache }) => ({\n webVitalsEvents: [\n (s) => [s.sessionEventsData],\n (sessionEventsData): RecordingEventType[] =>\n (sessionEventsData || []).filter((e) => e.event === '$web_vitals'),\n ],\n\n windowIdForTimestamp: [\n (s) => [s.segments],\n (segments) =>\n (timestamp: number): string | undefined => {\n return segments.find(\n (segment) => segment.startTimestamp <= timestamp && segment.endTimestamp >= timestamp\n )?.windowId\n },\n ],\n\n sessionPlayerData: [\n (s, p) => [\n s.sessionPlayerMetaData,\n s.snapshotsByWindowId,\n s.segments,\n s.bufferedToTime,\n s.start,\n s.end,\n s.durationMs,\n s.fullyLoaded,\n p.sessionRecordingId,\n ],\n (\n meta,\n snapshotsByWindowId,\n segments,\n bufferedToTime,\n start,\n end,\n durationMs,\n fullyLoaded,\n sessionRecordingId\n ): SessionPlayerData => ({\n person: meta?.person ?? null,\n start,\n end,\n durationMs,\n snapshotsByWindowId,\n segments,\n bufferedToTime,\n fullyLoaded,\n sessionRecordingId,\n }),\n ],\n\n snapshotsLoading: [\n (s) => [s.snapshotSourcesLoading, s.snapshotsForSourceLoading],\n (snapshotSourcesLoading, snapshotsForSourceLoading): boolean => {\n // if there's a realTimePollingTimeoutID, don't signal that we're loading\n // we don't want the UI to flip to \"loading\" every time we poll\n return !cache.realTimePollingTimeoutID && (snapshotSourcesLoading || snapshotsForSourceLoading)\n },\n ],\n\n snapshotsLoaded: [(s) => [s.snapshotSources], (snapshotSources): boolean => !!snapshotSources],\n\n fullyLoaded: [\n (s) => [s.snapshots, s.sessionPlayerMetaDataLoading, s.snapshotsLoading, s.sessionEventsDataLoading],\n (snapshots, sessionPlayerMetaDataLoading, snapshotsLoading, sessionEventsDataLoading): boolean => {\n // TODO: Do a proper check for all sources having been loaded\n return (\n !!snapshots.length &&\n !sessionPlayerMetaDataLoading &&\n !snapshotsLoading &&\n !sessionEventsDataLoading\n )\n },\n ],\n\n firstSnapshot: [\n (s) => [s.snapshots],\n (snapshots): RecordingSnapshot | null => {\n return snapshots[0] || null\n },\n ],\n\n lastSnapshot: [\n (s) => [s.snapshots],\n (snapshots): RecordingSnapshot | null => {\n return snapshots[snapshots.length - 1] || null\n },\n ],\n\n start: [\n (s) => [s.firstSnapshot, s.sessionPlayerMetaData],\n (firstSnapshot, meta): Dayjs | null => {\n const eventStart = meta?.start_time ? dayjs(meta.start_time) : null\n const snapshotStart = firstSnapshot ? dayjs(firstSnapshot.timestamp) : null\n\n // whichever is earliest\n if (eventStart && snapshotStart) {\n return eventStart.isBefore(snapshotStart) ? eventStart : snapshotStart\n }\n return eventStart || snapshotStart\n },\n ],\n\n end: [\n (s) => [s.lastSnapshot, s.sessionPlayerMetaData],\n (lastSnapshot, meta): Dayjs | null => {\n const eventEnd = meta?.end_time ? dayjs(meta.end_time) : null\n const snapshotEnd = lastSnapshot ? dayjs(lastSnapshot.timestamp) : null\n\n // whichever is latest\n if (eventEnd && snapshotEnd) {\n return eventEnd.isAfter(snapshotEnd) ? eventEnd : snapshotEnd\n }\n return eventEnd || snapshotEnd\n },\n ],\n\n durationMs: [\n (s) => [s.start, s.end],\n (start, end): number => {\n return !!start && !!end ? end.diff(start) : 0\n },\n ],\n\n segments: [\n (s) => [s.snapshots, s.start, s.end, s.trackedWindow],\n (snapshots, start, end, trackedWindow): RecordingSegment[] => {\n return createSegments(snapshots || [], start, end, trackedWindow)\n },\n ],\n\n urls: [\n (s) => [s.snapshots],\n (snapshots): { url: string; timestamp: number }[] => {\n return (\n snapshots\n .filter((snapshot) => getHrefFromSnapshot(snapshot))\n .map((snapshot) => {\n return {\n url: getHrefFromSnapshot(snapshot) as string,\n timestamp: snapshot.timestamp,\n }\n }) ?? []\n )\n },\n ],\n\n snapshots: [\n (s) => [s.snapshotSources, s.snapshotsBySource],\n (sources, snapshotsBySource): RecordingSnapshot[] => {\n const allSnapshots =\n sources?.flatMap((source) => {\n const sourceKey = getSourceKey(source)\n return snapshotsBySource?.[sourceKey]?.snapshots || []\n }) ?? []\n\n return deduplicateSnapshots(allSnapshots)\n },\n ],\n\n untransformedSnapshots: [\n (s) => [s.snapshotSources, s.snapshotsBySource],\n (sources, snapshotsBySource): RecordingSnapshot[] => {\n const allSnapshots =\n sources?.flatMap((source) => {\n const sourceKey = getSourceKey(source)\n return snapshotsBySource?.[sourceKey]?.untransformed_snapshots || []\n }) ?? []\n\n return deduplicateSnapshots(allSnapshots)\n },\n ],\n\n snapshotsByWindowId: [\n (s) => [s.snapshots],\n (snapshots): Record => {\n return mapSnapshotsToWindowId(snapshots || [])\n },\n ],\n\n snapshotsInvalid: [\n (s, p) => [s.snapshotsByWindowId, s.fullyLoaded, s.start, p.sessionRecordingId, s.currentTeam],\n (snapshotsByWindowId, fullyLoaded, start, sessionRecordingId, currentTeam): boolean => {\n if (!fullyLoaded || !start) {\n return false\n }\n\n const windowsHaveFullSnapshot = Object.entries(snapshotsByWindowId).reduce(\n (acc, [windowId, events]) => {\n acc[`window-id-${windowId}-has-full-snapshot`] = events.some(\n (event) => event.type === EventType.FullSnapshot\n )\n return acc\n },\n {}\n )\n const anyWindowMissingFullSnapshot = !Object.values(windowsHaveFullSnapshot).some((x) => x)\n const everyWindowMissingFullSnapshot = !Object.values(windowsHaveFullSnapshot).every((x) => x)\n\n if (everyWindowMissingFullSnapshot) {\n // video is definitely unplayable\n posthog.capture('recording_has_no_full_snapshot', {\n sessionId: sessionRecordingId,\n teamId: currentTeam?.id,\n teamName: currentTeam?.name,\n })\n } else if (anyWindowMissingFullSnapshot) {\n posthog.capture('recording_window_missing_full_snapshot', {\n sessionId: sessionRecordingId,\n teamID: currentTeam?.id,\n teamName: currentTeam?.name,\n })\n }\n\n return everyWindowMissingFullSnapshot\n },\n ],\n\n bufferedToTime: [\n (s) => [s.segments],\n (segments): number | null => {\n if (!segments.length) {\n return null\n }\n\n const startTime = segments[0].startTimestamp\n const lastSegment = segments[segments.length - 1]\n\n if (lastSegment.kind === 'buffer') {\n return lastSegment.startTimestamp - startTime\n }\n\n return lastSegment.endTimestamp - startTime\n },\n ],\n\n windowIds: [\n (s) => [s.snapshotsByWindowId],\n (snapshotsByWindowId) => {\n return Object.keys(snapshotsByWindowId)\n },\n ],\n\n createExportJSON: [\n (s) => [s.sessionPlayerMetaData, s.snapshots, s.untransformedSnapshots],\n (\n sessionPlayerMetaData,\n snapshots,\n untransformedSnapshots\n ): ((exportUntransformedMobileSnapshotData: boolean) => ExportedSessionRecordingFileV2) => {\n return (exportUntransformedMobileSnapshotData: boolean) => ({\n version: '2023-04-28',\n data: {\n id: sessionPlayerMetaData?.id ?? '',\n person: sessionPlayerMetaData?.person,\n snapshots: exportUntransformedMobileSnapshotData ? untransformedSnapshots : snapshots,\n },\n })\n },\n ],\n\n customRRWebEvents: [\n (s) => [s.snapshots],\n (snapshots): customEvent[] => {\n return snapshots.filter((snapshot) => snapshot.type === EventType.Custom).map((x) => x as customEvent)\n },\n ],\n })),\n subscriptions(({ actions, values }) => ({\n webVitalsEvents: (value: RecordingEventType[]) => {\n // we preload all web vitals data, so it can be used before user interaction\n if (!values.sessionEventsDataLoading) {\n actions.loadFullEventData(value)\n }\n },\n })),\n afterMount(({ cache }) => {\n resetTimingsCache(cache)\n }),\n beforeUnmount(({ cache }) => {\n resetTimingsCache(cache)\n }),\n])\n","import { actions, connect, kea, listeners, path, reducers } from 'kea'\nimport { loaders } from 'kea-loaders'\nimport api from 'lib/api'\nimport { dayjs } from 'lib/dayjs'\nimport { eventUsageLogic } from 'lib/utils/eventUsageLogic'\n\nimport { HogQLQuery, NodeKind } from '~/queries/schema'\nimport { hogql } from '~/queries/utils'\nimport { SessionRecordingPropertiesType, SessionRecordingType } from '~/types'\n\nimport type { sessionRecordingsListPropertiesLogicType } from './sessionRecordingsListPropertiesLogicType'\n\n// This logic is used to fetch properties for a list of recordings\n// It is used in a global way as the cached values can be re-used\nexport const sessionRecordingsListPropertiesLogic = kea([\n path(() => ['scenes', 'session-recordings', 'playlist', 'sessionRecordingsListPropertiesLogic']),\n connect(() => ({\n actions: [eventUsageLogic, ['reportRecordingsListPropertiesFetched']],\n })),\n\n actions({\n loadPropertiesForSessions: (sessions: SessionRecordingType[]) => ({ sessions }),\n maybeLoadPropertiesForSessions: (sessions: SessionRecordingType[]) => ({ sessions }),\n }),\n\n loaders(({ actions }) => ({\n recordingProperties: [\n [] as SessionRecordingPropertiesType[],\n {\n loadPropertiesForSessions: async ({ sessions }, breakpoint) => {\n await breakpoint(100)\n\n const startTime = performance.now()\n const sessionIds = sessions.map((x) => x.id)\n\n const oldestTimestamp = sessions.map((x) => x.start_time).sort()[0]\n const newestTimestamp = sessions.map((x) => x.end_time).sort()[sessions.length - 1]\n\n const query: HogQLQuery = {\n kind: NodeKind.HogQLQuery,\n query: hogql`SELECT properties.$session_id as session_id, any(properties) as properties\n FROM events\n WHERE event IN ['$pageview', '$autocapture']\n AND session_id IN ${sessionIds}\n -- the timestamp range here is only to avoid querying too much of the events table\n -- we don't really care about the absolute value, \n -- but we do care about whether timezones have an odd impact\n -- so, we extend the range by a day on each side so that timezones don't cause issues\n AND timestamp >= ${dayjs(oldestTimestamp).subtract(1, 'day')}\n AND timestamp <= ${dayjs(newestTimestamp).add(1, 'day')}\n GROUP BY session_id`,\n }\n\n const response = await api.query(query)\n const loadTimeMs = performance.now() - startTime\n\n actions.reportRecordingsListPropertiesFetched(loadTimeMs)\n\n breakpoint()\n return (response.results || []).map(\n (x: any): SessionRecordingPropertiesType => ({\n id: x[0],\n properties: JSON.parse(x[1] || '{}'),\n })\n )\n },\n },\n ],\n })),\n\n listeners(({ actions, values }) => ({\n maybeLoadPropertiesForSessions: ({ sessions }) => {\n const newSessions = sessions.filter((session) => !values.recordingPropertiesById[session.id])\n\n if (newSessions.length > 0) {\n actions.loadPropertiesForSessions(newSessions)\n }\n },\n })),\n\n reducers({\n recordingPropertiesById: [\n {} as Record,\n {\n loadPropertiesForSessionsSuccess: (\n state,\n { recordingProperties }\n ): Record => {\n const newState = { ...state }\n recordingProperties.forEach((properties) => {\n newState[properties.id] = properties.properties\n })\n\n return newState\n },\n },\n ],\n }),\n])\n","import { Link } from '@posthog/lemon-ui'\nimport { useActions, useValues } from 'kea'\nimport { Form } from 'kea-forms'\nimport { CopyToClipboardInline } from 'lib/components/CopyToClipboard'\nimport { LemonBanner } from 'lib/lemon-ui/LemonBanner'\nimport { LemonButton } from 'lib/lemon-ui/LemonButton'\nimport { LemonField } from 'lib/lemon-ui/LemonField'\nimport { LemonInput } from 'lib/lemon-ui/LemonInput/LemonInput'\nimport { LemonModal } from 'lib/lemon-ui/LemonModal'\nimport { LemonTextArea } from 'lib/lemon-ui/LemonTextArea/LemonTextArea'\nimport { preflightLogic } from 'scenes/PreflightCheck/preflightLogic'\n\nimport { verifiedDomainsLogic } from './verifiedDomainsLogic'\n\nexport function ConfigureSAMLModal(): JSX.Element {\n const { configureSAMLModalId, isSamlConfigSubmitting, samlConfig } = useValues(verifiedDomainsLogic)\n const { setConfigureSAMLModalId } = useActions(verifiedDomainsLogic)\n const { preflight } = useValues(preflightLogic)\n const siteUrl = preflight?.site_url ?? window.location.origin\n\n const samlReady = samlConfig.saml_acs_url && samlConfig.saml_entity_id && samlConfig.saml_x509_cert\n\n const handleClose = (): void => {\n setConfigureSAMLModalId(null)\n // clean()\n }\n\n return (\n \n
\n \n

Configure SAML authentication and provisioning

\n
\n \n

\n \n Read the docs\n \n

\n \n {`${siteUrl}/complete/saml/`}\n \n \n {configureSAMLModalId || 'unknown'}\n \n \n {siteUrl}\n \n \n \n \n \n \n \n \n \n \n {!samlReady && (\n \n SAML will not be enabled unless you enter all attributes above. However you can still\n settings as draft.\n \n )}\n
\n \n \n Save settings\n \n \n
\n
\n )\n}\n","import { IconEllipsis, IconInfo, IconPlus } from '@posthog/icons'\nimport {\n LemonBanner,\n LemonButton,\n LemonDialog,\n LemonInput,\n LemonMenu,\n LemonTable,\n LemonTableColumns,\n LemonTabs,\n Spinner,\n Tooltip,\n} from '@posthog/lemon-ui'\nimport clsx from 'clsx'\nimport { useActions, useValues } from 'kea'\nimport { Form } from 'kea-forms'\nimport { CodeSnippet, Language } from 'lib/components/CodeSnippet'\nimport { PayGateMini } from 'lib/components/PayGateMini/PayGateMini'\nimport { RestrictionScope, useRestrictedArea } from 'lib/components/RestrictedArea'\nimport { OrganizationMembershipLevel } from 'lib/constants'\nimport { LemonField } from 'lib/lemon-ui/LemonField'\nimport { LemonMarkdown } from 'lib/lemon-ui/LemonMarkdown'\n\nimport { AvailableFeature } from '~/types'\n\nimport { proxyLogic, ProxyRecord } from './proxyLogic'\n\nconst MAX_PROXY_RECORDS = 3\n\nconst statusText = {\n valid: 'live',\n timed_out: 'timed out',\n}\n\nexport function ManagedReverseProxy(): JSX.Element {\n const { formState, proxyRecords, proxyRecordsLoading } = useValues(proxyLogic)\n const { showForm, deleteRecord } = useActions(proxyLogic)\n\n const restrictionReason = useRestrictedArea({\n minimumAccessLevel: OrganizationMembershipLevel.Admin,\n scope: RestrictionScope.Organization,\n })\n\n const maxRecordsReached = proxyRecords.length >= MAX_PROXY_RECORDS\n\n const recordsWithMessages = proxyRecords.filter((record) => !!record.message)\n\n const columns: LemonTableColumns = [\n {\n title: 'Domain',\n dataIndex: 'domain',\n },\n {\n title: 'Status',\n dataIndex: 'status',\n render: function RenderStatus(status) {\n if (!status) {\n return Unknown\n }\n\n return (\n \n {status === 'issuing' && }\n {statusText[status] || status}\n {status === 'waiting' && (\n \n \n \n )}\n {status === 'timed_out' && (\n \n \n \n )}\n \n )\n },\n },\n {\n title: ,\n width: 20,\n className: 'flex justify-center',\n render: function Render(_, { id, status }) {\n return (\n status != 'deleting' &&\n !restrictionReason && (\n {\n LemonDialog.open({\n title: 'Delete managed proxy',\n width: '20rem',\n content:\n 'Are you sure you want to delete this managed proxy? This cannot be undone and if it is in use then events sent to the domain will not be processed.',\n primaryButton: {\n status: 'danger',\n onClick: () => deleteRecord(id),\n children: 'Delete',\n },\n secondaryButton: {\n children: 'Cancel',\n },\n })\n },\n },\n ]}\n >\n } />\n \n )\n )\n },\n },\n ]\n\n return (\n \n
\n {recordsWithMessages.map((r) => (\n \n {`**${r.domain}**\\n ${r.message}`}\n \n ))}\n ,\n }}\n />\n {formState === 'collapsed' ? (\n maxRecordsReached ? (\n \n There is a maximum of {MAX_PROXY_RECORDS} records allowed per organization\n \n ) : (\n
\n }\n disabledReason={restrictionReason}\n >\n New managed proxy\n \n
\n )\n ) : (\n \n )}\n
\n
\n )\n}\n\nconst ExpandedRow = ({ record }: { record: ProxyRecord }): JSX.Element => {\n return (\n
\n \n {record.target_cname}\n \n ),\n },\n ]}\n />\n
\n )\n}\n\nfunction CreateRecordForm(): JSX.Element {\n const { formState, proxyRecordsLoading, proxyRecords } = useValues(proxyLogic)\n const { collapseForm } = useActions(proxyLogic)\n\n const waitingRecords = proxyRecords.filter((r) => r.status === 'waiting')\n\n return (\n
\n {formState == 'active' ? (\n
\n \n \n \n
\n \n Cancel\n \n \n Add\n \n
\n
\n ) : (\n <>\n
Almost there
\n
\n You need to set the following CNAME records in your DNS provider:\n
\n {waitingRecords.map((r) => (\n
\n {r.domain}\n \n {r.target_cname}\n \n
\n ))}\n
\n \n Done\n \n
\n \n )}\n
\n )\n}\n","import { lemonToast } from '@posthog/lemon-ui'\nimport { actions, afterMount, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea'\nimport { forms } from 'kea-forms'\nimport { loaders } from 'kea-loaders'\nimport { actionToUrl, router, urlToAction } from 'kea-router'\nimport api from 'lib/api'\nimport { dayjs } from 'lib/dayjs'\nimport { featureFlagLogic as enabledFlagLogic } from 'lib/logic/featureFlagLogic'\nimport { hasFormErrors, isObject } from 'lib/utils'\nimport { eventUsageLogic } from 'lib/utils/eventUsageLogic'\nimport { Scene } from 'scenes/sceneTypes'\nimport { teamLogic } from 'scenes/teamLogic'\nimport { urls } from 'scenes/urls'\n\nimport { DataTableNode, HogQLQuery, InsightVizNode, NodeKind } from '~/queries/schema'\nimport { hogql } from '~/queries/utils'\nimport {\n BaseMathType,\n Breadcrumb,\n FeatureFlagFilters,\n MultipleSurveyQuestion,\n PropertyFilterType,\n PropertyOperator,\n RatingSurveyQuestion,\n Survey,\n SurveyQuestionBase,\n SurveyQuestionBranchingType,\n SurveyQuestionType,\n SurveyUrlMatchType,\n} from '~/types'\n\nimport { defaultSurveyAppearance, defaultSurveyFieldValues, NEW_SURVEY, NewSurvey } from './constants'\nimport type { surveyLogicType } from './surveyLogicType'\nimport { surveysLogic } from './surveysLogic'\nimport { sanitizeHTML } from './utils'\n\nexport enum SurveyEditSection {\n Steps = 'steps',\n Widget = 'widget',\n Presentation = 'presentation',\n Appearance = 'appearance',\n Customization = 'customization',\n DisplayConditions = 'DisplayConditions',\n Scheduling = 'scheduling',\n CompletionConditions = 'CompletionConditions',\n}\nexport interface SurveyLogicProps {\n /** Either a UUID or 'new'. */\n id: string\n}\n\nexport interface SurveyMetricsQueries {\n surveysShown: DataTableNode\n surveysDismissed: DataTableNode\n}\n\nexport interface SurveyUserStats {\n seen: number\n dismissed: number\n sent: number\n}\n\nexport interface SurveyRatingResults {\n [key: number]: {\n data: number[]\n total: number\n }\n}\n\nexport interface SurveyRecurringNPSResults {\n [key: number]: {\n data: number[]\n total: number\n }\n}\n\ntype SurveyNPSResult = {\n Promoters: number\n Detractors: number\n Passives: number\n}\n\nexport interface SurveySingleChoiceResults {\n [key: number]: {\n labels: string[]\n data: number[]\n total: number\n }\n}\n\nexport interface SurveyMultipleChoiceResults {\n [key: number]: {\n labels: string[]\n data: number[]\n }\n}\n\nexport interface SurveyOpenTextResults {\n [key: number]: {\n events: { distinct_id: string; properties: Record; personProperties: Record }[]\n }\n}\n\nexport interface QuestionResultsReady {\n [key: string]: boolean\n}\n\nexport type ScheduleType = 'once' | 'recurring'\n\nconst getResponseField = (i: number): string => (i === 0 ? '$survey_response' : `$survey_response_${i}`)\n\nfunction duplicateExistingSurvey(survey: Survey | NewSurvey): Partial {\n return {\n ...survey,\n id: NEW_SURVEY.id,\n name: `${survey.name} (copy)`,\n archived: false,\n start_date: null,\n end_date: null,\n targeting_flag_filters: survey.targeting_flag?.filters ?? NEW_SURVEY.targeting_flag_filters,\n linked_flag_id: survey.linked_flag?.id ?? NEW_SURVEY.linked_flag_id,\n }\n}\n\nexport const surveyLogic = kea([\n props({} as SurveyLogicProps),\n key(({ id }) => id),\n path((key) => ['scenes', 'surveys', 'surveyLogic', key]),\n connect(() => ({\n actions: [\n surveysLogic,\n ['loadSurveys'],\n eventUsageLogic,\n [\n 'reportSurveyCreated',\n 'reportSurveyEdited',\n 'reportSurveyArchived',\n 'reportSurveyViewed',\n 'reportSurveyCycleDetected',\n ],\n ],\n values: [enabledFlagLogic, ['featureFlags as enabledFlags'], surveysLogic, ['surveys']],\n })),\n actions({\n setSurveyMissing: true,\n editingSurvey: (editing: boolean) => ({ editing }),\n setDefaultForQuestionType: (\n idx: number,\n type: SurveyQuestionType,\n isEditingQuestion: boolean,\n isEditingDescription: boolean,\n isEditingThankYouMessage: boolean\n ) => ({\n idx,\n type,\n isEditingQuestion,\n isEditingDescription,\n isEditingThankYouMessage,\n }),\n setQuestionBranchingType: (questionIndex, type, specificQuestionIndex) => ({\n questionIndex,\n type,\n specificQuestionIndex,\n }),\n setResponseBasedBranchingForQuestion: (questionIndex, responseValue, nextStep, specificQuestionIndex) => ({\n questionIndex,\n responseValue,\n nextStep,\n specificQuestionIndex,\n }),\n resetBranchingForQuestion: (questionIndex) => ({ questionIndex }),\n deleteBranchingLogic: true,\n archiveSurvey: true,\n setWritingHTMLDescription: (writingHTML: boolean) => ({ writingHTML }),\n setSurveyTemplateValues: (template: any) => ({ template }),\n setSelectedPageIndex: (idx: number | null) => ({ idx }),\n setSelectedSection: (section: SurveyEditSection | null) => ({ section }),\n\n setSchedule: (schedule: ScheduleType) => ({ schedule }),\n resetTargeting: true,\n setFlagPropertyErrors: (errors: any) => ({ errors }),\n }),\n loaders(({ props, actions, values }) => ({\n survey: {\n loadSurvey: async () => {\n if (props.id && props.id !== 'new') {\n try {\n const survey = await api.surveys.get(props.id)\n actions.reportSurveyViewed(survey)\n return survey\n } catch (error: any) {\n if (error.status === 404) {\n actions.setSurveyMissing()\n return { ...NEW_SURVEY }\n }\n throw error\n }\n }\n if (props.id === 'new' && router.values.hashParams.fromTemplate) {\n const templatedSurvey = values.survey\n templatedSurvey.appearance = {\n ...defaultSurveyAppearance,\n ...teamLogic.values.currentTeam?.survey_config?.appearance,\n ...templatedSurvey.appearance,\n }\n return templatedSurvey\n }\n\n const newSurvey = NEW_SURVEY\n newSurvey.appearance = {\n ...defaultSurveyAppearance,\n ...teamLogic.values.currentTeam?.survey_config?.appearance,\n ...newSurvey.appearance,\n }\n\n return newSurvey\n },\n createSurvey: async (surveyPayload: Partial) => {\n return await api.surveys.create(sanitizeQuestions(surveyPayload))\n },\n updateSurvey: async (surveyPayload: Partial) => {\n return await api.surveys.update(props.id, sanitizeQuestions(surveyPayload))\n },\n launchSurvey: async () => {\n const startDate = dayjs()\n return await api.surveys.update(props.id, { start_date: startDate.toISOString() })\n },\n stopSurvey: async () => {\n return await api.surveys.update(props.id, { end_date: dayjs().toISOString() })\n },\n resumeSurvey: async () => {\n return await api.surveys.update(props.id, { end_date: null })\n },\n },\n duplicatedSurvey: {\n duplicateSurvey: async () => {\n const { survey } = values\n const payload = duplicateExistingSurvey(survey)\n const createdSurvey = await api.surveys.create(sanitizeQuestions(payload))\n\n lemonToast.success('Survey duplicated.', {\n toastId: `survey-duplicated-${createdSurvey.id}`,\n button: {\n label: 'View Survey',\n action: () => {\n router.actions.push(urls.survey(createdSurvey.id))\n },\n },\n })\n\n actions.reportSurveyCreated(createdSurvey, true)\n return survey\n },\n },\n surveyUserStats: {\n loadSurveyUserStats: async (): Promise => {\n const survey: Survey = values.survey as Survey\n const startDate = dayjs(survey.start_date || survey.created_at).format('YYYY-MM-DD')\n const endDate = survey.end_date\n ? dayjs(survey.end_date).add(1, 'day').format('YYYY-MM-DD')\n : dayjs().add(1, 'day').format('YYYY-MM-DD')\n\n const query: HogQLQuery = {\n kind: NodeKind.HogQLQuery,\n query: hogql`\n SELECT\n (SELECT COUNT(DISTINCT person_id)\n FROM events\n WHERE event = 'survey shown'\n AND properties.$survey_id = ${props.id}\n AND timestamp >= ${startDate}\n AND timestamp <= ${endDate}),\n (SELECT COUNT(DISTINCT person_id)\n FROM events\n WHERE event = 'survey dismissed'\n AND properties.$survey_id = ${props.id}\n AND timestamp >= ${startDate}\n AND timestamp <= ${endDate}),\n (SELECT COUNT(DISTINCT person_id)\n FROM events\n WHERE event = 'survey sent'\n AND properties.$survey_id = ${props.id}\n AND timestamp >= ${startDate}\n AND timestamp <= ${endDate})\n `,\n }\n const responseJSON = await api.query(query)\n const { results } = responseJSON\n if (results && results[0]) {\n const [totalSeen, dismissed, sent] = results[0]\n const onlySeen = totalSeen - dismissed - sent\n return { seen: onlySeen < 0 ? 0 : onlySeen, dismissed, sent }\n }\n return { seen: 0, dismissed: 0, sent: 0 }\n },\n },\n surveyRatingResults: {\n loadSurveyRatingResults: async ({\n questionIndex,\n iteration,\n }: {\n questionIndex: number\n iteration?: number | null | undefined\n }): Promise => {\n const question = values.survey.questions[questionIndex]\n if (question.type !== SurveyQuestionType.Rating) {\n throw new Error(`Survey question type must be ${SurveyQuestionType.Rating}`)\n }\n\n const survey: Survey = values.survey as Survey\n const startDate = dayjs(survey.start_date || survey.created_at).format('YYYY-MM-DD')\n const endDate = survey.end_date\n ? dayjs(survey.end_date).add(1, 'day').format('YYYY-MM-DD')\n : dayjs().add(1, 'day').format('YYYY-MM-DD')\n\n let iterationCondition = ''\n if (iteration && iteration > 0) {\n iterationCondition = ` AND properties.$survey_iteration='${iteration}' `\n }\n const query: HogQLQuery = {\n kind: NodeKind.HogQLQuery,\n query: `\n SELECT\n JSONExtractString(properties, '${getResponseField(questionIndex)}') AS survey_response,\n COUNT(survey_response)\n FROM events\n WHERE event = 'survey sent' \n AND properties.$survey_id = '${props.id}'\n ${iterationCondition}\n AND timestamp >= '${startDate}'\n AND timestamp <= '${endDate}'\n GROUP BY survey_response\n `,\n }\n const responseJSON = await api.query(query)\n // TODO:Dylan - I don't like how we lose our types here\n // would be cool if we could parse this in a more type-safe way\n const { results } = responseJSON\n\n let total = 0\n const dataSize = question.scale === 10 ? 11 : question.scale\n const data = new Array(dataSize).fill(0)\n results?.forEach(([value, count]) => {\n total += count\n\n const index = question.scale === 10 ? value : value - 1\n data[index] = count\n })\n\n return { ...values.surveyRatingResults, [questionIndex]: { total, data } }\n },\n },\n surveyRecurringNPSResults: {\n loadSurveyRecurringNPSResults: async ({\n questionIndex,\n }: {\n questionIndex: number\n }): Promise => {\n const question = values.survey.questions[questionIndex]\n if (question.type !== SurveyQuestionType.Rating) {\n throw new Error(`Survey question type must be ${SurveyQuestionType.Rating}`)\n }\n\n const survey: Survey = values.survey as Survey\n const startDate = dayjs(survey.start_date || survey.created_at).format('YYYY-MM-DD')\n const endDate = survey.end_date\n ? dayjs(survey.end_date).add(1, 'day').format('YYYY-MM-DD')\n : dayjs().add(1, 'day').format('YYYY-MM-DD')\n\n const query: HogQLQuery = {\n kind: NodeKind.HogQLQuery,\n query: `\n SELECT\n JSONExtractString(properties, '$survey_iteration') AS survey_iteration,\n JSONExtractString(properties, '${getResponseField(questionIndex)}') AS survey_response,\n COUNT(survey_response)\n FROM events\n WHERE event = 'survey sent'\n AND properties.$survey_id = '${props.id}'\n AND timestamp >= '${startDate}'\n AND timestamp <= '${endDate}'\n GROUP BY survey_response, survey_iteration\n `,\n }\n\n const responseJSON = await api.query(query)\n const { results } = responseJSON\n let total = 100\n const data = new Array(survey.iteration_count).fill(0)\n\n const iterations = new Map()\n\n results?.forEach(([iteration, response, count]) => {\n let promoters = 0\n let passives = 0\n let detractors = 0\n\n if (parseInt(response) >= 9) {\n // a Promoter is someone who gives a survey response of 9 or 10\n promoters += parseInt(count)\n } else if (parseInt(response) > 6) {\n // a Passive is someone who gives a survey response of 7 or 8\n passives += parseInt(count)\n } else {\n // a Detractor is someone who gives a survey response of 0 - 6\n detractors += parseInt(count)\n }\n\n if (iterations.has(iteration)) {\n const currentValue = iterations.get(iteration)\n if (currentValue !== undefined) {\n currentValue.Detractors += detractors\n currentValue.Promoters += promoters\n currentValue.Passives += passives\n }\n } else {\n iterations.set(iteration, {\n Detractors: detractors,\n Passives: passives,\n Promoters: promoters,\n })\n }\n })\n\n iterations.forEach((value: SurveyNPSResult, key: string) => {\n // NPS score is calculated with this formula\n // (Promoters / (Promoters + Passives + Detractors) * 100) - (Detractors / (Promoters + Passives + Detractors)* 100)\n const totalResponses = value.Promoters + value.Passives + value.Detractors\n const npsScore =\n (value.Promoters / totalResponses) * 100 - (value.Detractors / totalResponses) * 100\n data[parseInt(key) - 1] = npsScore\n total += 100\n })\n\n return { ...values.surveyRecurringNPSResults, [questionIndex]: { total, data } }\n },\n },\n surveySingleChoiceResults: {\n loadSurveySingleChoiceResults: async ({\n questionIndex,\n }: {\n questionIndex: number\n }): Promise => {\n const survey: Survey = values.survey as Survey\n const startDate = dayjs(survey.start_date || survey.created_at).format('YYYY-MM-DD')\n const endDate = survey.end_date\n ? dayjs(survey.end_date).add(1, 'day').format('YYYY-MM-DD')\n : dayjs().add(1, 'day').format('YYYY-MM-DD')\n\n const query: HogQLQuery = {\n kind: NodeKind.HogQLQuery,\n query: `\n SELECT\n JSONExtractString(properties, '${getResponseField(questionIndex)}') AS survey_response,\n COUNT(survey_response)\n FROM events\n WHERE event = 'survey sent' \n AND properties.$survey_id = '${props.id}'\n AND timestamp >= '${startDate}'\n AND timestamp <= '${endDate}'\n GROUP BY survey_response\n `,\n }\n const responseJSON = await api.query(query)\n const { results } = responseJSON\n\n const labels = results?.map((r) => r[0])\n const data = results?.map((r) => r[1])\n const total = data?.reduce((a, b) => a + b, 0)\n\n return { ...values.surveySingleChoiceResults, [questionIndex]: { labels, data, total } }\n },\n },\n surveyMultipleChoiceResults: {\n loadSurveyMultipleChoiceResults: async ({\n questionIndex,\n }: {\n questionIndex: number\n }): Promise => {\n const question = values.survey.questions[questionIndex]\n if (question.type !== SurveyQuestionType.MultipleChoice) {\n throw new Error(`Survey question type must be ${SurveyQuestionType.MultipleChoice}`)\n }\n\n const survey: Survey = values.survey as Survey\n const startDate = dayjs(survey.start_date || survey.created_at).format('YYYY-MM-DD')\n const endDate = survey.end_date\n ? dayjs(survey.end_date).add(1, 'day').format('YYYY-MM-DD')\n : dayjs().add(1, 'day').format('YYYY-MM-DD')\n\n const query: HogQLQuery = {\n kind: NodeKind.HogQLQuery,\n query: `\n SELECT \n count(),\n arrayJoin(JSONExtractArrayRaw(properties, '${getResponseField(questionIndex)}')) AS choice\n FROM events\n WHERE event == 'survey sent'\n AND properties.$survey_id == '${survey.id}'\n AND timestamp >= '${startDate}'\n AND timestamp <= '${endDate}'\n GROUP BY choice\n ORDER BY count() DESC\n `,\n }\n const responseJSON = await api.query(query)\n let { results } = responseJSON\n\n // Remove outside quotes\n results = results?.map((r) => {\n return [r[0], r[1].slice(1, r[1].length - 1)]\n })\n\n // Zero-fill choices that are not open-ended\n question.choices.forEach((choice, idx) => {\n const isOpenChoice = idx == question.choices.length - 1 && question?.hasOpenChoice\n if (results?.length && !isOpenChoice && !results.some((r) => r[1] === choice)) {\n results.push([0, choice])\n }\n })\n\n const data = results?.map((r) => r[0])\n const labels = results?.map((r) => r[1])\n\n return { ...values.surveyMultipleChoiceResults, [questionIndex]: { labels, data } }\n },\n },\n surveyOpenTextResults: {\n loadSurveyOpenTextResults: async ({\n questionIndex,\n }: {\n questionIndex: number\n }): Promise => {\n const question = values.survey.questions[questionIndex]\n if (question.type !== SurveyQuestionType.Open) {\n throw new Error(`Survey question type must be ${SurveyQuestionType.Open}`)\n }\n\n const survey: Survey = values.survey as Survey\n const startDate = dayjs(survey.start_date || survey.created_at).format('YYYY-MM-DD')\n const endDate = survey.end_date\n ? dayjs(survey.end_date).add(1, 'day').format('YYYY-MM-DD')\n : dayjs().add(1, 'day').format('YYYY-MM-DD')\n\n const query: HogQLQuery = {\n kind: NodeKind.HogQLQuery,\n query: `\n SELECT distinct_id, properties, person.properties\n FROM events\n WHERE event == 'survey sent'\n AND properties.$survey_id == '${survey.id}'\n AND trim(JSONExtractString(properties, '${getResponseField(questionIndex)}')) != ''\n AND timestamp >= '${startDate}'\n AND timestamp <= '${endDate}'\n LIMIT 20\n `,\n }\n\n const responseJSON = await api.query(query)\n const { results } = responseJSON\n\n const events =\n results?.map((r) => {\n const distinct_id = r[0]\n const properties = JSON.parse(r[1])\n const personProperties = JSON.parse(r[2])\n return { distinct_id, properties, personProperties }\n }) || []\n\n return { ...values.surveyOpenTextResults, [questionIndex]: { events } }\n },\n },\n })),\n listeners(({ actions, values }) => ({\n createSurveySuccess: ({ survey }) => {\n lemonToast.success(<>Survey {survey.name} created)\n actions.loadSurveys()\n router.actions.replace(urls.survey(survey.id))\n actions.reportSurveyCreated(survey)\n },\n updateSurveySuccess: ({ survey }) => {\n lemonToast.success(<>Survey {survey.name} updated)\n actions.editingSurvey(false)\n actions.reportSurveyEdited(survey)\n actions.loadSurveys()\n },\n duplicateSurveySuccess: () => {\n actions.loadSurveys()\n },\n launchSurveySuccess: ({ survey }) => {\n lemonToast.success(<>Survey {survey.name} launched)\n actions.loadSurveys()\n },\n stopSurveySuccess: () => {\n actions.loadSurveys()\n },\n resumeSurveySuccess: () => {\n actions.loadSurveys()\n },\n archiveSurvey: () => {\n actions.updateSurvey({ archived: true })\n },\n loadSurveySuccess: () => {\n actions.loadSurveyUserStats()\n },\n resetTargeting: () => {\n actions.setSurveyValue('linked_flag_id', NEW_SURVEY.linked_flag_id)\n actions.setSurveyValue('targeting_flag_filters', NEW_SURVEY.targeting_flag_filters)\n actions.setSurveyValue('linked_flag', NEW_SURVEY.linked_flag)\n actions.setSurveyValue('targeting_flag', NEW_SURVEY.targeting_flag)\n actions.setSurveyValue('conditions', NEW_SURVEY.conditions)\n actions.setSurveyValue('remove_targeting_flag', true)\n actions.setSurveyValue('responses_limit', NEW_SURVEY.responses_limit)\n actions.setSurveyValues({\n iteration_count: NEW_SURVEY.iteration_count,\n iteration_frequency_days: NEW_SURVEY.iteration_frequency_days,\n })\n },\n submitSurveyFailure: async () => {\n // When errors occur, scroll to the error, but wait for errors to be set in the DOM first\n if (hasFormErrors(values.flagPropertyErrors) || values.urlMatchTypeValidationError) {\n actions.setSelectedSection(SurveyEditSection.DisplayConditions)\n } else {\n actions.setSelectedSection(SurveyEditSection.Steps)\n }\n setTimeout(\n () => document.querySelector(`.Field--error`)?.scrollIntoView({ block: 'center', behavior: 'smooth' }),\n 5\n )\n },\n })),\n reducers({\n isEditingSurvey: [\n false,\n {\n editingSurvey: (_, { editing }) => editing,\n },\n ],\n surveyMissing: [\n false,\n {\n setSurveyMissing: () => true,\n },\n ],\n\n survey: [\n { ...NEW_SURVEY } as NewSurvey | Survey,\n {\n setDefaultForQuestionType: (\n state,\n { idx, type, isEditingQuestion, isEditingDescription, isEditingThankYouMessage }\n ) => {\n const question = isEditingQuestion\n ? state.questions[idx].question\n : defaultSurveyFieldValues[type].questions[0].question\n const description = isEditingDescription\n ? state.questions[idx].description\n : defaultSurveyFieldValues[type].questions[0].description\n const thankYouMessageHeader = isEditingThankYouMessage\n ? state.appearance?.thankYouMessageHeader\n : defaultSurveyFieldValues[type].appearance.thankYouMessageHeader\n const newQuestions = [...state.questions]\n newQuestions[idx] = {\n ...state.questions[idx],\n ...(defaultSurveyFieldValues[type].questions[0] as SurveyQuestionBase),\n question,\n description,\n }\n return {\n ...state,\n questions: newQuestions,\n appearance: {\n ...state.appearance,\n ...defaultSurveyFieldValues[type].appearance,\n thankYouMessageHeader,\n },\n }\n },\n setSurveyTemplateValues: (_, { template }) => {\n const newTemplateSurvey = { ...NEW_SURVEY, ...template }\n return newTemplateSurvey\n },\n setQuestionBranchingType: (state, { questionIndex, type, specificQuestionIndex }) => {\n const newQuestions = [...state.questions]\n const question = newQuestions[questionIndex]\n\n if (type === SurveyQuestionBranchingType.NextQuestion) {\n delete question.branching\n } else if (type === SurveyQuestionBranchingType.End) {\n question.branching = {\n type: SurveyQuestionBranchingType.End,\n }\n } else if (type === SurveyQuestionBranchingType.ResponseBased) {\n if (\n question.type !== SurveyQuestionType.Rating &&\n question.type !== SurveyQuestionType.SingleChoice\n ) {\n throw new Error(\n `Survey question type must be ${SurveyQuestionType.Rating} or ${SurveyQuestionType.SingleChoice}`\n )\n }\n\n question.branching = {\n type: SurveyQuestionBranchingType.ResponseBased,\n responseValues: {},\n }\n } else if (type === SurveyQuestionBranchingType.SpecificQuestion) {\n question.branching = {\n type: SurveyQuestionBranchingType.SpecificQuestion,\n index: specificQuestionIndex,\n }\n }\n\n newQuestions[questionIndex] = question\n return {\n ...state,\n questions: newQuestions,\n }\n },\n setResponseBasedBranchingForQuestion: (\n state,\n { questionIndex, responseValue, nextStep, specificQuestionIndex }\n ) => {\n const newQuestions = [...state.questions]\n const question = newQuestions[questionIndex]\n\n if (\n question.type !== SurveyQuestionType.Rating &&\n question.type !== SurveyQuestionType.SingleChoice\n ) {\n throw new Error(\n `Survey question type must be ${SurveyQuestionType.Rating} or ${SurveyQuestionType.SingleChoice}`\n )\n }\n\n if (question.branching?.type !== SurveyQuestionBranchingType.ResponseBased) {\n throw new Error(\n `Survey question branching type must be ${SurveyQuestionBranchingType.ResponseBased}`\n )\n }\n\n if ('responseValues' in question.branching) {\n if (nextStep === SurveyQuestionBranchingType.NextQuestion) {\n delete question.branching.responseValues[responseValue]\n } else if (nextStep === SurveyQuestionBranchingType.End) {\n question.branching.responseValues[responseValue] = SurveyQuestionBranchingType.End\n } else if (nextStep === SurveyQuestionBranchingType.SpecificQuestion) {\n question.branching.responseValues[responseValue] = specificQuestionIndex\n }\n }\n\n newQuestions[questionIndex] = question\n return {\n ...state,\n questions: newQuestions,\n }\n },\n resetBranchingForQuestion: (state, { questionIndex }) => {\n const newQuestions = [...state.questions]\n const question = newQuestions[questionIndex]\n delete question.branching\n\n newQuestions[questionIndex] = question\n return {\n ...state,\n questions: newQuestions,\n }\n },\n deleteBranchingLogic: (state) => {\n const newQuestions = [...state.questions]\n newQuestions.forEach((question) => {\n delete question.branching\n })\n\n return {\n ...state,\n questions: newQuestions,\n }\n },\n },\n ],\n selectedPageIndex: [\n 0 as number | null,\n {\n setSelectedPageIndex: (_, { idx }) => idx,\n },\n ],\n selectedSection: [\n SurveyEditSection.Steps as SurveyEditSection | null,\n {\n setSelectedSection: (_, { section }) => section,\n },\n ],\n surveyRatingResultsReady: [\n {},\n {\n loadSurveyRatingResultsSuccess: (state, { payload }) => {\n if (!payload || !payload.hasOwnProperty('questionIndex')) {\n return { ...state }\n }\n return { ...state, [payload.questionIndex]: true }\n },\n },\n ],\n surveyRecurringNPSResultsReady: [\n {},\n {\n loadSurveyRecurringNPSResultsSuccess: (state, { payload }) => {\n if (!payload || !payload.hasOwnProperty('questionIndex')) {\n return { ...state }\n }\n return { ...state, [payload.questionIndex]: true }\n },\n },\n ],\n surveySingleChoiceResultsReady: [\n {},\n {\n loadSurveySingleChoiceResultsSuccess: (state, { payload }) => {\n if (!payload || !payload.hasOwnProperty('questionIndex')) {\n return { ...state }\n }\n return { ...state, [payload.questionIndex]: true }\n },\n },\n ],\n surveyMultipleChoiceResultsReady: [\n {},\n {\n loadSurveyMultipleChoiceResultsSuccess: (state, { payload }) => {\n if (!payload || !payload.hasOwnProperty('questionIndex')) {\n return { ...state }\n }\n return { ...state, [payload.questionIndex]: true }\n },\n },\n ],\n surveyOpenTextResultsReady: [\n {},\n {\n loadSurveyOpenTextResultsSuccess: (state, { payload }) => {\n if (!payload || !payload.hasOwnProperty('questionIndex')) {\n return { ...state }\n }\n return { ...state, [payload.questionIndex]: true }\n },\n },\n ],\n writingHTMLDescription: [\n false,\n {\n setWritingHTMLDescription: (_, { writingHTML }) => writingHTML,\n },\n ],\n schedule: [\n 'once',\n {\n setSchedule: (_, { schedule }) => schedule,\n },\n ],\n flagPropertyErrors: [\n null as any,\n {\n setFlagPropertyErrors: (_, { errors }) => errors,\n },\n ],\n }),\n selectors({\n isSurveyRunning: [\n (s) => [s.survey],\n (survey: Survey): boolean => {\n return !!(survey.start_date && !survey.end_date)\n },\n ],\n surveyShufflingQuestionsAvailable: [\n (s) => [s.survey],\n (survey: Survey): boolean => {\n return survey.questions.length > 1\n },\n ],\n showSurveyRepeatSchedule: [(s) => [s.schedule], (schedule: ScheduleType) => schedule == 'recurring'],\n descriptionContentType: [\n (s) => [s.survey],\n (survey: Survey) => (questionIndex: number) => {\n return survey.questions[questionIndex].descriptionContentType\n },\n ],\n surveyRepeatedActivationAvailable: [\n (s) => [s.survey],\n (survey: Survey): boolean =>\n survey.conditions?.events?.values != undefined && survey.conditions?.events?.values?.length > 0,\n ],\n hasTargetingSet: [\n (s) => [s.survey],\n (survey: Survey): boolean => {\n const hasLinkedFlag =\n !!survey.linked_flag_id || (survey.linked_flag && Object.keys(survey.linked_flag).length > 0)\n const hasTargetingFlag =\n (survey.targeting_flag && Object.keys(survey.targeting_flag).length > 0) ||\n (survey.targeting_flag_filters && Object.keys(survey.targeting_flag_filters).length > 0)\n const hasOtherConditions = survey.conditions && Object.keys(survey.conditions).length > 0\n return !!hasLinkedFlag || !!hasTargetingFlag || !!hasOtherConditions\n },\n ],\n breadcrumbs: [\n (s) => [s.survey],\n (survey: Survey): Breadcrumb[] => [\n {\n key: Scene.Surveys,\n name: 'Surveys',\n path: urls.surveys(),\n },\n { key: [Scene.Survey, survey?.id || 'new'], name: survey.name },\n ],\n ],\n dataTableQuery: [\n (s) => [s.survey],\n (survey): DataTableNode | null => {\n if (survey.id === 'new') {\n return null\n }\n const surveyWithResults = survey as Survey\n const startDate = surveyWithResults.start_date || surveyWithResults.created_at\n return {\n kind: NodeKind.DataTableNode,\n source: {\n kind: NodeKind.EventsQuery,\n select: [\n '*',\n ...survey.questions.map((q, i) => {\n if (q.type === SurveyQuestionType.MultipleChoice) {\n // Join array items into a string\n return `coalesce(arrayStringConcat(JSONExtractArrayRaw(properties, '${getResponseField(\n i\n )}'), ', ')) -- ${q.question}`\n }\n\n return `coalesce(JSONExtractString(properties, '${getResponseField(i)}')) -- ${\n q.question\n }`\n }),\n 'timestamp',\n 'person',\n `coalesce(JSONExtractString(properties, '$lib_version')) -- Library Version`,\n `coalesce(JSONExtractString(properties, '$lib')) -- Library`,\n `coalesce(JSONExtractString(properties, '$current_url')) -- URL`,\n ],\n orderBy: ['timestamp DESC'],\n where: [`event == 'survey sent'`],\n after: startDate,\n properties: [\n {\n type: PropertyFilterType.Event,\n key: '$survey_id',\n operator: PropertyOperator.Exact,\n value: survey.id,\n },\n ],\n },\n propertiesViaUrl: true,\n showExport: true,\n showReload: true,\n showEventFilter: false,\n showPropertyFilter: true,\n showTimings: false,\n }\n },\n ],\n targetingFlagFilters: [\n (s) => [s.survey],\n (survey): FeatureFlagFilters | undefined => {\n if (survey.targeting_flag_filters) {\n return {\n ...survey.targeting_flag_filters,\n groups: survey.targeting_flag_filters.groups,\n multivariate: null,\n payloads: {},\n super_groups: undefined,\n }\n }\n return survey.targeting_flag?.filters || undefined\n },\n ],\n urlMatchTypeValidationError: [\n (s) => [s.survey],\n (survey): string | null => {\n if (survey.conditions?.urlMatchType === SurveyUrlMatchType.Regex && survey.conditions.url) {\n try {\n new RegExp(survey.conditions.url)\n } catch (e: any) {\n return e.message\n }\n }\n return null\n },\n ],\n surveyNPSScore: [\n (s) => [s.surveyRatingResults],\n (surveyRatingResults) => {\n if (surveyRatingResults) {\n const questionIdx = Object.keys(surveyRatingResults)[0]\n const questionResults = surveyRatingResults[questionIdx]\n\n // If we don't have any results, return 'No data available' instead of NaN.\n if (questionResults.total === 0) {\n return 'No data available'\n }\n\n const data: number[] = questionResults.data\n if (data.length === 11) {\n const promoters = data.slice(9, 11).reduce((a, b) => a + b, 0)\n const passives = data.slice(7, 9).reduce((a, b) => a + b, 0)\n const detractors = data.slice(0, 7).reduce((a, b) => a + b, 0)\n const npsScore = ((promoters - detractors) / (promoters + passives + detractors)) * 100\n return npsScore.toFixed(1)\n }\n }\n },\n ],\n getBranchingDropdownValue: [\n (s) => [s.survey],\n (survey) => (questionIndex: number, question: RatingSurveyQuestion | MultipleSurveyQuestion) => {\n if (question.branching?.type) {\n const { type } = question.branching\n\n if (type === SurveyQuestionBranchingType.SpecificQuestion) {\n const nextQuestionIndex = question.branching.index\n return `${SurveyQuestionBranchingType.SpecificQuestion}:${nextQuestionIndex}`\n }\n\n return type\n }\n\n // No branching specified, default to Next question / Confirmation message\n if (questionIndex < survey.questions.length - 1) {\n return SurveyQuestionBranchingType.NextQuestion\n }\n\n return SurveyQuestionBranchingType.End\n },\n ],\n getResponseBasedBranchingDropdownValue: [\n (s) => [s.survey],\n (survey) => (questionIndex: number, question: RatingSurveyQuestion | MultipleSurveyQuestion, response) => {\n if (!question.branching || !('responseValues' in question.branching)) {\n return SurveyQuestionBranchingType.NextQuestion\n }\n\n // If a value is mapped onto an integer, we're redirecting to a specific question\n if (Number.isInteger(question.branching.responseValues[response])) {\n const nextQuestionIndex = question.branching.responseValues[response]\n return `${SurveyQuestionBranchingType.SpecificQuestion}:${nextQuestionIndex}`\n }\n\n // If any other value is present (practically only Confirmation message), return that value\n if (question.branching?.responseValues?.[response]) {\n return question.branching.responseValues[response]\n }\n\n // No branching specified, default to Next question / Confirmation message\n if (questionIndex < survey.questions.length - 1) {\n return SurveyQuestionBranchingType.NextQuestion\n }\n\n return SurveyQuestionBranchingType.End\n },\n ],\n hasCycle: [\n (s) => [s.survey],\n (survey) => {\n const graph = new Map()\n survey.questions.forEach((question, fromIndex: number) => {\n if (!graph.has(fromIndex)) {\n graph.set(fromIndex, new Set())\n }\n\n if (question.branching?.type === SurveyQuestionBranchingType.End) {\n return\n } else if (\n question.branching?.type === SurveyQuestionBranchingType.SpecificQuestion &&\n Number.isInteger(question.branching.index)\n ) {\n const toIndex = question.branching.index\n graph.get(fromIndex).add(toIndex)\n return\n } else if (\n question.branching?.type === SurveyQuestionBranchingType.ResponseBased &&\n isObject(question.branching?.responseValues)\n ) {\n for (const [_, toIndex] of Object.entries(question.branching?.responseValues)) {\n if (Number.isInteger(toIndex)) {\n graph.get(fromIndex).add(toIndex)\n }\n }\n }\n\n // No branching - still need to connect the next question\n if (fromIndex < survey.questions.length - 1) {\n const toIndex = fromIndex + 1\n graph.get(fromIndex).add(toIndex)\n }\n })\n\n let cycleDetected = false\n function dfs(node: number, seen: number[]): void {\n if (cycleDetected) {\n return\n }\n\n for (const neighbor of graph.get(node) || []) {\n if (seen.includes(neighbor)) {\n cycleDetected = true\n return\n }\n dfs(neighbor, seen.concat(neighbor))\n }\n }\n dfs(0, [0])\n\n return cycleDetected\n },\n ],\n hasBranchingLogic: [\n (s) => [s.survey],\n (survey) =>\n survey.questions.some((question) => question.branching && Object.keys(question.branching).length > 0),\n ],\n surveyAsInsightURL: [\n (s) => [s.survey],\n (survey) => {\n const query: InsightVizNode = {\n kind: NodeKind.InsightVizNode,\n source: {\n kind: NodeKind.TrendsQuery,\n properties: [\n {\n key: '$survey_id',\n value: survey.id,\n operator: PropertyOperator.Exact,\n type: PropertyFilterType.Event,\n },\n ],\n series: [\n {\n kind: NodeKind.EventsNode,\n event: 'survey sent',\n name: 'survey sent',\n math: BaseMathType.TotalCount,\n },\n {\n kind: NodeKind.EventsNode,\n event: 'survey shown',\n name: 'survey shown',\n math: BaseMathType.TotalCount,\n },\n {\n kind: NodeKind.EventsNode,\n event: 'survey dismissed',\n name: 'survey dismissed',\n math: BaseMathType.TotalCount,\n },\n ],\n },\n }\n\n return urls.insightNew(undefined, undefined, query)\n },\n ],\n }),\n forms(({ actions, props, values }) => ({\n survey: {\n defaults: { ...NEW_SURVEY } as NewSurvey | Survey,\n errors: ({ name, questions }) => ({\n // NOTE: When more validation errors are added, the submitSurveyFailure listener should be updated\n // to scroll to the right error section\n name: !name && 'Please enter a name.',\n questions: questions.map((question) => {\n const questionErrors = {\n question: !question.question && 'Please enter a question label.',\n }\n\n if (question.type === SurveyQuestionType.Rating) {\n return {\n ...questionErrors,\n display: !question.display && 'Please choose a display type.',\n scale: !question.scale && 'Please choose a scale.',\n lowerBoundLabel: !question.lowerBoundLabel && 'Please enter a lower bound label.',\n upperBoundLabel: !question.upperBoundLabel && 'Please enter an upper bound label.',\n }\n } else if (\n question.type === SurveyQuestionType.SingleChoice ||\n question.type === SurveyQuestionType.MultipleChoice\n ) {\n return {\n ...questionErrors,\n choices: question.choices.some((choice) => !choice.trim())\n ? 'Please ensure all choices are non-empty.'\n : undefined,\n }\n }\n\n return questionErrors\n }),\n // release conditions controlled using a PureField in the form\n targeting_flag_filters: values.flagPropertyErrors,\n // controlled using a PureField in the form\n urlMatchType: values.urlMatchTypeValidationError,\n }),\n submit: (surveyPayload) => {\n if (values.hasCycle) {\n actions.reportSurveyCycleDetected(values.survey)\n\n return lemonToast.error(\n 'Your survey contains an endless cycle. Please revisit your branching rules.'\n )\n }\n\n // when the survey is being submitted, we should turn off editing mode\n actions.editingSurvey(false)\n if (props.id && props.id !== 'new') {\n actions.updateSurvey(surveyPayload)\n } else {\n actions.createSurvey(surveyPayload)\n }\n },\n },\n })),\n urlToAction(({ actions, props }) => ({\n [urls.survey(props.id ?? 'new')]: (_, { edit }, __, { method }) => {\n // We always set the editingSurvey to true when we create a new survey\n if (props.id === 'new') {\n actions.editingSurvey(true)\n }\n // If the URL was pushed (user clicked on a link), reset the scene's data.\n // This avoids resetting form fields if you click back/forward.\n if (method === 'PUSH') {\n if (props.id) {\n actions.loadSurvey()\n } else {\n actions.resetSurvey()\n }\n }\n\n if (edit) {\n actions.editingSurvey(true)\n }\n },\n })),\n actionToUrl(({ values }) => ({\n setSurveyTemplateValues: () => {\n const hashParams = router.values.hashParams\n hashParams['fromTemplate'] = true\n\n return [urls.survey(values.survey.id), router.values.searchParams, hashParams]\n },\n editingSurvey: ({ editing }) => {\n const searchParams = router.values.searchParams\n if (editing) {\n searchParams['edit'] = true\n } else {\n delete searchParams['edit']\n }\n\n return [router.values.location.pathname, router.values.searchParams, router.values.hashParams]\n },\n })),\n afterMount(({ props, actions }) => {\n if (props.id !== 'new') {\n actions.loadSurvey()\n }\n if (props.id === 'new') {\n actions.resetSurvey()\n }\n }),\n])\n\nfunction sanitizeQuestions(surveyPayload: Partial): Partial {\n if (!surveyPayload.questions) {\n return surveyPayload\n }\n\n const sanitizedThankYouHeader = sanitizeHTML(surveyPayload.appearance?.thankYouMessageHeader || '')\n const sanitizedThankYouDescription = sanitizeHTML(surveyPayload.appearance?.thankYouMessageDescription || '')\n\n return {\n ...surveyPayload,\n questions: surveyPayload.questions?.map((rawQuestion) => {\n return {\n ...rawQuestion,\n description: sanitizeHTML(rawQuestion.description || ''),\n question: sanitizeHTML(rawQuestion.question || ''),\n }\n }),\n appearance: {\n ...surveyPayload.appearance,\n ...(sanitizedThankYouHeader && { thankYouMessageHeader: sanitizedThankYouHeader }),\n ...(sanitizedThankYouDescription && { thankYouMessageDescription: sanitizedThankYouDescription }),\n },\n }\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/docs/project.json b/docs/project.json index 9a19060d9..fbc52134e 100644 --- a/docs/project.json +++ b/docs/project.json @@ -1 +1 @@ -{"generatedAt":1730286950344,"hasCustomBabel":false,"hasCustomWebpack":true,"hasStaticDirs":true,"hasStorybookEslint":true,"refCount":0,"packageManager":{"type":"pnpm","version":"8.10.5"},"typescriptOptions":{"reactDocgen":"react-docgen"},"preview":{"usesGlobals":true},"framework":{"name":"@storybook/react-webpack5","options":{"builder":{"useSWC":true}}},"builder":"@storybook/builder-webpack5","renderer":"@storybook/react","storybookVersion":"7.6.4","storybookVersionSpecifier":"^7.6.4","language":"typescript","storybookPackages":{"@storybook/addon-actions":{"version":"7.6.4"},"@storybook/addons":{"version":"7.6.4"},"@storybook/api":{"version":"7.6.4"},"@storybook/blocks":{"version":"7.6.4"},"@storybook/components":{"version":"7.6.4"},"@storybook/core-events":{"version":"7.6.4"},"@storybook/csf":{"version":null},"@storybook/react":{"version":"7.6.4"},"@storybook/react-webpack5":{"version":"7.6.4"},"@storybook/test-runner":{"version":"0.16.0"},"@storybook/theming":{"version":"7.6.4"},"@storybook/types":{"version":"7.6.4"},"eslint-plugin-storybook":{"version":"0.6.15"},"storybook":{"version":"7.6.4"}},"addons":{"@storybook/addon-docs":{"version":"7.6.4"},"@storybook/addon-links":{"version":"7.6.4"},"@storybook/addon-essentials":{"version":"7.6.4"},"@storybook/addon-storysource":{"version":"7.6.4"},"@storybook/addon-a11y":{"version":"7.6.4"},"storybook-addon-pseudo-states":{"version":"2.1.2"}}} +{"generatedAt":1730288428016,"hasCustomBabel":false,"hasCustomWebpack":true,"hasStaticDirs":true,"hasStorybookEslint":true,"refCount":0,"packageManager":{"type":"pnpm","version":"8.10.5"},"typescriptOptions":{"reactDocgen":"react-docgen"},"preview":{"usesGlobals":true},"framework":{"name":"@storybook/react-webpack5","options":{"builder":{"useSWC":true}}},"builder":"@storybook/builder-webpack5","renderer":"@storybook/react","storybookVersion":"7.6.4","storybookVersionSpecifier":"^7.6.4","language":"typescript","storybookPackages":{"@storybook/addon-actions":{"version":"7.6.4"},"@storybook/addons":{"version":"7.6.4"},"@storybook/api":{"version":"7.6.4"},"@storybook/blocks":{"version":"7.6.4"},"@storybook/components":{"version":"7.6.4"},"@storybook/core-events":{"version":"7.6.4"},"@storybook/csf":{"version":null},"@storybook/react":{"version":"7.6.4"},"@storybook/react-webpack5":{"version":"7.6.4"},"@storybook/test-runner":{"version":"0.16.0"},"@storybook/theming":{"version":"7.6.4"},"@storybook/types":{"version":"7.6.4"},"eslint-plugin-storybook":{"version":"0.6.15"},"storybook":{"version":"7.6.4"}},"addons":{"@storybook/addon-docs":{"version":"7.6.4"},"@storybook/addon-links":{"version":"7.6.4"},"@storybook/addon-essentials":{"version":"7.6.4"},"@storybook/addon-storysource":{"version":"7.6.4"},"@storybook/addon-a11y":{"version":"7.6.4"},"storybook-addon-pseudo-states":{"version":"2.1.2"}}}