@oslokommune/punkt-elements 13.5.1 → 13.5.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,40 @@ og skriver commits ca etter [Conventional Commits](https://conventionalcommits.o
5
5
 
6
6
  ---
7
7
 
8
+ ## [13.5.3](https://github.com/oslokommune/punkt/compare/13.5.2...13.5.3) (2025-09-08)
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
+
25
+ ## [13.5.2](https://github.com/oslokommune/punkt/compare/13.5.1...13.5.2) (2025-09-08)
26
+
27
+ ### ⚠ BREAKING CHANGES
28
+ Ingen
29
+
30
+ ### Features
31
+ Ingen
32
+
33
+ ### Bug Fixes
34
+ Ingen
35
+
36
+ ### Chores
37
+ Ingen
38
+
39
+ ---
40
+
41
+
8
42
  ## [13.5.1](https://github.com/oslokommune/punkt/compare/13.5.0...13.5.1) (2025-09-08)
9
43
 
10
44
  ### ⚠ BREAKING CHANGES
@@ -1,4 +1,4 @@
1
- "use strict";const c=require("./class-map-BBG2gMX4.cjs"),t=require("./element-6DBpyGQm.cjs"),d=require("./state-DPobt-Yz.cjs"),h=require("./pkt-slot-controller-BzddBp7z.cjs"),u=require("./ref-iJtiv3o2.cjs"),k=require("./classutils-BwNK82ZQ.cjs");require("./icon-B_ryAy4Q.cjs");require("./button-B8rdtaHB.cjs");const v={skin:{default:"info"},ariaLive:{default:"polite"},compact:{default:!1},closeAlert:{default:!1}},a={props:v};var f=Object.defineProperty,_=Object.getOwnPropertyDescriptor,i=(o,e,s,r)=>{for(var l=r>1?void 0:r?_(e,s):e,p=o.length-1,n;p>=0;p--)(n=o[p])&&(l=(r?n(e,s,l):n(l))||l);return r&&l&&f(e,s,l),l};exports.PktAlert=class extends t.PktElement{constructor(){super(),this.defaultSlot=u.e(),this.compact=a.props.compact.default,this.title="",this.skin=a.props.skin.default,this.ariaLive=a.props.ariaLive.default,this["aria-live"]=null,this.closeAlert=a.props.closeAlert.default,this.date=null,this.role="status",this._isClosed=!1,this.close=e=>{this._isClosed=!0,this.dispatchEvent(new CustomEvent("close",{detail:{origin:e},bubbles:!0,composed:!0})),this.dispatchEvent(new CustomEvent("on-close",{detail:{origin:e},bubbles:!0,composed:!0}))},this.slotController=new h.PktSlotController(this,this.defaultSlot),this._isClosed=!1}connectedCallback(){super.connectedCallback(),this["aria-live"]=this.getAttribute("aria-live")||this.ariaLive}attributeChangedCallback(e,s,r){e==="ariaLive"&&(this["aria-live"]=r),super.attributeChangedCallback(e,s,r)}updated(e){super.updated(e),e.has("ariaLive")&&(this["aria-live"]=this.ariaLive),e.has("_isClosed")&&k.updateClassAttribute(this,"pkt-hide",this._isClosed)}render(){const e={"pkt-alert":!0,"pkt-alert--compact":this.compact,[`pkt-alert--${this.skin}`]:this.skin,"pkt-hide":this._isClosed},s={"pkt-alert__grid":!0,"pkt-alert__noTitle":!this.title,"pkt-alert__noDate":!this.date};return t.x`
1
+ "use strict";const c=require("./class-map-BBG2gMX4.cjs"),t=require("./element-6DBpyGQm.cjs"),d=require("./state-DPobt-Yz.cjs"),h=require("./pkt-slot-controller-BzddBp7z.cjs"),u=require("./ref-iJtiv3o2.cjs"),k=require("./classutils-BwNK82ZQ.cjs");require("./icon-B_ryAy4Q.cjs");require("./button-B8rdtaHB.cjs");const v={skin:{default:"info"},ariaLive:{default:"polite"},compact:{default:!1},closeAlert:{default:!1}},a={props:v};var f=Object.defineProperty,_=Object.getOwnPropertyDescriptor,i=(o,e,s,l)=>{for(var r=l>1?void 0:l?_(e,s):e,p=o.length-1,n;p>=0;p--)(n=o[p])&&(r=(l?n(e,s,r):n(r))||r);return l&&r&&f(e,s,r),r};exports.PktAlert=class extends t.PktElement{constructor(){super(),this.defaultSlot=u.e(),this.compact=a.props.compact.default,this.title="",this.skin=a.props.skin.default,this.ariaLive=a.props.ariaLive.default,this["aria-live"]=null,this.closeAlert=a.props.closeAlert.default,this.date=null,this.role="status",this._isClosed=!1,this.close=e=>{this._isClosed=!0,this.dispatchEvent(new CustomEvent("close",{detail:{origin:e},bubbles:!0,composed:!0})),this.dispatchEvent(new CustomEvent("on-close",{detail:{origin:e},bubbles:!0,composed:!0}))},this.slotController=new h.PktSlotController(this,this.defaultSlot),this._isClosed=!1}connectedCallback(){super.connectedCallback(),this["aria-live"]=this.getAttribute("aria-live")||this.ariaLive}attributeChangedCallback(e,s,l){e==="ariaLive"&&(this["aria-live"]=l),super.attributeChangedCallback(e,s,l)}updated(e){super.updated(e),e.has("ariaLive")&&(this["aria-live"]=this.ariaLive),e.has("_isClosed")&&k.updateClassAttribute(this,"pkt-hide",this._isClosed)}render(){const e={"pkt-alert":!0,"pkt-alert--compact":this.compact,[`pkt-alert--${this.skin}`]:this.skin,"pkt-hide":this._isClosed},s={"pkt-alert__grid":!0,"pkt-alert__noTitle":!this.title,"pkt-alert__noDate":!this.date};return t.x`
2
2
  <div class=${c.e(e)} aria-live=${this["aria-live"]}>
3
3
  <div class=${c.e(s)}>
4
4
  <pkt-icon
@@ -19,6 +19,7 @@
19
19
  variant="icon-only"
20
20
  @click=${this.close}
21
21
  >
22
+ <span class="sr-only">Lukk</span>
22
23
  </pkt-button>
23
24
  </div>
24
25
  `:t.E}
@@ -1,7 +1,7 @@
1
- import { e as u } from "./class-map-BpTj9gtz.js";
2
- import { P as f, E as h, x as p, n as a, a as v } from "./element-CgEWt74-.js";
3
- import { r as m } from "./state-Bo2bck5_.js";
4
- import { P as k } from "./pkt-slot-controller-BPGj-LC5.js";
1
+ import { e as h } from "./class-map-BpTj9gtz.js";
2
+ import { P as f, E as u, x as p, n as a, a as v } from "./element-CgEWt74-.js";
3
+ import { r as k } from "./state-Bo2bck5_.js";
4
+ import { P as m } from "./pkt-slot-controller-BPGj-LC5.js";
5
5
  import { e as _, n as b } from "./ref-BBYSqgeW.js";
6
6
  import { u as y } from "./classutils-RQs1k6D9.js";
7
7
  import "./icon-CC1js8eR.js";
@@ -35,7 +35,7 @@ let e = class extends f {
35
35
  ), this.dispatchEvent(
36
36
  new CustomEvent("on-close", { detail: { origin: t }, bubbles: !0, composed: !0 })
37
37
  );
38
- }, this.slotController = new k(this, this.defaultSlot), this._isClosed = !1;
38
+ }, this.slotController = new m(this, this.defaultSlot), this._isClosed = !1;
39
39
  }
40
40
  // Lifecycle
41
41
  connectedCallback() {
@@ -60,8 +60,8 @@ let e = class extends f {
60
60
  "pkt-alert__noDate": !this.date
61
61
  };
62
62
  return p`
63
- <div class=${u(t)} aria-live=${this["aria-live"]}>
64
- <div class=${u(s)}>
63
+ <div class=${h(t)} aria-live=${this["aria-live"]}>
64
+ <div class=${h(s)}>
65
65
  <pkt-icon
66
66
  class="pkt-alert__icon"
67
67
  aria-hidden="true"
@@ -80,14 +80,15 @@ let e = class extends f {
80
80
  variant="icon-only"
81
81
  @click=${this.close}
82
82
  >
83
+ <span class="sr-only">Lukk</span>
83
84
  </pkt-button>
84
85
  </div>
85
- ` : h}
86
- ${this.title ? p`<div class="pkt-alert__title">${this.title}</div>` : h}
86
+ ` : u}
87
+ ${this.title ? p`<div class="pkt-alert__title">${this.title}</div>` : u}
87
88
 
88
89
  <div class="pkt-alert__text" ${b(this.defaultSlot)}></div>
89
90
 
90
- ${this.date ? p`<div class="pkt-alert__date">Sist oppdatert: ${this.date}</div>` : h}
91
+ ${this.date ? p`<div class="pkt-alert__date">Sist oppdatert: ${this.date}</div>` : u}
91
92
  </div>
92
93
  </div>
93
94
  `;
@@ -118,7 +119,7 @@ i([
118
119
  a({ type: String, reflect: !0 })
119
120
  ], e.prototype, "role", 2);
120
121
  i([
121
- m()
122
+ k()
122
123
  ], e.prototype, "_isClosed", 2);
123
124
  e = i([
124
125
  v("pkt-alert")
@@ -1,24 +1,25 @@
1
- import { P as f, x as c, n, a as h } from "./element-CgEWt74-.js";
1
+ import { P as f, x as c, n as o, a as h } from "./element-CgEWt74-.js";
2
2
  import { e as k, n as m } from "./ref-BBYSqgeW.js";
3
- import { P as u } from "./pkt-slot-controller-BPGj-LC5.js";
3
+ import { P as d } from "./pkt-slot-controller-BPGj-LC5.js";
4
4
  import "./icon-CC1js8eR.js";
5
- var _ = Object.defineProperty, d = Object.getOwnPropertyDescriptor, r = (l, i, s, o) => {
6
- for (var e = o > 1 ? void 0 : o ? d(i, s) : i, a = l.length - 1, p; a >= 0; a--)
7
- (p = l[a]) && (e = (o ? p(i, s, e) : p(e)) || e);
8
- return o && e && _(i, s, e), e;
5
+ import { o as u } from "./if-defined-CmuO4Vz9.js";
6
+ var _ = Object.defineProperty, y = Object.getOwnPropertyDescriptor, r = (n, i, s, l) => {
7
+ for (var e = l > 1 ? void 0 : l ? y(i, s) : i, a = n.length - 1, p; a >= 0; a--)
8
+ (p = n[a]) && (e = (l ? p(i, s, e) : p(e)) || e);
9
+ return l && e && _(i, s, e), e;
9
10
  };
10
11
  let t = class extends f {
11
12
  constructor() {
12
- super(), this.defaultSlot = k(), this.title = "", this.href = "#", this.iconName = "", this.external = !1, this.openInNewTab = !1, this.skin = "normal", this.slotController = new u(this, this.defaultSlot);
13
+ super(), this.defaultSlot = k(), this.title = "", this.href = "#", this.iconName = "", this.external = !1, this.openInNewTab = !1, this.skin = "normal", this.slotController = new d(this, this.defaultSlot);
13
14
  }
14
15
  render() {
15
- const l = ["pkt-linkcard", this.skin && `pkt-linkcard--${this.skin}`].filter(Boolean).join(" "), i = ["pkt-linkcard__title", this.external && "pkt-link pkt-link--external"].filter(Boolean).join(" ");
16
+ const n = ["pkt-linkcard", this.skin && `pkt-linkcard--${this.skin}`].filter(Boolean).join(" "), i = ["pkt-linkcard__title", this.external && "pkt-link pkt-link--external"].filter(Boolean).join(" ");
16
17
  return c`
17
18
  <a
18
19
  href=${this.href}
19
- class=${l}
20
+ class=${n}
20
21
  target=${this.openInNewTab ? "_blank" : "_self"}
21
- rel=${this.openInNewTab ?? "noopener noreferrer"}
22
+ rel=${u(this.openInNewTab ? "noopener noreferrer" : void 0)}
22
23
  >
23
24
  ${this.iconName && c`<pkt-icon class="pkt-link__icon" name="${this.iconName}" />`}
24
25
  ${this.title && c`<div class=${i}>${this.title}</div>`}
@@ -29,22 +30,22 @@ let t = class extends f {
29
30
  }
30
31
  };
31
32
  r([
32
- n({ type: String, reflect: !0 })
33
+ o({ type: String, reflect: !0 })
33
34
  ], t.prototype, "title", 2);
34
35
  r([
35
- n({ type: String, reflect: !0 })
36
+ o({ type: String, reflect: !0 })
36
37
  ], t.prototype, "href", 2);
37
38
  r([
38
- n({ type: String, reflect: !0 })
39
+ o({ type: String, reflect: !0 })
39
40
  ], t.prototype, "iconName", 2);
40
41
  r([
41
- n({ type: Boolean, reflect: !0 })
42
+ o({ type: Boolean, reflect: !0 })
42
43
  ], t.prototype, "external", 2);
43
44
  r([
44
- n({ type: Boolean, reflect: !0 })
45
+ o({ type: Boolean, reflect: !0 })
45
46
  ], t.prototype, "openInNewTab", 2);
46
47
  r([
47
- n({ type: String, reflect: !0 })
48
+ o({ type: String, reflect: !0 })
48
49
  ], t.prototype, "skin", 2);
49
50
  t = r([
50
51
  h("pkt-linkcard")
@@ -1,9 +1,9 @@
1
- "use strict";const t=require("./element-6DBpyGQm.cjs"),k=require("./ref-iJtiv3o2.cjs"),p=require("./pkt-slot-controller-BzddBp7z.cjs");require("./icon-B_ryAy4Q.cjs");var c=Object.defineProperty,h=Object.getOwnPropertyDescriptor,r=(s,n,i,l)=>{for(var e=l>1?void 0:l?h(n,i):n,o=s.length-1,a;o>=0;o--)(a=s[o])&&(e=(l?a(n,i,e):a(e))||e);return l&&e&&c(n,i,e),e};exports.PktLinkCard=class extends t.PktElement{constructor(){super(),this.defaultSlot=k.e(),this.title="",this.href="#",this.iconName="",this.external=!1,this.openInNewTab=!1,this.skin="normal",this.slotController=new p.PktSlotController(this,this.defaultSlot)}render(){const n=["pkt-linkcard",this.skin&&`pkt-linkcard--${this.skin}`].filter(Boolean).join(" "),i=["pkt-linkcard__title",this.external&&"pkt-link pkt-link--external"].filter(Boolean).join(" ");return t.x`
1
+ "use strict";const t=require("./element-6DBpyGQm.cjs"),k=require("./ref-iJtiv3o2.cjs"),p=require("./pkt-slot-controller-BzddBp7z.cjs");require("./icon-B_ryAy4Q.cjs");const c=require("./if-defined-Cni-RHLS.cjs");var f=Object.defineProperty,h=Object.getOwnPropertyDescriptor,r=(o,n,i,l)=>{for(var e=l>1?void 0:l?h(n,i):n,s=o.length-1,a;s>=0;s--)(a=o[s])&&(e=(l?a(n,i,e):a(e))||e);return l&&e&&f(n,i,e),e};exports.PktLinkCard=class extends t.PktElement{constructor(){super(),this.defaultSlot=k.e(),this.title="",this.href="#",this.iconName="",this.external=!1,this.openInNewTab=!1,this.skin="normal",this.slotController=new p.PktSlotController(this,this.defaultSlot)}render(){const n=["pkt-linkcard",this.skin&&`pkt-linkcard--${this.skin}`].filter(Boolean).join(" "),i=["pkt-linkcard__title",this.external&&"pkt-link pkt-link--external"].filter(Boolean).join(" ");return t.x`
2
2
  <a
3
3
  href=${this.href}
4
4
  class=${n}
5
5
  target=${this.openInNewTab?"_blank":"_self"}
6
- rel=${this.openInNewTab??"noopener noreferrer"}
6
+ rel=${c.o(this.openInNewTab?"noopener noreferrer":void 0)}
7
7
  >
8
8
  ${this.iconName&&t.x`<pkt-icon class="pkt-link__icon" name="${this.iconName}" />`}
9
9
  ${this.title&&t.x`<div class=${i}>${this.title}</div>`}
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./alert-DQNBDKjT.cjs"),t=e.PktAlert;Object.defineProperty(exports,"PktAlert",{enumerable:!0,get:()=>e.PktAlert});exports.default=t;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./alert-7rUOhlNi.cjs"),t=e.PktAlert;Object.defineProperty(exports,"PktAlert",{enumerable:!0,get:()=>e.PktAlert});exports.default=t;
package/dist/pkt-alert.js CHANGED
@@ -1,4 +1,4 @@
1
- import { P as t } from "./alert-B07oUpkq.js";
1
+ import { P as t } from "./alert-cUBtwi2k.js";
2
2
  const e = t;
3
3
  export {
4
4
  t as PktAlert,
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const P=require("./alert-DQNBDKjT.cjs"),l=require("./accordionitem-Csh7iSVG.cjs"),d=require("./backlink-JbBNi3qg.cjs"),b=require("./button-B8rdtaHB.cjs"),k=require("./calendar-32W9p9uc.cjs"),m=require("./card-DBlFf1ry.cjs"),g=require("./combobox-DjO0RMUB.cjs"),h=require("./consent-hYeFWNFr.cjs"),f=require("./checkbox-Gn7Wtk9h.cjs"),t=require("./element-6DBpyGQm.cjs"),y=require("./pkt-slot-controller-BzddBp7z.cjs"),s=require("./ref-iJtiv3o2.cjs"),O=require("./class-map-BBG2gMX4.cjs"),j=require("./datepicker-CmTrG5GE.cjs"),q=require("./helptext-CzQX6YVE.cjs"),x=require("./heading-CNycsyMj.cjs"),C=require("./icon-B_ryAy4Q.cjs"),v=require("./input-wrapper-CZ-a00V7.cjs"),S=require("./link-Cjl0xwSq.cjs"),$=require("./linkcard-BlMhPNry.cjs"),L=require("./loader-CHPxY9c6.cjs"),_=require("./messagebox-CqUBJs_D.cjs"),A=require("./modal-CRtxhCaP.cjs"),B=require("./progressbar-DhMBXkww.cjs"),p=require("./radiobutton-CdT6v1oq.cjs"),T=require("./tag-Bbs0U_Au.cjs"),I=require("./textarea-CPXsMFUq.cjs"),M=require("./textinput-aNI5kibM.cjs"),R=require("./select-Dkl0KhGW.cjs");var H=Object.defineProperty,w=Object.getOwnPropertyDescriptor,o=(a,e,r,i)=>{for(var n=i>1?void 0:i?w(e,r):e,u=a.length-1,c;u>=0;u--)(c=a[u])&&(n=(i?c(e,r,n):c(n))||n);return i&&n&&H(e,r,n),n};exports.PktComponent=class extends t.PktElement{constructor(){super(),this.string="",this.strings=[],this.darkmode=!1,this._list=[],this.defaultSlot=s.e(),this.namedSlot=s.e(),this.slotController=new y.PktSlotController(this,this.defaultSlot,this.namedSlot)}connectedCallback(){this.strings.length&&this.strings.forEach(e=>{this._list.push(e.toUpperCase())}),super.connectedCallback()}render(){const e={"pkt-component":!0,"pkt-component--has-list":this.strings.length>0,"pkt-darkmode":this.darkmode};return t.x`
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const P=require("./alert-7rUOhlNi.cjs"),l=require("./accordionitem-Csh7iSVG.cjs"),d=require("./backlink-JbBNi3qg.cjs"),b=require("./button-B8rdtaHB.cjs"),k=require("./calendar-32W9p9uc.cjs"),m=require("./card-DBlFf1ry.cjs"),g=require("./combobox-DjO0RMUB.cjs"),h=require("./consent-hYeFWNFr.cjs"),f=require("./checkbox-Gn7Wtk9h.cjs"),t=require("./element-6DBpyGQm.cjs"),y=require("./pkt-slot-controller-BzddBp7z.cjs"),s=require("./ref-iJtiv3o2.cjs"),O=require("./class-map-BBG2gMX4.cjs"),j=require("./datepicker-CmTrG5GE.cjs"),q=require("./helptext-CzQX6YVE.cjs"),x=require("./heading-CNycsyMj.cjs"),C=require("./icon-B_ryAy4Q.cjs"),v=require("./input-wrapper-CZ-a00V7.cjs"),S=require("./link-Cjl0xwSq.cjs"),$=require("./linkcard-DqIvb54H.cjs"),L=require("./loader-CHPxY9c6.cjs"),_=require("./messagebox-CqUBJs_D.cjs"),A=require("./modal-CRtxhCaP.cjs"),B=require("./progressbar-DhMBXkww.cjs"),p=require("./radiobutton-CdT6v1oq.cjs"),T=require("./tag-Bbs0U_Au.cjs"),I=require("./textarea-CPXsMFUq.cjs"),M=require("./textinput-aNI5kibM.cjs"),R=require("./select-Dkl0KhGW.cjs");var H=Object.defineProperty,w=Object.getOwnPropertyDescriptor,o=(a,e,r,i)=>{for(var n=i>1?void 0:i?w(e,r):e,u=a.length-1,c;u>=0;u--)(c=a[u])&&(n=(i?c(e,r,n):c(n))||n);return i&&n&&H(e,r,n),n};exports.PktComponent=class extends t.PktElement{constructor(){super(),this.string="",this.strings=[],this.darkmode=!1,this._list=[],this.defaultSlot=s.e(),this.namedSlot=s.e(),this.slotController=new y.PktSlotController(this,this.defaultSlot,this.namedSlot)}connectedCallback(){this.strings.length&&this.strings.forEach(e=>{this._list.push(e.toUpperCase())}),super.connectedCallback()}render(){const e={"pkt-component":!0,"pkt-component--has-list":this.strings.length>0,"pkt-darkmode":this.darkmode};return t.x`
2
2
  <div class="${O.e(e)}">
3
3
  <h1 class="pkt-txt-28">${this.string}</h1>
4
4
 
package/dist/pkt-index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { P as A } from "./alert-B07oUpkq.js";
1
+ import { P as A } from "./alert-cUBtwi2k.js";
2
2
  import { P as B, a as E } from "./accordionitem-C9T3nlM0.js";
3
3
  import { P as O } from "./backlink-C2jbzu0U.js";
4
4
  import { P as T } from "./button-DhispFOY.js";
@@ -18,7 +18,7 @@ import { P as X } from "./heading-Bdh9absf.js";
18
18
  import { P as Z } from "./icon-CC1js8eR.js";
19
19
  import { P as et } from "./input-wrapper-Dr__Sxql.js";
20
20
  import { P as ot } from "./link-AIyVfcyH.js";
21
- import { P as at } from "./linkcard-BVEsUPwG.js";
21
+ import { P as at } from "./linkcard-9CNlyT0S.js";
22
22
  import { P as it } from "./loader-Da4IOk_T.js";
23
23
  import { P as lt } from "./messagebox-DwGdcdm7.js";
24
24
  import { P as mt } from "./modal-Zj8yRX3K.js";
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./linkcard-BlMhPNry.cjs"),t=e.PktLinkCard;Object.defineProperty(exports,"PktLinkCard",{enumerable:!0,get:()=>e.PktLinkCard});exports.default=t;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./linkcard-DqIvb54H.cjs"),t=e.PktLinkCard;Object.defineProperty(exports,"PktLinkCard",{enumerable:!0,get:()=>e.PktLinkCard});exports.default=t;
@@ -1,4 +1,4 @@
1
- import { P as a } from "./linkcard-BVEsUPwG.js";
1
+ import { P as a } from "./linkcard-9CNlyT0S.js";
2
2
  const k = a;
3
3
  export {
4
4
  a as PktLinkCard,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oslokommune/punkt-elements",
3
- "version": "13.5.1",
3
+ "version": "13.5.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",
@@ -35,7 +35,11 @@
35
35
  "whatwg-fetch": "^3.6.19"
36
36
  },
37
37
  "devDependencies": {
38
+ "@babel/plugin-transform-class-properties": "^7.25.9",
39
+ "@babel/plugin-transform-private-methods": "^7.25.9",
40
+ "@babel/plugin-transform-private-property-in-object": "^7.25.9",
38
41
  "@babel/preset-env": "^7.28.3",
42
+ "@babel/preset-typescript": "^7.25.9",
39
43
  "@oslokommune/punkt-assets": "^13.3.1",
40
44
  "@oslokommune/punkt-css": "^13.5.0",
41
45
  "@testing-library/jest-dom": "^6.6.3",
@@ -69,5 +73,5 @@
69
73
  "url": "https://github.com/oslokommune/punkt/issues"
70
74
  },
71
75
  "license": "MIT",
72
- "gitHead": "5892d94f903527e3e228915d86653bfbfdf209c8"
76
+ "gitHead": "6b43945924c71b96b609f1abc7875e139e297233"
73
77
  }
@@ -1,27 +1,32 @@
1
1
  import '@testing-library/jest-dom'
2
2
  import { axe, toHaveNoViolations } from 'jest-axe'
3
3
  import { fireEvent } from '@testing-library/dom'
4
+ import { createElementTest, BaseTestConfig } from '../../tests/test-framework'
5
+ import { CustomElementFor } from '../../tests/component-registry'
6
+ import './alert'
4
7
 
5
8
  expect.extend(toHaveNoViolations)
6
9
 
7
- import './alert'
8
- import { PktAlert } from './alert' // For type checking
9
-
10
- const waitForCustomElements = async () => {
11
- await customElements.whenDefined('pkt-alert')
10
+ export interface AlertTestConfig extends BaseTestConfig {
11
+ skin?: string
12
+ compact?: boolean
13
+ title?: string
14
+ date?: string
15
+ closeAlert?: boolean
16
+ ariaLive?: string
12
17
  }
13
18
 
14
- // Helper function to create alert markup
15
- const createAlert = async (alertProps = '', content = 'Test alert content') => {
16
- const container = document.createElement('div')
17
- container.innerHTML = `
18
- <pkt-alert ${alertProps}>
19
- ${content}
20
- </pkt-alert>
21
- `
22
- document.body.appendChild(container)
23
- await waitForCustomElements()
24
- return container
19
+ // Use shared framework
20
+ export const createAlertTest = async (config: AlertTestConfig = {}) => {
21
+ const { container, element } = await createElementTest<
22
+ CustomElementFor<'pkt-alert'>,
23
+ AlertTestConfig
24
+ >('pkt-alert', config)
25
+
26
+ return {
27
+ container,
28
+ alert: element,
29
+ }
25
30
  }
26
31
 
27
32
  // Cleanup after each test
@@ -32,11 +37,11 @@ afterEach(() => {
32
37
  describe('PktAlert', () => {
33
38
  describe('Rendering and basic functionality', () => {
34
39
  test('renders without errors', async () => {
35
- const container = await createAlert()
40
+ const { alert } = await createAlertTest({
41
+ content: 'Test alert content',
42
+ })
36
43
 
37
- const alert = container.querySelector('pkt-alert') as PktAlert
38
44
  expect(alert).toBeInTheDocument()
39
-
40
45
  await alert.updateComplete
41
46
  expect(alert).toBeTruthy()
42
47
 
@@ -45,9 +50,11 @@ describe('PktAlert', () => {
45
50
  })
46
51
 
47
52
  test('renders with correct structure', async () => {
48
- const container = await createAlert('title="Test Title"', 'Test alert message')
53
+ const { alert } = await createAlertTest({
54
+ title: 'Test Title',
55
+ content: 'Test alert message',
56
+ })
49
57
 
50
- const alert = container.querySelector('pkt-alert') as PktAlert
51
58
  await alert.updateComplete
52
59
 
53
60
  const alertDiv = alert.querySelector('.pkt-alert')
@@ -68,8 +75,7 @@ describe('PktAlert', () => {
68
75
  const skins = ['error', 'success', 'warning', 'info'] as const
69
76
 
70
77
  for (const skin of skins) {
71
- const container = await createAlert(`skin="${skin}"`)
72
- const alert = container.querySelector('pkt-alert') as PktAlert
78
+ const { alert } = await createAlertTest({ skin })
73
79
  await alert.updateComplete
74
80
 
75
81
  const icon = alert.querySelector('pkt-icon')
@@ -77,18 +83,14 @@ describe('PktAlert', () => {
77
83
 
78
84
  expect(icon?.getAttribute('name')).toBe(expectedIconName)
79
85
  expect(icon?.getAttribute('aria-hidden')).toBe('true')
80
-
81
- // Cleanup for next iteration
82
- container.remove()
83
86
  }
84
87
  })
85
88
  })
86
89
 
87
90
  describe('Properties and attributes', () => {
88
91
  test('applies default properties correctly', async () => {
89
- const container = await createAlert()
92
+ const { alert } = await createAlertTest()
90
93
 
91
- const alert = container.querySelector('pkt-alert') as PktAlert
92
94
  await alert.updateComplete
93
95
 
94
96
  expect(alert.skin).toBe('info')
@@ -108,8 +110,7 @@ describe('PktAlert', () => {
108
110
  const skins = ['error', 'success', 'warning', 'info'] as const
109
111
 
110
112
  for (const skin of skins) {
111
- const container = await createAlert(`skin="${skin}"`)
112
- const alert = container.querySelector('pkt-alert') as PktAlert
113
+ const { alert } = await createAlertTest({ skin })
113
114
  await alert.updateComplete
114
115
 
115
116
  expect(alert.skin).toBe(skin)
@@ -117,16 +118,12 @@ describe('PktAlert', () => {
117
118
 
118
119
  const alertDiv = alert.querySelector('.pkt-alert')
119
120
  expect(alertDiv).toHaveClass(`pkt-alert--${skin}`)
120
-
121
- // Cleanup for next iteration
122
- container.remove()
123
121
  }
124
122
  })
125
123
 
126
124
  test('applies compact property correctly', async () => {
127
- const container = await createAlert('compact')
125
+ const { alert } = await createAlertTest({ compact: true })
128
126
 
129
- const alert = container.querySelector('pkt-alert') as PktAlert
130
127
  await alert.updateComplete
131
128
 
132
129
  expect(alert.compact).toBe(true)
@@ -136,9 +133,8 @@ describe('PktAlert', () => {
136
133
  })
137
134
 
138
135
  test('handles title property', async () => {
139
- const container = await createAlert('title="Alert Title"')
136
+ const { alert } = await createAlertTest({ title: 'Alert Title' })
140
137
 
141
- const alert = container.querySelector('pkt-alert') as PktAlert
142
138
  await alert.updateComplete
143
139
 
144
140
  expect(alert.title).toBe('Alert Title')
@@ -156,9 +152,8 @@ describe('PktAlert', () => {
156
152
  })
157
153
 
158
154
  test('handles date property', async () => {
159
- const container = await createAlert('date="2024-01-15"')
155
+ const { alert } = await createAlertTest({ date: '2024-01-15' })
160
156
 
161
- const alert = container.querySelector('pkt-alert') as PktAlert
162
157
  await alert.updateComplete
163
158
 
164
159
  expect(alert.date).toBe('2024-01-15')
@@ -170,25 +165,22 @@ describe('PktAlert', () => {
170
165
  })
171
166
 
172
167
  test('handles aria-live property', async () => {
173
- const container = await createAlert('aria-live="assertive"')
168
+ const { alert } = await createAlertTest({ ariaLive: 'assertive' })
174
169
 
175
- const alert = container.querySelector('pkt-alert') as PktAlert
176
170
  await alert.updateComplete
177
171
 
178
- // Note: The component sets aria-live to the ariaLive property value,
179
- // which defaults to 'polite' from specs, not the attribute value
180
- expect(alert['aria-live']).toBe('polite')
172
+ // The component uses the ariaLive property value that was set
173
+ expect(alert['aria-live']).toBe('assertive')
181
174
 
182
175
  const alertDiv = alert.querySelector('.pkt-alert')
183
- expect(alertDiv?.getAttribute('aria-live')).toBe('polite')
176
+ expect(alertDiv?.getAttribute('aria-live')).toBe('assertive')
184
177
  })
185
178
  })
186
179
 
187
180
  describe('Close functionality', () => {
188
181
  test('renders close button when closeAlert is true', async () => {
189
- const container = await createAlert('closealert')
182
+ const { alert } = await createAlertTest({ closeAlert: true })
190
183
 
191
- const alert = container.querySelector('pkt-alert') as PktAlert
192
184
  await alert.updateComplete
193
185
 
194
186
  expect(alert.closeAlert).toBe(true)
@@ -204,9 +196,8 @@ describe('PktAlert', () => {
204
196
  })
205
197
 
206
198
  test('does not render close button when closeAlert is false', async () => {
207
- const container = await createAlert()
199
+ const { alert } = await createAlertTest({ closeAlert: false })
208
200
 
209
- const alert = container.querySelector('pkt-alert') as PktAlert
210
201
  await alert.updateComplete
211
202
 
212
203
  expect(alert.closeAlert).toBe(false)
@@ -219,9 +210,8 @@ describe('PktAlert', () => {
219
210
  })
220
211
 
221
212
  test('closes alert when close button is clicked', async () => {
222
- const container = await createAlert('closealert')
213
+ const { alert } = await createAlertTest({ closeAlert: true })
223
214
 
224
- const alert = container.querySelector('pkt-alert') as PktAlert
225
215
  await alert.updateComplete
226
216
 
227
217
  // Listen for close events
@@ -265,30 +255,23 @@ describe('PktAlert', () => {
265
255
  describe('Grid layout classes', () => {
266
256
  test('applies correct grid classes based on content', async () => {
267
257
  // Test with no title and no date
268
- const container1 = await createAlert()
269
- const alert1 = container1.querySelector('pkt-alert') as PktAlert
258
+ const { alert: alert1 } = await createAlertTest()
270
259
  await alert1.updateComplete
271
260
 
272
261
  const grid1 = alert1.querySelector('.pkt-alert__grid')
273
262
  expect(grid1).toHaveClass('pkt-alert__noTitle')
274
263
  expect(grid1).toHaveClass('pkt-alert__noDate')
275
264
 
276
- container1.remove()
277
-
278
265
  // Test with title but no date
279
- const container2 = await createAlert('title="Test Title"')
280
- const alert2 = container2.querySelector('pkt-alert') as PktAlert
266
+ const { alert: alert2 } = await createAlertTest({ title: 'Test Title' })
281
267
  await alert2.updateComplete
282
268
 
283
269
  const grid2 = alert2.querySelector('.pkt-alert__grid')
284
270
  expect(grid2).not.toHaveClass('pkt-alert__noTitle')
285
271
  expect(grid2).toHaveClass('pkt-alert__noDate')
286
272
 
287
- container2.remove()
288
-
289
273
  // Test with both title and date
290
- const container3 = await createAlert('title="Test Title" date="2024-01-15"')
291
- const alert3 = container3.querySelector('pkt-alert') as PktAlert
274
+ const { alert: alert3 } = await createAlertTest({ title: 'Test Title', date: '2024-01-15' })
292
275
  await alert3.updateComplete
293
276
 
294
277
  const grid3 = alert3.querySelector('.pkt-alert__grid')
@@ -299,47 +282,49 @@ describe('PktAlert', () => {
299
282
 
300
283
  describe('Accessibility', () => {
301
284
  test('has correct ARIA attributes', async () => {
302
- const container = await createAlert('aria-live="polite" role="alert"')
285
+ const { alert } = await createAlertTest({ ariaLive: 'polite' })
303
286
 
304
- const alert = container.querySelector('pkt-alert') as PktAlert
305
287
  await alert.updateComplete
306
288
 
307
289
  const alertDiv = alert.querySelector('.pkt-alert')
308
290
  const icon = alert.querySelector('pkt-icon')
309
291
 
310
292
  expect(alertDiv?.getAttribute('aria-live')).toBe('polite')
311
- expect(alert.role).toBe('alert')
293
+ expect(alert.role).toBe('status')
312
294
  expect(icon?.getAttribute('aria-hidden')).toBe('true')
313
295
  })
314
296
 
315
297
  test('renders with no WCAG errors with axe - simple alert', async () => {
316
- const container = await createAlert('title="Test Alert"', 'This is a test alert message.')
317
-
318
- const alert = container.querySelector('pkt-alert') as PktAlert
319
- await alert.updateComplete
298
+ const { container } = await createAlertTest({
299
+ title: 'Test Alert',
300
+ content: 'This is a test alert message.',
301
+ })
320
302
 
321
303
  const results = await axe(container)
322
304
  expect(results).toHaveNoViolations()
323
305
  })
324
306
 
325
307
  test('renders with no WCAG errors with axe - complex alert', async () => {
326
- const container = await createAlert(
327
- 'skin="error" title="Error Alert" date="2024-01-15" close-alert aria-live="assertive"',
328
- '<p>This is an error message with <a href="#">a link</a>.</p>',
329
- )
330
-
331
- const alert = container.querySelector('pkt-alert') as PktAlert
332
- await alert.updateComplete
308
+ const { container } = await createAlertTest({
309
+ skin: 'error',
310
+ title: 'Error Alert',
311
+ date: '2024-01-15',
312
+ closeAlert: true,
313
+ ariaLive: 'assertive',
314
+ content: '<p>This is an error message with <a href="#">a link</a>.</p>',
315
+ })
333
316
 
334
317
  const results = await axe(container)
335
318
  expect(results).toHaveNoViolations()
336
319
  })
337
320
 
338
321
  test('renders with no WCAG errors with axe - compact alert', async () => {
339
- const container = await createAlert('skin="success" compact close-alert', 'Success message')
340
-
341
- const alert = container.querySelector('pkt-alert') as PktAlert
342
- await alert.updateComplete
322
+ const { container } = await createAlertTest({
323
+ skin: 'success',
324
+ compact: true,
325
+ closeAlert: true,
326
+ content: 'Success message',
327
+ })
343
328
 
344
329
  const results = await axe(container)
345
330
  expect(results).toHaveNoViolations()
@@ -109,6 +109,7 @@ export class PktAlert extends PktElement implements IPktAlert {
109
109
  variant="icon-only"
110
110
  @click=${this.close}
111
111
  >
112
+ <span class="sr-only">Lukk</span>
112
113
  </pkt-button>
113
114
  </div>
114
115
  `