UNPKG

@veracity/vui

Version:

Veracity UI is a React component library crafted for use within Veracity applications and pages. Based on Styled Components and @xstyled.

192 lines (191 loc) 6 kB
//#region src/button/theme.ts /** Token references per semantic intent. */ const intentTokens = { brand: { solid: "var(--vui-action-brand-solid)", solidInverse: "var(--vui-action-brand-solid-inverse)", solidHover: "var(--vui-action-brand-solid-hover)", solidPressed: "var(--vui-action-brand-solid-pressed)", subtleHover: "var(--vui-action-brand-subtle-hover)", subtlePressed: "var(--vui-action-brand-subtle-pressed)" }, contrast: { solid: "var(--vui-action-contrast-solid)", solidInverse: "var(--vui-action-contrast-solid-inverse)", solidHover: "var(--vui-action-contrast-solid-hover)", solidPressed: "var(--vui-action-contrast-solid-pressed)", subtleHover: "var(--vui-action-contrast-subtle-hover)", subtlePressed: "var(--vui-action-contrast-subtle-pressed)" }, success: { solid: "var(--vui-action-success-solid)", solidInverse: "var(--vui-action-success-solid-inverse)", solidHover: "var(--vui-action-success-solid-hover)", solidPressed: "var(--vui-action-success-solid-pressed)", subtleHover: "var(--vui-action-success-subtle-hover)", subtlePressed: "var(--vui-action-success-subtle-pressed)" }, danger: { solid: "var(--vui-action-danger-solid)", solidInverse: "var(--vui-action-danger-solid-inverse)", solidHover: "var(--vui-action-danger-solid-hover)", solidPressed: "var(--vui-action-danger-solid-pressed)", subtleHover: "var(--vui-action-danger-subtle-hover)", subtlePressed: "var(--vui-action-danger-subtle-pressed)" }, warning: { solid: "var(--vui-action-yellow-solid)", solidInverse: "var(--vui-action-yellow-solid-inverse)", solidHover: "var(--vui-action-yellow-solid-hover)", solidPressed: "var(--vui-action-yellow-solid-pressed)", subtleHover: "var(--vui-action-yellow-subtle-hover)", subtlePressed: "var(--vui-action-yellow-subtle-pressed)" } }; const TRANSPARENT = "var(--vui-color-opacity-none)"; const DISABLED_BG = "var(--vui-action-disabled-background)"; const DISABLED_FG = "var(--vui-action-disabled-foreground)"; /** Container styles per visual hierarchy, composed from intent tokens. */ const hierarchyRules = { primary: (t) => ({ bg: t.solid, borderColor: t.solid, color: t.solidInverse, hoverBg: t.solidHover, hoverBorderColor: t.solidHover, activeBg: t.solidPressed, activeBorderColor: t.solidPressed, disabledBg: DISABLED_BG, disabledBorderColor: DISABLED_BG, disabledColor: DISABLED_FG }), secondary: (t) => ({ bg: TRANSPARENT, borderColor: t.solid, color: t.solid, hoverBg: t.subtleHover, activeBg: t.subtlePressed, disabledBg: TRANSPARENT, disabledBorderColor: DISABLED_BG, disabledColor: DISABLED_FG }), tertiary: (t) => ({ bg: TRANSPARENT, borderColor: TRANSPARENT, color: t.solid, hoverBg: t.subtleHover, activeBg: t.subtlePressed, disabledBg: TRANSPARENT, disabledBorderColor: TRANSPARENT, disabledColor: DISABLED_FG }) }; const baseStyle = {}; const defaultProps = { size: "lg", variant: "primaryBrand", fontWeight: "medium" }; const parts = [ "container", "icon", "text" ]; const sizes = { sm: { container: { fontSize: "xs", h: 24, paddingX: 12, paddingXIcon: 8, paddingY: 5, gapX: 8 }, icon: { fontSize: "12px" } }, md: { container: { fontSize: "sm", h: 32, paddingX: 16, paddingXIcon: 12, paddingY: 8, gapX: 8 }, icon: { fontSize: "16px" } }, lg: { container: { fontSize: "md", h: 40, paddingX: 16, paddingXIcon: 16, paddingY: 10, gapX: 8 }, icon: { fontSize: "16px" } }, xl: { container: { fontSize: "lg", h: 48, paddingX: 16, paddingXIcon: 16, paddingY: 13, gapX: 8 }, icon: { fontSize: "18px" } } }; const variants = Object.fromEntries(Object.entries(intentTokens).flatMap(([intentKey, tokens]) => Object.entries(hierarchyRules).map(([hierarchyKey, buildContainer]) => [`${hierarchyKey}${intentKey.charAt(0).toUpperCase()}${intentKey.slice(1)}`, { container: buildContainer(tokens) }]))); variants.primaryDark = variants.primaryBrand; variants.secondaryDark = variants.secondaryBrand; variants.tertiaryDark = variants.tertiaryBrand; variants.primaryLight = variants.primaryContrast; variants.secondaryLight = variants.secondaryContrast; variants.tertiaryLight = variants.tertiaryContrast; variants.solidGreen = variants.primarySuccess; variants.solidRed = variants.primaryDanger; variants.solidDarkBlue = variants.tertiaryBrand; variants.solidYellow = variants.tertiaryWarning; variants.solidBlue = variants.primaryBrand; variants.blueOutlined = variants.secondaryBrand; variants.blueText = variants.tertiaryBrand; variants.subtleBlue = variants.secondaryBrand; variants.subtleRed = variants.secondaryDanger; variants.subtleGreen = variants.secondarySuccess; variants.subtleYellow = variants.secondaryWarning; variants.subtleGrey = variants.tertiaryBrand; variants.menuLight = variants.tertiaryBrand; variants.menuDark = variants.tertiaryBrand; variants.buttonGroupDefault = { container: { bg: "var(--vui-color-opacity-none)", borderColor: "var(--vui-control-placeholder)", color: "var(--vui-action-brand-solid)", hoverBg: "var(--vui-action-brand-subtle-hover)", activeBg: "var(--vui-action-brand-subtle-pressed)" } }; variants.buttonGroupRounded = { container: { bg: "var(--vui-background-default)", borderColor: "var(--vui-utility-border-subtle)", color: "var(--vui-foreground-default)", hoverBg: "var(--vui-action-brand-subtle-hover)", hoverBorderColor: "var(--vui-action-brand-subtle-hover)", hoverColor: "var(--vui-action-brand-subtle-inverse)", activeBg: "var(--vui-action-brand-solid-pressed)", activeBorderColor: "var(--vui-action-brand-solid-pressed)", activeColor: "var(--vui-action-brand-solid-inverse)", borderRadius: "1000", marginRight: "var(--vui-button-group-rounded-spacing, 22px)" } }; var theme_default = { baseStyle, defaultProps, parts, sizes, variants }; //#endregion export { theme_default as default }; globalThis.__vuiVersion__ = "5.3.1" //# sourceMappingURL=theme.js.map