diff --git a/docker-compose.base.yml b/docker-compose.base.yml index 2e5ce0c2bdb9a..073af7c1d04bb 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 ba940322fb3dd..b8dbe9ebd3c7e 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 9b77208d77294..74150138e8bd3 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 48775cfc8bad6..62cf1c2370dad 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 58a3777e5b1bc..b1200cf4c527d 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 828e365954235..787e8259d52c3 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 3b4b55227faac..fcfe5de2715ed 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 44c5df9cd7035..2ebc9ce11d8dc 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 80fd7103af84e..a513619924cf3 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 ca420ed8bdc54..f90ea838ab39e 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 ea2b6db0a77ea..b7de7c83d8f1f 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 da9075401372e..8725eaaeaea92 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 5ab6b69cf8edc..06adea217229e 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 8252b5fdf1bb7..d1bd6fb608eaa 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 0f8b113af43cb..5090a2518e09f 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 0000000000000..c17dad0b17e61 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 0000000000000..474c85c22515e 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 0000000000000..4f968d7f68b6f 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 0000000000000..d92a0899a7bd2 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 0000000000000..b6c52e3018133 --- /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 ( + + ) +} + +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 abad5ff308743..2cbd7574fa1fb 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 8b6b61e55faa2..bcad53bdc9dfb 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 381cd59181267..022b8d18dfbbb 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 ( +
    +

    {title}

    + {children} +
    + ) +} + +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 ( <> - +
    - +
    + +
    + +
    +
      + {PRODUCTS.map((product, index) => ( +
    • + +
      + {product.icon} + + {product.name} + +
      +
      + +
      + +
    • + ))} +
    +
    -
    +
    +

    + Questions about features, how to's, or use cases? There are thousands of discussions in our + community forums. +

    - Submit - - - Cancel + Ask a question -
    + + +
    +
      +
    • + } + 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! +

    + +
      +
    1. + Search our docs +

      + We're constantly updating our docs and tutorials to provide the latest + information about installing, using, and troubleshooting. +

      +
    2. +
    3. + 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. + +

      +
    4. +
    5. + + Explore PostHog partners + +

      + Third-party providers can help with installation and debugging of data issues. +

      +
    6. +
    7. + Upgrade to a paid plan +

      + Our paid plans offer email support.{' '} + + Explore options. + +

      +
    8. +
    +
    + )}
    diff --git a/frontend/src/lib/components/Support/SupportForm.tsx b/frontend/src/lib/components/Support/SupportForm.tsx index 7f92d89f1445a..b23fdd83a3501 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, - }))} - /> - )} + + <> +
    + + + Definitions + +
    + ({ + label: value, + value: key, + }))} + /> + +
    ) } diff --git a/frontend/src/lib/components/Support/supportLogic.ts b/frontend/src/lib/components/Support/supportLogic.ts index 003ad6a4a9e6e..9c4cbd02712b5 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 9a9535ab5d6a0..1193a25f62a08 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 786e4234290d7..f422e9835a6e9 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 d74a1ce9ebde4..ca7351e1a360f 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 7dbeacca053db..e3d50a0fd39d1 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: [