UNPKG

@adonis-agora/authkit-react

Version:

Frontend ergonomics over AuthKit for AdonisJS + Inertia + React apps: a typed useAuth() hook, role-gating hooks and gating components.

408 lines (397 loc) 9.3 kB
/** * Estilos prontos dos componentes do @adonis-agora/authkit-react. * Temáveis via CSS vars `--authkit-*` (defaults Adonis-violet). * Importe em algum ponto da app: `import '@adonis-agora/authkit-react/styles.css'` */ :root { --authkit-primary: #5a45ff; --authkit-primary-contrast: #ffffff; --authkit-danger: #e5484d; --authkit-fg: #1a1523; --authkit-muted: #6f6e77; --authkit-bg: #ffffff; --authkit-border: #e4e2e8; --authkit-radius: 8px; --authkit-gap: 0.5rem; } .authkit-button { display: inline-flex; align-items: center; justify-content: center; gap: 0.4rem; padding: 0.5rem 0.9rem; font: inherit; font-weight: 500; border-radius: var(--authkit-radius); border: 1px solid transparent; cursor: pointer; line-height: 1.2; } .authkit-button:disabled { opacity: 0.6; cursor: not-allowed; } .authkit-button--primary { background: var(--authkit-primary); color: var(--authkit-primary-contrast); } .authkit-button--ghost { background: transparent; color: var(--authkit-fg); border-color: var(--authkit-border); } .authkit-button--danger { background: transparent; color: var(--authkit-danger); border-color: var(--authkit-border); } .authkit-passkey { display: flex; flex-direction: column; gap: var(--authkit-gap); } .authkit-passkey__error { margin: 0; font-size: 0.85rem; color: var(--authkit-danger); } .authkit-avatar { display: inline-flex; align-items: center; justify-content: center; border-radius: 50%; background: var(--authkit-primary); color: var(--authkit-primary-contrast); font-weight: 600; font-size: 0.85rem; object-fit: cover; overflow: hidden; } .authkit-userbutton { position: relative; display: inline-block; } .authkit-userbutton__trigger { background: none; border: none; padding: 0; cursor: pointer; } .authkit-userbutton__menu { position: absolute; right: 0; margin-top: 0.4rem; min-width: 12rem; background: var(--authkit-bg); border: 1px solid var(--authkit-border); border-radius: var(--authkit-radius); box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12); padding: 0.3rem; z-index: 50; } .authkit-userbutton__header { padding: 0.5rem 0.6rem; border-bottom: 1px solid var(--authkit-border); margin-bottom: 0.3rem; } .authkit-userbutton__name { font-weight: 600; color: var(--authkit-fg); } .authkit-userbutton__email { font-size: 0.8rem; color: var(--authkit-muted); } .authkit-userbutton__item { display: block; width: 100%; text-align: left; padding: 0.5rem 0.6rem; background: none; border: none; border-radius: 6px; color: var(--authkit-fg); text-decoration: none; font: inherit; cursor: pointer; } .authkit-userbutton__item:hover { background: rgba(90, 69, 255, 0.08); } .authkit-card { background: var(--authkit-bg); border: 1px solid var(--authkit-border); border-radius: var(--authkit-radius); padding: 1rem; } .authkit-profile__header { display: flex; align-items: center; gap: 0.75rem; margin-bottom: 1rem; } .authkit-profile__name { font-weight: 600; color: var(--authkit-fg); } .authkit-profile__email { font-size: 0.85rem; color: var(--authkit-muted); } .authkit-profile__form { display: flex; flex-direction: column; gap: var(--authkit-gap); } .authkit-label { font-size: 0.85rem; color: var(--authkit-muted); } .authkit-input { padding: 0.5rem 0.6rem; border: 1px solid var(--authkit-border); border-radius: var(--authkit-radius); font: inherit; } .authkit-error { color: var(--authkit-danger); font-size: 0.85rem; } .authkit-apps { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--authkit-gap); } .authkit-apps__item { display: flex; align-items: center; justify-content: space-between; padding: 0.6rem 0.75rem; border: 1px solid var(--authkit-border); border-radius: var(--authkit-radius); } .authkit-apps__info { display: flex; align-items: center; gap: 0.5rem; } .authkit-apps__logo { width: 24px; height: 24px; border-radius: 4px; } .authkit-apps__name { font-weight: 500; color: var(--authkit-fg); } .authkit-apps__empty, .authkit-apps__loading { color: var(--authkit-muted); font-size: 0.9rem; } /* Medidor de força de senha (PasswordStrengthMeter). */ .authkit-strength { display: flex; flex-direction: column; gap: 0.35rem; } .authkit-strength__bar { display: flex; gap: 0.25rem; } .authkit-strength__segment { flex: 1 1 0; height: 5px; border-radius: 999px; background: var(--authkit-border); transition: background-color 0.15s ease; } /* Cor por score, do mais fraco ao mais forte (via data-score no bar). */ .authkit-strength__bar[data-score="1"] .authkit-strength__segment--filled { background: var(--authkit-danger); } .authkit-strength__bar[data-score="2"] .authkit-strength__segment--filled { background: #f5a524; } .authkit-strength__bar[data-score="3"] .authkit-strength__segment--filled { background: #d6c20a; } .authkit-strength__bar[data-score="4"] .authkit-strength__segment--filled { background: #2fb344; } .authkit-strength__label { font-size: 0.8rem; color: var(--authkit-muted); } .authkit-strength__feedback { margin: 0; padding-left: 1.1rem; font-size: 0.8rem; color: var(--authkit-muted); } /* ─── OrganizationSwitcher ─────────────────────────────────────────────── */ .authkit-orgswitcher { position: relative; display: inline-block; } .authkit-orgswitcher__trigger { display: inline-flex; align-items: center; gap: 0.4rem; padding: 0.4rem 0.75rem; background: var(--authkit-bg); border: 1px solid var(--authkit-border); border-radius: var(--authkit-radius); cursor: pointer; font-size: 0.875rem; color: var(--authkit-fg); } .authkit-orgswitcher__trigger:disabled { opacity: 0.6; cursor: default; } .authkit-orgswitcher__chevron { font-size: 0.65rem; color: var(--authkit-muted); } .authkit-orgswitcher__menu { position: absolute; top: calc(100% + 4px); left: 0; min-width: 180px; background: var(--authkit-bg); border: 1px solid var(--authkit-border); border-radius: var(--authkit-radius); box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1); z-index: 50; overflow: hidden; } .authkit-orgswitcher__item { display: flex; align-items: center; justify-content: space-between; width: 100%; padding: 0.5rem 1rem; background: transparent; border: none; cursor: pointer; font-size: 0.875rem; color: var(--authkit-fg); text-align: left; } .authkit-orgswitcher__item:hover { background: color-mix(in srgb, var(--authkit-primary) 8%, transparent); } .authkit-orgswitcher__item--active { font-weight: 600; } .authkit-orgswitcher__item-name { flex: 1; } .authkit-orgswitcher__item-role { font-size: 0.75rem; color: var(--authkit-muted); margin-left: 0.5rem; } /* ─── OrganizationProfile ──────────────────────────────────────────────── */ .authkit-org-profile { display: flex; flex-direction: column; gap: var(--authkit-gap); } .authkit-org-profile__header { margin-bottom: 0.5rem; } .authkit-org-profile__name { font-weight: 600; font-size: 1rem; color: var(--authkit-fg); } .authkit-org-profile__slug { font-size: 0.8rem; color: var(--authkit-muted); } .authkit-org-profile__section-title { font-size: 0.85rem; font-weight: 600; color: var(--authkit-fg); margin-bottom: 0.4rem; } .authkit-org-profile__members { display: flex; flex-direction: column; gap: 0.25rem; } .authkit-org-profile__member { display: flex; align-items: center; gap: 0.5rem; padding: 0.3rem 0; border-bottom: 1px solid var(--authkit-border); } .authkit-org-profile__member:last-child { border-bottom: none; } .authkit-org-profile__member-info { display: flex; flex-direction: column; } .authkit-org-profile__member-email { font-size: 0.875rem; color: var(--authkit-fg); } .authkit-org-profile__member-role { font-size: 0.75rem; color: var(--authkit-muted); } .authkit-org-profile__invite-form { display: flex; flex-direction: column; gap: 0.4rem; margin-top: 0.75rem; } .authkit-org-profile__empty { font-size: 0.875rem; color: var(--authkit-muted); } /* ─── KeyRotation ──────────────────────────────────────────────────────────── */ .authkit-keys { display: flex; flex-direction: column; gap: var(--authkit-gap); } .authkit-keys__title { font-size: 1rem; font-weight: 600; color: var(--authkit-fg); margin: 0 0 0.5rem; } .authkit-keys__stats { display: grid; grid-template-columns: max-content 1fr; gap: 0.2rem 0.75rem; margin: 0 0 0.5rem; font-size: 0.875rem; } .authkit-keys__stats dt { color: var(--authkit-muted); } .authkit-keys__stats dd { margin: 0; color: var(--authkit-fg); } .authkit-keys__retire { display: flex; align-items: center; gap: 0.4rem; font-size: 0.875rem; color: var(--authkit-fg); cursor: pointer; } .authkit-keys__loading { color: var(--authkit-muted); font-size: 0.9rem; }