diff --git a/app/[locale]/category/[slug]/page.tsx b/app/[locale]/category/[slug]/page.tsx index a069cb3e1..4cdfcd534 100644 --- a/app/[locale]/category/[slug]/page.tsx +++ b/app/[locale]/category/[slug]/page.tsx @@ -34,7 +34,7 @@ export default async function ProductPage({ params }: CategoryPageParams) { const { title } = category; return ( -
+
{title}
); diff --git a/components/cart/add-to-cart.tsx b/components/cart/add-to-cart.tsx index 704fb2a41..c33456e2a 100644 --- a/components/cart/add-to-cart.tsx +++ b/components/cart/add-to-cart.tsx @@ -1,6 +1,6 @@ 'use client'; -import { PlusIcon } from '@radix-ui/react-icons'; +import { PlusIcon } from '@heroicons/react/24/outline'; import clsx from 'clsx'; import { addItem } from 'components/cart/actions'; import LoadingDots from 'components/loading-dots'; diff --git a/components/cart/close-cart.tsx b/components/cart/close-cart.tsx index 9907201e8..515b94843 100644 --- a/components/cart/close-cart.tsx +++ b/components/cart/close-cart.tsx @@ -1,10 +1,10 @@ +import { XMarkIcon } from '@heroicons/react/24/outline'; import clsx from 'clsx'; -import CloseIcon from 'components/icons/close'; export default function CloseCart({ className }: { className?: string }) { return (
- +
); } diff --git a/components/cart/delete-item-button.tsx b/components/cart/delete-item-button.tsx index 1005cb28a..45613730c 100644 --- a/components/cart/delete-item-button.tsx +++ b/components/cart/delete-item-button.tsx @@ -1,7 +1,7 @@ -import CloseIcon from 'components/icons/close'; import LoadingDots from 'components/loading-dots'; import { useRouter } from 'next/navigation'; +import { XMarkIcon } from '@heroicons/react/24/outline'; import clsx from 'clsx'; import { removeItem } from 'components/cart/actions'; import type { CartItem } from 'lib/shopify/types'; @@ -38,7 +38,7 @@ export default function DeleteItemButton({ item }: { item: CartItem }) { {isPending ? ( ) : ( - + )} ); diff --git a/components/cart/edit-item-quantity-button.tsx b/components/cart/edit-item-quantity-button.tsx index a09102315..a032bd768 100644 --- a/components/cart/edit-item-quantity-button.tsx +++ b/components/cart/edit-item-quantity-button.tsx @@ -1,10 +1,9 @@ import { useRouter } from 'next/navigation'; import { useTransition } from 'react'; +import { MinusIcon, PlusIcon } from '@heroicons/react/24/outline'; import clsx from 'clsx'; import { removeItem, updateItemQuantity } from 'components/cart/actions'; -import MinusIcon from 'components/icons/minus'; -import PlusIcon from 'components/icons/plus'; import LoadingDots from 'components/loading-dots'; import type { CartItem } from 'lib/shopify/types'; diff --git a/components/cart/modal.tsx b/components/cart/modal.tsx index 4a9f3cdf3..8fb2f95d4 100644 --- a/components/cart/modal.tsx +++ b/components/cart/modal.tsx @@ -1,7 +1,7 @@ 'use client'; import { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from '@/components/ui/sheet'; -import ShoppingBagIcon from 'components/icons/shopping-bag'; +import { ShoppingBagIcon } from '@heroicons/react/24/outline'; import Price from 'components/price'; import { DEFAULT_OPTION } from 'lib/constants'; import type { Cart } from 'lib/shopify/types'; diff --git a/components/cart/open-cart.tsx b/components/cart/open-cart.tsx index 7c3f514a3..a05d6ea23 100644 --- a/components/cart/open-cart.tsx +++ b/components/cart/open-cart.tsx @@ -1,5 +1,5 @@ +import { ShoppingBagIcon } from '@heroicons/react/24/outline'; import clsx from 'clsx'; -import ShoppingBagIcon from 'components/icons/shopping-bag'; export default function OpenCart({ className, @@ -9,10 +9,10 @@ export default function OpenCart({ quantity?: number; }) { return ( -
+
diff --git a/components/icons/arrow-left.tsx b/components/icons/arrow-left.tsx deleted file mode 100644 index 95d5af173..000000000 --- a/components/icons/arrow-left.tsx +++ /dev/null @@ -1,14 +0,0 @@ -export default function ArrowLeftIcon({ className }: { className?: string }) { - return ( - - - - - ); -} diff --git a/components/icons/caret-right.tsx b/components/icons/caret-right.tsx deleted file mode 100644 index fbed04236..000000000 --- a/components/icons/caret-right.tsx +++ /dev/null @@ -1,17 +0,0 @@ -export default function CaretRightIcon({ className }: { className?: string }) { - return ( - - - - ); -} diff --git a/components/icons/cart.tsx b/components/icons/cart.tsx deleted file mode 100644 index 52f761485..000000000 --- a/components/icons/cart.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import clsx from 'clsx'; -import ShoppingBagIcon from './shopping-bag'; - -export default function CartIcon({ - className, - quantity -}: { - className?: string; - quantity?: number; -}) { - return ( -
- - {quantity ? ( -
- {quantity} -
- ) : null} -
- ); -} diff --git a/components/icons/close.tsx b/components/icons/close.tsx deleted file mode 100644 index a92a43154..000000000 --- a/components/icons/close.tsx +++ /dev/null @@ -1,17 +0,0 @@ -export default function CloseIcon({ className }: { className?: string }) { - return ( - - - - - ); -} diff --git a/components/icons/language.tsx b/components/icons/language.tsx deleted file mode 100644 index 4d781a0b3..000000000 --- a/components/icons/language.tsx +++ /dev/null @@ -1,18 +0,0 @@ -export default function LanguageIcon({ className }: { className?: string }) { - return ( - - - - ); -} diff --git a/components/icons/logo.tsx b/components/icons/logo.tsx deleted file mode 100644 index d961f7960..000000000 --- a/components/icons/logo.tsx +++ /dev/null @@ -1,19 +0,0 @@ -export default function LogoIcon({ className }: { className?: string }) { - return ( - - - - - ); -} diff --git a/components/icons/menu.tsx b/components/icons/menu.tsx deleted file mode 100644 index acaed1188..000000000 --- a/components/icons/menu.tsx +++ /dev/null @@ -1,16 +0,0 @@ -export default function MenuIcon({ className }: { className?: string }) { - return ( - - - - ); -} diff --git a/components/icons/minus.tsx b/components/icons/minus.tsx deleted file mode 100644 index 93c46e1dc..000000000 --- a/components/icons/minus.tsx +++ /dev/null @@ -1,16 +0,0 @@ -export default function MinusIcon({ className }: { className?: string }) { - return ( - - - - ); -} diff --git a/components/icons/plus.tsx b/components/icons/plus.tsx deleted file mode 100644 index 8ae449578..000000000 --- a/components/icons/plus.tsx +++ /dev/null @@ -1,17 +0,0 @@ -export default function PlusIcon({ className }: { className?: string }) { - return ( - - - - - ); -} diff --git a/components/icons/search.tsx b/components/icons/search.tsx deleted file mode 100644 index a03574025..000000000 --- a/components/icons/search.tsx +++ /dev/null @@ -1,11 +0,0 @@ -export default function SearchIcon({ className }: { className?: string }) { - return ( - - - - ); -} diff --git a/components/icons/shopping-bag.tsx b/components/icons/shopping-bag.tsx deleted file mode 100644 index a5dd1768e..000000000 --- a/components/icons/shopping-bag.tsx +++ /dev/null @@ -1,19 +0,0 @@ -export default function ShoppingBagIcon({ className }: { className?: string }) { - return ( - - - - - - ); -} diff --git a/components/layout/dynamic-content-manager/dynamic-content-manager.tsx b/components/layout/dynamic-content-manager/dynamic-content-manager.tsx index f951f5cdc..349857863 100644 --- a/components/layout/dynamic-content-manager/dynamic-content-manager.tsx +++ b/components/layout/dynamic-content-manager/dynamic-content-manager.tsx @@ -6,82 +6,83 @@ import Hero from '@/components/modules/hero'; import ReusableSection from '@/components/modules/reusable-section/reusable-section'; import Slider from '@/components/modules/slider/slider'; import USPSection from '@/components/modules/usp-section/usp-section'; -import { InfoCircledIcon } from '@radix-ui/react-icons'; +import { InformationCircleIcon } from '@heroicons/react/24/outline'; +import { Suspense } from 'react'; -interface getContentComponentProps { - _type: string; - _key: number; - disabled: boolean; -} +// interface getContentComponentProps { +// _type: string; +// _key: number; +// disabled: boolean; +// } -const getContentComponent = ({ _type, _key, disabled, ...rest }: getContentComponentProps) => { - let Component: any; +// const getContentComponent = ({ _type, _key, disabled, ...rest }: getContentComponentProps) => { +// let Component: any; - switch (_type) { - case 'hero': - if (disabled !== true) { - Component = Hero; - } else { - return; - } - break; - case 'slider': - if (disabled !== true) { - Component = Slider; - } else { - return; - } - break; - case 'filteredProductList': - if (disabled !== true) { - Component = FilteredProductList; - } else { - return; - } - break; - case 'blurbSection': - if (disabled !== true) { - Component = BlurbSection; - } else { - return; - } - break; - case 'uspSection': - if (disabled !== true) { - Component = USPSection; - } else { - return; - } - break; - case 'reusableSection': - if (disabled !== true) { - Component = ReusableSection; - } else { - return; - } - break; - default: - return ( -
- - - {`No matching component (Type: ${_type})`} - -
- ); - } +// switch (_type) { +// case 'hero': +// if (disabled !== true) { +// Component = Hero; +// } else { +// return; +// } +// break; +// case 'slider': +// if (disabled !== true) { +// Component = Slider; +// } else { +// return; +// } +// break; +// case 'filteredProductList': +// if (disabled !== true) { +// Component = FilteredProductList; +// } else { +// return; +// } +// break; +// case 'blurbSection': +// if (disabled !== true) { +// Component = BlurbSection; +// } else { +// return; +// } +// break; +// case 'uspSection': +// if (disabled !== true) { +// Component = USPSection; +// } else { +// return; +// } +// break; +// case 'reusableSection': +// if (disabled !== true) { +// Component = ReusableSection; +// } else { +// return; +// } +// break; +// default: +// return ( +//
+// +// +// {`No matching component (Type: ${_type})`} +// +//
+// ); +// } - return Component ? ( - - ) : ( -
Something else
- ); -}; +// return Component ? ( +// +// ) : ( +//
Something else
+// ); +// }; interface dynamicContentManagerProps { content: [] | any; @@ -89,7 +90,91 @@ interface dynamicContentManagerProps { const DynamicContentManager = ({ content }: dynamicContentManagerProps) => { return ( -
{content?.map(getContentComponent)}
+
+ {/* {content?.map(getContentComponent)} */} + + {content.map( + ( + component: { _type: string; _key: number; disabled: boolean; rest: any } | any, + index: number + ) => { + const { _type, _key, disabled, ...rest } = component; + + let Component: any; + + switch (_type) { + case 'hero': + if (disabled !== true) { + Component = Hero; + } else { + return; + } + break; + case 'slider': + if (disabled !== true) { + Component = Slider; + } else { + return; + } + break; + case 'filteredProductList': + if (disabled !== true) { + Component = FilteredProductList; + } else { + return; + } + break; + case 'blurbSection': + if (disabled !== true) { + Component = BlurbSection; + } else { + return; + } + break; + case 'uspSection': + if (disabled !== true) { + Component = USPSection; + } else { + return; + } + break; + case 'reusableSection': + if (disabled !== true) { + Component = ReusableSection; + } else { + return; + } + break; + default: + return ( +
+ + + {`No matching component (Type: ${_type})`} + +
+ ); + } + + if (Component && index === 0) { + return ; + } else if (Component) { + return ( + + + + ); + } else { +
Something else
; + } + } + )} +
); }; diff --git a/components/layout/header/header.tsx b/components/layout/header/header.tsx index b56c230dc..1ed29fdbd 100644 --- a/components/layout/header/header.tsx +++ b/components/layout/header/header.tsx @@ -3,9 +3,14 @@ import OpenCart from 'components/cart/open-cart'; import Logo from 'components/ui/logo/logo'; import Link from 'next/link'; import { Suspense } from 'react'; -import DesktopMenu from './desktop-menu'; import HeaderRoot from './header-root'; -import MobileModal from './mobile-modal'; +import MainMenu from './main-menu/main-menu'; +import MobileMenuModal from './mobile-menu/modal'; +import OpenMobileMenu from './mobile-menu/open-mobile-menu'; +import SearchModal from './search/modal'; +import OpenSearch from './search/open-search'; +import UserModal from './user-menu/modal'; +import OpenUserMenu from './user-menu/open-user-menu'; interface HeaderProps { locale: string; @@ -16,8 +21,10 @@ const Header = ({ locale }: HeaderProps) => {
-
- +
+ }> + +
@@ -31,9 +38,15 @@ const Header = ({ locale }: HeaderProps) => {
- +
-
+
+ }> + + + }> + + }> diff --git a/components/layout/header/desktop-menu.tsx b/components/layout/header/main-menu/main-menu.tsx similarity index 80% rename from components/layout/header/desktop-menu.tsx rename to components/layout/header/main-menu/main-menu.tsx index 00fd871e6..4d56a6a21 100644 --- a/components/layout/header/desktop-menu.tsx +++ b/components/layout/header/main-menu/main-menu.tsx @@ -2,11 +2,11 @@ import { categoriesQuery } from '@/lib/sanity/queries'; import { clientFetch } from '@/lib/sanity/sanity.client'; import Link from 'next/link'; -interface DesktopMenuProps { +interface MainMenuProps { locale: string; } -export default async function DesktopMenu({ locale }: DesktopMenuProps) { +export default async function MainMenu({ locale }: MainMenuProps) { const params = { locale: locale }; @@ -18,7 +18,7 @@ export default async function DesktopMenu({ locale }: DesktopMenuProps) { } return ( -
    +
      {categories.map((category: { slug: string } | any, index: number) => { return (
    • diff --git a/components/layout/header/mobile-modal.tsx b/components/layout/header/mobile-menu/modal.tsx similarity index 64% rename from components/layout/header/mobile-modal.tsx rename to components/layout/header/mobile-menu/modal.tsx index 3f2f1fb29..a23715d54 100644 --- a/components/layout/header/mobile-modal.tsx +++ b/components/layout/header/mobile-menu/modal.tsx @@ -1,24 +1,30 @@ 'use client'; -import MenuIcon from '@/components/icons/menu'; import { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from '@/components/ui/sheet'; import { useState } from 'react'; +import MainMenu from '../main-menu/main-menu'; +import OpenMobileMenu from './open-mobile-menu'; -export default function MobileModal() { +interface MobileMenuModalProps { + locale: string; +} + +export default function MobileMenuModal({ locale }: MobileMenuModalProps) { const [isOpen, setIsOpen] = useState(false); return ( <> setIsOpen(!isOpen)}> -
      - -
      +
      Menu +
      + +
      diff --git a/components/layout/header/mobile-menu/open-mobile-menu.tsx b/components/layout/header/mobile-menu/open-mobile-menu.tsx new file mode 100644 index 000000000..0a7087504 --- /dev/null +++ b/components/layout/header/mobile-menu/open-mobile-menu.tsx @@ -0,0 +1,15 @@ +import { Bars3Icon } from '@heroicons/react/24/outline'; +import clsx from 'clsx'; + +export default function OpenMobileMenu({ className }: { className?: string }) { + return ( +
      + +
      + ); +} diff --git a/components/layout/header/search/modal.tsx b/components/layout/header/search/modal.tsx new file mode 100644 index 000000000..c881702cf --- /dev/null +++ b/components/layout/header/search/modal.tsx @@ -0,0 +1,26 @@ +'use client'; + +import { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from '@/components/ui/sheet'; +import { useTranslations } from 'next-intl'; +import { useState } from 'react'; +import OpenSearch from './open-search'; + +export default function SearchModal() { + const [isOpen, setIsOpen] = useState(false); + const t = useTranslations('search'); + + return ( + <> + setIsOpen(!isOpen)}> + + + + + + {t('search')} + + + + + ); +} diff --git a/components/layout/header/search/open-search.tsx b/components/layout/header/search/open-search.tsx new file mode 100644 index 000000000..d31aecae8 --- /dev/null +++ b/components/layout/header/search/open-search.tsx @@ -0,0 +1,12 @@ +import { MagnifyingGlassIcon } from '@heroicons/react/24/outline'; +import clsx from 'clsx'; + +export default function OpenSearch({ className }: { className?: string }) { + return ( +
      + +
      + ); +} diff --git a/components/layout/header/user-menu/modal.tsx b/components/layout/header/user-menu/modal.tsx new file mode 100644 index 000000000..ca06a4b7c --- /dev/null +++ b/components/layout/header/user-menu/modal.tsx @@ -0,0 +1,37 @@ +'use client'; + +import { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from '@/components/ui/sheet'; +import { useTranslations } from 'next-intl'; +import { useState } from 'react'; +import OpenUserMenu from './open-user-menu'; + +import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; + +export default function UserModal() { + const [isOpen, setIsOpen] = useState(false); + const t = useTranslations('auth'); + + return ( + <> + setIsOpen(!isOpen)}> + + + + + + {t('login.logIn')} + + + + + {t('login.logIn')} + {t('signUp.register')} + + Log in to your account here. + Register for account here. + + + + + ); +} diff --git a/components/layout/header/user-menu/open-user-menu.tsx b/components/layout/header/user-menu/open-user-menu.tsx new file mode 100644 index 000000000..8d421fc10 --- /dev/null +++ b/components/layout/header/user-menu/open-user-menu.tsx @@ -0,0 +1,15 @@ +import { UserCircleIcon } from '@heroicons/react/24/outline'; +import clsx from 'clsx'; + +export default function OpenUserMenu({ className }: { className?: string }) { + return ( +
      + +
      + ); +} diff --git a/components/modules/carousel/carousel.tsx b/components/modules/carousel/carousel.tsx index 76d35a296..b4b623e4d 100644 --- a/components/modules/carousel/carousel.tsx +++ b/components/modules/carousel/carousel.tsx @@ -1,4 +1,4 @@ -import { ArrowLeftIcon, ArrowRightIcon } from '@radix-ui/react-icons'; +import { ArrowLeftIcon, ArrowRightIcon } from '@heroicons/react/24/outline'; import 'glider-js/glider.min.css'; import React from 'react'; import Glider from 'react-glider'; diff --git a/components/ui/dropdown-menu.tsx b/components/ui/dropdown-menu.tsx index ef793c703..ee6de438d 100644 --- a/components/ui/dropdown-menu.tsx +++ b/components/ui/dropdown-menu.tsx @@ -1,7 +1,7 @@ 'use client'; +import { CheckIcon, ChevronRightIcon } from '@heroicons/react/24/outline'; import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu'; -import { CheckIcon, ChevronRightIcon, CircleIcon } from '@radix-ui/react-icons'; import * as React from 'react'; @@ -128,7 +128,7 @@ const DropdownMenuRadioItem = React.forwardRef< > - +
      {children} diff --git a/components/ui/locale-switcher/locale-switcher.tsx b/components/ui/locale-switcher/locale-switcher.tsx index b08651dab..421cbd5f8 100644 --- a/components/ui/locale-switcher/locale-switcher.tsx +++ b/components/ui/locale-switcher/locale-switcher.tsx @@ -6,7 +6,7 @@ import { DropdownMenuItem, DropdownMenuTrigger } from '@/components/ui/dropdown-menu'; -import LanguageIcon from 'components/icons/language'; +import { LanguageIcon } from '@heroicons/react/24/outline'; import { useLocale, useTranslations } from 'next-intl'; import Link from 'next/link'; import { usePathname } from 'next/navigation'; diff --git a/components/ui/sheet.tsx b/components/ui/sheet.tsx index bbcfe2f6f..0cecbe501 100644 --- a/components/ui/sheet.tsx +++ b/components/ui/sheet.tsx @@ -1,7 +1,7 @@ 'use client'; +import { XMarkIcon } from '@heroicons/react/24/outline'; import * as SheetPrimitive from '@radix-ui/react-dialog'; -import { Cross1Icon } from '@radix-ui/react-icons'; import { cva, type VariantProps } from 'class-variance-authority'; import * as React from 'react'; @@ -65,7 +65,7 @@ const SheetContent = React.forwardRef< {children} - + Close diff --git a/components/ui/tabs.tsx b/components/ui/tabs.tsx new file mode 100644 index 000000000..26eb10912 --- /dev/null +++ b/components/ui/tabs.tsx @@ -0,0 +1,55 @@ +"use client" + +import * as React from "react" +import * as TabsPrimitive from "@radix-ui/react-tabs" + +import { cn } from "@/lib/utils" + +const Tabs = TabsPrimitive.Root + +const TabsList = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +TabsList.displayName = TabsPrimitive.List.displayName + +const TabsTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +TabsTrigger.displayName = TabsPrimitive.Trigger.displayName + +const TabsContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +TabsContent.displayName = TabsPrimitive.Content.displayName + +export { Tabs, TabsList, TabsTrigger, TabsContent } diff --git a/package.json b/package.json index 9981493d8..82670a78a 100644 --- a/package.json +++ b/package.json @@ -19,14 +19,14 @@ "*": "prettier --write --ignore-unknown" }, "dependencies": { + "@heroicons/react": "^2.0.18", "@next/bundle-analyzer": "^13.4.3", "@portabletext/react": "^3.0.0", "@radix-ui/react-dialog": "^1.0.4", "@radix-ui/react-dropdown-menu": "^2.0.4", - "@radix-ui/react-icons": "^1.3.0", "@radix-ui/react-navigation-menu": "^1.1.2", + "@radix-ui/react-tabs": "^1.0.4", "@sanity/client": "^6.4.4", - "@sanity/icons": "^2.3.1", "@sanity/image-url": "^1.0.2", "@sanity/preview-kit": "^2.4.9", "@sanity/types": "^3.11.1", @@ -72,4 +72,3 @@ "typescript": "^5.1.3" } } - diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c16335786..ce1726ea8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,15 +1,15 @@ lockfileVersion: 5.4 specifiers: + '@heroicons/react': ^2.0.18 '@next/bundle-analyzer': ^13.4.3 '@playwright/test': ^1.34.1 '@portabletext/react': ^3.0.0 '@radix-ui/react-dialog': ^1.0.4 '@radix-ui/react-dropdown-menu': ^2.0.4 - '@radix-ui/react-icons': ^1.3.0 '@radix-ui/react-navigation-menu': ^1.1.2 + '@radix-ui/react-tabs': ^1.0.4 '@sanity/client': ^6.4.4 - '@sanity/icons': ^2.3.1 '@sanity/image-url': ^1.0.2 '@sanity/preview-kit': ^2.4.9 '@sanity/types': ^3.11.1 @@ -52,14 +52,14 @@ specifiers: typescript: ^5.1.3 dependencies: + '@heroicons/react': 2.0.18_react@18.2.0 '@next/bundle-analyzer': 13.4.13 '@portabletext/react': 3.0.4_react@18.2.0 '@radix-ui/react-dialog': 1.0.4_ml6diaeoljuxdq7psn5bilsrme '@radix-ui/react-dropdown-menu': 2.0.5_ml6diaeoljuxdq7psn5bilsrme - '@radix-ui/react-icons': 1.3.0_react@18.2.0 '@radix-ui/react-navigation-menu': 1.1.3_ml6diaeoljuxdq7psn5bilsrme + '@radix-ui/react-tabs': 1.0.4_ml6diaeoljuxdq7psn5bilsrme '@sanity/client': 6.4.4 - '@sanity/icons': 2.4.1_react@18.2.0 '@sanity/image-url': 1.0.2 '@sanity/preview-kit': 2.4.9_esptxo4lplqmefuoebcrocvktm '@sanity/types': 3.15.0 @@ -790,6 +790,14 @@ packages: tslib: 2.6.1 dev: false + /@heroicons/react/2.0.18_react@18.2.0: + resolution: {integrity: sha512-7TyMjRrZZMBPa+/5Y8lN0iyvUU/01PeMGX2+RE7cQWpEUIcb4QotzUObFkJDejj/HUH4qjP/eQ0gzzKs2f+6Yw==} + peerDependencies: + react: '>= 16' + dependencies: + react: 18.2.0 + dev: false + /@humanwhocodes/config-array/0.11.10: resolution: {integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==} engines: {node: '>=10.10.0'} @@ -1274,14 +1282,6 @@ packages: react-dom: 18.2.0_react@18.2.0 dev: false - /@radix-ui/react-icons/1.3.0_react@18.2.0: - resolution: {integrity: sha512-jQxj/0LKgp+j9BiTXz3O3sgs26RNet2iLWmsPyRz2SIcR4q/4SbazXfnYwbAr+vLYKSfc7qxzyGQA1HLlYiuNw==} - peerDependencies: - react: ^16.x || ^17.x || ^18.x - dependencies: - react: 18.2.0 - dev: false - /@radix-ui/react-id/1.0.1_6kgymidexis2l23kiss4by6rqm: resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} peerDependencies: @@ -1507,6 +1507,34 @@ packages: react: 18.2.0 dev: false + /@radix-ui/react-tabs/1.0.4_ml6diaeoljuxdq7psn5bilsrme: + resolution: {integrity: sha512-egZfYY/+wRNCflXNHx+dePvnz9FbmssDTJBtgRfDY7e8SE5oIo3Py2eCB1ckAbh1Q7cQ/6yJZThJ++sgbxibog==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.10 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-context': 1.0.1_6kgymidexis2l23kiss4by6rqm + '@radix-ui/react-direction': 1.0.1_6kgymidexis2l23kiss4by6rqm + '@radix-ui/react-id': 1.0.1_6kgymidexis2l23kiss4by6rqm + '@radix-ui/react-presence': 1.0.1_ml6diaeoljuxdq7psn5bilsrme + '@radix-ui/react-primitive': 1.0.3_ml6diaeoljuxdq7psn5bilsrme + '@radix-ui/react-roving-focus': 1.0.4_ml6diaeoljuxdq7psn5bilsrme + '@radix-ui/react-use-controllable-state': 1.0.1_6kgymidexis2l23kiss4by6rqm + '@types/react': 18.2.19 + '@types/react-dom': 18.2.7 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + dev: false + /@radix-ui/react-use-callback-ref/1.0.1_6kgymidexis2l23kiss4by6rqm: resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} peerDependencies: