@lumen-stack/react 0.8.2 → 0.9.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/dist/styles.css CHANGED
@@ -13,15 +13,19 @@
13
13
  --lumen-s-5: 24px;
14
14
  --lumen-s-6: 32px;
15
15
 
16
- /* Radii */
17
- --lumen-r-sm: 6px;
18
- --lumen-r-md: 10px;
19
- --lumen-r-lg: 14px;
16
+ /* Radii — derived from one themeable base so the dashboard's corner-radius
17
+ * control (which sets --lumen-radius) scales the whole widget. At the 10px
18
+ * default this reproduces the original 6 / 10 / 14 scale exactly. */
19
+ --lumen-radius: 10px;
20
+ --lumen-r-sm: max(0px, calc(var(--lumen-radius) - 4px));
21
+ --lumen-r-md: var(--lumen-radius);
22
+ --lumen-r-lg: calc(var(--lumen-radius) + 4px);
20
23
 
21
24
  /* Type */
22
25
  --lumen-font-ui:
23
26
  "Inter var", "Inter", -apple-system, BlinkMacSystemFont, "SF Pro Text",
24
27
  "Segoe UI", Roboto, ui-sans-serif, system-ui, sans-serif;
28
+ --lumen-fs-11: 11px;
25
29
  --lumen-fs-12: 12px;
26
30
  --lumen-fs-13: 13px;
27
31
  --lumen-fs-14: 14px;
@@ -43,10 +47,16 @@
43
47
  --lumen-fg-subtle: #71717a;
44
48
  --lumen-border: #26262a;
45
49
  --lumen-border-strong: #3f3f46;
46
- --lumen-accent: #fafafa;
47
- --lumen-accent-fg: #0a0a0b;
50
+ /* Brand accent — International Klein Blue, shared with the marketing site
51
+ * (apps/web/app/lp.css `.lp-root --blue`). Same value in light + dark so a
52
+ * CTA reads as Lumen-blue regardless of the host scheme. The hex line is a
53
+ * fallback for engines without oklch(); modern browsers take the oklch. */
54
+ --lumen-accent: #3a2fe6;
55
+ --lumen-accent: oklch(0.4550 0.3000 264);
56
+ --lumen-accent-fg: #ffffff;
57
+ --lumen-mark: oklch(0.8800 0.1650 93);
48
58
  --lumen-danger: #ef4444;
49
- --lumen-focus-ring: rgb(96 165 250 / 0.6);
59
+ --lumen-focus-ring: oklch(0.4550 0.3000 264 / 0.55);
50
60
  --lumen-shadow-sm: 0 1px 2px rgb(0 0 0 / 0.4);
51
61
  --lumen-shadow-lg: 0 24px 64px -12px rgb(0 0 0 / 0.7),
52
62
  0 1px 0 rgb(255 255 255 / 0.04) inset;
@@ -55,7 +65,6 @@
55
65
  --lumen-primary: var(--lumen-accent);
56
66
  --lumen-primary-fg: var(--lumen-accent-fg);
57
67
  --lumen-muted: var(--lumen-fg-muted);
58
- --lumen-radius: var(--lumen-r-md);
59
68
  --lumen-shadow: var(--lumen-shadow-lg);
60
69
  }
61
70
 
@@ -70,7 +79,9 @@
70
79
  --lumen-fg-subtle: #a1a1aa;
71
80
  --lumen-border: #e4e4e7;
72
81
  --lumen-border-strong: #d4d4d8;
73
- --lumen-accent: #0a0a0b;
82
+ /* Accent stays Klein blue in light mode too (brand-consistent CTA). */
83
+ --lumen-accent: #3a2fe6;
84
+ --lumen-accent: oklch(0.4550 0.3000 264);
74
85
  --lumen-accent-fg: #ffffff;
75
86
  --lumen-shadow-sm: 0 1px 2px rgb(0 0 0 / 0.06);
76
87
  --lumen-shadow-lg: 0 24px 64px -12px rgb(0 0 0 / 0.18);
@@ -87,8 +98,9 @@
87
98
  --lumen-fg-subtle: #71717a;
88
99
  --lumen-border: #26262a;
89
100
  --lumen-border-strong: #3f3f46;
