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.

219 lines (185 loc) 6.85 kB
@layer components { .sp-btn { display: inline-flex; align-items: center; justify-content: center; gap: var(--sp-space-2xs, 0.25rem); padding: var(--sp-space-2xs, 0.25rem) var(--sp-space-md, 1rem); border-radius: var(--sp-radius-md, 4px); border: 1px solid transparent; font-family: var(--sp-font-family-sans, system-ui); font-size: var(--sp-font-md-size, 1rem); line-height: 1; font-weight: var(--sp-font-md-weight, 500); transition: background-color var(--sp-duration-fast, 150ms) var(--sp-easing-out, ease), color var(--sp-duration-fast, 150ms) var(--sp-easing-out, ease), box-shadow var(--sp-duration-fast, 150ms) var(--sp-easing-out, ease); cursor: pointer; min-height: var(--sp-min-touch-target, 44px); } .sp-btn-sm { padding: var(--sp-space-3xs, 0.125rem) var(--sp-space-sm, 0.75rem); font-size: var(--sp-font-sm-size, 0.875rem); line-height: var(--sp-font-sm-line-height, 1.5rem); } .sp-btn-md { padding: var(--sp-space-2xs, 0.25rem) var(--sp-space-md, 1rem); font-size: var(--sp-font-md-size, 1rem); line-height: var(--sp-font-md-line-height, 1.75rem); } .sp-btn-lg { padding: var(--sp-space-xs, 0.5rem) var(--sp-space-lg, 1.5rem); font-size: var(--sp-font-lg-size, 1.25rem); line-height: var(--sp-font-lg-line-height, 2rem); } .sp-btn-primary { background-color: var(--sp-button-primary-bg, #8652ff); color: var(--sp-button-primary-text, #ffffff); box-shadow: var(--sp-shadow-sm, 0 1px 2px rgba(15, 23, 42, 0.08)); } .sp-btn-primary.sp-btn-hover, .sp-btn-primary:hover { background-color: var(--sp-button-primary-bghover, #6c32e6); } .sp-btn-primary.sp-btn-active, .sp-btn-primary:active { background-color: var(--sp-button-primary-bgactive, #5626b4); } .sp-btn-primary.sp-btn-disabled, .sp-btn-primary:disabled { background-color: var(--sp-button-primary-bgdisabled, #cbd5f5); color: var(--sp-button-primary-textdisabled, #94a3b8); } .sp-btn-secondary { background-color: var(--sp-button-secondary-bg, #ffffff); color: var(--sp-button-secondary-text, #8652ff); border-color: var(--sp-button-secondary-border, #8652ff); } .sp-btn-secondary.sp-btn-hover, .sp-btn-secondary:hover { background-color: var(--sp-button-secondary-bghover, #f1f5f9); } .sp-btn-secondary.sp-btn-active, .sp-btn-secondary:active { background-color: var(--sp-button-secondary-bgactive, #e2e8f0); } .sp-btn-secondary.sp-btn-disabled, .sp-btn-secondary:disabled { background-color: var(--sp-button-secondary-bgdisabled, #f8fafc); color: var(--sp-button-secondary-textdisabled, #94a3b8); border-color: var(--sp-button-secondary-borderdisabled, #cbd5f5); } .sp-btn-ghost { background-color: var(--sp-button-ghost-bg, transparent); color: var(--sp-button-ghost-text, #8652ff); } .sp-btn-ghost.sp-btn-hover, .sp-btn-ghost:hover { background-color: var(--sp-button-ghost-bghover, #f5f0ff); } .sp-btn-ghost.sp-btn-active, .sp-btn-ghost:active { background-color: var(--sp-button-ghost-bgactive, #ebe2ff); } .sp-btn-ghost.sp-btn-disabled, .sp-btn-ghost:disabled { color: var(--sp-button-ghost-textdisabled, #94a3b8); background-color: var(--sp-button-ghost-bgdisabled, transparent); } .sp-btn-danger { background-color: var(--sp-button-danger-bg, #ef4444); color: var(--sp-button-danger-text, #ffffff); } .sp-btn-danger.sp-btn-hover, .sp-btn-danger:hover { background-color: var(--sp-button-danger-bghover, #dc2626); } .sp-btn-danger.sp-btn-active, .sp-btn-danger:active { background-color: var(--sp-button-danger-bgactive, #b91c1c); } .sp-btn-danger.sp-btn-disabled, .sp-btn-danger:disabled { background-color: var(--sp-button-danger-bgdisabled, #fecaca); color: var(--sp-button-danger-textdisabled, #94a3b8); } .sp-btn-success { background-color: var(--sp-button-success-bg, #22c55e); color: var(--sp-button-success-text, #ffffff); } .sp-btn-success.sp-btn-hover, .sp-btn-success:hover { background-color: var(--sp-button-success-bghover, #16a34a); } .sp-btn-success.sp-btn-active, .sp-btn-success:active { background-color: var(--sp-button-success-bgactive, #15803d); } .sp-btn-success.sp-btn-disabled, .sp-btn-success:disabled { background-color: var(--sp-button-success-bgdisabled, #bbf7d0); color: var(--sp-button-success-textdisabled, #94a3b8); } .sp-btn-disabled, .sp-btn:disabled { cursor: not-allowed; box-shadow: none; opacity: var(--sp-opacity-disabled, 0.38); } .sp-input { width: 100%; display: block; padding: var(--sp-space-2xs, 0.25rem) var(--sp-space-md, 1rem); border-radius: var(--sp-radius-md, 4px); border: 1px solid var(--sp-form-default-border, #cbd5f5); background-color: var(--sp-form-default-bg, #ffffff); color: var(--sp-form-default-text, #0f172a); font-family: var(--sp-font-family-sans, system-ui); font-size: var(--sp-font-md-size, 1rem); line-height: var(--sp-font-md-line-height, 1.75rem); transition: border-color var(--sp-duration-fast, 150ms) var(--sp-easing-out, ease), box-shadow var(--sp-duration-fast, 150ms) var(--sp-easing-out, ease), background-color var(--sp-duration-fast, 150ms) var(--sp-easing-out, ease); } .sp-input::placeholder { color: var(--sp-form-default-placeholder, #94a3b8); } .sp-input:focus, .sp-input-focus { border-color: var(--sp-form-focus-border, #8652ff); box-shadow: 0 0 0 var(--sp-focus-ring-width, 2px) var(--sp-form-focus-ring, #8652ff); outline: none; } .sp-input-error { border-color: var(--sp-form-invalid-border, #ef4444); background-color: var(--sp-form-invalid-bg, #fef2f2); color: var(--sp-form-invalid-text, #b91c1c); } .sp-input-success { border-color: var(--sp-form-valid-border, #22c55e); background-color: var(--sp-form-valid-bg, #f0fdf4); color: var(--sp-form-valid-text, #15803d); } .sp-input-disabled, .sp-input:disabled { background-color: var(--sp-form-disabled-bg, #f8fafc); border-color: var(--sp-form-disabled-border, #e2e8f0); color: var(--sp-form-disabled-text, #94a3b8); cursor: not-allowed; } .sp-card { background-color: var(--sp-form-default-bg, #ffffff); color: var(--sp-form-default-text, #0f172a); border-radius: var(--sp-radius-lg, 8px); padding: var(--sp-space-lg, 1.5rem); box-shadow: var(--sp-shadow-sm, 0 1px 2px rgba(15, 23, 42, 0.08)); border: 1px solid transparent; } .sp-card-elevated { box-shadow: var(--sp-shadow-lg, 0 8px 20px rgba(15, 23, 42, 0.18)); } .sp-card-flat { box-shadow: var(--sp-shadow-none, none); border-color: var(--sp-color-neutral-200, #e2e8f0); } }