@geenius/feedback 0.1.0 → 0.3.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 (104) hide show
  1. package/package.json +16 -3
  2. package/packages/convex/dist/index.d.ts +192 -0
  3. package/packages/convex/dist/index.js +239 -0
  4. package/packages/convex/dist/index.js.map +1 -0
  5. package/packages/react/README.md +1 -1
  6. package/packages/react/dist/index.d.ts +146 -0
  7. package/packages/react/dist/index.js +545 -0
  8. package/packages/react/dist/index.js.map +1 -0
  9. package/packages/react-css/README.md +1 -1
  10. package/packages/react-css/dist/index.css +965 -0
  11. package/packages/react-css/dist/index.css.map +1 -0
  12. package/packages/react-css/dist/index.d.ts +49 -0
  13. package/packages/react-css/dist/index.js +228 -0
  14. package/packages/react-css/dist/index.js.map +1 -0
  15. package/packages/shared/README.md +1 -1
  16. package/packages/shared/dist/index.d.ts +115 -0
  17. package/packages/shared/dist/index.js +112 -0
  18. package/packages/shared/dist/index.js.map +1 -0
  19. package/packages/solidjs/README.md +1 -1
  20. package/packages/solidjs/dist/index.d.ts +128 -0
  21. package/packages/solidjs/dist/index.js +289 -0
  22. package/packages/solidjs/dist/index.js.map +1 -0
  23. package/packages/solidjs-css/README.md +1 -1
  24. package/packages/solidjs-css/dist/index.css +965 -0
  25. package/packages/solidjs-css/dist/index.css.map +1 -0
  26. package/packages/solidjs-css/dist/index.d.ts +2 -0
  27. package/packages/solidjs-css/dist/index.js +29 -0
  28. package/packages/solidjs-css/dist/index.js.map +1 -0
  29. package/.changeset/config.json +0 -11
  30. package/.github/CODEOWNERS +0 -1
  31. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -16
  32. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -11
  33. package/.github/PULL_REQUEST_TEMPLATE.md +0 -10
  34. package/.github/dependabot.yml +0 -11
  35. package/.github/workflows/ci.yml +0 -23
  36. package/.github/workflows/release.yml +0 -29
  37. package/.nvmrc +0 -1
  38. package/.project/ACCOUNT.yaml +0 -4
  39. package/.project/IDEAS.yaml +0 -7
  40. package/.project/PROJECT.yaml +0 -11
  41. package/.project/ROADMAP.yaml +0 -15
  42. package/CODE_OF_CONDUCT.md +0 -16
  43. package/CONTRIBUTING.md +0 -26
  44. package/SECURITY.md +0 -15
  45. package/SUPPORT.md +0 -8
  46. package/packages/convex/package.json +0 -42
  47. package/packages/convex/src/index.ts +0 -3
  48. package/packages/convex/src/mutations.ts +0 -88
  49. package/packages/convex/src/queries.ts +0 -78
  50. package/packages/convex/src/schema.ts +0 -47
  51. package/packages/convex/tsconfig.json +0 -18
  52. package/packages/convex/tsup.config.ts +0 -17
  53. package/packages/react/package.json +0 -49
  54. package/packages/react/src/components/FeedbackCard.tsx +0 -51
  55. package/packages/react/src/components/FeedbackForm.tsx +0 -43
  56. package/packages/react/src/components/FeedbackWidget.tsx +0 -32
  57. package/packages/react/src/components/NPSSurvey.tsx +0 -62
  58. package/packages/react/src/components/index.ts +0 -4
  59. package/packages/react/src/hooks/index.ts +0 -5
  60. package/packages/react/src/hooks/useFeedback.ts +0 -23
  61. package/packages/react/src/hooks/useFeedbackAdmin.ts +0 -24
  62. package/packages/react/src/hooks/useFeedbackForm.ts +0 -35
  63. package/packages/react/src/hooks/useNPS.ts +0 -26
  64. package/packages/react/src/index.tsx +0 -13
  65. package/packages/react/src/pages/FeedbackAdminPage.tsx +0 -71
  66. package/packages/react/src/pages/FeedbackPublicPage.tsx +0 -42
  67. package/packages/react/src/pages/FeedbackWidgetPage.tsx +0 -25
  68. package/packages/react/src/pages/index.ts +0 -3
  69. package/packages/react/tsconfig.json +0 -19
  70. package/packages/react/tsup.config.ts +0 -12
  71. package/packages/react-css/package.json +0 -36
  72. package/packages/react-css/src/components/index.ts +0 -5
  73. package/packages/react-css/src/components/index.tsx +0 -107
  74. package/packages/react-css/src/hooks/index.ts +0 -2
  75. package/packages/react-css/src/index.tsx +0 -5
  76. package/packages/react-css/src/pages/FeedbackAdminPage.tsx +0 -112
  77. package/packages/react-css/src/pages/FeedbackPage.tsx +0 -76
  78. package/packages/react-css/src/styles.css +0 -281
  79. package/packages/react-css/tsconfig.json +0 -19
  80. package/packages/react-css/tsup.config.ts +0 -10
  81. package/packages/shared/package.json +0 -44
  82. package/packages/shared/src/__tests__/feedback.test.ts +0 -72
  83. package/packages/shared/src/config.ts +0 -49
  84. package/packages/shared/src/index.ts +0 -111
  85. package/packages/shared/src/types.ts +0 -59
  86. package/packages/shared/tsconfig.json +0 -18
  87. package/packages/shared/tsup.config.ts +0 -11
  88. package/packages/shared/vitest.config.ts +0 -4
  89. package/packages/solidjs/package.json +0 -45
  90. package/packages/solidjs/src/components.tsx +0 -72
  91. package/packages/solidjs/src/index.tsx +0 -3
  92. package/packages/solidjs/src/primitives.ts +0 -49
  93. package/packages/solidjs/tsconfig.json +0 -20
  94. package/packages/solidjs/tsup.config.ts +0 -12
  95. package/packages/solidjs-css/package.json +0 -32
  96. package/packages/solidjs-css/src/index.tsx +0 -4
  97. package/packages/solidjs-css/src/pages/FeedbackAdminPage.tsx +0 -78
  98. package/packages/solidjs-css/src/pages/FeedbackPage.tsx +0 -65
  99. package/packages/solidjs-css/src/primitives/index.ts +0 -1
  100. package/packages/solidjs-css/src/styles.css +0 -281
  101. package/packages/solidjs-css/tsconfig.json +0 -20
  102. package/packages/solidjs-css/tsup.config.ts +0 -10
  103. package/pnpm-workspace.yaml +0 -2
  104. package/tsconfig.json +0 -23
