UNPKG

@phcdevworks/spectre-ui

Version:

Framework-agnostic UI layer for the Spectre design system. Provides base CSS, component classes, utilities, and a Tailwind preset powered by @phcdevworks/spectre-tokens.

1 lines 13.2 kB
{"version":3,"sources":["../src/tokens.ts","../src/tailwind/preset.ts","../src/components/button.config.ts","../src/recipes/button.ts","../src/components/input.config.ts","../src/recipes/input.ts","../src/components/card.config.ts","../src/recipes/card.ts","../src/index.ts"],"names":["tokens","tailwindTheme","tailwindPreset","baseCreateTailwindTheme","baseCreateCssVariableMap","baseGenerateCssVariables"],"mappings":"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","file":"index.cjs","sourcesContent":["import tokens, {\n createCssVariableMap as baseCreateCssVariableMap,\n createTailwindTheme as baseCreateTailwindTheme,\n generateCssVariables as baseGenerateCssVariables,\n tailwindPreset,\n tailwindTheme,\n type AccessibilityTokens,\n type AnimationEntry,\n type ButtonStateTokens,\n type FormStateTokens,\n type TailwindTheme,\n type TokenScale,\n type Tokens,\n type TransitionTokens,\n type TypographyTokens,\n} from '@phcdevworks/spectre-tokens';\n\nexport const spectreTokens = tokens;\nexport const spectreTailwindTheme = tailwindTheme;\nexport const spectreTailwindPreset = tailwindPreset;\n\nexport type SpectreTokens = Tokens;\nexport type SpectreTailwindTheme = TailwindTheme;\nexport type SpectreTokenScale = TokenScale;\nexport type SpectreTransitionTokens = TransitionTokens;\nexport type SpectreTypographyTokens = TypographyTokens;\nexport type SpectreAccessibilityTokens = AccessibilityTokens;\nexport type SpectreAnimationEntry = AnimationEntry;\nexport type SpectreButtonStateTokens = ButtonStateTokens;\nexport type SpectreFormStateTokens = FormStateTokens;\n\nexport interface SpectreCssVariableOptions {\n selector?: string;\n prefix?: string;\n}\n\nexport type SpectreCssVariableMap = Record<string, string>;\n\nexport const createSpectreTailwindTheme = (\n source: SpectreTokens = spectreTokens,\n): SpectreTailwindTheme => baseCreateTailwindTheme(source);\n\nexport const createSpectreCssVariableMap = (\n source: SpectreTokens = spectreTokens,\n options?: SpectreCssVariableOptions,\n): SpectreCssVariableMap => baseCreateCssVariableMap(source, options);\n\nexport const generateSpectreCssVariables = (\n source: SpectreTokens = spectreTokens,\n options?: SpectreCssVariableOptions,\n): string => baseGenerateCssVariables(source, options);\n","import type { Config } from 'tailwindcss';\nimport { spectreTailwindTheme, spectreTokens } from '../tokens';\n\nconst readScaleValue = <T extends Record<string, string>>(scale: T, key: keyof T): string => {\n const value = scale[key];\n if (value == null) {\n throw new Error(`Missing Spectre token for key: ${String(key)}`);\n }\n\n return value;\n};\n\nconst readColorValue = (scale: keyof typeof spectreTokens.colors, shade: keyof Record<string, string>): string => {\n const scaleValue = spectreTokens.colors[scale];\n if (!scaleValue) {\n throw new Error(`Missing Spectre color scale: ${scale as string}`);\n }\n\n const value = scaleValue[shade as string];\n if (!value) {\n throw new Error(`Missing shade ${String(shade)} for ${String(scale)}`);\n }\n\n return value;\n};\n\nconst componentRadii = {\n btn: readScaleValue(spectreTokens.radii, 'md'),\n input: readScaleValue(spectreTokens.radii, 'md'),\n card: readScaleValue(spectreTokens.radii, 'lg'),\n pill: readScaleValue(spectreTokens.radii, 'pill'),\n};\n\nconst componentShadows = {\n soft: readScaleValue(spectreTokens.shadows, 'md'),\n card: readScaleValue(spectreTokens.shadows, 'lg'),\n};\n\nconst spacingShortcuts = {\n gutter: readScaleValue(spectreTokens.spacing, 'lg'),\n section: readScaleValue(spectreTokens.spacing, '2xl'),\n stack: readScaleValue(spectreTokens.spacing, 'md'),\n};\n\nconst componentColors = {\n surface: {\n DEFAULT: readColorValue('neutral', '50'),\n muted: readColorValue('neutral', '100'),\n strong: readColorValue('neutral', '900'),\n },\n intent: {\n info: readColorValue('info', '500'),\n success: readColorValue('success', '500'),\n warning: readColorValue('warning', '500'),\n danger: readColorValue('error', '500'),\n },\n};\n\nexport const spectrePreset: Config = {\n content: [],\n theme: {\n ...spectreTailwindTheme,\n extend: {\n borderRadius: componentRadii,\n boxShadow: componentShadows,\n spacing: spacingShortcuts,\n colors: componentColors,\n },\n },\n};\n","export type ButtonVariant = 'primary' | 'secondary' | 'ghost' | 'success' | 'danger';\nexport type ButtonSize = 'sm' | 'md' | 'lg';\nexport type ButtonState = 'default' | 'hover' | 'active' | 'disabled';\n\nexport interface ButtonClassConfig {\n baseClass: string;\n variants: Record<ButtonVariant, string>;\n sizes: Record<ButtonSize, string>;\n states: Record<ButtonState, string>;\n}\n\nexport const buttonConfig: ButtonClassConfig = {\n baseClass: 'sp-btn',\n variants: {\n primary: 'sp-btn-primary',\n secondary: 'sp-btn-secondary',\n ghost: 'sp-btn-ghost',\n success: 'sp-btn-success',\n danger: 'sp-btn-danger',\n },\n sizes: {\n sm: 'sp-btn-sm',\n md: 'sp-btn-md',\n lg: 'sp-btn-lg',\n },\n states: {\n default: '',\n hover: 'sp-btn-hover',\n active: 'sp-btn-active',\n disabled: 'sp-btn-disabled',\n },\n};\n","import { buttonConfig, type ButtonSize, type ButtonState, type ButtonVariant } from '../components/button.config';\n\nexport interface GetButtonClassesOptions {\n variant?: ButtonVariant;\n size?: ButtonSize;\n state?: ButtonState;\n extraClasses?: string;\n}\n\nexport const getButtonClasses = ({\n variant = 'primary',\n size = 'md',\n state = 'default',\n extraClasses = '',\n}: GetButtonClassesOptions = {}): string => {\n const classes = [\n buttonConfig.baseClass,\n buttonConfig.variants[variant],\n buttonConfig.sizes[size],\n buttonConfig.states[state],\n extraClasses,\n ].filter(Boolean);\n\n return classes.join(' ').trim();\n};\n","export type InputState = 'default' | 'focus' | 'invalid' | 'valid' | 'disabled';\n\nexport interface InputClassConfig {\n baseClass: string;\n states: Record<InputState, string>;\n}\n\nexport const inputConfig: InputClassConfig = {\n baseClass: 'sp-input',\n states: {\n default: '',\n focus: 'sp-input-focus',\n invalid: 'sp-input-error',\n valid: 'sp-input-success',\n disabled: 'sp-input-disabled',\n },\n};\n","import { inputConfig, type InputState } from '../components/input.config';\n\nexport interface GetInputClassesOptions {\n state?: InputState;\n extraClasses?: string;\n}\n\nexport const getInputClasses = ({\n state = 'default',\n extraClasses = '',\n}: GetInputClassesOptions = {}): string => {\n const classes = [inputConfig.baseClass, inputConfig.states[state], extraClasses].filter(Boolean);\n return classes.join(' ').trim();\n};\n","export type CardVariant = 'base' | 'elevated' | 'flat';\n\nexport interface CardClassConfig {\n baseClass: string;\n variants: Record<CardVariant, string>;\n}\n\nexport const cardConfig: CardClassConfig = {\n baseClass: 'sp-card',\n variants: {\n base: '',\n elevated: 'sp-card-elevated',\n flat: 'sp-card-flat',\n },\n};\n","import { cardConfig, type CardVariant } from '../components/card.config';\n\nexport interface GetCardClassesOptions {\n variant?: CardVariant;\n extraClasses?: string;\n}\n\nexport const getCardClasses = ({\n variant = 'base',\n extraClasses = '',\n}: GetCardClassesOptions = {}): string => {\n const classes = [cardConfig.baseClass, cardConfig.variants[variant], extraClasses].filter(Boolean);\n return classes.join(' ').trim();\n};\n","export {\n spectreTokens,\n spectreTailwindPreset,\n spectreTailwindTheme,\n createSpectreCssVariableMap,\n createSpectreTailwindTheme,\n generateSpectreCssVariables,\n} from './tokens';\n\nexport type {\n SpectreAccessibilityTokens,\n SpectreAnimationEntry,\n SpectreButtonStateTokens,\n SpectreFormStateTokens,\n SpectreTailwindTheme,\n SpectreTokenScale,\n SpectreTokens,\n SpectreTransitionTokens,\n SpectreTypographyTokens,\n} from './tokens';\n\nexport { spectrePreset } from './tailwind';\n\nexport {\n getButtonClasses,\n type GetButtonClassesOptions,\n} from './recipes/button';\nexport { getInputClasses, type GetInputClassesOptions } from './recipes/input';\nexport { getCardClasses, type GetCardClassesOptions } from './recipes/card';\n\nexport type {\n ButtonSize,\n ButtonState,\n ButtonVariant,\n} from './components/button.config';\nexport type { InputState } from './components/input.config';\nexport type { CardVariant } from './components/card.config';\n\nexport const spectreBaseStylesPath = '@phcdevworks/spectre-ui/dist/base.css';\nexport const spectreComponentsStylesPath = '@phcdevworks/spectre-ui/dist/components.css';\nexport const spectreUtilitiesStylesPath = '@phcdevworks/spectre-ui/dist/utilities.css';\n\n/**\n * Structured helper for consumers that prefer namespaced CSS entry points.\n */\nexport const spectreStyles = {\n base: spectreBaseStylesPath,\n components: spectreComponentsStylesPath,\n utilities: spectreUtilitiesStylesPath,\n} as const;\n"]}