/* * This file is part of the TYPO3 CMS project. * * It is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License, either version 2 * of the License, or any later version. * * For the full copyright and license information, please read the * LICENSE.txt file that was distributed with this source code. * * The TYPO3 project - inspiring people to share! */ import{LitElement as f,html as a,nothing as m}from"lit";import{property as d,state as l,customElement as y}from"lit/decorators.js";import{classMap as S}from"lit/directives/class-map.js";import{createRef as b,ref as v}from"lit/directives/ref.js";import{KeyTypesEnum as g}from"@typo3/backend/enum/key-types.js";import k from"@typo3/backend/modal.js";import"@typo3/backend/element/alert-element.js";import"@typo3/backend/element/icon-element.js";import"@typo3/backend/element/progress-tracker-element.js";import"@typo3/backend/element/spinner-element.js";import w from"@typo3/backend/wizard/steps/confirm-step.js";import x from"@typo3/backend/wizard/steps/finisher-step.js";import c from"~labels/backend.wizards.general";import{BeforeNextStepEvent as T}from"@typo3/backend/wizard/events/before-next-step-event.js";var o=function(p,t,e,r){var s=arguments.length,i=s<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,e):r,u;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(p,t,e,r);else for(var h=p.length-1;h>=0;h--)(u=p[h])&&(i=(s<3?u(i):s>3?u(t,e,i):u(t,e))||i);return s>3&&i&&Object.defineProperty(t,e,i),i};let n=class extends f{constructor(){super(...arguments),this.steps=[],this.skipSummary=!1,this.currentStepIndex=0,this.dataStore={},this.allSteps=[],this.progressTracker=null,this.primaryButtonRef=b(),this.focusPendingStep=null,this.handleAutoAdvance=()=>{this.tryAutoAdvance()},this.handleContentKeydown=t=>{if(t.key!==g.ENTER)return;const e=t.target;!(e instanceof HTMLInputElement)||e.form||e.type==="search"||e.type==="checkbox"||(t.preventDefault(),this.handleNext())}}connectedCallback(){super.connectedCallback(),this.addEventListener("auto-advance",this.handleAutoAdvance),this.progressTracker=document.createElement("typo3-backend-progress-tracker")}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("auto-advance",this.handleAutoAdvance),this.progressTracker=null}getStepSummaries(){const t=[];for(const e of this.allSteps)if(this.hasSummary(e)){const r=e.getSummaryData();t.push(...r)}return t}getStoreData(t){return this.dataStore[t]??null}setStoreData(t,e){this.dataStore={...this.dataStore,[t]:e}}getDataStore(){return this.dataStore}clearStoreData(t){const e={...this.dataStore};delete e[t],this.dataStore=e}tryAutoAdvance(){const t=this.getCurrentStep();t.autoAdvance&&t.isComplete()&&this.goToNextStep()}dismissWizard(){k.dismiss()}renderLoader(t){return a`

${t??c.get("wizard.loading")}

`}renderError(t,e,r){let s="";e instanceof Error?s=e.message:Array.isArray(e)?s=e.join(` `):e&&typeof e=="string"&&(s=e);const i=s?`${t} ${s}`:t;return a`
`}render(){return a`
${this.renderProgressTracker()}
${this.currentStep?.render()}
${this.renderWizardButtons()}
`}goToNextStep(){this.currentStepIndex0&&this.goToStep(this.currentStepIndex-1)}createRenderRoot(){return this}async updated(t){super.updated(t),(t.has("steps")||t.has("submissionService"))&&this.steps?.length&&this.submissionService&&(this.allSteps=[...this.steps,...this.skipSummary?[]:[new w(this)],new x(this,this.submissionService)],this.progressTracker.requestUpdate(),this.currentStep||(this.currentStep=this.allSteps[this.currentStepIndex])),this.currentStep&&t.has("currentStep")&&(this.hasAfterRender(this.currentStep)&&(await this.currentStep.afterRender(),this.requestUpdate()),this.focusPendingStep=this.currentStep),await this.moveFocusIntoStep()}async moveFocusIntoStep(){const t=this.focusPendingStep;if(!t||t!==this.currentStep){this.focusPendingStep=null;return}await this.updateComplete,t===this.currentStep&&this.focusStepContent()&&(this.focusPendingStep=null)}focusStepContent(){const t=this.renderRoot.querySelector(".wizard-content");if(t){if(t.contains(this.ownerDocument.activeElement))return!0;const r=this.findFocusTarget(t);if(r)return r.setAttribute("autofocus",""),r.focus(),!0}return this.renderRoot.querySelector(".wizard-actions")?.contains(this.ownerDocument.activeElement)||this.primaryButtonRef.value?.focus(),!1}findFocusTarget(t){const e=r=>{for(const s of t.querySelectorAll(r))if(!s.matches(":disabled")&&s.checkVisibility())return s;return null};return e("[autofocus]")??e('input[type="radio"]:checked')??e('input:not([type="hidden"]):not([type="radio"]):not([readonly]), select, button, textarea:not([readonly]), [contenteditable]:not([contenteditable="false"]), [tabindex]:not([tabindex="-1"])')}hasAfterRender(t){return t&&typeof t.afterRender=="function"}hasSummary(t){return"getSummaryData"in t}hasValue(t){return"getValue"in t&&"setValue"in t&&"reset"in t}renderWizardButtons(){return a`${this.renderPreviousButton()} ${this.renderNextButtons()}`}renderPreviousButton(){const t=this.currentStepIndex===0,e=this.currentStepIndex===this.allSteps.length-1;return a``}renderNextButtons(){const t=this.currentStep?.isComplete();let e,r=m;if(this.currentStep?.key==="finisher"){e=c.get("wizard.buttons.finish");const s=this.currentStep;s?.resetButtonTitle&&(r=a``)}else this.currentStep?.key==="confirm"?e=this.confirmButtonLabel:e=c.get("wizard.buttons.next");return a`
${r}
`}getCurrentStep(){return this.currentStep}async goToStep(t){if(!(t<0||t>=this.allSteps.length||t===this.currentStepIndex)){if(t>this.currentStepIndex){for(let r=this.currentStepIndex;rt;e--){const r=this.allSteps[e];this.hasValue(r)&&r.reset()}this.currentStepIndex=t,this.currentStep=this.allSteps[t],await this.updateComplete}}getProgressSteps(){return this.allSteps.map(t=>({key:t.key,title:t.title}))}getCurrentStepIndex(){return this.currentStepIndex}renderProgressTracker(){const t=this.getProgressSteps(),e=this.getCurrentStepIndex(),r=t.map(i=>i.title),s=e+1;return this.progressTracker&&(this.progressTracker.stages=r,this.progressTracker.activeStage=s),a`${this.progressTracker}`}handlePrevious(){const t=this.currentStepIndex===0,e=this.currentStepIndex===this.allSteps.length-1;t||e||this.goToPreviousStep()}async handleNext(){if(!this.currentStep.isComplete())return;if(this.currentStepIndex===this.allSteps.length-1){this.currentStep.beforeAdvance&&await this.currentStep.beforeAdvance();return}this.goToNextStep()}handleRestart(){this.dataStore={},this.goToStep(0).then(()=>this.updateComplete)}};o([d({type:Array,attribute:!1})],n.prototype,"steps",void 0),o([d({type:String,attribute:"confirm-button-label"})],n.prototype,"confirmButtonLabel",void 0),o([d({type:Boolean,attribute:"skip-summary"})],n.prototype,"skipSummary",void 0),o([d({type:Object,attribute:!1})],n.prototype,"submissionService",void 0),o([l()],n.prototype,"currentStepIndex",void 0),o([l()],n.prototype,"currentStep",void 0),o([l()],n.prototype,"dataStore",void 0),o([l()],n.prototype,"allSteps",void 0),n=o([y("typo3-backend-wizard")],n);export{n as Wizard};