{"version":3,"file":"sdcorejs-angular-forms-time-range.mjs","sources":["../../../projects/sdcorejs-angular/forms/time-range/src/time-range-value.ts","../../../projects/sdcorejs-angular/forms/time-range/src/time-range.component.ts","../../../projects/sdcorejs-angular/forms/time-range/src/time-range.component.html","../../../projects/sdcorejs-angular/forms/time-range/sdcorejs-angular-forms-time-range.ts"],"sourcesContent":["import { SdTimeConstraints, SdTimeValidationError, sdNormalizeTime, sdTimeToMinutes, sdValidateTime } from '@sdcorejs/angular/forms/time';\n\nexport interface SdTimeRangeValue {\n  readonly from?: string | null;\n  readonly to?: string | null;\n}\n\nexport interface SdTimeRangeConstraints extends SdTimeConstraints {\n  readonly required?: boolean;\n  readonly allowOpenEnded?: boolean;\n}\n\nexport type SdTimeRangeValidationError =\n  | 'required'\n  | 'incomplete'\n  | 'fromTime'\n  | 'fromMin'\n  | 'fromMax'\n  | 'fromStep'\n  | 'toTime'\n  | 'toMin'\n  | 'toMax'\n  | 'toStep'\n  | 'range';\n\nfunction hasEndpoint(value: string | null | undefined): value is string {\n  return typeof value === 'string' && value.trim() !== '';\n}\n\nfunction endpointError(side: 'from' | 'to', error: SdTimeValidationError): SdTimeRangeValidationError {\n  const suffix = `${error.charAt(0).toUpperCase()}${error.slice(1)}` as 'Time' | 'Min' | 'Max' | 'Step';\n  return `${side}${suffix}` as SdTimeRangeValidationError;\n}\n\n/** Normalizes both endpoints while retaining explicit open-ended null values. */\nexport function sdNormalizeTimeRange(value: SdTimeRangeValue | null | undefined): SdTimeRangeValue | null {\n  if (value == null) return null;\n  const from = hasEndpoint(value.from) ? sdNormalizeTime(value.from) : null;\n  const to = hasEndpoint(value.to) ? sdNormalizeTime(value.to) : null;\n  if ((hasEndpoint(value.from) && !from) || (hasEndpoint(value.to) && !to)) return null;\n  return { from, to };\n}\n\n/** Validates endpoint syntax, openness, shared boundaries, step, and ordering. */\nexport function sdValidateTimeRange(\n  value: SdTimeRangeValue | null | undefined,\n  constraints: SdTimeRangeConstraints = {}\n): SdTimeRangeValidationError | null {\n  const fromPresent = hasEndpoint(value?.from);\n  const toPresent = hasEndpoint(value?.to);\n\n  if (constraints.required && (!fromPresent || !toPresent)) return 'required';\n  if (!fromPresent && !toPresent) return null;\n  if (!constraints.allowOpenEnded && fromPresent !== toPresent) return 'incomplete';\n\n  if (fromPresent) {\n    const error = sdValidateTime(value?.from, constraints);\n    if (error) return endpointError('from', error);\n  }\n  if (toPresent) {\n    const error = sdValidateTime(value?.to, constraints);\n    if (error) return endpointError('to', error);\n  }\n\n  const fromMinutes = sdTimeToMinutes(value?.from);\n  const toMinutes = sdTimeToMinutes(value?.to);\n  return fromMinutes !== null && toMinutes !== null && fromMinutes > toMinutes ? 'range' : null;\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  TemplateRef,\n  booleanAttribute,\n  computed,\n  contentChild,\n  effect,\n  inject,\n  input,\n  model,\n  output,\n  signal,\n  untracked,\n  viewChild,\n} from '@angular/core';\nimport { AbstractControl, FormGroup, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { SdView } from '@sdcorejs/angular/components/view';\nimport { SdViewDefDirective } from '@sdcorejs/angular/forms/directives';\nimport { SdLabel } from '@sdcorejs/angular/forms/label';\nimport {\n  SdFormControl,\n  SdInlineErrorValidator,\n  SdViewed,\n  SdViewedInput,\n  sdFormControlState,\n  sdViewedTransform,\n  ɵSdFormControlParent,\n  ɵsdCoerceFormGroup,\n  ɵsdFormControlConnector,\n} from '@sdcorejs/angular/forms/models';\nimport { SdTime, SdTimeModelValue } from '@sdcorejs/angular/forms/time';\nimport { I18nService, TranslatePipe } from '@sdcorejs/angular/i18n';\nimport { SdIcon } from '@sdcorejs/angular/modules/icon';\nimport { sdIsEmpty, sdSerializeDataValue } from '@sdcorejs/angular/utilities/data-state';\nimport { Utilities } from '@sdcorejs/utils/fns';\nimport { Size } from '@sdcorejs/utils/models';\n\nimport { SdTimeRangeValue, sdNormalizeTimeRange, sdValidateTimeRange } from './time-range-value';\n\nexport type SdTimeRangeModelValue = SdTimeRangeValue | null | undefined;\n\nconst EMPTY_RANGE: SdTimeRangeValue = { from: null, to: null };\n\nfunction rangeEquals(left: SdTimeRangeModelValue, right: SdTimeRangeModelValue): boolean {\n  return (left?.from ?? null) === (right?.from ?? null) && (left?.to ?? null) === (right?.to ?? null);\n}\n\n/**\n * Composes two `SdTime` editors into one timezone-free range model.\n * Endpoint and aggregate validation are surfaced through the group state.\n */\n@Component({\n  selector: 'sd-time-range',\n  templateUrl: './time-range.component.html',\n  styleUrl: './time-range.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  host: {\n    '[class.sd-has-label]': '!!label()',\n    '[class.sd-viewed]': 'connectorState().isViewed || connectorState().isInline',\n    '[class.sd-bare]': 'connectorState().isInline',\n  },\n  imports: [SdIcon, SdLabel, SdTime, SdView, TranslatePipe],\n})\nexport class SdTimeRange {\n  readonly #i18n = inject(I18nService);\n  readonly fromName = `from-${Utilities.generateUuid()}`;\n  readonly toName = `to-${Utilities.generateUuid()}`;\n\n  readonly sdLabelTemplate = contentChild<TemplateRef<unknown>>('sdLabel');\n  readonly sdValueTemplate = contentChild<TemplateRef<unknown>>('sdValue');\n  readonly sdViewDef = contentChild(SdViewDefDirective);\n  readonly fromTime = viewChild<SdTime>('fromTime');\n  readonly toTime = viewChild<SdTime>('toTime');\n\n  readonly autoIdInput = input<string | null | undefined>(undefined, { alias: 'autoId' });\n  readonly autoId = computed(() => (this.autoIdInput() ? `forms-time-range-${this.autoIdInput()}` : undefined));\n  readonly fromAutoId = computed(() => (this.autoId() ? `${this.autoId()}-from` : undefined));\n  readonly toAutoId = computed(() => (this.autoId() ? `${this.autoId()}-to` : undefined));\n  readonly fromAriaLabel = computed(() => {\n    const endpoint = this.#i18n.t('core.form.time-range.from');\n    return this.label() ? `${this.label()}: ${endpoint}` : endpoint;\n  });\n  readonly toAriaLabel = computed(() => {\n    const endpoint = this.#i18n.t('core.form.time-range.to');\n    return this.label() ? `${this.label()}: ${endpoint}` : endpoint;\n  });\n  readonly groupAriaLabel = computed(() => this.label() || `${this.fromAriaLabel()} / ${this.toAriaLabel()}`);\n  readonly name = input<string>(Utilities.generateUuid());\n  readonly form = input<FormGroup | undefined, ɵSdFormControlParent>(undefined, { transform: ɵsdCoerceFormGroup });\n  readonly label = input<string | undefined>();\n  readonly helperText = input<string | undefined>();\n  readonly fromPlaceholder = input<string | undefined>();\n  readonly toPlaceholder = input<string | undefined>();\n  readonly size = input<Size>('md');\n  readonly min = input<string | null | undefined>();\n  readonly max = input<string | null | undefined>();\n  readonly stepInput = input<number | undefined, number | string | null | undefined>(1, {\n    alias: 'step',\n    transform: value => (value == null ? 1 : Number(value)),\n  });\n  readonly step = computed(() => {\n    const value = this.stepInput();\n    return typeof value === 'number' && Number.isFinite(value) && value > 0 ? Math.max(1, Math.trunc(value)) : 1;\n  });\n  readonly required = input(false, { transform: booleanAttribute });\n  readonly allowOpenEnded = input(false, { transform: booleanAttribute });\n  readonly clearable = input(true, { transform: booleanAttribute });\n  readonly disabled = input(false, { transform: booleanAttribute });\n  readonly readonly = input(false, { transform: booleanAttribute });\n  readonly viewed = input<SdViewed, SdViewedInput>(false, { transform: sdViewedTransform });\n  readonly hideInlineError = input(false, { transform: booleanAttribute });\n  readonly inlineError = input<string | undefined>();\n  readonly hyperlink = input<string | null | undefined>();\n  readonly valueModel = model<SdTimeRangeModelValue>(undefined, { alias: 'model' });\n\n  readonly sdChange = output<SdTimeRangeModelValue>();\n  readonly sdFocus = output<void>();\n  readonly sdBlur = output<SdTimeRangeModelValue>();\n\n  readonly fromValue = signal<SdTimeModelValue>(null);\n  readonly toValue = signal<SdTimeModelValue>(null);\n  readonly formControl = new SdFormControl({ value: EMPTY_RANGE, disabled: false });\n  readonly #state = sdFormControlState(\n    computed<AbstractControl<SdTimeRangeValue>>(() => this.formControl as AbstractControl<SdTimeRangeValue>)\n  );\n  readonly #validators = computed<readonly ValidatorFn[]>(() => {\n    const constraints = {\n      min: this.min(),\n      max: this.max(),\n      step: this.step(),\n      required: this.required(),\n      allowOpenEnded: this.allowOpenEnded(),\n    };\n    const rangeValidator: ValidatorFn = control => {\n      const error = sdValidateTimeRange(control.value as SdTimeRangeModelValue, constraints);\n      return error ? ({ [error]: true } satisfies ValidationErrors) : null;\n    };\n    return this.inlineError() ? [rangeValidator, SdInlineErrorValidator] : [rangeValidator];\n  });\n  readonly #connector = ɵsdFormControlConnector<SdTimeRangeModelValue, SdTimeRangeValue>({\n    form: this.form,\n    name: this.name,\n    control: computed<AbstractControl<SdTimeRangeValue>>(() => this.formControl as AbstractControl<SdTimeRangeValue>),\n    model: this.valueModel,\n    writeModel: value => {\n      this.valueModel.set(value);\n      this.sdChange.emit(value);\n    },\n    modelToControl: value =>\n      sdNormalizeTimeRange(value) ?? {\n        from: value?.from ?? null,\n        to: value?.to ?? null,\n      },\n    controlToModel: value => sdNormalizeTimeRange(value) ?? this.valueModel() ?? value,\n    modelEquals: rangeEquals,\n    controlEquals: rangeEquals,\n    validators: this.#validators,\n    disabled: this.disabled,\n    readonly: this.readonly,\n    viewed: this.viewed,\n    validationError: computed(() => this.errorMessage()),\n  });\n\n  readonly connectorState = this.#connector.state;\n  readonly isViewed = computed(() => this.connectorState().isViewed);\n  readonly isInline = computed(() => this.connectorState().isInline);\n  readonly isReadonly = computed(() => this.connectorState().readonly);\n  readonly viewTemplate = computed<TemplateRef<unknown> | undefined>(() => this.sdViewDef()?.templateRef ?? this.sdValueTemplate());\n  readonly displayValue = computed(() => {\n    const value = sdNormalizeTimeRange(this.valueModel());\n    const from = value?.from ?? '';\n    const to = value?.to ?? '';\n    return from || to ? `${from} → ${to}` : '';\n  });\n  readonly showClear = computed(() => {\n    const fromControlValue = this.fromTime()?.connectorState().value;\n    const toControlValue = this.toTime()?.connectorState().value;\n    const hasValue =\n      !sdIsEmpty(fromControlValue) || !sdIsEmpty(toControlValue) || !sdIsEmpty(this.fromValue()) || !sdIsEmpty(this.toValue());\n    return this.clearable() && hasValue && !this.required() && !this.disabled() && !this.isReadonly();\n  });\n\n  readonly endpointInvalid = computed(() => !!(this.fromTime()?.connectorState().invalid || this.toTime()?.connectorState().invalid));\n\n  readonly dataDisabled = computed(() => (this.#state().disabled ? 'true' : 'false'));\n  readonly dataInvalid = computed(() => (this.#state().invalid || this.endpointInvalid() ? 'true' : 'false'));\n  readonly dataEmpty = computed(() => {\n    const fromControlValue = this.fromTime()?.connectorState().value;\n    const toControlValue = this.toTime()?.connectorState().value;\n    return sdIsEmpty(fromControlValue) && sdIsEmpty(toControlValue) && sdIsEmpty(this.fromValue()) && sdIsEmpty(this.toValue())\n      ? 'true'\n      : 'false';\n  });\n  readonly dataValue = computed(() => sdSerializeDataValue(this.#state().value));\n  readonly dataRequired = computed(() => (this.required() ? 'true' : 'false'));\n  readonly dataErrorMessage = computed(() => this.errorMessage() ?? null);\n\n  readonly errorMessage = computed<string | undefined>(() => {\n    void this.#state();\n    void this.endpointInvalid();\n    const errors = this.formControl.errors;\n    const endpointErrors = this.fromTime()?.formControl.errors ?? this.toTime()?.formControl.errors;\n    if (errors?.['required'] || endpointErrors?.['required']) return this.#i18n.t('core.form.time-range.required');\n    if (errors?.['incomplete']) return this.#i18n.t('core.form.time-range.incomplete');\n    if (errors?.['range']) return this.#i18n.t('core.form.time-range.range');\n    if (errors?.['fromTime'] || errors?.['toTime'] || endpointErrors?.['time']) {\n      return this.#i18n.t('core.form.time-range.invalid');\n    }\n    if (errors?.['fromMin'] || errors?.['toMin'] || endpointErrors?.['min']) {\n      return this.#i18n.t('core.form.time-range.min', { min: this.min() ?? '' });\n    }\n    if (errors?.['fromMax'] || errors?.['toMax'] || endpointErrors?.['max']) {\n      return this.#i18n.t('core.form.time-range.max', { max: this.max() ?? '' });\n    }\n    if (errors?.['fromStep'] || errors?.['toStep'] || endpointErrors?.['step']) {\n      return this.#i18n.t('core.form.time-range.step', { step: this.step() });\n    }\n    if (errors?.['inlineError']) return this.inlineError();\n    return undefined;\n  });\n\n  constructor() {\n    effect(() => {\n      const value = sdNormalizeTimeRange(this.valueModel()) ?? EMPTY_RANGE;\n      untracked(() => {\n        if (this.fromValue() !== value.from) this.fromValue.set(value.from);\n        if (this.toValue() !== value.to) this.toValue.set(value.to);\n      });\n    });\n  }\n\n  onFromChange(value: SdTimeModelValue): void {\n    this.fromValue.set(value);\n    this.#writeEndpoints(value, this.toValue());\n  }\n\n  onToChange(value: SdTimeModelValue): void {\n    this.toValue.set(value);\n    this.#writeEndpoints(this.fromValue(), value);\n  }\n\n  onFocus(): void {\n    this.sdFocus.emit();\n  }\n\n  onBlur(): void {\n    this.#connector.markAsTouched();\n    this.sdBlur.emit(this.valueModel());\n  }\n\n  clear(): void {\n    const model = this.valueModel();\n    const fromTime = this.fromTime();\n    const toTime = this.toTime();\n    if (\n      sdIsEmpty(fromTime?.formControl.value) &&\n      sdIsEmpty(toTime?.formControl.value) &&\n      !this.fromValue() &&\n      !this.toValue() &&\n      !model?.from &&\n      !model?.to\n    ) {\n      return;\n    }\n    fromTime?.clear();\n    toTime?.clear();\n    this.fromValue.set(null);\n    this.toValue.set(null);\n    this.formControl.setValue({ ...EMPTY_RANGE });\n    this.formControl.markAsDirty();\n    this.formControl.markAsTouched();\n  }\n\n  #writeEndpoints(from: SdTimeModelValue, to: SdTimeModelValue): void {\n    this.formControl.setValue({ from: from ?? null, to: to ?? null });\n    this.formControl.markAsDirty();\n  }\n}\n","@let _label = label();\n@let _errorMessage = errorMessage();\n@let _required = required();\n\n@if (isViewed()) {\n  <sd-view\n    [label]=\"_label\"\n    [labelTemplate]=\"sdLabelTemplate()\"\n    [value]=\"valueModel()\"\n    [display]=\"displayValue()\"\n    [hyperlink]=\"hyperlink()\"\n    [valueTemplate]=\"viewTemplate()\">\n  </sd-view>\n} @else {\n  <ng-content select=\"[sdLabel]\">\n    @if (_label) {\n      <sd-label [label]=\"_label\" [helperText]=\"helperText()\" [required]=\"_required\"></sd-label>\n    }\n  </ng-content>\n\n  <div\n    class=\"sd-time-range-fields\"\n    role=\"group\"\n    [attr.aria-label]=\"groupAriaLabel()\"\n    [attr.aria-invalid]=\"dataInvalid()\"\n    [attr.data-autoId]=\"autoId()\"\n    [attr.data-disabled]=\"dataDisabled()\"\n    [attr.data-invalid]=\"dataInvalid()\"\n    [attr.data-empty]=\"dataEmpty()\"\n    [attr.data-value]=\"dataValue()\"\n    [attr.data-required]=\"dataRequired()\"\n    [attr.data-error-message]=\"dataErrorMessage()\">\n    <sd-time\n      #fromTime\n      class=\"sd-time-range-endpoint\"\n      [form]=\"form()\"\n      [name]=\"fromName\"\n      [autoId]=\"fromAutoId()\"\n      [placeholder]=\"fromPlaceholder() || 'HH:mm'\"\n      [ariaLabel]=\"fromAriaLabel()\"\n      [size]=\"size()\"\n      [min]=\"min()\"\n      [max]=\"max()\"\n      [step]=\"step()\"\n      [required]=\"_required\"\n      [disabled]=\"disabled()\"\n      [readonly]=\"isReadonly()\"\n      [viewed]=\"isInline() ? 'inline' : false\"\n      [hideInlineError]=\"true\"\n      [model]=\"fromValue()\"\n      (modelChange)=\"onFromChange($event)\"\n      (sdFocus)=\"onFocus()\"\n      (sdBlur)=\"onBlur()\">\n    </sd-time>\n\n    <span class=\"sd-time-range-separator\" aria-hidden=\"true\">→</span>\n\n    <sd-time\n      #toTime\n      class=\"sd-time-range-endpoint\"\n      [form]=\"form()\"\n      [name]=\"toName\"\n      [autoId]=\"toAutoId()\"\n      [placeholder]=\"toPlaceholder() || 'HH:mm'\"\n      [ariaLabel]=\"toAriaLabel()\"\n      [size]=\"size()\"\n      [min]=\"min()\"\n      [max]=\"max()\"\n      [step]=\"step()\"\n      [required]=\"_required\"\n      [disabled]=\"disabled()\"\n      [readonly]=\"isReadonly()\"\n      [viewed]=\"isInline() ? 'inline' : false\"\n      [hideInlineError]=\"true\"\n      [model]=\"toValue()\"\n      (modelChange)=\"onToChange($event)\"\n      (sdFocus)=\"onFocus()\"\n      (sdBlur)=\"onBlur()\">\n    </sd-time>\n\n    @if (showClear()) {\n      <button type=\"button\" class=\"sd-time-range-clear\" (click)=\"clear()\" [attr.aria-label]=\"'core.form.time-range.clear' | translate\">\n        <sd-icon name=\"close\"></sd-icon>\n      </button>\n    }\n  </div>\n\n  @if (!hideInlineError() && _errorMessage) {\n    <div class=\"sd-time-range-error\" role=\"alert\">{{ _errorMessage }}</div>\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["ɵsdCoerceFormGroup","ɵsdFormControlConnector"],"mappings":"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"}