diff --git a/app/components/ProgressBar.tsx b/app/components/ProgressBar.tsx new file mode 100644 index 0000000..57fc60a --- /dev/null +++ b/app/components/ProgressBar.tsx @@ -0,0 +1,26 @@ +import { useProgressBar } from 'react-aria'; +import cn from '~/utils/cn'; + +export interface ProgressBarProps { + isVisible: boolean; +} + +export default function ProgressBar(props: ProgressBarProps) { + const { isVisible } = props; + const { progressBarProps } = useProgressBar({ + label: 'Loading...', + isIndeterminate: true, + }); + + return ( +
+ ); +} diff --git a/app/components/TableList.tsx b/app/components/TableList.tsx index 5f836d1..1f8ecf8 100644 --- a/app/components/TableList.tsx +++ b/app/components/TableList.tsx @@ -6,9 +6,8 @@ function TableList(props: HTMLProps) {
@@ -22,9 +21,8 @@ function Item(props: HTMLProps) {
diff --git a/app/components/Tabs.tsx b/app/components/Tabs.tsx new file mode 100644 index 0000000..98346fc --- /dev/null +++ b/app/components/Tabs.tsx @@ -0,0 +1,90 @@ +import { useRef } from 'react'; +import { + AriaTabListProps, + AriaTabPanelProps, + useTab, + useTabList, + useTabPanel, +} from 'react-aria'; +import { Item, Node, TabListState, useTabListState } from 'react-stately'; +import cn from '~/utils/cn'; + +export interface TabsProps extends AriaTabListProps { + label: string; + className?: string; +} + +function Tabs({ label, className, ...props }: TabsProps) { + const state = useTabListState(props); + const ref = useRef(null); + + const { tabListProps } = useTabList(props, state, ref); + return ( +
+
+ {[...state.collection].map((item) => ( + + ))} +
+ +
+ ); +} + +export interface TabsTabProps { + item: Node; + state: TabListState; +} + +function Tab({ item, state }: TabsTabProps) { + const { key, rendered } = item; + const ref = useRef(null); + + const { tabProps } = useTab({ key }, state, ref); + return ( +
+ {rendered} +
+ ); +} + +export interface TabsPanelProps extends AriaTabPanelProps { + state: TabListState; +} + +function TabsPanel({ state, ...props }: TabsPanelProps) { + const ref = useRef(null); + const { tabPanelProps } = useTabPanel(props, state, ref); + return ( +
+ {state.selectedItem?.props.children} +
+ ); +} + +export default Object.assign(Tabs, { Item }); diff --git a/app/root.tsx b/app/root.tsx index 8a0d534..c83477d 100644 --- a/app/root.tsx +++ b/app/root.tsx @@ -8,12 +8,10 @@ import { useNavigation, } from 'react-router'; import '@fontsource-variable/inter'; - -import { ProgressBar } from 'react-aria-components'; import { ErrorPopup } from '~/components/Error'; +import ProgressBar from '~/components/ProgressBar'; import ToastProvider from '~/components/ToastProvider'; import stylesheet from '~/tailwind.css?url'; -import cn from '~/utils/cn'; import { useToastQueue } from '~/utils/toast'; export const meta: MetaFunction = () => [ @@ -58,15 +56,7 @@ export default function App() { return ( <> - -
- + ); diff --git a/app/routes/acls/components/cm.client.tsx b/app/routes/acls/components/cm.client.tsx index 48841cc..ec25124 100644 --- a/app/routes/acls/components/cm.client.tsx +++ b/app/routes/acls/components/cm.client.tsx @@ -1,13 +1,11 @@ import * as shopify from '@shopify/lang-jsonc'; -import { githubDark, githubLight } from '@uiw/codemirror-theme-github'; +import { xcodeDark, xcodeLight } from '@uiw/codemirror-theme-xcode'; import CodeMirror from '@uiw/react-codemirror'; -import React, { useEffect } from 'react'; -import { useState } from 'react'; +import { BookCopy, CircleX } from 'lucide-react'; +import { useEffect, useState } from 'react'; import Merge from 'react-codemirror-merge'; import { ErrorBoundary } from 'react-error-boundary'; import { ClientOnly } from 'remix-utils/client-only'; -import cn from '~/utils/cn'; - import Fallback from './fallback'; interface EditorProps { @@ -27,39 +25,28 @@ export function Editor(props: EditorProps) { }); return ( -
-
- - Failed to load the editor. -

- } - > - }> - {() => ( - props.onChange(value)} - /> - )} - -
-
+
+ + +

Failed to load the editor.

+
+ } + > + }> + {() => ( + props.onChange(value)} + /> + )} + +
); } @@ -80,41 +67,27 @@ export function Differ(props: DifferProps) { }); return ( -
-
- {props.left === props.right ? ( -

- No changes -

- ) : ( +
+ {props.left === props.right ? ( +
+ +

No changes

+
+ ) : ( +
- Failed to load the editor. -

+
+ +

+ Failed to load the editor. +

+
} > }> {() => ( - +
- )} -
+
+ )}
); } diff --git a/app/routes/acls/editor.tsx b/app/routes/acls/editor.tsx index 03c41a5..2e2fbd3 100644 --- a/app/routes/acls/editor.tsx +++ b/app/routes/acls/editor.tsx @@ -1,29 +1,18 @@ -import { setTimeout } from 'node:timers/promises'; -import { - BeakerIcon, - EyeIcon, - IssueDraftIcon, - PencilIcon, -} from '@primer/octicons-react'; -//import { useDebounceFetcher } from 'remix-utils/use-debounce-fetcher'; +import { Construction, Eye, FlaskConical, Pencil } from 'lucide-react'; import { useEffect, useMemo, useState } from 'react'; -import { Tab, TabList, TabPanel, Tabs } from 'react-aria-components'; import type { ActionFunctionArgs, LoaderFunctionArgs } from 'react-router'; import { useFetcher, useLoaderData, useRevalidator } from 'react-router'; - import Button from '~/components/Button'; -import Code from '~/components/Code'; import Link from '~/components/Link'; import Notice from '~/components/Notice'; import Spinner from '~/components/Spinner'; -import cn from '~/utils/cn'; +import Tabs from '~/components/Tabs'; import { loadContext } from '~/utils/config/headplane'; import { loadConfig } from '~/utils/config/headscale'; import { HeadscaleError, pull, put } from '~/utils/headscale'; import log from '~/utils/log'; import { send } from '~/utils/res'; import { getSession } from '~/utils/sessions.server'; - import toast from '~/utils/toast'; import { Differ, Editor } from './components/cm.client'; import { ErrorView } from './components/error'; @@ -134,7 +123,7 @@ export async function action({ request }: ActionFunctionArgs) { } catch (error) { log.debug('APIC', 'Failed to update ACL policy with error %s', error); - // @ts-ignore: Shut UP we know it's a string most of the time + // @ts-ignore: TODO: Shut UP we know it's a string most of the time const text = JSON.parse(error.message); return send( { success: false, error: text.message }, @@ -158,7 +147,6 @@ export default function Page() { return; } - // @ts-ignore: useDebounceFetcher is not typed correctly if (fetcher.data.success) { toast('Updated tailnet ACL policy'); } else { @@ -188,7 +176,6 @@ export default function Page() { } // If we have a failed fetcher state allow the user to try again - // @ts-ignore: useDebounceFetcher is not typed correctly if (fetcher.data?.success === false) { return false; } @@ -228,88 +215,52 @@ export default function Page() { .

