@oslokommune/punkt-elements 16.17.2 → 16.17.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,23 @@ og skriver commits ca etter [Conventional Commits](https://conventionalcommits.o
5
5
 
6
6
  ---
7
7
 
8
+ ## [16.17.3](https://github.com/oslokommune/punkt/compare/16.17.2...16.17.3) (2026-05-27)
9
+
10
+ ### ⚠ BREAKING CHANGES
11
+ Ingen
12
+
13
+ ### Features
14
+ Ingen
15
+
16
+ ### Bug Fixes
17
+ Ingen
18
+
19
+ ### Chores
20
+ Ingen
21
+
22
+ ---
23
+
24
+
8
25
  ## [16.17.2](https://github.com/oslokommune/punkt/compare/16.17.1...16.17.2) (2026-05-20)
9
26
 
10
27
  ### ⚠ BREAKING CHANGES
@@ -27,6 +27,7 @@ export declare class PktModal extends PktElementWithSlot implements IPktModal {
27
27
  drawerPosition?: 'left' | 'right';
28
28
  transparentBackdrop?: boolean;
29
29
  dialogRef: Ref<HTMLDialogElement>;
30
+ private _scrollLockToken;
30
31
  _isOpen: boolean;
31
32
  constructor();
32
33
  connectedCallback(): Promise<void>;
@@ -2,6 +2,12 @@ import { PktElement } from '../../base-elements/element';
2
2
  export declare class Modal extends PktElement {
3
3
  declarativeOpen: boolean;
4
4
  accordionModalOpen: boolean;
5
+ unmountModalOpen: boolean;
6
+ multiAOpen: boolean;
7
+ multiBOpen: boolean;
8
+ bodyHasLockClass: boolean;
9
+ bodyLockCount: string;
10
+ private _bodyObserver?;
5
11
  pktModal1: HTMLDialogElement;
6
12
  pktModal2: HTMLDialogElement;
7
13
  pktModal22: HTMLDialogElement;
@@ -10,5 +16,7 @@ export declare class Modal extends PktElement {
10
16
  pktModal4: HTMLDialogElement;
11
17
  pktModal5: HTMLDialogElement;
12
18
  pktModal6: HTMLDialogElement;
19
+ connectedCallback(): void;
20
+ disconnectedCallback(): void;
13
21
  render(): import('lit-html').TemplateResult<1>;
14
22
  }
@@ -6,7 +6,7 @@ import { t as s } from "./if-defined-Cjj8qN-Z.js";
6
6
  import { t as c } from "./converters-jauYkvNh.js";
7
7
  import { n as l } from "./utils-BOOZ0ppt.js";
8
8
  import "./input-wrapper-DVU68NcJ.js";
9
- import "./modal-Ca7dETTw.js";
9
+ import "./modal-Ca-6xVkg.js";
10
10
  import "./progressbar-o-M17HPA.js";
11
11
  //#region ../../shared-types/fileupload.ts
12
12
  var u = {
@@ -1,4 +1,4 @@
1
- const e=require(`./element-DjtxO-1r.cjs`),t=require(`./class-map-CJ-msbHs.cjs`);require(`./alert-BEEnTiCb.cjs`),require(`./icon-Dr8sfT2X.cjs`);const n=require(`./if-defined-XKOD_t_V.cjs`),r=require(`./converters-Bffq_YDm.cjs`),i=require(`./utils-CM67Oudc.cjs`);require(`./input-wrapper-DOIWggEv.cjs`),require(`./modal-C_LxgxzC.cjs`),require(`./progressbar-Ca7pRjmt.cjs`);var a={dropZoneDragMultiple:`Dra filer hit for å laste dem opp eller`,dropZoneDragSingle:`Dra en fil hit for å laste den opp eller`,dropZoneDragMultipleThumbnail:`Dra bilder hit for å laste dem opp eller`,dropZoneDragSingleThumbnail:`Dra et bilde hit for å laste det opp eller`,dropZoneDragActiveMultiple:`Slipp filene her`,dropZoneDragActiveSingle:`Slipp filen her`,dropZoneDragActiveMultipleThumbnail:`Slipp bildene her`,dropZoneDragActiveSingleThumbnail:`Slipp bildet her`,dropZoneOpenFileDialogMultiple:`velg filer`,dropZoneOpenFileDialogSingle:`velg en fil`,dropZoneOpenFileDialogMultipleThumbnail:`velg fra kamerarull`,dropZoneOpenFileDialogSingleThumbnail:`velg fra kamerarull`,supportedFormatsPrefix:`Format:`,invalidFormatDefault:e=>`Ugyldig filtype. Tillatte formater: ${e}`,sizeTooLargeDefault:e=>`Filen er for stor. Maks størrelse er ${e}.`,requiredMissing:`Du må laste opp minst én fil.`,genericValidationRejection:`Filen ble avvist av validering.`,unknownFilename:`Ukjent fil`,fileLabel:e=>e===1?`fil`:`filer`,srFileAdded:e=>`Filen «${e}» er lagt til`,srFilesAdded:e=>`${e} filer er lagt til`,srFilesUploadedOfTotal:(e,t,n)=>`${e} av ${t} ${n} lastet opp`,srFilesFailedOfTotal:(e,t,n)=>`Feil ved opplasting: ${e} av ${t} ${n} feilet`};function o(e){if(e==null||e===``)return;if(typeof e==`number`)return Number.isFinite(e)&&e>0?e:void 0;let t=String(e).trim(),n=Number(t);if(!Number.isNaN(n)&&n>0)return n;let r=t.match(/^(\d+(?:\.\d+)?)\s*(B|KB|MB|GB)$/i);if(!r){console.warn(`PktFileUpload: Invalid maxFileSize format "${t}". Use format like "5MB", "500KB", "1GB", or bytes.`);return}let i=parseFloat(r[1]);switch(r[2].toUpperCase()){case`B`:return i;case`KB`:return i*1024;case`MB`:return i*1024*1024;case`GB`:return i*1024*1024*1024;default:return}}function s(e){return e<1024?`${Math.round(e)} B`:e<1024*1024?`${Math.round(e/1024)} KB`:e<1024*1024*1024?`${Math.round(e/(1024*1024))} MB`:`${Math.round(e/(1024*1024*1024))} GB`}function c(e){return Array.isArray(e)?e.map(e=>String(e).trim().toLowerCase()).filter(Boolean):[]}function l(e){return e?e.split(`,`).map(e=>e.trim().toLowerCase()).filter(Boolean):[]}function u(e,t,n){let r=e.toLowerCase().replace(/^\./,``);if(r.includes(`/`)){if(r.endsWith(`/*`)){let e=r.replace(`/*`,``);return n.startsWith(`${e}/`)}return n===r}return t===r}function d(e,t){let n=c(t);if(n.length===0)return!0;let r=e.name.split(`.`).pop()?.toLowerCase()??``,i=e.type.toLowerCase();return n.some(e=>u(e,r,i))}function f(e,t){let n=(e??``).trim();if(n)return n;let r=c(t);return r.length===0?``:r.map(e=>e.includes(`/`)||e.startsWith(`.`)?e:`.${e}`).join(`, `)}function p(e){return e.includes(`/`)?e:e.replace(/^\./,``).toUpperCase()}function m(e,t){let n=c(e);if(n.length>0)return n.map(p).join(`, `);let r=l(t);return r.length>0?r.map(p).join(`, `):``}function h(e,t,n){return((e??``).trim()||t).replace(/\{(\w+)\}/g,(e,t)=>n[t]??`{${t}}`)}function g(e,t){let n=c(t.allowedFormats);if(n.length>0&&!d(e,n)){let e=n.join(`, `),r=`Ugyldig filtype. Tillatte formater: ${e}`;return h(t.formatErrorMessage,r,{formats:e})}let r=o(t.maxFileSize);if(r!==void 0&&e.size>r){let e=s(r),n=`Filen er for stor. Maks størrelse er ${e}.`;return h(t.sizeErrorMessage,n,{maxSize:e})}if(t.onFileValidation){let n=t.onFileValidation(e);if(n)return n}return null}function _(e){let t=e.file;if(t?.type?.startsWith(`image/`))return!0;let n=e.attributes?.targetFilename||t?.name||``;return/\.(jpe?g|png|gif|webp|heic|heif|bmp|svg)$/i.test(n)}function v(e){return typeof e==`number`?`in-progress`:e===`error`?`error`:`idle`}function y(e,t,n){let r={"in-progress":0,error:1,idle:2};return e.map(e=>{let r=t?.find(t=>t.fileId===e.fileId);return{...e,progress:r?.progress??(n===`form`?`done`:`queued`),errorMessage:r?.errorMessage,showProgress:r?.showProgress,lastProgress:r?.lastProgress}}).sort((e,t)=>r[v(e.progress)]-r[v(t.progress)])}function b(e){if(!e)return[];let t=[`a[href]:not([tabindex="-1"])`,`button:not([disabled]):not([tabindex="-1"])`,`input:not([disabled]):not([type="hidden"]):not([tabindex="-1"])`,`select:not([disabled]):not([tabindex="-1"])`,`textarea:not([disabled]):not([tabindex="-1"])`,`[tabindex]:not([tabindex="-1"])`].join(`, `);return Array.from(e.querySelectorAll(t)).filter(e=>!e.hasAttribute(`inert`))}function x(e,t){if(e.key!==`Tab`)return!1;let n=b(t);if(n.length===0)return e.preventDefault(),!0;let r=n[0],i=n[n.length-1],a=(t?.ownerDocument??document).activeElement,o=!!a&&n.includes(a);return e.shiftKey?!o||a===r?(e.preventDefault(),i.focus(),!0):!1:!o||a===i?(e.preventDefault(),r.focus(),!0):!1}function S(e,t){return!t||t<=0||e.length<=t+3?null:{head:e.slice(0,e.length-t),tail:e.slice(-t)}}function C(e,t,n){return n<=0?0:t===`prev`?e<=0?n-1:e-1:e>=n-1?0:e+1}function w(e,t){let n=e.length;if(n===0||!t||t.length===0)return{totalCount:n,uploadedCount:0,failedCount:0};let r=0,i=0;for(let n of e){let e=t.find(e=>e.fileId===n.fileId);e?.progress===`done`?r++:e?.progress===`error`&&i++}return{totalCount:n,uploadedCount:r,failedCount:i}}function T(e,t=a.unknownFilename){return e.attributes?.targetFilename||e.file?.name||t}var E=class extends e.t{constructor(...e){super(...e),this.id=`pkt-fileupload-${i.n()}`,this.name=`files`,this.label=``,this.helptext=``,this.required=!1,this.multiple=!1,this.disabled=!1,this.fullwidth=!1,this.uploadStrategy=`form`,this.itemRenderer=`filename`,this.accept=``,this.allowedFormats=[],this.formatErrorMessage=``,this.sizeErrorMessage=``,this.transfers=[],this.addCommentsEnabled=!1,this.renameFilesEnabled=!1,this.extraOperations=[],this.enableImagePreview=!1,this.hasError=!1,this.errorMessage=``,this.optionalTag=!1,this.requiredTag=!1,this.truncateTail=4,this.files=[],this.isDragActive=!1,this.validationErrorMessage=null,this.addedAnnouncement=``,this.thumbnailUrls={},this.hasInitializedValue=!1,this.hasWarnedInvalidValueCombo=!1,this.thumbnailFileById=new Map,this.connectedForm=null,this.addedAnnouncementTimer=null,this.requiredSelectionMessage=a.requiredMissing,this.onNativeFileChange=e=>{let t=e.target;this.addFiles(t.files?Array.from(t.files):[]),this.uploadStrategy===`custom`&&(t.value=``)},this.openFileDialog=e=>{e.preventDefault(),e.stopPropagation(),!this.disabled&&this.querySelector(`#${this.id}-input`)?.click()},this.onDropZoneClick=e=>{this.disabled||e.target.closest(`.pkt-fileupload__drop-zone__placeholder__title__open-file-dialog`)||this.querySelector(`#${this.id}-input`)?.click()},this.onDragOver=e=>{e.preventDefault(),!this.disabled&&(this.isDragActive=!0)},this.onDragLeave=()=>{this.isDragActive=!1},this.onDrop=e=>{if(e.preventDefault(),this.isDragActive=!1,this.disabled)return;let t=e.dataTransfer?.files?Array.from(e.dataTransfer.files):[];this.addFiles(t)},this.onHostFormSubmit=e=>{!this.required||this.uploadStrategy!==`custom`||this.getCurrentFiles().length>0||(this.validationErrorMessage=this.requiredSelectionMessage,e.preventDefault())}}get isControlled(){return this.value!==void 0}get hasEffectiveError(){return!!this.validationErrorMessage||this.hasError||!!this.errorMessage.trim()}get effectiveErrorMessage(){return this.validationErrorMessage??this.errorMessage??``}get hasValidationError(){return!!this.validationErrorMessage}firstUpdated(e){super.firstUpdated?.(e),this.hasInitializedValue||=(this.files=this.value??this.defaultValue??[],this.syncThumbnailUrls(this.files),!0),this.value!==void 0&&this.defaultValue!==void 0&&this.warnInvalidValueCombo()}willUpdate(e){super.willUpdate(e),this.hasInitializedValue&&this.isControlled&&(e.has(`value`)||e.has(`itemRenderer`)||e.has(`enableImagePreview`))&&(this.files=this.value??[],this.syncThumbnailUrls(this.files))}updated(e){super.updated(e),(e.has(`uploadStrategy`)||e.has(`required`)||e.has(`value`))&&this.syncFormSubmitListener(),this.uploadStrategy===`form`&&(e.has(`value`)||e.has(`files`)||e.has(`uploadStrategy`))&&this.syncNativeInputFiles()}syncNativeInputFiles(){let e=this.querySelector(`#${this.id}-input`);if(!(!e||typeof DataTransfer>`u`))try{let t=new DataTransfer;for(let e of this.getCurrentFiles())e.file&&t.items.add(e.file);e.files=t.files}catch{}}warnInvalidValueCombo(){this.hasWarnedInvalidValueCombo||=(console.warn(`PktFileUpload: Både value og defaultValue er angitt. Komponenten kan være enten kontrollert eller ukontrollert, ikke begge. value vil bli prioritert.`),!0)}disconnectedCallback(){this.teardownFormSubmitListener(),this.addedAnnouncementTimer&&=(clearTimeout(this.addedAnnouncementTimer),null),super.disconnectedCallback(),this.revokeAllThumbnailUrls()}setAddedAnnouncement(e){this.addedAnnouncement=e,this.addedAnnouncementTimer&&clearTimeout(this.addedAnnouncementTimer),this.addedAnnouncementTimer=setTimeout(()=>{this.addedAnnouncement=``,this.addedAnnouncementTimer=null},1500)}connectedCallback(){super.connectedCallback(),this.syncFormSubmitListener()}addFiles(e){if(e.length===0)return;let t=this.multiple?e:[e[0]];for(let e of t){let t=this.validateFile(e);if(t){this.validationErrorMessage=t;return}}this.validationErrorMessage=null;let n=t.map(e=>({fileId:i.n(),file:e,attributes:{targetFilename:e.name}}));this.setAddedAnnouncement(n.length===1?a.srFileAdded(n[0].attributes.targetFilename):a.srFilesAdded(n.length));let r=this.getCurrentFiles(),o=this.multiple?[...r,...n]:[n[0]];this.commitFiles(o,`add`,n.map(e=>e.fileId)),this.uploadStrategy===`custom`&&n.forEach(e=>{this.dispatchEvent(new CustomEvent(`file-upload-requested`,{detail:{fileId:e.fileId,file:e.file,attributes:e.attributes},bubbles:!0,composed:!0}))})}getCurrentFiles(){return this.isControlled?this.value??[]:this.files}cancelTransfer(e){if(this.disabled)return;let t=this.getCurrentFiles().find(t=>t.fileId===e);t&&(this.removeFileItem(e),this.dispatchEvent(new CustomEvent(`transfer-cancelled`,{detail:{fileId:t.fileId,file:t.file,attributes:t.attributes},bubbles:!0,composed:!0})))}removeFileItem(e){if(this.disabled)return;let t=this.getCurrentFiles(),n=t.filter(t=>t.fileId!==e);n.length!==t.length&&this.commitFiles(n,`remove`,[e])}updateFileItem(e,t){let n=this.getCurrentFiles().map(n=>n.fileId===e?{...n,...t}:n);this.commitFiles(n,`update`,[e])}commitFiles(e,t,n){this.isControlled||(this.files=e,this.syncThumbnailUrls(e)),this.validationErrorMessage===this.requiredSelectionMessage&&e.length>0&&(this.validationErrorMessage=null),this.dispatchEvent(new CustomEvent(`files-changed`,{detail:{files:e,reason:t,changedFileIds:n},bubbles:!0,composed:!0}))}getThumbnailUrl(e){return this.thumbnailUrls[e.fileId]}getTransferProgress(e){let t=this.transfers.find(t=>t.fileId===e);return t?t.progress:this.uploadStrategy===`form`?`done`:`queued`}getTransferForFile(e){return this.transfers.find(t=>t.fileId===e)}isImageFile(e){return _(e)}formatFileSize(e){return s(e)}getResolvedAcceptValue(){return f(this.accept,this.allowedFormats)}getSupportedFormatsText(){return m(this.allowedFormats,this.accept)}getSortedFilesAndTransfers(){return y(this.getCurrentFiles(),this.transfers,this.uploadStrategy)}validateFile(e){let t=g(e,{allowedFormats:this.allowedFormats,maxFileSize:this.maxFileSize,formatErrorMessage:this.formatErrorMessage,sizeErrorMessage:this.sizeErrorMessage,onFileValidation:this.onFileValidation});if(t)return t;let n={file:e,errorMessage:null},r=new CustomEvent(`file-validate`,{detail:n,bubbles:!0,composed:!0,cancelable:!0});return this.dispatchEvent(r),n.errorMessage?n.errorMessage:r.defaultPrevented?a.genericValidationRejection:null}syncThumbnailUrls(e){if(!(typeof URL<`u`&&typeof URL.createObjectURL==`function`&&typeof URL.revokeObjectURL==`function`)){this.thumbnailUrls={},this.thumbnailFileById.clear();return}let t=new Set(e.map(e=>e.fileId)),n={};for(let[e,n]of Object.entries(this.thumbnailUrls))t.has(e)||(URL.revokeObjectURL(n),this.thumbnailFileById.delete(e));for(let t of e){let e=this.thumbnailUrls[t.fileId],r=this.thumbnailFileById.get(t.fileId);if(!t.file||!this.isImageFile(t)){e&&(URL.revokeObjectURL(e),this.thumbnailFileById.delete(t.fileId));continue}if(e&&r===t.file){n[t.fileId]=e;continue}e&&r!==t.file&&URL.revokeObjectURL(e);let i=URL.createObjectURL(t.file);this.thumbnailFileById.set(t.fileId,t.file),n[t.fileId]=i}this.thumbnailUrls=n}revokeAllThumbnailUrls(){if(typeof URL>`u`||typeof URL.revokeObjectURL!=`function`){this.thumbnailUrls={},this.thumbnailFileById.clear();return}Object.values(this.thumbnailUrls).forEach(e=>URL.revokeObjectURL(e)),this.thumbnailUrls={},this.thumbnailFileById.clear()}getSrUploadedMessage(){if(this.addedAnnouncement)return this.addedAnnouncement;let{totalCount:e,uploadedCount:t}=w(this.getCurrentFiles(),this.transfers);return e===0||t===0?``:a.srFilesUploadedOfTotal(t,e,a.fileLabel(e))}getSrErrorsMessage(){let{totalCount:e,failedCount:t}=w(this.getCurrentFiles(),this.transfers);return e===0||t===0?``:a.srFilesFailedOfTotal(t,e,a.fileLabel(e))}syncFormSubmitListener(){let e=this.closest(`form`);this.connectedForm!==e&&(this.teardownFormSubmitListener(),this.connectedForm=e,this.connectedForm&&this.connectedForm.addEventListener(`submit`,this.onHostFormSubmit))}teardownFormSubmitListener(){this.connectedForm&&=(this.connectedForm.removeEventListener(`submit`,this.onHostFormSubmit),null)}};e.r([e.s({type:String})],E.prototype,`id`,void 0),e.r([e.s({type:String})],E.prototype,`name`,void 0),e.r([e.s({type:String})],E.prototype,`label`,void 0),e.r([e.s({type:String})],E.prototype,`helptext`,void 0),e.r([e.s({type:Boolean,reflect:!0})],E.prototype,`required`,void 0),e.r([e.s({type:Boolean,reflect:!0})],E.prototype,`multiple`,void 0),e.r([e.s({type:Boolean,reflect:!0})],E.prototype,`disabled`,void 0),e.r([e.s({type:Boolean,reflect:!0,attribute:`fullwidth`})],E.prototype,`fullwidth`,void 0),e.r([e.s({type:String,reflect:!0,attribute:`upload-strategy`})],E.prototype,`uploadStrategy`,void 0),e.r([e.s({type:String,reflect:!0,attribute:`item-renderer`})],E.prototype,`itemRenderer`,void 0),e.r([e.s({type:String})],E.prototype,`accept`,void 0),e.r([e.s({converter:r.t.csvToArray,attribute:`allowed-formats`})],E.prototype,`allowedFormats`,void 0),e.r([e.s({type:String,attribute:`format-error-message`})],E.prototype,`formatErrorMessage`,void 0),e.r([e.s({attribute:`max-file-size`})],E.prototype,`maxFileSize`,void 0),e.r([e.s({type:String,attribute:`size-error-message`})],E.prototype,`sizeErrorMessage`,void 0),e.r([e.s({attribute:!1})],E.prototype,`onFileValidation`,void 0),e.r([e.s({attribute:!1})],E.prototype,`transfers`,void 0),e.r([e.s({type:Boolean,attribute:`add-comments-enabled`})],E.prototype,`addCommentsEnabled`,void 0),e.r([e.s({type:Boolean,attribute:`rename-files-enabled`})],E.prototype,`renameFilesEnabled`,void 0),e.r([e.s({attribute:!1})],E.prototype,`extraOperations`,void 0),e.r([e.s({type:Boolean,reflect:!0,attribute:`enable-image-preview`})],E.prototype,`enableImagePreview`,void 0),e.r([e.s({type:Boolean,attribute:`has-error`})],E.prototype,`hasError`,void 0),e.r([e.s({type:String,attribute:`error-message`})],E.prototype,`errorMessage`,void 0),e.r([e.s({type:Boolean,attribute:`optional-tag`})],E.prototype,`optionalTag`,void 0),e.r([e.s({type:Boolean,attribute:`required-tag`})],E.prototype,`requiredTag`,void 0),e.r([e.s({type:Number,attribute:`truncate-tail`})],E.prototype,`truncateTail`,void 0),e.r([e.s({attribute:!1})],E.prototype,`value`,void 0),e.r([e.s({attribute:!1})],E.prototype,`defaultValue`,void 0),e.r([e.o()],E.prototype,`files`,void 0),e.r([e.o()],E.prototype,`isDragActive`,void 0),e.r([e.o()],E.prototype,`validationErrorMessage`,void 0),e.r([e.o()],E.prototype,`addedAnnouncement`,void 0),e.r([e.o()],E.prototype,`thumbnailUrls`,void 0);var D=`comments`,O=e=>{let t=new Date(e);return Number.isNaN(t.getTime())?e:`${String(t.getDate()).padStart(2,`0`)}.${String(t.getMonth()+1).padStart(2,`0`)}.${t.getFullYear()} kl. ${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}`},k=(e,t,n)=>{e.key===`Enter`&&(e.preventDefault(),e.stopPropagation(),t()),e.key===`Escape`&&(e.preventDefault(),e.stopPropagation(),n())},A=(e,t,n)=>{e.key===`Escape`&&(e.preventDefault(),e.stopPropagation(),n()),(e.metaKey||e.ctrlKey)&&e.key===`Enter`&&(e.preventDefault(),e.stopPropagation(),t())},j=e=>({id:`remove`,title:`Slett`,ariaLabel:`Slett fil`,onClick:({file:t})=>e(t.fileId)}),M=()=>({id:`rename`,title:`Rediger`,ariaLabel:`Rediger filnavn`,renderInlineUI:t=>{let n=t.getAttribute(`targetFilename`)||t.file.attributes?.targetFilename||t.file.file?.name||``,r=`pkt-fileupload-rename-${t.file.fileId}`,i=()=>{let e=document.getElementById(r)?.value?.trim();e&&t.setAttribute(`targetFilename`,e),t.close()};return e.d`
1
+ const e=require(`./element-DjtxO-1r.cjs`),t=require(`./class-map-CJ-msbHs.cjs`);require(`./alert-BEEnTiCb.cjs`),require(`./icon-Dr8sfT2X.cjs`);const n=require(`./if-defined-XKOD_t_V.cjs`),r=require(`./converters-Bffq_YDm.cjs`),i=require(`./utils-CM67Oudc.cjs`);require(`./input-wrapper-DOIWggEv.cjs`),require(`./modal-B7-0F5q7.cjs`),require(`./progressbar-Ca7pRjmt.cjs`);var a={dropZoneDragMultiple:`Dra filer hit for å laste dem opp eller`,dropZoneDragSingle:`Dra en fil hit for å laste den opp eller`,dropZoneDragMultipleThumbnail:`Dra bilder hit for å laste dem opp eller`,dropZoneDragSingleThumbnail:`Dra et bilde hit for å laste det opp eller`,dropZoneDragActiveMultiple:`Slipp filene her`,dropZoneDragActiveSingle:`Slipp filen her`,dropZoneDragActiveMultipleThumbnail:`Slipp bildene her`,dropZoneDragActiveSingleThumbnail:`Slipp bildet her`,dropZoneOpenFileDialogMultiple:`velg filer`,dropZoneOpenFileDialogSingle:`velg en fil`,dropZoneOpenFileDialogMultipleThumbnail:`velg fra kamerarull`,dropZoneOpenFileDialogSingleThumbnail:`velg fra kamerarull`,supportedFormatsPrefix:`Format:`,invalidFormatDefault:e=>`Ugyldig filtype. Tillatte formater: ${e}`,sizeTooLargeDefault:e=>`Filen er for stor. Maks størrelse er ${e}.`,requiredMissing:`Du må laste opp minst én fil.`,genericValidationRejection:`Filen ble avvist av validering.`,unknownFilename:`Ukjent fil`,fileLabel:e=>e===1?`fil`:`filer`,srFileAdded:e=>`Filen «${e}» er lagt til`,srFilesAdded:e=>`${e} filer er lagt til`,srFilesUploadedOfTotal:(e,t,n)=>`${e} av ${t} ${n} lastet opp`,srFilesFailedOfTotal:(e,t,n)=>`Feil ved opplasting: ${e} av ${t} ${n} feilet`};function o(e){if(e==null||e===``)return;if(typeof e==`number`)return Number.isFinite(e)&&e>0?e:void 0;let t=String(e).trim(),n=Number(t);if(!Number.isNaN(n)&&n>0)return n;let r=t.match(/^(\d+(?:\.\d+)?)\s*(B|KB|MB|GB)$/i);if(!r){console.warn(`PktFileUpload: Invalid maxFileSize format "${t}". Use format like "5MB", "500KB", "1GB", or bytes.`);return}let i=parseFloat(r[1]);switch(r[2].toUpperCase()){case`B`:return i;case`KB`:return i*1024;case`MB`:return i*1024*1024;case`GB`:return i*1024*1024*1024;default:return}}function s(e){return e<1024?`${Math.round(e)} B`:e<1024*1024?`${Math.round(e/1024)} KB`:e<1024*1024*1024?`${Math.round(e/(1024*1024))} MB`:`${Math.round(e/(1024*1024*1024))} GB`}function c(e){return Array.isArray(e)?e.map(e=>String(e).trim().toLowerCase()).filter(Boolean):[]}function l(e){return e?e.split(`,`).map(e=>e.trim().toLowerCase()).filter(Boolean):[]}function u(e,t,n){let r=e.toLowerCase().replace(/^\./,``);if(r.includes(`/`)){if(r.endsWith(`/*`)){let e=r.replace(`/*`,``);return n.startsWith(`${e}/`)}return n===r}return t===r}function d(e,t){let n=c(t);if(n.length===0)return!0;let r=e.name.split(`.`).pop()?.toLowerCase()??``,i=e.type.toLowerCase();return n.some(e=>u(e,r,i))}function f(e,t){let n=(e??``).trim();if(n)return n;let r=c(t);return r.length===0?``:r.map(e=>e.includes(`/`)||e.startsWith(`.`)?e:`.${e}`).join(`, `)}function p(e){return e.includes(`/`)?e:e.replace(/^\./,``).toUpperCase()}function m(e,t){let n=c(e);if(n.length>0)return n.map(p).join(`, `);let r=l(t);return r.length>0?r.map(p).join(`, `):``}function h(e,t,n){return((e??``).trim()||t).replace(/\{(\w+)\}/g,(e,t)=>n[t]??`{${t}}`)}function g(e,t){let n=c(t.allowedFormats);if(n.length>0&&!d(e,n)){let e=n.join(`, `),r=`Ugyldig filtype. Tillatte formater: ${e}`;return h(t.formatErrorMessage,r,{formats:e})}let r=o(t.maxFileSize);if(r!==void 0&&e.size>r){let e=s(r),n=`Filen er for stor. Maks størrelse er ${e}.`;return h(t.sizeErrorMessage,n,{maxSize:e})}if(t.onFileValidation){let n=t.onFileValidation(e);if(n)return n}return null}function _(e){let t=e.file;if(t?.type?.startsWith(`image/`))return!0;let n=e.attributes?.targetFilename||t?.name||``;return/\.(jpe?g|png|gif|webp|heic|heif|bmp|svg)$/i.test(n)}function v(e){return typeof e==`number`?`in-progress`:e===`error`?`error`:`idle`}function y(e,t,n){let r={"in-progress":0,error:1,idle:2};return e.map(e=>{let r=t?.find(t=>t.fileId===e.fileId);return{...e,progress:r?.progress??(n===`form`?`done`:`queued`),errorMessage:r?.errorMessage,showProgress:r?.showProgress,lastProgress:r?.lastProgress}}).sort((e,t)=>r[v(e.progress)]-r[v(t.progress)])}function b(e){if(!e)return[];let t=[`a[href]:not([tabindex="-1"])`,`button:not([disabled]):not([tabindex="-1"])`,`input:not([disabled]):not([type="hidden"]):not([tabindex="-1"])`,`select:not([disabled]):not([tabindex="-1"])`,`textarea:not([disabled]):not([tabindex="-1"])`,`[tabindex]:not([tabindex="-1"])`].join(`, `);return Array.from(e.querySelectorAll(t)).filter(e=>!e.hasAttribute(`inert`))}function x(e,t){if(e.key!==`Tab`)return!1;let n=b(t);if(n.length===0)return e.preventDefault(),!0;let r=n[0],i=n[n.length-1],a=(t?.ownerDocument??document).activeElement,o=!!a&&n.includes(a);return e.shiftKey?!o||a===r?(e.preventDefault(),i.focus(),!0):!1:!o||a===i?(e.preventDefault(),r.focus(),!0):!1}function S(e,t){return!t||t<=0||e.length<=t+3?null:{head:e.slice(0,e.length-t),tail:e.slice(-t)}}function C(e,t,n){return n<=0?0:t===`prev`?e<=0?n-1:e-1:e>=n-1?0:e+1}function w(e,t){let n=e.length;if(n===0||!t||t.length===0)return{totalCount:n,uploadedCount:0,failedCount:0};let r=0,i=0;for(let n of e){let e=t.find(e=>e.fileId===n.fileId);e?.progress===`done`?r++:e?.progress===`error`&&i++}return{totalCount:n,uploadedCount:r,failedCount:i}}function T(e,t=a.unknownFilename){return e.attributes?.targetFilename||e.file?.name||t}var E=class extends e.t{constructor(...e){super(...e),this.id=`pkt-fileupload-${i.n()}`,this.name=`files`,this.label=``,this.helptext=``,this.required=!1,this.multiple=!1,this.disabled=!1,this.fullwidth=!1,this.uploadStrategy=`form`,this.itemRenderer=`filename`,this.accept=``,this.allowedFormats=[],this.formatErrorMessage=``,this.sizeErrorMessage=``,this.transfers=[],this.addCommentsEnabled=!1,this.renameFilesEnabled=!1,this.extraOperations=[],this.enableImagePreview=!1,this.hasError=!1,this.errorMessage=``,this.optionalTag=!1,this.requiredTag=!1,this.truncateTail=4,this.files=[],this.isDragActive=!1,this.validationErrorMessage=null,this.addedAnnouncement=``,this.thumbnailUrls={},this.hasInitializedValue=!1,this.hasWarnedInvalidValueCombo=!1,this.thumbnailFileById=new Map,this.connectedForm=null,this.addedAnnouncementTimer=null,this.requiredSelectionMessage=a.requiredMissing,this.onNativeFileChange=e=>{let t=e.target;this.addFiles(t.files?Array.from(t.files):[]),this.uploadStrategy===`custom`&&(t.value=``)},this.openFileDialog=e=>{e.preventDefault(),e.stopPropagation(),!this.disabled&&this.querySelector(`#${this.id}-input`)?.click()},this.onDropZoneClick=e=>{this.disabled||e.target.closest(`.pkt-fileupload__drop-zone__placeholder__title__open-file-dialog`)||this.querySelector(`#${this.id}-input`)?.click()},this.onDragOver=e=>{e.preventDefault(),!this.disabled&&(this.isDragActive=!0)},this.onDragLeave=()=>{this.isDragActive=!1},this.onDrop=e=>{if(e.preventDefault(),this.isDragActive=!1,this.disabled)return;let t=e.dataTransfer?.files?Array.from(e.dataTransfer.files):[];this.addFiles(t)},this.onHostFormSubmit=e=>{!this.required||this.uploadStrategy!==`custom`||this.getCurrentFiles().length>0||(this.validationErrorMessage=this.requiredSelectionMessage,e.preventDefault())}}get isControlled(){return this.value!==void 0}get hasEffectiveError(){return!!this.validationErrorMessage||this.hasError||!!this.errorMessage.trim()}get effectiveErrorMessage(){return this.validationErrorMessage??this.errorMessage??``}get hasValidationError(){return!!this.validationErrorMessage}firstUpdated(e){super.firstUpdated?.(e),this.hasInitializedValue||=(this.files=this.value??this.defaultValue??[],this.syncThumbnailUrls(this.files),!0),this.value!==void 0&&this.defaultValue!==void 0&&this.warnInvalidValueCombo()}willUpdate(e){super.willUpdate(e),this.hasInitializedValue&&this.isControlled&&(e.has(`value`)||e.has(`itemRenderer`)||e.has(`enableImagePreview`))&&(this.files=this.value??[],this.syncThumbnailUrls(this.files))}updated(e){super.updated(e),(e.has(`uploadStrategy`)||e.has(`required`)||e.has(`value`))&&this.syncFormSubmitListener(),this.uploadStrategy===`form`&&(e.has(`value`)||e.has(`files`)||e.has(`uploadStrategy`))&&this.syncNativeInputFiles()}syncNativeInputFiles(){let e=this.querySelector(`#${this.id}-input`);if(!(!e||typeof DataTransfer>`u`))try{let t=new DataTransfer;for(let e of this.getCurrentFiles())e.file&&t.items.add(e.file);e.files=t.files}catch{}}warnInvalidValueCombo(){this.hasWarnedInvalidValueCombo||=(console.warn(`PktFileUpload: Både value og defaultValue er angitt. Komponenten kan være enten kontrollert eller ukontrollert, ikke begge. value vil bli prioritert.`),!0)}disconnectedCallback(){this.teardownFormSubmitListener(),this.addedAnnouncementTimer&&=(clearTimeout(this.addedAnnouncementTimer),null),super.disconnectedCallback(),this.revokeAllThumbnailUrls()}setAddedAnnouncement(e){this.addedAnnouncement=e,this.addedAnnouncementTimer&&clearTimeout(this.addedAnnouncementTimer),this.addedAnnouncementTimer=setTimeout(()=>{this.addedAnnouncement=``,this.addedAnnouncementTimer=null},1500)}connectedCallback(){super.connectedCallback(),this.syncFormSubmitListener()}addFiles(e){if(e.length===0)return;let t=this.multiple?e:[e[0]];for(let e of t){let t=this.validateFile(e);if(t){this.validationErrorMessage=t;return}}this.validationErrorMessage=null;let n=t.map(e=>({fileId:i.n(),file:e,attributes:{targetFilename:e.name}}));this.setAddedAnnouncement(n.length===1?a.srFileAdded(n[0].attributes.targetFilename):a.srFilesAdded(n.length));let r=this.getCurrentFiles(),o=this.multiple?[...r,...n]:[n[0]];this.commitFiles(o,`add`,n.map(e=>e.fileId)),this.uploadStrategy===`custom`&&n.forEach(e=>{this.dispatchEvent(new CustomEvent(`file-upload-requested`,{detail:{fileId:e.fileId,file:e.file,attributes:e.attributes},bubbles:!0,composed:!0}))})}getCurrentFiles(){return this.isControlled?this.value??[]:this.files}cancelTransfer(e){if(this.disabled)return;let t=this.getCurrentFiles().find(t=>t.fileId===e);t&&(this.removeFileItem(e),this.dispatchEvent(new CustomEvent(`transfer-cancelled`,{detail:{fileId:t.fileId,file:t.file,attributes:t.attributes},bubbles:!0,composed:!0})))}removeFileItem(e){if(this.disabled)return;let t=this.getCurrentFiles(),n=t.filter(t=>t.fileId!==e);n.length!==t.length&&this.commitFiles(n,`remove`,[e])}updateFileItem(e,t){let n=this.getCurrentFiles().map(n=>n.fileId===e?{...n,...t}:n);this.commitFiles(n,`update`,[e])}commitFiles(e,t,n){this.isControlled||(this.files=e,this.syncThumbnailUrls(e)),this.validationErrorMessage===this.requiredSelectionMessage&&e.length>0&&(this.validationErrorMessage=null),this.dispatchEvent(new CustomEvent(`files-changed`,{detail:{files:e,reason:t,changedFileIds:n},bubbles:!0,composed:!0}))}getThumbnailUrl(e){return this.thumbnailUrls[e.fileId]}getTransferProgress(e){let t=this.transfers.find(t=>t.fileId===e);return t?t.progress:this.uploadStrategy===`form`?`done`:`queued`}getTransferForFile(e){return this.transfers.find(t=>t.fileId===e)}isImageFile(e){return _(e)}formatFileSize(e){return s(e)}getResolvedAcceptValue(){return f(this.accept,this.allowedFormats)}getSupportedFormatsText(){return m(this.allowedFormats,this.accept)}getSortedFilesAndTransfers(){return y(this.getCurrentFiles(),this.transfers,this.uploadStrategy)}validateFile(e){let t=g(e,{allowedFormats:this.allowedFormats,maxFileSize:this.maxFileSize,formatErrorMessage:this.formatErrorMessage,sizeErrorMessage:this.sizeErrorMessage,onFileValidation:this.onFileValidation});if(t)return t;let n={file:e,errorMessage:null},r=new CustomEvent(`file-validate`,{detail:n,bubbles:!0,composed:!0,cancelable:!0});return this.dispatchEvent(r),n.errorMessage?n.errorMessage:r.defaultPrevented?a.genericValidationRejection:null}syncThumbnailUrls(e){if(!(typeof URL<`u`&&typeof URL.createObjectURL==`function`&&typeof URL.revokeObjectURL==`function`)){this.thumbnailUrls={},this.thumbnailFileById.clear();return}let t=new Set(e.map(e=>e.fileId)),n={};for(let[e,n]of Object.entries(this.thumbnailUrls))t.has(e)||(URL.revokeObjectURL(n),this.thumbnailFileById.delete(e));for(let t of e){let e=this.thumbnailUrls[t.fileId],r=this.thumbnailFileById.get(t.fileId);if(!t.file||!this.isImageFile(t)){e&&(URL.revokeObjectURL(e),this.thumbnailFileById.delete(t.fileId));continue}if(e&&r===t.file){n[t.fileId]=e;continue}e&&r!==t.file&&URL.revokeObjectURL(e);let i=URL.createObjectURL(t.file);this.thumbnailFileById.set(t.fileId,t.file),n[t.fileId]=i}this.thumbnailUrls=n}revokeAllThumbnailUrls(){if(typeof URL>`u`||typeof URL.revokeObjectURL!=`function`){this.thumbnailUrls={},this.thumbnailFileById.clear();return}Object.values(this.thumbnailUrls).forEach(e=>URL.revokeObjectURL(e)),this.thumbnailUrls={},this.thumbnailFileById.clear()}getSrUploadedMessage(){if(this.addedAnnouncement)return this.addedAnnouncement;let{totalCount:e,uploadedCount:t}=w(this.getCurrentFiles(),this.transfers);return e===0||t===0?``:a.srFilesUploadedOfTotal(t,e,a.fileLabel(e))}getSrErrorsMessage(){let{totalCount:e,failedCount:t}=w(this.getCurrentFiles(),this.transfers);return e===0||t===0?``:a.srFilesFailedOfTotal(t,e,a.fileLabel(e))}syncFormSubmitListener(){let e=this.closest(`form`);this.connectedForm!==e&&(this.teardownFormSubmitListener(),this.connectedForm=e,this.connectedForm&&this.connectedForm.addEventListener(`submit`,this.onHostFormSubmit))}teardownFormSubmitListener(){this.connectedForm&&=(this.connectedForm.removeEventListener(`submit`,this.onHostFormSubmit),null)}};e.r([e.s({type:String})],E.prototype,`id`,void 0),e.r([e.s({type:String})],E.prototype,`name`,void 0),e.r([e.s({type:String})],E.prototype,`label`,void 0),e.r([e.s({type:String})],E.prototype,`helptext`,void 0),e.r([e.s({type:Boolean,reflect:!0})],E.prototype,`required`,void 0),e.r([e.s({type:Boolean,reflect:!0})],E.prototype,`multiple`,void 0),e.r([e.s({type:Boolean,reflect:!0})],E.prototype,`disabled`,void 0),e.r([e.s({type:Boolean,reflect:!0,attribute:`fullwidth`})],E.prototype,`fullwidth`,void 0),e.r([e.s({type:String,reflect:!0,attribute:`upload-strategy`})],E.prototype,`uploadStrategy`,void 0),e.r([e.s({type:String,reflect:!0,attribute:`item-renderer`})],E.prototype,`itemRenderer`,void 0),e.r([e.s({type:String})],E.prototype,`accept`,void 0),e.r([e.s({converter:r.t.csvToArray,attribute:`allowed-formats`})],E.prototype,`allowedFormats`,void 0),e.r([e.s({type:String,attribute:`format-error-message`})],E.prototype,`formatErrorMessage`,void 0),e.r([e.s({attribute:`max-file-size`})],E.prototype,`maxFileSize`,void 0),e.r([e.s({type:String,attribute:`size-error-message`})],E.prototype,`sizeErrorMessage`,void 0),e.r([e.s({attribute:!1})],E.prototype,`onFileValidation`,void 0),e.r([e.s({attribute:!1})],E.prototype,`transfers`,void 0),e.r([e.s({type:Boolean,attribute:`add-comments-enabled`})],E.prototype,`addCommentsEnabled`,void 0),e.r([e.s({type:Boolean,attribute:`rename-files-enabled`})],E.prototype,`renameFilesEnabled`,void 0),e.r([e.s({attribute:!1})],E.prototype,`extraOperations`,void 0),e.r([e.s({type:Boolean,reflect:!0,attribute:`enable-image-preview`})],E.prototype,`enableImagePreview`,void 0),e.r([e.s({type:Boolean,attribute:`has-error`})],E.prototype,`hasError`,void 0),e.r([e.s({type:String,attribute:`error-message`})],E.prototype,`errorMessage`,void 0),e.r([e.s({type:Boolean,attribute:`optional-tag`})],E.prototype,`optionalTag`,void 0),e.r([e.s({type:Boolean,attribute:`required-tag`})],E.prototype,`requiredTag`,void 0),e.r([e.s({type:Number,attribute:`truncate-tail`})],E.prototype,`truncateTail`,void 0),e.r([e.s({attribute:!1})],E.prototype,`value`,void 0),e.r([e.s({attribute:!1})],E.prototype,`defaultValue`,void 0),e.r([e.o()],E.prototype,`files`,void 0),e.r([e.o()],E.prototype,`isDragActive`,void 0),e.r([e.o()],E.prototype,`validationErrorMessage`,void 0),e.r([e.o()],E.prototype,`addedAnnouncement`,void 0),e.r([e.o()],E.prototype,`thumbnailUrls`,void 0);var D=`comments`,O=e=>{let t=new Date(e);return Number.isNaN(t.getTime())?e:`${String(t.getDate()).padStart(2,`0`)}.${String(t.getMonth()+1).padStart(2,`0`)}.${t.getFullYear()} kl. ${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}`},k=(e,t,n)=>{e.key===`Enter`&&(e.preventDefault(),e.stopPropagation(),t()),e.key===`Escape`&&(e.preventDefault(),e.stopPropagation(),n())},A=(e,t,n)=>{e.key===`Escape`&&(e.preventDefault(),e.stopPropagation(),n()),(e.metaKey||e.ctrlKey)&&e.key===`Enter`&&(e.preventDefault(),e.stopPropagation(),t())},j=e=>({id:`remove`,title:`Slett`,ariaLabel:`Slett fil`,onClick:({file:t})=>e(t.fileId)}),M=()=>({id:`rename`,title:`Rediger`,ariaLabel:`Rediger filnavn`,renderInlineUI:t=>{let n=t.getAttribute(`targetFilename`)||t.file.attributes?.targetFilename||t.file.file?.name||``,r=`pkt-fileupload-rename-${t.file.fileId}`,i=()=>{let e=document.getElementById(r)?.value?.trim();e&&t.setAttribute(`targetFilename`,e),t.close()};return e.d`
2
2
  <label for=${r} class="pkt-sr-only">Endre filnavn</label>
3
3
  <input
4
4
  id=${r}
@@ -350,7 +350,7 @@ var v = "https://punkt-cdn.oslo.kommune.no/latest/logos/", y = class extends l {
350
350
  }
351
351
  renderServiceName() {
352
352
  return this.serviceName ? this.serviceLink && typeof this.serviceLink == "string" ? t`
353
- <span class="pkt-header-service__service-name">
353
+ <span class="pkt-header-service__service-name" translate="no">
354
354
  <pkt-link
355
355
  href=${this.serviceLink}
356
356
  class="pkt-header-service__service-link"
@@ -360,7 +360,7 @@ var v = "https://punkt-cdn.oslo.kommune.no/latest/logos/", y = class extends l {
360
360
  </pkt-link>
361
361
  </span>
362
362
  ` : this.hasAttribute("service-link") ? t`
363
- <span class="pkt-header-service__service-name">
363
+ <span class="pkt-header-service__service-name" translate="no">
364
364
  <button
365
365
  class="pkt-link-button pkt-link pkt-header-service__service-link"
366
366
  @click=${this.handleServiceClick}
@@ -369,7 +369,7 @@ var v = "https://punkt-cdn.oslo.kommune.no/latest/logos/", y = class extends l {
369
369
  </button>
370
370
  </span>
371
371
  ` : t`
372
- <span class="pkt-header-service__service-name" @click=${this.handleServiceClick}>
372
+ <span class="pkt-header-service__service-name" translate="no" @click=${this.handleServiceClick}>
373
373
  <span class="pkt-header-service__service-link">${this.serviceName}</span>
374
374
  </span>
375
375
  ` : n;
@@ -509,7 +509,7 @@ var v = "https://punkt-cdn.oslo.kommune.no/latest/logos/", y = class extends l {
509
509
  @click=${() => this.handleMenuToggle("user")}
510
510
  >
511
511
  <span class="pkt-sr-only">Brukermeny: </span>
512
- <span>${this.representing?.name || this.user.name}</span>
512
+ <span translate="no">${this.representing?.name || this.user.name}</span>
513
513
  </pkt-button>
514
514
  ${this.openMenu === "user" && this.user ? t`
515
515
  <div class=${e}>
@@ -101,7 +101,7 @@ const e=require(`./element-DjtxO-1r.cjs`),t=require(`./class-map-CJ-msbHs.cjs`),
101
101
  `:e.d`
102
102
  <span class="pkt-header-service__logo" @click=${this.handleLogoClick}>${t}</span>
103
103
  `}renderServiceName(){return this.serviceName?this.serviceLink&&typeof this.serviceLink==`string`?e.d`
104
- <span class="pkt-header-service__service-name">
104
+ <span class="pkt-header-service__service-name" translate="no">
105
105
  <pkt-link
106
106
  href=${this.serviceLink}
107
107
  class="pkt-header-service__service-link"
@@ -111,7 +111,7 @@ const e=require(`./element-DjtxO-1r.cjs`),t=require(`./class-map-CJ-msbHs.cjs`),
111
111
  </pkt-link>
112
112
  </span>
113
113
  `:this.hasAttribute(`service-link`)?e.d`
114
- <span class="pkt-header-service__service-name">
114
+ <span class="pkt-header-service__service-name" translate="no">
115
115
  <button
116
116
  class="pkt-link-button pkt-link pkt-header-service__service-link"
117
117
  @click=${this.handleServiceClick}
@@ -120,7 +120,7 @@ const e=require(`./element-DjtxO-1r.cjs`),t=require(`./class-map-CJ-msbHs.cjs`),
120
120
  </button>
121
121
  </span>
122
122
  `:e.d`
123
- <span class="pkt-header-service__service-name" @click=${this.handleServiceClick}>
123
+ <span class="pkt-header-service__service-name" translate="no" @click=${this.handleServiceClick}>
124
124
  <span class="pkt-header-service__service-link">${this.serviceName}</span>
125
125
  </span>
126
126
  `:e.l}renderSlotContainer(){if(!this.hasSlotContent())return e.l;let r=t.t({"pkt-header-service__slot-container":!0,"is-open":this.openMenu===`slot`}),a=t.t({"pkt-header-service__slot-content":!0,"align-right":this.alignSlotRight});return e.d`
@@ -220,7 +220,7 @@ const e=require(`./element-DjtxO-1r.cjs`),t=require(`./class-map-CJ-msbHs.cjs`),
220
220
  @click=${()=>this.handleMenuToggle(`user`)}
221
221
  >
222
222
  <span class="pkt-sr-only">Brukermeny: </span>
223
- <span>${this.representing?.name||this.user.name}</span>
223
+ <span translate="no">${this.representing?.name||this.user.name}</span>
224
224
  </pkt-button>
225
225
  ${this.openMenu===`user`&&this.user?e.d`
226
226
  <div class=${n}>
@@ -0,0 +1,35 @@
1
+ const e=require(`./element-DjtxO-1r.cjs`),t=require(`./class-map-CJ-msbHs.cjs`),n=require(`./element-with-slot-CWoTGA1B.cjs`);require(`./icon-Dr8sfT2X.cjs`);const r=require(`./ref-BaJ0mBT_.cjs`);var i=`pkt-modal--open`,a=`data-pkt-modal-open-count`,o=()=>{let e=document.body.getAttribute(a),t=e?parseInt(e,10):0;return Number.isFinite(t)&&t>0?t:0},s=e=>{e<=0?(document.body.removeAttribute(a),document.body.classList.remove(i)):(document.body.setAttribute(a,String(e)),document.body.classList.add(i))},c=e=>{e.locked||(e.locked=!0,s(o()+1))},l=e=>{e.locked&&(e.locked=!1,s(o()-1))},u=()=>({locked:!1}),d={name:`pkt-modal`,react:`PktModal`,"css-class":`pkt-modal`,isElement:!0,isPureReact:!0,events:{"background-click":{description:`Event som trigges når bakgrunnen trykkes på`},close:{description:`Event som trigges når meldingsboksen lukkes`}},props:{open:{name:`Åpen`,description:`Deklarativ styring av modalens åpen/lukket-tilstand. Kan brukes i stedet for showModal()/close()-metodene.`,type:`boolean`,category:`tech`,default:!1},headingText:{name:`Heading text`,description:`Heading tekst på modalen`,type:`string`,category:`contents`},hideCloseButton:{name:`Gjem 'Lukk'-knapp`,description:`Gjemmer lukkeknappen. Dersom denne er satt til true, vil ikke lukkeknappen vises, og dermed er det viktig at man tilbyr en annen måte som f.eks. en knapp for å lukke modalen på.`,type:`boolean`,category:`ui`,default:!1},closeOnBackdropClick:{name:`Lukk modalen når bakgrunnen trykkes på`,description:`Lukk modalen når bakgrunnen trykkes på`,type:`boolean`,category:`tech`,default:!1},closeButtonSkin:{name:`Stil på lukkeknappen`,description:`Stil på lukkeknappen`,type:[`blue`,`yellow-filled`],category:`ui`,default:`blue`},size:{name:`Størrelse`,description:`Størrelsen på modalen`,type:[`small`,`medium`,`large`,`fit-content`],category:`ui`,default:`medium`},variant:{name:`Variant`,description:`Standard dialog eller skuff`,type:[`dialog`,`drawer`],category:`ui`,default:`dialog`},drawerPosition:{name:`Skuffposisjon`,description:`Posisjonen til skuffen`,type:[`left`,`right`],category:`ui`,default:`right`},transparentBackdrop:{name:`Gjennomsiktig bakgrunn`,description:`Bakgrunnen er gjennomsiktig`,type:`boolean`,category:`ui`,default:!1},removePadding:{name:`Fjern padding`,description:`Fjerner paddingen rundt innholdet i modalen`,type:`boolean`,category:`ui`,default:!1}},slots:{default:{description:`Innholdet i meldingen. Her tilbyr vi støtteklasser for å style 1-3 knapper i modalen.`}}},f=class extends n.t{constructor(){super(),this.open=!1,this.headingText=``,this.removePadding=!1,this.hideCloseButton=d.props.hideCloseButton.default,this.closeOnBackdropClick=d.props.closeOnBackdropClick.default,this.closeButtonSkin=`blue`,this.size=d.props.size.default,this.variant=`dialog`,this.drawerPosition=`right`,this.transparentBackdrop=!1,this.dialogRef=r.t(),this._scrollLockToken=u(),this._isOpen=!1,this.close=(e,t=!1)=>{if(!this._isOpen)return;this._isOpen=!1,this.open=!1,l(this._scrollLockToken);let n=document.activeElement;n&&!this.isElementInViewport(n)&&n.scrollIntoView({behavior:`smooth`,block:`nearest`}),this.dispatchEvent(new CustomEvent(`close`,{detail:{origin:e},bubbles:!0,composed:!0})),t||this.dialogRef.value?.close(),this.requestUpdate()},this.showModal=(e=null)=>{this._isOpen=!0,this.open=!0,this.dialogRef.value?.showModal(),c(this._scrollLockToken),this.dispatchEvent(new CustomEvent(`showModal`,{detail:{origin:e},bubbles:!0,composed:!0})),this.requestUpdate()},this._isOpen=!1}async connectedCallback(){super.connectedCallback(),document.addEventListener(`keydown`,this.handleKeyDown.bind(this)),document.addEventListener(`click`,this.handleBackdropClick.bind(this))}disconnectedCallback(){super.disconnectedCallback(),document.removeEventListener(`keydown`,this.handleKeyDown),document.removeEventListener(`click`,this.handleBackdropClick),l(this._scrollLockToken)}updated(e){super.updated(e),e.has(`open`)&&(this.open&&!this._isOpen?this.showModal():!this.open&&this._isOpen&&this.close(new Event(`close`),!1))}async firstUpdated(e){super.firstUpdated(e),this.dialogRef.value&&!window.HTMLDialogElement&&!this.dialogRef.value.showModal&&(`document`in window&&`createElement`in document&&(await Promise.resolve().then(()=>require(`./dialog-polyfill.esm-BnAQvMQO.cjs`)).then(e=>e.default)).registerDialog(this.dialogRef.value),this.dialogRef.value.addEventListener(`close`,()=>{this.close(new Event(`close`),!0)}))}handleKeyDown(e){e.key===`Escape`&&this.close(e)}handleBackdropClick(e){this.closeOnBackdropClick&&e.target===this.dialogRef?.value&&this.close(e)}isElementInViewport(e){let t=e.getBoundingClientRect();return t.top>=0&&t.left>=0&&t.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&t.right<=(window.innerWidth||document.documentElement.clientWidth)}render(){let i={"pkt-modal":!0,"pkt-modal--removePadding":this.removePadding??!1,"pkt-modal--noHeadingText":this.headingText===``||this.headingText===void 0,"pkt-modal--noShadow":this.closeButtonSkin===`yellow-filled`,"pkt-modal--transparentBackdrop":this.transparentBackdrop??!1,[`pkt-modal--${this.size}`]:this.size!==void 0,[`pkt-modal__${this.variant}`]:this.variant!==void 0,[`pkt-modal__drawer--${this.drawerPosition}`]:this.variant===`drawer`},a={"pkt-modal__headingText":!0,"pkt-txt-24":!0},o={"pkt-modal__content":!0,"pkt-txt-18-light":!0},s=this.closeButtonSkin===`blue`,c={"pkt-modal__closeButton":!0,[`pkt-modal__closeButton--${this.closeButtonSkin}`]:!0};return e.d`
2
+ <dialog
3
+ class=${t.t(i)}
4
+ ${r.n(this.dialogRef)}
5
+ aria-labelledby=${this.headingText?`pkt-modal__headingText`:e.l}
6
+ aria-describedby="pkt-modal__content"
7
+ @close=${e=>this.close(e,!0)}
8
+ >
9
+ <div class="pkt-modal__wrapper">
10
+ ${this.headingText||!this.hideCloseButton?e.d`<div class="pkt-modal__header">
11
+ <div class="pkt-modal__header-background"></div>
12
+ ${this.headingText?e.d`<h1 id="pkt-modal__headingText" class=${t.t(a)}>
13
+ ${this.headingText}
14
+ </h1>`:e.d`<div class="pkt-modal__headingText"></div>`}
15
+ ${this.hideCloseButton?e.d`<div class="pkt-modal__noCloseButton"></div>`:e.d`<div class="${t.t(c)}">
16
+ <pkt-button
17
+ @click=${e=>this.close(e)}
18
+ aria-label="close"
19
+ iconname="close"
20
+ variant="icon-only"
21
+ size="medium"
22
+ skin=${s?`tertiary`:`primary`}
23
+ >
24
+ Lukk
25
+ </pkt-button>
26
+ </div>`}
27
+ </div>`:e.l}
28
+ <div class="pkt-modal__container">
29
+ <div id="pkt-modal__content" class=${t.t(o)}>
30
+ ${n.n(this)}
31
+ </div>
32
+ </div>
33
+ </div>
34
+ </dialog>
35
+ `}};e.r([e.s({type:Boolean,reflect:!0})],f.prototype,`open`,void 0),e.r([e.s({type:String})],f.prototype,`headingText`,void 0),e.r([e.s({type:Boolean})],f.prototype,`removePadding`,void 0),e.r([e.s({type:Boolean})],f.prototype,`hideCloseButton`,void 0),e.r([e.s({type:Boolean})],f.prototype,`closeOnBackdropClick`,void 0),e.r([e.s({type:String})],f.prototype,`closeButtonSkin`,void 0),e.r([e.s({type:String})],f.prototype,`size`,void 0),e.r([e.s({type:String})],f.prototype,`variant`,void 0),e.r([e.s({type:String})],f.prototype,`drawerPosition`,void 0),e.r([e.s({type:Boolean})],f.prototype,`transparentBackdrop`,void 0),e.r([e.o()],f.prototype,`_isOpen`,void 0);try{e.c(`pkt-modal`)(f)}catch{console.warn(`Forsøker å definere <pkt-modal>, men den er allerede definert`)}var p=f;Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return p}});
@@ -3,7 +3,17 @@ import { t as o } from "./class-map-C8HuhNzZ.js";
3
3
  import { n as s, t as c } from "./element-with-slot-4J2o3SeU.js";
4
4
  import "./icon-Co72KtgF.js";
5
5
  import { n as l, t as u } from "./ref-RS8Uv6uC.js";
6
- var d = {
6
+ //#region ../../shared-utils/modal-scroll-lock.ts
7
+ var d = "pkt-modal--open", f = "data-pkt-modal-open-count", p = () => {
8
+ let e = document.body.getAttribute(f), t = e ? parseInt(e, 10) : 0;
9
+ return Number.isFinite(t) && t > 0 ? t : 0;
10
+ }, m = (e) => {
11
+ e <= 0 ? (document.body.removeAttribute(f), document.body.classList.remove(d)) : (document.body.setAttribute(f, String(e)), document.body.classList.add(d));
12
+ }, h = (e) => {
13
+ e.locked || (e.locked = !0, m(p() + 1));
14
+ }, g = (e) => {
15
+ e.locked && (e.locked = !1, m(p() - 1));
16
+ }, _ = () => ({ locked: !1 }), v = {
7
17
  name: "pkt-modal",
8
18
  react: "PktModal",
9
19
  "css-class": "pkt-modal",
@@ -90,11 +100,11 @@ var d = {
90
100
  }
91
101
  },
92
102
  slots: { default: { description: "Innholdet i meldingen. Her tilbyr vi støtteklasser for å style 1-3 knapper i modalen." } }
93
- }, f = class extends c {
103
+ }, y = class extends c {
94
104
  constructor() {
95
- super(), this.open = !1, this.headingText = "", this.removePadding = !1, this.hideCloseButton = d.props.hideCloseButton.default, this.closeOnBackdropClick = d.props.closeOnBackdropClick.default, this.closeButtonSkin = "blue", this.size = d.props.size.default, this.variant = "dialog", this.drawerPosition = "right", this.transparentBackdrop = !1, this.dialogRef = u(), this._isOpen = !1, this.close = (e, t = !1) => {
105
+ super(), this.open = !1, this.headingText = "", this.removePadding = !1, this.hideCloseButton = v.props.hideCloseButton.default, this.closeOnBackdropClick = v.props.closeOnBackdropClick.default, this.closeButtonSkin = "blue", this.size = v.props.size.default, this.variant = "dialog", this.drawerPosition = "right", this.transparentBackdrop = !1, this.dialogRef = u(), this._scrollLockToken = _(), this._isOpen = !1, this.close = (e, t = !1) => {
96
106
  if (!this._isOpen) return;
97
- this._isOpen = !1, this.open = !1, document.body.classList.remove("pkt-modal--open");
107
+ this._isOpen = !1, this.open = !1, g(this._scrollLockToken);
98
108
  let n = document.activeElement;
99
109
  n && !this.isElementInViewport(n) && n.scrollIntoView({
100
110
  behavior: "smooth",
@@ -105,7 +115,7 @@ var d = {
105
115
  composed: !0
106
116
  })), t || this.dialogRef.value?.close(), this.requestUpdate();
107
117
  }, this.showModal = (e = null) => {
108
- this._isOpen = !0, this.open = !0, this.dialogRef.value?.showModal(), document.body.classList.add("pkt-modal--open"), this.dispatchEvent(new CustomEvent("showModal", {
118
+ this._isOpen = !0, this.open = !0, this.dialogRef.value?.showModal(), h(this._scrollLockToken), this.dispatchEvent(new CustomEvent("showModal", {
109
119
  detail: { origin: e },
110
120
  bubbles: !0,
111
121
  composed: !0
@@ -116,7 +126,7 @@ var d = {
116
126
  super.connectedCallback(), document.addEventListener("keydown", this.handleKeyDown.bind(this)), document.addEventListener("click", this.handleBackdropClick.bind(this));
117
127
  }
118
128
  disconnectedCallback() {
119
- super.disconnectedCallback(), document.removeEventListener("keydown", this.handleKeyDown), document.removeEventListener("click", this.handleBackdropClick);
129
+ super.disconnectedCallback(), document.removeEventListener("keydown", this.handleKeyDown), document.removeEventListener("click", this.handleBackdropClick), g(this._scrollLockToken);
120
130
  }
121
131
  updated(e) {
122
132
  super.updated(e), e.has("open") && (this.open && !this._isOpen ? this.showModal() : !this.open && this._isOpen && this.close(new Event("close"), !1));
@@ -196,14 +206,14 @@ var d = {
196
206
  i([a({
197
207
  type: Boolean,
198
208
  reflect: !0
199
- })], f.prototype, "open", void 0), i([a({ type: String })], f.prototype, "headingText", void 0), i([a({ type: Boolean })], f.prototype, "removePadding", void 0), i([a({ type: Boolean })], f.prototype, "hideCloseButton", void 0), i([a({ type: Boolean })], f.prototype, "closeOnBackdropClick", void 0), i([a({ type: String })], f.prototype, "closeButtonSkin", void 0), i([a({ type: String })], f.prototype, "size", void 0), i([a({ type: String })], f.prototype, "variant", void 0), i([a({ type: String })], f.prototype, "drawerPosition", void 0), i([a({ type: Boolean })], f.prototype, "transparentBackdrop", void 0), i([r()], f.prototype, "_isOpen", void 0);
209
+ })], y.prototype, "open", void 0), i([a({ type: String })], y.prototype, "headingText", void 0), i([a({ type: Boolean })], y.prototype, "removePadding", void 0), i([a({ type: Boolean })], y.prototype, "hideCloseButton", void 0), i([a({ type: Boolean })], y.prototype, "closeOnBackdropClick", void 0), i([a({ type: String })], y.prototype, "closeButtonSkin", void 0), i([a({ type: String })], y.prototype, "size", void 0), i([a({ type: String })], y.prototype, "variant", void 0), i([a({ type: String })], y.prototype, "drawerPosition", void 0), i([a({ type: Boolean })], y.prototype, "transparentBackdrop", void 0), i([r()], y.prototype, "_isOpen", void 0);
200
210
  try {
201
- e("pkt-modal")(f);
211
+ e("pkt-modal")(y);
202
212
  } catch {
203
213
  console.warn("Forsøker å definere <pkt-modal>, men den er allerede definert");
204
214
  }
205
215
  //#endregion
206
216
  //#region src/components/modal/index.ts
207
- var p = f;
217
+ var b = y;
208
218
  //#endregion
209
- export { f as n, p as t };
219
+ export { y as n, b as t };
@@ -1 +1 @@
1
- Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require(`./fileupload-BD_0oMrW.cjs`);Object.defineProperty(exports,`PktFileUpload`,{enumerable:!0,get:function(){return e.n}}),exports.default=e.t;
1
+ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require(`./fileupload-qc0fHcR-.cjs`);Object.defineProperty(exports,`PktFileUpload`,{enumerable:!0,get:function(){return e.n}}),exports.default=e.t;
@@ -1,2 +1,2 @@
1
- import { n as e, t } from "./fileupload-F9UMO7eS.js";
1
+ import { n as e, t } from "./fileupload-IXSGrqiH.js";
2
2
  export { e as PktFileUpload, t as default };
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./header-DZranHLm.cjs`);exports.PktHeader=e.t,exports.PktHeaderService=e.n,exports.PktHeaderUserMenu=e.r,exports.formatLastLoggedIn=e.i;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./header-C1hDYMRX.cjs`);exports.PktHeader=e.t,exports.PktHeaderService=e.n,exports.PktHeaderUserMenu=e.r,exports.formatLastLoggedIn=e.i;
@@ -1,2 +1,2 @@
1
- import { i as e, n as t, r as n, t as r } from "./header-j0SSHF4C.js";
1
+ import { i as e, n as t, r as n, t as r } from "./header-BGknkrEt.js";
2
2
  export { r as PktHeader, t as PktHeaderService, n as PktHeaderUserMenu, e as formatLastLoggedIn };
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./alert-BEEnTiCb.cjs`),t=require(`./icon-Dr8sfT2X.cjs`),n=require(`./button-D-TOBaJB.cjs`),r=require(`./accordion-DDZkjXFb.cjs`),i=require(`./backlink-Ba03LlbB.cjs`),a=require(`./breadcrumbs-CD1zib3s.cjs`),o=require(`./calendar-DkjXla0I.cjs`),s=require(`./card-C3POnP3O.cjs`),c=require(`./tag-DWtajZk6.cjs`),l=require(`./heading-DRJTS27k.cjs`),u=require(`./combobox-DYttdLJ4.cjs`),d=require(`./header-DZranHLm.cjs`),f=require(`./header-menu-CPI1_5oZ.cjs`),p=require(`./datepicker-D3QQbd_H.cjs`),m=require(`./fileupload-BD_0oMrW.cjs`),h=require(`./helptext-KWXjKljV.cjs`),g=require(`./input-wrapper-DOIWggEv.cjs`),_=require(`./consent-B5dIDyLD.cjs`),v=require(`./checkbox-BerAYcfK.cjs`),y=require(`./modal-C_LxgxzC.cjs`),b=require(`./progressbar-Ca7pRjmt.cjs`),x=require(`./link-DMKjKawh.cjs`),S=require(`./textinput-Dsc-8-BB.cjs`),C=require(`./linkcard-CBmJbSoV.cjs`),w=require(`./loader-q_eO6zaE.cjs`),T=require(`./messagebox-D1QeQqb8.cjs`),E=require(`./radiobutton-B1Xg6XzP.cjs`),D=require(`./tabs-CN_RIMWg.cjs`),O=require(`./textarea-CV6z3LDf.cjs`),k=require(`./select-DO0xGhQQ.cjs`),A=require(`./searchinput-BVIaoetB.cjs`),j=require(`./timepicker-C2Ua6vHY.cjs`);exports.PktAccordion=r.r,exports.PktAccordionItem=r.n,exports.PktAlert=e.n,exports.PktBackLink=i.n,exports.PktBreadcrumbs=a.t,exports.PktButton=n.n,exports.PktCalendar=o.n,exports.PktCard=s.n,exports.PktCheckbox=v.n,exports.PktCombobox=u.n,exports.PktConsent=_.n,exports.PktDateTags=p.a,exports.PktDatepicker=p.t,Object.defineProperty(exports,`PktFileUpload`,{enumerable:!0,get:function(){return m.n}}),exports.PktHeader=d.t,exports.PktHeaderMenu=f.n,exports.PktHeaderService=d.n,exports.PktHeaderUserMenu=d.r,exports.PktHeading=l.n,exports.PktHelptext=h.n,exports.PktIcon=t.n,exports.PktInputWrapper=g.n,exports.PktLink=x.n,exports.PktLinkCard=C.n,exports.PktLoader=w.n,exports.PktMessagebox=T.n,exports.PktModal=y.n,exports.PktProgressbar=b.n,exports.PktRadioButton=E.n,exports.PktRadiobutton=E.n,exports.PktSearchInput=A.n,exports.PktSelect=k.n,exports.PktTabItem=D.n,exports.PktTabs=D.r,exports.PktTag=c.n,exports.PktTextarea=O.n,exports.PktTextinput=S.n,exports.PktTimepicker=j.t;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./alert-BEEnTiCb.cjs`),t=require(`./icon-Dr8sfT2X.cjs`),n=require(`./button-D-TOBaJB.cjs`),r=require(`./accordion-DDZkjXFb.cjs`),i=require(`./backlink-Ba03LlbB.cjs`),a=require(`./breadcrumbs-CD1zib3s.cjs`),o=require(`./calendar-DkjXla0I.cjs`),s=require(`./card-C3POnP3O.cjs`),c=require(`./tag-DWtajZk6.cjs`),l=require(`./heading-DRJTS27k.cjs`),u=require(`./combobox-DYttdLJ4.cjs`),d=require(`./header-C1hDYMRX.cjs`),f=require(`./header-menu-CPI1_5oZ.cjs`),p=require(`./datepicker-D3QQbd_H.cjs`),m=require(`./fileupload-qc0fHcR-.cjs`),h=require(`./helptext-KWXjKljV.cjs`),g=require(`./input-wrapper-DOIWggEv.cjs`),_=require(`./consent-B5dIDyLD.cjs`),v=require(`./checkbox-BerAYcfK.cjs`),y=require(`./modal-B7-0F5q7.cjs`),b=require(`./progressbar-Ca7pRjmt.cjs`),x=require(`./link-DMKjKawh.cjs`),S=require(`./textinput-Dsc-8-BB.cjs`),C=require(`./linkcard-CBmJbSoV.cjs`),w=require(`./loader-q_eO6zaE.cjs`),T=require(`./messagebox-D1QeQqb8.cjs`),E=require(`./radiobutton-B1Xg6XzP.cjs`),D=require(`./tabs-CN_RIMWg.cjs`),O=require(`./textarea-CV6z3LDf.cjs`),k=require(`./select-DO0xGhQQ.cjs`),A=require(`./searchinput-BVIaoetB.cjs`),j=require(`./timepicker-C2Ua6vHY.cjs`);exports.PktAccordion=r.r,exports.PktAccordionItem=r.n,exports.PktAlert=e.n,exports.PktBackLink=i.n,exports.PktBreadcrumbs=a.t,exports.PktButton=n.n,exports.PktCalendar=o.n,exports.PktCard=s.n,exports.PktCheckbox=v.n,exports.PktCombobox=u.n,exports.PktConsent=_.n,exports.PktDateTags=p.a,exports.PktDatepicker=p.t,Object.defineProperty(exports,`PktFileUpload`,{enumerable:!0,get:function(){return m.n}}),exports.PktHeader=d.t,exports.PktHeaderMenu=f.n,exports.PktHeaderService=d.n,exports.PktHeaderUserMenu=d.r,exports.PktHeading=l.n,exports.PktHelptext=h.n,exports.PktIcon=t.n,exports.PktInputWrapper=g.n,exports.PktLink=x.n,exports.PktLinkCard=C.n,exports.PktLoader=w.n,exports.PktMessagebox=T.n,exports.PktModal=y.n,exports.PktProgressbar=b.n,exports.PktRadioButton=E.n,exports.PktRadiobutton=E.n,exports.PktSearchInput=A.n,exports.PktSelect=k.n,exports.PktTabItem=D.n,exports.PktTabs=D.r,exports.PktTag=c.n,exports.PktTextarea=O.n,exports.PktTextinput=S.n,exports.PktTimepicker=j.t;
package/dist/pkt-index.js CHANGED
@@ -9,15 +9,15 @@ import { n as c } from "./card-CEDbo1t7.js";
9
9
  import { n as l } from "./tag-hl59gziI.js";
10
10
  import { n as u } from "./heading-BxvE80bb.js";
11
11
  import { n as d } from "./combobox-DjvRMKOD.js";
12
- import { n as f, r as p, t as m } from "./header-j0SSHF4C.js";
12
+ import { n as f, r as p, t as m } from "./header-BGknkrEt.js";
13
13
  import { n as h } from "./header-menu-zhGYdnvz.js";
14
14
  import { a as g, t as _ } from "./datepicker-M_jcY3wp.js";
15
- import { n as v } from "./fileupload-F9UMO7eS.js";
15
+ import { n as v } from "./fileupload-IXSGrqiH.js";
16
16
  import { n as y } from "./helptext-BdqoW19r.js";
17
17
  import { n as b } from "./input-wrapper-DVU68NcJ.js";
18
18
  import { n as x } from "./consent-DSHrt9eS.js";
19
19
  import { n as S } from "./checkbox-CF5mSBR5.js";
20
- import { n as C } from "./modal-Ca7dETTw.js";
20
+ import { n as C } from "./modal-Ca-6xVkg.js";
21
21
  import { n as w } from "./progressbar-o-M17HPA.js";
22
22
  import { n as T } from "./link-F51Ho7CV.js";
23
23
  import { n as E } from "./textinput-BZZnFDk3.js";
@@ -1 +1 @@
1
- Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require(`./modal-C_LxgxzC.cjs`);exports.PktModal=e.n,exports.default=e.t;
1
+ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require(`./modal-B7-0F5q7.cjs`);exports.PktModal=e.n,exports.default=e.t;
package/dist/pkt-modal.js CHANGED
@@ -1,2 +1,2 @@
1
- import { n as e, t } from "./modal-Ca7dETTw.js";
1
+ import { n as e, t } from "./modal-Ca-6xVkg.js";
2
2
  export { e as PktModal, t as default };
@@ -0,0 +1,10 @@
1
+ export declare const acquireModalScrollLock: (token: {
2
+ locked: boolean;
3
+ }) => void;
4
+ export declare const releaseModalScrollLock: (token: {
5
+ locked: boolean;
6
+ }) => void;
7
+ export type ModalScrollLockToken = {
8
+ locked: boolean;
9
+ };
10
+ export declare const createModalScrollLockToken: () => ModalScrollLockToken;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oslokommune/punkt-elements",
3
- "version": "16.17.2",
3
+ "version": "16.17.3",
4
4
  "description": "Komponentbiblioteket til Punkt, et designsystem laget av Oslo Origo",
5
5
  "homepage": "https://punkt.oslo.kommune.no",
6
6
  "author": "Team Designsystem, Oslo Origo",
@@ -78,5 +78,5 @@
78
78
  "url": "https://github.com/oslokommune/punkt/issues"
79
79
  },
80
80
  "license": "MIT",
81
- "gitHead": "3eda56e8d6942a8f8aba63b79a469ac12b375e2d"
81
+ "gitHead": "0e923719992be1851617872d5e529a4588126aed"
82
82
  }
@@ -455,7 +455,7 @@ export class PktHeaderService extends PktElementWithSlot<IPktHeader> implements
455
455
  // If serviceLink is a non-empty string, render as link (but still dispatch event on click)
456
456
  if (this.serviceLink && typeof this.serviceLink === 'string') {
457
457
  return html`
458
- <span class="pkt-header-service__service-name">
458
+ <span class="pkt-header-service__service-name" translate="no">
459
459
  <pkt-link
460
460
  href=${this.serviceLink}
461
461
  class="pkt-header-service__service-link"
@@ -470,7 +470,7 @@ export class PktHeaderService extends PktElementWithSlot<IPktHeader> implements
470
470
  // If service-link attribute is present but empty, render as clickable button
471
471
  if (this.hasAttribute('service-link')) {
472
472
  return html`
473
- <span class="pkt-header-service__service-name">
473
+ <span class="pkt-header-service__service-name" translate="no">
474
474
  <button
475
475
  class="pkt-link-button pkt-link pkt-header-service__service-link"
476
476
  @click=${this.handleServiceClick}
@@ -483,7 +483,7 @@ export class PktHeaderService extends PktElementWithSlot<IPktHeader> implements
483
483
 
484
484
  // No link - just render the text
485
485
  return html`
486
- <span class="pkt-header-service__service-name" @click=${this.handleServiceClick}>
486
+ <span class="pkt-header-service__service-name" translate="no" @click=${this.handleServiceClick}>
487
487
  <span class="pkt-header-service__service-link">${this.serviceName}</span>
488
488
  </span>
489
489
  `
@@ -642,7 +642,7 @@ export class PktHeaderService extends PktElementWithSlot<IPktHeader> implements
642
642
  @click=${() => this.handleMenuToggle('user')}
643
643
  >
644
644
  <span class="pkt-sr-only">Brukermeny: </span>
645
- <span>${this.representing?.name || this.user.name}</span>
645
+ <span translate="no">${this.representing?.name || this.user.name}</span>
646
646
  </pkt-button>
647
647
  ${this.openMenu === 'user' && this.user
648
648
  ? html`
@@ -1,5 +1,6 @@
1
1
  import { PktIconName } from '@oslokommune/punkt-assets/dist/icons/icon'
2
- import { booleanishConverter } from 'shared-types'
2
+ import { booleanishConverter, convertUserMenuItem as sharedConvertUserMenuItem } from 'shared-types'
3
+ /* eslint-disable no-duplicate-imports */
3
4
  import type {
4
5
  Booleanish,
5
6
  User as SharedUser,
@@ -12,7 +13,6 @@ import type {
12
13
  THeaderPosition,
13
14
  THeaderScrollBehavior,
14
15
  } from 'shared-types'
15
- import { convertUserMenuItem as sharedConvertUserMenuItem } from 'shared-types'
16
16
 
17
17
  export type {
18
18
  Booleanish,
@@ -6,6 +6,12 @@ import { slotContent } from '@/directives/slot-content'
6
6
  import { ref } from 'lit/directives/ref.js'
7
7
  import { Ref, createRef } from 'lit/directives/ref.js'
8
8
  import { TPktSize } from '@/types/size'
9
+ import {
10
+ acquireModalScrollLock,
11
+ createModalScrollLockToken,
12
+ releaseModalScrollLock,
13
+ type ModalScrollLockToken,
14
+ } from 'shared-utils/modal-scroll-lock'
9
15
  import specs from 'componentSpecs/modal.json'
10
16
  import '@/components/icon'
11
17
 
@@ -40,6 +46,8 @@ export class PktModal extends PktElementWithSlot implements IPktModal {
40
46
 
41
47
  dialogRef: Ref<HTMLDialogElement> = createRef()
42
48
 
49
+ private _scrollLockToken: ModalScrollLockToken = createModalScrollLockToken()
50
+
43
51
  @state() _isOpen: boolean = false
44
52
 
45
53
  constructor() {
@@ -57,6 +65,8 @@ export class PktModal extends PktElementWithSlot implements IPktModal {
57
65
  super.disconnectedCallback()
58
66
  document.removeEventListener('keydown', this.handleKeyDown)
59
67
  document.removeEventListener('click', this.handleBackdropClick)
68
+ // Rydd opp scroll-lock hvis elementet fjernes fra DOM mens det er åpent
69
+ releaseModalScrollLock(this._scrollLockToken)
60
70
  }
61
71
 
62
72
  protected updated(changedProperties: PropertyValues): void {
@@ -112,7 +122,7 @@ export class PktModal extends PktElementWithSlot implements IPktModal {
112
122
  this._isOpen = false
113
123
  this.open = false
114
124
 
115
- document.body.classList.remove('pkt-modal--open')
125
+ releaseModalScrollLock(this._scrollLockToken)
116
126
 
117
127
  // Scroll to the opener element if it's not in the viewport
118
128
  const openerElement = document.activeElement as HTMLElement
@@ -133,7 +143,7 @@ export class PktModal extends PktElementWithSlot implements IPktModal {
133
143
  this.open = true
134
144
  this.dialogRef.value?.showModal()
135
145
 
136
- document.body.classList.add('pkt-modal--open')
146
+ acquireModalScrollLock(this._scrollLockToken)
137
147
  this.dispatchEvent(
138
148
  new CustomEvent('showModal', { detail: { origin: event }, bubbles: true, composed: true }),
139
149
  )
@@ -1,35 +0,0 @@
1
- const e=require(`./element-DjtxO-1r.cjs`),t=require(`./class-map-CJ-msbHs.cjs`),n=require(`./element-with-slot-CWoTGA1B.cjs`);require(`./icon-Dr8sfT2X.cjs`);const r=require(`./ref-BaJ0mBT_.cjs`);var i={name:`pkt-modal`,react:`PktModal`,"css-class":`pkt-modal`,isElement:!0,isPureReact:!0,events:{"background-click":{description:`Event som trigges når bakgrunnen trykkes på`},close:{description:`Event som trigges når meldingsboksen lukkes`}},props:{open:{name:`Åpen`,description:`Deklarativ styring av modalens åpen/lukket-tilstand. Kan brukes i stedet for showModal()/close()-metodene.`,type:`boolean`,category:`tech`,default:!1},headingText:{name:`Heading text`,description:`Heading tekst på modalen`,type:`string`,category:`contents`},hideCloseButton:{name:`Gjem 'Lukk'-knapp`,description:`Gjemmer lukkeknappen. Dersom denne er satt til true, vil ikke lukkeknappen vises, og dermed er det viktig at man tilbyr en annen måte som f.eks. en knapp for å lukke modalen på.`,type:`boolean`,category:`ui`,default:!1},closeOnBackdropClick:{name:`Lukk modalen når bakgrunnen trykkes på`,description:`Lukk modalen når bakgrunnen trykkes på`,type:`boolean`,category:`tech`,default:!1},closeButtonSkin:{name:`Stil på lukkeknappen`,description:`Stil på lukkeknappen`,type:[`blue`,`yellow-filled`],category:`ui`,default:`blue`},size:{name:`Størrelse`,description:`Størrelsen på modalen`,type:[`small`,`medium`,`large`,`fit-content`],category:`ui`,default:`medium`},variant:{name:`Variant`,description:`Standard dialog eller skuff`,type:[`dialog`,`drawer`],category:`ui`,default:`dialog`},drawerPosition:{name:`Skuffposisjon`,description:`Posisjonen til skuffen`,type:[`left`,`right`],category:`ui`,default:`right`},transparentBackdrop:{name:`Gjennomsiktig bakgrunn`,description:`Bakgrunnen er gjennomsiktig`,type:`boolean`,category:`ui`,default:!1},removePadding:{name:`Fjern padding`,description:`Fjerner paddingen rundt innholdet i modalen`,type:`boolean`,category:`ui`,default:!1}},slots:{default:{description:`Innholdet i meldingen. Her tilbyr vi støtteklasser for å style 1-3 knapper i modalen.`}}},a=class extends n.t{constructor(){super(),this.open=!1,this.headingText=``,this.removePadding=!1,this.hideCloseButton=i.props.hideCloseButton.default,this.closeOnBackdropClick=i.props.closeOnBackdropClick.default,this.closeButtonSkin=`blue`,this.size=i.props.size.default,this.variant=`dialog`,this.drawerPosition=`right`,this.transparentBackdrop=!1,this.dialogRef=r.t(),this._isOpen=!1,this.close=(e,t=!1)=>{if(!this._isOpen)return;this._isOpen=!1,this.open=!1,document.body.classList.remove(`pkt-modal--open`);let n=document.activeElement;n&&!this.isElementInViewport(n)&&n.scrollIntoView({behavior:`smooth`,block:`nearest`}),this.dispatchEvent(new CustomEvent(`close`,{detail:{origin:e},bubbles:!0,composed:!0})),t||this.dialogRef.value?.close(),this.requestUpdate()},this.showModal=(e=null)=>{this._isOpen=!0,this.open=!0,this.dialogRef.value?.showModal(),document.body.classList.add(`pkt-modal--open`),this.dispatchEvent(new CustomEvent(`showModal`,{detail:{origin:e},bubbles:!0,composed:!0})),this.requestUpdate()},this._isOpen=!1}async connectedCallback(){super.connectedCallback(),document.addEventListener(`keydown`,this.handleKeyDown.bind(this)),document.addEventListener(`click`,this.handleBackdropClick.bind(this))}disconnectedCallback(){super.disconnectedCallback(),document.removeEventListener(`keydown`,this.handleKeyDown),document.removeEventListener(`click`,this.handleBackdropClick)}updated(e){super.updated(e),e.has(`open`)&&(this.open&&!this._isOpen?this.showModal():!this.open&&this._isOpen&&this.close(new Event(`close`),!1))}async firstUpdated(e){super.firstUpdated(e),this.dialogRef.value&&!window.HTMLDialogElement&&!this.dialogRef.value.showModal&&(`document`in window&&`createElement`in document&&(await Promise.resolve().then(()=>require(`./dialog-polyfill.esm-BnAQvMQO.cjs`)).then(e=>e.default)).registerDialog(this.dialogRef.value),this.dialogRef.value.addEventListener(`close`,()=>{this.close(new Event(`close`),!0)}))}handleKeyDown(e){e.key===`Escape`&&this.close(e)}handleBackdropClick(e){this.closeOnBackdropClick&&e.target===this.dialogRef?.value&&this.close(e)}isElementInViewport(e){let t=e.getBoundingClientRect();return t.top>=0&&t.left>=0&&t.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&t.right<=(window.innerWidth||document.documentElement.clientWidth)}render(){let i={"pkt-modal":!0,"pkt-modal--removePadding":this.removePadding??!1,"pkt-modal--noHeadingText":this.headingText===``||this.headingText===void 0,"pkt-modal--noShadow":this.closeButtonSkin===`yellow-filled`,"pkt-modal--transparentBackdrop":this.transparentBackdrop??!1,[`pkt-modal--${this.size}`]:this.size!==void 0,[`pkt-modal__${this.variant}`]:this.variant!==void 0,[`pkt-modal__drawer--${this.drawerPosition}`]:this.variant===`drawer`},a={"pkt-modal__headingText":!0,"pkt-txt-24":!0},o={"pkt-modal__content":!0,"pkt-txt-18-light":!0},s=this.closeButtonSkin===`blue`,c={"pkt-modal__closeButton":!0,[`pkt-modal__closeButton--${this.closeButtonSkin}`]:!0};return e.d`
2
- <dialog
3
- class=${t.t(i)}
4
- ${r.n(this.dialogRef)}
5
- aria-labelledby=${this.headingText?`pkt-modal__headingText`:e.l}
6
- aria-describedby="pkt-modal__content"
7
- @close=${e=>this.close(e,!0)}
8
- >
9
- <div class="pkt-modal__wrapper">
10
- ${this.headingText||!this.hideCloseButton?e.d`<div class="pkt-modal__header">
11
- <div class="pkt-modal__header-background"></div>
12
- ${this.headingText?e.d`<h1 id="pkt-modal__headingText" class=${t.t(a)}>
13
- ${this.headingText}
14
- </h1>`:e.d`<div class="pkt-modal__headingText"></div>`}
15
- ${this.hideCloseButton?e.d`<div class="pkt-modal__noCloseButton"></div>`:e.d`<div class="${t.t(c)}">
16
- <pkt-button
17
- @click=${e=>this.close(e)}
18
- aria-label="close"
19
- iconname="close"
20
- variant="icon-only"
21
- size="medium"
22
- skin=${s?`tertiary`:`primary`}
23
- >
24
- Lukk
25
- </pkt-button>
26
- </div>`}
27
- </div>`:e.l}
28
- <div class="pkt-modal__container">
29
- <div id="pkt-modal__content" class=${t.t(o)}>
30
- ${n.n(this)}
31
- </div>
32
- </div>
33
- </div>
34
- </dialog>
35
- `}};e.r([e.s({type:Boolean,reflect:!0})],a.prototype,`open`,void 0),e.r([e.s({type:String})],a.prototype,`headingText`,void 0),e.r([e.s({type:Boolean})],a.prototype,`removePadding`,void 0),e.r([e.s({type:Boolean})],a.prototype,`hideCloseButton`,void 0),e.r([e.s({type:Boolean})],a.prototype,`closeOnBackdropClick`,void 0),e.r([e.s({type:String})],a.prototype,`closeButtonSkin`,void 0),e.r([e.s({type:String})],a.prototype,`size`,void 0),e.r([e.s({type:String})],a.prototype,`variant`,void 0),e.r([e.s({type:String})],a.prototype,`drawerPosition`,void 0),e.r([e.s({type:Boolean})],a.prototype,`transparentBackdrop`,void 0),e.r([e.o()],a.prototype,`_isOpen`,void 0);try{e.c(`pkt-modal`)(a)}catch{console.warn(`Forsøker å definere <pkt-modal>, men den er allerede definert`)}var o=a;Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return o}});