@bagelink/vue 1.15.170 → 1.15.172
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/form/inputs/DateInput.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/DatePicker.vue.d.ts.map +1 -1
- package/dist/index.cjs +149 -176
- package/dist/index.mjs +35307 -29218
- package/dist/style.css +2 -1
- package/dist/utils/date.d.ts +6 -0
- package/dist/utils/date.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/form/inputs/DateInput.vue +23 -6
- package/src/components/form/inputs/DatePicker.vue +5 -6
- package/src/utils/date.ts +16 -1
package/dist/utils/date.d.ts
CHANGED
|
@@ -11,6 +11,12 @@ export declare const utc: typeof _parseUTC & {
|
|
|
11
11
|
export declare const local: {
|
|
12
12
|
/** Format a Date as ISO string with local TZ offset, e.g. "2026-05-05T11:00:00.000+03:00" */
|
|
13
13
|
iso(date?: Date): string;
|
|
14
|
+
/**
|
|
15
|
+
* Format a Date as a local calendar day "YYYY-MM-DD" (no time, no TZ).
|
|
16
|
+
* Use for JSON Schema `format: "date"` / `$.date()` fields — never `toISOString()`,
|
|
17
|
+
* which shifts the day in non-UTC timezones (e.g. Israel midnight → previous UTC day).
|
|
18
|
+
*/
|
|
19
|
+
date(date?: Date): string;
|
|
14
20
|
/** Current device TZ offset string, e.g. "+03:00" or "-05:00" */
|
|
15
21
|
offset(date?: Date): string;
|
|
16
22
|
};
|
package/dist/utils/date.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../src/utils/date.ts"],"names":[],"mappings":"AAgBA,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,CAAA;AA6B9C,iBAAS,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAQzC;AAED,eAAO,MAAM,GAAG;IACf,oDAAoD;eACzC,SAAS,GAAG,MAAM;IAG7B,yDAAyD;gBAC7C,SAAS,GAAG,MAAM;IAG9B,gCAAgC;cACtB,SAAS,GAAG,MAAM;CAG3B,CAAA;
|
|
1
|
+
{"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../src/utils/date.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
2
|
import type { ModeType } from '../../../utils/calendar/typings'
|
|
3
|
-
import { TextInput, Dropdown, formatDate, useI18n, resolveI18n } from '@bagelink/vue'
|
|
3
|
+
import { TextInput, Dropdown, formatDate, useI18n, resolveI18n, local } from '@bagelink/vue'
|
|
4
4
|
import { onClickOutside } from '@vueuse/core'
|
|
5
5
|
import { ref, computed, onMounted, watch } from 'vue'
|
|
6
6
|
import { WEEK_START_DAY } from '../../../utils/calendar/time'
|
|
@@ -104,9 +104,19 @@ function parseUserInput(input: string): Date | null {
|
|
|
104
104
|
|
|
105
105
|
function normalizeDate(date: Date): string {
|
|
106
106
|
if (props.enableTime) return date.toISOString()
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
107
|
+
// Local calendar day — not toISOString().slice(0,10), which shifts TZ≠UTC.
|
|
108
|
+
return local.date(date)
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/** Coerce legacy ISO datetimes into YYYY-MM-DD so format:"date" schemas accept them on save. */
|
|
112
|
+
function coerceDateOnlyValue(val: string | Date | DateRangeValue | undefined): string | Date | DateRangeValue | undefined {
|
|
113
|
+
if (props.enableTime || props.range || val == null) return val
|
|
114
|
+
if (typeof val === 'string' && val.includes('T')) {
|
|
115
|
+
const d = new Date(val)
|
|
116
|
+
if (!Number.isNaN(d.getTime())) return local.date(d)
|
|
117
|
+
}
|
|
118
|
+
if (val instanceof Date) return local.date(val)
|
|
119
|
+
return val
|
|
110
120
|
}
|
|
111
121
|
|
|
112
122
|
function hasModelValue(): boolean {
|
|
@@ -257,8 +267,15 @@ function handleIconClick() {
|
|
|
257
267
|
isOpen.value = !isOpen.value
|
|
258
268
|
}
|
|
259
269
|
|
|
260
|
-
// Sync input display when date changes externally
|
|
261
|
-
watch(() => selectedDate.value,
|
|
270
|
+
// Sync input display when date changes externally; coerce datetime → date-only.
|
|
271
|
+
watch(() => selectedDate.value, (val) => {
|
|
272
|
+
const coerced = coerceDateOnlyValue(val)
|
|
273
|
+
if (coerced !== val) {
|
|
274
|
+
selectedDate.value = coerced
|
|
275
|
+
return
|
|
276
|
+
}
|
|
277
|
+
syncInputValue()
|
|
278
|
+
}, { immediate: true })
|
|
262
279
|
|
|
263
280
|
const hasValue = computed(() => inputValue.value.length > 0)
|
|
264
281
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
2
|
import type { MaybeRefOrGetter } from 'vue'
|
|
3
3
|
import type { ModeType } from '../../../utils/calendar/typings'
|
|
4
|
-
import { Btn, NumberInput } from '@bagelink/vue'
|
|
4
|
+
import { Btn, NumberInput, local } from '@bagelink/vue'
|
|
5
5
|
import { computed, ref, toValue } from 'vue'
|
|
6
6
|
import Time, { WEEK_START_DAY } from '../../../utils/calendar/time'
|
|
7
7
|
|
|
@@ -383,10 +383,9 @@ function emitDateValue(date: Date) {
|
|
|
383
383
|
if (props.enableTime) {
|
|
384
384
|
emit('update:modelValue', date.toISOString())
|
|
385
385
|
} else {
|
|
386
|
-
//
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
emit('update:modelValue', midnightDate.toISOString())
|
|
386
|
+
// Date-only → YYYY-MM-DD (JSON Schema format: "date"). Never toISOString():
|
|
387
|
+
// local midnight becomes the previous UTC day (e.g. Asia/Jerusalem).
|
|
388
|
+
emit('update:modelValue', local.date(date))
|
|
390
389
|
}
|
|
391
390
|
}
|
|
392
391
|
|
|
@@ -409,7 +408,7 @@ const { selectMonth, selectYear, previousMonth, nextMonth, previousYear, nextYea
|
|
|
409
408
|
const { hours, minutes, handleHourInput, handleMinuteInput } = useTimeHandling()
|
|
410
409
|
|
|
411
410
|
function toDayString(date: Date): string {
|
|
412
|
-
return
|
|
411
|
+
return local.date(date)
|
|
413
412
|
}
|
|
414
413
|
|
|
415
414
|
// Range selection handler: first click sets start (clears end), second click
|
package/src/utils/date.ts
CHANGED
|
@@ -69,7 +69,11 @@ export const utc = Object.assign(_parseUTC, {
|
|
|
69
69
|
})
|
|
70
70
|
|
|
71
71
|
// ── local — format dates with device TZ for server submission ───────────────
|
|
72
|
-
|
|
72
|
+
//
|
|
73
|
+
// local.iso(date) → "2026-05-05T11:00:00.000+03:00"
|
|
74
|
+
// local.date(date) → "2026-05-05" (calendar day for format:"date" fields)
|
|
75
|
+
// local.offset() → "+03:00"
|
|
76
|
+
//
|
|
73
77
|
function _tzOffset(date: Date): string {
|
|
74
78
|
const off = -date.getTimezoneOffset()
|
|
75
79
|
const sign = off >= 0 ? '+' : '-'
|
|
@@ -94,6 +98,17 @@ export const local = {
|
|
|
94
98
|
iso(date: Date = new Date()): string {
|
|
95
99
|
return _localISO(date)
|
|
96
100
|
},
|
|
101
|
+
/**
|
|
102
|
+
* Format a Date as a local calendar day "YYYY-MM-DD" (no time, no TZ).
|
|
103
|
+
* Use for JSON Schema `format: "date"` / `$.date()` fields — never `toISOString()`,
|
|
104
|
+
* which shifts the day in non-UTC timezones (e.g. Israel midnight → previous UTC day).
|
|
105
|
+
*/
|
|
106
|
+
date(date: Date = new Date()): string {
|
|
107
|
+
const y = date.getFullYear()
|
|
108
|
+
const mo = String(date.getMonth() + 1).padStart(2, '0')
|
|
109
|
+
const d = String(date.getDate()).padStart(2, '0')
|
|
110
|
+
return `${y}-${mo}-${d}`
|
|
111
|
+
},
|
|
97
112
|
/** Current device TZ offset string, e.g. "+03:00" or "-05:00" */
|
|
98
113
|
offset(date: Date = new Date()): string {
|
|
99
114
|
return _tzOffset(date)
|