diff --git a/docker-compose.base.yml b/docker-compose.base.yml
index 2e5ce0c2bdb..073af7c1d04 100644
--- a/docker-compose.base.yml
+++ b/docker-compose.base.yml
@@ -103,7 +103,6 @@ services:
KAFKA_HOSTS: 'kafka:9092'
REDIS_URL: 'redis://redis:6379/'
-
plugins:
command: ./bin/plugin-server --no-restart-loop
restart: on-failure
@@ -152,8 +151,6 @@ services:
volumes:
- /var/lib/elasticsearch/data
temporal:
-
-
environment:
- DB=postgresql
- DB_PORT=5432
@@ -190,4 +187,3 @@ services:
restart: on-failure
environment:
TEMPORAL_HOST: temporal
-
diff --git a/docker-compose.dev-full.yml b/docker-compose.dev-full.yml
index ba940322fb3..b8dbe9ebd3c 100644
--- a/docker-compose.dev-full.yml
+++ b/docker-compose.dev-full.yml
@@ -182,4 +182,4 @@ services:
- clickhouse
- kafka
- object_storage
- - temporal
\ No newline at end of file
+ - temporal
diff --git a/frontend/__snapshots__/lemon-ui-colors--color-palette--dark.png b/frontend/__snapshots__/lemon-ui-colors--color-palette--dark.png
index 9b77208d772..74150138e8b 100644
Binary files a/frontend/__snapshots__/lemon-ui-colors--color-palette--dark.png and b/frontend/__snapshots__/lemon-ui-colors--color-palette--dark.png differ
diff --git a/frontend/__snapshots__/lemon-ui-colors--color-palette--light.png b/frontend/__snapshots__/lemon-ui-colors--color-palette--light.png
index 48775cfc8ba..62cf1c2370d 100644
Binary files a/frontend/__snapshots__/lemon-ui-colors--color-palette--light.png and b/frontend/__snapshots__/lemon-ui-colors--color-palette--light.png differ
diff --git a/frontend/__snapshots__/lemon-ui-lemon-slider--basic--dark.png b/frontend/__snapshots__/lemon-ui-lemon-slider--basic--dark.png
index 58a3777e5b1..b1200cf4c52 100644
Binary files a/frontend/__snapshots__/lemon-ui-lemon-slider--basic--dark.png and b/frontend/__snapshots__/lemon-ui-lemon-slider--basic--dark.png differ
diff --git a/frontend/__snapshots__/lemon-ui-lemon-slider--basic--light.png b/frontend/__snapshots__/lemon-ui-lemon-slider--basic--light.png
index 828e3659542..787e8259d52 100644
Binary files a/frontend/__snapshots__/lemon-ui-lemon-slider--basic--light.png and b/frontend/__snapshots__/lemon-ui-lemon-slider--basic--light.png differ
diff --git a/frontend/__snapshots__/lemon-ui-lemon-tag--breakdown-tag--dark.png b/frontend/__snapshots__/lemon-ui-lemon-tag--breakdown-tag--dark.png
index 3b4b55227fa..fcfe5de2715 100644
Binary files a/frontend/__snapshots__/lemon-ui-lemon-tag--breakdown-tag--dark.png and b/frontend/__snapshots__/lemon-ui-lemon-tag--breakdown-tag--dark.png differ
diff --git a/frontend/__snapshots__/lemon-ui-lemon-tag--breakdown-tag--light.png b/frontend/__snapshots__/lemon-ui-lemon-tag--breakdown-tag--light.png
index 44c5df9cd70..2ebc9ce11d8 100644
Binary files a/frontend/__snapshots__/lemon-ui-lemon-tag--breakdown-tag--light.png and b/frontend/__snapshots__/lemon-ui-lemon-tag--breakdown-tag--light.png differ
diff --git a/frontend/__snapshots__/lemon-ui-scrollable-shadows--horizontal--dark.png b/frontend/__snapshots__/lemon-ui-scrollable-shadows--horizontal--dark.png
index 80fd7103af8..a513619924c 100644
Binary files a/frontend/__snapshots__/lemon-ui-scrollable-shadows--horizontal--dark.png and b/frontend/__snapshots__/lemon-ui-scrollable-shadows--horizontal--dark.png differ
diff --git a/frontend/__snapshots__/lemon-ui-scrollable-shadows--horizontal--light.png b/frontend/__snapshots__/lemon-ui-scrollable-shadows--horizontal--light.png
index ca420ed8bdc..f90ea838ab3 100644
Binary files a/frontend/__snapshots__/lemon-ui-scrollable-shadows--horizontal--light.png and b/frontend/__snapshots__/lemon-ui-scrollable-shadows--horizontal--light.png differ
diff --git a/frontend/__snapshots__/lemon-ui-scrollable-shadows--vertical--dark.png b/frontend/__snapshots__/lemon-ui-scrollable-shadows--vertical--dark.png
index ea2b6db0a77..b7de7c83d8f 100644
Binary files a/frontend/__snapshots__/lemon-ui-scrollable-shadows--vertical--dark.png and b/frontend/__snapshots__/lemon-ui-scrollable-shadows--vertical--dark.png differ
diff --git a/frontend/__snapshots__/lemon-ui-scrollable-shadows--vertical--light.png b/frontend/__snapshots__/lemon-ui-scrollable-shadows--vertical--light.png
index da907540137..8725eaaeaea 100644
Binary files a/frontend/__snapshots__/lemon-ui-scrollable-shadows--vertical--light.png and b/frontend/__snapshots__/lemon-ui-scrollable-shadows--vertical--light.png differ
diff --git a/frontend/__snapshots__/posthog-3000-navigation--navigation-base--dark.png b/frontend/__snapshots__/posthog-3000-navigation--navigation-base--dark.png
index 5ab6b69cf8e..06adea21722 100644
Binary files a/frontend/__snapshots__/posthog-3000-navigation--navigation-base--dark.png and b/frontend/__snapshots__/posthog-3000-navigation--navigation-base--dark.png differ
diff --git a/frontend/__snapshots__/posthog-3000-navigation--navigation-base--light.png b/frontend/__snapshots__/posthog-3000-navigation--navigation-base--light.png
index 8252b5fdf1b..d1bd6fb608e 100644
Binary files a/frontend/__snapshots__/posthog-3000-navigation--navigation-base--light.png and b/frontend/__snapshots__/posthog-3000-navigation--navigation-base--light.png differ
diff --git a/frontend/__snapshots__/scenes-app-batchexports--view-export--dark.png b/frontend/__snapshots__/scenes-app-batchexports--view-export--dark.png
index 0f8b113af43..5090a2518e0 100644
Binary files a/frontend/__snapshots__/scenes-app-batchexports--view-export--dark.png and b/frontend/__snapshots__/scenes-app-batchexports--view-export--dark.png differ
diff --git a/frontend/__snapshots__/scenes-app-sidepanels--side-panel-support-no-email--dark.png b/frontend/__snapshots__/scenes-app-sidepanels--side-panel-support-no-email--dark.png
new file mode 100644
index 00000000000..c17dad0b17e
Binary files /dev/null and b/frontend/__snapshots__/scenes-app-sidepanels--side-panel-support-no-email--dark.png differ
diff --git a/frontend/__snapshots__/scenes-app-sidepanels--side-panel-support-no-email--light.png b/frontend/__snapshots__/scenes-app-sidepanels--side-panel-support-no-email--light.png
new file mode 100644
index 00000000000..474c85c2251
Binary files /dev/null and b/frontend/__snapshots__/scenes-app-sidepanels--side-panel-support-no-email--light.png differ
diff --git a/frontend/__snapshots__/scenes-app-sidepanels--side-panel-support-with-email--dark.png b/frontend/__snapshots__/scenes-app-sidepanels--side-panel-support-with-email--dark.png
new file mode 100644
index 00000000000..4f968d7f68b
Binary files /dev/null and b/frontend/__snapshots__/scenes-app-sidepanels--side-panel-support-with-email--dark.png differ
diff --git a/frontend/__snapshots__/scenes-app-sidepanels--side-panel-support-with-email--light.png b/frontend/__snapshots__/scenes-app-sidepanels--side-panel-support-with-email--light.png
new file mode 100644
index 00000000000..d92a0899a7b
Binary files /dev/null and b/frontend/__snapshots__/scenes-app-sidepanels--side-panel-support-with-email--light.png differ
diff --git a/frontend/src/layout/navigation-3000/components/AlgoliaSearch.tsx b/frontend/src/layout/navigation-3000/components/AlgoliaSearch.tsx
new file mode 100644
index 00000000000..b6c52e30181
--- /dev/null
+++ b/frontend/src/layout/navigation-3000/components/AlgoliaSearch.tsx
@@ -0,0 +1,268 @@
+import { IconCheckCircle } from '@posthog/icons'
+import { LemonButton, LemonInput, LemonTag } from '@posthog/lemon-ui'
+import algoliasearch from 'algoliasearch/lite'
+import { useActions } from 'kea'
+import { useEffect, useRef, useState } from 'react'
+import { InstantSearch, useHits, useRefinementList, useSearchBox } from 'react-instantsearch'
+import { AutoSizer } from 'react-virtualized/dist/es/AutoSizer'
+import { List } from 'react-virtualized/dist/es/List'
+
+import { sidePanelStateLogic } from '~/layout/navigation-3000/sidepanel/sidePanelStateLogic'
+import { SidePanelTab } from '~/types'
+
+const searchClient = algoliasearch('7VNQB5W0TX', '37f41fd37095bc85af76ed4edc85eb5a')
+
+const rowRenderer = ({ key, index, style, hits, activeOption }: any): JSX.Element => {
+ const { slug, title, type, resolved } = hits[index]
+ return (
+ // eslint-disable-next-line react/forbid-dom-props
+
+
+
+
+ {title}
+ {type === 'question' && resolved && (
+
+ )}
+
+ /{slug}
+
+
+
+ )
+}
+
+const Hits = ({ activeOption }: { activeOption?: number }): JSX.Element => {
+ const { hits } = useHits()
+ return (
+
+
+ {({ height, width }: { height: number; width: number }) => (
+ rowRenderer({ ...options, hits, activeOption })}
+ />
+ )}
+
+
+ )
+}
+
+const SearchInput = ({
+ value,
+ setValue,
+}: {
+ value: string
+ setValue: React.Dispatch>
+}): JSX.Element => {
+ const { refine } = useSearchBox()
+
+ const handleChange = (value: string): void => {
+ setValue(value)
+ refine(value)
+ }
+
+ return
+}
+
+type Tag = {
+ type: string
+ label: string
+}
+
+const tags: Tag[] = [
+ {
+ type: 'all',
+ label: 'All',
+ },
+ {
+ type: 'docs',
+ label: 'Docs',
+ },
+ {
+ type: 'question',
+ label: 'Questions',
+ },
+ {
+ type: 'tutorial',
+ label: 'Tutorials',
+ },
+]
+
+type SearchTagProps = Tag & {
+ active?: boolean
+ onClick: (type: string) => void
+}
+
+const SearchTag = ({ type, label, active, onClick }: SearchTagProps): JSX.Element => {
+ const { refine, items } = useRefinementList({ attribute: 'type' })
+ const itemCount = type !== 'all' && items.find(({ value }) => value === type)?.count
+
+ const handleClick = (e: React.MouseEvent): void => {
+ e.stopPropagation()
+ onClick(type)
+ }
+
+ useEffect(() => {
+ refine(type)
+ }, [])
+
+ return (
+
+
+ {label}
+ {type !== 'all' && ({itemCount ?? 0}) }
+
+
+ )
+}
+
+const Tags = ({
+ activeTag,
+ setActiveTag,
+}: {
+ activeTag: string
+ setActiveTag: React.Dispatch>
+}): JSX.Element => {
+ const handleClick = (type: string): void => {
+ setActiveTag(type)
+ }
+
+ return (
+
+ {tags.map((tag) => {
+ const { type } = tag
+ return (
+
+
+
+ )
+ })}
+
+ )
+}
+
+const Search = (): JSX.Element => {
+ const { openSidePanel } = useActions(sidePanelStateLogic)
+ const { hits } = useHits()
+ const { items, refine } = useRefinementList({ attribute: 'type' })
+
+ const ref = useRef(null)
+ const [searchValue, setSearchValue] = useState('')
+ const [activeOption, setActiveOption] = useState()
+ const [activeTag, setActiveTag] = useState('all')
+ const [searchOpen, setSearchOpen] = useState(false)
+
+ const handleKeyDown = (e: React.KeyboardEvent): void => {
+ switch (e.key) {
+ case 'Enter': {
+ if (activeOption !== undefined) {
+ openSidePanel(SidePanelTab.Docs, `https://posthog.com/${hits[activeOption].slug}`)
+ }
+ break
+ }
+
+ case 'Escape': {
+ setSearchOpen(false)
+ break
+ }
+ case 'ArrowDown': {
+ e.preventDefault()
+ setActiveOption((currOption) => {
+ if (currOption === undefined || currOption >= hits.length - 1) {
+ return 0
+ }
+ return currOption + 1
+ })
+ break
+ }
+ case 'ArrowUp': {
+ e.preventDefault()
+ setActiveOption((currOption) => {
+ if (currOption !== undefined) {
+ return currOption <= 0 ? hits.length - 1 : currOption - 1
+ }
+ })
+ break
+ }
+ case 'Tab':
+ case 'ArrowRight': {
+ e.preventDefault()
+ const currTagIndex = tags.findIndex(({ type }) => type === activeTag)
+ setActiveTag(tags[currTagIndex >= tags.length - 1 ? 0 : currTagIndex + 1].type)
+ break
+ }
+ case 'ArrowLeft': {
+ e.preventDefault()
+ const currTagIndex = tags.findIndex(({ type }) => type === activeTag)
+ setActiveTag(tags[currTagIndex <= 0 ? tags.length - 1 : currTagIndex - 1].type)
+ }
+ }
+ }
+
+ useEffect(() => {
+ setSearchOpen(!!searchValue)
+ setActiveOption(0)
+ }, [searchValue])
+
+ useEffect(() => {
+ setActiveOption(0)
+ if (activeTag === 'all') {
+ const filteredItems = items.filter(({ value }) => tags.some(({ type }) => type === value))
+ filteredItems.forEach(({ value, isRefined }) => {
+ if (!isRefined) {
+ refine(value)
+ }
+ })
+ } else {
+ items.forEach(({ value, isRefined }) => {
+ if (isRefined) {
+ refine(value)
+ }
+ })
+ refine(activeTag)
+ }
+ }, [activeTag])
+
+ useEffect(() => {
+ const handleClick = (e: any): void => {
+ if (!ref?.current?.contains(e.target)) {
+ setSearchOpen(false)
+ }
+ }
+
+ window.addEventListener('click', handleClick)
+
+ return () => {
+ window.removeEventListener('click', handleClick)
+ }
+ }, [])
+
+ return (
+
+
+ {searchOpen && (
+
+
+
+
+ )}
+
+ )
+}
+
+export default function AlgoliaSearch(): JSX.Element {
+ return (
+
+
+
+ )
+}
diff --git a/frontend/src/layout/navigation-3000/sidepanel/SidePanel.stories.tsx b/frontend/src/layout/navigation-3000/sidepanel/SidePanel.stories.tsx
index abad5ff3087..2cbd7574fa1 100644
--- a/frontend/src/layout/navigation-3000/sidepanel/SidePanel.stories.tsx
+++ b/frontend/src/layout/navigation-3000/sidepanel/SidePanel.stories.tsx
@@ -1,11 +1,13 @@
import { Meta, StoryFn } from '@storybook/react'
import { useActions } from 'kea'
import { router } from 'kea-router'
+import { supportLogic } from 'lib/components/Support/supportLogic'
import { useEffect } from 'react'
import { App } from 'scenes/App'
import { urls } from 'scenes/urls'
-import { mswDecorator } from '~/mocks/browser'
+import { mswDecorator, useStorybookMocks } from '~/mocks/browser'
+import organizationCurrent from '~/mocks/fixtures/api/organizations/@current/@current.json'
import { SidePanelTab } from '~/types'
import { sidePanelStateLogic } from './sidePanelStateLogic'
@@ -59,3 +61,36 @@ export const SidePanelActivation: StoryFn = () => {
export const SidePanelNotebooks: StoryFn = () => {
return
}
+
+export const SidePanelSupportNoEmail: StoryFn = () => {
+ return
+}
+
+export const SidePanelSupportWithEmail: StoryFn = () => {
+ const { openEmailForm } = useActions(supportLogic)
+ useStorybookMocks({
+ get: {
+ // TODO: setting available featues should be a decorator to make this easy
+ '/api/users/@me': () => [
+ 200,
+ {
+ email: 'test@posthog.com',
+ first_name: 'Test Hedgehog',
+ organization: {
+ ...organizationCurrent,
+ available_product_features: [
+ {
+ key: 'email_support',
+ name: 'Email support',
+ },
+ ],
+ },
+ },
+ ],
+ },
+ })
+ useEffect(() => {
+ openEmailForm()
+ }, [])
+ return
+}
diff --git a/frontend/src/layout/navigation-3000/sidepanel/SidePanel.tsx b/frontend/src/layout/navigation-3000/sidepanel/SidePanel.tsx
index 8b6b61e55fa..bcad53bdc9d 100644
--- a/frontend/src/layout/navigation-3000/sidepanel/SidePanel.tsx
+++ b/frontend/src/layout/navigation-3000/sidepanel/SidePanel.tsx
@@ -37,7 +37,7 @@ export const SIDE_PANEL_TABS: Record<
noModalSupport: true,
},
[SidePanelTab.Support]: {
- label: 'Support',
+ label: 'Help',
Icon: IconSupport,
Content: SidePanelSupport,
},
diff --git a/frontend/src/layout/navigation-3000/sidepanel/panels/SidePanelSupport.tsx b/frontend/src/layout/navigation-3000/sidepanel/panels/SidePanelSupport.tsx
index 381cd591812..022b8d18dfb 100644
--- a/frontend/src/layout/navigation-3000/sidepanel/panels/SidePanelSupport.tsx
+++ b/frontend/src/layout/navigation-3000/sidepanel/panels/SidePanelSupport.tsx
@@ -1,51 +1,305 @@
-import { LemonButton } from '@posthog/lemon-ui'
+import {
+ IconBug,
+ IconChevronDown,
+ IconFeatures,
+ IconFlask,
+ IconHelmet,
+ IconMap,
+ IconMessage,
+ IconRewindPlay,
+ IconStack,
+ IconToggle,
+ IconTrends,
+} from '@posthog/icons'
+import { LemonButton, Link } from '@posthog/lemon-ui'
import { useActions, useValues } from 'kea'
import { SupportForm } from 'lib/components/Support/SupportForm'
import { supportLogic } from 'lib/components/Support/supportLogic'
+import React from 'react'
+import { billingLogic } from 'scenes/billing/billingLogic'
+import { urls } from 'scenes/urls'
+import { userLogic } from 'scenes/userLogic'
-import { SidePanelTab } from '~/types'
+import { AvailableFeature, ProductKey, SidePanelTab } from '~/types'
+import AlgoliaSearch from '../../components/AlgoliaSearch'
import { SidePanelPaneHeader } from '../components/SidePanelPaneHeader'
+import { SIDE_PANEL_TABS } from '../SidePanel'
import { sidePanelStateLogic } from '../sidePanelStateLogic'
+const PRODUCTS = [
+ {
+ name: 'Product OS',
+ slug: 'product-os',
+ icon: ,
+ },
+ {
+ name: 'Product analytics',
+ slug: 'product-analytics',
+ icon: ,
+ },
+ {
+ name: 'Session replay',
+ slug: 'session-replay',
+ icon: ,
+ },
+ {
+ name: 'Feature flags',
+ slug: 'feature-flags',
+ icon: ,
+ },
+ {
+ name: 'A/B testing',
+ slug: 'ab-testing',
+ icon: ,
+ },
+ {
+ name: 'Surveys',
+ slug: 'surveys',
+ icon: ,
+ },
+]
+
+const Section = ({ title, children }: { title: string; children: React.ReactNode }): React.ReactElement => {
+ return (
+
+ )
+}
+
+const SupportFormBlock = ({ onCancel }: { onCancel: () => void }): JSX.Element => {
+ const { billing } = useValues(billingLogic)
+ const supportResponseTimes = {
+ [AvailableFeature.EMAIL_SUPPORT]: '2-3 days',
+ [AvailableFeature.PRIORITY_SUPPORT]: '4-6 hours',
+ }
+
+ return (
+
+
+
+
+ Avg support response times
+
+
+ Explore options
+
+
+ {billing?.products
+ ?.find((product) => product.type == ProductKey.PLATFORM_AND_SUPPORT)
+ ?.plans?.map((plan, i) => (
+
+
+ {i == 1 ? 'Pay-per-use' : plan.name}
+ {plan.current_plan && (
+ <>
+ {' '}
+ (your plan)
+ >
+ )}
+
+
+ {plan.features.some((f) => f.key == AvailableFeature.PRIORITY_SUPPORT)
+ ? supportResponseTimes[AvailableFeature.PRIORITY_SUPPORT]
+ : plan.features.some((f) => f.key == AvailableFeature.EMAIL_SUPPORT)
+ ? supportResponseTimes[AvailableFeature.EMAIL_SUPPORT]
+ : 'Community support only'}
+
+
+ ))}
+
+
+
+ Submit
+
+
+ Cancel
+
+
+ )
+}
+
export const SidePanelSupport = (): JSX.Element => {
const { closeSidePanel } = useActions(sidePanelStateLogic)
+ const { hasAvailableFeature } = useValues(userLogic)
+ const { openEmailForm, closeEmailForm } = useActions(supportLogic)
+ const { isEmailFormOpen } = useValues(supportLogic)
const theLogic = supportLogic({ onClose: () => closeSidePanel(SidePanelTab.Support) })
const { title } = useValues(theLogic)
- const { closeSupportForm } = useActions(theLogic)
return (
<>
-
+
-
+
-
+
+
+
+
+
+ }
+ targetBlank
+ >
+ Report a bug
+
+
+
+ }
+ targetBlank
+ >
+ See what we're building
+
+
+
+ }
+ targetBlank
+ >
+ Vote on our roadmap
+
+
+
+ }
+ targetBlank
+ >
+ Request a feature
+
+
+
+
+
+ {hasAvailableFeature(AvailableFeature.EMAIL_SUPPORT) ? (
+
+ {isEmailFormOpen ? (
+ closeEmailForm()} />
+ ) : (
+
+ Can't find what you need in the docs?{' '}
+ openEmailForm()}>Email an engineer
+
+ )}
+
+ ) : (
+
+
+ Due to our large userbase, we're unable to offer email support to organizations on the
+ free plan. But we still want to help!
+
+
+
+
+ Search our docs
+
+ We're constantly updating our docs and tutorials to provide the latest
+ information about installing, using, and troubleshooting.
+
+
+
+ Ask a community question
+
+ Many common (and niche) questions have already been resolved by users just like
+ you. (Our own engineers also keep an eye on the questions as they have time!){' '}
+
+ Search community questions or ask your own.
+
+
+
+
+
+ Explore PostHog partners
+
+
+ Third-party providers can help with installation and debugging of data issues.
+
+
+
+ Upgrade to a paid plan
+
+ Our paid plans offer email support.{' '}
+
+ Explore options.
+
+
+
+
+
+ )}
>
diff --git a/frontend/src/lib/components/Support/SupportForm.tsx b/frontend/src/lib/components/Support/SupportForm.tsx
index 7f92d89f144..b23fdd83a35 100644
--- a/frontend/src/lib/components/Support/SupportForm.tsx
+++ b/frontend/src/lib/components/Support/SupportForm.tsx
@@ -1,4 +1,4 @@
-import { IconBug, IconQuestion } from '@posthog/icons'
+import { IconBug, IconInfo, IconQuestion } from '@posthog/icons'
import {
LemonBanner,
LemonInput,
@@ -6,6 +6,7 @@ import {
LemonSegmentedButtonOption,
lemonToast,
Link,
+ Tooltip,
} from '@posthog/lemon-ui'
import { useActions, useValues } from 'kea'
import { Form } from 'kea-forms'
@@ -90,9 +91,12 @@ export function SupportForm(): JSX.Element | null {
>
)}
-
+
+
+
+
{posthog.getFeatureFlag('show-troubleshooting-docs-in-support-form') === 'test-replay-banner' &&
sendSupportRequest.target_area === 'session_replay' && (
@@ -127,18 +131,6 @@ export function SupportForm(): JSX.Element | null {
>
)}
-
-
-
-
- ({
- label: value,
- value: key,
- }))}
- />
-
)}
+
+ <>
+
+
+ Severity level
+
+
+
+
+
+
+
+ Definitions
+
+
+ ({
+ label: value,
+ value: key,
+ }))}
+ />
+ >
+
)
}
diff --git a/frontend/src/lib/components/Support/supportLogic.ts b/frontend/src/lib/components/Support/supportLogic.ts
index 003ad6a4a9e..9c4cbd02712 100644
--- a/frontend/src/lib/components/Support/supportLogic.ts
+++ b/frontend/src/lib/components/Support/supportLogic.ts
@@ -45,7 +45,7 @@ function getSentryLink(user: UserType | null, cloudRegion: Region | null | undef
}
const SUPPORT_TICKET_KIND_TO_TITLE: Record = {
- support: 'Ask a question',
+ support: 'Contact support',
feedback: 'Give feedback',
bug: 'Report a bug',
}
@@ -237,6 +237,8 @@ export const supportLogic = kea([
openSupportForm: (values: Partial) => values,
submitZendeskTicket: (form: SupportFormFields) => form,
updateUrlParams: true,
+ openEmailForm: true,
+ closeEmailForm: true,
})),
reducers(() => ({
isSupportFormOpen: [
@@ -246,6 +248,13 @@ export const supportLogic = kea([
closeSupportForm: () => false,
},
],
+ isEmailFormOpen: [
+ false,
+ {
+ openEmailForm: () => true,
+ closeEmailForm: () => false,
+ },
+ ],
})),
forms(({ actions, values }) => ({
sendSupportRequest: {
diff --git a/frontend/src/types.ts b/frontend/src/types.ts
index 9a9535ab5d6..1193a25f62a 100644
--- a/frontend/src/types.ts
+++ b/frontend/src/types.ts
@@ -43,6 +43,7 @@ import { NodeKind } from './queries/schema'
export type Optional = Omit & { [K in keyof T]?: T[K] }
// Keep this in sync with backend constants/features/{product_name}.yml
+
export enum AvailableFeature {
APPS = 'apps',
SLACK_INTEGRATION = 'slack_integration',
@@ -143,6 +144,7 @@ export enum AvailableFeature {
PRODUCT_ANALYTICS_SQL_QUERIES = 'product_analytics_sql_queries',
TWOFA_ENFORCEMENT = '2fa_enforcement',
AUDIT_LOGS = 'audit_logs',
+ PRIORITY_SUPPORT = 'priority_support',
}
type AvailableFeatureUnion = `${AvailableFeature}`
diff --git a/package.json b/package.json
index 786e4234290..f422e9835a6 100644
--- a/package.json
+++ b/package.json
@@ -66,6 +66,7 @@
},
"dependencies": {
"@ant-design/icons": "^4.7.0",
+ "@babel/runtime": "^7.24.0",
"@dnd-kit/core": "^6.0.8",
"@dnd-kit/modifiers": "^6.0.1",
"@dnd-kit/sortable": "^7.0.2",
@@ -96,6 +97,7 @@
"@types/react-transition-group": "^4.4.5",
"@types/react-virtualized": "^9.21.23",
"ajv": "^8.12.0",
+ "algoliasearch": "^4.22.1",
"antd": "^4.17.1",
"antd-dayjs-webpack-plugin": "^1.0.6",
"autoprefixer": "^10.4.13",
@@ -154,6 +156,7 @@
"react-dom": "^18.2.0",
"react-draggable": "^4.2.0",
"react-grid-layout": "^1.3.0",
+ "react-instantsearch": "^7.6.0",
"react-intersection-observer": "^9.5.3",
"react-markdown": "^5.0.3",
"react-modal": "^3.15.1",
@@ -182,7 +185,6 @@
"@babel/preset-env": "^7.22.10",
"@babel/preset-react": "^7.22.5",
"@babel/preset-typescript": "^7.22.5",
- "@babel/runtime": "^7.22.10",
"@cypress/webpack-preprocessor": "^5.17.1",
"@playwright/test": "1.41.2",
"@sentry/types": "7.22.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index d74a1ce9ebd..ca7351e1a36 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -16,6 +16,9 @@ dependencies:
'@ant-design/icons':
specifier: ^4.7.0
version: 4.7.0(react-dom@18.2.0)(react@18.2.0)
+ '@babel/runtime':
+ specifier: ^7.24.0
+ version: 7.24.0
'@dnd-kit/core':
specifier: ^6.0.8
version: 6.0.8(react-dom@18.2.0)(react@18.2.0)
@@ -106,6 +109,9 @@ dependencies:
ajv:
specifier: ^8.12.0
version: 8.12.0
+ algoliasearch:
+ specifier: ^4.22.1
+ version: 4.22.1
antd:
specifier: ^4.17.1
version: 4.17.1(react-dom@18.2.0)(react@18.2.0)
@@ -280,6 +286,9 @@ dependencies:
react-grid-layout:
specifier: ^1.3.0
version: 1.3.4(react-dom@18.2.0)(react@18.2.0)
+ react-instantsearch:
+ specifier: ^7.6.0
+ version: 7.6.0(algoliasearch@4.22.1)(react-dom@18.2.0)(react@18.2.0)
react-intersection-observer:
specifier: ^9.5.3
version: 9.5.3(react@18.2.0)
@@ -365,9 +374,6 @@ devDependencies:
'@babel/preset-typescript':
specifier: ^7.22.5
version: 7.22.5(@babel/core@7.22.10)
- '@babel/runtime':
- specifier: ^7.22.10
- version: 7.22.10
'@cypress/webpack-preprocessor':
specifier: ^5.17.1
version: 5.17.1(@babel/core@7.22.10)(@babel/preset-env@7.22.10)(babel-loader@8.3.0)(webpack@5.88.2)
@@ -704,6 +710,100 @@ packages:
resolution: {integrity: sha512-+u76oB43nOHrF4DDWRLWDCtci7f3QJoEBigemIdIeTi1ODqjx6Tad9NCVnPRwewWlKkVab5PlK8DCtPTyX7S8g==}
dev: true
+ /@algolia/cache-browser-local-storage@4.22.1:
+ resolution: {integrity: sha512-Sw6IAmOCvvP6QNgY9j+Hv09mvkvEIDKjYW8ow0UDDAxSXy664RBNQk3i/0nt7gvceOJ6jGmOTimaZoY1THmU7g==}
+ dependencies:
+ '@algolia/cache-common': 4.22.1
+ dev: false
+
+ /@algolia/cache-common@4.22.1:
+ resolution: {integrity: sha512-TJMBKqZNKYB9TptRRjSUtevJeQVXRmg6rk9qgFKWvOy8jhCPdyNZV1nB3SKGufzvTVbomAukFR8guu/8NRKBTA==}
+ dev: false
+
+ /@algolia/cache-in-memory@4.22.1:
+ resolution: {integrity: sha512-ve+6Ac2LhwpufuWavM/aHjLoNz/Z/sYSgNIXsinGofWOysPilQZPUetqLj8vbvi+DHZZaYSEP9H5SRVXnpsNNw==}
+ dependencies:
+ '@algolia/cache-common': 4.22.1
+ dev: false
+
+ /@algolia/client-account@4.22.1:
+ resolution: {integrity: sha512-k8m+oegM2zlns/TwZyi4YgCtyToackkOpE+xCaKCYfBfDtdGOaVZCM5YvGPtK+HGaJMIN/DoTL8asbM3NzHonw==}
+ dependencies:
+ '@algolia/client-common': 4.22.1
+ '@algolia/client-search': 4.22.1
+ '@algolia/transporter': 4.22.1
+ dev: false
+
+ /@algolia/client-analytics@4.22.1:
+ resolution: {integrity: sha512-1ssi9pyxyQNN4a7Ji9R50nSdISIumMFDwKNuwZipB6TkauJ8J7ha/uO60sPJFqQyqvvI+px7RSNRQT3Zrvzieg==}
+ dependencies:
+ '@algolia/client-common': 4.22.1
+ '@algolia/client-search': 4.22.1
+ '@algolia/requester-common': 4.22.1
+ '@algolia/transporter': 4.22.1
+ dev: false
+
+ /@algolia/client-common@4.22.1:
+ resolution: {integrity: sha512-IvaL5v9mZtm4k4QHbBGDmU3wa/mKokmqNBqPj0K7lcR8ZDKzUorhcGp/u8PkPC/e0zoHSTvRh7TRkGX3Lm7iOQ==}
+ dependencies:
+ '@algolia/requester-common': 4.22.1
+ '@algolia/transporter': 4.22.1
+ dev: false
+
+ /@algolia/client-personalization@4.22.1:
+ resolution: {integrity: sha512-sl+/klQJ93+4yaqZ7ezOttMQ/nczly/3GmgZXJ1xmoewP5jmdP/X/nV5U7EHHH3hCUEHeN7X1nsIhGPVt9E1cQ==}
+ dependencies:
+ '@algolia/client-common': 4.22.1
+ '@algolia/requester-common': 4.22.1
+ '@algolia/transporter': 4.22.1
+ dev: false
+
+ /@algolia/client-search@4.22.1:
+ resolution: {integrity: sha512-yb05NA4tNaOgx3+rOxAmFztgMTtGBi97X7PC3jyNeGiwkAjOZc2QrdZBYyIdcDLoI09N0gjtpClcackoTN0gPA==}
+ dependencies:
+ '@algolia/client-common': 4.22.1
+ '@algolia/requester-common': 4.22.1
+ '@algolia/transporter': 4.22.1
+ dev: false
+
+ /@algolia/events@4.0.1:
+ resolution: {integrity: sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==}
+ dev: false
+
+ /@algolia/logger-common@4.22.1:
+ resolution: {integrity: sha512-OnTFymd2odHSO39r4DSWRFETkBufnY2iGUZNrMXpIhF5cmFE8pGoINNPzwg02QLBlGSaLqdKy0bM8S0GyqPLBg==}
+ dev: false
+
+ /@algolia/logger-console@4.22.1:
+ resolution: {integrity: sha512-O99rcqpVPKN1RlpgD6H3khUWylU24OXlzkavUAMy6QZd1776QAcauE3oP8CmD43nbaTjBexZj2nGsBH9Tc0FVA==}
+ dependencies:
+ '@algolia/logger-common': 4.22.1
+ dev: false
+
+ /@algolia/requester-browser-xhr@4.22.1:
+ resolution: {integrity: sha512-dtQGYIg6MteqT1Uay3J/0NDqD+UciHy3QgRbk7bNddOJu+p3hzjTRYESqEnoX/DpEkaNYdRHUKNylsqMpgwaEw==}
+ dependencies:
+ '@algolia/requester-common': 4.22.1
+ dev: false
+
+ /@algolia/requester-common@4.22.1:
+ resolution: {integrity: sha512-dgvhSAtg2MJnR+BxrIFqlLtkLlVVhas9HgYKMk2Uxiy5m6/8HZBL40JVAMb2LovoPFs9I/EWIoFVjOrFwzn5Qg==}
+ dev: false
+
+ /@algolia/requester-node-http@4.22.1:
+ resolution: {integrity: sha512-JfmZ3MVFQkAU+zug8H3s8rZ6h0ahHZL/SpMaSasTCGYR5EEJsCc8SI5UZ6raPN2tjxa5bxS13BRpGSBUens7EA==}
+ dependencies:
+ '@algolia/requester-common': 4.22.1
+ dev: false
+
+ /@algolia/transporter@4.22.1:
+ resolution: {integrity: sha512-kzWgc2c9IdxMa3YqA6TN0NW5VrKYYW/BELIn7vnLyn+U/RFdZ4lxxt9/8yq3DKV5snvoDzzO4ClyejZRdV3lMQ==}
+ dependencies:
+ '@algolia/cache-common': 4.22.1
+ '@algolia/logger-common': 4.22.1
+ '@algolia/requester-common': 4.22.1
+ dev: false
+
/@alloc/quick-lru@5.2.0:
resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
engines: {node: '>=10'}
@@ -735,7 +835,7 @@ packages:
dependencies:
'@ant-design/colors': 6.0.0
'@ant-design/icons-svg': 4.2.1
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
classnames: 2.3.2
rc-util: 5.24.4(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
@@ -747,7 +847,7 @@ packages:
peerDependencies:
react: '>=16.0.0'
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
classnames: 2.3.2
json2mq: 0.2.0
lodash: 4.17.21
@@ -3342,8 +3442,8 @@ packages:
resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==}
dev: true
- /@babel/runtime@7.22.10:
- resolution: {integrity: sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ==}
+ /@babel/runtime@7.24.0:
+ resolution: {integrity: sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==}
engines: {node: '>=6.9.0'}
dependencies:
regenerator-runtime: 0.14.0
@@ -5099,13 +5199,13 @@ packages:
/@radix-ui/number@1.0.1:
resolution: {integrity: sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==}
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
dev: true
/@radix-ui/primitive@1.0.1:
resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==}
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
dev: true
/@radix-ui/react-arrow@1.0.3(@types/react-dom@18.2.14)(@types/react@17.0.52)(react-dom@18.2.0)(react@18.2.0):
@@ -5121,7 +5221,7 @@ packages:
'@types/react-dom':
optional: true
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
'@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@17.0.52)(react-dom@18.2.0)(react@18.2.0)
'@types/react': 17.0.52
'@types/react-dom': 18.2.14
@@ -5142,7 +5242,7 @@ packages:
'@types/react-dom':
optional: true
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
'@radix-ui/react-compose-refs': 1.0.1(@types/react@17.0.52)(react@18.2.0)
'@radix-ui/react-context': 1.0.1(@types/react@17.0.52)(react@18.2.0)
'@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@17.0.52)(react-dom@18.2.0)(react@18.2.0)
@@ -5162,7 +5262,7 @@ packages:
'@types/react':
optional: true
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
'@types/react': 17.0.52
react: 18.2.0
dev: true
@@ -5176,7 +5276,7 @@ packages:
'@types/react':
optional: true
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
'@types/react': 17.0.52
react: 18.2.0
dev: true
@@ -5190,7 +5290,7 @@ packages:
'@types/react':
optional: true
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
'@types/react': 17.0.52
react: 18.2.0
dev: true
@@ -5208,7 +5308,7 @@ packages:
'@types/react-dom':
optional: true
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
'@radix-ui/primitive': 1.0.1
'@radix-ui/react-compose-refs': 1.0.1(@types/react@17.0.52)(react@18.2.0)
'@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@17.0.52)(react-dom@18.2.0)(react@18.2.0)
@@ -5229,7 +5329,7 @@ packages:
'@types/react':
optional: true
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
'@types/react': 17.0.52
react: 18.2.0
dev: true
@@ -5247,7 +5347,7 @@ packages:
'@types/react-dom':
optional: true
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
'@radix-ui/react-compose-refs': 1.0.1(@types/react@17.0.52)(react@18.2.0)
'@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@17.0.52)(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-use-callback-ref': 1.0.1(@types/react@17.0.52)(react@18.2.0)
@@ -5266,7 +5366,7 @@ packages:
'@types/react':
optional: true
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
'@radix-ui/react-use-layout-effect': 1.0.1(@types/react@17.0.52)(react@18.2.0)
'@types/react': 17.0.52
react: 18.2.0
@@ -5285,7 +5385,7 @@ packages:
'@types/react-dom':
optional: true
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
'@floating-ui/react-dom': 2.0.1(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.2.14)(@types/react@17.0.52)(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-compose-refs': 1.0.1(@types/react@17.0.52)(react@18.2.0)
@@ -5315,7 +5415,7 @@ packages:
'@types/react-dom':
optional: true
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
'@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@17.0.52)(react-dom@18.2.0)(react@18.2.0)
'@types/react': 17.0.52
'@types/react-dom': 18.2.14
@@ -5336,7 +5436,7 @@ packages:
'@types/react-dom':
optional: true
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
'@radix-ui/react-slot': 1.0.2(@types/react@17.0.52)(react@18.2.0)
'@types/react': 17.0.52
'@types/react-dom': 18.2.14
@@ -5357,7 +5457,7 @@ packages:
'@types/react-dom':
optional: true
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
'@radix-ui/primitive': 1.0.1
'@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.14)(@types/react@17.0.52)(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-compose-refs': 1.0.1(@types/react@17.0.52)(react@18.2.0)
@@ -5386,7 +5486,7 @@ packages:
'@types/react-dom':
optional: true
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
'@radix-ui/number': 1.0.1
'@radix-ui/primitive': 1.0.1
'@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.14)(@types/react@17.0.52)(react-dom@18.2.0)(react@18.2.0)
@@ -5427,7 +5527,7 @@ packages:
'@types/react-dom':
optional: true
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
'@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@17.0.52)(react-dom@18.2.0)(react@18.2.0)
'@types/react': 17.0.52
'@types/react-dom': 18.2.14
@@ -5444,7 +5544,7 @@ packages:
'@types/react':
optional: true
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
'@radix-ui/react-compose-refs': 1.0.1(@types/react@17.0.52)(react@18.2.0)
'@types/react': 17.0.52
react: 18.2.0
@@ -5463,7 +5563,7 @@ packages:
'@types/react-dom':
optional: true
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
'@radix-ui/primitive': 1.0.1
'@radix-ui/react-context': 1.0.1(@types/react@17.0.52)(react@18.2.0)
'@radix-ui/react-direction': 1.0.1(@types/react@17.0.52)(react@18.2.0)
@@ -5490,7 +5590,7 @@ packages:
'@types/react-dom':
optional: true
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
'@radix-ui/primitive': 1.0.1
'@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@17.0.52)(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-use-controllable-state': 1.0.1(@types/react@17.0.52)(react@18.2.0)
@@ -5513,7 +5613,7 @@ packages:
'@types/react-dom':
optional: true
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
'@radix-ui/primitive': 1.0.1
'@radix-ui/react-context': 1.0.1(@types/react@17.0.52)(react@18.2.0)
'@radix-ui/react-direction': 1.0.1(@types/react@17.0.52)(react@18.2.0)
@@ -5536,7 +5636,7 @@ packages:
'@types/react':
optional: true
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
'@types/react': 17.0.52
react: 18.2.0
dev: true
@@ -5550,7 +5650,7 @@ packages:
'@types/react':
optional: true
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
'@radix-ui/react-use-callback-ref': 1.0.1(@types/react@17.0.52)(react@18.2.0)
'@types/react': 17.0.52
react: 18.2.0
@@ -5565,7 +5665,7 @@ packages:
'@types/react':
optional: true
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
'@radix-ui/react-use-callback-ref': 1.0.1(@types/react@17.0.52)(react@18.2.0)
'@types/react': 17.0.52
react: 18.2.0
@@ -5580,7 +5680,7 @@ packages:
'@types/react':
optional: true
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
'@types/react': 17.0.52
react: 18.2.0
dev: true
@@ -5594,7 +5694,7 @@ packages:
'@types/react':
optional: true
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
'@types/react': 17.0.52
react: 18.2.0
dev: true
@@ -5608,7 +5708,7 @@ packages:
'@types/react':
optional: true
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
'@radix-ui/rect': 1.0.1
'@types/react': 17.0.52
react: 18.2.0
@@ -5623,7 +5723,7 @@ packages:
'@types/react':
optional: true
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
'@radix-ui/react-use-layout-effect': 1.0.1(@types/react@17.0.52)(react@18.2.0)
'@types/react': 17.0.52
react: 18.2.0
@@ -5642,7 +5742,7 @@ packages:
'@types/react-dom':
optional: true
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
'@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@17.0.52)(react-dom@18.2.0)(react@18.2.0)
'@types/react': 17.0.52
'@types/react-dom': 18.2.14
@@ -5653,7 +5753,7 @@ packages:
/@radix-ui/rect@1.0.1:
resolution: {integrity: sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==}
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
dev: true
/@react-hook/latest@1.0.3(react@18.2.0):
@@ -5745,13 +5845,13 @@ packages:
/@remirror/core-constants@2.0.0:
resolution: {integrity: sha512-vpePPMecHJllBqCWXl6+FIcZqS+tRUM2kSCCKFeEo1H3XUEv3ocijBIPhnlSAa7g6maX+12ATTgxrOsLpWVr2g==}
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
dev: false
/@remirror/core-helpers@2.0.1:
resolution: {integrity: sha512-s8M1pn33aBUhduvD1QR02uUQMegnFkGaTr4c1iBzxTTyg0rbQstzuQ7Q8TkL6n64JtgCdJS9jLz2dONb2meBKQ==}
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
'@linaria/core': 3.0.0-beta.13
'@remirror/core-constants': 2.0.0
'@remirror/types': 1.0.0
@@ -6172,7 +6272,7 @@ packages:
'@storybook/client-logger': 7.5.1
'@storybook/core-events': 7.5.1
'@storybook/global': 5.0.0
- qs: 6.11.2
+ qs: 6.12.0
telejson: 7.2.0
tiny-invariant: 1.3.1
dev: true
@@ -6194,7 +6294,7 @@ packages:
'@storybook/client-logger': 7.6.3
'@storybook/core-events': 7.6.3
'@storybook/global': 5.0.0
- qs: 6.11.2
+ qs: 6.12.0
telejson: 7.2.0
tiny-invariant: 1.3.1
dev: true
@@ -7146,7 +7246,7 @@ packages:
engines: {node: '>=12'}
dependencies:
'@babel/code-frame': 7.22.10
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
'@types/aria-query': 4.2.2
aria-query: 5.1.3
chalk: 4.1.2
@@ -7159,7 +7259,7 @@ packages:
engines: {node: '>=8', npm: '>=6', yarn: '>=1'}
dependencies:
'@adobe/css-tools': 4.0.1
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
'@types/testing-library__jest-dom': 5.14.5
aria-query: 5.1.3
chalk: 3.0.0
@@ -7185,7 +7285,7 @@ packages:
react-test-renderer:
optional: true
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
'@types/react': 17.0.52
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
@@ -7199,7 +7299,7 @@ packages:
react: ^18.0.0
react-dom: ^18.0.0
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
'@testing-library/dom': 8.19.0
'@types/react-dom': 18.2.14
react: 18.2.0
@@ -7212,7 +7312,7 @@ packages:
peerDependencies:
'@testing-library/dom': '>=7.21.4'
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
'@testing-library/dom': 8.19.0
dev: true
@@ -7813,6 +7913,10 @@ packages:
resolution: {integrity: sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA==}
dev: true
+ /@types/dom-speech-recognition@0.0.1:
+ resolution: {integrity: sha512-udCxb8DvjcDKfk1WTBzDsxFbLgYxmQGKrE/ricoMqHRNjSlSUCcamVTA5lIQqzY10mY5qCY0QDwBfFEwhfoDPw==}
+ dev: false
+
/@types/dompurify@3.0.3:
resolution: {integrity: sha512-odiGr/9/qMqjcBOe5UhcNLOFHSYmKFOyr+bJ/Xu3Qp4k1pNPAlNLUVNNLcLfjQI7+W7ObX58EdD3H+3p3voOvA==}
dependencies:
@@ -7883,6 +7987,10 @@ packages:
resolution: {integrity: sha512-uK2z1ZHJyC0nQRbuovXFt4mzXDwf27vQeUWNhfKGwRcWW429GOhP8HxUHlM6TLH4bzmlv/HlEjpvJh3JfmGsAA==}
dev: false
+ /@types/google.maps@3.55.4:
+ resolution: {integrity: sha512-Ip3IfRs3RZjeC88V8FGnWQTQXeS5gkJedPSosN6DMi9Xs8buGTpsPq6UhREoZsGH+62VoQ6jiRBUR8R77If69w==}
+ dev: false
+
/@types/graceful-fs@4.1.5:
resolution: {integrity: sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==}
dependencies:
@@ -7895,6 +8003,10 @@ packages:
'@types/unist': 2.0.6
dev: false
+ /@types/hogan.js@3.0.5:
+ resolution: {integrity: sha512-/uRaY3HGPWyLqOyhgvW9Aa43BNnLZrNeQxl2p8wqId4UHMfPKolSB+U7BlZyO1ng7MkLnyEAItsBzCG0SDhqrA==}
+ dev: false
+
/@types/html-minifier-terser@6.1.0:
resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==}
dev: true
@@ -8083,7 +8195,6 @@ packages:
/@types/qs@6.9.12:
resolution: {integrity: sha512-bZcOkJ6uWrL0Qb2NAWKa7TBU+mJHPzhx9jjLL1KHF+XpzEcR7EXHvjbHlGtR/IsP1vyPrehuS6XqkmaePy//mg==}
- dev: true
/@types/query-selector-shadow-dom@1.0.0:
resolution: {integrity: sha512-cTGo8ZxW0WXFDV7gvL/XCq4213t6S/yWaSGqscnXUTNDWqwnsYKegB/VAzQDwzmACoLzIbGbYXdjJOgfPLu7Ig==}
@@ -8646,6 +8757,10 @@ packages:
resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==}
dev: true
+ /abbrev@1.1.1:
+ resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==}
+ dev: false
+
/accepts@1.3.8:
resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
engines: {node: '>= 0.6'}
@@ -8776,6 +8891,34 @@ packages:
require-from-string: 2.0.2
uri-js: 4.4.1
+ /algoliasearch-helper@3.16.2(algoliasearch@4.22.1):
+ resolution: {integrity: sha512-Yl/Gu5Cq4Z5s/AJ0jR37OPI1H3+z7PHz657ibyaXgMOaWvPlZ3OACN13N+7HCLPUlB0BN+8BtmrG/CqTilowBA==}
+ peerDependencies:
+ algoliasearch: '>= 3.1 < 6'
+ dependencies:
+ '@algolia/events': 4.0.1
+ algoliasearch: 4.22.1
+ dev: false
+
+ /algoliasearch@4.22.1:
+ resolution: {integrity: sha512-jwydKFQJKIx9kIZ8Jm44SdpigFwRGPESaxZBaHSV0XWN2yBJAOT4mT7ppvlrpA4UGzz92pqFnVKr/kaZXrcreg==}
+ dependencies:
+ '@algolia/cache-browser-local-storage': 4.22.1
+ '@algolia/cache-common': 4.22.1
+ '@algolia/cache-in-memory': 4.22.1
+ '@algolia/client-account': 4.22.1
+ '@algolia/client-analytics': 4.22.1
+ '@algolia/client-common': 4.22.1
+ '@algolia/client-personalization': 4.22.1
+ '@algolia/client-search': 4.22.1
+ '@algolia/logger-common': 4.22.1
+ '@algolia/logger-console': 4.22.1
+ '@algolia/requester-browser-xhr': 4.22.1
+ '@algolia/requester-common': 4.22.1
+ '@algolia/requester-node-http': 4.22.1
+ '@algolia/transporter': 4.22.1
+ dev: false
+
/ansi-colors@4.1.3:
resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
engines: {node: '>=6'}
@@ -8853,7 +8996,7 @@ packages:
'@ant-design/colors': 6.0.0
'@ant-design/icons': 4.7.0(react-dom@18.2.0)(react@18.2.0)
'@ant-design/react-slick': 0.28.1(react@18.2.0)
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
'@ctrl/tinycolor': 3.4.1
array-tree-filter: 2.1.0
classnames: 2.3.2
@@ -9646,7 +9789,6 @@ packages:
function-bind: 1.1.2
get-intrinsic: 1.2.4
set-function-length: 1.2.2
- dev: true
/callsites@3.1.0:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
@@ -11040,7 +11182,6 @@ packages:
es-define-property: 1.0.0
es-errors: 1.3.0
gopd: 1.0.1
- dev: true
/define-lazy-prop@2.0.0:
resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==}
@@ -11201,7 +11342,7 @@ packages:
/dom-helpers@5.2.1:
resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==}
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
csstype: 3.1.1
dev: false
@@ -11525,12 +11666,10 @@ packages:
engines: {node: '>= 0.4'}
dependencies:
get-intrinsic: 1.2.4
- dev: true
/es-errors@1.3.0:
resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
engines: {node: '>= 0.4'}
- dev: true
/es-get-iterator@1.1.2:
resolution: {integrity: sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==}
@@ -12758,7 +12897,6 @@ packages:
has-proto: 1.0.3
has-symbols: 1.0.3
hasown: 2.0.2
- dev: true
/get-nonce@1.0.1:
resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==}
@@ -13056,7 +13194,6 @@ packages:
resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
dependencies:
es-define-property: 1.0.0
- dev: true
/has-proto@1.0.1:
resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==}
@@ -13065,7 +13202,6 @@ packages:
/has-proto@1.0.3:
resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==}
engines: {node: '>= 0.4'}
- dev: true
/has-symbols@1.0.3:
resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
@@ -13102,7 +13238,6 @@ packages:
engines: {node: '>= 0.4'}
dependencies:
function-bind: 1.1.2
- dev: true
/hast-util-parse-selector@2.2.5:
resolution: {integrity: sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==}
@@ -13139,9 +13274,17 @@ packages:
/history@5.3.0:
resolution: {integrity: sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==}
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
dev: true
+ /hogan.js@3.0.2:
+ resolution: {integrity: sha512-RqGs4wavGYJWE07t35JQccByczmNUXQT0E12ZYV1VKYu5UiAU9lsos/yBAcf840+zrUQQxgVduCR5/B8nNtibg==}
+ hasBin: true
+ dependencies:
+ mkdirp: 0.3.0
+ nopt: 1.0.10
+ dev: false
+
/hoist-non-react-statics@3.3.2:
resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==}
dependencies:
@@ -13166,6 +13309,10 @@ packages:
lru-cache: 6.0.0
dev: true
+ /htm@3.1.1:
+ resolution: {integrity: sha512-983Vyg8NwUE7JkZ6NmOqpCZ+sh1bKv2iYTlUkzlWmA5JD2acKoxd4KVxbMmxX/85mtfdnDmTFoNKcg5DGAvxNQ==}
+ dev: false
+
/html-encoding-sniffer@3.0.0:
resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==}
engines: {node: '>=12'}
@@ -13459,6 +13606,30 @@ packages:
wrap-ansi: 7.0.0
dev: true
+ /instantsearch-ui-components@0.3.0:
+ resolution: {integrity: sha512-PCVvw9L0YHZs99ZZNRzmF4ghre6SVq2tiz7yCPIamMR+2pccpFXwtdJ2Gmdg+FF4SLif4d8TldvxWFOB0+L5gg==}
+ dev: false
+
+ /instantsearch.js@4.65.0(algoliasearch@4.22.1):
+ resolution: {integrity: sha512-LCJErlVwmsh/41CiEJRcoVPxfa+06yb1qmZfcvzXOMwC6ydb/yfBlFxQgjsQKYA2adwH40c3YF34Jq+V5YiaMg==}
+ peerDependencies:
+ algoliasearch: '>= 3.1 < 6'
+ dependencies:
+ '@algolia/events': 4.0.1
+ '@types/dom-speech-recognition': 0.0.1
+ '@types/google.maps': 3.55.4
+ '@types/hogan.js': 3.0.5
+ '@types/qs': 6.9.12
+ algoliasearch: 4.22.1
+ algoliasearch-helper: 3.16.2(algoliasearch@4.22.1)
+ hogan.js: 3.0.2
+ htm: 3.1.1
+ instantsearch-ui-components: 0.3.0
+ preact: 10.19.6
+ qs: 6.9.7
+ search-insights: 2.13.0
+ dev: false
+
/internal-slot@1.0.3:
resolution: {integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==}
engines: {node: '>= 0.4'}
@@ -13564,7 +13735,7 @@ packages:
resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==}
engines: {node: '>= 0.4'}
dependencies:
- call-bind: 1.0.5
+ call-bind: 1.0.7
has-tostringtag: 1.0.0
/is-buffer@1.1.6:
@@ -13631,7 +13802,7 @@ packages:
/is-finalizationregistry@1.0.2:
resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==}
dependencies:
- call-bind: 1.0.5
+ call-bind: 1.0.7
dev: true
/is-fullwidth-code-point@2.0.0:
@@ -13830,8 +14001,8 @@ packages:
/is-weakset@2.0.2:
resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==}
dependencies:
- call-bind: 1.0.5
- get-intrinsic: 1.2.2
+ call-bind: 1.0.7
+ get-intrinsic: 1.2.4
/is-what@3.14.1:
resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==}
@@ -15604,6 +15775,11 @@ packages:
resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==}
dev: true
+ /mkdirp@0.3.0:
+ resolution: {integrity: sha512-OHsdUcVAQ6pOtg5JYWpCBo9W/GySVuwvP9hueRMW7UqshC0tbfzLv8wjySTPm3tfUZ/21CE9E1pJagOA91Pxew==}
+ deprecated: Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)
+ dev: false
+
/mkdirp@0.5.6:
resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
hasBin: true
@@ -15805,6 +15981,13 @@ packages:
/node-releases@2.0.14:
resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==}
+ /nopt@1.0.10:
+ resolution: {integrity: sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==}
+ hasBin: true
+ dependencies:
+ abbrev: 1.1.1
+ dev: false
+
/normalize-package-data@2.5.0:
resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==}
dependencies:
@@ -16437,7 +16620,7 @@ packages:
resolution: {integrity: sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ==}
engines: {node: '>=10'}
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
dev: true
/postcss-attribute-case-insensitive@6.0.2(postcss@8.4.31):
@@ -17504,7 +17687,7 @@ packages:
prosemirror-state: ^1
prosemirror-view: ^1
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
'@remirror/core-constants': 2.0.0
'@remirror/core-helpers': 2.0.1
escape-string-regexp: 4.0.0
@@ -17644,6 +17827,11 @@ packages:
side-channel: 1.0.6
dev: true
+ /qs@6.9.7:
+ resolution: {integrity: sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==}
+ engines: {node: '>=0.6'}
+ dev: false
+
/query-selector-shadow-dom@1.0.0:
resolution: {integrity: sha512-bK0/0cCI+R8ZmOF1QjT7HupDUYCxbf/9TJgAmSXQxZpftXmTAeil9DRoCnTDkWbvOyZzhcMBwKpptWcdkGFIMg==}
dev: false
@@ -17703,7 +17891,7 @@ packages:
react: '>=16.9.0'
react-dom: '>=16.9.0'
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
classnames: 2.3.2
dom-align: 1.12.3
lodash: 4.17.21
@@ -17719,7 +17907,7 @@ packages:
react: '>=16.9.0'
react-dom: '>=16.9.0'
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
array-tree-filter: 2.1.0
rc-tree-select: 4.6.3(react-dom@18.2.0)(react@18.2.0)
rc-trigger: 5.3.3(react-dom@18.2.0)(react@18.2.0)
@@ -17735,7 +17923,7 @@ packages:
react: '>=16.9.0'
react-dom: '>=16.9.0'
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
classnames: 2.3.2
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
@@ -17747,7 +17935,7 @@ packages:
react: '>=16.9.0'
react-dom: '>=16.9.0'
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
classnames: 2.3.2
rc-motion: 2.6.2(react-dom@18.2.0)(react@18.2.0)
rc-util: 5.24.4(react-dom@18.2.0)(react@18.2.0)
@@ -17762,7 +17950,7 @@ packages:
react: '>=16.9.0'
react-dom: '>=16.9.0'
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
classnames: 2.3.2
rc-motion: 2.6.2(react-dom@18.2.0)(react@18.2.0)
rc-util: 5.24.4(react-dom@18.2.0)(react@18.2.0)
@@ -17776,7 +17964,7 @@ packages:
react: '>=16.9.0'
react-dom: '>=16.9.0'
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
classnames: 2.3.2
rc-util: 5.24.4(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
@@ -17789,7 +17977,7 @@ packages:
react: '*'
react-dom: '*'
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
classnames: 2.3.2
rc-trigger: 5.3.3(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
@@ -17803,7 +17991,7 @@ packages:
react: '>= 16.9.0'
react-dom: '>= 16.9.0'
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
async-validator: 4.2.5
rc-util: 5.24.4(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
@@ -17816,7 +18004,7 @@ packages:
react: '>=16.9.0'
react-dom: '>=16.9.0'
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
classnames: 2.3.2
rc-dialog: 8.6.0(react-dom@18.2.0)(react@18.2.0)
rc-util: 5.24.4(react-dom@18.2.0)(react@18.2.0)
@@ -17830,7 +18018,7 @@ packages:
react: '>=16.9.0'
react-dom: '>=16.9.0'
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
classnames: 2.3.2
rc-util: 5.24.4(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
@@ -17843,7 +18031,7 @@ packages:
react: '>=16.9.0'
react-dom: '>=16.9.0'
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
classnames: 2.3.2
rc-menu: 9.0.14(react-dom@18.2.0)(react@18.2.0)
rc-textarea: 0.3.4(react-dom@18.2.0)(react@18.2.0)
@@ -17859,7 +18047,7 @@ packages:
react: '>=16.9.0'
react-dom: '>=16.9.0'
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
classnames: 2.3.2
rc-motion: 2.6.2(react-dom@18.2.0)(react@18.2.0)
rc-overflow: 1.2.8(react-dom@18.2.0)(react@18.2.0)
@@ -17876,7 +18064,7 @@ packages:
react: '>=16.9.0'
react-dom: '>=16.9.0'
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
classnames: 2.3.2
rc-util: 5.24.4(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
@@ -17890,7 +18078,7 @@ packages:
react: '>=16.9.0'
react-dom: '>=16.9.0'
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
classnames: 2.3.2
rc-motion: 2.6.2(react-dom@18.2.0)(react@18.2.0)
rc-util: 5.24.4(react-dom@18.2.0)(react@18.2.0)
@@ -17904,7 +18092,7 @@ packages:
react: '>=16.9.0'
react-dom: '>=16.9.0'
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
classnames: 2.3.2
rc-resize-observer: 1.2.0(react-dom@18.2.0)(react@18.2.0)
rc-util: 5.24.4(react-dom@18.2.0)(react@18.2.0)
@@ -17918,7 +18106,7 @@ packages:
react: '>=16.9.0'
react-dom: '>=16.9.0'
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
classnames: 2.3.2
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
@@ -17931,7 +18119,7 @@ packages:
react: '>=16.9.0'
react-dom: '>=16.9.0'
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
classnames: 2.3.2
date-fns: 2.29.3
dayjs: 1.11.6
@@ -17949,7 +18137,7 @@ packages:
react: '>=16.9.0'
react-dom: '>=16.9.0'
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
classnames: 2.3.2
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
@@ -17962,7 +18150,7 @@ packages:
react: '>=16.9.0'
react-dom: '>=16.9.0'
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
classnames: 2.3.2
rc-util: 5.24.4(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
@@ -17975,7 +18163,7 @@ packages:
react: '>=16.9.0'
react-dom: '>=16.9.0'
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
classnames: 2.3.2
rc-util: 5.24.4(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
@@ -17990,7 +18178,7 @@ packages:
react: '*'
react-dom: '*'
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
classnames: 2.3.2
rc-motion: 2.6.2(react-dom@18.2.0)(react@18.2.0)
rc-overflow: 1.2.8(react-dom@18.2.0)(react@18.2.0)
@@ -18008,7 +18196,7 @@ packages:
react: '>=16.9.0'
react-dom: '>=16.9.0'
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
classnames: 2.3.2
rc-tooltip: 5.2.2(react-dom@18.2.0)(react@18.2.0)
rc-util: 5.24.4(react-dom@18.2.0)(react@18.2.0)
@@ -18024,7 +18212,7 @@ packages:
react: '>=16.9.0'
react-dom: '>=16.9.0'
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
classnames: 2.3.2
rc-util: 5.24.4(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
@@ -18037,7 +18225,7 @@ packages:
react: '>=16.9.0'
react-dom: '>=16.9.0'
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
classnames: 2.3.2
rc-util: 5.24.4(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
@@ -18051,7 +18239,7 @@ packages:
react: '>=16.9.0'
react-dom: '>=16.9.0'
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
classnames: 2.3.2
rc-resize-observer: 1.2.0(react-dom@18.2.0)(react@18.2.0)
rc-util: 5.24.4(react-dom@18.2.0)(react@18.2.0)
@@ -18067,7 +18255,7 @@ packages:
react: '>=16.9.0'
react-dom: '>=16.9.0'
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
classnames: 2.3.2
rc-dropdown: 3.2.0(react-dom@18.2.0)(react@18.2.0)
rc-menu: 9.0.14(react-dom@18.2.0)(react@18.2.0)
@@ -18083,7 +18271,7 @@ packages:
react: '>=16.9.0'
react-dom: '>=16.9.0'
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
classnames: 2.3.2
rc-resize-observer: 1.2.0(react-dom@18.2.0)(react@18.2.0)
rc-util: 5.24.4(react-dom@18.2.0)(react@18.2.0)
@@ -18097,7 +18285,7 @@ packages:
react: '>=16.9.0'
react-dom: '>=16.9.0'
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
rc-trigger: 5.3.3(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
@@ -18109,7 +18297,7 @@ packages:
react: '>=16.9.0'
react-dom: '>=16.9.0'
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
classnames: 2.3.2
rc-trigger: 5.3.3(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
@@ -18122,7 +18310,7 @@ packages:
react: '*'
react-dom: '*'
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
classnames: 2.3.2
rc-select: 13.1.1(react-dom@18.2.0)(react@18.2.0)
rc-tree: 5.2.2(react-dom@18.2.0)(react@18.2.0)
@@ -18138,7 +18326,7 @@ packages:
react: '*'
react-dom: '*'
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
classnames: 2.3.2
rc-motion: 2.6.2(react-dom@18.2.0)(react@18.2.0)
rc-util: 5.24.4(react-dom@18.2.0)(react@18.2.0)
@@ -18154,7 +18342,7 @@ packages:
react: '>=16.9.0'
react-dom: '>=16.9.0'
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
classnames: 2.3.2
rc-align: 4.0.12(react-dom@18.2.0)(react@18.2.0)
rc-motion: 2.6.2(react-dom@18.2.0)(react@18.2.0)
@@ -18169,7 +18357,7 @@ packages:
react: '>=16.9.0'
react-dom: '>=16.9.0'
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
classnames: 2.3.2
rc-util: 5.24.4(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
@@ -18182,7 +18370,7 @@ packages:
react: '>=16.9.0'
react-dom: '>=16.9.0'
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
react-is: 16.13.1
@@ -18196,7 +18384,7 @@ packages:
react: '*'
react-dom: '*'
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
classnames: 2.3.2
rc-resize-observer: 1.2.0(react-dom@18.2.0)(react@18.2.0)
rc-util: 5.24.4(react-dom@18.2.0)(react@18.2.0)
@@ -18289,7 +18477,7 @@ packages:
peerDependencies:
react: '>=16.13.1'
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
react: 18.2.0
dev: true
@@ -18308,6 +18496,36 @@ packages:
react-resizable: 3.0.5(react-dom@18.2.0)(react@18.2.0)
dev: false
+ /react-instantsearch-core@7.6.0(algoliasearch@4.22.1)(react@18.2.0):
+ resolution: {integrity: sha512-FBTwAJAmNSha6pSFOP1fTPjIbvyv5btS49SsdWPvQ981yiMD+zWtvCXZlVTxrBGVH6mYGbmBT0lCHTOm4kpdOg==}
+ peerDependencies:
+ algoliasearch: '>= 3.1 < 5'
+ react: '>= 16.8.0 < 19'
+ dependencies:
+ '@babel/runtime': 7.24.0
+ algoliasearch: 4.22.1
+ algoliasearch-helper: 3.16.2(algoliasearch@4.22.1)
+ instantsearch.js: 4.65.0(algoliasearch@4.22.1)
+ react: 18.2.0
+ use-sync-external-store: 1.2.0(react@18.2.0)
+ dev: false
+
+ /react-instantsearch@7.6.0(algoliasearch@4.22.1)(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-9bvIkVeHUK4vaKdFqJZFbI3+1hmYDKWG52RJe+OxfLPvu4EkiSsnIc8qf3A0q0GnIdb0+HUIeZRBkUt/vYYCbQ==}
+ peerDependencies:
+ algoliasearch: '>= 3.1 < 5'
+ react: '>= 16.8.0 < 19'
+ react-dom: '>= 16.8.0 < 19'
+ dependencies:
+ '@babel/runtime': 7.24.0
+ algoliasearch: 4.22.1
+ instantsearch-ui-components: 0.3.0
+ instantsearch.js: 4.65.0(algoliasearch@4.22.1)
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+ react-instantsearch-core: 7.6.0(algoliasearch@4.22.1)(react@18.2.0)
+ dev: false
+
/react-intersection-observer@9.5.3(react@18.2.0):
resolution: {integrity: sha512-NJzagSdUPS5rPhaLsHXYeJbsvdpbJwL6yCHtMk91hc0ufQ2BnXis+0QQ9NBh6n9n+Q3OyjR6OQLShYbaNBkThQ==}
peerDependencies:
@@ -18458,7 +18676,7 @@ packages:
peerDependencies:
react: '>= 0.14.0'
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
highlight.js: 10.7.3
lowlight: 1.20.0
prismjs: 1.29.0
@@ -18472,7 +18690,7 @@ packages:
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
react: 18.2.0
use-composed-ref: 1.3.0(react@18.2.0)
use-latest: 1.2.1(@types/react@17.0.52)(react@18.2.0)
@@ -18497,7 +18715,7 @@ packages:
react: '>=16.6.0'
react-dom: '>=16.6.0'
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
dom-helpers: 5.2.1
loose-envify: 1.4.0
prop-types: 15.8.1
@@ -18511,7 +18729,7 @@ packages:
react: ^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0
react-dom: ^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
clsx: 1.2.1
dom-helpers: 5.2.1
loose-envify: 1.4.0
@@ -18655,7 +18873,7 @@ packages:
/redux@4.2.0:
resolution: {integrity: sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA==}
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
dev: false
/reflect.getprototypeof@1.0.4:
@@ -18695,7 +18913,7 @@ packages:
/regenerator-transform@0.15.2:
resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==}
dependencies:
- '@babel/runtime': 7.22.10
+ '@babel/runtime': 7.24.0
dev: true
/regexp.prototype.flags@1.4.3:
@@ -19276,6 +19494,10 @@ packages:
compute-scroll-into-view: 1.0.16
dev: false
+ /search-insights@2.13.0:
+ resolution: {integrity: sha512-Orrsjf9trHHxFRuo9/rzm0KIWmgzE8RMlZMzuhZOJ01Rnz3D0YBAe+V6473t6/H6c7irs6Lt48brULAiRWb3Vw==}
+ dev: false
+
/semver-compare@1.0.0:
resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==}
dev: true
@@ -19360,7 +19582,6 @@ packages:
get-intrinsic: 1.2.4
gopd: 1.0.1
has-property-descriptors: 1.0.2
- dev: true
/set-function-name@2.0.1:
resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==}
diff --git a/tailwind.config.js b/tailwind.config.js
index 7dbeacca053..e3d50a0fd39 100644
--- a/tailwind.config.js
+++ b/tailwind.config.js
@@ -7,6 +7,8 @@ const config = {
// TODO: Move all colors over to Tailwind
// Currently color utility classes are still generated with SCSS in colors.scss due to relying on our color
// CSS vars in lots of stylesheets
+
+ purple: '#B62AD9',
},
fontFamily: {
sans: [