@authhero/widget 0.4.1 → 0.6.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 (39) hide show
  1. package/README.md +21 -1
  2. package/dist/authhero-widget/authhero-widget.esm.js +1 -1
  3. package/dist/authhero-widget/index.esm.js +1 -1
  4. package/dist/authhero-widget/p-7989dabd.entry.js +1 -0
  5. package/dist/authhero-widget/{p-Doiemx6o.js → p-bMtPc5Dm.js} +1 -1
  6. package/dist/authhero-widget/p-fa60ab6e.entry.js +1 -0
  7. package/dist/cjs/authhero-node.cjs.entry.js +97 -9
  8. package/dist/cjs/authhero-widget.cjs.entry.js +82 -18
  9. package/dist/cjs/authhero-widget.cjs.js +2 -2
  10. package/dist/cjs/{index-D0xitTOL.js → index-Db4bZu99.js} +28 -3
  11. package/dist/cjs/index.cjs.js +1 -1
  12. package/dist/cjs/loader.cjs.js +2 -2
  13. package/dist/collection/components/authhero-node/authhero-node.css +237 -94
  14. package/dist/collection/components/authhero-node/authhero-node.js +101 -8
  15. package/dist/collection/components/authhero-widget/authhero-widget.css +128 -70
  16. package/dist/collection/components/authhero-widget/authhero-widget.js +30 -5
  17. package/dist/collection/utils/branding.js +52 -13
  18. package/dist/components/authhero-node.js +1 -1
  19. package/dist/components/authhero-widget.js +1 -1
  20. package/dist/components/index.js +1 -1
  21. package/dist/components/p-pupmqprs.js +1 -0
  22. package/dist/components/p-uIy4ySa4.js +1 -0
  23. package/dist/esm/authhero-node.entry.js +97 -9
  24. package/dist/esm/authhero-widget.entry.js +82 -18
  25. package/dist/esm/authhero-widget.js +3 -3
  26. package/dist/esm/{index-Doiemx6o.js → index-bMtPc5Dm.js} +28 -3
  27. package/dist/esm/index.js +1 -1
  28. package/dist/esm/loader.js +3 -3
  29. package/dist/types/components/authhero-node/authhero-node.d.ts +14 -1
  30. package/dist/types/components/authhero-widget/authhero-widget.d.ts +8 -0
  31. package/hydrate/index.js +207 -29
  32. package/hydrate/index.mjs +207 -29
  33. package/package.json +10 -4
  34. package/dist/authhero-widget/p-2e93c814.entry.js +0 -1
  35. package/dist/authhero-widget/p-539fc666.entry.js +0 -1
  36. package/dist/collection/server/index.js +0 -453
  37. package/dist/components/p-086EZrPM.js +0 -1
  38. package/dist/components/p-DS6y_iDJ.js +0 -1
  39. package/dist/types/server/index.d.ts +0 -85
@@ -1,7 +1,8 @@
1
1
  /**
2
2
  * AuthHero Node Component Styles
3
3
  *
4
- * Uses CSS custom properties from themes/variables.css
4
+ * Pixel-perfect Auth0 Universal Login compatibility
5
+ * Uses CSS custom properties for theming
5
6
  * Exposes CSS parts for external styling via ::part()
6
7
  */
7
8
 
@@ -10,89 +11,183 @@
10
11
  }
11
12
 
12
13
  /* ==========================================================================
13
- Input Wrapper
14
+ Input Wrapper - Floating Label Style
14
15
  Part: input-wrapper
15
16
  ========================================================================== */
16
17
 
17
18
  .input-wrapper {
18
19
  display: flex;
19
20
  flex-direction: column;
20
- gap: var(--ah-space-1, 0.25rem);
21
+ position: relative;
22
+ margin-bottom: 16px;
23
+ }
24
+
25
+ /* Floating label container */
26
+ .input-container {
27
+ position: relative;
28
+ width: 100%;
21
29
  }
22
30
 
23
31
  /* ==========================================================================
24
- Labels
32
+ Floating Labels
25
33
  Part: label
26
34
  ========================================================================== */
27
35
 
