@nikitadmitrieff/feedback-chat 0.1.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.
@@ -0,0 +1,298 @@
1
+ .feedback-panel {
2
+ /* ── Always-dark glassmorphism tokens ── */
3
+ --background: #1a1c20;
4
+ --foreground: #e8eaed;
5
+ --card: rgba(255, 255, 255, 0.10);
6
+ --card-foreground: #e8eaed;
7
+ --popover: #282a2e;
8
+ --popover-foreground: #e8eaed;
9
+ --primary: #ffffff;
10
+ --primary-foreground: #1a1c20;
11
+ --secondary: rgba(255, 255, 255, 0.10);
12
+ --secondary-foreground: #e8eaed;
13
+ --muted: rgba(255, 255, 255, 0.08);
14
+ --muted-foreground: #8b8d93;
15
+ --accent: rgba(255, 255, 255, 0.10);
16
+ --accent-foreground: #e8eaed;
17
+ --destructive: #ef4444;
18
+ --border: rgba(255, 255, 255, 0.08);
19
+ --input: rgba(255, 255, 255, 0.10);
20
+ --ring: rgba(94, 158, 255, 0.3);
21
+
22
+ --color-background: #1a1c20;
23
+ --color-foreground: #e8eaed;
24
+ --color-surface: rgba(255, 255, 255, 0.10);
25
+ --color-border: rgba(255, 255, 255, 0.10);
26
+ --color-muted: rgba(255, 255, 255, 0.08);
27
+ --color-muted-foreground: #8b8d93;
28
+ --color-muted-light: rgba(255, 255, 255, 0.10);
29
+ --color-error: #ef4444;
30
+ --color-success: #22c55e;
31
+ --color-primary: #ffffff;
32
+ --color-primary-foreground: #1a1c20;
33
+ --color-primary-light: #ffffff;
34
+ --color-primary-muted: rgba(255, 255, 255, 0.10);
35
+ --color-ring: rgba(94, 158, 255, 0.3);
36
+ --color-input: rgba(255, 255, 255, 0.12);
37
+ --color-card: rgba(255, 255, 255, 0.10);
38
+ --color-card-foreground: #e8eaed;
39
+ --color-popover: #282a2e;
40
+ --color-popover-foreground: #e8eaed;
41
+ --color-secondary: rgba(255, 255, 255, 0.10);
42
+ --color-secondary-foreground: #e8eaed;
43
+ --color-accent: rgba(255, 255, 255, 0.10);
44
+ --color-accent-foreground: #e8eaed;
45
+ --color-destructive: #ef4444;
46
+
47
+ color-scheme: dark;
48
+ font-family: 'Inter', system-ui, -apple-system, sans-serif;
49
+ letter-spacing: -0.011em;
50
+ color: var(--color-foreground);
51
+ font-size: 13px;
52
+ line-height: 1.5;
53
+ }
54
+
55
+ /* Form elements inherit panel colors + font */
56
+ .feedback-panel input,
57
+ .feedback-panel textarea,
58
+ .feedback-panel [contenteditable] {
59
+ color: inherit;
60
+ font-family: inherit;
61
+ }
62
+
63
+ /* Code blocks */
64
+ .feedback-panel .aui-md-inline-code { font-family: 'JetBrains Mono', monospace; }
65
+ .feedback-panel .aui-md-pre { font-family: 'JetBrains Mono', monospace; }
66
+
67
+ /* ── Trigger — centered fake composer bar ── */
68
+ .feedback-trigger-bar {
69
+ padding: 0 1.5rem;
70
+ max-width: 18rem; /* compact resting state */
71
+ transition: max-width 0.35s cubic-bezier(0.4, 0, 0.2, 1);
72
+ }
73
+ .feedback-trigger-bar:focus-within {
74
+ max-width: 30rem; /* expand on focus */
75
+ }
76
+ .feedback-trigger-input {
77
+ background: rgba(24, 26, 30, 0.88);
78
+ backdrop-filter: blur(24px) saturate(1.2);
79
+ -webkit-backdrop-filter: blur(24px) saturate(1.2);
80
+ border: 1px solid rgba(255, 255, 255, 0.08);
81
+ box-shadow:
82
+ 0 8px 32px rgba(0, 0, 0, 0.35),
83
+ 0 2px 8px rgba(0, 0, 0, 0.2),
84
+ inset 0 1px 0 rgba(255, 255, 255, 0.04);
85
+ font-family: 'Inter', system-ui, sans-serif;
86
+ cursor: text;
87
+ }
88
+ .feedback-trigger-input:hover {
89
+ background: rgba(30, 32, 37, 0.92);
90
+ border-color: rgba(255, 255, 255, 0.12);
91
+ box-shadow:
92
+ 0 10px 40px rgba(0, 0, 0, 0.4),
93
+ 0 2px 8px rgba(0, 0, 0, 0.25),
94
+ inset 0 1px 0 rgba(255, 255, 255, 0.06);
95
+ }
96
+ .feedback-trigger-button {
97
+ background: rgba(24, 26, 30, 0.88);
98
+ backdrop-filter: blur(24px) saturate(1.2);
99
+ -webkit-backdrop-filter: blur(24px) saturate(1.2);
100
+ border: 1px solid rgba(255, 255, 255, 0.08);
101
+ color: #8b8d93;
102
+ box-shadow:
103
+ 0 8px 32px rgba(0, 0, 0, 0.35),
104
+ 0 2px 8px rgba(0, 0, 0, 0.2),
105
+ inset 0 1px 0 rgba(255, 255, 255, 0.04);
106
+ transition: all 0.3s ease;
107
+ }
108
+ .feedback-trigger-button:hover {
109
+ background: rgba(30, 32, 37, 0.92);
110
+ border-color: rgba(255, 255, 255, 0.14);
111
+ color: #e8eaed;
112
+ box-shadow:
113
+ 0 10px 40px rgba(0, 0, 0, 0.4),
114
+ 0 2px 8px rgba(0, 0, 0, 0.25),
115
+ inset 0 1px 0 rgba(255, 255, 255, 0.06);
116
+ }
117
+
118
+ /* ── Primary button overrides ── */
119
+ .feedback-panel .bg-primary {
120
+ background: #ffffff !important;
121
+ box-shadow: none !important;
122
+ transform: none !important;
123
+ }
124
+ .feedback-panel .bg-primary:hover {
125
+ background: #e0e0e0 !important;
126
+ transform: none !important;
127
+ }
128
+ .feedback-panel .text-primary { color: #ffffff !important; }
129
+ .feedback-panel .border-primary { border-color: rgba(255, 255, 255, 0.15) !important; }
130
+
131
+ /* ═══════════════════════════════════════════
132
+ Glass panel shell
133
+ ═══════════════════════════════════════════ */
134
+
135
+ .feedback-panel-glass {
136
+ background: rgba(24, 26, 30, 1);
137
+ backdrop-filter: blur(40px) saturate(1.3);
138
+ -webkit-backdrop-filter: blur(40px) saturate(1.3);
139
+ border: 1.5px solid rgba(255, 255, 255, 0.10);
140
+ border-radius: 1.5rem;
141
+ box-shadow:
142
+ 0 8px 32px rgba(0, 0, 0, 0.35),
143
+ 0 2px 8px rgba(0, 0, 0, 0.2),
144
+ inset 0 1px 0 rgba(255, 255, 255, 0.06),
145
+ inset 0 0 0 0.5px rgba(255, 255, 255, 0.04);
146
+ transition: border-color 0.4s ease, box-shadow 0.4s ease;
147
+ }
148
+ .feedback-panel-glass:hover {
149
+ border-color: rgba(255, 255, 255, 0.14);
150
+ box-shadow:
151
+ 0 8px 32px rgba(0, 0, 0, 0.35),
152
+ 0 2px 8px rgba(0, 0, 0, 0.2),
153
+ inset 0 1px 0 rgba(255, 255, 255, 0.08),
154
+ inset 0 0 0 0.5px rgba(255, 255, 255, 0.06);
155
+ }
156
+
157
+ /* ── Conversation tabs — floating glass pills ── */
158
+ .feedback-tab {
159
+ backdrop-filter: blur(16px);
160
+ -webkit-backdrop-filter: blur(16px);
161
+ border: 1px solid rgba(255, 255, 255, 0.06);
162
+ }
163
+ .feedback-tab-active {
164
+ background: rgba(24, 26, 30, 1);
165
+ color: #e8eaed;
166
+ border-color: rgba(255, 255, 255, 0.10);
167
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.25);
168
+ }
169
+ .feedback-tab-inactive {
170
+ background: rgba(24, 26, 30, 0.80);
171
+ color: #8b8d93;
172
+ }
173
+ .feedback-tab-inactive:hover {
174
+ background: rgba(24, 26, 30, 0.90);
175
+ color: #c0c2c6;
176
+ }
177
+ .feedback-tab-button {
178
+ background: rgba(24, 26, 30, 0.80);
179
+ color: #8b8d93;
180
+ border: 1px solid rgba(255, 255, 255, 0.06);
181
+ backdrop-filter: blur(16px);
182
+ -webkit-backdrop-filter: blur(16px);
183
+ }
184
+ .feedback-tab-button:hover {
185
+ background: rgba(24, 26, 30, 0.95);
186
+ color: #e8eaed;
187
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
188
+ }
189
+
190
+ /* ── Composer — subtle prompt box ── */
191
+ .feedback-panel .aui-composer-attachment-dropzone {
192
+ background: rgba(255, 255, 255, 0.10) !important;
193
+ border: 1px solid rgba(255, 255, 255, 0.12) !important;
194
+ border-radius: 1.25rem !important;
195
+ box-shadow: none;
196
+ transition: border-color 0.3s ease, box-shadow 0.3s ease;
197
+ }
198
+ .feedback-panel .aui-composer-attachment-dropzone:focus-within {
199
+ border-color: rgba(255, 255, 255, 0.12) !important;
200
+ box-shadow: none;
201
+ }
202
+
203
+ /* ── Viewport top fade ── */
204
+ .feedback-panel .aui-thread-viewport::before {
205
+ content: '';
206
+ position: sticky;
207
+ top: 0;
208
+ display: block;
209
+ height: 2.5rem;
210
+ min-height: 2.5rem;
211
+ margin-bottom: -2.5rem;
212
+ background: linear-gradient(to bottom, rgba(24, 26, 30, 1) 0%, transparent 100%);
213
+ pointer-events: none;
214
+ z-index: 5;
215
+ flex-shrink: 0;
216
+ }
217
+
218
+ /* ── Viewport footer (sticky composer area) ── */
219
+ .feedback-panel .aui-thread-viewport-footer {
220
+ background: rgba(24, 26, 30, 1) !important;
221
+ border-radius: 0 !important;
222
+ }
223
+
224
+ /* ── User message bubbles ── */
225
+ .feedback-panel .aui-user-message-content {
226
+ border-radius: 1.25rem;
227
+ background: rgba(255, 255, 255, 0.06) !important;
228
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
229
+ }
230
+
231
+ /* ── Edit composer ── */
232
+ .feedback-panel .aui-edit-composer-root {
233
+ border-radius: 1.5rem !important;
234
+ background: rgba(255, 255, 255, 0.06) !important;
235
+ border: 1px solid rgba(255, 255, 255, 0.10);
236
+ }
237
+
238
+ /* ── Error messages ── */
239
+ .feedback-panel .aui-message-error-root {
240
+ border-radius: 0.75rem;
241
+ }
242
+
243
+ /* ── Action bar popover ── */
244
+ .feedback-panel .aui-action-bar-more-content {
245
+ background: rgba(40, 42, 46, 0.95) !important;
246
+ backdrop-filter: blur(12px);
247
+ -webkit-backdrop-filter: blur(12px);
248
+ border-color: rgba(255, 255, 255, 0.10) !important;
249
+ border-radius: 0.75rem !important;
250
+ }
251
+
252
+ /* ── Suggestion cards ── */
253
+ .feedback-panel .aui-thread-welcome-suggestion {
254
+ background: rgba(255, 255, 255, 0.04) !important;
255
+ border-color: rgba(255, 255, 255, 0.08) !important;
256
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
257
+ transition: background 0.2s ease, box-shadow 0.2s ease;
258
+ }
259
+ .feedback-panel .aui-thread-welcome-suggestion:hover {
260
+ background: rgba(255, 255, 255, 0.08) !important;
261
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
262
+ }
263
+
264
+ /* ── Scroll to bottom button ── */
265
+ .feedback-panel .aui-thread-scroll-to-bottom {
266
+ background: rgba(255, 255, 255, 0.08) !important;
267
+ backdrop-filter: blur(12px);
268
+ -webkit-backdrop-filter: blur(12px);
269
+ border-color: rgba(255, 255, 255, 0.10) !important;
270
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
271
+ }
272
+
273
+ /* ── Pipeline tracker card ── */
274
+ .feedback-panel .rounded-2xl.border.bg-card {
275
+ background: rgba(255, 255, 255, 0.04) !important;
276
+ border-color: rgba(255, 255, 255, 0.08) !important;
277
+ box-shadow: 0 2px 12px rgba(0, 0, 0, 0.15);
278
+ }
279
+
280
+ /* ── Submit result containers ── */
281
+ .feedback-panel .rounded-xl.border.border-border {
282
+ border-color: rgba(255, 255, 255, 0.08) !important;
283
+ }
284
+ .feedback-panel .rounded-xl.bg-muted\/50 {
285
+ background: rgba(255, 255, 255, 0.04) !important;
286
+ border-radius: 0.75rem;
287
+ }
288
+
289
+ /* ── Scrollbar — hidden + scroll isolation ── */
290
+ .feedback-panel * {
291
+ scrollbar-width: none;
292
+ }
293
+ .feedback-panel ::-webkit-scrollbar {
294
+ display: none;
295
+ }
296
+ .feedback-panel {
297
+ overscroll-behavior: contain;
298
+ }
package/package.json ADDED
@@ -0,0 +1,61 @@
1
+ {
2
+ "name": "@nikitadmitrieff/feedback-chat",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "main": "./dist/client/index.js",
6
+ "types": "./dist/client/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./dist/client/index.d.ts",
10
+ "import": "./dist/client/index.js",
11
+ "default": "./dist/client/index.js"
12
+ },
13
+ "./server": {
14
+ "types": "./dist/server/index.d.ts",
15
+ "import": "./dist/server/index.js",
16
+ "default": "./dist/server/index.js"
17
+ },
18
+ "./styles.css": {
19
+ "import": "./dist/styles.css",
20
+ "default": "./dist/styles.css"
21
+ }
22
+ },
23
+ "bin": {
24
+ "feedback-chat": "./dist/cli/init.js"
25
+ },
26
+ "files": ["dist"],
27
+ "scripts": {
28
+ "build": "tsup && cp src/client/styles.css dist/styles.css",
29
+ "dev": "tsup --watch",
30
+ "test": "vitest run",
31
+ "lint": "tsc --noEmit"
32
+ },
33
+ "peerDependencies": {
34
+ "react": "^18 || ^19",
35
+ "react-dom": "^18 || ^19",
36
+ "next": ">=14",
37
+ "@assistant-ui/react": ">=0.12",
38
+ "@assistant-ui/react-ai-sdk": ">=1.3",
39
+ "@assistant-ui/react-markdown": ">=0.12",
40
+ "ai": ">=6",
41
+ "@ai-sdk/anthropic": ">=1"
42
+ },
43
+ "dependencies": {
44
+ "lucide-react": "^0.460",
45
+ "prompts": "^2.4",
46
+ "zod": "^3.24",
47
+ "clsx": "^2.1",
48
+ "tailwind-merge": "^2.6",
49
+ "class-variance-authority": "^0.7",
50
+ "radix-ui": "^1",
51
+ "remark-gfm": "^4"
52
+ },
53
+ "devDependencies": {
54
+ "@types/node": "^22",
55
+ "@types/prompts": "^2.4",
56
+ "@types/react": "^19",
57
+ "tsup": "^8",
58
+ "typescript": "^5.7",
59
+ "vitest": "^3"
60
+ }
61
+ }