diff --git a/.github/workflows/nicolium.yaml b/.github/workflows/nicolium.yaml index 6cd8edf1c..ba1f3d7f4 100644 --- a/.github/workflows/nicolium.yaml +++ b/.github/workflows/nicolium.yaml @@ -3,6 +3,7 @@ name: Nicolium CI on: push: branches: [ "develop", "semistable" ] + tags: [ "v*" ] pull_request: branches: [ "develop" ] @@ -69,24 +70,35 @@ jobs: working-directory: ./packages/nicolium/dist run: zip -r ../nicolium.zip . + - name: Upload release zip artifact + if: startsWith(github.ref, 'refs/tags/') + uses: actions/upload-artifact@v4 + with: + name: nicolium-release-zip + path: packages/nicolium/nicolium.zip + - name: build + if: ${{ !startsWith(github.ref, 'refs/tags/') }} env: NODE_ENV: production working-directory: ./packages/nicolium run: | - BANNER_HTML="pl.mkljczk.pl runs Nicolium's \`develop\` branch, which can break sometimes. For a more stable experience, use web.nicolium.app." WITH_LANDING_PAGE=true pnpm build + BANNER_HTML="pl.mkljczk.pl runs Nicolium's \`develop\` branch, which can break sometimes. For a more stable experience, use web.nicolium.app." WITH_LANDING_PAGE=true ANALYZE=true pnpm build cp dist/index.html dist/404.html cp nicolium.zip dist/pl-fe.zip - name: Build pl-api documentation + if: ${{ !startsWith(github.ref, 'refs/tags/') }} working-directory: ./packages/pl-api run: npx typedoc - name: Copy pl-api documentation + if: ${{ !startsWith(github.ref, 'refs/tags/') }} working-directory: ./packages/pl-api run: cp docs ../nicolium/dist/pl-api-docs -r - name: Create docs redirect + if: ${{ !startsWith(github.ref, 'refs/tags/') }} working-directory: . run: | mkdir -p ./packages/nicolium/dist/docs @@ -96,11 +108,31 @@ jobs: EOF - name: Upload Github Pages artifact + if: ${{ !startsWith(github.ref, 'refs/tags/') }} uses: actions/upload-pages-artifact@v3 with: name: github-pages path: packages/nicolium/dist + release: + needs: build + if: startsWith(github.ref, 'refs/tags/') + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - name: Download release zip artifact + uses: actions/download-artifact@v4 + with: + name: nicolium-release-zip + path: . + + - name: Upload asset to GitHub Release + uses: softprops/action-gh-release@v2 + with: + files: nicolium.zip + generate_release_notes: true + deploy: needs: build if: github.ref == 'refs/heads/develop' diff --git a/docs/installing/mitra.md b/docs/installing/mitra.md index d907aca01..9f3d8615c 100644 --- a/docs/installing/mitra.md +++ b/docs/installing/mitra.md @@ -9,7 +9,7 @@ order: 31 Installing Nicolium as a frontend for Mitra is no different from installing the default Mitra Web frontend. Just extract the Nicolium files into the directory specified in `config.yaml` under `web_client_dir`, by default `/usr/share/mitra/www`. ```bash -curl -O https://pl.mkljczk.pl/pl-fe.zip -unzip pl-fe.zip -d /usr/share/mitra/www -rm pl-fe.zip +curl -O https://web.nicolium.app/release.zip +unzip release.zip -d /usr/share/mitra/www +rm release.zip ``` \ No newline at end of file diff --git a/docs/installing/pleroma-akkoma.md b/docs/installing/pleroma-akkoma.md index ad9ab2858..b5c5d154b 100644 --- a/docs/installing/pleroma-akkoma.md +++ b/docs/installing/pleroma-akkoma.md @@ -11,34 +11,34 @@ order: 32 The most straightforward way to install Nicolium as a frontend for Pleroma or Akkoma is to simply download it and place its files in the `/instance/static` directory of your Pleroma/Akkoma installation (usually `/opt/pleroma/instance/static` or `/opt/akkoma/instance/static`, accordingly). ```bash -curl -O https://pl.mkljczk.pl/pl-fe.zip -unzip pl-fe.zip -d /opt/pleroma/instance/static/ -rm pl-fe.zip +curl -O https://web.nicolium.app/release.zip +unzip release.zip -d /opt/pleroma/instance/static/ +rm release.zip ``` ## Installation via Pleroma/Akkoma frontend management -It is also possible to use the Pleroma/Akkoma frontend management tool. You can find more information about it in the [Pleroma documentation](https://docs.pleroma.social/backend/administration/frontends-management/). You can use either the PleromaFE built-in admin dashboard or the older AdminFE to install Nicolium and set it as the server frontend. You don't have to provide any URL. It's right there in Pleroma/Akkoma. +It is also possible to use the Pleroma/Akkoma frontend management tool. You can find more information about it in the [Pleroma documentation](https://docs.pleroma.social/backend/administration/frontends-management/). You can use either the PleromaFE built-in admin dashboard or the older AdminFE to install Nicolium and set it as the server frontend. You don't have to provide any URL. It's right there in Pleroma/Akkoma (under the name `pl-fe`). To install it from CLI, use: ### OTP ```bash -./bin/pleroma_ctl frontend install pl-fe --ref develop --build-url https://pl.mkljczk.pl/pl-fe.zip --build-dir . +./bin/pleroma_ctl frontend install nicolium --ref release --build-url https://web.nicolium.app/release.zip --build-dir . ``` ### From Source ```bash -mix pleroma.frontend install pl-fe --ref develop --build-url https://pl.mkljczk.pl/pl-fe.zip --build-dir . +mix pleroma.frontend install nicolium --ref release --build-url https://web.nicolium.app/release.zip --build-dir . ``` It is now possible to set Nicolium as the primary frontend in the configuration file or via AdminFE: ```elixir config :pleroma, :frontends, primary: %{ - "name" => "pl-fe", - "ref" => "develop" + "name" => "nicolium", # Use `pl-fe` if you installed it via Pleroma/Akkoma dashboard + "ref" => "release" }, ... ``` diff --git a/docs/installing/standalone.md b/docs/installing/standalone.md index fe569fc4d..52b881ef9 100644 --- a/docs/installing/standalone.md +++ b/docs/installing/standalone.md @@ -19,4 +19,4 @@ nicolium.example.com { } ``` -This assumes you're serving Nicolium under the nicolium.example.com domain and the Nicolium files are located in `/var/www/nicolium`. You can download Nicolium from `https://pl.mkljczk.pl/pl-fe.zip` or [build it from source](../building/nicolium.md). \ No newline at end of file +This assumes you're serving Nicolium under the nicolium.example.com domain and the Nicolium files are located in `/var/www/nicolium`. You can download Nicolium from `https://web.nicolium.app/release.zip` or [build it from source](../building/nicolium.md). \ No newline at end of file diff --git a/package.json b/package.json index 58f66bbf6..c1fd97b1b 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "@oxfmt/binding-linux-x64-gnu": "^0.36.0", "@oxlint/binding-linux-x64-gnu": "^1.51.0", "husky": "^9.0.0", - "lint-staged": "^16.2.7" + "lint-staged": "^16.4.0" }, "resolutions": { "@types/react": "^19.2.14", diff --git a/packages/nicolium/CHANGELOG.md b/packages/nicolium/CHANGELOG.md index a000c5ed1..19699d1e8 100644 --- a/packages/nicolium/CHANGELOG.md +++ b/packages/nicolium/CHANGELOG.md @@ -6,7 +6,7 @@ ### Major changes -- Switched to a separate library [`pl-api`](https://codeberg.org/nicolium/nicolium/src/branch/develop/packages/pl-api) for Mastodon API integration. It is mostly written from scratch, inheriting minor code parts from Soapbox/Mastodon. This also comes with improved compatibility with various Mastodon API extensions and abstracts out the implementation details. +- Switched to a separate library [`pl-api`](https://codeberg.org/nicolium/nicolium/src/packages/pl-api) for Mastodon API integration. It is mostly written from scratch, inheriting minor code parts from Soapbox/Mastodon. This also comes with improved compatibility with various Mastodon API extensions and abstracts out the implementation details. - Migrated client data stores from Redux to Zustand and remote data stores to TanStack Query. Stores have been migrated away from `immutable`. - Migrated router from React Router to TanStack Router. - Styles are being migrated from TailwindCSS to SCSS. diff --git a/packages/nicolium/index.html b/packages/nicolium/index.html index a2ddb8c49..04fd3aa79 100644 --- a/packages/nicolium/index.html +++ b/packages/nicolium/index.html @@ -4,7 +4,7 @@ diff --git a/packages/nicolium/package.json b/packages/nicolium/package.json index cb509a6ab..2e57711fc 100644 --- a/packages/nicolium/package.json +++ b/packages/nicolium/package.json @@ -41,31 +41,30 @@ "@fontsource/noto-sans-javanese": "^5.2.8", "@fontsource/roboto-mono": "^5.2.8", "@fontsource/tajawal": "^5.2.7", - "@lexical/code": "^0.41.0", - "@lexical/hashtag": "^0.41.0", - "@lexical/link": "^0.41.0", - "@lexical/list": "^0.41.0", - "@lexical/markdown": "^0.41.0", - "@lexical/react": "^0.41.0", - "@lexical/rich-text": "^0.41.0", - "@lexical/selection": "^0.41.0", - "@lexical/utils": "^0.41.0", + "@lexical/code": "^0.42.0", + "@lexical/hashtag": "^0.42.0", + "@lexical/link": "^0.42.0", + "@lexical/list": "^0.42.0", + "@lexical/markdown": "^0.42.0", + "@lexical/react": "^0.42.0", + "@lexical/rich-text": "^0.42.0", + "@lexical/selection": "^0.42.0", + "@lexical/utils": "^0.42.0", "@mkljczk/url-purify": "^0.0.5", "@phosphor-icons/core": "^2.1.1", "@reach/combobox": "^0.18.0", "@reach/rect": "^0.18.0", "@reach/tabs": "^0.18.0", "@react-spring/web": "^10.0.3", - "@reduxjs/toolkit": "^2.11.2", - "@sentry/browser": "^10.43.0", - "@sentry/core": "^10.43.0", - "@sentry/react": "^10.43.0", + "@sentry/browser": "^10.45.0", + "@sentry/core": "^10.45.0", + "@sentry/react": "^10.45.0", "@tailwindcss/aspect-ratio": "^0.4.2", "@tailwindcss/forms": "^0.5.11", "@tailwindcss/typography": "^0.5.19", - "@tanstack/react-pacer": "^0.20.0", - "@tanstack/react-query": "^5.90.21", - "@tanstack/react-router": "^1.167.4", + "@tanstack/react-pacer": "^0.21.0", + "@tanstack/react-query": "^5.94.5", + "@tanstack/react-router": "^1.168.2", "@transfem-org/sfm-js": "^0.26.1", "@twemoji/svg": "^15.0.0", "@uidotdev/usehooks": "^2.4.1", @@ -91,7 +90,7 @@ "intl-messageformat": "^11.1.2", "intl-pluralrules": "^2.0.1", "leaflet": "^1.9.4", - "lexical": "^0.41.0", + "lexical": "^0.42.0", "line-awesome": "^1.3.0", "localforage": "^1.10.0", "lodash-es": "^4.17.23", @@ -122,7 +121,7 @@ "stringz": "^2.1.0", "tabbable": "^6.4.0", "use-mutative": "^1.3.1", - "valibot": "^1.2.0", + "valibot": "^1.3.1", "zustand": "^5.0.12", "zustand-mutative": "^1.3.1" }, @@ -142,30 +141,30 @@ "@types/react-dom": "^19.2.3", "@types/react-sparklines": "^1.7.5", "@types/react-swipeable-views": "^0.13.6", - "@typescript/native-preview": "7.0.0-dev.20260317.1", + "@typescript/native-preview": "7.0.0-dev.20260322.1", "@vitejs/plugin-react": "^6.0.0", "@vitest/coverage-v8": "4.1.0", "eslint-plugin-formatjs": "^6.3.0", "globals": "^17.4.0", - "jsdom": "^29.0.0", + "jsdom": "^29.0.1", "oxfmt": "^0.41.0", "oxlint": "^1.56.0", - "oxlint-tsgolint": "^0.17.0", + "oxlint-tsgolint": "^0.17.1", "rollup-plugin-bundle-stats": "^4.22.0", - "stylelint": "^17.4.0", + "stylelint": "^17.5.0", "stylelint-config-clean-order": "^8.0.1", "stylelint-config-standard-scss": "^17.0.0", "stylelint-order": "^8.0.0", "tailwindcss": "^3.4.19", "tslib": "^2.8.1", - "type-fest": "^5.4.4", + "type-fest": "^5.5.0", "typescript": "5.9.3", - "vite": "^8.0.0", + "vite": "^8.0.1", "vite-plugin-compile-time": "^0.4.6", "vite-plugin-html": "^3.2.2", "vite-plugin-pwa": "^1.2.0", "vite-plugin-require": "^1.2.14", - "vite-plugin-static-copy": "^3.3.0", + "vite-plugin-static-copy": "^3.4.0", "vitest": "^4.1.0" }, "lint-staged": { diff --git a/packages/nicolium/src/columns/notifications.tsx b/packages/nicolium/src/columns/notifications.tsx index 42a2cfa40..3cddd6020 100644 --- a/packages/nicolium/src/columns/notifications.tsx +++ b/packages/nicolium/src/columns/notifications.tsx @@ -329,7 +329,7 @@ const NotificationsColumn: React.FC = ({ multiColumn, comp placeholderCount={20} onLoadMore={handleLoadOlder} onScrollToTop={handleScrollToTop} - listClassName={clsx('⁂-status-list', { 'animate-pulse': isLoading })} + listClassName={clsx('⁂-status-list', { 'no-reduce-motion:animate-pulse': isLoading })} useWindowScroll={!multiColumn} > {scrollableContent!} diff --git a/packages/nicolium/src/components/accounts/account-hover-card.tsx b/packages/nicolium/src/components/accounts/account-hover-card.tsx index a1838ebb3..e63049958 100644 --- a/packages/nicolium/src/components/accounts/account-hover-card.tsx +++ b/packages/nicolium/src/components/accounts/account-hover-card.tsx @@ -1,4 +1,4 @@ -import { autoUpdate, flip, shift, useFloating, useTransitionStyles } from '@floating-ui/react'; +import { autoUpdate, flip, shift, useFloating } from '@floating-ui/react'; import iconCalendarDots from '@phosphor-icons/core/regular/calendar-dots.svg'; import iconTag from '@phosphor-icons/core/regular/tag.svg'; import { useRouter } from '@tanstack/react-router'; @@ -15,6 +15,7 @@ import Text from '@/components/ui/text'; import { useCurrentAccount } from '@/contexts/current-account-context'; import { UserPanel } from '@/features/ui/util/async-components'; import { useFrontendConfig } from '@/hooks/use-frontend-config'; +import { useTransitionStyles } from '@/hooks/use-transition-styles'; import { useAccountScrobbleQuery } from '@/queries/accounts/account-scrobble'; import { useAccount } from '@/queries/accounts/use-account'; import { usePatronUser } from '@/queries/patron/use-patron-user'; diff --git a/packages/nicolium/src/components/accounts/account.tsx b/packages/nicolium/src/components/accounts/account.tsx index 5f2bd3cd7..0a7cd3cd7 100644 --- a/packages/nicolium/src/components/accounts/account.tsx +++ b/packages/nicolium/src/components/accounts/account.tsx @@ -216,7 +216,6 @@ const Account = ({ useLayoutEffect(() => { const onResize = () => { - console.log('resizing'); const style: React.CSSProperties = {}; const actionWidth = actionRef.current?.clientWidth || 0; diff --git a/packages/nicolium/src/components/accounts/scrobble.tsx b/packages/nicolium/src/components/accounts/scrobble.tsx index b5dcd3cb5..b1dc557c0 100644 --- a/packages/nicolium/src/components/accounts/scrobble.tsx +++ b/packages/nicolium/src/components/accounts/scrobble.tsx @@ -48,7 +48,7 @@ const Scrobble: React.FC = ({ scrobble }) => { diff --git a/packages/nicolium/src/components/navigation/compose-button.tsx b/packages/nicolium/src/components/navigation/compose-button.tsx index b2613a6f0..206db2ba5 100644 --- a/packages/nicolium/src/components/navigation/compose-button.tsx +++ b/packages/nicolium/src/components/navigation/compose-button.tsx @@ -31,11 +31,15 @@ const ComposeButton: React.FC = ({ shrink }) => { const HomeComposeButton: React.FC = ({ shrink }) => { const { openModal } = useModalsActions(); const onOpenCompose = () => { - openModal('COMPOSE'); + openModal('COMPOSE', undefined, document.getElementById('sidebar-compose') || undefined); }; return ( - diff --git a/packages/nicolium/src/components/placeholders/placeholder-avatar.tsx b/packages/nicolium/src/components/placeholders/placeholder-avatar.tsx index 3352b41bc..4905d9281 100644 --- a/packages/nicolium/src/components/placeholders/placeholder-avatar.tsx +++ b/packages/nicolium/src/components/placeholders/placeholder-avatar.tsx @@ -21,7 +21,9 @@ const PlaceholderAvatar: React.FC = ({ size, withText = fals }, [size]); return ( -
+
{withText && ( diff --git a/packages/nicolium/src/components/placeholders/placeholder-card.tsx b/packages/nicolium/src/components/placeholders/placeholder-card.tsx index 72ce9fc98..b01f768e7 100644 --- a/packages/nicolium/src/components/placeholders/placeholder-card.tsx +++ b/packages/nicolium/src/components/placeholders/placeholder-card.tsx @@ -7,7 +7,7 @@ import { randomIntFromInterval, generateText } from '@/utils/placeholders'; const PlaceholderCard: React.FC = React.memo(() => (
 
diff --git a/packages/nicolium/src/components/placeholders/placeholder-chat-message.tsx b/packages/nicolium/src/components/placeholders/placeholder-chat-message.tsx index 29aef934f..6bfa84064 100644 --- a/packages/nicolium/src/components/placeholders/placeholder-chat-message.tsx +++ b/packages/nicolium/src/components/placeholders/placeholder-chat-message.tsx @@ -14,7 +14,7 @@ const PlaceholderChatMessage = ({ isMyMessage = false }: { isMyMessage?: boolean
diff --git a/packages/nicolium/src/components/placeholders/placeholder-chat.tsx b/packages/nicolium/src/components/placeholders/placeholder-chat.tsx index 115f4c7e5..6cf0fd82f 100644 --- a/packages/nicolium/src/components/placeholders/placeholder-chat.tsx +++ b/packages/nicolium/src/components/placeholders/placeholder-chat.tsx @@ -5,7 +5,7 @@ import PlaceholderDisplayName from './placeholder-display-name'; /** Fake chat to display while data is loading. */ const PlaceholderChat = () => ( -
+
diff --git a/packages/nicolium/src/components/placeholders/placeholder-event-header.tsx b/packages/nicolium/src/components/placeholders/placeholder-event-header.tsx index 3725efc4a..85b8d8580 100644 --- a/packages/nicolium/src/components/placeholders/placeholder-event-header.tsx +++ b/packages/nicolium/src/components/placeholders/placeholder-event-header.tsx @@ -9,7 +9,7 @@ const PlaceholderEventHeader = () => { const locationLength = randomIntFromInterval(5, 30); return ( -
+

{generateText(eventNameLength)}

diff --git a/packages/nicolium/src/components/placeholders/placeholder-event-preview.tsx b/packages/nicolium/src/components/placeholders/placeholder-event-preview.tsx index 290c7059d..17173a616 100644 --- a/packages/nicolium/src/components/placeholders/placeholder-event-preview.tsx +++ b/packages/nicolium/src/components/placeholders/placeholder-event-preview.tsx @@ -8,7 +8,7 @@ const PlaceholderEventPreview = () => { const nameLength = randomIntFromInterval(5, 15); return ( -
+
{generateText(eventNameLength)} diff --git a/packages/nicolium/src/components/placeholders/placeholder-group-card.tsx b/packages/nicolium/src/components/placeholders/placeholder-group-card.tsx index cf6eba642..a1a56ecea 100644 --- a/packages/nicolium/src/components/placeholders/placeholder-group-card.tsx +++ b/packages/nicolium/src/components/placeholders/placeholder-group-card.tsx @@ -7,7 +7,7 @@ const PlaceholderGroupCard = () => { const groupNameLength = randomIntFromInterval(12, 20); return ( -
+
{/* Group Cover Image */}
diff --git a/packages/nicolium/src/components/placeholders/placeholder-group-search.tsx b/packages/nicolium/src/components/placeholders/placeholder-group-search.tsx index 111992f9b..7cfea0fd7 100644 --- a/packages/nicolium/src/components/placeholders/placeholder-group-search.tsx +++ b/packages/nicolium/src/components/placeholders/placeholder-group-search.tsx @@ -7,7 +7,7 @@ const PlaceholderGroupSearch = ({ withJoinAction = true }: { withJoinAction?: bo const groupNameLength = randomIntFromInterval(12, 20); return ( -
+
{/* Group Avatar */}
diff --git a/packages/nicolium/src/components/placeholders/placeholder-hashtag.tsx b/packages/nicolium/src/components/placeholders/placeholder-hashtag.tsx index dc91e71fa..1b747e558 100644 --- a/packages/nicolium/src/components/placeholders/placeholder-hashtag.tsx +++ b/packages/nicolium/src/components/placeholders/placeholder-hashtag.tsx @@ -7,7 +7,7 @@ const PlaceholderHashtag: React.FC = () => { const length = randomIntFromInterval(15, 30); return ( -
+

{generateText(length)}

); diff --git a/packages/nicolium/src/components/placeholders/placeholder-media-gallery.tsx b/packages/nicolium/src/components/placeholders/placeholder-media-gallery.tsx index d198de6f8..8443c549e 100644 --- a/packages/nicolium/src/components/placeholders/placeholder-media-gallery.tsx +++ b/packages/nicolium/src/components/placeholders/placeholder-media-gallery.tsx @@ -78,7 +78,7 @@ const PlaceholderMediaGallery: React.FC = ({ media, de return (
); diff --git a/packages/nicolium/src/components/placeholders/placeholder-notification.tsx b/packages/nicolium/src/components/placeholders/placeholder-notification.tsx index 65ea6b255..efd59207d 100644 --- a/packages/nicolium/src/components/placeholders/placeholder-notification.tsx +++ b/packages/nicolium/src/components/placeholders/placeholder-notification.tsx @@ -7,7 +7,7 @@ import PlaceholderStatusContent from './placeholder-status-content'; /** Fake notification to display while data is loading. */ const PlaceholderNotification = React.memo(() => (
-
+
diff --git a/packages/nicolium/src/components/placeholders/placeholder-sidebar-suggestions.tsx b/packages/nicolium/src/components/placeholders/placeholder-sidebar-suggestions.tsx index a529009ee..65bf041d2 100644 --- a/packages/nicolium/src/components/placeholders/placeholder-sidebar-suggestions.tsx +++ b/packages/nicolium/src/components/placeholders/placeholder-sidebar-suggestions.tsx @@ -9,7 +9,7 @@ const PlaceholderSidebarSuggestions = ({ limit }: { limit: number }) => { return ( <> {new Array(limit).fill(undefined).map((_, idx) => ( -
+
diff --git a/packages/nicolium/src/components/placeholders/placeholder-sidebar-trends.tsx b/packages/nicolium/src/components/placeholders/placeholder-sidebar-trends.tsx index f23b115d8..dfd3c6b80 100644 --- a/packages/nicolium/src/components/placeholders/placeholder-sidebar-trends.tsx +++ b/packages/nicolium/src/components/placeholders/placeholder-sidebar-trends.tsx @@ -11,7 +11,7 @@ const PlaceholderSidebarTrends = ({ limit }: { limit: number }) => { {new Array(limit).fill(undefined).map((_, idx) => (

{generateText(trend)}

{generateText(stat)}

diff --git a/packages/nicolium/src/components/placeholders/placeholder-status.tsx b/packages/nicolium/src/components/placeholders/placeholder-status.tsx index c97172d44..9c5e73124 100644 --- a/packages/nicolium/src/components/placeholders/placeholder-status.tsx +++ b/packages/nicolium/src/components/placeholders/placeholder-status.tsx @@ -18,7 +18,7 @@ const PlaceholderStatus: React.FC = React.memo(({ variant = 'py-4': variant === 'slim', })} > -
+
diff --git a/packages/nicolium/src/components/statuses/status-hover-card.tsx b/packages/nicolium/src/components/statuses/status-hover-card.tsx index 9507bca02..7bce7c537 100644 --- a/packages/nicolium/src/components/statuses/status-hover-card.tsx +++ b/packages/nicolium/src/components/statuses/status-hover-card.tsx @@ -1,10 +1,11 @@ -import { autoUpdate, flip, shift, useFloating, useTransitionStyles } from '@floating-ui/react'; +import { autoUpdate, flip, shift, useFloating } from '@floating-ui/react'; import { useRouter } from '@tanstack/react-router'; import clsx from 'clsx'; import React, { useEffect } from 'react'; import { showStatusHoverCard } from '@/components/statuses/hover-status-wrapper'; import StatusContainer from '@/components/statuses/status-container'; +import { useTransitionStyles } from '@/hooks/use-transition-styles'; import { useStatus } from '@/queries/statuses/use-status'; import { useStatusHoverCardActions, useStatusHoverCardStore } from '@/stores/status-hover-card'; diff --git a/packages/nicolium/src/components/ui/avatar.tsx b/packages/nicolium/src/components/ui/avatar.tsx index 53a72f8c9..b012fc444 100644 --- a/packages/nicolium/src/components/ui/avatar.tsx +++ b/packages/nicolium/src/components/ui/avatar.tsx @@ -119,7 +119,7 @@ const Avatar: React.FC = (props) => { style={style} className={clsx( 'relative rounded-lg bg-gray-200 dark:bg-gray-900', - isCat && '⁂-avatar__cat', + isCat && '⁂-avatar--cat', className, )} > diff --git a/packages/nicolium/src/components/ui/combobox.css b/packages/nicolium/src/components/ui/combobox.css deleted file mode 100644 index 5c708c8e9..000000000 --- a/packages/nicolium/src/components/ui/combobox.css +++ /dev/null @@ -1,31 +0,0 @@ -:root { - --reach-combobox: 1; -} - -[data-reach-combobox-popover] { - @apply rounded-md shadow-lg bg-white dark:bg-gray-900 dark:ring-2 dark:ring-primary-700 z-[100]; -} - -[data-reach-combobox-list] { - @apply list-none m-0 py-1 px-0 select-none; -} - -[data-reach-combobox-option] { - @apply block px-4 py-2.5 text-sm text-gray-700 dark:text-gray-500 cursor-pointer; -} - -[data-reach-combobox-option][aria-selected='true'] { - @apply bg-gray-100 dark:bg-gray-800; -} - -[data-reach-combobox-option]:hover { - @apply bg-gray-100 dark:bg-gray-800; -} - -[data-reach-combobox-option][aria-selected='true']:hover { - @apply bg-gray-100 dark:bg-gray-800; -} - -[data-suggested-value] { - @apply font-bold; -} diff --git a/packages/nicolium/src/components/ui/combobox.scss b/packages/nicolium/src/components/ui/combobox.scss new file mode 100644 index 000000000..9c03d06de --- /dev/null +++ b/packages/nicolium/src/components/ui/combobox.scss @@ -0,0 +1,52 @@ +:root { + --reach-combobox: 1; +} + +[data-reach-combobox-popover] { + z-index: 100; + border-radius: 0.375rem; + background: white; + box-shadow: var(--shadow-lg); + + .dark & { + background: rgb(var(--color-gray-900)); + outline: 2px solid rgb(var(--color-primary-700)); + } +} + +[data-reach-combobox-list] { + user-select: none; + margin: 0; + padding: 0.25rem 0; + list-style-type: none; +} + +[data-reach-combobox-option] { + cursor: pointer; + + display: block; + + padding: 0.625rem 1rem; + + font-size: 0.875rem; + line-height: 1.25rem; + color: rgb(var(--color-gray-700)); + + .dark & { + color: rgb(var(--color-gray-500)); + } +} + +[data-reach-combobox-option][aria-selected='true'], +[data-reach-combobox-option]:hover, +[data-reach-combobox-option][aria-selected='true']:hover { + background: rgb(var(--color-gray-100)); + + .dark & { + background: rgb(var(--color-gray-800)); + } +} + +[data-suggested-value] { + font-weight: 700; +} diff --git a/packages/nicolium/src/components/ui/combobox.tsx b/packages/nicolium/src/components/ui/combobox.tsx index acd17e700..ef208172b 100644 --- a/packages/nicolium/src/components/ui/combobox.tsx +++ b/packages/nicolium/src/components/ui/combobox.tsx @@ -1,4 +1,4 @@ -import './combobox.css'; +import './combobox.scss'; export { Combobox as default, diff --git a/packages/nicolium/src/components/ui/multiselect.tsx b/packages/nicolium/src/components/ui/multiselect.tsx index 91f4182e0..5e8f8e930 100644 --- a/packages/nicolium/src/components/ui/multiselect.tsx +++ b/packages/nicolium/src/components/ui/multiselect.tsx @@ -23,7 +23,7 @@ THE SOFTWARE. */ // Adapted from [multiselect-react-dropdown](https://github.com/srigar/multiselect-react-dropdown) -import iconXCircle from '@phosphor-icons/core/regular/x-circle.svg'; +import iconX from '@phosphor-icons/core/regular/x.svg'; import clsx from 'clsx'; import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; @@ -235,7 +235,7 @@ const Multiselect: React.FC = ({ title={intl.formatMessage(messages.removeItem)} aria-label={intl.formatMessage(messages.removeItem)} > - + ))} @@ -253,7 +253,7 @@ const Multiselect: React.FC = ({ />
e.preventDefault()} >
    diff --git a/packages/nicolium/src/components/ui/popover.tsx b/packages/nicolium/src/components/ui/popover.tsx index 062837786..6b4feb623 100644 --- a/packages/nicolium/src/components/ui/popover.tsx +++ b/packages/nicolium/src/components/ui/popover.tsx @@ -11,12 +11,13 @@ import { useFloating, useHover, useInteractions, - useTransitionStyles, type OffsetOptions, } from '@floating-ui/react'; import clsx from 'clsx'; import React, { useRef, useState } from 'react'; +import { useTransitionStyles } from '@/hooks/use-transition-styles'; + import Portal from './portal'; interface IPopover { diff --git a/packages/nicolium/src/components/ui/spinner.scss b/packages/nicolium/src/components/ui/spinner.scss deleted file mode 100644 index 58e844e2e..000000000 --- a/packages/nicolium/src/components/ui/spinner.scss +++ /dev/null @@ -1,104 +0,0 @@ -/** - * iOS style loading spinner. - * Adapted from: https://loading.io/css/ - * With some help scaling it: https://signalvnoise.com/posts/2577-loading-spinner-animation-using-css-and-webkit - */ - -.spinner { - @apply inline-block relative w-20 h-20; -} - -.spinner > div { - @apply absolute origin-[50%_50%] w-full h-full; - animation: spinner 1.2s linear infinite; -} - -.spinner > div::after { - display: block; - position: absolute; - border-radius: 9999px; - content: ' '; - top: 3.75%; - left: 46.25%; - width: 7.5%; - height: 22.5%; - background: rgb(var(--color-gray-700)); - - .dark & { - background: rgb(var(--color-gray-400)); - } - - .dark button & { - background: white; - } -} - -.spinner > div:nth-child(1) { - transform: rotate(0deg); - animation-delay: -1.1s; -} - -.spinner > div:nth-child(2) { - transform: rotate(30deg); - animation-delay: -1s; -} - -.spinner > div:nth-child(3) { - transform: rotate(60deg); - animation-delay: -0.9s; -} - -.spinner > div:nth-child(4) { - transform: rotate(90deg); - animation-delay: -0.8s; -} - -.spinner > div:nth-child(5) { - transform: rotate(120deg); - animation-delay: -0.7s; -} - -.spinner > div:nth-child(6) { - transform: rotate(150deg); - animation-delay: -0.6s; -} - -.spinner > div:nth-child(7) { - transform: rotate(180deg); - animation-delay: -0.5s; -} - -.spinner > div:nth-child(8) { - transform: rotate(210deg); - animation-delay: -0.4s; -} - -.spinner > div:nth-child(9) { - transform: rotate(240deg); - animation-delay: -0.3s; -} - -.spinner > div:nth-child(10) { - transform: rotate(270deg); - animation-delay: -0.2s; -} - -.spinner > div:nth-child(11) { - transform: rotate(300deg); - animation-delay: -0.1s; -} - -.spinner > div:nth-child(12) { - transform: rotate(330deg); - animation-delay: 0s; -} - -@keyframes spinner { - 0% { - opacity: 1; - } - - 100% { - opacity: 0; - } -} diff --git a/packages/nicolium/src/components/ui/spinner.tsx b/packages/nicolium/src/components/ui/spinner.tsx index 627862028..37dc7de4a 100644 --- a/packages/nicolium/src/components/ui/spinner.tsx +++ b/packages/nicolium/src/components/ui/spinner.tsx @@ -1,10 +1,6 @@ import React from 'react'; import { FormattedMessage } from 'react-intl'; -import Text from './text'; - -import './spinner.scss'; - interface ISpinner { /** Width and height of the spinner in pixels. */ size?: number; @@ -14,17 +10,17 @@ interface ISpinner { /** Spinning loading placeholder. */ const Spinner = ({ size = 30, withText = true }: ISpinner) => ( -
    -
    +
    +
    {Array.from(Array(12).keys()).map((i) => (
     
    ))}
    {withText && ( - +

    - +

    )}
    ); diff --git a/packages/nicolium/src/components/ui/tabs.css b/packages/nicolium/src/components/ui/tabs.css deleted file mode 100644 index 684b52f6e..000000000 --- a/packages/nicolium/src/components/ui/tabs.css +++ /dev/null @@ -1,22 +0,0 @@ -:root { - --reach-tabs: 1; -} - -[data-reach-tabs] { - @apply relative pb-[3px]; -} - -[data-reach-tab-list] { - @apply flex overflow-auto; -} - -[data-reach-tab] { - @apply flex-1 flex justify-center items-center - min-w-fit py-4 px-1 text-center font-medium text-sm text-gray-700 - dark:text-gray-600 hover:text-gray-800 dark:hover:text-gray-500 - focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 dark:ring-gray-800 dark:ring-offset-0 dark:focus-visible:ring-primary-500; -} - -[data-reach-tab][data-selected] { - @apply text-gray-900 dark:text-gray-100; -} diff --git a/packages/nicolium/src/components/ui/tabs.scss b/packages/nicolium/src/components/ui/tabs.scss new file mode 100644 index 000000000..fe69a36d5 --- /dev/null +++ b/packages/nicolium/src/components/ui/tabs.scss @@ -0,0 +1,59 @@ +:root { + --reach-tabs: 1; +} + +[data-reach-tabs] { + position: relative; + padding-bottom: 3px; +} + +[data-reach-tab-list] { + overflow: auto; + display: flex; +} + +[data-reach-tab] { + display: flex; + flex: 1 1 0%; + align-items: center; + justify-content: center; + + min-width: fit-content; + padding: 1rem 0.25rem; + + font-size: 0.875rem; + font-weight: 500; + line-height: 1.25rem; + color: rgb(var(--color-gray-700)); + text-align: center; + + .dark & { + color: rgb(var(--color-gray-600)); + } + + &:hover { + color: rgb(var(--color-gray-800)); + + .dark & { + color: rgb(var(--color-gray-500)); + } + } + + &:focus-visible { + outline: 2px solid rgb(var(--color-primary-500)); + outline-offset: 2px; + + .dark & { + outline-color: rgb(var(--color-primary-500)); + outline-offset: 0; + } + } +} + +[data-reach-tab][data-selected] { + color: rgb(var(--color-gray-900)); + + .dark & { + color: rgb(var(--color-gray-100)); + } +} diff --git a/packages/nicolium/src/components/ui/tabs.tsx b/packages/nicolium/src/components/ui/tabs.tsx index 01c4f4d6f..f8566bf7c 100644 --- a/packages/nicolium/src/components/ui/tabs.tsx +++ b/packages/nicolium/src/components/ui/tabs.tsx @@ -13,7 +13,7 @@ import Counter from './counter'; import type { LinkOptions } from '@tanstack/react-router'; -import './tabs.css'; +import './tabs.scss'; const HORIZONTAL_PADDING = 8; const AnimatedContext = React.createContext = ({ children, ...rest }) => {
    {children} diff --git a/packages/nicolium/src/components/ui/tooltip.tsx b/packages/nicolium/src/components/ui/tooltip.tsx index 015fa012b..f561feddf 100644 --- a/packages/nicolium/src/components/ui/tooltip.tsx +++ b/packages/nicolium/src/components/ui/tooltip.tsx @@ -7,10 +7,11 @@ import { useFloating, useHover, useInteractions, - useTransitionStyles, } from '@floating-ui/react'; import React, { useRef, useState } from 'react'; +import { useTransitionStyles } from '@/hooks/use-transition-styles'; + interface ITooltip { /** Element to display the tooltip around. */ children: React.ReactElement; diff --git a/packages/nicolium/src/features/compose/components/compose-form-button.tsx b/packages/nicolium/src/features/compose/components/compose-form-button.tsx index 55bab6e29..18f433e2c 100644 --- a/packages/nicolium/src/features/compose/components/compose-form-button.tsx +++ b/packages/nicolium/src/features/compose/components/compose-form-button.tsx @@ -27,6 +27,8 @@ const ComposeFormButton: React.FC = ({ })} src={icon} title={title} + aria-label={title} + aria-pressed={active} disabled={disabled} onClick={onClick} /> diff --git a/packages/nicolium/src/features/emoji/components/emoji-picker.tsx b/packages/nicolium/src/features/emoji/components/emoji-picker.tsx index 39c8a45a7..74ea3e323 100644 --- a/packages/nicolium/src/features/emoji/components/emoji-picker.tsx +++ b/packages/nicolium/src/features/emoji/components/emoji-picker.tsx @@ -11,12 +11,24 @@ const getSpritesheetURL = () => spritesheetURL; const getImageURL = (set: string, name: string) => joinPublicPath(`/packs/emoji/${name}.svg`); const Picker: React.FC = (props) => { - const ref = useRef(null); + const ref = useRef(null); useEffect(() => { const input = { ...props, data, ref, autoFocus: true, getImageURL, getSpritesheetURL }; new EmojiPicker(input); + + // Force a reflow on the shadow DOM scroll container so unicode emojis + // render immediately on mobile instead of waiting for user interaction. + requestAnimationFrame(() => { + const picker = ref.current?.querySelector('em-emoji-picker'); + const scrollable = picker?.shadowRoot?.querySelector('.scroll'); + if (scrollable) { + (scrollable as HTMLElement).style.overflow = 'hidden'; + void (scrollable as HTMLElement).offsetHeight; + (scrollable as HTMLElement).style.overflow = ''; + } + }); }, []); return
    ; diff --git a/packages/nicolium/src/features/emoji/containers/emoji-picker-dropdown-container.tsx b/packages/nicolium/src/features/emoji/containers/emoji-picker-dropdown-container.tsx index 2b8976019..86cd8395b 100644 --- a/packages/nicolium/src/features/emoji/containers/emoji-picker-dropdown-container.tsx +++ b/packages/nicolium/src/features/emoji/containers/emoji-picker-dropdown-container.tsx @@ -1,4 +1,4 @@ -import { useFloating, shift, flip, autoUpdate, useTransitionStyles } from '@floating-ui/react'; +import { useFloating, shift, flip, autoUpdate } from '@floating-ui/react'; import iconSmiley from '@phosphor-icons/core/regular/smiley.svg'; import clsx from 'clsx'; import React, { useMemo, useState } from 'react'; @@ -7,6 +7,7 @@ import { defineMessages, useIntl } from 'react-intl'; import IconButton from '@/components/ui/icon-button'; import Portal from '@/components/ui/portal'; import { useClickOutside } from '@/hooks/use-click-outside'; +import { useTransitionStyles } from '@/hooks/use-transition-styles'; import EmojiPickerDropdown, { type IEmojiPickerDropdown, @@ -106,6 +107,15 @@ const EmojiPickerDropdownContainer: React.FC = ({ {isMounted && ( + {/* Backdrop to catch taps outside the picker on mobile */} +
    { + e.stopPropagation(); + e.preventDefault(); + setIsOpen(false); + }} + />
    , + props?: UseTransitionStylesProps, +) => { + const { reduceMotion } = useSettings(); + const result = useFloatingTransitionStyles(context, props); + + if (reduceMotion || prefersReducedMotion.matches) { + result.styles = {}; + } + + return result; +}; + +export { useTransitionStyles }; diff --git a/packages/nicolium/src/init/nicolium-head.tsx b/packages/nicolium/src/init/nicolium-head.tsx index c250ef666..a434ad424 100644 --- a/packages/nicolium/src/init/nicolium-head.tsx +++ b/packages/nicolium/src/init/nicolium-head.tsx @@ -13,6 +13,8 @@ import { useSettings } from '@/stores/settings'; const Helmet = React.lazy(() => import('@/components/helmet')); +const prefersReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)'); + /** Injects metadata into site head. */ const NicoliumHead = () => { const locale = useLocale(); @@ -35,7 +37,7 @@ const NicoliumHead = () => { const dsn = frontendConfig.sentryDsn; const bodyClass = clsx({ - 'no-reduce-motion': !reduceMotion, + 'no-reduce-motion': !(reduceMotion || prefersReducedMotion.matches), 'underline-links': underlineLinks, demetricator: demetricator, 'system-font': systemFont, diff --git a/packages/nicolium/src/pages/status-lists/interaction-requests.tsx b/packages/nicolium/src/pages/status-lists/interaction-requests.tsx index 24e29d664..5b8960ce6 100644 --- a/packages/nicolium/src/pages/status-lists/interaction-requests.tsx +++ b/packages/nicolium/src/pages/status-lists/interaction-requests.tsx @@ -323,7 +323,7 @@ const InteractionRequestsPage = () => { emptyMessageText={emptyMessage} onLoadMore={() => fetchNextPage()} listClassName={clsx('⁂-status-list', { - 'animate-pulse': data?.length === 0, + 'no-reduce-motion:animate-pulse': data?.length === 0, })} > {data?.map((request) => ( diff --git a/packages/nicolium/src/stores/settings.ts b/packages/nicolium/src/stores/settings.ts index aac35bbc2..d6cc0607c 100644 --- a/packages/nicolium/src/stores/settings.ts +++ b/packages/nicolium/src/stores/settings.ts @@ -131,6 +131,11 @@ const mergeSettings = (state: State, updating = false) => { .catch(() => { toast.error(messages.redirectServicesUpdateFail); }); + } else if ( + mergedSettings.urlPrivacy.redirectLinksMode === 'off' && + state.settings.urlPrivacy.redirectLinksMode !== 'off' + ) { + setManualRedirectServices(currentAccountId, {}); } } } diff --git a/packages/nicolium/src/styles/basics.scss b/packages/nicolium/src/styles/basics.scss index 0b448217a..e1f4727a6 100644 --- a/packages/nicolium/src/styles/basics.scss +++ b/packages/nicolium/src/styles/basics.scss @@ -8,13 +8,19 @@ body { } ::selection { - @apply bg-primary-600 text-white; -} - -noscript { - @apply text-center; + color: white; + background: rgb(var(--color-primary-600)); } .emojione { - @apply w-4 h-4 -mt-[0.2ex] mb-[0.2ex] inline-block align-middle object-contain; + display: inline-block; + + width: 1rem; + height: 1rem; + margin-top: -0.2ex; + margin-bottom: 0.2ex; + + vertical-align: middle; + + object-fit: contain; } diff --git a/packages/nicolium/src/styles/emoji-picker.scss b/packages/nicolium/src/styles/emoji-picker.scss index 8046a15a8..a3c03b1a9 100644 --- a/packages/nicolium/src/styles/emoji-picker.scss +++ b/packages/nicolium/src/styles/emoji-picker.scss @@ -1,8 +1,26 @@ em-emoji-picker { - border: 1px solid rgb(var(--color-gray-700)); + --rgb-accent: var(--color-primary-600); + --rgb-background: var(--color-white); + --rgb-input: var(--color-gray-100); + --rgb-color: var(--color-gray-900); + + border: 1px solid rgb(var(--color-gray-300)); + border-radius: 0.75rem; @apply max-sm:top-[50%] max-sm:fixed max-sm:left-[50%] max-sm:translate-x-[-50%] max-sm:translate-y-[-50%]; } .dark em-emoji-picker { - border: 1px solid rgb(var(--color-gray-600)); + --rgb-background: var(--color-gray-900); + --rgb-input: var(--color-gray-800); + --rgb-color: var(--color-gray-100); + + border: 1px solid rgb(var(--color-gray-700)); +} + +.black em-emoji-picker { + --rgb-background: 0 0 0; + --rgb-input: var(--color-gray-900); + --rgb-color: var(--color-gray-100); + + border: 1px solid rgb(var(--color-gray-800)); } diff --git a/packages/nicolium/src/styles/forms.scss b/packages/nicolium/src/styles/forms.scss index 5e456eda5..b55b339bb 100644 --- a/packages/nicolium/src/styles/forms.scss +++ b/packages/nicolium/src/styles/forms.scss @@ -1,15 +1,23 @@ +@use './new/variables'; + select { - @apply pl-3 pr-10 py-2 text-base border-gray-300 focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm rounded-md; + padding: 0.5rem 2.5rem 0.5rem 0.75rem; + border-color: rgb(var(--color-gray-300)); + border-radius: 0.375rem; + + font-size: 0.9375rem; background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e"); -} -.form-error { - @apply before:border-solid before:border-transparent before:h-0 before:left-2.5 before:pointer-events-none before:w-0 before:absolute before:border-[6px] before:ml-[-1px] after:border-solid after:border-transparent after:h-0 after:left-2.5 after:pointer-events-none after:w-0 after:absolute before:border-b-red-200; -} + &:focus { + border-color: rgb(var(--color-indigo-500)); + outline: 2px solid rgb(var(--color-indigo-500)); + } -.input.with_label.toggle .label_input { - @apply flex text-sm items-center; + @media (min-width: variables.$breakpoint-sm) { + font-size: 0.875rem; + line-height: 1.25rem; + } } // Adapted from [multiselect-react-dropdown](https://github.com/srigar/multiselect-react-dropdown), licensed under MIT License. @@ -23,16 +31,6 @@ select { opacity: 0.5; } - input { - margin-top: 3px; - border: none; - background: transparent; - - &:focus { - outline: none; - } - } - ul { overflow-y: auto; display: block; @@ -56,12 +54,60 @@ select { .searchWrapper { position: relative; - border: 1px solid; - @apply rounded-md border-gray-300 bg-white min-h-[38px] max-w-[400px] py-0 pl-3 pr-10 text-base focus:border-primary-500 focus:outline-none focus:ring-primary-500 disabled:opacity-50 dark:border-gray-800 dark:bg-gray-900 dark:text-gray-100 dark:ring-1 dark:ring-gray-800 dark:focus:border-primary-500 dark:focus:ring-primary-500 sm:text-sm w-auto; + display: flex; + flex-wrap: wrap; + align-items: center; + + width: auto; + max-width: 25rem; + min-height: 38px; + padding: 0 2.5rem 0 0.75rem; + border: 1px solid rgb(var(--color-gray-300)); + border-radius: 0.375rem; + + font-size: 0.9375rem; + + background: white; + + &:focus { + border-color: rgb(var(--color-primary-500)); + outline: 2px solid rgb(var(--color-primary-500)); + } + + .dark & { + border-color: rgb(var(--color-gray-800)); + color: rgb(var(--color-gray-100)); + background: rgb(var(--color-gray-900)); + outline: 2px solid rgb(var(--color-primary-700)); + + &:focus { + border-color: rgb(var(--color-primary-500)); + outline-color: rgb(var(--color-primary-500)); + } + } > input { - @apply first:pl-0 p-1.5 m-0 focus:ring-0 text-base sm:text-sm; + margin: 0; + padding: 0; + border: none; + + font-size: 0.9375rem; + + background: transparent; + box-shadow: none; + + &:focus { + outline: none; + } + + @media (min-width: variables.$breakpoint-sm) { + font-size: 0.875rem; + } + } + + @media (min-width: variables.$breakpoint-sm) { + font-size: 0.875rem; } } @@ -69,6 +115,7 @@ select { display: inline-flex; align-items: center; + margin: 0.25rem 0; margin-right: 5px; padding: 4px 10px; border-radius: 11px; @@ -78,18 +125,24 @@ select { color: #fff; white-space: nowrap; - @apply bg-primary-600 my-1; + background: rgb(var(--color-primary-600)); } .optionListContainer { position: absolute; z-index: 2; + display: block; + width: 100%; margin-top: 1px; border-radius: 4px; background: #fff; + + &--hidden { + display: none; + } } .displayBlock { @@ -106,16 +159,20 @@ select { } .optionContainer { - @apply border-gray-300 dark:border-gray-800 dark:bg-gray-900; + border-color: rgb(var(--color-gray-300)); + + .dark & { + border-color: rgb(var(--color-gray-800)); + background: rgb(var(--color-gray-900)); + outline: 2px solid rgb(var(--color-primary-700)); + } } .option { - @apply hover:bg-primary-600; - + &:hover, &:focus { - @apply bg-primary-600; - color: #fff; + background: rgb(var(--color-primary-600)); } } } diff --git a/packages/nicolium/src/styles/new/accounts.scss b/packages/nicolium/src/styles/new/accounts.scss index 31fc960ce..00cc54e41 100644 --- a/packages/nicolium/src/styles/new/accounts.scss +++ b/packages/nicolium/src/styles/new/accounts.scss @@ -112,7 +112,7 @@ inset: 0; } - &:hover { + .no-reduce-motion &:hover { &::before { animation: earwiggleleft 1s infinite; } diff --git a/packages/nicolium/src/styles/new/chats.scss b/packages/nicolium/src/styles/new/chats.scss index c0ede1dc6..6e17602f2 100644 --- a/packages/nicolium/src/styles/new/chats.scss +++ b/packages/nicolium/src/styles/new/chats.scss @@ -42,7 +42,7 @@ } } - &--placeholder { + .no-reduce-motion &--placeholder { animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; } diff --git a/packages/nicolium/src/styles/new/components.scss b/packages/nicolium/src/styles/new/components.scss index 694b1d47b..1fac37617 100644 --- a/packages/nicolium/src/styles/new/components.scss +++ b/packages/nicolium/src/styles/new/components.scss @@ -913,9 +913,7 @@ div[data-viewport-type='window']:has(.⁂-empty-message) { border-radius: 0.375rem; background-color: #fff; - box-shadow: - 0 10px 15px -3px #0001, - 0 4px 6px -4px #0001; + box-shadow: var(--shadow-lg); transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 100ms; @@ -1031,9 +1029,7 @@ div[data-viewport-type='window']:has(.⁂-empty-message) { &--rounded { color: rgb(var(--color-gray-900)); background-color: #fff; - box-shadow: - 0 10px 15px -3px #0001, - 0 4px 6px -4px #0001; + box-shadow: var(--shadow-lg); .dark.black & { background-color: #000; @@ -1466,3 +1462,132 @@ div[data-viewport-type='window']:has(.⁂-empty-message) { transition: left 100ms ease-in-out; } } + +/** + * iOS style loading spinner. + * Adapted from: https://loading.io/css/ + * With some help scaling it: https://signalvnoise.com/posts/2577-loading-spinner-animation-using-css-and-webkit + */ + +.⁂-spinner { + position: relative; + display: inline-block; + width: 5rem; + height: 5rem; + + &__container { + display: flex; + flex-direction: column; + gap: 0.5rem; + align-items: center; + justify-content: center; + } + + & > div { + position: absolute; + transform-origin: 50% 50%; + + width: 100%; + height: 100%; + + animation: spinner 1.2s linear infinite; + + &::after { + content: ' '; + + position: absolute; + top: 3.75%; + left: 46.25%; + + display: block; + + width: 7.5%; + height: 22.5%; + border-radius: 9999px; + + background: rgb(var(--color-gray-700)); + + .dark & { + background: rgb(var(--color-gray-400)); + } + + .dark button & { + background: white; + } + } + + &:nth-child(1) { + transform: rotate(0deg); + animation-delay: -1.1s; + } + + &:nth-child(2) { + transform: rotate(30deg); + animation-delay: -1s; + } + + &:nth-child(3) { + transform: rotate(60deg); + animation-delay: -0.9s; + } + + &:nth-child(4) { + transform: rotate(90deg); + animation-delay: -0.8s; + } + + &:nth-child(5) { + transform: rotate(120deg); + animation-delay: -0.7s; + } + + &:nth-child(6) { + transform: rotate(150deg); + animation-delay: -0.6s; + } + + &:nth-child(7) { + transform: rotate(180deg); + animation-delay: -0.5s; + } + + &:nth-child(8) { + transform: rotate(210deg); + animation-delay: -0.4s; + } + + &:nth-child(9) { + transform: rotate(240deg); + animation-delay: -0.3s; + } + + &:nth-child(10) { + transform: rotate(270deg); + animation-delay: -0.2s; + } + + &:nth-child(11) { + transform: rotate(300deg); + animation-delay: -0.1s; + } + + &:nth-child(12) { + transform: rotate(330deg); + animation-delay: 0s; + } + } + + p { + @include mixins.text($theme: muted, $tracking: wide); + } +} + +@keyframes spinner { + 0% { + opacity: 1; + } + + 100% { + opacity: 0; + } +} diff --git a/packages/nicolium/src/styles/new/directory.scss b/packages/nicolium/src/styles/new/directory.scss index b51725f2b..fbba1f3c9 100644 --- a/packages/nicolium/src/styles/new/directory.scss +++ b/packages/nicolium/src/styles/new/directory.scss @@ -27,7 +27,7 @@ grid-template-columns: repeat(1, minmax(0, 1fr)); gap: 0.625rem; - &--loading { + .no-reduce-motion &--loading { animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; } diff --git a/packages/nicolium/src/styles/new/layout.scss b/packages/nicolium/src/styles/new/layout.scss index ad665175c..ed768703c 100644 --- a/packages/nicolium/src/styles/new/layout.scss +++ b/packages/nicolium/src/styles/new/layout.scss @@ -90,9 +90,7 @@ body { background-color: #fffe; backdrop-filter: blur(12px) saturate(2); - box-shadow: - 0 10px 15px -3px #0001, - 0 4px 6px -4px #0001; + box-shadow: var(--shadow-lg); transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); @@ -1113,9 +1111,7 @@ body { border-radius: 0.5rem; background-color: #fff; - box-shadow: - 0 10px 15px -3px #0001, - 0 4px 6px -4px #0001; + box-shadow: var(--shadow-lg); .dark.black & { background-color: #000; diff --git a/packages/nicolium/src/styles/new/mixins.scss b/packages/nicolium/src/styles/new/mixins.scss index 6d096fb6f..0ce18d1bd 100644 --- a/packages/nicolium/src/styles/new/mixins.scss +++ b/packages/nicolium/src/styles/new/mixins.scss @@ -133,9 +133,7 @@ @if $variant == rounded { color: rgb(var(--color-gray-900)); background-color: #fff; - box-shadow: - 0 10px 15px -3px #0001, - 0 4px 6px -4px #0001; + box-shadow: var(--shadow-lg); &:is(.dark.black *) { background-color: #000; diff --git a/packages/nicolium/src/styles/new/modals.scss b/packages/nicolium/src/styles/new/modals.scss index 4633ab7be..f3868e436 100644 --- a/packages/nicolium/src/styles/new/modals.scss +++ b/packages/nicolium/src/styles/new/modals.scss @@ -176,6 +176,10 @@ outline: none; } } + + .⁂-spinner__container { + position: absolute; + } } .⁂-dropdown-menu-modal { @@ -203,9 +207,7 @@ border-top-right-radius: 0.75rem; background-color: #fff; - box-shadow: - 0 10px 15px -3px #0001, - 0 4px 6px -4px #0001; + box-shadow: var(--shadow-lg); transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 200ms; diff --git a/packages/nicolium/src/styles/new/variables.scss b/packages/nicolium/src/styles/new/variables.scss index 7a5fc5da0..c55d18698 100644 --- a/packages/nicolium/src/styles/new/variables.scss +++ b/packages/nicolium/src/styles/new/variables.scss @@ -4,6 +4,8 @@ $breakpoint-lg: 976px; $breakpoint-xl: 1280px; :root { + --shadow-lg: 0 10px 15px -3px #0001, 0 4px 6px -4px #0001; + /* --hex-slate-50: #f8fafc; --hex-slate-100: #f1f5f9; --hex-slate-200: #e2e8f0; diff --git a/packages/nicolium/src/styles/ui.scss b/packages/nicolium/src/styles/ui.scss index 24c992e83..95237ca30 100644 --- a/packages/nicolium/src/styles/ui.scss +++ b/packages/nicolium/src/styles/ui.scss @@ -38,6 +38,10 @@ height: 100%; } +body:not(.no-reduce-motion) .react-swipeable-view-container { + transition: none !important; +} + ::-webkit-scrollbar-thumb { border-radius: 0; } diff --git a/packages/nicolium/src/utils/code.ts b/packages/nicolium/src/utils/code.ts index dc827b595..3909d4ca0 100644 --- a/packages/nicolium/src/utils/code.ts +++ b/packages/nicolium/src/utils/code.ts @@ -3,7 +3,7 @@ import { execSync } from 'node:child_process'; import pkg from '../../package.json'; const code = compileTime(() => { - const { CI_COMMIT_TAG, CI_COMMIT_REF_NAME, CI_COMMIT_SHA } = process.env; + const { GITHUB_REF_NAME, GITHUB_SHA, GITHUB_REF_TYPE } = process.env; const shortRepoName = (url: string): string => new URL(url).pathname.slice(1); const trimHash = (hash: string): string => hash.slice(0, 7); @@ -17,13 +17,16 @@ const code = compileTime(() => { }; const version = (pkg: { version: string }): string => { - // Try to discern from GitLab CI first - if (CI_COMMIT_TAG === `v${pkg.version}` || CI_COMMIT_REF_NAME === 'stable') { + const ciTag = GITHUB_REF_TYPE === 'tag' ? GITHUB_REF_NAME : undefined; + const branch = GITHUB_REF_TYPE === 'branch' ? GITHUB_REF_NAME : undefined; + + // Try to discern from GitHub CI first + if (ciTag === `v${pkg.version}` || branch === 'stable') { return pkg.version; } - if (typeof CI_COMMIT_SHA === 'string') { - return `${pkg.version}-${trimHash(CI_COMMIT_SHA)}`; + if (typeof GITHUB_SHA === 'string') { + return `${pkg.version}-${trimHash(GITHUB_SHA)}`; } // Fall back to git directly @@ -43,7 +46,7 @@ const code = compileTime(() => { repository: shortRepoName(pkg.repository.url), version: version(pkg), homepage: pkg.homepage, - ref: CI_COMMIT_TAG ?? CI_COMMIT_SHA ?? tryGit('git rev-parse HEAD'), + ref: (GITHUB_REF_TYPE === 'tag' ? GITHUB_REF_NAME : GITHUB_SHA) ?? tryGit('git rev-parse HEAD'), }; return code; diff --git a/packages/nicolium/vite.config.ts b/packages/nicolium/vite.config.ts index 634920b79..f86479acc 100644 --- a/packages/nicolium/vite.config.ts +++ b/packages/nicolium/vite.config.ts @@ -128,7 +128,7 @@ const config = defineConfig(() => ({ viteStaticCopy({ targets: [ { - src: './node_modules/@twemoji/svg/*', + src: './node_modules/@twemoji/svg/*.svg', dest: 'packs/emoji/', }, { @@ -157,7 +157,6 @@ const config = defineConfig(() => ({ }, ], }), - bundleStats(), { name: 'mock-api', configureServer(server) { @@ -171,6 +170,7 @@ const config = defineConfig(() => ({ }); }, }, + ...(process.env.ANALYZE === 'true' ? [bundleStats()] : []), ], resolve: { alias: [ diff --git a/packages/pl-api/README.md b/packages/pl-api/README.md index 782ed8d39..e661b2afe 100644 --- a/packages/pl-api/README.md +++ b/packages/pl-api/README.md @@ -38,8 +38,8 @@ For unsupported projects, it falls back to a basic feature set, though every met ## Projects using `pl-api` -- [Nicolium](https://codeberg.org/nicolium/nicolium/src/branch/develop/packages/nicolium) is a web client for Mastodon-compatible servers forked from Soapbox. It uses `pl-api` for API interactions. -- [`pl-hooks`](https://codeberg.org/nicolium/nicolium/src/branch/develop/packages/pl-hooks) is a work-in-progress library utilizing `pl-api`. +- [Nicolium](https://codeberg.org/nicolium/nicolium/src/packages/nicolium) is a web client for Mastodon-compatible servers forked from Soapbox. It uses `pl-api` for API interactions. +- [`pl-hooks`](https://codeberg.org/nicolium/nicolium/src/packages/pl-hooks) is a work-in-progress library utilizing `pl-api`. If you are using `pl-api` in your project, please open a pull request with a link to the project. diff --git a/packages/pl-api/lib/entities/quote.ts b/packages/pl-api/lib/entities/quote.ts index e194d5aa3..bdbb22348 100644 --- a/packages/pl-api/lib/entities/quote.ts +++ b/packages/pl-api/lib/entities/quote.ts @@ -1,6 +1,6 @@ import * as v from 'valibot'; -import { statusSchema } from './status'; +import { type Status, statusSchema } from './status'; const quoteStateSchema = v.picklist([ 'pending', @@ -26,7 +26,10 @@ const quoteSchema = v.object({ /** * @category Entity types */ -type Quote = v.InferOutput; +interface Quote { + state: v.InferOutput; + quoted_status: Status | null; +} /** * @category Schemas diff --git a/packages/pl-api/llms.txt b/packages/pl-api/llms.txt index 1bfa35f1d..8bf871791 100644 --- a/packages/pl-api/llms.txt +++ b/packages/pl-api/llms.txt @@ -10,7 +10,7 @@ pl-api is a TypeScript/JavaScript library that provides a type-safe client for i - Version: 1.0.0-rc.94 - License: AGPL-3.0-or-later -- Homepage: https://codeberg.org/nicolium/nicolium/src/branch/develop/packages/pl-api +- Homepage: https://codeberg.org/nicolium/nicolium/src/packages/pl-api - Documentation: https://pl.mkljczk.pl/pl-api-docs - NPM package: https://www.npmjs.com/package/pl-api @@ -98,7 +98,7 @@ page1.items.forEach(account => console.log(account.username)); ## Projects using pl-api - Nicolium - Web client for Mastodon-compatible servers (https://codeberg.org/nicolium/nicolium) -- **pl-hooks** - React hooks library for Mastodon APIs (https://codeberg.org/nicolium/nicolium/src/branch/develop/packages/pl-hooks) +- **pl-hooks** - React hooks library for Mastodon APIs (https://codeberg.org/nicolium/nicolium/src/packages/pl-hooks) ## Development diff --git a/packages/pl-api/package.json b/packages/pl-api/package.json index d4a99d1d3..e28178c0f 100644 --- a/packages/pl-api/package.json +++ b/packages/pl-api/package.json @@ -1,7 +1,7 @@ { "name": "pl-api", "version": "1.0.0-rc.99", - "homepage": "https://codeberg.org/nicolium/nicolium/src/branch/develop/packages/pl-api", + "homepage": "https://codeberg.org/nicolium/nicolium/src/packages/pl-api", "bugs": { "url": "https://codeberg.org/nicolium/nicolium/issues" }, @@ -45,23 +45,23 @@ "object-to-formdata": "^4.5.1", "query-string": "^9.3.1", "semver": "^7.7.4", - "valibot": "^1.2.0" + "valibot": "^1.3.1" }, "devDependencies": { "@types/http-link-header": "^1.0.7", "@types/node": "^25.3.5", "@types/semver": "^7.7.1", "@vitest/coverage-v8": "4.1.0", - "oxfmt": "^0.40.0", + "oxfmt": "^0.41.0", "oxlint": "^1.55.0", "typedoc": "^0.28.17", "typedoc-material-theme": "^1.4.1", "typedoc-plugin-valibot": "^1.0.2", "typescript": "^5.9.3", - "vite": "^8.0.0", + "vite": "^8.0.1", "vite-plugin-dts": "^4.5.4", "vitest": "^4.1.0", - "ws": "^8.19.0" + "ws": "^8.20.0" }, "lint-staged": { "*.{js,cjs,mjs,ts}": [ diff --git a/packages/pl-hooks/package.json b/packages/pl-hooks/package.json index 6adbbe1e2..0c8bebc80 100644 --- a/packages/pl-hooks/package.json +++ b/packages/pl-hooks/package.json @@ -1,7 +1,7 @@ { "name": "pl-hooks", "version": "0.0.15", - "homepage": "https://codeberg.org/nicolium/nicolium/src/branch/develop/packages/pl-hooks", + "homepage": "https://codeberg.org/nicolium/nicolium/src/packages/pl-hooks", "bugs": { "url": "https://codeberg.org/nicolium/nicolium/issues" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 653055602..15bf5f1f3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -23,8 +23,8 @@ importers: specifier: ^9.0.0 version: 9.1.7 lint-staged: - specifier: ^16.2.7 - version: 16.2.7 + specifier: ^16.4.0 + version: 16.4.0 packages/nicolium: dependencies: @@ -47,32 +47,32 @@ importers: specifier: ^5.2.7 version: 5.2.7 '@lexical/code': - specifier: ^0.41.0 - version: 0.41.0 + specifier: ^0.42.0 + version: 0.42.0 '@lexical/hashtag': - specifier: ^0.41.0 - version: 0.41.0 + specifier: ^0.42.0 + version: 0.42.0 '@lexical/link': - specifier: ^0.41.0 - version: 0.41.0 + specifier: ^0.42.0 + version: 0.42.0 '@lexical/list': - specifier: ^0.41.0 - version: 0.41.0 + specifier: ^0.42.0 + version: 0.42.0 '@lexical/markdown': - specifier: ^0.41.0 - version: 0.41.0 + specifier: ^0.42.0 + version: 0.42.0 '@lexical/react': - specifier: ^0.41.0 - version: 0.41.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yjs@13.6.27) + specifier: ^0.42.0 + version: 0.42.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yjs@13.6.27) '@lexical/rich-text': - specifier: ^0.41.0 - version: 0.41.0 + specifier: ^0.42.0 + version: 0.42.0 '@lexical/selection': - specifier: ^0.41.0 - version: 0.41.0 + specifier: ^0.42.0 + version: 0.42.0 '@lexical/utils': - specifier: ^0.41.0 - version: 0.41.0 + specifier: ^0.42.0 + version: 0.42.0 '@mkljczk/url-purify': specifier: ^0.0.5 version: 0.0.5 @@ -91,18 +91,15 @@ importers: '@react-spring/web': specifier: ^10.0.3 version: 10.0.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@reduxjs/toolkit': - specifier: ^2.11.2 - version: 2.11.2(react-redux@9.2.0(@types/react@19.2.14)(react@19.2.4)(redux@5.0.1))(react@19.2.4) '@sentry/browser': - specifier: ^10.43.0 - version: 10.43.0 + specifier: ^10.45.0 + version: 10.45.0 '@sentry/core': - specifier: ^10.43.0 - version: 10.43.0 + specifier: ^10.45.0 + version: 10.45.0 '@sentry/react': - specifier: ^10.43.0 - version: 10.43.0(react@19.2.4) + specifier: ^10.45.0 + version: 10.45.0(react@19.2.4) '@tailwindcss/aspect-ratio': specifier: ^0.4.2 version: 0.4.2(tailwindcss@3.4.19(yaml@2.8.2)) @@ -113,14 +110,14 @@ importers: specifier: ^0.5.19 version: 0.5.19(tailwindcss@3.4.19(yaml@2.8.2)) '@tanstack/react-pacer': - specifier: ^0.20.0 - version: 0.20.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + specifier: ^0.21.0 + version: 0.21.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@tanstack/react-query': - specifier: ^5.90.21 - version: 5.90.21(react@19.2.4) + specifier: ^5.94.5 + version: 5.94.5(react@19.2.4) '@tanstack/react-router': - specifier: ^1.167.4 - version: 1.167.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + specifier: ^1.168.2 + version: 1.168.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@transfem-org/sfm-js': specifier: ^0.26.1 version: 0.26.1 @@ -197,8 +194,8 @@ importers: specifier: ^1.9.4 version: 1.9.4 lexical: - specifier: ^0.41.0 - version: 0.41.0 + specifier: ^0.42.0 + version: 0.42.0 line-awesome: specifier: ^1.3.0 version: 1.3.0 @@ -290,8 +287,8 @@ importers: specifier: ^1.3.1 version: 1.3.1(@types/react@19.2.14)(mutative@1.3.0)(react@19.2.4) valibot: - specifier: ^1.2.0 - version: 1.2.0(typescript@5.9.3) + specifier: ^1.3.1 + version: 1.3.1(typescript@5.9.3) zustand: specifier: ^5.0.12 version: 5.0.12(@types/react@19.2.14)(immer@11.1.4)(react@19.2.4)(use-sync-external-store@1.6.0(react@19.2.4)) @@ -307,7 +304,7 @@ importers: version: 0.0.2 '@stylistic/stylelint-plugin': specifier: ^5.0.1 - version: 5.0.1(stylelint@17.4.0(typescript@5.9.3)) + version: 5.0.1(stylelint@17.5.0(typescript@5.9.3)) '@testing-library/jest-dom': specifier: ^6.9.1 version: 6.9.1 @@ -345,14 +342,14 @@ importers: specifier: ^0.13.6 version: 0.13.6 '@typescript/native-preview': - specifier: 7.0.0-dev.20260317.1 - version: 7.0.0-dev.20260317.1 + specifier: 7.0.0-dev.20260322.1 + version: 7.0.0-dev.20260322.1 '@vitejs/plugin-react': specifier: ^6.0.0 - version: 6.0.1(vite@8.0.0(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)) + version: 6.0.1(vite@8.0.1(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)) '@vitest/coverage-v8': specifier: 4.1.0 - version: 4.1.0(vitest@4.1.0(@types/node@25.5.0)(jsdom@29.0.0)(vite@8.0.0(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2))) + version: 4.1.0(vitest@4.1.0(@types/node@25.5.0)(jsdom@29.0.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2))) eslint-plugin-formatjs: specifier: ^6.3.0 version: 6.3.0(eslint@8.57.1) @@ -360,32 +357,32 @@ importers: specifier: ^17.4.0 version: 17.4.0 jsdom: - specifier: ^29.0.0 - version: 29.0.0 + specifier: ^29.0.1 + version: 29.0.1 oxfmt: specifier: ^0.41.0 version: 0.41.0 oxlint: specifier: ^1.56.0 - version: 1.56.0(oxlint-tsgolint@0.17.0) + version: 1.56.0(oxlint-tsgolint@0.17.1) oxlint-tsgolint: - specifier: ^0.17.0 - version: 0.17.0 + specifier: ^0.17.1 + version: 0.17.1 rollup-plugin-bundle-stats: specifier: ^4.22.0 - version: 4.22.0(core-js@3.48.0)(rolldown@1.0.0-rc.9)(rollup@2.80.0)(vite@8.0.0(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)) + version: 4.22.0(core-js@3.48.0)(rolldown@1.0.0-rc.10)(rollup@2.80.0)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)) stylelint: - specifier: ^17.4.0 - version: 17.4.0(typescript@5.9.3) + specifier: ^17.5.0 + version: 17.5.0(typescript@5.9.3) stylelint-config-clean-order: specifier: ^8.0.1 - version: 8.0.1(stylelint-order@8.1.1(stylelint@17.4.0(typescript@5.9.3)))(stylelint@17.4.0(typescript@5.9.3)) + version: 8.0.1(stylelint-order@8.1.1(stylelint@17.5.0(typescript@5.9.3)))(stylelint@17.5.0(typescript@5.9.3)) stylelint-config-standard-scss: specifier: ^17.0.0 - version: 17.0.0(postcss@8.5.8)(stylelint@17.4.0(typescript@5.9.3)) + version: 17.0.0(postcss@8.5.8)(stylelint@17.5.0(typescript@5.9.3)) stylelint-order: specifier: ^8.0.0 - version: 8.1.1(stylelint@17.4.0(typescript@5.9.3)) + version: 8.1.1(stylelint@17.5.0(typescript@5.9.3)) tailwindcss: specifier: ^3.4.19 version: 3.4.19(yaml@2.8.2) @@ -393,32 +390,32 @@ importers: specifier: ^2.8.1 version: 2.8.1 type-fest: - specifier: ^5.4.4 - version: 5.4.4 + specifier: ^5.5.0 + version: 5.5.0 typescript: specifier: 5.9.3 version: 5.9.3 vite: - specifier: ^8.0.0 - version: 8.0.0(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2) + specifier: ^8.0.1 + version: 8.0.1(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2) vite-plugin-compile-time: specifier: ^0.4.6 - version: 0.4.6(vite@8.0.0(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)) + version: 0.4.6(vite@8.0.1(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)) vite-plugin-html: specifier: ^3.2.2 - version: 3.2.2(vite@8.0.0(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)) + version: 3.2.2(vite@8.0.1(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)) vite-plugin-pwa: specifier: ^1.2.0 - version: 1.2.0(vite@8.0.0(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0) + version: 1.2.0(vite@8.0.1(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0) vite-plugin-require: specifier: ^1.2.14 - version: 1.2.14(esbuild@0.24.2)(vite@8.0.0(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)) + version: 1.2.14(esbuild@0.24.2)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)) vite-plugin-static-copy: - specifier: ^3.3.0 - version: 3.3.0(vite@8.0.0(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)) + specifier: ^3.4.0 + version: 3.4.0(vite@8.0.1(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)) vitest: specifier: ^4.1.0 - version: 4.1.0(@types/node@25.5.0)(jsdom@29.0.0)(vite@8.0.0(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)) + version: 4.1.0(@types/node@25.5.0)(jsdom@29.0.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)) packages/pl-api: dependencies: @@ -430,7 +427,7 @@ importers: version: 1.1.3 isows: specifier: ^1.0.7 - version: 1.0.7(ws@8.19.0) + version: 1.0.7(ws@8.20.0) object-to-formdata: specifier: ^4.5.1 version: 4.5.1 @@ -441,8 +438,8 @@ importers: specifier: ^7.7.4 version: 7.7.4 valibot: - specifier: ^1.2.0 - version: 1.2.0(typescript@5.9.3) + specifier: ^1.3.1 + version: 1.3.1(typescript@5.9.3) devDependencies: '@types/http-link-header': specifier: ^1.0.7 @@ -455,13 +452,13 @@ importers: version: 7.7.1 '@vitest/coverage-v8': specifier: 4.1.0 - version: 4.1.0(vitest@4.1.0(@types/node@25.5.0)(jsdom@29.0.0)(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.3)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2))) + version: 4.1.0(vitest@4.1.0(@types/node@25.5.0)(jsdom@29.0.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.3)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2))) oxfmt: - specifier: ^0.40.0 - version: 0.40.0 + specifier: ^0.41.0 + version: 0.41.0 oxlint: specifier: ^1.55.0 - version: 1.55.0(oxlint-tsgolint@0.17.0) + version: 1.55.0(oxlint-tsgolint@0.17.1) typedoc: specifier: ^0.28.17 version: 0.28.17(typescript@5.9.3) @@ -475,17 +472,17 @@ importers: specifier: ^5.9.3 version: 5.9.3 vite: - specifier: ^8.0.0 - version: 8.0.0(@types/node@25.5.0)(esbuild@0.27.3)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2) + specifier: ^8.0.1 + version: 8.0.1(@types/node@25.5.0)(esbuild@0.27.3)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2) vite-plugin-dts: specifier: ^4.5.4 - version: 4.5.4(@types/node@25.5.0)(rollup@4.59.0)(typescript@5.9.3)(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.3)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)) + version: 4.5.4(@types/node@25.5.0)(rollup@4.59.0)(typescript@5.9.3)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.3)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)) vitest: specifier: ^4.1.0 - version: 4.1.0(@types/node@25.5.0)(jsdom@29.0.0)(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.3)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)) + version: 4.1.0(@types/node@25.5.0)(jsdom@29.0.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.3)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)) ws: - specifier: ^8.19.0 - version: 8.19.0 + specifier: ^8.20.0 + version: 8.20.0 packages/pl-hooks: dependencies: @@ -1179,9 +1176,6 @@ packages: peerDependencies: '@csstools/css-tokenizer': ^4.0.0 - '@csstools/css-syntax-patches-for-csstree@1.0.28': - resolution: {integrity: sha512-1NRf1CUBjnr3K7hu8BLxjQrKCxEe8FP/xmPTenAxCRZWVLbmGotkFvG9mfNpjA6k7Bw1bw4BilZq9cu19RA5pg==} - '@csstools/css-syntax-patches-for-csstree@1.1.1': resolution: {integrity: sha512-BvqN0AMWNAnLk9G8jnUT77D+mUbY/H2b3uDTvg2isJkHaOufUE2R3AOwxWo7VBQKT1lOdwdvorddo2B/lk64+w==} peerDependencies: @@ -2004,77 +1998,83 @@ packages: '@keyv/serialize@1.1.1': resolution: {integrity: sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==} - '@lexical/clipboard@0.41.0': - resolution: {integrity: sha512-Ex5lPkb4NBBX1DCPzOAIeHBJFH1bJcmATjREaqpnTfxCbuOeQkt44wchezUA0oDl+iAxNZ3+pLLWiUju9icoSA==} + '@lexical/clipboard@0.42.0': + resolution: {integrity: sha512-D3K2ID0zew/+CKpwxnUTTh/N46yU4IK8bFWV9Htz+g1vFhgUF9UnDOQCmqpJbdP7z+9U1F8rk3fzf9OmP2Fm2w==} - '@lexical/code@0.41.0': - resolution: {integrity: sha512-0hoNi1KC9/N3SBOGcOcFqnT0OpwmcRRAhfxTKMGqfCtCvAMzULVwZ8RWc9/NV9bKYESgBTW5D9xkDANP2mspHg==} + '@lexical/code-core@0.42.0': + resolution: {integrity: sha512-vrZTUPWDJkHjAAvuV2+Qte4vYE80s7hIO7wxipiJmWojGx6lcmQjO+UqJ8AIrqI4Wjy8kXrK74kisApWmwxuCw==} - '@lexical/devtools-core@0.41.0': - resolution: {integrity: sha512-FzJtluBhBc8bKS11TUZe72KoZN/hnzIyiiM0SPJAsPwGpoXuM01jqpXQGybWf/1bWB+bmmhOae7O4Nywi/Csuw==} + '@lexical/code-prism@0.42.0': + resolution: {integrity: sha512-KgngkUtgcgC8ocBnfGyN71CC3EnP5PMFAmH1KcGp/+jSgl11nRpCjwYYIoUHm6AB7jKJ8dLbd/UUmShARjUnGA==} + + '@lexical/code@0.42.0': + resolution: {integrity: sha512-KMu1nWae9pHvA9nl6dlJacbt3QBBNemgalmLJcZ5QhdGEQA1cVIU4gBPJ5TJqgY9XF7WZgj5JvDIPxjrZmf+XQ==} + + '@lexical/devtools-core@0.42.0': + resolution: {integrity: sha512-8nP8eE9i8JImgSrvInkWFfMCmXVKp3w3VaOvbJysdlK/Zal6xd8EWJEi6elj0mUW5T/oycfipPs2Sfl7Z+n14A==} peerDependencies: react: '>=17.x' react-dom: '>=17.x' - '@lexical/dragon@0.41.0': - resolution: {integrity: sha512-gBEqkk8Q6ZPruvDaRcOdF1EK9suCVBODzOCcR+EnoJTaTjfDkCM7pkPAm4w90Wa1wCZEtFHvCfas+jU9MDSumg==} + '@lexical/dragon@0.42.0': + resolution: {integrity: sha512-/TQzP+7PLJMqq9+MlgQWiJsxS9GOOa8Gp0svCD8vNIOciYmXfd28TR1Go+ZnBWwr7k/2W++3XUYVQU2KUcQsDQ==} - '@lexical/extension@0.41.0': - resolution: {integrity: sha512-sF4SPiP72yXvIGchmmIZ7Yg2XZTxNLOpFEIIzdqG7X/1fa1Ham9P/T7VbrblWpF6Ei5LJtK9JgNVB0hb4l3o1g==} + '@lexical/extension@0.42.0': + resolution: {integrity: sha512-rkZq/h8d1BenKRqU4t/zQUVfY/RinMX1Tz7t+Ee3ss0sk+kzP4W+URXNAxpn7r39Vn6wrFBqmCziah3dLAIqPw==} - '@lexical/hashtag@0.41.0': - resolution: {integrity: sha512-tFWM74RW4KU0E/sj2aowfWl26vmLUTp331CgVESnhQKcZBfT40KJYd57HEqBDTfQKn4MUhylQCCA0hbpw6EeFQ==} + '@lexical/hashtag@0.42.0': + resolution: {integrity: sha512-WOg5nFOfhabNBXzEIutdWDj+TUHtJEezj6w8jyYDGqZ31gu0cgrXSeV8UIynz/1oj+rpzEeEB7P6ODnwgjt7qA==} - '@lexical/history@0.41.0': - resolution: {integrity: sha512-kGoVWsiOn62+RMjRolRa+NXZl8jFwxav6GNDiHH8yzivtoaH8n1SwUfLJELXCzeqzs81HySqD4q30VLJVTGoDg==} + '@lexical/history@0.42.0': + resolution: {integrity: sha512-YfCZ1ICUt6BCg2ncJWFMuS4yftnB7FEHFRf3qqTSTf6oGZ4IZfzabMNEy47xybUuf7FXBbdaCKJrc/zOM+wGxw==} - '@lexical/html@0.41.0': - resolution: {integrity: sha512-3RyZy+H/IDKz2D66rNN/NqYx87xVFrngfEbyu1OWtbY963RUFnopiVHCQvsge/8kT04QSZ7U/DzjVFqeNS6clg==} + '@lexical/html@0.42.0': + resolution: {integrity: sha512-KgBUDLXehufCsXW3w0XsuoI2xecIhouOishnaNOH4zIA7dAtnNAfdPN/kWrWs0s83gz44OrnqccP+Bprw3UDEQ==} - '@lexical/link@0.41.0': - resolution: {integrity: sha512-Rjtx5cGWAkKcnacncbVsZ1TqRnUB2Wm4eEVKpaAEG41+kHgqghzM2P+UGT15yROroxJu8KvAC9ISiYFiU4XE1w==} + '@lexical/link@0.42.0': + resolution: {integrity: sha512-cdeM/+f+kn7aGwW/3FIi6USjl1gBNdEEwg0/ZS+KlYcsy8gxx2e4cyVjsomBu/WU17Qxa0NC0paSr7qEJ/1Fig==} - '@lexical/list@0.41.0': - resolution: {integrity: sha512-RXvB+xcbzVoQLGRDOBRCacztG7V+bI95tdoTwl8pz5xvgPtAaRnkZWMDP+yMNzMJZsqEChdtpxbf0NgtMkun6g==} + '@lexical/list@0.42.0': + resolution: {integrity: sha512-TIezILnmIVuvfqEEbcMnsT4xQRlswI6ysHISqsvKL6l5EBhs1gqmNYjHa/Yrfzaq5y52TM1PAtxbFts+G7N6kg==} - '@lexical/mark@0.41.0': - resolution: {integrity: sha512-UO5WVs9uJAYIKHSlYh4Z1gHrBBchTOi21UCYBIZ7eAs4suK84hPzD+3/LAX5CB7ZltL6ke5Sly3FOwNXv/wfpA==} + '@lexical/mark@0.42.0': + resolution: {integrity: sha512-H1aGjbMEcL4B8GT7bm/ePHm7j3Wema+wIRNPmxMtXGMz5gpVN3gZlvg2UcUHHJb00SrBA95OUVT5I2nu/KP06w==} - '@lexical/markdown@0.41.0': - resolution: {integrity: sha512-bzI73JMXpjGFhqUWNV6KqfjWcgAWzwFT+J3RHtbCF5rysC8HLldBYojOgAAtPfXqfxyv2mDzsY7SoJ75s9uHZA==} + '@lexical/markdown@0.42.0': + resolution: {integrity: sha512-+mOxgBiumlgVX8Acna+9HjJfSOw1jywufGcAQq3/8S11wZ4gE0u13AaR8LMmU8ydVeOQg09y8PNzGNQ/avZJbg==} - '@lexical/offset@0.41.0': - resolution: {integrity: sha512-2RHBXZqC8gm3X9C0AyRb0M8w7zJu5dKiasrif+jSKzsxPjAUeF1m95OtIOsWs1XLNUgASOSUqGovDZxKJslZfA==} + '@lexical/offset@0.42.0': + resolution: {integrity: sha512-V+4af1KmTOnBZrR+kU3e6eD33W/g3QqMPPp3cpFwyXk/dKRc4K8HfyDsSDrjop1mPd9pl3lKSiEmX6uQG8K9XQ==} - '@lexical/overflow@0.41.0': - resolution: {integrity: sha512-Iy6ZiJip8X14EBYt1zKPOrXyQ4eG9JLBEoPoSVBTiSbVd+lYicdUvaOThT0k0/qeVTN9nqTaEltBjm56IrVKCQ==} + '@lexical/overflow@0.42.0': + resolution: {integrity: sha512-wlrHaM27rODJP5m+CTgfZGLg3qWlQ0ptGodcqoGdq6HSbV8nGFY6TvcLMaMtYQ1lm4v9G7Xe9LwjooR6xS3Gug==} - '@lexical/plain-text@0.41.0': - resolution: {integrity: sha512-HIsGgmFUYRUNNyvckun33UQfU7LRzDlxymHUq67+Bxd5bXqdZOrStEKJXuDX+LuLh/GXZbaWNbDLqwLBObfbQg==} + '@lexical/plain-text@0.42.0': + resolution: {integrity: sha512-YWvBwIxLltrIaZDcv0rK4s44P6Yt17yhOb0E+g3+tjF8GGPrrocox+Pglu0m2RHR+G7zULN3isolmWIm/HhWiw==} - '@lexical/react@0.41.0': - resolution: {integrity: sha512-7+GUdZUm6sofWm+zdsWAs6cFBwKNsvsHezZTrf6k8jrZxL461ZQmbz/16b4DvjCGL9r5P1fR7md9/LCmk8TiCg==} + '@lexical/react@0.42.0': + resolution: {integrity: sha512-ujWJXhvlFVVTpwDcnSgEYWRuqUbreZaMB+4bjIDT5r7hkAplUHQndlkeuFHKFiJBasSAreleV7zhXrLL5xa9eA==} peerDependencies: react: '>=17.x' react-dom: '>=17.x' - '@lexical/rich-text@0.41.0': - resolution: {integrity: sha512-yUcr7ZaaVTZNi8bow4CK1M8jy2qyyls1Vr+5dVjwBclVShOL/F/nFyzBOSb6RtXXRbd3Ahuk9fEleppX/RNIdw==} + '@lexical/rich-text@0.42.0': + resolution: {integrity: sha512-v4YgiM3oK3FZcRrfB+LetvLbQ5aee9MRO9tHf0EFweXg19XnSjHV0cfPAW7TyPxRELzB69+K0Q3AybRlTMjG4Q==} - '@lexical/selection@0.41.0': - resolution: {integrity: sha512-1s7/kNyRzcv5uaTwsUL28NpiisqTf5xZ1zNukLsCN1xY+TWbv9RE9OxIv+748wMm4pxNczQe/UbIBODkbeknLw==} + '@lexical/selection@0.42.0': + resolution: {integrity: sha512-iWTjLA5BSEuUnvWe9Xwu9FSdZFl3Yi0NqalabXKI+7KgCIlIVXE74y4NvWPUSLkSCB/Z1RPKiHmZqZ1vyu/yGQ==} - '@lexical/table@0.41.0': - resolution: {integrity: sha512-d3SPThBAr+oZ8O74TXU0iXM3rLbrAVC7/HcOnSAq7/AhWQW8yMutT51JQGN+0fMLP9kqoWSAojNtkdvzXfU/+A==} + '@lexical/table@0.42.0': + resolution: {integrity: sha512-GKiZyjQsHDXRckq5VBrOowyvds51WoVRECfDgcl8pqLMnKyEdCa58E7fkSJrr5LS80Scod+Cjn6SBRzOcdsrKg==} - '@lexical/text@0.41.0': - resolution: {integrity: sha512-gGA+Anc7ck110EXo4KVKtq6Ui3M7Vz3OpGJ4QE6zJHWW8nV5h273koUGSutAMeoZgRVb6t01Izh3ORoFt/j1CA==} + '@lexical/text@0.42.0': + resolution: {integrity: sha512-hT3EYVtBmONXyXe4TFVgtFcG1tf6JhLEuAf95+cOjgFGFSgvkZ/64BPbKLNTj2/9n6cU7EGPUNNwVigCSECJ2g==} - '@lexical/utils@0.41.0': - resolution: {integrity: sha512-Wlsokr5NQCq83D+7kxZ9qs5yQ3dU3Qaf2M+uXxLRoPoDaXqW8xTWZq1+ZFoEzsHzx06QoPa4Vu/40BZR91uQPg==} + '@lexical/utils@0.42.0': + resolution: {integrity: sha512-wGNdCW3QWEyVdFiSTLZfFPtiASPyYLcekIiYYZmoRVxVimT/jY+QPfnkO4JYgkO7Z70g/dsg9OhqyQSChQfvkQ==} - '@lexical/yjs@0.41.0': - resolution: {integrity: sha512-PaKTxSbVC4fpqUjQ7vUL9RkNF1PjL8TFl5jRe03PqoPYpE33buf3VXX6+cOUEfv9+uknSqLCPHoBS/4jN3a97w==} + '@lexical/yjs@0.42.0': + resolution: {integrity: sha512-DplzWnYhfFceGPR+UyDFpZdB287wF/vNOHFuDsBF/nGDdTezvr0Gf60opzyBEF3oXym6p3xTmGygxvO97LZ+vw==} peerDependencies: yjs: '>=13.5.22' @@ -2134,6 +2134,9 @@ packages: '@oxc-project/types@0.115.0': resolution: {integrity: sha512-4n91DKnebUS4yjUHl2g3/b2T+IUdCfmoZGhmwsovZCDaJSs+QkVAM+0AqqTxHSsHfeiMuueT75cZaZcT/m0pSw==} + '@oxc-project/types@0.120.0': + resolution: {integrity: sha512-k1YNu55DuvAip/MGE1FTsIuU3FUCn6v/ujG9V7Nq5Df/kX2CWb13hhwD0lmJGMGqE+bE1MXvv9SZVnMzEXlWcg==} + '@oxfmt/binding-android-arm-eabi@0.40.0': resolution: {integrity: sha512-S6zd5r1w/HmqR8t0CTnGjFTBLDq2QKORPwriCHxo4xFNuhmOTABGjPaNvCJJVnrKBLsohOeiDX3YqQfJPF+FXw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2373,8 +2376,8 @@ packages: cpu: [arm64] os: [darwin] - '@oxlint-tsgolint/darwin-arm64@0.17.0': - resolution: {integrity: sha512-z3XwCDuOAKgk7bO4y5tyH8Zogwr51G56R0XGKC3tlAbrAq8DecoxAd3qhRZqWBMG2Gzl5bWU3Ghu7lrxuLPzYw==} + '@oxlint-tsgolint/darwin-arm64@0.17.1': + resolution: {integrity: sha512-JNWNwyvSDcUQSBlQRl10XrCeNcN66TMvDw3gIDQeop5SNa1F7wFhsEx4zitYb7fGHwGh9095tsNttmuCaNXCbw==} cpu: [arm64] os: [darwin] @@ -2383,8 +2386,8 @@ packages: cpu: [x64] os: [darwin] - '@oxlint-tsgolint/darwin-x64@0.17.0': - resolution: {integrity: sha512-TZgVXy0MtI8nt0MYiceuZhHPwHcwlIZ/YwzFTAKrgdHiTvVzFbqHVdXi5wbZfT/o1nHGw9fbGWPlb6qKZ4uZ9Q==} + '@oxlint-tsgolint/darwin-x64@0.17.1': + resolution: {integrity: sha512-SluNf6CW88pgGPqQUGC5GoK5qESWo2ct1PRDbza3vbf9SK2npx3igvylGQIgE9qYYOcjgnVdLOJ0+q0gItgUmQ==} cpu: [x64] os: [darwin] @@ -2393,8 +2396,8 @@ packages: cpu: [arm64] os: [linux] - '@oxlint-tsgolint/linux-arm64@0.17.0': - resolution: {integrity: sha512-IDfhFl/Y8bjidCvAP6QAxVyBsl78TmfCHlfjtEv2XtJXgYmIwzv6muO18XMp74SZ2qAyD4y2n2dUedrmghGHeA==} + '@oxlint-tsgolint/linux-arm64@0.17.1': + resolution: {integrity: sha512-BJxQ7/cdo2dNdGIBs2PIR6BaPA7cPfe+r1HE/uY+K7g2ygip+0LHB3GUO9GaNDZuWpsnDyjLYYowEGrVK8dokA==} cpu: [arm64] os: [linux] @@ -2403,8 +2406,8 @@ packages: cpu: [x64] os: [linux] - '@oxlint-tsgolint/linux-x64@0.17.0': - resolution: {integrity: sha512-Bgdgqx/m8EnfjmmlRLEeYy9Yhdt1GdFrMr5mTu/NyLRGkB1C9VLAikdxB7U9QambAGTAmjMbHNFDFk8Vx69Huw==} + '@oxlint-tsgolint/linux-x64@0.17.1': + resolution: {integrity: sha512-s6UjmuaJbZ4zz/wJKdEw/s5mc0t41rgwxQJCSHPuzMumMK6ylrB7nydhDf8ObTtzhTIZdAS/2S/uayJmDcGbxw==} cpu: [x64] os: [linux] @@ -2413,8 +2416,8 @@ packages: cpu: [arm64] os: [win32] - '@oxlint-tsgolint/win32-arm64@0.17.0': - resolution: {integrity: sha512-dO6wyKMDqFWh1vwr+zNZS7/ovlfGgl4S3P1LDy4CKjP6V6NGtdmEwWkWax8j/I8RzGZdfXKnoUfb/qhVg5bx0w==} + '@oxlint-tsgolint/win32-arm64@0.17.1': + resolution: {integrity: sha512-EO/Oj0ixHX+UQdu9hM7YUzibZI888MvPUo/DF8lSxFBt4JNEt8qGkwJEbCYjB/1LhUNmPHzSw2Tr9dCFVfW9nw==} cpu: [arm64] os: [win32] @@ -2423,8 +2426,8 @@ packages: cpu: [x64] os: [win32] - '@oxlint-tsgolint/win32-x64@0.17.0': - resolution: {integrity: sha512-lPGYFp3yX2nh6hLTpIuMnJbZnt3Df42VkoA/fSkMYi2a/LXdDytQGpgZOrb5j47TICARd34RauKm0P3OA4Oxbw==} + '@oxlint-tsgolint/win32-x64@0.17.1': + resolution: {integrity: sha512-jhv7XktAJ1sMRSb//yDYTauFSZ06H81i2SLEBPaSUKxSKoPMK8p1ACUJlnmwZX2MgapRLEj1Ml22B6+HiM2YIA==} cpu: [x64] os: [win32] @@ -2827,16 +2830,11 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@reduxjs/toolkit@2.11.2': - resolution: {integrity: sha512-Kd6kAHTA6/nUpp8mySPqj3en3dm0tdMIgbttnQ1xFMVpufoj+ADi8pXLBsd4xzTRHQa7t/Jv8W5UnCuW4kuWMQ==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18 || ^19 - react-redux: ^7.2.1 || ^8.1.3 || ^9.0.0 - peerDependenciesMeta: - react: - optional: true - react-redux: - optional: true + '@rolldown/binding-android-arm64@1.0.0-rc.10': + resolution: {integrity: sha512-jOHxwXhxmFKuXztiu1ORieJeTbx5vrTkcOkkkn2d35726+iwhrY1w/+nYY/AGgF12thg33qC3R1LMBF5tHTZHg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] '@rolldown/binding-android-arm64@1.0.0-rc.9': resolution: {integrity: sha512-lcJL0bN5hpgJfSIz/8PIf02irmyL43P+j1pTCfbD1DbLkmGRuFIA4DD3B3ZOvGqG0XiVvRznbKtN0COQVaKUTg==} @@ -2844,89 +2842,175 @@ packages: cpu: [arm64] os: [android] + '@rolldown/binding-darwin-arm64@1.0.0-rc.10': + resolution: {integrity: sha512-gED05Teg/vtTZbIJBc4VNMAxAFDUPkuO/rAIyyxZjTj1a1/s6z5TII/5yMGZ0uLRCifEtwUQn8OlYzuYc0m70w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + '@rolldown/binding-darwin-arm64@1.0.0-rc.9': resolution: {integrity: sha512-J7Zk3kLYFsLtuH6U+F4pS2sYVzac0qkjcO5QxHS7OS7yZu2LRs+IXo+uvJ/mvpyUljDJ3LROZPoQfgBIpCMhdQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] + '@rolldown/binding-darwin-x64@1.0.0-rc.10': + resolution: {integrity: sha512-rI15NcM1mA48lqrIxVkHfAqcyFLcQwyXWThy+BQ5+mkKKPvSO26ir+ZDp36AgYoYVkqvMcdS8zOE6SeBsR9e8A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + '@rolldown/binding-darwin-x64@1.0.0-rc.9': resolution: {integrity: sha512-iwtmmghy8nhfRGeNAIltcNXzD0QMNaaA5U/NyZc1Ia4bxrzFByNMDoppoC+hl7cDiUq5/1CnFthpT9n+UtfFyg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] + '@rolldown/binding-freebsd-x64@1.0.0-rc.10': + resolution: {integrity: sha512-XZRXHdTa+4ME1MuDVp021+doQ+z6Ei4CCFmNc5/sKbqb8YmkiJdj8QKlV3rCI0AJtAeSB5n0WGPuJWNL9p/L2w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + '@rolldown/binding-freebsd-x64@1.0.0-rc.9': resolution: {integrity: sha512-DLFYI78SCiZr5VvdEplsVC2Vx53lnA4/Ga5C65iyldMVaErr86aiqCoNBLl92PXPfDtUYjUh+xFFor40ueNs4Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.10': + resolution: {integrity: sha512-R0SQMRluISSLzFE20sPWYHVmJdDQnRyc/FzSCN72BqQmh2SOZUFG+N3/vBZpR4C6WpEUVYJLrYUXaj43sJsNLA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.9': resolution: {integrity: sha512-CsjTmTwd0Hri6iTw/DRMK7kOZ7FwAkrO4h8YWKoX/kcj833e4coqo2wzIFywtch/8Eb5enQ/lwLM7w6JX1W5RQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.10': + resolution: {integrity: sha512-Y1reMrV/o+cwpduYhJuOE3OMKx32RMYCidf14y+HssARRmhDuWXJ4yVguDg2R/8SyyGNo+auzz64LnPK9Hq6jg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.9': resolution: {integrity: sha512-2x9O2JbSPxpxMDhP9Z74mahAStibTlrBMW0520+epJH5sac7/LwZW5Bmg/E6CXuEF53JJFW509uP+lSedaUNxg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.10': + resolution: {integrity: sha512-vELN+HNb2IzuzSBUOD4NHmP9yrGwl1DVM29wlQvx1OLSclL0NgVWnVDKl/8tEks79EFek/kebQKnNJkIAA4W2g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.9': resolution: {integrity: sha512-JA1QRW31ogheAIRhIg9tjMfsYbglXXYGNPLdPEYrwFxdbkQCAzvpSCSHCDWNl4hTtrol8WeboCSEpjdZK8qrCg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.10': + resolution: {integrity: sha512-ZqrufYTgzxbHwpqOjzSsb0UV/aV2TFIY5rP8HdsiPTv/CuAgCRjM6s9cYFwQ4CNH+hf9Y4erHW1GjZuZ7WoI7w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.9': resolution: {integrity: sha512-aOKU9dJheda8Kj8Y3w9gnt9QFOO+qKPAl8SWd7JPHP+Cu0EuDAE5wokQubLzIDQWg2myXq2XhTpOVS07qqvT+w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.10': + resolution: {integrity: sha512-gSlmVS1FZJSRicA6IyjoRoKAFK7IIHBs7xJuHRSmjImqk3mPPWbR7RhbnfH2G6bcmMEllCt2vQ/7u9e6bBnByg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.9': resolution: {integrity: sha512-OalO94fqj7IWRn3VdXWty75jC5dk4C197AWEuMhIpvVv2lw9fiPhud0+bW2ctCxb3YoBZor71QHbY+9/WToadA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.10': + resolution: {integrity: sha512-eOCKUpluKgfObT2pHjztnaWEIbUabWzk3qPZ5PuacuPmr4+JtQG4k2vGTY0H15edaTnicgU428XW/IH6AimcQw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.9': resolution: {integrity: sha512-cVEl1vZtBsBZna3YMjGXNvnYYrOJ7RzuWvZU0ffvJUexWkukMaDuGhUXn0rjnV0ptzGVkvc+vW9Yqy6h8YX4pg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + '@rolldown/binding-linux-x64-musl@1.0.0-rc.10': + resolution: {integrity: sha512-Xdf2jQbfQowJnLcgYfD/m0Uu0Qj5OdxKallD78/IPPfzaiaI4KRAwZzHcKQ4ig1gtg1SuzC7jovNiM2TzQsBXA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + '@rolldown/binding-linux-x64-musl@1.0.0-rc.9': resolution: {integrity: sha512-UzYnKCIIc4heAKgI4PZ3dfBGUZefGCJ1TPDuLHoCzgrMYPb5Rv6TLFuYtyM4rWyHM7hymNdsg5ik2C+UD9VDbA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + '@rolldown/binding-openharmony-arm64@1.0.0-rc.10': + resolution: {integrity: sha512-o1hYe8hLi1EY6jgPFyxQgQ1wcycX+qz8eEbVmot2hFkgUzPxy9+kF0u0NIQBeDq+Mko47AkaFFaChcvZa9UX9Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + '@rolldown/binding-openharmony-arm64@1.0.0-rc.9': resolution: {integrity: sha512-+6zoiF+RRyf5cdlFQP7nm58mq7+/2PFaY2DNQeD4B87N36JzfF/l9mdBkkmTvSYcYPE8tMh/o3cRlsx1ldLfog==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] + '@rolldown/binding-wasm32-wasi@1.0.0-rc.10': + resolution: {integrity: sha512-Ugv9o7qYJudqQO5Y5y2N2SOo6S4WiqiNOpuQyoPInnhVzCY+wi/GHltcLHypG9DEUYMB0iTB/huJrpadiAcNcA==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + '@rolldown/binding-wasm32-wasi@1.0.0-rc.9': resolution: {integrity: sha512-rgFN6sA/dyebil3YTlL2evvi/M+ivhfnyxec7AccTpRPccno/rPoNlqybEZQBkcbZu8Hy+eqNJCqfBR8P7Pg8g==} engines: {node: '>=14.0.0'} cpu: [wasm32] + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.10': + resolution: {integrity: sha512-7UODQb4fQUNT/vmgDZBl3XOBAIOutP5R3O/rkxg0aLfEGQ4opbCgU5vOw/scPe4xOqBwL9fw7/RP1vAMZ6QlAQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.9': resolution: {integrity: sha512-lHVNUG/8nlF1IQk1C0Ci574qKYyty2goMiPlRqkC5R+3LkXDkL5Dhx8ytbxq35m+pkHVIvIxviD+TWLdfeuadA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.10': + resolution: {integrity: sha512-PYxKHMVHOb5NJuDL53vBUl1VwUjymDcYI6rzpIni0C9+9mTiJedvUxSk7/RPp7OOAm3v+EjgMu9bIy3N6b408w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.9': resolution: {integrity: sha512-G0oA4+w1iY5AGi5HcDTxWsoxF509hrFIPB2rduV5aDqS9FtDg1CAfa7V34qImbjfhIcA8C+RekocJZA96EarwQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] + '@rolldown/pluginutils@1.0.0-rc.10': + resolution: {integrity: sha512-UkVDEFk1w3mveXeKgaTuYfKWtPbvgck1dT8TUG3bnccrH0XtLTuAyfCoks4Q/M5ZGToSVJTIQYCzy2g/atAOeg==} + '@rolldown/pluginutils@1.0.0-rc.7': resolution: {integrity: sha512-qujRfC8sFVInYSPPMLQByRh7zhwkGFS4+tyMQ83srV1qrxL4g8E2tyxVVyxd0+8QeBM1mIk9KbWxkegRr76XzA==} @@ -3142,32 +3226,32 @@ packages: '@rushstack/ts-command-line@5.0.2': resolution: {integrity: sha512-+AkJDbu1GFMPIU8Sb7TLVXDv/Q7Mkvx+wAjEl8XiXVVq+p1FmWW6M3LYpJMmoHNckSofeMecgWg5lfMwNAAsEQ==} - '@sentry-internal/browser-utils@10.43.0': - resolution: {integrity: sha512-8zYTnzhAPvNkVH1Irs62wl0J/c+0QcJ62TonKnzpSFUUD3V5qz8YDZbjIDGfxy+1EB9fO0sxtddKCzwTHF/MbQ==} + '@sentry-internal/browser-utils@10.45.0': + resolution: {integrity: sha512-ZPZpeIarXKScvquGx2AfNKcYiVNDA4wegMmjyGVsTA2JPmP0TrJoO3UybJS6KGDeee8V3I3EfD/ruauMm7jOFQ==} engines: {node: '>=18'} - '@sentry-internal/feedback@10.43.0': - resolution: {integrity: sha512-YoXuwluP6eOcQxTeTtaWb090++MrLyWOVsUTejzUQQ6LFL13Jwt+bDPF1kvBugMq4a7OHw/UNKQfd6//rZMn2g==} + '@sentry-internal/feedback@10.45.0': + resolution: {integrity: sha512-vCSurazFVq7RUeYiM5X326jA5gOVrWYD6lYX2fbjBOMcyCEhDnveNxMT62zKkZDyNT/jyD194nz/cjntBUkyWA==} engines: {node: '>=18'} - '@sentry-internal/replay-canvas@10.43.0': - resolution: {integrity: sha512-ZIw1UNKOFXo1LbPCJPMAx9xv7D8TMZQusLDUgb6BsPQJj0igAuwd7KRGTkjjgnrwBp2O/sxcQFRhQhknWk7QPg==} + '@sentry-internal/replay-canvas@10.45.0': + resolution: {integrity: sha512-nvq/AocdZTuD7y0KSiWi3gVaY0s5HOFy86mC/v1kDZmT/jsBAzN5LDkk/f1FvsWma1peqQmpUqxvhC+YIW294Q==} engines: {node: '>=18'} - '@sentry-internal/replay@10.43.0': - resolution: {integrity: sha512-khCXlGrlH1IU7P5zCEAJFestMeH97zDVCekj8OsNNDtN/1BmCJ46k6Xi0EqAUzdJgrOLJeLdoYdgtiIjovZ8Sg==} + '@sentry-internal/replay@10.45.0': + resolution: {integrity: sha512-vjosRoGA1bzhVAEO1oce+CsRdd70quzBeo7WvYqpcUnoLe/Rv8qpOMqWX3j26z7XfFHMExWQNQeLxmtYOArvlw==} engines: {node: '>=18'} - '@sentry/browser@10.43.0': - resolution: {integrity: sha512-2V3I3sXi3SMeiZpKixd9ztokSgK27cmvsD9J5oyOyjhGLTW/6QKCwHbKnluMgQMXq20nixQk5zN4wRjRUma3sg==} + '@sentry/browser@10.45.0': + resolution: {integrity: sha512-e/a8UMiQhqqv706McSIcG6XK+AoQf9INthi2pD+giZfNRTzXTdqHzUT5OIO5hg8Am6eF63nDJc+vrYNPhzs51Q==} engines: {node: '>=18'} - '@sentry/core@10.43.0': - resolution: {integrity: sha512-l0SszQAPiQGWl/ferw8GP3ALyHXiGiRKJaOvNmhGO+PrTQyZTZ6OYyPnGijAFRg58dE1V3RCH/zw5d2xSUIiNg==} + '@sentry/core@10.45.0': + resolution: {integrity: sha512-s69UXxvefeQxuZ5nY7/THtTrIEvJxNVCp3ns4kwoCw1qMpgpvn/296WCKVmM7MiwnaAdzEKnAvLAwaxZc2nM7Q==} engines: {node: '>=18'} - '@sentry/react@10.43.0': - resolution: {integrity: sha512-shvErEpJ41i0Q3lIZl0CDWYQ7m8yHLi7ECG0gFvN8zf8pEdl5grQIOoe3t/GIUzcpCcor16F148ATmKJJypc/Q==} + '@sentry/react@10.45.0': + resolution: {integrity: sha512-jLezuxi4BUIU3raKyAPR5xMbQG/nhwnWmKo5p11NCbLmWzkS+lxoyDTUB4B8TAKZLfdtdkKLOn1S0tFc8vbUHw==} engines: {node: '>=18'} peerDependencies: react: ^16.14.0 || 17.x || 18.x || 19.x @@ -3212,9 +3296,6 @@ packages: '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} - '@standard-schema/utils@0.3.0': - resolution: {integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==} - '@stylistic/stylelint-plugin@5.0.1': resolution: {integrity: sha512-NaVwCNVZ2LyPA3TnUwvjO9c6P6VUjgRB8UP8SOW+cAOJBVqPPuOIDawsvvtql/LhkuR3JuTdGvr/RM3dUl8l2Q==} engines: {node: '>=20.19.0'} @@ -3239,23 +3320,27 @@ packages: peerDependencies: tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1' - '@tanstack/devtools-event-client@0.4.0': - resolution: {integrity: sha512-RPfGuk2bDZgcu9bAJodvO2lnZeHuz4/71HjZ0bGb/SPg8+lyTA+RLSKQvo7fSmPSi8/vcH3aKQ8EM9ywf1olaw==} + '@tanstack/devtools-event-client@0.4.3': + resolution: {integrity: sha512-OZI6QyULw0FI0wjgmeYzCIfbgPsOEzwJtCpa69XrfLMtNXLGnz3d/dIabk7frg0TmHo+Ah49w5I4KC7Tufwsvw==} engines: {node: '>=18'} + hasBin: true '@tanstack/history@1.161.6': resolution: {integrity: sha512-NaOGLRrddszbQj9upGat6HG/4TKvXLvu+osAIgfxPYA+eIvYKv8GKDJOrY2D3/U9MRnKfMWD7bU4jeD4xmqyIg==} engines: {node: '>=20.19'} - '@tanstack/pacer@0.19.0': - resolution: {integrity: sha512-MRXCiG8IcjrN/3LGu7Wy6lKZkbwOb5YelOBYtHxnxKYj2WlO2FrqASILSiJcwdES5Sz2QJEIeuvO5JY8cKaGQw==} + '@tanstack/pacer@0.20.0': + resolution: {integrity: sha512-P5jKuB0xF3DUB6jQA0XFO4ZqjKD10aoyelhMZi51j2y6ppKeea5bIIvPN3WihACqHXuZqs16HdlJPGLpCxq2iw==} engines: {node: '>=18'} '@tanstack/query-core@5.90.20': resolution: {integrity: sha512-OMD2HLpNouXEfZJWcKeVKUgQ5n+n3A2JFmBaScpNDUqSrQSjiveC7dKMe53uJUg1nDG16ttFPz2xfilz6i2uVg==} - '@tanstack/react-pacer@0.20.0': - resolution: {integrity: sha512-5p7rHTBUroUl6vxYhvREaqpUWKCoe0bXaFH6y6CLYpcuU5aCl78IxXJKY5IujCN1sTRaq07jsMInTPmTBHvTiA==} + '@tanstack/query-core@5.94.5': + resolution: {integrity: sha512-Vx1JJiBURW/wdNGP45afjrqn0LfxYwL7K/bSrQvNRtyLGF1bxQPgUXCpzscG29e+UeFOh9hz1KOVala0N+bZiA==} + + '@tanstack/react-pacer@0.21.0': + resolution: {integrity: sha512-RwscVPQTzqqoAnhnotu7xr9VlME96BivqHQPiVzXe9SntdJ7D5CKjh7ObErFsnDOA11OhlD+FhvH6dDit5NRnA==} engines: {node: '>=18'} peerDependencies: react: '>=16.8' @@ -3266,35 +3351,31 @@ packages: peerDependencies: react: ^18 || ^19 - '@tanstack/react-router@1.167.4': - resolution: {integrity: sha512-VpbZh382zX3WF4+X2Z+EUyd8eJhJyjg9C6ByYwrVZiWbhgbMK4+zQQIG2+lCAlIlDi7SV8fDcGL09NA8Z2kpGQ==} + '@tanstack/react-query@5.94.5': + resolution: {integrity: sha512-1wmrxKFkor+q8l+ygdHmv0Sq5g84Q3p4xvuJ7AdSIAhQQ7udOt+ZSZ19g1Jea3mHqtlTslLGJsmC4vHFgP0P3A==} + peerDependencies: + react: ^18 || ^19 + + '@tanstack/react-router@1.168.2': + resolution: {integrity: sha512-zUDRM01m81xDCeTLHuqsvKR9zpf+bdfEhyadcUNSbO1930lIeOKLmMscUUNHWhc7Gqpi/V8Xl85QcJFAIAGmvQ==} engines: {node: '>=20.19'} peerDependencies: react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' - '@tanstack/react-store@0.8.1': - resolution: {integrity: sha512-XItJt+rG8c5Wn/2L/bnxys85rBpm0BfMbhb4zmPVLXAKY9POrp1xd6IbU4PKoOI+jSEGc3vntPRfLGSgXfE2Ig==} + '@tanstack/react-store@0.9.2': + resolution: {integrity: sha512-Vt5usJE5sHG/cMechQfmwvwne6ktGCELe89Lmvoxe3LKRoFrhPa8OCKWs0NliG8HTJElEIj7PLtaBQIcux5pAQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@tanstack/react-store@0.9.1': - resolution: {integrity: sha512-YzJLnRvy5lIEFTLWBAZmcOjK3+2AepnBv/sr6NZmiqJvq7zTQggyK99Gw8fqYdMdHPQWXjz0epFKJXC+9V2xDA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - '@tanstack/router-core@1.167.4': - resolution: {integrity: sha512-Gk5V9Zr5JFJ4SbLyCheQLJ3MnXddccENPA+DJRz+9g3QxtN8DJB8w8KCUCgDeYlWp4LvmO4nX3fy3tupqVP2Pw==} + '@tanstack/router-core@1.168.2': + resolution: {integrity: sha512-9wHR7syfY7y/qrvTvv8bugh6mrKk58TuiSQp44nbGW0BpE2+IIta1DBeL5jHr9AD1a+c5fVKSu/JXsKeniUc9w==} engines: {node: '>=20.19'} hasBin: true - '@tanstack/store@0.8.1': - resolution: {integrity: sha512-PtOisLjUZPz5VyPRSCGjNOlwTvabdTBQ2K80DpVL1chGVr35WRxfeavAPdNq6pm/t7F8GhoR2qtmkkqtCEtHYw==} - - '@tanstack/store@0.9.1': - resolution: {integrity: sha512-+qcNkOy0N1qSGsP7omVCW0SDrXtaDcycPqBDE726yryiA5eTDFpjBReaYjghVJwNf1pcPMyzIwTGlYjCSQR0Fg==} + '@tanstack/store@0.9.2': + resolution: {integrity: sha512-K013lUJEFJK2ofFQ/hZKJUmCnpcV00ebLyOyFOWQvyQHUOZp/iYO84BM6aOGiV81JzwbX0APTVmW8YI7yiG5oA==} '@testing-library/dom@10.4.1': resolution: {integrity: sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==} @@ -3478,43 +3559,43 @@ packages: '@types/use-sync-external-store@0.0.6': resolution: {integrity: sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==} - '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260317.1': - resolution: {integrity: sha512-E63cwlaAKeOXGcSaTcuVKdfGQJoms/vSMZH8lYsvxU6el3X96LdbXVcAIqbqwDfPJt7rQ6gw/OOGO45BlTlxSw==} + '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260322.1': + resolution: {integrity: sha512-5wSilxwLGX5fMKJgsUkCBwOfW9GMG3WF5j77CVBOdFI7miFaR3JQaPzTA+uyHDMNIIeSDo1KtV77GT48Y/d0Xg==} cpu: [arm64] os: [darwin] - '@typescript/native-preview-darwin-x64@7.0.0-dev.20260317.1': - resolution: {integrity: sha512-cy9kmUiwJmANoz1tOc22HYXqyz92tvNrI9eP/q8LAa5LGega5OlTqAbuSiEc4C9OUL/4EvCJuIYmOk5PFME0tQ==} + '@typescript/native-preview-darwin-x64@7.0.0-dev.20260322.1': + resolution: {integrity: sha512-G806SrfxkYNAgZ9Xk53+OvbmIg9iD5hjaiD2QhDQL2aZjzy10D4MhcdaZEOoMfw0OI/PoJPYOiPD+9/x2kw3Lg==} cpu: [x64] os: [darwin] - '@typescript/native-preview-linux-arm64@7.0.0-dev.20260317.1': - resolution: {integrity: sha512-YeRI5O4z5H7JgBCb2tTaZSEEEpojjBxac5DQ1NEm3wwjSSWhHadCaq/mDLq8yWDQo9JK0Yuj3Vb0NK3/P7F9Sw==} + '@typescript/native-preview-linux-arm64@7.0.0-dev.20260322.1': + resolution: {integrity: sha512-+FyomEEt3K8TBO//n3Ijr61SDM2F7cxZCVqGt+Wk3rLcOCQ2i+8+p64gdsZCmImy3CyP0hBnxPydEbyNkZLtvg==} cpu: [arm64] os: [linux] - '@typescript/native-preview-linux-arm@7.0.0-dev.20260317.1': - resolution: {integrity: sha512-Q6vKYOej5FoPfYzvNsUdeE4GWWKxUg9wzo2fJxgV50ZQeITEDvSpG1PxS1019kFbe3KSAoIIzSmhP/4EIie7Kg==} + '@typescript/native-preview-linux-arm@7.0.0-dev.20260322.1': + resolution: {integrity: sha512-0a12pp19ELiNHMqTglfQQQNMsxvtzpjAa4qf12oMJoGyy+UnguKEmaaaCHdp75KvBXGDzlssfDAdiy+NirN19A==} cpu: [arm] os: [linux] - '@typescript/native-preview-linux-x64@7.0.0-dev.20260317.1': - resolution: {integrity: sha512-PJN4JbWrVeJ8WyWbRWVdyUHUUSL9zKqywwroXdqIDgxUO2B09bSUCCs9DFJNHXQ5NqWND/WeVPgpYfnQ95S21Q==} + '@typescript/native-preview-linux-x64@7.0.0-dev.20260322.1': + resolution: {integrity: sha512-MviQe5x4WqQGv/Vhu4hcv2A0qTW/BTaZPbOLYCtvhuovNFO6D++ZmJAbHvA0h/bJEaNTgxKZdZPHMpCfSEKfjA==} cpu: [x64] os: [linux] - '@typescript/native-preview-win32-arm64@7.0.0-dev.20260317.1': - resolution: {integrity: sha512-Obv+ZTK0NVfv1E/KlTz7G5EyPbE8zNA1qeT59CyoWHl0Mi2iq3njs5dRIfcRbgGDZkSI8wJ+4C4JGfUyZZGZkA==} + '@typescript/native-preview-win32-arm64@7.0.0-dev.20260322.1': + resolution: {integrity: sha512-ibnMaXDJPSgMXKC61NHiFlww/xjAEINgc1mcn2ntTfuGHwduU4P9Bi038TxXg95Wmu3v6xIPIorXXsBOdE+p3Q==} cpu: [arm64] os: [win32] - '@typescript/native-preview-win32-x64@7.0.0-dev.20260317.1': - resolution: {integrity: sha512-Trt8E1nphVXaicVcXpsyiVArT6Zf+blhqGP/MPx9YEBlp1nuzxFpu1kj7A75r+6js4vIdoKieK215Q4J358qUw==} + '@typescript/native-preview-win32-x64@7.0.0-dev.20260322.1': + resolution: {integrity: sha512-O+r1RToWBbGkK7NXC7DpraLObSWyxvSqRiSfr/BlZ351Cdq1q3121zCGzVtqERGeRtVoEMRrzS5ITOd6On/pCw==} cpu: [x64] os: [win32] - '@typescript/native-preview@7.0.0-dev.20260317.1': - resolution: {integrity: sha512-HmYNuhDoN9OHfsSHuSRvYJobHAHDVubLvSGSrjfNL6C34fVlPkPDi+iA53LcN1pVX5J30kajcKC7Snm13xmuKA==} + '@typescript/native-preview@7.0.0-dev.20260322.1': + resolution: {integrity: sha512-CmzQTKvesYHmz3g92G+XPDis25ocvHqa/gK8m98w+bML99KJLEWQKVlvkLrYA85JiJEK+XBIiz+6lCgUqRkWXA==} hasBin: true '@uidotdev/usehooks@2.4.1': @@ -4141,8 +4222,8 @@ packages: core-js@3.48.0: resolution: {integrity: sha512-zpEHTy1fjTMZCKLHUZoVeylt9XrzaIN2rbPXEt0k+q7JE5CkCZdo6bNq55bn24a69CH7ErAVLKijxJja4fw+UQ==} - cosmiconfig@9.0.0: - resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} + cosmiconfig@9.0.1: + resolution: {integrity: sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==} engines: {node: '>=14'} peerDependencies: typescript: '>=4.9.5' @@ -5256,8 +5337,8 @@ packages: resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true - jsdom@29.0.0: - resolution: {integrity: sha512-9FshNB6OepopZ08unmmGpsF7/qCjxGPbo3NbgfJAnPeHXnsODE9WWffXZtRFRFe0ntzaAOcSKNJFz8wiyvF1jQ==} + jsdom@29.0.1: + resolution: {integrity: sha512-z6JOK5gRO7aMybVq/y/MlIpKh8JIi68FBKMUtKkK2KH/wMSRlCxQ682d08LB9fYXplyY/UXG8P4XXTScmdjApg==} engines: {node: ^20.19.0 || ^22.13.0 || >=24.0.0} peerDependencies: canvas: ^3.0.0 @@ -5341,8 +5422,8 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - lexical@0.41.0: - resolution: {integrity: sha512-pNIm5+n+hVnJHB9gYPDYsIO5Y59dNaDU9rJmPPsfqQhP2ojKFnUoPbcRnrI9FJLXB14sSumcY8LUw7Sq70TZqA==} + lexical@0.42.0: + resolution: {integrity: sha512-GY9Lg3YEIU7nSFaiUlLspZ1fm4NfIcfABaxy9nT+fRVDkX7iV005T5Swil83gXUmxFUNKGal3j+hUxHOUDr+Aw==} lib0@0.2.117: resolution: {integrity: sha512-DeXj9X5xDCjgKLU/7RR+/HQEVzuuEUiwldwOGsHK/sfAfELGWEyTcf0x+uOvCvK3O2zPmZePXWL85vtia6GyZw==} @@ -5435,8 +5516,8 @@ packages: linkify-it@5.0.0: resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} - lint-staged@16.2.7: - resolution: {integrity: sha512-lDIj4RnYmK7/kXMya+qJsmkRFkGolciXjrsZ6PC25GdTfWOAWetR0ZbsNXRAj1EHHImRSalc+whZFg56F5DVow==} + lint-staged@16.4.0: + resolution: {integrity: sha512-lBWt8hujh/Cjysw5GYVmZpFHXDCgZzhrOm8vbcUdobADZNOK/bRshr2kM3DfgrrtR1DQhfupW9gnIXOfiFi+bw==} engines: {node: '>=20.17'} hasBin: true @@ -5505,10 +5586,6 @@ packages: lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} - lru-cache@11.2.6: - resolution: {integrity: sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==} - engines: {node: 20 || >=22} - lru-cache@11.2.7: resolution: {integrity: sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==} engines: {node: 20 || >=22} @@ -5810,10 +5887,6 @@ packages: mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - nano-spawn@2.0.0: - resolution: {integrity: sha512-tacvGzUY5o2D8CBh2rrwxyNojUsZNU2zjNTzKQrkgGJQTbGAfArVWXSKMBokBeeg6C7OLRGUEyoFlYbfeWQIqw==} - engines: {node: '>=20.17'} - nanoid@3.3.11: resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -5924,8 +5997,8 @@ packages: resolution: {integrity: sha512-4RuJK2jP08XwqtUu+5yhCbxEauCm6tv2MFHKEMsjbosK2+vy5us82oI3VLuHwbNyZG7ekZA26U2LLHnGR4frIA==} hasBin: true - oxlint-tsgolint@0.17.0: - resolution: {integrity: sha512-TdrKhDZCgEYqONFo/j+KvGan7/k3tP5Ouz88wCqpOvJtI2QmcLfGsm1fcMvDnTik48Jj6z83IJBqlkmK9DnY1A==} + oxlint-tsgolint@0.17.1: + resolution: {integrity: sha512-gJc7hb1ZQFbWjRDYpu1XG+5IRdr1S/Jz/W2ohcpaqIXuDmHU0ujGiM0x05J0nIfwMF3HOEcANi/+j6T0Uecdpg==} hasBin: true oxlint@1.55.0: @@ -6051,11 +6124,6 @@ packages: resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} - pidtree@0.6.0: - resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} - engines: {node: '>=0.10'} - hasBin: true - pify@2.3.0: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} @@ -6672,6 +6740,11 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true + rolldown@1.0.0-rc.10: + resolution: {integrity: sha512-q7j6vvarRFmKpgJUT8HCAUljkgzEp4LAhPlJUvQhA5LA1SUL36s5QCysMutErzL3EbNOZOkoziSx9iZC4FddKA==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + rolldown@1.0.0-rc.9: resolution: {integrity: sha512-9EbgWge7ZH+yqb4d2EnELAntgPTWbfL8ajiTW+SyhJEC4qhBbkCKbqFV4Ge4zmu5ziQuVbWxb/XwLZ+RIO7E8Q==} engines: {node: ^20.19.0 || >=22.12.0} @@ -7187,8 +7260,8 @@ packages: peerDependencies: stylelint: ^16.8.2 || ^17.0.0 - stylelint@17.4.0: - resolution: {integrity: sha512-3kQ2/cHv3Zt8OBg+h2B8XCx9evEABQIrv4hh3uXahGz/ZEHrTR80zxBiK2NfXNaSoyBzxO1pjsz1Vhdzwn5XSw==} + stylelint@17.5.0: + resolution: {integrity: sha512-o/NS6zhsPZFmgUm5tXX4pVNg1XDOZSlucLdf2qow/lVn4JIyzZIQ5b3kad1ugqUj3GSIgr2u5lQw7X8rjqw33g==} engines: {node: '>=20.19.0'} hasBin: true @@ -7310,12 +7383,6 @@ packages: tiny-inflate@1.0.3: resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} - tiny-invariant@1.3.3: - resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} - - tiny-warning@1.0.3: - resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} - tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} @@ -7326,6 +7393,10 @@ packages: resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} engines: {node: '>=18'} + tinyexec@1.0.4: + resolution: {integrity: sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==} + engines: {node: '>=18'} + tinyglobby@0.2.15: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} @@ -7398,8 +7469,8 @@ packages: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} - type-fest@5.4.4: - resolution: {integrity: sha512-JnTrzGu+zPV3aXIUhnyWJj4z/wigMsdYajGLIYakqyOW1nPllzXEJee0QQbHj+CTIQtXGlAjuK0UY+2xTyjVAw==} + type-fest@5.5.0: + resolution: {integrity: sha512-PlBfpQwiUvGViBNX84Yxwjsdhd1TUlXr6zjX7eoirtCPIr08NAmxwa+fcYBTeRQxHo9YC9wwF3m9i700sHma8g==} engines: {node: '>=20'} typed-array-buffer@1.0.3: @@ -7471,8 +7542,8 @@ packages: undici-types@7.18.2: resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} - undici@7.24.3: - resolution: {integrity: sha512-eJdUmK/Wrx2d+mnWWmwwLRyA7OQCkLap60sk3dOK4ViZR7DKwwptwuIvFBg2HaiP9ESaEdhtpSymQPvytpmkCA==} + undici@7.24.5: + resolution: {integrity: sha512-3IWdCpjgxp15CbJnsi/Y9TCDE7HWVN19j1hmzVhoAkY/+CJx449tVxT5wZc1Gwg8J+P0LWvzlBzxYRnHJ+1i7Q==} engines: {node: '>=20.18.1'} unicode-canonical-property-names-ecmascript@2.0.1: @@ -7637,6 +7708,14 @@ packages: typescript: optional: true + valibot@1.3.1: + resolution: {integrity: sha512-sfdRir/QFM0JaF22hqTroPc5xy4DimuGQVKFrzF1YfGwaS1nJot3Y8VqMdLO2Lg27fMzat2yD3pY5PbAYO39Gg==} + peerDependencies: + typescript: '>=5' + peerDependenciesMeta: + typescript: + optional: true + varint@6.0.0: resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==} @@ -7686,8 +7765,8 @@ packages: peerDependencies: vite: ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 - vite-plugin-static-copy@3.3.0: - resolution: {integrity: sha512-XiAtZcev7nppxNFgKoD55rfL+ukVp/RtrnTJONRwRuzv/B2FK2h2ZRCYjvxhwBV/Oarse83SiyXBSxMTfeEM0Q==} + vite-plugin-static-copy@3.4.0: + resolution: {integrity: sha512-ekryzCw0ouAOE8tw4RvVL/dfqguXzumsV3FBKoKso4MQ1MUUrUXtl5RI4KpJQUNGqFEsg9kxl4EvDl02YtA9VQ==} engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -7775,6 +7854,49 @@ packages: yaml: optional: true + vite@8.0.1: + resolution: {integrity: sha512-wt+Z2qIhfFt85uiyRt5LPU4oVEJBXj8hZNWKeqFG4gRG/0RaRGJ7njQCwzFVjO+v4+Ipmf5CY7VdmZRAYYBPHw==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.1.0 + esbuild: ^0.27.0 + jiti: '>=1.21.0' + less: ^4.0.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + '@vitejs/devtools': + optional: true + esbuild: + optional: true + jiti: + optional: true + less: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + vitefu@1.1.2: resolution: {integrity: sha512-zpKATdUbzbsycPFBN71nS2uzBUQiVnFoOrr2rvqv34S1lcAgMKKkjWleLGeiJlZ8lwCXvtWaRn7R3ZC16SYRuw==} peerDependencies: @@ -7981,8 +8103,8 @@ packages: resolution: {integrity: sha512-OTIk8iR8/aCRWBqvxrzxR0hgxWpnYBblY1S5hDWBQfk/VFmJwzmJgQFN3WsoUKHISv2eAwe+PpbUzyL1CKTLXg==} engines: {node: ^20.17.0 || >=22.9.0} - ws@8.19.0: - resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==} + ws@8.20.0: + resolution: {integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -8921,8 +9043,6 @@ snapshots: dependencies: '@csstools/css-tokenizer': 4.0.0 - '@csstools/css-syntax-patches-for-csstree@1.0.28': {} - '@csstools/css-syntax-patches-for-csstree@1.1.1(css-tree@3.2.1)': optionalDependencies: css-tree: 3.2.1 @@ -9458,163 +9578,173 @@ snapshots: '@keyv/serialize@1.1.1': {} - '@lexical/clipboard@0.41.0': + '@lexical/clipboard@0.42.0': dependencies: - '@lexical/html': 0.41.0 - '@lexical/list': 0.41.0 - '@lexical/selection': 0.41.0 - '@lexical/utils': 0.41.0 - lexical: 0.41.0 + '@lexical/html': 0.42.0 + '@lexical/list': 0.42.0 + '@lexical/selection': 0.42.0 + '@lexical/utils': 0.42.0 + lexical: 0.42.0 - '@lexical/code@0.41.0': + '@lexical/code-core@0.42.0': dependencies: - '@lexical/utils': 0.41.0 - lexical: 0.41.0 + lexical: 0.42.0 + + '@lexical/code-prism@0.42.0': + dependencies: + '@lexical/code-core': 0.42.0 + lexical: 0.42.0 prismjs: 1.30.0 - '@lexical/devtools-core@0.41.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@lexical/code@0.42.0': dependencies: - '@lexical/html': 0.41.0 - '@lexical/link': 0.41.0 - '@lexical/mark': 0.41.0 - '@lexical/table': 0.41.0 - '@lexical/utils': 0.41.0 - lexical: 0.41.0 + '@lexical/code-core': 0.42.0 + '@lexical/code-prism': 0.42.0 + lexical: 0.42.0 + + '@lexical/devtools-core@0.42.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@lexical/html': 0.42.0 + '@lexical/link': 0.42.0 + '@lexical/mark': 0.42.0 + '@lexical/table': 0.42.0 + '@lexical/utils': 0.42.0 + lexical: 0.42.0 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - '@lexical/dragon@0.41.0': + '@lexical/dragon@0.42.0': dependencies: - '@lexical/extension': 0.41.0 - lexical: 0.41.0 + '@lexical/extension': 0.42.0 + lexical: 0.42.0 - '@lexical/extension@0.41.0': + '@lexical/extension@0.42.0': dependencies: - '@lexical/utils': 0.41.0 + '@lexical/utils': 0.42.0 '@preact/signals-core': 1.13.0 - lexical: 0.41.0 + lexical: 0.42.0 - '@lexical/hashtag@0.41.0': + '@lexical/hashtag@0.42.0': dependencies: - '@lexical/text': 0.41.0 - '@lexical/utils': 0.41.0 - lexical: 0.41.0 + '@lexical/text': 0.42.0 + '@lexical/utils': 0.42.0 + lexical: 0.42.0 - '@lexical/history@0.41.0': + '@lexical/history@0.42.0': dependencies: - '@lexical/extension': 0.41.0 - '@lexical/utils': 0.41.0 - lexical: 0.41.0 + '@lexical/extension': 0.42.0 + '@lexical/utils': 0.42.0 + lexical: 0.42.0 - '@lexical/html@0.41.0': + '@lexical/html@0.42.0': dependencies: - '@lexical/selection': 0.41.0 - '@lexical/utils': 0.41.0 - lexical: 0.41.0 + '@lexical/selection': 0.42.0 + '@lexical/utils': 0.42.0 + lexical: 0.42.0 - '@lexical/link@0.41.0': + '@lexical/link@0.42.0': dependencies: - '@lexical/extension': 0.41.0 - '@lexical/utils': 0.41.0 - lexical: 0.41.0 + '@lexical/extension': 0.42.0 + '@lexical/utils': 0.42.0 + lexical: 0.42.0 - '@lexical/list@0.41.0': + '@lexical/list@0.42.0': dependencies: - '@lexical/extension': 0.41.0 - '@lexical/selection': 0.41.0 - '@lexical/utils': 0.41.0 - lexical: 0.41.0 + '@lexical/extension': 0.42.0 + '@lexical/selection': 0.42.0 + '@lexical/utils': 0.42.0 + lexical: 0.42.0 - '@lexical/mark@0.41.0': + '@lexical/mark@0.42.0': dependencies: - '@lexical/utils': 0.41.0 - lexical: 0.41.0 + '@lexical/utils': 0.42.0 + lexical: 0.42.0 - '@lexical/markdown@0.41.0': + '@lexical/markdown@0.42.0': dependencies: - '@lexical/code': 0.41.0 - '@lexical/link': 0.41.0 - '@lexical/list': 0.41.0 - '@lexical/rich-text': 0.41.0 - '@lexical/text': 0.41.0 - '@lexical/utils': 0.41.0 - lexical: 0.41.0 + '@lexical/code-core': 0.42.0 + '@lexical/link': 0.42.0 + '@lexical/list': 0.42.0 + '@lexical/rich-text': 0.42.0 + '@lexical/text': 0.42.0 + '@lexical/utils': 0.42.0 + lexical: 0.42.0 - '@lexical/offset@0.41.0': + '@lexical/offset@0.42.0': dependencies: - lexical: 0.41.0 + lexical: 0.42.0 - '@lexical/overflow@0.41.0': + '@lexical/overflow@0.42.0': dependencies: - lexical: 0.41.0 + lexical: 0.42.0 - '@lexical/plain-text@0.41.0': + '@lexical/plain-text@0.42.0': dependencies: - '@lexical/clipboard': 0.41.0 - '@lexical/dragon': 0.41.0 - '@lexical/selection': 0.41.0 - '@lexical/utils': 0.41.0 - lexical: 0.41.0 + '@lexical/clipboard': 0.42.0 + '@lexical/dragon': 0.42.0 + '@lexical/selection': 0.42.0 + '@lexical/utils': 0.42.0 + lexical: 0.42.0 - '@lexical/react@0.41.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yjs@13.6.27)': + '@lexical/react@0.42.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(yjs@13.6.27)': dependencies: '@floating-ui/react': 0.27.19(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@lexical/devtools-core': 0.41.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@lexical/dragon': 0.41.0 - '@lexical/extension': 0.41.0 - '@lexical/hashtag': 0.41.0 - '@lexical/history': 0.41.0 - '@lexical/link': 0.41.0 - '@lexical/list': 0.41.0 - '@lexical/mark': 0.41.0 - '@lexical/markdown': 0.41.0 - '@lexical/overflow': 0.41.0 - '@lexical/plain-text': 0.41.0 - '@lexical/rich-text': 0.41.0 - '@lexical/table': 0.41.0 - '@lexical/text': 0.41.0 - '@lexical/utils': 0.41.0 - '@lexical/yjs': 0.41.0(yjs@13.6.27) - lexical: 0.41.0 + '@lexical/devtools-core': 0.42.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@lexical/dragon': 0.42.0 + '@lexical/extension': 0.42.0 + '@lexical/hashtag': 0.42.0 + '@lexical/history': 0.42.0 + '@lexical/link': 0.42.0 + '@lexical/list': 0.42.0 + '@lexical/mark': 0.42.0 + '@lexical/markdown': 0.42.0 + '@lexical/overflow': 0.42.0 + '@lexical/plain-text': 0.42.0 + '@lexical/rich-text': 0.42.0 + '@lexical/table': 0.42.0 + '@lexical/text': 0.42.0 + '@lexical/utils': 0.42.0 + '@lexical/yjs': 0.42.0(yjs@13.6.27) + lexical: 0.42.0 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) react-error-boundary: 6.1.1(react@19.2.4) transitivePeerDependencies: - yjs - '@lexical/rich-text@0.41.0': + '@lexical/rich-text@0.42.0': dependencies: - '@lexical/clipboard': 0.41.0 - '@lexical/dragon': 0.41.0 - '@lexical/selection': 0.41.0 - '@lexical/utils': 0.41.0 - lexical: 0.41.0 + '@lexical/clipboard': 0.42.0 + '@lexical/dragon': 0.42.0 + '@lexical/selection': 0.42.0 + '@lexical/utils': 0.42.0 + lexical: 0.42.0 - '@lexical/selection@0.41.0': + '@lexical/selection@0.42.0': dependencies: - lexical: 0.41.0 + lexical: 0.42.0 - '@lexical/table@0.41.0': + '@lexical/table@0.42.0': dependencies: - '@lexical/clipboard': 0.41.0 - '@lexical/extension': 0.41.0 - '@lexical/utils': 0.41.0 - lexical: 0.41.0 + '@lexical/clipboard': 0.42.0 + '@lexical/extension': 0.42.0 + '@lexical/utils': 0.42.0 + lexical: 0.42.0 - '@lexical/text@0.41.0': + '@lexical/text@0.42.0': dependencies: - lexical: 0.41.0 + lexical: 0.42.0 - '@lexical/utils@0.41.0': + '@lexical/utils@0.42.0': dependencies: - '@lexical/selection': 0.41.0 - lexical: 0.41.0 + '@lexical/selection': 0.42.0 + lexical: 0.42.0 - '@lexical/yjs@0.41.0(yjs@13.6.27)': + '@lexical/yjs@0.42.0(yjs@13.6.27)': dependencies: - '@lexical/offset': 0.41.0 - '@lexical/selection': 0.41.0 - lexical: 0.41.0 + '@lexical/offset': 0.42.0 + '@lexical/selection': 0.42.0 + lexical: 0.42.0 yjs: 13.6.27 '@material/material-color-utilities@0.3.0': {} @@ -9717,6 +9847,8 @@ snapshots: '@oxc-project/types@0.115.0': {} + '@oxc-project/types@0.120.0': {} + '@oxfmt/binding-android-arm-eabi@0.40.0': optional: true @@ -9836,37 +9968,37 @@ snapshots: '@oxlint-tsgolint/darwin-arm64@0.16.0': optional: true - '@oxlint-tsgolint/darwin-arm64@0.17.0': + '@oxlint-tsgolint/darwin-arm64@0.17.1': optional: true '@oxlint-tsgolint/darwin-x64@0.16.0': optional: true - '@oxlint-tsgolint/darwin-x64@0.17.0': + '@oxlint-tsgolint/darwin-x64@0.17.1': optional: true '@oxlint-tsgolint/linux-arm64@0.16.0': optional: true - '@oxlint-tsgolint/linux-arm64@0.17.0': + '@oxlint-tsgolint/linux-arm64@0.17.1': optional: true '@oxlint-tsgolint/linux-x64@0.16.0': optional: true - '@oxlint-tsgolint/linux-x64@0.17.0': + '@oxlint-tsgolint/linux-x64@0.17.1': optional: true '@oxlint-tsgolint/win32-arm64@0.16.0': optional: true - '@oxlint-tsgolint/win32-arm64@0.17.0': + '@oxlint-tsgolint/win32-arm64@0.17.1': optional: true '@oxlint-tsgolint/win32-x64@0.16.0': optional: true - '@oxlint-tsgolint/win32-x64@0.17.0': + '@oxlint-tsgolint/win32-x64@0.17.1': optional: true '@oxlint/binding-android-arm-eabi@1.55.0': @@ -10145,65 +10277,102 @@ snapshots: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - '@reduxjs/toolkit@2.11.2(react-redux@9.2.0(@types/react@19.2.14)(react@19.2.4)(redux@5.0.1))(react@19.2.4)': - dependencies: - '@standard-schema/spec': 1.1.0 - '@standard-schema/utils': 0.3.0 - immer: 11.1.4 - redux: 5.0.1 - redux-thunk: 3.1.0(redux@5.0.1) - reselect: 5.1.1 - optionalDependencies: - react: 19.2.4 - react-redux: 9.2.0(@types/react@19.2.14)(react@19.2.4)(redux@5.0.1) + '@rolldown/binding-android-arm64@1.0.0-rc.10': + optional: true '@rolldown/binding-android-arm64@1.0.0-rc.9': optional: true + '@rolldown/binding-darwin-arm64@1.0.0-rc.10': + optional: true + '@rolldown/binding-darwin-arm64@1.0.0-rc.9': optional: true + '@rolldown/binding-darwin-x64@1.0.0-rc.10': + optional: true + '@rolldown/binding-darwin-x64@1.0.0-rc.9': optional: true + '@rolldown/binding-freebsd-x64@1.0.0-rc.10': + optional: true + '@rolldown/binding-freebsd-x64@1.0.0-rc.9': optional: true + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.10': + optional: true + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.9': optional: true + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.10': + optional: true + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.9': optional: true + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.10': + optional: true + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.9': optional: true + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.10': + optional: true + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.9': optional: true + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.10': + optional: true + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.9': optional: true + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.10': + optional: true + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.9': optional: true + '@rolldown/binding-linux-x64-musl@1.0.0-rc.10': + optional: true + '@rolldown/binding-linux-x64-musl@1.0.0-rc.9': optional: true + '@rolldown/binding-openharmony-arm64@1.0.0-rc.10': + optional: true + '@rolldown/binding-openharmony-arm64@1.0.0-rc.9': optional: true + '@rolldown/binding-wasm32-wasi@1.0.0-rc.10': + dependencies: + '@napi-rs/wasm-runtime': 1.1.1 + optional: true + '@rolldown/binding-wasm32-wasi@1.0.0-rc.9': dependencies: '@napi-rs/wasm-runtime': 1.1.1 optional: true + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.10': + optional: true + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.9': optional: true + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.10': + optional: true + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.9': optional: true + '@rolldown/pluginutils@1.0.0-rc.10': {} + '@rolldown/pluginutils@1.0.0-rc.7': {} '@rolldown/pluginutils@1.0.0-rc.9': {} @@ -10388,38 +10557,38 @@ snapshots: transitivePeerDependencies: - '@types/node' - '@sentry-internal/browser-utils@10.43.0': + '@sentry-internal/browser-utils@10.45.0': dependencies: - '@sentry/core': 10.43.0 + '@sentry/core': 10.45.0 - '@sentry-internal/feedback@10.43.0': + '@sentry-internal/feedback@10.45.0': dependencies: - '@sentry/core': 10.43.0 + '@sentry/core': 10.45.0 - '@sentry-internal/replay-canvas@10.43.0': + '@sentry-internal/replay-canvas@10.45.0': dependencies: - '@sentry-internal/replay': 10.43.0 - '@sentry/core': 10.43.0 + '@sentry-internal/replay': 10.45.0 + '@sentry/core': 10.45.0 - '@sentry-internal/replay@10.43.0': + '@sentry-internal/replay@10.45.0': dependencies: - '@sentry-internal/browser-utils': 10.43.0 - '@sentry/core': 10.43.0 + '@sentry-internal/browser-utils': 10.45.0 + '@sentry/core': 10.45.0 - '@sentry/browser@10.43.0': + '@sentry/browser@10.45.0': dependencies: - '@sentry-internal/browser-utils': 10.43.0 - '@sentry-internal/feedback': 10.43.0 - '@sentry-internal/replay': 10.43.0 - '@sentry-internal/replay-canvas': 10.43.0 - '@sentry/core': 10.43.0 + '@sentry-internal/browser-utils': 10.45.0 + '@sentry-internal/feedback': 10.45.0 + '@sentry-internal/replay': 10.45.0 + '@sentry-internal/replay-canvas': 10.45.0 + '@sentry/core': 10.45.0 - '@sentry/core@10.43.0': {} + '@sentry/core@10.45.0': {} - '@sentry/react@10.43.0(react@19.2.4)': + '@sentry/react@10.45.0(react@19.2.4)': dependencies: - '@sentry/browser': 10.43.0 - '@sentry/core': 10.43.0 + '@sentry/browser': 10.45.0 + '@sentry/core': 10.45.0 react: 19.2.4 '@shikijs/core@3.23.0': @@ -10477,9 +10646,7 @@ snapshots: '@standard-schema/spec@1.1.0': {} - '@standard-schema/utils@0.3.0': {} - - '@stylistic/stylelint-plugin@5.0.1(stylelint@17.4.0(typescript@5.9.3))': + '@stylistic/stylelint-plugin@5.0.1(stylelint@17.5.0(typescript@5.9.3))': dependencies: '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 @@ -10488,7 +10655,7 @@ snapshots: postcss-selector-parser: 7.1.1 postcss-value-parser: 4.2.0 style-search: 0.1.0 - stylelint: 17.4.0(typescript@5.9.3) + stylelint: 17.5.0(typescript@5.9.3) '@surma/rollup-plugin-off-main-thread@2.2.3': dependencies: @@ -10511,21 +10678,23 @@ snapshots: postcss-selector-parser: 6.0.10 tailwindcss: 3.4.19(yaml@2.8.2) - '@tanstack/devtools-event-client@0.4.0': {} + '@tanstack/devtools-event-client@0.4.3': {} '@tanstack/history@1.161.6': {} - '@tanstack/pacer@0.19.0': + '@tanstack/pacer@0.20.0': dependencies: - '@tanstack/devtools-event-client': 0.4.0 - '@tanstack/store': 0.8.1 + '@tanstack/devtools-event-client': 0.4.3 + '@tanstack/store': 0.9.2 '@tanstack/query-core@5.90.20': {} - '@tanstack/react-pacer@0.20.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@tanstack/query-core@5.94.5': {} + + '@tanstack/react-pacer@0.21.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@tanstack/pacer': 0.19.0 - '@tanstack/react-store': 0.8.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@tanstack/pacer': 0.20.0 + '@tanstack/react-store': 0.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) @@ -10534,44 +10703,35 @@ snapshots: '@tanstack/query-core': 5.90.20 react: 19.2.4 - '@tanstack/react-router@1.167.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@tanstack/react-query@5.94.5(react@19.2.4)': + dependencies: + '@tanstack/query-core': 5.94.5 + react: 19.2.4 + + '@tanstack/react-router@1.168.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@tanstack/history': 1.161.6 - '@tanstack/react-store': 0.9.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@tanstack/router-core': 1.167.4 + '@tanstack/react-store': 0.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@tanstack/router-core': 1.168.2 isbot: 5.1.35 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - tiny-invariant: 1.3.3 - tiny-warning: 1.0.3 - '@tanstack/react-store@0.8.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@tanstack/react-store@0.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@tanstack/store': 0.8.1 + '@tanstack/store': 0.9.2 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) use-sync-external-store: 1.6.0(react@19.2.4) - '@tanstack/react-store@0.9.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@tanstack/store': 0.9.1 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - use-sync-external-store: 1.6.0(react@19.2.4) - - '@tanstack/router-core@1.167.4': + '@tanstack/router-core@1.168.2': dependencies: '@tanstack/history': 1.161.6 - '@tanstack/store': 0.9.1 cookie-es: 2.0.0 seroval: 1.5.0 seroval-plugins: 1.5.0(seroval@1.5.0) - tiny-invariant: 1.3.3 - tiny-warning: 1.0.3 - '@tanstack/store@0.8.1': {} - - '@tanstack/store@0.9.1': {} + '@tanstack/store@0.9.2': {} '@testing-library/dom@10.4.1': dependencies: @@ -10768,36 +10928,36 @@ snapshots: '@types/use-sync-external-store@0.0.6': {} - '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260317.1': + '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260322.1': optional: true - '@typescript/native-preview-darwin-x64@7.0.0-dev.20260317.1': + '@typescript/native-preview-darwin-x64@7.0.0-dev.20260322.1': optional: true - '@typescript/native-preview-linux-arm64@7.0.0-dev.20260317.1': + '@typescript/native-preview-linux-arm64@7.0.0-dev.20260322.1': optional: true - '@typescript/native-preview-linux-arm@7.0.0-dev.20260317.1': + '@typescript/native-preview-linux-arm@7.0.0-dev.20260322.1': optional: true - '@typescript/native-preview-linux-x64@7.0.0-dev.20260317.1': + '@typescript/native-preview-linux-x64@7.0.0-dev.20260322.1': optional: true - '@typescript/native-preview-win32-arm64@7.0.0-dev.20260317.1': + '@typescript/native-preview-win32-arm64@7.0.0-dev.20260322.1': optional: true - '@typescript/native-preview-win32-x64@7.0.0-dev.20260317.1': + '@typescript/native-preview-win32-x64@7.0.0-dev.20260322.1': optional: true - '@typescript/native-preview@7.0.0-dev.20260317.1': + '@typescript/native-preview@7.0.0-dev.20260322.1': optionalDependencies: - '@typescript/native-preview-darwin-arm64': 7.0.0-dev.20260317.1 - '@typescript/native-preview-darwin-x64': 7.0.0-dev.20260317.1 - '@typescript/native-preview-linux-arm': 7.0.0-dev.20260317.1 - '@typescript/native-preview-linux-arm64': 7.0.0-dev.20260317.1 - '@typescript/native-preview-linux-x64': 7.0.0-dev.20260317.1 - '@typescript/native-preview-win32-arm64': 7.0.0-dev.20260317.1 - '@typescript/native-preview-win32-x64': 7.0.0-dev.20260317.1 + '@typescript/native-preview-darwin-arm64': 7.0.0-dev.20260322.1 + '@typescript/native-preview-darwin-x64': 7.0.0-dev.20260322.1 + '@typescript/native-preview-linux-arm': 7.0.0-dev.20260322.1 + '@typescript/native-preview-linux-arm64': 7.0.0-dev.20260322.1 + '@typescript/native-preview-linux-x64': 7.0.0-dev.20260322.1 + '@typescript/native-preview-win32-arm64': 7.0.0-dev.20260322.1 + '@typescript/native-preview-win32-x64': 7.0.0-dev.20260322.1 '@uidotdev/usehooks@2.4.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: @@ -10815,12 +10975,12 @@ snapshots: '@use-gesture/core': 10.3.1 react: 19.2.4 - '@vitejs/plugin-react@6.0.1(vite@8.0.0(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2))': + '@vitejs/plugin-react@6.0.1(vite@8.0.1(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2))': dependencies: '@rolldown/pluginutils': 1.0.0-rc.7 - vite: 8.0.0(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2) + vite: 8.0.1(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2) - '@vitest/coverage-v8@4.1.0(vitest@4.1.0(@types/node@25.5.0)(jsdom@29.0.0)(vite@8.0.0(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)))': + '@vitest/coverage-v8@4.1.0(vitest@4.1.0(@types/node@25.5.0)(jsdom@29.0.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)))': dependencies: '@bcoe/v8-coverage': 1.0.2 '@vitest/utils': 4.1.0 @@ -10832,9 +10992,9 @@ snapshots: obug: 2.1.1 std-env: 4.0.0 tinyrainbow: 3.0.3 - vitest: 4.1.0(@types/node@25.5.0)(jsdom@29.0.0)(vite@8.0.0(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)) + vitest: 4.1.0(@types/node@25.5.0)(jsdom@29.0.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)) - '@vitest/coverage-v8@4.1.0(vitest@4.1.0(@types/node@25.5.0)(jsdom@29.0.0)(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.3)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)))': + '@vitest/coverage-v8@4.1.0(vitest@4.1.0(@types/node@25.5.0)(jsdom@29.0.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.3)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)))': dependencies: '@bcoe/v8-coverage': 1.0.2 '@vitest/utils': 4.1.0 @@ -10846,7 +11006,7 @@ snapshots: obug: 2.1.1 std-env: 4.0.0 tinyrainbow: 3.0.3 - vitest: 4.1.0(@types/node@25.5.0)(jsdom@29.0.0)(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.3)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)) + vitest: 4.1.0(@types/node@25.5.0)(jsdom@29.0.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.3)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)) '@vitest/expect@4.1.0': dependencies: @@ -10857,21 +11017,21 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.0.3 - '@vitest/mocker@4.1.0(vite@8.0.0(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2))': + '@vitest/mocker@4.1.0(vite@8.0.1(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2))': dependencies: '@vitest/spy': 4.1.0 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.0.0(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2) + vite: 8.0.1(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2) - '@vitest/mocker@4.1.0(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.3)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2))': + '@vitest/mocker@4.1.0(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.3)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2))': dependencies: '@vitest/spy': 4.1.0 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.0.0(@types/node@25.5.0)(esbuild@0.27.3)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2) + vite: 8.0.1(@types/node@25.5.0)(esbuild@0.27.3)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2) '@vitest/pretty-format@4.1.0': dependencies: @@ -11575,7 +11735,7 @@ snapshots: core-js@3.48.0: {} - cosmiconfig@9.0.0(typescript@5.9.3): + cosmiconfig@9.0.1(typescript@5.9.3): dependencies: env-paths: 2.2.1 import-fresh: 3.3.1 @@ -12678,7 +12838,8 @@ snapshots: immediate@3.0.6: {} - immer@11.1.4: {} + immer@11.1.4: + optional: true immutable@5.1.5: {} @@ -12792,7 +12953,7 @@ snapshots: is-fullwidth-code-point@5.0.0: dependencies: - get-east-asian-width: 1.3.0 + get-east-asian-width: 1.5.0 is-generator-function@1.1.2: dependencies: @@ -12892,9 +13053,9 @@ snapshots: isomorphic.js@0.2.5: {} - isows@1.0.7(ws@8.19.0): + isows@1.0.7(ws@8.20.0): dependencies: - ws: 8.19.0 + ws: 8.20.0 istanbul-lib-coverage@3.2.2: {} @@ -12933,7 +13094,7 @@ snapshots: dependencies: argparse: 2.0.1 - jsdom@29.0.0: + jsdom@29.0.1: dependencies: '@asamuzakjp/css-color': 5.0.1 '@asamuzakjp/dom-selector': 7.0.3 @@ -12950,7 +13111,7 @@ snapshots: saxes: 6.0.0 symbol-tree: 3.2.4 tough-cookie: 6.0.1 - undici: 7.24.3 + undici: 7.24.5 w3c-xmlserializer: 5.0.0 webidl-conversions: 8.0.1 whatwg-mimetype: 5.0.0 @@ -13020,7 +13181,7 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - lexical@0.41.0: {} + lexical@0.42.0: {} lib0@0.2.117: dependencies: @@ -13089,14 +13250,13 @@ snapshots: dependencies: uc.micro: 2.1.0 - lint-staged@16.2.7: + lint-staged@16.4.0: dependencies: commander: 14.0.3 listr2: 9.0.5 - micromatch: 4.0.8 - nano-spawn: 2.0.0 - pidtree: 0.6.0 + picomatch: 4.0.3 string-argv: 0.3.2 + tinyexec: 1.0.4 yaml: 2.8.2 listr2@9.0.5: @@ -13151,7 +13311,7 @@ snapshots: ansi-escapes: 7.0.0 cli-cursor: 5.0.0 slice-ansi: 7.1.0 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 wrap-ansi: 9.0.0 longest-streak@3.1.0: {} @@ -13164,8 +13324,6 @@ snapshots: dependencies: tslib: 2.8.1 - lru-cache@11.2.6: {} - lru-cache@11.2.7: {} lru-cache@5.1.1: @@ -13728,8 +13886,6 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 - nano-spawn@2.0.0: {} - nanoid@3.3.11: {} natural-compare@1.4.0: {} @@ -13884,14 +14040,14 @@ snapshots: '@oxlint-tsgolint/win32-arm64': 0.16.0 '@oxlint-tsgolint/win32-x64': 0.16.0 - oxlint-tsgolint@0.17.0: + oxlint-tsgolint@0.17.1: optionalDependencies: - '@oxlint-tsgolint/darwin-arm64': 0.17.0 - '@oxlint-tsgolint/darwin-x64': 0.17.0 - '@oxlint-tsgolint/linux-arm64': 0.17.0 - '@oxlint-tsgolint/linux-x64': 0.17.0 - '@oxlint-tsgolint/win32-arm64': 0.17.0 - '@oxlint-tsgolint/win32-x64': 0.17.0 + '@oxlint-tsgolint/darwin-arm64': 0.17.1 + '@oxlint-tsgolint/darwin-x64': 0.17.1 + '@oxlint-tsgolint/linux-arm64': 0.17.1 + '@oxlint-tsgolint/linux-x64': 0.17.1 + '@oxlint-tsgolint/win32-arm64': 0.17.1 + '@oxlint-tsgolint/win32-x64': 0.17.1 oxlint@1.55.0(oxlint-tsgolint@0.16.0): optionalDependencies: @@ -13916,7 +14072,7 @@ snapshots: '@oxlint/binding-win32-x64-msvc': 1.55.0 oxlint-tsgolint: 0.16.0 - oxlint@1.55.0(oxlint-tsgolint@0.17.0): + oxlint@1.55.0(oxlint-tsgolint@0.17.1): optionalDependencies: '@oxlint/binding-android-arm-eabi': 1.55.0 '@oxlint/binding-android-arm64': 1.55.0 @@ -13937,9 +14093,9 @@ snapshots: '@oxlint/binding-win32-arm64-msvc': 1.55.0 '@oxlint/binding-win32-ia32-msvc': 1.55.0 '@oxlint/binding-win32-x64-msvc': 1.55.0 - oxlint-tsgolint: 0.17.0 + oxlint-tsgolint: 0.17.1 - oxlint@1.56.0(oxlint-tsgolint@0.17.0): + oxlint@1.56.0(oxlint-tsgolint@0.17.1): optionalDependencies: '@oxlint/binding-android-arm-eabi': 1.56.0 '@oxlint/binding-android-arm64': 1.56.0 @@ -13960,7 +14116,7 @@ snapshots: '@oxlint/binding-win32-arm64-msvc': 1.56.0 '@oxlint/binding-win32-ia32-msvc': 1.56.0 '@oxlint/binding-win32-x64-msvc': 1.56.0 - oxlint-tsgolint: 0.17.0 + oxlint-tsgolint: 0.17.1 p-limit@2.3.0: dependencies: @@ -14065,8 +14221,6 @@ snapshots: picomatch@4.0.3: {} - pidtree@0.6.0: {} - pify@2.3.0: {} pirates@4.0.7: {} @@ -14738,6 +14892,27 @@ snapshots: dependencies: glob: 7.2.3 + rolldown@1.0.0-rc.10: + dependencies: + '@oxc-project/types': 0.120.0 + '@rolldown/pluginutils': 1.0.0-rc.10 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.0.0-rc.10 + '@rolldown/binding-darwin-arm64': 1.0.0-rc.10 + '@rolldown/binding-darwin-x64': 1.0.0-rc.10 + '@rolldown/binding-freebsd-x64': 1.0.0-rc.10 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.10 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.10 + '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.10 + '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.10 + '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.10 + '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.10 + '@rolldown/binding-linux-x64-musl': 1.0.0-rc.10 + '@rolldown/binding-openharmony-arm64': 1.0.0-rc.10 + '@rolldown/binding-wasm32-wasi': 1.0.0-rc.10 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.10 + '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.10 + rolldown@1.0.0-rc.9: dependencies: '@oxc-project/types': 0.115.0 @@ -14759,31 +14934,31 @@ snapshots: '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.9 '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.9 - rollup-plugin-bundle-stats@4.22.0(core-js@3.48.0)(rolldown@1.0.0-rc.9)(rollup@2.80.0)(vite@8.0.0(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)): + rollup-plugin-bundle-stats@4.22.0(core-js@3.48.0)(rolldown@1.0.0-rc.10)(rollup@2.80.0)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)): dependencies: '@bundle-stats/cli-utils': 4.22.0(core-js@3.48.0) - rollup-plugin-webpack-stats: 3.1.0(rolldown@1.0.0-rc.9)(rollup@2.80.0)(vite@8.0.0(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)) + rollup-plugin-webpack-stats: 3.1.0(rolldown@1.0.0-rc.10)(rollup@2.80.0)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)) tslib: 2.8.1 optionalDependencies: - rolldown: 1.0.0-rc.9 + rolldown: 1.0.0-rc.10 rollup: 2.80.0 - vite: 8.0.0(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2) + vite: 8.0.1(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2) transitivePeerDependencies: - core-js - rollup-plugin-stats@2.1.0(rolldown@1.0.0-rc.9)(rollup@2.80.0)(vite@8.0.0(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)): + rollup-plugin-stats@2.1.0(rolldown@1.0.0-rc.10)(rollup@2.80.0)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)): optionalDependencies: - rolldown: 1.0.0-rc.9 + rolldown: 1.0.0-rc.10 rollup: 2.80.0 - vite: 8.0.0(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2) + vite: 8.0.1(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2) - rollup-plugin-webpack-stats@3.1.0(rolldown@1.0.0-rc.9)(rollup@2.80.0)(vite@8.0.0(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)): + rollup-plugin-webpack-stats@3.1.0(rolldown@1.0.0-rc.10)(rollup@2.80.0)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)): dependencies: - rollup-plugin-stats: 2.1.0(rolldown@1.0.0-rc.9)(rollup@2.80.0)(vite@8.0.0(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)) + rollup-plugin-stats: 2.1.0(rolldown@1.0.0-rc.10)(rollup@2.80.0)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)) optionalDependencies: - rolldown: 1.0.0-rc.9 + rolldown: 1.0.0-rc.10 rollup: 2.80.0 - vite: 8.0.0(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2) + vite: 8.0.1(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2) rollup@2.80.0: optionalDependencies: @@ -15265,44 +15440,44 @@ snapshots: postcss: 8.5.8 postcss-selector-parser: 7.1.1 - stylelint-config-clean-order@8.0.1(stylelint-order@8.1.1(stylelint@17.4.0(typescript@5.9.3)))(stylelint@17.4.0(typescript@5.9.3)): + stylelint-config-clean-order@8.0.1(stylelint-order@8.1.1(stylelint@17.5.0(typescript@5.9.3)))(stylelint@17.5.0(typescript@5.9.3)): dependencies: - stylelint: 17.4.0(typescript@5.9.3) - stylelint-order: 8.1.1(stylelint@17.4.0(typescript@5.9.3)) + stylelint: 17.5.0(typescript@5.9.3) + stylelint-order: 8.1.1(stylelint@17.5.0(typescript@5.9.3)) - stylelint-config-recommended-scss@17.0.0(postcss@8.5.8)(stylelint@17.4.0(typescript@5.9.3)): + stylelint-config-recommended-scss@17.0.0(postcss@8.5.8)(stylelint@17.5.0(typescript@5.9.3)): dependencies: postcss-scss: 4.0.9(postcss@8.5.8) - stylelint: 17.4.0(typescript@5.9.3) - stylelint-config-recommended: 18.0.0(stylelint@17.4.0(typescript@5.9.3)) - stylelint-scss: 7.0.0(stylelint@17.4.0(typescript@5.9.3)) + stylelint: 17.5.0(typescript@5.9.3) + stylelint-config-recommended: 18.0.0(stylelint@17.5.0(typescript@5.9.3)) + stylelint-scss: 7.0.0(stylelint@17.5.0(typescript@5.9.3)) optionalDependencies: postcss: 8.5.8 - stylelint-config-recommended@18.0.0(stylelint@17.4.0(typescript@5.9.3)): + stylelint-config-recommended@18.0.0(stylelint@17.5.0(typescript@5.9.3)): dependencies: - stylelint: 17.4.0(typescript@5.9.3) + stylelint: 17.5.0(typescript@5.9.3) - stylelint-config-standard-scss@17.0.0(postcss@8.5.8)(stylelint@17.4.0(typescript@5.9.3)): + stylelint-config-standard-scss@17.0.0(postcss@8.5.8)(stylelint@17.5.0(typescript@5.9.3)): dependencies: - stylelint: 17.4.0(typescript@5.9.3) - stylelint-config-recommended-scss: 17.0.0(postcss@8.5.8)(stylelint@17.4.0(typescript@5.9.3)) - stylelint-config-standard: 40.0.0(stylelint@17.4.0(typescript@5.9.3)) + stylelint: 17.5.0(typescript@5.9.3) + stylelint-config-recommended-scss: 17.0.0(postcss@8.5.8)(stylelint@17.5.0(typescript@5.9.3)) + stylelint-config-standard: 40.0.0(stylelint@17.5.0(typescript@5.9.3)) optionalDependencies: postcss: 8.5.8 - stylelint-config-standard@40.0.0(stylelint@17.4.0(typescript@5.9.3)): + stylelint-config-standard@40.0.0(stylelint@17.5.0(typescript@5.9.3)): dependencies: - stylelint: 17.4.0(typescript@5.9.3) - stylelint-config-recommended: 18.0.0(stylelint@17.4.0(typescript@5.9.3)) + stylelint: 17.5.0(typescript@5.9.3) + stylelint-config-recommended: 18.0.0(stylelint@17.5.0(typescript@5.9.3)) - stylelint-order@8.1.1(stylelint@17.4.0(typescript@5.9.3)): + stylelint-order@8.1.1(stylelint@17.5.0(typescript@5.9.3)): dependencies: postcss: 8.5.8 postcss-sorting: 10.0.0(postcss@8.5.8) - stylelint: 17.4.0(typescript@5.9.3) + stylelint: 17.5.0(typescript@5.9.3) - stylelint-scss@7.0.0(stylelint@17.4.0(typescript@5.9.3)): + stylelint-scss@7.0.0(stylelint@17.5.0(typescript@5.9.3)): dependencies: css-tree: 3.1.0 is-plain-object: 5.0.0 @@ -15312,21 +15487,21 @@ snapshots: postcss-resolve-nested-selector: 0.1.6 postcss-selector-parser: 7.1.1 postcss-value-parser: 4.2.0 - stylelint: 17.4.0(typescript@5.9.3) + stylelint: 17.5.0(typescript@5.9.3) - stylelint@17.4.0(typescript@5.9.3): + stylelint@17.5.0(typescript@5.9.3): dependencies: '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-syntax-patches-for-csstree': 1.0.28 + '@csstools/css-syntax-patches-for-csstree': 1.1.1(css-tree@3.2.1) '@csstools/css-tokenizer': 4.0.0 '@csstools/media-query-list-parser': 5.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/selector-resolve-nested': 4.0.0(postcss-selector-parser@7.1.1) '@csstools/selector-specificity': 6.0.0(postcss-selector-parser@7.1.1) colord: 2.9.3 - cosmiconfig: 9.0.0(typescript@5.9.3) + cosmiconfig: 9.0.1(typescript@5.9.3) css-functions-list: 3.3.3 - css-tree: 3.1.0 + css-tree: 3.2.1 debug: 4.4.3 fast-glob: 3.3.3 fastest-levenshtein: 1.0.16 @@ -15392,7 +15567,7 @@ snapshots: dependencies: commander: 11.1.0 css-select: 5.2.2 - css-tree: 3.1.0 + css-tree: 3.2.1 css-what: 6.2.2 csso: 5.0.5 picocolors: 1.1.1 @@ -15498,16 +15673,14 @@ snapshots: tiny-inflate@1.0.3: {} - tiny-invariant@1.3.3: {} - - tiny-warning@1.0.3: {} - tinybench@2.9.0: {} tinycolor2@1.6.0: {} tinyexec@1.0.2: {} + tinyexec@1.0.4: {} + tinyglobby@0.2.15: dependencies: fdir: 6.5.0(picomatch@4.0.3) @@ -15561,7 +15734,7 @@ snapshots: type-fest@4.41.0: {} - type-fest@5.4.4: + type-fest@5.5.0: dependencies: tagged-tag: 1.0.0 @@ -15641,7 +15814,7 @@ snapshots: undici-types@7.18.2: {} - undici@7.24.3: {} + undici@7.24.5: {} unicode-canonical-property-names-ecmascript@2.0.1: {} @@ -15668,7 +15841,7 @@ snapshots: unifont@0.7.4: dependencies: - css-tree: 3.1.0 + css-tree: 3.2.1 ofetch: 1.5.1 ohash: 2.0.11 @@ -15730,7 +15903,7 @@ snapshots: chokidar: 5.0.0 destr: 2.0.5 h3: 1.15.5 - lru-cache: 11.2.6 + lru-cache: 11.2.7 node-fetch-native: 1.6.7 ofetch: 1.5.1 ufo: 1.6.3 @@ -15763,6 +15936,10 @@ snapshots: optionalDependencies: typescript: 5.9.3 + valibot@1.3.1(typescript@5.9.3): + optionalDependencies: + typescript: 5.9.3 + varint@6.0.0: {} vfile-location@5.0.3: @@ -15780,7 +15957,7 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite-plugin-compile-time@0.4.6(vite@8.0.0(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)): + vite-plugin-compile-time@0.4.6(vite@8.0.1(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)): dependencies: '@babel/generator': 7.29.1 '@babel/parser': 7.29.0 @@ -15791,7 +15968,7 @@ snapshots: devalue: 5.6.3 esbuild: 0.24.2 magic-string: 0.30.21 - vite: 8.0.0(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2) + vite: 8.0.1(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2) transitivePeerDependencies: - supports-color @@ -15814,7 +15991,26 @@ snapshots: - rollup - supports-color - vite-plugin-html@3.2.2(vite@8.0.0(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)): + vite-plugin-dts@4.5.4(@types/node@25.5.0)(rollup@4.59.0)(typescript@5.9.3)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.3)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)): + dependencies: + '@microsoft/api-extractor': 7.52.10(@types/node@25.5.0) + '@rollup/pluginutils': 5.2.0(rollup@4.59.0) + '@volar/typescript': 2.4.22 + '@vue/language-core': 2.2.0(typescript@5.9.3) + compare-versions: 6.1.1 + debug: 4.4.1 + kolorist: 1.8.0 + local-pkg: 1.1.1 + magic-string: 0.30.17 + typescript: 5.9.3 + optionalDependencies: + vite: 8.0.1(@types/node@25.5.0)(esbuild@0.27.3)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2) + transitivePeerDependencies: + - '@types/node' + - rollup + - supports-color + + vite-plugin-html@3.2.2(vite@8.0.1(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)): dependencies: '@rollup/pluginutils': 4.2.1 colorette: 2.0.20 @@ -15828,27 +16024,27 @@ snapshots: html-minifier-terser: 6.1.0 node-html-parser: 5.4.2 pathe: 0.2.0 - vite: 8.0.0(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2) + vite: 8.0.1(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2) - vite-plugin-pwa@1.2.0(vite@8.0.0(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0): + vite-plugin-pwa@1.2.0(vite@8.0.1(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0): dependencies: debug: 4.4.3 pretty-bytes: 6.1.1 tinyglobby: 0.2.15 - vite: 8.0.0(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2) + vite: 8.0.1(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2) workbox-build: 7.3.0(@types/babel__core@7.20.5) workbox-window: 7.3.0 transitivePeerDependencies: - supports-color - vite-plugin-require@1.2.14(esbuild@0.24.2)(vite@8.0.0(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)): + vite-plugin-require@1.2.14(esbuild@0.24.2)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)): dependencies: '@babel/generator': 7.29.1 '@babel/parser': 7.29.0 '@babel/traverse': 7.29.0 '@babel/types': 7.29.0 '@vue/compiler-sfc': 3.5.30 - vite: 8.0.0(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2) + vite: 8.0.1(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2) vue-loader: 17.4.2(@vue/compiler-sfc@3.5.30)(webpack@5.105.4(esbuild@0.24.2)) webpack: 5.105.4(esbuild@0.24.2) transitivePeerDependencies: @@ -15859,13 +16055,13 @@ snapshots: - vue - webpack-cli - vite-plugin-static-copy@3.3.0(vite@8.0.0(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)): + vite-plugin-static-copy@3.4.0(vite@8.0.1(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)): dependencies: chokidar: 3.6.0 p-map: 7.0.4 picocolors: 1.1.1 tinyglobby: 0.2.15 - vite: 8.0.0(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2) + vite: 8.0.1(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2) vite@6.4.1(@types/node@25.5.0)(jiti@1.21.7)(lightningcss@1.32.0)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2): dependencies: @@ -15885,24 +16081,6 @@ snapshots: terser: 5.46.0 yaml: 2.8.2 - vite@8.0.0(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2): - dependencies: - '@oxc-project/runtime': 0.115.0 - lightningcss: 1.32.0 - picomatch: 4.0.3 - postcss: 8.5.8 - rolldown: 1.0.0-rc.9 - tinyglobby: 0.2.15 - optionalDependencies: - '@types/node': 25.5.0 - esbuild: 0.24.2 - fsevents: 2.3.3 - jiti: 1.21.7 - sass: 1.98.0 - sass-embedded: 1.98.0 - terser: 5.46.0 - yaml: 2.8.2 - vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.3)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2): dependencies: '@oxc-project/runtime': 0.115.0 @@ -15921,14 +16099,48 @@ snapshots: terser: 5.46.0 yaml: 2.8.2 + vite@8.0.1(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2): + dependencies: + lightningcss: 1.32.0 + picomatch: 4.0.3 + postcss: 8.5.8 + rolldown: 1.0.0-rc.10 + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 25.5.0 + esbuild: 0.24.2 + fsevents: 2.3.3 + jiti: 1.21.7 + sass: 1.98.0 + sass-embedded: 1.98.0 + terser: 5.46.0 + yaml: 2.8.2 + + vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.3)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2): + dependencies: + lightningcss: 1.32.0 + picomatch: 4.0.3 + postcss: 8.5.8 + rolldown: 1.0.0-rc.10 + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 25.5.0 + esbuild: 0.27.3 + fsevents: 2.3.3 + jiti: 1.21.7 + sass: 1.98.0 + sass-embedded: 1.98.0 + terser: 5.46.0 + yaml: 2.8.2 + vitefu@1.1.2(vite@6.4.1(@types/node@25.5.0)(jiti@1.21.7)(lightningcss@1.32.0)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)): optionalDependencies: vite: 6.4.1(@types/node@25.5.0)(jiti@1.21.7)(lightningcss@1.32.0)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2) - vitest@4.1.0(@types/node@25.5.0)(jsdom@29.0.0)(vite@8.0.0(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)): + vitest@4.1.0(@types/node@25.5.0)(jsdom@29.0.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)): dependencies: '@vitest/expect': 4.1.0 - '@vitest/mocker': 4.1.0(vite@8.0.0(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)) + '@vitest/mocker': 4.1.0(vite@8.0.1(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)) '@vitest/pretty-format': 4.1.0 '@vitest/runner': 4.1.0 '@vitest/snapshot': 4.1.0 @@ -15945,18 +16157,18 @@ snapshots: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 8.0.0(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2) + vite: 8.0.1(@types/node@25.5.0)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 25.5.0 - jsdom: 29.0.0 + jsdom: 29.0.1 transitivePeerDependencies: - msw - vitest@4.1.0(@types/node@25.5.0)(jsdom@29.0.0)(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.3)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)): + vitest@4.1.0(@types/node@25.5.0)(jsdom@29.0.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.3)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)): dependencies: '@vitest/expect': 4.1.0 - '@vitest/mocker': 4.1.0(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.3)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)) + '@vitest/mocker': 4.1.0(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.3)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2)) '@vitest/pretty-format': 4.1.0 '@vitest/runner': 4.1.0 '@vitest/snapshot': 4.1.0 @@ -15973,11 +16185,11 @@ snapshots: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 8.0.0(@types/node@25.5.0)(esbuild@0.27.3)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2) + vite: 8.0.1(@types/node@25.5.0)(esbuild@0.27.3)(jiti@1.21.7)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.0)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 25.5.0 - jsdom: 29.0.0 + jsdom: 29.0.1 transitivePeerDependencies: - msw @@ -16248,7 +16460,7 @@ snapshots: dependencies: signal-exit: 4.1.0 - ws@8.19.0: {} + ws@8.20.0: {} xml-name-validator@5.0.0: {}