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.
Files changed (97) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +53 -0
  3. package/cli/index.js +137 -0
  4. package/dist/index.js +1408 -0
  5. package/package.json +70 -0
  6. package/registry/html/components/attachment.css +42 -0
  7. package/registry/html/components/attachment.html +8 -0
  8. package/registry/html/components/avatar.css +32 -0
  9. package/registry/html/components/avatar.html +3 -0
  10. package/registry/html/components/badge.css +39 -0
  11. package/registry/html/components/badge.html +3 -0
  12. package/registry/html/components/bot-command-card.css +67 -0
  13. package/registry/html/components/bot-command-card.html +17 -0
  14. package/registry/html/components/button.css +98 -0
  15. package/registry/html/components/button.html +5 -0
  16. package/registry/html/components/card.css +20 -0
  17. package/registry/html/components/card.html +4 -0
  18. package/registry/html/components/channel-topic.css +35 -0
  19. package/registry/html/components/channel-topic.html +8 -0
  20. package/registry/html/components/code-block.css +25 -0
  21. package/registry/html/components/code-block.html +2 -0
  22. package/registry/html/components/context-menu.css +46 -0
  23. package/registry/html/components/context-menu.html +14 -0
  24. package/registry/html/components/cooldown-bar.css +33 -0
  25. package/registry/html/components/cooldown-bar.html +9 -0
  26. package/registry/html/components/divider.css +18 -0
  27. package/registry/html/components/divider.html +1 -0
  28. package/registry/html/components/dropdown.css +50 -0
  29. package/registry/html/components/dropdown.html +17 -0
  30. package/registry/html/components/embed.css +65 -0
  31. package/registry/html/components/embed.html +14 -0
  32. package/registry/html/components/empty-state.css +26 -0
  33. package/registry/html/components/empty-state.html +5 -0
  34. package/registry/html/components/form-fields.css +85 -0
  35. package/registry/html/components/form-fields.html +20 -0
  36. package/registry/html/components/kbd-tag.css +18 -0
  37. package/registry/html/components/kbd-tag.html +1 -0
  38. package/registry/html/components/member-list.css +32 -0
  39. package/registry/html/components/member-list.html +13 -0
  40. package/registry/html/components/mention.css +36 -0
  41. package/registry/html/components/mention.html +3 -0
  42. package/registry/html/components/message-group.css +50 -0
  43. package/registry/html/components/message-group.html +20 -0
  44. package/registry/html/components/modal.css +37 -0
  45. package/registry/html/components/modal.html +17 -0
  46. package/registry/html/components/modal.js +10 -0
  47. package/registry/html/components/notif-badge.css +28 -0
  48. package/registry/html/components/notif-badge.html +13 -0
  49. package/registry/html/components/pagination.css +57 -0
  50. package/registry/html/components/pagination.html +16 -0
  51. package/registry/html/components/permission.css +64 -0
  52. package/registry/html/components/permission.html +33 -0
  53. package/registry/html/components/progress.css +29 -0
  54. package/registry/html/components/progress.html +6 -0
  55. package/registry/html/components/reaction.css +33 -0
  56. package/registry/html/components/reaction.html +14 -0
  57. package/registry/html/components/reply-preview.css +35 -0
  58. package/registry/html/components/reply-preview.html +4 -0
  59. package/registry/html/components/role-tag.css +19 -0
  60. package/registry/html/components/role-tag.html +3 -0
  61. package/registry/html/components/scrollbar.css +26 -0
  62. package/registry/html/components/scrollbar.html +7 -0
  63. package/registry/html/components/select-menu.css +72 -0
  64. package/registry/html/components/select-menu.html +19 -0
  65. package/registry/html/components/server-banner.css +58 -0
  66. package/registry/html/components/server-banner.html +21 -0
  67. package/registry/html/components/skeleton.css +40 -0
  68. package/registry/html/components/skeleton.html +7 -0
  69. package/registry/html/components/slash-command.css +16 -0
  70. package/registry/html/components/slash-command.html +3 -0
  71. package/registry/html/components/spoiler.css +22 -0
  72. package/registry/html/components/spoiler.html +8 -0
  73. package/registry/html/components/stage-banner.css +46 -0
  74. package/registry/html/components/stage-banner.html +22 -0
  75. package/registry/html/components/status-indicator.css +85 -0
  76. package/registry/html/components/status-indicator.html +4 -0
  77. package/registry/html/components/tabs.css +28 -0
  78. package/registry/html/components/tabs.html +7 -0
  79. package/registry/html/components/tabs.js +12 -0
  80. package/registry/html/components/timeline.css +63 -0
  81. package/registry/html/components/timeline.html +26 -0
  82. package/registry/html/components/toast.css +37 -0
  83. package/registry/html/components/toast.html +7 -0
  84. package/registry/html/components/toast.js +16 -0
  85. package/registry/html/components/token-field.css +10 -0
  86. package/registry/html/components/token-field.html +18 -0
  87. package/registry/html/components/token-field.js +17 -0
  88. package/registry/html/components/tooltip.css +26 -0
  89. package/registry/html/components/tooltip.html +8 -0
  90. package/registry/html/components/typing-indicator.css +45 -0
  91. package/registry/html/components/typing-indicator.html +4 -0
  92. package/registry/html/components/user-profile.css +67 -0
  93. package/registry/html/components/user-profile.html +30 -0
  94. package/registry/html/components/voice-channel.css +57 -0
  95. package/registry/html/components/voice-channel.html +13 -0
  96. package/registry/html/registry.json +279 -0
  97. package/registry/html/tokens.css +64 -0
