@skf-design-system/ui-components 1.0.0-beta.7 → 1.0.1-beta.1
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/components/alert/alert.component.d.ts +2 -2
- package/dist/components/alert/alert.component.js +34 -34
- package/dist/components/breadcrumb/breadcrumb.component.d.ts +29 -0
- package/dist/components/breadcrumb/breadcrumb.d.ts +8 -0
- package/dist/components/breadcrumb/breadcrumb.styles.d.ts +1 -0
- package/dist/components/breadcrumb-item/breadcrumb-item.component.d.ts +25 -0
- package/dist/components/breadcrumb-item/breadcrumb-item.d.ts +8 -0
- package/dist/components/breadcrumb-item/breadcrumb-item.styles.d.ts +1 -0
- package/dist/components/button/button.component.d.ts +6 -4
- package/dist/components/button/button.component.js +87 -70
- package/dist/components/button/button.styles.js +64 -45
- package/dist/components/checkbox/checkbox.component.d.ts +3 -1
- package/dist/components/checkbox/checkbox.component.js +71 -58
- package/dist/components/date-picker/datepicker.calendar.component.d.ts +72 -0
- package/dist/components/date-picker/datepicker.calendar.component.js +382 -0
- package/dist/components/date-picker/datepicker.calendar.styles.d.ts +1 -0
- package/dist/components/date-picker/datepicker.calendar.styles.js +192 -0
- package/dist/components/date-picker/datepicker.component.d.ts +74 -0
- package/dist/components/date-picker/datepicker.component.js +241 -0
- package/dist/components/date-picker/datepicker.d.ts +10 -0
- package/dist/components/date-picker/datepicker.helpers.d.ts +40 -0
- package/dist/components/date-picker/datepicker.helpers.js +69 -0
- package/dist/components/date-picker/datepicker.js +8 -0
- package/dist/components/date-picker/datepicker.styles.d.ts +1 -0
- package/dist/components/date-picker/datepicker.styles.js +99 -0
- package/dist/components/date-picker-input/datepicker-input.component.d.ts +107 -0
- package/dist/components/date-picker-input/datepicker-input.component.js +397 -0
- package/dist/components/date-picker-input/datepicker-input.d.ts +8 -0
- package/dist/components/date-picker-input/datepicker-input.helpers.d.ts +4 -0
- package/dist/components/date-picker-input/datepicker-input.helpers.js +29 -0
- package/dist/components/date-picker-input/datepicker-input.js +6 -0
- package/dist/components/date-picker-input/datepicker-input.styles.d.ts +1 -0
- package/dist/components/date-picker-input/datepicker-input.styles.js +22 -0
- package/dist/components/dialog/dialog.component.d.ts +0 -1
- package/dist/components/dialog/dialog.component.js +2 -4
- package/dist/components/icon/icon.component.d.ts +1 -4
- package/dist/components/icon/icon.component.js +28 -19
- package/dist/components/icon/icon.styles.js +53 -47
- package/dist/components/input/input.component.d.ts +1 -0
- package/dist/components/input/input.component.js +87 -80
- package/dist/components/link/link.component.d.ts +1 -0
- package/dist/components/link/link.component.js +21 -21
- package/dist/components/menu/menu.component.d.ts +24 -0
- package/dist/components/menu/menu.component.js +18 -0
- package/dist/components/menu/menu.d.ts +8 -0
- package/dist/components/menu/menu.js +6 -0
- package/dist/components/menu/menu.styles.d.ts +1 -0
- package/dist/components/menu/menu.styles.js +11 -0
- package/dist/components/menu-item/menu-item.component.d.ts +25 -0
- package/dist/components/menu-item/menu-item.component.js +13 -0
- package/dist/components/menu-item/menu-item.d.ts +8 -0
- package/dist/components/menu-item/menu-item.js +6 -0
- package/dist/components/menu-item/menu-item.styles.d.ts +1 -0
- package/dist/components/menu-item/menu-item.styles.js +19 -0
- package/dist/components/popover/popover.component.d.ts +29 -0
- package/dist/components/popover/popover.component.js +37 -0
- package/dist/components/popover/popover.d.ts +8 -0
- package/dist/components/popover/popover.js +6 -0
- package/dist/components/popover/popover.styles.d.ts +1 -0
- package/dist/components/popover/popover.styles.js +12 -0
- package/dist/components/select/select.component.d.ts +8 -10
- package/dist/components/select/select.component.js +115 -118
- package/dist/components/select/select.controllers.d.ts +0 -25
- package/dist/components/select/select.controllers.js +35 -95
- package/dist/components/stepper/stepper.component.d.ts +38 -0
- package/dist/components/stepper/stepper.component.js +91 -0
- package/dist/components/stepper/stepper.d.ts +8 -0
- package/dist/components/stepper/stepper.helpers.d.ts +16 -0
- package/dist/components/stepper/stepper.helpers.js +18 -0
- package/dist/components/stepper/stepper.js +6 -0
- package/dist/components/stepper/stepper.styles.d.ts +1 -0
- package/dist/components/stepper/stepper.styles.js +15 -0
- package/dist/components/stepper-item/stepper-item.component.d.ts +47 -0
- package/dist/components/stepper-item/stepper-item.component.js +113 -0
- package/dist/components/stepper-item/stepper-item.d.ts +8 -0
- package/dist/components/stepper-item/stepper-item.js +6 -0
- package/dist/components/stepper-item/stepper-item.styles.d.ts +1 -0
- package/dist/components/stepper-item/stepper-item.styles.js +98 -0
- package/dist/components/toast/toast.component.d.ts +7 -4
- package/dist/components/toast/toast.component.js +24 -20
- package/dist/components/toast/toast.singleton.d.ts +2 -7
- package/dist/components/toast/toast.singleton.js +25 -25
- package/dist/components/toast-item/toast-item.component.js +15 -15
- package/dist/components/toast-item/toast-item.styles.js +13 -11
- package/dist/components/tooltip/tooltip.component.d.ts +24 -0
- package/dist/components/tooltip/tooltip.component.js +18 -0
- package/dist/components/tooltip/tooltip.d.ts +8 -0
- package/dist/components/tooltip/tooltip.js +6 -0
- package/dist/components/tooltip/tooltip.styles.d.ts +1 -0
- package/dist/components/tooltip/tooltip.styles.js +12 -0
- package/dist/custom-elements.json +3278 -1321
- package/dist/index.d.ts +8 -0
- package/dist/index.js +78 -54
- package/dist/internal/base-classes/popover/popover.base.d.ts +29 -0
- package/dist/internal/base-classes/popover/popover.base.js +116 -0
- package/dist/internal/base-classes/popover/popover.styles.d.ts +1 -0
- package/dist/internal/base-classes/popover/popover.styles.js +29 -0
- package/dist/internal/controllers/popover.controller.d.ts +17 -0
- package/dist/internal/controllers/popover.controller.js +44 -0
- package/dist/internal/helpers/dateFormatter.d.ts +2 -0
- package/dist/internal/helpers/hintSeverity.d.ts +1 -1
- package/dist/internal/helpers/utilityTypes.d.ts +22 -0
- package/dist/react/index.d.ts +11 -2
- package/dist/react/index.js +11 -2
- package/dist/react/skf-breadcrumb/index.d.ts +9 -0
- package/dist/react/skf-breadcrumb/index.js +17 -0
- package/dist/react/skf-breadcrumb-item/index.d.ts +3 -0
- package/dist/react/skf-breadcrumb-item/index.js +13 -0
- package/dist/react/skf-datepicker/index.d.ts +12 -0
- package/dist/react/skf-datepicker/index.js +18 -0
- package/dist/react/skf-menu/index.d.ts +12 -0
- package/dist/react/skf-menu/index.js +18 -0
- package/dist/react/skf-menu-item/index.d.ts +27 -0
- package/dist/react/skf-menu-item/index.js +23 -0
- package/dist/react/skf-popover/index.d.ts +12 -0
- package/dist/react/skf-popover/index.js +18 -0
- package/dist/react/skf-stepper/index.d.ts +9 -0
- package/dist/react/skf-stepper/index.js +17 -0
- package/dist/react/skf-stepper-item/index.d.ts +9 -0
- package/dist/react/skf-stepper-item/index.js +17 -0
- package/dist/react/skf-tooltip/index.d.ts +12 -0
- package/dist/react/skf-tooltip/index.js +18 -0
- package/dist/types/jsx/custom-element-jsx.d.ts +628 -155
- package/dist/types/vue/index.d.ts +369 -74
- package/dist/vscode.html-custom-data.json +761 -391
- package/dist/web-types.json +936 -293
- package/package.json +34 -33
@@ -0,0 +1,192 @@
|
|
1
|
+
import { css as e } from "lit";
|
2
|
+
const r = e`
|
3
|
+
@layer components {
|
4
|
+
:host {
|
5
|
+
box-sizing: inherit;
|
6
|
+
contain: layout;
|
7
|
+
display: block;
|
8
|
+
width: 100%;
|
9
|
+
}
|
10
|
+
|
11
|
+
:host([hidden]) {
|
12
|
+
display: none !important;
|
13
|
+
}
|
14
|
+
|
15
|
+
.grid {
|
16
|
+
display: grid;
|
17
|
+
grid-template-columns: repeat(7, 1fr);
|
18
|
+
list-style: none;
|
19
|
+
margin: 0;
|
20
|
+
padding: 0;
|
21
|
+
}
|
22
|
+
|
23
|
+
h4 {
|
24
|
+
color: var(--title-fg);
|
25
|
+
font-size: 1.2em;
|
26
|
+
margin: 0;
|
27
|
+
padding: 0;
|
28
|
+
white-space: nowrap;
|
29
|
+
}
|
30
|
+
|
31
|
+
.weekdays > li {
|
32
|
+
color: var(--weekday-fg);
|
33
|
+
display: grid;
|
34
|
+
font-size: 1.2em;
|
35
|
+
margin-block: 1em 0.5em;
|
36
|
+
place-items: center;
|
37
|
+
user-select: none;
|
38
|
+
}
|
39
|
+
|
40
|
+
.calendar > li {
|
41
|
+
background-color: transparent;
|
42
|
+
border-radius: 0.2em;
|
43
|
+
display: grid;
|
44
|
+
min-width: 2.5em;
|
45
|
+
outline: 1px solid var(--day-outline);
|
46
|
+
place-items: center;
|
47
|
+
|
48
|
+
& button {
|
49
|
+
aspect-ratio: 1.2 / 1;
|
50
|
+
background-color: transparent;
|
51
|
+
border: 0;
|
52
|
+
border-radius: 0;
|
53
|
+
cursor: pointer;
|
54
|
+
display: grid;
|
55
|
+
font-size: 1.2em;
|
56
|
+
margin-block: 0.4em;
|
57
|
+
place-items: center;
|
58
|
+
transition: background-color 0.3s;
|
59
|
+
width: 100%;
|
60
|
+
|
61
|
+
&:focus-visible {
|
62
|
+
border-radius: 0.2em;
|
63
|
+
outline: 2px solid #469;
|
64
|
+
outline-offset: 2px;
|
65
|
+
}
|
66
|
+
|
67
|
+
&.today {
|
68
|
+
background-color: var(--today);
|
69
|
+
color: var(--today-fg);
|
70
|
+
}
|
71
|
+
|
72
|
+
&.in-range {
|
73
|
+
background-color: var(--in-range-bg);
|
74
|
+
}
|
75
|
+
|
76
|
+
&.selected {
|
77
|
+
background-color: var(--selected-bg);
|
78
|
+
color: var(--selected-fg);
|
79
|
+
}
|
80
|
+
|
81
|
+
&.selected-start {
|
82
|
+
border-radius: 5px 0 0 5px;
|
83
|
+
}
|
84
|
+
|
85
|
+
&.selected-end {
|
86
|
+
border-radius: 0 5px 5px 0;
|
87
|
+
}
|
88
|
+
|
89
|
+
&.selected-start.selected-end {
|
90
|
+
border-radius: 5px;
|
91
|
+
}
|
92
|
+
|
93
|
+
&.prevmonth,
|
94
|
+
&.nextmonth {
|
95
|
+
color: var(--other-month-fg);
|
96
|
+
}
|
97
|
+
|
98
|
+
&:not(.selected):hover {
|
99
|
+
background-color: var(--hover-bg);
|
100
|
+
transition-duration: 0s;
|
101
|
+
}
|
102
|
+
|
103
|
+
&[disabled] {
|
104
|
+
cursor: not-allowed;
|
105
|
+
opacity: 0.5;
|
106
|
+
position: relative;
|
107
|
+
|
108
|
+
&::after {
|
109
|
+
background: linear-gradient(-45deg, transparent 45%, black 50%, transparent 50%);
|
110
|
+
content: '';
|
111
|
+
inset: 0;
|
112
|
+
position: absolute;
|
113
|
+
}
|
114
|
+
}
|
115
|
+
}
|
116
|
+
}
|
117
|
+
|
118
|
+
.calendar-head {
|
119
|
+
align-items: baseline;
|
120
|
+
display: flex;
|
121
|
+
font-size: 1.2em;
|
122
|
+
gap: 0;
|
123
|
+
grid-template-columns: min-content auto min-content;
|
124
|
+
justify-content: space-between;
|
125
|
+
margin: 0 0 1em;
|
126
|
+
padding: 0;
|
127
|
+
position: relative;
|
128
|
+
|
129
|
+
&::after {
|
130
|
+
background-color: var(--border-color);
|
131
|
+
bottom: -0.8em;
|
132
|
+
content: '';
|
133
|
+
display: block;
|
134
|
+
grid-column: 1 / -1;
|
135
|
+
height: 1px;
|
136
|
+
left: 0;
|
137
|
+
margin-inline: calc(var(--calendar-padding) * -1);
|
138
|
+
position: absolute;
|
139
|
+
right: 0;
|
140
|
+
}
|
141
|
+
|
142
|
+
& .calendar-head__controls {
|
143
|
+
display: contents;
|
144
|
+
|
145
|
+
&.hide {
|
146
|
+
display: none;
|
147
|
+
}
|
148
|
+
}
|
149
|
+
|
150
|
+
& h4 {
|
151
|
+
color: var(--title-fg);
|
152
|
+
font-size: 1.2em;
|
153
|
+
margin: 0;
|
154
|
+
padding: 0;
|
155
|
+
text-align: center;
|
156
|
+
white-space: nowrap;
|
157
|
+
}
|
158
|
+
|
159
|
+
& button {
|
160
|
+
background-color: transparent;
|
161
|
+
border: none;
|
162
|
+
color: var(--button-control-fg);
|
163
|
+
cursor: pointer;
|
164
|
+
min-width: 1.5em;
|
165
|
+
padding: 0.2em;
|
166
|
+
text-align: center;
|
167
|
+
|
168
|
+
&:focus-visible {
|
169
|
+
border-radius: 0.2em;
|
170
|
+
outline: 2px solid #469;
|
171
|
+
outline-offset: 2px;
|
172
|
+
}
|
173
|
+
|
174
|
+
& > div {
|
175
|
+
width: 1em;
|
176
|
+
}
|
177
|
+
|
178
|
+
&:hover {
|
179
|
+
color: var(--button-control-fg-hover);
|
180
|
+
}
|
181
|
+
}
|
182
|
+
}
|
183
|
+
|
184
|
+
.hide {
|
185
|
+
pointer-events: none;
|
186
|
+
visibility: hidden;
|
187
|
+
}
|
188
|
+
}
|
189
|
+
`;
|
190
|
+
export {
|
191
|
+
r as styles
|
192
|
+
};
|
@@ -0,0 +1,74 @@
|
|
1
|
+
import '../button/button';
|
2
|
+
import { SkfElement } from '../../internal/components/skf-element.js';
|
3
|
+
import { type CSSResultGroup } from 'lit';
|
4
|
+
import './datepicker';
|
5
|
+
export interface SkfDatePickerDateRange {
|
6
|
+
start: Date | null;
|
7
|
+
end: Date | null;
|
8
|
+
}
|
9
|
+
/**
|
10
|
+
* A date picker component that allows users to select a date or a range of dates.
|
11
|
+
*
|
12
|
+
* @element skf-datepicker
|
13
|
+
* @fires selected-date-changed - When a date is selected
|
14
|
+
* @fires selected-date-range-changed - When a range of dates is selected
|
15
|
+
*
|
16
|
+
* @prop {string} date - The date to display in the date picker
|
17
|
+
* @prop {boolean} range - If true, the date picker will allow the selection of a range of dates
|
18
|
+
* @prop {string} locale - The locale to use for formatting the date
|
19
|
+
*
|
20
|
+
* @slot - Default hint content placed inside the date picker
|
21
|
+
*
|
22
|
+
* @cssprop --max-width - The maximum width of the date picker
|
23
|
+
*/
|
24
|
+
export declare class SkfDatePicker extends SkfElement {
|
25
|
+
static styles: CSSResultGroup;
|
26
|
+
locale: string;
|
27
|
+
date: string;
|
28
|
+
id: string;
|
29
|
+
/**
|
30
|
+
* A comma-separated list of dates (yyyy-mm-dd format) that are not selectable.
|
31
|
+
*/
|
32
|
+
invalidDates?: string;
|
33
|
+
range: boolean;
|
34
|
+
selectedDate: Date | undefined;
|
35
|
+
/**
|
36
|
+
* Earliest selectable date. (yyyy-mm-dd format)
|
37
|
+
*/
|
38
|
+
selectableFrom?: string;
|
39
|
+
/**
|
40
|
+
* Latest selectable date. (yyyy-mm-dd format)
|
41
|
+
*/
|
42
|
+
selectableTo?: string;
|
43
|
+
selectedDateRange: SkfDatePickerDateRange;
|
44
|
+
/** @internal */
|
45
|
+
private _date?;
|
46
|
+
/** @internal */
|
47
|
+
_datePlusOneMonth: Date;
|
48
|
+
connectedCallback(): void;
|
49
|
+
protected firstUpdated(): void;
|
50
|
+
clearSelection(): void;
|
51
|
+
/** @internal */
|
52
|
+
private _handleCalendarView;
|
53
|
+
/** @internal */
|
54
|
+
private _handleSelectedDate;
|
55
|
+
/** @internal */
|
56
|
+
_onRangeCompleteEmitEvent(): void;
|
57
|
+
/** @internal */
|
58
|
+
_handleRangeChange(): void;
|
59
|
+
/** @internal */
|
60
|
+
_handleDateChange(): void;
|
61
|
+
/** @internal */
|
62
|
+
_handleSelectedDateRangeChange(): void;
|
63
|
+
/** @internal */
|
64
|
+
_handleSelectedDateChange(): void;
|
65
|
+
/** @internal */
|
66
|
+
_handleTodayClick: () => void;
|
67
|
+
render(): import("lit").TemplateResult<1>;
|
68
|
+
/** @internal */
|
69
|
+
private _renderTodayBtn;
|
70
|
+
/** @internal */
|
71
|
+
private _handleChangeCalendarView;
|
72
|
+
/** @internal */
|
73
|
+
private _animateView;
|
74
|
+
}
|
@@ -0,0 +1,241 @@
|
|
1
|
+
import "../button/button.js";
|
2
|
+
import { dateFormatter as c } from "../date-picker-input/datepicker-input.helpers.js";
|
3
|
+
import { SkfElement as $ } from "../../internal/components/skf-element.js";
|
4
|
+
import { watch as g } from "../../internal/helpers/watch.js";
|
5
|
+
import C from "../../styles/component.styles.js";
|
6
|
+
import { html as y } from "lit";
|
7
|
+
import { property as l, state as p } from "lit/decorators.js";
|
8
|
+
import "./datepicker.js";
|
9
|
+
import { getDateParts as h, earliestDate as S, latestDate as k, compareDates as M, doAnimate as f } from "./datepicker.helpers.js";
|
10
|
+
import { styles as T } from "./datepicker.styles.js";
|
11
|
+
var V = Object.defineProperty, F = Object.getOwnPropertyDescriptor, i = (u, e, s, t) => {
|
12
|
+
for (var a = t > 1 ? void 0 : t ? F(e, s) : e, d = u.length - 1, r; d >= 0; d--)
|
13
|
+
(r = u[d]) && (a = (t ? r(e, s, a) : r(a)) || a);
|
14
|
+
return t && a && V(e, s, a), a;
|
15
|
+
};
|
16
|
+
const m = class m extends $ {
|
17
|
+
constructor() {
|
18
|
+
super(...arguments), this.locale = "en-CA", this.date = (/* @__PURE__ */ new Date()).toLocaleDateString(this.locale), this.id = "", this.range = !1, this.selectedDate = void 0, this.selectedDateRange = {
|
19
|
+
start: null,
|
20
|
+
end: null
|
21
|
+
}, this._datePlusOneMonth = new Date(
|
22
|
+
new Date(this.date).getFullYear(),
|
23
|
+
new Date(this.date).getMonth() + 1,
|
24
|
+
1
|
25
|
+
), this._handleCalendarView = (e) => {
|
26
|
+
this._handleChangeCalendarView(e.detail);
|
27
|
+
}, this._handleSelectedDate = (e) => {
|
28
|
+
var s;
|
29
|
+
if (this.selectedDate = e.detail.date, console.log("selectedDate", this.selectedDate), this.range) {
|
30
|
+
const t = (s = this.shadowRoot) == null ? void 0 : s.querySelectorAll("datepicker-calendar"), a = this.selectedDateRange, d = a.start && this.selectedDate < a.start;
|
31
|
+
if ((a.start && a.end) ?? d)
|
32
|
+
this.selectedDateRange = {
|
33
|
+
start: this.selectedDate,
|
34
|
+
end: null
|
35
|
+
};
|
36
|
+
else {
|
37
|
+
const D = !!a.start ? { end: e.detail.date } : { start: e.detail.date };
|
38
|
+
this.selectedDateRange = {
|
39
|
+
...a,
|
40
|
+
...D
|
41
|
+
};
|
42
|
+
}
|
43
|
+
this._onRangeCompleteEmitEvent(), t != null && t.length && [...t].forEach((o) => {
|
44
|
+
o.selectedDateRange = this.selectedDateRange;
|
45
|
+
});
|
46
|
+
}
|
47
|
+
this.emit("skf-datepicker-selected", {
|
48
|
+
detail: { date: this.range ? this.selectedDateRange : this.selectedDate }
|
49
|
+
}), this.requestUpdate();
|
50
|
+
}, this._handleTodayClick = () => {
|
51
|
+
const { month: e, year: s } = h(), { month: t, year: a } = h(this.date);
|
52
|
+
if (t === e && a === s && (this.selectedDateRange.start || this.selectedDate)) {
|
53
|
+
this.date = c(this.selectedDateRange.start ?? this.selectedDate), this.emit("update-calendar-view", {
|
54
|
+
detail: this.date
|
55
|
+
});
|
56
|
+
return;
|
57
|
+
}
|
58
|
+
if (this.range) {
|
59
|
+
this.emit("update-calendar-view", {
|
60
|
+
detail: c(/* @__PURE__ */ new Date())
|
61
|
+
});
|
62
|
+
return;
|
63
|
+
}
|
64
|
+
this.date = c(/* @__PURE__ */ new Date());
|
65
|
+
};
|
66
|
+
}
|
67
|
+
connectedCallback() {
|
68
|
+
super.connectedCallback(), this.addEventListener("update-calendar-view", this._handleCalendarView), this.addEventListener("selected-date-changed", this._handleSelectedDate);
|
69
|
+
}
|
70
|
+
firstUpdated() {
|
71
|
+
(this.selectedDateRange.start ?? this.selectedDate) && this._onRangeCompleteEmitEvent();
|
72
|
+
}
|
73
|
+
clearSelection() {
|
74
|
+
this.selectedDateRange = {
|
75
|
+
start: null,
|
76
|
+
end: null
|
77
|
+
}, this.selectedDate = void 0;
|
78
|
+
}
|
79
|
+
/** @internal */
|
80
|
+
_onRangeCompleteEmitEvent() {
|
81
|
+
if (!this.selectedDateRange.start || !this.selectedDateRange.end) return;
|
82
|
+
const e = Math.abs(
|
83
|
+
this.selectedDateRange.end.getTime() - this.selectedDateRange.start.getTime()
|
84
|
+
), s = Math.ceil(e / (1e3 * 60 * 60 * 24)) + 1;
|
85
|
+
this.emit("selected-date-range-changed", {
|
86
|
+
detail: {
|
87
|
+
...this.selectedDateRange,
|
88
|
+
days: s,
|
89
|
+
id: this.id
|
90
|
+
}
|
91
|
+
});
|
92
|
+
}
|
93
|
+
_handleRangeChange() {
|
94
|
+
this.style.setProperty("--max-width", this.range ? "43em" : "21em");
|
95
|
+
}
|
96
|
+
_handleDateChange() {
|
97
|
+
console.log("%cdate changed", "color:red", this.date), this.date = this.date ? this.date : c(/* @__PURE__ */ new Date()), this.date = S(
|
98
|
+
k(this.date, this.selectableFrom ?? this.date),
|
99
|
+
this.selectableTo ?? this.date
|
100
|
+
), this._date = new Date(this.date), this._datePlusOneMonth = new Date(this._date.getFullYear(), this._date.getMonth() + 1, 1);
|
101
|
+
}
|
102
|
+
_handleSelectedDateRangeChange() {
|
103
|
+
}
|
104
|
+
_handleSelectedDateChange() {
|
105
|
+
console.log("selected date changed", this.selectedDate);
|
106
|
+
}
|
107
|
+
render() {
|
108
|
+
return y`
|
109
|
+
<div class="calendar-container">
|
110
|
+
<skf-datepicker-calendar
|
111
|
+
.date=${this._date ?? /* @__PURE__ */ new Date()}
|
112
|
+
.eventid="${this.id}"
|
113
|
+
.range=${this.range}
|
114
|
+
.selectedDate=${this.selectedDate}
|
115
|
+
.selectedDateRange=${this.selectedDateRange}
|
116
|
+
.selectableFrom=${this.selectableFrom}
|
117
|
+
.selectableTo=${this.selectableTo}
|
118
|
+
.invalidDates=${this.invalidDates}
|
119
|
+
class="start"
|
120
|
+
id=${this.id}
|
121
|
+
locale="${this.locale}"
|
122
|
+
></skf-datepicker-calendar>
|
123
|
+
<skf-datepicker-calendar
|
124
|
+
?hidden=${!this.range}
|
125
|
+
.date=${this._datePlusOneMonth}
|
126
|
+
.eventid="${this.id}"
|
127
|
+
.range=${!0}
|
128
|
+
.selectedDate="${this.selectedDate}"
|
129
|
+
.selectedDateRange=${this.selectedDateRange}
|
130
|
+
.selectableFrom=${this.selectableFrom}
|
131
|
+
.selectableTo=${this.selectableTo}
|
132
|
+
.invalidDates=${this.invalidDates}
|
133
|
+
class="end"
|
134
|
+
id=${`${this.id}-range-end`}
|
135
|
+
locale="${this.locale}"
|
136
|
+
></skf-datepicker-calendar>
|
137
|
+
</div>
|
138
|
+
${this._renderTodayBtn()}
|
139
|
+
<slot></slot>
|
140
|
+
<div class="triangle"></div>
|
141
|
+
`;
|
142
|
+
}
|
143
|
+
/** @internal */
|
144
|
+
_renderTodayBtn() {
|
145
|
+
const { month: e, year: s } = h(), { month: t, year: a } = h(this.date), d = this.selectedDate ?? this.selectedDateRange.start, r = e === t && s === a;
|
146
|
+
let o = !1;
|
147
|
+
return (r && !d || d && e === d.getMonth() && s === d.getFullYear()) && (o = !0), y`
|
148
|
+
<div class="today">
|
149
|
+
<skf-button
|
150
|
+
@click=${this._handleTodayClick}
|
151
|
+
?disabled=${o}
|
152
|
+
variant="tertiary"
|
153
|
+
size="sm"
|
154
|
+
>
|
155
|
+
${D(this.date) && (this.selectedDate || this.selectedDateRange.start) && !o ? "Selected date" : "Today"}
|
156
|
+
</skf-button>
|
157
|
+
</div>
|
158
|
+
`;
|
159
|
+
function D(_) {
|
160
|
+
const { month: w, year: R } = h(), { month: v, year: b } = h(_);
|
161
|
+
return w === v && R === b;
|
162
|
+
}
|
163
|
+
}
|
164
|
+
/** @internal */
|
165
|
+
_handleChangeCalendarView(e) {
|
166
|
+
const s = M(this.date, e);
|
167
|
+
this._animateView(s, () => {
|
168
|
+
this.date = e;
|
169
|
+
}).then(() => {
|
170
|
+
}).catch((t) => {
|
171
|
+
console.error(t);
|
172
|
+
});
|
173
|
+
}
|
174
|
+
/** @internal */
|
175
|
+
async _animateView(e, s) {
|
176
|
+
if (!this.shadowRoot) return;
|
177
|
+
const t = [...this.shadowRoot.querySelectorAll("skf-datepicker-calendar")];
|
178
|
+
return t.length ? (await f(
|
179
|
+
t,
|
180
|
+
[{ opacity: 0, transform: `translateX(calc(16px * ${e.toString()}))` }],
|
181
|
+
{ duration: 100, easing: "ease-in", fill: "backwards" }
|
182
|
+
), s(), await f(
|
183
|
+
t,
|
184
|
+
[
|
185
|
+
{ opacity: 0, transform: `translateX(${(-16 * e).toString()}px)` },
|
186
|
+
{ opacity: 1, transform: "translateX(0)" }
|
187
|
+
],
|
188
|
+
{ duration: 100, easing: "ease-out", fill: "backwards" }
|
189
|
+
)) : Promise.resolve();
|
190
|
+
}
|
191
|
+
};
|
192
|
+
m.styles = [C, T];
|
193
|
+
let n = m;
|
194
|
+
i([
|
195
|
+
l({ reflect: !0 })
|
196
|
+
], n.prototype, "locale", 2);
|
197
|
+
i([
|
198
|
+
l({ type: String, reflect: !0 })
|
199
|
+
], n.prototype, "date", 2);
|
200
|
+
i([
|
201
|
+
l({ type: String })
|
202
|
+
], n.prototype, "id", 2);
|
203
|
+
i([
|
204
|
+
l({ attribute: "invalid-dates" })
|
205
|
+
], n.prototype, "invalidDates", 2);
|
206
|
+
i([
|
207
|
+
l({ type: Boolean })
|
208
|
+
], n.prototype, "range", 2);
|
209
|
+
i([
|
210
|
+
p()
|
211
|
+
], n.prototype, "selectedDate", 2);
|
212
|
+
i([
|
213
|
+
l({ attribute: "selectable-from" })
|
214
|
+
], n.prototype, "selectableFrom", 2);
|
215
|
+
i([
|
216
|
+
l({ attribute: "selectable-to" })
|
217
|
+
], n.prototype, "selectableTo", 2);
|
218
|
+
i([
|
219
|
+
p()
|
220
|
+
], n.prototype, "selectedDateRange", 2);
|
221
|
+
i([
|
222
|
+
p()
|
223
|
+
], n.prototype, "_date", 2);
|
224
|
+
i([
|
225
|
+
p()
|
226
|
+
], n.prototype, "_datePlusOneMonth", 2);
|
227
|
+
i([
|
228
|
+
g("range")
|
229
|
+
], n.prototype, "_handleRangeChange", 1);
|
230
|
+
i([
|
231
|
+
g("date")
|
232
|
+
], n.prototype, "_handleDateChange", 1);
|
233
|
+
i([
|
234
|
+
g("selectedDateRange")
|
235
|
+
], n.prototype, "_handleSelectedDateRangeChange", 1);
|
236
|
+
i([
|
237
|
+
g("selectedDate")
|
238
|
+
], n.prototype, "_handleSelectedDateChange", 1);
|
239
|
+
export {
|
240
|
+
n as SkfDatePicker
|
241
|
+
};
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import { SkfDatePickerCalendar } from './datepicker.calendar.component.js';
|
2
|
+
import { SkfDatePicker } from './datepicker.component.js';
|
3
|
+
export * from './datepicker.component.js';
|
4
|
+
export default SkfDatePicker;
|
5
|
+
declare global {
|
6
|
+
interface HTMLElementTagNameMap {
|
7
|
+
'skf-datepicker': SkfDatePicker;
|
8
|
+
'skf-datepicker-calendar': SkfDatePickerCalendar;
|
9
|
+
}
|
10
|
+
}
|
@@ -0,0 +1,40 @@
|
|
1
|
+
import { Temporal } from '@js-temporal/polyfill';
|
2
|
+
/**
|
3
|
+
* A nifty little waapi wrapper helper that
|
4
|
+
* mainly turns the onfinished callback to a promise.
|
5
|
+
* But also allows animations on multiple targets.
|
6
|
+
*/
|
7
|
+
export declare function doAnimate(target: Element | Element[] | HTMLElement | HTMLElement[], keyframes: Keyframe | Keyframe[], options: KeyframeAnimationOptions): Promise<PromiseSettledResult<any>[]>;
|
8
|
+
/**
|
9
|
+
* @param date - optional date to get parts from, uses todays date if not provided
|
10
|
+
* @returns destructable object with year, month and day. NB: month is 0 based.
|
11
|
+
*/
|
12
|
+
export declare function getDateParts(date?: undefined | string | Date | Temporal.PlainDate): {
|
13
|
+
year: number;
|
14
|
+
month: number;
|
15
|
+
day: number;
|
16
|
+
};
|
17
|
+
/**
|
18
|
+
* @param dateOne - first date to compare as string
|
19
|
+
* @param dateTwo - second date to compare as string
|
20
|
+
* @returns - 0 if the dates are the same, 1 if dateOne is after dateTwo, -1 if dateOne is before dateTwo
|
21
|
+
*/
|
22
|
+
export declare function compareDates(dateOne: Temporal.PlainDate | string, dateTwo: Temporal.PlainDate | string): 0 | 1 | -1;
|
23
|
+
/**
|
24
|
+
* @param dateOne - first date to compare as string
|
25
|
+
* @param dateTwo - second date to compare as string
|
26
|
+
* @param unit - the unit to compare the dates by [days, months, years]
|
27
|
+
* @returns the difference between the two dates in the specified unit
|
28
|
+
*/
|
29
|
+
export declare function timeBetween(dateOne: Temporal.PlainDate | string, dateTwo: Temporal.PlainDate | string, unit?: 'days' | 'months' | 'years'): number;
|
30
|
+
/**
|
31
|
+
* @param dates - a list of dates to compare
|
32
|
+
* @returns - the earliest date of the list
|
33
|
+
*/
|
34
|
+
export declare function earliestDate(...dates: (string | Date)[]): string;
|
35
|
+
/**
|
36
|
+
* @param dates - a list of dates to compare
|
37
|
+
* @returns the latest date of the list
|
38
|
+
*/
|
39
|
+
export declare function latestDate(...dates: (string | Date)[]): string;
|
40
|
+
export declare function assertISODate(date: string | Temporal.PlainDate | Date): string;
|
@@ -0,0 +1,69 @@
|
|
1
|
+
import { Temporal as s } from "@js-temporal/polyfill";
|
2
|
+
function h(t, n, e) {
|
3
|
+
const o = (r) => Array.isArray(r) ? r : [r], a = o(t);
|
4
|
+
n = o(n);
|
5
|
+
const f = [];
|
6
|
+
for (const r of a) {
|
7
|
+
const { promise: i, resolve: c, reject: D } = Promise.withResolvers(), l = r.animate(n, {
|
8
|
+
fill: "forwards",
|
9
|
+
duration: 300,
|
10
|
+
iterations: 1,
|
11
|
+
...e
|
12
|
+
});
|
13
|
+
l.onfinish = () => c("finished"), l.oncancel = () => D("canceled"), f.push(i);
|
14
|
+
}
|
15
|
+
return Promise.allSettled(f);
|
16
|
+
}
|
17
|
+
function w(t = s.Now.plainDateISO()) {
|
18
|
+
return t ?? (t = s.Now.plainDateISO()), t instanceof Date && (t = s.PlainDate.from(t.toISOString())), typeof t == "string" && (t = s.PlainDate.from(u(t))), {
|
19
|
+
year: t.year,
|
20
|
+
month: t.month - 1,
|
21
|
+
// new Date is 0 based
|
22
|
+
day: t.day
|
23
|
+
};
|
24
|
+
}
|
25
|
+
function y(t, n) {
|
26
|
+
const e = m(t, n);
|
27
|
+
return o(e);
|
28
|
+
function o(a) {
|
29
|
+
return Math.max(-1, Math.min(a, 1));
|
30
|
+
}
|
31
|
+
}
|
32
|
+
function m(t, n, e = "days") {
|
33
|
+
return typeof t == "string" && (t = s.PlainDate.from(t)), typeof n == "string" && (n = s.PlainDate.from(n)), console.assert(
|
34
|
+
t instanceof s.PlainDate && n instanceof s.PlainDate,
|
35
|
+
`Invalid date was sent to helper function timeBetween(). Got ${JSON.stringify(t)} and ${JSON.stringify(n)} passed in`
|
36
|
+
), t.since(n).total({ unit: e });
|
37
|
+
}
|
38
|
+
function p(...t) {
|
39
|
+
if (t.length === 0)
|
40
|
+
throw new Error("At least one date must be provided");
|
41
|
+
const n = (i) => i instanceof Date, e = t.map((i) => n(i) ? i : new Date(i));
|
42
|
+
if (e.length === 1)
|
43
|
+
return e[0].toISOString().split("T")[0];
|
44
|
+
const [o, ...a] = e, f = p(...a), r = new Date(f);
|
45
|
+
return o < r ? o.toISOString().split("T")[0] : r.toISOString().split("T")[0];
|
46
|
+
}
|
47
|
+
function S(...t) {
|
48
|
+
if (t.length === 0)
|
49
|
+
throw new Error("At least one date must be provided");
|
50
|
+
const n = (i) => i instanceof Date, e = t.map((i) => n(i) ? i : new Date(i));
|
51
|
+
if (e.length === 1)
|
52
|
+
return e[0].toISOString().split("T")[0];
|
53
|
+
const [o, ...a] = e, f = S(...a), r = new Date(f);
|
54
|
+
return o > r ? o.toISOString().split("T")[0] : r.toISOString().split("T")[0];
|
55
|
+
}
|
56
|
+
function u(t) {
|
57
|
+
if (t instanceof Date && (t = s.PlainDate.from(t.toISOString())), typeof t != "string" && (t = t.toString()), !/^\d{4}-\d{2}-\d{2}$/.test(t))
|
58
|
+
throw new Error(`Invalid date format. Got ${t} passed in.`);
|
59
|
+
return t;
|
60
|
+
}
|
61
|
+
export {
|
62
|
+
u as assertISODate,
|
63
|
+
y as compareDates,
|
64
|
+
h as doAnimate,
|
65
|
+
p as earliestDate,
|
66
|
+
w as getDateParts,
|
67
|
+
S as latestDate,
|
68
|
+
m as timeBetween
|
69
|
+
};
|
@@ -0,0 +1,8 @@
|
|
1
|
+
import { SkfDatePickerCalendar as e } from "./datepicker.calendar.component.js";
|
2
|
+
import { SkfDatePicker as r } from "./datepicker.component.js";
|
3
|
+
r.define("skf-datepicker");
|
4
|
+
e.define("skf-datepicker-calendar");
|
5
|
+
export {
|
6
|
+
r as SkfDatePicker,
|
7
|
+
r as default
|
8
|
+
};
|
@@ -0,0 +1 @@
|
|
1
|
+
export declare const styles: import("lit").CSSResult;
|