diff --git a/packages/web/package.json b/packages/web/package.json index 8b7027c..684533e 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -46,6 +46,7 @@ "preview": "vite preview" }, "dependencies": { + "@kobalte/core": "^0.13.13", "@solidjs/meta": "^0.29.4", "@solidjs/router": "^1.0.0", "@solidjs/start": "^2.0.0", diff --git a/packages/web/src/app.css b/packages/web/src/app.css deleted file mode 100644 index b646702..0000000 --- a/packages/web/src/app.css +++ /dev/null @@ -1,348 +0,0 @@ -/* -DrFed: A web-based platform for developing and debugging ActivityPub apps -Copyright (C) 2026 DrFed team - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU Affero General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Affero General Public License for more details. - -You should have received a copy of the GNU Affero General Public License -along with this program. If not, see . -*/ - -* { - box-sizing: border-box; -} - -html { - background: var(--bg); - color: var(--ink); - font-family: var(--font-sans); - font-size: var(--text-body); -} - -body { - margin: 0; -} - -button, -input { - font: inherit; -} - -.app-shell { - min-height: 100svh; -} - -.app-header { - background: color-mix(in srgb, var(--bg) 92%, transparent); - border-bottom: 1px solid var(--line); - position: sticky; - top: 0; - z-index: 10; -} - -.app-header-inner { - align-items: center; - display: flex; - height: var(--header-h); - margin: 0 auto; - max-width: var(--container); - padding: 0 var(--gutter); -} - -.brand { - align-items: center; - color: var(--ink); - display: flex; - font-family: var(--font-serif); - font-size: 1.25rem; - font-weight: 700; - gap: 0.65rem; - letter-spacing: var(--tracking-heading); - text-decoration: none; -} - -.brand img { - border-radius: 50%; -} - -.app-nav { - align-self: stretch; - display: flex; - gap: 0.25rem; - margin-left: clamp(1.5rem, 5vw, 4rem); -} - -.app-nav a, -.header-action { - align-items: center; - color: var(--ink-soft); - display: flex; - font-size: 0.9rem; - font-weight: 600; - padding: 0 0.85rem; - position: relative; - text-decoration: none; -} - -.app-nav a:hover, -.header-action:hover, -.app-nav a.is-active, -.header-action.is-active { - color: var(--ink); -} - -.app-nav a.is-active::after { - background: var(--accent); - bottom: -1px; - content: ""; - height: 3px; - left: 0.85rem; - position: absolute; - right: 0.85rem; -} - -.header-action { - border: 1px solid var(--line-strong); - border-radius: var(--radius-pill); - margin-left: auto; - min-height: 2.4rem; -} - -.header-action.is-active { - background: var(--accent-tint); - border-color: var(--accent-soft); -} - -.app-header a:focus-visible { - outline: 3px solid var(--accent-soft); - outline-offset: 0.2rem; -} - -.app-content { - margin: 0 auto; - max-width: var(--container); - min-height: calc(100svh - var(--header-h)); - padding: clamp(2rem, 5vw, 4rem) var(--gutter); -} - -.app-content > main:not(.form-page) { - width: 100%; -} - -.app-content > main:not(.form-page) :is(h1, h2, p) { - margin-top: 0; -} - -.app-content h1, -.app-content h2 { - font-family: var(--font-serif); - letter-spacing: var(--tracking-heading); -} - -.app-content h1 { - font-size: var(--text-heading-2); - line-height: var(--leading-heading); -} - -.app-content p { - color: var(--ink-soft); - line-height: var(--leading-body); -} - -.form-page { - align-items: center; - display: flex; - justify-content: center; - min-height: calc(100svh - var(--header-h) - clamp(4rem, 10vw, 8rem)); -} - -.panel { - background: var(--card); - border: 1px solid var(--line); - border-radius: var(--radius); - box-shadow: var(--shadow-sm); -} - -.form-panel { - max-width: 28rem; - padding: clamp(1.5rem, 4vw, 2rem); - width: 100%; -} - -.panel-header { - border-bottom: 1px solid var(--line); - margin: 0 calc(clamp(1.5rem, 4vw, 2rem) * -1) 1.5rem; - padding: 0 clamp(1.5rem, 4vw, 2rem) 1.5rem; -} - -.panel-header h1 { - font-size: 1.65rem; - margin: 0 0 0.5rem; -} - -.panel-header p { - font-size: 0.95rem; - margin: 0; -} - -.form-panel form { - display: grid; - gap: 1rem; -} - -.field { - display: grid; - gap: 0.5rem; -} - -.field-heading { - align-items: baseline; - display: flex; - font-size: 0.9rem; - font-weight: 650; - justify-content: space-between; -} - -.field-status { - color: var(--ink-faint); - font-family: var(--font-mono); - font-size: 0.68rem; - font-weight: 500; - letter-spacing: 0.04em; - text-transform: uppercase; -} - -.field-status.required { - color: var(--accent-strong); -} - -.field input { - background: var(--surface-2); - border: 1px solid var(--line-strong); - border-radius: var(--radius-sm); - color: var(--ink); - min-width: 0; - padding: 0.9rem 1rem; - transition: - border-color var(--duration-fast) var(--ease-standard), - box-shadow var(--duration-fast) var(--ease-standard); -} - -.field input::placeholder { - color: var(--ink-faint); -} - -.field input:focus { - border-color: var(--accent); - box-shadow: 0 0 0 3px var(--accent-tint); - outline: none; -} - -.field input:read-only { - border-style: dashed; - color: var(--ink-soft); - cursor: default; - font-family: var(--font-mono); -} - -.field-hint { - color: var(--ink-faint); - font-size: 0.78rem; - line-height: 1.45; - margin: 0; -} - -.button { - align-items: center; - border: 0; - border-radius: var(--radius-sm); - cursor: pointer; - display: inline-flex; - font-weight: 700; - justify-content: center; - min-height: 2.9rem; - padding: 0.75rem 1.1rem; -} - -.button:focus-visible { - outline: 3px solid var(--accent-soft); - outline-offset: 0.2rem; -} - -.button.primary { - background: var(--accent); - color: var(--on-accent); - transition: - background var(--duration-fast) var(--ease-standard), - transform var(--duration-fast) var(--ease-standard); -} - -.button.primary:hover:not(:disabled) { - background: var(--accent-strong); -} - -.button:disabled { - cursor: wait; - opacity: 0.65; -} - -.notice { - background: var(--accent-tint); - border-radius: var(--radius-sm); - color: var(--ink); - line-height: 1.5; - margin: 1.25rem 0 0; - padding: 0.85rem 1rem; -} - -.notice.error { - border-left: 3px solid var(--danger); -} - -@media (max-width: 600px) { - .app-header-inner { - padding: 0 1rem; - } - - .brand span { - display: none; - } - - .app-nav { - margin-left: 0.75rem; - } - - .app-nav a, - .header-action { - padding-inline: 0.65rem; - } - - .app-nav a.is-active::after { - left: 0.65rem; - right: 0.65rem; - } - - .app-content { - padding: 1.5rem 1rem 3rem; - } - - .form-page { - align-items: flex-start; - min-height: auto; - } -} - -@media (prefers-reduced-motion: reduce) { - .button.primary, - .field input { - transition: none; - } -} diff --git a/packages/web/src/app.tsx b/packages/web/src/app.tsx index 77c1c66..0dd0bbf 100644 --- a/packages/web/src/app.tsx +++ b/packages/web/src/app.tsx @@ -19,12 +19,14 @@ import { A, Router } from "@solidjs/router"; import { FileRoutes } from "@solidjs/start/router"; import { Suspense } from "solid-js"; -import "./drfed.css"; -import "./app.css"; +import "./styles/drfed.css"; +import "./styles/app.css"; import { RelayEnvironmentProvider } from "solid-relay"; import { createRelayEnvironment } from "./RelayEnvironment.ts"; +import styles from "./styles/app.module.css"; + export default function App() { const environment = createRelayEnvironment(); @@ -34,31 +36,34 @@ export default function App() { root={(props) => ( DrFed -
-
-
- +
+
+
-
+
{props.children}
diff --git a/packages/web/src/components/InstanceSummary.tsx b/packages/web/src/components/InstanceSummary.tsx new file mode 100644 index 0000000..6667096 --- /dev/null +++ b/packages/web/src/components/InstanceSummary.tsx @@ -0,0 +1,42 @@ +// DrFed: A web-based platform for developing and debugging ActivityPub apps +// Copyright (C) 2026 DrFed team +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +import { Link } from "@kobalte/core/link"; +import { graphql } from "relay-runtime"; +import { createFragment } from "solid-relay"; + +import type { InstanceSummary_instance$key } from "./__generated__/InstanceSummary_instance.graphql.tsx"; + +export default function InstanceSummary(props: { + $instance: InstanceSummary_instance$key; +}) { + const data = createFragment( + graphql` + fragment InstanceSummary_instance on Instance { + id + host + } + `, + () => props.$instance, + ); + + return ( +

+ {data()?.host} + Create Actors +

+ ); +} diff --git a/packages/web/src/routes/sign-in.tsx b/packages/web/src/routes/sign-in.tsx index 83f5bb6..8190302 100644 --- a/packages/web/src/routes/sign-in.tsx +++ b/packages/web/src/routes/sign-in.tsx @@ -14,14 +14,17 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . +import { Alert } from "@kobalte/core/alert"; +import { Button } from "@kobalte/core/button"; +import { TextField } from "@kobalte/core/text-field"; import { Title } from "@solidjs/meta"; import { graphql } from "relay-runtime"; -import { Show, createSignal } from "solid-js"; +import { Match, Show, Switch, createSignal } from "solid-js"; import { createMutation } from "solid-relay"; import type { SignInMutation } from "./__generated__/SignInMutation.graphql.ts"; -import "./sign-in.css"; +import styles from "~/styles/form.module.css"; const signInMutation = graphql` mutation SignInMutation($email: Email!, $verifyUrl: URITemplate) { @@ -84,34 +87,32 @@ export default function SignInPage() { }; return ( -
+
Sign in — DrFed -
-
+
+

Sign in

Enter your email address to receive a secure sign-in link.

-
- - +
{(formResult) => ( -

- {formResult().message} -

+ + + + {formResult().message} + + + + + + {formResult().message} + + + )}
diff --git a/packages/web/src/routes/workspace/create/[instance_id]/actors.tsx b/packages/web/src/routes/workspace/create/[instance_id]/actors.tsx new file mode 100644 index 0000000..5483a43 --- /dev/null +++ b/packages/web/src/routes/workspace/create/[instance_id]/actors.tsx @@ -0,0 +1,95 @@ +// DrFed: A web-based platform for developing and debugging ActivityPub apps +// Copyright (C) 2026 DrFed team +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +import { Button } from "@kobalte/core/button"; +import { NumberField } from "@kobalte/core/number-field"; +import { Title } from "@solidjs/meta"; +import { + type RouteDefinition, + type RouteSectionProps, + query, +} from "@solidjs/router"; +import { graphql } from "relay-runtime"; +import { + createPreloadedQuery, + loadQuery, + useRelayEnvironment, +} from "solid-relay"; + +import type { GetHostQuery } from "./__generated__/GetHostQuery.graphql.tsx"; + +import styles from "~/styles/form.module.css"; + +const getHostQuery = graphql` + query GetHostQuery($instanceId: ID!) { + instance: node(id: $instanceId) { + ... on Instance { + host + } + } + } +`; + +const loadInstanceQuery = query( + (instanceId: string) => + loadQuery(useRelayEnvironment()(), getHostQuery, { + instanceId, + }), + "GetHostQuery", +); + +export const route = { + preload({ params }) { + if (params.instance_id === undefined) { + throw new Error("Missing instance_id route parameter."); + } + return loadInstanceQuery(params.instance_id); + }, +} satisfies RouteDefinition; + +type RouteData = ReturnType; + +export default function CreateActorsPage(props: RouteSectionProps) { + const data = createPreloadedQuery( + getHostQuery, + () => props.data, + ); + + return ( +
+ Create Actors +
+
+

Create Actors

+

Selected Instance: {data()?.instance?.host}

+
+
+ + The Number of Actors + + + DrFed generates actors in {data()?.instance?.host}. + + + + +
+
+
+ ); +} diff --git a/packages/web/src/routes/workspace/create/instance.tsx b/packages/web/src/routes/workspace/create/instance.tsx index cae4448..7063487 100644 --- a/packages/web/src/routes/workspace/create/instance.tsx +++ b/packages/web/src/routes/workspace/create/instance.tsx @@ -15,6 +15,8 @@ // along with this program. If not, see . import { faker } from "@faker-js/faker"; +import { Button } from "@kobalte/core/button"; +import { TextField } from "@kobalte/core/text-field"; import { Title } from "@solidjs/meta"; import { useNavigate } from "@solidjs/router"; import { graphql } from "relay-runtime"; @@ -23,6 +25,8 @@ import { createMutation } from "solid-relay"; import type { CreateInstanceMutation } from "./__generated__/CreateInstanceMutation.graphql.ts"; +import styles from "~/styles/form.module.css"; + const createInstanceMutation = graphql` mutation CreateInstanceMutation($slug: String!) { createInstance(slug: $slug) { @@ -97,47 +101,46 @@ export default function CreateInstancePage() { }; return ( -
+
Create an instance — DrFed -
-
+
+

Create an instance

Review the generated identifier for your new instance.

-
- - +
- diff --git a/packages/web/src/routes/workspace/index.tsx b/packages/web/src/routes/workspace/index.tsx index 9dc94b3..a293530 100644 --- a/packages/web/src/routes/workspace/index.tsx +++ b/packages/web/src/routes/workspace/index.tsx @@ -16,10 +16,11 @@ import { graphql } from "relay-runtime"; import { For, Show } from "solid-js"; -import { createFragment, createLazyLoadQuery } from "solid-relay"; +import { createLazyLoadQuery } from "solid-relay"; -import type { InstanceSummary_instance$key } from "./__generated__/InstanceSummary_instance.graphql.ts"; -import type { WorkspaceQuery } from "./__generated__/WorkspaceQuery.graphql.ts"; +import InstanceSummary from "~/components/InstanceSummary.tsx"; + +import type { WorkspaceQuery } from "./__generated__/WorkspaceQuery.graphql.tsx"; const workspaceQuery = graphql` query WorkspaceQuery { @@ -35,20 +36,6 @@ const workspaceQuery = graphql` } `; -function InstanceSummary(props: { $instance: InstanceSummary_instance$key }) { - const data = createFragment( - graphql` - fragment InstanceSummary_instance on Instance { - id - host - } - `, - () => props.$instance, - ); - - return

{data()?.host}

; -} - export default function WorkspacePage() { const query = createLazyLoadQuery( workspaceQuery, diff --git a/packages/web/src/routes/sign-in.css b/packages/web/src/styles/app.css similarity index 60% rename from packages/web/src/routes/sign-in.css rename to packages/web/src/styles/app.css index e9e9be1..925cf57 100644 --- a/packages/web/src/routes/sign-in.css +++ b/packages/web/src/styles/app.css @@ -16,6 +16,40 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ -.auth-panel .notice.success { - border-left: 3px solid var(--accent); +* { + box-sizing: border-box; +} + +html { + background: var(--bg); + color: var(--ink); + font-family: var(--font-sans); + font-size: var(--text-body); +} + +body { + margin: 0; +} + +button, +input { + font: inherit; +} + +h1, +h2 { + font-family: var(--font-serif); + letter-spacing: var(--tracking-heading); + margin-top: 0; +} + +h1 { + font-size: var(--text-heading-2); + line-height: var(--leading-heading); +} + +p { + color: var(--ink-soft); + line-height: var(--leading-body); + margin-top: 0; } diff --git a/packages/web/src/styles/app.module.css b/packages/web/src/styles/app.module.css new file mode 100644 index 0000000..1a7d69a --- /dev/null +++ b/packages/web/src/styles/app.module.css @@ -0,0 +1,142 @@ +/* +DrFed: A web-based platform for developing and debugging ActivityPub apps +Copyright (C) 2026 DrFed team + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ + +.shell { + min-height: 100svh; +} + +.header { + background: color-mix(in srgb, var(--bg) 92%, transparent); + border-bottom: 1px solid var(--line); + position: sticky; + top: 0; + z-index: 10; +} + +.headerInner { + align-items: center; + display: flex; + height: var(--header-h); + margin: 0 auto; + max-width: var(--container); + padding: 0 var(--gutter); +} + +.brand { + align-items: center; + color: var(--ink); + display: flex; + font-family: var(--font-serif); + font-size: 1.25rem; + font-weight: 700; + gap: 0.65rem; + letter-spacing: var(--tracking-heading); + text-decoration: none; +} + +.brand img { + border-radius: 50%; +} + +.navigation { + align-self: stretch; + display: flex; + gap: 0.25rem; + margin-left: clamp(1.5rem, 5vw, 4rem); +} + +.navigation a, +.headerAction { + align-items: center; + color: var(--ink-soft); + display: flex; + font-size: 0.9rem; + font-weight: 600; + padding: 0 0.85rem; + position: relative; + text-decoration: none; +} + +.navigation a:hover, +.headerAction:hover, +.navigation a.active, +.headerAction.active { + color: var(--ink); +} + +.navigation a.active::after { + background: var(--accent); + bottom: -1px; + content: ""; + height: 3px; + left: 0.85rem; + position: absolute; + right: 0.85rem; +} + +.headerAction { + border: 1px solid var(--line-strong); + border-radius: var(--radius-pill); + margin-left: auto; + min-height: 2.4rem; +} + +.headerAction.active { + background: var(--accent-tint); + border-color: var(--accent-soft); +} + +.header a:focus-visible { + outline: 3px solid var(--accent-soft); + outline-offset: 0.2rem; +} + +.content { + margin: 0 auto; + max-width: var(--container); + min-height: calc(100svh - var(--header-h)); + padding: clamp(2rem, 5vw, 4rem) var(--gutter); +} + +@media (max-width: 600px) { + .headerInner { + padding: 0 1rem; + } + + .brand span { + display: none; + } + + .navigation { + margin-left: 0.75rem; + } + + .navigation a, + .headerAction { + padding-inline: 0.65rem; + } + + .navigation a.active::after { + left: 0.65rem; + right: 0.65rem; + } + + .content { + padding: 1.5rem 1rem 3rem; + } +} diff --git a/packages/web/src/drfed.css b/packages/web/src/styles/drfed.css similarity index 100% rename from packages/web/src/drfed.css rename to packages/web/src/styles/drfed.css diff --git a/packages/web/src/styles/form.module.css b/packages/web/src/styles/form.module.css new file mode 100644 index 0000000..8217954 --- /dev/null +++ b/packages/web/src/styles/form.module.css @@ -0,0 +1,178 @@ +/* +DrFed: A web-based platform for developing and debugging ActivityPub apps +Copyright (C) 2026 DrFed team + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ + +.page { + align-items: center; + display: flex; + justify-content: center; + min-height: calc(100svh - var(--header-h) - clamp(4rem, 10vw, 8rem)); +} + +.panel { + background: var(--card); + border: 1px solid var(--line); + border-radius: var(--radius); + box-shadow: var(--shadow-sm); + max-width: 28rem; + padding: clamp(1.5rem, 4vw, 2rem); + width: 100%; +} + +.header { + border-bottom: 1px solid var(--line); + margin: 0 calc(clamp(1.5rem, 4vw, 2rem) * -1) 1.5rem; + padding: 0 clamp(1.5rem, 4vw, 2rem) 1.5rem; +} + +.header h1 { + font-size: 1.65rem; + margin: 0 0 0.5rem; +} + +.header p { + font-size: 0.95rem; + margin: 0; +} + +.form { + display: grid; + gap: 1rem; +} + +.field { + display: grid; + gap: 0.5rem; +} + +.fieldHeading { + align-items: baseline; + display: flex; + font-size: 0.9rem; + font-weight: 650; + justify-content: space-between; +} + +.fieldStatus { + color: var(--ink-faint); + font-family: var(--font-mono); + font-size: 0.68rem; + font-weight: 500; + letter-spacing: 0.04em; + text-transform: uppercase; +} + +.required { + color: var(--accent-strong); +} + +.input { + background: var(--surface-2); + border: 1px solid var(--line-strong); + border-radius: var(--radius-sm); + color: var(--ink); + min-width: 0; + padding: 0.9rem 1rem; + transition: + border-color var(--duration-fast) var(--ease-standard), + box-shadow var(--duration-fast) var(--ease-standard); +} + +.input::placeholder { + color: var(--ink-faint); +} + +.input:focus { + border-color: var(--accent); + box-shadow: 0 0 0 3px var(--accent-tint); + outline: none; +} + +.input:read-only { + border-style: dashed; + color: var(--ink-soft); + cursor: default; + font-family: var(--font-mono); +} + +.hint { + color: var(--ink-faint); + font-size: 0.78rem; + line-height: 1.45; + margin: 0; +} + +.button { + align-items: center; + background: var(--accent); + border: 0; + border-radius: var(--radius-sm); + color: var(--on-accent); + cursor: pointer; + display: inline-flex; + font-weight: 700; + justify-content: center; + min-height: 2.9rem; + padding: 0.75rem 1.1rem; + transition: background var(--duration-fast) var(--ease-standard); +} + +.button:focus-visible { + outline: 3px solid var(--accent-soft); + outline-offset: 0.2rem; +} + +.button:hover:not(:disabled) { + background: var(--accent-strong); +} + +.button:disabled { + cursor: wait; + opacity: 0.65; +} + +.notice { + background: var(--accent-tint); + border-radius: var(--radius-sm); + color: var(--ink); + line-height: 1.5; + margin: 1.25rem 0 0; + padding: 0.85rem 1rem; + display: block; +} + +.error { + border-left: 3px solid var(--danger); +} + +.success { + border-left: 3px solid var(--accent); +} + +@media (max-width: 600px) { + .page { + align-items: flex-start; + min-height: auto; + } +} + +@media (prefers-reduced-motion: reduce) { + .button, + .input { + transition: none; + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 64e8ac7..cbc7c8e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -242,6 +242,9 @@ importers: packages/web: dependencies: + '@kobalte/core': + specifier: ^0.13.13 + version: 0.13.13(solid-js@1.9.14) '@solidjs/meta': specifier: ^0.29.4 version: 0.29.4(solid-js@1.9.14) @@ -384,6 +387,11 @@ packages: resolution: {integrity: sha512-y7/yvZ2TPAnR9+jnc00klvNNLkJiXFFrQA/hlLCcxA9a2A4zQIOimyFQ9XfwYKiGD1fb5GY8vbKIIgO8d5Tb2A==} engines: {node: '>= 20.12.0'} + '@corvu/utils@0.4.2': + resolution: {integrity: sha512-Ox2kYyxy7NoXdKWdHeDEjZxClwzO4SKM8plAaVwmAJPxHMqA0rLOoAsa+hBDwRLpctf+ZRnAd/ykguuJidnaTA==} + peerDependencies: + solid-js: ^1.8 + '@drizzle-team/brocli@0.11.0': resolution: {integrity: sha512-hD3pekGiPg0WPCCGAZmusBBJsDqGUR66Y452YgQsZOnkdQ7ViEPKuyP4huUGEZQefp8g34RRodXYmJ2TbCH+tg==} @@ -781,6 +789,15 @@ packages: resolution: {integrity: sha512-322xch1WhasP/vjH4yDPA1RnYwI6tlG72aH7fCpdFge8IC845urKEMET9LzJ2G5HfeCKAXPAcaZZEx9FXnTNrg==} engines: {bun: '>=1.1.0', deno: '>=2.0.0', node: '>=22.0.0'} + '@floating-ui/core@1.8.0': + resolution: {integrity: sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==} + + '@floating-ui/dom@1.8.0': + resolution: {integrity: sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg==} + + '@floating-ui/utils@0.2.12': + resolution: {integrity: sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==} + '@graphql-tools/executor@1.5.3': resolution: {integrity: sha512-mgBFC0bsrZPZLu9EnydpMnAuQ8Iiq0CEbUcsmvXsm2/iYektGHDN/+bmb7hicA6dWZtdPfklYJmr21WD0GnOfA==} engines: {node: '>=16.0.0'} @@ -848,6 +865,9 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} + '@internationalized/number@3.6.7': + resolution: {integrity: sha512-3ji1fcrT+FPAK86UqEhB/psHixYo6niWPJtt7+qRaYFynt/BaJG8GhAPimtWUpEiVSTq8ZM8L5psMxGquiB/Vg==} + '@ioredis/commands@1.10.0': resolution: {integrity: sha512-UmeW7z4LfctwoQ5wkhVzgq8tXkreED2xZGpX+Bg+zA+WJFZCT6c062AfCK/Dfk81xZnnwdhJCUMkitihRaoC2Q==} @@ -874,6 +894,16 @@ packages: resolution: {integrity: sha512-hloP58zRVCRSpgDxmqCWJNlizAlUgJFqG2ypq79DCvyv9tHjRYMDOcPFjzfl/A1/YxDvRCZz8wvZvmapQnKwFQ==} engines: {node: '>=12'} + '@kobalte/core@0.13.13': + resolution: {integrity: sha512-czBC+IQdOgJoW7DJjeh0rht7SPmTPgWsKg7Jo3RHMfwx028WxJtDylx9dJuJuD/GUae15+E4nYafu8LwuixFYQ==} + peerDependencies: + solid-js: ^1.9.8 + + '@kobalte/utils@0.9.2': + resolution: {integrity: sha512-jRVXr+zsVHxzDXRoh+CDeXzvCsFJ6uiHhqqNQ26Cw9ZsZ3D6nqPUBt1gGVtj2ZPmRL3a9Uk1v8D1aJ8/I12Dow==} + peerDependencies: + solid-js: ^1.8.8 + '@logtape/drizzle-orm@2.2.2': resolution: {integrity: sha512-Z/TrI5BbOCSJPmoyogy9RERtAxs/hlyI+e/uay1PSY68/ZddPqfudbS6MGgFylAiACprJ0d0zEiGeysUQUcQ2A==} peerDependencies: @@ -1501,6 +1531,61 @@ packages: '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + '@solid-primitives/event-listener@2.4.6': + resolution: {integrity: sha512-5I0YJcTVYIWoMmgBSROBZGcz+ymhew/pGTg2dHW74BUjFKsV8Li4bOZYl0YAGP4mHw5o4UBd9/BEesqBci3wxw==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/keyed@1.5.3': + resolution: {integrity: sha512-zNadtyYBhJSOjXtogkGHmRxjGdz9KHc8sGGVAGlUABkE8BED2tbIZoxkwSqzOwde8OcUEH0bb5DLZUWIMvyBSA==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/map@0.4.13': + resolution: {integrity: sha512-B1zyFbsiTQvqPr+cuPCXO72sRuczG9Swncqk5P74NCGw1VE8qa/Ry9GlfI1e/VdeQYHjan+XkbE3rO2GW/qKew==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/media@2.3.6': + resolution: {integrity: sha512-pk49gPOq/UMRUJ+pTSrOfBiR8xJjRYHXIf1iR/jSnyQ/KroU+ZXhkZzavC7hvfp2vJeOTW5k2/HN0r3Q1VJ7Pw==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/props@3.2.4': + resolution: {integrity: sha512-MXXdvi2TSB6d+0N6ueA/HP1j/Kh9SEc4WdF1ZDMLwPagxW6pIHHSS9xbRO0RjqSVpNP4j0nxCWT1hx3CkJNhNA==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/refs@1.1.4': + resolution: {integrity: sha512-bLjwIs6ZPu8NQnuw04sU3Zc8qKSpbc0umUU/O4SHf6oWOdO4+dHY8vb1T7C4b/Tg103+9WGr6sEE0+NFlbaB/A==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/resize-observer@2.2.0': + resolution: {integrity: sha512-9Fuu/EWBeGj+atGHRJp70HKhdfalmpjwxY8a32NZixdLNmfCJ45AfhLQNr6uOzETbbiMx4iCKlTrJ8KZCHC2Ww==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/rootless@1.5.4': + resolution: {integrity: sha512-TOIZa1VUfVJ+9nkCcRajw3U4t9vBOP1HxX1WHNTbXq32mXwlqTvUnC4CRIilohcryBkT9u2ZkhUDSHRTaGp55g==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/static-store@0.1.4': + resolution: {integrity: sha512-LgtVaVBtB7EbmS4+M0b8xY5Iq6pUWXBsIC4VgtrFKDGDdyCaDt88sHk0fUlx1Enxm/XZnZyLXJABRoa39RjJqA==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/trigger@1.2.4': + resolution: {integrity: sha512-Ju0e+ZOD7hpOp7nptJimvDSZHWFvIvF9iBWMvuwt30smX7c5wmB8Kmc0AdDuv0wOTi06PQ1J5IrP1WJbH2yUBQ==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/utils@6.4.1': + resolution: {integrity: sha512-ISSB5QX1qP2ynrheIpYwc4oKR5Ny4siNuUyf1qZniy+Il+p/PtDB0QK1Dnle8noiHpwRD3gpPdubOC3qI/Zamg==} + peerDependencies: + solid-js: ^1.6.12 + '@solidjs/meta@0.29.4': resolution: {integrity: sha512-zdIWBGpR9zGx1p1bzIPqF5Gs+Ks/BH8R6fWhmUa/dcK1L2rUC8BAcZJzNRYBQv74kScf1TSOs0EY//Vd/I0V8g==} peerDependencies: @@ -1521,6 +1606,9 @@ packages: '@solidjs/router': optional: true + '@swc/helpers@0.5.23': + resolution: {integrity: sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==} + '@tybys/wasm-util@0.10.3': resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} @@ -3143,6 +3231,16 @@ packages: solid-js@1.9.14: resolution: {integrity: sha512-sAEXC0Kk0S1EDg+8ysEWJDbYhA3RRoEjwuySUGlKIemeo0I5YZfOyumNjNs9Sv3y2nmhD+0rW66ag2HsMuQiGQ==} + solid-presence@0.2.0: + resolution: {integrity: sha512-YM92o+jvpzX3XGaD4rLYmq/Kc2ZVh47GSCLEufHBFQQIurvZTs8SoGJxO8BJGNDxBKdcS8F3dYhW1SDXp4BNjA==} + peerDependencies: + solid-js: ^1.8 + + solid-prevent-scroll@0.1.11: + resolution: {integrity: sha512-2PComVCDHaQN/5t7ogEqUYeHasritZKXZ8Sb/VLkl0Web8o9YhEwOo8LSujJEahvMlYCNyKt0zRJeHldOAeWZg==} + peerDependencies: + solid-js: ^1.8 + solid-refresh@0.6.3: resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==} peerDependencies: @@ -3692,6 +3790,11 @@ snapshots: fast-wrap-ansi: 0.2.2 sisteransi: 1.0.5 + '@corvu/utils@0.4.2(solid-js@1.9.14)': + dependencies: + '@floating-ui/dom': 1.8.0 + solid-js: 1.9.14 + '@drizzle-team/brocli@0.11.0': {} '@electric-sql/pglite@0.5.3': {} @@ -3953,6 +4056,17 @@ snapshots: '@fedify/uri-template@2.3.1': {} + '@floating-ui/core@1.8.0': + dependencies: + '@floating-ui/utils': 0.2.12 + + '@floating-ui/dom@1.8.0': + dependencies: + '@floating-ui/core': 1.8.0 + '@floating-ui/utils': 0.2.12 + + '@floating-ui/utils@0.2.12': {} + '@graphql-tools/executor@1.5.3(graphql@16.14.2)': dependencies: '@graphql-tools/utils': 11.1.0(graphql@16.14.2) @@ -4028,6 +4142,10 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} + '@internationalized/number@3.6.7': + dependencies: + '@swc/helpers': 0.5.23 + '@ioredis/commands@1.10.0': optional: true @@ -4060,6 +4178,28 @@ snapshots: dependencies: jsbi: 4.3.2 + '@kobalte/core@0.13.13(solid-js@1.9.14)': + dependencies: + '@floating-ui/dom': 1.8.0 + '@internationalized/number': 3.6.7 + '@kobalte/utils': 0.9.2(solid-js@1.9.14) + '@solid-primitives/props': 3.2.4(solid-js@1.9.14) + '@solid-primitives/resize-observer': 2.2.0(solid-js@1.9.14) + solid-js: 1.9.14 + solid-presence: 0.2.0(solid-js@1.9.14) + solid-prevent-scroll: 0.1.11(solid-js@1.9.14) + + '@kobalte/utils@0.9.2(solid-js@1.9.14)': + dependencies: + '@solid-primitives/event-listener': 2.4.6(solid-js@1.9.14) + '@solid-primitives/keyed': 1.5.3(solid-js@1.9.14) + '@solid-primitives/map': 0.4.13(solid-js@1.9.14) + '@solid-primitives/media': 2.3.6(solid-js@1.9.14) + '@solid-primitives/props': 3.2.4(solid-js@1.9.14) + '@solid-primitives/refs': 1.1.4(solid-js@1.9.14) + '@solid-primitives/utils': 6.4.1(solid-js@1.9.14) + solid-js: 1.9.14 + '@logtape/drizzle-orm@2.2.2(@logtape/logtape@2.3.0-dev.840)': dependencies: '@logtape/logtape': 2.3.0-dev.840 @@ -4449,6 +4589,65 @@ snapshots: '@shikijs/vscode-textmate@10.0.2': {} + '@solid-primitives/event-listener@2.4.6(solid-js@1.9.14)': + dependencies: + '@solid-primitives/utils': 6.4.1(solid-js@1.9.14) + solid-js: 1.9.14 + + '@solid-primitives/keyed@1.5.3(solid-js@1.9.14)': + dependencies: + solid-js: 1.9.14 + + '@solid-primitives/map@0.4.13(solid-js@1.9.14)': + dependencies: + '@solid-primitives/trigger': 1.2.4(solid-js@1.9.14) + solid-js: 1.9.14 + + '@solid-primitives/media@2.3.6(solid-js@1.9.14)': + dependencies: + '@solid-primitives/event-listener': 2.4.6(solid-js@1.9.14) + '@solid-primitives/rootless': 1.5.4(solid-js@1.9.14) + '@solid-primitives/static-store': 0.1.4(solid-js@1.9.14) + '@solid-primitives/utils': 6.4.1(solid-js@1.9.14) + solid-js: 1.9.14 + + '@solid-primitives/props@3.2.4(solid-js@1.9.14)': + dependencies: + '@solid-primitives/utils': 6.4.1(solid-js@1.9.14) + solid-js: 1.9.14 + + '@solid-primitives/refs@1.1.4(solid-js@1.9.14)': + dependencies: + '@solid-primitives/utils': 6.4.1(solid-js@1.9.14) + solid-js: 1.9.14 + + '@solid-primitives/resize-observer@2.2.0(solid-js@1.9.14)': + dependencies: + '@solid-primitives/event-listener': 2.4.6(solid-js@1.9.14) + '@solid-primitives/rootless': 1.5.4(solid-js@1.9.14) + '@solid-primitives/static-store': 0.1.4(solid-js@1.9.14) + '@solid-primitives/utils': 6.4.1(solid-js@1.9.14) + solid-js: 1.9.14 + + '@solid-primitives/rootless@1.5.4(solid-js@1.9.14)': + dependencies: + '@solid-primitives/utils': 6.4.1(solid-js@1.9.14) + solid-js: 1.9.14 + + '@solid-primitives/static-store@0.1.4(solid-js@1.9.14)': + dependencies: + '@solid-primitives/utils': 6.4.1(solid-js@1.9.14) + solid-js: 1.9.14 + + '@solid-primitives/trigger@1.2.4(solid-js@1.9.14)': + dependencies: + '@solid-primitives/utils': 6.4.1(solid-js@1.9.14) + solid-js: 1.9.14 + + '@solid-primitives/utils@6.4.1(solid-js@1.9.14)': + dependencies: + solid-js: 1.9.14 + '@solidjs/meta@0.29.4(solid-js@1.9.14)': dependencies: solid-js: 1.9.14 @@ -4492,6 +4691,10 @@ snapshots: - crossws - supports-color + '@swc/helpers@0.5.23': + dependencies: + tslib: 2.8.1 + '@tybys/wasm-util@0.10.3': dependencies: tslib: 2.8.1 @@ -5962,6 +6165,16 @@ snapshots: seroval: 1.5.4 seroval-plugins: 1.5.4(seroval@1.5.4) + solid-presence@0.2.0(solid-js@1.9.14): + dependencies: + '@corvu/utils': 0.4.2(solid-js@1.9.14) + solid-js: 1.9.14 + + solid-prevent-scroll@0.1.11(solid-js@1.9.14): + dependencies: + '@corvu/utils': 0.4.2(solid-js@1.9.14) + solid-js: 1.9.14 + solid-refresh@0.6.3(solid-js@1.9.14)(supports-color@10.2.2): dependencies: '@babel/generator': 7.29.8