From 5e5c60b5692c98721f17c29fd058407fb5453713 Mon Sep 17 00:00:00 2001 From: Sil Date: Wed, 25 Feb 2026 19:19:27 +0100 Subject: [PATCH 01/17] chore: add v0.8 plan and quality infrastructure --- .github/workflows/ci.yml | 48 ++ ROADMAP.md | 76 ++- eslint.config.mjs | 76 +++ package.json | 19 +- pnpm-lock.yaml | 1326 ++++++++++++++++++++++++++++++++++++++ src/lib/a11y.test.ts | 21 + src/lib/utils.test.ts | 22 + tsconfig.json | 2 +- vitest.config.ts | 10 + vitest.setup.ts | 1 + 10 files changed, 1579 insertions(+), 22 deletions(-) create mode 100644 .github/workflows/ci.yml create mode 100644 eslint.config.mjs create mode 100644 src/lib/a11y.test.ts create mode 100644 src/lib/utils.test.ts create mode 100644 vitest.config.ts create mode 100644 vitest.setup.ts diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 000000000..9ecbe4ce5 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,48 @@ +name: CI + +on: + pull_request: + push: + branches: + - main + - codex/** + +jobs: + quality: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup pnpm + uses: pnpm/action-setup@v4 + with: + version: 10 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version-file: ".nvmrc" + cache: "pnpm" + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Astro check + run: pnpm check + + - name: Lint + run: pnpm lint + + - name: Vitest + run: pnpm test + + - name: Build + run: pnpm build + + - name: Build registry + run: pnpm registry:build + + - name: Verify registry drift + run: pnpm registry:drift diff --git a/ROADMAP.md b/ROADMAP.md index 10dedf2bc..28c733c0d 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -1,31 +1,69 @@ # Roadmap -## Overall Focus +## Overall focus -- **Developer experience**: Enable developers to build content-driven websites faster and more reliably, with clean APIs that AI agents can fully understand and assist with. -- **Content editor experience**: Provide an architecture where content editors can manage pages and blocks independently, without needing developer involvement. +- **Developer experience**: Help developers build content-driven Astro websites faster with clean, predictable APIs that are easy for AI agents to understand. +- **Content editor experience**: Keep architecture modular so content editors can manage pages and blocks independently. -## Upcoming phases +## v0.8 release strategy (single release) -### Phase 1: Foundation (Q1 2026) +This version is focused on reliability, stability, minimalism, and simplicity. -- Maintain stability (fix bugs, review PRs promptly) -- Hire a developer (preferably with design skills) +### Non-negotiable rules -### Phase 2: v0.8 Release (Q1 2026) +- ShadCN API coherence comes first (props, variants, naming, styling semantics). +- Interactive components must use `data-slot`. +- New components in this version must be supported by `data-slot`. +- Keep code surface small: prefer replacing/removing custom interaction code over adding wrappers. +- v0.8 component additions are limited to: + - `tooltip` + - `popover` -- Add missing components: Breadcrumb, Toast, Tooltip, etc. -- Add e-commerce components: Quantity Input, Gallery, etc. -- Add e-commerce blocks: Product Details Page, Product Listing Page, etc. +### Reference inputs -### Phase 3: Brand & Visibility (Q2 2026) +- `data-slot`: https://github.com/bejamas/data-slot +- `bejamas/ui`: https://github.com/bejamas/ui +- `shadcn/ui`: https://github.com/shadcn-ui/ui +- `bearnie`: https://github.com/michael-andreuzza/bearnie -- Hire branding agency for Fulldev overall identity -- Improve all components and blocks with specialized designer -- Optimize for SEO and become the #1 ranking Astro UI library +### Quality infrastructure requirements -### Phase 4: Theming System (under consideration) +- Add CI workflow with: + - `pnpm check` + - `pnpm lint` + - `pnpm test` (Vitest only) + - `pnpm build` + - `pnpm registry:build` + - registry drift check +- Add linting with bug-risk-focused rules (avoid style-only friction). +- Add Vitest coverage for: + - core utility logic + - interaction logic used by migrated UI components + - accessibility checks using `vitest-axe` where applicable +- Optionally add Lighthouse CI in non-blocking mode for trend visibility. -- Provide preset themes that apply styles globally -- Similar to shadcn's theme generator -- Easy theme switching and customization +### Definitive PR queue (no fixed dates) + +1. `PR-01` Scope lock and docs alignment for v0.8 policy. +2. `PR-02` Quality infrastructure (CI + lint + Vitest + registry drift checks). +3. `PR-03` Deterministic build hardening (external fetch/font fallbacks). +4. `PR-04` ShadCN API coherence pass (before migration). +5. `PR-05` `data-slot` migration: `accordion`, `collapsible`. +6. `PR-06` `data-slot` migration: `tabs`. +7. `PR-07` `data-slot` migration: `dialog`, `sheet`. +8. `PR-08` `data-slot` migration: `navigation-menu`. +9. `PR-09` Add `tooltip` and `popover` only (+ docs + registry entries). +10. `PR-10` Cleanup and packaging integrity (remove dead/empty artifacts, align docs/config). +11. `PR-11` Release candidate + final stabilization + v0.8 release notes. + +### Branching model for v0.8 + +- Integration branch: `codex/0.8`. +- Working branches: short-lived branches from `codex/0.8` per PR. +- Merge target for all v0.8 PRs: `codex/0.8`. +- After release hardening, merge `codex/0.8` back to the default branch. + +## Post-v0.8 direction + +- Resume broader component and block expansion after the reliability baseline is stable. +- Revisit additional features (e-commerce, expanded primitives, theme presets) in a later release. diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 000000000..c5f208341 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,76 @@ +// @ts-nocheck +import js from "@eslint/js" +import astro from "eslint-plugin-astro" +import tsParser from "@typescript-eslint/parser" +import tsPlugin from "@typescript-eslint/eslint-plugin" + +export default [ + { + ignores: [ + ".astro/**", + "dist/**", + "node_modules/**", + "public/r/**", + "*.min.js", + ], + }, + js.configs.recommended, + ...astro.configs.recommended, + { + files: ["**/*.{ts,mts,cts}"], + languageOptions: { + parser: tsParser, + parserOptions: { + ecmaVersion: "latest", + sourceType: "module", + }, + }, + plugins: { + "@typescript-eslint": tsPlugin, + }, + rules: { + "no-unused-vars": "off", + "no-undef": "off", + "@typescript-eslint/no-unused-vars": [ + "error", + { + argsIgnorePattern: "^_", + varsIgnorePattern: "^_", + }, + ], + "@typescript-eslint/consistent-type-imports": [ + "error", + { + prefer: "type-imports", + }, + ], + "@typescript-eslint/no-explicit-any": "warn", + }, + }, + { + files: ["**/*.test.ts"], + languageOptions: { + globals: { + document: "readonly", + window: "readonly", + }, + }, + }, + { + files: ["**/*.astro"], + languageOptions: { + parserOptions: { + parser: tsParser, + extraFileExtensions: [".astro"], + }, + }, + rules: { + "astro/no-set-html-directive": "off", + "astro/no-conflict-set-directives": "off", + "no-undef": "off", + "no-unused-vars": "off", + "no-redeclare": "off", + "no-case-declarations": "warn", + }, + }, +] diff --git a/package.json b/package.json index 6caa17ee3..322a2f03b 100644 --- a/package.json +++ b/package.json @@ -33,11 +33,17 @@ "dev": "astro dev", "start": "astro dev", "check": "astro check", + "lint": "eslint .", + "lint:fix": "eslint . --fix", + "test": "vitest run", + "test:watch": "vitest", "preview": "astro preview", "registry:build": "shadcn build", + "registry:drift": "git diff --exit-code -- registry.json public/r", "build": "astro build", "build:prod": "astro check && shadcn build && astro build ", - "build:test": "astro check && shadcn build && astro build && astro preview --host" + "build:test": "astro check && shadcn build && astro build && astro preview --host", + "ci": "pnpm check && pnpm lint && pnpm test && pnpm build && pnpm registry:build && pnpm registry:drift" }, "dependencies": { "@astrojs/mdx": "^4.3.8", @@ -64,10 +70,19 @@ }, "devDependencies": { "@astrojs/check": "^0.9.4", + "@eslint/js": "^10.0.1", "@ianvs/prettier-plugin-sort-imports": "^4.7.0", "@types/node": "^24.8.1", + "@typescript-eslint/eslint-plugin": "^8.56.1", + "@typescript-eslint/parser": "^8.56.1", + "astro-eslint-parser": "^1.3.0", + "eslint": "^10.0.2", + "eslint-plugin-astro": "^1.6.0", + "jsdom": "^28.1.0", "prettier": "3.6.2", "prettier-plugin-astro": "0.14.1", - "prettier-plugin-tailwindcss": "^0.7.0" + "prettier-plugin-tailwindcss": "^0.7.0", + "vitest": "^4.0.18", + "vitest-axe": "^0.1.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d4bdbbe3a..f082b3a30 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -75,12 +75,33 @@ importers: '@astrojs/check': specifier: ^0.9.4 version: 0.9.4(prettier-plugin-astro@0.14.1)(prettier@3.6.2)(typescript@5.9.3) + '@eslint/js': + specifier: ^10.0.1 + version: 10.0.1(eslint@10.0.2(jiti@2.6.1)) '@ianvs/prettier-plugin-sort-imports': specifier: ^4.7.0 version: 4.7.0(@vue/compiler-sfc@3.5.22)(prettier@3.6.2) '@types/node': specifier: ^24.8.1 version: 24.8.1 + '@typescript-eslint/eslint-plugin': + specifier: ^8.56.1 + version: 8.56.1(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': + specifier: ^8.56.1 + version: 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) + astro-eslint-parser: + specifier: ^1.3.0 + version: 1.3.0 + eslint: + specifier: ^10.0.2 + version: 10.0.2(jiti@2.6.1) + eslint-plugin-astro: + specifier: ^1.6.0 + version: 1.6.0(eslint@10.0.2(jiti@2.6.1)) + jsdom: + specifier: ^28.1.0 + version: 28.1.0(@noble/hashes@1.8.0) prettier: specifier: 3.6.2 version: 3.6.2 @@ -90,9 +111,18 @@ importers: prettier-plugin-tailwindcss: specifier: ^0.7.0 version: 0.7.0(@ianvs/prettier-plugin-sort-imports@4.7.0(@vue/compiler-sfc@3.5.22)(prettier@3.6.2))(prettier-plugin-astro@0.14.1)(prettier@3.6.2) + vitest: + specifier: ^4.0.18 + version: 4.0.18(@types/node@24.8.1)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@1.8.0))(lightningcss@1.30.1)(msw@2.10.4(@types/node@24.8.1)(typescript@5.9.3))(sass-embedded@1.93.2)(sass@1.93.2)(yaml@2.8.1) + vitest-axe: + specifier: ^0.1.0 + version: 0.1.0(vitest@4.0.18(@types/node@24.8.1)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@1.8.0))(lightningcss@1.30.1)(msw@2.10.4(@types/node@24.8.1)(typescript@5.9.3))(sass-embedded@1.93.2)(sass@1.93.2)(yaml@2.8.1)) packages: + '@acemir/cssom@0.9.31': + resolution: {integrity: sha512-ZnR3GSaH+/vJ0YlHau21FjfLYjMpYVIzTD8M8vIEQvIGxeOXyXdzCI140rrCY862p/C/BbzWsjc1dgnM9mkoTA==} + '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} @@ -101,6 +131,16 @@ packages: resolution: {integrity: sha512-9q/yCljni37pkMr4sPrI3G4jqdIk074+iukc5aFJl7kmDCCsiJrbZ6zKxnES1Gwg+i9RcDZwvktl23puGslmvA==} hasBin: true + '@asamuzakjp/css-color@5.0.1': + resolution: {integrity: sha512-2SZFvqMyvboVV1d15lMf7XiI3m7SDqXUuKaTymJYLN6dSGadqp+fVojqJlVoMlbZnlTmu3S0TLwLTJpvBMO1Aw==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + + '@asamuzakjp/dom-selector@6.8.1': + resolution: {integrity: sha512-MvRz1nCqW0fsy8Qz4dnLIvhOlMzqDVBabZx6lH+YywFDdjXhMY37SmpV1XFX3JzG5GWHn63j6HX6QPr3lZXHvQ==} + + '@asamuzakjp/nwsapi@2.3.9': + resolution: {integrity: sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==} + '@astrojs/check@0.9.4': resolution: {integrity: sha512-IOheHwCtpUfvogHHsvu0AbeRZEnjJg3MopdLddkJE70mULItS/Vh37BHcI00mcOJcH1vhD3odbpvWokpxam7xA==} hasBin: true @@ -312,6 +352,10 @@ packages: resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} engines: {node: '>=6.9.0'} + '@bramus/specificity@2.4.2': + resolution: {integrity: sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==} + hasBin: true + '@bufbuild/protobuf@2.9.0': resolution: {integrity: sha512-rnJenoStJ8nvmt9Gzye8nkYd6V22xUAnu4086ER7h1zJ508vStko4pMvDeQ446ilDTFpV5wnoc5YS7XvMwwMqA==} @@ -332,6 +376,37 @@ packages: resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} engines: {node: '>=0.1.90'} + '@csstools/color-helpers@6.0.2': + resolution: {integrity: sha512-LMGQLS9EuADloEFkcTBR3BwV/CGHV7zyDxVRtVDTwdI2Ca4it0CCVTT9wCkxSgokjE5Ho41hEPgb8OEUwoXr6Q==} + engines: {node: '>=20.19.0'} + + '@csstools/css-calc@3.1.1': + resolution: {integrity: sha512-HJ26Z/vmsZQqs/o3a6bgKslXGFAungXGbinULZO3eMsOyNJHeBBZfup5FiZInOghgoM4Hwnmw+OgbJCNg1wwUQ==} + engines: {node: '>=20.19.0'} + peerDependencies: + '@csstools/css-parser-algorithms': ^4.0.0 + '@csstools/css-tokenizer': ^4.0.0 + + '@csstools/css-color-parser@4.0.2': + resolution: {integrity: sha512-0GEfbBLmTFf0dJlpsNU7zwxRIH0/BGEMuXLTCvFYxuL1tNhqzTbtnFICyJLTNK4a+RechKP75e7w42ClXSnJQw==} + engines: {node: '>=20.19.0'} + peerDependencies: + '@csstools/css-parser-algorithms': ^4.0.0 + '@csstools/css-tokenizer': ^4.0.0 + + '@csstools/css-parser-algorithms@4.0.0': + resolution: {integrity: sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==} + engines: {node: '>=20.19.0'} + peerDependencies: + '@csstools/css-tokenizer': ^4.0.0 + + '@csstools/css-syntax-patches-for-csstree@1.0.28': + resolution: {integrity: sha512-1NRf1CUBjnr3K7hu8BLxjQrKCxEe8FP/xmPTenAxCRZWVLbmGotkFvG9mfNpjA6k7Bw1bw4BilZq9cu19RA5pg==} + + '@csstools/css-tokenizer@4.0.0': + resolution: {integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==} + engines: {node: '>=20.19.0'} + '@ctrl/tinycolor@4.2.0': resolution: {integrity: sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A==} engines: {node: '>=14'} @@ -537,6 +612,54 @@ packages: cpu: [x64] os: [win32] + '@eslint-community/eslint-utils@4.9.1': + resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.23.2': + resolution: {integrity: sha512-YF+fE6LV4v5MGWRGj7G404/OZzGNepVF8fxk7jqmqo3lrza7a0uUcDnROGRBG1WFC1omYUS/Wp1f42i0M+3Q3A==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/config-helpers@0.5.2': + resolution: {integrity: sha512-a5MxrdDXEvqnIq+LisyCX6tQMPF/dSJpCfBgBauY+pNZ28yCtSsTvyTYrMhaI+LK26bVyCJfJkT0u8KIj2i1dQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/core@1.1.0': + resolution: {integrity: sha512-/nr9K9wkr3P1EzFTdFdMoLuo1PmIxjmwvPozwoSodjNBdefGujXQUF93u1DDZpEaTuDvMsIQddsd35BwtrW9Xw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/js@10.0.1': + resolution: {integrity: sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + peerDependencies: + eslint: ^10.0.0 + peerDependenciesMeta: + eslint: + optional: true + + '@eslint/object-schema@3.0.2': + resolution: {integrity: sha512-HOy56KJt48Bx8KmJ+XGQNSUMT/6dZee/M54XyUyuvTvPXJmsERRvBchsUVx1UMe1WwIH49XLAczNC7V2INsuUw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/plugin-kit@0.6.0': + resolution: {integrity: sha512-bIZEUzOI1jkhviX2cp5vNyXQc6olzb2ohewQubuYlMXZ2Q/XjBO0x0XhGPvc9fjSIiUN0vw+0hq53BJ4eQSJKQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@exodus/bytes@1.14.1': + resolution: {integrity: sha512-OhkBFWI6GcRMUroChZiopRiSp2iAMvEBK47NhJooDqz1RERO4QuZIZnjP63TXX8GAiLABkYmX+fuQsdJ1dd2QQ==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + peerDependencies: + '@noble/hashes': ^1.8.0 || ^2.0.0 + peerDependenciesMeta: + '@noble/hashes': + optional: true + '@expressive-code/core@0.41.3': resolution: {integrity: sha512-9qzohqU7O0+JwMEEgQhnBPOw5DtsQRBXhW++5fvEywsuX44vCGGof1SL5OvPElvNgaWZ4pFZAFSlkNOkGyLwSQ==} @@ -558,10 +681,26 @@ packages: '@fontsource/inter@5.2.8': resolution: {integrity: sha512-P6r5WnJoKiNVV+zvW2xM13gNdFhAEpQ9dQJHt3naLvfg+LkF2ldgSLiF4T41lf1SQCM9QmkqPTn4TH568IRagg==} + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.7': + resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + '@humanwhocodes/momoa@2.0.4': resolution: {integrity: sha512-RE815I4arJFtt+FVeU1Tgp9/Xvecacji8w/V6XtXsWWH/wz/eNkNbhb+ny/+PlVZjV0rxQpRSQKNKE3lcktHEA==} engines: {node: '>=10.10.0'} + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} + '@ianvs/prettier-plugin-sort-imports@4.7.0': resolution: {integrity: sha512-soa2bPUJAFruLL4z/CnMfSEKGznm5ebz29fIa9PxYtu8HHyLKNE1NXAs6dylfw1jn/ilEIfO2oLLN6uAafb7DA==} peerDependencies: @@ -1163,6 +1302,10 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} + '@pkgr/core@0.2.9': + resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + '@rollup/pluginutils@5.2.0': resolution: {integrity: sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==} engines: {node: '>=14.0.0'} @@ -1303,6 +1446,9 @@ packages: '@so-ric/colorspace@1.1.6': resolution: {integrity: sha512-/KiKkpHNOBgkFJwu9sh48LkHSMYGyuTcSFK/qMBdnOAlrRJzRSXAOFB5qwzaVQuDl8wAvHVMkaASQDReTahxuw==} + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + '@swc/helpers@0.5.17': resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} @@ -1399,12 +1545,21 @@ packages: '@ts-morph/common@0.27.0': resolution: {integrity: sha512-Wf29UqxWDpc+i61k3oIOzcUfQt79PIT9y/MWfAGlrkjg6lBC1hwDECLXPVJAhWjiGbfBCxZd65F/LIZF3+jeJQ==} + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + '@types/cookie@0.6.0': resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + + '@types/esrecurse@4.3.1': + resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} + '@types/estree-jsx@1.0.5': resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} @@ -1420,6 +1575,9 @@ packages: '@types/js-yaml@4.0.9': resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/mdast@4.0.4': resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} @@ -1465,32 +1623,91 @@ packages: '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} + '@typescript-eslint/eslint-plugin@8.56.1': + resolution: {integrity: sha512-Jz9ZztpB37dNC+HU2HI28Bs9QXpzCz+y/twHOwhyrIRdbuVDxSytJNDl6z/aAKlaRIwC7y8wJdkBv7FxYGgi0A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.56.1 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/parser@8.56.1': + resolution: {integrity: sha512-klQbnPAAiGYFyI02+znpBRLyjL4/BrBd0nyWkdC0s/6xFLkXYQ8OoRrSkqacS1ddVxf/LDyODIKbQ5TgKAf/Fg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/project-service@8.45.0': resolution: {integrity: sha512-3pcVHwMG/iA8afdGLMuTibGR7pDsn9RjDev6CCB+naRsSYs2pns5QbinF4Xqw6YC/Sj3lMrm/Im0eMfaa61WUg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/project-service@8.56.1': + resolution: {integrity: sha512-TAdqQTzHNNvlVFfR+hu2PDJrURiwKsUvxFn1M0h95BB8ah5jejas08jUWG4dBA68jDMI988IvtfdAI53JzEHOQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/scope-manager@8.56.1': + resolution: {integrity: sha512-YAi4VDKcIZp0O4tz/haYKhmIDZFEUPOreKbfdAN3SzUDMcPhJ8QI99xQXqX+HoUVq8cs85eRKnD+rne2UAnj2w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/tsconfig-utils@8.45.0': resolution: {integrity: sha512-aFdr+c37sc+jqNMGhH+ajxPXwjv9UtFZk79k8pLoJ6p4y0snmYpPA52GuWHgt2ZF4gRRW6odsEj41uZLojDt5w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/tsconfig-utils@8.56.1': + resolution: {integrity: sha512-qOtCYzKEeyr3aR9f28mPJqBty7+DBqsdd63eO0yyDwc6vgThj2UjWfJIcsFeSucYydqcuudMOprZ+x1SpF3ZuQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/type-utils@8.56.1': + resolution: {integrity: sha512-yB/7dxi7MgTtGhZdaHCemf7PuwrHMenHjmzgUW1aJpO+bBU43OycnM3Wn+DdvDO/8zzA9HlhaJ0AUGuvri4oGg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/types@8.45.0': resolution: {integrity: sha512-WugXLuOIq67BMgQInIxxnsSyRLFxdkJEJu8r4ngLR56q/4Q5LrbfkFRH27vMTjxEK8Pyz7QfzuZe/G15qQnVRA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/types@8.56.1': + resolution: {integrity: sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@8.45.0': resolution: {integrity: sha512-GfE1NfVbLam6XQ0LcERKwdTTPlLvHvXXhOeUGC1OXi4eQBoyy1iVsW+uzJ/J9jtCz6/7GCQ9MtrQ0fml/jWCnA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/typescript-estree@8.56.1': + resolution: {integrity: sha512-qzUL1qgalIvKWAf9C1HpvBjif+Vm6rcT5wZd4VoMb9+Km3iS3Cv9DY6dMRMDtPnwRAFyAi7YXJpTIEXLvdfPxg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/utils@8.56.1': + resolution: {integrity: sha512-HPAVNIME3tABJ61siYlHzSWCGtOoeP2RTIaHXFMPqjrQKCGB9OgUVdiNgH7TJS2JNIQ5qQ4RsAUDuGaGme/KOA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/visitor-keys@8.45.0': resolution: {integrity: sha512-qsaFBA3e09MIDAGFUrTk+dzqtfv1XPVz8t8d1f0ybTzrCY7BKiMC5cjrl1O/P7UmHsNyW90EYSkU/ZWpmXelag==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/visitor-keys@8.56.1': + resolution: {integrity: sha512-KiROIzYdEV85YygXw6BI/Dx4fnBlFQu6Mq4QE4MOH9fFnhohw6wX/OAvDY2/C+ut0I3RSPKenvZJIVYqJNkhEw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} @@ -1504,6 +1721,35 @@ packages: engines: {node: '>=18'} hasBin: true + '@vitest/expect@4.0.18': + resolution: {integrity: sha512-8sCWUyckXXYvx4opfzVY03EOiYVxyNrHS5QxX3DAIi5dpJAAkyJezHCP77VMX4HKA2LDT/Jpfo8i2r5BE3GnQQ==} + + '@vitest/mocker@4.0.18': + resolution: {integrity: sha512-HhVd0MDnzzsgevnOWCBj5Otnzobjy5wLBe4EdeeFGv8luMsGcYqDuFRMcttKWZA5vVO8RFjexVovXvAM4JoJDQ==} + peerDependencies: + msw: ^2.4.9 + vite: ^6.0.0 || ^7.0.0-0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@4.0.18': + resolution: {integrity: sha512-P24GK3GulZWC5tz87ux0m8OADrQIUVDPIjjj65vBXYG17ZeU3qD7r+MNZ1RNv4l8CGU2vtTRqixrOi9fYk/yKw==} + + '@vitest/runner@4.0.18': + resolution: {integrity: sha512-rpk9y12PGa22Jg6g5M3UVVnTS7+zycIGk9ZNGN+m6tZHKQb7jrP7/77WfZy13Y/EUDd52NDsLRQhYKtv7XfPQw==} + + '@vitest/snapshot@4.0.18': + resolution: {integrity: sha512-PCiV0rcl7jKQjbgYqjtakly6T1uwv/5BQ9SwBLekVg/EaYeQFPiXcgrC2Y7vDMA8dM1SUEAEV82kgSQIlXNMvA==} + + '@vitest/spy@4.0.18': + resolution: {integrity: sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==} + + '@vitest/utils@4.0.18': + resolution: {integrity: sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==} + '@volar/kit@2.4.22': resolution: {integrity: sha512-o2LhNb2PLCUJ6v2XSqN7m+pJt+SE0QW1U2E52jnS8yZ03ohcGOOuFJdH1VlZgCBk0RlwO4xp0OaDoTtyTvMTrw==} peerDependencies: @@ -1592,6 +1838,11 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + acorn@8.16.0: + resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} + engines: {node: '>=0.4.0'} + hasBin: true + agent-base@7.1.4: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} @@ -1604,6 +1855,9 @@ packages: ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@6.14.0: + resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} + ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} @@ -1659,6 +1913,10 @@ packages: array-iterate@2.0.1: resolution: {integrity: sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==} + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + ast-module-types@6.0.1: resolution: {integrity: sha512-WHw67kLXYbZuHTmcdbIrVArCq5wxo6NEuj3hiYAWr8mwJeC+C2mMCIBIWCiDoCye/OF/xelc+teJ1ERoWmnEIA==} engines: {node: '>=18'} @@ -1671,6 +1929,10 @@ packages: resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} hasBin: true + astro-eslint-parser@1.3.0: + resolution: {integrity: sha512-aOLc/aDR7lTWAHlytEefwn4Y6qs6uMr69DZvUx2A1AOAZsWhGB/paiRWPtVchh9wzMvLeqr+DkbENhVreVr9AQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + astro-expressive-code@0.41.3: resolution: {integrity: sha512-u+zHMqo/QNLE2eqYRCrK3+XMlKakv33Bzuz+56V1gs8H0y6TZ0hIi3VNbIxeTn51NLn+mJfUV/A0kMNfE4rANw==} peerDependencies: @@ -1692,12 +1954,22 @@ packages: engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0'} hasBin: true + astrojs-compiler-sync@1.1.1: + resolution: {integrity: sha512-0mKvB9sDQRIZPsEJadw6OaFbGJ92cJPPR++ICca9XEyiUAZqgVuk25jNmzHPT0KF80rI94trSZrUR5iHFXGGOQ==} + engines: {node: ^18.18.0 || >=20.9.0} + peerDependencies: + '@astrojs/compiler': '>=0.27.0' + async-sema@3.1.1: resolution: {integrity: sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==} async@3.2.6: resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + axe-core@4.11.1: + resolution: {integrity: sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A==} + engines: {node: '>=4'} + axobject-query@4.1.0: resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} engines: {node: '>= 0.4'} @@ -1716,6 +1988,10 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + bare-events@2.7.0: resolution: {integrity: sha512-b3N5eTW1g7vXkw+0CXh/HazGTcO5KYuu/RCNaJbDMPI6LHDi+7qe8EmxKUVe1sUbY2KZOVZFyj62x0OEz9qyAA==} @@ -1741,6 +2017,9 @@ packages: peerDependencies: ajv: 4.11.8 - 8 + bidi-js@1.0.3: + resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==} + bindings@1.5.0: resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} @@ -1758,6 +2037,10 @@ packages: brace-expansion@2.0.2: resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + brace-expansion@5.0.3: + resolution: {integrity: sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==} + engines: {node: 18 || 20 || >=22} + braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} @@ -1818,6 +2101,10 @@ packages: ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + chai@6.2.2: + resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} + engines: {node: '>=18'} + chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -2062,10 +2349,18 @@ packages: resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + cssstyle@6.1.0: + resolution: {integrity: sha512-Ml4fP2UT2K3CUBQnVlbdV/8aFDdlY69E+YnwJM+3VUWl08S3J8c8aRuJqCkD9Py8DHZ7zNNvsfKl8psocHZEFg==} + engines: {node: '>=20'} + data-uri-to-buffer@4.0.1: resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} engines: {node: '>= 12'} + data-urls@7.0.0: + resolution: {integrity: sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + debug@4.4.1: resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} engines: {node: '>=6.0'} @@ -2075,9 +2370,21 @@ packages: supports-color: optional: true + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + decache@4.6.2: resolution: {integrity: sha512-2LPqkLeu8XWHU8qNCS3kcF6sCcb5zIzvWaAHYSvPfwhdd7mHuah29NssMzrTYyHN4F5oFy2ko9OBYxegtU0FEw==} + decimal.js@10.6.0: + resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} + decode-named-character-reference@1.2.0: resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==} @@ -2089,6 +2396,9 @@ packages: babel-plugin-macros: optional: true + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} @@ -2190,6 +2500,9 @@ packages: dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + dom-accessibility-api@0.5.16: + resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} + dom-serializer@2.0.0: resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} @@ -2321,6 +2634,10 @@ packages: escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + escape-string-regexp@5.0.0: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} @@ -2330,15 +2647,69 @@ packages: engines: {node: '>=6.0'} hasBin: true + eslint-compat-utils@0.6.5: + resolution: {integrity: sha512-vAUHYzue4YAa2hNACjB8HvUQj5yehAZgiClyFVVom9cP8z5NSFq3PwB/TtJslN2zAMgRX6FCFCjYBbQh71g5RQ==} + engines: {node: '>=12'} + peerDependencies: + eslint: '>=6.0.0' + + eslint-plugin-astro@1.6.0: + resolution: {integrity: sha512-yGIbLHuj5MOUXa0s4sZ6cVhv6ehb+WLF80tsrGaxMk6VTUExruMzubQDzhOYt8fbR1c9vILCCRSCsKI7M1whig==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: '>=8.57.0' + + eslint-scope@8.4.0: + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-scope@9.1.1: + resolution: {integrity: sha512-GaUN0sWim5qc8KVErfPBWmc31LEsOkrUJbvJZV+xuL3u2phMUK4HIvXlWAakfC8W4nzlK+chPEAkYOYb5ZScIw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-visitor-keys@4.2.1: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint-visitor-keys@5.0.1: + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + eslint@10.0.2: + resolution: {integrity: sha512-uYixubwmqJZH+KLVYIVKY1JQt7tysXhtj21WSvjcSmU5SVNzMus1bgLe+pAt816yQ8opKfheVVoPLqvVMGejYw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.4.0: + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + espree@11.1.1: + resolution: {integrity: sha512-AVHPqQoZYc+RUM4/3Ly5udlZY/U4LS8pIG05jEjWM2lQMU/oaZ7qshzAl2YP1tfNmXfftH3ohurfwNAug+MnsQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true + esquery@1.7.0: + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} @@ -2409,6 +2780,10 @@ packages: resolution: {integrity: sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw==} engines: {node: ^18.19.0 || >=20.5.0} + expect-type@1.3.0: + resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} + engines: {node: '>=12.0.0'} + express-rate-limit@7.5.1: resolution: {integrity: sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==} engines: {node: '>= 16'} @@ -2443,6 +2818,9 @@ packages: fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} @@ -2479,6 +2857,10 @@ packages: resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} engines: {node: '>=18'} + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + file-uri-to-path@1.0.0: resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} @@ -2502,6 +2884,10 @@ packages: resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==} engines: {node: '>=18'} + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + find-up@7.0.0: resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} engines: {node: '>=18'} @@ -2509,6 +2895,13 @@ packages: fix-esm@1.0.1: resolution: {integrity: sha512-EZtb7wPXZS54GaGxaWxMlhd1DUDCnAg5srlYdu/1ZVeW+7wwR3Tp59nu52dXByFs3MBRq+SByx1wDOJpRvLEXw==} + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.3.3: + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + flattie@1.1.1: resolution: {integrity: sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==} engines: {node: '>=8'} @@ -2614,10 +3007,18 @@ packages: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + glob@10.4.5: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true + globals@16.5.0: + resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==} + engines: {node: '>=18'} + gonzales-pe@4.3.0: resolution: {integrity: sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==} engines: {node: '>=0.6.0'} @@ -2716,6 +3117,10 @@ packages: resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} engines: {node: ^16.14.0 || >=18.0.0} + html-encoding-sniffer@6.0.0: + resolution: {integrity: sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + html-escaper@3.0.3: resolution: {integrity: sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==} @@ -2732,6 +3137,10 @@ packages: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + http-shutdown@1.2.2: resolution: {integrity: sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw==} engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} @@ -2766,6 +3175,10 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} + image-meta@0.2.1: resolution: {integrity: sha512-K6acvFaelNxx8wc2VjbIzXKDVB0Khs0QT35U6NkGfTdCmjLNcO2945m7RFNR9/RPVFm48hq7QPzK8uGH18HCGw==} @@ -2788,6 +3201,10 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + indent-string@5.0.0: resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} engines: {node: '>=12'} @@ -2888,6 +3305,9 @@ packages: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} + is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + is-promise@4.0.0: resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} @@ -2960,11 +3380,23 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true + jsdom@28.1.0: + resolution: {integrity: sha512-0+MoQNYyr2rBHqO1xilltfDjV9G7ymYGlAUazgcDLQaUf8JDHbuGwsxN6U9qWaElZ4w1B2r7yEGIL3GdeW3Rug==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + peerDependencies: + canvas: ^3.0.0 + peerDependenciesMeta: + canvas: + optional: true + jsesc@3.1.0: resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} engines: {node: '>=6'} hasBin: true + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} @@ -2974,6 +3406,9 @@ packages: json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} @@ -3010,6 +3445,9 @@ packages: resolution: {integrity: sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==} engines: {node: '>=18'} + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + kleur@3.0.3: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} @@ -3038,6 +3476,10 @@ packages: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + lightningcss-darwin-arm64@1.30.1: resolution: {integrity: sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==} engines: {node: '>= 12.0.0'} @@ -3109,10 +3551,17 @@ packages: resolution: {integrity: sha512-I8oW2+QL5KJo8zXNWX046M134WchxsXC7SawLPvRQpogCbkyQIaFxPE89A2HiwR7vAK2Dm2ERBAmyjTYGYEpBg==} hasBin: true + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + locate-path@7.2.0: resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + lodash-es@4.17.23: + resolution: {integrity: sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==} + lodash.includes@4.3.0: resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} @@ -3151,6 +3600,10 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + lru-cache@11.2.6: + resolution: {integrity: sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==} + engines: {node: 20 || >=22} + lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -3164,6 +3617,9 @@ packages: magic-string@0.30.19: resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==} + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + magicast@0.3.5: resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} @@ -3393,10 +3849,18 @@ packages: resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} engines: {node: '>=18'} + min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + minimatch@10.0.3: resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==} engines: {node: 20 || >=22} + minimatch@10.2.4: + resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==} + engines: {node: 18 || 20 || >=22} + minimatch@5.1.6: resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} engines: {node: '>=10'} @@ -3453,6 +3917,9 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + negotiator@1.0.0: resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} engines: {node: '>= 0.6'} @@ -3557,6 +4024,9 @@ packages: resolution: {integrity: sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==} engines: {node: '>= 10'} + obug@2.1.1: + resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} + ofetch@1.4.1: resolution: {integrity: sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==} @@ -3594,6 +4064,10 @@ packages: oniguruma-to-es@4.3.3: resolution: {integrity: sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==} + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + ora@8.2.0: resolution: {integrity: sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==} engines: {node: '>=18'} @@ -3605,6 +4079,10 @@ packages: resolution: {integrity: sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==} engines: {node: '>=16.17'} + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + p-limit@4.0.0: resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3613,6 +4091,10 @@ packages: resolution: {integrity: sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==} engines: {node: '>=18'} + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + p-locate@6.0.0: resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3683,6 +4165,9 @@ packages: parse5@7.3.0: resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + parse5@8.0.0: + resolution: {integrity: sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==} + parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} @@ -3690,6 +4175,10 @@ packages: path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + path-exists@5.0.0: resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3760,6 +4249,10 @@ packages: resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} engines: {node: '>=4'} + postcss-selector-parser@7.1.1: + resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==} + engines: {node: '>=4'} + postcss-values-parser@6.0.2: resolution: {integrity: sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw==} engines: {node: '>=10'} @@ -3775,6 +4268,10 @@ packages: engines: {node: '>=18'} hasBin: true + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + prettier-plugin-astro@0.14.1: resolution: {integrity: sha512-RiBETaaP9veVstE4vUwSIcdATj6dKmXljouXc/DDNwBSPTp8FRkLGDSGFClKsAFeeg+13SB0Z1JZvbD76bigJw==} engines: {node: ^14.15.0 || >=16.0.0} @@ -3951,6 +4448,10 @@ packages: recma-stringify@1.0.0: resolution: {integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==} + redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + regex-recursion@6.0.2: resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} @@ -4216,6 +4717,10 @@ packages: sax@1.4.1: resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} + saxes@6.0.0: + resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} + engines: {node: '>=v12.22.7'} + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -4225,6 +4730,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.7.4: + resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} + engines: {node: '>=10'} + hasBin: true + send@1.2.0: resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==} engines: {node: '>= 18'} @@ -4275,6 +4785,9 @@ packages: resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} engines: {node: '>= 0.4'} + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -4338,6 +4851,9 @@ packages: stack-trace@0.0.10: resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + statuses@2.0.1: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} @@ -4346,6 +4862,9 @@ packages: resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} engines: {node: '>= 0.8'} + std-env@3.10.0: + resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + std-env@3.9.0: resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} @@ -4411,6 +4930,10 @@ packages: resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} engines: {node: '>=18'} + strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + style-to-js@1.1.18: resolution: {integrity: sha512-JFPn62D4kJaPTnhFUI244MThx+FEGbi+9dw1b9yBBQ+1CZpV7QAT8kUtJ7b7EUNdHajjF/0x8fT+16oLJoojLg==} @@ -4437,6 +4960,9 @@ packages: engines: {node: '>=16'} hasBin: true + symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + sync-child-process@1.0.2: resolution: {integrity: sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==} engines: {node: '>=16.0.0'} @@ -4445,6 +4971,10 @@ packages: resolution: {integrity: sha512-GTt8rSKje5FilG+wEdfCkOcLL7LWqpMlr2c3LRuKt/YXxcJ52aGSbGBAdI4L3aaqfrBt6y711El53ItyH1NWzg==} engines: {node: '>=16.0.0'} + synckit@0.11.12: + resolution: {integrity: sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==} + engines: {node: ^14.18.0 || >=16.0.0} + system-architecture@0.1.0: resolution: {integrity: sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==} engines: {node: '>=18'} @@ -4478,13 +5008,31 @@ packages: tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + tinyexec@1.0.1: resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==} + tinyexec@1.0.2: + resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} + engines: {node: '>=18'} + tinyglobby@0.2.15: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} + tinyrainbow@3.0.3: + resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} + engines: {node: '>=14.0.0'} + + tldts-core@7.0.23: + resolution: {integrity: sha512-0g9vrtDQLrNIiCj22HSe9d4mLVG3g5ph5DZ8zCKBr4OtrspmNB6ss7hVyzArAeE88ceZocIEGkyW1Ime7fxPtQ==} + + tldts@7.0.23: + resolution: {integrity: sha512-ASdhgQIBSay0R/eXggAkQ53G4nTJqTXqC2kbaBbdDwM7SkjyZyO0OaaN1/FH7U/yCeqOHDwFO5j8+Os/IS1dXw==} + hasBin: true + tmp-promise@3.0.3: resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==} @@ -4510,9 +5058,17 @@ packages: resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} engines: {node: '>=6'} + tough-cookie@6.0.0: + resolution: {integrity: sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==} + engines: {node: '>=16'} + tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + tr46@6.0.0: + resolution: {integrity: sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==} + engines: {node: '>=20'} + trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} @@ -4529,6 +5085,12 @@ packages: peerDependencies: typescript: '>=4.8.4' + ts-api-utils@2.4.0: + resolution: {integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + ts-morph@26.0.0: resolution: {integrity: sha512-ztMO++owQnz8c/gIENcM9XfCEzgoGphTv+nKpYNM1bgsdOVC/jRZuEBf6N+mLLDNg68Kl+GgUZfOySaRiG1/Ug==} @@ -4552,6 +5114,10 @@ packages: tw-animate-css@1.4.0: resolution: {integrity: sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==} + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} @@ -4591,6 +5157,10 @@ packages: undici-types@7.14.0: resolution: {integrity: sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==} + undici@7.22.0: + resolution: {integrity: sha512-RqslV2Us5BrllB+JeiZnK4peryVTndy9Dnqq62S3yYRRTj0tFQCwEniUy2167skdGOy3vqRzEvl1Dm4sV2ReDg==} + engines: {node: '>=20.18.1'} + unicode-properties@1.4.1: resolution: {integrity: sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==} @@ -4826,6 +5396,45 @@ packages: vite: optional: true + vitest-axe@0.1.0: + resolution: {integrity: sha512-jvtXxeQPg8R/2ANTY8QicA5pvvdRP4F0FsVUAHANJ46YCDASie/cuhlSzu0DGcLmZvGBSBNsNuK3HqfaeknyvA==} + peerDependencies: + vitest: '>=0.16.0' + + vitest@4.0.18: + resolution: {integrity: sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==} + engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@opentelemetry/api': ^1.9.0 + '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 4.0.18 + '@vitest/browser-preview': 4.0.18 + '@vitest/browser-webdriverio': 4.0.18 + '@vitest/ui': 4.0.18 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@opentelemetry/api': + optional: true + '@types/node': + optional: true + '@vitest/browser-playwright': + optional: true + '@vitest/browser-preview': + optional: true + '@vitest/browser-webdriverio': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + volar-service-css@0.0.62: resolution: {integrity: sha512-JwNyKsH3F8PuzZYuqPf+2e+4CTU8YoyUHEHVnoXNlrLe7wy9U3biomZ56llN69Ris7TTy/+DEX41yVxQpM4qvg==} peerDependencies: @@ -4932,6 +5541,10 @@ packages: vscode-uri@3.1.0: resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} + w3c-xmlserializer@5.0.0: + resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} + engines: {node: '>=18'} + web-namespaces@2.0.1: resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} @@ -4942,6 +5555,18 @@ packages: webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + webidl-conversions@8.0.1: + resolution: {integrity: sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==} + engines: {node: '>=20'} + + whatwg-mimetype@5.0.0: + resolution: {integrity: sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==} + engines: {node: '>=20'} + + whatwg-url@16.0.1: + resolution: {integrity: sha512-1to4zXBxmXHV3IiSSEInrreIlu02vUOvrhxJJH5vcxYTBDAx51cqZiKdyTxlecdKNSjj8EcxGBxNf6Vg+945gw==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} @@ -4959,6 +5584,11 @@ packages: engines: {node: ^16.13.0 || >=18.0.0} hasBin: true + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + widest-line@5.0.0: resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==} engines: {node: '>=18'} @@ -4971,6 +5601,10 @@ packages: resolution: {integrity: sha512-+yDkrWD2rWkv6XjSgK2QyujZDNsHE9YLa8S284TpVrYdaloMkZ7NvHzfnETYlSPOX9h5j5VJ+Ro9J872O8CC/g==} engines: {node: '>= 12.0.0'} + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} @@ -4994,6 +5628,10 @@ packages: resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + xml-name-validator@5.0.0: + resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} + engines: {node: '>=18'} + xml2js@0.6.2: resolution: {integrity: sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==} engines: {node: '>=4.0.0'} @@ -5002,6 +5640,9 @@ packages: resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} engines: {node: '>=4.0'} + xmlchars@2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + xss@1.0.15: resolution: {integrity: sha512-FVdlVVC67WOIPvfOwhoMETV72f6GbW7aOabBC3WxN/oUdoEMDyLz4OgRv5/gck2ZeNqEQu+Tb0kloovXOfpYVg==} engines: {node: '>= 0.10.0'} @@ -5045,6 +5686,10 @@ packages: yauzl@2.10.0: resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + yocto-queue@1.2.1: resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==} engines: {node: '>=12.20'} @@ -5084,6 +5729,8 @@ packages: snapshots: + '@acemir/cssom@0.9.31': {} + '@ampproject/remapping@2.3.0': dependencies: '@jridgewell/gen-mapping': 0.3.12 @@ -5096,6 +5743,24 @@ snapshots: package-manager-detector: 1.3.0 tinyexec: 1.0.1 + '@asamuzakjp/css-color@5.0.1': + dependencies: + '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + lru-cache: 11.2.6 + + '@asamuzakjp/dom-selector@6.8.1': + dependencies: + '@asamuzakjp/nwsapi': 2.3.9 + bidi-js: 1.0.3 + css-tree: 3.1.0 + is-potential-custom-element-name: 1.0.1 + lru-cache: 11.2.6 + + '@asamuzakjp/nwsapi@2.3.9': {} + '@astrojs/check@0.9.4(prettier-plugin-astro@0.14.1)(prettier@3.6.2)(typescript@5.9.3)': dependencies: '@astrojs/language-server': 2.15.4(prettier-plugin-astro@0.14.1)(prettier@3.6.2)(typescript@5.9.3) @@ -5495,6 +6160,10 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 + '@bramus/specificity@2.4.2': + dependencies: + css-tree: 3.1.0 + '@bufbuild/protobuf@2.9.0': optional: true @@ -5517,6 +6186,28 @@ snapshots: '@colors/colors@1.6.0': {} + '@csstools/color-helpers@6.0.2': {} + + '@csstools/css-calc@3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': + dependencies: + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + + '@csstools/css-color-parser@4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': + dependencies: + '@csstools/color-helpers': 6.0.2 + '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + + '@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0)': + dependencies: + '@csstools/css-tokenizer': 4.0.0 + + '@csstools/css-syntax-patches-for-csstree@1.0.28': {} + + '@csstools/css-tokenizer@4.0.0': {} + '@ctrl/tinycolor@4.2.0': {} '@dabh/diagnostics@2.0.7': @@ -5660,6 +6351,44 @@ snapshots: '@esbuild/win32-x64@0.25.10': optional: true + '@eslint-community/eslint-utils@4.9.1(eslint@10.0.2(jiti@2.6.1))': + dependencies: + eslint: 10.0.2(jiti@2.6.1) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.2': {} + + '@eslint/config-array@0.23.2': + dependencies: + '@eslint/object-schema': 3.0.2 + debug: 4.4.1 + minimatch: 10.2.4 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.5.2': + dependencies: + '@eslint/core': 1.1.0 + + '@eslint/core@1.1.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/js@10.0.1(eslint@10.0.2(jiti@2.6.1))': + optionalDependencies: + eslint: 10.0.2(jiti@2.6.1) + + '@eslint/object-schema@3.0.2': {} + + '@eslint/plugin-kit@0.6.0': + dependencies: + '@eslint/core': 1.1.0 + levn: 0.4.1 + + '@exodus/bytes@1.14.1(@noble/hashes@1.8.0)': + optionalDependencies: + '@noble/hashes': 1.8.0 + '@expressive-code/core@0.41.3': dependencies: '@ctrl/tinycolor': 4.2.0 @@ -5691,8 +6420,19 @@ snapshots: '@fontsource/inter@5.2.8': {} + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.7': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.4.3 + + '@humanwhocodes/module-importer@1.0.1': {} + '@humanwhocodes/momoa@2.0.4': {} + '@humanwhocodes/retry@0.4.3': {} + '@ianvs/prettier-plugin-sort-imports@4.7.0(@vue/compiler-sfc@3.5.22)(prettier@3.6.2)': dependencies: '@babel/generator': 7.28.0 @@ -6446,6 +7186,8 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true + '@pkgr/core@0.2.9': {} + '@rollup/pluginutils@5.2.0(rollup@4.46.2)': dependencies: '@types/estree': 1.0.8 @@ -6556,6 +7298,8 @@ snapshots: color: 5.0.2 text-hex: 1.0.0 + '@standard-schema/spec@1.1.0': {} + '@swc/helpers@0.5.17': dependencies: tslib: 2.8.1 @@ -6637,12 +7381,21 @@ snapshots: minimatch: 10.0.3 path-browserify: 1.0.1 + '@types/chai@5.2.3': + dependencies: + '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 + '@types/cookie@0.6.0': {} '@types/debug@4.1.12': dependencies: '@types/ms': 2.1.0 + '@types/deep-eql@4.0.2': {} + + '@types/esrecurse@4.3.1': {} + '@types/estree-jsx@1.0.5': dependencies: '@types/estree': 1.0.8 @@ -6659,6 +7412,8 @@ snapshots: '@types/js-yaml@4.0.9': {} + '@types/json-schema@7.0.15': {} + '@types/mdast@4.0.4': dependencies: '@types/unist': 3.0.3 @@ -6700,6 +7455,34 @@ snapshots: '@types/node': 24.8.1 optional: true + '@typescript-eslint/eslint-plugin@8.56.1(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3)': + dependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.56.1 + '@typescript-eslint/type-utils': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.56.1 + eslint: 10.0.2(jiti@2.6.1) + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.4.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.56.1 + '@typescript-eslint/types': 8.56.1 + '@typescript-eslint/typescript-estree': 8.56.1(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.56.1 + debug: 4.4.3 + eslint: 10.0.2(jiti@2.6.1) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/project-service@8.45.0(typescript@5.9.3)': dependencies: '@typescript-eslint/tsconfig-utils': 8.45.0(typescript@5.9.3) @@ -6709,12 +7492,44 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/project-service@8.56.1(typescript@5.9.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.56.1(typescript@5.9.3) + '@typescript-eslint/types': 8.56.1 + debug: 4.4.3 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.56.1': + dependencies: + '@typescript-eslint/types': 8.56.1 + '@typescript-eslint/visitor-keys': 8.56.1 + '@typescript-eslint/tsconfig-utils@8.45.0(typescript@5.9.3)': dependencies: typescript: 5.9.3 + '@typescript-eslint/tsconfig-utils@8.56.1(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + + '@typescript-eslint/type-utils@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3)': + dependencies: + '@typescript-eslint/types': 8.56.1 + '@typescript-eslint/typescript-estree': 8.56.1(typescript@5.9.3) + '@typescript-eslint/utils': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) + debug: 4.4.3 + eslint: 10.0.2(jiti@2.6.1) + ts-api-utils: 2.4.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/types@8.45.0': {} + '@typescript-eslint/types@8.56.1': {} + '@typescript-eslint/typescript-estree@8.45.0(typescript@5.9.3)': dependencies: '@typescript-eslint/project-service': 8.45.0(typescript@5.9.3) @@ -6731,11 +7546,42 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/typescript-estree@8.56.1(typescript@5.9.3)': + dependencies: + '@typescript-eslint/project-service': 8.56.1(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.56.1(typescript@5.9.3) + '@typescript-eslint/types': 8.56.1 + '@typescript-eslint/visitor-keys': 8.56.1 + debug: 4.4.3 + minimatch: 10.2.4 + semver: 7.7.4 + tinyglobby: 0.2.15 + ts-api-utils: 2.4.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.2(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.56.1 + '@typescript-eslint/types': 8.56.1 + '@typescript-eslint/typescript-estree': 8.56.1(typescript@5.9.3) + eslint: 10.0.2(jiti@2.6.1) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/visitor-keys@8.45.0': dependencies: '@typescript-eslint/types': 8.45.0 eslint-visitor-keys: 4.2.1 + '@typescript-eslint/visitor-keys@8.56.1': + dependencies: + '@typescript-eslint/types': 8.56.1 + eslint-visitor-keys: 5.0.1 + '@ungap/structured-clone@1.3.0': {} '@vercel/nft@0.29.4(rollup@4.46.2)': @@ -6776,6 +7622,46 @@ snapshots: - rollup - supports-color + '@vitest/expect@4.0.18': + dependencies: + '@standard-schema/spec': 1.1.0 + '@types/chai': 5.2.3 + '@vitest/spy': 4.0.18 + '@vitest/utils': 4.0.18 + chai: 6.2.2 + tinyrainbow: 3.0.3 + + '@vitest/mocker@4.0.18(msw@2.10.4(@types/node@24.8.1)(typescript@5.9.3))(vite@6.3.6(@types/node@24.8.1)(jiti@2.6.1)(lightningcss@1.30.1)(sass-embedded@1.93.2)(sass@1.93.2)(yaml@2.8.1))': + dependencies: + '@vitest/spy': 4.0.18 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + msw: 2.10.4(@types/node@24.8.1)(typescript@5.9.3) + vite: 6.3.6(@types/node@24.8.1)(jiti@2.6.1)(lightningcss@1.30.1)(sass-embedded@1.93.2)(sass@1.93.2)(yaml@2.8.1) + + '@vitest/pretty-format@4.0.18': + dependencies: + tinyrainbow: 3.0.3 + + '@vitest/runner@4.0.18': + dependencies: + '@vitest/utils': 4.0.18 + pathe: 2.0.3 + + '@vitest/snapshot@4.0.18': + dependencies: + '@vitest/pretty-format': 4.0.18 + magic-string: 0.30.21 + pathe: 2.0.3 + + '@vitest/spy@4.0.18': {} + + '@vitest/utils@4.0.18': + dependencies: + '@vitest/pretty-format': 4.0.18 + tinyrainbow: 3.0.3 + '@volar/kit@2.4.22(typescript@5.9.3)': dependencies: '@volar/language-service': 2.4.22 @@ -6906,8 +7792,14 @@ snapshots: dependencies: acorn: 8.15.0 + acorn-jsx@5.3.2(acorn@8.16.0): + dependencies: + acorn: 8.16.0 + acorn@8.15.0: {} + acorn@8.16.0: {} + agent-base@7.1.4: {} ajv-errors@3.0.0(ajv@8.17.1): @@ -6921,6 +7813,13 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 + ajv@6.14.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 @@ -6983,6 +7882,8 @@ snapshots: array-iterate@2.0.1: {} + assertion-error@2.0.1: {} + ast-module-types@6.0.1: {} ast-types@0.16.1: @@ -6991,6 +7892,23 @@ snapshots: astring@1.9.0: {} + astro-eslint-parser@1.3.0: + dependencies: + '@astrojs/compiler': 2.12.2 + '@typescript-eslint/scope-manager': 8.56.1 + '@typescript-eslint/types': 8.45.0 + astrojs-compiler-sync: 1.1.1(@astrojs/compiler@2.12.2) + debug: 4.4.1 + entities: 6.0.1 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + fast-glob: 3.3.3 + is-glob: 4.0.3 + semver: 7.7.2 + transitivePeerDependencies: + - supports-color + astro-expressive-code@0.41.3(astro@5.14.5(@netlify/blobs@10.1.0)(@types/node@24.8.1)(jiti@2.6.1)(lightningcss@1.30.1)(rollup@4.46.2)(sass-embedded@1.93.2)(sass@1.93.2)(typescript@5.9.3)(yaml@2.8.1)): dependencies: astro: 5.14.5(@netlify/blobs@10.1.0)(@types/node@24.8.1)(jiti@2.6.1)(lightningcss@1.30.1)(rollup@4.46.2)(sass-embedded@1.93.2)(sass@1.93.2)(typescript@5.9.3)(yaml@2.8.1) @@ -7114,10 +8032,17 @@ snapshots: - uploadthing - yaml + astrojs-compiler-sync@1.1.1(@astrojs/compiler@2.12.2): + dependencies: + '@astrojs/compiler': 2.12.2 + synckit: 0.11.12 + async-sema@3.1.1: {} async@3.2.6: {} + axe-core@4.11.1: {} + axobject-query@4.1.0: {} b4a@1.7.3: {} @@ -7126,6 +8051,8 @@ snapshots: balanced-match@1.0.2: {} + balanced-match@4.0.4: {} + bare-events@2.7.0: {} base-64@1.0.0: {} @@ -7151,6 +8078,10 @@ snapshots: jsonpointer: 5.0.1 leven: 3.1.0 + bidi-js@1.0.3: + dependencies: + require-from-string: 2.0.2 + bindings@1.5.0: dependencies: file-uri-to-path: 1.0.0 @@ -7186,6 +8117,10 @@ snapshots: dependencies: balanced-match: 1.0.2 + brace-expansion@5.0.3: + dependencies: + balanced-match: 4.0.4 + braces@3.0.3: dependencies: fill-range: 7.1.1 @@ -7240,6 +8175,8 @@ snapshots: ccount@2.0.1: {} + chai@6.2.2: {} + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 @@ -7451,22 +8388,44 @@ snapshots: dependencies: css-tree: 2.2.1 + cssstyle@6.1.0: + dependencies: + '@asamuzakjp/css-color': 5.0.1 + '@csstools/css-syntax-patches-for-csstree': 1.0.28 + css-tree: 3.1.0 + lru-cache: 11.2.6 + data-uri-to-buffer@4.0.1: {} + data-urls@7.0.0(@noble/hashes@1.8.0): + dependencies: + whatwg-mimetype: 5.0.0 + whatwg-url: 16.0.1(@noble/hashes@1.8.0) + transitivePeerDependencies: + - '@noble/hashes' + debug@4.4.1: dependencies: ms: 2.1.3 + debug@4.4.3: + dependencies: + ms: 2.1.3 + decache@4.6.2: dependencies: callsite: 1.0.0 + decimal.js@10.6.0: {} + decode-named-character-reference@1.2.0: dependencies: character-entities: 2.0.2 dedent@1.7.0: {} + deep-is@0.1.4: {} + deepmerge@4.3.1: {} defu@6.1.4: {} @@ -7559,6 +8518,8 @@ snapshots: dlv@1.1.3: {} + dom-accessibility-api@0.5.16: {} + dom-serializer@2.0.0: dependencies: domelementtype: 2.3.0 @@ -7705,6 +8666,8 @@ snapshots: escape-html@1.0.3: {} + escape-string-regexp@4.0.0: {} + escape-string-regexp@5.0.0: {} escodegen@2.1.0: @@ -7715,10 +8678,102 @@ snapshots: optionalDependencies: source-map: 0.6.1 + eslint-compat-utils@0.6.5(eslint@10.0.2(jiti@2.6.1)): + dependencies: + eslint: 10.0.2(jiti@2.6.1) + semver: 7.7.2 + + eslint-plugin-astro@1.6.0(eslint@10.0.2(jiti@2.6.1)): + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.2(jiti@2.6.1)) + '@jridgewell/sourcemap-codec': 1.5.5 + '@typescript-eslint/types': 8.45.0 + astro-eslint-parser: 1.3.0 + eslint: 10.0.2(jiti@2.6.1) + eslint-compat-utils: 0.6.5(eslint@10.0.2(jiti@2.6.1)) + globals: 16.5.0 + postcss: 8.5.6 + postcss-selector-parser: 7.1.1 + transitivePeerDependencies: + - supports-color + + eslint-scope@8.4.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-scope@9.1.1: + dependencies: + '@types/esrecurse': 4.3.1 + '@types/estree': 1.0.8 + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + eslint-visitor-keys@4.2.1: {} + eslint-visitor-keys@5.0.1: {} + + eslint@10.0.2(jiti@2.6.1): + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.2(jiti@2.6.1)) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.23.2 + '@eslint/config-helpers': 0.5.2 + '@eslint/core': 1.1.0 + '@eslint/plugin-kit': 0.6.0 + '@humanfs/node': 0.16.7 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.8 + ajv: 6.14.0 + cross-spawn: 7.0.6 + debug: 4.4.1 + escape-string-regexp: 4.0.0 + eslint-scope: 9.1.1 + eslint-visitor-keys: 5.0.1 + espree: 11.1.1 + esquery: 1.7.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + minimatch: 10.2.4 + natural-compare: 1.4.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 2.6.1 + transitivePeerDependencies: + - supports-color + + espree@10.4.0: + dependencies: + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + eslint-visitor-keys: 4.2.1 + + espree@11.1.1: + dependencies: + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) + eslint-visitor-keys: 5.0.1 + esprima@4.0.1: {} + esquery@1.7.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + estraverse@5.3.0: {} estree-util-attach-comments@3.0.0: @@ -7815,6 +8870,8 @@ snapshots: strip-final-newline: 4.0.0 yoctocolors: 2.1.1 + expect-type@1.3.0: {} + express-rate-limit@7.5.1(express@5.1.0): dependencies: express: 5.1.0 @@ -7884,6 +8941,8 @@ snapshots: fast-json-stable-stringify@2.1.0: {} + fast-levenshtein@2.0.6: {} + fast-safe-stringify@2.1.1: {} fast-uri@3.0.6: {} @@ -7917,6 +8976,10 @@ snapshots: dependencies: is-unicode-supported: 2.1.0 + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + file-uri-to-path@1.0.0: {} filename-reserved-regex@3.0.0: {} @@ -7940,6 +9003,11 @@ snapshots: find-up-simple@1.0.1: {} + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + find-up@7.0.0: dependencies: locate-path: 7.2.0 @@ -7954,6 +9022,13 @@ snapshots: transitivePeerDependencies: - supports-color + flat-cache@4.0.1: + dependencies: + flatted: 3.3.3 + keyv: 4.5.4 + + flatted@3.3.3: {} + flattie@1.1.1: {} fn.name@1.1.0: {} @@ -8057,6 +9132,10 @@ snapshots: dependencies: is-glob: 4.0.3 + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + glob@10.4.5: dependencies: foreground-child: 3.3.1 @@ -8066,6 +9145,8 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 1.11.1 + globals@16.5.0: {} + gonzales-pe@4.3.0: dependencies: minimist: 1.2.8 @@ -8291,6 +9372,12 @@ snapshots: dependencies: lru-cache: 10.4.3 + html-encoding-sniffer@6.0.0(@noble/hashes@1.8.0): + dependencies: + '@exodus/bytes': 1.14.1(@noble/hashes@1.8.0) + transitivePeerDependencies: + - '@noble/hashes' + html-escaper@3.0.3: {} html-void-elements@3.0.0: {} @@ -8307,6 +9394,13 @@ snapshots: statuses: 2.0.1 toidentifier: 1.0.1 + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.4 + debug: 4.4.1 + transitivePeerDependencies: + - supports-color + http-shutdown@1.2.2: {} https-proxy-agent@7.0.6: @@ -8334,6 +9428,8 @@ snapshots: ignore@5.3.2: {} + ignore@7.0.5: {} + image-meta@0.2.1: {} image-size@2.0.2: {} @@ -8350,6 +9446,8 @@ snapshots: imurmurhash@0.1.4: {} + indent-string@4.0.0: {} + indent-string@5.0.0: {} index-to-position@1.2.0: {} @@ -8450,6 +9548,8 @@ snapshots: is-plain-obj@4.1.0: {} + is-potential-custom-element-name@1.0.1: {} + is-promise@4.0.0: {} is-regexp@3.1.0: {} @@ -8502,14 +9602,45 @@ snapshots: dependencies: argparse: 2.0.1 + jsdom@28.1.0(@noble/hashes@1.8.0): + dependencies: + '@acemir/cssom': 0.9.31 + '@asamuzakjp/dom-selector': 6.8.1 + '@bramus/specificity': 2.4.2 + '@exodus/bytes': 1.14.1(@noble/hashes@1.8.0) + cssstyle: 6.1.0 + data-urls: 7.0.0(@noble/hashes@1.8.0) + decimal.js: 10.6.0 + html-encoding-sniffer: 6.0.0(@noble/hashes@1.8.0) + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + is-potential-custom-element-name: 1.0.1 + parse5: 8.0.0 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 6.0.0 + undici: 7.22.0 + w3c-xmlserializer: 5.0.0 + webidl-conversions: 8.0.1 + whatwg-mimetype: 5.0.0 + whatwg-url: 16.0.1(@noble/hashes@1.8.0) + xml-name-validator: 5.0.0 + transitivePeerDependencies: + - '@noble/hashes' + - supports-color + jsesc@3.1.0: {} + json-buffer@3.0.1: {} + json-parse-even-better-errors@2.3.1: {} json-schema-traverse@0.4.1: {} json-schema-traverse@1.0.0: {} + json-stable-stringify-without-jsonify@1.0.1: {} + json5@2.2.3: {} jsonc-parser@2.3.1: {} @@ -8552,6 +9683,10 @@ snapshots: jwt-decode@4.0.0: {} + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + kleur@3.0.3: {} kleur@4.1.5: {} @@ -8574,6 +9709,11 @@ snapshots: leven@3.1.0: {} + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + lightningcss-darwin-arm64@1.30.1: optional: true @@ -8642,10 +9782,16 @@ snapshots: untun: 0.1.3 uqr: 0.1.2 + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + locate-path@7.2.0: dependencies: p-locate: 6.0.0 + lodash-es@4.17.23: {} + lodash.includes@4.3.0: {} lodash.isboolean@3.0.3: {} @@ -8680,6 +9826,8 @@ snapshots: lru-cache@10.4.3: {} + lru-cache@11.2.6: {} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -8692,6 +9840,10 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + magicast@0.3.5: dependencies: '@babel/parser': 7.28.4 @@ -9196,10 +10348,16 @@ snapshots: mimic-function@5.0.1: {} + min-indent@1.0.1: {} + minimatch@10.0.3: dependencies: '@isaacs/brace-expansion': 5.0.0 + minimatch@10.2.4: + dependencies: + brace-expansion: 5.0.3 + minimatch@5.1.6: dependencies: brace-expansion: 2.0.2 @@ -9263,6 +10421,8 @@ snapshots: nanoid@3.3.11: {} + natural-compare@1.4.0: {} + negotiator@1.0.0: {} neotraverse@0.6.18: {} @@ -9342,6 +10502,8 @@ snapshots: object-treeify@1.1.33: {} + obug@2.1.1: {} + ofetch@1.4.1: dependencies: destr: 2.0.5 @@ -9384,6 +10546,15 @@ snapshots: regex: 6.0.1 regex-recursion: 6.0.2 + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + ora@8.2.0: dependencies: chalk: 5.5.0 @@ -9402,6 +10573,10 @@ snapshots: dependencies: p-timeout: 6.1.4 + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + p-limit@4.0.0: dependencies: yocto-queue: 1.2.1 @@ -9410,6 +10585,10 @@ snapshots: dependencies: yocto-queue: 1.2.1 + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + p-locate@6.0.0: dependencies: p-limit: 4.0.0 @@ -9497,10 +10676,16 @@ snapshots: dependencies: entities: 6.0.1 + parse5@8.0.0: + dependencies: + entities: 6.0.1 + parseurl@1.3.3: {} path-browserify@1.0.1: {} + path-exists@4.0.0: {} + path-exists@5.0.0: {} path-key@3.1.1: {} @@ -9552,6 +10737,11 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 + postcss-selector-parser@7.1.1: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + postcss-values-parser@6.0.2(postcss@8.5.6): dependencies: color-name: 1.1.4 @@ -9585,6 +10775,8 @@ snapshots: transitivePeerDependencies: - supports-color + prelude-ls@1.2.1: {} + prettier-plugin-astro@0.14.1: dependencies: '@astrojs/compiler': 2.12.2 @@ -9740,6 +10932,11 @@ snapshots: unified: 11.0.5 vfile: 6.0.3 + redent@3.0.0: + dependencies: + indent-string: 4.0.0 + strip-indent: 3.0.0 + regex-recursion@6.0.2: dependencies: regex-utilities: 2.3.0 @@ -10068,10 +11265,16 @@ snapshots: sax@1.4.1: {} + saxes@6.0.0: + dependencies: + xmlchars: 2.2.0 + semver@6.3.1: {} semver@7.7.2: {} + semver@7.7.4: {} + send@1.2.0: dependencies: debug: 4.4.1 @@ -10237,6 +11440,8 @@ snapshots: side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 + siginfo@2.0.0: {} + signal-exit@3.0.7: {} signal-exit@4.1.0: {} @@ -10289,10 +11494,14 @@ snapshots: stack-trace@0.0.10: {} + stackback@0.0.2: {} + statuses@2.0.1: {} statuses@2.0.2: {} + std-env@3.10.0: {} + std-env@3.9.0: {} stdin-discarder@0.2.2: {} @@ -10362,6 +11571,10 @@ snapshots: strip-final-newline@4.0.0: {} + strip-indent@3.0.0: + dependencies: + min-indent: 1.0.1 + style-to-js@1.1.18: dependencies: style-to-object: 1.0.11 @@ -10395,6 +11608,8 @@ snapshots: picocolors: 1.1.1 sax: 1.4.1 + symbol-tree@3.2.4: {} + sync-child-process@1.0.2: dependencies: sync-message-port: 1.1.3 @@ -10403,6 +11618,10 @@ snapshots: sync-message-port@1.1.3: optional: true + synckit@0.11.12: + dependencies: + '@pkgr/core': 0.2.9 + system-architecture@0.1.0: {} tailwind-merge@3.3.1: {} @@ -10439,13 +11658,25 @@ snapshots: tiny-invariant@1.3.3: {} + tinybench@2.9.0: {} + tinyexec@1.0.1: {} + tinyexec@1.0.2: {} + tinyglobby@0.2.15: dependencies: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 + tinyrainbow@3.0.3: {} + + tldts-core@7.0.23: {} + + tldts@7.0.23: + dependencies: + tldts-core: 7.0.23 + tmp-promise@3.0.3: dependencies: tmp: 0.2.5 @@ -10469,8 +11700,16 @@ snapshots: universalify: 0.2.0 url-parse: 1.5.10 + tough-cookie@6.0.0: + dependencies: + tldts: 7.0.23 + tr46@0.0.3: {} + tr46@6.0.0: + dependencies: + punycode: 2.3.1 + trim-lines@3.0.1: {} triple-beam@1.4.1: {} @@ -10481,6 +11720,10 @@ snapshots: dependencies: typescript: 5.9.3 + ts-api-utils@2.4.0(typescript@5.9.3): + dependencies: + typescript: 5.9.3 + ts-morph@26.0.0: dependencies: '@ts-morph/common': 0.27.0 @@ -10500,6 +11743,10 @@ snapshots: tw-animate-css@1.4.0: {} + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + type-fest@0.21.3: {} type-fest@4.41.0: {} @@ -10528,6 +11775,8 @@ snapshots: undici-types@7.14.0: {} + undici@7.22.0: {} + unicode-properties@1.4.1: dependencies: base64-js: 1.5.1 @@ -10710,6 +11959,54 @@ snapshots: optionalDependencies: vite: 6.3.6(@types/node@24.8.1)(jiti@2.6.1)(lightningcss@1.30.1)(sass-embedded@1.93.2)(sass@1.93.2)(yaml@2.8.1) + vitest-axe@0.1.0(vitest@4.0.18(@types/node@24.8.1)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@1.8.0))(lightningcss@1.30.1)(msw@2.10.4(@types/node@24.8.1)(typescript@5.9.3))(sass-embedded@1.93.2)(sass@1.93.2)(yaml@2.8.1)): + dependencies: + aria-query: 5.3.2 + axe-core: 4.11.1 + chalk: 5.5.0 + dom-accessibility-api: 0.5.16 + lodash-es: 4.17.23 + redent: 3.0.0 + vitest: 4.0.18(@types/node@24.8.1)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@1.8.0))(lightningcss@1.30.1)(msw@2.10.4(@types/node@24.8.1)(typescript@5.9.3))(sass-embedded@1.93.2)(sass@1.93.2)(yaml@2.8.1) + + vitest@4.0.18(@types/node@24.8.1)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@1.8.0))(lightningcss@1.30.1)(msw@2.10.4(@types/node@24.8.1)(typescript@5.9.3))(sass-embedded@1.93.2)(sass@1.93.2)(yaml@2.8.1): + dependencies: + '@vitest/expect': 4.0.18 + '@vitest/mocker': 4.0.18(msw@2.10.4(@types/node@24.8.1)(typescript@5.9.3))(vite@6.3.6(@types/node@24.8.1)(jiti@2.6.1)(lightningcss@1.30.1)(sass-embedded@1.93.2)(sass@1.93.2)(yaml@2.8.1)) + '@vitest/pretty-format': 4.0.18 + '@vitest/runner': 4.0.18 + '@vitest/snapshot': 4.0.18 + '@vitest/spy': 4.0.18 + '@vitest/utils': 4.0.18 + es-module-lexer: 1.7.0 + expect-type: 1.3.0 + magic-string: 0.30.21 + obug: 2.1.1 + pathe: 2.0.3 + picomatch: 4.0.3 + std-env: 3.10.0 + tinybench: 2.9.0 + tinyexec: 1.0.2 + tinyglobby: 0.2.15 + tinyrainbow: 3.0.3 + vite: 6.3.6(@types/node@24.8.1)(jiti@2.6.1)(lightningcss@1.30.1)(sass-embedded@1.93.2)(sass@1.93.2)(yaml@2.8.1) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 24.8.1 + jsdom: 28.1.0(@noble/hashes@1.8.0) + transitivePeerDependencies: + - jiti + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - terser + - tsx + - yaml + volar-service-css@0.0.62(@volar/language-service@2.4.22): dependencies: vscode-css-languageservice: 6.3.7 @@ -10820,12 +12117,28 @@ snapshots: vscode-uri@3.1.0: {} + w3c-xmlserializer@5.0.0: + dependencies: + xml-name-validator: 5.0.0 + web-namespaces@2.0.1: {} web-streams-polyfill@3.3.3: {} webidl-conversions@3.0.1: {} + webidl-conversions@8.0.1: {} + + whatwg-mimetype@5.0.0: {} + + whatwg-url@16.0.1(@noble/hashes@1.8.0): + dependencies: + '@exodus/bytes': 1.14.1(@noble/hashes@1.8.0) + tr46: 6.0.0 + webidl-conversions: 8.0.1 + transitivePeerDependencies: + - '@noble/hashes' + whatwg-url@5.0.0: dependencies: tr46: 0.0.3 @@ -10841,6 +12154,11 @@ snapshots: dependencies: isexe: 3.1.1 + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + widest-line@5.0.0: dependencies: string-width: 7.2.0 @@ -10867,6 +12185,8 @@ snapshots: transitivePeerDependencies: - supports-color + word-wrap@1.2.5: {} + wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0 @@ -10898,6 +12218,8 @@ snapshots: imurmurhash: 0.1.4 signal-exit: 4.1.0 + xml-name-validator@5.0.0: {} + xml2js@0.6.2: dependencies: sax: 1.4.1 @@ -10905,6 +12227,8 @@ snapshots: xmlbuilder@11.0.1: {} + xmlchars@2.2.0: {} + xss@1.0.15: dependencies: commander: 2.20.3 @@ -10954,6 +12278,8 @@ snapshots: buffer-crc32: 0.2.13 fd-slicer: 1.1.0 + yocto-queue@0.1.0: {} + yocto-queue@1.2.1: {} yocto-spinner@0.2.3: diff --git a/src/lib/a11y.test.ts b/src/lib/a11y.test.ts new file mode 100644 index 000000000..bb81b2feb --- /dev/null +++ b/src/lib/a11y.test.ts @@ -0,0 +1,21 @@ +import { axe } from "vitest-axe" +import { describe, expect, it } from "vitest" + +describe("a11y smoke checks", () => { + it("has no violations for a basic interactive snippet", async () => { + document.body.innerHTML = ` +
+ +
+ ` + + const results = await axe(document.body, { + rules: { + // jsdom does not implement canvas APIs used by this rule. + "color-contrast": { enabled: false }, + }, + }) + + expect(results.violations).toHaveLength(0) + }) +}) diff --git a/src/lib/utils.test.ts b/src/lib/utils.test.ts new file mode 100644 index 000000000..bb45e0c97 --- /dev/null +++ b/src/lib/utils.test.ts @@ -0,0 +1,22 @@ +import { describe, expect, it } from "vitest" + +import { cn } from "./utils" + +describe("cn", () => { + it("merges class names", () => { + expect(cn("text-sm", "font-medium")).toBe("text-sm font-medium") + }) + + it("resolves Tailwind utility conflicts", () => { + expect(cn("px-2", "px-4")).toBe("px-4") + }) + + it("handles conditional classes", () => { + expect( + cn("base", { + "is-active": true, + "is-hidden": false, + }) + ).toBe("base is-active") + }) +}) diff --git a/tsconfig.json b/tsconfig.json index 317aa567d..f15753d6e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -22,5 +22,5 @@ "skipLibCheck": true, "strict": true }, - "exclude": ["node_modules", "dist"] + "exclude": ["node_modules", "dist", "eslint.config.mjs"] } diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 000000000..e1c0987c7 --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,10 @@ +import { defineConfig } from "vitest/config" + +export default defineConfig({ + test: { + environment: "jsdom", + setupFiles: ["./vitest.setup.ts"], + include: ["src/**/*.test.ts"], + exclude: ["node_modules", "dist", ".astro"], + }, +}) diff --git a/vitest.setup.ts b/vitest.setup.ts new file mode 100644 index 000000000..5fe941947 --- /dev/null +++ b/vitest.setup.ts @@ -0,0 +1 @@ +import "vitest-axe/extend-expect" From 991e5d2a98eceee15d4c7ae1267e8f9995d0785c Mon Sep 17 00:00:00 2001 From: Sil Date: Thu, 26 Feb 2026 09:20:17 +0100 Subject: [PATCH 02/17] imporved shadcn coherence --- public/r/accordion.json | 6 +-- public/r/badge.json | 9 +++- public/r/button.json | 9 +++- public/r/header-3.json | 2 +- public/r/input.json | 2 +- public/r/navigation-menu.json | 2 +- public/r/registry.json | 8 ++++ public/r/separator.json | 2 +- public/r/sheet.json | 2 +- public/r/table.json | 2 +- registry.json | 8 ++++ src/components/blocks/header-3.astro | 37 ++++++++++++++-- src/components/starlight-icons.astro | 37 ++++++++++++++-- src/components/ui/badge/badge-variants.ts | 27 ++++++++++++ src/components/ui/badge/badge.astro | 27 ++---------- src/components/ui/badge/index.ts | 2 + src/components/ui/button/button-variants.ts | 37 ++++++++++++++++ src/components/ui/button/button.astro | 43 +++---------------- src/components/ui/button/index.ts | 2 + .../ui/command/command-dialog.astro | 4 -- src/components/ui/dialog/dialog-content.astro | 26 +++++------ src/components/ui/input/input.astro | 4 +- src/components/ui/navigation-menu/index.ts | 9 ++++ src/components/ui/separator/separator.astro | 11 ++++- src/components/ui/sheet/sheet-content.astro | 26 +++++------ src/components/ui/table/table-head.astro | 3 +- src/content/docs/docs/components/badge.mdx | 2 + src/content/docs/docs/components/button.mdx | 6 +++ src/content/docs/docs/components/input.mdx | 1 + .../docs/docs/components/navigation-menu.mdx | 16 +++++++ .../docs/docs/components/separator.mdx | 1 + src/content/docs/docs/components/sheet.mdx | 8 +--- src/env.d.ts | 5 +++ 33 files changed, 256 insertions(+), 130 deletions(-) create mode 100644 src/components/ui/badge/badge-variants.ts create mode 100644 src/components/ui/button/button-variants.ts diff --git a/public/r/accordion.json b/public/r/accordion.json index 467dcd608..65f3be852 100644 --- a/public/r/accordion.json +++ b/public/r/accordion.json @@ -5,17 +5,17 @@ "files": [ { "path": "src/components/ui/accordion/accordion.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n
\n \n
\n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", "type": "registry:ui" }, { "path": "src/components/ui/accordion/accordion-content.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", "type": "registry:ui" }, { "path": "src/components/ui/accordion/accordion-item.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends Omit, \"class\"> {\n class?: string\n open?: boolean\n}\n\nconst { class: className, open = false, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends Omit, \"class\"> {\n class?: string\n open?: boolean\n}\n\nconst { class: className, open = false, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n\n", "type": "registry:ui" }, { diff --git a/public/r/badge.json b/public/r/badge.json index 1716a5f80..d28d7ad5f 100644 --- a/public/r/badge.json +++ b/public/r/badge.json @@ -3,14 +3,19 @@ "name": "badge", "type": "registry:ui", "files": [ + { + "path": "src/components/ui/badge/badge-variants.ts", + "content": "import { cva, type VariantProps } from \"class-variance-authority\"\n\nexport const badgeVariants = cva(\n \"focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-md border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] [&>svg]:pointer-events-none [&>svg]:size-3\",\n {\n variants: {\n variant: {\n default:\n \"bg-primary text-primary-foreground [a&]:hover:bg-primary/90 border-transparent\",\n secondary:\n \"bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90 border-transparent\",\n destructive:\n \"bg-destructive [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60 border-transparent text-white\",\n outline:\n \"text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n ghost:\n \"text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground border-transparent\",\n link: \"text-primary underline-offset-4 [a&]:hover:underline border-transparent\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nexport type BadgeVariantProps = VariantProps\n", + "type": "registry:ui" + }, { "path": "src/components/ui/badge/badge.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = VariantProps &\n HTMLAttributes<\"span\"> &\n HTMLAttributes<\"a\"> & {\n text?: string\n html?: string\n }\n\nconst variants = cva(\n \"focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-md border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] [&>svg]:pointer-events-none [&>svg]:size-3\",\n {\n variants: {\n variant: {\n default:\n \"bg-primary text-primary-foreground [a&]:hover:bg-primary/90 border-transparent\",\n secondary:\n \"bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90 border-transparent\",\n destructive:\n \"bg-destructive [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60 border-transparent text-white\",\n outline:\n \"text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nconst { class: className, variant, href, text, html, ...props } = Astro.props\n\nconst Comp = href ? \"a\" : \"span\"\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\nimport { badgeVariants, type BadgeVariantProps } from \"./badge-variants\"\n\ntype Props = BadgeVariantProps &\n HTMLAttributes<\"span\"> &\n HTMLAttributes<\"a\"> & {\n text?: string\n html?: string\n }\n\nconst { class: className, variant, href, text, html, ...props } = Astro.props\n\nconst Comp = href ? \"a\" : \"span\"\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", "type": "registry:ui" }, { "path": "src/components/ui/badge/index.ts", - "content": "export { default as Badge } from \"./badge.astro\"\n", + "content": "export { badgeVariants, type BadgeVariantProps } from \"./badge-variants\"\n\nexport { default as Badge } from \"./badge.astro\"\n", "type": "registry:ui" } ] diff --git a/public/r/button.json b/public/r/button.json index 30d860efe..454f9ba8f 100644 --- a/public/r/button.json +++ b/public/r/button.json @@ -3,14 +3,19 @@ "name": "button", "type": "registry:ui", "files": [ + { + "path": "src/components/ui/button/button-variants.ts", + "content": "import { cva, type VariantProps } from \"class-variance-authority\"\n\nexport const buttonVariants = cva(\n \"focus-visible:border-ring text-foreground focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60 text-white\",\n outline:\n \"bg-background hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 border shadow-xs\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n xs: \"h-7 rounded-md gap-1 px-2.5 has-[>svg]:px-2\",\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n \"icon-xs\": \"size-7\",\n icon: \"size-9\",\n \"icon-sm\": \"size-8\",\n \"icon-lg\": \"size-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nexport type ButtonVariantProps = VariantProps\n", + "type": "registry:ui" + }, { "path": "src/components/ui/button/button.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = VariantProps &\n HTMLAttributes<\"button\"> &\n HTMLAttributes<\"a\"> &\n HTMLAttributes<\"label\"> & {\n as?: \"button\" | \"a\" | \"label\"\n text?: string\n html?: string\n }\n\nconst variants = cva(\n \"focus-visible:border-ring text-foreground focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60 text-white\",\n outline:\n \"bg-background hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 border shadow-xs\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n \"icon-sm\": \"size-8\",\n \"icon-lg\": \"size-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nconst {\n class: className,\n variant,\n size,\n href,\n text,\n html,\n ...props\n} = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n\nconst Comp = href ? \"a\" : \"button\"\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\nimport { buttonVariants, type ButtonVariantProps } from \"./button-variants\"\n\ntype Props = ButtonVariantProps &\n HTMLAttributes<\"button\"> &\n HTMLAttributes<\"a\"> &\n HTMLAttributes<\"label\"> & {\n as?: \"button\" | \"a\" | \"label\"\n text?: string\n html?: string\n }\n\nconst {\n class: className,\n variant,\n size,\n as,\n href,\n text,\n html,\n ...props\n} = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n\nconst Comp = as || (href ? \"a\" : \"button\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", "type": "registry:ui" }, { "path": "src/components/ui/button/index.ts", - "content": "export { default as Button } from \"./button.astro\"\n", + "content": "export { buttonVariants, type ButtonVariantProps } from \"./button-variants\"\n\nexport { default as Button } from \"./button.astro\"\n", "type": "registry:ui" } ] diff --git a/public/r/header-3.json b/public/r/header-3.json index d1b889442..57645a055 100644 --- a/public/r/header-3.json +++ b/public/r/header-3.json @@ -16,7 +16,7 @@ "files": [ { "path": "src/components/blocks/header-3.astro", - "content": "---\nimport MenuIcon from \"lucide-static/icons/menu.svg\"\n\nimport { Button } from \"@/components/ui/button\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/components/ui/collapsible\"\nimport { Header, HeaderActions } from \"@/components/ui/header\"\nimport { Icon } from \"@/components/ui/icon\"\nimport { Logo, LogoImage, LogoText } from \"@/components/ui/logo\"\nimport {\n NavigationMenu,\n NavigationMenuContent,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n NavigationMenuSub,\n NavigationMenuSubItem,\n NavigationMenuSubLink,\n NavigationMenuTrigger,\n} from \"@/components/ui/navigation-menu\"\nimport { Sheet, SheetContent, SheetTrigger } from \"@/components/ui/sheet\"\nimport {\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n} from \"@/components/ui/sidebar\"\nimport { ThemeToggle } from \"@/components/ui/theme-toggle\"\n\ninterface Props {\n logo?: {\n src?: string\n alt?: string\n text?: string\n href?: string\n }\n links?: {\n icon?: string\n text?: string\n href?: string\n target?: string\n }[]\n socials?: string[]\n menus?: {\n text?: string\n href?: string\n links?: {\n text?: string\n href?: string\n }[]\n }[]\n}\n\nconst { logo, menus, links, socials } = Astro.props\n\nconst githubStarCount = (\n await (await fetch(\"https://api.github.com/repos/fulldotdev/ui\")).json()\n).stargazers_count\n---\n\n
\n \n \n {logo?.text}\n \n \n \n {\n menus?.map((menu) => (\n \n {menu.links && menu.links.length > 0 ? (\n <>\n \n {menu.text}\n \n \n \n {menu.links?.map((link) => (\n \n \n {link.text}\n \n \n ))}\n \n \n \n ) : (\n \n {menu.text}\n \n )}\n \n ))\n }\n \n \n \n \n {\n socials?.map((social) => (\n <>\n \n \n ))\n }\n {\n links?.map(({ icon, text, ...link }, i) => (\n \n {icon && }\n {text}\n \n ))\n }\n \n \n {githubStarCount}\n \n \n \n \n \n \n \n \n {\n menus?.map((menu) => (\n \n {menu.links && menu.links.length > 0 ? (\n \n \n \n {menu.text}\n \n \n \n \n {menu.links?.map((link) => (\n \n \n {link.text}\n \n \n ))}\n \n \n \n ) : (\n svg]:px-4\"\n href={menu.href}\n >\n {menu.text}\n \n )}\n \n ))\n }\n \n \n {\n links?.map(({ icon, text, ...link }, i) => (\n \n {icon && }\n {text}\n \n ))\n }\n \n \n {\n socials?.map((social) => (\n \n ))\n }\n \n \n \n
\n", + "content": "---\nimport MenuIcon from \"lucide-static/icons/menu.svg\"\n\nimport { Button } from \"@/components/ui/button\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/components/ui/collapsible\"\nimport { Header, HeaderActions } from \"@/components/ui/header\"\nimport { Icon } from \"@/components/ui/icon\"\nimport { Logo, LogoImage, LogoText } from \"@/components/ui/logo\"\nimport {\n NavigationMenu,\n NavigationMenuContent,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n NavigationMenuSub,\n NavigationMenuSubItem,\n NavigationMenuSubLink,\n NavigationMenuTrigger,\n} from \"@/components/ui/navigation-menu\"\nimport { Sheet, SheetContent, SheetTrigger } from \"@/components/ui/sheet\"\nimport {\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n} from \"@/components/ui/sidebar\"\nimport { ThemeToggle } from \"@/components/ui/theme-toggle\"\n\ninterface Props {\n logo?: {\n src?: string\n alt?: string\n text?: string\n href?: string\n }\n links?: {\n icon?: string\n text?: string\n href?: string\n target?: string\n }[]\n socials?: string[]\n menus?: {\n text?: string\n href?: string\n links?: {\n text?: string\n href?: string\n }[]\n }[]\n}\n\nconst { logo, menus, links, socials } = Astro.props\n\nconst parseEnvStarCount = (value: string | undefined) => {\n if (!value) return null\n const parsed = Number(value)\n return Number.isFinite(parsed) && parsed >= 0 ? Math.floor(parsed) : null\n}\n\nasync function getGithubStarCount(repo: string): Promise {\n const envStarCount = parseEnvStarCount(import.meta.env.PUBLIC_GITHUB_STAR_COUNT)\n if (envStarCount !== null) return envStarCount\n\n if (import.meta.env.PUBLIC_FETCH_GITHUB_STARS !== \"true\") return null\n\n try {\n const response = await fetch(`https://api.github.com/repos/${repo}`, {\n headers: {\n Accept: \"application/vnd.github+json\",\n },\n signal: AbortSignal.timeout(2000),\n })\n\n if (!response.ok) return null\n\n const data = (await response.json()) as { stargazers_count?: unknown }\n return typeof data.stargazers_count === \"number\"\n ? data.stargazers_count\n : null\n } catch {\n return null\n }\n}\n\nconst githubStarCount = await getGithubStarCount(\"fulldotdev/ui\")\n---\n\n
\n \n \n {logo?.text}\n \n \n \n {\n menus?.map((menu) => (\n \n {menu.links && menu.links.length > 0 ? (\n <>\n \n {menu.text}\n \n \n \n {menu.links?.map((link) => (\n \n \n {link.text}\n \n \n ))}\n \n \n \n ) : (\n \n {menu.text}\n \n )}\n \n ))\n }\n \n \n \n \n {\n socials?.map((social) => (\n <>\n \n \n ))\n }\n {\n links?.map(({ icon, text, ...link }, i) => (\n \n {icon && }\n {text}\n \n ))\n }\n \n \n {githubStarCount !== null && githubStarCount.toLocaleString()}\n \n \n \n \n \n \n \n \n {\n menus?.map((menu) => (\n \n {menu.links && menu.links.length > 0 ? (\n \n \n \n {menu.text}\n \n \n \n \n {menu.links?.map((link) => (\n \n \n {link.text}\n \n \n ))}\n \n \n \n ) : (\n svg]:px-4\"\n href={menu.href}\n >\n {menu.text}\n \n )}\n \n ))\n }\n \n \n {\n links?.map(({ icon, text, ...link }, i) => (\n \n {icon && }\n {text}\n \n ))\n }\n \n \n {\n socials?.map((social) => (\n \n ))\n }\n \n \n \n
\n", "type": "registry:block" } ] diff --git a/public/r/input.json b/public/r/input.json index d86815ae4..e8dd266ae 100644 --- a/public/r/input.json +++ b/public/r/input.json @@ -5,7 +5,7 @@ "files": [ { "path": "src/components/ui/input/input.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends Omit, \"type\"> {\n type: \"text\" | \"email\" | \"tel\"\n}\n\nconst { class: className, ...props } = Astro.props\n---\n\n\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"input\"> {}\n\nconst { class: className, ...props } = Astro.props\n---\n\n\n", "type": "registry:ui" }, { diff --git a/public/r/navigation-menu.json b/public/r/navigation-menu.json index 24cca1d5e..aa313ee68 100644 --- a/public/r/navigation-menu.json +++ b/public/r/navigation-menu.json @@ -50,7 +50,7 @@ }, { "path": "src/components/ui/navigation-menu/index.ts", - "content": "export { default as NavigationMenu } from \"./navigation-menu.astro\"\nexport { default as NavigationMenuContent } from \"./navigation-menu-content.astro\"\nexport { default as NavigationMenuItem } from \"./navigation-menu-item.astro\"\nexport { default as NavigationMenuLink } from \"./navigation-menu-link.astro\"\nexport { default as NavigationMenuList } from \"./navigation-menu-list.astro\"\nexport { default as NavigationMenuSub } from \"./navigation-menu-sub.astro\"\nexport { default as NavigationMenuSubItem } from \"./navigation-menu-sub-item.astro\"\nexport { default as NavigationMenuSubLink } from \"./navigation-menu-sub-link.astro\"\nexport { default as NavigationMenuTrigger } from \"./navigation-menu-trigger.astro\"\n", + "content": "import { cn } from \"@/lib/utils\"\n\nexport function navigationMenuTriggerStyle(className?: string) {\n return cn(\n \"bg-background hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground h-9 w-max px-4 py-2 text-sm font-medium disabled:pointer-events-none disabled:opacity-50\",\n className\n )\n}\n\nexport { default as NavigationMenu } from \"./navigation-menu.astro\"\nexport { default as NavigationMenuContent } from \"./navigation-menu-content.astro\"\nexport { default as NavigationMenuItem } from \"./navigation-menu-item.astro\"\nexport { default as NavigationMenuLink } from \"./navigation-menu-link.astro\"\nexport { default as NavigationMenuList } from \"./navigation-menu-list.astro\"\nexport { default as NavigationMenuSub } from \"./navigation-menu-sub.astro\"\nexport { default as NavigationMenuSubItem } from \"./navigation-menu-sub-item.astro\"\nexport { default as NavigationMenuSubLink } from \"./navigation-menu-sub-link.astro\"\nexport { default as NavigationMenuTrigger } from \"./navigation-menu-trigger.astro\"\n", "type": "registry:ui" } ] diff --git a/public/r/registry.json b/public/r/registry.json index 36a8979b6..9000cdbcd 100644 --- a/public/r/registry.json +++ b/public/r/registry.json @@ -78,6 +78,10 @@ "name": "badge", "type": "registry:ui", "files": [ + { + "path": "src/components/ui/badge/badge-variants.ts", + "type": "registry:ui" + }, { "path": "src/components/ui/badge/badge.astro", "type": "registry:ui" @@ -123,6 +127,10 @@ "name": "button", "type": "registry:ui", "files": [ + { + "path": "src/components/ui/button/button-variants.ts", + "type": "registry:ui" + }, { "path": "src/components/ui/button/button.astro", "type": "registry:ui" diff --git a/public/r/separator.json b/public/r/separator.json index 7ec53e417..70d653691 100644 --- a/public/r/separator.json +++ b/public/r/separator.json @@ -5,7 +5,7 @@ "files": [ { "path": "src/components/ui/separator/separator.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\">, VariantProps {\n orientation?: \"horizontal\" | \"vertical\"\n}\n\nconst variants = cva(\"bg-border block shrink-0\", {\n variants: {\n orientation: {\n horizontal: \"h-px w-full\",\n vertical: \"h-full w-px\",\n },\n },\n defaultVariants: {\n orientation: \"horizontal\",\n },\n})\n\nconst { class: className, orientation = \"horizontal\", ...props } = Astro.props\n---\n\n\n\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\">, VariantProps {\n orientation?: \"horizontal\" | \"vertical\"\n decorative?: boolean\n}\n\nconst variants = cva(\"bg-border block shrink-0\", {\n variants: {\n orientation: {\n horizontal: \"h-px w-full\",\n vertical: \"h-full w-px\",\n },\n },\n defaultVariants: {\n orientation: \"horizontal\",\n },\n})\n\nconst {\n class: className,\n orientation = \"horizontal\",\n decorative = true,\n ...props\n} = Astro.props\n---\n\n\n\n", "type": "registry:ui" }, { diff --git a/public/r/sheet.json b/public/r/sheet.json index 2e3121c07..3fd28b7f1 100644 --- a/public/r/sheet.json +++ b/public/r/sheet.json @@ -18,7 +18,7 @@ }, { "path": "src/components/ui/sheet/sheet-content.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport XIcon from \"lucide-static/icons/x.svg\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst dialogVariants = cva(\n [\n \"fixed inset-0 z-50 m-0 max-h-none max-w-none border-0 bg-transparent p-0\",\n \"backdrop:bg-black/50\",\n // Added for quick fix over horizontal scroll issue\n \"overflow-x-hidden\",\n ],\n {\n variants: {\n side: {\n right: \"ml-auto h-full w-3/4 sm:max-w-sm\",\n left: \"mr-auto h-full w-3/4 sm:max-w-sm\",\n top: \"mb-auto h-auto w-full\",\n bottom: \"mt-auto h-auto w-full\",\n },\n },\n defaultVariants: {\n side: \"right\",\n },\n }\n)\n\nconst contentVariants = cva(\n \"bg-background flex h-full flex-col gap-4 shadow-lg transition-transform duration-500 ease-in-out\",\n {\n variants: {\n side: {\n right: \"translate-x-full border-l\",\n left: \"-translate-x-full border-r\",\n top: \"-translate-y-full border-b\",\n bottom: \"translate-y-full border-t\",\n },\n },\n defaultVariants: {\n side: \"right\",\n },\n }\n)\n\ntype Props = VariantProps &\n HTMLAttributes<\"div\"> & {\n showClose?: boolean\n }\n\nconst { class: className, side, showClose = true, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n\n \n {\n showClose && (\n \n \n \n )\n }\n \n \n\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport XIcon from \"lucide-static/icons/x.svg\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst dialogVariants = cva(\n [\n \"fixed inset-0 z-50 m-0 max-h-none max-w-none border-0 bg-transparent p-0\",\n \"backdrop:bg-black/50\",\n // Added for quick fix over horizontal scroll issue\n \"overflow-x-hidden\",\n ],\n {\n variants: {\n side: {\n right: \"ml-auto h-full w-3/4 sm:max-w-sm\",\n left: \"mr-auto h-full w-3/4 sm:max-w-sm\",\n top: \"mb-auto h-auto w-full\",\n bottom: \"mt-auto h-auto w-full\",\n },\n },\n defaultVariants: {\n side: \"right\",\n },\n }\n)\n\nconst contentVariants = cva(\n \"bg-background flex h-full flex-col gap-4 shadow-lg transition-transform duration-500 ease-in-out\",\n {\n variants: {\n side: {\n right: \"translate-x-full border-l\",\n left: \"-translate-x-full border-r\",\n top: \"-translate-y-full border-b\",\n bottom: \"translate-y-full border-t\",\n },\n },\n defaultVariants: {\n side: \"right\",\n },\n }\n)\n\ntype Props = VariantProps &\n HTMLAttributes<\"div\">\n\nconst { class: className, side, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n\n \n \n \n \n \n \n\n", "type": "registry:ui" }, { diff --git a/public/r/table.json b/public/r/table.json index 050918eb9..c6e9725e3 100644 --- a/public/r/table.json +++ b/public/r/table.json @@ -30,7 +30,7 @@ }, { "path": "src/components/ui/table/table-head.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"th\"> {}\n\nconst { class: className, ...props } = Astro.props\n---\n\n[role=checkbox]]:translate-y-[2px]\",\n className\n )}\n {...props}\n>\n \n\n\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"th\"> {}\n\nconst { class: className, ...props } = Astro.props\n---\n\n[role=checkbox]]:translate-y-[2px]\",\n className\n )}\n {...props}\n>\n \n\n", "type": "registry:ui" }, { diff --git a/registry.json b/registry.json index 36a8979b6..9000cdbcd 100644 --- a/registry.json +++ b/registry.json @@ -78,6 +78,10 @@ "name": "badge", "type": "registry:ui", "files": [ + { + "path": "src/components/ui/badge/badge-variants.ts", + "type": "registry:ui" + }, { "path": "src/components/ui/badge/badge.astro", "type": "registry:ui" @@ -123,6 +127,10 @@ "name": "button", "type": "registry:ui", "files": [ + { + "path": "src/components/ui/button/button-variants.ts", + "type": "registry:ui" + }, { "path": "src/components/ui/button/button.astro", "type": "registry:ui" diff --git a/src/components/blocks/header-3.astro b/src/components/blocks/header-3.astro index ea84a2a79..f0a605820 100644 --- a/src/components/blocks/header-3.astro +++ b/src/components/blocks/header-3.astro @@ -58,9 +58,38 @@ interface Props { const { logo, menus, links, socials } = Astro.props -const githubStarCount = ( - await (await fetch("https://api.github.com/repos/fulldotdev/ui")).json() -).stargazers_count +const parseEnvStarCount = (value: string | undefined) => { + if (!value) return null + const parsed = Number(value) + return Number.isFinite(parsed) && parsed >= 0 ? Math.floor(parsed) : null +} + +async function getGithubStarCount(repo: string): Promise { + const envStarCount = parseEnvStarCount(import.meta.env.PUBLIC_GITHUB_STAR_COUNT) + if (envStarCount !== null) return envStarCount + + if (import.meta.env.PUBLIC_FETCH_GITHUB_STARS !== "true") return null + + try { + const response = await fetch(`https://api.github.com/repos/${repo}`, { + headers: { + Accept: "application/vnd.github+json", + }, + signal: AbortSignal.timeout(2000), + }) + + if (!response.ok) return null + + const data = (await response.json()) as { stargazers_count?: unknown } + return typeof data.stargazers_count === "number" + ? data.stargazers_count + : null + } catch { + return null + } +} + +const githubStarCount = await getGithubStarCount("fulldotdev/ui") ---
@@ -137,7 +166,7 @@ const githubStarCount = ( target="_blank" > - {githubStarCount} + {githubStarCount !== null && githubStarCount.toLocaleString()} diff --git a/src/components/starlight-icons.astro b/src/components/starlight-icons.astro index 41ff78676..899edcbd6 100644 --- a/src/components/starlight-icons.astro +++ b/src/components/starlight-icons.astro @@ -10,9 +10,38 @@ const layout = await getEntry("layouts", "index") const socials = layout?.data?.headers?.[1]?.socials -const githubStarCount = ( - await (await fetch("https://api.github.com/repos/fulldotdev/ui")).json() -).stargazers_count +const parseEnvStarCount = (value: string | undefined) => { + if (!value) return null + const parsed = Number(value) + return Number.isFinite(parsed) && parsed >= 0 ? Math.floor(parsed) : null +} + +async function getGithubStarCount(repo: string): Promise { + const envStarCount = parseEnvStarCount(import.meta.env.PUBLIC_GITHUB_STAR_COUNT) + if (envStarCount !== null) return envStarCount + + if (import.meta.env.PUBLIC_FETCH_GITHUB_STARS !== "true") return null + + try { + const response = await fetch(`https://api.github.com/repos/${repo}`, { + headers: { + Accept: "application/vnd.github+json", + }, + signal: AbortSignal.timeout(2000), + }) + + if (!response.ok) return null + + const data = (await response.json()) as { stargazers_count?: unknown } + return typeof data.stargazers_count === "number" + ? data.stargazers_count + : null + } catch { + return null + } +} + +const githubStarCount = await getGithubStarCount("fulldotdev/ui") --- @@ -31,6 +60,6 @@ const githubStarCount = ( target="_blank" > - {githubStarCount} + {githubStarCount !== null && githubStarCount.toLocaleString()} diff --git a/src/components/ui/badge/badge-variants.ts b/src/components/ui/badge/badge-variants.ts new file mode 100644 index 000000000..7fc5f3655 --- /dev/null +++ b/src/components/ui/badge/badge-variants.ts @@ -0,0 +1,27 @@ +import { cva, type VariantProps } from "class-variance-authority" + +export const badgeVariants = cva( + "focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-md border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] [&>svg]:pointer-events-none [&>svg]:size-3", + { + variants: { + variant: { + default: + "bg-primary text-primary-foreground [a&]:hover:bg-primary/90 border-transparent", + secondary: + "bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90 border-transparent", + destructive: + "bg-destructive [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60 border-transparent text-white", + outline: + "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground", + ghost: + "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground border-transparent", + link: "text-primary underline-offset-4 [a&]:hover:underline border-transparent", + }, + }, + defaultVariants: { + variant: "default", + }, + } +) + +export type BadgeVariantProps = VariantProps diff --git a/src/components/ui/badge/badge.astro b/src/components/ui/badge/badge.astro index 1aadab428..2422e4df0 100644 --- a/src/components/ui/badge/badge.astro +++ b/src/components/ui/badge/badge.astro @@ -1,37 +1,16 @@ --- import type { HTMLAttributes } from "astro/types" -import { cva, type VariantProps } from "class-variance-authority" import { cn } from "@/lib/utils" +import { badgeVariants, type BadgeVariantProps } from "./badge-variants" -type Props = VariantProps & +type Props = BadgeVariantProps & HTMLAttributes<"span"> & HTMLAttributes<"a"> & { text?: string html?: string } -const variants = cva( - "focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-md border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] [&>svg]:pointer-events-none [&>svg]:size-3", - { - variants: { - variant: { - default: - "bg-primary text-primary-foreground [a&]:hover:bg-primary/90 border-transparent", - secondary: - "bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90 border-transparent", - destructive: - "bg-destructive [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60 border-transparent text-white", - outline: - "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground", - }, - }, - defaultVariants: { - variant: "default", - }, - } -) - const { class: className, variant, href, text, html, ...props } = Astro.props const Comp = href ? "a" : "span" @@ -42,7 +21,7 @@ const slot = await Astro.slots.render("default") slot?.trim().length > 0 && ( svg]:px-2", + default: "h-9 px-4 py-2 has-[>svg]:px-3", + sm: "h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5", + lg: "h-10 rounded-md px-6 has-[>svg]:px-4", + "icon-xs": "size-7", + icon: "size-9", + "icon-sm": "size-8", + "icon-lg": "size-10", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + } +) + +export type ButtonVariantProps = VariantProps diff --git a/src/components/ui/button/button.astro b/src/components/ui/button/button.astro index 9f47a6161..530239acc 100644 --- a/src/components/ui/button/button.astro +++ b/src/components/ui/button/button.astro @@ -1,10 +1,10 @@ --- import type { HTMLAttributes } from "astro/types" -import { cva, type VariantProps } from "class-variance-authority" import { cn } from "@/lib/utils" +import { buttonVariants, type ButtonVariantProps } from "./button-variants" -type Props = VariantProps & +type Props = ButtonVariantProps & HTMLAttributes<"button"> & HTMLAttributes<"a"> & HTMLAttributes<"label"> & { @@ -13,42 +13,11 @@ type Props = VariantProps & html?: string } -const variants = cva( - "focus-visible:border-ring text-foreground focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", - { - variants: { - variant: { - default: "bg-primary text-primary-foreground hover:bg-primary/90", - destructive: - "bg-destructive hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60 text-white", - outline: - "bg-background hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 border shadow-xs", - secondary: - "bg-secondary text-secondary-foreground hover:bg-secondary/80", - ghost: - "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50", - link: "text-primary underline-offset-4 hover:underline", - }, - size: { - default: "h-9 px-4 py-2 has-[>svg]:px-3", - sm: "h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5", - lg: "h-10 rounded-md px-6 has-[>svg]:px-4", - icon: "size-9", - "icon-sm": "size-8", - "icon-lg": "size-10", - }, - }, - defaultVariants: { - variant: "default", - size: "default", - }, - } -) - const { class: className, variant, size, + as, href, text, html, @@ -57,15 +26,15 @@ const { const slot = await Astro.slots.render("default") -const Comp = href ? "a" : "button" +const Comp = as || (href ? "a" : "button") --- { slot?.trim().length > 0 && ( diff --git a/src/components/ui/button/index.ts b/src/components/ui/button/index.ts index 73868e522..8c74915a3 100644 --- a/src/components/ui/button/index.ts +++ b/src/components/ui/button/index.ts @@ -1 +1,3 @@ +export { buttonVariants, type ButtonVariantProps } from "./button-variants" + export { default as Button } from "./button.astro" diff --git a/src/components/ui/command/command-dialog.astro b/src/components/ui/command/command-dialog.astro index 553c7518b..ee7d71d68 100644 --- a/src/components/ui/command/command-dialog.astro +++ b/src/components/ui/command/command-dialog.astro @@ -7,14 +7,12 @@ interface Props extends ComponentProps { title?: string description?: string contentClass?: string - showCloseButton?: boolean } const { title = "Command Palette", description = "Search for a command to run...", contentClass, - showCloseButton = true, ...props } = Astro.props @@ -40,7 +38,6 @@ const slot = await Astro.slots.render("default") "[&_[data-slot=command-group]:not([hidden])_~[data-slot=command-group]]:pt-0", contentClass, ]} - showClose={showCloseButton} >

{title}

@@ -49,4 +46,3 @@ const slot = await Astro.slots.render("default") - diff --git a/src/components/ui/dialog/dialog-content.astro b/src/components/ui/dialog/dialog-content.astro index 2617d887c..20770048e 100644 --- a/src/components/ui/dialog/dialog-content.astro +++ b/src/components/ui/dialog/dialog-content.astro @@ -4,11 +4,9 @@ import XIcon from "lucide-static/icons/x.svg" import { cn } from "@/lib/utils" -interface Props extends HTMLAttributes<"div"> { - showClose?: boolean -} +interface Props extends HTMLAttributes<"div"> {} -const { class: className, showClose = true, ...props } = Astro.props +const { class: className, ...props } = Astro.props const slot = await Astro.slots.render("default") --- @@ -25,18 +23,14 @@ const slot = await Astro.slots.render("default") )} {...props} > - { - showClose && ( - - ) - } +
diff --git a/src/components/ui/input/input.astro b/src/components/ui/input/input.astro index c24646907..d04607f42 100644 --- a/src/components/ui/input/input.astro +++ b/src/components/ui/input/input.astro @@ -3,9 +3,7 @@ import type { HTMLAttributes } from "astro/types" import { cn } from "@/lib/utils" -interface Props extends Omit, "type"> { - type: "text" | "email" | "tel" -} +interface Props extends HTMLAttributes<"input"> {} const { class: className, ...props } = Astro.props --- diff --git a/src/components/ui/navigation-menu/index.ts b/src/components/ui/navigation-menu/index.ts index b76146e57..fcc9bc234 100644 --- a/src/components/ui/navigation-menu/index.ts +++ b/src/components/ui/navigation-menu/index.ts @@ -1,3 +1,12 @@ +import { cn } from "@/lib/utils" + +export function navigationMenuTriggerStyle(className?: string) { + return cn( + "bg-background hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground h-9 w-max px-4 py-2 text-sm font-medium disabled:pointer-events-none disabled:opacity-50", + className + ) +} + export { default as NavigationMenu } from "./navigation-menu.astro" export { default as NavigationMenuContent } from "./navigation-menu-content.astro" export { default as NavigationMenuItem } from "./navigation-menu-item.astro" diff --git a/src/components/ui/separator/separator.astro b/src/components/ui/separator/separator.astro index a2774804f..66da997c0 100644 --- a/src/components/ui/separator/separator.astro +++ b/src/components/ui/separator/separator.astro @@ -6,6 +6,7 @@ import { cn } from "@/lib/utils" interface Props extends HTMLAttributes<"div">, VariantProps { orientation?: "horizontal" | "vertical" + decorative?: boolean } const variants = cva("bg-border block shrink-0", { @@ -20,11 +21,19 @@ const variants = cva("bg-border block shrink-0", { }, }) -const { class: className, orientation = "horizontal", ...props } = Astro.props +const { + class: className, + orientation = "horizontal", + decorative = true, + ...props +} = Astro.props ---
diff --git a/src/components/ui/sheet/sheet-content.astro b/src/components/ui/sheet/sheet-content.astro index a27169122..230e19f53 100644 --- a/src/components/ui/sheet/sheet-content.astro +++ b/src/components/ui/sheet/sheet-content.astro @@ -45,11 +45,9 @@ const contentVariants = cva( ) type Props = VariantProps & - HTMLAttributes<"div"> & { - showClose?: boolean - } + HTMLAttributes<"div"> -const { class: className, side, showClose = true, ...props } = Astro.props +const { class: className, side, ...props } = Astro.props const slot = await Astro.slots.render("default") --- @@ -65,18 +63,14 @@ const slot = await Astro.slots.render("default") class={cn(contentVariants({ side }), className)} {...props} > - { - showClose && ( - - ) - } +
diff --git a/src/components/ui/table/table-head.astro b/src/components/ui/table/table-head.astro index 4bc7eb9df..354da9f68 100644 --- a/src/components/ui/table/table-head.astro +++ b/src/components/ui/table/table-head.astro @@ -11,11 +11,10 @@ const { class: className, ...props } = Astro.props [role=checkbox]]:translate-y-[2px]", + "text-muted-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]", className )} {...props} > - diff --git a/src/content/docs/docs/components/badge.mdx b/src/content/docs/docs/components/badge.mdx index 180cec5fa..0e9056ec1 100644 --- a/src/content/docs/docs/components/badge.mdx +++ b/src/content/docs/docs/components/badge.mdx @@ -15,6 +15,8 @@ import { Icon } from "@/components/ui/icon" Secondary Destructive Outline + Ghost + Link
diff --git a/src/content/docs/docs/components/button.mdx b/src/content/docs/docs/components/button.mdx index ce18b1560..d10e0c05a 100644 --- a/src/content/docs/docs/components/button.mdx +++ b/src/content/docs/docs/components/button.mdx @@ -29,6 +29,12 @@ npx shadcn@latest add @fulldev/button import { Button } from "@/components/ui/button" ``` +You can also import `buttonVariants` to reuse button styles on custom elements. + +```ts +import { buttonVariants } from "@/components/ui/button" +``` + ```astro ``` diff --git a/src/content/docs/docs/components/input.mdx b/src/content/docs/docs/components/input.mdx index d344de958..00ede164e 100644 --- a/src/content/docs/docs/components/input.mdx +++ b/src/content/docs/docs/components/input.mdx @@ -12,6 +12,7 @@ import { Input } from "@/components/ui/input" +
``` diff --git a/src/content/docs/docs/components/navigation-menu.mdx b/src/content/docs/docs/components/navigation-menu.mdx index f537c1464..303179216 100644 --- a/src/content/docs/docs/components/navigation-menu.mdx +++ b/src/content/docs/docs/components/navigation-menu.mdx @@ -74,6 +74,7 @@ import { NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, + navigationMenuTriggerStyle, } from "@/components/ui/navigation-menu" ``` @@ -89,3 +90,18 @@ import { ``` + +### Trigger Style Helper + +```astro +--- +import { + NavigationMenuLink, + navigationMenuTriggerStyle, +} from "@/components/ui/navigation-menu" +--- + + + Home + +``` diff --git a/src/content/docs/docs/components/separator.mdx b/src/content/docs/docs/components/separator.mdx index a00d919ea..fd63bce63 100644 --- a/src/content/docs/docs/components/separator.mdx +++ b/src/content/docs/docs/components/separator.mdx @@ -36,4 +36,5 @@ import { Separator } from "@/components/ui/separator" ```astro + ``` diff --git a/src/content/docs/docs/components/sheet.mdx b/src/content/docs/docs/components/sheet.mdx index 18fe05549..bdbf703d5 100644 --- a/src/content/docs/docs/components/sheet.mdx +++ b/src/content/docs/docs/components/sheet.mdx @@ -54,18 +54,14 @@ import { ```astro - - - + Open Sheet Title Sheet Description - - - + Close diff --git a/src/env.d.ts b/src/env.d.ts index acef35f17..a49927c09 100644 --- a/src/env.d.ts +++ b/src/env.d.ts @@ -1,2 +1,7 @@ /// /// + +interface ImportMetaEnv { + readonly PUBLIC_FETCH_GITHUB_STARS?: string + readonly PUBLIC_GITHUB_STAR_COUNT?: string +} From 6a364f278715ef134b6a2c4d1497ee7bbb249af6 Mon Sep 17 00:00:00 2001 From: Sil Date: Fri, 27 Feb 2026 18:26:10 +0100 Subject: [PATCH 03/17] removed dynamic rendering per component --- .../ui/accordion/accordion-content.astro | 28 +++++------- .../ui/accordion/accordion-item.astro | 42 ++++++++--------- .../ui/accordion/accordion-trigger.astro | 34 ++++++-------- src/components/ui/accordion/accordion.astro | 20 +++------ .../ui/alert/alert-description.astro | 26 +++++------ src/components/ui/alert/alert-title.astro | 25 +++++------ src/components/ui/alert/alert.astro | 21 ++++----- .../ui/avatar/avatar-fallback.astro | 25 +++++------ src/components/ui/avatar/avatar.astro | 25 +++++------ src/components/ui/badge/badge.astro | 25 +++++------ src/components/ui/banner/banner-content.astro | 45 +++++++++---------- .../ui/banner/banner-description.astro | 11 ++--- src/components/ui/banner/banner-title.astro | 11 ++--- src/components/ui/banner/banner.astro | 22 ++++----- src/components/ui/button/button.astro | 22 ++++----- .../ui/collapsible/collapsible-content.astro | 12 ++--- .../ui/collapsible/collapsible-trigger.astro | 32 ++++++------- .../ui/collapsible/collapsible.astro | 21 ++++----- .../ui/command/command-dialog.astro | 3 +- src/components/ui/command/command-empty.astro | 4 +- src/components/ui/command/command-group.astro | 33 ++++++-------- src/components/ui/command/command-item.astro | 31 ++++++------- src/components/ui/command/command-list.astro | 25 +++++------ .../ui/command/command-shortcut.astro | 25 +++++------ src/components/ui/command/command.astro | 26 +++++------ src/components/ui/dialog/dialog-content.astro | 3 +- .../ui/dialog/dialog-description.astro | 19 +++----- src/components/ui/dialog/dialog-footer.astro | 25 +++++------ src/components/ui/dialog/dialog-header.astro | 19 +++----- src/components/ui/dialog/dialog-title.astro | 19 +++----- src/components/ui/dialog/dialog-trigger.astro | 11 ++--- src/components/ui/dialog/dialog.astro | 11 ++--- src/components/ui/empty/empty-content.astro | 26 +++++------ .../ui/empty/empty-description.astro | 25 +++++------ src/components/ui/empty/empty-header.astro | 25 +++++------ src/components/ui/empty/empty-media.astro | 21 ++++----- src/components/ui/empty/empty-title.astro | 19 +++----- src/components/ui/empty/empty.astro | 25 +++++------ src/components/ui/field/field-content.astro | 25 +++++------ .../ui/field/field-description.astro | 30 +++++-------- src/components/ui/field/field-group.astro | 25 +++++------ src/components/ui/field/field-label.astro | 31 ++++++------- src/components/ui/field/field-legend.astro | 32 ++++++------- src/components/ui/field/field-separator.astro | 19 +++----- src/components/ui/field/field-set.astro | 27 +++++------ src/components/ui/field/field-title.astro | 25 +++++------ src/components/ui/field/field.astro | 23 ++++------ src/components/ui/footer/footer-actions.astro | 12 ++--- src/components/ui/footer/footer-content.astro | 11 ++--- .../ui/footer/footer-copyright.astro | 21 ++++----- .../ui/footer/footer-description.astro | 19 +++----- src/components/ui/footer/footer-grid.astro | 23 ++++------ .../ui/footer/footer-group-label.astro | 12 ++--- src/components/ui/footer/footer-group.astro | 11 ++--- .../ui/footer/footer-menu-item.astro | 11 ++--- .../ui/footer/footer-menu-link.astro | 23 ++++------ src/components/ui/footer/footer-menu.astro | 11 ++--- src/components/ui/footer/footer-split.astro | 25 +++++------ src/components/ui/footer/footer-spread.astro | 23 ++++------ src/components/ui/footer/footer.astro | 21 ++++----- src/components/ui/header/header-actions.astro | 11 ++--- src/components/ui/header/header-content.astro | 17 +++---- src/components/ui/header/header.astro | 21 ++++----- src/components/ui/item/item-actions.astro | 19 +++----- src/components/ui/item/item-content.astro | 27 +++++------ src/components/ui/item/item-description.astro | 27 +++++------ src/components/ui/item/item-group.astro | 21 ++++----- src/components/ui/item/item-media.astro | 19 +++----- src/components/ui/item/item-title.astro | 25 +++++------ src/components/ui/item/item.astro | 22 ++++----- src/components/ui/label/label.astro | 25 +++++------ src/components/ui/list/list-item.astro | 24 ++++------ src/components/ui/list/list.astro | 11 ++--- src/components/ui/logo/logo-text.astro | 12 ++--- src/components/ui/logo/logo.astro | 26 +++++------ .../ui/marquee/marquee-content.astro | 5 +-- .../navigation-menu-content.astro | 29 +++++------- .../navigation-menu-item.astro | 19 +++----- .../navigation-menu-link.astro | 31 ++++++------- .../navigation-menu-list.astro | 25 +++++------ .../navigation-menu-sub-item.astro | 19 +++----- .../navigation-menu-sub-link.astro | 27 +++++------ .../navigation-menu/navigation-menu-sub.astro | 19 +++----- .../navigation-menu-trigger.astro | 32 ++++++------- .../ui/navigation-menu/navigation-menu.astro | 25 +++++------ src/components/ui/price/price-unit.astro | 18 +++----- src/components/ui/price/price.astro | 17 +++---- .../ui/section/section-actions.astro | 11 ++--- .../ui/section/section-content.astro | 17 +++---- src/components/ui/section/section-grid.astro | 11 ++--- .../ui/section/section-masonry.astro | 11 ++--- src/components/ui/section/section-media.astro | 25 +++++------ src/components/ui/section/section-prose.astro | 11 ++--- .../ui/section/section-provider.astro | 27 +++++------ src/components/ui/section/section-split.astro | 25 +++++------ .../ui/section/section-spread.astro | 23 ++++------ src/components/ui/section/section.astro | 23 ++++------ src/components/ui/sheet/sheet-content.astro | 3 +- .../ui/sheet/sheet-description.astro | 20 +++------ src/components/ui/sheet/sheet-footer.astro | 19 +++----- src/components/ui/sheet/sheet-header.astro | 19 +++----- src/components/ui/sheet/sheet-title.astro | 19 +++----- src/components/ui/sheet/sheet-trigger.astro | 11 ++--- src/components/ui/sheet/sheet.astro | 21 ++++----- .../ui/sidebar/sidebar-menu-button.astro | 21 ++++----- .../ui/sidebar/sidebar-menu-item.astro | 20 +++------ .../ui/sidebar/sidebar-menu-sub-button.astro | 21 ++++----- .../ui/sidebar/sidebar-menu-sub-item.astro | 19 +++----- .../ui/sidebar/sidebar-menu-sub.astro | 25 +++++------ src/components/ui/sidebar/sidebar-menu.astro | 25 +++++------ src/components/ui/tabs/tabs-content.astro | 28 +++++------- src/components/ui/tabs/tabs-list.astro | 27 +++++------ src/components/ui/tabs/tabs-trigger.astro | 37 +++++++-------- src/components/ui/tabs/tabs.astro | 21 ++++----- src/components/ui/tile/tile-actions.astro | 11 ++--- src/components/ui/tile/tile-content.astro | 12 ++--- src/components/ui/tile/tile-description.astro | 11 ++--- src/components/ui/tile/tile-media.astro | 21 ++++----- src/components/ui/tile/tile-split.astro | 19 +++----- src/components/ui/tile/tile-spread.astro | 23 ++++------ src/components/ui/tile/tile-title.astro | 11 ++--- src/components/ui/tile/tile.astro | 24 ++++------ .../docs/docs/components/accordion.mdx | 2 +- 123 files changed, 965 insertions(+), 1584 deletions(-) diff --git a/src/components/ui/accordion/accordion-content.astro b/src/components/ui/accordion/accordion-content.astro index 07c4d2471..0378b7fbf 100644 --- a/src/components/ui/accordion/accordion-content.astro +++ b/src/components/ui/accordion/accordion-content.astro @@ -6,22 +6,16 @@ import { cn } from "@/lib/utils" interface Props extends HTMLAttributes<"div"> {} const { class: className, ...props } = Astro.props - -const slot = await Astro.slots.render("default") --- -{ - slot?.trim().length > 0 && ( -
- -
- ) -} +
+ +
diff --git a/src/components/ui/accordion/accordion-item.astro b/src/components/ui/accordion/accordion-item.astro index bb10155d3..a3d286405 100644 --- a/src/components/ui/accordion/accordion-item.astro +++ b/src/components/ui/accordion/accordion-item.astro @@ -9,30 +9,24 @@ interface Props extends Omit, "class"> { } const { class: className, open = false, ...props } = Astro.props - -const slot = await Astro.slots.render("default") --- -{ - slot?.trim().length > 0 && ( -
- -
- ) -} +
+ +
diff --git a/src/components/ui/accordion/accordion-trigger.astro b/src/components/ui/accordion/accordion-trigger.astro index 2ff483f04..5ccab85ee 100644 --- a/src/components/ui/accordion/accordion-trigger.astro +++ b/src/components/ui/accordion/accordion-trigger.astro @@ -9,25 +9,19 @@ interface Props extends Omit, "class"> { } const { class: className, ...props } = Astro.props - -const slot = await Astro.slots.render("default") --- -{ - slot?.trim().length > 0 && ( - svg]:rotate-180", - className - )} - {...props} - > - - - - - - ) -} +svg]:rotate-180", + className + )} + {...props} +> + + + + + diff --git a/src/components/ui/accordion/accordion.astro b/src/components/ui/accordion/accordion.astro index c7d449139..fa232cafe 100644 --- a/src/components/ui/accordion/accordion.astro +++ b/src/components/ui/accordion/accordion.astro @@ -6,18 +6,12 @@ import { cn } from "@/lib/utils" interface Props extends HTMLAttributes<"div"> {} const { class: className, ...props } = Astro.props - -const slot = await Astro.slots.render("default") --- -{ - slot?.trim().length > 0 && ( -
- -
- ) -} +
+ +
diff --git a/src/components/ui/alert/alert-description.astro b/src/components/ui/alert/alert-description.astro index 448ba2156..1d4b6ab31 100644 --- a/src/components/ui/alert/alert-description.astro +++ b/src/components/ui/alert/alert-description.astro @@ -6,21 +6,15 @@ import { cn } from "@/lib/utils" interface Props extends HTMLAttributes<"div"> {} const { class: className, ...props } = Astro.props - -const slot = await Astro.slots.render("default") --- -{ - slot?.trim().length > 0 && ( -
- -
- ) -} +
+ +
diff --git a/src/components/ui/alert/alert-title.astro b/src/components/ui/alert/alert-title.astro index ec4f630f0..ccf061536 100644 --- a/src/components/ui/alert/alert-title.astro +++ b/src/components/ui/alert/alert-title.astro @@ -7,20 +7,15 @@ interface Props extends HTMLAttributes<"div"> {} const { class: className, ...props } = Astro.props -const slot = await Astro.slots.render("default") --- -{ - slot?.trim().length > 0 && ( -
- -
- ) -} +
+ +
diff --git a/src/components/ui/alert/alert.astro b/src/components/ui/alert/alert.astro index 7f78fac6c..1732fb9c8 100644 --- a/src/components/ui/alert/alert.astro +++ b/src/components/ui/alert/alert.astro @@ -24,18 +24,13 @@ const variants = cva( const { class: className, variant, ...props } = Astro.props -const slot = await Astro.slots.render("default") --- -{ - slot?.trim().length > 0 && ( - - ) -} + diff --git a/src/components/ui/avatar/avatar-fallback.astro b/src/components/ui/avatar/avatar-fallback.astro index f60adfc74..662acf18f 100644 --- a/src/components/ui/avatar/avatar-fallback.astro +++ b/src/components/ui/avatar/avatar-fallback.astro @@ -7,20 +7,15 @@ interface Props extends HTMLAttributes<"div"> {} const { class: className, ...props } = Astro.props -const slot = await Astro.slots.render("default") --- -{ - slot?.trim().length > 0 && ( -
- -
- ) -} +
+ +
diff --git a/src/components/ui/avatar/avatar.astro b/src/components/ui/avatar/avatar.astro index 1d39691b6..3da10aea8 100644 --- a/src/components/ui/avatar/avatar.astro +++ b/src/components/ui/avatar/avatar.astro @@ -7,20 +7,15 @@ interface Props extends HTMLAttributes<"div"> {} const { class: className, ...props } = Astro.props -const slot = await Astro.slots.render("default") --- -{ - slot?.trim().length > 0 && ( -
- -
- ) -} +
+ +
diff --git a/src/components/ui/badge/badge.astro b/src/components/ui/badge/badge.astro index 2422e4df0..3254978f7 100644 --- a/src/components/ui/badge/badge.astro +++ b/src/components/ui/badge/badge.astro @@ -14,20 +14,15 @@ type Props = BadgeVariantProps & const { class: className, variant, href, text, html, ...props } = Astro.props const Comp = href ? "a" : "span" -const slot = await Astro.slots.render("default") --- -{ - slot?.trim().length > 0 && ( - - - - ) -} + + + diff --git a/src/components/ui/banner/banner-content.astro b/src/components/ui/banner/banner-content.astro index e3410877d..f5d598c40 100644 --- a/src/components/ui/banner/banner-content.astro +++ b/src/components/ui/banner/banner-content.astro @@ -11,31 +11,26 @@ interface Props extends HTMLAttributes<"div"> { const { class: className, showClose = true, ...props } = Astro.props -const slot = await Astro.slots.render("default") --- -{ - slot?.trim().length > 0 && ( -
+ + {showClose && ( + - )} -
- ) -} + + + )} + diff --git a/src/components/ui/banner/banner-description.astro b/src/components/ui/banner/banner-description.astro index 55ae94a3a..23ab0e867 100644 --- a/src/components/ui/banner/banner-description.astro +++ b/src/components/ui/banner/banner-description.astro @@ -7,13 +7,8 @@ interface Props extends HTMLAttributes<"p"> {} const { class: className, ...props } = Astro.props -const slot = await Astro.slots.render("default") --- -{ - slot?.trim().length > 0 && ( -

- -

- ) -} +

+ +

diff --git a/src/components/ui/banner/banner-title.astro b/src/components/ui/banner/banner-title.astro index 48970d833..2c4595f04 100644 --- a/src/components/ui/banner/banner-title.astro +++ b/src/components/ui/banner/banner-title.astro @@ -7,13 +7,8 @@ interface Props extends HTMLAttributes<"p"> {} const { class: className, ...props } = Astro.props -const slot = await Astro.slots.render("default") --- -{ - slot?.trim().length > 0 && ( -

- -

- ) -} +

+ +

diff --git a/src/components/ui/banner/banner.astro b/src/components/ui/banner/banner.astro index 96e27d151..8bb5ab8f9 100644 --- a/src/components/ui/banner/banner.astro +++ b/src/components/ui/banner/banner.astro @@ -28,8 +28,6 @@ const variants = cva( ) const { class: className, variant, ...props } = Astro.props - -const slot = await Astro.slots.render("default") --- -{ - slot?.trim().length > 0 && ( -
- -
- ) -} +
+ +
\n\n{\n slot?.trim().length > 0 && (\n \n \n
\n )\n}\n\n\n\n\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props\n extends HTMLAttributes<\"header\">,\n VariantProps {}\n\nconst variants = cva(\n \"relative mx-auto flex min-h-12 items-center justify-between gap-8 border border-transparent px-(--banner-px) py-1\",\n {\n variants: {\n variant: {\n default: \"bg-foreground text-background w-full\",\n floating: [\n \"bg-foreground text-background rounded-xl shadow-sm\",\n \"w-[calc(100%-2*var(--gutter,24px))] max-w-(--banner-width)\",\n \"border-border my-2 overflow-hidden rounded-xl border\",\n ],\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nconst { class: className, variant, ...props } = Astro.props\n---\n\n\n\n\n \n\n\n\n\n\n", "type": "registry:ui" }, { @@ -19,17 +16,17 @@ }, { "path": "src/components/ui/banner/banner-content.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport XIcon from \"lucide-static/icons/x.svg\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\n\ninterface Props extends HTMLAttributes<\"div\"> {\n showClose?: boolean\n}\n\nconst { class: className, showClose = true, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n {showClose && (\n \n \n \n )}\n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport XIcon from \"lucide-static/icons/x.svg\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\n\ninterface Props extends HTMLAttributes<\"div\"> {\n showClose?: boolean\n}\n\nconst { class: className, showClose = true, ...props } = Astro.props\n\n---\n\n\n \n {showClose && (\n \n \n \n )}\n\n", "type": "registry:ui" }, { "path": "src/components/ui/banner/banner-description.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"p\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n

\n \n

\n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"p\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n

\n \n

\n", "type": "registry:ui" }, { "path": "src/components/ui/banner/banner-title.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"p\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n

\n \n

\n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"p\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n

\n \n

\n", "type": "registry:ui" }, { @@ -38,4 +35,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/public/r/blocks.json b/public/r/blocks.json index 68c994635..c8c7ad1dc 100644 --- a/public/r/blocks.json +++ b/public/r/blocks.json @@ -88,4 +88,4 @@ "type": "registry:component" } ] -} \ No newline at end of file +} diff --git a/public/r/button.json b/public/r/button.json index 454f9ba8f..77f7934f1 100644 --- a/public/r/button.json +++ b/public/r/button.json @@ -5,12 +5,12 @@ "files": [ { "path": "src/components/ui/button/button-variants.ts", - "content": "import { cva, type VariantProps } from \"class-variance-authority\"\n\nexport const buttonVariants = cva(\n \"focus-visible:border-ring text-foreground focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60 text-white\",\n outline:\n \"bg-background hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 border shadow-xs\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n xs: \"h-7 rounded-md gap-1 px-2.5 has-[>svg]:px-2\",\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n \"icon-xs\": \"size-7\",\n icon: \"size-9\",\n \"icon-sm\": \"size-8\",\n \"icon-lg\": \"size-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nexport type ButtonVariantProps = VariantProps\n", + "content": "import { cva, type VariantProps } from \"class-variance-authority\"\n\nexport const buttonVariants = cva(\n \"focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-md border border-transparent bg-clip-padding text-sm font-medium focus-visible:ring-3 aria-invalid:ring-3 [&_svg:not([class*='size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none shrink-0 [&_svg]:shrink-0 outline-none group/button select-none\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/80\",\n outline:\n \"border-border bg-background hover:bg-muted hover:text-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 aria-expanded:bg-muted aria-expanded:text-foreground shadow-xs\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground\",\n ghost:\n \"hover:bg-muted hover:text-foreground dark:hover:bg-muted/50 aria-expanded:bg-muted aria-expanded:text-foreground\",\n destructive:\n \"bg-destructive/10 hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/20 text-destructive focus-visible:border-destructive/40 dark:hover:bg-destructive/30\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default:\n \"h-9 gap-1.5 px-2.5 in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2\",\n xs: \"h-6 gap-1 rounded-[min(var(--radius-md),8px)] px-2 text-xs in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3\",\n sm: \"h-8 gap-1 rounded-[min(var(--radius-md),10px)] px-2.5 in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5\",\n lg: \"h-10 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3\",\n icon: \"size-9\",\n \"icon-xs\": \"size-6 rounded-[min(var(--radius-md),8px)] in-data-[slot=button-group]:rounded-md [&_svg:not([class*='size-'])]:size-3\",\n \"icon-sm\": \"size-8 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-md\",\n \"icon-lg\": \"size-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nexport type ButtonVariantProps = VariantProps\n", "type": "registry:ui" }, { "path": "src/components/ui/button/button.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\nimport { buttonVariants, type ButtonVariantProps } from \"./button-variants\"\n\ntype Props = ButtonVariantProps &\n HTMLAttributes<\"button\"> &\n HTMLAttributes<\"a\"> &\n HTMLAttributes<\"label\"> & {\n as?: \"button\" | \"a\" | \"label\"\n text?: string\n html?: string\n }\n\nconst {\n class: className,\n variant,\n size,\n as,\n href,\n text,\n html,\n ...props\n} = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n\nconst Comp = as || (href ? \"a\" : \"button\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLTag, Polymorphic } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\nimport { buttonVariants, type ButtonVariantProps } from \"./button-variants\"\n\ntype Props = Polymorphic<{ as: Tag }> & ButtonVariantProps\n\nconst {\n as: Tag = \"button\",\n class: className,\n variant = \"default\",\n size = \"default\",\n ...props\n} = Astro.props\n---\n\n\n \n\n", "type": "registry:ui" }, { @@ -19,4 +19,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/public/r/checkbox.json b/public/r/checkbox.json index 1d9562609..b77d66582 100644 --- a/public/r/checkbox.json +++ b/public/r/checkbox.json @@ -14,4 +14,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/public/r/collapsible.json b/public/r/collapsible.json index 5cc36ae4b..4db008855 100644 --- a/public/r/collapsible.json +++ b/public/r/collapsible.json @@ -5,17 +5,17 @@ "files": [ { "path": "src/components/ui/collapsible/collapsible.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends Omit, \"class\"> {\n class?: string\n open?: boolean\n}\n\nconst { class: className, open = false, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"details\"> {}\n\nconst { class: className, ...props } = Astro.props\n---\n\n
\n \n
\n", "type": "registry:ui" }, { "path": "src/components/ui/collapsible/collapsible-content.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n
\n \n
\n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n---\n\n
\n \n
\n", "type": "registry:ui" }, { "path": "src/components/ui/collapsible/collapsible-trigger.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport ChevronDownIcon from \"lucide-static/icons/chevron-down.svg\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends Omit, \"class\"> {\n class?: string\n showChevron?: boolean\n}\n\nconst { class: className, showChevron = true, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n {showChevron && (\n \n )}\n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"summary\"> {}\n\nconst { class: className, ...props } = Astro.props\n---\n\n\n \n\n", "type": "registry:ui" }, { @@ -24,4 +24,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/public/r/components.json b/public/r/components.json index 9697b8a8e..2b6e4f89d 100644 --- a/public/r/components.json +++ b/public/r/components.json @@ -43,4 +43,4 @@ "@fulldev/tile", "@fulldev/video" ] -} \ No newline at end of file +} diff --git a/public/r/contact-1.json b/public/r/contact-1.json index ada5d6211..ec7b23c5c 100644 --- a/public/r/contact-1.json +++ b/public/r/contact-1.json @@ -15,4 +15,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/contact-2.json b/public/r/contact-2.json index bd0dc2a99..8c272a9f2 100644 --- a/public/r/contact-2.json +++ b/public/r/contact-2.json @@ -15,4 +15,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/contact-3.json b/public/r/contact-3.json index 3fedc33d7..408e01b32 100644 --- a/public/r/contact-3.json +++ b/public/r/contact-3.json @@ -16,4 +16,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/content-1.json b/public/r/content-1.json index c7b6b9461..ebd834292 100644 --- a/public/r/content-1.json +++ b/public/r/content-1.json @@ -16,4 +16,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/content-2.json b/public/r/content-2.json index b8b354b12..b86a468f9 100644 --- a/public/r/content-2.json +++ b/public/r/content-2.json @@ -16,4 +16,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/content-3.json b/public/r/content-3.json index 3ed46d30e..bb1368699 100644 --- a/public/r/content-3.json +++ b/public/r/content-3.json @@ -16,4 +16,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/content-4.json b/public/r/content-4.json index 0c666162f..5e079c676 100644 --- a/public/r/content-4.json +++ b/public/r/content-4.json @@ -16,4 +16,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/content-5.json b/public/r/content-5.json index 521a6b9bc..d2e2742a2 100644 --- a/public/r/content-5.json +++ b/public/r/content-5.json @@ -16,4 +16,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/content-6.json b/public/r/content-6.json index 4ced2914f..ea0ccb37e 100644 --- a/public/r/content-6.json +++ b/public/r/content-6.json @@ -16,4 +16,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/cta-1.json b/public/r/cta-1.json index a5a91493a..c9f5fc890 100644 --- a/public/r/cta-1.json +++ b/public/r/cta-1.json @@ -17,4 +17,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/cta-2.json b/public/r/cta-2.json index f2cd8b071..4a6b9fb16 100644 --- a/public/r/cta-2.json +++ b/public/r/cta-2.json @@ -18,4 +18,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/cta-3.json b/public/r/cta-3.json index cc05132c3..901c6f970 100644 --- a/public/r/cta-3.json +++ b/public/r/cta-3.json @@ -17,4 +17,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/cta-4.json b/public/r/cta-4.json index a5a075a43..28d9ad857 100644 --- a/public/r/cta-4.json +++ b/public/r/cta-4.json @@ -18,4 +18,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/cta-5.json b/public/r/cta-5.json index 60d8b6cb9..e76cb2999 100644 --- a/public/r/cta-5.json +++ b/public/r/cta-5.json @@ -18,4 +18,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/cta-6.json b/public/r/cta-6.json index a6a3a5325..94737a45f 100644 --- a/public/r/cta-6.json +++ b/public/r/cta-6.json @@ -17,4 +17,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/cta-7.json b/public/r/cta-7.json index 9d64d05df..7aca73116 100644 --- a/public/r/cta-7.json +++ b/public/r/cta-7.json @@ -18,4 +18,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/cta-8.json b/public/r/cta-8.json index e90ca5c07..f6269eade 100644 --- a/public/r/cta-8.json +++ b/public/r/cta-8.json @@ -17,4 +17,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/empty.json b/public/r/empty.json index 407ac3d0a..cd757eaea 100644 --- a/public/r/empty.json +++ b/public/r/empty.json @@ -5,32 +5,32 @@ "files": [ { "path": "src/components/ui/empty/empty.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/empty/empty-content.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n---\n\n\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/empty/empty-description.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n a:hover]:text-primary text-sm/relaxed [&>a]:underline [&>a]:underline-offset-4\",\n className\n )}\n {...props}\n >\n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\na:hover]:text-primary text-sm/relaxed [&>a]:underline [&>a]:underline-offset-4\",\n className\n )}\n {...props}\n>\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/empty/empty-header.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/empty/empty-media.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = VariantProps & HTMLAttributes<\"div\">\n\nconst variants = cva(\n \"mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n icon: \"bg-muted text-foreground flex size-10 shrink-0 items-center justify-center rounded-lg [&_svg:not([class*='size-'])]:size-6\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nconst { class: className, variant = \"default\", ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = VariantProps & HTMLAttributes<\"div\">\n\nconst variants = cva(\n \"mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n icon: \"bg-muted text-foreground flex size-10 shrink-0 items-center justify-center rounded-lg [&_svg:not([class*='size-'])]:size-6\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nconst { class: className, variant = \"default\", ...props } = Astro.props\n\n---\n\n\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/empty/empty-title.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n\n \n\n", "type": "registry:ui" }, { @@ -39,4 +39,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/public/r/faqs-1.json b/public/r/faqs-1.json index bc79ad7ab..768042a87 100644 --- a/public/r/faqs-1.json +++ b/public/r/faqs-1.json @@ -15,4 +15,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/faqs-2.json b/public/r/faqs-2.json index d3f1cb19b..97b4923be 100644 --- a/public/r/faqs-2.json +++ b/public/r/faqs-2.json @@ -15,4 +15,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/faqs-3.json b/public/r/faqs-3.json index 34ddb12dd..36beb2665 100644 --- a/public/r/faqs-3.json +++ b/public/r/faqs-3.json @@ -15,4 +15,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/faqs-4.json b/public/r/faqs-4.json index a1800054f..3b29622c5 100644 --- a/public/r/faqs-4.json +++ b/public/r/faqs-4.json @@ -15,4 +15,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/features-1.json b/public/r/features-1.json index fc74416f0..a25ff2f84 100644 --- a/public/r/features-1.json +++ b/public/r/features-1.json @@ -15,4 +15,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/features-2.json b/public/r/features-2.json index 1f7bbbb05..a4025dd32 100644 --- a/public/r/features-2.json +++ b/public/r/features-2.json @@ -15,4 +15,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/features-3.json b/public/r/features-3.json index f09e617b9..31426b0b5 100644 --- a/public/r/features-3.json +++ b/public/r/features-3.json @@ -14,4 +14,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/features-4.json b/public/r/features-4.json index 2d689766c..1b908973c 100644 --- a/public/r/features-4.json +++ b/public/r/features-4.json @@ -15,4 +15,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/features-5.json b/public/r/features-5.json index 09a807ddf..a0b947f5e 100644 --- a/public/r/features-5.json +++ b/public/r/features-5.json @@ -15,4 +15,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/features-6.json b/public/r/features-6.json index 9d95391a8..46ac85d04 100644 --- a/public/r/features-6.json +++ b/public/r/features-6.json @@ -15,4 +15,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/field.json b/public/r/field.json index 461e32db1..57f956200 100644 --- a/public/r/field.json +++ b/public/r/field.json @@ -2,23 +2,21 @@ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "field", "type": "registry:ui", - "registryDependencies": [ - "@fulldev/separator" - ], + "registryDependencies": ["@fulldev/separator"], "files": [ { "path": "src/components/ui/field/field.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\">, VariantProps {}\n\nconst variants = cva(\n \"group/field data-[invalid=true]:text-destructive flex w-full gap-3\",\n {\n variants: {\n orientation: {\n vertical: [\"flex-col [&>*]:w-full [&>.sr-only]:w-auto\"],\n horizontal: [\n \"flex-row items-center\",\n \"[&>[data-slot=field-label]]:flex-auto\",\n \"has-[>[data-slot=field-content]]:items-start has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n ],\n responsive: [\n \"flex-col @md/field-group:flex-row @md/field-group:items-center [&>*]:w-full @md/field-group:[&>*]:w-auto [&>.sr-only]:w-auto\",\n \"@md/field-group:[&>[data-slot=field-label]]:flex-auto\",\n \"@md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n ],\n },\n },\n defaultVariants: {\n orientation: \"vertical\",\n },\n }\n)\n\nconst { class: className, orientation = \"vertical\", ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\">, VariantProps {}\n\nconst variants = cva(\n \"group/field data-[invalid=true]:text-destructive flex w-full gap-3\",\n {\n variants: {\n orientation: {\n vertical: [\"flex-col [&>*]:w-full [&>.sr-only]:w-auto\"],\n horizontal: [\n \"flex-row items-center\",\n \"[&>[data-slot=field-label]]:flex-auto\",\n \"has-[>[data-slot=field-content]]:items-start has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n ],\n responsive: [\n \"flex-col @md/field-group:flex-row @md/field-group:items-center [&>*]:w-full @md/field-group:[&>*]:w-auto [&>.sr-only]:w-auto\",\n \"@md/field-group:[&>[data-slot=field-label]]:flex-auto\",\n \"@md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n ],\n },\n },\n defaultVariants: {\n orientation: \"vertical\",\n },\n }\n)\n\nconst { class: className, orientation = \"vertical\", ...props } = Astro.props\n\n---\n\n\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/field/field-content.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/field/field-description.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"p\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4\",\n className\n )}\n {...props}\n >\n \n

\n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"p\"> {}\n\nconst { class: className, ...props } = Astro.props\n---\n\na:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4\",\n className\n )}\n {...props}\n>\n \n

\n", "type": "registry:ui" }, { @@ -28,32 +26,32 @@ }, { "path": "src/components/ui/field/field-group.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n [data-slot=field-group]]:gap-4\",\n className\n )}\n {...props}\n >\n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n[data-slot=field-group]]:gap-4\",\n className\n )}\n {...props}\n>\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/field/field-label.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"label\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n [data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border [&>*]:data-[slot=field]:p-4\",\n \"has-data-[state=checked]:bg-primary/5 has-data-[state=checked]:border-primary dark:has-data-[state=checked]:bg-primary/10\",\n className\n )}\n {...props}\n >\n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"label\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border [&>*]:data-[slot=field]:p-4\",\n \"has-data-[state=checked]:bg-primary/5 has-data-[state=checked]:border-primary dark:has-data-[state=checked]:bg-primary/10\",\n className\n )}\n {...props}\n>\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/field/field-legend.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"legend\"> {\n variant?: \"legend\" | \"label\"\n}\n\nconst { class: className, variant = \"legend\", ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"legend\"> {\n variant?: \"legend\" | \"label\"\n}\n\nconst { class: className, variant = \"legend\", ...props } = Astro.props\n---\n\n\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/field/field-separator.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Separator } from \"@/components/ui/separator\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n\n \n {\n slot?.trim().length > 0 && (\n \n \n \n )\n }\n\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Separator } from \"@/components/ui/separator\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n---\n\n\n \n \n \n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/field/field-set.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"fieldset\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n [data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3\",\n className\n )}\n {...props}\n >\n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"fieldset\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3\",\n className\n )}\n {...props}\n>\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/field/field-title.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n\n \n\n", "type": "registry:ui" }, { @@ -62,4 +60,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/public/r/footer-1.json b/public/r/footer-1.json index 6c7985241..3f73eec9b 100644 --- a/public/r/footer-1.json +++ b/public/r/footer-1.json @@ -2,11 +2,7 @@ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "footer-1", "type": "registry:block", - "registryDependencies": [ - "@fulldev/footer", - "@fulldev/icon", - "@fulldev/logo" - ], + "registryDependencies": ["@fulldev/footer", "@fulldev/icon", "@fulldev/logo"], "files": [ { "path": "src/components/blocks/footer-1.astro", @@ -14,4 +10,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/footer-2.json b/public/r/footer-2.json index e49462fb0..64ea40e85 100644 --- a/public/r/footer-2.json +++ b/public/r/footer-2.json @@ -2,11 +2,7 @@ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "footer-2", "type": "registry:block", - "registryDependencies": [ - "@fulldev/footer", - "@fulldev/icon", - "@fulldev/logo" - ], + "registryDependencies": ["@fulldev/footer", "@fulldev/icon", "@fulldev/logo"], "files": [ { "path": "src/components/blocks/footer-2.astro", @@ -14,4 +10,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/footer.json b/public/r/footer.json index 50ec0e107..6e6bb7c22 100644 --- a/public/r/footer.json +++ b/public/r/footer.json @@ -5,67 +5,67 @@ "files": [ { "path": "src/components/ui/footer/footer.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props\n extends HTMLAttributes<\"footer\">,\n VariantProps {}\n\nconst variants = cva(\n \"relative mx-auto flex scroll-m-(--footer-py) flex-col gap-16 px-(--footer-px) py-(--footer-py)\",\n {\n variants: {\n variant: {\n default: \"bg-background w-full\",\n floating: [\n \"bg-background rounded-lg border shadow-sm\",\n \"w-[calc(100%-2*var(--gutter,24px))] max-w-(--footer-width)\",\n \"my-(--footer-py) overflow-hidden rounded-xl first:mt-2\",\n ],\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nconst { class: className, variant, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n\n\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props\n extends HTMLAttributes<\"footer\">,\n VariantProps {}\n\nconst variants = cva(\n \"relative mx-auto flex scroll-m-(--footer-py) flex-col gap-16 px-(--footer-px) py-(--footer-py)\",\n {\n variants: {\n variant: {\n default: \"bg-background w-full\",\n floating: [\n \"bg-background rounded-lg border shadow-sm\",\n \"w-[calc(100%-2*var(--gutter,24px))] max-w-(--footer-width)\",\n \"my-(--footer-py) overflow-hidden rounded-xl first:mt-2\",\n ],\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nconst { class: className, variant, ...props } = Astro.props\n\n---\n\n\n \n\n\n\n", "type": "registry:ui" }, { "path": "src/components/ui/footer/footer-actions.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n
\n \n
\n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n---\n\n
\n \n
\n", "type": "registry:ui" }, { "path": "src/components/ui/footer/footer-content.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n
\n \n
\n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n
\n \n
\n", "type": "registry:ui" }, { "path": "src/components/ui/footer/footer-copyright.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\";\n\nimport { cn } from \"@/lib/utils\";\n\ninterface Props extends HTMLAttributes<\"p\"> {}\n\nconst { class: className, ...props } = Astro.props;\n\nconst slot = await Astro.slots.render(\"default\");\n---\n\n{\n slot?.trim().length > 0 && (\n \n © {`${new Date().getFullYear()} `}\n \n

\n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\";\n\nimport { cn } from \"@/lib/utils\";\n\ninterface Props extends HTMLAttributes<\"p\"> {}\n\nconst { class: className, ...props } = Astro.props;\n\n---\n\n\n © {`${new Date().getFullYear()} `}\n \n

\n", "type": "registry:ui" }, { "path": "src/components/ui/footer/footer-description.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"p\">, VariantProps {}\n\nconst variants = cva(\"text-muted-foreground text-sm\", {\n variants: {\n size: {\n lg: \"text-base\",\n default: \"text-sm\",\n sm: \"text-xs\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n})\n\nconst { class: className, size, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n

\n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"p\">, VariantProps {}\n\nconst variants = cva(\"text-muted-foreground text-sm\", {\n variants: {\n size: {\n lg: \"text-base\",\n default: \"text-sm\",\n sm: \"text-xs\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n})\n\nconst { class: className, size, ...props } = Astro.props\n\n---\n\n\n \n

\n", "type": "registry:ui" }, { "path": "src/components/ui/footer/footer-grid.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/footer/footer-group-label.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"h3\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n

\n \n

\n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"h3\"> {}\n\nconst { class: className, ...props } = Astro.props\n---\n\n

\n \n

\n", "type": "registry:ui" }, { "path": "src/components/ui/footer/footer-group.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n
\n \n
\n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n
\n \n
\n", "type": "registry:ui" }, { "path": "src/components/ui/footer/footer-menu-item.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"li\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n
  • \n \n
  • \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"li\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n
  • \n \n
  • \n", "type": "registry:ui" }, { "path": "src/components/ui/footer/footer-menu-link.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"a\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"a\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/footer/footer-menu.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"menu\">, VariantProps {}\n\nconst variants = cva(\"flex w-max gap-x-4 gap-y-2\", {\n variants: {\n orientation: {\n vertical: \"flex-col\",\n horizontal: \"flex-row\",\n },\n },\n defaultVariants: {\n orientation: \"vertical\",\n },\n})\n\nconst { class: className, orientation, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"menu\">, VariantProps {}\n\nconst variants = cva(\"flex w-max gap-x-4 gap-y-2\", {\n variants: {\n orientation: {\n vertical: \"flex-col\",\n horizontal: \"flex-row\",\n },\n },\n defaultVariants: {\n orientation: \"vertical\",\n },\n})\n\nconst { class: className, orientation, ...props } = Astro.props\n\n---\n\n\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/footer/footer-split.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/footer/footer-spread.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n\n \n\n", "type": "registry:ui" }, { @@ -74,4 +74,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/public/r/header-1.json b/public/r/header-1.json index 38c9453cb..e4d7f11ad 100644 --- a/public/r/header-1.json +++ b/public/r/header-1.json @@ -16,8 +16,8 @@ "files": [ { "path": "src/components/blocks/header-1.astro", - "content": "---\nimport MenuIcon from \"lucide-static/icons/menu.svg\"\n\nimport { Button } from \"@/components/ui/button\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/components/ui/collapsible\"\nimport { Header, HeaderActions } from \"@/components/ui/header\"\nimport { Icon } from \"@/components/ui/icon\"\nimport { Logo, LogoImage, LogoText } from \"@/components/ui/logo\"\nimport {\n NavigationMenu,\n NavigationMenuContent,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n NavigationMenuSub,\n NavigationMenuSubItem,\n NavigationMenuSubLink,\n NavigationMenuTrigger,\n} from \"@/components/ui/navigation-menu\"\nimport { Sheet, SheetContent, SheetTrigger } from \"@/components/ui/sheet\"\nimport {\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n} from \"@/components/ui/sidebar\"\nimport { ThemeToggle } from \"@/components/ui/theme-toggle\"\n\ninterface Props {\n logo?: {\n src?: string\n alt?: string\n text?: string\n href?: string\n }\n links?: {\n icon?: string\n text?: string\n href?: string\n target?: string\n }[]\n socials?: string[]\n menus?: {\n text?: string\n href?: string\n links?: {\n text?: string\n href?: string\n }[]\n }[]\n}\n\nconst { logo, menus, links, socials } = Astro.props\n---\n\n
    \n \n \n {logo?.text}\n \n \n \n {\n menus?.map((menu) => (\n \n {menu.links && menu.links.length > 0 ? (\n <>\n \n {menu.text}\n \n \n \n {menu.links?.map((link) => (\n \n \n {link.text}\n \n \n ))}\n \n \n \n ) : (\n \n {menu.text}\n \n )}\n \n ))\n }\n \n \n \n {\n socials?.map((social) => (\n <>\n \n \n ))\n }\n \n {\n links?.map(({ icon, text, ...link }, i) => (\n \n {icon && }\n {text}\n \n ))\n }\n \n \n \n \n \n \n \n {\n menus?.map((menu) => (\n \n {menu.links && menu.links.length > 0 ? (\n \n \n \n {menu.text}\n \n \n \n \n {menu.links?.map((link) => (\n \n \n {link.text}\n \n \n ))}\n \n \n \n ) : (\n svg]:px-4\"\n href={menu.href}\n >\n {menu.text}\n \n )}\n \n ))\n }\n \n \n {\n links?.map(({ icon, text, ...link }, i) => (\n \n {icon && }\n {text}\n \n ))\n }\n \n \n {\n socials?.map((social) => (\n \n ))\n }\n \n \n \n
    \n", + "content": "---\nimport MenuIcon from \"lucide-static/icons/menu.svg\"\n\nimport { Button } from \"@/components/ui/button\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/components/ui/collapsible\"\nimport { Header, HeaderActions } from \"@/components/ui/header\"\nimport { Icon } from \"@/components/ui/icon\"\nimport { Logo, LogoImage, LogoText } from \"@/components/ui/logo\"\nimport {\n NavigationMenu,\n NavigationMenuContent,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n NavigationMenuSub,\n NavigationMenuSubItem,\n NavigationMenuSubLink,\n NavigationMenuTrigger,\n} from \"@/components/ui/navigation-menu\"\nimport { Sheet, SheetContent, SheetTrigger } from \"@/components/ui/sheet\"\nimport {\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n} from \"@/components/ui/sidebar\"\nimport { ThemeToggle } from \"@/components/ui/theme-toggle\"\n\ninterface Props {\n logo?: {\n src?: string\n alt?: string\n text?: string\n href?: string\n }\n links?: {\n icon?: string\n text?: string\n href?: string\n target?: string\n }[]\n socials?: string[]\n menus?: {\n text?: string\n href?: string\n links?: {\n text?: string\n href?: string\n }[]\n }[]\n}\n\nconst { logo, menus, links, socials } = Astro.props\n---\n\n
    \n \n \n {logo?.text}\n \n \n \n {\n menus?.map((menu) => (\n \n {menu.links && menu.links.length > 0 ? (\n <>\n \n {menu.text}\n \n \n \n {menu.links?.map((link) => (\n \n \n {link.text}\n \n \n ))}\n \n \n \n ) : (\n \n {menu.text}\n \n )}\n \n ))\n }\n \n \n \n {\n socials?.map((social) => (\n <>\n \n \n ))\n }\n \n {\n links?.map(({ icon, text, ...link }, i) => (\n \n {icon && }\n {text}\n \n ))\n }\n \n \n \n \n \n \n \n {\n menus?.map((menu) => (\n \n {menu.links && menu.links.length > 0 ? (\n \n \n \n {menu.text}\n \n \n \n \n {menu.links?.map((link) => (\n \n \n {link.text}\n \n \n ))}\n \n \n \n ) : (\n svg]:px-4\"\n href={menu.href}\n >\n {menu.text}\n \n )}\n \n ))\n }\n \n \n {\n links?.map(({ icon, text, ...link }, i) => (\n \n {icon && }\n {text}\n \n ))\n }\n \n \n {\n socials?.map((social) => (\n \n ))\n }\n \n \n \n
    \n", "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/header-2.json b/public/r/header-2.json index e7aaaafd3..fdbe97007 100644 --- a/public/r/header-2.json +++ b/public/r/header-2.json @@ -16,8 +16,8 @@ "files": [ { "path": "src/components/blocks/header-2.astro", - "content": "---\nimport MenuIcon from \"lucide-static/icons/menu.svg\"\n\nimport { Button } from \"@/components/ui/button\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/components/ui/collapsible\"\nimport { Header, HeaderActions } from \"@/components/ui/header\"\nimport { Icon } from \"@/components/ui/icon\"\nimport { Logo, LogoImage, LogoText } from \"@/components/ui/logo\"\nimport {\n NavigationMenu,\n NavigationMenuContent,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n NavigationMenuSub,\n NavigationMenuSubItem,\n NavigationMenuSubLink,\n NavigationMenuTrigger,\n} from \"@/components/ui/navigation-menu\"\nimport { Sheet, SheetContent, SheetTrigger } from \"@/components/ui/sheet\"\nimport {\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n} from \"@/components/ui/sidebar\"\nimport { ThemeToggle } from \"@/components/ui/theme-toggle\"\n\ninterface Props {\n logo?: {\n src?: string\n alt?: string\n text?: string\n href?: string\n }\n links?: {\n icon?: string\n text?: string\n href?: string\n target?: string\n }[]\n socials?: string[]\n menus?: {\n text?: string\n href?: string\n links?: {\n text?: string\n href?: string\n }[]\n }[]\n}\n\nconst { logo, menus, links, socials } = Astro.props\n---\n\n
    \n \n \n {logo?.text}\n \n \n \n {\n menus?.map((menu) => (\n \n {menu.links && menu.links.length > 0 ? (\n <>\n \n {menu.text}\n \n \n \n {menu.links?.map((link) => (\n \n \n {link.text}\n \n \n ))}\n \n \n \n ) : (\n \n {menu.text}\n \n )}\n \n ))\n }\n \n \n \n \n {\n socials?.map((social) => (\n \n ))\n }\n {\n links?.map(({ icon, text, ...link }, i) => (\n \n {icon && }\n {text}\n \n ))\n }\n \n \n \n \n \n \n \n {\n menus?.map((menu) => (\n \n {menu.links && menu.links.length > 0 ? (\n \n \n {menu.text}\n \n \n \n {menu.links?.map((link) => (\n \n \n {link.text}\n \n \n ))}\n \n \n \n ) : (\n svg]:px-4\"\n href={menu.href}\n >\n {menu.text}\n \n )}\n \n ))\n }\n \n \n {\n links?.map(({ icon, text, ...link }, i) => (\n \n {icon && }\n {text}\n \n ))\n }\n \n \n {\n socials?.map((social) => (\n \n ))\n }\n \n \n \n
    \n", + "content": "---\nimport MenuIcon from \"lucide-static/icons/menu.svg\"\n\nimport { Button } from \"@/components/ui/button\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/components/ui/collapsible\"\nimport { Header, HeaderActions } from \"@/components/ui/header\"\nimport { Icon } from \"@/components/ui/icon\"\nimport { Logo, LogoImage, LogoText } from \"@/components/ui/logo\"\nimport {\n NavigationMenu,\n NavigationMenuContent,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n NavigationMenuSub,\n NavigationMenuSubItem,\n NavigationMenuSubLink,\n NavigationMenuTrigger,\n} from \"@/components/ui/navigation-menu\"\nimport { Sheet, SheetContent, SheetTrigger } from \"@/components/ui/sheet\"\nimport {\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n} from \"@/components/ui/sidebar\"\nimport { ThemeToggle } from \"@/components/ui/theme-toggle\"\n\ninterface Props {\n logo?: {\n src?: string\n alt?: string\n text?: string\n href?: string\n }\n links?: {\n icon?: string\n text?: string\n href?: string\n target?: string\n }[]\n socials?: string[]\n menus?: {\n text?: string\n href?: string\n links?: {\n text?: string\n href?: string\n }[]\n }[]\n}\n\nconst { logo, menus, links, socials } = Astro.props\n---\n\n
    \n \n \n {logo?.text}\n \n \n \n {\n menus?.map((menu) => (\n \n {menu.links && menu.links.length > 0 ? (\n <>\n \n {menu.text}\n \n \n \n {menu.links?.map((link) => (\n \n \n {link.text}\n \n \n ))}\n \n \n \n ) : (\n \n {menu.text}\n \n )}\n \n ))\n }\n \n \n \n \n {\n socials?.map((social) => (\n \n ))\n }\n {\n links?.map(({ icon, text, ...link }, i) => (\n \n {icon && }\n {text}\n \n ))\n }\n \n \n \n \n \n \n \n {\n menus?.map((menu) => (\n \n {menu.links && menu.links.length > 0 ? (\n \n \n {menu.text}\n \n \n \n {menu.links?.map((link) => (\n \n \n {link.text}\n \n \n ))}\n \n \n \n ) : (\n svg]:px-4\"\n href={menu.href}\n >\n {menu.text}\n \n )}\n \n ))\n }\n \n \n {\n links?.map(({ icon, text, ...link }, i) => (\n \n {icon && }\n {text}\n \n ))\n }\n \n \n {\n socials?.map((social) => (\n \n ))\n }\n \n \n \n
    \n", "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/header-3.json b/public/r/header-3.json index 57645a055..348fd9246 100644 --- a/public/r/header-3.json +++ b/public/r/header-3.json @@ -16,8 +16,8 @@ "files": [ { "path": "src/components/blocks/header-3.astro", - "content": "---\nimport MenuIcon from \"lucide-static/icons/menu.svg\"\n\nimport { Button } from \"@/components/ui/button\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/components/ui/collapsible\"\nimport { Header, HeaderActions } from \"@/components/ui/header\"\nimport { Icon } from \"@/components/ui/icon\"\nimport { Logo, LogoImage, LogoText } from \"@/components/ui/logo\"\nimport {\n NavigationMenu,\n NavigationMenuContent,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n NavigationMenuSub,\n NavigationMenuSubItem,\n NavigationMenuSubLink,\n NavigationMenuTrigger,\n} from \"@/components/ui/navigation-menu\"\nimport { Sheet, SheetContent, SheetTrigger } from \"@/components/ui/sheet\"\nimport {\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n} from \"@/components/ui/sidebar\"\nimport { ThemeToggle } from \"@/components/ui/theme-toggle\"\n\ninterface Props {\n logo?: {\n src?: string\n alt?: string\n text?: string\n href?: string\n }\n links?: {\n icon?: string\n text?: string\n href?: string\n target?: string\n }[]\n socials?: string[]\n menus?: {\n text?: string\n href?: string\n links?: {\n text?: string\n href?: string\n }[]\n }[]\n}\n\nconst { logo, menus, links, socials } = Astro.props\n\nconst parseEnvStarCount = (value: string | undefined) => {\n if (!value) return null\n const parsed = Number(value)\n return Number.isFinite(parsed) && parsed >= 0 ? Math.floor(parsed) : null\n}\n\nasync function getGithubStarCount(repo: string): Promise {\n const envStarCount = parseEnvStarCount(import.meta.env.PUBLIC_GITHUB_STAR_COUNT)\n if (envStarCount !== null) return envStarCount\n\n if (import.meta.env.PUBLIC_FETCH_GITHUB_STARS !== \"true\") return null\n\n try {\n const response = await fetch(`https://api.github.com/repos/${repo}`, {\n headers: {\n Accept: \"application/vnd.github+json\",\n },\n signal: AbortSignal.timeout(2000),\n })\n\n if (!response.ok) return null\n\n const data = (await response.json()) as { stargazers_count?: unknown }\n return typeof data.stargazers_count === \"number\"\n ? data.stargazers_count\n : null\n } catch {\n return null\n }\n}\n\nconst githubStarCount = await getGithubStarCount(\"fulldotdev/ui\")\n---\n\n
    \n \n \n {logo?.text}\n \n \n \n {\n menus?.map((menu) => (\n \n {menu.links && menu.links.length > 0 ? (\n <>\n \n {menu.text}\n \n \n \n {menu.links?.map((link) => (\n \n \n {link.text}\n \n \n ))}\n \n \n \n ) : (\n \n {menu.text}\n \n )}\n \n ))\n }\n \n \n \n \n {\n socials?.map((social) => (\n <>\n \n \n ))\n }\n {\n links?.map(({ icon, text, ...link }, i) => (\n \n {icon && }\n {text}\n \n ))\n }\n \n \n {githubStarCount !== null && githubStarCount.toLocaleString()}\n \n \n \n \n \n \n \n \n {\n menus?.map((menu) => (\n \n {menu.links && menu.links.length > 0 ? (\n \n \n \n {menu.text}\n \n \n \n \n {menu.links?.map((link) => (\n \n \n {link.text}\n \n \n ))}\n \n \n \n ) : (\n svg]:px-4\"\n href={menu.href}\n >\n {menu.text}\n \n )}\n \n ))\n }\n \n \n {\n links?.map(({ icon, text, ...link }, i) => (\n \n {icon && }\n {text}\n \n ))\n }\n \n \n {\n socials?.map((social) => (\n \n ))\n }\n \n \n \n
    \n", + "content": "---\nimport MenuIcon from \"lucide-static/icons/menu.svg\"\n\nimport { Button } from \"@/components/ui/button\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/components/ui/collapsible\"\nimport { Header, HeaderActions } from \"@/components/ui/header\"\nimport { Icon } from \"@/components/ui/icon\"\nimport { Logo, LogoImage, LogoText } from \"@/components/ui/logo\"\nimport {\n NavigationMenu,\n NavigationMenuContent,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n NavigationMenuSub,\n NavigationMenuSubItem,\n NavigationMenuSubLink,\n NavigationMenuTrigger,\n} from \"@/components/ui/navigation-menu\"\nimport { Sheet, SheetContent, SheetTrigger } from \"@/components/ui/sheet\"\nimport {\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n} from \"@/components/ui/sidebar\"\nimport { ThemeToggle } from \"@/components/ui/theme-toggle\"\n\ninterface Props {\n logo?: {\n src?: string\n alt?: string\n text?: string\n href?: string\n }\n links?: {\n icon?: string\n text?: string\n href?: string\n target?: string\n }[]\n socials?: string[]\n menus?: {\n text?: string\n href?: string\n links?: {\n text?: string\n href?: string\n }[]\n }[]\n}\n\nconst { logo, menus, links, socials } = Astro.props\n\nconst parseEnvStarCount = (value: string | undefined) => {\n if (!value) return null\n const parsed = Number(value)\n return Number.isFinite(parsed) && parsed >= 0 ? Math.floor(parsed) : null\n}\n\nasync function getGithubStarCount(repo: string): Promise {\n const envStarCount = parseEnvStarCount(import.meta.env.PUBLIC_GITHUB_STAR_COUNT)\n if (envStarCount !== null) return envStarCount\n\n if (import.meta.env.PUBLIC_FETCH_GITHUB_STARS !== \"true\") return null\n\n try {\n const response = await fetch(`https://api.github.com/repos/${repo}`, {\n headers: {\n Accept: \"application/vnd.github+json\",\n },\n signal: AbortSignal.timeout(2000),\n })\n\n if (!response.ok) return null\n\n const data = (await response.json()) as { stargazers_count?: unknown }\n return typeof data.stargazers_count === \"number\"\n ? data.stargazers_count\n : null\n } catch {\n return null\n }\n}\n\nconst githubStarCount = await getGithubStarCount(\"fulldotdev/ui\")\n---\n\n
    \n \n \n {logo?.text}\n \n \n \n {\n menus?.map((menu) => (\n \n {menu.links && menu.links.length > 0 ? (\n <>\n \n {menu.text}\n \n \n \n {menu.links?.map((link) => (\n \n \n {link.text}\n \n \n ))}\n \n \n \n ) : (\n \n {menu.text}\n \n )}\n \n ))\n }\n \n \n \n \n {\n socials?.map((social) => (\n <>\n \n \n ))\n }\n {\n links?.map(({ icon, text, ...link }, i) => (\n \n {icon && }\n {text}\n \n ))\n }\n \n \n \n \n \n \n \n \n {\n menus?.map((menu) => (\n \n {menu.links && menu.links.length > 0 ? (\n \n \n \n {menu.text}\n \n \n \n \n {menu.links?.map((link) => (\n \n \n {link.text}\n \n \n ))}\n \n \n \n ) : (\n svg]:px-4\"\n href={menu.href}\n >\n {menu.text}\n \n )}\n \n ))\n }\n \n \n {\n links?.map(({ icon, text, ...link }, i) => (\n \n {icon && }\n {text}\n \n ))\n }\n \n \n {\n socials?.map((social) => (\n \n ))\n }\n \n \n \n
    \n", "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/header.json b/public/r/header.json index fd107b7f6..6ac92d88e 100644 --- a/public/r/header.json +++ b/public/r/header.json @@ -5,17 +5,17 @@ "files": [ { "path": "src/components/ui/header/header.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props\n extends HTMLAttributes<\"header\">,\n VariantProps {}\n\nconst variants = cva(\n \"relative top-0 z-50 mx-auto flex h-(--header-height) items-center justify-between gap-8 border-b border-transparent px-(--header-px) py-4\",\n {\n variants: {\n variant: {\n default: \"bg-background sticky w-full\",\n floating: [\n \"w-[calc(100%-2*var(--gutter,24px))] max-w-(--header-width)\",\n \"top-2 mt-2 h-[calc(var(--header-height)-var(--spacing)*2)] overflow-hidden rounded-xl\",\n \"bg-background border-border sticky border\",\n ],\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nconst { class: className, variant, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n\n\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props\n extends HTMLAttributes<\"header\">,\n VariantProps {}\n\nconst variants = cva(\n \"relative top-0 z-50 mx-auto flex h-(--header-height) items-center justify-between gap-8 border-b border-transparent px-(--header-px) py-4\",\n {\n variants: {\n variant: {\n default: \"bg-background sticky w-full\",\n floating: [\n \"w-[calc(100%-2*var(--gutter,24px))] max-w-(--header-width)\",\n \"top-2 mt-2 h-[calc(var(--header-height)-var(--spacing)*2)] overflow-hidden rounded-xl\",\n \"bg-background border-border sticky border\",\n ],\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nconst { class: className, variant, ...props } = Astro.props\n\n---\n\n\n \n\n\n\n", "type": "registry:ui" }, { "path": "src/components/ui/header/header-actions.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n
    \n \n
    \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n
    \n \n
    \n", "type": "registry:ui" }, { "path": "src/components/ui/header/header-content.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n\n \n\n", "type": "registry:ui" }, { @@ -24,4 +24,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/public/r/hero-1.json b/public/r/hero-1.json index 4d2dbaf5a..d4107726c 100644 --- a/public/r/hero-1.json +++ b/public/r/hero-1.json @@ -12,8 +12,8 @@ "files": [ { "path": "src/components/blocks/hero-1.astro", - "content": "---\nimport { Badge } from \"@/components/ui/badge\"\nimport { Button } from \"@/components/ui/button\"\nimport { Icon } from \"@/components/ui/icon\"\nimport { Image } from \"@/components/ui/image\"\nimport {\n Section,\n SectionActions,\n SectionContent,\n SectionMedia,\n SectionProse,\n} from \"@/components/ui/section\"\n\ninterface Props {\n class?: string\n id?: string\n link?: {\n text?: string\n href?: string\n icon?: string\n target?: string\n }\n links?: {\n text?: string\n href?: string\n icon?: string\n target?: string\n }[]\n image?: {\n src: string\n alt: string\n }\n}\n\nconst { class: className, id, link, links, image } = Astro.props\n---\n\n
    \n \n \n {link?.text}\n {link?.href && }\n \n \n \n \n \n {\n links?.map(({ icon, text, ...link }, i) => (\n \n {icon && }\n {text}\n \n ))\n }\n \n \n \n \n \n
    \n", + "content": "---\nimport { Badge } from \"@/components/ui/badge\"\nimport { Button } from \"@/components/ui/button\"\nimport { Icon } from \"@/components/ui/icon\"\nimport { Image } from \"@/components/ui/image\"\nimport {\n Section,\n SectionActions,\n SectionContent,\n SectionMedia,\n SectionProse,\n} from \"@/components/ui/section\"\n\ninterface Props {\n class?: string\n id?: string\n link?: {\n text?: string\n href?: string\n icon?: string\n target?: string\n }\n links?: {\n text?: string\n href?: string\n icon?: string\n target?: string\n }[]\n image?: {\n src: string\n alt: string\n }\n}\n\nconst { class: className, id, link, links, image } = Astro.props\n---\n\n
    \n \n {\n link?.href ? (\n \n {link.text}\n {link.href && }\n \n ) : (\n {link?.text}\n )\n }\n \n \n \n \n {\n links?.map(({ icon, text, ...link }, i) => (\n \n {icon && }\n {text}\n \n ))\n }\n \n \n \n \n \n
    \n", "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/hero-10.json b/public/r/hero-10.json index 034d1e9da..7ec2049da 100644 --- a/public/r/hero-10.json +++ b/public/r/hero-10.json @@ -18,4 +18,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/hero-11.json b/public/r/hero-11.json index 2b1b01f64..56f5ce342 100644 --- a/public/r/hero-11.json +++ b/public/r/hero-11.json @@ -18,4 +18,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/hero-12.json b/public/r/hero-12.json index 93bcf94f8..a2c716c7b 100644 --- a/public/r/hero-12.json +++ b/public/r/hero-12.json @@ -11,8 +11,8 @@ "files": [ { "path": "src/components/blocks/hero-12.astro", - "content": "---\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\nimport { Icon } from \"@/components/ui/icon\"\nimport { Image } from \"@/components/ui/image\"\nimport {\n Section,\n SectionActions,\n SectionContent,\n SectionMedia,\n SectionProse,\n SectionSpread,\n} from \"@/components/ui/section\"\n\ninterface Props {\n class?: string\n id?: string\n title?: string\n description?: string\n links?: {\n icon?: string\n text?: string\n href?: string\n target?: string\n }[]\n image?: {\n src: string\n alt: string\n }\n}\n\nconst {\n class: className,\n id,\n title,\n description,\n links,\n image,\n} = Astro.props\n---\n\n
    \n \n \n \n {title &&

    {title}

    }\n
    \n \n {description &&

    {description}

    }\n
    \n \n {\n links?.map(({ href, text, ...link }) => (\n \n ))\n }\n \n
    \n
    \n \n \n \n
    \n", + "content": "---\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\nimport { Icon } from \"@/components/ui/icon\"\nimport { Image } from \"@/components/ui/image\"\nimport {\n Section,\n SectionActions,\n SectionContent,\n SectionMedia,\n SectionProse,\n SectionSpread,\n} from \"@/components/ui/section\"\n\ninterface Props {\n class?: string\n id?: string\n title?: string\n description?: string\n links?: {\n icon?: string\n text?: string\n href?: string\n target?: string\n }[]\n image?: {\n src: string\n alt: string\n }\n}\n\nconst {\n class: className,\n id,\n title,\n description,\n links,\n image,\n} = Astro.props\n---\n\n
    \n \n \n \n {title &&

    {title}

    }\n
    \n \n {description &&

    {description}

    }\n
    \n \n {\n links?.map(({ href, text, ...link }) => (\n \n ))\n }\n \n
    \n
    \n \n \n \n
    \n", "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/hero-13.json b/public/r/hero-13.json index a52973165..7c22269f0 100644 --- a/public/r/hero-13.json +++ b/public/r/hero-13.json @@ -11,8 +11,8 @@ "files": [ { "path": "src/components/blocks/hero-13.astro", - "content": "---\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\nimport { Icon } from \"@/components/ui/icon\"\nimport { Image } from \"@/components/ui/image\"\nimport {\n Section,\n SectionActions,\n SectionContent,\n SectionMedia,\n SectionProse,\n SectionSplit,\n} from \"@/components/ui/section\"\n\ninterface Props {\n class?: string\n id?: string\n links?: {\n icon?: string\n text?: string\n href?: string\n target?: string\n }[]\n image?: {\n src: string\n alt: string\n }\n}\n\nconst {\n class: className,\n id,\n links,\n image,\n} = Astro.props\n---\n\n
    \n \n \n \n \n \n \n {\n links?.map(({ href, text, ...link }) => (\n \n ))\n }\n \n \n \n \n \n \n
    \n", + "content": "---\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\nimport { Icon } from \"@/components/ui/icon\"\nimport { Image } from \"@/components/ui/image\"\nimport {\n Section,\n SectionActions,\n SectionContent,\n SectionMedia,\n SectionProse,\n SectionSplit,\n} from \"@/components/ui/section\"\n\ninterface Props {\n class?: string\n id?: string\n links?: {\n icon?: string\n text?: string\n href?: string\n target?: string\n }[]\n image?: {\n src: string\n alt: string\n }\n}\n\nconst {\n class: className,\n id,\n links,\n image,\n} = Astro.props\n---\n\n
    \n \n \n \n \n \n \n {\n links?.map(({ href, text, ...link }) => (\n \n ))\n }\n \n \n \n \n \n \n
    \n", "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/hero-2.json b/public/r/hero-2.json index 3456544bb..a2aa99fbc 100644 --- a/public/r/hero-2.json +++ b/public/r/hero-2.json @@ -18,4 +18,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/hero-3.json b/public/r/hero-3.json index 598402a71..f492c5ba0 100644 --- a/public/r/hero-3.json +++ b/public/r/hero-3.json @@ -15,4 +15,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/hero-4.json b/public/r/hero-4.json index 2d37c8443..00081d0e5 100644 --- a/public/r/hero-4.json +++ b/public/r/hero-4.json @@ -15,4 +15,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/hero-5.json b/public/r/hero-5.json index 364116f8e..5cf6a4040 100644 --- a/public/r/hero-5.json +++ b/public/r/hero-5.json @@ -19,4 +19,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/hero-6.json b/public/r/hero-6.json index a96a8dd11..d7065039d 100644 --- a/public/r/hero-6.json +++ b/public/r/hero-6.json @@ -19,4 +19,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/hero-7.json b/public/r/hero-7.json index 989d72779..4fc985c58 100644 --- a/public/r/hero-7.json +++ b/public/r/hero-7.json @@ -19,4 +19,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/hero-8.json b/public/r/hero-8.json index d9f5c45dd..c7f9d6ed1 100644 --- a/public/r/hero-8.json +++ b/public/r/hero-8.json @@ -15,4 +15,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/hero-9.json b/public/r/hero-9.json index 054896e5e..f028a7223 100644 --- a/public/r/hero-9.json +++ b/public/r/hero-9.json @@ -19,4 +19,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/icon.json b/public/r/icon.json index 9e4726f58..61629f57d 100644 --- a/public/r/icon.json +++ b/public/r/icon.json @@ -2,10 +2,7 @@ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "icon", "type": "registry:ui", - "dependencies": [ - "lucide-static", - "simple-icons" - ], + "dependencies": ["lucide-static", "simple-icons"], "files": [ { "path": "src/components/ui/icon/icon.astro", @@ -18,4 +15,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/public/r/image.json b/public/r/image.json index 96ff3e6d2..a3b233d00 100644 --- a/public/r/image.json +++ b/public/r/image.json @@ -14,4 +14,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/public/r/input.json b/public/r/input.json index e8dd266ae..8f537ea80 100644 --- a/public/r/input.json +++ b/public/r/input.json @@ -14,4 +14,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/public/r/item.json b/public/r/item.json index 5d1b22b28..ba75183cb 100644 --- a/public/r/item.json +++ b/public/r/item.json @@ -5,37 +5,37 @@ "files": [ { "path": "src/components/ui/item/item.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props\n extends VariantProps,\n HTMLAttributes<\"div\">,\n HTMLAttributes<\"a\"> {}\n\nconst variants = cva(\n \"group/item [a]:hover:bg-accent/50 focus-visible:border-ring focus-visible:ring-ring/50 flex flex-wrap items-center rounded-md border border-transparent text-sm transition-colors duration-100 outline-none focus-visible:ring-[3px] [a]:transition-colors\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n outline: \"border-border\",\n muted: \"bg-muted/50\",\n },\n size: {\n default: \"gap-4 p-4\",\n sm: \"gap-2.5 px-4 py-3\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nconst { class: className, variant, size, href, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n\nconst Comp = href ? \"a\" : \"div\"\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props\n extends VariantProps,\n HTMLAttributes<\"div\">,\n HTMLAttributes<\"a\"> {}\n\nconst variants = cva(\n \"group/item [a]:hover:bg-accent/50 focus-visible:border-ring focus-visible:ring-ring/50 flex flex-wrap items-center rounded-md border border-transparent text-sm transition-colors duration-100 outline-none focus-visible:ring-[3px] [a]:transition-colors\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n outline: \"border-border\",\n muted: \"bg-muted/50\",\n },\n size: {\n default: \"gap-4 p-4\",\n sm: \"gap-2.5 px-4 py-3\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nconst { class: className, variant, size, href, ...props } = Astro.props\n\nconst Comp = href ? \"a\" : \"div\"\n---\n\n\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/item/item-actions.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/item/item-content.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/item/item-description.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"p\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4\",\n className\n )}\n {...props}\n >\n \n

    \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"p\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\na:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4\",\n className\n )}\n {...props}\n>\n \n

    \n", "type": "registry:ui" }, { "path": "src/components/ui/item/item-group.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/item/item-media.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst variants = cva(\n \"flex shrink-0 items-center justify-center gap-2 group-has-[[data-slot=item-description]]/item:translate-y-0.5 group-has-[[data-slot=item-description]]/item:self-start [&_svg]:pointer-events-none\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n icon: \"bg-muted size-8 rounded-sm border [&_svg:not([class*='size-'])]:size-4\",\n image:\n \"size-10 overflow-hidden rounded-sm [&_img]:size-full [&_img]:object-cover\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\ninterface Props extends HTMLAttributes<\"div\">, VariantProps {}\n\nconst { class: className, variant, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst variants = cva(\n \"flex shrink-0 items-center justify-center gap-2 group-has-[[data-slot=item-description]]/item:translate-y-0.5 group-has-[[data-slot=item-description]]/item:self-start [&_svg]:pointer-events-none\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n icon: \"bg-muted size-8 rounded-sm border [&_svg:not([class*='size-'])]:size-4\",\n image:\n \"size-10 overflow-hidden rounded-sm [&_img]:size-full [&_img]:object-cover\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\ninterface Props extends HTMLAttributes<\"div\">, VariantProps {}\n\nconst { class: className, variant, ...props } = Astro.props\n\n---\n\n\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/item/item-title.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"h3\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"h3\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n\n \n\n", "type": "registry:ui" }, { @@ -44,4 +44,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/public/r/label.json b/public/r/label.json index 5851213e0..2b9973c77 100644 --- a/public/r/label.json +++ b/public/r/label.json @@ -5,7 +5,7 @@ "files": [ { "path": "src/components/ui/label/label.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"label\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"label\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n\n \n\n", "type": "registry:ui" }, { @@ -14,4 +14,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/public/r/layout.json b/public/r/layout.json index cca1fee9d..1f8562bf5 100644 --- a/public/r/layout.json +++ b/public/r/layout.json @@ -2,9 +2,7 @@ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "layout", "type": "registry:component", - "registryDependencies": [ - "@fulldev/block" - ], + "registryDependencies": ["@fulldev/block"], "files": [ { "path": "src/components/layout.astro", @@ -12,4 +10,4 @@ "type": "registry:component" } ] -} \ No newline at end of file +} diff --git a/public/r/list.json b/public/r/list.json index 5bf4403ce..d9f05fb8c 100644 --- a/public/r/list.json +++ b/public/r/list.json @@ -5,12 +5,12 @@ "files": [ { "path": "src/components/ui/list/list.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"ul\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n
      \n \n
    \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"ul\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n
      \n \n
    \n", "type": "registry:ui" }, { "path": "src/components/ui/list/list-item.astro", - "content": "---\nimport { cn } from \"@/lib/utils\"\n\ninterface Props {\n class?: string\n icon?: boolean\n}\n\nconst { class: className, icon = true, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport { cn } from \"@/lib/utils\"\n\ninterface Props {\n class?: string\n icon?: boolean\n}\n\nconst { class: className, icon = true, ...props } = Astro.props\n---\n\n\n \n\n", "type": "registry:ui" }, { @@ -19,4 +19,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/public/r/logo.json b/public/r/logo.json index c941ac9b9..966dda961 100644 --- a/public/r/logo.json +++ b/public/r/logo.json @@ -2,13 +2,11 @@ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "logo", "type": "registry:ui", - "registryDependencies": [ - "@fulldev/image" - ], + "registryDependencies": ["@fulldev/image"], "files": [ { "path": "src/components/ui/logo/logo.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\"> & HTMLAttributes<\"a\">\n\nconst { class: className, href, ...props } = Astro.props\n\nconst Comp = href ? \"a\" : \"div\"\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\"> & HTMLAttributes<\"a\">\n\nconst { class: className, href, ...props } = Astro.props\n\nconst Comp = href ? \"a\" : \"div\"\n---\n\n\n \n\n", "type": "registry:ui" }, { @@ -18,7 +16,7 @@ }, { "path": "src/components/ui/logo/logo-text.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"span\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"span\"> {}\n\nconst { class: className, ...props } = Astro.props\n---\n\n\n \n\n", "type": "registry:ui" }, { @@ -27,4 +25,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/public/r/logos-1.json b/public/r/logos-1.json index 63de1f7c7..b63a38d98 100644 --- a/public/r/logos-1.json +++ b/public/r/logos-1.json @@ -2,10 +2,7 @@ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "logos-1", "type": "registry:block", - "registryDependencies": [ - "@fulldev/logo", - "@fulldev/section" - ], + "registryDependencies": ["@fulldev/logo", "@fulldev/section"], "files": [ { "path": "src/components/blocks/logos-1.astro", @@ -13,4 +10,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/logos-2.json b/public/r/logos-2.json index 8d43111fc..ac55c64ea 100644 --- a/public/r/logos-2.json +++ b/public/r/logos-2.json @@ -14,4 +14,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/logos-3.json b/public/r/logos-3.json index 15c405c2d..5e0c159de 100644 --- a/public/r/logos-3.json +++ b/public/r/logos-3.json @@ -2,10 +2,7 @@ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "logos-3", "type": "registry:block", - "registryDependencies": [ - "@fulldev/logo", - "@fulldev/section" - ], + "registryDependencies": ["@fulldev/logo", "@fulldev/section"], "files": [ { "path": "src/components/blocks/logos-3.astro", @@ -13,4 +10,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/marquee.json b/public/r/marquee.json index f9a4cca6b..4a63bb7a4 100644 --- a/public/r/marquee.json +++ b/public/r/marquee.json @@ -10,7 +10,7 @@ }, { "path": "src/components/ui/marquee/marquee-content.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\"> & VariantProps\n\nconst contentVariants = cva(\n \"animation-duration-40000 flex min-w-full shrink-0 justify-between gap-6 after:w-0\",\n {\n variants: {\n direction: {\n left: \"animate-[marquee-horizontal_linear_infinite]\",\n right: \"reverse animate-[marquee-horizontal_linear_infinite_reverse]\",\n },\n pauseOnHover: {\n true: \"group-hover/marquee:paused\",\n false: \"\",\n },\n },\n defaultVariants: {\n direction: \"left\",\n pauseOnHover: false,\n },\n }\n)\n\nconst { class: className, direction, pauseOnHover, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n\n \n\n\n \n\n\n\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\"> & VariantProps\n\nconst contentVariants = cva(\n \"animation-duration-40000 flex min-w-full shrink-0 justify-between gap-6 after:w-0\",\n {\n variants: {\n direction: {\n left: \"animate-[marquee-horizontal_linear_infinite]\",\n right: \"reverse animate-[marquee-horizontal_linear_infinite_reverse]\",\n },\n pauseOnHover: {\n true: \"group-hover/marquee:paused\",\n false: \"\",\n },\n },\n defaultVariants: {\n direction: \"left\",\n pauseOnHover: false,\n },\n }\n)\n\nconst { class: className, direction, pauseOnHover, ...props } = Astro.props\n\n---\n\n\n \n\n\n \n\n\n\n", "type": "registry:ui" }, { @@ -19,4 +19,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/public/r/native-carousel.json b/public/r/native-carousel.json index 15fd8e397..1cd75785e 100644 --- a/public/r/native-carousel.json +++ b/public/r/native-carousel.json @@ -34,4 +34,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/public/r/native-select.json b/public/r/native-select.json index 1476add9a..c2cd3bbda 100644 --- a/public/r/native-select.json +++ b/public/r/native-select.json @@ -24,4 +24,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/public/r/navigation-menu.json b/public/r/navigation-menu.json index aa313ee68..4740f0992 100644 --- a/public/r/navigation-menu.json +++ b/public/r/navigation-menu.json @@ -5,47 +5,47 @@ "files": [ { "path": "src/components/ui/navigation-menu/navigation-menu.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"nav\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"nav\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/navigation-menu/navigation-menu-content.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/navigation-menu/navigation-menu-item.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"li\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"li\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/navigation-menu/navigation-menu-link.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst variants = cva(\n \"focus-visible:ring-ring/50 inline-flex w-full items-start justify-start rounded-md transition-all outline-none focus-visible:ring-[3px] focus-visible:outline-none\",\n {\n variants: {\n variant: {\n default:\n \"hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground flex-col gap-1 p-2 text-sm [&_svg:not([class*='size-'])]:size-4\",\n trigger:\n \"bg-background hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground h-9 w-max px-4 py-2 text-sm font-medium disabled:pointer-events-none disabled:opacity-50\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\ninterface Props extends HTMLAttributes<\"a\">, VariantProps {\n active?: boolean\n}\n\nconst { class: className, variant, href, active, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst variants = cva(\n \"focus-visible:ring-ring/50 inline-flex w-full items-start justify-start rounded-md transition-all outline-none focus-visible:ring-[3px] focus-visible:outline-none\",\n {\n variants: {\n variant: {\n default:\n \"hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground flex-col gap-1 p-2 text-sm [&_svg:not([class*='size-'])]:size-4\",\n trigger:\n \"bg-background hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground h-9 w-max px-4 py-2 text-sm font-medium disabled:pointer-events-none disabled:opacity-50\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\ninterface Props extends HTMLAttributes<\"a\">, VariantProps {\n active?: boolean\n}\n\nconst { class: className, variant, href, active, ...props } = Astro.props\n\n---\n\n\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/navigation-menu/navigation-menu-list.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"ul\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"ul\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/navigation-menu/navigation-menu-sub.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"ul\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"ul\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/navigation-menu/navigation-menu-sub-item.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"li\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"li\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/navigation-menu/navigation-menu-sub-link.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"a\"> {}\n\nconst { class: className, href, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"a\"> {}\n\nconst { class: className, href, ...props } = Astro.props\n\n---\n\n\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/navigation-menu/navigation-menu-trigger.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport ChevronDown from \"lucide-static/icons/chevron-down.svg\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"button\"> & HTMLAttributes<\"a\">\n\nconst { class: className, href, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n\nconst Comp = href ? \"a\" : \"button\"\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport ChevronDown from \"lucide-static/icons/chevron-down.svg\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"button\"> & HTMLAttributes<\"a\">\n\nconst { class: className, href, ...props } = Astro.props\n\nconst Comp = href ? \"a\" : \"button\"\n---\n\n\n \n \n\n", "type": "registry:ui" }, { @@ -54,4 +54,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/public/r/page.json b/public/r/page.json index 4d0ef7bbd..2ed553495 100644 --- a/public/r/page.json +++ b/public/r/page.json @@ -15,4 +15,4 @@ "target": "src/pages/[...page].astro" } ] -} \ No newline at end of file +} diff --git a/public/r/price.json b/public/r/price.json index f0ccccce4..f36924988 100644 --- a/public/r/price.json +++ b/public/r/price.json @@ -5,12 +5,12 @@ "files": [ { "path": "src/components/ui/price/price.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/price/price-unit.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"span\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n / \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"span\"> {}\n\nconst { class: className, ...props } = Astro.props\n---\n\n\n / \n\n", "type": "registry:ui" }, { @@ -24,4 +24,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/public/r/pricings-1.json b/public/r/pricings-1.json index 7358ff509..8f653f1e7 100644 --- a/public/r/pricings-1.json +++ b/public/r/pricings-1.json @@ -17,4 +17,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/pricings-2.json b/public/r/pricings-2.json index 6a561fc81..3168f7d9c 100644 --- a/public/r/pricings-2.json +++ b/public/r/pricings-2.json @@ -17,4 +17,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/pricings-3.json b/public/r/pricings-3.json index 359f582be..3d6148c35 100644 --- a/public/r/pricings-3.json +++ b/public/r/pricings-3.json @@ -17,4 +17,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/product-1.json b/public/r/product-1.json index 8e591c2d1..173f57efa 100644 --- a/public/r/product-1.json +++ b/public/r/product-1.json @@ -17,4 +17,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/products-1.json b/public/r/products-1.json index 3577b5ff8..d382f3358 100644 --- a/public/r/products-1.json +++ b/public/r/products-1.json @@ -17,4 +17,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/products-2.json b/public/r/products-2.json index 3bb9148ed..a4473ef1d 100644 --- a/public/r/products-2.json +++ b/public/r/products-2.json @@ -16,4 +16,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/products-3.json b/public/r/products-3.json index 6a86aacfc..786381647 100644 --- a/public/r/products-3.json +++ b/public/r/products-3.json @@ -15,4 +15,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/products-4.json b/public/r/products-4.json index c889b92c3..9f7fb6d61 100644 --- a/public/r/products-4.json +++ b/public/r/products-4.json @@ -15,4 +15,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/products-5.json b/public/r/products-5.json index c5fb67e41..2e1be68f4 100644 --- a/public/r/products-5.json +++ b/public/r/products-5.json @@ -17,4 +17,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/radio-group.json b/public/r/radio-group.json index c84af7cee..aeeff04d7 100644 --- a/public/r/radio-group.json +++ b/public/r/radio-group.json @@ -19,4 +19,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/public/r/rating.json b/public/r/rating.json index 87b4652fe..d0ad4a638 100644 --- a/public/r/rating.json +++ b/public/r/rating.json @@ -14,4 +14,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/public/r/reviews-1.json b/public/r/reviews-1.json index fe51b3091..38da42fe4 100644 --- a/public/r/reviews-1.json +++ b/public/r/reviews-1.json @@ -18,4 +18,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/reviews-2.json b/public/r/reviews-2.json index 7f254b602..727c70a48 100644 --- a/public/r/reviews-2.json +++ b/public/r/reviews-2.json @@ -18,4 +18,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/reviews-3.json b/public/r/reviews-3.json index e5af02e2b..882da84fe 100644 --- a/public/r/reviews-3.json +++ b/public/r/reviews-3.json @@ -18,4 +18,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/reviews-4.json b/public/r/reviews-4.json index d49a9f857..a34fe6e17 100644 --- a/public/r/reviews-4.json +++ b/public/r/reviews-4.json @@ -19,4 +19,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/reviews-5.json b/public/r/reviews-5.json index 89fdf044c..7812f9fb8 100644 --- a/public/r/reviews-5.json +++ b/public/r/reviews-5.json @@ -19,4 +19,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/section.json b/public/r/section.json index c99471839..2a9e5152d 100644 --- a/public/r/section.json +++ b/public/r/section.json @@ -5,52 +5,52 @@ "files": [ { "path": "src/components/ui/section/section.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props\n extends HTMLAttributes<\"section\">,\n VariantProps {\n size?: \"sm\" | \"default\" | \"lg\"\n}\n\nconst variants = cva(\n \"relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py)\",\n {\n variants: {\n variant: {\n default: \"bg-background w-full\",\n floating: [\n \"bg-background rounded-lg border shadow-md\",\n \"w-[calc(100%-2*var(--gutter,24px))] max-w-(--section-width)\",\n \"my-(--section-py) overflow-hidden rounded-xl\",\n ],\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nconst { class: className, variant, size, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n\n\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props\n extends HTMLAttributes<\"section\">,\n VariantProps {\n size?: \"sm\" | \"default\" | \"lg\"\n}\n\nconst variants = cva(\n \"relative mx-auto flex scroll-m-(--section-py) flex-col gap-16 px-(--section-px) py-(--section-py)\",\n {\n variants: {\n variant: {\n default: \"bg-background w-full\",\n floating: [\n \"bg-background rounded-lg border shadow-md\",\n \"w-[calc(100%-2*var(--gutter,24px))] max-w-(--section-width)\",\n \"my-(--section-py) overflow-hidden rounded-xl\",\n ],\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nconst { class: className, variant, size, ...props } = Astro.props\n\n---\n\n\n \n\n\n\n", "type": "registry:ui" }, { "path": "src/components/ui/section/section-actions.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n
    \n \n
    \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n
    \n \n
    \n", "type": "registry:ui" }, { "path": "src/components/ui/section/section-content.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/section/section-grid.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\">, VariantProps {}\n\nconst variants = cva(\"grid w-full gap-6\", {\n variants: {\n frame: {\n default: \"\",\n },\n size: {\n sm: \"grid-cols-[repeat(auto-fit,minmax(200px,1fr))]\",\n default: \"grid-cols-1 sm:grid-cols-[repeat(auto-fit,minmax(260px,1fr))]\",\n lg: \"grid-cols-1 sm:grid-cols-[repeat(auto-fit,minmax(400px,1fr))]\",\n },\n },\n defaultVariants: {\n size: \"default\",\n frame: \"default\",\n },\n})\n\nconst { class: className, size, frame, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n
    \n \n
    \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\">, VariantProps {}\n\nconst variants = cva(\"grid w-full gap-6\", {\n variants: {\n frame: {\n default: \"\",\n },\n size: {\n sm: \"grid-cols-[repeat(auto-fit,minmax(200px,1fr))]\",\n default: \"grid-cols-1 sm:grid-cols-[repeat(auto-fit,minmax(260px,1fr))]\",\n lg: \"grid-cols-1 sm:grid-cols-[repeat(auto-fit,minmax(400px,1fr))]\",\n },\n },\n defaultVariants: {\n size: \"default\",\n frame: \"default\",\n },\n})\n\nconst { class: className, size, frame, ...props } = Astro.props\n\n---\n\n
    \n \n
    \n", "type": "registry:ui" }, { "path": "src/components/ui/section/section-masonry.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\">, VariantProps {}\n\nconst variants = cva(\"w-full gap-6 space-y-6 *:break-inside-avoid\", {\n variants: {\n size: {\n sm: \"columns-3xs\",\n default: \"columns-2xs\",\n lg: \"columns-xs\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n})\n\nconst { class: className, size, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n
    \n \n
    \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\">, VariantProps {}\n\nconst variants = cva(\"w-full gap-6 space-y-6 *:break-inside-avoid\", {\n variants: {\n size: {\n sm: \"columns-3xs\",\n default: \"columns-2xs\",\n lg: \"columns-xs\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n})\n\nconst { class: className, size, ...props } = Astro.props\n\n---\n\n
    \n \n
    \n", "type": "registry:ui" }, { "path": "src/components/ui/section/section-media.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/section/section-prose.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst variants = cva(\n [\n \"text-foreground w-full space-y-4 text-pretty\",\n \"[&_p]:leading-[1.8] [&_p]:not-first:mt-4\",\n \"[&_ul]:ml-5 [&_ul]:list-disc [&_ul]:space-y-2 [&_ul]:not-first:mt-4\",\n \"[&_ol]:ml-5 [&_ol]:list-decimal [&_ol]:space-y-2 [&_ol]:not-first:mt-4\",\n \"[&_li_p]:inline\",\n \"[&_a]:text-primary [&_a]:hover:underline\",\n \"@max-sm:[&_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto\",\n \"[&_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12\",\n \"[&_img]:rounded-lg [&_img]:not-first:mt-12\",\n \"[&_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium\",\n \"[&_pre]:bg-muted [&_pre]:mt-6 [&_pre]:rounded-lg [&_pre]:rounded-md [&_pre]:border [&_pre]:p-4 [&_pre]:text-sm\",\n ],\n {\n variants: {\n size: {\n sm: \"max-w-2xl text-sm [&_h1]:text-3xl [&_h2]:text-2xl [&_h3]:text-xl [&_h4]:text-lg [&_h5]:text-base [&_h6]:text-sm\",\n default:\n \"max-w-3xl text-base [&_h1]:text-4xl [&_h2]:text-3xl [&_h3]:text-2xl [&_h4]:text-xl [&_h5]:text-lg [&_h6]:text-base\",\n lg: \"max-w-4xl text-lg [&_h1]:text-4xl @5xl:[&_h1]:text-5xl [&_h2]:text-4xl [&_h3]:text-3xl [&_h4]:text-2xl [&_h5]:text-xl [&_h6]:text-lg\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\ninterface Props extends HTMLAttributes<\"div\">, VariantProps {}\n\nconst { class: className, size, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n
    \n \n
    \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst variants = cva(\n [\n \"text-foreground w-full space-y-4 text-pretty\",\n \"[&_p]:leading-[1.8] [&_p]:not-first:mt-4\",\n \"[&_ul]:ml-5 [&_ul]:list-disc [&_ul]:space-y-2 [&_ul]:not-first:mt-4\",\n \"[&_ol]:ml-5 [&_ol]:list-decimal [&_ol]:space-y-2 [&_ol]:not-first:mt-4\",\n \"[&_li_p]:inline\",\n \"[&_a]:text-primary [&_a]:hover:underline\",\n \"@max-sm:[&_:is(h1,h2,h3,h4,h5,h6)]:break-words @max-sm:[&_:is(h1,h2,h3,h4,h5,h6)]:wrap-break-word @max-sm:[&_:is(h1,h2,h3,h4,h5,h6)]:hyphens-auto\",\n \"[&_:is(h1,h2,h3,h4,h5,h6)]:scroll-mt-20 [&_:is(h1,h2,h3,h4,h5,h6)]:leading-[1.1] [&_:is(h1,h2,h3,h4,h5,h6)]:font-semibold [&_:is(h1,h2,h3,h4,h5,h6)]:not-first:mt-12\",\n \"[&_img]:rounded-lg [&_img]:not-first:mt-12\",\n \"[&_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-accent-foreground [&_p:first-child+:is(h1,h2,h3,h4,h5,h6)]:mt-4 [&_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:text-sm [&_p:first-child:has(~:is(h1,h2,h3,h4,h5,h6))]:font-medium\",\n \"[&_pre]:bg-muted [&_pre]:mt-6 [&_pre]:rounded-lg [&_pre]:rounded-md [&_pre]:border [&_pre]:p-4 [&_pre]:text-sm\",\n ],\n {\n variants: {\n size: {\n sm: \"max-w-2xl text-sm [&_h1]:text-3xl [&_h2]:text-2xl [&_h3]:text-xl [&_h4]:text-lg [&_h5]:text-base [&_h6]:text-sm\",\n default:\n \"max-w-3xl text-base [&_h1]:text-4xl [&_h2]:text-3xl [&_h3]:text-2xl [&_h4]:text-xl [&_h5]:text-lg [&_h6]:text-base\",\n lg: \"max-w-4xl text-lg [&_h1]:text-4xl @5xl:[&_h1]:text-5xl [&_h2]:text-4xl [&_h3]:text-3xl [&_h4]:text-2xl [&_h5]:text-xl [&_h6]:text-lg\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\ninterface Props extends HTMLAttributes<\"div\">, VariantProps {}\n\nconst { class: className, size, ...props } = Astro.props\n\n---\n\n
    \n \n
    \n", "type": "registry:ui" }, { "path": "src/components/ui/section/section-provider.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"main\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"main\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/section/section-split.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/section/section-spread.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n\n \n\n", "type": "registry:ui" }, { @@ -59,4 +59,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/public/r/separator.json b/public/r/separator.json index 70d653691..c6359f8a1 100644 --- a/public/r/separator.json +++ b/public/r/separator.json @@ -14,4 +14,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/public/r/services-1.json b/public/r/services-1.json index c49dc5ee7..ba10b6834 100644 --- a/public/r/services-1.json +++ b/public/r/services-1.json @@ -16,4 +16,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/services-2.json b/public/r/services-2.json index d0e50a0a0..92f70c34f 100644 --- a/public/r/services-2.json +++ b/public/r/services-2.json @@ -16,4 +16,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/services-3.json b/public/r/services-3.json index 5d1145bce..9b2f658b7 100644 --- a/public/r/services-3.json +++ b/public/r/services-3.json @@ -15,4 +15,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/services-4.json b/public/r/services-4.json index 7b8fd415e..7261f55af 100644 --- a/public/r/services-4.json +++ b/public/r/services-4.json @@ -16,4 +16,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/services-5.json b/public/r/services-5.json index 069f291d2..0e9ba8f45 100644 --- a/public/r/services-5.json +++ b/public/r/services-5.json @@ -16,4 +16,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/services-6.json b/public/r/services-6.json index 940b3865c..00a80fb78 100644 --- a/public/r/services-6.json +++ b/public/r/services-6.json @@ -15,4 +15,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/services-7.json b/public/r/services-7.json index b6740c948..f87012eed 100644 --- a/public/r/services-7.json +++ b/public/r/services-7.json @@ -16,4 +16,4 @@ "type": "registry:block" } ] -} \ No newline at end of file +} diff --git a/public/r/sheet.json b/public/r/sheet.json index 3fd28b7f1..4d4ae7d61 100644 --- a/public/r/sheet.json +++ b/public/r/sheet.json @@ -2,13 +2,11 @@ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "sheet", "type": "registry:ui", - "registryDependencies": [ - "@fulldev/button" - ], + "registryDependencies": ["@fulldev/button"], "files": [ { "path": "src/components/ui/sheet/sheet.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n\n\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n\n \n\n\n\n", "type": "registry:ui" }, { @@ -18,32 +16,32 @@ }, { "path": "src/components/ui/sheet/sheet-content.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport XIcon from \"lucide-static/icons/x.svg\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst dialogVariants = cva(\n [\n \"fixed inset-0 z-50 m-0 max-h-none max-w-none border-0 bg-transparent p-0\",\n \"backdrop:bg-black/50\",\n // Added for quick fix over horizontal scroll issue\n \"overflow-x-hidden\",\n ],\n {\n variants: {\n side: {\n right: \"ml-auto h-full w-3/4 sm:max-w-sm\",\n left: \"mr-auto h-full w-3/4 sm:max-w-sm\",\n top: \"mb-auto h-auto w-full\",\n bottom: \"mt-auto h-auto w-full\",\n },\n },\n defaultVariants: {\n side: \"right\",\n },\n }\n)\n\nconst contentVariants = cva(\n \"bg-background flex h-full flex-col gap-4 shadow-lg transition-transform duration-500 ease-in-out\",\n {\n variants: {\n side: {\n right: \"translate-x-full border-l\",\n left: \"-translate-x-full border-r\",\n top: \"-translate-y-full border-b\",\n bottom: \"translate-y-full border-t\",\n },\n },\n defaultVariants: {\n side: \"right\",\n },\n }\n)\n\ntype Props = VariantProps &\n HTMLAttributes<\"div\">\n\nconst { class: className, side, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n\n \n \n \n \n \n \n\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport XIcon from \"lucide-static/icons/x.svg\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst dialogVariants = cva(\n [\n \"fixed inset-0 z-50 m-0 max-h-none max-w-none border-0 bg-transparent p-0\",\n \"backdrop:bg-black/50\",\n // Added for quick fix over horizontal scroll issue\n \"overflow-x-hidden\",\n ],\n {\n variants: {\n side: {\n right: \"ml-auto h-full w-3/4 sm:max-w-sm\",\n left: \"mr-auto h-full w-3/4 sm:max-w-sm\",\n top: \"mb-auto h-auto w-full\",\n bottom: \"mt-auto h-auto w-full\",\n },\n },\n defaultVariants: {\n side: \"right\",\n },\n }\n)\n\nconst contentVariants = cva(\n \"bg-background flex h-full flex-col gap-4 shadow-lg transition-transform duration-500 ease-in-out\",\n {\n variants: {\n side: {\n right: \"translate-x-full border-l\",\n left: \"-translate-x-full border-r\",\n top: \"-translate-y-full border-b\",\n bottom: \"translate-y-full border-t\",\n },\n },\n defaultVariants: {\n side: \"right\",\n },\n }\n)\n\ntype Props = VariantProps &\n HTMLAttributes<\"div\">\n\nconst { class: className, side, ...props } = Astro.props\n\n---\n\n\n \n \n \n \n \n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/sheet/sheet-description.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"p\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n

    \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"p\"> {}\n\nconst { class: className, ...props } = Astro.props\n---\n\n\n \n

    \n", "type": "registry:ui" }, { "path": "src/components/ui/sheet/sheet-footer.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/sheet/sheet-header.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/sheet/sheet-title.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"h2\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"h2\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/sheet/sheet-trigger.astro", - "content": "---\nimport type { ComponentProps } from \"astro/types\"\n\nimport { Button } from \"@/components/ui/button\"\n\ninterface Props extends ComponentProps {}\n\nconst { ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n )\n}\n", + "content": "---\nimport type { ComponentProps } from \"astro/types\"\n\nimport { Button } from \"@/components/ui/button\"\n\ninterface Props extends ComponentProps {}\n\nconst { ...props } = Astro.props\n\n---\n\n\n", "type": "registry:ui" }, { @@ -52,4 +50,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/public/r/sidebar.json b/public/r/sidebar.json index 3ff9b3185..699f083f3 100644 --- a/public/r/sidebar.json +++ b/public/r/sidebar.json @@ -5,32 +5,32 @@ "files": [ { "path": "src/components/ui/sidebar/sidebar-menu.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"ul\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"ul\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/sidebar/sidebar-menu-button.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst variants = cva(\n \"hover:bg-accent hover:text-accent-foreground focus-visible:outline-ring active:bg-accent active:text-accent-foreground flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden transition-colors focus-visible:outline-2 focus-visible:outline-offset-2 disabled:pointer-events-none disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"hover:bg-accent hover:text-accent-foreground text-foreground\",\n outline:\n \"bg-background hover:bg-accent hover:text-accent-foreground shadow-[0_0_0_1px_hsl(var(--border))] hover:shadow-[0_0_0_1px_hsl(var(--accent))]\",\n },\n size: {\n default: \"h-8 text-sm\",\n sm: \"h-7 text-xs\",\n lg: \"h-12 text-sm\",\n },\n active: {\n true: \"bg-accent text-accent-foreground font-medium\",\n false: \"\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n active: false,\n },\n }\n)\n\ntype Props = VariantProps &\n HTMLAttributes<\"button\"> &\n HTMLAttributes<\"a\"> & {\n href?: string\n }\n\nconst { class: className, variant, size, active, href, ...props } = Astro.props\n\nconst Comp = href ? \"a\" : \"button\"\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst variants = cva(\n \"hover:bg-accent hover:text-accent-foreground focus-visible:outline-ring active:bg-accent active:text-accent-foreground flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden transition-colors focus-visible:outline-2 focus-visible:outline-offset-2 disabled:pointer-events-none disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"hover:bg-accent hover:text-accent-foreground text-foreground\",\n outline:\n \"bg-background hover:bg-accent hover:text-accent-foreground shadow-[0_0_0_1px_hsl(var(--border))] hover:shadow-[0_0_0_1px_hsl(var(--accent))]\",\n },\n size: {\n default: \"h-8 text-sm\",\n sm: \"h-7 text-xs\",\n lg: \"h-12 text-sm\",\n },\n active: {\n true: \"bg-accent text-accent-foreground font-medium\",\n false: \"\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n active: false,\n },\n }\n)\n\ntype Props = VariantProps &\n HTMLAttributes<\"button\"> &\n HTMLAttributes<\"a\"> & {\n href?: string\n }\n\nconst { class: className, variant, size, active, href, ...props } = Astro.props\n\nconst Comp = href ? \"a\" : \"button\"\n---\n\n\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/sidebar/sidebar-menu-item.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"li\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"li\"> {}\n\nconst { class: className, ...props } = Astro.props\n---\n\n\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/sidebar/sidebar-menu-sub.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"ul\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"ul\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/sidebar/sidebar-menu-sub-button.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst variants = cva(\n \"hover:bg-accent hover:text-accent-foreground focus-visible:outline-ring flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 outline-hidden transition-colors focus-visible:outline-2 focus-visible:outline-offset-2 disabled:pointer-events-none disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0\",\n {\n variants: {\n size: {\n sm: \"text-xs\",\n md: \"text-sm\",\n },\n active: {\n true: \"bg-accent text-accent-foreground\",\n false: \"\",\n },\n },\n defaultVariants: {\n size: \"md\",\n active: false,\n },\n }\n)\n\ntype Props = VariantProps &\n HTMLAttributes<\"button\"> &\n HTMLAttributes<\"a\"> & {\n href?: string\n }\n\nconst { class: className, size, active, href, ...props } = Astro.props\n\nconst Comp = href ? \"a\" : \"button\"\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst variants = cva(\n \"hover:bg-accent hover:text-accent-foreground focus-visible:outline-ring flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 outline-hidden transition-colors focus-visible:outline-2 focus-visible:outline-offset-2 disabled:pointer-events-none disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0\",\n {\n variants: {\n size: {\n sm: \"text-xs\",\n md: \"text-sm\",\n },\n active: {\n true: \"bg-accent text-accent-foreground\",\n false: \"\",\n },\n },\n defaultVariants: {\n size: \"md\",\n active: false,\n },\n }\n)\n\ntype Props = VariantProps &\n HTMLAttributes<\"button\"> &\n HTMLAttributes<\"a\"> & {\n href?: string\n }\n\nconst { class: className, size, active, href, ...props } = Astro.props\n\nconst Comp = href ? \"a\" : \"button\"\n---\n\n\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/sidebar/sidebar-menu-sub-item.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"li\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"li\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n\n \n\n", "type": "registry:ui" }, { @@ -39,4 +39,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/public/r/skeleton.json b/public/r/skeleton.json index 182ef83bc..4d92fc81d 100644 --- a/public/r/skeleton.json +++ b/public/r/skeleton.json @@ -14,4 +14,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/public/r/spinner.json b/public/r/spinner.json index 5b72295ac..4c0a17c3a 100644 --- a/public/r/spinner.json +++ b/public/r/spinner.json @@ -14,4 +14,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/public/r/table.json b/public/r/table.json index c6e9725e3..3ff23a5a8 100644 --- a/public/r/table.json +++ b/public/r/table.json @@ -49,4 +49,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/public/r/tabs.json b/public/r/tabs.json index 846101d2c..fe183b0e8 100644 --- a/public/r/tabs.json +++ b/public/r/tabs.json @@ -5,22 +5,22 @@ "files": [ { "path": "src/components/ui/tabs/tabs.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {\n defaultValue?: string\n}\n\nconst { class: className, defaultValue, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n\n\n\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {\n defaultValue?: string\n}\n\nconst { class: className, defaultValue, ...props } = Astro.props\n\n---\n\n\n \n\n\n\n\n", "type": "registry:ui" }, { "path": "src/components/ui/tabs/tabs-content.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {\n value: string\n}\n\nconst { class: className, value, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {\n value: string\n}\n\nconst { class: className, value, ...props } = Astro.props\n---\n\n\n \n\n\n", "type": "registry:ui" }, { "path": "src/components/ui/tabs/tabs-list.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/tabs/tabs-trigger.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends Omit, \"class\"> {\n class?: string\n value: string\n disabled?: boolean\n}\n\nconst { class: className, value, disabled = false, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends Omit, \"class\"> {\n class?: string\n value: string\n disabled?: boolean\n}\n\nconst { class: className, value, disabled = false, ...props } = Astro.props\n\n---\n\n\n \n\n\n", "type": "registry:ui" }, { @@ -29,4 +29,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/public/r/textarea.json b/public/r/textarea.json index 1d2054e10..4d0b0d271 100644 --- a/public/r/textarea.json +++ b/public/r/textarea.json @@ -14,4 +14,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/public/r/theme-toggle.json b/public/r/theme-toggle.json index 23822f1d0..a19d37774 100644 --- a/public/r/theme-toggle.json +++ b/public/r/theme-toggle.json @@ -2,10 +2,7 @@ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "theme-toggle", "type": "registry:ui", - "registryDependencies": [ - "@fulldev/button", - "@fulldev/icon" - ], + "registryDependencies": ["@fulldev/button", "@fulldev/icon"], "files": [ { "path": "src/components/ui/theme-toggle/theme-toggle.astro", @@ -23,4 +20,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/public/r/tile.json b/public/r/tile.json index b7572765e..18356974f 100644 --- a/public/r/tile.json +++ b/public/r/tile.json @@ -5,42 +5,42 @@ "files": [ { "path": "src/components/ui/tile/tile.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = VariantProps &\n HTMLAttributes<\"div\"> &\n HTMLAttributes<\"a\">\n\nconst variants = cva(\n \"group/tile focus-visible:border-ring focus-visible:ring-ring/50 [a]:hover:ring-accent/50 relative flex flex-col items-start gap-6 outline-none focus-visible:ring-[3px] [a]:transition-all\",\n {\n variants: {\n variant: {\n default:\n \"[a]:hover:ring-accent/50 [a]:hover:bg-accent/50 rounded-sm bg-transparent [a]:hover:ring-12\",\n floating:\n \"bg-card text-card-foreground [a]:hover:bg-accent/50 overflow-hidden rounded-sm border p-6 shadow-sm duration-100\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nconst { class: className, variant, href, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n\nconst Comp = href ? \"a\" : \"div\"\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n\n\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = VariantProps &\n HTMLAttributes<\"div\"> &\n HTMLAttributes<\"a\">\n\nconst variants = cva(\n \"group/tile focus-visible:border-ring focus-visible:ring-ring/50 [a]:hover:ring-accent/50 relative flex flex-col items-start gap-6 outline-none focus-visible:ring-[3px] [a]:transition-all\",\n {\n variants: {\n variant: {\n default:\n \"[a]:hover:ring-accent/50 [a]:hover:bg-accent/50 rounded-sm bg-transparent [a]:hover:ring-12\",\n floating:\n \"bg-card text-card-foreground [a]:hover:bg-accent/50 overflow-hidden rounded-sm border p-6 shadow-sm duration-100\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nconst { class: className, variant, href, ...props } = Astro.props\n\nconst Comp = href ? \"a\" : \"div\"\n---\n\n\n \n\n\n\n", "type": "registry:ui" }, { "path": "src/components/ui/tile/tile-actions.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n
    \n \n
    \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n
    \n \n
    \n", "type": "registry:ui" }, { "path": "src/components/ui/tile/tile-content.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n
    \n \n
    \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n---\n\n
    \n \n
    \n", "type": "registry:ui" }, { "path": "src/components/ui/tile/tile-description.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"p\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n

    \n \n

    \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"p\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n

    \n \n

    \n", "type": "registry:ui" }, { "path": "src/components/ui/tile/tile-media.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst variants = cva(\n [\n \"flex shrink-0 items-center justify-center gap-2 group-has-[[data-slot=tile-description]]/tile:translate-y-0.5 group-has-[[data-slot=tile-description]]/tile:self-start [&_svg]:pointer-events-none\",\n \"transition-opacity duration-100 [&:is(a:hover>&)]:opacity-75\",\n \"relative overflow-hidden rounded-md\",\n ],\n {\n variants: {\n variant: {\n default: \"rounded-md *:size-full *:object-cover\",\n icon: \"bg-muted size-8 rounded-sm border [&_svg:not([class*='size-'])]:size-4\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\ninterface Props extends HTMLAttributes<\"div\">, VariantProps {}\n\nconst { class: className, variant, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst variants = cva(\n [\n \"flex shrink-0 items-center justify-center gap-2 group-has-[[data-slot=tile-description]]/tile:translate-y-0.5 group-has-[[data-slot=tile-description]]/tile:self-start [&_svg]:pointer-events-none\",\n \"transition-opacity duration-100 [&:is(a:hover>&)]:opacity-75\",\n \"relative overflow-hidden rounded-md\",\n ],\n {\n variants: {\n variant: {\n default: \"rounded-md *:size-full *:object-cover\",\n icon: \"bg-muted size-8 rounded-sm border [&_svg:not([class*='size-'])]:size-4\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\ninterface Props extends HTMLAttributes<\"div\">, VariantProps {}\n\nconst { class: className, variant, ...props } = Astro.props\n\n---\n\n\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/tile/tile-split.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/tile/tile-spread.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n \n \n \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/tile/tile-title.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"h3\"> {}\n\nconst { class: className, ...props } = Astro.props\n\nconst slot = await Astro.slots.render(\"default\")\n---\n\n{\n slot?.trim().length > 0 && (\n

    \n \n

    \n )\n}\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"h3\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n

    \n \n

    \n", "type": "registry:ui" }, { @@ -49,4 +49,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/public/r/video.json b/public/r/video.json index 489cc5de6..1ce0ace29 100644 --- a/public/r/video.json +++ b/public/r/video.json @@ -14,4 +14,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/src/components/blocks/blocks-1.astro b/src/components/blocks/blocks-1.astro index 1f8fbbd78..c913105d5 100644 --- a/src/components/blocks/blocks-1.astro +++ b/src/components/blocks/blocks-1.astro @@ -31,7 +31,7 @@ const sortedBlocks = Object.entries(allBlocks).sort(([a], [b]) => return BlockComponent ? (
    - + {id}
    diff --git a/src/components/blocks/blocks-2.astro b/src/components/blocks/blocks-2.astro index a8e4a302d..023f57c40 100644 --- a/src/components/blocks/blocks-2.astro +++ b/src/components/blocks/blocks-2.astro @@ -47,7 +47,7 @@ const { class: className, id, title, description, items } = Astro.props
    diff --git a/src/components/ui/banner/banner-description.astro b/src/components/ui/banner/banner-description.astro index 23ab0e867..880c24629 100644 --- a/src/components/ui/banner/banner-description.astro +++ b/src/components/ui/banner/banner-description.astro @@ -6,7 +6,6 @@ import { cn } from "@/lib/utils" interface Props extends HTMLAttributes<"p"> {} const { class: className, ...props } = Astro.props - ---

    diff --git a/src/components/ui/banner/banner-title.astro b/src/components/ui/banner/banner-title.astro index 2c4595f04..36fdc1132 100644 --- a/src/components/ui/banner/banner-title.astro +++ b/src/components/ui/banner/banner-title.astro @@ -6,7 +6,6 @@ import { cn } from "@/lib/utils" interface Props extends HTMLAttributes<"p"> {} const { class: className, ...props } = Astro.props - ---

    diff --git a/src/components/ui/button/button-variants.ts b/src/components/ui/button/button-variants.ts index 2885aa28e..fb59905e3 100644 --- a/src/components/ui/button/button-variants.ts +++ b/src/components/ui/button/button-variants.ts @@ -1,29 +1,32 @@ import { cva, type VariantProps } from "class-variance-authority" export const buttonVariants = cva( - "focus-visible:border-ring text-foreground focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", + "focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 group/button inline-flex shrink-0 items-center justify-center rounded-md border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:ring-3 disabled:pointer-events-none disabled:opacity-50 aria-invalid:ring-3 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", { variants: { variant: { - default: "bg-primary text-primary-foreground hover:bg-primary/90", - destructive: - "bg-destructive hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60 text-white", + default: "bg-primary text-primary-foreground hover:bg-primary/80", outline: - "bg-background hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 border shadow-xs", + "border-border bg-background hover:bg-muted hover:text-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 aria-expanded:bg-muted aria-expanded:text-foreground shadow-xs", secondary: - "bg-secondary text-secondary-foreground hover:bg-secondary/80", + "bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground", ghost: - "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50", + "hover:bg-muted hover:text-foreground dark:hover:bg-muted/50 aria-expanded:bg-muted aria-expanded:text-foreground", + destructive: + "bg-destructive/10 hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/20 text-destructive focus-visible:border-destructive/40 dark:hover:bg-destructive/30", link: "text-primary underline-offset-4 hover:underline", }, size: { - xs: "h-7 rounded-md gap-1 px-2.5 has-[>svg]:px-2", - default: "h-9 px-4 py-2 has-[>svg]:px-3", - sm: "h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5", - lg: "h-10 rounded-md px-6 has-[>svg]:px-4", - "icon-xs": "size-7", + default: + "h-9 gap-1.5 px-2.5 in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2", + xs: "h-6 gap-1 rounded-[min(var(--radius-md),8px)] px-2 text-xs in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3", + sm: "h-8 gap-1 rounded-[min(var(--radius-md),10px)] px-2.5 in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5", + lg: "h-10 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3", icon: "size-9", - "icon-sm": "size-8", + "icon-xs": + "size-6 rounded-[min(var(--radius-md),8px)] in-data-[slot=button-group]:rounded-md [&_svg:not([class*='size-'])]:size-3", + "icon-sm": + "size-8 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-md", "icon-lg": "size-10", }, }, diff --git a/src/components/ui/button/button.astro b/src/components/ui/button/button.astro index 16974235e..ada6f1731 100644 --- a/src/components/ui/button/button.astro +++ b/src/components/ui/button/button.astro @@ -1,37 +1,26 @@ --- -import type { HTMLAttributes } from "astro/types" +import type { HTMLTag, Polymorphic } from "astro/types" import { cn } from "@/lib/utils" + import { buttonVariants, type ButtonVariantProps } from "./button-variants" -type Props = ButtonVariantProps & - HTMLAttributes<"button"> & - HTMLAttributes<"a"> & - HTMLAttributes<"label"> & { - as?: "button" | "a" | "label" - text?: string - html?: string - } +type Props = Polymorphic<{ as: Tag }> & + ButtonVariantProps const { + as: Tag = "button", class: className, - variant, - size, - as, - href, - text, - html, + variant = "default", + size = "default", ...props } = Astro.props - -const Comp = as || (href ? "a" : "button") --- - - + diff --git a/src/components/ui/card/card-action.astro b/src/components/ui/card/card-action.astro new file mode 100644 index 000000000..9739e179a --- /dev/null +++ b/src/components/ui/card/card-action.astro @@ -0,0 +1,20 @@ +--- +import type { HTMLAttributes } from "astro/types" + +import { cn } from "@/lib/utils" + +interface Props extends HTMLAttributes<"div"> {} + +const { class: className, ...props } = Astro.props +--- + +

    + +
    diff --git a/src/components/ui/card/card-content.astro b/src/components/ui/card/card-content.astro new file mode 100644 index 000000000..c9fd3dbf0 --- /dev/null +++ b/src/components/ui/card/card-content.astro @@ -0,0 +1,17 @@ +--- +import type { HTMLAttributes } from "astro/types" + +import { cn } from "@/lib/utils" + +interface Props extends HTMLAttributes<"div"> {} + +const { class: className, ...props } = Astro.props +--- + +
    + +
    diff --git a/src/components/ui/card/card-description.astro b/src/components/ui/card/card-description.astro new file mode 100644 index 000000000..304f10300 --- /dev/null +++ b/src/components/ui/card/card-description.astro @@ -0,0 +1,17 @@ +--- +import type { HTMLAttributes } from "astro/types" + +import { cn } from "@/lib/utils" + +interface Props extends HTMLAttributes<"div"> {} + +const { class: className, ...props } = Astro.props +--- + +
    + +
    diff --git a/src/components/ui/card/card-footer.astro b/src/components/ui/card/card-footer.astro new file mode 100644 index 000000000..f86814f1c --- /dev/null +++ b/src/components/ui/card/card-footer.astro @@ -0,0 +1,20 @@ +--- +import type { HTMLAttributes } from "astro/types" + +import { cn } from "@/lib/utils" + +interface Props extends HTMLAttributes<"div"> {} + +const { class: className, ...props } = Astro.props +--- + +
    + +
    diff --git a/src/components/ui/card/card-header.astro b/src/components/ui/card/card-header.astro new file mode 100644 index 000000000..c52d5acc6 --- /dev/null +++ b/src/components/ui/card/card-header.astro @@ -0,0 +1,20 @@ +--- +import type { HTMLAttributes } from "astro/types" + +import { cn } from "@/lib/utils" + +interface Props extends HTMLAttributes<"div"> {} + +const { class: className, ...props } = Astro.props +--- + +
    + +
    diff --git a/src/components/ui/card/card-title.astro b/src/components/ui/card/card-title.astro new file mode 100644 index 000000000..7cf1f0f29 --- /dev/null +++ b/src/components/ui/card/card-title.astro @@ -0,0 +1,20 @@ +--- +import type { HTMLAttributes } from "astro/types" + +import { cn } from "@/lib/utils" + +interface Props extends HTMLAttributes<"div"> {} + +const { class: className, ...props } = Astro.props +--- + +
    + +
    diff --git a/src/components/ui/card/card.astro b/src/components/ui/card/card.astro new file mode 100644 index 000000000..cd76b103a --- /dev/null +++ b/src/components/ui/card/card.astro @@ -0,0 +1,23 @@ +--- +import type { HTMLAttributes } from "astro/types" + +import { cn } from "@/lib/utils" + +interface Props extends HTMLAttributes<"div"> { + size?: "default" | "sm" +} + +const { class: className, size = "default", ...props } = Astro.props +--- + +
    img:first-child]:pt-0 data-[size=sm]:gap-4 data-[size=sm]:py-4 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl", + className + )} + {...props} +> + +
    diff --git a/src/components/ui/card/index.ts b/src/components/ui/card/index.ts new file mode 100644 index 000000000..6a319e06f --- /dev/null +++ b/src/components/ui/card/index.ts @@ -0,0 +1,7 @@ +export { default as Card } from "./card.astro" +export { default as CardAction } from "./card-action.astro" +export { default as CardContent } from "./card-content.astro" +export { default as CardDescription } from "./card-description.astro" +export { default as CardFooter } from "./card-footer.astro" +export { default as CardHeader } from "./card-header.astro" +export { default as CardTitle } from "./card-title.astro" diff --git a/src/components/ui/checkbox/checkbox.astro b/src/components/ui/checkbox/checkbox.astro index ccf438965..029f42f5d 100644 --- a/src/components/ui/checkbox/checkbox.astro +++ b/src/components/ui/checkbox/checkbox.astro @@ -10,11 +10,23 @@ const { class: className, ...props } = Astro.props + + diff --git a/src/components/ui/command/command-dialog.astro b/src/components/ui/command/command-dialog.astro index 8789aa3bb..5432cb2f8 100644 --- a/src/components/ui/command/command-dialog.astro +++ b/src/components/ui/command/command-dialog.astro @@ -15,7 +15,6 @@ const { contentClass, ...props } = Astro.props - --- diff --git a/src/components/ui/command/command-empty.astro b/src/components/ui/command/command-empty.astro index b0e4c2124..33399336f 100644 --- a/src/components/ui/command/command-empty.astro +++ b/src/components/ui/command/command-empty.astro @@ -15,4 +15,3 @@ const { class: className, ...props } = Astro.props > No results found. - diff --git a/src/components/ui/command/command-group.astro b/src/components/ui/command/command-group.astro index d102870ed..872a779c7 100644 --- a/src/components/ui/command/command-group.astro +++ b/src/components/ui/command/command-group.astro @@ -8,22 +8,22 @@ interface Props extends HTMLAttributes<"div"> { } const { class: className, heading, ...props } = Astro.props - ---
    - {heading && ( -
    - {heading} -
    - )} + { + heading && ( +
    + {heading} +
    + ) + }
    - diff --git a/src/components/ui/command/command-input.astro b/src/components/ui/command/command-input.astro index ff6aebf07..e509632f8 100644 --- a/src/components/ui/command/command-input.astro +++ b/src/components/ui/command/command-input.astro @@ -26,4 +26,3 @@ const { class: className, wrapperClass, ...props } = Astro.props {...props} /> - diff --git a/src/components/ui/command/command-item.astro b/src/components/ui/command/command-item.astro index d2b573036..8cc8d6009 100644 --- a/src/components/ui/command/command-item.astro +++ b/src/components/ui/command/command-item.astro @@ -9,7 +9,6 @@ interface Props extends HTMLAttributes<"div"> { } const { class: className, disabled, value, ...props } = Astro.props - ---
    - diff --git a/src/components/ui/command/command-list.astro b/src/components/ui/command/command-list.astro index d26624fad..7866daf4d 100644 --- a/src/components/ui/command/command-list.astro +++ b/src/components/ui/command/command-list.astro @@ -6,7 +6,6 @@ import { cn } from "@/lib/utils" interface Props extends HTMLAttributes<"div"> {} const { class: className, ...props } = Astro.props - ---
    - diff --git a/src/components/ui/command/command-separator.astro b/src/components/ui/command/command-separator.astro index 673361662..923c94f7d 100644 --- a/src/components/ui/command/command-separator.astro +++ b/src/components/ui/command/command-separator.astro @@ -13,5 +13,5 @@ const { class: className, ...props } = Astro.props role="separator" class={cn("bg-border -mx-1 h-px", className)} {...props} -/> - +> + diff --git a/src/components/ui/command/command-shortcut.astro b/src/components/ui/command/command-shortcut.astro index 140f721ab..7d34db58f 100644 --- a/src/components/ui/command/command-shortcut.astro +++ b/src/components/ui/command/command-shortcut.astro @@ -6,17 +6,12 @@ import { cn } from "@/lib/utils" interface Props extends HTMLAttributes<"span"> {} const { class: className, ...props } = Astro.props - --- - diff --git a/src/components/ui/command/index.ts b/src/components/ui/command/index.ts index 98610ec5c..aac5c073e 100644 --- a/src/components/ui/command/index.ts +++ b/src/components/ui/command/index.ts @@ -7,4 +7,3 @@ export { default as CommandGroup } from "./command-group.astro" export { default as CommandItem } from "./command-item.astro" export { default as CommandSeparator } from "./command-separator.astro" export { default as CommandShortcut } from "./command-shortcut.astro" - diff --git a/src/components/ui/dialog/dialog-content.astro b/src/components/ui/dialog/dialog-content.astro index 74fad6189..3008a5fe6 100644 --- a/src/components/ui/dialog/dialog-content.astro +++ b/src/components/ui/dialog/dialog-content.astro @@ -7,7 +7,6 @@ import { cn } from "@/lib/utils" interface Props extends HTMLAttributes<"div"> {} const { class: className, ...props } = Astro.props - --- {} const { class: className, ...props } = Astro.props - ---

    {} const { class: className, ...props } = Astro.props - ---

    {} const { class: className, ...props } = Astro.props - ---
    {} const { class: className, ...props } = Astro.props - ---

    {} const { ...props } = Astro.props - --- + diff --git a/src/components/ui/sheet/sheet.astro b/src/components/ui/sheet/sheet.astro index 94ab3c124..a6ce49676 100644 --- a/src/components/ui/sheet/sheet.astro +++ b/src/components/ui/sheet/sheet.astro @@ -6,7 +6,6 @@ import { cn } from "@/lib/utils" interface Props extends HTMLAttributes<"div"> {} const { class: className, ...props } = Astro.props - ---
    {} const { class: className, ...props } = Astro.props - ---
  • {} const { class: className, ...props } = Astro.props - ---
      {} const { class: className, ...props } = Astro.props - ---
        diff --git a/src/components/ui/skeleton/skeleton.astro b/src/components/ui/skeleton/skeleton.astro index e1007802d..92515038a 100644 --- a/src/components/ui/skeleton/skeleton.astro +++ b/src/components/ui/skeleton/skeleton.astro @@ -5,7 +5,11 @@ import { cn } from "@/lib/utils" interface Props extends HTMLAttributes<"div"> {} -const { class: className } = Astro.props +const { class: className, ...props } = Astro.props --- -
        +
        diff --git a/src/components/ui/spinner/spinner.astro b/src/components/ui/spinner/spinner.astro index efcc283a8..4d2cf4ff5 100644 --- a/src/components/ui/spinner/spinner.astro +++ b/src/components/ui/spinner/spinner.astro @@ -10,9 +10,8 @@ const { class: className, ...props } = Astro.props --- diff --git a/src/components/ui/table/index.ts b/src/components/ui/table/index.ts index f4c88a012..3fa582324 100644 --- a/src/components/ui/table/index.ts +++ b/src/components/ui/table/index.ts @@ -6,4 +6,3 @@ export { default as TableRow } from "./table-row.astro" export { default as TableHead } from "./table-head.astro" export { default as TableCell } from "./table-cell.astro" export { default as TableCaption } from "./table-caption.astro" - diff --git a/src/components/ui/table/table-body.astro b/src/components/ui/table/table-body.astro index 1731b6d57..a1dee8e4b 100644 --- a/src/components/ui/table/table-body.astro +++ b/src/components/ui/table/table-body.astro @@ -15,4 +15,3 @@ const { class: className, ...props } = Astro.props > - diff --git a/src/components/ui/table/table-caption.astro b/src/components/ui/table/table-caption.astro index 2144ab12a..aafe948e3 100644 --- a/src/components/ui/table/table-caption.astro +++ b/src/components/ui/table/table-caption.astro @@ -15,4 +15,3 @@ const { class: className, ...props } = Astro.props > - diff --git a/src/components/ui/table/table-cell.astro b/src/components/ui/table/table-cell.astro index b5f44c61f..5cabc72a2 100644 --- a/src/components/ui/table/table-cell.astro +++ b/src/components/ui/table/table-cell.astro @@ -11,11 +11,10 @@ const { class: className, ...props } = Astro.props [role=checkbox]]:translate-y-[2px]", + "p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0", className )} {...props} > - diff --git a/src/components/ui/table/table-footer.astro b/src/components/ui/table/table-footer.astro index 90a6db483..7784acdab 100644 --- a/src/components/ui/table/table-footer.astro +++ b/src/components/ui/table/table-footer.astro @@ -18,4 +18,3 @@ const { class: className, ...props } = Astro.props > - diff --git a/src/components/ui/table/table-head.astro b/src/components/ui/table/table-head.astro index 354da9f68..8271ebb2a 100644 --- a/src/components/ui/table/table-head.astro +++ b/src/components/ui/table/table-head.astro @@ -11,7 +11,7 @@ const { class: className, ...props } = Astro.props [role=checkbox]]:translate-y-[2px]", + "text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0", className )} {...props} diff --git a/src/components/ui/table/table-row.astro b/src/components/ui/table/table-row.astro index 648f266e4..18142fd19 100644 --- a/src/components/ui/table/table-row.astro +++ b/src/components/ui/table/table-row.astro @@ -18,4 +18,3 @@ const { class: className, ...props } = Astro.props > - diff --git a/src/components/ui/tabs/index.ts b/src/components/ui/tabs/index.ts index 9a61f34d1..4332b6eaa 100644 --- a/src/components/ui/tabs/index.ts +++ b/src/components/ui/tabs/index.ts @@ -2,4 +2,3 @@ export { default as Tabs } from "./tabs.astro" export { default as TabsList } from "./tabs-list.astro" export { default as TabsTrigger } from "./tabs-trigger.astro" export { default as TabsContent } from "./tabs-content.astro" - diff --git a/src/components/ui/tabs/tabs-content.astro b/src/components/ui/tabs/tabs-content.astro index 25a8a4f89..26c05fdcb 100644 --- a/src/components/ui/tabs/tabs-content.astro +++ b/src/components/ui/tabs/tabs-content.astro @@ -21,4 +21,3 @@ const { class: className, value, ...props } = Astro.props >
  • - diff --git a/src/components/ui/tabs/tabs-list.astro b/src/components/ui/tabs/tabs-list.astro index 6d62d4a75..aadd10623 100644 --- a/src/components/ui/tabs/tabs-list.astro +++ b/src/components/ui/tabs/tabs-list.astro @@ -6,7 +6,6 @@ import { cn } from "@/lib/utils" interface Props extends HTMLAttributes<"div"> {} const { class: className, ...props } = Astro.props - ---
    , "class"> { } const { class: className, value, disabled = false, ...props } = Astro.props - --- - diff --git a/src/components/ui/tabs/tabs.astro b/src/components/ui/tabs/tabs.astro index b94159930..2f93c17b6 100644 --- a/src/components/ui/tabs/tabs.astro +++ b/src/components/ui/tabs/tabs.astro @@ -8,7 +8,6 @@ interface Props extends HTMLAttributes<"div"> { } const { class: className, defaultValue, ...props } = Astro.props - ---
    - diff --git a/src/components/ui/textarea/textarea.astro b/src/components/ui/textarea/textarea.astro index 86112c8da..4960238b4 100644 --- a/src/components/ui/textarea/textarea.astro +++ b/src/components/ui/textarea/textarea.astro @@ -11,7 +11,9 @@ const { class: className, ...props } = Astro.props + {...props} +> + diff --git a/src/components/ui/tile/tile-actions.astro b/src/components/ui/tile/tile-actions.astro index b46b1a19e..a3e462a14 100644 --- a/src/components/ui/tile/tile-actions.astro +++ b/src/components/ui/tile/tile-actions.astro @@ -6,7 +6,6 @@ import { cn } from "@/lib/utils" interface Props extends HTMLAttributes<"div"> {} const { class: className, ...props } = Astro.props - ---
    diff --git a/src/components/ui/tile/tile-description.astro b/src/components/ui/tile/tile-description.astro index 8344522a8..1133a959c 100644 --- a/src/components/ui/tile/tile-description.astro +++ b/src/components/ui/tile/tile-description.astro @@ -6,7 +6,6 @@ import { cn } from "@/lib/utils" interface Props extends HTMLAttributes<"p"> {} const { class: className, ...props } = Astro.props - ---

    diff --git a/src/components/ui/tile/tile-media.astro b/src/components/ui/tile/tile-media.astro index 45dd53991..30f13adea 100644 --- a/src/components/ui/tile/tile-media.astro +++ b/src/components/ui/tile/tile-media.astro @@ -26,7 +26,6 @@ const variants = cva( interface Props extends HTMLAttributes<"div">, VariantProps {} const { class: className, variant, ...props } = Astro.props - ---

    {} const { class: className, ...props } = Astro.props - ---
    {} const { class: className, ...props } = Astro.props - ---
    {} const { class: className, ...props } = Astro.props - ---

    diff --git a/src/content/docs/docs/components/alert.mdx b/src/content/docs/docs/components/alert.mdx index cacda37fe..20817cae5 100644 --- a/src/content/docs/docs/components/alert.mdx +++ b/src/content/docs/docs/components/alert.mdx @@ -49,7 +49,12 @@ npx shadcn@latest add @fulldev/alert ## Usage ```ts -import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert" +import { + Alert, + AlertAction, + AlertDescription, + AlertTitle, +} from "@/components/ui/alert" ``` ```astro diff --git a/src/content/docs/docs/components/badge.mdx b/src/content/docs/docs/components/badge.mdx index 0e9056ec1..757339882 100644 --- a/src/content/docs/docs/components/badge.mdx +++ b/src/content/docs/docs/components/badge.mdx @@ -16,7 +16,7 @@ import { Icon } from "@/components/ui/icon" Destructive Outline Ghost - Link + Link

    @@ -62,12 +62,22 @@ import { Badge } from "@/components/ui/badge" ### Link -You can use the `href` attribute to render the badge as a link element. +Use the polymorphic `as` prop to render the badge as a link element. ```astro --- import { Badge } from "@/components/ui/badge" --- -Badge +Badge +``` + +### Polymorphic + +`Badge` is strict polymorphic. Pass `as` to change the rendered element and +use attributes for that element. + +```astro +Action +Docs ``` diff --git a/src/content/docs/docs/components/button.mdx b/src/content/docs/docs/components/button.mdx index d10e0c05a..f420f85f8 100644 --- a/src/content/docs/docs/components/button.mdx +++ b/src/content/docs/docs/components/button.mdx @@ -41,14 +41,25 @@ import { buttonVariants } from "@/components/ui/button" ### Link -You can use the `href` attribute to render the button as a link element. +Use the polymorphic `as` prop with `href` to render the button as a link element. ```astro --- import { Button } from "@/components/ui/button" --- - + +``` + +### Polymorphic + +`Button` is polymorphic via `as`. Pass `as` to change the rendered element and +use the relevant attributes for that element. + +```astro + + + ``` ## Examples diff --git a/src/content/docs/docs/components/card.mdx b/src/content/docs/docs/components/card.mdx new file mode 100644 index 000000000..d30f94223 --- /dev/null +++ b/src/content/docs/docs/components/card.mdx @@ -0,0 +1,172 @@ +--- +title: Card +description: Displays a card with header, content, and footer. +--- + +```astro live +--- +import { Button } from "@/components/ui/button" +import { + Card, + CardAction, + CardContent, + CardDescription, + CardFooter, + CardHeader, + CardTitle, +} from "@/components/ui/card" +--- + + + + Create project + Deploy your new project in one click. + + + + + +

    Card content goes here.

    +
    + + + +
    +``` + +## Installation + +### Command + +```bash +npx shadcn@latest add card +``` + +### Manual + +1. Copy and paste the card component files into your project. +2. Update the import paths to match your project setup. + +## Usage + +```ts +import { + Card, + CardAction, + CardContent, + CardDescription, + CardFooter, + CardHeader, + CardTitle, +} from "@/components/ui/card" +``` + +```astro + + + Card Title + Card Description + Card Action + + +

    Card Content

    +
    + +

    Card Footer

    +
    +
    +``` + +## Examples + +### Image + +Add an image before the card header to create a card with an image. + +```astro live +--- +import image from "@/assets/image-placeholder.webp" + +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from "@/components/ui/card" +import { Image } from "@/components/ui/image" +--- + + + Card image + + Image Card + Card with media in the top slot. + + +

    The first child image automatically gets top rounding behavior.

    +
    +
    +``` + +## API Reference + +### Card + +The `Card` component is the root container for card content. + +| Prop | Type | Default | +| ------- | -------- | ------- | +| `class` | `string` | - | + +### CardHeader + +The `CardHeader` component is used for title, description, and optional action. + +| Prop | Type | Default | +| ------- | -------- | ------- | +| `class` | `string` | - | + +### CardTitle + +The `CardTitle` component is used for the card title. + +| Prop | Type | Default | +| ------- | -------- | ------- | +| `class` | `string` | - | + +### CardDescription + +The `CardDescription` component is used for helper text under the title. + +| Prop | Type | Default | +| ------- | -------- | ------- | +| `class` | `string` | - | + +### CardAction + +The `CardAction` component places content in the top-right of the header. + +| Prop | Type | Default | +| ------- | -------- | ------- | +| `class` | `string` | - | + +### CardContent + +The `CardContent` component is used for the main card body. + +| Prop | Type | Default | +| ------- | -------- | ------- | +| `class` | `string` | - | + +### CardFooter + +The `CardFooter` component is used for actions and secondary content at the bottom. + +| Prop | Type | Default | +| ------- | -------- | ------- | +| `class` | `string` | - | diff --git a/src/content/docs/docs/components/field.mdx b/src/content/docs/docs/components/field.mdx index 2949a05e4..b4a7294fa 100644 --- a/src/content/docs/docs/components/field.mdx +++ b/src/content/docs/docs/components/field.mdx @@ -53,6 +53,7 @@ import { Field, FieldContent, FieldDescription, + FieldError, FieldGroup, FieldLabel, FieldLegend, @@ -97,7 +98,12 @@ The `Field` family is designed for composing accessible forms. A typical field i ```astro live --- -import { Field, FieldDescription, FieldLabel } from "@/components/ui/field" +import { + Field, + FieldDescription, + FieldError, + FieldLabel, +} from "@/components/ui/field" import { Input } from "@/components/ui/input" --- @@ -335,7 +341,10 @@ import { Input } from "@/components/ui/input" Email - Enter a valid email address. + Enter a valid email address. + This email will be used for account notifications.
    ``` diff --git a/src/lib/a11y.test.ts b/src/lib/a11y.test.ts index bb81b2feb..51102669e 100644 --- a/src/lib/a11y.test.ts +++ b/src/lib/a11y.test.ts @@ -1,5 +1,5 @@ -import { axe } from "vitest-axe" import { describe, expect, it } from "vitest" +import { axe } from "vitest-axe" describe("a11y smoke checks", () => { it("has no violations for a basic interactive snippet", async () => { From d0f6f37bddf9ba02db2c78c1411bd3f7bf9fb601 Mon Sep 17 00:00:00 2001 From: Sil Date: Sat, 28 Feb 2026 13:49:48 +0100 Subject: [PATCH 07/17] tabs now using data-slot --- package.json | 12 +++ pnpm-lock.yaml | 118 ++++++++++++++++++++++ src/components/ui/tabs/tabs-content.astro | 2 +- src/components/ui/tabs/tabs-list.astro | 28 +++-- src/components/ui/tabs/tabs-trigger.astro | 5 +- src/components/ui/tabs/tabs.astro | 94 ++++------------- 6 files changed, 175 insertions(+), 84 deletions(-) diff --git a/package.json b/package.json index 322a2f03b..fd8cdec8e 100644 --- a/package.json +++ b/package.json @@ -51,6 +51,18 @@ "@astrojs/sitemap": "^3.6.0", "@astrojs/starlight": "^0.36.1", "@astrojs/starlight-tailwind": "^4.0.1", + "@data-slot/accordion": "^0.2.103", + "@data-slot/collapsible": "^0.2.103", + "@data-slot/combobox": "^0.2.103", + "@data-slot/core": "^0.2.103", + "@data-slot/dialog": "^0.2.103", + "@data-slot/dropdown-menu": "^0.2.103", + "@data-slot/navigation-menu": "^0.2.103", + "@data-slot/popover": "^0.2.103", + "@data-slot/select": "^0.2.103", + "@data-slot/slider": "^0.2.103", + "@data-slot/tabs": "^0.2.103", + "@data-slot/tooltip": "^0.2.103", "@fontsource/inter": "^5.2.8", "@tailwindcss/vite": "^4.1.14", "astro": "^5.14.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f082b3a30..e7fc06cee 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -23,6 +23,42 @@ importers: '@astrojs/starlight-tailwind': specifier: ^4.0.1 version: 4.0.1(@astrojs/starlight@0.36.1(astro@5.14.5(@netlify/blobs@10.1.0)(@types/node@24.8.1)(jiti@2.6.1)(lightningcss@1.30.1)(rollup@4.46.2)(sass-embedded@1.93.2)(sass@1.93.2)(typescript@5.9.3)(yaml@2.8.1)))(tailwindcss@4.1.14) + '@data-slot/accordion': + specifier: ^0.2.103 + version: 0.2.103 + '@data-slot/collapsible': + specifier: ^0.2.103 + version: 0.2.103 + '@data-slot/combobox': + specifier: ^0.2.103 + version: 0.2.103 + '@data-slot/core': + specifier: ^0.2.103 + version: 0.2.103 + '@data-slot/dialog': + specifier: ^0.2.103 + version: 0.2.103 + '@data-slot/dropdown-menu': + specifier: ^0.2.103 + version: 0.2.103 + '@data-slot/navigation-menu': + specifier: ^0.2.103 + version: 0.2.103 + '@data-slot/popover': + specifier: ^0.2.103 + version: 0.2.103 + '@data-slot/select': + specifier: ^0.2.103 + version: 0.2.103 + '@data-slot/slider': + specifier: ^0.2.103 + version: 0.2.103 + '@data-slot/tabs': + specifier: ^0.2.103 + version: 0.2.103 + '@data-slot/tooltip': + specifier: ^0.2.103 + version: 0.2.103 '@fontsource/inter': specifier: ^5.2.8 version: 5.2.8 @@ -414,6 +450,42 @@ packages: '@dabh/diagnostics@2.0.7': resolution: {integrity: sha512-EnXa4T9/wuLw8iaEUFwIJMo0xNxyE3mzxLL14ixfVToJNQHG2Jwo8xMmafVJwAiAmIyHXsFDZpZR/TJC31857g==} + '@data-slot/accordion@0.2.103': + resolution: {integrity: sha512-/krXH1+w02eaQI1ehQaLhpsZZw2sNIol6l0JyKn4cqETVYSX7Q35Axv/Q3LVC1Bs87ssLAoO6+x/YhMD8OmYjA==} + + '@data-slot/collapsible@0.2.103': + resolution: {integrity: sha512-X/qTmBwb+S16WUWJYborLfdWXyicmtXTWn63nmXM7ZT/XjKHx01kfn3JHtM+2JewxQJvsVWc3rlopx19XvqXbg==} + + '@data-slot/combobox@0.2.103': + resolution: {integrity: sha512-GrEILqtPTWcUSN/xkPrj9iJn6YqfRmbywXTyhvNsvDW4+Y6pTIVi1syyYQz29W12leMzWR7+S+65Oj9bmHWTFw==} + + '@data-slot/core@0.2.103': + resolution: {integrity: sha512-suWGQlvknrCpt4mQVDBQD4rF8OujTok/u6leFK9x3ysvdLalFVFqlh+j1ZDMgvXfSbd5/WJn8TB+zKpfj546DA==} + + '@data-slot/dialog@0.2.103': + resolution: {integrity: sha512-D9Y7LA/twTsGGY7t66sGURNcbWmoemcqE6E55ZcQ0vdsm47kC5rtLxSChvka/W3I1m3zJ8RPWcL/vKG2/YYcHA==} + + '@data-slot/dropdown-menu@0.2.103': + resolution: {integrity: sha512-xJl9tcma+UmcKwK5Xf4qwlFGmERJuGebwYv7S03l3KaX4VH15aAUUeikK6SlnbPgY1z9q6B/bIJ9hXzZFGdCZw==} + + '@data-slot/navigation-menu@0.2.103': + resolution: {integrity: sha512-lqBpvDUteNB4F5F7MxUpxpyYrh55G0JtiFyN8SC7g99FHwipw7bqbbsxPxPuhw6CS730C9ufmy961gAAXixe1w==} + + '@data-slot/popover@0.2.103': + resolution: {integrity: sha512-qClAQzVDRpCP9S0rj+AIuRAxCT4ufKSqLdR1az8dKrpE7TaqoFeENHJgxbMzJyr+cWcqflV5Z6sLIvbmOL073Q==} + + '@data-slot/select@0.2.103': + resolution: {integrity: sha512-OFv8O79z7xbAFHEpaXbPOWXRtav7y11+sB+UgWmvKPRrTUqtChQzSPCLJxjGF25ulM/kXPZZr0xLrULj1dRi/g==} + + '@data-slot/slider@0.2.103': + resolution: {integrity: sha512-XPXUY18RxLdzwW8vFRMHhhhSaUcFJDQNR9gODDT6iADtBnCWfTZjfD2+5VTBAYN9qKU/0JwHCX+nL6vKAAs89A==} + + '@data-slot/tabs@0.2.103': + resolution: {integrity: sha512-q2eK3+OMheCNUsyeuw4e7kB0ejwXIe8CYBBXi9tO/joBZ4RJj11GdxatXDwPG2wOZfxntUZsj9Ujzzb9U4RxqA==} + + '@data-slot/tooltip@0.2.103': + resolution: {integrity: sha512-N2dZ2+46Td4l90QxYjkcVkH+NmirJY6eC8CGXPOpMCys3VSecdHfy/IQjLkJQ0F1dI1/Pa0XN0GF99VjVIAi0A==} + '@dependents/detective-less@5.0.1': resolution: {integrity: sha512-Y6+WUMsTFWE5jb20IFP4YGa5IrGY/+a/FbOSjDF/wz9gepU2hwCYSXRHP/vPwBvwcY3SVMASt4yXxbXNXigmZQ==} engines: {node: '>=18'} @@ -6219,6 +6291,52 @@ snapshots: transitivePeerDependencies: - supports-color + '@data-slot/accordion@0.2.103': + dependencies: + '@data-slot/core': 0.2.103 + + '@data-slot/collapsible@0.2.103': + dependencies: + '@data-slot/core': 0.2.103 + + '@data-slot/combobox@0.2.103': + dependencies: + '@data-slot/core': 0.2.103 + + '@data-slot/core@0.2.103': {} + + '@data-slot/dialog@0.2.103': + dependencies: + '@data-slot/core': 0.2.103 + + '@data-slot/dropdown-menu@0.2.103': + dependencies: + '@data-slot/core': 0.2.103 + + '@data-slot/navigation-menu@0.2.103': + dependencies: + '@data-slot/core': 0.2.103 + + '@data-slot/popover@0.2.103': + dependencies: + '@data-slot/core': 0.2.103 + + '@data-slot/select@0.2.103': + dependencies: + '@data-slot/core': 0.2.103 + + '@data-slot/slider@0.2.103': + dependencies: + '@data-slot/core': 0.2.103 + + '@data-slot/tabs@0.2.103': + dependencies: + '@data-slot/core': 0.2.103 + + '@data-slot/tooltip@0.2.103': + dependencies: + '@data-slot/core': 0.2.103 + '@dependents/detective-less@5.0.1': dependencies: gonzales-pe: 4.3.0 diff --git a/src/components/ui/tabs/tabs-content.astro b/src/components/ui/tabs/tabs-content.astro index 26c05fdcb..151d00821 100644 --- a/src/components/ui/tabs/tabs-content.astro +++ b/src/components/ui/tabs/tabs-content.astro @@ -16,7 +16,7 @@ const { class: className, value, ...props } = Astro.props data-value={value} data-state="inactive" hidden - class={cn("flex-1 outline-none", className)} + class={cn("flex-1 text-sm outline-none", className)} {...props} > diff --git a/src/components/ui/tabs/tabs-list.astro b/src/components/ui/tabs/tabs-list.astro index aadd10623..0a5e16585 100644 --- a/src/components/ui/tabs/tabs-list.astro +++ b/src/components/ui/tabs/tabs-list.astro @@ -1,20 +1,36 @@ --- import type { HTMLAttributes } from "astro/types" +import { cva, type VariantProps } from "class-variance-authority" import { cn } from "@/lib/utils" -interface Props extends HTMLAttributes<"div"> {} +const tabsListVariants = cva( + "group/tabs-list text-muted-foreground inline-flex w-fit items-center justify-center rounded-lg p-[3px] group-data-horizontal/tabs:h-9 group-data-vertical/tabs:h-fit group-data-vertical/tabs:flex-col data-[variant=line]:rounded-none", + { + variants: { + variant: { + default: "bg-muted", + line: "gap-1 bg-transparent", + }, + }, + defaultVariants: { + variant: "default", + }, + } +) -const { class: className, ...props } = Astro.props +interface Props + extends HTMLAttributes<"div">, + VariantProps {} + +const { class: className, variant = "default", ...props } = Astro.props ---
    diff --git a/src/components/ui/tabs/tabs-trigger.astro b/src/components/ui/tabs/tabs-trigger.astro index ac14b5944..baeb81dae 100644 --- a/src/components/ui/tabs/tabs-trigger.astro +++ b/src/components/ui/tabs/tabs-trigger.astro @@ -21,7 +21,10 @@ const { class: className, value, disabled = false, ...props } = Astro.props aria-selected="false" disabled={disabled} class={cn( - "data-[state=active]:bg-background dark:data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 text-foreground dark:text-muted-foreground inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", + "focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring text-foreground/60 hover:text-foreground dark:text-muted-foreground dark:hover:text-foreground relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-all group-data-vertical/tabs:w-full group-data-vertical/tabs:justify-start focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 group-data-[variant=default]/tabs-list:data-[state=active]:shadow-sm group-data-[variant=line]/tabs-list:data-[state=active]:shadow-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", + "group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:border-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent", + "data-[state=active]:bg-background dark:data-[state=active]:text-foreground dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 data-[state=active]:text-foreground", + "after:bg-foreground after:absolute after:opacity-0 after:transition-opacity group-data-horizontal/tabs:after:inset-x-0 group-data-horizontal/tabs:after:bottom-[-5px] group-data-horizontal/tabs:after:h-0.5 group-data-vertical/tabs:after:inset-y-0 group-data-vertical/tabs:after:-right-1 group-data-vertical/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-[state=active]:after:opacity-100", className )} {...props} diff --git a/src/components/ui/tabs/tabs.astro b/src/components/ui/tabs/tabs.astro index 2f93c17b6..58f162a89 100644 --- a/src/components/ui/tabs/tabs.astro +++ b/src/components/ui/tabs/tabs.astro @@ -5,94 +5,36 @@ import { cn } from "@/lib/utils" interface Props extends HTMLAttributes<"div"> { defaultValue?: string + orientation?: "horizontal" | "vertical" + activationMode?: "auto" | "manual" } -const { class: className, defaultValue, ...props } = Astro.props +const { + class: className, + defaultValue, + orientation = "horizontal", + activationMode, + ...props +} = Astro.props ---
    From 5118c40c254ed9f1d41180b2981656b8b8d294d9 Mon Sep 17 00:00:00 2001 From: Sil Date: Sat, 28 Feb 2026 14:59:53 +0100 Subject: [PATCH 08/17] navigation,enu now uses data-slot --- src/components/blocks/header-1.astro | 25 ++-- src/components/blocks/header-2.astro | 25 ++-- src/components/blocks/header-3.astro | 25 ++-- src/components/starlight-title.astro | 18 +-- src/components/ui/navigation-menu/index.ts | 15 +-- .../navigation-menu-content.astro | 37 +++++- .../navigation-menu-indicator.astro | 4 + .../navigation-menu-item.astro | 9 +- .../navigation-menu-link.astro | 27 +--- .../navigation-menu-list.astro | 2 +- .../navigation-menu-sub-item.astro | 17 --- .../navigation-menu-sub-link.astro | 21 ---- .../navigation-menu/navigation-menu-sub.astro | 17 --- .../navigation-menu-trigger-style.ts | 7 ++ .../navigation-menu-trigger.astro | 23 ++-- .../navigation-menu-viewport.astro | 34 +++++ .../ui/navigation-menu/navigation-menu.astro | 33 ++++- .../docs/docs/components/navigation-menu.mdx | 118 ++++++++++++------ 18 files changed, 246 insertions(+), 211 deletions(-) create mode 100644 src/components/ui/navigation-menu/navigation-menu-indicator.astro delete mode 100644 src/components/ui/navigation-menu/navigation-menu-sub-item.astro delete mode 100644 src/components/ui/navigation-menu/navigation-menu-sub-link.astro delete mode 100644 src/components/ui/navigation-menu/navigation-menu-sub.astro create mode 100644 src/components/ui/navigation-menu/navigation-menu-trigger-style.ts create mode 100644 src/components/ui/navigation-menu/navigation-menu-viewport.astro diff --git a/src/components/blocks/header-1.astro b/src/components/blocks/header-1.astro index 2a9f51543..a9607da30 100644 --- a/src/components/blocks/header-1.astro +++ b/src/components/blocks/header-1.astro @@ -16,9 +16,6 @@ import { NavigationMenuItem, NavigationMenuLink, NavigationMenuList, - NavigationMenuSub, - NavigationMenuSubItem, - NavigationMenuSubLink, NavigationMenuTrigger, } from "@/components/ui/navigation-menu" import { Sheet, SheetContent, SheetTrigger } from "@/components/ui/sheet" @@ -67,32 +64,28 @@ const { logo, menus, links, socials } = Astro.props { - menus?.map((menu) => ( - + menus?.map((menu, index) => ( + {menu.links && menu.links.length > 0 ? ( <> - + {menu.text} - +
      {menu.links?.map((link) => ( - - +
    • + {link.text} - - + +
    • ))} - +
    ) : ( {menu.text} diff --git a/src/components/blocks/header-2.astro b/src/components/blocks/header-2.astro index 183db9906..3bcd880d7 100644 --- a/src/components/blocks/header-2.astro +++ b/src/components/blocks/header-2.astro @@ -16,9 +16,6 @@ import { NavigationMenuItem, NavigationMenuLink, NavigationMenuList, - NavigationMenuSub, - NavigationMenuSubItem, - NavigationMenuSubLink, NavigationMenuTrigger, } from "@/components/ui/navigation-menu" import { Sheet, SheetContent, SheetTrigger } from "@/components/ui/sheet" @@ -67,32 +64,28 @@ const { logo, menus, links, socials } = Astro.props { - menus?.map((menu) => ( - + menus?.map((menu, index) => ( + {menu.links && menu.links.length > 0 ? ( <> - + {menu.text} - +
      {menu.links?.map((link) => ( - - +
    • + {link.text} - - + +
    • ))} - +
    ) : ( {menu.text} diff --git a/src/components/blocks/header-3.astro b/src/components/blocks/header-3.astro index 9cd520f61..419fae5da 100644 --- a/src/components/blocks/header-3.astro +++ b/src/components/blocks/header-3.astro @@ -16,9 +16,6 @@ import { NavigationMenuItem, NavigationMenuLink, NavigationMenuList, - NavigationMenuSub, - NavigationMenuSubItem, - NavigationMenuSubLink, NavigationMenuTrigger, } from "@/components/ui/navigation-menu" import { Sheet, SheetContent, SheetTrigger } from "@/components/ui/sheet" @@ -102,32 +99,28 @@ const githubStarCount = await getGithubStarCount("fulldotdev/ui") { - menus?.map((menu) => ( - + menus?.map((menu, index) => ( + {menu.links && menu.links.length > 0 ? ( <> - + {menu.text} - +
      {menu.links?.map((link) => ( - - +
    • + {link.text} - - + +
    • ))} - +
    ) : ( {menu.text} diff --git a/src/components/starlight-title.astro b/src/components/starlight-title.astro index beae50d7a..2dfb80800 100644 --- a/src/components/starlight-title.astro +++ b/src/components/starlight-title.astro @@ -4,6 +4,7 @@ import { getEntry } from "astro:content" import { Logo, LogoImage, LogoText } from "@/components/ui/logo" import { NavigationMenu, + NavigationMenuItem, NavigationMenuLink, NavigationMenuList, } from "@/components/ui/navigation-menu" @@ -22,14 +23,15 @@ const logo = layout?.data?.headers?.[1]?.logo { - menus?.map((menu) => ( - - {menu.text} - + menus?.map((menu, index) => ( + + + {menu.text} + + )) } diff --git a/src/components/ui/navigation-menu/index.ts b/src/components/ui/navigation-menu/index.ts index fcc9bc234..0ce3b4337 100644 --- a/src/components/ui/navigation-menu/index.ts +++ b/src/components/ui/navigation-menu/index.ts @@ -1,18 +1,9 @@ -import { cn } from "@/lib/utils" - -export function navigationMenuTriggerStyle(className?: string) { - return cn( - "bg-background hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground h-9 w-max px-4 py-2 text-sm font-medium disabled:pointer-events-none disabled:opacity-50", - className - ) -} - export { default as NavigationMenu } from "./navigation-menu.astro" export { default as NavigationMenuContent } from "./navigation-menu-content.astro" +export { default as NavigationMenuIndicator } from "./navigation-menu-indicator.astro" export { default as NavigationMenuItem } from "./navigation-menu-item.astro" export { default as NavigationMenuLink } from "./navigation-menu-link.astro" export { default as NavigationMenuList } from "./navigation-menu-list.astro" -export { default as NavigationMenuSub } from "./navigation-menu-sub.astro" -export { default as NavigationMenuSubItem } from "./navigation-menu-sub-item.astro" -export { default as NavigationMenuSubLink } from "./navigation-menu-sub-link.astro" export { default as NavigationMenuTrigger } from "./navigation-menu-trigger.astro" +export { default as navigationMenuTriggerStyle } from "./navigation-menu-trigger-style" +export { default as NavigationMenuViewport } from "./navigation-menu-viewport.astro" diff --git a/src/components/ui/navigation-menu/navigation-menu-content.astro b/src/components/ui/navigation-menu/navigation-menu-content.astro index 2ea95a7c1..dfd7a7d39 100644 --- a/src/components/ui/navigation-menu/navigation-menu-content.astro +++ b/src/components/ui/navigation-menu/navigation-menu-content.astro @@ -3,20 +3,45 @@ import type { HTMLAttributes } from "astro/types" import { cn } from "@/lib/utils" -interface Props extends HTMLAttributes<"div"> {} +type Props = { + class?: string + align?: "start" | "center" | "end" + alignOffset?: number + side?: "top" | "bottom" + sideOffset?: number +} & HTMLAttributes<"div"> -const { class: className, ...props } = Astro.props +const { + class: className = "", + align = "start", + alignOffset = 0, + side = "bottom", + sideOffset = 4, + ...props +} = Astro.props + +// Custom motion tuning for @data-slot/navigation-menu. +// Intentionally differs from shadcn/bejamas to keep transitions smooth in this Astro implementation. --- diff --git a/src/components/ui/navigation-menu/navigation-menu-indicator.astro b/src/components/ui/navigation-menu/navigation-menu-indicator.astro new file mode 100644 index 000000000..e02f832ba --- /dev/null +++ b/src/components/ui/navigation-menu/navigation-menu-indicator.astro @@ -0,0 +1,4 @@ +--- +--- + + diff --git a/src/components/ui/navigation-menu/navigation-menu-item.astro b/src/components/ui/navigation-menu/navigation-menu-item.astro index 9db8d6267..e884f5127 100644 --- a/src/components/ui/navigation-menu/navigation-menu-item.astro +++ b/src/components/ui/navigation-menu/navigation-menu-item.astro @@ -3,14 +3,17 @@ import type { HTMLAttributes } from "astro/types" import { cn } from "@/lib/utils" -interface Props extends HTMLAttributes<"li"> {} +interface Props extends HTMLAttributes<"li"> { + value: string +} -const { class: className, ...props } = Astro.props +const { class: className, value, ...props } = Astro.props ---
  • diff --git a/src/components/ui/navigation-menu/navigation-menu-link.astro b/src/components/ui/navigation-menu/navigation-menu-link.astro index cd9a35a6a..caf11d198 100644 --- a/src/components/ui/navigation-menu/navigation-menu-link.astro +++ b/src/components/ui/navigation-menu/navigation-menu-link.astro @@ -1,42 +1,21 @@ --- import type { HTMLAttributes } from "astro/types" -import { cva, type VariantProps } from "class-variance-authority" import { cn } from "@/lib/utils" -const variants = cva( - "focus-visible:ring-ring/50 inline-flex w-full items-start justify-start rounded-md transition-all outline-none focus-visible:ring-[3px] focus-visible:outline-none", - { - variants: { - variant: { - default: - "hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground flex-col gap-1 p-2 text-sm [&_svg:not([class*='size-'])]:size-4", - trigger: - "bg-background hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground h-9 w-max px-4 py-2 text-sm font-medium disabled:pointer-events-none disabled:opacity-50", - }, - }, - defaultVariants: { - variant: "default", - }, - } -) - -interface Props extends HTMLAttributes<"a">, VariantProps { +interface Props extends HTMLAttributes<"a"> { active?: boolean } -const { class: className, variant, href, active, ...props } = Astro.props +const { class: className, active, ...props } = Astro.props --- diff --git a/src/components/ui/navigation-menu/navigation-menu-list.astro b/src/components/ui/navigation-menu/navigation-menu-list.astro index 83cbedc9e..0b90cc185 100644 --- a/src/components/ui/navigation-menu/navigation-menu-list.astro +++ b/src/components/ui/navigation-menu/navigation-menu-list.astro @@ -11,7 +11,7 @@ const { class: className, ...props } = Astro.props
      {} - -const { class: className, ...props } = Astro.props ---- - -
    • - -
    • diff --git a/src/components/ui/navigation-menu/navigation-menu-sub-link.astro b/src/components/ui/navigation-menu/navigation-menu-sub-link.astro deleted file mode 100644 index afef56e10..000000000 --- a/src/components/ui/navigation-menu/navigation-menu-sub-link.astro +++ /dev/null @@ -1,21 +0,0 @@ ---- -import type { HTMLAttributes } from "astro/types" - -import { cn } from "@/lib/utils" - -interface Props extends HTMLAttributes<"a"> {} - -const { class: className, href, ...props } = Astro.props ---- - -
      - - diff --git a/src/components/ui/navigation-menu/navigation-menu-sub.astro b/src/components/ui/navigation-menu/navigation-menu-sub.astro deleted file mode 100644 index 7dc1309c1..000000000 --- a/src/components/ui/navigation-menu/navigation-menu-sub.astro +++ /dev/null @@ -1,17 +0,0 @@ ---- -import type { HTMLAttributes } from "astro/types" - -import { cn } from "@/lib/utils" - -interface Props extends HTMLAttributes<"ul"> {} - -const { class: className, ...props } = Astro.props ---- - -
        - -
      diff --git a/src/components/ui/navigation-menu/navigation-menu-trigger-style.ts b/src/components/ui/navigation-menu/navigation-menu-trigger-style.ts new file mode 100644 index 000000000..1f9b7c31e --- /dev/null +++ b/src/components/ui/navigation-menu/navigation-menu-trigger-style.ts @@ -0,0 +1,7 @@ +import { cva } from "class-variance-authority" + +const navigationMenuTriggerStyle = cva( + "bg-background hover:bg-muted focus:bg-muted data-open:hover:bg-muted data-open:focus:bg-muted data-open:bg-muted/50 focus-visible:ring-ring/50 data-popup-open:bg-muted/50 data-popup-open:hover:bg-muted group/navigation-menu-trigger inline-flex h-9 w-max items-center justify-center rounded-md px-4 py-2 text-sm font-medium transition-all outline-none focus-visible:ring-3 focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50" +) + +export default navigationMenuTriggerStyle diff --git a/src/components/ui/navigation-menu/navigation-menu-trigger.astro b/src/components/ui/navigation-menu/navigation-menu-trigger.astro index bf6a23dfc..4c1624e06 100644 --- a/src/components/ui/navigation-menu/navigation-menu-trigger.astro +++ b/src/components/ui/navigation-menu/navigation-menu-trigger.astro @@ -1,28 +1,27 @@ --- import type { HTMLAttributes } from "astro/types" +import { type VariantProps } from "class-variance-authority" import ChevronDown from "lucide-static/icons/chevron-down.svg" import { cn } from "@/lib/utils" -type Props = HTMLAttributes<"button"> & HTMLAttributes<"a"> +import navigationMenuTriggerStyle from "./navigation-menu-trigger-style" -const { class: className, href, ...props } = Astro.props +type Props = HTMLAttributes<"button"> & + VariantProps -const Comp = href ? "a" : "button" +const { class: className, ...props } = Astro.props --- - + + diff --git a/src/components/ui/navigation-menu/navigation-menu-viewport.astro b/src/components/ui/navigation-menu/navigation-menu-viewport.astro new file mode 100644 index 000000000..f0a25ab89 --- /dev/null +++ b/src/components/ui/navigation-menu/navigation-menu-viewport.astro @@ -0,0 +1,34 @@ +--- +import type { HTMLAttributes } from "astro/types" + +import { cn } from "@/lib/utils" + +interface Props extends HTMLAttributes<"div"> {} + +const { class: className, ...props } = Astro.props +--- + + +
      +
      +
      +
      diff --git a/src/components/ui/navigation-menu/navigation-menu.astro b/src/components/ui/navigation-menu/navigation-menu.astro index 054bd9fd9..4713a3117 100644 --- a/src/components/ui/navigation-menu/navigation-menu.astro +++ b/src/components/ui/navigation-menu/navigation-menu.astro @@ -3,18 +3,45 @@ import type { HTMLAttributes } from "astro/types" import { cn } from "@/lib/utils" -interface Props extends HTMLAttributes<"nav"> {} +import NavigationMenuViewport from "./navigation-menu-viewport.astro" -const { class: className, ...props } = Astro.props +interface Props extends HTMLAttributes<"nav"> { + viewport?: boolean + delayOpen?: number + delayClose?: number + openOnFocus?: boolean +} + +const { + class: className = "", + viewport = true, + delayOpen = 0, + delayClose = 50, + openOnFocus, + ...props +} = Astro.props --- + + diff --git a/src/content/docs/docs/components/navigation-menu.mdx b/src/content/docs/docs/components/navigation-menu.mdx index 303179216..7da0c88f9 100644 --- a/src/content/docs/docs/components/navigation-menu.mdx +++ b/src/content/docs/docs/components/navigation-menu.mdx @@ -12,46 +12,96 @@ import { NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, + navigationMenuTriggerStyle, } from "@/components/ui/navigation-menu" + +const components = [ + { + title: "Alert Dialog", + href: "/docs/components/dialog", + description: "A modal dialog that interrupts the user with important content.", + }, + { + title: "Popover", + href: "/docs/components/popover", + description: "Displays rich content in a portal, triggered by a button.", + }, + { + title: "Select", + href: "/docs/components/select", + description: "Displays a list of options for the user to pick from.", + }, + { + title: "Tabs", + href: "/docs/components/tabs", + description: "A set of layered sections of content displayed one at a time.", + }, +] --- - - - Home + + + Getting started -
        +
          +
        • + + Introduction + + Re-usable components built with Tailwind CSS. + + +
        • - -
          Introduction
          -
          - Get started with our library. -
          + + Installation + + How to install dependencies and structure your app. +
        • - -
          Documentation
          -
          - Learn how to use components. -
          + + Typography + + Styles for headings, paragraphs, lists, and more. +
        - +
  • \n", "type": "registry:ui" }, { "path": "src/components/ui/alert/alert-description.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n---\n\n\n \n
    \n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n---\n\n\n \n
    \n", "type": "registry:ui" }, { "path": "src/components/ui/alert/alert-title.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n\n \n
    \n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n---\n\nsvg]/alert:col-start-2 [&_a]:underline [&_a]:underline-offset-3\",\n className\n )}\n {...props}\n>\n \n
    \n", "type": "registry:ui" }, { "path": "src/components/ui/alert/index.ts", - "content": "export { default as Alert } from \"./alert.astro\"\nexport { default as AlertTitle } from \"./alert-title.astro\"\nexport { default as AlertDescription } from \"./alert-description.astro\"\n", + "content": "export { default as Alert } from \"./alert.astro\"\nexport { default as AlertAction } from \"./alert-action.astro\"\nexport { default as AlertTitle } from \"./alert-title.astro\"\nexport { default as AlertDescription } from \"./alert-description.astro\"\n", "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/public/r/article-1.json b/public/r/article-1.json index 8c6530fe3..5514cb7ba 100644 --- a/public/r/article-1.json +++ b/public/r/article-1.json @@ -15,4 +15,4 @@ "type": "registry:block" } ] -} +} \ No newline at end of file diff --git a/public/r/article-2.json b/public/r/article-2.json index fb86b5857..96da102c8 100644 --- a/public/r/article-2.json +++ b/public/r/article-2.json @@ -15,4 +15,4 @@ "type": "registry:block" } ] -} +} \ No newline at end of file diff --git a/public/r/articles-1.json b/public/r/articles-1.json index 97a7eadb8..81b9ea6ec 100644 --- a/public/r/articles-1.json +++ b/public/r/articles-1.json @@ -18,4 +18,4 @@ "type": "registry:block" } ] -} +} \ No newline at end of file diff --git a/public/r/articles-2.json b/public/r/articles-2.json index a519fcd9f..2b943c179 100644 --- a/public/r/articles-2.json +++ b/public/r/articles-2.json @@ -18,4 +18,4 @@ "type": "registry:block" } ] -} +} \ No newline at end of file diff --git a/public/r/articles-3.json b/public/r/articles-3.json index 3b8719908..39b4d7250 100644 --- a/public/r/articles-3.json +++ b/public/r/articles-3.json @@ -18,4 +18,4 @@ "type": "registry:block" } ] -} +} \ No newline at end of file diff --git a/public/r/articles-4.json b/public/r/articles-4.json index fdc222a4d..128303ed2 100644 --- a/public/r/articles-4.json +++ b/public/r/articles-4.json @@ -18,4 +18,4 @@ "type": "registry:block" } ] -} +} \ No newline at end of file diff --git a/public/r/auto-form.json b/public/r/auto-form.json index 60ec19a5f..d39e67f07 100644 --- a/public/r/auto-form.json +++ b/public/r/auto-form.json @@ -14,7 +14,7 @@ "files": [ { "path": "src/components/ui/auto-form/auto-form.astro", - "content": "---\nimport type { ComponentProps, HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\nimport { Checkbox } from \"@/components/ui/checkbox\"\nimport {\n Field,\n FieldContent,\n FieldDescription,\n FieldLabel,\n FieldSet,\n} from \"@/components/ui/field\"\nimport { Input } from \"@/components/ui/input\"\nimport { NativeSelect, NativeSelectOption } from \"@/components/ui/native-select\"\nimport { RadioGroup, RadioGroupItem } from \"@/components/ui/radio-group\"\nimport { Textarea } from \"@/components/ui/textarea\"\n\ntype Field = {\n label?: string\n description?: string\n} & (\n | (ComponentProps & {\n type: \"textarea\"\n })\n | (ComponentProps & {\n type: \"checkbox\"\n })\n | (ComponentProps & {\n type: \"select\"\n options: string[]\n placeholder?: string\n })\n | (ComponentProps & {\n type: \"radio-group\"\n options: string[]\n })\n | (ComponentProps & {\n type: \"text\" | \"tel\" | \"email\" | \"number\"\n })\n)\n\ninterface Props extends HTMLAttributes<\"form\"> {\n inbox?: string\n fields?: Field[]\n submit?: string\n}\n\nconst { class: className, inbox, fields, submit, ...props } = Astro.props\n---\n\n\n {\n fields?.map(({ label, description, name = label, id = name, ...field }) => {\n switch (field.type) {\n case \"textarea\":\n return (\n \n {label}\n \n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"textarea\"> {}\n\nconst { class: className, ...props } = Astro.props\n---\n\n\n\n", "type": "registry:ui" }, { @@ -14,4 +14,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/public/r/theme-toggle.json b/public/r/theme-toggle.json index a19d37774..23822f1d0 100644 --- a/public/r/theme-toggle.json +++ b/public/r/theme-toggle.json @@ -2,7 +2,10 @@ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "theme-toggle", "type": "registry:ui", - "registryDependencies": ["@fulldev/button", "@fulldev/icon"], + "registryDependencies": [ + "@fulldev/button", + "@fulldev/icon" + ], "files": [ { "path": "src/components/ui/theme-toggle/theme-toggle.astro", @@ -20,4 +23,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/public/r/tile.json b/public/r/tile.json index 18356974f..ff52332cf 100644 --- a/public/r/tile.json +++ b/public/r/tile.json @@ -10,7 +10,7 @@ }, { "path": "src/components/ui/tile/tile-actions.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n
    \n \n
    \n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n---\n\n
    \n \n
    \n", "type": "registry:ui" }, { @@ -20,27 +20,27 @@ }, { "path": "src/components/ui/tile/tile-description.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"p\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n

    \n \n

    \n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"p\"> {}\n\nconst { class: className, ...props } = Astro.props\n---\n\n

    \n \n

    \n", "type": "registry:ui" }, { "path": "src/components/ui/tile/tile-media.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst variants = cva(\n [\n \"flex shrink-0 items-center justify-center gap-2 group-has-[[data-slot=tile-description]]/tile:translate-y-0.5 group-has-[[data-slot=tile-description]]/tile:self-start [&_svg]:pointer-events-none\",\n \"transition-opacity duration-100 [&:is(a:hover>&)]:opacity-75\",\n \"relative overflow-hidden rounded-md\",\n ],\n {\n variants: {\n variant: {\n default: \"rounded-md *:size-full *:object-cover\",\n icon: \"bg-muted size-8 rounded-sm border [&_svg:not([class*='size-'])]:size-4\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\ninterface Props extends HTMLAttributes<\"div\">, VariantProps {}\n\nconst { class: className, variant, ...props } = Astro.props\n\n---\n\n\n \n
    \n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst variants = cva(\n [\n \"flex shrink-0 items-center justify-center gap-2 group-has-[[data-slot=tile-description]]/tile:translate-y-0.5 group-has-[[data-slot=tile-description]]/tile:self-start [&_svg]:pointer-events-none\",\n \"transition-opacity duration-100 [&:is(a:hover>&)]:opacity-75\",\n \"relative overflow-hidden rounded-md\",\n ],\n {\n variants: {\n variant: {\n default: \"rounded-md *:size-full *:object-cover\",\n icon: \"bg-muted size-8 rounded-sm border [&_svg:not([class*='size-'])]:size-4\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\ninterface Props extends HTMLAttributes<\"div\">, VariantProps {}\n\nconst { class: className, variant, ...props } = Astro.props\n---\n\n\n \n

    \n", "type": "registry:ui" }, { "path": "src/components/ui/tile/tile-split.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n\n \n
    \n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n---\n\n\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/tile/tile-spread.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n\n \n\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"div\"> {}\n\nconst { class: className, ...props } = Astro.props\n---\n\n\n \n\n", "type": "registry:ui" }, { "path": "src/components/ui/tile/tile-title.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"h3\"> {}\n\nconst { class: className, ...props } = Astro.props\n\n---\n\n

    \n \n

    \n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface Props extends HTMLAttributes<\"h3\"> {}\n\nconst { class: className, ...props } = Astro.props\n---\n\n

    \n \n

    \n", "type": "registry:ui" }, { @@ -49,4 +49,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/public/r/video.json b/public/r/video.json index 1ce0ace29..489cc5de6 100644 --- a/public/r/video.json +++ b/public/r/video.json @@ -14,4 +14,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/registry.json b/registry.json index 9000cdbcd..26271b101 100644 --- a/registry.json +++ b/registry.json @@ -227,10 +227,6 @@ "path": "src/components/ui/field/field-description.astro", "type": "registry:ui" }, - { - "path": "src/components/ui/field/field-error.astro", - "type": "registry:ui" - }, { "path": "src/components/ui/field/field-group.astro", "type": "registry:ui" @@ -597,19 +593,19 @@ "type": "registry:ui" }, { - "path": "src/components/ui/navigation-menu/navigation-menu-sub.astro", + "path": "src/components/ui/navigation-menu/navigation-menu-indicator.astro", "type": "registry:ui" }, { - "path": "src/components/ui/navigation-menu/navigation-menu-sub-item.astro", + "path": "src/components/ui/navigation-menu/navigation-menu-trigger.astro", "type": "registry:ui" }, { - "path": "src/components/ui/navigation-menu/navigation-menu-sub-link.astro", + "path": "src/components/ui/navigation-menu/navigation-menu-trigger-style.ts", "type": "registry:ui" }, { - "path": "src/components/ui/navigation-menu/navigation-menu-trigger.astro", + "path": "src/components/ui/navigation-menu/navigation-menu-viewport.astro", "type": "registry:ui" }, { @@ -2458,6 +2454,17 @@ "@fulldev/services-7" ] }, + { + "name": "block", + "type": "registry:component", + "files": [ + { + "path": "src/components/block.astro", + "type": "registry:component" + } + ], + "registryDependencies": ["@fulldev/blocks"] + }, { "name": "layout", "type": "registry:component", diff --git a/src/components/blocks/article-2.astro b/src/components/blocks/article-2.astro index d7a1606b0..b3267bb2a 100644 --- a/src/components/blocks/article-2.astro +++ b/src/components/blocks/article-2.astro @@ -38,12 +38,12 @@ const { class: className, id, title, description, image, item } = Astro.props ---
    - + {title &&

    {title}

    } {description &&

    {description}

    }
    - + diff --git a/src/components/blocks/blocks-4.astro b/src/components/blocks/blocks-4.astro index 72ffd8afe..ad87616b0 100644 --- a/src/components/blocks/blocks-4.astro +++ b/src/components/blocks/blocks-4.astro @@ -25,13 +25,6 @@ const { class: className, id, items } = Astro.props ---
    - - - - - - -
    { (["left", "right"] as const).map((direction) => ( diff --git a/src/components/blocks/content-5.astro b/src/components/blocks/content-5.astro index 5344b32d4..cc0a78be0 100644 --- a/src/components/blocks/content-5.astro +++ b/src/components/blocks/content-5.astro @@ -45,16 +45,18 @@ const { class: className, id, list, links, image } = Astro.props - - { - list?.map((item) => ( - - - {item} - - )) - } - + { + list?.length && ( + + {list?.map((item) => ( + + + {item} + + ))} + + ) + } { links?.map(({ icon, text, ...link }, i) => ( diff --git a/src/components/blocks/content-6.astro b/src/components/blocks/content-6.astro index fa46cee3d..98cf6a062 100644 --- a/src/components/blocks/content-6.astro +++ b/src/components/blocks/content-6.astro @@ -45,16 +45,18 @@ const { class: className, id, list, links, image } = Astro.props - - { - list?.map((item) => ( - - - {item} - - )) - } - + { + list?.length && ( + + {list?.map((item) => ( + + + {item} + + ))} + + ) + } { links?.map(({ icon, text, ...link }, i) => ( diff --git a/src/components/blocks/cta-1.astro b/src/components/blocks/cta-1.astro index c70ce0f43..afcd4ec17 100644 --- a/src/components/blocks/cta-1.astro +++ b/src/components/blocks/cta-1.astro @@ -40,7 +40,7 @@ const { class: className, id, links, item } = Astro.props
    - + { item?.images?.map((image) => ( diff --git a/src/components/blocks/cta-8.astro b/src/components/blocks/cta-8.astro index bd4664ba7..4ceb754ac 100644 --- a/src/components/blocks/cta-8.astro +++ b/src/components/blocks/cta-8.astro @@ -53,23 +53,6 @@ const { class: className, id, links, item } = Astro.props "before:from-primary/20 relative items-center before:absolute before:top-full before:left-0 before:-z-10 before:h-[200%] before:w-full before:animate-pulse before:rounded-full before:bg-gradient-to-b before:to-transparent before:blur-3xl" )} > - - - { - item?.images?.map((image) => ( - - - - )) - } - - - - - {item?.description} - - - diff --git a/src/components/blocks/features-5.astro b/src/components/blocks/features-5.astro index ace8e15d9..6b611720c 100644 --- a/src/components/blocks/features-5.astro +++ b/src/components/blocks/features-5.astro @@ -42,6 +42,8 @@ interface Props { } const { class: className, id, links, items } = Astro.props +const slot = await Astro.slots.render("default") +const hasSlot = slot.length > 0 ---
    - - - - - - { - links?.map(({ icon, text, ...link }, i) => ( - - )) - } - - + { + (hasSlot || links?.length) && ( + + + + + + {links?.map(({ icon, text, ...link }, i) => ( + + ))} + + + ) + } { items?.map(({ title, description, icon, links }) => ( diff --git a/src/components/blocks/hero-14.astro b/src/components/blocks/hero-14.astro index 746f29258..a0c45a33b 100644 --- a/src/components/blocks/hero-14.astro +++ b/src/components/blocks/hero-14.astro @@ -66,7 +66,11 @@ const { class: className, id, link, links, image } = Astro.props } - - - + { + image && ( + + + + ) + }
    diff --git a/src/components/blocks/hero-2.astro b/src/components/blocks/hero-2.astro index 75ee72d98..7dc9609f0 100644 --- a/src/components/blocks/hero-2.astro +++ b/src/components/blocks/hero-2.astro @@ -46,7 +46,7 @@ const { class: className, id, item, links, image } = Astro.props
    - + { item?.images?.map((image) => ( diff --git a/src/components/starlight-icons.astro b/src/components/starlight-icons.astro index d198d0148..8f3e0c157 100644 --- a/src/components/starlight-icons.astro +++ b/src/components/starlight-icons.astro @@ -8,7 +8,11 @@ import { ThemeToggle } from "@/components/ui/theme-toggle" const layout = await getEntry("layouts", "index") -const socials = layout?.data?.headers?.[1]?.socials +const header = + layout?.data?.headers?.find( + (entry) => entry?.logo || entry?.menus || entry?.socials + ) ?? layout?.data?.headers?.[0] +const socials = header?.socials const parseEnvStarCount = (value: string | undefined) => { if (!value) return null diff --git a/src/components/starlight-title.astro b/src/components/starlight-title.astro index 2dfb80800..31b3b3a57 100644 --- a/src/components/starlight-title.astro +++ b/src/components/starlight-title.astro @@ -11,14 +11,18 @@ import { const layout = await getEntry("layouts", "index") -const menus = layout?.data?.headers?.[1]?.menus -const logo = layout?.data?.headers?.[1]?.logo +const header = + layout?.data?.headers?.find( + (entry) => entry?.logo || entry?.menus || entry?.socials + ) ?? layout?.data?.headers?.[0] +const menus = header?.menus +const logo = header?.logo ---
    - - - {logo?.text} + + + {logo?.text ?? "fulldev/ui"} diff --git a/src/components/ui/field/field-error.astro b/src/components/ui/field/field-error.astro deleted file mode 100644 index 187b511b9..000000000 --- a/src/components/ui/field/field-error.astro +++ /dev/null @@ -1,18 +0,0 @@ ---- -import type { HTMLAttributes } from "astro/types" - -import { cn } from "@/lib/utils" - -interface Props extends HTMLAttributes<"div"> {} - -const { class: className, ...props } = Astro.props ---- - - diff --git a/src/components/ui/field/index.ts b/src/components/ui/field/index.ts index 927d25c3c..fb778d524 100644 --- a/src/components/ui/field/index.ts +++ b/src/components/ui/field/index.ts @@ -1,7 +1,6 @@ export { default as Field } from "./field.astro" export { default as FieldContent } from "./field-content.astro" export { default as FieldDescription } from "./field-description.astro" -export { default as FieldError } from "./field-error.astro" export { default as FieldGroup } from "./field-group.astro" export { default as FieldLabel } from "./field-label.astro" export { default as FieldLegend } from "./field-legend.astro" diff --git a/src/content/docs/docs/components/_command.mdx b/src/content/docs/docs/components/_command.mdx index 9992dc3fe..0db8539a8 100644 --- a/src/content/docs/docs/components/_command.mdx +++ b/src/content/docs/docs/components/_command.mdx @@ -35,11 +35,8 @@ import { ## Installation -To install the command component, run the following command: - -```bash -npx shadcn@latest add @fulldev/command -``` +`Command` is currently available in-repo only and is not published as a standalone +`@fulldev/*` registry item yet. ## Usage diff --git a/src/content/docs/docs/components/_dialog.mdx b/src/content/docs/docs/components/_dialog.mdx index d1770c2ef..fad45a275 100644 --- a/src/content/docs/docs/components/_dialog.mdx +++ b/src/content/docs/docs/components/_dialog.mdx @@ -42,11 +42,8 @@ import { ## Installation -To install the dialog component, run the following command: - -```bash -npx shadcn@latest add @fulldev/dialog -``` +`Dialog` is currently available in-repo only and is not published as a standalone +`@fulldev/*` registry item yet. ## Usage diff --git a/src/content/docs/docs/components/field.mdx b/src/content/docs/docs/components/field.mdx index b4a7294fa..7b87c9cba 100644 --- a/src/content/docs/docs/components/field.mdx +++ b/src/content/docs/docs/components/field.mdx @@ -53,7 +53,6 @@ import { Field, FieldContent, FieldDescription, - FieldError, FieldGroup, FieldLabel, FieldLegend, @@ -101,7 +100,6 @@ The `Field` family is designed for composing accessible forms. A typical field i import { Field, FieldDescription, - FieldError, FieldLabel, } from "@/components/ui/field" import { Input } from "@/components/ui/input" @@ -341,7 +339,9 @@ import { Input } from "@/components/ui/input" Email - Enter a valid email address. + + Enter a valid email address. + This email will be used for account notifications. diff --git a/src/content/docs/docs/components/navigation-menu.mdx b/src/content/docs/docs/components/navigation-menu.mdx index 7da0c88f9..326c0aed8 100644 --- a/src/content/docs/docs/components/navigation-menu.mdx +++ b/src/content/docs/docs/components/navigation-menu.mdx @@ -17,23 +17,25 @@ import { const components = [ { - title: "Alert Dialog", - href: "/docs/components/dialog", - description: "A modal dialog that interrupts the user with important content.", + title: "Alert", + href: "/docs/components/alert/", + description: + "Displays important messages with title and description content.", }, { - title: "Popover", - href: "/docs/components/popover", - description: "Displays rich content in a portal, triggered by a button.", + title: "Sheet", + href: "/docs/components/sheet/", + description: "A side panel component built on top of dialog primitives.", }, { - title: "Select", - href: "/docs/components/select", - description: "Displays a list of options for the user to pick from.", + title: "Native Select", + href: "/docs/components/native-select/", + description: + "A styled native select element for choosing one option from a list.", }, { title: "Tabs", - href: "/docs/components/tabs", + href: "/docs/components/tabs/", description: "A set of layered sections of content displayed one at a time.", }, ] @@ -55,7 +57,7 @@ const components = [
  • Installation @@ -66,7 +68,7 @@ const components = [
  • Typography From da4f70ad98f28f1c649e1b68791428bfaad652f0 Mon Sep 17 00:00:00 2001 From: Sil Date: Tue, 3 Mar 2026 19:05:37 +0100 Subject: [PATCH 13/17] removed files that are now in the starter --- package.example.json | 41 ----------------------------------- src/content.config.example.ts | 21 ------------------ 2 files changed, 62 deletions(-) delete mode 100644 package.example.json delete mode 100644 src/content.config.example.ts diff --git a/package.example.json b/package.example.json deleted file mode 100644 index 395b329e0..000000000 --- a/package.example.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "fulldev-ui", - "version": "0.7.0", - "type": "module", - "scripts": { - "astro": "astro", - "dev": "astro dev", - "start": "astro dev", - "check": "astro check", - "preview": "astro preview", - "build": "astro build", - "build:prod": "astro check && astro build", - "build:test": "astro check && astro build && astro preview --host" - }, - "dependencies": { - "@astrojs/sitemap": "^3.6.0", - "@fontsource/inter": "^5.2.8", - "@tailwindcss/vite": "^4.1.14", - "astro": "^5.14.5", - "astro-favicons": "^3.1.5", - "astro-robots-txt": "^1.0.0", - "class-variance-authority": "^0.7.1", - "clsx": "^2.1.1", - "lucide-static": "^0.546.0", - "shadcn": "3.4.2", - "sharp": "^0.34.4", - "simple-icons": "^15.16.1", - "tailwind-merge": "^3.3.1", - "tailwindcss": "^4.1.14", - "tw-animate-css": "^1.4.0", - "typescript": "^5.9.3" - }, - "devDependencies": { - "@astrojs/check": "^0.9.4", - "@ianvs/prettier-plugin-sort-imports": "^4.7.0", - "@types/node": "^24.8.1", - "prettier": "3.6.2", - "prettier-plugin-astro": "0.14.1", - "prettier-plugin-tailwindcss": "^0.7.0" - } -} diff --git a/src/content.config.example.ts b/src/content.config.example.ts deleted file mode 100644 index c33d046b4..000000000 --- a/src/content.config.example.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { defineCollection } from "astro:content" -import { glob } from "astro/loaders" - -import { page } from "@/lib/schemas" - -export const collections = { - pages: defineCollection({ - loader: glob({ - pattern: "**/[^_]*.{md,mdx}", - base: "src/content/pages", - }), - schema: page, - }), - layouts: defineCollection({ - loader: glob({ - pattern: "**/[^_]*.{yaml,yml,json}", - base: "src/content/layouts", - }), - schema: page, - }), -} From a95388015d4affb9dd502c5d5e021506cb37d347 Mon Sep 17 00:00:00 2001 From: Sil Date: Tue, 3 Mar 2026 19:13:25 +0100 Subject: [PATCH 14/17] sync registry with updated block sources --- public/r/article-2.json | 2 +- public/r/content-5.json | 2 +- public/r/content-6.json | 2 +- public/r/cta-1.json | 2 +- public/r/cta-8.json | 2 +- public/r/features-5.json | 2 +- public/r/hero-2.json | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/public/r/article-2.json b/public/r/article-2.json index 96da102c8..e7866d821 100644 --- a/public/r/article-2.json +++ b/public/r/article-2.json @@ -11,7 +11,7 @@ "files": [ { "path": "src/components/blocks/article-2.astro", - "content": "---\nimport { Avatar, AvatarImage } from \"@/components/ui/avatar\"\nimport { Image } from \"@/components/ui/image\"\nimport {\n Item,\n ItemContent,\n ItemDescription,\n ItemMedia,\n ItemTitle,\n} from \"@/components/ui/item\"\nimport {\n Section,\n SectionContent,\n SectionMedia,\n SectionProse,\n} from \"@/components/ui/section\"\n\ninterface Props {\n class?: string\n id?: string\n title?: string\n description?: string\n item?: {\n image?: {\n src: string\n alt: string\n }\n title?: string\n description?: string\n }\n image?: {\n src: string\n alt: string\n }\n}\n\nconst { class: className, id, title, description, image, item } = Astro.props\n---\n\n
    \n \n \n {title &&

    {title}

    }\n {description &&

    {description}

    }\n
    \n \n \n \n \n \n \n \n {item?.title}\n {item?.description}\n \n \n
    \n \n \n \n \n \n \n
    \n", + "content": "---\nimport { Avatar, AvatarImage } from \"@/components/ui/avatar\"\nimport { Image } from \"@/components/ui/image\"\nimport {\n Item,\n ItemContent,\n ItemDescription,\n ItemMedia,\n ItemTitle,\n} from \"@/components/ui/item\"\nimport {\n Section,\n SectionContent,\n SectionMedia,\n SectionProse,\n} from \"@/components/ui/section\"\n\ninterface Props {\n class?: string\n id?: string\n title?: string\n description?: string\n item?: {\n image?: {\n src: string\n alt: string\n }\n title?: string\n description?: string\n }\n image?: {\n src: string\n alt: string\n }\n}\n\nconst { class: className, id, title, description, image, item } = Astro.props\n---\n\n
    \n \n \n {title &&

    {title}

    }\n {description &&

    {description}

    }\n
    \n \n \n \n \n \n \n \n {item?.title}\n {item?.description}\n \n \n
    \n \n \n \n \n \n \n
    \n", "type": "registry:block" } ] diff --git a/public/r/content-5.json b/public/r/content-5.json index 521a6b9bc..9fe8fc71f 100644 --- a/public/r/content-5.json +++ b/public/r/content-5.json @@ -12,7 +12,7 @@ "files": [ { "path": "src/components/blocks/content-5.astro", - "content": "---\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\nimport { Icon } from \"@/components/ui/icon\"\nimport { Image } from \"@/components/ui/image\"\nimport { List, ListItem } from \"@/components/ui/list\"\nimport {\n Section,\n SectionActions,\n SectionContent,\n SectionMedia,\n SectionProse,\n SectionSplit,\n} from \"@/components/ui/section\"\n\ninterface Props {\n class?: string\n id?: string\n list?: string[]\n links?: {\n icon?: string\n text?: string\n href?: string\n target?: string\n }[]\n image?: {\n src: string\n alt: string\n }\n}\n\nconst { class: className, id, list, links, image } = Astro.props\n---\n\n\n \n \n \n \n \n \n {\n list?.map((item) => (\n \n \n {item}\n \n ))\n }\n \n \n {\n links?.map(({ icon, text, ...link }, i) => (\n \n ))\n }\n \n \n \n \n \n \n
  • \n", + "content": "---\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\nimport { Icon } from \"@/components/ui/icon\"\nimport { Image } from \"@/components/ui/image\"\nimport { List, ListItem } from \"@/components/ui/list\"\nimport {\n Section,\n SectionActions,\n SectionContent,\n SectionMedia,\n SectionProse,\n SectionSplit,\n} from \"@/components/ui/section\"\n\ninterface Props {\n class?: string\n id?: string\n list?: string[]\n links?: {\n icon?: string\n text?: string\n href?: string\n target?: string\n }[]\n image?: {\n src: string\n alt: string\n }\n}\n\nconst { class: className, id, list, links, image } = Astro.props\n---\n\n\n \n \n \n \n \n {\n list?.length && (\n \n {list?.map((item) => (\n \n \n {item}\n \n ))}\n \n )\n }\n \n {\n links?.map(({ icon, text, ...link }, i) => (\n \n ))\n }\n \n \n \n \n \n \n
    \n", "type": "registry:block" } ] diff --git a/public/r/content-6.json b/public/r/content-6.json index 4ced2914f..b3872bb0a 100644 --- a/public/r/content-6.json +++ b/public/r/content-6.json @@ -12,7 +12,7 @@ "files": [ { "path": "src/components/blocks/content-6.astro", - "content": "---\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\nimport { Icon } from \"@/components/ui/icon\"\nimport { Image } from \"@/components/ui/image\"\nimport { List, ListItem } from \"@/components/ui/list\"\nimport {\n Section,\n SectionActions,\n SectionContent,\n SectionMedia,\n SectionProse,\n SectionSplit,\n} from \"@/components/ui/section\"\n\ninterface Props {\n class?: string\n id?: string\n list?: string[]\n links?: {\n icon?: string\n text?: string\n href?: string\n target?: string\n }[]\n image?: {\n src: string\n alt: string\n }\n}\n\nconst { class: className, id, list, links, image } = Astro.props\n---\n\n\n \n \n \n \n \n \n {\n list?.map((item) => (\n \n \n {item}\n \n ))\n }\n \n \n {\n links?.map(({ icon, text, ...link }, i) => (\n \n ))\n }\n \n \n \n \n \n \n
    \n", + "content": "---\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\nimport { Icon } from \"@/components/ui/icon\"\nimport { Image } from \"@/components/ui/image\"\nimport { List, ListItem } from \"@/components/ui/list\"\nimport {\n Section,\n SectionActions,\n SectionContent,\n SectionMedia,\n SectionProse,\n SectionSplit,\n} from \"@/components/ui/section\"\n\ninterface Props {\n class?: string\n id?: string\n list?: string[]\n links?: {\n icon?: string\n text?: string\n href?: string\n target?: string\n }[]\n image?: {\n src: string\n alt: string\n }\n}\n\nconst { class: className, id, list, links, image } = Astro.props\n---\n\n\n \n \n \n \n \n {\n list?.length && (\n \n {list?.map((item) => (\n \n \n {item}\n \n ))}\n \n )\n }\n \n {\n links?.map(({ icon, text, ...link }, i) => (\n \n ))\n }\n \n \n \n \n \n \n
    \n", "type": "registry:block" } ] diff --git a/public/r/cta-1.json b/public/r/cta-1.json index a5a91493a..fa472c54e 100644 --- a/public/r/cta-1.json +++ b/public/r/cta-1.json @@ -13,7 +13,7 @@ "files": [ { "path": "src/components/blocks/cta-1.astro", - "content": "---\nimport { Avatar, AvatarImage } from \"@/components/ui/avatar\"\nimport { Button } from \"@/components/ui/button\"\nimport { Icon } from \"@/components/ui/icon\"\nimport {\n Item,\n ItemContent,\n ItemDescription,\n ItemMedia,\n} from \"@/components/ui/item\"\nimport { Rating } from \"@/components/ui/rating\"\nimport {\n Section,\n SectionActions,\n SectionContent,\n SectionProse,\n} from \"@/components/ui/section\"\n\ninterface Props {\n class?: string\n id?: string\n links?: {\n icon?: string\n text?: string\n href?: string\n target?: string\n }[]\n item?: {\n images?: {\n src: string\n alt: string\n }[]\n rating?: number\n description?: string\n }\n}\n\nconst { class: className, id, links, item } = Astro.props\n---\n\n
    \n \n \n \n {\n item?.images?.map((image) => (\n \n \n \n ))\n }\n \n \n \n \n {item?.description}\n \n \n \n \n \n \n \n {\n links?.map(({ icon, text, ...link }, i) => (\n \n {icon && }\n {text}\n \n ))\n }\n \n \n
    \n", + "content": "---\nimport { Avatar, AvatarImage } from \"@/components/ui/avatar\"\nimport { Button } from \"@/components/ui/button\"\nimport { Icon } from \"@/components/ui/icon\"\nimport {\n Item,\n ItemContent,\n ItemDescription,\n ItemMedia,\n} from \"@/components/ui/item\"\nimport { Rating } from \"@/components/ui/rating\"\nimport {\n Section,\n SectionActions,\n SectionContent,\n SectionProse,\n} from \"@/components/ui/section\"\n\ninterface Props {\n class?: string\n id?: string\n links?: {\n icon?: string\n text?: string\n href?: string\n target?: string\n }[]\n item?: {\n images?: {\n src: string\n alt: string\n }[]\n rating?: number\n description?: string\n }\n}\n\nconst { class: className, id, links, item } = Astro.props\n---\n\n
    \n \n \n \n {\n item?.images?.map((image) => (\n \n \n \n ))\n }\n \n \n \n \n {item?.description}\n \n \n \n \n \n \n \n {\n links?.map(({ icon, text, ...link }, i) => (\n \n {icon && }\n {text}\n \n ))\n }\n \n \n
    \n", "type": "registry:block" } ] diff --git a/public/r/cta-8.json b/public/r/cta-8.json index 744383ee4..b712d492c 100644 --- a/public/r/cta-8.json +++ b/public/r/cta-8.json @@ -13,7 +13,7 @@ "files": [ { "path": "src/components/blocks/cta-8.astro", - "content": "---\nimport { cn } from \"@/lib/utils\"\nimport { Avatar, AvatarImage } from \"@/components/ui/avatar\"\nimport { Button } from \"@/components/ui/button\"\nimport { Icon } from \"@/components/ui/icon\"\nimport {\n Item,\n ItemContent,\n ItemDescription,\n ItemMedia,\n} from \"@/components/ui/item\"\nimport { Rating } from \"@/components/ui/rating\"\nimport {\n Section,\n SectionActions,\n SectionContent,\n SectionProse,\n} from \"@/components/ui/section\"\n\ninterface Props {\n class?: string\n id?: string\n links?: {\n icon?: string\n text?: string\n href?: string\n target?: string\n }[]\n item?: {\n images?: {\n src: string\n alt: string\n }[]\n rating?: number\n description?: string\n }\n}\n\nconst { class: className, id, links, item } = Astro.props\n---\n\n\n \n \n \n {\n item?.images?.map((image) => (\n \n \n \n ))\n }\n \n \n \n \n {item?.description}\n \n \n \n \n \n \n \n {\n links?.map(({ icon, text, ...link }, i) => (\n \n ))\n }\n \n \n\n", + "content": "---\nimport { cn } from \"@/lib/utils\"\nimport { Avatar, AvatarImage } from \"@/components/ui/avatar\"\nimport { Button } from \"@/components/ui/button\"\nimport { Icon } from \"@/components/ui/icon\"\nimport {\n Item,\n ItemContent,\n ItemDescription,\n ItemMedia,\n} from \"@/components/ui/item\"\nimport { Rating } from \"@/components/ui/rating\"\nimport {\n Section,\n SectionActions,\n SectionContent,\n SectionProse,\n} from \"@/components/ui/section\"\n\ninterface Props {\n class?: string\n id?: string\n links?: {\n icon?: string\n text?: string\n href?: string\n target?: string\n }[]\n item?: {\n images?: {\n src: string\n alt: string\n }[]\n rating?: number\n description?: string\n }\n}\n\nconst { class: className, id, links, item } = Astro.props\n---\n\n\n \n \n \n \n \n {\n links?.map(({ icon, text, ...link }, i) => (\n \n ))\n }\n \n \n\n", "type": "registry:block" } ] diff --git a/public/r/features-5.json b/public/r/features-5.json index 5841b5f75..8fce731b2 100644 --- a/public/r/features-5.json +++ b/public/r/features-5.json @@ -11,7 +11,7 @@ "files": [ { "path": "src/components/blocks/features-5.astro", - "content": "---\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\nimport { Icon } from \"@/components/ui/icon\"\nimport {\n Section,\n SectionActions,\n SectionContent,\n SectionGrid,\n SectionProse,\n} from \"@/components/ui/section\"\nimport {\n Tile,\n TileActions,\n TileContent,\n TileDescription,\n TileMedia,\n TileTitle,\n} from \"@/components/ui/tile\"\n\ninterface Props {\n class?: string\n id?: string\n links?: {\n icon?: string\n text?: string\n href?: string\n target?: string\n }[]\n items?: {\n title?: string\n description?: string\n icon?: string\n href?: string\n links?: {\n icon?: string\n text?: string\n href?: string\n target?: string\n }[]\n }[]\n}\n\nconst { class: className, id, links, items } = Astro.props\n---\n\n\n \n \n \n \n \n {\n links?.map(({ icon, text, ...link }, i) => (\n \n ))\n }\n \n \n \n {\n items?.map(({ title, description, icon, links }) => (\n \n \n \n \n \n {title}\n \n {description}\n \n \n \n {links?.map(({ icon, text, href, target }) => (\n \n {icon && }\n {text}\n \n ))}\n \n \n ))\n }\n \n\n", + "content": "---\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\nimport { Icon } from \"@/components/ui/icon\"\nimport {\n Section,\n SectionActions,\n SectionContent,\n SectionGrid,\n SectionProse,\n} from \"@/components/ui/section\"\nimport {\n Tile,\n TileActions,\n TileContent,\n TileDescription,\n TileMedia,\n TileTitle,\n} from \"@/components/ui/tile\"\n\ninterface Props {\n class?: string\n id?: string\n links?: {\n icon?: string\n text?: string\n href?: string\n target?: string\n }[]\n items?: {\n title?: string\n description?: string\n icon?: string\n href?: string\n links?: {\n icon?: string\n text?: string\n href?: string\n target?: string\n }[]\n }[]\n}\n\nconst { class: className, id, links, items } = Astro.props\nconst slot = await Astro.slots.render(\"default\")\nconst hasSlot = slot.length > 0\n---\n\n\n {\n (hasSlot || links?.length) && (\n \n \n \n \n \n {links?.map(({ icon, text, ...link }, i) => (\n \n ))}\n \n \n )\n }\n \n {\n items?.map(({ title, description, icon, links }) => (\n \n \n \n \n \n {title}\n \n {description}\n \n \n \n {links?.map(({ icon, text, href, target }) => (\n \n {icon && }\n {text}\n \n ))}\n \n \n ))\n }\n \n\n", "type": "registry:block" } ] diff --git a/public/r/hero-2.json b/public/r/hero-2.json index 3456544bb..d957953bf 100644 --- a/public/r/hero-2.json +++ b/public/r/hero-2.json @@ -14,7 +14,7 @@ "files": [ { "path": "src/components/blocks/hero-2.astro", - "content": "---\nimport { Avatar, AvatarImage } from \"@/components/ui/avatar\"\nimport { Button } from \"@/components/ui/button\"\nimport { Icon } from \"@/components/ui/icon\"\nimport { Image } from \"@/components/ui/image\"\nimport {\n Item,\n ItemContent,\n ItemDescription,\n ItemMedia,\n} from \"@/components/ui/item\"\nimport { Rating } from \"@/components/ui/rating\"\nimport {\n Section,\n SectionActions,\n SectionContent,\n SectionMedia,\n SectionProse,\n} from \"@/components/ui/section\"\n\ninterface Props {\n class?: string\n id?: string\n item?: {\n images?: {\n src: string\n alt: string\n }[]\n rating?: number\n description?: string\n }\n links?: {\n text?: string\n href?: string\n icon?: string\n target?: string\n }[]\n image?: {\n src: string\n alt: string\n }\n}\n\nconst { class: className, id, item, links, image } = Astro.props\n---\n\n
    \n \n \n \n {\n item?.images?.map((image) => (\n \n \n \n ))\n }\n \n \n \n \n {item?.description}\n \n \n \n \n \n \n \n {\n links?.map(({ icon, text, ...link }, i) => (\n \n {icon && }\n {text}\n \n ))\n }\n \n \n \n \n \n
    \n", + "content": "---\nimport { Avatar, AvatarImage } from \"@/components/ui/avatar\"\nimport { Button } from \"@/components/ui/button\"\nimport { Icon } from \"@/components/ui/icon\"\nimport { Image } from \"@/components/ui/image\"\nimport {\n Item,\n ItemContent,\n ItemDescription,\n ItemMedia,\n} from \"@/components/ui/item\"\nimport { Rating } from \"@/components/ui/rating\"\nimport {\n Section,\n SectionActions,\n SectionContent,\n SectionMedia,\n SectionProse,\n} from \"@/components/ui/section\"\n\ninterface Props {\n class?: string\n id?: string\n item?: {\n images?: {\n src: string\n alt: string\n }[]\n rating?: number\n description?: string\n }\n links?: {\n text?: string\n href?: string\n icon?: string\n target?: string\n }[]\n image?: {\n src: string\n alt: string\n }\n}\n\nconst { class: className, id, item, links, image } = Astro.props\n---\n\n
    \n \n \n \n {\n item?.images?.map((image) => (\n \n \n \n ))\n }\n \n \n \n \n {item?.description}\n \n \n \n \n \n \n \n {\n links?.map(({ icon, text, ...link }, i) => (\n \n {icon && }\n {text}\n \n ))\n }\n \n \n \n \n \n
    \n", "type": "registry:block" } ] From e16f44dd898cae558cd8c3b305eab2e32178f9d7 Mon Sep 17 00:00:00 2001 From: Sil Date: Tue, 3 Mar 2026 19:14:24 +0100 Subject: [PATCH 15/17] Refactor CTA-8 component by removing unused imports and optimizing structure for clarity. --- public/r/cta-8.json | 2 +- src/components/blocks/blocks-4.astro | 7 +------ src/components/blocks/cta-8.astro | 8 -------- 3 files changed, 2 insertions(+), 15 deletions(-) diff --git a/public/r/cta-8.json b/public/r/cta-8.json index b712d492c..a54bd255a 100644 --- a/public/r/cta-8.json +++ b/public/r/cta-8.json @@ -13,7 +13,7 @@ "files": [ { "path": "src/components/blocks/cta-8.astro", - "content": "---\nimport { cn } from \"@/lib/utils\"\nimport { Avatar, AvatarImage } from \"@/components/ui/avatar\"\nimport { Button } from \"@/components/ui/button\"\nimport { Icon } from \"@/components/ui/icon\"\nimport {\n Item,\n ItemContent,\n ItemDescription,\n ItemMedia,\n} from \"@/components/ui/item\"\nimport { Rating } from \"@/components/ui/rating\"\nimport {\n Section,\n SectionActions,\n SectionContent,\n SectionProse,\n} from \"@/components/ui/section\"\n\ninterface Props {\n class?: string\n id?: string\n links?: {\n icon?: string\n text?: string\n href?: string\n target?: string\n }[]\n item?: {\n images?: {\n src: string\n alt: string\n }[]\n rating?: number\n description?: string\n }\n}\n\nconst { class: className, id, links, item } = Astro.props\n---\n\n\n \n \n \n \n \n {\n links?.map(({ icon, text, ...link }, i) => (\n \n ))\n }\n \n \n\n", + "content": "---\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\nimport { Icon } from \"@/components/ui/icon\"\nimport {\n Section,\n SectionActions,\n SectionContent,\n SectionProse,\n} from \"@/components/ui/section\"\n\ninterface Props {\n class?: string\n id?: string\n links?: {\n icon?: string\n text?: string\n href?: string\n target?: string\n }[]\n item?: {\n images?: {\n src: string\n alt: string\n }[]\n rating?: number\n description?: string\n }\n}\n\nconst { class: className, id, links, item } = Astro.props\n---\n\n\n \n \n \n \n \n {\n links?.map(({ icon, text, ...link }, i) => (\n \n ))\n }\n \n \n\n", "type": "registry:block" } ] diff --git a/src/components/blocks/blocks-4.astro b/src/components/blocks/blocks-4.astro index ad87616b0..140b5ffc3 100644 --- a/src/components/blocks/blocks-4.astro +++ b/src/components/blocks/blocks-4.astro @@ -5,12 +5,7 @@ import { cn } from "@/lib/utils" import { Button } from "@/components/ui/button" import { Icon } from "@/components/ui/icon" import { Marquee, MarqueeContent } from "@/components/ui/marquee" -import { - Section, - SectionContent, - SectionProse, - SectionSpread, -} from "@/components/ui/section" +import { Section } from "@/components/ui/section" import Block from "@/components/block.astro" interface Props { diff --git a/src/components/blocks/cta-8.astro b/src/components/blocks/cta-8.astro index 4ceb754ac..cbea600a1 100644 --- a/src/components/blocks/cta-8.astro +++ b/src/components/blocks/cta-8.astro @@ -1,15 +1,7 @@ --- import { cn } from "@/lib/utils" -import { Avatar, AvatarImage } from "@/components/ui/avatar" import { Button } from "@/components/ui/button" import { Icon } from "@/components/ui/icon" -import { - Item, - ItemContent, - ItemDescription, - ItemMedia, -} from "@/components/ui/item" -import { Rating } from "@/components/ui/rating" import { Section, SectionActions, From c75353126ee9c0ba45107e46a2c8a44a0033654d Mon Sep 17 00:00:00 2001 From: Sil Date: Tue, 3 Mar 2026 19:15:12 +0100 Subject: [PATCH 16/17] Remove unused 'item' prop from CTA-8 component for improved clarity and maintainability. --- src/components/blocks/cta-8.astro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/blocks/cta-8.astro b/src/components/blocks/cta-8.astro index cbea600a1..75ecf2b5c 100644 --- a/src/components/blocks/cta-8.astro +++ b/src/components/blocks/cta-8.astro @@ -28,7 +28,7 @@ interface Props { } } -const { class: className, id, links, item } = Astro.props +const { class: className, id, links } = Astro.props ---
    Date: Tue, 3 Mar 2026 19:16:22 +0100 Subject: [PATCH 17/17] Update CTA-8 component by removing unused 'item' prop from Astro props for improved clarity. --- public/r/cta-8.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/r/cta-8.json b/public/r/cta-8.json index a54bd255a..ad3b3d169 100644 --- a/public/r/cta-8.json +++ b/public/r/cta-8.json @@ -13,7 +13,7 @@ "files": [ { "path": "src/components/blocks/cta-8.astro", - "content": "---\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\nimport { Icon } from \"@/components/ui/icon\"\nimport {\n Section,\n SectionActions,\n SectionContent,\n SectionProse,\n} from \"@/components/ui/section\"\n\ninterface Props {\n class?: string\n id?: string\n links?: {\n icon?: string\n text?: string\n href?: string\n target?: string\n }[]\n item?: {\n images?: {\n src: string\n alt: string\n }[]\n rating?: number\n description?: string\n }\n}\n\nconst { class: className, id, links, item } = Astro.props\n---\n\n\n \n \n \n \n \n {\n links?.map(({ icon, text, ...link }, i) => (\n \n ))\n }\n \n \n
    \n", + "content": "---\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\nimport { Icon } from \"@/components/ui/icon\"\nimport {\n Section,\n SectionActions,\n SectionContent,\n SectionProse,\n} from \"@/components/ui/section\"\n\ninterface Props {\n class?: string\n id?: string\n links?: {\n icon?: string\n text?: string\n href?: string\n target?: string\n }[]\n item?: {\n images?: {\n src: string\n alt: string\n }[]\n rating?: number\n description?: string\n }\n}\n\nconst { class: className, id, links } = Astro.props\n---\n\n\n \n \n \n \n \n {\n links?.map(({ icon, text, ...link }, i) => (\n \n ))\n }\n \n \n\n", "type": "registry:block" } ]