@oslokommune/punkt-elements 16.2.0 → 16.3.0

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.3.0](https://github.com/oslokommune/punkt/compare/16.2.0...16.3.0) (2026-03-24)
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.1.0](https://github.com/oslokommune/punkt/compare/16.0.5...16.1.0) (2026-03-18)
9
26
 
10
27
  ### ⚠ BREAKING CHANGES
package/dist/index.d.ts CHANGED
@@ -421,6 +421,7 @@ declare interface IPktMessagebox {
421
421
  }
422
422
 
423
423
  declare interface IPktModal {
424
+ open?: boolean;
424
425
  headingText?: string;
425
426
  removePadding?: boolean;
426
427
  hideCloseButton?: boolean;
@@ -1439,6 +1440,7 @@ export declare class PktMessagebox extends PktElementWithSlot implements IPktMes
1439
1440
  }
1440
1441
 
1441
1442
  export declare class PktModal extends PktElementWithSlot implements IPktModal {
1443
+ open?: boolean;
1442
1444
  headingText?: string;
1443
1445
  removePadding?: boolean;
1444
1446
  hideCloseButton?: boolean;
@@ -1453,6 +1455,7 @@ export declare class PktModal extends PktElementWithSlot implements IPktModal {
1453
1455
  constructor();
1454
1456
  connectedCallback(): Promise<void>;
1455
1457
  disconnectedCallback(): void;
1458
+ protected updated(changedProperties: PropertyValues): void;
1456
1459
  protected firstUpdated(_changedProperties: PropertyValues): Promise<void>;
1457
1460
  private handleKeyDown;
1458
1461
  private handleBackdropClick;
@@ -1,35 +1,30 @@
1
- import { e as c } from "./class-map-3ADKve8g.js";
2
- import { A as u, b as r, n as l, t as m } from "./element-CV9utnHJ.js";
1
+ import { e as p } from "./class-map-3ADKve8g.js";
2
+ import { A as u, b as r, n, t as m } from "./element-CV9utnHJ.js";
3
3
  import { r as k } from "./state-l4hGZdFJ.js";
4
- import { P as v, s as f } from "./element-with-slot-1djk8KXi.js";
4
+ import { P as f, s as v } from "./element-with-slot-1djk8KXi.js";
5
5
  import { e as g, n as _ } from "./ref-DBGHvw2G.js";
6
6
  import "./icon-D0IQAVwS.js";
7
7
  const y = { hideCloseButton: { default: !1 }, closeOnBackdropClick: { default: !1 }, size: { default: "medium" } }, h = {
8
8
  props: y
9
9
  };
10
- var w = Object.defineProperty, B = Object.getOwnPropertyDescriptor, a = (e, t, o, i) => {
11
- for (var n = i > 1 ? void 0 : i ? B(t, o) : t, d = e.length - 1, p; d >= 0; d--)
12
- (p = e[d]) && (n = (i ? p(t, o, n) : p(n)) || n);
13
- return i && n && w(t, o, n), n;
10
+ var w = Object.defineProperty, B = Object.getOwnPropertyDescriptor, i = (e, t, s, a) => {
11
+ for (var l = a > 1 ? void 0 : a ? B(t, s) : t, d = e.length - 1, c; d >= 0; d--)
12
+ (c = e[d]) && (l = (a ? c(t, s, l) : c(l)) || l);
13
+ return a && l && w(t, s, l), l;
14
14
  };
15
- let s = class extends v {
15
+ let o = class extends f {
16
16
  constructor() {
17
- super(), this.headingText = "", this.removePadding = !1, this.hideCloseButton = h.props.hideCloseButton.default, this.closeOnBackdropClick = h.props.closeOnBackdropClick.default, this.closeButtonSkin = "blue", this.size = h.props.size.default, this.variant = "dialog", this.drawerPosition = "right", this.transparentBackdrop = !1, this.dialogRef = g(), this._isOpen = !1, this.close = (e, t = !1) => {
18
- var i;
17
+ super(), this.open = !1, this.headingText = "", this.removePadding = !1, this.hideCloseButton = h.props.hideCloseButton.default, this.closeOnBackdropClick = h.props.closeOnBackdropClick.default, this.closeButtonSkin = "blue", this.size = h.props.size.default, this.variant = "dialog", this.drawerPosition = "right", this.transparentBackdrop = !1, this.dialogRef = g(), this._isOpen = !1, this.close = (e, t = !1) => {
18
+ var a;
19
19
  if (!this._isOpen) return;
20
- this._isOpen = !1, document.body.classList.remove("pkt-modal--open");
21
- const o = document.activeElement;
22
- o && !this.isElementInViewport(o) && o.scrollIntoView({ behavior: "smooth", block: "nearest" }), this.dispatchEvent(
20
+ this._isOpen = !1, this.open = !1, document.body.classList.remove("pkt-modal--open");
21
+ const s = document.activeElement;
22
+ s && !this.isElementInViewport(s) && s.scrollIntoView({ behavior: "smooth", block: "nearest" }), this.dispatchEvent(
23
23
  new CustomEvent("close", { detail: { origin: e }, bubbles: !0, composed: !0 })
24
- ), t || (i = this.dialogRef.value) == null || i.close(), this.requestUpdate();
24
+ ), t || (a = this.dialogRef.value) == null || a.close(), this.requestUpdate();
25
25
  }, this.showModal = (e = null) => {
26
- var o;
27
- this._isOpen = !0, (o = this.dialogRef.value) == null || o.showModal();
28
- const t = document.querySelector(".pkt-modal");
29
- requestAnimationFrame(() => {
30
- var i;
31
- this.dialogRef.value && ((i = this.dialogRef.value) == null || i.focus());
32
- }), t && document.body.classList.add("pkt-modal--open"), this.dispatchEvent(
26
+ var t;
27
+ this._isOpen = !0, this.open = !0, (t = this.dialogRef.value) == null || t.showModal(), document.body.classList.add("pkt-modal--open"), this.dispatchEvent(
33
28
  new CustomEvent("showModal", { detail: { origin: e }, bubbles: !0, composed: !0 })
34
29
  ), this.requestUpdate();
35
30
  }, this._isOpen = !1;
@@ -40,8 +35,11 @@ let s = class extends v {
40
35
  disconnectedCallback() {
41
36
  super.disconnectedCallback(), document.removeEventListener("keydown", this.handleKeyDown), document.removeEventListener("click", this.handleBackdropClick);
42
37
  }
38
+ updated(e) {
39
+ super.updated(e), e.has("open") && (this.open && !this._isOpen ? this.showModal() : !this.open && this._isOpen && this.close(new Event("close"), !1));
40
+ }
43
41
  async firstUpdated(e) {
44
- super.firstUpdated(e), this.dialogRef.value && !window.HTMLDialogElement && !this.dialogRef.value.showModal && ("document" in window && "createElement" in document && (await import("./dialog-polyfill.esm-CbjBMXAG.js").then((o) => o.default)).registerDialog(this.dialogRef.value), this.dialogRef.value.addEventListener("close", () => {
42
+ super.firstUpdated(e), this.dialogRef.value && !window.HTMLDialogElement && !this.dialogRef.value.showModal && ("document" in window && "createElement" in document && (await import("./dialog-polyfill.esm-CbjBMXAG.js").then((s) => s.default)).registerDialog(this.dialogRef.value), this.dialogRef.value.addEventListener("close", () => {
45
43
  this.close(new Event("close"), !0);
46
44
  }));
47
45
  }
@@ -70,35 +68,35 @@ let s = class extends v {
70
68
  }, t = {
71
69
  "pkt-modal__headingText": !0,
72
70
  "pkt-txt-24": !0
73
- }, o = {
71
+ }, s = {
74
72
  "pkt-modal__content": !0,
75
73
  "pkt-txt-18-light": !0
76
- }, i = this.closeButtonSkin === "blue", n = {
74
+ }, a = this.closeButtonSkin === "blue", l = {
77
75
  "pkt-modal__closeButton": !0,
78
76
  [`pkt-modal__closeButton--${this.closeButtonSkin}`]: !0
79
77
  };
80
78
  return r`
81
79
  <dialog
82
- class=${c(e)}
80
+ class=${p(e)}
83
81
  ${_(this.dialogRef)}
84
- aria-labelledby="pkt-modal__headingText"
82
+ aria-labelledby=${this.headingText ? "pkt-modal__headingText" : u}
85
83
  aria-describedby="pkt-modal__content"
86
84
  @close=${(d) => this.close(d, !0)}
87
85
  >
88
86
  <div class="pkt-modal__wrapper">
89
87
  ${this.headingText || !this.hideCloseButton ? r`<div class="pkt-modal__header">
90
88
  <div class="pkt-modal__header-background"></div>
91
- ${this.headingText ? r`<h1 id="pkt-modal__headingText" class=${c(t)}>
89
+ ${this.headingText ? r`<h1 id="pkt-modal__headingText" class=${p(t)}>
92
90
  ${this.headingText}
93
91
  </h1>` : r`<div class="pkt-modal__headingText"></div>`}
94
- ${this.hideCloseButton ? r`<div class="pkt-modal__noCloseButton"></div>` : r`<div class="${c(n)}">
92
+ ${this.hideCloseButton ? r`<div class="pkt-modal__noCloseButton"></div>` : r`<div class="${p(l)}">
95
93
  <pkt-button
96
94
  @click=${(d) => this.close(d)}
97
95
  aria-label="close"
98
96
  iconname="close"
99
97
  variant="icon-only"
100
98
  size="medium"
101
- skin=${i ? "tertiary" : "primary"}
99
+ skin=${a ? "tertiary" : "primary"}
102
100
  >
103
101
  Lukk
104
102
  </pkt-button>
@@ -107,47 +105,50 @@ let s = class extends v {
107
105
  <div class="pkt-modal__container">
108
106
  <div
109
107
  id="pkt-modal__content"
110
- class=${c(o)}
111
- >${f(this)}</div>
108
+ class=${p(s)}
109
+ >${v(this)}</div>
112
110
  </div>
113
111
  </div>
114
112
  </dialog>
115
113
  `;
116
114
  }
117
115
  };
118
- a([
119
- l({ type: String })
120
- ], s.prototype, "headingText", 2);
121
- a([
122
- l({ type: Boolean })
123
- ], s.prototype, "removePadding", 2);
124
- a([
125
- l({ type: Boolean })
126
- ], s.prototype, "hideCloseButton", 2);
127
- a([
128
- l({ type: Boolean })
129
- ], s.prototype, "closeOnBackdropClick", 2);
130
- a([
131
- l({ type: String })
132
- ], s.prototype, "closeButtonSkin", 2);
133
- a([
134
- l({ type: String })
135
- ], s.prototype, "size", 2);
136
- a([
137
- l({ type: String })
138
- ], s.prototype, "variant", 2);
139
- a([
140
- l({ type: String })
141
- ], s.prototype, "drawerPosition", 2);
142
- a([
143
- l({ type: Boolean })
144
- ], s.prototype, "transparentBackdrop", 2);
145
- a([
116
+ i([
117
+ n({ type: Boolean, reflect: !0 })
118
+ ], o.prototype, "open", 2);
119
+ i([
120
+ n({ type: String })
121
+ ], o.prototype, "headingText", 2);
122
+ i([
123
+ n({ type: Boolean })
124
+ ], o.prototype, "removePadding", 2);
125
+ i([
126
+ n({ type: Boolean })
127
+ ], o.prototype, "hideCloseButton", 2);
128
+ i([
129
+ n({ type: Boolean })
130
+ ], o.prototype, "closeOnBackdropClick", 2);
131
+ i([
132
+ n({ type: String })
133
+ ], o.prototype, "closeButtonSkin", 2);
134
+ i([
135
+ n({ type: String })
136
+ ], o.prototype, "size", 2);
137
+ i([
138
+ n({ type: String })
139
+ ], o.prototype, "variant", 2);
140
+ i([
141
+ n({ type: String })
142
+ ], o.prototype, "drawerPosition", 2);
143
+ i([
144
+ n({ type: Boolean })
145
+ ], o.prototype, "transparentBackdrop", 2);
146
+ i([
146
147
  k()
147
- ], s.prototype, "_isOpen", 2);
148
- s = a([
148
+ ], o.prototype, "_isOpen", 2);
149
+ o = i([
149
150
  m("pkt-modal")
150
- ], s);
151
+ ], o);
151
152
  export {
152
- s as P
153
+ o as P
153
154
  };
@@ -0,0 +1,36 @@
1
+ "use strict";const d=require("./class-map-Bokp1SoS.cjs"),o=require("./element-CMTfByxQ.cjs"),u=require("./state-BNgpvY-A.cjs"),p=require("./element-with-slot-yT8k1Z37.cjs"),h=require("./ref-DahIePMT.cjs");require("./icon-Dj0oZZSa.cjs");const k={hideCloseButton:{default:!1},closeOnBackdropClick:{default:!1},size:{default:"medium"}},c={props:k};var m=Object.defineProperty,v=Object.getOwnPropertyDescriptor,n=(r,e,t,i)=>{for(var s=i>1?void 0:i?v(e,t):e,l=r.length-1,a;l>=0;l--)(a=r[l])&&(s=(i?a(e,t,s):a(s))||s);return i&&s&&m(e,t,s),s};exports.PktModal=class extends p.PktElementWithSlot{constructor(){super(),this.open=!1,this.headingText="",this.removePadding=!1,this.hideCloseButton=c.props.hideCloseButton.default,this.closeOnBackdropClick=c.props.closeOnBackdropClick.default,this.closeButtonSkin="blue",this.size=c.props.size.default,this.variant="dialog",this.drawerPosition="right",this.transparentBackdrop=!1,this.dialogRef=h.e(),this._isOpen=!1,this.close=(e,t=!1)=>{var s;if(!this._isOpen)return;this._isOpen=!1,this.open=!1,document.body.classList.remove("pkt-modal--open");const i=document.activeElement;i&&!this.isElementInViewport(i)&&i.scrollIntoView({behavior:"smooth",block:"nearest"}),this.dispatchEvent(new CustomEvent("close",{detail:{origin:e},bubbles:!0,composed:!0})),t||(s=this.dialogRef.value)==null||s.close(),this.requestUpdate()},this.showModal=(e=null)=>{var t;this._isOpen=!0,this.open=!0,(t=this.dialogRef.value)==null||t.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-CPKZe7AL.cjs")).then(i=>i.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){var t;this.closeOnBackdropClick&&e.target===((t=this.dialogRef)==null?void 0:t.value)&&this.close(e)}isElementInViewport(e){const 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(){const e={"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"},t={"pkt-modal__headingText":!0,"pkt-txt-24":!0},i={"pkt-modal__content":!0,"pkt-txt-18-light":!0},s=this.closeButtonSkin==="blue",l={"pkt-modal__closeButton":!0,[`pkt-modal__closeButton--${this.closeButtonSkin}`]:!0};return o.b`
2
+ <dialog
3
+ class=${d.e(e)}
4
+ ${h.n(this.dialogRef)}
5
+ aria-labelledby=${this.headingText?"pkt-modal__headingText":o.A}
6
+ aria-describedby="pkt-modal__content"
7
+ @close=${a=>this.close(a,!0)}
8
+ >
9
+ <div class="pkt-modal__wrapper">
10
+ ${this.headingText||!this.hideCloseButton?o.b`<div class="pkt-modal__header">
11
+ <div class="pkt-modal__header-background"></div>
12
+ ${this.headingText?o.b`<h1 id="pkt-modal__headingText" class=${d.e(t)}>
13
+ ${this.headingText}
14
+ </h1>`:o.b`<div class="pkt-modal__headingText"></div>`}
15
+ ${this.hideCloseButton?o.b`<div class="pkt-modal__noCloseButton"></div>`:o.b`<div class="${d.e(l)}">
16
+ <pkt-button
17
+ @click=${a=>this.close(a)}
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>`:o.A}
28
+ <div class="pkt-modal__container">
29
+ <div
30
+ id="pkt-modal__content"
31
+ class=${d.e(i)}
32
+ >${p.slotContent(this)}</div>
33
+ </div>
34
+ </div>
35
+ </dialog>
36
+ `}};n([o.n({type:Boolean,reflect:!0})],exports.PktModal.prototype,"open",2);n([o.n({type:String})],exports.PktModal.prototype,"headingText",2);n([o.n({type:Boolean})],exports.PktModal.prototype,"removePadding",2);n([o.n({type:Boolean})],exports.PktModal.prototype,"hideCloseButton",2);n([o.n({type:Boolean})],exports.PktModal.prototype,"closeOnBackdropClick",2);n([o.n({type:String})],exports.PktModal.prototype,"closeButtonSkin",2);n([o.n({type:String})],exports.PktModal.prototype,"size",2);n([o.n({type:String})],exports.PktModal.prototype,"variant",2);n([o.n({type:String})],exports.PktModal.prototype,"drawerPosition",2);n([o.n({type:Boolean})],exports.PktModal.prototype,"transparentBackdrop",2);n([u.r()],exports.PktModal.prototype,"_isOpen",2);exports.PktModal=n([o.t("pkt-modal")],exports.PktModal);
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("./alert-C95U_RZ0.cjs"),t=require("./accordionitem-D7sWqDM_.cjs"),a=require("./backlink-CQoNgoa-.cjs"),P=require("./button-BXN_JPaH.cjs"),i=require("./calendar-43Y_6FD8.cjs"),c=require("./card-DfHo45CG.cjs"),b=require("./combobox-TKL44xnV.cjs"),k=require("./consent-CIhFwuFO.cjs"),d=require("./checkbox-mmn3v9ry.cjs"),r=require("./datepicker-oN9L0Wnm.cjs"),e=require("./pkt-header.cjs"),l=require("./helptext-B366oeR9.cjs"),s=require("./heading-B0XRE0lq.cjs"),p=require("./icon-Dj0oZZSa.cjs"),g=require("./input-wrapper-BdFdJU-k.cjs"),m=require("./link-DLjXMpvi.cjs"),f=require("./linkcard-C20WC6Nw.cjs"),y=require("./loader-DxAGCcNF.cjs"),j=require("./messagebox-B8LW0PSQ.cjs"),O=require("./modal-Bfk_ncLQ.cjs"),q=require("./progressbar-CC9Qr82_.cjs"),n=require("./radiobutton-BUDQYAH-.cjs"),x=require("./tag-DeE1OpmF.cjs"),o=require("./tabitem-Jenus4Qd.cjs"),T=require("./textarea-DtiYQWjy.cjs"),C=require("./textinput-cKrjvbJW.cjs"),H=require("./select-PuEeK4jQ.cjs");Object.defineProperty(exports,"PktAlert",{enumerable:!0,get:()=>u.PktAlert});exports.PktAccordion=t.PktAccordion;exports.PktAccordionItem=t.PktAccordionItem_default;Object.defineProperty(exports,"PktBackLink",{enumerable:!0,get:()=>a.PktBackLink});Object.defineProperty(exports,"PktButton",{enumerable:!0,get:()=>P.PktButton});Object.defineProperty(exports,"PktCalendar",{enumerable:!0,get:()=>i.PktCalendar});Object.defineProperty(exports,"PktCard",{enumerable:!0,get:()=>c.PktCard});Object.defineProperty(exports,"PktCombobox",{enumerable:!0,get:()=>b.PktCombobox});Object.defineProperty(exports,"PktConsent",{enumerable:!0,get:()=>k.PktConsent});Object.defineProperty(exports,"PktCheckbox",{enumerable:!0,get:()=>d.PktCheckbox});Object.defineProperty(exports,"PktDateTags",{enumerable:!0,get:()=>r.PktDateTags});Object.defineProperty(exports,"PktDatepicker",{enumerable:!0,get:()=>r.PktDatepicker});Object.defineProperty(exports,"PktHeader",{enumerable:!0,get:()=>e.PktHeader});Object.defineProperty(exports,"PktHeaderService",{enumerable:!0,get:()=>e.PktHeaderService});Object.defineProperty(exports,"PktHeaderUserMenu",{enumerable:!0,get:()=>e.PktHeaderUserMenu});Object.defineProperty(exports,"PktHelptext",{enumerable:!0,get:()=>l.PktHelptext});Object.defineProperty(exports,"PktHeading",{enumerable:!0,get:()=>s.PktHeading});Object.defineProperty(exports,"PktIcon",{enumerable:!0,get:()=>p.PktIcon});Object.defineProperty(exports,"PktInputWrapper",{enumerable:!0,get:()=>g.PktInputWrapper});Object.defineProperty(exports,"PktLink",{enumerable:!0,get:()=>m.PktLink});Object.defineProperty(exports,"PktLinkCard",{enumerable:!0,get:()=>f.PktLinkCard});Object.defineProperty(exports,"PktLoader",{enumerable:!0,get:()=>y.PktLoader});Object.defineProperty(exports,"PktMessagebox",{enumerable:!0,get:()=>j.PktMessagebox});Object.defineProperty(exports,"PktModal",{enumerable:!0,get:()=>O.PktModal});Object.defineProperty(exports,"PktProgressbar",{enumerable:!0,get:()=>q.PktProgressbar});Object.defineProperty(exports,"PktRadioButton",{enumerable:!0,get:()=>n.PktRadioButton});Object.defineProperty(exports,"PktRadiobutton",{enumerable:!0,get:()=>n.PktRadioButton});Object.defineProperty(exports,"PktTag",{enumerable:!0,get:()=>x.PktTag});exports.PktTabItem=o.PktTabItem_default;exports.PktTabs=o.PktTabs;Object.defineProperty(exports,"PktTextarea",{enumerable:!0,get:()=>T.PktTextarea});Object.defineProperty(exports,"PktTextinput",{enumerable:!0,get:()=>C.PktTextinput});Object.defineProperty(exports,"PktSelect",{enumerable:!0,get:()=>H.PktSelect});
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("./alert-C95U_RZ0.cjs"),t=require("./accordionitem-D7sWqDM_.cjs"),a=require("./backlink-CQoNgoa-.cjs"),P=require("./button-BXN_JPaH.cjs"),i=require("./calendar-43Y_6FD8.cjs"),c=require("./card-DfHo45CG.cjs"),b=require("./combobox-TKL44xnV.cjs"),k=require("./consent-CIhFwuFO.cjs"),d=require("./checkbox-mmn3v9ry.cjs"),r=require("./datepicker-oN9L0Wnm.cjs"),e=require("./pkt-header.cjs"),l=require("./helptext-B366oeR9.cjs"),s=require("./heading-B0XRE0lq.cjs"),p=require("./icon-Dj0oZZSa.cjs"),g=require("./input-wrapper-BdFdJU-k.cjs"),m=require("./link-DLjXMpvi.cjs"),f=require("./linkcard-C20WC6Nw.cjs"),y=require("./loader-DxAGCcNF.cjs"),j=require("./messagebox-B8LW0PSQ.cjs"),O=require("./modal-mWn5pjs8.cjs"),q=require("./progressbar-CC9Qr82_.cjs"),n=require("./radiobutton-BUDQYAH-.cjs"),x=require("./tag-DeE1OpmF.cjs"),o=require("./tabitem-Jenus4Qd.cjs"),T=require("./textarea-DtiYQWjy.cjs"),C=require("./textinput-cKrjvbJW.cjs"),H=require("./select-PuEeK4jQ.cjs");Object.defineProperty(exports,"PktAlert",{enumerable:!0,get:()=>u.PktAlert});exports.PktAccordion=t.PktAccordion;exports.PktAccordionItem=t.PktAccordionItem_default;Object.defineProperty(exports,"PktBackLink",{enumerable:!0,get:()=>a.PktBackLink});Object.defineProperty(exports,"PktButton",{enumerable:!0,get:()=>P.PktButton});Object.defineProperty(exports,"PktCalendar",{enumerable:!0,get:()=>i.PktCalendar});Object.defineProperty(exports,"PktCard",{enumerable:!0,get:()=>c.PktCard});Object.defineProperty(exports,"PktCombobox",{enumerable:!0,get:()=>b.PktCombobox});Object.defineProperty(exports,"PktConsent",{enumerable:!0,get:()=>k.PktConsent});Object.defineProperty(exports,"PktCheckbox",{enumerable:!0,get:()=>d.PktCheckbox});Object.defineProperty(exports,"PktDateTags",{enumerable:!0,get:()=>r.PktDateTags});Object.defineProperty(exports,"PktDatepicker",{enumerable:!0,get:()=>r.PktDatepicker});Object.defineProperty(exports,"PktHeader",{enumerable:!0,get:()=>e.PktHeader});Object.defineProperty(exports,"PktHeaderService",{enumerable:!0,get:()=>e.PktHeaderService});Object.defineProperty(exports,"PktHeaderUserMenu",{enumerable:!0,get:()=>e.PktHeaderUserMenu});Object.defineProperty(exports,"PktHelptext",{enumerable:!0,get:()=>l.PktHelptext});Object.defineProperty(exports,"PktHeading",{enumerable:!0,get:()=>s.PktHeading});Object.defineProperty(exports,"PktIcon",{enumerable:!0,get:()=>p.PktIcon});Object.defineProperty(exports,"PktInputWrapper",{enumerable:!0,get:()=>g.PktInputWrapper});Object.defineProperty(exports,"PktLink",{enumerable:!0,get:()=>m.PktLink});Object.defineProperty(exports,"PktLinkCard",{enumerable:!0,get:()=>f.PktLinkCard});Object.defineProperty(exports,"PktLoader",{enumerable:!0,get:()=>y.PktLoader});Object.defineProperty(exports,"PktMessagebox",{enumerable:!0,get:()=>j.PktMessagebox});Object.defineProperty(exports,"PktModal",{enumerable:!0,get:()=>O.PktModal});Object.defineProperty(exports,"PktProgressbar",{enumerable:!0,get:()=>q.PktProgressbar});Object.defineProperty(exports,"PktRadioButton",{enumerable:!0,get:()=>n.PktRadioButton});Object.defineProperty(exports,"PktRadiobutton",{enumerable:!0,get:()=>n.PktRadioButton});Object.defineProperty(exports,"PktTag",{enumerable:!0,get:()=>x.PktTag});exports.PktTabItem=o.PktTabItem_default;exports.PktTabs=o.PktTabs;Object.defineProperty(exports,"PktTextarea",{enumerable:!0,get:()=>T.PktTextarea});Object.defineProperty(exports,"PktTextinput",{enumerable:!0,get:()=>C.PktTextinput});Object.defineProperty(exports,"PktSelect",{enumerable:!0,get:()=>H.PktSelect});
package/dist/pkt-index.js CHANGED
@@ -17,7 +17,7 @@ import { P as q } from "./link-oGYvBLYL.js";
17
17
  import { P as y } from "./linkcard-BhVIc18n.js";
18
18
  import { P as E } from "./loader-BHt9i5Xp.js";
19
19
  import { P as G } from "./messagebox-DkspcMQg.js";
20
- import { P as K } from "./modal-p1rvuP8e.js";
20
+ import { P as K } from "./modal-D3u6ueP5.js";
21
21
  import { P as O } from "./progressbar-CcX-xiPI.js";
22
22
  import { P as V, P as X } from "./radiobutton-RW3h0tJj.js";
23
23
  import { P as Z } from "./tag-CIWBLpjv.js";
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./modal-Bfk_ncLQ.cjs"),t=e.PktModal;Object.defineProperty(exports,"PktModal",{enumerable:!0,get:()=>e.PktModal});exports.default=t;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./modal-mWn5pjs8.cjs"),t=e.PktModal;Object.defineProperty(exports,"PktModal",{enumerable:!0,get:()=>e.PktModal});exports.default=t;
package/dist/pkt-modal.js CHANGED
@@ -1,4 +1,4 @@
1
- import { P as a } from "./modal-p1rvuP8e.js";
1
+ import { P as a } from "./modal-D3u6ueP5.js";
2
2
  const t = a;
3
3
  export {
4
4
  a as PktModal,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oslokommune/punkt-elements",
3
- "version": "16.2.0",
3
+ "version": "16.3.0",
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",
@@ -42,7 +42,7 @@
42
42
  "@babel/preset-env": "^7.28.3",
43
43
  "@babel/preset-typescript": "^7.25.9",
44
44
  "@oslokommune/punkt-assets": "^16.0.0",
45
- "@oslokommune/punkt-css": "^16.2.0",
45
+ "@oslokommune/punkt-css": "^16.3.0",
46
46
  "@testing-library/jest-dom": "^6.6.3",
47
47
  "@typescript-eslint/eslint-plugin": "^8.46.0",
48
48
  "@typescript-eslint/parser": "^8.46.0",
@@ -79,5 +79,5 @@
79
79
  "url": "https://github.com/oslokommune/punkt/issues"
80
80
  },
81
81
  "license": "MIT",
82
- "gitHead": "554167272be133d1486fb9b041b3afe0980c5069"
82
+ "gitHead": "3561a39e6329e3fc85d558d89cf20b58aa410d24"
83
83
  }
@@ -10,6 +10,7 @@ import specs from 'componentSpecs/modal.json'
10
10
  import '@/components/icon'
11
11
 
12
12
  export interface IPktModal {
13
+ open?: boolean
13
14
  headingText?: string
14
15
  removePadding?: boolean
15
16
  hideCloseButton?: boolean
@@ -23,7 +24,8 @@ export interface IPktModal {
23
24
 
24
25
  @customElement('pkt-modal')
25
26
  export class PktModal extends PktElementWithSlot implements IPktModal {
26
- // Public properties"
27
+ // Public properties
28
+ @property({ type: Boolean, reflect: true }) open?: boolean = false
27
29
  @property({ type: String }) headingText?: string = ''
28
30
  @property({ type: Boolean }) removePadding?: boolean = false
29
31
  @property({ type: Boolean }) hideCloseButton?: boolean = specs.props.hideCloseButton.default
@@ -56,6 +58,17 @@ export class PktModal extends PktElementWithSlot implements IPktModal {
56
58
  document.removeEventListener('click', this.handleBackdropClick)
57
59
  }
58
60
 
61
+ protected updated(changedProperties: PropertyValues): void {
62
+ super.updated(changedProperties)
63
+ if (changedProperties.has('open')) {
64
+ if (this.open && !this._isOpen) {
65
+ this.showModal()
66
+ } else if (!this.open && this._isOpen) {
67
+ this.close(new Event('close'), false)
68
+ }
69
+ }
70
+ }
71
+
59
72
  protected async firstUpdated(_changedProperties: PropertyValues): Promise<void> {
60
73
  super.firstUpdated(_changedProperties)
61
74
  if (this.dialogRef.value && !window.HTMLDialogElement && !this.dialogRef.value.showModal) {
@@ -96,6 +109,7 @@ export class PktModal extends PktElementWithSlot implements IPktModal {
96
109
  public close = (event: Event, bypassNativeClose: boolean = false) => {
97
110
  if (!this._isOpen) return
98
111
  this._isOpen = false
112
+ this.open = false
99
113
 
100
114
  document.body.classList.remove('pkt-modal--open')
101
115
 
@@ -115,19 +129,10 @@ export class PktModal extends PktElementWithSlot implements IPktModal {
115
129
 
116
130
  public showModal = (event: Event | null = null) => {
117
131
  this._isOpen = true
132
+ this.open = true
118
133
  this.dialogRef.value?.showModal()
119
- const modal = document.querySelector('.pkt-modal')
120
134
 
121
- // Prevent the first focusable child from being auto-focused
122
- requestAnimationFrame(() => {
123
- if (this.dialogRef.value) {
124
- this.dialogRef.value?.focus()
125
- }
126
- })
127
-
128
- if (modal) {
129
- document.body.classList.add('pkt-modal--open')
130
- }
135
+ document.body.classList.add('pkt-modal--open')
131
136
  this.dispatchEvent(
132
137
  new CustomEvent('showModal', { detail: { origin: event }, bubbles: true, composed: true }),
133
138
  )
@@ -166,7 +171,7 @@ export class PktModal extends PktElementWithSlot implements IPktModal {
166
171
  <dialog
167
172
  class=${classMap(classes)}
168
173
  ${ref(this.dialogRef)}
169
- aria-labelledby="pkt-modal__headingText"
174
+ aria-labelledby=${this.headingText ? 'pkt-modal__headingText' : nothing}
170
175
  aria-describedby="pkt-modal__content"
171
176
  @close=${(event: Event) => this.close(event, true)}
172
177
  >
@@ -1,36 +0,0 @@
1
- "use strict";const d=require("./class-map-Bokp1SoS.cjs"),o=require("./element-CMTfByxQ.cjs"),u=require("./state-BNgpvY-A.cjs"),p=require("./element-with-slot-yT8k1Z37.cjs"),h=require("./ref-DahIePMT.cjs");require("./icon-Dj0oZZSa.cjs");const k={hideCloseButton:{default:!1},closeOnBackdropClick:{default:!1},size:{default:"medium"}},c={props:k};var m=Object.defineProperty,v=Object.getOwnPropertyDescriptor,n=(r,e,t,i)=>{for(var s=i>1?void 0:i?v(e,t):e,l=r.length-1,a;l>=0;l--)(a=r[l])&&(s=(i?a(e,t,s):a(s))||s);return i&&s&&m(e,t,s),s};exports.PktModal=class extends p.PktElementWithSlot{constructor(){super(),this.headingText="",this.removePadding=!1,this.hideCloseButton=c.props.hideCloseButton.default,this.closeOnBackdropClick=c.props.closeOnBackdropClick.default,this.closeButtonSkin="blue",this.size=c.props.size.default,this.variant="dialog",this.drawerPosition="right",this.transparentBackdrop=!1,this.dialogRef=h.e(),this._isOpen=!1,this.close=(e,t=!1)=>{var s;if(!this._isOpen)return;this._isOpen=!1,document.body.classList.remove("pkt-modal--open");const i=document.activeElement;i&&!this.isElementInViewport(i)&&i.scrollIntoView({behavior:"smooth",block:"nearest"}),this.dispatchEvent(new CustomEvent("close",{detail:{origin:e},bubbles:!0,composed:!0})),t||(s=this.dialogRef.value)==null||s.close(),this.requestUpdate()},this.showModal=(e=null)=>{var i;this._isOpen=!0,(i=this.dialogRef.value)==null||i.showModal();const t=document.querySelector(".pkt-modal");requestAnimationFrame(()=>{var s;this.dialogRef.value&&((s=this.dialogRef.value)==null||s.focus())}),t&&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)}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-CPKZe7AL.cjs")).then(i=>i.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){var t;this.closeOnBackdropClick&&e.target===((t=this.dialogRef)==null?void 0:t.value)&&this.close(e)}isElementInViewport(e){const 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(){const e={"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"},t={"pkt-modal__headingText":!0,"pkt-txt-24":!0},i={"pkt-modal__content":!0,"pkt-txt-18-light":!0},s=this.closeButtonSkin==="blue",l={"pkt-modal__closeButton":!0,[`pkt-modal__closeButton--${this.closeButtonSkin}`]:!0};return o.b`
2
- <dialog
3
- class=${d.e(e)}
4
- ${h.n(this.dialogRef)}
5
- aria-labelledby="pkt-modal__headingText"
6
- aria-describedby="pkt-modal__content"
7
- @close=${a=>this.close(a,!0)}
8
- >
9
- <div class="pkt-modal__wrapper">
10
- ${this.headingText||!this.hideCloseButton?o.b`<div class="pkt-modal__header">
11
- <div class="pkt-modal__header-background"></div>
12
- ${this.headingText?o.b`<h1 id="pkt-modal__headingText" class=${d.e(t)}>
13
- ${this.headingText}
14
- </h1>`:o.b`<div class="pkt-modal__headingText"></div>`}
15
- ${this.hideCloseButton?o.b`<div class="pkt-modal__noCloseButton"></div>`:o.b`<div class="${d.e(l)}">
16
- <pkt-button
17
- @click=${a=>this.close(a)}
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>`:o.A}
28
- <div class="pkt-modal__container">
29
- <div
30
- id="pkt-modal__content"
31
- class=${d.e(i)}
32
- >${p.slotContent(this)}</div>
33
- </div>
34
- </div>
35
- </dialog>
36
- `}};n([o.n({type:String})],exports.PktModal.prototype,"headingText",2);n([o.n({type:Boolean})],exports.PktModal.prototype,"removePadding",2);n([o.n({type:Boolean})],exports.PktModal.prototype,"hideCloseButton",2);n([o.n({type:Boolean})],exports.PktModal.prototype,"closeOnBackdropClick",2);n([o.n({type:String})],exports.PktModal.prototype,"closeButtonSkin",2);n([o.n({type:String})],exports.PktModal.prototype,"size",2);n([o.n({type:String})],exports.PktModal.prototype,"variant",2);n([o.n({type:String})],exports.PktModal.prototype,"drawerPosition",2);n([o.n({type:Boolean})],exports.PktModal.prototype,"transparentBackdrop",2);n([u.r()],exports.PktModal.prototype,"_isOpen",2);exports.PktModal=n([o.t("pkt-modal")],exports.PktModal);