-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathImg.ts
More file actions
87 lines (79 loc) · 1.8 KB
/
Copy pathImg.ts
File metadata and controls
87 lines (79 loc) · 1.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import { LitElement, html } from 'lit';
import { HtmlBoolean } from '../../../types/html-boolean.type';
import { JSXCustomElement } from '../../../types/jsx-custom-element.type';
import { Radius } from '../../../types/tokens.type';
import { safeCustomElement } from '@/lib/safe-custom-element';
export interface ImgAttributes {
block?: HtmlBoolean;
responsive?: HtmlBoolean;
aspectRatio?: string;
radius?: Radius;
objectFit?: 'cover' | 'contain';
objectPosition?: string;
}
@safeCustomElement('evg-img')
export class Img extends LitElement {
static readonly properties = {
ariaHidden: {
type: String,
reflect: true,
attribute: 'aria-hidden',
},
block: {
type: String,
reflect: true,
},
responsive: {
type: String,
reflect: true,
},
aspectRatio: {
type: String,
reflect: true,
attribute: 'aspect-ratio',
},
radius: {
type: String,
reflect: true,
},
objectFit: {
type: String,
reflect: true,
attribute: 'object-fit',
},
objectPosition: {
type: String,
reflect: true,
attribute: 'object-position',
},
};
ariaHidden = 'true';
aspectRatio = 'auto';
objectFit = 'fill';
objectPosition = '50% 50%';
render() {
const { aspectRatio, objectFit, objectPosition } = this;
return html`
<style>
:host {
--evg-img-aspect-ratio: ${aspectRatio};
--evg-img-object-fit: ${objectFit};
--evg-img-object-position: ${objectPosition};
}
</style>
<slot></slot>
`;
}
}
declare global {
interface HTMLElementTagNameMap {
'evg-img': ImgAttributes;
}
}
declare module 'react' {
namespace JSX {
interface IntrinsicElements {
'evg-img': JSXCustomElement<ImgAttributes>;
}
}
}