mirror of
https://github.com/shadcn-ui/ui.git
synced 2026-07-08 06:28:37 +00:00
* feat: rtl * feat * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * feat: add sidebar * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * chore: changeset * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix
92 lines
2.4 KiB
TypeScript
92 lines
2.4 KiB
TypeScript
import { useQueryStates } from "nuqs"
|
|
import {
|
|
createLoader,
|
|
createSerializer,
|
|
parseAsBoolean,
|
|
parseAsInteger,
|
|
parseAsString,
|
|
parseAsStringLiteral,
|
|
type inferParserType,
|
|
type Options,
|
|
} from "nuqs/server"
|
|
|
|
import {
|
|
BASE_COLORS,
|
|
BASES,
|
|
DEFAULT_CONFIG,
|
|
iconLibraries,
|
|
MENU_ACCENTS,
|
|
MENU_COLORS,
|
|
RADII,
|
|
STYLES,
|
|
THEMES,
|
|
type BaseColorName,
|
|
type BaseName,
|
|
type FontValue,
|
|
type IconLibraryName,
|
|
type MenuAccentValue,
|
|
type MenuColorValue,
|
|
type RadiusValue,
|
|
type StyleName,
|
|
type ThemeName,
|
|
} from "@/registry/config"
|
|
import { FONTS } from "@/app/(create)/lib/fonts"
|
|
|
|
const designSystemSearchParams = {
|
|
base: parseAsStringLiteral<BaseName>(BASES.map((b) => b.name)).withDefault(
|
|
DEFAULT_CONFIG.base
|
|
),
|
|
item: parseAsString.withDefault("preview").withOptions({ shallow: true }),
|
|
iconLibrary: parseAsStringLiteral<IconLibraryName>(
|
|
Object.values(iconLibraries).map((i) => i.name)
|
|
).withDefault(DEFAULT_CONFIG.iconLibrary),
|
|
style: parseAsStringLiteral<StyleName>(STYLES.map((s) => s.name)).withDefault(
|
|
DEFAULT_CONFIG.style
|
|
),
|
|
theme: parseAsStringLiteral<ThemeName>(THEMES.map((t) => t.name)).withDefault(
|
|
DEFAULT_CONFIG.theme
|
|
),
|
|
font: parseAsStringLiteral<FontValue>(FONTS.map((f) => f.value)).withDefault(
|
|
DEFAULT_CONFIG.font
|
|
),
|
|
baseColor: parseAsStringLiteral<BaseColorName>(
|
|
BASE_COLORS.map((b) => b.name)
|
|
).withDefault(DEFAULT_CONFIG.baseColor),
|
|
menuAccent: parseAsStringLiteral<MenuAccentValue>(
|
|
MENU_ACCENTS.map((a) => a.value)
|
|
).withDefault(DEFAULT_CONFIG.menuAccent),
|
|
menuColor: parseAsStringLiteral<MenuColorValue>(
|
|
MENU_COLORS.map((m) => m.value)
|
|
).withDefault(DEFAULT_CONFIG.menuColor),
|
|
radius: parseAsStringLiteral<RadiusValue>(
|
|
RADII.map((r) => r.name)
|
|
).withDefault("default"),
|
|
template: parseAsStringLiteral([
|
|
"next",
|
|
"start",
|
|
"vite",
|
|
] as const).withDefault("next"),
|
|
rtl: parseAsBoolean.withDefault(false),
|
|
size: parseAsInteger.withDefault(100),
|
|
custom: parseAsBoolean.withDefault(false),
|
|
}
|
|
|
|
export const loadDesignSystemSearchParams = createLoader(
|
|
designSystemSearchParams
|
|
)
|
|
|
|
export const serializeDesignSystemSearchParams = createSerializer(
|
|
designSystemSearchParams
|
|
)
|
|
|
|
export const useDesignSystemSearchParams = (options: Options = {}) =>
|
|
useQueryStates(designSystemSearchParams, {
|
|
shallow: false,
|
|
history: "push",
|
|
...options,
|
|
})
|
|
|
|
export type DesignSystemSearchParams = inferParserType<
|
|
typeof designSystemSearchParams
|
|
>
|