diff --git a/packages/drupal/test_content/content/node/a397ca48-8fad-411e-8901-0eba2feb989c.yml b/packages/drupal/test_content/content/node/a397ca48-8fad-411e-8901-0eba2feb989c.yml
index 0c72ae9d5..f52ee74d0 100644
--- a/packages/drupal/test_content/content/node/a397ca48-8fad-411e-8901-0eba2feb989c.yml
+++ b/packages/drupal/test_content/content/node/a397ca48-8fad-411e-8901-0eba2feb989c.yml
@@ -7,8 +7,8 @@ _meta:
depends:
3a0fe860-a6d6-428a-9474-365bd57509aa: media
478c4289-961d-4ce8-85d6-578ae05f3019: media
- 72187a1f-3e48-4b45-a9b7-189c6fd7ee26: media
5dfc1856-e9e4-4f02-9cd6-9d888870ce1a: media
+ 72187a1f-3e48-4b45-a9b7-189c6fd7ee26: media
default:
revision_uid:
- target_id: 1
@@ -95,7 +95,7 @@ default:
-
+
diff --git a/packages/ui/package.json b/packages/ui/package.json
index 967e148ea..99ff25abb 100644
--- a/packages/ui/package.json
+++ b/packages/ui/package.json
@@ -40,11 +40,10 @@
"dependencies": {
"@amazeelabs/silverback-iframe": "^1.3.0",
"@custom/schema": "workspace:*",
- "@headlessui/react": "^1.7.17",
+ "@headlessui/react": "^2.0.3",
"@heroicons/react": "^2.1.1",
"@hookform/resolvers": "^3.3.3",
"clsx": "^2.1.0",
- "flowbite-react": "^0.9.0",
"framer-motion": "^10.17.4",
"hast-util-is-element": "^2.1.3",
"hast-util-select": "^5.0.5",
diff --git a/packages/ui/src/components/Client/DesktopMenu.tsx b/packages/ui/src/components/Client/DesktopMenu.tsx
index dc6442c48..756031972 100644
--- a/packages/ui/src/components/Client/DesktopMenu.tsx
+++ b/packages/ui/src/components/Client/DesktopMenu.tsx
@@ -1,5 +1,14 @@
'use client';
-import { Disclosure, Popover, Transition } from '@headlessui/react';
+import {
+ Disclosure,
+ DisclosureButton,
+ DisclosurePanel,
+ Popover,
+ PopoverButton,
+ PopoverGroup,
+ PopoverPanel,
+ Transition,
+} from '@headlessui/react';
import { ChevronDownIcon } from '@heroicons/react/20/solid';
import clsx from 'clsx';
import React, { PropsWithChildren } from 'react';
@@ -8,9 +17,9 @@ import { avoidFocusOnClick } from '../../utils/avoidFocusOnClick';
export function DesktopMenu({ children }: PropsWithChildren<{}>) {
return (
-
+
{children}
-
+
);
}
@@ -21,8 +30,8 @@ export function DesktopMenuDropDown({
return (
{({ open }) => (
-
-
+
-
+
-
+
{children}
-
+
-
+ >
)}
);
@@ -68,7 +74,7 @@ export function DesktopMenuDropdownDisclosure({
{({ open }) => (
-
-
- {children}
+
+ {children}
)}
diff --git a/packages/ui/src/components/Client/MobileMenu.tsx b/packages/ui/src/components/Client/MobileMenu.tsx
index 9652da9de..022402639 100644
--- a/packages/ui/src/components/Client/MobileMenu.tsx
+++ b/packages/ui/src/components/Client/MobileMenu.tsx
@@ -1,5 +1,11 @@
'use client';
-import { Dialog, Disclosure } from '@headlessui/react';
+import {
+ Dialog,
+ DialogPanel,
+ Disclosure,
+ DisclosureButton,
+ DisclosurePanel,
+} from '@headlessui/react';
import { ChevronDownIcon } from '@heroicons/react/20/solid';
import clsx from 'clsx';
import React, { createContext, PropsWithChildren } from 'react';
@@ -11,7 +17,7 @@ const MobileMenuContext = createContext({
setIsOpen: (isOpen: boolean) => {},
});
-export function MobileMenuProvider({ children }: PropsWithChildren) {
+export function MobileMenuProvider({ children }: PropsWithChildren<{}>) {
const [isOpen, setIsOpen] = React.useState(false);
return (
@@ -42,14 +48,15 @@ export function MobileMenuButton(
);
}
+
export function MobileMenu({ children }: PropsWithChildren<{}>) {
const { isOpen, setIsOpen } = React.useContext(MobileMenuContext);
return (
);
}
@@ -62,13 +69,13 @@ export function MobileMenuLink({
title: string;
}) {
return (
-
{title}
-
+
);
}
@@ -86,15 +93,13 @@ export function MobileMenuDropdown({
open && nestLevel === 2 && 'bg-gray-100 rounded mx-8',
)}
>
-
-
- {children}
+
+ {children}
)}
diff --git a/packages/ui/src/components/Organisms/PageContent/BlockAccordion.tsx b/packages/ui/src/components/Organisms/PageContent/BlockAccordion.tsx
index 60cde5299..994fad5dd 100644
--- a/packages/ui/src/components/Organisms/PageContent/BlockAccordion.tsx
+++ b/packages/ui/src/components/Organisms/PageContent/BlockAccordion.tsx
@@ -1,11 +1,18 @@
+'use client';
import { BlockAccordionFragment, Html } from '@custom/schema';
+import {
+ Disclosure,
+ DisclosureButton,
+ DisclosurePanel,
+} from '@headlessui/react';
import {
ArrowRightCircleIcon,
CheckCircleIcon,
+ ChevronDownIcon,
+ ChevronUpIcon,
QuestionMarkCircleIcon,
} from '@heroicons/react/20/solid';
import clsx from 'clsx';
-import { Accordion, CustomFlowbiteTheme, Flowbite } from 'flowbite-react';
import type { Element } from 'hast';
import { selectAll } from 'hast-util-select';
import React, { PropsWithChildren } from 'react';
@@ -17,53 +24,39 @@ const unorderedItems: Plugin<[], Element> = () => (tree) => {
});
};
-const accordionTheme: CustomFlowbiteTheme['accordion'] = {
- root: {
- base: 'mt-10 divide-y divide-gray-200 border-gray-200',
- flush: {
- off: 'last:border-0',
- on: 'last:border-0',
- },
- },
- content: {
- base: 'pb-5 pt-5 text-base font-normal text-gray-500',
- },
- title: {
- base: 'flex w-full items-center justify-between p-4 pl-1 text-left font-medium text-lg text-gray-500',
- flush: {
- off: 'hover:bg-gray-100',
- on: 'bg-transparent',
- },
- heading: '',
- open: {
- off: '',
- on: 'text-gray-900',
- },
- },
-};
-
-// Applying the custom theme to the Accordion component
-// doesn't work out, wrapping it in a Flowbite component.
-const theme: CustomFlowbiteTheme = {
- accordion: accordionTheme,
-};
-
export function BlockAccordion(props: BlockAccordionFragment) {
return (
-
+
-
-
- {props.items.map((item, index) => (
-
-
+ {props.items.map((item, index) => (
+
+ {({ open }) => (
+ <>
+
{item.icon && }{' '}
{item.title}
-
-
+
+ {open ? (
+
+ ) : (
+
+ )}
+
+
+
{item.textContent?.markup && (
)}
-
-
- ))}
-
-
+
+ >
+ )}
+
+ ))}
diff --git a/packages/ui/src/components/Organisms/PageContent/BlockImageTeasers.stories.tsx b/packages/ui/src/components/Organisms/PageContent/BlockImageTeasers.stories.tsx
new file mode 100644
index 000000000..6b90bf401
--- /dev/null
+++ b/packages/ui/src/components/Organisms/PageContent/BlockImageTeasers.stories.tsx
@@ -0,0 +1,36 @@
+import { Url } from '@custom/schema';
+import Landscape from '@stories/landscape.jpg?as=metadata';
+import Portrait from '@stories/portrait.jpg?as=metadata';
+import { Meta, StoryObj } from '@storybook/react';
+
+import { image } from '../../../helpers/image';
+import { BlockImageTeasers } from './BlockImageTeasers';
+
+export default {
+ component: BlockImageTeasers,
+} satisfies Meta;
+
+export const Default = {
+ args: {
+ teasers: [
+ {
+ title: 'Title',
+ ctaText: 'Call to action',
+ ctaUrl: '/test' as Url,
+ image: {
+ source: image(Landscape),
+ alt: 'Alt text',
+ },
+ },
+ {
+ title: 'Title',
+ ctaText: 'Call to action',
+ ctaUrl: '/test' as Url,
+ image: {
+ source: image(Portrait),
+ alt: 'Alt text',
+ },
+ },
+ ],
+ },
+} satisfies StoryObj;
diff --git a/packages/ui/src/components/Organisms/PageContent/BlockImageTeasers.tsx b/packages/ui/src/components/Organisms/PageContent/BlockImageTeasers.tsx
new file mode 100644
index 000000000..0b3472b57
--- /dev/null
+++ b/packages/ui/src/components/Organisms/PageContent/BlockImageTeasers.tsx
@@ -0,0 +1,55 @@
+import { BlockImageTeasersFragment, Image, Link } from '@custom/schema';
+import React from 'react';
+
+import { isTruthy } from '../../../utils/isTruthy';
+
+export function BlockImageTeasers(props: BlockImageTeasersFragment) {
+ return (
+ // eslint-disable-next-line tailwindcss/no-custom-classname
+
+
+
+ {props.teasers.filter(isTruthy).map((teaser, index) => (
+
+ ))}
+
+
+
+ );
+}
+
+// This component uses the following Flowbite component:
+// https://flowbite.com/blocks/marketing/hero/#background-image-cards
+export function BlockImageTeaser(
+ props: BlockImageTeasersFragment['teasers'][0],
+) {
+ return (
+
+ {props.image ? (
+
+ ) : null}
+
+
+ {props.title ? (
+
+ {props.title}
+
+ ) : null}
+
+ {props.ctaUrl && props.ctaText ? (
+
+ {props.ctaText}
+
+ ) : null}
+
+
+ );
+}
diff --git a/packages/ui/src/components/Organisms/PageDisplay.tsx b/packages/ui/src/components/Organisms/PageDisplay.tsx
index 5b15cc037..025bfc842 100644
--- a/packages/ui/src/components/Organisms/PageDisplay.tsx
+++ b/packages/ui/src/components/Organisms/PageDisplay.tsx
@@ -9,6 +9,7 @@ import { BlockAccordion } from './PageContent/BlockAccordion';
import { BlockCta } from './PageContent/BlockCta';
import { BlockForm } from './PageContent/BlockForm';
import { BlockHorizontalSeparator } from './PageContent/BlockHorizontalSeparator';
+import { BlockImageTeasers } from './PageContent/BlockImageTeasers';
import { BlockImageWithText } from './PageContent/BlockImageWithText';
import { BlockMarkup } from './PageContent/BlockMarkup';
import { BlockMedia } from './PageContent/BlockMedia';
@@ -30,20 +31,7 @@ export function PageDisplay(page: PageFragment) {
case 'BlockForm':
return ;
case 'BlockImageTeasers':
- return (
- // TODO: Implement BlockImageTeasers
-
- BlockImageTeasers goes here
-
- );
+ return ;
case 'BlockCta':
return ;
case 'BlockImageWithText':
diff --git a/packages/ui/src/components/Organisms/PageHero.tsx b/packages/ui/src/components/Organisms/PageHero.tsx
index 9004af958..237765e00 100644
--- a/packages/ui/src/components/Organisms/PageHero.tsx
+++ b/packages/ui/src/components/Organisms/PageHero.tsx
@@ -17,7 +17,7 @@ export function PageHero(props: NonNullable) {
function DefaultHero(props: NonNullable) {
return (
<>
-
+
{props.image ? (
['content'],
},
},
diff --git a/packages/ui/src/tailwind.css b/packages/ui/src/tailwind.css
index f977bbc41..18682f9a6 100644
--- a/packages/ui/src/tailwind.css
+++ b/packages/ui/src/tailwind.css
@@ -35,3 +35,11 @@
)::after {
content: '' !important;
}
+
+/*
+ Selects the .block-background-image-cards only when it is the direct
+ sibling of .default-hero section.
+ */
+.default-hero + .block-background-image-cards {
+ @apply mt-2 px-0;
+}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 642d8ebde..e274343f9 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -521,8 +521,8 @@ importers:
specifier: workspace:*
version: link:../schema
'@headlessui/react':
- specifier: ^1.7.17
- version: 1.7.17(react-dom@18.2.0)(react@18.2.0)
+ specifier: ^2.0.3
+ version: 2.0.3(react-dom@18.2.0)(react@18.2.0)
'@heroicons/react':
specifier: ^2.1.1
version: 2.1.1(react@18.2.0)
@@ -532,9 +532,6 @@ importers:
clsx:
specifier: ^2.1.0
version: 2.1.0
- flowbite-react:
- specifier: ^0.9.0
- version: 0.9.0(react-dom@18.2.0)(react@18.2.0)(tailwindcss@3.4.0)
framer-motion:
specifier: ^10.17.4
version: 10.17.4(react-dom@18.2.0)(react@18.2.0)
@@ -4178,8 +4175,8 @@ packages:
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
- /@floating-ui/react@0.26.10(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-sh6f9gVvWQdEzLObrWbJ97c0clJObiALsFe0LiR/kb3tDRKwEhObASEH2QyfdoO/ZBPzwxa9j+nYFo+sqgbioA==}
+ /@floating-ui/react@0.26.15(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-WKmfLkxTwCm09Dxq4LpjL3EPbZVSp5wvnap1jmculsfnzg2Ag/pCkP+OPyjE5dFMXqX97hsLIqJehboZ5XAHXw==}
peerDependencies:
react: '>=16.8.0'
react-dom: '>=16.8.0'
@@ -5193,14 +5190,17 @@ packages:
'@hapi/hoek': 11.0.4
dev: false
- /@headlessui/react@1.7.17(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-4am+tzvkqDSSgiwrsEpGWqgGo9dz8qU5M3znCkC4PgkpY4HcCZzEDEvozltGGGHIKl9jbXbZPSH5TWn4sWJdow==}
+ /@headlessui/react@2.0.3(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-Xd1h0YZgfhxZ7W1w4TvK0/TZ1c4qaX4liYVUkAXqW1HCLcXSqnMeYAUGJS/BBroBAUL9HErjyFcRpCWRQZ/0lA==}
engines: {node: '>=10'}
peerDependencies:
- react: ^16 || ^17 || ^18
- react-dom: ^16 || ^17 || ^18
+ react: ^18
+ react-dom: ^18
dependencies:
- client-only: 0.0.1
+ '@floating-ui/react': 0.26.15(react-dom@18.2.0)(react@18.2.0)
+ '@react-aria/focus': 3.17.0(react@18.2.0)
+ '@react-aria/interactions': 3.21.2(react@18.2.0)
+ '@tanstack/react-virtual': 3.5.0(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: false
@@ -7285,10 +7285,6 @@ packages:
resolution: {integrity: sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==}
dev: true
- /@popperjs/core@2.11.8:
- resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==}
- dev: false
-
/@radix-ui/number@1.0.1:
resolution: {integrity: sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==}
dependencies:
@@ -7849,6 +7845,54 @@ packages:
'@babel/runtime': 7.24.4
dev: true
+ /@react-aria/focus@3.17.0(react@18.2.0):
+ resolution: {integrity: sha512-aRzBw1WTUkcIV3xFrqPA6aB8ZVt3XyGpTaSHAypU0Pgoy2wRq9YeJYpbunsKj9CJmskuffvTqXwAjTcaQish1Q==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0
+ dependencies:
+ '@react-aria/interactions': 3.21.2(react@18.2.0)
+ '@react-aria/utils': 3.24.0(react@18.2.0)
+ '@react-types/shared': 3.23.0(react@18.2.0)
+ '@swc/helpers': 0.5.11
+ clsx: 2.1.0
+ react: 18.2.0
+ dev: false
+
+ /@react-aria/interactions@3.21.2(react@18.2.0):
+ resolution: {integrity: sha512-Ju706DtoEmI/2vsfu9DCEIjDqsRBVLm/wmt2fr0xKbBca7PtmK8daajxFWz+eTq+EJakvYfLr7gWgLau9HyWXg==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0
+ dependencies:
+ '@react-aria/ssr': 3.9.3(react@18.2.0)
+ '@react-aria/utils': 3.24.0(react@18.2.0)
+ '@react-types/shared': 3.23.0(react@18.2.0)
+ '@swc/helpers': 0.5.11
+ react: 18.2.0
+ dev: false
+
+ /@react-aria/ssr@3.9.3(react@18.2.0):
+ resolution: {integrity: sha512-5bUZ93dmvHFcmfUcEN7qzYe8yQQ8JY+nHN6m9/iSDCQ/QmCiE0kWXYwhurjw5ch6I8WokQzx66xKIMHBAa4NNA==}
+ engines: {node: '>= 12'}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0
+ dependencies:
+ '@swc/helpers': 0.5.11
+ react: 18.2.0
+ dev: false
+
+ /@react-aria/utils@3.24.0(react@18.2.0):
+ resolution: {integrity: sha512-JAxkPhK5fCvFVNY2YG3TW3m1nTzwRcbz7iyTSkUzLFat4N4LZ7Kzh7NMHsgeE/oMOxd8zLY+XsUxMu/E/2GujA==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0
+ dependencies:
+ '@react-aria/ssr': 3.9.3(react@18.2.0)
+ '@react-stately/utils': 3.10.0(react@18.2.0)
+ '@react-types/shared': 3.23.0(react@18.2.0)
+ '@swc/helpers': 0.5.11
+ clsx: 2.1.0
+ react: 18.2.0
+ dev: false
+
/@react-dnd/asap@4.0.1:
resolution: {integrity: sha512-kLy0PJDDwvwwTXxqTFNAAllPHD73AycE9ypWeln/IguoGBEbvFcPDbCV03G52bEcC5E+YgupBE0VzHGdC8SIXg==}
dev: false
@@ -7861,6 +7905,23 @@ packages:
resolution: {integrity: sha512-Pc/AFTdwZwEKJxFJvlxrSmGe/di+aAOBn60sremrpLo6VI/6cmiUYNNwlI5KNYttg7uypzA3ILPMPgxB2GYZEg==}
dev: false
+ /@react-stately/utils@3.10.0(react@18.2.0):
+ resolution: {integrity: sha512-nji2i9fTYg65ZWx/3r11zR1F2tGya+mBubRCbMTwHyRnsSLFZaeq/W6lmrOyIy1uMJKBNKLJpqfmpT4x7rw6pg==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0
+ dependencies:
+ '@swc/helpers': 0.5.11
+ react: 18.2.0
+ dev: false
+
+ /@react-types/shared@3.23.0(react@18.2.0):
+ resolution: {integrity: sha512-GQm/iPiii3ikcaMNR4WdVkJ4w0mKtV3mLqeSfSqzdqbPr6vONkqXbh3RhPlPmAJs1b4QHnexd/wZQP3U9DHOwQ==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0
+ dependencies:
+ react: 18.2.0
+ dev: false
+
/@reduxjs/toolkit@1.9.7(react-redux@7.2.9)(react@18.2.0):
resolution: {integrity: sha512-t7v8ZPxhhKgOKtU+uyJT13lu4vL7az5aFi4IdoDs/eS548edn2M8Ik9h8fxgvMjGoAUVFSt6ZC1P5cWmQ014QQ==}
peerDependencies:
@@ -9309,6 +9370,12 @@ packages:
legacy-swc-helpers: /@swc/helpers@0.4.14
tslib: 2.6.2
+ /@swc/helpers@0.5.11:
+ resolution: {integrity: sha512-YNlnKRWF2sVojTpIyzwou9XoTNbzbzONwRhOoniEioF1AtaitTvVZblaQRrAzChWQ1bLYyYSWzM18y4WwgzJ+A==}
+ dependencies:
+ tslib: 2.6.2
+ dev: false
+
/@swc/jest@0.2.36(@swc/core@1.4.13):
resolution: {integrity: sha512-8X80dp81ugxs4a11z1ka43FPhP+/e+mJNXJSxiNYk8gIX/jPBtY4gQTrKu/KIoco8bzKuPI5lUxjfLiGsfvnlw==}
engines: {npm: '>= 7.0.0'}
@@ -9388,6 +9455,21 @@ packages:
resolution: {integrity: sha512-oocsqY7g0cR+Gur5jRQLSrX2OtpMLMse1I10JQBm8CdGMrDkh1Mg2gjsiquMHRtBs4Qwu5wgEp5GgIYHk4SNPw==}
dev: true
+ /@tanstack/react-virtual@3.5.0(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-rtvo7KwuIvqK9zb0VZ5IL7fiJAEnG+0EiFZz8FUOs+2mhGqdGmjKIaT1XU7Zq0eFqL0jonLlhbayJI/J2SA/Bw==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+ dependencies:
+ '@tanstack/virtual-core': 3.5.0
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+ dev: false
+
+ /@tanstack/virtual-core@3.5.0:
+ resolution: {integrity: sha512-KnPRCkQTyqhanNC0K63GBG3wA8I+D1fQuVnAvcBF8f13akOKeQp1gSbu6f77zCxhEk727iV5oQnbHLYzHrECLg==}
+ dev: false
+
/@testing-library/dom@9.3.4:
resolution: {integrity: sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==}
engines: {node: '>=14'}
@@ -10390,7 +10472,6 @@ packages:
typescript: 5.4.4
transitivePeerDependencies:
- supports-color
- dev: false
/@typescript-eslint/parser@6.17.0(eslint@7.0.0)(typescript@5.3.3):
resolution: {integrity: sha512-C4bBaX2orvhK+LlwrY8oWGmSl4WolCfYm513gEccdWZj0CwGadbIADb0FtVEcI+WzUyjyoBj2JRP8g25E6IB8A==}
@@ -10704,7 +10785,6 @@ packages:
typescript: 5.4.4
transitivePeerDependencies:
- supports-color
- dev: false
/@typescript-eslint/typescript-estree@6.17.0(typescript@5.3.3):
resolution: {integrity: sha512-gVQe+SLdNPfjlJn5VNGhlOhrXz4cajwFd5kAgWtZ9dCZf4XJf8xmgCTLIqec7aha3JwgLI2CK6GY1043FRxZwg==}
@@ -11035,7 +11115,7 @@ packages:
vite: ^4 || ^5
dependencies:
'@swc/core': 1.4.13
- vite: 5.0.10(@types/node@20.11.17)
+ vite: 5.0.10(@types/node@18.0.0)
transitivePeerDependencies:
- '@swc/helpers'
dev: true
@@ -13812,10 +13892,6 @@ packages:
static-extend: 0.1.2
dev: false
- /classnames@2.5.1:
- resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==}
- dev: false
-
/clean-deep@3.4.0:
resolution: {integrity: sha512-Lo78NV5ItJL/jl+B5w0BycAisaieJGXK1qYi/9m4SjR8zbqmrUtO7Yhro40wEShGmmxs/aJLI/A+jNhdkXK8mw==}
engines: {node: '>=4'}
@@ -15005,11 +15081,6 @@ packages:
resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==}
dev: true
- /debounce@2.0.0:
- resolution: {integrity: sha512-xRetU6gL1VJbs85Mc4FoEGSjQxzpdxRyFhe3lmWFyy2EzydIcD4xzUvRJMD+NPDfMwKNhxa3PvsIOU32luIWeA==}
- engines: {node: '>=18'}
- dev: false
-
/debug@2.6.9:
resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
peerDependencies:
@@ -17125,7 +17196,7 @@ packages:
eslint-import-resolver-webpack:
optional: true
dependencies:
- '@typescript-eslint/parser': 5.62.0(eslint@7.32.0)(typescript@4.9.5)
+ '@typescript-eslint/parser': 5.62.0(eslint@7.32.0)(typescript@5.4.4)
debug: 3.2.7
eslint: 7.32.0
eslint-import-resolver-node: 0.3.9
@@ -17232,7 +17303,7 @@ packages:
'@typescript-eslint/parser':
optional: true
dependencies:
- '@typescript-eslint/parser': 5.62.0(eslint@7.32.0)(typescript@4.9.5)
+ '@typescript-eslint/parser': 5.62.0(eslint@7.32.0)(typescript@5.4.4)
array-includes: 3.1.8
array.prototype.findlastindex: 1.2.5
array.prototype.flat: 1.3.2
@@ -18607,32 +18678,6 @@ packages:
engines: {node: '>=0.4.0'}
dev: true
- /flowbite-react@0.9.0(react-dom@18.2.0)(react@18.2.0)(tailwindcss@3.4.0):
- resolution: {integrity: sha512-wRGzTPHaEuRSXiAFhdTuksezABE/AjI/iyOOBGZpsFAz/sq7zuorAqjRud9FWgy3TlFPtldl7kL93wNY2nOnKQ==}
- peerDependencies:
- react: '>=18'
- react-dom: '>=18'
- tailwindcss: ^3
- dependencies:
- '@floating-ui/core': 1.6.0
- '@floating-ui/react': 0.26.10(react-dom@18.2.0)(react@18.2.0)
- classnames: 2.5.1
- debounce: 2.0.0
- flowbite: 2.3.0
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
- react-icons: 5.0.1(react@18.2.0)
- tailwind-merge: 2.2.2
- tailwindcss: 3.4.0
- dev: false
-
- /flowbite@2.3.0:
- resolution: {integrity: sha512-pm3JRo8OIJHGfFYWgaGpPv8E+UdWy0Z3gEAGufw+G/1dusaU/P1zoBLiQpf2/+bYAi+GBQtPVG86KYlV0W+AFQ==}
- dependencies:
- '@popperjs/core': 2.11.8
- mini-svg-data-uri: 1.4.4
- dev: false
-
/flush-write-stream@2.0.0:
resolution: {integrity: sha512-uXClqPxT4xW0lcdSBheb2ObVU+kuqUk3Jk64EwieirEXZx9XUrVwp/JuBfKAWaM4T5Td/VL7QLDWPXp/MvGm/g==}
dependencies:
@@ -24763,6 +24808,7 @@ packages:
/mini-svg-data-uri@1.4.4:
resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==}
hasBin: true
+ dev: true
/minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
@@ -26757,6 +26803,7 @@ packages:
postcss-value-parser: 4.2.0
read-cache: 1.0.0
resolve: 1.22.8
+ dev: true
/postcss-import@15.1.0(postcss@8.4.38):
resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==}
@@ -26791,6 +26838,7 @@ packages:
dependencies:
camelcase-css: 2.0.1
postcss: 8.4.32
+ dev: true
/postcss-js@4.0.1(postcss@8.4.38):
resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==}
@@ -26817,7 +26865,8 @@ packages:
dependencies:
lilconfig: 3.1.1
postcss: 8.4.32
- yaml: 2.3.4
+ yaml: 2.4.1
+ dev: true
/postcss-load-config@4.0.2(postcss@8.4.38):
resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==}
@@ -27040,6 +27089,7 @@ packages:
dependencies:
postcss: 8.4.32
postcss-selector-parser: 6.0.16
+ dev: true
/postcss-nested@6.0.1(postcss@8.4.38):
resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==}
@@ -27381,6 +27431,7 @@ packages:
nanoid: 3.3.7
picocolors: 1.0.0
source-map-js: 1.2.0
+ dev: true
/postcss@8.4.38:
resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==}
@@ -28196,14 +28247,6 @@ packages:
source-map: 0.7.4
dev: false
- /react-icons@5.0.1(react@18.2.0):
- resolution: {integrity: sha512-WqLZJ4bLzlhmsvme6iFdgO8gfZP17rfjYEJ2m9RsZjZ+cc4k1hTzknEz63YS1MeT50kVzoa1Nz36f4BEx+Wigw==}
- peerDependencies:
- react: '*'
- dependencies:
- react: 18.2.0
- dev: false
-
/react-immutable-proptypes@2.2.0(immutable@3.8.2):
resolution: {integrity: sha512-Vf4gBsePlwdGvSZoLSBfd4HAP93HDauMY4fDjXhreg/vg6F3Fj/MXDNyTbltPC/xZKmZc+cjLu3598DdYK6sgQ==}
peerDependencies:
@@ -31001,12 +31044,6 @@ packages:
- supports-color
dev: false
- /tailwind-merge@2.2.2:
- resolution: {integrity: sha512-tWANXsnmJzgw6mQ07nE3aCDkCK4QdT3ThPMCzawoYA2Pws7vSTCvz3Vrjg61jVUGfFZPJzxEP+NimbcW+EdaDw==}
- dependencies:
- '@babel/runtime': 7.24.4
- dev: false
-
/tailwindcss@3.4.0:
resolution: {integrity: sha512-VigzymniH77knD1dryXbyxR+ePHihHociZbXnLZHUyzf2MMs2ZVqlUrZ3FvpXP8pno9JzmILt1sZPD19M3IxtA==}
engines: {node: '>=14.0.0'}
@@ -31036,6 +31073,7 @@ packages:
sucrase: 3.35.0
transitivePeerDependencies:
- ts-node
+ dev: true
/tailwindcss@3.4.3:
resolution: {integrity: sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==}
@@ -31727,7 +31765,6 @@ packages:
dependencies:
tslib: 1.14.1
typescript: 5.4.4
- dev: false
/tsx@4.7.1:
resolution: {integrity: sha512-8d6VuibXHtlN5E3zFkgY8u4DX7Y3Z27zvvPKVmLon/D4AjuKzarkUBTLDBgj9iTQ0hg5xM7c/mYiRVM+HETf0g==}
@@ -33945,6 +33982,7 @@ packages:
/yaml@2.3.4:
resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==}
engines: {node: '>= 14'}
+ dev: false
/yaml@2.4.1:
resolution: {integrity: sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==}