1import{a as h}from"./chunk-2GOU373Y.js";import{a as L}from"./chunk-5KIDWFX2.js";import{a as P}from"./chunk-FLSSQY4S.js";import{c as C}from"./chunk-IFDVRLCM.js";import{a as v}from"./chunk-3ZXF4WD3.js";import{a as W,b as x,c as N}from"./chunk-4EO2KNVY.js";import{a as D,b as q,c as Y}from"./chunk-RCUYZO7A.js";import{a as H,b as y,c as V,i as U}from"./chunk-NOFJ6GXZ.js";import{H as A,I as _,J as u,K as m,M as k}from"./chunk-VM53P45Q.js";import{c as S,g as a,h as M,i as p,m as I,n as l}from"./chunk-WQ3TMWBQ.js";import{d as n}from"./chunk-SYELWAOX.js";function O(r,o){let e=a`<i class="fas fa-share-square" title="${r}"></i>`;if(o){if(o.startsWith("fa://")){let t=o.replaceAll("fa://","");return a`<i class="fas ${t}" title="${r}"></i>`}return a`<img src="${o}" alt="${r}" />`}return e}function B(r,o){return!o||!("shadowRoot"in o)||o.shadowRoot===null?!1:o.shadowRoot.activeElement===r?!0:B(o.shadowRoot.activeElement,o)}var j=y(class extends V{constructor(r){if(super(r),r.type!==H.ATTRIBUTE||r.name!=="class"||r.strings?.length>2)throw Error("`classMap()` can only be used in the `class` attribute and must be the only part in the attribute.")}render(r){return" "+Object.keys(r).filter(o=>r[o]).join(" ")+" "}update(r,[o]){if(this.st===void 0){this.st=new Set,r.strings!==void 0&&(this.nt=new Set(r.strings.join(" ").split(/\s/).filter(t=>t!=="")));for(let t in o)o[t]&&!this.nt?.has(t)&&this.st.add(t);return this.render(o)}let e=r.element.classList;for(let t of this.st)t in o||(e.remove(t),this.st.delete(t));for(let t in o){let i=!!o[t];i===this.st.has(t)||this.nt?.has(t)||(i?(e.add(t),this.st.add(t)):(e.remove(t),this.st.delete(t)))}return M}});var F=()=>new R,R=class{},$=new WeakMap,E=y(class extends U{render(r){return p}update(r,[o]){let e=o!==this.Y;return e&&this.Y!==void 0&&this.rt(void 0),(e||this.lt!==this.ct)&&(this.Y=o,this.ht=r.options?.host,this.rt(this.ct=r.element)),p}rt(r){if(this.isConnected||(r=void 0),typeof this.Y=="function"){let o=this.ht??globalThis,e=$.get(o);e===void 0&&(e=new WeakMap,$.set(o,e)),e.get(this.Y)!==void 0&&this.Y.call(this.ht,void 0),e.set(this.Y,r),r!==void 0&&this.Y.call(this.ht,r)}else this.Y.value=r}get lt(){return typeof this.Y=="function"?$.get(this.ht??globalThis)?.get(this.Y):this.Y?.value}disconnected(){this.lt===this.ct&&this.rt(void 0)}reconnected(){this.rt(this.ct)}});var w=`.pf-c-input-group { 2 --pf-global--Color--100: var(--pf-global--Color--dark-100); 3 --pf-global--Color--200: var(--pf-global--Color--dark-200); 4 --pf-global--BorderColor--100: var(--pf-global--BorderColor--dark-100); 5 --pf-global--primary-color--100: var(--pf-global--primary-color--dark-100); 6 --pf-global--link--Color: var(--pf-global--link--Color--dark); 7 --pf-global--link--Color--hover: var(--pf-global--link--Color--dark--hover); 8 --pf-global--BackgroundColor--100: var(--pf-global--BackgroundColor--light-100); 9} 10 11.pf-c-input-group { 12 --pf-c-input-group--BackgroundColor: var(--pf-global--BackgroundColor--100); 13 --pf-c-input-group--child--ZIndex: var(--pf-global--ZIndex--xs); 14 --pf-c-input-group__text--FontSize: var(--pf-global--FontSize--md); 15 --pf-c-input-group__text--PaddingRight: var(--pf-global--spacer--sm); 16 --pf-c-input-group__text--PaddingLeft: var(--pf-global--spacer--sm); 17 --pf-c-input-group__text--Color: var(--pf-global--Color--dark-200); 18 --pf-c-input-group__text--BorderWidth: var(--pf-global--BorderWidth--sm); 19 --pf-c-input-group__text--BorderTopColor: var(--pf-global--BorderColor--300); 20 --pf-c-input-group__text--BorderRightColor: var(--pf-global--BorderColor--300); 21 --pf-c-input-group__text--BorderBottomColor: var(--pf-global--BorderColor--200); 22 --pf-c-input-group__text--BorderLeftColor: var(--pf-global--BorderColor--300); 23 --pf-c-input-group__text--BackgroundColor: var(--pf-global--BackgroundColor--100); 24 --pf-c-input-group__textarea--MinHeight: var(--pf-global--spacer--xl); 25 --pf-c-input-group__text--m-disabled--Color: var(--pf-global--disabled-color--100); 26 --pf-c-input-group__text--m-disabled--BackgroundColor: var(--pf-global--disabled-color--300); 27 --pf-c-input-group__text--m-disabled--BorderBottomColor: transparent; 28 --pf-c-input-group--c-form-control--invalid--ZIndex: var(--pf-global--ZIndex--xs); 29 --pf-c-input-group--c-form-control--MarginRight: 0; 30 color: var(--pf-global--Color--100); 31 display: flex; 32 width: 100%;
33 background-color: var(--pf-c-input-group--BackgroundColor); 34} 35.pf-c-input-group.pf-m-plain { 36 --pf-c-input-group--BackgroundColor: transparent; 37} 38.pf-c-input-group > * + * { 39 margin-left: -1px; 40} 41.pf-c-input-group > :focus, 42.pf-c-input-group > :focus-within { 43 z-index: var(--pf-c-input-group--child--ZIndex); 44} 45.pf-c-input-group .pf-c-form-control[aria-invalid=true]:not(:last-child) { 46 margin-right: var(--pf-c-input-group--c-form-control--MarginRight); 47} 48.pf-c-input-group input:not([type=checkbox]):not([type=radio]), 49.pf-c-input-group textarea { 50 flex: 2; 51 min-width: 0; 52} 53.pf-c-input-group textarea { 54 min-height: var(--pf-c-input-group__textarea--MinHeight); 55} 56 57.pf-c-input-group__text { 58 display: flex; 59 align-items: center; 60 padding-right: var(--pf-c-input-group__text--PaddingRight); 61 padding-left: var(--pf-c-input-group__text--PaddingLeft); 62 font-size: var(--pf-c-input-group__text--FontSize); 63 color: var(--pf-c-input-group__text--Color); 64 text-align: center; 65 background-color: var(--pf-c-input-group__text--BackgroundColor); 66 border: var(--pf-c-input-group__text--BorderWidth) solid; 67 border-color: var(--pf-c-input-group__text--BorderTopColor) var(--pf-c-input-group__text--BorderRightColor) var(--pf-c-input-group__text--BorderBottomColor) var(--pf-c-input-group__text--BorderLeftColor); 68} 69label.pf-c-input-group__text { 70 cursor: pointer; 71} 72 73.pf-c-input-group__text.pf-m-plain { 74 --pf-c-input-group__text--BorderWidth: 0; 75 margin-left: 0; 76} 77.pf-c-input-group__text.pf-m-disabled { 78 --pf-c-input-group__text--Color: var(--pf-c-input-group__text--m-disabled--Color); 79 --pf-c-input-group__text--BackgroundColor: var(--pf-c-input-group__text--m-disabled--BackgroundColor); 80 --pf-c-input-group__text--BorderBottomColor: var(--pf-c-input-group__text--m-disabled--BorderBottomColor); 81} 82 83:where(.pf-theme-dark) .pf-c-input-group { 84 --pf-c-input-group--BackgroundColor: transparent; 85 --pf-c-input-group__text--BorderTopColor: transparent; 86 --pf-c-input-group__text--BorderRightColor: transparent; 87 --pf-c-input-group__text--BorderBottomColor: var(--pf-global--BorderColor--400); 88 --pf-c-input-group__text--BorderLeftColor: transparent; 89 --pf-c-input-group__text--BackgroundColor: var(--pf-global--palette--black-600); 90 --pf-c-input-group__text--m-disabled--Color: var(--pf-global--palette--black-100); 91 --pf-c-input-group__text--m-disabled--BackgroundColor: var(--pf-global--disabled-color--200); 92} 93:where(.pf-theme-dark) .pf-c-input-group > * + * { 94 margin-left: 0; 95 border-left: 1px solid var(--pf-global--palette--black-700); 96} 97:where(.pf-theme-dark) .pf-c-input-group__text { 98 --pf-c-input-group__text--BorderTopColor: transparent; 99 --pf-c-input-group__text--BorderRightColor: transparent; 100 --pf-c-input-group__text--BorderBottomColor: var(--pf-global--BorderColor--400); 101 --pf-c-input-group__text--BorderLeftColor: transparent; 102} 103:where(.pf-theme-dark) .pf-c-input-group__text.pf-m-plain { 104 --pf-c-input-group__text--BackgroundColor: transparent; 105} 106:where(.pf-theme-dark) .pf-c-input-group__text.pf-m-disabled { 107 --pf-c-input-group__text--BackgroundColor: var(--pf-c-input-group__text--m-disabled--BackgroundColor); 108 color: var(--pf-c-input-group__text--m-disabled--Color); 109}`;var f={Reveal:{icon:"fa-eye",label:l("Show password")},Mask:{icon:"fa-eye-slash",label:l("Hide password")}},s=class extends A{constructor(){super(...arguments);this.inputId="ak-stage-password-input";this.name="password";this.label=l("Password");this.placeholder=l("Please enter your password");this.initialValue="";this.errors={};this.allowShowPassword=!1;this.passwordVisible=!1;this.grabFocus=!1;this.inputRef=F();this.toggleVisibilityRef=F();this.capsLock=!1}static get styles(){return[k,w,x,v]}togglePasswordVisibility(e){e?.stopPropagation(),e?.preventDefault();let t=this.inputRef.value;if(!t){console.warn("ak-flow-password-input: unable to identify input field");return}t.type=t.type==="password"?"text":"password",this.syncVisibilityToggle(t)}capsLockListener(e){this.capsLock=e.getModifierState("CapsLock")}observeInputFocus(){this.grabFocus&&(this.inputFocusIntervalID=setInterval(()=>{let e=this.inputRef.value;e&&(B(e,document.activeElement)&&(console.debug("authentik/stages/password: cleared focus observer"),clearInterval(this.inputFocusIntervalID)),e.focus())},10),console.debug("authentik/stages/password: started focus observer"))}connectedCallback(){super.connectedCallback(),this.observeInputFocus(),addEventListener("keydown",this.capsLockListener),addEventListener("keyup",this.capsLockListener)}disconnectedCallback(){this.inputFocusIntervalID&&clearInterval(this.inputFocusIntervalID),super.disconnectedCallback(),removeEventListener("keydown",this.capsLockListener),removeEventListener("keyup",this.capsLockListener)}createRenderRoot(){return this}syncVisibilityToggle(e=this.inputRef.value){if(!e)return;let t=this.toggleVisibilityRef.value;if(!t)return;let i=e.type==="password";t.setAttribute("aria-label",i?f.Reveal.label:f.Mask.label);let c=t.querySelector("i");c.classList.remove(f.Mask.icon,f.Reveal.icon),c.classList.add(i?f.Reveal.icon:f.Mask.icon)}renderVisibilityToggle(){if(!this.allowShowPassword)return p;let{label:e,icon:t}=this.passwordVisible?f.Mask:f.Reveal;return a`<button 110 ${E(this.toggleVisibilityRef)} 111 aria-label=${e} 112 @click=${this.togglePasswordVisibility} 113 class="pf-c-button pf-m-control" 114 type="button" 115 > 116 <i class="fas ${t}" aria-hidden="true"></i> 117 </button>`}renderHelperText(){return this.capsLock?a`<div 118 class="pf-c-form__helper-text" 119 id="helper-text-form-caps-lock-helper"
120 aria-live="polite" 121 > 122 <div class="pf-c-helper-text"> 123 <div class="pf-c-helper-text__item pf-m-warning"> 124 <span class="pf-c-helper-text__item-icon"> 125 <i class="fas fa-fw fa-exclamation-triangle" aria-hidden="true"></i> 126 </span> 127 128 <span class="pf-c-helper-text__item-text">${l("Caps Lock is enabled.")}</span> 129 </div> 130 </div> 131 </div>`:p}render(){return a` <ak-form-element 132 label="${this.label}" 133 required 134 class="pf-c-form__group" 135 .errors=${this.errors} 136 > 137 <div class="pf-c-form__group-control"> 138 <div class="pf-c-input-group"> 139 <input 140 type=${this.passwordVisible?"text":"password"} 141 id=${this.inputId} 142 name=${this.name} 143 placeholder=${this.placeholder} 144 autocomplete="current-password" 145 class="${j({"pf-c-form-control":!0,"pf-m-icon":!0,"pf-m-caps-lock":this.capsLock})}" 146 required 147 aria-invalid=${q(this.invalid)} 148 value=${this.initialValue} 149 ${E(this.inputRef)} 150 /> 151 152 ${this.renderVisibilityToggle()} 153 </div> 154 155 ${this.renderHelperText()} 156 </div> 157 </ak-form-element>`}};n([u({type:String,attribute:"input-id"})],s.prototype,"inputId",2),n([u({type:String})],s.prototype,"name",2),n([u({type:String})],s.prototype,"label",2),n([u({type:String})],s.prototype,"placeholder",2),n([u({type:String,attribute:"prefill"})],s.prototype,"initialValue",2),n([u({type:Object})],s.prototype,"errors",2),n([u({type:String})],s.prototype,"invalid",2),n([u({type:Boolean,attribute:"allow-show-password"})],s.prototype,"allowShowPassword",2),n([u({type:Boolean,attribute:"password-visible"})],s.prototype,"passwordVisible",2),n([u({type:Boolean,attribute:"grab-focus"})],s.prototype,"grabFocus",2),n([m()],s.prototype,"capsLock",2),n([C],s.prototype,"togglePasswordVisibility",1),n([C],s.prototype,"capsLockListener",1),s=n([_("ak-flow-input-password")],s);var T={password:void 0,totp:void 0},K=new Intl.ListFormat("default",{style:"short",type:"disjunction"}),g=class extends Y{constructor(){super(...arguments);this.captchaToken="";this.captchaRefreshedAt=new Date}static get styles(){return[k,P,w,N,W,x,D,v,S` 158 .pf-c-login__main-footer-links-item button { 159 background-color: transparent; 160 border: 0; 161 display: flex; 162 align-items: stretch; 163 } 164 .pf-c-login__main-footer-links-item img { 165 fill: var(--pf-c-login__main-footer-links-item-link-svg--Fill); 166 width: 100px; 167 max-width: var(--pf-c-login__main-footer-links-item-link-svg--Width); 168 height: 100%; 169 max-height: var(--pf-c-login__main-footer-links-item-link-svg--Height); 170 } 171 `]}updated(e){e.has("challenge")&&this.challenge!==void 0&&(this.autoRedirect(),this.createHelperForm())}autoRedirect(){if(!this.challenge||this.challenge.sources?.length!==1||(this.challenge.userFields||[]).length!==0||this.challenge.passwordlessUrl)return;let e=this.challenge.sources[0];this.host.challenge=e.challenge}createHelperForm(){let e="ShadyDOM"in window;if(this.form=document.createElement("form"),document.documentElement.appendChild(this.form),!e){let i=document.createElement("input");i.setAttribute("type","text"),i.setAttribute("name","username"),i.setAttribute("autocomplete","username"),i.onkeyup=c=>{let d=c.target;(this.shadowRoot||this).querySelectorAll("input[name=uidField]").forEach(b=>{b.value=d.value,b.focus()})},this.form.appendChild(i)}if(!e&&!this.challenge.passwordFields){let i=document.createElement("input");i.setAttribute("type","password"),i.setAttribute("name","password"),i.setAttribute("autocomplete","current-password"),i.onkeyup=c=>{c.key=="Enter"&&this.submitForm(c);let d=c.target;T.password=d.value,(this.shadowRoot||this).querySelectorAll("input[name=uidField]").forEach(b=>{b.focus()})},this.form.appendChild(i)}let t=document.createElement("input");t.setAttribute("type","text"),t.setAttribute("name","code"),t.setAttribute("autocomplete","one-time-code"),t.onkeyup=i=>{i.key=="Enter"&&this.submitForm(i);let c=i.target;T.totp=c.value,(this.shadowRoot||this).querySelectorAll("input[name=uidField]").forEach(d=>{d.focus()})},this.form.appendChild(t)}onSubmitSuccess(){this.form&&this.form.remove()}onSubmitFailure(){this.captchaRefreshedAt=new Date}renderSource(e){let t=O(e.name,e.iconUrl);return a`<li class="pf-c-login__main-footer-links-item"> 172 <button 173 type="button" 174 @click=${()=>{this.host&&(this.host.challenge=e.challenge)}} 175 class=${this.challenge.showSourceLabels?"pf-c-button pf-m-link":""} 176 >
177 <span class="pf-c-button__icon pf-m-start">${t}</span> 178 ${this.challenge.showSourceLabels?e.name:""} 179 </button> 180 </li>`}renderFooter(){return!this.challenge?.enrollUrl&&!this.challenge?.recoveryUrl?p:a`<div class="pf-c-login__main-footer-band"> 181 ${this.challenge.enrollUrl?a`<p class="pf-c-login__main-footer-band-item"> 182 ${l("Need an account?")} 183 <a id="enroll" href="${this.challenge.enrollUrl}">${l("Sign up.")}</a> 184 </p>`:p} 185 ${this.challenge.recoveryUrl?a`<p class="pf-c-login__main-footer-band-item"> 186 <a id="recovery" href="${this.challenge.recoveryUrl}" 187 >${l("Forgot username or password?")}</a 188 > 189 </p>`:p} 190 </div>`}renderInput(){let e="text";if(!this.challenge?.userFields||this.challenge.userFields.length===0)return a`<p>${l("Select one of the options below to continue.")}</p>`;let t=(this.challenge?.userFields||[]).sort();t.includes(h.Email)&&t.length===1&&(e="email");let i={[h.Username]:l("Username"),[h.Email]:l("Email"),[h.Upn]:l("UPN")},c=K.format(t.map(d=>i[d]));return a`${this.challenge.flowDesignation===L.Recovery?a` 191 <p> 192 ${l("Enter the email associated with your account, and we'll send you a link to reset your password.")} 193 </p> 194 `:p} 195 <ak-form-element 196 label=${c} 197 required 198 class="pf-c-form__group" 199 .errors=${(this.challenge.responseErrors||{}).uid_field} 200 > 201 <input 202 type=${e} 203 name="uidField" 204 placeholder=${c} 205 autofocus="" 206 autocomplete="username" 207 spellcheck="false" 208 class="pf-c-form-control" 209 required 210 /> 211 </ak-form-element> 212 ${this.challenge.passwordFields?a` 213 <ak-flow-input-password 214 label=${l("Password")} 215 inputId="ak-stage-identification-password" 216 required 217 class="pf-c-form__group" 218 .errors=${(this.challenge?.responseErrors||{}).password} 219 ?allow-show-password=${this.challenge.allowShowPassword} 220 prefill=${T.password??""} 221 ></ak-flow-input-password> 222 `:p} 223 ${this.renderNonFieldErrors()} 224 ${this.challenge.captchaStage?a` 225 <input name="captchaToken" type="hidden" .value="${this.captchaToken}" /> 226 <ak-stage-captcha 227 .challenge=${this.challenge.captchaStage} 228 .onTokenChange=${d=>{this.captchaToken=d}} 229 .refreshedAt=${this.captchaRefreshedAt} 230 embedded 231 ></ak-stage-captcha> 232 `:p} 233 <div class="pf-c-form__group pf-m-action"> 234 <button type="submit" class="pf-c-button pf-m-primary pf-m-block"> 235 ${this.challenge.primaryAction} 236 </button> 237 </div> 238 ${this.challenge.passwordlessUrl?a`<ak-divider>${l("Or")}</ak-divider>`:p}`}render(){return this.challenge?a`<header class="pf-c-login__main-header"> 239 <h1 class="pf-c-title pf-m-3xl">${this.challenge.flowInfo?.title}</h1> 240 </header> 241 <div class="pf-c-login__main-body"> 242 <form 243 class="pf-c-form" 244 @submit=${e=>{this.submitForm(e)}} 245 > 246 ${this.challenge.applicationPre?a`<p> 247 ${l(I`Login to continue to ${this.challenge.applicationPre}.`)} 248 </p>`:p} 249 ${this.renderInput()} 250 ${this.challenge.passwordlessUrl?a` 251 <div> 252 <a 253 href=${this.challenge.passwordlessUrl} 254 class="pf-c-button pf-m-secondary pf-m-block" 255 >
256 ${l("Use a security key")} 257 </a> 258 </div> 259 `:p} 260 </form> 261 </div> 262 <footer class="pf-c-login__main-footer"> 263 <ul class="pf-c-login__main-footer-links"> 264 ${(this.challenge.sources||[]).map(e=>this.renderSource(e))} 265 </ul> 266 ${this.renderFooter()} 267 </footer>`:a`<ak-empty-state loading> </ak-empty-state>`}};n([m()],g.prototype,"captchaToken",2),n([m()],g.prototype,"captchaRefreshedAt",2),g=n([_("ak-stage-identification")],g);export{w as a,T as b,K as c,g as d}; 268/*! Bundled license information: 269 270lit-html/directives/class-map.js: 271 (** 272 * @license 273 * Copyright 2018 Google LLC 274 * SPDX-License-Identifier: BSD-3-Clause 275 *) 276 277lit-html/directives/ref.js: 278 (** 279 * @license 280 * Copyright 2020 Google LLC 281 * SPDX-License-Identifier: BSD-3-Clause 282 *) 283*/ 284//# sourceMappingURL=chunk-7EAKTWRW.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.