90
- --lumen-accent: #fafafa;
91
- --lumen-accent-fg: #0a0a0b;
101
+ --lumen-accent: #3a2fe6;
102
+ --lumen-accent: oklch(0.4550 0.3000 264);
103
+ --lumen-accent-fg: #ffffff;
92
104
  --lumen-shadow-sm: 0 1px 2px rgb(0 0 0 / 0.4);
93
105
  --lumen-shadow-lg: 0 24px 64px -12px rgb(0 0 0 / 0.7),
94
106
  0 1px 0 rgb(255 255 255 / 0.04) inset;
@@ -103,7 +115,8 @@
103
115
  --lumen-fg-subtle: #a1a1aa;
104
116
  --lumen-border: #e4e4e7;
105
117
  --lumen-border-strong: #d4d4d8;
106
- --lumen-accent: #0a0a0b;
118
+ --lumen-accent: #3a2fe6;
119
+ --lumen-accent: oklch(0.4550 0.3000 264);
107
120
  --lumen-accent-fg: #ffffff;
108
121
  --lumen-shadow-sm: 0 1px 2px rgb(0 0 0 / 0.06);
109
122
  --lumen-shadow-lg: 0 24px 64px -12px rgb(0 0 0 / 0.18);
@@ -123,7 +136,8 @@
123
136
  padding: 8px 14px;
124
137
  font-family: var(--lumen-font-ui);
125
138
  font-size: var(--lumen-fs-13);
126
- font-weight: 500;
139
+ font-weight: 600;
140
+ letter-spacing: -0.005em;
127
141
  line-height: var(--lumen-lh-tight);
128
142
  cursor: pointer;
129
143
  transition:
@@ -340,6 +354,8 @@
340
354
  position: relative;
341
355
  background: var(--lumen-bg);
342
356
  color: var(--lumen-fg);
357
+ /* Match the marketing site's editorial tracking (.lp-root). */
358
+ letter-spacing: -0.008em;
343
359
  width: 100%;
344
360
  max-width: 100%;
345
361
  max-height: 92dvh;
@@ -429,9 +445,9 @@
429
445
  display: inline-flex;
430
446
  align-items: center;
431
447
  gap: 8px;
432
- font-size: var(--lumen-fs-14);
448
+ font-size: 15px;
433
449
  font-weight: 600;
434
- letter-spacing: -0.005em;
450
+ letter-spacing: -0.01em;
435
451
  margin: 0;
436
452
  color: var(--lumen-fg);
437
453
  }
@@ -439,7 +455,7 @@
439
455
  width: 8px;
440
456
  height: 8px;
441
457
  border-radius: 2px;
442
- background: var(--lumen-fg);
458
+ background: var(--lumen-accent);
443
459
  transform: rotate(45deg);
444
460
  }
445
461
  .lumen-icon-btn {
@@ -1130,19 +1146,19 @@ textarea.lumen-input { resize: vertical; min-height: 76px; }
1130
1146
  position: absolute;
1131
1147
  inset: 0;
1132
1148
  width: 0;
1133
- background: var(--lumen-fg);
1149
+ background: var(--lumen-accent);
1134
1150
  transition: width var(--lumen-dur) var(--lumen-ease);
1135
1151
  }
1136
1152
  .lumen-step-done .lumen-step-num {
1137
- background: var(--lumen-fg);
1153
+ background: var(--lumen-accent);
1138
1154
  color: var(--lumen-accent-fg);
1139
- border-color: var(--lumen-fg);
1155
+ border-color: var(--lumen-accent);
1140
1156
  }
1141
1157
  .lumen-step-done .lumen-step-lbl { color: var(--lumen-fg-muted); }
1142
1158
  .lumen-step-done .lumen-step-bar::after { width: 100%; }
1143
1159
  .lumen-step-active .lumen-step-num {
1144
- border-color: var(--lumen-fg);
1145
- color: var(--lumen-fg);
1160
+ border-color: var(--lumen-accent);
1161
+ color: var(--lumen-accent);
1146
1162
  box-shadow: 0 0 0 3px var(--lumen-focus-ring);
1147
1163
  }
1148
1164
  .lumen-step-active .lumen-step-lbl { color: var(--lumen-fg); font-weight: 500; }