@@ -0,0 +1,965 @@
1
+ /* src/styles.css */
2
+ :root {
3
+ --feedback-bg: oklch(0.12 0.01 250);
4
+ --feedback-surface: oklch(0.16 0.01 250);
5
+ --feedback-border: oklch(0.22 0.01 250);
6
+ --feedback-text: oklch(0.95 0.01 250);
7
+ --feedback-text-muted: oklch(0.58 0.02 250);
8
+ --feedback-accent: oklch(0.65 0.20 265);
9
+ --feedback-open: oklch(0.65 0.20 245);
10
+ --feedback-review: oklch(0.72 0.18 60);
11
+ --feedback-planned: oklch(0.70 0.22 280);
12
+ --feedback-progress: oklch(0.65 0.20 265);
13
+ --feedback-done: oklch(0.72 0.18 155);
14
+ --feedback-declined: oklch(0.50 0.10 250);
15
+ --feedback-bug: oklch(0.60 0.25 25);
16
+ --feedback-feature: oklch(0.70 0.22 280);
17
+ --feedback-suggestion: oklch(0.72 0.18 60);
18
+ --feedback-general: oklch(0.65 0.20 245);
19
+ --feedback-radius: 0.75rem;
20
+ }
21
+ .feedback__card {
22
+ display: flex;
23
+ gap: 0.75rem;
24
+ padding: 1rem;
25
+ border: 1px solid var(--feedback-border);
26
+ border-radius: var(--feedback-radius);
27
+ background: oklch(1 0 0 / 0.02);
28
+ transition: all 0.2s;
29
+ cursor: pointer;
30
+ }
31
+ .feedback__card:hover {
32
+ border-color: oklch(0.65 0.20 265 / 0.2);
33
+ background: oklch(1 0 0 / 0.04);
34
+ }
35
+ .feedback__card-info {
36
+ flex: 1;
37
+ min-width: 0;
38
+ }
39
+ .feedback__card-badges {
40
+ display: flex;
41
+ align-items: center;
42
+ gap: 0.5rem;
43
+ flex-wrap: wrap;
44
+ margin-bottom: 0.25rem;
45
+ }
46
+ .feedback__card-title {
47
+ font-size: 0.875rem;
48
+ font-weight: 600;
49
+ color: oklch(1 0 0 / 0.9);
50
+ overflow: hidden;
51
+ text-overflow: ellipsis;
52
+ white-space: nowrap;
53
+ margin-bottom: 0.125rem;
54
+ }
55
+ .feedback__card-desc {
56
+ font-size: 0.6875rem;
57
+ color: oklch(1 0 0 / 0.4);
58
+ display: -webkit-box;
59
+ -webkit-line-clamp: 2;
60
+ -webkit-box-orient: vertical;
61
+ overflow: hidden;
62
+ }
63
+ .feedback__card-meta {
64
+ display: flex;
65
+ align-items: center;
66
+ gap: 0.75rem;
67
+ margin-top: 0.5rem;
68
+ font-size: 0.625rem;
69
+ color: oklch(1 0 0 / 0.25);
70
+ }
71
+ .feedback__card--bug {
72
+ border-left: 3px solid var(--feedback-bug);
73
+ }
74
+ .feedback__card--feature {
75
+ border-left: 3px solid var(--feedback-feature);
76
+ }
77
+ .feedback__card--suggestion {
78
+ border-left: 3px solid var(--feedback-suggestion);
79
+ }
80
+ .feedback__card--general {
81
+ border-left: 3px solid var(--feedback-general);
82
+ }
83
+ .feedback__vote-btn {
84
+ display: flex;
85
+ flex-direction: column;
86
+ align-items: center;
87
+ gap: 0.125rem;
88
+ padding: 0.375rem 0.5rem;
89
+ border-radius: calc(var(--feedback-radius) * 0.8);
90
+ border: none;
91
+ font-size: 0.6875rem;
92
+ font-weight: 700;
93
+ cursor: pointer;
94
+ transition: all 0.15s;
95
+ font-variant-numeric: tabular-nums;
96
+ }
97
+ .feedback__vote-btn--inactive {
98
+ background: oklch(1 0 0 / 0.05);
99
+ color: oklch(1 0 0 / 0.3);
100
+ }
101
+ .feedback__vote-btn--inactive:hover {
102
+ background: oklch(1 0 0 / 0.1);
103
+ color: oklch(1 0 0 / 0.5);
104
+ }
105
+ .feedback__vote-btn--active {
106
+ background: oklch(0.65 0.20 265 / 0.15);
107
+ color: oklch(0.65 0.20 265);
108
+ }
109
+ .feedback__vote-btn-arrow {
110
+ font-size: 0.875rem;
111
+ }
112
+ .feedback__status-badge {
113
+ display: inline-flex;
114
+ align-items: center;
115
+ gap: 0.25rem;
116
+ padding: 0.125rem 0.625rem;
117
+ border-radius: 9999px;
118
+ font-size: 0.625rem;
119
+ font-weight: 500;
120
+ }
121
+ .feedback__status-badge--open {
122
+ background: oklch(0.65 0.20 245 / 0.15);
123
+ color: oklch(0.65 0.20 245);
124
+ }
125
+ .feedback__status-badge--under-review {
126
+ background: oklch(0.72 0.18 60 / 0.15);
127
+ color: oklch(0.72 0.18 60);
128
+ }
129
+ .feedback__status-badge--planned {
130
+ background: oklch(0.70 0.22 280 / 0.15);
131
+ color: oklch(0.70 0.22 280);
132
+ }
133
+ .feedback__status-badge--in-progress {
134
+ background: oklch(0.65 0.20 265 / 0.15);
135
+ color: oklch(0.65 0.20 265);
136
+ }
137
+ .feedback__status-badge--done {
138
+ background: oklch(0.72 0.18 155 / 0.15);
139
+ color: oklch(0.72 0.18 155);
140
+ }
141
+ .feedback__status-badge--declined {
142
+ background: oklch(0.50 0.10 250 / 0.15);
143
+ color: oklch(0.50 0.10 250);
144
+ }
145
+ .feedback__priority-badge {
146
+ padding: 0.125rem 0.5rem;
147
+ border-radius: 9999px;
148
+ font-size: 0.625rem;
149
+ font-weight: 500;
150
+ }
151
+ .feedback__priority-badge--low {
152
+ background: oklch(0.58 0.10 250 / 0.15);
153
+ color: oklch(0.58 0.10 250);
154
+ }
155
+ .feedback__priority-badge--medium {
156
+ background: oklch(0.72 0.18 60 / 0.15);
157
+ color: oklch(0.72 0.18 60);
158
+ }
159
+ .feedback__priority-badge--high {
160
+ background: oklch(0.68 0.22 35 / 0.15);
161
+ color: oklch(0.68 0.22 35);
162
+ }
163
+ .feedback__priority-badge--critical {
164
+ background: oklch(0.60 0.25 25 / 0.15);
165
+ color: oklch(0.60 0.25 25);
166
+ }
167
+ .feedback__type-badge {
168
+ display: inline-flex;
169
+ align-items: center;
170
+ gap: 0.25rem;
171
+ padding: 0.125rem 0.5rem;
172
+ border-radius: 9999px;
173
+ font-size: 0.625rem;
174
+ font-weight: 500;
175
+ }
176
+ .feedback__type-badge--bug {
177
+ background: oklch(0.60 0.25 25 / 0.15);
178
+ color: oklch(0.60 0.25 25);
179
+ }
180
+ .feedback__type-badge--feature {
181
+ background: oklch(0.70 0.22 280 / 0.15);
182
+ color: oklch(0.70 0.22 280);
183
+ }
184
+ .feedback__type-badge--suggestion {
185
+ background: oklch(0.72 0.18 60 / 0.15);
186
+ color: oklch(0.72 0.18 60);
187
+ }
188
+ .feedback__type-badge--general {
189
+ background: oklch(0.65 0.20 245 / 0.15);
190
+ color: oklch(0.65 0.20 245);
191
+ }
192
+ .feedback__widget-trigger {
193
+ position: fixed;
194
+ top: 50%;
195
+ right: 0;
196
+ transform: translateY(-50%);
197
+ z-index: 40;
198
+ padding: 0.5rem 1rem;
199
+ border-radius: var(--feedback-radius) 0 0 var(--feedback-radius);
200
+ background: var(--feedback-accent);
201
+ color: white;
202
+ border: none;
203
+ cursor: pointer;
204
+ writing-mode: vertical-rl;
205
+ font-size: 0.6875rem;
206
+ font-weight: 500;
207
+ letter-spacing: 0.05em;
208
+ box-shadow: -2px 0 12px oklch(0.65 0.20 265 / 0.3);
209
+ }
210
+ .feedback__widget-trigger:hover {
211
+ background: oklch(0.70 0.22 265);
212
+ }
213
+ .feedback__widget-overlay {
214
+ position: fixed;
215
+ inset: 0;
216
+ z-index: 50;
217
+ display: flex;
218
+ justify-content: flex-end;
219
+ }
220
+ .feedback__widget-backdrop {
221
+ position: absolute;
222
+ inset: 0;
223
+ background: oklch(0 0 0 / 0.5);
224
+ backdrop-filter: blur(4px);
225
+ }
226
+ .feedback__widget-panel {
227
+ position: relative;
228
+ width: 100%;
229
+ max-width: 28rem;
230
+ background: oklch(0.06 0.01 250);
231
+ border-left: 1px solid var(--feedback-border);
232
+ padding: 1.5rem;
233
+ overflow-y: auto;
234
+ }
235
+ .feedback__widget-header {
236
+ display: flex;
237
+ align-items: center;
238
+ justify-content: space-between;
239
+ margin-bottom: 1.5rem;
240
+ }
241
+ .feedback__widget-title {
242
+ font-size: 1.125rem;
243
+ font-weight: 700;
244
+ color: var(--feedback-text);
245
+ }
246
+ .feedback__form {
247
+ display: flex;
248
+ flex-direction: column;
249
+ gap: 1rem;
250
+ }
251
+ .feedback__form-input {
252
+ width: 100%;
253
+ padding: 0.75rem 1rem;
254
+ border: 1px solid var(--feedback-border);
255
+ border-radius: var(--feedback-radius);
256
+ background: oklch(1 0 0 / 0.03);
257
+ font-size: 0.875rem;
258
+ color: var(--feedback-text);
259
+ outline: none;
260
+ }
261
+ .feedback__form-input::placeholder {
262
+ color: oklch(1 0 0 / 0.3);
263
+ }
264
+ .feedback__form-input:focus {
265
+ border-color: oklch(0.65 0.20 265 / 0.4);
266
+ }
267
+ .feedback__form-textarea {
268
+ resize: none;
269
+ min-height: 6rem;
270
+ }
271
+ .feedback__form-error {
272
+ font-size: 0.6875rem;
273
+ color: oklch(0.60 0.25 25);
274
+ }
275
+ .feedback__form-actions {
276
+ display: flex;
277
+ justify-content: flex-end;
278
+ gap: 0.5rem;
279
+ }
280
+ .feedback__type-selector {
281
+ display: flex;
282
+ gap: 0.375rem;
283
+ }
284
+ .feedback__type-tab {
285
+ display: flex;
286
+ align-items: center;
287
+ gap: 0.375rem;
288
+ padding: 0.5rem 0.75rem;
289
+ border-radius: calc(var(--feedback-radius) * 0.8);
290
+ border: none;
291
+ font-size: 0.6875rem;
292
+ font-weight: 500;
293
+ cursor: pointer;
294
+ transition: all 0.15s;
295
+ }
296
+ .feedback__type-tab--inactive {
297
+ background: oklch(1 0 0 / 0.05);
298
+ color: oklch(1 0 0 / 0.5);
299
+ }
300
+ .feedback__type-tab--inactive:hover {
301
+ background: oklch(1 0 0 / 0.1);
302
+ }
303
+ .feedback__nps {
304
+ position: fixed;
305
+ bottom: 1.5rem;
306
+ right: 1.5rem;
307
+ z-index: 50;
308
+ width: 24rem;
309
+ border: 1px solid oklch(1 0 0 / 0.1);
310
+ border-radius: calc(var(--feedback-radius) * 1.5);
311
+ background: oklch(0.08 0.01 250);
312
+ padding: 1.5rem;
313
+ box-shadow: 0 8px 32px oklch(0 0 0 / 0.5);
314
+ }
315
+ .feedback__nps-header {
316
+ display: flex;
317
+ align-items: center;
318
+ justify-content: space-between;
319
+ margin-bottom: 0.25rem;
320
+ }
321
+ .feedback__nps-title {
322
+ font-size: 0.875rem;
323
+ font-weight: 600;
324
+ color: oklch(1 0 0 / 0.9);
325
+ }
326
+ .feedback__nps-subtitle {
327
+ font-size: 0.6875rem;
328
+ color: oklch(1 0 0 / 0.4);
329
+ margin-bottom: 1rem;
330
+ }
331
+ .feedback__nps-scores {
332
+ display: flex;
333
+ gap: 0.25rem;
334
+ }
335
+ .feedback__nps-score-btn {
336
+ flex: 1;
337
+ padding: 0.625rem 0;
338
+ border: none;
339
+ border-radius: calc(var(--feedback-radius) * 0.8);
340
+ background: oklch(1 0 0 / 0.05);
341
+ color: oklch(1 0 0 / 0.5);
342
+ font-size: 0.6875rem;
343
+ font-weight: 700;
344
+ cursor: pointer;
345
+ transition: all 0.15s;
346
+ }
347
+ .feedback__nps-score-btn:hover {
348
+ background: oklch(1 0 0 / 0.1);
349
+ }
350
+ .feedback__nps-labels {
351
+ display: flex;
352
+ justify-content: space-between;
353
+ margin-top: 0.5rem;
354
+ font-size: 0.625rem;
355
+ color: oklch(1 0 0 / 0.2);
356
+ }
357
+ .feedback__nps-results {
358
+ padding: 1.25rem;
359
+ border: 1px solid var(--feedback-border);
360
+ border-radius: var(--feedback-radius);
361
+ background: oklch(1 0 0 / 0.02);
362
+ }
363
+ .feedback__nps-results-score {
364
+ font-size: 1.875rem;
365
+ font-weight: 900;
366
+ font-variant-numeric: tabular-nums;
367
+ }
368
+ .feedback__nps-bar {
369
+ display: flex;
370
+ height: 1.25rem;
371
+ overflow: hidden;
372
+ border-radius: 9999px;
373
+ margin: 1rem 0;
374
+ }
375
+ .feedback__nps-bar-detractors {
376
+ background: oklch(0.60 0.25 25 / 0.7);
377
+ }
378
+ .feedback__nps-bar-passives {
379
+ background: oklch(0.72 0.18 60 / 0.7);
380
+ }
381
+ .feedback__nps-bar-promoters {
382
+ background: oklch(0.72 0.18 155 / 0.7);
383
+ }
384
+ .feedback__nps-breakdown {
385
+ display: grid;
386
+ grid-template-columns: repeat(3, 1fr);
387
+ gap: 0.5rem;
388
+ text-align: center;
389
+ font-size: 0.6875rem;
390
+ }
391
+ .feedback__board {
392
+ display: flex;
393
+ flex-direction: column;
394
+ gap: 0.625rem;
395
+ }
396
+ .feedback__admin-table {
397
+ width: 100%;
398
+ font-size: 0.875rem;
399
+ border-collapse: collapse;
400
+ }
401
+ .feedback__admin-table th {
402
+ padding: 0.75rem 1rem;
403
+ text-align: left;
404
+ font-size: 0.625rem;
405
+ font-weight: 500;
406
+ text-transform: uppercase;
407
+ letter-spacing: 0.05em;
408
+ color: oklch(1 0 0 / 0.4);
409
+ border-bottom: 1px solid oklch(1 0 0 / 0.08);
410
+ }
411
+ .feedback__admin-table td {
412
+ padding: 0.75rem 1rem;
413
+ border-bottom: 1px solid oklch(1 0 0 / 0.05);
414
+ }
415
+ .feedback__admin-table tr:hover {
416
+ background: oklch(1 0 0 / 0.02);
417
+ }
418
+ .feedback__admin-select {
419
+ padding: 0.25rem 0.5rem;
420
+ border: 1px solid var(--feedback-border);
421
+ border-radius: calc(var(--feedback-radius) * 0.6);
422
+ background: oklch(1 0 0 / 0.05);
423
+ font-size: 0.6875rem;
424
+ color: var(--feedback-text);
425
+ outline: none;
426
+ }
427
+ .feedback__stats-grid {
428
+ display: grid;
429
+ grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
430
+ gap: 1rem;
431
+ margin-bottom: 2rem;
432
+ }
433
+ .feedback__stat-card {
434
+ padding: 1rem;
435
+ border: 1px solid var(--feedback-border);
436
+ border-radius: var(--feedback-radius);
437
+ background: oklch(1 0 0 / 0.02);
438
+ }
439
+ .feedback__stat-icon {
440
+ font-size: 1.125rem;
441
+ }
442
+ .feedback__stat-value {
443
+ font-size: 1.5rem;
444
+ font-weight: 700;
445
+ font-variant-numeric: tabular-nums;
446
+ color: oklch(1 0 0 / 0.9);
447
+ }
448
+ .feedback__stat-label {
449
+ font-size: 0.6875rem;
450
+ color: oklch(1 0 0 / 0.4);
451
+ }
452
+ .feedback__search {
453
+ width: 100%;
454
+ max-width: 16rem;
455
+ padding: 0.625rem 1rem;
456
+ border: 1px solid var(--feedback-border);
457
+ border-radius: var(--feedback-radius);
458
+ background: oklch(1 0 0 / 0.03);
459
+ font-size: 0.875rem;
460
+ color: var(--feedback-text);
461
+ outline: none;
462
+ }
463
+ .feedback__search::placeholder {
464
+ color: oklch(1 0 0 / 0.3);
465
+ }
466
+ .feedback__search:focus {
467
+ border-color: oklch(0.65 0.20 265 / 0.4);
468
+ }
469
+ .feedback__filter-tabs {
470
+ display: flex;
471
+ flex-wrap: wrap;
472
+ gap: 0.375rem;
473
+ }
474
+ .feedback__filter-tab {
475
+ padding: 0.375rem 0.75rem;
476
+ border: none;
477
+ border-radius: calc(var(--feedback-radius) * 0.8);
478
+ font-size: 0.6875rem;
479
+ font-weight: 500;
480
+ cursor: pointer;
481
+ }
482
+ .feedback__filter-tab--active {
483
+ background: var(--feedback-accent);
484
+ color: white;
485
+ }
486
+ .feedback__filter-tab--inactive {
487
+ background: oklch(1 0 0 / 0.05);
488
+ color: oklch(1 0 0 / 0.5);
489
+ }
490
+ .feedback__filter-tab--inactive:hover {
491
+ background: oklch(1 0 0 / 0.1);
492
+ }
493
+ .feedback__btn {
494
+ padding: 0.5rem 1rem;
495
+ border-radius: calc(var(--feedback-radius) * 0.8);
496
+ font-size: 0.6875rem;
497
+ font-weight: 500;
498
+ cursor: pointer;
499
+ border: none;
500
+ transition: all 0.15s;
501
+ }
502
+ .feedback__btn--primary {
503
+ background: var(--feedback-accent);
504
+ color: white;
505
+ }
506
+ .feedback__btn--primary:hover {
507
+ background: oklch(0.70 0.22 265);
508
+ }
509
+ .feedback__btn--outline {
510
+ border: 1px solid var(--feedback-border);
511
+ background: transparent;
512
+ color: oklch(1 0 0 / 0.6);
513
+ }
514
+ .feedback__btn--danger {
515
+ background: oklch(0.60 0.25 25 / 0.2);
516
+ color: oklch(0.60 0.25 25);
517
+ }
518
+ .feedback__skeleton {
519
+ background: oklch(1 0 0 / 0.05);
520
+ border-radius: var(--feedback-radius);
521
+ animation: feedback-pulse 1.5s ease-in-out infinite;
522
+ }
523
+ @keyframes feedback-pulse {
524
+ 0%, 100% {
525
+ opacity: 1;
526
+ }
527
+ 50% {
528
+ opacity: 0.4;
529
+ }
530
+ }
531
+ .feedback__empty {
532
+ display: flex;
533
+ flex-direction: column;
534
+ align-items: center;
535
+ justify-content: center;
536
+ padding: 4rem 1rem;
537
+ text-align: center;
538
+ }
539
+ .feedback__empty-icon {
540
+ font-size: 3rem;
541
+ opacity: 0.2;
542
+ margin-bottom: 0.75rem;
543
+ }
544
+ .feedback__empty-text {
545
+ font-size: 0.875rem;
546
+ color: oklch(1 0 0 / 0.4);
547
+ }
548
+ .feedback__success {
549
+ display: flex;
550
+ flex-direction: column;
551
+ align-items: center;
552
+ padding: 2rem;
553
+ text-align: center;
554
+ }
555
+ .feedback__success-icon {
556
+ font-size: 2.5rem;
557
+ margin-bottom: 0.75rem;
558
+ }
559
+ .feedback__success-text {
560
+ font-size: 1rem;
561
+ font-weight: 600;
562
+ color: oklch(1 0 0 / 0.9);
563
+ margin-bottom: 0.25rem;
564
+ }
565
+ .feedback__success-sub {
566
+ font-size: 0.875rem;
567
+ color: oklch(1 0 0 / 0.5);
568
+ }
569
+ .feedback__tag {
570
+ padding: 0.125rem 0.375rem;
571
+ border-radius: 0.25rem;
572
+ background: oklch(1 0 0 / 0.05);
573
+ font-size: 0.625rem;
574
+ color: oklch(1 0 0 / 0.3);
575
+ }
576
+ .feedback__close-btn {
577
+ padding: 0.375rem;
578
+ border: none;
579
+ background: transparent;
580
+ color: oklch(1 0 0 / 0.3);
581
+ cursor: pointer;
582
+ border-radius: calc(var(--feedback-radius) * 0.6);
583
+ }
584
+ .feedback__close-btn:hover {
585
+ color: oklch(1 0 0 / 0.5);
586
+ background: oklch(1 0 0 / 0.05);
587
+ }
588
+ .feedback__comment-thread {
589
+ display: flex;
590
+ flex-direction: column;
591
+ gap: 1rem;
592
+ padding: 1rem;
593
+ border: 1px solid var(--feedback-border);
594
+ border-radius: var(--feedback-radius);
595
+ background: oklch(1 0 0 / 0.01);
596
+ }
597
+ .feedback__comment {
598
+ display: flex;
599
+ gap: 0.75rem;
600
+ }
601
+ .feedback__comment-avatar {
602
+ width: 2rem;
603
+ height: 2rem;
604
+ border-radius: 50%;
605
+ background: oklch(0.65 0.20 265 / 0.2);
606
+ display: flex;
607
+ align-items: center;
608
+ justify-content: center;
609
+ font-size: 0.875rem;
610
+ flex-shrink: 0;
611
+ }
612
+ .feedback__comment-body {
613
+ flex: 1;
614
+ }
615
+ .feedback__comment-header {
616
+ display: flex;
617
+ align-items: center;
618
+ gap: 0.5rem;
619
+ margin-bottom: 0.25rem;
620
+ }
621
+ .feedback__comment-author {
622
+ font-size: 0.75rem;
623
+ font-weight: 600;
624
+ color: oklch(1 0 0 / 0.8);
625
+ }
626
+ .feedback__comment-time {
627
+ font-size: 0.625rem;
628
+ color: oklch(1 0 0 / 0.3);
629
+ }
630
+ .feedback__comment-text {
631
+ font-size: 0.6875rem;
632
+ color: oklch(1 0 0 / 0.7);
633
+ line-height: 1.4;
634
+ }
635
+ .feedback__comment-reply-btn {
636
+ margin-top: 0.5rem;
637
+ padding: 0.25rem 0.5rem;
638
+ font-size: 0.625rem;
639
+ border: none;
640
+ background: transparent;
641
+ color: oklch(0.65 0.20 265);
642
+ cursor: pointer;
643
+ transition: all 0.1s;
644
+ }
645
+ .feedback__comment-reply-btn:hover {
646
+ color: oklch(0.70 0.22 265);
647
+ }
648
+ .feedback__rating {
649
+ display: flex;
650
+ gap: 0.25rem;
651
+ }
652
+ .feedback__rating-star {
653
+ font-size: 1.5rem;
654
+ cursor: pointer;
655
+ opacity: 0.3;
656
+ transition: all 0.15s;
657
+ }
658
+ .feedback__rating-star--filled {
659
+ opacity: 1;
660
+ color: oklch(0.72 0.18 60);
661
+ }
662
+ .feedback__rating-star:hover {
663
+ opacity: 1;
664
+ transform: scale(1.1);
665
+ }
666
+ .feedback__sentiment-card {
667
+ padding: 1rem;
668
+ border: 1px solid var(--feedback-border);
669
+ border-radius: var(--feedback-radius);
670
+ background: oklch(1 0 0 / 0.02);
671
+ text-align: center;
672
+ }
673
+ .feedback__sentiment-icon {
674
+ font-size: 2rem;
675
+ margin-bottom: 0.5rem;
676
+ }
677
+ .feedback__sentiment-label {
678
+ font-size: 0.875rem;
679
+ font-weight: 600;
680
+ color: oklch(1 0 0 / 0.8);
681
+ margin-bottom: 0.25rem;
682
+ }
683
+ .feedback__sentiment-count {
684
+ font-size: 0.6875rem;
685
+ color: oklch(1 0 0 / 0.4);
686
+ }
687
+ .feedback__response-panel {
688
+ border: 1px solid var(--feedback-border);
689
+ border-radius: var(--feedback-radius);
690
+ background: oklch(1 0 0 / 0.02);
691
+ padding: 1rem;
692
+ }
693
+ .feedback__response-header {
694
+ display: flex;
695
+ align-items: center;
696
+ justify-content: space-between;
697
+ margin-bottom: 0.75rem;
698
+ }
699
+ .feedback__response-title {
700
+ font-size: 0.875rem;
701
+ font-weight: 600;
702
+ color: oklch(1 0 0 / 0.8);
703
+ }
704
+ .feedback__response-time {
705
+ font-size: 0.625rem;
706
+ color: oklch(1 0 0 / 0.3);
707
+ }
708
+ .feedback__response-body {
709
+ font-size: 0.6875rem;
710
+ color: oklch(1 0 0 / 0.7);
711
+ line-height: 1.5;
712
+ }
713
+ .feedback__response-actions {
714
+ display: flex;
715
+ gap: 0.5rem;
716
+ margin-top: 0.75rem;
717
+ }
718
+ .feedback__response-btn {
719
+ padding: 0.25rem 0.5rem;
720
+ font-size: 0.625rem;
721
+ border: none;
722
+ background: oklch(1 0 0 / 0.05);
723
+ color: oklch(1 0 0 / 0.5);
724
+ cursor: pointer;
725
+ border-radius: calc(var(--feedback-radius) * 0.6);
726
+ transition: all 0.1s;
727
+ }
728
+ .feedback__response-btn:hover {
729
+ background: oklch(1 0 0 / 0.1);
730
+ color: oklch(1 0 0 / 0.6);
731
+ }
732
+ .feedback__analytics {
733
+ border: 1px solid var(--feedback-border);
734
+ border-radius: var(--feedback-radius);
735
+ background: oklch(1 0 0 / 0.02);
736
+ padding: 1rem;
737
+ }
738
+ .feedback__analytics-title {
739
+ font-size: 0.875rem;
740
+ font-weight: 600;
741
+ color: oklch(1 0 0 / 0.8);
742
+ margin-bottom: 1rem;
743
+ }
744
+ .feedback__analytics-chart {
745
+ display: flex;
746
+ align-items: flex-end;
747
+ gap: 0.5rem;
748
+ height: 10rem;
749
+ }
750
+ .feedback__analytics-bar {
751
+ flex: 1;
752
+ border-radius: 0.25rem 0.25rem 0 0;
753
+ background:
754
+ linear-gradient(
755
+ to top,
756
+ oklch(0.65 0.20 265),
757
+ oklch(0.65 0.20 265 / 0.4));
758
+ transition: all 0.2s;
759
+ position: relative;
760
+ }
761
+ .feedback__analytics-bar:hover {
762
+ background:
763
+ linear-gradient(
764
+ to top,
765
+ oklch(0.70 0.22 265),
766
+ oklch(0.70 0.22 265));
767
+ }
768
+ .feedback__analytics-label {
769
+ position: absolute;
770
+ bottom: -1.5rem;
771
+ left: 50%;
772
+ transform: translateX(-50%);
773
+ font-size: 0.625rem;
774
+ color: oklch(1 0 0 / 0.4);
775
+ white-space: nowrap;
776
+ }
777
+ .feedback__filter-panel {
778
+ border: 1px solid var(--feedback-border);
779
+ border-radius: var(--feedback-radius);
780
+ background: oklch(1 0 0 / 0.02);
781
+ padding: 1rem;
782
+ }
783
+ .feedback__filter-section {
784
+ margin-bottom: 1rem;
785
+ }
786
+ .feedback__filter-section:last-child {
787
+ margin-bottom: 0;
788
+ }
789
+ .feedback__filter-section-title {
790
+ font-size: 0.6875rem;
791
+ font-weight: 600;
792
+ text-transform: uppercase;
793
+ color: oklch(1 0 0 / 0.4);
794
+ margin-bottom: 0.5rem;
795
+ letter-spacing: 0.05em;
796
+ }
797
+ .feedback__filter-options {
798
+ display: flex;
799
+ flex-direction: column;
800
+ gap: 0.25rem;
801
+ }
802
+ .feedback__filter-option {
803
+ display: flex;
804
+ align-items: center;
805
+ gap: 0.5rem;
806
+ padding: 0.25rem 0;
807
+ font-size: 0.6875rem;
808
+ }
809
+ .feedback__filter-option input {
810
+ cursor: pointer;
811
+ }
812
+ .feedback__filter-option-label {
813
+ color: oklch(1 0 0 / 0.7);
814
+ cursor: pointer;
815
+ }
816
+ .feedback__tag-selector {
817
+ padding: 1rem;
818
+ border: 1px solid var(--feedback-border);
819
+ border-radius: var(--feedback-radius);
820
+ background: oklch(1 0 0 / 0.02);
821
+ }
822
+ .feedback__tag-selector-label {
823
+ display: block;
824
+ font-size: 0.6875rem;
825
+ font-weight: 500;
826
+ color: oklch(1 0 0 / 0.6);
827
+ margin-bottom: 0.5rem;
828
+ text-transform: uppercase;
829
+ }
830
+ .feedback__tag-list {
831
+ display: flex;
832
+ flex-wrap: wrap;
833
+ gap: 0.5rem;
834
+ }
835
+ .feedback__tag-item {
836
+ display: inline-flex;
837
+ align-items: center;
838
+ gap: 0.25rem;
839
+ padding: 0.375rem 0.75rem;
840
+ border-radius: 9999px;
841
+ background: oklch(0.65 0.20 265 / 0.15);
842
+ color: oklch(0.65 0.20 265);
843
+ font-size: 0.6875rem;
844
+ font-weight: 500;
845
+ }
846
+ .feedback__tag-remove {
847
+ margin-left: 0.25rem;
848
+ cursor: pointer;
849
+ font-weight: 700;
850
+ opacity: 0.6;
851
+ transition: opacity 0.1s;
852
+ }
853
+ .feedback__tag-remove:hover {
854
+ opacity: 1;
855
+ }
856
+ .feedback__form-footer {
857
+ display: flex;
858
+ justify-content: space-between;
859
+ align-items: center;
860
+ padding-top: 1rem;
861
+ border-top: 1px solid var(--feedback-border);
862
+ }
863
+ .feedback__form-counter {
864
+ font-size: 0.625rem;
865
+ color: oklch(1 0 0 / 0.3);
866
+ }
867
+ .feedback__form-actions-group {
868
+ display: flex;
869
+ gap: 0.5rem;
870
+ }
871
+ .feedback__status-indicator {
872
+ display: inline-flex;
873
+ align-items: center;
874
+ gap: 0.375rem;
875
+ padding: 0.375rem 0.75rem;
876
+ border-radius: 9999px;
877
+ font-size: 0.625rem;
878
+ font-weight: 500;
879
+ }
880
+ .feedback__status-indicator--new {
881
+ background: oklch(0.65 0.20 245 / 0.15);
882
+ color: oklch(0.65 0.20 245);
883
+ }
884
+ .feedback__status-indicator--in-review {
885
+ background: oklch(0.72 0.18 60 / 0.15);
886
+ color: oklch(0.72 0.18 60);
887
+ }
888
+ .feedback__status-indicator--implemented {
889
+ background: oklch(0.72 0.18 155 / 0.15);
890
+ color: oklch(0.72 0.18 155);
891
+ }
892
+ .feedback__detailed-stats {
893
+ display: grid;
894
+ grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
895
+ gap: 0.5rem;
896
+ }
897
+ .feedback__detailed-stat-item {
898
+ padding: 0.75rem;
899
+ border: 1px solid var(--feedback-border);
900
+ border-radius: var(--feedback-radius);
901
+ background: oklch(1 0 0 / 0.01);
902
+ text-align: center;
903
+ }
904
+ .feedback__detailed-stat-icon {
905
+ font-size: 1.25rem;
906
+ margin-bottom: 0.25rem;
907
+ }
908
+ .feedback__detailed-stat-value {
909
+ font-size: 1rem;
910
+ font-weight: 700;
911
+ color: oklch(1 0 0 / 0.9);
912
+ }
913
+ .feedback__detailed-stat-label {
914
+ font-size: 0.625rem;
915
+ color: oklch(1 0 0 / 0.4);
916
+ margin-top: 0.25rem;
917
+ }
918
+ .feedback__breadcrumb {
919
+ display: flex;
920
+ align-items: center;
921
+ gap: 0.5rem;
922
+ font-size: 0.875rem;
923
+ margin-bottom: 1rem;
924
+ }
925
+ .feedback__breadcrumb-item {
926
+ color: oklch(1 0 0 / 0.5);
927
+ }
928
+ .feedback__breadcrumb-item--active {
929
+ color: oklch(1 0 0 / 0.8);
930
+ font-weight: 500;
931
+ }
932
+ .feedback__breadcrumb-sep {
933
+ color: oklch(1 0 0 / 0.2);
934
+ margin: 0 0.25rem;
935
+ }
936
+ .feedback__pagination {
937
+ display: flex;
938
+ align-items: center;
939
+ gap: 0.5rem;
940
+ justify-content: center;
941
+ padding: 1rem;
942
+ }
943
+ .feedback__pagination-btn {
944
+ padding: 0.375rem 0.75rem;
945
+ border: 1px solid var(--feedback-border);
946
+ border-radius: calc(var(--feedback-radius) * 0.6);
947
+ background: oklch(1 0 0 / 0.05);
948
+ color: oklch(1 0 0 / 0.6);
949
+ font-size: 0.6875rem;
950
+ cursor: pointer;
951
+ transition: all 0.1s;
952
+ }
953
+ .feedback__pagination-btn:hover:not(:disabled) {
954
+ background: oklch(1 0 0 / 0.1);
955
+ color: oklch(1 0 0 / 0.8);
956
+ }
957
+ .feedback__pagination-btn:disabled {
958
+ opacity: 0.5;
959
+ cursor: not-allowed;
960
+ }
961
+ .feedback__pagination-info {
962
+ font-size: 0.6875rem;
963
+ color: oklch(1 0 0 / 0.5);
964
+ }
965
+ /*# sourceMappingURL=index.css.map */