├── .changeset ├── README.md └── config.json ├── .commitlintrc.json ├── .editorconfig ├── .eslintrc.json ├── .github ├── changeset-version.js ├── version-script-beta.js ├── version-script-next.js └── workflows │ ├── code-check.yml │ ├── prerelease-comment.yml │ ├── prerelease.yml │ ├── release.yml │ └── test.yml ├── .gitignore ├── .husky └── commit-msg ├── .npmrc ├── .nvmrc ├── .prettierignore ├── .vscode └── settings.json ├── LICENSE.md ├── README.md ├── apps └── www │ ├── .env.example │ ├── .gitignore │ ├── .prettierignore │ ├── __registry__ │ ├── .autogenerated │ ├── .gitkeep │ ├── README.md │ └── index.tsx │ ├── app │ ├── docs │ │ ├── [[...slug]] │ │ │ └── page.tsx │ │ └── layout.tsx │ ├── examples │ │ ├── authentication │ │ │ ├── components │ │ │ │ └── user-auth-form.tsx │ │ │ └── page.tsx │ │ ├── cards │ │ │ ├── components │ │ │ │ ├── cookie-settings.tsx │ │ │ │ ├── create-account.tsx │ │ │ │ ├── date-picker.tsx │ │ │ │ ├── github-card.tsx │ │ │ │ ├── notifications.tsx │ │ │ │ ├── payment-method.tsx │ │ │ │ ├── report-an-issue.tsx │ │ │ │ ├── share-document.tsx │ │ │ │ └── team-members.tsx │ │ │ └── page.tsx │ │ ├── dashboard │ │ │ ├── components │ │ │ │ ├── date-range-picker.tsx │ │ │ │ ├── main-nav.tsx │ │ │ │ ├── overview.tsx │ │ │ │ ├── recent-sales.tsx │ │ │ │ ├── search.tsx │ │ │ │ ├── team-switcher.tsx │ │ │ │ └── user-nav.tsx │ │ │ └── page.tsx │ │ ├── forms │ │ │ ├── account │ │ │ │ ├── account-form.tsx │ │ │ │ └── page.tsx │ │ │ ├── appearance │ │ │ │ ├── appearance-form.tsx │ │ │ │ └── page.tsx │ │ │ ├── components │ │ │ │ └── sidebar-nav.tsx │ │ │ ├── display │ │ │ │ ├── display-form.tsx │ │ │ │ └── page.tsx │ │ │ ├── layout.tsx │ │ │ ├── notifications │ │ │ │ ├── notifications-form.tsx │ │ │ │ └── page.tsx │ │ │ ├── page.tsx │ │ │ └── profile-form.tsx │ │ ├── layout.tsx │ │ ├── music │ │ │ ├── components │ │ │ │ ├── album-artwork.tsx │ │ │ │ ├── menu.tsx │ │ │ │ ├── podcast-empty-placeholder.tsx │ │ │ │ └── sidebar.tsx │ │ │ ├── data │ │ │ │ ├── albums.ts │ │ │ │ └── playlists.ts │ │ │ └── page.tsx │ │ ├── playground │ │ │ ├── components │ │ │ │ ├── code-viewer.tsx │ │ │ │ ├── maxlength-selector.tsx │ │ │ │ ├── model-selector.tsx │ │ │ │ ├── preset-actions.tsx │ │ │ │ ├── preset-save.tsx │ │ │ │ ├── preset-selector.tsx │ │ │ │ ├── preset-share.tsx │ │ │ │ ├── temperature-selector.tsx │ │ │ │ └── top-p-selector.tsx │ │ │ ├── data │ │ │ │ ├── models.ts │ │ │ │ └── presets.ts │ │ │ └── page.tsx │ │ └── tasks │ │ │ ├── components │ │ │ ├── columns.tsx │ │ │ ├── data-table-column-header.tsx │ │ │ ├── data-table-faceted-filter.tsx │ │ │ ├── data-table-pagination.tsx │ │ │ ├── data-table-row-actions.tsx │ │ │ ├── data-table-toolbar.tsx │ │ │ ├── data-table-view-options.tsx │ │ │ ├── data-table.tsx │ │ │ └── user-nav.tsx │ │ │ ├── data │ │ │ ├── data.tsx │ │ │ ├── schema.ts │ │ │ ├── seed.ts │ │ │ └── tasks.json │ │ │ └── page.tsx │ ├── layout.tsx │ ├── page.tsx │ └── sink │ │ ├── layout.tsx │ │ ├── new-york │ │ └── page.tsx │ │ └── page.tsx │ ├── assets │ └── fonts │ │ ├── CalSans-SemiBold.ttf │ │ ├── CalSans-SemiBold.woff │ │ ├── CalSans-SemiBold.woff2 │ │ ├── Inter-Bold.ttf │ │ └── Inter-Regular.ttf │ ├── components │ ├── analytics.tsx │ ├── callout.tsx │ ├── code-block-wrapper.tsx │ ├── command-menu.tsx │ ├── component-card.tsx │ ├── component-example.tsx │ ├── component-preview.tsx │ ├── component-source.tsx │ ├── copy-button.tsx │ ├── examples-nav.tsx │ ├── framework-docs.tsx │ ├── icons.tsx │ ├── main-nav.tsx │ ├── mdx-components.tsx │ ├── mobile-nav.tsx │ ├── mode-toggle.tsx │ ├── page-header.tsx │ ├── pager.tsx │ ├── promo-video.tsx │ ├── providers.tsx │ ├── sidebar-nav.tsx │ ├── site-footer.tsx │ ├── site-header.tsx │ ├── style-switcher.tsx │ ├── style-wrapper.tsx │ ├── tailwind-indicator.tsx │ ├── theme-wrapper.tsx │ └── toc.tsx │ ├── config │ ├── docs.ts │ └── site.ts │ ├── content │ └── docs │ │ ├── about.mdx │ │ ├── changelog.mdx │ │ ├── cli.mdx │ │ ├── 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 │ │ └── typography.mdx │ │ ├── dark-mode.mdx │ │ ├── figma.mdx │ │ ├── index.mdx │ │ ├── installation │ │ ├── astro.mdx │ │ ├── gatsby.mdx │ │ ├── index.mdx │ │ ├── manual.mdx │ │ ├── next.mdx │ │ ├── remix.mdx │ │ └── vite.mdx │ │ └── theming.mdx │ ├── contentlayer.config.js │ ├── hooks │ ├── use-config.ts │ ├── use-lock-body.ts │ ├── use-mounted.ts │ └── use-mutation-observer.ts │ ├── lib │ ├── events.ts │ ├── fonts.ts │ ├── rehype-component.ts │ ├── rehype-npm-command.ts │ ├── themes │ │ ├── dark.json │ │ └── light.json │ ├── toc.ts │ ├── utils.ts │ └── validations │ │ ├── log.ts │ │ └── og.ts │ ├── next-env.d.ts │ ├── next.config.mjs │ ├── package.json │ ├── pages │ ├── .gitkeep │ └── api │ │ ├── .gitkeep │ │ ├── components.json │ │ └── components.ts │ ├── postcss.config.cjs │ ├── public │ ├── android-chrome-192x192.png │ ├── android-chrome-512x512.png │ ├── apple-touch-icon.png │ ├── avatars │ │ ├── 01.png │ │ ├── 02.png │ │ ├── 03.png │ │ ├── 04.png │ │ └── 05.png │ ├── examples │ │ ├── authentication-dark.png │ │ ├── authentication-light.png │ │ ├── cards-dark.png │ │ ├── cards-light.png │ │ ├── dashboard-dark.png │ │ ├── dashboard-light.png │ │ ├── forms-dark.png │ │ ├── forms-light.png │ │ ├── music-dark.png │ │ ├── music-light.png │ │ ├── playground-dark.png │ │ ├── playground-light.png │ │ ├── tasks-dark.png │ │ └── tasks-light.png │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── favicon.ico │ ├── images │ │ ├── style-with-theming.jpg │ │ └── style.jpg │ ├── og.jpg │ ├── registry │ │ ├── colors │ │ │ ├── gray.json │ │ │ ├── index.json │ │ │ ├── lime.json │ │ │ ├── neutral.json │ │ │ ├── slate.json │ │ │ ├── stone.json │ │ │ └── zinc.json │ │ ├── index.json │ │ ├── styles │ │ │ ├── default │ │ │ │ ├── accordion.json │ │ │ │ ├── alert-dialog.json │ │ │ │ ├── alert.json │ │ │ │ ├── aspect-ratio.json │ │ │ │ ├── avatar.json │ │ │ │ ├── badge.json │ │ │ │ ├── button.json │ │ │ │ ├── calendar.json │ │ │ │ ├── card.json │ │ │ │ ├── checkbox.json │ │ │ │ ├── collapsible.json │ │ │ │ ├── command.json │ │ │ │ ├── context-menu.json │ │ │ │ ├── dialog.json │ │ │ │ ├── dropdown-menu.json │ │ │ │ ├── form.json │ │ │ │ ├── hover-card.json │ │ │ │ ├── input.json │ │ │ │ ├── label.json │ │ │ │ ├── menubar.json │ │ │ │ ├── navigation-menu.json │ │ │ │ ├── popover.json │ │ │ │ ├── progress.json │ │ │ │ ├── radio-group.json │ │ │ │ ├── scroll-area.json │ │ │ │ ├── select.json │ │ │ │ ├── separator.json │ │ │ │ ├── sheet.json │ │ │ │ ├── skeleton.json │ │ │ │ ├── slider.json │ │ │ │ ├── switch.json │ │ │ │ ├── table.json │ │ │ │ ├── tabs.json │ │ │ │ ├── textarea.json │ │ │ │ ├── toast.json │ │ │ │ ├── toggle.json │ │ │ │ └── tooltip.json │ │ │ ├── index.json │ │ │ └── new-york │ │ │ │ ├── accordion.json │ │ │ │ ├── alert-dialog.json │ │ │ │ ├── alert.json │ │ │ │ ├── aspect-ratio.json │ │ │ │ ├── avatar.json │ │ │ │ ├── badge.json │ │ │ │ ├── button.json │ │ │ │ ├── calendar.json │ │ │ │ ├── card.json │ │ │ │ ├── checkbox.json │ │ │ │ ├── collapsible.json │ │ │ │ ├── command.json │ │ │ │ ├── context-menu.json │ │ │ │ ├── dialog.json │ │ │ │ ├── dropdown-menu.json │ │ │ │ ├── form.json │ │ │ │ ├── hover-card.json │ │ │ │ ├── input.json │ │ │ │ ├── label.json │ │ │ │ ├── menubar.json │ │ │ │ ├── navigation-menu.json │ │ │ │ ├── popover.json │ │ │ │ ├── progress.json │ │ │ │ ├── radio-group.json │ │ │ │ ├── scroll-area.json │ │ │ │ ├── select.json │ │ │ │ ├── separator.json │ │ │ │ ├── sheet.json │ │ │ │ ├── skeleton.json │ │ │ │ ├── slider.json │ │ │ │ ├── switch.json │ │ │ │ ├── table.json │ │ │ │ ├── tabs.json │ │ │ │ ├── textarea.json │ │ │ │ ├── toast.json │ │ │ │ ├── toggle.json │ │ │ │ └── tooltip.json │ │ └── themes.css │ ├── schema.json │ └── site.webmanifest │ ├── registry │ ├── .eslintrc.json │ ├── colors.ts │ ├── default │ │ ├── example │ │ │ ├── accordion-demo.tsx │ │ │ ├── alert-demo.tsx │ │ │ ├── alert-destructive.tsx │ │ │ ├── alert-dialog-demo.tsx │ │ │ ├── aspect-ratio-demo.tsx │ │ │ ├── avatar-demo.tsx │ │ │ ├── badge-demo.tsx │ │ │ ├── badge-destructive.tsx │ │ │ ├── badge-outline.tsx │ │ │ ├── badge-secondary.tsx │ │ │ ├── button-as-child.tsx │ │ │ ├── button-demo.tsx │ │ │ ├── button-destructive.tsx │ │ │ ├── button-ghost.tsx │ │ │ ├── button-icon.tsx │ │ │ ├── button-link.tsx │ │ │ ├── button-loading.tsx │ │ │ ├── button-outline.tsx │ │ │ ├── button-secondary.tsx │ │ │ ├── button-with-icon.tsx │ │ │ ├── calendar-demo.tsx │ │ │ ├── calendar-form.tsx │ │ │ ├── calendar-react-hook-form.tsx │ │ │ ├── card-demo.tsx │ │ │ ├── card-with-form.tsx │ │ │ ├── checkbox-demo.tsx │ │ │ ├── checkbox-disabled.tsx │ │ │ ├── checkbox-form-multiple.tsx │ │ │ ├── checkbox-form-single.tsx │ │ │ ├── checkbox-with-text.tsx │ │ │ ├── collapsible-demo.tsx │ │ │ ├── combobox-demo.tsx │ │ │ ├── combobox-dropdown-menu.tsx │ │ │ ├── combobox-form.tsx │ │ │ ├── combobox-popover.tsx │ │ │ ├── command-demo.tsx │ │ │ ├── command-dialog.tsx │ │ │ ├── context-menu-demo.tsx │ │ │ ├── data-table-demo.tsx │ │ │ ├── date-picker-demo.tsx │ │ │ ├── date-picker-form.tsx │ │ │ ├── date-picker-with-presets.tsx │ │ │ ├── date-picker-with-range.tsx │ │ │ ├── dialog-demo.tsx │ │ │ ├── dropdown-menu-checkboxes.tsx │ │ │ ├── dropdown-menu-demo.tsx │ │ │ ├── dropdown-menu-radio-group.tsx │ │ │ ├── hover-card-demo.tsx │ │ │ ├── input-demo.tsx │ │ │ ├── input-disabled.tsx │ │ │ ├── input-file.tsx │ │ │ ├── input-form.tsx │ │ │ ├── input-with-button.tsx │ │ │ ├── input-with-label.tsx │ │ │ ├── input-with-text.tsx │ │ │ ├── label-demo.tsx │ │ │ ├── menubar-demo.tsx │ │ │ ├── mode-toggle.tsx │ │ │ ├── navigation-menu-demo.tsx │ │ │ ├── popover-demo.tsx │ │ │ ├── progress-demo.tsx │ │ │ ├── radio-group-demo.tsx │ │ │ ├── radio-group-form.tsx │ │ │ ├── scroll-area-demo.tsx │ │ │ ├── select-demo.tsx │ │ │ ├── select-form.tsx │ │ │ ├── separator-demo.tsx │ │ │ ├── sheet-demo.tsx │ │ │ ├── sheet-side.tsx │ │ │ ├── skeleton-demo.tsx │ │ │ ├── slider-demo.tsx │ │ │ ├── switch-demo.tsx │ │ │ ├── switch-form.tsx │ │ │ ├── table-demo.tsx │ │ │ ├── tabs-demo.tsx │ │ │ ├── textarea-demo.tsx │ │ │ ├── textarea-disabled.tsx │ │ │ ├── textarea-form.tsx │ │ │ ├── textarea-with-button.tsx │ │ │ ├── textarea-with-label.tsx │ │ │ ├── textarea-with-text.tsx │ │ │ ├── toast-demo.tsx │ │ │ ├── toast-destructive.tsx │ │ │ ├── toast-simple.tsx │ │ │ ├── toast-with-action.tsx │ │ │ ├── toast-with-title.tsx │ │ │ ├── toggle-demo.tsx │ │ │ ├── toggle-disabled.tsx │ │ │ ├── toggle-lg.tsx │ │ │ ├── toggle-outline.tsx │ │ │ ├── toggle-sm.tsx │ │ │ ├── toggle-with-text.tsx │ │ │ ├── tooltip-demo.tsx │ │ │ ├── typography-blockquote.tsx │ │ │ ├── typography-demo.tsx │ │ │ ├── typography-h1.tsx │ │ │ ├── typography-h2.tsx │ │ │ ├── typography-h3.tsx │ │ │ ├── typography-h4.tsx │ │ │ ├── typography-inline-code.tsx │ │ │ ├── typography-large.tsx │ │ │ ├── typography-lead.tsx │ │ │ ├── typography-list.tsx │ │ │ ├── typography-muted.tsx │ │ │ ├── typography-p.tsx │ │ │ ├── typography-small.tsx │ │ │ └── typography-table.tsx │ │ └── ui │ │ │ ├── accordion.tsx │ │ │ ├── alert-dialog.tsx │ │ │ ├── alert.tsx │ │ │ ├── aspect-ratio.tsx │ │ │ ├── avatar.tsx │ │ │ ├── badge.tsx │ │ │ ├── button.tsx │ │ │ ├── calendar.tsx │ │ │ ├── card.tsx │ │ │ ├── checkbox.tsx │ │ │ ├── collapsible.tsx │ │ │ ├── command.tsx │ │ │ ├── context-menu.tsx │ │ │ ├── dialog.tsx │ │ │ ├── dropdown-menu.tsx │ │ │ ├── form.tsx │ │ │ ├── hover-card.tsx │ │ │ ├── input.tsx │ │ │ ├── label.tsx │ │ │ ├── menubar.tsx │ │ │ ├── navigation-menu.tsx │ │ │ ├── popover.tsx │ │ │ ├── progress.tsx │ │ │ ├── radio-group.tsx │ │ │ ├── scroll-area.tsx │ │ │ ├── select.tsx │ │ │ ├── separator.tsx │ │ │ ├── sheet.tsx │ │ │ ├── skeleton.tsx │ │ │ ├── slider.tsx │ │ │ ├── switch.tsx │ │ │ ├── table.tsx │ │ │ ├── tabs.tsx │ │ │ ├── textarea.tsx │ │ │ ├── toast.tsx │ │ │ ├── toaster.tsx │ │ │ ├── toggle.tsx │ │ │ ├── tooltip.tsx │ │ │ └── use-toast.ts │ ├── new-york │ │ ├── example │ │ │ ├── accordion-demo.tsx │ │ │ ├── alert-demo.tsx │ │ │ ├── alert-destructive.tsx │ │ │ ├── alert-dialog-demo.tsx │ │ │ ├── aspect-ratio-demo.tsx │ │ │ ├── avatar-demo.tsx │ │ │ ├── badge-demo.tsx │ │ │ ├── badge-destructive.tsx │ │ │ ├── badge-outline.tsx │ │ │ ├── badge-secondary.tsx │ │ │ ├── button-as-child.tsx │ │ │ ├── button-demo.tsx │ │ │ ├── button-destructive.tsx │ │ │ ├── button-ghost.tsx │ │ │ ├── button-icon.tsx │ │ │ ├── button-link.tsx │ │ │ ├── button-loading.tsx │ │ │ ├── button-outline.tsx │ │ │ ├── button-secondary.tsx │ │ │ ├── button-with-icon.tsx │ │ │ ├── calendar-demo.tsx │ │ │ ├── calendar-form.tsx │ │ │ ├── card-demo.tsx │ │ │ ├── card-with-form.tsx │ │ │ ├── checkbox-demo.tsx │ │ │ ├── checkbox-disabled.tsx │ │ │ ├── checkbox-form-multiple.tsx │ │ │ ├── checkbox-form-single.tsx │ │ │ ├── checkbox-with-text.tsx │ │ │ ├── collapsible-demo.tsx │ │ │ ├── combobox-demo.tsx │ │ │ ├── combobox-dropdown-menu.tsx │ │ │ ├── combobox-form.tsx │ │ │ ├── combobox-popover.tsx │ │ │ ├── command-demo.tsx │ │ │ ├── command-dialog.tsx │ │ │ ├── context-menu-demo.tsx │ │ │ ├── data-table-demo.tsx │ │ │ ├── date-picker-demo.tsx │ │ │ ├── date-picker-form.tsx │ │ │ ├── date-picker-with-presets.tsx │ │ │ ├── date-picker-with-range.tsx │ │ │ ├── dialog-demo.tsx │ │ │ ├── dropdown-menu-checkboxes.tsx │ │ │ ├── dropdown-menu-demo.tsx │ │ │ ├── dropdown-menu-radio-group.tsx │ │ │ ├── hover-card-demo.tsx │ │ │ ├── input-demo.tsx │ │ │ ├── input-disabled.tsx │ │ │ ├── input-file.tsx │ │ │ ├── input-form.tsx │ │ │ ├── input-with-button.tsx │ │ │ ├── input-with-label.tsx │ │ │ ├── input-with-text.tsx │ │ │ ├── label-demo.tsx │ │ │ ├── menubar-demo.tsx │ │ │ ├── mode-toggle.tsx │ │ │ ├── navigation-menu-demo.tsx │ │ │ ├── popover-demo.tsx │ │ │ ├── progress-demo.tsx │ │ │ ├── radio-group-demo.tsx │ │ │ ├── radio-group-form.tsx │ │ │ ├── scroll-area-demo.tsx │ │ │ ├── select-demo.tsx │ │ │ ├── select-form.tsx │ │ │ ├── separator-demo.tsx │ │ │ ├── sheet-demo.tsx │ │ │ ├── sheet-side.tsx │ │ │ ├── skeleton-demo.tsx │ │ │ ├── slider-demo.tsx │ │ │ ├── switch-demo.tsx │ │ │ ├── switch-form.tsx │ │ │ ├── table-demo.tsx │ │ │ ├── tabs-demo.tsx │ │ │ ├── textarea-demo.tsx │ │ │ ├── textarea-disabled.tsx │ │ │ ├── textarea-form.tsx │ │ │ ├── textarea-with-button.tsx │ │ │ ├── textarea-with-label.tsx │ │ │ ├── textarea-with-text.tsx │ │ │ ├── toast-demo.tsx │ │ │ ├── toast-destructive.tsx │ │ │ ├── toast-simple.tsx │ │ │ ├── toast-with-action.tsx │ │ │ ├── toast-with-title.tsx │ │ │ ├── toggle-demo.tsx │ │ │ ├── toggle-disabled.tsx │ │ │ ├── toggle-lg.tsx │ │ │ ├── toggle-outline.tsx │ │ │ ├── toggle-sm.tsx │ │ │ ├── toggle-with-text.tsx │ │ │ ├── tooltip-demo.tsx │ │ │ ├── typography-blockquote.tsx │ │ │ ├── typography-demo.tsx │ │ │ ├── typography-h1.tsx │ │ │ ├── typography-h2.tsx │ │ │ ├── typography-h3.tsx │ │ │ ├── typography-h4.tsx │ │ │ ├── typography-inline-code.tsx │ │ │ ├── typography-large.tsx │ │ │ ├── typography-lead.tsx │ │ │ ├── typography-list.tsx │ │ │ ├── typography-muted.tsx │ │ │ ├── typography-p.tsx │ │ │ ├── typography-small.tsx │ │ │ └── typography-table.tsx │ │ └── ui │ │ │ ├── accordion.tsx │ │ │ ├── alert-dialog.tsx │ │ │ ├── alert.tsx │ │ │ ├── aspect-ratio.tsx │ │ │ ├── avatar.tsx │ │ │ ├── badge.tsx │ │ │ ├── button.tsx │ │ │ ├── calendar.tsx │ │ │ ├── card.tsx │ │ │ ├── checkbox.tsx │ │ │ ├── collapsible.tsx │ │ │ ├── command.tsx │ │ │ ├── context-menu.tsx │ │ │ ├── dialog.tsx │ │ │ ├── dropdown-menu.tsx │ │ │ ├── form.tsx │ │ │ ├── hover-card.tsx │ │ │ ├── input.tsx │ │ │ ├── label.tsx │ │ │ ├── menubar.tsx │ │ │ ├── navigation-menu.tsx │ │ │ ├── popover.tsx │ │ │ ├── progress.tsx │ │ │ ├── radio-group.tsx │ │ │ ├── scroll-area.tsx │ │ │ ├── select.tsx │ │ │ ├── separator.tsx │ │ │ ├── sheet.tsx │ │ │ ├── skeleton.tsx │ │ │ ├── slider.tsx │ │ │ ├── switch.tsx │ │ │ ├── table.tsx │ │ │ ├── tabs.tsx │ │ │ ├── textarea.tsx │ │ │ ├── toast.tsx │ │ │ ├── toaster.tsx │ │ │ ├── toggle.tsx │ │ │ ├── tooltip.tsx │ │ │ └── use-toast.ts │ ├── registry.ts │ ├── schema.ts │ ├── styles.ts │ └── themes.ts │ ├── scripts │ └── build-registry.ts │ ├── styles │ ├── globals.css │ └── mdx.css │ ├── tailwind.config.cjs │ ├── tsconfig.json │ ├── tsconfig.scripts.json │ └── types │ ├── nav.ts │ └── unist.ts ├── fix_user.sh ├── package.json ├── packages └── cli │ ├── .gitignore │ ├── .prettierignore │ ├── CHANGELOG.md │ ├── README.md │ ├── package.json │ ├── src │ ├── commands │ │ ├── add.ts │ │ ├── diff.ts │ │ └── init.ts │ ├── index.ts │ └── utils │ │ ├── get-config.ts │ │ ├── get-package-info.ts │ │ ├── get-package-manager.ts │ │ ├── get-project-info.ts │ │ ├── handle-error.ts │ │ ├── logger.ts │ │ ├── registry │ │ ├── index.ts │ │ └── schema.ts │ │ ├── resolve-import.ts │ │ ├── templates.ts │ │ └── transformers │ │ ├── index.ts │ │ ├── transform-css-vars.ts │ │ ├── transform-import.ts │ │ ├── transform-jsx.ts │ │ └── transform-rsc.ts │ ├── test │ ├── commands │ │ └── init.test.ts │ ├── fixtures │ │ ├── colors │ │ │ ├── neutral.json │ │ │ ├── slate.json │ │ │ ├── stone.json │ │ │ └── zinc.json │ │ ├── config-full │ │ │ ├── components.json │ │ │ ├── package.json │ │ │ └── tsconfig.json │ │ ├── config-invalid │ │ │ ├── components.json │ │ │ └── package.json │ │ ├── config-jsx │ │ │ ├── components.json │ │ │ ├── jsconfig.json │ │ │ └── package.json │ │ ├── config-none │ │ │ └── package.json │ │ ├── config-partial │ │ │ ├── components.json │ │ │ ├── package.json │ │ │ └── tsconfig.json │ │ ├── next-src │ │ │ ├── .gitignore │ │ │ ├── next.config.js │ │ │ ├── package.json │ │ │ ├── src │ │ │ │ └── app │ │ │ │ │ └── globals.css │ │ │ ├── tailwind.config.js │ │ │ └── tsconfig.json │ │ ├── next │ │ │ ├── .gitignore │ │ │ ├── app │ │ │ │ └── globals.css │ │ │ ├── next.config.js │ │ │ ├── package.json │ │ │ ├── pnpm-lock.yaml │ │ │ ├── tailwind.config.js │ │ │ └── tsconfig.json │ │ ├── project-bun │ │ │ ├── bun.lockb │ │ │ └── package.json │ │ ├── project-npm │ │ │ ├── package-lock.json │ │ │ └── package.json │ │ ├── project-pnpm │ │ │ ├── package.json │ │ │ └── pnpm-lock.yaml │ │ ├── project-src │ │ │ ├── components.json │ │ │ ├── package-lock.json │ │ │ └── package.json │ │ ├── project-yarn │ │ │ ├── package.json │ │ │ └── yarn.lock │ │ ├── project │ │ │ ├── components.json │ │ │ ├── package.json │ │ │ └── pnpm-lock.yaml │ │ ├── t3-app │ │ │ ├── .eslintrc.cjs │ │ │ ├── .gitignore │ │ │ ├── next.config.mjs │ │ │ ├── package.json │ │ │ ├── src │ │ │ │ ├── env.mjs │ │ │ │ ├── pages │ │ │ │ │ ├── _app.tsx │ │ │ │ │ └── index.tsx │ │ │ │ └── styles │ │ │ │ │ └── globals.css │ │ │ ├── tailwind.config.ts │ │ │ └── tsconfig.json │ │ ├── with-base-url │ │ │ └── tsconfig.json │ │ └── without-base-url │ │ │ └── tsconfig.json │ └── utils │ │ ├── __snapshots__ │ │ ├── transform-css-vars.test.ts.snap │ │ ├── transform-import.test.ts.snap │ │ └── transform-rsc.test.ts.snap │ │ ├── apply-color-mapping.test.ts │ │ ├── get-config.test.ts │ │ ├── get-package-manager.test.ts │ │ ├── registry.test.ts │ │ ├── resolve-import.test.ts │ │ ├── transform-css-vars.test.ts │ │ ├── transform-import.test.ts │ │ └── transform-rsc.test.ts │ ├── tsconfig.json │ └── tsup.config.ts ├── pnpm-lock.yaml ├── pnpm-workspace.yaml ├── postcss.config.cjs ├── prettier.config.cjs ├── scripts └── sync-templates.sh ├── tailwind.config.cjs ├── templates └── next-template │ ├── .editorconfig │ ├── .eslintignore │ ├── .eslintrc.json │ ├── .gitignore │ ├── .prettierignore │ ├── .vscode │ └── settings.json │ ├── README.md │ ├── app │ ├── layout.tsx │ └── page.tsx │ ├── components.json │ ├── components │ ├── icons.tsx │ ├── main-nav.tsx │ ├── site-header.tsx │ ├── tailwind-indicator.tsx │ ├── theme-provider.tsx │ ├── theme-toggle.tsx │ └── ui │ │ └── button.tsx │ ├── config │ └── site.ts │ ├── lib │ ├── fonts.ts │ └── utils.ts │ ├── next-env.d.ts │ ├── next.config.mjs │ ├── package.json │ ├── postcss.config.js │ ├── prettier.config.js │ ├── public │ ├── favicon.ico │ ├── next.svg │ ├── thirteen.svg │ └── vercel.svg │ ├── styles │ └── globals.css │ ├── tailwind.config.js │ ├── tsconfig.json │ └── types │ └── nav.ts ├── tsconfig.json ├── turbo.json └── vitest.config.ts /.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.0/schema.json", 3 | "changelog": ["@changesets/changelog-github", { "repo": "shadcn/ui" }], 4 | "commit": false, 5 | "fixed": [], 6 | "linked": [], 7 | "access": "public", 8 | "baseBranch": "main", 9 | "updateInternalDependencies": "patch", 10 | "ignore": ["www", "**-template"] 11 | } 12 | -------------------------------------------------------------------------------- /.commitlintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["@commitlint/config-conventional"] 3 | } 4 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | end_of_line = lf 7 | indent_size = 2 8 | indent_style = space 9 | insert_final_newline = true 10 | trim_trailing_whitespace = true 11 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/eslintrc", 3 | "root": true, 4 | "extends": [ 5 | "next/core-web-vitals", 6 | "turbo", 7 | "prettier", 8 | "plugin:tailwindcss/recommended" 9 | ], 10 | "plugins": ["tailwindcss"], 11 | "rules": { 12 | "@next/next/no-html-link-for-pages": "off", 13 | "tailwindcss/no-custom-classname": "off", 14 | "tailwindcss/classnames-order": "error" 15 | }, 16 | "settings": { 17 | "tailwindcss": { 18 | "callees": ["cn", "cva"], 19 | "config": "tailwind.config.cjs" 20 | }, 21 | "next": { 22 | "rootDir": ["apps/*/"] 23 | } 24 | }, 25 | "overrides": [ 26 | { 27 | "files": ["*.ts", "*.tsx"], 28 | "parser": "@typescript-eslint/parser" 29 | } 30 | ] 31 | } 32 | -------------------------------------------------------------------------------- /.github/changeset-version.js: -------------------------------------------------------------------------------- 1 | // ORIGINALLY FROM CLOUDFLARE WRANGLER: 2 | // https://github.com/cloudflare/wrangler2/blob/main/.github/changeset-version.js 3 | 4 | import { exec } from "child_process" 5 | 6 | // This script is used by the `release.yml` workflow to update the version of the packages being released. 7 | // The standard step is only to run `changeset version` but this does not update the package-lock.json file. 8 | // So we also run `npm install`, which does this update. 9 | // This is a workaround until this is handled automatically by `changeset version`. 10 | // See https://github.com/changesets/changesets/issues/421. 11 | exec("npx changeset version") 12 | exec("npm install") 13 | -------------------------------------------------------------------------------- /.github/version-script-beta.js: -------------------------------------------------------------------------------- 1 | // ORIGINALLY FROM CLOUDFLARE WRANGLER: 2 | // https://github.com/cloudflare/wrangler2/blob/main/.github/version-script.js 3 | 4 | import { exec } from "child_process" 5 | import fs from "fs" 6 | 7 | const pkgJsonPath = "packages/cli/package.json" 8 | try { 9 | const pkg = JSON.parse(fs.readFileSync(pkgJsonPath)) 10 | exec("git rev-parse --short HEAD", (err, stdout) => { 11 | if (err) { 12 | console.log(err) 13 | process.exit(1) 14 | } 15 | pkg.version = "0.0.0-beta." + stdout.trim() 16 | fs.writeFileSync(pkgJsonPath, JSON.stringify(pkg, null, "\t") + "\n") 17 | }) 18 | } catch (error) { 19 | console.error(error) 20 | process.exit(1) 21 | } 22 | -------------------------------------------------------------------------------- /.github/version-script-next.js: -------------------------------------------------------------------------------- 1 | // ORIGINALLY FROM CLOUDFLARE WRANGLER: 2 | // https://github.com/cloudflare/wrangler2/blob/main/.github/version-script.js 3 | 4 | import { exec } from "child_process" 5 | import fs from "fs" 6 | 7 | const pkgJsonPath = "packages/cli/package.json" 8 | try { 9 | const pkg = JSON.parse(fs.readFileSync(pkgJsonPath)) 10 | exec("git rev-parse --short HEAD", (err, stdout) => { 11 | if (err) { 12 | console.log(err) 13 | process.exit(1) 14 | } 15 | pkg.version = "0.0.0-next." + stdout.trim() 16 | fs.writeFileSync(pkgJsonPath, JSON.stringify(pkg, null, "\t") + "\n") 17 | }) 18 | } catch (error) { 19 | console.error(error) 20 | process.exit(1) 21 | } 22 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: Test 2 | 3 | on: 4 | pull_request: 5 | branches: ["*"] 6 | 7 | jobs: 8 | test: 9 | runs-on: ubuntu-latest 10 | name: Test 11 | steps: 12 | - uses: actions/checkout@v3 13 | with: 14 | fetch-depth: 0 15 | 16 | - name: Install Node.js 17 | uses: actions/setup-node@v3 18 | with: 19 | node-version: 16 20 | 21 | - uses: pnpm/action-setup@v2.2.4 22 | name: Install pnpm 23 | id: pnpm-install 24 | with: 25 | version: 8.6.1 26 | run_install: false 27 | 28 | - name: Get pnpm store directory 29 | id: pnpm-cache 30 | run: | 31 | echo "pnpm_cache_dir=$(pnpm store path)" >> $GITHUB_OUTPUT 32 | - uses: actions/cache@v3 33 | name: Setup pnpm cache 34 | with: 35 | path: ${{ steps.pnpm-cache.outputs.pnpm_cache_dir }} 36 | key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} 37 | restore-keys: | 38 | ${{ runner.os }}-pnpm-store- 39 | - name: Install dependencies 40 | run: pnpm install 41 | 42 | - run: pnpm test 43 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | node_modules 5 | .pnp 6 | .pnp.js 7 | 8 | # testing 9 | coverage 10 | 11 | # next.js 12 | .next/ 13 | out/ 14 | build 15 | 16 | # misc 17 | .DS_Store 18 | *.pem 19 | 20 | # debug 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | .pnpm-debug.log* 25 | 26 | # local env files 27 | .env.local 28 | .env.development.local 29 | .env.test.local 30 | .env.production.local 31 | 32 | # turbo 33 | .turbo 34 | 35 | .contentlayer 36 | tsconfig.tsbuildinfo -------------------------------------------------------------------------------- /.husky/commit-msg: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | . "$(dirname -- "$0")/_/husky.sh" 3 | 4 | npx commitlint --edit $1 5 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | auto-install-peers=true 2 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | v16.18.0 2 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | .next 4 | build 5 | .contentlayer 6 | apps/www/pages/api/registry.json -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "eslint.workingDirectories": [ 3 | { "pattern": "apps/*/" }, 4 | { "pattern": "packages/*/" } 5 | ], 6 | "tailwindCSS.experimental.classRegex": [ 7 | ["cva\\(([^)]*)\\)", "[\"'`]([^\"'`]*).*?[\"'`]"], 8 | ["cn\\(([^)]*)\\)", "[\"'`]([^\"'`]*).*?[\"'`]"] 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 shadcn 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 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Next.js/ui 2 | -------------------------------------------------------------------------------- /apps/www/.env.example: -------------------------------------------------------------------------------- 1 | # ----------------------------------------------------------------------------- 2 | # App 3 | # ----------------------------------------------------------------------------- 4 | NEXT_PUBLIC_APP_URL=http://localhost:3001 5 | -------------------------------------------------------------------------------- /apps/www/.gitignore: -------------------------------------------------------------------------------- 1 | .vscode 2 | .env -------------------------------------------------------------------------------- /apps/www/.prettierignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | .next 4 | build 5 | .contentlayer 6 | __registry__/index.tsx -------------------------------------------------------------------------------- /apps/www/__registry__/.autogenerated: -------------------------------------------------------------------------------- 1 | // The content of this directory is autogenerated by the registry server. 2 | -------------------------------------------------------------------------------- /apps/www/__registry__/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coincatcher22/ui/cefee5dc6f84b3c5d50b48027c52d578ea300734/apps/www/__registry__/.gitkeep -------------------------------------------------------------------------------- /apps/www/__registry__/README.md: -------------------------------------------------------------------------------- 1 | > Files inside this directory is autogenerated by `./scripts/build-registry.ts`. **Do not edit them manually.** - shadcn 2 | -------------------------------------------------------------------------------- /apps/www/app/docs/layout.tsx: -------------------------------------------------------------------------------- 1 | import { docsConfig } from "@/config/docs" 2 | import { DocsSidebarNav } from "@/components/sidebar-nav" 3 | import { ScrollArea } from "@/registry/new-york/ui/scroll-area" 4 | 5 | interface DocsLayoutProps { 6 | children: React.ReactNode 7 | } 8 | 9 | export default function DocsLayout({ children }: DocsLayoutProps) { 10 | return ( 11 |
12 |
13 | 18 | {children} 19 |
20 |
21 | ) 22 | } 23 | -------------------------------------------------------------------------------- /apps/www/app/examples/cards/components/date-picker.tsx: -------------------------------------------------------------------------------- 1 | import DatePickerWithRange from "@/registry/default/example/date-picker-with-range" 2 | import { Card, CardContent } from "@/registry/new-york/ui/card" 3 | import { Label } from "@/registry/new-york/ui/label" 4 | 5 | export function DemoDatePicker() { 6 | return ( 7 | 8 | 9 |
10 | 13 | 14 |
15 |
16 |
17 | ) 18 | } 19 | -------------------------------------------------------------------------------- /apps/www/app/examples/dashboard/components/main-nav.tsx: -------------------------------------------------------------------------------- 1 | import Link from "next/link" 2 | 3 | import { cn } from "@/lib/utils" 4 | 5 | export function MainNav({ 6 | className, 7 | ...props 8 | }: React.HTMLAttributes) { 9 | return ( 10 | 39 | ) 40 | } 41 | -------------------------------------------------------------------------------- /apps/www/app/examples/dashboard/components/search.tsx: -------------------------------------------------------------------------------- 1 | import { Input } from "@/registry/new-york/ui/input" 2 | 3 | export function Search() { 4 | return ( 5 |
6 | 11 |
12 | ) 13 | } 14 | -------------------------------------------------------------------------------- /apps/www/app/examples/forms/account/page.tsx: -------------------------------------------------------------------------------- 1 | import { Separator } from "@/registry/new-york/ui/separator" 2 | import { AccountForm } from "@/app/examples/forms/account/account-form" 3 | 4 | export default function SettingsAccountPage() { 5 | return ( 6 |
7 |
8 |

Account

9 |

10 | Update your account settings. Set your preferred language and 11 | timezone. 12 |

13 |
14 | 15 | 16 |
17 | ) 18 | } 19 | -------------------------------------------------------------------------------- /apps/www/app/examples/forms/appearance/page.tsx: -------------------------------------------------------------------------------- 1 | import { Separator } from "@/registry/new-york/ui/separator" 2 | import { AppearanceForm } from "@/app/examples/forms/appearance/appearance-form" 3 | 4 | export default function SettingsAppearancePage() { 5 | return ( 6 |
7 |
8 |

Appearance

9 |

10 | Customize the appearance of the app. Automatically switch between day 11 | and night themes. 12 |

13 |
14 | 15 | 16 |
17 | ) 18 | } 19 | -------------------------------------------------------------------------------- /apps/www/app/examples/forms/components/sidebar-nav.tsx: -------------------------------------------------------------------------------- 1 | "use client" 2 | 3 | import Link from "next/link" 4 | import { usePathname } from "next/navigation" 5 | 6 | import { cn } from "@/lib/utils" 7 | import { buttonVariants } from "@/registry/new-york/ui/button" 8 | 9 | interface SidebarNavProps extends React.HTMLAttributes { 10 | items: { 11 | href: string 12 | title: string 13 | }[] 14 | } 15 | 16 | export function SidebarNav({ className, items, ...props }: SidebarNavProps) { 17 | const pathname = usePathname() 18 | 19 | return ( 20 | 43 | ) 44 | } 45 | -------------------------------------------------------------------------------- /apps/www/app/examples/forms/display/page.tsx: -------------------------------------------------------------------------------- 1 | import { Separator } from "@/registry/new-york/ui/separator" 2 | import { DisplayForm } from "@/app/examples/forms/display/display-form" 3 | 4 | export default function SettingsDisplayPage() { 5 | return ( 6 |
7 |
8 |

Display

9 |

10 | Turn items on or off to control what's displayed in the app. 11 |

12 |
13 | 14 | 15 |
16 | ) 17 | } 18 | -------------------------------------------------------------------------------- /apps/www/app/examples/forms/notifications/page.tsx: -------------------------------------------------------------------------------- 1 | import { Separator } from "@/registry/new-york/ui/separator" 2 | import { NotificationsForm } from "@/app/examples/forms/notifications/notifications-form" 3 | 4 | export default function SettingsNotificationsPage() { 5 | return ( 6 |
7 |
8 |

Notifications

9 |

10 | Configure how you receive notifications. 11 |

12 |
13 | 14 | 15 |
16 | ) 17 | } 18 | -------------------------------------------------------------------------------- /apps/www/app/examples/forms/page.tsx: -------------------------------------------------------------------------------- 1 | import { Separator } from "@/registry/new-york/ui/separator" 2 | import { ProfileForm } from "@/app/examples/forms/profile-form" 3 | 4 | export default function SettingsProfilePage() { 5 | return ( 6 |
7 |
8 |

Profile

9 |

10 | This is how others will see you on the site. 11 |

12 |
13 | 14 | 15 |
16 | ) 17 | } 18 | -------------------------------------------------------------------------------- /apps/www/app/examples/music/data/playlists.ts: -------------------------------------------------------------------------------- 1 | export type Playlist = (typeof playlists)[number] 2 | 3 | export const playlists = [ 4 | "Recently Added", 5 | "Recently Played", 6 | "Top Songs", 7 | "Top Albums", 8 | "Top Artists", 9 | "Logic Discography", 10 | "Bedtime Beats", 11 | "Feeling Happy", 12 | "I miss Y2K Pop", 13 | "Runtober", 14 | "Mellow Days", 15 | "Eminem Essentials", 16 | ] 17 | -------------------------------------------------------------------------------- /apps/www/app/examples/playground/data/presets.ts: -------------------------------------------------------------------------------- 1 | export interface Preset { 2 | id: string 3 | name: string 4 | } 5 | 6 | export const presets: Preset[] = [ 7 | { 8 | id: "9cb0e66a-9937-465d-a188-2c4c4ae2401f", 9 | name: "Grammatical Standard English", 10 | }, 11 | { 12 | id: "61eb0e32-2391-4cd3-adc3-66efe09bc0b7", 13 | name: "Summarize for a 2nd grader", 14 | }, 15 | { 16 | id: "a4e1fa51-f4ce-4e45-892c-224030a00bdd", 17 | name: "Text to command", 18 | }, 19 | { 20 | id: "cc198b13-4933-43aa-977e-dcd95fa30770", 21 | name: "Q&A", 22 | }, 23 | { 24 | id: "adfa95be-a575-45fd-a9ef-ea45386c64de", 25 | name: "English to other languages", 26 | }, 27 | { 28 | id: "c569a06a-0bd6-43a7-adf9-bf68c09e7a79", 29 | name: "Parse unstructured data", 30 | }, 31 | { 32 | id: "15ccc0d7-f37a-4f0a-8163-a37e162877dc", 33 | name: "Classification", 34 | }, 35 | { 36 | id: "4641ef41-1c0f-421d-b4b2-70fe431081f3", 37 | name: "Natural language to Python", 38 | }, 39 | { 40 | id: "48d34082-72f3-4a1b-a14d-f15aca4f57a0", 41 | name: "Explain code", 42 | }, 43 | { 44 | id: "dfd42fd5-0394-4810-92c6-cc907d3bfd1a", 45 | name: "Chat", 46 | }, 47 | ] 48 | -------------------------------------------------------------------------------- /apps/www/app/examples/tasks/data/schema.ts: -------------------------------------------------------------------------------- 1 | import { z } from "zod" 2 | 3 | // We're keeping a simple non-relational schema here. 4 | // IRL, you will have a schema for your data models. 5 | export const taskSchema = z.object({ 6 | id: z.string(), 7 | title: z.string(), 8 | status: z.string(), 9 | label: z.string(), 10 | priority: z.string(), 11 | }) 12 | 13 | export type Task = z.infer 14 | -------------------------------------------------------------------------------- /apps/www/app/examples/tasks/data/seed.ts: -------------------------------------------------------------------------------- 1 | import fs from "fs" 2 | import path from "path" 3 | import { faker } from "@faker-js/faker" 4 | 5 | import { labels, priorities, statuses } from "./data" 6 | 7 | const tasks = Array.from({ length: 100 }, () => ({ 8 | id: `TASK-${faker.datatype.number({ min: 1000, max: 9999 })}`, 9 | title: faker.hacker.phrase().replace(/^./, (letter) => letter.toUpperCase()), 10 | status: faker.helpers.arrayElement(statuses).value, 11 | label: faker.helpers.arrayElement(labels).value, 12 | priority: faker.helpers.arrayElement(priorities).value, 13 | })) 14 | 15 | fs.writeFileSync( 16 | path.join(__dirname, "tasks.json"), 17 | JSON.stringify(tasks, null, 2) 18 | ) 19 | 20 | console.log("✅ Tasks data generated.") 21 | -------------------------------------------------------------------------------- /apps/www/app/sink/layout.tsx: -------------------------------------------------------------------------------- 1 | import Link from "next/link" 2 | 3 | import { ThemeWrapper } from "@/components/theme-wrapper" 4 | import { styles } from "@/registry/styles" 5 | 6 | interface SinkLayoutProps { 7 | children: React.ReactNode 8 | } 9 | 10 | export default function SinkLayout({ children }: SinkLayoutProps) { 11 | return ( 12 |
13 |
14 |
15 | {styles.map((style) => ( 16 | 17 | {style.label} 18 | 19 | ))} 20 |
21 |
22 |
23 | {children} 24 |
25 |
26 | ) 27 | } 28 | -------------------------------------------------------------------------------- /apps/www/assets/fonts/CalSans-SemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coincatcher22/ui/cefee5dc6f84b3c5d50b48027c52d578ea300734/apps/www/assets/fonts/CalSans-SemiBold.ttf -------------------------------------------------------------------------------- /apps/www/assets/fonts/CalSans-SemiBold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coincatcher22/ui/cefee5dc6f84b3c5d50b48027c52d578ea300734/apps/www/assets/fonts/CalSans-SemiBold.woff -------------------------------------------------------------------------------- /apps/www/assets/fonts/CalSans-SemiBold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coincatcher22/ui/cefee5dc6f84b3c5d50b48027c52d578ea300734/apps/www/assets/fonts/CalSans-SemiBold.woff2 -------------------------------------------------------------------------------- /apps/www/assets/fonts/Inter-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coincatcher22/ui/cefee5dc6f84b3c5d50b48027c52d578ea300734/apps/www/assets/fonts/Inter-Bold.ttf -------------------------------------------------------------------------------- /apps/www/assets/fonts/Inter-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coincatcher22/ui/cefee5dc6f84b3c5d50b48027c52d578ea300734/apps/www/assets/fonts/Inter-Regular.ttf -------------------------------------------------------------------------------- /apps/www/components/analytics.tsx: -------------------------------------------------------------------------------- 1 | "use client" 2 | 3 | import { Analytics as VercelAnalytics } from "@vercel/analytics/react" 4 | 5 | export function Analytics() { 6 | return 7 | } 8 | -------------------------------------------------------------------------------- /apps/www/components/callout.tsx: -------------------------------------------------------------------------------- 1 | import { 2 | Alert, 3 | AlertDescription, 4 | AlertTitle, 5 | } from "@/registry/new-york/ui/alert" 6 | 7 | interface CalloutProps { 8 | icon?: string 9 | title?: string 10 | children?: React.ReactNode 11 | } 12 | 13 | export function Callout({ title, children, icon, ...props }: CalloutProps) { 14 | return ( 15 | 16 | {icon && {icon}} 17 | {title && {title}} 18 | {children} 19 | 20 | ) 21 | } 22 | -------------------------------------------------------------------------------- /apps/www/components/component-card.tsx: -------------------------------------------------------------------------------- 1 | import React from "react" 2 | 3 | import { cn } from "@/lib/utils" 4 | import { AspectRatio } from "@/registry/new-york/ui/aspect-ratio" 5 | 6 | export function ComponentCard({ 7 | className, 8 | ...props 9 | }: React.HTMLAttributes) { 10 | return ( 11 | 12 |
19 | 20 | ) 21 | } 22 | -------------------------------------------------------------------------------- /apps/www/components/component-source.tsx: -------------------------------------------------------------------------------- 1 | "use client" 2 | 3 | import * as React from "react" 4 | 5 | import { cn } from "@/lib/utils" 6 | import { CodeBlockWrapper } from "@/components/code-block-wrapper" 7 | 8 | interface ComponentSourceProps extends React.HTMLAttributes { 9 | src: string 10 | } 11 | 12 | export function ComponentSource({ 13 | children, 14 | className, 15 | ...props 16 | }: ComponentSourceProps) { 17 | return ( 18 | 22 | {children} 23 | 24 | ) 25 | } 26 | -------------------------------------------------------------------------------- /apps/www/components/framework-docs.tsx: -------------------------------------------------------------------------------- 1 | "use client" 2 | 3 | import * as React from "react" 4 | import { allDocs } from "contentlayer/generated" 5 | 6 | import { Mdx } from "./mdx-components" 7 | 8 | interface FrameworkDocsProps extends React.HTMLAttributes { 9 | data: string 10 | } 11 | 12 | export function FrameworkDocs({ ...props }: FrameworkDocsProps) { 13 | const frameworkDoc = allDocs.find( 14 | (doc) => doc.slug === `/docs/installation/${props.data}` 15 | ) 16 | 17 | if (!frameworkDoc) { 18 | return null 19 | } 20 | 21 | return 22 | } 23 | -------------------------------------------------------------------------------- /apps/www/components/promo-video.tsx: -------------------------------------------------------------------------------- 1 | "use client" 2 | 3 | import { AspectRatio } from "@/registry/new-york/ui/aspect-ratio" 4 | 5 | export function PromoVideo() { 6 | return ( 7 | 11 | 17 | 18 | ) 19 | } 20 | -------------------------------------------------------------------------------- /apps/www/components/providers.tsx: -------------------------------------------------------------------------------- 1 | "use client" 2 | 3 | import * as React from "react" 4 | import { ThemeProvider as NextThemesProvider } from "next-themes" 5 | import { ThemeProviderProps } from "next-themes/dist/types" 6 | 7 | import { TooltipProvider } from "@/registry/new-york/ui/tooltip" 8 | 9 | export function ThemeProvider({ children, ...props }: ThemeProviderProps) { 10 | return ( 11 | 12 | {children} 13 | 14 | ) 15 | } 16 | -------------------------------------------------------------------------------- /apps/www/components/site-footer.tsx: -------------------------------------------------------------------------------- 1 | import { siteConfig } from "@/config/site" 2 | 3 | export function SiteFooter() { 4 | return ( 5 | 30 | ) 31 | } 32 | -------------------------------------------------------------------------------- /apps/www/components/style-wrapper.tsx: -------------------------------------------------------------------------------- 1 | "use client" 2 | 3 | import * as React from "react" 4 | 5 | import { useConfig } from "@/hooks/use-config" 6 | import { Style } from "@/registry/styles" 7 | 8 | interface StyleWrapperProps extends React.HTMLAttributes { 9 | styleName?: Style["name"] 10 | } 11 | 12 | export function StyleWrapper({ styleName, children }: StyleWrapperProps) { 13 | const [config] = useConfig() 14 | 15 | if (!styleName || config.style === styleName) { 16 | return <>{children} 17 | } 18 | 19 | return null 20 | } 21 | -------------------------------------------------------------------------------- /apps/www/components/tailwind-indicator.tsx: -------------------------------------------------------------------------------- 1 | export function TailwindIndicator() { 2 | if (process.env.NODE_ENV === "production") return null 3 | 4 | return ( 5 |
6 |
xs
7 |
sm
8 |
md
9 |
lg
10 |
xl
11 |
2xl
12 |
13 | ) 14 | } 15 | -------------------------------------------------------------------------------- /apps/www/components/theme-wrapper.tsx: -------------------------------------------------------------------------------- 1 | "use client" 2 | 3 | import { cn } from "@/lib/utils" 4 | import { useConfig } from "@/hooks/use-config" 5 | 6 | export function ThemeWrapper({ children }: React.ComponentProps<"div">) { 7 | const [config] = useConfig() 8 | 9 | return
{children}
10 | } 11 | -------------------------------------------------------------------------------- /apps/www/config/site.ts: -------------------------------------------------------------------------------- 1 | export const siteConfig = { 2 | name: "shadcn/ui", 3 | url: "https://ui.shadcn.com", 4 | ogImage: "https://ui.shadcn.com/og.jpg", 5 | description: 6 | "Beautifully designed components built with Radix UI and Tailwind CSS.", 7 | links: { 8 | twitter: "https://twitter.com/shadcn", 9 | github: "https://github.com/shadcn/ui", 10 | }, 11 | } 12 | 13 | export type SiteConfig = typeof siteConfig 14 | -------------------------------------------------------------------------------- /apps/www/content/docs/about.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: About 3 | description: Powered by amazing open source projects. 4 | --- 5 | 6 | ## About 7 | 8 | [ui.shadcn.com](https://ui.shadcn.com) is a project by [shadcn](https://shadcn.com). 9 | 10 | ## Credits 11 | 12 | - [Radix UI](https://radix-ui.com) - For the primitives. 13 | - [Vercel](https://vercel.com) - Where I host all my projects. 14 | - [Shu Ding](https://shud.in) - The typography style is adapted from his work on Nextra. 15 | - [Cal](https://cal.com) - Where I copied the styles for the first component: the `Button`. 16 | - [cmdk](https://cmdk.paco.me) - For the `` component. 17 | 18 | ## License 19 | 20 | MIT © [shadcn](https://shadcn.com) 21 | -------------------------------------------------------------------------------- /apps/www/content/docs/components/skeleton.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Skeleton 3 | description: Use to show a placeholder while content is loading. 4 | component: true 5 | --- 6 | 7 | 8 | 9 | ## Installation 10 | 11 | 12 | 13 | 14 | CLI 15 | Manual 16 | 17 | 18 | 19 | ```bash 20 | npx shadcn-ui@latest add skeleton 21 | ``` 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | Copy and paste the following code into your project. 30 | 31 | 32 | 33 | Update the import paths to match your project setup. 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | ## Usage 42 | 43 | ```tsx 44 | import { Skeleton } from "@/components/ui/skeleton" 45 | ``` 46 | 47 | ```tsx 48 | 49 | ``` 50 | -------------------------------------------------------------------------------- /apps/www/content/docs/components/typography.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Typography 3 | description: Styles for headings, paragraphs, lists...etc 4 | component: true 5 | --- 6 | 7 | 11 | 12 | ## h1 13 | 14 | 15 | 16 | ## h2 17 | 18 | 19 | 20 | ## h3 21 | 22 | 23 | 24 | ## h4 25 | 26 | 27 | 28 | ## p 29 | 30 | 31 | 32 | ## blockquote 33 | 34 | 35 | 36 | ## table 37 | 38 | 39 | 40 | ## list 41 | 42 | 43 | 44 | ## Inline code 45 | 46 | 47 | 48 | ## Lead 49 | 50 | 51 | 52 | ## Large 53 | 54 | 55 | 56 | ## Small 57 | 58 | 59 | 60 | ## Muted 61 | 62 | 63 | -------------------------------------------------------------------------------- /apps/www/content/docs/figma.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Figma 3 | description: Every component recreated in Figma. With customizable props, typography and icons. 4 | --- 5 | 6 | The Figma UI Kit is open sourced by [Pietro Schirano](https://twitter.com/skirano). 7 | 8 | 9 |