diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index dbf449c..9fc7f70 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -37,7 +37,7 @@ jobs: - uses: actions/checkout@v7 with: repository: bloxwap/hig - ref: 19c75619fa5020c015aa639172c83fd02f2bc0a2 + ref: 872906a9071469af8714b3b6fb5cc7bd64d2d6f3 path: .hig sparse-checkout: scripts/drift.mjs sparse-checkout-cone-mode: false diff --git a/apps/docs/README.md b/apps/docs/README.md index 5ea1107..7c39715 100644 --- a/apps/docs/README.md +++ b/apps/docs/README.md @@ -40,15 +40,21 @@ packed candidates in [`vendor/bloxwap-hig/`](../../vendor/bloxwap-hig/README.md) `@bloxwap/hig-tokens/css` and `@bloxwap/hig-react/css` supply the `--hig-*` roles and control recipes, and the install tabs, copy buttons, search states and MDX callouts use HIG `Tabs`, `InstallCommand`, `IconButton`, `Alert`, `EmptyState` and `Callout`. -`app/global.css` maps Fumadocs onto the HIG roles and keeps only site layout. Never -copy HIG CSS, palettes or fonts into this app. `hig-tokens.mjs --check` (part of -`docs:check`) verifies the vendored hashes, the installed versions and the few -JS-only HIG values `global.css` repeats. CI also runs HIG's scoped drift check -(`hig-drift.json`) and `npm run docs:smoke`, a Playwright pass over install/copy, -keyboard, search, 404 and 390 px navigation against the static export. - -Bloxwap Sans and Mono are self-hosted by `@bloxwap/font@0.1.2`. The social renderer -uses the static Bold/Black instances shipped in `@bloxwap/hig-tokens/fonts`. +`app/global.css` maps Fumadocs onto the HIG roles and keeps only site layout; radius, +motion, type, density and font families are read from the `--hig-radius-*`, +`--hig-motion-*`, `--hig-type-*`, `--hig-density-*` and `--hig-font-*` roles. Never +copy HIG CSS, token values, palettes or fonts into this app. `hig-tokens.mjs --check` +(part of `docs:check`) verifies the vendored hashes, the `file:` specs and overrides, +the installed versions, that every `--hig-*` role `global.css` reads exists in the +installed HIG CSS, and that no token numbers or font bridge come back. CI also runs +HIG's scoped drift check (`hig-drift.json`) and `npm run docs:smoke`, a Playwright pass +over install/copy, keyboard, search, 404, 390 px navigation and touch targets, loaded +Bloxwap faces on HIG controls, and reduced motion against the static export. + +Bloxwap Sans and Mono are self-hosted by `@bloxwap/font@0.1.2`; its Next loader variables +sit on ``, where `--hig-font-sans`/`--hig-font-mono` pick them up. The social +renderer needs static TTFs, which `@bloxwap/font` does not ship, so it reads the Bold/Black +instances from `@bloxwap/hig-native-fonts/fonts` (a build-time dev dependency). Brand marks in `public/logos/` are supplied artwork, never typeset replacements. Every MDX page receives a static social card via `app/og/[...slug]/route.tsx`. diff --git a/apps/docs/app/global.css b/apps/docs/app/global.css index 8fcb20a..01ba321 100644 --- a/apps/docs/app/global.css +++ b/apps/docs/app/global.css @@ -5,36 +5,20 @@ @import '@bloxwap/hig-react/css'; @theme inline { - --font-sans: var(--font-bloxwap-sans), ui-rounded, system-ui, sans-serif; - --font-mono: var(--font-bloxwap-mono), ui-monospace, monospace; + --font-sans: var(--hig-font-sans); + --font-mono: var(--hig-font-mono); --text-3xs: 0.625rem; --text-2xs: 0.6875rem; } /* - * Colors, spacing and control heights come from @bloxwap/hig-tokens/css as --hig-* roles. The package - * publishes radius, motion, type and compact density only in JS (`tokens`), so this host copies those - * numbers once; `scripts/hig-tokens.mjs --check` fails if they stop matching the installed package. + * Every HIG value comes from @bloxwap/hig-tokens/css as a --hig-* role: colors, spacing, control heights, radius + * (--hig-radius-*), motion (--hig-motion-*, already 0ms under prefers-reduced-motion), type (--hig-type-*), density + * (--hig-density-*) and the font families (--hig-font-sans/mono resolve the @bloxwap/font loader variables on ). + * The host keeps only its own icon size. */ :root { - --docs-radius: 14px; /* tokens.radius.xl */ - --docs-radius-pill: 9999px; /* tokens.radius.pill */ - --docs-duration: 180ms; /* tokens.motion.fast */ - --docs-ease: cubic-bezier(0.22, 1, 0.36, 1); - --docs-control-compact: 36px; /* tokens.density.compact.control */ - --docs-control-touch: 48px; /* tokens.density.comfortable.control */ - --docs-control-min: 6rem; --docs-icon: 16px; - --docs-type-caption: 0.75rem; /* tokens.type.caption.size */ - --docs-type-body: 1rem; /* tokens.type.body.size */ - --docs-type-body-line: 1.5rem; /* tokens.type.body.lineHeight */ - --docs-type-title: 1.5rem; /* tokens.type.title.size */ - --docs-type-title-line: 1.875rem; /* tokens.type.title.lineHeight */ - --docs-type-display: 3rem; /* tokens.type.display.size */ - --docs-type-weight: 600; /* tokens.type.title.weight and tokens.type.display.weight */ -} -@media (prefers-reduced-motion: reduce) { - :root { --docs-duration: 0ms; } } /* Fumadocs surfaces and states read the HIG semantic roles directly. */ @@ -94,8 +78,8 @@ html > body[data-scroll-locked] { } #nd-page > p { - font-size: var(--docs-type-body); - line-height: var(--docs-type-body-line); + font-size: var(--hig-type-body-size); + line-height: var(--hig-type-body-line-height); } .prose { @@ -161,8 +145,8 @@ html > body[data-scroll-locked] { justify-content: space-between; min-height: 2.5rem; padding: 0.5rem 0.75rem; - border-radius: var(--docs-radius-pill); - transition: background-color var(--docs-duration) var(--docs-ease), color var(--docs-duration) var(--docs-ease); + border-radius: var(--hig-radius-pill); + transition: background-color var(--hig-motion-duration-fast) var(--hig-motion-easing-standard), color var(--hig-motion-duration-fast) var(--hig-motion-easing-standard); font-size: 0.875rem; font-weight: 600; } @@ -173,18 +157,16 @@ html > body[data-scroll-locked] { } /* - * HIG buttons (@bloxwap/hig-react/css) supply paint, height and states. The host adds layout only: icon - * slots, anchors rendered as buttons, and the font loader's family names. @bloxwap/font registers - * Bloxwap Sans under a generated name, so the recipe's 'Bloxwap Sans' family is mapped to its variable. + * HIG buttons (@bloxwap/hig-react/css) supply paint, height, font and states. The host adds layout only: icon + * slots and anchors rendered as buttons. */ .hig-button { display: inline-flex; align-items: center; justify-content: center; gap: var(--hig-space-sm); - font-family: var(--font-sans); text-decoration: none; touch-action: manipulation; + text-decoration: none; touch-action: manipulation; } .hig-button svg { flex: none; width: var(--docs-icon); height: var(--docs-icon); } -.hig-button[data-shape='icon'] { width: var(--hig-control); min-width: 0; padding: 0; } +.hig-button[data-shape='icon'] { width: var(--hig-button); min-width: 0; padding: 0; } .hig-button[data-shape='icon'] > span { display: inline-flex; } -.hig-number { font-family: var(--font-mono); } /* Chart-specific layout on the scale above; typography, surfaces, and states follow workers/docs. */ .brand { display: inline-flex; align-items: center; gap: var(--hig-space-md); } @@ -199,7 +181,7 @@ html > body[data-scroll-locked] { .hero--single { grid-template-columns: minmax(0, 1fr); max-width: 47.5rem; } .hero-copy { min-width: 0; } .eyebrow { display: flex; align-items: center; gap: var(--hig-space-sm); color: var(--color-fd-muted-foreground); font: var(--text-2xs) / 1.5 var(--font-mono); letter-spacing: .09em; } -.status-dot { width: 6px; height: 6px; border-radius: var(--docs-radius-pill); background: var(--color-fd-primary); } +.status-dot { width: 6px; height: 6px; border-radius: var(--hig-radius-pill); background: var(--color-fd-primary); } .hero h1 { margin: var(--hig-space-xl) 0 0; font-size: clamp(var(--text-5xl), 4.4vw, 4rem); line-height: 1.07; font-weight: 600; letter-spacing: -.04em; } .hero h1 span { color: var(--color-fd-foreground); } .hero-description { max-width: 35rem; margin-top: var(--hig-space-xl); color: var(--color-fd-muted-foreground); line-height: 1.5; font-size: var(--text-lg); } @@ -207,12 +189,12 @@ html > body[data-scroll-locked] { .package-install { width: fit-content; max-width: 100%; margin-top: var(--hig-space-xxl); } .package-install [role='tablist'] { gap: var(--hig-space-xs); } .package-install [role='tab'] { min-width: 4.5rem; font-family: var(--font-mono); } -.package-install [role='tabpanel'] { margin-top: var(--hig-space-md); border-radius: var(--docs-radius); } +.package-install [role='tabpanel'] { margin-top: var(--hig-space-md); border-radius: var(--hig-radius-xl); } /* Layout for the HIG InstallCommand recipe (surface, command, copy button, status). */ .package-install .hig-surface { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: var(--hig-space-md) var(--hig-space-lg); } .package-install pre { margin: 0; font: 600 var(--text-sm) / 1.5 var(--font-mono); white-space: pre-wrap; overflow-wrap: anywhere; } .package-install pre code::before { content: '$ '; color: var(--hig-muted); user-select: none; } -.package-install [role='status'] { grid-column: 1 / -1; margin: 0; color: var(--hig-muted); font-size: var(--docs-type-caption); } +.package-install [role='status'] { grid-column: 1 / -1; margin: 0; color: var(--hig-muted); font-size: var(--hig-type-caption-size); } .package-install [role='status']:empty { display: none; } .install-platforms { margin-top: var(--hig-space-lg); color: var(--hig-muted); font-size: var(--text-sm); line-height: 1.5; } @@ -220,18 +202,18 @@ html > body[data-scroll-locked] { .code-window { --code-keyword: color-mix(in oklab, #ff479c 70%, var(--hig-text)); --code-type: color-mix(in oklab, var(--hig-info) 60%, var(--hig-text)); - min-width: 0; margin: 0; overflow: hidden; border-radius: var(--docs-radius); background: var(--hig-surface); color: var(--hig-text); + min-width: 0; margin: 0; overflow: hidden; border-radius: var(--hig-radius-xl); background: var(--hig-surface); color: var(--hig-text); } .code-toolbar { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: var(--hig-space-md); padding: var(--hig-space-md) var(--hig-space-xxl) 0; font: var(--text-2xs) / 1.5 var(--font-mono); color: var(--hig-muted); } .window-dots { display: flex; gap: var(--hig-space-xs); } -.window-dots > i { width: 6px; height: 6px; border-radius: var(--docs-radius-pill); background: var(--hig-nested); } +.window-dots > i { width: 6px; height: 6px; border-radius: var(--hig-radius-pill); background: var(--hig-nested); } .code-caption { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .code-language { color: var(--code-type); } .code-actions { display: flex; align-items: center; gap: var(--hig-space-xs); margin-right: calc(-1 * var(--hig-space-md)); } -.code-toolbar { min-height: var(--docs-control-compact); } +.code-toolbar { min-height: var(--hig-density-compact-control); } .code-window pre { margin: 0; overflow-x: auto; padding: var(--hig-space-xl) var(--hig-space-xxl); font: var(--text-xs) / 1.85 var(--font-mono); tab-size: 2; scrollbar-width: none; } .code-window pre::-webkit-scrollbar { display: none; } .syntax-keyword { color: var(--code-keyword); } @@ -242,7 +224,7 @@ html > body[data-scroll-locked] { display: flex; align-items: center; gap: var(--hig-space-sm); margin: 0; padding: 0 var(--hig-space-xxl) var(--hig-space-lg); font: var(--text-2xs) / 1.5 var(--font-mono); color: var(--hig-muted); } -.code-status > span { width: 6px; height: 6px; border-radius: var(--docs-radius-pill); background: var(--hig-action); } +.code-status > span { width: 6px; height: 6px; border-radius: var(--hig-radius-pill); background: var(--hig-action); } /* * Entrance: three attention layers ~200 ms apart on one curve (MOT-2), as on the Hyperliquid SDK site: @@ -251,7 +233,7 @@ html > body[data-scroll-locked] { @keyframes landing-rise { from { opacity: 0; translate: 0 8px; } } -.hero-copy > *, .code-window, .hero-preview { animation: landing-rise 600ms var(--docs-ease) both; } +.hero-copy > *, .code-window, .hero-preview { animation: landing-rise 600ms var(--hig-motion-easing-standard) both; } .hero-copy > h1 { animation-delay: 60ms; } .hero-copy > :not(.eyebrow, h1) { animation-delay: 200ms; } .code-window { animation-delay: 360ms; } @@ -262,14 +244,14 @@ html > body[data-scroll-locked] { /* Search (header and docs sidebar): a zero-stroke filled pill at the small control height, with key chips one step lighter than the box. */ button[data-search-full] { - height: var(--docs-control-compact); gap: var(--hig-space-sm); padding: 0 var(--hig-space-xs) 0 var(--hig-space-md); - border: 0; border-radius: var(--docs-radius-pill); background: var(--hig-surface); color: var(--hig-muted); font-size: var(--text-sm); - transition: background-color var(--docs-duration) var(--docs-ease), color var(--docs-duration) var(--docs-ease); + height: var(--hig-density-compact-control); gap: var(--hig-space-sm); padding: 0 var(--hig-space-xs) 0 var(--hig-space-md); + border: 0; border-radius: var(--hig-radius-pill); background: var(--hig-surface); color: var(--hig-muted); font-size: var(--text-sm); + transition: background-color var(--hig-motion-duration-fast) var(--hig-motion-easing-standard), color var(--hig-motion-duration-fast) var(--hig-motion-easing-standard); } button[data-search-full]:hover { background: var(--hig-nested); color: var(--hig-text); } button[data-search-full] kbd { display: inline-grid; place-items: center; min-width: 1.5rem; height: 1.5rem; padding: 0 var(--hig-space-xs); - border: 0; border-radius: var(--docs-radius-pill); background: color-mix(in oklab, var(--hig-surface) 80%, var(--hig-text)); color: var(--hig-text); + border: 0; border-radius: var(--hig-radius-pill); background: color-mix(in oklab, var(--hig-surface) 80%, var(--hig-text)); color: var(--hig-text); font: var(--text-2xs) / 1 var(--font-mono); } .hero-preview { @@ -287,7 +269,7 @@ button[data-search-full] kbd { overflow: hidden; width: 100%; border: 1px solid var(--hig-border); - border-radius: var(--docs-radius); + border-radius: var(--hig-radius-xl); background: var(--hig-background); color: var(--hig-text); font-family: var(--font-sans); @@ -306,7 +288,7 @@ button[data-search-full] kbd { .principles { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--hig-space-md); padding: var(--hig-space-lg) 0 var(--hig-space-xxxl); } .principles > div, .guide-links a { background: var(--hig-surface); - border-radius: var(--docs-radius); + border-radius: var(--hig-radius-xl); padding: var(--hig-space-xl); } .feature-number { color: var(--color-fd-primary); font: var(--text-2xs) var(--font-mono); } @@ -318,13 +300,13 @@ button[data-search-full] kbd { .guide-links { display: grid; gap: var(--hig-space-md); } .guide-links a { display: flex; align-items: center; gap: var(--hig-space-xl); - transition: background-color var(--docs-duration) var(--docs-ease); + transition: background-color var(--hig-motion-duration-fast) var(--hig-motion-easing-standard); } .guide-links a:hover { background: var(--hig-nested); } .guide-links a > span { font: var(--text-2xs) var(--font-mono); color: var(--color-fd-muted-foreground); } -.guide-links a > svg { flex: none; margin-left: auto; width: var(--docs-icon); height: var(--docs-icon); color: var(--color-fd-muted-foreground); transition: color var(--docs-duration) var(--docs-ease), transform var(--docs-duration) var(--docs-ease); } +.guide-links a > svg { flex: none; margin-left: auto; width: var(--docs-icon); height: var(--docs-icon); color: var(--color-fd-muted-foreground); transition: color var(--hig-motion-duration-fast) var(--hig-motion-easing-standard), transform var(--hig-motion-duration-fast) var(--hig-motion-easing-standard); } .guide-links a:hover > svg { color: var(--color-fd-primary); transform: translateX(2px); } -.guide-links h3 { font-size: var(--text-sm); margin-bottom: var(--hig-space-xs); font-weight: 600; transition: color var(--docs-duration) var(--docs-ease); } +.guide-links h3 { font-size: var(--text-sm); margin-bottom: var(--hig-space-xs); font-weight: 600; transition: color var(--hig-motion-duration-fast) var(--hig-motion-easing-standard); } .guide-links a:hover h3 { color: var(--color-fd-primary); } .guide-links p { color: var(--color-fd-muted-foreground); font-size: var(--text-xs); } /* Full-bleed rule; content inset to the header's box so both edges line up with the nav. */ @@ -332,14 +314,14 @@ button[data-search-full] kbd { .site-footer { margin-top: auto; padding: var(--hig-space-section) max(var(--hig-space-lg), calc((100% - var(--fd-layout-width, 1400px)) / 2 + var(--hig-space-lg))) var(--hig-space-section); } /* Page end: Edit on GitHub as a quiet ghost pill, prev/next as zero-stroke fill cards (the landing's card style). */ #nd-page .edit-on-github { - align-self: flex-start; height: var(--docs-control-compact); padding: 0 var(--hig-space-md); border: 0; border-radius: var(--docs-radius-pill); + align-self: flex-start; height: var(--hig-density-compact-control); padding: 0 var(--hig-space-md); border: 0; border-radius: var(--hig-radius-pill); background: transparent; color: var(--hig-muted); font-size: var(--text-sm); - transition: background-color var(--docs-duration) var(--docs-ease), color var(--docs-duration) var(--docs-ease); + transition: background-color var(--hig-motion-duration-fast) var(--hig-motion-easing-standard), color var(--hig-motion-duration-fast) var(--hig-motion-easing-standard); } #nd-page .edit-on-github:hover { background: var(--hig-surface); color: var(--hig-text); } .page-nav > a { - padding: var(--hig-space-xl) var(--hig-space-xxl); border: 0; border-radius: var(--docs-radius); background: var(--hig-surface); - transition: background-color var(--docs-duration) var(--docs-ease), color var(--docs-duration) var(--docs-ease); + padding: var(--hig-space-xl) var(--hig-space-xxl); border: 0; border-radius: var(--hig-radius-xl); background: var(--hig-surface); + transition: background-color var(--hig-motion-duration-fast) var(--hig-motion-easing-standard), color var(--hig-motion-duration-fast) var(--hig-motion-easing-standard); } .page-nav > a:hover { background: var(--hig-nested); color: var(--hig-action); } .footer-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); column-gap: var(--hig-space-xxl); row-gap: var(--hig-space-section); } @@ -350,7 +332,7 @@ button[data-search-full] kbd { /* The wordmark's box reserves descender room for the "p"; shift it so the cap height (not the box) centers on the icon: (143/2 - (149-74.6)/2) / 223.6 of the viewBox. */ .footer-wordmark { width: auto; height: 32px; transform: translateY(15.3%); } .footer-col h2 { margin: 0 0 var(--hig-space-md); color: var(--color-fd-muted-foreground); font: 700 var(--text-2xs) / 1.5 var(--font-sans); letter-spacing: .14em; text-transform: uppercase; } -.footer-col a, .footer-base a { transition: color var(--docs-duration) var(--docs-ease), opacity var(--docs-duration) var(--docs-ease); } +.footer-col a, .footer-base a { transition: color var(--hig-motion-duration-fast) var(--hig-motion-easing-standard), opacity var(--hig-motion-duration-fast) var(--hig-motion-easing-standard); } .footer-col a { display: block; width: fit-content; padding: var(--hig-space-xs) 0; color: var(--color-fd-foreground); font-size: var(--text-sm); opacity: .8; } .footer-col a:hover, .footer-base a:hover { color: var(--color-fd-primary); opacity: 1; } .footer-base { display: flex; flex-wrap: wrap; justify-content: space-between; gap: var(--hig-space-sm); margin-top: var(--hig-space-section); color: var(--color-fd-muted-foreground); font-size: var(--text-xs); } @@ -362,13 +344,13 @@ button[data-search-full] kbd { } @media (max-width: 480px) { .footer-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } } .docs-sidebar-links { display: flex; align-items: center; gap: var(--hig-space-lg); padding-top: var(--hig-space-lg); font-size: var(--text-xs); color: var(--color-fd-muted-foreground); } -.docs-sidebar-links a { transition: color var(--docs-duration) var(--docs-ease); } +.docs-sidebar-links a { transition: color var(--hig-motion-duration-fast) var(--hig-motion-easing-standard); } .docs-sidebar-links a:hover { color: var(--color-fd-foreground); } .not-found { max-width: 37.5rem; padding: 7.5rem var(--hig-space-xxl); margin: 0 auto; } .not-found h1 { font-size: var(--text-4xl); margin: var(--hig-space-xxl) 0; } .not-found .hig-button { margin-top: var(--hig-space-xxxl); } .not-found-links { display: flex; flex-wrap: wrap; gap: var(--hig-space-sm) var(--hig-space-xl); margin-top: var(--hig-space-xxxl); font: var(--text-2xs) / 1.5 var(--font-mono); letter-spacing: .09em; } -.not-found-links a { color: var(--color-fd-muted-foreground); transition: color var(--docs-duration) var(--docs-ease); } +.not-found-links a { color: var(--color-fd-muted-foreground); transition: color var(--hig-motion-duration-fast) var(--hig-motion-easing-standard); } .not-found-links a:hover { color: var(--color-fd-foreground); } @media (max-width: 800px) { .home { padding-top: var(--hig-space-xxxl); } @@ -389,14 +371,14 @@ button[data-search-full] kbd { } /* HIG type roles and adaptive targets; the dense chart keeps compact controls. */ -body { font-size: var(--docs-type-body); line-height: var(--docs-type-body-line); } -.hero h1 { font-size: clamp(var(--docs-type-title), 4.4vw, var(--docs-type-display)); line-height: 1.0833; font-weight: var(--docs-type-weight); } -#nd-page h1 { font-size: var(--docs-type-title); line-height: var(--docs-type-title-line); font-weight: var(--docs-type-weight); } -.copy-feedback { color: var(--hig-negative); font-size: var(--docs-type-caption); } +body { font-size: var(--hig-type-body-size); line-height: var(--hig-type-body-line-height); } +.hero h1 { font-size: clamp(var(--hig-type-title-size), 4.4vw, var(--hig-type-display-size)); line-height: 1.0833; font-weight: var(--hig-type-display-weight); } +#nd-page h1 { font-size: var(--hig-type-title-size); line-height: var(--hig-type-title-line-height); font-weight: var(--hig-type-title-weight); } +.copy-feedback { color: var(--hig-negative); font-size: var(--hig-type-caption-size); } @media (pointer: coarse) { .docs-app-link, #nd-page .edit-on-github { min-height: var(--hig-control); } /* Compact HIG controls keep the comfortable 48 px target on touch screens. */ - [data-hig-density='compact'] { --hig-control: var(--docs-control-touch); } + [data-hig-density='compact'] { --hig-control: var(--hig-density-comfortable-target); --hig-button: var(--hig-density-comfortable-target); } } @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0ms !important; transition-duration: 0ms !important; scroll-behavior: auto !important; } diff --git a/apps/docs/components/callout.tsx b/apps/docs/components/callout.tsx index 8fa4c74..78a7d53 100644 --- a/apps/docs/components/callout.tsx +++ b/apps/docs/components/callout.tsx @@ -1,13 +1,13 @@ import type { ReactNode } from 'react'; import { Callout as HIGCallout } from '@bloxwap/hig-react/status'; -const severities = { info: 'info', idea: 'info', warn: 'warning', warning: 'warning', error: 'error', success: 'success' } as const; -const titles = { info: 'Note', warning: 'Important', error: 'Error', success: 'Success' } as const; +const severities = { info: 'note', idea: 'tip', warn: 'warning', warning: 'warning', error: 'error', success: 'success' } as const; +const titles = { note: 'Note', tip: 'Tip', warning: 'Important', error: 'Error', success: 'Success' } as const; -/** Fumadocs' MDX `` API, rendered with the HIG callout. Static docs content is not a live region. */ +/** Fumadocs' MDX `` API, rendered with the HIG callout (note/tip severities, inline-node titles). Static docs content is not a live region. */ export function Callout({ type = 'info', title, children }: { type?: keyof typeof severities; title?: ReactNode; children?: ReactNode }) { - const severity = severities[type] ?? 'info'; + const severity = severities[type] ?? 'note'; return
- {children} + {children}
; } diff --git a/apps/docs/components/install-command.tsx b/apps/docs/components/install-command.tsx index 2627224..72fcfc7 100644 --- a/apps/docs/components/install-command.tsx +++ b/apps/docs/components/install-command.tsx @@ -1,7 +1,7 @@ 'use client'; import { Tabs } from '@bloxwap/hig-react/navigation'; -import { InstallCommand as HIGInstallCommand } from '@bloxwap/hig-react/recipes'; +import { InstallCommand as HIGInstallCommand } from '@bloxwap/hig-react/recipes/install-command'; const managers = [ { name: 'npm', command: 'npm install -g @bloxwap/agent-cli' }, diff --git a/apps/docs/lib/og-card.tsx b/apps/docs/lib/og-card.tsx index 89fca65..de50dfe 100644 --- a/apps/docs/lib/og-card.tsx +++ b/apps/docs/lib/og-card.tsx @@ -13,11 +13,12 @@ const { colors } = tokens; const ink = colors.text.srgb; const muted = colors.muted.srgb; const bar: [color: string, share: number][] = [[colors.action.srgb, 62], [colors.info.srgb, 14], ['#b300ff', 10], ['#ff479c', 8], ['#fffb38', 6]]; -// Approved static Bloxwap Sans instances (derived from @bloxwap/font 0.1.2, OFL) shipped by the HIG tokens package. +// Satori reads static TTFs, which @bloxwap/font (WOFF2 only) does not ship. These approved static Bloxwap Sans instances +// (derived from @bloxwap/font 0.1.2, OFL) come from @bloxwap/hig-native-fonts, a build-time dependency of this renderer. const hig = createRequire(join(process.cwd(), 'package.json')); const assets = Promise.all([ - readFile(hig.resolve('@bloxwap/hig-tokens/fonts/BloxwapSans-Bold.ttf')), - readFile(hig.resolve('@bloxwap/hig-tokens/fonts/BloxwapSans-Black.ttf')), + readFile(hig.resolve('@bloxwap/hig-native-fonts/fonts/BloxwapSans-Bold.ttf')), + readFile(hig.resolve('@bloxwap/hig-native-fonts/fonts/BloxwapSans-Black.ttf')), readFile(join(process.cwd(), '../../packages/agent-cli/package.json'), 'utf8'), ]); diff --git a/apps/docs/package.json b/apps/docs/package.json index 8f597e0..dcf18cf 100644 --- a/apps/docs/package.json +++ b/apps/docs/package.json @@ -16,11 +16,9 @@ }, "dependencies": { "@bloxwap/font": "0.1.2", - "@bloxwap/hig-contracts": "file:../../vendor/bloxwap-hig/bloxwap-hig-contracts-0.1.0-candidate.sha19c75619.tgz", - "@bloxwap/hig-react": "file:../../vendor/bloxwap-hig/bloxwap-hig-react-0.1.0-candidate.sha19c75619.tgz", - "@bloxwap/hig-tokens": "file:../../vendor/bloxwap-hig/bloxwap-hig-tokens-0.1.0-candidate.sha19c75619.tgz", - "@radix-ui/react-dropdown-menu": "2.1.16", - "@radix-ui/react-tooltip": "1.2.8", + "@bloxwap/hig-contracts": "file:../../vendor/bloxwap-hig/bloxwap-hig-contracts-0.1.0-candidate.sha872906a9.tgz", + "@bloxwap/hig-react": "file:../../vendor/bloxwap-hig/bloxwap-hig-react-0.1.0-candidate.sha872906a9.tgz", + "@bloxwap/hig-tokens": "file:../../vendor/bloxwap-hig/bloxwap-hig-tokens-0.1.0-candidate.sha872906a9.tgz", "fumadocs-core": "16.15.14", "fumadocs-mdx": "15.4.5", "fumadocs-ui": "16.15.14", @@ -30,6 +28,7 @@ "react-dom": "^19.2.0" }, "devDependencies": { + "@bloxwap/hig-native-fonts": "file:../../vendor/bloxwap-hig/bloxwap-hig-native-fonts-0.1.0-candidate.sha872906a9.tgz", "@tailwindcss/postcss": "^4.2.0", "@types/mdx": "^2.0.13", "@types/node": "^24.13.6", diff --git a/apps/docs/scripts/hig-tokens.mjs b/apps/docs/scripts/hig-tokens.mjs index b9ea9f8..0a6211e 100644 --- a/apps/docs/scripts/hig-tokens.mjs +++ b/apps/docs/scripts/hig-tokens.mjs @@ -1,6 +1,6 @@ -// Verifies the HIG package install: vendored candidate tarballs match their recorded hashes, the docs depend on -// exactly those files, the installed packages are the same build, and the few JS-only HIG numbers that -// app/global.css copies (radius, motion, type, density) still equal the installed @bloxwap/hig-tokens. +// Verifies the HIG package install: vendored candidate tarballs match their recorded hashes, the docs and the root +// overrides depend on exactly those files, the installed packages are the same build, and app/global.css reads HIG +// values through --hig-* roles instead of copying token numbers or bridging font families. import { readFile, stat } from 'node:fs/promises'; import { createHash } from 'node:crypto'; import assert from 'node:assert/strict'; @@ -11,6 +11,7 @@ const docs = new URL('../', import.meta.url); const vendor = new URL('vendor/bloxwap-hig/', root); const provenance = JSON.parse(await readFile(new URL('provenance.json', vendor), 'utf8')); const manifest = JSON.parse(await readFile(new URL('package.json', docs), 'utf8')); +const workspace = JSON.parse(await readFile(new URL('package.json', root), 'utf8')); /** npm workspaces install a package in apps/docs/node_modules or hoist it to the root. */ async function installedManifest(name) { for (const base of [docs, root]) { @@ -22,33 +23,29 @@ async function installedManifest(name) { for (const { package: name, file, sha256 } of provenance.artifacts) { const digest = createHash('sha256').update(await readFile(new URL(file, vendor))).digest('hex'); assert.equal(digest, sha256, `Vendored HIG tarball changed: ${file}`); - assert.equal(manifest.dependencies[name], `file:../../vendor/bloxwap-hig/${file}`, `${name} must install from vendor/bloxwap-hig/${file}`); + const spec = manifest.dependencies[name] ?? manifest.devDependencies?.[name]; + assert.equal(spec, `file:../../vendor/bloxwap-hig/${file}`, `${name} must install from vendor/bloxwap-hig/${file}`); + if (name in (workspace.overrides ?? {})) { + assert.equal(workspace.overrides[name], `file:./vendor/bloxwap-hig/${file}`, `root override for ${name} must point at vendor/bloxwap-hig/${file}`); + } const installed = await installedManifest(name); assert.equal(installed.version, provenance.version, `${name}: installed ${installed.version}, vendored ${provenance.version}; run npm install`); } assert.equal(tokens.version, provenance.version.split('-')[0]); const css = await readFile(new URL('app/global.css', docs), 'utf8'); -const px = (value) => `${value}px`; -const rem = (value) => `${value / 16}rem`; -const expected = { - '--docs-radius': px(tokens.radius.xl), - '--docs-radius-pill': px(tokens.radius.pill), - '--docs-duration': `${tokens.motion.fast}ms`, - '--docs-control-compact': px(tokens.density.compact.control), - '--docs-control-touch': px(tokens.density.comfortable.control), - '--docs-type-caption': rem(tokens.type.caption.size), - '--docs-type-body': rem(tokens.type.body.size), - '--docs-type-body-line': rem(tokens.type.body.lineHeight), - '--docs-type-title': rem(tokens.type.title.size), - '--docs-type-title-line': rem(tokens.type.title.lineHeight), - '--docs-type-display': rem(tokens.type.display.size), - '--docs-type-weight': String(tokens.type.title.weight), -}; -assert.equal(tokens.type.display.weight, tokens.type.title.weight, '--docs-type-weight serves both title and display'); -for (const [name, value] of Object.entries(expected)) { - const match = css.match(new RegExp(`^\\s*${name}:\\s*([^;]+);`, 'm')); - assert.equal(match?.[1].trim(), value, `app/global.css ${name} must equal @bloxwap/hig-tokens (${value})`); +// Radius, motion, type, density and font families are CSS roles in @bloxwap/hig-tokens/css; a host copy would drift. +const copied = css.match(/^\s*--docs-(?:radius|duration|ease|control|type)[\w-]*\s*:/m); +assert.ok(!copied, `app/global.css must use --hig-radius/motion/type/density roles, not copy ${copied?.[0].trim()}`); +assert.ok(!/var\(--font-bloxwap-(?:sans|mono)\)/.test(css), 'app/global.css must read fonts through --hig-font-sans/--hig-font-mono'); +assert.ok(!/\.hig-(?:button|number)[^{]*\{[^}]*font-family/.test(css), 'HIG controls resolve the font roles themselves; no font-family bridge'); +const roles = ['--hig-radius-xl', '--hig-motion-duration-fast', '--hig-type-body-size', '--hig-density-compact-control', '--hig-font-sans']; +const tokenCss = await readFile(new URL(import.meta.resolve('@bloxwap/hig-tokens/css')), 'utf8'); +for (const role of roles) assert.ok(tokenCss.includes(`${role}:`), `installed @bloxwap/hig-tokens/css must define ${role}`); +// Every role the host reads must exist in the installed HIG CSS, so a renamed or misspelled role fails here, not visually. +const reactCss = await readFile(new URL(import.meta.resolve('@bloxwap/hig-react/css')), 'utf8'); +for (const [, role] of css.matchAll(/var\((--hig-[\w-]+)/g)) { + assert.ok(tokenCss.includes(`${role}:`) || reactCss.includes(`${role}:`), `app/global.css reads ${role}, which HIG does not define`); } // The copied HIG folder, alias layer and committed fonts must not come back. @@ -56,4 +53,4 @@ for (const path of ['vendor/hig', 'styles', 'fonts']) { await assert.rejects(stat(new URL(path, docs)), `apps/docs/${path} must not exist; use the HIG packages`); } assert.ok(!/--bloxwap-[\w-]+\s*:/.test(css), 'app/global.css must not define --bloxwap-* aliases; use --hig-* roles'); -console.log(`HIG ${provenance.version}: ${provenance.artifacts.length} vendored tarballs, installed packages and ${Object.keys(expected).length} host token values verified.`); +console.log(`HIG ${provenance.version}: ${provenance.artifacts.length} vendored tarballs, installed packages and HIG role usage verified.`); diff --git a/apps/docs/scripts/smoke.mjs b/apps/docs/scripts/smoke.mjs index eaeb246..5909b03 100644 --- a/apps/docs/scripts/smoke.mjs +++ b/apps/docs/scripts/smoke.mjs @@ -54,6 +54,26 @@ try { assert.deepEqual(errors, []); }); + await check('HIG controls and code render loaded Bloxwap faces through --hig-font-* (no host font bridge)', async () => { + await page.evaluate(() => document.fonts.ready); + const faces = await page.evaluate(() => { + const loaded = new Set([...document.fonts].filter((face) => face.status === 'loaded').map((face) => face.family.replace(/["']/g, ''))); + return [ + ['Get started', document.querySelector('.hero-actions .hig-button')], + ['install tab', document.querySelector('.package-install [role=tab]')], + ['code window', document.querySelector('.code-window pre')], + ].map(([name, el]) => { + const family = el ? getComputedStyle(el).fontFamily.split(',')[0].trim().replace(/["']/g, '') : ''; + return { name, family, loaded: loaded.has(family), check: el ? document.fonts.check(`600 16px "${family}"`) : false }; + }); + }); + for (const { name, family, loaded, check } of faces) { + assert.ok(/bloxwap/i.test(family) && loaded && check, `${name} renders ${family || 'nothing'} (loaded ${loaded}, check ${check})`); + } + const [sans, , mono] = faces.map((face) => face.family); + assert.notEqual(sans, mono, 'code uses Bloxwap Mono, controls use Bloxwap Sans'); + }); + await check('install tabs: arrow/Home/End keys move selection and focus', async () => { const tabs = page.getByRole('tablist', { name: 'Package manager' }); const npm = tabs.getByRole('tab', { name: 'npm' }); @@ -139,6 +159,13 @@ try { await noHorizontalScroll(phone); await capture(phone, 'home-mobile'); }); + await check('390 px touch: compact HIG copy controls keep a 48 px target', async () => { + await phone.goto(url('/')); + for (const name of ['Copy workflow commands', /copy install command/i]) { + const box = await phone.getByRole('button', { name }).filter({ visible: true }).first().boundingBox(); + assert.ok(box && box.height >= 48 && box.width >= 48, `${name}: ${box?.width}x${box?.height}`); + } + }); await check('390 px sidebar navigation reaches a deep link', async () => { await phone.goto(url('/docs/')); await noHorizontalScroll(phone); @@ -152,6 +179,19 @@ try { await noHorizontalScroll(phone); }); await mobile.close(); + + const reduced = await browser.newContext({ viewport: { width: 1440, height: 900 }, reducedMotion: 'reduce' }); + const still = await reduced.newPage(); + await check('reduced motion: HIG motion roles drop to 0 ms', async () => { + await still.goto(url('/')); + const motion = await still.evaluate(() => ({ + role: getComputedStyle(document.documentElement).getPropertyValue('--hig-motion-duration-fast').trim(), + link: getComputedStyle(document.querySelector('.guide-links a')).transitionDuration, + })); + assert.match(motion.role, /^0m?s$/, `--hig-motion-duration-fast is ${motion.role}`); // the CSS minifier writes 0ms as 0s + assert.match(motion.link, /^0s(, 0s)*$/); + }); + await reduced.close(); } finally { await browser.close(); server.kill(); diff --git a/evidence/hig/docs-package-refresh/README.md b/evidence/hig/docs-package-refresh/README.md new file mode 100644 index 0000000..e4a58bd --- /dev/null +++ b/evidence/hig/docs-package-refresh/README.md @@ -0,0 +1,95 @@ +# Docs: HIG candidate refresh, no Radix peers, no font bridge, no copied token numbers (bloxwap/hig#58) + +Follow-up to [docs-package-migration](../docs-package-migration/README.md) (agent-cli#47). That PR left three +recorded exceptions in the agent-cli row of HIG's `planning/adoption.json`. HIG main has since fixed the cause of each: + +| Exception after #47 | HIG fix | This change | +| --- | --- | --- | +| `@radix-ui/react-dropdown-menu` and `react-tooltip` installed only so `@bloxwap/hig-react/recipes` could resolve `./overlay.js` (hig#63) | hig#74: overlay-free `@bloxwap/hig-react/recipes/install-command` entry, caret Radix peers | Import the overlay-free entry; both Radix packages are removed from `apps/docs/package.json` and the lockfile | +| Font-family bridge in `global.css` (`.hig-button`/`.hig-number` mapped to the Next loader variables) (hig#65) | hig#75: `--hig-font-sans`/`--hig-font-mono` resolve `var(--font-bloxwap-*)` first | Bridge deleted; Tailwind's `--font-sans`/`--font-mono` now read the HIG roles | +| 12 radius, motion, type and density numbers copied into `--docs-*` and checked against the JS tokens | hig#75/#81: `--hig-radius-*`, `--hig-motion-*`, `--hig-type-*`, `--hig-density-*` CSS roles | Copies deleted; `global.css` reads the roles; HIG's reduced-motion rule replaces the host one | + +Also in this refresh: + +- **Fonts (hig#64):** `@bloxwap/hig-tokens` no longer ships TTFs. The social-card renderer reads + `BloxwapSans-{Bold,Black}.ttf` from `@bloxwap/hig-native-fonts` as a build-time dev dependency, as + `docs/migration/native.md` in HIG recommends for Satori. `@bloxwap/font` ships WOFF2 only, which Satori cannot read. + All 13 social cards are byte-identical to main (`cmp` over `out/og/**/*.png`). +- **Callout (hig#69):** MDX `` maps `info` to HIG's `note` and `idea` to `tip`, and passes inline-node titles + through. Before this, non-string titles were replaced with a default. No current page uses a callout. +- **Overrides:** HIG React now depends on exact `@bloxwap/hig-tokens`/`hig-contracts` candidate versions, so the root + `package.json` adds `overrides` that point them at the vendored tarballs, as `docs/governance/new-repository.md` + describes. + +HIG source: [bloxwap/hig@872906a](https://github.com/bloxwap/hig/tree/872906a9071469af8714b3b6fb5cc7bd64d2d6f3), +`0.1.0-candidate.sha872906a9`, built with `npm ci && npm run generate:fonts && npm run build && npm run +release:dry-run -- --channel candidate` (dry run: `published: false`, no tags, no releases). + +## Before / after + +Static export with `NEXT_PUBLIC_BASE_PATH=/agent-cli`, measured the same way on both builds. Sizes are emitted file +bytes, not transfer sizes; gzip is the sum of per-file gzip. Raw data: [measurements.json](measurements.json). + +| | Before (main 778c8f5, HIG 19c7561) | After (HIG 872906a) | +| --- | ---: | ---: | +| Docs source CSS (`app/global.css`) | 408 lines, 21,885 B | 390 lines, 21,373 B | +| Copied HIG values in `global.css` | 14 `--docs-*` (radius, motion, easing, density, type; 12 checked against JS tokens) | 0 (only `--docs-icon`, a host size) | +| Host font-family bridge rules | 2 (`.hig-button`, `.hig-number`) | 0 | +| Committed font files in `apps/docs` | 0 | 0 | +| Emitted CSS | 150,822 B (24,357 gz) | 153,404 B (24,739 gz) | +| Emitted JS | 1,268,205 B (406,649 gz) | 1,270,472 B (407,458 gz) | +| Emitted fonts | 22 files, 12,965,628 B | same | +| Total static export | 20,552,673 B | 20,557,522 B | +| Docs direct dependencies (runtime) | 21 (13) | 20 (11) | +| Lockfile package entries | 762 | 735 | +| `@radix-ui/*` lockfile entries | 90 | 62 | +| Vendored tarballs | 3 files, 4,448,522 B | 4 files, 4,454,889 B | + +- **CSS +2.6 KB (+0.4 KB gzip):** HIG's token sheet now carries the radius, motion, type, density and font roles, + and the React sheet gained input, callout-severity and range focus rules. The host sheet lost 512 B. +- **JS +2.3 KB (+0.8 KB gzip):** HIG React's newer `Tabs`, `IconButton`, `InstallCommand`, `Alert`/`EmptyState` + and provider code (localizable built-in strings, hig#62). No Radix code is bundled before or after. +- **Dependencies:** −2 runtime (`@radix-ui/react-dropdown-menu`, `@radix-ui/react-tooltip`), +1 dev + (`@bloxwap/hig-native-fonts`), −27 lockfile entries. `npm ls` no longer reports invalid HIG peers: the caret ranges + accept the `@radix-ui/react-dialog`/`react-popover` 1.3.1 that Fumadocs installs. +- **Vendored bytes:** roughly unchanged. The 4.4 MB of TTFs moved from the tokens tarball to the native-fonts tarball. + +## Drift + +`node /scripts/drift.mjs --root . --config hig-drift.json`: before (main) and after both report +`Scoped anti-drift: passed (38 files, 0 dated exceptions)`. CI now checks out the drift script from the same commit +as the tarballs. + +## Validation (automated and browser; local macOS arm64, Node 24.10.0) + +- `npm run build`, `npm run lint`, `npm run typecheck`, `npm test` (38 files, 71 tests) and `npm run test:package` + pass. +- `npm run docs:check` passes: content, HIG provenance, `file:` specs and overrides, installed versions, every + `--hig-*` role `global.css` reads exists in the installed HIG CSS, no copied token numbers or font bridge, Next + typegen and `tsc`. +- `NEXT_PUBLIC_BASE_PATH=/agent-cli npm run docs:build`: the postbuild checker verified 16 HTML pages, 597 local + links/assets, 13 social cards and the `/agent-cli` base path. +- `npm run docs:smoke` (Playwright Chromium, against the `/agent-cli` static preview) passes 13/13. Three checks are + new: + - HIG controls (`Get started`, the install tab) and the code window render a loaded Bloxwap face through + `--hig-font-*`, with Sans and Mono distinct. A negative run, with the loader variable removed from the built + CSS, fails this check. + - At 390 px with touch, the compact copy buttons keep a 48 × 48 px target. + - With `prefers-reduced-motion: reduce`, `--hig-motion-duration-fast` resolves to 0 and site transitions are 0 s. + +## Visual differences (screenshots/) + +1440×900 and 390×844 captures from the smoke run. Search, quickstart, errors table and mobile navigation are +pixel-identical to main (not stored). + +- Primary and secondary buttons (`Get started`, `Command reference`, 404 `Open documentation`) are 44 px tall + instead of 48 px. This is HIG's new web button height (hig#80); compact controls stay 36 px, and 48 px on touch. + The home page is 4 px shorter on desktop and 8 px shorter at 390 px. +- No other change: fonts, colors, radius, motion and spacing resolve to the same values through the HIG roles. + +## Not covered + +- Large-text and RTL checks were not run. Only Chromium was automated; Firefox and WebKit were not run. +- No physical devices. Simulators and emulators do not apply to this static docs change. + +Rollback: revert the PR. That restores the 19c7561 tarballs, the Radix packages, the lockfile and the copied values. diff --git a/evidence/hig/docs-package-refresh/measurements.json b/evidence/hig/docs-package-refresh/measurements.json new file mode 100644 index 0000000..86cf0a3 --- /dev/null +++ b/evidence/hig/docs-package-refresh/measurements.json @@ -0,0 +1,135 @@ +{ + "note": "Static export with NEXT_PUBLIC_BASE_PATH=/agent-cli; emitted file sizes on disk (gzip = per-file gzip default level sum), not transfer sizes. Measured over apps/docs/out, the tracked apps/docs sources and package-lock.json. Local macOS arm64, Node 24.10.0.", + "hig": { + "before": { + "commit": "19c75619fa5020c015aa639172c83fd02f2bc0a2", + "version": "0.1.0-candidate.sha19c75619" + }, + "after": { + "commit": "872906a9071469af8714b3b6fb5cc7bd64d2d6f3", + "version": "0.1.0-candidate.sha872906a9" + } + }, + "before": { + "label": "before", + "commit": "778c8f5", + "basePath": "/agent-cli", + "source": { + "css": { + "files": 1, + "bytes": 21885, + "gzip": 5235, + "lines": 408, + "paths": [ + "apps/docs/app/global.css" + ] + }, + "fonts": { + "files": 0, + "bytes": 0, + "gzip": 0, + "paths": [] + } + }, + "emitted": { + "css": { + "files": 2, + "bytes": 150822, + "gzip": 24357 + }, + "js": { + "files": 27, + "bytes": 1268205, + "gzip": 406649 + }, + "fonts": { + "files": 22, + "bytes": 12965628, + "gzip": 12917806 + }, + "html": 16, + "total": 20552673 + }, + "socialCardHomeSha256": "79b2b6dd80feb212c0dee28da1da270b3f50dd31b90dc1e4510a738d73786072", + "dependencies": { + "docsDirect": 21, + "docsRuntime": 13, + "lockfilePackages": 762, + "radixEntries": 90, + "radixPackages": [ + "@radix-ui/react-dialog@1.3.1", + "@radix-ui/react-dropdown-menu@2.1.16", + "@radix-ui/react-popover@1.3.1", + "@radix-ui/react-tooltip@1.2.8" + ] + } + }, + "after": { + "label": "after", + "commit": "this PR (working tree on 778c8f5)", + "basePath": "/agent-cli", + "source": { + "css": { + "files": 1, + "bytes": 21373, + "gzip": 4948, + "lines": 390, + "paths": [ + "apps/docs/app/global.css" + ] + }, + "fonts": { + "files": 0, + "bytes": 0, + "gzip": 0, + "paths": [] + } + }, + "emitted": { + "css": { + "files": 2, + "bytes": 153404, + "gzip": 24739 + }, + "js": { + "files": 27, + "bytes": 1270472, + "gzip": 407458 + }, + "fonts": { + "files": 22, + "bytes": 12965628, + "gzip": 12917806 + }, + "html": 16, + "total": 20557522 + }, + "socialCardHomeSha256": "79b2b6dd80feb212c0dee28da1da270b3f50dd31b90dc1e4510a738d73786072", + "dependencies": { + "docsDirect": 20, + "docsRuntime": 11, + "lockfilePackages": 735, + "radixEntries": 62, + "radixPackages": [ + "@radix-ui/react-dialog@1.3.1", + "@radix-ui/react-popover@1.3.1" + ] + } + }, + "controlHeightsDesktop": { + "before": { + "Get started": 48, + "Command reference": 48, + "Copy workflow commands (compact)": 36 + }, + "after": { + "Get started": 44, + "Command reference": 44, + "Copy workflow commands (compact)": 36 + } + }, + "vendoredTarballBytes": { + "before": 4448522, + "after": 4454889 + } +} diff --git a/evidence/hig/docs-package-refresh/screenshots/after-home-desktop.jpg b/evidence/hig/docs-package-refresh/screenshots/after-home-desktop.jpg new file mode 100644 index 0000000..079814d Binary files /dev/null and b/evidence/hig/docs-package-refresh/screenshots/after-home-desktop.jpg differ diff --git a/evidence/hig/docs-package-refresh/screenshots/after-home-mobile.jpg b/evidence/hig/docs-package-refresh/screenshots/after-home-mobile.jpg new file mode 100644 index 0000000..1b395fc Binary files /dev/null and b/evidence/hig/docs-package-refresh/screenshots/after-home-mobile.jpg differ diff --git a/evidence/hig/docs-package-refresh/screenshots/after-not-found-desktop.jpg b/evidence/hig/docs-package-refresh/screenshots/after-not-found-desktop.jpg new file mode 100644 index 0000000..51866de Binary files /dev/null and b/evidence/hig/docs-package-refresh/screenshots/after-not-found-desktop.jpg differ diff --git a/evidence/hig/docs-package-refresh/screenshots/before-home-desktop.jpg b/evidence/hig/docs-package-refresh/screenshots/before-home-desktop.jpg new file mode 100644 index 0000000..b436926 Binary files /dev/null and b/evidence/hig/docs-package-refresh/screenshots/before-home-desktop.jpg differ diff --git a/evidence/hig/docs-package-refresh/screenshots/before-home-mobile.jpg b/evidence/hig/docs-package-refresh/screenshots/before-home-mobile.jpg new file mode 100644 index 0000000..3ddbd75 Binary files /dev/null and b/evidence/hig/docs-package-refresh/screenshots/before-home-mobile.jpg differ diff --git a/evidence/hig/docs-package-refresh/screenshots/before-not-found-desktop.jpg b/evidence/hig/docs-package-refresh/screenshots/before-not-found-desktop.jpg new file mode 100644 index 0000000..c5fb606 Binary files /dev/null and b/evidence/hig/docs-package-refresh/screenshots/before-not-found-desktop.jpg differ diff --git a/package-lock.json b/package-lock.json index 9241cc7..d087444 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,11 +23,9 @@ "hasInstallScript": true, "dependencies": { "@bloxwap/font": "0.1.2", - "@bloxwap/hig-contracts": "file:../../vendor/bloxwap-hig/bloxwap-hig-contracts-0.1.0-candidate.sha19c75619.tgz", - "@bloxwap/hig-react": "file:../../vendor/bloxwap-hig/bloxwap-hig-react-0.1.0-candidate.sha19c75619.tgz", - "@bloxwap/hig-tokens": "file:../../vendor/bloxwap-hig/bloxwap-hig-tokens-0.1.0-candidate.sha19c75619.tgz", - "@radix-ui/react-dropdown-menu": "2.1.16", - "@radix-ui/react-tooltip": "1.2.8", + "@bloxwap/hig-contracts": "file:../../vendor/bloxwap-hig/bloxwap-hig-contracts-0.1.0-candidate.sha872906a9.tgz", + "@bloxwap/hig-react": "file:../../vendor/bloxwap-hig/bloxwap-hig-react-0.1.0-candidate.sha872906a9.tgz", + "@bloxwap/hig-tokens": "file:../../vendor/bloxwap-hig/bloxwap-hig-tokens-0.1.0-candidate.sha872906a9.tgz", "fumadocs-core": "16.15.14", "fumadocs-mdx": "15.4.5", "fumadocs-ui": "16.15.14", @@ -37,6 +35,7 @@ "react-dom": "^19.2.0" }, "devDependencies": { + "@bloxwap/hig-native-fonts": "file:../../vendor/bloxwap-hig/bloxwap-hig-native-fonts-0.1.0-candidate.sha872906a9.tgz", "@tailwindcss/postcss": "^4.2.0", "@types/mdx": "^2.0.13", "@types/node": "^24.13.6", @@ -50,42 +49,6 @@ "node": ">=24" } }, - "apps/docs/node_modules/@bloxwap/hig-react": { - "version": "0.1.0-candidate.sha19c75619", - "resolved": "file:vendor/bloxwap-hig/bloxwap-hig-react-0.1.0-candidate.sha19c75619.tgz", - "integrity": "sha512-BmUEg145HFZ25gdSxBKnoBMva2KWK0a3l38ED/vNlltlPjOBu1s7r0uWN4kYjL/6Q/Itm5TyCeehcpjanc3pog==", - "license": "MIT", - "dependencies": { - "@bloxwap/hig-contracts": "0.1.0-candidate.sha19c75619", - "@bloxwap/hig-tokens": "0.1.0-candidate.sha19c75619" - }, - "peerDependencies": { - "@bloxwap/chart": "^0.3.0", - "@radix-ui/react-dialog": "1.1.15", - "@radix-ui/react-dropdown-menu": "2.1.16", - "@radix-ui/react-popover": "1.1.15", - "@radix-ui/react-tooltip": "1.2.8", - "react": "^19.1.0", - "react-dom": "^19.1.0" - }, - "peerDependenciesMeta": { - "@bloxwap/chart": { - "optional": true - }, - "@radix-ui/react-dialog": { - "optional": true - }, - "@radix-ui/react-dropdown-menu": { - "optional": true - }, - "@radix-ui/react-popover": { - "optional": true - }, - "@radix-ui/react-tooltip": { - "optional": true - } - } - }, "apps/docs/node_modules/@types/node": { "version": "24.19.2", "resolved": "https://registry.npmjs.org/@types/node/-/node-24.19.2.tgz", @@ -159,15 +122,58 @@ } }, "node_modules/@bloxwap/hig-contracts": { - "version": "0.1.0-candidate.sha19c75619", - "resolved": "file:vendor/bloxwap-hig/bloxwap-hig-contracts-0.1.0-candidate.sha19c75619.tgz", - "integrity": "sha512-twceZ7JuiC38Zv20QseKb3WRuUnrKHT0mV3cDIWhqcqcT2Bp1T238le0zy0Fehg0uvGjo2VvXhAJ5UMkE8kjmg==", + "version": "0.1.0-candidate.sha872906a9", + "resolved": "file:vendor/bloxwap-hig/bloxwap-hig-contracts-0.1.0-candidate.sha872906a9.tgz", + "integrity": "sha512-fSeW+NnmNdkChw0klhVaiG1531uXrayVGpRvQcAd+kzLWckrK0aORmqzIV1Rh7fawQUY6OBs6E3K5swhG/JsBA==", + "license": "MIT" + }, + "node_modules/@bloxwap/hig-native-fonts": { + "version": "0.1.0-candidate.sha872906a9", + "resolved": "file:vendor/bloxwap-hig/bloxwap-hig-native-fonts-0.1.0-candidate.sha872906a9.tgz", + "integrity": "sha512-9+5Dn5wU2xTXqu7gOICxLluPlynz9eitVGSAspKMxk8IEzryXR9bkd6ur8Oo82Knes3ZjjYa0m1iBmy4+2BcQA==", + "dev": true, "license": "MIT" }, + "node_modules/@bloxwap/hig-react": { + "version": "0.1.0-candidate.sha872906a9", + "resolved": "file:vendor/bloxwap-hig/bloxwap-hig-react-0.1.0-candidate.sha872906a9.tgz", + "integrity": "sha512-9lbojjexf0AEqrQesxhm8KBUBsLNgczPg/ISGhT7/bPznYpscTaIHsp0t/wn5zsiPxK8UlkOhGcab63zEZEisQ==", + "license": "MIT", + "dependencies": { + "@bloxwap/hig-contracts": "0.1.0-candidate.sha872906a9", + "@bloxwap/hig-tokens": "0.1.0-candidate.sha872906a9" + }, + "peerDependencies": { + "@bloxwap/chart": "^0.3.0", + "@radix-ui/react-dialog": "^1.1.15", + "@radix-ui/react-dropdown-menu": "^2.1.16", + "@radix-ui/react-popover": "^1.1.15", + "@radix-ui/react-tooltip": "^1.2.8", + "react": "^19.1.0", + "react-dom": "^19.1.0" + }, + "peerDependenciesMeta": { + "@bloxwap/chart": { + "optional": true + }, + "@radix-ui/react-dialog": { + "optional": true + }, + "@radix-ui/react-dropdown-menu": { + "optional": true + }, + "@radix-ui/react-popover": { + "optional": true + }, + "@radix-ui/react-tooltip": { + "optional": true + } + } + }, "node_modules/@bloxwap/hig-tokens": { - "version": "0.1.0-candidate.sha19c75619", - "resolved": "file:vendor/bloxwap-hig/bloxwap-hig-tokens-0.1.0-candidate.sha19c75619.tgz", - "integrity": "sha512-kk4a9nqv13yPaAQXwxvj7DHK9WXeGYPLInABAP0yplbLy/GQMx2JBDu7VKdkr73/2b1fuamdyuvk3s3pLJtAlQ==", + "version": "0.1.0-candidate.sha872906a9", + "resolved": "file:vendor/bloxwap-hig/bloxwap-hig-tokens-0.1.0-candidate.sha872906a9.tgz", + "integrity": "sha512-EX6mTsJP+YVzDknQNIoFzWwjNsCwm1WVhkJQ6GZ3h6xn9+ylh5itGnQ5MlrlQxba72SXyLMGwDckimnpFYvvKg==", "license": "MIT" }, "node_modules/@bloxwap/hyperliquid": { @@ -1315,9 +1321,6 @@ "cpu": [ "arm" ], - "libc": [ - "glibc" - ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -1334,9 +1337,6 @@ "cpu": [ "arm64" ], - "libc": [ - "glibc" - ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -1353,9 +1353,6 @@ "cpu": [ "ppc64" ], - "libc": [ - "glibc" - ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -1372,9 +1369,6 @@ "cpu": [ "riscv64" ], - "libc": [ - "glibc" - ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -1391,9 +1385,6 @@ "cpu": [ "s390x" ], - "libc": [ - "glibc" - ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -1410,9 +1401,6 @@ "cpu": [ "x64" ], - "libc": [ - "glibc" - ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -1429,9 +1417,6 @@ "cpu": [ "arm64" ], - "libc": [ - "musl" - ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -1448,9 +1433,6 @@ "cpu": [ "x64" ], - "libc": [ - "musl" - ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -1467,9 +1449,6 @@ "cpu": [ "arm" ], - "libc": [ - "glibc" - ], "license": "Apache-2.0", "optional": true, "os": [ @@ -1492,9 +1471,6 @@ "cpu": [ "arm64" ], - "libc": [ - "glibc" - ], "license": "Apache-2.0", "optional": true, "os": [ @@ -1517,9 +1493,6 @@ "cpu": [ "ppc64" ], - "libc": [ - "glibc" - ], "license": "Apache-2.0", "optional": true, "os": [ @@ -1542,9 +1515,6 @@ "cpu": [ "riscv64" ], - "libc": [ - "glibc" - ], "license": "Apache-2.0", "optional": true, "os": [ @@ -1567,9 +1537,6 @@ "cpu": [ "s390x" ], - "libc": [ - "glibc" - ], "license": "Apache-2.0", "optional": true, "os": [ @@ -1592,9 +1559,6 @@ "cpu": [ "x64" ], - "libc": [ - "glibc" - ], "license": "Apache-2.0", "optional": true, "os": [ @@ -1617,9 +1581,6 @@ "cpu": [ "arm64" ], - "libc": [ - "musl" - ], "license": "Apache-2.0", "optional": true, "os": [ @@ -1642,9 +1603,6 @@ "cpu": [ "x64" ], - "libc": [ - "musl" - ], "license": "Apache-2.0", "optional": true, "os": [ @@ -1934,9 +1892,6 @@ "cpu": [ "arm64" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -1953,9 +1908,6 @@ "cpu": [ "arm64" ], - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -1972,9 +1924,6 @@ "cpu": [ "x64" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -1991,9 +1940,6 @@ "cpu": [ "x64" ], - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -2089,7 +2035,6 @@ "integrity": "sha512-jSNrRIyvPVLL5E1z/tS5zLAprosGz/FuI1PWwEOz59j3E4TTTzSpqKb/RDGqJhhW0QHYISGXxq582wGx6T11Tw==", "devOptional": true, "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/oxc-project" } @@ -2315,6 +2260,7 @@ "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.3.1.tgz", "integrity": "sha512-+0E4qvVTwjAWra9sEhJ+9BTsvHE00zkUuNw1VGh7S+Gc13dfYk+S1PVQdchWDj+XYHhAai7Z7IpzXVDCGsDplg==", "license": "MIT", + "peer": true, "dependencies": { "@radix-ui/primitive": "1.2.0", "@radix-ui/react-compose-refs": "1.1.5", @@ -2389,583 +2335,72 @@ } } }, - "node_modules/@radix-ui/react-dropdown-menu": { - "version": "2.1.16", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.16.tgz", - "integrity": "sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-menu": "2.1.16", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/primitive": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz", - "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==", - "license": "MIT" - }, - "node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/react-context": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", - "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/react-id": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz", - "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/react-primitive": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", - "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-slot": "1.2.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/react-slot": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", - "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/react-use-controllable-state": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", - "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-effect-event": "0.0.2", - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/react-use-effect-event": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", - "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/react-use-layout-effect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", - "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-focus-guards": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.2.0.tgz", - "integrity": "sha512-MPm5R0iRGUDrDnPNxmLBkv+X7pN4XKzt+MbWJEuJQsH3NFH4omrbpXpucyYCCKTSt+na/ZxGhEWQrWTZ0285cA==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-focus-scope": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.3.1.tgz", - "integrity": "sha512-ugeMhbXt4y5S2T1GnIqbWDKEN962PDwnX1fN0eKOOgf5f63Dh2mn8F1FUySlgW0iF6GiVsRF32DzuDIWTUyQJg==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.5", - "@radix-ui/react-primitive": "2.2.0", - "@radix-ui/react-use-callback-ref": "1.1.5" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-id": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.4.tgz", - "integrity": "sha512-TMQp2llA+RYn7JcjnrMnz7wN4pcVttPZnRZo52PLQsoLVKzNlVwUeHmfePgTgRluXFvlD3GD5g5MOVVTJCO0qA==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.4" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-menu": { - "version": "2.1.16", - "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.16.tgz", - "integrity": "sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-dismissable-layer": "1.1.11", - "@radix-ui/react-focus-guards": "1.1.3", - "@radix-ui/react-focus-scope": "1.1.7", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-popper": "1.2.8", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-roving-focus": "1.1.11", - "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "aria-hidden": "^1.2.4", - "react-remove-scroll": "^2.6.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/primitive": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz", - "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==", - "license": "MIT" - }, - "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-arrow": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz", - "integrity": "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.1.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-collection": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.7.tgz", - "integrity": "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-context": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", - "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-direction": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz", - "integrity": "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz", - "integrity": "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-escape-keydown": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-focus-guards": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz", - "integrity": "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-focus-scope": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz", - "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-id": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz", - "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-popper": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.8.tgz", - "integrity": "sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==", - "license": "MIT", - "dependencies": { - "@floating-ui/react-dom": "^2.0.0", - "@radix-ui/react-arrow": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-layout-effect": "1.1.1", - "@radix-ui/react-use-rect": "1.1.1", - "@radix-ui/react-use-size": "1.1.1", - "@radix-ui/rect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-portal": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz", - "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==", + "node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/primitive": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz", + "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==", + "extraneous": true, + "license": "MIT" + }, + "node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "extraneous": true, "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-layout-effect": "1.1.1" - }, "peerDependencies": { "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { "optional": true - }, - "@types/react-dom": { - "optional": true } } }, - "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-presence": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.5.tgz", - "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==", + "node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/react-context": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", + "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", + "extraneous": true, "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-use-layout-effect": "1.1.1" - }, "peerDependencies": { "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { "optional": true - }, - "@types/react-dom": { - "optional": true } } }, - "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-primitive": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", - "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/react-id": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz", + "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", + "extraneous": true, "license": "MIT", "dependencies": { - "@radix-ui/react-slot": "1.2.3" + "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { "optional": true - }, - "@types/react-dom": { - "optional": true } } }, - "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-roving-focus": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.11.tgz", - "integrity": "sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==", + "node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "extraneous": true, "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-controllable-state": "1.2.2" + "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", @@ -2982,10 +2417,11 @@ } } }, - "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-slot": { + "node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/react-slot": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "extraneous": true, "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" @@ -3000,25 +2436,11 @@ } } }, - "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-use-callback-ref": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", - "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-use-controllable-state": { + "node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/react-use-controllable-state": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", + "extraneous": true, "license": "MIT", "dependencies": { "@radix-ui/react-use-effect-event": "0.0.2", @@ -3034,10 +2456,11 @@ } } }, - "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-use-effect-event": { + "node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/react-use-effect-event": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", + "extraneous": true, "license": "MIT", "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" @@ -3052,10 +2475,11 @@ } } }, - "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-use-layout-effect": { + "node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/react-use-layout-effect": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", + "extraneous": true, "license": "MIT", "peerDependencies": { "@types/react": "*", @@ -3067,31 +2491,53 @@ } } }, - "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-use-rect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz", - "integrity": "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==", + "node_modules/@radix-ui/react-focus-guards": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.2.0.tgz", + "integrity": "sha512-MPm5R0iRGUDrDnPNxmLBkv+X7pN4XKzt+MbWJEuJQsH3NFH4omrbpXpucyYCCKTSt+na/ZxGhEWQrWTZ0285cA==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-scope": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.3.1.tgz", + "integrity": "sha512-ugeMhbXt4y5S2T1GnIqbWDKEN962PDwnX1fN0eKOOgf5f63Dh2mn8F1FUySlgW0iF6GiVsRF32DzuDIWTUyQJg==", "license": "MIT", "dependencies": { - "@radix-ui/rect": "1.1.1" + "@radix-ui/react-compose-refs": "1.1.5", + "@radix-ui/react-primitive": "2.2.0", + "@radix-ui/react-use-callback-ref": "1.1.5" }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { "optional": true + }, + "@types/react-dom": { + "optional": true } } }, - "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-use-size": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz", - "integrity": "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==", + "node_modules/@radix-ui/react-id": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.4.tgz", + "integrity": "sha512-TMQp2llA+RYn7JcjnrMnz7wN4pcVttPZnRZo52PLQsoLVKzNlVwUeHmfePgTgRluXFvlD3GD5g5MOVVTJCO0qA==", "license": "MIT", "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.1" + "@radix-ui/react-use-layout-effect": "1.1.4" }, "peerDependencies": { "@types/react": "*", @@ -3103,12 +2549,6 @@ } } }, - "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/rect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.1.tgz", - "integrity": "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==", - "license": "MIT" - }, "node_modules/@radix-ui/react-navigation-menu": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.4.1.tgz", @@ -3151,6 +2591,7 @@ "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.3.1.tgz", "integrity": "sha512-ZNxvXRx5W2Wos4fXCXb5lpdqN0Z5chf+mStOUOTr4ik7d+62MRvoe9rzCA/eGNg36lxXqSrKEKmwuZEcUrIstw==", "license": "MIT", + "peer": true, "dependencies": { "@radix-ui/primitive": "1.2.0", "@radix-ui/react-compose-refs": "1.1.5", @@ -3399,50 +2840,18 @@ } } }, - "node_modules/@radix-ui/react-tooltip": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.2.8.tgz", - "integrity": "sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.11", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-popper": "1.2.8", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-visually-hidden": "1.2.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/primitive": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz", "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==", + "extraneous": true, "license": "MIT" }, "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-arrow": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz", "integrity": "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==", + "extraneous": true, "license": "MIT", "dependencies": { "@radix-ui/react-primitive": "2.1.3" @@ -3466,6 +2875,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "extraneous": true, "license": "MIT", "peerDependencies": { "@types/react": "*", @@ -3481,6 +2891,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", + "extraneous": true, "license": "MIT", "peerDependencies": { "@types/react": "*", @@ -3496,6 +2907,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz", "integrity": "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==", + "extraneous": true, "license": "MIT", "dependencies": { "@radix-ui/primitive": "1.1.3", @@ -3523,6 +2935,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz", "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", + "extraneous": true, "license": "MIT", "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" @@ -3541,6 +2954,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.8.tgz", "integrity": "sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==", + "extraneous": true, "license": "MIT", "dependencies": { "@floating-ui/react-dom": "^2.0.0", @@ -3573,6 +2987,7 @@ "version": "1.1.9", "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz", "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==", + "extraneous": true, "license": "MIT", "dependencies": { "@radix-ui/react-primitive": "2.1.3", @@ -3597,6 +3012,7 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.5.tgz", "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==", + "extraneous": true, "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", @@ -3621,6 +3037,7 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "extraneous": true, "license": "MIT", "dependencies": { "@radix-ui/react-slot": "1.2.3" @@ -3644,6 +3061,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "extraneous": true, "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" @@ -3662,6 +3080,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==", + "extraneous": true, "license": "MIT", "peerDependencies": { "@types/react": "*", @@ -3677,6 +3096,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", + "extraneous": true, "license": "MIT", "dependencies": { "@radix-ui/react-use-effect-event": "0.0.2", @@ -3696,6 +3116,7 @@ "version": "0.0.2", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", + "extraneous": true, "license": "MIT", "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" @@ -3714,6 +3135,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", + "extraneous": true, "license": "MIT", "peerDependencies": { "@types/react": "*", @@ -3729,6 +3151,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz", "integrity": "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==", + "extraneous": true, "license": "MIT", "dependencies": { "@radix-ui/rect": "1.1.1" @@ -3747,6 +3170,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz", "integrity": "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==", + "extraneous": true, "license": "MIT", "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" @@ -3765,6 +3189,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.3.tgz", "integrity": "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==", + "extraneous": true, "license": "MIT", "dependencies": { "@radix-ui/react-primitive": "2.1.3" @@ -3788,6 +3213,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.1.tgz", "integrity": "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==", + "extraneous": true, "license": "MIT" }, "node_modules/@radix-ui/react-use-callback-ref": { @@ -3846,39 +3272,6 @@ } } }, - "node_modules/@radix-ui/react-use-escape-keydown": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz", - "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-callback-ref": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-escape-keydown/node_modules/@radix-ui/react-use-callback-ref": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", - "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-use-is-hydrated": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-is-hydrated/-/react-use-is-hydrated-0.1.3.tgz", @@ -4001,7 +3394,6 @@ "os": [ "android" ], - "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -4018,7 +3410,6 @@ "os": [ "android" ], - "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -4035,7 +3426,6 @@ "os": [ "darwin" ], - "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -4052,7 +3442,6 @@ "os": [ "darwin" ], - "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -4069,7 +3458,6 @@ "os": [ "freebsd" ], - "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -4086,7 +3474,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -4103,7 +3490,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -4120,7 +3506,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -4137,7 +3522,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -4154,7 +3538,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -4171,7 +3554,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -4188,7 +3570,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -4205,7 +3586,6 @@ "os": [ "openharmony" ], - "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -4222,7 +3602,6 @@ "os": [ "win32" ], - "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -4239,7 +3618,6 @@ "os": [ "win32" ], - "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -4249,8 +3627,7 @@ "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", "devOptional": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.64.6", @@ -4912,9 +4289,6 @@ "arm64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MPL-2.0", "optional": true, "os": [ @@ -4936,9 +4310,6 @@ "arm64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MPL-2.0", "optional": true, "os": [ @@ -4960,9 +4331,6 @@ "x64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MPL-2.0", "optional": true, "os": [ @@ -4984,9 +4352,6 @@ "x64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MPL-2.0", "optional": true, "os": [ @@ -5159,9 +4524,6 @@ "arm64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -5179,9 +4541,6 @@ "arm64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -5199,9 +4558,6 @@ "x64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -5219,9 +4575,6 @@ "x64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -5370,6 +4723,7 @@ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", "license": "MIT", + "peer": true, "dependencies": { "@types/unist": "*" } @@ -5378,7 +4732,8 @@ "version": "2.0.14", "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.14.tgz", "integrity": "sha512-T48PeuJtvLosNTPVhfnIp3i/n3a4g4Bad7YCq5k64D4u7NwDrAotikQ+5+sjtUvBmxCMlbo3dVL+C2dP0rWHzg==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@types/ms": { "version": "2.1.0", @@ -5410,6 +4765,7 @@ "integrity": "sha512-N0rFCuH9YoxG9/m61l9MfpJKfmLOVU0em7ipIz6TRgSSkvReLB9vL85GB+yr8Bs5leqpvg96JSwF4ZS1s4viQg==", "devOptional": true, "license": "MIT", + "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -5420,6 +4776,7 @@ "integrity": "sha512-ZI7bU42mZXXKHn/qNLEw2IrbiINU7X5+vfgdixBHkCNpYWXjKgfQ/P+uyGb5CjOLB9UcnTeg3rylQtV2hym44Q==", "devOptional": true, "license": "MIT", + "peer": true, "peerDependencies": { "@types/react": "^19.3.0" } @@ -5481,6 +4838,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.71.2.tgz", "integrity": "sha512-aTtmZjp/x3gsGHkDs04/1I8kNogBJkpQaeGaN0PfiG43NzDEmW2n+OP5im9wfsvyX0yP1UZWBrAGtDBfH9jEVw==", "dev": true, + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.71.2", "@typescript-eslint/types": "8.71.2", @@ -5824,9 +5182,6 @@ "arm" ], "deprecated": "yuku-analyzer runs on yuku-core since 0.14", - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -5841,9 +5196,6 @@ "arm" ], "deprecated": "yuku-analyzer runs on yuku-core since 0.14", - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -5858,9 +5210,6 @@ "arm64" ], "deprecated": "yuku-analyzer runs on yuku-core since 0.14", - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -5875,9 +5224,6 @@ "arm64" ], "deprecated": "yuku-analyzer runs on yuku-core since 0.14", - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -5892,9 +5238,6 @@ "x64" ], "deprecated": "yuku-analyzer runs on yuku-core since 0.14", - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -5909,9 +5252,6 @@ "x64" ], "deprecated": "yuku-analyzer runs on yuku-core since 0.14", - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -5977,6 +5317,7 @@ "version": "8.19.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.19.0.tgz", "integrity": "sha512-oJlA3XiRm7Cyk6qFD2Jn8ak9B7jSy0qy00ADO3+8dpT0LSjFihQYv4C02LFCSYJV3Q37xYwwRy5m+IpIiUzqWw==", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -6575,6 +5916,7 @@ "integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==", "hasInstallScript": true, "license": "MIT", + "peer": true, "bin": { "esbuild": "bin/esbuild" }, @@ -6628,6 +5970,7 @@ "integrity": "sha512-DgZS62aPLXKlnxILS/AYCoRvHaZeXceIzlXPkkGGzJWSow1aEk0lbTlxUSlyjC8jcaKxAdOnTDz+o1JFSBsyjw==", "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -7055,6 +6398,7 @@ "resolved": "https://registry.npmjs.org/fumadocs-core/-/fumadocs-core-16.15.14.tgz", "integrity": "sha512-2Jov3x/wCkz8C8MWpmWHoWyLn+pBNrER49m35qqAV0OZekVE8mgs71TS6OfgJHzO00jICkIB+NFhv/XQx/yf/Q==", "license": "MIT", + "peer": true, "dependencies": { "@fumari/image-size": "^0.1.1", "estree-util-value-to-estree": "^3.5.0", @@ -7802,6 +7146,7 @@ "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", "devOptional": true, "license": "MIT", + "peer": true, "bin": { "jiti": "lib/jiti-cli.mjs" } @@ -7913,7 +7258,6 @@ "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==", "devOptional": true, "license": "MPL-2.0", - "peer": true, "dependencies": { "detect-libc": "^2.0.3" }, @@ -7950,7 +7294,6 @@ "os": [ "android" ], - "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -7971,7 +7314,6 @@ "os": [ "darwin" ], - "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -7992,7 +7334,6 @@ "os": [ "darwin" ], - "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -8013,7 +7354,6 @@ "os": [ "freebsd" ], - "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -8034,7 +7374,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -8055,7 +7394,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -8076,7 +7414,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -8097,7 +7434,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -8118,7 +7454,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -8139,7 +7474,6 @@ "os": [ "win32" ], - "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -8160,7 +7494,6 @@ "os": [ "win32" ], - "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -8240,6 +7573,7 @@ "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.545.0.tgz", "integrity": "sha512-7r1/yUuflQDSt4f1bpn5ZAocyIxcTyVyBBChSVtBKn5M+392cPmI5YJMWOJKk/HUWGm5wg83chlAZtCcGbEZtw==", "license": "ISC", + "peer": true, "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } @@ -9585,6 +8919,7 @@ "resolved": "https://registry.npmjs.org/next/-/next-16.3.6.tgz", "integrity": "sha512-L+otWM/aQbYTx98aZhgEoMb4bZAXx1YVW4UMA/vuCyCoWG5HJyZUili8QAkqzrcC+5///tsz3s0M+SlyB5bLMw==", "license": "MIT", + "peer": true, "dependencies": { "@next/env": "16.3.6", "@swc/helpers": "0.5.23", @@ -10018,6 +9353,7 @@ "url": "https://github.com/sponsors/ai" } ], + "peer": true, "dependencies": { "nanoid": "^3.3.20", "picocolors": "^1.1.1", @@ -10133,6 +9469,7 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.3.0.tgz", "integrity": "sha512-E8LUcbtBWt20bbl2YoHfx4ZDBdxVTfOKtCZn9cDSJ4l6/nuoApcpIBcj47t2wZoVX8g2ZHuMHbiShgCR1T5Sog==", "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -10142,6 +9479,7 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.3.0.tgz", "integrity": "sha512-JDk8dgif51OjFoDE70+OT9ICyYr+69HlmihNwp1+Nsfbna3t5sIiCa9ZJktDmQ4/1b/rn26hIAR2uYXDMr5r0Q==", "license": "MIT", + "peer": true, "dependencies": { "scheduler": "^0.28.0" }, @@ -10497,7 +9835,6 @@ "integrity": "sha512-/5apOkwWxtACcQtZ5WlrAsKS4JwXVThQPJZ3RqIruRY9UG9M8e0VlXN068xum/JRKA4aIUoJ13ghe/kGCvidiQ==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "@oxc-project/types": "=0.153.0", "@rolldown/pluginutils": "^1.0.0" @@ -10891,7 +10228,8 @@ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.3.3.tgz", "integrity": "sha512-gOhV3P7ufE62QDGg1zVaTgCR+EtPv92k2nIhVcVKcLmxT1sUBsQGhnZj175j+MqRt4zLF7ic+sCYjfhxMxj7YQ==", "devOptional": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/tapable": { "version": "2.3.3", @@ -11102,6 +10440,7 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "devOptional": true, + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -11386,6 +10725,7 @@ "url": "https://github.com/sponsors/wevm" } ], + "peer": true, "dependencies": { "@noble/curves": "1.9.1", "@noble/hashes": "1.8.0", @@ -11717,6 +11057,7 @@ "version": "8.22.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.22.0.tgz", "integrity": "sha512-Ydggc987+RO0AnWtZ/7Wq9FtNvcrL1b/RO0ud9mWjUPgDrsAAwQSF51sm2hm1XofbU/4jkpGEsLFsZZxU+1DOg==", + "peer": true, "engines": { "node": ">=10.0.0" }, @@ -11742,6 +11083,7 @@ "version": "2.9.1", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.1.tgz", "integrity": "sha512-3NxN8+78OdzbT7C/WjGsyfPAtJaN3FNDsWxv7Y7mcDsT/oOmgW8BpyQQFFBnvZE3j9Y2Sdz1ULFLezL7Eb2yFw==", + "peer": true, "bin": { "yaml": "bin.mjs" }, @@ -11891,6 +11233,7 @@ "version": "4.6.7", "resolved": "https://registry.npmjs.org/zod/-/zod-4.6.7.tgz", "integrity": "sha512-g8W2D2kU6a8untc053fX1uVBKzM7yqAxW/3zwk83+6RyF2+SKOuV+c0wBDhUwzV1PaGapmZH+rmcUzPf+3CGwg==", + "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/package.json b/package.json index 0045daf..b04cff9 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,8 @@ "@changesets/cli": "^3.0.3" }, "overrides": { + "@bloxwap/hig-contracts": "file:./vendor/bloxwap-hig/bloxwap-hig-contracts-0.1.0-candidate.sha872906a9.tgz", + "@bloxwap/hig-tokens": "file:./vendor/bloxwap-hig/bloxwap-hig-tokens-0.1.0-candidate.sha872906a9.tgz", "esbuild": "^0.28.1", "mdast-util-to-markdown": "2.1.2" } diff --git a/vendor/bloxwap-hig/README.md b/vendor/bloxwap-hig/README.md index 11518f4..e87194f 100644 --- a/vendor/bloxwap-hig/README.md +++ b/vendor/bloxwap-hig/README.md @@ -1,15 +1,18 @@ # Vendored Bloxwap HIG candidate packages `@bloxwap/hig-*` is not on npm yet ([bloxwap/hig#56](https://github.com/bloxwap/hig/issues/56)). The docs app -(`apps/docs`) installs these packed candidates through `file:` dependencies. Nothing here is copied source. +(`apps/docs`) installs these packed candidates through `file:` dependencies, and the root `overrides` point HIG's +internal `@bloxwap/hig-tokens` and `@bloxwap/hig-contracts` dependencies at the same files. Nothing here is copied +source. | Tarball | Package | Bytes | sha256 | | --- | --- | ---: | --- | -| `bloxwap-hig-tokens-0.1.0-candidate.sha19c75619.tgz` | `@bloxwap/hig-tokens` | 4,428,740 | `55542394d90b4b8eef0fd17c413595152032195aab24e3bcd55060041d28830e` | -| `bloxwap-hig-react-0.1.0-candidate.sha19c75619.tgz` | `@bloxwap/hig-react` | 16,726 | `3a5e6b7a014900df339737feafa7458077aaf8a512881dc58a98a623dbd1fc3d` | -| `bloxwap-hig-contracts-0.1.0-candidate.sha19c75619.tgz` | `@bloxwap/hig-contracts` (dependency of react) | 3,056 | `9c61c4b82f64335bb1b7ce1bfcf25e2e5f060e0e19c52fce3b99b17a96f410c7` | +| `bloxwap-hig-tokens-0.1.0-candidate.sha872906a9.tgz` | `@bloxwap/hig-tokens` | 8,108 | `62b4007b5e06ee571352f8a33bd7e14025745fe42234d8532092739ff49f6196` | +| `bloxwap-hig-react-0.1.0-candidate.sha872906a9.tgz` | `@bloxwap/hig-react` | 20,287 | `5835fea5e4f701815fb4152cf079901d0f8af634ef3fbb537b40fc48500670c4` | +| `bloxwap-hig-contracts-0.1.0-candidate.sha872906a9.tgz` | `@bloxwap/hig-contracts` (dependency of react) | 6,119 | `ca8d5e0fe7e6138c056e9b45182e664c69d7217295264dff56a09290acabd352` | +| `bloxwap-hig-native-fonts-0.1.0-candidate.sha872906a9.tgz` | `@bloxwap/hig-native-fonts` (dev, social cards only) | 4,420,375 | `2de088737f6f76c594e95de237342dbe4457387ed9134628ef12049266195f77` | -Source: [bloxwap/hig@19c7561](https://github.com/bloxwap/hig/tree/19c75619fa5020c015aa639172c83fd02f2bc0a2), HIG 0.1.0 +Source: [bloxwap/hig@872906a](https://github.com/bloxwap/hig/tree/872906a9071469af8714b3b6fb5cc7bd64d2d6f3), HIG 0.1.0 candidate. Built in a clean clone (Node 24, Python with `fonttools[woff]==4.61.1` and `brotli==1.2.0`): ```sh @@ -17,28 +20,32 @@ npm ci && npm run generate:fonts && npm run build npm run release:dry-run -- --channel candidate ``` -The dry run reported `published: false`, with no tags or releases. Only the three packages the docs use are +The dry run reported `published: false`, with no tags or releases. Only the four packages the docs use are vendored; `hig-feedback` and `hig-native` are not needed. `provenance.json` holds the same hashes in machine form, -and `npm run docs:check` (`apps/docs/scripts/hig-tokens.mjs`) fails if a tarball, the `file:` specs or the installed -versions drift apart. +and `npm run docs:check` (`apps/docs/scripts/hig-tokens.mjs`) fails if a tarball, the `file:` specs, the overrides or +the installed versions drift apart. What the docs use: -- `@bloxwap/hig-tokens/css` for the `--hig-*` palette, spacing and control heights; `@bloxwap/hig-react/css` for the - control recipes (`hig-button`, `hig-surface`, `hig-link`, `hig-sr-only`, focus ring). -- `@bloxwap/hig-react/button` `IconButton` (code copy), `/navigation` `Tabs` and `/recipes` `InstallCommand` - (package-manager install), `/status` `Alert`, `EmptyState` and `Callout` (search error, no results, MDX callouts). -- `@bloxwap/hig-tokens` `tokens` and `@bloxwap/hig-tokens/fonts/BloxwapSans-{Bold,Black}.ttf` for the Open Graph - renderer (approved static instances of `@bloxwap/font` 0.1.2; OFL in the package). - -Upgrade: rebuild the tarballs from a reviewed HIG commit, replace these files, update the three `file:` specs in -`apps/docs/package.json`, `provenance.json`, this table and the drift checkout `ref` in -`.github/workflows/docs.yml`, then run `npm install`. When #56 publishes, swap the `file:` specs for registry versions -and delete this folder. Rollback is a revert of the adopting commit, which restores the previous lockfile and imports. - -Packaging note: `@bloxwap/hig-react` declares exact optional peers (`@radix-ui/react-dialog` and -`@radix-ui/react-popover` 1.1.15). Fumadocs already installs 1.3.1, so `npm ls` reports those optional peers as -invalid. The docs never render HIG's Radix-backed overlays, so nothing runs against the mismatched version. However, -`@bloxwap/hig-react/recipes` statically imports `./overlay.js`, so the docs install the optional peers -`@radix-ui/react-dropdown-menu@2.1.16` and `@radix-ui/react-tooltip@1.2.8`. They are only needed to resolve that -import; the overlay code is tree-shaken out of the bundle. Remove them once HIG decouples `recipes` from `overlay`. +- `@bloxwap/hig-tokens/css` for the `--hig-*` palette, spacing, radius, motion, type, density and font-family roles; + `@bloxwap/hig-react/css` for the control recipes (`hig-button`, `hig-surface`, `hig-link`, `hig-sr-only`, focus + ring). +- `@bloxwap/hig-react/button` `IconButton` (code copy), `/navigation` `Tabs` and `/recipes/install-command` + `InstallCommand` (package-manager install), `/status` `Alert`, `EmptyState` and `Callout` (search error, no results, + MDX callouts). +- `@bloxwap/hig-tokens` `tokens` for the Open Graph colors, and + `@bloxwap/hig-native-fonts/fonts/BloxwapSans-{Bold,Black}.ttf` for the Open Graph renderer. Satori needs static + TTFs, which `@bloxwap/font` (WOFF2) does not ship; these are the approved static instances of `@bloxwap/font` + 0.1.2 (OFL in the package). It is a dev dependency because the cards are rendered at build time. + +The docs install no Radix packages for HIG. `@bloxwap/hig-react/recipes/install-command` is an overlay-free entry, so +the optional `@radix-ui/react-dropdown-menu` and `@radix-ui/react-tooltip` peers are no longer needed +([bloxwap/hig#63](https://github.com/bloxwap/hig/issues/63)). HIG's Radix peers are caret ranges now, so the +`@radix-ui/react-dialog`/`react-popover` 1.3.1 that Fumadocs installs satisfy them and `npm ls` reports no invalid +HIG peers. + +Upgrade: rebuild the tarballs from a reviewed HIG commit, replace these files, update the four `file:` specs in +`apps/docs/package.json`, the two `overrides` in the root `package.json`, `provenance.json`, this table and the drift +checkout `ref` in `.github/workflows/docs.yml`, then run `npm install`. When #56 publishes, swap the `file:` specs for +registry versions, drop the overrides and delete this folder. Rollback is a revert of the adopting commit, which +restores the previous tarballs, lockfile and imports. diff --git a/vendor/bloxwap-hig/bloxwap-hig-contracts-0.1.0-candidate.sha19c75619.tgz b/vendor/bloxwap-hig/bloxwap-hig-contracts-0.1.0-candidate.sha19c75619.tgz deleted file mode 100644 index 23685a2..0000000 Binary files a/vendor/bloxwap-hig/bloxwap-hig-contracts-0.1.0-candidate.sha19c75619.tgz and /dev/null differ diff --git a/vendor/bloxwap-hig/bloxwap-hig-contracts-0.1.0-candidate.sha872906a9.tgz b/vendor/bloxwap-hig/bloxwap-hig-contracts-0.1.0-candidate.sha872906a9.tgz new file mode 100644 index 0000000..d53be99 Binary files /dev/null and b/vendor/bloxwap-hig/bloxwap-hig-contracts-0.1.0-candidate.sha872906a9.tgz differ diff --git a/vendor/bloxwap-hig/bloxwap-hig-native-fonts-0.1.0-candidate.sha872906a9.tgz b/vendor/bloxwap-hig/bloxwap-hig-native-fonts-0.1.0-candidate.sha872906a9.tgz new file mode 100644 index 0000000..5282b59 Binary files /dev/null and b/vendor/bloxwap-hig/bloxwap-hig-native-fonts-0.1.0-candidate.sha872906a9.tgz differ diff --git a/vendor/bloxwap-hig/bloxwap-hig-react-0.1.0-candidate.sha19c75619.tgz b/vendor/bloxwap-hig/bloxwap-hig-react-0.1.0-candidate.sha19c75619.tgz deleted file mode 100644 index bea4a92..0000000 Binary files a/vendor/bloxwap-hig/bloxwap-hig-react-0.1.0-candidate.sha19c75619.tgz and /dev/null differ diff --git a/vendor/bloxwap-hig/bloxwap-hig-react-0.1.0-candidate.sha872906a9.tgz b/vendor/bloxwap-hig/bloxwap-hig-react-0.1.0-candidate.sha872906a9.tgz new file mode 100644 index 0000000..99aafeb Binary files /dev/null and b/vendor/bloxwap-hig/bloxwap-hig-react-0.1.0-candidate.sha872906a9.tgz differ diff --git a/vendor/bloxwap-hig/bloxwap-hig-tokens-0.1.0-candidate.sha19c75619.tgz b/vendor/bloxwap-hig/bloxwap-hig-tokens-0.1.0-candidate.sha19c75619.tgz deleted file mode 100644 index cf9b06c..0000000 Binary files a/vendor/bloxwap-hig/bloxwap-hig-tokens-0.1.0-candidate.sha19c75619.tgz and /dev/null differ diff --git a/vendor/bloxwap-hig/bloxwap-hig-tokens-0.1.0-candidate.sha872906a9.tgz b/vendor/bloxwap-hig/bloxwap-hig-tokens-0.1.0-candidate.sha872906a9.tgz new file mode 100644 index 0000000..3473134 Binary files /dev/null and b/vendor/bloxwap-hig/bloxwap-hig-tokens-0.1.0-candidate.sha872906a9.tgz differ diff --git a/vendor/bloxwap-hig/provenance.json b/vendor/bloxwap-hig/provenance.json index 5194415..5297f3d 100644 --- a/vendor/bloxwap-hig/provenance.json +++ b/vendor/bloxwap-hig/provenance.json @@ -1,7 +1,7 @@ { "repository": "bloxwap/hig", - "commit": "19c75619fa5020c015aa639172c83fd02f2bc0a2", - "version": "0.1.0-candidate.sha19c75619", + "commit": "872906a9071469af8714b3b6fb5cc7bd64d2d6f3", + "version": "0.1.0-candidate.sha872906a9", "producedBy": "npm ci && npm run generate:fonts && npm run build && npm run release:dry-run -- --channel candidate", "dryRun": { "published": false, @@ -11,21 +11,27 @@ "artifacts": [ { "package": "@bloxwap/hig-tokens", - "file": "bloxwap-hig-tokens-0.1.0-candidate.sha19c75619.tgz", - "bytes": 4428740, - "sha256": "55542394d90b4b8eef0fd17c413595152032195aab24e3bcd55060041d28830e" + "file": "bloxwap-hig-tokens-0.1.0-candidate.sha872906a9.tgz", + "bytes": 8108, + "sha256": "62b4007b5e06ee571352f8a33bd7e14025745fe42234d8532092739ff49f6196" }, { "package": "@bloxwap/hig-react", - "file": "bloxwap-hig-react-0.1.0-candidate.sha19c75619.tgz", - "bytes": 16726, - "sha256": "3a5e6b7a014900df339737feafa7458077aaf8a512881dc58a98a623dbd1fc3d" + "file": "bloxwap-hig-react-0.1.0-candidate.sha872906a9.tgz", + "bytes": 20287, + "sha256": "5835fea5e4f701815fb4152cf079901d0f8af634ef3fbb537b40fc48500670c4" }, { "package": "@bloxwap/hig-contracts", - "file": "bloxwap-hig-contracts-0.1.0-candidate.sha19c75619.tgz", - "bytes": 3056, - "sha256": "9c61c4b82f64335bb1b7ce1bfcf25e2e5f060e0e19c52fce3b99b17a96f410c7" + "file": "bloxwap-hig-contracts-0.1.0-candidate.sha872906a9.tgz", + "bytes": 6119, + "sha256": "ca8d5e0fe7e6138c056e9b45182e664c69d7217295264dff56a09290acabd352" + }, + { + "package": "@bloxwap/hig-native-fonts", + "file": "bloxwap-hig-native-fonts-0.1.0-candidate.sha872906a9.tgz", + "bytes": 4420375, + "sha256": "2de088737f6f76c594e95de237342dbe4457387ed9134628ef12049266195f77" } ] }