package/package.json ADDED
@@ -0,0 +1,70 @@
1
+ {
2
+ "name": "newtui",
3
+ "version": "2.0.0",
4
+ "description": "CLI for newt/ui — Discord-native UI components for React, Vue and Nuxt (shadcn-style registry). Part of the WolfStar toolchain.",
5
+ "keywords": [
6
+ "component-library",
7
+ "design-system",
8
+ "discord",
9
+ "discord-bot",
10
+ "nuxt",
11
+ "react",
12
+ "shadcn",
13
+ "ui",
14
+ "vue",
15
+ "wolfstar"
16
+ ],
17
+ "homepage": "https://newtui.dev",
18
+ "bugs": {
19
+ "url": "https://github.com/wolfstar-project/newt-ui/issues"
20
+ },
21
+ "license": "Apache-2.0",
22
+ "author": "@wolfstar",
23
+ "repository": {
24
+ "type": "git",
25
+ "url": "git+https://github.com/wolfstar-project/newt-ui.git",
26
+ "directory": "packages/newtui"
27
+ },
28
+ "bin": {
29
+ "newtui": "./dist/index.js",
30
+ "newtui-html": "./cli/index.js"
31
+ },
32
+ "files": [
33
+ "dist",
34
+ "cli",
35
+ "registry",
36
+ "README.md",
37
+ "LICENSE"
38
+ ],
39
+ "type": "module",
40
+ "publishConfig": {
41
+ "access": "public",
42
+ "provenance": true
43
+ },
44
+ "dependencies": {
45
+ "@clack/prompts": "^1.7.0",
46
+ "cross-spawn": "^7.0.6",
47
+ "mri": "^1.2.0",
48
+ "package-manager-detector": "^1.8.0",
49
+ "picocolors": "^1.1.1",
50
+ "zod": "^3.24.1"
51
+ },
52
+ "devDependencies": {
53
+ "@types/cross-spawn": "^6.0.6",
54
+ "@types/node": "^22.10.2",
55
+ "tsdown": "^0.22.14",
56
+ "typescript": "^5.7.2",
57
+ "unrun": "^0.3.1"
58
+ },
59
+ "engines": {
60
+ "node": ">=18"
61
+ },
62
+ "scripts": {
63
+ "build": "tsdown --config-loader unrun",
64
+ "dev": "tsdown --config-loader unrun --watch",
65
+ "lint": "oxlint -c ../../.oxlintrc.json .",
66
+ "lint:fix": "oxlint -c ../../.oxlintrc.json --fix .",
67
+ "start": "node dist/index.js",
68
+ "typecheck": "tsc --noEmit"
69
+ }
70
+ }
@@ -0,0 +1,42 @@
1
+ /* newt-ui · Attachment / File Card */
2
+
3
+ .newt-attachment {
4
+ display: flex;
5
+ align-items: center;
6
+ gap: 12px;
7
+ background: var(--newt-bg-surface);
8
+ border: 1px solid var(--newt-border);
9
+ border-radius: var(--newt-radius-md);
10
+ padding: 10px 12px;
11
+ max-width: 360px;
12
+ }
13
+ .newt-attachment__icon {
14
+ width: 36px;
15
+ height: 36px;
16
+ border-radius: var(--newt-radius-sm);
17
+ background: var(--newt-brand);
18
+ color: #fff;
19
+ display: flex;
20
+ align-items: center;
21
+ justify-content: center;
22
+ font-size: 12px;
23
+ font-weight: 700;
24
+ font-family: var(--newt-font-mono);
25
+ flex-shrink: 0;
26
+ }
27
+ .newt-attachment__meta {
28
+ flex: 1;
29
+ min-width: 0;
30
+ }
31
+ .newt-attachment__name {
32
+ font-size: 14px;
33
+ font-weight: 500;
34
+ color: var(--newt-text-link);
35
+ overflow: hidden;
36
+ text-overflow: ellipsis;
37
+ white-space: nowrap;
38
+ }
39
+ .newt-attachment__size {
40
+ font-size: 12px;
41
+ color: var(--newt-text-muted);
42
+ }
@@ -0,0 +1,8 @@
1
+ <div class="newt-attachment">
2
+ <div class="newt-attachment__icon">FILE</div>
3
+ <div class="newt-attachment__meta">
4
+ <div class="newt-attachment__name">filename.ext</div>
5
+ <div class="newt-attachment__size">1.2 MB</div>
6
+ </div>
7
+ <button class="newt-btn newt-btn--icon" aria-label="Download file">⬇</button>
8
+ </div>
@@ -0,0 +1,32 @@
1
+ /* newt-ui · Avatar */
2
+
3
+ .newt-avatar {
4
+ width: 40px;
5
+ height: 40px;
6
+ border-radius: 50%;
7
+ background: var(--newt-brand);
8
+ color: #fff;
9
+ display: flex;
10
+ align-items: center;
11
+ justify-content: center;
12
+ font-weight: 600;
13
+ font-size: 16px;
14
+ flex-shrink: 0;
15
+ overflow: hidden;
16
+ position: relative;
17
+ }
18
+ .newt-avatar img {
19
+ width: 100%;
20
+ height: 100%;
21
+ object-fit: cover;
22
+ }
23
+ .newt-avatar--sm {
24
+ width: 24px;
25
+ height: 24px;
26
+ font-size: 11px;
27
+ }
28
+ .newt-avatar--lg {
29
+ width: 80px;
30
+ height: 80px;
31
+ font-size: 28px;
32
+ }
@@ -0,0 +1,3 @@
1
+ <div class="newt-avatar">N</div>
2
+ <div class="newt-avatar newt-avatar--sm">N</div>
3
+ <div class="newt-avatar newt-avatar--lg">N</div>
@@ -0,0 +1,39 @@
1
+ /* newt-ui · Badge */
2
+
3
+ .newt-badge {
4
+ display: inline-flex;
5
+ align-items: center;
6
+ gap: 4px;
7
+ font-size: 12px;
8
+ font-weight: 600;
9
+ line-height: 16px;
10
+ padding: 2px 8px;
11
+ border-radius: var(--newt-radius-full);
12
+ background: var(--newt-bg-elevated);
13
+ color: var(--newt-text-secondary);
14
+ }
15
+
16
+ .newt-badge--brand {
17
+ background: rgba(88, 101, 242, 0.15);
18
+ color: #b3baff;
19
+ }
20
+ .newt-badge--success {
21
+ background: rgba(35, 165, 90, 0.15);
22
+ color: #45c178;
23
+ }
24
+ .newt-badge--warning {
25
+ background: rgba(240, 178, 50, 0.15);
26
+ color: #f3b95f;
27
+ }
28
+ .newt-badge--danger {
29
+ background: rgba(242, 63, 66, 0.15);
30
+ color: #f4878a;
31
+ }
32
+
33
+ .newt-badge--dot::before {
34
+ content: "";
35
+ width: 6px;
36
+ height: 6px;
37
+ border-radius: 50%;
38
+ background: currentColor;
39
+ }
@@ -0,0 +1,3 @@
1
+ <span class="newt-badge newt-badge--brand newt-badge--dot">Brand</span>
2
+ <span class="newt-badge newt-badge--success newt-badge--dot">Online</span>
3
+ <span class="newt-badge newt-badge--danger newt-badge--dot">Error</span>
@@ -0,0 +1,67 @@
1
+ /* newt-ui · Bot Command Card */
2
+
3
+ .newt-command-card {
4
+ background: var(--newt-bg-elevated);
5
+ border: 1px solid var(--newt-border);
6
+ border-radius: var(--newt-radius-md);
7
+ padding: 16px;
8
+ max-width: 480px;
9
+ }
10
+ .newt-command-card__header {
11
+ display: flex;
12
+ align-items: center;
13
+ justify-content: space-between;
14
+ margin-bottom: 8px;
15
+ gap: 12px;
16
+ }
17
+ .newt-command-card__name {
18
+ display: inline-flex;
19
+ align-items: center;
20
+ gap: 4px;
21
+ font-family: var(--newt-font-mono);
22
+ font-size: 14px;
23
+ font-weight: 600;
24
+ color: var(--newt-brand);
25
+ }
26
+ .newt-command-card__slash {
27
+ color: var(--newt-text-muted);
28
+ font-weight: 400;
29
+ }
30
+ .newt-command-card__desc {
31
+ font-size: 13px;
32
+ color: var(--newt-text-secondary);
33
+ line-height: 1.5;
34
+ margin-bottom: 12px;
35
+ }
36
+ .newt-command-card__options {
37
+ display: flex;
38
+ flex-direction: column;
39
+ gap: 6px;
40
+ }
41
+ .newt-command-card__option {
42
+ display: flex;
43
+ align-items: baseline;
44
+ gap: 10px;
45
+ font-size: 12px;
46
+ }
47
+ .newt-command-card__opt-name {
48
+ font-family: var(--newt-font-mono);
49
+ color: var(--newt-text-primary);
50
+ font-weight: 600;
51
+ flex-shrink: 0;
52
+ }
53
+ .newt-command-card__opt-type {
54
+ color: var(--newt-text-muted);
55
+ font-family: var(--newt-font-mono);
56
+ font-size: 11px;
57
+ flex-shrink: 0;
58
+ }
59
+ .newt-command-card__opt-required {
60
+ color: var(--newt-dnd);
61
+ font-size: 11px;
62
+ font-weight: 700;
63
+ flex-shrink: 0;
64
+ }
65
+ .newt-command-card__opt-desc {
66
+ color: var(--newt-text-muted);
67
+ }
@@ -0,0 +1,17 @@
1
+ <div class="newt-command-card">
2
+ <div class="newt-command-card__header">
3
+ <span class="newt-command-card__name">
4
+ <span class="newt-command-card__slash">/</span>command
5
+ </span>
6
+ <span class="newt-badge newt-badge--brand">bot-name</span>
7
+ </div>
8
+ <div class="newt-command-card__desc">Command description goes here.</div>
9
+ <div class="newt-command-card__options">
10
+ <div class="newt-command-card__option">
11
+ <span class="newt-command-card__opt-name">option</span>
12
+ <span class="newt-command-card__opt-type">STRING</span>
13
+ <span class="newt-command-card__opt-required">required</span>
14
+ <span class="newt-command-card__opt-desc">Option description</span>
15
+ </div>
16
+ </div>
17
+ </div>
@@ -0,0 +1,98 @@
1
+ /* newt-ui · Button */
2
+
3
+ .newt-btn {
4
+ display: inline-flex;
5
+ align-items: center;
6
+ justify-content: center;
7
+ gap: 8px;
8
+ font-family: var(--newt-font-sans);
9
+ font-weight: 500;
10
+ font-size: 14px;
11
+ line-height: 16px;
12
+ padding: 10px 16px;
13
+ border-radius: var(--newt-radius-sm);
14
+ border: none;
15
+ cursor: pointer;
16
+ transition:
17
+ background-color var(--newt-duration-fast) var(--newt-ease),
18
+ color var(--newt-duration-fast) var(--newt-ease),
19
+ box-shadow var(--newt-duration-fast) var(--newt-ease);
20
+ white-space: nowrap;
21
+ user-select: none;
22
+ }
23
+ .newt-btn:active {
24
+ transform: translateY(0.5px);
25
+ }
26
+ .newt-btn:focus-visible {
27
+ outline: 2px solid var(--newt-text-link);
28
+ outline-offset: 2px;
29
+ }
30
+
31
+ .newt-btn--primary {
32
+ background: var(--newt-brand);
33
+ color: #fff;
34
+ }
35
+ .newt-btn--primary:hover {
36
+ background: var(--newt-brand-hover);
37
+ }
38
+ .newt-btn--primary:active {
39
+ background: var(--newt-brand-active);
40
+ }
41
+
42
+ .newt-btn--secondary {
43
+ background: var(--newt-bg-elevated);
44
+ color: var(--newt-text-primary);
45
+ }
46
+ .newt-btn--secondary:hover {
47
+ background: var(--newt-bg-hover);
48
+ }
49
+
50
+ .newt-btn--danger {
51
+ background: var(--newt-danger);
52
+ color: #fff;
53
+ }
54
+ .newt-btn--danger:hover {
55
+ background: var(--newt-danger-hover);
56
+ }
57
+
58
+ .newt-btn--success {
59
+ background: var(--newt-online);
60
+ color: #fff;
61
+ }
62
+ .newt-btn--success:hover {
63
+ filter: brightness(0.9);
64
+ }
65
+
66
+ .newt-btn--link {
67
+ background: transparent;
68
+ color: var(--newt-text-link);
69
+ padding: 4px 0;
70
+ }
71
+ .newt-btn--link:hover {
72
+ text-decoration: underline;
73
+ }
74
+
75
+ .newt-btn--sm {
76
+ padding: 6px 12px;
77
+ font-size: 13px;
78
+ }
79
+ .newt-btn--lg {
80
+ padding: 12px 24px;
81
+ font-size: 16px;
82
+ }
83
+
84
+ .newt-btn:disabled {
85
+ opacity: 0.5;
86
+ cursor: not-allowed;
87
+ }
88
+
89
+ .newt-btn--icon {
90
+ padding: 8px;
91
+ border-radius: var(--newt-radius-full);
92
+ background: var(--newt-bg-elevated);
93
+ color: var(--newt-text-secondary);
94
+ }
95
+ .newt-btn--icon:hover {
96
+ background: var(--newt-bg-hover);
97
+ color: var(--newt-text-primary);
98
+ }
@@ -0,0 +1,5 @@
1
+ <button class="newt-btn newt-btn--primary">Primary</button>
2
+ <button class="newt-btn newt-btn--secondary">Secondary</button>
3
+ <button class="newt-btn newt-btn--success">Success</button>
4
+ <button class="newt-btn newt-btn--danger">Danger</button>
5
+ <button class="newt-btn newt-btn--link">Link button</button>
@@ -0,0 +1,20 @@
1
+ /* newt-ui · Card / Panel */
2
+
3
+ .newt-card {
4
+ background: var(--newt-bg-elevated);
5
+ border-radius: var(--newt-radius-lg);
6
+ border: 1px solid var(--newt-border);
7
+ padding: 20px;
8
+ }
9
+
10
+ .newt-card__title {
11
+ font-size: 16px;
12
+ font-weight: 600;
13
+ margin: 0 0 4px;
14
+ }
15
+
16
+ .newt-card__description {
17
+ font-size: 14px;
18
+ color: var(--newt-text-secondary);
19
+ margin: 0;
20
+ }
@@ -0,0 +1,4 @@
1
+ <div class="newt-card">
2
+ <div class="newt-card__title">Card title</div>
3
+ <p class="newt-card__description">Card description text.</p>
4
+ </div>
@@ -0,0 +1,35 @@
1
+ /* newt-ui · Channel Topic Bar */
2
+
3
+ .newt-channel-topic {
4
+ display: flex;
5
+ align-items: center;
6
+ gap: 8px;
7
+ padding: 12px 16px;
8
+ border-bottom: 1px solid var(--newt-border);
9
+ font-size: 14px;
10
+ min-width: 0;
11
+ }
12
+ .newt-channel-topic__icon {
13
+ color: var(--newt-text-muted);
14
+ font-weight: 700;
15
+ flex-shrink: 0;
16
+ }
17
+ .newt-channel-topic__name {
18
+ font-weight: 700;
19
+ color: var(--newt-text-primary);
20
+ white-space: nowrap;
21
+ flex-shrink: 0;
22
+ }
23
+ .newt-channel-topic__divider {
24
+ width: 1px;
25
+ height: 18px;
26
+ background: var(--newt-border);
27
+ flex-shrink: 0;
28
+ }
29
+ .newt-channel-topic__desc {
30
+ color: var(--newt-text-muted);
31
+ font-size: 13px;
32
+ overflow: hidden;
33
+ text-overflow: ellipsis;
34
+ white-space: nowrap;
35
+ }
@@ -0,0 +1,8 @@
1
+ <div class="newt-channel-topic">
2
+ <span class="newt-channel-topic__icon" aria-hidden="true">#</span>
3
+ <span class="newt-channel-topic__name">channel-name</span>
4
+ <span class="newt-channel-topic__divider"></span>
5
+ <span class="newt-channel-topic__desc"
6
+ >Channel topic description goes here</span
7
+ >
8
+ </div>
@@ -0,0 +1,25 @@
1
+ /* newt-ui · Code Block */
2
+
3
+ .newt-code {
4
+ background: #111214;
5
+ border: 1px solid var(--newt-border);
6
+ border-radius: var(--newt-radius-md);
7
+ font-family: var(--newt-font-mono);
8
+ font-size: 13px;
9
+ color: var(--newt-text-secondary);
10
+ padding: 16px;
11
+ overflow-x: auto;
12
+ line-height: 1.6;
13
+ }
14
+ .newt-code .tok-key {
15
+ color: #569cd6;
16
+ }
17
+ .newt-code .tok-str {
18
+ color: #ce9178;
19
+ }
20
+ .newt-code .tok-com {
21
+ color: #6a9955;
22
+ }
23
+ .newt-code .tok-fn {
24
+ color: #dcdcaa;
25
+ }
@@ -0,0 +1,2 @@
1
+ <pre class="newt-code"><span class="tok-com">// example</span>
2
+ <span class="tok-key">const</span> <span class="tok-fn">greet</span> = () => <span class="tok-str">"hello"</span>;</pre>
@@ -0,0 +1,46 @@
1
+ /* newt-ui · Context Menu */
2
+
3
+ .newt-context-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
+ width: 188px;
10
+ }
11
+ .newt-context-menu__item {
12
+ display: flex;
13
+ align-items: center;
14
+ justify-content: space-between;
15
+ padding: 6px 8px;
16
+ border-radius: var(--newt-radius-sm);
17
+ font-size: 13px;
18
+ color: var(--newt-text-secondary);
19
+ cursor: pointer;
20
+ transition:
21
+ background var(--newt-duration-fast) var(--newt-ease),
22
+ color var(--newt-duration-fast) var(--newt-ease);
23
+ }
24
+ .newt-context-menu__item:hover {
25
+ background: var(--newt-brand);
26
+ color: #fff;
27
+ }
28
+ .newt-context-menu__item--danger {
29
+ color: var(--newt-dnd);
30
+ }
31
+ .newt-context-menu__item--danger:hover {
32
+ background: var(--newt-dnd);
33
+ color: #fff;
34
+ }
35
+ .newt-context-menu__shortcut {
36
+ font-size: 11px;
37
+ color: var(--newt-text-muted);
38
+ }
39
+ .newt-context-menu__item:hover .newt-context-menu__shortcut {
40
+ color: rgba(255, 255, 255, 0.7);
41
+ }
42
+ .newt-context-menu__divider {
43
+ height: 1px;
44
+ background: var(--newt-border);
45
+ margin: 4px 6px;
46
+ }
@@ -0,0 +1,14 @@
1
+ <div class="newt-context-menu" role="menu">
2
+ <div class="newt-context-menu__item" role="menuitem">Action one</div>
3
+ <div class="newt-context-menu__item" role="menuitem">
4
+ Action two
5
+ <span class="newt-context-menu__shortcut">Ctrl+K</span>
6
+ </div>
7
+ <div class="newt-context-menu__divider"></div>
8
+ <div
9
+ class="newt-context-menu__item newt-context-menu__item--danger"
10
+ role="menuitem"
11
+ >
12
+ Delete
13
+ </div>
14
+ </div>
@@ -0,0 +1,33 @@
1
+ /* newt-ui · Cooldown Bar */
2
+
3
+ .newt-cooldown {
4
+ display: flex;
5
+ flex-direction: column;
6
+ gap: 6px;
7
+ max-width: 260px;
8
+ }
9
+ .newt-cooldown__label {
10
+ display: flex;
11
+ justify-content: space-between;
12
+ font-size: 12px;
13
+ color: var(--newt-text-muted);
14
+ }
15
+ .newt-cooldown__label strong {
16
+ font-family: var(--newt-font-mono);
17
+ color: var(--newt-text-secondary);
18
+ font-weight: 600;
19
+ }
20
+ .newt-cooldown__track {
21
+ height: 6px;
22
+ background: var(--newt-bg-base);
23
+ border-radius: var(--newt-radius-full);
24
+ overflow: hidden;
25
+ }
26
+ .newt-cooldown__fill {
27
+ height: 100%;
28
+ background: var(--newt-idle);
29
+ border-radius: var(--newt-radius-full);
30
+ }
31
+ .newt-cooldown__fill--ready {
32
+ background: var(--newt-online);
33
+ }
@@ -0,0 +1,9 @@
1
+ <div class="newt-cooldown">
2
+ <div class="newt-cooldown__label">
3
+ <span>Command cooldown</span>
4
+ <strong>3.2s</strong>
5
+ </div>
6
+ <div class="newt-cooldown__track">
7
+ <div class="newt-cooldown__fill" style="width: 40%"></div>
8
+ </div>
9
+ </div>
@@ -0,0 +1,18 @@
1
+ /* newt-ui · Divider with label (Discord date separators) */
2
+
3
+ .newt-divider {
4
+ display: flex;
5
+ align-items: center;
6
+ gap: 12px;
7
+ margin: 16px 0;
8
+ color: var(--newt-text-muted);
9
+ font-size: 12px;
10
+ font-weight: 600;
11
+ }
12
+ .newt-divider::before,
13
+ .newt-divider::after {
14
+ content: "";
15
+ flex: 1;
16
+ height: 1px;
17
+ background: var(--newt-border);
18
+ }
@@ -0,0 +1 @@
1
+ <div class="newt-divider">SECTION LABEL</div>
@@ -0,0 +1,50 @@
1
+ /* newt-ui · Dropdown Menu */
2
+
3
+ .newt-dropdown {
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
+ width: 240px;
10
+ }
11
+ .newt-dropdown__item {
12
+ display: flex;
13
+ align-items: center;
14
+ gap: 10px;
15
+ padding: 8px 10px;
16
+ border-radius: var(--newt-radius-sm);
17
+ cursor: pointer;
18
+ transition: background var(--newt-duration-fast) var(--newt-ease);
19
+ }
20
+ .newt-dropdown__item:hover,
21
+ .newt-dropdown__item--active {
22
+ background: var(--newt-brand);
23
+ }
24
+ .newt-dropdown__item:hover .newt-dropdown__desc,
25
+ .newt-dropdown__item--active .newt-dropdown__desc {
26
+ color: rgba(255, 255, 255, 0.75);
27
+ }
28
+ .newt-dropdown__icon {
29
+ width: 20px;
30
+ text-align: center;
31
+ flex-shrink: 0;
32
+ color: var(--newt-text-muted);
33
+ }
34
+ .newt-dropdown__item:hover .newt-dropdown__icon,
35
+ .newt-dropdown__item--active .newt-dropdown__icon {
36
+ color: #fff;
37
+ }
38
+ .newt-dropdown__label {
39
+ font-size: 14px;
40
+ font-weight: 500;
41
+ }
42
+ .newt-dropdown__desc {
43
+ font-size: 12px;
44
+ color: var(--newt-text-muted);
45
+ }
46
+ .newt-dropdown__divider {
47
+ height: 1px;
48
+ background: var(--newt-border);
49
+ margin: 4px 6px;
50
+ }