From 0c37c7783ff7fef994d8a7c721308ade76598e6f Mon Sep 17 00:00:00 2001 From: dev Date: Fri, 15 May 2026 03:30:35 +0200 Subject: [PATCH] Normalize Soma picker runtimes --- .../date-picker-provider.svelte.ts | 22 ++++++++-------- .../date-range-picker-provider.svelte.ts | 22 ++++++++-------- .../time-picker-provider.svelte.ts | 26 +++++++++---------- .../time-range-picker-provider.svelte.ts | 26 +++++++++---------- 4 files changed, 48 insertions(+), 48 deletions(-) diff --git a/src/uix/soma/components/date-picker/date-picker-provider.svelte.ts b/src/uix/soma/components/date-picker/date-picker-provider.svelte.ts index 578025000..ce5e06145 100644 --- a/src/uix/soma/components/date-picker/date-picker-provider.svelte.ts +++ b/src/uix/soma/components/date-picker/date-picker-provider.svelte.ts @@ -17,9 +17,9 @@ import type { // ── Contract ───────────────────────────────────────────────────────────────── import { datePickerMorfo } from '../../../morfo/components/date-picker'; +import type { SomaRuntime, SomaRuntimePart } from '../../runtime.svelte'; const attrs = createAttrs(datePickerMorfo); -import type { SomaRuntimePart } from '../../runtime.svelte'; // ── Provider (context — shared state for DateField + Popover + Calendar) ──── @@ -84,6 +84,8 @@ interface DatePickerOpts export class DatePickerProvider { readonly opts: DatePickerOpts; readonly runtimePart: SomaRuntimePart; + readonly soma: Soma; + readonly runtime: SomaRuntime; static readonly ctx = context('DatePicker'); static get(): DatePickerProvider | undefined { return this.ctx.getOr(undefined) as DatePickerProvider | undefined; @@ -96,18 +98,16 @@ export class DatePickerProvider { return new DatePickerProvider(opts); } - readonly soma = Soma.get(); - private constructor(opts: DatePickerOpts) { this.opts = opts; - this.runtimePart = Soma.require() - .runtime(datePickerMorfo, {}) - .part('provider', { - id: opts.id, - ref: opts.ref, - owner: this, - context: DatePickerProvider.ctx - }); + this.soma = Soma.require(); + this.runtime = this.soma.runtime(datePickerMorfo, {}); + this.runtimePart = this.runtime.part('provider', { + id: opts.id, + ref: opts.ref, + owner: this, + context: DatePickerProvider.ctx + }); } /** Close the popover if `closeOnDateSelect` is `true`. Called by the Calendar. */ diff --git a/src/uix/soma/components/date-range-picker/date-range-picker-provider.svelte.ts b/src/uix/soma/components/date-range-picker/date-range-picker-provider.svelte.ts index db44f580a..efa738c99 100644 --- a/src/uix/soma/components/date-range-picker/date-range-picker-provider.svelte.ts +++ b/src/uix/soma/components/date-range-picker/date-range-picker-provider.svelte.ts @@ -16,9 +16,9 @@ import type { } from '../../external/dates'; import { dateRangePickerMorfo } from '../../../morfo/components/date-range-picker'; +import type { SomaRuntime, SomaRuntimePart } from '../../runtime.svelte'; const attrs = createAttrs(dateRangePickerMorfo); -import type { SomaRuntimePart } from '../../runtime.svelte'; interface DateRangePickerOpts @@ -79,6 +79,8 @@ interface DateRangePickerOpts export class DateRangePickerProvider { readonly opts: DateRangePickerOpts; readonly runtimePart: SomaRuntimePart; + readonly soma: Soma; + readonly runtime: SomaRuntime; static readonly ctx = context('DateRangePicker'); static get(): DateRangePickerProvider | undefined { return this.ctx.getOr(undefined) as DateRangePickerProvider | undefined; @@ -90,18 +92,16 @@ export class DateRangePickerProvider { return new DateRangePickerProvider(opts); } - readonly soma = Soma.get(); - private constructor(opts: DateRangePickerOpts) { this.opts = opts; - this.runtimePart = Soma.require() - .runtime(dateRangePickerMorfo, {}) - .part('provider', { - id: opts.id, - ref: opts.ref, - owner: this, - context: DateRangePickerProvider.ctx - }); + this.soma = Soma.require(); + this.runtime = this.soma.runtime(dateRangePickerMorfo, {}); + this.runtimePart = this.runtime.part('provider', { + id: opts.id, + ref: opts.ref, + owner: this, + context: DateRangePickerProvider.ctx + }); } /** Close the popover if `closeOnRangeSelect` is true. Called by the calendar wrapper. */ diff --git a/src/uix/soma/components/time-picker/time-picker-provider.svelte.ts b/src/uix/soma/components/time-picker/time-picker-provider.svelte.ts index d94cca6a1..58c05ac13 100644 --- a/src/uix/soma/components/time-picker/time-picker-provider.svelte.ts +++ b/src/uix/soma/components/time-picker/time-picker-provider.svelte.ts @@ -13,9 +13,9 @@ import type { } from '../../external/dates'; import { timePickerMorfo } from '../../../morfo/components/time-picker'; +import type { SomaRuntime, SomaRuntimePart } from '../../runtime.svelte'; const attrs = createAttrs(timePickerMorfo); -import type { SomaRuntimePart } from '../../runtime.svelte'; export interface TimePickerOpts @@ -56,6 +56,8 @@ export interface TimePickerOpts export class TimePickerProvider { readonly opts: TimePickerOpts; readonly runtimePart: SomaRuntimePart; + readonly soma: Soma; + readonly runtime: SomaRuntime; static readonly ctx = context('TimePicker'); static get(): TimePickerProvider | undefined { return this.ctx.getOr(undefined) as TimePickerProvider | undefined; @@ -67,27 +69,25 @@ export class TimePickerProvider { return new TimePickerProvider(opts); } - readonly soma = Soma.get(); - private constructor(opts: TimePickerOpts) { this.opts = opts; - this.runtimePart = Soma.require() - .runtime(timePickerMorfo, {}) - .part('provider', { - id: opts.id, - ref: opts.ref, - owner: this, - context: TimePickerProvider.ctx - }); + this.soma = Soma.require(); + this.runtime = this.soma.runtime(timePickerMorfo, {}); + this.runtimePart = this.runtime.part('provider', { + id: opts.id, + ref: opts.ref, + owner: this, + context: TimePickerProvider.ctx + }); } /** Resolved hour cycle — same rule as TimeField: explicit → service → locale. */ readonly resolvedHourCycle: HourCycle = $derived.by(() => { const explicit = this.opts.hourCycle.current; if (explicit === 12 || explicit === 24) return explicit; - const fromService = this.soma?.dates?.getHourCycle?.(); + const fromService = this.soma.dates?.getHourCycle?.(); if (fromService === 12 || fromService === 24) return fromService; - const locale = this.opts.locale.current || this.soma?.langs.getLocale() || 'en'; + const locale = this.opts.locale.current || this.soma.langs.getLocale() || 'en'; return new Intl.DateTimeFormat(locale, { hour: 'numeric' }).resolvedOptions().hour12 ? 12 : 24; }); diff --git a/src/uix/soma/components/time-range-picker/time-range-picker-provider.svelte.ts b/src/uix/soma/components/time-range-picker/time-range-picker-provider.svelte.ts index 4995f78ad..5bb4590c3 100644 --- a/src/uix/soma/components/time-range-picker/time-range-picker-provider.svelte.ts +++ b/src/uix/soma/components/time-range-picker/time-range-picker-provider.svelte.ts @@ -15,9 +15,9 @@ import type { import type { TimeRangeEndpoint } from './types'; import { timeRangePickerMorfo } from '../../../morfo/components/time-range-picker'; +import type { SomaRuntime, SomaRuntimePart } from '../../runtime.svelte'; const attrs = createAttrs(timeRangePickerMorfo); -import type { SomaRuntimePart } from '../../runtime.svelte'; export interface TimeRangePickerOpts @@ -62,6 +62,8 @@ export interface TimeRangePickerOpts export class TimeRangePickerProvider { readonly opts: TimeRangePickerOpts; readonly runtimePart: SomaRuntimePart; + readonly soma: Soma; + readonly runtime: SomaRuntime; static readonly ctx = context('TimeRangePicker'); static get(): TimeRangePickerProvider | undefined { return this.ctx.getOr(undefined) as TimeRangePickerProvider | undefined; @@ -73,27 +75,25 @@ export class TimeRangePickerProvider { return new TimeRangePickerProvider(opts); } - readonly soma = Soma.get(); - private constructor(opts: TimeRangePickerOpts) { this.opts = opts; - this.runtimePart = Soma.require() - .runtime(timeRangePickerMorfo, {}) - .part('provider', { - id: opts.id, - ref: opts.ref, - owner: this, - context: TimeRangePickerProvider.ctx - }); + this.soma = Soma.require(); + this.runtime = this.soma.runtime(timeRangePickerMorfo, {}); + this.runtimePart = this.runtime.part('provider', { + id: opts.id, + ref: opts.ref, + owner: this, + context: TimeRangePickerProvider.ctx + }); } /** Resolved hour cycle — same rule as TimeField/TimePicker. */ readonly resolvedHourCycle: HourCycle = $derived.by(() => { const explicit = this.opts.hourCycle.current; if (explicit === 12 || explicit === 24) return explicit; - const fromService = this.soma?.dates?.getHourCycle?.(); + const fromService = this.soma.dates?.getHourCycle?.(); if (fromService === 12 || fromService === 24) return fromService; - const locale = this.opts.locale.current || this.soma?.langs.getLocale() || 'en'; + const locale = this.opts.locale.current || this.soma.langs.getLocale() || 'en'; return new Intl.DateTimeFormat(locale, { hour: 'numeric' }).resolvedOptions().hour12 ? 12 : 24; });