@@ -1196,10 +1212,12 @@ textarea.lumen-input { resize: vertical; min-height: 76px; }
1196
1212
  margin-left: auto;
1197
1213
  flex: none;
1198
1214
  font-size: 10px;
1215
+ font-weight: 600;
1199
1216
  text-transform: uppercase;
1200
1217
  letter-spacing: 0.06em;
1201
- color: var(--lumen-fg-subtle);
1202
- border: 1px solid var(--lumen-border);
1218
+ color: var(--lumen-accent);
1219
+ background: color-mix(in oklab, var(--lumen-accent) 10%, transparent);
1220
+ border: 1px solid color-mix(in oklab, var(--lumen-accent) 30%, transparent);
1203
1221
  border-radius: 999px;
1204
1222
  padding: 3px 9px;
1205
1223
  }
@@ -1289,6 +1307,52 @@ textarea.lumen-input { resize: vertical; min-height: 76px; }
1289
1307
  }
1290
1308
  .lumen-cap-note { font-size: var(--lumen-fs-12); color: var(--lumen-fg-subtle); }
1291
1309
 
1310
+ /* Voice note, capture-step variant — record the moment the bug is still on
1311
+ * screen. Shares the audio-row states with the describe step; the wrapper
1312
+ * gives it a branded affordance + an in-context hint. */
1313
+ .lumen-voice-capture {
1314
+ display: flex;
1315
+ flex-direction: column;
1316
+ gap: 6px;
1317
+ padding: 8px 16px 4px;
1318
+ }
1319
+ .lumen-voice-capture-btn {
1320
+ align-self: flex-start;
1321
+ display: inline-flex;
1322
+ align-items: center;
1323
+ gap: 8px;
1324
+ appearance: none;
1325
+ cursor: pointer;
1326
+ font: inherit;
1327
+ font-size: var(--lumen-fs-13);
1328
+ font-weight: 600;
1329
+ letter-spacing: -0.005em;
1330
+ color: var(--lumen-accent);
1331
+ background: color-mix(in oklab, var(--lumen-accent) 10%, transparent);
1332
+ border: 1px solid color-mix(in oklab, var(--lumen-accent) 32%, transparent);
1333
+ border-radius: 999px;
1334
+ padding: 8px 14px;
1335
+ transition: background-color var(--lumen-dur-fast) var(--lumen-ease),
1336
+ border-color var(--lumen-dur-fast) var(--lumen-ease),
1337
+ transform var(--lumen-dur-fast) var(--lumen-ease);
1338
+ -webkit-tap-highlight-color: transparent;
1339
+ }
1340
+ .lumen-voice-capture-btn svg { width: 16px; height: 16px; }
1341
+ .lumen-voice-capture-btn:hover:not(:disabled) {
1342
+ background: color-mix(in oklab, var(--lumen-accent) 16%, transparent);
1343
+ border-color: color-mix(in oklab, var(--lumen-accent) 45%, transparent);
1344
+ transform: translateY(-0.5px);
1345
+ }
1346
+ .lumen-voice-capture-btn:focus-visible {
1347
+ outline: 2px solid var(--lumen-focus-ring);
1348
+ outline-offset: 2px;
1349
+ }
1350
+ .lumen-voice-capture-hint {
1351
+ margin: 0;
1352
+ font-size: var(--lumen-fs-12);
1353
+ color: var(--lumen-fg-subtle);
1354
+ }
1355
+
1292
1356
  /* ─── Wizard: step 3 review ──────────────────────────────────────────── */
1293
1357
  .lumen-review { padding: 8px 16px 16px; }
1294
1358
  .lumen-review-row {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lumen-stack/react",
3
- "version": "0.8.2",
3
+ "version": "0.9.0",
4
4
  "description": "React SDK for Lumen — screenshot capture, annotation, and feedback widget.",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
@@ -39,7 +39,7 @@
39
39
  "react-dom": ">=18"
40
40
  },
41
41
  "dependencies": {
42
- "@lumen-stack/core": "^0.8.0",
42
+ "@lumen-stack/core": "^0.9.0",
43
43
  "html2canvas-pro": "^1.5.8",
44
44
  "sonner": "^1.7.1"
45
45
  },