@nhtio/lucid-resourceful-vue-components 0.1.0-master-e14740ea → 0.1.0-master-54839a90
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/{VBtn-DhfYEt9V.mjs → VBtn-C4WCntKg.mjs} +8 -8
- package/{VBtn-DhfYEt9V.mjs.map → VBtn-C4WCntKg.mjs.map} +1 -1
- package/{VDatePicker-D0OTAyvJ.mjs → VDatePicker-DOCNk-HL.mjs} +166 -166
- package/{VDatePicker-D0OTAyvJ.mjs.map → VDatePicker-DOCNk-HL.mjs.map} +1 -1
- package/{VEmptyState-BFrXSTJ-.mjs → VEmptyState-CfouFZTg.mjs} +41 -41
- package/{VEmptyState-BFrXSTJ-.mjs.map → VEmptyState-CfouFZTg.mjs.map} +1 -1
- package/{VHover-DLvOmsjv.mjs → VHover-DvUhdfsL.mjs} +3 -3
- package/{VHover-DLvOmsjv.mjs.map → VHover-DvUhdfsL.mjs.map} +1 -1
- package/{VListItem-LNaoM8S4.mjs → VListItem-BT-NXJyi.mjs} +56 -56
- package/{VListItem-LNaoM8S4.mjs.map → VListItem-BT-NXJyi.mjs.map} +1 -1
- package/{VMenu-9rTbTKtH.mjs → VMenu-Bk2NN8qb.mjs} +28 -28
- package/{VMenu-9rTbTKtH.mjs.map → VMenu-Bk2NN8qb.mjs.map} +1 -1
- package/{VPicker-BGuRD0KW.mjs → VPicker-DmY6CdER.mjs} +5 -5
- package/{VPicker-BGuRD0KW.mjs.map → VPicker-DmY6CdER.mjs.map} +1 -1
- package/{VRadioGroup-Dx_wEqzl.mjs → VRadioGroup-BO7XdtLS.mjs} +21 -21
- package/{VRadioGroup-Dx_wEqzl.mjs.map → VRadioGroup-BO7XdtLS.mjs.map} +1 -1
- package/{VRow-DaLdbIGw.mjs → VRow-BhNJcY5-.mjs} +17 -17
- package/{VRow-DaLdbIGw.mjs.map → VRow-BhNJcY5-.mjs.map} +1 -1
- package/{VSheet-DnIfs-1c.mjs → VSheet-Bkr-m6FE.mjs} +14 -14
- package/{VSheet-DnIfs-1c.mjs.map → VSheet-Bkr-m6FE.mjs.map} +1 -1
- package/{actions-8bWGsB-p.mjs → actions-ORUmfJR5.mjs} +15 -15
- package/{actions-8bWGsB-p.mjs.map → actions-ORUmfJR5.mjs.map} +1 -1
- package/{alert-IW1AIWZw.mjs → alert-pFT7pWTZ.mjs} +97 -94
- package/alert-pFT7pWTZ.mjs.map +1 -0
- package/{bigint-Jmfa2L4S.mjs → bigint-CCM0aPaS.mjs} +6 -6
- package/{bigint-Jmfa2L4S.mjs.map → bigint-CCM0aPaS.mjs.map} +1 -1
- package/{boolean-BEY7eBxf.mjs → boolean-1-MOJPSu.mjs} +40 -40
- package/{boolean-BEY7eBxf.mjs.map → boolean-1-MOJPSu.mjs.map} +1 -1
- package/{clipboard-BoKd7mFG.mjs → clipboard-CdGABqm1.mjs} +51 -51
- package/{clipboard-BoKd7mFG.mjs.map → clipboard-CdGABqm1.mjs.map} +1 -1
- package/{colorUtils-DmtKYNgW.mjs → colorUtils-BdpqbLZS.mjs} +3 -3
- package/{colorUtils-DmtKYNgW.mjs.map → colorUtils-BdpqbLZS.mjs.map} +1 -1
- package/{common-BeDAn4wu.mjs → common-Bi5RUD-n.mjs} +8881 -8880
- package/common-Bi5RUD-n.mjs.map +1 -0
- package/{component-CjPpW_A2.mjs → component-DhEJuSE6.mjs} +2 -2
- package/{component-CjPpW_A2.mjs.map → component-DhEJuSE6.mjs.map} +1 -1
- package/components/autorefresh_controller.mjs +1 -1
- package/components/control_button.mjs +1 -1
- package/components/control_button_bar.mjs +2 -2
- package/components/control_menu.mjs +1 -1
- package/components/custom_field.mjs +1 -1
- package/components/exporter.mjs +1 -1
- package/components/fields/bigint.mjs +1 -1
- package/components/fields/boolean.mjs +1 -1
- package/components/fields/date.mjs +1 -1
- package/components/fields/date_time.mjs +1 -1
- package/components/fields/enum.mjs +1 -1
- package/components/fields/integer.mjs +1 -1
- package/components/fields/number.mjs +1 -1
- package/components/fields/string.mjs +1 -1
- package/components/fields/unsigned_integer.mjs +1 -1
- package/components/fields.mjs +9 -9
- package/components/form_with_validation.mjs +1 -1
- package/components/resourceful_alerter.mjs +1 -1
- package/components/resourceful_index.mjs +1 -1
- package/components/resourceful_record.mjs +2 -2
- package/components/resourceful_record_default_form.mjs +1 -1
- package/components/resourceful_record_form.mjs +1 -1
- package/components/sortable.mjs +1 -1
- package/components/svg_icon.mjs +1 -1
- package/components/timezone_picker.mjs +1 -1
- package/components.mjs +23 -23
- package/composables.mjs +8 -8
- package/{console-CRXioSFP.mjs → console-Dgoi3FwV.mjs} +2 -2
- package/{console-CRXioSFP.mjs.map → console-Dgoi3FwV.mjs.map} +1 -1
- package/{custom-Y1WJVKP9.mjs → custom-DQmbYYPh.mjs} +17 -17
- package/{custom-Y1WJVKP9.mjs.map → custom-DQmbYYPh.mjs.map} +1 -1
- package/{date-BxEeCNWD.mjs → date-E_8RP3gK.mjs} +21 -21
- package/{date-BxEeCNWD.mjs.map → date-E_8RP3gK.mjs.map} +1 -1
- package/{date_time-6kpv7eDF.mjs → date_time-BmYl2TFi.mjs} +300 -300
- package/{date_time-6kpv7eDF.mjs.map → date_time-BmYl2TFi.mjs.map} +1 -1
- package/{display-kAyhIPBH.mjs → display-B089h_sz.mjs} +30 -28
- package/display-B089h_sz.mjs.map +1 -0
- package/{display-CO0pTIEs.mjs → display-dv4cOwRN.mjs} +42 -42
- package/{display-CO0pTIEs.mjs.map → display-dv4cOwRN.mjs.map} +1 -1
- package/{display-DvzWa1QO.mjs → display-fXo4JeIS.mjs} +41 -41
- package/{display-DvzWa1QO.mjs.map → display-fXo4JeIS.mjs.map} +1 -1
- package/{elevation-CMzO50xm.mjs → elevation-YNOj0hSa.mjs} +82 -82
- package/{elevation-CMzO50xm.mjs.map → elevation-YNOj0hSa.mjs.map} +1 -1
- package/{enum-noYU2Cqh.mjs → enum-8itqseZa.mjs} +22 -22
- package/{enum-noYU2Cqh.mjs.map → enum-8itqseZa.mjs.map} +1 -1
- package/factories.mjs +1 -1
- package/{field_composer-DpJx0Oz1.mjs → field_composer-ugYyDQNY.mjs} +7 -7
- package/{field_composer-DpJx0Oz1.mjs.map → field_composer-ugYyDQNY.mjs.map} +1 -1
- package/{form-CDLcDPyU.mjs → form-BtDnRXYm.mjs} +45 -45
- package/{form-CDLcDPyU.mjs.map → form-BtDnRXYm.mjs.map} +1 -1
- package/{guards-B99p3BPj.mjs → guards-Cby4QwzY.mjs} +2 -2
- package/{guards-B99p3BPj.mjs.map → guards-Cby4QwzY.mjs.map} +1 -1
- package/guards.mjs +4 -4
- package/helpers.mjs +6 -6
- package/{index-C9UuBVyI.mjs → index-3XRUa28C.mjs} +12 -12
- package/{index-C9UuBVyI.mjs.map → index-3XRUa28C.mjs.map} +1 -1
- package/{index-CzI9mHIx.mjs → index-BCQmj6cf.mjs} +13 -13
- package/{index-CzI9mHIx.mjs.map → index-BCQmj6cf.mjs.map} +1 -1
- package/{index-bXmNb9jX.mjs → index-BgevbZTt.mjs} +10 -10
- package/{index-bXmNb9jX.mjs.map → index-BgevbZTt.mjs.map} +1 -1
- package/{index-BaWthszI.mjs → index-C-PCfO1S.mjs} +2 -2
- package/{index-BaWthszI.mjs.map → index-C-PCfO1S.mjs.map} +1 -1
- package/{index-Bi050X9r.mjs → index-CSyOYGEi.mjs} +8 -8
- package/{index-Bi050X9r.mjs.map → index-CSyOYGEi.mjs.map} +1 -1
- package/{index-CIvylvfa.mjs → index-D9i1PRci.mjs} +5701 -5698
- package/{index-CIvylvfa.mjs.map → index-D9i1PRci.mjs.map} +1 -1
- package/{index-B2rKM3mR.mjs → index-DWv9iKZs.mjs} +21 -21
- package/{index-B2rKM3mR.mjs.map → index-DWv9iKZs.mjs.map} +1 -1
- package/{index-slHxe6b-.mjs → index-VpcXNOpn.mjs} +2 -2
- package/{index-slHxe6b-.mjs.map → index-VpcXNOpn.mjs.map} +1 -1
- package/{index-BUpccfIz.mjs → index-fiZltUBs.mjs} +3 -3
- package/{index-BUpccfIz.mjs.map → index-fiZltUBs.mjs.map} +1 -1
- package/index.mjs +31 -31
- package/{integer-BIJ4_I8y.mjs → integer-W2_SlKV1.mjs} +5 -5
- package/{integer-BIJ4_I8y.mjs.map → integer-W2_SlKV1.mjs.map} +1 -1
- package/{mdi-CqMJqgQi.mjs → mdi-DC1jeTJJ.mjs} +55 -55
- package/{mdi-CqMJqgQi.mjs.map → mdi-DC1jeTJJ.mjs.map} +1 -1
- package/{number-z_LAINPM.mjs → number-DgwZBxOw.mjs} +101 -101
- package/{number-z_LAINPM.mjs.map → number-DgwZBxOw.mjs.map} +1 -1
- package/package.json +31 -31
- package/{position-Ai5XksAO.mjs → position-B9VPkbhU.mjs} +2 -2
- package/{position-Ai5XksAO.mjs.map → position-B9VPkbhU.mjs.map} +1 -1
- package/private/control-button-bar/props.d.ts +10 -10
- package/private/fields/bigint.d.ts +128 -128
- package/private/fields/boolean.d.ts +68 -68
- package/private/fields/common.d.ts +16 -16
- package/private/fields/custom.d.ts +2 -2
- package/private/fields/date.d.ts +24 -24
- package/private/fields/date_time.d.ts +24 -24
- package/private/fields/enum.d.ts +68 -68
- package/private/fields/integer.d.ts +107 -107
- package/private/fields/multiple.d.ts +17 -17
- package/private/fields/number.d.ts +46 -46
- package/private/fields/read_mode_renderer.d.ts +17 -17
- package/private/fields/string.d.ts +24 -24
- package/private/fields/unsigned_integer.d.ts +107 -107
- package/private/filtration/filter_group_condition_element.d.ts +36 -36
- package/private/resourceful-index/index.d.ts +17 -17
- package/private/resourceful-index/partials/_controls.d.ts +1 -1
- package/private/resourceful-index/partials/_per_page_selector.d.ts +1 -1
- package/private/resourceful-index/props.d.ts +34 -34
- package/private/resourceful-record/form.d.ts +12 -12
- package/private/resourceful-record/index.d.ts +13 -13
- package/private/resourceful-record/props.d.ts +20 -20
- package/private/sortable/index.d.ts +1 -1
- package/{props-p4f5Pa5h.mjs → props-COvhL78L.mjs} +4 -4
- package/{props-p4f5Pa5h.mjs.map → props-COvhL78L.mjs.map} +1 -1
- package/{props-BYX22zcE.mjs → props-GYFmAF5-.mjs} +6 -6
- package/{props-BYX22zcE.mjs.map → props-GYFmAF5-.mjs.map} +1 -1
- package/{renderers-BKUvrrVm.mjs → renderers-BP4li2WT.mjs} +13 -13
- package/{renderers-BKUvrrVm.mjs.map → renderers-BP4li2WT.mjs.map} +1 -1
- package/{string-Dmr8SRMf.mjs → string-RfpfCwEn.mjs} +137 -137
- package/{string-Dmr8SRMf.mjs.map → string-RfpfCwEn.mjs.map} +1 -1
- package/{unsigned_integer-BliPiCXO.mjs → unsigned_integer-Cg6tbRJj.mjs} +4 -4
- package/{unsigned_integer-BliPiCXO.mjs.map → unsigned_integer-Cg6tbRJj.mjs.map} +1 -1
- package/useRender-CfNJA_8a.mjs +9 -0
- package/{useRender-BD1xw5zG.mjs.map → useRender-CfNJA_8a.mjs.map} +1 -1
- package/{utils-DqXWb-4f.mjs → utils-D3ZGaTyv.mjs} +48 -48
- package/{utils-DqXWb-4f.mjs.map → utils-D3ZGaTyv.mjs.map} +1 -1
- package/{validation-DS3tTSk5.mjs → validation-BF_JkNWB.mjs} +4 -4
- package/{validation-DS3tTSk5.mjs.map → validation-BF_JkNWB.mjs.map} +1 -1
- package/VBtn.css +0 -1
- package/VDatePicker.css +0 -1
- package/VEmptyState.css +0 -1
- package/VListItem.css +0 -1
- package/VMenu.css +0 -1
- package/VPicker.css +0 -1
- package/VRadioGroup.css +0 -1
- package/VSheet.css +0 -1
- package/actions.css +0 -1
- package/alert-IW1AIWZw.mjs.map +0 -1
- package/boolean.css +0 -1
- package/clipboard.css +0 -1
- package/common-BeDAn4wu.mjs.map +0 -1
- package/common.css +0 -1
- package/date_time.css +0 -1
- package/display-kAyhIPBH.mjs.map +0 -1
- package/display.css +0 -1
- package/display2.css +0 -1
- package/elevation.css +0 -1
- package/index.css +0 -1
- package/mdi.css +0 -1
- package/number.css +0 -1
- package/string.css +0 -1
- package/useRender-BD1xw5zG.mjs +0 -9
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { D as s } from "./ioc-Du_Tgg-1.mjs";
|
|
2
2
|
import { useDisplay as $e } from "vuetify";
|
|
3
|
-
import { S as c } from "./index-
|
|
3
|
+
import { S as c } from "./index-C-PCfO1S.mjs";
|
|
4
4
|
import { d as I } from "./index-DXdh_Con.mjs";
|
|
5
|
-
import { u as ea } from "./field_composer-
|
|
6
|
-
import { d as aa,
|
|
7
|
-
import { I as ra } from "./elevation-
|
|
5
|
+
import { u as ea } from "./field_composer-ugYyDQNY.mjs";
|
|
6
|
+
import { d as aa, w as oa, x as ta, o as la, t as H, a as na } from "./utils-D3ZGaTyv.mjs";
|
|
7
|
+
import { I as ra } from "./elevation-YNOj0hSa.mjs";
|
|
8
8
|
import { h as a, defineComponent as ia, toRefs as i, computed as d, ref as z, onMounted as da } from "vue";
|
|
9
|
-
import { c as sa,
|
|
10
|
-
import { m as ya, V as ga } from "./VDatePicker-
|
|
11
|
-
import {
|
|
12
|
-
import { V as Z, a as K } from "./display-
|
|
13
|
-
import { V as _a } from "./display-
|
|
9
|
+
import { c as sa, b as ua, m as ca, d as ma, V as j, e as pa, a as fa, f as va } from "./common-Bi5RUD-n.mjs";
|
|
10
|
+
import { m as ya, V as ga } from "./VDatePicker-DOCNk-HL.mjs";
|
|
11
|
+
import { m as ha, a as ka, b as Ia, c as Ca, d as C, V as Va } from "./mdi-DC1jeTJJ.mjs";
|
|
12
|
+
import { V as Z, a as K } from "./display-fXo4JeIS.mjs";
|
|
13
|
+
import { V as _a } from "./display-dv4cOwRN.mjs";
|
|
14
14
|
const N = (e) => {
|
|
15
15
|
if (typeof e != "string") return !1;
|
|
16
16
|
const n = s.fromISO(e);
|
|
@@ -116,11 +116,11 @@ const N = (e) => {
|
|
|
116
116
|
reverse: ue,
|
|
117
117
|
singleLine: ce,
|
|
118
118
|
variant: b,
|
|
119
|
-
focused:
|
|
119
|
+
focused: w,
|
|
120
120
|
errorMessages: me,
|
|
121
121
|
maxErrors: pe,
|
|
122
122
|
name: fe,
|
|
123
|
-
readonly:
|
|
123
|
+
readonly: S,
|
|
124
124
|
validateOn: ve,
|
|
125
125
|
width: ye,
|
|
126
126
|
minWidth: ge,
|
|
@@ -141,14 +141,14 @@ const N = (e) => {
|
|
|
141
141
|
displayFormat: be,
|
|
142
142
|
displayLocale: h,
|
|
143
143
|
displayTimezone: m,
|
|
144
|
-
renderMode:
|
|
145
|
-
multiple:
|
|
144
|
+
renderMode: we,
|
|
145
|
+
multiple: Se,
|
|
146
146
|
choices: Fe,
|
|
147
147
|
allowUnspecifiedChoices: Pe,
|
|
148
148
|
to: Ee,
|
|
149
149
|
href: Te,
|
|
150
150
|
menuIcon: We,
|
|
151
|
-
noValuesText:
|
|
151
|
+
noValuesText: wa,
|
|
152
152
|
datePickerIcon: Re,
|
|
153
153
|
firstDayOfWeek: Ue,
|
|
154
154
|
max: R,
|
|
@@ -166,8 +166,8 @@ const N = (e) => {
|
|
|
166
166
|
style: _,
|
|
167
167
|
label: x,
|
|
168
168
|
density: g,
|
|
169
|
-
renderMode:
|
|
170
|
-
multiple:
|
|
169
|
+
renderMode: we,
|
|
170
|
+
multiple: Se,
|
|
171
171
|
choices: Fe,
|
|
172
172
|
allowUnspecifiedChoices: Pe,
|
|
173
173
|
to: Ee,
|
|
@@ -181,7 +181,7 @@ const N = (e) => {
|
|
|
181
181
|
persistentPlaceholder: E,
|
|
182
182
|
suffix: T,
|
|
183
183
|
role: W,
|
|
184
|
-
focused:
|
|
184
|
+
focused: w,
|
|
185
185
|
class: k,
|
|
186
186
|
"onUpdate:focused": i(e)["onUpdate:focused"],
|
|
187
187
|
"onClick:append": i(e)["onClick:append"],
|
|
@@ -241,11 +241,11 @@ const N = (e) => {
|
|
|
241
241
|
reverse: ue.value,
|
|
242
242
|
singleLine: ce.value,
|
|
243
243
|
variant: b.value,
|
|
244
|
-
focused:
|
|
244
|
+
focused: w.value,
|
|
245
245
|
errorMessages: me.value,
|
|
246
246
|
maxErrors: pe.value,
|
|
247
247
|
name: fe.value,
|
|
248
|
-
readonly:
|
|
248
|
+
readonly: S.value,
|
|
249
249
|
validateOn: ve.value,
|
|
250
250
|
width: ye.value,
|
|
251
251
|
minWidth: ge.value,
|
|
@@ -382,7 +382,7 @@ const N = (e) => {
|
|
|
382
382
|
...L.value,
|
|
383
383
|
...t,
|
|
384
384
|
hideDetails: l ? !0 : F.value,
|
|
385
|
-
readonly: l ? !1 : f.value ? !0 :
|
|
385
|
+
readonly: l ? !1 : f.value ? !0 : S.value,
|
|
386
386
|
class: l ? ["resourceful__field__date"] : k.value,
|
|
387
387
|
onKeydown: (o) => {
|
|
388
388
|
o.key === "Enter" && queueMicrotask(() => r());
|
|
@@ -418,4 +418,4 @@ const N = (e) => {
|
|
|
418
418
|
export {
|
|
419
419
|
Ha as R
|
|
420
420
|
};
|
|
421
|
-
//# sourceMappingURL=date-
|
|
421
|
+
//# sourceMappingURL=date-E_8RP3gK.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-BxEeCNWD.mjs","sources":["../src/private/fields/date.ts"],"sourcesContent":["/*\n|--------------------------------------------------------------------------\n| Resourceful Date Field\n|--------------------------------------------------------------------------\n|\n| A sophisticated field component for handling ISO 8601 date values with\n| integrated VDatePicker functionality. This component provides a dual-interface\n| approach: VTextField for manual input with VDatePicker for visual selection,\n| optimized for both desktop and mobile experiences.\n|\n| ## Core Features\n|\n| - **ISO 8601 Storage**: All dates stored as standard ISO date strings (YYYY-MM-DD)\n| - **Luxon Formatting**: Flexible display formatting using DateTime locale strings\n| - **Dual Input Methods**: Manual text entry + visual date picker selection\n| - **Mobile Optimized**: VBottomSheet on mobile, VDialog on desktop\n| - **Browser UI Suppression**: Disables native date pickers while preserving HTML5 benefits\n| - **Multiple Mode**: Chip-based interface for date arrays with unified picker\n|\n| ## Technical Implementation\n|\n| The component uses VTextField with type=\"date\" as its base, providing HTML5\n| validation and mobile keyboard optimization while completely suppressing\n| browser-native date picker UI through injected CSS. A custom VDatePicker\n| is integrated via dialog/bottom-sheet overlays for visual date selection.\n|\n| Mobile devices get special handling:\n| - Input becomes readonly to prevent keyboard conflicts\n| - onClick:control handler directly opens VBottomSheet picker\n| - VBottomSheet provides optimal touch-based date selection\n|\n| ## Display Formats (Luxon-based)\n|\n| - **short**: \"9/11/2001\" (DateTime.DATE_SHORT)\n| - **med**: \"Sep 11, 2001\" (DateTime.DATE_MED)\n| - **medWithWeekday**: \"Tue, Sep 11, 2001\" (DateTime.DATE_MED_WITH_WEEKDAY)\n| - **full**: \"September 11, 2001\" (DateTime.DATE_FULL)\n| - **huge**: \"Tuesday, September 11, 2001\" (DateTime.DATE_HUGE)\n|\n| ## Usage Examples\n|\n| ```vue\n| <!-- Basic date field -->\n| <RDateField\n| v-model=\"birthDate\"\n| label=\"Birth Date\"\n| displayFormat=\"med\"\n| />\n|\n| <!-- Multiple dates -->\n| <RDateField\n| v-model=\"eventDates\"\n| multiple\n| label=\"Event Dates\"\n| displayFormat=\"medWithWeekday\"\n| />\n|\n| <!-- With date constraints -->\n| <RDateField\n| v-model=\"appointmentDate\"\n| label=\"Appointment\"\n| :min=\"new Date().toISOString().split('T')[0]\"\n| :max=\"futureDate\"\n| />\n|\n| <!-- Read-only display -->\n| <RDateField\n| v-model=\"historicalDates\"\n| multiple\n| render-mode=\"read\"\n| displayFormat=\"full\"\n| />\n| ```\n|\n| ## Validation\n|\n| All dates are validated to ensure:\n| - Valid ISO 8601 date format (YYYY-MM-DD)\n| - Time components at midnight (pure date, no time)\n| - Valid DateTime parsing through Luxon\n|\n| ## Browser Compatibility\n|\n| Injected CSS suppresses native date picker indicators across:\n| - WebKit browsers (Safari, Chrome, Edge)\n| - Mozilla Firefox\n| - Microsoft browsers (legacy Edge, IE)\n| \n| This ensures consistent UI while preserving HTML5 input benefits.\n*/\n\nimport { DateTime } from 'luxon'\nimport { useDisplay } from 'vuetify'\nimport { SvgIcon } from '../svg-icon'\nimport { deepmerge } from 'deepmerge-ts'\nimport { VBtn } from 'vuetify/components/VBtn'\nimport { VCard } from 'vuetify/components/VCard'\nimport { VIcon } from 'vuetify/components/VIcon'\nimport { useFieldComposer } from './field_composer'\nimport { VDialog } from 'vuetify/components/VDialog'\nimport { VDivider } from 'vuetify/components/VDivider'\nimport { VTextField } from 'vuetify/components/VTextField'\nimport { propsAndEmitsFactory } from '../common/factories'\nimport { omit, pick } from '@nhtio/vuetifiable/util/helpers'\nimport { VDatePicker } from 'vuetify/components/VDatePicker'\nimport { VBottomSheet } from 'vuetify/components/VBottomSheet'\nimport { IconValue } from '@nhtio/vuetifiable/composables/icons'\nimport { toUnreactive, useSlot, mergeClasses } from '../common/utils'\nimport { VToolbar, VToolbarItems } from 'vuetify/components/VToolbar'\nimport { h, defineComponent, toRefs, computed, ref, onMounted } from 'vue'\nimport { makeCommonResourcefulFieldProps, commonEmitsValidators } from './common'\nimport { makeVTextFieldProps } from '@nhtio/vuetifiable/components/VTextField/VTextField'\nimport { makeVDatePickerProps } from '@nhtio/vuetifiable/components/VDatePicker/VDatePicker'\nimport { mdiClose, mdiCalendar, mdiChevronLeft, mdiChevronRight, mdiChevronDown } from '@mdi/js'\nimport type { Zone } from 'luxon'\nimport type { SharedUnionFields } from 'type-fest'\nimport type { SingleFieldRenderer } from './field_composer'\nimport type { LooseRequired } from '@vue/shared/dist/shared.d.ts'\nimport type { makeVBtnProps } from '@nhtio/vuetifiable/components/VBtn/VBtn'\nimport type { NamedSlotParameters, ExtractSlotDefinitions } from '../common/types'\nimport type { CommonResourcefulFieldPublicProps, RFieldStringifier } from './common'\nimport type { makeVDialogProps } from '@nhtio/vuetifiable/components/VDialog/VDialog'\nimport type { makeVBottomSheetProps } from '@nhtio/vuetifiable/components/VBottomSheet/VBottomSheet'\nimport type {\n PropType,\n ExtractPublicPropTypes,\n ToRefs,\n VNode,\n SlotsType,\n ComponentPublicInstance,\n} from 'vue'\n\ntype VBtnPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVBtnProps>>\ntype VDialogPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVDialogProps>>\ntype VBottomSheetPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVBottomSheetProps>>\ntype CommonDialogPublicProps = SharedUnionFields<VDialogPublicProps | VBottomSheetPublicProps>\ntype VTextFieldSlots = ExtractSlotDefinitions<typeof VTextField.slots>\n\n/**\n * Available display format options for RDateField.\n *\n * These formats correspond to Luxon's built-in DateTime locale string constants,\n * providing consistent, internationalized date formatting across different locales.\n *\n * @example\n * ```typescript\n * const formats: RDateFieldDisplayFormat[] = ['short', 'med', 'full']\n * // Results in: [\"9/11/2001\", \"Sep 11, 2001\", \"September 11, 2001\"]\n * ```\n */\nexport const RDateFieldDisplayFormat = ['short', 'med', 'medWithWeekday', 'full', 'huge'] as const\n\n/**\n * Type representing the available display format options for date rendering.\n *\n * Maps to Luxon DateTime constants:\n * - `short`: \"9/11/2001\" (DateTime.DATE_SHORT)\n * - `med`: \"Sep 11, 2001\" (DateTime.DATE_MED)\n * - `medWithWeekday`: \"Tue, Sep 11, 2001\" (DateTime.DATE_MED_WITH_WEEKDAY)\n * - `full`: \"September 11, 2001\" (DateTime.DATE_FULL)\n * - `huge`: \"Tuesday, September 11, 2001\" (DateTime.DATE_HUGE)\n *\n * @example\n * ```typescript\n * const format: RDateFieldDisplayFormat = 'medWithWeekday'\n * // Displays as: \"Tue, Sep 11, 2001\"\n * ```\n */\nexport type RDateFieldDisplayFormat = (typeof RDateFieldDisplayFormat)[number]\n\nconst isValidRDateFieldSingleValue = (value: unknown): boolean => {\n if ('string' !== typeof value) return false\n const dt = DateTime.fromISO(value)\n if (!dt.isValid) return false\n // Check if time components are at default (midnight)\n return dt.hour === 0 && dt.minute === 0 && dt.second === 0 && dt.millisecond === 0\n}\n\nconst isValidRDateFieldValue = (value: string | string[] | null | undefined): boolean => {\n if (null === value || 'undefined' === typeof value) return true\n if (Array.isArray(value)) return value.every((v) => isValidRDateFieldSingleValue(v))\n return isValidRDateFieldSingleValue(value)\n}\n\nconst { makeProps: makeRDateFieldProps, emits: rDateFieldEmits } = propsAndEmitsFactory(\n {\n ...omit(\n makeVTextFieldProps({\n clearIcon: () => h(SvgIcon, { d: mdiClose }),\n }),\n [\n 'appendIcon',\n 'appendInnerIcon',\n 'centerAffix',\n 'counter',\n 'counterValue',\n 'hideSpinButtons',\n 'modelModifiers',\n 'modelValue',\n 'persistentCounter',\n 'prependIcon',\n 'prependInnerIcon',\n 'rules',\n 'type',\n 'validationValue',\n 'onClick:append',\n 'onClick:appendInner',\n 'onClick:clear',\n 'onClick:prepend',\n 'onClick:prependInner',\n ]\n ),\n modelValue: {\n type: [String, Array, Object] as PropType<string | string[] | null | undefined>,\n default: undefined,\n },\n displayFormat: {\n type: String as PropType<RDateFieldDisplayFormat>,\n default: 'short',\n },\n displayLocale: {\n type: String as PropType<string | undefined>,\n default: undefined,\n },\n displayTimezone: {\n type: String as PropType<string | Zone | undefined>,\n default: undefined,\n },\n datePickerIcon: {\n type: IconValue as PropType<IconValue>,\n default: () => h(SvgIcon, { d: mdiCalendar }),\n },\n ...pick(\n makeVDatePickerProps({\n prevIcon: () => h(SvgIcon, { d: mdiChevronLeft }),\n nextIcon: () => h(SvgIcon, { d: mdiChevronRight }),\n modeIcon: () => h(SvgIcon, { d: mdiChevronDown }),\n }),\n ['firstDayOfWeek', 'max', 'min', 'showWeek', 'prevIcon', 'nextIcon', 'modeIcon']\n ),\n ...makeCommonResourcefulFieldProps(),\n },\n {\n 'update:modelValue': (value: string | string[] | null | undefined) =>\n isValidRDateFieldValue(value),\n 'update:model-value': (value: string | string[] | null | undefined) =>\n isValidRDateFieldValue(value),\n ...commonEmitsValidators,\n },\n 'RDateField'\n)\n\n/**\n * Props factory function for RDateField component.\n *\n * Creates a comprehensive props configuration that combines VTextField properties\n * with VDatePicker properties and custom date-specific options. The factory\n * excludes incompatible VTextField props and adds date-specific functionality.\n *\n * @returns Props factory function for RDateField component\n *\n * @example\n * ```typescript\n * const props = makeRDateFieldProps()\n * // Includes: displayFormat, datePickerIcon, min, max, showWeek, etc.\n * ```\n */\nexport { makeRDateFieldProps }\n\n/**\n * Type definition for RDateField component props.\n *\n * Extracted from the props factory to provide type safety for component usage.\n * Includes all VTextField props (except incompatible ones), VDatePicker options,\n * and custom date formatting/display properties.\n *\n * Key prop categories:\n * - **VTextField Props**: Standard text field properties (label, variant, etc.)\n * - **VDatePicker Props**: Calendar-specific options (min, max, firstDayOfWeek, etc.)\n * - **Display Options**: displayFormat for Luxon-based formatting\n * - **Common Field Props**: Shared resourceful field properties (multiple, renderMode, etc.)\n *\n * @example\n * ```typescript\n * const props: RDateFieldProps = {\n * modelValue: \"2024-01-15\",\n * label: \"Select Date\",\n * displayFormat: \"medWithWeekday\",\n * min: \"2024-01-01\",\n * max: \"2024-12-31\",\n * showWeek: true\n * }\n * ```\n */\nexport type RDateFieldProps = ExtractPublicPropTypes<ReturnType<typeof makeRDateFieldProps>>\ntype VTextFieldPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVTextFieldProps>>\n\nconst enforceRDateFieldStyles = () => {\n const styleId = 'resourceful-field-date-style'\n if (!document.getElementById(styleId)) {\n const style = document.createElement('style')\n style.id = styleId\n style.textContent = `.resourceful__field__date input[type=date]::-webkit-calendar-picker-indicator,.resourceful__field__date input[type=date]::-webkit-inner-spin-button,.resourceful__field__date input[type=date]::-webkit-clear-button{display:none !important;-webkit-appearance:none !important}.resourceful__field__date input[type=date]::-moz-calendar-picker-indicator{display:none !important}.resourceful__field__date input[type=date]::-ms-clear,.resourceful__field__date input[type=date]::-ms-reveal{display:none !important}`\n document.head.appendChild(style)\n }\n}\n\n/**\n * RDateField - A sophisticated Vue component for ISO 8601 date input and selection.\n *\n * This component provides a comprehensive date input solution that combines the\n * accessibility and validation benefits of HTML5 date inputs with a completely\n * custom visual interface. It features dual input methods (manual text entry\n * and visual picker) with intelligent mobile optimization.\n *\n * ## Key Features\n *\n * - **Dual Input Interface**: Manual text entry + integrated VDatePicker\n * - **Mobile Optimized**: VBottomSheet on mobile, VDialog on desktop\n * - **ISO 8601 Standard**: All dates stored as YYYY-MM-DD strings\n * - **Luxon Formatting**: Flexible display formatting with internationalization\n * - **Browser UI Suppression**: Custom picker while preserving HTML5 benefits\n * - **Multiple Values**: Chip-based interface for date arrays\n * - **Smart Readonly**: Mobile inputs become readonly to prevent keyboard conflicts\n * - **Validation Pipeline**: Ensures valid dates with midnight time components\n *\n * ## Technical Architecture\n *\n * The component uses a sophisticated multi-layer approach:\n *\n * ### Base Layer (VTextField)\n * - HTML5 `type=\"date\"` for validation and mobile keyboard optimization\n * - Injected CSS suppresses all native browser date picker UI\n * - Maintains accessibility and semantic benefits\n *\n * ### Picker Layer (VDatePicker)\n * - Integrated via VDialog (desktop) or VBottomSheet (mobile)\n * - Full calendar navigation with month/year selection\n * - Configurable date constraints (min, max, firstDayOfWeek)\n *\n * ### Mobile Layer (Touch Optimization)\n * - Input becomes readonly on mobile to prevent keyboard conflicts\n * - onClick:control handler directly opens picker interface\n * - VBottomSheet provides optimal touch-based date selection UX\n *\n * ### Validation Layer\n * - Ensures ISO 8601 compliance (YYYY-MM-DD format)\n * - Validates time components are at midnight (pure dates)\n * - Luxon-based parsing for robust date validation\n *\n * ## Usage Patterns\n *\n * @example\n * ```vue\n * <template>\n * <!-- Basic date selection -->\n * <RDateField\n * v-model=\"selectedDate\"\n * label=\"Select Date\"\n * displayFormat=\"med\"\n * />\n *\n * <!-- Multiple dates with constraints -->\n * <RDateField\n * v-model=\"eventDates\"\n * multiple\n * label=\"Event Dates\"\n * :min=\"todayISO\"\n * :max=\"maxDateISO\"\n * displayFormat=\"medWithWeekday\"\n * />\n *\n * <!-- Read-only display -->\n * <RDateField\n * v-model=\"historicalDates\"\n * render-mode=\"read\"\n * displayFormat=\"full\"\n * multiple\n * />\n *\n * <!-- Custom picker options -->\n * <RDateField\n * v-model=\"appointmentDate\"\n * label=\"Appointment\"\n * :firstDayOfWeek=\"1\"\n * :showWeek=\"true\"\n * displayFormat=\"huge\"\n * />\n * </template>\n * ```\n *\n * ## Data Flow\n *\n * 1. **Input**: User types date or selects from picker\n * 2. **Validation**: Luxon validates ISO format and date validity\n * 3. **Storage**: ISO 8601 string stored in modelValue\n * 4. **Display**: Luxon formats for presentation using displayFormat\n * 5. **Emission**: Validated ISO string emitted to parent\n *\n * ## Browser Compatibility\n *\n * Automatic CSS injection handles native picker suppression across:\n * - WebKit: Safari, Chrome, Edge (webkit-calendar-picker-indicator)\n * - Mozilla: Firefox (moz-calendar-picker-indicator)\n * - Microsoft: Legacy Edge, IE (ms-clear, ms-reveal)\n *\n * This ensures consistent custom UI while preserving HTML5 input benefits\n * like validation, accessibility, and mobile keyboard optimization.\n */\nexport const RDateField = defineComponent({\n name: 'RDateField',\n props: makeRDateFieldProps(),\n emits: rDateFieldEmits,\n slots: Object as SlotsType<VTextFieldSlots>,\n setup(props, { emit, slots }) {\n const { mobile } = useDisplay()\n const {\n modelValue,\n theme,\n rounded,\n tile,\n loading,\n class: className,\n style,\n bgColor,\n clearable,\n clearIcon,\n active,\n color,\n baseColor,\n dirty,\n disabled,\n glow,\n error,\n flat,\n iconColor,\n label,\n persistentClear,\n reverse,\n singleLine,\n variant,\n focused,\n errorMessages,\n maxErrors,\n name,\n readonly,\n validateOn,\n width,\n minWidth,\n maxWidth,\n density,\n id,\n hideDetails,\n hint,\n persistentHint,\n messages,\n direction,\n autofocus,\n prefix,\n placeholder,\n persistentPlaceholder,\n suffix,\n role,\n displayFormat,\n displayLocale,\n displayTimezone,\n renderMode,\n multiple,\n choices,\n allowUnspecifiedChoices,\n to,\n href,\n menuIcon,\n noValuesText,\n datePickerIcon,\n firstDayOfWeek,\n max,\n min,\n showWeek,\n prevIcon,\n nextIcon,\n modeIcon,\n onBlur,\n onChange,\n onInput,\n } = toRefs(props)\n const normalizedClassName = computed(() =>\n mergeClasses(className.value, ['resourceful__field__date'])\n )\n const commonProps: ToRefs<LooseRequired<Readonly<CommonResourcefulFieldPublicProps>>> = {\n style,\n label,\n density,\n renderMode,\n multiple,\n choices,\n allowUnspecifiedChoices,\n to,\n href,\n menuIcon,\n active,\n theme,\n disabled,\n variant,\n prefix,\n persistentPlaceholder,\n suffix,\n role,\n focused,\n noValuesText,\n 'class': normalizedClassName,\n 'onUpdate:focused': toRefs(props)['onUpdate:focused'],\n 'onClick:append': toRefs(props)['onClick:append'],\n 'onClick:appendInner': toRefs(props)['onClick:appendInner'],\n 'onClick:clear': toRefs(props)['onClick:clear'],\n 'onClick:prependInner': toRefs(props)['onClick:prependInner'],\n 'onClick:prepend': toRefs(props)['onClick:prepend'],\n 'onMousedown:control': toRefs(props)['onMousedown:control'],\n 'onClick:control': toRefs(props)['onClick:control'],\n error,\n errorMessages,\n dirty,\n onBlur,\n onChange,\n onInput,\n }\n const stringifier = computed<RFieldStringifier<string>>(\n () => (value: string | null | undefined) => {\n if ('undefined' === typeof value || null === value) return ''\n let dt = DateTime.fromISO(value, { zone: 'utc', setZone: true })\n if ('string' === typeof displayLocale.value && '' !== displayLocale.value && dt.isValid) {\n const changed = dt.setLocale(displayLocale.value)\n if (changed.isValid) {\n dt = changed\n }\n }\n if (\n 'string' === typeof displayTimezone.value &&\n '' !== displayTimezone.value &&\n dt.isValid\n ) {\n let changed: DateTime = dt\n if ('UTC' === displayTimezone.value) {\n changed = changed.setZone('utc')\n } else {\n changed = changed.setZone(displayTimezone.value)\n }\n if (changed.isValid) {\n dt = changed\n }\n }\n switch (displayFormat.value) {\n case 'huge':\n return dt.toLocaleString(DateTime.DATE_HUGE)\n case 'full':\n return dt.toLocaleString(DateTime.DATE_FULL)\n case 'medWithWeekday':\n return dt.toLocaleString(DateTime.DATE_MED_WITH_WEEKDAY)\n case 'med':\n return dt.toLocaleString(DateTime.DATE_MED)\n default:\n return dt.toLocaleString(DateTime.DATE_SHORT)\n }\n }\n )\n const vTextFieldBindings = computed<VTextFieldPublicProps & Record<string, any>>(\n () =>\n ({\n theme: theme.value,\n rounded: rounded.value,\n tile: tile.value,\n loading: loading.value,\n class: normalizedClassName.value,\n style: style.value,\n bgColor: bgColor.value,\n clearable: clearable.value,\n clearIcon: clearIcon.value,\n active: active.value,\n color: color.value,\n baseColor: baseColor.value,\n dirty: dirty.value,\n disabled: disabled.value,\n glow: glow.value,\n error: error.value,\n flat: flat.value,\n iconColor: iconColor.value,\n label: label.value,\n persistentClear: persistentClear.value,\n reverse: reverse.value,\n singleLine: singleLine.value,\n variant: variant.value,\n focused: focused.value,\n errorMessages: errorMessages.value,\n maxErrors: maxErrors.value,\n name: name.value,\n readonly: readonly.value,\n validateOn: validateOn.value,\n width: width.value,\n minWidth: minWidth.value,\n maxWidth: maxWidth.value,\n density: density.value,\n id: id.value,\n hideDetails: hideDetails.value,\n hint: hint.value,\n persistentHint: persistentHint.value,\n messages: messages.value,\n direction: direction.value,\n autofocus: autofocus.value,\n prefix: prefix.value,\n placeholder: placeholder.value,\n persistentPlaceholder: persistentPlaceholder.value,\n suffix: suffix.value,\n role: role.value,\n type: 'date',\n max: max.value,\n min: min.value,\n onBlur: onBlur.value,\n onChange: onChange.value,\n onInput: onInput.value,\n }) satisfies VTextFieldPublicProps & Record<string, any>\n )\n const vDialogMenuButtonRef = ref<VBtn>()\n const datePickerOpen = ref(false)\n const dialogMenuButtonBindings = computed<VBtnPublicProps>(() => ({\n ref: vDialogMenuButtonRef,\n modelValue: datePickerOpen.value,\n icon: true,\n variant: 'text' as const,\n size: 'small',\n density: toUnreactive(density),\n onClick: (e: MouseEvent) => {\n e.preventDefault()\n e.stopPropagation()\n e.stopImmediatePropagation()\n datePickerOpen.value = !datePickerOpen.value\n },\n }))\n const appendInnerSlotRenderer = () => {\n return h(VBtn, dialogMenuButtonBindings.value, () =>\n h(VIcon, {\n icon: datePickerIcon.value,\n })\n )\n }\n const commonDialogBindings = computed<CommonDialogPublicProps>(() =>\n deepmerge(\n {\n modelValue: datePickerOpen.value,\n retainFocus: true,\n theme: toUnreactive(theme),\n },\n {\n 'onUpdate:modelValue': (is: boolean) => {\n datePickerOpen.value = is\n },\n }\n )\n )\n const dialogWindowBindings = computed<VDialogPublicProps>(() =>\n deepmerge(commonDialogBindings.value, {\n maxWidth: 500,\n maxHeight: 600,\n } satisfies VDialogPublicProps)\n )\n const dialogBottomSheetBindings = computed<VBottomSheetPublicProps>(() =>\n deepmerge(commonDialogBindings.value, {} satisfies VBottomSheetPublicProps)\n )\n const singleFieldRenderer: SingleFieldRenderer = ({\n props: fieldBindings,\n add,\n isMultiAdd,\n }) => {\n const onDatePickerUpdateModelValue = (\n value: unknown,\n forCallback: keyof typeof fieldBindings\n ) => {\n let emitable: string | null = null\n if (value instanceof Date) {\n emitable = DateTime.fromJSDate(value).toLocal().toISODate()\n } else if ('string' === typeof value) {\n emitable = value\n } else if (null === value) {\n emitable = null\n }\n fieldBindings[forCallback](emitable)\n }\n const datePicker = computed<VNode>(() =>\n h(VCard, { class: ['d-flex', 'flex-column'] }, () => [\n h(\n VToolbar,\n {\n color: 'transparent',\n flat: true,\n class: ['flex-grow-0'],\n },\n () => [\n h(\n 'div',\n { class: ['flex-grow-1', 'd-flex', 'align-center', 'justify-center', 'pa-1'] },\n h(VTextField, {\n ...vTextFieldBindings.value,\n ...fieldBindings,\n hideDetails: true,\n class: ['resourceful__field__date'],\n clearable: true,\n clearIcon: () => h(SvgIcon, { d: mdiClose }),\n })\n ),\n h(VToolbarItems, {}, () => [\n h(\n VBtn,\n {\n icon: true,\n onClick: () => {\n datePickerOpen.value = false\n },\n },\n () => [\n h(VIcon, {\n icon: () => h(SvgIcon, { d: mdiClose }),\n }),\n ]\n ),\n ]),\n ]\n ),\n h(VDivider, { class: ['flex-grow-0'] }),\n h(VDatePicker, {\n bgColor: 'transparent',\n disabled: disabled.value,\n divided: false,\n elevation: 0,\n firstDayOfWeek: firstDayOfWeek.value,\n max: max.value,\n min: min.value,\n showAdjacentMonths: true,\n showWeek: showWeek.value,\n width: '100%',\n hideHeader: true,\n prevIcon: prevIcon.value,\n nextIcon: nextIcon.value,\n modeIcon: modeIcon.value,\n modelValue: fieldBindings.modelValue,\n ...{\n 'onUpdate:model-value': (v: unknown) =>\n onDatePickerUpdateModelValue(v, 'onUpdate:model-value'),\n 'onUpdate:modelValue': (v: unknown) =>\n onDatePickerUpdateModelValue(v, 'onUpdate:modelValue'),\n },\n }),\n ])\n )\n const appendInnerSlot = useSlot<VTextFieldSlots>('append-inner', slots)\n return h(\n VTextField,\n {\n ...vTextFieldBindings.value,\n ...fieldBindings,\n 'hideDetails': isMultiAdd ? true : hideDetails.value,\n 'readonly': isMultiAdd ? false : mobile.value ? true : readonly.value,\n 'class': isMultiAdd ? ['resourceful__field__date'] : normalizedClassName.value,\n 'onKeydown': (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n queueMicrotask(() => add())\n }\n },\n 'onClick:control'(e: MouseEvent) {\n if (!isMultiAdd && mobile.value) {\n e.preventDefault()\n e.stopPropagation()\n e.stopImmediatePropagation()\n datePickerOpen.value = true\n }\n },\n },\n // eslint-disable-next-line @nht/require-function-slots-for-programmatic-components\n {\n ...slots,\n 'append-inner': (...args: NamedSlotParameters<VTextFieldSlots, 'append-inner'>) => [\n appendInnerSlotRenderer(),\n mobile.value\n ? h(VBottomSheet, dialogBottomSheetBindings.value, () => datePicker.value)\n : h(VDialog, dialogWindowBindings.value, () => datePicker.value),\n // @ts-expect-error\n appendInnerSlot ? appendInnerSlot(...args) : null,\n ],\n }\n )\n }\n const { composed } = useFieldComposer(\n commonProps,\n stringifier,\n singleFieldRenderer,\n emit,\n props['onUpdate:modelValue'],\n props['onUpdate:model-value'],\n modelValue,\n props.modelValue\n )\n onMounted(() => enforceRDateFieldStyles())\n return composed\n },\n})\n\nexport type RDateField = typeof RDateField & ComponentPublicInstance\n"],"names":["isValidRDateFieldSingleValue","value","dt","DateTime","isValidRDateFieldValue","v","makeRDateFieldProps","rDateFieldEmits","propsAndEmitsFactory","omit","makeVTextFieldProps","h","SvgIcon","mdiClose","IconValue","mdiCalendar","pick","makeVDatePickerProps","mdiChevronLeft","mdiChevronRight","mdiChevronDown","makeCommonResourcefulFieldProps","commonEmitsValidators","enforceRDateFieldStyles","styleId","style","RDateField","defineComponent","props","emit","slots","mobile","useDisplay","modelValue","theme","rounded","tile","loading","className","bgColor","clearable","clearIcon","active","color","baseColor","dirty","disabled","glow","error","flat","iconColor","label","persistentClear","reverse","singleLine","variant","focused","errorMessages","maxErrors","name","readonly","validateOn","width","minWidth","maxWidth","density","id","hideDetails","hint","persistentHint","messages","direction","autofocus","prefix","placeholder","persistentPlaceholder","suffix","role","displayFormat","displayLocale","displayTimezone","renderMode","multiple","choices","allowUnspecifiedChoices","to","href","menuIcon","noValuesText","datePickerIcon","firstDayOfWeek","max","min","showWeek","prevIcon","nextIcon","modeIcon","onBlur","onChange","onInput","toRefs","normalizedClassName","computed","mergeClasses","commonProps","stringifier","changed","vTextFieldBindings","vDialogMenuButtonRef","ref","datePickerOpen","dialogMenuButtonBindings","toUnreactive","e","appendInnerSlotRenderer","VBtn","VIcon","commonDialogBindings","deepmerge","is","dialogWindowBindings","dialogBottomSheetBindings","singleFieldRenderer","fieldBindings","add","isMultiAdd","onDatePickerUpdateModelValue","forCallback","emitable","datePicker","VCard","VToolbar","VTextField","VToolbarItems","VDivider","VDatePicker","appendInnerSlot","useSlot","args","VBottomSheet","VDialog","composed","useFieldComposer","onMounted"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"date-E_8RP3gK.mjs","sources":["../src/private/fields/date.ts"],"sourcesContent":["/*\n|--------------------------------------------------------------------------\n| Resourceful Date Field\n|--------------------------------------------------------------------------\n|\n| A sophisticated field component for handling ISO 8601 date values with\n| integrated VDatePicker functionality. This component provides a dual-interface\n| approach: VTextField for manual input with VDatePicker for visual selection,\n| optimized for both desktop and mobile experiences.\n|\n| ## Core Features\n|\n| - **ISO 8601 Storage**: All dates stored as standard ISO date strings (YYYY-MM-DD)\n| - **Luxon Formatting**: Flexible display formatting using DateTime locale strings\n| - **Dual Input Methods**: Manual text entry + visual date picker selection\n| - **Mobile Optimized**: VBottomSheet on mobile, VDialog on desktop\n| - **Browser UI Suppression**: Disables native date pickers while preserving HTML5 benefits\n| - **Multiple Mode**: Chip-based interface for date arrays with unified picker\n|\n| ## Technical Implementation\n|\n| The component uses VTextField with type=\"date\" as its base, providing HTML5\n| validation and mobile keyboard optimization while completely suppressing\n| browser-native date picker UI through injected CSS. A custom VDatePicker\n| is integrated via dialog/bottom-sheet overlays for visual date selection.\n|\n| Mobile devices get special handling:\n| - Input becomes readonly to prevent keyboard conflicts\n| - onClick:control handler directly opens VBottomSheet picker\n| - VBottomSheet provides optimal touch-based date selection\n|\n| ## Display Formats (Luxon-based)\n|\n| - **short**: \"9/11/2001\" (DateTime.DATE_SHORT)\n| - **med**: \"Sep 11, 2001\" (DateTime.DATE_MED)\n| - **medWithWeekday**: \"Tue, Sep 11, 2001\" (DateTime.DATE_MED_WITH_WEEKDAY)\n| - **full**: \"September 11, 2001\" (DateTime.DATE_FULL)\n| - **huge**: \"Tuesday, September 11, 2001\" (DateTime.DATE_HUGE)\n|\n| ## Usage Examples\n|\n| ```vue\n| <!-- Basic date field -->\n| <RDateField\n| v-model=\"birthDate\"\n| label=\"Birth Date\"\n| displayFormat=\"med\"\n| />\n|\n| <!-- Multiple dates -->\n| <RDateField\n| v-model=\"eventDates\"\n| multiple\n| label=\"Event Dates\"\n| displayFormat=\"medWithWeekday\"\n| />\n|\n| <!-- With date constraints -->\n| <RDateField\n| v-model=\"appointmentDate\"\n| label=\"Appointment\"\n| :min=\"new Date().toISOString().split('T')[0]\"\n| :max=\"futureDate\"\n| />\n|\n| <!-- Read-only display -->\n| <RDateField\n| v-model=\"historicalDates\"\n| multiple\n| render-mode=\"read\"\n| displayFormat=\"full\"\n| />\n| ```\n|\n| ## Validation\n|\n| All dates are validated to ensure:\n| - Valid ISO 8601 date format (YYYY-MM-DD)\n| - Time components at midnight (pure date, no time)\n| - Valid DateTime parsing through Luxon\n|\n| ## Browser Compatibility\n|\n| Injected CSS suppresses native date picker indicators across:\n| - WebKit browsers (Safari, Chrome, Edge)\n| - Mozilla Firefox\n| - Microsoft browsers (legacy Edge, IE)\n| \n| This ensures consistent UI while preserving HTML5 input benefits.\n*/\n\nimport { DateTime } from 'luxon'\nimport { useDisplay } from 'vuetify'\nimport { SvgIcon } from '../svg-icon'\nimport { deepmerge } from 'deepmerge-ts'\nimport { VBtn } from 'vuetify/components/VBtn'\nimport { VCard } from 'vuetify/components/VCard'\nimport { VIcon } from 'vuetify/components/VIcon'\nimport { useFieldComposer } from './field_composer'\nimport { VDialog } from 'vuetify/components/VDialog'\nimport { VDivider } from 'vuetify/components/VDivider'\nimport { VTextField } from 'vuetify/components/VTextField'\nimport { propsAndEmitsFactory } from '../common/factories'\nimport { omit, pick } from '@nhtio/vuetifiable/util/helpers'\nimport { VDatePicker } from 'vuetify/components/VDatePicker'\nimport { VBottomSheet } from 'vuetify/components/VBottomSheet'\nimport { IconValue } from '@nhtio/vuetifiable/composables/icons'\nimport { toUnreactive, useSlot, mergeClasses } from '../common/utils'\nimport { VToolbar, VToolbarItems } from 'vuetify/components/VToolbar'\nimport { h, defineComponent, toRefs, computed, ref, onMounted } from 'vue'\nimport { makeCommonResourcefulFieldProps, commonEmitsValidators } from './common'\nimport { makeVTextFieldProps } from '@nhtio/vuetifiable/components/VTextField/VTextField'\nimport { makeVDatePickerProps } from '@nhtio/vuetifiable/components/VDatePicker/VDatePicker'\nimport { mdiClose, mdiCalendar, mdiChevronLeft, mdiChevronRight, mdiChevronDown } from '@mdi/js'\nimport type { Zone } from 'luxon'\nimport type { SharedUnionFields } from 'type-fest'\nimport type { SingleFieldRenderer } from './field_composer'\nimport type { LooseRequired } from '@vue/shared/dist/shared.d.ts'\nimport type { makeVBtnProps } from '@nhtio/vuetifiable/components/VBtn/VBtn'\nimport type { NamedSlotParameters, ExtractSlotDefinitions } from '../common/types'\nimport type { CommonResourcefulFieldPublicProps, RFieldStringifier } from './common'\nimport type { makeVDialogProps } from '@nhtio/vuetifiable/components/VDialog/VDialog'\nimport type { makeVBottomSheetProps } from '@nhtio/vuetifiable/components/VBottomSheet/VBottomSheet'\nimport type {\n PropType,\n ExtractPublicPropTypes,\n ToRefs,\n VNode,\n SlotsType,\n ComponentPublicInstance,\n} from 'vue'\n\ntype VBtnPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVBtnProps>>\ntype VDialogPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVDialogProps>>\ntype VBottomSheetPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVBottomSheetProps>>\ntype CommonDialogPublicProps = SharedUnionFields<VDialogPublicProps | VBottomSheetPublicProps>\ntype VTextFieldSlots = ExtractSlotDefinitions<typeof VTextField.slots>\n\n/**\n * Available display format options for RDateField.\n *\n * These formats correspond to Luxon's built-in DateTime locale string constants,\n * providing consistent, internationalized date formatting across different locales.\n *\n * @example\n * ```typescript\n * const formats: RDateFieldDisplayFormat[] = ['short', 'med', 'full']\n * // Results in: [\"9/11/2001\", \"Sep 11, 2001\", \"September 11, 2001\"]\n * ```\n */\nexport const RDateFieldDisplayFormat = ['short', 'med', 'medWithWeekday', 'full', 'huge'] as const\n\n/**\n * Type representing the available display format options for date rendering.\n *\n * Maps to Luxon DateTime constants:\n * - `short`: \"9/11/2001\" (DateTime.DATE_SHORT)\n * - `med`: \"Sep 11, 2001\" (DateTime.DATE_MED)\n * - `medWithWeekday`: \"Tue, Sep 11, 2001\" (DateTime.DATE_MED_WITH_WEEKDAY)\n * - `full`: \"September 11, 2001\" (DateTime.DATE_FULL)\n * - `huge`: \"Tuesday, September 11, 2001\" (DateTime.DATE_HUGE)\n *\n * @example\n * ```typescript\n * const format: RDateFieldDisplayFormat = 'medWithWeekday'\n * // Displays as: \"Tue, Sep 11, 2001\"\n * ```\n */\nexport type RDateFieldDisplayFormat = (typeof RDateFieldDisplayFormat)[number]\n\nconst isValidRDateFieldSingleValue = (value: unknown): boolean => {\n if ('string' !== typeof value) return false\n const dt = DateTime.fromISO(value)\n if (!dt.isValid) return false\n // Check if time components are at default (midnight)\n return dt.hour === 0 && dt.minute === 0 && dt.second === 0 && dt.millisecond === 0\n}\n\nconst isValidRDateFieldValue = (value: string | string[] | null | undefined): boolean => {\n if (null === value || 'undefined' === typeof value) return true\n if (Array.isArray(value)) return value.every((v) => isValidRDateFieldSingleValue(v))\n return isValidRDateFieldSingleValue(value)\n}\n\nconst { makeProps: makeRDateFieldProps, emits: rDateFieldEmits } = propsAndEmitsFactory(\n {\n ...omit(\n makeVTextFieldProps({\n clearIcon: () => h(SvgIcon, { d: mdiClose }),\n }),\n [\n 'appendIcon',\n 'appendInnerIcon',\n 'centerAffix',\n 'counter',\n 'counterValue',\n 'hideSpinButtons',\n 'modelModifiers',\n 'modelValue',\n 'persistentCounter',\n 'prependIcon',\n 'prependInnerIcon',\n 'rules',\n 'type',\n 'validationValue',\n 'onClick:append',\n 'onClick:appendInner',\n 'onClick:clear',\n 'onClick:prepend',\n 'onClick:prependInner',\n ]\n ),\n modelValue: {\n type: [String, Array, Object] as PropType<string | string[] | null | undefined>,\n default: undefined,\n },\n displayFormat: {\n type: String as PropType<RDateFieldDisplayFormat>,\n default: 'short',\n },\n displayLocale: {\n type: String as PropType<string | undefined>,\n default: undefined,\n },\n displayTimezone: {\n type: String as PropType<string | Zone | undefined>,\n default: undefined,\n },\n datePickerIcon: {\n type: IconValue as PropType<IconValue>,\n default: () => h(SvgIcon, { d: mdiCalendar }),\n },\n ...pick(\n makeVDatePickerProps({\n prevIcon: () => h(SvgIcon, { d: mdiChevronLeft }),\n nextIcon: () => h(SvgIcon, { d: mdiChevronRight }),\n modeIcon: () => h(SvgIcon, { d: mdiChevronDown }),\n }),\n ['firstDayOfWeek', 'max', 'min', 'showWeek', 'prevIcon', 'nextIcon', 'modeIcon']\n ),\n ...makeCommonResourcefulFieldProps(),\n },\n {\n 'update:modelValue': (value: string | string[] | null | undefined) =>\n isValidRDateFieldValue(value),\n 'update:model-value': (value: string | string[] | null | undefined) =>\n isValidRDateFieldValue(value),\n ...commonEmitsValidators,\n },\n 'RDateField'\n)\n\n/**\n * Props factory function for RDateField component.\n *\n * Creates a comprehensive props configuration that combines VTextField properties\n * with VDatePicker properties and custom date-specific options. The factory\n * excludes incompatible VTextField props and adds date-specific functionality.\n *\n * @returns Props factory function for RDateField component\n *\n * @example\n * ```typescript\n * const props = makeRDateFieldProps()\n * // Includes: displayFormat, datePickerIcon, min, max, showWeek, etc.\n * ```\n */\nexport { makeRDateFieldProps }\n\n/**\n * Type definition for RDateField component props.\n *\n * Extracted from the props factory to provide type safety for component usage.\n * Includes all VTextField props (except incompatible ones), VDatePicker options,\n * and custom date formatting/display properties.\n *\n * Key prop categories:\n * - **VTextField Props**: Standard text field properties (label, variant, etc.)\n * - **VDatePicker Props**: Calendar-specific options (min, max, firstDayOfWeek, etc.)\n * - **Display Options**: displayFormat for Luxon-based formatting\n * - **Common Field Props**: Shared resourceful field properties (multiple, renderMode, etc.)\n *\n * @example\n * ```typescript\n * const props: RDateFieldProps = {\n * modelValue: \"2024-01-15\",\n * label: \"Select Date\",\n * displayFormat: \"medWithWeekday\",\n * min: \"2024-01-01\",\n * max: \"2024-12-31\",\n * showWeek: true\n * }\n * ```\n */\nexport type RDateFieldProps = ExtractPublicPropTypes<ReturnType<typeof makeRDateFieldProps>>\ntype VTextFieldPublicProps = ExtractPublicPropTypes<ReturnType<typeof makeVTextFieldProps>>\n\nconst enforceRDateFieldStyles = () => {\n const styleId = 'resourceful-field-date-style'\n if (!document.getElementById(styleId)) {\n const style = document.createElement('style')\n style.id = styleId\n style.textContent = `.resourceful__field__date input[type=date]::-webkit-calendar-picker-indicator,.resourceful__field__date input[type=date]::-webkit-inner-spin-button,.resourceful__field__date input[type=date]::-webkit-clear-button{display:none !important;-webkit-appearance:none !important}.resourceful__field__date input[type=date]::-moz-calendar-picker-indicator{display:none !important}.resourceful__field__date input[type=date]::-ms-clear,.resourceful__field__date input[type=date]::-ms-reveal{display:none !important}`\n document.head.appendChild(style)\n }\n}\n\n/**\n * RDateField - A sophisticated Vue component for ISO 8601 date input and selection.\n *\n * This component provides a comprehensive date input solution that combines the\n * accessibility and validation benefits of HTML5 date inputs with a completely\n * custom visual interface. It features dual input methods (manual text entry\n * and visual picker) with intelligent mobile optimization.\n *\n * ## Key Features\n *\n * - **Dual Input Interface**: Manual text entry + integrated VDatePicker\n * - **Mobile Optimized**: VBottomSheet on mobile, VDialog on desktop\n * - **ISO 8601 Standard**: All dates stored as YYYY-MM-DD strings\n * - **Luxon Formatting**: Flexible display formatting with internationalization\n * - **Browser UI Suppression**: Custom picker while preserving HTML5 benefits\n * - **Multiple Values**: Chip-based interface for date arrays\n * - **Smart Readonly**: Mobile inputs become readonly to prevent keyboard conflicts\n * - **Validation Pipeline**: Ensures valid dates with midnight time components\n *\n * ## Technical Architecture\n *\n * The component uses a sophisticated multi-layer approach:\n *\n * ### Base Layer (VTextField)\n * - HTML5 `type=\"date\"` for validation and mobile keyboard optimization\n * - Injected CSS suppresses all native browser date picker UI\n * - Maintains accessibility and semantic benefits\n *\n * ### Picker Layer (VDatePicker)\n * - Integrated via VDialog (desktop) or VBottomSheet (mobile)\n * - Full calendar navigation with month/year selection\n * - Configurable date constraints (min, max, firstDayOfWeek)\n *\n * ### Mobile Layer (Touch Optimization)\n * - Input becomes readonly on mobile to prevent keyboard conflicts\n * - onClick:control handler directly opens picker interface\n * - VBottomSheet provides optimal touch-based date selection UX\n *\n * ### Validation Layer\n * - Ensures ISO 8601 compliance (YYYY-MM-DD format)\n * - Validates time components are at midnight (pure dates)\n * - Luxon-based parsing for robust date validation\n *\n * ## Usage Patterns\n *\n * @example\n * ```vue\n * <template>\n * <!-- Basic date selection -->\n * <RDateField\n * v-model=\"selectedDate\"\n * label=\"Select Date\"\n * displayFormat=\"med\"\n * />\n *\n * <!-- Multiple dates with constraints -->\n * <RDateField\n * v-model=\"eventDates\"\n * multiple\n * label=\"Event Dates\"\n * :min=\"todayISO\"\n * :max=\"maxDateISO\"\n * displayFormat=\"medWithWeekday\"\n * />\n *\n * <!-- Read-only display -->\n * <RDateField\n * v-model=\"historicalDates\"\n * render-mode=\"read\"\n * displayFormat=\"full\"\n * multiple\n * />\n *\n * <!-- Custom picker options -->\n * <RDateField\n * v-model=\"appointmentDate\"\n * label=\"Appointment\"\n * :firstDayOfWeek=\"1\"\n * :showWeek=\"true\"\n * displayFormat=\"huge\"\n * />\n * </template>\n * ```\n *\n * ## Data Flow\n *\n * 1. **Input**: User types date or selects from picker\n * 2. **Validation**: Luxon validates ISO format and date validity\n * 3. **Storage**: ISO 8601 string stored in modelValue\n * 4. **Display**: Luxon formats for presentation using displayFormat\n * 5. **Emission**: Validated ISO string emitted to parent\n *\n * ## Browser Compatibility\n *\n * Automatic CSS injection handles native picker suppression across:\n * - WebKit: Safari, Chrome, Edge (webkit-calendar-picker-indicator)\n * - Mozilla: Firefox (moz-calendar-picker-indicator)\n * - Microsoft: Legacy Edge, IE (ms-clear, ms-reveal)\n *\n * This ensures consistent custom UI while preserving HTML5 input benefits\n * like validation, accessibility, and mobile keyboard optimization.\n */\nexport const RDateField = defineComponent({\n name: 'RDateField',\n props: makeRDateFieldProps(),\n emits: rDateFieldEmits,\n slots: Object as SlotsType<VTextFieldSlots>,\n setup(props, { emit, slots }) {\n const { mobile } = useDisplay()\n const {\n modelValue,\n theme,\n rounded,\n tile,\n loading,\n class: className,\n style,\n bgColor,\n clearable,\n clearIcon,\n active,\n color,\n baseColor,\n dirty,\n disabled,\n glow,\n error,\n flat,\n iconColor,\n label,\n persistentClear,\n reverse,\n singleLine,\n variant,\n focused,\n errorMessages,\n maxErrors,\n name,\n readonly,\n validateOn,\n width,\n minWidth,\n maxWidth,\n density,\n id,\n hideDetails,\n hint,\n persistentHint,\n messages,\n direction,\n autofocus,\n prefix,\n placeholder,\n persistentPlaceholder,\n suffix,\n role,\n displayFormat,\n displayLocale,\n displayTimezone,\n renderMode,\n multiple,\n choices,\n allowUnspecifiedChoices,\n to,\n href,\n menuIcon,\n noValuesText,\n datePickerIcon,\n firstDayOfWeek,\n max,\n min,\n showWeek,\n prevIcon,\n nextIcon,\n modeIcon,\n onBlur,\n onChange,\n onInput,\n } = toRefs(props)\n const normalizedClassName = computed(() =>\n mergeClasses(className.value, ['resourceful__field__date'])\n )\n const commonProps: ToRefs<LooseRequired<Readonly<CommonResourcefulFieldPublicProps>>> = {\n style,\n label,\n density,\n renderMode,\n multiple,\n choices,\n allowUnspecifiedChoices,\n to,\n href,\n menuIcon,\n active,\n theme,\n disabled,\n variant,\n prefix,\n persistentPlaceholder,\n suffix,\n role,\n focused,\n noValuesText,\n 'class': normalizedClassName,\n 'onUpdate:focused': toRefs(props)['onUpdate:focused'],\n 'onClick:append': toRefs(props)['onClick:append'],\n 'onClick:appendInner': toRefs(props)['onClick:appendInner'],\n 'onClick:clear': toRefs(props)['onClick:clear'],\n 'onClick:prependInner': toRefs(props)['onClick:prependInner'],\n 'onClick:prepend': toRefs(props)['onClick:prepend'],\n 'onMousedown:control': toRefs(props)['onMousedown:control'],\n 'onClick:control': toRefs(props)['onClick:control'],\n error,\n errorMessages,\n dirty,\n onBlur,\n onChange,\n onInput,\n }\n const stringifier = computed<RFieldStringifier<string>>(\n () => (value: string | null | undefined) => {\n if ('undefined' === typeof value || null === value) return ''\n let dt = DateTime.fromISO(value, { zone: 'utc', setZone: true })\n if ('string' === typeof displayLocale.value && '' !== displayLocale.value && dt.isValid) {\n const changed = dt.setLocale(displayLocale.value)\n if (changed.isValid) {\n dt = changed\n }\n }\n if (\n 'string' === typeof displayTimezone.value &&\n '' !== displayTimezone.value &&\n dt.isValid\n ) {\n let changed: DateTime = dt\n if ('UTC' === displayTimezone.value) {\n changed = changed.setZone('utc')\n } else {\n changed = changed.setZone(displayTimezone.value)\n }\n if (changed.isValid) {\n dt = changed\n }\n }\n switch (displayFormat.value) {\n case 'huge':\n return dt.toLocaleString(DateTime.DATE_HUGE)\n case 'full':\n return dt.toLocaleString(DateTime.DATE_FULL)\n case 'medWithWeekday':\n return dt.toLocaleString(DateTime.DATE_MED_WITH_WEEKDAY)\n case 'med':\n return dt.toLocaleString(DateTime.DATE_MED)\n default:\n return dt.toLocaleString(DateTime.DATE_SHORT)\n }\n }\n )\n const vTextFieldBindings = computed<VTextFieldPublicProps & Record<string, any>>(\n () =>\n ({\n theme: theme.value,\n rounded: rounded.value,\n tile: tile.value,\n loading: loading.value,\n class: normalizedClassName.value,\n style: style.value,\n bgColor: bgColor.value,\n clearable: clearable.value,\n clearIcon: clearIcon.value,\n active: active.value,\n color: color.value,\n baseColor: baseColor.value,\n dirty: dirty.value,\n disabled: disabled.value,\n glow: glow.value,\n error: error.value,\n flat: flat.value,\n iconColor: iconColor.value,\n label: label.value,\n persistentClear: persistentClear.value,\n reverse: reverse.value,\n singleLine: singleLine.value,\n variant: variant.value,\n focused: focused.value,\n errorMessages: errorMessages.value,\n maxErrors: maxErrors.value,\n name: name.value,\n readonly: readonly.value,\n validateOn: validateOn.value,\n width: width.value,\n minWidth: minWidth.value,\n maxWidth: maxWidth.value,\n density: density.value,\n id: id.value,\n hideDetails: hideDetails.value,\n hint: hint.value,\n persistentHint: persistentHint.value,\n messages: messages.value,\n direction: direction.value,\n autofocus: autofocus.value,\n prefix: prefix.value,\n placeholder: placeholder.value,\n persistentPlaceholder: persistentPlaceholder.value,\n suffix: suffix.value,\n role: role.value,\n type: 'date',\n max: max.value,\n min: min.value,\n onBlur: onBlur.value,\n onChange: onChange.value,\n onInput: onInput.value,\n }) satisfies VTextFieldPublicProps & Record<string, any>\n )\n const vDialogMenuButtonRef = ref<VBtn>()\n const datePickerOpen = ref(false)\n const dialogMenuButtonBindings = computed<VBtnPublicProps>(() => ({\n ref: vDialogMenuButtonRef,\n modelValue: datePickerOpen.value,\n icon: true,\n variant: 'text' as const,\n size: 'small',\n density: toUnreactive(density),\n onClick: (e: MouseEvent) => {\n e.preventDefault()\n e.stopPropagation()\n e.stopImmediatePropagation()\n datePickerOpen.value = !datePickerOpen.value\n },\n }))\n const appendInnerSlotRenderer = () => {\n return h(VBtn, dialogMenuButtonBindings.value, () =>\n h(VIcon, {\n icon: datePickerIcon.value,\n })\n )\n }\n const commonDialogBindings = computed<CommonDialogPublicProps>(() =>\n deepmerge(\n {\n modelValue: datePickerOpen.value,\n retainFocus: true,\n theme: toUnreactive(theme),\n },\n {\n 'onUpdate:modelValue': (is: boolean) => {\n datePickerOpen.value = is\n },\n }\n )\n )\n const dialogWindowBindings = computed<VDialogPublicProps>(() =>\n deepmerge(commonDialogBindings.value, {\n maxWidth: 500,\n maxHeight: 600,\n } satisfies VDialogPublicProps)\n )\n const dialogBottomSheetBindings = computed<VBottomSheetPublicProps>(() =>\n deepmerge(commonDialogBindings.value, {} satisfies VBottomSheetPublicProps)\n )\n const singleFieldRenderer: SingleFieldRenderer = ({\n props: fieldBindings,\n add,\n isMultiAdd,\n }) => {\n const onDatePickerUpdateModelValue = (\n value: unknown,\n forCallback: keyof typeof fieldBindings\n ) => {\n let emitable: string | null = null\n if (value instanceof Date) {\n emitable = DateTime.fromJSDate(value).toLocal().toISODate()\n } else if ('string' === typeof value) {\n emitable = value\n } else if (null === value) {\n emitable = null\n }\n fieldBindings[forCallback](emitable)\n }\n const datePicker = computed<VNode>(() =>\n h(VCard, { class: ['d-flex', 'flex-column'] }, () => [\n h(\n VToolbar,\n {\n color: 'transparent',\n flat: true,\n class: ['flex-grow-0'],\n },\n () => [\n h(\n 'div',\n { class: ['flex-grow-1', 'd-flex', 'align-center', 'justify-center', 'pa-1'] },\n h(VTextField, {\n ...vTextFieldBindings.value,\n ...fieldBindings,\n hideDetails: true,\n class: ['resourceful__field__date'],\n clearable: true,\n clearIcon: () => h(SvgIcon, { d: mdiClose }),\n })\n ),\n h(VToolbarItems, {}, () => [\n h(\n VBtn,\n {\n icon: true,\n onClick: () => {\n datePickerOpen.value = false\n },\n },\n () => [\n h(VIcon, {\n icon: () => h(SvgIcon, { d: mdiClose }),\n }),\n ]\n ),\n ]),\n ]\n ),\n h(VDivider, { class: ['flex-grow-0'] }),\n h(VDatePicker, {\n bgColor: 'transparent',\n disabled: disabled.value,\n divided: false,\n elevation: 0,\n firstDayOfWeek: firstDayOfWeek.value,\n max: max.value,\n min: min.value,\n showAdjacentMonths: true,\n showWeek: showWeek.value,\n width: '100%',\n hideHeader: true,\n prevIcon: prevIcon.value,\n nextIcon: nextIcon.value,\n modeIcon: modeIcon.value,\n modelValue: fieldBindings.modelValue,\n ...{\n 'onUpdate:model-value': (v: unknown) =>\n onDatePickerUpdateModelValue(v, 'onUpdate:model-value'),\n 'onUpdate:modelValue': (v: unknown) =>\n onDatePickerUpdateModelValue(v, 'onUpdate:modelValue'),\n },\n }),\n ])\n )\n const appendInnerSlot = useSlot<VTextFieldSlots>('append-inner', slots)\n return h(\n VTextField,\n {\n ...vTextFieldBindings.value,\n ...fieldBindings,\n 'hideDetails': isMultiAdd ? true : hideDetails.value,\n 'readonly': isMultiAdd ? false : mobile.value ? true : readonly.value,\n 'class': isMultiAdd ? ['resourceful__field__date'] : normalizedClassName.value,\n 'onKeydown': (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n queueMicrotask(() => add())\n }\n },\n 'onClick:control'(e: MouseEvent) {\n if (!isMultiAdd && mobile.value) {\n e.preventDefault()\n e.stopPropagation()\n e.stopImmediatePropagation()\n datePickerOpen.value = true\n }\n },\n },\n // eslint-disable-next-line @nht/require-function-slots-for-programmatic-components\n {\n ...slots,\n 'append-inner': (...args: NamedSlotParameters<VTextFieldSlots, 'append-inner'>) => [\n appendInnerSlotRenderer(),\n mobile.value\n ? h(VBottomSheet, dialogBottomSheetBindings.value, () => datePicker.value)\n : h(VDialog, dialogWindowBindings.value, () => datePicker.value),\n // @ts-expect-error\n appendInnerSlot ? appendInnerSlot(...args) : null,\n ],\n }\n )\n }\n const { composed } = useFieldComposer(\n commonProps,\n stringifier,\n singleFieldRenderer,\n emit,\n props['onUpdate:modelValue'],\n props['onUpdate:model-value'],\n modelValue,\n props.modelValue\n )\n onMounted(() => enforceRDateFieldStyles())\n return composed\n },\n})\n\nexport type RDateField = typeof RDateField & ComponentPublicInstance\n"],"names":["isValidRDateFieldSingleValue","value","dt","DateTime","isValidRDateFieldValue","v","makeRDateFieldProps","rDateFieldEmits","propsAndEmitsFactory","omit","makeVTextFieldProps","h","SvgIcon","mdiClose","IconValue","mdiCalendar","pick","makeVDatePickerProps","mdiChevronLeft","mdiChevronRight","mdiChevronDown","makeCommonResourcefulFieldProps","commonEmitsValidators","enforceRDateFieldStyles","styleId","style","RDateField","defineComponent","props","emit","slots","mobile","useDisplay","modelValue","theme","rounded","tile","loading","className","bgColor","clearable","clearIcon","active","color","baseColor","dirty","disabled","glow","error","flat","iconColor","label","persistentClear","reverse","singleLine","variant","focused","errorMessages","maxErrors","name","readonly","validateOn","width","minWidth","maxWidth","density","id","hideDetails","hint","persistentHint","messages","direction","autofocus","prefix","placeholder","persistentPlaceholder","suffix","role","displayFormat","displayLocale","displayTimezone","renderMode","multiple","choices","allowUnspecifiedChoices","to","href","menuIcon","noValuesText","datePickerIcon","firstDayOfWeek","max","min","showWeek","prevIcon","nextIcon","modeIcon","onBlur","onChange","onInput","toRefs","normalizedClassName","computed","mergeClasses","commonProps","stringifier","changed","vTextFieldBindings","vDialogMenuButtonRef","ref","datePickerOpen","dialogMenuButtonBindings","toUnreactive","e","appendInnerSlotRenderer","VBtn","VIcon","commonDialogBindings","deepmerge","is","dialogWindowBindings","dialogBottomSheetBindings","singleFieldRenderer","fieldBindings","add","isMultiAdd","onDatePickerUpdateModelValue","forCallback","emitable","datePicker","VCard","VToolbar","VTextField","VToolbarItems","VDivider","VDatePicker","appendInnerSlot","useSlot","args","VBottomSheet","VDialog","composed","useFieldComposer","onMounted"],"mappings":"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"}
|