@bagelink/vue 1.15.170 → 1.15.174

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.
@@ -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
  };
@@ -1 +1 @@
1
- {"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../src/utils/date.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../src/utils/date.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@bagelink/vue",
3
3
  "type": "module",
4
- "version": "1.15.170",
4
+ "version": "1.15.174",
5
5
  "description": "Bagel core sdk packages",
6
6
  "author": {
7
7
  "name": "Bagel Studio",
@@ -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
- const normalized = new Date(date)
108
- normalized.setHours(0, 0, 0, 0)
109
- return normalized.toISOString().split('T')[0]
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, syncInputValue, { immediate: true })
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
- // For date-only, set time to midnight
387
- const midnightDate = new Date(date)
388
- midnightDate.setHours(0, 0, 0, 0)
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 new Date(date.getFullYear(), date.getMonth(), date.getDate()).toISOString()
411
+ return local.date(date)
413
412
  }
414
413
 
415
414
  // Range selection handler: first click sets start (clears end), second click
@@ -21,6 +21,7 @@ const props = withDefaults(defineProps<{
21
21
  dismissable?: boolean
22
22
  schema: SchemaDefinition
23
23
  modelValue?: T
24
+ message?: string
24
25
  onSubmit?: (data: T) => Promise<void> | void
25
26
  onDelete?: (data: T) => Promise<void> | void
26
27
  submitText?: string
@@ -113,6 +114,10 @@ function handleClose() {
113
114
  {{ error }}
114
115
  </div>
115
116
 
117
+ <p v-if="message" class="mb-1 mt-0">
118
+ {{ message }}
119
+ </p>
120
+
116
121
  <!-- Form fields -->
117
122
  <FormFlow ref="formFlowRef" v-model="formData" :schema="schema" @submit="handleSubmit" />
118
123
 
@@ -16,6 +16,8 @@ export interface DialogBaseOptions {
16
16
  export interface DialogFormOptions<T extends Record<string, any> = Record<string, any>> extends DialogBaseOptions {
17
17
  schema: SchemaDefinition
18
18
  modelValue?: T
19
+ /** Optional body text above the form (same role as DialogConfirm `message`). */
20
+ message?: string
19
21
  /** Runs before close on submit - throw to keep dialog open with error */
20
22
  onSubmit?: (data: T) => Promise<void> | void
21
23
  /** If provided, shows delete button - throw to keep dialog open with error */
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)