- { - // @ts-ignore: useDebounceFetcher is not typed correctly - fetcher.data?.success === false ? ( - // @ts-ignore: useDebounceFetcher is not typed correctly - - ) : undefined - } + {fetcher.data?.success === false ? ( + + ) : undefined} {data.read ? ( <> - - + + + Edit file +
+ } > - - cn( - 'px-4 py-2 rounded-tl-lg', - 'focus:outline-none flex items-center gap-2', - 'border-x border-gray-200 dark:border-gray-700', - isSelected ? 'text-gray-900 dark:text-gray-100' : '', - ) - } - > - -

Edit file

-
- - cn( - 'px-4 py-2', - 'focus:outline-none flex items-center gap-2', - 'border-x border-gray-200 dark:border-gray-700', - isSelected ? 'text-gray-900 dark:text-gray-100' : '', - ) - } - > - -

Preview changes

-
- - cn( - 'px-4 py-2 rounded-tr-lg', - 'focus:outline-none flex items-center gap-2', - 'border-x border-gray-200 dark:border-gray-700', - isSelected ? 'text-gray-900 dark:text-gray-100' : '', - ) - } - > - -

Preview rules

-
- - - - + + + + Preview changes +
+ } + > - - -
- + + + + Preview rules +
+ } + > +
+

