@luminaryworks/auth-react 0.6.0 → 0.7.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/index.css CHANGED
@@ -2,7 +2,9 @@
2
2
  .HeadlessLoginPanel_module_panel {
3
3
  --lw-auth-theme: #1677ff;
4
4
  --lw-auth-theme-deep: color-mix(in srgb, var(--lw-auth-theme) 72%, #000);
5
+ box-sizing: border-box;
5
6
  width: min(100%, 400px);
7
+ max-width: 400px;
6
8
  padding: 28px 28px 22px;
7
9
  border-radius: 16px;
8
10
  background: rgba(255, 255, 255, 0.96);
@@ -282,6 +284,32 @@
282
284
  color: #b42318;
283
285
  line-height: 1.4;
284
286
  }
287
+ .HeadlessLoginPanel_module_consent {
288
+ margin: 12px 0 0;
289
+ font-size: 13px;
290
+ line-height: 1.45;
291
+ color: #14212b;
292
+ }
293
+ .HeadlessLoginPanel_module_consentInvalid {
294
+ margin: 12px -8px 0;
295
+ padding: 8px;
296
+ border: 1px solid #b42318;
297
+ border-radius: 10px;
298
+ background: rgba(180, 35, 24, 0.06);
299
+ }
300
+ .HeadlessLoginPanel_module_consentError {
301
+ margin: 8px 0 0;
302
+ font-size: 13px;
303
+ font-weight: 650;
304
+ line-height: 1.4;
305
+ color: #b42318;
306
+ }
307
+ .HeadlessLoginPanel_module_consentLinks {
308
+ margin: 0;
309
+ }
310
+ .HeadlessLoginPanel_module_consentLinks a {
311
+ color: var(--lw-auth-theme);
312
+ }
285
313
  .HeadlessLoginPanel_module_footer {
286
314
  margin-top: 18px;
287
315
  padding-top: 12px;
@@ -292,6 +320,11 @@
292
320
  gap: 8px;
293
321
  justify-content: center;
294
322
  }
323
+ @media (max-width: 420px) {
324
+ .HeadlessLoginPanel_module_panel {
325
+ padding: 22px 16px 18px;
326
+ }
327
+ }
295
328
 
296
329
  /* src/LoginLanguageSwitcher.module.scss */
297
330
  .LoginLanguageSwitcher_module_switch {
@@ -412,17 +445,18 @@
412
445
  --lw-login-grid: rgba(11, 18, 32, 0.045);
413
446
  }
414
447
  .LoginCanvas_module_canvas[data-tone=data] {
415
- --lw-login-accent: #5aa2ff;
416
- --lw-login-bg-a: #070b14;
417
- --lw-login-bg-b: #12203a;
448
+ --lw-login-accent: #7c3aed;
449
+ --lw-login-bg-a: #0a0f1e;
450
+ --lw-login-bg-b: #0a0f1e;
418
451
  --lw-login-ink: #e8eefc;
419
452
  --lw-login-grid: rgba(255, 255, 255, 0.045);
420
453
  }
421
454
  .LoginCanvas_module_canvas[data-tone=edu] {
422
- --lw-login-accent: #f59e0b;
423
- --lw-login-bg-a: #fff7ed;
424
- --lw-login-bg-b: #e0e7ff;
425
- --lw-login-grid: rgba(67, 56, 202, 0.06);
455
+ --lw-login-accent: #7ec8ff;
456
+ --lw-login-bg-a: #0a348c;
457
+ --lw-login-bg-b: #1d7aef;
458
+ --lw-login-ink: #f4f8ff;
459
+ --lw-login-grid: rgba(255, 255, 255, 0.07);
426
460
  }
427
461
  .LoginCanvas_module_grid {
428
462
  position: absolute;
@@ -461,4 +495,24 @@
461
495
  .LoginCanvas_module_slotFill {
462
496
  width: min(1120px, 100%);
463
497
  }
498
+ @media (max-width: 720px) {
499
+ .LoginCanvas_module_canvas {
500
+ display: flex;
501
+ flex-direction: column;
502
+ align-items: center;
503
+ justify-content: flex-start;
504
+ overflow-x: hidden;
505
+ overflow-y: auto;
506
+ padding: 72px 16px 28px;
507
+ }
508
+ .LoginCanvas_module_lang {
509
+ top: 12px;
510
+ right: 12px;
511
+ }
512
+ }
513
+ @media (max-width: 420px) {
514
+ .LoginCanvas_module_canvas {
515
+ padding: 64px 12px 20px;
516
+ }
517
+ }
464
518
  /*# sourceMappingURL=index.css.map */
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/HeadlessLoginPanel.module.scss","../src/LoginLanguageSwitcher.module.scss","../src/LoginCanvas.module.scss"],"sourcesContent":["$ink: #14212b;\n$muted: #4b5c68;\n$hint: #6b7c87;\n$brand: #3d6f8f;\n$brand-deep: #15485c;\n$brand-mid: #1f6f8b;\n$border: #c9d5de;\n$border-soft: #b7c9d4;\n$line: #d5e0e7;\n$divider: #90a0ab;\n$surface: #f7fafc;\n$fallback-bg: #e8eef2;\n$danger: #b42318;\n$footer-line: #e4ebf0;\n$radius-lg: 16px;\n$radius-md: 10px;\n$radius-sm: 4px;\n\n.panel {\n --lw-auth-theme: #1677ff;\n --lw-auth-theme-deep: color-mix(in srgb, var(--lw-auth-theme) 72%, #000);\n width: min(100%, 400px);\n padding: 28px 28px 22px;\n border-radius: $radius-lg;\n background: rgba(255, 255, 255, 0.96);\n color: $ink;\n box-shadow: 0 24px 64px rgba(15, 23, 42, 0.28);\n font-family: \"Segoe UI\", \"PingFang SC\", \"Noto Sans SC\", sans-serif;\n}\n\n.brand {\n display: flex;\n gap: 14px;\n align-items: center;\n margin-bottom: 12px;\n}\n\n.logo {\n border-radius: 12px;\n display: block;\n}\n\n.product {\n margin: 0;\n font-size: 13px;\n font-weight: 650;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n color: var(--lw-auth-theme);\n}\n\n.title {\n margin: 2px 0 0;\n font-size: 22px;\n font-weight: 700;\n line-height: 1.25;\n}\n\n.subtitle {\n margin: 0 0 18px;\n font-size: 14px;\n line-height: 1.5;\n color: $muted;\n}\n\n.form {\n display: grid;\n gap: 10px;\n}\n\n.channelTabs {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 6px;\n margin-bottom: 2px;\n}\n\n.channelTab {\n border: 1px solid $border;\n border-radius: $radius-md;\n padding: 8px 10px;\n font-size: 13px;\n font-weight: 650;\n cursor: pointer;\n color: $muted;\n background: $surface;\n\n &:disabled {\n opacity: 0.65;\n cursor: not-allowed;\n }\n}\n\n.channelTabActive {\n color: var(--lw-auth-theme-deep);\n border-color: var(--lw-auth-theme);\n background: color-mix(in srgb, var(--lw-auth-theme) 10%, #fff);\n}\n\n.codeRow {\n display: grid;\n grid-template-columns: 1fr auto;\n gap: 8px;\n align-items: stretch;\n}\n\n.codeInput {\n min-width: 0;\n}\n\n.secondaryBtn {\n border: 1px solid $border-soft;\n border-radius: $radius-md;\n padding: 0 12px;\n font-size: 13px;\n font-weight: 650;\n cursor: pointer;\n color: $ink;\n background: #fff;\n white-space: nowrap;\n\n &:disabled {\n opacity: 0.65;\n cursor: not-allowed;\n }\n}\n\n.socialStack {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 10px;\n font-size: 12px;\n}\n\n.input {\n width: 100%;\n box-sizing: border-box;\n border: 1px solid $border;\n border-radius: $radius-md;\n padding: 10px 12px;\n font-size: 14px;\n outline: none;\n background: $surface;\n\n &:focus {\n border-color: var(--lw-auth-theme);\n }\n\n &:disabled {\n opacity: 0.65;\n cursor: not-allowed;\n }\n}\n\n.passwordField {\n position: relative;\n display: flex;\n align-items: center;\n}\n\n.passwordInput {\n padding-right: 42px;\n}\n\n.passwordToggle {\n position: absolute;\n right: 4px;\n top: 50%;\n transform: translateY(-50%);\n z-index: 1;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n border: none;\n border-radius: $radius-sm;\n padding: 0;\n color: #5a6b76;\n background: transparent;\n cursor: pointer;\n\n &:hover:not(:disabled) {\n color: var(--lw-auth-theme);\n background: color-mix(in srgb, var(--lw-auth-theme) 12%, transparent);\n }\n\n &:focus-visible {\n outline: 2px solid var(--lw-auth-theme);\n outline-offset: 1px;\n }\n\n &:disabled {\n opacity: 0.65;\n cursor: not-allowed;\n }\n}\n\n.primaryBtn {\n border: none;\n border-radius: $radius-md;\n padding: 11px 14px;\n font-size: 14px;\n font-weight: 650;\n cursor: pointer;\n color: #fff;\n background: linear-gradient(135deg, var(--lw-auth-theme) 0%, var(--lw-auth-theme-deep) 100%);\n\n &:disabled {\n opacity: 0.65;\n cursor: not-allowed;\n }\n}\n\n.socialBtn {\n width: 100%;\n min-width: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n border: 1px solid $border-soft;\n border-radius: $radius-md;\n padding: 11px 10px;\n font-size: 14px;\n font-weight: 650;\n cursor: pointer;\n color: $ink;\n background: #fff;\n\n &:disabled {\n opacity: 0.65;\n cursor: not-allowed;\n }\n}\n\n.socialLogo {\n flex-shrink: 0;\n display: block;\n}\n\n.logoFallback {\n width: 18px;\n height: 18px;\n border-radius: $radius-sm;\n background: color-mix(in srgb, var(--lw-auth-theme) 14%, #fff);\n color: var(--lw-auth-theme-deep);\n font-size: 11px;\n font-weight: 700;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.cancelBtn {\n margin-top: 10px;\n width: 100%;\n border: none;\n background: transparent;\n color: #5a6b76;\n font-size: 13px;\n cursor: pointer;\n padding: 8px;\n\n &:disabled {\n opacity: 0.65;\n cursor: not-allowed;\n }\n}\n\n.divider {\n display: flex;\n align-items: center;\n gap: 10px;\n margin: 14px 0;\n color: $divider;\n}\n\n.dividerLine {\n flex: 1;\n height: 1px;\n background: $line;\n}\n\n.dividerText {\n font-size: 12px;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n}\n\n.hint {\n margin: 10px 0 0;\n font-size: 12px;\n color: $hint;\n line-height: 1.45;\n}\n\n.domainsHint {\n margin: -2px 0 0;\n font-size: 12px;\n line-height: 1.45;\n color: $muted;\n word-break: break-word;\n}\n\n.switchMode {\n margin: 12px 0 0;\n text-align: center;\n}\n\n.switchModeBtn {\n border: none;\n background: transparent;\n color: var(--lw-auth-theme);\n font-size: 13px;\n font-weight: 650;\n cursor: pointer;\n padding: 4px 8px;\n text-decoration: underline;\n text-underline-offset: 3px;\n\n &:disabled {\n opacity: 0.65;\n cursor: not-allowed;\n }\n}\n\n.error {\n margin: 12px 0 0;\n font-size: 13px;\n color: $danger;\n line-height: 1.4;\n}\n\n.footer {\n margin-top: 18px;\n padding-top: 12px;\n border-top: 1px solid $footer-line;\n font-size: 12px;\n color: $hint;\n display: flex;\n gap: 8px;\n justify-content: center;\n}\n",".switch {\n position: relative;\n display: inline-flex;\n}\n\n.trigger {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n height: 32px;\n padding: 0 10px 0 8px;\n border: 1px solid rgba(15, 23, 42, 0.12);\n border-radius: 999px;\n background: rgba(255, 255, 255, 0.86);\n color: #243044;\n font: inherit;\n font-size: 13px;\n line-height: 1;\n cursor: pointer;\n backdrop-filter: blur(8px);\n\n &:hover,\n &[aria-expanded=\"true\"] {\n border-color: var(--lw-login-accent, #1677ff);\n color: #0f172a;\n }\n}\n\n.icon {\n width: 14px;\n height: 14px;\n display: block;\n}\n\n.caret {\n width: 10px;\n height: 10px;\n opacity: 0.65;\n}\n\n.menu {\n position: absolute;\n top: calc(100% + 6px);\n right: 0;\n z-index: 20;\n min-width: 168px;\n margin: 0;\n padding: 6px;\n list-style: none;\n border-radius: 12px;\n background: #fff;\n box-shadow: 0 12px 40px rgba(15, 23, 42, 0.16);\n}\n\n.item {\n display: block;\n width: 100%;\n border: 0;\n border-radius: 8px;\n padding: 8px 10px;\n background: transparent;\n color: #1f2937;\n font: inherit;\n font-size: 14px;\n text-align: left;\n cursor: pointer;\n\n &:hover {\n background: #f3f6fb;\n }\n}\n\n.itemActive {\n background: color-mix(in srgb, var(--lw-login-accent, #1677ff) 14%, #fff);\n color: var(--lw-login-accent, #1677ff);\n font-weight: 650;\n}\n\n.onDark {\n border-color: rgba(255, 255, 255, 0.22);\n background: rgba(15, 23, 42, 0.28);\n color: rgba(255, 255, 255, 0.92);\n\n &:hover,\n &[aria-expanded=\"true\"] {\n border-color: rgba(255, 255, 255, 0.55);\n color: #fff;\n }\n}\n",".canvas {\n --lw-login-accent: #1677ff;\n position: relative;\n min-height: 100dvh;\n display: grid;\n place-items: center;\n padding: 56px 20px 24px;\n overflow: hidden;\n background:\n radial-gradient(900px 480px at 8% -8%, color-mix(in srgb, var(--lw-login-accent) 28%, transparent), transparent 58%),\n radial-gradient(720px 420px at 100% 12%, color-mix(in srgb, var(--lw-login-accent) 16%, transparent), transparent 52%),\n linear-gradient(165deg, var(--lw-login-bg-a, #f4f7fb) 0%, var(--lw-login-bg-b, #e7eef6) 100%);\n color: var(--lw-login-ink, #122033);\n}\n\n.canvas[data-tone=\"console\"] {\n --lw-login-accent: #7eb6ff;\n --lw-login-bg-a: #0e1726;\n --lw-login-bg-b: #1a2740;\n --lw-login-ink: #e8eef8;\n --lw-login-grid: rgba(255, 255, 255, 0.05);\n}\n\n.canvas[data-tone=\"vista\"] {\n --lw-login-accent: #1677ff;\n --lw-login-bg-a: #f4f7fb;\n --lw-login-bg-b: #dde7f0;\n --lw-login-grid: rgba(11, 18, 32, 0.045);\n}\n\n.canvas[data-tone=\"data\"] {\n --lw-login-accent: #5aa2ff;\n --lw-login-bg-a: #070b14;\n --lw-login-bg-b: #12203a;\n --lw-login-ink: #e8eefc;\n --lw-login-grid: rgba(255, 255, 255, 0.045);\n}\n\n.canvas[data-tone=\"edu\"] {\n --lw-login-accent: #f59e0b;\n --lw-login-bg-a: #fff7ed;\n --lw-login-bg-b: #e0e7ff;\n --lw-login-grid: rgba(67, 56, 202, 0.06);\n}\n\n.grid {\n position: absolute;\n inset: 0;\n pointer-events: none;\n background-image:\n linear-gradient(var(--lw-login-grid, rgba(15, 23, 42, 0.04)) 1px, transparent 1px),\n linear-gradient(90deg, var(--lw-login-grid, rgba(15, 23, 42, 0.04)) 1px, transparent 1px);\n background-size: 48px 48px;\n mask-image: radial-gradient(ellipse at center, #000 18%, transparent 74%);\n}\n\n.lang {\n position: fixed;\n top: 14px;\n right: 16px;\n z-index: 5;\n}\n\n.decor {\n position: absolute;\n inset: 0;\n pointer-events: none;\n z-index: 0;\n}\n\n.slot {\n position: relative;\n z-index: 1;\n width: min(440px, 100%);\n}\n\n.slotFill {\n width: min(1120px, 100%);\n}\n"],"mappings":"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","names":["panel","brand","logo","product","title","subtitle","form","channelTabs","channelTab","channelTabActive","codeRow","codeInput","secondaryBtn","socialStack","input","passwordField","passwordInput","passwordToggle","primaryBtn","socialBtn","socialLogo","logoFallback","cancelBtn","divider","dividerLine","dividerText","hint","domainsHint","switchMode","switchModeBtn","error","footer","switch","trigger","icon","caret","menu","item","itemActive","onDark","canvas","grid","lang","decor","slot","slotFill"]}
1
+ {"version":3,"sources":["../src/HeadlessLoginPanel.module.scss","../src/LoginLanguageSwitcher.module.scss","../src/LoginCanvas.module.scss"],"sourcesContent":["$ink: #14212b;\n$muted: #4b5c68;\n$hint: #6b7c87;\n$brand: #3d6f8f;\n$brand-deep: #15485c;\n$brand-mid: #1f6f8b;\n$border: #c9d5de;\n$border-soft: #b7c9d4;\n$line: #d5e0e7;\n$divider: #90a0ab;\n$surface: #f7fafc;\n$fallback-bg: #e8eef2;\n$danger: #b42318;\n$footer-line: #e4ebf0;\n$radius-lg: 16px;\n$radius-md: 10px;\n$radius-sm: 4px;\n\n.panel {\n --lw-auth-theme: #1677ff;\n --lw-auth-theme-deep: color-mix(in srgb, var(--lw-auth-theme) 72%, #000);\n box-sizing: border-box;\n width: min(100%, 400px);\n max-width: 400px;\n padding: 28px 28px 22px;\n border-radius: $radius-lg;\n background: rgba(255, 255, 255, 0.96);\n color: $ink;\n box-shadow: 0 24px 64px rgba(15, 23, 42, 0.28);\n font-family: \"Segoe UI\", \"PingFang SC\", \"Noto Sans SC\", sans-serif;\n}\n\n.brand {\n display: flex;\n gap: 14px;\n align-items: center;\n margin-bottom: 12px;\n}\n\n.logo {\n border-radius: 12px;\n display: block;\n}\n\n.product {\n margin: 0;\n font-size: 13px;\n font-weight: 650;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n color: var(--lw-auth-theme);\n}\n\n.title {\n margin: 2px 0 0;\n font-size: 22px;\n font-weight: 700;\n line-height: 1.25;\n}\n\n.subtitle {\n margin: 0 0 18px;\n font-size: 14px;\n line-height: 1.5;\n color: $muted;\n}\n\n.form {\n display: grid;\n gap: 10px;\n}\n\n.channelTabs {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 6px;\n margin-bottom: 2px;\n}\n\n.channelTab {\n border: 1px solid $border;\n border-radius: $radius-md;\n padding: 8px 10px;\n font-size: 13px;\n font-weight: 650;\n cursor: pointer;\n color: $muted;\n background: $surface;\n\n &:disabled {\n opacity: 0.65;\n cursor: not-allowed;\n }\n}\n\n.channelTabActive {\n color: var(--lw-auth-theme-deep);\n border-color: var(--lw-auth-theme);\n background: color-mix(in srgb, var(--lw-auth-theme) 10%, #fff);\n}\n\n.codeRow {\n display: grid;\n grid-template-columns: 1fr auto;\n gap: 8px;\n align-items: stretch;\n}\n\n.codeInput {\n min-width: 0;\n}\n\n.secondaryBtn {\n border: 1px solid $border-soft;\n border-radius: $radius-md;\n padding: 0 12px;\n font-size: 13px;\n font-weight: 650;\n cursor: pointer;\n color: $ink;\n background: #fff;\n white-space: nowrap;\n\n &:disabled {\n opacity: 0.65;\n cursor: not-allowed;\n }\n}\n\n.socialStack {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 10px;\n font-size: 12px;\n}\n\n.input {\n width: 100%;\n box-sizing: border-box;\n border: 1px solid $border;\n border-radius: $radius-md;\n padding: 10px 12px;\n font-size: 14px;\n outline: none;\n background: $surface;\n\n &:focus {\n border-color: var(--lw-auth-theme);\n }\n\n &:disabled {\n opacity: 0.65;\n cursor: not-allowed;\n }\n}\n\n.passwordField {\n position: relative;\n display: flex;\n align-items: center;\n}\n\n.passwordInput {\n padding-right: 42px;\n}\n\n.passwordToggle {\n position: absolute;\n right: 4px;\n top: 50%;\n transform: translateY(-50%);\n z-index: 1;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n border: none;\n border-radius: $radius-sm;\n padding: 0;\n color: #5a6b76;\n background: transparent;\n cursor: pointer;\n\n &:hover:not(:disabled) {\n color: var(--lw-auth-theme);\n background: color-mix(in srgb, var(--lw-auth-theme) 12%, transparent);\n }\n\n &:focus-visible {\n outline: 2px solid var(--lw-auth-theme);\n outline-offset: 1px;\n }\n\n &:disabled {\n opacity: 0.65;\n cursor: not-allowed;\n }\n}\n\n.primaryBtn {\n border: none;\n border-radius: $radius-md;\n padding: 11px 14px;\n font-size: 14px;\n font-weight: 650;\n cursor: pointer;\n color: #fff;\n background: linear-gradient(135deg, var(--lw-auth-theme) 0%, var(--lw-auth-theme-deep) 100%);\n\n &:disabled {\n opacity: 0.65;\n cursor: not-allowed;\n }\n}\n\n.socialBtn {\n width: 100%;\n min-width: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n border: 1px solid $border-soft;\n border-radius: $radius-md;\n padding: 11px 10px;\n font-size: 14px;\n font-weight: 650;\n cursor: pointer;\n color: $ink;\n background: #fff;\n\n &:disabled {\n opacity: 0.65;\n cursor: not-allowed;\n }\n}\n\n.socialLogo {\n flex-shrink: 0;\n display: block;\n}\n\n.logoFallback {\n width: 18px;\n height: 18px;\n border-radius: $radius-sm;\n background: color-mix(in srgb, var(--lw-auth-theme) 14%, #fff);\n color: var(--lw-auth-theme-deep);\n font-size: 11px;\n font-weight: 700;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.cancelBtn {\n margin-top: 10px;\n width: 100%;\n border: none;\n background: transparent;\n color: #5a6b76;\n font-size: 13px;\n cursor: pointer;\n padding: 8px;\n\n &:disabled {\n opacity: 0.65;\n cursor: not-allowed;\n }\n}\n\n.divider {\n display: flex;\n align-items: center;\n gap: 10px;\n margin: 14px 0;\n color: $divider;\n}\n\n.dividerLine {\n flex: 1;\n height: 1px;\n background: $line;\n}\n\n.dividerText {\n font-size: 12px;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n}\n\n.hint {\n margin: 10px 0 0;\n font-size: 12px;\n color: $hint;\n line-height: 1.45;\n}\n\n.domainsHint {\n margin: -2px 0 0;\n font-size: 12px;\n line-height: 1.45;\n color: $muted;\n word-break: break-word;\n}\n\n.switchMode {\n margin: 12px 0 0;\n text-align: center;\n}\n\n.switchModeBtn {\n border: none;\n background: transparent;\n color: var(--lw-auth-theme);\n font-size: 13px;\n font-weight: 650;\n cursor: pointer;\n padding: 4px 8px;\n text-decoration: underline;\n text-underline-offset: 3px;\n\n &:disabled {\n opacity: 0.65;\n cursor: not-allowed;\n }\n}\n\n.error {\n margin: 12px 0 0;\n font-size: 13px;\n color: $danger;\n line-height: 1.4;\n}\n\n.consent {\n margin: 12px 0 0;\n font-size: 13px;\n line-height: 1.45;\n color: $ink;\n}\n\n.consentInvalid {\n margin: 12px -8px 0;\n padding: 8px;\n border: 1px solid $danger;\n border-radius: $radius-md;\n background: rgba(180, 35, 24, 0.06);\n}\n\n.consentError {\n margin: 8px 0 0;\n font-size: 13px;\n font-weight: 650;\n line-height: 1.4;\n color: $danger;\n}\n\n.consentLinks {\n margin: 0;\n a {\n color: var(--lw-auth-theme);\n }\n}\n\n.footer {\n margin-top: 18px;\n padding-top: 12px;\n border-top: 1px solid $footer-line;\n font-size: 12px;\n color: $hint;\n display: flex;\n gap: 8px;\n justify-content: center;\n}\n\n@media (max-width: 420px) {\n .panel {\n padding: 22px 16px 18px;\n }\n}\n",".switch {\n position: relative;\n display: inline-flex;\n}\n\n.trigger {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n height: 32px;\n padding: 0 10px 0 8px;\n border: 1px solid rgba(15, 23, 42, 0.12);\n border-radius: 999px;\n background: rgba(255, 255, 255, 0.86);\n color: #243044;\n font: inherit;\n font-size: 13px;\n line-height: 1;\n cursor: pointer;\n backdrop-filter: blur(8px);\n\n &:hover,\n &[aria-expanded=\"true\"] {\n border-color: var(--lw-login-accent, #1677ff);\n color: #0f172a;\n }\n}\n\n.icon {\n width: 14px;\n height: 14px;\n display: block;\n}\n\n.caret {\n width: 10px;\n height: 10px;\n opacity: 0.65;\n}\n\n.menu {\n position: absolute;\n top: calc(100% + 6px);\n right: 0;\n z-index: 20;\n min-width: 168px;\n margin: 0;\n padding: 6px;\n list-style: none;\n border-radius: 12px;\n background: #fff;\n box-shadow: 0 12px 40px rgba(15, 23, 42, 0.16);\n}\n\n.item {\n display: block;\n width: 100%;\n border: 0;\n border-radius: 8px;\n padding: 8px 10px;\n background: transparent;\n color: #1f2937;\n font: inherit;\n font-size: 14px;\n text-align: left;\n cursor: pointer;\n\n &:hover {\n background: #f3f6fb;\n }\n}\n\n.itemActive {\n background: color-mix(in srgb, var(--lw-login-accent, #1677ff) 14%, #fff);\n color: var(--lw-login-accent, #1677ff);\n font-weight: 650;\n}\n\n.onDark {\n border-color: rgba(255, 255, 255, 0.22);\n background: rgba(15, 23, 42, 0.28);\n color: rgba(255, 255, 255, 0.92);\n\n &:hover,\n &[aria-expanded=\"true\"] {\n border-color: rgba(255, 255, 255, 0.55);\n color: #fff;\n }\n}\n",".canvas {\n --lw-login-accent: #1677ff;\n position: relative;\n min-height: 100dvh;\n display: grid;\n place-items: center;\n padding: 56px 20px 24px;\n overflow: hidden;\n background:\n radial-gradient(900px 480px at 8% -8%, color-mix(in srgb, var(--lw-login-accent) 28%, transparent), transparent 58%),\n radial-gradient(720px 420px at 100% 12%, color-mix(in srgb, var(--lw-login-accent) 16%, transparent), transparent 52%),\n linear-gradient(165deg, var(--lw-login-bg-a, #f4f7fb) 0%, var(--lw-login-bg-b, #e7eef6) 100%);\n color: var(--lw-login-ink, #122033);\n}\n\n.canvas[data-tone=\"console\"] {\n --lw-login-accent: #7eb6ff;\n --lw-login-bg-a: #0e1726;\n --lw-login-bg-b: #1a2740;\n --lw-login-ink: #e8eef8;\n --lw-login-grid: rgba(255, 255, 255, 0.05);\n}\n\n.canvas[data-tone=\"vista\"] {\n --lw-login-accent: #1677ff;\n --lw-login-bg-a: #f4f7fb;\n --lw-login-bg-b: #dde7f0;\n --lw-login-grid: rgba(11, 18, 32, 0.045);\n}\n\n.canvas[data-tone=\"data\"] {\n --lw-login-accent: #7c3aed;\n --lw-login-bg-a: #0a0f1e;\n --lw-login-bg-b: #0a0f1e;\n --lw-login-ink: #e8eefc;\n --lw-login-grid: rgba(255, 255, 255, 0.045);\n}\n\n.canvas[data-tone=\"edu\"] {\n --lw-login-accent: #7ec8ff;\n --lw-login-bg-a: #0a348c;\n --lw-login-bg-b: #1d7aef;\n --lw-login-ink: #f4f8ff;\n --lw-login-grid: rgba(255, 255, 255, 0.07);\n}\n\n.grid {\n position: absolute;\n inset: 0;\n pointer-events: none;\n background-image:\n linear-gradient(var(--lw-login-grid, rgba(15, 23, 42, 0.04)) 1px, transparent 1px),\n linear-gradient(90deg, var(--lw-login-grid, rgba(15, 23, 42, 0.04)) 1px, transparent 1px);\n background-size: 48px 48px;\n mask-image: radial-gradient(ellipse at center, #000 18%, transparent 74%);\n}\n\n.lang {\n position: fixed;\n top: 14px;\n right: 16px;\n z-index: 5;\n}\n\n.decor {\n position: absolute;\n inset: 0;\n pointer-events: none;\n z-index: 0;\n}\n\n.slot {\n position: relative;\n z-index: 1;\n width: min(440px, 100%);\n}\n\n.slotFill {\n width: min(1120px, 100%);\n}\n\n@media (max-width: 720px) {\n .canvas {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: flex-start;\n overflow-x: hidden;\n overflow-y: auto;\n padding: 72px 16px 28px;\n }\n\n .lang {\n top: 12px;\n right: 12px;\n }\n}\n\n@media (max-width: 420px) {\n .canvas {\n padding: 64px 12px 20px;\n }\n}\n"],"mappings":"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","names":["panel","brand","logo","product","title","subtitle","form","channelTabs","channelTab","channelTabActive","codeRow","codeInput","secondaryBtn","socialStack","input","passwordField","passwordInput","passwordToggle","primaryBtn","socialBtn","socialLogo","logoFallback","cancelBtn","divider","dividerLine","dividerText","hint","domainsHint","switchMode","switchModeBtn","error","consent","consentInvalid","consentError","consentLinks","footer","switch","trigger","icon","caret","menu","item","itemActive","onDark","canvas","grid","lang","decor","slot","slotFill"]}
package/dist/index.d.ts CHANGED
@@ -125,8 +125,14 @@ interface ExperiencePasswordSignInInput {
125
125
  interface ExperiencePasswordSignInResult {
126
126
  /** Continue URL from Experience submit (complete OIDC interaction). */
127
127
  redirectTo?: string;
128
+ /** Password succeeded, but Logto still requires an authenticator code. */
129
+ mfaRequired?: boolean;
128
130
  raw?: unknown;
129
131
  }
132
+ interface ExperienceMfaTotpInput {
133
+ apiBase: string;
134
+ code: string;
135
+ }
130
136
  /** Same OIDC bootstrap fields as sign-in; username must match Logto username rules. */
131
137
  type ExperiencePasswordSignUpInput = ExperiencePasswordSignInInput & {
132
138
  /** Optional CAPTCHA token for Logto bot protection (Turnstile / reCAPTCHA). */
@@ -189,6 +195,8 @@ interface LoginExperienceAdapter {
189
195
  readonly provider: string;
190
196
  readonly capabilities: readonly LoginExperienceCapability[];
191
197
  experiencePasswordSignIn?(input: ExperiencePasswordSignInInput): Promise<ExperiencePasswordSignInResult>;
198
+ /** Finish a pending TOTP challenge on the current Experience session, then submit. */
199
+ experienceVerifyTotp?(input: ExperienceMfaTotpInput): Promise<ExperiencePasswordSignInResult>;
192
200
  /**
193
201
  * Self-register with username + password (Logto Register + NewPasswordIdentity).
194
202
  * Email/phone sign-up needs verification codes — not covered by this method.
@@ -295,6 +303,12 @@ declare function fetchRegisterEmailPolicy(apiBase: string, init?: RequestInit):
295
303
  */
296
304
 
297
305
  declare function isLogtoRegisterUsername(value: string): boolean;
306
+ declare class ExperienceApiError extends Error {
307
+ readonly status: number;
308
+ readonly code: string;
309
+ constructor(status: number, code: string, message: string);
310
+ }
311
+ declare function isMfaVerificationRequired(error: unknown): boolean;
298
312
  /**
299
313
  * Force authorize onto the Experience/SPA origin so Set-Cookie lands on the
300
314
  * same host as subsequent `/api/experience` calls (dev proxy strips Domain).
@@ -308,6 +322,8 @@ declare class LogtoExperienceAdapter implements LoginExperienceAdapter {
308
322
  readonly capabilities: readonly LoginExperienceCapability[];
309
323
  emailPolicy: RegisterEmailPolicy;
310
324
  experiencePasswordSignIn(input: ExperiencePasswordSignInInput): Promise<ExperiencePasswordSignInResult>;
325
+ /** Verify the user's existing authenticator code, then submit the interaction. */
326
+ experienceVerifyTotp(input: ExperienceMfaTotpInput): Promise<ExperiencePasswordSignInResult>;
311
327
  /**
312
328
  * Register with username + password via NewPasswordIdentity.
313
329
  * Email/phone self-register requires verification codes — use social or invite instead.
@@ -421,6 +437,32 @@ interface LuminaryAuthProviderProps {
421
437
  declare function LuminaryAuthProvider({ config: configProp, children }: LuminaryAuthProviderProps): react.JSX.Element;
422
438
  declare function useLuminaryAuth(): LuminaryAuthContextValue;
423
439
 
440
+ declare const DEFAULT_PLATFORM_TERMS_URL = "https://luminaryworks.dev/legal/terms";
441
+ declare const DEFAULT_PLATFORM_PRIVACY_URL = "https://luminaryworks.dev/legal/privacy";
442
+ type LoginLegalUrls = {
443
+ platformTermsUrl: string;
444
+ platformPrivacyUrl: string;
445
+ productTermsUrl: string;
446
+ productPrivacyUrl: string;
447
+ };
448
+ type LoginLegalDocument = {
449
+ id: string;
450
+ href: string;
451
+ label: string;
452
+ };
453
+ /**
454
+ * Login clickwrap URLs. The checkbox links the product terms and the privacy
455
+ * notice. Product terms must incorporate the LuminaryWorks platform terms by
456
+ * reference; those platform URLs stay configurable for the legal pages.
457
+ */
458
+ declare function readLoginLegalConfigFromEnv(env: Record<string, string | undefined>, defaults?: Partial<LoginLegalUrls>): LoginLegalUrls;
459
+ declare function buildLoginLegalDocuments(urls: LoginLegalUrls, labels: {
460
+ /** Kept so existing callers compile. Not shown; product terms incorporate it. */
461
+ platformTerms?: string;
462
+ productTerms: string;
463
+ privacy: string;
464
+ }): LoginLegalDocument[];
465
+
424
466
  /** @deprecated Prefer dynamic connectors from IdP; kept for prop typing. */
425
467
  type SocialProviderTarget = string;
426
468
  interface HeadlessLoginLabels {
@@ -468,6 +510,13 @@ interface HeadlessLoginLabels {
468
510
  * and return to the app (loopback / deep link callback).
469
511
  */
470
512
  waitingExternalBrowser?: string;
513
+ /** Shown when password/social/SSO is blocked because product terms are not accepted. */
514
+ consentRequired?: string;
515
+ mfaTitle?: string;
516
+ mfaSubtitle?: string;
517
+ mfaCodePlaceholder?: string;
518
+ mfaSubmit?: string;
519
+ mfaBack?: string;
471
520
  }
472
521
  interface HeadlessLoginPanelProps {
473
522
  config: Partial<LuminaryIdpConfig>;
@@ -478,7 +527,7 @@ interface HeadlessLoginPanelProps {
478
527
  logoSrc?: string;
479
528
  labels?: HeadlessLoginLabels;
480
529
  /**
481
- * Card copy locale (`en` | `zh-CN` | `zh-TW` | `es`, plus `zh` → zh-CN).
530
+ * Card copy locale. Unknown tags fall back to English.
482
531
  * Explicit `labels` still override individual keys.
483
532
  */
484
533
  locale?: string;
@@ -535,6 +584,29 @@ interface HeadlessLoginPanelProps {
535
584
  onOidcSession?: (session: LuminaryAuthSession, returnUrl?: string) => Promise<void> | void;
536
585
  /** When Experience returns redirectTo, open it (default: same-tab assign). */
537
586
  onExperienceRedirect?: (redirectTo: string) => void;
587
+ /**
588
+ * Product terms / remember-account controls. Rendered after the password form
589
+ * and before Google/GitHub so clickwrap sits next to every sign-in action.
590
+ * Prefer this when the product needs extra checkboxes (remember identifier).
591
+ */
592
+ consent?: ReactNode;
593
+ /**
594
+ * Configurable legal links (LuminaryWorks platform ToS + product ToS + privacy).
595
+ * Shown only when `consent` is omitted. Use `readLoginLegalConfigFromEnv` +
596
+ * `buildLoginLegalDocuments` so URLs stay env-driven.
597
+ */
598
+ consentDocuments?: LoginLegalDocument[];
599
+ /**
600
+ * When `false`, password, register, hosted SSO, and social buttons do not start
601
+ * IdP — products must collect an unchecked terms checkbox first.
602
+ * Default `true` (no gate) for consoles that do not show product ToS yet.
603
+ */
604
+ consentOk?: boolean;
605
+ /** Called when an action is blocked because `consentOk` is false. */
606
+ onConsentBlocked?: () => void;
607
+ /** Prefill identifier (remember-account). Never pass a stored password. */
608
+ initialIdentifier?: string;
609
+ onIdentifierChange?: (identifier: string) => void;
538
610
  footer?: ReactNode;
539
611
  className?: string;
540
612
  style?: CSSProperties;
@@ -546,7 +618,9 @@ interface HeadlessLoginPanelProps {
546
618
  }
547
619
  /** Shared default accent for product login panels (shared/brand --lw-primary). */
548
620
  declare const DEFAULT_LOGIN_THEME_COLOR = "#1677ff";
549
- declare function HeadlessLoginPanel({ config, experienceAdapter: experienceAdapterProp, productName, logoSrc, labels: labelsProp, locale, returnUrl, mode, openExternalUrl, showSocialConnectors, showRegister, registerEmailPolicy: registerEmailPolicyProp, fetchRegisterPolicy, getCaptchaToken, socialProviders, showCancel, onCancel, onOidcSession, onExperienceRedirect, footer, className, style, themeColor, }: HeadlessLoginPanelProps): react.JSX.Element;
621
+ /** Unified login card width. Product pages must not invent a second width. */
622
+ declare const LOGIN_CARD_MAX_WIDTH = 400;
623
+ declare function HeadlessLoginPanel({ config, experienceAdapter: experienceAdapterProp, productName, logoSrc, labels: labelsProp, locale, returnUrl, mode, openExternalUrl, showSocialConnectors, showRegister, registerEmailPolicy: registerEmailPolicyProp, fetchRegisterPolicy, getCaptchaToken, socialProviders, showCancel, onCancel, onOidcSession, onExperienceRedirect, consent, consentDocuments, consentOk, onConsentBlocked, initialIdentifier, onIdentifierChange, footer, className, style, themeColor, }: HeadlessLoginPanelProps): react.JSX.Element;
550
624
 
551
625
  interface ReauthOverlayProps {
552
626
  config: Partial<LuminaryIdpConfig>;
@@ -590,12 +664,13 @@ declare function useAuthGate(): AuthGateContextValue;
590
664
  declare function useAuthGateOptional(): AuthGateContextValue | null;
591
665
 
592
666
  /** Locales shipped with the shared login card. Products may pass a wider menu. */
593
- type LoginLocale = "en" | "zh-CN" | "zh-TW" | "es";
667
+ type LoginLocale = "zh-CN" | "zh-TW" | "ja" | "ko" | "en" | "pt" | "nl" | "it" | "es" | "fr";
594
668
  interface LoginLocaleOption {
595
669
  code: string;
596
670
  label: string;
597
671
  short: string;
598
672
  }
673
+ /** Menu order: CJK and English first; long European names, then Spanish and French. */
599
674
  declare const DEFAULT_LOGIN_LOCALES: readonly LoginLocaleOption[];
600
675
  /** Normalize product locale tags (`zh`, `zh-Hans`) onto the card dictionary. */
601
676
  declare function normalizeLoginLocale(locale: string | undefined): LoginLocale;
@@ -646,4 +721,4 @@ declare function createPostLoginPathHelpers(options: PostLoginPathOptions): {
646
721
  isUnsafeReturnPath: (path: string) => boolean;
647
722
  };
648
723
 
649
- export { type AuthGateConfig, type AuthGatePhase, AuthGateProvider, type AuthGateProviderProps, type AuthGateSnapshot, DEFAULT_DISPOSABLE_EMAIL_BLOCKLIST, DEFAULT_LOGIN_LOCALES, DEFAULT_LOGIN_THEME_COLOR, DEFAULT_REGISTER_EMAIL_ALLOWLIST, type ExperienceEmailSignUpCompleteInput, type ExperienceEmailSignUpSendCodeInput, type ExperienceEmailSignUpSendCodeResult, type ExperienceIdentifierType, type ExperiencePasswordSignInInput, type ExperiencePasswordSignInResult, type ExperiencePasswordSignUpInput, type ExperiencePasswordSignUpResult, type ExperienceSocialConnector, type FetchSocialConnectorsInput, type HeadlessLoginLabels, HeadlessLoginPanel, type HeadlessLoginPanelProps, HostedOidcExperienceAdapter, LOGIN_EXPERIENCE_CAPABILITIES, LoginCanvas, type LoginCanvasProps, type LoginCanvasTone, type LoginExperienceAdapter, type LoginExperienceCapability, type LoginExperienceProvider, LoginLanguageSwitcher, type LoginLanguageSwitcherProps, type LoginLocale, type LoginLocaleOption, LogtoExperienceAdapter, LuminaryAuthProvider, type LuminaryAuthProviderProps, type LuminaryAuthSession, type LuminaryIdpConfig, type PostLoginPathOptions, type PublicRegisterPolicyResponse, ReauthOverlay, type ReauthOverlayProps, type RegisterEmailDecision, type RegisterEmailMode, type RegisterEmailPolicy, type RegisterEmailPolicyInput, type SignInOptions, type SocialProviderTarget, type SocialSignInRequest, type UnauthorizedDisposition, authGate, clearStoredSession, createLoginExperienceAdapter, createLogtoDirectSignInRequest, createPostLoginPathHelpers, createUserManager, emailDomain, evaluateRegisterEmail, experiencePasswordSignIn, fetchRegisterEmailPolicy, fetchSocialConnectors, formatAllowedEmailDomains, getCurrentUser, getStoredAccessToken, handleSignInCallback, handleSignInPopupCallback, isIdpConfigured, isLogtoRegisterUsername, isOidcPopupWindow, isValidEmailShape, loginLabels, normalizeLoginLocale, normalizeRegisterEmailMode, prepareSignInRequestUrl, readIdpConfigFromEnv, readRegisterEmailPolicyFromEnv, registerEmailDomainsHint, registerEmailRejectionMessage, resetUserManager, resolveExperienceApiBase, resolveIssuer, resolveLoginExperienceAdapter, resolveLoginExperienceProviderFromEnv, resolveRegisterEmailPolicy, sameOriginAuthorizeUrl, signInPopup, signInRedirect, signOutRedirect, useAuthGate, useAuthGateOptional, useLuminaryAuth, withAuthGateRetry };
724
+ export { type AuthGateConfig, type AuthGatePhase, AuthGateProvider, type AuthGateProviderProps, type AuthGateSnapshot, DEFAULT_DISPOSABLE_EMAIL_BLOCKLIST, DEFAULT_LOGIN_LOCALES, DEFAULT_LOGIN_THEME_COLOR, DEFAULT_PLATFORM_PRIVACY_URL, DEFAULT_PLATFORM_TERMS_URL, DEFAULT_REGISTER_EMAIL_ALLOWLIST, ExperienceApiError, type ExperienceEmailSignUpCompleteInput, type ExperienceEmailSignUpSendCodeInput, type ExperienceEmailSignUpSendCodeResult, type ExperienceIdentifierType, type ExperienceMfaTotpInput, type ExperiencePasswordSignInInput, type ExperiencePasswordSignInResult, type ExperiencePasswordSignUpInput, type ExperiencePasswordSignUpResult, type ExperienceSocialConnector, type FetchSocialConnectorsInput, type HeadlessLoginLabels, HeadlessLoginPanel, type HeadlessLoginPanelProps, HostedOidcExperienceAdapter, LOGIN_CARD_MAX_WIDTH, LOGIN_EXPERIENCE_CAPABILITIES, LoginCanvas, type LoginCanvasProps, type LoginCanvasTone, type LoginExperienceAdapter, type LoginExperienceCapability, type LoginExperienceProvider, LoginLanguageSwitcher, type LoginLanguageSwitcherProps, type LoginLegalDocument, type LoginLegalUrls, type LoginLocale, type LoginLocaleOption, LogtoExperienceAdapter, LuminaryAuthProvider, type LuminaryAuthProviderProps, type LuminaryAuthSession, type LuminaryIdpConfig, type PostLoginPathOptions, type PublicRegisterPolicyResponse, ReauthOverlay, type ReauthOverlayProps, type RegisterEmailDecision, type RegisterEmailMode, type RegisterEmailPolicy, type RegisterEmailPolicyInput, type SignInOptions, type SocialProviderTarget, type SocialSignInRequest, type UnauthorizedDisposition, authGate, buildLoginLegalDocuments, clearStoredSession, createLoginExperienceAdapter, createLogtoDirectSignInRequest, createPostLoginPathHelpers, createUserManager, emailDomain, evaluateRegisterEmail, experiencePasswordSignIn, fetchRegisterEmailPolicy, fetchSocialConnectors, formatAllowedEmailDomains, getCurrentUser, getStoredAccessToken, handleSignInCallback, handleSignInPopupCallback, isIdpConfigured, isLogtoRegisterUsername, isMfaVerificationRequired, isOidcPopupWindow, isValidEmailShape, loginLabels, normalizeLoginLocale, normalizeRegisterEmailMode, prepareSignInRequestUrl, readIdpConfigFromEnv, readLoginLegalConfigFromEnv, readRegisterEmailPolicyFromEnv, registerEmailDomainsHint, registerEmailRejectionMessage, resetUserManager, resolveExperienceApiBase, resolveIssuer, resolveLoginExperienceAdapter, resolveLoginExperienceProviderFromEnv, resolveRegisterEmailPolicy, sameOriginAuthorizeUrl, signInPopup, signInRedirect, signOutRedirect, useAuthGate, useAuthGateOptional, useLuminaryAuth, withAuthGateRetry };