28
36
  .input-label {
29
- font-size: var(--ah-font-size-sm, 0.875rem);
30
- font-weight: var(--ah-font-weight-medium, 500);
31
- color: var(--ah-color-text-label, #374151);
32
- line-height: var(--ah-line-height-normal, 1.5);
37
+ position: absolute;
38
+ left: 16px;
39
+ top: 50%;
40
+ transform: translateY(-50%);
41
+ font-size: 16px;
42
+ font-weight: var(--ah-font-weight-label, 400);
43
+ color: var(--ah-color-text-muted, #65676e);
44
+ pointer-events: none;
45
+ transition: all 0.15s ease-out;
46
+ background-color: transparent;
47
+ padding: 0;
48
+ z-index: 1;
49
+ }
50
+
51
+ .input-label.floating,
52
+ .input-field:focus + .input-label,
53
+ .input-field:not(:placeholder-shown) + .input-label {
54
+ top: -8px;
55
+ transform: translateY(0);
56
+ font-size: 12px;
57
+ background-color: var(--ah-color-bg, #ffffff);
58
+ padding: 0 4px;
59
+ left: 12px;
60
+ color: var(--ah-color-text-muted, #65676e);
61
+ }
62
+
63
+ .input-field:focus + .input-label {
64
+ color: var(--ah-color-primary, #635dff);
33
65
  }
34
66
 
35
67
  .required {
36
- color: var(--ah-color-error, #dc2626);
37
- margin-left: var(--ah-space-1, 0.25rem);
68
+ color: var(--ah-color-error, #d03c38);
69
+ margin-left: 2px;
38
70
  }
39
71
 
40
72
  /* ==========================================================================
41
- Text Inputs
73
+ Text Inputs - Auth0 Style
42
74
  Part: input
43
75
  ========================================================================== */
44
76
 
45
77
  .input-field {
46
- padding: var(--ah-input-padding-y, 0.75rem) var(--ah-input-padding-x, 1rem);
47
- font-size: var(--ah-font-size-base, 1rem);
78
+ width: 100%;
79
+ padding: 16px;
80
+ font-size: 16px;
48
81
  font-family: inherit;
49
- color: var(--ah-color-text, #1f2937);
50
- background-color: var(--ah-color-bg, #ffffff);
51
- border: var(--ah-input-border-width, 1px) solid var(--ah-color-border, #d1d5db);
52
- border-radius: var(--ah-input-radius, 6px);
82
+ color: var(--ah-color-text, #1e212a);
83
+ background-color: var(--ah-color-input-bg, #ffffff);
84
+ border: 1px solid var(--ah-color-border, #c9cace);
85
+ border-radius: var(--ah-input-radius, 3px);
53
86
  outline: none;
54
- transition: border-color var(--ah-transition-base, 200ms ease),
55
- box-shadow var(--ah-transition-base, 200ms ease);
87
+ transition: border-color 0.15s ease-out, box-shadow 0.15s ease-out;
88
+ box-sizing: border-box;
56
89
  }
57
90
 
58
91
  .input-field::placeholder {
59
- color: var(--ah-color-text-muted, #9ca3af);
92
+ color: transparent;
93
+ }
94
+
95
+ .input-field:hover {
96
+ border-color: var(--ah-color-border-hover, #65676e);
60
97
  }
61
98
 
62
99
  .input-field:focus {
63
- border-color: var(--ah-color-primary, #0066cc);
64
- box-shadow: 0 0 0 3px var(--ah-color-primary-focus-ring, rgba(0, 102, 204, 0.1));
100
+ border-color: var(--ah-color-primary, #635dff);
101
+ box-shadow: inset 0 0 0 1px var(--ah-color-primary, #635dff);
65
102
  }
66
103
 
67
104
  .input-field.has-error {
68
- border-color: var(--ah-color-error, #dc2626);
105
+ border-color: var(--ah-color-error, #d03c38);
69
106
  }
70
107
 
71
108
  .input-field.has-error:focus {
72
- box-shadow: 0 0 0 3px rgba(220, 38, 38, 0.1);
109
+ box-shadow: inset 0 0 0 1px var(--ah-color-error, #d03c38);
73
110
  }
74
111
 
75
112
  .input-field:disabled {
76
- background-color: var(--ah-color-bg-disabled, #f3f4f6);
113
+ background-color: var(--ah-color-bg-disabled, #f5f5f5);
114
+ border-color: var(--ah-color-border-disabled, #e0e1e3);
77
115
  cursor: not-allowed;
78
116
  opacity: 0.7;
79
117
  }
80
118
 
119
+ /* Password field with toggle button */
120
+ .password-container {
121
+ position: relative;
122
+ display: flex;
123
+ align-items: center;
124
+ }
125
+
126
+ .password-container .input-field {
127
+ padding-right: 48px;
128
+ }
129
+
130
+ .password-toggle {
131
+ position: absolute;
132
+ right: 12px;
133
+ top: 50%;
134
+ transform: translateY(-50%);
135
+ background: none;
136
+ border: none;
137
+ cursor: pointer;
138
+ padding: 4px;
139
+ display: flex;
140
+ align-items: center;
141
+ justify-content: center;
142
+ color: var(--ah-color-text-muted, #65676e);
143
+ transition: color 0.15s ease;
144
+ }
145
+
146
+ .password-toggle:hover {
147
+ color: var(--ah-color-text, #1e212a);
148
+ }
149
+
150
+ .password-toggle svg {
151
+ width: 20px;
152
+ height: 20px;
153
+ }
154
+
81
155
  /* ==========================================================================
82
156
  Helper & Error Text
83
157
  Part: helper-text, error-text
84
158
  ========================================================================== */
85
159
 
86
160
  .error-text {
87
- font-size: var(--ah-font-size-xs, 0.75rem);
88
- color: var(--ah-color-error, #dc2626);
89
- margin-top: var(--ah-space-1, 0.25rem);
161
+ font-size: 12px;
162
+ color: var(--ah-color-error, #d03c38);
163
+ margin-top: 4px;
164
+ line-height: 1.4;
90
165
  }
91
166
 
92
167
  .helper-text {
93
- font-size: var(--ah-font-size-xs, 0.75rem);
94
- color: var(--ah-color-text-muted, #6b7280);
95
- margin-top: var(--ah-space-1, 0.25rem);
168
+ font-size: 12px;
169
+ color: var(--ah-color-text-muted, #65676e);
170
+ margin-top: 4px;
171
+ line-height: 1.4;
172
+ }
173
+
174
+ /* Inline link (e.g., "Forgot password?") */
175
+ .field-link {
176
+ display: block;
177
+ text-align: left;
178
+ margin-top: 8px;
179
+ margin-bottom: 16px;
180
+ }
181
+
182
+ .field-link a {
183
+ color: var(--ah-color-link, #635dff);
184
+ text-decoration: var(--ah-link-decoration, none);
185
+ font-size: 14px;
186
+ font-weight: var(--ah-font-weight-link, 400);
187
+ }
188
+
189
+ .field-link a:hover {
190
+ text-decoration: underline;
96
191
  }
97
192
 
98
193
  /* ==========================================================================
@@ -103,26 +198,28 @@
103
198
  .checkbox-wrapper {
104
199
  display: flex;
105
200
  align-items: flex-start;
106
- gap: var(--ah-space-2, 0.5rem);
201
+ gap: 10px;
107
202
  cursor: pointer;
203
+ margin-bottom: 16px;
108
204
  }
109
205
 
110
206
  .checkbox-wrapper input[type='checkbox'] {
111
- width: 1rem;
112
- height: 1rem;
113
- margin-top: 0.125rem;
114
- accent-color: var(--ah-color-primary, #0066cc);
207
+ width: 18px;
208
+ height: 18px;
209
+ margin: 0;
210
+ accent-color: var(--ah-color-primary, #635dff);
115
211
  cursor: pointer;
212
+ flex-shrink: 0;
116
213
  }
117
214
 
118
215
  .checkbox-label {
119
- font-size: var(--ah-font-size-sm, 0.875rem);
120
- color: var(--ah-color-text-label, #374151);
121
- line-height: var(--ah-line-height-normal, 1.5);
216
+ font-size: 14px;
217
+ color: var(--ah-color-text, #1e212a);
218
+ line-height: 1.5;
122
219
  }
123
220
 
124
221
  /* ==========================================================================
125
- Buttons
222
+ Buttons - Auth0 Style
126
223
  Part: button, button-primary, button-secondary
127
224
  ========================================================================== */
128
225
 
@@ -130,21 +227,20 @@
130
227
  display: inline-flex;
131
228
  align-items: center;
132
229
  justify-content: center;
133
- gap: var(--ah-space-2, 0.5rem);
230
+ gap: 10px;
134
231
  width: 100%;
135
- padding: var(--ah-btn-padding-y, 0.875rem) var(--ah-btn-padding-x, 1.5rem);
136
- font-size: var(--ah-font-size-base, 1rem);
137
- font-weight: var(--ah-btn-font-weight, 500);
232
+ padding: 14px 20px;
233
+ font-size: 16px;
234
+ font-weight: var(--ah-font-weight-btn, 400);
138
235
  font-family: inherit;
139
- line-height: var(--ah-line-height-tight, 1.25);
236
+ line-height: 1.25;
140
237
  text-align: center;
141
238
  text-decoration: none;
142
239
  border: none;
143
- border-radius: var(--ah-btn-radius, 8px);
240
+ border-radius: var(--ah-btn-radius, 3px);
144
241
  cursor: pointer;
145
- transition: background-color var(--ah-transition-base, 200ms ease),
146
- transform var(--ah-transition-fast, 150ms ease),
147
- box-shadow var(--ah-transition-base, 200ms ease);
242
+ transition: background-color 0.15s ease, border-color 0.15s ease, transform 0.1s ease;
243
+ box-sizing: border-box;
148
244
  }
149
245
 
150
246
  .btn:disabled {
@@ -157,30 +253,73 @@
157
253
  }
158
254
 
159
255
  .btn:focus-visible {
160
- outline: 2px solid var(--ah-color-primary, #0066cc);
256
+ outline: 2px solid var(--ah-color-primary, #635dff);
161
257
  outline-offset: 2px;
162
258
  }
163
259
 
164
260
  /* Primary Button */
165
261
  .btn-primary {
166
- background-color: var(--ah-color-primary, #0066cc);
262
+ background-color: var(--ah-color-primary, #635dff);
167
263
  color: var(--ah-color-text-on-primary, #ffffff);
264
+ margin-top: 8px;
168
265
  }
169
266
 
170
267
  .btn-primary:not(:disabled):hover {
171
- background-color: var(--ah-color-primary-hover, #0052a3);
268
+ background-color: var(--ah-color-primary-hover);
269
+ filter: brightness(0.9);
172
270
  }
173
271
 
174
- /* Secondary Button (OIDC/Social) */
272
+ /* Secondary Button (Social/OIDC) */
175
273
  .btn-secondary {
176
274
  background-color: var(--ah-color-bg, #ffffff);
177
- color: var(--ah-color-text, #374151);
178
- border: 1px solid var(--ah-color-border-muted, #e5e7eb);
275
+ color: var(--ah-color-text, #1e212a);
276
+ border: 1px solid var(--ah-color-border, #c9cace);
179
277
  }
180
278
 
181
279
  .btn-secondary:not(:disabled):hover {
182
- background-color: var(--ah-color-bg-muted, #f9fafb);
183
- border-color: var(--ah-color-border, #d1d5db);
280
+ background-color: var(--ah-color-bg-hover, #f5f5f5);
281
+ border-color: var(--ah-color-border-hover, #65676e);
282
+ }
283
+
284
+ /* Link Button */
285
+ .btn-link {
286
+ background: none;
287
+ border: none;
288
+ color: var(--ah-color-link, #635dff);
289
+ padding: 8px 0;
290
+ font-weight: var(--ah-font-weight-link, 400);
291
+ text-decoration: none;
292
+ }
293
+
294
+ .btn-link:hover {
295
+ text-decoration: underline;
296
+ }
297
+
298
+ /* Social button */
299
+ .btn-social {
300
+ display: flex;
301
+ align-items: center;
302
+ justify-content: center;
303
+ gap: 12px;
304
+ }
305
+
306
+ /* Social button icon */
307
+ .social-icon {
308
+ width: 20px;
309
+ height: 20px;
310
+ flex-shrink: 0;
311
+ }
312
+
313
+ .btn-icon {
314
+ width: 20px;
315
+ height: 20px;
316
+ flex-shrink: 0;
317
+ }
318
+
319
+ .btn-icon img {
320
+ width: 100%;
321
+ height: 100%;
322
+ object-fit: contain;
184
323
  }
185
324
 
186
325
  /* ==========================================================================
@@ -189,22 +328,22 @@
189
328
  ========================================================================== */
190
329
 
191
330
  .text-title {
192
- font-size: var(--ah-font-size-xl, 1.25rem);
193
- font-weight: var(--ah-font-weight-semibold, 600);
194
- color: var(--ah-color-text, #1f2937);
195
- margin: var(--ah-space-2, 0.5rem) 0;
196
- line-height: var(--ah-line-height-tight, 1.25);
331
+ font-size: 20px;
332
+ font-weight: 400;
333
+ color: var(--ah-color-text, #1e212a);
334
+ margin: 8px 0;
335
+ line-height: 1.3;
197
336
  }
198
337
 
199
338
  .text-title.text-success {
200
- color: var(--ah-color-success, #16a34a);
339
+ color: var(--ah-color-success, #13a769);
201
340
  }
202
341
 
203
342
  .text-description {
204
- font-size: var(--ah-font-size-sm, 0.875rem);
205
- color: var(--ah-color-text-muted, #6b7280);
206
- margin: var(--ah-space-1, 0.25rem) 0;
207
- line-height: var(--ah-line-height-normal, 1.5);
343
+ font-size: 14px;
344
+ color: var(--ah-color-text-muted, #65676e);
345
+ margin: 4px 0;
346
+ line-height: 1.5;
208
347
  }
209
348
 
210
349
  /* ==========================================================================
@@ -216,13 +355,13 @@
216
355
  display: block;
217
356
  max-width: 100%;
218
357
  height: auto;
219
- border-radius: var(--ah-radius-lg, 8px);
358
+ border-radius: 4px;
220
359
  }
221
360
 
222
361
  .image-centered {
223
- margin: 0 auto var(--ah-space-4, 1rem);
224
- width: var(--ah-logo-size, 48px);
225
- height: var(--ah-logo-size, 48px);
362
+ margin: 0 auto 16px;
363
+ width: 52px;
364
+ height: 52px;
226
365
  object-fit: contain;
227
366
  }
228
367
 
@@ -232,10 +371,10 @@
232
371
  ========================================================================== */
233
372
 
234
373
  .link {
235
- color: var(--ah-color-primary, #0066cc);
236
- text-decoration: none;
237
- font-size: var(--ah-font-size-sm, 0.875rem);
238
- transition: color var(--ah-transition-fast, 150ms ease);
374
+ color: var(--ah-color-link, #635dff);
375
+ text-decoration: var(--ah-link-decoration, none);
376
+ font-size: 14px;
377
+ transition: color 0.15s ease;
239
378
  }
240
379
 
241
380
  .link:hover {
@@ -243,8 +382,9 @@
243
382
  }
244
383
 
245
384
  .link:focus-visible {
246
- outline: 2px solid var(--ah-color-primary, #0066cc);
385
+ outline: 2px solid var(--ah-color-link, #635dff);
247
386
  outline-offset: 2px;
387
+ border-radius: 2px;
248
388
  }
249
389
 
250
390
  /* ==========================================================================
@@ -253,21 +393,23 @@
253
393
  ========================================================================== */
254
394
 
255
395
  .node-error {
256
- padding: var(--ah-space-3, 0.75rem) var(--ah-space-4, 1rem);
257
- background-color: var(--ah-color-error-bg, #fee2e2);
258
- color: var(--ah-color-error, #dc2626);
259
- border: 1px solid var(--ah-color-error-border, #fecaca);
260
- border-radius: var(--ah-radius-md, 6px);
261
- font-size: var(--ah-font-size-sm, 0.875rem);
396
+ padding: 12px 16px;
397
+ background-color: var(--ah-color-error-bg, #ffeaea);
398
+ color: var(--ah-color-error, #d03c38);
399
+ border-left: 3px solid var(--ah-color-error, #d03c38);
400
+ border-radius: 0;
401
+ font-size: 14px;
402
+ margin-bottom: 16px;
262
403
  }
263
404
 
264
405
  .node-success {
265
- padding: var(--ah-space-3, 0.75rem) var(--ah-space-4, 1rem);
266
- background-color: var(--ah-color-success-bg, #dcfce7);
267
- color: var(--ah-color-success, #16a34a);
268
- border: 1px solid var(--ah-color-success-border, #bbf7d0);
269
- border-radius: var(--ah-radius-md, 6px);
270
- font-size: var(--ah-font-size-sm, 0.875rem);
406
+ padding: 12px 16px;
407
+ background-color: var(--ah-color-success-bg, #e6f9f1);
408
+ color: var(--ah-color-success, #13a769);
409
+ border-left: 3px solid var(--ah-color-success, #13a769);
410
+ border-radius: 0;
411
+ font-size: 14px;
412
+ margin-bottom: 16px;
271
413
  }
272
414
 
273
415
  /* ==========================================================================
@@ -279,20 +421,21 @@
279
421
  display: flex;
280
422
  align-items: center;
281
423
  text-align: center;
282
- margin: var(--ah-space-4, 1rem) 0;
424
+ margin: 16px 0;
283
425
  }
284
426
 
285
427
  .divider::before,
286
428
  .divider::after {
287
429
  content: '';
288
430
  flex: 1;
289
- border-bottom: 1px solid var(--ah-color-border-muted, #e5e7eb);
431
+ border-bottom: 1px solid var(--ah-color-border-muted, #c9cace);
290
432
  }
291
433
 
292
434
  .divider-text {
293
- padding: 0 var(--ah-space-4, 1rem);
294
- font-size: var(--ah-font-size-sm, 0.875rem);
295
- color: var(--ah-color-text-muted, #9ca3af);
435
+ padding: 0 10px;
436
+ font-size: 12px;
437
+ font-weight: 400;
438
+ color: var(--ah-color-text-muted, #65676e);
296
439
  text-transform: uppercase;
297
- letter-spacing: 0.05em;
440
+ letter-spacing: 0.5px;
298
441
  }