diff --git a/web/src/app.css b/web/src/app.css index 7bf8583e6..5bf6db1e7 100644 --- a/web/src/app.css +++ b/web/src/app.css @@ -390,8 +390,8 @@ html { --color-shadow-inner-strong: var(--color-wool-600); --color-shadow-inner-strong-hover: var(--color-wool-600); --color-shadow-inner-subtle: var(--color-wool-400); - --color-shadow-ambient-strong: rgb(0 0 0 / 0.08); - --color-shadow-ambient-subtle: rgb(0 0 0 / 0.04); + --color-shadow-ambient-strong: transparent; + --color-shadow-ambient-subtle: transparent; --color-inverse-background: var(--color-wool-1300); --color-inverse-foreground: var(--color-wool-300); @@ -925,7 +925,7 @@ html { @utility row-breathe { animation: row-breathe 1.2s ease-in-out infinite; background-color: var(--color-background-muted); - border-radius: var(--radius-sm, 0.25rem); + border-radius: var(--radius-md, 0.375rem); @media (prefers-reduced-motion: reduce) { animation: none; @@ -1078,8 +1078,8 @@ html { --color-shadow-inner-strong: var(--color-wool-1600); --color-shadow-inner-strong-hover: var(--color-wool-1300); --color-shadow-inner-subtle: var(--color-wool-1500); - --color-shadow-ambient-strong: rgb(0 0 0 / 0.35); - --color-shadow-ambient-subtle: rgb(0 0 0 / 0.2); + --color-shadow-ambient-strong: transparent; + --color-shadow-ambient-subtle: transparent; --color-inverse-background: var(--color-white); --color-inverse-foreground: var(--color-wool-1500); diff --git a/web/src/fixtures/diff.ts b/web/src/fixtures/diff.ts index 9c5abd5fe..7d25c7f35 100644 --- a/web/src/fixtures/diff.ts +++ b/web/src/fixtures/diff.ts @@ -230,7 +230,7 @@ import NotificationItem from "./NotificationItem.svelte"; let { notifications = [] } = $props(); // end script -
{paragraph}
Repository migration has successfully started. You can now close this page.
{lines.join( + class="overflow-x-auto rounded-md bg-background-inset p-sm typography-monospace-small">{lines.join( "\n" )}
{@render bullet(3)}Configure your remote to - {remote}
{remote}
Click a language to add it to your query, then search. You can also type lang:name into the search bar yourself. diff --git a/web/src/lib/components/settings/CodeChip.svelte b/web/src/lib/components/settings/CodeChip.svelte index 2bcbf1b4d..f60a0262a 100644 --- a/web/src/lib/components/settings/CodeChip.svelte +++ b/web/src/lib/components/settings/CodeChip.svelte @@ -10,7 +10,7 @@ {@render children()} diff --git a/web/src/lib/components/settings/SettingsEmpty.svelte b/web/src/lib/components/settings/SettingsEmpty.svelte index 53b65f2db..8b4aa8eb4 100644 --- a/web/src/lib/components/settings/SettingsEmpty.svelte +++ b/web/src/lib/components/settings/SettingsEmpty.svelte @@ -7,7 +7,7 @@ {message} diff --git a/web/src/lib/components/settings/SettingsList.svelte b/web/src/lib/components/settings/SettingsList.svelte index ded6ddf2d..2cb66d031 100644 --- a/web/src/lib/components/settings/SettingsList.svelte +++ b/web/src/lib/components/settings/SettingsList.svelte @@ -2,7 +2,7 @@ import { tv, type VariantProps } from "tailwind-variants"; export const settingsList = tv({ - base: "flex w-full flex-col divide-y divide-border-default rounded-sm border border-border-default *:py-sm *:first:pt-none *:last:pb-none", + base: "flex w-full flex-col divide-y divide-border-default rounded-md border border-border-default *:py-sm *:first:pt-none *:last:pb-none", variants: { padding: { regular: "p-sm", diff --git a/web/src/lib/components/settings/SettingsPanel.svelte b/web/src/lib/components/settings/SettingsPanel.svelte index be312997b..b9d10d576 100644 --- a/web/src/lib/components/settings/SettingsPanel.svelte +++ b/web/src/lib/components/settings/SettingsPanel.svelte @@ -16,7 +16,7 @@ diff --git a/web/src/lib/components/settings/ThemePicker.svelte b/web/src/lib/components/settings/ThemePicker.svelte index ff3a6883b..ef94eef6f 100644 --- a/web/src/lib/components/settings/ThemePicker.svelte +++ b/web/src/lib/components/settings/ThemePicker.svelte @@ -15,7 +15,7 @@ diff --git a/web/src/lib/components/settings/ThemePreview.svelte b/web/src/lib/components/settings/ThemePreview.svelte index b6f813066..e8279a1b6 100644 --- a/web/src/lib/components/settings/ThemePreview.svelte +++ b/web/src/lib/components/settings/ThemePreview.svelte @@ -74,7 +74,7 @@ diff --git a/web/src/lib/components/settings/VerifyEmailCard.svelte b/web/src/lib/components/settings/VerifyEmailCard.svelte index bd14ec537..6937426a5 100644 --- a/web/src/lib/components/settings/VerifyEmailCard.svelte +++ b/web/src/lib/components/settings/VerifyEmailCard.svelte @@ -17,7 +17,7 @@ {#if state.kind === "verifying"} { e.preventDefault(); if (validNewEmail && !addOne.loading) { diff --git a/web/src/lib/components/shell/Topbar.svelte b/web/src/lib/components/shell/Topbar.svelte index 47d8a3c09..f913a5e90 100644 --- a/web/src/lib/components/shell/Topbar.svelte +++ b/web/src/lib/components/shell/Topbar.svelte @@ -15,7 +15,7 @@ link: "flex items-center text-foreground-default transition-colors hover:text-foreground-muted", identity: "flex items-center gap-2xs", ball: "flex size-8 items-center justify-center rounded-full border border-border-default bg-background-inset text-foreground-placeholder md:size-5", - bar: "hidden h-4 w-24 rounded-sm bg-background-inset md:block", + bar: "hidden h-4 w-24 rounded-md bg-background-inset md:block", switchHeader: "border-b-0 px-xs py-1.5 typography-paragraph-small text-foreground-muted", addBall: diff --git a/web/src/lib/components/ui/Button.svelte b/web/src/lib/components/ui/Button.svelte index d92e79648..8d4a5987d 100644 --- a/web/src/lib/components/ui/Button.svelte +++ b/web/src/lib/components/ui/Button.svelte @@ -4,7 +4,7 @@ export const button = tv({ base: [ - "inline-flex cursor-pointer items-center justify-center overflow-hidden rounded-l-(--btn-radius-l) rounded-r-(--btn-radius-r) no-underline select-none [--btn-radius-l:var(--btn-radius)] [--btn-radius-r:var(--btn-radius)] [--btn-radius:var(--radius-sm)]", + "inline-flex cursor-pointer items-center justify-center overflow-hidden rounded-l-(--btn-radius-l) rounded-r-(--btn-radius-r) no-underline select-none [--btn-radius-l:var(--btn-radius)] [--btn-radius-r:var(--btn-radius)] [--btn-radius:var(--radius-md)]", "transition-colors duration-150 ease-in-out", "hover:no-underline", "focus-visible:outline-2 focus-visible:outline-offset-2", @@ -14,15 +14,15 @@ variant: { default: [ "border border-border-default bg-background-default text-foreground-default", - "hover:bg-background-subtle aria-expanded:bg-background-subtle", + "hover:bg-background-inset aria-expanded:bg-background-subtle", "focus-visible:outline-border-focus", "disabled:border-transparent disabled:bg-background-subtle disabled:text-foreground-subtle", "aria-disabled:border-transparent aria-disabled:bg-background-subtle aria-disabled:text-foreground-subtle" ], primary: [ - "border border-background-info-emphasis-hover bg-background-info-emphasis text-foreground-on-emphasis", - "hover:bg-background-info-emphasis-hover aria-expanded:bg-background-info-emphasis-hover", - "focus-visible:outline-background-info-emphasis", + "border border-indigo-600 bg-indigo-600 text-foreground-on-emphasis", + "hover:bg-indigo-600 aria-expanded:bg-indigo-600", + "focus-visible:outline-indigo-600", "disabled:border-transparent disabled:bg-background-info-subtle-hover disabled:text-foreground-link-info", "aria-disabled:border-transparent aria-disabled:bg-background-info-subtle-hover aria-disabled:text-foreground-link-info" ], @@ -80,6 +80,8 @@ variant: ["default", "danger", "success", "warning"], insetShadow: true, class: [ + "bg-linear-to-b from-background-default to-background-inset/50 dark:border-t-border-subtle dark:from-background-inset/50 dark:to-background-default", + "hover:from-background-subtle hover:to-background-inset hover:dark:border-t-wool-1000 hover:dark:from-background-inset hover:dark:to-background-subtle active:dark:border-t-wool-1100", "relative z-0 before:absolute before:inset-0 before:-z-10 before:rounded-l-[max(calc(var(--btn-radius-l)-2px),0px)] before:rounded-r-[max(calc(var(--btn-radius-r)-2px),0px)] before:shadow-[inset_0_-2px_0_0_var(--color-shadow-inner-subtle)] before:transition-all before:duration-150 before:content-[''] dark:before:shadow-[inset_0_-2px_0_0_var(--color-shadow-inner-subtle)]", "hover:before:shadow-[inset_0_-2px_0_0_var(--color-shadow-inner-strong-hover)]", "active:*:translate-y-0.5 active:before:shadow-[inset_0_2px_2px_0_var(--color-shadow-inner-subtle)]", @@ -94,7 +96,9 @@ "relative z-0 before:absolute before:inset-0 before:-z-10 before:rounded-l-[max(calc(var(--btn-radius-l)-2px),0px)] before:rounded-r-[max(calc(var(--btn-radius-r)-2px),0px)] before:shadow-[inset_0_-2px_0_0_var(--color-alpha-dark-25)] before:transition-all before:duration-150 before:content-[''] dark:before:shadow-[inset_0_-2px_0_0_var(--color-alpha-light-25)]", "active:*:translate-y-0.5 active:before:shadow-[inset_0_2px_2px_0_var(--color-alpha-dark-50)] dark:active:before:shadow-[inset_0_2px_2px_0_var(--color-alpha-light-50)]", "aria-expanded:*:translate-y-0.5 aria-expanded:before:shadow-[inset_0_2px_2px_0_var(--color-alpha-dark-50)] dark:aria-expanded:before:shadow-[inset_0_2px_2px_0_var(--color-alpha-light-50)]", - "disabled:before:shadow-none disabled:active:*:translate-y-0" + "disabled:before:shadow-none disabled:active:*:translate-y-0", + "relative z-0 after:absolute after:inset-0 after:-z-10 after:rounded-l-[max(calc(var(--btn-radius-l)-2px),0px)] after:rounded-r-[max(calc(var(--btn-radius-r)-2px),0px)] after:shadow-[inset_0_1px_0_0_var(--color-alpha-light-20)] after:transition-all after:duration-150 after:content-[''] dark:after:shadow-[inset_0_1px_0_0_var(--color-alpha-dark-20)]", + "active:after:hidden" ] } ], diff --git a/web/src/lib/components/ui/ButtonCard.svelte b/web/src/lib/components/ui/ButtonCard.svelte index 21c0ab0b6..eba00b782 100644 --- a/web/src/lib/components/ui/ButtonCard.svelte +++ b/web/src/lib/components/ui/ButtonCard.svelte @@ -3,7 +3,7 @@ export const buttonCard = tv({ base: [ - "flex h-40 w-48 cursor-pointer gap-sm rounded-(--btn-radius) px-md py-sm no-underline select-none [--btn-radius:var(--radius-sm)]", + "flex h-40 w-48 cursor-pointer gap-sm rounded-(--btn-radius) px-md py-sm no-underline select-none [--btn-radius:var(--radius-md)]", "transition-colors duration-150 ease-in-out", "hover:no-underline", "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-border-focus", diff --git a/web/src/lib/components/ui/ButtonGroup.svelte b/web/src/lib/components/ui/ButtonGroup.svelte index 896dc6236..84f2295be 100644 --- a/web/src/lib/components/ui/ButtonGroup.svelte +++ b/web/src/lib/components/ui/ButtonGroup.svelte @@ -8,15 +8,15 @@ spaced: { true: "gap-xs", false: [ - "relative items-stretch gap-none overflow-hidden rounded-sm bg-background-subtle dark:bg-background-canvas", - "after:pointer-events-none after:absolute after:inset-0 after:z-20 after:rounded-sm after:border after:border-border-default after:content-['']", - "*:relative *:border-y-0", + "relative items-stretch gap-none overflow-hidden rounded-md bg-background-subtle dark:bg-background-canvas", + "after:pointer-events-none after:absolute after:inset-0 after:z-20 after:rounded-md after:border after:border-border-default after:content-['']", + "*:relative *:border-y-transparent", "[&>*:not(:first-child)]:-ml-px [&>*:not(:first-child)]:[--btn-radius-l:0px]", "[&>*:not(:last-child)]:[--btn-radius-r:0px]", // a Dropdown keeps its trigger one level down, and the radius vars only // inherit that far — Button re-declares them on itself, so the wrapper's // value loses. reach the nested trigger directly. - "[&>*>button]:border-y-0", + "[&>*>button]:border-y-transparent", "[&>*:not(:first-child)>button]:[--btn-radius-l:0px]", "[&>*:not(:last-child)>button]:[--btn-radius-r:0px]", "[&>*:not([data-variant=ghost])]:z-10", diff --git a/web/src/lib/components/ui/Card.svelte b/web/src/lib/components/ui/Card.svelte index b48993144..f2acee7ff 100644 --- a/web/src/lib/components/ui/Card.svelte +++ b/web/src/lib/components/ui/Card.svelte @@ -5,7 +5,7 @@ base: "overflow-clip", variants: { rounded: { - true: "rounded-sm", + true: "rounded-md", false: "" }, border: { diff --git a/web/src/lib/components/ui/Combobox.svelte b/web/src/lib/components/ui/Combobox.svelte index 3a85c59fd..05d2035a7 100644 --- a/web/src/lib/components/ui/Combobox.svelte +++ b/web/src/lib/components/ui/Combobox.svelte @@ -6,11 +6,11 @@ root: "relative inline-block w-full", trigger: "flex min-h-8 cursor-pointer items-center gap-xs px-2.5 py-2xs", value: "min-w-0 flex-1 truncate text-left typography-paragraph-regular", - panel: "combobox-panel fixed inset-auto z-50 m-none hidden h-fit max-h-[min(24rem,calc(100dvh-1rem))] w-80 max-w-[calc(100vw-1rem)] popover-transition flex-col overflow-hidden rounded-sm border border-border-default bg-background-default p-none text-foreground-default shadow-regular open:flex dark:shadow-none", + panel: "combobox-panel fixed inset-auto z-50 m-none hidden h-fit max-h-[min(24rem,calc(100dvh-1rem))] w-80 max-w-[calc(100vw-1rem)] popover-transition flex-col overflow-hidden rounded-md border border-border-default bg-background-default p-none text-foreground-default shadow-regular open:flex dark:shadow-none", search: "shrink-0 border-b border-border-default p-xs", list: "min-h-0 flex-auto touch-pan-y overflow-y-auto overscroll-contain p-2xs [-webkit-overflow-scrolling:touch]", groupHeading: "px-xs pt-xs pb-2xs font-semibold text-foreground-muted first:pt-2xs", - option: "flex w-full cursor-pointer items-center gap-xs rounded-sm bg-transparent px-xs py-1.5 text-left aria-disabled:cursor-not-allowed aria-disabled:text-foreground-disabled data-active:bg-background-subtle dark:data-active:bg-background-subtle", + option: "flex w-full cursor-pointer items-center gap-xs rounded-md bg-transparent px-xs py-1.5 text-left aria-disabled:cursor-not-allowed aria-disabled:text-foreground-disabled data-active:bg-background-subtle dark:data-active:bg-background-subtle", check: "size-3.5 shrink-0 text-foreground-default", optionLabel: "min-w-0 flex-1 truncate", hint: "shrink-0 text-foreground-subtle", diff --git a/web/src/lib/components/ui/CopyButton.stories.svelte b/web/src/lib/components/ui/CopyButton.stories.svelte index 8e2fea974..5558e0bdc 100644 --- a/web/src/lib/components/ui/CopyButton.stories.svelte +++ b/web/src/lib/components/ui/CopyButton.stories.svelte @@ -83,7 +83,7 @@ - + {SHA} diff --git a/web/src/lib/components/ui/Dropdown.svelte b/web/src/lib/components/ui/Dropdown.svelte index 2bcf96c20..7df8b11ba 100644 --- a/web/src/lib/components/ui/Dropdown.svelte +++ b/web/src/lib/components/ui/Dropdown.svelte @@ -10,7 +10,7 @@ root: "relative inline-flex", plainTrigger: "min-h-0 gap-2xs border-0 bg-transparent p-none text-inherit hover:bg-transparent aria-expanded:bg-transparent", - menu: "dropdown-menu fixed inset-auto z-50 m-none h-fit max-h-[calc(100dvh-1rem)] w-56 max-w-[calc(100vw-1rem)] popover-transition touch-pan-y divide-y divide-border-default overflow-auto overscroll-contain rounded-sm border border-border-default bg-background-default text-foreground-default shadow-regular [-webkit-overflow-scrolling:touch]" + menu: "dropdown-menu fixed inset-auto z-50 m-none h-fit max-h-[calc(100dvh-1rem)] w-56 max-w-[calc(100vw-1rem)] popover-transition touch-pan-y divide-y divide-border-default overflow-auto overscroll-contain rounded-md border border-border-default bg-background-default text-foreground-default shadow-regular [-webkit-overflow-scrolling:touch]" }, variants: { align: { diff --git a/web/src/lib/components/ui/Error.svelte b/web/src/lib/components/ui/Error.svelte index 66c2e75d8..17e993b13 100644 --- a/web/src/lib/components/ui/Error.svelte +++ b/web/src/lib/components/ui/Error.svelte @@ -3,7 +3,7 @@ export const error = tv({ slots: { - root: "overflow-hidden rounded-sm border border-border-danger bg-background-danger-subtle text-foreground-danger dark:border-border-danger/60 dark:bg-background-danger-subtle/20", + root: "overflow-hidden rounded-md border border-border-danger bg-background-danger-subtle text-foreground-danger dark:border-border-danger/60 dark:bg-background-danger-subtle/20", header: "flex items-center gap-xs", icon: "shrink-0", label: "min-w-0", diff --git a/web/src/lib/components/ui/Field.stories.svelte b/web/src/lib/components/ui/Field.stories.svelte index 46cfa5ff2..fc829ff4f 100644 --- a/web/src/lib/components/ui/Field.stories.svelte +++ b/web/src/lib/components/ui/Field.stories.svelte @@ -27,7 +27,7 @@ {id} type="text" placeholder="Placeholder" - class="w-full rounded-sm border border-border-default bg-background-default px-sm py-xs typography-paragraph-small outline-none placeholder:text-foreground-placeholder focus:border-border-strong focus:ring-1 focus:ring-border-strong" + class="w-full rounded-md border border-border-default bg-background-default px-sm py-xs typography-paragraph-small outline-none placeholder:text-foreground-placeholder focus:border-border-strong focus:ring-1 focus:ring-border-strong" /> {/snippet} diff --git a/web/src/lib/components/ui/Hovercard.svelte b/web/src/lib/components/ui/Hovercard.svelte index ad6359b4c..d7875c2a9 100644 --- a/web/src/lib/components/ui/Hovercard.svelte +++ b/web/src/lib/components/ui/Hovercard.svelte @@ -15,7 +15,7 @@ // overflow-visible so the card's own content (e.g. a nested popover) isn't clipped // pointer-events-auto because the card is a child of whatever the trigger sits in, // and a card the pointer falls through closes the moment it is reached for - card: "hovercard-card pointer-events-auto fixed inset-auto z-50 m-none h-fit popover-transition overflow-visible rounded-sm border border-border-default bg-background-default text-foreground-default shadow-regular" + card: "hovercard-card pointer-events-auto fixed inset-auto z-50 m-none h-fit popover-transition overflow-visible rounded-md border border-border-default bg-background-default text-foreground-default shadow-regular" }, variants: { align: { diff --git a/web/src/lib/components/ui/Kbd.svelte b/web/src/lib/components/ui/Kbd.svelte index 01f52b3b7..bb0812595 100644 --- a/web/src/lib/components/ui/Kbd.svelte +++ b/web/src/lib/components/ui/Kbd.svelte @@ -2,7 +2,7 @@ import { tv, type VariantProps } from "tailwind-variants"; export const kbd = tv({ - base: "inline-flex h-4.5 min-w-4.5 items-center justify-center rounded-sm border px-1 pb-3xs font-sans typography-paragraph-mini not-italic select-none", + base: "inline-flex h-4.5 min-w-4.5 items-center justify-center rounded-md border px-1 pb-3xs font-sans typography-paragraph-mini not-italic select-none", variants: { inverted: { false: "border-border-default bg-background-default text-foreground-default shadow-[inset_0_-2px_0_0_var(--color-shadow-inner-subtle)]", diff --git a/web/src/lib/components/ui/Lightbox.svelte b/web/src/lib/components/ui/Lightbox.svelte index a7c3f46df..f68a4403d 100644 --- a/web/src/lib/components/ui/Lightbox.svelte +++ b/web/src/lib/components/ui/Lightbox.svelte @@ -8,7 +8,7 @@ flight: "absolute inset-0 flex items-center justify-center p-4 sm:p-14", image: "size-auto max-h-full max-w-full", bar: "pointer-events-none absolute inset-0 flex items-start gap-2 p-3 sm:p-4", - badge: "flex min-h-9.5 items-center rounded-sm border border-border-default bg-background-default px-3 typography-paragraph-small text-foreground-default", + badge: "flex min-h-9.5 items-center rounded-md border border-border-default bg-background-default px-3 typography-paragraph-small text-foreground-default", controls: "pointer-events-auto ml-auto flex items-center gap-2", button: "pointer-events-auto min-w-9 px-0" }, @@ -54,13 +54,13 @@ const SLOP = 8; const NEAR_HOME = 1.02; const SNAP_HOME = 1.05; - const RADIUS_FALLBACK = 4; + const RADIUS_FALLBACK = 6; const ORIGIN_RADIUS = 9; const ANNOUNCE = 220; const restingRadius = (): number => { const root = getComputedStyle(document.documentElement); - const raw = root.getPropertyValue("--radius-sm").trim(); + const raw = root.getPropertyValue("--radius-md").trim(); const value = Number.parseFloat(raw); if (!Number.isFinite(value)) return RADIUS_FALLBACK; return raw.endsWith("rem") ? value * Number.parseFloat(root.fontSize) : value; diff --git a/web/src/lib/components/ui/Logo.stories.svelte b/web/src/lib/components/ui/Logo.stories.svelte index 08358b2a0..1f13fd12f 100644 --- a/web/src/lib/components/ui/Logo.stories.svelte +++ b/web/src/lib/components/ui/Logo.stories.svelte @@ -39,7 +39,7 @@ - + diff --git a/web/src/lib/components/ui/Logo.svelte b/web/src/lib/components/ui/Logo.svelte index 08468e8ed..e8f936bb2 100644 --- a/web/src/lib/components/ui/Logo.svelte +++ b/web/src/lib/components/ui/Logo.svelte @@ -73,7 +73,7 @@ {@render mark()} alpha diff --git a/web/src/lib/components/ui/MarkdownEditor.svelte b/web/src/lib/components/ui/MarkdownEditor.svelte index 5d0c2992b..9689a976c 100644 --- a/web/src/lib/components/ui/MarkdownEditor.svelte +++ b/web/src/lib/components/ui/MarkdownEditor.svelte @@ -35,11 +35,11 @@ } }, compoundVariants: [ - { compact: false, inset: false, class: { root: "rounded-sm border" } }, + { compact: false, inset: false, class: { root: "rounded-md border" } }, { compact: false, inset: true, - class: { root: "relative z-1 rounded-t-[calc(var(--radius-sm)-1px)]" } + class: { root: "relative z-1 rounded-t-[calc(var(--radius-md)-1px)]" } }, { compact: false, diff --git a/web/src/lib/components/ui/Pagination.svelte b/web/src/lib/components/ui/Pagination.svelte index 3b29cc59f..07b61bca9 100644 --- a/web/src/lib/components/ui/Pagination.svelte +++ b/web/src/lib/components/ui/Pagination.svelte @@ -5,7 +5,7 @@ slots: { nav: "inline-flex items-center gap-2xs", track: "relative typography-paragraph-regular tabular-nums [--gap:0.25rem]", - plate: "pointer-events-none absolute inset-y-0 left-0 w-(--slot) rounded-sm border border-border-default bg-background-default", + plate: "pointer-events-none absolute inset-y-0 left-0 w-(--slot) rounded-md border border-border-default bg-background-default", list: "relative flex gap-(--gap)", slot: "w-(--slot)", page: "w-full px-none", diff --git a/web/src/lib/components/ui/RangeSelectorRow.svelte b/web/src/lib/components/ui/RangeSelectorRow.svelte index 973d68486..b481b9f39 100644 --- a/web/src/lib/components/ui/RangeSelectorRow.svelte +++ b/web/src/lib/components/ui/RangeSelectorRow.svelte @@ -28,7 +28,7 @@ diff --git a/web/src/lib/components/ui/Section.stories.svelte b/web/src/lib/components/ui/Section.stories.svelte index 328c9f7e2..87566eec7 100644 --- a/web/src/lib/components/ui/Section.stories.svelte +++ b/web/src/lib/components/ui/Section.stories.svelte @@ -10,9 +10,9 @@ {#snippet items()} - First item - Second item - Third item + First item + Second item + Third item {/snippet} diff --git a/web/src/lib/components/ui/Separator.svelte b/web/src/lib/components/ui/Separator.svelte index 6271b021a..5c39e2c1f 100644 --- a/web/src/lib/components/ui/Separator.svelte +++ b/web/src/lib/components/ui/Separator.svelte @@ -12,7 +12,7 @@ {#if orientation === "vertical"} {:else} diff --git a/web/src/lib/components/ui/SignupPrompt.svelte b/web/src/lib/components/ui/SignupPrompt.svelte index 2dde14ea6..fc5324b0e 100644 --- a/web/src/lib/components/ui/SignupPrompt.svelte +++ b/web/src/lib/components/ui/SignupPrompt.svelte @@ -11,7 +11,7 @@ Sign up diff --git a/web/src/lib/components/ui/Tabs.svelte b/web/src/lib/components/ui/Tabs.svelte index 80282cdb8..34f816449 100644 --- a/web/src/lib/components/ui/Tabs.svelte +++ b/web/src/lib/components/ui/Tabs.svelte @@ -19,14 +19,14 @@ icon: "size-3.5", label: "", ghost: "invisible h-0 overflow-hidden font-medium select-none", - count: "rounded-sm px-2xs typography-paragraph-small" + count: "rounded-md px-2xs typography-paragraph-small" }, variants: { vertical: { true: { nav: "relative flex w-full flex-col gap-2xs bg-background-navigation-frame p-xs", - plate: "rounded-sm border border-border-navigation-item-active bg-background-navigation-item", - item: "min-h-8 w-full gap-1.5 overflow-hidden rounded-sm border border-transparent px-sm py-1.5 typography-paragraph-regular text-foreground-default transition-colors duration-150 ease-in-out focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-border-focus", + plate: "rounded-md border border-border-navigation-item-active bg-background-navigation-item", + item: "min-h-8 w-full gap-1.5 overflow-hidden rounded-md border border-transparent px-sm py-1.5 typography-paragraph-regular text-foreground-default transition-colors duration-150 ease-in-out focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-border-focus", icon: "size-3.5 shrink-0", label: "min-w-0 truncate", count: "ml-auto" diff --git a/web/src/lib/components/ui/Tag.svelte b/web/src/lib/components/ui/Tag.svelte index 433eb7c49..db5e8f6c9 100644 --- a/web/src/lib/components/ui/Tag.svelte +++ b/web/src/lib/components/ui/Tag.svelte @@ -2,7 +2,7 @@ import { tv, type VariantProps } from "tailwind-variants"; export const tag = tv({ - base: "inline-flex items-center gap-2xs rounded-sm leading-none select-none", + base: "inline-flex items-center gap-2xs rounded-md leading-none select-none", variants: { color: { default: diff --git a/web/src/lib/components/ui/TagInput.svelte b/web/src/lib/components/ui/TagInput.svelte index 809a0d169..03da64be2 100644 --- a/web/src/lib/components/ui/TagInput.svelte +++ b/web/src/lib/components/ui/TagInput.svelte @@ -13,10 +13,10 @@ label: "truncate", remove: "text-foreground-inherit -mr-3xs flex min-h-0 shrink-0 rounded-xs p-none transition-colors focus-visible:outline-1 focus-visible:outline-offset-1 focus-visible:outline-border-focus", draft: "w-full min-w-0 bg-transparent outline-none placeholder:text-foreground-placeholder placeholder:transition-opacity placeholder:duration-200 disabled:cursor-not-allowed motion-reduce:placeholder:transition-none", - panel: "tag-panel fixed inset-auto z-50 m-none hidden h-fit max-h-[min(18rem,calc(100dvh-1rem))] w-72 max-w-[calc(100vw-1rem)] popover-transition flex-col overflow-hidden rounded-sm border border-border-default bg-background-default p-none text-foreground-default open:flex", + panel: "tag-panel fixed inset-auto z-50 m-none hidden h-fit max-h-[min(18rem,calc(100dvh-1rem))] w-72 max-w-[calc(100vw-1rem)] popover-transition flex-col overflow-hidden rounded-md border border-border-default bg-background-default p-none text-foreground-default open:flex", options: "min-h-0 flex-auto touch-pan-y overflow-y-auto overscroll-contain p-2xs [-webkit-overflow-scrolling:touch]", - option: "flex w-full cursor-pointer items-center gap-xs rounded-sm bg-transparent px-xs py-1.5 text-left data-active:bg-background-subtle", + option: "flex w-full cursor-pointer items-center gap-xs rounded-md bg-transparent px-xs py-1.5 text-left data-active:bg-background-subtle", optionLabel: "min-w-0 flex-1 truncate", empty: "px-xs py-xl text-center text-foreground-muted", footer: "mt-1.5 flex items-start gap-xs", diff --git a/web/src/lib/components/ui/Textarea.svelte b/web/src/lib/components/ui/Textarea.svelte index 4aea9fa55..a3d03b5ee 100644 --- a/web/src/lib/components/ui/Textarea.svelte +++ b/web/src/lib/components/ui/Textarea.svelte @@ -8,7 +8,7 @@ export const textareaField = tv({ slots: { - root: "relative flex items-start gap-2xs rounded-sm border bg-background-default transition-colors", + root: "relative flex items-start gap-2xs rounded-md border bg-background-default transition-colors", textarea: "flex-1 self-stretch bg-transparent py-xs outline-none placeholder:text-foreground-placeholder read-only:resize-none disabled:cursor-not-allowed disabled:resize-none" }, diff --git a/web/src/lib/components/ui/Tooltip.svelte b/web/src/lib/components/ui/Tooltip.svelte index bfa6da2ff..28be4ce18 100644 --- a/web/src/lib/components/ui/Tooltip.svelte +++ b/web/src/lib/components/ui/Tooltip.svelte @@ -12,7 +12,7 @@ wrapper: "inline-flex", // overflow-visible undoes the UA stylesheet's `overflow: auto` on [popover], which // would otherwise clip the arrow off at the bubble's padding box - bubble: "tooltip-bubble fixed inset-auto z-50 m-none h-fit w-max max-w-64 popover-transition overflow-visible rounded-sm bg-background-emphasis px-xs pt-1.5 pb-2xs typography-paragraph-small text-foreground-inverted shadow-regular" + bubble: "tooltip-bubble fixed inset-auto z-50 m-none h-fit w-max max-w-64 popover-transition overflow-visible rounded-md bg-background-emphasis px-xs pt-1.5 pb-2xs typography-paragraph-small text-foreground-inverted shadow-regular" }, variants: { side: { diff --git a/web/src/lib/components/ui/inputField.ts b/web/src/lib/components/ui/inputField.ts index 8c11e164a..a8ae0c413 100644 --- a/web/src/lib/components/ui/inputField.ts +++ b/web/src/lib/components/ui/inputField.ts @@ -24,7 +24,7 @@ export const TAG_COMMIT_CHARS: Record = { }; export const inputField = tv({ - base: "flex items-center rounded-sm border bg-background-default transition-colors", + base: "flex items-center rounded-md border bg-background-default transition-colors", variants: { size: { mini: "min-h-6 gap-2xs px-2xs py-3xs typography-paragraph-mini", diff --git a/web/src/lib/components/ui/selectField.ts b/web/src/lib/components/ui/selectField.ts index 15350da8a..e917399b2 100644 --- a/web/src/lib/components/ui/selectField.ts +++ b/web/src/lib/components/ui/selectField.ts @@ -16,7 +16,7 @@ export type SelectAlign = "left" | "right"; export const selectField = tv({ slots: { - box: "w-full rounded-sm border bg-background-default transition-colors outline-none disabled:cursor-not-allowed", + box: "w-full rounded-md border bg-background-default transition-colors outline-none disabled:cursor-not-allowed", chevron: "shrink-0 text-foreground-subtle" }, variants: { diff --git a/web/src/lib/components/welcome/FinishStep.svelte b/web/src/lib/components/welcome/FinishStep.svelte index 7d499003f..614403ac2 100644 --- a/web/src/lib/components/welcome/FinishStep.svelte +++ b/web/src/lib/components/welcome/FinishStep.svelte @@ -3,7 +3,7 @@ export const tile = tv({ slots: { - root: "flex flex-col gap-xs rounded-sm border border-border-default p-md", + root: "flex flex-col gap-xs rounded-md border border-border-default p-md", heading: "flex items-center gap-xs typography-paragraph-regular text-foreground-default", body: "flex-1 typography-paragraph-small text-foreground-muted", diff --git a/web/src/lib/components/welcome/Steps.svelte b/web/src/lib/components/welcome/Steps.svelte index cf9a0ce8d..c2d049860 100644 --- a/web/src/lib/components/welcome/Steps.svelte +++ b/web/src/lib/components/welcome/Steps.svelte @@ -6,7 +6,7 @@ root: "flex w-full items-center gap-xs", item: "flex flex-1 items-center gap-xs last:flex-none", control: - "flex items-center gap-xs rounded-sm focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-border-focus", + "flex items-center gap-xs rounded-md focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-border-focus", marker: "flex size-6 shrink-0 items-center justify-center rounded-full typography-paragraph-small tabular-nums transition-[scale,background-color,border-color] duration-(--rail-duration) ease-(--rail-ease)", label: "sr-only typography-paragraph-small whitespace-nowrap sm:not-sr-only", connector: "relative h-0.5 flex-1 overflow-hidden rounded-full bg-background-subtle", diff --git a/web/src/lib/components/welcome/WelcomeCard.svelte b/web/src/lib/components/welcome/WelcomeCard.svelte index 63ed9f377..f8f0e0c4f 100644 --- a/web/src/lib/components/welcome/WelcomeCard.svelte +++ b/web/src/lib/components/welcome/WelcomeCard.svelte @@ -3,7 +3,7 @@ export const welcomeCard = tv({ slots: { - root: "overflow-hidden rounded-sm border border-border-default bg-background-default", + root: "overflow-hidden rounded-md border border-border-default bg-background-default", header: "border-b border-border-default px-xl py-lg", body: "grid overflow-hidden", // self-start keeps the pane at its content height: once the body carries a diff --git a/web/src/pierre.css b/web/src/pierre.css index 174f86186..64f5b101d 100644 --- a/web/src/pierre.css +++ b/web/src/pierre.css @@ -71,7 +71,7 @@ } :root .codeview diffs-container { - border-radius: var(--radius-sm, 0.25rem); + border-radius: var(--radius-md, 0.375rem); } :root diffs-container { diff --git a/web/src/routes/+layout.svelte b/web/src/routes/+layout.svelte index 84ad82d7f..a884f16c9 100644 --- a/web/src/routes/+layout.svelte +++ b/web/src/routes/+layout.svelte @@ -82,6 +82,7 @@ !signedIn && (page.url.pathname === "/about" || page.url.pathname === "/") ); const topbarVariant = $derived(isMarketingShell ? "marketing" : "app"); + const isShowcaseShell = $derived(page.url.pathname.startsWith("/dev/components")); @@ -90,39 +91,43 @@ - - {#if !isBareShell && !isWelcomeShell} - - - - {/if} - - - {@render children()} - - - {#if !isBareShell && !isWelcomeShell} - - {/if} - +{#if isShowcaseShell} + {@render children()} +{:else} + + {#if !isBareShell && !isWelcomeShell} + + + + {/if} + + + {@render children()} + + + {#if !isBareShell && !isWelcomeShell} + + {/if} + +{/if} diff --git a/web/src/routes/[handle]/[repo]/tags/[tag]/+page.svelte b/web/src/routes/[handle]/[repo]/tags/[tag]/+page.svelte index c2e3dc0e2..df876ba35 100644 --- a/web/src/routes/[handle]/[repo]/tags/[tag]/+page.svelte +++ b/web/src/routes/[handle]/[repo]/tags/[tag]/+page.svelte @@ -7,7 +7,7 @@ let { data } = $props(); - + {#snippet skeleton()} diff --git a/web/src/routes/dev/components/+page.svelte b/web/src/routes/dev/components/+page.svelte new file mode 100644 index 000000000..0d7406369 --- /dev/null +++ b/web/src/routes/dev/components/+page.svelte @@ -0,0 +1,761 @@ + + + + Components · Tangled + + +{#snippet button()} + + Create repository + Fork + Star + +{/snippet} + +{#snippet input()} + + + + +{/snippet} + +{#snippet selectDemo()} + + + +{/snippet} + +{#snippet buttonGroup()} + + All + Push + Pull request + +{/snippet} + +{#snippet comboboxDemo()} + + + +{/snippet} + +{#snippet toggle()} + Notifications +{/snippet} + +{#snippet field()} + + + {#snippet children({ id })} + + + {/snippet} + + +{/snippet} + +{#snippet modal()} + (modalOpen = true)}>Open modal + + {#snippet footer()} + (modalOpen = false)}>Cancel + (modalOpen = false)} + >Confirm + {/snippet} + +{/snippet} + +{#snippet tooltip()} + + + + + + + + +{/snippet} + +{#snippet actionsTrigger()} + Actions + +{/snippet} + +{#snippet dropdown()} + + Edit + Settings + Log out + +{/snippet} + +{#snippet checkbox()} + + Sign commits + Some files + Disabled + +{/snippet} + +{#snippet card()} + + tangled.org/core + Monorepo for Tangled + +{/snippet} + +{#snippet spinner()} + + + + + + +{/snippet} + +{#snippet bones()} + +{/snippet} + +{#snippet tag()} + + Default + Gray + Passed + Failed + Timed out + Primary + topic + +{/snippet} + +{#snippet error()} + + + + +{/snippet} + +{#snippet tabsDemo()} + + + +{/snippet} + +{#snippet confirmModal()} + (confirmOpen = true)}>Delete + (confirmOpen = false)} + /> +{/snippet} + +{#snippet pagination()} + +{/snippet} + +{#snippet textarea()} + +{/snippet} + +{#snippet tagInput()} + + + {#snippet tag(t)} + m.handle === t.value)?.did} + link={false} + /> + {/snippet} + {#snippet suggestion(t)} + m.handle === t.value)?.did} + link={false} + /> + {/snippet} + + +{/snippet} + +{#snippet avatar()} + + + {#each ["mini", "small", "regular", "large"] as const as size, i (size)} + + {/each} + + + {#each team as member (member.handle)} + + {/each} + + +{/snippet} + +{#snippet user()} + + {#each team as member (member.handle)} + + {/each} + +{/snippet} + +{#snippet kbd()} + + ⌘K + CtrlShiftEnter + +{/snippet} + +{#snippet link()} + + Default link + Danger link + Continue + Disabled link + +{/snippet} + +{#snippet copyButton()} + + {sha} + + +{/snippet} + +{#snippet splitButton()} + +{/snippet} + +{#snippet moreMenu()} + + RSS feed + Report user + +{/snippet} + +{#snippet hovercardBody()} + + Rich content + + It stays open while the pointer moves into it. + + +{/snippet} + +{#snippet hovercard()} + + Hover me + +{/snippet} + +{#snippet radioDemo()} + + Spindle + spindle.tangled.sh + Self-hosted + No spindle + +{/snippet} + +{#snippet emptyState()} + +{/snippet} + +{#snippet sectionItem(label: string)} + {label} +{/snippet} + +{#snippet section()} + + + {@render sectionItem("core")} + {@render sectionItem("knot")} + + +{/snippet} + +{#snippet separator()} + + + + Before + + After + + + a1b2c3d + + 2 hours ago + + +{/snippet} + +{#snippet stepMarker()} + + {#each ["Details", "Configuration", "Review"] as step, i (step)} + + {i + 1} + {step} + + {/each} + +{/snippet} + +{#snippet formStep()} + + + + + + No spindle + + +{/snippet} + +{#snippet rangeRow(index: number, item: unknown, actions: RowActions)} + + + + line {index + 1} + + +{/snippet} + +{#snippet rangeSelector()} + +{/snippet} + +{#snippet graphCell()} + + {#each graphRun as band, i (i)} + + + + + {/each} + +{/snippet} + +{#snippet shimmerText()} + + Resolving knots + Fetching objects + Pipeline running + +{/snippet} + +{#snippet textSwap()} + + + (swapped = !swapped)}>Swap + +{/snippet} + +{#snippet toggleFaces()} + (starred = !starred)}> + + {#snippet off(cls)} + + {/snippet} + {#snippet onIcon(cls)} + + {/snippet} + {#snippet err(cls)} + + {/snippet} + + +{/snippet} + +{#snippet colorBall()} + + {#each [["TypeScript", "#3178c6"], ["Go", "#00ADD8"], ["Rust", "#dea584"], ["Nix", "#7e7eff"]] as [name, color] (name)} + + + {name} + + {/each} + +{/snippet} + +{#snippet logo()} + + + + +{/snippet} + +{#snippet timeAgo()} + + + + +{/snippet} + +{#snippet resizeHandle()} + + + Panel + + + + Content + + +{/snippet} + +{#snippet lightbox()} + + {#each shots as shot, i (shot.src)} + { + lightboxIndex = i; + lightboxOpen = true; + }} + > + + + {/each} + + (lightboxOpen = false)} + /> +{/snippet} + +{#snippet markdownEditor()} + + + +{/snippet} + +{#snippet buttonCard()} + + + + +{/snippet} + +{#snippet listSearch()} + +{/snippet} + +{#snippet listTrailing()} + New +{/snippet} + +{#snippet listToolbar()} + +{/snippet} + +{#snippet listPanel()} + + + + {#each ["Fix login redirect", "Add sitemap", "Bump deps"] as row (row)} + {row} + {/each} + + + +{/snippet} + +{#snippet actorInput()} + + + +{/snippet} + +{#snippet signupPrompt()} + +{/snippet} + + + + {#each visible as entry (entry.slug)} + + {@render entry.demo()} + + {/each} + + diff --git a/web/src/routes/dev/components/+page.ts b/web/src/routes/dev/components/+page.ts new file mode 100644 index 000000000..7591adb85 --- /dev/null +++ b/web/src/routes/dev/components/+page.ts @@ -0,0 +1,8 @@ +import { dev } from "$app/environment"; +import { error } from "@sveltejs/kit"; + +export const ssr = false; + +export const load = () => { + if (!dev) error(404); +}; diff --git a/web/src/routes/dev/components/Shell.svelte b/web/src/routes/dev/components/Shell.svelte new file mode 100644 index 000000000..8cf30aaf9 --- /dev/null +++ b/web/src/routes/dev/components/Shell.svelte @@ -0,0 +1,222 @@ + + +{#snippet themeButton()} + (theme = themes[theme].next)} + /> +{/snippet} + +{#snippet nav()} + + + + + + + Overview + + + + + + (componentsOpen = !componentsOpen)} + > + Components + + + {#if componentsOpen} + + {#each sorted as entry (entry.slug)} + + (drawerOpen = false)} + > + {entry.name} + + + {:else} + No matches + {/each} + + {/if} + +{/snippet} + + + + (drawerOpen = true)} + /> + {title} + {@render themeButton()} + + + {#if drawerOpen} + (drawerOpen = false)} + > + {/if} + + + + + (sidebarOpen = !sidebarOpen)} + > + + + + + + {title} + + + + + + + + + {total} components + + + + {@render themeButton()} + + + + + {@render children()} + + + + + diff --git a/web/src/routes/dev/components/Tile.svelte b/web/src/routes/dev/components/Tile.svelte new file mode 100644 index 000000000..2a531efc8 --- /dev/null +++ b/web/src/routes/dev/components/Tile.svelte @@ -0,0 +1,26 @@ + + + + + {name} + + + {@render children()} + + diff --git a/web/src/routes/invite/+page.svelte b/web/src/routes/invite/+page.svelte index 34deb29ea..eed34653c 100644 --- a/web/src/routes/invite/+page.svelte +++ b/web/src/routes/invite/+page.svelte @@ -60,7 +60,7 @@ {#if !usable} diff --git a/web/src/routes/login/+page.svelte b/web/src/routes/login/+page.svelte index 960489af3..e1d176057 100644 --- a/web/src/routes/login/+page.svelte +++ b/web/src/routes/login/+page.svelte @@ -75,12 +75,12 @@ Use your AT Protocol handle to log in. If you're unsure, this is likely your Tangled (.tngl.sh) or Bluesky (.bsky.social) account. @@ -108,7 +108,7 @@ {#if banner} diff --git a/web/src/routes/welcome/+page.svelte b/web/src/routes/welcome/+page.svelte index 57bb368cd..342081aba 100644 --- a/web/src/routes/welcome/+page.svelte +++ b/web/src/routes/welcome/+page.svelte @@ -341,7 +341,7 @@ {#if unfinishedMigration} You have an unfinished repository migration from GitHub.
lang:name
{SHA}
tangled.org/core
Monorepo for Tangled
{sha}
Rich content
+ It stays open while the pointer moves into it. +
{step}
(.tngl.sh)
(.bsky.social)
You have an unfinished repository migration from GitHub.