diff --git a/app/admin/about/page.tsx b/app/admin/about/page.tsx index 67f7b28..c05931d 100644 --- a/app/admin/about/page.tsx +++ b/app/admin/about/page.tsx @@ -27,6 +27,11 @@ export default function About() { url: 'https://github.com/hexgu', avatar: 'https://avatars.githubusercontent.com/u/85490069?v=4' }, + { + name: 'xcsoft', + url: 'https://github.com/soxft', + avatar: 'https://avatars.githubusercontent.com/u/42080379?v=4' + }, ] return (
@@ -53,7 +58,7 @@ export default function About() { /> -

v2.0.4

+

v2.0.5

PicImpact 是一个摄影师专用的摄影作品展示网站,基于 Next.js + Hono.js 开发。
diff --git a/app/layout.tsx b/app/layout.tsx index a979176..aa23026 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -7,7 +7,7 @@ import { ProgressBarProviders } from '~/app/providers/progress-bar-providers' import { ButtonStoreProvider } from '~/app/providers/button-store-Providers' import '~/style/globals.css' -import { fetchCustomInfo } from '~/server/db/query' +import { fetchConfigsByKeys } from '~/server/db/query' type Props = { params: { id: string } @@ -19,7 +19,10 @@ export async function generateMetadata( parent: ResolvingMetadata ): Promise { - const data = await fetchCustomInfo() + const data = await fetchConfigsByKeys([ + 'custom_title', + 'custom_favicon_url' + ]) return { title: data?.find((item: any) => item.config_key === 'custom_title')?.config_value || 'PicImpact', diff --git a/app/rss.xml/route.ts b/app/rss.xml/route.ts index 8aa78ca..b3c18d4 100644 --- a/app/rss.xml/route.ts +++ b/app/rss.xml/route.ts @@ -1,9 +1,14 @@ import 'server-only' import RSS from 'rss' -import { fetchCustomInfo, getRSSImages } from '~/server/db/query' +import { fetchConfigsByKeys, getRSSImages } from '~/server/db/query' export async function GET(request: Request) { - const data = await fetchCustomInfo() + const data = await fetchConfigsByKeys([ + 'custom_title', + 'custom_author', + 'rss_feed_id', + 'rss_user_id' + ]) const url = new URL(request.url); diff --git a/components/MasonryItem.tsx b/components/MasonryItem.tsx index 62e346f..af95aba 100644 --- a/components/MasonryItem.tsx +++ b/components/MasonryItem.tsx @@ -55,7 +55,7 @@ export default function MasonryItem() { data: MasonryViewData, } - async function loadingHandle(handle: string) { + const loadingHandle = React.useCallback(async (handle: string) => { const idx = MasonryViewDataList.findIndex((item: ImageType) => MasonryViewData.id === item.id) if (handle === 'next' && idx === MasonryViewDataList.length - 1) { setMasonryViewData(MasonryViewDataList[0] || MasonryViewData) @@ -67,7 +67,8 @@ export default function MasonryItem() { setMasonryViewData(next || MasonryViewData) } } - } + }, [MasonryViewData, MasonryViewDataList, setMasonryViewData]); + async function downloadImg() { setDownload(true) @@ -93,6 +94,23 @@ export default function MasonryItem() { } } + React.useEffect(() => { + const handleKey = (e: KeyboardEvent) => { + if (MasonryView) { + if (e.key === "ArrowLeft") { + loadingHandle("prev"); + } else if (e.key === "ArrowRight") { + loadingHandle("next"); + } + } + }; + + document.addEventListener("keydown", handleKey); + return () => { + document.removeEventListener("keydown", handleKey); + }; + }, [MasonryView, loadingHandle]); + return ( ) { const { dataProps, pageNum, album, ...restProps } = props @@ -29,7 +30,6 @@ export default function ImageBatchDeleteSheet(props : Readonly state, ) - const [isOpen, setIsOpen] = useState(false) const [loading, setLoading] = useState(false) const [data, setData] = useState([] as any[]) @@ -55,7 +55,6 @@ export default function ImageBatchDeleteSheet(props : Readonly { dataProps.data && dataProps.data.map((item: ImageType) => ( -
+
{ return checked @@ -91,16 +93,18 @@ export default function ImageBatchDeleteSheet(props : Readonly - - - CN - -
-
- {item.id.substring(0, 16) + '...'} -
-
- {item.title ? item.title.length > 16 ? item.title.substring(0, 16) + '...' : item.title : 'N&A'} +
+ + + CN + +
+ +

+ {item.title ? item.title.length > 16 ? item.title.substring(0, 20) + '...' : item.title : 'N&A'} +

@@ -109,14 +113,7 @@ export default function ImageBatchDeleteSheet(props : Readonly +
+ ); + })} + {/* Avoid having the "Search" Icon */} + { + setInputValue(value); + inputProps?.onValueChange?.(value); + }} + onBlur={(event) => { + if (!onScrollbar) { + setOpen(false); + } + inputProps?.onBlur?.(event); + }} + onFocus={(event) => { + setOpen(true); + if (triggerSearchOnFocus) { + onSearch?.(debouncedSearchTerm); + } + inputProps?.onFocus?.(event); + }} + placeholder={hidePlaceholderWhenSelected && selected.length !== 0 ? "" : placeholder} + className={cn( + "flex-1 bg-transparent outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed", + { + "w-full": hidePlaceholderWhenSelected, + "px-3 py-2": selected.length === 0, + "ml-1": selected.length !== 0, + }, + inputProps?.className, + )} + /> + +
+
+
+
+ {open && ( + { + setOnScrollbar(false); + }} + onMouseEnter={() => { + setOnScrollbar(true); + }} + onMouseUp={() => { + inputRef?.current?.focus(); + }} + > + {isLoading ? ( + <>{loadingIndicator} + ) : ( + <> + {EmptyItem()} + {CreatableItem()} + {!selectFirstItem && } + {Object.entries(selectables).map(([key, dropdowns]) => ( + + <> + {dropdowns.map((option) => { + return ( + { + e.preventDefault(); + e.stopPropagation(); + }} + onSelect={() => { + if (selected.length >= maxSelected) { + onMaxSelected?.(selected.length); + return; + } + setInputValue(""); + const newOptions = [...selected, option]; + setSelected(newOptions); + onChange?.(newOptions); + }} + className={cn( + "cursor-pointer", + option.disable && "cursor-not-allowed opacity-50", + )} + > + {option.label} + + ); + })} + + + ))} + + )} + + )} +
+
+ + ); + }, +); + +MultipleSelector.displayName = "MultipleSelector"; +export default MultipleSelector; \ No newline at end of file diff --git a/hono/albums.ts b/hono/albums.ts index e2c41a7..88e4654 100644 --- a/hono/albums.ts +++ b/hono/albums.ts @@ -1,12 +1,12 @@ import 'server-only' -import { fetchAlbumsListAndNotDefault } from '~/server/db/query' +import { fetchAlbumsList } from '~/server/db/query' import { deleteAlbum, insertAlbums, updateAlbum, updateAlbumShow } from '~/server/db/operate' import { Hono } from 'hono' const app = new Hono() app.get('/get', async (c) => { - const data = await fetchAlbumsListAndNotDefault(); + const data = await fetchAlbumsList(); return c.json(data) }) diff --git a/hono/copyrights.ts b/hono/copyrights.ts index 6af1fac..e6584bb 100644 --- a/hono/copyrights.ts +++ b/hono/copyrights.ts @@ -12,7 +12,11 @@ const app = new Hono() app.get('/get', async (c) => { const data = await fetchCopyrightList() - return c.json(data) + if (Array.isArray(data)) { + const result = data.map((item) => ({ label: item.name, value: item.id })) + return c.json(result) + } + return c.json([]) }) app.post('/add', async (c) => { diff --git a/hono/file.ts b/hono/file.ts index 2d4d09e..95bc70f 100644 --- a/hono/file.ts +++ b/hono/file.ts @@ -1,5 +1,5 @@ import 'server-only' -import { fetchAListInfo, fetchS3Info, fetchR2Info } from '~/server/db/query' +import { fetchConfigsByKeys } from '~/server/db/query' import { getClient } from '~/server/lib/s3' import { getR2Client } from '~/server/lib/r2' import { PutObjectCommand } from '@aws-sdk/client-s3' @@ -16,7 +16,17 @@ app.post('/upload', async (c) => { const mountPath = formData.get('mountPath') || '' if (storage && storage.toString() === 's3') { - const findConfig = await fetchS3Info(); + const findConfig = await fetchConfigsByKeys([ + 'accesskey_id', + 'accesskey_secret', + 'region', + 'endpoint', + 'bucket', + 'storage_folder', + 'force_path_style', + 's3_cdn', + 's3_cdn_url' + ]); const bucket = findConfig.find((item: any) => item.config_key === 'bucket')?.config_value || ''; const storageFolder = findConfig.find((item: any) => item.config_key === 'storage_folder')?.config_value || ''; const endpoint = findConfig.find((item: any) => item.config_key === 'endpoint')?.config_value || ''; @@ -76,7 +86,14 @@ app.post('/upload', async (c) => { }` }) } else if (storage && storage.toString() === 'r2') { - const findConfig = await fetchR2Info(); + const findConfig = await fetchConfigsByKeys([ + 'r2_accesskey_id', + 'r2_accesskey_secret', + 'r2_endpoint', + 'r2_bucket', + 'r2_storage_folder', + 'r2_public_domain' + ]); const r2Bucket = findConfig.find((item: any) => item.config_key === 'r2_bucket')?.config_value || ''; const r2StorageFolder = findConfig.find((item: any) => item.config_key === 'r2_storage_folder')?.config_value || ''; const r2Endpoint = findConfig.find((item: any) => item.config_key === 'r2_endpoint')?.config_value || ''; @@ -114,7 +131,10 @@ app.post('/upload', async (c) => { }` }) } else { - const findConfig = await fetchAListInfo() + const findConfig = await fetchConfigsByKeys([ + 'alist_url', + 'alist_token' + ]) const alistToken = findConfig.find((item: any) => item.config_key === 'alist_token')?.config_value || ''; const alistUrl = findConfig.find((item: any) => item.config_key === 'alist_url')?.config_value || ''; const filePath = encodeURIComponent(`${mountPath && mountPath.toString() === '/' ? '' : mountPath}${ diff --git a/hono/settings.ts b/hono/settings.ts index 2d9d355..7d60689 100644 --- a/hono/settings.ts +++ b/hono/settings.ts @@ -1,5 +1,5 @@ import 'server-only' -import { fetchCustomInfo, fetchR2Info, fetchS3Info, fetchSecretKey, fetchUserById } from '~/server/db/query' +import { fetchConfigsByKeys, fetchSecretKey, fetchUserById } from '~/server/db/query' import { Config } from '~/types' import { updateAListConfig, updateCustomInfo, updatePassword, updateR2Config, updateS3Config } from '~/server/db/operate' import { auth } from '~/server/auth' @@ -9,17 +9,40 @@ import { Hono } from 'hono' const app = new Hono() app.get('/get-custom-info', async (c) => { - const data = await fetchCustomInfo(); + const data = await fetchConfigsByKeys([ + 'custom_title', + 'custom_favicon_url', + 'custom_author', + 'rss_feed_id', + 'rss_user_id' + ]); return c.json(data) }) app.get('/r2-info', async (c) => { - const data = await fetchR2Info(); + const data = await fetchConfigsByKeys([ + 'r2_accesskey_id', + 'r2_accesskey_secret', + 'r2_endpoint', + 'r2_bucket', + 'r2_storage_folder', + 'r2_public_domain' + ]); return c.json(data) }) app.get('/s3-info', async (c) => { - const data = await fetchS3Info(); + const data = await fetchConfigsByKeys([ + 'accesskey_id', + 'accesskey_secret', + 'region', + 'endpoint', + 'bucket', + 'storage_folder', + 'force_path_style', + 's3_cdn', + 's3_cdn_url' + ]); return c.json(data) }) diff --git a/hono/storage/alist.ts b/hono/storage/alist.ts index a206e92..2098c67 100644 --- a/hono/storage/alist.ts +++ b/hono/storage/alist.ts @@ -1,17 +1,23 @@ import 'server-only' -import { fetchAListInfo } from '~/server/db/query' +import { fetchConfigsByKeys } from '~/server/db/query' import { Hono } from 'hono' const app = new Hono() app.get('/info', async (c) => { - const data = await fetchAListInfo(); + const data = await fetchConfigsByKeys([ + 'alist_url', + 'alist_token' + ]); return c.json(data) }) app.get('/storages', async (c) => { - const findConfig = await fetchAListInfo() + const findConfig = await fetchConfigsByKeys([ + 'alist_url', + 'alist_token' + ]) const alistToken = findConfig.find((item: any) => item.config_key === 'alist_token')?.config_value || ''; const alistUrl = findConfig.find((item: any) => item.config_key === 'alist_url')?.config_value || ''; diff --git a/package.json b/package.json index 9aaa14e..7fd9946 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "picimpact", - "version": "2.0.4", + "version": "2.0.5", "private": true, "author": "Bess Croft ", "packageManager": "pnpm@9.7.1", @@ -49,6 +49,7 @@ "crypto-js": "^4.2.0", "cuid": "^3.0.0", "dayjs": "^1.11.13", + "emblor": "^1.4.6", "exifreader": "^4.25.0", "framer-motion": "^11.11.17", "heic2any": "^0.0.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b47c731..20e2dbd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -98,6 +98,9 @@ importers: dayjs: specifier: ^1.11.13 version: 1.11.13 + emblor: + specifier: ^1.4.6 + version: 1.4.6(@types/react-dom@18.3.1)(@types/react@18.3.12)(postcss@8.4.47)(react-dom@19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107))(react@19.0.0-rc-5c56b873-20241107)(typescript@5.6.3) exifreader: specifier: ^4.25.0 version: 4.25.0 @@ -472,6 +475,138 @@ packages: '@emotion/unitless@0.7.5': resolution: {integrity: sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==} + '@esbuild/android-arm64@0.17.19': + resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.17.19': + resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.17.19': + resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.17.19': + resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.17.19': + resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.17.19': + resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.17.19': + resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.17.19': + resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.17.19': + resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.17.19': + resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.17.19': + resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.17.19': + resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.17.19': + resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.17.19': + resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.17.19': + resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.17.19': + resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.17.19': + resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-x64@0.17.19': + resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.17.19': + resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.17.19': + resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.17.19': + resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.17.19': + resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + '@eslint-community/eslint-utils@4.4.0': resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -776,6 +911,9 @@ packages: '@radix-ui/number@1.1.0': resolution: {integrity: sha512-V3gRzhVNU1ldS5XhAPTom1fOIo4ccrjjJgmE+LI2h/WaFpHmx0MQApT+KZHnx8abG6Avtfcz4WoEciMnpFT3HQ==} + '@radix-ui/primitive@1.0.0': + resolution: {integrity: sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==} + '@radix-ui/primitive@1.0.1': resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==} @@ -860,6 +998,11 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-compose-refs@1.0.0': + resolution: {integrity: sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + '@radix-ui/react-compose-refs@1.0.1': resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} peerDependencies: @@ -878,6 +1021,11 @@ packages: '@types/react': optional: true + '@radix-ui/react-context@1.0.0': + resolution: {integrity: sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + '@radix-ui/react-context@1.0.1': resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} peerDependencies: @@ -905,6 +1053,25 @@ packages: '@types/react': optional: true + '@radix-ui/react-dialog@1.0.0': + resolution: {integrity: sha512-Yn9YU+QlHYLWwV1XfKiqnGVpWYWk6MeBVM6x/bcoyPvxgjQGoeT35482viLPctTMWoMw0PoHgqfSox7Ig+957Q==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + + '@radix-ui/react-dialog@1.0.4': + resolution: {integrity: sha512-hJtRy/jPULGQZceSAP2Re6/4NpKo8im6V8P2hUqZsdFiSL8l35kYsw3qbRI6Ay5mQd2+wlLqje770eq+RJ3yZg==} + 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 + '@radix-ui/react-dialog@1.0.5': resolution: {integrity: sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q==} peerDependencies: @@ -953,6 +1120,25 @@ packages: '@types/react': optional: true + '@radix-ui/react-dismissable-layer@1.0.0': + resolution: {integrity: sha512-n7kDRfx+LB1zLueRDvZ1Pd0bxdJWDUZNQ/GWoxDn2prnuJKRdxsjulejX/ePkOsLi2tTm6P24mDqlMSgQpsT6g==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + + '@radix-ui/react-dismissable-layer@1.0.4': + resolution: {integrity: sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==} + 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 + '@radix-ui/react-dismissable-layer@1.0.5': resolution: {integrity: sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==} peerDependencies: @@ -1005,6 +1191,11 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-focus-guards@1.0.0': + resolution: {integrity: sha512-UagjDk4ijOAnGu4WMUPj9ahi7/zJJqNZ9ZAiGPp7waUWJO0O1aWXi/udPphI0IUjvrhBsZJGSN66dR2dsueLWQ==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + '@radix-ui/react-focus-guards@1.0.1': resolution: {integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==} peerDependencies: @@ -1032,6 +1223,25 @@ packages: '@types/react': optional: true + '@radix-ui/react-focus-scope@1.0.0': + resolution: {integrity: sha512-C4SWtsULLGf/2L4oGeIHlvWQx7Rf+7cX/vKOAD2dXW0A1b5QXwi3wWeaEgW+wn+SEVrraMUk05vLU9fZZz5HbQ==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + + '@radix-ui/react-focus-scope@1.0.3': + resolution: {integrity: sha512-upXdPfqI4islj2CslyfUBNlaJCPybbqRHAi1KER7Isel9Q2AtSJ0zRBZv8mWQiFXD2nyAJ4BhC3yXgZ6kMBSrQ==} + 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 + '@radix-ui/react-focus-scope@1.0.4': resolution: {integrity: sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==} peerDependencies: @@ -1063,6 +1273,11 @@ packages: peerDependencies: react: ^16.x || ^17.x || ^18.x + '@radix-ui/react-id@1.0.0': + resolution: {integrity: sha512-Q6iAB/U7Tq3NTolBBQbHTgclPmGWE3OlktGGqrClPozSw4vkQ1DfQAOtzgRPecKsMdJINE05iaoDUG8tRzCBjw==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + '@radix-ui/react-id@1.0.1': resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} peerDependencies: @@ -1133,6 +1348,25 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-portal@1.0.0': + resolution: {integrity: sha512-a8qyFO/Xb99d8wQdu4o7qnigNjTPG123uADNecz0eX4usnQEj7o+cG4ZX4zkqq98NYekT7UoEQIjxBNWIFuqTA==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + + '@radix-ui/react-portal@1.0.3': + resolution: {integrity: sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA==} + 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 + '@radix-ui/react-portal@1.0.4': resolution: {integrity: sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==} peerDependencies: @@ -1172,6 +1406,12 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-presence@1.0.0': + resolution: {integrity: sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + '@radix-ui/react-presence@1.0.1': resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==} peerDependencies: @@ -1211,6 +1451,12 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-primitive@1.0.0': + resolution: {integrity: sha512-EyXe6mnRlHZ8b6f4ilTDrXmkLShICIuOTTj0GX4w1rp+wSxf3+TD05u1UOITC8VsJ2a9nwHvdXtOXEOl0Cw/zQ==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + '@radix-ui/react-primitive@1.0.3': resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} peerDependencies: @@ -1289,6 +1535,11 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-slot@1.0.0': + resolution: {integrity: sha512-3mrKauI/tWXo1Ll+gN5dHcxDPdm/Df1ufcDLCecn+pnCIVcdWE7CujXo8QaXOWRJyZyQWWbpB8eFwHzWXlv5mQ==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + '@radix-ui/react-slot@1.0.2': resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} peerDependencies: @@ -1346,6 +1597,11 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-use-callback-ref@1.0.0': + resolution: {integrity: sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + '@radix-ui/react-use-callback-ref@1.0.1': resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} peerDependencies: @@ -1364,6 +1620,11 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-controllable-state@1.0.0': + resolution: {integrity: sha512-FohDoZvk3mEXh9AWAVyRTYR4Sq7/gavuofglmiXB2g1aKyboUD4YtgWxKj8O5n+Uak52gXQ4wKz5IFST4vtJHg==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + '@radix-ui/react-use-controllable-state@1.0.1': resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} peerDependencies: @@ -1382,6 +1643,11 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-escape-keydown@1.0.0': + resolution: {integrity: sha512-JwfBCUIfhXRxKExgIqGa4CQsiMemo1Xt0W/B4ei3fpzpvPENKpMKQ8mZSB6Acj3ebrAEgi2xiQvcI1PAAodvyg==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + '@radix-ui/react-use-escape-keydown@1.0.3': resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} peerDependencies: @@ -1400,6 +1666,11 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-layout-effect@1.0.0': + resolution: {integrity: sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + '@radix-ui/react-use-layout-effect@1.0.1': resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} peerDependencies: @@ -1907,6 +2178,10 @@ packages: resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} engines: {node: '>= 0.4'} + array-move@3.0.1: + resolution: {integrity: sha512-H3Of6NIn2nNU1gsVDqDnYKY/LCdWvCMMOWifNGhKcVQgiZ6nOek39aESOvro6zmueP07exSl93YLvkN4fZOkSg==} + engines: {node: '>=10'} + array-tree-filter@2.1.0: resolution: {integrity: sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==} @@ -1988,10 +2263,20 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + bundle-require@4.2.1: + resolution: {integrity: sha512-7Q/6vkyYAwOmQNRw75x+4yRtZCZJXUDmHHlFdkiV0wgv/reNjtJwpu1jPJ0w2kbEpIM0uoKI3S4/f39dU7AjSA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + peerDependencies: + esbuild: '>=0.17' + busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + call-bind@1.0.7: resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} engines: {node: '>= 0.4'} @@ -2022,6 +2307,9 @@ packages: class-variance-authority@0.7.0: resolution: {integrity: sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==} + class-variance-authority@0.7.1: + resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} + classnames@2.5.1: resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} @@ -2039,6 +2327,12 @@ packages: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} + cmdk@0.2.1: + resolution: {integrity: sha512-U6//9lQ6JvT47+6OF6Gi8BvkxYQ8SCRRSKIJkthIMsFsLZRG0cKvTtuTaefyIKMQb8rvvXy0wGdpTNq/jPtm+g==} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + cmdk@1.0.0: resolution: {integrity: sha512-gDzVf0a09TvoJ5jnuPvygTB77+XdOSwEmJ88L6XPFPlv7T3RxbP9jgenfylrAMD0+Le1aO0nVjQUzl2g+vjz5Q==} peerDependencies: @@ -2185,6 +2479,12 @@ packages: electron-to-chromium@1.5.8: resolution: {integrity: sha512-4Nx0gP2tPNBLTrFxBMHpkQbtn2hidPVr/+/FTtcCiBYTucqc70zRyVZiOLj17Ui3wTO7SQ1/N+hkHYzJjBzt6A==} + emblor@1.4.6: + resolution: {integrity: sha512-ay0Y74xdsnuxI662153ps65wPTBC7l457NPQm+eTUrrtwMzs+Pg4taULQrGvjHoBeMOZ4W2q6/KvNg8mur3PTA==} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -2226,6 +2526,11 @@ packages: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} + esbuild@0.17.19: + resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} + engines: {node: '>=12'} + hasBin: true + escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} @@ -2335,6 +2640,10 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + exifreader@4.25.0: resolution: {integrity: sha512-lPyPXWTUuYgoKdKf3rw2EDoE9Zl7xHoy/ehPNeQ4gFVNLzfLyNMP4oEI+sP0/Czp5r/2i7cFhqg5MHsl4FYtyw==} @@ -2439,6 +2748,10 @@ packages: resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} engines: {node: '>=6'} + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + get-symbol-description@1.0.2: resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} @@ -2516,6 +2829,10 @@ packages: resolution: {integrity: sha512-f0LwJQFKdUUrCUAVowxSvNCjyzI7ZLt8XWYU/EApyeq5FfOvHFarBaE5rjU9HTNFk4RI0FkdB2edb3p/7xZjzQ==} engines: {node: '>=16.9.0'} + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -2645,6 +2962,10 @@ packages: resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} engines: {node: '>= 0.4'} + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} @@ -2687,6 +3008,10 @@ packages: jose@5.9.6: resolution: {integrity: sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ==} + joycon@3.1.1: + resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} + engines: {node: '>=10'} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -2742,6 +3067,10 @@ packages: livephotoskit@1.5.6: resolution: {integrity: sha512-dsD6EzQnExuYfYvBSxf3t1bdl2Juw7NnlpWZrsGxdYq2x4pnxyOYrkOG6LGHmklytdFdxaru86GvviLpUhaIBQ==} + load-tsconfig@0.2.5: + resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -2753,6 +3082,9 @@ packages: lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + lodash.sortby@4.7.0: + resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true @@ -2765,6 +3097,9 @@ packages: peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} @@ -2781,6 +3116,10 @@ packages: resolution: {integrity: sha512-ryBDp1Z/6X90UvjUK3RksH0IBPM137T7cmg4OgD5wQBojlAiUwuok0QeELkim/72EtcYuNlmbkrcGuxj3Kl0YQ==} engines: {node: '>= 0.6'} + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -2879,6 +3218,10 @@ packages: resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} engines: {node: '>=0.10.0'} + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + nprogress@0.2.0: resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==} @@ -2924,6 +3267,10 @@ packages: once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -3019,6 +3366,18 @@ packages: peerDependencies: postcss: ^8.4.21 + postcss-load-config@3.1.4: + resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} + engines: {node: '>= 10'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + postcss-load-config@4.0.2: resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} engines: {node: '>= 14'} @@ -3320,6 +3679,13 @@ packages: peerDependencies: react: 19.0.0-rc-5c56b873-20241107 + react-easy-sort@1.6.0: + resolution: {integrity: sha512-zd9Nn90wVlZPEwJrpqElN87sf9GZnFR1StfjgNQVbSpR5QTSzCHjEYK6REuwq49Ip+76KOMSln9tg/ST2KLelg==} + engines: {node: '>=16'} + peerDependencies: + react: '>=16.4.0' + react-dom: '>=16.4.0' + react-hook-form@7.53.1: resolution: {integrity: sha512-6aiQeBda4zjcuaugWvim9WsGqisoUk+etmFEsSUMm451/Ic8L/UAb7sRtMj3V+Hdzm6mMjU1VhiSzYUZeBm0Vg==} engines: {node: '>=18.0.0'} @@ -3352,6 +3718,16 @@ packages: '@types/react': optional: true + react-remove-scroll@2.5.4: + resolution: {integrity: sha512-xGVKJJr0SJGQVirVFAUZ2k1QLyO6m+2fy0l8Qawbp5Jgrv3DeLalrfMNBFSlmz5kriGGzsVBtGVnf4pTKIhhWA==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + react-remove-scroll@2.5.5: resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} engines: {node: '>=10'} @@ -3428,6 +3804,10 @@ packages: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} @@ -3448,6 +3828,11 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true + rollup@3.29.5: + resolution: {integrity: sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==} + engines: {node: '>=14.18.0', npm: '>=8.0.0'} + hasBin: true + rss@1.2.2: resolution: {integrity: sha512-xUhRTgslHeCBeHAqaWSbOYTydN2f0tAzNXvzh3stjz7QDhQMzdgHf3pfgNIngeytQflrFPfy6axHilTETr6gDg==} @@ -3507,6 +3892,9 @@ packages: resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} engines: {node: '>= 0.4'} + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + signal-exit@4.1.0: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} @@ -3528,6 +3916,10 @@ packages: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} + source-map@0.8.0-beta.0: + resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} + engines: {node: '>= 8'} + streamsearch@1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} @@ -3577,6 +3969,10 @@ packages: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -3621,6 +4017,9 @@ packages: tailwind-merge@2.5.4: resolution: {integrity: sha512-0q8cfZHMu9nuYP/b5Shb7Y7Sh1B7Nnl5GqNr1U+n2p6+mybvRtayrQ+0042Z5byvTA8ihjlP8Odo8/VnHbZu4Q==} + tailwind-merge@2.5.5: + resolution: {integrity: sha512-0LXunzzAZzo0tEPxV3I297ffKZPlKDrjj7NXphC8V5ak9yHC5zRmxnOe2m/Rd/7ivsOMJe3JZ2JVocoDdQTRBA==} + tailwind-scrollbar-hide@1.1.7: resolution: {integrity: sha512-X324n9OtpTmOMqEgDUEA/RgLrNfBF/jwJdctaPZDzB3mppxJk7TLIDmOreEDm1Bq4R9LSPu4Epf8VSdovNU+iA==} @@ -3659,6 +4058,13 @@ packages: toggle-selection@1.0.6: resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} + tr46@1.0.1: + resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + + tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + ts-api-utils@1.3.0: resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} engines: {node: '>=16'} @@ -3671,9 +4077,28 @@ packages: tsconfig-paths@3.15.0: resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + tslib@2.0.1: + resolution: {integrity: sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ==} + tslib@2.6.3: resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} + tsup@6.7.0: + resolution: {integrity: sha512-L3o8hGkaHnu5TdJns+mCqFsDBo83bJ44rlK7e6VdanIvpea4ArPcU3swWGsLVbXak1PqQx/V+SSmFPujBK+zEQ==} + engines: {node: '>=14.18'} + hasBin: true + peerDependencies: + '@swc/core': ^1 + postcss: ^8.4.12 + typescript: '>=4.1.0' + peerDependenciesMeta: + '@swc/core': + optional: true + postcss: + optional: true + typescript: + optional: true + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -3756,6 +4181,12 @@ packages: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 + webidl-conversions@4.0.2: + resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + + whatwg-url@7.1.0: + resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} + which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} @@ -3804,6 +4235,10 @@ packages: y18n@4.0.3: resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + yaml@2.5.0: resolution: {integrity: sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==} engines: {node: '>= 14'} @@ -4443,6 +4878,72 @@ snapshots: '@emotion/unitless@0.7.5': {} + '@esbuild/android-arm64@0.17.19': + optional: true + + '@esbuild/android-arm@0.17.19': + optional: true + + '@esbuild/android-x64@0.17.19': + optional: true + + '@esbuild/darwin-arm64@0.17.19': + optional: true + + '@esbuild/darwin-x64@0.17.19': + optional: true + + '@esbuild/freebsd-arm64@0.17.19': + optional: true + + '@esbuild/freebsd-x64@0.17.19': + optional: true + + '@esbuild/linux-arm64@0.17.19': + optional: true + + '@esbuild/linux-arm@0.17.19': + optional: true + + '@esbuild/linux-ia32@0.17.19': + optional: true + + '@esbuild/linux-loong64@0.17.19': + optional: true + + '@esbuild/linux-mips64el@0.17.19': + optional: true + + '@esbuild/linux-ppc64@0.17.19': + optional: true + + '@esbuild/linux-riscv64@0.17.19': + optional: true + + '@esbuild/linux-s390x@0.17.19': + optional: true + + '@esbuild/linux-x64@0.17.19': + optional: true + + '@esbuild/netbsd-x64@0.17.19': + optional: true + + '@esbuild/openbsd-x64@0.17.19': + optional: true + + '@esbuild/sunos-x64@0.17.19': + optional: true + + '@esbuild/win32-arm64@0.17.19': + optional: true + + '@esbuild/win32-ia32@0.17.19': + optional: true + + '@esbuild/win32-x64@0.17.19': + optional: true + '@eslint-community/eslint-utils@4.4.0(eslint@8.57.1)': dependencies: eslint: 8.57.1 @@ -4680,6 +5181,10 @@ snapshots: '@radix-ui/number@1.1.0': {} + '@radix-ui/primitive@1.0.0': + dependencies: + '@babel/runtime': 7.25.6 + '@radix-ui/primitive@1.0.1': dependencies: '@babel/runtime': 7.25.0 @@ -4765,6 +5270,11 @@ snapshots: '@types/react': 18.3.12 '@types/react-dom': 18.3.1 + '@radix-ui/react-compose-refs@1.0.0(react@19.0.0-rc-5c56b873-20241107)': + dependencies: + '@babel/runtime': 7.25.6 + react: 19.0.0-rc-5c56b873-20241107 + '@radix-ui/react-compose-refs@1.0.1(@types/react@18.3.12)(react@19.0.0-rc-5c56b873-20241107)': dependencies: '@babel/runtime': 7.25.0 @@ -4778,6 +5288,11 @@ snapshots: optionalDependencies: '@types/react': 18.3.12 + '@radix-ui/react-context@1.0.0(react@19.0.0-rc-5c56b873-20241107)': + dependencies: + '@babel/runtime': 7.25.6 + react: 19.0.0-rc-5c56b873-20241107 + '@radix-ui/react-context@1.0.1(@types/react@18.3.12)(react@19.0.0-rc-5c56b873-20241107)': dependencies: '@babel/runtime': 7.25.0 @@ -4797,6 +5312,51 @@ snapshots: optionalDependencies: '@types/react': 18.3.12 + '@radix-ui/react-dialog@1.0.0(@types/react@18.3.12)(react-dom@19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107))(react@19.0.0-rc-5c56b873-20241107)': + dependencies: + '@babel/runtime': 7.25.6 + '@radix-ui/primitive': 1.0.0 + '@radix-ui/react-compose-refs': 1.0.0(react@19.0.0-rc-5c56b873-20241107) + '@radix-ui/react-context': 1.0.0(react@19.0.0-rc-5c56b873-20241107) + '@radix-ui/react-dismissable-layer': 1.0.0(react-dom@19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107))(react@19.0.0-rc-5c56b873-20241107) + '@radix-ui/react-focus-guards': 1.0.0(react@19.0.0-rc-5c56b873-20241107) + '@radix-ui/react-focus-scope': 1.0.0(react-dom@19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107))(react@19.0.0-rc-5c56b873-20241107) + '@radix-ui/react-id': 1.0.0(react@19.0.0-rc-5c56b873-20241107) + '@radix-ui/react-portal': 1.0.0(react-dom@19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107))(react@19.0.0-rc-5c56b873-20241107) + '@radix-ui/react-presence': 1.0.0(react-dom@19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107))(react@19.0.0-rc-5c56b873-20241107) + '@radix-ui/react-primitive': 1.0.0(react-dom@19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107))(react@19.0.0-rc-5c56b873-20241107) + '@radix-ui/react-slot': 1.0.0(react@19.0.0-rc-5c56b873-20241107) + '@radix-ui/react-use-controllable-state': 1.0.0(react@19.0.0-rc-5c56b873-20241107) + aria-hidden: 1.2.4 + react: 19.0.0-rc-5c56b873-20241107 + react-dom: 19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107) + react-remove-scroll: 2.5.4(@types/react@18.3.12)(react@19.0.0-rc-5c56b873-20241107) + transitivePeerDependencies: + - '@types/react' + + '@radix-ui/react-dialog@1.0.4(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107))(react@19.0.0-rc-5c56b873-20241107)': + dependencies: + '@babel/runtime': 7.25.6 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.12)(react@19.0.0-rc-5c56b873-20241107) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.12)(react@19.0.0-rc-5c56b873-20241107) + '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107))(react@19.0.0-rc-5c56b873-20241107) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.3.12)(react@19.0.0-rc-5c56b873-20241107) + '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107))(react@19.0.0-rc-5c56b873-20241107) + '@radix-ui/react-id': 1.0.1(@types/react@18.3.12)(react@19.0.0-rc-5c56b873-20241107) + '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107))(react@19.0.0-rc-5c56b873-20241107) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107))(react@19.0.0-rc-5c56b873-20241107) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107))(react@19.0.0-rc-5c56b873-20241107) + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.12)(react@19.0.0-rc-5c56b873-20241107) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.12)(react@19.0.0-rc-5c56b873-20241107) + aria-hidden: 1.2.4 + react: 19.0.0-rc-5c56b873-20241107 + react-dom: 19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107) + react-remove-scroll: 2.5.5(@types/react@18.3.12)(react@19.0.0-rc-5c56b873-20241107) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + '@radix-ui/react-dialog@1.0.5(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107))(react@19.0.0-rc-5c56b873-20241107)': dependencies: '@babel/runtime': 7.25.0 @@ -4870,6 +5430,31 @@ snapshots: optionalDependencies: '@types/react': 18.3.12 + '@radix-ui/react-dismissable-layer@1.0.0(react-dom@19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107))(react@19.0.0-rc-5c56b873-20241107)': + dependencies: + '@babel/runtime': 7.25.6 + '@radix-ui/primitive': 1.0.0 + '@radix-ui/react-compose-refs': 1.0.0(react@19.0.0-rc-5c56b873-20241107) + '@radix-ui/react-primitive': 1.0.0(react-dom@19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107))(react@19.0.0-rc-5c56b873-20241107) + '@radix-ui/react-use-callback-ref': 1.0.0(react@19.0.0-rc-5c56b873-20241107) + '@radix-ui/react-use-escape-keydown': 1.0.0(react@19.0.0-rc-5c56b873-20241107) + react: 19.0.0-rc-5c56b873-20241107 + react-dom: 19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107) + + '@radix-ui/react-dismissable-layer@1.0.4(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107))(react@19.0.0-rc-5c56b873-20241107)': + dependencies: + '@babel/runtime': 7.25.6 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.12)(react@19.0.0-rc-5c56b873-20241107) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107))(react@19.0.0-rc-5c56b873-20241107) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.12)(react@19.0.0-rc-5c56b873-20241107) + '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.3.12)(react@19.0.0-rc-5c56b873-20241107) + react: 19.0.0-rc-5c56b873-20241107 + react-dom: 19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + '@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107))(react@19.0.0-rc-5c56b873-20241107)': dependencies: '@babel/runtime': 7.25.0 @@ -4925,6 +5510,11 @@ snapshots: '@types/react': 18.3.12 '@types/react-dom': 18.3.1 + '@radix-ui/react-focus-guards@1.0.0(react@19.0.0-rc-5c56b873-20241107)': + dependencies: + '@babel/runtime': 7.25.6 + react: 19.0.0-rc-5c56b873-20241107 + '@radix-ui/react-focus-guards@1.0.1(@types/react@18.3.12)(react@19.0.0-rc-5c56b873-20241107)': dependencies: '@babel/runtime': 7.25.0 @@ -4944,6 +5534,27 @@ snapshots: optionalDependencies: '@types/react': 18.3.12 + '@radix-ui/react-focus-scope@1.0.0(react-dom@19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107))(react@19.0.0-rc-5c56b873-20241107)': + dependencies: + '@babel/runtime': 7.25.6 + '@radix-ui/react-compose-refs': 1.0.0(react@19.0.0-rc-5c56b873-20241107) + '@radix-ui/react-primitive': 1.0.0(react-dom@19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107))(react@19.0.0-rc-5c56b873-20241107) + '@radix-ui/react-use-callback-ref': 1.0.0(react@19.0.0-rc-5c56b873-20241107) + react: 19.0.0-rc-5c56b873-20241107 + react-dom: 19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107) + + '@radix-ui/react-focus-scope@1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107))(react@19.0.0-rc-5c56b873-20241107)': + dependencies: + '@babel/runtime': 7.25.6 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.12)(react@19.0.0-rc-5c56b873-20241107) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107))(react@19.0.0-rc-5c56b873-20241107) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.12)(react@19.0.0-rc-5c56b873-20241107) + react: 19.0.0-rc-5c56b873-20241107 + react-dom: 19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + '@radix-ui/react-focus-scope@1.0.4(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107))(react@19.0.0-rc-5c56b873-20241107)': dependencies: '@babel/runtime': 7.25.0 @@ -4971,6 +5582,12 @@ snapshots: dependencies: react: 19.0.0-rc-5c56b873-20241107 + '@radix-ui/react-id@1.0.0(react@19.0.0-rc-5c56b873-20241107)': + dependencies: + '@babel/runtime': 7.25.6 + '@radix-ui/react-use-layout-effect': 1.0.0(react@19.0.0-rc-5c56b873-20241107) + react: 19.0.0-rc-5c56b873-20241107 + '@radix-ui/react-id@1.0.1(@types/react@18.3.12)(react@19.0.0-rc-5c56b873-20241107)': dependencies: '@babel/runtime': 7.25.0 @@ -5062,6 +5679,23 @@ snapshots: '@types/react': 18.3.12 '@types/react-dom': 18.3.1 + '@radix-ui/react-portal@1.0.0(react-dom@19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107))(react@19.0.0-rc-5c56b873-20241107)': + dependencies: + '@babel/runtime': 7.25.6 + '@radix-ui/react-primitive': 1.0.0(react-dom@19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107))(react@19.0.0-rc-5c56b873-20241107) + react: 19.0.0-rc-5c56b873-20241107 + react-dom: 19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107) + + '@radix-ui/react-portal@1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107))(react@19.0.0-rc-5c56b873-20241107)': + dependencies: + '@babel/runtime': 7.25.6 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107))(react@19.0.0-rc-5c56b873-20241107) + react: 19.0.0-rc-5c56b873-20241107 + react-dom: 19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + '@radix-ui/react-portal@1.0.4(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107))(react@19.0.0-rc-5c56b873-20241107)': dependencies: '@babel/runtime': 7.25.0 @@ -5092,6 +5726,14 @@ snapshots: '@types/react': 18.3.12 '@types/react-dom': 18.3.1 + '@radix-ui/react-presence@1.0.0(react-dom@19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107))(react@19.0.0-rc-5c56b873-20241107)': + dependencies: + '@babel/runtime': 7.25.6 + '@radix-ui/react-compose-refs': 1.0.0(react@19.0.0-rc-5c56b873-20241107) + '@radix-ui/react-use-layout-effect': 1.0.0(react@19.0.0-rc-5c56b873-20241107) + react: 19.0.0-rc-5c56b873-20241107 + react-dom: 19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107) + '@radix-ui/react-presence@1.0.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107))(react@19.0.0-rc-5c56b873-20241107)': dependencies: '@babel/runtime': 7.25.0 @@ -5123,6 +5765,13 @@ snapshots: '@types/react': 18.3.12 '@types/react-dom': 18.3.1 + '@radix-ui/react-primitive@1.0.0(react-dom@19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107))(react@19.0.0-rc-5c56b873-20241107)': + dependencies: + '@babel/runtime': 7.25.6 + '@radix-ui/react-slot': 1.0.0(react@19.0.0-rc-5c56b873-20241107) + react: 19.0.0-rc-5c56b873-20241107 + react-dom: 19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107) + '@radix-ui/react-primitive@1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107))(react@19.0.0-rc-5c56b873-20241107)': dependencies: '@babel/runtime': 7.25.0 @@ -5207,6 +5856,12 @@ snapshots: '@types/react': 18.3.12 '@types/react-dom': 18.3.1 + '@radix-ui/react-slot@1.0.0(react@19.0.0-rc-5c56b873-20241107)': + dependencies: + '@babel/runtime': 7.25.6 + '@radix-ui/react-compose-refs': 1.0.0(react@19.0.0-rc-5c56b873-20241107) + react: 19.0.0-rc-5c56b873-20241107 + '@radix-ui/react-slot@1.0.2(@types/react@18.3.12)(react@19.0.0-rc-5c56b873-20241107)': dependencies: '@babel/runtime': 7.25.0 @@ -5273,6 +5928,11 @@ snapshots: '@types/react': 18.3.12 '@types/react-dom': 18.3.1 + '@radix-ui/react-use-callback-ref@1.0.0(react@19.0.0-rc-5c56b873-20241107)': + dependencies: + '@babel/runtime': 7.25.6 + react: 19.0.0-rc-5c56b873-20241107 + '@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.3.12)(react@19.0.0-rc-5c56b873-20241107)': dependencies: '@babel/runtime': 7.25.0 @@ -5286,6 +5946,12 @@ snapshots: optionalDependencies: '@types/react': 18.3.12 + '@radix-ui/react-use-controllable-state@1.0.0(react@19.0.0-rc-5c56b873-20241107)': + dependencies: + '@babel/runtime': 7.25.6 + '@radix-ui/react-use-callback-ref': 1.0.0(react@19.0.0-rc-5c56b873-20241107) + react: 19.0.0-rc-5c56b873-20241107 + '@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.3.12)(react@19.0.0-rc-5c56b873-20241107)': dependencies: '@babel/runtime': 7.25.0 @@ -5301,6 +5967,12 @@ snapshots: optionalDependencies: '@types/react': 18.3.12 + '@radix-ui/react-use-escape-keydown@1.0.0(react@19.0.0-rc-5c56b873-20241107)': + dependencies: + '@babel/runtime': 7.25.6 + '@radix-ui/react-use-callback-ref': 1.0.0(react@19.0.0-rc-5c56b873-20241107) + react: 19.0.0-rc-5c56b873-20241107 + '@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.3.12)(react@19.0.0-rc-5c56b873-20241107)': dependencies: '@babel/runtime': 7.25.0 @@ -5316,6 +5988,11 @@ snapshots: optionalDependencies: '@types/react': 18.3.12 + '@radix-ui/react-use-layout-effect@1.0.0(react@19.0.0-rc-5c56b873-20241107)': + dependencies: + '@babel/runtime': 7.25.6 + react: 19.0.0-rc-5c56b873-20241107 + '@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.3.12)(react@19.0.0-rc-5c56b873-20241107)': dependencies: '@babel/runtime': 7.25.0 @@ -6026,6 +6703,8 @@ snapshots: get-intrinsic: 1.2.4 is-string: 1.0.7 + array-move@3.0.1: {} + array-tree-filter@2.1.0: {} array-union@2.1.0: {} @@ -6129,10 +6808,17 @@ snapshots: node-releases: 2.0.18 update-browserslist-db: 1.1.0(browserslist@4.23.3) + bundle-require@4.2.1(esbuild@0.17.19): + dependencies: + esbuild: 0.17.19 + load-tsconfig: 0.2.5 + busboy@1.6.0: dependencies: streamsearch: 1.1.0 + cac@6.7.14: {} + call-bind@1.0.7: dependencies: es-define-property: 1.0.0 @@ -6170,6 +6856,10 @@ snapshots: dependencies: clsx: 2.0.0 + class-variance-authority@0.7.1: + dependencies: + clsx: 2.1.1 + classnames@2.5.1: {} client-only@0.0.1: {} @@ -6184,6 +6874,14 @@ snapshots: clsx@2.1.1: {} + cmdk@0.2.1(@types/react@18.3.12)(react-dom@19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107))(react@19.0.0-rc-5c56b873-20241107): + dependencies: + '@radix-ui/react-dialog': 1.0.0(@types/react@18.3.12)(react-dom@19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107))(react@19.0.0-rc-5c56b873-20241107) + react: 19.0.0-rc-5c56b873-20241107 + react-dom: 19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107) + transitivePeerDependencies: + - '@types/react' + cmdk@1.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107))(react@19.0.0-rc-5c56b873-20241107): dependencies: '@radix-ui/react-dialog': 1.0.5(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107))(react@19.0.0-rc-5c56b873-20241107) @@ -6316,6 +7014,28 @@ snapshots: electron-to-chromium@1.5.8: {} + emblor@1.4.6(@types/react-dom@18.3.1)(@types/react@18.3.12)(postcss@8.4.47)(react-dom@19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107))(react@19.0.0-rc-5c56b873-20241107)(typescript@5.6.3): + dependencies: + '@radix-ui/react-dialog': 1.0.4(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107))(react@19.0.0-rc-5c56b873-20241107) + '@radix-ui/react-popover': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107))(react@19.0.0-rc-5c56b873-20241107) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-5c56b873-20241107) + class-variance-authority: 0.7.1 + clsx: 2.1.1 + cmdk: 0.2.1(@types/react@18.3.12)(react-dom@19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107))(react@19.0.0-rc-5c56b873-20241107) + react: 19.0.0-rc-5c56b873-20241107 + react-dom: 19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107) + react-easy-sort: 1.6.0(react-dom@19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107))(react@19.0.0-rc-5c56b873-20241107) + tailwind-merge: 2.5.5 + tsup: 6.7.0(postcss@8.4.47)(typescript@5.6.3) + transitivePeerDependencies: + - '@swc/core' + - '@types/react' + - '@types/react-dom' + - postcss + - supports-color + - ts-node + - typescript + emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} @@ -6417,6 +7137,31 @@ snapshots: is-date-object: 1.0.5 is-symbol: 1.0.4 + esbuild@0.17.19: + optionalDependencies: + '@esbuild/android-arm': 0.17.19 + '@esbuild/android-arm64': 0.17.19 + '@esbuild/android-x64': 0.17.19 + '@esbuild/darwin-arm64': 0.17.19 + '@esbuild/darwin-x64': 0.17.19 + '@esbuild/freebsd-arm64': 0.17.19 + '@esbuild/freebsd-x64': 0.17.19 + '@esbuild/linux-arm': 0.17.19 + '@esbuild/linux-arm64': 0.17.19 + '@esbuild/linux-ia32': 0.17.19 + '@esbuild/linux-loong64': 0.17.19 + '@esbuild/linux-mips64el': 0.17.19 + '@esbuild/linux-ppc64': 0.17.19 + '@esbuild/linux-riscv64': 0.17.19 + '@esbuild/linux-s390x': 0.17.19 + '@esbuild/linux-x64': 0.17.19 + '@esbuild/netbsd-x64': 0.17.19 + '@esbuild/openbsd-x64': 0.17.19 + '@esbuild/sunos-x64': 0.17.19 + '@esbuild/win32-arm64': 0.17.19 + '@esbuild/win32-ia32': 0.17.19 + '@esbuild/win32-x64': 0.17.19 + escalade@3.1.2: {} escape-string-regexp@4.0.0: {} @@ -6618,6 +7363,18 @@ snapshots: esutils@2.0.3: {} + execa@5.1.1: + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + exifreader@4.25.0: optionalDependencies: '@xmldom/xmldom': 0.9.5 @@ -6724,6 +7481,8 @@ snapshots: get-nonce@1.0.1: {} + get-stream@6.0.1: {} + get-symbol-description@1.0.2: dependencies: call-bind: 1.0.7 @@ -6810,6 +7569,8 @@ snapshots: hono@4.6.11: {} + human-signals@2.1.0: {} + ignore@5.3.2: {} import-fresh@3.3.0: @@ -6924,6 +7685,8 @@ snapshots: dependencies: call-bind: 1.0.7 + is-stream@2.0.1: {} + is-string@1.0.7: dependencies: has-tostringtag: 1.0.2 @@ -6969,6 +7732,8 @@ snapshots: jose@5.9.6: {} + joycon@3.1.1: {} + js-tokens@4.0.0: {} js-yaml@4.1.0: @@ -7019,6 +7784,8 @@ snapshots: livephotoskit@1.5.6: {} + load-tsconfig@0.2.5: {} + locate-path@5.0.0: dependencies: p-locate: 4.1.0 @@ -7029,6 +7796,8 @@ snapshots: lodash.merge@4.6.2: {} + lodash.sortby@4.7.0: {} + loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 @@ -7039,6 +7808,8 @@ snapshots: dependencies: react: 19.0.0-rc-5c56b873-20241107 + merge-stream@2.0.0: {} + merge2@1.4.1: {} micromatch@4.0.7: @@ -7052,6 +7823,8 @@ snapshots: dependencies: mime-db: 1.25.0 + mimic-fn@2.1.0: {} + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 @@ -7133,6 +7906,10 @@ snapshots: normalize-range@0.1.2: {} + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + nprogress@0.2.0: {} oauth4webapi@3.1.2: {} @@ -7181,6 +7958,10 @@ snapshots: dependencies: wrappy: 1.0.2 + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -7259,6 +8040,13 @@ snapshots: camelcase-css: 2.0.1 postcss: 8.4.47 + postcss-load-config@3.1.4(postcss@8.4.47): + dependencies: + lilconfig: 2.1.0 + yaml: 1.10.2 + optionalDependencies: + postcss: 8.4.47 + postcss-load-config@4.0.2(postcss@8.4.47): dependencies: lilconfig: 3.1.2 @@ -7648,6 +8436,13 @@ snapshots: react: 19.0.0-rc-5c56b873-20241107 scheduler: 0.25.0-rc-5c56b873-20241107 + react-easy-sort@1.6.0(react-dom@19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107))(react@19.0.0-rc-5c56b873-20241107): + dependencies: + array-move: 3.0.1 + react: 19.0.0-rc-5c56b873-20241107 + react-dom: 19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107) + tslib: 2.0.1 + react-hook-form@7.53.1(react@19.0.0-rc-5c56b873-20241107): dependencies: react: 19.0.0-rc-5c56b873-20241107 @@ -7670,6 +8465,17 @@ snapshots: optionalDependencies: '@types/react': 18.3.12 + react-remove-scroll@2.5.4(@types/react@18.3.12)(react@19.0.0-rc-5c56b873-20241107): + dependencies: + react: 19.0.0-rc-5c56b873-20241107 + react-remove-scroll-bar: 2.3.6(@types/react@18.3.12)(react@19.0.0-rc-5c56b873-20241107) + react-style-singleton: 2.2.1(@types/react@18.3.12)(react@19.0.0-rc-5c56b873-20241107) + tslib: 2.6.3 + use-callback-ref: 1.3.2(@types/react@18.3.12)(react@19.0.0-rc-5c56b873-20241107) + use-sidecar: 1.1.2(@types/react@18.3.12)(react@19.0.0-rc-5c56b873-20241107) + optionalDependencies: + '@types/react': 18.3.12 + react-remove-scroll@2.5.5(@types/react@18.3.12)(react@19.0.0-rc-5c56b873-20241107): dependencies: react: 19.0.0-rc-5c56b873-20241107 @@ -7749,6 +8555,8 @@ snapshots: resolve-from@4.0.0: {} + resolve-from@5.0.0: {} + resolve-pkg-maps@1.0.0: {} resolve@1.22.8: @@ -7769,6 +8577,10 @@ snapshots: dependencies: glob: 7.2.3 + rollup@3.29.5: + optionalDependencies: + fsevents: 2.3.3 + rss@1.2.2: dependencies: mime-types: 2.1.13 @@ -7860,6 +8672,8 @@ snapshots: get-intrinsic: 1.2.4 object-inspect: 1.13.2 + signal-exit@3.0.7: {} + signal-exit@4.1.0: {} simple-swizzle@0.2.2: @@ -7875,6 +8689,10 @@ snapshots: source-map-js@1.2.1: {} + source-map@0.8.0-beta.0: + dependencies: + whatwg-url: 7.1.0 + streamsearch@1.1.0: {} string-convert@0.2.1: {} @@ -7946,6 +8764,8 @@ snapshots: strip-bom@3.0.0: {} + strip-final-newline@2.0.0: {} + strip-json-comments@3.1.1: {} strnum@1.0.5: {} @@ -7981,6 +8801,8 @@ snapshots: tailwind-merge@2.5.4: {} + tailwind-merge@2.5.5: {} + tailwind-scrollbar-hide@1.1.7: {} tailwindcss-animate@1.0.7(tailwindcss@3.4.14): @@ -8034,6 +8856,12 @@ snapshots: toggle-selection@1.0.6: {} + tr46@1.0.1: + dependencies: + punycode: 2.3.1 + + tree-kill@1.2.2: {} + ts-api-utils@1.3.0(typescript@5.6.3): dependencies: typescript: 5.6.3 @@ -8047,8 +8875,33 @@ snapshots: minimist: 1.2.8 strip-bom: 3.0.0 + tslib@2.0.1: {} + tslib@2.6.3: {} + tsup@6.7.0(postcss@8.4.47)(typescript@5.6.3): + dependencies: + bundle-require: 4.2.1(esbuild@0.17.19) + cac: 6.7.14 + chokidar: 3.6.0 + debug: 4.3.6 + esbuild: 0.17.19 + execa: 5.1.1 + globby: 11.1.0 + joycon: 3.1.1 + postcss-load-config: 3.1.4(postcss@8.4.47) + resolve-from: 5.0.0 + rollup: 3.29.5 + source-map: 0.8.0-beta.0 + sucrase: 3.35.0 + tree-kill: 1.2.2 + optionalDependencies: + postcss: 8.4.47 + typescript: 5.6.3 + transitivePeerDependencies: + - supports-color + - ts-node + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 @@ -8140,6 +8993,14 @@ snapshots: - '@types/react' - '@types/react-dom' + webidl-conversions@4.0.2: {} + + whatwg-url@7.1.0: + dependencies: + lodash.sortby: 4.7.0 + tr46: 1.0.1 + webidl-conversions: 4.0.2 + which-boxed-primitive@1.0.2: dependencies: is-bigint: 1.0.4 @@ -8210,6 +9071,8 @@ snapshots: y18n@4.0.3: {} + yaml@1.10.2: {} + yaml@2.5.0: {} yargs-parser@18.1.3: diff --git a/server/actions.ts b/server/actions.ts index 30e57be..9bc3117 100644 --- a/server/actions.ts +++ b/server/actions.ts @@ -2,7 +2,7 @@ import { signIn, signOut } from '~/server/auth' import { queryAuthSecret, queryAuthStatus } from '~/server/db/query' -import * as OTPAuth from "otpauth" +import * as OTPAuth from 'otpauth' export async function authenticate( email: string, password: string, token: string diff --git a/server/db/operate.ts b/server/db/operate.ts index 74becc5..6d6f74f 100644 --- a/server/db/operate.ts +++ b/server/db/operate.ts @@ -1,13 +1,13 @@ 'use server' import { db } from '~/server/lib/db' -import { AlbumType, ImageType, CopyrightType } from '~/types' +import { AlbumType, CopyrightType, ImageType } from '~/types' export async function insertAlbums(album: AlbumType) { if (!album.sort || album.sort < 0) { album.sort = 0 } - const resultRow = await db.albums.create({ + return await db.albums.create({ data: { name: album.name, album_value: album.album_value, @@ -17,11 +17,10 @@ export async function insertAlbums(album: AlbumType) { del: 0 } }) - return resultRow } export async function deleteAlbum(id: string) { - const resultRow = await db.albums.update({ + return await db.albums.update({ where: { id: id }, @@ -30,7 +29,6 @@ export async function deleteAlbum(id: string) { updatedAt: new Date(), } }) - return resultRow } export async function updateAlbum(album: AlbumType) { @@ -71,7 +69,7 @@ export async function updateAlbum(album: AlbumType) { } export async function insertCopyright(copyright: CopyrightType) { - const resultRow = await db.copyright.create({ + return await db.copyright.create({ data: { name: copyright.name, social_name: copyright.social_name, @@ -83,11 +81,10 @@ export async function insertCopyright(copyright: CopyrightType) { del: 0 } }) - return resultRow } export async function deleteCopyright(id: string) { - const resultRow = await db.copyright.update({ + return await db.copyright.update({ where: { id: id }, @@ -96,7 +93,6 @@ export async function deleteCopyright(id: string) { updatedAt: new Date(), } }) - return resultRow } export async function updateCopyright(copyright: CopyrightType) { @@ -254,7 +250,7 @@ export async function updateImage(image: ImageType) { } export async function updatePassword(userId: string, newPassword: string) { - const resultRow = await db.user.update({ + return await db.user.update({ where: { id: userId }, @@ -262,11 +258,10 @@ export async function updatePassword(userId: string, newPassword: string) { password: newPassword } }) - return resultRow } export async function updateS3Config(configs: any) { - const resultRow = await db.$executeRaw` + return await db.$executeRaw` UPDATE "public"."configs" SET config_value = CASE WHEN config_key = 'accesskey_id' THEN ${configs.accesskeyId} @@ -283,11 +278,10 @@ export async function updateS3Config(configs: any) { updated_at = NOW() WHERE config_key IN ('accesskey_id', 'accesskey_secret', 'region', 'endpoint', 'bucket', 'storage_folder', 'force_path_style', 's3_cdn', 's3_cdn_url'); ` - return resultRow } export async function updateR2Config(configs: any) { - const resultRow = await db.$executeRaw` + return await db.$executeRaw` UPDATE "public"."configs" SET config_value = CASE WHEN config_key = 'r2_accesskey_id' THEN ${configs.r2AccesskeyId} @@ -301,11 +295,10 @@ export async function updateR2Config(configs: any) { updated_at = NOW() WHERE config_key IN ('r2_accesskey_id', 'r2_accesskey_secret', 'r2_endpoint', 'r2_bucket', 'r2_storage_folder', 'r2_public_domain'); ` - return resultRow } export async function updateAListConfig(configs: any) { - const resultRow = await db.$executeRaw` + return await db.$executeRaw` UPDATE "public"."configs" SET config_value = CASE WHEN config_key = 'alist_url' THEN ${configs.alistUrl} @@ -315,11 +308,10 @@ export async function updateAListConfig(configs: any) { updated_at = NOW() WHERE config_key IN ('alist_url', 'alist_token'); ` - return resultRow } export async function updateImageShow(id: string, show: number) { - const resultRow = await db.images.update({ + return await db.images.update({ where: { id: id }, @@ -328,7 +320,6 @@ export async function updateImageShow(id: string, show: number) { updatedAt: new Date() } }) - return resultRow } export async function updateImageAlbum(imageId: string, albumId: string) { @@ -356,7 +347,7 @@ export async function updateImageAlbum(imageId: string, albumId: string) { } export async function updateAlbumShow(id: string, show: number) { - const resultRow = await db.albums.update({ + return await db.albums.update({ where: { id: id }, @@ -365,11 +356,10 @@ export async function updateAlbumShow(id: string, show: number) { updatedAt: new Date() } }) - return resultRow } export async function updateCopyrightShow(id: string, show: number) { - const resultRow = await db.copyright.update({ + return await db.copyright.update({ where: { id: id }, @@ -378,7 +368,6 @@ export async function updateCopyrightShow(id: string, show: number) { updatedAt: new Date() } }) - return resultRow } export async function updateCustomInfo(title: string, customFaviconUrl: string, customAuthor: string, feedId: string, userId: string) { @@ -432,7 +421,7 @@ export async function updateCustomInfo(title: string, customFaviconUrl: string, } export async function saveAuthTemplateSecret(token: string) { - const resultRow = await db.configs.update({ + await db.configs.update({ where: { config_key: 'auth_temp_secret' }, diff --git a/server/db/query.ts b/server/db/query.ts index 00b9b5e..9a00902 100644 --- a/server/db/query.ts +++ b/server/db/query.ts @@ -2,21 +2,11 @@ import { db } from '~/server/lib/db' -export async function fetchS3Info() { - const findConfig = await db.configs.findMany({ +export async function fetchConfigsByKeys(keys: string[]) { + return await db.configs.findMany({ where: { config_key: { - in: [ - 'accesskey_id', - 'accesskey_secret', - 'region', - 'endpoint', - 'bucket', - 'storage_folder', - 'force_path_style', - 's3_cdn', - 's3_cdn_url' - ] + in: keys } }, select: { @@ -25,59 +15,11 @@ export async function fetchS3Info() { config_value: true, detail: true } - }) - - return findConfig; -} - -export async function fetchR2Info() { - const findConfig = await db.configs.findMany({ - where: { - config_key: { - in: [ - 'r2_accesskey_id', - 'r2_accesskey_secret', - 'r2_endpoint', - 'r2_bucket', - 'r2_storage_folder', - 'r2_public_domain' - ] - } - }, - select: { - id: true, - config_key: true, - config_value: true, - detail: true - } - }) - - return findConfig; -} - -export async function fetchAListInfo() { - const findConfig = await db.configs.findMany({ - where: { - config_key: { - in: [ - 'alist_url', - 'alist_token' - ] - } - }, - select: { - id: true, - config_key: true, - config_value: true, - detail: true - } - }) - - return findConfig; + }); } export async function fetchAlbumsList() { - const findAll = await db.albums.findMany({ + return await db.albums.findMany({ where: { del: 0 }, @@ -92,30 +34,7 @@ export async function fetchAlbumsList() { updatedAt: 'desc' } ] - }) - - return findAll; -} - -export async function fetchAlbumsListAndNotDefault() { - const findAll = await db.albums.findMany({ - where: { - del: 0 - }, - orderBy: [ - { - sort: 'desc', - }, - { - createdAt: 'desc', - }, - { - updatedAt: 'desc' - } - ] - }) - - return findAll; + }); } export async function fetchServerImagesListByAlbum(pageNum: number, album: string) { @@ -126,25 +45,23 @@ export async function fetchServerImagesListByAlbum(pageNum: number, album: strin pageNum = 1 } if (album && album !== '') { - const findAll = await db.$queryRaw` + return await db.$queryRaw` SELECT image.*, albums.name AS album_name, albums.id AS album_value, - ( - SELECT json_agg(row_to_json(t)) - FROM ( - SELECT copyright.id - FROM "public"."copyrights" AS copyright - INNER JOIN "public"."images_copyright_relation" AS icrelation - ON copyright.id = icrelation."copyrightId" - INNER JOIN "public"."images" AS image_child - ON icrelation."imageId" = image_child."id" - WHERE copyright.del = 0 - AND image_child.del = 0 - AND image.id = image_child.id - ) t - ) AS copyrights + COALESCE(( + SELECT json_agg(copyright.id) + FROM "public"."copyrights" AS copyright + INNER JOIN "public"."images_copyright_relation" AS icrelation + ON copyright.id = icrelation."copyrightId" + INNER JOIN "public"."images" AS image_child + ON icrelation."imageId" = image_child."id" + WHERE copyright.del = 0 + AND image_child.del = 0 + AND image.id = image_child.id + ), + '[]'::json) AS copyrights FROM "public"."images" AS image INNER JOIN "public"."images_albums_relation" AS relation @@ -159,29 +76,25 @@ export async function fetchServerImagesListByAlbum(pageNum: number, album: strin albums.album_value = ${album} ORDER BY image.sort DESC, image.created_at DESC, image.updated_at DESC LIMIT 8 OFFSET ${(pageNum - 1) * 8} - ` - - return findAll; + `; } - const findAll = await db.$queryRaw` + return await db.$queryRaw` SELECT image.*, albums.name AS album_name, albums.id AS album_value, - ( - SELECT json_agg(row_to_json(t)) - FROM ( - SELECT copyright.id - FROM "public"."copyrights" AS copyright - INNER JOIN "public"."images_copyright_relation" AS icrelation - ON copyright.id = icrelation."copyrightId" - INNER JOIN "public"."images" AS image_child - ON icrelation."imageId" = image_child."id" + COALESCE(( + SELECT json_agg(copyright.id) -- 直接聚合 copyright.id,而不是整行 + FROM "public"."copyrights" AS copyright + INNER JOIN "public"."images_copyright_relation" AS icrelation + ON copyright.id = icrelation."copyrightId" + INNER JOIN "public"."images" AS image_child + ON icrelation."imageId" = image_child."id" WHERE copyright.del = 0 AND image_child.del = 0 AND image.id = image_child.id - ) t - ) AS copyrights + ), + '[]'::json) AS copyrights FROM "public"."images" AS image LEFT JOIN "public"."images_albums_relation" AS relation @@ -192,9 +105,7 @@ export async function fetchServerImagesListByAlbum(pageNum: number, album: strin image.del = 0 ORDER BY image.sort DESC, image.created_at DESC, image.updated_at DESC LIMIT 8 OFFSET ${(pageNum - 1) * 8} - ` - - return findAll; + `; } export async function fetchServerImagesPageTotalByAlbum(album: string) { @@ -248,7 +159,7 @@ export async function fetchClientImagesListByAlbum(pageNum: number, album: strin if (pageNum < 1) { pageNum = 1 } - const findAll = await db.$queryRaw` + return await db.$queryRaw` SELECT image.*, albums.name AS album_name, @@ -293,9 +204,7 @@ export async function fetchClientImagesListByAlbum(pageNum: number, album: strin albums.album_value = ${album} ORDER BY image.sort DESC, image.created_at DESC, image.updated_at DESC LIMIT 16 OFFSET ${(pageNum - 1) * 16} - ` - - return findAll; + `; } export async function fetchClientImagesPageTotalByAlbum(album: string) { @@ -330,7 +239,7 @@ export async function fetchClientImagesListByTag(pageNum: number, tag: string) { if (pageNum < 1) { pageNum = 1 } - const findAll = await db.$queryRaw` + return await db.$queryRaw` SELECT image.*, albums.name AS album_name, @@ -368,8 +277,7 @@ export async function fetchClientImagesListByTag(pageNum: number, tag: string) { image.labels::jsonb @> ${JSON.stringify([tag])}::jsonb ORDER BY image.sort DESC, image.created_at DESC, image.updated_at DESC LIMIT 16 OFFSET ${(pageNum - 1) * 16} - ` - return findAll; + `; } export async function fetchClientImagesPageTotalByTag(tag: string) { @@ -401,7 +309,7 @@ export async function fetchClientImagesPageTotalByTag(tag: string) { } export async function fetchAlbumsShow() { - const findAll = await db.albums.findMany({ + return await db.albums.findMany({ where: { del: 0, show: 0 @@ -411,36 +319,17 @@ export async function fetchAlbumsShow() { sort: 'desc' } ] - }) - - return findAll; + }); } export async function fetchImagesAnalysis() { - const total = await db.images.count({ - where: { - del: 0 - }, - }); - - const showTotal = await db.images.count({ - where: { - del: 0, - show: 0 - }, - }) - - const crTotal = await db.copyright.count({ - where: { - del: 0 - } - }) - - const tagsTotal = await db.albums.count({ - where: { - del: 0 - }, - }) + const counts = await db.$queryRaw<[{ images_total: number, images_show: number, cr_total: number, tags_total: number }]>` + SELECT + (SELECT COUNT(*) FROM "public"."images" WHERE del = 0) as images_total, + (SELECT COUNT(*) FROM "public"."images" WHERE del = 0 AND show = 0) as images_show, + (SELECT COUNT(*) FROM "public"."copyrights" WHERE del = 0) as cr_total, + (SELECT COUNT(*) FROM "public"."albums" WHERE del = 0) as tags_total + `; const result = await db.$queryRaw` SELECT @@ -468,25 +357,24 @@ export async function fetchImagesAnalysis() { result.show_total = Number(result.show_total) return { - total, - showTotal, - crTotal, - tagsTotal, + total: Number(counts[0].images_total), + showTotal: Number(counts[0].images_show), + crTotal: Number(counts[0].cr_total), + tagsTotal: Number(counts[0].tags_total), result } } export async function fetchUserById(userId: string) { - const findUser = await db.user.findUnique({ + return await db.user.findUnique({ where: { id: userId } }) - return findUser } export async function fetchSecretKey() { - const find = await db.configs.findFirst({ + return await db.configs.findFirst({ where: { config_key: 'secret_key' }, @@ -496,29 +384,10 @@ export async function fetchSecretKey() { config_value: true } }) - - return find -} - -export async function fetchCustomInfo() { - const find = await db.configs.findMany({ - where: { - config_key: { - in: ['custom_title', 'custom_favicon_url', 'custom_author', 'rss_feed_id', 'rss_user_id'] - } - }, - select: { - id: true, - config_key: true, - config_value: true - } - }) - - return find } export async function fetchCopyrightList() { - const findAll = await db.copyright.findMany({ + return await db.copyright.findMany({ where: { del: 0, }, @@ -530,13 +399,11 @@ export async function fetchCopyrightList() { updatedAt: 'desc' } ] - }) - - return findAll; + }); } export async function fetchImageByIdAndAuth(id: string) { - const findAll = await db.$queryRaw` + return await db.$queryRaw` SELECT "images".* FROM @@ -555,13 +422,11 @@ export async function fetchImageByIdAndAuth(id: string) { "albums".show = 0 AND "images".id = ${id} - ` - - return findAll; + `; } export async function queryAuthStatus() { - const find = await db.configs.findFirst({ + return await db.configs.findFirst({ where: { config_key: 'auth_enable' }, @@ -570,13 +435,11 @@ export async function queryAuthStatus() { config_key: true, config_value: true } - }) - - return find; + }); } export async function queryAuthTemplateSecret() { - const find = await db.configs.findFirst({ + return await db.configs.findFirst({ where: { config_key: 'auth_temp_secret' }, @@ -585,13 +448,11 @@ export async function queryAuthTemplateSecret() { config_key: true, config_value: true } - }) - - return find; + }); } export async function queryAuthSecret() { - const find = await db.configs.findFirst({ + return await db.configs.findFirst({ where: { config_key: 'auth_secret' }, @@ -600,14 +461,12 @@ export async function queryAuthSecret() { config_key: true, config_value: true } - }) - - return find; + }); } export async function getRSSImages() { // 每个相册取最新 10 张照片 - const find = await db.$queryRaw` + return await db.$queryRaw` WITH RankedImages AS ( SELECT i.*, @@ -626,7 +485,5 @@ export async function getRSSImages() { SELECT * FROM RankedImages WHERE rn <= 10; - ` - - return find; + `; }