@oslokommune/punkt-elements 18.5.2 → 18.6.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
+ ## [18.6.0](https://github.com/oslokommune/punkt/compare/18.5.2...18.6.0) (2026-09-09)
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
  ## [18.5.2](https://github.com/oslokommune/punkt/compare/18.5.1...18.5.2) (2026-09-09)
9
26
 
10
27
  ### ⚠ BREAKING CHANGES
@@ -1,4 +1,4 @@
1
- const e=require("./element-DRc10X2R.cjs"),t=require("./class-map-BEib48YL.cjs");require("./icon-DBFTFd-J.cjs");const n=require("./converters-BJ9Fe0kW.cjs");function r(e,t,r){let i=n.y(e,r?.in);return isNaN(t)?n.b(r?.in||e,NaN):(t&&i.setDate(i.getDate()+t),i)}function i(e,t){let[r,i]=n.v(e,t.start,t.end);return{start:r,end:i}}function a(e,t){let{start:r,end:a}=i(t?.in,e),o=+r>+a,s=o?+r:+a,c=o?a:r;c.setHours(0,0,0,0);let l=t?.step??1;if(!l)return[];l<0&&(l=-l,o=!o);let u=[];for(;+c<=s;)u.push(n.b(r,c)),c.setDate(c.getDate()+l),c.setHours(0,0,0,0);return o?u.reverse():u}function o(e,t){let r=n.y(e,t?.in).getDay();return r===0?7:r}var s={name:`pkt-calendar`,react:`PktCalendar`,"css-class":`pkt-calendar`,isElement:!0,isPureReact:!0,props:{id:{type:`string`,name:`ID`,description:`Unik identifikasjon for kalenderen`},currentmonth:{type:`date`,name:`Gjeldende måned`,converter:`stringToDate`,description:`Måneden som vises i kalenderen`},selected:{type:`array`,name:`Valgte datoer`,converter:`csvToArray`,reflect:!0,items:{type:`date`},description:`Liste over valgte datoer`},excludeweekdays:{type:`array`,name:`Utelat ukedager`,converter:`csvToArray`,items:{type:`string`},description:`Liste over ukedager (1-7) som skal ekskluderes`},excludedates:{type:`array`,name:`Utelat datoer`,converter:`stringsToDate`,items:{type:`date`},description:`Liste over spesifikke datoer som skal ekskluderes`},earliest:{type:`date`,name:`Tidligst tillatte dato`,converter:`stringToDate`,default:null,description:`Tidligste dato som kan velges`},latest:{type:`date`,name:`Senest tillatte dato`,converter:`stringToDate`,default:null,description:`Seneste dato som kan velges`},weeknumbers:{type:`boolean`,name:`Vis ukenummer`,reflect:!0,default:!1,description:`Vis ukenummer i kalenderen`},withcontrols:{type:`boolean`,name:`Med velgere for måned/år`,reflect:!0,default:!1,description:`Vis navigasjonskontroller for måned og år`},multiple:{type:`boolean`,name:`Flervalg`,reflect:!0,default:!1,description:`Tillat valg av flere datoer`},maxMultiple:{attribute:`max-multiple`,type:`number`,name:`Maks antall i flervalg`,default:4,description:`Maksimalt antall datoer som kan velges`},today:{type:`string`,name:`Dagens dato (overstyring)`,description:`ISO-datostreng som overstyrer dagens dato. Nyttig for snapshot-tester.`},range:{type:`boolean`,name:`Datotidsrom (fra og til)`,reflect:!0,default:!1,description:`Tillat valg av datotidsrom`},dayStrings:{attribute:`day-strings`,type:`array`,name:`Korte dagsnavn`,items:{type:`string`},description:`Korte dagsnavn for kalenderoverskriften`},dayStringsLong:{attribute:`day-strings-long`,type:`array`,name:`Fulle dagsnavn`,items:{type:`string`},description:`Fulle dagsnavn for tilgjengelighetsetiketter`},monthStrings:{attribute:`month-strings`,type:`array`,name:`Månedsnavn`,items:{type:`string`},description:`Månedsnavn for kalendernavigasjonen`},weekString:{attribute:`week-string`,type:`string`,name:`Ukenummer-etikett`,description:`Etikett for ukenummerkolonnen`},prevMonthString:{attribute:`prev-month-string`,type:`string`,name:`Forrige måned-etikett`,description:`Tilgjengelighetsetikett for forrige måned-knappen`},nextMonthString:{attribute:`next-month-string`,type:`string`,name:`Neste måned-etikett`,description:`Tilgjengelighetsetikett for neste måned-knappen`}},events:{"date-selected":{description:`Returnerer en liste med valgte datoer i ISO-format`},close:{description:`Utløses når kalenderen ber om å lukkes (Escape-tast eller fokus forlater)`}}};function c(e,t){let r=(t.excludedates??[]).map(e=>typeof e==`string`?e:n.a(e));return!n.l(e,t.earliest,t.latest,r,t.excludeweekdays??[])}function l(e,t,n,r){return!!(c(e,n)||!t&&r.multiple&&r.maxMultiple>0&&r.selectedCount>=r.maxMultiple)}function u(e,t,r){let i=n.p(e,t,0);return!(r&&n.d(r)>i)}function d(e,t,r){let i=n.p(t===11?e+1:e,t===11?0:t+1,1);return!(r&&n.d(r)<i)}function f(e,t){let r=n.p(e,t,1),i=n.p(e,t+1,0),a=(r.getDay()+6)%7,o=i.getDate();return{firstDayOfMonth:r,lastDayOfMonth:i,startingDay:a,numDays:o,numRows:Math.ceil((o+a)/7),numDaysPrevMonth:n.p(e,t,0).getDate(),initialWeek:n._(r)}}function p(e,t,n,r){let{startingDay:i,numDays:a}=r;return e===0&&t<i?`prev-month`:n>a?`next-month`:`current-month`}function m(e,t,n,r){let{startingDay:i,numDaysPrevMonth:a,numDays:o}=r;return e===`prev-month`?a-(i-t-1):e===`next-month`?n-o:n}function h(e){return typeof e==`string`&&(e=e.split(`,`)),e.length===1&&e[0]===``?[]:e.map(e=>n.m(e))}function g(e,t){let r=a({start:e,end:t}),i={};if(Array.isArray(r)&&r.length)for(let a=0;a<r.length;a++){let o=r[a],s=o>e&&o<t;i[n.a(o)]=s}return i}function _(e,t,n,r){if(t.length!==1)return!0;let i=a({start:t[0],end:e});if(!Array.isArray(i)||!i.length)return!0;for(let a=0;a<i.length;a++){for(let r of n??[])if(r>t[0]&&r<e)return!1;if((r??[]).includes(o(i[a]).toString()))return!1}return!0}function v(e,t){let r=n.a(e);return t.includes(r)?t:[...t,r]}function y(e,t){let r=n.a(e),i=t.indexOf(r);if(i===-1)return t;if(t.length===1)return[];let a=[...t];return a.splice(i,1),a}function b(e,t,r){let i=n.a(e);return t.includes(i)?y(e,t):r>0&&t.length>=r?t:v(e,t)}function x(e,t,r){let i=n.a(e),a=h(t);return t.includes(i)?t.indexOf(i)===0?[]:y(e,t):t.length>1||t.length===1&&(!_(e,a,r.excludedates,r.excludeweekdays)||a[0]>e)?[i]:v(e,t)}var S={ArrowLeft:-1,ArrowRight:1,ArrowUp:-7,ArrowDown:7};function C(e){let t=e.nodeName;return t===`INPUT`||t===`SELECT`||t===`BUTTON`&&!e.dataset?.date}function w(e,t,i){let a=r(e,t);if(!a)return null;let o=i(`button[data-date="${n.a(a)}"]`);for(;o instanceof HTMLButtonElement&&o.dataset.disabled;)if(a=r(a,t),o=i(`button[data-date="${n.a(a)}"]`),!o)return null;return a}function T(e){return S[e]??null}var E=class extends e.t{constructor(...e){super(...e),this.selected=[],this.multiple=s.props.multiple.default,this.maxMultiple=s.props.maxMultiple.default,this.range=s.props.range.default,this.earliest=s.props.earliest.default,this.latest=s.props.latest.default,this.excludedates=[],this.excludeweekdays=[],this.weeknumbers=s.props.weeknumbers.default,this.withcontrols=s.props.withcontrols.default,this.currentmonth=null,this.today=null,this._selected=[],this.inRange={},this.rangeHovered=null,this.year=0,this.month=0,this.week=0,this.currentmonthtouched=!1,this.focusedDate=null,this.selectableDates=[],this.tabIndexSet=0}get calendarStrings(){let e=this.pktStrings.get(`dates`),t=this.pktStrings.get(`calendar`);return{daysShort:this.dayStrings??e.daysShort,days:this.dayStringsLong??e.days,months:this.monthStrings??e.months,week:this.weekString??e.week,prevMonth:this.prevMonthString??t.prevMonth,nextMonth:this.nextMonthString??t.nextMonth}}get todayDate(){return this.today?n.m(this.today):n.g()}firstUpdated(e){this.addEventListener(`keydown`,this.handleKeydown)}disconnectedCallback(){this.removeEventListener(`keydown`,this.handleKeydown),super.disconnectedCallback()}updated(e){super.updated(e),e.has(`selected`)&&this.convertSelected()}convertSelected(){typeof this.selected==`string`&&(this.selected=this.selected.split(`,`)),this.selected.length===1&&this.selected[0]===``&&(this.selected=[]),this._selected=h(this.selected),this.range&&this.selected.length===2&&(this.inRange=g(this._selected[0],this._selected[1])),this.setCurrentMonth()}setCurrentMonth(){if(this.currentmonth===null&&!this.currentmonthtouched&&(this.currentmonthtouched=!0),this.selected.length&&this.selected[0]!==``){let e=n.m(this.selected[this.selected.length-1]);this.currentmonth=isNaN(e.getTime())?n.f(this.todayDate):e}else this.currentmonth===null&&(this.currentmonth=n.f(this.todayDate));(!this.currentmonth||isNaN(this.currentmonth.getTime()))&&(this.currentmonth=n.f(this.todayDate)),this.year=this.currentmonth.getFullYear(),this.month=this.currentmonth.getMonth()}handleKeydown(e){let t=T(e.key);t!==null&&this.handleArrowKey(e,t)}handleArrowKey(e,t){let r=e.target;if(C(r))return;if(e.preventDefault(),!this.focusedDate){this.focusOnCurrentDate();return}let i=w(this.focusedDate?n.d(this.focusedDate):n.p(this.year,this.month,1),t,this.querySelector.bind(this));if(i){let e=this.querySelector(`button[data-date="${n.a(i)}"]`);e instanceof HTMLButtonElement&&!e.dataset.disabled&&(this.focusedDate=n.a(i),e.focus())}}render(){return e._`
1
+ const e=require("./element-DRc10X2R.cjs"),t=require("./class-map-BEib48YL.cjs");require("./icon-DBFTFd-J.cjs");const n=require("./converters-BJ9Fe0kW.cjs");function r(e,t,r){let i=n.y(e,r?.in);return isNaN(t)?n.b(r?.in||e,NaN):(t&&i.setDate(i.getDate()+t),i)}function i(e,t){let[r,i]=n.v(e,t.start,t.end);return{start:r,end:i}}function a(e,t){let{start:r,end:a}=i(t?.in,e),o=+r>+a,s=o?+r:+a,c=o?a:r;c.setHours(0,0,0,0);let l=t?.step??1;if(!l)return[];l<0&&(l=-l,o=!o);let u=[];for(;+c<=s;)u.push(n.b(r,c)),c.setDate(c.getDate()+l),c.setHours(0,0,0,0);return o?u.reverse():u}function o(e,t){let r=n.y(e,t?.in).getDay();return r===0?7:r}var s={multiple:!1,maxMultiple:0,range:!1,earliest:null,latest:null,weeknumbers:!1,withcontrols:!1};function c(e,t){let r=(t.excludedates??[]).map(e=>typeof e==`string`?e:n.a(e));return!n.l(e,t.earliest,t.latest,r,t.excludeweekdays??[])}function l(e,t,n,r){return!!(c(e,n)||!t&&r.multiple&&r.maxMultiple>0&&r.selectedCount>=r.maxMultiple)}function u(e,t,r){let i=n.p(e,t,0);return!(r&&n.d(r)>i)}function d(e,t,r){let i=n.p(t===11?e+1:e,t===11?0:t+1,1);return!(r&&n.d(r)<i)}function f(e,t){let r=n.p(e,t,1),i=n.p(e,t+1,0),a=(r.getDay()+6)%7,o=i.getDate();return{firstDayOfMonth:r,lastDayOfMonth:i,startingDay:a,numDays:o,numRows:Math.ceil((o+a)/7),numDaysPrevMonth:n.p(e,t,0).getDate(),initialWeek:n._(r)}}function p(e,t,n,r){let{startingDay:i,numDays:a}=r;return e===0&&t<i?`prev-month`:n>a?`next-month`:`current-month`}function m(e,t,n,r){let{startingDay:i,numDaysPrevMonth:a,numDays:o}=r;return e===`prev-month`?a-(i-t-1):e===`next-month`?n-o:n}function h(e){return typeof e==`string`&&(e=e.split(`,`)),e.length===1&&e[0]===``?[]:e.map(e=>n.m(e))}function g(e,t){let r=a({start:e,end:t}),i={};if(Array.isArray(r)&&r.length)for(let a=0;a<r.length;a++){let o=r[a],s=o>e&&o<t;i[n.a(o)]=s}return i}function _(e,t,n,r){if(t.length!==1)return!0;let i=a({start:t[0],end:e});if(!Array.isArray(i)||!i.length)return!0;for(let a=0;a<i.length;a++){for(let r of n??[])if(r>t[0]&&r<e)return!1;if((r??[]).includes(o(i[a]).toString()))return!1}return!0}function v(e,t){let r=n.a(e);return t.includes(r)?t:[...t,r]}function y(e,t){let r=n.a(e),i=t.indexOf(r);if(i===-1)return t;if(t.length===1)return[];let a=[...t];return a.splice(i,1),a}function b(e,t,r){let i=n.a(e);return t.includes(i)?y(e,t):r>0&&t.length>=r?t:v(e,t)}function x(e,t,r){let i=n.a(e),a=h(t);return t.includes(i)?t.indexOf(i)===0?[]:y(e,t):t.length>1||t.length===1&&(!_(e,a,r.excludedates,r.excludeweekdays)||a[0]>e)?[i]:v(e,t)}var S={ArrowLeft:-1,ArrowRight:1,ArrowUp:-7,ArrowDown:7};function C(e){let t=e.nodeName;return t===`INPUT`||t===`SELECT`||t===`BUTTON`&&!e.dataset?.date}function w(e,t,i){let a=r(e,t);if(!a)return null;let o=i(`button[data-date="${n.a(a)}"]`);for(;o instanceof HTMLButtonElement&&o.dataset.disabled;)if(a=r(a,t),o=i(`button[data-date="${n.a(a)}"]`),!o)return null;return a}function T(e){return S[e]??null}var E=class extends e.t{constructor(...e){super(...e),this.selected=[],this.multiple=s.multiple,this.maxMultiple=s.maxMultiple,this.range=s.range,this.earliest=s.earliest,this.latest=s.latest,this.excludedates=[],this.excludeweekdays=[],this.weeknumbers=s.weeknumbers,this.withcontrols=s.withcontrols,this.currentmonth=null,this.today=null,this._selected=[],this.inRange={},this.rangeHovered=null,this.year=0,this.month=0,this.week=0,this.currentmonthtouched=!1,this.focusedDate=null,this.selectableDates=[],this.tabIndexSet=0}get calendarStrings(){let e=this.pktStrings.get(`dates`),t=this.pktStrings.get(`calendar`);return{daysShort:this.dayStrings??e.daysShort,days:this.dayStringsLong??e.days,months:this.monthStrings??e.months,week:this.weekString??e.week,prevMonth:this.prevMonthString??t.prevMonth,nextMonth:this.nextMonthString??t.nextMonth}}get todayDate(){return this.today?n.m(this.today):n.g()}firstUpdated(e){this.addEventListener(`keydown`,this.handleKeydown)}disconnectedCallback(){this.removeEventListener(`keydown`,this.handleKeydown),super.disconnectedCallback()}updated(e){super.updated(e),e.has(`selected`)&&this.convertSelected()}convertSelected(){typeof this.selected==`string`&&(this.selected=this.selected.split(`,`)),this.selected.length===1&&this.selected[0]===``&&(this.selected=[]),this._selected=h(this.selected),this.range&&this.selected.length===2&&(this.inRange=g(this._selected[0],this._selected[1])),this.setCurrentMonth()}setCurrentMonth(){if(this.currentmonth===null&&!this.currentmonthtouched&&(this.currentmonthtouched=!0),this.selected.length&&this.selected[0]!==``){let e=n.m(this.selected[this.selected.length-1]);this.currentmonth=isNaN(e.getTime())?n.f(this.todayDate):e}else this.currentmonth===null&&(this.currentmonth=n.f(this.todayDate));(!this.currentmonth||isNaN(this.currentmonth.getTime()))&&(this.currentmonth=n.f(this.todayDate)),this.year=this.currentmonth.getFullYear(),this.month=this.currentmonth.getMonth()}handleKeydown(e){let t=T(e.key);t!==null&&this.handleArrowKey(e,t)}handleArrowKey(e,t){let r=e.target;if(C(r))return;if(e.preventDefault(),!this.focusedDate){this.focusOnCurrentDate();return}let i=w(this.focusedDate?n.d(this.focusedDate):n.p(this.year,this.month,1),t,this.querySelector.bind(this));if(i){let e=this.querySelector(`button[data-date="${n.a(i)}"]`);e instanceof HTMLButtonElement&&!e.dataset.disabled&&(this.focusedDate=n.a(i),e.focus())}}render(){return e._`
2
2
  <div
3
3
  class="pkt-calendar ${this.weeknumbers?`pkt-cal-weeknumbers`:``}"
4
4
  @focusout=${this.closeEvent}
@@ -34,144 +34,16 @@ function w(e, t) {
34
34
  let n = b(e, t?.in).getDay();
35
35
  return n === 0 ? 7 : n;
36
36
  }
37
+ //#endregion
38
+ //#region ../../shared-types/calendar.ts
37
39
  var T = {
38
- name: "pkt-calendar",
39
- react: "PktCalendar",
40
- "css-class": "pkt-calendar",
41
- isElement: !0,
42
- isPureReact: !0,
43
- props: {
44
- id: {
45
- type: "string",
46
- name: "ID",
47
- description: "Unik identifikasjon for kalenderen"
48
- },
49
- currentmonth: {
50
- type: "date",
51
- name: "Gjeldende måned",
52
- converter: "stringToDate",
53
- description: "Måneden som vises i kalenderen"
54
- },
55
- selected: {
56
- type: "array",
57
- name: "Valgte datoer",
58
- converter: "csvToArray",
59
- reflect: !0,
60
- items: { type: "date" },
61
- description: "Liste over valgte datoer"
62
- },
63
- excludeweekdays: {
64
- type: "array",
65
- name: "Utelat ukedager",
66
- converter: "csvToArray",
67
- items: { type: "string" },
68
- description: "Liste over ukedager (1-7) som skal ekskluderes"
69
- },
70
- excludedates: {
71
- type: "array",
72
- name: "Utelat datoer",
73
- converter: "stringsToDate",
74
- items: { type: "date" },
75
- description: "Liste over spesifikke datoer som skal ekskluderes"
76
- },
77
- earliest: {
78
- type: "date",
79
- name: "Tidligst tillatte dato",
80
- converter: "stringToDate",
81
- default: null,
82
- description: "Tidligste dato som kan velges"
83
- },
84
- latest: {
85
- type: "date",
86
- name: "Senest tillatte dato",
87
- converter: "stringToDate",
88
- default: null,
89
- description: "Seneste dato som kan velges"
90
- },
91
- weeknumbers: {
92
- type: "boolean",
93
- name: "Vis ukenummer",
94
- reflect: !0,
95
- default: !1,
96
- description: "Vis ukenummer i kalenderen"
97
- },
98
- withcontrols: {
99
- type: "boolean",
100
- name: "Med velgere for måned/år",
101
- reflect: !0,
102
- default: !1,
103
- description: "Vis navigasjonskontroller for måned og år"
104
- },
105
- multiple: {
106
- type: "boolean",
107
- name: "Flervalg",
108
- reflect: !0,
109
- default: !1,
110
- description: "Tillat valg av flere datoer"
111
- },
112
- maxMultiple: {
113
- attribute: "max-multiple",
114
- type: "number",
115
- name: "Maks antall i flervalg",
116
- default: 4,
117
- description: "Maksimalt antall datoer som kan velges"
118
- },
119
- today: {
120
- type: "string",
121
- name: "Dagens dato (overstyring)",
122
- description: "ISO-datostreng som overstyrer dagens dato. Nyttig for snapshot-tester."
123
- },
124
- range: {
125
- type: "boolean",
126
- name: "Datotidsrom (fra og til)",
127
- reflect: !0,
128
- default: !1,
129
- description: "Tillat valg av datotidsrom"
130
- },
131
- dayStrings: {
132
- attribute: "day-strings",
133
- type: "array",
134
- name: "Korte dagsnavn",
135
- items: { type: "string" },
136
- description: "Korte dagsnavn for kalenderoverskriften"
137
- },
138
- dayStringsLong: {
139
- attribute: "day-strings-long",
140
- type: "array",
141
- name: "Fulle dagsnavn",
142
- items: { type: "string" },
143
- description: "Fulle dagsnavn for tilgjengelighetsetiketter"
144
- },
145
- monthStrings: {
146
- attribute: "month-strings",
147
- type: "array",
148
- name: "Månedsnavn",
149
- items: { type: "string" },
150
- description: "Månedsnavn for kalendernavigasjonen"
151
- },
152
- weekString: {
153
- attribute: "week-string",
154
- type: "string",
155
- name: "Ukenummer-etikett",
156
- description: "Etikett for ukenummerkolonnen"
157
- },
158
- prevMonthString: {
159
- attribute: "prev-month-string",
160
- type: "string",
161
- name: "Forrige måned-etikett",
162
- description: "Tilgjengelighetsetikett for forrige måned-knappen"
163
- },
164
- nextMonthString: {
165
- attribute: "next-month-string",
166
- type: "string",
167
- name: "Neste måned-etikett",
168
- description: "Tilgjengelighetsetikett for neste måned-knappen"
169
- }
170
- },
171
- events: {
172
- "date-selected": { description: "Returnerer en liste med valgte datoer i ISO-format" },
173
- close: { description: "Utløses når kalenderen ber om å lukkes (Escape-tast eller fokus forlater)" }
174
- }
40
+ multiple: !1,
41
+ maxMultiple: 0,
42
+ range: !1,
43
+ earliest: null,
44
+ latest: null,
45
+ weeknumbers: !1,
46
+ withcontrols: !1
175
47
  };
176
48
  //#endregion
177
49
  //#region ../../shared-utils/calendar/date-validation.ts
@@ -284,7 +156,7 @@ function U(e) {
284
156
  //#region src/components/calendar/calendar.ts
285
157
  var W = class extends a {
286
158
  constructor(...e) {
287
- super(...e), this.selected = [], this.multiple = T.props.multiple.default, this.maxMultiple = T.props.maxMultiple.default, this.range = T.props.range.default, this.earliest = T.props.earliest.default, this.latest = T.props.latest.default, this.excludedates = [], this.excludeweekdays = [], this.weeknumbers = T.props.weeknumbers.default, this.withcontrols = T.props.withcontrols.default, this.currentmonth = null, this.today = null, this._selected = [], this.inRange = {}, this.rangeHovered = null, this.year = 0, this.month = 0, this.week = 0, this.currentmonthtouched = !1, this.focusedDate = null, this.selectableDates = [], this.tabIndexSet = 0;
159
+ super(...e), this.selected = [], this.multiple = T.multiple, this.maxMultiple = T.maxMultiple, this.range = T.range, this.earliest = T.earliest, this.latest = T.latest, this.excludedates = [], this.excludeweekdays = [], this.weeknumbers = T.weeknumbers, this.withcontrols = T.withcontrols, this.currentmonth = null, this.today = null, this._selected = [], this.inRange = {}, this.rangeHovered = null, this.year = 0, this.month = 0, this.week = 0, this.currentmonthtouched = !1, this.focusedDate = null, this.selectableDates = [], this.tabIndexSet = 0;
288
160
  }
289
161
  get calendarStrings() {
290
162
  let e = this.pktStrings.get("dates"), t = this.pktStrings.get("calendar");
@@ -5,7 +5,7 @@ import { r as ee } from "./element-with-slot-GwTT3WRD.js";
5
5
  import "./icon-jEFbKTB_.js";
6
6
  import { n as u, t as d } from "./ref-lE1mGUOL.js";
7
7
  import { a as f, c as p, d as m, h, i as g, m as _, n as v, r as y, s as b, t as x, u as S } from "./converters-CkjLSYpa.js";
8
- import "./calendar-iXilYFBa.js";
8
+ import "./calendar-CBghTpkZ.js";
9
9
  import "./tag-D2Xvsy1i.js";
10
10
  import { t as C } from "./repeat-CCnTfedv.js";
11
11
  import { n as w, t as T } from "./utils-BwF4QSrq.js";
@@ -1,4 +1,4 @@
1
- const e=require("./element-DRc10X2R.cjs"),t=require("./class-map-BEib48YL.cjs"),n=require("./if-defined-BeVQnl3C.cjs"),r=require("./element-with-slot-DgtT8lCH.cjs");require("./icon-DBFTFd-J.cjs");const i=require("./ref-BkV4Cd8U.cjs"),a=require("./converters-BJ9Fe0kW.cjs");require("./calendar-Cc0bjLPC.cjs"),require("./tag-Cojf4jgA.cjs");const o=require("./repeat-uBgVG8Ch.cjs"),s=require("./utils-63cRpWut.cjs"),c=require("./input-element-uajHIWAO.cjs");require("./input-wrapper-791L3L--.cjs");var l=class extends e.t{constructor(...e){super(...e),this.dates=[],this.dateformat=`dd.MM.yyyy`,this.className=`pkt-datepicker__tags`,this.idBase=s.n()}render(){return this.classes={"pkt-date-tags":!0,[this.className]:!0},e._`
1
+ const e=require("./element-DRc10X2R.cjs"),t=require("./class-map-BEib48YL.cjs"),n=require("./if-defined-BeVQnl3C.cjs"),r=require("./element-with-slot-DgtT8lCH.cjs");require("./icon-DBFTFd-J.cjs");const i=require("./ref-BkV4Cd8U.cjs"),a=require("./converters-BJ9Fe0kW.cjs");require("./calendar-CA1mz04B.cjs"),require("./tag-Cojf4jgA.cjs");const o=require("./repeat-uBgVG8Ch.cjs"),s=require("./utils-63cRpWut.cjs"),c=require("./input-element-uajHIWAO.cjs");require("./input-wrapper-791L3L--.cjs");var l=class extends e.t{constructor(...e){super(...e),this.dates=[],this.dateformat=`dd.MM.yyyy`,this.className=`pkt-datepicker__tags`,this.idBase=s.n()}render(){return this.classes={"pkt-date-tags":!0,[this.className]:!0},e._`
2
2
  <div class=${t.t(this.classes)} aria-live="polite">
3
3
  ${Array.isArray(this.dates)&&this.dates[0]?o.t(a.h((this.dates??[]).filter(Boolean)),e=>e,t=>e._` <pkt-tag
4
4
  id=${this.idBase+t+`-tag`}
@@ -1 +1 @@
1
- Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("./calendar-Cc0bjLPC.cjs");exports.PktCalendar=e.n,exports.default=e.t;
1
+ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("./calendar-CA1mz04B.cjs");exports.PktCalendar=e.n,exports.default=e.t;
@@ -1,2 +1,2 @@
1
- import { n as e, t } from "./calendar-iXilYFBa.js";
1
+ import { n as e, t } from "./calendar-CBghTpkZ.js";
2
2
  export { e as PktCalendar, t as default };
@@ -1 +1 @@
1
- Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("./datepicker-FUNnqaCT.cjs");var t=e.t;exports.PktDatepicker=e.t,exports.PktDatepickerMultiple=e.n,exports.PktDatepickerRange=e.r,exports.PktDatepickerSingle=e.i,exports.default=t;
1
+ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("./datepicker-DIgQrvbZ.cjs");var t=e.t;exports.PktDatepicker=e.t,exports.PktDatepickerMultiple=e.n,exports.PktDatepickerRange=e.r,exports.PktDatepickerSingle=e.i,exports.default=t;
@@ -1,4 +1,4 @@
1
- import { i as e, n as t, r as n, t as r } from "./datepicker-Kk64p81z.js";
1
+ import { i as e, n as t, r as n, t as r } from "./datepicker-CqWg6K2N.js";
2
2
  //#region src/components/datepicker/index.ts
3
3
  var i = r;
4
4
  //#endregion
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./element-DRc10X2R.cjs"),t=require("./consent-D1SMUJLs.cjs"),n=require("./alert-HFqn-cvb.cjs"),r=require("./icon-DBFTFd-J.cjs"),i=require("./button-CIb0IxTg.cjs"),a=require("./accordion-NO9LYXaN.cjs"),o=require("./backlink-DYO8qA9C.cjs"),s=require("./breadcrumbs-HG9wzGtr.cjs"),c=require("./calendar-Cc0bjLPC.cjs"),l=require("./card-b7jjKk6B.cjs"),u=require("./tag-Cojf4jgA.cjs"),d=require("./combobox-BT1LB0gl.cjs"),f=require("./header-DybJSDQQ.cjs"),p=require("./input-wrapper-791L3L--.cjs"),m=require("./helptext-DyHzv2ZG.cjs"),h=require("./checkbox-D6j7amKX.cjs"),g=require("./fileupload-BmT5nQX0.cjs"),_=require("./modal-C1g2fiUq.cjs"),v=require("./progressbar-BpcsDCnG.cjs"),y=require("./datepicker-FUNnqaCT.cjs"),b=require("./footer-CLSihvYS.cjs"),x=require("./link-BWAhHUku.cjs"),S=require("./textinput-B4VnZzsa.cjs"),C=require("./searchinput-CiPB8xvh.cjs"),w=require("./header-menu-wcnhBSzs.cjs"),T=require("./heading-OfJKjUi2.cjs"),E=require("./linkcard-D6fRaZSc.cjs"),D=require("./loader-B5t78Yk7.cjs"),O=require("./messagebox-DBVUz-DN.cjs"),k=require("./radiobutton-BuOLykKo.cjs"),A=require("./tabs-DqzPOdi9.cjs"),j=require("./textarea-xTcafucE.cjs"),M=require("./select-Cc7c9dRd.cjs"),N=require("./timepicker-85ViMBd6.cjs");exports.PktAccordion=a.r,exports.PktAccordionItem=a.n,exports.PktAlert=n.n,exports.PktBackLink=o.n,exports.PktBreadcrumbs=s.t,exports.PktButton=i.n,exports.PktCalendar=c.n,exports.PktCard=l.n,exports.PktCheckbox=h.n,exports.PktCombobox=d.n,exports.PktConsent=t.n,exports.PktDateTags=y.a,exports.PktDatepicker=y.t,Object.defineProperty(exports,"PktFileUpload",{enumerable:!0,get:function(){return g.n}}),exports.PktFooter=b.n,exports.PktFooterSimple=b.t,exports.PktHeader=f.t,exports.PktHeaderGlobal=f.n,exports.PktHeaderMenu=w.n,exports.PktHeaderService=f.r,exports.PktHeaderUserMenu=f.i,exports.PktHeading=T.n,exports.PktHelptext=m.n,exports.PktIcon=r.n,exports.PktInputWrapper=p.n,exports.PktLink=x.n,exports.PktLinkCard=E.n,exports.PktLoader=D.n,exports.PktMessagebox=O.n,exports.PktModal=_.n,exports.PktProgressbar=v.n,exports.PktRadioButton=k.n,exports.PktRadiobutton=k.n,exports.PktSearchInput=C.n,exports.PktSelect=M.n,exports.PktTabItem=A.n,exports.PktTabs=A.r,exports.PktTag=u.n,exports.PktTextarea=j.n,exports.PktTextinput=S.n,exports.PktTimepicker=N.t,exports.getPktStrings=e.r,exports.pktStringsNb=e.s,exports.resetPktStrings=e.i,exports.setPktStrings=e.a,exports.subscribePktStrings=e.o;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./element-DRc10X2R.cjs"),t=require("./consent-D1SMUJLs.cjs"),n=require("./alert-HFqn-cvb.cjs"),r=require("./icon-DBFTFd-J.cjs"),i=require("./button-CIb0IxTg.cjs"),a=require("./accordion-NO9LYXaN.cjs"),o=require("./backlink-DYO8qA9C.cjs"),s=require("./breadcrumbs-HG9wzGtr.cjs"),c=require("./calendar-CA1mz04B.cjs"),l=require("./card-b7jjKk6B.cjs"),u=require("./tag-Cojf4jgA.cjs"),d=require("./combobox-BT1LB0gl.cjs"),f=require("./header-DybJSDQQ.cjs"),p=require("./input-wrapper-791L3L--.cjs"),m=require("./helptext-DyHzv2ZG.cjs"),h=require("./checkbox-D6j7amKX.cjs"),g=require("./fileupload-BmT5nQX0.cjs"),_=require("./modal-C1g2fiUq.cjs"),v=require("./progressbar-BpcsDCnG.cjs"),y=require("./datepicker-DIgQrvbZ.cjs"),b=require("./footer-CLSihvYS.cjs"),x=require("./link-BWAhHUku.cjs"),S=require("./textinput-B4VnZzsa.cjs"),C=require("./searchinput-CiPB8xvh.cjs"),w=require("./header-menu-wcnhBSzs.cjs"),T=require("./heading-OfJKjUi2.cjs"),E=require("./linkcard-D6fRaZSc.cjs"),D=require("./loader-B5t78Yk7.cjs"),O=require("./messagebox-DBVUz-DN.cjs"),k=require("./radiobutton-BuOLykKo.cjs"),A=require("./tabs-DqzPOdi9.cjs"),j=require("./textarea-xTcafucE.cjs"),M=require("./select-Cc7c9dRd.cjs"),N=require("./timepicker-85ViMBd6.cjs");exports.PktAccordion=a.r,exports.PktAccordionItem=a.n,exports.PktAlert=n.n,exports.PktBackLink=o.n,exports.PktBreadcrumbs=s.t,exports.PktButton=i.n,exports.PktCalendar=c.n,exports.PktCard=l.n,exports.PktCheckbox=h.n,exports.PktCombobox=d.n,exports.PktConsent=t.n,exports.PktDateTags=y.a,exports.PktDatepicker=y.t,Object.defineProperty(exports,"PktFileUpload",{enumerable:!0,get:function(){return g.n}}),exports.PktFooter=b.n,exports.PktFooterSimple=b.t,exports.PktHeader=f.t,exports.PktHeaderGlobal=f.n,exports.PktHeaderMenu=w.n,exports.PktHeaderService=f.r,exports.PktHeaderUserMenu=f.i,exports.PktHeading=T.n,exports.PktHelptext=m.n,exports.PktIcon=r.n,exports.PktInputWrapper=p.n,exports.PktLink=x.n,exports.PktLinkCard=E.n,exports.PktLoader=D.n,exports.PktMessagebox=O.n,exports.PktModal=_.n,exports.PktProgressbar=v.n,exports.PktRadioButton=k.n,exports.PktRadiobutton=k.n,exports.PktSearchInput=C.n,exports.PktSelect=M.n,exports.PktTabItem=A.n,exports.PktTabs=A.r,exports.PktTag=u.n,exports.PktTextarea=j.n,exports.PktTextinput=S.n,exports.PktTimepicker=N.t,exports.getPktStrings=e.r,exports.pktStringsNb=e.s,exports.resetPktStrings=e.i,exports.setPktStrings=e.a,exports.subscribePktStrings=e.o;
package/dist/pkt-index.js CHANGED
@@ -6,7 +6,7 @@ import { n as c } from "./button-DWMHtdWk.js";
6
6
  import { n as l, r as u } from "./accordion-BI-Qiznz.js";
7
7
  import { n as d } from "./backlink-BHtxOlTw.js";
8
8
  import { t as f } from "./breadcrumbs-BlRDuZbZ.js";
9
- import { n as p } from "./calendar-iXilYFBa.js";
9
+ import { n as p } from "./calendar-CBghTpkZ.js";
10
10
  import { n as m } from "./card-CwvUQj1a.js";
11
11
  import { n as h } from "./tag-D2Xvsy1i.js";
12
12
  import { n as g } from "./combobox-CiT2YvLb.js";
@@ -17,7 +17,7 @@ import { n as C } from "./checkbox-DcvKYDU2.js";
17
17
  import { n as w } from "./fileupload-4nTdjPKw.js";
18
18
  import { n as T } from "./modal-z5RzZ-fr.js";
19
19
  import { n as E } from "./progressbar-BPHLC7ce.js";
20
- import { a as D, t as O } from "./datepicker-Kk64p81z.js";
20
+ import { a as D, t as O } from "./datepicker-CqWg6K2N.js";
21
21
  import { n as k, t as A } from "./footer-YrlXRq7e.js";
22
22
  import { n as j } from "./link-BvjWWWlc.js";
23
23
  import { n as M } from "./textinput-Cr7Z9ilH.js";
@@ -5,6 +5,73 @@
5
5
  * Used by both Elements and React calendar implementations
6
6
  * and by the shared calendar helper functions.
7
7
  */
8
+ import type { IPktStringsProps } from '../shared-strings';
9
+ /** Calendar props shared by React and Elements. */
10
+ export interface IPktCalendarBase extends IPktStringsProps<'dates' | 'calendar'> {
11
+ id?: string;
12
+ currentmonth?: Date | string | null;
13
+ selected?: string[];
14
+ excludeweekdays?: string[];
15
+ excludedates?: Date[] | string[];
16
+ earliest?: string | null;
17
+ latest?: string | null;
18
+ weeknumbers?: boolean;
19
+ withcontrols?: boolean;
20
+ multiple?: boolean;
21
+ maxMultiple?: number;
22
+ range?: boolean;
23
+ today?: string | null;
24
+ }
25
+ export declare const CALENDAR_DEFAULTS: {
26
+ readonly multiple: false;
27
+ readonly maxMultiple: 0;
28
+ readonly range: false;
29
+ readonly earliest: any;
30
+ readonly latest: any;
31
+ readonly weeknumbers: false;
32
+ readonly withcontrols: false;
33
+ };
34
+ /**
35
+ * Documented Calendar props (subset of `IPktCalendarBase`), plus the
36
+ * React-only selection/close callbacks and the Elements-only deprecated
37
+ * per-string props that `strings` / `setPktStrings()` have superseded.
38
+ */
39
+ export type ICalendarSpecProps = Pick<IPktCalendarBase, 'id' | 'currentmonth' | 'selected' | 'excludeweekdays' | 'excludedates' | 'earliest' | 'latest' | 'weeknumbers' | 'withcontrols' | 'multiple' | 'maxMultiple' | 'range' | 'today'> & {
40
+ /**
41
+ * React-only callback fired with the updated selection (ISO date strings).
42
+ * @remarks Elements-paritet: `date-selected`-eventet.
43
+ */
44
+ onDateSelected?: (selected: string[]) => void;
45
+ /**
46
+ * React-only callback fired when the calendar requests to close (Escape or focus-out).
47
+ * @remarks Elements-paritet: `close`-eventet.
48
+ */
49
+ onClose?: () => void;
50
+ /**
51
+ * @deprecated Elements-only. Bruk `strings={{ dates: { daysShort: [...] } }}` eller `setPktStrings()`.
52
+ */
53
+ dayStrings?: string[];
54
+ /**
55
+ * @deprecated Elements-only. Bruk `strings={{ dates: { days: [...] } }}` eller `setPktStrings()`.
56
+ */
57
+ dayStringsLong?: string[];
58
+ /**
59
+ * @deprecated Elements-only. Bruk `strings={{ dates: { months: [...] } }}` eller `setPktStrings()`.
60
+ */
61
+ monthStrings?: string[];
62
+ /**
63
+ * @deprecated Elements-only. Bruk `strings={{ dates: { week: '...' } }}` eller `setPktStrings()`.
64
+ */
65
+ weekString?: string;
66
+ /**
67
+ * @deprecated Elements-only. Bruk `strings={{ calendar: { prevMonth: '...' } }}` eller `setPktStrings()`.
68
+ */
69
+ prevMonthString?: string;
70
+ /**
71
+ * @deprecated Elements-only. Bruk `strings={{ calendar: { nextMonth: '...' } }}` eller `setPktStrings()`.
72
+ */
73
+ nextMonthString?: string;
74
+ };
8
75
  export interface IDateConstraints {
9
76
  earliest: string | null;
10
77
  latest: string | null;
@@ -25,7 +25,8 @@ export type { IRenderLink, TRenderLink } from './render-link';
25
25
  export type { IPktStringsProps } from '../shared-strings';
26
26
  export type { IHelptextProps, ITagOptionalRequiredProps, IFormFieldLabelProps, IFormFieldErrorProps, IFormFieldCommonProps, TFormFieldCommonSpecKeys, } from './form-field';
27
27
  export type { TMessageboxSkin, TCardSkin, TTagSkin } from './skin';
28
- export type { IDateConstraints, ICalendarGridDimensions, IGridCellPosition, TDateRangeMap, ISelectionState, ISelectionOptions, } from './calendar';
28
+ export { CALENDAR_DEFAULTS } from './calendar';
29
+ export type { IPktCalendarBase, ICalendarSpecProps, IDateConstraints, ICalendarGridDimensions, IGridCellPosition, TDateRangeMap, ISelectionState, ISelectionOptions, } from './calendar';
29
30
  export type { IDatepickerStrings } from './datepicker';
30
31
  export { defaultSingleStrings, defaultRangeStrings } from './datepicker';
31
32
  export type { ITimepickerStrings } from './timepicker';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oslokommune/punkt-elements",
3
- "version": "18.5.2",
3
+ "version": "18.6.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",
@@ -83,5 +83,5 @@
83
83
  "engines": {
84
84
  "node": "^22.19.0 || ^24.0.0 || ^26.0.0"
85
85
  },
86
- "gitHead": "fba271976ab926dd10ab082810f9b6d55da5cc79"
86
+ "gitHead": "054139e3e0fadc58e7404bef71a5ed2f74d5ca8b"
87
87
  }
@@ -13,9 +13,8 @@ import { html, nothing, PropertyValues, TemplateResult } from 'lit'
13
13
  import { PktElement } from '@/base-elements/element'
14
14
  import type { IPktStringsProps } from 'shared-strings'
15
15
  import converters from '../../helpers/converters'
16
- import specs from 'componentSpecs/calendar.json'
17
16
  import '@/components/icon'
18
- import type { IDateConstraints, TDateRangeMap } from 'shared-types/calendar'
17
+ import { CALENDAR_DEFAULTS, type IDateConstraints, type TDateRangeMap } from 'shared-types/calendar'
19
18
  import {
20
19
  isDateExcluded,
21
20
  isDayDisabled as checkDayDisabled,
@@ -61,20 +60,20 @@ export class PktCalendar extends PktElement<IPktStringsProps<'dates' | 'calendar
61
60
  selected: string | string[] = []
62
61
 
63
62
  @property({ type: Boolean })
64
- multiple: boolean = specs.props.multiple.default
63
+ multiple: boolean = CALENDAR_DEFAULTS.multiple
65
64
 
66
65
  @property({ type: Number, attribute: 'max-multiple' })
67
- maxMultiple: number = specs.props.maxMultiple.default
66
+ maxMultiple: number = CALENDAR_DEFAULTS.maxMultiple
68
67
 
69
68
  @property({ type: Boolean })
70
- range: boolean = specs.props.range.default
69
+ range: boolean = CALENDAR_DEFAULTS.range
71
70
 
72
71
  // Date constraints
73
72
  @property({ type: String })
74
- earliest: string | null = specs.props.earliest.default
73
+ earliest: string | null = CALENDAR_DEFAULTS.earliest
75
74
 
76
75
  @property({ type: String })
77
- latest: string | null = specs.props.latest.default
76
+ latest: string | null = CALENDAR_DEFAULTS.latest
78
77
 
79
78
  @property({ converter: converters.stringsToDate })
80
79
  excludedates: Date[] = []
@@ -84,10 +83,10 @@ export class PktCalendar extends PktElement<IPktStringsProps<'dates' | 'calendar
84
83
 
85
84
  // Display options
86
85
  @property({ type: Boolean })
87
- weeknumbers: boolean = specs.props.weeknumbers.default
86
+ weeknumbers: boolean = CALENDAR_DEFAULTS.weeknumbers
88
87
 
89
88
  @property({ type: Boolean })
90
- withcontrols: boolean = specs.props.withcontrols.default
89
+ withcontrols: boolean = CALENDAR_DEFAULTS.withcontrols
91
90
 
92
91
  @property({ converter: converters.stringToDate })
93
92
  currentmonth: Date | null = null