newtui 2.0.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.
- package/LICENSE +202 -0
- package/README.md +53 -0
- package/cli/index.js +137 -0
- package/dist/index.js +1408 -0
- package/package.json +70 -0
- package/registry/html/components/attachment.css +42 -0
- package/registry/html/components/attachment.html +8 -0
- package/registry/html/components/avatar.css +32 -0
- package/registry/html/components/avatar.html +3 -0
- package/registry/html/components/badge.css +39 -0
- package/registry/html/components/badge.html +3 -0
- package/registry/html/components/bot-command-card.css +67 -0
- package/registry/html/components/bot-command-card.html +17 -0
- package/registry/html/components/button.css +98 -0
- package/registry/html/components/button.html +5 -0
- package/registry/html/components/card.css +20 -0
- package/registry/html/components/card.html +4 -0
- package/registry/html/components/channel-topic.css +35 -0
- package/registry/html/components/channel-topic.html +8 -0
- package/registry/html/components/code-block.css +25 -0
- package/registry/html/components/code-block.html +2 -0
- package/registry/html/components/context-menu.css +46 -0
- package/registry/html/components/context-menu.html +14 -0
- package/registry/html/components/cooldown-bar.css +33 -0
- package/registry/html/components/cooldown-bar.html +9 -0
- package/registry/html/components/divider.css +18 -0
- package/registry/html/components/divider.html +1 -0
- package/registry/html/components/dropdown.css +50 -0
- package/registry/html/components/dropdown.html +17 -0
- package/registry/html/components/embed.css +65 -0
- package/registry/html/components/embed.html +14 -0
- package/registry/html/components/empty-state.css +26 -0
- package/registry/html/components/empty-state.html +5 -0
- package/registry/html/components/form-fields.css +85 -0
- package/registry/html/components/form-fields.html +20 -0
- package/registry/html/components/kbd-tag.css +18 -0
- package/registry/html/components/kbd-tag.html +1 -0
- package/registry/html/components/member-list.css +32 -0
- package/registry/html/components/member-list.html +13 -0
- package/registry/html/components/mention.css +36 -0
- package/registry/html/components/mention.html +3 -0
- package/registry/html/components/message-group.css +50 -0
- package/registry/html/components/message-group.html +20 -0
- package/registry/html/components/modal.css +37 -0
- package/registry/html/components/modal.html +17 -0
- package/registry/html/components/modal.js +10 -0
- package/registry/html/components/notif-badge.css +28 -0
- package/registry/html/components/notif-badge.html +13 -0
- package/registry/html/components/pagination.css +57 -0
- package/registry/html/components/pagination.html +16 -0
- package/registry/html/components/permission.css +64 -0
- package/registry/html/components/permission.html +33 -0
- package/registry/html/components/progress.css +29 -0
- package/registry/html/components/progress.html +6 -0
- package/registry/html/components/reaction.css +33 -0
- package/registry/html/components/reaction.html +14 -0
- package/registry/html/components/reply-preview.css +35 -0
- package/registry/html/components/reply-preview.html +4 -0
- package/registry/html/components/role-tag.css +19 -0
- package/registry/html/components/role-tag.html +3 -0
- package/registry/html/components/scrollbar.css +26 -0
- package/registry/html/components/scrollbar.html +7 -0
- package/registry/html/components/select-menu.css +72 -0
- package/registry/html/components/select-menu.html +19 -0
- package/registry/html/components/server-banner.css +58 -0
- package/registry/html/components/server-banner.html +21 -0
- package/registry/html/components/skeleton.css +40 -0
- package/registry/html/components/skeleton.html +7 -0
- package/registry/html/components/slash-command.css +16 -0
- package/registry/html/components/slash-command.html +3 -0
- package/registry/html/components/spoiler.css +22 -0
- package/registry/html/components/spoiler.html +8 -0
- package/registry/html/components/stage-banner.css +46 -0
- package/registry/html/components/stage-banner.html +22 -0
- package/registry/html/components/status-indicator.css +85 -0
- package/registry/html/components/status-indicator.html +4 -0
- package/registry/html/components/tabs.css +28 -0
- package/registry/html/components/tabs.html +7 -0
- package/registry/html/components/tabs.js +12 -0
- package/registry/html/components/timeline.css +63 -0
- package/registry/html/components/timeline.html +26 -0
- package/registry/html/components/toast.css +37 -0
- package/registry/html/components/toast.html +7 -0
- package/registry/html/components/toast.js +16 -0
- package/registry/html/components/token-field.css +10 -0
- package/registry/html/components/token-field.html +18 -0
- package/registry/html/components/token-field.js +17 -0
- package/registry/html/components/tooltip.css +26 -0
- package/registry/html/components/tooltip.html +8 -0
- package/registry/html/components/typing-indicator.css +45 -0
- package/registry/html/components/typing-indicator.html +4 -0
- package/registry/html/components/user-profile.css +67 -0
- package/registry/html/components/user-profile.html +30 -0
- package/registry/html/components/voice-channel.css +57 -0
- package/registry/html/components/voice-channel.html +13 -0
- package/registry/html/registry.json +279 -0
- package/registry/html/tokens.css +64 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/* newt-ui ยท Pill Tabs */
|
|
2
|
+
|
|
3
|
+
.newt-tabs {
|
|
4
|
+
display: flex;
|
|
5
|
+
gap: 4px;
|
|
6
|
+
background: var(--newt-bg-base);
|
|
7
|
+
padding: 4px;
|
|
8
|
+
border-radius: var(--newt-radius-md);
|
|
9
|
+
width: fit-content;
|
|
10
|
+
}
|
|
11
|
+
.newt-tab {
|
|
12
|
+
padding: 6px 14px;
|
|
13
|
+
border-radius: var(--newt-radius-sm);
|
|
14
|
+
font-size: 13px;
|
|
15
|
+
font-weight: 500;
|
|
16
|
+
color: var(--newt-text-muted);
|
|
17
|
+
background: transparent;
|
|
18
|
+
border: none;
|
|
19
|
+
cursor: pointer;
|
|
20
|
+
transition: all var(--newt-duration-fast) var(--newt-ease);
|
|
21
|
+
}
|
|
22
|
+
.newt-tab--active {
|
|
23
|
+
background: var(--newt-bg-elevated);
|
|
24
|
+
color: var(--newt-text-primary);
|
|
25
|
+
}
|
|
26
|
+
.newt-tab:hover:not(.newt-tab--active) {
|
|
27
|
+
color: var(--newt-text-secondary);
|
|
28
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<div class="newt-tabs" role="tablist">
|
|
2
|
+
<button class="newt-tab newt-tab--active" role="tab" aria-selected="true">
|
|
3
|
+
Tab one
|
|
4
|
+
</button>
|
|
5
|
+
<button class="newt-tab" role="tab" aria-selected="false">Tab two</button>
|
|
6
|
+
<button class="newt-tab" role="tab" aria-selected="false">Tab three</button>
|
|
7
|
+
</div>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
document.querySelectorAll(".newt-tabs").forEach((tabs) => {
|
|
2
|
+
tabs.addEventListener("click", (e) => {
|
|
3
|
+
const tab = e.target.closest(".newt-tab")
|
|
4
|
+
if (!tab) return
|
|
5
|
+
tabs.querySelectorAll(".newt-tab").forEach((t) => {
|
|
6
|
+
t.classList.remove("newt-tab--active")
|
|
7
|
+
t.setAttribute("aria-selected", "false")
|
|
8
|
+
})
|
|
9
|
+
tab.classList.add("newt-tab--active")
|
|
10
|
+
tab.setAttribute("aria-selected", "true")
|
|
11
|
+
})
|
|
12
|
+
})
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/* newt-ui ยท Timeline / Event Log */
|
|
2
|
+
|
|
3
|
+
.newt-timeline {
|
|
4
|
+
display: flex;
|
|
5
|
+
flex-direction: column;
|
|
6
|
+
}
|
|
7
|
+
.newt-timeline__item {
|
|
8
|
+
display: flex;
|
|
9
|
+
gap: 12px;
|
|
10
|
+
position: relative;
|
|
11
|
+
padding-bottom: 20px;
|
|
12
|
+
}
|
|
13
|
+
.newt-timeline__item:last-child {
|
|
14
|
+
padding-bottom: 0;
|
|
15
|
+
}
|
|
16
|
+
.newt-timeline__item:not(:last-child)::before {
|
|
17
|
+
content: "";
|
|
18
|
+
position: absolute;
|
|
19
|
+
left: 11px;
|
|
20
|
+
top: 24px;
|
|
21
|
+
bottom: 0;
|
|
22
|
+
width: 2px;
|
|
23
|
+
background: var(--newt-border);
|
|
24
|
+
}
|
|
25
|
+
.newt-timeline__dot {
|
|
26
|
+
width: 24px;
|
|
27
|
+
height: 24px;
|
|
28
|
+
border-radius: 50%;
|
|
29
|
+
background: var(--newt-bg-surface);
|
|
30
|
+
border: 2px solid var(--newt-border);
|
|
31
|
+
display: flex;
|
|
32
|
+
align-items: center;
|
|
33
|
+
justify-content: center;
|
|
34
|
+
font-size: 12px;
|
|
35
|
+
flex-shrink: 0;
|
|
36
|
+
z-index: 1;
|
|
37
|
+
}
|
|
38
|
+
.newt-timeline__dot--success {
|
|
39
|
+
border-color: var(--newt-online);
|
|
40
|
+
color: var(--newt-online);
|
|
41
|
+
}
|
|
42
|
+
.newt-timeline__dot--danger {
|
|
43
|
+
border-color: var(--newt-dnd);
|
|
44
|
+
color: var(--newt-dnd);
|
|
45
|
+
}
|
|
46
|
+
.newt-timeline__dot--brand {
|
|
47
|
+
border-color: var(--newt-brand);
|
|
48
|
+
color: #b3baff;
|
|
49
|
+
}
|
|
50
|
+
.newt-timeline__content {
|
|
51
|
+
flex: 1;
|
|
52
|
+
padding-top: 1px;
|
|
53
|
+
}
|
|
54
|
+
.newt-timeline__title {
|
|
55
|
+
font-size: 14px;
|
|
56
|
+
font-weight: 600;
|
|
57
|
+
color: var(--newt-text-primary);
|
|
58
|
+
}
|
|
59
|
+
.newt-timeline__meta {
|
|
60
|
+
font-size: 12px;
|
|
61
|
+
color: var(--newt-text-muted);
|
|
62
|
+
margin-top: 2px;
|
|
63
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
<div class="newt-timeline">
|
|
2
|
+
<div class="newt-timeline__item">
|
|
3
|
+
<div
|
|
4
|
+
class="newt-timeline__dot newt-timeline__dot--brand"
|
|
5
|
+
aria-hidden="true"
|
|
6
|
+
>
|
|
7
|
+
โป
|
|
8
|
+
</div>
|
|
9
|
+
<div class="newt-timeline__content">
|
|
10
|
+
<div class="newt-timeline__title">Event title</div>
|
|
11
|
+
<div class="newt-timeline__meta">Detail ยท timestamp</div>
|
|
12
|
+
</div>
|
|
13
|
+
</div>
|
|
14
|
+
<div class="newt-timeline__item">
|
|
15
|
+
<div
|
|
16
|
+
class="newt-timeline__dot newt-timeline__dot--success"
|
|
17
|
+
aria-hidden="true"
|
|
18
|
+
>
|
|
19
|
+
โ
|
|
20
|
+
</div>
|
|
21
|
+
<div class="newt-timeline__content">
|
|
22
|
+
<div class="newt-timeline__title">Event title</div>
|
|
23
|
+
<div class="newt-timeline__meta">Detail ยท timestamp</div>
|
|
24
|
+
</div>
|
|
25
|
+
</div>
|
|
26
|
+
</div>
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/* newt-ui ยท Toast / Notification */
|
|
2
|
+
|
|
3
|
+
.newt-toast {
|
|
4
|
+
display: flex;
|
|
5
|
+
align-items: flex-start;
|
|
6
|
+
gap: 12px;
|
|
7
|
+
background: var(--newt-bg-elevated);
|
|
8
|
+
border: 1px solid var(--newt-border);
|
|
9
|
+
border-radius: var(--newt-radius-md);
|
|
10
|
+
padding: 12px 14px;
|
|
11
|
+
box-shadow: var(--newt-shadow-elevation-high);
|
|
12
|
+
max-width: 360px;
|
|
13
|
+
}
|
|
14
|
+
.newt-toast__icon {
|
|
15
|
+
width: 20px;
|
|
16
|
+
height: 20px;
|
|
17
|
+
border-radius: 50%;
|
|
18
|
+
flex-shrink: 0;
|
|
19
|
+
display: flex;
|
|
20
|
+
align-items: center;
|
|
21
|
+
justify-content: center;
|
|
22
|
+
}
|
|
23
|
+
.newt-toast--success .newt-toast__icon {
|
|
24
|
+
background: var(--newt-online);
|
|
25
|
+
}
|
|
26
|
+
.newt-toast--error .newt-toast__icon {
|
|
27
|
+
background: var(--newt-dnd);
|
|
28
|
+
}
|
|
29
|
+
.newt-toast__title {
|
|
30
|
+
font-size: 14px;
|
|
31
|
+
font-weight: 600;
|
|
32
|
+
}
|
|
33
|
+
.newt-toast__desc {
|
|
34
|
+
font-size: 13px;
|
|
35
|
+
color: var(--newt-text-secondary);
|
|
36
|
+
margin-top: 2px;
|
|
37
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export function showToast({ title, description, variant = "success" }) {
|
|
2
|
+
const toast = document.createElement("div")
|
|
3
|
+
toast.className = `newt-toast newt-toast--${variant}`
|
|
4
|
+
toast.setAttribute("role", "status")
|
|
5
|
+
toast.setAttribute("aria-live", "polite")
|
|
6
|
+
toast.innerHTML = `
|
|
7
|
+
<div class="newt-toast__icon">${variant === "success" ? "โ" : "!"}</div>
|
|
8
|
+
<div>
|
|
9
|
+
<div class="newt-toast__title">${title}</div>
|
|
10
|
+
<div class="newt-toast__desc">${description}</div>
|
|
11
|
+
</div>
|
|
12
|
+
`
|
|
13
|
+
document.body.appendChild(toast)
|
|
14
|
+
setTimeout(() => toast.remove(), 5000)
|
|
15
|
+
return toast
|
|
16
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<div class="newt-field">
|
|
2
|
+
<label class="newt-label" for="newt-token-example">Bot token</label>
|
|
3
|
+
<div class="newt-token-field">
|
|
4
|
+
<input
|
|
5
|
+
class="newt-input"
|
|
6
|
+
id="newt-token-example"
|
|
7
|
+
type="password"
|
|
8
|
+
value="โขโขโขโขโขโขโขโขโขโขโขโขโขโขโขโข"
|
|
9
|
+
readonly
|
|
10
|
+
/>
|
|
11
|
+
<button class="newt-btn newt-btn--secondary" data-newt-token-toggle>
|
|
12
|
+
Reveal
|
|
13
|
+
</button>
|
|
14
|
+
<button class="newt-btn newt-btn--secondary" data-newt-token-copy>
|
|
15
|
+
Copy
|
|
16
|
+
</button>
|
|
17
|
+
</div>
|
|
18
|
+
</div>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
document.querySelectorAll("[data-newt-token-toggle]").forEach((btn) => {
|
|
2
|
+
btn.addEventListener("click", () => {
|
|
3
|
+
const input = btn.closest(".newt-token-field").querySelector("input")
|
|
4
|
+
const revealed = input.type === "text"
|
|
5
|
+
input.type = revealed ? "password" : "text"
|
|
6
|
+
btn.textContent = revealed ? "Reveal" : "Hide"
|
|
7
|
+
})
|
|
8
|
+
})
|
|
9
|
+
document.querySelectorAll("[data-newt-token-copy]").forEach((btn) => {
|
|
10
|
+
btn.addEventListener("click", async () => {
|
|
11
|
+
const input = btn.closest(".newt-token-field").querySelector("input")
|
|
12
|
+
await navigator.clipboard.writeText(input.value)
|
|
13
|
+
const original = btn.textContent
|
|
14
|
+
btn.textContent = "Copied!"
|
|
15
|
+
setTimeout(() => (btn.textContent = original), 1500)
|
|
16
|
+
})
|
|
17
|
+
})
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/* newt-ui ยท Tooltip */
|
|
2
|
+
|
|
3
|
+
.newt-tooltip {
|
|
4
|
+
position: relative;
|
|
5
|
+
display: inline-flex;
|
|
6
|
+
}
|
|
7
|
+
.newt-tooltip__bubble {
|
|
8
|
+
position: absolute;
|
|
9
|
+
bottom: calc(100% + 8px);
|
|
10
|
+
left: 50%;
|
|
11
|
+
transform: translateX(-50%);
|
|
12
|
+
background: #111214;
|
|
13
|
+
color: var(--newt-text-primary);
|
|
14
|
+
font-size: 12px;
|
|
15
|
+
font-weight: 500;
|
|
16
|
+
padding: 6px 10px;
|
|
17
|
+
border-radius: var(--newt-radius-sm);
|
|
18
|
+
white-space: nowrap;
|
|
19
|
+
box-shadow: var(--newt-shadow-elevation-high);
|
|
20
|
+
opacity: 0;
|
|
21
|
+
pointer-events: none;
|
|
22
|
+
transition: opacity var(--newt-duration-fast) var(--newt-ease);
|
|
23
|
+
}
|
|
24
|
+
.newt-tooltip:hover .newt-tooltip__bubble {
|
|
25
|
+
opacity: 1;
|
|
26
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/* newt-ui ยท Typing Indicator */
|
|
2
|
+
|
|
3
|
+
.newt-typing {
|
|
4
|
+
display: inline-flex;
|
|
5
|
+
align-items: center;
|
|
6
|
+
gap: 8px;
|
|
7
|
+
font-size: 13px;
|
|
8
|
+
color: var(--newt-text-muted);
|
|
9
|
+
}
|
|
10
|
+
.newt-typing__dots {
|
|
11
|
+
display: inline-flex;
|
|
12
|
+
gap: 3px;
|
|
13
|
+
}
|
|
14
|
+
.newt-typing__dots span {
|
|
15
|
+
width: 6px;
|
|
16
|
+
height: 6px;
|
|
17
|
+
border-radius: 50%;
|
|
18
|
+
background: var(--newt-text-muted);
|
|
19
|
+
animation: newt-typing-bounce 1.2s ease-in-out infinite;
|
|
20
|
+
}
|
|
21
|
+
.newt-typing__dots span:nth-child(2) {
|
|
22
|
+
animation-delay: 0.15s;
|
|
23
|
+
}
|
|
24
|
+
.newt-typing__dots span:nth-child(3) {
|
|
25
|
+
animation-delay: 0.3s;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
@keyframes newt-typing-bounce {
|
|
29
|
+
0%,
|
|
30
|
+
60%,
|
|
31
|
+
100% {
|
|
32
|
+
transform: translateY(0);
|
|
33
|
+
opacity: 0.5;
|
|
34
|
+
}
|
|
35
|
+
30% {
|
|
36
|
+
transform: translateY(-3px);
|
|
37
|
+
opacity: 1;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
@media (prefers-reduced-motion: reduce) {
|
|
41
|
+
.newt-typing__dots span {
|
|
42
|
+
animation: none;
|
|
43
|
+
opacity: 0.8;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/* newt-ui ยท User Profile Popout */
|
|
2
|
+
|
|
3
|
+
.newt-profile {
|
|
4
|
+
background: var(--newt-bg-base);
|
|
5
|
+
border-radius: var(--newt-radius-lg);
|
|
6
|
+
width: 280px;
|
|
7
|
+
overflow: hidden;
|
|
8
|
+
box-shadow: var(--newt-shadow-elevation-high);
|
|
9
|
+
border: 1px solid var(--newt-border);
|
|
10
|
+
}
|
|
11
|
+
.newt-profile__banner {
|
|
12
|
+
height: 60px;
|
|
13
|
+
background: var(--newt-brand);
|
|
14
|
+
}
|
|
15
|
+
.newt-profile__head {
|
|
16
|
+
padding: 0 16px 12px;
|
|
17
|
+
position: relative;
|
|
18
|
+
}
|
|
19
|
+
.newt-profile__avatar-wrap {
|
|
20
|
+
position: absolute;
|
|
21
|
+
top: -24px;
|
|
22
|
+
left: 16px;
|
|
23
|
+
border: 4px solid var(--newt-bg-base);
|
|
24
|
+
border-radius: 50%;
|
|
25
|
+
}
|
|
26
|
+
.newt-profile__actions {
|
|
27
|
+
display: flex;
|
|
28
|
+
justify-content: flex-end;
|
|
29
|
+
padding: 8px 0 36px;
|
|
30
|
+
gap: 8px;
|
|
31
|
+
}
|
|
32
|
+
.newt-profile__name {
|
|
33
|
+
font-size: 16px;
|
|
34
|
+
font-weight: 700;
|
|
35
|
+
color: var(--newt-text-primary);
|
|
36
|
+
}
|
|
37
|
+
.newt-profile__handle {
|
|
38
|
+
font-size: 13px;
|
|
39
|
+
color: var(--newt-text-muted);
|
|
40
|
+
margin-bottom: 10px;
|
|
41
|
+
}
|
|
42
|
+
.newt-profile__divider {
|
|
43
|
+
height: 1px;
|
|
44
|
+
background: var(--newt-border);
|
|
45
|
+
margin: 10px 0;
|
|
46
|
+
}
|
|
47
|
+
.newt-profile__section-label {
|
|
48
|
+
font-size: 11px;
|
|
49
|
+
font-weight: 700;
|
|
50
|
+
text-transform: uppercase;
|
|
51
|
+
letter-spacing: 0.06em;
|
|
52
|
+
color: var(--newt-text-muted);
|
|
53
|
+
margin-bottom: 6px;
|
|
54
|
+
}
|
|
55
|
+
.newt-profile__bio {
|
|
56
|
+
font-size: 13px;
|
|
57
|
+
color: var(--newt-text-secondary);
|
|
58
|
+
line-height: 1.5;
|
|
59
|
+
}
|
|
60
|
+
.newt-profile__roles {
|
|
61
|
+
display: flex;
|
|
62
|
+
flex-wrap: wrap;
|
|
63
|
+
gap: 4px;
|
|
64
|
+
}
|
|
65
|
+
.newt-profile__body {
|
|
66
|
+
padding: 0 16px 16px;
|
|
67
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
<div class="newt-profile">
|
|
2
|
+
<div class="newt-profile__banner" style="background: var(--newt-brand)"></div>
|
|
3
|
+
<div class="newt-profile__head">
|
|
4
|
+
<div class="newt-profile__actions">
|
|
5
|
+
<button class="newt-btn newt-btn--icon" aria-label="Send message">
|
|
6
|
+
โ
|
|
7
|
+
</button>
|
|
8
|
+
</div>
|
|
9
|
+
<div class="newt-profile__avatar-wrap">
|
|
10
|
+
<div class="newt-status">
|
|
11
|
+
<div class="newt-avatar newt-avatar--lg">U</div>
|
|
12
|
+
<div class="newt-status__dot newt-status__dot--online"></div>
|
|
13
|
+
</div>
|
|
14
|
+
</div>
|
|
15
|
+
<div class="newt-profile__name">username</div>
|
|
16
|
+
<div class="newt-profile__handle">username#0000</div>
|
|
17
|
+
<div class="newt-profile__divider"></div>
|
|
18
|
+
</div>
|
|
19
|
+
<div class="newt-profile__body">
|
|
20
|
+
<div class="newt-profile__section-label">About me</div>
|
|
21
|
+
<div class="newt-profile__bio">Bio text goes here.</div>
|
|
22
|
+
<div class="newt-profile__divider"></div>
|
|
23
|
+
<div class="newt-profile__section-label">Roles</div>
|
|
24
|
+
<div class="newt-profile__roles">
|
|
25
|
+
<span class="newt-role-tag"
|
|
26
|
+
><span class="newt-role-tag__dot"></span>Role</span
|
|
27
|
+
>
|
|
28
|
+
</div>
|
|
29
|
+
</div>
|
|
30
|
+
</div>
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/* newt-ui ยท Voice Channel Row */
|
|
2
|
+
|
|
3
|
+
.newt-voice-channel {
|
|
4
|
+
display: flex;
|
|
5
|
+
flex-direction: column;
|
|
6
|
+
gap: 4px;
|
|
7
|
+
padding: 6px 8px;
|
|
8
|
+
border-radius: var(--newt-radius-sm);
|
|
9
|
+
}
|
|
10
|
+
.newt-voice-channel__header {
|
|
11
|
+
display: flex;
|
|
12
|
+
align-items: center;
|
|
13
|
+
gap: 6px;
|
|
14
|
+
color: var(--newt-text-muted);
|
|
15
|
+
font-size: 15px;
|
|
16
|
+
font-weight: 500;
|
|
17
|
+
cursor: pointer;
|
|
18
|
+
transition: color var(--newt-duration-fast) var(--newt-ease);
|
|
19
|
+
}
|
|
20
|
+
.newt-voice-channel__header:hover {
|
|
21
|
+
color: var(--newt-text-secondary);
|
|
22
|
+
}
|
|
23
|
+
.newt-voice-channel__icon {
|
|
24
|
+
flex-shrink: 0;
|
|
25
|
+
opacity: 0.8;
|
|
26
|
+
}
|
|
27
|
+
.newt-voice-channel__members {
|
|
28
|
+
display: flex;
|
|
29
|
+
flex-direction: column;
|
|
30
|
+
gap: 2px;
|
|
31
|
+
padding-left: 24px;
|
|
32
|
+
}
|
|
33
|
+
.newt-voice-channel__member {
|
|
34
|
+
display: flex;
|
|
35
|
+
align-items: center;
|
|
36
|
+
gap: 8px;
|
|
37
|
+
padding: 3px 6px;
|
|
38
|
+
border-radius: var(--newt-radius-sm);
|
|
39
|
+
font-size: 14px;
|
|
40
|
+
color: var(--newt-text-secondary);
|
|
41
|
+
cursor: pointer;
|
|
42
|
+
transition: background var(--newt-duration-fast) var(--newt-ease);
|
|
43
|
+
}
|
|
44
|
+
.newt-voice-channel__member:hover {
|
|
45
|
+
background: var(--newt-bg-hover);
|
|
46
|
+
}
|
|
47
|
+
.newt-voice-channel__member-icons {
|
|
48
|
+
display: flex;
|
|
49
|
+
align-items: center;
|
|
50
|
+
gap: 4px;
|
|
51
|
+
margin-left: auto;
|
|
52
|
+
color: var(--newt-text-muted);
|
|
53
|
+
font-size: 12px;
|
|
54
|
+
}
|
|
55
|
+
.newt-voice-channel__member-icons--muted {
|
|
56
|
+
color: var(--newt-dnd);
|
|
57
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<div class="newt-voice-channel">
|
|
2
|
+
<div class="newt-voice-channel__header">
|
|
3
|
+
<span class="newt-voice-channel__icon" aria-hidden="true">๐</span>
|
|
4
|
+
Channel name
|
|
5
|
+
</div>
|
|
6
|
+
<div class="newt-voice-channel__members">
|
|
7
|
+
<div class="newt-voice-channel__member">
|
|
8
|
+
<div class="newt-avatar newt-avatar--sm">A</div>
|
|
9
|
+
username
|
|
10
|
+
<div class="newt-voice-channel__member-icons">๐๏ธ</div>
|
|
11
|
+
</div>
|
|
12
|
+
</div>
|
|
13
|
+
</div>
|