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,33 @@
|
|
|
1
|
+
<div class="newt-permission">
|
|
2
|
+
<div class="newt-permission__info">
|
|
3
|
+
<span class="newt-permission__name">Permission name</span>
|
|
4
|
+
<span class="newt-permission__desc">Permission description.</span>
|
|
5
|
+
</div>
|
|
6
|
+
<div
|
|
7
|
+
class="newt-permission__states"
|
|
8
|
+
role="group"
|
|
9
|
+
aria-label="Permission name"
|
|
10
|
+
>
|
|
11
|
+
<button
|
|
12
|
+
class="newt-permission__state newt-permission__state--deny"
|
|
13
|
+
aria-pressed="false"
|
|
14
|
+
aria-label="Deny"
|
|
15
|
+
>
|
|
16
|
+
✕
|
|
17
|
+
</button>
|
|
18
|
+
<button
|
|
19
|
+
class="newt-permission__state newt-permission__state--inherit newt-permission__state--active"
|
|
20
|
+
aria-pressed="true"
|
|
21
|
+
aria-label="Inherit"
|
|
22
|
+
>
|
|
23
|
+
/
|
|
24
|
+
</button>
|
|
25
|
+
<button
|
|
26
|
+
class="newt-permission__state newt-permission__state--allow"
|
|
27
|
+
aria-pressed="false"
|
|
28
|
+
aria-label="Allow"
|
|
29
|
+
>
|
|
30
|
+
✓
|
|
31
|
+
</button>
|
|
32
|
+
</div>
|
|
33
|
+
</div>
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/* newt-ui · Progress Bar (server boost / upload style) */
|
|
2
|
+
|
|
3
|
+
.newt-progress {
|
|
4
|
+
width: 100%;
|
|
5
|
+
height: 8px;
|
|
6
|
+
border-radius: var(--newt-radius-full);
|
|
7
|
+
background: var(--newt-bg-base);
|
|
8
|
+
overflow: hidden;
|
|
9
|
+
}
|
|
10
|
+
.newt-progress__fill {
|
|
11
|
+
height: 100%;
|
|
12
|
+
border-radius: var(--newt-radius-full);
|
|
13
|
+
background: linear-gradient(90deg, var(--newt-brand), #8c54ff);
|
|
14
|
+
transition: width var(--newt-duration-base) var(--newt-ease);
|
|
15
|
+
}
|
|
16
|
+
.newt-progress__fill--success {
|
|
17
|
+
background: linear-gradient(90deg, var(--newt-online), #45c178);
|
|
18
|
+
}
|
|
19
|
+
.newt-progress__fill--danger {
|
|
20
|
+
background: linear-gradient(90deg, var(--newt-dnd), #f4878a);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.newt-progress-label {
|
|
24
|
+
display: flex;
|
|
25
|
+
justify-content: space-between;
|
|
26
|
+
font-size: 12px;
|
|
27
|
+
color: var(--newt-text-muted);
|
|
28
|
+
margin-bottom: 6px;
|
|
29
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/* newt-ui · Reaction Pill */
|
|
2
|
+
|
|
3
|
+
.newt-reaction {
|
|
4
|
+
display: inline-flex;
|
|
5
|
+
align-items: center;
|
|
6
|
+
gap: 4px;
|
|
7
|
+
padding: 2px 8px;
|
|
8
|
+
border-radius: var(--newt-radius-md);
|
|
9
|
+
border: 1px solid var(--newt-border);
|
|
10
|
+
background: var(--newt-bg-surface);
|
|
11
|
+
font-size: 13px;
|
|
12
|
+
color: var(--newt-text-secondary);
|
|
13
|
+
cursor: pointer;
|
|
14
|
+
transition:
|
|
15
|
+
background var(--newt-duration-fast) var(--newt-ease),
|
|
16
|
+
border-color var(--newt-duration-fast) var(--newt-ease);
|
|
17
|
+
}
|
|
18
|
+
.newt-reaction:hover {
|
|
19
|
+
background: var(--newt-bg-hover);
|
|
20
|
+
}
|
|
21
|
+
.newt-reaction--active {
|
|
22
|
+
background: rgba(88, 101, 242, 0.15);
|
|
23
|
+
border-color: var(--newt-brand);
|
|
24
|
+
color: #b3baff;
|
|
25
|
+
}
|
|
26
|
+
.newt-reaction:focus-visible {
|
|
27
|
+
outline: 2px solid var(--newt-text-link);
|
|
28
|
+
outline-offset: 2px;
|
|
29
|
+
}
|
|
30
|
+
.newt-reaction__count {
|
|
31
|
+
font-weight: 600;
|
|
32
|
+
font-size: 12px;
|
|
33
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<button
|
|
2
|
+
class="newt-reaction newt-reaction--active"
|
|
3
|
+
aria-pressed="true"
|
|
4
|
+
aria-label="👍 reaction, 12 people, you reacted"
|
|
5
|
+
>
|
|
6
|
+
<span aria-hidden="true">👍</span><span class="newt-reaction__count">12</span>
|
|
7
|
+
</button>
|
|
8
|
+
<button
|
|
9
|
+
class="newt-reaction"
|
|
10
|
+
aria-pressed="false"
|
|
11
|
+
aria-label="🚀 reaction, 4 people"
|
|
12
|
+
>
|
|
13
|
+
<span aria-hidden="true">🚀</span><span class="newt-reaction__count">4</span>
|
|
14
|
+
</button>
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/* newt-ui · Reply Preview (Discord "replying to" bar) */
|
|
2
|
+
|
|
3
|
+
.newt-reply {
|
|
4
|
+
display: flex;
|
|
5
|
+
align-items: center;
|
|
6
|
+
gap: 6px;
|
|
7
|
+
font-size: 13px;
|
|
8
|
+
color: var(--newt-text-muted);
|
|
9
|
+
margin-bottom: 4px;
|
|
10
|
+
padding-left: 18px;
|
|
11
|
+
position: relative;
|
|
12
|
+
}
|
|
13
|
+
.newt-reply::before {
|
|
14
|
+
content: "";
|
|
15
|
+
position: absolute;
|
|
16
|
+
left: 0;
|
|
17
|
+
top: 50%;
|
|
18
|
+
width: 12px;
|
|
19
|
+
height: 12px;
|
|
20
|
+
border-left: 2px solid var(--newt-border);
|
|
21
|
+
border-top: 2px solid var(--newt-border);
|
|
22
|
+
border-radius: 6px 0 0 0;
|
|
23
|
+
transform: translateY(-100%);
|
|
24
|
+
}
|
|
25
|
+
.newt-reply__author {
|
|
26
|
+
color: var(--newt-text-link);
|
|
27
|
+
font-weight: 500;
|
|
28
|
+
}
|
|
29
|
+
.newt-reply__text {
|
|
30
|
+
color: var(--newt-text-muted);
|
|
31
|
+
overflow: hidden;
|
|
32
|
+
text-overflow: ellipsis;
|
|
33
|
+
white-space: nowrap;
|
|
34
|
+
max-width: 360px;
|
|
35
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/* newt-ui · Role Tag */
|
|
2
|
+
|
|
3
|
+
.newt-role-tag {
|
|
4
|
+
display: inline-flex;
|
|
5
|
+
align-items: center;
|
|
6
|
+
gap: 4px;
|
|
7
|
+
font-size: 11px;
|
|
8
|
+
font-weight: 600;
|
|
9
|
+
padding: 2px 6px;
|
|
10
|
+
border-radius: var(--newt-radius-sm);
|
|
11
|
+
background: var(--newt-bg-elevated);
|
|
12
|
+
border: 1px solid var(--newt-border);
|
|
13
|
+
}
|
|
14
|
+
.newt-role-tag__dot {
|
|
15
|
+
width: 8px;
|
|
16
|
+
height: 8px;
|
|
17
|
+
border-radius: 50%;
|
|
18
|
+
background: currentColor;
|
|
19
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/* newt-ui · Scrollbar Utility */
|
|
2
|
+
|
|
3
|
+
.newt-scrollbar {
|
|
4
|
+
scrollbar-width: thin;
|
|
5
|
+
scrollbar-color: var(--newt-bg-active) transparent;
|
|
6
|
+
}
|
|
7
|
+
.newt-scrollbar::-webkit-scrollbar {
|
|
8
|
+
width: 16px;
|
|
9
|
+
height: 16px;
|
|
10
|
+
}
|
|
11
|
+
.newt-scrollbar::-webkit-scrollbar-track {
|
|
12
|
+
background: transparent;
|
|
13
|
+
}
|
|
14
|
+
.newt-scrollbar::-webkit-scrollbar-thumb {
|
|
15
|
+
background-color: var(--newt-bg-active);
|
|
16
|
+
border: 4px solid transparent;
|
|
17
|
+
background-clip: padding-box;
|
|
18
|
+
border-radius: 8px;
|
|
19
|
+
}
|
|
20
|
+
.newt-scrollbar::-webkit-scrollbar-thumb:hover {
|
|
21
|
+
background-color: var(--newt-text-muted);
|
|
22
|
+
background-clip: padding-box;
|
|
23
|
+
}
|
|
24
|
+
.newt-scrollbar::-webkit-scrollbar-corner {
|
|
25
|
+
background-color: transparent;
|
|
26
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/* newt-ui · Select Menu */
|
|
2
|
+
|
|
3
|
+
.newt-select-menu {
|
|
4
|
+
background: var(--newt-bg-floating);
|
|
5
|
+
border: 1px solid var(--newt-border);
|
|
6
|
+
border-radius: var(--newt-radius-md);
|
|
7
|
+
box-shadow: var(--newt-shadow-elevation-high);
|
|
8
|
+
padding: 6px;
|
|
9
|
+
min-width: 200px;
|
|
10
|
+
max-height: 320px;
|
|
11
|
+
overflow-y: auto;
|
|
12
|
+
}
|
|
13
|
+
.newt-select-menu__search {
|
|
14
|
+
display: flex;
|
|
15
|
+
align-items: center;
|
|
16
|
+
gap: 8px;
|
|
17
|
+
padding: 6px 10px;
|
|
18
|
+
background: var(--newt-bg-base);
|
|
19
|
+
border-radius: var(--newt-radius-sm);
|
|
20
|
+
margin-bottom: 4px;
|
|
21
|
+
}
|
|
22
|
+
.newt-select-menu__search input {
|
|
23
|
+
background: none;
|
|
24
|
+
border: none;
|
|
25
|
+
outline: none;
|
|
26
|
+
color: var(--newt-text-primary);
|
|
27
|
+
font-family: var(--newt-font-sans);
|
|
28
|
+
font-size: 14px;
|
|
29
|
+
width: 100%;
|
|
30
|
+
}
|
|
31
|
+
.newt-select-menu__search input::placeholder {
|
|
32
|
+
color: var(--newt-text-muted);
|
|
33
|
+
}
|
|
34
|
+
.newt-select-menu__label {
|
|
35
|
+
font-size: 11px;
|
|
36
|
+
font-weight: 700;
|
|
37
|
+
text-transform: uppercase;
|
|
38
|
+
letter-spacing: 0.06em;
|
|
39
|
+
color: var(--newt-text-muted);
|
|
40
|
+
padding: 4px 10px 2px;
|
|
41
|
+
}
|
|
42
|
+
.newt-select-menu__option {
|
|
43
|
+
display: flex;
|
|
44
|
+
align-items: center;
|
|
45
|
+
gap: 10px;
|
|
46
|
+
padding: 8px 10px;
|
|
47
|
+
border-radius: var(--newt-radius-sm);
|
|
48
|
+
cursor: pointer;
|
|
49
|
+
font-size: 14px;
|
|
50
|
+
color: var(--newt-text-secondary);
|
|
51
|
+
}
|
|
52
|
+
.newt-select-menu__option:hover {
|
|
53
|
+
background: var(--newt-brand);
|
|
54
|
+
color: #fff;
|
|
55
|
+
}
|
|
56
|
+
.newt-select-menu__option--selected {
|
|
57
|
+
color: var(--newt-text-primary);
|
|
58
|
+
}
|
|
59
|
+
.newt-select-menu__option--selected::after {
|
|
60
|
+
content: "✓";
|
|
61
|
+
margin-left: auto;
|
|
62
|
+
color: var(--newt-brand);
|
|
63
|
+
font-weight: 700;
|
|
64
|
+
}
|
|
65
|
+
.newt-select-menu__option:hover::after {
|
|
66
|
+
color: #fff;
|
|
67
|
+
}
|
|
68
|
+
.newt-select-menu__divider {
|
|
69
|
+
height: 1px;
|
|
70
|
+
background: var(--newt-border);
|
|
71
|
+
margin: 4px 6px;
|
|
72
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<div class="newt-select-menu" role="listbox" aria-label="Select an option">
|
|
2
|
+
<div class="newt-select-menu__search">
|
|
3
|
+
<input type="text" placeholder="Search…" aria-label="Search options" />
|
|
4
|
+
</div>
|
|
5
|
+
<div class="newt-select-menu__label">Options</div>
|
|
6
|
+
<div
|
|
7
|
+
class="newt-select-menu__option newt-select-menu__option--selected"
|
|
8
|
+
role="option"
|
|
9
|
+
aria-selected="true"
|
|
10
|
+
>
|
|
11
|
+
Option one
|
|
12
|
+
</div>
|
|
13
|
+
<div class="newt-select-menu__option" role="option" aria-selected="false">
|
|
14
|
+
Option two
|
|
15
|
+
</div>
|
|
16
|
+
<div class="newt-select-menu__option" role="option" aria-selected="false">
|
|
17
|
+
Option three
|
|
18
|
+
</div>
|
|
19
|
+
</div>
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/* newt-ui · Server Banner */
|
|
2
|
+
|
|
3
|
+
.newt-server-banner {
|
|
4
|
+
display: flex;
|
|
5
|
+
align-items: center;
|
|
6
|
+
gap: 16px;
|
|
7
|
+
background: var(--newt-bg-elevated);
|
|
8
|
+
border: 1px solid var(--newt-border);
|
|
9
|
+
border-radius: var(--newt-radius-lg);
|
|
10
|
+
padding: 16px 20px;
|
|
11
|
+
max-width: 480px;
|
|
12
|
+
}
|
|
13
|
+
.newt-server-banner__icon {
|
|
14
|
+
width: 56px;
|
|
15
|
+
height: 56px;
|
|
16
|
+
border-radius: var(--newt-radius-lg);
|
|
17
|
+
background: var(--newt-brand);
|
|
18
|
+
color: #fff;
|
|
19
|
+
display: flex;
|
|
20
|
+
align-items: center;
|
|
21
|
+
justify-content: center;
|
|
22
|
+
font-size: 22px;
|
|
23
|
+
font-weight: 700;
|
|
24
|
+
flex-shrink: 0;
|
|
25
|
+
}
|
|
26
|
+
.newt-server-banner__info {
|
|
27
|
+
flex: 1;
|
|
28
|
+
min-width: 0;
|
|
29
|
+
}
|
|
30
|
+
.newt-server-banner__name {
|
|
31
|
+
font-size: 16px;
|
|
32
|
+
font-weight: 700;
|
|
33
|
+
color: var(--newt-text-primary);
|
|
34
|
+
}
|
|
35
|
+
.newt-server-banner__meta {
|
|
36
|
+
display: flex;
|
|
37
|
+
align-items: center;
|
|
38
|
+
gap: 12px;
|
|
39
|
+
font-size: 13px;
|
|
40
|
+
color: var(--newt-text-muted);
|
|
41
|
+
margin-top: 2px;
|
|
42
|
+
}
|
|
43
|
+
.newt-server-banner__meta-item {
|
|
44
|
+
display: flex;
|
|
45
|
+
align-items: center;
|
|
46
|
+
gap: 5px;
|
|
47
|
+
}
|
|
48
|
+
.newt-server-banner__meta-dot {
|
|
49
|
+
width: 8px;
|
|
50
|
+
height: 8px;
|
|
51
|
+
border-radius: 50%;
|
|
52
|
+
}
|
|
53
|
+
.newt-server-banner__meta-dot--online {
|
|
54
|
+
background: var(--newt-online);
|
|
55
|
+
}
|
|
56
|
+
.newt-server-banner__meta-dot--offline {
|
|
57
|
+
background: var(--newt-offline);
|
|
58
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<div class="newt-server-banner">
|
|
2
|
+
<div class="newt-server-banner__icon" aria-hidden="true">N</div>
|
|
3
|
+
<div class="newt-server-banner__info">
|
|
4
|
+
<div class="newt-server-banner__name">Server name</div>
|
|
5
|
+
<div class="newt-server-banner__meta">
|
|
6
|
+
<span class="newt-server-banner__meta-item">
|
|
7
|
+
<span
|
|
8
|
+
class="newt-server-banner__meta-dot newt-server-banner__meta-dot--online"
|
|
9
|
+
></span>
|
|
10
|
+
142 Online
|
|
11
|
+
</span>
|
|
12
|
+
<span class="newt-server-banner__meta-item">
|
|
13
|
+
<span
|
|
14
|
+
class="newt-server-banner__meta-dot newt-server-banner__meta-dot--offline"
|
|
15
|
+
></span>
|
|
16
|
+
1,024 Members
|
|
17
|
+
</span>
|
|
18
|
+
</div>
|
|
19
|
+
</div>
|
|
20
|
+
<button class="newt-btn newt-btn--primary">Join</button>
|
|
21
|
+
</div>
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/* newt-ui · Skeleton Loader */
|
|
2
|
+
|
|
3
|
+
.newt-skeleton {
|
|
4
|
+
background: linear-gradient(
|
|
5
|
+
90deg,
|
|
6
|
+
var(--newt-bg-elevated) 25%,
|
|
7
|
+
var(--newt-bg-hover) 50%,
|
|
8
|
+
var(--newt-bg-elevated) 75%
|
|
9
|
+
);
|
|
10
|
+
background-size: 200% 100%;
|
|
11
|
+
border-radius: var(--newt-radius-sm);
|
|
12
|
+
animation: newt-skeleton-shimmer 1.6s ease-in-out infinite;
|
|
13
|
+
}
|
|
14
|
+
.newt-skeleton--text {
|
|
15
|
+
height: 14px;
|
|
16
|
+
}
|
|
17
|
+
.newt-skeleton--avatar {
|
|
18
|
+
width: 40px;
|
|
19
|
+
height: 40px;
|
|
20
|
+
border-radius: 50%;
|
|
21
|
+
}
|
|
22
|
+
.newt-skeleton--title {
|
|
23
|
+
height: 20px;
|
|
24
|
+
width: 40%;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
@keyframes newt-skeleton-shimmer {
|
|
28
|
+
0% {
|
|
29
|
+
background-position: 200% 0;
|
|
30
|
+
}
|
|
31
|
+
100% {
|
|
32
|
+
background-position: -200% 0;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
@media (prefers-reduced-motion: reduce) {
|
|
36
|
+
.newt-skeleton {
|
|
37
|
+
animation: none;
|
|
38
|
+
opacity: 0.6;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<div style="display: flex; gap: 12px">
|
|
2
|
+
<div class="newt-skeleton newt-skeleton--avatar"></div>
|
|
3
|
+
<div style="display: flex; flex-direction: column; flex: 1; gap: 6px">
|
|
4
|
+
<div class="newt-skeleton newt-skeleton--title"></div>
|
|
5
|
+
<div class="newt-skeleton newt-skeleton--text" style="width: 80%"></div>
|
|
6
|
+
</div>
|
|
7
|
+
</div>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/* newt-ui · Slash Command Block */
|
|
2
|
+
|
|
3
|
+
.newt-command {
|
|
4
|
+
display: inline-flex;
|
|
5
|
+
align-items: center;
|
|
6
|
+
gap: 6px;
|
|
7
|
+
background: rgba(88, 101, 242, 0.15);
|
|
8
|
+
color: #b3baff;
|
|
9
|
+
font-family: var(--newt-font-mono);
|
|
10
|
+
font-size: 13px;
|
|
11
|
+
padding: 2px 8px 2px 6px;
|
|
12
|
+
border-radius: var(--newt-radius-sm);
|
|
13
|
+
}
|
|
14
|
+
.newt-command__icon {
|
|
15
|
+
opacity: 0.8;
|
|
16
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/* newt-ui · Spoiler */
|
|
2
|
+
|
|
3
|
+
.newt-spoiler {
|
|
4
|
+
background: #1a1a1e;
|
|
5
|
+
color: transparent;
|
|
6
|
+
border-radius: var(--newt-radius-sm);
|
|
7
|
+
padding: 0 4px;
|
|
8
|
+
cursor: pointer;
|
|
9
|
+
transition:
|
|
10
|
+
background var(--newt-duration-fast) var(--newt-ease),
|
|
11
|
+
color 0s;
|
|
12
|
+
user-select: none;
|
|
13
|
+
}
|
|
14
|
+
.newt-spoiler--revealed {
|
|
15
|
+
background: var(--newt-bg-active);
|
|
16
|
+
color: var(--newt-text-primary);
|
|
17
|
+
user-select: text;
|
|
18
|
+
cursor: text;
|
|
19
|
+
}
|
|
20
|
+
.newt-spoiler:not(.newt-spoiler--revealed):hover {
|
|
21
|
+
background: #232328;
|
|
22
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/* newt-ui · Stage Banner */
|
|
2
|
+
|
|
3
|
+
.newt-stage-banner {
|
|
4
|
+
display: flex;
|
|
5
|
+
align-items: center;
|
|
6
|
+
gap: 12px;
|
|
7
|
+
background: var(--newt-brand);
|
|
8
|
+
color: #fff;
|
|
9
|
+
padding: 10px 16px;
|
|
10
|
+
font-size: 13px;
|
|
11
|
+
font-weight: 500;
|
|
12
|
+
}
|
|
13
|
+
.newt-stage-banner__dot {
|
|
14
|
+
width: 8px;
|
|
15
|
+
height: 8px;
|
|
16
|
+
border-radius: 50%;
|
|
17
|
+
background: #fff;
|
|
18
|
+
flex-shrink: 0;
|
|
19
|
+
}
|
|
20
|
+
.newt-stage-banner__action {
|
|
21
|
+
margin-left: auto;
|
|
22
|
+
background: rgba(0, 0, 0, 0.2);
|
|
23
|
+
color: #fff;
|
|
24
|
+
border: none;
|
|
25
|
+
border-radius: var(--newt-radius-sm);
|
|
26
|
+
padding: 4px 10px;
|
|
27
|
+
font-size: 12px;
|
|
28
|
+
font-weight: 600;
|
|
29
|
+
cursor: pointer;
|
|
30
|
+
flex-shrink: 0;
|
|
31
|
+
}
|
|
32
|
+
.newt-stage-banner__action:hover {
|
|
33
|
+
background: rgba(0, 0, 0, 0.32);
|
|
34
|
+
}
|
|
35
|
+
.newt-stage-banner--dismissible .newt-stage-banner__close {
|
|
36
|
+
background: none;
|
|
37
|
+
border: none;
|
|
38
|
+
color: rgba(255, 255, 255, 0.8);
|
|
39
|
+
cursor: pointer;
|
|
40
|
+
font-size: 16px;
|
|
41
|
+
line-height: 1;
|
|
42
|
+
flex-shrink: 0;
|
|
43
|
+
}
|
|
44
|
+
.newt-stage-banner__close:hover {
|
|
45
|
+
color: #fff;
|
|
46
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<div class="newt-stage-banner">
|
|
2
|
+
<span class="newt-stage-banner__dot" aria-hidden="true"></span>
|
|
3
|
+
Announcement text goes here.
|
|
4
|
+
<button class="newt-stage-banner__action">Action</button>
|
|
5
|
+
</div>
|
|
6
|
+
|
|
7
|
+
<div
|
|
8
|
+
class="newt-stage-banner newt-stage-banner--dismissible"
|
|
9
|
+
style="
|
|
10
|
+
background: var(--newt-bg-elevated);
|
|
11
|
+
color: var(--newt-text-primary);
|
|
12
|
+
border: 1px solid var(--newt-border);
|
|
13
|
+
"
|
|
14
|
+
>
|
|
15
|
+
<span
|
|
16
|
+
class="newt-stage-banner__dot"
|
|
17
|
+
aria-hidden="true"
|
|
18
|
+
style="background: var(--newt-online)"
|
|
19
|
+
></span>
|
|
20
|
+
Status message goes here.
|
|
21
|
+
<button class="newt-stage-banner__close" aria-label="Dismiss">×</button>
|
|
22
|
+
</div>
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/* newt-ui · Status Indicator */
|
|
2
|
+
|
|
3
|
+
.newt-status {
|
|
4
|
+
position: relative;
|
|
5
|
+
display: inline-block;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.newt-status__dot {
|
|
9
|
+
position: absolute;
|
|
10
|
+
bottom: -2px;
|
|
11
|
+
right: -2px;
|
|
12
|
+
width: 14px;
|
|
13
|
+
height: 14px;
|
|
14
|
+
border-radius: 50%;
|
|
15
|
+
border: 3px solid var(--newt-bg-base);
|
|
16
|
+
background: var(--newt-offline);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.newt-status__dot--online {
|
|
20
|
+
background: var(--newt-online);
|
|
21
|
+
}
|
|
22
|
+
.newt-status__dot--idle {
|
|
23
|
+
background: var(--newt-bg-base);
|
|
24
|
+
border-color: var(--newt-bg-base);
|
|
25
|
+
}
|
|
26
|
+
.newt-status__dot--idle::after {
|
|
27
|
+
content: "";
|
|
28
|
+
position: absolute;
|
|
29
|
+
inset: 0;
|
|
30
|
+
border-radius: 50%;
|
|
31
|
+
background: var(--newt-idle);
|
|
32
|
+
clip-path: circle(60% at 35% 35%);
|
|
33
|
+
}
|
|
34
|
+
.newt-status__dot--dnd {
|
|
35
|
+
background: var(--newt-bg-base);
|
|
36
|
+
}
|
|
37
|
+
.newt-status__dot--dnd::after {
|
|
38
|
+
content: "";
|
|
39
|
+
position: absolute;
|
|
40
|
+
top: 50%;
|
|
41
|
+
left: 50%;
|
|
42
|
+
transform: translate(-50%, -50%);
|
|
43
|
+
width: 65%;
|
|
44
|
+
height: 22%;
|
|
45
|
+
border-radius: 1px;
|
|
46
|
+
background: var(--newt-dnd);
|
|
47
|
+
}
|
|
48
|
+
.newt-status__dot--offline {
|
|
49
|
+
background: var(--newt-offline);
|
|
50
|
+
}
|
|
51
|
+
.newt-status__dot--streaming {
|
|
52
|
+
background: #593695;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/* presence glow — signature motif */
|
|
56
|
+
.newt-status__dot--online::after {
|
|
57
|
+
content: "";
|
|
58
|
+
position: absolute;
|
|
59
|
+
inset: -4px;
|
|
60
|
+
border-radius: 50%;
|
|
61
|
+
border: 1.5px solid var(--newt-online);
|
|
62
|
+
opacity: 0;
|
|
63
|
+
animation: newt-presence-pulse 2.4s ease-out infinite;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
@keyframes newt-presence-pulse {
|
|
67
|
+
0% {
|
|
68
|
+
transform: scale(0.7);
|
|
69
|
+
opacity: 0.6;
|
|
70
|
+
}
|
|
71
|
+
70% {
|
|
72
|
+
transform: scale(1.6);
|
|
73
|
+
opacity: 0;
|
|
74
|
+
}
|
|
75
|
+
100% {
|
|
76
|
+
transform: scale(1.6);
|
|
77
|
+
opacity: 0;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
@media (prefers-reduced-motion: reduce) {
|
|
82
|
+
.newt-status__dot--online::after {
|
|
83
|
+
animation: none;
|
|
84
|
+
}
|
|
85
|
+
}
|