minerva-design 1.0.0 → 1.0.2
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 +12 -0
- package/custom-elements.json +663 -0
- package/dist/angular/fesm2022/minerva-angular.mjs +1163 -34
- package/dist/angular/fesm2022/minerva-angular.mjs.map +1 -1
- package/dist/angular/types/minerva-angular.d.ts +237 -1
- package/dist/core/calendar-date.d.cts +5 -0
- package/dist/core/calendar-date.d.ts +5 -0
- package/dist/core/contracts.cjs +1 -1
- package/dist/core/contracts.cjs.map +1 -1
- package/dist/core/contracts.js +1 -1
- package/dist/core/contracts.js.map +1 -1
- package/dist/core/index.cjs +6 -6
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.js +671 -630
- package/dist/core/index.js.map +1 -1
- package/dist/core/styling-hooks/components/date-picker.d.cts +45 -0
- package/dist/core/styling-hooks/components/date-picker.d.ts +45 -0
- package/dist/core/styling-hooks/manifest.d.cts +44 -0
- package/dist/core/styling-hooks/manifest.d.ts +44 -0
- package/dist/core/styling-hooks.cjs +1 -1
- package/dist/core/styling-hooks.cjs.map +1 -1
- package/dist/core/styling-hooks.js +62 -0
- package/dist/core/styling-hooks.js.map +1 -1
- package/dist/native/components/Calendar/Calendar.cjs +1 -1
- package/dist/native/components/Calendar/Calendar.cjs.map +1 -1
- package/dist/native/components/Calendar/Calendar.d.cts +2 -0
- package/dist/native/components/Calendar/Calendar.d.ts +2 -0
- package/dist/native/components/Calendar/Calendar.js +115 -112
- package/dist/native/components/Calendar/Calendar.js.map +1 -1
- package/dist/native/components/Checkbox/Checkbox.cjs +1 -1
- package/dist/native/components/Checkbox/Checkbox.cjs.map +1 -1
- package/dist/native/components/Checkbox/Checkbox.js +8 -8
- package/dist/native/components/Checkbox/CheckboxGroup.cjs +1 -1
- package/dist/native/components/Checkbox/CheckboxGroup.cjs.map +1 -1
- package/dist/native/components/Checkbox/CheckboxGroup.js +6 -6
- package/dist/native/components/DatePicker/DatePicker.cjs +2 -0
- package/dist/native/components/DatePicker/DatePicker.cjs.map +1 -0
- package/dist/native/components/DatePicker/DatePicker.d.cts +40 -0
- package/dist/native/components/DatePicker/DatePicker.d.ts +40 -0
- package/dist/native/components/DatePicker/DatePicker.js +110 -0
- package/dist/native/components/DatePicker/DatePicker.js.map +1 -0
- package/dist/native/components/DatePicker/index.cjs +1 -0
- package/dist/native/components/DatePicker/index.d.cts +2 -0
- package/dist/native/components/DatePicker/index.d.ts +2 -0
- package/dist/native/components/DatePicker/index.js +2 -0
- package/dist/native/components/Radio/RadioGroup.cjs +1 -1
- package/dist/native/components/Radio/RadioGroup.cjs.map +1 -1
- package/dist/native/components/Radio/RadioGroup.js +9 -9
- package/dist/native/components/Switch/Switch.cjs +1 -1
- package/dist/native/components/Switch/Switch.cjs.map +1 -1
- package/dist/native/components/Switch/Switch.js +23 -23
- package/dist/native/components/Switch/Switch.js.map +1 -1
- package/dist/native/index.cjs +1 -1
- package/dist/native/index.d.cts +1 -0
- package/dist/native/index.d.ts +1 -0
- package/dist/native/index.js +70 -68
- package/dist/native/source/components/Calendar/Calendar.tsx +14 -6
- package/dist/native/source/components/DatePicker/DatePicker.tsx +201 -0
- package/dist/native/source/components/DatePicker/index.ts +2 -0
- package/dist/native/source/index.ts +1 -0
- package/dist/native/source/manifest.ts +6 -0
- package/dist/react/components/DatePicker/DatePicker.cjs +2 -0
- package/dist/react/components/DatePicker/DatePicker.cjs.map +1 -0
- package/dist/react/components/DatePicker/DatePicker.d.cts +13 -0
- package/dist/react/components/DatePicker/DatePicker.d.ts +13 -0
- package/dist/react/components/DatePicker/DatePicker.js +315 -0
- package/dist/react/components/DatePicker/DatePicker.js.map +1 -0
- package/dist/react/components/DatePicker/datePicker.module.scss.cjs +2 -0
- package/dist/react/components/DatePicker/datePicker.module.scss.cjs.map +1 -0
- package/dist/react/components/DatePicker/datePicker.module.scss.js +23 -0
- package/dist/react/components/DatePicker/datePicker.module.scss.js.map +1 -0
- package/dist/react/components/DatePicker/index.cjs +1 -0
- package/dist/react/components/DatePicker/index.d.cts +5 -0
- package/dist/react/components/DatePicker/index.d.ts +5 -0
- package/dist/react/components/DatePicker/index.js +3 -0
- package/dist/react/components/DatePicker/types.d.cts +97 -0
- package/dist/react/components/DatePicker/types.d.ts +97 -0
- package/dist/react/components/Tooltip/Tooltip.cjs +1 -1
- package/dist/react/components/Tooltip/Tooltip.cjs.map +1 -1
- package/dist/react/components/Tooltip/Tooltip.js +5 -5
- package/dist/react/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/react/components/index.cjs +1 -1
- package/dist/react/components/index.d.cts +1 -0
- package/dist/react/components/index.d.ts +1 -0
- package/dist/react/components/index.js +3 -1
- package/dist/react/index.cjs +1 -1
- package/dist/react/index.js +7 -6
- package/dist/react/style.css +1 -0
- package/dist/react/styles/date-picker.css +7 -0
- package/dist/taro/date-picker.d.ts +20 -0
- package/dist/taro/index.d.ts +1 -0
- package/dist/taro/index.js +1155 -990
- package/dist/uni/DatePicker.vue +225 -0
- package/dist/uni/DatePicker.vue.d.ts +36 -0
- package/dist/uni/MonthCalendar.vue +2 -0
- package/dist/uni/MonthCalendar.vue.d.ts +2 -0
- package/dist/uni/index.d.ts +1 -0
- package/dist/uni/index.js +1 -0
- package/dist/uni/manifest.d.ts +7 -0
- package/dist/uni/manifest.js +8 -0
- package/dist/vue/components/DatePicker/DatePicker.vue.d.ts +36 -0
- package/dist/vue/components/DatePicker/DatePicker.vue.js +7 -0
- package/dist/vue/components/DatePicker/DatePicker.vue.js.map +1 -0
- package/dist/vue/components/DatePicker/DatePicker.vue_vue_type_script_setup_true_lang.js +380 -0
- package/dist/vue/components/DatePicker/DatePicker.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/DatePicker/index.d.ts +2 -0
- package/dist/vue/components/DatePicker/index.js +2 -0
- package/dist/vue/components/DatePicker/types.d.ts +26 -0
- package/dist/vue/components/MonthCalendar/MonthCalendar.vue.d.ts +1 -1
- package/dist/vue/global.d.ts +108 -0
- package/dist/vue/groups/forms-pickers.d.ts +1 -0
- package/dist/vue/groups/forms-pickers.js +5 -2
- package/dist/vue/groups/forms-pickers.js.map +1 -1
- package/dist/vue/index.js +95 -94
- package/dist/weapp/controls.js +259 -76
- package/dist/weapp/date-picker/index.js +1 -0
- package/dist/weapp/date-picker/index.json +1 -0
- package/dist/weapp/date-picker/index.wxml +1 -0
- package/dist/weapp/date-picker/index.wxss +1 -0
- package/dist/weapp/types.d.ts +19 -0
- package/dist/web-components/cdn/minerva.js +461 -335
- package/dist/web-components/cdn/minerva.js.map +1 -1
- package/dist/web-components/components/date-picker/date-picker.d.ts +110 -0
- package/dist/web-components/components/date-picker/date-picker.js +378 -0
- package/dist/web-components/components/date-picker/date-picker.js.map +1 -0
- package/dist/web-components/elements/date-picker.d.ts +1 -0
- package/dist/web-components/elements/date-picker.js +8 -0
- package/dist/web-components/elements/date-picker.js.map +1 -0
- package/dist/web-components/html-custom-data.json +85 -0
- package/dist/web-components/index.d.ts +1 -0
- package/dist/web-components/index.js +8 -6
- package/dist/web-components/styles/DatePicker/datePicker.css.js +6 -0
- package/dist/web-components/styles/DatePicker/datePicker.css.js.map +1 -0
- package/dist/web-components/types/react.d.ts +12 -0
- package/dist/web-components/types/solid.d.ts +9 -0
- package/dist/web-components/types/svelte.d.ts +9 -0
- package/dist/web-components/types/vue.d.ts +10 -0
- package/package.json +9 -1
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { PropertyValues } from 'lit';
|
|
2
|
+
import { FormAssociatedElement, ValidityResult } from '../../internal/form.js';
|
|
3
|
+
/**
|
|
4
|
+
* Type a calendar date or choose it from an accessible popup month grid.
|
|
5
|
+
* Form-associated: submits YYYY-MM-DD, supports required, reset and disabled fieldsets.
|
|
6
|
+
* @summary Date field with a keyboard-accessible popup calendar and inclusive date bounds.
|
|
7
|
+
* @tag minerva-date-picker
|
|
8
|
+
* @csspart root - Field wrapper
|
|
9
|
+
* @csspart control - Input box
|
|
10
|
+
* @csspart input - Native text input
|
|
11
|
+
* @csspart clear-button - Clear action
|
|
12
|
+
* @csspart icon - Calendar icon
|
|
13
|
+
* @csspart content - Popup dialog
|
|
14
|
+
* @csspart day - Calendar day cell
|
|
15
|
+
* @fires minerva-change - Committed date, detail: { value }; empty string when cleared
|
|
16
|
+
* @fires minerva-input - Draft input text, detail: { value }
|
|
17
|
+
* @fires minerva-open-change - Cancelable popup change, detail: { open }
|
|
18
|
+
* @fires minerva-clear - Cleared date
|
|
19
|
+
* @fires change - Native-like bubbling change after a committed date
|
|
20
|
+
*/
|
|
21
|
+
export declare class MinervaDatePicker extends FormAssociatedElement {
|
|
22
|
+
static tagName: string;
|
|
23
|
+
static shadowRootOptions: {
|
|
24
|
+
delegatesFocus: boolean;
|
|
25
|
+
clonable?: boolean;
|
|
26
|
+
customElementRegistry?: CustomElementRegistry | null;
|
|
27
|
+
mode: ShadowRootMode;
|
|
28
|
+
serializable?: boolean;
|
|
29
|
+
slotAssignment?: SlotAssignmentMode;
|
|
30
|
+
};
|
|
31
|
+
static styles: import('lit').CSSResultGroup[];
|
|
32
|
+
/** Name submitted with form data. */
|
|
33
|
+
name: string;
|
|
34
|
+
/** Current date (YYYY-MM-DD), or empty; property assignment controls the current value. */
|
|
35
|
+
value: string;
|
|
36
|
+
/** Initial date, restored by form reset. */
|
|
37
|
+
defaultValue: string;
|
|
38
|
+
/** Whether the calendar is open. */
|
|
39
|
+
open: boolean;
|
|
40
|
+
/** Accessible field and popup label. */
|
|
41
|
+
label?: string;
|
|
42
|
+
/** Input placeholder; localized by default. */
|
|
43
|
+
placeholder?: string;
|
|
44
|
+
/** Calendar heading locale. */
|
|
45
|
+
locale?: string;
|
|
46
|
+
/** Input control size. */
|
|
47
|
+
size: "small" | "medium" | "large";
|
|
48
|
+
/** Error state. */
|
|
49
|
+
invalid: boolean;
|
|
50
|
+
/** Prevents typing, selection and clearing. */
|
|
51
|
+
readOnly: boolean;
|
|
52
|
+
/** Hides the clear action. */
|
|
53
|
+
hideClearButton: boolean;
|
|
54
|
+
/** Earliest selectable date, inclusive (YYYY-MM-DD). */
|
|
55
|
+
minDate?: string;
|
|
56
|
+
/** Latest selectable date, inclusive (YYYY-MM-DD). */
|
|
57
|
+
maxDate?: string;
|
|
58
|
+
private draft;
|
|
59
|
+
private month;
|
|
60
|
+
private focusedKey;
|
|
61
|
+
private input?;
|
|
62
|
+
private field?;
|
|
63
|
+
private popup?;
|
|
64
|
+
private dirty;
|
|
65
|
+
private pendingFocus;
|
|
66
|
+
private readonly i18n;
|
|
67
|
+
private readonly aria;
|
|
68
|
+
private readonly floating;
|
|
69
|
+
/** Current date as a local Date, null when empty or invalid. */
|
|
70
|
+
get valueAsDate(): Date | null;
|
|
71
|
+
focus(options?: FocusOptions): void;
|
|
72
|
+
blur(): void;
|
|
73
|
+
private get interactive();
|
|
74
|
+
private allowed;
|
|
75
|
+
protected getFormValue(): string;
|
|
76
|
+
protected getValidity(): ValidityResult;
|
|
77
|
+
protected resetFormValue(): void;
|
|
78
|
+
protected restoreFormState(state: unknown): void;
|
|
79
|
+
protected willUpdate(changed: PropertyValues<this>): void;
|
|
80
|
+
protected updated(changed: PropertyValues<this>): void;
|
|
81
|
+
private requestOpenChange;
|
|
82
|
+
private commit;
|
|
83
|
+
private handleInput;
|
|
84
|
+
private handleBlur;
|
|
85
|
+
private handleClear;
|
|
86
|
+
private handleInputClick;
|
|
87
|
+
private handleInputKeyDown;
|
|
88
|
+
private select;
|
|
89
|
+
private handleDayKeyDown;
|
|
90
|
+
private renderPanel;
|
|
91
|
+
protected hookStates(): {
|
|
92
|
+
placement: import('@floating-ui/dom').Placement | undefined;
|
|
93
|
+
side: import('../../../dom/index.js').Side | undefined;
|
|
94
|
+
align: import('../../../dom/index.js').Align | undefined;
|
|
95
|
+
state: string;
|
|
96
|
+
disabled: boolean;
|
|
97
|
+
readonly: boolean;
|
|
98
|
+
invalid: boolean;
|
|
99
|
+
size: "small" | "medium" | "large";
|
|
100
|
+
};
|
|
101
|
+
private handlePanelKeyDown;
|
|
102
|
+
/** The first tabbable element of the page after this element. */
|
|
103
|
+
private tabbableAfter;
|
|
104
|
+
protected render(): import('lit').TemplateResult<1>;
|
|
105
|
+
}
|
|
106
|
+
declare global {
|
|
107
|
+
interface HTMLElementTagNameMap {
|
|
108
|
+
"minerva-date-picker": MinervaDatePicker;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
import { AriaController as e } from "../../internal/aria.js";
|
|
2
|
+
import { IconCalendar as t, IconChevronLeft as n, IconChevronRight as r, IconX as i } from "../../internal/icons.js";
|
|
3
|
+
import { LocaleController as a } from "../../internal/locale.js";
|
|
4
|
+
import { hostStyles as o } from "../../internal/minerva-element.js";
|
|
5
|
+
import { sharedStyles as s } from "../../internal/styles.js";
|
|
6
|
+
import c from "../../_virtual/_@oxc-project_runtime@0.152.0/helpers/esm/decorate.js";
|
|
7
|
+
import l from "../../styles/IconButton/iconButton.css.js";
|
|
8
|
+
import { FloatingLayerController as u, popoverResetStyles as d } from "../../controllers/floating-layer.js";
|
|
9
|
+
import f from "../../styles/Input/input.css.js";
|
|
10
|
+
import { FormAssociatedElement as p } from "../../internal/form.js";
|
|
11
|
+
import m from "../../styles/DatePicker/datePicker.css.js";
|
|
12
|
+
import { css as h, html as g, nothing as _ } from "lit";
|
|
13
|
+
import { property as v, query as y, state as b } from "lit/decorators.js";
|
|
14
|
+
import { classMap as x } from "lit/directives/class-map.js";
|
|
15
|
+
import { contains as S, getTabbables as C, logicalArrowKey as w, parsePlacement as T } from "../../../dom/index.js";
|
|
16
|
+
import { addDays as E, dayKey as D, localDate as O, monthStart as k, parseDayKey as A, sameMonth as j } from "../../../core/index.js";
|
|
17
|
+
import { live as M } from "lit/directives/live.js";
|
|
18
|
+
//#region src/components/date-picker/date-picker.ts
|
|
19
|
+
var N = [
|
|
20
|
+
"mon",
|
|
21
|
+
"tue",
|
|
22
|
+
"wed",
|
|
23
|
+
"thu",
|
|
24
|
+
"fri",
|
|
25
|
+
"sat",
|
|
26
|
+
"sun"
|
|
27
|
+
], P = class extends p {
|
|
28
|
+
constructor(...t) {
|
|
29
|
+
super(...t), this.name = "date-picker", this.value = "", this.defaultValue = "", this.open = !1, this.size = "medium", this.invalid = !1, this.readOnly = !1, this.hideClearButton = !1, this.draft = null, this.month = k(/* @__PURE__ */ new Date()), this.focusedKey = "", this.dirty = !1, this.pendingFocus = !1, this.i18n = new a(this), this.aria = new e(this, () => this.labels), this.floating = new u(this, () => ({
|
|
30
|
+
anchor: () => this.input,
|
|
31
|
+
floating: () => this.popup,
|
|
32
|
+
placement: "bottom-start",
|
|
33
|
+
branches: () => [this.field],
|
|
34
|
+
onDismiss: () => this.requestOpenChange(!1),
|
|
35
|
+
returnFocusOnEscape: () => this.input,
|
|
36
|
+
focusable: !0
|
|
37
|
+
}));
|
|
38
|
+
}
|
|
39
|
+
static {
|
|
40
|
+
this.tagName = "minerva-date-picker";
|
|
41
|
+
}
|
|
42
|
+
static {
|
|
43
|
+
this.shadowRootOptions = {
|
|
44
|
+
...p.shadowRootOptions,
|
|
45
|
+
delegatesFocus: !0
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
static {
|
|
49
|
+
this.styles = [
|
|
50
|
+
o,
|
|
51
|
+
d,
|
|
52
|
+
h`
|
|
53
|
+
:host{
|
|
54
|
+
display: inline-block;
|
|
55
|
+
vertical-align: middle;
|
|
56
|
+
}
|
|
57
|
+
.datePicker .root{
|
|
58
|
+
width: 100%;
|
|
59
|
+
}
|
|
60
|
+
`,
|
|
61
|
+
s(f),
|
|
62
|
+
s(l),
|
|
63
|
+
s(m)
|
|
64
|
+
];
|
|
65
|
+
}
|
|
66
|
+
get valueAsDate() {
|
|
67
|
+
return A(this.value || "", !0);
|
|
68
|
+
}
|
|
69
|
+
focus(e) {
|
|
70
|
+
this.input?.focus(e);
|
|
71
|
+
}
|
|
72
|
+
blur() {
|
|
73
|
+
this.input?.blur();
|
|
74
|
+
}
|
|
75
|
+
get interactive() {
|
|
76
|
+
return !this.isDisabled && !this.readOnly;
|
|
77
|
+
}
|
|
78
|
+
allowed(e) {
|
|
79
|
+
return !!A(e, !0) && (!this.minDate || e >= this.minDate) && (!this.maxDate || e <= this.maxDate);
|
|
80
|
+
}
|
|
81
|
+
getFormValue() {
|
|
82
|
+
return this.valueAsDate ? D(this.valueAsDate) : "";
|
|
83
|
+
}
|
|
84
|
+
getValidity() {
|
|
85
|
+
return this.required && !this.valueAsDate ? {
|
|
86
|
+
flags: { valueMissing: !0 },
|
|
87
|
+
message: this.i18n.t("validation.valueMissing"),
|
|
88
|
+
anchor: this.input
|
|
89
|
+
} : this.valueAsDate && !this.allowed(this.value) ? {
|
|
90
|
+
flags: { customError: !0 },
|
|
91
|
+
message: [this.minDate, this.maxDate].filter(Boolean).join(" – "),
|
|
92
|
+
anchor: this.input
|
|
93
|
+
} : {
|
|
94
|
+
flags: {},
|
|
95
|
+
message: ""
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
resetFormValue() {
|
|
99
|
+
this.dirty = !1, this.draft = null, this.value = this.defaultValue, this.open = !1;
|
|
100
|
+
}
|
|
101
|
+
restoreFormState(e) {
|
|
102
|
+
typeof e == "string" && (this.value = e);
|
|
103
|
+
}
|
|
104
|
+
willUpdate(e) {
|
|
105
|
+
e.has("value") && e.get("value") !== void 0 && (this.dirty = this.value !== this.defaultValue || this.dirty), e.has("defaultValue") && !this.dirty && (this.hasUpdated || this.hasAttribute("value")) && (this.value = this.defaultValue), e.has("open") && this.open && (this.month = k(this.valueAsDate ?? /* @__PURE__ */ new Date()), this.focusedKey = D(this.valueAsDate ?? /* @__PURE__ */ new Date()));
|
|
106
|
+
}
|
|
107
|
+
updated(e) {
|
|
108
|
+
super.updated(e), this.floating.sync(this.open && this.interactive), this.open && this.pendingFocus && (this.popup?.querySelector(`[data-date="${this.focusedKey}"]`)?.focus(), this.pendingFocus = !1);
|
|
109
|
+
}
|
|
110
|
+
requestOpenChange(e) {
|
|
111
|
+
if (e && !this.interactive) return !1;
|
|
112
|
+
if (e === this.open) return !0;
|
|
113
|
+
let t = this.emit("minerva-open-change", { open: e }, { cancelable: !0 });
|
|
114
|
+
return t && (this.open = e), t;
|
|
115
|
+
}
|
|
116
|
+
commit(e) {
|
|
117
|
+
!this.interactive || e && !this.allowed(e) || (this.dirty = !0, this.value = e, this.dispatchEvent(new Event("change", { bubbles: !0 })), this.emit("minerva-change", { value: e }));
|
|
118
|
+
}
|
|
119
|
+
handleInput(e) {
|
|
120
|
+
if (!this.interactive) return;
|
|
121
|
+
let t = e.target.value;
|
|
122
|
+
this.draft = t, this.emit("minerva-input", { value: t }), (!t || this.allowed(t)) && (this.commit(t), t && (this.month = k(A(t))));
|
|
123
|
+
}
|
|
124
|
+
handleBlur() {
|
|
125
|
+
if (this.draft === null) return;
|
|
126
|
+
let e = A(this.draft.trim(), !1), t = e ? D(e) : "";
|
|
127
|
+
this.draft.trim() ? e && this.allowed(t) && t !== this.value && (this.commit(t), this.month = k(e)) : this.value && this.commit(""), this.draft = null;
|
|
128
|
+
}
|
|
129
|
+
handleClear() {
|
|
130
|
+
this.interactive && (this.draft = null, this.commit(""), this.emit("minerva-clear"), this.input?.focus());
|
|
131
|
+
}
|
|
132
|
+
handleInputClick() {
|
|
133
|
+
this.requestOpenChange(!this.open);
|
|
134
|
+
}
|
|
135
|
+
handleInputKeyDown(e) {
|
|
136
|
+
e.key === "ArrowDown" && this.interactive && (e.preventDefault(), this.pendingFocus = !0, this.open ? this.requestUpdate() : this.requestOpenChange(!0) || (this.pendingFocus = !1));
|
|
137
|
+
}
|
|
138
|
+
select(e) {
|
|
139
|
+
this.interactive && this.allowed(D(e)) && (this.draft = null, this.commit(D(e)), this.requestOpenChange(!1), this.input?.focus());
|
|
140
|
+
}
|
|
141
|
+
handleDayKeyDown(e, t) {
|
|
142
|
+
if (!this.interactive) return;
|
|
143
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
144
|
+
e.preventDefault(), e.repeat || this.select(t);
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
let n = w(e.key, this), r = (t.getDay() + 6) % 7, i;
|
|
148
|
+
switch (n) {
|
|
149
|
+
case "ArrowLeft":
|
|
150
|
+
i = E(t, -1);
|
|
151
|
+
break;
|
|
152
|
+
case "ArrowRight":
|
|
153
|
+
i = E(t, 1);
|
|
154
|
+
break;
|
|
155
|
+
case "ArrowUp":
|
|
156
|
+
i = E(t, -7);
|
|
157
|
+
break;
|
|
158
|
+
case "ArrowDown":
|
|
159
|
+
i = E(t, 7);
|
|
160
|
+
break;
|
|
161
|
+
case "Home":
|
|
162
|
+
i = E(t, -r);
|
|
163
|
+
break;
|
|
164
|
+
case "End":
|
|
165
|
+
i = E(t, 6 - r);
|
|
166
|
+
break;
|
|
167
|
+
case "PageUp":
|
|
168
|
+
case "PageDown": {
|
|
169
|
+
let r = k(t, (n === "PageUp" ? -1 : 1) * (e.shiftKey ? 12 : 1));
|
|
170
|
+
i = O(r.getFullYear(), r.getMonth(), Math.min(t.getDate(), E(k(r, 1), -1).getDate()));
|
|
171
|
+
break;
|
|
172
|
+
}
|
|
173
|
+
default: return;
|
|
174
|
+
}
|
|
175
|
+
e.preventDefault(), this.focusedKey = D(i), this.month = k(i), this.pendingFocus = !0;
|
|
176
|
+
}
|
|
177
|
+
renderPanel(e) {
|
|
178
|
+
let t = this.i18n.t, i = k(this.month), a = E(i, -((i.getDay() + 6) % 7)), o = Array.from({ length: 42 }, (e, t) => E(a, t)), s = o.map(D).includes(this.focusedKey) ? this.focusedKey : D(i), c;
|
|
179
|
+
try {
|
|
180
|
+
c = new Intl.DateTimeFormat(this.locale ?? this.i18n.language, {
|
|
181
|
+
month: "long",
|
|
182
|
+
year: "numeric"
|
|
183
|
+
}).format(i);
|
|
184
|
+
} catch {
|
|
185
|
+
c = D(i).slice(0, 7);
|
|
186
|
+
}
|
|
187
|
+
return g`<div
|
|
188
|
+
part="content"
|
|
189
|
+
class="popup"
|
|
190
|
+
popover="manual"
|
|
191
|
+
role="dialog"
|
|
192
|
+
tabindex="-1"
|
|
193
|
+
aria-label=${e}
|
|
194
|
+
@keydown=${this.handlePanelKeyDown}
|
|
195
|
+
>
|
|
196
|
+
<div class="panel">
|
|
197
|
+
<div class="header">
|
|
198
|
+
<h2 id="heading" class="heading" aria-live="polite">${c}</h2>
|
|
199
|
+
<div class="navGroup">
|
|
200
|
+
<button
|
|
201
|
+
type="button"
|
|
202
|
+
class="navButton"
|
|
203
|
+
aria-label=${t("monthCalendar.previousMonth")}
|
|
204
|
+
@click=${() => {
|
|
205
|
+
this.month = k(i, -1);
|
|
206
|
+
}}
|
|
207
|
+
>
|
|
208
|
+
${n}
|
|
209
|
+
</button>
|
|
210
|
+
<button
|
|
211
|
+
type="button"
|
|
212
|
+
class="navButton"
|
|
213
|
+
aria-label=${t("monthCalendar.nextMonth")}
|
|
214
|
+
@click=${() => {
|
|
215
|
+
this.month = k(i, 1);
|
|
216
|
+
}}
|
|
217
|
+
>
|
|
218
|
+
${r}
|
|
219
|
+
</button>
|
|
220
|
+
</div>
|
|
221
|
+
</div>
|
|
222
|
+
<div class="grid" role="grid" aria-labelledby="heading">
|
|
223
|
+
<div class="week" role="row">
|
|
224
|
+
${N.map((e) => g`<div class="weekday" role="columnheader">${t(`monthCalendar.weekdays.${e}`)}</div>`)}
|
|
225
|
+
</div>
|
|
226
|
+
${Array.from({ length: 6 }, (e, t) => g`<div class="week" role="row">
|
|
227
|
+
${o.slice(t * 7, t * 7 + 7).map((e) => {
|
|
228
|
+
let t = D(e);
|
|
229
|
+
return g`<div
|
|
230
|
+
part="day"
|
|
231
|
+
class="day"
|
|
232
|
+
role="gridcell"
|
|
233
|
+
data-date=${t}
|
|
234
|
+
?data-outside=${!j(e, i)}
|
|
235
|
+
aria-label=${t}
|
|
236
|
+
aria-selected=${String(t === this.value)}
|
|
237
|
+
aria-disabled=${this.allowed(t) ? _ : "true"}
|
|
238
|
+
aria-current=${t === D(/* @__PURE__ */ new Date()) ? "date" : _}
|
|
239
|
+
tabindex=${t === s && this.allowed(t) ? "0" : "-1"}
|
|
240
|
+
@focus=${() => {
|
|
241
|
+
this.focusedKey = t;
|
|
242
|
+
}}
|
|
243
|
+
@click=${() => this.select(e)}
|
|
244
|
+
@keydown=${(t) => this.handleDayKeyDown(t, e)}
|
|
245
|
+
>
|
|
246
|
+
${e.getDate()}
|
|
247
|
+
</div>`;
|
|
248
|
+
})}
|
|
249
|
+
</div>`)}
|
|
250
|
+
</div>
|
|
251
|
+
<div class="footer">
|
|
252
|
+
${!this.hideClearButton && this.value ? g`<button
|
|
253
|
+
class="footerButton"
|
|
254
|
+
type="button"
|
|
255
|
+
@click=${() => {
|
|
256
|
+
this.handleClear(), this.requestOpenChange(!1);
|
|
257
|
+
}}
|
|
258
|
+
>
|
|
259
|
+
${t("datePicker.clear")}
|
|
260
|
+
</button>` : _}
|
|
261
|
+
<button
|
|
262
|
+
class="footerButton"
|
|
263
|
+
type="button"
|
|
264
|
+
?disabled=${!this.allowed(D(/* @__PURE__ */ new Date()))}
|
|
265
|
+
@click=${() => this.select(/* @__PURE__ */ new Date())}
|
|
266
|
+
>
|
|
267
|
+
${t("monthCalendar.today")}</button
|
|
268
|
+
><button
|
|
269
|
+
class="footerButton"
|
|
270
|
+
type="button"
|
|
271
|
+
@click=${() => {
|
|
272
|
+
this.requestOpenChange(!1), this.input?.focus();
|
|
273
|
+
}}
|
|
274
|
+
>
|
|
275
|
+
${t("modal.close")}
|
|
276
|
+
</button>
|
|
277
|
+
</div>
|
|
278
|
+
</div>
|
|
279
|
+
</div>`;
|
|
280
|
+
}
|
|
281
|
+
hookStates() {
|
|
282
|
+
let e = this.open && this.floating.isOpen ? this.floating.position.placement : void 0, { side: t, align: n } = e ? T(e) : {
|
|
283
|
+
side: void 0,
|
|
284
|
+
align: void 0
|
|
285
|
+
};
|
|
286
|
+
return {
|
|
287
|
+
placement: e,
|
|
288
|
+
side: t,
|
|
289
|
+
align: n,
|
|
290
|
+
state: this.open && this.interactive ? "open" : "closed",
|
|
291
|
+
disabled: this.isDisabled,
|
|
292
|
+
readonly: this.readOnly,
|
|
293
|
+
invalid: this.invalid,
|
|
294
|
+
size: this.size
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
handlePanelKeyDown(e) {
|
|
298
|
+
let t = e.currentTarget, n = this.input;
|
|
299
|
+
if (!n || e.key !== "Tab" || e.altKey || e.ctrlKey || e.metaKey) return;
|
|
300
|
+
let r = this.shadowRoot?.activeElement ?? null;
|
|
301
|
+
if (!r || !t.contains(r)) return;
|
|
302
|
+
let i = C(t);
|
|
303
|
+
(i.length === 0 || (e.shiftKey ? r === t || r === i[0] : r === i[i.length - 1])) && (e.preventDefault(), (e.shiftKey ? n : this.shadowRoot?.querySelector(".clearButton") ?? this.tabbableAfter() ?? n).focus(), this.requestOpenChange(!1));
|
|
304
|
+
}
|
|
305
|
+
tabbableAfter() {
|
|
306
|
+
let e = C(this.ownerDocument.body), t = -1;
|
|
307
|
+
return e.forEach((e, n) => {
|
|
308
|
+
S(this, e) && (t = n);
|
|
309
|
+
}), t === -1 ? e.find((e) => !!(this.compareDocumentPosition(e) & Node.DOCUMENT_POSITION_FOLLOWING)) ?? null : e.slice(t + 1).find((e) => !S(this, e)) ?? null;
|
|
310
|
+
}
|
|
311
|
+
render() {
|
|
312
|
+
let { t: e } = this.i18n, n = this.isDisabled, r = this.readOnly, a = this.valueAsDate, o = this.label || this.aria.label || e("datePicker.label"), s = this.draft ?? (a ? D(a) : ""), c = !this.hideClearButton && !!a && !n && !r;
|
|
313
|
+
return g`<div part="root" class="datePicker">
|
|
314
|
+
<div
|
|
315
|
+
part="control"
|
|
316
|
+
class=${x({
|
|
317
|
+
root: !0,
|
|
318
|
+
outline: !0,
|
|
319
|
+
[this.size]: !0,
|
|
320
|
+
invalid: this.invalid,
|
|
321
|
+
disabled: n
|
|
322
|
+
})}
|
|
323
|
+
data-component="input"
|
|
324
|
+
>
|
|
325
|
+
<input
|
|
326
|
+
part="input"
|
|
327
|
+
class="field"
|
|
328
|
+
.value=${M(s)}
|
|
329
|
+
placeholder=${this.placeholder ?? e("datePicker.placeholder")}
|
|
330
|
+
?disabled=${n}
|
|
331
|
+
?readonly=${r}
|
|
332
|
+
?required=${this.required}
|
|
333
|
+
autocomplete="off"
|
|
334
|
+
aria-label=${o}
|
|
335
|
+
aria-description=${this.aria.description ?? _}
|
|
336
|
+
aria-invalid=${this.invalid || this.aria.attr("aria-invalid") === "true" ? "true" : _}
|
|
337
|
+
aria-readonly=${r ? "true" : _}
|
|
338
|
+
@input=${this.handleInput}
|
|
339
|
+
@blur=${this.handleBlur}
|
|
340
|
+
@click=${this.handleInputClick}
|
|
341
|
+
@keydown=${this.handleInputKeyDown}
|
|
342
|
+
/>
|
|
343
|
+
<span class="addon end">
|
|
344
|
+
${c ? g`<button
|
|
345
|
+
part="clear-button"
|
|
346
|
+
type="button"
|
|
347
|
+
class="iconButton neutral variant-ghost small circle clearButton"
|
|
348
|
+
aria-label=${e("datePicker.clear")}
|
|
349
|
+
@click=${this.handleClear}
|
|
350
|
+
>
|
|
351
|
+
${i}
|
|
352
|
+
</button>` : g`<span part="icon" class="calendarIcon" aria-hidden="true"
|
|
353
|
+
>${t}</span
|
|
354
|
+
>`}
|
|
355
|
+
</span>
|
|
356
|
+
</div>
|
|
357
|
+
</div>
|
|
358
|
+
${this.open && !n && !r ? this.renderPanel(o) : _}`;
|
|
359
|
+
}
|
|
360
|
+
};
|
|
361
|
+
c([v({ reflect: !0 })], P.prototype, "name", void 0), c([v({ attribute: !1 })], P.prototype, "value", void 0), c([v({ attribute: "value" })], P.prototype, "defaultValue", void 0), c([v({
|
|
362
|
+
type: Boolean,
|
|
363
|
+
reflect: !0
|
|
364
|
+
})], P.prototype, "open", void 0), c([v()], P.prototype, "label", void 0), c([v()], P.prototype, "placeholder", void 0), c([v()], P.prototype, "locale", void 0), c([v({ reflect: !0 })], P.prototype, "size", void 0), c([v({
|
|
365
|
+
type: Boolean,
|
|
366
|
+
reflect: !0
|
|
367
|
+
})], P.prototype, "invalid", void 0), c([v({
|
|
368
|
+
type: Boolean,
|
|
369
|
+
reflect: !0,
|
|
370
|
+
attribute: "readonly"
|
|
371
|
+
})], P.prototype, "readOnly", void 0), c([v({
|
|
372
|
+
type: Boolean,
|
|
373
|
+
attribute: "hide-clear-button"
|
|
374
|
+
})], P.prototype, "hideClearButton", void 0), c([v({ attribute: "min-date" })], P.prototype, "minDate", void 0), c([v({ attribute: "max-date" })], P.prototype, "maxDate", void 0), c([b()], P.prototype, "draft", void 0), c([b()], P.prototype, "month", void 0), c([b()], P.prototype, "focusedKey", void 0), c([y("input")], P.prototype, "input", void 0), c([y(".datePicker")], P.prototype, "field", void 0), c([y(".popup")], P.prototype, "popup", void 0);
|
|
375
|
+
//#endregion
|
|
376
|
+
export { P as MinervaDatePicker };
|
|
377
|
+
|
|
378
|
+
//# sourceMappingURL=date-picker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-picker.js","names":["inputStyles","iconButtonStyles","styles","_decorate","__decorate","iconButton_module_default","input_module_default","datePicker_module_default","WEEKDAYS","MinervaDatePicker","FormAssociatedElement","_args","monthStart","LocaleController","AriaController","FloatingLayerController","hostStyles","popoverResetStyles","sharedStyles","parseDayKey","options","value","dayKey","state","changed","open","allowed","text","event","parsed","next","date","key","logicalArrowKey","weekday","target","addDays","localDate","first","start","days","i","active","heading","name","IconChevronLeft","IconChevronRight","d","week","sameMonth","nothing","e","placement","parsePlacement","panel","input","focused","tabbables","getTabbables","all","last","contains","el","disabled","readonly","current","t","displayValue","showClear","classMap","live","IconX","IconCalendar","property","query"],"sources":["../../../../../web-components/src/components/date-picker/date-picker.ts"],"sourcesContent":["import { css, html, nothing, type PropertyValues } from \"lit\";\nimport { property, query, state } from \"lit/decorators.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport { live } from \"lit/directives/live.js\";\nimport {\n addDays,\n dayKey,\n localDate,\n monthStart,\n parseDayKey,\n sameMonth,\n} from \"@minerva/core\";\nimport {\n contains,\n getTabbables,\n logicalArrowKey,\n parsePlacement,\n} from \"@minerva/dom\";\nimport inputStyles from \"@react-styles/components/Input/input.module.scss?inline\";\nimport iconButtonStyles from \"@react-styles/components/IconButton/iconButton.module.scss?inline\";\nimport styles from \"@react-styles/components/DatePicker/datePicker.module.scss?inline\";\nimport {\n FloatingLayerController,\n popoverResetStyles,\n} from \"../../controllers/floating-layer\";\nimport { AriaController } from \"../../internal/aria\";\nimport {\n FormAssociatedElement,\n type ValidityResult,\n} from \"../../internal/form\";\nimport {\n IconCalendar,\n IconChevronLeft,\n IconChevronRight,\n IconX,\n} from \"../../internal/icons\";\nimport { LocaleController } from \"../../internal/locale\";\nimport { hostStyles } from \"../../internal/minerva-element\";\nimport { sharedStyles } from \"../../internal/styles\";\n\nconst WEEKDAYS = [\"mon\", \"tue\", \"wed\", \"thu\", \"fri\", \"sat\", \"sun\"] as const;\n\n/**\n * Type a calendar date or choose it from an accessible popup month grid.\n * Form-associated: submits YYYY-MM-DD, supports required, reset and disabled fieldsets.\n * @summary Date field with a keyboard-accessible popup calendar and inclusive date bounds.\n * @tag minerva-date-picker\n * @csspart root - Field wrapper\n * @csspart control - Input box\n * @csspart input - Native text input\n * @csspart clear-button - Clear action\n * @csspart icon - Calendar icon\n * @csspart content - Popup dialog\n * @csspart day - Calendar day cell\n * @fires minerva-change - Committed date, detail: { value }; empty string when cleared\n * @fires minerva-input - Draft input text, detail: { value }\n * @fires minerva-open-change - Cancelable popup change, detail: { open }\n * @fires minerva-clear - Cleared date\n * @fires change - Native-like bubbling change after a committed date\n */\nexport class MinervaDatePicker extends FormAssociatedElement {\n static override tagName = \"minerva-date-picker\";\n static override shadowRootOptions = {\n ...FormAssociatedElement.shadowRootOptions,\n delegatesFocus: true,\n };\n static override styles = [\n hostStyles,\n popoverResetStyles,\n css`\n:host{\ndisplay: inline-block;\nvertical-align: middle;\n}\n.datePicker .root{\nwidth: 100%;\n}\n`,\n sharedStyles(inputStyles),\n sharedStyles(iconButtonStyles),\n sharedStyles(styles),\n ];\n /** Name submitted with form data. */\n @property({ reflect: true }) override name = \"date-picker\";\n /** Current date (YYYY-MM-DD), or empty; property assignment controls the current value. */\n @property({ attribute: false }) value = \"\";\n /** Initial date, restored by form reset. */\n @property({ attribute: \"value\" }) defaultValue = \"\";\n /** Whether the calendar is open. */\n @property({ type: Boolean, reflect: true }) open = false;\n /** Accessible field and popup label. */\n @property() label?: string;\n /** Input placeholder; localized by default. */\n @property() placeholder?: string;\n /** Calendar heading locale. */\n @property() locale?: string;\n /** Input control size. */\n @property({ reflect: true }) size: \"small\" | \"medium\" | \"large\" = \"medium\";\n /** Error state. */\n @property({ type: Boolean, reflect: true }) invalid = false;\n /** Prevents typing, selection and clearing. */\n @property({ type: Boolean, reflect: true, attribute: \"readonly\" }) readOnly =\n false;\n /** Hides the clear action. */\n @property({ type: Boolean, attribute: \"hide-clear-button\" }) hideClearButton =\n false;\n /** Earliest selectable date, inclusive (YYYY-MM-DD). */\n @property({ attribute: \"min-date\" }) minDate?: string;\n /** Latest selectable date, inclusive (YYYY-MM-DD). */\n @property({ attribute: \"max-date\" }) maxDate?: string;\n @state() private draft: string | null = null;\n @state() private month = monthStart(new Date());\n @state() private focusedKey = \"\";\n @query(\"input\") private input?: HTMLInputElement;\n @query(\".datePicker\") private field?: HTMLElement;\n @query(\".popup\") private popup?: HTMLElement;\n private dirty = false;\n private pendingFocus = false;\n private readonly i18n = new LocaleController(this);\n private readonly aria = new AriaController(this, () => this.labels);\n private readonly floating = new FloatingLayerController(this, () => ({\n anchor: () => this.input,\n floating: () => this.popup,\n placement: \"bottom-start\",\n branches: () => [this.field],\n onDismiss: () => this.requestOpenChange(false),\n returnFocusOnEscape: () => this.input,\n focusable: true,\n }));\n /** Current date as a local Date, null when empty or invalid. */\n get valueAsDate() {\n return parseDayKey(this.value || \"\", true);\n }\n override focus(options?: FocusOptions) {\n this.input?.focus(options);\n }\n override blur() {\n this.input?.blur();\n }\n private get interactive() {\n return !this.isDisabled && !this.readOnly;\n }\n private allowed(value: string) {\n return (\n !!parseDayKey(value, true) &&\n (!this.minDate || value >= this.minDate) &&\n (!this.maxDate || value <= this.maxDate)\n );\n }\n protected getFormValue() {\n return this.valueAsDate ? dayKey(this.valueAsDate) : \"\";\n }\n protected override getValidity(): ValidityResult {\n if (this.required && !this.valueAsDate)\n return {\n flags: { valueMissing: true },\n message: this.i18n.t(\"validation.valueMissing\"),\n anchor: this.input,\n };\n if (this.valueAsDate && !this.allowed(this.value))\n return {\n flags: { customError: true },\n message: [this.minDate, this.maxDate].filter(Boolean).join(\" – \"),\n anchor: this.input,\n };\n return { flags: {}, message: \"\" };\n }\n protected resetFormValue() {\n this.dirty = false;\n this.draft = null;\n this.value = this.defaultValue;\n this.open = false;\n }\n protected override restoreFormState(state: unknown) {\n if (typeof state === \"string\") this.value = state;\n }\n protected override willUpdate(changed: PropertyValues<this>) {\n if (changed.has(\"value\") && changed.get(\"value\") !== undefined)\n this.dirty = this.value !== this.defaultValue || this.dirty;\n if (\n changed.has(\"defaultValue\") &&\n !this.dirty &&\n (this.hasUpdated || this.hasAttribute(\"value\"))\n )\n this.value = this.defaultValue;\n if (changed.has(\"open\") && this.open) {\n this.month = monthStart(this.valueAsDate ?? new Date());\n this.focusedKey = dayKey(this.valueAsDate ?? new Date());\n }\n }\n protected override updated(changed: PropertyValues<this>) {\n super.updated(changed);\n this.floating.sync(this.open && this.interactive);\n if (this.open && this.pendingFocus) {\n this.popup\n ?.querySelector<HTMLElement>(`[data-date=\"${this.focusedKey}\"]`)\n ?.focus();\n this.pendingFocus = false;\n }\n }\n private requestOpenChange(open: boolean) {\n if (open && !this.interactive) return false;\n if (open === this.open) return true;\n const allowed = this.emit(\n \"minerva-open-change\",\n { open },\n { cancelable: true },\n );\n if (allowed) this.open = open;\n return allowed;\n }\n private commit(value: string) {\n if (!this.interactive || (value && !this.allowed(value))) return;\n this.dirty = true;\n this.value = value;\n this.dispatchEvent(new Event(\"change\", { bubbles: true }));\n this.emit(\"minerva-change\", { value });\n }\n private handleInput(event: Event) {\n if (!this.interactive) return;\n const text = (event.target as HTMLInputElement).value;\n this.draft = text;\n this.emit(\"minerva-input\", { value: text });\n if (!text || this.allowed(text)) {\n this.commit(text);\n if (text) this.month = monthStart(parseDayKey(text)!);\n }\n }\n private handleBlur() {\n if (this.draft === null) return;\n const parsed = parseDayKey(this.draft.trim(), false);\n const next = parsed ? dayKey(parsed) : \"\";\n if (!this.draft.trim()) {\n if (this.value) this.commit(\"\");\n } else if (parsed && this.allowed(next) && next !== this.value) {\n this.commit(next);\n this.month = monthStart(parsed);\n }\n this.draft = null;\n }\n private handleClear() {\n if (!this.interactive) return;\n this.draft = null;\n this.commit(\"\");\n this.emit(\"minerva-clear\");\n this.input?.focus();\n }\n private handleInputClick() {\n this.requestOpenChange(!this.open);\n }\n private handleInputKeyDown(event: KeyboardEvent) {\n if (event.key !== \"ArrowDown\" || !this.interactive) return;\n event.preventDefault();\n this.pendingFocus = true;\n if (this.open) {\n this.requestUpdate();\n } else if (!this.requestOpenChange(true)) this.pendingFocus = false;\n }\n private select(date: Date) {\n if (!this.interactive || !this.allowed(dayKey(date))) return;\n this.draft = null;\n this.commit(dayKey(date));\n this.requestOpenChange(false);\n this.input?.focus();\n }\n private handleDayKeyDown(event: KeyboardEvent, date: Date) {\n if (!this.interactive) return;\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n if (!event.repeat) this.select(date);\n return;\n }\n const key = logicalArrowKey(event.key, this);\n const weekday = (date.getDay() + 6) % 7;\n let target: Date;\n switch (key) {\n case \"ArrowLeft\":\n target = addDays(date, -1);\n break;\n case \"ArrowRight\":\n target = addDays(date, 1);\n break;\n case \"ArrowUp\":\n target = addDays(date, -7);\n break;\n case \"ArrowDown\":\n target = addDays(date, 7);\n break;\n case \"Home\":\n target = addDays(date, -weekday);\n break;\n case \"End\":\n target = addDays(date, 6 - weekday);\n break;\n case \"PageUp\":\n case \"PageDown\": {\n const next = monthStart(\n date,\n (key === \"PageUp\" ? -1 : 1) * (event.shiftKey ? 12 : 1),\n );\n target = localDate(\n next.getFullYear(),\n next.getMonth(),\n Math.min(date.getDate(), addDays(monthStart(next, 1), -1).getDate()),\n );\n break;\n }\n default:\n return;\n }\n event.preventDefault();\n this.focusedKey = dayKey(target);\n this.month = monthStart(target);\n this.pendingFocus = true;\n }\n private renderPanel(name: string) {\n const t = this.i18n.t;\n const first = monthStart(this.month);\n const start = addDays(first, -((first.getDay() + 6) % 7));\n const days = Array.from({ length: 42 }, (_, i) => addDays(start, i));\n const keys = days.map(dayKey);\n const active = keys.includes(this.focusedKey)\n ? this.focusedKey\n : dayKey(first);\n let heading: string;\n try {\n heading = new Intl.DateTimeFormat(this.locale ?? this.i18n.language, {\n month: \"long\",\n year: \"numeric\",\n }).format(first);\n } catch {\n heading = dayKey(first).slice(0, 7);\n }\n return html`<div\npart=\"content\"\nclass=\"popup\"\npopover=\"manual\"\nrole=\"dialog\"\ntabindex=\"-1\"\naria-label=${name}\n@keydown=${this.handlePanelKeyDown}\n>\n<div class=\"panel\">\n<div class=\"header\">\n<h2 id=\"heading\" class=\"heading\" aria-live=\"polite\">${heading}</h2>\n<div class=\"navGroup\">\n<button\ntype=\"button\"\nclass=\"navButton\"\naria-label=${t(\"monthCalendar.previousMonth\")}\n@click=${() => {\n this.month = monthStart(first, -1);\n }}\n>\n${IconChevronLeft}\n</button>\n<button\ntype=\"button\"\nclass=\"navButton\"\naria-label=${t(\"monthCalendar.nextMonth\")}\n@click=${() => {\n this.month = monthStart(first, 1);\n }}\n>\n${IconChevronRight}\n</button>\n</div>\n</div>\n<div class=\"grid\" role=\"grid\" aria-labelledby=\"heading\">\n<div class=\"week\" role=\"row\">\n${WEEKDAYS.map((d) => html`<div class=\"weekday\" role=\"columnheader\">${t(`monthCalendar.weekdays.${d}`)}</div>`)}\n</div>\n${Array.from(\n { length: 6 },\n (_, week) =>\n html`<div class=\"week\" role=\"row\">\n${days.slice(week * 7, week * 7 + 7).map((date) => {\n const key = dayKey(date);\n return html`<div\npart=\"day\"\nclass=\"day\"\nrole=\"gridcell\"\ndata-date=${key}\n?data-outside=${!sameMonth(date, first)}\naria-label=${key}\naria-selected=${String(key === this.value)}\naria-disabled=${this.allowed(key) ? nothing : \"true\"}\naria-current=${key === dayKey(new Date()) ? \"date\" : nothing}\ntabindex=${key === active && this.allowed(key) ? \"0\" : \"-1\"}\n@focus=${() => {\n this.focusedKey = key;\n }}\n@click=${() => this.select(date)}\n@keydown=${(e: KeyboardEvent) => this.handleDayKeyDown(e, date)}\n>\n${date.getDate()}\n</div>`;\n })}\n</div>`,\n )}\n</div>\n<div class=\"footer\">\n${\n !this.hideClearButton && this.value\n ? html`<button\nclass=\"footerButton\"\ntype=\"button\"\n@click=${() => {\n this.handleClear();\n this.requestOpenChange(false);\n }}\n>\n${t(\"datePicker.clear\")}\n</button>`\n : nothing\n }\n<button\nclass=\"footerButton\"\ntype=\"button\"\n?disabled=${!this.allowed(dayKey(new Date()))}\n@click=${() => this.select(new Date())}\n>\n${t(\"monthCalendar.today\")}</button\n><button\nclass=\"footerButton\"\ntype=\"button\"\n@click=${() => {\n this.requestOpenChange(false);\n this.input?.focus();\n }}\n>\n${t(\"modal.close\")}\n</button>\n</div>\n</div>\n</div>`;\n }\n protected override hookStates() {\n const placement =\n this.open && this.floating.isOpen\n ? this.floating.position.placement\n : undefined;\n const { side, align } = placement\n ? parsePlacement(placement)\n : { side: undefined, align: undefined };\n return {\n placement,\n side,\n align,\n state: this.open && this.interactive ? \"open\" : \"closed\",\n disabled: this.isDisabled,\n readonly: this.readOnly,\n invalid: this.invalid,\n size: this.size,\n };\n }\n private handlePanelKeyDown(event: KeyboardEvent) {\n const panel = event.currentTarget as HTMLElement;\n const input = this.input;\n if (\n !input ||\n event.key !== \"Tab\" ||\n event.altKey ||\n event.ctrlKey ||\n event.metaKey\n )\n return;\n const focused = this.shadowRoot?.activeElement ?? null;\n if (!focused || !panel.contains(focused)) return;\n const tabbables = getTabbables(panel);\n const leaves =\n tabbables.length === 0 ||\n (event.shiftKey\n ? focused === panel || focused === tabbables[0]\n : focused === tabbables[tabbables.length - 1]);\n if (!leaves) return;\n event.preventDefault();\n const next = event.shiftKey\n ? input\n : (this.shadowRoot?.querySelector<HTMLElement>(\".clearButton\") ??\n this.tabbableAfter() ??\n input);\n next.focus();\n this.requestOpenChange(false);\n }\n\n /** The first tabbable element of the page after this element. */\n private tabbableAfter(): HTMLElement | null {\n const all = getTabbables(this.ownerDocument.body);\n let last = -1;\n all.forEach((el, i) => {\n if (contains(this, el)) last = i;\n });\n if (last === -1) {\n return (\n all.find(\n (el) =>\n !!(\n this.compareDocumentPosition(el) &\n Node.DOCUMENT_POSITION_FOLLOWING\n ),\n ) ?? null\n );\n }\n return all.slice(last + 1).find((el) => !contains(this, el)) ?? null;\n }\n\n protected override render() {\n const { t } = this.i18n;\n const disabled = this.isDisabled;\n const readonly = this.readOnly;\n const current = this.valueAsDate;\n const name = this.label || this.aria.label || t(\"datePicker.label\");\n const displayValue = this.draft ?? (current ? dayKey(current) : \"\");\n const showClear =\n !this.hideClearButton && !!current && !disabled && !readonly;\n\n return html`<div part=\"root\" class=\"datePicker\">\n<div\npart=\"control\"\nclass=${classMap({\n root: true,\n outline: true,\n [this.size]: true,\n invalid: this.invalid,\n disabled,\n })}\ndata-component=\"input\"\n>\n<input\npart=\"input\"\nclass=\"field\"\n.value=${live(displayValue)}\nplaceholder=${this.placeholder ?? t(\"datePicker.placeholder\")}\n?disabled=${disabled}\n?readonly=${readonly}\n?required=${this.required}\nautocomplete=\"off\"\naria-label=${name}\naria-description=${this.aria.description ?? nothing}\naria-invalid=${\n this.invalid || this.aria.attr(\"aria-invalid\") === \"true\"\n ? \"true\"\n : nothing\n }\naria-readonly=${readonly ? \"true\" : nothing}\n@input=${this.handleInput}\n@blur=${this.handleBlur}\n@click=${this.handleInputClick}\n@keydown=${this.handleInputKeyDown}\n/>\n<span class=\"addon end\">\n${\n showClear\n ? html`<button\npart=\"clear-button\"\ntype=\"button\"\nclass=\"iconButton neutral variant-ghost small circle clearButton\"\naria-label=${t(\"datePicker.clear\")}\n@click=${this.handleClear}\n>\n${IconX}\n</button>`\n : html`<span part=\"icon\" class=\"calendarIcon\" aria-hidden=\"true\"\n>${IconCalendar}</span\n>`\n }\n</span>\n</div>\n</div>\n${this.open && !disabled && !readonly ? this.renderPanel(name) : nothing}`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"minerva-date-picker\": MinervaDatePicker;\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from '../components/date-picker/date-picker.js';
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { defineElement as e } from "../internal/define.js";
|
|
2
|
+
import { MinervaDatePicker as t } from "../components/date-picker/date-picker.js";
|
|
3
|
+
//#region src/elements/date-picker.ts
|
|
4
|
+
e(t);
|
|
5
|
+
//#endregion
|
|
6
|
+
export { t as MinervaDatePicker };
|
|
7
|
+
|
|
8
|
+
//# sourceMappingURL=date-picker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-picker.js","names":["defineElement","MinervaDatePicker"],"sources":["../../../../web-components/src/elements/date-picker.ts"],"sourcesContent":["import { MinervaDatePicker } from \"../components/date-picker/date-picker\";\nimport { defineElement } from \"../internal/define\";\ndefineElement(MinervaDatePicker);\nexport * from \"../components/date-picker/date-picker\";\n"],"mappings":";;;AAEAA,EAAcC,CAAiB"}
|
|
@@ -1567,6 +1567,91 @@
|
|
|
1567
1567
|
}
|
|
1568
1568
|
]
|
|
1569
1569
|
},
|
|
1570
|
+
{
|
|
1571
|
+
"name": "minerva-date-picker",
|
|
1572
|
+
"description": "Date field with a keyboard-accessible popup calendar and inclusive date bounds.\n\nEvents: `change`, `minerva-change`, `minerva-input`, `minerva-open-change`, `minerva-clear`",
|
|
1573
|
+
"attributes": [
|
|
1574
|
+
{
|
|
1575
|
+
"name": "name",
|
|
1576
|
+
"description": "Name submitted with form data.\n\nDefault: \"date-picker\""
|
|
1577
|
+
},
|
|
1578
|
+
{
|
|
1579
|
+
"name": "value",
|
|
1580
|
+
"description": "Initial date, restored by form reset.\n\nDefault: \"\""
|
|
1581
|
+
},
|
|
1582
|
+
{
|
|
1583
|
+
"name": "open",
|
|
1584
|
+
"description": "Whether the calendar is open.\n\nDefault: false",
|
|
1585
|
+
"valueSet": "v"
|
|
1586
|
+
},
|
|
1587
|
+
{
|
|
1588
|
+
"name": "label",
|
|
1589
|
+
"description": "Accessible field and popup label."
|
|
1590
|
+
},
|
|
1591
|
+
{
|
|
1592
|
+
"name": "placeholder",
|
|
1593
|
+
"description": "Input placeholder; localized by default."
|
|
1594
|
+
},
|
|
1595
|
+
{
|
|
1596
|
+
"name": "locale",
|
|
1597
|
+
"description": "Calendar heading locale."
|
|
1598
|
+
},
|
|
1599
|
+
{
|
|
1600
|
+
"name": "size",
|
|
1601
|
+
"description": "Input control size.\n\nDefault: \"medium\"",
|
|
1602
|
+
"values": [
|
|
1603
|
+
{
|
|
1604
|
+
"name": "small"
|
|
1605
|
+
},
|
|
1606
|
+
{
|
|
1607
|
+
"name": "medium"
|
|
1608
|
+
},
|
|
1609
|
+
{
|
|
1610
|
+
"name": "large"
|
|
1611
|
+
}
|
|
1612
|
+
]
|
|
1613
|
+
},
|
|
1614
|
+
{
|
|
1615
|
+
"name": "invalid",
|
|
1616
|
+
"description": "Error state.\n\nDefault: false",
|
|
1617
|
+
"valueSet": "v"
|
|
1618
|
+
},
|
|
1619
|
+
{
|
|
1620
|
+
"name": "readonly",
|
|
1621
|
+
"description": "Prevents typing, selection and clearing.\n\nDefault: false",
|
|
1622
|
+
"valueSet": "v"
|
|
1623
|
+
},
|
|
1624
|
+
{
|
|
1625
|
+
"name": "hide-clear-button",
|
|
1626
|
+
"description": "Hides the clear action.\n\nDefault: false",
|
|
1627
|
+
"valueSet": "v"
|
|
1628
|
+
},
|
|
1629
|
+
{
|
|
1630
|
+
"name": "min-date",
|
|
1631
|
+
"description": "Earliest selectable date, inclusive (YYYY-MM-DD)."
|
|
1632
|
+
},
|
|
1633
|
+
{
|
|
1634
|
+
"name": "max-date",
|
|
1635
|
+
"description": "Latest selectable date, inclusive (YYYY-MM-DD)."
|
|
1636
|
+
},
|
|
1637
|
+
{
|
|
1638
|
+
"name": "disabled",
|
|
1639
|
+
"description": "Disables the control (not focusable, not submitted, not validated)\n\nDefault: false",
|
|
1640
|
+
"valueSet": "v"
|
|
1641
|
+
},
|
|
1642
|
+
{
|
|
1643
|
+
"name": "required",
|
|
1644
|
+
"description": "The control must have a value for the form to be submitted\n\nDefault: false",
|
|
1645
|
+
"valueSet": "v"
|
|
1646
|
+
}
|
|
1647
|
+
],
|
|
1648
|
+
"references": [
|
|
1649
|
+
{
|
|
1650
|
+
"name": "Documentation",
|
|
1651
|
+
"url": "https://fwx5618177.github.io/minerva-design/web-components/date-picker"
|
|
1652
|
+
}
|
|
1653
|
+
]
|
|
1654
|
+
},
|
|
1570
1655
|
{
|
|
1571
1656
|
"name": "minerva-description-item",
|
|
1572
1657
|
"description": "Declarative term / description row of a description list.\n\nSlots: `(default)`",
|
|
@@ -53,6 +53,7 @@ export * from './elements/text-link.js';
|
|
|
53
53
|
export * from './elements/textarea.js';
|
|
54
54
|
export * from './elements/theme-toggle.js';
|
|
55
55
|
export * from './elements/time-picker.js';
|
|
56
|
+
export * from './elements/date-picker.js';
|
|
56
57
|
export * from './elements/toast.js';
|
|
57
58
|
export * from './elements/tooltip.js';
|
|
58
59
|
export * from './elements/upload.js';
|