@oslokommune/punkt-elements 12.29.2 → 12.29.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/dist/index.d.ts CHANGED
@@ -47,6 +47,37 @@ declare interface IPktLinkCard {
47
47
  skin?: TLinkCardSkin;
48
48
  }
49
49
 
50
+ export declare interface IPktLoader {
51
+ /**
52
+ * The `delay` prop controls how much time the loading should be given before the loader is displayed.
53
+ * This is handy for situations where the load time might be so short that loader is not necessary.
54
+ * Delay time is in milliseconds.
55
+ */
56
+ delay?: number;
57
+ /**
58
+ * The `inline` prop decides whether the loader should be displayed inline or not.
59
+ */
60
+ inline?: boolean;
61
+ /**
62
+ * The boolean 'isLoading' decides whether the loader or the children will be displayed.
63
+ * If set to false, the children will be displayed.
64
+ */
65
+ isLoading?: boolean;
66
+ /**
67
+ * The message to display when the loader is loading.
68
+ */
69
+ message?: string | null;
70
+ /**
71
+ * The size of the loader. Default is "medium".
72
+ */
73
+ size?: TPktSize;
74
+ /**
75
+ * The variant of the loader. Default is "shapes" which is the OSLO wave loader.
76
+ * Other variants are "blue" and "rainbow" which are spinner variants.
77
+ */
78
+ variant?: TPktLoaderVariant;
79
+ }
80
+
50
81
  declare interface IPktMessagebox {
51
82
  skin?: TMessageboxSkin;
52
83
  title?: string;
@@ -521,6 +552,23 @@ export declare class PktLinkCard extends PktElement implements IPktLinkCard {
521
552
  render(): TemplateResult<1>;
522
553
  }
523
554
 
555
+ export declare class PktLoader extends PktElement implements IPktLoader {
556
+ defaultSlot: Ref<HTMLElement>;
557
+ constructor();
558
+ delay: number;
559
+ inline: boolean;
560
+ isLoading: boolean;
561
+ message: string | null;
562
+ size: TPktSize;
563
+ variant: TPktLoaderVariant;
564
+ private _shouldDisplayLoader;
565
+ connectedCallback(): void;
566
+ updated(changedProperties: Map<string, unknown>): void;
567
+ render(): TemplateResult<1>;
568
+ private getVariant;
569
+ private setupLoader;
570
+ }
571
+
524
572
  export declare class PktMessagebox extends PktElement implements IPktMessagebox {
525
573
  defaultSlot: Ref<HTMLElement>;
526
574
  constructor();
@@ -736,6 +784,8 @@ export declare type TPktButtonType = 'button' | 'submit' | 'reset';
736
784
 
737
785
  export declare type TPktButtonVariant = 'label-only' | 'icon-left' | 'icon-right' | 'icon-only' | 'icons-right-and-left';
738
786
 
787
+ export declare type TPktLoaderVariant = 'blue' | 'rainbow' | 'shapes';
788
+
739
789
  declare type TPktSize = 'small' | 'medium' | 'large';
740
790
 
741
791
  export declare type TProgressbarRole = 'progressbar' | 'meter';
@@ -0,0 +1,85 @@
1
+ import { P as u, x as d, E as y, n as o, a as c } from "./element-D_ZgQsSr.js";
2
+ import { e as h } from "./class-map-BYCG9U47.js";
3
+ import { r as m } from "./state-DuS4ffEQ.js";
4
+ import { e as f, n as v } from "./ref-BSGI8ogR.js";
5
+ import { P as _ } from "./pkt-slot-controller-Clbye6cM.js";
6
+ import "./icon-BBFK-d-X.js";
7
+ var g = Object.defineProperty, L = Object.getOwnPropertyDescriptor, s = (e, a, l, r) => {
8
+ for (var i = r > 1 ? void 0 : r ? L(a, l) : a, p = e.length - 1, n; p >= 0; p--)
9
+ (n = e[p]) && (i = (r ? n(a, l, i) : n(i)) || i);
10
+ return r && i && g(a, l, i), i;
11
+ };
12
+ let t = class extends u {
13
+ constructor() {
14
+ super(), this.defaultSlot = f(), this.delay = 0, this.inline = !1, this.isLoading = !0, this.message = null, this.size = "medium", this.variant = "shapes", this._shouldDisplayLoader = !1, this.slotController = new _(this, this.defaultSlot);
15
+ }
16
+ connectedCallback() {
17
+ super.connectedCallback(), this._shouldDisplayLoader = this.delay === 0, this.delay > 0 && this.setupLoader();
18
+ }
19
+ updated(e) {
20
+ e.has("delay") && this.setupLoader();
21
+ }
22
+ render() {
23
+ const e = h({
24
+ "pkt-loader": !0,
25
+ [`pkt-loader--${this.inline ? "inline" : "box"}`]: !0,
26
+ [`pkt-loader--${this.size}`]: !0
27
+ }), a = h({
28
+ "pkt-contents": !0,
29
+ "pkt-hide": this.isLoading
30
+ });
31
+ return d`<div role="status" aria-live="polite" .aria-busy=${this.isLoading} class=${e}>
32
+ ${this.isLoading && this._shouldDisplayLoader ? d`<div class="pkt-loader__spinner">
33
+ <pkt-icon
34
+ name=${this.getVariant(this.variant)}
35
+ path="https://punkt-cdn.oslo.kommune.no/latest/animations/"
36
+ class="pkt-loader__svg pkt-loader__${this.variant}"
37
+ ></pkt-icon>
38
+ ${this.message && d`<p>${this.message}</p>`}
39
+ </div>` : y}
40
+ <div class=${a} ${v(this.defaultSlot)}></div>
41
+ </div>`;
42
+ }
43
+ getVariant(e) {
44
+ switch (e) {
45
+ case "blue":
46
+ return "spinner-blue";
47
+ case "rainbow":
48
+ return "spinner";
49
+ default:
50
+ return "loader";
51
+ }
52
+ }
53
+ setupLoader() {
54
+ this.delay > 0 && (this._shouldDisplayLoader = !1, setTimeout(() => {
55
+ this._shouldDisplayLoader = !0, this.requestUpdate();
56
+ }, this.delay));
57
+ }
58
+ };
59
+ s([
60
+ o({ type: Number })
61
+ ], t.prototype, "delay", 2);
62
+ s([
63
+ o({ type: Boolean })
64
+ ], t.prototype, "inline", 2);
65
+ s([
66
+ o({ type: Boolean })
67
+ ], t.prototype, "isLoading", 2);
68
+ s([
69
+ o({ type: String })
70
+ ], t.prototype, "message", 2);
71
+ s([
72
+ o({ type: String })
73
+ ], t.prototype, "size", 2);
74
+ s([
75
+ o({ type: String })
76
+ ], t.prototype, "variant", 2);
77
+ s([
78
+ m()
79
+ ], t.prototype, "_shouldDisplayLoader", 2);
80
+ t = s([
81
+ c("pkt-loader")
82
+ ], t);
83
+ export {
84
+ t as P
85
+ };
@@ -0,0 +1,11 @@
1
+ "use strict";const e=require("./element-r-PeQ419.cjs"),d=require("./class-map-Dzci3Pfe.cjs"),u=require("./state-B77EXPZ9.cjs"),p=require("./ref-BUWgvhgU.cjs"),h=require("./pkt-slot-controller-Oc32unDk.cjs");require("./icon-DcJIqTIY.cjs");var c=Object.defineProperty,y=Object.getOwnPropertyDescriptor,s=(o,t,r,i)=>{for(var a=i>1?void 0:i?y(t,r):t,l=o.length-1,n;l>=0;l--)(n=o[l])&&(a=(i?n(t,r,a):n(a))||a);return i&&a&&c(t,r,a),a};exports.PktLoader=class extends e.PktElement{constructor(){super(),this.defaultSlot=p.e(),this.delay=0,this.inline=!1,this.isLoading=!0,this.message=null,this.size="medium",this.variant="shapes",this._shouldDisplayLoader=!1,this.slotController=new h.PktSlotController(this,this.defaultSlot)}connectedCallback(){super.connectedCallback(),this._shouldDisplayLoader=this.delay===0,this.delay>0&&this.setupLoader()}updated(t){t.has("delay")&&this.setupLoader()}render(){const t=d.e({"pkt-loader":!0,[`pkt-loader--${this.inline?"inline":"box"}`]:!0,[`pkt-loader--${this.size}`]:!0}),r=d.e({"pkt-contents":!0,"pkt-hide":this.isLoading});return e.x`<div role="status" aria-live="polite" .aria-busy=${this.isLoading} class=${t}>
2
+ ${this.isLoading&&this._shouldDisplayLoader?e.x`<div class="pkt-loader__spinner">
3
+ <pkt-icon
4
+ name=${this.getVariant(this.variant)}
5
+ path="https://punkt-cdn.oslo.kommune.no/latest/animations/"
6
+ class="pkt-loader__svg pkt-loader__${this.variant}"
7
+ ></pkt-icon>
8
+ ${this.message&&e.x`<p>${this.message}</p>`}
9
+ </div>`:e.E}
10
+ <div class=${r} ${p.n(this.defaultSlot)}></div>
11
+ </div>`}getVariant(t){switch(t){case"blue":return"spinner-blue";case"rainbow":return"spinner";default:return"loader"}}setupLoader(){this.delay>0&&(this._shouldDisplayLoader=!1,setTimeout(()=>{this._shouldDisplayLoader=!0,this.requestUpdate()},this.delay))}};s([e.n({type:Number})],exports.PktLoader.prototype,"delay",2);s([e.n({type:Boolean})],exports.PktLoader.prototype,"inline",2);s([e.n({type:Boolean})],exports.PktLoader.prototype,"isLoading",2);s([e.n({type:String})],exports.PktLoader.prototype,"message",2);s([e.n({type:String})],exports.PktLoader.prototype,"size",2);s([e.n({type:String})],exports.PktLoader.prototype,"variant",2);s([u.r()],exports.PktLoader.prototype,"_shouldDisplayLoader",2);exports.PktLoader=s([e.t("pkt-loader")],exports.PktLoader);
@@ -0,0 +1,15 @@
1
+ export { }
2
+
3
+
4
+ declare global {
5
+ interface HTMLElementTagNameMap {
6
+ 'pkt-icon': PktIcon;
7
+ }
8
+ }
9
+
10
+
11
+ declare global {
12
+ interface Window {
13
+ pktTz: string;
14
+ }
15
+ }
@@ -1,5 +1,5 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const p=require("./alert-CP5oN7df.cjs"),d=require("./button-DPb5WL9h.cjs"),c=require("./calendar-DUkAC9Hx.cjs"),k=require("./card-Bxe-jQD_.cjs"),P=require("./checkbox-CDMUepTW.cjs"),t=require("./element-r-PeQ419.cjs"),b=require("./pkt-slot-controller-Oc32unDk.cjs"),i=require("./ref-BUWgvhgU.cjs"),h=require("./class-map-Dzci3Pfe.cjs"),m=require("./datepicker-D6ifQ2so.cjs"),g=require("./helptext-C0mrdhRi.cjs"),f=require("./icon-DcJIqTIY.cjs"),y=require("./input-wrapper-Dqj4uers.cjs"),x=require("./link-C_bwx1Ml.cjs"),C=require("./linkcard-C6mZOE0R.cjs"),O=require("./messagebox-BSyLVNas.cjs"),j=require("./modal-CblCiNUi.cjs"),q=require("./progressbar-C_q48_qh.cjs"),v=require("./radiobutton-3e105CXX.cjs"),S=require("./tag-BMyii4Da.cjs"),$=require("./textarea-DxpzI67n.cjs"),_=require("./textinput-BRupcl9v.cjs"),T=require("./select-DJu4Wr1y.cjs");var L=Object.defineProperty,M=Object.getOwnPropertyDescriptor,o=(a,e,r,s)=>{for(var n=s>1?void 0:s?M(e,r):e,l=a.length-1,u;l>=0;l--)(u=a[l])&&(n=(s?u(e,r,n):u(n))||n);return s&&n&&L(e,r,n),n};exports.PktComponent=class extends t.PktElement{constructor(){super(),this.string="",this.strings=[],this.darkmode=!1,this._list=[],this.defaultSlot=i.e(),this.namedSlot=i.e(),this.slotController=new b.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
- <div class="${h.e(e)}">
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const p=require("./alert-CP5oN7df.cjs"),d=require("./button-DPb5WL9h.cjs"),c=require("./calendar-DUkAC9Hx.cjs"),P=require("./card-Bxe-jQD_.cjs"),k=require("./checkbox-CDMUepTW.cjs"),t=require("./element-r-PeQ419.cjs"),b=require("./pkt-slot-controller-Oc32unDk.cjs"),i=require("./ref-BUWgvhgU.cjs"),m=require("./class-map-Dzci3Pfe.cjs"),g=require("./datepicker-D6ifQ2so.cjs"),h=require("./helptext-C0mrdhRi.cjs"),f=require("./icon-DcJIqTIY.cjs"),y=require("./input-wrapper-Dqj4uers.cjs"),x=require("./link-C_bwx1Ml.cjs"),O=require("./linkcard-C6mZOE0R.cjs"),j=require("./loader-DQV1hMM3.cjs"),q=require("./messagebox-BSyLVNas.cjs"),C=require("./modal-CblCiNUi.cjs"),v=require("./progressbar-C_q48_qh.cjs"),S=require("./radiobutton-3e105CXX.cjs"),$=require("./tag-BMyii4Da.cjs"),_=require("./textarea-DxpzI67n.cjs"),L=require("./textinput-BRupcl9v.cjs"),T=require("./select-DJu4Wr1y.cjs");var M=Object.defineProperty,B=Object.getOwnPropertyDescriptor,o=(a,e,r,s)=>{for(var n=s>1?void 0:s?B(e,r):e,l=a.length-1,u;l>=0;l--)(u=a[l])&&(n=(s?u(e,r,n):u(n))||n);return s&&n&&M(e,r,n),n};exports.PktComponent=class extends t.PktElement{constructor(){super(),this.string="",this.strings=[],this.darkmode=!1,this._list=[],this.defaultSlot=i.e(),this.namedSlot=i.e(),this.slotController=new b.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
+ <div class="${m.e(e)}">
3
3
  <h1 class="pkt-txt-28">${this.string}</h1>
4
4
 
5
5
  <h2 class="pkt-txt-22">Innhold fra attributter og funksjoner</h2>
@@ -26,4 +26,4 @@
26
26
  <ul>
27
27
  ${e.map(r=>t.x`<li>${r}</li>`)}
28
28
  </ul>
29
- `}doStuff(e){return e.reverse()}handleGreeting(){this.dispatchEvent(new CustomEvent("pkt-greeting",{detail:"Hei på deg!"}))}};o([t.n({type:String})],exports.PktComponent.prototype,"string",2);o([t.n({converter:c.csvToArray})],exports.PktComponent.prototype,"strings",2);o([t.n({type:Boolean})],exports.PktComponent.prototype,"darkmode",2);o([t.n({type:Array})],exports.PktComponent.prototype,"_list",2);exports.PktComponent=o([t.t("pkt-component")],exports.PktComponent);Object.defineProperty(exports,"PktAlert",{enumerable:!0,get:()=>p.PktAlert});Object.defineProperty(exports,"PktButton",{enumerable:!0,get:()=>d.PktButton});Object.defineProperty(exports,"PktCalendar",{enumerable:!0,get:()=>c.PktCalendar});Object.defineProperty(exports,"PktCard",{enumerable:!0,get:()=>k.PktCard});Object.defineProperty(exports,"PktCheckbox",{enumerable:!0,get:()=>P.PktCheckbox});Object.defineProperty(exports,"PktDatepicker",{enumerable:!0,get:()=>m.PktDatepicker});Object.defineProperty(exports,"PktHelptext",{enumerable:!0,get:()=>g.PktHelptext});Object.defineProperty(exports,"PktIcon",{enumerable:!0,get:()=>f.PktIcon});Object.defineProperty(exports,"PktInputWrapper",{enumerable:!0,get:()=>y.PktInputWrapper});Object.defineProperty(exports,"PktLink",{enumerable:!0,get:()=>x.PktLink});Object.defineProperty(exports,"PktLinkCard",{enumerable:!0,get:()=>C.PktLinkCard});Object.defineProperty(exports,"PktMessagebox",{enumerable:!0,get:()=>O.PktMessagebox});Object.defineProperty(exports,"PktModal",{enumerable:!0,get:()=>j.PktModal});Object.defineProperty(exports,"PktProgressbar",{enumerable:!0,get:()=>q.PktProgressbar});Object.defineProperty(exports,"PktRadioButton",{enumerable:!0,get:()=>v.PktRadioButton});Object.defineProperty(exports,"PktTag",{enumerable:!0,get:()=>S.PktTag});Object.defineProperty(exports,"PktTextarea",{enumerable:!0,get:()=>$.PktTextarea});Object.defineProperty(exports,"PktTextinput",{enumerable:!0,get:()=>_.PktTextinput});Object.defineProperty(exports,"PktSelect",{enumerable:!0,get:()=>T.PktSelect});
29
+ `}doStuff(e){return e.reverse()}handleGreeting(){this.dispatchEvent(new CustomEvent("pkt-greeting",{detail:"Hei på deg!"}))}};o([t.n({type:String})],exports.PktComponent.prototype,"string",2);o([t.n({converter:c.csvToArray})],exports.PktComponent.prototype,"strings",2);o([t.n({type:Boolean})],exports.PktComponent.prototype,"darkmode",2);o([t.n({type:Array})],exports.PktComponent.prototype,"_list",2);exports.PktComponent=o([t.t("pkt-component")],exports.PktComponent);Object.defineProperty(exports,"PktAlert",{enumerable:!0,get:()=>p.PktAlert});Object.defineProperty(exports,"PktButton",{enumerable:!0,get:()=>d.PktButton});Object.defineProperty(exports,"PktCalendar",{enumerable:!0,get:()=>c.PktCalendar});Object.defineProperty(exports,"PktCard",{enumerable:!0,get:()=>P.PktCard});Object.defineProperty(exports,"PktCheckbox",{enumerable:!0,get:()=>k.PktCheckbox});Object.defineProperty(exports,"PktDatepicker",{enumerable:!0,get:()=>g.PktDatepicker});Object.defineProperty(exports,"PktHelptext",{enumerable:!0,get:()=>h.PktHelptext});Object.defineProperty(exports,"PktIcon",{enumerable:!0,get:()=>f.PktIcon});Object.defineProperty(exports,"PktInputWrapper",{enumerable:!0,get:()=>y.PktInputWrapper});Object.defineProperty(exports,"PktLink",{enumerable:!0,get:()=>x.PktLink});Object.defineProperty(exports,"PktLinkCard",{enumerable:!0,get:()=>O.PktLinkCard});Object.defineProperty(exports,"PktLoader",{enumerable:!0,get:()=>j.PktLoader});Object.defineProperty(exports,"PktMessagebox",{enumerable:!0,get:()=>q.PktMessagebox});Object.defineProperty(exports,"PktModal",{enumerable:!0,get:()=>C.PktModal});Object.defineProperty(exports,"PktProgressbar",{enumerable:!0,get:()=>v.PktProgressbar});Object.defineProperty(exports,"PktRadioButton",{enumerable:!0,get:()=>S.PktRadioButton});Object.defineProperty(exports,"PktTag",{enumerable:!0,get:()=>$.PktTag});Object.defineProperty(exports,"PktTextarea",{enumerable:!0,get:()=>_.PktTextarea});Object.defineProperty(exports,"PktTextinput",{enumerable:!0,get:()=>L.PktTextinput});Object.defineProperty(exports,"PktSelect",{enumerable:!0,get:()=>T.PktSelect});
package/dist/pkt-index.js CHANGED
@@ -6,7 +6,7 @@ import { P as B } from "./card-Db2Ex1cH.js";
6
6
  import { P as I } from "./checkbox-Dw2CX5zY.js";
7
7
  import { P as f, x as m, t as k, n, a as c } from "./element-D_ZgQsSr.js";
8
8
  import { P as x } from "./pkt-slot-controller-Clbye6cM.js";
9
- import { e as h, n as P } from "./ref-BSGI8ogR.js";
9
+ import { e as P, n as h } from "./ref-BSGI8ogR.js";
10
10
  import { e as u } from "./class-map-BYCG9U47.js";
11
11
  import { P as G } from "./datepicker-gZ_eVIyS.js";
12
12
  import { P as M } from "./helptext-RPq_TKzJ.js";
@@ -14,14 +14,15 @@ import { P as N } from "./icon-BBFK-d-X.js";
14
14
  import { P as W } from "./input-wrapper-D-pEAZaj.js";
15
15
  import { P as z } from "./link-CDkU7zsB.js";
16
16
  import { P as J } from "./linkcard-Dr5iKZrV.js";
17
- import { P as V } from "./messagebox-Di7LUz4C.js";
18
- import { P as Y } from "./modal-DZUQb_yG.js";
19
- import { P as tt } from "./progressbar-CuZj4FWi.js";
20
- import { P as rt } from "./radiobutton-CcZ2-z8q.js";
21
- import { P as ot } from "./tag-DVk69673.js";
22
- import { P as nt } from "./textarea-C8-lnWwu.js";
23
- import { P as pt } from "./textinput-DRkv93vp.js";
24
- import { P as mt } from "./select-CnizDIYN.js";
17
+ import { P as V } from "./loader-ChVEsONa.js";
18
+ import { P as Y } from "./messagebox-Di7LUz4C.js";
19
+ import { P as tt } from "./modal-DZUQb_yG.js";
20
+ import { P as rt } from "./progressbar-CuZj4FWi.js";
21
+ import { P as ot } from "./radiobutton-CcZ2-z8q.js";
22
+ import { P as nt } from "./tag-DVk69673.js";
23
+ import { P as pt } from "./textarea-C8-lnWwu.js";
24
+ import { P as mt } from "./textinput-DRkv93vp.js";
25
+ import { P as ht } from "./select-CnizDIYN.js";
25
26
  var g = Object.defineProperty, v = Object.getOwnPropertyDescriptor, o = (t, e, i, a) => {
26
27
  for (var r = a > 1 ? void 0 : a ? v(e, i) : e, p = t.length - 1, l; p >= 0; p--)
27
28
  (l = t[p]) && (r = (a ? l(e, i, r) : l(r)) || r);
@@ -29,7 +30,7 @@ var g = Object.defineProperty, v = Object.getOwnPropertyDescriptor, o = (t, e, i
29
30
  };
30
31
  let s = class extends f {
31
32
  constructor() {
32
- super(), this.string = "", this.strings = [], this.darkmode = !1, this._list = [], this.defaultSlot = h(), this.namedSlot = h(), this.slotController = new x(this, this.defaultSlot, this.namedSlot);
33
+ super(), this.string = "", this.strings = [], this.darkmode = !1, this._list = [], this.defaultSlot = P(), this.namedSlot = P(), this.slotController = new x(this, this.defaultSlot, this.namedSlot);
33
34
  }
34
35
  /**
35
36
  * Runs on mount, used to set up various values and whatever you need to run
@@ -57,11 +58,11 @@ let s = class extends f {
57
58
  <div>${this.renderList(this.doStuff(this._list))}</div>
58
59
 
59
60
  <h2 class="pkt-txt-22">Slot</h2>
60
- <div ${P(this.defaultSlot)}>defaultSlotRef</div>
61
+ <div ${h(this.defaultSlot)}>defaultSlotRef</div>
61
62
  <h2 class="pkt-txt-22">Named slot</h2>
62
63
  <select
63
64
  name="named-slot"
64
- ${P(this.namedSlot)}
65
+ ${h(this.namedSlot)}
65
66
  @change=${(e) => alert(e.target.value)}
66
67
  >
67
68
  namedSlotRef
@@ -126,12 +127,13 @@ export {
126
127
  W as PktInputWrapper,
127
128
  z as PktLink,
128
129
  J as PktLinkCard,
129
- V as PktMessagebox,
130
- Y as PktModal,
131
- tt as PktProgressbar,
132
- rt as PktRadioButton,
133
- mt as PktSelect,
134
- ot as PktTag,
135
- nt as PktTextarea,
136
- pt as PktTextinput
130
+ V as PktLoader,
131
+ Y as PktMessagebox,
132
+ tt as PktModal,
133
+ rt as PktProgressbar,
134
+ ot as PktRadioButton,
135
+ ht as PktSelect,
136
+ nt as PktTag,
137
+ pt as PktTextarea,
138
+ mt as PktTextinput
137
139
  };
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./loader-DQV1hMM3.cjs"),t=e.PktLoader;Object.defineProperty(exports,"PktLoader",{enumerable:!0,get:()=>e.PktLoader});exports.default=t;
@@ -0,0 +1,6 @@
1
+ import { P as a } from "./loader-ChVEsONa.js";
2
+ const t = a;
3
+ export {
4
+ a as PktLoader,
5
+ t as default
6
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oslokommune/punkt-elements",
3
- "version": "12.29.2",
3
+ "version": "12.29.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",
@@ -57,5 +57,5 @@
57
57
  "url": "https://github.com/oslokommune/punkt/issues"
58
58
  },
59
59
  "license": "MIT",
60
- "gitHead": "bba55044dd965cd3cab5a32614be5a600b02b2ed"
60
+ "gitHead": "59a0d70f10e765285167342a739bbe6b126a9882"
61
61
  }
@@ -11,6 +11,7 @@ export { PktIcon } from '@/components/icon'
11
11
  export { PktInputWrapper } from '@/components/input-wrapper'
12
12
  export { PktLink } from '@/components/link'
13
13
  export { PktLinkCard } from '@/components/linkcard'
14
+ export { PktLoader } from '@/components/loader'
14
15
  export { PktMessagebox } from '@/components/messagebox'
15
16
  export { PktModal } from '@/components/modal'
16
17
  export { PktProgressbar } from '@/components/progressbar'
@@ -20,7 +21,8 @@ export { PktTextarea } from '@/components/textarea'
20
21
  export { PktTextinput } from '@/components/textinput'
21
22
  export { PktSelect } from '@/components/select'
22
23
 
23
- // Export types
24
+ // Export component types
25
+
24
26
 
25
27
  export type {
26
28
  IPktButton,
@@ -33,6 +35,7 @@ export type {
33
35
  TPktButtonType,
34
36
  } from '@/components/button'
35
37
 
38
+
36
39
  export type {
37
40
  IPktProgressbar,
38
41
  TProgressbarRole,
@@ -45,3 +48,5 @@ export type {
45
48
  export type { TTagSkin, TTagType } from '@/components/tag'
46
49
 
47
50
  export type { TSelectOption } from '@/components/select'
51
+
52
+ export type { IPktLoader, TPktLoaderVariant } from '@/components/loader'
@@ -0,0 +1,5 @@
1
+ import { PktLoader } from './loader'
2
+ export { PktLoader } from './loader'
3
+ export default PktLoader
4
+
5
+ export type { IPktLoader, TPktLoaderVariant } from './loader'
@@ -0,0 +1,125 @@
1
+ import { PktElement } from '@/base-elements/element'
2
+ import { classMap } from 'lit/directives/class-map.js'
3
+ import { customElement, property, state } from 'lit/decorators.js'
4
+ import { createRef, ref, Ref } from 'lit/directives/ref.js'
5
+ import { html, nothing } from 'lit'
6
+ import { PktSlotController } from '@/controllers/pkt-slot-controller'
7
+ import { TPktSize } from '@/types/size'
8
+ import '@/components/icon'
9
+
10
+ export type TPktLoaderVariant = 'blue' | 'rainbow' | 'shapes'
11
+
12
+ export interface IPktLoader {
13
+ /**
14
+ * The `delay` prop controls how much time the loading should be given before the loader is displayed.
15
+ * This is handy for situations where the load time might be so short that loader is not necessary.
16
+ * Delay time is in milliseconds.
17
+ */
18
+ delay?: number
19
+ /**
20
+ * The `inline` prop decides whether the loader should be displayed inline or not.
21
+ */
22
+ inline?: boolean
23
+ /**
24
+ * The boolean 'isLoading' decides whether the loader or the children will be displayed.
25
+ * If set to false, the children will be displayed.
26
+ */
27
+ isLoading?: boolean
28
+ /**
29
+ * The message to display when the loader is loading.
30
+ */
31
+ message?: string | null
32
+ /**
33
+ * The size of the loader. Default is "medium".
34
+ */
35
+ size?: TPktSize
36
+ /**
37
+ * The variant of the loader. Default is "shapes" which is the OSLO wave loader.
38
+ * Other variants are "blue" and "rainbow" which are spinner variants.
39
+ */
40
+ variant?: TPktLoaderVariant
41
+ }
42
+
43
+ @customElement('pkt-loader')
44
+ export class PktLoader extends PktElement implements IPktLoader {
45
+ defaultSlot: Ref<HTMLElement> = createRef()
46
+
47
+ constructor() {
48
+ super()
49
+ this.slotController = new PktSlotController(this, this.defaultSlot)
50
+ }
51
+
52
+ @property({ type: Number }) delay: number = 0
53
+ @property({ type: Boolean }) inline: boolean = false
54
+ @property({ type: Boolean }) isLoading: boolean = true
55
+ @property({ type: String }) message: string | null = null
56
+ @property({ type: String }) size: TPktSize = 'medium'
57
+ @property({ type: String }) variant: TPktLoaderVariant = 'shapes'
58
+
59
+ @state() private _shouldDisplayLoader: boolean = false
60
+
61
+ connectedCallback() {
62
+ super.connectedCallback()
63
+ this._shouldDisplayLoader = this.delay === 0
64
+
65
+ if (this.delay > 0) {
66
+ this.setupLoader()
67
+ }
68
+ }
69
+
70
+ updated(changedProperties: Map<string, unknown>) {
71
+ if (changedProperties.has('delay')) {
72
+ this.setupLoader()
73
+ }
74
+ }
75
+
76
+ render() {
77
+ const classes = classMap({
78
+ 'pkt-loader': true,
79
+ [`pkt-loader--${this.inline ? 'inline' : 'box'}`]: true,
80
+ [`pkt-loader--${this.size}`]: true,
81
+ })
82
+
83
+ const slotClasses = classMap({
84
+ 'pkt-contents': true,
85
+ 'pkt-hide': this.isLoading,
86
+ })
87
+
88
+ return html`<div role="status" aria-live="polite" .aria-busy=${this.isLoading} class=${classes}>
89
+ ${this.isLoading && this._shouldDisplayLoader
90
+ ? html`<div class="pkt-loader__spinner">
91
+ <pkt-icon
92
+ name=${this.getVariant(this.variant)}
93
+ path="https://punkt-cdn.oslo.kommune.no/latest/animations/"
94
+ class="pkt-loader__svg pkt-loader__${this.variant}"
95
+ ></pkt-icon>
96
+ ${this.message && html`<p>${this.message}</p>`}
97
+ </div>`
98
+ : nothing}
99
+ <div class=${slotClasses} ${ref(this.defaultSlot)}></div>
100
+ </div>`
101
+ }
102
+
103
+ private getVariant(variant: TPktLoaderVariant): string {
104
+ switch (variant) {
105
+ case 'blue':
106
+ return 'spinner-blue'
107
+ case 'rainbow':
108
+ return 'spinner'
109
+ default:
110
+ return 'loader'
111
+ }
112
+ }
113
+
114
+ private setupLoader() {
115
+ if (this.delay > 0) {
116
+ this._shouldDisplayLoader = false
117
+ setTimeout(() => {
118
+ this._shouldDisplayLoader = true
119
+ this.requestUpdate()
120
+ }, this.delay)
121
+ }
122
+ }
123
+ }
124
+
125
+ export default PktLoader