diff --git a/.changeset/content-upstream-sync.md b/.changeset/content-upstream-sync.md new file mode 100644 index 000000000..04b72840b --- /dev/null +++ b/.changeset/content-upstream-sync.md @@ -0,0 +1,8 @@ +--- +"fulldev-ui": minor +--- + +Add Astro Code Block and Progress components with examples and all eight styles. +Update data-slot to 1.1.2, expose optional Collapsible dismissal, and fix the +Combobox clear button's accessible name and empty state. Refresh the upstream +shadcn style sources and the React preview's Base UI dependency. diff --git a/.coderabbit.yaml b/.coderabbit.yaml new file mode 100644 index 000000000..d691f044b --- /dev/null +++ b/.coderabbit.yaml @@ -0,0 +1,6 @@ +# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json +inheritance: true +reviews: + # registry:check verifies generated output against its reviewed sources. + path_filters: + - "!public/r/**" diff --git a/DESIGN.md b/DESIGN.md index 52d260971..b58eab110 100644 --- a/DESIGN.md +++ b/DESIGN.md @@ -21,14 +21,14 @@ A general homepage for both frameworks, with its content in the frontmatter of ` The site follows one preset everywhere: theme, style, fonts and menu color, previews included. -- The default is the Fulldev preset (`DEFAULT_CONFIG` in `src/lib/presets.ts`): Vega, Stone, Blue, Geist, the large radius and translucent menus, the preset closest to the full.dev websites (`bJfEY5IW` in `fulldotdev/fulldev` `packages/web/DESIGN.md`, plus translucent menus). Installs keep the theme of the registry's init item. +- The default is the Fulldev preset (`DEFAULT_CONFIG` in `src/lib/presets.ts`): Vega, Stone, Orange, Geist, the large radius and translucent menus. It follows the full.dev website treatment with orange as Fulldev UI's product color. Installs keep the theme of the registry's init item. - The switcher offers Fulldev, shadcn/ui (`SHADCN_CONFIG`: Nova, Neutral, Geist, the default radius) and the visitor's own preset from Create. Astro or React comes from the page. - `src/lib/styles.ts` renders the site in Vega and adds, per class string, the classes of every style; the inline script it adds switches them before the first paint. Previews are rendered per style already (`style-preview.astro`). - The header turns to glass when the preset's menus are translucent (`data-menu-color` on ``). ## Brand -- Logo: the Fulldev mark on a tile in the brand blue `#1442e9`, with the sheen, rim and shadow of the full.dev logo tile, and "UI" in the wordmark type (Geist, 550, -0.01em). The tile stays blue in every preset; the Blue theme's primary matches it within rounding. +- Logo: the Fulldev mark on an orange tile (`--fd-brand` in `src/styles/global.css`), with the sheen, rim and shadow of the full.dev logo tile, a muted slash, and "UI" in the wordmark type (Geist, 550, -0.01em). Each part has 12px of space between it and the next. The tile stays orange in every preset. The favicon, logo assets and social image use the same orange; the default theme uses shadcn/ui's Orange palette. - Font: Geist 1.7.2 from the full.dev websites with their stylistic sets (ss02 single-storey a, ss03 straight l, ss06 alternate G, ss08 round dots), configured in `astro.config.ts`. A preset in Geist keeps this font. ## Rejected diff --git a/package.json b/package.json index 11a3d6a4c..cf4cf22d0 100644 --- a/package.json +++ b/package.json @@ -74,28 +74,28 @@ "registry:meta": "node scripts/registry-meta.mjs" }, "dependencies": { - "@data-slot/accordion": "^1.0.2", - "@data-slot/alert-dialog": "^1.0.2", - "@data-slot/collapsible": "^1.0.2", - "@data-slot/combobox": "^1.0.2", - "@data-slot/command": "^1.0.2", - "@data-slot/core": "^1.0.2", - "@data-slot/dialog": "^1.0.2", - "@data-slot/drawer": "^1.0.2", - "@data-slot/dropdown-menu": "^1.0.2", - "@data-slot/hover-card": "^1.0.2", - "@data-slot/navigation-menu": "^1.0.2", - "@data-slot/popover": "^1.0.2", - "@data-slot/radio-group": "^1.0.2", - "@data-slot/resizable": "^1.0.2", - "@data-slot/select": "^1.0.2", - "@data-slot/slider": "^1.0.2", - "@data-slot/switch": "^1.0.2", - "@data-slot/tabs": "^1.0.2", - "@data-slot/toast": "^1.0.2", - "@data-slot/toggle": "^1.0.2", - "@data-slot/toggle-group": "^1.0.2", - "@data-slot/tooltip": "^1.0.2", + "@data-slot/accordion": "^1.1.2", + "@data-slot/alert-dialog": "^1.1.2", + "@data-slot/collapsible": "^1.1.2", + "@data-slot/combobox": "^1.1.2", + "@data-slot/command": "^1.1.2", + "@data-slot/core": "^1.1.2", + "@data-slot/dialog": "^1.1.2", + "@data-slot/drawer": "^1.1.2", + "@data-slot/dropdown-menu": "^1.1.2", + "@data-slot/hover-card": "^1.1.2", + "@data-slot/navigation-menu": "^1.1.2", + "@data-slot/popover": "^1.1.2", + "@data-slot/radio-group": "^1.1.2", + "@data-slot/resizable": "^1.1.2", + "@data-slot/select": "^1.1.2", + "@data-slot/slider": "^1.1.2", + "@data-slot/switch": "^1.1.2", + "@data-slot/tabs": "^1.1.2", + "@data-slot/toast": "^1.1.2", + "@data-slot/toggle": "^1.1.2", + "@data-slot/toggle-group": "^1.1.2", + "@data-slot/tooltip": "^1.1.2", "@lexingtonthemes/seo": "^0.4.0", "@lucide/astro": "^1.49.0", "class-variance-authority": "^0.7.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d6da92c70..6d48ad75b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -172,71 +172,71 @@ importers: .: dependencies: '@data-slot/accordion': - specifier: ^1.0.2 - version: 1.0.2 + specifier: ^1.1.2 + version: 1.1.2 '@data-slot/alert-dialog': - specifier: ^1.0.2 - version: 1.0.2 + specifier: ^1.1.2 + version: 1.1.2 '@data-slot/collapsible': - specifier: ^1.0.2 - version: 1.0.2 + specifier: ^1.1.2 + version: 1.1.2 '@data-slot/combobox': - specifier: ^1.0.2 - version: 1.0.2 + specifier: ^1.1.2 + version: 1.1.2 '@data-slot/command': - specifier: ^1.0.2 - version: 1.0.2 + specifier: ^1.1.2 + version: 1.1.2 '@data-slot/core': - specifier: ^1.0.2 - version: 1.0.2 + specifier: ^1.1.2 + version: 1.1.2 '@data-slot/dialog': - specifier: ^1.0.2 - version: 1.0.2 + specifier: ^1.1.2 + version: 1.1.2 '@data-slot/drawer': - specifier: ^1.0.2 - version: 1.0.2 + specifier: ^1.1.2 + version: 1.1.2 '@data-slot/dropdown-menu': - specifier: ^1.0.2 - version: 1.0.2 + specifier: ^1.1.2 + version: 1.1.2 '@data-slot/hover-card': - specifier: ^1.0.2 - version: 1.0.2 + specifier: ^1.1.2 + version: 1.1.2 '@data-slot/navigation-menu': - specifier: ^1.0.2 - version: 1.0.2 + specifier: ^1.1.2 + version: 1.1.2 '@data-slot/popover': - specifier: ^1.0.2 - version: 1.0.2 + specifier: ^1.1.2 + version: 1.1.2 '@data-slot/radio-group': - specifier: ^1.0.2 - version: 1.0.2 + specifier: ^1.1.2 + version: 1.1.2 '@data-slot/resizable': - specifier: ^1.0.2 - version: 1.0.2 + specifier: ^1.1.2 + version: 1.1.2 '@data-slot/select': - specifier: ^1.0.2 - version: 1.0.2 + specifier: ^1.1.2 + version: 1.1.2 '@data-slot/slider': - specifier: ^1.0.2 - version: 1.0.2 + specifier: ^1.1.2 + version: 1.1.2 '@data-slot/switch': - specifier: ^1.0.2 - version: 1.0.2 + specifier: ^1.1.2 + version: 1.1.2 '@data-slot/tabs': - specifier: ^1.0.2 - version: 1.0.2 + specifier: ^1.1.2 + version: 1.1.2 '@data-slot/toast': - specifier: ^1.0.2 - version: 1.0.2 + specifier: ^1.1.2 + version: 1.1.2 '@data-slot/toggle': - specifier: ^1.0.2 - version: 1.0.2 + specifier: ^1.1.2 + version: 1.1.2 '@data-slot/toggle-group': - specifier: ^1.0.2 - version: 1.0.2 + specifier: ^1.1.2 + version: 1.1.2 '@data-slot/tooltip': - specifier: ^1.0.2 - version: 1.0.2 + specifier: ^1.1.2 + version: 1.1.2 '@lexingtonthemes/seo': specifier: ^0.4.0 version: 0.4.0(astro@7.3.5(@astrojs/markdown-remark@7.3.1)(@types/node@24.19.0)(jiti@2.7.0)(yaml@2.9.1)) @@ -368,8 +368,8 @@ importers: react: dependencies: '@base-ui/react': - specifier: ^1.8.0 - version: 1.8.0(@date-fns/tz@1.5.0)(@types/react@19.3.0)(date-fns@4.4.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0) + specifier: ^1.9.0 + version: 1.9.0(@date-fns/tz@1.5.0)(@types/react@19.3.0)(date-fns@4.4.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0) class-variance-authority: specifier: ^0.7.1 version: 0.7.1 @@ -770,8 +770,8 @@ packages: resolution: {integrity: sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==} engines: {node: '>=6.9.0'} - '@base-ui/react@1.8.0': - resolution: {integrity: sha512-P0/1sxo6SBVZOklKMIedvTWqw2s2IQzi9x5bIVsXu980cuSOD4NeuRSs+/L7LZQfDkZP/uRZyGPyfFl/B1oH+Q==} + '@base-ui/react@1.9.0': + resolution: {integrity: sha512-S8CSYosASBKtpL8SWUfS78rFElfLijiCgA7oHOK22jCJ95FULsYyKwBNFOgudt0RA+/7yNc7F81bOvQnRgbBiQ==} engines: {node: '>=14.0.0'} peerDependencies: '@date-fns/tz': ^1.2.0 @@ -787,8 +787,8 @@ packages: date-fns: optional: true - '@base-ui/utils@0.4.0': - resolution: {integrity: sha512-bO9fz25kKtPf+aZVyfQrC0PDmJdmVni31W2hCS5/Owb+inwdIL3XU26pCPRPlt4LSxZrBgLwubXQXQlKaFEZzw==} + '@base-ui/utils@0.5.0': + resolution: {integrity: sha512-dYGGcEttjkYiMoa5nHm8vLaJ2UcuTWxo3BFAwOYXeRg/q7UVVvA6cacEIXEs3FgBfK1CGtW1ptElqs7wsx+t9A==} peerDependencies: '@types/react': ^17 || ^18 || ^19 react: ^17 || ^18 || ^19 @@ -933,71 +933,71 @@ packages: resolution: {integrity: sha512-dlT1m5e/0yUL0kRNcQn7yGLVThkgbB0Ga/1AmfDDC/8ik6AIiSf2QLQO2zPYvefsHP0aFgxO93cVLCCfDp7kzQ==} engines: {node: '>= 20.12.0'} - '@data-slot/accordion@1.0.2': - resolution: {integrity: sha512-SOs0DBMdU5l8amuRu1MAEGXORmTFhK3wMLrbl12Rj3hdzIQ6DYsoPvRvVUEs2FZ1RB+gT0PB/JWB1vvzAvBiKA==} + '@data-slot/accordion@1.1.2': + resolution: {integrity: sha512-V+hLbS1RwCmKLiJ6mNFjuwknuSQqPvErKi1SBmBbyiuZJ5s2Izm5Gvc9Sfbj+7bc81x0N+YaHn5GFYcQSZvfMA==} - '@data-slot/alert-dialog@1.0.2': - resolution: {integrity: sha512-muBiDNPYF3EXvNTC0nMK3qff95vaPdndGARaHsYFKx0tUI++6wkncIOPD0/PbSFng4wpIssVf4Ila7+VeXCxzg==} + '@data-slot/alert-dialog@1.1.2': + resolution: {integrity: sha512-gBBVJP1XW1F3MzoOiUcoaPROvozaEeI1WDp83er+LbXjWOA/8OLJlCu1GQnT2riDeoh56aqZmg9pwtG0MxriPg==} - '@data-slot/collapsible@1.0.2': - resolution: {integrity: sha512-aqBQpbbZBfA+1dQJ5MMMpd17pTCdiphqG77KbAuyctVCIUcT0QCtJ8XT/aw2mOrlAzFPuuTYuvQNhqauRyM+9Q==} + '@data-slot/collapsible@1.1.2': + resolution: {integrity: sha512-dFf27UDHz+jcLtpcYIIP0eC/kk6c0NRGhvFNNpUhoCIr8A0HQ3RPVSYw2tgmRP5enIzkL/pXk/c+nKqGNcW52g==} - '@data-slot/combobox@1.0.2': - resolution: {integrity: sha512-Es4k9oe0K5DyccOm/9dVGz4NVlsYo0/3TkJLRC1VplItpfU0nORF71Ze3udMbznz+pz1i7mjpRvkh+SVkOHRWg==} + '@data-slot/combobox@1.1.2': + resolution: {integrity: sha512-8/3fW1G7dcW+rppIjIQsIl753ORk0+mJkVBX6G3h72AqZ/7v0AtpP48SRpJELyFShysHiX0ROVWrfueZnZGZIQ==} - '@data-slot/command@1.0.2': - resolution: {integrity: sha512-ONZ1HNJBp/fxmiW7AGCb4Samrb0GynFMQyIv4Be2okHwMlfwFfN1VIe9+JxXv8tLWSdjB2GsOQrNQyijLt9QXQ==} + '@data-slot/command@1.1.2': + resolution: {integrity: sha512-xzenwtkOig9W40ZZxB6w5gfCp6NED+0/CbgjVRvl/SxOwaKY0ut5wZLzx87YckJdXTkJTT3nUFH5dWCr3/TVtw==} - '@data-slot/core@1.0.2': - resolution: {integrity: sha512-x48OCoPuPpZviCBi9tGJXRX05mB/XPb+//2MVlQU6x3kQQVexSZONNfyv791+4WJz+nxi7oxjryiLmTLCFNVEw==} + '@data-slot/core@1.1.2': + resolution: {integrity: sha512-xcxdiWJ/fPUqobE2PZdi96FIT/xASSsmtRtlyTWOro/mh5ZSJ8blB7t2anV12J7irNSKMov2+WpWFvAeikR5Vw==} - '@data-slot/dialog@1.0.2': - resolution: {integrity: sha512-Xke0TXqQHYlsW1SGcY/t/bX1Gr3doTq1+fHTngNJ16QThz7xr96VzAXZkTKGJo/bTe4NmO87qpILRSq4QiZfZA==} + '@data-slot/dialog@1.1.2': + resolution: {integrity: sha512-u8wYx8TtrV3Vaum+o685KCMZ1y+PciADIF1NgqAkupIe+0PVe7gyhlMtMhQxiCnurWZ6v3h1PRCTBlNWEaWhdQ==} - '@data-slot/drawer@1.0.2': - resolution: {integrity: sha512-nCje+U7gCX3OVxrNxvE0VGEOnNWKeGgaq1JSnJ9kwvA5+7K1Ag+P3IYrRFaQaFbYRU2GKE60PlrzY7TaaoEaZA==} + '@data-slot/drawer@1.1.2': + resolution: {integrity: sha512-WiBYU9uLBQSpWigbwbK6qhyma9sjP73nuNaz/ecoNccKYDLaShGxAzcmX0pqqZl7qcbyVeXfNyGLVHABCZru/g==} - '@data-slot/dropdown-menu@1.0.2': - resolution: {integrity: sha512-YUQuIRoapwBPlS/2oqES9gsMxyJiRugWRHlvfdtqFKTPUJCBbndsLCO+vJ4t2KDZhWrHqxyhcDMr85WbxiSmdA==} + '@data-slot/dropdown-menu@1.1.2': + resolution: {integrity: sha512-xf0SaARlsLjkHJxoHE+cf+1dLOm8m30jDMP+YDYJ6EDMKCF7nzr0hBkM6w7ppOLWdw0Hu+WVvJJ8Yznl1xLOog==} - '@data-slot/hover-card@1.0.2': - resolution: {integrity: sha512-Itf7MvxLVrmXScg+8NG3V0QY+28YPyhmhOlnRLw35d0mKwMBtxkyYFMMpBMxYRxV3WXuv0ZFyhFjzscjDFhgFg==} + '@data-slot/hover-card@1.1.2': + resolution: {integrity: sha512-4f2PtAGp441vVpjHtC1+rcSlpVWE27yDut04QsBiD6eLvjYPovqk5WXn9H3s8N96pZf29ePwMYpozDllhu0kSQ==} - '@data-slot/navigation-menu@1.0.2': - resolution: {integrity: sha512-duGcIWtwjFwurSZZsgUrrbIGgxUVext81cpOIIo2DIVuC/JhtcW5xD+AllPDqXvbyhhsv9fKcLx76WRF2koIIA==} + '@data-slot/navigation-menu@1.1.2': + resolution: {integrity: sha512-Ic15bj+2N595TQ1DBJ8HRaFj2h1oRP2tL+JAnLXYHixc/XwVPg4i1VhFPo9Szn52MxcjsHI20yqcdVpmvksGtw==} - '@data-slot/popover@1.0.2': - resolution: {integrity: sha512-eVDSmfiXHrUlwVdQ0yO0LPkbZJL0R1ygrieAC/LOzsi+ODhCgilnbT2azKlDuKJoPNMOaMOft2FkRz7HIMF4/A==} + '@data-slot/popover@1.1.2': + resolution: {integrity: sha512-UFeabt+V1Lt7MhUeiqbjcLPu8F1a+JJIwZ8nM/mEo8EZCTYnmF3h+cinMmxo7Y8zFc++OZyNlbmQIenB0k7NPQ==} - '@data-slot/radio-group@1.0.2': - resolution: {integrity: sha512-Pp2clfsNDm2g1JdLhRs3a7c9t2k4gYtEndxBkQ6E9wwcHLs0fXiUiG3JMyenGPGdTdNkAlfq3Y9yY+z73AXycg==} + '@data-slot/radio-group@1.1.2': + resolution: {integrity: sha512-F1oP0ZNqaygWSKE8I2BIpYbhw3i8yUVRiT3DECJZYl5LdhBSkfGzuNIVbJgZl8IGjgrNu46EVSwezaIoeU6oNA==} - '@data-slot/resizable@1.0.2': - resolution: {integrity: sha512-bEqPmnuD2wNqkuqM+uaku09kw5/0wSBbvtEQb8YM785pxQEa8Rs54hK6whLpP5RZmxH8h5OdT7anRQaftmlHQw==} + '@data-slot/resizable@1.1.2': + resolution: {integrity: sha512-03jiq/Kdzw8kOymMP1IYrPect1ulu8CMIRf2JpfOygd2tYfZxUe9T/el6R+KtU8wYQfGYoK4d/GFcDICWCVhiA==} - '@data-slot/select@1.0.2': - resolution: {integrity: sha512-JWI1G14HsdS6HoTlLqfjqyaMwkfoWKVjwjp1If96UTqFnlyee65pRvVi4h1qEJm/GlRbUR9l4bh9YPvdzUZKow==} + '@data-slot/select@1.1.2': + resolution: {integrity: sha512-aaFNFTqD9FiNbzWFfbxktLlo+N6YZugyl/Ig6nDSsZVL4aJMUhHcoDn8p8B1NleCUGhVeoJ8LMA4AJ27lb5hyA==} - '@data-slot/slider@1.0.2': - resolution: {integrity: sha512-NBOsXVtg7l5SDJPK/LFc9WO88P642fGhdfz7edUXPu5VpcKXHkb+TRt4YGcsnNREYKm+2nWgFIzki9Bifn35oQ==} + '@data-slot/slider@1.1.2': + resolution: {integrity: sha512-roZHvCQa7TFQzM+1IotwR6Bp4jp+GbEzAqOKVZUxf9waP9dwJ787RtNLRUu0K7TNVUlgkl3BkIwOktZByd42qQ==} - '@data-slot/switch@1.0.2': - resolution: {integrity: sha512-m6GUA8XoCWVw08W8GXqo5NGi9qi/1hMxwFcCXFYlHSQnmtvDCIX2U0tr/gFnkP7+y9I7g1Mm1KVKAX+1Rw6Gwg==} + '@data-slot/switch@1.1.2': + resolution: {integrity: sha512-BKvX7hh/1Z5htdXIucDnNOBaLYog9w57fJOAhAUDRk6nzEqwZ86+F2W1iC06bJBX0huE5xOD2Qjb2io845iwaQ==} - '@data-slot/tabs@1.0.2': - resolution: {integrity: sha512-2Oc13RY/sMtXTKX3TuUhCJbh+q/g1GjuNOC7wGHC82X2rmJK6Xc+CXd9eIS1imzcRp7hpjJigGichstJ0vVGkw==} + '@data-slot/tabs@1.1.2': + resolution: {integrity: sha512-LHCfNDW5FNAjadqKtFniqlLQ+oab3mSwb8wpm8zHVljT6sGDrpii+w4bburoleJ2JhXKBHv1xMludFtA+C433A==} - '@data-slot/toast@1.0.2': - resolution: {integrity: sha512-WOUXTlmFC1j5EwBgo6AAjaEs09HKUOhUFo2vDXBGwgpOIRZo4hOH49B9LvGusMVp43+1rHBv2EfWWvrM21008w==} + '@data-slot/toast@1.1.2': + resolution: {integrity: sha512-dATEwBhMGemFNexaEMqf+qQq/S8Ms2jkTwzdh2ptlz21rcoa/H9JlQ9tmXw352p2MWLeMvwTU2MbnjXnWfPiKw==} - '@data-slot/toggle-group@1.0.2': - resolution: {integrity: sha512-/poEuONG6GM4HkTzvYyWBvwFMR2KLeIVQfOofuFz+hAKw09CY4WkuLqiBOdKjZKmLgA5H+AoHyKVQ5LPYA/EMA==} + '@data-slot/toggle-group@1.1.2': + resolution: {integrity: sha512-b3EoaXwb4pTvN3F14fGAWNTfrX6aeEHv+gy9rviDVJjeQZKGMVoWgKBXEcKjGzVi+Jk6o+Qtk2HZfqHIj0zFvA==} - '@data-slot/toggle@1.0.2': - resolution: {integrity: sha512-iJdvqRE1ClFv8uNswUMM7u5edR1uhMkGbnfAO6t3KlB2mAwIxeuX9Y/3seml5qvq89l7CTLZwSaJHYnGHfhlLg==} + '@data-slot/toggle@1.1.2': + resolution: {integrity: sha512-Cd076I5PhOKqVQjTpb82ukLdMAPL3WJf5IRW+hUX35L1efl3QZOwiqMpVmp7/rtCs1FLU596A1dKgiOfyDVgdw==} - '@data-slot/tooltip@1.0.2': - resolution: {integrity: sha512-B++AfDWpbD8M7TRNs3Md5mF3ztgaDRHvBqBkSVOFti+9dx8xNRBUtficyixnew67Yqdxwu3DXVqEac1342WWnw==} + '@data-slot/tooltip@1.1.2': + resolution: {integrity: sha512-LNBHFrSNUV6cNJEwtAiIMC5SMVDCCX1MmzY/T1YJHGpNQtbJJ+TI+D5yZ36ATLZ1gdW1v1MRoa6BCALIBDCyxQ==} '@date-fns/tz@1.5.0': resolution: {integrity: sha512-lwYN/vDPeNRULcepoE/LO2Pgx+7/RV+S9ARfbc9lr2DtGkOD7pAiruHvbR1RX3Qyf6ja47EWJDMsNK5vK08DJg==} @@ -6201,10 +6201,10 @@ snapshots: '@babel/helper-string-parser': 7.29.7 '@babel/helper-validator-identifier': 7.29.7 - '@base-ui/react@1.8.0(@date-fns/tz@1.5.0)(@types/react@19.3.0)(date-fns@4.4.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)': + '@base-ui/react@1.9.0(@date-fns/tz@1.5.0)(@types/react@19.3.0)(date-fns@4.4.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)': dependencies: '@babel/runtime': 7.29.7 - '@base-ui/utils': 0.4.0(@types/react@19.3.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0) + '@base-ui/utils': 0.5.0(@types/react@19.3.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0) '@floating-ui/react-dom': 2.1.9(react-dom@19.3.0(react@19.3.0))(react@19.3.0) '@floating-ui/utils': 0.2.12 react: 19.3.0 @@ -6215,7 +6215,7 @@ snapshots: '@types/react': 19.3.0 date-fns: 4.4.0 - '@base-ui/utils@0.4.0(@types/react@19.3.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)': + '@base-ui/utils@0.5.0(@types/react@19.3.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)': dependencies: '@babel/runtime': 7.29.7 '@floating-ui/utils': 0.2.12 @@ -6398,91 +6398,91 @@ snapshots: fast-wrap-ansi: 0.2.2 sisteransi: 1.0.5 - '@data-slot/accordion@1.0.2': + '@data-slot/accordion@1.1.2': dependencies: - '@data-slot/core': 1.0.2 + '@data-slot/core': 1.1.2 - '@data-slot/alert-dialog@1.0.2': + '@data-slot/alert-dialog@1.1.2': dependencies: - '@data-slot/core': 1.0.2 + '@data-slot/core': 1.1.2 - '@data-slot/collapsible@1.0.2': + '@data-slot/collapsible@1.1.2': dependencies: - '@data-slot/core': 1.0.2 + '@data-slot/core': 1.1.2 - '@data-slot/combobox@1.0.2': + '@data-slot/combobox@1.1.2': dependencies: - '@data-slot/core': 1.0.2 + '@data-slot/core': 1.1.2 - '@data-slot/command@1.0.2': + '@data-slot/command@1.1.2': dependencies: - '@data-slot/core': 1.0.2 + '@data-slot/core': 1.1.2 - '@data-slot/core@1.0.2': {} + '@data-slot/core@1.1.2': {} - '@data-slot/dialog@1.0.2': + '@data-slot/dialog@1.1.2': dependencies: - '@data-slot/core': 1.0.2 + '@data-slot/core': 1.1.2 - '@data-slot/drawer@1.0.2': + '@data-slot/drawer@1.1.2': dependencies: - '@data-slot/core': 1.0.2 + '@data-slot/core': 1.1.2 - '@data-slot/dropdown-menu@1.0.2': + '@data-slot/dropdown-menu@1.1.2': dependencies: - '@data-slot/core': 1.0.2 + '@data-slot/core': 1.1.2 - '@data-slot/hover-card@1.0.2': + '@data-slot/hover-card@1.1.2': dependencies: - '@data-slot/core': 1.0.2 + '@data-slot/core': 1.1.2 - '@data-slot/navigation-menu@1.0.2': + '@data-slot/navigation-menu@1.1.2': dependencies: - '@data-slot/core': 1.0.2 + '@data-slot/core': 1.1.2 - '@data-slot/popover@1.0.2': + '@data-slot/popover@1.1.2': dependencies: - '@data-slot/core': 1.0.2 + '@data-slot/core': 1.1.2 - '@data-slot/radio-group@1.0.2': + '@data-slot/radio-group@1.1.2': dependencies: - '@data-slot/core': 1.0.2 + '@data-slot/core': 1.1.2 - '@data-slot/resizable@1.0.2': + '@data-slot/resizable@1.1.2': dependencies: - '@data-slot/core': 1.0.2 + '@data-slot/core': 1.1.2 - '@data-slot/select@1.0.2': + '@data-slot/select@1.1.2': dependencies: - '@data-slot/core': 1.0.2 + '@data-slot/core': 1.1.2 - '@data-slot/slider@1.0.2': + '@data-slot/slider@1.1.2': dependencies: - '@data-slot/core': 1.0.2 + '@data-slot/core': 1.1.2 - '@data-slot/switch@1.0.2': + '@data-slot/switch@1.1.2': dependencies: - '@data-slot/core': 1.0.2 + '@data-slot/core': 1.1.2 - '@data-slot/tabs@1.0.2': + '@data-slot/tabs@1.1.2': dependencies: - '@data-slot/core': 1.0.2 + '@data-slot/core': 1.1.2 - '@data-slot/toast@1.0.2': + '@data-slot/toast@1.1.2': dependencies: - '@data-slot/core': 1.0.2 + '@data-slot/core': 1.1.2 - '@data-slot/toggle-group@1.0.2': + '@data-slot/toggle-group@1.1.2': dependencies: - '@data-slot/core': 1.0.2 + '@data-slot/core': 1.1.2 - '@data-slot/toggle@1.0.2': + '@data-slot/toggle@1.1.2': dependencies: - '@data-slot/core': 1.0.2 + '@data-slot/core': 1.1.2 - '@data-slot/tooltip@1.0.2': + '@data-slot/tooltip@1.1.2': dependencies: - '@data-slot/core': 1.0.2 + '@data-slot/core': 1.1.2 '@date-fns/tz@1.5.0': optional: true diff --git a/public/r/accordion.json b/public/r/accordion.json index c8c8db7cc..fb470a949 100644 --- a/public/r/accordion.json +++ b/public/r/accordion.json @@ -4,7 +4,7 @@ "title": "Accordion", "description": "A vertically stacked set of interactive headings that each reveal a section of content.", "dependencies": [ - "@data-slot/accordion@^1.0.2", + "@data-slot/accordion@^1.1.2", "@lucide/astro" ], "files": [ diff --git a/public/r/alert-dialog.json b/public/r/alert-dialog.json index c8afa0064..e818af71f 100644 --- a/public/r/alert-dialog.json +++ b/public/r/alert-dialog.json @@ -4,7 +4,7 @@ "title": "Alert Dialog", "description": "A modal dialog for important confirmations that expects a response.", "dependencies": [ - "@data-slot/alert-dialog@^1.0.2" + "@data-slot/alert-dialog@^1.1.2" ], "registryDependencies": [ "@fulldev/button" diff --git a/public/r/code-block-examples.json b/public/r/code-block-examples.json new file mode 100644 index 000000000..2dc78df89 --- /dev/null +++ b/public/r/code-block-examples.json @@ -0,0 +1,33 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "code-block-examples", + "title": "Code Block examples", + "description": "The examples from the shadcn/ui Code Block docs.", + "registryDependencies": [ + "@fulldev/code-block" + ], + "files": [ + { + "path": "src/components/examples/code-block/code-block-demo.astro", + "content": "---\nimport {\n CodeBlock,\n CodeBlockActions,\n CodeBlockContent,\n CodeBlockCopyButton,\n CodeBlockHeader,\n CodeBlockTitle,\n} from \"@/components/ui/code-block\"\n\nconst code = `import { Button } from \"@/components/ui/button\"\n\n`\n---\n\n\n \n contact.astro\n \n \n \n \n \n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-lines.astro", + "content": "---\nimport {\n CodeBlock,\n CodeBlockContent,\n CodeBlockLine,\n} from \"@/components/ui/code-block\"\n---\n\n\n \n export const site = {\n {' title: \"Our website\",'}\n \n {' title: \"Our new website\",'}\n \n \n {' lang: \"en\",'}\n }\n \n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-numbered.astro", + "content": "---\nimport { CodeBlock, CodeBlockContent } from \"@/components/ui/code-block\"\n\nconst code = `{\n \"name\": \"our-website\",\n\n \"private\": true\n}`\n---\n\n\n \n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-wrap.astro", + "content": "---\nimport {\n CodeBlock,\n CodeBlockActions,\n CodeBlockContent,\n CodeBlockCopyButton,\n CodeBlockFooter,\n} from \"@/components/ui/code-block\"\n\nconst code =\n \"A long explanation can wrap inside a code block without making the surrounding article or the page scroll horizontally.\"\n---\n\n\n \n \n \n \n Plain text, with line wrapping.\n\n", + "type": "registry:component" + } + ], + "docs": "https://ui.full.dev/components/code-block/", + "type": "registry:example" +} \ No newline at end of file diff --git a/public/r/code-block.json b/public/r/code-block.json new file mode 100644 index 000000000..2380b837e --- /dev/null +++ b/public/r/code-block.json @@ -0,0 +1,65 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "code-block", + "title": "Code Block", + "description": "Code and plain-text snippets with copy actions, line numbers and highlighted lines.", + "dependencies": [ + "@lucide/astro", + "class-variance-authority" + ], + "registryDependencies": [ + "@fulldev/button" + ], + "files": [ + { + "path": "src/components/ui/code-block/code-block-actions.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\nconst { class: className, ...props } = Astro.props\n---\n\n&]:m-0 [[data-slot=code-block]>&]:top-3 [[data-slot=code-block]>&]:end-3 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:top-2 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:end-2 [[data-slot=code-block]>&]:*:[button]:bg-background [[data-slot=code-block]>&]:*:[button]:ring-1 [[data-slot=code-block]>&]:*:[button]:ring-foreground/10 ms-auto flex shrink-0 items-center [[data-slot=code-block]>&]:absolute [[data-slot=code-block]>&]:z-10 [[data-slot=code-block]>&]:opacity-0 [[data-slot=code-block]>&]:transition-opacity [[data-slot=code-block]>&]:group-focus-within/code-block:opacity-100 [[data-slot=code-block]>&]:group-hover/code-block:opacity-100 [[data-slot=code-block]>&]:pointer-coarse:opacity-100\",\n className\n )}\n {...props}\n>\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-content.astro", + "content": "---\n/* eslint-disable astro/jsx-a11y/no-noninteractive-tabindex -- Focusable code supports keyboard scrolling, as in shadcn/ui. */\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\nimport CodeBlockLine from \"./code-block-line.astro\"\n\ntype Props = HTMLAttributes<\"pre\"> & {\n code?: string\n wrap?: boolean\n lineNumbers?: boolean\n startLine?: number\n}\n\nconst {\n class: className,\n code,\n wrap = false,\n lineNumbers = false,\n startLine = 1,\n style,\n ...props\n} = Astro.props\n\nconst contentStyle =\n typeof style === \"string\"\n ? `counter-reset: line ${startLine - 1}; ${style}`\n : { counterReset: `line ${startLine - 1}`, ...style }\n---\n\n{code !== undefined ? lineNumbers ? code.replace(/\\n$/, \"\").split(\"\\n\").map((line) => {line}) : code : }\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-copy-button.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport CheckIcon from \"@lucide/astro/icons/check\"\nimport CopyIcon from \"@lucide/astro/icons/copy\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button, type ButtonVariantProps } from \"@/components/ui/button\"\n\ntype Props = Omit, \"value\" | \"type\"> &\n ButtonVariantProps & {\n value: string\n copyLabel?: string\n copiedLabel?: string\n errorLabel?: string\n }\n\nconst {\n class: className,\n value,\n variant = \"ghost\",\n size = \"icon-xs\",\n copyLabel = \"Copy\",\n copiedLabel = \"Copied\",\n errorLabel = \"Could not copy\",\n ...props\n} = Astro.props\n---\n\n\n \n \n\n\n\n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-footer.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\nconst { class: className, ...props } = Astro.props\n---\n\n\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-header.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\nconst { class: className, ...props } = Astro.props\n---\n\n[data-slot=code-block-title]]:min-w-0\",\n className\n )}\n {...props}\n>\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-line.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 \"-mx-4 px-4 in-data-numbered:gap-x-3 before:min-w-6 before:text-end before:text-muted-foreground after:start-1 after:text-muted-foreground group-data-[size=sm]/code-block:-mx-3 group-data-[size=sm]/code-block:px-3 relative block min-h-lh before:select-none after:absolute after:top-0 after:select-none in-data-numbered:col-span-2 in-data-numbered:grid in-data-numbered:grid-cols-subgrid in-data-numbered:[counter-increment:line] in-data-numbered:before:content-[counter(line)] in-data-numbered:supports-[content:counter(line)_/_'']:before:content-[counter(line)_/_'']\",\n {\n variants: {\n variant: {\n default: \"\",\n added: \"bg-muted after:content-['+']\",\n removed: \"bg-destructive/10 after:text-destructive after:content-['−']\",\n highlighted: \"bg-muted\",\n },\n },\n defaultVariants: { variant: \"default\" },\n }\n)\n\ntype Props = HTMLAttributes<\"span\"> & VariantProps\nconst { class: className, variant = \"default\", ...props } = Astro.props\n---\n\n\n \n \n {\"\\n\"}\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-title.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\nconst { class: className, ...props } = Astro.props\n---\n\n\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block.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 \"rounded-lg text-sm data-[size=sm]:text-xs has-[>[data-slot=code-block-content]:focus-visible]:ring-3 has-[>[data-slot=code-block-content]:focus-visible]:ring-ring/50 group/code-block relative flex w-full min-w-0 flex-col overflow-hidden\",\n {\n variants: {\n variant: {\n default: \"border border-input text-foreground dark:bg-input/30 has-[>[data-slot=code-block-content]:focus-visible]:border-ring\",\n destructive: \"border border-destructive/30 text-destructive dark:border-destructive/40\",\n },\n },\n defaultVariants: { variant: \"default\" },\n }\n)\n\ntype Props = HTMLAttributes<\"div\"> &\n VariantProps & {\n size?: \"default\" | \"sm\"\n }\n\nconst {\n class: className,\n variant = \"default\",\n size = \"default\",\n ...props\n} = Astro.props\n---\n\n\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/index.ts", + "content": "export { default as CodeBlock } from \"./code-block.astro\"\nexport { default as CodeBlockHeader } from \"./code-block-header.astro\"\nexport { default as CodeBlockTitle } from \"./code-block-title.astro\"\nexport { default as CodeBlockActions } from \"./code-block-actions.astro\"\nexport { default as CodeBlockCopyButton } from \"./code-block-copy-button.astro\"\nexport { default as CodeBlockContent } from \"./code-block-content.astro\"\nexport { default as CodeBlockLine } from \"./code-block-line.astro\"\nexport { default as CodeBlockFooter } from \"./code-block-footer.astro\"\n", + "type": "registry:ui" + } + ], + "docs": "https://ui.full.dev/components/code-block/", + "categories": [ + "ui" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/public/r/collapsible-examples.json b/public/r/collapsible-examples.json index 56b092a2f..7d0f08173 100644 --- a/public/r/collapsible-examples.json +++ b/public/r/collapsible-examples.json @@ -25,6 +25,11 @@ "content": "---\nimport ChevronsUpDown from \"@lucide/astro/icons/chevrons-up-down\"\n\nimport { buttonVariants } from \"@/components/ui/button\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/components/ui/collapsible\"\n---\n\n\n
\n

Order #4189

\n \n \n Toggle details\n \n
\n
\n Status\n Shipped\n
\n \n
\n

Shipping address

\n

100 Market St, San Francisco

\n
\n
\n

Items

\n

2x Studio Headphones

\n
\n
\n
\n", "type": "registry:component" }, + { + "path": "src/components/examples/collapsible/collapsible-dismissal.astro", + "content": "---\nimport ChevronDownIcon from \"@lucide/astro/icons/chevron-down\"\n\nimport { buttonVariants } from \"@/components/ui/button\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/components/ui/collapsible\"\n---\n\n
\n \n \n Browse documentation\n \n \n \n \n \n \n

\n Open the panel, then press Escape or click outside it to close.\n

\n
\n", + "type": "registry:component" + }, { "path": "src/components/examples/collapsible/collapsible-file-tree.astro", "content": "---\nimport ChevronRightIcon from \"@lucide/astro/icons/chevron-right\"\nimport FileIcon from \"@lucide/astro/icons/file\"\nimport FolderIcon from \"@lucide/astro/icons/folder\"\n\nimport { Button, buttonVariants } from \"@/components/ui/button\"\nimport { Card, CardContent, CardHeader } from \"@/components/ui/card\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/components/ui/collapsible\"\nimport { Tabs, TabsList, TabsTrigger } from \"@/components/ui/tabs\"\n\ntype FileTreeItem = { name: string } | { name: string; items: FileTreeItem[] }\n\nconst fileTree: FileTreeItem[] = [\n {\n name: \"components\",\n items: [\n {\n name: \"ui\",\n items: [\n { name: \"button.tsx\" },\n { name: \"card.tsx\" },\n { name: \"dialog.tsx\" },\n { name: \"input.tsx\" },\n { name: \"select.tsx\" },\n { name: \"table.tsx\" },\n ],\n },\n { name: \"login-form.tsx\" },\n { name: \"register-form.tsx\" },\n ],\n },\n {\n name: \"lib\",\n items: [{ name: \"utils.ts\" }, { name: \"cn.ts\" }, { name: \"api.ts\" }],\n },\n {\n name: \"hooks\",\n items: [\n { name: \"use-media-query.ts\" },\n { name: \"use-debounce.ts\" },\n { name: \"use-local-storage.ts\" },\n ],\n },\n {\n name: \"types\",\n items: [{ name: \"index.d.ts\" }, { name: \"api.d.ts\" }],\n },\n {\n name: \"public\",\n items: [{ name: \"favicon.ico\" }, { name: \"logo.svg\" }, { name: \"images\" }],\n },\n { name: \"app.tsx\" },\n { name: \"layout.tsx\" },\n { name: \"globals.css\" },\n { name: \"package.json\" },\n { name: \"tsconfig.json\" },\n { name: \"README.md\" },\n { name: \".gitignore\" },\n]\n\n// Renders the card, or one tree level when Astro.self passes `items`.\nconst { items } = Astro.props as { items?: FileTreeItem[] }\n---\n\n{items ? (\n items.map((fileItem) =>\n \"items\" in fileItem ? (\n \n \n \n \n {fileItem.name}\n \n \n
\n \n
\n
\n
\n ) : (\n \n \n {fileItem.name}\n \n )\n )\n) : (\n \n \n \n \n Explorer\n Outline\n \n \n \n \n
\n \n
\n
\n
\n)}\n", diff --git a/public/r/collapsible.json b/public/r/collapsible.json index 51460f6ff..dd0c03d41 100644 --- a/public/r/collapsible.json +++ b/public/r/collapsible.json @@ -4,12 +4,12 @@ "title": "Collapsible", "description": "An interactive component which expands/collapses a panel.", "dependencies": [ - "@data-slot/collapsible@^1.0.2" + "@data-slot/collapsible@^1.1.2" ], "files": [ { "path": "src/components/ui/collapsible/collapsible.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\"> & {\n // \"li\" makes a list item the collapsible, such as a sidebar menu item.\n as?: \"div\" | \"li\"\n defaultOpen?: boolean\n hiddenUntilFound?: boolean\n}\n\nconst {\n as: Tag = \"div\",\n class: className,\n defaultOpen,\n hiddenUntilFound,\n ...props\n} = Astro.props\n---\n\n\n \n\n\n\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\"> & {\n // \"li\" makes a list item the collapsible, such as a sidebar menu item.\n as?: \"div\" | \"li\"\n defaultOpen?: boolean\n hiddenUntilFound?: boolean\n closeOnEscape?: boolean\n closeOnClickOutside?: boolean\n}\n\nconst {\n as: Tag = \"div\",\n class: className,\n defaultOpen,\n hiddenUntilFound,\n closeOnEscape,\n closeOnClickOutside,\n ...props\n} = Astro.props\n---\n\n\n \n\n\n\n", "type": "registry:ui" }, { diff --git a/public/r/combobox.json b/public/r/combobox.json index 7ab90739f..0eb7db5e7 100644 --- a/public/r/combobox.json +++ b/public/r/combobox.json @@ -4,8 +4,8 @@ "title": "Combobox", "description": "Autocomplete input with a list of suggestions.", "dependencies": [ - "@data-slot/combobox@^1.0.2", - "@data-slot/core@^1.0.2", + "@data-slot/combobox@^1.1.2", + "@data-slot/core@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -34,7 +34,7 @@ }, { "path": "src/components/ui/combobox/combobox-input.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport XIcon from \"@lucide/astro/icons/x\"\n\nimport { cn } from \"@/lib/utils\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n} from \"@/components/ui/input-group\"\n\nimport ComboboxTrigger from \"./combobox-trigger.astro\"\n\ntype Props = HTMLAttributes<\"input\"> & {\n showTrigger?: boolean\n showClear?: boolean\n}\n\nconst {\n class: className,\n type = \"text\",\n disabled = false,\n showTrigger = true,\n showClear = false,\n ...props\n} = Astro.props\n---\n\n\n \n \n {showTrigger && (\n \n )}\n {showClear && (\n \n \n \n )}\n \n \n\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport XIcon from \"@lucide/astro/icons/x\"\n\nimport { cn } from \"@/lib/utils\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n} from \"@/components/ui/input-group\"\n\nimport ComboboxTrigger from \"./combobox-trigger.astro\"\n\ntype Props = HTMLAttributes<\"input\"> & {\n showTrigger?: boolean\n showClear?: boolean\n clearLabel?: string\n}\n\nconst {\n class: className,\n type = \"text\",\n disabled = false,\n showTrigger = true,\n showClear = false,\n clearLabel = \"Clear selection\",\n ...props\n} = Astro.props\n---\n\n\n \n \n {showTrigger && (\n \n )}\n {showClear && (\n \n \n \n )}\n \n \n\n", "type": "registry:ui" }, { diff --git a/public/r/command.json b/public/r/command.json index 4e92092ea..f664cd338 100644 --- a/public/r/command.json +++ b/public/r/command.json @@ -4,9 +4,9 @@ "title": "Command", "description": "Command menu for search and quick actions.", "dependencies": [ - "@data-slot/command@^1.0.2", + "@data-slot/command@^1.1.2", "@lucide/astro", - "@data-slot/core@^1.0.2" + "@data-slot/core@^1.1.2" ], "registryDependencies": [ "@fulldev/dialog" diff --git a/public/r/components.json b/public/r/components.json index 90872f412..e0f9f98bf 100644 --- a/public/r/components.json +++ b/public/r/components.json @@ -18,6 +18,7 @@ "@fulldev/card", "@fulldev/carousel", "@fulldev/checkbox", + "@fulldev/code-block", "@fulldev/collapsible", "@fulldev/combobox", "@fulldev/command", @@ -43,6 +44,7 @@ "@fulldev/pagination", "@fulldev/popover", "@fulldev/price", + "@fulldev/progress", "@fulldev/radio-group", "@fulldev/rating", "@fulldev/resizable", diff --git a/public/r/dialog.json b/public/r/dialog.json index a3e87d72e..42b73fa83 100644 --- a/public/r/dialog.json +++ b/public/r/dialog.json @@ -4,7 +4,7 @@ "title": "Dialog", "description": "A window overlaid on either the primary window or another dialog window, rendering the content underneath inert.", "dependencies": [ - "@data-slot/dialog@^1.0.2", + "@data-slot/dialog@^1.1.2", "@lucide/astro" ], "registryDependencies": [ diff --git a/public/r/drawer.json b/public/r/drawer.json index d4186a27d..343339cfc 100644 --- a/public/r/drawer.json +++ b/public/r/drawer.json @@ -4,7 +4,7 @@ "title": "Drawer", "description": "A drawer component that slides in from any edge of the screen.", "dependencies": [ - "@data-slot/drawer@^1.0.2" + "@data-slot/drawer@^1.1.2" ], "registryDependencies": [ "@fulldev/button" diff --git a/public/r/dropdown-menu.json b/public/r/dropdown-menu.json index 0adc16241..4495930c2 100644 --- a/public/r/dropdown-menu.json +++ b/public/r/dropdown-menu.json @@ -4,7 +4,7 @@ "title": "Dropdown Menu", "description": "Displays a menu to the user, such as a set of actions or functions, triggered by a button.", "dependencies": [ - "@data-slot/dropdown-menu@^1.0.2", + "@data-slot/dropdown-menu@^1.1.2", "@lucide/astro" ], "files": [ diff --git a/public/r/hover-card.json b/public/r/hover-card.json index 511766625..e1e8b21ac 100644 --- a/public/r/hover-card.json +++ b/public/r/hover-card.json @@ -4,8 +4,8 @@ "title": "Hover Card", "description": "For sighted users to preview content available behind a link.", "dependencies": [ - "@data-slot/hover-card@^1.0.2", - "@data-slot/core@^1.0.2" + "@data-slot/hover-card@^1.1.2", + "@data-slot/core@^1.1.2" ], "files": [ { diff --git a/public/r/navigation-menu.json b/public/r/navigation-menu.json index 5e76cdea7..3e2bce997 100644 --- a/public/r/navigation-menu.json +++ b/public/r/navigation-menu.json @@ -4,7 +4,7 @@ "title": "Navigation Menu", "description": "A collection of links for navigating websites.", "dependencies": [ - "@data-slot/navigation-menu@^1.0.2", + "@data-slot/navigation-menu@^1.1.2", "@lucide/astro" ], "files": [ diff --git a/public/r/popover.json b/public/r/popover.json index 20520698b..6572d0fce 100644 --- a/public/r/popover.json +++ b/public/r/popover.json @@ -4,7 +4,7 @@ "title": "Popover", "description": "Displays rich content in a floating layer, triggered by a button.", "dependencies": [ - "@data-slot/popover@^1.0.2" + "@data-slot/popover@^1.1.2" ], "files": [ { diff --git a/public/r/progress-examples.json b/public/r/progress-examples.json new file mode 100644 index 000000000..4fb614b85 --- /dev/null +++ b/public/r/progress-examples.json @@ -0,0 +1,33 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "progress-examples", + "title": "Progress examples", + "description": "The examples from the shadcn/ui Progress docs.", + "registryDependencies": [ + "@fulldev/progress" + ], + "files": [ + { + "path": "src/components/examples/progress/progress-custom-max.astro", + "content": "---\nimport { Progress } from \"@/components/ui/progress\"\n---\n\n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-demo.astro", + "content": "---\nimport { Progress } from \"@/components/ui/progress\"\n---\n\n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-indeterminate.astro", + "content": "---\nimport { Progress } from \"@/components/ui/progress\"\n---\n\n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-rtl.astro", + "content": "---\nimport { Progress } from \"@/components/ui/progress\"\n---\n\n\n", + "type": "registry:component" + } + ], + "docs": "https://ui.full.dev/components/progress/", + "type": "registry:example" +} \ No newline at end of file diff --git a/public/r/progress.json b/public/r/progress.json new file mode 100644 index 000000000..8cd73e59a --- /dev/null +++ b/public/r/progress.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "progress", + "title": "Progress", + "description": "Shows how much of a task or sequence is complete.", + "files": [ + { + "path": "src/components/ui/progress/index.ts", + "content": "export { default as Progress } from \"./progress.astro\"\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/progress/progress.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\"> & {\n value?: number | null\n max?: number\n label?: string\n showValue?: boolean\n}\n\nconst {\n class: className,\n value,\n max = 100,\n label,\n showValue = false,\n \"aria-label\": ariaLabel = label || \"Progress\",\n \"aria-labelledby\": ariaLabelledby,\n \"aria-valuetext\": ariaValueText,\n ...props\n} = Astro.props\n\nconst resolvedMax = Number.isFinite(max) && max > 0 ? max : 100\nconst resolvedValue =\n typeof value === \"number\" && Number.isFinite(value)\n ? Math.min(resolvedMax, Math.max(0, value))\n : undefined\nconst percentage =\n resolvedValue === undefined ? undefined : (resolvedValue / resolvedMax) * 100\nconst stateAttributes = {\n \"data-indeterminate\": resolvedValue === undefined ? \"\" : undefined,\n \"data-complete\": resolvedValue === resolvedMax ? \"\" : undefined,\n \"data-progressing\":\n resolvedValue !== undefined && resolvedValue < resolvedMax ? \"\" : undefined,\n}\n---\n\n\n \n {label && (\n \n {label}\n \n )}\n {showValue && percentage !== undefined && (\n \n {Math.round(percentage)}%\n \n )}\n \n \n \n \n\n", + "type": "registry:ui" + } + ], + "docs": "https://ui.full.dev/components/progress/", + "categories": [ + "ui" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/public/r/radio-group.json b/public/r/radio-group.json index 00e4e9800..65f1f7199 100644 --- a/public/r/radio-group.json +++ b/public/r/radio-group.json @@ -4,7 +4,7 @@ "title": "Radio Group", "description": "A set of checkable buttons, known as radio buttons, where no more than one of the buttons can be checked at a time.", "dependencies": [ - "@data-slot/radio-group@^1.0.2" + "@data-slot/radio-group@^1.1.2" ], "files": [ { diff --git a/public/r/registry.json b/public/r/registry.json index f2e121aa9..fadea2621 100644 --- a/public/r/registry.json +++ b/public/r/registry.json @@ -13,7 +13,7 @@ ], "docs": "https://ui.full.dev/components/accordion/", "dependencies": [ - "@data-slot/accordion@^1.0.2", + "@data-slot/accordion@^1.1.2", "@lucide/astro" ], "files": [ @@ -81,7 +81,7 @@ ], "docs": "https://ui.full.dev/components/alert-dialog/", "dependencies": [ - "@data-slot/alert-dialog@^1.0.2" + "@data-slot/alert-dialog@^1.1.2" ], "registryDependencies": [ "@fulldev/button" @@ -367,6 +367,61 @@ } ] }, + { + "name": "code-block", + "type": "registry:ui", + "title": "Code Block", + "description": "Code and plain-text snippets with copy actions, line numbers and highlighted lines.", + "categories": [ + "ui" + ], + "docs": "https://ui.full.dev/components/code-block/", + "dependencies": [ + "@lucide/astro", + "class-variance-authority" + ], + "registryDependencies": [ + "@fulldev/button" + ], + "files": [ + { + "path": "src/components/ui/code-block/code-block-actions.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-content.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-copy-button.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-footer.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-header.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-line.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-title.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/index.ts", + "type": "registry:ui" + } + ] + }, { "name": "collapsible", "type": "registry:ui", @@ -377,7 +432,7 @@ ], "docs": "https://ui.full.dev/components/collapsible/", "dependencies": [ - "@data-slot/collapsible@^1.0.2" + "@data-slot/collapsible@^1.1.2" ], "files": [ { @@ -408,8 +463,8 @@ ], "docs": "https://ui.full.dev/components/combobox/", "dependencies": [ - "@data-slot/combobox@^1.0.2", - "@data-slot/core@^1.0.2", + "@data-slot/combobox@^1.1.2", + "@data-slot/core@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -476,9 +531,9 @@ ], "docs": "https://ui.full.dev/components/command/", "dependencies": [ - "@data-slot/command@^1.0.2", + "@data-slot/command@^1.1.2", "@lucide/astro", - "@data-slot/core@^1.0.2" + "@data-slot/core@^1.1.2" ], "registryDependencies": [ "@fulldev/dialog" @@ -536,7 +591,7 @@ ], "docs": "https://ui.full.dev/components/dialog/", "dependencies": [ - "@data-slot/dialog@^1.0.2", + "@data-slot/dialog@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -599,7 +654,7 @@ ], "docs": "https://ui.full.dev/components/dropdown-menu/", "dependencies": [ - "@data-slot/dropdown-menu@^1.0.2", + "@data-slot/dropdown-menu@^1.1.2", "@lucide/astro" ], "files": [ @@ -818,8 +873,8 @@ ], "docs": "https://ui.full.dev/components/hover-card/", "dependencies": [ - "@data-slot/hover-card@^1.0.2", - "@data-slot/core@^1.0.2" + "@data-slot/hover-card@^1.1.2", + "@data-slot/core@^1.1.2" ], "files": [ { @@ -1183,7 +1238,7 @@ ], "docs": "https://ui.full.dev/components/navigation-menu/", "dependencies": [ - "@data-slot/navigation-menu@^1.0.2", + "@data-slot/navigation-menu@^1.1.2", "@lucide/astro" ], "files": [ @@ -1270,7 +1325,7 @@ ], "docs": "https://ui.full.dev/components/popover/", "dependencies": [ - "@data-slot/popover@^1.0.2" + "@data-slot/popover@^1.1.2" ], "files": [ { @@ -1335,6 +1390,26 @@ } ] }, + { + "name": "progress", + "type": "registry:ui", + "title": "Progress", + "description": "Shows how much of a task or sequence is complete.", + "categories": [ + "ui" + ], + "docs": "https://ui.full.dev/components/progress/", + "files": [ + { + "path": "src/components/ui/progress/index.ts", + "type": "registry:ui" + }, + { + "path": "src/components/ui/progress/progress.astro", + "type": "registry:ui" + } + ] + }, { "name": "radio-group", "type": "registry:ui", @@ -1345,7 +1420,7 @@ ], "docs": "https://ui.full.dev/components/radio-group/", "dependencies": [ - "@data-slot/radio-group@^1.0.2" + "@data-slot/radio-group@^1.1.2" ], "files": [ { @@ -1395,7 +1470,7 @@ ], "docs": "https://ui.full.dev/components/select/", "dependencies": [ - "@data-slot/select@^1.0.2", + "@data-slot/select@^1.1.2", "@lucide/astro" ], "files": [ @@ -1499,7 +1574,7 @@ ], "docs": "https://ui.full.dev/components/sheet/", "dependencies": [ - "@data-slot/dialog@^1.0.2", + "@data-slot/dialog@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -1555,7 +1630,7 @@ ], "docs": "https://ui.full.dev/components/sidebar/", "dependencies": [ - "@data-slot/tooltip@^1.0.2", + "@data-slot/tooltip@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -1676,7 +1751,7 @@ ], "docs": "https://ui.full.dev/components/slider/", "dependencies": [ - "@data-slot/slider@^1.0.2" + "@data-slot/slider@^1.1.2" ], "files": [ { @@ -1742,7 +1817,7 @@ ], "docs": "https://ui.full.dev/components/switch/", "dependencies": [ - "@data-slot/switch@^1.0.2" + "@data-slot/switch@^1.1.2" ], "files": [ { @@ -1813,7 +1888,7 @@ ], "docs": "https://ui.full.dev/components/tabs/", "dependencies": [ - "@data-slot/tabs@^1.0.2" + "@data-slot/tabs@^1.1.2" ], "files": [ { @@ -1888,7 +1963,7 @@ ], "docs": "https://ui.full.dev/components/toggle/", "dependencies": [ - "@data-slot/toggle@^1.0.2" + "@data-slot/toggle@^1.1.2" ], "files": [ { @@ -1935,7 +2010,7 @@ ], "docs": "https://ui.full.dev/components/tooltip/", "dependencies": [ - "@data-slot/tooltip@^1.0.2" + "@data-slot/tooltip@^1.1.2" ], "files": [ { @@ -2070,7 +2145,7 @@ ], "docs": "https://ui.full.dev/components/drawer/", "dependencies": [ - "@data-slot/drawer@^1.0.2" + "@data-slot/drawer@^1.1.2" ], "registryDependencies": [ "@fulldev/button" @@ -2160,7 +2235,7 @@ ], "docs": "https://ui.full.dev/components/resizable/", "dependencies": [ - "@data-slot/resizable@^1.0.2" + "@data-slot/resizable@^1.1.2" ], "files": [ { @@ -2191,7 +2266,7 @@ ], "docs": "https://ui.full.dev/components/toast/", "dependencies": [ - "@data-slot/toast@^1.0.2", + "@data-slot/toast@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -2258,7 +2333,7 @@ ], "docs": "https://ui.full.dev/components/toggle-group/", "dependencies": [ - "@data-slot/toggle-group@^1.0.2" + "@data-slot/toggle-group@^1.1.2" ], "registryDependencies": [ "@fulldev/toggle" @@ -2459,6 +2534,7 @@ "@fulldev/card", "@fulldev/carousel", "@fulldev/checkbox", + "@fulldev/code-block", "@fulldev/collapsible", "@fulldev/combobox", "@fulldev/command", @@ -2484,6 +2560,7 @@ "@fulldev/pagination", "@fulldev/popover", "@fulldev/price", + "@fulldev/progress", "@fulldev/radio-group", "@fulldev/rating", "@fulldev/resizable", @@ -5359,6 +5436,34 @@ } ] }, + { + "name": "code-block-examples", + "type": "registry:example", + "title": "Code Block examples", + "description": "The examples from the shadcn/ui Code Block docs.", + "docs": "https://ui.full.dev/components/code-block/", + "registryDependencies": [ + "@fulldev/code-block" + ], + "files": [ + { + "path": "src/components/examples/code-block/code-block-demo.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-lines.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-numbered.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-wrap.astro", + "type": "registry:component" + } + ] + }, { "name": "collapsible-examples", "type": "registry:example", @@ -5385,6 +5490,10 @@ "path": "src/components/examples/collapsible/collapsible-demo.astro", "type": "registry:component" }, + { + "path": "src/components/examples/collapsible/collapsible-dismissal.astro", + "type": "registry:component" + }, { "path": "src/components/examples/collapsible/collapsible-file-tree.astro", "type": "registry:component" @@ -6185,6 +6294,34 @@ } ] }, + { + "name": "progress-examples", + "type": "registry:example", + "title": "Progress examples", + "description": "The examples from the shadcn/ui Progress docs.", + "docs": "https://ui.full.dev/components/progress/", + "registryDependencies": [ + "@fulldev/progress" + ], + "files": [ + { + "path": "src/components/examples/progress/progress-custom-max.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-demo.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-indeterminate.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-rtl.astro", + "type": "registry:component" + } + ] + }, { "name": "radio-group-examples", "type": "registry:example", diff --git a/public/r/resizable.json b/public/r/resizable.json index 5573e780f..b58e4687f 100644 --- a/public/r/resizable.json +++ b/public/r/resizable.json @@ -4,7 +4,7 @@ "title": "Resizable", "description": "Accessible panel groups with pointer and keyboard resizing.", "dependencies": [ - "@data-slot/resizable@^1.0.2" + "@data-slot/resizable@^1.1.2" ], "files": [ { diff --git a/public/r/select.json b/public/r/select.json index 1b912dd29..197d3ef5a 100644 --- a/public/r/select.json +++ b/public/r/select.json @@ -4,7 +4,7 @@ "title": "Select", "description": "Displays a list of options for the user to pick from, triggered by a button.", "dependencies": [ - "@data-slot/select@^1.0.2", + "@data-slot/select@^1.1.2", "@lucide/astro" ], "files": [ diff --git a/public/r/sheet.json b/public/r/sheet.json index 90db5f63a..87a73acf8 100644 --- a/public/r/sheet.json +++ b/public/r/sheet.json @@ -4,7 +4,7 @@ "title": "Sheet", "description": "A sliding panel component that appears from the edge of the screen.", "dependencies": [ - "@data-slot/dialog@^1.0.2", + "@data-slot/dialog@^1.1.2", "@lucide/astro" ], "registryDependencies": [ diff --git a/public/r/sidebar.json b/public/r/sidebar.json index 72477f7b8..92c526d21 100644 --- a/public/r/sidebar.json +++ b/public/r/sidebar.json @@ -4,7 +4,7 @@ "title": "Sidebar", "description": "A composable, themeable, and customizable Astro sidebar component.", "dependencies": [ - "@data-slot/tooltip@^1.0.2", + "@data-slot/tooltip@^1.1.2", "@lucide/astro" ], "registryDependencies": [ diff --git a/public/r/slider.json b/public/r/slider.json index 1994ca5a7..8de2e4374 100644 --- a/public/r/slider.json +++ b/public/r/slider.json @@ -4,7 +4,7 @@ "title": "Slider", "description": "An input where the user selects a value from within a given range.", "dependencies": [ - "@data-slot/slider@^1.0.2" + "@data-slot/slider@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-luma/accordion.json b/public/r/styles/base-luma/accordion.json index 5fd296a82..3f65ff7a4 100644 --- a/public/r/styles/base-luma/accordion.json +++ b/public/r/styles/base-luma/accordion.json @@ -4,7 +4,7 @@ "title": "Accordion", "description": "A vertically stacked set of interactive headings that each reveal a section of content.", "dependencies": [ - "@data-slot/accordion@^1.0.2", + "@data-slot/accordion@^1.1.2", "@lucide/astro" ], "files": [ diff --git a/public/r/styles/base-luma/alert-dialog.json b/public/r/styles/base-luma/alert-dialog.json index 76af32bca..a468db30a 100644 --- a/public/r/styles/base-luma/alert-dialog.json +++ b/public/r/styles/base-luma/alert-dialog.json @@ -4,7 +4,7 @@ "title": "Alert Dialog", "description": "A modal dialog for important confirmations that expects a response.", "dependencies": [ - "@data-slot/alert-dialog@^1.0.2" + "@data-slot/alert-dialog@^1.1.2" ], "registryDependencies": [ "@fulldev/button" diff --git a/public/r/styles/base-luma/code-block-examples.json b/public/r/styles/base-luma/code-block-examples.json new file mode 100644 index 000000000..2dc78df89 --- /dev/null +++ b/public/r/styles/base-luma/code-block-examples.json @@ -0,0 +1,33 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "code-block-examples", + "title": "Code Block examples", + "description": "The examples from the shadcn/ui Code Block docs.", + "registryDependencies": [ + "@fulldev/code-block" + ], + "files": [ + { + "path": "src/components/examples/code-block/code-block-demo.astro", + "content": "---\nimport {\n CodeBlock,\n CodeBlockActions,\n CodeBlockContent,\n CodeBlockCopyButton,\n CodeBlockHeader,\n CodeBlockTitle,\n} from \"@/components/ui/code-block\"\n\nconst code = `import { Button } from \"@/components/ui/button\"\n\n`\n---\n\n\n \n contact.astro\n \n \n \n \n \n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-lines.astro", + "content": "---\nimport {\n CodeBlock,\n CodeBlockContent,\n CodeBlockLine,\n} from \"@/components/ui/code-block\"\n---\n\n\n \n export const site = {\n {' title: \"Our website\",'}\n \n {' title: \"Our new website\",'}\n \n \n {' lang: \"en\",'}\n }\n \n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-numbered.astro", + "content": "---\nimport { CodeBlock, CodeBlockContent } from \"@/components/ui/code-block\"\n\nconst code = `{\n \"name\": \"our-website\",\n\n \"private\": true\n}`\n---\n\n\n \n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-wrap.astro", + "content": "---\nimport {\n CodeBlock,\n CodeBlockActions,\n CodeBlockContent,\n CodeBlockCopyButton,\n CodeBlockFooter,\n} from \"@/components/ui/code-block\"\n\nconst code =\n \"A long explanation can wrap inside a code block without making the surrounding article or the page scroll horizontally.\"\n---\n\n\n \n \n \n \n Plain text, with line wrapping.\n\n", + "type": "registry:component" + } + ], + "docs": "https://ui.full.dev/components/code-block/", + "type": "registry:example" +} \ No newline at end of file diff --git a/public/r/styles/base-luma/code-block.json b/public/r/styles/base-luma/code-block.json new file mode 100644 index 000000000..f91b61baf --- /dev/null +++ b/public/r/styles/base-luma/code-block.json @@ -0,0 +1,65 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "code-block", + "title": "Code Block", + "description": "Code and plain-text snippets with copy actions, line numbers and highlighted lines.", + "dependencies": [ + "@lucide/astro", + "class-variance-authority" + ], + "registryDependencies": [ + "@fulldev/button" + ], + "files": [ + { + "path": "src/components/ui/code-block/code-block-actions.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\nconst { class: className, ...props } = Astro.props\n---\n\n&]:m-0 [[data-slot=code-block]>&]:top-4 [[data-slot=code-block]>&]:end-4 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:top-2 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:end-2 [[data-slot=code-block]>&]:*:[button]:bg-background [[data-slot=code-block]>&]:*:[button]:ring-1 [[data-slot=code-block]>&]:*:[button]:ring-foreground/10 ms-auto flex shrink-0 items-center [[data-slot=code-block]>&]:absolute [[data-slot=code-block]>&]:z-10 [[data-slot=code-block]>&]:opacity-0 [[data-slot=code-block]>&]:transition-opacity [[data-slot=code-block]>&]:group-focus-within/code-block:opacity-100 [[data-slot=code-block]>&]:group-hover/code-block:opacity-100 [[data-slot=code-block]>&]:pointer-coarse:opacity-100\",\n className\n )}\n {...props}\n>\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-content.astro", + "content": "---\n/* eslint-disable astro/jsx-a11y/no-noninteractive-tabindex -- Focusable code supports keyboard scrolling, as in shadcn/ui. */\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\nimport CodeBlockLine from \"./code-block-line.astro\"\n\ntype Props = HTMLAttributes<\"pre\"> & {\n code?: string\n wrap?: boolean\n lineNumbers?: boolean\n startLine?: number\n}\n\nconst {\n class: className,\n code,\n wrap = false,\n lineNumbers = false,\n startLine = 1,\n style,\n ...props\n} = Astro.props\n\nconst contentStyle =\n typeof style === \"string\"\n ? `counter-reset: line ${startLine - 1}; ${style}`\n : { counterReset: `line ${startLine - 1}`, ...style }\n---\n\n{code !== undefined ? lineNumbers ? code.replace(/\\n$/, \"\").split(\"\\n\").map((line) => {line}) : code : }\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-copy-button.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport CheckIcon from \"@lucide/astro/icons/check\"\nimport CopyIcon from \"@lucide/astro/icons/copy\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button, type ButtonVariantProps } from \"@/components/ui/button\"\n\ntype Props = Omit, \"value\" | \"type\"> &\n ButtonVariantProps & {\n value: string\n copyLabel?: string\n copiedLabel?: string\n errorLabel?: string\n }\n\nconst {\n class: className,\n value,\n variant = \"ghost\",\n size = \"icon-xs\",\n copyLabel = \"Copy\",\n copiedLabel = \"Copied\",\n errorLabel = \"Could not copy\",\n ...props\n} = Astro.props\n---\n\n\n \n \n\n\n\n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-footer.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\nconst { class: className, ...props } = Astro.props\n---\n\n\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-header.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\nconst { class: className, ...props } = Astro.props\n---\n\n[data-slot=code-block-title]]:min-w-0\",\n className\n )}\n {...props}\n>\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-line.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 \"-mx-5 px-5 in-data-numbered:gap-x-3 before:min-w-6 before:text-end before:text-muted-foreground after:start-1 after:text-muted-foreground group-data-[size=sm]/code-block:-mx-3 group-data-[size=sm]/code-block:px-3 relative block min-h-lh before:select-none after:absolute after:top-0 after:select-none in-data-numbered:col-span-2 in-data-numbered:grid in-data-numbered:grid-cols-subgrid in-data-numbered:[counter-increment:line] in-data-numbered:before:content-[counter(line)] in-data-numbered:supports-[content:counter(line)_/_'']:before:content-[counter(line)_/_'']\",\n {\n variants: {\n variant: {\n default: \"\",\n added: \"bg-foreground/5 after:content-['+']\",\n removed: \"bg-destructive/10 after:text-destructive after:content-['−']\",\n highlighted: \"bg-foreground/5\",\n },\n },\n defaultVariants: { variant: \"default\" },\n }\n)\n\ntype Props = HTMLAttributes<\"span\"> & VariantProps\nconst { class: className, variant = \"default\", ...props } = Astro.props\n---\n\n\n \n \n {\"\\n\"}\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-title.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\nconst { class: className, ...props } = Astro.props\n---\n\n\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block.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 \"rounded-2xl text-sm data-[size=sm]:text-xs has-[>[data-slot=code-block-content]:focus-visible]:ring-3 has-[>[data-slot=code-block-content]:focus-visible]:ring-ring/30 data-[size=sm]:rounded-xl group/code-block relative flex w-full min-w-0 flex-col overflow-hidden\",\n {\n variants: {\n variant: {\n default: \"bg-muted text-foreground ring-1 ring-foreground/5 dark:ring-foreground/10\",\n destructive: \"bg-destructive/5 text-destructive ring-1 ring-destructive/15 dark:bg-destructive/10 dark:ring-destructive/20\",\n },\n },\n defaultVariants: { variant: \"default\" },\n }\n)\n\ntype Props = HTMLAttributes<\"div\"> &\n VariantProps & {\n size?: \"default\" | \"sm\"\n }\n\nconst {\n class: className,\n variant = \"default\",\n size = \"default\",\n ...props\n} = Astro.props\n---\n\n\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/index.ts", + "content": "export { default as CodeBlock } from \"./code-block.astro\"\nexport { default as CodeBlockHeader } from \"./code-block-header.astro\"\nexport { default as CodeBlockTitle } from \"./code-block-title.astro\"\nexport { default as CodeBlockActions } from \"./code-block-actions.astro\"\nexport { default as CodeBlockCopyButton } from \"./code-block-copy-button.astro\"\nexport { default as CodeBlockContent } from \"./code-block-content.astro\"\nexport { default as CodeBlockLine } from \"./code-block-line.astro\"\nexport { default as CodeBlockFooter } from \"./code-block-footer.astro\"\n", + "type": "registry:ui" + } + ], + "docs": "https://ui.full.dev/components/code-block/", + "categories": [ + "ui" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/public/r/styles/base-luma/collapsible-examples.json b/public/r/styles/base-luma/collapsible-examples.json index 56b092a2f..7d0f08173 100644 --- a/public/r/styles/base-luma/collapsible-examples.json +++ b/public/r/styles/base-luma/collapsible-examples.json @@ -25,6 +25,11 @@ "content": "---\nimport ChevronsUpDown from \"@lucide/astro/icons/chevrons-up-down\"\n\nimport { buttonVariants } from \"@/components/ui/button\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/components/ui/collapsible\"\n---\n\n\n
\n

Order #4189

\n \n \n Toggle details\n \n
\n
\n Status\n Shipped\n
\n \n
\n

Shipping address

\n

100 Market St, San Francisco

\n
\n
\n

Items

\n

2x Studio Headphones

\n
\n
\n
\n", "type": "registry:component" }, + { + "path": "src/components/examples/collapsible/collapsible-dismissal.astro", + "content": "---\nimport ChevronDownIcon from \"@lucide/astro/icons/chevron-down\"\n\nimport { buttonVariants } from \"@/components/ui/button\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/components/ui/collapsible\"\n---\n\n
\n \n \n Browse documentation\n \n \n \n \n \n \n

\n Open the panel, then press Escape or click outside it to close.\n

\n
\n", + "type": "registry:component" + }, { "path": "src/components/examples/collapsible/collapsible-file-tree.astro", "content": "---\nimport ChevronRightIcon from \"@lucide/astro/icons/chevron-right\"\nimport FileIcon from \"@lucide/astro/icons/file\"\nimport FolderIcon from \"@lucide/astro/icons/folder\"\n\nimport { Button, buttonVariants } from \"@/components/ui/button\"\nimport { Card, CardContent, CardHeader } from \"@/components/ui/card\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/components/ui/collapsible\"\nimport { Tabs, TabsList, TabsTrigger } from \"@/components/ui/tabs\"\n\ntype FileTreeItem = { name: string } | { name: string; items: FileTreeItem[] }\n\nconst fileTree: FileTreeItem[] = [\n {\n name: \"components\",\n items: [\n {\n name: \"ui\",\n items: [\n { name: \"button.tsx\" },\n { name: \"card.tsx\" },\n { name: \"dialog.tsx\" },\n { name: \"input.tsx\" },\n { name: \"select.tsx\" },\n { name: \"table.tsx\" },\n ],\n },\n { name: \"login-form.tsx\" },\n { name: \"register-form.tsx\" },\n ],\n },\n {\n name: \"lib\",\n items: [{ name: \"utils.ts\" }, { name: \"cn.ts\" }, { name: \"api.ts\" }],\n },\n {\n name: \"hooks\",\n items: [\n { name: \"use-media-query.ts\" },\n { name: \"use-debounce.ts\" },\n { name: \"use-local-storage.ts\" },\n ],\n },\n {\n name: \"types\",\n items: [{ name: \"index.d.ts\" }, { name: \"api.d.ts\" }],\n },\n {\n name: \"public\",\n items: [{ name: \"favicon.ico\" }, { name: \"logo.svg\" }, { name: \"images\" }],\n },\n { name: \"app.tsx\" },\n { name: \"layout.tsx\" },\n { name: \"globals.css\" },\n { name: \"package.json\" },\n { name: \"tsconfig.json\" },\n { name: \"README.md\" },\n { name: \".gitignore\" },\n]\n\n// Renders the card, or one tree level when Astro.self passes `items`.\nconst { items } = Astro.props as { items?: FileTreeItem[] }\n---\n\n{items ? (\n items.map((fileItem) =>\n \"items\" in fileItem ? (\n \n \n \n \n {fileItem.name}\n \n \n
\n \n
\n
\n
\n ) : (\n \n \n {fileItem.name}\n \n )\n )\n) : (\n \n \n \n \n Explorer\n Outline\n \n \n \n \n
\n \n
\n
\n
\n)}\n", diff --git a/public/r/styles/base-luma/collapsible.json b/public/r/styles/base-luma/collapsible.json index 51460f6ff..dd0c03d41 100644 --- a/public/r/styles/base-luma/collapsible.json +++ b/public/r/styles/base-luma/collapsible.json @@ -4,12 +4,12 @@ "title": "Collapsible", "description": "An interactive component which expands/collapses a panel.", "dependencies": [ - "@data-slot/collapsible@^1.0.2" + "@data-slot/collapsible@^1.1.2" ], "files": [ { "path": "src/components/ui/collapsible/collapsible.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\"> & {\n // \"li\" makes a list item the collapsible, such as a sidebar menu item.\n as?: \"div\" | \"li\"\n defaultOpen?: boolean\n hiddenUntilFound?: boolean\n}\n\nconst {\n as: Tag = \"div\",\n class: className,\n defaultOpen,\n hiddenUntilFound,\n ...props\n} = Astro.props\n---\n\n\n \n\n\n\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\"> & {\n // \"li\" makes a list item the collapsible, such as a sidebar menu item.\n as?: \"div\" | \"li\"\n defaultOpen?: boolean\n hiddenUntilFound?: boolean\n closeOnEscape?: boolean\n closeOnClickOutside?: boolean\n}\n\nconst {\n as: Tag = \"div\",\n class: className,\n defaultOpen,\n hiddenUntilFound,\n closeOnEscape,\n closeOnClickOutside,\n ...props\n} = Astro.props\n---\n\n\n \n\n\n\n", "type": "registry:ui" }, { diff --git a/public/r/styles/base-luma/combobox.json b/public/r/styles/base-luma/combobox.json index 16dde6511..1ea8593fb 100644 --- a/public/r/styles/base-luma/combobox.json +++ b/public/r/styles/base-luma/combobox.json @@ -4,8 +4,8 @@ "title": "Combobox", "description": "Autocomplete input with a list of suggestions.", "dependencies": [ - "@data-slot/combobox@^1.0.2", - "@data-slot/core@^1.0.2", + "@data-slot/combobox@^1.1.2", + "@data-slot/core@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -34,7 +34,7 @@ }, { "path": "src/components/ui/combobox/combobox-input.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport XIcon from \"@lucide/astro/icons/x\"\n\nimport { cn } from \"@/lib/utils\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n} from \"@/components/ui/input-group\"\n\nimport ComboboxTrigger from \"./combobox-trigger.astro\"\n\ntype Props = HTMLAttributes<\"input\"> & {\n showTrigger?: boolean\n showClear?: boolean\n}\n\nconst {\n class: className,\n type = \"text\",\n disabled = false,\n showTrigger = true,\n showClear = false,\n ...props\n} = Astro.props\n---\n\n\n \n \n {showTrigger && (\n \n )}\n {showClear && (\n \n \n \n )}\n \n \n\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport XIcon from \"@lucide/astro/icons/x\"\n\nimport { cn } from \"@/lib/utils\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n} from \"@/components/ui/input-group\"\n\nimport ComboboxTrigger from \"./combobox-trigger.astro\"\n\ntype Props = HTMLAttributes<\"input\"> & {\n showTrigger?: boolean\n showClear?: boolean\n clearLabel?: string\n}\n\nconst {\n class: className,\n type = \"text\",\n disabled = false,\n showTrigger = true,\n showClear = false,\n clearLabel = \"Clear selection\",\n ...props\n} = Astro.props\n---\n\n\n \n \n {showTrigger && (\n \n )}\n {showClear && (\n \n \n \n )}\n \n \n\n", "type": "registry:ui" }, { diff --git a/public/r/styles/base-luma/command.json b/public/r/styles/base-luma/command.json index c3d2a8743..47e318171 100644 --- a/public/r/styles/base-luma/command.json +++ b/public/r/styles/base-luma/command.json @@ -4,9 +4,9 @@ "title": "Command", "description": "Command menu for search and quick actions.", "dependencies": [ - "@data-slot/command@^1.0.2", + "@data-slot/command@^1.1.2", "@lucide/astro", - "@data-slot/core@^1.0.2" + "@data-slot/core@^1.1.2" ], "registryDependencies": [ "@fulldev/dialog" diff --git a/public/r/styles/base-luma/components.json b/public/r/styles/base-luma/components.json index 90872f412..e0f9f98bf 100644 --- a/public/r/styles/base-luma/components.json +++ b/public/r/styles/base-luma/components.json @@ -18,6 +18,7 @@ "@fulldev/card", "@fulldev/carousel", "@fulldev/checkbox", + "@fulldev/code-block", "@fulldev/collapsible", "@fulldev/combobox", "@fulldev/command", @@ -43,6 +44,7 @@ "@fulldev/pagination", "@fulldev/popover", "@fulldev/price", + "@fulldev/progress", "@fulldev/radio-group", "@fulldev/rating", "@fulldev/resizable", diff --git a/public/r/styles/base-luma/dialog.json b/public/r/styles/base-luma/dialog.json index 00371f5fb..fcaca0381 100644 --- a/public/r/styles/base-luma/dialog.json +++ b/public/r/styles/base-luma/dialog.json @@ -4,7 +4,7 @@ "title": "Dialog", "description": "A window overlaid on either the primary window or another dialog window, rendering the content underneath inert.", "dependencies": [ - "@data-slot/dialog@^1.0.2", + "@data-slot/dialog@^1.1.2", "@lucide/astro" ], "registryDependencies": [ diff --git a/public/r/styles/base-luma/drawer.json b/public/r/styles/base-luma/drawer.json index 0829c2bf3..c4de548b8 100644 --- a/public/r/styles/base-luma/drawer.json +++ b/public/r/styles/base-luma/drawer.json @@ -4,7 +4,7 @@ "title": "Drawer", "description": "A drawer component that slides in from any edge of the screen.", "dependencies": [ - "@data-slot/drawer@^1.0.2" + "@data-slot/drawer@^1.1.2" ], "registryDependencies": [ "@fulldev/button" diff --git a/public/r/styles/base-luma/dropdown-menu.json b/public/r/styles/base-luma/dropdown-menu.json index 59dce472b..ca89e2c0a 100644 --- a/public/r/styles/base-luma/dropdown-menu.json +++ b/public/r/styles/base-luma/dropdown-menu.json @@ -4,7 +4,7 @@ "title": "Dropdown Menu", "description": "Displays a menu to the user, such as a set of actions or functions, triggered by a button.", "dependencies": [ - "@data-slot/dropdown-menu@^1.0.2", + "@data-slot/dropdown-menu@^1.1.2", "@lucide/astro" ], "files": [ diff --git a/public/r/styles/base-luma/hover-card.json b/public/r/styles/base-luma/hover-card.json index 32e6ab461..c17e2e651 100644 --- a/public/r/styles/base-luma/hover-card.json +++ b/public/r/styles/base-luma/hover-card.json @@ -4,8 +4,8 @@ "title": "Hover Card", "description": "For sighted users to preview content available behind a link.", "dependencies": [ - "@data-slot/hover-card@^1.0.2", - "@data-slot/core@^1.0.2" + "@data-slot/hover-card@^1.1.2", + "@data-slot/core@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-luma/navigation-menu.json b/public/r/styles/base-luma/navigation-menu.json index 0e74af235..4b6dd0254 100644 --- a/public/r/styles/base-luma/navigation-menu.json +++ b/public/r/styles/base-luma/navigation-menu.json @@ -4,7 +4,7 @@ "title": "Navigation Menu", "description": "A collection of links for navigating websites.", "dependencies": [ - "@data-slot/navigation-menu@^1.0.2", + "@data-slot/navigation-menu@^1.1.2", "@lucide/astro" ], "files": [ diff --git a/public/r/styles/base-luma/popover.json b/public/r/styles/base-luma/popover.json index d2096af13..7c1325cdc 100644 --- a/public/r/styles/base-luma/popover.json +++ b/public/r/styles/base-luma/popover.json @@ -4,7 +4,7 @@ "title": "Popover", "description": "Displays rich content in a floating layer, triggered by a button.", "dependencies": [ - "@data-slot/popover@^1.0.2" + "@data-slot/popover@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-luma/progress-examples.json b/public/r/styles/base-luma/progress-examples.json new file mode 100644 index 000000000..4fb614b85 --- /dev/null +++ b/public/r/styles/base-luma/progress-examples.json @@ -0,0 +1,33 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "progress-examples", + "title": "Progress examples", + "description": "The examples from the shadcn/ui Progress docs.", + "registryDependencies": [ + "@fulldev/progress" + ], + "files": [ + { + "path": "src/components/examples/progress/progress-custom-max.astro", + "content": "---\nimport { Progress } from \"@/components/ui/progress\"\n---\n\n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-demo.astro", + "content": "---\nimport { Progress } from \"@/components/ui/progress\"\n---\n\n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-indeterminate.astro", + "content": "---\nimport { Progress } from \"@/components/ui/progress\"\n---\n\n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-rtl.astro", + "content": "---\nimport { Progress } from \"@/components/ui/progress\"\n---\n\n\n", + "type": "registry:component" + } + ], + "docs": "https://ui.full.dev/components/progress/", + "type": "registry:example" +} \ No newline at end of file diff --git a/public/r/styles/base-luma/progress.json b/public/r/styles/base-luma/progress.json new file mode 100644 index 000000000..1434c241b --- /dev/null +++ b/public/r/styles/base-luma/progress.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "progress", + "title": "Progress", + "description": "Shows how much of a task or sequence is complete.", + "files": [ + { + "path": "src/components/ui/progress/index.ts", + "content": "export { default as Progress } from \"./progress.astro\"\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/progress/progress.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\"> & {\n value?: number | null\n max?: number\n label?: string\n showValue?: boolean\n}\n\nconst {\n class: className,\n value,\n max = 100,\n label,\n showValue = false,\n \"aria-label\": ariaLabel = label || \"Progress\",\n \"aria-labelledby\": ariaLabelledby,\n \"aria-valuetext\": ariaValueText,\n ...props\n} = Astro.props\n\nconst resolvedMax = Number.isFinite(max) && max > 0 ? max : 100\nconst resolvedValue =\n typeof value === \"number\" && Number.isFinite(value)\n ? Math.min(resolvedMax, Math.max(0, value))\n : undefined\nconst percentage =\n resolvedValue === undefined ? undefined : (resolvedValue / resolvedMax) * 100\nconst stateAttributes = {\n \"data-indeterminate\": resolvedValue === undefined ? \"\" : undefined,\n \"data-complete\": resolvedValue === resolvedMax ? \"\" : undefined,\n \"data-progressing\":\n resolvedValue !== undefined && resolvedValue < resolvedMax ? \"\" : undefined,\n}\n---\n\n\n \n {label && (\n \n {label}\n \n )}\n {showValue && percentage !== undefined && (\n \n {Math.round(percentage)}%\n \n )}\n \n \n \n \n\n", + "type": "registry:ui" + } + ], + "docs": "https://ui.full.dev/components/progress/", + "categories": [ + "ui" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/public/r/styles/base-luma/radio-group.json b/public/r/styles/base-luma/radio-group.json index 0bdaccb5a..dfd12f473 100644 --- a/public/r/styles/base-luma/radio-group.json +++ b/public/r/styles/base-luma/radio-group.json @@ -4,7 +4,7 @@ "title": "Radio Group", "description": "A set of checkable buttons, known as radio buttons, where no more than one of the buttons can be checked at a time.", "dependencies": [ - "@data-slot/radio-group@^1.0.2" + "@data-slot/radio-group@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-luma/registry.json b/public/r/styles/base-luma/registry.json index db28ca666..f709bdcaa 100644 --- a/public/r/styles/base-luma/registry.json +++ b/public/r/styles/base-luma/registry.json @@ -13,7 +13,7 @@ ], "docs": "https://ui.full.dev/components/accordion/", "dependencies": [ - "@data-slot/accordion@^1.0.2", + "@data-slot/accordion@^1.1.2", "@lucide/astro" ], "files": [ @@ -81,7 +81,7 @@ ], "docs": "https://ui.full.dev/components/alert-dialog/", "dependencies": [ - "@data-slot/alert-dialog@^1.0.2" + "@data-slot/alert-dialog@^1.1.2" ], "registryDependencies": [ "@fulldev/button" @@ -367,6 +367,61 @@ } ] }, + { + "name": "code-block", + "type": "registry:ui", + "title": "Code Block", + "description": "Code and plain-text snippets with copy actions, line numbers and highlighted lines.", + "categories": [ + "ui" + ], + "docs": "https://ui.full.dev/components/code-block/", + "dependencies": [ + "@lucide/astro", + "class-variance-authority" + ], + "registryDependencies": [ + "@fulldev/button" + ], + "files": [ + { + "path": "src/components/ui/code-block/code-block-actions.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-content.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-copy-button.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-footer.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-header.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-line.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-title.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/index.ts", + "type": "registry:ui" + } + ] + }, { "name": "collapsible", "type": "registry:ui", @@ -377,7 +432,7 @@ ], "docs": "https://ui.full.dev/components/collapsible/", "dependencies": [ - "@data-slot/collapsible@^1.0.2" + "@data-slot/collapsible@^1.1.2" ], "files": [ { @@ -408,8 +463,8 @@ ], "docs": "https://ui.full.dev/components/combobox/", "dependencies": [ - "@data-slot/combobox@^1.0.2", - "@data-slot/core@^1.0.2", + "@data-slot/combobox@^1.1.2", + "@data-slot/core@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -476,9 +531,9 @@ ], "docs": "https://ui.full.dev/components/command/", "dependencies": [ - "@data-slot/command@^1.0.2", + "@data-slot/command@^1.1.2", "@lucide/astro", - "@data-slot/core@^1.0.2" + "@data-slot/core@^1.1.2" ], "registryDependencies": [ "@fulldev/dialog" @@ -536,7 +591,7 @@ ], "docs": "https://ui.full.dev/components/dialog/", "dependencies": [ - "@data-slot/dialog@^1.0.2", + "@data-slot/dialog@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -599,7 +654,7 @@ ], "docs": "https://ui.full.dev/components/dropdown-menu/", "dependencies": [ - "@data-slot/dropdown-menu@^1.0.2", + "@data-slot/dropdown-menu@^1.1.2", "@lucide/astro" ], "files": [ @@ -818,8 +873,8 @@ ], "docs": "https://ui.full.dev/components/hover-card/", "dependencies": [ - "@data-slot/hover-card@^1.0.2", - "@data-slot/core@^1.0.2" + "@data-slot/hover-card@^1.1.2", + "@data-slot/core@^1.1.2" ], "files": [ { @@ -1183,7 +1238,7 @@ ], "docs": "https://ui.full.dev/components/navigation-menu/", "dependencies": [ - "@data-slot/navigation-menu@^1.0.2", + "@data-slot/navigation-menu@^1.1.2", "@lucide/astro" ], "files": [ @@ -1270,7 +1325,7 @@ ], "docs": "https://ui.full.dev/components/popover/", "dependencies": [ - "@data-slot/popover@^1.0.2" + "@data-slot/popover@^1.1.2" ], "files": [ { @@ -1335,6 +1390,26 @@ } ] }, + { + "name": "progress", + "type": "registry:ui", + "title": "Progress", + "description": "Shows how much of a task or sequence is complete.", + "categories": [ + "ui" + ], + "docs": "https://ui.full.dev/components/progress/", + "files": [ + { + "path": "src/components/ui/progress/index.ts", + "type": "registry:ui" + }, + { + "path": "src/components/ui/progress/progress.astro", + "type": "registry:ui" + } + ] + }, { "name": "radio-group", "type": "registry:ui", @@ -1345,7 +1420,7 @@ ], "docs": "https://ui.full.dev/components/radio-group/", "dependencies": [ - "@data-slot/radio-group@^1.0.2" + "@data-slot/radio-group@^1.1.2" ], "files": [ { @@ -1395,7 +1470,7 @@ ], "docs": "https://ui.full.dev/components/select/", "dependencies": [ - "@data-slot/select@^1.0.2", + "@data-slot/select@^1.1.2", "@lucide/astro" ], "files": [ @@ -1499,7 +1574,7 @@ ], "docs": "https://ui.full.dev/components/sheet/", "dependencies": [ - "@data-slot/dialog@^1.0.2", + "@data-slot/dialog@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -1555,7 +1630,7 @@ ], "docs": "https://ui.full.dev/components/sidebar/", "dependencies": [ - "@data-slot/tooltip@^1.0.2", + "@data-slot/tooltip@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -1676,7 +1751,7 @@ ], "docs": "https://ui.full.dev/components/slider/", "dependencies": [ - "@data-slot/slider@^1.0.2" + "@data-slot/slider@^1.1.2" ], "files": [ { @@ -1742,7 +1817,7 @@ ], "docs": "https://ui.full.dev/components/switch/", "dependencies": [ - "@data-slot/switch@^1.0.2" + "@data-slot/switch@^1.1.2" ], "files": [ { @@ -1813,7 +1888,7 @@ ], "docs": "https://ui.full.dev/components/tabs/", "dependencies": [ - "@data-slot/tabs@^1.0.2" + "@data-slot/tabs@^1.1.2" ], "files": [ { @@ -1888,7 +1963,7 @@ ], "docs": "https://ui.full.dev/components/toggle/", "dependencies": [ - "@data-slot/toggle@^1.0.2" + "@data-slot/toggle@^1.1.2" ], "files": [ { @@ -1935,7 +2010,7 @@ ], "docs": "https://ui.full.dev/components/tooltip/", "dependencies": [ - "@data-slot/tooltip@^1.0.2" + "@data-slot/tooltip@^1.1.2" ], "files": [ { @@ -2070,7 +2145,7 @@ ], "docs": "https://ui.full.dev/components/drawer/", "dependencies": [ - "@data-slot/drawer@^1.0.2" + "@data-slot/drawer@^1.1.2" ], "registryDependencies": [ "@fulldev/button" @@ -2160,7 +2235,7 @@ ], "docs": "https://ui.full.dev/components/resizable/", "dependencies": [ - "@data-slot/resizable@^1.0.2" + "@data-slot/resizable@^1.1.2" ], "files": [ { @@ -2191,7 +2266,7 @@ ], "docs": "https://ui.full.dev/components/toast/", "dependencies": [ - "@data-slot/toast@^1.0.2", + "@data-slot/toast@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -2258,7 +2333,7 @@ ], "docs": "https://ui.full.dev/components/toggle-group/", "dependencies": [ - "@data-slot/toggle-group@^1.0.2" + "@data-slot/toggle-group@^1.1.2" ], "registryDependencies": [ "@fulldev/toggle" @@ -2459,6 +2534,7 @@ "@fulldev/card", "@fulldev/carousel", "@fulldev/checkbox", + "@fulldev/code-block", "@fulldev/collapsible", "@fulldev/combobox", "@fulldev/command", @@ -2484,6 +2560,7 @@ "@fulldev/pagination", "@fulldev/popover", "@fulldev/price", + "@fulldev/progress", "@fulldev/radio-group", "@fulldev/rating", "@fulldev/resizable", @@ -5359,6 +5436,34 @@ } ] }, + { + "name": "code-block-examples", + "type": "registry:example", + "title": "Code Block examples", + "description": "The examples from the shadcn/ui Code Block docs.", + "docs": "https://ui.full.dev/components/code-block/", + "registryDependencies": [ + "@fulldev/code-block" + ], + "files": [ + { + "path": "src/components/examples/code-block/code-block-demo.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-lines.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-numbered.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-wrap.astro", + "type": "registry:component" + } + ] + }, { "name": "collapsible-examples", "type": "registry:example", @@ -5385,6 +5490,10 @@ "path": "src/components/examples/collapsible/collapsible-demo.astro", "type": "registry:component" }, + { + "path": "src/components/examples/collapsible/collapsible-dismissal.astro", + "type": "registry:component" + }, { "path": "src/components/examples/collapsible/collapsible-file-tree.astro", "type": "registry:component" @@ -6185,6 +6294,34 @@ } ] }, + { + "name": "progress-examples", + "type": "registry:example", + "title": "Progress examples", + "description": "The examples from the shadcn/ui Progress docs.", + "docs": "https://ui.full.dev/components/progress/", + "registryDependencies": [ + "@fulldev/progress" + ], + "files": [ + { + "path": "src/components/examples/progress/progress-custom-max.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-demo.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-indeterminate.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-rtl.astro", + "type": "registry:component" + } + ] + }, { "name": "radio-group-examples", "type": "registry:example", diff --git a/public/r/styles/base-luma/resizable.json b/public/r/styles/base-luma/resizable.json index 5573e780f..b58e4687f 100644 --- a/public/r/styles/base-luma/resizable.json +++ b/public/r/styles/base-luma/resizable.json @@ -4,7 +4,7 @@ "title": "Resizable", "description": "Accessible panel groups with pointer and keyboard resizing.", "dependencies": [ - "@data-slot/resizable@^1.0.2" + "@data-slot/resizable@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-luma/select.json b/public/r/styles/base-luma/select.json index fec6daa00..26a9eb36b 100644 --- a/public/r/styles/base-luma/select.json +++ b/public/r/styles/base-luma/select.json @@ -4,7 +4,7 @@ "title": "Select", "description": "Displays a list of options for the user to pick from, triggered by a button.", "dependencies": [ - "@data-slot/select@^1.0.2", + "@data-slot/select@^1.1.2", "@lucide/astro" ], "files": [ diff --git a/public/r/styles/base-luma/sheet.json b/public/r/styles/base-luma/sheet.json index ebc6580c0..b9e093363 100644 --- a/public/r/styles/base-luma/sheet.json +++ b/public/r/styles/base-luma/sheet.json @@ -4,7 +4,7 @@ "title": "Sheet", "description": "A sliding panel component that appears from the edge of the screen.", "dependencies": [ - "@data-slot/dialog@^1.0.2", + "@data-slot/dialog@^1.1.2", "@lucide/astro" ], "registryDependencies": [ diff --git a/public/r/styles/base-luma/sidebar.json b/public/r/styles/base-luma/sidebar.json index e3bd7a7b9..fbd86becf 100644 --- a/public/r/styles/base-luma/sidebar.json +++ b/public/r/styles/base-luma/sidebar.json @@ -4,7 +4,7 @@ "title": "Sidebar", "description": "A composable, themeable, and customizable Astro sidebar component.", "dependencies": [ - "@data-slot/tooltip@^1.0.2", + "@data-slot/tooltip@^1.1.2", "@lucide/astro" ], "registryDependencies": [ diff --git a/public/r/styles/base-luma/slider.json b/public/r/styles/base-luma/slider.json index 9f53441e8..6283e80b6 100644 --- a/public/r/styles/base-luma/slider.json +++ b/public/r/styles/base-luma/slider.json @@ -4,7 +4,7 @@ "title": "Slider", "description": "An input where the user selects a value from within a given range.", "dependencies": [ - "@data-slot/slider@^1.0.2" + "@data-slot/slider@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-luma/switch.json b/public/r/styles/base-luma/switch.json index a496b5ea6..d49ef9131 100644 --- a/public/r/styles/base-luma/switch.json +++ b/public/r/styles/base-luma/switch.json @@ -4,7 +4,7 @@ "title": "Switch", "description": "A control that allows the user to toggle between checked and not checked.", "dependencies": [ - "@data-slot/switch@^1.0.2" + "@data-slot/switch@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-luma/tabs.json b/public/r/styles/base-luma/tabs.json index 169de1fc0..8e6e87199 100644 --- a/public/r/styles/base-luma/tabs.json +++ b/public/r/styles/base-luma/tabs.json @@ -4,7 +4,7 @@ "title": "Tabs", "description": "A set of layered sections of content, known as tabs, that display one panel of content at a time.", "dependencies": [ - "@data-slot/tabs@^1.0.2" + "@data-slot/tabs@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-luma/toast.json b/public/r/styles/base-luma/toast.json index 19f5528dc..20df8ad1d 100644 --- a/public/r/styles/base-luma/toast.json +++ b/public/r/styles/base-luma/toast.json @@ -4,7 +4,7 @@ "title": "Toast", "description": "A brief notification that appears without interrupting the user.", "dependencies": [ - "@data-slot/toast@^1.0.2", + "@data-slot/toast@^1.1.2", "@lucide/astro" ], "registryDependencies": [ diff --git a/public/r/styles/base-luma/toggle-group.json b/public/r/styles/base-luma/toggle-group.json index 6a4ecbf32..cc6bcdec1 100644 --- a/public/r/styles/base-luma/toggle-group.json +++ b/public/r/styles/base-luma/toggle-group.json @@ -4,7 +4,7 @@ "title": "Toggle Group", "description": "A set of two-state buttons that can be toggled independently or as a single choice.", "dependencies": [ - "@data-slot/toggle-group@^1.0.2" + "@data-slot/toggle-group@^1.1.2" ], "registryDependencies": [ "@fulldev/toggle" diff --git a/public/r/styles/base-luma/toggle.json b/public/r/styles/base-luma/toggle.json index 963957ad4..8be271974 100644 --- a/public/r/styles/base-luma/toggle.json +++ b/public/r/styles/base-luma/toggle.json @@ -4,7 +4,7 @@ "title": "Toggle", "description": "A two-state button that can be either on or off.", "dependencies": [ - "@data-slot/toggle@^1.0.2" + "@data-slot/toggle@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-luma/tooltip.json b/public/r/styles/base-luma/tooltip.json index 10ba9395f..0ec7166b9 100644 --- a/public/r/styles/base-luma/tooltip.json +++ b/public/r/styles/base-luma/tooltip.json @@ -4,7 +4,7 @@ "title": "Tooltip", "description": "Displays contextual information when a user hovers or focuses a trigger.", "dependencies": [ - "@data-slot/tooltip@^1.0.2" + "@data-slot/tooltip@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-lyra/accordion.json b/public/r/styles/base-lyra/accordion.json index 9cc351656..54deaebe0 100644 --- a/public/r/styles/base-lyra/accordion.json +++ b/public/r/styles/base-lyra/accordion.json @@ -4,7 +4,7 @@ "title": "Accordion", "description": "A vertically stacked set of interactive headings that each reveal a section of content.", "dependencies": [ - "@data-slot/accordion@^1.0.2", + "@data-slot/accordion@^1.1.2", "@lucide/astro" ], "files": [ diff --git a/public/r/styles/base-lyra/alert-dialog.json b/public/r/styles/base-lyra/alert-dialog.json index 955513dd4..21d834d63 100644 --- a/public/r/styles/base-lyra/alert-dialog.json +++ b/public/r/styles/base-lyra/alert-dialog.json @@ -4,7 +4,7 @@ "title": "Alert Dialog", "description": "A modal dialog for important confirmations that expects a response.", "dependencies": [ - "@data-slot/alert-dialog@^1.0.2" + "@data-slot/alert-dialog@^1.1.2" ], "registryDependencies": [ "@fulldev/button" diff --git a/public/r/styles/base-lyra/code-block-examples.json b/public/r/styles/base-lyra/code-block-examples.json new file mode 100644 index 000000000..2dc78df89 --- /dev/null +++ b/public/r/styles/base-lyra/code-block-examples.json @@ -0,0 +1,33 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "code-block-examples", + "title": "Code Block examples", + "description": "The examples from the shadcn/ui Code Block docs.", + "registryDependencies": [ + "@fulldev/code-block" + ], + "files": [ + { + "path": "src/components/examples/code-block/code-block-demo.astro", + "content": "---\nimport {\n CodeBlock,\n CodeBlockActions,\n CodeBlockContent,\n CodeBlockCopyButton,\n CodeBlockHeader,\n CodeBlockTitle,\n} from \"@/components/ui/code-block\"\n\nconst code = `import { Button } from \"@/components/ui/button\"\n\n`\n---\n\n\n \n contact.astro\n \n \n \n \n \n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-lines.astro", + "content": "---\nimport {\n CodeBlock,\n CodeBlockContent,\n CodeBlockLine,\n} from \"@/components/ui/code-block\"\n---\n\n\n \n export const site = {\n {' title: \"Our website\",'}\n \n {' title: \"Our new website\",'}\n \n \n {' lang: \"en\",'}\n }\n \n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-numbered.astro", + "content": "---\nimport { CodeBlock, CodeBlockContent } from \"@/components/ui/code-block\"\n\nconst code = `{\n \"name\": \"our-website\",\n\n \"private\": true\n}`\n---\n\n\n \n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-wrap.astro", + "content": "---\nimport {\n CodeBlock,\n CodeBlockActions,\n CodeBlockContent,\n CodeBlockCopyButton,\n CodeBlockFooter,\n} from \"@/components/ui/code-block\"\n\nconst code =\n \"A long explanation can wrap inside a code block without making the surrounding article or the page scroll horizontally.\"\n---\n\n\n \n \n \n \n Plain text, with line wrapping.\n\n", + "type": "registry:component" + } + ], + "docs": "https://ui.full.dev/components/code-block/", + "type": "registry:example" +} \ No newline at end of file diff --git a/public/r/styles/base-lyra/code-block.json b/public/r/styles/base-lyra/code-block.json new file mode 100644 index 000000000..9156245eb --- /dev/null +++ b/public/r/styles/base-lyra/code-block.json @@ -0,0 +1,65 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "code-block", + "title": "Code Block", + "description": "Code and plain-text snippets with copy actions, line numbers and highlighted lines.", + "dependencies": [ + "@lucide/astro", + "class-variance-authority" + ], + "registryDependencies": [ + "@fulldev/button" + ], + "files": [ + { + "path": "src/components/ui/code-block/code-block-actions.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\nconst { class: className, ...props } = Astro.props\n---\n\n&]:m-0 [[data-slot=code-block]>&]:top-2 [[data-slot=code-block]>&]:end-2 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:top-1.5 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:end-1.5 [[data-slot=code-block]>&]:*:[button]:bg-background [[data-slot=code-block]>&]:*:[button]:ring-1 [[data-slot=code-block]>&]:*:[button]:ring-foreground/10 ms-auto flex shrink-0 items-center [[data-slot=code-block]>&]:absolute [[data-slot=code-block]>&]:z-10 [[data-slot=code-block]>&]:opacity-0 [[data-slot=code-block]>&]:transition-opacity [[data-slot=code-block]>&]:group-focus-within/code-block:opacity-100 [[data-slot=code-block]>&]:group-hover/code-block:opacity-100 [[data-slot=code-block]>&]:pointer-coarse:opacity-100\",\n className\n )}\n {...props}\n>\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-content.astro", + "content": "---\n/* eslint-disable astro/jsx-a11y/no-noninteractive-tabindex -- Focusable code supports keyboard scrolling, as in shadcn/ui. */\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\nimport CodeBlockLine from \"./code-block-line.astro\"\n\ntype Props = HTMLAttributes<\"pre\"> & {\n code?: string\n wrap?: boolean\n lineNumbers?: boolean\n startLine?: number\n}\n\nconst {\n class: className,\n code,\n wrap = false,\n lineNumbers = false,\n startLine = 1,\n style,\n ...props\n} = Astro.props\n\nconst contentStyle =\n typeof style === \"string\"\n ? `counter-reset: line ${startLine - 1}; ${style}`\n : { counterReset: `line ${startLine - 1}`, ...style }\n---\n\n{code !== undefined ? lineNumbers ? code.replace(/\\n$/, \"\").split(\"\\n\").map((line) => {line}) : code : }\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-copy-button.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport CheckIcon from \"@lucide/astro/icons/check\"\nimport CopyIcon from \"@lucide/astro/icons/copy\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button, type ButtonVariantProps } from \"@/components/ui/button\"\n\ntype Props = Omit, \"value\" | \"type\"> &\n ButtonVariantProps & {\n value: string\n copyLabel?: string\n copiedLabel?: string\n errorLabel?: string\n }\n\nconst {\n class: className,\n value,\n variant = \"ghost\",\n size = \"icon-xs\",\n copyLabel = \"Copy\",\n copiedLabel = \"Copied\",\n errorLabel = \"Could not copy\",\n ...props\n} = Astro.props\n---\n\n\n \n \n\n\n\n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-footer.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\nconst { class: className, ...props } = Astro.props\n---\n\n\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-header.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\nconst { class: className, ...props } = Astro.props\n---\n\n[data-slot=code-block-title]]:min-w-0\",\n className\n )}\n {...props}\n>\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-line.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 \"-mx-3 px-3 in-data-numbered:gap-x-3 before:min-w-6 before:text-end before:text-muted-foreground after:start-1 after:text-muted-foreground group-data-[size=sm]/code-block:-mx-2 group-data-[size=sm]/code-block:px-2 relative block min-h-lh before:select-none after:absolute after:top-0 after:select-none in-data-numbered:col-span-2 in-data-numbered:grid in-data-numbered:grid-cols-subgrid in-data-numbered:[counter-increment:line] in-data-numbered:before:content-[counter(line)] in-data-numbered:supports-[content:counter(line)_/_'']:before:content-[counter(line)_/_'']\",\n {\n variants: {\n variant: {\n default: \"\",\n added: \"bg-muted after:content-['+']\",\n removed: \"bg-destructive/10 after:text-destructive after:content-['−']\",\n highlighted: \"bg-muted\",\n },\n },\n defaultVariants: { variant: \"default\" },\n }\n)\n\ntype Props = HTMLAttributes<\"span\"> & VariantProps\nconst { class: className, variant = \"default\", ...props } = Astro.props\n---\n\n\n \n \n {\"\\n\"}\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-title.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\nconst { class: className, ...props } = Astro.props\n---\n\n\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block.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 \"rounded-none text-sm data-[size=sm]:text-xs has-[>[data-slot=code-block-content]:focus-visible]:ring-1 has-[>[data-slot=code-block-content]:focus-visible]:ring-ring/50 group/code-block relative flex w-full min-w-0 flex-col overflow-hidden\",\n {\n variants: {\n variant: {\n default: \"border border-input text-foreground dark:bg-input/30 has-[>[data-slot=code-block-content]:focus-visible]:border-ring\",\n destructive: \"border border-destructive/30 text-destructive dark:border-destructive/40\",\n },\n },\n defaultVariants: { variant: \"default\" },\n }\n)\n\ntype Props = HTMLAttributes<\"div\"> &\n VariantProps & {\n size?: \"default\" | \"sm\"\n }\n\nconst {\n class: className,\n variant = \"default\",\n size = \"default\",\n ...props\n} = Astro.props\n---\n\n\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/index.ts", + "content": "export { default as CodeBlock } from \"./code-block.astro\"\nexport { default as CodeBlockHeader } from \"./code-block-header.astro\"\nexport { default as CodeBlockTitle } from \"./code-block-title.astro\"\nexport { default as CodeBlockActions } from \"./code-block-actions.astro\"\nexport { default as CodeBlockCopyButton } from \"./code-block-copy-button.astro\"\nexport { default as CodeBlockContent } from \"./code-block-content.astro\"\nexport { default as CodeBlockLine } from \"./code-block-line.astro\"\nexport { default as CodeBlockFooter } from \"./code-block-footer.astro\"\n", + "type": "registry:ui" + } + ], + "docs": "https://ui.full.dev/components/code-block/", + "categories": [ + "ui" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/public/r/styles/base-lyra/collapsible-examples.json b/public/r/styles/base-lyra/collapsible-examples.json index 2e367702c..0a6f2fd94 100644 --- a/public/r/styles/base-lyra/collapsible-examples.json +++ b/public/r/styles/base-lyra/collapsible-examples.json @@ -25,6 +25,11 @@ "content": "---\nimport ChevronsUpDown from \"@lucide/astro/icons/chevrons-up-down\"\n\nimport { buttonVariants } from \"@/components/ui/button\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/components/ui/collapsible\"\n---\n\n\n
\n

Order #4189

\n \n \n Toggle details\n \n
\n
\n Status\n Shipped\n
\n \n
\n

Shipping address

\n

100 Market St, San Francisco

\n
\n
\n

Items

\n

2x Studio Headphones

\n
\n
\n
\n", "type": "registry:component" }, + { + "path": "src/components/examples/collapsible/collapsible-dismissal.astro", + "content": "---\nimport ChevronDownIcon from \"@lucide/astro/icons/chevron-down\"\n\nimport { buttonVariants } from \"@/components/ui/button\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/components/ui/collapsible\"\n---\n\n
\n \n \n Browse documentation\n \n \n \n \n \n \n

\n Open the panel, then press Escape or click outside it to close.\n

\n
\n", + "type": "registry:component" + }, { "path": "src/components/examples/collapsible/collapsible-file-tree.astro", "content": "---\nimport ChevronRightIcon from \"@lucide/astro/icons/chevron-right\"\nimport FileIcon from \"@lucide/astro/icons/file\"\nimport FolderIcon from \"@lucide/astro/icons/folder\"\n\nimport { Button, buttonVariants } from \"@/components/ui/button\"\nimport { Card, CardContent, CardHeader } from \"@/components/ui/card\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/components/ui/collapsible\"\nimport { Tabs, TabsList, TabsTrigger } from \"@/components/ui/tabs\"\n\ntype FileTreeItem = { name: string } | { name: string; items: FileTreeItem[] }\n\nconst fileTree: FileTreeItem[] = [\n {\n name: \"components\",\n items: [\n {\n name: \"ui\",\n items: [\n { name: \"button.tsx\" },\n { name: \"card.tsx\" },\n { name: \"dialog.tsx\" },\n { name: \"input.tsx\" },\n { name: \"select.tsx\" },\n { name: \"table.tsx\" },\n ],\n },\n { name: \"login-form.tsx\" },\n { name: \"register-form.tsx\" },\n ],\n },\n {\n name: \"lib\",\n items: [{ name: \"utils.ts\" }, { name: \"cn.ts\" }, { name: \"api.ts\" }],\n },\n {\n name: \"hooks\",\n items: [\n { name: \"use-media-query.ts\" },\n { name: \"use-debounce.ts\" },\n { name: \"use-local-storage.ts\" },\n ],\n },\n {\n name: \"types\",\n items: [{ name: \"index.d.ts\" }, { name: \"api.d.ts\" }],\n },\n {\n name: \"public\",\n items: [{ name: \"favicon.ico\" }, { name: \"logo.svg\" }, { name: \"images\" }],\n },\n { name: \"app.tsx\" },\n { name: \"layout.tsx\" },\n { name: \"globals.css\" },\n { name: \"package.json\" },\n { name: \"tsconfig.json\" },\n { name: \"README.md\" },\n { name: \".gitignore\" },\n]\n\n// Renders the card, or one tree level when Astro.self passes `items`.\nconst { items } = Astro.props as { items?: FileTreeItem[] }\n---\n\n{items ? (\n items.map((fileItem) =>\n \"items\" in fileItem ? (\n \n \n \n \n {fileItem.name}\n \n \n
\n \n
\n
\n
\n ) : (\n \n \n {fileItem.name}\n \n )\n )\n) : (\n \n \n \n \n Explorer\n Outline\n \n \n \n \n
\n \n
\n
\n
\n)}\n", diff --git a/public/r/styles/base-lyra/collapsible.json b/public/r/styles/base-lyra/collapsible.json index 51460f6ff..dd0c03d41 100644 --- a/public/r/styles/base-lyra/collapsible.json +++ b/public/r/styles/base-lyra/collapsible.json @@ -4,12 +4,12 @@ "title": "Collapsible", "description": "An interactive component which expands/collapses a panel.", "dependencies": [ - "@data-slot/collapsible@^1.0.2" + "@data-slot/collapsible@^1.1.2" ], "files": [ { "path": "src/components/ui/collapsible/collapsible.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\"> & {\n // \"li\" makes a list item the collapsible, such as a sidebar menu item.\n as?: \"div\" | \"li\"\n defaultOpen?: boolean\n hiddenUntilFound?: boolean\n}\n\nconst {\n as: Tag = \"div\",\n class: className,\n defaultOpen,\n hiddenUntilFound,\n ...props\n} = Astro.props\n---\n\n\n \n\n\n\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\"> & {\n // \"li\" makes a list item the collapsible, such as a sidebar menu item.\n as?: \"div\" | \"li\"\n defaultOpen?: boolean\n hiddenUntilFound?: boolean\n closeOnEscape?: boolean\n closeOnClickOutside?: boolean\n}\n\nconst {\n as: Tag = \"div\",\n class: className,\n defaultOpen,\n hiddenUntilFound,\n closeOnEscape,\n closeOnClickOutside,\n ...props\n} = Astro.props\n---\n\n\n \n\n\n\n", "type": "registry:ui" }, { diff --git a/public/r/styles/base-lyra/combobox.json b/public/r/styles/base-lyra/combobox.json index ac76e4690..dc9dc5e91 100644 --- a/public/r/styles/base-lyra/combobox.json +++ b/public/r/styles/base-lyra/combobox.json @@ -4,8 +4,8 @@ "title": "Combobox", "description": "Autocomplete input with a list of suggestions.", "dependencies": [ - "@data-slot/combobox@^1.0.2", - "@data-slot/core@^1.0.2", + "@data-slot/combobox@^1.1.2", + "@data-slot/core@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -34,7 +34,7 @@ }, { "path": "src/components/ui/combobox/combobox-input.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport XIcon from \"@lucide/astro/icons/x\"\n\nimport { cn } from \"@/lib/utils\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n} from \"@/components/ui/input-group\"\n\nimport ComboboxTrigger from \"./combobox-trigger.astro\"\n\ntype Props = HTMLAttributes<\"input\"> & {\n showTrigger?: boolean\n showClear?: boolean\n}\n\nconst {\n class: className,\n type = \"text\",\n disabled = false,\n showTrigger = true,\n showClear = false,\n ...props\n} = Astro.props\n---\n\n\n \n \n {showTrigger && (\n \n )}\n {showClear && (\n \n \n \n )}\n \n \n\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport XIcon from \"@lucide/astro/icons/x\"\n\nimport { cn } from \"@/lib/utils\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n} from \"@/components/ui/input-group\"\n\nimport ComboboxTrigger from \"./combobox-trigger.astro\"\n\ntype Props = HTMLAttributes<\"input\"> & {\n showTrigger?: boolean\n showClear?: boolean\n clearLabel?: string\n}\n\nconst {\n class: className,\n type = \"text\",\n disabled = false,\n showTrigger = true,\n showClear = false,\n clearLabel = \"Clear selection\",\n ...props\n} = Astro.props\n---\n\n\n \n \n {showTrigger && (\n \n )}\n {showClear && (\n \n \n \n )}\n \n \n\n", "type": "registry:ui" }, { diff --git a/public/r/styles/base-lyra/command.json b/public/r/styles/base-lyra/command.json index 98b251279..b74747316 100644 --- a/public/r/styles/base-lyra/command.json +++ b/public/r/styles/base-lyra/command.json @@ -4,9 +4,9 @@ "title": "Command", "description": "Command menu for search and quick actions.", "dependencies": [ - "@data-slot/command@^1.0.2", + "@data-slot/command@^1.1.2", "@lucide/astro", - "@data-slot/core@^1.0.2" + "@data-slot/core@^1.1.2" ], "registryDependencies": [ "@fulldev/dialog" diff --git a/public/r/styles/base-lyra/components.json b/public/r/styles/base-lyra/components.json index 90872f412..e0f9f98bf 100644 --- a/public/r/styles/base-lyra/components.json +++ b/public/r/styles/base-lyra/components.json @@ -18,6 +18,7 @@ "@fulldev/card", "@fulldev/carousel", "@fulldev/checkbox", + "@fulldev/code-block", "@fulldev/collapsible", "@fulldev/combobox", "@fulldev/command", @@ -43,6 +44,7 @@ "@fulldev/pagination", "@fulldev/popover", "@fulldev/price", + "@fulldev/progress", "@fulldev/radio-group", "@fulldev/rating", "@fulldev/resizable", diff --git a/public/r/styles/base-lyra/dialog.json b/public/r/styles/base-lyra/dialog.json index e8093ed6f..14a95b8e7 100644 --- a/public/r/styles/base-lyra/dialog.json +++ b/public/r/styles/base-lyra/dialog.json @@ -4,7 +4,7 @@ "title": "Dialog", "description": "A window overlaid on either the primary window or another dialog window, rendering the content underneath inert.", "dependencies": [ - "@data-slot/dialog@^1.0.2", + "@data-slot/dialog@^1.1.2", "@lucide/astro" ], "registryDependencies": [ diff --git a/public/r/styles/base-lyra/drawer.json b/public/r/styles/base-lyra/drawer.json index d99d9c005..b7487c287 100644 --- a/public/r/styles/base-lyra/drawer.json +++ b/public/r/styles/base-lyra/drawer.json @@ -4,7 +4,7 @@ "title": "Drawer", "description": "A drawer component that slides in from any edge of the screen.", "dependencies": [ - "@data-slot/drawer@^1.0.2" + "@data-slot/drawer@^1.1.2" ], "registryDependencies": [ "@fulldev/button" diff --git a/public/r/styles/base-lyra/dropdown-menu.json b/public/r/styles/base-lyra/dropdown-menu.json index fa3c430bf..3dfa31939 100644 --- a/public/r/styles/base-lyra/dropdown-menu.json +++ b/public/r/styles/base-lyra/dropdown-menu.json @@ -4,7 +4,7 @@ "title": "Dropdown Menu", "description": "Displays a menu to the user, such as a set of actions or functions, triggered by a button.", "dependencies": [ - "@data-slot/dropdown-menu@^1.0.2", + "@data-slot/dropdown-menu@^1.1.2", "@lucide/astro" ], "files": [ diff --git a/public/r/styles/base-lyra/hover-card.json b/public/r/styles/base-lyra/hover-card.json index a99600c48..3a57eca11 100644 --- a/public/r/styles/base-lyra/hover-card.json +++ b/public/r/styles/base-lyra/hover-card.json @@ -4,8 +4,8 @@ "title": "Hover Card", "description": "For sighted users to preview content available behind a link.", "dependencies": [ - "@data-slot/hover-card@^1.0.2", - "@data-slot/core@^1.0.2" + "@data-slot/hover-card@^1.1.2", + "@data-slot/core@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-lyra/navigation-menu.json b/public/r/styles/base-lyra/navigation-menu.json index fa8f08854..ef3f95886 100644 --- a/public/r/styles/base-lyra/navigation-menu.json +++ b/public/r/styles/base-lyra/navigation-menu.json @@ -4,7 +4,7 @@ "title": "Navigation Menu", "description": "A collection of links for navigating websites.", "dependencies": [ - "@data-slot/navigation-menu@^1.0.2", + "@data-slot/navigation-menu@^1.1.2", "@lucide/astro" ], "files": [ diff --git a/public/r/styles/base-lyra/popover.json b/public/r/styles/base-lyra/popover.json index 5ccec05b3..173f76908 100644 --- a/public/r/styles/base-lyra/popover.json +++ b/public/r/styles/base-lyra/popover.json @@ -4,7 +4,7 @@ "title": "Popover", "description": "Displays rich content in a floating layer, triggered by a button.", "dependencies": [ - "@data-slot/popover@^1.0.2" + "@data-slot/popover@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-lyra/progress-examples.json b/public/r/styles/base-lyra/progress-examples.json new file mode 100644 index 000000000..4fb614b85 --- /dev/null +++ b/public/r/styles/base-lyra/progress-examples.json @@ -0,0 +1,33 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "progress-examples", + "title": "Progress examples", + "description": "The examples from the shadcn/ui Progress docs.", + "registryDependencies": [ + "@fulldev/progress" + ], + "files": [ + { + "path": "src/components/examples/progress/progress-custom-max.astro", + "content": "---\nimport { Progress } from \"@/components/ui/progress\"\n---\n\n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-demo.astro", + "content": "---\nimport { Progress } from \"@/components/ui/progress\"\n---\n\n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-indeterminate.astro", + "content": "---\nimport { Progress } from \"@/components/ui/progress\"\n---\n\n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-rtl.astro", + "content": "---\nimport { Progress } from \"@/components/ui/progress\"\n---\n\n\n", + "type": "registry:component" + } + ], + "docs": "https://ui.full.dev/components/progress/", + "type": "registry:example" +} \ No newline at end of file diff --git a/public/r/styles/base-lyra/progress.json b/public/r/styles/base-lyra/progress.json new file mode 100644 index 000000000..3ab72d452 --- /dev/null +++ b/public/r/styles/base-lyra/progress.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "progress", + "title": "Progress", + "description": "Shows how much of a task or sequence is complete.", + "files": [ + { + "path": "src/components/ui/progress/index.ts", + "content": "export { default as Progress } from \"./progress.astro\"\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/progress/progress.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\"> & {\n value?: number | null\n max?: number\n label?: string\n showValue?: boolean\n}\n\nconst {\n class: className,\n value,\n max = 100,\n label,\n showValue = false,\n \"aria-label\": ariaLabel = label || \"Progress\",\n \"aria-labelledby\": ariaLabelledby,\n \"aria-valuetext\": ariaValueText,\n ...props\n} = Astro.props\n\nconst resolvedMax = Number.isFinite(max) && max > 0 ? max : 100\nconst resolvedValue =\n typeof value === \"number\" && Number.isFinite(value)\n ? Math.min(resolvedMax, Math.max(0, value))\n : undefined\nconst percentage =\n resolvedValue === undefined ? undefined : (resolvedValue / resolvedMax) * 100\nconst stateAttributes = {\n \"data-indeterminate\": resolvedValue === undefined ? \"\" : undefined,\n \"data-complete\": resolvedValue === resolvedMax ? \"\" : undefined,\n \"data-progressing\":\n resolvedValue !== undefined && resolvedValue < resolvedMax ? \"\" : undefined,\n}\n---\n\n\n \n {label && (\n \n {label}\n \n )}\n {showValue && percentage !== undefined && (\n \n {Math.round(percentage)}%\n \n )}\n \n \n \n \n\n", + "type": "registry:ui" + } + ], + "docs": "https://ui.full.dev/components/progress/", + "categories": [ + "ui" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/public/r/styles/base-lyra/radio-group.json b/public/r/styles/base-lyra/radio-group.json index 702e16940..e7bf65a66 100644 --- a/public/r/styles/base-lyra/radio-group.json +++ b/public/r/styles/base-lyra/radio-group.json @@ -4,7 +4,7 @@ "title": "Radio Group", "description": "A set of checkable buttons, known as radio buttons, where no more than one of the buttons can be checked at a time.", "dependencies": [ - "@data-slot/radio-group@^1.0.2" + "@data-slot/radio-group@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-lyra/registry.json b/public/r/styles/base-lyra/registry.json index 0579b94a8..15403b55e 100644 --- a/public/r/styles/base-lyra/registry.json +++ b/public/r/styles/base-lyra/registry.json @@ -13,7 +13,7 @@ ], "docs": "https://ui.full.dev/components/accordion/", "dependencies": [ - "@data-slot/accordion@^1.0.2", + "@data-slot/accordion@^1.1.2", "@lucide/astro" ], "files": [ @@ -81,7 +81,7 @@ ], "docs": "https://ui.full.dev/components/alert-dialog/", "dependencies": [ - "@data-slot/alert-dialog@^1.0.2" + "@data-slot/alert-dialog@^1.1.2" ], "registryDependencies": [ "@fulldev/button" @@ -367,6 +367,61 @@ } ] }, + { + "name": "code-block", + "type": "registry:ui", + "title": "Code Block", + "description": "Code and plain-text snippets with copy actions, line numbers and highlighted lines.", + "categories": [ + "ui" + ], + "docs": "https://ui.full.dev/components/code-block/", + "dependencies": [ + "@lucide/astro", + "class-variance-authority" + ], + "registryDependencies": [ + "@fulldev/button" + ], + "files": [ + { + "path": "src/components/ui/code-block/code-block-actions.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-content.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-copy-button.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-footer.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-header.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-line.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-title.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/index.ts", + "type": "registry:ui" + } + ] + }, { "name": "collapsible", "type": "registry:ui", @@ -377,7 +432,7 @@ ], "docs": "https://ui.full.dev/components/collapsible/", "dependencies": [ - "@data-slot/collapsible@^1.0.2" + "@data-slot/collapsible@^1.1.2" ], "files": [ { @@ -408,8 +463,8 @@ ], "docs": "https://ui.full.dev/components/combobox/", "dependencies": [ - "@data-slot/combobox@^1.0.2", - "@data-slot/core@^1.0.2", + "@data-slot/combobox@^1.1.2", + "@data-slot/core@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -476,9 +531,9 @@ ], "docs": "https://ui.full.dev/components/command/", "dependencies": [ - "@data-slot/command@^1.0.2", + "@data-slot/command@^1.1.2", "@lucide/astro", - "@data-slot/core@^1.0.2" + "@data-slot/core@^1.1.2" ], "registryDependencies": [ "@fulldev/dialog" @@ -536,7 +591,7 @@ ], "docs": "https://ui.full.dev/components/dialog/", "dependencies": [ - "@data-slot/dialog@^1.0.2", + "@data-slot/dialog@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -599,7 +654,7 @@ ], "docs": "https://ui.full.dev/components/dropdown-menu/", "dependencies": [ - "@data-slot/dropdown-menu@^1.0.2", + "@data-slot/dropdown-menu@^1.1.2", "@lucide/astro" ], "files": [ @@ -818,8 +873,8 @@ ], "docs": "https://ui.full.dev/components/hover-card/", "dependencies": [ - "@data-slot/hover-card@^1.0.2", - "@data-slot/core@^1.0.2" + "@data-slot/hover-card@^1.1.2", + "@data-slot/core@^1.1.2" ], "files": [ { @@ -1183,7 +1238,7 @@ ], "docs": "https://ui.full.dev/components/navigation-menu/", "dependencies": [ - "@data-slot/navigation-menu@^1.0.2", + "@data-slot/navigation-menu@^1.1.2", "@lucide/astro" ], "files": [ @@ -1270,7 +1325,7 @@ ], "docs": "https://ui.full.dev/components/popover/", "dependencies": [ - "@data-slot/popover@^1.0.2" + "@data-slot/popover@^1.1.2" ], "files": [ { @@ -1335,6 +1390,26 @@ } ] }, + { + "name": "progress", + "type": "registry:ui", + "title": "Progress", + "description": "Shows how much of a task or sequence is complete.", + "categories": [ + "ui" + ], + "docs": "https://ui.full.dev/components/progress/", + "files": [ + { + "path": "src/components/ui/progress/index.ts", + "type": "registry:ui" + }, + { + "path": "src/components/ui/progress/progress.astro", + "type": "registry:ui" + } + ] + }, { "name": "radio-group", "type": "registry:ui", @@ -1345,7 +1420,7 @@ ], "docs": "https://ui.full.dev/components/radio-group/", "dependencies": [ - "@data-slot/radio-group@^1.0.2" + "@data-slot/radio-group@^1.1.2" ], "files": [ { @@ -1395,7 +1470,7 @@ ], "docs": "https://ui.full.dev/components/select/", "dependencies": [ - "@data-slot/select@^1.0.2", + "@data-slot/select@^1.1.2", "@lucide/astro" ], "files": [ @@ -1499,7 +1574,7 @@ ], "docs": "https://ui.full.dev/components/sheet/", "dependencies": [ - "@data-slot/dialog@^1.0.2", + "@data-slot/dialog@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -1555,7 +1630,7 @@ ], "docs": "https://ui.full.dev/components/sidebar/", "dependencies": [ - "@data-slot/tooltip@^1.0.2", + "@data-slot/tooltip@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -1676,7 +1751,7 @@ ], "docs": "https://ui.full.dev/components/slider/", "dependencies": [ - "@data-slot/slider@^1.0.2" + "@data-slot/slider@^1.1.2" ], "files": [ { @@ -1742,7 +1817,7 @@ ], "docs": "https://ui.full.dev/components/switch/", "dependencies": [ - "@data-slot/switch@^1.0.2" + "@data-slot/switch@^1.1.2" ], "files": [ { @@ -1813,7 +1888,7 @@ ], "docs": "https://ui.full.dev/components/tabs/", "dependencies": [ - "@data-slot/tabs@^1.0.2" + "@data-slot/tabs@^1.1.2" ], "files": [ { @@ -1888,7 +1963,7 @@ ], "docs": "https://ui.full.dev/components/toggle/", "dependencies": [ - "@data-slot/toggle@^1.0.2" + "@data-slot/toggle@^1.1.2" ], "files": [ { @@ -1935,7 +2010,7 @@ ], "docs": "https://ui.full.dev/components/tooltip/", "dependencies": [ - "@data-slot/tooltip@^1.0.2" + "@data-slot/tooltip@^1.1.2" ], "files": [ { @@ -2070,7 +2145,7 @@ ], "docs": "https://ui.full.dev/components/drawer/", "dependencies": [ - "@data-slot/drawer@^1.0.2" + "@data-slot/drawer@^1.1.2" ], "registryDependencies": [ "@fulldev/button" @@ -2160,7 +2235,7 @@ ], "docs": "https://ui.full.dev/components/resizable/", "dependencies": [ - "@data-slot/resizable@^1.0.2" + "@data-slot/resizable@^1.1.2" ], "files": [ { @@ -2191,7 +2266,7 @@ ], "docs": "https://ui.full.dev/components/toast/", "dependencies": [ - "@data-slot/toast@^1.0.2", + "@data-slot/toast@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -2258,7 +2333,7 @@ ], "docs": "https://ui.full.dev/components/toggle-group/", "dependencies": [ - "@data-slot/toggle-group@^1.0.2" + "@data-slot/toggle-group@^1.1.2" ], "registryDependencies": [ "@fulldev/toggle" @@ -2459,6 +2534,7 @@ "@fulldev/card", "@fulldev/carousel", "@fulldev/checkbox", + "@fulldev/code-block", "@fulldev/collapsible", "@fulldev/combobox", "@fulldev/command", @@ -2484,6 +2560,7 @@ "@fulldev/pagination", "@fulldev/popover", "@fulldev/price", + "@fulldev/progress", "@fulldev/radio-group", "@fulldev/rating", "@fulldev/resizable", @@ -5359,6 +5436,34 @@ } ] }, + { + "name": "code-block-examples", + "type": "registry:example", + "title": "Code Block examples", + "description": "The examples from the shadcn/ui Code Block docs.", + "docs": "https://ui.full.dev/components/code-block/", + "registryDependencies": [ + "@fulldev/code-block" + ], + "files": [ + { + "path": "src/components/examples/code-block/code-block-demo.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-lines.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-numbered.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-wrap.astro", + "type": "registry:component" + } + ] + }, { "name": "collapsible-examples", "type": "registry:example", @@ -5385,6 +5490,10 @@ "path": "src/components/examples/collapsible/collapsible-demo.astro", "type": "registry:component" }, + { + "path": "src/components/examples/collapsible/collapsible-dismissal.astro", + "type": "registry:component" + }, { "path": "src/components/examples/collapsible/collapsible-file-tree.astro", "type": "registry:component" @@ -6185,6 +6294,34 @@ } ] }, + { + "name": "progress-examples", + "type": "registry:example", + "title": "Progress examples", + "description": "The examples from the shadcn/ui Progress docs.", + "docs": "https://ui.full.dev/components/progress/", + "registryDependencies": [ + "@fulldev/progress" + ], + "files": [ + { + "path": "src/components/examples/progress/progress-custom-max.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-demo.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-indeterminate.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-rtl.astro", + "type": "registry:component" + } + ] + }, { "name": "radio-group-examples", "type": "registry:example", diff --git a/public/r/styles/base-lyra/resizable.json b/public/r/styles/base-lyra/resizable.json index 69ab59e06..7c559a9e7 100644 --- a/public/r/styles/base-lyra/resizable.json +++ b/public/r/styles/base-lyra/resizable.json @@ -4,7 +4,7 @@ "title": "Resizable", "description": "Accessible panel groups with pointer and keyboard resizing.", "dependencies": [ - "@data-slot/resizable@^1.0.2" + "@data-slot/resizable@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-lyra/select.json b/public/r/styles/base-lyra/select.json index 802b01f3a..f3f8a38fc 100644 --- a/public/r/styles/base-lyra/select.json +++ b/public/r/styles/base-lyra/select.json @@ -4,7 +4,7 @@ "title": "Select", "description": "Displays a list of options for the user to pick from, triggered by a button.", "dependencies": [ - "@data-slot/select@^1.0.2", + "@data-slot/select@^1.1.2", "@lucide/astro" ], "files": [ diff --git a/public/r/styles/base-lyra/sheet.json b/public/r/styles/base-lyra/sheet.json index c238670d9..02b2fec44 100644 --- a/public/r/styles/base-lyra/sheet.json +++ b/public/r/styles/base-lyra/sheet.json @@ -4,7 +4,7 @@ "title": "Sheet", "description": "A sliding panel component that appears from the edge of the screen.", "dependencies": [ - "@data-slot/dialog@^1.0.2", + "@data-slot/dialog@^1.1.2", "@lucide/astro" ], "registryDependencies": [ diff --git a/public/r/styles/base-lyra/sidebar.json b/public/r/styles/base-lyra/sidebar.json index 8efb3bc09..42e05409e 100644 --- a/public/r/styles/base-lyra/sidebar.json +++ b/public/r/styles/base-lyra/sidebar.json @@ -4,7 +4,7 @@ "title": "Sidebar", "description": "A composable, themeable, and customizable Astro sidebar component.", "dependencies": [ - "@data-slot/tooltip@^1.0.2", + "@data-slot/tooltip@^1.1.2", "@lucide/astro" ], "registryDependencies": [ diff --git a/public/r/styles/base-lyra/slider.json b/public/r/styles/base-lyra/slider.json index 867e5f7c1..0a28201d4 100644 --- a/public/r/styles/base-lyra/slider.json +++ b/public/r/styles/base-lyra/slider.json @@ -4,7 +4,7 @@ "title": "Slider", "description": "An input where the user selects a value from within a given range.", "dependencies": [ - "@data-slot/slider@^1.0.2" + "@data-slot/slider@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-lyra/switch.json b/public/r/styles/base-lyra/switch.json index 03eb59039..b455c0305 100644 --- a/public/r/styles/base-lyra/switch.json +++ b/public/r/styles/base-lyra/switch.json @@ -4,7 +4,7 @@ "title": "Switch", "description": "A control that allows the user to toggle between checked and not checked.", "dependencies": [ - "@data-slot/switch@^1.0.2" + "@data-slot/switch@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-lyra/tabs.json b/public/r/styles/base-lyra/tabs.json index b6593e40a..b383794df 100644 --- a/public/r/styles/base-lyra/tabs.json +++ b/public/r/styles/base-lyra/tabs.json @@ -4,7 +4,7 @@ "title": "Tabs", "description": "A set of layered sections of content, known as tabs, that display one panel of content at a time.", "dependencies": [ - "@data-slot/tabs@^1.0.2" + "@data-slot/tabs@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-lyra/toast.json b/public/r/styles/base-lyra/toast.json index dcb04aada..a506344af 100644 --- a/public/r/styles/base-lyra/toast.json +++ b/public/r/styles/base-lyra/toast.json @@ -4,7 +4,7 @@ "title": "Toast", "description": "A brief notification that appears without interrupting the user.", "dependencies": [ - "@data-slot/toast@^1.0.2", + "@data-slot/toast@^1.1.2", "@lucide/astro" ], "registryDependencies": [ diff --git a/public/r/styles/base-lyra/toggle-group.json b/public/r/styles/base-lyra/toggle-group.json index 43fb54fc5..2dbe0efa2 100644 --- a/public/r/styles/base-lyra/toggle-group.json +++ b/public/r/styles/base-lyra/toggle-group.json @@ -4,7 +4,7 @@ "title": "Toggle Group", "description": "A set of two-state buttons that can be toggled independently or as a single choice.", "dependencies": [ - "@data-slot/toggle-group@^1.0.2" + "@data-slot/toggle-group@^1.1.2" ], "registryDependencies": [ "@fulldev/toggle" diff --git a/public/r/styles/base-lyra/toggle.json b/public/r/styles/base-lyra/toggle.json index 3cffc700a..15942d3c7 100644 --- a/public/r/styles/base-lyra/toggle.json +++ b/public/r/styles/base-lyra/toggle.json @@ -4,7 +4,7 @@ "title": "Toggle", "description": "A two-state button that can be either on or off.", "dependencies": [ - "@data-slot/toggle@^1.0.2" + "@data-slot/toggle@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-lyra/tooltip.json b/public/r/styles/base-lyra/tooltip.json index 8fee87216..9a99dee83 100644 --- a/public/r/styles/base-lyra/tooltip.json +++ b/public/r/styles/base-lyra/tooltip.json @@ -4,7 +4,7 @@ "title": "Tooltip", "description": "Displays contextual information when a user hovers or focuses a trigger.", "dependencies": [ - "@data-slot/tooltip@^1.0.2" + "@data-slot/tooltip@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-maia/accordion.json b/public/r/styles/base-maia/accordion.json index 5fd296a82..3f65ff7a4 100644 --- a/public/r/styles/base-maia/accordion.json +++ b/public/r/styles/base-maia/accordion.json @@ -4,7 +4,7 @@ "title": "Accordion", "description": "A vertically stacked set of interactive headings that each reveal a section of content.", "dependencies": [ - "@data-slot/accordion@^1.0.2", + "@data-slot/accordion@^1.1.2", "@lucide/astro" ], "files": [ diff --git a/public/r/styles/base-maia/alert-dialog.json b/public/r/styles/base-maia/alert-dialog.json index 4d514bb3f..e23e285b3 100644 --- a/public/r/styles/base-maia/alert-dialog.json +++ b/public/r/styles/base-maia/alert-dialog.json @@ -4,7 +4,7 @@ "title": "Alert Dialog", "description": "A modal dialog for important confirmations that expects a response.", "dependencies": [ - "@data-slot/alert-dialog@^1.0.2" + "@data-slot/alert-dialog@^1.1.2" ], "registryDependencies": [ "@fulldev/button" diff --git a/public/r/styles/base-maia/code-block-examples.json b/public/r/styles/base-maia/code-block-examples.json new file mode 100644 index 000000000..2dc78df89 --- /dev/null +++ b/public/r/styles/base-maia/code-block-examples.json @@ -0,0 +1,33 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "code-block-examples", + "title": "Code Block examples", + "description": "The examples from the shadcn/ui Code Block docs.", + "registryDependencies": [ + "@fulldev/code-block" + ], + "files": [ + { + "path": "src/components/examples/code-block/code-block-demo.astro", + "content": "---\nimport {\n CodeBlock,\n CodeBlockActions,\n CodeBlockContent,\n CodeBlockCopyButton,\n CodeBlockHeader,\n CodeBlockTitle,\n} from \"@/components/ui/code-block\"\n\nconst code = `import { Button } from \"@/components/ui/button\"\n\n`\n---\n\n\n \n contact.astro\n \n \n \n \n \n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-lines.astro", + "content": "---\nimport {\n CodeBlock,\n CodeBlockContent,\n CodeBlockLine,\n} from \"@/components/ui/code-block\"\n---\n\n\n \n export const site = {\n {' title: \"Our website\",'}\n \n {' title: \"Our new website\",'}\n \n \n {' lang: \"en\",'}\n }\n \n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-numbered.astro", + "content": "---\nimport { CodeBlock, CodeBlockContent } from \"@/components/ui/code-block\"\n\nconst code = `{\n \"name\": \"our-website\",\n\n \"private\": true\n}`\n---\n\n\n \n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-wrap.astro", + "content": "---\nimport {\n CodeBlock,\n CodeBlockActions,\n CodeBlockContent,\n CodeBlockCopyButton,\n CodeBlockFooter,\n} from \"@/components/ui/code-block\"\n\nconst code =\n \"A long explanation can wrap inside a code block without making the surrounding article or the page scroll horizontally.\"\n---\n\n\n \n \n \n \n Plain text, with line wrapping.\n\n", + "type": "registry:component" + } + ], + "docs": "https://ui.full.dev/components/code-block/", + "type": "registry:example" +} \ No newline at end of file diff --git a/public/r/styles/base-maia/code-block.json b/public/r/styles/base-maia/code-block.json new file mode 100644 index 000000000..c93616e44 --- /dev/null +++ b/public/r/styles/base-maia/code-block.json @@ -0,0 +1,65 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "code-block", + "title": "Code Block", + "description": "Code and plain-text snippets with copy actions, line numbers and highlighted lines.", + "dependencies": [ + "@lucide/astro", + "class-variance-authority" + ], + "registryDependencies": [ + "@fulldev/button" + ], + "files": [ + { + "path": "src/components/ui/code-block/code-block-actions.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\nconst { class: className, ...props } = Astro.props\n---\n\n&]:m-0 [[data-slot=code-block]>&]:top-3 [[data-slot=code-block]>&]:end-3 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:top-2 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:end-2 [[data-slot=code-block]>&]:*:[button]:bg-background [[data-slot=code-block]>&]:*:[button]:ring-1 [[data-slot=code-block]>&]:*:[button]:ring-foreground/10 ms-auto flex shrink-0 items-center [[data-slot=code-block]>&]:absolute [[data-slot=code-block]>&]:z-10 [[data-slot=code-block]>&]:opacity-0 [[data-slot=code-block]>&]:transition-opacity [[data-slot=code-block]>&]:group-focus-within/code-block:opacity-100 [[data-slot=code-block]>&]:group-hover/code-block:opacity-100 [[data-slot=code-block]>&]:pointer-coarse:opacity-100\",\n className\n )}\n {...props}\n>\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-content.astro", + "content": "---\n/* eslint-disable astro/jsx-a11y/no-noninteractive-tabindex -- Focusable code supports keyboard scrolling, as in shadcn/ui. */\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\nimport CodeBlockLine from \"./code-block-line.astro\"\n\ntype Props = HTMLAttributes<\"pre\"> & {\n code?: string\n wrap?: boolean\n lineNumbers?: boolean\n startLine?: number\n}\n\nconst {\n class: className,\n code,\n wrap = false,\n lineNumbers = false,\n startLine = 1,\n style,\n ...props\n} = Astro.props\n\nconst contentStyle =\n typeof style === \"string\"\n ? `counter-reset: line ${startLine - 1}; ${style}`\n : { counterReset: `line ${startLine - 1}`, ...style }\n---\n\n{code !== undefined ? lineNumbers ? code.replace(/\\n$/, \"\").split(\"\\n\").map((line) => {line}) : code : }\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-copy-button.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport CheckIcon from \"@lucide/astro/icons/check\"\nimport CopyIcon from \"@lucide/astro/icons/copy\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button, type ButtonVariantProps } from \"@/components/ui/button\"\n\ntype Props = Omit, \"value\" | \"type\"> &\n ButtonVariantProps & {\n value: string\n copyLabel?: string\n copiedLabel?: string\n errorLabel?: string\n }\n\nconst {\n class: className,\n value,\n variant = \"ghost\",\n size = \"icon-xs\",\n copyLabel = \"Copy\",\n copiedLabel = \"Copied\",\n errorLabel = \"Could not copy\",\n ...props\n} = Astro.props\n---\n\n\n \n \n\n\n\n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-footer.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\nconst { class: className, ...props } = Astro.props\n---\n\n\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-header.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\nconst { class: className, ...props } = Astro.props\n---\n\n[data-slot=code-block-title]]:min-w-0\",\n className\n )}\n {...props}\n>\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-line.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 \"-mx-4 px-4 in-data-numbered:gap-x-3 before:min-w-6 before:text-end before:text-muted-foreground after:start-1 after:text-muted-foreground group-data-[size=sm]/code-block:-mx-3 group-data-[size=sm]/code-block:px-3 relative block min-h-lh before:select-none after:absolute after:top-0 after:select-none in-data-numbered:col-span-2 in-data-numbered:grid in-data-numbered:grid-cols-subgrid in-data-numbered:[counter-increment:line] in-data-numbered:before:content-[counter(line)] in-data-numbered:supports-[content:counter(line)_/_'']:before:content-[counter(line)_/_'']\",\n {\n variants: {\n variant: {\n default: \"\",\n added: \"bg-muted after:content-['+']\",\n removed: \"bg-destructive/10 after:text-destructive after:content-['−']\",\n highlighted: \"bg-muted\",\n },\n },\n defaultVariants: { variant: \"default\" },\n }\n)\n\ntype Props = HTMLAttributes<\"span\"> & VariantProps\nconst { class: className, variant = \"default\", ...props } = Astro.props\n---\n\n\n \n \n {\"\\n\"}\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-title.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\nconst { class: className, ...props } = Astro.props\n---\n\n\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block.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 \"rounded-xl text-sm data-[size=sm]:text-xs has-[>[data-slot=code-block-content]:focus-visible]:ring-[3px] has-[>[data-slot=code-block-content]:focus-visible]:ring-ring/50 data-[size=sm]:rounded-lg group/code-block relative flex w-full min-w-0 flex-col overflow-hidden\",\n {\n variants: {\n variant: {\n default: \"border border-input text-foreground dark:bg-input/30 has-[>[data-slot=code-block-content]:focus-visible]:border-ring\",\n destructive: \"border border-destructive/30 text-destructive dark:border-destructive/40\",\n },\n },\n defaultVariants: { variant: \"default\" },\n }\n)\n\ntype Props = HTMLAttributes<\"div\"> &\n VariantProps & {\n size?: \"default\" | \"sm\"\n }\n\nconst {\n class: className,\n variant = \"default\",\n size = \"default\",\n ...props\n} = Astro.props\n---\n\n\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/index.ts", + "content": "export { default as CodeBlock } from \"./code-block.astro\"\nexport { default as CodeBlockHeader } from \"./code-block-header.astro\"\nexport { default as CodeBlockTitle } from \"./code-block-title.astro\"\nexport { default as CodeBlockActions } from \"./code-block-actions.astro\"\nexport { default as CodeBlockCopyButton } from \"./code-block-copy-button.astro\"\nexport { default as CodeBlockContent } from \"./code-block-content.astro\"\nexport { default as CodeBlockLine } from \"./code-block-line.astro\"\nexport { default as CodeBlockFooter } from \"./code-block-footer.astro\"\n", + "type": "registry:ui" + } + ], + "docs": "https://ui.full.dev/components/code-block/", + "categories": [ + "ui" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/public/r/styles/base-maia/collapsible-examples.json b/public/r/styles/base-maia/collapsible-examples.json index 56b092a2f..7d0f08173 100644 --- a/public/r/styles/base-maia/collapsible-examples.json +++ b/public/r/styles/base-maia/collapsible-examples.json @@ -25,6 +25,11 @@ "content": "---\nimport ChevronsUpDown from \"@lucide/astro/icons/chevrons-up-down\"\n\nimport { buttonVariants } from \"@/components/ui/button\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/components/ui/collapsible\"\n---\n\n\n
\n

Order #4189

\n \n \n Toggle details\n \n
\n
\n Status\n Shipped\n
\n \n
\n

Shipping address

\n

100 Market St, San Francisco

\n
\n
\n

Items

\n

2x Studio Headphones

\n
\n
\n
\n", "type": "registry:component" }, + { + "path": "src/components/examples/collapsible/collapsible-dismissal.astro", + "content": "---\nimport ChevronDownIcon from \"@lucide/astro/icons/chevron-down\"\n\nimport { buttonVariants } from \"@/components/ui/button\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/components/ui/collapsible\"\n---\n\n
\n \n \n Browse documentation\n \n \n \n \n \n \n

\n Open the panel, then press Escape or click outside it to close.\n

\n
\n", + "type": "registry:component" + }, { "path": "src/components/examples/collapsible/collapsible-file-tree.astro", "content": "---\nimport ChevronRightIcon from \"@lucide/astro/icons/chevron-right\"\nimport FileIcon from \"@lucide/astro/icons/file\"\nimport FolderIcon from \"@lucide/astro/icons/folder\"\n\nimport { Button, buttonVariants } from \"@/components/ui/button\"\nimport { Card, CardContent, CardHeader } from \"@/components/ui/card\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/components/ui/collapsible\"\nimport { Tabs, TabsList, TabsTrigger } from \"@/components/ui/tabs\"\n\ntype FileTreeItem = { name: string } | { name: string; items: FileTreeItem[] }\n\nconst fileTree: FileTreeItem[] = [\n {\n name: \"components\",\n items: [\n {\n name: \"ui\",\n items: [\n { name: \"button.tsx\" },\n { name: \"card.tsx\" },\n { name: \"dialog.tsx\" },\n { name: \"input.tsx\" },\n { name: \"select.tsx\" },\n { name: \"table.tsx\" },\n ],\n },\n { name: \"login-form.tsx\" },\n { name: \"register-form.tsx\" },\n ],\n },\n {\n name: \"lib\",\n items: [{ name: \"utils.ts\" }, { name: \"cn.ts\" }, { name: \"api.ts\" }],\n },\n {\n name: \"hooks\",\n items: [\n { name: \"use-media-query.ts\" },\n { name: \"use-debounce.ts\" },\n { name: \"use-local-storage.ts\" },\n ],\n },\n {\n name: \"types\",\n items: [{ name: \"index.d.ts\" }, { name: \"api.d.ts\" }],\n },\n {\n name: \"public\",\n items: [{ name: \"favicon.ico\" }, { name: \"logo.svg\" }, { name: \"images\" }],\n },\n { name: \"app.tsx\" },\n { name: \"layout.tsx\" },\n { name: \"globals.css\" },\n { name: \"package.json\" },\n { name: \"tsconfig.json\" },\n { name: \"README.md\" },\n { name: \".gitignore\" },\n]\n\n// Renders the card, or one tree level when Astro.self passes `items`.\nconst { items } = Astro.props as { items?: FileTreeItem[] }\n---\n\n{items ? (\n items.map((fileItem) =>\n \"items\" in fileItem ? (\n \n \n \n \n {fileItem.name}\n \n \n
\n \n
\n
\n
\n ) : (\n \n \n {fileItem.name}\n \n )\n )\n) : (\n \n \n \n \n Explorer\n Outline\n \n \n \n \n
\n \n
\n
\n
\n)}\n", diff --git a/public/r/styles/base-maia/collapsible.json b/public/r/styles/base-maia/collapsible.json index 51460f6ff..dd0c03d41 100644 --- a/public/r/styles/base-maia/collapsible.json +++ b/public/r/styles/base-maia/collapsible.json @@ -4,12 +4,12 @@ "title": "Collapsible", "description": "An interactive component which expands/collapses a panel.", "dependencies": [ - "@data-slot/collapsible@^1.0.2" + "@data-slot/collapsible@^1.1.2" ], "files": [ { "path": "src/components/ui/collapsible/collapsible.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\"> & {\n // \"li\" makes a list item the collapsible, such as a sidebar menu item.\n as?: \"div\" | \"li\"\n defaultOpen?: boolean\n hiddenUntilFound?: boolean\n}\n\nconst {\n as: Tag = \"div\",\n class: className,\n defaultOpen,\n hiddenUntilFound,\n ...props\n} = Astro.props\n---\n\n\n \n\n\n\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\"> & {\n // \"li\" makes a list item the collapsible, such as a sidebar menu item.\n as?: \"div\" | \"li\"\n defaultOpen?: boolean\n hiddenUntilFound?: boolean\n closeOnEscape?: boolean\n closeOnClickOutside?: boolean\n}\n\nconst {\n as: Tag = \"div\",\n class: className,\n defaultOpen,\n hiddenUntilFound,\n closeOnEscape,\n closeOnClickOutside,\n ...props\n} = Astro.props\n---\n\n\n \n\n\n\n", "type": "registry:ui" }, { diff --git a/public/r/styles/base-maia/combobox.json b/public/r/styles/base-maia/combobox.json index 5fd1b98e2..d6d79f9c7 100644 --- a/public/r/styles/base-maia/combobox.json +++ b/public/r/styles/base-maia/combobox.json @@ -4,8 +4,8 @@ "title": "Combobox", "description": "Autocomplete input with a list of suggestions.", "dependencies": [ - "@data-slot/combobox@^1.0.2", - "@data-slot/core@^1.0.2", + "@data-slot/combobox@^1.1.2", + "@data-slot/core@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -34,7 +34,7 @@ }, { "path": "src/components/ui/combobox/combobox-input.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport XIcon from \"@lucide/astro/icons/x\"\n\nimport { cn } from \"@/lib/utils\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n} from \"@/components/ui/input-group\"\n\nimport ComboboxTrigger from \"./combobox-trigger.astro\"\n\ntype Props = HTMLAttributes<\"input\"> & {\n showTrigger?: boolean\n showClear?: boolean\n}\n\nconst {\n class: className,\n type = \"text\",\n disabled = false,\n showTrigger = true,\n showClear = false,\n ...props\n} = Astro.props\n---\n\n\n \n \n {showTrigger && (\n \n )}\n {showClear && (\n \n \n \n )}\n \n \n\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport XIcon from \"@lucide/astro/icons/x\"\n\nimport { cn } from \"@/lib/utils\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n} from \"@/components/ui/input-group\"\n\nimport ComboboxTrigger from \"./combobox-trigger.astro\"\n\ntype Props = HTMLAttributes<\"input\"> & {\n showTrigger?: boolean\n showClear?: boolean\n clearLabel?: string\n}\n\nconst {\n class: className,\n type = \"text\",\n disabled = false,\n showTrigger = true,\n showClear = false,\n clearLabel = \"Clear selection\",\n ...props\n} = Astro.props\n---\n\n\n \n \n {showTrigger && (\n \n )}\n {showClear && (\n \n \n \n )}\n \n \n\n", "type": "registry:ui" }, { diff --git a/public/r/styles/base-maia/command.json b/public/r/styles/base-maia/command.json index 2629cd44b..426f88421 100644 --- a/public/r/styles/base-maia/command.json +++ b/public/r/styles/base-maia/command.json @@ -4,9 +4,9 @@ "title": "Command", "description": "Command menu for search and quick actions.", "dependencies": [ - "@data-slot/command@^1.0.2", + "@data-slot/command@^1.1.2", "@lucide/astro", - "@data-slot/core@^1.0.2" + "@data-slot/core@^1.1.2" ], "registryDependencies": [ "@fulldev/dialog" diff --git a/public/r/styles/base-maia/components.json b/public/r/styles/base-maia/components.json index 90872f412..e0f9f98bf 100644 --- a/public/r/styles/base-maia/components.json +++ b/public/r/styles/base-maia/components.json @@ -18,6 +18,7 @@ "@fulldev/card", "@fulldev/carousel", "@fulldev/checkbox", + "@fulldev/code-block", "@fulldev/collapsible", "@fulldev/combobox", "@fulldev/command", @@ -43,6 +44,7 @@ "@fulldev/pagination", "@fulldev/popover", "@fulldev/price", + "@fulldev/progress", "@fulldev/radio-group", "@fulldev/rating", "@fulldev/resizable", diff --git a/public/r/styles/base-maia/dialog.json b/public/r/styles/base-maia/dialog.json index 65efe57be..228c94f46 100644 --- a/public/r/styles/base-maia/dialog.json +++ b/public/r/styles/base-maia/dialog.json @@ -4,7 +4,7 @@ "title": "Dialog", "description": "A window overlaid on either the primary window or another dialog window, rendering the content underneath inert.", "dependencies": [ - "@data-slot/dialog@^1.0.2", + "@data-slot/dialog@^1.1.2", "@lucide/astro" ], "registryDependencies": [ diff --git a/public/r/styles/base-maia/drawer.json b/public/r/styles/base-maia/drawer.json index def211b2c..c90c4eb17 100644 --- a/public/r/styles/base-maia/drawer.json +++ b/public/r/styles/base-maia/drawer.json @@ -4,7 +4,7 @@ "title": "Drawer", "description": "A drawer component that slides in from any edge of the screen.", "dependencies": [ - "@data-slot/drawer@^1.0.2" + "@data-slot/drawer@^1.1.2" ], "registryDependencies": [ "@fulldev/button" diff --git a/public/r/styles/base-maia/dropdown-menu.json b/public/r/styles/base-maia/dropdown-menu.json index 9a8fcb86f..276c9cae8 100644 --- a/public/r/styles/base-maia/dropdown-menu.json +++ b/public/r/styles/base-maia/dropdown-menu.json @@ -4,7 +4,7 @@ "title": "Dropdown Menu", "description": "Displays a menu to the user, such as a set of actions or functions, triggered by a button.", "dependencies": [ - "@data-slot/dropdown-menu@^1.0.2", + "@data-slot/dropdown-menu@^1.1.2", "@lucide/astro" ], "files": [ diff --git a/public/r/styles/base-maia/hover-card.json b/public/r/styles/base-maia/hover-card.json index 1e8f96085..aa8bffbd5 100644 --- a/public/r/styles/base-maia/hover-card.json +++ b/public/r/styles/base-maia/hover-card.json @@ -4,8 +4,8 @@ "title": "Hover Card", "description": "For sighted users to preview content available behind a link.", "dependencies": [ - "@data-slot/hover-card@^1.0.2", - "@data-slot/core@^1.0.2" + "@data-slot/hover-card@^1.1.2", + "@data-slot/core@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-maia/navigation-menu.json b/public/r/styles/base-maia/navigation-menu.json index 30f8951ed..f134fcb15 100644 --- a/public/r/styles/base-maia/navigation-menu.json +++ b/public/r/styles/base-maia/navigation-menu.json @@ -4,7 +4,7 @@ "title": "Navigation Menu", "description": "A collection of links for navigating websites.", "dependencies": [ - "@data-slot/navigation-menu@^1.0.2", + "@data-slot/navigation-menu@^1.1.2", "@lucide/astro" ], "files": [ diff --git a/public/r/styles/base-maia/popover.json b/public/r/styles/base-maia/popover.json index c5deb7ceb..7568597a6 100644 --- a/public/r/styles/base-maia/popover.json +++ b/public/r/styles/base-maia/popover.json @@ -4,7 +4,7 @@ "title": "Popover", "description": "Displays rich content in a floating layer, triggered by a button.", "dependencies": [ - "@data-slot/popover@^1.0.2" + "@data-slot/popover@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-maia/progress-examples.json b/public/r/styles/base-maia/progress-examples.json new file mode 100644 index 000000000..4fb614b85 --- /dev/null +++ b/public/r/styles/base-maia/progress-examples.json @@ -0,0 +1,33 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "progress-examples", + "title": "Progress examples", + "description": "The examples from the shadcn/ui Progress docs.", + "registryDependencies": [ + "@fulldev/progress" + ], + "files": [ + { + "path": "src/components/examples/progress/progress-custom-max.astro", + "content": "---\nimport { Progress } from \"@/components/ui/progress\"\n---\n\n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-demo.astro", + "content": "---\nimport { Progress } from \"@/components/ui/progress\"\n---\n\n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-indeterminate.astro", + "content": "---\nimport { Progress } from \"@/components/ui/progress\"\n---\n\n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-rtl.astro", + "content": "---\nimport { Progress } from \"@/components/ui/progress\"\n---\n\n\n", + "type": "registry:component" + } + ], + "docs": "https://ui.full.dev/components/progress/", + "type": "registry:example" +} \ No newline at end of file diff --git a/public/r/styles/base-maia/progress.json b/public/r/styles/base-maia/progress.json new file mode 100644 index 000000000..c908e60ce --- /dev/null +++ b/public/r/styles/base-maia/progress.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "progress", + "title": "Progress", + "description": "Shows how much of a task or sequence is complete.", + "files": [ + { + "path": "src/components/ui/progress/index.ts", + "content": "export { default as Progress } from \"./progress.astro\"\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/progress/progress.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\"> & {\n value?: number | null\n max?: number\n label?: string\n showValue?: boolean\n}\n\nconst {\n class: className,\n value,\n max = 100,\n label,\n showValue = false,\n \"aria-label\": ariaLabel = label || \"Progress\",\n \"aria-labelledby\": ariaLabelledby,\n \"aria-valuetext\": ariaValueText,\n ...props\n} = Astro.props\n\nconst resolvedMax = Number.isFinite(max) && max > 0 ? max : 100\nconst resolvedValue =\n typeof value === \"number\" && Number.isFinite(value)\n ? Math.min(resolvedMax, Math.max(0, value))\n : undefined\nconst percentage =\n resolvedValue === undefined ? undefined : (resolvedValue / resolvedMax) * 100\nconst stateAttributes = {\n \"data-indeterminate\": resolvedValue === undefined ? \"\" : undefined,\n \"data-complete\": resolvedValue === resolvedMax ? \"\" : undefined,\n \"data-progressing\":\n resolvedValue !== undefined && resolvedValue < resolvedMax ? \"\" : undefined,\n}\n---\n\n\n \n {label && (\n \n {label}\n \n )}\n {showValue && percentage !== undefined && (\n \n {Math.round(percentage)}%\n \n )}\n \n \n \n \n\n", + "type": "registry:ui" + } + ], + "docs": "https://ui.full.dev/components/progress/", + "categories": [ + "ui" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/public/r/styles/base-maia/radio-group.json b/public/r/styles/base-maia/radio-group.json index 00e4e9800..65f1f7199 100644 --- a/public/r/styles/base-maia/radio-group.json +++ b/public/r/styles/base-maia/radio-group.json @@ -4,7 +4,7 @@ "title": "Radio Group", "description": "A set of checkable buttons, known as radio buttons, where no more than one of the buttons can be checked at a time.", "dependencies": [ - "@data-slot/radio-group@^1.0.2" + "@data-slot/radio-group@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-maia/registry.json b/public/r/styles/base-maia/registry.json index 4fbb90332..a8da3ba13 100644 --- a/public/r/styles/base-maia/registry.json +++ b/public/r/styles/base-maia/registry.json @@ -13,7 +13,7 @@ ], "docs": "https://ui.full.dev/components/accordion/", "dependencies": [ - "@data-slot/accordion@^1.0.2", + "@data-slot/accordion@^1.1.2", "@lucide/astro" ], "files": [ @@ -81,7 +81,7 @@ ], "docs": "https://ui.full.dev/components/alert-dialog/", "dependencies": [ - "@data-slot/alert-dialog@^1.0.2" + "@data-slot/alert-dialog@^1.1.2" ], "registryDependencies": [ "@fulldev/button" @@ -367,6 +367,61 @@ } ] }, + { + "name": "code-block", + "type": "registry:ui", + "title": "Code Block", + "description": "Code and plain-text snippets with copy actions, line numbers and highlighted lines.", + "categories": [ + "ui" + ], + "docs": "https://ui.full.dev/components/code-block/", + "dependencies": [ + "@lucide/astro", + "class-variance-authority" + ], + "registryDependencies": [ + "@fulldev/button" + ], + "files": [ + { + "path": "src/components/ui/code-block/code-block-actions.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-content.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-copy-button.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-footer.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-header.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-line.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-title.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/index.ts", + "type": "registry:ui" + } + ] + }, { "name": "collapsible", "type": "registry:ui", @@ -377,7 +432,7 @@ ], "docs": "https://ui.full.dev/components/collapsible/", "dependencies": [ - "@data-slot/collapsible@^1.0.2" + "@data-slot/collapsible@^1.1.2" ], "files": [ { @@ -408,8 +463,8 @@ ], "docs": "https://ui.full.dev/components/combobox/", "dependencies": [ - "@data-slot/combobox@^1.0.2", - "@data-slot/core@^1.0.2", + "@data-slot/combobox@^1.1.2", + "@data-slot/core@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -476,9 +531,9 @@ ], "docs": "https://ui.full.dev/components/command/", "dependencies": [ - "@data-slot/command@^1.0.2", + "@data-slot/command@^1.1.2", "@lucide/astro", - "@data-slot/core@^1.0.2" + "@data-slot/core@^1.1.2" ], "registryDependencies": [ "@fulldev/dialog" @@ -536,7 +591,7 @@ ], "docs": "https://ui.full.dev/components/dialog/", "dependencies": [ - "@data-slot/dialog@^1.0.2", + "@data-slot/dialog@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -599,7 +654,7 @@ ], "docs": "https://ui.full.dev/components/dropdown-menu/", "dependencies": [ - "@data-slot/dropdown-menu@^1.0.2", + "@data-slot/dropdown-menu@^1.1.2", "@lucide/astro" ], "files": [ @@ -818,8 +873,8 @@ ], "docs": "https://ui.full.dev/components/hover-card/", "dependencies": [ - "@data-slot/hover-card@^1.0.2", - "@data-slot/core@^1.0.2" + "@data-slot/hover-card@^1.1.2", + "@data-slot/core@^1.1.2" ], "files": [ { @@ -1183,7 +1238,7 @@ ], "docs": "https://ui.full.dev/components/navigation-menu/", "dependencies": [ - "@data-slot/navigation-menu@^1.0.2", + "@data-slot/navigation-menu@^1.1.2", "@lucide/astro" ], "files": [ @@ -1270,7 +1325,7 @@ ], "docs": "https://ui.full.dev/components/popover/", "dependencies": [ - "@data-slot/popover@^1.0.2" + "@data-slot/popover@^1.1.2" ], "files": [ { @@ -1335,6 +1390,26 @@ } ] }, + { + "name": "progress", + "type": "registry:ui", + "title": "Progress", + "description": "Shows how much of a task or sequence is complete.", + "categories": [ + "ui" + ], + "docs": "https://ui.full.dev/components/progress/", + "files": [ + { + "path": "src/components/ui/progress/index.ts", + "type": "registry:ui" + }, + { + "path": "src/components/ui/progress/progress.astro", + "type": "registry:ui" + } + ] + }, { "name": "radio-group", "type": "registry:ui", @@ -1345,7 +1420,7 @@ ], "docs": "https://ui.full.dev/components/radio-group/", "dependencies": [ - "@data-slot/radio-group@^1.0.2" + "@data-slot/radio-group@^1.1.2" ], "files": [ { @@ -1395,7 +1470,7 @@ ], "docs": "https://ui.full.dev/components/select/", "dependencies": [ - "@data-slot/select@^1.0.2", + "@data-slot/select@^1.1.2", "@lucide/astro" ], "files": [ @@ -1499,7 +1574,7 @@ ], "docs": "https://ui.full.dev/components/sheet/", "dependencies": [ - "@data-slot/dialog@^1.0.2", + "@data-slot/dialog@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -1555,7 +1630,7 @@ ], "docs": "https://ui.full.dev/components/sidebar/", "dependencies": [ - "@data-slot/tooltip@^1.0.2", + "@data-slot/tooltip@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -1676,7 +1751,7 @@ ], "docs": "https://ui.full.dev/components/slider/", "dependencies": [ - "@data-slot/slider@^1.0.2" + "@data-slot/slider@^1.1.2" ], "files": [ { @@ -1742,7 +1817,7 @@ ], "docs": "https://ui.full.dev/components/switch/", "dependencies": [ - "@data-slot/switch@^1.0.2" + "@data-slot/switch@^1.1.2" ], "files": [ { @@ -1813,7 +1888,7 @@ ], "docs": "https://ui.full.dev/components/tabs/", "dependencies": [ - "@data-slot/tabs@^1.0.2" + "@data-slot/tabs@^1.1.2" ], "files": [ { @@ -1888,7 +1963,7 @@ ], "docs": "https://ui.full.dev/components/toggle/", "dependencies": [ - "@data-slot/toggle@^1.0.2" + "@data-slot/toggle@^1.1.2" ], "files": [ { @@ -1935,7 +2010,7 @@ ], "docs": "https://ui.full.dev/components/tooltip/", "dependencies": [ - "@data-slot/tooltip@^1.0.2" + "@data-slot/tooltip@^1.1.2" ], "files": [ { @@ -2070,7 +2145,7 @@ ], "docs": "https://ui.full.dev/components/drawer/", "dependencies": [ - "@data-slot/drawer@^1.0.2" + "@data-slot/drawer@^1.1.2" ], "registryDependencies": [ "@fulldev/button" @@ -2160,7 +2235,7 @@ ], "docs": "https://ui.full.dev/components/resizable/", "dependencies": [ - "@data-slot/resizable@^1.0.2" + "@data-slot/resizable@^1.1.2" ], "files": [ { @@ -2191,7 +2266,7 @@ ], "docs": "https://ui.full.dev/components/toast/", "dependencies": [ - "@data-slot/toast@^1.0.2", + "@data-slot/toast@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -2258,7 +2333,7 @@ ], "docs": "https://ui.full.dev/components/toggle-group/", "dependencies": [ - "@data-slot/toggle-group@^1.0.2" + "@data-slot/toggle-group@^1.1.2" ], "registryDependencies": [ "@fulldev/toggle" @@ -2459,6 +2534,7 @@ "@fulldev/card", "@fulldev/carousel", "@fulldev/checkbox", + "@fulldev/code-block", "@fulldev/collapsible", "@fulldev/combobox", "@fulldev/command", @@ -2484,6 +2560,7 @@ "@fulldev/pagination", "@fulldev/popover", "@fulldev/price", + "@fulldev/progress", "@fulldev/radio-group", "@fulldev/rating", "@fulldev/resizable", @@ -5359,6 +5436,34 @@ } ] }, + { + "name": "code-block-examples", + "type": "registry:example", + "title": "Code Block examples", + "description": "The examples from the shadcn/ui Code Block docs.", + "docs": "https://ui.full.dev/components/code-block/", + "registryDependencies": [ + "@fulldev/code-block" + ], + "files": [ + { + "path": "src/components/examples/code-block/code-block-demo.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-lines.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-numbered.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-wrap.astro", + "type": "registry:component" + } + ] + }, { "name": "collapsible-examples", "type": "registry:example", @@ -5385,6 +5490,10 @@ "path": "src/components/examples/collapsible/collapsible-demo.astro", "type": "registry:component" }, + { + "path": "src/components/examples/collapsible/collapsible-dismissal.astro", + "type": "registry:component" + }, { "path": "src/components/examples/collapsible/collapsible-file-tree.astro", "type": "registry:component" @@ -6185,6 +6294,34 @@ } ] }, + { + "name": "progress-examples", + "type": "registry:example", + "title": "Progress examples", + "description": "The examples from the shadcn/ui Progress docs.", + "docs": "https://ui.full.dev/components/progress/", + "registryDependencies": [ + "@fulldev/progress" + ], + "files": [ + { + "path": "src/components/examples/progress/progress-custom-max.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-demo.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-indeterminate.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-rtl.astro", + "type": "registry:component" + } + ] + }, { "name": "radio-group-examples", "type": "registry:example", diff --git a/public/r/styles/base-maia/resizable.json b/public/r/styles/base-maia/resizable.json index 5573e780f..b58e4687f 100644 --- a/public/r/styles/base-maia/resizable.json +++ b/public/r/styles/base-maia/resizable.json @@ -4,7 +4,7 @@ "title": "Resizable", "description": "Accessible panel groups with pointer and keyboard resizing.", "dependencies": [ - "@data-slot/resizable@^1.0.2" + "@data-slot/resizable@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-maia/select.json b/public/r/styles/base-maia/select.json index b899405c7..b525892c8 100644 --- a/public/r/styles/base-maia/select.json +++ b/public/r/styles/base-maia/select.json @@ -4,7 +4,7 @@ "title": "Select", "description": "Displays a list of options for the user to pick from, triggered by a button.", "dependencies": [ - "@data-slot/select@^1.0.2", + "@data-slot/select@^1.1.2", "@lucide/astro" ], "files": [ diff --git a/public/r/styles/base-maia/sheet.json b/public/r/styles/base-maia/sheet.json index b15f92d72..b0a223737 100644 --- a/public/r/styles/base-maia/sheet.json +++ b/public/r/styles/base-maia/sheet.json @@ -4,7 +4,7 @@ "title": "Sheet", "description": "A sliding panel component that appears from the edge of the screen.", "dependencies": [ - "@data-slot/dialog@^1.0.2", + "@data-slot/dialog@^1.1.2", "@lucide/astro" ], "registryDependencies": [ diff --git a/public/r/styles/base-maia/sidebar.json b/public/r/styles/base-maia/sidebar.json index a22a67f0f..505eefb46 100644 --- a/public/r/styles/base-maia/sidebar.json +++ b/public/r/styles/base-maia/sidebar.json @@ -4,7 +4,7 @@ "title": "Sidebar", "description": "A composable, themeable, and customizable Astro sidebar component.", "dependencies": [ - "@data-slot/tooltip@^1.0.2", + "@data-slot/tooltip@^1.1.2", "@lucide/astro" ], "registryDependencies": [ diff --git a/public/r/styles/base-maia/slider.json b/public/r/styles/base-maia/slider.json index 7daab7aae..8236a6133 100644 --- a/public/r/styles/base-maia/slider.json +++ b/public/r/styles/base-maia/slider.json @@ -4,7 +4,7 @@ "title": "Slider", "description": "An input where the user selects a value from within a given range.", "dependencies": [ - "@data-slot/slider@^1.0.2" + "@data-slot/slider@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-maia/switch.json b/public/r/styles/base-maia/switch.json index 5c3a3ddb8..b0013d715 100644 --- a/public/r/styles/base-maia/switch.json +++ b/public/r/styles/base-maia/switch.json @@ -4,7 +4,7 @@ "title": "Switch", "description": "A control that allows the user to toggle between checked and not checked.", "dependencies": [ - "@data-slot/switch@^1.0.2" + "@data-slot/switch@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-maia/tabs.json b/public/r/styles/base-maia/tabs.json index ac205e245..e4bfa7a57 100644 --- a/public/r/styles/base-maia/tabs.json +++ b/public/r/styles/base-maia/tabs.json @@ -4,7 +4,7 @@ "title": "Tabs", "description": "A set of layered sections of content, known as tabs, that display one panel of content at a time.", "dependencies": [ - "@data-slot/tabs@^1.0.2" + "@data-slot/tabs@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-maia/toast.json b/public/r/styles/base-maia/toast.json index 19f5528dc..20df8ad1d 100644 --- a/public/r/styles/base-maia/toast.json +++ b/public/r/styles/base-maia/toast.json @@ -4,7 +4,7 @@ "title": "Toast", "description": "A brief notification that appears without interrupting the user.", "dependencies": [ - "@data-slot/toast@^1.0.2", + "@data-slot/toast@^1.1.2", "@lucide/astro" ], "registryDependencies": [ diff --git a/public/r/styles/base-maia/toggle-group.json b/public/r/styles/base-maia/toggle-group.json index 823fe4522..63fd673ad 100644 --- a/public/r/styles/base-maia/toggle-group.json +++ b/public/r/styles/base-maia/toggle-group.json @@ -4,7 +4,7 @@ "title": "Toggle Group", "description": "A set of two-state buttons that can be toggled independently or as a single choice.", "dependencies": [ - "@data-slot/toggle-group@^1.0.2" + "@data-slot/toggle-group@^1.1.2" ], "registryDependencies": [ "@fulldev/toggle" diff --git a/public/r/styles/base-maia/toggle.json b/public/r/styles/base-maia/toggle.json index 74aabb65f..6b695b5fd 100644 --- a/public/r/styles/base-maia/toggle.json +++ b/public/r/styles/base-maia/toggle.json @@ -4,7 +4,7 @@ "title": "Toggle", "description": "A two-state button that can be either on or off.", "dependencies": [ - "@data-slot/toggle@^1.0.2" + "@data-slot/toggle@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-maia/tooltip.json b/public/r/styles/base-maia/tooltip.json index acffb0f16..7d987f2f8 100644 --- a/public/r/styles/base-maia/tooltip.json +++ b/public/r/styles/base-maia/tooltip.json @@ -4,7 +4,7 @@ "title": "Tooltip", "description": "Displays contextual information when a user hovers or focuses a trigger.", "dependencies": [ - "@data-slot/tooltip@^1.0.2" + "@data-slot/tooltip@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-mira/accordion.json b/public/r/styles/base-mira/accordion.json index 69e1e6311..a3d1c68dc 100644 --- a/public/r/styles/base-mira/accordion.json +++ b/public/r/styles/base-mira/accordion.json @@ -4,7 +4,7 @@ "title": "Accordion", "description": "A vertically stacked set of interactive headings that each reveal a section of content.", "dependencies": [ - "@data-slot/accordion@^1.0.2", + "@data-slot/accordion@^1.1.2", "@lucide/astro" ], "files": [ diff --git a/public/r/styles/base-mira/alert-dialog.json b/public/r/styles/base-mira/alert-dialog.json index 5c7efcf6d..19b4183fb 100644 --- a/public/r/styles/base-mira/alert-dialog.json +++ b/public/r/styles/base-mira/alert-dialog.json @@ -4,7 +4,7 @@ "title": "Alert Dialog", "description": "A modal dialog for important confirmations that expects a response.", "dependencies": [ - "@data-slot/alert-dialog@^1.0.2" + "@data-slot/alert-dialog@^1.1.2" ], "registryDependencies": [ "@fulldev/button" diff --git a/public/r/styles/base-mira/code-block-examples.json b/public/r/styles/base-mira/code-block-examples.json new file mode 100644 index 000000000..2dc78df89 --- /dev/null +++ b/public/r/styles/base-mira/code-block-examples.json @@ -0,0 +1,33 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "code-block-examples", + "title": "Code Block examples", + "description": "The examples from the shadcn/ui Code Block docs.", + "registryDependencies": [ + "@fulldev/code-block" + ], + "files": [ + { + "path": "src/components/examples/code-block/code-block-demo.astro", + "content": "---\nimport {\n CodeBlock,\n CodeBlockActions,\n CodeBlockContent,\n CodeBlockCopyButton,\n CodeBlockHeader,\n CodeBlockTitle,\n} from \"@/components/ui/code-block\"\n\nconst code = `import { Button } from \"@/components/ui/button\"\n\n`\n---\n\n\n \n contact.astro\n \n \n \n \n \n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-lines.astro", + "content": "---\nimport {\n CodeBlock,\n CodeBlockContent,\n CodeBlockLine,\n} from \"@/components/ui/code-block\"\n---\n\n\n \n export const site = {\n {' title: \"Our website\",'}\n \n {' title: \"Our new website\",'}\n \n \n {' lang: \"en\",'}\n }\n \n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-numbered.astro", + "content": "---\nimport { CodeBlock, CodeBlockContent } from \"@/components/ui/code-block\"\n\nconst code = `{\n \"name\": \"our-website\",\n\n \"private\": true\n}`\n---\n\n\n \n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-wrap.astro", + "content": "---\nimport {\n CodeBlock,\n CodeBlockActions,\n CodeBlockContent,\n CodeBlockCopyButton,\n CodeBlockFooter,\n} from \"@/components/ui/code-block\"\n\nconst code =\n \"A long explanation can wrap inside a code block without making the surrounding article or the page scroll horizontally.\"\n---\n\n\n \n \n \n \n Plain text, with line wrapping.\n\n", + "type": "registry:component" + } + ], + "docs": "https://ui.full.dev/components/code-block/", + "type": "registry:example" +} \ No newline at end of file diff --git a/public/r/styles/base-mira/code-block.json b/public/r/styles/base-mira/code-block.json new file mode 100644 index 000000000..e7bdf0916 --- /dev/null +++ b/public/r/styles/base-mira/code-block.json @@ -0,0 +1,65 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "code-block", + "title": "Code Block", + "description": "Code and plain-text snippets with copy actions, line numbers and highlighted lines.", + "dependencies": [ + "@lucide/astro", + "class-variance-authority" + ], + "registryDependencies": [ + "@fulldev/button" + ], + "files": [ + { + "path": "src/components/ui/code-block/code-block-actions.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\nconst { class: className, ...props } = Astro.props\n---\n\n&]:m-0 [[data-slot=code-block]>&]:top-2 [[data-slot=code-block]>&]:end-2 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:top-1.5 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:end-1.5 [[data-slot=code-block]>&]:*:[button]:bg-background [[data-slot=code-block]>&]:*:[button]:ring-1 [[data-slot=code-block]>&]:*:[button]:ring-foreground/10 ms-auto flex shrink-0 items-center [[data-slot=code-block]>&]:absolute [[data-slot=code-block]>&]:z-10 [[data-slot=code-block]>&]:opacity-0 [[data-slot=code-block]>&]:transition-opacity [[data-slot=code-block]>&]:group-focus-within/code-block:opacity-100 [[data-slot=code-block]>&]:group-hover/code-block:opacity-100 [[data-slot=code-block]>&]:pointer-coarse:opacity-100\",\n className\n )}\n {...props}\n>\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-content.astro", + "content": "---\n/* eslint-disable astro/jsx-a11y/no-noninteractive-tabindex -- Focusable code supports keyboard scrolling, as in shadcn/ui. */\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\nimport CodeBlockLine from \"./code-block-line.astro\"\n\ntype Props = HTMLAttributes<\"pre\"> & {\n code?: string\n wrap?: boolean\n lineNumbers?: boolean\n startLine?: number\n}\n\nconst {\n class: className,\n code,\n wrap = false,\n lineNumbers = false,\n startLine = 1,\n style,\n ...props\n} = Astro.props\n\nconst contentStyle =\n typeof style === \"string\"\n ? `counter-reset: line ${startLine - 1}; ${style}`\n : { counterReset: `line ${startLine - 1}`, ...style }\n---\n\n{code !== undefined ? lineNumbers ? code.replace(/\\n$/, \"\").split(\"\\n\").map((line) => {line}) : code : }\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-copy-button.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport CheckIcon from \"@lucide/astro/icons/check\"\nimport CopyIcon from \"@lucide/astro/icons/copy\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button, type ButtonVariantProps } from \"@/components/ui/button\"\n\ntype Props = Omit, \"value\" | \"type\"> &\n ButtonVariantProps & {\n value: string\n copyLabel?: string\n copiedLabel?: string\n errorLabel?: string\n }\n\nconst {\n class: className,\n value,\n variant = \"ghost\",\n size = \"icon-xs\",\n copyLabel = \"Copy\",\n copiedLabel = \"Copied\",\n errorLabel = \"Could not copy\",\n ...props\n} = Astro.props\n---\n\n\n \n \n\n\n\n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-footer.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\nconst { class: className, ...props } = Astro.props\n---\n\n\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-header.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\nconst { class: className, ...props } = Astro.props\n---\n\n[data-slot=code-block-title]]:min-w-0\",\n className\n )}\n {...props}\n>\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-line.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 \"-mx-3 px-3 in-data-numbered:gap-x-3 before:min-w-6 before:text-end before:text-muted-foreground after:start-1 after:text-muted-foreground group-data-[size=sm]/code-block:-mx-2 group-data-[size=sm]/code-block:px-2 relative block min-h-lh before:select-none after:absolute after:top-0 after:select-none in-data-numbered:col-span-2 in-data-numbered:grid in-data-numbered:grid-cols-subgrid in-data-numbered:[counter-increment:line] in-data-numbered:before:content-[counter(line)] in-data-numbered:supports-[content:counter(line)_/_'']:before:content-[counter(line)_/_'']\",\n {\n variants: {\n variant: {\n default: \"\",\n added: \"bg-muted after:content-['+']\",\n removed: \"bg-destructive/10 after:text-destructive after:content-['−']\",\n highlighted: \"bg-muted\",\n },\n },\n defaultVariants: { variant: \"default\" },\n }\n)\n\ntype Props = HTMLAttributes<\"span\"> & VariantProps\nconst { class: className, variant = \"default\", ...props } = Astro.props\n---\n\n\n \n \n {\"\\n\"}\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-title.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\nconst { class: className, ...props } = Astro.props\n---\n\n\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block.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 \"rounded-md text-sm data-[size=sm]:text-xs has-[>[data-slot=code-block-content]:focus-visible]:ring-2 has-[>[data-slot=code-block-content]:focus-visible]:ring-ring/30 group/code-block relative flex w-full min-w-0 flex-col overflow-hidden\",\n {\n variants: {\n variant: {\n default: \"border border-input text-foreground dark:bg-input/30 has-[>[data-slot=code-block-content]:focus-visible]:border-ring\",\n destructive: \"border border-destructive/30 text-destructive dark:border-destructive/40\",\n },\n },\n defaultVariants: { variant: \"default\" },\n }\n)\n\ntype Props = HTMLAttributes<\"div\"> &\n VariantProps & {\n size?: \"default\" | \"sm\"\n }\n\nconst {\n class: className,\n variant = \"default\",\n size = \"default\",\n ...props\n} = Astro.props\n---\n\n\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/index.ts", + "content": "export { default as CodeBlock } from \"./code-block.astro\"\nexport { default as CodeBlockHeader } from \"./code-block-header.astro\"\nexport { default as CodeBlockTitle } from \"./code-block-title.astro\"\nexport { default as CodeBlockActions } from \"./code-block-actions.astro\"\nexport { default as CodeBlockCopyButton } from \"./code-block-copy-button.astro\"\nexport { default as CodeBlockContent } from \"./code-block-content.astro\"\nexport { default as CodeBlockLine } from \"./code-block-line.astro\"\nexport { default as CodeBlockFooter } from \"./code-block-footer.astro\"\n", + "type": "registry:ui" + } + ], + "docs": "https://ui.full.dev/components/code-block/", + "categories": [ + "ui" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/public/r/styles/base-mira/collapsible-examples.json b/public/r/styles/base-mira/collapsible-examples.json index 56b092a2f..7d0f08173 100644 --- a/public/r/styles/base-mira/collapsible-examples.json +++ b/public/r/styles/base-mira/collapsible-examples.json @@ -25,6 +25,11 @@ "content": "---\nimport ChevronsUpDown from \"@lucide/astro/icons/chevrons-up-down\"\n\nimport { buttonVariants } from \"@/components/ui/button\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/components/ui/collapsible\"\n---\n\n\n
\n

Order #4189

\n \n \n Toggle details\n \n
\n
\n Status\n Shipped\n
\n \n
\n

Shipping address

\n

100 Market St, San Francisco

\n
\n
\n

Items

\n

2x Studio Headphones

\n
\n
\n
\n", "type": "registry:component" }, + { + "path": "src/components/examples/collapsible/collapsible-dismissal.astro", + "content": "---\nimport ChevronDownIcon from \"@lucide/astro/icons/chevron-down\"\n\nimport { buttonVariants } from \"@/components/ui/button\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/components/ui/collapsible\"\n---\n\n
\n \n \n Browse documentation\n \n \n \n \n \n \n

\n Open the panel, then press Escape or click outside it to close.\n

\n
\n", + "type": "registry:component" + }, { "path": "src/components/examples/collapsible/collapsible-file-tree.astro", "content": "---\nimport ChevronRightIcon from \"@lucide/astro/icons/chevron-right\"\nimport FileIcon from \"@lucide/astro/icons/file\"\nimport FolderIcon from \"@lucide/astro/icons/folder\"\n\nimport { Button, buttonVariants } from \"@/components/ui/button\"\nimport { Card, CardContent, CardHeader } from \"@/components/ui/card\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/components/ui/collapsible\"\nimport { Tabs, TabsList, TabsTrigger } from \"@/components/ui/tabs\"\n\ntype FileTreeItem = { name: string } | { name: string; items: FileTreeItem[] }\n\nconst fileTree: FileTreeItem[] = [\n {\n name: \"components\",\n items: [\n {\n name: \"ui\",\n items: [\n { name: \"button.tsx\" },\n { name: \"card.tsx\" },\n { name: \"dialog.tsx\" },\n { name: \"input.tsx\" },\n { name: \"select.tsx\" },\n { name: \"table.tsx\" },\n ],\n },\n { name: \"login-form.tsx\" },\n { name: \"register-form.tsx\" },\n ],\n },\n {\n name: \"lib\",\n items: [{ name: \"utils.ts\" }, { name: \"cn.ts\" }, { name: \"api.ts\" }],\n },\n {\n name: \"hooks\",\n items: [\n { name: \"use-media-query.ts\" },\n { name: \"use-debounce.ts\" },\n { name: \"use-local-storage.ts\" },\n ],\n },\n {\n name: \"types\",\n items: [{ name: \"index.d.ts\" }, { name: \"api.d.ts\" }],\n },\n {\n name: \"public\",\n items: [{ name: \"favicon.ico\" }, { name: \"logo.svg\" }, { name: \"images\" }],\n },\n { name: \"app.tsx\" },\n { name: \"layout.tsx\" },\n { name: \"globals.css\" },\n { name: \"package.json\" },\n { name: \"tsconfig.json\" },\n { name: \"README.md\" },\n { name: \".gitignore\" },\n]\n\n// Renders the card, or one tree level when Astro.self passes `items`.\nconst { items } = Astro.props as { items?: FileTreeItem[] }\n---\n\n{items ? (\n items.map((fileItem) =>\n \"items\" in fileItem ? (\n \n \n \n \n {fileItem.name}\n \n \n
\n \n
\n
\n
\n ) : (\n \n \n {fileItem.name}\n \n )\n )\n) : (\n \n \n \n \n Explorer\n Outline\n \n \n \n \n
\n \n
\n
\n
\n)}\n", diff --git a/public/r/styles/base-mira/collapsible.json b/public/r/styles/base-mira/collapsible.json index 51460f6ff..dd0c03d41 100644 --- a/public/r/styles/base-mira/collapsible.json +++ b/public/r/styles/base-mira/collapsible.json @@ -4,12 +4,12 @@ "title": "Collapsible", "description": "An interactive component which expands/collapses a panel.", "dependencies": [ - "@data-slot/collapsible@^1.0.2" + "@data-slot/collapsible@^1.1.2" ], "files": [ { "path": "src/components/ui/collapsible/collapsible.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\"> & {\n // \"li\" makes a list item the collapsible, such as a sidebar menu item.\n as?: \"div\" | \"li\"\n defaultOpen?: boolean\n hiddenUntilFound?: boolean\n}\n\nconst {\n as: Tag = \"div\",\n class: className,\n defaultOpen,\n hiddenUntilFound,\n ...props\n} = Astro.props\n---\n\n\n \n\n\n\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\"> & {\n // \"li\" makes a list item the collapsible, such as a sidebar menu item.\n as?: \"div\" | \"li\"\n defaultOpen?: boolean\n hiddenUntilFound?: boolean\n closeOnEscape?: boolean\n closeOnClickOutside?: boolean\n}\n\nconst {\n as: Tag = \"div\",\n class: className,\n defaultOpen,\n hiddenUntilFound,\n closeOnEscape,\n closeOnClickOutside,\n ...props\n} = Astro.props\n---\n\n\n \n\n\n\n", "type": "registry:ui" }, { diff --git a/public/r/styles/base-mira/combobox.json b/public/r/styles/base-mira/combobox.json index 3b2ae2a90..e533b5465 100644 --- a/public/r/styles/base-mira/combobox.json +++ b/public/r/styles/base-mira/combobox.json @@ -4,8 +4,8 @@ "title": "Combobox", "description": "Autocomplete input with a list of suggestions.", "dependencies": [ - "@data-slot/combobox@^1.0.2", - "@data-slot/core@^1.0.2", + "@data-slot/combobox@^1.1.2", + "@data-slot/core@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -34,7 +34,7 @@ }, { "path": "src/components/ui/combobox/combobox-input.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport XIcon from \"@lucide/astro/icons/x\"\n\nimport { cn } from \"@/lib/utils\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n} from \"@/components/ui/input-group\"\n\nimport ComboboxTrigger from \"./combobox-trigger.astro\"\n\ntype Props = HTMLAttributes<\"input\"> & {\n showTrigger?: boolean\n showClear?: boolean\n}\n\nconst {\n class: className,\n type = \"text\",\n disabled = false,\n showTrigger = true,\n showClear = false,\n ...props\n} = Astro.props\n---\n\n\n \n \n {showTrigger && (\n \n )}\n {showClear && (\n \n \n \n )}\n \n \n\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport XIcon from \"@lucide/astro/icons/x\"\n\nimport { cn } from \"@/lib/utils\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n} from \"@/components/ui/input-group\"\n\nimport ComboboxTrigger from \"./combobox-trigger.astro\"\n\ntype Props = HTMLAttributes<\"input\"> & {\n showTrigger?: boolean\n showClear?: boolean\n clearLabel?: string\n}\n\nconst {\n class: className,\n type = \"text\",\n disabled = false,\n showTrigger = true,\n showClear = false,\n clearLabel = \"Clear selection\",\n ...props\n} = Astro.props\n---\n\n\n \n \n {showTrigger && (\n \n )}\n {showClear && (\n \n \n \n )}\n \n \n\n", "type": "registry:ui" }, { diff --git a/public/r/styles/base-mira/command.json b/public/r/styles/base-mira/command.json index e0d157b09..77cca2076 100644 --- a/public/r/styles/base-mira/command.json +++ b/public/r/styles/base-mira/command.json @@ -4,9 +4,9 @@ "title": "Command", "description": "Command menu for search and quick actions.", "dependencies": [ - "@data-slot/command@^1.0.2", + "@data-slot/command@^1.1.2", "@lucide/astro", - "@data-slot/core@^1.0.2" + "@data-slot/core@^1.1.2" ], "registryDependencies": [ "@fulldev/dialog" diff --git a/public/r/styles/base-mira/components.json b/public/r/styles/base-mira/components.json index 90872f412..e0f9f98bf 100644 --- a/public/r/styles/base-mira/components.json +++ b/public/r/styles/base-mira/components.json @@ -18,6 +18,7 @@ "@fulldev/card", "@fulldev/carousel", "@fulldev/checkbox", + "@fulldev/code-block", "@fulldev/collapsible", "@fulldev/combobox", "@fulldev/command", @@ -43,6 +44,7 @@ "@fulldev/pagination", "@fulldev/popover", "@fulldev/price", + "@fulldev/progress", "@fulldev/radio-group", "@fulldev/rating", "@fulldev/resizable", diff --git a/public/r/styles/base-mira/dialog.json b/public/r/styles/base-mira/dialog.json index 89b3e9cce..95fc111a5 100644 --- a/public/r/styles/base-mira/dialog.json +++ b/public/r/styles/base-mira/dialog.json @@ -4,7 +4,7 @@ "title": "Dialog", "description": "A window overlaid on either the primary window or another dialog window, rendering the content underneath inert.", "dependencies": [ - "@data-slot/dialog@^1.0.2", + "@data-slot/dialog@^1.1.2", "@lucide/astro" ], "registryDependencies": [ diff --git a/public/r/styles/base-mira/drawer.json b/public/r/styles/base-mira/drawer.json index c0c1f2ea2..5cd1a579c 100644 --- a/public/r/styles/base-mira/drawer.json +++ b/public/r/styles/base-mira/drawer.json @@ -4,7 +4,7 @@ "title": "Drawer", "description": "A drawer component that slides in from any edge of the screen.", "dependencies": [ - "@data-slot/drawer@^1.0.2" + "@data-slot/drawer@^1.1.2" ], "registryDependencies": [ "@fulldev/button" diff --git a/public/r/styles/base-mira/dropdown-menu.json b/public/r/styles/base-mira/dropdown-menu.json index b3ba0bf44..0cefaec42 100644 --- a/public/r/styles/base-mira/dropdown-menu.json +++ b/public/r/styles/base-mira/dropdown-menu.json @@ -4,7 +4,7 @@ "title": "Dropdown Menu", "description": "Displays a menu to the user, such as a set of actions or functions, triggered by a button.", "dependencies": [ - "@data-slot/dropdown-menu@^1.0.2", + "@data-slot/dropdown-menu@^1.1.2", "@lucide/astro" ], "files": [ diff --git a/public/r/styles/base-mira/hover-card.json b/public/r/styles/base-mira/hover-card.json index 33e9b4a82..b599e6507 100644 --- a/public/r/styles/base-mira/hover-card.json +++ b/public/r/styles/base-mira/hover-card.json @@ -4,8 +4,8 @@ "title": "Hover Card", "description": "For sighted users to preview content available behind a link.", "dependencies": [ - "@data-slot/hover-card@^1.0.2", - "@data-slot/core@^1.0.2" + "@data-slot/hover-card@^1.1.2", + "@data-slot/core@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-mira/navigation-menu.json b/public/r/styles/base-mira/navigation-menu.json index 5367381e9..be5427ae0 100644 --- a/public/r/styles/base-mira/navigation-menu.json +++ b/public/r/styles/base-mira/navigation-menu.json @@ -4,7 +4,7 @@ "title": "Navigation Menu", "description": "A collection of links for navigating websites.", "dependencies": [ - "@data-slot/navigation-menu@^1.0.2", + "@data-slot/navigation-menu@^1.1.2", "@lucide/astro" ], "files": [ diff --git a/public/r/styles/base-mira/popover.json b/public/r/styles/base-mira/popover.json index ca0177ef7..5062be3aa 100644 --- a/public/r/styles/base-mira/popover.json +++ b/public/r/styles/base-mira/popover.json @@ -4,7 +4,7 @@ "title": "Popover", "description": "Displays rich content in a floating layer, triggered by a button.", "dependencies": [ - "@data-slot/popover@^1.0.2" + "@data-slot/popover@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-mira/progress-examples.json b/public/r/styles/base-mira/progress-examples.json new file mode 100644 index 000000000..4fb614b85 --- /dev/null +++ b/public/r/styles/base-mira/progress-examples.json @@ -0,0 +1,33 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "progress-examples", + "title": "Progress examples", + "description": "The examples from the shadcn/ui Progress docs.", + "registryDependencies": [ + "@fulldev/progress" + ], + "files": [ + { + "path": "src/components/examples/progress/progress-custom-max.astro", + "content": "---\nimport { Progress } from \"@/components/ui/progress\"\n---\n\n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-demo.astro", + "content": "---\nimport { Progress } from \"@/components/ui/progress\"\n---\n\n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-indeterminate.astro", + "content": "---\nimport { Progress } from \"@/components/ui/progress\"\n---\n\n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-rtl.astro", + "content": "---\nimport { Progress } from \"@/components/ui/progress\"\n---\n\n\n", + "type": "registry:component" + } + ], + "docs": "https://ui.full.dev/components/progress/", + "type": "registry:example" +} \ No newline at end of file diff --git a/public/r/styles/base-mira/progress.json b/public/r/styles/base-mira/progress.json new file mode 100644 index 000000000..7fdc5a700 --- /dev/null +++ b/public/r/styles/base-mira/progress.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "progress", + "title": "Progress", + "description": "Shows how much of a task or sequence is complete.", + "files": [ + { + "path": "src/components/ui/progress/index.ts", + "content": "export { default as Progress } from \"./progress.astro\"\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/progress/progress.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\"> & {\n value?: number | null\n max?: number\n label?: string\n showValue?: boolean\n}\n\nconst {\n class: className,\n value,\n max = 100,\n label,\n showValue = false,\n \"aria-label\": ariaLabel = label || \"Progress\",\n \"aria-labelledby\": ariaLabelledby,\n \"aria-valuetext\": ariaValueText,\n ...props\n} = Astro.props\n\nconst resolvedMax = Number.isFinite(max) && max > 0 ? max : 100\nconst resolvedValue =\n typeof value === \"number\" && Number.isFinite(value)\n ? Math.min(resolvedMax, Math.max(0, value))\n : undefined\nconst percentage =\n resolvedValue === undefined ? undefined : (resolvedValue / resolvedMax) * 100\nconst stateAttributes = {\n \"data-indeterminate\": resolvedValue === undefined ? \"\" : undefined,\n \"data-complete\": resolvedValue === resolvedMax ? \"\" : undefined,\n \"data-progressing\":\n resolvedValue !== undefined && resolvedValue < resolvedMax ? \"\" : undefined,\n}\n---\n\n\n \n {label && (\n \n {label}\n \n )}\n {showValue && percentage !== undefined && (\n \n {Math.round(percentage)}%\n \n )}\n \n \n \n \n\n", + "type": "registry:ui" + } + ], + "docs": "https://ui.full.dev/components/progress/", + "categories": [ + "ui" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/public/r/styles/base-mira/radio-group.json b/public/r/styles/base-mira/radio-group.json index 00e4e9800..65f1f7199 100644 --- a/public/r/styles/base-mira/radio-group.json +++ b/public/r/styles/base-mira/radio-group.json @@ -4,7 +4,7 @@ "title": "Radio Group", "description": "A set of checkable buttons, known as radio buttons, where no more than one of the buttons can be checked at a time.", "dependencies": [ - "@data-slot/radio-group@^1.0.2" + "@data-slot/radio-group@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-mira/registry.json b/public/r/styles/base-mira/registry.json index 81864ad8b..98bf66ece 100644 --- a/public/r/styles/base-mira/registry.json +++ b/public/r/styles/base-mira/registry.json @@ -13,7 +13,7 @@ ], "docs": "https://ui.full.dev/components/accordion/", "dependencies": [ - "@data-slot/accordion@^1.0.2", + "@data-slot/accordion@^1.1.2", "@lucide/astro" ], "files": [ @@ -81,7 +81,7 @@ ], "docs": "https://ui.full.dev/components/alert-dialog/", "dependencies": [ - "@data-slot/alert-dialog@^1.0.2" + "@data-slot/alert-dialog@^1.1.2" ], "registryDependencies": [ "@fulldev/button" @@ -367,6 +367,61 @@ } ] }, + { + "name": "code-block", + "type": "registry:ui", + "title": "Code Block", + "description": "Code and plain-text snippets with copy actions, line numbers and highlighted lines.", + "categories": [ + "ui" + ], + "docs": "https://ui.full.dev/components/code-block/", + "dependencies": [ + "@lucide/astro", + "class-variance-authority" + ], + "registryDependencies": [ + "@fulldev/button" + ], + "files": [ + { + "path": "src/components/ui/code-block/code-block-actions.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-content.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-copy-button.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-footer.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-header.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-line.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-title.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/index.ts", + "type": "registry:ui" + } + ] + }, { "name": "collapsible", "type": "registry:ui", @@ -377,7 +432,7 @@ ], "docs": "https://ui.full.dev/components/collapsible/", "dependencies": [ - "@data-slot/collapsible@^1.0.2" + "@data-slot/collapsible@^1.1.2" ], "files": [ { @@ -408,8 +463,8 @@ ], "docs": "https://ui.full.dev/components/combobox/", "dependencies": [ - "@data-slot/combobox@^1.0.2", - "@data-slot/core@^1.0.2", + "@data-slot/combobox@^1.1.2", + "@data-slot/core@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -476,9 +531,9 @@ ], "docs": "https://ui.full.dev/components/command/", "dependencies": [ - "@data-slot/command@^1.0.2", + "@data-slot/command@^1.1.2", "@lucide/astro", - "@data-slot/core@^1.0.2" + "@data-slot/core@^1.1.2" ], "registryDependencies": [ "@fulldev/dialog" @@ -536,7 +591,7 @@ ], "docs": "https://ui.full.dev/components/dialog/", "dependencies": [ - "@data-slot/dialog@^1.0.2", + "@data-slot/dialog@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -599,7 +654,7 @@ ], "docs": "https://ui.full.dev/components/dropdown-menu/", "dependencies": [ - "@data-slot/dropdown-menu@^1.0.2", + "@data-slot/dropdown-menu@^1.1.2", "@lucide/astro" ], "files": [ @@ -818,8 +873,8 @@ ], "docs": "https://ui.full.dev/components/hover-card/", "dependencies": [ - "@data-slot/hover-card@^1.0.2", - "@data-slot/core@^1.0.2" + "@data-slot/hover-card@^1.1.2", + "@data-slot/core@^1.1.2" ], "files": [ { @@ -1183,7 +1238,7 @@ ], "docs": "https://ui.full.dev/components/navigation-menu/", "dependencies": [ - "@data-slot/navigation-menu@^1.0.2", + "@data-slot/navigation-menu@^1.1.2", "@lucide/astro" ], "files": [ @@ -1270,7 +1325,7 @@ ], "docs": "https://ui.full.dev/components/popover/", "dependencies": [ - "@data-slot/popover@^1.0.2" + "@data-slot/popover@^1.1.2" ], "files": [ { @@ -1335,6 +1390,26 @@ } ] }, + { + "name": "progress", + "type": "registry:ui", + "title": "Progress", + "description": "Shows how much of a task or sequence is complete.", + "categories": [ + "ui" + ], + "docs": "https://ui.full.dev/components/progress/", + "files": [ + { + "path": "src/components/ui/progress/index.ts", + "type": "registry:ui" + }, + { + "path": "src/components/ui/progress/progress.astro", + "type": "registry:ui" + } + ] + }, { "name": "radio-group", "type": "registry:ui", @@ -1345,7 +1420,7 @@ ], "docs": "https://ui.full.dev/components/radio-group/", "dependencies": [ - "@data-slot/radio-group@^1.0.2" + "@data-slot/radio-group@^1.1.2" ], "files": [ { @@ -1395,7 +1470,7 @@ ], "docs": "https://ui.full.dev/components/select/", "dependencies": [ - "@data-slot/select@^1.0.2", + "@data-slot/select@^1.1.2", "@lucide/astro" ], "files": [ @@ -1499,7 +1574,7 @@ ], "docs": "https://ui.full.dev/components/sheet/", "dependencies": [ - "@data-slot/dialog@^1.0.2", + "@data-slot/dialog@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -1555,7 +1630,7 @@ ], "docs": "https://ui.full.dev/components/sidebar/", "dependencies": [ - "@data-slot/tooltip@^1.0.2", + "@data-slot/tooltip@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -1676,7 +1751,7 @@ ], "docs": "https://ui.full.dev/components/slider/", "dependencies": [ - "@data-slot/slider@^1.0.2" + "@data-slot/slider@^1.1.2" ], "files": [ { @@ -1742,7 +1817,7 @@ ], "docs": "https://ui.full.dev/components/switch/", "dependencies": [ - "@data-slot/switch@^1.0.2" + "@data-slot/switch@^1.1.2" ], "files": [ { @@ -1813,7 +1888,7 @@ ], "docs": "https://ui.full.dev/components/tabs/", "dependencies": [ - "@data-slot/tabs@^1.0.2" + "@data-slot/tabs@^1.1.2" ], "files": [ { @@ -1888,7 +1963,7 @@ ], "docs": "https://ui.full.dev/components/toggle/", "dependencies": [ - "@data-slot/toggle@^1.0.2" + "@data-slot/toggle@^1.1.2" ], "files": [ { @@ -1935,7 +2010,7 @@ ], "docs": "https://ui.full.dev/components/tooltip/", "dependencies": [ - "@data-slot/tooltip@^1.0.2" + "@data-slot/tooltip@^1.1.2" ], "files": [ { @@ -2070,7 +2145,7 @@ ], "docs": "https://ui.full.dev/components/drawer/", "dependencies": [ - "@data-slot/drawer@^1.0.2" + "@data-slot/drawer@^1.1.2" ], "registryDependencies": [ "@fulldev/button" @@ -2160,7 +2235,7 @@ ], "docs": "https://ui.full.dev/components/resizable/", "dependencies": [ - "@data-slot/resizable@^1.0.2" + "@data-slot/resizable@^1.1.2" ], "files": [ { @@ -2191,7 +2266,7 @@ ], "docs": "https://ui.full.dev/components/toast/", "dependencies": [ - "@data-slot/toast@^1.0.2", + "@data-slot/toast@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -2258,7 +2333,7 @@ ], "docs": "https://ui.full.dev/components/toggle-group/", "dependencies": [ - "@data-slot/toggle-group@^1.0.2" + "@data-slot/toggle-group@^1.1.2" ], "registryDependencies": [ "@fulldev/toggle" @@ -2459,6 +2534,7 @@ "@fulldev/card", "@fulldev/carousel", "@fulldev/checkbox", + "@fulldev/code-block", "@fulldev/collapsible", "@fulldev/combobox", "@fulldev/command", @@ -2484,6 +2560,7 @@ "@fulldev/pagination", "@fulldev/popover", "@fulldev/price", + "@fulldev/progress", "@fulldev/radio-group", "@fulldev/rating", "@fulldev/resizable", @@ -5359,6 +5436,34 @@ } ] }, + { + "name": "code-block-examples", + "type": "registry:example", + "title": "Code Block examples", + "description": "The examples from the shadcn/ui Code Block docs.", + "docs": "https://ui.full.dev/components/code-block/", + "registryDependencies": [ + "@fulldev/code-block" + ], + "files": [ + { + "path": "src/components/examples/code-block/code-block-demo.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-lines.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-numbered.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-wrap.astro", + "type": "registry:component" + } + ] + }, { "name": "collapsible-examples", "type": "registry:example", @@ -5385,6 +5490,10 @@ "path": "src/components/examples/collapsible/collapsible-demo.astro", "type": "registry:component" }, + { + "path": "src/components/examples/collapsible/collapsible-dismissal.astro", + "type": "registry:component" + }, { "path": "src/components/examples/collapsible/collapsible-file-tree.astro", "type": "registry:component" @@ -6185,6 +6294,34 @@ } ] }, + { + "name": "progress-examples", + "type": "registry:example", + "title": "Progress examples", + "description": "The examples from the shadcn/ui Progress docs.", + "docs": "https://ui.full.dev/components/progress/", + "registryDependencies": [ + "@fulldev/progress" + ], + "files": [ + { + "path": "src/components/examples/progress/progress-custom-max.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-demo.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-indeterminate.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-rtl.astro", + "type": "registry:component" + } + ] + }, { "name": "radio-group-examples", "type": "registry:example", diff --git a/public/r/styles/base-mira/resizable.json b/public/r/styles/base-mira/resizable.json index 5573e780f..b58e4687f 100644 --- a/public/r/styles/base-mira/resizable.json +++ b/public/r/styles/base-mira/resizable.json @@ -4,7 +4,7 @@ "title": "Resizable", "description": "Accessible panel groups with pointer and keyboard resizing.", "dependencies": [ - "@data-slot/resizable@^1.0.2" + "@data-slot/resizable@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-mira/select.json b/public/r/styles/base-mira/select.json index 3fcd7acb1..cdf48f513 100644 --- a/public/r/styles/base-mira/select.json +++ b/public/r/styles/base-mira/select.json @@ -4,7 +4,7 @@ "title": "Select", "description": "Displays a list of options for the user to pick from, triggered by a button.", "dependencies": [ - "@data-slot/select@^1.0.2", + "@data-slot/select@^1.1.2", "@lucide/astro" ], "files": [ diff --git a/public/r/styles/base-mira/sheet.json b/public/r/styles/base-mira/sheet.json index b9cf23ad2..5db14f846 100644 --- a/public/r/styles/base-mira/sheet.json +++ b/public/r/styles/base-mira/sheet.json @@ -4,7 +4,7 @@ "title": "Sheet", "description": "A sliding panel component that appears from the edge of the screen.", "dependencies": [ - "@data-slot/dialog@^1.0.2", + "@data-slot/dialog@^1.1.2", "@lucide/astro" ], "registryDependencies": [ diff --git a/public/r/styles/base-mira/sidebar.json b/public/r/styles/base-mira/sidebar.json index 90504b0c2..027864111 100644 --- a/public/r/styles/base-mira/sidebar.json +++ b/public/r/styles/base-mira/sidebar.json @@ -4,7 +4,7 @@ "title": "Sidebar", "description": "A composable, themeable, and customizable Astro sidebar component.", "dependencies": [ - "@data-slot/tooltip@^1.0.2", + "@data-slot/tooltip@^1.1.2", "@lucide/astro" ], "registryDependencies": [ diff --git a/public/r/styles/base-mira/slider.json b/public/r/styles/base-mira/slider.json index dfa4175d4..18ba79712 100644 --- a/public/r/styles/base-mira/slider.json +++ b/public/r/styles/base-mira/slider.json @@ -4,7 +4,7 @@ "title": "Slider", "description": "An input where the user selects a value from within a given range.", "dependencies": [ - "@data-slot/slider@^1.0.2" + "@data-slot/slider@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-mira/switch.json b/public/r/styles/base-mira/switch.json index e3c1da963..f3d5d9119 100644 --- a/public/r/styles/base-mira/switch.json +++ b/public/r/styles/base-mira/switch.json @@ -4,7 +4,7 @@ "title": "Switch", "description": "A control that allows the user to toggle between checked and not checked.", "dependencies": [ - "@data-slot/switch@^1.0.2" + "@data-slot/switch@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-mira/tabs.json b/public/r/styles/base-mira/tabs.json index b3f6285fc..41f089ef4 100644 --- a/public/r/styles/base-mira/tabs.json +++ b/public/r/styles/base-mira/tabs.json @@ -4,7 +4,7 @@ "title": "Tabs", "description": "A set of layered sections of content, known as tabs, that display one panel of content at a time.", "dependencies": [ - "@data-slot/tabs@^1.0.2" + "@data-slot/tabs@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-mira/toast.json b/public/r/styles/base-mira/toast.json index 5f4d60d66..f110e24e7 100644 --- a/public/r/styles/base-mira/toast.json +++ b/public/r/styles/base-mira/toast.json @@ -4,7 +4,7 @@ "title": "Toast", "description": "A brief notification that appears without interrupting the user.", "dependencies": [ - "@data-slot/toast@^1.0.2", + "@data-slot/toast@^1.1.2", "@lucide/astro" ], "registryDependencies": [ diff --git a/public/r/styles/base-mira/toggle-group.json b/public/r/styles/base-mira/toggle-group.json index 79068483f..6f2824642 100644 --- a/public/r/styles/base-mira/toggle-group.json +++ b/public/r/styles/base-mira/toggle-group.json @@ -4,7 +4,7 @@ "title": "Toggle Group", "description": "A set of two-state buttons that can be toggled independently or as a single choice.", "dependencies": [ - "@data-slot/toggle-group@^1.0.2" + "@data-slot/toggle-group@^1.1.2" ], "registryDependencies": [ "@fulldev/toggle" diff --git a/public/r/styles/base-mira/toggle.json b/public/r/styles/base-mira/toggle.json index b598db72c..fe740eca5 100644 --- a/public/r/styles/base-mira/toggle.json +++ b/public/r/styles/base-mira/toggle.json @@ -4,7 +4,7 @@ "title": "Toggle", "description": "A two-state button that can be either on or off.", "dependencies": [ - "@data-slot/toggle@^1.0.2" + "@data-slot/toggle@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-mira/tooltip.json b/public/r/styles/base-mira/tooltip.json index 5eb0a8ffc..9d1754e23 100644 --- a/public/r/styles/base-mira/tooltip.json +++ b/public/r/styles/base-mira/tooltip.json @@ -4,7 +4,7 @@ "title": "Tooltip", "description": "Displays contextual information when a user hovers or focuses a trigger.", "dependencies": [ - "@data-slot/tooltip@^1.0.2" + "@data-slot/tooltip@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-nova/accordion.json b/public/r/styles/base-nova/accordion.json index a694999a2..8986f964d 100644 --- a/public/r/styles/base-nova/accordion.json +++ b/public/r/styles/base-nova/accordion.json @@ -4,7 +4,7 @@ "title": "Accordion", "description": "A vertically stacked set of interactive headings that each reveal a section of content.", "dependencies": [ - "@data-slot/accordion@^1.0.2", + "@data-slot/accordion@^1.1.2", "@lucide/astro" ], "files": [ diff --git a/public/r/styles/base-nova/alert-dialog.json b/public/r/styles/base-nova/alert-dialog.json index 87a0e4837..f7de14429 100644 --- a/public/r/styles/base-nova/alert-dialog.json +++ b/public/r/styles/base-nova/alert-dialog.json @@ -4,7 +4,7 @@ "title": "Alert Dialog", "description": "A modal dialog for important confirmations that expects a response.", "dependencies": [ - "@data-slot/alert-dialog@^1.0.2" + "@data-slot/alert-dialog@^1.1.2" ], "registryDependencies": [ "@fulldev/button" diff --git a/public/r/styles/base-nova/code-block-examples.json b/public/r/styles/base-nova/code-block-examples.json new file mode 100644 index 000000000..2dc78df89 --- /dev/null +++ b/public/r/styles/base-nova/code-block-examples.json @@ -0,0 +1,33 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "code-block-examples", + "title": "Code Block examples", + "description": "The examples from the shadcn/ui Code Block docs.", + "registryDependencies": [ + "@fulldev/code-block" + ], + "files": [ + { + "path": "src/components/examples/code-block/code-block-demo.astro", + "content": "---\nimport {\n CodeBlock,\n CodeBlockActions,\n CodeBlockContent,\n CodeBlockCopyButton,\n CodeBlockHeader,\n CodeBlockTitle,\n} from \"@/components/ui/code-block\"\n\nconst code = `import { Button } from \"@/components/ui/button\"\n\n`\n---\n\n\n \n contact.astro\n \n \n \n \n \n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-lines.astro", + "content": "---\nimport {\n CodeBlock,\n CodeBlockContent,\n CodeBlockLine,\n} from \"@/components/ui/code-block\"\n---\n\n\n \n export const site = {\n {' title: \"Our website\",'}\n \n {' title: \"Our new website\",'}\n \n \n {' lang: \"en\",'}\n }\n \n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-numbered.astro", + "content": "---\nimport { CodeBlock, CodeBlockContent } from \"@/components/ui/code-block\"\n\nconst code = `{\n \"name\": \"our-website\",\n\n \"private\": true\n}`\n---\n\n\n \n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-wrap.astro", + "content": "---\nimport {\n CodeBlock,\n CodeBlockActions,\n CodeBlockContent,\n CodeBlockCopyButton,\n CodeBlockFooter,\n} from \"@/components/ui/code-block\"\n\nconst code =\n \"A long explanation can wrap inside a code block without making the surrounding article or the page scroll horizontally.\"\n---\n\n\n \n \n \n \n Plain text, with line wrapping.\n\n", + "type": "registry:component" + } + ], + "docs": "https://ui.full.dev/components/code-block/", + "type": "registry:example" +} \ No newline at end of file diff --git a/public/r/styles/base-nova/code-block.json b/public/r/styles/base-nova/code-block.json new file mode 100644 index 000000000..5332ab9aa --- /dev/null +++ b/public/r/styles/base-nova/code-block.json @@ -0,0 +1,65 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "code-block", + "title": "Code Block", + "description": "Code and plain-text snippets with copy actions, line numbers and highlighted lines.", + "dependencies": [ + "@lucide/astro", + "class-variance-authority" + ], + "registryDependencies": [ + "@fulldev/button" + ], + "files": [ + { + "path": "src/components/ui/code-block/code-block-actions.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\nconst { class: className, ...props } = Astro.props\n---\n\n&]:m-0 [[data-slot=code-block]>&]:top-2 [[data-slot=code-block]>&]:end-2 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:top-1.5 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:end-1.5 [[data-slot=code-block]>&]:*:[button]:bg-background [[data-slot=code-block]>&]:*:[button]:ring-1 [[data-slot=code-block]>&]:*:[button]:ring-foreground/10 ms-auto flex shrink-0 items-center [[data-slot=code-block]>&]:absolute [[data-slot=code-block]>&]:z-10 [[data-slot=code-block]>&]:opacity-0 [[data-slot=code-block]>&]:transition-opacity [[data-slot=code-block]>&]:group-focus-within/code-block:opacity-100 [[data-slot=code-block]>&]:group-hover/code-block:opacity-100 [[data-slot=code-block]>&]:pointer-coarse:opacity-100\",\n className\n )}\n {...props}\n>\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-content.astro", + "content": "---\n/* eslint-disable astro/jsx-a11y/no-noninteractive-tabindex -- Focusable code supports keyboard scrolling, as in shadcn/ui. */\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\nimport CodeBlockLine from \"./code-block-line.astro\"\n\ntype Props = HTMLAttributes<\"pre\"> & {\n code?: string\n wrap?: boolean\n lineNumbers?: boolean\n startLine?: number\n}\n\nconst {\n class: className,\n code,\n wrap = false,\n lineNumbers = false,\n startLine = 1,\n style,\n ...props\n} = Astro.props\n\nconst contentStyle =\n typeof style === \"string\"\n ? `counter-reset: line ${startLine - 1}; ${style}`\n : { counterReset: `line ${startLine - 1}`, ...style }\n---\n\n{code !== undefined ? lineNumbers ? code.replace(/\\n$/, \"\").split(\"\\n\").map((line) => {line}) : code : }\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-copy-button.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport CheckIcon from \"@lucide/astro/icons/check\"\nimport CopyIcon from \"@lucide/astro/icons/copy\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button, type ButtonVariantProps } from \"@/components/ui/button\"\n\ntype Props = Omit, \"value\" | \"type\"> &\n ButtonVariantProps & {\n value: string\n copyLabel?: string\n copiedLabel?: string\n errorLabel?: string\n }\n\nconst {\n class: className,\n value,\n variant = \"ghost\",\n size = \"icon-xs\",\n copyLabel = \"Copy\",\n copiedLabel = \"Copied\",\n errorLabel = \"Could not copy\",\n ...props\n} = Astro.props\n---\n\n\n \n \n\n\n\n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-footer.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\nconst { class: className, ...props } = Astro.props\n---\n\n\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-header.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\nconst { class: className, ...props } = Astro.props\n---\n\n[data-slot=code-block-title]]:min-w-0\",\n className\n )}\n {...props}\n>\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-line.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 \"-mx-3 px-3 in-data-numbered:gap-x-3 before:min-w-6 before:text-end before:text-muted-foreground after:start-1 after:text-muted-foreground group-data-[size=sm]/code-block:-mx-2.5 group-data-[size=sm]/code-block:px-2.5 relative block min-h-lh before:select-none after:absolute after:top-0 after:select-none in-data-numbered:col-span-2 in-data-numbered:grid in-data-numbered:grid-cols-subgrid in-data-numbered:[counter-increment:line] in-data-numbered:before:content-[counter(line)] in-data-numbered:supports-[content:counter(line)_/_'']:before:content-[counter(line)_/_'']\",\n {\n variants: {\n variant: {\n default: \"\",\n added: \"bg-muted after:content-['+']\",\n removed: \"bg-destructive/10 after:text-destructive after:content-['−']\",\n highlighted: \"bg-muted\",\n },\n },\n defaultVariants: { variant: \"default\" },\n }\n)\n\ntype Props = HTMLAttributes<\"span\"> & VariantProps\nconst { class: className, variant = \"default\", ...props } = Astro.props\n---\n\n\n \n \n {\"\\n\"}\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-title.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\nconst { class: className, ...props } = Astro.props\n---\n\n\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block.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 \"rounded-lg text-sm data-[size=sm]:text-xs has-[>[data-slot=code-block-content]:focus-visible]:ring-3 has-[>[data-slot=code-block-content]:focus-visible]:ring-ring/50 group/code-block relative flex w-full min-w-0 flex-col overflow-hidden\",\n {\n variants: {\n variant: {\n default: \"border border-input text-foreground dark:bg-input/30 has-[>[data-slot=code-block-content]:focus-visible]:border-ring\",\n destructive: \"border border-destructive/30 text-destructive dark:border-destructive/40\",\n },\n },\n defaultVariants: { variant: \"default\" },\n }\n)\n\ntype Props = HTMLAttributes<\"div\"> &\n VariantProps & {\n size?: \"default\" | \"sm\"\n }\n\nconst {\n class: className,\n variant = \"default\",\n size = \"default\",\n ...props\n} = Astro.props\n---\n\n\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/index.ts", + "content": "export { default as CodeBlock } from \"./code-block.astro\"\nexport { default as CodeBlockHeader } from \"./code-block-header.astro\"\nexport { default as CodeBlockTitle } from \"./code-block-title.astro\"\nexport { default as CodeBlockActions } from \"./code-block-actions.astro\"\nexport { default as CodeBlockCopyButton } from \"./code-block-copy-button.astro\"\nexport { default as CodeBlockContent } from \"./code-block-content.astro\"\nexport { default as CodeBlockLine } from \"./code-block-line.astro\"\nexport { default as CodeBlockFooter } from \"./code-block-footer.astro\"\n", + "type": "registry:ui" + } + ], + "docs": "https://ui.full.dev/components/code-block/", + "categories": [ + "ui" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/public/r/styles/base-nova/collapsible-examples.json b/public/r/styles/base-nova/collapsible-examples.json index 56b092a2f..7d0f08173 100644 --- a/public/r/styles/base-nova/collapsible-examples.json +++ b/public/r/styles/base-nova/collapsible-examples.json @@ -25,6 +25,11 @@ "content": "---\nimport ChevronsUpDown from \"@lucide/astro/icons/chevrons-up-down\"\n\nimport { buttonVariants } from \"@/components/ui/button\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/components/ui/collapsible\"\n---\n\n\n
\n

Order #4189

\n \n \n Toggle details\n \n
\n
\n Status\n Shipped\n
\n \n
\n

Shipping address

\n

100 Market St, San Francisco

\n
\n
\n

Items

\n

2x Studio Headphones

\n
\n
\n
\n", "type": "registry:component" }, + { + "path": "src/components/examples/collapsible/collapsible-dismissal.astro", + "content": "---\nimport ChevronDownIcon from \"@lucide/astro/icons/chevron-down\"\n\nimport { buttonVariants } from \"@/components/ui/button\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/components/ui/collapsible\"\n---\n\n
\n \n \n Browse documentation\n \n \n \n \n \n \n

\n Open the panel, then press Escape or click outside it to close.\n

\n
\n", + "type": "registry:component" + }, { "path": "src/components/examples/collapsible/collapsible-file-tree.astro", "content": "---\nimport ChevronRightIcon from \"@lucide/astro/icons/chevron-right\"\nimport FileIcon from \"@lucide/astro/icons/file\"\nimport FolderIcon from \"@lucide/astro/icons/folder\"\n\nimport { Button, buttonVariants } from \"@/components/ui/button\"\nimport { Card, CardContent, CardHeader } from \"@/components/ui/card\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/components/ui/collapsible\"\nimport { Tabs, TabsList, TabsTrigger } from \"@/components/ui/tabs\"\n\ntype FileTreeItem = { name: string } | { name: string; items: FileTreeItem[] }\n\nconst fileTree: FileTreeItem[] = [\n {\n name: \"components\",\n items: [\n {\n name: \"ui\",\n items: [\n { name: \"button.tsx\" },\n { name: \"card.tsx\" },\n { name: \"dialog.tsx\" },\n { name: \"input.tsx\" },\n { name: \"select.tsx\" },\n { name: \"table.tsx\" },\n ],\n },\n { name: \"login-form.tsx\" },\n { name: \"register-form.tsx\" },\n ],\n },\n {\n name: \"lib\",\n items: [{ name: \"utils.ts\" }, { name: \"cn.ts\" }, { name: \"api.ts\" }],\n },\n {\n name: \"hooks\",\n items: [\n { name: \"use-media-query.ts\" },\n { name: \"use-debounce.ts\" },\n { name: \"use-local-storage.ts\" },\n ],\n },\n {\n name: \"types\",\n items: [{ name: \"index.d.ts\" }, { name: \"api.d.ts\" }],\n },\n {\n name: \"public\",\n items: [{ name: \"favicon.ico\" }, { name: \"logo.svg\" }, { name: \"images\" }],\n },\n { name: \"app.tsx\" },\n { name: \"layout.tsx\" },\n { name: \"globals.css\" },\n { name: \"package.json\" },\n { name: \"tsconfig.json\" },\n { name: \"README.md\" },\n { name: \".gitignore\" },\n]\n\n// Renders the card, or one tree level when Astro.self passes `items`.\nconst { items } = Astro.props as { items?: FileTreeItem[] }\n---\n\n{items ? (\n items.map((fileItem) =>\n \"items\" in fileItem ? (\n \n \n \n \n {fileItem.name}\n \n \n
\n \n
\n
\n
\n ) : (\n \n \n {fileItem.name}\n \n )\n )\n) : (\n \n \n \n \n Explorer\n Outline\n \n \n \n \n
\n \n
\n
\n
\n)}\n", diff --git a/public/r/styles/base-nova/collapsible.json b/public/r/styles/base-nova/collapsible.json index 51460f6ff..dd0c03d41 100644 --- a/public/r/styles/base-nova/collapsible.json +++ b/public/r/styles/base-nova/collapsible.json @@ -4,12 +4,12 @@ "title": "Collapsible", "description": "An interactive component which expands/collapses a panel.", "dependencies": [ - "@data-slot/collapsible@^1.0.2" + "@data-slot/collapsible@^1.1.2" ], "files": [ { "path": "src/components/ui/collapsible/collapsible.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\"> & {\n // \"li\" makes a list item the collapsible, such as a sidebar menu item.\n as?: \"div\" | \"li\"\n defaultOpen?: boolean\n hiddenUntilFound?: boolean\n}\n\nconst {\n as: Tag = \"div\",\n class: className,\n defaultOpen,\n hiddenUntilFound,\n ...props\n} = Astro.props\n---\n\n\n \n\n\n\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\"> & {\n // \"li\" makes a list item the collapsible, such as a sidebar menu item.\n as?: \"div\" | \"li\"\n defaultOpen?: boolean\n hiddenUntilFound?: boolean\n closeOnEscape?: boolean\n closeOnClickOutside?: boolean\n}\n\nconst {\n as: Tag = \"div\",\n class: className,\n defaultOpen,\n hiddenUntilFound,\n closeOnEscape,\n closeOnClickOutside,\n ...props\n} = Astro.props\n---\n\n\n \n\n\n\n", "type": "registry:ui" }, { diff --git a/public/r/styles/base-nova/combobox.json b/public/r/styles/base-nova/combobox.json index 45057cf18..1e68b9dae 100644 --- a/public/r/styles/base-nova/combobox.json +++ b/public/r/styles/base-nova/combobox.json @@ -4,8 +4,8 @@ "title": "Combobox", "description": "Autocomplete input with a list of suggestions.", "dependencies": [ - "@data-slot/combobox@^1.0.2", - "@data-slot/core@^1.0.2", + "@data-slot/combobox@^1.1.2", + "@data-slot/core@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -34,7 +34,7 @@ }, { "path": "src/components/ui/combobox/combobox-input.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport XIcon from \"@lucide/astro/icons/x\"\n\nimport { cn } from \"@/lib/utils\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n} from \"@/components/ui/input-group\"\n\nimport ComboboxTrigger from \"./combobox-trigger.astro\"\n\ntype Props = HTMLAttributes<\"input\"> & {\n showTrigger?: boolean\n showClear?: boolean\n}\n\nconst {\n class: className,\n type = \"text\",\n disabled = false,\n showTrigger = true,\n showClear = false,\n ...props\n} = Astro.props\n---\n\n\n \n \n {showTrigger && (\n \n )}\n {showClear && (\n \n \n \n )}\n \n \n\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport XIcon from \"@lucide/astro/icons/x\"\n\nimport { cn } from \"@/lib/utils\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n} from \"@/components/ui/input-group\"\n\nimport ComboboxTrigger from \"./combobox-trigger.astro\"\n\ntype Props = HTMLAttributes<\"input\"> & {\n showTrigger?: boolean\n showClear?: boolean\n clearLabel?: string\n}\n\nconst {\n class: className,\n type = \"text\",\n disabled = false,\n showTrigger = true,\n showClear = false,\n clearLabel = \"Clear selection\",\n ...props\n} = Astro.props\n---\n\n\n \n \n {showTrigger && (\n \n )}\n {showClear && (\n \n \n \n )}\n \n \n\n", "type": "registry:ui" }, { diff --git a/public/r/styles/base-nova/command.json b/public/r/styles/base-nova/command.json index bf1cd30e6..eecf9c0eb 100644 --- a/public/r/styles/base-nova/command.json +++ b/public/r/styles/base-nova/command.json @@ -4,9 +4,9 @@ "title": "Command", "description": "Command menu for search and quick actions.", "dependencies": [ - "@data-slot/command@^1.0.2", + "@data-slot/command@^1.1.2", "@lucide/astro", - "@data-slot/core@^1.0.2" + "@data-slot/core@^1.1.2" ], "registryDependencies": [ "@fulldev/dialog" diff --git a/public/r/styles/base-nova/components.json b/public/r/styles/base-nova/components.json index 90872f412..e0f9f98bf 100644 --- a/public/r/styles/base-nova/components.json +++ b/public/r/styles/base-nova/components.json @@ -18,6 +18,7 @@ "@fulldev/card", "@fulldev/carousel", "@fulldev/checkbox", + "@fulldev/code-block", "@fulldev/collapsible", "@fulldev/combobox", "@fulldev/command", @@ -43,6 +44,7 @@ "@fulldev/pagination", "@fulldev/popover", "@fulldev/price", + "@fulldev/progress", "@fulldev/radio-group", "@fulldev/rating", "@fulldev/resizable", diff --git a/public/r/styles/base-nova/dialog.json b/public/r/styles/base-nova/dialog.json index a42784c75..146afef1c 100644 --- a/public/r/styles/base-nova/dialog.json +++ b/public/r/styles/base-nova/dialog.json @@ -4,7 +4,7 @@ "title": "Dialog", "description": "A window overlaid on either the primary window or another dialog window, rendering the content underneath inert.", "dependencies": [ - "@data-slot/dialog@^1.0.2", + "@data-slot/dialog@^1.1.2", "@lucide/astro" ], "registryDependencies": [ diff --git a/public/r/styles/base-nova/drawer.json b/public/r/styles/base-nova/drawer.json index 83ccc1a6d..a2d4fdd0d 100644 --- a/public/r/styles/base-nova/drawer.json +++ b/public/r/styles/base-nova/drawer.json @@ -4,7 +4,7 @@ "title": "Drawer", "description": "A drawer component that slides in from any edge of the screen.", "dependencies": [ - "@data-slot/drawer@^1.0.2" + "@data-slot/drawer@^1.1.2" ], "registryDependencies": [ "@fulldev/button" diff --git a/public/r/styles/base-nova/dropdown-menu.json b/public/r/styles/base-nova/dropdown-menu.json index b91504d47..9e09da020 100644 --- a/public/r/styles/base-nova/dropdown-menu.json +++ b/public/r/styles/base-nova/dropdown-menu.json @@ -4,7 +4,7 @@ "title": "Dropdown Menu", "description": "Displays a menu to the user, such as a set of actions or functions, triggered by a button.", "dependencies": [ - "@data-slot/dropdown-menu@^1.0.2", + "@data-slot/dropdown-menu@^1.1.2", "@lucide/astro" ], "files": [ diff --git a/public/r/styles/base-nova/hover-card.json b/public/r/styles/base-nova/hover-card.json index 35da0d89f..8f1581961 100644 --- a/public/r/styles/base-nova/hover-card.json +++ b/public/r/styles/base-nova/hover-card.json @@ -4,8 +4,8 @@ "title": "Hover Card", "description": "For sighted users to preview content available behind a link.", "dependencies": [ - "@data-slot/hover-card@^1.0.2", - "@data-slot/core@^1.0.2" + "@data-slot/hover-card@^1.1.2", + "@data-slot/core@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-nova/navigation-menu.json b/public/r/styles/base-nova/navigation-menu.json index 8e0409e0c..f65bf8e00 100644 --- a/public/r/styles/base-nova/navigation-menu.json +++ b/public/r/styles/base-nova/navigation-menu.json @@ -4,7 +4,7 @@ "title": "Navigation Menu", "description": "A collection of links for navigating websites.", "dependencies": [ - "@data-slot/navigation-menu@^1.0.2", + "@data-slot/navigation-menu@^1.1.2", "@lucide/astro" ], "files": [ diff --git a/public/r/styles/base-nova/popover.json b/public/r/styles/base-nova/popover.json index 76cfb97bf..fc799d4ba 100644 --- a/public/r/styles/base-nova/popover.json +++ b/public/r/styles/base-nova/popover.json @@ -4,7 +4,7 @@ "title": "Popover", "description": "Displays rich content in a floating layer, triggered by a button.", "dependencies": [ - "@data-slot/popover@^1.0.2" + "@data-slot/popover@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-nova/progress-examples.json b/public/r/styles/base-nova/progress-examples.json new file mode 100644 index 000000000..4fb614b85 --- /dev/null +++ b/public/r/styles/base-nova/progress-examples.json @@ -0,0 +1,33 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "progress-examples", + "title": "Progress examples", + "description": "The examples from the shadcn/ui Progress docs.", + "registryDependencies": [ + "@fulldev/progress" + ], + "files": [ + { + "path": "src/components/examples/progress/progress-custom-max.astro", + "content": "---\nimport { Progress } from \"@/components/ui/progress\"\n---\n\n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-demo.astro", + "content": "---\nimport { Progress } from \"@/components/ui/progress\"\n---\n\n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-indeterminate.astro", + "content": "---\nimport { Progress } from \"@/components/ui/progress\"\n---\n\n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-rtl.astro", + "content": "---\nimport { Progress } from \"@/components/ui/progress\"\n---\n\n\n", + "type": "registry:component" + } + ], + "docs": "https://ui.full.dev/components/progress/", + "type": "registry:example" +} \ No newline at end of file diff --git a/public/r/styles/base-nova/progress.json b/public/r/styles/base-nova/progress.json new file mode 100644 index 000000000..94404fcae --- /dev/null +++ b/public/r/styles/base-nova/progress.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "progress", + "title": "Progress", + "description": "Shows how much of a task or sequence is complete.", + "files": [ + { + "path": "src/components/ui/progress/index.ts", + "content": "export { default as Progress } from \"./progress.astro\"\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/progress/progress.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\"> & {\n value?: number | null\n max?: number\n label?: string\n showValue?: boolean\n}\n\nconst {\n class: className,\n value,\n max = 100,\n label,\n showValue = false,\n \"aria-label\": ariaLabel = label || \"Progress\",\n \"aria-labelledby\": ariaLabelledby,\n \"aria-valuetext\": ariaValueText,\n ...props\n} = Astro.props\n\nconst resolvedMax = Number.isFinite(max) && max > 0 ? max : 100\nconst resolvedValue =\n typeof value === \"number\" && Number.isFinite(value)\n ? Math.min(resolvedMax, Math.max(0, value))\n : undefined\nconst percentage =\n resolvedValue === undefined ? undefined : (resolvedValue / resolvedMax) * 100\nconst stateAttributes = {\n \"data-indeterminate\": resolvedValue === undefined ? \"\" : undefined,\n \"data-complete\": resolvedValue === resolvedMax ? \"\" : undefined,\n \"data-progressing\":\n resolvedValue !== undefined && resolvedValue < resolvedMax ? \"\" : undefined,\n}\n---\n\n\n \n {label && (\n \n {label}\n \n )}\n {showValue && percentage !== undefined && (\n \n {Math.round(percentage)}%\n \n )}\n \n \n \n \n\n", + "type": "registry:ui" + } + ], + "docs": "https://ui.full.dev/components/progress/", + "categories": [ + "ui" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/public/r/styles/base-nova/radio-group.json b/public/r/styles/base-nova/radio-group.json index 702e16940..e7bf65a66 100644 --- a/public/r/styles/base-nova/radio-group.json +++ b/public/r/styles/base-nova/radio-group.json @@ -4,7 +4,7 @@ "title": "Radio Group", "description": "A set of checkable buttons, known as radio buttons, where no more than one of the buttons can be checked at a time.", "dependencies": [ - "@data-slot/radio-group@^1.0.2" + "@data-slot/radio-group@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-nova/registry.json b/public/r/styles/base-nova/registry.json index 3300a0a61..535c06fec 100644 --- a/public/r/styles/base-nova/registry.json +++ b/public/r/styles/base-nova/registry.json @@ -13,7 +13,7 @@ ], "docs": "https://ui.full.dev/components/accordion/", "dependencies": [ - "@data-slot/accordion@^1.0.2", + "@data-slot/accordion@^1.1.2", "@lucide/astro" ], "files": [ @@ -81,7 +81,7 @@ ], "docs": "https://ui.full.dev/components/alert-dialog/", "dependencies": [ - "@data-slot/alert-dialog@^1.0.2" + "@data-slot/alert-dialog@^1.1.2" ], "registryDependencies": [ "@fulldev/button" @@ -367,6 +367,61 @@ } ] }, + { + "name": "code-block", + "type": "registry:ui", + "title": "Code Block", + "description": "Code and plain-text snippets with copy actions, line numbers and highlighted lines.", + "categories": [ + "ui" + ], + "docs": "https://ui.full.dev/components/code-block/", + "dependencies": [ + "@lucide/astro", + "class-variance-authority" + ], + "registryDependencies": [ + "@fulldev/button" + ], + "files": [ + { + "path": "src/components/ui/code-block/code-block-actions.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-content.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-copy-button.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-footer.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-header.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-line.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-title.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/index.ts", + "type": "registry:ui" + } + ] + }, { "name": "collapsible", "type": "registry:ui", @@ -377,7 +432,7 @@ ], "docs": "https://ui.full.dev/components/collapsible/", "dependencies": [ - "@data-slot/collapsible@^1.0.2" + "@data-slot/collapsible@^1.1.2" ], "files": [ { @@ -408,8 +463,8 @@ ], "docs": "https://ui.full.dev/components/combobox/", "dependencies": [ - "@data-slot/combobox@^1.0.2", - "@data-slot/core@^1.0.2", + "@data-slot/combobox@^1.1.2", + "@data-slot/core@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -476,9 +531,9 @@ ], "docs": "https://ui.full.dev/components/command/", "dependencies": [ - "@data-slot/command@^1.0.2", + "@data-slot/command@^1.1.2", "@lucide/astro", - "@data-slot/core@^1.0.2" + "@data-slot/core@^1.1.2" ], "registryDependencies": [ "@fulldev/dialog" @@ -536,7 +591,7 @@ ], "docs": "https://ui.full.dev/components/dialog/", "dependencies": [ - "@data-slot/dialog@^1.0.2", + "@data-slot/dialog@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -599,7 +654,7 @@ ], "docs": "https://ui.full.dev/components/dropdown-menu/", "dependencies": [ - "@data-slot/dropdown-menu@^1.0.2", + "@data-slot/dropdown-menu@^1.1.2", "@lucide/astro" ], "files": [ @@ -818,8 +873,8 @@ ], "docs": "https://ui.full.dev/components/hover-card/", "dependencies": [ - "@data-slot/hover-card@^1.0.2", - "@data-slot/core@^1.0.2" + "@data-slot/hover-card@^1.1.2", + "@data-slot/core@^1.1.2" ], "files": [ { @@ -1183,7 +1238,7 @@ ], "docs": "https://ui.full.dev/components/navigation-menu/", "dependencies": [ - "@data-slot/navigation-menu@^1.0.2", + "@data-slot/navigation-menu@^1.1.2", "@lucide/astro" ], "files": [ @@ -1270,7 +1325,7 @@ ], "docs": "https://ui.full.dev/components/popover/", "dependencies": [ - "@data-slot/popover@^1.0.2" + "@data-slot/popover@^1.1.2" ], "files": [ { @@ -1335,6 +1390,26 @@ } ] }, + { + "name": "progress", + "type": "registry:ui", + "title": "Progress", + "description": "Shows how much of a task or sequence is complete.", + "categories": [ + "ui" + ], + "docs": "https://ui.full.dev/components/progress/", + "files": [ + { + "path": "src/components/ui/progress/index.ts", + "type": "registry:ui" + }, + { + "path": "src/components/ui/progress/progress.astro", + "type": "registry:ui" + } + ] + }, { "name": "radio-group", "type": "registry:ui", @@ -1345,7 +1420,7 @@ ], "docs": "https://ui.full.dev/components/radio-group/", "dependencies": [ - "@data-slot/radio-group@^1.0.2" + "@data-slot/radio-group@^1.1.2" ], "files": [ { @@ -1395,7 +1470,7 @@ ], "docs": "https://ui.full.dev/components/select/", "dependencies": [ - "@data-slot/select@^1.0.2", + "@data-slot/select@^1.1.2", "@lucide/astro" ], "files": [ @@ -1499,7 +1574,7 @@ ], "docs": "https://ui.full.dev/components/sheet/", "dependencies": [ - "@data-slot/dialog@^1.0.2", + "@data-slot/dialog@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -1555,7 +1630,7 @@ ], "docs": "https://ui.full.dev/components/sidebar/", "dependencies": [ - "@data-slot/tooltip@^1.0.2", + "@data-slot/tooltip@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -1676,7 +1751,7 @@ ], "docs": "https://ui.full.dev/components/slider/", "dependencies": [ - "@data-slot/slider@^1.0.2" + "@data-slot/slider@^1.1.2" ], "files": [ { @@ -1742,7 +1817,7 @@ ], "docs": "https://ui.full.dev/components/switch/", "dependencies": [ - "@data-slot/switch@^1.0.2" + "@data-slot/switch@^1.1.2" ], "files": [ { @@ -1813,7 +1888,7 @@ ], "docs": "https://ui.full.dev/components/tabs/", "dependencies": [ - "@data-slot/tabs@^1.0.2" + "@data-slot/tabs@^1.1.2" ], "files": [ { @@ -1888,7 +1963,7 @@ ], "docs": "https://ui.full.dev/components/toggle/", "dependencies": [ - "@data-slot/toggle@^1.0.2" + "@data-slot/toggle@^1.1.2" ], "files": [ { @@ -1935,7 +2010,7 @@ ], "docs": "https://ui.full.dev/components/tooltip/", "dependencies": [ - "@data-slot/tooltip@^1.0.2" + "@data-slot/tooltip@^1.1.2" ], "files": [ { @@ -2070,7 +2145,7 @@ ], "docs": "https://ui.full.dev/components/drawer/", "dependencies": [ - "@data-slot/drawer@^1.0.2" + "@data-slot/drawer@^1.1.2" ], "registryDependencies": [ "@fulldev/button" @@ -2160,7 +2235,7 @@ ], "docs": "https://ui.full.dev/components/resizable/", "dependencies": [ - "@data-slot/resizable@^1.0.2" + "@data-slot/resizable@^1.1.2" ], "files": [ { @@ -2191,7 +2266,7 @@ ], "docs": "https://ui.full.dev/components/toast/", "dependencies": [ - "@data-slot/toast@^1.0.2", + "@data-slot/toast@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -2258,7 +2333,7 @@ ], "docs": "https://ui.full.dev/components/toggle-group/", "dependencies": [ - "@data-slot/toggle-group@^1.0.2" + "@data-slot/toggle-group@^1.1.2" ], "registryDependencies": [ "@fulldev/toggle" @@ -2459,6 +2534,7 @@ "@fulldev/card", "@fulldev/carousel", "@fulldev/checkbox", + "@fulldev/code-block", "@fulldev/collapsible", "@fulldev/combobox", "@fulldev/command", @@ -2484,6 +2560,7 @@ "@fulldev/pagination", "@fulldev/popover", "@fulldev/price", + "@fulldev/progress", "@fulldev/radio-group", "@fulldev/rating", "@fulldev/resizable", @@ -5359,6 +5436,34 @@ } ] }, + { + "name": "code-block-examples", + "type": "registry:example", + "title": "Code Block examples", + "description": "The examples from the shadcn/ui Code Block docs.", + "docs": "https://ui.full.dev/components/code-block/", + "registryDependencies": [ + "@fulldev/code-block" + ], + "files": [ + { + "path": "src/components/examples/code-block/code-block-demo.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-lines.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-numbered.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-wrap.astro", + "type": "registry:component" + } + ] + }, { "name": "collapsible-examples", "type": "registry:example", @@ -5385,6 +5490,10 @@ "path": "src/components/examples/collapsible/collapsible-demo.astro", "type": "registry:component" }, + { + "path": "src/components/examples/collapsible/collapsible-dismissal.astro", + "type": "registry:component" + }, { "path": "src/components/examples/collapsible/collapsible-file-tree.astro", "type": "registry:component" @@ -6185,6 +6294,34 @@ } ] }, + { + "name": "progress-examples", + "type": "registry:example", + "title": "Progress examples", + "description": "The examples from the shadcn/ui Progress docs.", + "docs": "https://ui.full.dev/components/progress/", + "registryDependencies": [ + "@fulldev/progress" + ], + "files": [ + { + "path": "src/components/examples/progress/progress-custom-max.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-demo.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-indeterminate.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-rtl.astro", + "type": "registry:component" + } + ] + }, { "name": "radio-group-examples", "type": "registry:example", diff --git a/public/r/styles/base-nova/resizable.json b/public/r/styles/base-nova/resizable.json index 5573e780f..b58e4687f 100644 --- a/public/r/styles/base-nova/resizable.json +++ b/public/r/styles/base-nova/resizable.json @@ -4,7 +4,7 @@ "title": "Resizable", "description": "Accessible panel groups with pointer and keyboard resizing.", "dependencies": [ - "@data-slot/resizable@^1.0.2" + "@data-slot/resizable@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-nova/select.json b/public/r/styles/base-nova/select.json index 37445183c..a66239831 100644 --- a/public/r/styles/base-nova/select.json +++ b/public/r/styles/base-nova/select.json @@ -4,7 +4,7 @@ "title": "Select", "description": "Displays a list of options for the user to pick from, triggered by a button.", "dependencies": [ - "@data-slot/select@^1.0.2", + "@data-slot/select@^1.1.2", "@lucide/astro" ], "files": [ diff --git a/public/r/styles/base-nova/sheet.json b/public/r/styles/base-nova/sheet.json index f60cd3394..850551cee 100644 --- a/public/r/styles/base-nova/sheet.json +++ b/public/r/styles/base-nova/sheet.json @@ -4,7 +4,7 @@ "title": "Sheet", "description": "A sliding panel component that appears from the edge of the screen.", "dependencies": [ - "@data-slot/dialog@^1.0.2", + "@data-slot/dialog@^1.1.2", "@lucide/astro" ], "registryDependencies": [ diff --git a/public/r/styles/base-nova/sidebar.json b/public/r/styles/base-nova/sidebar.json index bbff2e631..3298d7fd3 100644 --- a/public/r/styles/base-nova/sidebar.json +++ b/public/r/styles/base-nova/sidebar.json @@ -4,7 +4,7 @@ "title": "Sidebar", "description": "A composable, themeable, and customizable Astro sidebar component.", "dependencies": [ - "@data-slot/tooltip@^1.0.2", + "@data-slot/tooltip@^1.1.2", "@lucide/astro" ], "registryDependencies": [ diff --git a/public/r/styles/base-nova/slider.json b/public/r/styles/base-nova/slider.json index 37ad1ccc6..05104c003 100644 --- a/public/r/styles/base-nova/slider.json +++ b/public/r/styles/base-nova/slider.json @@ -4,7 +4,7 @@ "title": "Slider", "description": "An input where the user selects a value from within a given range.", "dependencies": [ - "@data-slot/slider@^1.0.2" + "@data-slot/slider@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-nova/switch.json b/public/r/styles/base-nova/switch.json index 6efe75ff1..e2747d93b 100644 --- a/public/r/styles/base-nova/switch.json +++ b/public/r/styles/base-nova/switch.json @@ -4,7 +4,7 @@ "title": "Switch", "description": "A control that allows the user to toggle between checked and not checked.", "dependencies": [ - "@data-slot/switch@^1.0.2" + "@data-slot/switch@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-nova/tabs.json b/public/r/styles/base-nova/tabs.json index f094500a0..33fc97717 100644 --- a/public/r/styles/base-nova/tabs.json +++ b/public/r/styles/base-nova/tabs.json @@ -4,7 +4,7 @@ "title": "Tabs", "description": "A set of layered sections of content, known as tabs, that display one panel of content at a time.", "dependencies": [ - "@data-slot/tabs@^1.0.2" + "@data-slot/tabs@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-nova/toast.json b/public/r/styles/base-nova/toast.json index 19f5528dc..20df8ad1d 100644 --- a/public/r/styles/base-nova/toast.json +++ b/public/r/styles/base-nova/toast.json @@ -4,7 +4,7 @@ "title": "Toast", "description": "A brief notification that appears without interrupting the user.", "dependencies": [ - "@data-slot/toast@^1.0.2", + "@data-slot/toast@^1.1.2", "@lucide/astro" ], "registryDependencies": [ diff --git a/public/r/styles/base-nova/toggle-group.json b/public/r/styles/base-nova/toggle-group.json index 2ffd5354b..6037669ce 100644 --- a/public/r/styles/base-nova/toggle-group.json +++ b/public/r/styles/base-nova/toggle-group.json @@ -4,7 +4,7 @@ "title": "Toggle Group", "description": "A set of two-state buttons that can be toggled independently or as a single choice.", "dependencies": [ - "@data-slot/toggle-group@^1.0.2" + "@data-slot/toggle-group@^1.1.2" ], "registryDependencies": [ "@fulldev/toggle" diff --git a/public/r/styles/base-nova/toggle.json b/public/r/styles/base-nova/toggle.json index 672e03103..5ecb0b613 100644 --- a/public/r/styles/base-nova/toggle.json +++ b/public/r/styles/base-nova/toggle.json @@ -4,7 +4,7 @@ "title": "Toggle", "description": "A two-state button that can be either on or off.", "dependencies": [ - "@data-slot/toggle@^1.0.2" + "@data-slot/toggle@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-nova/tooltip.json b/public/r/styles/base-nova/tooltip.json index 5eb0a8ffc..9d1754e23 100644 --- a/public/r/styles/base-nova/tooltip.json +++ b/public/r/styles/base-nova/tooltip.json @@ -4,7 +4,7 @@ "title": "Tooltip", "description": "Displays contextual information when a user hovers or focuses a trigger.", "dependencies": [ - "@data-slot/tooltip@^1.0.2" + "@data-slot/tooltip@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-rhea/accordion.json b/public/r/styles/base-rhea/accordion.json index 5fd296a82..3f65ff7a4 100644 --- a/public/r/styles/base-rhea/accordion.json +++ b/public/r/styles/base-rhea/accordion.json @@ -4,7 +4,7 @@ "title": "Accordion", "description": "A vertically stacked set of interactive headings that each reveal a section of content.", "dependencies": [ - "@data-slot/accordion@^1.0.2", + "@data-slot/accordion@^1.1.2", "@lucide/astro" ], "files": [ diff --git a/public/r/styles/base-rhea/alert-dialog.json b/public/r/styles/base-rhea/alert-dialog.json index a774b64b6..083d9f475 100644 --- a/public/r/styles/base-rhea/alert-dialog.json +++ b/public/r/styles/base-rhea/alert-dialog.json @@ -4,7 +4,7 @@ "title": "Alert Dialog", "description": "A modal dialog for important confirmations that expects a response.", "dependencies": [ - "@data-slot/alert-dialog@^1.0.2" + "@data-slot/alert-dialog@^1.1.2" ], "registryDependencies": [ "@fulldev/button" diff --git a/public/r/styles/base-rhea/code-block-examples.json b/public/r/styles/base-rhea/code-block-examples.json new file mode 100644 index 000000000..2dc78df89 --- /dev/null +++ b/public/r/styles/base-rhea/code-block-examples.json @@ -0,0 +1,33 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "code-block-examples", + "title": "Code Block examples", + "description": "The examples from the shadcn/ui Code Block docs.", + "registryDependencies": [ + "@fulldev/code-block" + ], + "files": [ + { + "path": "src/components/examples/code-block/code-block-demo.astro", + "content": "---\nimport {\n CodeBlock,\n CodeBlockActions,\n CodeBlockContent,\n CodeBlockCopyButton,\n CodeBlockHeader,\n CodeBlockTitle,\n} from \"@/components/ui/code-block\"\n\nconst code = `import { Button } from \"@/components/ui/button\"\n\n`\n---\n\n\n \n contact.astro\n \n \n \n \n \n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-lines.astro", + "content": "---\nimport {\n CodeBlock,\n CodeBlockContent,\n CodeBlockLine,\n} from \"@/components/ui/code-block\"\n---\n\n\n \n export const site = {\n {' title: \"Our website\",'}\n \n {' title: \"Our new website\",'}\n \n \n {' lang: \"en\",'}\n }\n \n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-numbered.astro", + "content": "---\nimport { CodeBlock, CodeBlockContent } from \"@/components/ui/code-block\"\n\nconst code = `{\n \"name\": \"our-website\",\n\n \"private\": true\n}`\n---\n\n\n \n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-wrap.astro", + "content": "---\nimport {\n CodeBlock,\n CodeBlockActions,\n CodeBlockContent,\n CodeBlockCopyButton,\n CodeBlockFooter,\n} from \"@/components/ui/code-block\"\n\nconst code =\n \"A long explanation can wrap inside a code block without making the surrounding article or the page scroll horizontally.\"\n---\n\n\n \n \n \n \n Plain text, with line wrapping.\n\n", + "type": "registry:component" + } + ], + "docs": "https://ui.full.dev/components/code-block/", + "type": "registry:example" +} \ No newline at end of file diff --git a/public/r/styles/base-rhea/code-block.json b/public/r/styles/base-rhea/code-block.json new file mode 100644 index 000000000..2803afc0f --- /dev/null +++ b/public/r/styles/base-rhea/code-block.json @@ -0,0 +1,65 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "code-block", + "title": "Code Block", + "description": "Code and plain-text snippets with copy actions, line numbers and highlighted lines.", + "dependencies": [ + "@lucide/astro", + "class-variance-authority" + ], + "registryDependencies": [ + "@fulldev/button" + ], + "files": [ + { + "path": "src/components/ui/code-block/code-block-actions.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\nconst { class: className, ...props } = Astro.props\n---\n\n&]:m-0 [[data-slot=code-block]>&]:top-3 [[data-slot=code-block]>&]:end-3 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:top-2 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:end-2 [[data-slot=code-block]>&]:*:[button]:bg-background [[data-slot=code-block]>&]:*:[button]:ring-1 [[data-slot=code-block]>&]:*:[button]:ring-foreground/10 ms-auto flex shrink-0 items-center [[data-slot=code-block]>&]:absolute [[data-slot=code-block]>&]:z-10 [[data-slot=code-block]>&]:opacity-0 [[data-slot=code-block]>&]:transition-opacity [[data-slot=code-block]>&]:group-focus-within/code-block:opacity-100 [[data-slot=code-block]>&]:group-hover/code-block:opacity-100 [[data-slot=code-block]>&]:pointer-coarse:opacity-100\",\n className\n )}\n {...props}\n>\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-content.astro", + "content": "---\n/* eslint-disable astro/jsx-a11y/no-noninteractive-tabindex -- Focusable code supports keyboard scrolling, as in shadcn/ui. */\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\nimport CodeBlockLine from \"./code-block-line.astro\"\n\ntype Props = HTMLAttributes<\"pre\"> & {\n code?: string\n wrap?: boolean\n lineNumbers?: boolean\n startLine?: number\n}\n\nconst {\n class: className,\n code,\n wrap = false,\n lineNumbers = false,\n startLine = 1,\n style,\n ...props\n} = Astro.props\n\nconst contentStyle =\n typeof style === \"string\"\n ? `counter-reset: line ${startLine - 1}; ${style}`\n : { counterReset: `line ${startLine - 1}`, ...style }\n---\n\n{code !== undefined ? lineNumbers ? code.replace(/\\n$/, \"\").split(\"\\n\").map((line) => {line}) : code : }\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-copy-button.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport CheckIcon from \"@lucide/astro/icons/check\"\nimport CopyIcon from \"@lucide/astro/icons/copy\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button, type ButtonVariantProps } from \"@/components/ui/button\"\n\ntype Props = Omit, \"value\" | \"type\"> &\n ButtonVariantProps & {\n value: string\n copyLabel?: string\n copiedLabel?: string\n errorLabel?: string\n }\n\nconst {\n class: className,\n value,\n variant = \"ghost\",\n size = \"icon-xs\",\n copyLabel = \"Copy\",\n copiedLabel = \"Copied\",\n errorLabel = \"Could not copy\",\n ...props\n} = Astro.props\n---\n\n\n \n \n\n\n\n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-footer.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\nconst { class: className, ...props } = Astro.props\n---\n\n\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-header.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\nconst { class: className, ...props } = Astro.props\n---\n\n[data-slot=code-block-title]]:min-w-0\",\n className\n )}\n {...props}\n>\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-line.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 \"-mx-4 px-4 in-data-numbered:gap-x-3 before:min-w-6 before:text-end before:text-muted-foreground after:start-1 after:text-muted-foreground group-data-[size=sm]/code-block:-mx-3 group-data-[size=sm]/code-block:px-3 relative block min-h-lh before:select-none after:absolute after:top-0 after:select-none in-data-numbered:col-span-2 in-data-numbered:grid in-data-numbered:grid-cols-subgrid in-data-numbered:[counter-increment:line] in-data-numbered:before:content-[counter(line)] in-data-numbered:supports-[content:counter(line)_/_'']:before:content-[counter(line)_/_'']\",\n {\n variants: {\n variant: {\n default: \"\",\n added: \"bg-foreground/5 after:content-['+']\",\n removed: \"bg-destructive/10 after:text-destructive after:content-['−']\",\n highlighted: \"bg-foreground/5\",\n },\n },\n defaultVariants: { variant: \"default\" },\n }\n)\n\ntype Props = HTMLAttributes<\"span\"> & VariantProps\nconst { class: className, variant = \"default\", ...props } = Astro.props\n---\n\n\n \n \n {\"\\n\"}\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-title.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\nconst { class: className, ...props } = Astro.props\n---\n\n\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block.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 \"rounded-2xl text-sm data-[size=sm]:text-xs has-[>[data-slot=code-block-content]:focus-visible]:ring-3 has-[>[data-slot=code-block-content]:focus-visible]:ring-ring/30 data-[size=sm]:rounded-xl group/code-block relative flex w-full min-w-0 flex-col overflow-hidden\",\n {\n variants: {\n variant: {\n default: \"bg-muted text-foreground ring-1 ring-foreground/5 dark:ring-foreground/10\",\n destructive: \"bg-destructive/5 text-destructive ring-1 ring-destructive/15 dark:bg-destructive/10 dark:ring-destructive/20\",\n },\n },\n defaultVariants: { variant: \"default\" },\n }\n)\n\ntype Props = HTMLAttributes<\"div\"> &\n VariantProps & {\n size?: \"default\" | \"sm\"\n }\n\nconst {\n class: className,\n variant = \"default\",\n size = \"default\",\n ...props\n} = Astro.props\n---\n\n\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/index.ts", + "content": "export { default as CodeBlock } from \"./code-block.astro\"\nexport { default as CodeBlockHeader } from \"./code-block-header.astro\"\nexport { default as CodeBlockTitle } from \"./code-block-title.astro\"\nexport { default as CodeBlockActions } from \"./code-block-actions.astro\"\nexport { default as CodeBlockCopyButton } from \"./code-block-copy-button.astro\"\nexport { default as CodeBlockContent } from \"./code-block-content.astro\"\nexport { default as CodeBlockLine } from \"./code-block-line.astro\"\nexport { default as CodeBlockFooter } from \"./code-block-footer.astro\"\n", + "type": "registry:ui" + } + ], + "docs": "https://ui.full.dev/components/code-block/", + "categories": [ + "ui" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/public/r/styles/base-rhea/collapsible-examples.json b/public/r/styles/base-rhea/collapsible-examples.json index 56b092a2f..7d0f08173 100644 --- a/public/r/styles/base-rhea/collapsible-examples.json +++ b/public/r/styles/base-rhea/collapsible-examples.json @@ -25,6 +25,11 @@ "content": "---\nimport ChevronsUpDown from \"@lucide/astro/icons/chevrons-up-down\"\n\nimport { buttonVariants } from \"@/components/ui/button\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/components/ui/collapsible\"\n---\n\n\n
\n

Order #4189

\n \n \n Toggle details\n \n
\n
\n Status\n Shipped\n
\n \n
\n

Shipping address

\n

100 Market St, San Francisco

\n
\n
\n

Items

\n

2x Studio Headphones

\n
\n
\n
\n", "type": "registry:component" }, + { + "path": "src/components/examples/collapsible/collapsible-dismissal.astro", + "content": "---\nimport ChevronDownIcon from \"@lucide/astro/icons/chevron-down\"\n\nimport { buttonVariants } from \"@/components/ui/button\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/components/ui/collapsible\"\n---\n\n
\n \n \n Browse documentation\n \n \n \n \n \n \n

\n Open the panel, then press Escape or click outside it to close.\n

\n
\n", + "type": "registry:component" + }, { "path": "src/components/examples/collapsible/collapsible-file-tree.astro", "content": "---\nimport ChevronRightIcon from \"@lucide/astro/icons/chevron-right\"\nimport FileIcon from \"@lucide/astro/icons/file\"\nimport FolderIcon from \"@lucide/astro/icons/folder\"\n\nimport { Button, buttonVariants } from \"@/components/ui/button\"\nimport { Card, CardContent, CardHeader } from \"@/components/ui/card\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/components/ui/collapsible\"\nimport { Tabs, TabsList, TabsTrigger } from \"@/components/ui/tabs\"\n\ntype FileTreeItem = { name: string } | { name: string; items: FileTreeItem[] }\n\nconst fileTree: FileTreeItem[] = [\n {\n name: \"components\",\n items: [\n {\n name: \"ui\",\n items: [\n { name: \"button.tsx\" },\n { name: \"card.tsx\" },\n { name: \"dialog.tsx\" },\n { name: \"input.tsx\" },\n { name: \"select.tsx\" },\n { name: \"table.tsx\" },\n ],\n },\n { name: \"login-form.tsx\" },\n { name: \"register-form.tsx\" },\n ],\n },\n {\n name: \"lib\",\n items: [{ name: \"utils.ts\" }, { name: \"cn.ts\" }, { name: \"api.ts\" }],\n },\n {\n name: \"hooks\",\n items: [\n { name: \"use-media-query.ts\" },\n { name: \"use-debounce.ts\" },\n { name: \"use-local-storage.ts\" },\n ],\n },\n {\n name: \"types\",\n items: [{ name: \"index.d.ts\" }, { name: \"api.d.ts\" }],\n },\n {\n name: \"public\",\n items: [{ name: \"favicon.ico\" }, { name: \"logo.svg\" }, { name: \"images\" }],\n },\n { name: \"app.tsx\" },\n { name: \"layout.tsx\" },\n { name: \"globals.css\" },\n { name: \"package.json\" },\n { name: \"tsconfig.json\" },\n { name: \"README.md\" },\n { name: \".gitignore\" },\n]\n\n// Renders the card, or one tree level when Astro.self passes `items`.\nconst { items } = Astro.props as { items?: FileTreeItem[] }\n---\n\n{items ? (\n items.map((fileItem) =>\n \"items\" in fileItem ? (\n \n \n \n \n {fileItem.name}\n \n \n
\n \n
\n
\n
\n ) : (\n \n \n {fileItem.name}\n \n )\n )\n) : (\n \n \n \n \n Explorer\n Outline\n \n \n \n \n
\n \n
\n
\n
\n)}\n", diff --git a/public/r/styles/base-rhea/collapsible.json b/public/r/styles/base-rhea/collapsible.json index 51460f6ff..dd0c03d41 100644 --- a/public/r/styles/base-rhea/collapsible.json +++ b/public/r/styles/base-rhea/collapsible.json @@ -4,12 +4,12 @@ "title": "Collapsible", "description": "An interactive component which expands/collapses a panel.", "dependencies": [ - "@data-slot/collapsible@^1.0.2" + "@data-slot/collapsible@^1.1.2" ], "files": [ { "path": "src/components/ui/collapsible/collapsible.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\"> & {\n // \"li\" makes a list item the collapsible, such as a sidebar menu item.\n as?: \"div\" | \"li\"\n defaultOpen?: boolean\n hiddenUntilFound?: boolean\n}\n\nconst {\n as: Tag = \"div\",\n class: className,\n defaultOpen,\n hiddenUntilFound,\n ...props\n} = Astro.props\n---\n\n\n \n\n\n\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\"> & {\n // \"li\" makes a list item the collapsible, such as a sidebar menu item.\n as?: \"div\" | \"li\"\n defaultOpen?: boolean\n hiddenUntilFound?: boolean\n closeOnEscape?: boolean\n closeOnClickOutside?: boolean\n}\n\nconst {\n as: Tag = \"div\",\n class: className,\n defaultOpen,\n hiddenUntilFound,\n closeOnEscape,\n closeOnClickOutside,\n ...props\n} = Astro.props\n---\n\n\n \n\n\n\n", "type": "registry:ui" }, { diff --git a/public/r/styles/base-rhea/combobox.json b/public/r/styles/base-rhea/combobox.json index 247e45c81..889e9ca42 100644 --- a/public/r/styles/base-rhea/combobox.json +++ b/public/r/styles/base-rhea/combobox.json @@ -4,8 +4,8 @@ "title": "Combobox", "description": "Autocomplete input with a list of suggestions.", "dependencies": [ - "@data-slot/combobox@^1.0.2", - "@data-slot/core@^1.0.2", + "@data-slot/combobox@^1.1.2", + "@data-slot/core@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -34,7 +34,7 @@ }, { "path": "src/components/ui/combobox/combobox-input.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport XIcon from \"@lucide/astro/icons/x\"\n\nimport { cn } from \"@/lib/utils\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n} from \"@/components/ui/input-group\"\n\nimport ComboboxTrigger from \"./combobox-trigger.astro\"\n\ntype Props = HTMLAttributes<\"input\"> & {\n showTrigger?: boolean\n showClear?: boolean\n}\n\nconst {\n class: className,\n type = \"text\",\n disabled = false,\n showTrigger = true,\n showClear = false,\n ...props\n} = Astro.props\n---\n\n\n \n \n {showTrigger && (\n \n )}\n {showClear && (\n \n \n \n )}\n \n \n\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport XIcon from \"@lucide/astro/icons/x\"\n\nimport { cn } from \"@/lib/utils\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n} from \"@/components/ui/input-group\"\n\nimport ComboboxTrigger from \"./combobox-trigger.astro\"\n\ntype Props = HTMLAttributes<\"input\"> & {\n showTrigger?: boolean\n showClear?: boolean\n clearLabel?: string\n}\n\nconst {\n class: className,\n type = \"text\",\n disabled = false,\n showTrigger = true,\n showClear = false,\n clearLabel = \"Clear selection\",\n ...props\n} = Astro.props\n---\n\n\n \n \n {showTrigger && (\n \n )}\n {showClear && (\n \n \n \n )}\n \n \n\n", "type": "registry:ui" }, { diff --git a/public/r/styles/base-rhea/command.json b/public/r/styles/base-rhea/command.json index d0e60a241..1c09da085 100644 --- a/public/r/styles/base-rhea/command.json +++ b/public/r/styles/base-rhea/command.json @@ -4,9 +4,9 @@ "title": "Command", "description": "Command menu for search and quick actions.", "dependencies": [ - "@data-slot/command@^1.0.2", + "@data-slot/command@^1.1.2", "@lucide/astro", - "@data-slot/core@^1.0.2" + "@data-slot/core@^1.1.2" ], "registryDependencies": [ "@fulldev/dialog" diff --git a/public/r/styles/base-rhea/components.json b/public/r/styles/base-rhea/components.json index 90872f412..e0f9f98bf 100644 --- a/public/r/styles/base-rhea/components.json +++ b/public/r/styles/base-rhea/components.json @@ -18,6 +18,7 @@ "@fulldev/card", "@fulldev/carousel", "@fulldev/checkbox", + "@fulldev/code-block", "@fulldev/collapsible", "@fulldev/combobox", "@fulldev/command", @@ -43,6 +44,7 @@ "@fulldev/pagination", "@fulldev/popover", "@fulldev/price", + "@fulldev/progress", "@fulldev/radio-group", "@fulldev/rating", "@fulldev/resizable", diff --git a/public/r/styles/base-rhea/dialog.json b/public/r/styles/base-rhea/dialog.json index 2a9f94732..9fe4ed1cd 100644 --- a/public/r/styles/base-rhea/dialog.json +++ b/public/r/styles/base-rhea/dialog.json @@ -4,7 +4,7 @@ "title": "Dialog", "description": "A window overlaid on either the primary window or another dialog window, rendering the content underneath inert.", "dependencies": [ - "@data-slot/dialog@^1.0.2", + "@data-slot/dialog@^1.1.2", "@lucide/astro" ], "registryDependencies": [ diff --git a/public/r/styles/base-rhea/drawer.json b/public/r/styles/base-rhea/drawer.json index c565d4c19..21f28debe 100644 --- a/public/r/styles/base-rhea/drawer.json +++ b/public/r/styles/base-rhea/drawer.json @@ -4,7 +4,7 @@ "title": "Drawer", "description": "A drawer component that slides in from any edge of the screen.", "dependencies": [ - "@data-slot/drawer@^1.0.2" + "@data-slot/drawer@^1.1.2" ], "registryDependencies": [ "@fulldev/button" diff --git a/public/r/styles/base-rhea/dropdown-menu.json b/public/r/styles/base-rhea/dropdown-menu.json index a0862aa76..cb2c5b4cd 100644 --- a/public/r/styles/base-rhea/dropdown-menu.json +++ b/public/r/styles/base-rhea/dropdown-menu.json @@ -4,7 +4,7 @@ "title": "Dropdown Menu", "description": "Displays a menu to the user, such as a set of actions or functions, triggered by a button.", "dependencies": [ - "@data-slot/dropdown-menu@^1.0.2", + "@data-slot/dropdown-menu@^1.1.2", "@lucide/astro" ], "files": [ diff --git a/public/r/styles/base-rhea/hover-card.json b/public/r/styles/base-rhea/hover-card.json index 32e6ab461..c17e2e651 100644 --- a/public/r/styles/base-rhea/hover-card.json +++ b/public/r/styles/base-rhea/hover-card.json @@ -4,8 +4,8 @@ "title": "Hover Card", "description": "For sighted users to preview content available behind a link.", "dependencies": [ - "@data-slot/hover-card@^1.0.2", - "@data-slot/core@^1.0.2" + "@data-slot/hover-card@^1.1.2", + "@data-slot/core@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-rhea/navigation-menu.json b/public/r/styles/base-rhea/navigation-menu.json index 0110133a9..0e81bcdf4 100644 --- a/public/r/styles/base-rhea/navigation-menu.json +++ b/public/r/styles/base-rhea/navigation-menu.json @@ -4,7 +4,7 @@ "title": "Navigation Menu", "description": "A collection of links for navigating websites.", "dependencies": [ - "@data-slot/navigation-menu@^1.0.2", + "@data-slot/navigation-menu@^1.1.2", "@lucide/astro" ], "files": [ diff --git a/public/r/styles/base-rhea/popover.json b/public/r/styles/base-rhea/popover.json index d2096af13..7c1325cdc 100644 --- a/public/r/styles/base-rhea/popover.json +++ b/public/r/styles/base-rhea/popover.json @@ -4,7 +4,7 @@ "title": "Popover", "description": "Displays rich content in a floating layer, triggered by a button.", "dependencies": [ - "@data-slot/popover@^1.0.2" + "@data-slot/popover@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-rhea/progress-examples.json b/public/r/styles/base-rhea/progress-examples.json new file mode 100644 index 000000000..4fb614b85 --- /dev/null +++ b/public/r/styles/base-rhea/progress-examples.json @@ -0,0 +1,33 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "progress-examples", + "title": "Progress examples", + "description": "The examples from the shadcn/ui Progress docs.", + "registryDependencies": [ + "@fulldev/progress" + ], + "files": [ + { + "path": "src/components/examples/progress/progress-custom-max.astro", + "content": "---\nimport { Progress } from \"@/components/ui/progress\"\n---\n\n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-demo.astro", + "content": "---\nimport { Progress } from \"@/components/ui/progress\"\n---\n\n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-indeterminate.astro", + "content": "---\nimport { Progress } from \"@/components/ui/progress\"\n---\n\n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-rtl.astro", + "content": "---\nimport { Progress } from \"@/components/ui/progress\"\n---\n\n\n", + "type": "registry:component" + } + ], + "docs": "https://ui.full.dev/components/progress/", + "type": "registry:example" +} \ No newline at end of file diff --git a/public/r/styles/base-rhea/progress.json b/public/r/styles/base-rhea/progress.json new file mode 100644 index 000000000..476c00207 --- /dev/null +++ b/public/r/styles/base-rhea/progress.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "progress", + "title": "Progress", + "description": "Shows how much of a task or sequence is complete.", + "files": [ + { + "path": "src/components/ui/progress/index.ts", + "content": "export { default as Progress } from \"./progress.astro\"\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/progress/progress.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\"> & {\n value?: number | null\n max?: number\n label?: string\n showValue?: boolean\n}\n\nconst {\n class: className,\n value,\n max = 100,\n label,\n showValue = false,\n \"aria-label\": ariaLabel = label || \"Progress\",\n \"aria-labelledby\": ariaLabelledby,\n \"aria-valuetext\": ariaValueText,\n ...props\n} = Astro.props\n\nconst resolvedMax = Number.isFinite(max) && max > 0 ? max : 100\nconst resolvedValue =\n typeof value === \"number\" && Number.isFinite(value)\n ? Math.min(resolvedMax, Math.max(0, value))\n : undefined\nconst percentage =\n resolvedValue === undefined ? undefined : (resolvedValue / resolvedMax) * 100\nconst stateAttributes = {\n \"data-indeterminate\": resolvedValue === undefined ? \"\" : undefined,\n \"data-complete\": resolvedValue === resolvedMax ? \"\" : undefined,\n \"data-progressing\":\n resolvedValue !== undefined && resolvedValue < resolvedMax ? \"\" : undefined,\n}\n---\n\n\n \n {label && (\n \n {label}\n \n )}\n {showValue && percentage !== undefined && (\n \n {Math.round(percentage)}%\n \n )}\n \n \n \n \n\n", + "type": "registry:ui" + } + ], + "docs": "https://ui.full.dev/components/progress/", + "categories": [ + "ui" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/public/r/styles/base-rhea/radio-group.json b/public/r/styles/base-rhea/radio-group.json index 2ecc3bfd5..afdf9fef1 100644 --- a/public/r/styles/base-rhea/radio-group.json +++ b/public/r/styles/base-rhea/radio-group.json @@ -4,7 +4,7 @@ "title": "Radio Group", "description": "A set of checkable buttons, known as radio buttons, where no more than one of the buttons can be checked at a time.", "dependencies": [ - "@data-slot/radio-group@^1.0.2" + "@data-slot/radio-group@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-rhea/registry.json b/public/r/styles/base-rhea/registry.json index 6c5b619da..08f48ec4a 100644 --- a/public/r/styles/base-rhea/registry.json +++ b/public/r/styles/base-rhea/registry.json @@ -13,7 +13,7 @@ ], "docs": "https://ui.full.dev/components/accordion/", "dependencies": [ - "@data-slot/accordion@^1.0.2", + "@data-slot/accordion@^1.1.2", "@lucide/astro" ], "files": [ @@ -81,7 +81,7 @@ ], "docs": "https://ui.full.dev/components/alert-dialog/", "dependencies": [ - "@data-slot/alert-dialog@^1.0.2" + "@data-slot/alert-dialog@^1.1.2" ], "registryDependencies": [ "@fulldev/button" @@ -367,6 +367,61 @@ } ] }, + { + "name": "code-block", + "type": "registry:ui", + "title": "Code Block", + "description": "Code and plain-text snippets with copy actions, line numbers and highlighted lines.", + "categories": [ + "ui" + ], + "docs": "https://ui.full.dev/components/code-block/", + "dependencies": [ + "@lucide/astro", + "class-variance-authority" + ], + "registryDependencies": [ + "@fulldev/button" + ], + "files": [ + { + "path": "src/components/ui/code-block/code-block-actions.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-content.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-copy-button.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-footer.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-header.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-line.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-title.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/index.ts", + "type": "registry:ui" + } + ] + }, { "name": "collapsible", "type": "registry:ui", @@ -377,7 +432,7 @@ ], "docs": "https://ui.full.dev/components/collapsible/", "dependencies": [ - "@data-slot/collapsible@^1.0.2" + "@data-slot/collapsible@^1.1.2" ], "files": [ { @@ -408,8 +463,8 @@ ], "docs": "https://ui.full.dev/components/combobox/", "dependencies": [ - "@data-slot/combobox@^1.0.2", - "@data-slot/core@^1.0.2", + "@data-slot/combobox@^1.1.2", + "@data-slot/core@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -476,9 +531,9 @@ ], "docs": "https://ui.full.dev/components/command/", "dependencies": [ - "@data-slot/command@^1.0.2", + "@data-slot/command@^1.1.2", "@lucide/astro", - "@data-slot/core@^1.0.2" + "@data-slot/core@^1.1.2" ], "registryDependencies": [ "@fulldev/dialog" @@ -536,7 +591,7 @@ ], "docs": "https://ui.full.dev/components/dialog/", "dependencies": [ - "@data-slot/dialog@^1.0.2", + "@data-slot/dialog@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -599,7 +654,7 @@ ], "docs": "https://ui.full.dev/components/dropdown-menu/", "dependencies": [ - "@data-slot/dropdown-menu@^1.0.2", + "@data-slot/dropdown-menu@^1.1.2", "@lucide/astro" ], "files": [ @@ -818,8 +873,8 @@ ], "docs": "https://ui.full.dev/components/hover-card/", "dependencies": [ - "@data-slot/hover-card@^1.0.2", - "@data-slot/core@^1.0.2" + "@data-slot/hover-card@^1.1.2", + "@data-slot/core@^1.1.2" ], "files": [ { @@ -1183,7 +1238,7 @@ ], "docs": "https://ui.full.dev/components/navigation-menu/", "dependencies": [ - "@data-slot/navigation-menu@^1.0.2", + "@data-slot/navigation-menu@^1.1.2", "@lucide/astro" ], "files": [ @@ -1270,7 +1325,7 @@ ], "docs": "https://ui.full.dev/components/popover/", "dependencies": [ - "@data-slot/popover@^1.0.2" + "@data-slot/popover@^1.1.2" ], "files": [ { @@ -1335,6 +1390,26 @@ } ] }, + { + "name": "progress", + "type": "registry:ui", + "title": "Progress", + "description": "Shows how much of a task or sequence is complete.", + "categories": [ + "ui" + ], + "docs": "https://ui.full.dev/components/progress/", + "files": [ + { + "path": "src/components/ui/progress/index.ts", + "type": "registry:ui" + }, + { + "path": "src/components/ui/progress/progress.astro", + "type": "registry:ui" + } + ] + }, { "name": "radio-group", "type": "registry:ui", @@ -1345,7 +1420,7 @@ ], "docs": "https://ui.full.dev/components/radio-group/", "dependencies": [ - "@data-slot/radio-group@^1.0.2" + "@data-slot/radio-group@^1.1.2" ], "files": [ { @@ -1395,7 +1470,7 @@ ], "docs": "https://ui.full.dev/components/select/", "dependencies": [ - "@data-slot/select@^1.0.2", + "@data-slot/select@^1.1.2", "@lucide/astro" ], "files": [ @@ -1499,7 +1574,7 @@ ], "docs": "https://ui.full.dev/components/sheet/", "dependencies": [ - "@data-slot/dialog@^1.0.2", + "@data-slot/dialog@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -1555,7 +1630,7 @@ ], "docs": "https://ui.full.dev/components/sidebar/", "dependencies": [ - "@data-slot/tooltip@^1.0.2", + "@data-slot/tooltip@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -1676,7 +1751,7 @@ ], "docs": "https://ui.full.dev/components/slider/", "dependencies": [ - "@data-slot/slider@^1.0.2" + "@data-slot/slider@^1.1.2" ], "files": [ { @@ -1742,7 +1817,7 @@ ], "docs": "https://ui.full.dev/components/switch/", "dependencies": [ - "@data-slot/switch@^1.0.2" + "@data-slot/switch@^1.1.2" ], "files": [ { @@ -1813,7 +1888,7 @@ ], "docs": "https://ui.full.dev/components/tabs/", "dependencies": [ - "@data-slot/tabs@^1.0.2" + "@data-slot/tabs@^1.1.2" ], "files": [ { @@ -1888,7 +1963,7 @@ ], "docs": "https://ui.full.dev/components/toggle/", "dependencies": [ - "@data-slot/toggle@^1.0.2" + "@data-slot/toggle@^1.1.2" ], "files": [ { @@ -1935,7 +2010,7 @@ ], "docs": "https://ui.full.dev/components/tooltip/", "dependencies": [ - "@data-slot/tooltip@^1.0.2" + "@data-slot/tooltip@^1.1.2" ], "files": [ { @@ -2070,7 +2145,7 @@ ], "docs": "https://ui.full.dev/components/drawer/", "dependencies": [ - "@data-slot/drawer@^1.0.2" + "@data-slot/drawer@^1.1.2" ], "registryDependencies": [ "@fulldev/button" @@ -2160,7 +2235,7 @@ ], "docs": "https://ui.full.dev/components/resizable/", "dependencies": [ - "@data-slot/resizable@^1.0.2" + "@data-slot/resizable@^1.1.2" ], "files": [ { @@ -2191,7 +2266,7 @@ ], "docs": "https://ui.full.dev/components/toast/", "dependencies": [ - "@data-slot/toast@^1.0.2", + "@data-slot/toast@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -2258,7 +2333,7 @@ ], "docs": "https://ui.full.dev/components/toggle-group/", "dependencies": [ - "@data-slot/toggle-group@^1.0.2" + "@data-slot/toggle-group@^1.1.2" ], "registryDependencies": [ "@fulldev/toggle" @@ -2459,6 +2534,7 @@ "@fulldev/card", "@fulldev/carousel", "@fulldev/checkbox", + "@fulldev/code-block", "@fulldev/collapsible", "@fulldev/combobox", "@fulldev/command", @@ -2484,6 +2560,7 @@ "@fulldev/pagination", "@fulldev/popover", "@fulldev/price", + "@fulldev/progress", "@fulldev/radio-group", "@fulldev/rating", "@fulldev/resizable", @@ -5359,6 +5436,34 @@ } ] }, + { + "name": "code-block-examples", + "type": "registry:example", + "title": "Code Block examples", + "description": "The examples from the shadcn/ui Code Block docs.", + "docs": "https://ui.full.dev/components/code-block/", + "registryDependencies": [ + "@fulldev/code-block" + ], + "files": [ + { + "path": "src/components/examples/code-block/code-block-demo.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-lines.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-numbered.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-wrap.astro", + "type": "registry:component" + } + ] + }, { "name": "collapsible-examples", "type": "registry:example", @@ -5385,6 +5490,10 @@ "path": "src/components/examples/collapsible/collapsible-demo.astro", "type": "registry:component" }, + { + "path": "src/components/examples/collapsible/collapsible-dismissal.astro", + "type": "registry:component" + }, { "path": "src/components/examples/collapsible/collapsible-file-tree.astro", "type": "registry:component" @@ -6185,6 +6294,34 @@ } ] }, + { + "name": "progress-examples", + "type": "registry:example", + "title": "Progress examples", + "description": "The examples from the shadcn/ui Progress docs.", + "docs": "https://ui.full.dev/components/progress/", + "registryDependencies": [ + "@fulldev/progress" + ], + "files": [ + { + "path": "src/components/examples/progress/progress-custom-max.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-demo.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-indeterminate.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-rtl.astro", + "type": "registry:component" + } + ] + }, { "name": "radio-group-examples", "type": "registry:example", diff --git a/public/r/styles/base-rhea/resizable.json b/public/r/styles/base-rhea/resizable.json index 5573e780f..b58e4687f 100644 --- a/public/r/styles/base-rhea/resizable.json +++ b/public/r/styles/base-rhea/resizable.json @@ -4,7 +4,7 @@ "title": "Resizable", "description": "Accessible panel groups with pointer and keyboard resizing.", "dependencies": [ - "@data-slot/resizable@^1.0.2" + "@data-slot/resizable@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-rhea/select.json b/public/r/styles/base-rhea/select.json index 0a550c3bb..79f139a2b 100644 --- a/public/r/styles/base-rhea/select.json +++ b/public/r/styles/base-rhea/select.json @@ -4,7 +4,7 @@ "title": "Select", "description": "Displays a list of options for the user to pick from, triggered by a button.", "dependencies": [ - "@data-slot/select@^1.0.2", + "@data-slot/select@^1.1.2", "@lucide/astro" ], "files": [ diff --git a/public/r/styles/base-rhea/sheet.json b/public/r/styles/base-rhea/sheet.json index ebc6580c0..b9e093363 100644 --- a/public/r/styles/base-rhea/sheet.json +++ b/public/r/styles/base-rhea/sheet.json @@ -4,7 +4,7 @@ "title": "Sheet", "description": "A sliding panel component that appears from the edge of the screen.", "dependencies": [ - "@data-slot/dialog@^1.0.2", + "@data-slot/dialog@^1.1.2", "@lucide/astro" ], "registryDependencies": [ diff --git a/public/r/styles/base-rhea/sidebar.json b/public/r/styles/base-rhea/sidebar.json index 4e3f0966a..4549d148e 100644 --- a/public/r/styles/base-rhea/sidebar.json +++ b/public/r/styles/base-rhea/sidebar.json @@ -4,7 +4,7 @@ "title": "Sidebar", "description": "A composable, themeable, and customizable Astro sidebar component.", "dependencies": [ - "@data-slot/tooltip@^1.0.2", + "@data-slot/tooltip@^1.1.2", "@lucide/astro" ], "registryDependencies": [ diff --git a/public/r/styles/base-rhea/slider.json b/public/r/styles/base-rhea/slider.json index 7c68a7fa1..891303553 100644 --- a/public/r/styles/base-rhea/slider.json +++ b/public/r/styles/base-rhea/slider.json @@ -4,7 +4,7 @@ "title": "Slider", "description": "An input where the user selects a value from within a given range.", "dependencies": [ - "@data-slot/slider@^1.0.2" + "@data-slot/slider@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-rhea/switch.json b/public/r/styles/base-rhea/switch.json index 6c5e6ce06..37a1bbe17 100644 --- a/public/r/styles/base-rhea/switch.json +++ b/public/r/styles/base-rhea/switch.json @@ -4,7 +4,7 @@ "title": "Switch", "description": "A control that allows the user to toggle between checked and not checked.", "dependencies": [ - "@data-slot/switch@^1.0.2" + "@data-slot/switch@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-rhea/tabs.json b/public/r/styles/base-rhea/tabs.json index 34a1a458f..2402e4f5a 100644 --- a/public/r/styles/base-rhea/tabs.json +++ b/public/r/styles/base-rhea/tabs.json @@ -4,7 +4,7 @@ "title": "Tabs", "description": "A set of layered sections of content, known as tabs, that display one panel of content at a time.", "dependencies": [ - "@data-slot/tabs@^1.0.2" + "@data-slot/tabs@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-rhea/toast.json b/public/r/styles/base-rhea/toast.json index 3ab2d9c4b..19595666d 100644 --- a/public/r/styles/base-rhea/toast.json +++ b/public/r/styles/base-rhea/toast.json @@ -4,7 +4,7 @@ "title": "Toast", "description": "A brief notification that appears without interrupting the user.", "dependencies": [ - "@data-slot/toast@^1.0.2", + "@data-slot/toast@^1.1.2", "@lucide/astro" ], "registryDependencies": [ diff --git a/public/r/styles/base-rhea/toggle-group.json b/public/r/styles/base-rhea/toggle-group.json index 86ce74d19..9765f2a99 100644 --- a/public/r/styles/base-rhea/toggle-group.json +++ b/public/r/styles/base-rhea/toggle-group.json @@ -4,7 +4,7 @@ "title": "Toggle Group", "description": "A set of two-state buttons that can be toggled independently or as a single choice.", "dependencies": [ - "@data-slot/toggle-group@^1.0.2" + "@data-slot/toggle-group@^1.1.2" ], "registryDependencies": [ "@fulldev/toggle" diff --git a/public/r/styles/base-rhea/toggle.json b/public/r/styles/base-rhea/toggle.json index 6e93311b1..e4763415f 100644 --- a/public/r/styles/base-rhea/toggle.json +++ b/public/r/styles/base-rhea/toggle.json @@ -4,7 +4,7 @@ "title": "Toggle", "description": "A two-state button that can be either on or off.", "dependencies": [ - "@data-slot/toggle@^1.0.2" + "@data-slot/toggle@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-rhea/tooltip.json b/public/r/styles/base-rhea/tooltip.json index 10ba9395f..0ec7166b9 100644 --- a/public/r/styles/base-rhea/tooltip.json +++ b/public/r/styles/base-rhea/tooltip.json @@ -4,7 +4,7 @@ "title": "Tooltip", "description": "Displays contextual information when a user hovers or focuses a trigger.", "dependencies": [ - "@data-slot/tooltip@^1.0.2" + "@data-slot/tooltip@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-sera/accordion.json b/public/r/styles/base-sera/accordion.json index e1990f45d..1f3fb804f 100644 --- a/public/r/styles/base-sera/accordion.json +++ b/public/r/styles/base-sera/accordion.json @@ -4,7 +4,7 @@ "title": "Accordion", "description": "A vertically stacked set of interactive headings that each reveal a section of content.", "dependencies": [ - "@data-slot/accordion@^1.0.2", + "@data-slot/accordion@^1.1.2", "@lucide/astro" ], "files": [ diff --git a/public/r/styles/base-sera/alert-dialog.json b/public/r/styles/base-sera/alert-dialog.json index 93effedfe..d965391d2 100644 --- a/public/r/styles/base-sera/alert-dialog.json +++ b/public/r/styles/base-sera/alert-dialog.json @@ -4,7 +4,7 @@ "title": "Alert Dialog", "description": "A modal dialog for important confirmations that expects a response.", "dependencies": [ - "@data-slot/alert-dialog@^1.0.2" + "@data-slot/alert-dialog@^1.1.2" ], "registryDependencies": [ "@fulldev/button" diff --git a/public/r/styles/base-sera/code-block-examples.json b/public/r/styles/base-sera/code-block-examples.json new file mode 100644 index 000000000..2dc78df89 --- /dev/null +++ b/public/r/styles/base-sera/code-block-examples.json @@ -0,0 +1,33 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "code-block-examples", + "title": "Code Block examples", + "description": "The examples from the shadcn/ui Code Block docs.", + "registryDependencies": [ + "@fulldev/code-block" + ], + "files": [ + { + "path": "src/components/examples/code-block/code-block-demo.astro", + "content": "---\nimport {\n CodeBlock,\n CodeBlockActions,\n CodeBlockContent,\n CodeBlockCopyButton,\n CodeBlockHeader,\n CodeBlockTitle,\n} from \"@/components/ui/code-block\"\n\nconst code = `import { Button } from \"@/components/ui/button\"\n\n`\n---\n\n\n \n contact.astro\n \n \n \n \n \n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-lines.astro", + "content": "---\nimport {\n CodeBlock,\n CodeBlockContent,\n CodeBlockLine,\n} from \"@/components/ui/code-block\"\n---\n\n\n \n export const site = {\n {' title: \"Our website\",'}\n \n {' title: \"Our new website\",'}\n \n \n {' lang: \"en\",'}\n }\n \n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-numbered.astro", + "content": "---\nimport { CodeBlock, CodeBlockContent } from \"@/components/ui/code-block\"\n\nconst code = `{\n \"name\": \"our-website\",\n\n \"private\": true\n}`\n---\n\n\n \n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-wrap.astro", + "content": "---\nimport {\n CodeBlock,\n CodeBlockActions,\n CodeBlockContent,\n CodeBlockCopyButton,\n CodeBlockFooter,\n} from \"@/components/ui/code-block\"\n\nconst code =\n \"A long explanation can wrap inside a code block without making the surrounding article or the page scroll horizontally.\"\n---\n\n\n \n \n \n \n Plain text, with line wrapping.\n\n", + "type": "registry:component" + } + ], + "docs": "https://ui.full.dev/components/code-block/", + "type": "registry:example" +} \ No newline at end of file diff --git a/public/r/styles/base-sera/code-block.json b/public/r/styles/base-sera/code-block.json new file mode 100644 index 000000000..d1dffa4d1 --- /dev/null +++ b/public/r/styles/base-sera/code-block.json @@ -0,0 +1,65 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "code-block", + "title": "Code Block", + "description": "Code and plain-text snippets with copy actions, line numbers and highlighted lines.", + "dependencies": [ + "@lucide/astro", + "class-variance-authority" + ], + "registryDependencies": [ + "@fulldev/button" + ], + "files": [ + { + "path": "src/components/ui/code-block/code-block-actions.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\nconst { class: className, ...props } = Astro.props\n---\n\n&]:m-0 [[data-slot=code-block]>&]:top-3 [[data-slot=code-block]>&]:end-3 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:top-2 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:end-2 [[data-slot=code-block]>&]:*:[button]:bg-background [[data-slot=code-block]>&]:*:[button]:ring-1 [[data-slot=code-block]>&]:*:[button]:ring-foreground/10 ms-auto flex shrink-0 items-center [[data-slot=code-block]>&]:absolute [[data-slot=code-block]>&]:z-10 [[data-slot=code-block]>&]:opacity-0 [[data-slot=code-block]>&]:transition-opacity [[data-slot=code-block]>&]:group-focus-within/code-block:opacity-100 [[data-slot=code-block]>&]:group-hover/code-block:opacity-100 [[data-slot=code-block]>&]:pointer-coarse:opacity-100\",\n className\n )}\n {...props}\n>\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-content.astro", + "content": "---\n/* eslint-disable astro/jsx-a11y/no-noninteractive-tabindex -- Focusable code supports keyboard scrolling, as in shadcn/ui. */\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\nimport CodeBlockLine from \"./code-block-line.astro\"\n\ntype Props = HTMLAttributes<\"pre\"> & {\n code?: string\n wrap?: boolean\n lineNumbers?: boolean\n startLine?: number\n}\n\nconst {\n class: className,\n code,\n wrap = false,\n lineNumbers = false,\n startLine = 1,\n style,\n ...props\n} = Astro.props\n\nconst contentStyle =\n typeof style === \"string\"\n ? `counter-reset: line ${startLine - 1}; ${style}`\n : { counterReset: `line ${startLine - 1}`, ...style }\n---\n\n{code !== undefined ? lineNumbers ? code.replace(/\\n$/, \"\").split(\"\\n\").map((line) => {line}) : code : }\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-copy-button.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport CheckIcon from \"@lucide/astro/icons/check\"\nimport CopyIcon from \"@lucide/astro/icons/copy\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button, type ButtonVariantProps } from \"@/components/ui/button\"\n\ntype Props = Omit, \"value\" | \"type\"> &\n ButtonVariantProps & {\n value: string\n copyLabel?: string\n copiedLabel?: string\n errorLabel?: string\n }\n\nconst {\n class: className,\n value,\n variant = \"ghost\",\n size = \"icon-xs\",\n copyLabel = \"Copy\",\n copiedLabel = \"Copied\",\n errorLabel = \"Could not copy\",\n ...props\n} = Astro.props\n---\n\n\n \n \n\n\n\n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-footer.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\nconst { class: className, ...props } = Astro.props\n---\n\n\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-header.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\nconst { class: className, ...props } = Astro.props\n---\n\n[data-slot=code-block-title]]:min-w-0\",\n className\n )}\n {...props}\n>\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-line.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 \"-mx-4 px-4 in-data-numbered:gap-x-3 before:min-w-6 before:text-end before:text-muted-foreground after:start-1 after:text-muted-foreground group-data-[size=sm]/code-block:-mx-3 group-data-[size=sm]/code-block:px-3 relative block min-h-lh before:select-none after:absolute after:top-0 after:select-none in-data-numbered:col-span-2 in-data-numbered:grid in-data-numbered:grid-cols-subgrid in-data-numbered:[counter-increment:line] in-data-numbered:before:content-[counter(line)] in-data-numbered:supports-[content:counter(line)_/_'']:before:content-[counter(line)_/_'']\",\n {\n variants: {\n variant: {\n default: \"\",\n added: \"bg-muted after:content-['+']\",\n removed: \"bg-destructive/10 after:text-destructive after:content-['−']\",\n highlighted: \"bg-muted\",\n },\n },\n defaultVariants: { variant: \"default\" },\n }\n)\n\ntype Props = HTMLAttributes<\"span\"> & VariantProps\nconst { class: className, variant = \"default\", ...props } = Astro.props\n---\n\n\n \n \n {\"\\n\"}\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-title.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\nconst { class: className, ...props } = Astro.props\n---\n\n\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block.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 \"rounded-none text-sm data-[size=sm]:text-xs has-[>[data-slot=code-block-content]:focus-visible]:ring-2 has-[>[data-slot=code-block-content]:focus-visible]:ring-ring/30 group/code-block relative flex w-full min-w-0 flex-col overflow-hidden\",\n {\n variants: {\n variant: {\n default: \"border border-input text-foreground dark:bg-input/30 has-[>[data-slot=code-block-content]:focus-visible]:border-ring\",\n destructive: \"border border-destructive/30 text-destructive dark:border-destructive/40\",\n },\n },\n defaultVariants: { variant: \"default\" },\n }\n)\n\ntype Props = HTMLAttributes<\"div\"> &\n VariantProps & {\n size?: \"default\" | \"sm\"\n }\n\nconst {\n class: className,\n variant = \"default\",\n size = \"default\",\n ...props\n} = Astro.props\n---\n\n\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/index.ts", + "content": "export { default as CodeBlock } from \"./code-block.astro\"\nexport { default as CodeBlockHeader } from \"./code-block-header.astro\"\nexport { default as CodeBlockTitle } from \"./code-block-title.astro\"\nexport { default as CodeBlockActions } from \"./code-block-actions.astro\"\nexport { default as CodeBlockCopyButton } from \"./code-block-copy-button.astro\"\nexport { default as CodeBlockContent } from \"./code-block-content.astro\"\nexport { default as CodeBlockLine } from \"./code-block-line.astro\"\nexport { default as CodeBlockFooter } from \"./code-block-footer.astro\"\n", + "type": "registry:ui" + } + ], + "docs": "https://ui.full.dev/components/code-block/", + "categories": [ + "ui" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/public/r/styles/base-sera/collapsible-examples.json b/public/r/styles/base-sera/collapsible-examples.json index 56b092a2f..7d0f08173 100644 --- a/public/r/styles/base-sera/collapsible-examples.json +++ b/public/r/styles/base-sera/collapsible-examples.json @@ -25,6 +25,11 @@ "content": "---\nimport ChevronsUpDown from \"@lucide/astro/icons/chevrons-up-down\"\n\nimport { buttonVariants } from \"@/components/ui/button\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/components/ui/collapsible\"\n---\n\n\n
\n

Order #4189

\n \n \n Toggle details\n \n
\n
\n Status\n Shipped\n
\n \n
\n

Shipping address

\n

100 Market St, San Francisco

\n
\n
\n

Items

\n

2x Studio Headphones

\n
\n
\n
\n", "type": "registry:component" }, + { + "path": "src/components/examples/collapsible/collapsible-dismissal.astro", + "content": "---\nimport ChevronDownIcon from \"@lucide/astro/icons/chevron-down\"\n\nimport { buttonVariants } from \"@/components/ui/button\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/components/ui/collapsible\"\n---\n\n
\n \n \n Browse documentation\n \n \n \n \n \n \n

\n Open the panel, then press Escape or click outside it to close.\n

\n
\n", + "type": "registry:component" + }, { "path": "src/components/examples/collapsible/collapsible-file-tree.astro", "content": "---\nimport ChevronRightIcon from \"@lucide/astro/icons/chevron-right\"\nimport FileIcon from \"@lucide/astro/icons/file\"\nimport FolderIcon from \"@lucide/astro/icons/folder\"\n\nimport { Button, buttonVariants } from \"@/components/ui/button\"\nimport { Card, CardContent, CardHeader } from \"@/components/ui/card\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/components/ui/collapsible\"\nimport { Tabs, TabsList, TabsTrigger } from \"@/components/ui/tabs\"\n\ntype FileTreeItem = { name: string } | { name: string; items: FileTreeItem[] }\n\nconst fileTree: FileTreeItem[] = [\n {\n name: \"components\",\n items: [\n {\n name: \"ui\",\n items: [\n { name: \"button.tsx\" },\n { name: \"card.tsx\" },\n { name: \"dialog.tsx\" },\n { name: \"input.tsx\" },\n { name: \"select.tsx\" },\n { name: \"table.tsx\" },\n ],\n },\n { name: \"login-form.tsx\" },\n { name: \"register-form.tsx\" },\n ],\n },\n {\n name: \"lib\",\n items: [{ name: \"utils.ts\" }, { name: \"cn.ts\" }, { name: \"api.ts\" }],\n },\n {\n name: \"hooks\",\n items: [\n { name: \"use-media-query.ts\" },\n { name: \"use-debounce.ts\" },\n { name: \"use-local-storage.ts\" },\n ],\n },\n {\n name: \"types\",\n items: [{ name: \"index.d.ts\" }, { name: \"api.d.ts\" }],\n },\n {\n name: \"public\",\n items: [{ name: \"favicon.ico\" }, { name: \"logo.svg\" }, { name: \"images\" }],\n },\n { name: \"app.tsx\" },\n { name: \"layout.tsx\" },\n { name: \"globals.css\" },\n { name: \"package.json\" },\n { name: \"tsconfig.json\" },\n { name: \"README.md\" },\n { name: \".gitignore\" },\n]\n\n// Renders the card, or one tree level when Astro.self passes `items`.\nconst { items } = Astro.props as { items?: FileTreeItem[] }\n---\n\n{items ? (\n items.map((fileItem) =>\n \"items\" in fileItem ? (\n \n \n \n \n {fileItem.name}\n \n \n
\n \n
\n
\n
\n ) : (\n \n \n {fileItem.name}\n \n )\n )\n) : (\n \n \n \n \n Explorer\n Outline\n \n \n \n \n
\n \n
\n
\n
\n)}\n", diff --git a/public/r/styles/base-sera/collapsible.json b/public/r/styles/base-sera/collapsible.json index 51460f6ff..dd0c03d41 100644 --- a/public/r/styles/base-sera/collapsible.json +++ b/public/r/styles/base-sera/collapsible.json @@ -4,12 +4,12 @@ "title": "Collapsible", "description": "An interactive component which expands/collapses a panel.", "dependencies": [ - "@data-slot/collapsible@^1.0.2" + "@data-slot/collapsible@^1.1.2" ], "files": [ { "path": "src/components/ui/collapsible/collapsible.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\"> & {\n // \"li\" makes a list item the collapsible, such as a sidebar menu item.\n as?: \"div\" | \"li\"\n defaultOpen?: boolean\n hiddenUntilFound?: boolean\n}\n\nconst {\n as: Tag = \"div\",\n class: className,\n defaultOpen,\n hiddenUntilFound,\n ...props\n} = Astro.props\n---\n\n\n \n\n\n\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\"> & {\n // \"li\" makes a list item the collapsible, such as a sidebar menu item.\n as?: \"div\" | \"li\"\n defaultOpen?: boolean\n hiddenUntilFound?: boolean\n closeOnEscape?: boolean\n closeOnClickOutside?: boolean\n}\n\nconst {\n as: Tag = \"div\",\n class: className,\n defaultOpen,\n hiddenUntilFound,\n closeOnEscape,\n closeOnClickOutside,\n ...props\n} = Astro.props\n---\n\n\n \n\n\n\n", "type": "registry:ui" }, { diff --git a/public/r/styles/base-sera/combobox.json b/public/r/styles/base-sera/combobox.json index a957d6479..df7481602 100644 --- a/public/r/styles/base-sera/combobox.json +++ b/public/r/styles/base-sera/combobox.json @@ -4,8 +4,8 @@ "title": "Combobox", "description": "Autocomplete input with a list of suggestions.", "dependencies": [ - "@data-slot/combobox@^1.0.2", - "@data-slot/core@^1.0.2", + "@data-slot/combobox@^1.1.2", + "@data-slot/core@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -34,7 +34,7 @@ }, { "path": "src/components/ui/combobox/combobox-input.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport XIcon from \"@lucide/astro/icons/x\"\n\nimport { cn } from \"@/lib/utils\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n} from \"@/components/ui/input-group\"\n\nimport ComboboxTrigger from \"./combobox-trigger.astro\"\n\ntype Props = HTMLAttributes<\"input\"> & {\n showTrigger?: boolean\n showClear?: boolean\n}\n\nconst {\n class: className,\n type = \"text\",\n disabled = false,\n showTrigger = true,\n showClear = false,\n ...props\n} = Astro.props\n---\n\n\n \n \n {showTrigger && (\n \n )}\n {showClear && (\n \n \n \n )}\n \n \n\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport XIcon from \"@lucide/astro/icons/x\"\n\nimport { cn } from \"@/lib/utils\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n} from \"@/components/ui/input-group\"\n\nimport ComboboxTrigger from \"./combobox-trigger.astro\"\n\ntype Props = HTMLAttributes<\"input\"> & {\n showTrigger?: boolean\n showClear?: boolean\n clearLabel?: string\n}\n\nconst {\n class: className,\n type = \"text\",\n disabled = false,\n showTrigger = true,\n showClear = false,\n clearLabel = \"Clear selection\",\n ...props\n} = Astro.props\n---\n\n\n \n \n {showTrigger && (\n \n )}\n {showClear && (\n \n \n \n )}\n \n \n\n", "type": "registry:ui" }, { diff --git a/public/r/styles/base-sera/command.json b/public/r/styles/base-sera/command.json index 59789aee8..8e9e13a1f 100644 --- a/public/r/styles/base-sera/command.json +++ b/public/r/styles/base-sera/command.json @@ -4,9 +4,9 @@ "title": "Command", "description": "Command menu for search and quick actions.", "dependencies": [ - "@data-slot/command@^1.0.2", + "@data-slot/command@^1.1.2", "@lucide/astro", - "@data-slot/core@^1.0.2" + "@data-slot/core@^1.1.2" ], "registryDependencies": [ "@fulldev/dialog" diff --git a/public/r/styles/base-sera/components.json b/public/r/styles/base-sera/components.json index 90872f412..e0f9f98bf 100644 --- a/public/r/styles/base-sera/components.json +++ b/public/r/styles/base-sera/components.json @@ -18,6 +18,7 @@ "@fulldev/card", "@fulldev/carousel", "@fulldev/checkbox", + "@fulldev/code-block", "@fulldev/collapsible", "@fulldev/combobox", "@fulldev/command", @@ -43,6 +44,7 @@ "@fulldev/pagination", "@fulldev/popover", "@fulldev/price", + "@fulldev/progress", "@fulldev/radio-group", "@fulldev/rating", "@fulldev/resizable", diff --git a/public/r/styles/base-sera/dialog.json b/public/r/styles/base-sera/dialog.json index 7e8cf231d..70e3ce22a 100644 --- a/public/r/styles/base-sera/dialog.json +++ b/public/r/styles/base-sera/dialog.json @@ -4,7 +4,7 @@ "title": "Dialog", "description": "A window overlaid on either the primary window or another dialog window, rendering the content underneath inert.", "dependencies": [ - "@data-slot/dialog@^1.0.2", + "@data-slot/dialog@^1.1.2", "@lucide/astro" ], "registryDependencies": [ diff --git a/public/r/styles/base-sera/drawer.json b/public/r/styles/base-sera/drawer.json index a4ec5dc3a..2c577a682 100644 --- a/public/r/styles/base-sera/drawer.json +++ b/public/r/styles/base-sera/drawer.json @@ -4,7 +4,7 @@ "title": "Drawer", "description": "A drawer component that slides in from any edge of the screen.", "dependencies": [ - "@data-slot/drawer@^1.0.2" + "@data-slot/drawer@^1.1.2" ], "registryDependencies": [ "@fulldev/button" diff --git a/public/r/styles/base-sera/dropdown-menu.json b/public/r/styles/base-sera/dropdown-menu.json index de69bd440..aeb816846 100644 --- a/public/r/styles/base-sera/dropdown-menu.json +++ b/public/r/styles/base-sera/dropdown-menu.json @@ -4,7 +4,7 @@ "title": "Dropdown Menu", "description": "Displays a menu to the user, such as a set of actions or functions, triggered by a button.", "dependencies": [ - "@data-slot/dropdown-menu@^1.0.2", + "@data-slot/dropdown-menu@^1.1.2", "@lucide/astro" ], "files": [ diff --git a/public/r/styles/base-sera/hover-card.json b/public/r/styles/base-sera/hover-card.json index d370648db..7b0cd4016 100644 --- a/public/r/styles/base-sera/hover-card.json +++ b/public/r/styles/base-sera/hover-card.json @@ -4,8 +4,8 @@ "title": "Hover Card", "description": "For sighted users to preview content available behind a link.", "dependencies": [ - "@data-slot/hover-card@^1.0.2", - "@data-slot/core@^1.0.2" + "@data-slot/hover-card@^1.1.2", + "@data-slot/core@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-sera/navigation-menu.json b/public/r/styles/base-sera/navigation-menu.json index 3641121f0..bda0939e9 100644 --- a/public/r/styles/base-sera/navigation-menu.json +++ b/public/r/styles/base-sera/navigation-menu.json @@ -4,7 +4,7 @@ "title": "Navigation Menu", "description": "A collection of links for navigating websites.", "dependencies": [ - "@data-slot/navigation-menu@^1.0.2", + "@data-slot/navigation-menu@^1.1.2", "@lucide/astro" ], "files": [ diff --git a/public/r/styles/base-sera/popover.json b/public/r/styles/base-sera/popover.json index ca82f157c..32abc68d5 100644 --- a/public/r/styles/base-sera/popover.json +++ b/public/r/styles/base-sera/popover.json @@ -4,7 +4,7 @@ "title": "Popover", "description": "Displays rich content in a floating layer, triggered by a button.", "dependencies": [ - "@data-slot/popover@^1.0.2" + "@data-slot/popover@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-sera/progress-examples.json b/public/r/styles/base-sera/progress-examples.json new file mode 100644 index 000000000..4fb614b85 --- /dev/null +++ b/public/r/styles/base-sera/progress-examples.json @@ -0,0 +1,33 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "progress-examples", + "title": "Progress examples", + "description": "The examples from the shadcn/ui Progress docs.", + "registryDependencies": [ + "@fulldev/progress" + ], + "files": [ + { + "path": "src/components/examples/progress/progress-custom-max.astro", + "content": "---\nimport { Progress } from \"@/components/ui/progress\"\n---\n\n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-demo.astro", + "content": "---\nimport { Progress } from \"@/components/ui/progress\"\n---\n\n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-indeterminate.astro", + "content": "---\nimport { Progress } from \"@/components/ui/progress\"\n---\n\n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-rtl.astro", + "content": "---\nimport { Progress } from \"@/components/ui/progress\"\n---\n\n\n", + "type": "registry:component" + } + ], + "docs": "https://ui.full.dev/components/progress/", + "type": "registry:example" +} \ No newline at end of file diff --git a/public/r/styles/base-sera/progress.json b/public/r/styles/base-sera/progress.json new file mode 100644 index 000000000..30cbac5b8 --- /dev/null +++ b/public/r/styles/base-sera/progress.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "progress", + "title": "Progress", + "description": "Shows how much of a task or sequence is complete.", + "files": [ + { + "path": "src/components/ui/progress/index.ts", + "content": "export { default as Progress } from \"./progress.astro\"\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/progress/progress.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\"> & {\n value?: number | null\n max?: number\n label?: string\n showValue?: boolean\n}\n\nconst {\n class: className,\n value,\n max = 100,\n label,\n showValue = false,\n \"aria-label\": ariaLabel = label || \"Progress\",\n \"aria-labelledby\": ariaLabelledby,\n \"aria-valuetext\": ariaValueText,\n ...props\n} = Astro.props\n\nconst resolvedMax = Number.isFinite(max) && max > 0 ? max : 100\nconst resolvedValue =\n typeof value === \"number\" && Number.isFinite(value)\n ? Math.min(resolvedMax, Math.max(0, value))\n : undefined\nconst percentage =\n resolvedValue === undefined ? undefined : (resolvedValue / resolvedMax) * 100\nconst stateAttributes = {\n \"data-indeterminate\": resolvedValue === undefined ? \"\" : undefined,\n \"data-complete\": resolvedValue === resolvedMax ? \"\" : undefined,\n \"data-progressing\":\n resolvedValue !== undefined && resolvedValue < resolvedMax ? \"\" : undefined,\n}\n---\n\n\n \n {label && (\n \n {label}\n \n )}\n {showValue && percentage !== undefined && (\n \n {Math.round(percentage)}%\n \n )}\n \n \n \n \n\n", + "type": "registry:ui" + } + ], + "docs": "https://ui.full.dev/components/progress/", + "categories": [ + "ui" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/public/r/styles/base-sera/radio-group.json b/public/r/styles/base-sera/radio-group.json index a7b468420..6ffc237bd 100644 --- a/public/r/styles/base-sera/radio-group.json +++ b/public/r/styles/base-sera/radio-group.json @@ -4,7 +4,7 @@ "title": "Radio Group", "description": "A set of checkable buttons, known as radio buttons, where no more than one of the buttons can be checked at a time.", "dependencies": [ - "@data-slot/radio-group@^1.0.2" + "@data-slot/radio-group@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-sera/registry.json b/public/r/styles/base-sera/registry.json index dfea03f86..44b78cc16 100644 --- a/public/r/styles/base-sera/registry.json +++ b/public/r/styles/base-sera/registry.json @@ -13,7 +13,7 @@ ], "docs": "https://ui.full.dev/components/accordion/", "dependencies": [ - "@data-slot/accordion@^1.0.2", + "@data-slot/accordion@^1.1.2", "@lucide/astro" ], "files": [ @@ -81,7 +81,7 @@ ], "docs": "https://ui.full.dev/components/alert-dialog/", "dependencies": [ - "@data-slot/alert-dialog@^1.0.2" + "@data-slot/alert-dialog@^1.1.2" ], "registryDependencies": [ "@fulldev/button" @@ -367,6 +367,61 @@ } ] }, + { + "name": "code-block", + "type": "registry:ui", + "title": "Code Block", + "description": "Code and plain-text snippets with copy actions, line numbers and highlighted lines.", + "categories": [ + "ui" + ], + "docs": "https://ui.full.dev/components/code-block/", + "dependencies": [ + "@lucide/astro", + "class-variance-authority" + ], + "registryDependencies": [ + "@fulldev/button" + ], + "files": [ + { + "path": "src/components/ui/code-block/code-block-actions.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-content.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-copy-button.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-footer.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-header.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-line.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-title.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/index.ts", + "type": "registry:ui" + } + ] + }, { "name": "collapsible", "type": "registry:ui", @@ -377,7 +432,7 @@ ], "docs": "https://ui.full.dev/components/collapsible/", "dependencies": [ - "@data-slot/collapsible@^1.0.2" + "@data-slot/collapsible@^1.1.2" ], "files": [ { @@ -408,8 +463,8 @@ ], "docs": "https://ui.full.dev/components/combobox/", "dependencies": [ - "@data-slot/combobox@^1.0.2", - "@data-slot/core@^1.0.2", + "@data-slot/combobox@^1.1.2", + "@data-slot/core@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -476,9 +531,9 @@ ], "docs": "https://ui.full.dev/components/command/", "dependencies": [ - "@data-slot/command@^1.0.2", + "@data-slot/command@^1.1.2", "@lucide/astro", - "@data-slot/core@^1.0.2" + "@data-slot/core@^1.1.2" ], "registryDependencies": [ "@fulldev/dialog" @@ -536,7 +591,7 @@ ], "docs": "https://ui.full.dev/components/dialog/", "dependencies": [ - "@data-slot/dialog@^1.0.2", + "@data-slot/dialog@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -599,7 +654,7 @@ ], "docs": "https://ui.full.dev/components/dropdown-menu/", "dependencies": [ - "@data-slot/dropdown-menu@^1.0.2", + "@data-slot/dropdown-menu@^1.1.2", "@lucide/astro" ], "files": [ @@ -818,8 +873,8 @@ ], "docs": "https://ui.full.dev/components/hover-card/", "dependencies": [ - "@data-slot/hover-card@^1.0.2", - "@data-slot/core@^1.0.2" + "@data-slot/hover-card@^1.1.2", + "@data-slot/core@^1.1.2" ], "files": [ { @@ -1183,7 +1238,7 @@ ], "docs": "https://ui.full.dev/components/navigation-menu/", "dependencies": [ - "@data-slot/navigation-menu@^1.0.2", + "@data-slot/navigation-menu@^1.1.2", "@lucide/astro" ], "files": [ @@ -1270,7 +1325,7 @@ ], "docs": "https://ui.full.dev/components/popover/", "dependencies": [ - "@data-slot/popover@^1.0.2" + "@data-slot/popover@^1.1.2" ], "files": [ { @@ -1335,6 +1390,26 @@ } ] }, + { + "name": "progress", + "type": "registry:ui", + "title": "Progress", + "description": "Shows how much of a task or sequence is complete.", + "categories": [ + "ui" + ], + "docs": "https://ui.full.dev/components/progress/", + "files": [ + { + "path": "src/components/ui/progress/index.ts", + "type": "registry:ui" + }, + { + "path": "src/components/ui/progress/progress.astro", + "type": "registry:ui" + } + ] + }, { "name": "radio-group", "type": "registry:ui", @@ -1345,7 +1420,7 @@ ], "docs": "https://ui.full.dev/components/radio-group/", "dependencies": [ - "@data-slot/radio-group@^1.0.2" + "@data-slot/radio-group@^1.1.2" ], "files": [ { @@ -1395,7 +1470,7 @@ ], "docs": "https://ui.full.dev/components/select/", "dependencies": [ - "@data-slot/select@^1.0.2", + "@data-slot/select@^1.1.2", "@lucide/astro" ], "files": [ @@ -1499,7 +1574,7 @@ ], "docs": "https://ui.full.dev/components/sheet/", "dependencies": [ - "@data-slot/dialog@^1.0.2", + "@data-slot/dialog@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -1555,7 +1630,7 @@ ], "docs": "https://ui.full.dev/components/sidebar/", "dependencies": [ - "@data-slot/tooltip@^1.0.2", + "@data-slot/tooltip@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -1676,7 +1751,7 @@ ], "docs": "https://ui.full.dev/components/slider/", "dependencies": [ - "@data-slot/slider@^1.0.2" + "@data-slot/slider@^1.1.2" ], "files": [ { @@ -1742,7 +1817,7 @@ ], "docs": "https://ui.full.dev/components/switch/", "dependencies": [ - "@data-slot/switch@^1.0.2" + "@data-slot/switch@^1.1.2" ], "files": [ { @@ -1813,7 +1888,7 @@ ], "docs": "https://ui.full.dev/components/tabs/", "dependencies": [ - "@data-slot/tabs@^1.0.2" + "@data-slot/tabs@^1.1.2" ], "files": [ { @@ -1888,7 +1963,7 @@ ], "docs": "https://ui.full.dev/components/toggle/", "dependencies": [ - "@data-slot/toggle@^1.0.2" + "@data-slot/toggle@^1.1.2" ], "files": [ { @@ -1935,7 +2010,7 @@ ], "docs": "https://ui.full.dev/components/tooltip/", "dependencies": [ - "@data-slot/tooltip@^1.0.2" + "@data-slot/tooltip@^1.1.2" ], "files": [ { @@ -2070,7 +2145,7 @@ ], "docs": "https://ui.full.dev/components/drawer/", "dependencies": [ - "@data-slot/drawer@^1.0.2" + "@data-slot/drawer@^1.1.2" ], "registryDependencies": [ "@fulldev/button" @@ -2160,7 +2235,7 @@ ], "docs": "https://ui.full.dev/components/resizable/", "dependencies": [ - "@data-slot/resizable@^1.0.2" + "@data-slot/resizable@^1.1.2" ], "files": [ { @@ -2191,7 +2266,7 @@ ], "docs": "https://ui.full.dev/components/toast/", "dependencies": [ - "@data-slot/toast@^1.0.2", + "@data-slot/toast@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -2258,7 +2333,7 @@ ], "docs": "https://ui.full.dev/components/toggle-group/", "dependencies": [ - "@data-slot/toggle-group@^1.0.2" + "@data-slot/toggle-group@^1.1.2" ], "registryDependencies": [ "@fulldev/toggle" @@ -2459,6 +2534,7 @@ "@fulldev/card", "@fulldev/carousel", "@fulldev/checkbox", + "@fulldev/code-block", "@fulldev/collapsible", "@fulldev/combobox", "@fulldev/command", @@ -2484,6 +2560,7 @@ "@fulldev/pagination", "@fulldev/popover", "@fulldev/price", + "@fulldev/progress", "@fulldev/radio-group", "@fulldev/rating", "@fulldev/resizable", @@ -5359,6 +5436,34 @@ } ] }, + { + "name": "code-block-examples", + "type": "registry:example", + "title": "Code Block examples", + "description": "The examples from the shadcn/ui Code Block docs.", + "docs": "https://ui.full.dev/components/code-block/", + "registryDependencies": [ + "@fulldev/code-block" + ], + "files": [ + { + "path": "src/components/examples/code-block/code-block-demo.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-lines.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-numbered.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-wrap.astro", + "type": "registry:component" + } + ] + }, { "name": "collapsible-examples", "type": "registry:example", @@ -5385,6 +5490,10 @@ "path": "src/components/examples/collapsible/collapsible-demo.astro", "type": "registry:component" }, + { + "path": "src/components/examples/collapsible/collapsible-dismissal.astro", + "type": "registry:component" + }, { "path": "src/components/examples/collapsible/collapsible-file-tree.astro", "type": "registry:component" @@ -6185,6 +6294,34 @@ } ] }, + { + "name": "progress-examples", + "type": "registry:example", + "title": "Progress examples", + "description": "The examples from the shadcn/ui Progress docs.", + "docs": "https://ui.full.dev/components/progress/", + "registryDependencies": [ + "@fulldev/progress" + ], + "files": [ + { + "path": "src/components/examples/progress/progress-custom-max.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-demo.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-indeterminate.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-rtl.astro", + "type": "registry:component" + } + ] + }, { "name": "radio-group-examples", "type": "registry:example", diff --git a/public/r/styles/base-sera/resizable.json b/public/r/styles/base-sera/resizable.json index 69ab59e06..7c559a9e7 100644 --- a/public/r/styles/base-sera/resizable.json +++ b/public/r/styles/base-sera/resizable.json @@ -4,7 +4,7 @@ "title": "Resizable", "description": "Accessible panel groups with pointer and keyboard resizing.", "dependencies": [ - "@data-slot/resizable@^1.0.2" + "@data-slot/resizable@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-sera/select.json b/public/r/styles/base-sera/select.json index 1eea4b03d..0bfed9adc 100644 --- a/public/r/styles/base-sera/select.json +++ b/public/r/styles/base-sera/select.json @@ -4,7 +4,7 @@ "title": "Select", "description": "Displays a list of options for the user to pick from, triggered by a button.", "dependencies": [ - "@data-slot/select@^1.0.2", + "@data-slot/select@^1.1.2", "@lucide/astro" ], "files": [ diff --git a/public/r/styles/base-sera/sheet.json b/public/r/styles/base-sera/sheet.json index 4a8604d14..14e157e3b 100644 --- a/public/r/styles/base-sera/sheet.json +++ b/public/r/styles/base-sera/sheet.json @@ -4,7 +4,7 @@ "title": "Sheet", "description": "A sliding panel component that appears from the edge of the screen.", "dependencies": [ - "@data-slot/dialog@^1.0.2", + "@data-slot/dialog@^1.1.2", "@lucide/astro" ], "registryDependencies": [ diff --git a/public/r/styles/base-sera/sidebar.json b/public/r/styles/base-sera/sidebar.json index 523364ab7..e09abf030 100644 --- a/public/r/styles/base-sera/sidebar.json +++ b/public/r/styles/base-sera/sidebar.json @@ -4,7 +4,7 @@ "title": "Sidebar", "description": "A composable, themeable, and customizable Astro sidebar component.", "dependencies": [ - "@data-slot/tooltip@^1.0.2", + "@data-slot/tooltip@^1.1.2", "@lucide/astro" ], "registryDependencies": [ diff --git a/public/r/styles/base-sera/slider.json b/public/r/styles/base-sera/slider.json index 64a49b74a..abbedde63 100644 --- a/public/r/styles/base-sera/slider.json +++ b/public/r/styles/base-sera/slider.json @@ -4,7 +4,7 @@ "title": "Slider", "description": "An input where the user selects a value from within a given range.", "dependencies": [ - "@data-slot/slider@^1.0.2" + "@data-slot/slider@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-sera/switch.json b/public/r/styles/base-sera/switch.json index 2fb461cb4..3a850000e 100644 --- a/public/r/styles/base-sera/switch.json +++ b/public/r/styles/base-sera/switch.json @@ -4,7 +4,7 @@ "title": "Switch", "description": "A control that allows the user to toggle between checked and not checked.", "dependencies": [ - "@data-slot/switch@^1.0.2" + "@data-slot/switch@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-sera/tabs.json b/public/r/styles/base-sera/tabs.json index cc08b771d..ba1e61a3e 100644 --- a/public/r/styles/base-sera/tabs.json +++ b/public/r/styles/base-sera/tabs.json @@ -4,7 +4,7 @@ "title": "Tabs", "description": "A set of layered sections of content, known as tabs, that display one panel of content at a time.", "dependencies": [ - "@data-slot/tabs@^1.0.2" + "@data-slot/tabs@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-sera/toast.json b/public/r/styles/base-sera/toast.json index e35e47729..a0125cc41 100644 --- a/public/r/styles/base-sera/toast.json +++ b/public/r/styles/base-sera/toast.json @@ -4,7 +4,7 @@ "title": "Toast", "description": "A brief notification that appears without interrupting the user.", "dependencies": [ - "@data-slot/toast@^1.0.2", + "@data-slot/toast@^1.1.2", "@lucide/astro" ], "registryDependencies": [ diff --git a/public/r/styles/base-sera/toggle-group.json b/public/r/styles/base-sera/toggle-group.json index 4e68ec6a5..dfcb0059a 100644 --- a/public/r/styles/base-sera/toggle-group.json +++ b/public/r/styles/base-sera/toggle-group.json @@ -4,7 +4,7 @@ "title": "Toggle Group", "description": "A set of two-state buttons that can be toggled independently or as a single choice.", "dependencies": [ - "@data-slot/toggle-group@^1.0.2" + "@data-slot/toggle-group@^1.1.2" ], "registryDependencies": [ "@fulldev/toggle" diff --git a/public/r/styles/base-sera/toggle.json b/public/r/styles/base-sera/toggle.json index 77e0f9297..5c6e3e99f 100644 --- a/public/r/styles/base-sera/toggle.json +++ b/public/r/styles/base-sera/toggle.json @@ -4,7 +4,7 @@ "title": "Toggle", "description": "A two-state button that can be either on or off.", "dependencies": [ - "@data-slot/toggle@^1.0.2" + "@data-slot/toggle@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-sera/tooltip.json b/public/r/styles/base-sera/tooltip.json index 8fee87216..9a99dee83 100644 --- a/public/r/styles/base-sera/tooltip.json +++ b/public/r/styles/base-sera/tooltip.json @@ -4,7 +4,7 @@ "title": "Tooltip", "description": "Displays contextual information when a user hovers or focuses a trigger.", "dependencies": [ - "@data-slot/tooltip@^1.0.2" + "@data-slot/tooltip@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-vega/accordion.json b/public/r/styles/base-vega/accordion.json index c8c8db7cc..fb470a949 100644 --- a/public/r/styles/base-vega/accordion.json +++ b/public/r/styles/base-vega/accordion.json @@ -4,7 +4,7 @@ "title": "Accordion", "description": "A vertically stacked set of interactive headings that each reveal a section of content.", "dependencies": [ - "@data-slot/accordion@^1.0.2", + "@data-slot/accordion@^1.1.2", "@lucide/astro" ], "files": [ diff --git a/public/r/styles/base-vega/alert-dialog.json b/public/r/styles/base-vega/alert-dialog.json index c8afa0064..e818af71f 100644 --- a/public/r/styles/base-vega/alert-dialog.json +++ b/public/r/styles/base-vega/alert-dialog.json @@ -4,7 +4,7 @@ "title": "Alert Dialog", "description": "A modal dialog for important confirmations that expects a response.", "dependencies": [ - "@data-slot/alert-dialog@^1.0.2" + "@data-slot/alert-dialog@^1.1.2" ], "registryDependencies": [ "@fulldev/button" diff --git a/public/r/styles/base-vega/code-block-examples.json b/public/r/styles/base-vega/code-block-examples.json new file mode 100644 index 000000000..2dc78df89 --- /dev/null +++ b/public/r/styles/base-vega/code-block-examples.json @@ -0,0 +1,33 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "code-block-examples", + "title": "Code Block examples", + "description": "The examples from the shadcn/ui Code Block docs.", + "registryDependencies": [ + "@fulldev/code-block" + ], + "files": [ + { + "path": "src/components/examples/code-block/code-block-demo.astro", + "content": "---\nimport {\n CodeBlock,\n CodeBlockActions,\n CodeBlockContent,\n CodeBlockCopyButton,\n CodeBlockHeader,\n CodeBlockTitle,\n} from \"@/components/ui/code-block\"\n\nconst code = `import { Button } from \"@/components/ui/button\"\n\n`\n---\n\n\n \n contact.astro\n \n \n \n \n \n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-lines.astro", + "content": "---\nimport {\n CodeBlock,\n CodeBlockContent,\n CodeBlockLine,\n} from \"@/components/ui/code-block\"\n---\n\n\n \n export const site = {\n {' title: \"Our website\",'}\n \n {' title: \"Our new website\",'}\n \n \n {' lang: \"en\",'}\n }\n \n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-numbered.astro", + "content": "---\nimport { CodeBlock, CodeBlockContent } from \"@/components/ui/code-block\"\n\nconst code = `{\n \"name\": \"our-website\",\n\n \"private\": true\n}`\n---\n\n\n \n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-wrap.astro", + "content": "---\nimport {\n CodeBlock,\n CodeBlockActions,\n CodeBlockContent,\n CodeBlockCopyButton,\n CodeBlockFooter,\n} from \"@/components/ui/code-block\"\n\nconst code =\n \"A long explanation can wrap inside a code block without making the surrounding article or the page scroll horizontally.\"\n---\n\n\n \n \n \n \n Plain text, with line wrapping.\n\n", + "type": "registry:component" + } + ], + "docs": "https://ui.full.dev/components/code-block/", + "type": "registry:example" +} \ No newline at end of file diff --git a/public/r/styles/base-vega/code-block.json b/public/r/styles/base-vega/code-block.json new file mode 100644 index 000000000..2380b837e --- /dev/null +++ b/public/r/styles/base-vega/code-block.json @@ -0,0 +1,65 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "code-block", + "title": "Code Block", + "description": "Code and plain-text snippets with copy actions, line numbers and highlighted lines.", + "dependencies": [ + "@lucide/astro", + "class-variance-authority" + ], + "registryDependencies": [ + "@fulldev/button" + ], + "files": [ + { + "path": "src/components/ui/code-block/code-block-actions.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\nconst { class: className, ...props } = Astro.props\n---\n\n&]:m-0 [[data-slot=code-block]>&]:top-3 [[data-slot=code-block]>&]:end-3 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:top-2 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:end-2 [[data-slot=code-block]>&]:*:[button]:bg-background [[data-slot=code-block]>&]:*:[button]:ring-1 [[data-slot=code-block]>&]:*:[button]:ring-foreground/10 ms-auto flex shrink-0 items-center [[data-slot=code-block]>&]:absolute [[data-slot=code-block]>&]:z-10 [[data-slot=code-block]>&]:opacity-0 [[data-slot=code-block]>&]:transition-opacity [[data-slot=code-block]>&]:group-focus-within/code-block:opacity-100 [[data-slot=code-block]>&]:group-hover/code-block:opacity-100 [[data-slot=code-block]>&]:pointer-coarse:opacity-100\",\n className\n )}\n {...props}\n>\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-content.astro", + "content": "---\n/* eslint-disable astro/jsx-a11y/no-noninteractive-tabindex -- Focusable code supports keyboard scrolling, as in shadcn/ui. */\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\nimport CodeBlockLine from \"./code-block-line.astro\"\n\ntype Props = HTMLAttributes<\"pre\"> & {\n code?: string\n wrap?: boolean\n lineNumbers?: boolean\n startLine?: number\n}\n\nconst {\n class: className,\n code,\n wrap = false,\n lineNumbers = false,\n startLine = 1,\n style,\n ...props\n} = Astro.props\n\nconst contentStyle =\n typeof style === \"string\"\n ? `counter-reset: line ${startLine - 1}; ${style}`\n : { counterReset: `line ${startLine - 1}`, ...style }\n---\n\n{code !== undefined ? lineNumbers ? code.replace(/\\n$/, \"\").split(\"\\n\").map((line) => {line}) : code : }\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-copy-button.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport CheckIcon from \"@lucide/astro/icons/check\"\nimport CopyIcon from \"@lucide/astro/icons/copy\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button, type ButtonVariantProps } from \"@/components/ui/button\"\n\ntype Props = Omit, \"value\" | \"type\"> &\n ButtonVariantProps & {\n value: string\n copyLabel?: string\n copiedLabel?: string\n errorLabel?: string\n }\n\nconst {\n class: className,\n value,\n variant = \"ghost\",\n size = \"icon-xs\",\n copyLabel = \"Copy\",\n copiedLabel = \"Copied\",\n errorLabel = \"Could not copy\",\n ...props\n} = Astro.props\n---\n\n\n \n \n\n\n\n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-footer.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\nconst { class: className, ...props } = Astro.props\n---\n\n\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-header.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\nconst { class: className, ...props } = Astro.props\n---\n\n[data-slot=code-block-title]]:min-w-0\",\n className\n )}\n {...props}\n>\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-line.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 \"-mx-4 px-4 in-data-numbered:gap-x-3 before:min-w-6 before:text-end before:text-muted-foreground after:start-1 after:text-muted-foreground group-data-[size=sm]/code-block:-mx-3 group-data-[size=sm]/code-block:px-3 relative block min-h-lh before:select-none after:absolute after:top-0 after:select-none in-data-numbered:col-span-2 in-data-numbered:grid in-data-numbered:grid-cols-subgrid in-data-numbered:[counter-increment:line] in-data-numbered:before:content-[counter(line)] in-data-numbered:supports-[content:counter(line)_/_'']:before:content-[counter(line)_/_'']\",\n {\n variants: {\n variant: {\n default: \"\",\n added: \"bg-muted after:content-['+']\",\n removed: \"bg-destructive/10 after:text-destructive after:content-['−']\",\n highlighted: \"bg-muted\",\n },\n },\n defaultVariants: { variant: \"default\" },\n }\n)\n\ntype Props = HTMLAttributes<\"span\"> & VariantProps\nconst { class: className, variant = \"default\", ...props } = Astro.props\n---\n\n\n \n \n {\"\\n\"}\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-title.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\nconst { class: className, ...props } = Astro.props\n---\n\n\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block.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 \"rounded-lg text-sm data-[size=sm]:text-xs has-[>[data-slot=code-block-content]:focus-visible]:ring-3 has-[>[data-slot=code-block-content]:focus-visible]:ring-ring/50 group/code-block relative flex w-full min-w-0 flex-col overflow-hidden\",\n {\n variants: {\n variant: {\n default: \"border border-input text-foreground dark:bg-input/30 has-[>[data-slot=code-block-content]:focus-visible]:border-ring\",\n destructive: \"border border-destructive/30 text-destructive dark:border-destructive/40\",\n },\n },\n defaultVariants: { variant: \"default\" },\n }\n)\n\ntype Props = HTMLAttributes<\"div\"> &\n VariantProps & {\n size?: \"default\" | \"sm\"\n }\n\nconst {\n class: className,\n variant = \"default\",\n size = \"default\",\n ...props\n} = Astro.props\n---\n\n\n \n\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/index.ts", + "content": "export { default as CodeBlock } from \"./code-block.astro\"\nexport { default as CodeBlockHeader } from \"./code-block-header.astro\"\nexport { default as CodeBlockTitle } from \"./code-block-title.astro\"\nexport { default as CodeBlockActions } from \"./code-block-actions.astro\"\nexport { default as CodeBlockCopyButton } from \"./code-block-copy-button.astro\"\nexport { default as CodeBlockContent } from \"./code-block-content.astro\"\nexport { default as CodeBlockLine } from \"./code-block-line.astro\"\nexport { default as CodeBlockFooter } from \"./code-block-footer.astro\"\n", + "type": "registry:ui" + } + ], + "docs": "https://ui.full.dev/components/code-block/", + "categories": [ + "ui" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/public/r/styles/base-vega/collapsible-examples.json b/public/r/styles/base-vega/collapsible-examples.json index 56b092a2f..7d0f08173 100644 --- a/public/r/styles/base-vega/collapsible-examples.json +++ b/public/r/styles/base-vega/collapsible-examples.json @@ -25,6 +25,11 @@ "content": "---\nimport ChevronsUpDown from \"@lucide/astro/icons/chevrons-up-down\"\n\nimport { buttonVariants } from \"@/components/ui/button\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/components/ui/collapsible\"\n---\n\n\n
\n

Order #4189

\n \n \n Toggle details\n \n
\n
\n Status\n Shipped\n
\n \n
\n

Shipping address

\n

100 Market St, San Francisco

\n
\n
\n

Items

\n

2x Studio Headphones

\n
\n
\n
\n", "type": "registry:component" }, + { + "path": "src/components/examples/collapsible/collapsible-dismissal.astro", + "content": "---\nimport ChevronDownIcon from \"@lucide/astro/icons/chevron-down\"\n\nimport { buttonVariants } from \"@/components/ui/button\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/components/ui/collapsible\"\n---\n\n
\n \n \n Browse documentation\n \n \n \n \n \n \n

\n Open the panel, then press Escape or click outside it to close.\n

\n
\n", + "type": "registry:component" + }, { "path": "src/components/examples/collapsible/collapsible-file-tree.astro", "content": "---\nimport ChevronRightIcon from \"@lucide/astro/icons/chevron-right\"\nimport FileIcon from \"@lucide/astro/icons/file\"\nimport FolderIcon from \"@lucide/astro/icons/folder\"\n\nimport { Button, buttonVariants } from \"@/components/ui/button\"\nimport { Card, CardContent, CardHeader } from \"@/components/ui/card\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/components/ui/collapsible\"\nimport { Tabs, TabsList, TabsTrigger } from \"@/components/ui/tabs\"\n\ntype FileTreeItem = { name: string } | { name: string; items: FileTreeItem[] }\n\nconst fileTree: FileTreeItem[] = [\n {\n name: \"components\",\n items: [\n {\n name: \"ui\",\n items: [\n { name: \"button.tsx\" },\n { name: \"card.tsx\" },\n { name: \"dialog.tsx\" },\n { name: \"input.tsx\" },\n { name: \"select.tsx\" },\n { name: \"table.tsx\" },\n ],\n },\n { name: \"login-form.tsx\" },\n { name: \"register-form.tsx\" },\n ],\n },\n {\n name: \"lib\",\n items: [{ name: \"utils.ts\" }, { name: \"cn.ts\" }, { name: \"api.ts\" }],\n },\n {\n name: \"hooks\",\n items: [\n { name: \"use-media-query.ts\" },\n { name: \"use-debounce.ts\" },\n { name: \"use-local-storage.ts\" },\n ],\n },\n {\n name: \"types\",\n items: [{ name: \"index.d.ts\" }, { name: \"api.d.ts\" }],\n },\n {\n name: \"public\",\n items: [{ name: \"favicon.ico\" }, { name: \"logo.svg\" }, { name: \"images\" }],\n },\n { name: \"app.tsx\" },\n { name: \"layout.tsx\" },\n { name: \"globals.css\" },\n { name: \"package.json\" },\n { name: \"tsconfig.json\" },\n { name: \"README.md\" },\n { name: \".gitignore\" },\n]\n\n// Renders the card, or one tree level when Astro.self passes `items`.\nconst { items } = Astro.props as { items?: FileTreeItem[] }\n---\n\n{items ? (\n items.map((fileItem) =>\n \"items\" in fileItem ? (\n \n \n \n \n {fileItem.name}\n \n \n
\n \n
\n
\n
\n ) : (\n \n \n {fileItem.name}\n \n )\n )\n) : (\n \n \n \n \n Explorer\n Outline\n \n \n \n \n
\n \n
\n
\n
\n)}\n", diff --git a/public/r/styles/base-vega/collapsible.json b/public/r/styles/base-vega/collapsible.json index 51460f6ff..dd0c03d41 100644 --- a/public/r/styles/base-vega/collapsible.json +++ b/public/r/styles/base-vega/collapsible.json @@ -4,12 +4,12 @@ "title": "Collapsible", "description": "An interactive component which expands/collapses a panel.", "dependencies": [ - "@data-slot/collapsible@^1.0.2" + "@data-slot/collapsible@^1.1.2" ], "files": [ { "path": "src/components/ui/collapsible/collapsible.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\"> & {\n // \"li\" makes a list item the collapsible, such as a sidebar menu item.\n as?: \"div\" | \"li\"\n defaultOpen?: boolean\n hiddenUntilFound?: boolean\n}\n\nconst {\n as: Tag = \"div\",\n class: className,\n defaultOpen,\n hiddenUntilFound,\n ...props\n} = Astro.props\n---\n\n\n \n\n\n\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\"> & {\n // \"li\" makes a list item the collapsible, such as a sidebar menu item.\n as?: \"div\" | \"li\"\n defaultOpen?: boolean\n hiddenUntilFound?: boolean\n closeOnEscape?: boolean\n closeOnClickOutside?: boolean\n}\n\nconst {\n as: Tag = \"div\",\n class: className,\n defaultOpen,\n hiddenUntilFound,\n closeOnEscape,\n closeOnClickOutside,\n ...props\n} = Astro.props\n---\n\n\n \n\n\n\n", "type": "registry:ui" }, { diff --git a/public/r/styles/base-vega/combobox.json b/public/r/styles/base-vega/combobox.json index 7ab90739f..0eb7db5e7 100644 --- a/public/r/styles/base-vega/combobox.json +++ b/public/r/styles/base-vega/combobox.json @@ -4,8 +4,8 @@ "title": "Combobox", "description": "Autocomplete input with a list of suggestions.", "dependencies": [ - "@data-slot/combobox@^1.0.2", - "@data-slot/core@^1.0.2", + "@data-slot/combobox@^1.1.2", + "@data-slot/core@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -34,7 +34,7 @@ }, { "path": "src/components/ui/combobox/combobox-input.astro", - "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport XIcon from \"@lucide/astro/icons/x\"\n\nimport { cn } from \"@/lib/utils\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n} from \"@/components/ui/input-group\"\n\nimport ComboboxTrigger from \"./combobox-trigger.astro\"\n\ntype Props = HTMLAttributes<\"input\"> & {\n showTrigger?: boolean\n showClear?: boolean\n}\n\nconst {\n class: className,\n type = \"text\",\n disabled = false,\n showTrigger = true,\n showClear = false,\n ...props\n} = Astro.props\n---\n\n\n \n \n {showTrigger && (\n \n )}\n {showClear && (\n \n \n \n )}\n \n \n\n", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport XIcon from \"@lucide/astro/icons/x\"\n\nimport { cn } from \"@/lib/utils\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n} from \"@/components/ui/input-group\"\n\nimport ComboboxTrigger from \"./combobox-trigger.astro\"\n\ntype Props = HTMLAttributes<\"input\"> & {\n showTrigger?: boolean\n showClear?: boolean\n clearLabel?: string\n}\n\nconst {\n class: className,\n type = \"text\",\n disabled = false,\n showTrigger = true,\n showClear = false,\n clearLabel = \"Clear selection\",\n ...props\n} = Astro.props\n---\n\n\n \n \n {showTrigger && (\n \n )}\n {showClear && (\n \n \n \n )}\n \n \n\n", "type": "registry:ui" }, { diff --git a/public/r/styles/base-vega/command.json b/public/r/styles/base-vega/command.json index 4e92092ea..f664cd338 100644 --- a/public/r/styles/base-vega/command.json +++ b/public/r/styles/base-vega/command.json @@ -4,9 +4,9 @@ "title": "Command", "description": "Command menu for search and quick actions.", "dependencies": [ - "@data-slot/command@^1.0.2", + "@data-slot/command@^1.1.2", "@lucide/astro", - "@data-slot/core@^1.0.2" + "@data-slot/core@^1.1.2" ], "registryDependencies": [ "@fulldev/dialog" diff --git a/public/r/styles/base-vega/components.json b/public/r/styles/base-vega/components.json index 90872f412..e0f9f98bf 100644 --- a/public/r/styles/base-vega/components.json +++ b/public/r/styles/base-vega/components.json @@ -18,6 +18,7 @@ "@fulldev/card", "@fulldev/carousel", "@fulldev/checkbox", + "@fulldev/code-block", "@fulldev/collapsible", "@fulldev/combobox", "@fulldev/command", @@ -43,6 +44,7 @@ "@fulldev/pagination", "@fulldev/popover", "@fulldev/price", + "@fulldev/progress", "@fulldev/radio-group", "@fulldev/rating", "@fulldev/resizable", diff --git a/public/r/styles/base-vega/dialog.json b/public/r/styles/base-vega/dialog.json index a3e87d72e..42b73fa83 100644 --- a/public/r/styles/base-vega/dialog.json +++ b/public/r/styles/base-vega/dialog.json @@ -4,7 +4,7 @@ "title": "Dialog", "description": "A window overlaid on either the primary window or another dialog window, rendering the content underneath inert.", "dependencies": [ - "@data-slot/dialog@^1.0.2", + "@data-slot/dialog@^1.1.2", "@lucide/astro" ], "registryDependencies": [ diff --git a/public/r/styles/base-vega/drawer.json b/public/r/styles/base-vega/drawer.json index d4186a27d..343339cfc 100644 --- a/public/r/styles/base-vega/drawer.json +++ b/public/r/styles/base-vega/drawer.json @@ -4,7 +4,7 @@ "title": "Drawer", "description": "A drawer component that slides in from any edge of the screen.", "dependencies": [ - "@data-slot/drawer@^1.0.2" + "@data-slot/drawer@^1.1.2" ], "registryDependencies": [ "@fulldev/button" diff --git a/public/r/styles/base-vega/dropdown-menu.json b/public/r/styles/base-vega/dropdown-menu.json index 0adc16241..4495930c2 100644 --- a/public/r/styles/base-vega/dropdown-menu.json +++ b/public/r/styles/base-vega/dropdown-menu.json @@ -4,7 +4,7 @@ "title": "Dropdown Menu", "description": "Displays a menu to the user, such as a set of actions or functions, triggered by a button.", "dependencies": [ - "@data-slot/dropdown-menu@^1.0.2", + "@data-slot/dropdown-menu@^1.1.2", "@lucide/astro" ], "files": [ diff --git a/public/r/styles/base-vega/hover-card.json b/public/r/styles/base-vega/hover-card.json index 511766625..e1e8b21ac 100644 --- a/public/r/styles/base-vega/hover-card.json +++ b/public/r/styles/base-vega/hover-card.json @@ -4,8 +4,8 @@ "title": "Hover Card", "description": "For sighted users to preview content available behind a link.", "dependencies": [ - "@data-slot/hover-card@^1.0.2", - "@data-slot/core@^1.0.2" + "@data-slot/hover-card@^1.1.2", + "@data-slot/core@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-vega/navigation-menu.json b/public/r/styles/base-vega/navigation-menu.json index 5e76cdea7..3e2bce997 100644 --- a/public/r/styles/base-vega/navigation-menu.json +++ b/public/r/styles/base-vega/navigation-menu.json @@ -4,7 +4,7 @@ "title": "Navigation Menu", "description": "A collection of links for navigating websites.", "dependencies": [ - "@data-slot/navigation-menu@^1.0.2", + "@data-slot/navigation-menu@^1.1.2", "@lucide/astro" ], "files": [ diff --git a/public/r/styles/base-vega/popover.json b/public/r/styles/base-vega/popover.json index 20520698b..6572d0fce 100644 --- a/public/r/styles/base-vega/popover.json +++ b/public/r/styles/base-vega/popover.json @@ -4,7 +4,7 @@ "title": "Popover", "description": "Displays rich content in a floating layer, triggered by a button.", "dependencies": [ - "@data-slot/popover@^1.0.2" + "@data-slot/popover@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-vega/progress-examples.json b/public/r/styles/base-vega/progress-examples.json new file mode 100644 index 000000000..4fb614b85 --- /dev/null +++ b/public/r/styles/base-vega/progress-examples.json @@ -0,0 +1,33 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "progress-examples", + "title": "Progress examples", + "description": "The examples from the shadcn/ui Progress docs.", + "registryDependencies": [ + "@fulldev/progress" + ], + "files": [ + { + "path": "src/components/examples/progress/progress-custom-max.astro", + "content": "---\nimport { Progress } from \"@/components/ui/progress\"\n---\n\n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-demo.astro", + "content": "---\nimport { Progress } from \"@/components/ui/progress\"\n---\n\n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-indeterminate.astro", + "content": "---\nimport { Progress } from \"@/components/ui/progress\"\n---\n\n\n", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-rtl.astro", + "content": "---\nimport { Progress } from \"@/components/ui/progress\"\n---\n\n\n", + "type": "registry:component" + } + ], + "docs": "https://ui.full.dev/components/progress/", + "type": "registry:example" +} \ No newline at end of file diff --git a/public/r/styles/base-vega/progress.json b/public/r/styles/base-vega/progress.json new file mode 100644 index 000000000..8cd73e59a --- /dev/null +++ b/public/r/styles/base-vega/progress.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "progress", + "title": "Progress", + "description": "Shows how much of a task or sequence is complete.", + "files": [ + { + "path": "src/components/ui/progress/index.ts", + "content": "export { default as Progress } from \"./progress.astro\"\n", + "type": "registry:ui" + }, + { + "path": "src/components/ui/progress/progress.astro", + "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\"> & {\n value?: number | null\n max?: number\n label?: string\n showValue?: boolean\n}\n\nconst {\n class: className,\n value,\n max = 100,\n label,\n showValue = false,\n \"aria-label\": ariaLabel = label || \"Progress\",\n \"aria-labelledby\": ariaLabelledby,\n \"aria-valuetext\": ariaValueText,\n ...props\n} = Astro.props\n\nconst resolvedMax = Number.isFinite(max) && max > 0 ? max : 100\nconst resolvedValue =\n typeof value === \"number\" && Number.isFinite(value)\n ? Math.min(resolvedMax, Math.max(0, value))\n : undefined\nconst percentage =\n resolvedValue === undefined ? undefined : (resolvedValue / resolvedMax) * 100\nconst stateAttributes = {\n \"data-indeterminate\": resolvedValue === undefined ? \"\" : undefined,\n \"data-complete\": resolvedValue === resolvedMax ? \"\" : undefined,\n \"data-progressing\":\n resolvedValue !== undefined && resolvedValue < resolvedMax ? \"\" : undefined,\n}\n---\n\n\n \n {label && (\n \n {label}\n \n )}\n {showValue && percentage !== undefined && (\n \n {Math.round(percentage)}%\n \n )}\n \n \n \n \n\n", + "type": "registry:ui" + } + ], + "docs": "https://ui.full.dev/components/progress/", + "categories": [ + "ui" + ], + "type": "registry:ui" +} \ No newline at end of file diff --git a/public/r/styles/base-vega/radio-group.json b/public/r/styles/base-vega/radio-group.json index 00e4e9800..65f1f7199 100644 --- a/public/r/styles/base-vega/radio-group.json +++ b/public/r/styles/base-vega/radio-group.json @@ -4,7 +4,7 @@ "title": "Radio Group", "description": "A set of checkable buttons, known as radio buttons, where no more than one of the buttons can be checked at a time.", "dependencies": [ - "@data-slot/radio-group@^1.0.2" + "@data-slot/radio-group@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-vega/registry.json b/public/r/styles/base-vega/registry.json index f2e121aa9..fadea2621 100644 --- a/public/r/styles/base-vega/registry.json +++ b/public/r/styles/base-vega/registry.json @@ -13,7 +13,7 @@ ], "docs": "https://ui.full.dev/components/accordion/", "dependencies": [ - "@data-slot/accordion@^1.0.2", + "@data-slot/accordion@^1.1.2", "@lucide/astro" ], "files": [ @@ -81,7 +81,7 @@ ], "docs": "https://ui.full.dev/components/alert-dialog/", "dependencies": [ - "@data-slot/alert-dialog@^1.0.2" + "@data-slot/alert-dialog@^1.1.2" ], "registryDependencies": [ "@fulldev/button" @@ -367,6 +367,61 @@ } ] }, + { + "name": "code-block", + "type": "registry:ui", + "title": "Code Block", + "description": "Code and plain-text snippets with copy actions, line numbers and highlighted lines.", + "categories": [ + "ui" + ], + "docs": "https://ui.full.dev/components/code-block/", + "dependencies": [ + "@lucide/astro", + "class-variance-authority" + ], + "registryDependencies": [ + "@fulldev/button" + ], + "files": [ + { + "path": "src/components/ui/code-block/code-block-actions.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-content.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-copy-button.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-footer.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-header.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-line.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-title.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/index.ts", + "type": "registry:ui" + } + ] + }, { "name": "collapsible", "type": "registry:ui", @@ -377,7 +432,7 @@ ], "docs": "https://ui.full.dev/components/collapsible/", "dependencies": [ - "@data-slot/collapsible@^1.0.2" + "@data-slot/collapsible@^1.1.2" ], "files": [ { @@ -408,8 +463,8 @@ ], "docs": "https://ui.full.dev/components/combobox/", "dependencies": [ - "@data-slot/combobox@^1.0.2", - "@data-slot/core@^1.0.2", + "@data-slot/combobox@^1.1.2", + "@data-slot/core@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -476,9 +531,9 @@ ], "docs": "https://ui.full.dev/components/command/", "dependencies": [ - "@data-slot/command@^1.0.2", + "@data-slot/command@^1.1.2", "@lucide/astro", - "@data-slot/core@^1.0.2" + "@data-slot/core@^1.1.2" ], "registryDependencies": [ "@fulldev/dialog" @@ -536,7 +591,7 @@ ], "docs": "https://ui.full.dev/components/dialog/", "dependencies": [ - "@data-slot/dialog@^1.0.2", + "@data-slot/dialog@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -599,7 +654,7 @@ ], "docs": "https://ui.full.dev/components/dropdown-menu/", "dependencies": [ - "@data-slot/dropdown-menu@^1.0.2", + "@data-slot/dropdown-menu@^1.1.2", "@lucide/astro" ], "files": [ @@ -818,8 +873,8 @@ ], "docs": "https://ui.full.dev/components/hover-card/", "dependencies": [ - "@data-slot/hover-card@^1.0.2", - "@data-slot/core@^1.0.2" + "@data-slot/hover-card@^1.1.2", + "@data-slot/core@^1.1.2" ], "files": [ { @@ -1183,7 +1238,7 @@ ], "docs": "https://ui.full.dev/components/navigation-menu/", "dependencies": [ - "@data-slot/navigation-menu@^1.0.2", + "@data-slot/navigation-menu@^1.1.2", "@lucide/astro" ], "files": [ @@ -1270,7 +1325,7 @@ ], "docs": "https://ui.full.dev/components/popover/", "dependencies": [ - "@data-slot/popover@^1.0.2" + "@data-slot/popover@^1.1.2" ], "files": [ { @@ -1335,6 +1390,26 @@ } ] }, + { + "name": "progress", + "type": "registry:ui", + "title": "Progress", + "description": "Shows how much of a task or sequence is complete.", + "categories": [ + "ui" + ], + "docs": "https://ui.full.dev/components/progress/", + "files": [ + { + "path": "src/components/ui/progress/index.ts", + "type": "registry:ui" + }, + { + "path": "src/components/ui/progress/progress.astro", + "type": "registry:ui" + } + ] + }, { "name": "radio-group", "type": "registry:ui", @@ -1345,7 +1420,7 @@ ], "docs": "https://ui.full.dev/components/radio-group/", "dependencies": [ - "@data-slot/radio-group@^1.0.2" + "@data-slot/radio-group@^1.1.2" ], "files": [ { @@ -1395,7 +1470,7 @@ ], "docs": "https://ui.full.dev/components/select/", "dependencies": [ - "@data-slot/select@^1.0.2", + "@data-slot/select@^1.1.2", "@lucide/astro" ], "files": [ @@ -1499,7 +1574,7 @@ ], "docs": "https://ui.full.dev/components/sheet/", "dependencies": [ - "@data-slot/dialog@^1.0.2", + "@data-slot/dialog@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -1555,7 +1630,7 @@ ], "docs": "https://ui.full.dev/components/sidebar/", "dependencies": [ - "@data-slot/tooltip@^1.0.2", + "@data-slot/tooltip@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -1676,7 +1751,7 @@ ], "docs": "https://ui.full.dev/components/slider/", "dependencies": [ - "@data-slot/slider@^1.0.2" + "@data-slot/slider@^1.1.2" ], "files": [ { @@ -1742,7 +1817,7 @@ ], "docs": "https://ui.full.dev/components/switch/", "dependencies": [ - "@data-slot/switch@^1.0.2" + "@data-slot/switch@^1.1.2" ], "files": [ { @@ -1813,7 +1888,7 @@ ], "docs": "https://ui.full.dev/components/tabs/", "dependencies": [ - "@data-slot/tabs@^1.0.2" + "@data-slot/tabs@^1.1.2" ], "files": [ { @@ -1888,7 +1963,7 @@ ], "docs": "https://ui.full.dev/components/toggle/", "dependencies": [ - "@data-slot/toggle@^1.0.2" + "@data-slot/toggle@^1.1.2" ], "files": [ { @@ -1935,7 +2010,7 @@ ], "docs": "https://ui.full.dev/components/tooltip/", "dependencies": [ - "@data-slot/tooltip@^1.0.2" + "@data-slot/tooltip@^1.1.2" ], "files": [ { @@ -2070,7 +2145,7 @@ ], "docs": "https://ui.full.dev/components/drawer/", "dependencies": [ - "@data-slot/drawer@^1.0.2" + "@data-slot/drawer@^1.1.2" ], "registryDependencies": [ "@fulldev/button" @@ -2160,7 +2235,7 @@ ], "docs": "https://ui.full.dev/components/resizable/", "dependencies": [ - "@data-slot/resizable@^1.0.2" + "@data-slot/resizable@^1.1.2" ], "files": [ { @@ -2191,7 +2266,7 @@ ], "docs": "https://ui.full.dev/components/toast/", "dependencies": [ - "@data-slot/toast@^1.0.2", + "@data-slot/toast@^1.1.2", "@lucide/astro" ], "registryDependencies": [ @@ -2258,7 +2333,7 @@ ], "docs": "https://ui.full.dev/components/toggle-group/", "dependencies": [ - "@data-slot/toggle-group@^1.0.2" + "@data-slot/toggle-group@^1.1.2" ], "registryDependencies": [ "@fulldev/toggle" @@ -2459,6 +2534,7 @@ "@fulldev/card", "@fulldev/carousel", "@fulldev/checkbox", + "@fulldev/code-block", "@fulldev/collapsible", "@fulldev/combobox", "@fulldev/command", @@ -2484,6 +2560,7 @@ "@fulldev/pagination", "@fulldev/popover", "@fulldev/price", + "@fulldev/progress", "@fulldev/radio-group", "@fulldev/rating", "@fulldev/resizable", @@ -5359,6 +5436,34 @@ } ] }, + { + "name": "code-block-examples", + "type": "registry:example", + "title": "Code Block examples", + "description": "The examples from the shadcn/ui Code Block docs.", + "docs": "https://ui.full.dev/components/code-block/", + "registryDependencies": [ + "@fulldev/code-block" + ], + "files": [ + { + "path": "src/components/examples/code-block/code-block-demo.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-lines.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-numbered.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-wrap.astro", + "type": "registry:component" + } + ] + }, { "name": "collapsible-examples", "type": "registry:example", @@ -5385,6 +5490,10 @@ "path": "src/components/examples/collapsible/collapsible-demo.astro", "type": "registry:component" }, + { + "path": "src/components/examples/collapsible/collapsible-dismissal.astro", + "type": "registry:component" + }, { "path": "src/components/examples/collapsible/collapsible-file-tree.astro", "type": "registry:component" @@ -6185,6 +6294,34 @@ } ] }, + { + "name": "progress-examples", + "type": "registry:example", + "title": "Progress examples", + "description": "The examples from the shadcn/ui Progress docs.", + "docs": "https://ui.full.dev/components/progress/", + "registryDependencies": [ + "@fulldev/progress" + ], + "files": [ + { + "path": "src/components/examples/progress/progress-custom-max.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-demo.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-indeterminate.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-rtl.astro", + "type": "registry:component" + } + ] + }, { "name": "radio-group-examples", "type": "registry:example", diff --git a/public/r/styles/base-vega/resizable.json b/public/r/styles/base-vega/resizable.json index 5573e780f..b58e4687f 100644 --- a/public/r/styles/base-vega/resizable.json +++ b/public/r/styles/base-vega/resizable.json @@ -4,7 +4,7 @@ "title": "Resizable", "description": "Accessible panel groups with pointer and keyboard resizing.", "dependencies": [ - "@data-slot/resizable@^1.0.2" + "@data-slot/resizable@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-vega/select.json b/public/r/styles/base-vega/select.json index 1b912dd29..197d3ef5a 100644 --- a/public/r/styles/base-vega/select.json +++ b/public/r/styles/base-vega/select.json @@ -4,7 +4,7 @@ "title": "Select", "description": "Displays a list of options for the user to pick from, triggered by a button.", "dependencies": [ - "@data-slot/select@^1.0.2", + "@data-slot/select@^1.1.2", "@lucide/astro" ], "files": [ diff --git a/public/r/styles/base-vega/sheet.json b/public/r/styles/base-vega/sheet.json index 90db5f63a..87a73acf8 100644 --- a/public/r/styles/base-vega/sheet.json +++ b/public/r/styles/base-vega/sheet.json @@ -4,7 +4,7 @@ "title": "Sheet", "description": "A sliding panel component that appears from the edge of the screen.", "dependencies": [ - "@data-slot/dialog@^1.0.2", + "@data-slot/dialog@^1.1.2", "@lucide/astro" ], "registryDependencies": [ diff --git a/public/r/styles/base-vega/sidebar.json b/public/r/styles/base-vega/sidebar.json index 72477f7b8..92c526d21 100644 --- a/public/r/styles/base-vega/sidebar.json +++ b/public/r/styles/base-vega/sidebar.json @@ -4,7 +4,7 @@ "title": "Sidebar", "description": "A composable, themeable, and customizable Astro sidebar component.", "dependencies": [ - "@data-slot/tooltip@^1.0.2", + "@data-slot/tooltip@^1.1.2", "@lucide/astro" ], "registryDependencies": [ diff --git a/public/r/styles/base-vega/slider.json b/public/r/styles/base-vega/slider.json index 1994ca5a7..8de2e4374 100644 --- a/public/r/styles/base-vega/slider.json +++ b/public/r/styles/base-vega/slider.json @@ -4,7 +4,7 @@ "title": "Slider", "description": "An input where the user selects a value from within a given range.", "dependencies": [ - "@data-slot/slider@^1.0.2" + "@data-slot/slider@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-vega/switch.json b/public/r/styles/base-vega/switch.json index da3cd48f3..fa3b70325 100644 --- a/public/r/styles/base-vega/switch.json +++ b/public/r/styles/base-vega/switch.json @@ -4,7 +4,7 @@ "title": "Switch", "description": "A control that allows the user to toggle between checked and not checked.", "dependencies": [ - "@data-slot/switch@^1.0.2" + "@data-slot/switch@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-vega/tabs.json b/public/r/styles/base-vega/tabs.json index 4841a765a..124cab0a4 100644 --- a/public/r/styles/base-vega/tabs.json +++ b/public/r/styles/base-vega/tabs.json @@ -4,7 +4,7 @@ "title": "Tabs", "description": "A set of layered sections of content, known as tabs, that display one panel of content at a time.", "dependencies": [ - "@data-slot/tabs@^1.0.2" + "@data-slot/tabs@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-vega/toast.json b/public/r/styles/base-vega/toast.json index 19f5528dc..20df8ad1d 100644 --- a/public/r/styles/base-vega/toast.json +++ b/public/r/styles/base-vega/toast.json @@ -4,7 +4,7 @@ "title": "Toast", "description": "A brief notification that appears without interrupting the user.", "dependencies": [ - "@data-slot/toast@^1.0.2", + "@data-slot/toast@^1.1.2", "@lucide/astro" ], "registryDependencies": [ diff --git a/public/r/styles/base-vega/toggle-group.json b/public/r/styles/base-vega/toggle-group.json index 05a739f9d..216166a8e 100644 --- a/public/r/styles/base-vega/toggle-group.json +++ b/public/r/styles/base-vega/toggle-group.json @@ -4,7 +4,7 @@ "title": "Toggle Group", "description": "A set of two-state buttons that can be toggled independently or as a single choice.", "dependencies": [ - "@data-slot/toggle-group@^1.0.2" + "@data-slot/toggle-group@^1.1.2" ], "registryDependencies": [ "@fulldev/toggle" diff --git a/public/r/styles/base-vega/toggle.json b/public/r/styles/base-vega/toggle.json index 027669e1c..3b3118847 100644 --- a/public/r/styles/base-vega/toggle.json +++ b/public/r/styles/base-vega/toggle.json @@ -4,7 +4,7 @@ "title": "Toggle", "description": "A two-state button that can be either on or off.", "dependencies": [ - "@data-slot/toggle@^1.0.2" + "@data-slot/toggle@^1.1.2" ], "files": [ { diff --git a/public/r/styles/base-vega/tooltip.json b/public/r/styles/base-vega/tooltip.json index 5eb0a8ffc..9d1754e23 100644 --- a/public/r/styles/base-vega/tooltip.json +++ b/public/r/styles/base-vega/tooltip.json @@ -4,7 +4,7 @@ "title": "Tooltip", "description": "Displays contextual information when a user hovers or focuses a trigger.", "dependencies": [ - "@data-slot/tooltip@^1.0.2" + "@data-slot/tooltip@^1.1.2" ], "files": [ { diff --git a/public/r/switch.json b/public/r/switch.json index da3cd48f3..fa3b70325 100644 --- a/public/r/switch.json +++ b/public/r/switch.json @@ -4,7 +4,7 @@ "title": "Switch", "description": "A control that allows the user to toggle between checked and not checked.", "dependencies": [ - "@data-slot/switch@^1.0.2" + "@data-slot/switch@^1.1.2" ], "files": [ { diff --git a/public/r/tabs.json b/public/r/tabs.json index 4841a765a..124cab0a4 100644 --- a/public/r/tabs.json +++ b/public/r/tabs.json @@ -4,7 +4,7 @@ "title": "Tabs", "description": "A set of layered sections of content, known as tabs, that display one panel of content at a time.", "dependencies": [ - "@data-slot/tabs@^1.0.2" + "@data-slot/tabs@^1.1.2" ], "files": [ { diff --git a/public/r/toast.json b/public/r/toast.json index 19f5528dc..20df8ad1d 100644 --- a/public/r/toast.json +++ b/public/r/toast.json @@ -4,7 +4,7 @@ "title": "Toast", "description": "A brief notification that appears without interrupting the user.", "dependencies": [ - "@data-slot/toast@^1.0.2", + "@data-slot/toast@^1.1.2", "@lucide/astro" ], "registryDependencies": [ diff --git a/public/r/toggle-group.json b/public/r/toggle-group.json index 05a739f9d..216166a8e 100644 --- a/public/r/toggle-group.json +++ b/public/r/toggle-group.json @@ -4,7 +4,7 @@ "title": "Toggle Group", "description": "A set of two-state buttons that can be toggled independently or as a single choice.", "dependencies": [ - "@data-slot/toggle-group@^1.0.2" + "@data-slot/toggle-group@^1.1.2" ], "registryDependencies": [ "@fulldev/toggle" diff --git a/public/r/toggle.json b/public/r/toggle.json index 027669e1c..3b3118847 100644 --- a/public/r/toggle.json +++ b/public/r/toggle.json @@ -4,7 +4,7 @@ "title": "Toggle", "description": "A two-state button that can be either on or off.", "dependencies": [ - "@data-slot/toggle@^1.0.2" + "@data-slot/toggle@^1.1.2" ], "files": [ { diff --git a/public/r/tooltip.json b/public/r/tooltip.json index 5eb0a8ffc..9d1754e23 100644 --- a/public/r/tooltip.json +++ b/public/r/tooltip.json @@ -4,7 +4,7 @@ "title": "Tooltip", "description": "Displays contextual information when a user hovers or focuses a trigger.", "dependencies": [ - "@data-slot/tooltip@^1.0.2" + "@data-slot/tooltip@^1.1.2" ], "files": [ { diff --git a/react/package.json b/react/package.json index c4fabfb25..8274c8212 100644 --- a/react/package.json +++ b/react/package.json @@ -8,7 +8,7 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@base-ui/react": "^1.8.0", + "@base-ui/react": "^1.9.0", "class-variance-authority": "^0.7.1", "cmdk": "^1.1.1", "cn": "^0.4.0", diff --git a/registry.json b/registry.json index 59994f1bb..79cf8ebe8 100644 --- a/registry.json +++ b/registry.json @@ -10,7 +10,7 @@ "description": "A vertically stacked set of interactive headings that each reveal a section of content.", "categories": ["ui"], "docs": "https://ui.full.dev/components/accordion/", - "dependencies": ["@data-slot/accordion@^1.0.2", "@lucide/astro"], + "dependencies": ["@data-slot/accordion@^1.1.2", "@lucide/astro"], "files": [ { "path": "src/components/ui/accordion/accordion.astro", @@ -71,7 +71,7 @@ "description": "A modal dialog for important confirmations that expects a response.", "categories": ["ui"], "docs": "https://ui.full.dev/components/alert-dialog/", - "dependencies": ["@data-slot/alert-dialog@^1.0.2"], + "dependencies": ["@data-slot/alert-dialog@^1.1.2"], "registryDependencies": ["@fulldev/button"], "files": [ { @@ -336,6 +336,54 @@ } ] }, + { + "name": "code-block", + "type": "registry:ui", + "title": "Code Block", + "description": "Code and plain-text snippets with copy actions, line numbers and highlighted lines.", + "categories": ["ui"], + "docs": "https://ui.full.dev/components/code-block/", + "dependencies": ["@lucide/astro", "class-variance-authority"], + "registryDependencies": ["@fulldev/button"], + "files": [ + { + "path": "src/components/ui/code-block/code-block-actions.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-content.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-copy-button.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-footer.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-header.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-line.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block-title.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/code-block.astro", + "type": "registry:ui" + }, + { + "path": "src/components/ui/code-block/index.ts", + "type": "registry:ui" + } + ] + }, { "name": "collapsible", "type": "registry:ui", @@ -343,7 +391,7 @@ "description": "An interactive component which expands/collapses a panel.", "categories": ["ui"], "docs": "https://ui.full.dev/components/collapsible/", - "dependencies": ["@data-slot/collapsible@^1.0.2"], + "dependencies": ["@data-slot/collapsible@^1.1.2"], "files": [ { "path": "src/components/ui/collapsible/collapsible.astro", @@ -371,8 +419,8 @@ "categories": ["ui"], "docs": "https://ui.full.dev/components/combobox/", "dependencies": [ - "@data-slot/combobox@^1.0.2", - "@data-slot/core@^1.0.2", + "@data-slot/combobox@^1.1.2", + "@data-slot/core@^1.1.2", "@lucide/astro" ], "registryDependencies": ["@fulldev/input-group"], @@ -435,9 +483,9 @@ "categories": ["ui"], "docs": "https://ui.full.dev/components/command/", "dependencies": [ - "@data-slot/command@^1.0.2", + "@data-slot/command@^1.1.2", "@lucide/astro", - "@data-slot/core@^1.0.2" + "@data-slot/core@^1.1.2" ], "registryDependencies": ["@fulldev/dialog"], "files": [ @@ -490,7 +538,7 @@ "description": "A window overlaid on either the primary window or another dialog window, rendering the content underneath inert.", "categories": ["ui"], "docs": "https://ui.full.dev/components/dialog/", - "dependencies": ["@data-slot/dialog@^1.0.2", "@lucide/astro"], + "dependencies": ["@data-slot/dialog@^1.1.2", "@lucide/astro"], "registryDependencies": ["@fulldev/button"], "files": [ { @@ -546,7 +594,7 @@ "description": "Displays a menu to the user, such as a set of actions or functions, triggered by a button.", "categories": ["ui"], "docs": "https://ui.full.dev/components/dropdown-menu/", - "dependencies": ["@data-slot/dropdown-menu@^1.0.2", "@lucide/astro"], + "dependencies": ["@data-slot/dropdown-menu@^1.1.2", "@lucide/astro"], "files": [ { "path": "src/components/ui/dropdown-menu/dropdown-menu.astro", @@ -745,8 +793,8 @@ "categories": ["ui"], "docs": "https://ui.full.dev/components/hover-card/", "dependencies": [ - "@data-slot/hover-card@^1.0.2", - "@data-slot/core@^1.0.2" + "@data-slot/hover-card@^1.1.2", + "@data-slot/core@^1.1.2" ], "files": [ { @@ -1071,7 +1119,7 @@ "description": "A collection of links for navigating websites.", "categories": ["ui"], "docs": "https://ui.full.dev/components/navigation-menu/", - "dependencies": ["@data-slot/navigation-menu@^1.0.2", "@lucide/astro"], + "dependencies": ["@data-slot/navigation-menu@^1.1.2", "@lucide/astro"], "files": [ { "path": "src/components/ui/navigation-menu/navigation-menu.astro", @@ -1149,7 +1197,7 @@ "description": "Displays rich content in a floating layer, triggered by a button.", "categories": ["ui"], "docs": "https://ui.full.dev/components/popover/", - "dependencies": ["@data-slot/popover@^1.0.2"], + "dependencies": ["@data-slot/popover@^1.1.2"], "files": [ { "path": "src/components/ui/popover/popover.astro", @@ -1211,6 +1259,24 @@ } ] }, + { + "name": "progress", + "type": "registry:ui", + "title": "Progress", + "description": "Shows how much of a task or sequence is complete.", + "categories": ["ui"], + "docs": "https://ui.full.dev/components/progress/", + "files": [ + { + "path": "src/components/ui/progress/index.ts", + "type": "registry:ui" + }, + { + "path": "src/components/ui/progress/progress.astro", + "type": "registry:ui" + } + ] + }, { "name": "radio-group", "type": "registry:ui", @@ -1218,7 +1284,7 @@ "description": "A set of checkable buttons, known as radio buttons, where no more than one of the buttons can be checked at a time.", "categories": ["ui"], "docs": "https://ui.full.dev/components/radio-group/", - "dependencies": ["@data-slot/radio-group@^1.0.2"], + "dependencies": ["@data-slot/radio-group@^1.1.2"], "files": [ { "path": "src/components/ui/radio-group/radio-group.astro", @@ -1260,7 +1326,7 @@ "description": "Displays a list of options for the user to pick from, triggered by a button.", "categories": ["ui"], "docs": "https://ui.full.dev/components/select/", - "dependencies": ["@data-slot/select@^1.0.2", "@lucide/astro"], + "dependencies": ["@data-slot/select@^1.1.2", "@lucide/astro"], "files": [ { "path": "src/components/ui/select/select.astro", @@ -1355,7 +1421,7 @@ "description": "A sliding panel component that appears from the edge of the screen.", "categories": ["ui"], "docs": "https://ui.full.dev/components/sheet/", - "dependencies": ["@data-slot/dialog@^1.0.2", "@lucide/astro"], + "dependencies": ["@data-slot/dialog@^1.1.2", "@lucide/astro"], "registryDependencies": ["@fulldev/button", "@fulldev/dialog"], "files": [ { @@ -1403,7 +1469,7 @@ "description": "A composable, themeable, and customizable Astro sidebar component.", "categories": ["ui"], "docs": "https://ui.full.dev/components/sidebar/", - "dependencies": ["@data-slot/tooltip@^1.0.2", "@lucide/astro"], + "dependencies": ["@data-slot/tooltip@^1.1.2", "@lucide/astro"], "registryDependencies": [ "@fulldev/layout", "@fulldev/button", @@ -1519,7 +1585,7 @@ "description": "An input where the user selects a value from within a given range.", "categories": ["ui"], "docs": "https://ui.full.dev/components/slider/", - "dependencies": ["@data-slot/slider@^1.0.2"], + "dependencies": ["@data-slot/slider@^1.1.2"], "files": [ { "path": "src/components/ui/slider/slider.astro", @@ -1575,7 +1641,7 @@ "description": "A control that allows the user to toggle between checked and not checked.", "categories": ["ui"], "docs": "https://ui.full.dev/components/switch/", - "dependencies": ["@data-slot/switch@^1.0.2"], + "dependencies": ["@data-slot/switch@^1.1.2"], "files": [ { "path": "src/components/ui/switch/switch.astro", @@ -1640,7 +1706,7 @@ "description": "A set of layered sections of content, known as tabs, that display one panel of content at a time.", "categories": ["ui"], "docs": "https://ui.full.dev/components/tabs/", - "dependencies": ["@data-slot/tabs@^1.0.2"], + "dependencies": ["@data-slot/tabs@^1.1.2"], "files": [ { "path": "src/components/ui/tabs/tabs.astro", @@ -1709,7 +1775,7 @@ "description": "A two-state button that can be either on or off.", "categories": ["ui"], "docs": "https://ui.full.dev/components/toggle/", - "dependencies": ["@data-slot/toggle@^1.0.2"], + "dependencies": ["@data-slot/toggle@^1.1.2"], "files": [ { "path": "src/components/ui/toggle/toggle.astro", @@ -1750,7 +1816,7 @@ "description": "Displays contextual information when a user hovers or focuses a trigger.", "categories": ["ui"], "docs": "https://ui.full.dev/components/tooltip/", - "dependencies": ["@data-slot/tooltip@^1.0.2"], + "dependencies": ["@data-slot/tooltip@^1.1.2"], "files": [ { "path": "src/components/ui/tooltip/tooltip.astro", @@ -1877,7 +1943,7 @@ "description": "A drawer component that slides in from any edge of the screen.", "categories": ["ui"], "docs": "https://ui.full.dev/components/drawer/", - "dependencies": ["@data-slot/drawer@^1.0.2"], + "dependencies": ["@data-slot/drawer@^1.1.2"], "registryDependencies": ["@fulldev/button"], "files": [ { @@ -1961,7 +2027,7 @@ "description": "Accessible panel groups with pointer and keyboard resizing.", "categories": ["ui"], "docs": "https://ui.full.dev/components/resizable/", - "dependencies": ["@data-slot/resizable@^1.0.2"], + "dependencies": ["@data-slot/resizable@^1.1.2"], "files": [ { "path": "src/components/ui/resizable/index.ts", @@ -1988,7 +2054,7 @@ "description": "A brief notification that appears without interrupting the user.", "categories": ["ui"], "docs": "https://ui.full.dev/components/toast/", - "dependencies": ["@data-slot/toast@^1.0.2", "@lucide/astro"], + "dependencies": ["@data-slot/toast@^1.1.2", "@lucide/astro"], "registryDependencies": ["@fulldev/button"], "files": [ { @@ -2048,7 +2114,7 @@ "description": "A set of two-state buttons that can be toggled independently or as a single choice.", "categories": ["ui"], "docs": "https://ui.full.dev/components/toggle-group/", - "dependencies": ["@data-slot/toggle-group@^1.0.2"], + "dependencies": ["@data-slot/toggle-group@^1.1.2"], "registryDependencies": ["@fulldev/toggle"], "files": [ { @@ -2230,6 +2296,7 @@ "@fulldev/card", "@fulldev/carousel", "@fulldev/checkbox", + "@fulldev/code-block", "@fulldev/collapsible", "@fulldev/combobox", "@fulldev/command", @@ -2255,6 +2322,7 @@ "@fulldev/pagination", "@fulldev/popover", "@fulldev/price", + "@fulldev/progress", "@fulldev/radio-group", "@fulldev/rating", "@fulldev/resizable", @@ -4782,6 +4850,32 @@ } ] }, + { + "name": "code-block-examples", + "type": "registry:example", + "title": "Code Block examples", + "description": "The examples from the shadcn/ui Code Block docs.", + "docs": "https://ui.full.dev/components/code-block/", + "registryDependencies": ["@fulldev/code-block"], + "files": [ + { + "path": "src/components/examples/code-block/code-block-demo.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-lines.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-numbered.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/code-block/code-block-wrap.astro", + "type": "registry:component" + } + ] + }, { "name": "collapsible-examples", "type": "registry:example", @@ -4806,6 +4900,10 @@ "path": "src/components/examples/collapsible/collapsible-demo.astro", "type": "registry:component" }, + { + "path": "src/components/examples/collapsible/collapsible-dismissal.astro", + "type": "registry:component" + }, { "path": "src/components/examples/collapsible/collapsible-file-tree.astro", "type": "registry:component" @@ -5573,6 +5671,32 @@ } ] }, + { + "name": "progress-examples", + "type": "registry:example", + "title": "Progress examples", + "description": "The examples from the shadcn/ui Progress docs.", + "docs": "https://ui.full.dev/components/progress/", + "registryDependencies": ["@fulldev/progress"], + "files": [ + { + "path": "src/components/examples/progress/progress-custom-max.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-demo.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-indeterminate.astro", + "type": "registry:component" + }, + { + "path": "src/components/examples/progress/progress-rtl.astro", + "type": "registry:component" + } + ] + }, { "name": "radio-group-examples", "type": "registry:example", diff --git a/registry/styles/README.md b/registry/styles/README.md index 4bc7e928f..3c66de12c 100644 --- a/registry/styles/README.md +++ b/registry/styles/README.md @@ -2,8 +2,8 @@ Components use `cn-*` placeholder classes for their visual styling. A style maps each placeholder to Tailwind classes, the same way shadcn/ui does. Fulldev UI supports all shadcn/ui styles: vega, nova, maia, lyra, mira, luma, sera, and rhea. -- `shadcn/style-.css`: unmodified copies of the shadcn/ui style files, under the shadcn/ui MIT license in `shadcn/LICENSE.md`. Copied from [shadcn-ui/ui](https://github.com/shadcn-ui/ui/tree/main/apps/v4/registry/styles) at commit `295a1f1`. Do not edit them; copy a newer version instead and run `pnpm registry:build`. -- `shadcn/themes.json` and `shadcn/fonts.json`: the shadcn/ui theme colors and font definitions, copied from the same commit for the docs create page. +- `shadcn/style-.css`: unmodified copies of the shadcn/ui style files, under the shadcn/ui MIT license in `shadcn/LICENSE.md`. Copied from [shadcn-ui/ui](https://github.com/shadcn-ui/ui/tree/main/apps/v4/registry/styles) at commit `d2fba50`. Do not edit them; copy a newer version instead and run `pnpm registry:build`. +- `shadcn/themes.json` and `shadcn/fonts.json`: the shadcn/ui theme colors and font definitions, copied at commit `295a1f1` for the docs create page. - `adapted/style-.css`: `cn-fd-*` placeholders, generated by `scripts/registry-adapt.mjs`. They copy a shadcn/ui placeholder and rewrite its selectors for components whose markup exposes state differently than Base UI, such as `data-highlighted` instead of `focus` in menus. Do not edit or format them: Prettier would reorder their classes, which changes how conflicting classes merge, and the docs previews would no longer match installs. `pnpm test` checks that they match. - `fulldev/style-.css`: placeholders for Fulldev UI components that shadcn/ui does not have, such as banner, header, section, and typography. Vega keeps the original Fulldev UI classes; the other styles follow how shadcn/ui treats comparable components. diff --git a/registry/styles/shadcn/style-luma.css b/registry/styles/shadcn/style-luma.css index 739e8f926..891fbb6e2 100644 --- a/registry/styles/shadcn/style-luma.css +++ b/registry/styles/shadcn/style-luma.css @@ -1659,6 +1659,84 @@ @apply gap-2 sm:min-h-9; } + /* MARK: Trace */ + .cn-trace { + @apply gap-3 *:has-[>[data-slot=trace-line]]:rounded-lg *:has-[>[data-slot=trace-line]]:focus-visible:ring-3 *:has-[>[data-slot=trace-line]]:focus-visible:ring-ring/30; + } + + .cn-trace-collapsible-trigger { + @apply gap-1 rounded-lg focus-visible:ring-3 focus-visible:ring-ring/30; + } + + .cn-trace-line { + @apply gap-2 text-sm; + } + + .cn-trace-icon { + @apply size-4 [&_svg:not([class*='size-'])]:size-4 [[data-slot=trace-title]~&]:-ml-1; + } + + .cn-trace-collapsible-content { + @apply duration-200; + } + + .cn-trace-collapsible-content-inner { + @apply mt-2.5 mb-1 ml-[calc(--spacing(2)-1px)] border-l pr-1 pl-4 leading-relaxed; + } + + /* MARK: Code Block */ + .cn-code-block { + @apply rounded-2xl text-sm data-[size=sm]:text-xs has-[>[data-slot=code-block-content]:focus-visible]:ring-3 has-[>[data-slot=code-block-content]:focus-visible]:ring-ring/30 data-[size=sm]:rounded-xl; + } + + .cn-code-block-variant-default { + @apply bg-muted text-foreground ring-1 ring-foreground/5 dark:ring-foreground/10; + } + + .cn-code-block-variant-destructive { + @apply bg-destructive/5 text-destructive ring-1 ring-destructive/15 dark:bg-destructive/10 dark:ring-destructive/20; + } + + .cn-code-block-header { + @apply gap-2 px-5 pt-5 text-muted-foreground group-data-[variant=destructive]/code-block:text-destructive group-data-[size=sm]/code-block:px-3 group-data-[size=sm]/code-block:pt-3; + } + + .cn-code-block-footer { + @apply gap-2 px-5 pb-5 text-muted-foreground group-data-[size=sm]/code-block:px-3 group-data-[size=sm]/code-block:pb-3; + } + + .cn-code-block-title { + @apply font-sans text-sm font-medium text-foreground group-data-[variant=destructive]/code-block:text-destructive *:[svg]:me-1.5 [&_svg:not([class*='size-'])]:size-4 group-data-[size=sm]/code-block:text-xs group-data-[size=sm]/code-block:[&_svg:not([class*='size-'])]:size-3.5; + } + + .cn-code-block-actions { + @apply -my-1 -me-1.5 gap-1 *:data-[slot=button]:hover:bg-foreground/5 dark:*:data-[slot=button]:hover:bg-foreground/10 [[data-slot=code-block]>&]:m-0 [[data-slot=code-block]>&]:top-4 [[data-slot=code-block]>&]:end-4 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:top-2 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:end-2 [[data-slot=code-block]>&]:*:[button]:bg-background [[data-slot=code-block]>&]:*:[button]:ring-1 [[data-slot=code-block]>&]:*:[button]:ring-foreground/10; + } + + .cn-code-block-copy-button { + @apply hover:bg-foreground/5 dark:hover:bg-foreground/10; + } + + .cn-code-block-content { + @apply px-5 py-5 leading-relaxed group-has-data-[slot=code-block-header]/code-block:pt-2 group-has-data-[slot=code-block-footer]/code-block:pb-2 group-data-[size=sm]/code-block:px-3 group-data-[size=sm]/code-block:py-3 group-data-[size=sm]/code-block:group-has-data-[slot=code-block-header]/code-block:pt-1.5; + } + + .cn-code-block-line { + @apply -mx-5 px-5 in-data-numbered:gap-x-3 before:min-w-6 before:text-end before:text-muted-foreground after:start-1 after:text-muted-foreground group-data-[size=sm]/code-block:-mx-3 group-data-[size=sm]/code-block:px-3; + } + + .cn-code-block-line-variant-highlighted { + @apply bg-foreground/5; + } + + .cn-code-block-line-variant-added { + @apply bg-foreground/5 after:content-['+']; + } + + .cn-code-block-line-variant-removed { + @apply bg-destructive/10 after:text-destructive after:content-['−']; + } + /* MARK: Message Scroller */ .cn-message-scroller-content { @apply gap-8; diff --git a/registry/styles/shadcn/style-lyra.css b/registry/styles/shadcn/style-lyra.css index 21de71c1c..05342f268 100644 --- a/registry/styles/shadcn/style-lyra.css +++ b/registry/styles/shadcn/style-lyra.css @@ -1638,6 +1638,83 @@ @apply gap-1.5 sm:min-h-8; } + /* MARK: Trace */ + .cn-trace { + @apply gap-2 *:has-[>[data-slot=trace-line]]:rounded-none *:has-[>[data-slot=trace-line]]:focus-visible:ring-1 *:has-[>[data-slot=trace-line]]:focus-visible:ring-ring/50; + } + + .cn-trace-collapsible-trigger { + @apply gap-1 rounded-none focus-visible:ring-1 focus-visible:ring-ring/50; + } + + .cn-trace-line { + @apply gap-2 text-xs; + } + + .cn-trace-icon { + @apply size-3.5 [&_svg:not([class*='size-'])]:size-3.5 [[data-slot=trace-title]~&]:-ml-1; + } + + .cn-trace-collapsible-content { + @apply duration-200; + } + + .cn-trace-collapsible-content-inner { + @apply mt-2 mb-1 ml-[calc(--spacing(1.75)-1px)] border-l pr-1 pl-3.75 leading-relaxed; + } + + /* MARK: Code Block */ + .cn-code-block { + @apply rounded-none text-sm data-[size=sm]:text-xs has-[>[data-slot=code-block-content]:focus-visible]:ring-1 has-[>[data-slot=code-block-content]:focus-visible]:ring-ring/50; + } + + .cn-code-block-variant-default { + @apply border border-input text-foreground dark:bg-input/30 has-[>[data-slot=code-block-content]:focus-visible]:border-ring; + } + + .cn-code-block-variant-destructive { + @apply border border-destructive/30 text-destructive dark:border-destructive/40; + } + + .cn-code-block-header { + @apply gap-2 px-3 pt-3 text-muted-foreground group-data-[variant=destructive]/code-block:text-destructive group-data-[size=sm]/code-block:px-2 group-data-[size=sm]/code-block:pt-2; + } + + .cn-code-block-footer { + @apply gap-2 px-3 pb-3 text-muted-foreground group-data-[size=sm]/code-block:px-2 group-data-[size=sm]/code-block:pb-2; + } + + .cn-code-block-title { + @apply font-sans text-xs font-medium text-foreground group-data-[variant=destructive]/code-block:text-destructive *:[svg]:me-1.5 [&_svg:not([class*='size-'])]:size-3.5; + } + + .cn-code-block-actions { + @apply -my-1 -me-1.5 gap-1 [[data-slot=code-block]>&]:m-0 [[data-slot=code-block]>&]:top-2 [[data-slot=code-block]>&]:end-2 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:top-1.5 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:end-1.5 [[data-slot=code-block]>&]:*:[button]:bg-background [[data-slot=code-block]>&]:*:[button]:ring-1 [[data-slot=code-block]>&]:*:[button]:ring-foreground/10; + } + + .cn-code-block-copy-button { + } + + .cn-code-block-content { + @apply px-3 py-3 leading-relaxed group-has-data-[slot=code-block-header]/code-block:pt-2 group-has-data-[slot=code-block-footer]/code-block:pb-2 group-data-[size=sm]/code-block:px-2 group-data-[size=sm]/code-block:py-2 group-data-[size=sm]/code-block:group-has-data-[slot=code-block-header]/code-block:pt-1.5; + } + + .cn-code-block-line { + @apply -mx-3 px-3 in-data-numbered:gap-x-3 before:min-w-6 before:text-end before:text-muted-foreground after:start-1 after:text-muted-foreground group-data-[size=sm]/code-block:-mx-2 group-data-[size=sm]/code-block:px-2; + } + + .cn-code-block-line-variant-highlighted { + @apply bg-muted; + } + + .cn-code-block-line-variant-added { + @apply bg-muted after:content-['+']; + } + + .cn-code-block-line-variant-removed { + @apply bg-destructive/10 after:text-destructive after:content-['−']; + } + /* MARK: Message Scroller */ .cn-message-scroller-content { @apply gap-6; diff --git a/registry/styles/shadcn/style-maia.css b/registry/styles/shadcn/style-maia.css index fb1827393..ed13c6871 100644 --- a/registry/styles/shadcn/style-maia.css +++ b/registry/styles/shadcn/style-maia.css @@ -1660,6 +1660,83 @@ @apply gap-2 sm:min-h-9; } + /* MARK: Trace */ + .cn-trace { + @apply gap-3 *:has-[>[data-slot=trace-line]]:rounded-lg *:has-[>[data-slot=trace-line]]:focus-visible:ring-[3px] *:has-[>[data-slot=trace-line]]:focus-visible:ring-ring/50; + } + + .cn-trace-collapsible-trigger { + @apply gap-1 rounded-lg focus-visible:ring-[3px] focus-visible:ring-ring/50; + } + + .cn-trace-line { + @apply gap-2 text-sm; + } + + .cn-trace-icon { + @apply size-4 [&_svg:not([class*='size-'])]:size-4 [[data-slot=trace-title]~&]:-ml-1; + } + + .cn-trace-collapsible-content { + @apply duration-200; + } + + .cn-trace-collapsible-content-inner { + @apply mt-2.5 mb-1 ml-[calc(--spacing(2)-1px)] border-l pr-1 pl-4 leading-relaxed; + } + + /* MARK: Code Block */ + .cn-code-block { + @apply rounded-xl text-sm data-[size=sm]:text-xs has-[>[data-slot=code-block-content]:focus-visible]:ring-[3px] has-[>[data-slot=code-block-content]:focus-visible]:ring-ring/50 data-[size=sm]:rounded-lg; + } + + .cn-code-block-variant-default { + @apply border border-input text-foreground dark:bg-input/30 has-[>[data-slot=code-block-content]:focus-visible]:border-ring; + } + + .cn-code-block-variant-destructive { + @apply border border-destructive/30 text-destructive dark:border-destructive/40; + } + + .cn-code-block-header { + @apply gap-2 px-4 pt-4 text-muted-foreground group-data-[variant=destructive]/code-block:text-destructive group-data-[size=sm]/code-block:px-3 group-data-[size=sm]/code-block:pt-3; + } + + .cn-code-block-footer { + @apply gap-2 px-4 pb-4 text-muted-foreground group-data-[size=sm]/code-block:px-3 group-data-[size=sm]/code-block:pb-3; + } + + .cn-code-block-title { + @apply font-sans text-sm font-medium text-foreground group-data-[variant=destructive]/code-block:text-destructive *:[svg]:me-1.5 [&_svg:not([class*='size-'])]:size-4 group-data-[size=sm]/code-block:text-xs group-data-[size=sm]/code-block:[&_svg:not([class*='size-'])]:size-3.5; + } + + .cn-code-block-actions { + @apply -my-1 -me-1.5 gap-1 [[data-slot=code-block]>&]:m-0 [[data-slot=code-block]>&]:top-3 [[data-slot=code-block]>&]:end-3 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:top-2 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:end-2 [[data-slot=code-block]>&]:*:[button]:bg-background [[data-slot=code-block]>&]:*:[button]:ring-1 [[data-slot=code-block]>&]:*:[button]:ring-foreground/10; + } + + .cn-code-block-copy-button { + } + + .cn-code-block-content { + @apply px-4 py-4 leading-relaxed group-has-data-[slot=code-block-header]/code-block:pt-2 group-has-data-[slot=code-block-footer]/code-block:pb-2 group-data-[size=sm]/code-block:px-3 group-data-[size=sm]/code-block:py-3 group-data-[size=sm]/code-block:group-has-data-[slot=code-block-header]/code-block:pt-1.5; + } + + .cn-code-block-line { + @apply -mx-4 px-4 in-data-numbered:gap-x-3 before:min-w-6 before:text-end before:text-muted-foreground after:start-1 after:text-muted-foreground group-data-[size=sm]/code-block:-mx-3 group-data-[size=sm]/code-block:px-3; + } + + .cn-code-block-line-variant-highlighted { + @apply bg-muted; + } + + .cn-code-block-line-variant-added { + @apply bg-muted after:content-['+']; + } + + .cn-code-block-line-variant-removed { + @apply bg-destructive/10 after:text-destructive after:content-['−']; + } + /* MARK: Message Scroller */ .cn-message-scroller-content { @apply gap-8; diff --git a/registry/styles/shadcn/style-mira.css b/registry/styles/shadcn/style-mira.css index 7707d4b3e..1f6b9efe3 100644 --- a/registry/styles/shadcn/style-mira.css +++ b/registry/styles/shadcn/style-mira.css @@ -1665,6 +1665,83 @@ @apply gap-1.5 sm:min-h-7; } + /* MARK: Trace */ + .cn-trace { + @apply gap-1.5 *:has-[>[data-slot=trace-line]]:rounded-sm *:has-[>[data-slot=trace-line]]:focus-visible:ring-2 *:has-[>[data-slot=trace-line]]:focus-visible:ring-ring/30; + } + + .cn-trace-collapsible-trigger { + @apply gap-1 rounded-sm focus-visible:ring-2 focus-visible:ring-ring/30; + } + + .cn-trace-line { + @apply gap-2 text-xs/relaxed; + } + + .cn-trace-icon { + @apply size-3.5 [&_svg:not([class*='size-'])]:size-3.5 [[data-slot=trace-title]~&]:-ml-1; + } + + .cn-trace-collapsible-content { + @apply duration-200; + } + + .cn-trace-collapsible-content-inner { + @apply mt-1.5 mb-1 ml-[calc(--spacing(1.75)-1px)] border-l pr-1 pl-3.75; + } + + /* MARK: Code Block */ + .cn-code-block { + @apply rounded-md text-sm data-[size=sm]:text-xs has-[>[data-slot=code-block-content]:focus-visible]:ring-2 has-[>[data-slot=code-block-content]:focus-visible]:ring-ring/30; + } + + .cn-code-block-variant-default { + @apply border border-input text-foreground dark:bg-input/30 has-[>[data-slot=code-block-content]:focus-visible]:border-ring; + } + + .cn-code-block-variant-destructive { + @apply border border-destructive/30 text-destructive dark:border-destructive/40; + } + + .cn-code-block-header { + @apply gap-2 px-3 pt-3 text-muted-foreground group-data-[variant=destructive]/code-block:text-destructive group-data-[size=sm]/code-block:px-2 group-data-[size=sm]/code-block:pt-2; + } + + .cn-code-block-footer { + @apply gap-2 px-3 pb-3 text-muted-foreground group-data-[size=sm]/code-block:px-2 group-data-[size=sm]/code-block:pb-2; + } + + .cn-code-block-title { + @apply font-sans text-xs font-medium text-foreground group-data-[variant=destructive]/code-block:text-destructive *:[svg]:me-1.5 [&_svg:not([class*='size-'])]:size-3.5; + } + + .cn-code-block-actions { + @apply -my-1 -me-1.5 gap-1 [[data-slot=code-block]>&]:m-0 [[data-slot=code-block]>&]:top-2 [[data-slot=code-block]>&]:end-2 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:top-1.5 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:end-1.5 [[data-slot=code-block]>&]:*:[button]:bg-background [[data-slot=code-block]>&]:*:[button]:ring-1 [[data-slot=code-block]>&]:*:[button]:ring-foreground/10; + } + + .cn-code-block-copy-button { + } + + .cn-code-block-content { + @apply px-3 py-3 leading-relaxed group-has-data-[slot=code-block-header]/code-block:pt-2 group-has-data-[slot=code-block-footer]/code-block:pb-2 group-data-[size=sm]/code-block:px-2 group-data-[size=sm]/code-block:py-2 group-data-[size=sm]/code-block:group-has-data-[slot=code-block-header]/code-block:pt-1.5; + } + + .cn-code-block-line { + @apply -mx-3 px-3 in-data-numbered:gap-x-3 before:min-w-6 before:text-end before:text-muted-foreground after:start-1 after:text-muted-foreground group-data-[size=sm]/code-block:-mx-2 group-data-[size=sm]/code-block:px-2; + } + + .cn-code-block-line-variant-highlighted { + @apply bg-muted; + } + + .cn-code-block-line-variant-added { + @apply bg-muted after:content-['+']; + } + + .cn-code-block-line-variant-removed { + @apply bg-destructive/10 after:text-destructive after:content-['−']; + } + /* MARK: Message Scroller */ .cn-message-scroller-content { @apply gap-6; diff --git a/registry/styles/shadcn/style-nova.css b/registry/styles/shadcn/style-nova.css index 514a3e8e0..293204b2b 100644 --- a/registry/styles/shadcn/style-nova.css +++ b/registry/styles/shadcn/style-nova.css @@ -1663,6 +1663,83 @@ @apply gap-2 sm:min-h-8; } + /* MARK: Trace */ + .cn-trace { + @apply gap-2 *:has-[>[data-slot=trace-line]]:rounded-md *:has-[>[data-slot=trace-line]]:focus-visible:ring-3 *:has-[>[data-slot=trace-line]]:focus-visible:ring-ring/50; + } + + .cn-trace-collapsible-trigger { + @apply gap-1 rounded-md focus-visible:ring-3 focus-visible:ring-ring/50; + } + + .cn-trace-line { + @apply gap-2 text-sm; + } + + .cn-trace-icon { + @apply size-4 [&_svg:not([class*='size-'])]:size-4 [[data-slot=trace-title]~&]:-ml-1; + } + + .cn-trace-collapsible-content { + @apply duration-200; + } + + .cn-trace-collapsible-content-inner { + @apply mt-2 mb-1 ml-[calc(--spacing(2)-1px)] border-l pr-1 pl-4 leading-relaxed; + } + + /* MARK: Code Block */ + .cn-code-block { + @apply rounded-lg text-sm data-[size=sm]:text-xs has-[>[data-slot=code-block-content]:focus-visible]:ring-3 has-[>[data-slot=code-block-content]:focus-visible]:ring-ring/50; + } + + .cn-code-block-variant-default { + @apply border border-input text-foreground dark:bg-input/30 has-[>[data-slot=code-block-content]:focus-visible]:border-ring; + } + + .cn-code-block-variant-destructive { + @apply border border-destructive/30 text-destructive dark:border-destructive/40; + } + + .cn-code-block-header { + @apply gap-2 px-3 pt-3 text-muted-foreground group-data-[variant=destructive]/code-block:text-destructive group-data-[size=sm]/code-block:px-2.5 group-data-[size=sm]/code-block:pt-2.5; + } + + .cn-code-block-footer { + @apply gap-2 px-3 pb-3 text-muted-foreground group-data-[size=sm]/code-block:px-2.5 group-data-[size=sm]/code-block:pb-2.5; + } + + .cn-code-block-title { + @apply font-sans text-sm font-medium text-foreground group-data-[variant=destructive]/code-block:text-destructive *:[svg]:me-1.5 [&_svg:not([class*='size-'])]:size-3.5 group-data-[size=sm]/code-block:text-xs; + } + + .cn-code-block-actions { + @apply -my-1 -me-1.5 gap-1 [[data-slot=code-block]>&]:m-0 [[data-slot=code-block]>&]:top-2 [[data-slot=code-block]>&]:end-2 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:top-1.5 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:end-1.5 [[data-slot=code-block]>&]:*:[button]:bg-background [[data-slot=code-block]>&]:*:[button]:ring-1 [[data-slot=code-block]>&]:*:[button]:ring-foreground/10; + } + + .cn-code-block-copy-button { + } + + .cn-code-block-content { + @apply px-3 py-3 leading-relaxed group-has-data-[slot=code-block-header]/code-block:pt-2 group-has-data-[slot=code-block-footer]/code-block:pb-2 group-data-[size=sm]/code-block:px-2.5 group-data-[size=sm]/code-block:py-2.5 group-data-[size=sm]/code-block:group-has-data-[slot=code-block-header]/code-block:pt-1.5; + } + + .cn-code-block-line { + @apply -mx-3 px-3 in-data-numbered:gap-x-3 before:min-w-6 before:text-end before:text-muted-foreground after:start-1 after:text-muted-foreground group-data-[size=sm]/code-block:-mx-2.5 group-data-[size=sm]/code-block:px-2.5; + } + + .cn-code-block-line-variant-highlighted { + @apply bg-muted; + } + + .cn-code-block-line-variant-added { + @apply bg-muted after:content-['+']; + } + + .cn-code-block-line-variant-removed { + @apply bg-destructive/10 after:text-destructive after:content-['−']; + } + /* MARK: Message Scroller */ .cn-message-scroller-content { @apply gap-6; diff --git a/registry/styles/shadcn/style-rhea.css b/registry/styles/shadcn/style-rhea.css index dd15e5f37..94bbca2a7 100644 --- a/registry/styles/shadcn/style-rhea.css +++ b/registry/styles/shadcn/style-rhea.css @@ -1659,6 +1659,84 @@ @apply gap-2 sm:min-h-8; } + /* MARK: Trace */ + .cn-trace { + @apply gap-2 *:has-[>[data-slot=trace-line]]:rounded-lg *:has-[>[data-slot=trace-line]]:focus-visible:ring-3 *:has-[>[data-slot=trace-line]]:focus-visible:ring-ring/30; + } + + .cn-trace-collapsible-trigger { + @apply gap-1 rounded-lg focus-visible:ring-3 focus-visible:ring-ring/30; + } + + .cn-trace-line { + @apply gap-2 text-sm; + } + + .cn-trace-icon { + @apply size-4 [&_svg:not([class*='size-'])]:size-4 [[data-slot=trace-title]~&]:-ml-1; + } + + .cn-trace-collapsible-content { + @apply duration-200; + } + + .cn-trace-collapsible-content-inner { + @apply mt-2 mb-1 ml-[calc(--spacing(2)-1px)] border-l pr-1 pl-4 leading-relaxed; + } + + /* MARK: Code Block */ + .cn-code-block { + @apply rounded-2xl text-sm data-[size=sm]:text-xs has-[>[data-slot=code-block-content]:focus-visible]:ring-3 has-[>[data-slot=code-block-content]:focus-visible]:ring-ring/30 data-[size=sm]:rounded-xl; + } + + .cn-code-block-variant-default { + @apply bg-muted text-foreground ring-1 ring-foreground/5 dark:ring-foreground/10; + } + + .cn-code-block-variant-destructive { + @apply bg-destructive/5 text-destructive ring-1 ring-destructive/15 dark:bg-destructive/10 dark:ring-destructive/20; + } + + .cn-code-block-header { + @apply gap-2 px-4 pt-4 text-muted-foreground group-data-[variant=destructive]/code-block:text-destructive group-data-[size=sm]/code-block:px-3 group-data-[size=sm]/code-block:pt-3; + } + + .cn-code-block-footer { + @apply gap-2 px-4 pb-4 text-muted-foreground group-data-[size=sm]/code-block:px-3 group-data-[size=sm]/code-block:pb-3; + } + + .cn-code-block-title { + @apply font-sans text-sm font-medium text-foreground group-data-[variant=destructive]/code-block:text-destructive *:[svg]:me-1.5 [&_svg:not([class*='size-'])]:size-4 group-data-[size=sm]/code-block:text-xs group-data-[size=sm]/code-block:[&_svg:not([class*='size-'])]:size-3.5; + } + + .cn-code-block-actions { + @apply -my-1 -me-1.5 gap-1 *:data-[slot=button]:hover:bg-foreground/5 dark:*:data-[slot=button]:hover:bg-foreground/10 [[data-slot=code-block]>&]:m-0 [[data-slot=code-block]>&]:top-3 [[data-slot=code-block]>&]:end-3 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:top-2 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:end-2 [[data-slot=code-block]>&]:*:[button]:bg-background [[data-slot=code-block]>&]:*:[button]:ring-1 [[data-slot=code-block]>&]:*:[button]:ring-foreground/10; + } + + .cn-code-block-copy-button { + @apply hover:bg-foreground/5 dark:hover:bg-foreground/10; + } + + .cn-code-block-content { + @apply px-4 py-4 leading-relaxed group-has-data-[slot=code-block-header]/code-block:pt-2 group-has-data-[slot=code-block-footer]/code-block:pb-2 group-data-[size=sm]/code-block:px-3 group-data-[size=sm]/code-block:py-3 group-data-[size=sm]/code-block:group-has-data-[slot=code-block-header]/code-block:pt-1.5; + } + + .cn-code-block-line { + @apply -mx-4 px-4 in-data-numbered:gap-x-3 before:min-w-6 before:text-end before:text-muted-foreground after:start-1 after:text-muted-foreground group-data-[size=sm]/code-block:-mx-3 group-data-[size=sm]/code-block:px-3; + } + + .cn-code-block-line-variant-highlighted { + @apply bg-foreground/5; + } + + .cn-code-block-line-variant-added { + @apply bg-foreground/5 after:content-['+']; + } + + .cn-code-block-line-variant-removed { + @apply bg-destructive/10 after:text-destructive after:content-['−']; + } + /* MARK: Message Scroller */ .cn-message-scroller-content { @apply gap-8; diff --git a/registry/styles/shadcn/style-sera.css b/registry/styles/shadcn/style-sera.css index c210a75f1..6fb2c1289 100644 --- a/registry/styles/shadcn/style-sera.css +++ b/registry/styles/shadcn/style-sera.css @@ -1650,6 +1650,83 @@ @apply gap-2 sm:min-h-10; } + /* MARK: Trace */ + .cn-trace { + @apply gap-3 *:has-[>[data-slot=trace-line]]:rounded-none *:has-[>[data-slot=trace-line]]:focus-visible:ring-2 *:has-[>[data-slot=trace-line]]:focus-visible:ring-ring/30; + } + + .cn-trace-collapsible-trigger { + @apply gap-1 rounded-none focus-visible:ring-2 focus-visible:ring-ring/30; + } + + .cn-trace-line { + @apply gap-2 text-sm; + } + + .cn-trace-icon { + @apply size-4 [&_svg:not([class*='size-'])]:size-4 [[data-slot=trace-title]~&]:-ml-1; + } + + .cn-trace-collapsible-content { + @apply duration-200; + } + + .cn-trace-collapsible-content-inner { + @apply mt-3 mb-1 ml-[calc(--spacing(2)-1px)] border-l pr-1 pl-4 leading-relaxed; + } + + /* MARK: Code Block */ + .cn-code-block { + @apply rounded-none text-sm data-[size=sm]:text-xs has-[>[data-slot=code-block-content]:focus-visible]:ring-2 has-[>[data-slot=code-block-content]:focus-visible]:ring-ring/30; + } + + .cn-code-block-variant-default { + @apply border border-input text-foreground dark:bg-input/30 has-[>[data-slot=code-block-content]:focus-visible]:border-ring; + } + + .cn-code-block-variant-destructive { + @apply border border-destructive/30 text-destructive dark:border-destructive/40; + } + + .cn-code-block-header { + @apply gap-2 px-4 pt-4 text-muted-foreground group-data-[variant=destructive]/code-block:text-destructive group-data-[size=sm]/code-block:px-3 group-data-[size=sm]/code-block:pt-3; + } + + .cn-code-block-footer { + @apply gap-2 px-4 pb-4 text-muted-foreground group-data-[size=sm]/code-block:px-3 group-data-[size=sm]/code-block:pb-3; + } + + .cn-code-block-title { + @apply font-sans text-sm font-medium text-foreground group-data-[variant=destructive]/code-block:text-destructive *:[svg]:me-1.5 [&_svg:not([class*='size-'])]:size-4 group-data-[size=sm]/code-block:text-xs group-data-[size=sm]/code-block:[&_svg:not([class*='size-'])]:size-3.5; + } + + .cn-code-block-actions { + @apply -my-1 -me-1.5 gap-1 [[data-slot=code-block]>&]:m-0 [[data-slot=code-block]>&]:top-3 [[data-slot=code-block]>&]:end-3 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:top-2 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:end-2 [[data-slot=code-block]>&]:*:[button]:bg-background [[data-slot=code-block]>&]:*:[button]:ring-1 [[data-slot=code-block]>&]:*:[button]:ring-foreground/10; + } + + .cn-code-block-copy-button { + } + + .cn-code-block-content { + @apply px-4 py-4 leading-relaxed group-has-data-[slot=code-block-header]/code-block:pt-2 group-has-data-[slot=code-block-footer]/code-block:pb-2 group-data-[size=sm]/code-block:px-3 group-data-[size=sm]/code-block:py-3 group-data-[size=sm]/code-block:group-has-data-[slot=code-block-header]/code-block:pt-1.5; + } + + .cn-code-block-line { + @apply -mx-4 px-4 in-data-numbered:gap-x-3 before:min-w-6 before:text-end before:text-muted-foreground after:start-1 after:text-muted-foreground group-data-[size=sm]/code-block:-mx-3 group-data-[size=sm]/code-block:px-3; + } + + .cn-code-block-line-variant-highlighted { + @apply bg-muted; + } + + .cn-code-block-line-variant-added { + @apply bg-muted after:content-['+']; + } + + .cn-code-block-line-variant-removed { + @apply bg-destructive/10 after:text-destructive after:content-['−']; + } + /* MARK: Message Scroller */ .cn-message-scroller-content { @apply gap-8; diff --git a/registry/styles/shadcn/style-vega.css b/registry/styles/shadcn/style-vega.css index 7b07854ab..9f03b3c6d 100644 --- a/registry/styles/shadcn/style-vega.css +++ b/registry/styles/shadcn/style-vega.css @@ -1663,6 +1663,83 @@ @apply gap-2 sm:min-h-9; } + /* MARK: Trace */ + .cn-trace { + @apply gap-2 *:has-[>[data-slot=trace-line]]:rounded-md *:has-[>[data-slot=trace-line]]:focus-visible:ring-3 *:has-[>[data-slot=trace-line]]:focus-visible:ring-ring/50; + } + + .cn-trace-collapsible-trigger { + @apply gap-1 rounded-md focus-visible:ring-3 focus-visible:ring-ring/50; + } + + .cn-trace-line { + @apply gap-2 text-sm; + } + + .cn-trace-icon { + @apply size-4 [&_svg:not([class*='size-'])]:size-4 [[data-slot=trace-title]~&]:-ml-1; + } + + .cn-trace-collapsible-content { + @apply duration-200; + } + + .cn-trace-collapsible-content-inner { + @apply mt-2 mb-1 ml-[calc(--spacing(2)-1px)] border-l pr-1 pl-4 leading-relaxed; + } + + /* MARK: Code Block */ + .cn-code-block { + @apply rounded-lg text-sm data-[size=sm]:text-xs has-[>[data-slot=code-block-content]:focus-visible]:ring-3 has-[>[data-slot=code-block-content]:focus-visible]:ring-ring/50; + } + + .cn-code-block-variant-default { + @apply border border-input text-foreground dark:bg-input/30 has-[>[data-slot=code-block-content]:focus-visible]:border-ring; + } + + .cn-code-block-variant-destructive { + @apply border border-destructive/30 text-destructive dark:border-destructive/40; + } + + .cn-code-block-header { + @apply gap-2 px-4 pt-4 text-muted-foreground group-data-[variant=destructive]/code-block:text-destructive group-data-[size=sm]/code-block:px-3 group-data-[size=sm]/code-block:pt-3; + } + + .cn-code-block-footer { + @apply gap-2 px-4 pb-4 text-muted-foreground group-data-[size=sm]/code-block:px-3 group-data-[size=sm]/code-block:pb-3; + } + + .cn-code-block-title { + @apply font-sans text-sm font-medium text-foreground group-data-[variant=destructive]/code-block:text-destructive *:[svg]:me-1.5 [&_svg:not([class*='size-'])]:size-4 group-data-[size=sm]/code-block:text-xs group-data-[size=sm]/code-block:[&_svg:not([class*='size-'])]:size-3.5; + } + + .cn-code-block-actions { + @apply -my-1 -me-1.5 gap-1 [[data-slot=code-block]>&]:m-0 [[data-slot=code-block]>&]:top-3 [[data-slot=code-block]>&]:end-3 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:top-2 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:end-2 [[data-slot=code-block]>&]:*:[button]:bg-background [[data-slot=code-block]>&]:*:[button]:ring-1 [[data-slot=code-block]>&]:*:[button]:ring-foreground/10; + } + + .cn-code-block-copy-button { + } + + .cn-code-block-content { + @apply px-4 py-4 leading-relaxed group-has-data-[slot=code-block-header]/code-block:pt-2 group-has-data-[slot=code-block-footer]/code-block:pb-2 group-data-[size=sm]/code-block:px-3 group-data-[size=sm]/code-block:py-3 group-data-[size=sm]/code-block:group-has-data-[slot=code-block-header]/code-block:pt-1.5; + } + + .cn-code-block-line { + @apply -mx-4 px-4 in-data-numbered:gap-x-3 before:min-w-6 before:text-end before:text-muted-foreground after:start-1 after:text-muted-foreground group-data-[size=sm]/code-block:-mx-3 group-data-[size=sm]/code-block:px-3; + } + + .cn-code-block-line-variant-highlighted { + @apply bg-muted; + } + + .cn-code-block-line-variant-added { + @apply bg-muted after:content-['+']; + } + + .cn-code-block-line-variant-removed { + @apply bg-destructive/10 after:text-destructive after:content-['−']; + } + /* MARK: Message Scroller */ .cn-message-scroller-content { @apply gap-8; diff --git a/src/assets/favicon.svg b/src/assets/favicon.svg index 73601571f..e7c1db3df 100644 --- a/src/assets/favicon.svg +++ b/src/assets/favicon.svg @@ -1,5 +1,5 @@ - + diff --git a/src/assets/logo-light.svg b/src/assets/logo-light.svg index 8319bd7bd..cfcfbe511 100644 --- a/src/assets/logo-light.svg +++ b/src/assets/logo-light.svg @@ -1,5 +1,5 @@ - + diff --git a/src/assets/social.png b/src/assets/social.png index 342b0d01f..6f91be908 100644 Binary files a/src/assets/social.png and b/src/assets/social.png differ diff --git a/src/components/docs-header.astro b/src/components/docs-header.astro index fc7e2d006..85b1ada62 100644 --- a/src/components/docs-header.astro +++ b/src/components/docs-header.astro @@ -43,11 +43,11 @@ const isCurrent = (href: string) =>
- + {/* The logo tile of the full.dev websites (fulldotdev/fulldev - packages/web, .logo-tile): the brand blue with a sheen, a light rim + packages/web, .logo-tile): Fulldev UI orange with a sheen, a light rim and a soft shadow, a squircle where the browser has corner-shape. */} - + ))} + {logo.label} diff --git a/src/components/docs-switcher.astro b/src/components/docs-switcher.astro index dcd0a62f3..b333d1875 100644 --- a/src/components/docs-switcher.astro +++ b/src/components/docs-switcher.astro @@ -95,7 +95,7 @@ const presets = NAMED_PRESETS.map(({ id, label, config }) => ({ {label} diff --git a/src/components/examples/code-block/code-block-demo.astro b/src/components/examples/code-block/code-block-demo.astro new file mode 100644 index 000000000..f673e46d5 --- /dev/null +++ b/src/components/examples/code-block/code-block-demo.astro @@ -0,0 +1,24 @@ +--- +import { + CodeBlock, + CodeBlockActions, + CodeBlockContent, + CodeBlockCopyButton, + CodeBlockHeader, + CodeBlockTitle, +} from "@/components/ui/code-block" + +const code = `import { Button } from "@/components/ui/button" + +` +--- + + + + contact.astro + + + + + + diff --git a/src/components/examples/code-block/code-block-lines.astro b/src/components/examples/code-block/code-block-lines.astro new file mode 100644 index 000000000..485c7e9fd --- /dev/null +++ b/src/components/examples/code-block/code-block-lines.astro @@ -0,0 +1,20 @@ +--- +import { + CodeBlock, + CodeBlockContent, + CodeBlockLine, +} from "@/components/ui/code-block" +--- + + + + export const site = { + {' title: "Our website",'} + + {' title: "Our new website",'} + + + {' lang: "en",'} + } + + diff --git a/src/components/examples/code-block/code-block-numbered.astro b/src/components/examples/code-block/code-block-numbered.astro new file mode 100644 index 000000000..ae8120e85 --- /dev/null +++ b/src/components/examples/code-block/code-block-numbered.astro @@ -0,0 +1,13 @@ +--- +import { CodeBlock, CodeBlockContent } from "@/components/ui/code-block" + +const code = `{ + "name": "our-website", + + "private": true +}` +--- + + + + diff --git a/src/components/examples/code-block/code-block-wrap.astro b/src/components/examples/code-block/code-block-wrap.astro new file mode 100644 index 000000000..e82ac9e3c --- /dev/null +++ b/src/components/examples/code-block/code-block-wrap.astro @@ -0,0 +1,20 @@ +--- +import { + CodeBlock, + CodeBlockActions, + CodeBlockContent, + CodeBlockCopyButton, + CodeBlockFooter, +} from "@/components/ui/code-block" + +const code = + "A long explanation can wrap inside a code block without making the surrounding article or the page scroll horizontally." +--- + + + + + + + Plain text, with line wrapping. + diff --git a/src/components/examples/collapsible/collapsible-dismissal.astro b/src/components/examples/collapsible/collapsible-dismissal.astro new file mode 100644 index 000000000..9ef19475f --- /dev/null +++ b/src/components/examples/collapsible/collapsible-dismissal.astro @@ -0,0 +1,46 @@ +--- +import ChevronDownIcon from "@lucide/astro/icons/chevron-down" + +import { buttonVariants } from "@/components/ui/button" +import { + Collapsible, + CollapsibleContent, + CollapsibleTrigger, +} from "@/components/ui/collapsible" +--- + +
+ + + Browse documentation + + + + + + +

+ Open the panel, then press Escape or click outside it to close. +

+
diff --git a/src/components/examples/progress/progress-custom-max.astro b/src/components/examples/progress/progress-custom-max.astro new file mode 100644 index 000000000..509627c35 --- /dev/null +++ b/src/components/examples/progress/progress-custom-max.astro @@ -0,0 +1,12 @@ +--- +import { Progress } from "@/components/ui/progress" +--- + + diff --git a/src/components/examples/progress/progress-demo.astro b/src/components/examples/progress/progress-demo.astro new file mode 100644 index 000000000..fec3aad4e --- /dev/null +++ b/src/components/examples/progress/progress-demo.astro @@ -0,0 +1,10 @@ +--- +import { Progress } from "@/components/ui/progress" +--- + + diff --git a/src/components/examples/progress/progress-indeterminate.astro b/src/components/examples/progress/progress-indeterminate.astro new file mode 100644 index 000000000..1a0d6e057 --- /dev/null +++ b/src/components/examples/progress/progress-indeterminate.astro @@ -0,0 +1,5 @@ +--- +import { Progress } from "@/components/ui/progress" +--- + + diff --git a/src/components/examples/progress/progress-rtl.astro b/src/components/examples/progress/progress-rtl.astro new file mode 100644 index 000000000..010093d5e --- /dev/null +++ b/src/components/examples/progress/progress-rtl.astro @@ -0,0 +1,11 @@ +--- +import { Progress } from "@/components/ui/progress" +--- + + diff --git a/src/components/ui/code-block/code-block-actions.astro b/src/components/ui/code-block/code-block-actions.astro new file mode 100644 index 000000000..545e4a793 --- /dev/null +++ b/src/components/ui/code-block/code-block-actions.astro @@ -0,0 +1,19 @@ +--- +import type { HTMLAttributes } from "astro/types" + +import { cn } from "@/lib/utils" + +type Props = HTMLAttributes<"div"> +const { class: className, ...props } = Astro.props +--- + +
&]:absolute [[data-slot=code-block]>&]:z-10 [[data-slot=code-block]>&]:opacity-0 [[data-slot=code-block]>&]:transition-opacity [[data-slot=code-block]>&]:group-focus-within/code-block:opacity-100 [[data-slot=code-block]>&]:group-hover/code-block:opacity-100 [[data-slot=code-block]>&]:pointer-coarse:opacity-100", + className + )} + {...props} +> + +
diff --git a/src/components/ui/code-block/code-block-content.astro b/src/components/ui/code-block/code-block-content.astro new file mode 100644 index 000000000..aac155a3b --- /dev/null +++ b/src/components/ui/code-block/code-block-content.astro @@ -0,0 +1,44 @@ +--- +/* eslint-disable astro/jsx-a11y/no-noninteractive-tabindex -- Focusable code supports keyboard scrolling, as in shadcn/ui. */ +import type { HTMLAttributes } from "astro/types" + +import { cn } from "@/lib/utils" + +import CodeBlockLine from "./code-block-line.astro" + +type Props = HTMLAttributes<"pre"> & { + code?: string + wrap?: boolean + lineNumbers?: boolean + startLine?: number +} + +const { + class: className, + code, + wrap = false, + lineNumbers = false, + startLine = 1, + style, + ...props +} = Astro.props + +const contentStyle = + typeof style === "string" + ? `counter-reset: line ${startLine - 1}; ${style}` + : { counterReset: `line ${startLine - 1}`, ...style } +--- + +
{code !== undefined ? lineNumbers ? code.replace(/\n$/, "").split("\n").map((line) => {line}) : code : }
diff --git a/src/components/ui/code-block/code-block-copy-button.astro b/src/components/ui/code-block/code-block-copy-button.astro new file mode 100644 index 000000000..43dc6b529 --- /dev/null +++ b/src/components/ui/code-block/code-block-copy-button.astro @@ -0,0 +1,88 @@ +--- +import type { HTMLAttributes } from "astro/types" +import CheckIcon from "@lucide/astro/icons/check" +import CopyIcon from "@lucide/astro/icons/copy" + +import { cn } from "@/lib/utils" +import { Button, type ButtonVariantProps } from "@/components/ui/button" + +type Props = Omit, "value" | "type"> & + ButtonVariantProps & { + value: string + copyLabel?: string + copiedLabel?: string + errorLabel?: string + } + +const { + class: className, + value, + variant = "ghost", + size = "icon-xs", + copyLabel = "Copy", + copiedLabel = "Copied", + errorLabel = "Could not copy", + ...props +} = Astro.props +--- + + + + + diff --git a/src/components/ui/code-block/code-block-footer.astro b/src/components/ui/code-block/code-block-footer.astro new file mode 100644 index 000000000..14b17471f --- /dev/null +++ b/src/components/ui/code-block/code-block-footer.astro @@ -0,0 +1,19 @@ +--- +import type { HTMLAttributes } from "astro/types" + +import { cn } from "@/lib/utils" + +type Props = HTMLAttributes<"div"> +const { class: className, ...props } = Astro.props +--- + +
+ +
diff --git a/src/components/ui/code-block/code-block-header.astro b/src/components/ui/code-block/code-block-header.astro new file mode 100644 index 000000000..a539ae0e9 --- /dev/null +++ b/src/components/ui/code-block/code-block-header.astro @@ -0,0 +1,19 @@ +--- +import type { HTMLAttributes } from "astro/types" + +import { cn } from "@/lib/utils" + +type Props = HTMLAttributes<"div"> +const { class: className, ...props } = Astro.props +--- + +
[data-slot=code-block-title]]:min-w-0", + className + )} + {...props} +> + +
diff --git a/src/components/ui/code-block/code-block-line.astro b/src/components/ui/code-block/code-block-line.astro new file mode 100644 index 000000000..57fa8d814 --- /dev/null +++ b/src/components/ui/code-block/code-block-line.astro @@ -0,0 +1,36 @@ +--- +import type { HTMLAttributes } from "astro/types" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const variants = cva( + "cn-code-block-line relative block min-h-lh before:select-none after:absolute after:top-0 after:select-none in-data-numbered:col-span-2 in-data-numbered:grid in-data-numbered:grid-cols-subgrid in-data-numbered:[counter-increment:line] in-data-numbered:before:content-[counter(line)] in-data-numbered:supports-[content:counter(line)_/_'']:before:content-[counter(line)_/_'']", + { + variants: { + variant: { + default: "", + added: "cn-code-block-line-variant-added", + removed: "cn-code-block-line-variant-removed", + highlighted: "cn-code-block-line-variant-highlighted", + }, + }, + defaultVariants: { variant: "default" }, + } +) + +type Props = HTMLAttributes<"span"> & VariantProps +const { class: className, variant = "default", ...props } = Astro.props +--- + + + + + {"\n"} + + diff --git a/src/components/ui/code-block/code-block-title.astro b/src/components/ui/code-block/code-block-title.astro new file mode 100644 index 000000000..2bb357ea0 --- /dev/null +++ b/src/components/ui/code-block/code-block-title.astro @@ -0,0 +1,19 @@ +--- +import type { HTMLAttributes } from "astro/types" + +import { cn } from "@/lib/utils" + +type Props = HTMLAttributes<"div"> +const { class: className, ...props } = Astro.props +--- + +
+ +
diff --git a/src/components/ui/code-block/code-block.astro b/src/components/ui/code-block/code-block.astro new file mode 100644 index 000000000..a35f2eb3c --- /dev/null +++ b/src/components/ui/code-block/code-block.astro @@ -0,0 +1,41 @@ +--- +import type { HTMLAttributes } from "astro/types" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const variants = cva( + "cn-code-block group/code-block relative flex w-full min-w-0 flex-col overflow-hidden", + { + variants: { + variant: { + default: "cn-code-block-variant-default", + destructive: "cn-code-block-variant-destructive", + }, + }, + defaultVariants: { variant: "default" }, + } +) + +type Props = HTMLAttributes<"div"> & + VariantProps & { + size?: "default" | "sm" + } + +const { + class: className, + variant = "default", + size = "default", + ...props +} = Astro.props +--- + +
+ +
diff --git a/src/components/ui/code-block/index.ts b/src/components/ui/code-block/index.ts new file mode 100644 index 000000000..c6a35dc69 --- /dev/null +++ b/src/components/ui/code-block/index.ts @@ -0,0 +1,8 @@ +export { default as CodeBlock } from "./code-block.astro" +export { default as CodeBlockHeader } from "./code-block-header.astro" +export { default as CodeBlockTitle } from "./code-block-title.astro" +export { default as CodeBlockActions } from "./code-block-actions.astro" +export { default as CodeBlockCopyButton } from "./code-block-copy-button.astro" +export { default as CodeBlockContent } from "./code-block-content.astro" +export { default as CodeBlockLine } from "./code-block-line.astro" +export { default as CodeBlockFooter } from "./code-block-footer.astro" diff --git a/src/components/ui/collapsible/collapsible.astro b/src/components/ui/collapsible/collapsible.astro index 3f07da92f..172c8c5e0 100644 --- a/src/components/ui/collapsible/collapsible.astro +++ b/src/components/ui/collapsible/collapsible.astro @@ -8,6 +8,8 @@ type Props = HTMLAttributes<"div"> & { as?: "div" | "li" defaultOpen?: boolean hiddenUntilFound?: boolean + closeOnEscape?: boolean + closeOnClickOutside?: boolean } const { @@ -15,6 +17,8 @@ const { class: className, defaultOpen, hiddenUntilFound, + closeOnEscape, + closeOnClickOutside, ...props } = Astro.props --- @@ -23,6 +27,8 @@ const { data-slot="collapsible" data-default-open={defaultOpen} data-hidden-until-found={hiddenUntilFound} + data-close-on-escape={closeOnEscape} + data-close-on-click-outside={closeOnClickOutside} class={cn(className)} {...props} > diff --git a/src/components/ui/combobox/combobox-input.astro b/src/components/ui/combobox/combobox-input.astro index 6a84044c3..cc33f4211 100644 --- a/src/components/ui/combobox/combobox-input.astro +++ b/src/components/ui/combobox/combobox-input.astro @@ -15,6 +15,7 @@ import ComboboxTrigger from "./combobox-trigger.astro" type Props = HTMLAttributes<"input"> & { showTrigger?: boolean showClear?: boolean + clearLabel?: string } const { @@ -23,6 +24,7 @@ const { disabled = false, showTrigger = true, showClear = false, + clearLabel = "Clear selection", ...props } = Astro.props --- @@ -42,7 +44,10 @@ const { {showTrigger && ( )} @@ -52,9 +57,11 @@ const { variant="ghost" size="icon-xs" data-slot="combobox-clear" + aria-label={clearLabel} + class="hidden group-data-[value]/combobox:inline-flex" disabled={disabled} > - + diff --git a/src/components/ui/progress/index.ts b/src/components/ui/progress/index.ts new file mode 100644 index 000000000..9b9c69b33 --- /dev/null +++ b/src/components/ui/progress/index.ts @@ -0,0 +1 @@ +export { default as Progress } from "./progress.astro" diff --git a/src/components/ui/progress/progress.astro b/src/components/ui/progress/progress.astro new file mode 100644 index 000000000..c6ed01677 --- /dev/null +++ b/src/components/ui/progress/progress.astro @@ -0,0 +1,83 @@ +--- +import type { HTMLAttributes } from "astro/types" + +import { cn } from "@/lib/utils" + +type Props = HTMLAttributes<"div"> & { + value?: number | null + max?: number + label?: string + showValue?: boolean +} + +const { + class: className, + value, + max = 100, + label, + showValue = false, + "aria-label": ariaLabel = label || "Progress", + "aria-labelledby": ariaLabelledby, + "aria-valuetext": ariaValueText, + ...props +} = Astro.props + +const resolvedMax = Number.isFinite(max) && max > 0 ? max : 100 +const resolvedValue = + typeof value === "number" && Number.isFinite(value) + ? Math.min(resolvedMax, Math.max(0, value)) + : undefined +const percentage = + resolvedValue === undefined ? undefined : (resolvedValue / resolvedMax) * 100 +const stateAttributes = { + "data-indeterminate": resolvedValue === undefined ? "" : undefined, + "data-complete": resolvedValue === resolvedMax ? "" : undefined, + "data-progressing": + resolvedValue !== undefined && resolvedValue < resolvedMax ? "" : undefined, +} +--- + +
+ + {label && ( + + {label} + + )} + {showValue && percentage !== undefined && ( + + )} + + +
diff --git a/src/content/globals/en.yaml b/src/content/globals/en.yaml index 2a65c763e..b5c21b190 100644 --- a/src/content/globals/en.yaml +++ b/src/content/globals/en.yaml @@ -74,6 +74,8 @@ sidebar: href: /components/carousel/ - label: Checkbox href: /components/checkbox/ + - label: Code Block + href: /components/code-block/ - label: Collapsible href: /components/collapsible/ - label: Combobox @@ -124,6 +126,8 @@ sidebar: href: /components/popover/ - label: Price href: /components/price/ + - label: Progress + href: /components/progress/ - label: Radio Group href: /components/radio-group/ - label: Rating diff --git a/src/content/pages/components/code-block.mdx b/src/content/pages/components/code-block.mdx new file mode 100644 index 000000000..df477fa67 --- /dev/null +++ b/src/content/pages/components/code-block.mdx @@ -0,0 +1,94 @@ +--- +type: doc +title: Code Block +description: Code and plain-text snippets with copy actions, line numbers and highlighted lines. +--- + + + +## Installation + +```bash +npx shadcn@latest add @fulldev/code-block +``` + +## Usage + +```astro +--- +import { + CodeBlock, + CodeBlockActions, + CodeBlockContent, + CodeBlockCopyButton, + CodeBlockHeader, + CodeBlockTitle, +} from "@/components/ui/code-block" + +const code = "const greeting = 'Hello'" +--- + + + + greeting.ts + + + + + + +``` + +`CodeBlockContent` renders escaped text from `code`, or accepts composed +`CodeBlockLine` children in its slot. Code stays left to right inside an RTL +page. The content scrolls by keyboard; floating actions appear on hover, +focus and touch screens. Copying requires HTTPS or localhost. + +## Line numbers + +Set `lineNumbers` to split `code` into numbered lines. Use `startLine` for an +excerpt from the middle of a file. Numbers are CSS counters and are excluded +from copied text. + + + +## Highlighted lines and diffs + +Import `CodeBlockLine` and set its `variant` to `highlighted`, `added` or +`removed`. Add `lineNumbers` to the content to number composed lines. +Diff markers are excluded from copied text. Empty lines preserve a newline. +Use string expressions inside composed lines to preserve indentation. + + + +The component renders plain text by default. Syntax highlighting is optional: +pass server-highlighted token markup inside each `CodeBlockLine`. The React +`useHighlightedCode` hook is not needed in Astro. + +## Wrapping and size + +Long lines scroll by default. Set `wrap` on the content to wrap them, or add a +`max-h-*` class to limit the content height. Use `size="sm"` on `CodeBlock` for +a compact snippet, `variant="destructive"` for error output, and +`CodeBlockFooter` for a caption or additional actions. + +Without a header, put `CodeBlockActions` directly inside `CodeBlock` for +floating actions. + + + +## API Reference + +Source: [`src/components/ui/code-block`](https://github.com/fulldotdev/ui/tree/main/src/components/ui/code-block) + +| Component | Props | Default | +| --------------------- | -------------------------------------------------------------------------------- | ---------------------- | +| `CodeBlock` | `variant: "default" \| "destructive"`, `size: "default" \| "sm"` | `"default"` | +| `CodeBlockContent` | `code?: string`, `wrap?: boolean`, `lineNumbers?: boolean`, `startLine?: number` | `false`, `false`, `1` | +| `CodeBlockLine` | `variant: "default" \| "highlighted" \| "added" \| "removed"` | `"default"` | +| `CodeBlockCopyButton` | `value: string`, Button `variant` and `size` | `"ghost"`, `"icon-xs"` | + +`CodeBlockCopyButton` also accepts `copyLabel`, `copiedLabel` and `errorLabel` +for translation. Its live region announces successful or failed copies, and +its success state resets after two seconds. Header, title, actions and footer +forward HTML attributes and `class` to their root. diff --git a/src/content/pages/components/collapsible.mdx b/src/content/pages/components/collapsible.mdx index 2cc050134..f82847c11 100644 --- a/src/content/pages/components/collapsible.mdx +++ b/src/content/pages/components/collapsible.mdx @@ -56,6 +56,15 @@ event with `{ open: boolean }` to open or close it from a script. ``` +## Dismissal + +Use `closeOnEscape` and `closeOnClickOutside` for disclosures such as a navigation +panel. Both are off by default. Escape returns focus to the trigger when focus +was inside the collapsible. Nested popovers and dialogs close before the panel, +and their portaled content counts as inside it. + + + ## Basic Style the open state with `data-[state=open]:` on the root and @@ -83,10 +92,12 @@ Use nested collapsibles to build a file tree. Source: [`src/components/ui/collapsible`](https://github.com/fulldotdev/ui/tree/main/src/components/ui/collapsible) -| Prop | Type | Default | Description | -| ------------------ | --------- | ------- | ------------------------------------------------------------ | -| `defaultOpen` | `boolean` | `false` | Opens the content on first load. | -| `hiddenUntilFound` | `boolean` | `false` | Uses `hidden="until-found"` so find-in-page reveals content. | +| Prop | Type | Default | Description | +| --------------------- | --------- | ------- | ------------------------------------------------------------------------- | +| `defaultOpen` | `boolean` | `false` | Opens the content on first load. | +| `hiddenUntilFound` | `boolean` | `false` | Uses `hidden="until-found"` so find-in-page reveals content. | +| `closeOnEscape` | `boolean` | `false` | Closes on Escape and restores focus to the trigger when focus was inside. | +| `closeOnClickOutside` | `boolean` | `false` | Closes on a pointer press outside the collapsible. | The root and the content get `data-state="open"` or `data-state="closed"`, and the trigger gets `aria-expanded`. See the diff --git a/src/content/pages/components/combobox.mdx b/src/content/pages/components/combobox.mdx index 9093f6bcb..84396af37 100644 --- a/src/content/pages/components/combobox.mdx +++ b/src/content/pages/components/combobox.mdx @@ -91,7 +91,10 @@ The Astro combobox has no multiple selection or chips, so the official Multiple ## Clear Button -Use the `showClear` prop on `ComboboxInput` to show a clear button. +Use the `showClear` prop on `ComboboxInput` to show a clear button while a value +is selected. Clearing returns focus to the input and shows its trigger again. +Set `clearLabel` to translate its accessible label, which defaults to +`"Clear selection"`. @@ -148,15 +151,15 @@ Source: [`src/components/ui/combobox`](https://github.com/fulldotdev/ui/tree/mai Interactivity comes from [`@data-slot/combobox`](https://github.com/bejamas/data-slot/blob/main/packages/combobox/README.md). -| Component | Prop | Notes | -| ----------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------- | -| `Combobox` | `defaultValue`, `defaultOpen`, `placeholder`, `disabled`, `required`, `name` | `name` adds a hidden input that submits the value | -| `Combobox` | `openOnFocus`, `autoHighlight` | `openOnFocus` defaults to `true` | -| `Combobox` | `side`, `align`, `sideOffset`, `alignOffset`, `avoidCollisions`, `collisionPadding` | Popup placement, also accepted on `ComboboxContent` | -| `ComboboxInput` | `showTrigger` (`true`), `showClear` (`false`), `disabled`, input attributes | Extra children render inside the input group | -| `ComboboxItem` | `value`, `disabled`, `showIndicator` (`true`), `data-label` | Without `data-label`, the item text is the label | -| `ComboboxTrigger` | `showIcon` (`true`) | Ghost icon button with a chevron | -| `ComboboxValue` | span attributes | Shows the selected label, or `placeholder` when empty | +| Component | Prop | Notes | +| ----------------- | --------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- | +| `Combobox` | `defaultValue`, `defaultOpen`, `placeholder`, `disabled`, `required`, `name` | `name` adds a hidden input that submits the value | +| `Combobox` | `openOnFocus`, `autoHighlight` | `openOnFocus` defaults to `true` | +| `Combobox` | `side`, `align`, `sideOffset`, `alignOffset`, `avoidCollisions`, `collisionPadding` | Popup placement, also accepted on `ComboboxContent` | +| `ComboboxInput` | `showTrigger` (`true`), `showClear` (`false`), `clearLabel` (`"Clear selection"`), `disabled`, input attributes | Extra children render inside the input group | +| `ComboboxItem` | `value`, `disabled`, `showIndicator` (`true`), `data-label` | Without `data-label`, the item text is the label | +| `ComboboxTrigger` | `showIcon` (`true`) | Ghost icon button with a chevron | +| `ComboboxValue` | span attributes | Shows the selected label, or `placeholder` when empty | The root emits `combobox:change`, `combobox:open-change` and `combobox:input-change`, and accepts `combobox:set` with `value`, `open` or diff --git a/src/content/pages/components/progress.mdx b/src/content/pages/components/progress.mdx new file mode 100644 index 000000000..99d34693d --- /dev/null +++ b/src/content/pages/components/progress.mdx @@ -0,0 +1,73 @@ +--- +type: doc +title: Progress +description: Shows how much of a task or sequence is complete. +--- + + + +## Installation + +```bash +npx shadcn@latest add @fulldev/progress +``` + +## Usage + +```ts +import { Progress } from "@/components/ui/progress" +``` + +```astro + +``` + +`label` supplies a visible label and the accessible name. Use `aria-label` or +`aria-labelledby` when the label is elsewhere. The fallback accessible name is +`"Progress"`. + +## Indeterminate + +Omit `value` or pass `null` when the amount of progress is unknown. The full-width +indicator pulses only when the visitor allows motion. No percentage is shown, +and the native progress control has no `value` attribute. + + + +## Custom Maximum + +Set `max` to show progress through a fixed number of steps. `showValue` displays +the percentage; use `aria-valuetext` to describe the count in words. + + + +## RTL + +The label, value and indicator follow the document direction. + + + +## API Reference + +Source: [`src/components/ui/progress`](https://github.com/fulldotdev/ui/tree/main/src/components/ui/progress) + +| Prop | Type | Default | Description | +| ----------- | ---------------- | ------- | ---------------------------------------------------------------------- | +| `value` | `number \| null` | | Current value. Omitted, `null` or non-finite values are indeterminate. | +| `max` | `number` | `100` | Maximum value. Non-positive or non-finite values fall back to `100`. | +| `label` | `string` | | Visible label and default accessible name. | +| `showValue` | `boolean` | `false` | Shows a rounded percentage for a known value. | + +Finite values are clamped between `0` and `max`. Standard attributes and `class` +are forwarded to the root. The default slot renders before the track. + +The root, track and indicator expose `data-indeterminate`, `data-progressing` or +`data-complete` for their current state. The other parts use `data-slot` values +`progress-label` and `progress-value`. + +This Astro component renders its value on the server. A visually hidden native +`progress` control supplies its accessible semantics; the visible track and +indicator use the selected shadcn/ui style. It composes the label, value, track +and indicator through props and a slot without a client script. +See the [shadcn/ui Progress documentation](https://ui.shadcn.com/docs/components/base/progress) +for the upstream design. diff --git a/src/lib/presets.ts b/src/lib/presets.ts index b946e6b9d..610fc8e1a 100644 --- a/src/lib/presets.ts +++ b/src/lib/presets.ts @@ -73,14 +73,13 @@ export const STYLE_OPTIONS = PRESET_STYLES.map((name) => ({ export const FONTS = fonts // Fulldev UI serves the Base UI library and uses Lucide icons. -// The docs default: the preset closest to the full.dev websites (bJfEY5IW in -// fulldotdev/fulldev packages/web/DESIGN.md) with translucent menus. Installs -// keep the theme of the registry's init item. +// The docs default: the full.dev website treatment with Fulldev UI's orange +// product color and translucent menus. Installs keep the registry's theme. export const DEFAULT_CONFIG: PresetConfig = { ...DEFAULT_PRESET_CONFIG, style: "vega", baseColor: "stone", - theme: "blue", + theme: "orange", chartColor: "stone", font: "geist", fontHeading: "inherit", diff --git a/src/styles/global.css b/src/styles/global.css index d0f6810d7..1838f9ab4 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -121,6 +121,11 @@ --shadow-2xl: 0 1px 3px 0px hsl(0 0% 0% / 0.25); } +/* Fulldev UI's logo keeps its product color across docs presets. */ +:root { + --fd-brand: #d63c00; +} + /* Not inline, so a docs preset can change the heading font at runtime. */ @theme { --font-heading: var(--font-sans); diff --git a/tests/browser/content-components.test.mjs b/tests/browser/content-components.test.mjs new file mode 100644 index 000000000..95c5f6d7a --- /dev/null +++ b/tests/browser/content-components.test.mjs @@ -0,0 +1,295 @@ +// Run after `vp run build`. Checks the content components in the rendered docs +// across Chromium, Firefox and WebKit, including keyboard and clipboard flows. +import assert from "node:assert/strict" +import { createReadStream, existsSync, statSync } from "node:fs" +import { createServer } from "node:http" +import { extname, join, resolve } from "node:path" +import { after, before, test } from "node:test" +import { chromium, firefox, webkit } from "playwright" + +const root = resolve(process.env.DIST ?? "dist") +const types = { + ".html": "text/html; charset=utf-8", + ".css": "text/css", + ".js": "text/javascript", + ".svg": "image/svg+xml", + ".woff2": "font/woff2", +} +const server = createServer((request, response) => { + let file = join( + root, + decodeURIComponent(new URL(request.url, "http://localhost").pathname) + ) + if (existsSync(file) && statSync(file).isDirectory()) + file = join(file, "index.html") + if (!file.startsWith(root) || !existsSync(file)) { + response.writeHead(404).end() + return + } + response.writeHead(200, { + "content-type": types[extname(file)] ?? "application/octet-stream", + }) + createReadStream(file).pipe(response) +}) +let origin +before(async () => { + await new Promise((done) => server.listen(0, "127.0.0.1", done)) + origin = `http://127.0.0.1:${server.address().port}` +}) +after(() => server.close()) + +for (const browserType of [chromium, firefox, webkit]) { + test(`${browserType.name()} content components`, async (t) => { + const browser = await browserType.launch() + t.after(() => browser.close()) + const page = await browser.newPage() + const errors = [] + page.on("pageerror", (error) => errors.push(error.message)) + + await t.test( + "code is escaped, numbered, wrapped and copied by keyboard", + async () => { + await page.addInitScript(() => { + Object.defineProperty(navigator, "clipboard", { + configurable: true, + value: { + writeText: async (value) => { + window.copiedText = value + }, + }, + }) + }) + await page.goto(`${origin}/components/code-block/`) + const content = page.locator('[data-slot="code-block-content"]').first() + await content.waitFor({ state: "visible" }) + assert.equal(await content.locator("button").count(), 0) + assert.match(await content.textContent(), /