@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.
Files changed (181) hide show
  1. package/{VBtn-DhfYEt9V.mjs → VBtn-C4WCntKg.mjs} +8 -8
  2. package/{VBtn-DhfYEt9V.mjs.map → VBtn-C4WCntKg.mjs.map} +1 -1
  3. package/{VDatePicker-D0OTAyvJ.mjs → VDatePicker-DOCNk-HL.mjs} +166 -166
  4. package/{VDatePicker-D0OTAyvJ.mjs.map → VDatePicker-DOCNk-HL.mjs.map} +1 -1
  5. package/{VEmptyState-BFrXSTJ-.mjs → VEmptyState-CfouFZTg.mjs} +41 -41
  6. package/{VEmptyState-BFrXSTJ-.mjs.map → VEmptyState-CfouFZTg.mjs.map} +1 -1
  7. package/{VHover-DLvOmsjv.mjs → VHover-DvUhdfsL.mjs} +3 -3
  8. package/{VHover-DLvOmsjv.mjs.map → VHover-DvUhdfsL.mjs.map} +1 -1
  9. package/{VListItem-LNaoM8S4.mjs → VListItem-BT-NXJyi.mjs} +56 -56
  10. package/{VListItem-LNaoM8S4.mjs.map → VListItem-BT-NXJyi.mjs.map} +1 -1
  11. package/{VMenu-9rTbTKtH.mjs → VMenu-Bk2NN8qb.mjs} +28 -28
  12. package/{VMenu-9rTbTKtH.mjs.map → VMenu-Bk2NN8qb.mjs.map} +1 -1
  13. package/{VPicker-BGuRD0KW.mjs → VPicker-DmY6CdER.mjs} +5 -5
  14. package/{VPicker-BGuRD0KW.mjs.map → VPicker-DmY6CdER.mjs.map} +1 -1
  15. package/{VRadioGroup-Dx_wEqzl.mjs → VRadioGroup-BO7XdtLS.mjs} +21 -21
  16. package/{VRadioGroup-Dx_wEqzl.mjs.map → VRadioGroup-BO7XdtLS.mjs.map} +1 -1
  17. package/{VRow-DaLdbIGw.mjs → VRow-BhNJcY5-.mjs} +17 -17
  18. package/{VRow-DaLdbIGw.mjs.map → VRow-BhNJcY5-.mjs.map} +1 -1
  19. package/{VSheet-DnIfs-1c.mjs → VSheet-Bkr-m6FE.mjs} +14 -14
  20. package/{VSheet-DnIfs-1c.mjs.map → VSheet-Bkr-m6FE.mjs.map} +1 -1
  21. package/{actions-8bWGsB-p.mjs → actions-ORUmfJR5.mjs} +15 -15
  22. package/{actions-8bWGsB-p.mjs.map → actions-ORUmfJR5.mjs.map} +1 -1
  23. package/{alert-IW1AIWZw.mjs → alert-pFT7pWTZ.mjs} +97 -94
  24. package/alert-pFT7pWTZ.mjs.map +1 -0
  25. package/{bigint-Jmfa2L4S.mjs → bigint-CCM0aPaS.mjs} +6 -6
  26. package/{bigint-Jmfa2L4S.mjs.map → bigint-CCM0aPaS.mjs.map} +1 -1
  27. package/{boolean-BEY7eBxf.mjs → boolean-1-MOJPSu.mjs} +40 -40
  28. package/{boolean-BEY7eBxf.mjs.map → boolean-1-MOJPSu.mjs.map} +1 -1
  29. package/{clipboard-BoKd7mFG.mjs → clipboard-CdGABqm1.mjs} +51 -51
  30. package/{clipboard-BoKd7mFG.mjs.map → clipboard-CdGABqm1.mjs.map} +1 -1
  31. package/{colorUtils-DmtKYNgW.mjs → colorUtils-BdpqbLZS.mjs} +3 -3
  32. package/{colorUtils-DmtKYNgW.mjs.map → colorUtils-BdpqbLZS.mjs.map} +1 -1
  33. package/{common-BeDAn4wu.mjs → common-Bi5RUD-n.mjs} +8881 -8880
  34. package/common-Bi5RUD-n.mjs.map +1 -0
  35. package/{component-CjPpW_A2.mjs → component-DhEJuSE6.mjs} +2 -2
  36. package/{component-CjPpW_A2.mjs.map → component-DhEJuSE6.mjs.map} +1 -1
  37. package/components/autorefresh_controller.mjs +1 -1
  38. package/components/control_button.mjs +1 -1
  39. package/components/control_button_bar.mjs +2 -2
  40. package/components/control_menu.mjs +1 -1
  41. package/components/custom_field.mjs +1 -1
  42. package/components/exporter.mjs +1 -1
  43. package/components/fields/bigint.mjs +1 -1
  44. package/components/fields/boolean.mjs +1 -1
  45. package/components/fields/date.mjs +1 -1
  46. package/components/fields/date_time.mjs +1 -1
  47. package/components/fields/enum.mjs +1 -1
  48. package/components/fields/integer.mjs +1 -1
  49. package/components/fields/number.mjs +1 -1
  50. package/components/fields/string.mjs +1 -1
  51. package/components/fields/unsigned_integer.mjs +1 -1
  52. package/components/fields.mjs +9 -9
  53. package/components/form_with_validation.mjs +1 -1
  54. package/components/resourceful_alerter.mjs +1 -1
  55. package/components/resourceful_index.mjs +1 -1
  56. package/components/resourceful_record.mjs +2 -2
  57. package/components/resourceful_record_default_form.mjs +1 -1
  58. package/components/resourceful_record_form.mjs +1 -1
  59. package/components/sortable.mjs +1 -1
  60. package/components/svg_icon.mjs +1 -1
  61. package/components/timezone_picker.mjs +1 -1
  62. package/components.mjs +23 -23
  63. package/composables.mjs +8 -8
  64. package/{console-CRXioSFP.mjs → console-Dgoi3FwV.mjs} +2 -2
  65. package/{console-CRXioSFP.mjs.map → console-Dgoi3FwV.mjs.map} +1 -1
  66. package/{custom-Y1WJVKP9.mjs → custom-DQmbYYPh.mjs} +17 -17
  67. package/{custom-Y1WJVKP9.mjs.map → custom-DQmbYYPh.mjs.map} +1 -1
  68. package/{date-BxEeCNWD.mjs → date-E_8RP3gK.mjs} +21 -21
  69. package/{date-BxEeCNWD.mjs.map → date-E_8RP3gK.mjs.map} +1 -1
  70. package/{date_time-6kpv7eDF.mjs → date_time-BmYl2TFi.mjs} +300 -300
  71. package/{date_time-6kpv7eDF.mjs.map → date_time-BmYl2TFi.mjs.map} +1 -1
  72. package/{display-kAyhIPBH.mjs → display-B089h_sz.mjs} +30 -28
  73. package/display-B089h_sz.mjs.map +1 -0
  74. package/{display-CO0pTIEs.mjs → display-dv4cOwRN.mjs} +42 -42
  75. package/{display-CO0pTIEs.mjs.map → display-dv4cOwRN.mjs.map} +1 -1
  76. package/{display-DvzWa1QO.mjs → display-fXo4JeIS.mjs} +41 -41
  77. package/{display-DvzWa1QO.mjs.map → display-fXo4JeIS.mjs.map} +1 -1
  78. package/{elevation-CMzO50xm.mjs → elevation-YNOj0hSa.mjs} +82 -82
  79. package/{elevation-CMzO50xm.mjs.map → elevation-YNOj0hSa.mjs.map} +1 -1
  80. package/{enum-noYU2Cqh.mjs → enum-8itqseZa.mjs} +22 -22
  81. package/{enum-noYU2Cqh.mjs.map → enum-8itqseZa.mjs.map} +1 -1
  82. package/factories.mjs +1 -1
  83. package/{field_composer-DpJx0Oz1.mjs → field_composer-ugYyDQNY.mjs} +7 -7
  84. package/{field_composer-DpJx0Oz1.mjs.map → field_composer-ugYyDQNY.mjs.map} +1 -1
  85. package/{form-CDLcDPyU.mjs → form-BtDnRXYm.mjs} +45 -45
  86. package/{form-CDLcDPyU.mjs.map → form-BtDnRXYm.mjs.map} +1 -1
  87. package/{guards-B99p3BPj.mjs → guards-Cby4QwzY.mjs} +2 -2
  88. package/{guards-B99p3BPj.mjs.map → guards-Cby4QwzY.mjs.map} +1 -1
  89. package/guards.mjs +4 -4
  90. package/helpers.mjs +6 -6
  91. package/{index-C9UuBVyI.mjs → index-3XRUa28C.mjs} +12 -12
  92. package/{index-C9UuBVyI.mjs.map → index-3XRUa28C.mjs.map} +1 -1
  93. package/{index-CzI9mHIx.mjs → index-BCQmj6cf.mjs} +13 -13
  94. package/{index-CzI9mHIx.mjs.map → index-BCQmj6cf.mjs.map} +1 -1
  95. package/{index-bXmNb9jX.mjs → index-BgevbZTt.mjs} +10 -10
  96. package/{index-bXmNb9jX.mjs.map → index-BgevbZTt.mjs.map} +1 -1
  97. package/{index-BaWthszI.mjs → index-C-PCfO1S.mjs} +2 -2
  98. package/{index-BaWthszI.mjs.map → index-C-PCfO1S.mjs.map} +1 -1
  99. package/{index-Bi050X9r.mjs → index-CSyOYGEi.mjs} +8 -8
  100. package/{index-Bi050X9r.mjs.map → index-CSyOYGEi.mjs.map} +1 -1
  101. package/{index-CIvylvfa.mjs → index-D9i1PRci.mjs} +5701 -5698
  102. package/{index-CIvylvfa.mjs.map → index-D9i1PRci.mjs.map} +1 -1
  103. package/{index-B2rKM3mR.mjs → index-DWv9iKZs.mjs} +21 -21
  104. package/{index-B2rKM3mR.mjs.map → index-DWv9iKZs.mjs.map} +1 -1
  105. package/{index-slHxe6b-.mjs → index-VpcXNOpn.mjs} +2 -2
  106. package/{index-slHxe6b-.mjs.map → index-VpcXNOpn.mjs.map} +1 -1
  107. package/{index-BUpccfIz.mjs → index-fiZltUBs.mjs} +3 -3
  108. package/{index-BUpccfIz.mjs.map → index-fiZltUBs.mjs.map} +1 -1
  109. package/index.mjs +31 -31
  110. package/{integer-BIJ4_I8y.mjs → integer-W2_SlKV1.mjs} +5 -5
  111. package/{integer-BIJ4_I8y.mjs.map → integer-W2_SlKV1.mjs.map} +1 -1
  112. package/{mdi-CqMJqgQi.mjs → mdi-DC1jeTJJ.mjs} +55 -55
  113. package/{mdi-CqMJqgQi.mjs.map → mdi-DC1jeTJJ.mjs.map} +1 -1
  114. package/{number-z_LAINPM.mjs → number-DgwZBxOw.mjs} +101 -101
  115. package/{number-z_LAINPM.mjs.map → number-DgwZBxOw.mjs.map} +1 -1
  116. package/package.json +31 -31
  117. package/{position-Ai5XksAO.mjs → position-B9VPkbhU.mjs} +2 -2
  118. package/{position-Ai5XksAO.mjs.map → position-B9VPkbhU.mjs.map} +1 -1
  119. package/private/control-button-bar/props.d.ts +10 -10
  120. package/private/fields/bigint.d.ts +128 -128
  121. package/private/fields/boolean.d.ts +68 -68
  122. package/private/fields/common.d.ts +16 -16
  123. package/private/fields/custom.d.ts +2 -2
  124. package/private/fields/date.d.ts +24 -24
  125. package/private/fields/date_time.d.ts +24 -24
  126. package/private/fields/enum.d.ts +68 -68
  127. package/private/fields/integer.d.ts +107 -107
  128. package/private/fields/multiple.d.ts +17 -17
  129. package/private/fields/number.d.ts +46 -46
  130. package/private/fields/read_mode_renderer.d.ts +17 -17
  131. package/private/fields/string.d.ts +24 -24
  132. package/private/fields/unsigned_integer.d.ts +107 -107
  133. package/private/filtration/filter_group_condition_element.d.ts +36 -36
  134. package/private/resourceful-index/index.d.ts +17 -17
  135. package/private/resourceful-index/partials/_controls.d.ts +1 -1
  136. package/private/resourceful-index/partials/_per_page_selector.d.ts +1 -1
  137. package/private/resourceful-index/props.d.ts +34 -34
  138. package/private/resourceful-record/form.d.ts +12 -12
  139. package/private/resourceful-record/index.d.ts +13 -13
  140. package/private/resourceful-record/props.d.ts +20 -20
  141. package/private/sortable/index.d.ts +1 -1
  142. package/{props-p4f5Pa5h.mjs → props-COvhL78L.mjs} +4 -4
  143. package/{props-p4f5Pa5h.mjs.map → props-COvhL78L.mjs.map} +1 -1
  144. package/{props-BYX22zcE.mjs → props-GYFmAF5-.mjs} +6 -6
  145. package/{props-BYX22zcE.mjs.map → props-GYFmAF5-.mjs.map} +1 -1
  146. package/{renderers-BKUvrrVm.mjs → renderers-BP4li2WT.mjs} +13 -13
  147. package/{renderers-BKUvrrVm.mjs.map → renderers-BP4li2WT.mjs.map} +1 -1
  148. package/{string-Dmr8SRMf.mjs → string-RfpfCwEn.mjs} +137 -137
  149. package/{string-Dmr8SRMf.mjs.map → string-RfpfCwEn.mjs.map} +1 -1
  150. package/{unsigned_integer-BliPiCXO.mjs → unsigned_integer-Cg6tbRJj.mjs} +4 -4
  151. package/{unsigned_integer-BliPiCXO.mjs.map → unsigned_integer-Cg6tbRJj.mjs.map} +1 -1
  152. package/useRender-CfNJA_8a.mjs +9 -0
  153. package/{useRender-BD1xw5zG.mjs.map → useRender-CfNJA_8a.mjs.map} +1 -1
  154. package/{utils-DqXWb-4f.mjs → utils-D3ZGaTyv.mjs} +48 -48
  155. package/{utils-DqXWb-4f.mjs.map → utils-D3ZGaTyv.mjs.map} +1 -1
  156. package/{validation-DS3tTSk5.mjs → validation-BF_JkNWB.mjs} +4 -4
  157. package/{validation-DS3tTSk5.mjs.map → validation-BF_JkNWB.mjs.map} +1 -1
  158. package/VBtn.css +0 -1
  159. package/VDatePicker.css +0 -1
  160. package/VEmptyState.css +0 -1
  161. package/VListItem.css +0 -1
  162. package/VMenu.css +0 -1
  163. package/VPicker.css +0 -1
  164. package/VRadioGroup.css +0 -1
  165. package/VSheet.css +0 -1
  166. package/actions.css +0 -1
  167. package/alert-IW1AIWZw.mjs.map +0 -1
  168. package/boolean.css +0 -1
  169. package/clipboard.css +0 -1
  170. package/common-BeDAn4wu.mjs.map +0 -1
  171. package/common.css +0 -1
  172. package/date_time.css +0 -1
  173. package/display-kAyhIPBH.mjs.map +0 -1
  174. package/display.css +0 -1
  175. package/display2.css +0 -1
  176. package/elevation.css +0 -1
  177. package/index.css +0 -1
  178. package/mdi.css +0 -1
  179. package/number.css +0 -1
  180. package/string.css +0 -1
  181. 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-BaWthszI.mjs";
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-DpJx0Oz1.mjs";
6
- import { d as aa, x as oa, y as ta, o as la, t as H, a as na } from "./utils-DqXWb-4f.mjs";
7
- import { I as ra } from "./elevation-CMzO50xm.mjs";
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, m as ua, a as ca, V as ma, b as j, d as pa, e as fa, f as va } from "./common-BeDAn4wu.mjs";
10
- import { m as ya, V as ga } from "./VDatePicker-D0OTAyvJ.mjs";
11
- import { c as ha, d as ka, e as Ia, f as Ca, g as C, V as Va } from "./mdi-CqMJqgQi.mjs";
12
- import { V as Z, a as K } from "./display-DvzWa1QO.mjs";
13
- import { V as _a } from "./display-CO0pTIEs.mjs";
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: S,
119
+ focused: w,
120
120
  errorMessages: me,
121
121
  maxErrors: pe,
122
122
  name: fe,
123
- readonly: w,
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: Se,
145
- multiple: we,
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: Sa,
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: Se,
170
- multiple: we,
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: S,
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: S.value,
244
+ focused: w.value,
245
245
  errorMessages: me.value,
246
246
  maxErrors: pe.value,
247
247
  name: fe.value,
248
- readonly: w.value,
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 : w.value,
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-BxEeCNWD.mjs.map
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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"}