├── .prettierignore ├── pnpm-workspace.yaml ├── .changeset ├── huge-bars-move.md ├── beige-bobcats-taste.md ├── loud-spies-move.md ├── rare-cheetahs-live.md ├── rich-fireants-hang.md ├── clean-rice-crash.md ├── tidy-ways-learn.md ├── config.json └── README.md ├── apps └── docs │ ├── public │ ├── og.png │ ├── favicon.ico │ ├── avatars │ │ ├── 01.png │ │ ├── 02.png │ │ ├── 03.png │ │ ├── 04.png │ │ └── 05.png │ ├── favicon-96x96.png │ ├── fonts │ │ ├── Geist.woff2 │ │ └── GeistMono.woff2 │ ├── star-history.png │ ├── apple-touch-icon.png │ ├── examples │ │ ├── cards-dark.png │ │ ├── cards-light.png │ │ ├── dashboard-dark.png │ │ ├── dashboard-light.png │ │ ├── authentication-dark.png │ │ └── authentication-light.png │ ├── images │ │ ├── sidebar-menu.png │ │ ├── sidebar-menu-dark.png │ │ ├── sidebar-structure.png │ │ └── sidebar-structure-dark.png │ ├── android-chrome-192x192.png │ ├── android-chrome-512x512.png │ ├── site.webmanifest │ ├── registry │ │ └── ui │ │ │ ├── collapsible.json │ │ │ ├── label.json │ │ │ ├── aspect-ratio.json │ │ │ ├── skeleton.json │ │ │ ├── sonner.json │ │ │ ├── separator.json │ │ │ ├── tooltip.json │ │ │ ├── popover.json │ │ │ ├── progress.json │ │ │ ├── callout.json │ │ │ ├── badge.json │ │ │ ├── delta-bar.json │ │ │ ├── card.json │ │ │ └── hover-card.json │ ├── r │ │ ├── collapsible.json │ │ ├── label.json │ │ ├── aspect-ratio.json │ │ ├── skeleton.json │ │ ├── sonner.json │ │ ├── separator.json │ │ └── tooltip.json │ ├── schema.json │ └── favicon.svg │ ├── src │ ├── entry-client.tsx │ ├── components │ │ ├── authentication │ │ │ └── validations │ │ │ │ └── auth.ts │ │ ├── mail │ │ │ └── use-mail.tsx │ │ ├── dashboard │ │ │ ├── search.tsx │ │ │ ├── overview.tsx │ │ │ └── main-nav.tsx │ │ ├── component-example.tsx │ │ ├── component-source.tsx │ │ ├── mdx-header.tsx │ │ ├── footer.tsx │ │ ├── page-header.tsx │ │ ├── mode-toggle.tsx │ │ └── cards │ │ │ └── index.tsx │ ├── lib │ │ ├── hooks │ │ │ └── use-id.ts │ │ ├── utils.ts │ │ └── mdx │ │ │ └── frontmatter.tsx │ ├── registry │ │ ├── index.ts │ │ ├── example │ │ │ ├── text-field-textarea-demo.tsx │ │ │ ├── avatar-demo.tsx │ │ │ ├── switch-demo.tsx │ │ │ ├── checkbox-indeterminate-demo.tsx │ │ │ ├── badge-demo.tsx │ │ │ ├── text-field-demo.tsx │ │ │ ├── alert-demo.tsx │ │ │ ├── skeleton-demo.tsx │ │ │ ├── delta-bar-demo.tsx │ │ │ ├── aspect-ratio-demo.tsx │ │ │ ├── toggle-demo.tsx │ │ │ ├── tooltip-demo.tsx │ │ │ ├── popover-demo.tsx │ │ │ ├── button-demo.tsx │ │ │ ├── radio-group-demo.tsx │ │ │ ├── checkbox-demo.tsx │ │ │ ├── progress-demo.tsx │ │ │ ├── pagination-demo.tsx │ │ │ ├── timeline-demo.tsx │ │ │ ├── flex-demo.tsx │ │ │ ├── pie-chart-demo.tsx │ │ │ ├── sonner-demo.tsx │ │ │ ├── otp-field-demo.tsx │ │ │ ├── separator-demo.tsx │ │ │ ├── toggle-group-demo.tsx │ │ │ ├── bar-chart-demo.tsx │ │ │ ├── slider-demo.tsx │ │ │ ├── collapsible-demo.tsx │ │ │ ├── number-field-demo.tsx │ │ │ ├── alert-dialog-demo.tsx │ │ │ ├── select-demo.tsx │ │ │ ├── breadcrumb-demo.tsx │ │ │ ├── badge-delta-demo.tsx │ │ │ ├── carousel-demo.tsx │ │ │ ├── carousel-spacing-demo.tsx │ │ │ ├── accordion-demo.tsx │ │ │ ├── text-field-error-demo.tsx │ │ │ ├── carousel-size-demo.tsx │ │ │ ├── area-chart-demo.tsx │ │ │ ├── carousel-orientation-demo.tsx │ │ │ ├── resizable-demo.tsx │ │ │ ├── grid-demo.tsx │ │ │ ├── hover-card-demo.tsx │ │ │ ├── carousel-plugin-demo.tsx │ │ │ ├── bar-list-demo.tsx │ │ │ ├── mode-toggle.tsx │ │ │ ├── dialog-demo.tsx │ │ │ └── carousel-api-demo.tsx │ │ ├── ui │ │ │ ├── collapsible.tsx │ │ │ ├── label.tsx │ │ │ ├── skeleton.tsx │ │ │ ├── aspect-ratio.tsx │ │ │ ├── sonner.tsx │ │ │ ├── separator.tsx │ │ │ ├── tooltip.tsx │ │ │ ├── progress.tsx │ │ │ ├── popover.tsx │ │ │ ├── callout.tsx │ │ │ ├── badge.tsx │ │ │ ├── hover-card.tsx │ │ │ ├── delta-bar.tsx │ │ │ └── card.tsx │ │ ├── block │ │ │ └── sidebar-01 │ │ │ │ └── components │ │ │ │ └── search-form.tsx │ │ ├── schema.ts │ │ └── registry-blocks.ts │ ├── routes │ │ ├── (app) │ │ │ ├── examples │ │ │ │ ├── cards.tsx │ │ │ │ ├── mail.tsx │ │ │ │ ├── dashboard.tsx │ │ │ │ ├── authentication.tsx │ │ │ │ └── tasks │ │ │ │ │ ├── components │ │ │ │ │ ├── table-input-filter.tsx │ │ │ │ │ └── table-view-options.tsx │ │ │ │ │ └── index.tsx │ │ │ ├── docs │ │ │ │ ├── figma.mdx │ │ │ │ ├── about.mdx │ │ │ │ ├── components │ │ │ │ │ ├── badge.mdx │ │ │ │ │ ├── label.mdx │ │ │ │ │ ├── delta-bar.mdx │ │ │ │ │ ├── badge-delta.mdx │ │ │ │ │ ├── skeleton.mdx │ │ │ │ │ ├── aspect-ratio.mdx │ │ │ │ │ ├── progress-circle.mdx │ │ │ │ │ ├── bar-list.mdx │ │ │ │ │ ├── separator.mdx │ │ │ │ │ ├── avatar.mdx │ │ │ │ │ ├── progress.mdx │ │ │ │ │ ├── switch.mdx │ │ │ │ │ ├── toggle.mdx │ │ │ │ │ ├── card.mdx │ │ │ │ │ ├── slider.mdx │ │ │ │ │ ├── date-picker.mdx │ │ │ │ │ ├── popover.mdx │ │ │ │ │ ├── timeline.mdx │ │ │ │ │ ├── callout.mdx │ │ │ │ │ ├── alert.mdx │ │ │ │ │ ├── resizable.mdx │ │ │ │ │ ├── flex.mdx │ │ │ │ │ ├── tooltip.mdx │ │ │ │ │ ├── hover-card.mdx │ │ │ │ │ ├── checkbox.mdx │ │ │ │ │ ├── toggle-group.mdx │ │ │ │ │ ├── text-field.mdx │ │ │ │ │ ├── collapsible.mdx │ │ │ │ │ ├── grid.mdx │ │ │ │ │ ├── radio-group.mdx │ │ │ │ │ ├── sonner.mdx │ │ │ │ │ ├── tabs.mdx │ │ │ │ │ ├── pagination.mdx │ │ │ │ │ ├── number-field.mdx │ │ │ │ │ ├── table.mdx │ │ │ │ │ ├── navigation-menu.mdx │ │ │ │ │ ├── dialog.mdx │ │ │ │ │ ├── select.mdx │ │ │ │ │ ├── context-menu.mdx │ │ │ │ │ ├── menubar.mdx │ │ │ │ │ └── dropdown-menu.mdx │ │ │ │ ├── introduction.mdx │ │ │ │ ├── cli.mdx │ │ │ │ └── dark-mode │ │ │ │ │ └── vite.mdx │ │ │ ├── docs.tsx │ │ │ └── examples.tsx │ │ ├── (blocks) │ │ │ └── blocks │ │ │ │ └── [name].tsx │ │ ├── [...404].tsx │ │ └── (app).tsx │ ├── styles │ │ └── mdx.css │ ├── entry-server.tsx │ ├── types │ │ └── search.ts │ └── app.tsx │ ├── .gitignore │ ├── tsconfig.json │ └── app.config.ts ├── packages └── cli │ ├── tsup.config.json │ ├── .gitignore │ ├── src │ ├── utils │ │ ├── resolve-import.ts │ │ ├── get-package-manager.ts │ │ ├── get-package-info.ts │ │ ├── logger.ts │ │ └── transformers │ │ │ ├── transform-import.ts │ │ │ └── index.ts │ └── index.ts │ ├── tsconfig.json │ └── README.md ├── turbo.json ├── .gitignore ├── tsconfig.json ├── .prettierrc.json ├── .eslintrc.json ├── README.md ├── LICENSE ├── .github └── workflows │ └── release.yml └── package.json /.prettierignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | build 3 | dist -------------------------------------------------------------------------------- /pnpm-workspace.yaml: -------------------------------------------------------------------------------- 1 | packages: 2 | - "apps/*" 3 | - "packages/*" -------------------------------------------------------------------------------- /.changeset/huge-bars-move.md: -------------------------------------------------------------------------------- 1 | --- 2 | "solidui-cli": patch 3 | --- 4 | 5 | feat: support deno 6 | -------------------------------------------------------------------------------- /apps/docs/public/og.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stefan-karger/solid-ui/HEAD/apps/docs/public/og.png -------------------------------------------------------------------------------- /.changeset/beige-bobcats-taste.md: -------------------------------------------------------------------------------- 1 | --- 2 | "docs": patch 3 | --- 4 | 5 | fix: isMobile now works correctly (#156) 6 | -------------------------------------------------------------------------------- /.changeset/loud-spies-move.md: -------------------------------------------------------------------------------- 1 | --- 2 | "docs": patch 3 | --- 4 | 5 | fix: removed remaining ?? in favor of show 6 | -------------------------------------------------------------------------------- /.changeset/rare-cheetahs-live.md: -------------------------------------------------------------------------------- 1 | --- 2 | "docs": patch 3 | --- 4 | 5 | feat: add label,etc.. to select exports 6 | -------------------------------------------------------------------------------- /.changeset/rich-fireants-hang.md: -------------------------------------------------------------------------------- 1 | --- 2 | "docs": patch 3 | --- 4 | 5 | fix: remove bg blur from dialog (#160) 6 | -------------------------------------------------------------------------------- /apps/docs/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stefan-karger/solid-ui/HEAD/apps/docs/public/favicon.ico -------------------------------------------------------------------------------- /.changeset/clean-rice-crash.md: -------------------------------------------------------------------------------- 1 | --- 2 | "docs": patch 3 | --- 4 | 5 | fix: delta-bar indicator know matches bar color 6 | -------------------------------------------------------------------------------- /apps/docs/public/avatars/01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stefan-karger/solid-ui/HEAD/apps/docs/public/avatars/01.png -------------------------------------------------------------------------------- /apps/docs/public/avatars/02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stefan-karger/solid-ui/HEAD/apps/docs/public/avatars/02.png -------------------------------------------------------------------------------- /apps/docs/public/avatars/03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stefan-karger/solid-ui/HEAD/apps/docs/public/avatars/03.png -------------------------------------------------------------------------------- /apps/docs/public/avatars/04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stefan-karger/solid-ui/HEAD/apps/docs/public/avatars/04.png -------------------------------------------------------------------------------- /apps/docs/public/avatars/05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stefan-karger/solid-ui/HEAD/apps/docs/public/avatars/05.png -------------------------------------------------------------------------------- /apps/docs/public/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stefan-karger/solid-ui/HEAD/apps/docs/public/favicon-96x96.png -------------------------------------------------------------------------------- /apps/docs/public/fonts/Geist.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stefan-karger/solid-ui/HEAD/apps/docs/public/fonts/Geist.woff2 -------------------------------------------------------------------------------- /apps/docs/public/star-history.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stefan-karger/solid-ui/HEAD/apps/docs/public/star-history.png -------------------------------------------------------------------------------- /apps/docs/public/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stefan-karger/solid-ui/HEAD/apps/docs/public/apple-touch-icon.png -------------------------------------------------------------------------------- /apps/docs/public/examples/cards-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stefan-karger/solid-ui/HEAD/apps/docs/public/examples/cards-dark.png -------------------------------------------------------------------------------- /apps/docs/public/fonts/GeistMono.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stefan-karger/solid-ui/HEAD/apps/docs/public/fonts/GeistMono.woff2 -------------------------------------------------------------------------------- /apps/docs/public/images/sidebar-menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stefan-karger/solid-ui/HEAD/apps/docs/public/images/sidebar-menu.png -------------------------------------------------------------------------------- /apps/docs/public/examples/cards-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stefan-karger/solid-ui/HEAD/apps/docs/public/examples/cards-light.png -------------------------------------------------------------------------------- /.changeset/tidy-ways-learn.md: -------------------------------------------------------------------------------- 1 | --- 2 | "solidui-cli": patch 3 | --- 4 | 5 | fix buggy rendering in component add command due to lots of items 6 | -------------------------------------------------------------------------------- /apps/docs/public/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stefan-karger/solid-ui/HEAD/apps/docs/public/android-chrome-192x192.png -------------------------------------------------------------------------------- /apps/docs/public/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stefan-karger/solid-ui/HEAD/apps/docs/public/android-chrome-512x512.png -------------------------------------------------------------------------------- /apps/docs/public/examples/dashboard-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stefan-karger/solid-ui/HEAD/apps/docs/public/examples/dashboard-dark.png -------------------------------------------------------------------------------- /apps/docs/public/examples/dashboard-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stefan-karger/solid-ui/HEAD/apps/docs/public/examples/dashboard-light.png -------------------------------------------------------------------------------- /apps/docs/public/images/sidebar-menu-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stefan-karger/solid-ui/HEAD/apps/docs/public/images/sidebar-menu-dark.png -------------------------------------------------------------------------------- /apps/docs/public/images/sidebar-structure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stefan-karger/solid-ui/HEAD/apps/docs/public/images/sidebar-structure.png -------------------------------------------------------------------------------- /apps/docs/public/examples/authentication-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stefan-karger/solid-ui/HEAD/apps/docs/public/examples/authentication-dark.png -------------------------------------------------------------------------------- /apps/docs/public/examples/authentication-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stefan-karger/solid-ui/HEAD/apps/docs/public/examples/authentication-light.png -------------------------------------------------------------------------------- /apps/docs/public/images/sidebar-structure-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stefan-karger/solid-ui/HEAD/apps/docs/public/images/sidebar-structure-dark.png -------------------------------------------------------------------------------- /apps/docs/src/entry-client.tsx: -------------------------------------------------------------------------------- 1 | // @refresh reload 2 | import { mount, StartClient } from "@solidjs/start/client" 3 | 4 | mount(() => , document.getElementById("app")!) 5 | -------------------------------------------------------------------------------- /packages/cli/tsup.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://cdn.jsdelivr.net/npm/tsup/schema.json", 3 | "entry": ["src/index.ts"], 4 | "splitting": false, 5 | "clean": true, 6 | "format": "esm" 7 | } 8 | -------------------------------------------------------------------------------- /turbo.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://turbo.build/schema.json", 3 | "pipeline": { 4 | "build": { 5 | "outputs": [".solid/**", "dist/**"] 6 | }, 7 | "lint": {}, 8 | "test": {}, 9 | "dev": {} 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /apps/docs/src/components/authentication/validations/auth.ts: -------------------------------------------------------------------------------- 1 | import type { Input } from "valibot" 2 | import { email, object, string } from "valibot" 3 | 4 | export const AuthSchema = object({ 5 | email: string([email()]) 6 | }) 7 | export type AuthForm = Input 8 | -------------------------------------------------------------------------------- /apps/docs/src/lib/hooks/use-id.ts: -------------------------------------------------------------------------------- 1 | let uniqueId = 0 2 | const getUniqueId = () => uniqueId++ 3 | const prefix = "S_" 4 | 5 | export function useId() { 6 | let ref 7 | if (ref === undefined) { 8 | ref = getUniqueId() 9 | } 10 | return `${prefix}${ref}` 11 | } 12 | -------------------------------------------------------------------------------- /apps/docs/src/components/mail/use-mail.tsx: -------------------------------------------------------------------------------- 1 | import { createStore } from "solid-js/store" 2 | 3 | import { mails, type Mail } from "./data" 4 | 5 | type Config = { 6 | selected: Mail["id"] | null 7 | } 8 | 9 | export const [mail, setMail] = createStore({ 10 | selected: mails[0].id 11 | }) 12 | -------------------------------------------------------------------------------- /apps/docs/src/registry/index.ts: -------------------------------------------------------------------------------- 1 | import { blocks } from "~/registry/registry-blocks" 2 | import { examples } from "~/registry/registry-examples" 3 | import { ui } from "~/registry/registry-ui" 4 | import type { Registry } from "~/registry/schema" 5 | 6 | export const registry: Registry = [...ui, ...examples, ...blocks] 7 | -------------------------------------------------------------------------------- /apps/docs/src/registry/example/text-field-textarea-demo.tsx: -------------------------------------------------------------------------------- 1 | import { TextField, TextFieldTextArea } from "~/registry/ui/text-field" 2 | 3 | export default function TextareaDemo() { 4 | return ( 5 | 6 | 7 | 8 | ) 9 | } 10 | -------------------------------------------------------------------------------- /apps/docs/src/registry/example/avatar-demo.tsx: -------------------------------------------------------------------------------- 1 | import { Avatar, AvatarFallback, AvatarImage } from "~/registry/ui/avatar" 2 | 3 | export default function AvatarDemo() { 4 | return ( 5 | 6 | 7 | EK 8 | 9 | ) 10 | } 11 | -------------------------------------------------------------------------------- /apps/docs/src/components/dashboard/search.tsx: -------------------------------------------------------------------------------- 1 | import { TextField, TextFieldInput } from "~/registry/ui/text-field" 2 | 3 | export function Search() { 4 | return ( 5 |
6 | 7 | 8 | 9 |
10 | ) 11 | } 12 | -------------------------------------------------------------------------------- /apps/docs/src/registry/ui/collapsible.tsx: -------------------------------------------------------------------------------- 1 | import * as CollapsiblePrimitive from "@kobalte/core/collapsible" 2 | 3 | const Collapsible = CollapsiblePrimitive.Root 4 | 5 | const CollapsibleTrigger = CollapsiblePrimitive.Trigger 6 | 7 | const CollapsibleContent = CollapsiblePrimitive.Content 8 | 9 | export { Collapsible, CollapsibleTrigger, CollapsibleContent } 10 | -------------------------------------------------------------------------------- /apps/docs/src/routes/(app)/examples/cards.tsx: -------------------------------------------------------------------------------- 1 | import { Cards } from "~/components/cards" 2 | import { MetaTags } from "~/components/meta-tags" 3 | 4 | export default function CardsRoute() { 5 | return ( 6 | <> 7 | 8 | 9 | 10 | ) 11 | } 12 | -------------------------------------------------------------------------------- /apps/docs/src/routes/(app)/examples/mail.tsx: -------------------------------------------------------------------------------- 1 | import { Mail } from "~/components/mail" 2 | import { MetaTags } from "~/components/meta-tags" 3 | 4 | export default function CardsRoute() { 5 | return ( 6 | <> 7 | 8 | 9 | 10 | ) 11 | } 12 | -------------------------------------------------------------------------------- /packages/cli/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | .solid 3 | .output 4 | .vercel 5 | .netlify 6 | netlify 7 | 8 | # Environment 9 | .env 10 | .env*.local 11 | 12 | # dependencies 13 | /node_modules 14 | 15 | # IDEs and editors 16 | /.idea 17 | .project 18 | .classpath 19 | *.launch 20 | .settings/ 21 | 22 | # Temp 23 | gitignore 24 | 25 | # System Files 26 | .DS_Store 27 | Thumbs.db 28 | -------------------------------------------------------------------------------- /.changeset/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://unpkg.com/@changesets/config@2.3.1/schema.json", 3 | "changelog": ["@changesets/changelog-github", { "repo": "stefan-karger/solid-ui" }], 4 | "commit": false, 5 | "fixed": [], 6 | "linked": [], 7 | "access": "public", 8 | "baseBranch": "main", 9 | "updateInternalDependencies": "patch", 10 | "ignore": [] 11 | } 12 | -------------------------------------------------------------------------------- /apps/docs/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | .solid 3 | .vinxi 4 | .output 5 | .vercel 6 | .netlify 7 | netlify 8 | 9 | # Environment 10 | .env 11 | .env*.local 12 | 13 | # dependencies 14 | /node_modules 15 | 16 | # IDEs and editors 17 | /.idea 18 | .project 19 | .classpath 20 | *.launch 21 | .settings/ 22 | 23 | # Temp 24 | gitignore 25 | 26 | # System Files 27 | .DS_Store 28 | Thumbs.db 29 | -------------------------------------------------------------------------------- /apps/docs/src/routes/(app)/examples/dashboard.tsx: -------------------------------------------------------------------------------- 1 | import { Dashboard } from "~/components/dashboard" 2 | import { MetaTags } from "~/components/meta-tags" 3 | 4 | export default function DashboardRoute() { 5 | return ( 6 | <> 7 | 8 | 9 | 10 | ) 11 | } 12 | -------------------------------------------------------------------------------- /apps/docs/src/registry/example/switch-demo.tsx: -------------------------------------------------------------------------------- 1 | import { Switch, SwitchControl, SwitchLabel, SwitchThumb } from "~/registry/ui/switch" 2 | 3 | export default function SwitchDemo() { 4 | return ( 5 | 6 | 7 | 8 | 9 | Airplane Mode 10 | 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /apps/docs/src/registry/example/checkbox-indeterminate-demo.tsx: -------------------------------------------------------------------------------- 1 | import { Checkbox } from "~/registry/ui/checkbox" 2 | import { Label } from "~/registry/ui/label" 3 | 4 | export default function CheckboxDemo() { 5 | return ( 6 |
7 | 8 | 9 |
10 | ) 11 | } 12 | -------------------------------------------------------------------------------- /packages/cli/src/utils/resolve-import.ts: -------------------------------------------------------------------------------- 1 | import { createMatchPath, type ConfigLoaderSuccessResult } from "tsconfig-paths" 2 | 3 | export async function resolveImport( 4 | importPath: string, 5 | config: Pick 6 | ) { 7 | return createMatchPath(config.absoluteBaseUrl, config.paths)(importPath, undefined, () => true, [ 8 | ".ts", 9 | ".tsx" 10 | ]) 11 | } 12 | -------------------------------------------------------------------------------- /apps/docs/src/registry/example/badge-demo.tsx: -------------------------------------------------------------------------------- 1 | import { Badge } from "~/registry/ui/badge" 2 | 3 | export default function BadgeDemo() { 4 | return ( 5 |
6 | Badge 7 | Secondary 8 | Outline 9 | Error 10 | Round 11 |
12 | ) 13 | } 14 | -------------------------------------------------------------------------------- /apps/docs/src/registry/example/text-field-demo.tsx: -------------------------------------------------------------------------------- 1 | import { TextField, TextFieldInput, TextFieldLabel } from "~/registry/ui/text-field" 2 | 3 | export default function TextFieldDemo() { 4 | return ( 5 | 6 | Email 7 | 8 | 9 | ) 10 | } 11 | -------------------------------------------------------------------------------- /apps/docs/src/registry/example/alert-demo.tsx: -------------------------------------------------------------------------------- 1 | import { IconTerminal } from "~/components/icons" 2 | import { Alert, AlertDescription, AlertTitle } from "~/registry/ui/alert" 3 | 4 | export default function AlertDemo() { 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/routes/(app)/examples/authentication.tsx: -------------------------------------------------------------------------------- 1 | import { Authentication } from "~/components/authentication" 2 | import { MetaTags } from "~/components/meta-tags" 3 | 4 | export default function AuthenticationRoute() { 5 | return ( 6 | <> 7 | 11 | 12 | 13 | ) 14 | } 15 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | .solid 3 | .output 4 | .vercel 5 | .netlify 6 | .turbo 7 | netlify 8 | 9 | # Environment 10 | .env 11 | .env*.local 12 | 13 | # dependencies 14 | /node_modules 15 | 16 | # IDEs and editors 17 | /.idea 18 | .project 19 | .classpath 20 | *.launch 21 | .settings/ 22 | .vscode/ 23 | 24 | # Temp 25 | gitignore 26 | 27 | # System Files 28 | .DS_Store 29 | Thumbs.db 30 | 31 | 32 | app.config.timestamp* 33 | 34 | .vscode/settings.json 35 | 36 | -------------------------------------------------------------------------------- /apps/docs/src/routes/(blocks)/blocks/[name].tsx: -------------------------------------------------------------------------------- 1 | import { Show } from "solid-js" 2 | import { useParams } from "@solidjs/router" 3 | 4 | import { Index } from "~/__registry__" 5 | 6 | export default function Block() { 7 | const params = useParams() 8 | 9 | return ( 10 | 11 | {(item) => { 12 | const Component = item().component 13 | return 14 | }} 15 | 16 | ) 17 | } 18 | -------------------------------------------------------------------------------- /apps/docs/src/registry/example/skeleton-demo.tsx: -------------------------------------------------------------------------------- 1 | import { Skeleton } from "~/registry/ui/skeleton" 2 | 3 | export default function SkeletonDemo() { 4 | return ( 5 |
6 | 7 |
8 | 9 | 10 |
11 |
12 | ) 13 | } 14 | -------------------------------------------------------------------------------- /apps/docs/src/registry/example/delta-bar-demo.tsx: -------------------------------------------------------------------------------- 1 | import { DeltaBar } from "~/registry/ui/delta-bar" 2 | 3 | export default function DeltaBarDemo() { 4 | return ( 5 |
6 |

DeltaBar with default increase behavior

7 | 8 |

DeltaBar with increase seen as negative

9 | 10 |
11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /apps/docs/src/registry/example/aspect-ratio-demo.tsx: -------------------------------------------------------------------------------- 1 | import { AspectRatio } from "~/registry/ui/aspect-ratio" 2 | 3 | export default function AspectRatioDemo() { 4 | return ( 5 | 6 | Photo by Drew Beamer 11 | 12 | ) 13 | } 14 | -------------------------------------------------------------------------------- /apps/docs/src/registry/example/toggle-demo.tsx: -------------------------------------------------------------------------------- 1 | import { Show } from "solid-js" 2 | 3 | import { IconMoon, IconSun } from "~/components/icons" 4 | import { Toggle } from "~/registry/ui/toggle" 5 | 6 | export default function ToggleDemo() { 7 | return ( 8 | 9 | {(state) => ( 10 | }> 11 | 12 | 13 | )} 14 | 15 | ) 16 | } 17 | -------------------------------------------------------------------------------- /packages/cli/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "exclude": ["node_modules", "dist"], 3 | "compilerOptions": { 4 | "allowSyntheticDefaultImports": true, 5 | "esModuleInterop": false, 6 | "target": "ESNext", 7 | "module": "ESNext", 8 | "moduleResolution": "bundler", 9 | "noEmit": false, 10 | "allowArbitraryExtensions": true, 11 | "strict": true, 12 | "baseUrl": "./", 13 | "outDir": "./dist", 14 | "paths": { 15 | "~/*": ["./src/*"] 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /apps/docs/src/registry/example/tooltip-demo.tsx: -------------------------------------------------------------------------------- 1 | import { Button } from "~/registry/ui/button" 2 | import { Tooltip, TooltipContent, TooltipTrigger } from "~/registry/ui/tooltip" 3 | 4 | export default function TooltipDemo() { 5 | return ( 6 | 7 | } variant="outline"> 8 | Trigger 9 | 10 | 11 |

Tooltip content

12 |
13 |
14 | ) 15 | } 16 | -------------------------------------------------------------------------------- /packages/cli/src/utils/get-package-manager.ts: -------------------------------------------------------------------------------- 1 | import { detect } from "@antfu/ni" 2 | 3 | export async function getPackageManager( 4 | targetDir: string 5 | ): Promise<"yarn" | "pnpm" | "bun" | "npm" | "deno"> { 6 | const packageManager = await detect({ programmatic: true, cwd: targetDir }) 7 | 8 | if (packageManager === "yarn@berry") return "yarn" 9 | if (packageManager === "pnpm@6") return "pnpm" 10 | if (packageManager === "bun") return "bun" 11 | 12 | return packageManager ?? "npm" 13 | } 14 | -------------------------------------------------------------------------------- /apps/docs/src/registry/example/popover-demo.tsx: -------------------------------------------------------------------------------- 1 | import { Button } from "~/registry/ui/button" 2 | import { Popover, PopoverContent, PopoverTrigger } from "~/registry/ui/popover" 3 | 4 | export default function PopoverDemo() { 5 | return ( 6 | 7 | }>trigger me 8 | 9 | A UI toolkit for building accessible web apps and design systems with SolidJS. 10 | 11 | 12 | ) 13 | } 14 | -------------------------------------------------------------------------------- /apps/docs/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ESNext", 4 | "module": "ESNext", 5 | "moduleResolution": "bundler", 6 | "allowSyntheticDefaultImports": true, 7 | "esModuleInterop": true, 8 | "jsx": "preserve", 9 | "jsxImportSource": "solid-js", 10 | "allowJs": true, 11 | "strict": true, 12 | "types": ["vinxi/client"], 13 | "isolatedModules": true, 14 | "baseUrl": "./", 15 | "paths": { 16 | "~/*": ["./src/*"] 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /apps/docs/src/lib/utils.ts: -------------------------------------------------------------------------------- 1 | import type { ClassValue } from "clsx" 2 | import { clsx } from "clsx" 3 | import { twMerge } from "tailwind-merge" 4 | 5 | export function cn(...inputs: ClassValue[]) { 6 | return twMerge(clsx(inputs)) 7 | } 8 | 9 | export function clamp(val: number, min: number, max: number) { 10 | return val > max ? max : val < min ? min : val 11 | } 12 | 13 | export function toggleValue(array: T[], value: T): T[] { 14 | return array.includes(value) ? array.filter((item) => item !== value) : [...array, value] 15 | } 16 | -------------------------------------------------------------------------------- /apps/docs/src/registry/example/button-demo.tsx: -------------------------------------------------------------------------------- 1 | import { Button } from "~/registry/ui/button" 2 | 3 | export default function ButtonDemo() { 4 | return ( 5 |
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | ) 14 | } 15 | -------------------------------------------------------------------------------- /apps/docs/public/site.webmanifest: -------------------------------------------------------------------------------- 1 | { 2 | "name": "SolidUI", 3 | "short_name": "SolidUI", 4 | "icons": [ 5 | { 6 | "src": "/android-chrome-192x192.png", 7 | "sizes": "192x192", 8 | "type": "image/png", 9 | "purpose": "maskable" 10 | }, 11 | { 12 | "src": "/android-chrome-512x512.png", 13 | "sizes": "512x512", 14 | "type": "image/png", 15 | "purpose": "maskable" 16 | } 17 | ], 18 | "theme_color": "#ffffff", 19 | "background_color": "#ffffff", 20 | "display": "standalone" 21 | } -------------------------------------------------------------------------------- /apps/docs/public/registry/ui/collapsible.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "collapsible", 3 | "dependencies": [ 4 | "@kobalte/core" 5 | ], 6 | "files": [ 7 | { 8 | "name": "collapsible.tsx", 9 | "content": "import * as CollapsiblePrimitive from \"@kobalte/core/collapsible\"\n\nconst Collapsible = CollapsiblePrimitive.Root\n\nconst CollapsibleTrigger = CollapsiblePrimitive.Trigger\n\nconst CollapsibleContent = CollapsiblePrimitive.Content\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent }\n" 10 | } 11 | ], 12 | "type": "ui" 13 | } -------------------------------------------------------------------------------- /apps/docs/src/registry/example/radio-group-demo.tsx: -------------------------------------------------------------------------------- 1 | import { For } from "solid-js" 2 | 3 | import { RadioGroup, RadioGroupItem, RadioGroupItemLabel } from "~/registry/ui/radio-group" 4 | 5 | export default function RadioGroupDemo() { 6 | return ( 7 | 8 | 9 | {(fruit) => ( 10 | 11 | {fruit} 12 | 13 | )} 14 | 15 | 16 | ) 17 | } 18 | -------------------------------------------------------------------------------- /apps/docs/src/registry/ui/label.tsx: -------------------------------------------------------------------------------- 1 | import type { Component, ComponentProps } from "solid-js" 2 | import { splitProps } from "solid-js" 3 | 4 | import { cn } from "~/lib/utils" 5 | 6 | const Label: Component> = (props) => { 7 | const [local, others] = splitProps(props, ["class"]) 8 | return ( 9 |