@eagami/ui 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eagami-ui.mjs","sources":["../../../src/lib/button/button.component.ts","../../../src/lib/button/button.component.html","../../../src/lib/card/card.component.ts","../../../src/lib/card/card.component.html","../../../src/lib/checkbox/checkbox.component.ts","../../../src/lib/checkbox/checkbox.component.html","../../../src/lib/dialog/dialog.component.ts","../../../src/lib/dialog/dialog.component.html","../../../src/lib/dropdown/dropdown.component.ts","../../../src/lib/dropdown/dropdown.component.html","../../../src/lib/input/input.component.ts","../../../src/lib/input/input.component.html","../../../src/lib/radio/radio-group.component.ts","../../../src/lib/radio/radio-group.component.html","../../../src/lib/radio/radio.component.ts","../../../src/lib/radio/radio.component.html","../../../src/public-api.ts","../../../src/eagami-ui.ts"],"sourcesContent":["import { NgClass } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n output,\n} from '@angular/core';\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'ghost' | 'danger';\nexport type ButtonSize = 'sm' | 'md' | 'lg';\nexport type ButtonType = 'button' | 'submit' | 'reset';\n\n@Component({\n selector: 'ea-button',\n templateUrl: './button.component.html',\n styleUrl: './button.component.scss',\n imports: [NgClass],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ButtonComponent {\n // Inputs\n readonly variant = input<ButtonVariant>('primary');\n readonly size = input<ButtonSize>('md');\n readonly type = input<ButtonType>('button');\n readonly disabled = input<boolean>(false);\n readonly loading = input<boolean>(false);\n readonly fullWidth = input<boolean>(false);\n readonly ariaLabel = input<string | undefined>(undefined, { alias: 'aria-label' });\n\n // Output\n readonly clicked = output<MouseEvent>();\n\n // Derived\n readonly isDisabled = computed(() => this.disabled() || this.loading());\n\n readonly hostClasses = computed(() => ({\n [`ea-button--${this.variant()}`]: true,\n [`ea-button--${this.size()}`]: true,\n 'ea-button--full-width': this.fullWidth(),\n 'ea-button--loading': this.loading(),\n 'ea-button--disabled': this.isDisabled(),\n }));\n\n handleClick(event: MouseEvent): void {\n if (this.isDisabled()) {\n event.preventDefault();\n return;\n }\n this.clicked.emit(event);\n }\n}\n","<button\n class=\"ea-button\"\n [ngClass]=\"hostClasses()\"\n [type]=\"type()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-busy]=\"loading() || null\"\n [attr.aria-disabled]=\"isDisabled() || null\"\n (click)=\"handleClick($event)\">\n @if (loading()) {\n <span\n class=\"ea-button__spinner\"\n aria-hidden=\"true\">\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n stroke-width=\"3\"\n stroke-linecap=\"round\"\n stroke-dasharray=\"31.4\"\n stroke-dashoffset=\"10\" />\n </svg>\n </span>\n }\n\n <span\n class=\"ea-button__content\"\n [class.ea-button__content--hidden]=\"loading()\">\n <ng-content select=\"[slot=prefix]\" />\n <span class=\"ea-button__label\">\n <ng-content />\n </span>\n <ng-content select=\"[slot=suffix]\" />\n </span>\n</button>\n","import { NgClass } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n} from '@angular/core';\n\nexport type CardVariant = 'elevated' | 'outlined' | 'filled';\nexport type CardPadding = 'none' | 'sm' | 'md' | 'lg';\n\n@Component({\n selector: 'ea-card',\n imports: [NgClass],\n templateUrl: './card.component.html',\n styleUrl: './card.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class CardComponent {\n // Inputs\n readonly variant = input<CardVariant>('elevated');\n readonly padding = input<CardPadding>('md');\n readonly fullWidth = input<boolean>(false);\n\n // Computed\n readonly hostClasses = computed(() => ({\n [`ea-card--${this.variant()}`]: true,\n [`ea-card--padding-${this.padding()}`]: true,\n 'ea-card--full-width': this.fullWidth(),\n }));\n}\n","<div\n class=\"ea-card\"\n [ngClass]=\"hostClasses()\">\n <div class=\"ea-card__header\">\n <ng-content select=\"[slot=header]\" />\n </div>\n\n <div class=\"ea-card__body\">\n <ng-content />\n </div>\n\n <div class=\"ea-card__footer\">\n <ng-content select=\"[slot=footer]\" />\n </div>\n</div>\n","import { NgClass } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nexport type CheckboxSize = 'sm' | 'md' | 'lg';\n\n@Component({\n selector: 'ea-checkbox',\n imports: [NgClass],\n templateUrl: './checkbox.component.html',\n styleUrl: './checkbox.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CheckboxComponent),\n multi: true,\n },\n ],\n})\nexport class CheckboxComponent implements ControlValueAccessor {\n // Inputs\n readonly label = input<string | undefined>(undefined);\n readonly size = input<CheckboxSize>('md');\n readonly disabled = input<boolean>(false);\n readonly required = input<boolean>(false);\n readonly indeterminate = input<boolean>(false);\n readonly id = input<string>(`ea-checkbox-${Math.random().toString(36).slice(2, 9)}`);\n\n // Two-way checked binding\n readonly checked = model<boolean>(false);\n\n // Outputs\n readonly changed = output<boolean>();\n\n // Internal state\n private readonly _formDisabled = signal(false);\n\n // Computed\n readonly isDisabled = computed(() => this.disabled() || this._formDisabled());\n\n readonly hostClasses = computed(() => ({\n [`ea-checkbox--${this.size()}`]: true,\n 'ea-checkbox--disabled': this.isDisabled(),\n 'ea-checkbox--checked': this.checked(),\n 'ea-checkbox--indeterminate': this.indeterminate(),\n }));\n\n // ControlValueAccessor callbacks\n private onChange: (value: boolean) => void = () => {};\n private onTouched: () => void = () => {};\n\n // ControlValueAccessor\n writeValue(val: boolean): void {\n this.checked.set(!!val);\n }\n\n registerOnChange(fn: (value: boolean) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this._formDisabled.set(isDisabled);\n }\n\n // Handlers\n handleChange(): void {\n if (this.isDisabled()) return;\n const newValue = !this.checked();\n this.checked.set(newValue);\n this.onChange(newValue);\n this.onTouched();\n this.changed.emit(newValue);\n }\n}\n","<label\n class=\"ea-checkbox\"\n [ngClass]=\"hostClasses()\"\n [for]=\"id()\">\n <input\n #inputEl\n type=\"checkbox\"\n class=\"ea-checkbox__input\"\n [id]=\"id()\"\n [checked]=\"checked()\"\n [disabled]=\"isDisabled()\"\n [required]=\"required()\"\n [indeterminate]=\"indeterminate()\"\n [attr.aria-checked]=\"indeterminate() ? 'mixed' : checked()\"\n (change)=\"handleChange()\" />\n\n <span\n class=\"ea-checkbox__box\"\n aria-hidden=\"true\">\n @if (indeterminate()) {\n <svg\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M4 8h8\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\" />\n </svg>\n } @else if (checked()) {\n <svg\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M3.5 8.5L6.5 11.5L12.5 4.5\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n }\n </span>\n\n @if (label()) {\n <span class=\"ea-checkbox__label\">{{ label() }}</span>\n }\n</label>\n","import { NgClass } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n ViewEncapsulation,\n computed,\n effect,\n input,\n model,\n output,\n viewChild,\n} from '@angular/core';\n\nexport type DialogSize = 'sm' | 'md' | 'lg' | 'full';\n\n@Component({\n selector: 'ea-dialog',\n imports: [NgClass],\n templateUrl: './dialog.component.html',\n styleUrl: './dialog.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class DialogComponent {\n private readonly dialogEl = viewChild<ElementRef<HTMLDialogElement>>('dialogEl');\n\n // Inputs\n readonly size = input<DialogSize>('md');\n readonly closeOnBackdrop = input<boolean>(true);\n readonly closeOnEscape = input<boolean>(true);\n readonly showClose = input<boolean>(true);\n readonly ariaLabel = input<string | undefined>(undefined, { alias: 'aria-label' });\n\n // Two-way open binding\n readonly open = model<boolean>(false);\n\n // Outputs\n readonly opened = output<void>();\n readonly closed = output<void>();\n\n // Computed\n readonly panelClasses = computed(() => ({\n [`ea-dialog__panel--${this.size()}`]: true,\n }));\n\n constructor() {\n effect(() => {\n const dialogRef = this.dialogEl()?.nativeElement;\n if (!dialogRef) return;\n\n if (this.open()) {\n if (!dialogRef.open) {\n dialogRef.showModal();\n this.opened.emit();\n }\n } else {\n if (dialogRef.open) {\n dialogRef.close();\n }\n }\n });\n }\n\n handleClose(): void {\n this.open.set(false);\n this.closed.emit();\n }\n\n handleBackdropClick(event: MouseEvent): void {\n if (!this.closeOnBackdrop()) return;\n const dialogRef = this.dialogEl()?.nativeElement;\n if (event.target === dialogRef) {\n this.handleClose();\n }\n }\n\n handleCancel(event: Event): void {\n if (!this.closeOnEscape()) {\n event.preventDefault();\n return;\n }\n this.handleClose();\n }\n}\n","<dialog\n #dialogEl\n class=\"ea-dialog\"\n [attr.aria-label]=\"ariaLabel()\"\n (click)=\"handleBackdropClick($event)\"\n (cancel)=\"handleCancel($event)\">\n <div\n class=\"ea-dialog__panel\"\n [ngClass]=\"panelClasses()\">\n @if (showClose()) {\n <button\n type=\"button\"\n class=\"ea-dialog__close\"\n aria-label=\"Close dialog\"\n (click)=\"handleClose()\">\n <svg\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden=\"true\">\n <path\n d=\"M4 4l8 8M12 4l-8 8\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\" />\n </svg>\n </button>\n }\n\n <div class=\"ea-dialog__header\">\n <ng-content select=\"[slot=header]\" />\n </div>\n\n <div class=\"ea-dialog__body\">\n <ng-content />\n </div>\n\n <div class=\"ea-dialog__footer\">\n <ng-content select=\"[slot=footer]\" />\n </div>\n </div>\n</dialog>\n","import { NgClass } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostListener,\n computed,\n forwardRef,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nexport type DropdownSize = 'sm' | 'md' | 'lg';\n\nexport interface DropdownOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\n@Component({\n selector: 'ea-dropdown',\n imports: [NgClass],\n templateUrl: './dropdown.component.html',\n styleUrl: './dropdown.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DropdownComponent),\n multi: true,\n },\n ],\n})\nexport class DropdownComponent implements ControlValueAccessor {\n private readonly elRef = viewChild<ElementRef<HTMLElement>>('triggerEl');\n\n // Inputs\n readonly label = input<string | undefined>(undefined);\n readonly placeholder = input<string>('Select…');\n readonly options = input<DropdownOption[]>([]);\n readonly size = input<DropdownSize>('md');\n readonly disabled = input<boolean>(false);\n readonly required = input<boolean>(false);\n readonly hint = input<string | undefined>(undefined);\n readonly errorMsg = input<string | undefined>(undefined, { alias: 'error' });\n readonly id = input<string>(`ea-dropdown-${Math.random().toString(36).slice(2, 9)}`);\n\n // Two-way value binding\n readonly value = model<string>('');\n\n // Outputs\n readonly changed = output<string>();\n\n // Internal state\n readonly isOpen = signal(false);\n readonly focusedIndex = signal(-1);\n private readonly _formDisabled = signal(false);\n\n // ControlValueAccessor callbacks\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n // Computed\n readonly isDisabled = computed(() => this.disabled() || this._formDisabled());\n\n readonly resolvedStatus = computed(() => (this.errorMsg() ? 'error' : 'default'));\n\n readonly showError = computed(() => !!this.errorMsg());\n readonly showHint = computed(() => !!this.hint() && !this.showError());\n\n readonly selectedLabel = computed(() => {\n const opt = this.options().find(o => o.value === this.value());\n return opt?.label ?? '';\n });\n\n readonly triggerClasses = computed(() => ({\n [`ea-dropdown__trigger--${this.size()}`]: true,\n [`ea-dropdown__trigger--${this.resolvedStatus()}`]: true,\n 'ea-dropdown__trigger--open': this.isOpen(),\n 'ea-dropdown__trigger--disabled': this.isDisabled(),\n }));\n\n // ControlValueAccessor\n writeValue(val: string): void {\n this.value.set(val ?? '');\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this._formDisabled.set(isDisabled);\n }\n\n // Handlers\n toggle(): void {\n if (this.isDisabled()) return;\n this.isOpen.set(!this.isOpen());\n if (this.isOpen()) {\n const idx = this.options().findIndex(o => o.value === this.value());\n this.focusedIndex.set(idx >= 0 ? idx : 0);\n }\n }\n\n select(option: DropdownOption): void {\n if (option.disabled || this.isDisabled()) return;\n this.value.set(option.value);\n this.onChange(option.value);\n this.onTouched();\n this.changed.emit(option.value);\n this.close();\n }\n\n close(): void {\n this.isOpen.set(false);\n this.focusedIndex.set(-1);\n }\n\n handleKeydown(event: KeyboardEvent): void {\n if (this.isDisabled()) return;\n\n switch (event.key) {\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (this.isOpen()) {\n const opts = this.options();\n const idx = this.focusedIndex();\n if (idx >= 0 && idx < opts.length && !opts[idx].disabled) {\n this.select(opts[idx]);\n }\n } else {\n this.toggle();\n }\n break;\n case 'ArrowDown':\n event.preventDefault();\n if (!this.isOpen()) {\n this.toggle();\n } else {\n this.moveFocus(1);\n }\n break;\n case 'ArrowUp':\n event.preventDefault();\n if (this.isOpen()) {\n this.moveFocus(-1);\n }\n break;\n case 'Escape':\n if (this.isOpen()) {\n event.preventDefault();\n this.close();\n this.elRef()?.nativeElement.focus();\n }\n break;\n }\n }\n\n private moveFocus(delta: number): void {\n const opts = this.options();\n let idx = this.focusedIndex() + delta;\n while (idx >= 0 && idx < opts.length && opts[idx].disabled) {\n idx += delta;\n }\n if (idx >= 0 && idx < opts.length) {\n this.focusedIndex.set(idx);\n }\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: Event): void {\n if (!this.isOpen()) return;\n const el = event.target as Node;\n const host = this.elRef()?.nativeElement.closest('ea-dropdown');\n if (host && !host.contains(el)) {\n this.close();\n this.onTouched();\n }\n }\n}\n","<div class=\"ea-dropdown-field\">\n @if (label()) {\n <label\n class=\"ea-dropdown-field__label\"\n [for]=\"id()\"\n [class.ea-dropdown-field__label--required]=\"required()\">\n {{ label() }}\n </label>\n }\n\n <div class=\"ea-dropdown\">\n <button\n #triggerEl\n type=\"button\"\n class=\"ea-dropdown__trigger\"\n [ngClass]=\"triggerClasses()\"\n [id]=\"id()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-labelledby]=\"label() ? id() : null\"\n (click)=\"toggle()\"\n (keydown)=\"handleKeydown($event)\">\n <span\n class=\"ea-dropdown__value\"\n [class.ea-dropdown__value--placeholder]=\"!selectedLabel()\">\n {{ selectedLabel() || placeholder() }}\n </span>\n <svg\n class=\"ea-dropdown__chevron\"\n [class.ea-dropdown__chevron--open]=\"isOpen()\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden=\"true\">\n <path\n d=\"M4 6l4 4 4-4\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </button>\n\n @if (isOpen()) {\n <ul\n class=\"ea-dropdown__menu\"\n role=\"listbox\"\n [attr.aria-activedescendant]=\"\n focusedIndex() >= 0 ? id() + '-option-' + focusedIndex() : null\n \">\n @for (option of options(); track option.value; let i = $index) {\n <li\n class=\"ea-dropdown__option\"\n [class.ea-dropdown__option--selected]=\"option.value === value()\"\n [class.ea-dropdown__option--focused]=\"i === focusedIndex()\"\n [class.ea-dropdown__option--disabled]=\"option.disabled\"\n [id]=\"id() + '-option-' + i\"\n role=\"option\"\n [attr.aria-selected]=\"option.value === value()\"\n [attr.aria-disabled]=\"option.disabled || null\"\n (click)=\"select(option)\"\n (mouseenter)=\"focusedIndex.set(i)\">\n {{ option.label }}\n </li>\n }\n </ul>\n }\n </div>\n\n @if (showError()) {\n <p\n class=\"ea-dropdown-field__message ea-dropdown-field__message--error\"\n [id]=\"id() + '-error'\"\n role=\"alert\">\n {{ errorMsg() }}\n </p>\n }\n\n @if (showHint()) {\n <p\n class=\"ea-dropdown-field__message ea-dropdown-field__message--hint\"\n [id]=\"id() + '-hint'\">\n {{ hint() }}\n </p>\n }\n</div>\n","import { NgClass } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n forwardRef,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nexport type InputSize = 'sm' | 'md' | 'lg';\nexport type InputStatus = 'default' | 'error' | 'success';\nexport type InputType =\n | 'text'\n | 'email'\n | 'password'\n | 'number'\n | 'search'\n | 'tel'\n | 'url';\n\n@Component({\n selector: 'ea-input',\n templateUrl: './input.component.html',\n styleUrl: './input.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgClass],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => InputComponent),\n multi: true,\n },\n ],\n})\nexport class InputComponent implements ControlValueAccessor {\n readonly inputEl = viewChild<ElementRef<HTMLInputElement>>('inputEl');\n\n // Inputs\n readonly label = input<string | undefined>(undefined);\n readonly type = input<InputType>('text');\n readonly placeholder = input<string>('');\n readonly size = input<InputSize>('md');\n readonly status = input<InputStatus>('default');\n readonly hint = input<string | undefined>(undefined);\n readonly errorMsg = input<string | undefined>(undefined, { alias: 'error' });\n readonly disabled = input<boolean>(false);\n readonly readonly = input<boolean>(false);\n readonly required = input<boolean>(false);\n readonly id = input<string>(`ea-input-${Math.random().toString(36).slice(2, 9)}`);\n\n // Two-way value binding\n readonly value = model<string>('');\n\n // Internal state\n readonly focused = signal(false);\n private readonly _formDisabled = signal(false);\n\n // Outputs\n readonly inputFocused = output<FocusEvent>();\n readonly inputBlurred = output<FocusEvent>();\n\n // ControlValueAccessor callbacks\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n // Computed\n readonly isDisabled = computed(() => this.disabled() || this._formDisabled());\n\n readonly resolvedStatus = computed<InputStatus>(() =>\n this.errorMsg() ? 'error' : this.status(),\n );\n\n readonly showError = computed(() => !!this.errorMsg());\n readonly showHint = computed(() => !!this.hint() && !this.showError());\n\n readonly wrapperClasses = computed(() => ({\n [`ea-input-wrapper--${this.size()}`]: true,\n [`ea-input-wrapper--${this.resolvedStatus()}`]: true,\n 'ea-input-wrapper--focused': this.focused(),\n 'ea-input-wrapper--disabled': this.isDisabled(),\n 'ea-input-wrapper--readonly': this.readonly(),\n }));\n\n // ControlValueAccessor\n writeValue(val: string): void {\n this.value.set(val ?? '');\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this._formDisabled.set(isDisabled);\n }\n\n // Handlers\n handleInput(event: Event): void {\n const val = (event.target as HTMLInputElement).value;\n this.value.set(val);\n this.onChange(val);\n }\n\n handleFocus(event: FocusEvent): void {\n this.focused.set(true);\n this.inputFocused.emit(event);\n }\n\n handleBlur(event: FocusEvent): void {\n this.focused.set(false);\n this.onTouched();\n this.inputBlurred.emit(event);\n }\n\n focus(): void {\n this.inputEl()?.nativeElement.focus();\n }\n}\n","<div class=\"ea-input-field\">\n @if (label()) {\n <label\n class=\"ea-input-field__label\"\n [for]=\"id()\"\n [class.ea-input-field__label--required]=\"required()\">\n {{ label() }}\n </label>\n }\n\n <div\n class=\"ea-input-wrapper\"\n [ngClass]=\"wrapperClasses()\">\n <!-- Prefix slot (icon or text) -->\n <span class=\"ea-input-wrapper__prefix\">\n <ng-content select=\"[slot=prefix]\" />\n </span>\n\n <input\n #inputEl\n class=\"ea-input\"\n [id]=\"id()\"\n [type]=\"type()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [readOnly]=\"readonly()\"\n [required]=\"required()\"\n [value]=\"value()\"\n [attr.aria-invalid]=\"resolvedStatus() === 'error' || null\"\n [attr.aria-describedby]=\"\n showError() ? id() + '-error' : showHint() ? id() + '-hint' : null\n \"\n (input)=\"handleInput($event)\"\n (focus)=\"handleFocus($event)\"\n (blur)=\"handleBlur($event)\" />\n\n <!-- Suffix slot (icon, clear button, etc.) -->\n <span class=\"ea-input-wrapper__suffix\">\n <ng-content select=\"[slot=suffix]\" />\n </span>\n </div>\n\n @if (showError()) {\n <p\n class=\"ea-input-field__message ea-input-field__message--error\"\n [id]=\"id() + '-error'\"\n role=\"alert\">\n <svg\n class=\"ea-input-field__message-icon\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n aria-hidden=\"true\">\n <path\n d=\"M8 1a7 7 0 1 0 0 14A7 7 0 0 0 8 1zm-.75 4a.75.75 0 0 1 1.5 0v3.5a.75.75 0 0 1-1.5 0V5zm.75 6.5a1 1 0 1 1 0-2 1 1 0 0 1 0 2z\" />\n </svg>\n {{ errorMsg() }}\n </p>\n }\n\n @if (showHint()) {\n <p\n class=\"ea-input-field__message ea-input-field__message--hint\"\n [id]=\"id() + '-hint'\">\n {{ hint() }}\n </p>\n }\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nexport type RadioSize = 'sm' | 'md' | 'lg';\nexport type RadioOrientation = 'vertical' | 'horizontal';\n\n@Component({\n selector: 'ea-radio-group',\n templateUrl: './radio-group.component.html',\n styleUrl: './radio-group.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RadioGroupComponent),\n multi: true,\n },\n ],\n})\nexport class RadioGroupComponent implements ControlValueAccessor {\n // Inputs\n readonly name = input<string>(`ea-radio-${Math.random().toString(36).slice(2, 9)}`);\n readonly size = input<RadioSize>('md');\n readonly orientation = input<RadioOrientation>('vertical');\n readonly disabled = input<boolean>(false);\n readonly ariaLabel = input<string | undefined>(undefined, { alias: 'aria-label' });\n\n // Two-way value binding\n readonly value = model<string>('');\n\n // Output\n readonly changed = output<string>();\n\n // Internal state\n private readonly _formDisabled = signal(false);\n\n // Computed\n readonly isDisabled = computed(() => this.disabled() || this._formDisabled());\n\n // ControlValueAccessor callbacks\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n // ControlValueAccessor\n writeValue(val: string): void {\n this.value.set(val ?? '');\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this._formDisabled.set(isDisabled);\n }\n\n select(val: string): void {\n if (this.isDisabled()) return;\n this.value.set(val);\n this.onChange(val);\n this.onTouched();\n this.changed.emit(val);\n }\n}\n","<div\n class=\"ea-radio-group\"\n [class.ea-radio-group--horizontal]=\"orientation() === 'horizontal'\"\n [class.ea-radio-group--vertical]=\"orientation() === 'vertical'\"\n role=\"radiogroup\"\n [attr.aria-label]=\"ariaLabel()\">\n <ng-content />\n</div>\n","import { NgClass } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n} from '@angular/core';\n\nimport { RadioGroupComponent } from './radio-group.component';\n\n@Component({\n selector: 'ea-radio',\n templateUrl: './radio.component.html',\n styleUrl: './radio.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgClass],\n})\nexport class RadioComponent {\n private readonly group = inject(RadioGroupComponent);\n\n // Inputs\n readonly value = input.required<string>();\n readonly label = input<string | undefined>(undefined);\n readonly disabled = input<boolean>(false);\n readonly id = input<string>(`ea-radio-opt-${Math.random().toString(36).slice(2, 9)}`);\n\n // Computed\n readonly isChecked = computed(() => this.group.value() === this.value());\n readonly isDisabled = computed(() => this.disabled() || this.group.isDisabled());\n readonly name = computed(() => this.group.name());\n readonly size = computed(() => this.group.size());\n\n readonly hostClasses = computed(() => ({\n [`ea-radio--${this.size()}`]: true,\n 'ea-radio--disabled': this.isDisabled(),\n 'ea-radio--checked': this.isChecked(),\n }));\n\n handleChange(): void {\n if (this.isDisabled()) return;\n this.group.select(this.value());\n }\n}\n","<label\n class=\"ea-radio\"\n [ngClass]=\"hostClasses()\"\n [for]=\"id()\">\n <input\n type=\"radio\"\n class=\"ea-radio__input\"\n [id]=\"id()\"\n [name]=\"name()\"\n [value]=\"value()\"\n [checked]=\"isChecked()\"\n [disabled]=\"isDisabled()\"\n (change)=\"handleChange()\" />\n\n <span\n class=\"ea-radio__circle\"\n aria-hidden=\"true\"></span>\n\n @if (label()) {\n <span class=\"ea-radio__label\">{{ label() }}</span>\n }\n</label>\n","// =============================================================================\n// EAGAMI UI — Public API\n// =============================================================================\n\n// Components\nexport * from './lib/button/button.component';\nexport * from './lib/card/card.component';\nexport * from './lib/checkbox/checkbox.component';\nexport * from './lib/dialog/dialog.component';\nexport * from './lib/dropdown/dropdown.component';\nexport * from './lib/input/input.component';\nexport * from './lib/radio/radio-group.component';\nexport * from './lib/radio/radio.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "@eagami/ui",
3
+ "description": "Lightweight, accessible Angular UI component library built on CSS custom properties",
4
+ "author": "Michal Wiraszka <michal@eagami.com>",
5
+ "version": "0.1.0",
6
+ "dependencies": {
7
+ "@angular/common": "21.2.1",
8
+ "@angular/compiler": "21.2.1",
9
+ "@angular/core": "21.2.1",
10
+ "@angular/forms": "21.2.1",
11
+ "@angular/platform-browser": "21.2.1",
12
+ "@angular/platform-browser-dynamic": "21.2.1",
13
+ "@angular/router": "21.2.1",
14
+ "rxjs": "7.8.2",
15
+ "tslib": "2.3.0",
16
+ "zone.js": "0.16.1"
17
+ },
18
+ "keywords": [
19
+ "angular",
20
+ "ui",
21
+ "component-library",
22
+ "design-system",
23
+ "accessible"
24
+ ],
25
+ "license": "MIT",
26
+ "repository": {
27
+ "type": "git",
28
+ "url": "https://github.com/mwiraszka/eagami-design-system.git"
29
+ },
30
+ "homepage": "https://github.com/mwiraszka/eagami-design-system#readme",
31
+ "bugs": {
32
+ "url": "https://github.com/mwiraszka/eagami-design-system/issues"
33
+ },
34
+ "peerDependencies": {
35
+ "@angular/common": "^21.0.0",
36
+ "@angular/core": "^21.0.0",
37
+ "@angular/forms": "^21.0.0"
38
+ },
39
+ "sideEffects": false,
40
+ "module": "fesm2022/eagami-ui.mjs",
41
+ "typings": "types/eagami-ui.d.ts",
42
+ "exports": {
43
+ "./package.json": {
44
+ "default": "./package.json"
45
+ },
46
+ ".": {
47
+ "types": "./types/eagami-ui.d.ts",
48
+ "default": "./fesm2022/eagami-ui.mjs"
49
+ }
50
+ }
51
+ }
@@ -0,0 +1,67 @@
1
+ // =============================================================================
2
+ // BASE RESET
3
+ // Lightweight reset that plays well with design tokens.
4
+ // =============================================================================
5
+
6
+ *,
7
+ *::before,
8
+ *::after {
9
+ box-sizing: border-box;
10
+ margin: 0;
11
+ padding: 0;
12
+ }
13
+
14
+ html {
15
+ font-size: 16px;
16
+ -webkit-text-size-adjust: 100%;
17
+ tab-size: 4;
18
+ }
19
+
20
+ body {
21
+ font-family: var(--font-family-sans);
22
+ font-size: var(--font-size-md);
23
+ line-height: var(--line-height-normal);
24
+ color: var(--color-text-primary);
25
+ background-color: var(--color-bg-base);
26
+ -webkit-font-smoothing: antialiased;
27
+ -moz-osx-font-smoothing: grayscale;
28
+ }
29
+
30
+ img,
31
+ svg,
32
+ video {
33
+ display: block;
34
+ max-width: 100%;
35
+ }
36
+
37
+ button,
38
+ input,
39
+ optgroup,
40
+ select,
41
+ textarea {
42
+ font-family: inherit;
43
+ font-size: 100%;
44
+ font-weight: inherit;
45
+ line-height: inherit;
46
+ color: inherit;
47
+ }
48
+
49
+ button {
50
+ cursor: pointer;
51
+ background: transparent;
52
+ border: none;
53
+ }
54
+
55
+ a {
56
+ color: var(--color-text-link);
57
+ text-decoration: underline;
58
+
59
+ &:hover {
60
+ color: var(--color-text-link-hover);
61
+ }
62
+ }
63
+
64
+ :focus-visible {
65
+ outline: var(--border-width-medium) solid var(--color-border-focus);
66
+ outline-offset: 2px;
67
+ }
@@ -0,0 +1,16 @@
1
+ // =============================================================================
2
+ // EAGAMI UI — Global stylesheet
3
+ //
4
+ // Import this once at the root of your application:
5
+ // @use 'eagami-ui/src/styles/eagami-ui' (or via angular.json styles array)
6
+ //
7
+ // This file loads all design token CSS custom properties and the base reset.
8
+ //
9
+ // Fonts: load DM Sans + Syne via <link> tags in your HTML <head>:
10
+ // <link rel="preconnect" href="https://fonts.googleapis.com" />
11
+ // <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
12
+ // <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,300;0,9..40,400;0,9..40,500;0,9..40,600;1,9..40,400&family=Syne:wght@400;500;600;700&display=swap" />
13
+ // =============================================================================
14
+
15
+ @use 'tokens/index';
16
+ @use 'reset';
@@ -0,0 +1,160 @@
1
+ // =============================================================================
2
+ // COLOR TOKENS
3
+ // =============================================================================
4
+
5
+ :root {
6
+ // ---------------------------------------------------------------------------
7
+ // Primitive palette
8
+ // ---------------------------------------------------------------------------
9
+
10
+ // Primary
11
+ --color-primary-50: #eef4f8;
12
+ --color-primary-100: #d5e5f0;
13
+ --color-primary-200: #accfe2;
14
+ --color-primary-300: #7db1ce;
15
+ --color-primary-400: #628ead;
16
+ --color-primary-500: #3c6c90;
17
+ --color-primary-600: #2f567a;
18
+ --color-primary-700: #285175;
19
+ --color-primary-800: #11365c;
20
+ --color-primary-900: #0d2533;
21
+
22
+ // Secondary
23
+ --color-secondary-50: #f3f1f7;
24
+ --color-secondary-100: #e3deed;
25
+ --color-secondary-200: #c7bedb;
26
+ --color-secondary-300: #a796c3;
27
+ --color-secondary-400: #7d6a9c;
28
+ --color-secondary-500: #594b6e;
29
+ --color-secondary-600: #493d5c;
30
+ --color-secondary-700: #40374f;
31
+ --color-secondary-800: #2f2439;
32
+ --color-secondary-900: #1e1528;
33
+
34
+ // Neutral (Gray)
35
+ --color-neutral-0: #ffffff;
36
+ --color-neutral-50: #f9fafb;
37
+ --color-neutral-100: #f3f4f6;
38
+ --color-neutral-200: #e5e7eb;
39
+ --color-neutral-300: #d1d5db;
40
+ --color-neutral-400: #9ca3af;
41
+ --color-neutral-500: #6b7280;
42
+ --color-neutral-600: #4b5563;
43
+ --color-neutral-700: #374151;
44
+ --color-neutral-800: #1f2937;
45
+ --color-neutral-900: #111827;
46
+ --color-neutral-950: #030712;
47
+
48
+ // Success (Green)
49
+ --color-success-50: #f0fdf4;
50
+ --color-success-100: #dcfce7;
51
+ --color-success-200: #bbf7d0;
52
+ --color-success-500: #22c55e;
53
+ --color-success-600: #16a34a;
54
+ --color-success-700: #15803d;
55
+
56
+ // Warning (Amber)
57
+ --color-warning-50: #fffbeb;
58
+ --color-warning-100: #fef3c7;
59
+ --color-warning-200: #fde68a;
60
+ --color-warning-500: #f59e0b;
61
+ --color-warning-600: #d97706;
62
+ --color-warning-700: #b45309;
63
+
64
+ // Error (Red)
65
+ --color-error-50: #fef2f2;
66
+ --color-error-100: #fee2e2;
67
+ --color-error-200: #fecaca;
68
+ --color-error-500: #ef4444;
69
+ --color-error-600: #dc2626;
70
+ --color-error-700: #b91c1c;
71
+
72
+ // Info (Cyan)
73
+ --color-info-50: #ecfeff;
74
+ --color-info-100: #cffafe;
75
+ --color-info-200: #a5f3fc;
76
+ --color-info-500: #06b6d4;
77
+ --color-info-600: #0891b2;
78
+ --color-info-700: #0e7490;
79
+
80
+ // ---------------------------------------------------------------------------
81
+ // Semantic tokens — light mode
82
+ // ---------------------------------------------------------------------------
83
+
84
+ // Text
85
+ --color-text-primary: var(--color-neutral-900);
86
+ --color-text-secondary: var(--color-neutral-600);
87
+ --color-text-tertiary: var(--color-neutral-400);
88
+ --color-text-disabled: var(--color-neutral-300);
89
+ --color-text-inverse: var(--color-neutral-0);
90
+ --color-text-link: var(--color-primary-600);
91
+ --color-text-link-hover: var(--color-primary-700);
92
+
93
+ // Background
94
+ --color-bg-base: var(--color-neutral-0);
95
+ --color-bg-subtle: var(--color-neutral-50);
96
+ --color-bg-muted: var(--color-neutral-100);
97
+ --color-bg-overlay: rgba(0, 0, 0, 0.5);
98
+
99
+ // Border
100
+ --color-border-default: var(--color-neutral-200);
101
+ --color-border-strong: var(--color-neutral-400);
102
+ --color-border-focus: var(--color-primary-500);
103
+
104
+ // Brand semantic
105
+ --color-brand-default: var(--color-primary-600);
106
+ --color-brand-hover: var(--color-primary-700);
107
+ --color-brand-active: var(--color-primary-800);
108
+ --color-brand-subtle: var(--color-primary-50);
109
+ --color-brand-muted: var(--color-primary-100);
110
+
111
+ // Secondary brand semantic
112
+ --color-brand-secondary-default: var(--color-secondary-500);
113
+ --color-brand-secondary-hover: var(--color-secondary-600);
114
+ --color-brand-secondary-active: var(--color-secondary-700);
115
+ --color-brand-secondary-subtle: var(--color-secondary-50);
116
+ --color-brand-secondary-muted: var(--color-secondary-100);
117
+
118
+ // Feedback semantic
119
+ --color-success-default: var(--color-success-600);
120
+ --color-success-subtle: var(--color-success-50);
121
+ --color-success-muted: var(--color-success-100);
122
+
123
+ --color-warning-default: var(--color-warning-600);
124
+ --color-warning-subtle: var(--color-warning-50);
125
+ --color-warning-muted: var(--color-warning-100);
126
+
127
+ --color-error-default: var(--color-error-600);
128
+ --color-error-subtle: var(--color-error-50);
129
+ --color-error-muted: var(--color-error-100);
130
+
131
+ --color-info-default: var(--color-info-600);
132
+ --color-info-subtle: var(--color-info-50);
133
+ --color-info-muted: var(--color-info-100);
134
+ }
135
+
136
+ // ---------------------------------------------------------------------------
137
+ // Dark mode overrides
138
+ // ---------------------------------------------------------------------------
139
+ @media (prefers-color-scheme: dark) {
140
+ :root {
141
+ --color-text-primary: var(--color-neutral-50);
142
+ --color-text-secondary: var(--color-neutral-400);
143
+ --color-text-tertiary: var(--color-neutral-500);
144
+ --color-text-disabled: var(--color-neutral-700);
145
+ --color-text-inverse: var(--color-neutral-900);
146
+
147
+ --color-bg-base: var(--color-neutral-950);
148
+ --color-bg-subtle: var(--color-neutral-900);
149
+ --color-bg-muted: var(--color-neutral-800);
150
+
151
+ --color-border-default: var(--color-neutral-700);
152
+ --color-border-strong: var(--color-neutral-500);
153
+
154
+ --color-brand-default: var(--color-primary-400);
155
+ --color-brand-hover: var(--color-primary-300);
156
+ --color-brand-active: var(--color-primary-200);
157
+ --color-brand-subtle: rgba(98, 142, 173, 0.1);
158
+ --color-brand-muted: rgba(98, 142, 173, 0.2);
159
+ }
160
+ }
@@ -0,0 +1,33 @@
1
+ // =============================================================================
2
+ // ELEVATION TOKENS — box shadows & z-index
3
+ // =============================================================================
4
+
5
+ :root {
6
+ // ---------------------------------------------------------------------------
7
+ // Box shadows
8
+ // ---------------------------------------------------------------------------
9
+ --shadow-none: none;
10
+ --shadow-xs: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
11
+ --shadow-sm: 0 1px 3px 0 rgba(0, 0, 0, 0.10), 0 1px 2px -1px rgba(0, 0, 0, 0.10);
12
+ --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.10), 0 2px 4px -2px rgba(0, 0, 0, 0.10);
13
+ --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.10), 0 4px 6px -4px rgba(0, 0, 0, 0.10);
14
+ --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.10), 0 8px 10px -6px rgba(0, 0, 0, 0.10);
15
+ --shadow-2xl: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
16
+ --shadow-inner: inset 0 2px 4px 0 rgba(0, 0, 0, 0.05);
17
+
18
+ // Focus ring — used for keyboard accessibility across all interactive elements
19
+ --shadow-focus-ring: 0 0 0 3px rgba(59, 130, 246, 0.45);
20
+
21
+ // ---------------------------------------------------------------------------
22
+ // Z-index scale
23
+ // ---------------------------------------------------------------------------
24
+ --z-index-base: 0;
25
+ --z-index-raised: 10;
26
+ --z-index-dropdown: 100;
27
+ --z-index-sticky: 200;
28
+ --z-index-overlay: 300;
29
+ --z-index-modal: 400;
30
+ --z-index-popover: 500;
31
+ --z-index-toast: 600;
32
+ --z-index-tooltip: 700;
33
+ }
@@ -0,0 +1,11 @@
1
+ // =============================================================================
2
+ // DESIGN TOKENS — barrel export
3
+ // Import this single file to get all tokens.
4
+ // =============================================================================
5
+
6
+ @forward 'colors';
7
+ @forward 'typography';
8
+ @forward 'spacing';
9
+ @forward 'shape';
10
+ @forward 'elevation';
11
+ @forward 'motion';
@@ -0,0 +1,49 @@
1
+ // =============================================================================
2
+ // MOTION TOKENS — duration, easing, transitions
3
+ // =============================================================================
4
+
5
+ :root {
6
+ // ---------------------------------------------------------------------------
7
+ // Duration
8
+ // ---------------------------------------------------------------------------
9
+ --duration-instant: 0ms;
10
+ --duration-fast: 100ms;
11
+ --duration-normal: 200ms;
12
+ --duration-slow: 300ms;
13
+ --duration-slower: 500ms;
14
+
15
+ // ---------------------------------------------------------------------------
16
+ // Easing
17
+ // ---------------------------------------------------------------------------
18
+ --ease-linear: linear;
19
+ --ease-in: cubic-bezier(0.4, 0, 1, 1);
20
+ --ease-out: cubic-bezier(0, 0, 0.2, 1);
21
+ --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
22
+ --ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
23
+
24
+ // ---------------------------------------------------------------------------
25
+ // Composed transition shortcuts
26
+ // ---------------------------------------------------------------------------
27
+ --transition-colors: color var(--duration-fast) var(--ease-out),
28
+ background-color var(--duration-fast) var(--ease-out),
29
+ border-color var(--duration-fast) var(--ease-out),
30
+ fill var(--duration-fast) var(--ease-out);
31
+
32
+ --transition-shadow: box-shadow var(--duration-fast) var(--ease-out);
33
+
34
+ --transition-transform: transform var(--duration-normal) var(--ease-spring);
35
+
36
+ --transition-opacity: opacity var(--duration-normal) var(--ease-out);
37
+
38
+ --transition-all: all var(--duration-normal) var(--ease-in-out);
39
+ }
40
+
41
+ // Respect reduced-motion preferences
42
+ @media (prefers-reduced-motion: reduce) {
43
+ :root {
44
+ --duration-fast: 0ms;
45
+ --duration-normal: 0ms;
46
+ --duration-slow: 0ms;
47
+ --duration-slower: 0ms;
48
+ }
49
+ }
@@ -0,0 +1,26 @@
1
+ // =============================================================================
2
+ // SHAPE TOKENS — border radius, borders
3
+ // =============================================================================
4
+
5
+ :root {
6
+ // ---------------------------------------------------------------------------
7
+ // Border radius
8
+ // ---------------------------------------------------------------------------
9
+ --radius-none: 0;
10
+ --radius-xs: 0.125rem; // 2px
11
+ --radius-sm: 0.25rem; // 4px
12
+ --radius-md: 0.375rem; // 6px
13
+ --radius-lg: 0.5rem; // 8px
14
+ --radius-xl: 0.75rem; // 12px
15
+ --radius-2xl: 1rem; // 16px
16
+ --radius-3xl: 1.5rem; // 24px
17
+ --radius-full: 9999px; // pill / circle
18
+
19
+ // ---------------------------------------------------------------------------
20
+ // Border width
21
+ // ---------------------------------------------------------------------------
22
+ --border-width-none: 0;
23
+ --border-width-thin: 1px;
24
+ --border-width-medium: 2px;
25
+ --border-width-thick: 4px;
26
+ }
@@ -0,0 +1,57 @@
1
+ // =============================================================================
2
+ // SPACING TOKENS
3
+ // 4px base unit scale
4
+ // =============================================================================
5
+
6
+ :root {
7
+ --space-0: 0;
8
+ --space-px: 1px;
9
+ --space-0-5: 0.125rem; // 2px
10
+ --space-1: 0.25rem; // 4px
11
+ --space-1-5: 0.375rem; // 6px
12
+ --space-2: 0.5rem; // 8px
13
+ --space-2-5: 0.625rem; // 10px
14
+ --space-3: 0.75rem; // 12px
15
+ --space-3-5: 0.875rem; // 14px
16
+ --space-4: 1rem; // 16px
17
+ --space-5: 1.25rem; // 20px
18
+ --space-6: 1.5rem; // 24px
19
+ --space-7: 1.75rem; // 28px
20
+ --space-8: 2rem; // 32px
21
+ --space-9: 2.25rem; // 36px
22
+ --space-10: 2.5rem; // 40px
23
+ --space-11: 2.75rem; // 44px
24
+ --space-12: 3rem; // 48px
25
+ --space-14: 3.5rem; // 56px
26
+ --space-16: 4rem; // 64px
27
+ --space-20: 5rem; // 80px
28
+ --space-24: 6rem; // 96px
29
+ --space-32: 8rem; // 128px
30
+
31
+ // ---------------------------------------------------------------------------
32
+ // Layout / component-specific semantic spacing
33
+ // ---------------------------------------------------------------------------
34
+
35
+ // Component padding (inset)
36
+ --inset-xs: var(--space-1) var(--space-2); // 4px 8px
37
+ --inset-sm: var(--space-1-5) var(--space-3); // 6px 12px
38
+ --inset-md: var(--space-2) var(--space-4); // 8px 16px
39
+ --inset-lg: var(--space-3) var(--space-6); // 12px 24px
40
+ --inset-xl: var(--space-4) var(--space-8); // 16px 32px
41
+
42
+ // Stack (vertical gap between siblings)
43
+ --stack-2xs: var(--space-1); // 4px
44
+ --stack-xs: var(--space-2); // 8px
45
+ --stack-sm: var(--space-3); // 12px
46
+ --stack-md: var(--space-4); // 16px
47
+ --stack-lg: var(--space-6); // 24px
48
+ --stack-xl: var(--space-8); // 32px
49
+ --stack-2xl: var(--space-12); // 48px
50
+
51
+ // Inline (horizontal gap between siblings)
52
+ --inline-2xs: var(--space-1); // 4px
53
+ --inline-xs: var(--space-2); // 8px
54
+ --inline-sm: var(--space-3); // 12px
55
+ --inline-md: var(--space-4); // 16px
56
+ --inline-lg: var(--space-6); // 24px
57
+ }