- The Preview rules is very much still a work in progress. It is - a bit complicated to implement right now but hopefully it will - be available soon. + Previewing rules is not available yet. This feature is still + in development and is pretty complicated to implement. + Hopefully I will be able to get to it soon.

-
+ )} - + ); } diff --git a/app/routes/dns/components/nameservers.tsx b/app/routes/dns/components/nameservers.tsx index 084cc27..92e3a28 100644 --- a/app/routes/dns/components/nameservers.tsx +++ b/app/routes/dns/components/nameservers.tsx @@ -1,9 +1,8 @@ -import { Button } from 'react-aria-components'; import { useSubmit } from 'react-router'; +import Button from '~/components/Button'; import Link from '~/components/Link'; import TableList from '~/components/TableList'; import cn from '~/utils/cn'; - import AddNameserver from '../dialogs/nameserver'; interface Props { @@ -75,10 +74,8 @@ function NameserverList({

{ns}

- - )) - )} - -
+ + + )) + )} + 0 && - !tag.startsWith('tag:') && - 'outline outline-red-500', + (!tag.startsWith('tag:') || tags.includes(tag)) && + 'ring ring-red-500 ring-opacity-50', )} > { - setTag(e.currentTarget.value); - }} /> -
- + + ); diff --git a/package.json b/package.json index ae0e761..faea3e1 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "@types/react": "^19.0.2", "@types/react-dom": "^19.0.2", "@uiw/codemirror-theme-github": "^4.23.7", + "@uiw/codemirror-theme-xcode": "^4.23.8", "@uiw/react-codemirror": "^4.23.7", "clsx": "^2.1.1", "dotenv": "^16.4.7", @@ -33,7 +34,6 @@ "openid-client": "^6.1.7", "react": "19.0.0", "react-aria": "^3.37.0", - "react-aria-components": "^1.6.0", "react-codemirror-merge": "^4.23.7", "react-dom": "19.0.0", "react-error-boundary": "^5.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e79d5cc..1d1f743 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -55,6 +55,9 @@ importers: '@uiw/codemirror-theme-github': specifier: ^4.23.7 version: 4.23.7(@codemirror/language@6.10.8)(@codemirror/state@6.5.0)(@codemirror/view@6.36.1) + '@uiw/codemirror-theme-xcode': + specifier: ^4.23.8 + version: 4.23.8(@codemirror/language@6.10.8)(@codemirror/state@6.5.0)(@codemirror/view@6.36.1) '@uiw/react-codemirror': specifier: ^4.23.7 version: 4.23.7(@babel/runtime@7.26.0)(@codemirror/autocomplete@6.18.2(@codemirror/language@6.10.8)(@codemirror/state@6.5.0)(@codemirror/view@6.36.1)(@lezer/common@1.2.3))(@codemirror/language@6.10.8)(@codemirror/lint@6.8.2)(@codemirror/search@6.5.7)(@codemirror/state@6.5.0)(@codemirror/theme-one-dark@6.1.2)(@codemirror/view@6.36.1)(codemirror@6.0.1(@lezer/common@1.2.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) @@ -82,9 +85,6 @@ importers: react-aria: specifier: ^3.37.0 version: 3.37.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react-aria-components: - specifier: ^1.6.0 - version: 1.6.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react-codemirror-merge: specifier: ^4.23.7 version: 4.23.7(@babel/runtime@7.26.0)(@codemirror/autocomplete@6.18.2(@codemirror/language@6.10.8)(@codemirror/state@6.5.0)(@codemirror/view@6.36.1)(@lezer/common@1.2.3))(@codemirror/language@6.10.8)(@codemirror/lint@6.8.2)(@codemirror/search@6.5.7)(@codemirror/state@6.5.0)(@codemirror/theme-one-dark@6.1.2)(@codemirror/view@6.36.1)(codemirror@6.0.1(@lezer/common@1.2.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) @@ -876,12 +876,6 @@ packages: peerDependencies: react: '>=16.3' - '@react-aria/autocomplete@3.0.0-alpha.37': - resolution: {integrity: sha512-a7awFG3hshJ/kX7Qti/cJAKOG0XU5F/XW6fQffKGfEge7PmiWIvaLTrT5her79/v8v/bRBykIkpEgDCFE7WGzg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/breadcrumbs@3.5.20': resolution: {integrity: sha512-xqVSSDPpQuUFpJyIXMQv8L7zumk5CeGX7qTzo4XRvqm5T9qnNAX4XpYEMdktnLrQRY/OemCBScbx7SEwr0B3Kg==} peerDependencies: @@ -906,12 +900,6 @@ packages: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/collections@3.0.0-alpha.7': - resolution: {integrity: sha512-JR2Ro33Chlf26NM12zJsK+MOs5/k+PQallT5+4YawndYmbxqlDLADcoFdcORJqh0pKf9OnluWtANobCkQGd0aQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/color@3.0.3': resolution: {integrity: sha512-DDVma2107VHBfSuEnnmy+KJvXvxEXWSAooii2vlHHmQNb5x4rv4YTk+dP5GZl/7MgT8OgPTB9UHoC83bXFMDRA==} peerDependencies: @@ -1149,12 +1137,6 @@ packages: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/tree@3.0.0-beta.3': - resolution: {integrity: sha512-eQnCtvDgpunCHInIT+Da3qdgzDzKEFW9REX2j1vMqWTsbM1YikVlBzB9AJOd9KIAWyn+p4TYdL8zzPWxvuSdfA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/utils@3.26.0': resolution: {integrity: sha512-LkZouGSjjQ0rEqo4XJosS4L3YC/zzQkfRM3KoqK6fUOmUJ9t0jQ09WjiF+uOoG9u+p30AVg3TrZRUWmoTS+koQ==} peerDependencies: @@ -1166,12 +1148,6 @@ packages: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/virtualizer@4.1.1': - resolution: {integrity: sha512-AYQmC/S9HhxGOj8HkQdxDW8/+sUEmmfcGpjkInzXB8UZCB1FQLC0LpvA8fOP7AfzLaAL+HVcYF5BvnGMPijHTQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/visually-hidden@3.8.19': resolution: {integrity: sha512-MZgCCyQ3sdG94J5iJz7I7Ai3IxoN0U5d/+EaUnA1mfK7jf2fSYQBqi6Eyp8sWUYzBTLw4giXB5h0RGAnWzk9hA==} peerDependencies: @@ -1206,11 +1182,6 @@ packages: typescript: optional: true - '@react-stately/autocomplete@3.0.0-alpha.0': - resolution: {integrity: sha512-as4si0pBcnGnggwpvemMwCLTeV0h9GS9e5eHSR3RFg14eqUHZBEzYJ0kh9oTugpsGuf1TSM/HDizo8GQk3EtPA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-stately/calendar@3.7.0': resolution: {integrity: sha512-N15zKubP2S7eWfPSJjKVlmJA7YpWzrIGx52BFhwLSQAZcV+OPcMgvOs71WtB7PLwl6DUYQGsgc0B3tcHzzvdvQ==} peerDependencies: @@ -1269,11 +1240,6 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-stately/layout@4.1.1': - resolution: {integrity: sha512-kXeo7HKYTOcqMKru1sKFoMoZA+YywSUqHeIA90MptzRugbFhQGq4nUbIYM2p3FeHAX9HU1JAXThuLcwDOHhB8Q==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-stately/list@3.11.2': resolution: {integrity: sha512-eU2tY3aWj0SEeC7lH9AQoeAB4LL9mwS54FvTgHHoOgc1ZIwRJUaZoiuETyWQe98AL8KMgR1nrnDJ1I+CcT1Y7g==} peerDependencies: @@ -1354,17 +1320,6 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-stately/virtualizer@4.2.1': - resolution: {integrity: sha512-GHGEXV0ZRhq34U/P3LzkByCBfy2IDynYlV1SE4njkUWWGE/0AH56UegM6w2l3GeiNpXsXCgXl7jpAKeIGMEnrQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/autocomplete@3.0.0-alpha.28': - resolution: {integrity: sha512-meHxBVS5H2L7lVOX99jiAfhcvtG0s7EE7iF7X20/yqEnkwWSpyeMKcDKFpvx/bLGUSmRTVFCBLgvPpwUyhcFkg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-types/breadcrumbs@3.7.10': resolution: {integrity: sha512-5HhRxkKHfAQBoyOYzyf4HT+24HgPE/C/QerxJLNNId303LXO03yeYrbvRqhYZSlD1ACLJW9OmpPpREcw5iSqgw==} peerDependencies: @@ -1410,11 +1365,6 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-types/form@3.7.9': - resolution: {integrity: sha512-+qGDrQFdIh8umU82zmnYJ0V2rLoGSQ3yApFT02URz//NWeTA7qo0Oab2veKvXUkcBb47oSvytZYmkExPikxIEg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-types/grid@3.2.11': resolution: {integrity: sha512-Mww9nrasppvPbsBi+uUqFnf7ya8fXN0cTVzDNG+SveD8mhW+sbtuy+gPtEpnFD2Oyi8qLuObefzt4gdekJX2Yw==} peerDependencies: @@ -1660,6 +1610,9 @@ packages: '@uiw/codemirror-theme-github@4.23.7': resolution: {integrity: sha512-r9SstBZD7Ow1sQ8F0EpsRGx9b11K552M2FayvyLWTkal64YJmQMKW0S2KcWykgCMKLWhmDFi7LX+h8cg6nek8g==} + '@uiw/codemirror-theme-xcode@4.23.8': + resolution: {integrity: sha512-7Okk9Aqy1sEXXJVMUMnkbbJkPQZLyFKpHDoj74eO0RQDVzHZM1ESJpto98YxNp1atMBKf3RxmffPBflHFrEd/Q==} + '@uiw/codemirror-themes@4.23.7': resolution: {integrity: sha512-UNf1XOx1hG9OmJnrtT86PxKcdcwhaNhbrcD+nsk8WxRJ3n5c8nH6euDvgVPdVLPwbizsaQcZTILACgA/FjRpVg==} peerDependencies: @@ -1667,6 +1620,13 @@ packages: '@codemirror/state': '>=6.0.0' '@codemirror/view': '>=6.0.0' + '@uiw/codemirror-themes@4.23.8': + resolution: {integrity: sha512-PZmJBZxWMuZ48p/2D5aRPl8zTlBq1d/+NeRqyyH6P6k6yWDF6h71m0Dt+fjslgPE7KmWXux2hbejXXXoRLZO9Q==} + peerDependencies: + '@codemirror/language': '>=6.0.0' + '@codemirror/state': '>=6.0.0' + '@codemirror/view': '>=6.0.0' + '@uiw/react-codemirror@4.23.7': resolution: {integrity: sha512-Nh/0P6W+kWta+ARp9YpnKPD9ick5teEnwmtNoPQnyd6NPv0EQP3Ui4YmRVNj1nkUEo+QjrAUaEfcejJ2up/HZA==} peerDependencies: @@ -1805,9 +1765,6 @@ packages: resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} engines: {node: '>=18'} - client-only@0.0.1: - resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} - clsx@2.1.1: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} @@ -2517,12 +2474,6 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - react-aria-components@1.6.0: - resolution: {integrity: sha512-YfG9PUE7XrXtDDAqT4pLTGyYQaiHHTBFdAK/wNgGsypVnQSdzmyYlV3Ty8aHlZJI6hP9RWkbywvosXkU7KcPHg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-aria@3.37.0: resolution: {integrity: sha512-u3WUEMTcbQFaoHauHO3KhPaBYzEv1o42EdPcLAs05GBw9Q6Axlqwo73UFgMrsc2ElwLAZ4EKpSdWHLo1R5gfiw==} peerDependencies: @@ -3733,24 +3684,6 @@ snapshots: dependencies: react: 19.0.0 - '@react-aria/autocomplete@3.0.0-alpha.37(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': - dependencies: - '@react-aria/combobox': 3.11.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@react-aria/i18n': 3.12.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@react-aria/interactions': 3.23.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@react-aria/listbox': 3.14.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@react-aria/searchfield': 3.8.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@react-aria/textfield': 3.16.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@react-stately/autocomplete': 3.0.0-alpha.0(react@19.0.0) - '@react-stately/combobox': 3.10.2(react@19.0.0) - '@react-types/autocomplete': 3.0.0-alpha.28(react@19.0.0) - '@react-types/button': 3.10.2(react@19.0.0) - '@react-types/shared': 3.27.0(react@19.0.0) - '@swc/helpers': 0.5.15 - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - '@react-aria/breadcrumbs@3.5.20(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@react-aria/i18n': 3.12.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) @@ -3806,16 +3739,6 @@ snapshots: react: 19.0.0 react-dom: 19.0.0(react@19.0.0) - '@react-aria/collections@3.0.0-alpha.7(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': - dependencies: - '@react-aria/ssr': 3.9.7(react@19.0.0) - '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@react-types/shared': 3.27.0(react@19.0.0) - '@swc/helpers': 0.5.15 - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - use-sync-external-store: 1.4.0(react@19.0.0) - '@react-aria/color@3.0.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@react-aria/i18n': 3.12.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) @@ -4342,19 +4265,6 @@ snapshots: react: 19.0.0 react-dom: 19.0.0(react@19.0.0) - '@react-aria/tree@3.0.0-beta.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': - dependencies: - '@react-aria/gridlist': 3.10.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@react-aria/i18n': 3.12.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@react-aria/selection': 3.22.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@react-stately/tree': 3.8.7(react@19.0.0) - '@react-types/button': 3.10.2(react@19.0.0) - '@react-types/shared': 3.27.0(react@19.0.0) - '@swc/helpers': 0.5.15 - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - '@react-aria/utils@3.26.0(react@19.0.0)': dependencies: '@react-aria/ssr': 3.9.7(react@19.0.0) @@ -4374,17 +4284,6 @@ snapshots: react: 19.0.0 react-dom: 19.0.0(react@19.0.0) - '@react-aria/virtualizer@4.1.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': - dependencies: - '@react-aria/i18n': 3.12.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@react-aria/interactions': 3.23.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@react-stately/virtualizer': 4.2.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@react-types/shared': 3.27.0(react@19.0.0) - '@swc/helpers': 0.5.15 - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - '@react-aria/visually-hidden@3.8.19(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@react-aria/interactions': 3.23.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) @@ -4455,12 +4354,6 @@ snapshots: optionalDependencies: typescript: 5.7.2 - '@react-stately/autocomplete@3.0.0-alpha.0(react@19.0.0)': - dependencies: - '@react-stately/utils': 3.10.5(react@19.0.0) - '@swc/helpers': 0.5.15 - react: 19.0.0 - '@react-stately/calendar@3.7.0(react@19.0.0)': dependencies: '@internationalized/date': 3.7.0 @@ -4562,19 +4455,6 @@ snapshots: '@swc/helpers': 0.5.15 react: 19.0.0 - '@react-stately/layout@4.1.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': - dependencies: - '@react-stately/collections': 3.12.1(react@19.0.0) - '@react-stately/table': 3.13.1(react@19.0.0) - '@react-stately/virtualizer': 4.2.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@react-types/grid': 3.2.11(react@19.0.0) - '@react-types/shared': 3.27.0(react@19.0.0) - '@react-types/table': 3.10.4(react@19.0.0) - '@swc/helpers': 0.5.15 - react: 19.0.0 - transitivePeerDependencies: - - react-dom - '@react-stately/list@3.11.2(react@19.0.0)': dependencies: '@react-stately/collections': 3.12.1(react@19.0.0) @@ -4706,21 +4586,6 @@ snapshots: '@swc/helpers': 0.5.15 react: 19.0.0 - '@react-stately/virtualizer@4.2.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': - dependencies: - '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@react-types/shared': 3.27.0(react@19.0.0) - '@swc/helpers': 0.5.15 - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - - '@react-types/autocomplete@3.0.0-alpha.28(react@19.0.0)': - dependencies: - '@react-types/combobox': 3.13.2(react@19.0.0) - '@react-types/searchfield': 3.5.11(react@19.0.0) - '@react-types/shared': 3.27.0(react@19.0.0) - react: 19.0.0 - '@react-types/breadcrumbs@3.7.10(react@19.0.0)': dependencies: '@react-types/link': 3.5.10(react@19.0.0) @@ -4773,11 +4638,6 @@ snapshots: '@react-types/shared': 3.27.0(react@19.0.0) react: 19.0.0 - '@react-types/form@3.7.9(react@19.0.0)': - dependencies: - '@react-types/shared': 3.27.0(react@19.0.0) - react: 19.0.0 - '@react-types/grid@3.2.11(react@19.0.0)': dependencies: '@react-types/shared': 3.27.0(react@19.0.0) @@ -4996,12 +4856,26 @@ snapshots: - '@codemirror/state' - '@codemirror/view' + '@uiw/codemirror-theme-xcode@4.23.8(@codemirror/language@6.10.8)(@codemirror/state@6.5.0)(@codemirror/view@6.36.1)': + dependencies: + '@uiw/codemirror-themes': 4.23.8(@codemirror/language@6.10.8)(@codemirror/state@6.5.0)(@codemirror/view@6.36.1) + transitivePeerDependencies: + - '@codemirror/language' + - '@codemirror/state' + - '@codemirror/view' + '@uiw/codemirror-themes@4.23.7(@codemirror/language@6.10.8)(@codemirror/state@6.5.0)(@codemirror/view@6.36.1)': dependencies: '@codemirror/language': 6.10.8 '@codemirror/state': 6.5.0 '@codemirror/view': 6.36.1 + '@uiw/codemirror-themes@4.23.8(@codemirror/language@6.10.8)(@codemirror/state@6.5.0)(@codemirror/view@6.36.1)': + dependencies: + '@codemirror/language': 6.10.8 + '@codemirror/state': 6.5.0 + '@codemirror/view': 6.36.1 + '@uiw/react-codemirror@4.23.7(@babel/runtime@7.26.0)(@codemirror/autocomplete@6.18.2(@codemirror/language@6.10.8)(@codemirror/state@6.5.0)(@codemirror/view@6.36.1)(@lezer/common@1.2.3))(@codemirror/language@6.10.8)(@codemirror/lint@6.8.2)(@codemirror/search@6.5.7)(@codemirror/state@6.5.0)(@codemirror/theme-one-dark@6.1.2)(@codemirror/view@6.36.1)(codemirror@6.0.1(@lezer/common@1.2.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@babel/runtime': 7.26.0 @@ -5144,8 +5018,6 @@ snapshots: chownr@3.0.0: {} - client-only@0.0.1: {} - clsx@2.1.1: {} codemirror@6.0.1(@lezer/common@1.2.3): @@ -5792,45 +5664,6 @@ snapshots: queue-microtask@1.2.3: {} - react-aria-components@1.6.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - '@internationalized/date': 3.7.0 - '@internationalized/string': 3.2.5 - '@react-aria/autocomplete': 3.0.0-alpha.37(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@react-aria/collections': 3.0.0-alpha.7(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@react-aria/color': 3.0.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@react-aria/disclosure': 3.0.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@react-aria/dnd': 3.8.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@react-aria/focus': 3.19.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@react-aria/interactions': 3.23.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@react-aria/live-announcer': 3.4.1 - '@react-aria/menu': 3.17.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@react-aria/toolbar': 3.0.0-beta.12(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@react-aria/tree': 3.0.0-beta.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@react-aria/virtualizer': 4.1.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@react-stately/autocomplete': 3.0.0-alpha.0(react@19.0.0) - '@react-stately/color': 3.8.2(react@19.0.0) - '@react-stately/disclosure': 3.0.1(react@19.0.0) - '@react-stately/layout': 4.1.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@react-stately/menu': 3.9.1(react@19.0.0) - '@react-stately/selection': 3.19.0(react@19.0.0) - '@react-stately/table': 3.13.1(react@19.0.0) - '@react-stately/utils': 3.10.5(react@19.0.0) - '@react-stately/virtualizer': 4.2.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@react-types/color': 3.0.2(react@19.0.0) - '@react-types/form': 3.7.9(react@19.0.0) - '@react-types/grid': 3.2.11(react@19.0.0) - '@react-types/shared': 3.27.0(react@19.0.0) - '@react-types/table': 3.10.4(react@19.0.0) - '@swc/helpers': 0.5.15 - client-only: 0.0.1 - react: 19.0.0 - react-aria: 3.37.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react-dom: 19.0.0(react@19.0.0) - react-stately: 3.35.0(react@19.0.0) - use-sync-external-store: 1.4.0(react@19.0.0) - react-aria@3.37.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: '@internationalized/string': 3.2.5