feat(atom): add typography
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
p, h1, h2, h3, h4, h5 {
|
||||
margin: 0 0;
|
||||
}
|
||||
|
||||
.ellipsis {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
@if(variant() === variantTypes.p) {
|
||||
<p
|
||||
[style.color]="color()"
|
||||
[style.fontSize]="size()"
|
||||
[style.letterSpacing]="letterSpacing()"
|
||||
[style.lineHeight]="lineHeight() ? lineHeight() : size()"
|
||||
[style.maxWidth]="maxWidth()"
|
||||
[class.ellipsis]="ellipsis()"
|
||||
><ng-container *ngTemplateOutlet="content"></ng-container></p>
|
||||
}
|
||||
@else if (variant() === variantTypes.h1) {
|
||||
<h1
|
||||
[style.color]="color()"
|
||||
[style.fontSize]="size()"
|
||||
[style.letterSpacing]="letterSpacing()"
|
||||
[style.lineHeight]="lineHeight() ? lineHeight() : size()"
|
||||
[style.maxWidth]="maxWidth()"
|
||||
[class.ellipsis]="ellipsis()"
|
||||
><ng-container *ngTemplateOutlet="content"></ng-container></h1>
|
||||
}
|
||||
@else if (variant() === variantTypes.h2) {
|
||||
<h2
|
||||
[style.color]="color()"
|
||||
[style.fontSize]="size()"
|
||||
[style.letterSpacing]="letterSpacing()"
|
||||
[style.lineHeight]="lineHeight() ? lineHeight() : size()"
|
||||
[style.maxWidth]="maxWidth()"
|
||||
[class.ellipsis]="ellipsis()"
|
||||
><ng-container *ngTemplateOutlet="content"></ng-container></h2>
|
||||
}
|
||||
@else if (variant() === variantTypes.h3) {
|
||||
<h3
|
||||
[style.color]="color()"
|
||||
[style.fontSize]="size()"
|
||||
[style.letterSpacing]="letterSpacing()"
|
||||
[style.lineHeight]="lineHeight() ? lineHeight() : size()"
|
||||
[style.maxWidth]="maxWidth()"
|
||||
[class.ellipsis]="ellipsis()"
|
||||
><ng-container *ngTemplateOutlet="content"></ng-container></h3>
|
||||
}
|
||||
@else if (variant() === variantTypes.h4) {
|
||||
<h4
|
||||
[style.color]="color()"
|
||||
[style.fontSize]="size()"
|
||||
[style.letterSpacing]="letterSpacing()"
|
||||
[style.lineHeight]="lineHeight() ? lineHeight() : size()"
|
||||
[style.maxWidth]="maxWidth()"
|
||||
[class.ellipsis]="ellipsis()"
|
||||
><ng-container *ngTemplateOutlet="content"></ng-container></h4>
|
||||
}
|
||||
@else if (variant() === variantTypes.h5) {
|
||||
<h5
|
||||
[style.color]="color()"
|
||||
[style.fontSize]="size()"
|
||||
[style.letterSpacing]="letterSpacing()"
|
||||
[style.lineHeight]="lineHeight() ? lineHeight() : size()"
|
||||
[style.maxWidth]="maxWidth()"
|
||||
[class.ellipsis]="ellipsis()"
|
||||
><ng-container *ngTemplateOutlet="content"></ng-container></h5>
|
||||
}
|
||||
|
||||
<ng-template #content>
|
||||
<ng-content></ng-content>
|
||||
</ng-template>
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { TypographyComponent } from './typography.component';
|
||||
|
||||
describe('TypographyComponent', () => {
|
||||
let component: TypographyComponent;
|
||||
let fixture: ComponentFixture<TypographyComponent>;
|
||||
|
||||
beforeEach(async () => {
|
||||
await TestBed.configureTestingModule({
|
||||
imports: [TypographyComponent]
|
||||
})
|
||||
.compileComponents();
|
||||
|
||||
fixture = TestBed.createComponent(TypographyComponent);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
it('should create', () => {
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
|
||||
it('updates lineHeight accordinly', () => {
|
||||
const MOCK_LINEHEIGHT = '1.8rem';
|
||||
fixture.componentRef.setInput('lineHeight', MOCK_LINEHEIGHT);
|
||||
expect(component.lineHeight()).toBe(MOCK_LINEHEIGHT)
|
||||
})
|
||||
});
|
||||
@@ -0,0 +1,51 @@
|
||||
import { Component, input } from '@angular/core';
|
||||
import { TypographyVariants } from '../../types/TypographyVariants';
|
||||
import { NgTemplateOutlet } from '@angular/common';
|
||||
|
||||
@Component({
|
||||
selector: 'my-wallet-typography',
|
||||
standalone: true,
|
||||
imports: [NgTemplateOutlet],
|
||||
templateUrl: './typography.component.html',
|
||||
styleUrl: './typography.component.css'
|
||||
})
|
||||
export class TypographyComponent {
|
||||
/**
|
||||
* @description Color for text as a string
|
||||
*/
|
||||
color = input("var(--mw-black, #000000)");
|
||||
|
||||
/**
|
||||
* @description If true, turns overflowing text into ellipsis (...) when the maxWidth attr is set
|
||||
*/
|
||||
ellipsis = input(false);
|
||||
|
||||
/**
|
||||
* @description sets the horizontal spacing behavior between text characters
|
||||
*/
|
||||
letterSpacing = input("normal");
|
||||
|
||||
/**
|
||||
* @description Sets the height of a line box in horizontal writing modes
|
||||
*/
|
||||
lineHeight = input(null, {transform:(v) => v === null ? this.size() : v})
|
||||
|
||||
/**
|
||||
* @description Maximum width that the text might take (null if no max width)
|
||||
*/
|
||||
maxWidth = input<string|null>(null)
|
||||
|
||||
/**
|
||||
* @description Font size with it's units
|
||||
*/
|
||||
size = input("1.4rem");
|
||||
|
||||
/**
|
||||
* @description HTMLElement p,h1,h2,h3,h4,h5
|
||||
*/
|
||||
variant = input(TypographyVariants.p);
|
||||
protected variantTypes = TypographyVariants;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
export enum TypographyVariants {
|
||||
"p",
|
||||
"h1",
|
||||
"h2",
|
||||
"h3",
|
||||
"h4",
|
||||
"h5"
|
||||
}
|
||||
Reference in New Issue
Block a user