Skip to content

Commit b5aa707

Browse files
committed
added input, textarea, change range, stepper to shadcn style
1 parent aa64b60 commit b5aa707

File tree

24 files changed

+1070
-560
lines changed

24 files changed

+1070
-560
lines changed

.vscode/settings.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
"docs/@capsule/components/capsule-speed-dial/vscode.data.json",
2626
"docs/@capsule/components/capsule-container/vscode.data.json",
2727
"docs/@capsule/components/capsule-icon/vscode.data.json",
28-
"docs/@capsule/components/capsule-input/vscode.data.json"
28+
"docs/@capsule/components/capsule-input/vscode.data.json",
29+
"docs/@capsule/components/capsule-hover-card/vscode.data.json"
2930
]
3031
}

docs/.vitepress/config.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ export default defineConfig({
7979
{ text: 'Overview', link: '/components/' },
8080
{ text: 'Button', link: '/components/button' },
8181
{ text: 'Input', link: '/components/input' },
82+
{ text: 'Textarea', link: '/components/textarea' },
8283
{ text: 'Button Group', link: '/components/button-group' },
8384
{ text: 'Badge', link: '/components/badge' },
8485
{ text: 'Kbd', link: '/components/kbd' },
@@ -148,6 +149,7 @@ export default defineConfig({
148149
{ text: 'Обзор', link: '/ru/components/' },
149150
{ text: 'Button', link: '/ru/components/button' },
150151
{ text: 'Input', link: '/ru/components/input' },
152+
{ text: 'Textarea', link: '/ru/components/textarea' },
151153
{ text: 'Button Group', link: '/ru/components/button-group' },
152154
{ text: 'Badge', link: '/ru/components/badge' },
153155
{ text: 'Kbd', link: '/ru/components/kbd' },
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { LitElement, html } from '../../lit';
2+
3+
class CapsuleHoverCardContent extends LitElement {
4+
constructor() {
5+
super();
6+
}
7+
8+
createRenderRoot() {
9+
return this;
10+
}
11+
12+
connectedCallback() {
13+
super.connectedCallback();
14+
this.setAttribute('role', 'tooltip');
15+
}
16+
17+
render() {
18+
return html`<slot></slot>`;
19+
}
20+
}
21+
22+
customElements.define(
23+
'capsule-hover-card-content',
24+
CapsuleHoverCardContent
25+
);
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { LitElement, html } from '../../lit';
2+
3+
class CapsuleHoverCardTrigger extends LitElement {
4+
constructor() {
5+
super();
6+
}
7+
8+
createRenderRoot() {
9+
return this;
10+
}
11+
12+
connectedCallback() {
13+
super.connectedCallback();
14+
this.setAttribute('role', 'button');
15+
}
16+
17+
render() {
18+
return html`<slot></slot>`;
19+
}
20+
}
21+
22+
customElements.define('capsule-hover-card-trigger', CapsuleHoverCardTrigger);
23+
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { LitElement, html } from '../../lit';
2+
3+
class CapsuleHoverCard extends LitElement {
4+
constructor() {
5+
super();
6+
}
7+
8+
createRenderRoot() {
9+
return this;
10+
}
11+
12+
connectedCallback() {
13+
super.connectedCallback();
14+
this.setAttribute('role', 'group');
15+
}
16+
17+
render() {
18+
return html`<slot></slot>`;
19+
}
20+
}
21+
22+
customElements.define('capsule-hover-card', CapsuleHoverCard);
23+
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
capsule-hover-card {
2+
position: relative;
3+
display: inline-block;
4+
}
5+
6+
capsule-hover-card-trigger {
7+
display: inline-block;
8+
cursor: pointer;
9+
}
10+
11+
capsule-hover-card-content {
12+
position: absolute;
13+
z-index: var(--z-tooltip);
14+
width: 16rem;
15+
padding: 1rem;
16+
border-radius: var(--radius-md);
17+
border: 1px solid var(--border);
18+
background-color: var(--popover);
19+
color: var(--popover-foreground);
20+
box-shadow: var(--shadow-md);
21+
opacity: 0;
22+
pointer-events: none;
23+
transition: opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1),
24+
transform 0.2s cubic-bezier(0.4, 0, 0.2, 1);
25+
transform: scale(0.95);
26+
outline: none;
27+
height: max-content;
28+
}
29+
30+
capsule-hover-card-content:hover {
31+
pointer-events: auto;
32+
}
33+
34+
capsule-hover-card:hover capsule-hover-card-content,
35+
capsule-hover-card:focus-within capsule-hover-card-content,
36+
capsule-hover-card-content:hover,
37+
capsule-hover-card-trigger:hover ~ capsule-hover-card-content,
38+
capsule-hover-card-trigger:hover + capsule-hover-card-content {
39+
opacity: 1;
40+
pointer-events: auto;
41+
transform: scale(1);
42+
}
43+
44+
/* Top placement */
45+
capsule-hover-card-content,
46+
capsule-hover-card[placement='top'] capsule-hover-card-content {
47+
bottom: 100%;
48+
left: 50%;
49+
transform: translate(-50%, 0.5rem) scale(0.95);
50+
margin-bottom: 0.25rem;
51+
}
52+
53+
capsule-hover-card:hover capsule-hover-card-content,
54+
capsule-hover-card:focus-within capsule-hover-card-content,
55+
capsule-hover-card[placement='top']:hover
56+
capsule-hover-card-content,
57+
capsule-hover-card[placement='top']:focus-within
58+
capsule-hover-card-content,
59+
capsule-hover-card[placement='top']
60+
capsule-hover-card-content:hover {
61+
transform: translate(-50%, 0) scale(1);
62+
}
63+
64+
/* Bottom placement */
65+
capsule-hover-card[placement='bottom'] capsule-hover-card-content {
66+
top: 100%;
67+
left: 50%;
68+
transform: translate(-50%, -0.5rem) scale(0.95);
69+
margin-top: 0.25rem;
70+
}
71+
72+
capsule-hover-card[placement='bottom']:hover
73+
capsule-hover-card-content,
74+
capsule-hover-card[placement='bottom']:focus-within
75+
capsule-hover-card-content,
76+
capsule-hover-card[placement='bottom']
77+
capsule-hover-card-content:hover {
78+
transform: translate(-50%, 0) scale(1);
79+
}
80+
81+
/* Left placement */
82+
capsule-hover-card[placement='left'] capsule-hover-card-content {
83+
right: 100%;
84+
top: 50%;
85+
left: auto;
86+
transform: translate(0.5rem, -50%) scale(0.95);
87+
margin-right: 0.25rem;
88+
}
89+
90+
capsule-hover-card[placement='left']:hover
91+
capsule-hover-card-content,
92+
capsule-hover-card[placement='left']:focus-within
93+
capsule-hover-card-content,
94+
capsule-hover-card[placement='left']
95+
capsule-hover-card-content:hover {
96+
transform: translate(0, -50%) scale(1);
97+
}
98+
99+
/* Right placement */
100+
capsule-hover-card[placement='right'] capsule-hover-card-content {
101+
left: 100%;
102+
top: 50%;
103+
transform: translate(-0.5rem, -50%) scale(0.95);
104+
margin-left: 0.25rem;
105+
}
106+
107+
capsule-hover-card[placement='right']:hover
108+
capsule-hover-card-content,
109+
capsule-hover-card[placement='right']:focus-within
110+
capsule-hover-card-content,
111+
capsule-hover-card[placement='right']
112+
capsule-hover-card-content:hover {
113+
transform: translate(0, -50%) scale(1);
114+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import './capsule-hover-card-trigger.js';
2+
import './capsule-hover-card-content.js';
3+
import './capsule-hover-card.js';
4+
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
{
2+
"version": 1.1,
3+
"tags": [
4+
{
5+
"name": "capsule-hover-card",
6+
"description": "Root container for HoverCard component",
7+
"attributes": [
8+
{
9+
"name": "placement",
10+
"description": "Position of the hover card content",
11+
"values": [
12+
{
13+
"name": "top"
14+
},
15+
{
16+
"name": "bottom"
17+
},
18+
{
19+
"name": "left"
20+
},
21+
{
22+
"name": "right"
23+
}
24+
]
25+
}
26+
]
27+
},
28+
{
29+
"name": "capsule-hover-card-trigger",
30+
"description": "Trigger element that shows the hover card on hover"
31+
},
32+
{
33+
"name": "capsule-hover-card-content",
34+
"description": "Content that appears when hovering over the trigger"
35+
}
36+
]
37+
}
38+

0 commit comments

Comments
 (0)