@fkui/vue 5.37.0 → 5.37.1

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.
@@ -239,22 +239,7 @@ isIndex(key,length)))){result.push(key);}}return result;}var _arrayLikeKeys=arra
239
239
  * The items to be diplayed in the menu
240
240
  */items:{type:Array,required:true},/**
241
241
  * Unique accessible name for navigation landmark.
242
- */ariaLabel:{type:String,required:false,default:"Kontextuell meny"}},emits:["close","select"],setup(){return{contextmenu:vue.ref(null)};},data(){return{selectedItem:"",currentFocusedItemIndex:-1};},computed:{popupItems(){return this.items.filter(isContextMenuTextItem);},separatorPositions(){const res=[];if(this.items.length>1){this.items.forEach((it,i)=>{if(isContextMenuSeparatorItem(it)){const pos=i-1-res.length;if(pos>=0&&pos<this.items.length-1){res.push(pos);}}});}return res;},hasIcons(){return this.items.some(it=>isContextMenuTextItem(it)&&it.icon);}},watch:{isOpen:{immediate:true,async handler(){if(this.isOpen){this.currentFocusedItemIndex=-1;this.selectedItem="";}}}},methods:{hasSeparatorAfterItemAt(index){return this.separatorPositions.includes(index);},closePopup(){this.$emit("close");},onClickItem(item){if(isContextMenuTextItem(item)&&item.key){this.selectedItem=item.key;this.$emit("select",this.selectedItem);this.closePopup();}},tabIndex(index){return index===this.currentFocusedItemIndex?0:-1;},onKeyUp(event){if(preventKeys$3.includes(event.key)){event.preventDefault();}},doHandlePopupMenuTabKey(action){if(action===MenuAction.MOVE_NEXT&&this.currentFocusedItemIndex+1===this.popupItems.length){this.closePopup();return true;}else if(action===MenuAction.MOVE_PREV&&(this.currentFocusedItemIndex===0||this.currentFocusedItemIndex===-1)){this.closePopup();return false;}return false;},async onKeyDown(event){if(!preventKeys$3.includes(event.key)){return;}if(event.key==="Escape"){this.$emit("close");return;}const action=actionFromKeyboardEvent(event);if(action===null){return;}if(event.key==="Tab"&&this.doHandlePopupMenuTabKey(action)){return;}if(keyUp$1.includes(event.key)&&this.currentFocusedItemIndex===-1){this.currentFocusedItemIndex=this.popupItems.length>0?this.popupItems.length:1;}event.preventDefault();await doMenuAction$3(action,this);},async setFocusOnItem(index){if(index<0||index>=this.popupItems.length){return;}this.currentFocusedItemIndex=index;await this.$nextTick();if(!this.isOpen){return;}const items=getHTMLElementsFromVueRef(this.$refs.items);if(items.length>0){const popupMenuItem=items[index];logic.focus(popupMenuItem,{preventScroll:true});}},async activateItem(index){if(index<0||index>=this.popupItems.length){return;}if(index!==this.currentFocusedItemIndex){await this.setFocusOnItem(index);}this.onClickItem(this.popupItems[this.currentFocusedItemIndex]);}}});const _hoisted_1$I=["aria-label"];const _hoisted_2$w={ref:"contextmenu",role:"menu",tabindex:"-1",class:"contextmenu__list"};const _hoisted_3$s=["onClick"];const _hoisted_4$n=["tabindex"];const _hoisted_5$l={key:0,class:"contextmenu__separator"};function _sfc_render$N(_ctx,_cache,$props,$setup,$data,$options){const _component_f_icon=vue.resolveComponent("f-icon");const _component_i_popup=vue.resolveComponent("i-popup");return vue.openBlock(),vue.createBlock(_component_i_popup,{"is-open":_ctx.isOpen,"keyboard-trap":false,anchor:_ctx.anchor,"set-focus":true,"focus-element":()=>_ctx.contextmenu,inline:"never",onClose:_cache[2]||(_cache[2]=$event=>_ctx.$emit("close"))},{default:vue.withCtx(()=>[vue.createElementVNode("nav",{class:"contextmenu","aria-label":_ctx.ariaLabel,onKeyup:_cache[0]||(_cache[0]=(...args)=>_ctx.onKeyUp&&_ctx.onKeyUp(...args)),onKeydown:_cache[1]||(_cache[1]=(...args)=>_ctx.onKeyDown&&_ctx.onKeyDown(...args))},[vue.createElementVNode("ul",_hoisted_2$w,[(vue.openBlock(true),vue.createElementBlock(vue.Fragment,null,vue.renderList(_ctx.popupItems,(item,index)=>{return vue.openBlock(),vue.createElementBlock("li",{key:item.key,role:"menuitem",onClick:$event=>_ctx.onClickItem(item)},[vue.createElementVNode("div",{ref_for:true,ref:"items",tabindex:_ctx.tabIndex(index),class:"contextmenu__list__item"},[_ctx.hasIcons?(vue.openBlock(),vue.createBlock(_component_f_icon,{key:0,class:"contextmenu__lefticon",name:item.icon?item.icon:"",library:item.iconLibrary?item.iconLibrary:"f"},null,8,["name","library"])):vue.createCommentVNode("v-if",true),vue.createTextVNode(),vue.createElementVNode("a",{ref_for:true,ref:"anchors"},vue.toDisplayString(item.label),513/* TEXT, NEED_PATCH */)],8,_hoisted_4$n),vue.createTextVNode(),_ctx.hasSeparatorAfterItemAt(index)?(vue.openBlock(),vue.createElementBlock("hr",_hoisted_5$l)):vue.createCommentVNode("v-if",true)],8,_hoisted_3$s);}),128/* KEYED_FRAGMENT */))],512/* NEED_PATCH */)],40,_hoisted_1$I)]),_:1/* STABLE */},8,["is-open","anchor","focus-element"]);}const FContextMenu=/* @__PURE__ */_export_sfc(_sfc_main$X,[["render",_sfc_render$N]]);const anyType$1=[String,Object,Array,Number,Date,Boolean];const _sfc_main$W=vue.defineComponent({name:"FCheckboxField",inheritAttrs:false,props:{/**
243
- * Set to `true`, empty string `""` or string `"disabled"` to disable this input field.
244
- */disabled:{type:Boolean,required:false,default:false},/**
245
- * The id for the input id attribute.
246
- * The id for the label for attribute.
247
- * If the prop is not set a random value will be generated.
248
- */id:{type:String,required:false,default:()=>logic.ElementIdService.generateElementId()},/**
249
- * The value for the input checked attribute.
250
- * @model
251
- */// ? The rule is disabled so that the `checked` prop can be undefined or null.
252
- /* eslint-disable-next-line vue/require-default-prop -- technical debt,
253
- /* it should contain a default value of undefined and proptype should
254
- /* include undefined (see comment on line above) */modelValue:{type:anyType$1,required:false},/**
255
- * The value for the input.
256
- */value:{type:anyType$1,required:true}},emits:["change","update:modelValue"],setup(){return{showDetails:vue.inject("showDetails","never"),getFieldsetLabelText:vue.inject("getFieldsetLabelText",()=>"")};},data(){return{expanded:false,height:0,initialStyle:{overflow:"hidden",transition:"height 400ms cubic-bezier(0.46, 0.03, 0.52, 0.96)"},hiddenStyle:{height:"auto",position:"absolute",visibility:"hidden"},visibleStyle:{width:"",position:"",visibility:"",height:"0px"},openedStyle:{height:"auto"}};},computed:{attrs(){let checked;if(Array.isArray(this.modelValue)){checked=this.modelValue.findIndex(it=>lodash.isEqual(vue.toValue(it),vue.toValue(this.value)))>=0;}else{checked=this.value===this.modelValue;}return{...this.$attrs,value:this.value,checked,onChange:event=>{if(event.target instanceof HTMLInputElement){this.emitVModelEvent(event);}},onInput:event=>{event.target.focus();}};},disabledClass(){return this.disabled?"disabled":"";},// eslint-disable-next-line @typescript-eslint/no-explicit-any -- technical debt, nore sure whats going on here
257
- injected(){return this;}},methods:{updateExpandedFlag(){const checkboxInput=getHTMLElementFromVueRef(this.$refs["checkboxInput"]);this.expanded=checkboxInput.checked;},emitVModelEvent(event){let newModel;if(Array.isArray(this.modelValue)){newModel=[...this.modelValue].filter(it=>!lodash.isEqual(vue.toValue(it),vue.toValue(this.value)));if(this.modelValue.length<=newModel.length){newModel.push(this.value);}}else{if(this.value===this.modelValue){newModel=typeof this.value==="boolean"?false:void 0;}else{const target=event.target;newModel=target.value==="true"?true:this.value;}}this.$emit("update:modelValue",newModel);this.$emit("change",newModel);},onKeydown(event){event.stopPropagation();},onValidity({detail}){if(detail.target!==this.$el.querySelector("input")){return;}let errorMessage="";if(hasSlot(this,"default")){const labelText=this.injected.getFieldsetLabelText();if(labelText){errorMessage=`${labelText} ${renderSlotText(this.$slots.default)}`;}else{errorMessage=`${renderSlotText(this.$slots.default)}`;}}const element=this.$el.querySelector(`#${detail.elementId}`);if(element){dispatchComponentValidityEvent(element,{...detail,errorMessage,focusElementId:detail.elementId});}},enter(element){const htmlElement=getHTMLElementFromVueRef(element);const computedStyle=getComputedStyle(element);Object.assign(htmlElement.style,this.initialStyle);Object.assign(htmlElement.style,this.hiddenStyle);htmlElement.style.width=computedStyle.width;const height=computedStyle.height;Object.assign(htmlElement.style,this.visibleStyle);getComputedStyle(element).height;setTimeout(()=>{this.height=parseInt(height,10);htmlElement.style.height=height;});},afterEnter(element){const htmlElement=getHTMLElementFromVueRef(element);Object.assign(htmlElement.style,this.openedStyle);},leave(element){const htmlElement=getHTMLElementFromVueRef(element);const height=getComputedStyle(element).height;htmlElement.style.height=height;getComputedStyle(element).height;setTimeout(()=>{Object.assign(htmlElement.style,this.visibleStyle);});}}});const _hoisted_1$H=["id","disabled"];const _hoisted_2$v=["for"];const _hoisted_3$r={key:0,class:"checkbox__details"};const _hoisted_4$m=/* @__PURE__ */vue.createElementVNode("br",null,null,-1/* HOISTED */);const _hoisted_5$k={key:0,class:"checkbox__details"};const _hoisted_6$g=/* @__PURE__ */vue.createElementVNode("br",null,null,-1/* HOISTED */);function _sfc_render$M(_ctx,_cache,$props,$setup,$data,$options){return vue.openBlock(),vue.createElementBlock("div",{class:vue.normalizeClass(["checkbox",_ctx.disabledClass]),onValidity:_cache[2]||(_cache[2]=(...args)=>_ctx.onValidity&&_ctx.onValidity(...args))},[vue.createElementVNode("input",vue.mergeProps({id:_ctx.id},_ctx.attrs,{ref:"checkboxInput",type:"checkbox",class:"checkbox__input",disabled:_ctx.disabled,onKeydown:_cache[0]||(_cache[0]=vue.withKeys((...args)=>_ctx.onKeydown&&_ctx.onKeydown(...args),["space"])),onChange:_cache[1]||(_cache[1]=$event=>_ctx.updateExpandedFlag())}),null,16,_hoisted_1$H),vue.createTextVNode(),vue.createElementVNode("label",{class:vue.normalizeClass(_ctx.$slots.details?"checkbox__label checkbox__width":"checkbox__label"),for:_ctx.id},[vue.renderSlot(_ctx.$slots,"default"),vue.createTextVNode(),_ctx.$slots.details?(vue.openBlock(),vue.createElementBlock(vue.Fragment,{key:0},[_ctx.showDetails==="always"?(vue.openBlock(),vue.createElementBlock("span",_hoisted_3$r,[_hoisted_4$m,vue.createTextVNode(),vue.renderSlot(_ctx.$slots,"details")])):vue.createCommentVNode("v-if",true),vue.createTextVNode(),_ctx.showDetails==="when-selected"?(vue.openBlock(),vue.createBlock(vue.Transition,{key:1,onEnter:_ctx.enter,onAfterEnter:_ctx.afterEnter,onLeave:_ctx.leave},{default:vue.withCtx(()=>[_ctx.expanded?(vue.openBlock(),vue.createElementBlock("span",_hoisted_5$k,[_hoisted_6$g,vue.createTextVNode(),vue.renderSlot(_ctx.$slots,"details",{height:_ctx.height})])):vue.createCommentVNode("v-if",true)]),_:3/* FORWARDED */},8,["onEnter","onAfterEnter","onLeave"])):vue.createCommentVNode("v-if",true)],64/* STABLE_FRAGMENT */)):vue.createCommentVNode("v-if",true)],10,_hoisted_2$v)],34/* CLASS, NEED_HYDRATION */);}const FCheckboxField=/* @__PURE__ */_export_sfc(_sfc_main$W,[["render",_sfc_render$M]]);const getFieldsetLabelText=Symbol("getFieldsetLabelText");function*labelClasses(options){const{labelClass}=options;yield"fieldset__label";yield labelClass;}function*contentClasses(options){const{hasRadiobutton,hasCheckbox,contentClass}=options;yield"fieldset__content";if(hasRadiobutton){yield"radio-button-group__content";}if(hasCheckbox){yield"checkbox-group__content";}yield contentClass;}const _sfc_main$V=vue.defineComponent({name:"FFieldset",components:{FIcon},mixins:[TranslationMixin],provide(){return{[getFieldsetLabelText]:()=>{return renderSlotText(this.$slots.label);},sharedName:this.name,showDetails:this.showDetails};},props:{/**
242
+ */ariaLabel:{type:String,required:false,default:"Kontextuell meny"}},emits:["close","select"],setup(){return{contextmenu:vue.ref(null)};},data(){return{selectedItem:"",currentFocusedItemIndex:-1};},computed:{popupItems(){return this.items.filter(isContextMenuTextItem);},separatorPositions(){const res=[];if(this.items.length>1){this.items.forEach((it,i)=>{if(isContextMenuSeparatorItem(it)){const pos=i-1-res.length;if(pos>=0&&pos<this.items.length-1){res.push(pos);}}});}return res;},hasIcons(){return this.items.some(it=>isContextMenuTextItem(it)&&it.icon);}},watch:{isOpen:{immediate:true,async handler(){if(this.isOpen){this.currentFocusedItemIndex=-1;this.selectedItem="";}}}},methods:{hasSeparatorAfterItemAt(index){return this.separatorPositions.includes(index);},closePopup(){this.$emit("close");},onClickItem(item){if(isContextMenuTextItem(item)&&item.key){this.selectedItem=item.key;this.$emit("select",this.selectedItem);this.closePopup();}},tabIndex(index){return index===this.currentFocusedItemIndex?0:-1;},onKeyUp(event){if(preventKeys$3.includes(event.key)){event.preventDefault();}},doHandlePopupMenuTabKey(action){if(action===MenuAction.MOVE_NEXT&&this.currentFocusedItemIndex+1===this.popupItems.length){this.closePopup();return true;}else if(action===MenuAction.MOVE_PREV&&(this.currentFocusedItemIndex===0||this.currentFocusedItemIndex===-1)){this.closePopup();return false;}return false;},async onKeyDown(event){if(!preventKeys$3.includes(event.key)){return;}if(event.key==="Escape"){this.$emit("close");return;}const action=actionFromKeyboardEvent(event);if(action===null){return;}if(event.key==="Tab"&&this.doHandlePopupMenuTabKey(action)){return;}if(keyUp$1.includes(event.key)&&this.currentFocusedItemIndex===-1){this.currentFocusedItemIndex=this.popupItems.length>0?this.popupItems.length:1;}event.preventDefault();await doMenuAction$3(action,this);},async setFocusOnItem(index){if(index<0||index>=this.popupItems.length){return;}this.currentFocusedItemIndex=index;await this.$nextTick();if(!this.isOpen){return;}const items=getHTMLElementsFromVueRef(this.$refs.items);if(items.length>0){const popupMenuItem=items[index];logic.focus(popupMenuItem,{preventScroll:true});}},async activateItem(index){if(index<0||index>=this.popupItems.length){return;}if(index!==this.currentFocusedItemIndex){await this.setFocusOnItem(index);}this.onClickItem(this.popupItems[this.currentFocusedItemIndex]);}}});const _hoisted_1$I=["aria-label"];const _hoisted_2$w={ref:"contextmenu",role:"menu",tabindex:"-1",class:"contextmenu__list"};const _hoisted_3$s=["onClick"];const _hoisted_4$n=["tabindex"];const _hoisted_5$l={key:0,class:"contextmenu__separator"};function _sfc_render$N(_ctx,_cache,$props,$setup,$data,$options){const _component_f_icon=vue.resolveComponent("f-icon");const _component_i_popup=vue.resolveComponent("i-popup");return vue.openBlock(),vue.createBlock(_component_i_popup,{"is-open":_ctx.isOpen,"keyboard-trap":false,anchor:_ctx.anchor,"set-focus":true,"focus-element":()=>_ctx.contextmenu,inline:"never",onClose:_cache[2]||(_cache[2]=$event=>_ctx.$emit("close"))},{default:vue.withCtx(()=>[vue.createElementVNode("nav",{class:"contextmenu","aria-label":_ctx.ariaLabel,onKeyup:_cache[0]||(_cache[0]=(...args)=>_ctx.onKeyUp&&_ctx.onKeyUp(...args)),onKeydown:_cache[1]||(_cache[1]=(...args)=>_ctx.onKeyDown&&_ctx.onKeyDown(...args))},[vue.createElementVNode("ul",_hoisted_2$w,[(vue.openBlock(true),vue.createElementBlock(vue.Fragment,null,vue.renderList(_ctx.popupItems,(item,index)=>{return vue.openBlock(),vue.createElementBlock("li",{key:item.key,role:"menuitem",onClick:$event=>_ctx.onClickItem(item)},[vue.createElementVNode("div",{ref_for:true,ref:"items",tabindex:_ctx.tabIndex(index),class:"contextmenu__list__item"},[_ctx.hasIcons?(vue.openBlock(),vue.createBlock(_component_f_icon,{key:0,class:"contextmenu__lefticon",name:item.icon?item.icon:"",library:item.iconLibrary?item.iconLibrary:"f"},null,8,["name","library"])):vue.createCommentVNode("v-if",true),vue.createTextVNode(),vue.createElementVNode("a",{ref_for:true,ref:"anchors"},vue.toDisplayString(item.label),513/* TEXT, NEED_PATCH */)],8,_hoisted_4$n),vue.createTextVNode(),_ctx.hasSeparatorAfterItemAt(index)?(vue.openBlock(),vue.createElementBlock("hr",_hoisted_5$l)):vue.createCommentVNode("v-if",true)],8,_hoisted_3$s);}),128/* KEYED_FRAGMENT */))],512/* NEED_PATCH */)],40,_hoisted_1$I)]),_:1/* STABLE */},8,["is-open","anchor","focus-element"]);}const FContextMenu=/* @__PURE__ */_export_sfc(_sfc_main$X,[["render",_sfc_render$N]]);function*labelClasses(options){const{labelClass}=options;yield"fieldset__label";yield labelClass;}function*contentClasses(options){const{hasRadiobutton,hasCheckbox,contentClass}=options;yield"fieldset__content";if(hasRadiobutton){yield"radio-button-group__content";}if(hasCheckbox){yield"checkbox-group__content";}yield contentClass;}const injectionKeys={sharedName:Symbol("sharedName"),showDetails:Symbol("showDetails"),getFieldsetLabelText:Symbol("getFieldsetLabelText")};function useFieldset(){return{sharedName:vue.inject(injectionKeys.sharedName,void 0),showDetails:vue.inject(injectionKeys.showDetails,"never"),getFieldsetLabelText:vue.inject(injectionKeys.getFieldsetLabelText,()=>void 0)};}const _sfc_main$W=vue.defineComponent({name:"FFieldset",components:{FIcon},mixins:[TranslationMixin],props:{/**
258
243
  * The id for the fieldset id attribute.
259
244
  * If the prop is not set a random value will be generated.
260
245
  */id:{type:String,required:false,default:()=>logic.ElementIdService.generateElementId()},/**
@@ -278,10 +263,25 @@ injected(){return this;}},methods:{updateExpandedFlag(){const checkboxInput=getH
278
263
  * * `never` (default) - Never show item details.
279
264
  * - `when-selected` - Show item details when selected.
280
265
  * - `always` - Always show item details.
281
- */showDetails:{type:String,default:"never",validator(value){return["never","when-selected","always"].includes(value);}}},data(){return{validity:{validityMode:"INITIAL"},descriptionClass:["label__description"],discreteDescriptionClass:["label__description","label__description--discrete"],validityElement:null,dispatchObject:{},detail:{},hasDocumentListener:false,legendKey:1,oldMessage:"",children:new Array(),hasCheckbox:false,hasRadiobutton:false};},computed:{hasError(){return this.validity.validityMode==="ERROR";},hasErrorMessageSlot(){return hasSlot(this,"error-message");},hasTooltipSlot(){return Boolean(this.$slots.tooltip);},hasDescriptionSlot(){return hasSlot(this,"description");},legendClass(){return this.hasTooltipSlot?["sr-only"]:this.groupLabelClass;},groupLabelClass(){return Array.from(labelClasses(this));},groupContentClass(){return Array.from(contentClasses(this));},classes(){const{hasRadiobutton,hasCheckbox,horizontal,chip,border}=this;return{"radio-button-group":hasRadiobutton,"radio-button-group--chip":chip&&hasRadiobutton,"radio-button-group--horizontal":horizontal&&hasRadiobutton,"radio-button-group--border":border&&hasRadiobutton,"checkbox-group":hasCheckbox,"checkbox-group--chip":chip&&hasCheckbox,"checkbox-group--horizontal":horizontal&&hasCheckbox,"checkbox-group--border":border&&hasCheckbox};},checkedChildren(){return this.children.filter(child=>child.checked);},debouncedUpdateChildren(){return logic.debounce(this.updateCheckboxChildren.bind(this),150);},checkboxCheckedScreenReaderText(){return this.checkedChildren.length===1?this.$t("fkui.checkbox-group.checkbox.checked","Kryssruta kryssad"):this.$t("fkui.checkbox-group.checkbox.not.checked","Kryssruta ej kryssad");},numberOfCheckboxesScreenReaderText(){return this.$t("fkui.checkbox-group.count","Grupp med {{ count }} kryssrutor",{count:String(this.children.length)});},numberOfCheckedCheckboxesScreenText(){return this.$t("fkui.checkbox-group.checked","{{ checked }} kryssad av {{ count }}",{checked:String(this.checkedChildren.length),count:String(this.children.length)});}},async mounted(){await this.$nextTick();const types=Array.from(this.$el.querySelectorAll(`input[type="checkbox"], input[type="radio"]`),it=>it.getAttribute("type"));this.hasCheckbox=types.includes("checkbox");this.hasRadiobutton=types.includes("radio");if(this.hasCheckbox){this.updateCheckboxChildren();}},updated(){if(this.hasCheckbox){this.debouncedUpdateChildren();}},methods:{async onValidity({detail}){var _renderSlotText2;if(detail.target!==this.$el){return;}this.detail=detail;await this.$nextTick();const errorMessage=(_renderSlotText2=renderSlotText(this.$slots.label))!==null&&_renderSlotText2!==void 0?_renderSlotText2:"";const firstFocusableElement=this.$el.querySelector("input:not(disabled), select:not(disabled), textarea:not(disabled)");const focusElementId=firstFocusableElement?firstFocusableElement.id:this.id;this.validityElement=this.$el;this.dispatchObject={...detail,errorMessage,focusElementId};this.validity=this.detail;if(this.validityElement){dispatchComponentValidityEvent(this.validityElement,this.dispatchObject);}const message=detail.validityMode==="INITIAL"?"":detail.validationMessage;if(message!==this.oldMessage){this.forceLegendUpdate();this.oldMessage=message;}},/**
266
+ */showDetails:{type:String,default:"never",validator(value){return["never","when-selected","always"].includes(value);}}},setup(props){const slots=vue.useSlots();vue.provide(injectionKeys.sharedName,props.name);vue.provide(injectionKeys.showDetails,props.showDetails);vue.provide(injectionKeys.getFieldsetLabelText,()=>{return renderSlotText(slots.label);});},data(){return{validity:{validityMode:"INITIAL"},descriptionClass:["label__description"],discreteDescriptionClass:["label__description","label__description--discrete"],validityElement:null,dispatchObject:{},detail:{},hasDocumentListener:false,legendKey:1,oldMessage:"",children:new Array(),hasCheckbox:false,hasRadiobutton:false};},computed:{hasError(){return this.validity.validityMode==="ERROR";},hasErrorMessageSlot(){return hasSlot(this,"error-message");},hasTooltipSlot(){return Boolean(this.$slots.tooltip);},hasDescriptionSlot(){return hasSlot(this,"description");},legendClass(){return this.hasTooltipSlot?["sr-only"]:this.groupLabelClass;},groupLabelClass(){return Array.from(labelClasses(this));},groupContentClass(){return Array.from(contentClasses(this));},classes(){const{hasRadiobutton,hasCheckbox,horizontal,chip,border}=this;return{"radio-button-group":hasRadiobutton,"radio-button-group--chip":chip&&hasRadiobutton,"radio-button-group--horizontal":horizontal&&hasRadiobutton,"radio-button-group--border":border&&hasRadiobutton,"checkbox-group":hasCheckbox,"checkbox-group--chip":chip&&hasCheckbox,"checkbox-group--horizontal":horizontal&&hasCheckbox,"checkbox-group--border":border&&hasCheckbox};},checkedChildren(){return this.children.filter(child=>child.checked);},debouncedUpdateChildren(){return logic.debounce(this.updateCheckboxChildren.bind(this),150);},checkboxCheckedScreenReaderText(){return this.checkedChildren.length===1?this.$t("fkui.checkbox-group.checkbox.checked","Kryssruta kryssad"):this.$t("fkui.checkbox-group.checkbox.not.checked","Kryssruta ej kryssad");},numberOfCheckboxesScreenReaderText(){return this.$t("fkui.checkbox-group.count","Grupp med {{ count }} kryssrutor",{count:String(this.children.length)});},numberOfCheckedCheckboxesScreenText(){return this.$t("fkui.checkbox-group.checked","{{ checked }} kryssad av {{ count }}",{checked:String(this.checkedChildren.length),count:String(this.children.length)});}},async mounted(){await this.$nextTick();const types=Array.from(this.$el.querySelectorAll(`input[type="checkbox"], input[type="radio"]`),it=>it.getAttribute("type"));this.hasCheckbox=types.includes("checkbox");this.hasRadiobutton=types.includes("radio");if(this.hasCheckbox){this.updateCheckboxChildren();}},updated(){if(this.hasCheckbox){this.debouncedUpdateChildren();}},methods:{async onValidity({detail}){var _renderSlotText2;if(detail.target!==this.$el){return;}this.detail=detail;await this.$nextTick();const errorMessage=(_renderSlotText2=renderSlotText(this.$slots.label))!==null&&_renderSlotText2!==void 0?_renderSlotText2:"";const firstFocusableElement=this.$el.querySelector("input:not(disabled), select:not(disabled), textarea:not(disabled)");const focusElementId=firstFocusableElement?firstFocusableElement.id:this.id;this.validityElement=this.$el;this.dispatchObject={...detail,errorMessage,focusElementId};this.validity=this.detail;if(this.validityElement){dispatchComponentValidityEvent(this.validityElement,this.dispatchObject);}const message=detail.validityMode==="INITIAL"?"":detail.validationMessage;if(message!==this.oldMessage){this.forceLegendUpdate();this.oldMessage=message;}},/**
282
267
  * Workaround for NVDA-bug. Force re rendering of legend element due to NVDA not recognizing innerHTML changes.
283
268
  * NVDA has closed the bug as it is related to the browser (works in FF): https://github.com/nvaccess/nvda/issues/13162
284
- */forceLegendUpdate(){this.legendKey++;},async updateCheckboxChildren(){await this.$nextTick();this.children=Array.from(this.$el.querySelectorAll('input[type="checkbox"]'));}}});const _hoisted_1$G=["id"];const _hoisted_2$u={key:0,class:"sr-only"};const _hoisted_3$q={key:0,class:"label__message label__message--error"};const _hoisted_4$l={key:0,"data-test":"checked-boxes",class:"sr-only","aria-live":"polite"};const _hoisted_5$j={key:0};const _hoisted_6$f={key:1};const _hoisted_7$d={class:"sr-separator"};const _hoisted_8$9={class:"tooltip-before","aria-hidden":"true"};const _hoisted_9$5={class:"label tooltip-before__label"};const _hoisted_10$5={key:0,class:"label__message label__message--error"};function _sfc_render$L(_ctx,_cache,$props,$setup,$data,$options){const _component_f_icon=vue.resolveComponent("f-icon");return vue.openBlock(),vue.createElementBlock("fieldset",{id:_ctx.id,class:vue.normalizeClass(["fieldset",_ctx.classes]),onValidity:_cache[0]||(_cache[0]=(...args)=>_ctx.onValidity&&_ctx.onValidity(...args))},[(vue.openBlock(),vue.createElementBlock("legend",{key:_ctx.legendKey,class:vue.normalizeClass(["label",_ctx.legendClass])},[vue.renderSlot(_ctx.$slots,"label"),vue.createTextVNode(),_ctx.hasCheckbox&&_ctx.children.length>1?(vue.openBlock(),vue.createElementBlock("span",_hoisted_2$u,[vue.createElementVNode("span",null,vue.toDisplayString(_ctx.numberOfCheckboxesScreenReaderText),1/* TEXT */)])):vue.createCommentVNode("v-if",true),vue.createTextVNode(),vue.renderSlot(_ctx.$slots,"description",vue.normalizeProps(vue.guardReactiveProps({descriptionClass:_ctx.descriptionClass,discreteDescriptionClass:_ctx.discreteDescriptionClass}))),vue.createTextVNode(),vue.renderSlot(_ctx.$slots,"error-message",vue.normalizeProps(vue.guardReactiveProps({hasError:_ctx.hasError,validationMessage:_ctx.validity.validationMessage})),()=>[_ctx.hasError?(vue.openBlock(),vue.createElementBlock("span",_hoisted_3$q,[vue.createVNode(_component_f_icon,{class:"label__icon--left",name:"error"}),vue.createTextVNode(" "+vue.toDisplayString(_ctx.validity.validationMessage),1/* TEXT */)])):vue.createCommentVNode("v-if",true)])],2/* CLASS */)),vue.createTextVNode(),_ctx.hasCheckbox?(vue.openBlock(),vue.createElementBlock("span",_hoisted_4$l,[_ctx.children.length===1?(vue.openBlock(),vue.createElementBlock("span",_hoisted_5$j,vue.toDisplayString(_ctx.checkboxCheckedScreenReaderText),1/* TEXT */)):(vue.openBlock(),vue.createElementBlock("span",_hoisted_6$f,vue.toDisplayString(_ctx.numberOfCheckedCheckboxesScreenText),1/* TEXT */))])):vue.createCommentVNode("v-if",true),vue.createTextVNode(),_ctx.hasTooltipSlot?(vue.openBlock(),vue.createElementBlock(vue.Fragment,{key:1},[vue.createElementVNode("div",_hoisted_7$d,[vue.createElementVNode("div",_hoisted_8$9,[vue.createElementVNode("div",_hoisted_9$5,[vue.renderSlot(_ctx.$slots,"label")])]),vue.createTextVNode(),vue.renderSlot(_ctx.$slots,"tooltip")]),vue.createTextVNode(),_ctx.hasDescriptionSlot||_ctx.hasErrorMessageSlot||_ctx.hasError?(vue.openBlock(),vue.createElementBlock("div",{key:0,class:vue.normalizeClass(["label",_ctx.groupLabelClass]),"aria-hidden":"true"},[vue.renderSlot(_ctx.$slots,"description",vue.normalizeProps(vue.guardReactiveProps({descriptionClass:_ctx.descriptionClass,discreteDescriptionClass:_ctx.discreteDescriptionClass}))),vue.createTextVNode(),vue.renderSlot(_ctx.$slots,"error-message",vue.normalizeProps(vue.guardReactiveProps({hasError:_ctx.hasError,validationMessage:_ctx.validity.validationMessage})),()=>[_ctx.hasError?(vue.openBlock(),vue.createElementBlock("span",_hoisted_10$5,[vue.createVNode(_component_f_icon,{class:"label__icon--left",name:"error"}),vue.createTextVNode(" "+vue.toDisplayString(_ctx.validity.validationMessage),1/* TEXT */)])):vue.createCommentVNode("v-if",true)])],2/* CLASS */)):vue.createCommentVNode("v-if",true)],64/* STABLE_FRAGMENT */)):vue.createCommentVNode("v-if",true),vue.createTextVNode(),vue.createElementVNode("div",{class:vue.normalizeClass(_ctx.groupContentClass)},[vue.renderSlot(_ctx.$slots,"default")],2/* CLASS */)],42,_hoisted_1$G);}const FFieldset=/* @__PURE__ */_export_sfc(_sfc_main$V,[["render",_sfc_render$L]]);const _sfc_main$U=vue.defineComponent({name:"FCheckboxGroup",components:{FFieldset},mixins:[TranslationMixin],inheritAttrs:false,props:{/**
269
+ */forceLegendUpdate(){this.legendKey++;},async updateCheckboxChildren(){await this.$nextTick();this.children=Array.from(this.$el.querySelectorAll('input[type="checkbox"]'));}}});const _hoisted_1$H=["id"];const _hoisted_2$v={key:0,class:"sr-only"};const _hoisted_3$r={key:0,class:"label__message label__message--error"};const _hoisted_4$m={key:0,"data-test":"checked-boxes",class:"sr-only","aria-live":"polite"};const _hoisted_5$k={key:0};const _hoisted_6$g={key:1};const _hoisted_7$d={class:"sr-separator"};const _hoisted_8$9={class:"tooltip-before","aria-hidden":"true"};const _hoisted_9$5={class:"label tooltip-before__label"};const _hoisted_10$5={key:0,class:"label__message label__message--error"};function _sfc_render$M(_ctx,_cache,$props,$setup,$data,$options){const _component_f_icon=vue.resolveComponent("f-icon");return vue.openBlock(),vue.createElementBlock("fieldset",{id:_ctx.id,class:vue.normalizeClass(["fieldset",_ctx.classes]),onValidity:_cache[0]||(_cache[0]=(...args)=>_ctx.onValidity&&_ctx.onValidity(...args))},[(vue.openBlock(),vue.createElementBlock("legend",{key:_ctx.legendKey,class:vue.normalizeClass(["label",_ctx.legendClass])},[vue.renderSlot(_ctx.$slots,"label"),vue.createTextVNode(),_ctx.hasCheckbox&&_ctx.children.length>1?(vue.openBlock(),vue.createElementBlock("span",_hoisted_2$v,[vue.createElementVNode("span",null,vue.toDisplayString(_ctx.numberOfCheckboxesScreenReaderText),1/* TEXT */)])):vue.createCommentVNode("v-if",true),vue.createTextVNode(),vue.renderSlot(_ctx.$slots,"description",vue.normalizeProps(vue.guardReactiveProps({descriptionClass:_ctx.descriptionClass,discreteDescriptionClass:_ctx.discreteDescriptionClass}))),vue.createTextVNode(),vue.renderSlot(_ctx.$slots,"error-message",vue.normalizeProps(vue.guardReactiveProps({hasError:_ctx.hasError,validationMessage:_ctx.validity.validationMessage})),()=>[_ctx.hasError?(vue.openBlock(),vue.createElementBlock("span",_hoisted_3$r,[vue.createVNode(_component_f_icon,{class:"label__icon--left",name:"error"}),vue.createTextVNode(" "+vue.toDisplayString(_ctx.validity.validationMessage),1/* TEXT */)])):vue.createCommentVNode("v-if",true)])],2/* CLASS */)),vue.createTextVNode(),_ctx.hasCheckbox?(vue.openBlock(),vue.createElementBlock("span",_hoisted_4$m,[_ctx.children.length===1?(vue.openBlock(),vue.createElementBlock("span",_hoisted_5$k,vue.toDisplayString(_ctx.checkboxCheckedScreenReaderText),1/* TEXT */)):(vue.openBlock(),vue.createElementBlock("span",_hoisted_6$g,vue.toDisplayString(_ctx.numberOfCheckedCheckboxesScreenText),1/* TEXT */))])):vue.createCommentVNode("v-if",true),vue.createTextVNode(),_ctx.hasTooltipSlot?(vue.openBlock(),vue.createElementBlock(vue.Fragment,{key:1},[vue.createElementVNode("div",_hoisted_7$d,[vue.createElementVNode("div",_hoisted_8$9,[vue.createElementVNode("div",_hoisted_9$5,[vue.renderSlot(_ctx.$slots,"label")])]),vue.createTextVNode(),vue.renderSlot(_ctx.$slots,"tooltip")]),vue.createTextVNode(),_ctx.hasDescriptionSlot||_ctx.hasErrorMessageSlot||_ctx.hasError?(vue.openBlock(),vue.createElementBlock("div",{key:0,class:vue.normalizeClass(["label",_ctx.groupLabelClass]),"aria-hidden":"true"},[vue.renderSlot(_ctx.$slots,"description",vue.normalizeProps(vue.guardReactiveProps({descriptionClass:_ctx.descriptionClass,discreteDescriptionClass:_ctx.discreteDescriptionClass}))),vue.createTextVNode(),vue.renderSlot(_ctx.$slots,"error-message",vue.normalizeProps(vue.guardReactiveProps({hasError:_ctx.hasError,validationMessage:_ctx.validity.validationMessage})),()=>[_ctx.hasError?(vue.openBlock(),vue.createElementBlock("span",_hoisted_10$5,[vue.createVNode(_component_f_icon,{class:"label__icon--left",name:"error"}),vue.createTextVNode(" "+vue.toDisplayString(_ctx.validity.validationMessage),1/* TEXT */)])):vue.createCommentVNode("v-if",true)])],2/* CLASS */)):vue.createCommentVNode("v-if",true)],64/* STABLE_FRAGMENT */)):vue.createCommentVNode("v-if",true),vue.createTextVNode(),vue.createElementVNode("div",{class:vue.normalizeClass(_ctx.groupContentClass)},[vue.renderSlot(_ctx.$slots,"default")],2/* CLASS */)],42,_hoisted_1$H);}const FFieldset=/* @__PURE__ */_export_sfc(_sfc_main$W,[["render",_sfc_render$M]]);const anyType$1=[String,Object,Array,Number,Date,Boolean];const _sfc_main$V=vue.defineComponent({name:"FCheckboxField",inheritAttrs:false,props:{/**
270
+ * Set to `true`, empty string `""` or string `"disabled"` to disable this input field.
271
+ */disabled:{type:Boolean,required:false,default:false},/**
272
+ * The id for the input id attribute.
273
+ * The id for the label for attribute.
274
+ * If the prop is not set a random value will be generated.
275
+ */id:{type:String,required:false,default:()=>logic.ElementIdService.generateElementId()},/**
276
+ * The value for the input checked attribute.
277
+ * @model
278
+ */// ? The rule is disabled so that the `checked` prop can be undefined or null.
279
+ /* eslint-disable-next-line vue/require-default-prop -- technical debt,
280
+ /* it should contain a default value of undefined and proptype should
281
+ /* include undefined (see comment on line above) */modelValue:{type:anyType$1,required:false},/**
282
+ * The value for the input.
283
+ */value:{type:anyType$1,required:true}},emits:["change","update:modelValue"],setup(){const{showDetails,getFieldsetLabelText}=useFieldset();return{showDetails,getFieldsetLabelText};},data(){return{expanded:false,height:0,initialStyle:{overflow:"hidden",transition:"height 400ms cubic-bezier(0.46, 0.03, 0.52, 0.96)"},hiddenStyle:{height:"auto",position:"absolute",visibility:"hidden"},visibleStyle:{width:"",position:"",visibility:"",height:"0px"},openedStyle:{height:"auto"}};},computed:{attrs(){let checked;if(Array.isArray(this.modelValue)){checked=this.modelValue.findIndex(it=>lodash.isEqual(vue.toValue(it),vue.toValue(this.value)))>=0;}else{checked=this.value===this.modelValue;}return{...this.$attrs,value:this.value,checked,onChange:event=>{if(event.target instanceof HTMLInputElement){this.emitVModelEvent(event);}},onInput:event=>{event.target.focus();}};},disabledClass(){return this.disabled?"disabled":"";},// eslint-disable-next-line @typescript-eslint/no-explicit-any -- technical debt, nore sure whats going on here
284
+ injected(){return this;}},methods:{updateExpandedFlag(){const checkboxInput=getHTMLElementFromVueRef(this.$refs["checkboxInput"]);this.expanded=checkboxInput.checked;},emitVModelEvent(event){let newModel;if(Array.isArray(this.modelValue)){newModel=[...this.modelValue].filter(it=>!lodash.isEqual(vue.toValue(it),vue.toValue(this.value)));if(this.modelValue.length<=newModel.length){newModel.push(this.value);}}else{if(this.value===this.modelValue){newModel=typeof this.value==="boolean"?false:void 0;}else{const target=event.target;newModel=target.value==="true"?true:this.value;}}this.$emit("update:modelValue",newModel);this.$emit("change",newModel);},onKeydown(event){event.stopPropagation();},onValidity({detail}){if(detail.target!==this.$el.querySelector("input")){return;}let errorMessage="";if(hasSlot(this,"default")){const labelText=this.injected.getFieldsetLabelText();if(labelText){errorMessage=`${labelText} ${renderSlotText(this.$slots.default)}`;}else{errorMessage=`${renderSlotText(this.$slots.default)}`;}}const element=this.$el.querySelector(`#${detail.elementId}`);if(element){dispatchComponentValidityEvent(element,{...detail,errorMessage,focusElementId:detail.elementId});}},enter(element){const htmlElement=getHTMLElementFromVueRef(element);const computedStyle=getComputedStyle(element);Object.assign(htmlElement.style,this.initialStyle);Object.assign(htmlElement.style,this.hiddenStyle);htmlElement.style.width=computedStyle.width;const height=computedStyle.height;Object.assign(htmlElement.style,this.visibleStyle);getComputedStyle(element).height;setTimeout(()=>{this.height=parseInt(height,10);htmlElement.style.height=height;});},afterEnter(element){const htmlElement=getHTMLElementFromVueRef(element);Object.assign(htmlElement.style,this.openedStyle);},leave(element){const htmlElement=getHTMLElementFromVueRef(element);const height=getComputedStyle(element).height;htmlElement.style.height=height;getComputedStyle(element).height;setTimeout(()=>{Object.assign(htmlElement.style,this.visibleStyle);});}}});const _hoisted_1$G=["id","disabled"];const _hoisted_2$u=["for"];const _hoisted_3$q={key:0,class:"checkbox__details"};const _hoisted_4$l=/* @__PURE__ */vue.createElementVNode("br",null,null,-1/* HOISTED */);const _hoisted_5$j={key:0,class:"checkbox__details"};const _hoisted_6$f=/* @__PURE__ */vue.createElementVNode("br",null,null,-1/* HOISTED */);function _sfc_render$L(_ctx,_cache,$props,$setup,$data,$options){return vue.openBlock(),vue.createElementBlock("div",{class:vue.normalizeClass(["checkbox",_ctx.disabledClass]),onValidity:_cache[2]||(_cache[2]=(...args)=>_ctx.onValidity&&_ctx.onValidity(...args))},[vue.createElementVNode("input",vue.mergeProps({id:_ctx.id},_ctx.attrs,{ref:"checkboxInput",type:"checkbox",class:"checkbox__input",disabled:_ctx.disabled,onKeydown:_cache[0]||(_cache[0]=vue.withKeys((...args)=>_ctx.onKeydown&&_ctx.onKeydown(...args),["space"])),onChange:_cache[1]||(_cache[1]=$event=>_ctx.updateExpandedFlag())}),null,16,_hoisted_1$G),vue.createTextVNode(),vue.createElementVNode("label",{class:vue.normalizeClass(_ctx.$slots.details?"checkbox__label checkbox__width":"checkbox__label"),for:_ctx.id},[vue.renderSlot(_ctx.$slots,"default"),vue.createTextVNode(),_ctx.$slots.details?(vue.openBlock(),vue.createElementBlock(vue.Fragment,{key:0},[_ctx.showDetails==="always"?(vue.openBlock(),vue.createElementBlock("span",_hoisted_3$q,[_hoisted_4$l,vue.createTextVNode(),vue.renderSlot(_ctx.$slots,"details")])):vue.createCommentVNode("v-if",true),vue.createTextVNode(),_ctx.showDetails==="when-selected"?(vue.openBlock(),vue.createBlock(vue.Transition,{key:1,onEnter:_ctx.enter,onAfterEnter:_ctx.afterEnter,onLeave:_ctx.leave},{default:vue.withCtx(()=>[_ctx.expanded?(vue.openBlock(),vue.createElementBlock("span",_hoisted_5$j,[_hoisted_6$f,vue.createTextVNode(),vue.renderSlot(_ctx.$slots,"details",{height:_ctx.height})])):vue.createCommentVNode("v-if",true)]),_:3/* FORWARDED */},8,["onEnter","onAfterEnter","onLeave"])):vue.createCommentVNode("v-if",true)],64/* STABLE_FRAGMENT */)):vue.createCommentVNode("v-if",true)],10,_hoisted_2$u)],34/* CLASS, NEED_HYDRATION */);}const FCheckboxField=/* @__PURE__ */_export_sfc(_sfc_main$V,[["render",_sfc_render$L]]);const _sfc_main$U=vue.defineComponent({name:"FCheckboxGroup",components:{FFieldset},mixins:[TranslationMixin],inheritAttrs:false,props:{/**
285
285
  * The id for the fieldset id attribute.
286
286
  * If the prop is not set the id will be generated.
287
287
  */id:{type:String,required:false,default:()=>logic.ElementIdService.generateElementId()},/**
@@ -477,7 +477,7 @@ defaultText:"",descriptionText:"",descriptionScreenReaderText:"",discreteDescrip
477
477
  * - `"vertical"`: Enables vertical scrolling
478
478
  * - `"both"`: Enables scrolling in both directions
479
479
  * - `"none"`: Disables scrolling (default)
480
- */scroll:{type:String,default:TableScroll.NONE,validator:function(value){const types=Object.values(TableScroll);return types.includes(value);}}},setup(){return FSortFilterDatasetInjected();},data(){return{columns:[],emptyRow:emptyTableRow()};},computed:{hasCaption(){return hasSlot(this,"caption");},tableClasses(){const classes=[];if(this.striped){classes.push("table--striped");}return classes;},isEmpty(){return this.rows.length===0;},visibleColumns(){return this.columns.filter(col=>col.visible);},hasInitiateColumns(){return this.columns.length>0;},wrapperClasses(){return tableScrollClasses(this.scroll);},tabindex(){return this.scroll!==TableScroll.NONE?0:void 0;}},mounted(){this.registerCallbackOnSort(this.callbackOnSort);this.registerCallbackOnMount(this.callbackSortableColumns);},methods:{rowKey(item){const key=item[this.keyAttribute];if(typeof key==="undefined"){throw new Error(`Key attribute [${this.keyAttribute}]' is missing in row`);}return String(key);},columnClasses(column){const classes=["table__column",`table__column--${column.type}`,column.size];if(column.sortable){classes.push("table__column--sortable");}return classes;},iconClasses(column){return getSortableIconClasses(column);},iconName(column){return getSortableIconName(column);},onClickColumnHeader(column){if(!column.sortable){return;}let columnName=column.name;if(column.sort===FTableColumnSort.DESCENDING){columnName="";column.sort=FTableColumnSort.UNSORTED;}this.sort(columnName,column.sort!==FTableColumnSort.ASCENDING);},callbackOnSort(columnName,ascending){updateSortOrder(this.columns,columnName,ascending);},callbackSortableColumns(columnNames){setSortableColumns(this.columns,columnNames);},escapeNewlines(value){return value.replace(/\n/g,"<br/>");}}});const _hoisted_1$v=["tabindex"];const _hoisted_2$p={key:0};const _hoisted_3$m={class:"table__row"};const _hoisted_4$h=["innerHTML"];const _hoisted_5$f={key:1,class:"table__column__description"};const _hoisted_6$b={key:0};const _hoisted_7$a={key:1};const _hoisted_8$8=["colspan"];function _sfc_render$y(_ctx,_cache,$props,$setup,$data,$options){const _component_f_icon=vue.resolveComponent("f-icon");return vue.openBlock(),vue.createElementBlock("div",{class:vue.normalizeClass(_ctx.wrapperClasses)},[vue.createElementVNode("table",vue.mergeProps({class:["table",_ctx.tableClasses],tabindex:_ctx.tabindex},_ctx.$attrs),[_ctx.hasCaption?(vue.openBlock(),vue.createElementBlock("caption",_hoisted_2$p,[vue.renderSlot(_ctx.$slots,"caption")])):vue.createCommentVNode("v-if",true),vue.createTextVNode(),vue.createElementVNode("colgroup",null,[(vue.openBlock(true),vue.createElementBlock(vue.Fragment,null,vue.renderList(_ctx.columns,column=>{return vue.openBlock(),vue.createElementBlock("col",{key:column.id,class:vue.normalizeClass(column.size)},null,2/* CLASS */);}),128/* KEYED_FRAGMENT */))]),vue.createTextVNode(),vue.createElementVNode("thead",null,[vue.createElementVNode("tr",_hoisted_3$m,[(vue.openBlock(true),vue.createElementBlock(vue.Fragment,null,vue.renderList(_ctx.visibleColumns,column=>{return vue.openBlock(),vue.createElementBlock("th",vue.mergeProps({key:column.id,scope:"col",class:_ctx.columnClasses(column)},vue.toHandlers(column.sortable?{click:()=>_ctx.onClickColumnHeader(column)}:{},true)),[vue.createElementVNode("span",{innerHTML:_ctx.escapeNewlines(column.title)},null,8,_hoisted_4$h),vue.createTextVNode(),column.sortable?(vue.openBlock(),vue.createBlock(_component_f_icon,{key:0,class:vue.normalizeClass(_ctx.iconClasses(column)),name:_ctx.iconName(column)},null,8,["class","name"])):vue.createCommentVNode("v-if",true),vue.createTextVNode(),column.description?(vue.openBlock(),vue.createElementBlock("span",_hoisted_5$f,vue.toDisplayString(column.description),1/* TEXT */)):vue.createCommentVNode("v-if",true)],16/* FULL_PROPS */);}),128/* KEYED_FRAGMENT */))])]),vue.createTextVNode(),vue.createElementVNode("tbody",null,[!_ctx.hasInitiateColumns?(vue.openBlock(),vue.createElementBlock("tr",_hoisted_6$b,[vue.renderSlot(_ctx.$slots,"default",vue.normalizeProps(vue.guardReactiveProps({row:_ctx.emptyRow})))])):vue.createCommentVNode("v-if",true),vue.createTextVNode(),_ctx.isEmpty?(vue.openBlock(),vue.createElementBlock("tr",_hoisted_7$a,[vue.createElementVNode("td",{class:"table__column table__column--action",colspan:_ctx.columns.length},[vue.renderSlot(_ctx.$slots,"empty",{},()=>[vue.createTextVNode(vue.toDisplayString(_ctx.$t("fkui.data-table.empty","Tabellen är tom")),1/* TEXT */)])],8,_hoisted_8$8)])):vue.createCommentVNode("v-if",true),vue.createTextVNode(),(vue.openBlock(true),vue.createElementBlock(vue.Fragment,null,vue.renderList(_ctx.rows,row=>{return vue.openBlock(),vue.createElementBlock("tr",{key:_ctx.rowKey(row),class:"table__row"},[vue.renderSlot(_ctx.$slots,"default",vue.mergeProps({ref_for:true},{row}))]);}),128/* KEYED_FRAGMENT */))])],16,_hoisted_1$v)],2/* CLASS */);}const FDataTable=/* @__PURE__ */_export_sfc(_sfc_main$y,[["render",_sfc_render$y]]);function isDayEnabled(day,config2){return passesMinDate(day,config2.minDate)&&passesMaxDate(day,config2.maxDate)&&passesInvalidDates(day,config2.invalidDates)&&passesInvalidWeekdays(day,config2.invalidWeekdays);}function passesMinDate(day,config2){if(!config2){throw new Error("MinDate validator must be set");}if(!config2.limit){throw new Error("Invalid minDate config");}return config2.limit<=day.toString();}function passesMaxDate(day,config2){if(!config2){throw new Error("MaxDate validator must be set");}if(!config2.limit){throw new Error("Invalid maxDate config");}return day.toString()<=config2.limit;}function passesInvalidDates(day,config2){if(!config2){return true;}if(!logic.isInvalidDatesConfig(config2)){throw new Error("Invalid invalidDates config");}return!config2.dates.includes(day.toString());}function passesInvalidWeekdays(day,config2){if(!config2){return true;}if(!logic.isInvalidWeekdaysConfig(config2)){throw new Error("Invalid invalidWeekdays config");}return!config2.days.includes(day.weekDay);}function updateCalendarValue(newValue){const newCalendarValue=date.FDate.fromIso(newValue);if(!newCalendarValue.isValid()){this.calendarValue=void 0;}else if(isInvalidMonth(newCalendarValue,this.minDate,this.maxDate)){this.calendarValue=void 0;}else if(!this.isDateEnabled(newCalendarValue)){this.calendarValue=void 0;}else if(!this.calendarValue||!this.calendarValue.equals(newCalendarValue)){this.calendarValue=newCalendarValue;}}function getDisplayMonth(minDate,maxDate,selectedDate,initialMonth){let effectiveDate;if(selectedDate&&selectedDate.isValid()){effectiveDate=selectedDate;}else if(initialMonth&&initialMonth.isValid()){effectiveDate=initialMonth;}else{effectiveDate=date.FDate.now();}let month;if(!isInvalidMonth(effectiveDate,minDate,maxDate)){month=effectiveDate.startOfMonth();}else if(isMonthBefore(effectiveDate,minDate)){month=minDate==null?void 0:minDate.startOfMonth();}else if(isMonthAfter(effectiveDate,maxDate)){month=maxDate==null?void 0:maxDate.startOfMonth();}return month||date.FDate.now().startOfMonth();}const _sfc_main$x=vue.defineComponent({name:"FDatepickerField",components:{FCalendar,IPopup,FTextField,FIcon,FCalendarDay},mixins:[TranslationMixin],inheritAttrs:false,props:{/** Selected day.
480
+ */scroll:{type:String,default:TableScroll.NONE,validator:function(value){const types=Object.values(TableScroll);return types.includes(value);}}},setup(){return FSortFilterDatasetInjected();},data(){return{columns:[],emptyRow:emptyTableRow()};},computed:{hasCaption(){return hasSlot(this,"caption");},tableClasses(){const classes=[];if(this.striped){classes.push("table--striped");}return classes;},isEmpty(){return this.rows.length===0;},visibleColumns(){return this.columns.filter(col=>col.visible);},hasInitiateColumns(){return this.columns.length>0;},wrapperClasses(){return tableScrollClasses(this.scroll);},tabindex(){return this.scroll!==TableScroll.NONE?0:void 0;}},mounted(){this.registerCallbackOnSort(this.callbackOnSort);this.registerCallbackOnMount(this.callbackSortableColumns);},methods:{rowKey(item){const key=item[this.keyAttribute];if(typeof key==="undefined"){throw new Error(`Key attribute [${this.keyAttribute}]' is missing in row`);}return String(key);},columnClasses(column){const classes=["table__column",`table__column--${column.type}`,column.size];if(column.sortable){classes.push("table__column--sortable");}return classes;},iconClasses(column){return getSortableIconClasses(column);},iconName(column){return getSortableIconName(column);},onClickColumnHeader(column){if(!column.sortable){return;}let columnName=column.name;if(column.sort===FTableColumnSort.DESCENDING){columnName="";column.sort=FTableColumnSort.UNSORTED;}this.sort(columnName,column.sort!==FTableColumnSort.ASCENDING);},callbackOnSort(columnName,ascending){updateSortOrder(this.columns,columnName,ascending);},callbackSortableColumns(columnNames){setSortableColumns(this.columns,columnNames);},escapeNewlines(value){return value.replace(/\n/g,"<br/>");}}});const _hoisted_1$v=["tabindex"];const _hoisted_2$p={key:0};const _hoisted_3$m={class:"table__row"};const _hoisted_4$h=["innerHTML"];const _hoisted_5$f={key:1,class:"table__column__description"};const _hoisted_6$b={key:0};const _hoisted_7$a={key:1};const _hoisted_8$8=["colspan"];function _sfc_render$y(_ctx,_cache,$props,$setup,$data,$options){const _component_f_icon=vue.resolveComponent("f-icon");return vue.openBlock(),vue.createElementBlock("div",{class:vue.normalizeClass(_ctx.wrapperClasses)},[vue.createElementVNode("table",vue.mergeProps({class:["table",_ctx.tableClasses],tabindex:_ctx.tabindex},_ctx.$attrs),[_ctx.hasCaption?(vue.openBlock(),vue.createElementBlock("caption",_hoisted_2$p,[vue.renderSlot(_ctx.$slots,"caption")])):vue.createCommentVNode("v-if",true),vue.createTextVNode(),vue.createElementVNode("colgroup",null,[(vue.openBlock(true),vue.createElementBlock(vue.Fragment,null,vue.renderList(_ctx.columns,column=>{return vue.openBlock(),vue.createElementBlock("col",{key:column.id,class:vue.normalizeClass(column.size)},null,2/* CLASS */);}),128/* KEYED_FRAGMENT */))]),vue.createTextVNode(),vue.createElementVNode("thead",null,[vue.createElementVNode("tr",_hoisted_3$m,[(vue.openBlock(true),vue.createElementBlock(vue.Fragment,null,vue.renderList(_ctx.visibleColumns,column=>{return vue.openBlock(),vue.createElementBlock("th",vue.mergeProps({key:column.id,scope:"col",class:_ctx.columnClasses(column)},vue.toHandlers(column.sortable?{click:()=>_ctx.onClickColumnHeader(column)}:{},true)),[vue.createElementVNode("span",{innerHTML:_ctx.escapeNewlines(column.title)},null,8,_hoisted_4$h),vue.createTextVNode(),column.sortable?(vue.openBlock(),vue.createBlock(_component_f_icon,{key:0,class:vue.normalizeClass(_ctx.iconClasses(column)),name:_ctx.iconName(column)},null,8,["class","name"])):vue.createCommentVNode("v-if",true),vue.createTextVNode(),column.description?(vue.openBlock(),vue.createElementBlock("span",_hoisted_5$f,vue.toDisplayString(column.description),1/* TEXT */)):vue.createCommentVNode("v-if",true)],16/* FULL_PROPS */);}),128/* KEYED_FRAGMENT */))])]),vue.createTextVNode(),vue.createElementVNode("tbody",null,[!_ctx.hasInitiateColumns?(vue.openBlock(),vue.createElementBlock("tr",_hoisted_6$b,[vue.renderSlot(_ctx.$slots,"default",vue.normalizeProps(vue.guardReactiveProps({row:_ctx.emptyRow})))])):vue.createCommentVNode("v-if",true),vue.createTextVNode(),_ctx.isEmpty?(vue.openBlock(),vue.createElementBlock("tr",_hoisted_7$a,[vue.createElementVNode("td",{class:"table__column table__column--action",colspan:_ctx.columns.length},[vue.renderSlot(_ctx.$slots,"empty",{},()=>[vue.createTextVNode(vue.toDisplayString(_ctx.$t("fkui.data-table.empty","Tabellen är tom")),1/* TEXT */)])],8,_hoisted_8$8)])):vue.createCommentVNode("v-if",true),vue.createTextVNode(),(vue.openBlock(true),vue.createElementBlock(vue.Fragment,null,vue.renderList(_ctx.rows,row=>{return vue.openBlock(),vue.createElementBlock("tr",{key:_ctx.rowKey(row),class:"table__row"},[vue.renderSlot(_ctx.$slots,"default",vue.mergeProps({ref_for:true},{row}))]);}),128/* KEYED_FRAGMENT */))])],16,_hoisted_1$v)],2/* CLASS */);}const FDataTable=/* @__PURE__ */_export_sfc(_sfc_main$y,[["render",_sfc_render$y]]);function isDayEnabled(day,config2){return passesMinDate(day,config2.minDate)&&passesMaxDate(day,config2.maxDate)&&passesInvalidDates(day,config2.invalidDates)&&passesInvalidWeekdays(day,config2.invalidWeekdays);}function passesMinDate(day,config2){if(!config2){throw new Error("MinDate validator must be set");}if(!config2.limit){throw new Error("Invalid minDate config");}return config2.limit<=day.toString();}function passesMaxDate(day,config2){if(!config2){throw new Error("MaxDate validator must be set");}if(!config2.limit){throw new Error("Invalid maxDate config");}return day.toString()<=config2.limit;}function passesInvalidDates(day,config2){if(!config2){return true;}if(!logic.isInvalidDatesConfig(config2)){throw new Error("Invalid invalidDates config");}return!config2.dates.includes(day.toString());}function passesInvalidWeekdays(day,config2){if(!config2){return true;}if(!logic.isInvalidWeekdaysConfig(config2)){throw new Error("Invalid invalidWeekdays config");}return!config2.days.includes(day.weekDay);}function updateCalendarValue(datepicker,newValue){const{isDateEnabled,minDate,maxDate}=datepicker;const newCalendarValue=date.FDate.fromIso(newValue);if(!newCalendarValue.isValid()){datepicker.calendarValue=void 0;}else if(isInvalidMonth(newCalendarValue,minDate,maxDate)){datepicker.calendarValue=void 0;}else if(!isDateEnabled(newCalendarValue)){datepicker.calendarValue=void 0;}else if(!datepicker.calendarValue||!datepicker.calendarValue.equals(newCalendarValue)){datepicker.calendarValue=newCalendarValue;}}function getDisplayMonth(minDate,maxDate,selectedDate,initialMonth){let effectiveDate;if(selectedDate&&selectedDate.isValid()){effectiveDate=selectedDate;}else if(initialMonth&&initialMonth.isValid()){effectiveDate=initialMonth;}else{effectiveDate=date.FDate.now();}let month;if(!isInvalidMonth(effectiveDate,minDate,maxDate)){month=effectiveDate.startOfMonth();}else if(isMonthBefore(effectiveDate,minDate)){month=minDate==null?void 0:minDate.startOfMonth();}else if(isMonthAfter(effectiveDate,maxDate)){month=maxDate==null?void 0:maxDate.startOfMonth();}return month||date.FDate.now().startOfMonth();}const _sfc_main$x=vue.defineComponent({name:"FDatepickerField",components:{FCalendar,IPopup,FTextField,FIcon,FCalendarDay},mixins:[TranslationMixin],inheritAttrs:false,props:{/** Selected day.
481
481
  * @model
482
482
  */modelValue:{type:String,required:false,default:""},/**
483
483
  * Initial month. Applies when no day is selected.
@@ -500,7 +500,7 @@ defaultText:"",descriptionText:"",descriptionScreenReaderText:"",discreteDescrip
500
500
  * ```
501
501
  */inputWidth:{type:String,required:false,default:"sm-12"},/**
502
502
  * Set to `true`, empty string `""` or string `"disabled"` to disable this field.
503
- */disabled:{type:Boolean,required:false,default:false}},emits:["change","update:modelValue"],setup(){const defaultMinDate=date.FDate.now().addYears(-10);const defaultMaxDate=date.FDate.now().addYears(10);return{textFieldValue:vue.ref(""),textFieldTouched:vue.ref(false),textFieldValidityRevealed:vue.ref(false),textFieldTableMode:vue.inject("textFieldTableMode",false),componentTouched:vue.ref(false),calendarMonth:vue.shallowRef(getDisplayMonth(defaultMinDate,defaultMaxDate)),calendarValue:vue.shallowRef(void 0),isCalendarOpen:vue.ref(false),validationConfig:vue.ref({}),minDate:vue.shallowRef(defaultMinDate),maxDate:vue.shallowRef(defaultMaxDate),calendarInputs:vue.ref(null)};},computed:{calendarButtonText(){const{calendarValue}=this;if(calendarValue&&calendarValue.isValid()){const prettyDate=calendarValue.toString(date.DateFormat.FULL);const text=this.$t("fkui.datepicker-field.change","Ändra datum");return`${text} ${prettyDate}`;}else{return this.$t("fkui.datepicker-field.choose","Välj datum");}},popupClass(){return this.textFieldTableMode?"datepicker-field__popup datepicker-field__table":"datepicker-field__popup";}},watch:{modelValue:{async handler(value){if(value!==this.textFieldValue){await this.updateTextFieldValue(value);this.updateCalendarValue(value);}},immediate:true}},mounted(){logic.ValidationService.addValidatorsToElement(getInputElement(this),{date:{},dateFormat:{},minDate:{limit:this.minDate.toString()},maxDate:{limit:this.maxDate.toString()}},true);},methods:{dateFormatter:logic.parseDate,async onValidityTextField({detail}){if(this.textFieldValidityRevealed&&detail.validityMode==="INITIAL"){this.textFieldTouched=false;this.componentTouched=false;}if(!this.textFieldTouched&&["blur","change"].includes(detail.nativeEvent)){this.textFieldTouched=true;}if(this.isCalendarOpen){logic.alertScreenReader(detail.validationMessage,{assertive:true});}this.textFieldValidityRevealed=detail.validityMode!=="INITIAL";if(detail.validityMode==="INITIAL"||!this.textFieldTouched||this.componentTouched){return;}const inputElement=getInputElement(this);const pendingValidityEvent=new CustomEvent("pending-validity",{bubbles:false});inputElement.dispatchEvent(pendingValidityEvent);},onChangeTextField(){this.updateCalendarValue(this.textFieldValue);this.$emit("update:modelValue",this.textFieldValue);this.$emit("change",this.textFieldValue);},onClickCalendarButton(){if(!this.isCalendarOpen){this.calendarMonth=getDisplayMonth(this.minDate,this.maxDate,this.calendarValue,this.initialMonth);}this.isCalendarOpen=!this.isCalendarOpen;},onFocusoutTextFieldButton(e){if(this.componentTouched||this.$refs.component===null){return;}const component=getHTMLElementFromVueRef(this.$refs.component);const relatedTarget=e.relatedTarget;if(!component.contains(relatedTarget)){this.componentTouched=true;const inputElement=getInputElement(this);logic.ValidationService.setTouched(inputElement);logic.ValidationService.validateElement(inputElement);}},async onSelectCalendarDay(date2){this.componentTouched=true;this.isCalendarOpen=!this.isDateEnabled(date2);if(!this.isCalendarOpen){getHTMLElementFromVueRef(this.$refs.calendarButton).focus();}this.$emit("update:modelValue",date2.toString());this.$emit("change",date2.toString());await this.updateTextFieldValue(date2.toString());this.updateCalendarValue(date2.toString());},async onKeyupEsc(){this.isCalendarOpen=false;logic.waitForScreenReader(()=>{getHTMLElementFromVueRef(this.$refs.calendarButton).focus();});},async onClickCloseCalendarButton(){this.isCalendarOpen=false;logic.waitForScreenReader(()=>{getHTMLElementFromVueRef(this.$refs.calendarButton).focus();});},onOpenPopup(){if(!this.isCalendarOpen){return;}const popup=getHTMLElementFromVueRef(this.$refs.popup);const navMonth=popup.querySelector(".calendar-navbar__month");if(navMonth){navMonth.focus({preventScroll:true});}},onClosePopup(){this.isCalendarOpen=false;},async onValidationConfigUpdate(event){this.validationConfig=event.detail.config;if(this.validationConfig.minDate){const minDateConfig=this.validationConfig.minDate;if(!minDateConfig.limit){throw new Error("MinDate validator must be set");}this.minDate=date.FDate.fromIso(minDateConfig.limit.toString());}if(this.validationConfig.maxDate){const maxDateConfig=this.validationConfig.maxDate;if(!maxDateConfig.limit){throw new Error("MaxDate validator must be set");}this.maxDate=date.FDate.fromIso(maxDateConfig.limit.toString());}const element=findHTMLElementFromVueRef(this.$refs.calendarInputs);if(element){await this.$nextTick();logic.ValidationService.validateAllElements(element);}},isDateEnabled(day){return isDayEnabled(day,this.validationConfig);},isDaySelected(date2){return this.calendarValue?date2.equals(this.calendarValue):false;},highlightDay(date$1){return this.highlightToday&&date$1.equals(date.FDate.now());},async updateTextFieldValue(newValue){this.textFieldValue=newValue;await this.$nextTick();logic.ValidationService.validateElement(getInputElement(this));},updateCalendarValue}});const _hoisted_1$u={ref:"component",class:"datepicker-field"};const _hoisted_2$o=["disabled","aria-expanded"];const _hoisted_3$l={class:"sr-only"};const _hoisted_4$g={class:"datepicker-field__close"};function _sfc_render$x(_ctx,_cache,$props,$setup,$data,$options){const _component_f_icon=vue.resolveComponent("f-icon");const _component_f_text_field=vue.resolveComponent("f-text-field");const _component_f_calendar_day=vue.resolveComponent("f-calendar-day");const _component_f_calendar=vue.resolveComponent("f-calendar");const _component_i_popup=vue.resolveComponent("i-popup");return vue.openBlock(),vue.createElementBlock("div",_hoisted_1$u,[vue.createElementVNode("div",{ref:"calendarInputs",onFocusout:_cache[2]||(_cache[2]=(...args)=>_ctx.onFocusoutTextFieldButton&&_ctx.onFocusoutTextFieldButton(...args))},[vue.createVNode(_component_f_text_field,vue.mergeProps(_ctx.$attrs,{modelValue:_ctx.textFieldValue,"onUpdate:modelValue":_cache[1]||(_cache[1]=$event=>_ctx.textFieldValue=$event),maxlength:"20",disabled:_ctx.disabled,formatter:_ctx.dateFormatter,"label-width":_ctx.labelWidth,"input-width":_ctx.inputWidth,onComponentValidity:_ctx.onValidityTextField,onChange:_ctx.onChangeTextField,onValidationConfigUpdate:_ctx.onValidationConfigUpdate}),vue.createSlots({description:vue.withCtx(({descriptionClass,discreteDescriptionClass})=>[vue.renderSlot(_ctx.$slots,"description",vue.normalizeProps(vue.guardReactiveProps({descriptionClass,discreteDescriptionClass})))]),"error-message":vue.withCtx(({hasError,validationMessage})=>[vue.renderSlot(_ctx.$slots,"error-message",vue.normalizeProps(vue.guardReactiveProps({hasError,validationMessage})))]),"input-right":vue.withCtx(()=>[vue.createElementVNode("button",{ref:"calendarButton",disabled:_ctx.disabled,class:"datepicker-field__button",type:"button","aria-expanded":_ctx.isCalendarOpen?"true":"false","data-test":"calendar-button",onClick:_cache[0]||(_cache[0]=$event=>_ctx.onClickCalendarButton())},[vue.createVNode(_component_f_icon,{name:"calendar"}),vue.createTextVNode(),vue.createElementVNode("span",_hoisted_3$l,vue.toDisplayString(_ctx.calendarButtonText),1/* TEXT */)],8,_hoisted_2$o)]),default:vue.withCtx(()=>[vue.renderSlot(_ctx.$slots,"default",{},()=>[vue.createTextVNode(vue.toDisplayString(_ctx.$t("fkui.datepicker-field.label","Datum")),1/* TEXT */)]),vue.createTextVNode(),vue.createTextVNode(),vue.createTextVNode(),vue.createTextVNode()]),_:2/* DYNAMIC */},[_ctx.$slots.tooltip?{name:"tooltip",fn:vue.withCtx(()=>[vue.renderSlot(_ctx.$slots,"tooltip")]),key:"0"}:void 0]),1040,["modelValue","disabled","formatter","label-width","input-width","onComponentValidity","onChange","onValidationConfigUpdate"])],544/* NEED_HYDRATION, NEED_PATCH */),vue.createTextVNode(),vue.createVNode(_component_i_popup,{"is-open":_ctx.isCalendarOpen,anchor:_ctx.calendarInputs,inline:_ctx.alwaysInline?"always":void 0,"set-focus":false,onOpen:_ctx.onOpenPopup,onClose:_ctx.onClosePopup},{default:vue.withCtx(()=>[vue.createElementVNode("div",{ref:"popup",class:vue.normalizeClass(_ctx.popupClass)},[vue.createVNode(_component_f_calendar,{modelValue:_ctx.calendarMonth,"onUpdate:modelValue":_cache[3]||(_cache[3]=$event=>_ctx.calendarMonth=$event),"tab-date":_ctx.calendarValue,"min-date":_ctx.minDate,"max-date":_ctx.maxDate,onClick:_ctx.onSelectCalendarDay,onKeyup:vue.withKeys(vue.withModifiers(_ctx.onKeyupEsc,["stop"]),["esc","native"])},{default:vue.withCtx(({date:date2,isFocused})=>[vue.createVNode(_component_f_calendar_day,{day:date2,enabled:_ctx.isDateEnabled(date2),focused:isFocused,highlight:_ctx.highlightDay(date2),selected:_ctx.isDaySelected(date2)},null,8,["day","enabled","focused","highlight","selected"])]),_:1/* STABLE */},8,["modelValue","tab-date","min-date","max-date","onClick","onKeyup"]),vue.createTextVNode(),vue.createElementVNode("div",_hoisted_4$g,[vue.createElementVNode("button",{class:"button button--discrete button--discrete--black datepicker-field__close__button",type:"button",onClick:_cache[4]||(_cache[4]=(...args)=>_ctx.onClickCloseCalendarButton&&_ctx.onClickCloseCalendarButton(...args)),onKeyup:_cache[5]||(_cache[5]=vue.withKeys(vue.withModifiers((...args)=>_ctx.onKeyupEsc&&_ctx.onKeyupEsc(...args),["stop"]),["esc"]))},[vue.createElementVNode("span",null,vue.toDisplayString(_ctx.$t("fkui.datepicker-field.close","Stäng")),1/* TEXT */),vue.createTextVNode(),vue.createVNode(_component_f_icon,{"aria-hidden":"true",class:"button__icon",name:"close"})],32/* NEED_HYDRATION */)])],2/* CLASS */)]),_:1/* STABLE */},8,["is-open","anchor","inline","onOpen","onClose"])],512/* NEED_PATCH */);}const FDatepickerField=/* @__PURE__ */_export_sfc(_sfc_main$x,[["render",_sfc_render$x]]);const _sfc_main$w=vue.defineComponent({name:"FExpand",data(){return{height:0,initialStyle:{overflow:"hidden",transition:"height 400ms cubic-bezier(0.46, 0.03, 0.52, 0.96)"},hiddenStyle:{height:"auto",position:"absolute",visibility:"hidden"},visibleStyle:{width:"",position:"",visibility:"",height:"0px"},openedStyle:{height:"auto"}};},methods:{enter(element){const htmlElement=getHTMLElementFromVueRef(element);Object.assign(htmlElement.style,this.initialStyle);Object.assign(htmlElement.style,this.hiddenStyle);htmlElement.style.width=getComputedStyle(element).width;const height=getComputedStyle(element).height;Object.assign(htmlElement.style,this.visibleStyle);getComputedStyle(element).height;setTimeout(()=>{this.height=parseInt(height,10);htmlElement.style.height=height;});},afterEnter(element){const htmlElement=getHTMLElementFromVueRef(element);Object.assign(htmlElement.style,this.openedStyle);},leave(element){const htmlElement=getHTMLElementFromVueRef(element);const height=getComputedStyle(element).height;htmlElement.style.height=height;getComputedStyle(element).height;setTimeout(()=>{Object.assign(htmlElement.style,this.visibleStyle);});}}});function _sfc_render$w(_ctx,_cache,$props,$setup,$data,$options){return vue.openBlock(),vue.createBlock(vue.Transition,{onEnter:_ctx.enter,onAfterEnter:_ctx.afterEnter,onLeave:_ctx.leave},{default:vue.withCtx(()=>[vue.renderSlot(_ctx.$slots,"default",{height:_ctx.height})]),_:3/* FORWARDED */},8,["onEnter","onAfterEnter","onLeave"]);}const FExpand=/* @__PURE__ */_export_sfc(_sfc_main$w,[["render",_sfc_render$w]]);const _sfc_main$v=vue.defineComponent({name:"FExpandablePanel",components:{FIcon,FExpand},mixins:[TranslationMixin],inheritAttrs:false,props:{/**
503
+ */disabled:{type:Boolean,required:false,default:false}},emits:["change","update:modelValue"],setup(){const defaultMinDate=date.FDate.now().addYears(-10);const defaultMaxDate=date.FDate.now().addYears(10);return{textFieldValue:vue.ref(""),textFieldTouched:vue.ref(false),textFieldValidityRevealed:vue.ref(false),textFieldTableMode:vue.inject("textFieldTableMode",false),componentTouched:vue.ref(false),calendarMonth:vue.shallowRef(getDisplayMonth(defaultMinDate,defaultMaxDate)),calendarValue:vue.shallowRef(void 0),isCalendarOpen:vue.ref(false),validationConfig:vue.ref({}),minDate:vue.shallowRef(defaultMinDate),maxDate:vue.shallowRef(defaultMaxDate),calendarInputs:vue.ref(null)};},computed:{calendarButtonText(){const{calendarValue}=this;if(calendarValue&&calendarValue.isValid()){const prettyDate=calendarValue.toString(date.DateFormat.FULL);const text=this.$t("fkui.datepicker-field.change","Ändra datum");return`${text} ${prettyDate}`;}else{return this.$t("fkui.datepicker-field.choose","Välj datum");}},popupClass(){return this.textFieldTableMode?"datepicker-field__popup datepicker-field__table":"datepicker-field__popup";}},watch:{modelValue:{async handler(value){if(value!==this.textFieldValue){await this.updateTextFieldValue(value);updateCalendarValue(this,value);}},immediate:true}},mounted(){logic.ValidationService.addValidatorsToElement(getInputElement(this),{date:{},dateFormat:{},minDate:{limit:this.minDate.toString()},maxDate:{limit:this.maxDate.toString()}},true);},methods:{dateFormatter:logic.parseDate,async onValidityTextField({detail}){if(this.textFieldValidityRevealed&&detail.validityMode==="INITIAL"){this.textFieldTouched=false;this.componentTouched=false;}if(!this.textFieldTouched&&["blur","change"].includes(detail.nativeEvent)){this.textFieldTouched=true;}if(this.isCalendarOpen){logic.alertScreenReader(detail.validationMessage,{assertive:true});}this.textFieldValidityRevealed=detail.validityMode!=="INITIAL";if(detail.validityMode==="INITIAL"||!this.textFieldTouched||this.componentTouched){return;}const inputElement=getInputElement(this);const pendingValidityEvent=new CustomEvent("pending-validity",{bubbles:false});inputElement.dispatchEvent(pendingValidityEvent);},onChangeTextField(){updateCalendarValue(this,this.textFieldValue);this.$emit("update:modelValue",this.textFieldValue);this.$emit("change",this.textFieldValue);},onClickCalendarButton(){if(!this.isCalendarOpen){this.calendarMonth=getDisplayMonth(this.minDate,this.maxDate,this.calendarValue,this.initialMonth);}this.isCalendarOpen=!this.isCalendarOpen;},onFocusoutTextFieldButton(e){if(this.componentTouched||this.$refs.component===null){return;}const component=getHTMLElementFromVueRef(this.$refs.component);const relatedTarget=e.relatedTarget;if(!component.contains(relatedTarget)){this.componentTouched=true;const inputElement=getInputElement(this);logic.ValidationService.setTouched(inputElement);logic.ValidationService.validateElement(inputElement);}},async onSelectCalendarDay(date2){this.componentTouched=true;this.isCalendarOpen=!this.isDateEnabled(date2);if(!this.isCalendarOpen){getHTMLElementFromVueRef(this.$refs.calendarButton).focus();}this.$emit("update:modelValue",date2.toString());this.$emit("change",date2.toString());await this.updateTextFieldValue(date2.toString());updateCalendarValue(this,date2.toString());},async onKeyupEsc(){this.isCalendarOpen=false;logic.waitForScreenReader(()=>{getHTMLElementFromVueRef(this.$refs.calendarButton).focus();});},async onClickCloseCalendarButton(){this.isCalendarOpen=false;logic.waitForScreenReader(()=>{getHTMLElementFromVueRef(this.$refs.calendarButton).focus();});},onOpenPopup(){if(!this.isCalendarOpen){return;}const popup=getHTMLElementFromVueRef(this.$refs.popup);const navMonth=popup.querySelector(".calendar-navbar__month");if(navMonth){navMonth.focus({preventScroll:true});}},onClosePopup(){this.isCalendarOpen=false;},async onValidationConfigUpdate(event){this.validationConfig=event.detail.config;if(this.validationConfig.minDate){const minDateConfig=this.validationConfig.minDate;if(!minDateConfig.limit){throw new Error("MinDate validator must be set");}this.minDate=date.FDate.fromIso(minDateConfig.limit.toString());}if(this.validationConfig.maxDate){const maxDateConfig=this.validationConfig.maxDate;if(!maxDateConfig.limit){throw new Error("MaxDate validator must be set");}this.maxDate=date.FDate.fromIso(maxDateConfig.limit.toString());}const element=findHTMLElementFromVueRef(this.$refs.calendarInputs);if(element){await this.$nextTick();logic.ValidationService.validateAllElements(element);}},isDateEnabled(day){return isDayEnabled(day,this.validationConfig);},isDaySelected(date2){return this.calendarValue?date2.equals(this.calendarValue):false;},highlightDay(date$1){return this.highlightToday&&date$1.equals(date.FDate.now());},async updateTextFieldValue(newValue){this.textFieldValue=newValue;await this.$nextTick();logic.ValidationService.validateElement(getInputElement(this));}}});const _hoisted_1$u={ref:"component",class:"datepicker-field"};const _hoisted_2$o=["disabled","aria-expanded"];const _hoisted_3$l={class:"sr-only"};const _hoisted_4$g={class:"datepicker-field__close"};function _sfc_render$x(_ctx,_cache,$props,$setup,$data,$options){const _component_f_icon=vue.resolveComponent("f-icon");const _component_f_text_field=vue.resolveComponent("f-text-field");const _component_f_calendar_day=vue.resolveComponent("f-calendar-day");const _component_f_calendar=vue.resolveComponent("f-calendar");const _component_i_popup=vue.resolveComponent("i-popup");return vue.openBlock(),vue.createElementBlock("div",_hoisted_1$u,[vue.createElementVNode("div",{ref:"calendarInputs",onFocusout:_cache[2]||(_cache[2]=(...args)=>_ctx.onFocusoutTextFieldButton&&_ctx.onFocusoutTextFieldButton(...args))},[vue.createVNode(_component_f_text_field,vue.mergeProps(_ctx.$attrs,{modelValue:_ctx.textFieldValue,"onUpdate:modelValue":_cache[1]||(_cache[1]=$event=>_ctx.textFieldValue=$event),maxlength:"20",disabled:_ctx.disabled,formatter:_ctx.dateFormatter,"label-width":_ctx.labelWidth,"input-width":_ctx.inputWidth,onComponentValidity:_ctx.onValidityTextField,onChange:_ctx.onChangeTextField,onValidationConfigUpdate:_ctx.onValidationConfigUpdate}),vue.createSlots({description:vue.withCtx(({descriptionClass,discreteDescriptionClass})=>[vue.renderSlot(_ctx.$slots,"description",vue.normalizeProps(vue.guardReactiveProps({descriptionClass,discreteDescriptionClass})))]),"error-message":vue.withCtx(({hasError,validationMessage})=>[vue.renderSlot(_ctx.$slots,"error-message",vue.normalizeProps(vue.guardReactiveProps({hasError,validationMessage})))]),"input-right":vue.withCtx(()=>[vue.createElementVNode("button",{ref:"calendarButton",disabled:_ctx.disabled,class:"datepicker-field__button",type:"button","aria-expanded":_ctx.isCalendarOpen?"true":"false","data-test":"calendar-button",onClick:_cache[0]||(_cache[0]=$event=>_ctx.onClickCalendarButton())},[vue.createVNode(_component_f_icon,{name:"calendar"}),vue.createTextVNode(),vue.createElementVNode("span",_hoisted_3$l,vue.toDisplayString(_ctx.calendarButtonText),1/* TEXT */)],8,_hoisted_2$o)]),default:vue.withCtx(()=>[vue.renderSlot(_ctx.$slots,"default",{},()=>[vue.createTextVNode(vue.toDisplayString(_ctx.$t("fkui.datepicker-field.label","Datum")),1/* TEXT */)]),vue.createTextVNode(),vue.createTextVNode(),vue.createTextVNode(),vue.createTextVNode()]),_:2/* DYNAMIC */},[_ctx.$slots.tooltip?{name:"tooltip",fn:vue.withCtx(()=>[vue.renderSlot(_ctx.$slots,"tooltip")]),key:"0"}:void 0]),1040,["modelValue","disabled","formatter","label-width","input-width","onComponentValidity","onChange","onValidationConfigUpdate"])],544/* NEED_HYDRATION, NEED_PATCH */),vue.createTextVNode(),vue.createVNode(_component_i_popup,{"is-open":_ctx.isCalendarOpen,anchor:_ctx.calendarInputs,inline:_ctx.alwaysInline?"always":void 0,"set-focus":false,onOpen:_ctx.onOpenPopup,onClose:_ctx.onClosePopup},{default:vue.withCtx(()=>[vue.createElementVNode("div",{ref:"popup",class:vue.normalizeClass(_ctx.popupClass)},[vue.createVNode(_component_f_calendar,{modelValue:_ctx.calendarMonth,"onUpdate:modelValue":_cache[3]||(_cache[3]=$event=>_ctx.calendarMonth=$event),"tab-date":_ctx.calendarValue,"min-date":_ctx.minDate,"max-date":_ctx.maxDate,onClick:_ctx.onSelectCalendarDay,onKeyup:vue.withKeys(vue.withModifiers(_ctx.onKeyupEsc,["stop"]),["esc","native"])},{default:vue.withCtx(({date:date2,isFocused})=>[vue.createVNode(_component_f_calendar_day,{day:date2,enabled:_ctx.isDateEnabled(date2),focused:isFocused,highlight:_ctx.highlightDay(date2),selected:_ctx.isDaySelected(date2)},null,8,["day","enabled","focused","highlight","selected"])]),_:1/* STABLE */},8,["modelValue","tab-date","min-date","max-date","onClick","onKeyup"]),vue.createTextVNode(),vue.createElementVNode("div",_hoisted_4$g,[vue.createElementVNode("button",{class:"button button--discrete button--discrete--black datepicker-field__close__button",type:"button",onClick:_cache[4]||(_cache[4]=(...args)=>_ctx.onClickCloseCalendarButton&&_ctx.onClickCloseCalendarButton(...args)),onKeyup:_cache[5]||(_cache[5]=vue.withKeys(vue.withModifiers((...args)=>_ctx.onKeyupEsc&&_ctx.onKeyupEsc(...args),["stop"]),["esc"]))},[vue.createElementVNode("span",null,vue.toDisplayString(_ctx.$t("fkui.datepicker-field.close","Stäng")),1/* TEXT */),vue.createTextVNode(),vue.createVNode(_component_f_icon,{"aria-hidden":"true",class:"button__icon",name:"close"})],32/* NEED_HYDRATION */)])],2/* CLASS */)]),_:1/* STABLE */},8,["is-open","anchor","inline","onOpen","onClose"])],512/* NEED_PATCH */);}const FDatepickerField=/* @__PURE__ */_export_sfc(_sfc_main$x,[["render",_sfc_render$x]]);const _sfc_main$w=vue.defineComponent({name:"FExpand",data(){return{height:0,initialStyle:{overflow:"hidden",transition:"height 400ms cubic-bezier(0.46, 0.03, 0.52, 0.96)"},hiddenStyle:{height:"auto",position:"absolute",visibility:"hidden"},visibleStyle:{width:"",position:"",visibility:"",height:"0px"},openedStyle:{height:"auto"}};},methods:{enter(element){const htmlElement=getHTMLElementFromVueRef(element);Object.assign(htmlElement.style,this.initialStyle);Object.assign(htmlElement.style,this.hiddenStyle);htmlElement.style.width=getComputedStyle(element).width;const height=getComputedStyle(element).height;Object.assign(htmlElement.style,this.visibleStyle);getComputedStyle(element).height;setTimeout(()=>{this.height=parseInt(height,10);htmlElement.style.height=height;});},afterEnter(element){const htmlElement=getHTMLElementFromVueRef(element);Object.assign(htmlElement.style,this.openedStyle);},leave(element){const htmlElement=getHTMLElementFromVueRef(element);const height=getComputedStyle(element).height;htmlElement.style.height=height;getComputedStyle(element).height;setTimeout(()=>{Object.assign(htmlElement.style,this.visibleStyle);});}}});function _sfc_render$w(_ctx,_cache,$props,$setup,$data,$options){return vue.openBlock(),vue.createBlock(vue.Transition,{onEnter:_ctx.enter,onAfterEnter:_ctx.afterEnter,onLeave:_ctx.leave},{default:vue.withCtx(()=>[vue.renderSlot(_ctx.$slots,"default",{height:_ctx.height})]),_:3/* FORWARDED */},8,["onEnter","onAfterEnter","onLeave"]);}const FExpand=/* @__PURE__ */_export_sfc(_sfc_main$w,[["render",_sfc_render$w]]);const _sfc_main$v=vue.defineComponent({name:"FExpandablePanel",components:{FIcon,FExpand},mixins:[TranslationMixin],inheritAttrs:false,props:{/**
504
504
  * Toggle expanded/collapsed state
505
505
  */expanded:{type:Boolean,required:false,default:false},/**
506
506
  * Element to render for the header element inside the expandable panel.
@@ -747,7 +747,7 @@ onItemFocus(event){if(event&&event.target){event.target.style.position="relative
747
747
  /* it should contain a default value of undefined and proptype should
748
748
  /* include undefined (see comment on line above) */modelValue:{type:anyType,required:false},/**
749
749
  * The value for the input.
750
- */value:{type:anyType,required:true}},emits:["change","update:modelValue"],setup(){return{sharedName:vue.inject("sharedName",void 0),showDetails:vue.inject("showDetails","never"),getFieldsetLabelText:vue.inject("getFieldsetLabelText",()=>"")};},data(){return{height:0,initialStyle:{overflow:"hidden",transition:"height 400ms cubic-bezier(0.46, 0.03, 0.52, 0.96)"},hiddenStyle:{height:"auto",position:"absolute",visibility:"hidden"},visibleStyle:{width:"",position:"",visibility:"",height:"0px"},openedStyle:{height:"auto"}};},computed:{attrs(){var _this$sharedName;return{...this.$attrs,value:this.value,checked:this.value===this.modelValue,name:(_this$sharedName=this.sharedName)!==null&&_this$sharedName!==void 0?_this$sharedName:this.$attrs.name,onChange:event=>{if(event.target instanceof HTMLInputElement){this.$emit("update:modelValue",this.value);this.$emit("change",this.value);}},onInput:event=>{event.target.focus();}};},disabledClass(){return this.disabled?"disabled":"";}},methods:{async onValidity({detail}){if(detail.target!==this.$el.querySelector("input")){return;}await this.$nextTick();let errorMessage="";if(hasSlot(this,"default")){const labelText=this.getFieldsetLabelText();if(labelText){errorMessage=`${labelText} ${renderSlotText(this.$slots.default)}`;}else{errorMessage=`${renderSlotText(this.$slots.default)}`;}}const element=this.$el.querySelector(`#${detail.elementId}`);if(element){dispatchComponentValidityEvent(element,{...detail,errorMessage,focusElementId:detail.elementId});}},enter(element){const htmlElement=getHTMLElementFromVueRef(element);const computedStyle=getComputedStyle(element);Object.assign(htmlElement.style,this.initialStyle);Object.assign(htmlElement.style,this.hiddenStyle);htmlElement.style.width=computedStyle.width;const height=computedStyle.height;Object.assign(htmlElement.style,this.visibleStyle);getComputedStyle(element).height;setTimeout(()=>{this.height=parseInt(height,10);htmlElement.style.height=height;});},afterEnter(element){const htmlElement=getHTMLElementFromVueRef(element);Object.assign(htmlElement.style,this.openedStyle);},leave(element){const htmlElement=getHTMLElementFromVueRef(element);const height=getComputedStyle(element).height;htmlElement.style.height=height;getComputedStyle(element).height;setTimeout(()=>{Object.assign(htmlElement.style,this.visibleStyle);});}}});const _hoisted_1$8=["id","disabled"];const _hoisted_2$5=["for"];const _hoisted_3$4={key:0,class:"radio-button__details"};const _hoisted_4$3=/* @__PURE__ */vue.createElementVNode("br",null,null,-1/* HOISTED */);const _hoisted_5$3={key:0,class:"radio-button__details"};const _hoisted_6$3=/* @__PURE__ */vue.createElementVNode("br",null,null,-1/* HOISTED */);function _sfc_render$9(_ctx,_cache,$props,$setup,$data,$options){return vue.openBlock(),vue.createElementBlock("div",{class:vue.normalizeClass(["radio-button",_ctx.disabledClass]),onValidity:_cache[0]||(_cache[0]=(...args)=>_ctx.onValidity&&_ctx.onValidity(...args))},[vue.createElementVNode("input",vue.mergeProps({id:_ctx.id,type:"radio",class:"radio-button__input",disabled:_ctx.disabled},_ctx.attrs),null,16,_hoisted_1$8),vue.createTextVNode(),vue.createElementVNode("label",{class:vue.normalizeClass(_ctx.$slots.details?"radio-button__label radio-button__width":"radio-button__label"),for:_ctx.id},[vue.renderSlot(_ctx.$slots,"default"),vue.createTextVNode(),_ctx.$slots.details?(vue.openBlock(),vue.createElementBlock(vue.Fragment,{key:0},[_ctx.showDetails==="always"?(vue.openBlock(),vue.createElementBlock("span",_hoisted_3$4,[_hoisted_4$3,vue.createTextVNode(),vue.renderSlot(_ctx.$slots,"details")])):vue.createCommentVNode("v-if",true),vue.createTextVNode(),_ctx.showDetails==="when-selected"?(vue.openBlock(),vue.createBlock(vue.Transition,{key:1,onEnter:_ctx.enter,onAfterEnter:_ctx.afterEnter,onLeave:_ctx.leave},{default:vue.withCtx(()=>[_ctx.value===_ctx.modelValue?(vue.openBlock(),vue.createElementBlock("span",_hoisted_5$3,[_hoisted_6$3,vue.createTextVNode(),vue.renderSlot(_ctx.$slots,"details",{height:_ctx.height})])):vue.createCommentVNode("v-if",true)]),_:3/* FORWARDED */},8,["onEnter","onAfterEnter","onLeave"])):vue.createCommentVNode("v-if",true)],64/* STABLE_FRAGMENT */)):vue.createCommentVNode("v-if",true)],10,_hoisted_2$5)],34/* CLASS, NEED_HYDRATION */);}const FRadioField=/* @__PURE__ */_export_sfc(_sfc_main$9,[["render",_sfc_render$9]]);const _sfc_main$8=vue.defineComponent({name:"FRadioGroup",components:{FFieldset},inheritAttrs:false,props:{/**
750
+ */value:{type:anyType,required:true}},emits:["change","update:modelValue"],setup(){const{sharedName,showDetails,getFieldsetLabelText}=useFieldset();return{sharedName,showDetails,getFieldsetLabelText};},data(){return{height:0,initialStyle:{overflow:"hidden",transition:"height 400ms cubic-bezier(0.46, 0.03, 0.52, 0.96)"},hiddenStyle:{height:"auto",position:"absolute",visibility:"hidden"},visibleStyle:{width:"",position:"",visibility:"",height:"0px"},openedStyle:{height:"auto"}};},computed:{attrs(){var _this$sharedName;return{...this.$attrs,value:this.value,checked:this.value===this.modelValue,name:(_this$sharedName=this.sharedName)!==null&&_this$sharedName!==void 0?_this$sharedName:this.$attrs.name,onChange:event=>{if(event.target instanceof HTMLInputElement){this.$emit("update:modelValue",this.value);this.$emit("change",this.value);}},onInput:event=>{event.target.focus();}};},disabledClass(){return this.disabled?"disabled":"";}},methods:{async onValidity({detail}){if(detail.target!==this.$el.querySelector("input")){return;}await this.$nextTick();let errorMessage="";if(hasSlot(this,"default")){const labelText=this.getFieldsetLabelText();if(labelText){errorMessage=`${labelText} ${renderSlotText(this.$slots.default)}`;}else{errorMessage=`${renderSlotText(this.$slots.default)}`;}}const element=this.$el.querySelector(`#${detail.elementId}`);if(element){dispatchComponentValidityEvent(element,{...detail,errorMessage,focusElementId:detail.elementId});}},enter(element){const htmlElement=getHTMLElementFromVueRef(element);const computedStyle=getComputedStyle(element);Object.assign(htmlElement.style,this.initialStyle);Object.assign(htmlElement.style,this.hiddenStyle);htmlElement.style.width=computedStyle.width;const height=computedStyle.height;Object.assign(htmlElement.style,this.visibleStyle);getComputedStyle(element).height;setTimeout(()=>{this.height=parseInt(height,10);htmlElement.style.height=height;});},afterEnter(element){const htmlElement=getHTMLElementFromVueRef(element);Object.assign(htmlElement.style,this.openedStyle);},leave(element){const htmlElement=getHTMLElementFromVueRef(element);const height=getComputedStyle(element).height;htmlElement.style.height=height;getComputedStyle(element).height;setTimeout(()=>{Object.assign(htmlElement.style,this.visibleStyle);});}}});const _hoisted_1$8=["id","disabled"];const _hoisted_2$5=["for"];const _hoisted_3$4={key:0,class:"radio-button__details"};const _hoisted_4$3=/* @__PURE__ */vue.createElementVNode("br",null,null,-1/* HOISTED */);const _hoisted_5$3={key:0,class:"radio-button__details"};const _hoisted_6$3=/* @__PURE__ */vue.createElementVNode("br",null,null,-1/* HOISTED */);function _sfc_render$9(_ctx,_cache,$props,$setup,$data,$options){return vue.openBlock(),vue.createElementBlock("div",{class:vue.normalizeClass(["radio-button",_ctx.disabledClass]),onValidity:_cache[0]||(_cache[0]=(...args)=>_ctx.onValidity&&_ctx.onValidity(...args))},[vue.createElementVNode("input",vue.mergeProps({id:_ctx.id,type:"radio",class:"radio-button__input",disabled:_ctx.disabled},_ctx.attrs),null,16,_hoisted_1$8),vue.createTextVNode(),vue.createElementVNode("label",{class:vue.normalizeClass(_ctx.$slots.details?"radio-button__label radio-button__width":"radio-button__label"),for:_ctx.id},[vue.renderSlot(_ctx.$slots,"default"),vue.createTextVNode(),_ctx.$slots.details?(vue.openBlock(),vue.createElementBlock(vue.Fragment,{key:0},[_ctx.showDetails==="always"?(vue.openBlock(),vue.createElementBlock("span",_hoisted_3$4,[_hoisted_4$3,vue.createTextVNode(),vue.renderSlot(_ctx.$slots,"details")])):vue.createCommentVNode("v-if",true),vue.createTextVNode(),_ctx.showDetails==="when-selected"?(vue.openBlock(),vue.createBlock(vue.Transition,{key:1,onEnter:_ctx.enter,onAfterEnter:_ctx.afterEnter,onLeave:_ctx.leave},{default:vue.withCtx(()=>[_ctx.value===_ctx.modelValue?(vue.openBlock(),vue.createElementBlock("span",_hoisted_5$3,[_hoisted_6$3,vue.createTextVNode(),vue.renderSlot(_ctx.$slots,"details",{height:_ctx.height})])):vue.createCommentVNode("v-if",true)]),_:3/* FORWARDED */},8,["onEnter","onAfterEnter","onLeave"])):vue.createCommentVNode("v-if",true)],64/* STABLE_FRAGMENT */)):vue.createCommentVNode("v-if",true)],10,_hoisted_2$5)],34/* CLASS, NEED_HYDRATION */);}const FRadioField=/* @__PURE__ */_export_sfc(_sfc_main$9,[["render",_sfc_render$9]]);const _sfc_main$8=vue.defineComponent({name:"FRadioGroup",components:{FFieldset},inheritAttrs:false,props:{/**
751
751
  * The id for the fieldset id attribute.
752
752
  * If the prop is not set the id will be generated.
753
753
  */id:{type:String,required:false,default:()=>logic.ElementIdService.generateElementId()},/**
@@ -909,4 +909,4 @@ this.modelValue.length>=this.maxlength-this.softLimit;},charactersLeftWarningInt
909
909
  * @model
910
910
  */modelValue:{type:Object,required:true},/**
911
911
  * Dialogue tree
912
- */dialogueTree:{type:Object,required:true}},emits:["change","update:modelValue"],data(){return{currentStep:this.dialogueTree,steps:[]};},computed:{userData(){if(isDialogueTreeEndQuestion(this.currentStep)){return this.currentStep.userData;}return void 0;},options(){if(!isDialogueTreeEndQuestion(this.currentStep)){return this.currentStep.options;}return[];}},created(){this.currentStep=this.dialogueTree;if(isDialogueTreeEndQuestion(this.currentStep)){this.emitChange(true);}else{this.emitChange(false);}},methods:{async onClickedOption(option,index){this.steps.push(index);this.currentStep=option.question;if(isDialogueTreeEndQuestion(option.question)){this.emitChange(true);await this.$nextTick();logic.focusFirst(this.$el);}else{this.emitChange(false);await this.$nextTick();const firstElement=getHTMLElementsFromVueRef(this.$refs["dialogueButton-0"])[0];if(firstElement){logic.focus(firstElement);}}},emitChange(lastStep){const emit={label:this.currentStep.label,lastStep,steps:this.steps};this.$emit("update:modelValue",emit);this.$emit("change",emit);}}});const _hoisted_1={class:"dialogue-tree"};const _hoisted_2={key:0,class:"dialogue-tree__list"};const _hoisted_3=["onClick"];function _sfc_render(_ctx,_cache,$props,$setup,$data,$options){const _component_f_icon=vue.resolveComponent("f-icon");return vue.openBlock(),vue.createElementBlock("div",_hoisted_1,[_ctx.options.length>0?(vue.openBlock(),vue.createElementBlock("ul",_hoisted_2,[(vue.openBlock(true),vue.createElementBlock(vue.Fragment,null,vue.renderList(_ctx.options,(option,index)=>{return vue.openBlock(),vue.createElementBlock("li",{key:option.label,class:"dialogue-tree__list-item"},[vue.createElementVNode("button",{ref_for:true,ref:`dialogueButton-${index}`,type:"button",onClick:$event=>_ctx.onClickedOption(option,index)},[vue.createElementVNode("span",null,vue.toDisplayString(option.label),1/* TEXT */),vue.createTextVNode(),vue.createVNode(_component_f_icon,{name:"arrow-right"})],8,_hoisted_3)]);}),128/* KEYED_FRAGMENT */))])):vue.renderSlot(_ctx.$slots,"default",vue.normalizeProps(vue.mergeProps({key:1},{userData:_ctx.userData})))]);}const FDialogueTree=/* @__PURE__ */_export_sfc(_sfc_main,[["render",_sfc_render]]);exports.ActivateItemInjected=ActivateItemInjected;exports.ErrorData=ErrorData;exports.ErrorPlugin=ErrorPlugin;exports.ErrorViewData=ErrorViewData;exports.EventBus=EventBus;exports.FBadge=FBadge;exports.FBankAccountNumberTextField=_sfc_main$I;exports.FBankgiroTextField=_sfc_main$H;exports.FCalendar=FCalendar;exports.FCalendarDay=FCalendarDay;exports.FCard=FCard;exports.FCheckboxField=FCheckboxField;exports.FCheckboxGroup=FCheckboxGroup;exports.FCheckboxGroupField=FCheckboxField;exports.FClearingnumberTextField=_sfc_main$G;exports.FConfirmModal=FConfirmModal;exports.FContextMenu=FContextMenu;exports.FCrudButton=FCrudButton;exports.FCrudDataset=FCrudDataset;exports.FCurrencyTextField=_sfc_main$K;exports.FDataTable=FDataTable;exports.FDatepickerField=FDatepickerField;exports.FDialogueTree=FDialogueTree;exports.FEmailTextField=FEmailTextField;exports.FErrorHandlingApp=FErrorHandlingApp;exports.FErrorList=FErrorList;exports.FExpand=FExpand;exports.FExpandablePanel=FExpandablePanel;exports.FExpandableParagraph=FExpandableParagraph;exports.FFieldset=FFieldset;exports.FFileItem=FFileItem;exports.FFileSelector=FFileSelector;exports.FForm=FForm;exports.FFormModal=FFormModal;exports.FFormModalAction=FValidationFormAction;exports.FFormStep=FFormStep;exports.FFormStepButton=FFormStepButton;exports.FIcon=FIcon;exports.FInteractiveTable=FInteractiveTable;exports.FKUIConfigButtonOrder=FKUIConfigButtonOrder;exports.FLabel=FLabel;exports.FLayoutApplicationTemplate=FLayoutApplicationTemplate;exports.FLayoutLeftPanel=FLayoutLeftPanel;exports.FLayoutRightPanel=FLayoutRightPanel;exports.FLayoutRightPanelService=FLayoutRightPanelService;exports.FList=FList;exports.FLoader=FLoader;exports.FMessageBox=FMessageBox;exports.FModal=FModal;exports.FNavigationMenu=FNavigationMenu;exports.FNumericTextField=_sfc_main$F;exports.FOffline=FOffline;exports.FOrganisationsnummerTextField=_sfc_main$A;exports.FOutputField=FOutputField;exports.FPageHeader=FPageHeader;exports.FPercentTextField=_sfc_main$B;exports.FPersonnummerTextField=_sfc_main$E;exports.FPhoneTextField=FPhoneTextField;exports.FPlusgiroTextField=_sfc_main$D;exports.FPostalCodeTextField=_sfc_main$C;exports.FProgressbar=FProgressbar;exports.FRadioField=FRadioField;exports.FRadioGroup=FRadioGroup;exports.FRadioGroupField=FRadioField;exports.FSearchTextField=FSearchTextField;exports.FSelectField=FSelectField;exports.FSortFilterDataset=FSortFilterDataset;exports.FSortFilterDatasetInjected=FSortFilterDatasetInjected;exports.FStaticField=FStaticField;exports.FTableColumn=FTableColumn;exports.FTableColumnSize=FTableColumnSize;exports.FTableColumnSort=FTableColumnSort;exports.FTableColumnType=FTableColumnType;exports.FTextField=FTextField;exports.FTextareaField=FTextareaField;exports.FTooltip=FTooltip;exports.FValidationForm=FValidationForm;exports.FValidationFormAction=FValidationFormAction;exports.FValidationGroup=FValidationGroup;exports.FWizard=FWizard;exports.FWizardStep=FWizardStep;exports.FWizardStepAction=FValidationFormAction;exports.FormErrorList=FormErrorList;exports.FormStep=FormStep;exports.IAnimateExpand=IAnimateExpand;exports.ICalendarMonth=ICalendarMonth;exports.ICalendarMonthGrid=ICalendarMonthGrid;exports.ICalendarNavbar=ICalendarNavbar;exports.IFlex=IFlex;exports.IFlexItem=IFlexItem;exports.IMenu=IMenu;exports.IPopup=IPopup;exports.IPopupError=IPopupError;exports.IPopupMenu=IPopupMenu;exports.ISkipLink=ISkipLink;exports.IValidationForm=FValidationForm;exports.MenuAction=MenuAction;exports.ModalReason=ModalReason;exports.Operation=Operation;exports.TableScroll=TableScroll;exports.TestPlugin=TestPlugin;exports.TranslationMixin=TranslationMixin;exports.TranslationPlugin=TranslationPlugin;exports.UNHANDLED_ERROR_EVENT=UNHANDLED_ERROR_EVENT;exports.ValidationPlugin=ValidationPlugin;exports.actionFromKeyboardEvent=actionFromKeyboardEvent;exports.cleanUpElements=cleanUpElements;exports.config=config;exports.confirmModal=confirmModal;exports.createFFormProvideOptions=createFFormProvideOptions;exports.dispatchComponentUnmountEvent=dispatchComponentUnmountEvent;exports.dispatchComponentValidityEvent=dispatchComponentValidityEvent;exports.emptyTableRow=emptyTableRow;exports.findElementFromVueRef=findElementFromVueRef;exports.findHTMLElementFromVueRef=findHTMLElementFromVueRef;exports.findParentByName=findParentByName;exports.focus=focus;exports.formModal=formModal;exports.getDayEndOffset=getDayEndOffset;exports.getDayStartOffset=getDayStartOffset;exports.getElementFromVueRef=getElementFromVueRef;exports.getElementsFromVueRef=getElementsFromVueRef;exports.getHTMLElementFromVueRef=getHTMLElementFromVueRef;exports.getHTMLElementsFromVueRef=getHTMLElementsFromVueRef;exports.getInputElement=getInputElement;exports.getParentByName=getParentByName;exports.getRef=getRef;exports.getSortedHTMLElementsFromVueRef=getSortedHTMLElementsFromVueRef;exports.getTextFromScopedSlot=getTextFromScopedSlot;exports.handleKeyboardFocusNavigation=handleKeyboardFocusNavigation;exports.hasParentByName=hasParentByName;exports.hasSlot=hasSlot;exports.includeItem=includeItem;exports.isContextMenuSeparatorItem=isContextMenuSeparatorItem;exports.isContextMenuTextItem=isContextMenuTextItem;exports.isDialogueTreeEndQuestion=isDialogueTreeEndQuestion;exports.isFormStepReference=isFormStepReference;exports.itemEquals=itemEquals;exports.mountComponent=mountComponent;exports.openModal=openModal;exports.refIsElement=refIsElement;exports.refIsElementArray=refIsElementArray;exports.refIsHTMLElementArray=refIsHTMLElementArray;exports.refIsVue=refIsVue;exports.refIsVueArray=refIsVueArray;exports.renderSlotText=renderSlotText;exports.setIsOpen=setIsOpen;exports.setRef=setRef;exports.setRunningContext=setRunningContext;exports.sortComponentsWithErrorsOnDOMOrder=sortComponentsWithErrorsOnDOMOrder;exports.tableScrollClasses=tableScrollClasses;exports.updateCalendarValue=updateCalendarValue;exports.useTranslate=useTranslate;
912
+ */dialogueTree:{type:Object,required:true}},emits:["change","update:modelValue"],data(){return{currentStep:this.dialogueTree,steps:[]};},computed:{userData(){if(isDialogueTreeEndQuestion(this.currentStep)){return this.currentStep.userData;}return void 0;},options(){if(!isDialogueTreeEndQuestion(this.currentStep)){return this.currentStep.options;}return[];}},created(){this.currentStep=this.dialogueTree;if(isDialogueTreeEndQuestion(this.currentStep)){this.emitChange(true);}else{this.emitChange(false);}},methods:{async onClickedOption(option,index){this.steps.push(index);this.currentStep=option.question;if(isDialogueTreeEndQuestion(option.question)){this.emitChange(true);await this.$nextTick();logic.focusFirst(this.$el);}else{this.emitChange(false);await this.$nextTick();const firstElement=getHTMLElementsFromVueRef(this.$refs["dialogueButton-0"])[0];if(firstElement){logic.focus(firstElement);}}},emitChange(lastStep){const emit={label:this.currentStep.label,lastStep,steps:this.steps};this.$emit("update:modelValue",emit);this.$emit("change",emit);}}});const _hoisted_1={class:"dialogue-tree"};const _hoisted_2={key:0,class:"dialogue-tree__list"};const _hoisted_3=["onClick"];function _sfc_render(_ctx,_cache,$props,$setup,$data,$options){const _component_f_icon=vue.resolveComponent("f-icon");return vue.openBlock(),vue.createElementBlock("div",_hoisted_1,[_ctx.options.length>0?(vue.openBlock(),vue.createElementBlock("ul",_hoisted_2,[(vue.openBlock(true),vue.createElementBlock(vue.Fragment,null,vue.renderList(_ctx.options,(option,index)=>{return vue.openBlock(),vue.createElementBlock("li",{key:option.label,class:"dialogue-tree__list-item"},[vue.createElementVNode("button",{ref_for:true,ref:`dialogueButton-${index}`,type:"button",onClick:$event=>_ctx.onClickedOption(option,index)},[vue.createElementVNode("span",null,vue.toDisplayString(option.label),1/* TEXT */),vue.createTextVNode(),vue.createVNode(_component_f_icon,{name:"arrow-right"})],8,_hoisted_3)]);}),128/* KEYED_FRAGMENT */))])):vue.renderSlot(_ctx.$slots,"default",vue.normalizeProps(vue.mergeProps({key:1},{userData:_ctx.userData})))]);}const FDialogueTree=/* @__PURE__ */_export_sfc(_sfc_main,[["render",_sfc_render]]);exports.ActivateItemInjected=ActivateItemInjected;exports.ErrorData=ErrorData;exports.ErrorPlugin=ErrorPlugin;exports.ErrorViewData=ErrorViewData;exports.EventBus=EventBus;exports.FBadge=FBadge;exports.FBankAccountNumberTextField=_sfc_main$I;exports.FBankgiroTextField=_sfc_main$H;exports.FCalendar=FCalendar;exports.FCalendarDay=FCalendarDay;exports.FCard=FCard;exports.FCheckboxField=FCheckboxField;exports.FCheckboxGroup=FCheckboxGroup;exports.FCheckboxGroupField=FCheckboxField;exports.FClearingnumberTextField=_sfc_main$G;exports.FConfirmModal=FConfirmModal;exports.FContextMenu=FContextMenu;exports.FCrudButton=FCrudButton;exports.FCrudDataset=FCrudDataset;exports.FCurrencyTextField=_sfc_main$K;exports.FDataTable=FDataTable;exports.FDatepickerField=FDatepickerField;exports.FDialogueTree=FDialogueTree;exports.FEmailTextField=FEmailTextField;exports.FErrorHandlingApp=FErrorHandlingApp;exports.FErrorList=FErrorList;exports.FExpand=FExpand;exports.FExpandablePanel=FExpandablePanel;exports.FExpandableParagraph=FExpandableParagraph;exports.FFieldset=FFieldset;exports.FFileItem=FFileItem;exports.FFileSelector=FFileSelector;exports.FForm=FForm;exports.FFormModal=FFormModal;exports.FFormModalAction=FValidationFormAction;exports.FFormStep=FFormStep;exports.FFormStepButton=FFormStepButton;exports.FIcon=FIcon;exports.FInteractiveTable=FInteractiveTable;exports.FKUIConfigButtonOrder=FKUIConfigButtonOrder;exports.FLabel=FLabel;exports.FLayoutApplicationTemplate=FLayoutApplicationTemplate;exports.FLayoutLeftPanel=FLayoutLeftPanel;exports.FLayoutRightPanel=FLayoutRightPanel;exports.FLayoutRightPanelService=FLayoutRightPanelService;exports.FList=FList;exports.FLoader=FLoader;exports.FMessageBox=FMessageBox;exports.FModal=FModal;exports.FNavigationMenu=FNavigationMenu;exports.FNumericTextField=_sfc_main$F;exports.FOffline=FOffline;exports.FOrganisationsnummerTextField=_sfc_main$A;exports.FOutputField=FOutputField;exports.FPageHeader=FPageHeader;exports.FPercentTextField=_sfc_main$B;exports.FPersonnummerTextField=_sfc_main$E;exports.FPhoneTextField=FPhoneTextField;exports.FPlusgiroTextField=_sfc_main$D;exports.FPostalCodeTextField=_sfc_main$C;exports.FProgressbar=FProgressbar;exports.FRadioField=FRadioField;exports.FRadioGroup=FRadioGroup;exports.FRadioGroupField=FRadioField;exports.FSearchTextField=FSearchTextField;exports.FSelectField=FSelectField;exports.FSortFilterDataset=FSortFilterDataset;exports.FSortFilterDatasetInjected=FSortFilterDatasetInjected;exports.FStaticField=FStaticField;exports.FTableColumn=FTableColumn;exports.FTableColumnSize=FTableColumnSize;exports.FTableColumnSort=FTableColumnSort;exports.FTableColumnType=FTableColumnType;exports.FTextField=FTextField;exports.FTextareaField=FTextareaField;exports.FTooltip=FTooltip;exports.FValidationForm=FValidationForm;exports.FValidationFormAction=FValidationFormAction;exports.FValidationGroup=FValidationGroup;exports.FWizard=FWizard;exports.FWizardStep=FWizardStep;exports.FWizardStepAction=FValidationFormAction;exports.FormErrorList=FormErrorList;exports.FormStep=FormStep;exports.IAnimateExpand=IAnimateExpand;exports.ICalendarMonth=ICalendarMonth;exports.ICalendarMonthGrid=ICalendarMonthGrid;exports.ICalendarNavbar=ICalendarNavbar;exports.IFlex=IFlex;exports.IFlexItem=IFlexItem;exports.IMenu=IMenu;exports.IPopup=IPopup;exports.IPopupError=IPopupError;exports.IPopupMenu=IPopupMenu;exports.ISkipLink=ISkipLink;exports.IValidationForm=FValidationForm;exports.MenuAction=MenuAction;exports.ModalReason=ModalReason;exports.Operation=Operation;exports.Placement=Placement;exports.TableScroll=TableScroll;exports.TestPlugin=TestPlugin;exports.TranslationMixin=TranslationMixin;exports.TranslationPlugin=TranslationPlugin;exports.UNHANDLED_ERROR_EVENT=UNHANDLED_ERROR_EVENT;exports.ValidationPlugin=ValidationPlugin;exports.actionFromKeyboardEvent=actionFromKeyboardEvent;exports.cleanUpElements=cleanUpElements;exports.config=config;exports.confirmModal=confirmModal;exports.createFFormProvideOptions=createFFormProvideOptions;exports.dispatchComponentUnmountEvent=dispatchComponentUnmountEvent;exports.dispatchComponentValidityEvent=dispatchComponentValidityEvent;exports.emptyTableRow=emptyTableRow;exports.findElementFromVueRef=findElementFromVueRef;exports.findHTMLElementFromVueRef=findHTMLElementFromVueRef;exports.findParentByName=findParentByName;exports.focus=focus;exports.formModal=formModal;exports.getDayEndOffset=getDayEndOffset;exports.getDayStartOffset=getDayStartOffset;exports.getElementFromVueRef=getElementFromVueRef;exports.getElementsFromVueRef=getElementsFromVueRef;exports.getHTMLElementFromVueRef=getHTMLElementFromVueRef;exports.getHTMLElementsFromVueRef=getHTMLElementsFromVueRef;exports.getInputElement=getInputElement;exports.getParentByName=getParentByName;exports.getRef=getRef;exports.getSortedHTMLElementsFromVueRef=getSortedHTMLElementsFromVueRef;exports.getTextFromScopedSlot=getTextFromScopedSlot;exports.handleKeyboardFocusNavigation=handleKeyboardFocusNavigation;exports.hasParentByName=hasParentByName;exports.hasSlot=hasSlot;exports.includeItem=includeItem;exports.isContextMenuSeparatorItem=isContextMenuSeparatorItem;exports.isContextMenuTextItem=isContextMenuTextItem;exports.isDialogueTreeEndQuestion=isDialogueTreeEndQuestion;exports.isFormStepReference=isFormStepReference;exports.itemEquals=itemEquals;exports.mountComponent=mountComponent;exports.openModal=openModal;exports.refIsElement=refIsElement;exports.refIsElementArray=refIsElementArray;exports.refIsHTMLElementArray=refIsHTMLElementArray;exports.refIsVue=refIsVue;exports.refIsVueArray=refIsVueArray;exports.renderSlotText=renderSlotText;exports.setIsOpen=setIsOpen;exports.setRef=setRef;exports.setRunningContext=setRunningContext;exports.sortComponentsWithErrorsOnDOMOrder=sortComponentsWithErrorsOnDOMOrder;exports.tableScrollClasses=tableScrollClasses;exports.useTranslate=useTranslate;