├── .all-contributorsrc ├── .changeset ├── README.md └── config.json ├── .eslintignore ├── .eslintrc.js ├── .github ├── composite-actions │ └── install │ │ └── action.yml ├── dependabot.yml └── workflows │ ├── checks.yml │ ├── dependabot-auto-merge.yml │ └── release.yml ├── .gitignore ├── .husky └── pre-commit ├── .npmrc ├── .prettierignore ├── .prettierrc.js ├── LICENSE.md ├── README.md ├── apps └── docs │ ├── .eslintrc │ ├── .gitignore │ ├── contentlayer.config.ts │ ├── next-env.d.ts │ ├── next.config.mjs │ ├── package.json │ ├── panda.config.ts │ ├── postcss.config.cjs │ ├── public │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── icon-192x192.png │ ├── icon-512x512.png │ ├── images │ │ ├── top_dark.png │ │ └── top_light.png │ └── site.webmanifest │ ├── src │ ├── app │ │ ├── apple-icon.png │ │ ├── docs │ │ │ ├── [[...slug]] │ │ │ │ └── page.tsx │ │ │ └── layout.tsx │ │ ├── favicon.ico │ │ ├── icon.svg │ │ ├── layout.tsx │ │ ├── og │ │ │ └── docs │ │ │ │ └── [[...slug]] │ │ │ │ └── route.tsx │ │ ├── opengraph-image.alt.txt │ │ ├── opengraph-image.png │ │ ├── page.tsx │ │ ├── robots.ts │ │ ├── sitemap.ts │ │ ├── theme-provider.tsx │ │ ├── twitter-image.alt.txt │ │ └── twitter-image.png │ ├── assets │ │ ├── Poppins-Bold.ttf │ │ └── Poppins-Medium.ttf │ ├── components │ │ ├── docs │ │ │ ├── callout │ │ │ │ └── index.tsx │ │ │ ├── command-menu │ │ │ │ └── index.tsx │ │ │ ├── component-preview │ │ │ │ └── index.tsx │ │ │ ├── component-source │ │ │ │ └── index.tsx │ │ │ ├── copy-button │ │ │ │ └── index.tsx │ │ │ ├── footer │ │ │ │ └── index.tsx │ │ │ ├── header-nav │ │ │ │ └── index.tsx │ │ │ ├── header │ │ │ │ └── index.tsx │ │ │ ├── icons │ │ │ │ └── index.tsx │ │ │ ├── lead │ │ │ │ └── index.tsx │ │ │ ├── loading-text │ │ │ │ └── index.tsx │ │ │ ├── mdx-component │ │ │ │ ├── components.tsx │ │ │ │ └── index.tsx │ │ │ ├── mobile-header-nav │ │ │ │ └── index.tsx │ │ │ ├── mobile-sidebar-toggle │ │ │ │ └── index.tsx │ │ │ ├── mode-toggle │ │ │ │ └── index.tsx │ │ │ ├── pager │ │ │ │ └── index.tsx │ │ │ ├── preview │ │ │ │ └── index.tsx │ │ │ ├── reference-badges │ │ │ │ └── index.tsx │ │ │ ├── sidebar-nav │ │ │ │ └── index.tsx │ │ │ ├── steps │ │ │ │ └── index.tsx │ │ │ ├── tabs │ │ │ │ ├── index.tsx │ │ │ │ └── wrapper.ts │ │ │ ├── toc │ │ │ │ └── index.tsx │ │ │ └── typography-preview │ │ │ │ └── index.tsx │ │ ├── previews │ │ │ ├── accordion │ │ │ │ └── index.tsx │ │ │ ├── alert-dialog │ │ │ │ └── index.tsx │ │ │ ├── alert │ │ │ │ ├── destructive.tsx │ │ │ │ └── index.tsx │ │ │ ├── aspect-ratio │ │ │ │ └── index.tsx │ │ │ ├── avatar │ │ │ │ └── index.tsx │ │ │ ├── badge │ │ │ │ ├── destructive.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── outline.tsx │ │ │ │ ├── secondary.tsx │ │ │ │ └── with-icon.tsx │ │ │ ├── button │ │ │ │ ├── as-child.tsx │ │ │ │ ├── destructive.tsx │ │ │ │ ├── ghost.tsx │ │ │ │ ├── icon.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── link.tsx │ │ │ │ ├── loading.tsx │ │ │ │ ├── outline.tsx │ │ │ │ ├── secondary.tsx │ │ │ │ └── with-icon.tsx │ │ │ ├── calendar │ │ │ │ └── index.tsx │ │ │ ├── card │ │ │ │ ├── example.tsx │ │ │ │ └── index.tsx │ │ │ ├── checkbox │ │ │ │ ├── disabled.tsx │ │ │ │ ├── form-multiple.tsx │ │ │ │ ├── form-single.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── with-text.tsx │ │ │ ├── collapsible │ │ │ │ └── index.tsx │ │ │ ├── combobox │ │ │ │ ├── dropdown-menu.tsx │ │ │ │ ├── form.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── popover.tsx │ │ │ ├── command │ │ │ │ ├── dialog.tsx │ │ │ │ └── index.tsx │ │ │ ├── context-menu │ │ │ │ └── index.tsx │ │ │ ├── data-table │ │ │ │ ├── column-header.tsx │ │ │ │ ├── column-toggle.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── pagination.tsx │ │ │ ├── date-picker │ │ │ │ ├── date-range-picker.tsx │ │ │ │ ├── form.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── with-presets.tsx │ │ │ ├── dialog │ │ │ │ └── index.tsx │ │ │ ├── dropdown-menu │ │ │ │ ├── checkboxes.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── radio-group.tsx │ │ │ ├── form │ │ │ │ └── index.tsx │ │ │ ├── hover-card │ │ │ │ └── index.tsx │ │ │ ├── input │ │ │ │ ├── disabled.tsx │ │ │ │ ├── file.tsx │ │ │ │ ├── form.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── with-button.tsx │ │ │ │ └── with-label.tsx │ │ │ ├── label │ │ │ │ └── index.tsx │ │ │ ├── menubar │ │ │ │ └── index.tsx │ │ │ ├── navigation-menu │ │ │ │ └── index.tsx │ │ │ ├── popover │ │ │ │ └── index.tsx │ │ │ ├── progress │ │ │ │ └── index.tsx │ │ │ ├── radio-group │ │ │ │ ├── form.tsx │ │ │ │ └── index.tsx │ │ │ ├── scroll-area │ │ │ │ └── index.tsx │ │ │ ├── select │ │ │ │ ├── form.tsx │ │ │ │ └── index.tsx │ │ │ ├── separator │ │ │ │ └── index.tsx │ │ │ ├── sheet │ │ │ │ ├── index.tsx │ │ │ │ └── side.tsx │ │ │ ├── skeleton │ │ │ │ └── index.tsx │ │ │ ├── slider │ │ │ │ └── index.tsx │ │ │ ├── switch │ │ │ │ ├── disabled.tsx │ │ │ │ ├── form.tsx │ │ │ │ └── index.tsx │ │ │ ├── table │ │ │ │ └── index.tsx │ │ │ ├── tabs │ │ │ │ ├── alternate-styles.tsx │ │ │ │ └── index.tsx │ │ │ ├── textarea │ │ │ │ ├── disabled.tsx │ │ │ │ ├── form.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── with-button.tsx │ │ │ │ ├── with-label.tsx │ │ │ │ └── with-text.tsx │ │ │ ├── toast │ │ │ │ ├── destructive.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── simple.tsx │ │ │ │ ├── with-action.tsx │ │ │ │ └── with-title.tsx │ │ │ ├── toggle │ │ │ │ ├── disabled.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── large.tsx │ │ │ │ ├── outline.tsx │ │ │ │ ├── small.tsx │ │ │ │ └── with-text.tsx │ │ │ ├── tooltip │ │ │ │ └── index.tsx │ │ │ └── typography │ │ │ │ ├── blockquote.tsx │ │ │ │ ├── h1-text-style.tsx │ │ │ │ ├── h1.tsx │ │ │ │ ├── h2-text-style.tsx │ │ │ │ ├── h2.tsx │ │ │ │ ├── h3-text-style.tsx │ │ │ │ ├── h3.tsx │ │ │ │ ├── h4-text-style.tsx │ │ │ │ ├── h4.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── inline-code.tsx │ │ │ │ ├── large-text-style.tsx │ │ │ │ ├── large.tsx │ │ │ │ ├── lead-text-style.tsx │ │ │ │ ├── lead.tsx │ │ │ │ ├── list.tsx │ │ │ │ ├── muted.tsx │ │ │ │ ├── p-text-style.tsx │ │ │ │ ├── p.tsx │ │ │ │ ├── small-text-style.tsx │ │ │ │ ├── small.tsx │ │ │ │ └── table.tsx │ │ └── ui │ │ │ ├── accordion │ │ │ └── index.tsx │ │ │ ├── alert-dialog │ │ │ └── index.tsx │ │ │ ├── alert │ │ │ └── index.tsx │ │ │ ├── aspect-ratio │ │ │ └── index.tsx │ │ │ ├── avatar │ │ │ └── index.tsx │ │ │ ├── badge │ │ │ └── index.tsx │ │ │ ├── button │ │ │ └── index.tsx │ │ │ ├── calendar │ │ │ └── index.tsx │ │ │ ├── card │ │ │ └── index.tsx │ │ │ ├── checkbox │ │ │ └── index.tsx │ │ │ ├── collapsible │ │ │ └── index.tsx │ │ │ ├── command │ │ │ └── index.tsx │ │ │ ├── context-menu │ │ │ └── index.tsx │ │ │ ├── dialog │ │ │ └── index.tsx │ │ │ ├── dropdown-menu │ │ │ └── index.tsx │ │ │ ├── form │ │ │ └── index.tsx │ │ │ ├── hover-card │ │ │ └── index.tsx │ │ │ ├── input │ │ │ └── index.tsx │ │ │ ├── label │ │ │ └── index.tsx │ │ │ ├── menubar │ │ │ └── index.tsx │ │ │ ├── navigation-menu │ │ │ └── index.tsx │ │ │ ├── popover │ │ │ └── index.tsx │ │ │ ├── progress │ │ │ └── index.tsx │ │ │ ├── radio-group │ │ │ └── index.tsx │ │ │ ├── scroll-area │ │ │ └── index.tsx │ │ │ ├── select │ │ │ └── index.tsx │ │ │ ├── separator │ │ │ └── index.tsx │ │ │ ├── sheet │ │ │ └── index.tsx │ │ │ ├── skeleton │ │ │ └── index.tsx │ │ │ ├── slider │ │ │ └── index.tsx │ │ │ ├── switch │ │ │ └── index.tsx │ │ │ ├── table │ │ │ └── index.tsx │ │ │ ├── tabs │ │ │ └── index.tsx │ │ │ ├── textarea │ │ │ └── index.tsx │ │ │ ├── toast │ │ │ ├── index.tsx │ │ │ ├── toaster.tsx │ │ │ └── use-toast.tsx │ │ │ ├── toggle │ │ │ └── index.tsx │ │ │ └── tooltip │ │ │ └── index.tsx │ ├── contents │ │ ├── components │ │ │ ├── accordion.mdx │ │ │ ├── alert-dialog.mdx │ │ │ ├── alert.mdx │ │ │ ├── aspect-ratio.mdx │ │ │ ├── avatar.mdx │ │ │ ├── badge.mdx │ │ │ ├── button.mdx │ │ │ ├── calendar.mdx │ │ │ ├── card.mdx │ │ │ ├── checkbox.mdx │ │ │ ├── collapsible.mdx │ │ │ ├── combobox.mdx │ │ │ ├── command.mdx │ │ │ ├── context-menu.mdx │ │ │ ├── data-table.mdx │ │ │ ├── date-picker.mdx │ │ │ ├── dialog.mdx │ │ │ ├── dropdown-menu.mdx │ │ │ ├── form.mdx │ │ │ ├── hover-card.mdx │ │ │ ├── input.mdx │ │ │ ├── label.mdx │ │ │ ├── menubar.mdx │ │ │ ├── navigation-menu.mdx │ │ │ ├── popover.mdx │ │ │ ├── progress.mdx │ │ │ ├── radio-group.mdx │ │ │ ├── scroll-area.mdx │ │ │ ├── select.mdx │ │ │ ├── separator.mdx │ │ │ ├── sheet.mdx │ │ │ ├── skeleton.mdx │ │ │ ├── slider.mdx │ │ │ ├── switch.mdx │ │ │ ├── table.mdx │ │ │ ├── tabs.mdx │ │ │ ├── textarea.mdx │ │ │ ├── toast.mdx │ │ │ ├── toggle.mdx │ │ │ └── tooltip.mdx │ │ ├── guides │ │ │ ├── theming.mdx │ │ │ └── utilities.mdx │ │ └── overview │ │ │ ├── figma.mdx │ │ │ ├── getting-started.mdx │ │ │ ├── introduction.mdx │ │ │ ├── supported-components.mdx │ │ │ └── typography.mdx │ ├── lib │ │ ├── env.ts │ │ ├── rehype-component.ts │ │ ├── sort-docs.ts │ │ └── toc.ts │ └── styles │ │ └── global.css │ └── tsconfig.json ├── package.json ├── packages ├── preset │ ├── .gitignore │ ├── CHANGELOG.md │ ├── README.md │ ├── index.ts │ ├── package.json │ ├── src │ │ ├── breakpoints.ts │ │ ├── conditions.ts │ │ ├── global-css.ts │ │ ├── index.ts │ │ ├── keyframes.ts │ │ ├── layer-styles.ts │ │ ├── lib │ │ │ └── color-mix.ts │ │ ├── recipes │ │ │ ├── alert.ts │ │ │ ├── badge.ts │ │ │ ├── button.ts │ │ │ ├── card.ts │ │ │ ├── form.ts │ │ │ ├── icon.ts │ │ │ ├── index.ts │ │ │ ├── input.ts │ │ │ ├── label.ts │ │ │ ├── separator.ts │ │ │ ├── skeleton.ts │ │ │ ├── table.ts │ │ │ ├── textarea.ts │ │ │ ├── toast.ts │ │ │ ├── toggle.ts │ │ │ └── typography.ts │ │ ├── semantic-tokens │ │ │ └── index.ts │ │ ├── slot-recipes │ │ │ ├── accordion.ts │ │ │ ├── alert-dialog.ts │ │ │ ├── avatar.ts │ │ │ ├── calendar.ts │ │ │ ├── checkbox.ts │ │ │ ├── collapsible.ts │ │ │ ├── command.ts │ │ │ ├── context-menu.ts │ │ │ ├── dialog.ts │ │ │ ├── dropdown-menu.ts │ │ │ ├── hover-card.ts │ │ │ ├── index.tsx │ │ │ ├── menubar.ts │ │ │ ├── navigation-menu.ts │ │ │ ├── popover.ts │ │ │ ├── progress.ts │ │ │ ├── radio-group.ts │ │ │ ├── scroll-area.ts │ │ │ ├── select.ts │ │ │ ├── sheet.ts │ │ │ ├── slider.ts │ │ │ ├── switch.ts │ │ │ ├── tabs.ts │ │ │ ├── toast.ts │ │ │ └── tooltip.ts │ │ ├── text-styles.ts │ │ ├── tokens │ │ │ ├── colors.ts │ │ │ ├── fonts.ts │ │ │ ├── index.ts │ │ │ ├── line-heights.ts │ │ │ └── radii.ts │ │ └── utilities │ │ │ ├── animate.ts │ │ │ ├── backdrop-filter.ts │ │ │ ├── background-alpha.ts │ │ │ ├── border-color-alpha.ts │ │ │ ├── container.ts │ │ │ ├── focus-ring.ts │ │ │ ├── index.ts │ │ │ ├── space.ts │ │ │ ├── text-alpha.ts │ │ │ ├── transform.ts │ │ │ └── typography.ts │ └── tsconfig.json └── style-context │ ├── .gitignore │ ├── CHANGELOG.md │ ├── package.json │ ├── src │ ├── index.ts │ └── style-context.tsx │ └── tsconfig.json ├── pnpm-lock.yaml ├── pnpm-workspace.yaml └── tsconfig.json /.all-contributorsrc: -------------------------------------------------------------------------------- 1 | { 2 | "projectName": "shadow-panda", 3 | "projectOwner": "kumaaa-inc", 4 | "contributorsPerLine": 7, 5 | "skipCi": true, 6 | "repoType": "github", 7 | "repoHost": "https://github.com", 8 | "files": [ 9 | "README.md" 10 | ], 11 | "imageSize": 100, 12 | "commit": true, 13 | "commitType": "docs", 14 | "commitConvention": "angular", 15 | "contributors": [ 16 | { 17 | "login": "nanopx", 18 | "name": "Atsushi Yoshitake", 19 | "avatar_url": "https://avatars.githubusercontent.com/u/7698394?v=4", 20 | "profile": "https://github.com/nanopx", 21 | "contributions": [ 22 | "code", 23 | "doc", 24 | "design", 25 | "example", 26 | "maintenance" 27 | ] 28 | } 29 | ] 30 | } 31 | -------------------------------------------------------------------------------- /.changeset/README.md: -------------------------------------------------------------------------------- 1 | # Changesets 2 | 3 | Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works 4 | with multi-package repos, or single-package repos to help you version and publish your code. You can 5 | find the full documentation for it [in our repository](https://github.com/changesets/changesets) 6 | 7 | We have a quick list of common questions to get you started engaging with this project in 8 | [our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md) 9 | -------------------------------------------------------------------------------- /.changeset/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://unpkg.com/@changesets/config@2.3.1/schema.json", 3 | "changelog": "@changesets/cli/changelog", 4 | "commit": false, 5 | "fixed": [ 6 | [ 7 | "@shadow-panda/**" 8 | ] 9 | ], 10 | "linked": [], 11 | "access": "restricted", 12 | "baseBranch": "main", 13 | "updateInternalDependencies": "patch", 14 | "ignore": [ 15 | "@shadow-panda/docs" 16 | ] 17 | } -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | *.d.ts 4 | *.js 5 | *.cjs 6 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | env: { 3 | browser: true, 4 | es6: true, 5 | node: true, 6 | }, 7 | plugins: ['@typescript-eslint', 'import'], 8 | extends: [ 9 | 'eslint:recommended', 10 | 'plugin:import/recommended', 11 | 'plugin:import/typescript', 12 | 'plugin:@typescript-eslint/eslint-recommended', 13 | 'plugin:@typescript-eslint/recommended', 14 | 'plugin:prettier/recommended', 15 | ], 16 | parser: '@typescript-eslint/parser', 17 | parserOptions: { 18 | ecmaVersion: 2018, 19 | sourceType: 'module', 20 | }, 21 | rules: { 22 | 'no-unused-vars': 'off', 23 | '@typescript-eslint/no-unused-vars': [ 24 | 'error', 25 | { argsIgnorePattern: '^_', varsIgnorePattern: '^_' }, 26 | ], 27 | '@typescript-eslint/no-empty-interface': 'off', 28 | '@typescript-eslint/no-non-null-assertion': 'off', 29 | 'import/no-unresolved': 'off', 30 | 'import/named': 'off', 31 | 'import/newline-after-import': 1, 32 | }, 33 | } 34 | -------------------------------------------------------------------------------- /.github/composite-actions/install/action.yml: -------------------------------------------------------------------------------- 1 | name: 'Install' 2 | description: 'Sets up Node.js and runs install' 3 | 4 | runs: 5 | using: composite 6 | steps: 7 | - uses: pnpm/action-setup@v2.3.0 8 | with: 9 | version: 8 10 | 11 | - name: Setup Node.js 12 | uses: actions/setup-node@v3 13 | with: 14 | node-version: 20.x 15 | registry-url: 'https://registry.npmjs.org' 16 | cache: 'pnpm' 17 | 18 | - name: Setup Git User 19 | shell: bash 20 | run: | 21 | git config --global user.email "0nanopx@gmail.com" 22 | git config --global user.name "nanopx" 23 | 24 | - name: Install dependencies 25 | shell: bash 26 | run: pnpm install 27 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: "npm" 4 | directory: "/" 5 | target-branch: "main" 6 | commit-message: 7 | prefix: "npm" 8 | schedule: 9 | interval: "daily" 10 | timezone: "Asia/Tokyo" 11 | groups: 12 | pandacss: 13 | patterns: 14 | - '@pandacss/*' 15 | - package-ecosystem: "github-actions" 16 | directory: "/" 17 | target-branch: "main" 18 | commit-message: 19 | prefix: "github-actions" 20 | schedule: 21 | interval: "daily" 22 | timezone: "Asia/Tokyo" 23 | -------------------------------------------------------------------------------- /.github/workflows/checks.yml: -------------------------------------------------------------------------------- 1 | name: Checks 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | - next 8 | pull_request: 9 | branches: 10 | - main 11 | - next 12 | 13 | concurrency: 14 | group: ${{ github.workflow }}-${{ github.ref }} 15 | cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} 16 | 17 | jobs: 18 | # tests: 19 | # name: Unit Tests 20 | # runs-on: ubuntu-latest 21 | # steps: 22 | # - name: Checkout 23 | # uses: actions/checkout@v4 24 | 25 | # - name: Install 26 | # uses: ./.github/composite-actions/install 27 | 28 | # - name: Run tests 29 | # run: pnpm test 30 | 31 | eslint: 32 | name: ESLint 33 | runs-on: ubuntu-latest 34 | steps: 35 | - name: Checkout 36 | uses: actions/checkout@v4 37 | 38 | - name: Install 39 | uses: ./.github/composite-actions/install 40 | 41 | - name: Run ESLint 42 | run: pnpm lint 43 | env: 44 | NODE_OPTIONS: '--max-old-space-size=4096' 45 | 46 | types: 47 | name: TypeScript 48 | runs-on: ubuntu-latest 49 | steps: 50 | - name: Checkout 51 | uses: actions/checkout@v4 52 | 53 | - name: Install 54 | uses: ./.github/composite-actions/install 55 | 56 | - name: Run TypeScript type check 57 | run: pnpm typecheck 58 | -------------------------------------------------------------------------------- /.github/workflows/dependabot-auto-merge.yml: -------------------------------------------------------------------------------- 1 | name: Dependabot auto-merge 2 | on: pull_request_target 3 | 4 | permissions: 5 | pull-requests: write 6 | contents: write 7 | 8 | jobs: 9 | dependabot: 10 | runs-on: ubuntu-latest 11 | if: ${{ github.actor == 'dependabot[bot]' }} 12 | steps: 13 | - name: Dependabot metadata 14 | id: metadata 15 | uses: dependabot/fetch-metadata@v1.6.0 16 | with: 17 | github-token: '${{ secrets.GITHUB_TOKEN }}' 18 | - name: Enable auto-merge for Dependabot PRs 19 | if: ${{ steps.metadata.outputs.update-type == 'version-update:semver-patch' }} 20 | run: gh pr merge --auto --merge "$PR_URL" 21 | env: 22 | PR_URL: ${{github.event.pull_request.html_url}} 23 | GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} 24 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Publish 2 | 3 | on: 4 | push: 5 | paths: 6 | - '.changeset/**' 7 | - 'packages/**' 8 | branches: 9 | - main 10 | 11 | jobs: 12 | release: 13 | name: Release 14 | runs-on: ubuntu-latest 15 | steps: 16 | - name: Checkout 17 | uses: actions/checkout@v4 18 | with: 19 | fetch-depth: 0 20 | 21 | - name: Install 22 | uses: ./.github/composite-actions/install 23 | 24 | - name: Build packages 25 | run: pnpm build 26 | 27 | - name: Publish packages 28 | id: changesets 29 | uses: changesets/action@v1 30 | with: 31 | publish: pnpm release 32 | env: 33 | NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}} 34 | GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} 35 | 36 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | .DS_Store 3 | tsconfig.tsbuildinfo 4 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | . "$(dirname "$0")/_/husky.sh" 3 | 4 | pnpm lint-staged 5 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | auto-install-peers=true 2 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | .github 2 | .next 3 | dist 4 | build 5 | node_modules 6 | *.d.ts 7 | pnpm-lock.yaml 8 | pnpm-workspace.yaml 9 | -------------------------------------------------------------------------------- /.prettierrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | singleQuote: true, 3 | semi: false, 4 | trailingComma: 'all', 5 | tabWidth: 2, 6 | printWidth: 100, 7 | } 8 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 nanopx 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /apps/docs/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["../../.eslintrc", "next"], 3 | "settings": { 4 | "next": { 5 | "rootDir": "apps/docs/" 6 | } 7 | }, 8 | "overrides": [ 9 | { 10 | "files": ["*.mjs"], 11 | "parser": "espree", 12 | "parserOptions": { 13 | "ecmaVersion": 2020 14 | } 15 | } 16 | ], 17 | "rules": { 18 | "semi": "off", 19 | "react/no-unescaped-entities": "off", 20 | "@next/next/no-html-link-for-pages": "off" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /apps/docs/.gitignore: -------------------------------------------------------------------------------- 1 | styled-system/ 2 | node_modules/ 3 | .next/ 4 | out/ 5 | .contentlayer/ 6 | .env 7 | .env.* 8 | !.env.example 9 | -------------------------------------------------------------------------------- /apps/docs/next-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | // NOTE: This file should not be edited 5 | // see https://nextjs.org/docs/basic-features/typescript for more information. 6 | -------------------------------------------------------------------------------- /apps/docs/next.config.mjs: -------------------------------------------------------------------------------- 1 | import { createContentlayerPlugin } from 'next-contentlayer' 2 | 3 | /** 4 | * @type {import('next').NextConfig} 5 | */ 6 | const nextConfig = { 7 | reactStrictMode: true, 8 | images: { 9 | unoptimized: true, 10 | }, 11 | webpack: (config) => { 12 | // Disable logging from webpack 13 | // Remove after the `webpack.cache.PackFileCacheStrategy` errors are fixed 14 | // @see https://github.com/contentlayerdev/contentlayer/issues/506 15 | config.infrastructureLogging = { 16 | level: 'error', 17 | } 18 | return config 19 | }, 20 | redirects() { 21 | return [ 22 | { 23 | source: '/docs', 24 | destination: '/docs/overview/introduction', 25 | permanent: true, 26 | }, 27 | 28 | { 29 | source: '/docs/components', 30 | destination: '/docs/components/accordion', 31 | permanent: true, 32 | }, 33 | ] 34 | }, 35 | } 36 | 37 | const withContentlayer = createContentlayerPlugin({ 38 | // Additional Contentlayer config options 39 | }) 40 | 41 | export default withContentlayer(nextConfig) 42 | -------------------------------------------------------------------------------- /apps/docs/panda.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from '@pandacss/dev' 2 | 3 | export default defineConfig({ 4 | // Whether to use css reset 5 | preflight: true, 6 | 7 | // Use React 8 | jsxFramework: 'react', 9 | 10 | staticCss: { 11 | recipes: { 12 | // For dynamic `side` preview 13 | sheet: [{ side: ['*'] }], 14 | toast: [{ variant: ['*'] }], 15 | }, 16 | }, 17 | 18 | // Presets 19 | presets: ['@shadow-panda/preset'], 20 | 21 | // Where to look for your css declarations 22 | include: ['./src/**/*.{js,jsx,ts,tsx,mdx}', './theme.config.tsx'], 23 | 24 | // Files to exclude 25 | exclude: [], 26 | 27 | emitPackage: true, 28 | outdir: '@shadow-panda/styled-system', 29 | }) 30 | -------------------------------------------------------------------------------- /apps/docs/postcss.config.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | '@pandacss/dev/postcss': {}, 4 | }, 5 | } 6 | -------------------------------------------------------------------------------- /apps/docs/public/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kumaaa-inc/shadow-panda/f8f8afc445ccf12d78b089f80afff4462596f8c4/apps/docs/public/favicon-16x16.png -------------------------------------------------------------------------------- /apps/docs/public/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kumaaa-inc/shadow-panda/f8f8afc445ccf12d78b089f80afff4462596f8c4/apps/docs/public/favicon-32x32.png -------------------------------------------------------------------------------- /apps/docs/public/icon-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kumaaa-inc/shadow-panda/f8f8afc445ccf12d78b089f80afff4462596f8c4/apps/docs/public/icon-192x192.png -------------------------------------------------------------------------------- /apps/docs/public/icon-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kumaaa-inc/shadow-panda/f8f8afc445ccf12d78b089f80afff4462596f8c4/apps/docs/public/icon-512x512.png -------------------------------------------------------------------------------- /apps/docs/public/images/top_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kumaaa-inc/shadow-panda/f8f8afc445ccf12d78b089f80afff4462596f8c4/apps/docs/public/images/top_dark.png -------------------------------------------------------------------------------- /apps/docs/public/images/top_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kumaaa-inc/shadow-panda/f8f8afc445ccf12d78b089f80afff4462596f8c4/apps/docs/public/images/top_light.png -------------------------------------------------------------------------------- /apps/docs/public/site.webmanifest: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Shadow Panda Docs", 3 | "short_name": "Shadow Panda", 4 | "description": "Shadow Panda Docs", 5 | "theme_color": "#ffffff", 6 | "background_color": "#ffffff", 7 | "start_url": "/", 8 | "display": "standalone", 9 | "orientation": "portrait", 10 | "icons": [ 11 | { 12 | "src": "/icon-192x192.png", 13 | "type": "image/png", 14 | "sizes": "192x192" 15 | }, 16 | { 17 | "src": "/icon-512x512.png", 18 | "type": "image/png", 19 | "sizes": "512x512" 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /apps/docs/src/app/apple-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kumaaa-inc/shadow-panda/f8f8afc445ccf12d78b089f80afff4462596f8c4/apps/docs/src/app/apple-icon.png -------------------------------------------------------------------------------- /apps/docs/src/app/docs/layout.tsx: -------------------------------------------------------------------------------- 1 | import type { PropsWithChildren } from 'react' 2 | import { css } from '@shadow-panda/styled-system/css' 3 | import { ScrollArea } from '@/components/ui/scroll-area' 4 | import { SidebarNav } from '@/components/docs/sidebar-nav' 5 | 6 | const DocsLayout = ({ children }: PropsWithChildren) => { 7 | return ( 8 |
26 | 54 | {children} 55 |
56 | ) 57 | } 58 | 59 | export default DocsLayout 60 | -------------------------------------------------------------------------------- /apps/docs/src/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kumaaa-inc/shadow-panda/f8f8afc445ccf12d78b089f80afff4462596f8c4/apps/docs/src/app/favicon.ico -------------------------------------------------------------------------------- /apps/docs/src/app/icon.svg: -------------------------------------------------------------------------------- 1 | 8 | 14 | 18 | 22 | 26 | 30 | 31 | -------------------------------------------------------------------------------- /apps/docs/src/app/opengraph-image.alt.txt: -------------------------------------------------------------------------------- 1 | Shadow Panda - Build your own UI Library using Panda & Radix 2 | -------------------------------------------------------------------------------- /apps/docs/src/app/opengraph-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kumaaa-inc/shadow-panda/f8f8afc445ccf12d78b089f80afff4462596f8c4/apps/docs/src/app/opengraph-image.png -------------------------------------------------------------------------------- /apps/docs/src/app/robots.ts: -------------------------------------------------------------------------------- 1 | import { MetadataRoute } from 'next' 2 | import { siteUrl } from '@/lib/env' 3 | 4 | export default function robots(): MetadataRoute.Robots { 5 | return { 6 | rules: { 7 | userAgent: '*', 8 | allow: '/', 9 | }, 10 | sitemap: `${siteUrl}/sitemap.xml`, 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /apps/docs/src/app/sitemap.ts: -------------------------------------------------------------------------------- 1 | import { MetadataRoute } from 'next' 2 | import { siteUrl } from '@/lib/env' 3 | import { sortDocs } from '@/lib/sort-docs' 4 | import { allDocuments } from 'contentlayer/generated' 5 | 6 | const sortedDocs = sortDocs(allDocuments) 7 | 8 | export default function sitemap(): MetadataRoute.Sitemap { 9 | return [ 10 | { 11 | url: siteUrl, 12 | lastModified: new Date(), 13 | }, 14 | ...sortedDocs.map((doc) => ({ 15 | url: `${siteUrl}${doc.url}`, 16 | lastModified: new Date(), 17 | })), 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /apps/docs/src/app/theme-provider.tsx: -------------------------------------------------------------------------------- 1 | 'use client' 2 | 3 | import * as React from 'react' 4 | import { ThemeProvider as NextThemeProvider } from 'next-themes' 5 | import { ThemeProviderProps } from 'next-themes/dist/types' 6 | 7 | export function ThemeProvider({ children, ...props }: ThemeProviderProps) { 8 | return {children} 9 | } 10 | -------------------------------------------------------------------------------- /apps/docs/src/app/twitter-image.alt.txt: -------------------------------------------------------------------------------- 1 | Shadow Panda - Build your own UI Library using Panda & Radix 2 | -------------------------------------------------------------------------------- /apps/docs/src/app/twitter-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kumaaa-inc/shadow-panda/f8f8afc445ccf12d78b089f80afff4462596f8c4/apps/docs/src/app/twitter-image.png -------------------------------------------------------------------------------- /apps/docs/src/assets/Poppins-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kumaaa-inc/shadow-panda/f8f8afc445ccf12d78b089f80afff4462596f8c4/apps/docs/src/assets/Poppins-Bold.ttf -------------------------------------------------------------------------------- /apps/docs/src/assets/Poppins-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kumaaa-inc/shadow-panda/f8f8afc445ccf12d78b089f80afff4462596f8c4/apps/docs/src/assets/Poppins-Medium.ttf -------------------------------------------------------------------------------- /apps/docs/src/components/docs/callout/index.tsx: -------------------------------------------------------------------------------- 1 | import { Alert, AlertTitle, AlertDescription } from '@/components/ui/alert' 2 | import { css, cx } from '@shadow-panda/styled-system/css' 3 | 4 | export interface CalloutProps { 5 | className?: string 6 | emoji?: string 7 | title?: string 8 | children?: React.ReactNode 9 | } 10 | 11 | export const Callout = ({ className, emoji, title, children }: CalloutProps) => ( 12 | .emoji + div': { 20 | transform: 'translate(0, -3px)', 21 | }, 22 | 23 | '& > .emoji': { 24 | position: 'absolute', 25 | left: '4', 26 | top: '4', 27 | color: 'foreground', 28 | h: '4', 29 | w: '4', 30 | }, 31 | }), 32 | className, 33 | )} 34 | > 35 | {emoji && ( 36 |
50 | {emoji} 51 |
52 | )} 53 | {title && {title}} 54 | {children && {children}} 55 |
56 | ) 57 | -------------------------------------------------------------------------------- /apps/docs/src/components/docs/component-preview/index.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react' 2 | import { css } from '@shadow-panda/styled-system/css' 3 | import { Preview } from '@/components/docs/preview' 4 | import { Tabs, Tab } from '@/components/docs/tabs' 5 | import { LoadingText } from '@/components/docs/loading-text' 6 | 7 | export interface ComponentPreviewProps { 8 | name: string 9 | file?: string 10 | withRecipe?: boolean 11 | hasRecipe?: boolean 12 | hasSlotRecipe?: boolean 13 | children: React.ReactNode 14 | } 15 | 16 | const getExampleComponent = ({ name, file = 'index' }: { name: string; file?: string }) => 17 | React.lazy(() => import(`@/components/previews/${name}/${file}.tsx`)) 18 | 19 | export const ComponentPreview = ({ 20 | name, 21 | file, 22 | withRecipe, 23 | hasRecipe, 24 | hasSlotRecipe, 25 | children, 26 | }: ComponentPreviewProps) => { 27 | const Example = getExampleComponent({ name, file }) 28 | 29 | const [code, recipe1, recipe2] = React.Children.toArray(children) 30 | 31 | const items = ['Preview', 'Code'] 32 | 33 | if (withRecipe && hasRecipe) { 34 | items.push('Recipe') 35 | } 36 | 37 | if (withRecipe && hasSlotRecipe) { 38 | items.push('Slot Recipe') 39 | } 40 | 41 | return ( 42 | 43 | 44 | 45 | }> 46 | 47 | 48 | 49 | 50 | {code} 51 | {withRecipe && !!recipe1 && {recipe1}} 52 | {withRecipe && !!recipe2 && {recipe2}} 53 | 54 | ) 55 | } 56 | -------------------------------------------------------------------------------- /apps/docs/src/components/docs/component-source/index.tsx: -------------------------------------------------------------------------------- 1 | export interface ComponentSourceProps { 2 | name: string 3 | file: string 4 | children: React.ReactNode 5 | } 6 | 7 | export const ComponentSource = ({ children }: ComponentSourceProps) => <>{children} 8 | -------------------------------------------------------------------------------- /apps/docs/src/components/docs/footer/index.tsx: -------------------------------------------------------------------------------- 1 | import Link from 'next/link' 2 | import { css } from '@shadow-panda/styled-system/css' 3 | import { link } from '@shadow-panda/styled-system/recipes' 4 | 5 | export const Footer = () => { 6 | return ( 7 |
14 |
33 | Copyright © {new Date().getFullYear()} 34 | 35 | Made with ❤️ by{' '} 36 | 37 | @nanopx 38 | 39 | 40 |
41 |
42 | ) 43 | } 44 | -------------------------------------------------------------------------------- /apps/docs/src/components/docs/header-nav/index.tsx: -------------------------------------------------------------------------------- 1 | 'use client' 2 | 3 | import Link from 'next/link' 4 | import { usePathname } from 'next/navigation' 5 | import { css } from '@shadow-panda/styled-system/css' 6 | import { Icons } from '../icons' 7 | 8 | export const HeaderNav = () => { 9 | const pathname = usePathname() 10 | 11 | return ( 12 |
22 | 30 | 31 | Shadow Panda 32 | 33 | 61 |
62 | ) 63 | } 64 | -------------------------------------------------------------------------------- /apps/docs/src/components/docs/lead/index.tsx: -------------------------------------------------------------------------------- 1 | import { cx, css } from '@shadow-panda/styled-system/css' 2 | import { lead } from '@shadow-panda/styled-system/recipes' 3 | 4 | export function Lead({ className, children }: { className?: string; children: React.ReactNode }) { 5 | return ( 6 |

{children}

7 | ) 8 | } 9 | -------------------------------------------------------------------------------- /apps/docs/src/components/docs/loading-text/index.tsx: -------------------------------------------------------------------------------- 1 | import { Loader2 } from 'lucide-react' 2 | import { css } from '@shadow-panda/styled-system/css' 3 | 4 | export const LoadingText = () => ( 5 |
14 | 21 | Loading... 22 |
23 | ) 24 | -------------------------------------------------------------------------------- /apps/docs/src/components/docs/mdx-component/index.tsx: -------------------------------------------------------------------------------- 1 | 'use client' 2 | 3 | import * as React from 'react' 4 | import { useMDXComponent } from 'next-contentlayer/hooks' 5 | import { css } from '@shadow-panda/styled-system/css' 6 | import { components } from './components' 7 | 8 | interface MdxProps { 9 | code: string 10 | } 11 | 12 | export function MdxComponent({ code }: MdxProps) { 13 | const Component = useMDXComponent(code) 14 | 15 | return ( 16 |
pre': { 29 | roundedTop: '0', 30 | mt: '0', 31 | }, 32 | }, 33 | })} 34 | > 35 | {/* eslint-disable-next-line @typescript-eslint/no-explicit-any */} 36 | 37 |
38 | ) 39 | } 40 | -------------------------------------------------------------------------------- /apps/docs/src/components/docs/mobile-header-nav/index.tsx: -------------------------------------------------------------------------------- 1 | import Link from 'next/link' 2 | import { css } from '@shadow-panda/styled-system/css' 3 | import { Icons } from '../icons' 4 | 5 | export const MobileHeaderNav = () => { 6 | return ( 7 |
16 | 23 | 24 | Shadow Panda 25 | 26 |
27 | ) 28 | } 29 | -------------------------------------------------------------------------------- /apps/docs/src/components/docs/preview/index.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react' 2 | import { css, cx } from '@shadow-panda/styled-system/css' 3 | 4 | export interface PreviewProps { 5 | className?: string 6 | height?: string 7 | children: React.ReactNode 8 | } 9 | 10 | export const Preview = ({ className, height = '350px', children }: PreviewProps) => { 11 | return ( 12 |
27 | {children} 28 |
29 | ) 30 | } 31 | -------------------------------------------------------------------------------- /apps/docs/src/components/docs/reference-badges/index.tsx: -------------------------------------------------------------------------------- 1 | import Link from 'next/link' 2 | import { css } from '@shadow-panda/styled-system/css' 3 | import { badge } from '@shadow-panda/styled-system/recipes' 4 | import { Icons } from '../icons' 5 | 6 | export interface ReferenceBadgesProps { 7 | shadcnUiLink?: string 8 | radix?: { 9 | link?: string 10 | api?: string 11 | } 12 | } 13 | 14 | export function ReferenceBadges({ shadcnUiLink, radix }: ReferenceBadgesProps) { 15 | if (!shadcnUiLink && !radix) return null 16 | 17 | return ( 18 |
26 | {shadcnUiLink && ( 27 | 33 | 34 | shadcn/ui 35 | 36 | )} 37 | {radix?.link && ( 38 | 44 | 45 | Radix UI 46 | 47 | )} 48 | {radix?.api && ( 49 | 55 | 56 | API Reference 57 | 58 | )} 59 |
60 | ) 61 | } 62 | -------------------------------------------------------------------------------- /apps/docs/src/components/docs/steps/index.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react' 2 | import { css, cx } from '@shadow-panda/styled-system/css' 3 | 4 | export type StepsProps = React.ComponentProps<'div'> 5 | 6 | export const Steps = ({ children, className, ...props }: StepsProps) => { 7 | return ( 8 |
46 | {children} 47 |
48 | ) 49 | } 50 | -------------------------------------------------------------------------------- /apps/docs/src/components/docs/tabs/wrapper.ts: -------------------------------------------------------------------------------- 1 | import { styled } from '@shadow-panda/styled-system/jsx' 2 | import * as BaseTabs from '@/components/ui/tabs' 3 | 4 | export const Tabs = styled(BaseTabs.Tabs, { 5 | base: { 6 | position: 'relative', 7 | mt: '6', 8 | w: 'full', 9 | }, 10 | }) 11 | 12 | export const TabsList = styled(BaseTabs.TabsList, { 13 | base: { 14 | w: 'full', 15 | justifyContent: 'flex-start', 16 | rounded: '0', 17 | borderBottom: 'base', 18 | bg: 'transparent', 19 | p: '0', 20 | }, 21 | }) 22 | 23 | export const TabsTrigger = styled(BaseTabs.TabsTrigger, { 24 | base: { 25 | position: 'relative', 26 | h: '9', 27 | rounded: '0', 28 | borderBottom: '2px solid transparent', 29 | bg: 'transparent', 30 | px: '4', 31 | pb: '3', 32 | pt: '2', 33 | fontWeight: 'semibold', 34 | color: 'muted.foreground', 35 | shadow: 'none', 36 | transition: 'none', 37 | cursor: 'pointer', 38 | 39 | '&[data-state=active]': { 40 | borderBottomColor: 'primary', 41 | color: 'foreground', 42 | shadow: 'none', 43 | }, 44 | }, 45 | }) 46 | 47 | export const TabsContent = styled(BaseTabs.TabsContent, { 48 | base: { 49 | position: 'relative', 50 | 51 | '& h3.font-heading': { 52 | fontFamily: 'base', 53 | fontWeight: 'semibold', 54 | }, 55 | }, 56 | }) 57 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/accordion/index.tsx: -------------------------------------------------------------------------------- 1 | import { 2 | Accordion, 3 | AccordionContent, 4 | AccordionItem, 5 | AccordionTrigger, 6 | } from '@/components/ui/accordion' 7 | 8 | export default function Example() { 9 | return ( 10 | 11 | 12 | Is it accessible? 13 | Yes. It adheres to the WAI-ARIA design pattern. 14 | 15 | 16 | Is it styled? 17 | 18 | Yes. It comes with default styles that matches the other components' aesthetic. 19 | 20 | 21 | 22 | Is it animated? 23 | 24 | Yes. It's animated by default, but you can disable it if you prefer. 25 | 26 | 27 | 28 | ) 29 | } 30 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/alert-dialog/index.tsx: -------------------------------------------------------------------------------- 1 | import { 2 | AlertDialog, 3 | AlertDialogAction, 4 | AlertDialogCancel, 5 | AlertDialogContent, 6 | AlertDialogDescription, 7 | AlertDialogFooter, 8 | AlertDialogHeader, 9 | AlertDialogTitle, 10 | AlertDialogTrigger, 11 | } from '@/components/ui/alert-dialog' 12 | import { Button } from '@/components/ui/button' 13 | 14 | export default function Example() { 15 | return ( 16 | 17 | 18 | 19 | 20 | 21 | 22 | Are you absolutely sure? 23 | 24 | This action cannot be undone. This will permanently delete your account and remove your 25 | data from our servers. 26 | 27 | 28 | 29 | Cancel 30 | Continue 31 | 32 | 33 | 34 | ) 35 | } 36 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/alert/destructive.tsx: -------------------------------------------------------------------------------- 1 | import { Alert, AlertTitle, AlertDescription } from '@/components/ui/alert' 2 | import { AlertCircle } from 'lucide-react' 3 | 4 | export default function Example() { 5 | return ( 6 | 7 | 8 | Error 9 | Your session has expired. Please log in again. 10 | 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/alert/index.tsx: -------------------------------------------------------------------------------- 1 | import { Terminal } from 'lucide-react' 2 | import { Alert, AlertTitle, AlertDescription } from '@/components/ui/alert' 3 | 4 | export default function Example() { 5 | return ( 6 | 7 | 8 | Heads up! 9 | You can add components to your app using the cli. 10 | 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/aspect-ratio/index.tsx: -------------------------------------------------------------------------------- 1 | import Image from 'next/image' 2 | import { css } from '@shadow-panda/styled-system/css' 3 | import { AspectRatio } from '@/components/ui/aspect-ratio' 4 | 5 | export default function Example() { 6 | return ( 7 | 8 | Photo by Drew Beamer 14 | 15 | ) 16 | } 17 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/avatar/index.tsx: -------------------------------------------------------------------------------- 1 | import { Avatar, AvatarImage, AvatarFallback } from '@/components/ui/avatar' 2 | 3 | export default function Example() { 4 | return ( 5 | 6 | 7 | NP 8 | 9 | ) 10 | } 11 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/badge/destructive.tsx: -------------------------------------------------------------------------------- 1 | import { Badge } from '@/components/ui/badge' 2 | 3 | export default function Example() { 4 | return Badge 5 | } 6 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/badge/index.tsx: -------------------------------------------------------------------------------- 1 | import { Badge } from '@/components/ui/badge' 2 | 3 | export default function Example() { 4 | return Badge 5 | } 6 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/badge/outline.tsx: -------------------------------------------------------------------------------- 1 | import { Badge } from '@/components/ui/badge' 2 | 3 | export default function Example() { 4 | return Badge 5 | } 6 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/badge/secondary.tsx: -------------------------------------------------------------------------------- 1 | import { Badge } from '@/components/ui/badge' 2 | 3 | export default function Example() { 4 | return Badge 5 | } 6 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/badge/with-icon.tsx: -------------------------------------------------------------------------------- 1 | import { Check } from 'lucide-react' 2 | import { css } from '@shadow-panda/styled-system/css' 3 | import { Badge } from '@/components/ui/badge' 4 | 5 | export default function Example() { 6 | return ( 7 | 8 | 15 | Verified 16 | 17 | ) 18 | } 19 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/button/as-child.tsx: -------------------------------------------------------------------------------- 1 | import Link from 'next/link' 2 | import { Button } from '@/components/ui/button' 3 | 4 | export default function Example() { 5 | return ( 6 | 9 | ) 10 | } 11 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/button/destructive.tsx: -------------------------------------------------------------------------------- 1 | import { Button } from '@/components/ui/button' 2 | 3 | export default function Example() { 4 | return 5 | } 6 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/button/ghost.tsx: -------------------------------------------------------------------------------- 1 | import { Button } from '@/components/ui/button' 2 | 3 | export default function Example() { 4 | return 5 | } 6 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/button/icon.tsx: -------------------------------------------------------------------------------- 1 | import { ChevronRight } from 'lucide-react' 2 | import { css } from '@shadow-panda/styled-system/css' 3 | import { Button } from '@/components/ui/button' 4 | 5 | export default function Example() { 6 | return ( 7 | 15 | ) 16 | } 17 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/button/index.tsx: -------------------------------------------------------------------------------- 1 | import { Button } from '@/components/ui/button' 2 | 3 | export default function Example() { 4 | return 5 | } 6 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/button/link.tsx: -------------------------------------------------------------------------------- 1 | import { Button } from '@/components/ui/button' 2 | 3 | export default function Example() { 4 | return 5 | } 6 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/button/loading.tsx: -------------------------------------------------------------------------------- 1 | import { Loader2 } from 'lucide-react' 2 | import { css, cx } from '@shadow-panda/styled-system/css' 3 | import { icon } from '@shadow-panda/styled-system/recipes' 4 | import { Button } from '@/components/ui/button' 5 | 6 | export default function Example() { 7 | return ( 8 | 12 | ) 13 | } 14 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/button/outline.tsx: -------------------------------------------------------------------------------- 1 | import { Button } from '@/components/ui/button' 2 | 3 | export default function Example() { 4 | return 5 | } 6 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/button/secondary.tsx: -------------------------------------------------------------------------------- 1 | import { Button } from '@/components/ui/button' 2 | 3 | export default function Example() { 4 | return 5 | } 6 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/button/with-icon.tsx: -------------------------------------------------------------------------------- 1 | import { Mail } from 'lucide-react' 2 | import { icon } from '@shadow-panda/styled-system/recipes' 3 | import { Button } from '@/components/ui/button' 4 | 5 | export default function Example() { 6 | return ( 7 | 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/calendar/index.tsx: -------------------------------------------------------------------------------- 1 | 'use client' 2 | 3 | import * as React from 'react' 4 | import { Calendar } from '@/components/ui/calendar' 5 | 6 | export default function Example() { 7 | const [date, setDate] = React.useState(new Date()) 8 | 9 | return 10 | } 11 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/checkbox/disabled.tsx: -------------------------------------------------------------------------------- 1 | import { Flex } from '@shadow-panda/styled-system/jsx' 2 | import { Label } from '@/components/ui/label' 3 | import { Checkbox } from '@/components/ui/checkbox' 4 | 5 | export default function Example() { 6 | return ( 7 | 8 | 9 | 10 | 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/checkbox/index.tsx: -------------------------------------------------------------------------------- 1 | import { Flex } from '@shadow-panda/styled-system/jsx' 2 | import { Label } from '@/components/ui/label' 3 | import { Checkbox } from '@/components/ui/checkbox' 4 | 5 | export default function Example() { 6 | return ( 7 | 8 | 9 | 10 | 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/checkbox/with-text.tsx: -------------------------------------------------------------------------------- 1 | import { Flex } from '@shadow-panda/styled-system/jsx' 2 | import { muted } from '@shadow-panda/styled-system/recipes' 3 | import { Label } from '@/components/ui/label' 4 | import { Checkbox } from '@/components/ui/checkbox' 5 | 6 | export default function Example() { 7 | return ( 8 | 9 | 10 | 11 | 12 | 13 |

You agree to our Terms of Service and Privacy Policy.

14 |
15 |
16 | ) 17 | } 18 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/collapsible/index.tsx: -------------------------------------------------------------------------------- 1 | 'use client' 2 | 3 | import * as React from 'react' 4 | import { ChevronsUpDown } from 'lucide-react' 5 | import { Box, Flex } from '@shadow-panda/styled-system/jsx' 6 | import { css } from '@shadow-panda/styled-system/css' 7 | import { icon } from '@shadow-panda/styled-system/recipes' 8 | import { Button } from '@/components/ui/button' 9 | import { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible' 10 | 11 | export default function Example() { 12 | const [isOpen, setIsOpen] = React.useState(false) 13 | 14 | return ( 15 | 16 | 17 |

18 | @peduarte starred 3 repositories 19 |

20 | 21 | 25 | 26 |
27 | 28 | @radix-ui/primitives 29 | 30 | 31 | 32 | @radix-ui/colors 33 | 34 | 35 | @stitches/react 36 | 37 | 38 |
39 | ) 40 | } 41 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/date-picker/index.tsx: -------------------------------------------------------------------------------- 1 | 'use client' 2 | 3 | import * as React from 'react' 4 | import { format } from 'date-fns' 5 | import { Calendar as CalendarIcon } from 'lucide-react' 6 | import { icon } from '@shadow-panda/styled-system/recipes' 7 | import { Button } from '@/components/ui/button' 8 | import { Calendar } from '@/components/ui/calendar' 9 | import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover' 10 | 11 | export default function Example() { 12 | const [date, setDate] = React.useState() 13 | 14 | return ( 15 | 16 | 17 | 28 | 29 | 30 | 31 | 32 | 33 | ) 34 | } 35 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/dialog/index.tsx: -------------------------------------------------------------------------------- 1 | 'use client' 2 | 3 | import { Grid } from '@shadow-panda/styled-system/jsx' 4 | import { Button } from '@/components/ui/button' 5 | import { 6 | Dialog, 7 | DialogContent, 8 | DialogDescription, 9 | DialogFooter, 10 | DialogHeader, 11 | DialogTitle, 12 | DialogTrigger, 13 | } from '@/components/ui/dialog' 14 | import { Input } from '@/components/ui/input' 15 | import { Label } from '@/components/ui/label' 16 | 17 | export default function Example() { 18 | return ( 19 | 20 | 21 | 22 | 23 | 24 | 25 | Edit profile 26 | 27 | Make changes to your profile here. Click save when you're done. 28 | 29 | 30 | 31 | 32 | 35 | {}} /> 36 | 37 | 38 | 41 | {}} /> 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | ) 50 | } 51 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/dropdown-menu/checkboxes.tsx: -------------------------------------------------------------------------------- 1 | 'use client' 2 | 3 | import * as React from 'react' 4 | import { DropdownMenuCheckboxItemProps } from '@radix-ui/react-dropdown-menu' 5 | import { Button } from '@/components/ui/button' 6 | import { 7 | DropdownMenu, 8 | DropdownMenuCheckboxItem, 9 | DropdownMenuContent, 10 | DropdownMenuLabel, 11 | DropdownMenuSeparator, 12 | DropdownMenuTrigger, 13 | } from '@/components/ui/dropdown-menu' 14 | 15 | type Checked = DropdownMenuCheckboxItemProps['checked'] 16 | 17 | export default function Example() { 18 | const [showStatusBar, setShowStatusBar] = React.useState(true) 19 | const [showActivityBar, setShowActivityBar] = React.useState(false) 20 | const [showPanel, setShowPanel] = React.useState(false) 21 | 22 | return ( 23 | 24 | 25 | 26 | 27 | 28 | Appearance 29 | 30 | 31 | Status Bar 32 | 33 | 38 | Activity Bar 39 | 40 | 41 | Panel 42 | 43 | 44 | 45 | ) 46 | } 47 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/dropdown-menu/radio-group.tsx: -------------------------------------------------------------------------------- 1 | 'use client' 2 | 3 | import * as React from 'react' 4 | import { Button } from '@/components/ui/button' 5 | import { 6 | DropdownMenu, 7 | DropdownMenuContent, 8 | DropdownMenuLabel, 9 | DropdownMenuRadioGroup, 10 | DropdownMenuRadioItem, 11 | DropdownMenuSeparator, 12 | DropdownMenuTrigger, 13 | } from '@/components/ui/dropdown-menu' 14 | 15 | export default function Example() { 16 | const [position, setPosition] = React.useState('bottom') 17 | 18 | return ( 19 | 20 | 21 | 22 | 23 | 24 | Panel Position 25 | 26 | 27 | Top 28 | Bottom 29 | Right 30 | 31 | 32 | 33 | ) 34 | } 35 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/form/index.tsx: -------------------------------------------------------------------------------- 1 | 'use client' 2 | 3 | import { useForm } from 'react-hook-form' 4 | import { zodResolver } from '@hookform/resolvers/zod' 5 | import * as z from 'zod' 6 | import { styled } from '@shadow-panda/styled-system/jsx' 7 | import { Button } from '@/components/ui/button' 8 | import { 9 | Form, 10 | FormControl, 11 | FormDescription, 12 | FormField, 13 | FormItem, 14 | FormLabel, 15 | FormMessage, 16 | } from '@/components/ui/form' 17 | import { Input } from '@/components/ui/input' 18 | 19 | const formSchema = z.object({ 20 | username: z.string().min(2, { 21 | message: 'Username must be at least 2 characters.', 22 | }), 23 | }) 24 | 25 | export default function Example() { 26 | const form = useForm>({ 27 | resolver: zodResolver(formSchema), 28 | defaultValues: { 29 | username: '', 30 | }, 31 | }) 32 | 33 | function onSubmit(values: z.infer) { 34 | console.log(values) 35 | } 36 | 37 | return ( 38 |
39 | 40 | ( 44 | 45 | Username 46 | 47 | 48 | 49 | This is your public display name. 50 | 51 | 52 | )} 53 | /> 54 | 55 | 56 |
57 | ) 58 | } 59 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/hover-card/index.tsx: -------------------------------------------------------------------------------- 1 | import { CalendarDays } from 'lucide-react' 2 | import { Flex } from '@shadow-panda/styled-system/jsx' 3 | import { css, cx } from '@shadow-panda/styled-system/css' 4 | import { icon, muted } from '@shadow-panda/styled-system/recipes' 5 | import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar' 6 | import { Button } from '@/components/ui/button' 7 | import { HoverCard, HoverCardContent, HoverCardTrigger } from '@/components/ui/hover-card' 8 | 9 | export default function Example() { 10 | return ( 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | VC 20 | 21 | 22 |

@nextjs

23 |

24 | The React Framework – created and maintained by @vercel. 25 |

26 | 27 | {' '} 28 | Joined December 2021 29 | 30 |
31 |
32 |
33 |
34 | ) 35 | } 36 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/input/disabled.tsx: -------------------------------------------------------------------------------- 1 | import { Input } from '@/components/ui/input' 2 | 3 | export default function Example() { 4 | return 5 | } 6 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/input/file.tsx: -------------------------------------------------------------------------------- 1 | import { css } from '@shadow-panda/styled-system/css' 2 | import { Label } from '@/components/ui/label' 3 | import { Input } from '@/components/ui/input' 4 | 5 | export default function Example() { 6 | return ( 7 |
16 | 17 | 18 |
19 | ) 20 | } 21 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/input/index.tsx: -------------------------------------------------------------------------------- 1 | import { Input } from '@/components/ui/input' 2 | 3 | export default function Example() { 4 | return 5 | } 6 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/input/with-button.tsx: -------------------------------------------------------------------------------- 1 | import { css } from '@shadow-panda/styled-system/css' 2 | import { Button } from '@/components/ui/button' 3 | import { Input } from '@/components/ui/input' 4 | 5 | export default function Example() { 6 | return ( 7 |
16 | 17 | 18 |
19 | ) 20 | } 21 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/input/with-label.tsx: -------------------------------------------------------------------------------- 1 | import { css } from '@shadow-panda/styled-system/css' 2 | import { Label } from '@/components/ui/label' 3 | import { Input } from '@/components/ui/input' 4 | 5 | export default function Example() { 6 | return ( 7 |
16 | 17 | 18 |
19 | ) 20 | } 21 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/label/index.tsx: -------------------------------------------------------------------------------- 1 | import { css } from '@shadow-panda/styled-system/css' 2 | import { Label } from '@/components/ui/label' 3 | import { Checkbox } from '@/components/ui/checkbox' 4 | 5 | export default function Example() { 6 | return ( 7 |
8 | 9 | 10 |
11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/progress/index.tsx: -------------------------------------------------------------------------------- 1 | 'use client' 2 | 3 | import * as React from 'react' 4 | import { Progress } from '@/components/ui/progress' 5 | 6 | export default function Example() { 7 | const [progress, setProgress] = React.useState(13) 8 | 9 | React.useEffect(() => { 10 | const timer = setTimeout(() => setProgress(66), 500) 11 | return () => clearTimeout(timer) 12 | }, []) 13 | 14 | return 15 | } 16 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/radio-group/index.tsx: -------------------------------------------------------------------------------- 1 | import { Flex } from '@shadow-panda/styled-system/jsx' 2 | import { Label } from '@/components/ui/label' 3 | import { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group' 4 | 5 | export default function Example() { 6 | return ( 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | ) 22 | } 23 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/scroll-area/index.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react' 2 | import { styled } from '@shadow-panda/styled-system/jsx' 3 | import { ScrollArea } from '@/components/ui/scroll-area' 4 | import { Separator } from '@/components/ui/separator' 5 | 6 | const tags = Array.from({ length: 50 }).map((_, i, a) => `v1.2.0-beta.${a.length - i}`) 7 | 8 | export default function Example() { 9 | return ( 10 | 11 | 12 | 13 | Tags 14 | 15 | {tags.map((tag) => ( 16 | 17 | {tag} 18 | 19 | 20 | ))} 21 | 22 | 23 | ) 24 | } 25 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/select/index.tsx: -------------------------------------------------------------------------------- 1 | import { 2 | Select, 3 | SelectContent, 4 | SelectGroup, 5 | SelectItem, 6 | SelectLabel, 7 | SelectTrigger, 8 | SelectValue, 9 | } from '@/components/ui/select' 10 | 11 | export default function Example() { 12 | return ( 13 | 28 | ) 29 | } 30 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/separator/index.tsx: -------------------------------------------------------------------------------- 1 | import { Flex } from '@shadow-panda/styled-system/jsx' 2 | import { css } from '@shadow-panda/styled-system/css' 3 | import { muted } from '@shadow-panda/styled-system/recipes' 4 | import { Separator } from '@/components/ui/separator' 5 | 6 | export default function Example() { 7 | return ( 8 |
9 | 10 |

17 | Radix Primitives 18 |

19 |

An open-source UI component library.

20 |
21 | 22 | 23 |
Blog
24 | 25 |
Docs
26 | 27 |
Source
28 |
29 |
30 | ) 31 | } 32 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/sheet/index.tsx: -------------------------------------------------------------------------------- 1 | import { css } from '@shadow-panda/styled-system/css' 2 | import { Grid } from '@shadow-panda/styled-system/jsx' 3 | import { Button } from '@/components/ui/button' 4 | import { Input } from '@/components/ui/input' 5 | import { Label } from '@/components/ui/label' 6 | import { 7 | Sheet, 8 | SheetClose, 9 | SheetContent, 10 | SheetDescription, 11 | SheetFooter, 12 | SheetHeader, 13 | SheetTitle, 14 | SheetTrigger, 15 | } from '@/components/ui/sheet' 16 | 17 | export default function Example() { 18 | return ( 19 | 20 | 21 | 22 | 23 | 24 | 25 | Edit profile 26 | 27 | Make changes to your profile here. Click save when you're done. 28 | 29 | 30 | 31 | 32 | 35 | 36 | 37 | 38 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | ) 52 | } 53 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/skeleton/index.tsx: -------------------------------------------------------------------------------- 1 | import { Flex } from '@shadow-panda/styled-system/jsx' 2 | import { Skeleton } from '@/components/ui/skeleton' 3 | 4 | export default function Example() { 5 | return ( 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | ) 14 | } 15 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/slider/index.tsx: -------------------------------------------------------------------------------- 1 | import { Slider } from '@/components/ui/slider' 2 | 3 | export default function Example() { 4 | return 5 | } 6 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/switch/disabled.tsx: -------------------------------------------------------------------------------- 1 | import { Grid, Flex } from '@shadow-panda/styled-system/jsx' 2 | import { Switch } from '@/components/ui/switch' 3 | import { Label } from '@/components/ui/label' 4 | 5 | export default function Example() { 6 | return ( 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | ) 18 | } 19 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/switch/index.tsx: -------------------------------------------------------------------------------- 1 | import { Flex } from '@shadow-panda/styled-system/jsx' 2 | import { Label } from '@/components/ui/label' 3 | import { Switch } from '@/components/ui/switch' 4 | 5 | export default function Example() { 6 | return ( 7 | 8 | 9 | 10 | 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/tabs/alternate-styles.tsx: -------------------------------------------------------------------------------- 1 | import { css } from '@shadow-panda/styled-system/css' 2 | import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs' 3 | 4 | const triggerStyle = css({ 5 | position: 'relative', 6 | h: '9', 7 | rounded: '0', 8 | borderBottom: '2px solid transparent', 9 | bg: 'transparent', 10 | px: '4', 11 | pb: '3', 12 | pt: '2', 13 | fontWeight: 'semibold', 14 | color: 'muted.foreground', 15 | shadow: 'none', 16 | transition: 'none', 17 | cursor: 'pointer', 18 | 19 | '&[data-state=active]': { 20 | borderBottomColor: 'primary', 21 | color: 'foreground', 22 | shadow: 'none', 23 | }, 24 | }) 25 | 26 | export default function Example() { 27 | return ( 28 | 29 | 37 | 38 | Tab1 39 | 40 | 41 | Tab2 42 | 43 | 44 | Content 1 45 | Content 2 46 | 47 | ) 48 | } 49 | -------------------------------------------------------------------------------- /apps/docs/src/components/previews/textarea/disabled.tsx: -------------------------------------------------------------------------------- 1 | import { Textarea } from '@/components/ui/textarea' 2 | 3 | export default function Example() { 4 | return