{"version":3,"file":"c8y-ngx-components-global-context.mjs","sources":["../../global-context/models/global-context.model.ts","../../global-context/models/auto-refresh.model.ts","../../global-context/models/interval-picker.model.ts","../../global-context/models/global-context-defaults.ts","../../global-context/models/control-flow.model.ts","../../global-context/models/aggregation.model.ts","../../global-context/models/constants.ts","../../global-context/utils/date-time-context.util.ts","../../global-context/utils/global-context-defaults.util.ts","../../global-context/services/state/global-context.service.ts","../../global-context/services/state/global-context-form.service.ts","../../global-context/services/state/global-context-event.service.ts","../../global-context/services/domain/widget-control.service.ts","../../global-context/services/domain/date-time-context-picker.service.ts","../../global-context/services/domain/widget-config-migration.service.ts","../../global-context/services/domain/global-context-validation.service.ts","../../global-context/services/domain/aggregation-validation.service.ts","../../global-context/services/domain/aggregation-picker.service.ts","../../global-context/services/infrastructure/global-context-utils.service.ts","../../global-context/features/aggregation/aggregation-picker/aggregation-picker.component.ts","../../global-context/features/aggregation/aggregation-picker/aggregation-picker.component.html","../../global-context/features/configuration/history-mode-configuration-controls/history-mode-configuration-controls.component.ts","../../global-context/features/configuration/history-mode-configuration-controls/history-mode-configuration-controls.component.html","../../global-context/features/time-context/interval-picker/interval-picker.component.ts","../../global-context/features/time-context/interval-picker/interval-picker.component.html","../../global-context/features/time-context/time-range-picker/date-time-context-picker.component.ts","../../global-context/features/time-context/time-range-picker/date-time-context-picker.component.html","../../global-context/features/configuration/live-mode-configuration-controls/live-mode-configuration-controls.component.ts","../../global-context/features/configuration/live-mode-configuration-controls/live-mode-configuration-controls.component.html","../../global-context/features/configuration/configuration-controls/configuration-controls.component.ts","../../global-context/features/configuration/configuration-collapse/configuration-collapse.component.ts","../../global-context/features/configuration/configuration-collapse/configuration-collapse.component.html","../../global-context/services/infrastructure/global-context-query.service.ts","../../global-context/features/aggregation/aggregation-display/aggregation-display.component.ts","../../global-context/features/aggregation/aggregation-display/aggregation-display.component.html","../../global-context/features/refresh/auto-refresh/auto-refresh-control.component.ts","../../global-context/features/refresh/auto-refresh/auto-refresh-control.component.html","../../global-context/features/time-context/time-range-display/time-range-display.component.ts","../../global-context/features/time-context/time-range-display/time-range-display.component.html","../../global-context/shared/context-controls/context-controls.component.ts","../../global-context/shared/context-controls/context-controls.component.html","../../global-context/core/global-context.component.ts","../../global-context/core/global-context.component.html","../../global-context/services/infrastructure/global-context-navigation.service.ts","../../global-context/core/widget-inline/inline-link-controls.component.ts","../../global-context/core/widget-inline/inline-link-helpers.ts","../../global-context/core/widget-inline/orchestrator/config-composer.util.ts","../../global-context/core/widget-inline/inline-refresh-helpers.ts","../../global-context/core/widget-inline/orchestrator/shared-mode-aggregation.helper.ts","../../global-context/core/widget-inline/orchestrator/shared-mode-context.helper.ts","../../global-context/core/widget-inline/orchestrator/shared-mode-refresh.helper.ts","../../global-context/core/widget-inline/orchestrator/shared-mode-state.helper.ts","../../global-context/core/widget-inline/orchestrator/shared-mode-toggle.helper.ts","../../global-context/core/widget-inline/orchestrator/validation.util.ts","../../global-context/core/widget-inline/orchestrator/shared-mode-orchestrator.ts","../../global-context/core/widget-inline/orchestrator/history-mode-orchestrator.ts","../../global-context/core/widget-inline/orchestrator/live-mode-orchestrator.ts","../../global-context/core/widget-inline/orchestrator/global-context-inline-orchestrator.service.ts","../../global-context/core/global-context-inline.component.ts","../../global-context/core/global-context-inline.component.html","../../global-context/services/state/global-context-store.service.ts","../../global-context/core/global-context-config.component.ts","../../global-context/core/global-context-config.component.html","../../global-context/features/configuration/config-context-selector/config-context-selector.component.ts","../../global-context/core/global-context-widget-config.component.ts","../../global-context/core/index.ts","../../global-context/features/time-context/index.ts","../../global-context/features/refresh/realtime-control/realtime-control.component.ts","../../global-context/features/refresh/realtime-control/realtime-control.component.html","../../global-context/features/refresh/index.ts","../../global-context/features/configuration/index.ts","../../global-context/shared/preview-controls/preview-controls.component.ts","../../global-context/shared/preview-controls/preview-controls.component.html","../../global-context/shared/index.ts","../../global-context/integration/widget-controls/default-widget-template.ts","../../global-context/integration/widget-controls/widget-controls-factory.ts","../../global-context/integration/widget-controls/guards.ts","../../global-context/integration/widget-controls/update-helpers.ts","../../global-context/integration/widget-controls/widget-controls-presets.helpers.ts","../../global-context/integration/widget-controls/widget-controls-presets.ts","../../global-context/integration/widget-wrapper/global-context-widget-wrapper.component.ts","../../global-context/integration/presets/control-presets.ts","../../global-context/integration/config-mode-controls/config-mode-controls.component.ts","../../global-context/integration/context-controls/context-controls.component.ts","../../global-context/integration/link-buttons/link-buttons.component.ts","../../global-context/integration/global-context-connector/global-context-connector.component.ts","../../global-context/integration/local-controls/local-controls.component.ts","../../global-context/integration/index.ts","../../global-context/global-context.module.ts","../../global-context/c8y-ngx-components-global-context.ts"],"sourcesContent":["import { aggregationType } from '@c8y/client';\nimport { RefreshOption } from './auto-refresh.model';\nimport { LinkStatesMap } from './control-flow.model';\nimport { DateTimeContext } from './date-time-context-picker.model';\nimport { Interval, TimeInterval } from './interval-picker.model';\n\nexport const GLOBAL_CONTEXT_EVENTS = {\n  STATE_CHANGE: 'GLOBAL_CONTEXT_STATE_CHANGE',\n  REFRESH: 'REFRESH',\n  REFRESH_OPTION_CHANGE: 'GLOBAL_CONTEXT_REFRESH_OPTION_CHANGE',\n  UPDATE_GLOBAL_CONTEXT_LIVE: 'UPDATE_GLOBAL_CONTEXT_LIVE',\n  UPDATE_GLOBAL_CONTEXT_HISTORY: 'UPDATE_GLOBAL_CONTEXT_HISTORY',\n  INIT_GLOBAL_CONTEXT: 'INIT_GLOBAL_CONTEXT'\n} as const;\n\nexport enum GLOBAL_CONTEXT_DISPLAY_MODE {\n  DASHBOARD = 'dashboard',\n  CONFIG = 'config',\n  VIEW_AND_CONFIG = 'view_and_config'\n}\n\nexport type GlobalContextKeys = (keyof GlobalContextState)[];\n\n/**\n * State object passed to widget state handlers\n */\nexport interface WidgetState {\n  config?: GlobalContextState;\n  inlineControlSettings?: Partial<GlobalContextSettings>;\n  dashboardControlSettings?: Partial<GlobalContextSettings>;\n  currentLinks?: LinkStatesMap;\n  displayMode?: string;\n  [key: string]: unknown;\n}\n\n/**\n * Result returned from widget state handlers\n */\nexport interface WidgetStateHandlerResult {\n  inlineControlSettings: Partial<GlobalContextSettings>;\n  dashboardControlSettings?: Partial<GlobalContextSettings>;\n  links?: Partial<LinkStatesMap>;\n  options?: { noAutoRefreshCounter?: boolean };\n}\n\nexport interface WidgetControls {\n  supports: GlobalContextKeys;\n  supportedModes?: RefreshOption[];\n  options?: { noAutoRefreshCounter?: boolean };\n  configSettings: {\n    [mode in GLOBAL_CONTEXT_DISPLAY_MODE]?: {\n      [option in RefreshOption]?: Partial<GlobalContextSettings>;\n    };\n  };\n  settings: {\n    [mode in GLOBAL_CONTEXT_DISPLAY_MODE]?: {\n      [option in RefreshOption]?: Partial<GlobalContextSettings>;\n    };\n  };\n  defaultLinks?: {\n    [mode in GLOBAL_CONTEXT_DISPLAY_MODE]?: {\n      [option in RefreshOption]?: LinkStatesMap;\n    };\n  };\n  stateHandlers?: {\n    [stateName: string]: (widgetState?: WidgetState) => WidgetStateHandlerResult;\n  };\n}\n\n/** Settings to control which features are visible in the global context UI */\nexport interface GlobalContextSettings {\n  showTimeContext: boolean;\n  showAggregation: boolean;\n  showAutoRefresh: boolean;\n  showRefresh: boolean;\n  showRefreshInterval: boolean;\n}\n\n/** Base interface for all global context events */\nexport interface GlobalContextEventBase<Type extends string, Payload> {\n  type: Type;\n  payload: Payload;\n  timestamp?: number;\n}\n\n/**\n * Registry of all available global context events and their payloads\n *\n * Extend with new events by declaring module augmentation:\n *   interface GlobalContextEventRegistry {\n *     NEW_EVENT: boolean; // Add your event payload type\n *   }\n */\nexport interface GlobalContextEventRegistry {\n  [GLOBAL_CONTEXT_EVENTS.REFRESH]: {\n    dateFrom?: string | Date;\n    dateTo?: string | Date;\n    interval?: TimeInterval;\n  };\n  [GLOBAL_CONTEXT_EVENTS.STATE_CHANGE]: Partial<GlobalContextState>;\n  [GLOBAL_CONTEXT_EVENTS.REFRESH_OPTION_CHANGE]: RefreshOption;\n  [GLOBAL_CONTEXT_EVENTS.UPDATE_GLOBAL_CONTEXT_LIVE]: Partial<GlobalContextState>;\n  [GLOBAL_CONTEXT_EVENTS.UPDATE_GLOBAL_CONTEXT_HISTORY]: Partial<GlobalContextState>;\n  [GLOBAL_CONTEXT_EVENTS.INIT_GLOBAL_CONTEXT]: void;\n}\n\n/** Union of all possible event type strings */\nexport type GlobalContextEventType = keyof GlobalContextEventRegistry;\n/** Union type of all possible global context events */\nexport type GlobalContextEventUnion = {\n  [K in GlobalContextEventType]: GlobalContextEventBase<K, GlobalContextEventRegistry[K]>;\n}[GlobalContextEventType];\n\nexport enum DateContextQueryParamNames {\n  DATE_CONTEXT_FROM = 'dateContextFrom',\n  DATE_CONTEXT_TO = 'dateContextTo',\n  DATE_CONTEXT_INTERVAL = 'dateContextInterval',\n  DATE_CONTEXT_AGGREGATION = 'dateContextAggregation',\n  DATE_CONTEXT_AUTO_REFRESH = 'globalContextAutoRefresh',\n  DATE_CONTEXT_REFRESH_MODE = 'globalContextRefreshMode'\n}\n\ntype DateContextFromToQueryParams = {\n  [DateContextQueryParamNames.DATE_CONTEXT_FROM]: string;\n  [DateContextQueryParamNames.DATE_CONTEXT_TO]: string;\n  [DateContextQueryParamNames.DATE_CONTEXT_INTERVAL]?: never;\n};\n\ntype DateContextIntervalQueryParams = {\n  [DateContextQueryParamNames.DATE_CONTEXT_FROM]?: never;\n  [DateContextQueryParamNames.DATE_CONTEXT_TO]?: never;\n  [DateContextQueryParamNames.DATE_CONTEXT_INTERVAL]: Interval['id'];\n};\n\n/**\n * Input query params is an object representing all possible query params related to widget time context.\n * It can be provided by user typing them in browser URL address bar, so all of them should be considered.\n */\nexport type InputDateContextQueryParams = {\n  [DateContextQueryParamNames.DATE_CONTEXT_FROM]?: string;\n  [DateContextQueryParamNames.DATE_CONTEXT_TO]?: string;\n  [DateContextQueryParamNames.DATE_CONTEXT_INTERVAL]?: Interval['id'];\n  [DateContextQueryParamNames.DATE_CONTEXT_AGGREGATION]?: aggregationType;\n  [DateContextQueryParamNames.DATE_CONTEXT_AUTO_REFRESH]?: boolean;\n  [DateContextQueryParamNames.DATE_CONTEXT_REFRESH_MODE]?: string;\n};\n\n/**\n * Output query params is an object representing params that are applied to current URL in browser address bar.\n * These params are set programmatically.\n * Time context interval and time range described by date \"from\" and date \"to\" exclude each other.\n */\nexport type OutputDateContextQueryParams = (\n  | DateContextFromToQueryParams\n  | DateContextIntervalQueryParams\n) & {\n  [DateContextQueryParamNames.DATE_CONTEXT_AGGREGATION]: aggregationType;\n};\n\nexport type GlobalContextDisplayMode = `${GLOBAL_CONTEXT_DISPLAY_MODE}`;\n\nexport const GLOBAL_CONTEXT_SOURCE = {\n  WIDGET: 'widget',\n  DASHBOARD: 'dashboard'\n} as const;\n\nexport type GlobalContextSource =\n  (typeof GLOBAL_CONTEXT_SOURCE)[keyof typeof GLOBAL_CONTEXT_SOURCE];\n\n// TODO: This type should extend ContextWidgetConfig from @c8y/ngx-components/context-dashboard\n// but importing it creates a circular dependency (global-context <-> context-dashboard)\nexport interface GlobalContextState {\n  dateTimeContext?: DateTimeContext;\n  aggregation?: aggregationType | null;\n  isAutoRefreshEnabled?: boolean;\n  refreshInterval?: number;\n  refreshOption?: RefreshOption;\n  displayMode?: `${GLOBAL_CONTEXT_DISPLAY_MODE}`;\n  source?: GlobalContextSource;\n  eventSourceId?: string;\n  /**\n   * Flag indicating global context values have been applied.\n   * For dashboard mode, widgets should wait for this flag before processing config.\n   */\n  isGlobalContextReady?: boolean;\n}\n\n/**\n * Interface for date context parameters passed to setDateContextQueryParams method.\n * Provides strong typing for all possible parameters.\n */\nexport interface DateContextParams {\n  /** Time interval ID ('DAYS', 'HOURS', etc.) or 'custom' for date ranges */\n  interval?: Interval['id'];\n  /** Array containing [dateFrom, dateTo] strings or Date objects for custom date ranges */\n  date?: (string | Date)[] | null;\n  /** Data aggregation type ('HOURLY', 'DAILY', etc.) */\n  aggregation?: aggregationType;\n  /** Whether auto-refresh should be enabled */\n  isAutoRefreshEnabled?: boolean;\n  /** Refresh mode ('live' or 'history') */\n  refreshOption?: RefreshOption;\n}\n\n/**\n * Result type for query parameter validation status.\n * Provides detailed validation information for debugging and UI state management.\n */\nexport interface ParameterValidationStatus {\n  /** True if interval parameter is valid and selectable */\n  interval: boolean;\n  /** True if aggregation parameter is valid */\n  aggregation: boolean;\n  /** True if both dateFrom and dateTo form a valid date range */\n  dateRange: boolean;\n  /** Parsed boolean value, or undefined if invalid/missing */\n  autoRefresh: boolean | undefined;\n}\n\nexport const WIDGET_DISPLAY_MODE = {\n  INLINE: 'inline',\n  CONFIG: 'config',\n  PREVIEW: 'preview'\n} as const;\n\nexport type WidgetDisplayMode = (typeof WIDGET_DISPLAY_MODE)[keyof typeof WIDGET_DISPLAY_MODE];\n\nexport interface GlobalContextEvent {\n  context: Partial<GlobalContextState>;\n  diff: Partial<GlobalContextState>;\n}\n","export const REFRESH_OPTION = {\n  LIVE: 'live',\n  HISTORY: 'history'\n} as const;\n\nexport type RefreshOption = (typeof REFRESH_OPTION)[keyof typeof REFRESH_OPTION];\n","import { gettext } from '@c8y/ngx-components/gettext';\n\nconst todayDate = new Date();\n\nexport const TIME_SPAN_MS = {\n  MINUTE: 1000 * 60,\n  HOUR: 1000 * 60 * 60,\n  DAY: 1000 * 60 * 60 * 24,\n  WEEK: 1000 * 60 * 60 * 24 * 7,\n  MONTH: todayDate.valueOf() - new Date(todayDate.setMonth(todayDate.getMonth() - 1)).valueOf()\n} as const;\n\nexport const TIME_INTERVAL = {\n  NONE: 'none',\n  MINUTES: 'minutes',\n  HOURS: 'hours',\n  DAYS: 'days',\n  WEEKS: 'weeks',\n  MONTHS: 'months',\n  CUSTOM: 'custom'\n} as const;\n\nexport type TimeInterval = (typeof TIME_INTERVAL)[keyof typeof TIME_INTERVAL];\n\nexport type Interval = {\n  id: 'minutes' | 'hours' | 'days' | 'weeks' | 'months' | 'custom' | string;\n  title: string;\n  timespanInMs?: number;\n};\n\nexport type AlarmFilterInterval =\n  | Interval\n  | {\n      id: 'none';\n      title: string;\n      timespanInMs?: number;\n    };\n\nexport const INTERVALS: Interval[] = [\n  {\n    id: 'minutes',\n    title: gettext('Last minute'),\n    timespanInMs: TIME_SPAN_MS.MINUTE\n  },\n  {\n    id: 'hours',\n    title: gettext('Last hour'),\n    timespanInMs: TIME_SPAN_MS.HOUR\n  },\n  {\n    id: 'days',\n    title: gettext('Last day'),\n    timespanInMs: TIME_SPAN_MS.DAY\n  },\n  {\n    id: 'weeks',\n    title: gettext('Last week'),\n    timespanInMs: TIME_SPAN_MS.WEEK\n  },\n  {\n    id: 'months',\n    title: gettext('Last month'),\n    timespanInMs: TIME_SPAN_MS.MONTH\n  },\n  { id: 'custom', title: gettext('Custom') }\n];\n\nexport const INTERVAL_TITLES: Record<AlarmFilterInterval['id'], string> = {\n  none: gettext('No date filter'),\n  minutes: gettext('Last minute'),\n  hours: gettext('Last hour'),\n  days: gettext('Last day'),\n  weeks: gettext('Last week'),\n  months: gettext('Last month'),\n  custom: gettext('Custom')\n};\n","import { REFRESH_OPTION } from './auto-refresh.model';\nimport { GLOBAL_CONTEXT_DISPLAY_MODE } from './global-context.model';\nimport { TIME_INTERVAL } from './interval-picker.model';\n\n/**\n * Default values for global context configuration\n * Single source of truth for all default values across the global context feature\n */\nexport const GLOBAL_CONTEXT_DEFAULTS = {\n  /** Default refresh option - live mode */\n  REFRESH_OPTION: REFRESH_OPTION.LIVE,\n\n  /** Default auto-refresh state */\n  IS_AUTO_REFRESH_ENABLED: true,\n\n  /** Default refresh interval in milliseconds (5 seconds) */\n  REFRESH_INTERVAL: 5000,\n\n  /** Default aggregation type */\n  AGGREGATION: null,\n\n  /** Default display mode */\n  DISPLAY_MODE: GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD,\n\n  /** Default date range duration in milliseconds (1 hour) */\n  DATE_RANGE_DURATION_MS: 60 * 60 * 1000,\n\n  /** Default time interval for custom ranges */\n  TIME_INTERVAL: TIME_INTERVAL.HOURS\n} as const;\n","import { gettext } from '@c8y/ngx-components/gettext';\nimport { GlobalContextSettings, GlobalContextState } from './global-context.model';\n\n/**\n * Define the mapping between GlobalContextState keys and their equivalent in GlobalContextSettings\n */\nexport const LINK_BTNS_CONFIG: {\n  [K in Extract<\n    keyof GlobalContextState,\n    'dateTimeContext' | 'aggregation' | 'isAutoRefreshEnabled'\n  >]: {\n    /** Form control name, same as global state key */\n    formControlName: K;\n    /** Setting key in GlobalContextSettings */\n    settingKey: keyof GlobalContextSettings;\n    /** User-friendly label for UI */\n    label: string;\n    /** Css Class for link button visualization */\n    cssClass: string;\n    icon: string;\n  };\n} = {\n  dateTimeContext: {\n    formControlName: 'dateTimeContext',\n    settingKey: 'showTimeContext',\n    label: gettext('date/time'),\n    cssClass: 'time-context',\n    icon: 'calendar'\n  },\n  isAutoRefreshEnabled: {\n    formControlName: 'isAutoRefreshEnabled',\n    settingKey: 'showAutoRefresh',\n    label: gettext('auto refresh'),\n    cssClass: 'auto-refresh',\n    icon: 'refresh'\n  },\n  aggregation: {\n    formControlName: 'aggregation',\n    settingKey: 'showAggregation',\n    label: gettext('aggregation'),\n    cssClass: 'aggregation',\n    icon: 'input'\n  }\n} as const;\n\n/**\n * Type for link toggle event\n */\nexport interface LinkToggleEvent {\n  key: Extract<\n    keyof GlobalContextState,\n    'dateTimeContext' | 'aggregation' | 'isAutoRefreshEnabled'\n  >;\n  isLinked: boolean;\n}\n\n/**\n * Type for link states map\n */\nexport type LinkStatesMap = Partial<\n  Record<\n    Extract<keyof GlobalContextState, 'dateTimeContext' | 'aggregation' | 'isAutoRefreshEnabled'>,\n    boolean\n  >\n>;\n\n/**\n * Type for control configs map\n */\nexport type ControlConfigsMap = Partial<\n  Record<\n    Extract<keyof GlobalContextState, 'dateTimeContext' | 'aggregation' | 'isAutoRefreshEnabled'>,\n    {\n      cssClass?: string;\n      linkTooltip?: string;\n      unlinkTooltip?: string;\n      icon?: string;\n      disabled?: boolean;\n      disabledTooltip?: string;\n      autoUnlinked?: boolean;\n    }\n  >\n>;\n","import { aggregationType } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { TIME_SPAN_MS } from './interval-picker.model';\n\nexport type Aggregation = {\n  id: aggregationType | null;\n  title: string;\n};\n\nexport const AGGREGATIONS: Aggregation[] = [\n  { id: null, title: gettext('None') },\n  { id: aggregationType.MINUTELY, title: gettext('Minutely') },\n  { id: aggregationType.HOURLY, title: gettext('Hourly') },\n  { id: aggregationType.DAILY, title: gettext('Daily') }\n];\n\nexport const AGGREGATION_LIMITS = {\n  MINUTELY_LIMIT: TIME_SPAN_MS.MINUTE * 10,\n  HOURLY_LIMIT: TIME_SPAN_MS.DAY * 1,\n  DAILY_LIMIT: TIME_SPAN_MS.DAY * 4\n};\n\nexport const AGGREGATION_ICON_TYPE = {\n  UNDEFINED: 'line-chart',\n  MINUTELY: 'hourglass',\n  HOURLY: 'clock-o',\n  DAILY: 'calendar-o'\n} as const;\n\nexport type AggregationIconType =\n  (typeof AGGREGATION_ICON_TYPE)[keyof typeof AGGREGATION_ICON_TYPE];\n\nexport const AGGREGATION_ICONS: Record<aggregationType | 'undefined', AggregationIconType> = {\n  undefined: AGGREGATION_ICON_TYPE.UNDEFINED,\n  MINUTELY: AGGREGATION_ICON_TYPE.MINUTELY,\n  HOURLY: AGGREGATION_ICON_TYPE.HOURLY,\n  DAILY: AGGREGATION_ICON_TYPE.DAILY\n};\n\nexport const AGGREGATION_TEXTS: Record<\n  aggregationType | 'undefined' | 'null' | 'disabled',\n  string\n> = {\n  disabled: gettext('No aggregation with realtime enabled'),\n  undefined: gettext('No aggregation'),\n  null: gettext('No aggregation'),\n  MINUTELY: gettext('Minutely aggregation'),\n  HOURLY: gettext('Hourly aggregation'),\n  DAILY: gettext('Daily aggregation')\n};\n\nexport const AGGREGATION_VALUES = {\n  none: 'NONE',\n  minutely: aggregationType.MINUTELY,\n  hourly: aggregationType.HOURLY,\n  daily: aggregationType.DAILY\n} as const;\n\nexport const AGGREGATION_VALUES_ARR = [\n  AGGREGATION_VALUES.none,\n  AGGREGATION_VALUES.minutely,\n  AGGREGATION_VALUES.hourly,\n  AGGREGATION_VALUES.daily\n] as const;\n\nexport const AGGREGATION_LABELS = {\n  NONE: AGGREGATIONS[0].title,\n  [aggregationType.MINUTELY]: AGGREGATIONS[1].title,\n  [aggregationType.HOURLY]: AGGREGATIONS[2].title,\n  [aggregationType.DAILY]: AGGREGATIONS[3].title\n} as const;\n\n/**\n * Represents the available aggregation options.\n * Aggregation 'none' is not handled by our backend.\n */\nexport type AggregationOption = typeof AGGREGATION_VALUES.none | `${aggregationType}`;\n/**\n * Represents the status of aggregation options.\n * Used to determine which aggregation options should be disabled.\n */\nexport type AggregationOptionStatus = {\n  [key in AggregationOption]?: boolean;\n};\n\nexport interface AggregationState {\n  aggregationType: aggregationType;\n  isDisabled: boolean;\n}\n","/**\n * Time duration constants (ms)\n */\nexport const TIME_DURATION = {\n  /** One hour in milliseconds */\n  ONE_HOUR_MS: 60 * 60 * 1000,\n  /** One minute in milliseconds */\n  ONE_MINUTE_MS: 60 * 1000,\n  /** One second in milliseconds */\n  ONE_SECOND_MS: 1000\n} as const;\n\n/**\n * Timing constants for debouncing and throttling\n */\nexport const TIMING = {\n  /** Debounce time for form value changes (ms) */\n  FORM_DEBOUNCE: 100,\n  /** Throttle time for context changes (ms) */\n  CONTEXT_THROTTLE: 200,\n  /** Tooltip delay time (ms) */\n  TOOLTIP_DELAY: 500,\n  /** Default debounce time (ms) */\n  DEFAULT_DEBOUNCE: 100\n} as const;\n\n/**\n * UI priority constants\n */\nexport const UI_PRIORITIES = {\n  /** High priority for configuration controls */\n  CONFIGURATION_PRIORITY: 1000\n} as const;\n","import { DateTimeContext } from '../models/date-time-context-picker.model';\nimport { INTERVALS, TIME_INTERVAL, TimeInterval } from '../models/interval-picker.model';\n\n/**\n * Central utility for all DateTimeContext operations.\n * Single source of truth for date validation, conversion, and context normalization.\n */\nexport class DateTimeContextUtil {\n  /**\n   * Converts a value to a Date object, handling various input types.\n   * Allows JavaScript's natural type coercion for compatibility with existing tests.\n   */\n  static toDate(value: unknown): Date | null {\n    // Handle undefined explicitly - new Date(undefined) is Invalid Date\n    if (value === undefined) {\n      return null;\n    }\n\n    // Already a Date object\n    if (value instanceof Date) {\n      return isNaN(value.getTime()) ? null : value;\n    }\n\n    // Let JavaScript's natural type coercion handle all other cases\n    // This allows null, false, true, numbers, strings to be handled like new Date() would\n    const date = new Date(value as never);\n    return isNaN(date.getTime()) ? null : date;\n  }\n\n  /**\n   * Converts a date value to ISO string format.\n   */\n  static toIso(value: Date | string | null | undefined): string | null {\n    const date = this.toDate(value);\n    return date ? date.toISOString() : null;\n  }\n\n  /**\n   * Normalizes an ISO string to remove milliseconds (sets to .000Z).\n   * This ensures date comparisons ignore millisecond precision.\n   *\n   * @param isoString - ISO date string (e.g., \"2025-10-27T15:10:04.405Z\")\n   * @returns ISO string with milliseconds zeroed (e.g., \"2025-10-27T15:10:04.000Z\")\n   */\n  static normalizeIsoToSeconds(isoString: string | null | undefined): string | null {\n    if (!isoString || typeof isoString !== 'string') {\n      return null;\n    }\n\n    // Parse the ISO string to a Date\n    const date = this.toDate(isoString);\n    if (!date) {\n      return null;\n    }\n\n    // Set milliseconds to 0\n    date.setMilliseconds(0);\n    return date.toISOString();\n  }\n\n  /**\n   * Validates if a single date value is valid.\n   * Only accepts Date objects and valid date strings (not numbers, null, etc.)\n   * This is the strict validation used for form inputs and user-facing APIs.\n   */\n  static isValidDate(value: unknown): boolean {\n    // Only accept Date instances or strings\n    if (value instanceof Date) {\n      return !isNaN(value.getTime());\n    }\n    if (typeof value === 'string') {\n      const date = new Date(value);\n      return !isNaN(date.getTime());\n    }\n    return false;\n  }\n\n  /**\n   * Validates if a value can be converted to a valid date.\n   * Uses JavaScript's natural type coercion, accepting null, numbers, booleans, etc.\n   * This is used internally for range validation.\n   */\n  static isCoercibleToDate(value: unknown): boolean {\n    return this.toDate(value) !== null;\n  }\n\n  /**\n   * Validates if a date range is valid (from < to).\n   */\n  static isValidRange(from: unknown, to: unknown): boolean {\n    const fromDate = this.toDate(from);\n    const toDate = this.toDate(to);\n\n    // Both dates must be valid and fromDate must be before toDate\n    return fromDate !== null && toDate !== null && fromDate < toDate;\n  }\n\n  /**\n   * Validates if a date range is valid, allowing equal dates (from <= to).\n   */\n  static isValidRangeOrEqual(from: unknown, to: unknown): boolean {\n    const fromDate = this.toDate(from);\n    const toDate = this.toDate(to);\n\n    // Both dates must be valid and fromDate must be before or equal to toDate\n    return fromDate !== null && toDate !== null && fromDate <= toDate;\n  }\n\n  /**\n   * Calculates date range from an interval.\n   * Pure implementation based on INTERVALS configuration.\n   */\n  static dateRangeFromInterval(\n    interval: TimeInterval,\n    now: Date = new Date()\n  ): [Date, Date] | null {\n    // Special case: 'none' returns epoch to current time\n    if (interval === 'none') {\n      return [new Date(0), now];\n    }\n\n    // Special case: 'custom' has no default range\n    if (interval === TIME_INTERVAL.CUSTOM) {\n      return null;\n    }\n\n    // Find the interval configuration\n    const intervalConfig = INTERVALS.find(({ id }) => id === interval);\n    if (!intervalConfig || !intervalConfig.timespanInMs) {\n      return null;\n    }\n\n    // Calculate date range: current time minus interval timespan\n    const dateTo = new Date(now);\n    const dateFrom = new Date(dateTo.valueOf() - intervalConfig.timespanInMs);\n    return [dateFrom, dateTo];\n  }\n\n  /**\n   * Ensures all dates in a DateTimeContext are ISO strings with milliseconds normalized to .000Z.\n   */\n  static ensureIsoContext(ctx: Partial<DateTimeContext>): DateTimeContext {\n    const result: DateTimeContext = {\n      interval: ctx.interval || TIME_INTERVAL.CUSTOM,\n      dateFrom: null,\n      dateTo: null\n    };\n\n    if (ctx.dateFrom) {\n      const iso = this.toIso(ctx.dateFrom);\n      result.dateFrom = this.normalizeIsoToSeconds(iso);\n    }\n    if (ctx.dateTo) {\n      const iso = this.toIso(ctx.dateTo);\n      result.dateTo = this.normalizeIsoToSeconds(iso);\n    }\n\n    return result;\n  }\n\n  /**\n   * Normalizes a DateTimeContext for live mode.\n   * - For non-custom intervals: recomputes range based on current time\n   * - For custom interval: updates dateTo to current time\n   */\n  static normalizeForLive(ctx: Partial<DateTimeContext>, now: Date = new Date()): DateTimeContext {\n    const interval = ctx.interval || TIME_INTERVAL.CUSTOM;\n\n    if (interval !== TIME_INTERVAL.CUSTOM) {\n      // Recompute range from interval\n      const range = this.dateRangeFromInterval(interval, now);\n      if (range) {\n        return this.ensureIsoContext({\n          interval,\n          dateFrom: range[0],\n          dateTo: range[1]\n        });\n      }\n    }\n\n    // For custom interval, keep dateFrom but update dateTo to now\n    return this.ensureIsoContext({\n      interval: TIME_INTERVAL.CUSTOM,\n      dateFrom: ctx.dateFrom,\n      dateTo: now\n    });\n  }\n\n  /**\n   * Normalizes a DateTimeContext for history mode.\n   * Forces interval to CUSTOM and preserves explicit date range.\n   */\n  static normalizeForHistory(ctx: Partial<DateTimeContext>): DateTimeContext {\n    return this.ensureIsoContext({\n      interval: TIME_INTERVAL.CUSTOM,\n      dateFrom: ctx.dateFrom,\n      dateTo: ctx.dateTo\n    });\n  }\n\n  /**\n   * Type guard to check if a value is a valid DateTimeContext object.\n   */\n  static isValidDateTimeContext(context: unknown): context is DateTimeContext {\n    if (!context || typeof context !== 'object') return false;\n\n    const ctx = context as Record<string, unknown>;\n\n    const hasDates = 'dateFrom' in ctx && 'dateTo' in ctx && 'interval' in ctx;\n    if (!hasDates) return false;\n\n    return (\n      typeof ctx.interval === 'string' &&\n      ctx.interval.length > 0 &&\n      this.isValidDate(ctx.dateFrom) &&\n      this.isValidDate(ctx.dateTo)\n    );\n  }\n\n  /**\n   * Checks if a partial DateTimeContext has all required fields.\n   * Business logic: Allow single field updates or complete updates (all 3 fields),\n   * but reject incomplete updates with 2 fields.\n   */\n  static isCompleteDateTimeContext(\n    diff: Partial<{ dateTimeContext: Partial<DateTimeContext> }>\n  ): boolean {\n    // If no dateTimeContext in diff, it's considered complete\n    if (!('dateTimeContext' in diff) || !diff.dateTimeContext) {\n      return true;\n    }\n\n    const keys = Object.keys(diff.dateTimeContext);\n    // Allow single field updates (e.g., just interval) or complete updates (all 3 fields)\n    // Reject incomplete updates with 2 fields\n    return keys.length === 1 || keys.length === 3;\n  }\n\n  /**\n   * Formats a context for emission, ensuring ISO dates and filtering by supported fields.\n   */\n  static formatForEmission(\n    context: Partial<{ dateTimeContext: Partial<DateTimeContext> }>,\n    supports: string[]\n  ): Partial<{ dateTimeContext: DateTimeContext }> {\n    if (!supports.includes('dateTimeContext') || !context.dateTimeContext) {\n      return {};\n    }\n\n    const dateTimeContext = context.dateTimeContext;\n\n    // For live mode with custom interval, default dateTo to now if missing\n    if (dateTimeContext.interval === TIME_INTERVAL.CUSTOM && !dateTimeContext.dateTo) {\n      return {\n        dateTimeContext: this.ensureIsoContext({\n          ...dateTimeContext,\n          dateTo: new Date()\n        })\n      };\n    }\n\n    return {\n      dateTimeContext: this.ensureIsoContext(dateTimeContext)\n    };\n  }\n}\n","import { GLOBAL_CONTEXT_DEFAULTS } from '../models/global-context-defaults';\nimport type { DateTimeContext } from '../models/date-time-context-picker.model';\nimport type { GlobalContextState } from '../models/global-context.model';\nimport { DateTimeContextUtil } from './date-time-context.util';\n\n/**\n * Creates a complete default global context state\n *\n * @returns A complete GlobalContextState with all required properties set to sensible defaults\n */\nexport function createDefaultGlobalContextState(): GlobalContextState {\n  const now = new Date();\n  const dateFrom = new Date(now.getTime() - GLOBAL_CONTEXT_DEFAULTS.DATE_RANGE_DURATION_MS);\n\n  return {\n    dateTimeContext: {\n      dateFrom: dateFrom.toISOString(),\n      dateTo: now.toISOString(),\n      interval: GLOBAL_CONTEXT_DEFAULTS.TIME_INTERVAL\n    },\n    refreshOption: GLOBAL_CONTEXT_DEFAULTS.REFRESH_OPTION,\n    isAutoRefreshEnabled: GLOBAL_CONTEXT_DEFAULTS.IS_AUTO_REFRESH_ENABLED,\n    refreshInterval: GLOBAL_CONTEXT_DEFAULTS.REFRESH_INTERVAL,\n    aggregation: GLOBAL_CONTEXT_DEFAULTS.AGGREGATION,\n    displayMode: GLOBAL_CONTEXT_DEFAULTS.DISPLAY_MODE\n  };\n}\n\n/**\n * Fills missing or invalid properties in a partial global context state with defaults\n *\n * @param state - Partial global context state that may have missing or invalid values\n * @returns Complete GlobalContextState with all required properties\n */\nexport function fillMissingDefaults(state: Partial<GlobalContextState>): GlobalContextState {\n  const defaults = createDefaultGlobalContextState();\n\n  // Use central utility to ensure ISO formatting for dateTimeContext\n  const dateTimeContext = state.dateTimeContext\n    ? DateTimeContextUtil.ensureIsoContext({\n        ...defaults.dateTimeContext,\n        ...state.dateTimeContext,\n        // Use defaults for invalid dates\n        dateFrom: DateTimeContextUtil.isValidDate(state.dateTimeContext?.dateFrom)\n          ? state.dateTimeContext.dateFrom\n          : defaults.dateTimeContext.dateFrom,\n        dateTo: DateTimeContextUtil.isValidDate(state.dateTimeContext?.dateTo)\n          ? state.dateTimeContext.dateTo\n          : defaults.dateTimeContext.dateTo,\n        interval: state.dateTimeContext?.interval || defaults.dateTimeContext.interval\n      })\n    : defaults.dateTimeContext;\n\n  return {\n    ...defaults,\n    ...state,\n    dateTimeContext,\n    // Always override refreshInterval to use the fixed 5s default\n    // This ensures old dashboards with custom intervals are migrated to the new fixed interval\n    refreshInterval: GLOBAL_CONTEXT_DEFAULTS.REFRESH_INTERVAL\n  };\n}\n\n/**\n * Validates if a value is a valid date (either Date object or ISO string)\n * Delegates to central utility for consistency.\n *\n * @param value - Value to validate (string, Date, or undefined)\n * @returns true if the value represents a valid date\n */\nexport function isValidDateValue(value: string | Date | undefined): value is string | Date {\n  return DateTimeContextUtil.isValidDate(value);\n}\n\n/**\n * Checks if a date time context object has all required valid properties\n * Delegates to central utility for consistency.\n *\n * @param context - DateTimeContext to validate\n * @returns true if the context is complete and valid\n */\nexport function isValidDateTimeContext(context: unknown): context is DateTimeContext {\n  return DateTimeContextUtil.isValidDateTimeContext(context);\n}\n\n/**\n * Checks if a dateTimeContext diff object is complete (has all 3 required fields).\n * Delegates to central utility for consistency.\n *\n * @param diff - Partial state that may contain dateTimeContext\n * @returns true if dateTimeContext is absent, has only 1 field, or has all 3 fields; false if it has 2 fields (incomplete)\n */\nexport function isCompleteDateTimeContext(diff: Partial<GlobalContextState>): boolean {\n  return DateTimeContextUtil.isCompleteDateTimeContext(diff);\n}\n\n/**\n * Formats dateTimeContext for emission, handling date conversions and defaults.\n * Delegates to central utility for consistency.\n *\n * @param context - Global context state to format\n * @param supports - Array of supported fields from widget template\n * @returns Formatted context with properly formatted dateTimeContext\n */\nexport function formatDateTimeContextForEmission(\n  context: Partial<GlobalContextState>,\n  supports: string[]\n): Partial<GlobalContextState> {\n  const result = DateTimeContextUtil.formatForEmission(context, supports);\n\n  // Merge back with original context to preserve other fields\n  return {\n    ...context,\n    ...result\n  };\n}\n","import { computed, Injectable, signal } from '@angular/core';\nimport { ViewContext } from '@c8y/ngx-components';\nimport { BehaviorSubject, distinctUntilChanged, map, Observable, shareReplay } from 'rxjs';\nimport { GlobalContextSettings, GlobalContextState } from '../../models/global-context.model';\nimport { createDefaultGlobalContextState } from '../../utils/global-context-defaults.util';\n\n/**\n * Interface representing a registered widget's global context settings with its unique identifier.\n */\ninterface RegisteredGlobalContextSettings extends Partial<GlobalContextSettings> {\n  /** Unique identifier for the widget that registered these settings */\n  readonly id: string;\n}\n\n/**\n * Default settings applied when no widgets have registered any settings.\n */\nconst DEFAULT_GLOBAL_CONTEXT_SETTINGS: GlobalContextSettings = {\n  showTimeContext: false,\n  showAggregation: false,\n  showAutoRefresh: false,\n  showRefresh: false,\n  showRefreshInterval: false\n} as const;\n\n/**\n * GlobalContextService manages widget settings registration and loading states.\n *\n * This service is responsible for:\n * - Registering and managing widget-specific global context settings\n * - Consolidating settings from multiple widgets using OR logic\n * - Tracking loading states across multiple widgets\n * - Providing default configurations for the global context\n *\n * @example\n * ```typescript\n * // Register widget settings\n * globalContextService.register('widget-1', { showTimeContext: true });\n *\n * // Get consolidated settings from all widgets\n * globalContextService.getConsolidatedSettings().subscribe(settings => {\n *   console.log(settings); // { showTimeContext: true, ... }\n * });\n *\n * // Track loading state\n * globalContextService.registerLoading('widget-1');\n * console.log(globalContextService.isLoading()); // true\n * ```\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class GlobalContextService {\n  /**\n   * Computed signal that indicates if any widgets are currently in a loading state.\n   * Returns true if at least one widget has registered a loading state.\n   */\n  readonly isLoading = computed(() => this.loadingIds().size > 0);\n\n  /** Target context for the global context service */\n  protected readonly targetContext: ViewContext.Device | ViewContext.Group = ViewContext.Group;\n\n  /** Observable stream of all registered widget settings */\n  private readonly settings$ = new BehaviorSubject<readonly RegisteredGlobalContextSettings[]>([]);\n\n  /** Signal storing unique identifiers of widgets currently in loading state */\n  private readonly loadingIds = signal<Set<string>>(new Set());\n\n  /**\n   * Registers global context settings for a specific widget.\n   * If settings for the same widget ID already exist, they will be updated.\n   *\n   * @param id - Unique identifier for the widget\n   * @param settings - Partial global context settings to register\n   *\n   * @throws {Error} When id is empty or null\n   *\n   * @example\n   * ```typescript\n   * globalContextService.register('my-widget', {\n   *   showTimeContext: true,\n   *   showAutoRefresh: false\n   * });\n   * ```\n   */\n  register(id: string, settings: Partial<GlobalContextSettings>): void {\n    this.validateWidgetId(id);\n\n    const registeredSettings: RegisteredGlobalContextSettings = {\n      ...settings,\n      id\n    };\n\n    const currentSettings = this.settings$.value;\n    const existingIndex = this.findSettingsIndex(id, currentSettings);\n\n    if (existingIndex >= 0) {\n      this.updateExistingSettings(existingIndex, registeredSettings, currentSettings);\n    } else {\n      this.addNewSettings(registeredSettings, currentSettings);\n    }\n  }\n\n  /**\n   * Retrieves all currently registered widget settings.\n   *\n   * @returns Array of all registered settings with their widget IDs\n   */\n  getSettings(): readonly RegisteredGlobalContextSettings[] {\n    return this.settings$.value;\n  }\n\n  /**\n   * Removes all registered widget settings.\n   * This will cause the consolidated settings to return to default values.\n   */\n  resetSettings(): void {\n    this.settings$.next([]);\n  }\n\n  /**\n   * Unregisters settings for a specific widget.\n   *\n   * @param id - Unique identifier of the widget to unregister\n   *\n   * @example\n   * ```typescript\n   * globalContextService.unregister('my-widget');\n   * ```\n   */\n  unregister(id: string): void {\n    if (!id) return; // Silently ignore invalid IDs\n\n    const currentSettings = this.settings$.value;\n    const filteredSettings = currentSettings.filter(s => s.id !== id);\n\n    if (filteredSettings.length !== currentSettings.length) {\n      this.settings$.next(filteredSettings);\n    }\n  }\n\n  /**\n   * Returns an observable of consolidated global context settings.\n   *\n   * Settings are consolidated using OR logic - if any widget requires a setting to be shown,\n   * it will be included in the consolidated result. The observable emits distinct values only\n   * and is shared among all subscribers for optimal performance.\n   *\n   * @returns Observable that emits consolidated settings whenever they change\n   *\n   * @example\n   * ```typescript\n   * globalContextService.getConsolidatedSettings().subscribe(settings => {\n   *   if (settings.showTimeContext) {\n   *     // Show time context controls\n   *   }\n   * });\n   * ```\n   */\n  getConsolidatedSettings(): Observable<GlobalContextSettings> {\n    return this.settings$.pipe(\n      map(settingsArray => this.consolidateSettings(settingsArray)),\n      distinctUntilChanged(this.areSettingsEqual),\n      shareReplay(1)\n    );\n  }\n\n  /**\n   * Returns the default global context settings.\n   * These settings are used when no widgets have registered any settings.\n   *\n   * @returns Default settings object with all options disabled\n   */\n  getDefaultSettings(): GlobalContextSettings {\n    return { ...DEFAULT_GLOBAL_CONTEXT_SETTINGS };\n  }\n\n  /**\n   * Registers a loading state for a specific widget.\n   * This will cause the `isLoading` computed signal to return true.\n   *\n   * @param id - Unique identifier of the widget in loading state\n   *\n   * @example\n   * ```typescript\n   * globalContextService.registerLoading('my-widget');\n   * console.log(globalContextService.isLoading()); // true\n   * ```\n   */\n  registerLoading(id: string): void {\n    if (!id) return; // Silently ignore invalid IDs\n\n    this.loadingIds.update(ids => {\n      const newIds = new Set(ids);\n      newIds.add(id);\n      return newIds;\n    });\n  }\n\n  /**\n   * Unregisters a loading state for a specific widget.\n   * When no widgets are in loading state, `isLoading` will return false.\n   *\n   * @param id - Unique identifier of the widget to remove from loading state\n   *\n   * @example\n   * ```typescript\n   * globalContextService.unregisterLoading('my-widget');\n   * ```\n   */\n  unregisterLoading(id: string): void {\n    if (!id) return; // Silently ignore invalid IDs\n\n    this.loadingIds.update(ids => {\n      const newIds = new Set(ids);\n      newIds.delete(id);\n      return newIds;\n    });\n  }\n\n  /**\n   * Returns the default global context state.\n   * This state is used as the initial configuration for new global context instances.\n   *\n   * @returns Default global context state with live refresh enabled and 1-minute time range\n   *\n   * @example\n   * ```typescript\n   * const defaultState = globalContextService.getDefaultState();\n   * console.log(defaultState.refreshOption); // 'live'\n   * ```\n   */\n  getDefaultState(): GlobalContextState {\n    return createDefaultGlobalContextState();\n  }\n\n  /**\n   * Validates that a widget ID is not empty or null.\n   *\n   * @param id - Widget ID to validate\n   * @throws {Error} When ID is invalid\n   */\n  private validateWidgetId(id: string): void {\n    if (!id || id.trim().length === 0) {\n      throw new Error('Widget ID cannot be empty or null');\n    }\n  }\n\n  /**\n   * Finds the index of settings for a given widget ID.\n   *\n   * @param id - Widget ID to search for\n   * @param settings - Array of settings to search in\n   * @returns Index of the settings or -1 if not found\n   */\n  private findSettingsIndex(\n    id: string,\n    settings: readonly RegisteredGlobalContextSettings[]\n  ): number {\n    return settings.findIndex(s => s.id === id);\n  }\n\n  /**\n   * Updates existing settings for a widget.\n   *\n   * @param index - Index of the settings to update\n   * @param newSettings - New settings to apply\n   * @param currentSettings - Current settings array\n   */\n  private updateExistingSettings(\n    index: number,\n    newSettings: RegisteredGlobalContextSettings,\n    currentSettings: readonly RegisteredGlobalContextSettings[]\n  ): void {\n    const updatedSettings = [...currentSettings];\n    updatedSettings[index] = newSettings;\n    this.settings$.next(updatedSettings);\n  }\n\n  /**\n   * Adds new settings to the settings array.\n   *\n   * @param newSettings - Settings to add\n   * @param currentSettings - Current settings array\n   */\n  private addNewSettings(\n    newSettings: RegisteredGlobalContextSettings,\n    currentSettings: readonly RegisteredGlobalContextSettings[]\n  ): void {\n    this.settings$.next([...currentSettings, newSettings]);\n  }\n\n  /**\n   * Consolidates multiple widget settings using OR logic.\n   *\n   * @param settingsArray - Array of widget settings to consolidate\n   * @returns Consolidated settings object\n   */\n  private consolidateSettings(\n    settingsArray: readonly RegisteredGlobalContextSettings[]\n  ): GlobalContextSettings {\n    return settingsArray.reduce(\n      (consolidated, current) => ({\n        showTimeContext: consolidated.showTimeContext || !!current.showTimeContext,\n        showAggregation: consolidated.showAggregation || !!current.showAggregation,\n        showAutoRefresh: consolidated.showAutoRefresh || !!current.showAutoRefresh,\n        showRefresh: consolidated.showRefresh || !!current.showRefresh,\n        showRefreshInterval: consolidated.showRefreshInterval || !!current.showRefreshInterval\n      }),\n      { ...DEFAULT_GLOBAL_CONTEXT_SETTINGS }\n    );\n  }\n\n  /**\n   * Compares two settings objects for deep equality.\n   *\n   * @param prev - Previous settings\n   * @param curr - Current settings\n   * @returns True if settings are equal, false otherwise\n   */\n  private areSettingsEqual(prev: GlobalContextSettings, curr: GlobalContextSettings): boolean {\n    return (\n      prev.showTimeContext === curr.showTimeContext &&\n      prev.showAggregation === curr.showAggregation &&\n      prev.showAutoRefresh === curr.showAutoRefresh &&\n      prev.showRefresh === curr.showRefresh &&\n      prev.showRefreshInterval === curr.showRefreshInterval\n    );\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FormBuilder, type FormGroup } from '@angular/forms';\nimport { omit, pick } from 'lodash-es';\nimport { GLOBAL_CONTEXT_DEFAULTS } from '../../models/global-context-defaults';\nimport type { GlobalContextState } from '../../models/global-context.model';\nimport { createDefaultGlobalContextState } from '../../utils/global-context-defaults.util';\n\n/**\n * Service responsible for building and managing form groups for global context configuration.\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class GlobalContextFormService {\n  private readonly fb = inject(FormBuilder);\n\n  /**\n   * Creates a FormGroup for global context configuration.\n   * @param config Optional existing configuration to initialize form values\n   * @param defaults Optional override values for specific controls\n   * @returns A fully configured FormGroup\n   */\n  buildForm(\n    config: Partial<GlobalContextState> = {},\n    defaults?: Partial<GlobalContextState>,\n    skipProp?: Array<keyof GlobalContextState>\n  ) {\n    // Get base default values\n    const defaultValues = this.getDefaultValues();\n\n    // Extract valid config values\n    const validConfigKeys = Object.keys(defaultValues) as Array<keyof GlobalContextState>;\n    const configValues = pick(config, validConfigKeys) as Partial<GlobalContextState>;\n\n    // Merge configurations with appropriate precedence\n    const mergedValues = structuredClone(this.mergeValues(defaultValues, configValues, defaults));\n    const filtered = omit(mergedValues, skipProp) as Partial<GlobalContextState>;\n\n    return skipProp ? this.fb.group(filtered) : this.fb.group(mergedValues);\n  }\n\n  /**\n   * Extracts form values into a configuration object\n   * @param form The form to extract values from\n   * @returns GlobalContextConfig object\n   */\n  getConfigFromForm(form: FormGroup): GlobalContextState {\n    if (!form) return null;\n\n    // Get raw form values\n    const formValue = form.getRawValue();\n\n    return {\n      dateTimeContext: formValue.dateTimeContext,\n      aggregation: formValue.aggregation,\n      isAutoRefreshEnabled: formValue.isAutoRefreshEnabled,\n      // Always use fixed 5s interval, ignore any form value\n      refreshInterval: GLOBAL_CONTEXT_DEFAULTS.REFRESH_INTERVAL,\n      refreshOption: formValue.refreshOption\n    };\n  }\n\n  /**\n   * Gets the default values for the global context form\n   */\n  getDefaultValues(): GlobalContextState {\n    return createDefaultGlobalContextState();\n  }\n\n  /**\n   * Merges default values with config and explicit overrides\n   */\n  private mergeValues(\n    defaultValues: GlobalContextState,\n    configValues: Partial<GlobalContextState>,\n    overrideValues?: Partial<GlobalContextState>\n  ): GlobalContextState {\n    // First merge config values over defaults\n    const mergedBasicValues: GlobalContextState = {\n      ...defaultValues,\n      ...configValues\n    };\n\n    // Special handling for dateTimeContext\n    if (configValues.dateTimeContext) {\n      mergedBasicValues.dateTimeContext = {\n        ...defaultValues.dateTimeContext,\n        ...configValues.dateTimeContext\n      };\n    }\n\n    // Apply explicit overrides if present\n    if (overrideValues) {\n      const result: GlobalContextState = {\n        ...mergedBasicValues,\n        ...overrideValues\n      };\n\n      if (overrideValues.dateTimeContext) {\n        result.dateTimeContext = {\n          ...mergedBasicValues.dateTimeContext,\n          ...overrideValues.dateTimeContext\n        };\n      }\n\n      return result;\n    }\n\n    return mergedBasicValues;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, filter, fromEvent, map, Observable } from 'rxjs';\nimport {\n  GLOBAL_CONTEXT_EVENTS,\n  GlobalContextEventRegistry,\n  GlobalContextEventType,\n  GlobalContextEventUnion\n} from '../../models/global-context.model';\n\n/**\n * Configuration constants for the event service.\n */\nconst EVENT_CONFIG = {\n  /** Name of the custom event dispatched on the window object */\n  EVENT_NAME: 'global-context',\n  /** Maximum number of cached event subjects to prevent memory leaks */\n  MAX_CACHED_SUBJECTS: 50\n} as const;\n\n/**\n * GlobalContextEventService manages global context events using the browser's native event system.\n *\n * This service provides a type-safe wrapper around window custom events for global context communication.\n * It maintains event subjects for efficient observable-based event handling while ensuring proper\n * cleanup and memory management.\n *\n * Key features:\n * - Type-safe event emission and subscription\n * - Latest value caching for each event type\n * - Memory-efficient subject management\n * - Integration with browser's native event system\n *\n * @example\n * ```typescript\n * // Emit an event\n * eventService.emit('GLOBAL_CONTEXT_STATE_CHANGE', {\n *   refreshOption: 'live',\n *   isAutoRefreshEnabled: true\n * });\n *\n * // Subscribe to events\n * eventService.on('GLOBAL_CONTEXT_STATE_CHANGE').subscribe(state => {\n *   console.log('State changed:', state);\n * });\n *\n * // Get the latest value\n * const latestState = eventService.getLatestValue('GLOBAL_CONTEXT_STATE_CHANGE');\n * ```\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class GlobalContextEventService {\n  /** Map storing BehaviorSubjects for each event type to cache latest values */\n  private readonly eventSubjects = new Map<\n    GlobalContextEventType,\n    BehaviorSubject<GlobalContextEventRegistry[GlobalContextEventType] | null>\n  >();\n\n  /** Observable stream of all global context events from the window */\n  private readonly events$ = fromEvent<CustomEvent<GlobalContextEventUnion>>(\n    window,\n    EVENT_CONFIG.EVENT_NAME\n  ).pipe(map(event => event.detail));\n\n  /**\n   * Emits a global context event with type-safe payload.\n   *\n   * The event is both stored locally for latest value retrieval and dispatched\n   * as a browser custom event for cross-component communication.\n   *\n   * @param type - The specific event type to emit (must be a valid GlobalContextEventType)\n   * @param payload - Type-safe payload matching the event type requirements\n   *\n   * @throws {Error} When event type is invalid or payload validation fails\n   *\n   * @example\n   * ```typescript\n   * // Emit a state change event\n   * eventService.emit('GLOBAL_CONTEXT_STATE_CHANGE', {\n   *   refreshOption: 'live',\n   *   isAutoRefreshEnabled: true\n   * });\n   *\n   * // Emit a refresh event\n   * eventService.emit('GLOBAL_CONTEXT_REFRESH', {\n   *   dateFrom: '2024-01-01',\n   *   dateTo: '2024-01-02'\n   * });\n   * ```\n   */\n  emit<T extends GlobalContextEventType>(type: T, payload?: GlobalContextEventRegistry[T]): void {\n    const payloadCopy = structuredClone(payload);\n\n    try {\n      this.validateEventType(type);\n\n      // Update the local subject with the new value\n      const subject = this.getOrCreateEventSubject(type);\n      subject.next(payloadCopy ?? null);\n\n      // Dispatch the browser event for cross-component communication\n      this.dispatchBrowserEvent(type, payloadCopy);\n    } catch (error) {\n      console.error(`Failed to emit global context event '${type}':`, error);\n      throw error;\n    }\n  }\n\n  /**\n   * Creates an observable that emits whenever a specific event type occurs.\n   *\n   * The observable filters the global event stream to only emit events of the specified type.\n   * This provides efficient, reactive event handling without manual event listener management.\n   *\n   * @param eventType - The specific event type to observe\n   * @returns Observable that emits payloads of the specified event type\n   *\n   * @throws {Error} When event type is invalid\n   *\n   * @example\n   * ```typescript\n   * // Subscribe to state changes\n   * eventService.on('GLOBAL_CONTEXT_STATE_CHANGE')\n   *   .pipe(takeUntilDestroyed())\n   *   .subscribe(state => {\n   *     console.log('New state:', state);\n   *   });\n   *\n   * // Subscribe to refresh events with filtering\n   * eventService.on('GLOBAL_CONTEXT_REFRESH')\n   *   .pipe(\n   *     filter(data => data?.interval === 'MINUTES'),\n   *     takeUntilDestroyed()\n   *   )\n   *   .subscribe(refreshData => {\n   *     console.log('Minute-based refresh:', refreshData);\n   *   });\n   * ```\n   */\n  on<T extends GlobalContextEventType>(eventType: T): Observable<GlobalContextEventRegistry[T]> {\n    try {\n      this.validateEventType(eventType);\n\n      return this.events$.pipe(\n        filter((event): event is GlobalContextEventUnion => event.type === eventType),\n        map(event => event.payload as GlobalContextEventRegistry[T])\n      );\n    } catch (error) {\n      console.error(`Failed to create observable for event '${eventType}':`, error);\n      throw error;\n    }\n  }\n\n  /**\n   * Retrieves the most recently emitted value for a specific event type.\n   *\n   * This method provides synchronous access to the latest event data without\n   * requiring a subscription. Returns null if no event of the specified type\n   * has been emitted yet.\n   *\n   * @param eventType - The event type to retrieve the latest value for\n   * @returns The latest emitted value or null if none exists\n   *\n   * @throws {Error} When event type is invalid\n   *\n   * @example\n   * ```typescript\n   * // Get the current state\n   * const currentState = eventService.getLatestValue('GLOBAL_CONTEXT_STATE_CHANGE');\n   * if (currentState) {\n   *   console.log('Current refresh option:', currentState.refreshOption);\n   * }\n   *\n   * // Check for latest refresh data\n   * const refreshData = eventService.getLatestValue('GLOBAL_CONTEXT_REFRESH');\n   * if (refreshData?.dateFrom) {\n   *   console.log('Last refresh from:', refreshData.dateFrom);\n   * }\n   * ```\n   */\n  getLatestValue<T extends GlobalContextEventType>(\n    eventType: T\n  ): GlobalContextEventRegistry[T] | null {\n    try {\n      this.validateEventType(eventType);\n\n      const value = this.getOrCreateEventSubject(eventType).getValue();\n      return structuredClone(value);\n    } catch (error) {\n      console.error(`Failed to get latest value for event '${eventType}':`, error);\n      throw error;\n    }\n  }\n\n  /**\n   * Synchronizes dateTimeContext from REFRESH event to STATE_CHANGE event.\n   *\n   * This method ensures that when a REFRESH event contains dateTimeContext data,\n   * it updates the STATE_CHANGE event subject's value directly without emitting a new event.\n   * This keeps the internal state synchronized without triggering listeners.\n   *\n   * @param refreshDateTimeContext - The dateTimeContext from the REFRESH event to sync\n   *\n   * @example\n   * ```typescript\n   * // When a refresh occurs with new dateTimeContext\n   * const refreshData = { dateFrom: '2024-01-01', dateTo: '2024-01-02', interval: 'HOURLY' };\n   * eventService.emit(GLOBAL_CONTEXT_EVENTS.REFRESH, refreshData);\n   *\n   * // Sync it to STATE_CHANGE internal state\n   * eventService.syncRefreshToStateChange(refreshData);\n   * ```\n   */\n  syncRefreshToStateChange(\n    refreshDateTimeContext?: GlobalContextEventRegistry[typeof GLOBAL_CONTEXT_EVENTS.REFRESH]\n  ): void {\n    if (!refreshDateTimeContext) {\n      return;\n    }\n\n    // Only update if we have all required properties for DateTimeContext\n    if (\n      refreshDateTimeContext.dateFrom &&\n      refreshDateTimeContext.dateTo &&\n      refreshDateTimeContext.interval\n    ) {\n      // Get the STATE_CHANGE subject\n      const stateChangeSubject = this.getOrCreateEventSubject(GLOBAL_CONTEXT_EVENTS.STATE_CHANGE);\n      const currentState = stateChangeSubject.getValue() || {};\n\n      // Merge refresh dateTimeContext into current state\n      const updatedState = {\n        ...currentState,\n        dateTimeContext: {\n          dateFrom: refreshDateTimeContext.dateFrom,\n          dateTo: refreshDateTimeContext.dateTo,\n          interval: refreshDateTimeContext.interval\n        }\n      };\n\n      // Update the subject's value directly without emitting an event\n      stateChangeSubject.next(updatedState);\n    }\n  }\n\n  /**\n   * Validates that an event type is not empty or invalid.\n   *\n   * @param eventType - The event type to validate\n   * @throws {Error} When event type is invalid\n   */\n  private validateEventType(eventType: string): void {\n    if (!eventType || typeof eventType !== 'string' || eventType.trim().length === 0) {\n      throw new Error('Event type must be a non-empty string');\n    }\n  }\n\n  /**\n   * Dispatches a browser custom event for cross-component communication.\n   *\n   * @param type - Event type\n   * @param payload - Event payload\n   */\n  private dispatchBrowserEvent<T extends GlobalContextEventType>(\n    type: T,\n    payload?: GlobalContextEventRegistry[T]\n  ): void {\n    const customEvent = new CustomEvent(EVENT_CONFIG.EVENT_NAME, {\n      detail: {\n        type,\n        payload,\n        timestamp: Date.now()\n      }\n    });\n\n    window.dispatchEvent(customEvent);\n  }\n\n  /**\n   * Gets or creates a BehaviorSubject for a specific event type.\n   * Implements memory management by limiting the number of cached subjects.\n   *\n   * @param type - The event type\n   * @returns BehaviorSubject for the event type\n   */\n  private getOrCreateEventSubject<T extends GlobalContextEventType>(\n    type: T\n  ): BehaviorSubject<GlobalContextEventRegistry[T] | null> {\n    if (!this.eventSubjects.has(type)) {\n      // Implement basic memory management\n      this.ensureSubjectCacheLimit();\n\n      const newSubject = new BehaviorSubject<GlobalContextEventRegistry[T] | null>(null);\n      this.eventSubjects.set(type, newSubject as BehaviorSubject<any>);\n    }\n\n    return this.eventSubjects.get(type) as BehaviorSubject<GlobalContextEventRegistry[T] | null>;\n  }\n\n  /**\n   * Ensures the event subject cache doesn't exceed the maximum limit.\n   * Removes the oldest subjects when limit is reached.\n   */\n  private ensureSubjectCacheLimit(): void {\n    if (this.eventSubjects.size >= EVENT_CONFIG.MAX_CACHED_SUBJECTS) {\n      const firstKey = this.eventSubjects.keys().next().value;\n      if (firstKey) {\n        const subject = this.eventSubjects.get(firstKey);\n        if (subject && !subject.closed) {\n          subject.complete();\n        }\n        this.eventSubjects.delete(firstKey);\n      }\n    }\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { REFRESH_OPTION, RefreshOption } from '../../models/auto-refresh.model';\nimport { LinkStatesMap } from '../../models/control-flow.model';\nimport {\n  GLOBAL_CONTEXT_DISPLAY_MODE,\n  GlobalContextDisplayMode,\n  GlobalContextSettings,\n  WidgetControls\n} from '../../models/global-context.model';\n\n/**\n * Standard result interface for all widget settings operations.\n * Used consistently across resolution, toggle, and configuration methods.\n */\nexport interface WidgetSettingsResult {\n  /** Settings for inline (widget-level) controls (new naming) */\n  settings: Partial<GlobalContextSettings>;\n  /** Link states determining dashboard vs inline control visibility */\n  links: LinkStatesMap;\n  /** Settings for dashboard-level controls (new naming) */\n  dashboardControls: Partial<GlobalContextSettings>;\n}\n\n/**\n * Service responsible for managing widget-level control settings and their interaction\n * with dashboard-level controls. Handles the resolution of settings based on display mode,\n * link states, and refresh options.\n *\n * Key responsibilities:\n * - Widget settings resolution for different display modes\n * - Link state management between inline and dashboard controls\n * - Dashboard control calculations based on link states\n * - Settings toggle operations for individual and bulk link changes\n */\n@Injectable({ providedIn: 'root' })\nexport class WidgetControlService {\n  // ========================================\n  // PUBLIC API METHODS\n  // ========================================\n\n  /**\n   * Resolves widget settings for inline controls based on the specified mode and refresh option.\n   * For dashboard mode, calculates the split between inline and dashboard controls.\n   *\n   * @param controls - Widget control configuration containing settings and links\n   * @param mode - Display mode determining which settings to use\n   * @param refreshOption - Refresh mode (live/history) for settings selection\n   * @returns Resolved settings with inline controls, links, and dashboard controls\n   */\n  resolveInlineControlSettings(\n    controls: WidgetControls,\n    mode: GlobalContextDisplayMode,\n    refreshOption: RefreshOption\n  ): WidgetSettingsResult {\n    const baseSettings = this.getInlineSettingsFromWidgetControls(controls, mode, refreshOption);\n    const baseLinks = this.getDefaultLinksFromControls(controls, mode, refreshOption);\n\n    if (mode === GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD) {\n      // Calculate dashboard controls with the merged settings and links\n      const { newSettings: newInlineSettings, dashboardSettings } = this.calculateDashboardSettings(\n        baseSettings,\n        baseLinks\n      );\n      return {\n        settings: newInlineSettings,\n        links: baseLinks,\n        dashboardControls: dashboardSettings\n      };\n    }\n\n    return {\n      settings: baseSettings,\n      links: baseLinks,\n      dashboardControls: {}\n    };\n  }\n\n  /**\n   * Resolves widget settings for configuration controls based on the specified mode and refresh option.\n   * Configuration controls are simpler and don't require dashboard control calculations.\n   *\n   * @param controls - Widget control configuration containing config settings\n   * @param mode - Display mode determining which config settings to use\n   * @param refreshOption - Refresh mode (live/history) for settings selection\n   * @returns Resolved configuration settings with empty links and dashboard controls\n   */\n  resolveConfigControlSettings(\n    controls: WidgetControls,\n    mode: GlobalContextDisplayMode,\n    refreshOption: RefreshOption\n  ): WidgetSettingsResult {\n    const baseSettings = this.getConfigSettingsFromWidgetControls(controls, mode, refreshOption);\n    return {\n      settings: baseSettings,\n      links: {},\n      dashboardControls: {}\n    };\n  }\n\n  /**\n   * Extracts inline settings from widget controls for the specified display mode and refresh option.\n   * Applies fallback logic for invalid refresh options, defaulting to LIVE mode.\n   *\n   * @param controls - Widget control configuration\n   * @param displayMode - Display mode (dashboard, config, view_and_config)\n   * @param refreshOption - Refresh mode, may be invalid and will fallback to LIVE\n   * @returns Inline settings for the specified mode and refresh option\n   */\n  getInlineSettingsFromWidgetControls(\n    controls: WidgetControls,\n    displayMode: GlobalContextDisplayMode,\n    refreshOption: RefreshOption | string\n  ): Partial<GlobalContextSettings> {\n    const validatedRefresh = this.validateRefreshOption(refreshOption);\n    const templateSettings = controls?.settings?.[displayMode]?.[validatedRefresh] || {};\n    return { ...templateSettings };\n  }\n\n  /**\n   * Extracts configuration settings from widget controls for the specified display mode and refresh option.\n   * Applies fallback logic for invalid refresh options, defaulting to LIVE mode.\n   *\n   * @param controls - Widget control configuration\n   * @param displayMode - Display mode (dashboard, config, view_and_config)\n   * @param refreshOption - Refresh mode, may be invalid and will fallback to LIVE\n   * @returns Configuration settings for the specified mode and refresh option\n   */\n  getConfigSettingsFromWidgetControls(\n    controls: WidgetControls,\n    displayMode: GlobalContextDisplayMode,\n    refreshOption: RefreshOption | string\n  ): Partial<GlobalContextSettings> {\n    const validatedRefresh = this.validateRefreshOption(refreshOption);\n    const configSettings = controls?.configSettings?.[displayMode]?.[validatedRefresh] || {};\n    return { ...configSettings };\n  }\n\n  /**\n   * Extracts default link states from widget controls for the specified display mode and refresh option.\n   * Applies fallback logic for invalid refresh options, defaulting to LIVE mode.\n   *\n   * @param controls - Widget control configuration\n   * @param displayMode - Display mode (dashboard, config, view_and_config)\n   * @param refreshOption - Refresh mode, may be invalid and will fallback to LIVE\n   * @returns Default link states for the specified mode and refresh option\n   */\n  getDefaultLinksFromControls(\n    controls: WidgetControls,\n    displayMode: GlobalContextDisplayMode,\n    refreshOption: RefreshOption | string\n  ): LinkStatesMap {\n    const validatedRefresh = this.validateRefreshOption(refreshOption);\n    const defaultLinks = controls?.defaultLinks?.[displayMode]?.[validatedRefresh] || {};\n    return { ...defaultLinks };\n  }\n\n  /**\n   * Toggles a single link state and recalculates the resulting settings and dashboard controls.\n   * When a link is toggled, it affects how controls are distributed between inline and dashboard.\n   *\n   * @param linkKey - The key of the link to toggle\n   * @param currentSettings - Current inline control settings\n   * @param currentLinks - Current link states\n   * @returns Updated settings with toggled link and recalculated dashboard controls\n   */\n  toggleControlLink(\n    linkKey: string,\n    currentSettings: Partial<GlobalContextSettings>,\n    currentLinks: LinkStatesMap\n  ): WidgetSettingsResult {\n    const updatedLinks = { ...currentLinks };\n    updatedLinks[linkKey] = !updatedLinks[linkKey];\n\n    const { newSettings, dashboardSettings } = this.calculateDashboardSettings(\n      currentSettings,\n      updatedLinks\n    );\n\n    return {\n      settings: newSettings,\n      links: updatedLinks,\n      dashboardControls: dashboardSettings\n    };\n  }\n\n  /**\n   * Sets all link states to the specified value and recalculates the resulting settings.\n   * This is used for bulk operations like \"link all\" or \"unlink all\" controls.\n   *\n   * @param state - The state to set for all links (true = linked, false = unlinked)\n   * @param currentSettings - Current inline control settings\n   * @param currentLinks - Current link states\n   * @returns Updated settings with all links set to the specified state\n   */\n  toggleAllControlLinks(\n    state: boolean,\n    currentSettings: Partial<GlobalContextSettings>,\n    currentLinks: LinkStatesMap\n  ): WidgetSettingsResult {\n    const updatedLinks = { ...currentLinks };\n    Object.keys(updatedLinks).forEach(key => {\n      updatedLinks[key] = state;\n    });\n\n    const { newSettings, dashboardSettings } = this.calculateDashboardSettings(\n      currentSettings,\n      updatedLinks\n    );\n\n    return {\n      settings: newSettings,\n      links: updatedLinks,\n      dashboardControls: dashboardSettings\n    };\n  }\n\n  /**\n   * Validates and normalizes a refresh option, providing fallback to LIVE for invalid values.\n   * Handles type coercion and validates against the REFRESH_OPTION enum.\n   *\n   * @param refreshOption - Refresh option to validate (may be string or RefreshOption)\n   * @returns Valid RefreshOption, defaulting to LIVE for invalid inputs\n   */\n  private validateRefreshOption(refreshOption: RefreshOption | string): RefreshOption {\n    return Object.values(REFRESH_OPTION).includes(refreshOption as RefreshOption)\n      ? (refreshOption as RefreshOption)\n      : REFRESH_OPTION.LIVE;\n  }\n\n  /**\n   * Calculates how settings should be split between dashboard and inline controls based on link states.\n   * When a control is linked (true), it appears on the dashboard. When unlinked (false), it appears inline.\n   * This method implements the core business logic for the dashboard/inline control relationship.\n   *\n   * @param settings - Base settings to split between dashboard and inline\n   * @param links - Link states determining where each control should appear\n   * @returns Object containing settings for both inline and dashboard controls\n   */\n  private calculateDashboardSettings(\n    settings: Partial<GlobalContextSettings>,\n    links: LinkStatesMap\n  ): {\n    newSettings: Partial<GlobalContextSettings>;\n    dashboardSettings: Partial<GlobalContextSettings>;\n  } {\n    const inlineSettings = { ...(settings || {}) };\n    const dashboardSettings: Partial<GlobalContextSettings> = {};\n\n    // If links is empty, set all dashboard settings to false\n    if (Object.keys(links ?? {}).length === 0) {\n      if (settings && 'showTimeContext' in settings) dashboardSettings.showTimeContext = false;\n      if (settings && 'showAutoRefresh' in settings) dashboardSettings.showAutoRefresh = false;\n      if (settings && 'showRefresh' in settings) dashboardSettings.showRefresh = false;\n      if (settings && 'showRefreshInterval' in settings)\n        dashboardSettings.showRefreshInterval = false;\n      if (settings && 'showAggregation' in settings) dashboardSettings.showAggregation = false;\n    } else {\n      // Otherwise, set based on links values\n      if (settings && 'showTimeContext' in settings && 'dateTimeContext' in links) {\n        dashboardSettings.showTimeContext = links.dateTimeContext;\n        inlineSettings.showTimeContext = !links.dateTimeContext;\n      }\n      if (settings && 'showAutoRefresh' in settings && 'isAutoRefreshEnabled' in links) {\n        dashboardSettings.showAutoRefresh = links.isAutoRefreshEnabled;\n        inlineSettings.showAutoRefresh = !links.isAutoRefreshEnabled;\n      }\n      if (settings && 'showRefresh' in settings) {\n        dashboardSettings.showRefresh = !settings.showRefresh;\n        inlineSettings.showRefresh = settings.showRefresh;\n      }\n      if (settings && 'showRefreshInterval' in settings && 'isAutoRefreshEnabled' in links) {\n        dashboardSettings.showRefreshInterval =\n          settings.showRefreshInterval && links.isAutoRefreshEnabled;\n        inlineSettings.showRefreshInterval = inlineSettings.showAutoRefresh;\n      }\n      if (settings && 'showAggregation' in settings && 'aggregation' in links) {\n        dashboardSettings.showAggregation = links.aggregation;\n        inlineSettings.showAggregation = !links.aggregation;\n      }\n    }\n\n    return { newSettings: inlineSettings, dashboardSettings };\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { aggregationType } from '@c8y/client';\nimport { type Interval, INTERVALS, type TimeInterval } from '../../models/interval-picker.model';\nimport { DateTimeContextUtil } from '../../utils/date-time-context.util';\n\n@Injectable({ providedIn: 'root' })\nexport class DateTimeContextPickerService {\n  /**\n   * Calculates date time context according to provided interval.\n   *\n   * @param intervalId - Interval id indicating time range\n   * @returns Tuple of [dateFrom, dateTo] where dateTo is current time, or null if interval is invalid\n   *\n   * @example\n   * ```typescript\n   * // Returns [epoch, current date] for 'none' interval\n   * service.getDateTimeContextByInterval('none');\n   *\n   * // Returns [1 hour ago, now] for 'hours' interval\n   * service.getDateTimeContextByInterval('hours');\n   *\n   * // Returns null for invalid intervals\n   * service.getDateTimeContextByInterval('invalid'); // null\n   * ```\n   */\n  getDateTimeContextByInterval(intervalId: TimeInterval): [Date, Date] | null {\n    // Delegate to the central utility\n    return DateTimeContextUtil.dateRangeFromInterval(intervalId);\n  }\n\n  /**\n   * Validates provided param for being selectable Interval id.\n   * @param intervalId Interval id to be validated.\n   * @returns True if provided id is valid, selectable Interval id and false if it's not.\n   */\n  isSelectableInterval(intervalId: Interval['id']): boolean {\n    // Handle type safety - return false for non-string inputs\n    if (typeof intervalId !== 'string') {\n      return false;\n    }\n\n    // 'custom' interval is not selectable\n    if (intervalId === 'custom') {\n      return false;\n    }\n\n    // 'none' interval is selectable (special case)\n    if (intervalId === 'none') {\n      return true;\n    }\n\n    // Check if interval exists in INTERVALS array\n    return INTERVALS.some(({ id }) => id === intervalId);\n  }\n\n  /**\n   * Validates provided date \"from\" and date \"to\":\n   * - if both dates are proper date strings/values\n   * - if provided date from is earlier than date to.\n   * @param stringifiedDateFrom Date \"from\" that should be validated.\n   * @param stringifiedDateTo Date \"to\" that should be validated.\n   * @returns Result of validation of dates range.\n   */\n  isValidDateRange(stringifiedDateFrom: string, stringifiedDateTo: string): boolean {\n    // Delegate to the central utility\n    return DateTimeContextUtil.isValidRange(stringifiedDateFrom, stringifiedDateTo);\n  }\n\n  /**\n   * Validates provided aggregation type.\n   * @param aggregation Aggregation type to be validated.\n   * @returns Result of validation of aggregation.\n   */\n  isValidAggregation(aggregation: aggregationType | null): boolean {\n    // null is a valid aggregation (no aggregation)\n    if (aggregation === null) {\n      return true;\n    }\n\n    // Check if aggregation is one of the valid enum values\n    return Object.values(aggregationType).includes(aggregation);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { aggregationType } from '@c8y/client';\nimport { REFRESH_OPTION, RefreshOption } from '../../models/auto-refresh.model';\nimport { DateTimeContext } from '../../models/date-time-context-picker.model';\nimport { GLOBAL_CONTEXT_DISPLAY_MODE, GlobalContextState } from '../../models/global-context.model';\nimport { GLOBAL_CONTEXT_DEFAULTS } from '../../models/global-context-defaults';\nimport { TIME_INTERVAL, TIME_SPAN_MS, TimeInterval } from '../../models/interval-picker.model';\nimport { DateTimeContextPickerService } from './date-time-context-picker.service';\nimport { DateTimeContextUtil } from '../../utils/date-time-context.util';\n\n/**\n * Legacy widget configuration interface representing the various formats used in older widgets.\n *\n * This interface captures all possible legacy configuration properties that need to be migrated\n * to the new GlobalContextState format. Legacy widgets could store these properties at different\n * nesting levels (root, config, or mapConfig) with varying naming conventions.\n *\n * Note: The field 'canDecoupleGlobalTimeContext' was intentionally excluded from migration logic.\n * This field was used in legacy configurations but is no longer relevant for the new Global Context system.\n */\nexport interface LegacyWidgetConfig {\n  /**\n   * Widget capability declarations from widget definitions.\n   * These indicate which global context features the widget supports,\n   * but don't represent the actual configuration values.\n   */\n  displaySettings?: {\n    /** Whether widget supports global time context feature */\n    globalTimeContext?: boolean;\n    /** Whether widget supports auto-refresh feature */\n    globalAutoRefreshContext?: boolean;\n    /** Whether widget supports realtime updates */\n    globalRealtimeContext?: boolean;\n    /** Whether widget supports data aggregation */\n    globalAggregationContext?: boolean;\n  };\n\n  /**\n   * Actual widget instance configuration determining which features are active.\n   * These take precedence over displaySettings when determining migration behavior.\n   */\n  /** Whether this widget instance uses global time context */\n  widgetInstanceGlobalTimeContext?: boolean;\n  /** Whether this widget instance uses global auto-refresh */\n  widgetInstanceGlobalAutoRefreshContext?: boolean;\n  /** @deprecated Deprecated field not used in migration */\n  canDecoupleGlobalTimeContext?: boolean;\n  /** Whether to display date selection controls in the widget */\n  displayDateSelection?: boolean;\n\n  /** Legacy time configuration properties (multiple formats supported) */\n  /** Date range as array [from, to] - used by some widgets */\n  dateFilter?: string[] | [string, string];\n  /** Date range as array [from, to] - alternative legacy format */\n  date?: string[] | [string, string];\n  /** Start date as ISO string */\n  dateFrom?: string;\n  /** End date as ISO string */\n  dateTo?: string;\n  /** Time interval identifier (e.g., 'hours', 'days', 'none') */\n  interval?: string;\n\n  /** Legacy refresh configuration properties */\n  /** Legacy refresh mode ('interval', 'global-interval', 'none') */\n  refreshOption?: string;\n  /** Whether auto-refresh is enabled */\n  isAutoRefreshEnabled?: boolean;\n  /** Refresh interval in milliseconds */\n  refreshInterval?: number;\n  /** Whether widget is in realtime mode */\n  isRealtime?: boolean;\n  /** Alternative realtime flag used by some widgets */\n  realtime?: boolean;\n\n  /**\n   * Nested configuration objects where widgets might store their settings.\n   * The migration service checks these nested levels to ensure all configuration is captured.\n   */\n  /** Map widget specific configuration */\n  mapConfig?: Record<string, unknown>;\n  /** Generic nested configuration */\n  config?: Record<string, unknown>;\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class WidgetConfigMigrationService {\n  constructor(private dateTimeContextPickerService: DateTimeContextPickerService) {}\n\n  /**\n   * Transforms legacy widget configurations into the standardized GlobalContextState format.\n   *\n   * This migration handles the transition from various legacy configuration formats to the new\n   * unified global context system. It detects which properties need updating and\n   * preserves configurations that are already in the correct format.\n   *\n   * **What is migrated:**\n   * - `displayMode`: Derived from widgetInstanceGlobalTimeContext/AutoRefreshContext flags\n   * - `dateTimeContext`: Normalized from dateFilter, date, dateFrom/dateTo, or interval fields\n   * - `refreshOption`: Converted from legacy 'interval'/'global-interval'/'none' values to LIVE/HISTORY\n   * - `isAutoRefreshEnabled` + `refreshInterval`: Determined from realtime flags and legacy settings\n   * - `aggregation`: Normalized from legacy 'NONE' string to null\n   *\n   *\n   * **Use case:**\n   * Call this on every widget configuration before rendering to ensure compatibility with\n   * the global context system, regardless of when the widget was created or last saved.\n   *\n   * @param config - Widget configuration object that may contain legacy or new format properties.\n   *   Can be any object type, but should contain widget configuration fields.\n   * @returns Configuration with all required GlobalContextState properties, either migrated from\n   *   legacy format or preserved if already valid. Returns input unchanged if null/undefined.\n   *\n   * @example\n   * ```ts\n   * // Legacy config with old format\n   * const legacyConfig = {\n   *   widgetInstanceGlobalTimeContext: true,\n   *   dateFrom: '2024-01-01',\n   *   dateTo: '2024-01-02',\n   *   refreshOption: 'interval'\n   * };\n   *\n   * // After migration\n   * const migrated = migrationService.migrateWidgetConfig(legacyConfig);\n   * // {\n   * //   displayMode: 'dashboard',\n   * //   dateTimeContext: { dateFrom: '2024-01-01T00:00:00.000Z', dateTo: '2024-01-02T00:00:00.000Z', interval: 'custom' },\n   * //   refreshOption: 'live',\n   * //   isAutoRefreshEnabled: true,\n   * //   refreshInterval: 60000,\n   * //   aggregation: null\n   * // }\n   * ```\n   */\n  migrateWidgetConfig<T extends object = object>(config: T): Partial<GlobalContextState> {\n    // Guard: Handle invalid config\n    if (!config) {\n      return config as Partial<GlobalContextState>;\n    }\n\n    // Cast to unknown first, then to our working type\n    const configObj = config as unknown as Record<string, unknown>;\n\n    // Check if already has valid new format (minimal check)\n    const hasValidDisplayMode =\n      typeof configObj.displayMode === 'string' && this.isValidDisplayMode(configObj.displayMode);\n    const hasValidRefreshOption =\n      typeof configObj.refreshOption === 'string' &&\n      this.isValidRefreshOption(configObj.refreshOption);\n\n    // If has basic valid format and no legacy fields needing migration, return as is\n    if (hasValidDisplayMode && hasValidRefreshOption && !this.hasLegacyFields(configObj)) {\n      return config as Partial<GlobalContextState>;\n    }\n\n    // Extract settings from all levels (including nested) for migration decisions\n    const settingsForMigration = this.extractGlobalContextSettings(configObj);\n\n    // Create a flat config without nested objects (to avoid duplication in output)\n    const flatConfig = this.createFlatConfig(configObj);\n\n    // Apply migrations based on the merged settings\n    this.applyGlobalContextProperties(flatConfig, settingsForMigration);\n\n    return flatConfig;\n  }\n\n  /**\n   * Creates a flattened configuration by excluding nested configuration objects.\n   *\n   * Legacy widgets often stored settings in nested objects like `mapConfig` or `config`.\n   * This method creates a copy of the configuration without these nested objects to prevent\n   * duplication in the migrated output - the nested values are extracted and merged separately\n   * by extractGlobalContextSettings().\n   *\n   * @param config - The raw widget configuration potentially containing nested objects\n   * @returns Flattened configuration without mapConfig and config properties\n   *\n   */\n  private createFlatConfig(config: Record<string, unknown>): Partial<GlobalContextState> {\n    const { mapConfig: _mapConfig, config: _nestedConfig, ...flatConfig } = config;\n    return structuredClone(flatConfig) as Partial<GlobalContextState>;\n  }\n\n  /**\n   * Applies or migrates all global context properties to ensure complete configuration.\n   *\n   * This method implements a selective migration strategy:\n   * - Checks which properties are missing or invalid in the current config\n   * - Migrates only the properties that need updating\n   * - Forces full migration when config has NO global context properties at all\n   *\n   * The method ensures that all widgets end up with valid displayMode, dateTimeContext,\n   * refreshOption/isAutoRefreshEnabled/refreshInterval, and aggregation settings.\n   *\n   * @param config - The configuration object to modify (mutated in place)\n   * @param mergedSettings - Combined settings from all config levels used for migration decisions\n   *\n   */\n  private applyGlobalContextProperties(\n    config: Partial<GlobalContextState>,\n    mergedSettings: Record<string, unknown>\n  ): void {\n    // Check if this config has no global context properties at all\n    const hasNoGlobalContext = this.hasNoGlobalContextProperties(config);\n\n    // Check what needs migration\n    const needsDisplayMode = !this.isValidDisplayMode(config.displayMode);\n    const needsDateTimeContext = !config.dateTimeContext;\n    const needsRefreshSettings = this.needsRefreshSettingsMigration(config, mergedSettings);\n    const needsAggregation =\n      (mergedSettings.aggregation as string) === 'NONE' || config.aggregation === undefined;\n\n    // Apply migrations based on needs or if no global context exists\n    if (needsDisplayMode || hasNoGlobalContext) {\n      config.displayMode = this.resolveDisplayMode(mergedSettings);\n    }\n\n    if (needsDateTimeContext || hasNoGlobalContext) {\n      config.dateTimeContext = this.resolveDateTimeContext(mergedSettings);\n    }\n\n    if (needsRefreshSettings || hasNoGlobalContext) {\n      this.applyRefreshSettings(config, mergedSettings);\n    }\n\n    if (needsAggregation || hasNoGlobalContext) {\n      config.aggregation = this.normalizeAggregation(config.aggregation);\n    }\n  }\n\n  /**\n   * Determines if a configuration completely lacks global context properties.\n   *\n   * Used to detect widgets that have never been configured for global context integration.\n   * When true, the migration applies full default configuration rather than selective updates.\n   *\n   * @param config - The configuration to check\n   * @returns true if all global context properties are missing or undefined\n   *\n   */\n  private hasNoGlobalContextProperties(config: Partial<GlobalContextState>): boolean {\n    return (\n      !config.displayMode &&\n      !config.dateTimeContext &&\n      config.refreshOption === undefined &&\n      config.isAutoRefreshEnabled === undefined &&\n      config.refreshInterval === undefined &&\n      config.aggregation === undefined\n    );\n  }\n\n  /**\n   * Applies refresh settings as a cohesive unit to ensure consistency.\n   *\n   * The three refresh properties (refreshOption, isAutoRefreshEnabled, refreshInterval) are\n   * interdependent and must be migrated together to avoid inconsistent states:\n   * - refreshOption determines the mode (LIVE vs HISTORY)\n   * - isAutoRefreshEnabled controls whether auto-refresh is active\n   * - refreshInterval sets the refresh frequency in milliseconds\n   *\n   * Special handling:\n   * - Realtime widgets get LIVE mode with 5-second interval\n   * - Legacy refreshOption values are normalized to LIVE or HISTORY\n   * - Nested config refreshInterval values are prioritized\n   *\n   * @param config - The configuration object to update (mutated in place)\n   * @param mergedSettings - Combined settings from all levels for migration decisions\n   *\n   */\n  private applyRefreshSettings(\n    config: Partial<GlobalContextState>,\n    mergedSettings: Record<string, unknown>\n  ): void {\n    const isRealtime = this.isRealtimeWidget(mergedSettings);\n    const legacyRefreshOption = mergedSettings.refreshOption;\n\n    // Refresh Option\n    if (!this.isValidRefreshOption(config.refreshOption)) {\n      config.refreshOption = this.resolveRefreshOption(\n        isRealtime,\n        typeof legacyRefreshOption === 'string' ? legacyRefreshOption : undefined\n      );\n    }\n\n    // Auto Refresh Enabled\n    if (config.isAutoRefreshEnabled === undefined) {\n      config.isAutoRefreshEnabled = this.resolveAutoRefreshEnabled(\n        isRealtime,\n        typeof legacyRefreshOption === 'string' ? legacyRefreshOption : undefined\n      );\n    }\n\n    // Refresh Interval - always use default 5s interval (ignore stored values)\n    // This ensures old dashboards with custom intervals are migrated to the fixed 5s interval\n    config.refreshInterval = GLOBAL_CONTEXT_DEFAULTS.REFRESH_INTERVAL;\n  }\n\n  /**\n   * Determines the appropriate display mode based on legacy widget configuration.\n   *\n   * Display mode controls how the widget integrates with global context:\n   * - DASHBOARD: Fully controlled by dashboard-level global context\n   * - CONFIG: Widget manages its own settings independently\n   * - VIEW_AND_CONFIG: Widget shows inline controls and can configure itself\n   *\n   * Decision logic priority:\n   * 1. displayDateSelection=true → VIEW_AND_CONFIG (explicit request for date controls)\n   * 2. Both time and refresh are global → DASHBOARD (full integration)\n   * 3. One global, one local → VIEW_AND_CONFIG (partial integration)\n   * 4. One setting defined → DASHBOARD (assume global by default)\n   * 5. Both undefined → CONFIG (widget manages itself)\n   *\n   * @param settings - Merged settings from all config levels\n   * @returns The appropriate display mode for the widget\n   *\n   */\n  private resolveDisplayMode(settings: Record<string, unknown>): GLOBAL_CONTEXT_DISPLAY_MODE {\n    // Special case: Display date selection\n    if (settings.displayDateSelection === true) {\n      return GLOBAL_CONTEXT_DISPLAY_MODE.VIEW_AND_CONFIG;\n    }\n\n    const timeGlobal = settings.widgetInstanceGlobalTimeContext;\n    const refreshGlobal = settings.widgetInstanceGlobalAutoRefreshContext;\n\n    // Explicit configurations\n    if (timeGlobal === true && refreshGlobal === true) {\n      return GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD;\n    }\n\n    if (timeGlobal === true && refreshGlobal === false) {\n      return GLOBAL_CONTEXT_DISPLAY_MODE.VIEW_AND_CONFIG;\n    }\n\n    if (timeGlobal === false && refreshGlobal === true) {\n      return GLOBAL_CONTEXT_DISPLAY_MODE.VIEW_AND_CONFIG;\n    }\n\n    // Single setting defined\n    if (timeGlobal === true && refreshGlobal === undefined) {\n      return GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD;\n    }\n\n    if (timeGlobal === undefined && refreshGlobal === true) {\n      return GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD;\n    }\n\n    // Both undefined - widget manages itself\n    if (timeGlobal === undefined && refreshGlobal === undefined) {\n      return GLOBAL_CONTEXT_DISPLAY_MODE.CONFIG;\n    }\n\n    // Default to CONFIG (widget manages itself)\n    return GLOBAL_CONTEXT_DISPLAY_MODE.CONFIG;\n  }\n\n  /**\n   * Builds date/time context from various legacy configuration formats.\n   *\n   * Legacy widgets stored time configuration in many different ways. This method\n   * normalizes all formats into the new DateTimeContext structure with consistent\n   * ISO date strings and proper interval classification.\n   *\n   * Resolution priority:\n   * 1. interval='none' → Always epoch (1970) to now with CUSTOM interval\n   * 2. Predefined intervals (hours, days, etc.) → Calculate fresh dates based on interval\n   * 3. Legacy date fields → Use provided dates with calculated/custom interval\n   * 4. Widget needs time context → Apply default (last hour)\n   * 5. Fallback → Last hour with HOURS interval\n   *\n   * Special cases:\n   * - interval='none' always means \"all data\" regardless of other date fields\n   * - Predefined intervals recalculate dates to be relative to current time\n   * - Custom date ranges preserve the exact dates provided\n   *\n   * @param settings - Merged settings from all config levels\n   * @returns Complete DateTimeContext with ISO dates and interval\n   *\n   */\n  private resolveDateTimeContext(settings: Record<string, unknown>): DateTimeContext {\n    // Special case: interval \"none\" always means \"all data from 1970 to now\"\n    if (\n      settings.interval &&\n      typeof settings.interval === 'string' &&\n      settings.interval.toLowerCase() === 'none'\n    ) {\n      return {\n        dateFrom: '1970-01-01T00:00:00.000Z', // Always use epoch start\n        dateTo: DateTimeContextUtil.toIso(new Date()), // Always use current time\n        interval: TIME_INTERVAL.CUSTOM\n      };\n    }\n\n    // Check if we have a predefined interval (not custom or none)\n    // For predefined intervals, we should calculate fresh dates based on current time\n    if (\n      settings.interval &&\n      typeof settings.interval === 'string' &&\n      this.isPredefinedInterval(settings.interval)\n    ) {\n      const interval = this.resolveInterval(settings.interval as string);\n      const dateRange = this.dateTimeContextPickerService.getDateTimeContextByInterval(interval);\n\n      return DateTimeContextUtil.ensureIsoContext({\n        dateFrom: dateRange![0],\n        dateTo: dateRange![1],\n        interval\n      });\n    }\n\n    // Try legacy date fields (for custom intervals or when no interval specified)\n    const legacyDates = this.extractLegacyDates(settings);\n    if (legacyDates) {\n      return {\n        dateFrom: legacyDates.dateFrom,\n        dateTo: legacyDates.dateTo,\n        interval: this.calculateInterval(\n          legacyDates.dateFrom,\n          legacyDates.dateTo,\n          typeof settings.interval === 'string' ? settings.interval : undefined\n        )\n      };\n    }\n\n    // Create default context if widget needs it\n    if (this.needsDefaultDateTimeContext(settings)) {\n      const interval = this.resolveInterval(settings.interval as string);\n      const dateRange = this.dateTimeContextPickerService.getDateTimeContextByInterval(interval);\n\n      return DateTimeContextUtil.ensureIsoContext({\n        dateFrom: dateRange![0],\n        dateTo: dateRange![1],\n        interval\n      });\n    }\n\n    // Absolute fallback: last hour\n    return this.getDefaultDateTimeContext();\n  }\n\n  /**\n   * Resolves the refresh option (LIVE or HISTORY) from legacy configuration.\n   *\n   * Maps legacy refresh option values to the new binary system:\n   * - 'interval' or 'global-interval' → LIVE (auto-refresh enabled)\n   * - 'none' → HISTORY (no auto-refresh)\n   * - Realtime widgets with any option → LIVE\n   * - Default → LIVE\n   *\n   * @param isRealtime - Whether the widget is in realtime mode\n   * @param legacyOption - Legacy refreshOption value if present\n   * @returns LIVE or HISTORY refresh option\n   *\n   */\n  private resolveRefreshOption(isRealtime: boolean, legacyOption?: string): RefreshOption {\n    // Only use LIVE for realtime if there's an actual legacy option indicating it\n    if (isRealtime && legacyOption) {\n      return REFRESH_OPTION.LIVE;\n    }\n\n    // Handle legacy refresh option\n    const normalizedOption = legacyOption?.toLowerCase();\n    switch (normalizedOption) {\n      case 'global-interval':\n      case 'interval':\n        return REFRESH_OPTION.LIVE;\n      case 'none':\n        return REFRESH_OPTION.HISTORY;\n      default:\n        // Default to LIVE for all widgets (including interval='none')\n        return REFRESH_OPTION.LIVE;\n    }\n  }\n\n  /**\n   * Resolves whether auto-refresh should be enabled based on widget configuration.\n   *\n   * Determines the initial state of the auto-refresh toggle:\n   * - Realtime widgets → always enabled\n   * - refreshOption='none' → disabled\n   * - All other cases → enabled (including interval='none')\n   *\n   * @param isRealtime - Whether the widget is in realtime mode\n   * @param legacyOption - Legacy refreshOption value if present\n   * @returns true if auto-refresh should be enabled\n   *\n   */\n  private resolveAutoRefreshEnabled(isRealtime: boolean, legacyOption?: string): boolean {\n    if (isRealtime) {\n      return true;\n    }\n\n    // Only disable auto-refresh if refreshOption is explicitly 'none'\n    if (legacyOption && legacyOption.toLowerCase() === 'none') {\n      return false;\n    }\n\n    return true; // Default to enabled (including interval='none')\n  }\n\n  /**\n   * Detects if a widget is configured for realtime operation.\n   *\n   * Realtime widgets continuously update with live data and require special handling\n   * with shorter refresh intervals (5 seconds) and LIVE mode.\n   *\n   * Detection criteria:\n   * - Explicit realtime/isRealtime flags\n   * - globalRealtimeContext capability + active refresh option\n   *\n   * @param settings - Widget settings to check\n   * @returns true if widget should operate in realtime mode\n   *\n   */\n  private isRealtimeWidget(settings: Record<string, unknown>): boolean {\n    // Consider explicit realtime settings\n    if (settings.realtime === true || settings.isRealtime === true) {\n      return true;\n    }\n\n    // Also consider display settings if there's a refresh option indicating active refresh\n    const displaySettings = settings.displaySettings as Record<string, unknown> | undefined;\n    if (\n      displaySettings?.globalRealtimeContext === true &&\n      typeof settings.refreshOption === 'string' &&\n      ['interval', 'global-interval'].includes(settings.refreshOption)\n    ) {\n      return true;\n    }\n\n    return false;\n  }\n\n  /**\n   * Extracts date range from various legacy property formats.\n   *\n   * Legacy widgets stored dates in multiple ways. This method checks all possible\n   * locations and returns the first valid date range found.\n   *\n   * Priority order:\n   * 1. dateFrom + dateTo (most explicit)\n   * 2. dateFilter array\n   * 3. date array\n   *\n   * @param settings - Widget settings containing potential date properties\n   * @returns Date range object or null if no valid dates found\n   *\n   */\n  private extractLegacyDates(\n    settings: Record<string, unknown>\n  ): { dateFrom: string; dateTo: string } | null {\n    // Priority 1: dateFrom/dateTo\n    if (typeof settings.dateFrom === 'string' && typeof settings.dateTo === 'string') {\n      return { dateFrom: settings.dateFrom, dateTo: settings.dateTo };\n    }\n\n    // Priority 2: dateFilter array\n    if (Array.isArray(settings.dateFilter) && settings.dateFilter.length >= 2) {\n      return { dateFrom: settings.dateFilter[0], dateTo: settings.dateFilter[1] };\n    }\n\n    // Priority 3: date array\n    if (Array.isArray(settings.date) && settings.date.length >= 2) {\n      return { dateFrom: settings.date[0], dateTo: settings.date[1] };\n    }\n\n    return null;\n  }\n\n  /**\n   * Calculates the appropriate time interval based on date range duration.\n   *\n   * Uses the provided interval if valid, otherwise calculates from the date range span:\n   * - ≤1 minute → MINUTES\n   * - ≤1 hour → HOURS\n   * - ≤1 day → DAYS\n   * - ≤1 week → WEEKS\n   * - ≤1 month → MONTHS\n   * - >1 month → CUSTOM\n   *\n   * Special case: interval='none' → CUSTOM\n   *\n   * @param dateFrom - Start date as ISO string\n   * @param dateTo - End date as ISO string\n   * @param providedInterval - Optional interval from legacy config\n   * @returns Appropriate TimeInterval enum value\n   *\n   */\n  private calculateInterval(\n    dateFrom: string,\n    dateTo: string,\n    providedInterval?: string\n  ): TimeInterval {\n    // Use provided interval if valid\n    if (providedInterval) {\n      // Handle case-insensitive 'none' variations\n      if (providedInterval.toLowerCase() === 'none') {\n        return TIME_INTERVAL.CUSTOM;\n      }\n\n      if (Object.values(TIME_INTERVAL).includes(providedInterval as TimeInterval)) {\n        return providedInterval as TimeInterval;\n      }\n    }\n\n    // Calculate from date range\n    try {\n      const from = new Date(dateFrom);\n      const to = new Date(dateTo);\n      const diffMs = to.getTime() - from.getTime();\n\n      if (diffMs <= TIME_SPAN_MS.MINUTE) return TIME_INTERVAL.MINUTES;\n      if (diffMs <= TIME_SPAN_MS.HOUR) return TIME_INTERVAL.HOURS;\n      if (diffMs <= TIME_SPAN_MS.DAY) return TIME_INTERVAL.DAYS;\n      if (diffMs <= TIME_SPAN_MS.WEEK) return TIME_INTERVAL.WEEKS;\n      if (diffMs <= TIME_SPAN_MS.MONTH) return TIME_INTERVAL.MONTHS;\n\n      return TIME_INTERVAL.CUSTOM;\n    } catch {\n      return TIME_INTERVAL.CUSTOM;\n    }\n  }\n\n  /**\n   * Resolves and validates a time interval string.\n   *\n   * @param interval - Interval string to validate\n   * @returns Valid TimeInterval or HOURS as default\n   *\n   */\n  private resolveInterval(interval?: string): TimeInterval {\n    if (interval && this.dateTimeContextPickerService.isSelectableInterval(interval)) {\n      return interval as TimeInterval;\n    }\n    return TIME_INTERVAL.HOURS;\n  }\n\n  /**\n   * Normalizes legacy aggregation values to the new format.\n   *\n   * Converts legacy 'NONE' string to null (meaning no aggregation).\n   *\n   * @param value - Legacy aggregation value\n   * @returns Normalized aggregationType or null\n   *\n   */\n  private normalizeAggregation(value?: string | aggregationType | null): aggregationType | null {\n    if (value === 'NONE' || value === undefined) {\n      return null;\n    }\n    return value as aggregationType;\n  }\n\n  /**\n   * Checks if an interval is predefined (relative to current time) rather than custom.\n   *\n   * Predefined intervals (hours, days, etc.) are recalculated relative to current time\n   * during migration, while custom intervals preserve their exact date ranges.\n   *\n   * @param interval - Interval string to check\n   * @returns true if interval is predefined (not CUSTOM or 'none')\n   *\n   */\n  private isPredefinedInterval(interval: string): boolean {\n    const predefinedIntervals: string[] = [\n      TIME_INTERVAL.MINUTES,\n      TIME_INTERVAL.HOURS,\n      TIME_INTERVAL.DAYS,\n      TIME_INTERVAL.WEEKS,\n      TIME_INTERVAL.MONTHS\n    ];\n    return predefinedIntervals.includes(interval);\n  }\n\n  /**\n   * Determines if a widget requires a default date/time context to be generated.\n   *\n   * Returns true when the widget has time-related settings but no explicit date values,\n   * indicating it expects time context but didn't provide specific dates.\n   *\n   * @param settings - Widget settings to evaluate\n   * @returns true if default date/time context should be applied\n   *\n   */\n  private needsDefaultDateTimeContext(settings: Record<string, unknown>): boolean {\n    const displaySettings = settings.displaySettings as Record<string, unknown> | undefined;\n    const hasTimeSettings = !!(\n      settings.displayDateSelection ||\n      settings.widgetInstanceGlobalTimeContext !== undefined ||\n      displaySettings?.globalTimeContext ||\n      settings.interval\n    );\n\n    const hasExplicitDates = !!(\n      (settings.dateFrom && settings.dateTo) ||\n      settings.dateFilter ||\n      settings.date\n    );\n\n    return hasTimeSettings && !hasExplicitDates;\n  }\n\n  /**\n   * Creates a default date/time context for widgets without explicit time configuration.\n   *\n   * Returns the last hour as a safe default that works for most widgets.\n   *\n   * @returns DateTimeContext configured for the last hour\n   *\n   */\n  private getDefaultDateTimeContext(): DateTimeContext {\n    const interval = TIME_INTERVAL.HOURS;\n    const dateRange = this.dateTimeContextPickerService.getDateTimeContextByInterval(interval);\n\n    return DateTimeContextUtil.ensureIsoContext({\n      dateFrom: dateRange![0],\n      dateTo: dateRange![1],\n      interval\n    });\n  }\n\n  /**\n   * Detects if a configuration contains legacy fields requiring migration.\n   *\n   * Recursively checks for legacy date fields, refresh options, aggregation values,\n   * and nested configurations that need updating.\n   *\n   * @param config - Configuration object to check\n   * @returns true if any legacy fields are found\n   *\n   */\n  private hasLegacyFields(config: Record<string, unknown>): boolean {\n    // Check for legacy date fields\n    if (\n      config.dateFilter ||\n      config.date ||\n      (config.dateFrom && config.dateTo && !config.dateTimeContext)\n    ) {\n      return true;\n    }\n\n    // Check for legacy refresh options (case-insensitive)\n    if (\n      typeof config.refreshOption === 'string' &&\n      ['global-interval', 'interval', 'none'].includes(config.refreshOption.toLowerCase())\n    ) {\n      return true;\n    }\n\n    // Check for legacy aggregation\n    if (config.aggregation === 'NONE') {\n      return true;\n    }\n\n    // Check nested configs\n    if (\n      config.mapConfig &&\n      typeof config.mapConfig === 'object' &&\n      this.hasLegacyFields(config.mapConfig as Record<string, unknown>)\n    ) {\n      return true;\n    }\n\n    if (\n      config.config &&\n      typeof config.config === 'object' &&\n      this.hasLegacyFields(config.config as Record<string, unknown>)\n    ) {\n      return true;\n    }\n\n    return false;\n  }\n\n  /**\n   * Check if widget needs refresh settings migration.\n   */\n  private needsRefreshSettingsMigration(\n    config: Partial<GlobalContextState>,\n    settings: Record<string, unknown>\n  ): boolean {\n    // Already has valid refresh option\n    if (this.isValidRefreshOption(config.refreshOption)) {\n      // But check if realtime needs special handling\n      const isRealtime = this.isRealtimeWidget(settings);\n      if (\n        isRealtime &&\n        (config.refreshInterval === undefined || config.isAutoRefreshEnabled === undefined)\n      ) {\n        return true;\n      }\n      return false;\n    }\n\n    // Has legacy refresh option or undefined\n    return true;\n  }\n\n  /**\n   * Validates if a value is a recognized display mode.\n   *\n   * @param value - Value to validate\n   * @returns true if value is a valid GLOBAL_CONTEXT_DISPLAY_MODE\n   *\n   */\n  private isValidDisplayMode(value?: string): boolean {\n    return (\n      value === GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD ||\n      value === GLOBAL_CONTEXT_DISPLAY_MODE.CONFIG ||\n      value === GLOBAL_CONTEXT_DISPLAY_MODE.VIEW_AND_CONFIG\n    );\n  }\n\n  /**\n   * Validates if a value is a recognized refresh option.\n   *\n   * @param value - Value to validate\n   * @returns true if value is LIVE or HISTORY\n   *\n   */\n  private isValidRefreshOption(value?: string): boolean {\n    return value === REFRESH_OPTION.LIVE || value === REFRESH_OPTION.HISTORY;\n  }\n\n  /**\n   * Extracts and merges global context settings from all configuration levels.\n   *\n   * Legacy widgets stored settings at different nesting levels (root, config, mapConfig).\n   * This method extracts relevant settings from all levels and merges them with proper\n   * precedence to ensure nothing is missed during migration.\n   *\n   * Precedence order (highest to lowest):\n   * 1. mapConfig (most specific)\n   * 2. config (nested level)\n   * 3. root level (main config)\n   *\n   * @param config - Full widget configuration with potential nesting\n   * @returns Merged settings object containing all relevant properties\n   *\n   */\n  private extractGlobalContextSettings(config: Record<string, unknown>): Record<string, unknown> {\n    const mainLevel = this.extractRelevantSettings(config);\n    const configLevel =\n      config.config && typeof config.config === 'object'\n        ? this.extractRelevantSettings(config.config as Record<string, unknown>)\n        : {};\n    const mapConfigLevel =\n      config.mapConfig && typeof config.mapConfig === 'object'\n        ? this.extractRelevantSettings(config.mapConfig as Record<string, unknown>)\n        : {};\n\n    // Merge with precedence\n    return {\n      ...mainLevel,\n      ...configLevel,\n      ...mapConfigLevel\n    };\n  }\n\n  /**\n   * Filters a configuration object to include only global context relevant properties.\n   *\n   * Reduces noise by extracting only the properties needed for migration decisions,\n   * ignoring widget-specific configuration that doesn't affect global context.\n   *\n   * @param obj - Configuration object to filter\n   * @returns Object containing only relevant properties\n   *\n   */\n  private extractRelevantSettings(obj: Record<string, unknown>): Record<string, unknown> {\n    const relevantKeys = [\n      'displaySettings',\n      'widgetInstanceGlobalTimeContext',\n      'widgetInstanceGlobalAutoRefreshContext',\n      'dateFilter',\n      'date',\n      'dateFrom',\n      'dateTo',\n      'refreshOption',\n      'refreshInterval',\n      'displayDateSelection',\n      'isAutoRefreshEnabled',\n      'isRealtime',\n      'realtime',\n      'interval',\n      'aggregation'\n    ];\n\n    return Object.fromEntries(\n      relevantKeys.filter(key => obj[key] !== undefined).map(key => [key, obj[key]])\n    );\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { aggregationType } from '@c8y/client';\nimport { Interval } from '../../models/interval-picker.model';\nimport { DateTimeContextPickerService } from './date-time-context-picker.service';\n\n/**\n * Service responsible for validating global context parameters.\n *\n * This service centralizes all validation logic for global context parameters,\n * including intervals, aggregations, date ranges, and boolean values.\n * It provides a single source of truth for validation rules across the application.\n *\n * @example\n * ```typescript\n * constructor(private validationService: GlobalContextValidationService) {}\n *\n * const isValid = this.validationService.isValidInterval('HOURS');\n * const dateRangeValid = this.validationService.isValidDateRange('2024-01-01', '2024-01-02');\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class GlobalContextValidationService {\n  private dateTimeContextPickerService = inject(DateTimeContextPickerService);\n\n  /**\n   * Validates if the provided interval is selectable and supported.\n   *\n   * @param interval - The interval to validate\n   * @returns True if the interval is valid and selectable, false otherwise\n   *\n   * @example\n   * ```typescript\n   * const isValid = validationService.isValidInterval('HOURS'); // true\n   * const isInvalid = validationService.isValidInterval('INVALID'); // false\n   * ```\n   */\n  isValidInterval(interval: string | unknown): boolean {\n    return (\n      typeof interval === 'string' &&\n      this.dateTimeContextPickerService.isSelectableInterval(interval as Interval['id'])\n    );\n  }\n\n  /**\n   * Validates if the provided aggregation type is supported.\n   *\n   * @param aggregation - The aggregation type to validate\n   * @returns True if the aggregation is valid, false otherwise\n   *\n   * @example\n   * ```typescript\n   * const isValid = validationService.isValidAggregation(aggregationType.HOURLY); // true\n   * const isInvalid = validationService.isValidAggregation('INVALID' as any); // false\n   * ```\n   */\n  isValidAggregation(aggregation: string | unknown): boolean {\n    return (\n      typeof aggregation === 'string' &&\n      this.dateTimeContextPickerService.isValidAggregation(aggregation as aggregationType)\n    );\n  }\n\n  /**\n   * Validates if the provided date range is valid.\n   *\n   * @param dateFrom - The start date of the range\n   * @param dateTo - The end date of the range\n   * @returns True if the date range is valid, false otherwise\n   *\n   * @example\n   * ```typescript\n   * const isValid = validationService.isValidDateRange('2024-01-01', '2024-01-02'); // true\n   * const isInvalid = validationService.isValidDateRange('invalid', '2024-01-02'); // false\n   * ```\n   */\n  isValidDateRange(dateFrom: string, dateTo: string): boolean {\n    return this.dateTimeContextPickerService.isValidDateRange(dateFrom, dateTo);\n  }\n\n  /**\n   * Parses a string value to boolean or undefined.\n   *\n   * Only accepts the exact strings 'true' and 'false'. All other values,\n   * including different cases, whitespace, or non-string types return undefined.\n   *\n   * @param value - The value to parse\n   * @returns true for 'true', false for 'false', undefined for all other values\n   *\n   * @example\n   * ```typescript\n   * const result1 = validationService.parseBoolean('true');    // true\n   * const result2 = validationService.parseBoolean('false');   // false\n   * const result3 = validationService.parseBoolean('True');    // undefined\n   * const result4 = validationService.parseBoolean(null);      // undefined\n   * ```\n   */\n  parseBoolean(value: string | unknown): boolean | undefined {\n    if (typeof value !== 'string') return undefined;\n\n    const map: Record<string, boolean> = {\n      true: true,\n      false: false\n    };\n\n    return map[value] ?? undefined;\n  }\n\n  /**\n   * Validates multiple parameters at once and returns detailed results.\n   *\n   * @param params - Object containing parameters to validate\n   * @returns Validation results for each parameter\n   *\n   * @example\n   * ```typescript\n   * const results = validationService.validateParameters({\n   *   interval: 'HOURS',\n   *   aggregation: aggregationType.HOURLY,\n   *   autoRefresh: 'true'\n   * });\n   * ```\n   */\n  validateParameters(params: {\n    interval?: string | unknown;\n    aggregation?: string | unknown;\n    dateFrom?: string | null;\n    dateTo?: string | null;\n    autoRefresh?: string | unknown;\n  }): {\n    interval: boolean;\n    aggregation: boolean;\n    dateRange: boolean;\n    autoRefresh: boolean | undefined;\n  } {\n    return {\n      interval: params.interval ? this.isValidInterval(params.interval) : false,\n      aggregation: params.aggregation ? this.isValidAggregation(params.aggregation) : false,\n      dateRange:\n        params.dateFrom && params.dateTo\n          ? this.isValidDateRange(params.dateFrom, params.dateTo)\n          : false,\n      autoRefresh: params.autoRefresh ? this.parseBoolean(params.autoRefresh) : undefined\n    };\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { aggregationType } from '@c8y/client';\nimport { AggregationState } from '../../models/aggregation.model';\nimport { TIME_SPAN_MS } from '../../models/interval-picker.model';\n\n/**\n * AggregationValidationService handles the validation of time ranges against\n * aggregation type requirements in the global context system.\n *\n * This service determines which aggregation types (MINUTELY, HOURLY, DAILY) are valid\n * for a given time range based on predefined business rules. It provides the core\n * validation logic that determines UI state and aggregation availability.\n *\n * Key responsibilities:\n * - Validate time ranges against minimum aggregation requirements\n * - Calculate time range durations in milliseconds\n * - Transform validation results into UI-friendly disabled state maps\n * - Provide consistent validation logic across the application\n *\n * Validation Rules:\n * - MINUTELY: Disabled for time ranges <= 1 minute\n * - HOURLY: Disabled for time ranges <= 1 hour\n * - DAILY: Disabled for time ranges <= 1 day\n *\n * @example\n * ```typescript\n * const validationService = inject(AggregationValidationService);\n *\n * // Validate a 2-hour time range\n * const dateRange: [Date, Date] = [\n *   new Date('2024-01-01T10:00:00Z'),\n *   new Date('2024-01-01T12:00:00Z')\n * ];\n *\n * const disabledAggregations = validationService.getDisabledAggregations(dateRange);\n * console.log(disabledAggregations);\n * // { DAILY: true, HOURLY: false, MINUTELY: false }\n *\n * // Check if specific aggregation is valid\n * const isHourlyValid = validationService.isAggregationValid(dateRange, aggregationType.HOURLY);\n * console.log(isHourlyValid); // true (2 hours > 1 hour requirement)\n * ```\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class AggregationValidationService {\n  /**\n   * Determines which aggregation types should be disabled for a given time range.\n   *\n   * This method validates the time range against all aggregation type requirements\n   * and returns a map indicating which aggregations should be disabled in the UI.\n   *\n   * @param dateRange - Tuple of [dateFrom, dateTo] defining the time range\n   * @returns Map of aggregation types to their disabled boolean state\n   *\n   * @example\n   * ```typescript\n   * const shortRange: [Date, Date] = [\n   *   new Date('2024-01-01T12:00:00Z'),\n   *   new Date('2024-01-01T12:30:00Z') // 30 minutes\n   * ];\n   *\n   * const disabled = validationService.getDisabledAggregations(shortRange);\n   * // { DAILY: true, HOURLY: true, MINUTELY: false }\n   * ```\n   */\n  getDisabledAggregations([dateFrom, dateTo]: [Date, Date]): Partial<\n    Record<aggregationType, boolean>\n  > {\n    const timeRangeValidations = this.validateTimeRanges([dateFrom, dateTo]);\n    return this.transformValidationsToDisabledMap(timeRangeValidations);\n  }\n\n  /**\n   * Checks if a specific aggregation type is valid for the given time range.\n   *\n   * This method provides a convenient way to check if a single aggregation type\n   * meets the minimum time range requirements without needing to validate all types.\n   *\n   * @param dateRange - Tuple of [dateFrom, dateTo] defining the time range\n   * @param aggregation - The aggregation type to validate\n   * @returns True if the aggregation is valid for the time range, false if disabled\n   *\n   * @example\n   * ```typescript\n   * const oneHourRange: [Date, Date] = [\n   *   new Date('2024-01-01T12:00:00Z'),\n   *   new Date('2024-01-01T13:00:00Z')\n   * ];\n   *\n   * const isMinutelyValid = validationService.isAggregationValid(oneHourRange, aggregationType.MINUTELY);\n   * // true (1 hour > 1 minute requirement)\n   *\n   * const isDailyValid = validationService.isAggregationValid(oneHourRange, aggregationType.DAILY);\n   * // false (1 hour <= 1 day requirement)\n   * ```\n   */\n  isAggregationValid([dateFrom, dateTo]: [Date, Date], aggregation: aggregationType): boolean {\n    const timeRangeInMs = this.getTimeRangeInMs(dateFrom, dateTo);\n\n    switch (aggregation) {\n      case aggregationType.DAILY:\n        return timeRangeInMs > TIME_SPAN_MS.DAY;\n      case aggregationType.HOURLY:\n        return timeRangeInMs > TIME_SPAN_MS.HOUR;\n      case aggregationType.MINUTELY:\n        return timeRangeInMs > TIME_SPAN_MS.MINUTE;\n      default:\n        return false;\n    }\n  }\n\n  /**\n   * Calculates the time range duration in milliseconds.\n   *\n   * This method provides a standardized way to calculate time range durations\n   * that can be used for validation and threshold comparisons.\n   *\n   * @param dateFrom - Start date of the range\n   * @param dateTo - End date of the range\n   * @returns Duration in milliseconds between the two dates\n   *\n   * @example\n   * ```typescript\n   * const duration = validationService.getTimeRangeInMs(\n   *   new Date('2024-01-01T10:00:00Z'),\n   *   new Date('2024-01-01T12:00:00Z')\n   * );\n   * console.log(duration); // 7200000 (2 hours in milliseconds)\n   * ```\n   */\n  getTimeRangeInMs(dateFrom: Date, dateTo: Date): number {\n    // Normalize dates to remove milliseconds for consistent comparisons\n    // This prevents issues where date pickers might strip milliseconds inconsistently\n    const normalizedFrom = new Date(dateFrom);\n    normalizedFrom.setMilliseconds(0);\n\n    const normalizedTo = new Date(dateTo);\n    normalizedTo.setMilliseconds(0);\n\n    return normalizedTo.valueOf() - normalizedFrom.valueOf();\n  }\n\n  /**\n   * Validates time ranges against all aggregation type requirements.\n   *\n   * Determines which aggregation types should be disabled based on the time range duration.\n   * Each aggregation type has a minimum time range requirement to be meaningful.\n   *\n   * Validation Logic:\n   * - DAILY: Disabled if time range <= 1 day\n   * - HOURLY: Disabled if time range <= 1 hour\n   * - MINUTELY: Disabled if time range <= 1 minute\n   *\n   * @param dateRange - Tuple of [dateFrom, dateTo] to validate\n   * @returns Array of aggregation states with their disabled status\n   */\n  private validateTimeRanges([dateFrom, dateTo]: [Date, Date]): AggregationState[] {\n    const timeRangeInMs = this.getTimeRangeInMs(dateFrom, dateTo);\n\n    return [\n      {\n        aggregationType: aggregationType.DAILY,\n        isDisabled: timeRangeInMs <= TIME_SPAN_MS.DAY\n      },\n      {\n        aggregationType: aggregationType.HOURLY,\n        isDisabled: timeRangeInMs <= TIME_SPAN_MS.HOUR\n      },\n      {\n        aggregationType: aggregationType.MINUTELY,\n        isDisabled: timeRangeInMs <= TIME_SPAN_MS.MINUTE\n      }\n    ];\n  }\n\n  /**\n   * Converts aggregation state array to a disabled aggregations map.\n   *\n   * Transforms the validation results into a map structure that indicates\n   * which aggregation types should be disabled in the UI.\n   *\n   * @param timeRangeValidations - Array of aggregation states from validation\n   * @returns Map of aggregation types to their disabled boolean state\n   */\n  private transformValidationsToDisabledMap(\n    timeRangeValidations: AggregationState[]\n  ): Partial<Record<aggregationType, boolean>> {\n    return timeRangeValidations.reduce(\n      (acc, { aggregationType, isDisabled }) => ({\n        ...acc,\n        [aggregationType]: isDisabled\n      }),\n      {}\n    );\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { aggregationType } from '@c8y/client';\nimport { AGGREGATION_LIMITS } from '../../models/aggregation.model';\nimport { AggregationValidationService } from './aggregation-validation.service';\n\n/**\n * Interface defining the result of aggregation calculation.\n * Contains both the selected aggregation and information about which aggregations are disabled.\n */\nexport interface AggregationCalculationResult {\n  /** The selected aggregation type or null if no aggregation is selected */\n  readonly selectedAggregation: aggregationType | null;\n  /** Map of aggregation types to their disabled state */\n  readonly disabledAggregations: Partial<Record<aggregationType, boolean>>;\n}\n\n/**\n * AggregationPickerService handles the logic for selecting appropriate data aggregations\n * based on time ranges and user preferences in the global context system.\n *\n * This service focuses on aggregation selection and automatic fallback logic when requested\n * aggregations are not appropriate for the data range. It delegates validation concerns\n * to the AggregationValidationService for better separation of concerns.\n *\n * Key responsibilities:\n * - Calculate optimal aggregation selection for given time ranges and preferences\n * - Handle automatic aggregation selection based on time range thresholds\n * - Provide fallback logic when requested aggregations are invalid\n * - Combine validation results with selection logic for complete aggregation calculation\n *\n * Auto-selection Logic:\n * - Uses AGGREGATION_LIMITS thresholds (10min, 1day, 4days) for fallback selection\n * - Delegates validation to AggregationValidationService\n * - Returns comprehensive results including both selection and validation state\n *\n * @example\n * ```typescript\n * const service = inject(AggregationPickerService);\n *\n * // Calculate aggregation for a 2-day time range\n * const dateRange: [Date, Date] = [\n *   new Date('2024-01-01T00:00:00Z'),\n *   new Date('2024-01-03T00:00:00Z')\n * ];\n *\n * const result = service.calculateAggregation(dateRange, aggregationType.HOURLY);\n * console.log(result.selectedAggregation); // 'HOURLY' (valid for 2-day range)\n * console.log(result.disabledAggregations); // { DAILY: true, HOURLY: false, MINUTELY: false }\n *\n * // Auto-selection when requested aggregation is disabled\n * const shortRange: [Date, Date] = [\n *   new Date('2024-01-01T12:00:00Z'),\n *   new Date('2024-01-01T12:30:00Z') // 30 minutes\n * ];\n *\n * const autoResult = service.calculateAggregation(shortRange, aggregationType.DAILY);\n * // DAILY is disabled for 30min range, so falls back to MINUTELY\n * console.log(autoResult.selectedAggregation); // 'MINUTELY'\n * ```\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class AggregationPickerService {\n  /** Service for validating time ranges against aggregation requirements */\n  private readonly validationService = inject(AggregationValidationService);\n\n  /**\n   * Calculates the appropriate aggregation for a given time range and user preference.\n   *\n   * This method validates the time range against aggregation requirements and determines\n   * which aggregations should be disabled. If the requested aggregation is not valid\n   * for the time range, it automatically selects the most appropriate alternative.\n   *\n   * Validation Rules:\n   * - MINUTELY: Requires time range > 1 minute\n   * - HOURLY: Requires time range > 1 hour\n   * - DAILY: Requires time range > 1 day\n   *\n   * Auto-selection Thresholds (when fallback is needed):\n   * - >= 4 days: Selects DAILY aggregation\n   * - >= 1 day: Selects HOURLY aggregation\n   * - >= 10 minutes: Selects MINUTELY aggregation\n   * - < 10 minutes: Returns null (no aggregation)\n   *\n   * @param dateRange - Tuple of [dateFrom, dateTo] defining the time range\n   * @param requestedAggregation - User's preferred aggregation type or null for no preference\n   * @returns Object containing the selected aggregation and disabled aggregation states\n   *\n   * @example\n   * ```typescript\n   * // Valid aggregation request\n   * const result = service.calculateAggregation(\n   *   [new Date('2024-01-01'), new Date('2024-01-03')], // 2 days\n   *   aggregationType.HOURLY\n   * );\n   * // result.selectedAggregation === 'HOURLY' (valid for 2-day range)\n   *\n   * // Invalid aggregation request with fallback\n   * const fallbackResult = service.calculateAggregation(\n   *   [new Date('2024-01-01T12:00'), new Date('2024-01-01T12:30')], // 30 minutes\n   *   aggregationType.DAILY // Not valid for 30min range\n   * );\n   * // fallbackResult.selectedAggregation === 'MINUTELY' (auto-selected)\n   *\n   * // Explicit null request\n   * const nullResult = service.calculateAggregation(\n   *   [new Date('2024-01-01'), new Date('2024-01-03')],\n   *   null\n   * );\n   * // nullResult.selectedAggregation === null (as requested)\n   * ```\n   */\n  calculateAggregation(\n    [dateFrom, dateTo]: [Date, Date],\n    requestedAggregation: aggregationType | null\n  ): AggregationCalculationResult {\n    const disabledAggregations = this.validationService.getDisabledAggregations([dateFrom, dateTo]);\n    const timeRangeInMs = this.validationService.getTimeRangeInMs(dateFrom, dateTo);\n\n    const isRequestedAggregationValid =\n      requestedAggregation === null || !disabledAggregations[requestedAggregation];\n\n    const selectedAggregation = isRequestedAggregationValid\n      ? requestedAggregation\n      : this.determineAggregation(timeRangeInMs);\n\n    return {\n      selectedAggregation,\n      disabledAggregations\n    };\n  }\n\n  /**\n   * Determines the most appropriate aggregation type based on time range duration.\n   *\n   * Uses predefined thresholds to automatically select the best aggregation type\n   * when the requested aggregation is not valid for the time range. This method\n   * implements the fallback logic that ensures users always get meaningful aggregations.\n   *\n   * Selection Logic (based on AGGREGATION_LIMITS):\n   * - >= 4 days (DAILY_LIMIT): Select DAILY aggregation\n   * - >= 1 day (HOURLY_LIMIT): Select HOURLY aggregation\n   * - >= 10 minutes (MINUTELY_LIMIT): Select MINUTELY aggregation\n   * - < 10 minutes: Return null (no aggregation appropriate)\n   *\n   * @param timeRangeInMs - Duration of the time range in milliseconds\n   * @returns The most appropriate aggregation type or null if no aggregation is suitable\n   *\n   * @example\n   * ```typescript\n   * // Large time range - selects DAILY\n   * const dailyResult = service.determineAggregation(5 * 24 * 60 * 60 * 1000); // 5 days\n   * // Returns aggregationType.DAILY\n   *\n   * // Medium time range - selects HOURLY\n   * const hourlyResult = service.determineAggregation(2 * 24 * 60 * 60 * 1000); // 2 days\n   * // Returns aggregationType.HOURLY\n   *\n   * // Small time range - selects MINUTELY\n   * const minutelyResult = service.determineAggregation(30 * 60 * 1000); // 30 minutes\n   * // Returns aggregationType.MINUTELY\n   *\n   * // Very small time range - no aggregation\n   * const nullResult = service.determineAggregation(5 * 60 * 1000); // 5 minutes\n   * // Returns null\n   * ```\n   */\n  private determineAggregation(timeRangeInMs: number): aggregationType | null {\n    if (timeRangeInMs >= AGGREGATION_LIMITS.DAILY_LIMIT) {\n      return aggregationType.DAILY;\n    } else if (timeRangeInMs >= AGGREGATION_LIMITS.HOURLY_LIMIT) {\n      return aggregationType.HOURLY;\n    } else if (timeRangeInMs >= AGGREGATION_LIMITS.MINUTELY_LIMIT) {\n      return aggregationType.MINUTELY;\n    }\n    return null;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { isEqual, isObject, transform } from 'lodash-es';\nimport { DateTimeContextUtil } from '../../utils/date-time-context.util';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class GlobalContextUtilsService {\n  /**\n   * Compares two objects and returns an object containing only the fields that changed.\n   * For nested objects, recursively identifies changes at each level.\n   * Converts Date objects to ISO strings for comparison and in the result.\n   *\n   * @param oldObj - The original object to compare\n   * @param newObj - The new object to compare against\n   * @returns An object containing only the changed fields and their new values\n   * @throws Error if inputs are not valid objects\n   */\n  getChangedFields<T extends object>(oldObj: T, newObj: T): Partial<T> {\n    // Validate inputs\n    if (!isObject(oldObj) || !isObject(newObj)) {\n      throw new Error('Both arguments must be objects');\n    }\n\n    // Set to track visited objects (to avoid infinite recursion on circular refs)\n    const visited = new WeakSet<object>();\n\n    const diff = this.findChanges(oldObj, newObj, visited);\n    return (diff === undefined ? {} : diff) as Partial<T>;\n  }\n\n  /**\n   * Checks if a value is a Date object\n   * @param val - The value to check\n   * @returns True if the value is a Date object\n   */\n  private isDate(val: unknown): val is Date {\n    return val instanceof Date && !isNaN(val.getTime());\n  }\n\n  /**\n   * Recursive helper function to find changes between two values\n   * @param oldVal - Original value\n   * @param newVal - New value to compare against\n   * @param visited - Set to track visited objects to avoid circular references\n   * @returns The changed value or undefined if no changes\n   */\n  private findChanges(oldVal: unknown, newVal: unknown, visited: WeakSet<object>): unknown {\n    // Handle Date objects - convert to ISO string for comparison\n    let oldDateString: string | undefined;\n    if (this.isDate(oldVal)) {\n      oldDateString = DateTimeContextUtil.normalizeIsoToSeconds(oldVal.toISOString());\n    }\n    if (this.isDate(newVal)) {\n      const isoString = DateTimeContextUtil.normalizeIsoToSeconds(newVal.toISOString());\n      // If old value wasn't a date, or if the ISO strings differ, return new ISO string\n      if (!oldDateString || oldDateString !== isoString) {\n        return isoString;\n      }\n      return undefined; // Dates are equal, no change\n    }\n    // Update oldVal if it was converted to string\n    if (oldDateString) {\n      oldVal = oldDateString;\n    }\n\n    // Handle ISO string comparisons - normalize to seconds precision\n    if (typeof oldVal === 'string' && typeof newVal === 'string') {\n      const normalizedOld = DateTimeContextUtil.normalizeIsoToSeconds(oldVal);\n      const normalizedNew = DateTimeContextUtil.normalizeIsoToSeconds(newVal);\n\n      // If both are valid ISO dates, compare normalized versions\n      if (normalizedOld && normalizedNew) {\n        if (normalizedOld === normalizedNew) {\n          return undefined; // Dates are equal (ignoring milliseconds)\n        }\n        return normalizedNew; // Return normalized version\n      }\n    }\n\n    // If we've seen this object reference before, break out (circular reference)\n    if (isObject(oldVal) && isObject(newVal)) {\n      if (visited.has(oldVal as object) || visited.has(newVal as object)) {\n        return undefined; // avoid infinite loop, no changes deeper\n      }\n      visited.add(oldVal as object);\n      visited.add(newVal as object);\n    }\n\n    // If values are deeply equal, no change; return nothing\n    if (isEqual(oldVal, newVal)) {\n      return undefined;\n    }\n\n    // If both values are objects, recurse into their properties\n    if (isObject(oldVal) && isObject(newVal)) {\n      const result = transform(\n        newVal,\n        (result: Record<string, unknown>, value: unknown, key: string) => {\n          const change = this.findChanges(oldVal[key], value, visited);\n          if (change !== undefined) {\n            // Only include the key if there is a difference\n            result[key] = change;\n          }\n        },\n        Array.isArray(newVal) ? [] : {}\n      ); // preserve array vs object in result\n\n      // If result is empty (no changes found in nested objects), return undefined\n      return Object.keys(result).length === 0 ? undefined : result;\n    }\n\n    // For primitive values (or if types differ), return the new value\n    return newVal;\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  forwardRef,\n  input,\n  signal\n} from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { aggregationType } from '@c8y/client';\nimport { I18nModule, IconDirective } from '@c8y/ngx-components';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport {\n  AGGREGATION_ICONS,\n  AGGREGATION_TEXTS,\n  AGGREGATIONS\n} from '../../../models/aggregation.model';\n\n@Component({\n  selector: 'c8y-aggregation-picker',\n  templateUrl: './aggregation-picker.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => AggregationPickerComponent),\n      multi: true\n    }\n  ],\n  standalone: true,\n  imports: [TooltipModule, BsDropdownModule, I18nModule, IconDirective, FormsModule]\n})\nexport class AggregationPickerComponent implements ControlValueAccessor {\n  /**\n   * Configuration for disabling specific types of aggregation.\n   * By default no aggregation type is disabled.\n   *\n   * Uses input transform to normalize null/undefined to empty object,\n   * preventing template errors when accessing properties.\n   */\n  readonly disabledAggregations = input(\n    {},\n    {\n      transform: (\n        value: Partial<Record<aggregationType, boolean>> | null | undefined\n      ): Partial<Record<aggregationType, boolean>> => value ?? {}\n    }\n  );\n\n  /**\n   *  Whether to reset the aggregation value to default when disabled.\n   *  Default is false.\n   */\n  readonly resetToDefault = input(false);\n\n  /**\n   * Whether to show the aggregation picker options as a radio-group or as a dropdown.\n   * Default is dropdown.\n   */\n  readonly layout = input<'radio' | 'dropdown'>('dropdown');\n\n  private readonly _disabled = signal(false);\n  readonly disabled = computed(() => this._disabled());\n\n  readonly AGGREGATIONS = AGGREGATIONS;\n  readonly AGGREGATION_ICONS = AGGREGATION_ICONS;\n  readonly AGGREGATION_TEXTS = AGGREGATION_TEXTS;\n\n  private readonly _value = signal<aggregationType | null>(null);\n  readonly value = computed(() => this._value());\n  private readonly _touched = signal(false);\n  readonly touched = computed(() => this._touched());\n\n  // Computed helpers for cleaner templates\n  readonly currentText = computed(() => {\n    const value = this._value();\n    return value ? this.AGGREGATION_TEXTS[value] : this.AGGREGATION_TEXTS.undefined;\n  });\n\n  readonly currentIcon = computed(() => {\n    const value = this._value();\n    return value ? this.AGGREGATION_ICONS[value] : this.AGGREGATION_ICONS.undefined;\n  });\n\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  onChange = _ => {};\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  onTouched = () => {};\n\n  writeValue(value: aggregationType | null): void {\n    if (this._value() === value) {\n      return;\n    }\n\n    this._value.set(value);\n  }\n\n  registerOnChange(fn: (value: aggregationType | null) => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(onTouched: () => void): void {\n    this.onTouched = onTouched;\n  }\n\n  markAsTouched() {\n    if (!this._touched()) {\n      this.onTouched();\n      this._touched.set(true);\n    }\n  }\n\n  setDisabledState(disabled: boolean) {\n    this._disabled.set(disabled);\n\n    if (disabled && this.resetToDefault()) {\n      this.resetValue();\n    }\n  }\n\n  selectAggregation(aggregation: aggregationType | null): void {\n    // Early return if value hasn't changed (no-op)\n    if (aggregation === this._value()) {\n      return;\n    }\n\n    this.markAsTouched();\n    this._value.set(aggregation);\n    this.onChange(aggregation);\n  }\n\n  private resetValue() {\n    if (this._value() !== null) {\n      this._value.set(null);\n      this.onChange(null);\n    }\n  }\n}\n","@if (layout() === 'dropdown') {\n  <div\n    class=\"dropdown\"\n    style=\"border: 0; margin-left: -1px\"\n    container=\"body\"\n    #dropdown=\"bs-dropdown\"\n    dropdown\n    [attr.data-cy]=\"'global-context--aggregation-picker'\"\n    [insideClick]=\"true\"\n    [isDisabled]=\"disabled()\"\n  >\n    <button\n      class=\"dropdown-toggle form-control p-t-0 p-b-0 l-h-1 d-flex a-i-center\"\n      [attr.aria-label]=\"currentText() | translate\"\n      tooltip=\"{{ (disabled() ? AGGREGATION_TEXTS.disabled : currentText()) | translate }}\"\n      placement=\"top\"\n      container=\"body\"\n      [attr.aria-haspopup]=\"'listbox'\"\n      [attr.aria-expanded]=\"dropdown.isOpen\"\n      type=\"button\"\n      [attr.data-cy]=\"'global-context--aggregation-picker-' + value()\"\n      [adaptivePosition]=\"false\"\n      [delay]=\"500\"\n      dropdownToggle\n    >\n      <i\n        class=\"icon-14\"\n        [c8yIcon]=\"currentIcon()\"\n      ></i>\n      <span class=\"caret m-r-8 m-l-4\"></span>\n    </button>\n\n    <ul\n      class=\"dropdown-menu dropdown-menu-right--xs\"\n      role=\"listbox\"\n      *dropdownMenu\n    >\n      @for (aggregation of AGGREGATIONS; track aggregation.id || $index) {\n        @let isDisabled = aggregation.id ? disabledAggregations()[aggregation.id] : false;\n        <li\n          [class.active]=\"aggregation.id === value()\"\n          [class.disabled]=\"isDisabled\"\n        >\n          <button\n            class=\"\"\n            [attr.aria-selected]=\"aggregation.id === value()\"\n            role=\"option\"\n            (click)=\"selectAggregation(aggregation.id); dropdown.isOpen = false\"\n            [disabled]=\"isDisabled\"\n            [attr.data-cy]=\"'global-context--aggregation-picker-input-' + aggregation.id\"\n          >\n            <i\n              class=\"icon-14\"\n              [c8yIcon]=\"\n                aggregation.id ? AGGREGATION_ICONS[aggregation.id] : AGGREGATION_ICONS.undefined\n              \"\n            ></i>\n            <span>{{ aggregation.title | translate }}</span>\n          </button>\n        </li>\n      }\n    </ul>\n  </div>\n}\n\n@if (layout() === 'radio') {\n  <div\n    class=\"radio-group d-flex-md a-i-center gap-16\"\n    [attr.aria-label]=\"'Aggregation options' | translate\"\n    role=\"radiogroup\"\n  >\n    @for (aggregation of AGGREGATIONS; track aggregation.id || $index) {\n      @let isDisabled = aggregation.id ? disabledAggregations()[aggregation.id] : false;\n      <label\n        class=\"c8y-radio\"\n        [attr.data-cy]=\"'global-context--aggregation-picker-input-' + aggregation.id\"\n      >\n        <input\n          name=\"aggregation\"\n          role=\"radio\"\n          type=\"radio\"\n          [value]=\"aggregation.id\"\n          [checked]=\"aggregation.id === value()\"\n          [disabled]=\"isDisabled\"\n          (change)=\"selectAggregation(aggregation.id)\"\n        />\n        <span></span>\n        <i\n          class=\"icon-16 m-l-4\"\n          [c8yIcon]=\"\n            aggregation.id ? AGGREGATION_ICONS[aggregation.id] : AGGREGATION_ICONS.undefined\n          \"\n        ></i>\n        <span>{{ aggregation.title | translate }}</span>\n      </label>\n    }\n  </div>\n}\n","import { NgClass } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  DestroyRef,\n  inject,\n  Input,\n  output,\n  signal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n  AbstractControl,\n  FormBuilder,\n  FormsModule,\n  ReactiveFormsModule,\n  ValidationErrors,\n  ValidatorFn\n} from '@angular/forms';\nimport { aggregationType } from '@c8y/client';\nimport {\n  C8yTranslatePipe,\n  DateTimePickerModule,\n  FormGroupComponent,\n  I18nModule,\n  IconDirective,\n  MessageDirective,\n  MessagesComponent\n} from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { isEqual } from 'lodash-es';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { debounceTime } from 'rxjs';\nimport { AGGREGATION_TEXTS } from '../../../models/aggregation.model';\nimport { TIME_DURATION } from '../../../models/constants';\nimport type { DateTimeContext } from '../../../models/date-time-context-picker.model';\nimport type {\n  GlobalContextSettings,\n  GlobalContextState\n} from '../../../models/global-context.model';\nimport { TIME_INTERVAL } from '../../../models/interval-picker.model';\nimport { AggregationPickerService } from '../../../services/domain/aggregation-picker.service';\nimport { DateTimeContextUtil } from '../../../utils/date-time-context.util';\nimport { AggregationPickerComponent } from '../../aggregation/aggregation-picker';\n\n/**\n * Component for configuring history mode settings\n * Stateless component that emits changes immediately\n */\n@Component({\n  selector: 'c8y-history-mode-configuration-controls',\n  templateUrl: './history-mode-configuration-controls.component.html',\n  standalone: true,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    C8yTranslatePipe,\n    I18nModule,\n    TooltipModule,\n    ReactiveFormsModule,\n    IconDirective,\n    FormsModule,\n    PopoverModule,\n    FormGroupComponent,\n    AggregationPickerComponent,\n    MessagesComponent,\n    MessageDirective,\n    DateTimePickerModule,\n    NgClass\n  ]\n})\nexport class HistoryModeConfigurationControlsComponent {\n  readonly AGGREGATION_TEXTS = AGGREGATION_TEXTS;\n  readonly DATE_FORMAT = 'medium';\n\n  readonly errorMessages = {\n    dateAfterRangeMax: gettext('This date is after the latest allowed date.'),\n    dateBeforeRangeMin: gettext('This date is before the earliest allowed date.'),\n    invalidDateTime: gettext('This date is invalid.'),\n    invalidDateRange: gettext('Start date must be before end date.')\n  } as const;\n\n  // Popover messages for translation extraction\n  readonly TIME_RANGE_PICKER_POPOVER = gettext(\n    'Specify the exact start and end date/time of the time period to analyse. This provides a static view of historical data within the selected timeframe.'\n  );\n  readonly AGGREGATION_POPOVER = gettext(\n    \"Groups data points into larger time intervals to simplify visualization and improve performance. 'None' shows raw data, while other options combine data points into minute, hour, or day groupings.\"\n  );\n\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly formBuilder = inject(FormBuilder);\n  private readonly aggregationPickerService = inject(AggregationPickerService);\n\n  private readonly settingsSignal = signal<Partial<GlobalContextSettings>>({\n    showAutoRefresh: true,\n    showTimeContext: true,\n    showAggregation: true\n  });\n  private readonly contextState = signal<GlobalContextState | null>(null);\n\n  @Input()\n  set settings(value: Partial<GlobalContextSettings> | null) {\n    this.settingsSignal.set({\n      showAutoRefresh: true,\n      showTimeContext: true,\n      showAggregation: true,\n      ...(value ?? {})\n    });\n  }\n  get settings(): Partial<GlobalContextSettings> {\n    return this.settingsSignal();\n  }\n\n  @Input()\n  set context(value: GlobalContextState | null) {\n    const cloned = value ? structuredClone(value) : null;\n\n    // Only update if context actually changed to avoid unnecessary form patches\n    const prev = this.contextState();\n    const isDifferent = !isEqual(prev, cloned);\n\n    if (isDifferent) {\n      this.contextState.set(cloned);\n      this.patchFormFromContext(cloned);\n    }\n  }\n\n  readonly contextChange = output<Partial<GlobalContextState>>();\n  readonly validationStatus = output<boolean>();\n\n  currentForm: ReturnType<typeof this.createForm>;\n  readonly disabledAggregations = signal<Partial<Record<aggregationType, boolean>>>({});\n  readonly dateFromErrors = signal<Record<string, any> | null>(null);\n  readonly dateToErrors = signal<Record<string, any> | null>(null);\n\n  constructor() {\n    this.currentForm = this.createForm();\n\n    this.currentForm.valueChanges\n      .pipe(takeUntilDestroyed(this.destroyRef), debounceTime(100))\n      .subscribe(formValue => {\n        this.handleFormValueChange(formValue as Partial<GlobalContextState>);\n      });\n\n    this.currentForm.statusChanges\n      .pipe(takeUntilDestroyed(this.destroyRef), debounceTime(100))\n      .subscribe(() => {\n        this.updateErrorSignals();\n        this.validationStatus.emit(this.currentForm.valid);\n      });\n\n    this.updateErrorSignals();\n    this.validationStatus.emit(this.currentForm.valid);\n  }\n\n  setDateToNow(): void {\n    const now = new Date();\n    now.setSeconds(0, 0);\n    this.currentForm.get('dateTimeContext')?.get('dateTo')?.setValue(now.toISOString());\n  }\n\n  private updateErrorSignals(): void {\n    const dateTimeContext = this.currentForm?.get('dateTimeContext');\n    const dateFromControl = dateTimeContext?.get('dateFrom');\n    const dateToControl = dateTimeContext?.get('dateTo');\n\n    const dateFromControlErrors = dateFromControl?.errors || {};\n    const groupErrors = dateTimeContext?.errors || {};\n\n    if (Object.keys(dateFromControlErrors).length > 0) {\n      this.dateFromErrors.set(dateFromControlErrors);\n    } else if (Object.keys(groupErrors).length > 0) {\n      this.dateFromErrors.set(groupErrors);\n    } else {\n      this.dateFromErrors.set(null);\n    }\n\n    const dateToControlErrors = dateToControl?.errors || {};\n    this.dateToErrors.set(Object.keys(dateToControlErrors).length > 0 ? dateToControlErrors : null);\n  }\n\n  private handleFormValueChange(formValue: Partial<GlobalContextState>): void {\n    const { dateTimeContext, aggregation } = formValue;\n\n    if (!dateTimeContext) {\n      return;\n    }\n\n    // Normalize seconds and milliseconds BEFORE validation to prevent precision issues\n    const normalizedFrom = new Date(dateTimeContext.dateFrom);\n    normalizedFrom.setSeconds(0, 0);\n    const normalizedTo = new Date(dateTimeContext.dateTo);\n    normalizedTo.setSeconds(0, 0);\n\n    dateTimeContext.dateFrom = normalizedFrom.toISOString();\n    dateTimeContext.dateTo = normalizedTo.toISOString();\n\n    // Calculate disabled aggregations regardless of validation\n    // This allows us to disable aggregations even for edge cases like dateFrom === dateTo\n    dateTimeContext.interval = TIME_INTERVAL.CUSTOM;\n\n    const { selectedAggregation, disabledAggregations } =\n      this.aggregationPickerService.calculateAggregation(\n        [new Date(dateTimeContext.dateFrom), new Date(dateTimeContext.dateTo)],\n        aggregation ?? null\n      );\n    this.disabledAggregations.set(disabledAggregations);\n\n    // Skip emission if validation fails (e.g., dateFrom > dateTo), but still update UI\n    if (!this.isValidDateTimeContext(dateTimeContext)) {\n      return;\n    }\n\n    if (selectedAggregation !== undefined) {\n      this.currentForm.patchValue({ aggregation: selectedAggregation }, { emitEvent: false });\n    }\n\n    const emission = structuredClone(this.currentForm.value) as GlobalContextState;\n    this.contextChange.emit(emission);\n  }\n\n  private isValidDateTimeContext(dateTimeContext: DateTimeContext | null): boolean {\n    if (!dateTimeContext) {\n      return false;\n    }\n\n    const normalizedFrom = new Date(dateTimeContext.dateFrom);\n    normalizedFrom.setSeconds(0, 0);\n    const normalizedTo = new Date(dateTimeContext.dateTo);\n    normalizedTo.setSeconds(0, 0);\n\n    return DateTimeContextUtil.isValidRange(normalizedFrom, normalizedTo);\n  }\n\n  private patchFormFromContext(context?: GlobalContextState | null): void {\n    if (!this.currentForm) {\n      return;\n    }\n\n    const ctx = context ?? this.contextState();\n\n    if (!ctx) {\n      const defaults = this.getDefaultDateRange();\n      this.currentForm.patchValue(\n        {\n          dateTimeContext: {\n            interval: TIME_INTERVAL.CUSTOM,\n            dateFrom: defaults.dateFrom,\n            dateTo: defaults.dateTo\n          },\n          aggregation: null\n        },\n        { emitEvent: false }\n      );\n      this.disabledAggregations.set({});\n      this.validationStatus.emit(this.currentForm.valid);\n      return;\n    }\n\n    let clonedContext: DateTimeContext | null = null;\n    if (ctx.dateTimeContext) {\n      clonedContext = structuredClone(ctx.dateTimeContext);\n    } else {\n      const defaults = this.getDefaultDateRange();\n      clonedContext = {\n        interval: TIME_INTERVAL.CUSTOM,\n        dateFrom: defaults.dateFrom,\n        dateTo: defaults.dateTo\n      };\n    }\n\n    clonedContext.interval = TIME_INTERVAL.CUSTOM;\n\n    const normalizedFrom = new Date(clonedContext.dateFrom);\n    normalizedFrom.setSeconds(0, 0);\n    const normalizedTo = new Date(clonedContext.dateTo);\n    normalizedTo.setSeconds(0, 0);\n\n    clonedContext.dateFrom = normalizedFrom.toISOString();\n    clonedContext.dateTo = normalizedTo.toISOString();\n\n    this.currentForm.patchValue(\n      {\n        dateTimeContext: clonedContext,\n        aggregation: ctx.aggregation ?? null\n      },\n      { emitEvent: false }\n    );\n\n    // Update disabled aggregations but DON'T override the value\n    const { disabledAggregations } = this.aggregationPickerService.calculateAggregation(\n      [new Date(clonedContext.dateFrom), new Date(clonedContext.dateTo)],\n      ctx.aggregation ?? null\n    );\n    this.disabledAggregations.set(disabledAggregations);\n    this.validationStatus.emit(this.currentForm.valid);\n  }\n\n  private createForm() {\n    const defaultDates = this.getDefaultDateRange();\n\n    const dateTimeContext = this.formBuilder.group<DateTimeContext>(\n      {\n        interval: TIME_INTERVAL.CUSTOM,\n        dateFrom: defaultDates.dateFrom,\n        dateTo: defaultDates.dateTo\n      },\n      {\n        validators: [this.createDateRangeValidator()]\n      }\n    );\n\n    return this.formBuilder.group({\n      dateTimeContext,\n      aggregation: this.formBuilder.control<aggregationType | null>(null)\n    });\n  }\n\n  private getDefaultDateRange(): { dateFrom: string; dateTo: string } {\n    const now = new Date();\n    now.setSeconds(0, 0);\n    const oneHourAgo = new Date(now.getTime() - TIME_DURATION.ONE_HOUR_MS);\n    oneHourAgo.setSeconds(0, 0);\n\n    return {\n      dateFrom: oneHourAgo.toISOString(),\n      dateTo: now.toISOString()\n    };\n  }\n\n  private createDateRangeValidator(): ValidatorFn {\n    return (group: AbstractControl): ValidationErrors | null => {\n      const dateFrom = group.get('dateFrom')?.value;\n      const dateTo = group.get('dateTo')?.value;\n\n      if (!dateFrom || !dateTo) {\n        return null;\n      }\n\n      const normalizedFrom = new Date(dateFrom);\n      normalizedFrom.setSeconds(0, 0);\n      const normalizedTo = new Date(dateTo);\n      normalizedTo.setSeconds(0, 0);\n\n      if (!DateTimeContextUtil.isValidRange(normalizedFrom, normalizedTo)) {\n        return { invalidDateRange: true };\n      }\n\n      return null;\n    };\n  }\n}\n","@if (currentForm) {\n  @let SHOW_TIME_CONTEXT = settings.showTimeContext;\n  @let SHOW_AGGREGATION = settings.showAggregation;\n\n  <form [formGroup]=\"currentForm\">\n    <div class=\"content-flex-100\">\n      <div\n        class=\"col-4\"\n        [ngClass]=\"{ 'm-b-8': !SHOW_AGGREGATION }\"\n      >\n        @if (SHOW_TIME_CONTEXT) {\n          @let dateTimeContext = currentForm.get('dateTimeContext');\n          @let tempDateFromValue = dateTimeContext.get('dateFrom')?.value;\n          @let tempDateToValue = dateTimeContext.get('dateTo')?.value;\n          @let fromErrors = dateFromErrors();\n          @let toErrors = dateToErrors();\n\n          <fieldset class=\"c8y-fieldset\">\n            <legend>\n              <div class=\"standalone btn-icon-dot__item time-context m-r-4\">\n                <i\n                  class=\"\"\n                  [c8yIcon]=\"'calendar'\"\n                ></i>\n              </div>\n              {{ 'Date & time range' | translate }}\n              <button\n                class=\"btn-help btn-help--sm\"\n                [attr.aria-label]=\"'Help' | translate\"\n                [popover]=\"TIME_RANGE_PICKER_POPOVER | translate\"\n                placement=\"top\"\n                triggers=\"focus\"\n                container=\"body\"\n                type=\"button\"\n                [adaptivePosition]=\"true\"\n              ></button>\n            </legend>\n            <c8y-form-group class=\"content-flex-58 d-flex a-i-center m-b-0 p-t-16\">\n              <c8y-form-group\n                [class.has-error]=\"fromErrors\"\n                class=\"form-group-sm d-flex a-i-center col-5 flex-wrap\"\n              >\n                <label\n                  class=\"m-b-sm-0 m-r-8 text-nowrap\"\n                  style=\"min-width: 30px\"\n                  [title]=\"'From`date`' | translate\"\n                  for=\"dateFrom\"\n                  translate\n                >\n                  From`date`\n                </label>\n                <c8y-date-time-picker\n                  [class.has-error]=\"fromErrors\"\n                  id=\"dateFrom\"\n                  [maxDate]=\"tempDateToValue\"\n                  [placeholder]=\"'From`date`' | translate\"\n                  [formControl]=\"dateTimeContext.get('dateFrom')\"\n                ></c8y-date-time-picker>\n                <c8y-messages [show]=\"fromErrors\">\n                  <c8y-message\n                    name=\"dateAfterRangeMax\"\n                    [text]=\"errorMessages.dateAfterRangeMax | translate\"\n                  ></c8y-message>\n                  <c8y-message\n                    name=\"invalidDateTime\"\n                    [text]=\"errorMessages.invalidDateTime | translate\"\n                  ></c8y-message>\n                  <c8y-message\n                    name=\"invalidDateRange\"\n                    [text]=\"errorMessages.invalidDateRange | translate\"\n                  ></c8y-message>\n                </c8y-messages>\n              </c8y-form-group>\n\n              <c8y-form-group\n                [class.has-error]=\"toErrors\"\n                class=\"form-group-sm d-flex flex-wrap col-7 a-i-center\"\n              >\n                <label\n                  class=\"m-b-sm-0 text-nowrap m-r-8\"\n                  style=\"min-width: 30px\"\n                  [title]=\"'To`date`' | translate\"\n                  for=\"dateTo\"\n                  translate\n                >\n                  To`date`\n                </label>\n                <c8y-date-time-picker\n                  [class.has-error]=\"toErrors\"\n                  id=\"dateTo\"\n                  [minDate]=\"tempDateFromValue\"\n                  [placeholder]=\"'To`date`' | translate\"\n                  [formControl]=\"dateTimeContext.get('dateTo')\"\n                ></c8y-date-time-picker>\n                <button\n                  class=\"btn btn-xs btn-default m-l-4\"\n                  [title]=\"'Set to current time' | translate\"\n                  type=\"button\"\n                  (click)=\"setDateToNow()\"\n                >\n                  <i\n                    class=\"m-r-4\"\n                    [c8yIcon]=\"'clock-o'\"\n                  ></i>\n                  {{ 'Now' | translate }}\n                </button>\n                <c8y-messages [show]=\"toErrors\">\n                  <c8y-message\n                    name=\"dateBeforeRangeMin\"\n                    [text]=\"errorMessages.dateBeforeRangeMin | translate\"\n                  ></c8y-message>\n                  <c8y-message\n                    name=\"invalidDateTime\"\n                    [text]=\"errorMessages.invalidDateTime | translate\"\n                  ></c8y-message>\n                </c8y-messages>\n              </c8y-form-group>\n            </c8y-form-group>\n          </fieldset>\n        }\n      </div>\n      <div class=\"col-\">\n        @if (SHOW_AGGREGATION) {\n          @let selectedAggregation = currentForm.get('aggregation')?.value;\n\n          <fieldset class=\"c8y-fieldset\">\n            <legend>\n              <div class=\"standalone btn-icon-dot__item aggregation m-r-4\">\n                <i [c8yIcon]=\"'input'\"></i>\n              </div>\n              {{ 'Aggregation' | translate }}\n              <button\n                class=\"btn-help btn-help--sm\"\n                [attr.aria-label]=\"'Help' | translate\"\n                [popover]=\"AGGREGATION_POPOVER | translate\"\n                placement=\"top\"\n                triggers=\"focus\"\n                container=\"body\"\n                type=\"button\"\n                [adaptivePosition]=\"true\"\n              ></button>\n            </legend>\n            <c8y-form-group class=\"p-t-16 p-b-16 m-b-4\">\n              <c8y-aggregation-picker\n                formControlName=\"aggregation\"\n                [resetToDefault]=\"true\"\n                [disabledAggregations]=\"disabledAggregations()\"\n                [layout]=\"'radio'\"\n              ></c8y-aggregation-picker>\n            </c8y-form-group>\n          </fieldset>\n        }\n      </div>\n    </div>\n  </form>\n}\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, forwardRef, Input } from '@angular/core';\nimport {\n  ControlValueAccessor,\n  FormsModule,\n  NG_VALUE_ACCESSOR,\n  ReactiveFormsModule\n} from '@angular/forms';\nimport { C8yTranslatePipe, IconDirective } from '@c8y/ngx-components';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport type { Interval } from '../../../models/interval-picker.model';\nimport { INTERVALS } from '../../../models/interval-picker.model';\n\n@Component({\n  selector: 'c8y-interval-picker',\n  templateUrl: './interval-picker.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => IntervalPickerComponent),\n      multi: true\n    }\n  ],\n  standalone: true,\n  imports: [\n    CommonModule,\n    FormsModule,\n    A11yModule,\n    ReactiveFormsModule,\n    BsDropdownModule,\n    IconDirective,\n    PopoverModule,\n    C8yTranslatePipe\n  ]\n})\nexport class IntervalPickerComponent implements ControlValueAccessor {\n  @Input() INTERVALS: Interval[] = [...INTERVALS];\n  @Input() shouldDisableInterval = { isDisabled: false, msg: null };\n\n  value: Interval['id'];\n  touched = false;\n  disabled = false;\n\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  onChange = _ => {};\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  onTouched = () => {};\n\n  writeValue(value: Interval['id']) {\n    this.value = value;\n  }\n\n  registerOnChange(fn: (value: Interval['id']) => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(onTouched: () => void): void {\n    this.onTouched = onTouched;\n  }\n\n  markAsTouched() {\n    if (!this.touched) {\n      this.onTouched();\n      this.touched = true;\n    }\n  }\n\n  onIntervalSelect(intervalId: Interval['id']) {\n    this.markAsTouched();\n    this.value = intervalId;\n    this.onChange(intervalId);\n  }\n\n  setDisabledState(disabled: boolean) {\n    this.disabled = disabled;\n  }\n}\n","@for (interval of INTERVALS; track interval.id) {\n  @let isSelected = interval.id === value;\n  @let checkVisibility = isSelected ? 'visible' : 'hidden';\n  @let isIntervalDisabled = shouldDisableInterval?.isDisabled;\n  @let isIntervalDisabledMsg = shouldDisableInterval?.msg;\n  @let isCustom = interval.id === 'custom';\n\n  <li [class.active]=\"isSelected\">\n    <div\n      [ngStyle]=\"{\n        display: 'flex',\n        flexDirection: 'row',\n        alignItems: 'center'\n      }\"\n    >\n      <button\n        class=\"mr-2\"\n        type=\"button\"\n        [attr.data-cy]=\"'global-context--interval-' + interval.id\"\n        (click)=\"onIntervalSelect(interval.id)\"\n        [disabled]=\"isCustom && isIntervalDisabled\"\n      >\n        <span [class.text-primary]=\"isSelected\">\n          <span\n            [c8yIcon]=\"'check'\"\n            [style.visibility]=\"checkVisibility\"\n          ></span>\n          {{ interval.title | translate }}\n        </span>\n      </button>\n    </div>\n  </li>\n}\n","import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  DestroyRef,\n  Input,\n  OnInit,\n  ViewChild,\n  computed,\n  forwardRef,\n  inject,\n  signal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n  ControlValueAccessor,\n  FormBuilder,\n  FormControl,\n  FormGroup,\n  NG_VALUE_ACCESSOR,\n  ReactiveFormsModule\n} from '@angular/forms';\nimport {\n  DatePipe,\n  DateTimePickerModule,\n  FormGroupComponent,\n  I18nModule,\n  IconDirective,\n  MessageDirective,\n  MessagesComponent\n} from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { BsDropdownDirective, BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { distinctUntilChanged } from 'rxjs';\nimport {\n  DateTimeContext,\n  DateTimeContextPickerConfig\n} from '../../../models/date-time-context-picker.model';\nimport {\n  INTERVAL_TITLES,\n  TIME_INTERVAL,\n  TimeInterval\n} from '../../../models/interval-picker.model';\nimport { DateTimeContextPickerService } from '../../../services/domain/date-time-context-picker.service';\nimport { DateTimeContextUtil } from '../../../utils/date-time-context.util';\nimport { IntervalPickerComponent } from '../interval-picker';\n\n@Component({\n  selector: 'c8y-date-time-context-picker',\n  templateUrl: './date-time-context-picker.component.html',\n  standalone: true,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    ReactiveFormsModule,\n    TooltipModule,\n    BsDropdownModule,\n    I18nModule,\n    IconDirective,\n    DatePipe,\n    MessagesComponent,\n    MessageDirective,\n    FormGroupComponent,\n    IntervalPickerComponent,\n    DateTimePickerModule\n  ],\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => DateTimeContextPickerComponent),\n      multi: true\n    }\n  ]\n})\nexport class DateTimeContextPickerComponent implements OnInit, ControlValueAccessor {\n  @Input() disabled = false;\n  @Input() shouldDisableInterval: Record<string, boolean> = {};\n  @Input() config: DateTimeContextPickerConfig = {\n    showDateFrom: true,\n    showDateTo: true\n  };\n\n  @ViewChild(BsDropdownDirective) dropdown?: BsDropdownDirective;\n\n  private readonly service = inject(DateTimeContextPickerService);\n  private readonly formBuilder = inject(FormBuilder);\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly datePipe = inject(DatePipe);\n  private readonly cdr = inject(ChangeDetectorRef);\n\n  readonly INTERVALS = INTERVAL_TITLES;\n  readonly DATE_FORMAT = 'medium';\n  readonly TIME_INTERVAL = TIME_INTERVAL;\n\n  readonly errorMessages = {\n    dateAfterRangeMax: gettext('This date is after the latest allowed date.'),\n    dateBeforeRangeMin: gettext('This date is before the earliest allowed date.'),\n    invalidDateTime: gettext('This date is invalid.'),\n    invalidDateRange: gettext('Start date must be before end date.')\n  } as const;\n\n  form!: FormGroup;\n  tempDateFromControl!: FormControl;\n  tempDateToControl!: FormControl;\n\n  private readonly customSnapshot = signal<DateTimeContext | null>(null);\n  private readonly isRestoring = signal(false);\n  private readonly canEmit = signal(true);\n  private readonly currentInterval = signal<TimeInterval | null>(null);\n  private onChangeCallback?: (value: Partial<DateTimeContext>) => void;\n  private onTouchedCallback?: () => void;\n\n  readonly isCustomMode = computed(() => this.currentInterval() === TIME_INTERVAL.CUSTOM);\n  readonly isEditing = computed(() => this.dropdown?.isOpen && this.isCustomMode());\n\n  ngOnInit(): void {\n    this.form = this.formBuilder.group<DateTimeContext>({\n      interval: null,\n      dateFrom: null,\n      dateTo: null\n    });\n    this.tempDateFromControl = new FormControl(null);\n    this.tempDateToControl = new FormControl(null);\n\n    this.setupIntervalChangeHandler();\n  }\n\n  writeValue(value: DateTimeContext): void {\n    // Prevent updates when dropdown is open and custom mode is active\n    if (this.dropdown?.isOpen && this.isCustomMode()) return;\n\n    if (value && this.form) {\n      const normalized = this.normalizeContext(value);\n      this.form.patchValue(normalized, { emitEvent: false });\n      this.currentInterval.set(normalized.interval);\n\n      if (normalized.interval === TIME_INTERVAL.CUSTOM) {\n        this.canEmit.set(false);\n        this.customSnapshot.set({ ...this.form.value });\n        this.syncTempControls();\n      } else {\n        this.canEmit.set(true);\n        this.customSnapshot.set(null);\n      }\n      this.cdr.markForCheck();\n    }\n  }\n\n  registerOnChange(fn: (value: DateTimeContext) => void): void {\n    this.onChangeCallback = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouchedCallback = fn;\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    this.disabled = isDisabled;\n    isDisabled ? this.form.disable({ emitEvent: false }) : this.form.enable({ emitEvent: false });\n  }\n\n  onShownDropdown(): void {\n    if (this.isCustomMode()) {\n      this.syncTempControls();\n      this.customSnapshot.set({ ...this.form.value });\n    }\n  }\n\n  onHiddenDropdown(): void {\n    const snapshot = this.customSnapshot();\n    if (snapshot && this.isCustomMode()) {\n      this.isRestoring.set(true);\n      this.form.patchValue(snapshot, { emitEvent: true });\n      this.currentInterval.set(snapshot.interval);\n      this.isRestoring.set(false);\n      this.customSnapshot.set(null);\n    }\n\n    this.canEmit.set(!this.isCustomMode());\n    this.onTouchedCallback?.();\n  }\n\n  getDateRangeLabel(): string {\n    const dateFrom = this.isEditing()\n      ? this.tempDateFromControl?.value\n      : this.form.get('dateFrom')?.value;\n    const dateTo = this.isEditing()\n      ? this.tempDateToControl?.value\n      : this.form.get('dateTo')?.value;\n\n    if (!dateFrom || !dateTo) return '';\n    return `${this.datePipe.transform(dateFrom, this.DATE_FORMAT)} — ${this.datePipe.transform(dateTo, this.DATE_FORMAT)}`;\n  }\n\n  isApplyDisabled(): boolean {\n    if (!this.isCustomMode()) return this.form.invalid;\n\n    const tempFrom = this.tempDateFromControl?.value;\n    const tempTo = this.tempDateToControl?.value;\n\n    if (this.config?.showDateFrom && !tempFrom) return true;\n    if (this.config?.showDateTo && !tempTo) return true;\n\n    if (tempFrom && tempTo) {\n      const fromTime = this.normalizeTimestamp(tempFrom);\n      const toTime = this.normalizeTimestamp(tempTo);\n      if (fromTime >= toTime) return true;\n    }\n\n    const formFrom = this.form.get('dateFrom')?.value;\n    const formTo = this.form.get('dateTo')?.value;\n    const hasChanged =\n      (this.config?.showDateFrom && tempFrom !== formFrom) ||\n      (this.config?.showDateTo && tempTo !== formTo);\n\n    return !hasChanged;\n  }\n\n  getDateFromErrors() {\n    if (!this.tempDateFromControl?.touched) return null;\n    const errors = this.tempDateFromControl?.errors || {};\n\n    if (\n      !this.config?.showDateTo &&\n      this.tempDateFromControl?.value &&\n      this.tempDateToControl?.value\n    ) {\n      const fromTime = this.normalizeTimestamp(this.tempDateFromControl.value);\n      const toTime = this.normalizeTimestamp(this.tempDateToControl.value);\n      if (fromTime >= toTime) {\n        const {\n          dateAfterRangeMax: _dateAfterRangeMax,\n          dateBeforeRangeMin: _dateBeforeRangeMin,\n          ...rest\n        } = errors;\n        return { ...rest, invalidDateRange: true };\n      }\n    }\n\n    return Object.keys(errors).length > 0 ? errors : null;\n  }\n\n  getDateToErrors() {\n    if (!this.config?.showDateTo) return null;\n    if (!this.tempDateToControl?.touched && !this.tempDateFromControl?.touched) return null;\n\n    const errors = this.tempDateToControl?.errors || {};\n    const fromVal = this.tempDateFromControl?.value;\n    const toVal = this.tempDateToControl?.value;\n\n    if (fromVal && toVal) {\n      const fromTime = this.normalizeTimestamp(fromVal);\n      const toTime = this.normalizeTimestamp(toVal);\n      if (fromTime >= toTime) {\n        const {\n          dateAfterRangeMax: _dateAfterRangeMax,\n          dateBeforeRangeMin: _dateBeforeRangeMin,\n          ...rest\n        } = errors;\n        return { ...rest, invalidDateRange: true };\n      }\n    }\n\n    return Object.keys(errors).length > 0 ? errors : null;\n  }\n\n  protected applyDateTimeContext(intervalVal: TimeInterval = TIME_INTERVAL.CUSTOM): void {\n    if (intervalVal === null) return;\n\n    if (intervalVal === TIME_INTERVAL.CUSTOM) {\n      this.applyCustomDates();\n    } else if (intervalVal === 'none') {\n      this.updateDates([new Date(0), new Date()], intervalVal);\n    } else {\n      const dates = this.service.getDateTimeContextByInterval(intervalVal);\n      this.updateDates(dates, intervalVal);\n    }\n\n    this.closeDropdown();\n    this.onTouchedCallback?.();\n  }\n\n  protected reset(): void {\n    const dates = this.service.getDateTimeContextByInterval(TIME_INTERVAL.DAYS);\n    this.updateDates(dates, TIME_INTERVAL.DAYS);\n    this.closeDropdown();\n  }\n\n  private setupIntervalChangeHandler(): void {\n    this.form.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(value => {\n      if (this.canEmit() && !this.isRestoring() && this.onChangeCallback) {\n        this.onChangeCallback({ ...value });\n      }\n    });\n\n    this.form\n      .get('interval')\n      ?.valueChanges.pipe(distinctUntilChanged(), takeUntilDestroyed(this.destroyRef))\n      .subscribe(interval => {\n        this.currentInterval.set(interval);\n        if (this.isRestoring()) return;\n\n        if (interval === TIME_INTERVAL.CUSTOM) {\n          this.canEmit.set(false);\n          this.customSnapshot.set({ ...this.form.value });\n          this.syncTempControls();\n        } else {\n          this.canEmit.set(true);\n          this.customSnapshot.set(null);\n          this.applyDateTimeContext(interval);\n        }\n      });\n  }\n\n  private applyCustomDates(): void {\n    const normalizeDate = (dateStr: string): string => {\n      const date = new Date(dateStr);\n      date.setSeconds(0, 0);\n      return date.toISOString();\n    };\n\n    const dateFrom = this.tempDateFromControl.value\n      ? normalizeDate(this.tempDateFromControl.value)\n      : null;\n    const dateTo = this.tempDateToControl.value\n      ? normalizeDate(this.tempDateToControl.value)\n      : null;\n\n    const ensured = DateTimeContextUtil.ensureIsoContext({\n      interval: TIME_INTERVAL.CUSTOM,\n      dateFrom,\n      dateTo\n    });\n\n    const next: DateTimeContext = {\n      interval: ensured.interval ?? TIME_INTERVAL.CUSTOM,\n      dateFrom: ensured.dateFrom,\n      dateTo: ensured.dateTo\n    };\n\n    this.canEmit.set(true);\n    this.customSnapshot.set(null);\n\n    this.form.patchValue(next, { emitEvent: false });\n    if (this.onChangeCallback) {\n      this.onChangeCallback({ ...next });\n    }\n  }\n\n  private updateDates(dates: [Date, Date], interval: TimeInterval): void {\n    const [dateFrom, dateTo] = dates.map(date => DateTimeContextUtil.toIso(date));\n    this.form.patchValue({ dateFrom, dateTo, interval });\n  }\n\n  private syncTempControls(): void {\n    const dateFrom = this.form.get('dateFrom')?.value;\n    const dateTo = this.form.get('dateTo')?.value;\n    this.tempDateFromControl.setValue(dateFrom, { emitEvent: false });\n    this.tempDateToControl.setValue(dateTo, { emitEvent: false });\n  }\n\n  private normalizeContext(value: DateTimeContext): DateTimeContext {\n    const normalized = { ...value };\n    if (normalized?.dateFrom instanceof Date) {\n      normalized.dateFrom = normalized.dateFrom.toISOString();\n    }\n    if (normalized?.dateTo instanceof Date) {\n      normalized.dateTo = normalized.dateTo.toISOString();\n    }\n    return normalized;\n  }\n\n  private normalizeTimestamp(dateStr: string): number {\n    const date = new Date(dateStr);\n    date.setSeconds(0, 0);\n    return date.getTime();\n  }\n\n  private closeDropdown(): void {\n    if (this.dropdown?.isOpen) {\n      this.dropdown.hide();\n    }\n  }\n}\n","@if (form) {\n  @let intervalValue = form.get('interval')?.value;\n  @let isIntervalNone = intervalValue === 'none';\n  @let dateFromControl = form.get('dateFrom');\n  @let dateToControl = form.get('dateTo');\n  @let dateRangeLabel = getDateRangeLabel();\n\n  <form [formGroup]=\"form\">\n    <div\n      class=\"dropdown max-width-100\"\n      container=\"body\"\n      #dropdown=\"bs-dropdown\"\n      dropdown\n      [insideClick]=\"true\"\n      [isDisabled]=\"disabled\"\n      (onShown)=\"onShownDropdown()\"\n      (onHidden)=\"onHiddenDropdown()\"\n    >\n      <!-- Dropdown toggle button with better accessibility -->\n      <button\n        class=\"dropdown-toggle form-control l-h-tight d-flex a-i-center\"\n        [attr.aria-label]=\"dateRangeLabel\"\n        [tooltip]=\"dateRangeLabel\"\n        placement=\"top\"\n        container=\"body\"\n        [adaptivePosition]=\"false\"\n        [delay]=\"500\"\n        dropdownToggle\n        data-cy=\"c8y-date-time-context-picker--picker-toggle\"\n      >\n        <i\n          class=\"m-r-4\"\n          [c8yIcon]=\"'schedule1'\"\n          aria-hidden=\"true\"\n        ></i>\n        <div class=\"d-col text-left flex-grow min-width-0\">\n          @if (isIntervalNone) {\n            <span class=\"text-10 text-muted l-h-1\">\n              {{ 'No date filter' | translate }}\n            </span>\n          } @else {\n            <span\n              class=\"text-10 text-muted l-h-1\"\n              data-cy=\"c8y-date-time-context-picker--picker-label\"\n            >\n              {{ INTERVALS[intervalValue] | translate }}\n            </span>\n            <span\n              class=\"text-12 l-h-1 text-medium text-truncate\"\n              data-cy=\"c8y-date-time-context-picker--picker-time-range\"\n            >\n              {{ form.get('dateFrom')?.value | c8yDate: DATE_FORMAT }} —\n              {{ form.get('dateTo')?.value | c8yDate: DATE_FORMAT }}\n            </span>\n          }\n        </div>\n        <span\n          class=\"caret m-r-16 m-l-4\"\n          aria-hidden=\"true\"\n        ></span>\n      </button>\n\n      <!-- Dropdown menu -->\n      <ul\n        class=\"dropdown-menu dropdown-menu--date-range\"\n        role=\"menu\"\n        *dropdownMenu\n      >\n        @if (dropdown.isOpen) {\n          <!-- Interval picker section -->\n          <c8y-interval-picker\n            class=\"d-contents\"\n            formControlName=\"interval\"\n            [shouldDisableInterval]=\"shouldDisableInterval\"\n          ></c8y-interval-picker>\n\n          <!-- Custom date range section -->\n          @if (isCustomMode() && (config?.showDateFrom || config?.showDateTo)) {\n            <div class=\"p-l-16 p-r-16\">\n              @if (config?.showDateFrom) {\n                <c8y-form-group [class.has-error]=\"getDateFromErrors()\">\n                  <label\n                    [title]=\"'From`date`' | translate\"\n                    for=\"dateFrom\"\n                    translate\n                  >\n                    From`date`\n                  </label>\n                  <c8y-date-time-picker\n                    [class.has-error]=\"getDateFromErrors()\"\n                    id=\"dateFrom\"\n                    [maxDate]=\"tempDateToControl?.value\"\n                    [placeholder]=\"'From`date`' | translate\"\n                    [formControl]=\"tempDateFromControl\"\n                  ></c8y-date-time-picker>\n                  <c8y-messages [show]=\"getDateFromErrors()\">\n                    <c8y-message\n                      name=\"dateAfterRangeMax\"\n                      [text]=\"errorMessages.dateAfterRangeMax | translate\"\n                    ></c8y-message>\n                    <c8y-message\n                      name=\"dateBeforeRangeMin\"\n                      [text]=\"errorMessages.dateBeforeRangeMin | translate\"\n                    ></c8y-message>\n                    <c8y-message\n                      name=\"invalidDateTime\"\n                      [text]=\"errorMessages.invalidDateTime | translate\"\n                    ></c8y-message>\n                    <c8y-message\n                      name=\"bsDate\"\n                      [text]=\"errorMessages.invalidDateTime | translate\"\n                    ></c8y-message>\n                    <c8y-message\n                      name=\"invalidDateRange\"\n                      [text]=\"errorMessages.invalidDateRange | translate\"\n                    ></c8y-message>\n                  </c8y-messages>\n                </c8y-form-group>\n              }\n\n              @if (config?.showDateTo) {\n                <c8y-form-group [class.has-error]=\"getDateToErrors()\">\n                  <label\n                    [title]=\"'To`date`' | translate\"\n                    for=\"dateTo\"\n                    translate\n                  >\n                    To`date`\n                  </label>\n                  <c8y-date-time-picker\n                    [class.has-error]=\"getDateToErrors()\"\n                    id=\"dateTo\"\n                    [minDate]=\"tempDateFromControl?.value\"\n                    [placeholder]=\"'To`date`' | translate\"\n                    [formControl]=\"tempDateToControl\"\n                  ></c8y-date-time-picker>\n                  <c8y-messages [show]=\"getDateToErrors()\">\n                    <c8y-message\n                      name=\"dateAfterRangeMax\"\n                      [text]=\"errorMessages.dateAfterRangeMax | translate\"\n                    ></c8y-message>\n                    <c8y-message\n                      name=\"dateBeforeRangeMin\"\n                      [text]=\"errorMessages.dateBeforeRangeMin | translate\"\n                    ></c8y-message>\n                    <c8y-message\n                      name=\"invalidDateTime\"\n                      [text]=\"errorMessages.invalidDateTime | translate\"\n                    ></c8y-message>\n                    <c8y-message\n                      name=\"bsDate\"\n                      [text]=\"errorMessages.invalidDateTime | translate\"\n                    ></c8y-message>\n                    <c8y-message\n                      name=\"invalidDateRange\"\n                      [text]=\"errorMessages.invalidDateRange | translate\"\n                    ></c8y-message>\n                  </c8y-messages>\n                </c8y-form-group>\n              }\n            </div>\n\n            <!-- Action buttons -->\n            <div class=\"p-16 d-flex gap-8 separator-top\">\n              <button\n                class=\"btn btn-default btn-sm flex-grow\"\n                title=\"{{ 'Reset' | translate }}\"\n                type=\"button\"\n                (click)=\"reset()\"\n                translate\n              >\n                Reset\n              </button>\n\n              <button\n                class=\"btn btn-primary btn-sm flex-grow\"\n                title=\"{{ 'Apply' | translate }}\"\n                type=\"button\"\n                (click)=\"applyDateTimeContext()\"\n                [disabled]=\"isApplyDisabled()\"\n                translate\n              >\n                Apply\n              </button>\n            </div>\n          }\n        }\n      </ul>\n    </div>\n  </form>\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  DestroyRef,\n  Input,\n  inject,\n  output,\n  signal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormBuilder, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { C8yTranslatePipe, FormGroupComponent, IconDirective } from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { debounceTime } from 'rxjs';\nimport { REFRESH_OPTION } from '../../../models/auto-refresh.model';\nimport type { DateTimeContext } from '../../../models/date-time-context-picker.model';\nimport { GLOBAL_CONTEXT_DEFAULTS } from '../../../models';\nimport type {\n  GlobalContextSettings,\n  GlobalContextState\n} from '../../../models/global-context.model';\nimport { fillMissingDefaults } from '../../../utils/global-context-defaults.util';\nimport { DateTimeContextPickerComponent } from '../../time-context/time-range-picker/date-time-context-picker.component';\n\n/**\n * Component for configuring live mode settings\n * Stateless component that emits changes immediately\n */\n@Component({\n  selector: 'c8y-live-mode-configuration-controls',\n  templateUrl: './live-mode-configuration-controls.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    C8yTranslatePipe,\n    TooltipModule,\n    ReactiveFormsModule,\n    DateTimeContextPickerComponent,\n    IconDirective,\n    FormsModule,\n    PopoverModule,\n    FormGroupComponent\n  ]\n})\nexport class LiveModeConfigurationControlsComponent {\n  // Popover messages for translation extraction\n  readonly REFRESH_POPOVER_MESSAGE = gettext(\n    'The update method is determined by the widget type. Some widgets support real-time updates via WebSocket connection, while others use periodic refreshes.'\n  );\n  readonly TIME_RANGE_PICKER_POPOVER = gettext(\n    'Sets a rolling time window relative to the current time. As time progresses, the window automatically shifts to maintain the selected duration, always showing the most recent data.'\n  );\n\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly formBuilder = inject(FormBuilder);\n\n  private readonly settingsSignal = signal<Partial<GlobalContextSettings>>({\n    showAutoRefresh: true,\n    showTimeContext: true\n  });\n  private readonly defaultLiveContext = fillMissingDefaults({ refreshOption: REFRESH_OPTION.LIVE });\n  private readonly currentContext = signal<GlobalContextState>(\n    structuredClone(this.defaultLiveContext)\n  );\n\n  @Input()\n  set settings(value: Partial<GlobalContextSettings> | null) {\n    this.settingsSignal.set({\n      showAutoRefresh: true,\n      showTimeContext: true,\n      ...(value ?? {})\n    });\n  }\n  get settings(): Partial<GlobalContextSettings> {\n    return this.settingsSignal();\n  }\n\n  @Input()\n  set context(value: GlobalContextState | null) {\n    if (!value) {\n      return;\n    }\n\n    const normalized = fillMissingDefaults({\n      ...value,\n      refreshOption: REFRESH_OPTION.LIVE\n    });\n    const cloned = structuredClone(normalized);\n\n    this.currentContext.set(cloned);\n    this.patchFormFromContext(cloned);\n  }\n\n  readonly contextChange = output<Partial<GlobalContextState>>();\n\n  form: ReturnType<typeof this.createForm>;\n\n  constructor() {\n    this.form = this.createForm();\n\n    this.form.valueChanges\n      .pipe(takeUntilDestroyed(this.destroyRef), debounceTime(100))\n      .subscribe(value => {\n        this.contextChange.emit({\n          dateTimeContext: value.dateTimeContext ?? null,\n          refreshInterval: GLOBAL_CONTEXT_DEFAULTS.REFRESH_INTERVAL,\n          isAutoRefreshEnabled: value.isAutoRefreshEnabled ?? null,\n          aggregation: null\n        });\n      });\n\n    this.patchFormFromContext(this.currentContext());\n  }\n\n  private createForm() {\n    return this.formBuilder.group({\n      dateTimeContext: this.formBuilder.control<DateTimeContext | null>(null),\n      refreshInterval: this.formBuilder.control<number>(GLOBAL_CONTEXT_DEFAULTS.REFRESH_INTERVAL),\n      isAutoRefreshEnabled: this.formBuilder.control<boolean | null>(true)\n    });\n  }\n\n  private patchFormFromContext(context?: GlobalContextState): void {\n    if (!this.form) {\n      return;\n    }\n\n    const ctx = context ?? this.currentContext();\n    const { dateTimeContext, isAutoRefreshEnabled } = ctx;\n    this.form.patchValue(\n      {\n        dateTimeContext: dateTimeContext ? structuredClone(dateTimeContext) : null,\n        refreshInterval: GLOBAL_CONTEXT_DEFAULTS.REFRESH_INTERVAL,\n        isAutoRefreshEnabled: isAutoRefreshEnabled ?? null\n      },\n      { emitEvent: false }\n    );\n  }\n}\n","@if (form) {\n  @let SHOW_TIME_CONTEXT = settings.showTimeContext;\n  @let SHOW_AUTO_REFRESH = settings.showAutoRefresh;\n\n  <form [formGroup]=\"form\">\n    <div class=\"content-flex-82\">\n      <div class=\"col-5\">\n        @if (SHOW_TIME_CONTEXT) {\n          <fieldset class=\"c8y-fieldset\">\n            <legend>\n              <div class=\"standalone btn-icon-dot__item time-context m-r-4\">\n                <i [c8yIcon]=\"'calendar'\"></i>\n              </div>\n              {{ 'Date & time' | translate }}\n              <button\n                class=\"btn-help btn-help--sm\"\n                [attr.aria-label]=\"'Help' | translate\"\n                [popover]=\"TIME_RANGE_PICKER_POPOVER | translate\"\n                placement=\"top\"\n                triggers=\"focus\"\n                container=\"body\"\n                type=\"button\"\n                [adaptivePosition]=\"true\"\n              ></button>\n            </legend>\n            <c8y-form-group class=\"m-b-4 p-t-16 p-b-16\">\n              <c8y-date-time-context-picker\n                formControlName=\"dateTimeContext\"\n                [config]=\"{ showDateTo: false, showDateFrom: true }\"\n              ></c8y-date-time-context-picker>\n            </c8y-form-group>\n          </fieldset>\n        }\n      </div>\n      <div class=\"col-3\">\n        @if (SHOW_AUTO_REFRESH) {\n          <fieldset class=\"c8y-fieldset\">\n            <legend class=\"d-flex\">\n              <div class=\"standalone btn-icon-dot__item auto-refresh m-r-4\">\n                <i [c8yIcon]=\"'refresh'\"></i>\n              </div>\n              {{ 'Auto refresh' | translate }}\n              <button\n                class=\"btn-help btn-help--sm\"\n                [attr.aria-label]=\"'Help' | translate\"\n                [popover]=\"REFRESH_POPOVER_MESSAGE | translate\"\n                placement=\"top\"\n                triggers=\"focus\"\n                container=\"body\"\n                type=\"button\"\n                [adaptivePosition]=\"true\"\n              ></button>\n            </legend>\n            <c8y-form-group class=\"m-b-8 form-group-sm p-t-16 p-b-16\">\n              <div class=\"d-flex gap-8 a-i-center\">\n                <label class=\"c8y-switch c8y-switch--inline\">\n                  <input\n                    type=\"checkbox\"\n                    #arInput\n                    formControlName=\"isAutoRefreshEnabled\"\n                  />\n                  <span></span>\n                  <span>\n                    {{ 'Auto refresh enabled' | translate }}\n                  </span>\n                </label>\n              </div>\n            </c8y-form-group>\n          </fieldset>\n        }\n      </div>\n    </div>\n  </form>\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  TemplateRef,\n  computed,\n  effect,\n  input,\n  output,\n  viewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport {\n  C8yTranslatePipe,\n  FormsModule,\n  IconDirective,\n  TabWithTemplate,\n  TabsOutletComponent\n} from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport type { RefreshOption } from '../../../models/auto-refresh.model';\nimport { REFRESH_OPTION } from '../../../models/auto-refresh.model';\nimport type {\n  GlobalContextSettings,\n  GlobalContextState\n} from '../../../models/global-context.model';\nimport { HistoryModeConfigurationControlsComponent } from '../history-mode-configuration-controls/history-mode-configuration-controls.component';\nimport { LiveModeConfigurationControlsComponent } from '../live-mode-configuration-controls/live-mode-configuration-controls.component';\n\ntype InlineTab = TabWithTemplate & { isActive?: boolean };\n\n@Component({\n  selector: 'c8y-configuration-controls',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <div class=\"p-relative fit-h\">\n      <div [attr.class]=\"containerClass()\">\n        <c8y-tabs-outlet\n          [orientation]=\"controlsDisplayMode()\"\n          [outletName]=\"resolvedOutletName()\"\n          [attr.outletname]=\"resolvedOutletName()\"\n          [openFirstTab]=\"false\"\n          [tabs]=\"inlineTabs()\"\n        ></c8y-tabs-outlet>\n\n        @if (selectedMode() === REFRESH_OPTION.LIVE) {\n          <div class=\"p-l-24 p-r-24 fit-w min-width-0\">\n            <c8y-live-mode-configuration-controls\n              [settings]=\"settings()\"\n              [context]=\"liveContext()\"\n              (contextChange)=\"handleLiveChanges($event)\"\n            ></c8y-live-mode-configuration-controls>\n          </div>\n        }\n\n        @if (selectedMode() === REFRESH_OPTION.HISTORY) {\n          <div class=\"p-l-24 p-r-24 fit-w min-width-0\">\n            <c8y-history-mode-configuration-controls\n              [settings]=\"settings()\"\n              [context]=\"historyContext()\"\n              (contextChange)=\"handleHistoryChanges($event)\"\n              (validationStatus)=\"handleValidationStatus($event)\"\n            ></c8y-history-mode-configuration-controls>\n          </div>\n        }\n      </div>\n\n      <ng-template #LiveTab>\n        <i [c8yIcon]=\"'process'\"></i>\n        <div>\n          <p class=\"text-bold\">{{ MODE_LABELS.LIVE | translate }}</p>\n          <p class=\"tab-description text-12 l-h-tight\">\n            {{ MODE_DESCRIPTIONS.LIVE | translate }}\n          </p>\n        </div>\n      </ng-template>\n      <ng-template #HistoryTab>\n        <i [c8yIcon]=\"'schedule1'\"></i>\n        <div>\n          <p class=\"text-bold\">{{ MODE_LABELS.HISTORY | translate }}</p>\n          <p class=\"tab-description text-12  l-h-tight\">\n            {{ MODE_DESCRIPTIONS.HISTORY | translate }}\n          </p>\n        </div>\n      </ng-template>\n    </div>\n  `,\n  standalone: true,\n  imports: [\n    TooltipModule,\n    CollapseModule,\n    TabsOutletComponent,\n    ReactiveFormsModule,\n    FormsModule,\n    PopoverModule,\n    HistoryModeConfigurationControlsComponent,\n    LiveModeConfigurationControlsComponent,\n    C8yTranslatePipe,\n    IconDirective\n  ]\n})\nexport class ConfigurationControlsComponent {\n  readonly MODE_LABELS = {\n    LIVE: gettext('Live'),\n    HISTORY: gettext('History')\n  } as const;\n\n  readonly MODE_DESCRIPTIONS = {\n    LIVE: gettext('Dynamic time window that moves with current time to show recent data.'),\n    HISTORY: gettext('Fixed time period for analyzing historical data.')\n  } as const;\n  readonly REFRESH_OPTION = REFRESH_OPTION;\n\n  readonly controlsDisplayMode = input<'horizontal' | 'vertical'>('vertical');\n  readonly settings = input<Partial<GlobalContextSettings>>({\n    showAutoRefresh: true,\n    showTimeContext: true,\n    showAggregation: true\n  });\n  readonly activeMode = input<RefreshOption>(REFRESH_OPTION.LIVE);\n  readonly liveContext = input<GlobalContextState | null>(null);\n  readonly historyContext = input<GlobalContextState | null>(null);\n  readonly supportedModes = input<RefreshOption[]>([REFRESH_OPTION.LIVE, REFRESH_OPTION.HISTORY]);\n\n  readonly tabsOutletName = input<string | null>(null);\n  private readonly liveTabSelect = new EventEmitter<void>();\n  private readonly historyTabSelect = new EventEmitter<void>();\n  readonly refreshOptionChange = output<RefreshOption>();\n  readonly contextChange = output<Partial<GlobalContextState>>();\n  readonly validationStatus = output<boolean>();\n\n  readonly selectedMode = computed(() => this.activeMode());\n  readonly containerClass = computed(() =>\n    this.controlsDisplayMode() === 'horizontal' ? 'horizontal d-col' : 'd-flex'\n  );\n  readonly resolvedOutletName = computed(\n    () => this.tabsOutletName() ?? 'verticalTabOutletForConfigurationModes'\n  );\n\n  readonly liveTabTemplate = viewChild<TemplateRef<any>>('LiveTab');\n  readonly historyTabTemplate = viewChild<TemplateRef<any>>('HistoryTab');\n\n  readonly inlineTabs = computed(() => {\n    const liveTemp = this.liveTabTemplate();\n    const historyTemp = this.historyTabTemplate();\n\n    if (!liveTemp || !historyTemp) {\n      return [];\n    }\n\n    const modes = this.supportedModes();\n    const allTabs: InlineTab[] = [\n      {\n        title: this.MODE_LABELS.LIVE,\n        template: liveTemp,\n        showAlways: true,\n        tabsOutlet: this.resolvedOutletName(),\n        onSelect: this.liveTabSelect,\n        isActive: this.selectedMode() === REFRESH_OPTION.LIVE\n      },\n      {\n        title: this.MODE_LABELS.HISTORY,\n        template: historyTemp,\n        showAlways: true,\n        tabsOutlet: this.resolvedOutletName(),\n        onSelect: this.historyTabSelect,\n        isActive: this.selectedMode() === REFRESH_OPTION.HISTORY\n      }\n    ];\n\n    return allTabs.filter((tab, index) => {\n      const mode = index === 0 ? REFRESH_OPTION.LIVE : REFRESH_OPTION.HISTORY;\n      return modes.includes(mode);\n    });\n  });\n\n  constructor() {\n    this.liveTabSelect\n      .pipe(takeUntilDestroyed())\n      .subscribe(() => this.handleTabSelect(REFRESH_OPTION.LIVE));\n    this.historyTabSelect\n      .pipe(takeUntilDestroyed())\n      .subscribe(() => this.handleTabSelect(REFRESH_OPTION.HISTORY));\n\n    // Validate active mode and fallback to first available if not supported\n    effect(() => {\n      const currentMode = this.activeMode();\n      const modes = this.supportedModes();\n\n      if (!modes.includes(currentMode) && modes.length > 0) {\n        this.refreshOptionChange.emit(modes[0]);\n      }\n    });\n\n    // Emit validation status when mode changes\n    effect(() => {\n      const mode = this.selectedMode();\n      if (mode === REFRESH_OPTION.LIVE) {\n        this.validationStatus.emit(true);\n      }\n    });\n  }\n\n  handleTabSelect(mode: RefreshOption): void {\n    if (this.selectedMode() === mode) {\n      return;\n    }\n\n    this.refreshOptionChange.emit(mode);\n  }\n\n  handleLiveChanges(changes: Partial<GlobalContextState>): void {\n    this.contextChange.emit({ ...changes, refreshOption: REFRESH_OPTION.LIVE });\n  }\n\n  handleHistoryChanges(changes: Partial<GlobalContextState>): void {\n    this.contextChange.emit({ ...changes, refreshOption: REFRESH_OPTION.HISTORY });\n  }\n\n  handleValidationStatus(isValid: boolean): void {\n    this.validationStatus.emit(isValid);\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n  Input,\n  output,\n  signal\n} from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { C8yTranslatePipe, FormsModule } from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { isEqual } from 'lodash-es';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport type { RefreshOption } from '../../../models/auto-refresh.model';\nimport { REFRESH_OPTION } from '../../../models/auto-refresh.model';\nimport { TIME_DURATION } from '../../../models/constants';\nimport type { GlobalContextState } from '../../../models/global-context.model';\nimport { TIME_INTERVAL } from '../../../models/interval-picker.model';\nimport { fillMissingDefaults } from '../../../utils/global-context-defaults.util';\nimport { ConfigurationControlsComponent } from '../configuration-controls/configuration-controls.component';\n\n@Component({\n  selector: 'c8y-configuration-collapse',\n  templateUrl: './configuration-collapse.component.html',\n  host: { class: 'd-contents' },\n  standalone: true,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    TooltipModule,\n    CollapseModule,\n    ReactiveFormsModule,\n    FormsModule,\n    PopoverModule,\n    ConfigurationControlsComponent,\n    C8yTranslatePipe\n  ]\n})\nexport class ConfigurationCollapseComponent {\n  readonly REFRESH_OPTION = REFRESH_OPTION;\n\n  readonly isCollapsed = signal(true);\n  readonly shouldSave = signal(false);\n  readonly hasPendingChanges = signal(false);\n  readonly activeMode = signal<RefreshOption>(REFRESH_OPTION.LIVE);\n  readonly supportedModes = input<RefreshOption[]>([REFRESH_OPTION.LIVE, REFRESH_OPTION.HISTORY]);\n  readonly isFormValid = signal(true);\n\n  readonly helpText = gettext(\n    'When checked, saves these settings as the default configuration for this dashboard. If unchecked, changes will only apply for the current session and will reset when you reload the page.'\n  );\n\n  private readonly latestContext = signal<GlobalContextState | null>(null);\n  private readonly snapshots = signal<Record<RefreshOption, GlobalContextState | null>>({\n    [REFRESH_OPTION.LIVE]: null,\n    [REFRESH_OPTION.HISTORY]: null\n  });\n\n  readonly liveViewContext = computed(() => {\n    return this.snapshots()[REFRESH_OPTION.LIVE] ?? undefined;\n  });\n  readonly historyViewContext = computed(() => {\n    return this.snapshots()[REFRESH_OPTION.HISTORY] ?? undefined;\n  });\n\n  @Input() set context(value: GlobalContextState) {\n    if (!value) {\n      return;\n    }\n\n    this.latestContext.set(structuredClone(value));\n\n    // CRITICAL: Don't update form snapshots while dropdown is open\n    // User is actively editing - external updates would overwrite their changes\n    if (this.isCollapsed()) {\n      this.activeMode.set(value.refreshOption ?? REFRESH_OPTION.LIVE);\n\n      this.snapshots.set({\n        [REFRESH_OPTION.LIVE]:\n          value.refreshOption === REFRESH_OPTION.LIVE ? structuredClone(value) : null,\n        [REFRESH_OPTION.HISTORY]:\n          value.refreshOption === REFRESH_OPTION.HISTORY ? structuredClone(value) : null\n      });\n\n      this.hasPendingChanges.set(false);\n    } else {\n      // Dropdown is open - only recalculate if current state differs from latest\n      this.recalculatePendingChanges();\n    }\n  }\n\n  readonly contextChange = output<Partial<GlobalContextState>>();\n  readonly refreshOptionChange = output<RefreshOption>();\n  readonly savePreferenceChange = output<boolean>();\n\n  toggle(): void {\n    this.isCollapsed.update(value => !value);\n  }\n\n  close(): void {\n    if (this.isCollapsed()) {\n      return;\n    }\n\n    this.isCollapsed.set(true);\n    this.resetToLatest();\n  }\n\n  onCollapsed(): void {\n    this.isCollapsed.set(true);\n    this.shouldSave.set(false);\n    this.resetToLatest();\n  }\n\n  onExpanded(): void {\n    this.isCollapsed.set(false);\n\n    const mode = this.activeMode();\n    const snapshot = this.snapshots()[mode];\n\n    if (!snapshot) {\n      const defaultContext = this.createDefaultContext(mode);\n      this.snapshots.update(previous => ({\n        ...previous,\n        [mode]: structuredClone(defaultContext)\n      }));\n    }\n\n    this.recalculatePendingChanges();\n  }\n\n  onModeChange(changes: Partial<GlobalContextState>): void {\n    const mode = changes.refreshOption ?? this.activeMode();\n    if (!mode) {\n      return;\n    }\n\n    const current = this.snapshots()[mode]\n      ? structuredClone(this.snapshots()[mode]!)\n      : this.createDefaultContext(mode);\n\n    const { refreshOption: _ignored, ...rest } = changes;\n    const merged: GlobalContextState = { ...current, ...rest, refreshOption: mode };\n\n    if (mode === REFRESH_OPTION.LIVE) {\n      const normalized = fillMissingDefaults({ ...merged, refreshOption: REFRESH_OPTION.LIVE });\n      merged.dateTimeContext = normalized.dateTimeContext;\n      merged.isAutoRefreshEnabled = normalized.isAutoRefreshEnabled;\n      merged.refreshInterval = normalized.refreshInterval;\n    }\n\n    this.snapshots.update(previous => ({\n      ...previous,\n      [mode]: structuredClone(merged)\n    }));\n\n    if (mode === this.activeMode()) {\n      this.recalculatePendingChanges();\n    }\n  }\n\n  onModeSelected(mode: RefreshOption): void {\n    if (this.activeMode() === mode) {\n      return;\n    }\n\n    this.activeMode.set(mode);\n\n    const snapshot = this.snapshots()[mode];\n    if (!snapshot) {\n      const defaultContext = this.createDefaultContext(mode);\n      this.snapshots.update(previous => ({\n        ...previous,\n        [mode]: structuredClone(defaultContext)\n      }));\n    }\n\n    this.recalculatePendingChanges();\n  }\n\n  apply(): void {\n    const shouldPersist = this.shouldSave();\n    this.savePreferenceChange.emit(shouldPersist);\n\n    if (!this.hasPendingChanges()) {\n      return;\n    }\n\n    const mode = this.activeMode();\n    const activeSnapshot = this.snapshots()[mode];\n    if (!activeSnapshot) {\n      return;\n    }\n\n    const payload = structuredClone(activeSnapshot);\n\n    this.contextChange.emit(payload);\n    this.refreshOptionChange.emit(mode);\n\n    this.latestContext.set(structuredClone(payload));\n\n    this.hasPendingChanges.set(false);\n    this.shouldSave.set(false);\n    this.isCollapsed.set(true);\n  }\n\n  shouldSaveInDashboard(change: boolean): void {\n    this.shouldSave.set(change);\n  }\n\n  onValidationStatusChange(isValid: boolean): void {\n    this.isFormValid.set(isValid);\n  }\n\n  private resetToLatest(): void {\n    const latest = this.latestContext();\n    const latestMode = latest?.refreshOption ?? REFRESH_OPTION.LIVE;\n\n    this.snapshots.set({\n      [REFRESH_OPTION.LIVE]:\n        latest && latestMode === REFRESH_OPTION.LIVE ? structuredClone(latest) : null,\n      [REFRESH_OPTION.HISTORY]:\n        latest && latestMode === REFRESH_OPTION.HISTORY ? structuredClone(latest) : null\n    });\n\n    this.activeMode.set(latestMode);\n    this.hasPendingChanges.set(false);\n    this.shouldSave.set(false);\n    this.isFormValid.set(true);\n  }\n\n  private createDefaultContext(mode: RefreshOption): GlobalContextState {\n    if (mode === REFRESH_OPTION.LIVE) {\n      return fillMissingDefaults({ refreshOption: REFRESH_OPTION.LIVE });\n    }\n\n    const now = new Date();\n    const dateTo = now.toISOString();\n    const dateFrom = new Date(now.getTime() - TIME_DURATION.ONE_HOUR_MS).toISOString();\n\n    return {\n      refreshOption: REFRESH_OPTION.HISTORY,\n      dateTimeContext: {\n        dateFrom,\n        dateTo,\n        interval: TIME_INTERVAL.CUSTOM\n      },\n      aggregation: null\n    };\n  }\n\n  private recalculatePendingChanges(): void {\n    const latest = this.latestContext();\n    if (!latest) {\n      this.hasPendingChanges.set(false);\n      return;\n    }\n\n    const latestMode = latest.refreshOption ?? REFRESH_OPTION.LIVE;\n    if (this.activeMode() !== latestMode) {\n      this.hasPendingChanges.set(true);\n      return;\n    }\n\n    const snapshot = this.snapshots()[this.activeMode()];\n    if (!snapshot) {\n      this.hasPendingChanges.set(false);\n      return;\n    }\n\n    this.hasPendingChanges.set(!isEqual(snapshot, latest));\n  }\n}\n","<div\n  class=\"c8y-global-context\"\n  [collapse]=\"isCollapsed()\"\n  (collapsed)=\"onCollapsed()\"\n  (expanded)=\"onExpanded()\"\n  [isAnimated]=\"true\"\n>\n  <div class=\"p-t-16 p-b-16 p-l-24 p-r-24 separator-bottom\">\n    <span\n      class=\"h4\"\n      translate\n    >\n      Time mode\n    </span>\n  </div>\n  <div>\n    @if (!isCollapsed()) {\n      <c8y-configuration-controls\n        [activeMode]=\"activeMode()\"\n        [liveContext]=\"liveViewContext()\"\n        [historyContext]=\"historyViewContext()\"\n        [supportedModes]=\"supportedModes()\"\n        (refreshOptionChange)=\"onModeSelected($event)\"\n        (contextChange)=\"onModeChange($event)\"\n        (validationStatus)=\"onValidationStatusChange($event)\"\n      ></c8y-configuration-controls>\n    }\n  </div>\n  <div class=\"c8y-top-drawer--footer\">\n    <div class=\"d-flex a-i-center gap-8\">\n      <button\n        class=\"btn btn-default\"\n        [title]=\"'Close help' | translate\"\n        aria-controls=\"collapseHelp\"\n        [attr.aria-expanded]=\"!isCollapsed()\"\n        type=\"button\"\n        (click)=\"toggle()\"\n        translate\n      >\n        Close\n      </button>\n      <button\n        class=\"btn btn-primary\"\n        [title]=\"'Apply global context' | translate\"\n        aria-controls=\"collapseHelp\"\n        [attr.aria-expanded]=\"!isCollapsed()\"\n        type=\"button\"\n        (click)=\"apply()\"\n        [disabled]=\"!hasPendingChanges() || !isFormValid()\"\n        translate\n        data-cy=\"global-date-context--Apply-button\"\n      >\n        Apply\n      </button>\n\n      <label class=\"c8y-checkbox d-flex align-items-center m-b-0\">\n        <input\n          class=\"m-r-4\"\n          type=\"checkbox\"\n          [ngModel]=\"shouldSave()\"\n          (ngModelChange)=\"shouldSaveInDashboard($event)\"\n        />\n        <span class=\"a-s-center m-r-8\"></span>\n        <span\n          class=\"text-truncate\"\n          translate\n        >\n          Save in dashboard configuration\n        </span>\n        <button\n          class=\"btn-help btn-help--sm m-l-4\"\n          [attr.aria-label]=\"'Help' | translate\"\n          [popover]=\"helpText | translate\"\n          placement=\"right\"\n          triggers=\"focus\"\n          container=\"body\"\n          type=\"button\"\n          [adaptivePosition]=\"true\"\n        ></button>\n      </label>\n    </div>\n  </div>\n</div>\n","import { inject, Injectable } from '@angular/core';\nimport { ActivatedRoute, NavigationExtras, Router } from '@angular/router';\nimport { aggregationType } from '@c8y/client';\nimport { map, Observable } from 'rxjs';\nimport { REFRESH_OPTION } from '../../models/auto-refresh.model';\nimport { GLOBAL_CONTEXT_DEFAULTS } from '../../models/global-context-defaults';\nimport {\n  DateContextParams,\n  DateContextQueryParamNames,\n  GlobalContextState,\n  InputDateContextQueryParams,\n  ParameterValidationStatus\n} from '../../models/global-context.model';\nimport { Interval, TIME_INTERVAL, TimeInterval } from '../../models/interval-picker.model';\nimport { DateTimeContextPickerService } from '../domain/date-time-context-picker.service';\nimport { DateTimeContextUtil } from '../../utils/date-time-context.util';\nimport { GlobalContextValidationService } from '../domain/global-context-validation.service';\n\n/**\n * Service responsible for managing date context query parameters in the URL.\n *\n * This service provides a centralized way to handle reading, writing, and validation\n * of date context query parameters. It supports both interval-based and date-range-based\n * time contexts, with interval taking precedence when both are present.\n *\n * Key features:\n * - Reactive query parameter changes via observables\n * - Validation of query parameter values\n * - Conversion between query parameters and typed objects\n * - URL navigation with proper parameter handling\n * - Support for both interval and custom date ranges\n *\n * @example\n * ```typescript\n * // Subscribe to query parameter changes\n * queryService.queryParamsChange$().subscribe(params => {\n *   console.log('Date context params:', params);\n * });\n *\n * // Set new query parameters\n * queryService.setDateContextQueryParams({\n *   interval: TIME_INTERVAL.DAYS,\n *   aggregation: aggregationType.HOURLY,\n *   isAutoRefreshEnabled: true,\n *   refreshOption: 'live'\n * });\n *\n * // Get context from current URL\n * const context = queryService.dateTimeContextFromQueryParams();\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class GlobalContextQueryService {\n  private activatedRoute = inject(ActivatedRoute);\n  private dateTimeContextPickerService = inject(DateTimeContextPickerService);\n  private router = inject(Router);\n  private validationService = inject(GlobalContextValidationService);\n\n  /**\n   * Stores the state when browser navigation occurs via back/forward buttons.\n   * Used to preserve the global context state during browser history navigation\n   * to ensure consistency between URL and component state.\n   */\n  navigationPopState = null;\n\n  /**\n   * Returns an observable that emits processed date context query parameters.\n   *\n   * This observable emits every time the route's query parameters change, providing\n   * validated and typed parameter values. Invalid parameter values are automatically\n   * filtered out and replaced with null or undefined as appropriate.\n   *\n   * The emitted object includes:\n   * - `dateContextInterval`: Validated interval ID or null\n   * - `dateContextAggregation`: Validated aggregation type or null\n   * - `globalContextAutoRefresh`: Parsed boolean value or undefined\n   * - All other original query parameters (preserved as-is)\n   *\n   * @returns Observable that emits InputDateContextQueryParams whenever route query params change\n   *\n   * @example\n   * ```typescript\n   * // Subscribe to parameter changes\n   * queryService.queryParamsChange$().pipe(\n   *   takeUntilDestroyed()\n   * ).subscribe(params => {\n   *   if (params.dateContextInterval) {\n   *     console.log('Valid interval:', params.dateContextInterval);\n   *   }\n   *   if (params.globalContextAutoRefresh === true) {\n   *     console.log('Auto-refresh is enabled');\n   *   }\n   * });\n   * ```\n   */\n  queryParamsChange$(): Observable<InputDateContextQueryParams> {\n    // Get root route for consistent query param access\n    let currentRoute = this.activatedRoute;\n    while (currentRoute.parent) {\n      currentRoute = currentRoute.parent;\n    }\n\n    return currentRoute.queryParams.pipe(\n      map((params: Record<DateContextQueryParamNames, string>) => this.processQueryParams(params))\n    );\n  }\n\n  /**\n   * Creates a global context state object from the current route's query parameters.\n   *\n   * This method reads the current query parameters and attempts to build a valid\n   * GlobalContextState object. It handles validation of parameters and applies\n   * business logic for parameter precedence and conflicts.\n   *\n   * **Parameter Precedence Rules:**\n   * 1. **Interval takes precedence**: If a valid interval is provided, any date range\n   *    parameters (dateFrom/dateTo) are ignored and recalculated based on the interval\n   * 2. **Date range fallback**: If no valid interval is found, the method attempts\n   *    to use explicit date range parameters\n   * 3. **Partial context**: If only non-temporal parameters are valid (aggregation,\n   *    refresh settings), a partial context without dateTimeContext is returned\n   *\n   * **Validation Logic:**\n   * - Intervals are validated through DateTimeContextPickerService.isSelectableInterval()\n   * - Date ranges are validated through DateTimeContextPickerService.isValidDateRange()\n   * - Boolean parameters are strictly parsed (only 'true'/'false' strings accepted)\n   * - Invalid refresh modes default to 'live'\n   *\n   * @returns Partial GlobalContextState object with valid parameters, or null if no valid context can be built\n   *\n   * @example\n   * ```typescript\n   * // With interval parameter: ?dateContextInterval=DAYS&dateContextAggregation=HOURLY\n   * const context = queryService.dateTimeContextFromQueryParams();\n   * // Returns: {\n   * //   aggregation: 'HOURLY',\n   * //   dateTimeContext: {\n   * //     dateFrom: '2024-01-01T00:00:00.000Z',\n   * //     dateTo: '2024-01-02T00:00:00.000Z',\n   * //     interval: 'DAYS'\n   * //   }\n   * // }\n   *\n   * // With date range: ?dateContextFrom=2024-01-01&dateContextTo=2024-01-02\n   * const context2 = queryService.dateTimeContextFromQueryParams();\n   * // Returns: {\n   * //   dateTimeContext: {\n   * //     dateFrom: '2024-01-01',\n   * //     dateTo: '2024-01-02',\n   * //     interval: 'custom'\n   * //   }\n   * // }\n   *\n   * // Invalid parameters\n   * const context3 = queryService.dateTimeContextFromQueryParams();\n   * // Returns: null\n   * ```\n   */\n  dateTimeContextFromQueryParams(): Partial<GlobalContextState> | null {\n    // Try multiple methods to get query params due to Angular routing inconsistencies\n    let params = {};\n\n    // Method 1: Navigate up to root route to get query params\n    // Query params can be \"lost\" in child routes, so we traverse to the root\n    // where they are most reliably available during navigation\n    let currentRoute = this.activatedRoute;\n    while (currentRoute.parent) {\n      currentRoute = currentRoute.parent;\n    }\n    params = currentRoute.snapshot.queryParams;\n\n    // Method 2: Fallback to manual URL parsing if root route params are empty\n    if (!params || Object.keys(params).length === 0) {\n      const currentUrl = this.router.url;\n      if (currentUrl) {\n        const questionMarkIndex = currentUrl.indexOf('?');\n        if (questionMarkIndex > -1) {\n          const queryString = currentUrl.substring(questionMarkIndex + 1);\n          const urlParams = new URLSearchParams(queryString);\n          params = {};\n          urlParams.forEach((value, key) => {\n            params[key] = value;\n          });\n        }\n      }\n    }\n\n    // Extract and validate query parameters\n    const dateContextInterval = params[DateContextQueryParamNames.DATE_CONTEXT_INTERVAL];\n    const isValidInterval =\n      this.dateTimeContextPickerService.isSelectableInterval(dateContextInterval);\n\n    // Build the base context object without undefined values\n    const baseContext: Partial<GlobalContextState> = {};\n\n    const aggregation = params[DateContextQueryParamNames.DATE_CONTEXT_AGGREGATION];\n    if (aggregation) {\n      baseContext.aggregation = aggregation;\n    }\n\n    const refreshOption = params[DateContextQueryParamNames.DATE_CONTEXT_REFRESH_MODE];\n    if (refreshOption) {\n      baseContext.refreshOption =\n        refreshOption === REFRESH_OPTION.HISTORY || refreshOption === REFRESH_OPTION.LIVE\n          ? refreshOption\n          : GLOBAL_CONTEXT_DEFAULTS.REFRESH_OPTION;\n    }\n\n    const isAutoRefreshEnabled = this.validationService.parseBoolean(\n      params[DateContextQueryParamNames.DATE_CONTEXT_AUTO_REFRESH]\n    );\n    if (isAutoRefreshEnabled !== undefined) {\n      baseContext.isAutoRefreshEnabled = isAutoRefreshEnabled;\n    }\n\n    // Try to get context from interval first\n    if (isValidInterval && dateContextInterval) {\n      const intervalId = dateContextInterval as Interval['id'];\n      const range = DateTimeContextUtil.dateRangeFromInterval(\n        intervalId as unknown as TimeInterval\n      );\n      if (range) {\n        const [dateFrom, dateTo] = range;\n        return {\n          ...baseContext,\n          dateTimeContext: DateTimeContextUtil.ensureIsoContext({\n            interval: intervalId as unknown as TimeInterval,\n            dateFrom,\n            dateTo\n          })\n        };\n      }\n    }\n\n    // If interval not provided, try getting date range from query params\n    const dateRange = this.getDateContextFromQueryParams();\n    if (dateRange) {\n      return {\n        ...baseContext,\n        dateTimeContext: DateTimeContextUtil.ensureIsoContext({\n          interval: TIME_INTERVAL.CUSTOM,\n          dateFrom: dateRange[0],\n          dateTo: dateRange[1]\n        })\n      };\n    }\n\n    // If we have some context values but no valid time range,\n    // check if we should return the partial context or null\n    if (Object.keys(baseContext).length > 0) {\n      return baseContext;\n    }\n\n    // No valid context found at all\n    return null;\n  }\n\n  /**\n   * Updates the URL query parameters with new date context values.\n   *\n   * This method translates a context state object into URL query parameters and\n   * navigates to update the current route. It handles the mutual exclusivity\n   * between interval-based and date-range-based parameters.\n   *\n   * **Parameter Logic:**\n   * - **Interval mode**: When a valid interval is provided (not 'custom'),\n   *   date-specific parameters (dateFrom/dateTo) are cleared\n   * - **Date range mode**: When interval is 'custom' or undefined,\n   *   interval parameter is cleared and date range parameters are set\n   * - **Navigation behavior**: Uses 'merge' strategy to preserve other query parameters\n   * - **Browser history**: Handles popstate navigation differently than programmatic navigation\n   *\n   * **Performance Optimization:**\n   * The method includes normalization logic to prevent unnecessary navigation\n   * when the new parameters would result in the same normalized URL state.\n   *\n   * @param contextState Object containing the new context state values\n   * @param contextState.interval - Time interval ('DAYS', 'HOURS', etc.) or 'custom'\n   * @param contextState.date - Array of [dateFrom, dateTo] strings for custom ranges\n   * @param contextState.aggregation - Data aggregation type ('HOURLY', 'DAILY', etc.)\n   * @param contextState.isAutoRefreshEnabled - Whether auto-refresh should be enabled\n   * @param contextState.refreshOption - Refresh mode ('live' or 'history')\n   *\n   * @example\n   * ```typescript\n   * // Set interval-based context\n   * queryService.setDateContextQueryParams({\n   *   interval: TIME_INTERVAL.DAYS,\n   *   aggregation: aggregationType.HOURLY,\n   *   isAutoRefreshEnabled: true,\n   *   refreshOption: 'live'\n   * });\n   * // Results in: https://example.com/apps/cockpit/#/?dateContextInterval=DAYS&dateContextAggregation=HOURLY&globalContextAutoRefresh=true&globalContextRefreshMode=live\n   *\n   * // Set custom date range context\n   * queryService.setDateContextQueryParams({\n   *   interval: TIME_INTERVAL.CUSTOM,\n   *   date: ['2024-01-01T00:00:00.000Z', '2024-01-02T00:00:00.000Z'],\n   *   aggregation: aggregationType.DAILY,\n   *   isAutoRefreshEnabled: false,\n   *   refreshOption: 'history'\n   * });\n   * // Results in: https://example.com/apps/cockpit/#/?dateContextFrom=2024-01-01T00:00:00.000Z&dateContextTo=2024-01-02T00:00:00.000Z&dateContextAggregation=DAILY&globalContextAutoRefresh=false&globalContextRefreshMode=history\n   * ```\n   */\n  setDateContextQueryParams(contextState: DateContextParams): void {\n    const { interval, date, aggregation, isAutoRefreshEnabled, refreshOption } = contextState;\n    const queryParams = this.buildQueryParams({\n      interval,\n      date,\n      aggregation,\n      isAutoRefreshEnabled,\n      refreshOption\n    });\n\n    const navigation = this.router.getCurrentNavigation();\n\n    this.navigateWithQueryParams(queryParams, {\n      queryParamsHandling: 'merge',\n      state: {\n        clearParams: navigation?.trigger === 'popstate' ? false : true\n      }\n    });\n  }\n\n  /**\n   * Removes all date context query parameters from the current URL.\n   *\n   * This method performs a selective cleanup by detecting which date context\n   * parameters are currently present in the URL and removing only those.\n   * It preserves all non-date-context parameters unchanged.\n   *\n   * **Behavior:**\n   * - **Selective removal**: Only removes parameters that are actually present\n   * - **Preserve other params**: Non-date-context parameters remain unchanged\n   * - **No-op optimization**: If no date context parameters exist, no navigation occurs\n   * - **Merge strategy**: Uses 'merge' queryParamsHandling to maintain other URL state\n   *\n   * **Parameters removed (if present):**\n   * - `dateContextFrom`\n   * - `dateContextTo`\n   * - `dateContextInterval`\n   * - `dateContextAggregation`\n   * - `globalContextAutoRefresh`\n   * - `globalContextRefreshMode`\n   *\n   * @example\n   * ```typescript\n   * // Current URL: https://example.com/apps/cockpit/#/dashboard?dateContextInterval=DAYS&dateContextAggregation=HOURLY&otherParam=value\n   * queryService.checkAndRemoveDateContextParams();\n   * // Result URL: https://example.com/apps/cockpit/#/dashboard?otherParam=value\n   *\n   * // Current URL: https://example.com/apps/cockpit/#/dashboard?someOtherParam=value (no date context params)\n   * queryService.checkAndRemoveDateContextParams();\n   * // Result: No navigation occurs (no-op)\n   * ```\n   */\n  checkAndRemoveDateContextParams(): void {\n    const currentParams = this.activatedRoute.snapshot.queryParams;\n    const dateContextParamNames = Object.values(DateContextQueryParamNames);\n\n    // Check if any date context params exist in the current URL\n    const dateContextParamsPresent = dateContextParamNames.some(\n      paramName => currentParams[paramName] !== undefined\n    );\n\n    if (dateContextParamsPresent) {\n      // Create an object with null values for all date context params that are present\n      const paramsToRemove = dateContextParamNames.reduce(\n        (acc, paramName) => {\n          if (currentParams[paramName] !== undefined) {\n            acc[paramName] = null;\n          }\n          return acc;\n        },\n        {} as Record<string, null>\n      );\n\n      // Only navigate if there are params to remove\n      if (Object.keys(paramsToRemove).length > 0) {\n        this.navigateWithQueryParams(paramsToRemove, { queryParamsHandling: 'merge' });\n      }\n    }\n  }\n\n  /**\n   * Gets the current parameter validation status for debugging and UI state management.\n   *\n   * This method analyzes the current query parameters and returns detailed validation\n   * information for each parameter type. Useful for debugging parameter issues and\n   * providing user feedback about parameter validity.\n   *\n   * @returns ParameterValidationStatus object containing validation results for each parameter type\n   *\n   * @example\n   * ```typescript\n   * const status = queryService.getParameterValidationStatus();\n   *\n   * if (!status.interval && !status.dateRange) {\n   *   console.warn('No valid time context found in URL parameters');\n   * }\n   *\n   * if (status.autoRefresh === undefined) {\n   *   console.info('Auto-refresh parameter not specified or invalid');\n   * }\n   *\n   * // Use for conditional UI rendering\n   * const hasValidTimeContext = status.interval || status.dateRange;\n   * ```\n   */\n  getParameterValidationStatus(): ParameterValidationStatus {\n    // Get params from root route\n    let currentRoute = this.activatedRoute;\n    while (currentRoute.parent) {\n      currentRoute = currentRoute.parent;\n    }\n    const params = currentRoute.snapshot.queryParams;\n\n    return this.validationService.validateParameters({\n      interval: params[DateContextQueryParamNames.DATE_CONTEXT_INTERVAL],\n      aggregation: params[DateContextQueryParamNames.DATE_CONTEXT_AGGREGATION],\n      dateFrom: params[DateContextQueryParamNames.DATE_CONTEXT_FROM],\n      dateTo: params[DateContextQueryParamNames.DATE_CONTEXT_TO],\n      autoRefresh: params[DateContextQueryParamNames.DATE_CONTEXT_AUTO_REFRESH]\n    });\n  }\n\n  /**\n   * Validates if the current query parameters represent a valid global context.\n   *\n   * This is a convenience method that combines parameter validation with context building\n   * to determine if the URL contains sufficient valid parameters to create a global context.\n   *\n   * @returns True if current parameters can build a valid global context, false otherwise\n   *\n   * @example\n   * ```typescript\n   * if (queryService.hasValidContext()) {\n   *   const context = queryService.dateTimeContextFromQueryParams();\n   *   // Context is guaranteed to be non-null\n   * } else {\n   *   // Show default state or parameter input form\n   * }\n   * ```\n   */\n  hasValidContext(): boolean {\n    const context = this.dateTimeContextFromQueryParams();\n    return (\n      context !== null && (context.dateTimeContext !== undefined || Object.keys(context).length > 0)\n    );\n  }\n\n  /**\n   * Builds query parameters based on the provided context state.\n   * Chooses between interval-based or date-range-based parameters.\n   *\n   * @param contextState The global context state containing interval, date, aggregation, etc.\n   * @returns Record of query parameters to be set in the URL\n   */\n  private buildQueryParams(\n    contextState: DateContextParams\n  ): Record<DateContextQueryParamNames, null | string | boolean> {\n    const { interval, date, aggregation, isAutoRefreshEnabled, refreshOption } = contextState;\n    if (interval && interval !== TIME_INTERVAL.CUSTOM) {\n      return this.buildIntervalBasedQueryParams(\n        interval,\n        aggregation,\n        isAutoRefreshEnabled,\n        refreshOption\n      );\n    } else {\n      return this.buildDateRangeBasedQueryParams(\n        date,\n        aggregation,\n        isAutoRefreshEnabled,\n        refreshOption\n      );\n    }\n  }\n\n  /**\n   * Builds query parameters for interval-based time context.\n   * Clears date-specific parameters and sets interval-related ones.\n   *\n   * @param interval The time interval\n   * @param aggregation The aggregation type\n   * @param isAutoRefreshEnabled Auto-refresh enabled flag\n   * @param refreshOption The refresh option ('live' or 'history')\n   * @returns Query parameters object for interval-based context\n   */\n  private buildIntervalBasedQueryParams(\n    interval: string,\n    aggregation: string | null,\n    isAutoRefreshEnabled: boolean,\n    refreshOption: string\n  ): Record<DateContextQueryParamNames, null | string | boolean> {\n    return {\n      dateContextInterval: interval,\n      dateContextAggregation: aggregation,\n      dateContextTo: null,\n      dateContextFrom: null,\n      globalContextAutoRefresh: isAutoRefreshEnabled,\n      globalContextRefreshMode: refreshOption\n    };\n  }\n\n  /**\n   * Builds query parameters for date-range-based time context.\n   * Clears interval parameter and sets date-specific ones.\n   *\n   * @param date Array containing [dateFrom, dateTo] strings or Date objects, or null\n   * @param aggregation The aggregation type\n   * @param isAutoRefreshEnabled Auto-refresh enabled flag\n   * @param refreshOption The refresh option ('live' or 'history')\n   * @returns Query parameters object for date-range-based context\n   */\n  private buildDateRangeBasedQueryParams(\n    date: (string | Date)[] | null,\n    aggregation: string | null,\n    isAutoRefreshEnabled: boolean,\n    refreshOption: string\n  ): Record<DateContextQueryParamNames, null | string | boolean> {\n    return {\n      dateContextFrom: date && date[0] ? DateTimeContextUtil.toIso(date[0]) : null,\n      dateContextTo: date && date[1] ? DateTimeContextUtil.toIso(date[1]) : null,\n      dateContextAggregation: aggregation,\n      dateContextInterval: null,\n      globalContextAutoRefresh: isAutoRefreshEnabled,\n      globalContextRefreshMode: refreshOption\n    };\n  }\n\n  /**\n   * Helper method to navigate with query parameters\n   * Centralizes navigation logic for consistent handling across methods\n   *\n   * @param queryParams The query parameters to set\n   * @param options Additional navigation options\n   */\n  private navigateWithQueryParams(\n    queryParams: Record<string, any>,\n    options: Partial<NavigationExtras> = {}\n  ): void {\n    // Get root route for navigation\n    let rootRoute = this.activatedRoute;\n    while (rootRoute.parent) {\n      rootRoute = rootRoute.parent;\n    }\n\n    const currentParams = rootRoute.snapshot.queryParams;\n\n    // Helper to normalize boolean-like values\n    const normalize = (obj: Record<string, any>) =>\n      Object.fromEntries(\n        Object.entries(obj)\n          .filter(([_, v]) => v !== undefined && v !== null && v !== '')\n          .map(([k, v]) => [k, v === 'true' ? true : v === 'false' ? false : v])\n      );\n\n    const current = normalize(currentParams);\n    const next = normalize(queryParams);\n\n    const hasChanged = JSON.stringify(current) !== JSON.stringify(next);\n\n    if (hasChanged) {\n      const navigationExtras: NavigationExtras = {\n        relativeTo: rootRoute,\n        queryParams,\n        ...options\n      };\n\n      this.router.navigate([], navigationExtras);\n    }\n  }\n\n  /**\n   * Parses and validates date context from query params described by date \"from\" and date \"to\".\n   *\n   * @returns Date context as tuple of date \"from\" and date \"to\", or null if date context is invalid.\n   */\n  private getDateContextFromQueryParams(): [string, string] | null {\n    // Get params from root route\n    let currentRoute = this.activatedRoute;\n    while (currentRoute.parent) {\n      currentRoute = currentRoute.parent;\n    }\n    const params = currentRoute.snapshot.queryParams;\n    const dateContextFrom = params[DateContextQueryParamNames.DATE_CONTEXT_FROM];\n    const dateContextTo = params[DateContextQueryParamNames.DATE_CONTEXT_TO];\n\n    if (this.validationService.isValidDateRange(dateContextFrom, dateContextTo)) {\n      return [dateContextFrom, dateContextTo];\n    }\n    return null;\n  }\n\n  /**\n   * Maps query params object to proper type with validation.\n   *\n   * Transforms raw string query parameters into properly typed values,\n   * filtering out invalid values and converting boolean strings.\n   *\n   * @param params Query parameters object with string values only.\n   * @returns Query params object of proper type with validated values.\n   */\n  private processQueryParams(\n    params: Record<DateContextQueryParamNames, string>\n  ): InputDateContextQueryParams {\n    // Use validation service to get validated values in one call\n    const validated = this.validationService.validateParameters({\n      interval: params.dateContextInterval,\n      aggregation: params.dateContextAggregation,\n      autoRefresh: params.globalContextAutoRefresh\n    });\n\n    return {\n      ...params,\n      dateContextInterval: validated.interval\n        ? (params.dateContextInterval as Interval['id'])\n        : null,\n      dateContextAggregation: validated.aggregation\n        ? (params.dateContextAggregation as aggregationType)\n        : null,\n      globalContextAutoRefresh: validated.autoRefresh\n    };\n  }\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { aggregationType } from '@c8y/client';\nimport { C8yTranslatePipe, IconDirective } from '@c8y/ngx-components';\nimport { AGGREGATION_ICONS, AGGREGATION_TEXTS } from '../../../models/aggregation.model';\n\n@Component({\n  selector: 'c8y-aggregation-display',\n  templateUrl: './aggregation-display.component.html',\n  standalone: true,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [C8yTranslatePipe, IconDirective]\n})\nexport class AggregationDisplayComponent {\n  readonly aggregation = input<aggregationType | null>(null);\n  readonly AGGREGATION_ICONS = AGGREGATION_ICONS;\n  readonly AGGREGATION_TEXTS = AGGREGATION_TEXTS;\n}\n","<div class=\"d-flex a-i-center l-h-tight form-control\">\n  <i\n    class=\"m-r-4\"\n    [c8yIcon]=\"aggregation() ? AGGREGATION_ICONS[aggregation()] : AGGREGATION_ICONS.undefined\"\n  ></i>\n  <div class=\"d-col text-left fit-w min-width-0\">\n    <span\n      class=\"text-10 l-h-1 text-muted text-truncate\"\n      title=\"{{ 'Aggregation' | translate }}\"\n    >\n      {{ 'Aggregation' | translate }}\n    </span>\n    <span\n      class=\"text-12 l-h-1 text-medium text-truncate\"\n      title=\"{{ AGGREGATION_TEXTS[aggregation()] | translate }}\"\n      data-cy=\"global-date-context--Aggregation-display-value\"\n    >\n      {{ AGGREGATION_TEXTS[aggregation()] | translate }}\n    </span>\n  </div>\n</div>\n","import { AsyncPipe } from '@angular/common';\nimport {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  DestroyRef,\n  EventEmitter,\n  forwardRef,\n  HostListener,\n  inject,\n  Input,\n  OnDestroy,\n  Output,\n  ViewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n  C8yTranslatePipe,\n  CountdownIntervalComponent,\n  CountdownIntervalModule,\n  IconDirective\n} from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { BehaviorSubject } from 'rxjs';\nimport { filter, tap, withLatestFrom } from 'rxjs/operators';\nimport { GLOBAL_CONTEXT_DEFAULTS } from '../../../models';\n\n/**\n * Source of auto-refresh state change.\n */\nenum AutoRefreshChangeSource {\n  /** External change from user interaction or form value changes */\n  External = 'external',\n  /** Internal change from tab visibility detection */\n  Visibility = 'visibility'\n}\n\n/**\n * Auto-refresh toggle control with countdown timer.\n *\n * Displays a toggle button that enables/disables automatic refresh with a visual countdown\n * showing time until next refresh. Integrates with Angular forms via ControlValueAccessor.\n */\n@Component({\n  selector: 'c8y-auto-refresh-control',\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => AutoRefreshControlComponent),\n      multi: true\n    }\n  ],\n  standalone: true,\n  imports: [CountdownIntervalModule, C8yTranslatePipe, TooltipModule, IconDirective, AsyncPipe],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  templateUrl: './auto-refresh-control.component.html'\n})\nexport class AutoRefreshControlComponent implements AfterViewInit, OnDestroy, ControlValueAccessor {\n  countdownIntervalConfig = {\n    enforcePulseIcon: false\n  };\n\n  @Input() isAutoRefreshConnected = false;\n\n  @Input()\n  set autoRefreshSeconds(_value: number) {\n    // Value hardcoded to 5000ms for now, as per requirements\n    // It will be adjusted later when dynamic intervals are supported (based on the request execution time)\n    this.autoRefreshSeconds$ = new BehaviorSubject<number>(\n      GLOBAL_CONTEXT_DEFAULTS.REFRESH_INTERVAL\n    );\n\n    // Always show pulse icon, never show countdown timer\n    this.countdownIntervalConfig = {\n      enforcePulseIcon: true\n    };\n  }\n\n  @Input() disableCounter = false;\n\n  readonly DISABLE_AUTO_REFRESH = gettext('Auto refresh enabled');\n  readonly ENABLE_AUTO_REFRESH = gettext('Auto refresh paused');\n  readonly DEFAULT_INTERVAL_VALUE = GLOBAL_CONTEXT_DEFAULTS.REFRESH_INTERVAL;\n\n  private countdownComponentReady$ = new BehaviorSubject<CountdownIntervalComponent | null>(null);\n  private readonly loading$ = new BehaviorSubject<boolean>(false);\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly cdr = inject(ChangeDetectorRef);\n\n  // Grace period handling for widgets without proper loading state\n  private gracePeriodTimeout: ReturnType<typeof setTimeout> | null = null;\n\n  // Track if auto-refresh was disabled by tab visibility (not user action)\n  private disabledByTabVisibility = false;\n\n  @Input() isEnabled: boolean;\n\n  private _isLoading: boolean;\n\n  @Input()\n  set isLoading(value: boolean) {\n    const wasLoading = this._isLoading;\n    this._isLoading = value;\n\n    // If loading started, cancel any pending grace period\n    if (value && this.gracePeriodTimeout) {\n      this.clearGracePeriod();\n    }\n\n    this.loading$.next(value);\n\n    // Handle loading -> not loading transition\n    if (wasLoading && !value && this.countdownIntervalComponent) {\n      this.countdownIntervalComponent.reset();\n    }\n  }\n  get isLoading(): boolean {\n    return this._isLoading;\n  }\n\n  @ViewChild(CountdownIntervalComponent)\n  countdownIntervalComponent: CountdownIntervalComponent;\n\n  @Output() loadingChange = new EventEmitter<boolean>();\n\n  @Output() refresh = new EventEmitter<void>();\n\n  autoRefreshSeconds$: BehaviorSubject<number>;\n\n  onChange: (value: boolean) => void;\n\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  onTouched = () => {};\n\n  ngAfterViewInit() {\n    this.countdownComponentReady$.next(this.countdownIntervalComponent);\n    this.setUpOnCountdownEndedListener();\n    this.setupLoadingHandler();\n    this.syncCountdownState();\n  }\n\n  ngOnDestroy() {\n    this.clearGracePeriod();\n  }\n\n  @HostListener('document:visibilitychange')\n  onVisibilityChange(): void {\n    if (document.hidden && this.isEnabled) {\n      this.disabledByTabVisibility = true;\n      this.setAutoRefreshEnabled(false, AutoRefreshChangeSource.Visibility);\n    } else {\n      if (this.disabledByTabVisibility) {\n        this.setAutoRefreshEnabled(true, AutoRefreshChangeSource.Visibility);\n      }\n    }\n  }\n\n  toggleIntervalRefresh() {\n    this.setAutoRefreshEnabled(!this.isEnabled, AutoRefreshChangeSource.External);\n  }\n\n  registerOnChange(fn: any): void {\n    this.onChange = fn;\n  }\n\n  writeValue(showIntervalRefresh: boolean): void {\n    this.isEnabled = showIntervalRefresh;\n\n    // External state change always clears the flag\n    // This ensures visibility doesn't re-enable after external disable\n    this.disabledByTabVisibility = false;\n\n    this.syncCountdownState();\n    this.cdr.markForCheck();\n  }\n\n  registerOnTouched(fn: any): void {\n    this.onTouched = fn;\n  }\n\n  resetCountdown() {\n    this.clearGracePeriod();\n    this.countdownIntervalComponent?.reset();\n  }\n\n  /**\n   * Internal method to change auto-refresh state with proper flag management.\n   * @param enabled - New enabled state\n   * @param source - Source of the change (External or Visibility)\n   */\n  private setAutoRefreshEnabled(enabled: boolean, source: AutoRefreshChangeSource): void {\n    this.isEnabled = enabled;\n\n    if (enabled || source === AutoRefreshChangeSource.External) {\n      this.disabledByTabVisibility = false;\n    }\n\n    if (source === AutoRefreshChangeSource.External) {\n      this.onChange(this.isEnabled);\n    }\n\n    this.syncCountdownState();\n    this.cdr.markForCheck();\n  }\n\n  private setupLoadingHandler() {\n    this.loading$\n      .pipe(\n        withLatestFrom(this.countdownComponentReady$),\n        filter(([_, component]) => component !== null),\n        tap(([isLoading, component]) => {\n          if (isLoading) {\n            // Stop without showing \"0\" - keep the last countdown value visible\n            component?.stop(false);\n          }\n          // Reset is now handled in the isLoading setter\n        }),\n        takeUntilDestroyed(this.destroyRef)\n      )\n      .subscribe();\n  }\n\n  private setUpOnCountdownEndedListener() {\n    this.countdownIntervalComponent?.countdownEnded\n      .pipe(\n        filter(() => this.isEnabled),\n        tap(() => this.handleCountdownEnded()),\n        takeUntilDestroyed(this.destroyRef)\n      )\n      .subscribe();\n  }\n\n  private handleCountdownEnded(): void {\n    this.refresh.emit();\n\n    // For widgets not connected to auto-refresh, implement grace period\n    if (!this.isAutoRefreshConnected) {\n      // Give widget 500ms to set loading state\n      this.gracePeriodTimeout = setTimeout(() => {\n        // If still no loading state, reset the countdown\n        if (!this.isLoading) {\n          this.resetCountdown();\n        }\n        this.gracePeriodTimeout = null;\n      }, 500);\n    }\n  }\n\n  private syncCountdownState(): void {\n    if (!this.countdownIntervalComponent) return;\n\n    if (this.isEnabled && !this.isLoading) {\n      this.countdownIntervalComponent.start();\n    } else if (!this.isEnabled) {\n      this.countdownIntervalComponent.stop();\n    }\n  }\n\n  private clearGracePeriod(): void {\n    if (this.gracePeriodTimeout) {\n      clearTimeout(this.gracePeriodTimeout);\n      this.gracePeriodTimeout = null;\n    }\n  }\n}\n","@let autoRefreshTooltip = (isEnabled ? DISABLE_AUTO_REFRESH : ENABLE_AUTO_REFRESH) | translate;\n@let countdownInterval = (autoRefreshSeconds$ | async) ?? DEFAULT_INTERVAL_VALUE;\n\n<button\n  [class.btn]=\"disableCounter\"\n  [class.btn-link]=\"disableCounter\"\n  [class.c8y-realtime]=\"disableCounter\"\n  [class.toggle-countdown]=\"!disableCounter\"\n  [attr.aria-label]=\"autoRefreshTooltip\"\n  [tooltip]=\"tooltipTpl\"\n  placement=\"bottom\"\n  container=\"body\"\n  [delay]=\"500\"\n  (click)=\"toggleIntervalRefresh(); $event.stopPropagation()\"\n  [adaptivePosition]=\"false\"\n  [disabled]=\"isLoading\"\n  mode\n  data-cy=\"global-date-context--Auto-refresh-toggle\"\n>\n  <div class=\"d-flex a-i-center\">\n    @if (!disableCounter) {\n      <c8y-countdown-interval\n        #countdown\n        [hidden]=\"!isEnabled\"\n        [countdownInterval]=\"countdownInterval\"\n        [config]=\"countdownIntervalConfig\"\n      ></c8y-countdown-interval>\n    }\n\n    @if (!isEnabled) {\n      <i\n        class=\"icon-20 text-primary\"\n        [c8yIcon]=\"'pause-circle'\"\n        data-cy=\"global-date-context--Auto-refresh-toggle-pause\"\n      ></i>\n    } @else if (disableCounter) {\n      <span class=\"c8y-pulse m-0 active\"></span>\n    }\n  </div>\n</button>\n\n<ng-template #tooltipTpl>\n  {{ autoRefreshTooltip }}\n</ng-template>\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { C8yTranslatePipe, DatePipe, IconDirective } from '@c8y/ngx-components';\nimport { REFRESH_OPTION } from '../../../models/auto-refresh.model';\nimport type { DateTimeContext } from '../../../models/date-time-context-picker.model';\nimport { INTERVAL_TITLES } from '../../../models/interval-picker.model';\n\n@Component({\n  selector: 'c8y-time-range-display',\n  templateUrl: './time-range-display.component.html',\n  standalone: true,\n  imports: [IconDirective, C8yTranslatePipe, DatePipe],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TimeRangeDisplayComponent {\n  REFRESH_OPTION = REFRESH_OPTION;\n  @Input() dateTimeContext: DateTimeContext;\n  @Input() mode: 'from' | 'to' | 'default' = 'default';\n\n  dateTo = new Date();\n\n  readonly INTERVALS = INTERVAL_TITLES;\n  readonly DATE_FORMAT = 'medium';\n}\n","@if (dateTimeContext) {\n  <div class=\"d-flex a-i-center l-h-tight form-control\">\n    <i\n      class=\"m-r-4\"\n      [c8yIcon]=\"'schedule1'\"\n    ></i>\n    <div class=\"d-col text-left fit-w min-width-0\">\n      <span\n        class=\"text-10 l-h-1 text-muted\"\n        data-cy=\"global-date-context--Selected-interval\"\n      >\n        {{ INTERVALS[dateTimeContext.interval] | translate }}\n      </span>\n\n      @if (mode === 'from') {\n        <span\n          class=\"text-12 text-medium text-truncate\"\n          title=\"{{ dateTimeContext.dateFrom | c8yDate: DATE_FORMAT }}\"\n        >\n          {{ 'From`date`' | translate }} {{ dateTimeContext.dateFrom | c8yDate: DATE_FORMAT }}\n        </span>\n      }\n\n      @if (mode === 'to') {\n        <span\n          class=\"text-12 l-h-1 text-medium text-truncate\"\n          title=\"{{ dateTimeContext.dateTo | c8yDate: DATE_FORMAT }}\"\n        >\n          {{ 'To`date`' | translate }} {{ dateTimeContext.dateTo | c8yDate: DATE_FORMAT }}\n        </span>\n      }\n\n      @if (mode === 'default') {\n        <span\n          class=\"text-12 l-h-1 text-medium text-truncate\"\n          title=\"{{ dateTimeContext.dateFrom | c8yDate: DATE_FORMAT }} — {{\n            dateTimeContext.dateTo | c8yDate: DATE_FORMAT\n          }}\"\n          data-cy=\"global-date-context--Selected-time-range\"\n        >\n          {{ dateTimeContext.dateFrom | c8yDate: DATE_FORMAT }} —\n          {{ dateTimeContext.dateTo | c8yDate: DATE_FORMAT }}\n        </span>\n      }\n    </div>\n  </div>\n}\n","import { AsyncPipe, TitleCasePipe } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  DestroyRef,\n  EventEmitter,\n  inject,\n  Input,\n  OnInit,\n  Output\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { C8yTranslatePipe, FormsModule } from '@c8y/ngx-components';\nimport { pick } from 'lodash-es';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport {\n  BehaviorSubject,\n  debounceTime,\n  distinctUntilChanged,\n  map,\n  Observable,\n  startWith\n} from 'rxjs';\nimport { AggregationDisplayComponent } from '../../features/aggregation/aggregation-display/aggregation-display.component';\nimport { AutoRefreshControlComponent } from '../../features/refresh/auto-refresh/auto-refresh-control.component';\nimport { TimeRangeDisplayComponent } from '../../features/time-context/time-range-display/time-range-display.component';\nimport { REFRESH_OPTION, RefreshOption } from '../../models/auto-refresh.model';\nimport { GlobalContextSettings, GlobalContextState } from '../../models/global-context.model';\nimport { GlobalContextFormService } from '../../services/state/global-context-form.service';\n\n/**\n * Context controls component for managing global context state and refresh options.\n *\n * Provides controls for time range, aggregation, and auto-refresh functionality\n * with reactive form handling and optimized change detection.\n *\n * @usageNotes\n *\n * ### Basic Usage\n * ```html\n * <c8y-context-controls\n *   [settings]=\"globalSettings\"\n *   [context]=\"currentContext\"\n *   [isLoading]=\"loading\"\n *   (contextChange)=\"handleContextChange($event)\"\n *   (refresh)=\"handleRefresh()\"\n *   (contextClick)=\"handleClick($event)\">\n * </c8y-context-controls>\n * ```\n *\n */\n@Component({\n  selector: 'c8y-context-controls',\n  standalone: true,\n  templateUrl: './context-controls.component.html',\n  imports: [\n    C8yTranslatePipe,\n    TooltipModule,\n    CollapseModule,\n    ReactiveFormsModule,\n    FormsModule,\n    PopoverModule,\n    AutoRefreshControlComponent,\n    TitleCasePipe,\n    TimeRangeDisplayComponent,\n    AggregationDisplayComponent,\n    AsyncPipe\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ContextControlsComponent implements OnInit {\n  // Static properties\n  readonly REFRESH_OPTION = REFRESH_OPTION;\n\n  // Inputs\n  @Input() showDisplayModeLabel = false;\n  @Input() isLoading = false;\n\n  @Input()\n  set settings(value: GlobalContextSettings) {\n    this._settings.next(value);\n  }\n  get settings(): GlobalContextSettings {\n    return this._settings.value;\n  }\n\n  @Input()\n  set context(value: GlobalContextState) {\n    this._context.next(value);\n  }\n  get context(): GlobalContextState {\n    return this._context.value;\n  }\n\n  // Outputs\n  @Output() contextChange = new EventEmitter<Partial<GlobalContextState>>();\n  @Output() refresh = new EventEmitter<void>();\n  @Output() contextClick = new EventEmitter<Event>();\n\n  // Public properties\n  form: ReturnType<(typeof this.globalContextFormService)['buildForm']>;\n  isAnySettingEnabled = true;\n  refreshOption: RefreshOption;\n  isAutoRefreshConnected = false;\n\n  // Private properties\n  private readonly globalContextFormService = inject(GlobalContextFormService);\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly cd = inject(ChangeDetectorRef);\n  private readonly _settings = new BehaviorSubject<GlobalContextSettings>(null);\n  private readonly _context = new BehaviorSubject<GlobalContextState>(null);\n  private readonly _isAnySettingsEnabled$ = new BehaviorSubject<boolean>(true);\n\n  // Reactive state with optimized observables\n  readonly isAnySettingsEnabled$: Observable<boolean> = this._isAnySettingsEnabled$.pipe(\n    debounceTime(500),\n    startWith(true),\n    distinctUntilChanged()\n  );\n\n  // Lifecycle hooks\n  ngOnInit(): void {\n    this.initializeForm();\n    this.setupContextSubscription();\n    this.setupSettingsSubscription();\n    this.setupFormValueChanges();\n  }\n\n  // Private methods\n  private initializeForm(): void {\n    this.form = this.globalContextFormService.buildForm(this.context, {});\n    this.refreshOption = this.context?.refreshOption || REFRESH_OPTION.LIVE;\n  }\n\n  private setupContextSubscription(): void {\n    this._context.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(context => {\n      if (this.form && context) {\n        this.form.patchValue(context, { emitEvent: false });\n      }\n      if (context && 'refreshOption' in context) {\n        this.refreshOption = context.refreshOption;\n      }\n    });\n  }\n\n  private setupSettingsSubscription(): void {\n    this._settings\n      .pipe(\n        takeUntilDestroyed(this.destroyRef),\n        map(settings => this.extractRelevantSettings(settings)),\n        distinctUntilChanged()\n      )\n      .subscribe(settingsToCheck => {\n        const hasEnabledSettings = Object.values(settingsToCheck).some(setting => setting);\n        this._isAnySettingsEnabled$.next(hasEnabledSettings);\n        this.isAutoRefreshConnected = settingsToCheck.showAutoRefresh;\n        this.cd.markForCheck();\n      });\n  }\n\n  private setupFormValueChanges(): void {\n    this.form.valueChanges\n      .pipe(startWith(this.form.value), takeUntilDestroyed(this.destroyRef), distinctUntilChanged())\n      .subscribe(value => {\n        this.contextChange.emit(value);\n      });\n  }\n\n  private extractRelevantSettings(settings: GlobalContextSettings): {\n    showTimeContext: boolean;\n    showAggregation: boolean;\n    showAutoRefresh: boolean;\n  } {\n    const requiredKeys: (keyof GlobalContextSettings)[] = [\n      'showTimeContext',\n      'showAggregation',\n      'showAutoRefresh'\n    ];\n\n    return pick(settings, requiredKeys);\n  }\n}\n","@if (form) {\n  @let SHOW_TIME_CONTEXT = settings.showTimeContext;\n  @let SHOW_AGGREGATION = settings.showAggregation;\n  @let SHOW_AUTO_REFRESH = settings.showAutoRefresh;\n  @let refreshIntervalValue = form?.get('refreshInterval')?.value;\n  @let isLiveMode = refreshOption === REFRESH_OPTION.LIVE;\n\n  @if (isLiveMode) {\n    <form\n      class=\"input-group\"\n      [formGroup]=\"form\"\n    >\n      <c8y-auto-refresh-control\n        #autoRefreshControl\n        [isLoading]=\"isLoading\"\n        [isAutoRefreshConnected]=\"isAutoRefreshConnected\"\n        formControlName=\"isAutoRefreshEnabled\"\n        [autoRefreshSeconds]=\"refreshIntervalValue\"\n        (refresh)=\"refresh.emit()\"\n      ></c8y-auto-refresh-control>\n      <button\n        class=\"btn-clean d-flex p-l-xs-16 p-r-xs-16 m-t-xs-8 m-b-xs-8 min-width-0\"\n        style=\"margin-left: -1px\"\n        (click)=\"contextClick.emit($event)\"\n      >\n        <div\n          class=\"d-col a-i-start form-control\"\n          style=\"flex: 0\"\n        >\n          <p class=\"text-muted fit-w text-10 l-h-1\">\n            {{ 'Time mode' | translate }}\n          </p>\n          <p\n            class=\"text-bold text-12 fit-w l-h-1\"\n            data-cy=\"global-time-context-controls--Display-mode\"\n          >\n            {{ refreshOption | translate | titlecase }}\n          </p>\n        </div>\n\n        @let interval = form.get('dateTimeContext')?.value?.interval;\n        @let isCustomInterval = interval === 'custom';\n\n        <c8y-time-range-display\n          style=\"margin-left: -1px; min-width: 0\"\n          [dateTimeContext]=\"form.get('dateTimeContext')?.value\"\n        ></c8y-time-range-display>\n\n        @if (!(isAnySettingsEnabled$ | async)) {\n          <div\n            class=\"d-col a-i-center form-control\"\n            style=\"margin-left: -1px; flex: 0\"\n          >\n            <i\n              class=\"dlt-c8y-icon-disconnected icon-20 text-danger\"\n              [tooltip]=\"'No synced widgets' | translate\"\n              placement=\"right\"\n              container=\"body\"\n              [delay]=\"500\"\n              data-cy=\"global-time-context-controls--Widgets-disconnected\"\n            ></i>\n          </div>\n        }\n      </button>\n    </form>\n  } @else {\n    <form [formGroup]=\"form\">\n      <button\n        class=\"btn-clean d-flex p-l-xs-16 p-r-xs-16 m-t-xs-8 m-b-xs-8\"\n        (click)=\"contextClick.emit($event)\"\n      >\n        <div\n          class=\"d-col a-i-center form-control\"\n          style=\"flex: 0\"\n        >\n          <i class=\"dlt-c8y-icon-schedule1 icon-20 text-primary\"></i>\n        </div>\n\n        <div\n          class=\"d-col a-i-start form-control\"\n          style=\"margin-left: -1px; flex: 0\"\n        >\n          <p class=\"text-muted fit-w text-10 l-h-1\">\n            {{ 'Time mode' | translate }}\n          </p>\n          <p\n            class=\"text-bold text-12 fit-w l-h-1\"\n            data-cy=\"global-time-context-controls--Display-mode\"\n          >\n            {{ refreshOption | translate | titlecase }}\n          </p>\n        </div>\n\n        <c8y-time-range-display\n          style=\"margin-left: -1px; min-width: 0\"\n          [dateTimeContext]=\"form.get('dateTimeContext')?.value\"\n        ></c8y-time-range-display>\n        <c8y-aggregation-display\n          style=\"margin-left: -1px; min-width: 0\"\n          [aggregation]=\"form.get('aggregation')?.value\"\n        ></c8y-aggregation-display>\n\n        @if (!(isAnySettingsEnabled$ | async)) {\n          <div\n            class=\"d-col a-i-center form-control\"\n            style=\"margin-left: -1px; flex: 0\"\n          >\n            <i\n              class=\"dlt-c8y-icon-disconnected icon-20 text-danger\"\n              [tooltip]=\"'No synced widgets' | translate\"\n              placement=\"right\"\n              container=\"body\"\n              [delay]=\"500\"\n              data-cy=\"global-time-context-controls--Widgets-disconnected\"\n            ></i>\n          </div>\n        }\n      </button>\n    </form>\n  }\n}\n","import { Location } from '@angular/common';\nimport {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  DestroyRef,\n  inject,\n  signal,\n  ViewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport {\n  ActivatedRoute,\n  ActivationEnd,\n  Navigation,\n  NavigationEnd,\n  NavigationStart,\n  Router\n} from '@angular/router';\nimport { AlertService } from '@c8y/ngx-components';\nimport { ContextDashboardStateService } from '@c8y/ngx-components/context-dashboard-state';\nimport { isEqual, pick, some } from 'lodash-es';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport {\n  combineLatest,\n  debounceTime,\n  distinctUntilChanged,\n  filter,\n  firstValueFrom,\n  fromEvent,\n  map,\n  shareReplay,\n  startWith,\n  tap\n} from 'rxjs';\n\nimport { ConfigurationCollapseComponent } from '../features/configuration/configuration-collapse/configuration-collapse.component';\nimport type { RefreshOption } from '../models/auto-refresh.model';\nimport { REFRESH_OPTION } from '../models/auto-refresh.model';\nimport {\n  DashboardChildConfig,\n  DashboardChildSlot,\n  DashboardManagedObject\n} from '../models/dashboard-context.model';\nimport { GLOBAL_CONTEXT_DEFAULTS } from '../models/global-context-defaults';\nimport type { DateTimeContext } from '../models/date-time-context-picker.model';\nimport type { GlobalContextSettings, GlobalContextState } from '../models/global-context.model';\nimport {\n  GLOBAL_CONTEXT_DISPLAY_MODE,\n  GLOBAL_CONTEXT_EVENTS,\n  GLOBAL_CONTEXT_SOURCE\n} from '../models/global-context.model';\nimport { INTERVALS, TIME_INTERVAL } from '../models/interval-picker.model';\nimport { AggregationPickerService } from '../services/domain/aggregation-picker.service';\nimport { GlobalContextQueryService } from '../services/infrastructure/global-context-query.service';\nimport { GlobalContextEventService } from '../services/state/global-context-event.service';\nimport { GlobalContextFormService } from '../services/state/global-context-form.service';\nimport { GlobalContextService } from '../services/state/global-context.service';\nimport { ContextControlsComponent } from '../shared/context-controls/context-controls.component';\nimport { DateTimeContextUtil } from '../utils/date-time-context.util';\n\n/**\n * GlobalContextComponent\n *\n * This component manages the global context across the application.\n * It synchronizes state between:\n * - Form UI state (user interactions)\n * - URL parameters (for permalink support)\n * - Dashboard state (for dashboard-specific settings)\n *\n * Key lifecycle phases:\n * 1. Initial load: URL params > Dashboard defaults > Form defaults\n * 2. User interactions: Form > URL params + Dashboard state\n * 3. Dashboard switching: Consider dashboard defaults if no settings\n */\n@Component({\n  standalone: true,\n  imports: [\n    ReactiveFormsModule,\n    TooltipModule,\n    ContextControlsComponent,\n    ConfigurationCollapseComponent\n  ],\n  selector: 'c8y-global-context',\n  host: { class: 'min-width-0' },\n  templateUrl: './global-context.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GlobalContextComponent implements AfterViewInit {\n  // Service Dependencies\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly router = inject(Router);\n  private readonly location = inject(Location);\n  private readonly activatedRoute = inject(ActivatedRoute);\n  private readonly alertService = inject(AlertService);\n  private readonly cd = inject(ChangeDetectorRef);\n\n  // Context Services\n  readonly globalContextService = inject(GlobalContextService);\n  readonly globalContextEventService = inject(GlobalContextEventService);\n  private readonly globalContextFormService = inject(GlobalContextFormService);\n  private readonly globalContextQueryService = inject(GlobalContextQueryService);\n  private readonly aggregationPickerService = inject(AggregationPickerService);\n  private readonly contextDashboardStateService = inject(ContextDashboardStateService, {\n    optional: true\n  }) as ContextDashboardStateService<GlobalContextState>;\n\n  // Component State\n  private blockUrlSync = true; // Start with blocking enabled to prevent early syncs\n  private readonly navigationState$ = this.createNavigationStateStream();\n  private initialUrlParams: Partial<GlobalContextState> | null = null;\n  readonly intervals = INTERVALS;\n  form!: ReturnType<typeof this.globalContextFormService.buildForm>;\n  settings: GlobalContextSettings = this.globalContextService.getDefaultSettings();\n  shouldSaveDashboardState = false;\n  globalContextState = signal<GlobalContextState | null>(null);\n  isVisible = signal<boolean>(false);\n\n  @ViewChild(ConfigurationCollapseComponent, { static: false })\n  configurationCollapseComponent!: ConfigurationCollapseComponent;\n\n  constructor() {\n    // Capture URL params immediately in constructor before anything can clear them\n    const urlParams = this.globalContextQueryService.dateTimeContextFromQueryParams();\n    if (urlParams && Object.keys(urlParams).length > 0) {\n      this.initialUrlParams = urlParams;\n    }\n    // Keep blockUrlSync as true for all cases initially - will be unblocked after init\n  }\n\n  ngAfterViewInit() {\n    this.initializeComponent();\n    this.setupGlobalContextEvents();\n    this.setupNavigationHandling();\n    this.setupWidgetConfigListener();\n  }\n\n  onRefresh(): void {\n    const currentState = this.getGlobalContextState();\n    if (!currentState) return;\n\n    if (this.isCustomInterval()) {\n      this.handleCustomIntervalRefresh(currentState);\n    } else {\n      this.handleStandardIntervalRefresh();\n    }\n  }\n\n  updateQueryParamsWithoutNavigation(\n    queryParams: Record<string, string | number | boolean | null>\n  ): void {\n    const urlTree = this.router.createUrlTree([], {\n      relativeTo: this.activatedRoute,\n      queryParams: {\n        ...this.activatedRoute.snapshot.queryParams,\n        ...queryParams\n      }\n    });\n\n    const url = this.router.serializeUrl(urlTree);\n    this.location.replaceState(url);\n  }\n\n  onChanges(changes: GlobalContextState): void {\n    // User has made a manual change - unblock URL sync\n    if (this.blockUrlSync) {\n      this.blockUrlSync = false;\n    }\n\n    const processedChanges = this.processStateChanges(changes);\n    const stateToSave = this.extractSaveableState(processedChanges);\n    const stateToEmit = structuredClone(processedChanges);\n\n    this.patchGlobalContextState(stateToSave);\n    this.broadcastStateChanges(stateToEmit);\n    this.scheduleQueryParamSync();\n    this.saveDashboardStateIfNeeded(stateToSave);\n  }\n\n  onRefreshOptionChanges(refreshOption: RefreshOption) {\n    this.globalContextEventService.emit('GLOBAL_CONTEXT_REFRESH_OPTION_CHANGE', refreshOption);\n  }\n\n  getGlobalContextState(): GlobalContextState | null {\n    return this.globalContextState();\n  }\n\n  updateGlobalContextState(globalContextState: GlobalContextState): void {\n    const adjustedState = this.adjustGlobalState(globalContextState);\n\n    // Remove non-persistent fields\n    delete adjustedState.source;\n    delete adjustedState.eventSourceId;\n\n    this.patchGlobalContextState(adjustedState);\n  }\n\n  patchGlobalContextState(partialState: Partial<GlobalContextState>): boolean {\n    const adjustedState = this.adjustGlobalState(partialState);\n    const currentState = this.globalContextState();\n\n    if (this.isStateUnchanged(currentState, adjustedState)) {\n      return false;\n    }\n\n    this.globalContextState.set({ ...(currentState ?? {}), ...adjustedState });\n\n    return true;\n  }\n\n  adjustGlobalState(globalContextState: GlobalContextState): Partial<GlobalContextState> {\n    const gcCopy = structuredClone(globalContextState);\n\n    const { dateTimeContext, aggregation } = gcCopy;\n\n    // Adjust aggregation based on date range\n    if ('aggregation' in gcCopy) {\n      const { selectedAggregation } = this.aggregationPickerService.calculateAggregation(\n        [new Date(dateTimeContext.dateFrom), new Date(dateTimeContext.dateTo)],\n        aggregation\n      );\n\n      gcCopy.aggregation = selectedAggregation;\n    }\n    return gcCopy;\n  }\n\n  private setupWidgetConfigListener(): void {\n    // Listen for dashboard save events to re-evaluate visibility\n    this.contextDashboardStateService?.dashboardSaved\n      .pipe(\n        filter(Boolean),\n        takeUntilDestroyed(this.destroyRef),\n        tap(dashboard => {\n          // Update visibility based on dashboard children\n          const shouldShow = this.shouldShowGlobalContextForDashboard(dashboard);\n          this.isVisible.set(shouldShow);\n        })\n      )\n      ?.subscribe();\n  }\n  private createNavigationStateStream() {\n    return this.router.events.pipe(\n      takeUntilDestroyed(this.destroyRef),\n      filter(\n        e =>\n          e instanceof NavigationStart || e instanceof NavigationEnd || e instanceof ActivationEnd\n      ),\n      map(e => e instanceof NavigationStart),\n      startWith(false),\n      tap(isNavigationStart => {\n        if (isNavigationStart) {\n          this.configurationCollapseComponent?.close();\n        }\n      }),\n      shareReplay(1)\n    );\n  }\n\n  private setupNavigationHandling(): void {\n    this.router.events\n      .pipe(\n        takeUntilDestroyed(this.destroyRef),\n        filter(event => event instanceof NavigationEnd),\n        filter(() => !this.isNavigationInProgress()),\n        tap(() => this.handleNavigationEnd())\n      )\n      ?.subscribe();\n  }\n\n  private isNavigationInProgress(): boolean {\n    // Prevent unnecessary data refetching during navigation.\n    // Exception: allow events when navigation is user-triggered.\n    // Without this, leaving dashboard triggers `GLOBAL_CONTEXT_EVENTS.STATE_CHANGE`,\n    // causing unwanted widget data refetch.\n    return (\n      !!this.router.getCurrentNavigation() &&\n      this.router.getCurrentNavigation().trigger !== 'popstate'\n    );\n  }\n\n  private setupGlobalContextEvents(): void {\n    this.setupContextHistoryEvents();\n    this.setupContextLiveEvents();\n  }\n\n  private setupContextHistoryEvents(): void {\n    fromEvent<CustomEvent>(window, GLOBAL_CONTEXT_EVENTS.UPDATE_GLOBAL_CONTEXT_HISTORY)\n      .pipe(takeUntilDestroyed(this.destroyRef), debounceTime(250))\n      ?.subscribe(event => {\n        const detail = event.detail;\n        if (detail?.type === GLOBAL_CONTEXT_EVENTS.UPDATE_GLOBAL_CONTEXT_HISTORY) {\n          detail.payload.refreshOption = REFRESH_OPTION.HISTORY;\n          this.onChanges(detail.payload);\n        }\n      });\n  }\n\n  private setupContextLiveEvents(): void {\n    fromEvent<CustomEvent>(window, GLOBAL_CONTEXT_EVENTS.UPDATE_GLOBAL_CONTEXT_LIVE)\n      .pipe(takeUntilDestroyed(this.destroyRef), debounceTime(250))\n      ?.subscribe(event => {\n        const detail = event.detail;\n        if (detail?.type === GLOBAL_CONTEXT_EVENTS.UPDATE_GLOBAL_CONTEXT_LIVE) {\n          detail.payload.refreshOption = REFRESH_OPTION.LIVE;\n          this.onChanges(detail.payload);\n        }\n      });\n  }\n\n  private handleNavigationEnd(): void {\n    this.applyUrlStateIfPresent();\n  }\n\n  private applyUrlStateIfPresent(): void {\n    const queryParamsContext = this.globalContextQueryService.dateTimeContextFromQueryParams();\n\n    if (queryParamsContext) {\n      const isStateChanged = this.patchGlobalContextState(queryParamsContext);\n\n      if (isStateChanged) {\n        this.emitStateChange();\n      }\n    }\n  }\n\n  private handleCustomIntervalRefresh(state: GlobalContextState): void {\n    const { dateTimeContext, refreshOption } = state;\n\n    if (refreshOption === REFRESH_OPTION.LIVE) {\n      this.refreshCustomLiveInterval(dateTimeContext);\n    } else if (refreshOption === REFRESH_OPTION.HISTORY) {\n      this.refreshCustomHistoryInterval(dateTimeContext);\n    }\n  }\n\n  private refreshCustomLiveInterval(dateTimeContext: DateTimeContext): void {\n    const updatedContext = DateTimeContextUtil.normalizeForLive(dateTimeContext);\n\n    this.patchGlobalContextState({ dateTimeContext: updatedContext });\n\n    const { dateTimeContext: currentContext } = this.getGlobalContextState();\n    const fromIso =\n      DateTimeContextUtil.toIso(currentContext.dateFrom) || DateTimeContextUtil.toIso(new Date());\n    const toIso =\n      DateTimeContextUtil.toIso(currentContext.dateTo) || DateTimeContextUtil.toIso(new Date());\n    this.updateQueryParamsWithoutNavigation({\n      dateContextFrom: fromIso,\n      dateContextTo: toIso\n    });\n\n    this.globalContextEventService.emit(GLOBAL_CONTEXT_EVENTS.REFRESH, { ...currentContext });\n  }\n\n  private refreshCustomHistoryInterval(dateTimeContext: DateTimeContext): void {\n    const normalizedContext = DateTimeContextUtil.normalizeForHistory(dateTimeContext);\n\n    this.globalContextEventService.emit(GLOBAL_CONTEXT_EVENTS.REFRESH, normalizedContext);\n  }\n\n  private handleStandardIntervalRefresh(): void {\n    this.updateDateTimeContext();\n    const { dateTimeContext } = this.getGlobalContextState();\n    this.globalContextEventService.emit(GLOBAL_CONTEXT_EVENTS.REFRESH, { ...dateTimeContext });\n    this.globalContextEventService.syncRefreshToStateChange({ ...dateTimeContext });\n  }\n\n  private processStateChanges(changes: GlobalContextState): GlobalContextState {\n    const processedChanges = { ...changes };\n\n    if (this.shouldSetCustomDateTo(processedChanges.dateTimeContext)) {\n      processedChanges.dateTimeContext.dateTo = DateTimeContextUtil.toIso(new Date());\n    }\n\n    return processedChanges;\n  }\n\n  private shouldSetCustomDateTo(dateTimeContext: DateTimeContext): boolean {\n    return (\n      dateTimeContext &&\n      dateTimeContext.interval === TIME_INTERVAL.CUSTOM &&\n      !dateTimeContext.dateTo\n    );\n  }\n\n  private extractSaveableState(changes: GlobalContextState): Partial<GlobalContextState> {\n    return pick(changes, [\n      'dateTimeContext',\n      'aggregation',\n      'isAutoRefreshEnabled',\n      'refreshInterval',\n      'refreshOption',\n      'displayMode'\n    ]);\n  }\n\n  private broadcastStateChanges(stateToEmit: GlobalContextState): void {\n    this.emitStateChange(stateToEmit);\n    this.contextDashboardStateService?.updateGlobalState(structuredClone(stateToEmit));\n  }\n\n  private scheduleQueryParamSync(): void {\n    queueMicrotask(() => this.syncFormStateToQueryParams());\n  }\n\n  private saveDashboardStateIfNeeded(stateToSave: Partial<GlobalContextState>): void {\n    if (!this.shouldSaveDashboardState) return;\n\n    try {\n      this.contextDashboardStateService?.saveDashboardState(\n        this.contextDashboardStateService.selected$.value,\n        structuredClone(stateToSave)\n      );\n    } catch (error) {\n      this.alertService.addServerFailure(error);\n    }\n  }\n\n  private isStateUnchanged(\n    currentState: GlobalContextState | null,\n    newState: Partial<GlobalContextState>\n  ): boolean {\n    if (!currentState) return false;\n\n    const keys = Object.keys(newState) as (keyof GlobalContextState)[];\n    const currentStateSubset = pick(currentState, keys);\n    return isEqual(currentStateSubset, newState);\n  }\n\n  private emitStateChange(state?: GlobalContextState): void {\n    const stateToEmit = state ?? this.getGlobalContextState();\n\n    if (!stateToEmit) {\n      return;\n    }\n\n    this.globalContextEventService.emit(GLOBAL_CONTEXT_EVENTS.STATE_CHANGE, {\n      source: GLOBAL_CONTEXT_SOURCE.DASHBOARD,\n      eventSourceId: null,\n      ...structuredClone(stateToEmit)\n    });\n  }\n\n  private async initializeComponent(): Promise<void> {\n    await this.initGlobalContextState();\n    this.setupStateSubscriptions();\n\n    // Unblock URL sync after initialization if no initial URL params\n    if (!this.initialUrlParams) {\n      this.blockUrlSync = false;\n    }\n  }\n\n  private setupStateSubscriptions(): void {\n    this.setupDashboardSubscription();\n    this.emitStateChange();\n    this.setupSettingsSubscription();\n  }\n\n  private async initGlobalContextState() {\n    const initialState = await this.buildInitialState();\n\n    this.updateGlobalContextState(initialState);\n  }\n\n  private async buildInitialState(): Promise<GlobalContextState> {\n    // Get the selected dashboard (works for both dashboard and device routes)\n    const selectedDashboard = await firstValueFrom(\n      this.contextDashboardStateService?.selected$.pipe(filter(Boolean))\n    );\n\n    // Check if we're on a dashboard or device route\n    const currentUrl = this.router.url;\n    const isDashboardRoute = currentUrl?.includes('/dashboard/');\n    const isDeviceRoute = currentUrl?.includes('/device/') && currentUrl?.includes('/device-info');\n\n    // Determine visibility based on route type\n    if (isDashboardRoute) {\n      // Dashboard route - check children for displayMode\n      const shouldShow = this.shouldShowGlobalContextForDashboard(selectedDashboard);\n      this.isVisible.set(shouldShow);\n\n      // Even if not visible, continue to build and return proper state\n      // This ensures widgets can still get initial state via event service\n      // Temporary solution, should be removed and isDeviceRoute check should be added to isDashboardRoute || isDeviceRoute\n      // As for now dashboard children do not have proper configuration in the devicemanagement device-info dashboard\n    } else if (isDeviceRoute) {\n      const shouldShow = this.shouldShowGlobalContextForDashboard(selectedDashboard);\n      this.isVisible.set(shouldShow ?? false);\n      // Home dashboard\n    } else if (selectedDashboard && this.shouldShowGlobalContextForDashboard(selectedDashboard)) {\n      this.isVisible.set(true);\n    }\n\n    // Build state exactly like dashboard routes\n    const globalContextDefaultState = this.globalContextService.getDefaultState();\n    const dashboardGlobalContextState = selectedDashboard?.c8y_Dashboard?.dashboardState ?? {};\n    const urlParams = this.initialUrlParams ?? {};\n    const userInputQueryParams = { ...(this.globalContextQueryService.navigationPopState ?? {}) };\n\n    this.globalContextQueryService.navigationPopState = null;\n\n    let currentState: GlobalContextState = {\n      ...globalContextDefaultState,\n      ...dashboardGlobalContextState,\n      ...urlParams,\n      ...userInputQueryParams\n    };\n\n    // In live mode we always need to keep a valid date range (based on the interval)\n    if (currentState.refreshOption === REFRESH_OPTION.LIVE) {\n      const normalized =\n        currentState?.dateTimeContext.interval === TIME_INTERVAL.CUSTOM\n          ? DateTimeContextUtil.normalizeForLive(currentState.dateTimeContext)\n          : (() => {\n              const range = DateTimeContextUtil.dateRangeFromInterval(\n                currentState.dateTimeContext?.interval\n              );\n              if (!range) return currentState.dateTimeContext;\n              return DateTimeContextUtil.ensureIsoContext({\n                interval: currentState.dateTimeContext.interval,\n                dateFrom: range[0],\n                dateTo: range[1]\n              });\n            })();\n\n      currentState = {\n        ...currentState,\n        dateTimeContext: normalized\n      };\n    }\n\n    // Always enforce the fixed 5s refresh interval\n    // This ensures old dashboards with custom intervals stored in dashboardState are migrated\n    currentState.refreshInterval = GLOBAL_CONTEXT_DEFAULTS.REFRESH_INTERVAL;\n\n    return currentState;\n  }\n\n  private setupDashboardSubscription(): void {\n    this.contextDashboardStateService?.selected$\n      .pipe(\n        takeUntilDestroyed(this.destroyRef),\n        tap(() => this.globalContextService.resetSettings()),\n        filter(Boolean),\n        tap(() => this.handleDashboardNavigation())\n      )\n      ?.subscribe();\n  }\n\n  private handleDashboardNavigation(): void {\n    const navigation = this.router.getCurrentNavigation();\n    const queryParamsContext = this.globalContextQueryService.dateTimeContextFromQueryParams();\n\n    if (this.isPopstateNavigation(navigation)) {\n      this.handlePopstateNavigation(queryParamsContext);\n    }\n  }\n\n  private isPopstateNavigation(navigation: Navigation | null): boolean {\n    return navigation?.trigger === 'popstate';\n  }\n\n  private handlePopstateNavigation(queryParamsContext: Partial<GlobalContextState>): void {\n    if (queryParamsContext) {\n      this.patchGlobalContextState(queryParamsContext);\n\n      this.globalContextQueryService.navigationPopState = { ...this.globalContextState() };\n\n      this.syncFormStateToQueryParams();\n    }\n  }\n\n  private setupSettingsSubscription(): void {\n    combineLatest([this.globalContextService.getConsolidatedSettings(), this.navigationState$])\n      .pipe(\n        takeUntilDestroyed(this.destroyRef),\n        tap(([settings]) => this.updateSettings(settings)),\n        filter(([, navigationInProgress]) => !navigationInProgress),\n        distinctUntilChanged((prev, curr) => isEqual(prev[0], curr[0]))\n      )\n      ?.subscribe(([settings]) => this.handleSettingsChange(settings));\n  }\n\n  private updateSettings(settings: GlobalContextSettings): void {\n    this.settings = { ...settings };\n    this.cd.markForCheck();\n  }\n\n  private handleSettingsChange(settings: GlobalContextSettings): void {\n    const hasEnabledSettings = some(settings, Boolean);\n\n    if (hasEnabledSettings) {\n      this.syncFormStateToQueryParams();\n    }\n  }\n\n  private syncFormStateToQueryParams(): void {\n    // Block sync until initialization is complete AND user has interacted (if URL params exist)\n    if (this.blockUrlSync) {\n      return;\n    }\n\n    const currentState = this.getGlobalContextState();\n\n    if (!currentState) return;\n\n    const queryParams = this.buildQueryParamsFromState(currentState);\n\n    this.globalContextQueryService.setDateContextQueryParams(queryParams);\n  }\n\n  private buildQueryParamsFromState(state: GlobalContextState) {\n    const isAnyTrue = Object.values(this.settings).some(value => value === true);\n\n    const queryParams = {\n      interval: this.getIntervalForQuery(state),\n      date: this.getDateRangeForQuery(state),\n      aggregation: this.getAggregationForQuery(state),\n      isAutoRefreshEnabled: this.getAutoRefreshForQuery(state),\n      refreshOption: isAnyTrue ? state.refreshOption || REFRESH_OPTION.LIVE : null\n    };\n\n    return queryParams;\n  }\n\n  private getIntervalForQuery(state: GlobalContextState) {\n    return this.settings.showTimeContext ? state.dateTimeContext?.interval || null : null;\n  }\n\n  private getDateRangeForQuery(state: GlobalContextState) {\n    if (!this.settings.showTimeContext || !state.dateTimeContext) {\n      return null;\n    }\n    return [state.dateTimeContext.dateFrom, state.dateTimeContext.dateTo];\n  }\n\n  private getAggregationForQuery(state: GlobalContextState) {\n    // Live mode never has aggregation (business rule)\n    if (state?.refreshOption === REFRESH_OPTION.LIVE) {\n      return null;\n    }\n    // Include aggregation in URL if it has a value for History mode\n    // This ensures aggregation is persisted in dashboard URLs\n    return state?.aggregation || null;\n  }\n\n  private getAutoRefreshForQuery(state: GlobalContextState) {\n    return this.settings.showAutoRefresh ? !!state.isAutoRefreshEnabled : null;\n  }\n\n  private isCustomInterval(): boolean {\n    const state = this.getGlobalContextState();\n    return state?.dateTimeContext?.interval === TIME_INTERVAL.CUSTOM;\n  }\n\n  private updateDateTimeContext(): void {\n    const state = this.getGlobalContextState();\n    const currentInterval = state?.dateTimeContext?.interval;\n\n    if (!currentInterval) return;\n\n    const range = DateTimeContextUtil.dateRangeFromInterval(currentInterval);\n    if (!range) return;\n    const [dateFrom, dateTo] = range;\n    const ctx = DateTimeContextUtil.ensureIsoContext({\n      interval: currentInterval,\n      dateFrom,\n      dateTo\n    });\n    this.patchGlobalContextState({ dateTimeContext: ctx });\n  }\n\n  /**\n   * Checks if global context should be shown based on dashboard children configuration\n   * NOTE: Using DashboardManagedObject instead of ContextDashboardManagedObject\n   * to avoid circular dependency issues with the type imports.\n   * @param dashboard - The dashboard object containing children\n   * @returns true if any child has displayMode set to 'dashboard', false otherwise\n   */\n  private shouldShowGlobalContextForDashboard(\n    dashboard: DashboardManagedObject | null | undefined\n  ): boolean {\n    // If no dashboard or no c8y_Dashboard property, show by default\n    if (!dashboard?.c8y_Dashboard) {\n      return true;\n    }\n\n    const children = dashboard.c8y_Dashboard.children;\n\n    // If no children, don't show global context\n    if (!children || typeof children !== 'object' || Object.keys(children).length === 0) {\n      return false;\n    }\n\n    // Check if any child needs global context\n    return Object.values(children).some((child: DashboardChildSlot | null | undefined) => {\n      const config: DashboardChildConfig | null | undefined = child?.config;\n\n      if (!config) {\n        return false;\n      }\n\n      const {\n        widgetInstanceGlobalAutoRefreshContext,\n        widgetInstanceGlobalTimeContext,\n        displayMode\n      } = config;\n\n      // Show global context if widget uses it in any way\n      // - 'dashboard' mode: fully connected to global context\n      if (displayMode === GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD) {\n        return true;\n      }\n\n      // For backwards compatibility: check legacy fields if displayMode is not set\n      if (!displayMode) {\n        const hasTimeContext = widgetInstanceGlobalTimeContext === true;\n        const hasRefreshContext = widgetInstanceGlobalAutoRefreshContext === true;\n        const timeExplicitlyFalse = widgetInstanceGlobalTimeContext === false;\n        const refreshExplicitlyFalse = widgetInstanceGlobalAutoRefreshContext === false;\n\n        // Hide when contexts are incompatible: one is true and the other is explicitly false\n        const hasIncompatibleConfiguration =\n          (hasTimeContext && refreshExplicitlyFalse) || (hasRefreshContext && timeExplicitlyFalse);\n\n        if (hasIncompatibleConfiguration) {\n          return false;\n        }\n\n        // Show if at least one context is explicitly true\n        return hasTimeContext || hasRefreshContext;\n      }\n\n      return false;\n    });\n  }\n}\n","@if (globalContextState() !== null && isVisible()) {\n  <c8y-context-controls\n    [settings]=\"settings\"\n    [context]=\"globalContextState()\"\n    [isLoading]=\"globalContextService.isLoading()\"\n    (refresh)=\"onRefresh()\"\n    (contextChange)=\"onChanges($event)\"\n    (contextClick)=\"gcs.toggle()\"\n  ></c8y-context-controls>\n\n  <c8y-configuration-collapse\n    #gcs\n    [context]=\"globalContextState()\"\n    (contextChange)=\"onChanges($event)\"\n    (refreshOptionChange)=\"onRefreshOptionChanges($event)\"\n    (savePreferenceChange)=\"shouldSaveDashboardState = $event\"\n  ></c8y-configuration-collapse>\n}\n","import { inject, Injectable, InjectionToken, signal } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ActionBarFactory, ActionBarItem, ContextRouteService } from '@c8y/ngx-components';\nimport { GlobalContextComponent } from '../../core/global-context.component';\nimport { GlobalContextQueryService } from './global-context-query.service';\n\n/**\n * Injection token for registering custom dashboard paths where Global Context should be displayed.\n *\n * Use this token to enable Global Context on named dashboard routes that don't have a\n * `dashboardId` route parameter. Supports `multi: true` to allow multiple providers.\n *\n * @example\n * ```typescript\n * // In app.config.ts or module providers\n * providers: [\n *   {\n *     provide: GLOBAL_CONTEXT_DASHBOARD_PATHS,\n *     useValue: ['dashboard/my-custom-dashboard', 'dashboard/another-dashboard'],\n *     multi: true\n *   }\n * ]\n * ```\n */\nexport const GLOBAL_CONTEXT_DASHBOARD_PATHS = new InjectionToken<string[]>(\n  'GLOBAL_CONTEXT_DASHBOARD_PATHS'\n);\n\n/**\n * Constants defining the supported route paths for global context integration.\n */\nexport const ROUTE_PATHS = {\n  /** Home route path identifier */\n  HOME: 'home',\n  /** Dashboard route path identifier */\n  DASHBOARD: 'dashboard',\n  /** General route path identifier */\n  GENERAL: 'general',\n  /** Device info route path identifier */\n  DEVICE: 'device-info'\n} as const;\n\n/**\n * Type definition for supported route path values.\n */\nexport type RoutePath = (typeof ROUTE_PATHS)[keyof typeof ROUTE_PATHS];\n\n/**\n * Interface defining the structure of a global context instance.\n * Contains both the ActionBar configuration and metadata about the current route context.\n */\nexport interface GlobalContextInstance {\n  /** ActionBar item configuration for rendering the global context component */\n  readonly actionBarItem: ActionBarItem;\n  /** Source route path that created this instance */\n  readonly source: RoutePath | null;\n  /** Unique identifier for the source (e.g., dashboard ID) */\n  readonly sourceId: string | null;\n}\n\n/**\n * Default global context instance configuration.\n */\nconst DEFAULT_INSTANCE: GlobalContextInstance = {\n  actionBarItem: {\n    component: GlobalContextComponent,\n    placement: 'left'\n  },\n  source: null,\n  sourceId: null\n} as const;\n\n/**\n * GlobalContextNavigationService manages the integration of global context functionality\n * with Angular's routing system and the Cumulocity ActionBar.\n *\n * This service implements the ActionBarFactory interface to provide context-aware\n * global context components in different route contexts (home, dashboard, general).\n * It handles route transitions, manages query parameter cleanup, and maintains\n * instance state across navigation.\n *\n * Key responsibilities:\n * - Determine when and where to show global context components\n * - Manage global context instances across different routes\n * - Handle query parameter cleanup during navigation\n * - Provide ActionBar integration for the global context component\n *\n * @example\n * ```typescript\n * // Service is automatically used by ActionBar system\n * // Get current instance\n * const instance = navigationService.getInstance();\n * console.log(instance.source); // 'home' | 'dashboard' | null\n *\n * // Manual instance management (rarely needed)\n * navigationService.setInstance({\n *   actionBarItem: { component: GlobalContextComponent, placement: 'left' },\n *   source: 'dashboard',\n *   sourceId: 'my-dashboard-id'\n * });\n * ```\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class GlobalContextNavigationService implements ActionBarFactory {\n  /** Service for managing global context query parameters */\n  private readonly globalContextQueryService = inject(GlobalContextQueryService);\n\n  /** Service for accessing route context data */\n  private readonly contextRoute = inject(ContextRouteService);\n\n  /** Angular router for navigation state access */\n  private readonly router = inject(Router);\n\n  /**\n   * Custom dashboard paths registered via GLOBAL_CONTEXT_DASHBOARD_PATHS injection token.\n   * Flattened from multi-provider array.\n   */\n  private readonly registeredDashboardPaths: string[] = (\n    inject(GLOBAL_CONTEXT_DASHBOARD_PATHS, { optional: true }) || []\n  ).flat();\n\n  /** Signal storing the current global context instance configuration */\n  private readonly instance = signal<GlobalContextInstance>({\n    ...DEFAULT_INSTANCE,\n    source: ROUTE_PATHS.HOME\n  });\n\n  /**\n   * Determines the appropriate ActionBarItem based on the current route context.\n   *\n   * This is the main entry point called by the ActionBar system to determine\n   * if and how the global context component should be displayed for a given route.\n   *\n   * Route handling logic:\n   * - Home routes: Always show global context\n   * - Dashboard routes: Show if valid dashboard ID exists\n   * - Device routes: Show if valid device ID exists\n   * - General routes: Hide global context\n   * - Other routes: Show only if context data is available\n   *\n   * @param activeRoute - The currently active Angular route\n   * @returns ActionBarItem configuration or null if global context should not be shown\n   *\n   * @example\n   * ```typescript\n   * // Called automatically by ActionBar system\n   * const actionBarItem = navigationService.get(activatedRoute);\n   * if (actionBarItem) {\n   *   // Global context will be shown in ActionBar\n   * }\n   * ```\n   */\n  get(activeRoute: ActivatedRoute): ActionBarItem | null {\n    const contextData = this.contextRoute.getContextData(activeRoute);\n    const currentPath = this.extractCurrentPath(activeRoute);\n\n    // Handle home route - always show global context\n    if (this.isHomePath(currentPath)) {\n      return this.handleHome();\n    }\n\n    // Handle general route - never show global context\n    if (this.isGeneralPath(currentPath)) {\n      this.resetInstance();\n      return null;\n    }\n\n    // Handle dashboard route - show if valid dashboard context\n    if (this.isDashboardRoute(activeRoute)) {\n      return this.handleDashboard(activeRoute);\n    }\n\n    if (this.isDevicePath(currentPath)) {\n      return this.handleDevice(activeRoute);\n    }\n\n    // For other routes, check if we have context data\n    if (!contextData) {\n      return null;\n    }\n\n    // Check if we need to clean up from previous contexts\n    const current = this.getInstance();\n\n    // Clean up if we were on a dashboard and now we're not\n    if (current.source === ROUTE_PATHS.DASHBOARD) {\n      this.handleQueryParamCleanup(true);\n      this.resetInstance();\n      return null;\n    }\n\n    // Check if we're on a device sub-route (has device ID but not device-info)\n    const deviceId = this.extractDeviceId(activeRoute);\n    if (deviceId) {\n      // We're on a device route, but not device-info\n      // Check if we need to clean up from a previous device-info view\n      if (current.source === ROUTE_PATHS.DEVICE) {\n        this.handleQueryParamCleanup(true);\n        this.resetInstance();\n      }\n      return null;\n    }\n\n    // Default: don't show global context for unknown routes\n    return null;\n  }\n\n  /**\n   * Retrieves the current global context instance configuration.\n   *\n   * The instance contains both the ActionBar configuration and metadata\n   * about the current route context that created this instance.\n   *\n   * @returns Current GlobalContextInstance with ActionBar config and route metadata\n   *\n   * @example\n   * ```typescript\n   * const instance = navigationService.getInstance();\n   * console.log(instance.source); // 'home', 'dashboard', or null\n   * console.log(instance.sourceId); // dashboard ID if applicable\n   *\n   * // Use ActionBar configuration\n   * const actionBarItem = instance.actionBarItem;\n   * ```\n   */\n  getInstance(): GlobalContextInstance {\n    return this.instance();\n  }\n\n  /**\n   * Sets a new global context instance configuration.\n   *\n   * This method allows manual control over the global context instance,\n   * though it's typically managed automatically by the route handlers.\n   * Passing null will reset the instance to default configuration.\n   *\n   * @param instance - New instance configuration or null to reset to defaults\n   *\n   * @example\n   * ```typescript\n   * // Set custom instance\n   * navigationService.setInstance({\n   *   actionBarItem: {\n   *     component: GlobalContextComponent,\n   *     placement: 'right'\n   *   },\n   *   source: 'dashboard',\n   *   sourceId: 'custom-dashboard'\n   * });\n   *\n   * // Reset to defaults\n   * navigationService.setInstance(null);\n   * ```\n   */\n  setInstance(instance: GlobalContextInstance | null): void {\n    if (instance === null) {\n      this.resetInstance();\n    } else {\n      this.instance.set(instance);\n    }\n  }\n\n  /**\n   * Handles navigation to home routes.\n   *\n   * Home routes always display the global context component.\n   * Updates the instance if the source has changed.\n   *\n   * @returns ActionBarItem configuration for home context\n   */\n  private handleHome(): ActionBarItem {\n    const current = this.getInstance();\n\n    // Only update instance if source has changed\n    if (current.source !== ROUTE_PATHS.HOME) {\n      const homeInstance: GlobalContextInstance = {\n        actionBarItem: {\n          component: GlobalContextComponent,\n          placement: 'left'\n        },\n        source: ROUTE_PATHS.HOME,\n        sourceId: null\n      };\n\n      this.instance.set(homeInstance);\n    }\n\n    return this.getInstance().actionBarItem;\n  }\n\n  /**\n   * Handles navigation to dashboard routes.\n   *\n   * Dashboard routes display global context if:\n   * - A valid dashboard ID exists in route params, OR\n   * - The route path is registered via GLOBAL_CONTEXT_DASHBOARD_PATHS token\n   *\n   * Manages query parameter cleanup during dashboard transitions.\n   *\n   * @param activeRoute - The active route containing dashboard parameters\n   * @returns ActionBarItem configuration for dashboard context or null if invalid\n   */\n  private handleDashboard(activeRoute: ActivatedRoute): ActionBarItem | null {\n    const dashboardId = this.extractDashboardId(activeRoute);\n\n    // For named dashboards without dashboardId, check if path is registered\n    const routePath = this.extractRoutePath(activeRoute);\n    const isRegisteredPath = this.isRegisteredDashboardPath(routePath);\n    const effectiveId = dashboardId || (isRegisteredPath ? routePath : undefined);\n\n    if (!effectiveId) {\n      return null;\n    }\n\n    const current = this.getInstance();\n\n    // Return existing instance if same dashboard\n    if (current.source === ROUTE_PATHS.DASHBOARD && current.sourceId === effectiveId) {\n      return current.actionBarItem;\n    }\n\n    // We're changing contexts if coming from a different dashboard\n    const isChangingContext =\n      current.source === ROUTE_PATHS.DASHBOARD && current.sourceId !== effectiveId;\n    this.handleQueryParamCleanup(isChangingContext);\n\n    // Create new dashboard instance\n    const dashboardInstance: GlobalContextInstance = {\n      actionBarItem: {\n        component: GlobalContextComponent,\n        placement: 'left'\n      },\n      source: ROUTE_PATHS.DASHBOARD,\n      sourceId: effectiveId\n    };\n\n    this.instance.set(dashboardInstance);\n    return this.getInstance().actionBarItem;\n  }\n\n  private handleDevice(activeRoute: ActivatedRoute): ActionBarItem | null {\n    const deviceId = this.extractDeviceId(activeRoute);\n\n    if (!deviceId) {\n      return null;\n    }\n\n    const current = this.getInstance();\n\n    // Return existing instance if same device\n    if (current.source === ROUTE_PATHS.DEVICE && current.sourceId === deviceId) {\n      return current.actionBarItem;\n    }\n\n    // We're changing contexts if coming from a different device\n    const isChangingContext =\n      current.source === ROUTE_PATHS.DEVICE && current.sourceId !== deviceId;\n    this.handleQueryParamCleanup(isChangingContext);\n\n    // Create new device instance\n    const deviceInstance: GlobalContextInstance = {\n      actionBarItem: {\n        component: GlobalContextComponent,\n        placement: 'left'\n      },\n      source: ROUTE_PATHS.DEVICE,\n      sourceId: deviceId\n    };\n\n    this.instance.set(deviceInstance);\n    return this.getInstance().actionBarItem;\n  }\n\n  /**\n   * Extracts the current path from an activated route.\n   *\n   * @param activeRoute - The route to extract path from\n   * @returns The first URL segment path or undefined\n   */\n  private extractCurrentPath(activeRoute: ActivatedRoute): string | undefined {\n    return activeRoute?.snapshot?.url?.[0]?.path;\n  }\n\n  /**\n   * Extracts dashboard ID from route parameters.\n   *\n   * @param activeRoute - The route containing dashboard parameters\n   * @returns Dashboard ID or undefined if not present\n   */\n  private extractDashboardId(activeRoute: ActivatedRoute): string | undefined {\n    const dashboardId = activeRoute?.snapshot?.params?.['dashboardId'];\n    return dashboardId && typeof dashboardId === 'string' ? dashboardId : undefined;\n  }\n\n  /**\n   * Extracts the full route path from URL segments.\n   *\n   * @param activeRoute - The route to extract path from\n   * @returns Full route path (e.g., 'dashboard/my-dashboard') or undefined\n   */\n  private extractRoutePath(activeRoute: ActivatedRoute): string | undefined {\n    const segments = activeRoute?.snapshot?.url || [];\n    if (segments.length === 0) {\n      return undefined;\n    }\n    return segments.map(s => s.path).join('/');\n  }\n\n  /**\n   * Checks if a route path is registered as a custom dashboard path.\n   *\n   * @param routePath - The route path to check\n   * @returns True if the path is registered via GLOBAL_CONTEXT_DASHBOARD_PATHS\n   */\n  private isRegisteredDashboardPath(routePath: string | undefined): boolean {\n    if (!routePath || this.registeredDashboardPaths.length === 0) {\n      return false;\n    }\n    return this.registeredDashboardPaths.some(\n      registeredPath => routePath === registeredPath || routePath.startsWith(registeredPath + '/')\n    );\n  }\n\n  /**\n   * Extracts device ID from route parameters.\n   *\n   * @param activeRoute - The route containing device parameters\n   * @returns Device ID or undefined if not present\n   */\n  private extractDeviceId(activeRoute: ActivatedRoute): string | undefined {\n    let currentRoute: ActivatedRoute | null = activeRoute;\n    while (currentRoute) {\n      const deviceId = currentRoute.snapshot.params['id'];\n      if (deviceId && typeof deviceId === 'string') {\n        return deviceId;\n      }\n      currentRoute = currentRoute.parent;\n    }\n    return undefined;\n  }\n\n  /**\n   * Checks if the current path is a home route.\n   *\n   * @param path - Path to check\n   * @returns True if path is home route\n   */\n  private isHomePath(path: string | undefined): boolean {\n    return path === ROUTE_PATHS.HOME;\n  }\n\n  /**\n   * Checks if the current path is a dashboard route.\n   * Handles both direct dashboard routes and nested dashboard routes (e.g., group dashboards)\n   *\n   * @param activeRoute - The active route to check\n   * @returns True if this is a dashboard route\n   */\n  private isDashboardRoute(activeRoute: ActivatedRoute): boolean {\n    try {\n      // Check if any segment in the URL path is 'dashboard'\n      const urlSegments = activeRoute?.snapshot?.url || [];\n      const hasDashboardSegment = urlSegments.some(\n        segment => segment.path === ROUTE_PATHS.DASHBOARD\n      );\n\n      // Also check if we have a dashboardId parameter (for nested routes)\n      const hasDashboardId = !!activeRoute?.snapshot?.params?.['dashboardId'];\n\n      return hasDashboardSegment || hasDashboardId;\n    } catch (error) {\n      return false;\n    }\n  }\n\n  /**\n   * Checks if the current path is a dashboard route.\n   *\n   * @param path - Path to check\n   * @returns True if path is dashboard route\n   */\n  private isDashboardPath(path: string | undefined): boolean {\n    return path === ROUTE_PATHS.DASHBOARD;\n  }\n\n  private isDevicePath(path: string | undefined): boolean {\n    return path === ROUTE_PATHS.DEVICE;\n  }\n\n  /**\n   * Checks if the current path is a general route.\n   *\n   * @param path - Path to check\n   * @returns True if path is general route\n   */\n  private isGeneralPath(path: string | undefined): boolean {\n    return path === ROUTE_PATHS.GENERAL;\n  }\n\n  /**\n   * Handles query parameter cleanup during navigation.\n   *\n   * Cleans up global context query parameters when:\n   * 1. Explicitly requested via navigation state\n   * 2. Actually changing contexts (different dashboard/device)\n   */\n  private handleQueryParamCleanup(isChangingContext = false): void {\n    const navigation = this.router.getCurrentNavigation();\n\n    // Clear params when explicitly requested OR when changing contexts\n    const shouldClearParams =\n      navigation?.extras?.state?.clearParams === true || (navigation !== null && isChangingContext);\n\n    if (shouldClearParams) {\n      this.globalContextQueryService.checkAndRemoveDateContextParams();\n    }\n  }\n\n  /**\n   * Resets the instance to default configuration.\n   */\n  private resetInstance(): void {\n    this.instance.set({ ...DEFAULT_INSTANCE });\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  EventEmitter,\n  inject,\n  Input,\n  OnInit,\n  Output,\n  signal\n} from '@angular/core';\nimport { C8yTranslatePipe, IconDirective } from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { TranslateService } from '@ngx-translate/core';\n\nimport type { LinkControlConfig, LinkControlInfo } from './inline-context.models';\n\n/**\n * Component to display and manage link controls for global context items\n */\n@Component({\n  selector: 'c8y-global-context-link-controls',\n  standalone: true,\n  imports: [IconDirective, TooltipModule, C8yTranslatePipe],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  styles: [\n    `\n      .btn-icon-dot[disabled] {\n        cursor: not-allowed;\n        opacity: 0.75;\n      }\n\n      .btn-icon-dot.link-auto-unlinked,\n      .btn-icon-dot.link-auto-unlinked:focus {\n        box-shadow: 0 0 0 2px var(--c8y-palette-status-danger);\n        border-color: var(--c8y-palette-status-danger);\n      }\n    `\n  ],\n  template: `\n    @if (showLinks()) {\n      <button\n        class=\"btn-icon-dot-set m-r-4\"\n        [class.active]=\"someControlsLinked()\"\n        [attr.aria-label]=\"'Global context sync controls' | translate\"\n        [tooltip]=\"masterTooltipTemplate\"\n        delay=\"500\"\n        container=\"body\"\n        (click)=\"toggleAll()\"\n        data-cy=\"global-context-link--all\"\n      >\n        <span class=\"btn-icon-dot__item default\" [class.active]=\"allControlsLinked()\">\n          <i [c8yIcon]=\"someControlsLinked() ? 'link' : 'unlink'\"></i>\n        </span>\n        <!-- Individual Link icons -->\n        @for (control of visibleControls(); track control.key) {\n          <span\n            [class]=\"control.cssClass + ' btn-icon-dot__item'\"\n            [class.active]=\"control.isLinked\"\n            [class.link-disabled]=\"control.disabled\"\n            [class.link-auto-unlinked]=\"control.autoUnlinked\"\n            [attr.data-cy]=\"'global-context-link--' + control.key\"\n          >\n            <i [c8yIcon]=\"control.icon\"></i>\n          </span>\n        }\n      </button>\n      <ng-template #masterTooltipTemplate>{{ masterTooltipText() | translate }}</ng-template>\n    }\n  `\n})\nexport class GlobalContextLinkControlsComponent implements OnInit {\n  // Single output event - all controls toggle together (v2 pattern)\n  @Output() allLinksToggled = new EventEmitter<boolean>();\n\n  private translateService: TranslateService = inject(TranslateService);\n  private _linkStates: { [key: string]: boolean } = {};\n  private linkStatesSignal = signal<{ [key: string]: boolean }>({});\n  private controlConfigsSignal = signal<Record<string, LinkControlConfig>>({});\n\n  showLinks = computed<boolean>(() => {\n    const linkStates = this.linkStatesSignal();\n    return Object.keys(linkStates).length > 0;\n  });\n\n  visibleControls = computed<LinkControlInfo[]>(() => {\n    const linkStates = this.linkStatesSignal();\n    const controlConfigs = this.controlConfigsSignal();\n\n    return Object.entries(linkStates)\n      .filter(([key]) => controlConfigs[key])\n      .map(([key, isLinked]) => ({\n        key,\n        isLinked,\n        cssClass: (controlConfigs[key]?.cssClass || 'default').trim(),\n        icon: controlConfigs[key]?.icon || '',\n        disabled: !!controlConfigs[key]?.disabled,\n        disabledTooltip: controlConfigs[key]?.disabledTooltip,\n        autoUnlinked: !!controlConfigs[key]?.autoUnlinked\n      }));\n  });\n\n  allControlsLinked = computed<boolean>(() => {\n    const controls = this.visibleControls();\n    return controls.length > 0 && controls.every(control => control.isLinked);\n  });\n\n  someControlsLinked = computed<boolean>(() => {\n    const controls = this.visibleControls();\n    return controls.length > 0 && controls.some(control => control.isLinked);\n  });\n\n  masterTooltipText = computed<string>(() => {\n    const controls = this.visibleControls();\n    const linkedControls = controls.filter(control => control.isLinked);\n    const controlConfigs = this.controlConfigsSignal();\n    const clickToToggleLabel = this.translateService.instant(gettext('(click to toggle)'));\n\n    if (linkedControls.length === 0) {\n      const usingWidgetCustomTimeSettingsLabel = this.translateService.instant(\n        gettext('Using widget custom time settings')\n      );\n      return `${usingWidgetCustomTimeSettingsLabel}\\n${clickToToggleLabel}`;\n    }\n\n    const linkedNames = linkedControls.map(control => {\n      const config = controlConfigs[control.key];\n      return this.translateService.instant(config?.label);\n    });\n\n    const formatter = new Intl.ListFormat(\n      this.translateService.getCurrentLang()?.replace('_', '-'),\n      { type: 'conjunction' }\n    );\n    const linkedNamesList = formatter.format(linkedNames);\n    const linkedToDashboardLabel = this.translateService.instant(gettext('Synced to dashboard:'));\n    return `${linkedToDashboardLabel}\\n${linkedNamesList}\\n${clickToToggleLabel}`;\n  });\n\n  @Input()\n  set linkStates(value: { [key: string]: boolean }) {\n    this._linkStates = value || {};\n    this.linkStatesSignal.set(this._linkStates);\n  }\n  get linkStates(): { [key: string]: boolean } {\n    return this._linkStates;\n  }\n\n  @Input()\n  set controlConfigs(value: Record<string, LinkControlConfig>) {\n    this.controlConfigsSignal.set(value || {});\n  }\n\n  ngOnInit(): void {\n    this.linkStatesSignal.set(this._linkStates);\n  }\n\n  toggleAll(): void {\n    const newLinkState = !this.allControlsLinked();\n    const updatedLinkStates = { ...this._linkStates };\n    const config = this.controlConfigsSignal();\n\n    // Update only controls that are part of the current configuration\n    for (const key of Object.keys(config)) {\n      if (key in updatedLinkStates && !config[key]?.disabled) {\n        updatedLinkStates[key] = newLinkState;\n      }\n    }\n    this._linkStates = updatedLinkStates;\n    this.linkStatesSignal.set(this._linkStates);\n    this.allLinksToggled.emit(newLinkState);\n  }\n}\n","import { aggregationType } from '@c8y/client';\nimport {\n  LINK_BTNS_CONFIG,\n  type ControlConfigsMap,\n  type LinkStatesMap,\n  type LinkToggleEvent\n} from '../../models/control-flow.model';\nimport type {\n  GlobalContextSettings,\n  GlobalContextState,\n  WidgetState,\n  WidgetStateHandlerResult\n} from '../../models/global-context.model';\nimport type { LinkHelpersContext } from './inline-context.models';\n\nexport function handleLinkToggle(\n  ctx: LinkHelpersContext,\n  event: LinkToggleEvent,\n  options?: { suppressEmit?: boolean; fromHandler?: boolean }\n): boolean {\n  const sources = ctx.getFieldSources();\n  if (!options?.fromHandler) {\n    resetHandlerOverrides(ctx);\n  }\n\n  if (event.isLinked && event.key === 'aggregation' && sources.dateTimeContext === 'local') {\n    const localDateTimeContext = ctx.getLocalState().dateTimeContext;\n    const validation = ctx.orchestrator.validateAggregationLink({\n      globalAggregation: ctx.getGlobalState().aggregation,\n      localDateTimeContext,\n      calculateValidAggregation: (_dateRange, target) => ({\n        selectedAggregation: ctx.orchestrator.calculateAggregation(\n          localDateTimeContext,\n          target as aggregationType | null\n        )\n      })\n    });\n\n    if (!validation.canLink) {\n      ctx.updateAggregationValue(validation.nextAggregation ?? null);\n      return false;\n    }\n  }\n\n  const outcome = ctx.orchestrator.toggleLink({\n    key: event.key,\n    isLinked: event.isLinked,\n    fieldSources: sources\n  });\n\n  applyLocalStateToForm(ctx, outcome.snapshotKeys);\n\n  if (outcome.recalcLocalAggregation) {\n    ctx.recalcLocalAggregation();\n  }\n\n  if (outcome.recalcGlobalAggregation) {\n    ctx.recalcGlobalAggregation();\n  }\n\n  if (!options?.suppressEmit) {\n    ctx.emitBasedOnFieldSources();\n    if (outcome.shouldEmitRefresh) {\n      ctx.emitRefresh(null);\n    }\n  }\n\n  if (outcome.clearLocalKeys.length) {\n    outcome.clearLocalKeys.forEach(key => applyGlobalValueToForm(ctx, key));\n  }\n\n  syncWithEffectiveConfig(ctx, outcome.snapshotKeys);\n\n  return outcome.shouldEmitRefresh;\n}\n\nexport function toggleAllLinks(\n  ctx: LinkHelpersContext,\n  args: {\n    keys: Array<keyof LinkStatesMap>;\n    isLinked: boolean;\n    suppressRefresh: boolean;\n    suppressEmit: boolean;\n  }\n): void {\n  resetHandlerOverrides(ctx);\n  let supportedLinks: Array<keyof LinkStatesMap> = [...args.keys];\n\n  if (!supportedLinks.length) {\n    return;\n  }\n\n  const currentSources = ctx.getFieldSources();\n\n  if (args.isLinked && supportedLinks.includes('aggregation')) {\n    const dateTimeWillStayLocal =\n      currentSources.dateTimeContext === 'local' && !supportedLinks.includes('dateTimeContext');\n\n    if (dateTimeWillStayLocal) {\n      const localDateTimeContext = ctx.getLocalState().dateTimeContext;\n      const validation = ctx.orchestrator.validateAggregationLink({\n        globalAggregation: ctx.getGlobalState().aggregation,\n        localDateTimeContext,\n        calculateValidAggregation: (_dateRange, target) => ({\n          selectedAggregation: ctx.orchestrator.calculateAggregation(\n            localDateTimeContext,\n            target as aggregationType | null\n          )\n        })\n      });\n\n      if (!validation.canLink) {\n        supportedLinks = supportedLinks.filter(link => link !== 'aggregation');\n        ctx.updateAggregationValue(validation.nextAggregation ?? null);\n      }\n    }\n  }\n\n  if (!supportedLinks.length) {\n    return;\n  }\n\n  const outcome = ctx.orchestrator.toggleAllLinks({\n    keys: supportedLinks,\n    isLinked: args.isLinked,\n    fieldSources: currentSources\n  });\n\n  if (outcome.clearLocalKeys.length) {\n    outcome.clearLocalKeys.forEach(key => applyGlobalValueToForm(ctx, key));\n  }\n\n  if (outcome.snapshotKeys.length) {\n    applyLocalStateToForm(ctx, outcome.snapshotKeys);\n  }\n\n  if (outcome.recalcLocalAggregation) {\n    ctx.recalcLocalAggregation();\n  }\n\n  if (outcome.recalcGlobalAggregation) {\n    ctx.recalcGlobalAggregation();\n  }\n\n  // Only emit configuration updates if not suppressed\n  if (!args.suppressEmit) {\n    ctx.emitBasedOnFieldSources();\n  }\n\n  // Only emit refresh if not suppressed (when unlinking, data is already loaded)\n  if (outcome.shouldEmitRefresh && !args.suppressRefresh) {\n    ctx.emitRefresh(null);\n  }\n\n  syncWithEffectiveConfig(ctx, outcome.snapshotKeys);\n}\n\nexport function applyConfigOverride(\n  ctx: LinkHelpersContext,\n  config: Partial<GlobalContextState>\n): void {\n  const fieldsToUpdate = [\n    'isAutoRefreshEnabled',\n    'refreshInterval',\n    'refreshOption',\n    'dateTimeContext',\n    'aggregation'\n  ] as const;\n\n  fieldsToUpdate.forEach(field => {\n    if (config[field] !== undefined) {\n      updateFormAndLocalState(ctx, field, config[field]);\n    }\n  });\n}\n\nexport function buildWidgetState(\n  ctx: LinkHelpersContext,\n  configOverride?: GlobalContextState | null\n): WidgetState {\n  const config = configOverride ?? ctx.getEffectiveConfig();\n  return {\n    config,\n    inlineControlSettings: ctx.inlineSettings(),\n    dashboardControlSettings: ctx.dashboardControlSettings(),\n    currentLinks: ctx.controlLinkStatus(),\n    displayMode: config?.displayMode\n  };\n}\n\nexport function applyHandlerResult(\n  ctx: LinkHelpersContext,\n  result: WidgetStateHandlerResult\n): boolean {\n  let shouldEmitRefresh = false;\n\n  if (result.inlineControlSettings) {\n    ctx.setInlineOverrides(structuredClone(result.inlineControlSettings));\n  }\n\n  if (result.dashboardControlSettings) {\n    ctx.setDashboardOverrides(structuredClone(result.dashboardControlSettings));\n  }\n\n  if (result.links) {\n    shouldEmitRefresh = processLinkUpdates(ctx, result.links, { suppressEmit: true });\n  }\n\n  if (result.options) {\n    processOptions(ctx, result.options);\n  }\n\n  return shouldEmitRefresh;\n}\n\nexport function processLinkUpdates(\n  ctx: LinkHelpersContext,\n  links: Partial<LinkStatesMap>,\n  options?: { suppressEmit?: boolean }\n): boolean {\n  let shouldEmitRefresh = false;\n\n  Object.entries(links).forEach(([key, isLinked]) => {\n    const linkKey = key as LinkToggleEvent['key'];\n    const refreshRequested = handleLinkToggle(\n      ctx,\n      { key: linkKey, isLinked: !!isLinked },\n      { suppressEmit: true, fromHandler: true }\n    );\n\n    shouldEmitRefresh = shouldEmitRefresh || refreshRequested;\n  });\n\n  if (!options?.suppressEmit) {\n    ctx.emitBasedOnFieldSources();\n    if (shouldEmitRefresh) {\n      ctx.emitRefresh(null);\n    }\n  }\n\n  return shouldEmitRefresh;\n}\n\nexport function processOptions(ctx: LinkHelpersContext, options: Record<string, unknown>): void {\n  if (options.noAutoRefreshCounter !== undefined) {\n    ctx.setShouldDisableCounter(!!options.noAutoRefreshCounter);\n  }\n}\n\nexport function resetHandlerOverrides(ctx: LinkHelpersContext): void {\n  if (Object.keys(ctx.inlineOverrides()).length) {\n    ctx.setInlineOverrides({});\n  }\n  if (Object.keys(ctx.dashboardOverrides()).length) {\n    ctx.setDashboardOverrides({});\n  }\n}\n\nexport function buildControlLinkConfig(\n  ctx: LinkHelpersContext,\n  settings: Partial<GlobalContextSettings>,\n  linkStates: LinkStatesMap | null\n): { controlConfig: ControlConfigsMap; filteredStates: LinkStatesMap } {\n  const config: ControlConfigsMap = {};\n  const filteredStates: LinkStatesMap = {};\n  const disableReasons = ctx.orchestrator.getLinkDisableReasons();\n  const aggregationReason = ctx.orchestrator.getAggregationUnlinkReason();\n  const isAggregationAutoUnlinked =\n    aggregationReason?.source === 'validation' && aggregationReason.canAutoRecover;\n\n  const desiredKeys = new Set<keyof LinkStatesMap>();\n\n  if (settings.showTimeContext) {\n    desiredKeys.add('dateTimeContext');\n  }\n  if (settings.showAggregation) {\n    desiredKeys.add('aggregation');\n  }\n  if (settings.showAutoRefresh) {\n    desiredKeys.add('isAutoRefreshEnabled');\n  }\n\n  if (linkStates) {\n    Object.keys(linkStates).forEach(key => {\n      desiredKeys.add(key as keyof LinkStatesMap);\n    });\n  }\n\n  const BASE_ORDER: Array<keyof LinkStatesMap> = [\n    'dateTimeContext',\n    'aggregation',\n    'isAutoRefreshEnabled'\n  ];\n\n  const orderedKeys = [\n    ...BASE_ORDER.filter(key => desiredKeys.has(key)),\n    ...Array.from(desiredKeys)\n      .filter(key => !BASE_ORDER.includes(key))\n      .sort()\n  ];\n\n  orderedKeys.forEach(key => {\n    const baseConfig = LINK_BTNS_CONFIG[key];\n    if (baseConfig) {\n      const disableReason = disableReasons?.[key as keyof GlobalContextState];\n      const baseCssClass = (baseConfig.cssClass ?? '').trim();\n      const baseAutoUnlinked =\n        key === 'aggregation'\n          ? isAggregationAutoUnlinked\n          : (baseConfig as { autoUnlinked?: boolean }).autoUnlinked;\n      config[key] = {\n        ...baseConfig,\n        cssClass: baseCssClass || 'default',\n        disabled: !!disableReason,\n        disabledTooltip: disableReason ?? baseConfig.label,\n        ...(baseAutoUnlinked !== undefined ? { autoUnlinked: baseAutoUnlinked } : {})\n      };\n      filteredStates[key] = linkStates?.[key] ?? false;\n    }\n  });\n\n  return { controlConfig: config, filteredStates };\n}\n\nfunction updateFormAndLocalState<T extends keyof GlobalContextState>(\n  ctx: LinkHelpersContext,\n  field: T,\n  value: GlobalContextState[T]\n): void {\n  const control = ctx.form()?.get(field as string);\n  if (control) {\n    control.setValue(value, { emitEvent: false });\n  }\n  ctx.updateLocalState(state => ({ ...state, [field]: value }));\n}\n\nfunction applyGlobalValueToForm(ctx: LinkHelpersContext, key: keyof GlobalContextState): void {\n  const control = ctx.form()?.get(key as string);\n  if (!control) {\n    return;\n  }\n\n  const globalState = ctx.getGlobalState();\n  const configState = ctx.getInitialConfig();\n  const globalStateValue = globalState[key];\n  const configValue = configState ? configState[key] : undefined;\n  let valueToApply = globalStateValue !== undefined ? globalStateValue : configValue;\n\n  if (key === 'aggregation') {\n    valueToApply = ctx.orchestrator.deriveAggregationValue(ctx.getEffectiveConfig());\n  }\n\n  control.setValue(valueToApply ?? null, { emitEvent: false });\n\n  if (key === 'isAutoRefreshEnabled') {\n    const refreshIntervalControl = ctx.form()?.get('refreshInterval');\n    const refreshOptionControl = ctx.form()?.get('refreshOption');\n    const refreshIntervalValue =\n      ctx.getGlobalState().refreshInterval ?? ctx.getInitialConfig()?.refreshInterval ?? null;\n    const refreshOptionValue =\n      ctx.getGlobalState().refreshOption ?? ctx.getInitialConfig()?.refreshOption ?? null;\n\n    refreshIntervalControl?.setValue(refreshIntervalValue, { emitEvent: false });\n    refreshOptionControl?.setValue(refreshOptionValue, { emitEvent: false });\n  }\n}\n\nfunction updateFormField(\n  ctx: LinkHelpersContext,\n  key: keyof GlobalContextState,\n  value: GlobalContextState[keyof GlobalContextState] | null | undefined\n): void {\n  const control = ctx.form()?.get(key as string);\n  if (control) {\n    const nextValue = value === undefined ? null : structuredClone(value);\n    control.setValue(nextValue as unknown, { emitEvent: false });\n  }\n}\n\nfunction syncWithEffectiveConfig(\n  ctx: LinkHelpersContext,\n  keys: Array<keyof GlobalContextState>\n): void {\n  if (!keys.length) {\n    return;\n  }\n\n  const latest = ctx.getEffectiveConfig();\n\n  keys.forEach(key => {\n    if (latest[key] === undefined) {\n      return;\n    }\n\n    const value = structuredClone(latest[key]) as GlobalContextState[keyof GlobalContextState];\n    ctx.updateLocalState(current => ({ ...current, [key]: value }));\n    updateFormField(ctx, key, value);\n  });\n}\n\nfunction applyLocalStateToForm(\n  ctx: LinkHelpersContext,\n  keys: Array<keyof GlobalContextState>\n): void {\n  if (!keys.length) {\n    return;\n  }\n\n  const localState = ctx.getLocalState();\n\n  keys.forEach(key => {\n    if (Object.prototype.hasOwnProperty.call(localState, key)) {\n      const value = localState[key];\n      updateFormField(ctx, key, value ?? null);\n    }\n  });\n}\n","import { GLOBAL_CONTEXT_DEFAULTS } from '../../../models/global-context-defaults';\nimport type { GlobalContextState } from '../../../models/global-context.model';\n\nexport const FIELD_SOURCE_LOCAL = 'local' as const;\nexport const FIELD_SOURCE_GLOBAL = 'global' as const;\nexport type FieldSource = typeof FIELD_SOURCE_LOCAL | typeof FIELD_SOURCE_GLOBAL;\n\nexport type FieldSourcesMap = Partial<Record<keyof GlobalContextState, FieldSource>>;\n\nexport interface EffectiveConfigContext {\n  baseConfig: GlobalContextState | null | undefined;\n  localState: Partial<GlobalContextState>;\n  globalState: Partial<GlobalContextState>;\n  fieldSources: FieldSourcesMap;\n}\n\nconst CORE_GLOBAL_CONTEXT_FIELDS: Array<keyof GlobalContextState> = [\n  'dateTimeContext',\n  'aggregation',\n  'isAutoRefreshEnabled',\n  'refreshInterval',\n  'refreshOption',\n  'source'\n];\n\nexport function composeEffectiveConfig(context: EffectiveConfigContext): GlobalContextState {\n  const baseConfiguration: Partial<GlobalContextState> = structuredClone(context.baseConfig ?? {});\n  const configuration: Partial<\n    Record<keyof GlobalContextState, GlobalContextState[keyof GlobalContextState]>\n  > = { ...baseConfiguration };\n\n  CORE_GLOBAL_CONTEXT_FIELDS.forEach(key => {\n    const resolvedValue = resolveConfigurationValue(\n      key,\n      context.fieldSources,\n      context.localState,\n      context.globalState,\n      baseConfiguration\n    );\n    if (resolvedValue === undefined) {\n      delete configuration[key];\n    } else {\n      configuration[key] = resolvedValue;\n    }\n  });\n\n  Object.entries(context.globalState).forEach(([key, value]) => {\n    const isStandardKey = CORE_GLOBAL_CONTEXT_FIELDS.includes(key as keyof GlobalContextState);\n    if (!isStandardKey && value !== undefined) {\n      (configuration as Record<string, unknown>)[key] = structuredClone(value);\n    }\n  });\n\n  return configuration as GlobalContextState;\n}\n\nfunction resolveConfigurationValue<K extends keyof GlobalContextState>(\n  key: K,\n  sources: FieldSourcesMap,\n  localStateValues: Partial<GlobalContextState>,\n  globalStateValues: Partial<GlobalContextState>,\n  baseConfiguration: Partial<GlobalContextState>\n): GlobalContextState[K] | undefined {\n  const localValue = localStateValues[key];\n  const globalValue = globalStateValues[key];\n  const baseValue = baseConfiguration[key];\n\n  if (sources[key] === FIELD_SOURCE_LOCAL && localValue !== undefined) {\n    return safeCloneValue(localValue);\n  }\n\n  if (sources[key] === FIELD_SOURCE_GLOBAL && globalValue !== undefined) {\n    return safeCloneValue(globalValue);\n  }\n\n  if (baseValue !== undefined) {\n    return safeCloneValue(baseValue);\n  }\n\n  switch (key) {\n    case 'isAutoRefreshEnabled':\n      return GLOBAL_CONTEXT_DEFAULTS.IS_AUTO_REFRESH_ENABLED as GlobalContextState[K];\n    case 'refreshOption':\n      return GLOBAL_CONTEXT_DEFAULTS.REFRESH_OPTION as GlobalContextState[K];\n    case 'refreshInterval':\n      return GLOBAL_CONTEXT_DEFAULTS.REFRESH_INTERVAL as GlobalContextState[K];\n    case 'aggregation':\n      return GLOBAL_CONTEXT_DEFAULTS.AGGREGATION as GlobalContextState[K];\n    case 'displayMode':\n      return GLOBAL_CONTEXT_DEFAULTS.DISPLAY_MODE as GlobalContextState[K];\n    case 'dateTimeContext':\n      return undefined;\n    case 'source':\n      return undefined;\n    case 'eventSourceId':\n      return undefined;\n    case 'isGlobalContextReady':\n      return undefined;\n    default: {\n      // Exhaustive check: ensures all keys are handled at compile time\n      const _exhaustive: never = key;\n      return undefined;\n    }\n  }\n}\n\nfunction safeCloneValue<T>(value: T): T {\n  return typeof value === 'object' && value !== null ? structuredClone(value) : value;\n}\n","import { aggregationType } from '@c8y/client';\nimport type { DateTimeContext } from '../../models/date-time-context-picker.model';\nimport type { GlobalContextState } from '../../models/global-context.model';\nimport type { TimeInterval } from '../../models/interval-picker.model';\nimport { TIME_INTERVAL } from '../../models/interval-picker.model';\nimport { DateTimeContextUtil } from '../../utils/date-time-context.util';\nimport type { RefreshHelpersContext } from './inline-context.models';\nimport { FIELD_SOURCE_GLOBAL, FIELD_SOURCE_LOCAL } from './orchestrator/config-composer.util';\nimport type { RefreshResult } from './orchestrator/global-context-inline-orchestrator.service';\nimport type { AggregationChangeInstruction } from './orchestrator/shared-mode-orchestrator.types';\n\nexport function recalculateAggregationForLocalDateTime(ctx: RefreshHelpersContext): void {\n  const localDateTimeContext = ctx.getLocalState().dateTimeContext;\n  const currentAggregation = ctx.form()?.get('aggregation')?.value as aggregationType | null;\n\n  if (!localDateTimeContext) {\n    return;\n  }\n\n  const adjustment = ctx.orchestrator.adjustAggregationForDateTime({\n    dateTimeContext: localDateTimeContext,\n    aggregation: currentAggregation\n  });\n\n  if (adjustment.changed) {\n    updateAggregationValue(ctx, adjustment.nextAggregation);\n  }\n}\n\nexport function recalculateAggregationForGlobalDateTime(ctx: RefreshHelpersContext): void {\n  const globalDateTimeContext =\n    ctx.getGlobalState().dateTimeContext ?? ctx.getInitialConfig()?.dateTimeContext;\n  const currentAggregation = ctx.form()?.get('aggregation')?.value as aggregationType | null;\n\n  if (!globalDateTimeContext) {\n    return;\n  }\n\n  const adjustment = ctx.orchestrator.adjustAggregationForDateTime({\n    dateTimeContext: globalDateTimeContext,\n    aggregation: currentAggregation\n  });\n\n  if (adjustment.changed) {\n    updateAggregationValue(ctx, adjustment.nextAggregation);\n  }\n}\n\nexport function handleGlobalRefresh(\n  ctx: RefreshHelpersContext,\n  globalDateTimeContext: DateTimeContext\n): void {\n  const sources = ctx.getFieldSources();\n\n  ctx.updateGlobalState(current => ({\n    ...current,\n    dateTimeContext: structuredClone(globalDateTimeContext)\n  }));\n\n  // If auto-refresh is unlinked (manual mode), don't auto-emit on global refresh\n  // Linked fields like dateTime will still sync via syncLocalEntriesWithGlobal()\n  if (sources.isAutoRefreshEnabled === FIELD_SOURCE_LOCAL) {\n    return;\n  }\n\n  processRefreshEvent(ctx, { globalDateTimeContext });\n}\n\nexport function processRefreshEvent(\n  ctx: RefreshHelpersContext,\n  params: { globalDateTimeContext?: DateTimeContext | null }\n): RefreshResult {\n  const outcome = ctx.orchestrator.processRefresh({\n    globalDateTimeContext: params.globalDateTimeContext,\n    generateFreshDateTime: interval => generateFreshDateTimeContext(interval)\n  });\n\n  applyRefreshOutcome(ctx, outcome);\n\n  return outcome;\n}\n\nexport function applyRefreshOutcome(ctx: RefreshHelpersContext, outcome: RefreshResult): void {\n  if (outcome.updatedLocalDateTime) {\n    const next = structuredClone(outcome.updatedLocalDateTime);\n    updateLocalDateTimeContext(ctx, next);\n    updateFormDateTimeContext(ctx, next);\n  } else if (outcome.refreshPayload) {\n    const baseContext = ctx.getEffectiveConfig().dateTimeContext ?? {\n      dateFrom: undefined,\n      dateTo: undefined,\n      interval: TIME_INTERVAL.CUSTOM\n    };\n    const next = structuredClone(baseContext);\n    Object.assign(next, outcome.refreshPayload);\n    updateFormDateTimeContext(ctx, next);\n  }\n\n  ctx.emitBasedOnFieldSources();\n\n  if (outcome.shouldEmitRefresh) {\n    ctx.emitRefresh(outcome.refreshPayload ?? null);\n  }\n}\n\nexport function getShouldDisableIntervalConfig(\n  ctx: RefreshHelpersContext\n): Record<string, boolean> {\n  const sources = ctx.getFieldSources();\n  return sources.dateTimeContext === FIELD_SOURCE_GLOBAL ? { custom: true } : {};\n}\n\nexport function deriveDisabledAggregations(\n  ctx: RefreshHelpersContext\n): Partial<Record<aggregationType, boolean>> {\n  const configuration = ctx.getEffectiveConfig();\n  const dateTimeContext = configuration?.dateTimeContext;\n\n  if (!dateTimeContext) {\n    return {};\n  }\n\n  return calculateDisabledAggregationsFromContext(ctx, dateTimeContext);\n}\n\nexport function calculateDisabledAggregationsFromContext(\n  ctx: RefreshHelpersContext,\n  dateTimeContext: DateTimeContext\n): Partial<Record<aggregationType, boolean>> {\n  if (hasValidDateRange(dateTimeContext)) {\n    return calculateFromDateRange(ctx, dateTimeContext);\n  }\n\n  if (hasValidInterval(dateTimeContext)) {\n    return calculateFromInterval(ctx, dateTimeContext.interval!);\n  }\n\n  return {};\n}\n\nfunction calculateFromDateRange(\n  ctx: RefreshHelpersContext,\n  dateTimeContext: DateTimeContext\n): Partial<Record<aggregationType, boolean>> {\n  try {\n    const dateRange = createDateRange(dateTimeContext);\n    return ctx.aggregationValidationService.getDisabledAggregations(dateRange);\n  } catch (error) {\n    return {};\n  }\n}\n\nfunction calculateFromInterval(\n  ctx: RefreshHelpersContext,\n  interval: TimeInterval | string\n): Partial<Record<aggregationType, boolean>> {\n  const range = DateTimeContextUtil.dateRangeFromInterval(interval as TimeInterval);\n  if (!range) {\n    return {};\n  }\n\n  try {\n    return ctx.aggregationValidationService.getDisabledAggregations(range);\n  } catch (error) {\n    return {};\n  }\n}\n\nfunction hasValidInterval(dateTimeContext: DateTimeContext): boolean {\n  return !!dateTimeContext.interval && dateTimeContext.interval !== TIME_INTERVAL.CUSTOM;\n}\n\nfunction createDateRange(dateTimeContext: DateTimeContext): [Date, Date] {\n  return [new Date(dateTimeContext.dateFrom), new Date(dateTimeContext.dateTo)];\n}\n\nfunction hasValidDateRange(dateTimeContext: DateTimeContext | null): boolean {\n  return !!dateTimeContext?.dateFrom && !!dateTimeContext?.dateTo;\n}\n\nexport function generateFreshDateTimeContext(interval: TimeInterval): DateTimeContext {\n  const range = DateTimeContextUtil.dateRangeFromInterval(interval);\n  if (!range) {\n    const now = new Date();\n    return DateTimeContextUtil.ensureIsoContext({ interval, dateFrom: now, dateTo: now });\n  }\n  return DateTimeContextUtil.ensureIsoContext({ interval, dateFrom: range[0], dateTo: range[1] });\n}\n\nexport function patchFormValues(\n  ctx: RefreshHelpersContext,\n  formUpdates: Partial<GlobalContextState>\n): void {\n  const form = ctx.form();\n  if (!form || !Object.keys(formUpdates).length) {\n    return;\n  }\n\n  form.patchValue(formUpdates, { emitEvent: false });\n}\n\nexport function updateAggregationValue(\n  ctx: RefreshHelpersContext,\n  aggregation: aggregationType | null\n): void {\n  ctx.form()?.get('aggregation')?.setValue(aggregation, { emitEvent: false });\n  ctx.updateLocalState(current => ({\n    ...current,\n    aggregation\n  }));\n}\n\nexport function applyLocalAggregationChange(\n  ctx: RefreshHelpersContext,\n  change: AggregationChangeInstruction\n): void {\n  updateAggregationValue(ctx, change.nextAggregation ?? null);\n}\n\nfunction updateLocalDateTimeContext(ctx: RefreshHelpersContext, newContext: DateTimeContext): void {\n  ctx.updateLocalState(current => ({ ...current, dateTimeContext: newContext }));\n}\n\nfunction updateFormDateTimeContext(ctx: RefreshHelpersContext, newContext: DateTimeContext): void {\n  ctx.form()?.get('dateTimeContext')?.setValue(newContext, { emitEvent: false });\n}\n","import type { aggregationType } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport type { DateTimeContext } from '../../../models/date-time-context-picker.model';\nimport type { GlobalContextState } from '../../../models/global-context.model';\nimport {\n  FIELD_SOURCE_GLOBAL,\n  FIELD_SOURCE_LOCAL,\n  type FieldSourcesMap\n} from './config-composer.util';\nimport type { AggregationChangeInstruction } from './shared-mode-orchestrator.types';\nimport type { AggregationValidationResult } from './validation.util';\n\nexport const AGGREGATION_SYNC_FAILED = gettext('Cannot sync aggregation with dashboard');\n\nexport interface AggregationAdjustmentFn {\n  (params: {\n    dateTimeContext: DateTimeContext | null | undefined;\n    aggregation: aggregationType | null | undefined;\n  }): { nextAggregation: aggregationType | null; changed: boolean };\n}\n\nexport interface ResolveAggregationChangeForFormParams {\n  formValue: Partial<GlobalContextState>;\n  sources: FieldSourcesMap;\n  globalAggregation: aggregationType | null | undefined;\n  currentAggregation: aggregationType | null | undefined;\n  adjustAggregationForDateTime: AggregationAdjustmentFn;\n  updateFieldSources: (updater: (current: FieldSourcesMap) => FieldSourcesMap) => void;\n}\n\nexport function resolveAggregationChangeForForm(\n  params: ResolveAggregationChangeForFormParams\n): AggregationChangeInstruction | null {\n  const { formValue, sources } = params;\n  const dateTimeContext = formValue.dateTimeContext;\n\n  if (!dateTimeContext) {\n    return null;\n  }\n\n  if (\n    sources.dateTimeContext === FIELD_SOURCE_LOCAL &&\n    sources.aggregation === FIELD_SOURCE_GLOBAL\n  ) {\n    if (params.globalAggregation === undefined) {\n      return null;\n    }\n\n    const adjustment = params.adjustAggregationForDateTime({\n      dateTimeContext,\n      aggregation: params.globalAggregation ?? null\n    });\n\n    if (!adjustment.changed) {\n      return null;\n    }\n\n    params.updateFieldSources(current => ({\n      ...current,\n      aggregation: FIELD_SOURCE_LOCAL\n    }));\n\n    return {\n      nextAggregation: adjustment.nextAggregation,\n      alertMessage: AGGREGATION_SYNC_FAILED\n    };\n  }\n\n  const adjustment = params.adjustAggregationForDateTime({\n    dateTimeContext,\n    aggregation: params.currentAggregation ?? null\n  });\n\n  if (!adjustment.changed) {\n    return null;\n  }\n\n  return {\n    nextAggregation: adjustment.nextAggregation\n  };\n}\n\nexport interface ResolveAutoUnlinkParams {\n  globalAggregation: aggregationType | null | undefined;\n  localDateTimeContext: DateTimeContext | null | undefined;\n  adjustAggregationForDateTime: AggregationAdjustmentFn;\n  updateFieldSources: (updater: (current: FieldSourcesMap) => FieldSourcesMap) => void;\n}\n\nexport function resolveAutoUnlinkAggregationChange(\n  params: ResolveAutoUnlinkParams\n): AggregationChangeInstruction | null {\n  if (params.globalAggregation === undefined) {\n    return null;\n  }\n\n  const context = params.localDateTimeContext;\n\n  if (!context?.dateFrom || !context?.dateTo) {\n    params.updateFieldSources(current => ({\n      ...current,\n      aggregation: FIELD_SOURCE_LOCAL\n    }));\n\n    return {\n      nextAggregation: null,\n      alertMessage: AGGREGATION_SYNC_FAILED\n    };\n  }\n\n  const adjustment = params.adjustAggregationForDateTime({\n    dateTimeContext: context,\n    aggregation: params.globalAggregation ?? null\n  });\n\n  if (!adjustment.changed) {\n    return null;\n  }\n\n  params.updateFieldSources(current => ({\n    ...current,\n    aggregation: FIELD_SOURCE_LOCAL\n  }));\n\n  return {\n    nextAggregation: adjustment.nextAggregation,\n    alertMessage: AGGREGATION_SYNC_FAILED\n  };\n}\n\nexport interface ApplyAggregationForGlobalStateParams {\n  incomingState: Partial<GlobalContextState>;\n  sources: FieldSourcesMap;\n  formUpdates: Partial<GlobalContextState>;\n  adjustAggregationForDateTime: AggregationAdjustmentFn;\n  localAggregationSnapshot: aggregationType | null;\n  globalAggregationSnapshot: aggregationType | null;\n  applyLocalAggregationChange: (change: AggregationChangeInstruction) => void;\n}\n\nexport function applyAggregationChangesForGlobalState(\n  params: ApplyAggregationForGlobalStateParams\n): boolean {\n  const { incomingState, sources, formUpdates } = params;\n  const dateTimeContext = formUpdates.dateTimeContext ?? incomingState.dateTimeContext;\n\n  if (!dateTimeContext) {\n    return false;\n  }\n\n  const aggregationTarget =\n    sources.aggregation === FIELD_SOURCE_LOCAL\n      ? params.localAggregationSnapshot\n      : (incomingState.aggregation ?? params.globalAggregationSnapshot);\n\n  const adjustment = params.adjustAggregationForDateTime({\n    dateTimeContext,\n    aggregation: aggregationTarget ?? null\n  });\n\n  if (!adjustment.changed) {\n    return false;\n  }\n\n  if (sources.aggregation === FIELD_SOURCE_LOCAL) {\n    params.applyLocalAggregationChange({ nextAggregation: adjustment.nextAggregation });\n  } else {\n    formUpdates.aggregation = adjustment.nextAggregation;\n  }\n\n  return true;\n}\n\nexport interface AggregationValidationDeps {\n  sources?: FieldSourcesMap;\n  localDateTimeContext: DateTimeContext | null | undefined;\n  globalAggregation: aggregationType | null | undefined;\n  validateAggregationLink: (context: {\n    globalAggregation: aggregationType | null | undefined;\n    localDateTimeContext?: DateTimeContext | null;\n    calculateValidAggregation: (\n      range: [Date, Date],\n      target: aggregationType | null\n    ) => { selectedAggregation: aggregationType | null };\n  }) => AggregationValidationResult;\n  calculateAggregation: (\n    dateTimeContext: DateTimeContext | null | undefined,\n    target: aggregationType | null | undefined\n  ) => aggregationType | null;\n}\n\nexport interface AggregationValidationOutcome {\n  isValid: boolean;\n  message?: string;\n}\n\nexport function evaluateAggregationValidation(\n  deps: AggregationValidationDeps\n): AggregationValidationOutcome | null {\n  const sources = deps.sources;\n\n  if (!sources || sources.aggregation !== FIELD_SOURCE_LOCAL) {\n    return null;\n  }\n\n  if (sources.dateTimeContext !== FIELD_SOURCE_LOCAL) {\n    return { isValid: true };\n  }\n\n  const linkResult = deps.validateAggregationLink({\n    globalAggregation: deps.globalAggregation,\n    localDateTimeContext: deps.localDateTimeContext,\n    calculateValidAggregation: (_range, target) => ({\n      selectedAggregation: deps.calculateAggregation(\n        deps.localDateTimeContext,\n        (target ?? null) as aggregationType | null\n      )\n    })\n  });\n\n  if (linkResult.canLink) {\n    return { isValid: true };\n  }\n\n  return {\n    isValid: false,\n    message: AGGREGATION_SYNC_FAILED\n  };\n}\n","import { REFRESH_OPTION } from '../../../models/auto-refresh.model';\nimport type { GlobalContextState } from '../../../models/global-context.model';\nimport { TIME_INTERVAL } from '../../../models/interval-picker.model';\nimport {\n  FIELD_SOURCE_GLOBAL,\n  FIELD_SOURCE_LOCAL,\n  type FieldSourcesMap\n} from './config-composer.util';\nimport type {\n  AggregationChangeInstruction,\n  ExecuteHandlerContext,\n  HandleFormChangeContext,\n  HandleGlobalStateChangeContext\n} from './shared-mode-orchestrator.types';\n\nexport interface FormChangeDependencies {\n  resolveAggregationChangeForForm: (params: {\n    formValue: Partial<GlobalContextState>;\n    sources: FieldSourcesMap;\n  }) => AggregationChangeInstruction | null;\n  setAggregationValidationState: (isValid: boolean, message?: string | null) => void;\n  computeEffectiveConfig: () => GlobalContextState;\n  updateAggregationDisableReason: () => void;\n}\n\nfunction assignClonedValue<K extends keyof GlobalContextState>(\n  target: Partial<GlobalContextState>,\n  key: K,\n  value: GlobalContextState[K]\n): void {\n  target[key] = structuredClone(value);\n}\n\nexport function handleFormChange(\n  context: HandleFormChangeContext,\n  deps: FormChangeDependencies\n): void {\n  const {\n    formValue,\n    getFieldSources,\n    applyFormChangesToLocalState,\n    shouldValidateAggregation,\n    applyLocalAggregationChange,\n    applyRefreshOptionChange,\n    previousRefresh,\n    updateGlobalStateFromForm,\n    emitUpdate,\n    emitRefresh\n  } = context;\n\n  applyFormChangesToLocalState(formValue);\n\n  const sources = getFieldSources();\n  let didChange = false;\n\n  if (shouldValidateAggregation(formValue)) {\n    const aggregationChange = deps.resolveAggregationChangeForForm({\n      formValue,\n      sources\n    });\n\n    if (aggregationChange) {\n      applyLocalAggregationChange(aggregationChange);\n      deps.setAggregationValidationState(\n        !aggregationChange.alertMessage,\n        aggregationChange.alertMessage\n      );\n      didChange = true;\n    }\n  }\n\n  const nextRefresh = formValue.refreshOption ?? previousRefresh;\n  applyRefreshOptionChange(previousRefresh, nextRefresh);\n\n  const updatedSources = getFieldSources();\n  updateGlobalStateFromForm(formValue, updatedSources);\n\n  emitUpdate(deps.computeEffectiveConfig());\n\n  if (didChange) {\n    emitRefresh(null);\n  }\n\n  deps.updateAggregationDisableReason();\n}\n\nexport interface GlobalStateChangeDependencies {\n  resolveAutoUnlinkAggregationChange: (\n    aggregation: GlobalContextState['aggregation']\n  ) => AggregationChangeInstruction | null;\n  setAggregationValidationState: (isValid: boolean, message?: string | null) => void;\n  updateFieldSources: (updater: (current: FieldSourcesMap) => FieldSourcesMap) => void;\n  applyAggregationChangesForGlobalState: (params: {\n    incomingState: Partial<GlobalContextState>;\n    sources: FieldSourcesMap;\n    formUpdates: Partial<GlobalContextState>;\n    applyLocalAggregationChange: (change: AggregationChangeInstruction) => void;\n  }) => boolean;\n  updateLocalState: (\n    updater: (state: Partial<GlobalContextState>) => Partial<GlobalContextState>\n  ) => void;\n  computeEffectiveConfig: () => GlobalContextState;\n  updateAggregationDisableReason: () => void;\n}\n\nexport function handleGlobalStateChange(\n  context: HandleGlobalStateChangeContext,\n  deps: GlobalStateChangeDependencies\n): void {\n  const {\n    state,\n    getFieldSources,\n    previousRefresh,\n    processGlobalStateChange,\n    shouldValidateAggregationForUnlinkedDateTime,\n    applyLocalAggregationChange,\n    applyRefreshOptionChange,\n    patchForm,\n    emitUpdate,\n    emitRefresh\n  } = context;\n\n  const sources = getFieldSources();\n  const formUpdates = processGlobalStateChange(state, sources);\n  let didAnyChange = false;\n  let shouldReevaluateDisableReason = true;\n\n  if (shouldValidateAggregationForUnlinkedDateTime(state, sources)) {\n    const change = deps.resolveAutoUnlinkAggregationChange(state.aggregation);\n    if (change) {\n      delete (formUpdates as Record<string, unknown>).aggregation;\n      deps.updateFieldSources(current => ({\n        ...current,\n        aggregation: FIELD_SOURCE_LOCAL\n      }));\n      deps.setAggregationValidationState(false);\n      applyLocalAggregationChange(change);\n      didAnyChange = true;\n      shouldReevaluateDisableReason = false;\n    }\n  } else if (\n    deps.applyAggregationChangesForGlobalState({\n      incomingState: state,\n      sources,\n      formUpdates,\n      applyLocalAggregationChange\n    })\n  ) {\n    didAnyChange = true;\n  }\n\n  const nextRefresh = state.refreshOption ?? previousRefresh;\n  const refreshChanged = nextRefresh !== previousRefresh;\n  applyRefreshOptionChange(previousRefresh, nextRefresh);\n\n  // When switching to Live mode with CUSTOM interval, always update form with normalized dateTimeContext\n  if (\n    refreshChanged &&\n    nextRefresh === REFRESH_OPTION.LIVE &&\n    state.dateTimeContext?.interval === TIME_INTERVAL.CUSTOM\n  ) {\n    formUpdates.dateTimeContext = state.dateTimeContext;\n  }\n\n  if (refreshChanged && getFieldSources().isAutoRefreshEnabled === FIELD_SOURCE_LOCAL) {\n    delete formUpdates.isAutoRefreshEnabled;\n    delete formUpdates.refreshInterval;\n    delete formUpdates.refreshOption;\n  }\n\n  if (refreshChanged) {\n    didAnyChange = true;\n  }\n\n  if (Object.keys(formUpdates).length) {\n    deps.updateLocalState(current => {\n      const updated = { ...current };\n      (Object.keys(formUpdates) as Array<keyof GlobalContextState>).forEach(key => {\n        const value = formUpdates[key];\n        if (sources[key] === FIELD_SOURCE_GLOBAL && value !== undefined) {\n          assignClonedValue(updated, key, value);\n        }\n      });\n      return updated;\n    });\n    patchForm(formUpdates);\n    didAnyChange = true;\n  }\n\n  emitUpdate(deps.computeEffectiveConfig());\n\n  if (didAnyChange) {\n    emitRefresh(null);\n  }\n\n  if (shouldReevaluateDisableReason) {\n    deps.updateAggregationDisableReason();\n  }\n}\n\nexport interface ExecuteHandlerDependencies {\n  computeEffectiveConfig: () => GlobalContextState;\n}\n\nexport function executeHandler(\n  context: ExecuteHandlerContext,\n  deps: ExecuteHandlerDependencies\n): void {\n  const {\n    handler,\n    configOverride,\n    previousRefresh,\n    applyRefreshOptionChange,\n    buildWidgetState,\n    applyHandlerResult,\n    applyConfigOverride,\n    emitBasedOnFieldSources,\n    requestRefresh\n  } = context;\n\n  if (!handler) {\n    return;\n  }\n\n  if (configOverride?.refreshOption !== undefined) {\n    applyRefreshOptionChange(previousRefresh, configOverride.refreshOption);\n  }\n\n  const result = handler(buildWidgetState(configOverride));\n  let shouldEmitRefresh = false;\n\n  if (result) {\n    shouldEmitRefresh = applyHandlerResult(result);\n  }\n\n  if (configOverride) {\n    applyConfigOverride(configOverride);\n  }\n\n  emitBasedOnFieldSources(deps.computeEffectiveConfig());\n  if (shouldEmitRefresh) {\n    requestRefresh();\n  }\n}\n","import type { DateTimeContext } from '../../../models/date-time-context-picker.model';\nimport type { GlobalContextState } from '../../../models/global-context.model';\nimport type { TimeInterval } from '../../../models/interval-picker.model';\nimport { TIME_INTERVAL } from '../../../models/interval-picker.model';\nimport { DateTimeContextUtil } from '../../../utils/date-time-context.util';\nimport {\n  FIELD_SOURCE_GLOBAL,\n  FIELD_SOURCE_LOCAL,\n  type FieldSourcesMap\n} from './config-composer.util';\nimport type { RefreshResult } from './shared-mode-orchestrator.types';\n\nexport interface RefreshContext {\n  effectiveConfig: GlobalContextState;\n  fieldSources: FieldSourcesMap;\n  globalDateTimeContext?: DateTimeContext | null;\n  generateFreshDateTime: (interval: TimeInterval) => DateTimeContext;\n}\n\nexport interface RefreshDependencies {\n  supportsAutoRefresh: (config: GlobalContextState) => boolean;\n}\n\nexport function calculateRefreshOutcome(\n  context: RefreshContext,\n  deps: RefreshDependencies\n): RefreshResult {\n  const { fieldSources, effectiveConfig } = context;\n\n  if (fieldSources.isAutoRefreshEnabled === FIELD_SOURCE_LOCAL) {\n    return handleLocalAutoRefresh(context, deps);\n  }\n\n  if (fieldSources.dateTimeContext === FIELD_SOURCE_GLOBAL) {\n    return {\n      refreshPayload: context.globalDateTimeContext ?? null,\n      shouldEmitRefresh: true\n    };\n  }\n\n  if (!deps.supportsAutoRefresh(effectiveConfig)) {\n    return {\n      refreshPayload: null,\n      shouldEmitRefresh: true\n    };\n  }\n\n  const interval = resolveRefreshInterval(fieldSources, effectiveConfig.dateTimeContext?.interval);\n  const freshContext = buildFreshContext(context, interval);\n\n  return {\n    refreshPayload: null,\n    updatedLocalDateTime: freshContext,\n    shouldEmitRefresh: true\n  };\n}\n\nexport function handleLocalAutoRefresh(\n  context: RefreshContext,\n  deps: RefreshDependencies\n): RefreshResult {\n  const { fieldSources, effectiveConfig } = context;\n  const result: RefreshResult = { refreshPayload: null, shouldEmitRefresh: true };\n\n  if (fieldSources.dateTimeContext === FIELD_SOURCE_GLOBAL) {\n    const resolvedContext =\n      context.globalDateTimeContext ?? effectiveConfig.dateTimeContext ?? null;\n\n    if (resolvedContext) {\n      result.refreshPayload = structuredClone(resolvedContext);\n      return result;\n    }\n\n    if (!deps.supportsAutoRefresh(effectiveConfig)) {\n      return result;\n    }\n\n    const interval = resolveRefreshInterval(\n      fieldSources,\n      effectiveConfig.dateTimeContext?.interval\n    );\n    result.refreshPayload = buildFreshContext(context, interval);\n    return result;\n  }\n\n  if (!deps.supportsAutoRefresh(effectiveConfig)) {\n    return result;\n  }\n\n  const interval = resolveRefreshInterval(fieldSources, effectiveConfig.dateTimeContext?.interval);\n  result.updatedLocalDateTime = buildFreshContext(context, interval);\n  return result;\n}\n\nexport function resolveRefreshInterval(\n  fieldSources: FieldSourcesMap,\n  configInterval: TimeInterval | undefined\n): TimeInterval {\n  if (fieldSources.dateTimeContext === FIELD_SOURCE_LOCAL && configInterval) {\n    return configInterval;\n  }\n\n  return configInterval ?? TIME_INTERVAL.CUSTOM;\n}\n\nexport function buildFreshContext(\n  context: RefreshContext,\n  interval: TimeInterval\n): DateTimeContext {\n  if (interval === TIME_INTERVAL.CUSTOM) {\n    const source = context.effectiveConfig.dateTimeContext;\n\n    if (source?.dateFrom) {\n      return DateTimeContextUtil.normalizeForLive(source);\n    }\n\n    const generated = context.generateFreshDateTime(TIME_INTERVAL.CUSTOM);\n    if (generated) {\n      return generated;\n    }\n\n    return {\n      interval: TIME_INTERVAL.CUSTOM,\n      dateFrom: null,\n      dateTo: null\n    } satisfies DateTimeContext;\n  }\n\n  return context.generateFreshDateTime(interval);\n}\n","import type { WritableSignal } from '@angular/core';\nimport type { RefreshOption } from '../../../models/auto-refresh.model';\nimport type { LinkStatesMap } from '../../../models/control-flow.model';\nimport type { DateTimeContext } from '../../../models/date-time-context-picker.model';\nimport {\n  GLOBAL_CONTEXT_DISPLAY_MODE,\n  type GlobalContextDisplayMode,\n  type GlobalContextState,\n  WIDGET_DISPLAY_MODE,\n  type WidgetControls,\n  type WidgetDisplayMode\n} from '../../../models/global-context.model';\nimport type { WidgetControlService } from '../../../services/domain/widget-control.service';\nimport { DateTimeContextUtil } from '../../../utils/date-time-context.util';\nimport { createDefaultGlobalContextState } from '../../../utils/global-context-defaults.util';\nimport { GLOBAL_CONTEXT_DEFAULTS } from '../../../models/global-context-defaults';\nimport {\n  FIELD_SOURCE_GLOBAL,\n  FIELD_SOURCE_LOCAL,\n  type FieldSourcesMap\n} from './config-composer.util';\nimport type { VisibilityContext } from './shared-mode-orchestrator.types';\n\nexport function mapToContextDisplayMode(displayMode: WidgetDisplayMode): GlobalContextDisplayMode {\n  switch (displayMode) {\n    case WIDGET_DISPLAY_MODE.CONFIG:\n      return GLOBAL_CONTEXT_DISPLAY_MODE.CONFIG;\n    case WIDGET_DISPLAY_MODE.INLINE:\n      return GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD;\n    default:\n      return GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD;\n  }\n}\n\nexport function resolveWidgetDisplayMode(\n  initialConfig: GlobalContextState | null,\n  globalState: Partial<GlobalContextState>\n): WidgetDisplayMode {\n  const raw = initialConfig?.displayMode ?? globalState.displayMode;\n  if (raw === GLOBAL_CONTEXT_DISPLAY_MODE.CONFIG) return WIDGET_DISPLAY_MODE.CONFIG;\n  if (raw === GLOBAL_CONTEXT_DISPLAY_MODE.VIEW_AND_CONFIG) return WIDGET_DISPLAY_MODE.INLINE;\n  return WIDGET_DISPLAY_MODE.INLINE;\n}\n\nexport function resolveVisibilityContextInternal(\n  config: GlobalContextState,\n  widgetControlsSignal: WritableSignal<WidgetControls | null>,\n  fieldSourcesSignal: WritableSignal<FieldSourcesMap>,\n  globalStateSignal: WritableSignal<Partial<GlobalContextState>>,\n  widgetControlService: WidgetControlService,\n  getDefaultRefreshOption: () => RefreshOption\n): VisibilityContext | null {\n  const controls = widgetControlsSignal();\n  if (!controls || !config.displayMode) return null;\n  const refreshOption =\n    (config.displayMode === GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD\n      ? globalStateSignal().refreshOption\n      : config.refreshOption) ?? getDefaultRefreshOption();\n  const baseVisibility = widgetControlService.resolveInlineControlSettings(\n    controls,\n    config.displayMode,\n    refreshOption\n  ) ?? {\n    settings: {},\n    links: {},\n    dashboardControls: {}\n  };\n  if (config.displayMode !== GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD) return baseVisibility;\n  let settings = baseVisibility.settings || {};\n  let links = { ...(baseVisibility.links || {}) } as LinkStatesMap;\n  let dashboard = baseVisibility.dashboardControls || {};\n  const sources = fieldSourcesSignal() || {};\n  (Object.keys(links) as Array<keyof LinkStatesMap>).forEach(key => {\n    const desired =\n      (sources as FieldSourcesMap)[key as keyof GlobalContextState] === FIELD_SOURCE_GLOBAL;\n    if (!!links[key] === desired) return;\n    const toggled = widgetControlService.toggleControlLink(key as string, settings, links);\n    settings = toggled.settings;\n    links = toggled.links as LinkStatesMap;\n    dashboard = toggled.dashboardControls;\n  });\n  return { settings, links, dashboardControls: dashboard };\n}\n\nexport function syncSourcesForRefreshOption(\n  displayMode: WidgetDisplayMode,\n  refreshOption: RefreshOption,\n  controls: WidgetControls | null,\n  fieldSourcesSignal: WritableSignal<FieldSourcesMap>,\n  getDefaultRefreshOption: () => RefreshOption,\n  setFieldSources: (sources: FieldSourcesMap) => void\n): void {\n  const sources = { ...fieldSourcesSignal() };\n  if (!sources) return;\n  sources.refreshOption = sources.refreshOption ?? FIELD_SOURCE_LOCAL;\n  if (controls?.supports?.includes('isAutoRefreshEnabled')) {\n    sources.isAutoRefreshEnabled = sources.isAutoRefreshEnabled ?? FIELD_SOURCE_LOCAL;\n    sources.refreshInterval = sources.refreshInterval ?? FIELD_SOURCE_LOCAL;\n  }\n  if (displayMode === WIDGET_DISPLAY_MODE.CONFIG) {\n    sources.refreshOption = FIELD_SOURCE_LOCAL;\n    sources.isAutoRefreshEnabled = FIELD_SOURCE_LOCAL;\n    sources.refreshInterval = FIELD_SOURCE_LOCAL;\n  }\n  if (refreshOption !== getDefaultRefreshOption())\n    sources.isAutoRefreshEnabled = FIELD_SOURCE_LOCAL;\n  setFieldSources(sources);\n}\n\nexport function sanitizeLocalState(\n  state: Partial<GlobalContextState> | null | undefined,\n  configSignal: WritableSignal<GlobalContextState>,\n  ensureDateTimeContext: (\n    context: GlobalContextState['dateTimeContext'] | null | undefined\n  ) => DateTimeContext\n): Partial<GlobalContextState> {\n  const snapshot = { ...state };\n  if (snapshot.dateTimeContext === null) delete snapshot.dateTimeContext;\n  else if (snapshot.dateTimeContext !== undefined)\n    snapshot.dateTimeContext = ensureDateTimeContext(snapshot.dateTimeContext);\n  // Always enforce the fixed 5s refresh interval\n  if (snapshot.refreshInterval !== undefined) {\n    snapshot.refreshInterval = GLOBAL_CONTEXT_DEFAULTS.REFRESH_INTERVAL;\n  }\n  return snapshot;\n}\n\nexport function sanitizeGlobalState(\n  state: Partial<GlobalContextState> | null | undefined,\n  configSignal: WritableSignal<GlobalContextState>,\n  normalizeRefreshOption: (option: RefreshOption | undefined) => RefreshOption,\n  getDefaultRefreshOption: () => RefreshOption,\n  ensureDateTimeContext: (\n    context: GlobalContextState['dateTimeContext'] | null | undefined\n  ) => DateTimeContext\n): Partial<GlobalContextState> {\n  const snapshot = { ...state };\n  if (snapshot.dateTimeContext !== undefined)\n    snapshot.dateTimeContext = ensureDateTimeContext(snapshot.dateTimeContext);\n  snapshot.refreshOption = normalizeRefreshOption(\n    snapshot.refreshOption ?? getDefaultRefreshOption()\n  );\n  // Always enforce the fixed 5s refresh interval\n  if (snapshot.refreshInterval !== undefined) {\n    snapshot.refreshInterval = GLOBAL_CONTEXT_DEFAULTS.REFRESH_INTERVAL;\n  }\n  return snapshot;\n}\n\nexport function ensureDateTimeContext(\n  context: GlobalContextState['dateTimeContext'] | null | undefined,\n  configSignal: WritableSignal<GlobalContextState>\n): DateTimeContext {\n  const defaults =\n    configSignal().dateTimeContext ?? createDefaultGlobalContextState().dateTimeContext;\n  const iso = DateTimeContextUtil.ensureIsoContext(context ?? defaults);\n  return {\n    interval: iso.interval ?? defaults.interval,\n    dateFrom: iso.dateFrom ?? defaults.dateFrom,\n    dateTo: iso.dateTo ?? defaults.dateTo\n  };\n}\n\nexport function syncLocalEntriesWithGlobal(\n  fieldSourcesSignal: WritableSignal<FieldSourcesMap>,\n  globalStateSignal: WritableSignal<Partial<GlobalContextState>>,\n  localStateSignal: WritableSignal<Partial<GlobalContextState>>\n): void {\n  const sources = fieldSourcesSignal();\n  const globalState = globalStateSignal();\n  if (!sources || !globalState) return;\n  localStateSignal.update(current => {\n    const working: Partial<GlobalContextState> = { ...current };\n    (Object.keys(globalState) as Array<keyof GlobalContextState>).forEach(key => {\n      if (sources[key] === FIELD_SOURCE_GLOBAL) {\n        const value = globalState[key];\n        if (value === undefined) {\n          delete working[key];\n        } else {\n          (working as any)[key] = structuredClone(value);\n        }\n      }\n    });\n    return working;\n  });\n}\n","import type { LinkStatesMap } from '../../../models/control-flow.model';\nimport type { GlobalContextState } from '../../../models/global-context.model';\nimport {\n  FIELD_SOURCE_GLOBAL,\n  FIELD_SOURCE_LOCAL,\n  type FieldSourcesMap\n} from './config-composer.util';\nimport type { LinkToggleOutcome } from './shared-mode-orchestrator.types';\n\nexport interface LinkToggleArgs {\n  key: keyof LinkStatesMap;\n  isLinked: boolean;\n  fieldSources: FieldSourcesMap;\n}\n\nexport interface ToggleAllArgs {\n  keys: Array<keyof LinkStatesMap>;\n  isLinked: boolean;\n  fieldSources: FieldSourcesMap;\n}\n\nexport function computeLinkToggle(args: LinkToggleArgs): LinkToggleOutcome {\n  const { key, isLinked, fieldSources } = args;\n  const updatedFieldSources: FieldSourcesMap = { ...fieldSources };\n  const snapshotKeys = new Set<keyof GlobalContextState>();\n  const clearLocalKeys = new Set<keyof GlobalContextState>();\n  const targetSource = isLinked ? FIELD_SOURCE_GLOBAL : FIELD_SOURCE_LOCAL;\n\n  updatedFieldSources[key as keyof GlobalContextState] = targetSource;\n\n  if (isLinked) {\n    clearLocalKeys.add(key as keyof GlobalContextState);\n  } else {\n    snapshotKeys.add(key as keyof GlobalContextState);\n  }\n\n  if (key === 'dateTimeContext') {\n    updatedFieldSources.refreshOption = targetSource;\n    if (isLinked) {\n      clearLocalKeys.add('refreshOption');\n    } else {\n      snapshotKeys.add('refreshOption');\n    }\n  }\n\n  let recalcLocalAggregation = false;\n  let recalcGlobalAggregation = false;\n\n  if (!isLinked && key === 'aggregation' && fieldSources.dateTimeContext === FIELD_SOURCE_LOCAL) {\n    recalcLocalAggregation = true;\n  }\n\n  if (isLinked && key === 'dateTimeContext' && fieldSources.aggregation === FIELD_SOURCE_LOCAL) {\n    recalcGlobalAggregation = true;\n  }\n\n  let shouldEmitRefresh = false;\n\n  if (key === 'isAutoRefreshEnabled') {\n    updatedFieldSources.refreshInterval = targetSource;\n    updatedFieldSources.refreshOption = targetSource;\n    shouldEmitRefresh = !isLinked;\n\n    if (isLinked) {\n      clearLocalKeys.add('refreshInterval');\n      clearLocalKeys.add('refreshOption');\n    } else {\n      snapshotKeys.add('refreshInterval');\n      snapshotKeys.add('refreshOption');\n    }\n  }\n\n  return {\n    fieldSources: updatedFieldSources,\n    snapshotKeys: Array.from(snapshotKeys),\n    shouldEmitRefresh,\n    recalcLocalAggregation,\n    recalcGlobalAggregation,\n    clearLocalKeys: Array.from(clearLocalKeys)\n  };\n}\n\nexport function computeToggleAll(args: ToggleAllArgs): LinkToggleOutcome {\n  const { keys, isLinked, fieldSources } = args;\n  const updatedFieldSources: FieldSourcesMap = { ...fieldSources };\n  const snapshotKeys = new Set<keyof GlobalContextState>();\n  const clearLocalKeys = new Set<keyof GlobalContextState>();\n\n  let shouldEmitRefresh = false;\n  let recalcLocalAggregation = false;\n  let recalcGlobalAggregation = false;\n\n  keys.forEach(key => {\n    const targetSource = isLinked ? FIELD_SOURCE_GLOBAL : FIELD_SOURCE_LOCAL;\n    updatedFieldSources[key as keyof GlobalContextState] = targetSource;\n\n    if (isLinked) {\n      clearLocalKeys.add(key as keyof GlobalContextState);\n    } else {\n      snapshotKeys.add(key as keyof GlobalContextState);\n    }\n\n    if (key === 'dateTimeContext') {\n      updatedFieldSources.refreshOption = targetSource;\n      if (isLinked) {\n        clearLocalKeys.add('refreshOption');\n      } else {\n        snapshotKeys.add('refreshOption');\n      }\n    }\n\n    if (!isLinked && key === 'aggregation' && fieldSources.dateTimeContext === FIELD_SOURCE_LOCAL) {\n      recalcLocalAggregation = true;\n    }\n\n    if (isLinked && key === 'dateTimeContext' && fieldSources.aggregation === FIELD_SOURCE_LOCAL) {\n      recalcGlobalAggregation = true;\n    }\n\n    if (key === 'isAutoRefreshEnabled') {\n      updatedFieldSources.refreshInterval = targetSource;\n      updatedFieldSources.refreshOption = targetSource;\n      shouldEmitRefresh = !isLinked;\n\n      if (isLinked) {\n        clearLocalKeys.add('refreshInterval');\n        clearLocalKeys.add('refreshOption');\n      } else {\n        snapshotKeys.add('refreshInterval');\n        snapshotKeys.add('refreshOption');\n      }\n    }\n  });\n\n  return {\n    fieldSources: updatedFieldSources,\n    snapshotKeys: Array.from(snapshotKeys),\n    shouldEmitRefresh,\n    recalcLocalAggregation,\n    recalcGlobalAggregation,\n    clearLocalKeys: Array.from(clearLocalKeys)\n  };\n}\n","import { aggregationType } from '@c8y/client';\nimport type { DateTimeContext } from '../../../models/date-time-context-picker.model';\nimport type { GlobalContextState } from '../../../models/global-context.model';\n\nexport interface AggregationValidationContext {\n  globalAggregation: aggregationType | null | undefined;\n  localDateTimeContext?: DateTimeContext | null;\n  calculateValidAggregation: (\n    dateRange: [Date, Date],\n    target: aggregationType | null\n  ) => {\n    selectedAggregation: aggregationType | null;\n  };\n}\n\nexport interface AggregationValidationResult {\n  canLink: boolean;\n  nextAggregation: aggregationType | null;\n  message?: string;\n}\n\nexport function validateAggregationLink(\n  context: AggregationValidationContext\n): AggregationValidationResult {\n  const { globalAggregation, localDateTimeContext } = context;\n\n  if (globalAggregation === undefined) {\n    return { canLink: true, nextAggregation: null };\n  }\n\n  if (!localDateTimeContext?.dateFrom || !localDateTimeContext?.dateTo) {\n    return { canLink: true, nextAggregation: globalAggregation };\n  }\n\n  try {\n    const dateRange: [Date, Date] = [\n      new Date(localDateTimeContext.dateFrom),\n      new Date(localDateTimeContext.dateTo)\n    ];\n\n    const result = context.calculateValidAggregation(dateRange, globalAggregation);\n\n    if (result.selectedAggregation !== globalAggregation) {\n      return {\n        canLink: false,\n        nextAggregation: result.selectedAggregation,\n        message: 'Cannot sync aggregation with dashboard date range'\n      };\n    }\n\n    return { canLink: true, nextAggregation: globalAggregation };\n  } catch (error) {\n    return { canLink: false, nextAggregation: null };\n  }\n}\n\nexport function deriveAggregationValue(config: GlobalContextState): aggregationType | null {\n  return config.dateTimeContext && config.dateTimeContext.interval === 'none'\n    ? null\n    : (config.aggregation ?? null);\n}\n","import { Injectable, WritableSignal, signal } from '@angular/core';\nimport { aggregationType } from '@c8y/client';\nimport { Subject } from 'rxjs';\nimport type { RefreshOption } from '../../../models/auto-refresh.model';\nimport type { LinkStatesMap } from '../../../models/control-flow.model';\nimport type { DateTimeContext } from '../../../models/date-time-context-picker.model';\nimport type {\n  GlobalContextEvent,\n  GlobalContextState,\n  WidgetControls,\n  WidgetDisplayMode\n} from '../../../models/global-context.model';\nimport {\n  GLOBAL_CONTEXT_DISPLAY_MODE,\n  WIDGET_DISPLAY_MODE\n} from '../../../models/global-context.model';\nimport type { TimeInterval } from '../../../models/interval-picker.model';\nimport { AggregationPickerService } from '../../../services/domain/aggregation-picker.service';\nimport { WidgetControlService } from '../../../services/domain/widget-control.service';\nimport { GlobalContextService } from '../../../services/state/global-context.service';\nimport { createDefaultGlobalContextState } from '../../../utils/global-context-defaults.util';\nimport { GLOBAL_CONTEXT_DEFAULTS } from '../../../models/global-context-defaults';\nimport {\n  FIELD_SOURCE_GLOBAL,\n  FIELD_SOURCE_LOCAL,\n  composeEffectiveConfig,\n  type FieldSourcesMap\n} from './config-composer.util';\nimport {\n  AGGREGATION_SYNC_FAILED,\n  applyAggregationChangesForGlobalState as applyAggregationChangesForGlobalStateHelper,\n  evaluateAggregationValidation,\n  resolveAggregationChangeForForm as resolveAggregationChangeForFormHelper,\n  resolveAutoUnlinkAggregationChange as resolveAutoUnlinkAggregationChangeHelper\n} from './shared-mode-aggregation.helper';\nimport {\n  executeHandler as executeHandlerHelper,\n  handleFormChange as handleFormChangeHelper,\n  handleGlobalStateChange as handleGlobalStateChangeHelper\n} from './shared-mode-context.helper';\nimport type {\n  AggregationChangeInstruction,\n  AggregationUnlinkReason,\n  ExecuteHandlerContext,\n  HandleFormChangeContext,\n  HandleGlobalStateChangeContext,\n  LinkToggleOutcome,\n  ModeServices,\n  RefreshResult,\n  VisibilityContext\n} from './shared-mode-orchestrator.types';\nimport { calculateRefreshOutcome } from './shared-mode-refresh.helper';\nimport {\n  ensureDateTimeContext as ensureDateTimeContextHelper,\n  mapToContextDisplayMode as mapToContextDisplayModeHelper,\n  resolveVisibilityContextInternal as resolveVisibilityContextInternalHelper,\n  resolveWidgetDisplayMode as resolveWidgetDisplayModeHelper,\n  sanitizeGlobalState as sanitizeGlobalStateHelper,\n  sanitizeLocalState as sanitizeLocalStateHelper,\n  syncLocalEntriesWithGlobal as syncLocalEntriesWithGlobalHelper,\n  syncSourcesForRefreshOption as syncSourcesForRefreshOptionHelper\n} from './shared-mode-state.helper';\nimport { computeLinkToggle, computeToggleAll } from './shared-mode-toggle.helper';\nimport {\n  deriveAggregationValue as deriveAggregationValueUtil,\n  validateAggregationLink as validateAggregationLinkUtil,\n  type AggregationValidationContext,\n  type AggregationValidationResult\n} from './validation.util';\n\n@Injectable()\nexport class SharedModeOrchestrator {\n  private readonly widgetControlService: WidgetControlService;\n  private readonly aggregationPickerService: AggregationPickerService;\n  private readonly globalContextService: GlobalContextService;\n  private readonly mode: RefreshOption;\n  private configSignal: WritableSignal<GlobalContextState> = signal(\n    createDefaultGlobalContextState()\n  );\n  private widgetControlsSignal: WritableSignal<WidgetControls | null> = signal(null);\n  private displayModeSignal: WritableSignal<WidgetDisplayMode> = signal(WIDGET_DISPLAY_MODE.INLINE);\n  private loadingSignal: WritableSignal<boolean> = signal(false);\n  private fieldSourcesSignal: WritableSignal<FieldSourcesMap> = signal({});\n  private localStateSignal: WritableSignal<Partial<GlobalContextState>> = signal({});\n  private globalStateSignal: WritableSignal<Partial<GlobalContextState>> = signal({});\n  private linkDisableReasonsSignal: WritableSignal<\n    Partial<Record<keyof GlobalContextState, string>>\n  > = signal({});\n  private aggregationUnlinkReason: AggregationUnlinkReason | null = null;\n  private latestVisibility: VisibilityContext | null = null;\n  readonly globalContextChange$ = new Subject<GlobalContextEvent>();\n  readonly refresh$ = new Subject<void>();\n  constructor(mode: RefreshOption, services: ModeServices) {\n    this.mode = mode;\n    this.widgetControlService = services.widgetControlService;\n    this.aggregationPickerService = services.aggregationPickerService;\n    this.globalContextService = services.globalContextService;\n  }\n  initConfig(config: GlobalContextState | null | undefined): void {\n    const cloned = structuredClone(config ?? createDefaultGlobalContextState());\n    // Always enforce the fixed 5s refresh interval\n    cloned.refreshInterval = GLOBAL_CONTEXT_DEFAULTS.REFRESH_INTERVAL;\n    this.configSignal.set(cloned);\n  }\n  initWidgetControls(controls: WidgetControls | null | undefined): void {\n    this.widgetControlsSignal.set(controls ?? null);\n  }\n  setDisplayMode(mode: WidgetDisplayMode | null | undefined): void {\n    this.displayModeSignal.set(mode ?? WIDGET_DISPLAY_MODE.INLINE);\n  }\n  getDisplayMode(): WidgetDisplayMode {\n    return this.displayModeSignal();\n  }\n  setLoading(isLoading: boolean): void {\n    this.loadingSignal.set(!!isLoading);\n  }\n  getFieldSources(): FieldSourcesMap {\n    return this.fieldSourcesSignal();\n  }\n  setFieldSources(value: FieldSourcesMap): void {\n    this.fieldSourcesSignal.set(value ?? {});\n    this.syncLocalEntriesWithGlobal();\n  }\n  updateFieldSources(updater: (sources: FieldSourcesMap) => FieldSourcesMap): void {\n    this.fieldSourcesSignal.update(current => updater({ ...current }) ?? {});\n    this.syncLocalEntriesWithGlobal();\n  }\n  getLocalState(): Partial<GlobalContextState> {\n    return this.localStateSignal();\n  }\n  setLocalState(state: Partial<GlobalContextState>): void {\n    const sanitized = sanitizeLocalStateHelper(state, this.configSignal, ctx =>\n      this.ensureDateTimeContext(ctx)\n    );\n    this.localStateSignal.set(sanitized);\n  }\n  updateLocalState(\n    updater: (state: Partial<GlobalContextState>) => Partial<GlobalContextState>\n  ): void {\n    this.localStateSignal.update(current =>\n      sanitizeLocalStateHelper(updater({ ...current }) ?? {}, this.configSignal, ctx =>\n        this.ensureDateTimeContext(ctx)\n      )\n    );\n  }\n  getGlobalState(): Partial<GlobalContextState> {\n    return this.globalStateSignal();\n  }\n  setGlobalState(state: Partial<GlobalContextState>): void {\n    this.globalStateSignal.set(\n      sanitizeGlobalStateHelper(\n        state,\n        this.configSignal,\n        opt => this.normalizeRefreshOption(opt),\n        () => this.getDefaultRefreshOption(),\n        ctx => this.ensureDateTimeContext(ctx)\n      )\n    );\n    this.syncLocalEntriesWithGlobal();\n  }\n  updateGlobalState(\n    updater: (state: Partial<GlobalContextState>) => Partial<GlobalContextState>\n  ): void {\n    this.globalStateSignal.update(current =>\n      sanitizeGlobalStateHelper(\n        updater({ ...current }) ?? {},\n        this.configSignal,\n        opt => this.normalizeRefreshOption(opt),\n        () => this.getDefaultRefreshOption(),\n        ctx => this.ensureDateTimeContext(ctx)\n      )\n    );\n    this.syncLocalEntriesWithGlobal();\n  }\n  initializeStateAndSources(params: {\n    initialConfig: GlobalContextState | null;\n    globalState: Partial<GlobalContextState>;\n    isDashboard: boolean;\n    widgetControls?: WidgetControls | null;\n    generateFreshDateTime: (interval: TimeInterval) => DateTimeContext;\n    forcedRefreshOption?: RefreshOption;\n  }): void {\n    const {\n      initialConfig,\n      globalState,\n      isDashboard,\n      widgetControls,\n      generateFreshDateTime,\n      forcedRefreshOption\n    } = params;\n    const normalizedGlobalState = structuredClone(globalState ?? {});\n    if (forcedRefreshOption) normalizedGlobalState.refreshOption = forcedRefreshOption;\n    this.initConfig(initialConfig);\n    this.setGlobalState(normalizedGlobalState);\n    this.initWidgetControls(widgetControls);\n    const widgetDisplayMode = resolveWidgetDisplayModeHelper(initialConfig, normalizedGlobalState);\n    const controls = widgetControls ?? this.widgetControlsSignal();\n\n    const localState: Partial<GlobalContextState> = initialConfig ? { ...initialConfig } : {};\n    const fieldSources: FieldSourcesMap = {};\n    const globalSnapshot: Partial<GlobalContextState> = structuredClone(\n      normalizedGlobalState ?? {}\n    );\n\n    // Simple rule: Dashboard mode → ALL sources global, Non-dashboard → ALL sources local\n    const defaultSource = isDashboard ? FIELD_SOURCE_GLOBAL : FIELD_SOURCE_LOCAL;\n\n    (Object.keys(localState) as Array<keyof GlobalContextState>).forEach(key => {\n      fieldSources[key] = defaultSource;\n    });\n\n    // Ensure all supported controls have field sources\n    if (controls?.supports) {\n      controls.supports.forEach(field => {\n        if (!fieldSources[field]) {\n          fieldSources[field] = defaultSource;\n        }\n      });\n    }\n\n    // Source is ALWAYS global (tracks event origin)\n    fieldSources.source = FIELD_SOURCE_GLOBAL;\n\n    this.applyInitialModeAdjustments({\n      isDashboard,\n      localState,\n      fieldSources,\n      generateFreshDateTime\n    });\n    this.setFieldSources(fieldSources);\n    this.setLocalState(localState);\n    this.setGlobalState(globalSnapshot);\n    this.setDisplayMode(widgetDisplayMode);\n    this.linkDisableReasonsSignal.set({});\n    this.updateAggregationDisableReason();\n  }\n  getConfigSnapshot(): GlobalContextState {\n    return this.configSignal();\n  }\n  computeEffectiveConfig(baseConfig: GlobalContextState | null | undefined): GlobalContextState {\n    const localState = this.localStateSignal();\n    const globalState = this.globalStateSignal();\n    const fieldSources = this.fieldSourcesSignal();\n\n    // Normalize baseConfig to enforce fixed 5s refresh interval\n    const normalizedBaseConfig = baseConfig\n      ? {\n          ...baseConfig,\n          refreshInterval: GLOBAL_CONTEXT_DEFAULTS.REFRESH_INTERVAL\n        }\n      : baseConfig;\n\n    const composed = composeEffectiveConfig({\n      baseConfig: normalizedBaseConfig,\n      localState,\n      globalState,\n      fieldSources\n    });\n\n    const displayMode =\n      baseConfig?.displayMode ??\n      this.globalStateSignal().displayMode ??\n      mapToContextDisplayModeHelper(this.displayModeSignal());\n    const configWithMode = { ...composed, displayMode };\n    this.latestVisibility = resolveVisibilityContextInternalHelper(\n      configWithMode,\n      this.widgetControlsSignal,\n      this.fieldSourcesSignal,\n      this.globalStateSignal,\n      this.widgetControlService,\n      () => this.getDefaultRefreshOption()\n    );\n    return configWithMode;\n  }\n  getLatestVisibility(): VisibilityContext | null {\n    return this.latestVisibility;\n  }\n  resolveVisibilityContext(\n    config: GlobalContextState | null | undefined\n  ): VisibilityContext | null {\n    return config\n      ? resolveVisibilityContextInternalHelper(\n          config,\n          this.widgetControlsSignal,\n          this.fieldSourcesSignal,\n          this.globalStateSignal,\n          this.widgetControlService,\n          () => this.getDefaultRefreshOption()\n        )\n      : null;\n  }\n  handleFormChange(context: HandleFormChangeContext): void {\n    handleFormChangeHelper(context, {\n      resolveAggregationChangeForForm: params => this.resolveAggregationChangeForForm(params),\n      setAggregationValidationState: (isValid, message) =>\n        this.setAggregationValidationState(isValid, message),\n      computeEffectiveConfig: () => this.computeEffectiveConfig(this.configSignal()),\n      updateAggregationDisableReason: () => this.updateAggregationDisableReason()\n    });\n  }\n  handleGlobalStateChange(context: HandleGlobalStateChangeContext): void {\n    handleGlobalStateChangeHelper(context, {\n      resolveAutoUnlinkAggregationChange: aggregation =>\n        this.resolveAutoUnlinkAggregationChange(aggregation),\n      setAggregationValidationState: (isValid, message) =>\n        this.setAggregationValidationState(isValid, message),\n      updateFieldSources: updater => this.updateFieldSources(updater),\n      applyAggregationChangesForGlobalState: params =>\n        this.applyAggregationChangesForGlobalState(params),\n      updateLocalState: updater => this.updateLocalState(updater),\n      computeEffectiveConfig: () => this.computeEffectiveConfig(this.configSignal()),\n      updateAggregationDisableReason: () => this.updateAggregationDisableReason()\n    });\n  }\n  toggleLink(args: {\n    key: keyof LinkStatesMap;\n    isLinked: boolean;\n    fieldSources?: FieldSourcesMap;\n  }): LinkToggleOutcome {\n    const prevGlobal = this.getGlobalState();\n    const prevLocal = this.getLocalState();\n    const prevEffective = this.computeEffectiveConfig(this.configSignal());\n    if (args.key === 'aggregation') this.handleAggregationManualToggle(args.isLinked);\n    const outcome = computeLinkToggle({\n      key: args.key,\n      isLinked: args.isLinked,\n      fieldSources: args.fieldSources ?? this.getFieldSources()\n    });\n    this.setFieldSources(outcome.fieldSources);\n    if (args.key === 'dateTimeContext' && !args.isLinked)\n      this.promoteEffectiveDateTimeToLocal(prevEffective);\n    this.syncLocalStateForLinkOutcome({\n      outcome,\n      previousGlobalState: prevGlobal,\n      previousLocalState: prevLocal,\n      previousEffectiveConfig: prevEffective\n    });\n    this.updateAggregationDisableReason();\n    return outcome;\n  }\n  toggleAllLinks(args: {\n    keys: Array<keyof LinkStatesMap>;\n    isLinked: boolean;\n    fieldSources?: FieldSourcesMap;\n  }): LinkToggleOutcome {\n    const prevGlobal = this.getGlobalState();\n    const prevLocal = this.getLocalState();\n    const prevEffective = this.computeEffectiveConfig(this.configSignal());\n    if (args.keys.includes('aggregation')) this.handleAggregationManualToggle(args.isLinked);\n    const outcome = computeToggleAll({\n      keys: args.keys,\n      isLinked: args.isLinked,\n      fieldSources: args.fieldSources ?? this.getFieldSources()\n    });\n    this.setFieldSources(outcome.fieldSources);\n    if (!args.isLinked && args.keys.includes('dateTimeContext'))\n      this.promoteEffectiveDateTimeToLocal(prevEffective);\n    this.syncLocalStateForLinkOutcome({\n      outcome,\n      previousGlobalState: prevGlobal,\n      previousLocalState: prevLocal,\n      previousEffectiveConfig: prevEffective\n    });\n    this.updateAggregationDisableReason();\n    return outcome;\n  }\n  executeHandler(context: ExecuteHandlerContext): void {\n    executeHandlerHelper(context, {\n      computeEffectiveConfig: () => this.computeEffectiveConfig(this.configSignal())\n    });\n  }\n  processRefresh(params: {\n    globalDateTimeContext?: DateTimeContext | null;\n    generateFreshDateTime: (interval: TimeInterval) => DateTimeContext;\n  }): RefreshResult {\n    const result = calculateRefreshOutcome(\n      {\n        effectiveConfig: this.computeEffectiveConfig(this.configSignal()),\n        fieldSources: this.fieldSourcesSignal(),\n        globalDateTimeContext: params.globalDateTimeContext,\n        generateFreshDateTime: params.generateFreshDateTime\n      },\n      { supportsAutoRefresh: config => this.supportsAutoRefresh(config) }\n    );\n    if (result.updatedLocalDateTime)\n      this.updateLocalState(current => ({\n        ...current,\n        dateTimeContext: structuredClone(result.updatedLocalDateTime)\n      }));\n    if (result.refreshPayload) {\n      const merged = {\n        ...(this.globalStateSignal().dateTimeContext ?? {}),\n        ...result.refreshPayload\n      } as DateTimeContext;\n      this.updateGlobalState(state => ({ ...state, dateTimeContext: structuredClone(merged) }));\n    }\n    return result;\n  }\n  applyRefreshOptionChange(params: {\n    previousRefresh?: RefreshOption;\n    nextRefresh?: RefreshOption;\n  }): { refreshOption?: RefreshOption; forceDisableAutoRefresh?: boolean } {\n    const { previousRefresh, nextRefresh } = params;\n    if (!nextRefresh || nextRefresh === previousRefresh) return {};\n    const resolved = this.normalizeRefreshOption(nextRefresh);\n    this.syncSourcesForRefreshOption(\n      this.displayModeSignal(),\n      resolved,\n      this.widgetControlsSignal()\n    );\n    const sources = this.fieldSourcesSignal();\n    if (sources.refreshOption === FIELD_SOURCE_LOCAL) {\n      this.updateLocalState(current =>\n        current.refreshOption === resolved ? current : { ...current, refreshOption: resolved }\n      );\n    } else {\n      this.updateLocalState(current => {\n        if (current.refreshOption === undefined) return current;\n        const { refreshOption: _drop, ...rest } = current;\n        return rest;\n      });\n    }\n    if (sources.isAutoRefreshEnabled === FIELD_SOURCE_GLOBAL) {\n      this.updateLocalState(current => {\n        if (current.isAutoRefreshEnabled === undefined) return current;\n        const { isAutoRefreshEnabled: _drop, ...rest } = current;\n        return rest;\n      });\n    }\n    this.applyModeSpecificRefreshOptionChange(resolved, sources);\n    this.updateAggregationDisableReason();\n    return {\n      refreshOption: resolved,\n      forceDisableAutoRefresh: this.shouldForceDisableAutoRefresh(resolved)\n    };\n  }\n  updateGlobalStateFromForm(\n    formValue: Partial<GlobalContextState>,\n    sources: FieldSourcesMap\n  ): void {\n    const nextSources = structuredClone(sources ?? {});\n    this.setFieldSources(nextSources);\n    const next: Partial<GlobalContextState> = structuredClone(this.getGlobalState() ?? {});\n    (Object.keys(formValue) as Array<keyof GlobalContextState>).forEach(key => {\n      if (nextSources[key] !== FIELD_SOURCE_GLOBAL) return;\n      const value = formValue[key];\n      if (value !== undefined) {\n        (next as any)[key] = structuredClone(value);\n      }\n    });\n    this.setGlobalState(next);\n  }\n  processGlobalStateChange(\n    state: Partial<GlobalContextState>,\n    sources: FieldSourcesMap\n  ): Partial<GlobalContextState> {\n    const normalizedState = structuredClone(state ?? {});\n    const nextGlobalState: Partial<GlobalContextState> = structuredClone(\n      this.getGlobalState() ?? {}\n    );\n    const formUpdates: Partial<GlobalContextState> = {};\n    (Object.keys(normalizedState) as Array<keyof GlobalContextState>).forEach(key => {\n      const value = normalizedState[key];\n      if (value === undefined) return;\n      (nextGlobalState as any)[key] = structuredClone(value);\n      if (sources[key] === FIELD_SOURCE_GLOBAL) {\n        (formUpdates as any)[key] = structuredClone(value);\n      }\n    });\n    this.setGlobalState(nextGlobalState);\n    return formUpdates;\n  }\n  validateAggregationLink(context: AggregationValidationContext): AggregationValidationResult {\n    return validateAggregationLinkUtil(context);\n  }\n  deriveAggregationValue(config: GlobalContextState | null | undefined): aggregationType | null {\n    return config ? deriveAggregationValueUtil(config) : null;\n  }\n  calculateAggregation(\n    dateTimeContext: DateTimeContext | null | undefined,\n    currentAggregation: aggregationType | null | undefined\n  ): aggregationType | null {\n    if (!dateTimeContext?.dateFrom || !dateTimeContext?.dateTo) return currentAggregation ?? null;\n    try {\n      const range: [Date, Date] = [\n        new Date(dateTimeContext.dateFrom),\n        new Date(dateTimeContext.dateTo)\n      ];\n      const result = this.aggregationPickerService.calculateAggregation(\n        range,\n        currentAggregation ?? null\n      );\n      return result.selectedAggregation ?? null;\n    } catch (_error) {\n      return currentAggregation ?? null;\n    }\n  }\n  adjustAggregationForDateTime(params: {\n    dateTimeContext?: DateTimeContext | null;\n    aggregation?: aggregationType | null;\n  }): { nextAggregation: aggregationType | null; changed: boolean } {\n    const nextAggregation = this.calculateAggregation(\n      params.dateTimeContext ?? null,\n      params.aggregation ?? null\n    );\n    return {\n      nextAggregation,\n      changed: params.aggregation !== undefined && nextAggregation !== params.aggregation\n    };\n  }\n  resolveAggregationChangeForForm(params: {\n    formValue: Partial<GlobalContextState>;\n    sources: FieldSourcesMap;\n  }): AggregationChangeInstruction | null {\n    const globalAggregation =\n      this.globalStateSignal().aggregation ?? this.configSignal().aggregation ?? null;\n    const currentAggregation =\n      this.localStateSignal().aggregation ??\n      params.formValue.aggregation ??\n      this.configSignal().aggregation ??\n      null;\n    return resolveAggregationChangeForFormHelper({\n      formValue: params.formValue,\n      sources: params.sources,\n      globalAggregation,\n      currentAggregation,\n      adjustAggregationForDateTime: args => this.adjustAggregationForDateTime(args),\n      updateFieldSources: updater => this.updateFieldSources(updater)\n    });\n  }\n  shouldValidateAggregationForUnlinkedDateTime(\n    state: Partial<GlobalContextState>,\n    sources: FieldSourcesMap\n  ): boolean {\n    return (\n      sources.dateTimeContext === FIELD_SOURCE_LOCAL &&\n      sources.aggregation === FIELD_SOURCE_LOCAL &&\n      state.dateTimeContext !== undefined\n    );\n  }\n  getLinkDisableReasons(): Partial<Record<keyof GlobalContextState, string>> {\n    return this.linkDisableReasonsSignal();\n  }\n  getAggregationUnlinkReason(): AggregationUnlinkReason | null {\n    return this.aggregationUnlinkReason;\n  }\n  emitConfiguration(\n    componentId: string,\n    configuration: GlobalContextState | null | undefined\n  ): GlobalContextState {\n    const resolvedConfig = configuration ?? this.computeEffectiveConfig(this.configSignal());\n\n    if (resolvedConfig.displayMode === GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD) {\n      this.globalContextService.register(\n        componentId,\n        this.latestVisibility?.dashboardControls ?? {}\n      );\n    } else {\n      this.globalContextService.unregister(componentId);\n    }\n    return resolvedConfig;\n  }\n  ngOnDestroy(): void {\n    this.globalContextChange$.complete();\n    this.refresh$.complete();\n  }\n  protected applyInitialModeAdjustments(_: {\n    isDashboard: boolean;\n    localState: Partial<GlobalContextState>;\n    fieldSources: FieldSourcesMap;\n    generateFreshDateTime: (interval: TimeInterval) => DateTimeContext;\n  }): void {\n    // mode-specific overrides handled by subclasses\n  }\n  protected normalizeRefreshOption(nextRefresh: RefreshOption): RefreshOption {\n    return nextRefresh;\n  }\n  protected applyModeSpecificRefreshOptionChange(\n    _refreshOption: RefreshOption,\n    _sources: FieldSourcesMap\n  ): void {\n    // mode-specific overrides handled by subclasses\n  }\n  protected shouldForceDisableAutoRefresh(_refreshOption: RefreshOption): boolean {\n    return false;\n  }\n  protected getDefaultRefreshOption(): RefreshOption {\n    return this.mode;\n  }\n  protected supportsAutoRefresh(config: GlobalContextState): boolean {\n    return config.refreshOption === this.getDefaultRefreshOption();\n  }\n  private syncSourcesForRefreshOption(\n    displayMode: WidgetDisplayMode,\n    refreshOption: RefreshOption,\n    controls: WidgetControls | null\n  ): void {\n    syncSourcesForRefreshOptionHelper(\n      displayMode,\n      refreshOption,\n      controls,\n      this.fieldSourcesSignal,\n      () => this.getDefaultRefreshOption(),\n      sources => this.setFieldSources(sources)\n    );\n  }\n  private setLinkDisableReason(key: keyof GlobalContextState, reason: string | undefined): void {\n    this.linkDisableReasonsSignal.update(current => ({ ...current, [key]: reason }));\n  }\n  private handleAggregationManualToggle(isLinked: boolean): void {\n    if (isLinked) {\n      this.setAggregationValidationState(true);\n    } else {\n      this.setLinkDisableReason('aggregation', undefined);\n      this.setAggregationUnlinkReason({ source: 'user', canAutoRecover: false });\n    }\n  }\n  private setAggregationUnlinkReason(reason: AggregationUnlinkReason | null): void {\n    this.aggregationUnlinkReason = reason;\n  }\n  private updateAggregationDisableReason(): void {\n    const outcome = evaluateAggregationValidation({\n      sources: this.fieldSourcesSignal(),\n      localDateTimeContext:\n        this.localStateSignal().dateTimeContext ?? this.configSignal().dateTimeContext ?? null,\n      globalAggregation:\n        this.globalStateSignal().aggregation ?? this.configSignal().aggregation ?? null,\n      validateAggregationLink: context => this.validateAggregationLink(context),\n      calculateAggregation: (context, target) => this.calculateAggregation(context, target)\n    });\n    if (!outcome) {\n      this.setAggregationValidationState(true);\n      return;\n    }\n    if (!outcome.isValid) {\n      this.setAggregationValidationState(false, outcome.message ?? AGGREGATION_SYNC_FAILED);\n      return;\n    }\n    this.setAggregationValidationState(true);\n    if (this.attemptAggregationAutoRecover()) return;\n  }\n  private setAggregationValidationState(isValid: boolean, message?: string | null): void {\n    if (isValid) {\n      this.setLinkDisableReason('aggregation', undefined);\n      this.setAggregationUnlinkReason(null);\n      return;\n    }\n    const resolved = message ?? AGGREGATION_SYNC_FAILED;\n    this.setLinkDisableReason('aggregation', resolved);\n    this.setAggregationUnlinkReason({\n      source: 'validation',\n      canAutoRecover: true,\n      message: resolved\n    });\n  }\n  private resolveAutoUnlinkAggregationChange(\n    globalAggregation: aggregationType | null | undefined\n  ): AggregationChangeInstruction | null {\n    return resolveAutoUnlinkAggregationChangeHelper({\n      globalAggregation,\n      localDateTimeContext: this.localStateSignal().dateTimeContext,\n      adjustAggregationForDateTime: args => this.adjustAggregationForDateTime(args),\n      updateFieldSources: updater => this.updateFieldSources(updater)\n    });\n  }\n  private applyAggregationChangesForGlobalState(params: {\n    incomingState: Partial<GlobalContextState>;\n    sources: FieldSourcesMap;\n    formUpdates: Partial<GlobalContextState>;\n    applyLocalAggregationChange: (change: AggregationChangeInstruction) => void;\n  }): boolean {\n    return applyAggregationChangesForGlobalStateHelper({\n      incomingState: params.incomingState,\n      sources: params.sources,\n      formUpdates: params.formUpdates,\n      adjustAggregationForDateTime: args => this.adjustAggregationForDateTime(args),\n      localAggregationSnapshot:\n        this.localStateSignal().aggregation ?? this.configSignal().aggregation ?? null,\n      globalAggregationSnapshot:\n        this.globalStateSignal().aggregation ?? this.configSignal().aggregation ?? null,\n      applyLocalAggregationChange: params.applyLocalAggregationChange\n    });\n  }\n  private canAutoRecoverAggregation(): boolean {\n    return (\n      this.aggregationUnlinkReason?.source === 'validation' &&\n      this.aggregationUnlinkReason.canAutoRecover === true\n    );\n  }\n  private attemptAggregationAutoRecover(): boolean {\n    if (!this.canAutoRecoverAggregation()) return false;\n    this.setAggregationUnlinkReason(null);\n    this.updateFieldSources(current => ({ ...current, aggregation: FIELD_SOURCE_GLOBAL }));\n    this.updateLocalState(current => {\n      if (current.aggregation === undefined) return current;\n      const { aggregation: _drop, ...rest } = current;\n      return rest;\n    });\n    return true;\n  }\n  private syncLocalStateForLinkOutcome(params: {\n    outcome: LinkToggleOutcome;\n    previousGlobalState: Partial<GlobalContextState>;\n    previousLocalState: Partial<GlobalContextState>;\n    previousEffectiveConfig: GlobalContextState;\n  }): void {\n    const { outcome, previousGlobalState, previousLocalState, previousEffectiveConfig } = params;\n    if (!outcome.clearLocalKeys.length && !outcome.snapshotKeys.length) return;\n    const configSnapshot = structuredClone(this.configSignal());\n    this.updateLocalState(current => {\n      const updated = { ...current };\n      outcome.clearLocalKeys.forEach(key => delete updated[key]);\n      outcome.snapshotKeys.forEach(key => {\n        const typedKey = key as keyof GlobalContextState;\n        let candidate = previousLocalState[typedKey] as\n          | GlobalContextState[typeof typedKey]\n          | null\n          | undefined;\n        if (candidate === undefined)\n          candidate =\n            previousEffectiveConfig[typedKey] ??\n            previousGlobalState[typedKey] ??\n            configSnapshot[typedKey];\n        const resolved = this.resolveSnapshotValue(typedKey, candidate);\n        if (resolved === undefined) delete updated[typedKey];\n        else (updated as Record<string, unknown>)[typedKey as string] = resolved as unknown;\n      });\n      return updated;\n    });\n  }\n  private resolveSnapshotValue(\n    key: keyof GlobalContextState,\n    candidate: GlobalContextState[keyof GlobalContextState] | null | undefined\n  ): GlobalContextState[keyof GlobalContextState] | undefined {\n    if (candidate !== undefined && candidate !== null) {\n      if (key === 'dateTimeContext')\n        return this.ensureDateTimeContext(candidate as DateTimeContext);\n      if (key === 'refreshOption') return this.normalizeRefreshOption(candidate as RefreshOption);\n      return structuredClone(candidate as GlobalContextState[keyof GlobalContextState]);\n    }\n    if (key === 'dateTimeContext') return this.ensureDateTimeContext(null);\n    if (key === 'refreshOption') return this.normalizeRefreshOption(this.getDefaultRefreshOption());\n    return undefined;\n  }\n  private promoteEffectiveDateTimeToLocal(previousEffectiveConfig: GlobalContextState): void {\n    const snapshot = previousEffectiveConfig?.dateTimeContext;\n    if (!snapshot) return;\n    this.updateLocalState(current => ({ ...current, dateTimeContext: structuredClone(snapshot) }));\n  }\n  private ensureDateTimeContext(\n    context: GlobalContextState['dateTimeContext'] | null | undefined\n  ): DateTimeContext {\n    return ensureDateTimeContextHelper(context, this.configSignal);\n  }\n  private syncLocalEntriesWithGlobal(): void {\n    syncLocalEntriesWithGlobalHelper(\n      this.fieldSourcesSignal,\n      this.globalStateSignal,\n      this.localStateSignal\n    );\n  }\n}\nexport type {\n  AggregationUnlinkReason,\n  LinkToggleOutcome,\n  ModeServices,\n  RefreshResult,\n  VisibilityContext\n} from './shared-mode-orchestrator.types';\n","import { Injectable } from '@angular/core';\nimport type { RefreshOption } from '../../../models/auto-refresh.model';\nimport { REFRESH_OPTION } from '../../../models/auto-refresh.model';\nimport type { GlobalContextState } from '../../../models/global-context.model';\nimport { FieldSourcesMap } from './config-composer.util';\nimport { SharedModeOrchestrator, type ModeServices } from './shared-mode-orchestrator';\n\n@Injectable()\nexport class HistoryModeOrchestrator extends SharedModeOrchestrator {\n  constructor(services: ModeServices) {\n    super(REFRESH_OPTION.HISTORY, services);\n  }\n\n  protected override normalizeRefreshOption(_nextRefresh: RefreshOption): RefreshOption {\n    return REFRESH_OPTION.HISTORY;\n  }\n\n  protected override applyModeSpecificRefreshOptionChange(\n    refreshOption: RefreshOption,\n    _sources: FieldSourcesMap\n  ): void {\n    if (refreshOption !== REFRESH_OPTION.HISTORY) {\n      return;\n    }\n\n    this.updateLocalState(current => {\n      if (current.isAutoRefreshEnabled === false) {\n        return current;\n      }\n      return { ...current, isAutoRefreshEnabled: false };\n    });\n  }\n\n  protected override shouldForceDisableAutoRefresh(refreshOption: RefreshOption): boolean {\n    return refreshOption === REFRESH_OPTION.HISTORY;\n  }\n\n  protected override supportsAutoRefresh(_config: GlobalContextState): boolean {\n    return false;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { REFRESH_OPTION } from '../../../models/auto-refresh.model';\nimport type { DateTimeContext } from '../../../models/date-time-context-picker.model';\nimport type { GlobalContextState } from '../../../models/global-context.model';\nimport type { TimeInterval } from '../../../models/interval-picker.model';\nimport { TIME_INTERVAL } from '../../../models/interval-picker.model';\nimport { DateTimeContextUtil } from '../../../utils/date-time-context.util';\nimport { FieldSourcesMap } from './config-composer.util';\nimport { SharedModeOrchestrator, type ModeServices } from './shared-mode-orchestrator';\n\n@Injectable()\nexport class LiveModeOrchestrator extends SharedModeOrchestrator {\n  constructor(services: ModeServices) {\n    super(REFRESH_OPTION.LIVE, services);\n  }\n\n  protected override applyInitialModeAdjustments(params: {\n    isDashboard: boolean;\n    localState: Partial<GlobalContextState>;\n    fieldSources: FieldSourcesMap;\n    generateFreshDateTime: (interval: TimeInterval) => DateTimeContext;\n  }): void {\n    const { isDashboard, localState, generateFreshDateTime } = params;\n\n    // Live mode never has aggregation (business rule)\n    delete localState.aggregation;\n\n    const interval = localState?.dateTimeContext?.interval;\n\n    if (isDashboard || localState?.refreshOption !== REFRESH_OPTION.LIVE || !interval) {\n      return;\n    }\n\n    // For CUSTOM interval: keep dateFrom, update dateTo to now\n    // For other intervals: generate fresh dateTimeContext\n    if (interval === TIME_INTERVAL.CUSTOM) {\n      if (localState.dateTimeContext) {\n        localState.dateTimeContext = DateTimeContextUtil.normalizeForLive(\n          localState.dateTimeContext\n        );\n      }\n    } else {\n      const fresh = generateFreshDateTime(interval as TimeInterval);\n      localState.dateTimeContext = fresh;\n    }\n  }\n}\n","import { Injectable, OnDestroy, inject } from '@angular/core';\nimport { aggregationType } from '@c8y/client';\nimport { Subject, Subscription } from 'rxjs';\nimport type { RefreshOption } from '../../../models/auto-refresh.model';\nimport { REFRESH_OPTION } from '../../../models/auto-refresh.model';\nimport type { LinkStatesMap } from '../../../models/control-flow.model';\nimport type { DateTimeContext } from '../../../models/date-time-context-picker.model';\nimport type {\n  GlobalContextEvent,\n  GlobalContextState,\n  WidgetControls,\n  WidgetDisplayMode\n} from '../../../models/global-context.model';\nimport type { TimeInterval } from '../../../models/interval-picker.model';\nimport { AggregationPickerService } from '../../../services/domain/aggregation-picker.service';\nimport { WidgetControlService } from '../../../services/domain/widget-control.service';\nimport { GlobalContextService } from '../../../services/state/global-context.service';\nimport { type FieldSourcesMap } from './config-composer.util';\nimport { HistoryModeOrchestrator } from './history-mode-orchestrator';\nimport { LiveModeOrchestrator } from './live-mode-orchestrator';\nimport { SharedModeOrchestrator } from './shared-mode-orchestrator';\nimport type {\n  AggregationChangeInstruction,\n  AggregationUnlinkReason,\n  ExecuteHandlerContext,\n  HandleFormChangeContext,\n  HandleGlobalStateChangeContext,\n  LinkToggleOutcome,\n  ModeServices,\n  RefreshResult,\n  VisibilityContext\n} from './shared-mode-orchestrator.types';\nimport type { AggregationValidationContext, AggregationValidationResult } from './validation.util';\n\n@Injectable()\nexport class GlobalContextInlineOrchestratorService implements OnDestroy {\n  private readonly widgetControlService = inject(WidgetControlService);\n  private readonly aggregationPickerService = inject(AggregationPickerService);\n  private readonly globalContextService = inject(GlobalContextService);\n\n  private readonly live: LiveModeOrchestrator;\n  private readonly history: HistoryModeOrchestrator;\n  private active: SharedModeOrchestrator;\n  private activeMode: RefreshOption = REFRESH_OPTION.LIVE;\n  private lastLiveAutoRefresh: boolean | undefined;\n  private readonly subscriptions: Subscription[] = [];\n  private initSnapshot: {\n    initialConfig: GlobalContextState | null;\n    widgetControls?: WidgetControls | null;\n    isDashboard: boolean;\n    generateFreshDateTime: (interval: TimeInterval) => DateTimeContext;\n  } | null = null;\n  private modeSnapshots: Record<RefreshOption, Partial<GlobalContextState>> = {\n    [REFRESH_OPTION.LIVE]: {},\n    [REFRESH_OPTION.HISTORY]: {}\n  };\n  readonly globalContextChange$ = new Subject<GlobalContextEvent>();\n  readonly refresh$ = new Subject<void>();\n\n  constructor() {\n    const services: ModeServices = {\n      widgetControlService: this.widgetControlService,\n      aggregationPickerService: this.aggregationPickerService,\n      globalContextService: this.globalContextService\n    };\n    this.live = new LiveModeOrchestrator(services);\n    this.history = new HistoryModeOrchestrator(services);\n    this.active = this.live;\n\n    this.subscriptions.push(\n      this.live.globalContextChange$.subscribe(event => this.globalContextChange$.next(event)),\n      this.history.globalContextChange$.subscribe(event => this.globalContextChange$.next(event)),\n      this.live.refresh$.subscribe(() => this.refresh$.next()),\n      this.history.refresh$.subscribe(() => this.refresh$.next())\n    );\n  }\n\n  initConfig(config: GlobalContextState | null | undefined): void {\n    this.live.initConfig(config);\n    this.history.initConfig(config);\n  }\n\n  initWidgetControls(controls: WidgetControls | null | undefined): void {\n    this.live.initWidgetControls(controls);\n    this.history.initWidgetControls(controls);\n  }\n\n  setDisplayMode(mode: WidgetDisplayMode | null | undefined): void {\n    this.live.setDisplayMode(mode);\n    this.history.setDisplayMode(mode);\n  }\n\n  getDisplayMode(): WidgetDisplayMode {\n    return this.getActive().getDisplayMode();\n  }\n\n  setLoading(isLoading: boolean): void {\n    this.getActive().setLoading(isLoading);\n  }\n\n  getFieldSources(): FieldSourcesMap {\n    return this.getActive().getFieldSources();\n  }\n\n  setFieldSources(value: FieldSourcesMap): void {\n    this.getActive().setFieldSources(value);\n  }\n\n  updateFieldSources(updater: (sources: FieldSourcesMap) => FieldSourcesMap): void {\n    this.getActive().updateFieldSources(updater);\n  }\n\n  getLocalState(): Partial<GlobalContextState> {\n    return this.getActive().getLocalState();\n  }\n\n  setLocalState(state: Partial<GlobalContextState>): void {\n    this.getActive().setLocalState(state);\n  }\n\n  updateLocalState(\n    updater: (state: Partial<GlobalContextState>) => Partial<GlobalContextState>\n  ): void {\n    this.getActive().updateLocalState(updater);\n  }\n\n  getGlobalState(): Partial<GlobalContextState> {\n    return this.getActive().getGlobalState();\n  }\n\n  setGlobalState(state: Partial<GlobalContextState>): void {\n    const targetMode = (state?.refreshOption as RefreshOption) ?? this.activeMode;\n    const normalized = this.normalizeGlobalStateForMode(\n      targetMode,\n      state,\n      this.initSnapshot?.initialConfig ?? null\n    );\n\n    this.updateModeSnapshot(targetMode, normalized);\n    this.propagateSnapshots();\n  }\n\n  updateGlobalState(\n    updater: (state: Partial<GlobalContextState>) => Partial<GlobalContextState>\n  ): void {\n    const targetMode = this.activeMode;\n    const current = this.modeSnapshots[targetMode] ?? {};\n    const updated = updater(structuredClone(current)) ?? {};\n    const normalized = this.normalizeGlobalStateForMode(\n      targetMode,\n      updated,\n      this.initSnapshot?.initialConfig ?? null\n    );\n\n    this.updateModeSnapshot(targetMode, normalized);\n    this.propagateSnapshots();\n  }\n\n  initializeStateAndSources(params: {\n    initialConfig: GlobalContextState | null;\n    globalState: Partial<GlobalContextState>;\n    isDashboard: boolean;\n    widgetControls?: WidgetControls | null;\n    generateFreshDateTime: (interval: TimeInterval) => DateTimeContext;\n    forcedRefreshOption?: RefreshOption;\n  }): void {\n    const baseGlobalState = structuredClone(params.globalState ?? {});\n    const liveState = this.normalizeGlobalStateForMode(\n      REFRESH_OPTION.LIVE,\n      baseGlobalState,\n      params.initialConfig\n    );\n    const historyState = this.normalizeGlobalStateForMode(\n      REFRESH_OPTION.HISTORY,\n      baseGlobalState,\n      params.initialConfig\n    );\n\n    this.updateModeSnapshot(REFRESH_OPTION.LIVE, liveState);\n    this.updateModeSnapshot(REFRESH_OPTION.HISTORY, historyState);\n\n    this.initSnapshot = {\n      initialConfig: params.initialConfig,\n      widgetControls: params.widgetControls ?? null,\n      isDashboard: params.isDashboard,\n      generateFreshDateTime: params.generateFreshDateTime\n    };\n\n    const liveParams = {\n      ...params,\n      globalState: structuredClone(this.modeSnapshots[REFRESH_OPTION.LIVE]),\n      forcedRefreshOption: REFRESH_OPTION.LIVE\n    };\n    const historyParams = {\n      ...params,\n      globalState: structuredClone(this.modeSnapshots[REFRESH_OPTION.HISTORY]),\n      forcedRefreshOption: REFRESH_OPTION.HISTORY\n    };\n\n    this.live.initializeStateAndSources(liveParams);\n    this.history.initializeStateAndSources(historyParams);\n\n    // After initialization, sync the fresh states back to snapshots\n    // (applyInitialModeAdjustments may have generated fresh dates in local state)\n    // Use computeEffectiveConfig to merge local+global states\n    const liveEffective = this.live.computeEffectiveConfig(params.initialConfig);\n    const historyEffective = this.history.computeEffectiveConfig(params.initialConfig);\n\n    this.updateModeSnapshot(REFRESH_OPTION.LIVE, liveEffective);\n    this.updateModeSnapshot(REFRESH_OPTION.HISTORY, historyEffective);\n\n    // For standalone mode, use widget's refreshOption, not global state\n    // For dashboard mode, use global state's refreshOption\n    const desiredMode = params.isDashboard\n      ? (params.forcedRefreshOption ??\n        baseGlobalState.refreshOption ??\n        params.initialConfig?.refreshOption ??\n        this.activeMode)\n      : (params.forcedRefreshOption ?? params.initialConfig?.refreshOption ?? this.activeMode);\n\n    this.ensureMode(desiredMode);\n  }\n\n  handleFormChange(context: HandleFormChangeContext): void {\n    const nextRefresh = context.formValue.refreshOption ?? context.previousRefresh;\n    this.ensureMode(nextRefresh ?? this.activeMode);\n    this.getActive().handleFormChange(context);\n  }\n\n  handleGlobalStateChange(context: HandleGlobalStateChangeContext): void {\n    const nextRefresh = context.state.refreshOption ?? context.previousRefresh;\n    this.ensureMode(nextRefresh ?? this.activeMode);\n    this.getActive().handleGlobalStateChange(context);\n    this.syncActiveSnapshot();\n  }\n\n  toggleLink(args: {\n    key: keyof LinkStatesMap;\n    isLinked: boolean;\n    fieldSources?: FieldSourcesMap;\n  }): LinkToggleOutcome {\n    return this.getActive().toggleLink(args);\n  }\n\n  toggleAllLinks(args: {\n    keys: Array<keyof LinkStatesMap>;\n    isLinked: boolean;\n    fieldSources?: FieldSourcesMap;\n  }): LinkToggleOutcome {\n    return this.getActive().toggleAllLinks(args);\n  }\n\n  executeHandler(context: ExecuteHandlerContext): void {\n    const nextRefresh = context.configOverride?.refreshOption ?? context.previousRefresh;\n    this.ensureMode(nextRefresh ?? this.activeMode);\n    this.getActive().executeHandler(context);\n  }\n\n  processRefresh(params: {\n    globalDateTimeContext?: DateTimeContext | null;\n    generateFreshDateTime: (interval: TimeInterval) => DateTimeContext;\n  }): RefreshResult {\n    // Choose orchestrator based on mode:\n    // - Dashboard mode: use global state's refreshOption\n    // - Standalone mode: use effective config's refreshOption (local state)\n    const isDashboard = this.initSnapshot?.isDashboard ?? false;\n    const effectiveRefreshOption = isDashboard\n      ? (this.getGlobalState().refreshOption ?? this.activeMode)\n      : (this.getActive().computeEffectiveConfig(this.initSnapshot?.initialConfig ?? null)\n          .refreshOption ?? this.activeMode);\n\n    this.ensureMode(effectiveRefreshOption);\n    return this.getActive().processRefresh(params);\n  }\n\n  applyRefreshOptionChange(params: {\n    previousRefresh?: RefreshOption;\n    nextRefresh?: RefreshOption;\n  }): { refreshOption?: RefreshOption; forceDisableAutoRefresh?: boolean } {\n    const desiredMode = params.nextRefresh ?? this.activeMode;\n    this.ensureMode(desiredMode);\n\n    const outcome = this.getActive().applyRefreshOptionChange(params);\n\n    if (outcome.refreshOption) {\n      this.ensureMode(outcome.refreshOption);\n    }\n\n    return outcome;\n  }\n\n  updateGlobalStateFromForm(\n    formValue: Partial<GlobalContextState>,\n    sources: FieldSourcesMap\n  ): void {\n    this.getActive().updateGlobalStateFromForm(formValue, sources);\n    this.syncActiveSnapshot();\n  }\n\n  processGlobalStateChange(\n    state: Partial<GlobalContextState>,\n    sources: FieldSourcesMap\n  ): Partial<GlobalContextState> {\n    const result = this.getActive().processGlobalStateChange(state, sources);\n    this.syncActiveSnapshot();\n    return result;\n  }\n\n  validateAggregationLink(context: AggregationValidationContext): AggregationValidationResult {\n    return this.getActive().validateAggregationLink(context);\n  }\n\n  deriveAggregationValue(config: GlobalContextState | null | undefined): aggregationType | null {\n    return this.getActive().deriveAggregationValue(config);\n  }\n\n  calculateAggregation(\n    dateTimeContext: DateTimeContext | null | undefined,\n    currentAggregation: aggregationType | null | undefined\n  ): aggregationType | null {\n    return this.getActive().calculateAggregation(dateTimeContext, currentAggregation);\n  }\n\n  adjustAggregationForDateTime(params: {\n    dateTimeContext: DateTimeContext;\n    aggregation: aggregationType | null;\n  }): { nextAggregation: aggregationType | null; changed: boolean } {\n    return this.getActive().adjustAggregationForDateTime(params);\n  }\n\n  resolveAggregationChangeForForm(params: {\n    formValue: Partial<GlobalContextState>;\n    sources: FieldSourcesMap;\n  }): AggregationChangeInstruction | null {\n    return this.getActive().resolveAggregationChangeForForm(params);\n  }\n\n  shouldValidateAggregationForUnlinkedDateTime(\n    state: Partial<GlobalContextState>,\n    sources: FieldSourcesMap\n  ): boolean {\n    return this.getActive().shouldValidateAggregationForUnlinkedDateTime(state, sources);\n  }\n\n  getLinkDisableReasons(): Partial<Record<keyof GlobalContextState, string>> {\n    return this.getActive().getLinkDisableReasons();\n  }\n\n  getAggregationUnlinkReason(): AggregationUnlinkReason | null {\n    return this.getActive().getAggregationUnlinkReason();\n  }\n\n  computeEffectiveConfig(baseConfig: GlobalContextState | null | undefined): GlobalContextState {\n    return this.getActive().computeEffectiveConfig(baseConfig);\n  }\n\n  resolveVisibilityContext(\n    config: GlobalContextState | null | undefined\n  ): VisibilityContext | null {\n    return this.getActive().resolveVisibilityContext(config);\n  }\n\n  emitConfiguration(\n    componentId: string,\n    configuration: GlobalContextState | null | undefined\n  ): GlobalContextState {\n    return this.getActive().emitConfiguration(componentId, configuration);\n  }\n\n  getLatestVisibility(): VisibilityContext | null {\n    return this.getActive().getLatestVisibility();\n  }\n\n  getConfigSnapshot(): GlobalContextState {\n    return this.getActive().getConfigSnapshot();\n  }\n\n  ngOnDestroy(): void {\n    this.subscriptions.forEach(subscription => subscription.unsubscribe());\n    this.live.ngOnDestroy();\n    this.history.ngOnDestroy();\n  }\n\n  private ensureMode(refreshOption?: RefreshOption | null): void {\n    const desired =\n      refreshOption === REFRESH_OPTION.HISTORY ? REFRESH_OPTION.HISTORY : REFRESH_OPTION.LIVE;\n    const previous = this.activeMode;\n\n    if (desired === previous) {\n      return;\n    }\n\n    this.activeMode = desired;\n    this.active = desired === REFRESH_OPTION.HISTORY ? this.history : this.live;\n    this.resetActiveMode();\n  }\n\n  private getActive(): SharedModeOrchestrator {\n    return this.active;\n  }\n\n  private resetActiveMode(): void {\n    if (!this.initSnapshot) {\n      return;\n    }\n\n    const isDashboard = this.initSnapshot.isDashboard;\n    const snapshot = this.modeSnapshots[this.activeMode] ?? {};\n\n    // For standalone mode, use the snapshot as initialConfig so fresh dates are preserved\n    // For dashboard mode, use original initialConfig and snapshot goes to globalState\n    const effectiveInitialConfig = isDashboard\n      ? this.initSnapshot.initialConfig\n      : (snapshot as GlobalContextState);\n\n    const params = {\n      initialConfig: effectiveInitialConfig,\n      globalState: structuredClone(snapshot),\n      isDashboard,\n      widgetControls: this.initSnapshot.widgetControls,\n      generateFreshDateTime: this.initSnapshot.generateFreshDateTime,\n      forcedRefreshOption: this.activeMode\n    };\n\n    this.getActive().initializeStateAndSources(params);\n  }\n\n  private normalizeGlobalStateForMode(\n    mode: RefreshOption,\n    state: Partial<GlobalContextState> | null | undefined,\n    initialConfig: GlobalContextState | null\n  ): Partial<GlobalContextState> {\n    const seed: Partial<GlobalContextState> = {\n      ...(this.modeSnapshots?.[mode] ?? {}),\n      ...(state ?? {})\n    };\n    const normalized = structuredClone(seed);\n\n    normalized.refreshOption = mode;\n\n    if (mode === REFRESH_OPTION.LIVE) {\n      const restored =\n        this.lastLiveAutoRefresh ??\n        state?.isAutoRefreshEnabled ??\n        initialConfig?.isAutoRefreshEnabled;\n\n      if (restored !== undefined) {\n        normalized.isAutoRefreshEnabled = restored;\n      } else {\n        delete normalized.isAutoRefreshEnabled;\n      }\n\n      // Live mode always has aggregation=null (business rule)\n      delete normalized.aggregation;\n    } else {\n      if (state?.isAutoRefreshEnabled !== undefined) {\n        this.lastLiveAutoRefresh = state.isAutoRefreshEnabled;\n      }\n      normalized.isAutoRefreshEnabled = false;\n    }\n\n    return normalized;\n  }\n\n  private syncActiveSnapshot(propagate = true): void {\n    const current = this.getActive().getGlobalState() ?? {};\n    this.updateModeSnapshot(this.activeMode, current);\n    if (propagate) {\n      this.propagateSnapshots();\n    }\n  }\n\n  private updateModeSnapshot(mode: RefreshOption, snapshot: Partial<GlobalContextState>): void {\n    this.modeSnapshots[mode] = structuredClone(snapshot ?? {});\n\n    if (mode === REFRESH_OPTION.LIVE) {\n      this.captureLiveAutoRefresh(this.modeSnapshots[mode]);\n    }\n  }\n\n  private propagateSnapshots(): void {\n    this.live.setGlobalState(structuredClone(this.modeSnapshots[REFRESH_OPTION.LIVE] ?? {}));\n    this.history.setGlobalState(structuredClone(this.modeSnapshots[REFRESH_OPTION.HISTORY] ?? {}));\n  }\n\n  private captureLiveAutoRefresh(state: Partial<GlobalContextState> | null | undefined): void {\n    if (!state) {\n      return;\n    }\n\n    const refreshOption = state.refreshOption ?? REFRESH_OPTION.LIVE;\n\n    if (refreshOption !== REFRESH_OPTION.LIVE) {\n      return;\n    }\n\n    if (state.isAutoRefreshEnabled !== undefined) {\n      this.lastLiveAutoRefresh = state.isAutoRefreshEnabled;\n    }\n  }\n}\n\nexport type {\n  AggregationUnlinkReason,\n  RefreshResult,\n  VisibilityContext\n} from './shared-mode-orchestrator';\n","import { NgTemplateOutlet, NgClass } from '@angular/common';\nimport {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  DestroyRef,\n  effect,\n  EffectRef,\n  inject,\n  input,\n  OnDestroy,\n  OnInit,\n  output,\n  signal,\n  TemplateRef,\n  ViewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { aggregationType } from '@c8y/client';\nimport { C8yTranslatePipe, DashboardChildComponent, IconDirective } from '@c8y/ngx-components';\nimport { isEqual } from 'lodash-es';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { distinctUntilChanged, filter } from 'rxjs/operators';\nimport { AggregationPickerComponent } from '../features/aggregation/aggregation-picker';\nimport { AutoRefreshControlComponent } from '../features/refresh/auto-refresh';\nimport { DateTimeContextPickerComponent } from '../features/time-context/time-range-picker/date-time-context-picker.component';\nimport type { RefreshOption } from '../models/auto-refresh.model';\nimport { REFRESH_OPTION } from '../models/auto-refresh.model';\nimport type {\n  ControlConfigsMap,\n  LinkStatesMap,\n  LinkToggleEvent\n} from '../models/control-flow.model';\nimport { LINK_BTNS_CONFIG } from '../models/control-flow.model';\nimport type { DateTimeContext } from '../models/date-time-context-picker.model';\nimport type {\n  GlobalContextDisplayMode,\n  GlobalContextSettings,\n  GlobalContextState,\n  WidgetControls,\n  WidgetDisplayMode,\n  WidgetState,\n  WidgetStateHandlerResult\n} from '../models/global-context.model';\nimport {\n  GLOBAL_CONTEXT_DISPLAY_MODE,\n  GLOBAL_CONTEXT_EVENTS,\n  WIDGET_DISPLAY_MODE\n} from '../models/global-context.model';\nimport { AggregationValidationService } from '../services/domain/aggregation-validation.service';\nimport { GlobalContextEventService } from '../services/state/global-context-event.service';\nimport { GlobalContextFormService } from '../services/state/global-context-form.service';\nimport { GlobalContextService } from '../services/state/global-context.service';\nimport type {\n  LinkHelpersContext,\n  RefreshHelpersContext\n} from './widget-inline/inline-context.models';\nimport { GlobalContextLinkControlsComponent } from './widget-inline/inline-link-controls.component';\nimport {\n  applyConfigOverride as applyConfigOverrideHelper,\n  applyHandlerResult as applyHandlerResultHelper,\n  buildControlLinkConfig as buildControlLinkConfigHelper,\n  buildWidgetState as buildWidgetStateHelper,\n  handleLinkToggle as handleLinkToggleHelper,\n  toggleAllLinks as toggleAllLinksHelper\n} from './widget-inline/inline-link-helpers';\nimport {\n  applyLocalAggregationChange as applyLocalAggregationChangeHelper,\n  calculateDisabledAggregationsFromContext as calculateDisabledAggregationsFromContextHelper,\n  deriveDisabledAggregations as deriveDisabledAggregationsHelper,\n  generateFreshDateTimeContext,\n  getShouldDisableIntervalConfig as getShouldDisableIntervalConfigHelper,\n  handleGlobalRefresh as handleGlobalRefreshHelper,\n  patchFormValues as patchFormValuesHelper,\n  processRefreshEvent as processRefreshEventHelper,\n  recalculateAggregationForGlobalDateTime,\n  recalculateAggregationForLocalDateTime,\n  updateAggregationValue as updateAggregationValueHelper\n} from './widget-inline/inline-refresh-helpers';\nimport {\n  FIELD_SOURCE_GLOBAL,\n  FIELD_SOURCE_LOCAL,\n  type FieldSourcesMap\n} from './widget-inline/orchestrator/config-composer.util';\nimport {\n  GlobalContextInlineOrchestratorService,\n  type RefreshResult,\n  type VisibilityContext\n} from './widget-inline/orchestrator/global-context-inline-orchestrator.service';\nimport type { AggregationChangeInstruction } from './widget-inline/orchestrator/shared-mode-orchestrator.types';\nconst EMIT_EVENT_DISABLED = { emitEvent: false };\n@Component({\n  standalone: true,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    ReactiveFormsModule,\n    GlobalContextLinkControlsComponent,\n    AggregationPickerComponent,\n    AutoRefreshControlComponent,\n    DateTimeContextPickerComponent,\n    IconDirective,\n    C8yTranslatePipe,\n    TooltipModule,\n    NgTemplateOutlet,\n    NgClass\n  ],\n  selector: 'c8y-global-context-inline',\n  templateUrl: './global-context-inline.component.html',\n  exportAs: 'globalContextInline',\n  providers: [GlobalContextInlineOrchestratorService]\n})\nexport class GlobalContextInlineComponent implements OnInit, AfterViewInit, OnDestroy {\n  private readonly componentId = crypto.randomUUID();\n  readonly GLOBAL_CONTEXT_DISPLAY_MODE = GLOBAL_CONTEXT_DISPLAY_MODE;\n  readonly REFRESH_OPTION = REFRESH_OPTION;\n  // --- Service Injections ---\n  private readonly destroyReference = inject(DestroyRef);\n  private readonly globalContextService = inject(GlobalContextService);\n  private readonly globalContextEventService = inject(GlobalContextEventService);\n  private readonly globalContextFormService = inject(GlobalContextFormService);\n  private readonly aggregationValidationService = inject(AggregationValidationService);\n  private readonly orchestrator = inject(GlobalContextInlineOrchestratorService);\n  private readonly injectedDashboardChild = inject(DashboardChildComponent, { optional: true });\n  // --- Inputs ---\n  widgetControls = input.required<WidgetControls>();\n  config = input<GlobalContextState | null>(null);\n  isLoading = input(false);\n  dashboardChildForLegacy = input<DashboardChildComponent>();\n  /**\n   * When true, disables refresh event emissions.\n   * Use when widget handles its own data refresh (e.g., via realtime subscriptions).\n   */\n  disableRefreshEmits = input(false);\n  // --- Outputs ---\n  readonly refresh = output<Partial<DateTimeContext> | null>();\n  readonly globalContextChange = output<Partial<GlobalContextState>>();\n  // --- Signals for State Management ---\n  private inlineOverrides = signal<Partial<GlobalContextSettings>>({});\n  private dashboardOverrides = signal<Partial<GlobalContextSettings>>({});\n  private viewInitCompleted = signal(false);\n  // --- Derived State from Signals ---\n  readonly effectiveConfig = computed(() =>\n    this.orchestrator.computeEffectiveConfig(this.config())\n  );\n  private readonly visibilityContext = computed<VisibilityContext | null>(() =>\n    this.orchestrator.resolveVisibilityContext(this.effectiveConfig())\n  );\n  readonly inlineSettings = computed(() => {\n    const base = this.visibilityContext()?.settings ?? {};\n    return { ...base, ...this.inlineOverrides() };\n  });\n  readonly dashboardControlSettings = computed(() => {\n    const base = this.visibilityContext()?.dashboardControls ?? {};\n    return { ...base, ...this.dashboardOverrides() };\n  });\n  readonly controlLinkStatus = computed(() => this.visibilityContext()?.links ?? {});\n  readonly disabledAggregations = computed(() =>\n    deriveDisabledAggregationsHelper(this.getRefreshContext())\n  );\n  readonly linkDisplayModel = computed(() => {\n    const settings = this.inlineSettings() ?? {};\n    const linkStates = this.controlLinkStatus() ?? {};\n    const { controlConfig, filteredStates } = buildControlLinkConfigHelper(\n      this.getLinkContext(),\n      settings,\n      Object.keys(linkStates).length ? linkStates : null\n    );\n\n    return {\n      controlConfig,\n      linkStates: filteredStates,\n      showHeaderLinks: this.effectiveConfig().displayMode === GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD\n    };\n  });\n  // --- Other Properties ---\n  form!: FormGroup;\n  shouldDisableCounter = false;\n  readonly controlLinksConfig: ControlConfigsMap = LINK_BTNS_CONFIG;\n  @ViewChild('headerContent', { static: true, read: TemplateRef })\n  private headerTemplateRef?: TemplateRef<unknown>;\n  private registeredHeaderTemplate: TemplateRef<unknown> | null = null;\n  private registeredDashboardChild: DashboardChildComponent | null = null;\n  private headerEffectRef: EffectRef | null = null;\n  private linkContextCache: LinkHelpersContext | null = null;\n  constructor() {\n    // Effects are set up once, initialization will set form afterwards\n    this.setupEffects();\n    effect(() => {\n      const cfg = this.config();\n      this.orchestrator.initConfig(cfg ?? {});\n      this.orchestrator.setDisplayMode(this.mapToWidgetDisplayMode(cfg?.displayMode));\n      this.orchestrator.initWidgetControls(this.widgetControls());\n    });\n    this.headerEffectRef = effect(() => {\n      if (!this.viewInitCompleted()) {\n        return;\n      }\n      const displayMode = this.effectiveConfig().displayMode;\n      const dashboardChild = this.resolveDashboardChild();\n      const shouldProject =\n        !!dashboardChild && displayMode === GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD;\n      const template = shouldProject ? (this.headerTemplateRef ?? null) : null;\n      this.updateDashboardHeaderRegistration(template, dashboardChild);\n    });\n  }\n  getDisabledAggregations(): Partial<Record<aggregationType, boolean>> {\n    const dateTimeContext = this.getFormDateTimeContext();\n    if (!this.hasValidDateRange(dateTimeContext)) {\n      return this.disabledAggregations();\n    }\n    return calculateDisabledAggregationsFromContextHelper(\n      this.getRefreshContext(),\n      dateTimeContext as DateTimeContext\n    );\n  }\n  shouldShowHeaderLinks(): boolean {\n    return this.linkDisplayModel().showHeaderLinks;\n  }\n  shouldRenderHeaderInline(): boolean {\n    const dashboardChild = this.resolveDashboardChild();\n    return (\n      !dashboardChild ||\n      this.effectiveConfig().displayMode !== GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD\n    );\n  }\n  getAutoRefreshSeconds(): number | null {\n    if (!this.form) return null;\n    const value = this.form.get('refreshInterval')?.value;\n    return value == null ? null : typeof value === 'string' ? Number(value) : value;\n  }\n  getIntervalDisableConfig(): Record<string, boolean> {\n    return this.getShouldDisableIntervalConfig();\n  }\n  ngOnInit(): void {\n    this.initialize();\n  }\n  ngAfterViewInit(): void {\n    this.viewInitCompleted.set(true);\n    const dashboardChild = this.resolveDashboardChild();\n    const displayMode = this.effectiveConfig().displayMode;\n    const template =\n      dashboardChild && displayMode === GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD\n        ? (this.headerTemplateRef ?? null)\n        : null;\n    this.updateDashboardHeaderRegistration(template, dashboardChild);\n  }\n  ngOnDestroy(): void {\n    this.headerEffectRef?.destroy();\n    this.cleanupRegisteredHeaderTemplate();\n    this.globalContextService.unregister(this.componentId);\n    this.globalContextService.unregisterLoading(this.componentId);\n  }\n  // --- Public API methods (ordering: public before private) ---\n  handleLinkToggle(\n    event: LinkToggleEvent,\n    options?: {\n      suppressEmit?: boolean;\n      fromHandler?: boolean;\n    }\n  ): boolean {\n    return handleLinkToggleHelper(this.getLinkContext(), event, options);\n  }\n  toggleAllLinks(isLinked: boolean, suppressRefresh?: boolean, suppressEmit?: boolean): void {\n    const supportedLinks = Object.keys(this.controlLinkStatus() || {}) as Array<\n      keyof LinkStatesMap\n    >;\n    if (!supportedLinks.length) {\n      return;\n    }\n\n    // When unlinking: suppress both refresh and emit (data is already loaded)\n    // When linking: allow both refresh and emit unless explicitly suppressed\n    const shouldSuppressRefresh = suppressRefresh ?? !isLinked;\n    const shouldSuppressEmit = suppressEmit ?? !isLinked;\n\n    toggleAllLinksHelper(this.getLinkContext(), {\n      keys: supportedLinks as Array<keyof LinkStatesMap>,\n      isLinked,\n      suppressRefresh: shouldSuppressRefresh,\n      suppressEmit: shouldSuppressEmit\n    });\n  }\n\n  updateDateTimeContext(dateTimeContext: any): void {\n    this.orchestrator.updateLocalState(state => ({\n      ...state,\n      dateTimeContext: structuredClone(dateTimeContext)\n    }));\n\n    const dateTimeControl = this.form?.get('dateTimeContext');\n    if (dateTimeControl) {\n      dateTimeControl.setValue(structuredClone(dateTimeContext), { emitEvent: false });\n    }\n  }\n\n  /**\n   * Pause auto-refresh: sets isAutoRefreshEnabled to false and unlinks all controls.\n   * This stops the auto-refresh timer and prevents the widget from receiving\n   * updates from the global context.\n   *\n   * NOTE: Does NOT trigger any refresh or emit - data is already loaded, no updates needed.\n   */\n  pauseAutoRefresh(): void {\n    // Step 1: Unlink all controls without any emissions (data already loaded)\n    this.toggleAllLinks(\n      false, // isLinked = false\n      true, // suppressRefresh = true\n      true // suppressEmit = true\n    );\n\n    // Step 2: Set isAutoRefreshEnabled to false without emitting events\n    this.setAutoRefreshEnabled(false);\n  }\n\n  /**\n   * Resume auto-refresh: sets isAutoRefreshEnabled to true and links all controls.\n   * This starts the auto-refresh timer and allows the widget to receive\n   * updates from the global context.\n   *\n   * NOTE: Triggers emissions and refresh to sync with the current global context state.\n   */\n  resumeAutoRefresh(): void {\n    this.toggleAllLinks(true, false, false);\n    this.setAutoRefreshEnabled(true);\n  }\n\n  triggerHandler(handlerName: string, configOverride?: GlobalContextState | null): void {\n    const handler = this.widgetControls()?.stateHandlers?.[handlerName];\n    const previousRefresh = this.effectiveConfig().refreshOption;\n    this.orchestrator.executeHandler({\n      handler,\n      configOverride,\n      previousRefresh,\n      applyRefreshOptionChange: (prev, next) => this.applyRefreshOptionChange(prev, next),\n      buildWidgetState: override => this.buildWidgetState(override ?? null),\n      applyHandlerResult: result => this.applyHandlerResult(result),\n      applyConfigOverride: config => {\n        if (config) {\n          this.applyConfigOverride(config);\n        }\n      },\n      emitBasedOnFieldSources: config => this.emitConfiguration(config),\n      requestRefresh: () => this.refresh.emit(null)\n    });\n  }\n  onLocalRefreshTrigger(): void {\n    if (this.disableRefreshEmits()) {\n      return;\n    }\n    const outcome = this.processRefreshEvent({\n      globalDateTimeContext:\n        this.getGlobalState().dateTimeContext ?? this.config()?.dateTimeContext ?? null\n    });\n    if (!outcome.shouldEmitRefresh) {\n      this.refresh.emit(null);\n    }\n  }\n\n  /**\n   * Sets the auto-refresh form control value without affecting link states.\n   * Used when AngularJS widgets update their config directly (e.g., drag X axis in DPE 1.0).\n   * Note: This only updates the form value, NOT calling pauseAutoRefresh() which would\n   * also unlink controls and break the global context flow for date changes.\n   */\n  setAutoRefreshEnabled(enabled: boolean): void {\n    const autoRefreshControl = this.form?.get('isAutoRefreshEnabled');\n    if (autoRefreshControl && autoRefreshControl.value !== enabled) {\n      autoRefreshControl.setValue(enabled, { emitEvent: false });\n    }\n  }\n\n  private mapToWidgetDisplayMode(mode?: GlobalContextDisplayMode | null): WidgetDisplayMode {\n    switch (mode) {\n      case GLOBAL_CONTEXT_DISPLAY_MODE.CONFIG:\n        return WIDGET_DISPLAY_MODE.CONFIG;\n      case GLOBAL_CONTEXT_DISPLAY_MODE.VIEW_AND_CONFIG:\n        return WIDGET_DISPLAY_MODE.INLINE;\n      case GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD:\n        return WIDGET_DISPLAY_MODE.INLINE;\n      case null:\n      case undefined:\n        return WIDGET_DISPLAY_MODE.INLINE;\n      default: {\n        // Exhaustive check: ensures all modes are handled at compile time\n        // TypeScript can't verify template literal types match enum members perfectly\n        const _exhaustive: never = mode as never;\n        return WIDGET_DISPLAY_MODE.INLINE;\n      }\n    }\n  }\n  private applyConfigOverride(config: Partial<GlobalContextState>): void {\n    applyConfigOverrideHelper(this.getLinkContext(), config);\n  }\n  private buildWidgetState(configOverride?: GlobalContextState | null): WidgetState {\n    return buildWidgetStateHelper(this.getLinkContext(), configOverride);\n  }\n  private applyHandlerResult(result: WidgetStateHandlerResult): boolean {\n    return applyHandlerResultHelper(this.getLinkContext(), result);\n  }\n\n  private getFormDateTimeContext(): DateTimeContext | null {\n    return this.form?.get('dateTimeContext')?.value;\n  }\n\n  private hasValidDateRange(dateTimeContext: DateTimeContext | null): boolean {\n    return !!dateTimeContext?.dateFrom && !!dateTimeContext?.dateTo;\n  }\n  private applyRefreshOptionChange(\n    previousRefresh: RefreshOption | undefined,\n    nextRefresh: RefreshOption | undefined\n  ): void {\n    const outcome = this.orchestrator.applyRefreshOptionChange({\n      previousRefresh,\n      nextRefresh\n    });\n    if (!outcome.refreshOption) {\n      return;\n    }\n    this.inlineOverrides.set({});\n    this.dashboardOverrides.set({});\n    this.form?.patchValue({ refreshOption: outcome.refreshOption }, EMIT_EVENT_DISABLED);\n    if (outcome.forceDisableAutoRefresh) {\n      this.form?.patchValue({ isAutoRefreshEnabled: false }, EMIT_EVENT_DISABLED);\n    }\n  }\n  private getFieldSources(): FieldSourcesMap {\n    return this.orchestrator.getFieldSources() || {};\n  }\n  private getLocalState(): Partial<GlobalContextState> {\n    return this.orchestrator.getLocalState();\n  }\n  private updateLocalState(\n    updater: (state: Partial<GlobalContextState>) => Partial<GlobalContextState>\n  ): void {\n    this.orchestrator.updateLocalState(updater);\n  }\n  private getGlobalState(): Partial<GlobalContextState> {\n    return this.orchestrator.getGlobalState();\n  }\n  private initialize(): void {\n    const initialConfig = this.config() || {};\n    this.inlineOverrides.set({});\n    this.dashboardOverrides.set({});\n    this.orchestrator.initConfig(initialConfig);\n    this.orchestrator.initWidgetControls(this.widgetControls());\n    this.orchestrator.setDisplayMode(this.getInitialDisplayMode(initialConfig));\n    this.initializeForm(initialConfig);\n    this.initializeStateAndSources(initialConfig);\n    this.syncFormWithEffectiveConfig();\n    this.setupSubscriptions();\n    this.emitBasedOnFieldSources();\n    this.setupWidgetOptions();\n  }\n  private getInitialDisplayMode(initialConfig: GlobalContextState | null): WidgetDisplayMode {\n    const mode = initialConfig?.displayMode ?? GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD;\n    switch (mode) {\n      case GLOBAL_CONTEXT_DISPLAY_MODE.CONFIG:\n        return WIDGET_DISPLAY_MODE.CONFIG;\n      case GLOBAL_CONTEXT_DISPLAY_MODE.VIEW_AND_CONFIG:\n        return WIDGET_DISPLAY_MODE.INLINE;\n      case GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD:\n        return WIDGET_DISPLAY_MODE.INLINE;\n      default: {\n        // Exhaustive check: ensures all modes are handled at compile time\n        // TypeScript can't verify template literal types match enum members perfectly\n        const _exhaustive: never = mode as never;\n        return WIDGET_DISPLAY_MODE.INLINE;\n      }\n    }\n  }\n  private initializeForm(initialConfig: GlobalContextState | null): void {\n    this.form = this.globalContextFormService.buildForm(initialConfig);\n  }\n  private syncFormWithEffectiveConfig(): void {\n    const effectiveValues = this.effectiveConfig();\n    if (effectiveValues && this.form) {\n      this.form.patchValue(effectiveValues, EMIT_EVENT_DISABLED);\n    }\n  }\n  private setupWidgetOptions(): void {\n    const template = this.widgetControls();\n    this.shouldDisableCounter = !!template?.options?.noAutoRefreshCounter;\n  }\n  private setupEffects(): void {\n    // Remove automatic form syncing - form should be controlled by local state changes\n    // and user interactions only, not by derived effective config\n    // Register loading state reactively\n    effect(() => {\n      const loading = this.isLoading();\n      const inDashboard =\n        this.effectiveConfig().displayMode === GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD;\n      const autoLinked = this.getFieldSources()?.isAutoRefreshEnabled === FIELD_SOURCE_GLOBAL;\n      if (inDashboard && autoLinked && loading) {\n        this.globalContextService.registerLoading(this.componentId);\n      } else {\n        this.globalContextService.unregisterLoading(this.componentId);\n      }\n    });\n  }\n  private setupSubscriptions(): void {\n    this.subscribeToFormChanges();\n    if (this.isDashboardMode()) {\n      this.subscribeToGlobalStateChanges();\n      this.subscribeToGlobalRefreshEvents();\n    }\n  }\n  private subscribeToFormChanges(): void {\n    this.form.valueChanges\n      .pipe(\n        distinctUntilChanged((previous, current) => isEqual(previous, current)),\n        takeUntilDestroyed(this.destroyReference)\n      )\n      .subscribe(formValue => {\n        this.handleFormChange(formValue);\n      });\n  }\n  private handleFormChange(formValue: Partial<GlobalContextState>): void {\n    const sources = this.getFieldSources();\n    const normalizedFormValue = { ...formValue };\n\n    if (\n      this.effectiveConfig().refreshOption === REFRESH_OPTION.HISTORY &&\n      sources.refreshOption === FIELD_SOURCE_LOCAL &&\n      formValue.refreshOption === REFRESH_OPTION.LIVE\n    ) {\n      normalizedFormValue.refreshOption = REFRESH_OPTION.HISTORY;\n      this.form.patchValue({ refreshOption: REFRESH_OPTION.HISTORY }, EMIT_EVENT_DISABLED);\n    }\n\n    this.orchestrator.handleFormChange({\n      formValue: normalizedFormValue,\n      getFieldSources: () => this.getFieldSources(),\n      applyFormChangesToLocalState: value => this.applyFormChangesToLocalState(value),\n      shouldValidateAggregation: value => this.shouldValidateAggregation(value),\n      applyLocalAggregationChange: change => this.applyLocalAggregationChange(change),\n      applyRefreshOptionChange: (prev, next) => this.applyRefreshOptionChange(prev, next),\n      previousRefresh: this.effectiveConfig().refreshOption,\n      updateGlobalStateFromForm: (value, sources) =>\n        this.orchestrator.updateGlobalStateFromForm(value, sources as FieldSourcesMap),\n      emitUpdate: config => this.emitConfiguration(config),\n      emitRefresh: payload => this.refresh.emit(payload ?? null)\n    });\n  }\n  private shouldValidateAggregation(formValue: Partial<GlobalContextState>): boolean {\n    return !!formValue.dateTimeContext && !!this.form.get('aggregation');\n  }\n  private applyFormChangesToLocalState(formValue: Partial<GlobalContextState>): void {\n    this.updateLocalState(current => ({ ...current, ...formValue }));\n  }\n  private subscribeToGlobalStateChanges(): void {\n    this.globalContextEventService\n      .on(GLOBAL_CONTEXT_EVENTS.STATE_CHANGE)\n      .pipe(takeUntilDestroyed(this.destroyReference))\n      .subscribe(state => this.handleGlobalStateChange(state));\n  }\n  private handleGlobalStateChange(state: Partial<GlobalContextState> | null): void {\n    if (!state) {\n      return;\n    }\n    this.orchestrator.handleGlobalStateChange({\n      state,\n      getFieldSources: () => this.getFieldSources(),\n      previousRefresh: this.effectiveConfig().refreshOption,\n      processGlobalStateChange: (incoming, sources) =>\n        this.orchestrator.processGlobalStateChange(incoming, sources as FieldSourcesMap),\n      shouldValidateAggregationForUnlinkedDateTime: (incoming, sources) =>\n        this.orchestrator.shouldValidateAggregationForUnlinkedDateTime(\n          incoming,\n          sources as FieldSourcesMap\n        ),\n      applyLocalAggregationChange: change => this.applyLocalAggregationChange(change),\n      applyRefreshOptionChange: (prev, next) => this.applyRefreshOptionChange(prev, next),\n      patchForm: updates => this.patchFormValues(updates),\n      emitUpdate: config => this.emitConfiguration(config),\n      emitRefresh: payload => this.refresh.emit(payload ?? null)\n    });\n  }\n  private subscribeToGlobalRefreshEvents(): void {\n    this.globalContextEventService\n      .on(GLOBAL_CONTEXT_EVENTS.REFRESH)\n      .pipe(\n        filter(() => !this.disableRefreshEmits()),\n        takeUntilDestroyed(this.destroyReference)\n      )\n      .subscribe(dateTimeContext => {\n        if (dateTimeContext) {\n          this.handleGlobalRefresh(dateTimeContext as DateTimeContext);\n        }\n      });\n  }\n  private isDashboardMode(config: GlobalContextState | null = null): boolean {\n    if (config) {\n      return config.displayMode === GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD;\n    }\n    return this.effectiveConfig().displayMode === GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD;\n  }\n  private initializeStateAndSources(initialConfig: GlobalContextState | null): void {\n    const isDashboard = this.isDashboardMode(initialConfig);\n    const globalState =\n      this.globalContextEventService.getLatestValue(GLOBAL_CONTEXT_EVENTS.STATE_CHANGE) || {};\n    this.orchestrator.initializeStateAndSources({\n      initialConfig,\n      globalState,\n      isDashboard,\n      widgetControls: this.widgetControls(),\n      generateFreshDateTime: interval => generateFreshDateTimeContext(interval)\n    });\n  }\n\n  private handleGlobalRefresh(globalDateTimeContext: DateTimeContext): void {\n    handleGlobalRefreshHelper(this.getRefreshContext(), globalDateTimeContext);\n  }\n  private processRefreshEvent(params: {\n    globalDateTimeContext?: DateTimeContext | null;\n  }): RefreshResult {\n    return processRefreshEventHelper(this.getRefreshContext(), params);\n  }\n\n  private getShouldDisableIntervalConfig(): Record<string, boolean> {\n    return getShouldDisableIntervalConfigHelper(this.getRefreshContext());\n  }\n\n  private resolveDashboardChild(): DashboardChildComponent | null {\n    return this.dashboardChildForLegacy() ?? this.injectedDashboardChild ?? null;\n  }\n  private updateDashboardHeaderRegistration(\n    template: TemplateRef<unknown> | null,\n    dashboardChild: DashboardChildComponent | null\n  ): void {\n    // Handle early exits and cleanup in one conditional block\n    const isDifferentDashboardChild =\n      this.registeredDashboardChild && this.registeredDashboardChild !== dashboardChild;\n    const isMissingRequiredData = !template || !dashboardChild;\n    const isAlreadyRegistered =\n      this.registeredHeaderTemplate === template &&\n      this.registeredDashboardChild === dashboardChild;\n\n    if (isDifferentDashboardChild || isMissingRequiredData) {\n      this.removeHeaderFromDashboard();\n      if (isMissingRequiredData) {\n        return;\n      }\n    }\n\n    if (isAlreadyRegistered) {\n      return;\n    }\n\n    this.removeHeaderFromDashboard();\n    const templates = dashboardChild._additionalHeaderTemplates.value;\n    if (!templates.some(t => t.template === template)) {\n      dashboardChild._additionalHeaderTemplates.next([\n        ...templates,\n        {\n          template,\n          priority: 100\n        }\n      ]);\n    }\n    this.registeredHeaderTemplate = template;\n    this.registeredDashboardChild = dashboardChild;\n  }\n  private cleanupRegisteredHeaderTemplate(): void {\n    this.removeHeaderFromDashboard();\n  }\n  private removeHeaderFromDashboard(): void {\n    if (this.registeredDashboardChild && this.registeredHeaderTemplate) {\n      const templates = this.registeredDashboardChild._additionalHeaderTemplates.value;\n\n      this.registeredDashboardChild._additionalHeaderTemplates.next(\n        templates.filter(t => t.template !== this.registeredHeaderTemplate)\n      );\n    }\n    this.registeredHeaderTemplate = null;\n    this.registeredDashboardChild = null;\n  }\n  private emitBasedOnFieldSources(): void {\n    this.emitConfiguration(this.effectiveConfig());\n  }\n  private emitConfiguration(configuration: GlobalContextState): void {\n    const safe = this.orchestrator.emitConfiguration(this.componentId, configuration);\n    this.globalContextChange.emit(safe);\n  }\n  private patchFormValues(formUpdates: Partial<GlobalContextState>): void {\n    patchFormValuesHelper(this.getRefreshContext(), formUpdates);\n  }\n\n  private applyLocalAggregationChange(change: AggregationChangeInstruction): void {\n    applyLocalAggregationChangeHelper(this.getRefreshContext(), change);\n  }\n  private getRefreshContext(): RefreshHelpersContext {\n    return {\n      orchestrator: this.orchestrator,\n      aggregationValidationService: this.aggregationValidationService,\n      getFieldSources: () => this.getFieldSources(),\n      getLocalState: () => this.getLocalState(),\n      getGlobalState: () => this.getGlobalState(),\n      updateLocalState: updater => this.updateLocalState(updater),\n      updateGlobalState: updater => this.orchestrator.updateGlobalState(updater),\n      getEffectiveConfig: () => this.effectiveConfig(),\n      getInitialConfig: () => this.config(),\n      emitBasedOnFieldSources: () => this.emitBasedOnFieldSources(),\n      emitRefresh: payload => this.refresh.emit(payload ?? null),\n      form: () => this.form\n    };\n  }\n  private getLinkContext(): LinkHelpersContext {\n    if (!this.linkContextCache) {\n      this.linkContextCache = this.createLinkContext();\n    }\n    return this.linkContextCache;\n  }\n\n  private createLinkContext(): LinkHelpersContext {\n    return {\n      orchestrator: this.orchestrator,\n      getFieldSources: () => this.getFieldSources(),\n      getEffectiveConfig: () => this.effectiveConfig(),\n      getInitialConfig: () => this.config(),\n      getLocalState: () => this.getLocalState(),\n      getGlobalState: () => this.getGlobalState(),\n      updateLocalState: updater => this.updateLocalState(updater),\n      emitBasedOnFieldSources: () => this.emitBasedOnFieldSources(),\n      emitRefresh: payload => this.refresh.emit(payload ?? null),\n      form: () => this.form,\n      inlineOverrides: this.inlineOverrides.asReadonly(),\n      setInlineOverrides: value => this.inlineOverrides.set(value),\n      dashboardOverrides: this.dashboardOverrides.asReadonly(),\n      setDashboardOverrides: value => this.dashboardOverrides.set(value),\n      inlineSettings: () => this.inlineSettings() ?? {},\n      dashboardControlSettings: () => this.dashboardControlSettings() ?? {},\n      controlLinkStatus: () => this.controlLinkStatus() ?? {},\n      updateAggregationValue: aggregation =>\n        updateAggregationValueHelper(this.getRefreshContext(), aggregation),\n      applyLocalAggregationChange: change =>\n        applyLocalAggregationChangeHelper(this.getRefreshContext(), change),\n      recalcLocalAggregation: () =>\n        recalculateAggregationForLocalDateTime(this.getRefreshContext()),\n      recalcGlobalAggregation: () =>\n        recalculateAggregationForGlobalDateTime(this.getRefreshContext()),\n      setShouldDisableCounter: value => {\n        this.shouldDisableCounter = value;\n      }\n    };\n  }\n}\n","<ng-template #headerContent>\n  @let linkModel = linkDisplayModel();\n  <ng-content select=\"#header\"></ng-content>\n\n  @if (shouldShowHeaderLinks()) {\n    <c8y-global-context-link-controls\n      [linkStates]=\"linkModel.linkStates\"\n      [controlConfigs]=\"linkModel.controlConfig\"\n      (allLinksToggled)=\"toggleAllLinks($event)\"\n    ></c8y-global-context-link-controls>\n  }\n</ng-template>\n\n<ng-template #inlineContent>\n  @let settings = inlineSettings();\n  @let linkModel = linkDisplayModel();\n\n  @if (form && settings) {\n    <form\n      class=\"d-flex gap-16 p-l-16 p-r-16 inner-scroll\"\n      [ngClass]=\"{\n        'p-b-8':\n          settings.showTimeContext ||\n          settings.showRefresh ||\n          settings.showAutoRefresh ||\n          settings.showAggregation\n      }\"\n      [formGroup]=\"form\"\n    >\n      <div class=\"input-group w-auto input-group-sm\">\n        @if (settings.showAggregation) {\n          <c8y-aggregation-picker\n            data-cy=\"global-inline-date-context--Aggregation-display\"\n            [disabledAggregations]=\"getDisabledAggregations()\"\n            formControlName=\"aggregation\"\n            [resetToDefault]=\"true\"\n          ></c8y-aggregation-picker>\n        }\n\n        @if (settings.showAutoRefresh) {\n          <c8y-auto-refresh-control\n            [isLoading]=\"isLoading()\"\n            [disableCounter]=\"shouldDisableCounter\"\n            formControlName=\"isAutoRefreshEnabled\"\n            [autoRefreshSeconds]=\"getAutoRefreshSeconds()\"\n            [isAutoRefreshConnected]=\"linkModel.linkStates.isAutoRefreshEnabled ?? false\"\n            (refresh)=\"onLocalRefreshTrigger()\"\n          ></c8y-auto-refresh-control>\n        }\n\n        @if (settings.showTimeContext) {\n          @let isHistoryMode = form.get('refreshOption')?.value === REFRESH_OPTION.HISTORY;\n          <c8y-date-time-context-picker\n            style=\"margin-left: -1px\"\n            formControlName=\"dateTimeContext\"\n            [shouldDisableInterval]=\"getIntervalDisableConfig()\"\n            [config]=\"\n              isHistoryMode\n                ? { showDateTo: true, showDateFrom: true }\n                : { showDateTo: false, showDateFrom: true }\n            \"\n          ></c8y-date-time-context-picker>\n        }\n\n        @if (settings.showRefresh) {\n          <div class=\"input-group-btn\">\n            <button\n              class=\"btn btn-default\"\n              [attr.aria-label]=\"'Refresh' | translate\"\n              [tooltip]=\"'Refresh' | translate\"\n              placement=\"bottom\"\n              container=\"body\"\n              type=\"button\"\n              data-cy=\"global-inline-date-context--reload-button\"\n              [adaptivePosition]=\"false\"\n              [delay]=\"500\"\n              [disabled]=\"isLoading()\"\n              (click)=\"refresh.emit(null)\"\n            >\n              <i\n                [class.icon-spin]=\"isLoading()\"\n                [c8yIcon]=\"'refresh'\"\n              ></i>\n            </button>\n          </div>\n        }\n      </div>\n    </form>\n  }\n\n  <ng-content select=\"#body\"></ng-content>\n</ng-template>\n\n@switch (effectiveConfig().displayMode) {\n  @case (GLOBAL_CONTEXT_DISPLAY_MODE.CONFIG) {\n    <ng-container [ngTemplateOutlet]=\"inlineContent\"></ng-container>\n  }\n  @case (GLOBAL_CONTEXT_DISPLAY_MODE.VIEW_AND_CONFIG) {\n    <ng-container [ngTemplateOutlet]=\"headerContent\"></ng-container>\n    <ng-container [ngTemplateOutlet]=\"inlineContent\"></ng-container>\n  }\n  @default {\n    @if (shouldRenderHeaderInline()) {\n      <ng-container [ngTemplateOutlet]=\"headerContent\"></ng-container>\n    }\n    <ng-container [ngTemplateOutlet]=\"inlineContent\"></ng-container>\n  }\n}\n","import { Injectable, WritableSignal, computed, inject, signal } from '@angular/core';\nimport { REFRESH_OPTION, type RefreshOption } from '../../models/auto-refresh.model';\nimport { GLOBAL_CONTEXT_DEFAULTS } from '../../models/global-context-defaults';\nimport {\n  GLOBAL_CONTEXT_DISPLAY_MODE,\n  type GlobalContextSettings,\n  type WidgetControls,\n  type GlobalContextDisplayMode,\n  type GlobalContextState\n} from '../../models/global-context.model';\nimport { TIME_INTERVAL } from '../../models/interval-picker.model';\nimport { fillMissingDefaults } from '../../utils/global-context-defaults.util';\nimport { WidgetControlService } from '../domain/widget-control.service';\nimport { GlobalContextUtilsService } from '../infrastructure/global-context-utils.service';\n\n/**\n * GlobalContextConfigStoreService\n *\n * Component-scoped store that manages widget-level Global Context configuration.\n * - Holds separate Live/History modes\n * - Tracks refreshOption (tab) and displayMode\n * - Normalizes incoming configs (Live → aggregation=null; History → interval=CUSTOM)\n * - Applies targeted patches to the current mode\n * - Avoids redundant recomputation via shallow diffing\n *\n * Provided in component scope (see providers of c8y-global-context-config).\n */\n@Injectable()\nexport class GlobalContextConfigStoreService {\n  /** Utility for diffing before signal writes */\n  private readonly utils = inject(GlobalContextUtilsService);\n  /** Widget control template used for computing visibility settings */\n  private readonly widgetControlService = inject(WidgetControlService);\n\n  /** Widget controls definition (what a widget supports) provided by the host component */\n  private readonly _widgetControls: WritableSignal<WidgetControls | null> = signal(null);\n\n  /**\n   * Live mode of the widget time context state.\n   * Null until the store is hydrated with the first input.\n   */\n  readonly liveState: WritableSignal<GlobalContextState | null> = signal(null);\n\n  /**\n   * History mode of the widget time context state.\n   * Null until the store is hydrated with the first input.\n   */\n  readonly historyState: WritableSignal<GlobalContextState | null> = signal(null);\n\n  /** Currently selected tab (refresh option). Defaults to LIVE. */\n  readonly refreshOption: WritableSignal<RefreshOption> = signal(REFRESH_OPTION.LIVE);\n\n  /** Current display mode for the widget (config or view_and_config). */\n  readonly displayMode: WritableSignal<GlobalContextDisplayMode> = signal(\n    GLOBAL_CONTEXT_DISPLAY_MODE.CONFIG\n  );\n\n  /** Whether the store has processed the first hydrate() call. */\n  readonly initialized: WritableSignal<boolean> = signal(false);\n\n  /**\n   * Computed visibility settings for controls, based on the current widget controls,\n   * display mode, and selected refresh option. If widgetControls are not provided yet,\n   * defaults to showing all controls.\n   */\n  readonly settings = computed<Partial<GlobalContextSettings>>(() => {\n    this.activeConfig();\n    const { settings } = this.widgetControlService.resolveConfigControlSettings(\n      this._widgetControls(),\n      this.displayMode(),\n      this.refreshOption()\n    );\n    return settings;\n  });\n\n  /**\n   * Inline visibility and dashboard control settings derived for the Inline component.\n   * Uses default link states from the widget controls; dynamic link toggling remains\n   * handled by the Inline component.\n   */\n  readonly inlineSettings = computed(() => {\n    const res = this.widgetControlService.resolveInlineControlSettings(\n      this._widgetControls(),\n      this.displayMode(),\n      this.refreshOption()\n    );\n    return res; // { settings, links, dashboardControls }\n  });\n\n  /**\n   * Effective configuration for the currently selected tab.\n   * Consumers should read this to render the UI.\n   */\n  readonly activeConfig = computed(() => {\n    return this.refreshOption() === REFRESH_OPTION.LIVE ? this.liveState() : this.historyState();\n  });\n\n  /**\n   * Hydrates the store from an external config input.\n   * After the first call, preserves the user's tab selection.\n   * @param config - Incoming widget-level global context configuration\n   */\n  hydrate(config: GlobalContextState): void {\n    const norm = this.normalize(config);\n\n    if (!this.initialized()) {\n      // Initialize both modes with the same dateTimeContext for consistency\n      // This ensures when user switches modes, they see the same time range initially\n      const sharedDateTimeContext = norm.dateTimeContext;\n\n      const baseLive = fillMissingDefaults({\n        displayMode: norm.displayMode,\n        refreshOption: REFRESH_OPTION.LIVE,\n        isAutoRefreshEnabled: GLOBAL_CONTEXT_DEFAULTS.IS_AUTO_REFRESH_ENABLED,\n        refreshInterval: GLOBAL_CONTEXT_DEFAULTS.REFRESH_INTERVAL,\n        aggregation: null,\n        dateTimeContext: sharedDateTimeContext\n      });\n      const baseHistory = this.enforceHistory(\n        fillMissingDefaults({\n          displayMode: norm.displayMode,\n          refreshOption: REFRESH_OPTION.HISTORY,\n          isAutoRefreshEnabled: false,\n          dateTimeContext: sharedDateTimeContext,\n          // Preserve null aggregation from the source mode instead of using default\n          aggregation: norm.aggregation\n        })\n      );\n\n      if (norm.refreshOption === REFRESH_OPTION.LIVE) {\n        this.liveState.set(norm);\n        this.historyState.set(baseHistory);\n      } else {\n        this.liveState.set(baseLive);\n        this.historyState.set(this.enforceHistory(norm));\n      }\n      this.refreshOption.set(norm.refreshOption);\n      this.displayMode.set(norm.displayMode);\n      this.initialized.set(true);\n      return;\n    }\n\n    // Subsequent updates: update matching state only, preserve tab selection\n    if (norm.refreshOption === REFRESH_OPTION.LIVE) {\n      this.setIfChanged(this.liveState, norm);\n    } else {\n      this.setIfChanged(this.historyState, this.enforceHistory(norm));\n    }\n\n    // Keep display mode in sync\n    if (this.displayMode() !== norm.displayMode) {\n      this.setDisplayMode(norm.displayMode);\n    }\n  }\n\n  /**\n   * Sets the widget controls template. Required for computing visibility via `settings`.\n   */\n  setWidgetControls(controls: WidgetControls): void {\n    this._widgetControls.set(controls);\n  }\n\n  /**\n   * Sets the display mode and syncs the mode to both modes.\n   * Does not change the selected tab.\n   * @param mode - Display mode to set (CONFIG or VIEW_AND_CONFIG)\n   */\n  setDisplayMode(mode: GlobalContextDisplayMode): void {\n    if (this.displayMode() === mode) {\n      return;\n    }\n    this.displayMode.set(mode);\n\n    const live = this.liveState();\n    const history = this.historyState();\n    if (live) {\n      this.setIfChanged(this.liveState, { ...live, displayMode: mode });\n    }\n    if (history) {\n      this.setIfChanged(this.historyState, { ...history, displayMode: mode });\n    }\n  }\n\n  /**\n   * Explicitly selects the tab (Live/History). Does not mutate stored values for either\n   * refresh mode; it only switches which mode is active.\n   * @param option - Target refresh option (LIVE or HISTORY)\n   */\n  setRefreshOption(option: RefreshOption): void {\n    if (this.refreshOption() === option) {\n      return;\n    }\n    this.refreshOption.set(option);\n  }\n\n  /**\n   * Hydrates the snapshot for a specific refresh mode without altering the current selection.\n   * Used by widget configuration to restore per-mode state across component lifecycles.\n   */\n  setSnapshot(option: RefreshOption, snapshot: GlobalContextState | null): void {\n    if (!snapshot) {\n      return;\n    }\n\n    if (option === REFRESH_OPTION.LIVE) {\n      // Don't use fillMissingDefaults here as it can overwrite the dateTimeContext\n      // The snapshot is already complete from the tab switch logic\n      const normalized: GlobalContextState = {\n        ...snapshot,\n        refreshOption: REFRESH_OPTION.LIVE,\n        aggregation: null\n      };\n      if (normalized.displayMode && this.displayMode() !== normalized.displayMode) {\n        this.displayMode.set(normalized.displayMode);\n      }\n      this.setIfChanged(this.liveState, normalized);\n      return;\n    }\n\n    // For History, enforce the interval=CUSTOM rule but don't regenerate dates\n    const normalizedHistory: GlobalContextState = this.enforceHistory({\n      ...snapshot,\n      refreshOption: REFRESH_OPTION.HISTORY\n    });\n    if (normalizedHistory.displayMode && this.displayMode() !== normalizedHistory.displayMode) {\n      this.displayMode.set(normalizedHistory.displayMode);\n    }\n    this.setIfChanged(this.historyState, normalizedHistory);\n  }\n\n  /**\n   * Applies a partial update to the currently selected refresh mode.\n   * Enforces business rules (Live: aggregation=null; History: interval=CUSTOM) before commit.\n   * @param changes - Partial changes to apply to the current refresh mode\n   */\n  patchCurrent(changes: Partial<GlobalContextState>): void {\n    const isLive = this.refreshOption() === REFRESH_OPTION.LIVE;\n    const target = isLive ? this.liveState : this.historyState;\n    const prev = target();\n\n    if (!prev) {\n      return;\n    }\n\n    // Filter out refreshInterval from changes - it's fixed at 5s and should not be user-modifiable\n    const { refreshInterval: _, ...allowedChanges } = changes;\n\n    let next: GlobalContextState = { ...prev, ...allowedChanges } as GlobalContextState;\n\n    if (!isLive) {\n      next = this.enforceHistory(next);\n    } else {\n      // Live must not carry aggregation\n      next.aggregation = null;\n    }\n\n    // Always enforce the fixed refresh interval\n    next.refreshInterval = GLOBAL_CONTEXT_DEFAULTS.REFRESH_INTERVAL;\n\n    this.setIfChanged(target, next);\n  }\n\n  /**\n   * Resets both Live and History modes to defaults, preserving the current\n   * selected tab and display mode.\n   */\n  resetAllModesToDefaults(): void {\n    const mode = this.displayMode();\n    const baseLive = fillMissingDefaults({\n      displayMode: mode,\n      refreshOption: REFRESH_OPTION.LIVE,\n      isAutoRefreshEnabled: GLOBAL_CONTEXT_DEFAULTS.IS_AUTO_REFRESH_ENABLED,\n      refreshInterval: GLOBAL_CONTEXT_DEFAULTS.REFRESH_INTERVAL,\n      aggregation: null\n    });\n    const baseHistory = this.enforceHistory(\n      fillMissingDefaults({\n        displayMode: mode,\n        refreshOption: REFRESH_OPTION.HISTORY,\n        isAutoRefreshEnabled: false\n      })\n    );\n    this.liveState.set(baseLive);\n    this.historyState.set(baseHistory);\n  }\n\n  /**\n   * Resets a single mode (live/history) to defaults, preserving the current\n   * display mode and selected tab.\n   */\n  resetModeToDefaults(target: RefreshOption): void {\n    const mode = this.displayMode();\n    if (target === REFRESH_OPTION.LIVE) {\n      const baseLive = fillMissingDefaults({\n        displayMode: mode,\n        refreshOption: REFRESH_OPTION.LIVE,\n        isAutoRefreshEnabled: GLOBAL_CONTEXT_DEFAULTS.IS_AUTO_REFRESH_ENABLED,\n        refreshInterval: GLOBAL_CONTEXT_DEFAULTS.REFRESH_INTERVAL,\n        aggregation: null\n      });\n      this.liveState.set(baseLive);\n    } else {\n      const baseHistory = this.enforceHistory(\n        fillMissingDefaults({\n          displayMode: mode,\n          refreshOption: REFRESH_OPTION.HISTORY,\n          isAutoRefreshEnabled: false\n        })\n      );\n      this.historyState.set(baseHistory);\n    }\n  }\n\n  /**\n   * Selects a value from the active configuration using a projector function.\n   * Returns a signal that updates whenever the active configuration changes.\n   */\n  select<K>(project: (s: GlobalContextState) => K) {\n    return computed<K | null>(() => {\n      const cfg = this.activeConfig();\n      return cfg ? project(cfg) : null;\n    });\n  }\n\n  /**\n   * Normalizes an incoming configuration to internal invariants.\n   * @param config - Raw incoming config\n   * @returns A normalized config respecting store rules\n   */\n  private normalize(config: GlobalContextState): GlobalContextState {\n    const norm = fillMissingDefaults(config);\n    if (![REFRESH_OPTION.LIVE, REFRESH_OPTION.HISTORY].includes(norm.refreshOption)) {\n      norm.refreshOption = REFRESH_OPTION.LIVE;\n    }\n    if (\n      norm.displayMode !== GLOBAL_CONTEXT_DISPLAY_MODE.CONFIG &&\n      norm.displayMode !== GLOBAL_CONTEXT_DISPLAY_MODE.VIEW_AND_CONFIG\n    ) {\n      norm.displayMode = GLOBAL_CONTEXT_DISPLAY_MODE.CONFIG;\n    }\n    if (norm.refreshOption === REFRESH_OPTION.LIVE) {\n      norm.aggregation = null;\n    }\n    // Always enforce the fixed 5s refresh interval\n    norm.refreshInterval = GLOBAL_CONTEXT_DEFAULTS.REFRESH_INTERVAL;\n    if (norm.refreshOption === REFRESH_OPTION.HISTORY) {\n      return this.enforceHistory(norm);\n    }\n    return norm;\n  }\n\n  /**\n   * Ensures state represents a valid History configuration (interval=CUSTOM).\n   * @param state - State candidate to coerce to History rules\n   * @returns A state object compliant with History mode rules\n   */\n  private enforceHistory(state: GlobalContextState): GlobalContextState {\n    return {\n      ...state,\n      refreshOption: REFRESH_OPTION.HISTORY,\n      ...(state.dateTimeContext && {\n        dateTimeContext: { ...state.dateTimeContext, interval: TIME_INTERVAL.CUSTOM }\n      })\n    };\n  }\n\n  /**\n   * Writes to a signal only if the next value differs from the current one.\n   * Prevents unnecessary change detection and effect triggering.\n   * @param target - Signal to update\n   * @param next - Next value to set if changed\n   */\n  private setIfChanged(\n    target: WritableSignal<GlobalContextState | null>,\n    next: GlobalContextState\n  ): void {\n    const prev = target();\n    if (!prev) {\n      target.set(next);\n      return;\n    }\n    const diff = this.utils.getChangedFields(prev, next);\n\n    if (Object.keys(diff).length > 0) {\n      target.set(next);\n    }\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  effect,\n  inject,\n  input,\n  output,\n  untracked\n} from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { ConfigurationControlsComponent } from '../features/configuration/configuration-controls/configuration-controls.component';\nimport { REFRESH_OPTION } from '../models/auto-refresh.model';\nimport type { GlobalContextState, WidgetControls } from '../models/global-context.model';\nimport { GlobalContextConfigStoreService } from '../services/state/global-context-store.service';\n\n/**\n * GlobalContextConfigComponent\n *\n * Presentation + state coordination for the widget's Global Context controls.\n * - Hydrates a component-scoped store from the incoming `config` input.\n * - Renders Live/History configuration controls via `ConfigurationControlsComponent`.\n * - Emits a normalized `GlobalContextState` when user changes either the tab\n *   (refreshOption) or any control value within the current tab.\n * - Does not emit during initial hydrate; emissions only happen on user actions.\n */\n@Component({\n  standalone: true,\n  imports: [\n    ReactiveFormsModule,\n    TooltipModule,\n    PopoverModule,\n    CollapseModule,\n    ConfigurationControlsComponent\n  ],\n  selector: 'c8y-global-context-config',\n  templateUrl: './global-context-config.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [GlobalContextConfigStoreService]\n})\nexport class GlobalContextConfigComponent {\n  private readonly store = inject(GlobalContextConfigStoreService);\n\n  configInput = input.required<GlobalContextState>({ alias: 'config' });\n  isLoading = input(false);\n  widgetControls = input.required<WidgetControls>();\n  liveSnapshotInput = input<GlobalContextState | null>(null, { alias: 'liveSnapshot' });\n  historySnapshotInput = input<GlobalContextState | null>(null, { alias: 'historySnapshot' });\n\n  readonly activeConfig = computed(() => this.store.activeConfig());\n  readonly liveConfig = computed(() => this.store.liveState());\n  readonly historyConfig = computed(() => this.store.historyState());\n  readonly refreshOption = computed(() => this.store.refreshOption());\n  readonly settings = computed(() => this.store.settings());\n  readonly supportedModes = computed(\n    () => this.widgetControls().supportedModes ?? [REFRESH_OPTION.LIVE, REFRESH_OPTION.HISTORY]\n  );\n  isExpanded = false;\n\n  readonly refresh = output<void>();\n  readonly globalContextChange = output<GlobalContextState>();\n\n  constructor() {\n    // Consolidated hydration & widget controls effect\n    effect(() => {\n      const config = this.configInput();\n      const controls = this.widgetControls();\n\n      untracked(() => {\n        if (config) {\n          this.store.hydrate(config);\n        }\n        if (controls) {\n          this.store.setWidgetControls(controls);\n        }\n        // Touch settings once both are available to trigger hydration\n        if (config && controls && this.activeConfig()) {\n          this.settings();\n        }\n      });\n    });\n\n    // Consolidated snapshot setting effect\n    effect(() => {\n      const liveSnapshot = this.liveSnapshotInput();\n      const historySnapshot = this.historySnapshotInput();\n\n      untracked(() => {\n        if (liveSnapshot) {\n          this.store.setSnapshot(REFRESH_OPTION.LIVE, liveSnapshot);\n        }\n        if (historySnapshot) {\n          this.store.setSnapshot(REFRESH_OPTION.HISTORY, historySnapshot);\n        }\n      });\n    });\n  }\n\n  onConfigurationChanges(changes: Partial<GlobalContextState>): void {\n    const current = this.activeConfig();\n    if (!current) {\n      return;\n    }\n\n    if (this.isRefreshOptionChange(changes, current)) {\n      const { refreshOption } = changes;\n\n      // Get the target mode's existing state to preserve its interval/preset\n      const targetState =\n        refreshOption === REFRESH_OPTION.LIVE ? this.store.liveState() : this.store.historyState();\n\n      // Build target snapshot: inherit time range (dateFrom/dateTo) but preserve target mode's interval\n      const targetSnapshot: GlobalContextState = {\n        ...current,\n        refreshOption,\n        dateTimeContext:\n          current.dateTimeContext && targetState?.dateTimeContext\n            ? {\n                ...structuredClone(current.dateTimeContext),\n                interval: targetState.dateTimeContext.interval // Preserve target's interval\n              }\n            : current.dateTimeContext,\n        // Reset aggregation for Live mode, preserve for History\n        aggregation: refreshOption === REFRESH_OPTION.LIVE ? null : current.aggregation\n      };\n\n      // CRITICAL: Set snapshot BEFORE changing refreshOption to prevent race condition\n      this.store.setSnapshot(refreshOption, targetSnapshot);\n      this.store.setRefreshOption(refreshOption);\n\n      this.emitActive();\n      return;\n    }\n\n    // Capture state before patch to detect actual changes\n    const stateBefore = this.store.activeConfig();\n    this.store.patchCurrent(changes);\n    const stateAfter = this.store.activeConfig();\n\n    // Only emit if the state actually changed\n    // The store's setIfChanged method prevents unnecessary updates,\n    // so we check if the reference changed to know if an update occurred\n    if (stateBefore !== stateAfter) {\n      this.emitActive();\n    }\n  }\n\n  /** Emits the current normalized active state if available */\n  private emitActive(): void {\n    const state = this.store.activeConfig();\n    if (state) {\n      this.globalContextChange.emit(state);\n    }\n  }\n\n  private isRefreshOptionChange(\n    changes: Partial<GlobalContextState>,\n    current: Partial<GlobalContextState>\n  ): boolean {\n    return (\n      Object.keys(changes).length === 1 &&\n      'refreshOption' in changes &&\n      changes.refreshOption !== current.refreshOption\n    );\n  }\n}\n","<c8y-configuration-controls\n  [settings]=\"settings()\"\n  [controlsDisplayMode]=\"'horizontal'\"\n  [tabsOutletName]=\"'verticalTabOutletForConfigurationModes'\"\n  [activeMode]=\"refreshOption()\"\n  [liveContext]=\"liveConfig()\"\n  [historyContext]=\"historyConfig()\"\n  [supportedModes]=\"supportedModes()\"\n  (contextChange)=\"onConfigurationChanges($event)\"\n  (refreshOptionChange)=\"onConfigurationChanges({ refreshOption: $event })\"\n></c8y-configuration-controls>\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  DestroyRef,\n  forwardRef,\n  inject,\n  OnInit\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n  ControlValueAccessor,\n  FormBuilder,\n  FormsModule,\n  NG_VALUE_ACCESSOR,\n  ReactiveFormsModule\n} from '@angular/forms';\nimport { C8yTranslatePipe } from '@c8y/ngx-components';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { map } from 'rxjs/operators';\nimport type { ContextConfig } from '../../../models/context-config.model';\nimport type { GlobalContextDisplayMode } from '../../../models/global-context.model';\nimport { GLOBAL_CONTEXT_DISPLAY_MODE } from '../../../models/global-context.model';\n\n@Component({\n  selector: 'c8y-config-context-selector',\n  standalone: true,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    @if (form) {\n      @let isWidgetContext = form.get('context')?.value === 'widget';\n      @let helpText = 'Show controls directly in the widget view for easier access.' | translate;\n\n      <form class=\"form-group m-b-8\" [formGroup]=\"form\">\n        <div class=\"d-flex gap-8 a-i-center\">\n          <label class=\"c8y-radio\">\n            <input\n              type=\"radio\"\n              value=\"dashboard\"\n              data-cy=\"c8y-config-context-selector--dashboard-mode\"\n              formControlName=\"context\"\n            />\n            <span class=\"a-s-center\"></span>\n            <span translate>Dashboard</span>\n          </label>\n          <label class=\"c8y-radio\">\n            <input\n              type=\"radio\"\n              value=\"widget\"\n              data-cy=\"c8y-config-context-selector--config-mode\"\n              formControlName=\"context\"\n            />\n            <span class=\"a-s-center\"></span>\n            <span translate>Widget</span>\n          </label>\n        </div>\n\n        @if (isWidgetContext) {\n          <div class=\"m-t-8\">\n            <label class=\"c8y-checkbox\">\n              <input\n                type=\"checkbox\"\n                data-cy=\"c8y-config-context-selector--view-and-config-mode\"\n                formControlName=\"showInWidget\"\n              />\n              <span class=\"a-s-center\"></span>\n              <span translate>Show in widget</span>\n              <button\n                class=\"btn-help btn-help--sm\"\n                [attr.aria-label]=\"'Help' | translate\"\n                [popover]=\"helpText\"\n                placement=\"right\"\n                triggers=\"focus\"\n                container=\"body\"\n                type=\"button\"\n                [adaptivePosition]=\"true\"\n              ></button>\n            </label>\n          </div>\n        }\n      </form>\n    }\n  `,\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => ConfigContextSelectorComponent),\n      multi: true\n    }\n  ],\n  imports: [C8yTranslatePipe, FormsModule, ReactiveFormsModule, PopoverModule]\n})\nexport class ConfigContextSelectorComponent implements ControlValueAccessor, OnInit {\n  private readonly fb = inject(FormBuilder);\n  private readonly destroyRef = inject(DestroyRef);\n\n  protected form!: ReturnType<typeof this.initForm>;\n\n  protected get isWidgetContext(): boolean {\n    return this.form?.get('context')?.value === 'widget';\n  }\n\n  ngOnInit(): void {\n    this.form = this.initForm();\n    this.setupValueChanges();\n  }\n\n  writeValue(value: GlobalContextDisplayMode): void {\n    if (!value) return;\n\n    const formValue: ContextConfig = {\n      context: value === GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD ? 'dashboard' : 'widget',\n      showInWidget: value === GLOBAL_CONTEXT_DISPLAY_MODE.VIEW_AND_CONFIG\n    };\n\n    this.form?.patchValue(formValue, { emitEvent: false });\n  }\n\n  registerOnChange(fn: (value: GlobalContextDisplayMode) => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    isDisabled ? this.form?.disable() : this.form?.enable();\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  private onChange: (value: GlobalContextDisplayMode) => void = () => {};\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  private onTouched: () => void = () => {};\n\n  private initForm() {\n    return this.fb.group<ContextConfig>({\n      context: 'widget',\n      showInWidget: false\n    });\n  }\n\n  private setupValueChanges(): void {\n    this.form.valueChanges\n      .pipe(\n        map(({ context, showInWidget }: ContextConfig) =>\n          context === 'dashboard'\n            ? GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD\n            : showInWidget\n              ? GLOBAL_CONTEXT_DISPLAY_MODE.VIEW_AND_CONFIG\n              : GLOBAL_CONTEXT_DISPLAY_MODE.CONFIG\n        ),\n        takeUntilDestroyed(this.destroyRef)\n      )\n      .subscribe(dateSelection => {\n        this.onChange(dateSelection);\n        this.onTouched();\n      });\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  DestroyRef,\n  effect,\n  inject,\n  input,\n  OnInit,\n  output,\n  signal,\n  untracked\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormBuilder, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { C8yTranslatePipe } from '@c8y/ngx-components';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { ConfigContextSelectorComponent } from '../features/configuration/config-context-selector';\nimport type { RefreshOption } from '../models/auto-refresh.model';\nimport { REFRESH_OPTION } from '../models/auto-refresh.model';\nimport type {\n  GlobalContextDisplayMode,\n  GlobalContextState,\n  WidgetControls\n} from '../models/global-context.model';\nimport { GLOBAL_CONTEXT_DISPLAY_MODE, GLOBAL_CONTEXT_EVENTS } from '../models/global-context.model';\nimport { GlobalContextEventService } from '../services/state/global-context-event.service';\nimport { GlobalContextConfigComponent } from './global-context-config.component';\n\n/**\n * Widget configuration component for time context settings.\n *\n * Allows widgets to either sync with dashboard-level time settings (dashboard mode)\n * or use independent time controls (widget mode). When in widget mode, displays\n * additional configuration controls for time range, aggregation, and refresh settings.\n */\n@Component({\n  selector: 'c8y-global-context-widget-config',\n  standalone: true,\n  imports: [\n    ReactiveFormsModule,\n    ConfigContextSelectorComponent,\n    GlobalContextConfigComponent,\n    C8yTranslatePipe,\n    PopoverModule\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <form [formGroup]=\"form\">\n      <fieldset class=\"c8y-fieldset\">\n        <legend>\n          {{ 'Time context' | translate }}\n          <button\n            class=\"btn-help btn-help--sm\"\n            [attr.aria-label]=\"'Help' | translate\"\n            [popover]=\"\n              'Sync with dashboard settings or set independent time controls for this widget.'\n                | translate\n            \"\n            placement=\"right\"\n            triggers=\"focus\"\n            container=\"body\"\n            type=\"button\"\n            [adaptivePosition]=\"true\"\n          ></button>\n        </legend>\n        <c8y-config-context-selector formControlName=\"displayMode\"></c8y-config-context-selector>\n      </fieldset>\n    </form>\n\n    @if (configInput()?.displayMode !== GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD) {\n      <fieldset class=\"c8y-fieldset p-l-0 p-r-0 p-t-16\">\n        <legend class=\"m-l-16\">{{ 'Widget time context' | translate }}</legend>\n        <c8y-global-context-config\n          [config]=\"_latestConfig()\"\n          [widgetControls]=\"widgetControlsInput()\"\n          [isLoading]=\"isLoadingInput()\"\n          [liveSnapshot]=\"liveSnapshot\"\n          [historySnapshot]=\"historySnapshot\"\n          (refresh)=\"refresh.emit()\"\n          (globalContextChange)=\"onGlobalContextChange($event)\"\n        ></c8y-global-context-config>\n      </fieldset>\n    }\n  `\n})\nexport class GlobalContextWidgetConfigComponent implements OnInit {\n  // Component inputs\n  configInput = input.required<GlobalContextState | null>({ alias: 'config' });\n  widgetControlsInput = input.required<WidgetControls>({ alias: 'widgetControls' });\n  isLoadingInput = input(false, { alias: 'isLoading' });\n\n  readonly displayModeChange = output<GlobalContextDisplayMode>();\n  readonly refresh = output<void>();\n  readonly globalContextChange = output<GlobalContextState>();\n\n  protected form: FormGroup;\n  readonly GLOBAL_CONTEXT_DISPLAY_MODE = GLOBAL_CONTEXT_DISPLAY_MODE;\n\n  private readonly fb = inject(FormBuilder);\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly globalContextEventService = inject(GlobalContextEventService, {\n    optional: true\n  });\n  private readonly _latestGlobalSnapshot = signal<GlobalContextState | null>(null);\n  private readonly _latestConfig = signal<GlobalContextState | null>(null);\n  private lastConfigInput: GlobalContextState | null = null;\n  private readonly liveSnapshotState = signal<GlobalContextState | null>(null);\n  private readonly historySnapshotState = signal<GlobalContextState | null>(null);\n  private readonly lastActiveMode = signal<RefreshOption>(REFRESH_OPTION.LIVE);\n\n  // Current display mode state\n  readonly displayModeSig = signal<GlobalContextDisplayMode>(GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD);\n\n  constructor() {\n    // Sync form control with incoming displayMode without triggering change events\n    effect(() => {\n      const cfg = this.configInput();\n\n      // Always ensure auto-refresh is enabled in the widget config\n      const next =\n        (cfg?.displayMode as GlobalContextDisplayMode) ?? GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD;\n      const current = this.form?.get('displayMode')?.value as GlobalContextDisplayMode;\n      if (current !== next && this.form) {\n        untracked(() => {\n          this.form.patchValue({ displayMode: next }, { emitEvent: false });\n          this.displayModeSig.set(next);\n        });\n      }\n    });\n\n    // Keep child component config in sync with input changes\n    effect(() => {\n      const cfg = this.configInput();\n      if (cfg && cfg !== this.lastConfigInput) {\n        untracked(() => {\n          this.lastConfigInput = cfg;\n          const cloned = this.cloneSnapshot(cfg) as GlobalContextState;\n          this._latestConfig.set(cloned);\n          const mode = cloned.refreshOption ?? REFRESH_OPTION.LIVE;\n          this.updateSnapshotForMode(mode, cloned);\n          this.lastActiveMode.set(mode);\n        });\n      }\n\n      if (!cfg && this.lastConfigInput) {\n        untracked(() => {\n          this.lastConfigInput = null;\n          this._latestConfig.set(null);\n        });\n      }\n    });\n  }\n\n  ngOnInit(): void {\n    this.initializeForm();\n\n    this.storeInitialStateChangeEvent();\n    this.subscribeToGlobalContextStateChangeEvents();\n    this.initializeContext();\n  }\n\n  onGlobalContextChange(newConfig: GlobalContextState): void {\n    // Update local config first to prevent feedback loop\n    const cloned = this.cloneSnapshot(newConfig) as GlobalContextState;\n    this._latestConfig.set(cloned);\n    this.lastConfigInput = null;\n    const mode = cloned.refreshOption ?? REFRESH_OPTION.LIVE;\n    this.updateSnapshotForMode(mode, cloned);\n    this.lastActiveMode.set(mode);\n    // Then emit to parent\n    this.globalContextChange.emit(newConfig);\n  }\n\n  private initializeForm(): void {\n    const initial =\n      (this.configInput()?.displayMode as GlobalContextDisplayMode) ??\n      GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD;\n    this.form = this.fb.group({\n      displayMode: initial\n    });\n\n    // Emit display mode changes to parent\n    this.form\n      .get('displayMode')\n      ?.valueChanges.pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe((mode: GlobalContextDisplayMode) => {\n        if (this.displayModeSig() !== mode) {\n          this.displayModeSig.set(mode);\n        }\n        this.displayModeChange.emit(mode);\n        // Also emit a normalized globalContextChange with a suggested context update\n        const result = this.buildContextUpdateForDisplayMode(mode, {\n          global: this._latestGlobalSnapshot(),\n          widget: this._latestConfig()\n        });\n        this.syncWidgetSnapshotAfterHydration(mode, result);\n        this.globalContextChange.emit(result.context as GlobalContextState);\n      });\n  }\n\n  private storeInitialStateChangeEvent(): void {\n    if (this.globalContextEventService) {\n      const latest = this.globalContextEventService.getLatestValue(\n        GLOBAL_CONTEXT_EVENTS.STATE_CHANGE\n      );\n      if (latest) {\n        this._latestGlobalSnapshot.set(latest);\n      }\n    }\n  }\n\n  private subscribeToGlobalContextStateChangeEvents(): void {\n    this.globalContextEventService\n      .on(GLOBAL_CONTEXT_EVENTS.STATE_CHANGE)\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe(state => this._latestGlobalSnapshot.set(state));\n  }\n\n  private initializeContext(): void {\n    const displayMode = this.form.get('displayMode').value;\n    // const configInput = this.configInput();\n\n    // If already in config mode with widget config, use it directly - don't build from snapshots\n    if (displayMode !== GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD) {\n      // Just emit the widget config as-is, effect will handle the rest\n      return;\n    }\n\n    // Otherwise build from global/widget snapshots\n    const result = this.buildContextUpdateForDisplayMode(displayMode, {\n      global: this._latestGlobalSnapshot(),\n      widget: this._latestConfig()\n    });\n\n    this.syncWidgetSnapshotAfterHydration(displayMode, result);\n    this.globalContextChange.emit(result.context as GlobalContextState);\n  }\n\n  private buildContextUpdateForDisplayMode(\n    displayMode: GlobalContextDisplayMode,\n    snapshots: {\n      global?: Partial<GlobalContextState> | null;\n      widget?: Partial<GlobalContextState> | null;\n    }\n  ): { context: Partial<GlobalContextState>; hydratedFromGlobal: boolean } {\n    const globalSnapshot = this.cloneSnapshot(snapshots.global);\n\n    if (displayMode === GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD) {\n      return {\n        context: { ...(globalSnapshot ?? {}), displayMode },\n        hydratedFromGlobal: false\n      };\n    }\n\n    const widgetSnapshot = this.cloneSnapshot(snapshots.widget ?? this._latestConfig());\n    const primaryMode = this.lastActiveMode();\n    const primarySnapshot = this.cloneSnapshot(\n      primaryMode === REFRESH_OPTION.HISTORY\n        ? this.historySnapshotState()\n        : this.liveSnapshotState()\n    );\n    const secondarySnapshot = this.cloneSnapshot(\n      primaryMode === REFRESH_OPTION.HISTORY\n        ? this.liveSnapshotState()\n        : this.historySnapshotState()\n    );\n\n    const candidate = this.isMeaningfulState(widgetSnapshot)\n      ? widgetSnapshot\n      : this.isMeaningfulState(primarySnapshot)\n        ? primarySnapshot\n        : secondarySnapshot;\n\n    if (candidate) {\n      return {\n        context: { ...candidate, displayMode },\n        hydratedFromGlobal: false\n      };\n    }\n\n    return {\n      context: { ...(globalSnapshot ?? {}), displayMode },\n      hydratedFromGlobal: true\n    };\n  }\n\n  private cloneSnapshot(\n    snapshot: Partial<GlobalContextState> | GlobalContextState | null | undefined\n  ): Partial<GlobalContextState> | null {\n    if (!snapshot) {\n      return null;\n    }\n\n    return structuredClone(snapshot);\n  }\n\n  private isMeaningfulState(\n    snapshot: Partial<GlobalContextState> | null | undefined\n  ): snapshot is Partial<GlobalContextState> {\n    if (!snapshot) {\n      return false;\n    }\n\n    const { dateTimeContext, refreshOption, refreshInterval, aggregation, isAutoRefreshEnabled } =\n      snapshot;\n\n    return (\n      !!dateTimeContext ||\n      refreshOption !== undefined ||\n      refreshInterval !== undefined ||\n      aggregation !== undefined ||\n      isAutoRefreshEnabled !== undefined\n    );\n  }\n\n  private syncWidgetSnapshotAfterHydration(\n    mode: GlobalContextDisplayMode,\n    result: { context: Partial<GlobalContextState>; hydratedFromGlobal: boolean }\n  ): void {\n    if (mode === GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD) {\n      return;\n    }\n\n    const cloned = this.cloneSnapshot(\n      result.context as GlobalContextState\n    ) as GlobalContextState | null;\n    if (!cloned) {\n      return;\n    }\n\n    this._latestConfig.set(cloned);\n    const modeToUpdate = cloned.refreshOption ?? this.lastActiveMode();\n    this.updateSnapshotForMode(modeToUpdate, cloned);\n    this.lastActiveMode.set(modeToUpdate);\n  }\n\n  private updateSnapshotForMode(mode: RefreshOption, snapshot: GlobalContextState): void {\n    const cloned = this.cloneSnapshot(snapshot) as GlobalContextState | null;\n    if (!cloned) {\n      return;\n    }\n\n    if (mode === REFRESH_OPTION.HISTORY) {\n      this.historySnapshotState.set({ ...cloned, refreshOption: REFRESH_OPTION.HISTORY });\n      return;\n    }\n\n    this.liveSnapshotState.set({\n      ...cloned,\n      refreshOption: REFRESH_OPTION.LIVE,\n      aggregation: null\n    });\n  }\n\n  get liveSnapshot(): GlobalContextState | null {\n    return this.liveSnapshotState();\n  }\n\n  get historySnapshot(): GlobalContextState | null {\n    return this.historySnapshotState();\n  }\n}\n","// Export core components\nexport * from './global-context.component';\nexport * from './global-context-inline.component';\nexport * from './global-context-config.component';\nexport * from './global-context-widget-config.component';\nexport * from './widget-inline/inline-link-controls.component';\n","// Export components\nexport * from './time-range-picker/date-time-context-picker.component';\nexport * from './time-range-display/time-range-display.component';\nexport * from './interval-picker/interval-picker.component';\n","import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  forwardRef,\n  inject\n} from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { C8yTranslatePipe } from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\n\n@Component({\n  selector: 'c8y-realtime-control',\n  templateUrl: './realtime-control.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => RealtimeControlComponent),\n      multi: true\n    }\n  ],\n  standalone: true,\n  imports: [TooltipModule, C8yTranslatePipe, FormsModule]\n})\nexport class RealtimeControlComponent implements ControlValueAccessor {\n  readonly disableRealtimeLabel = gettext('Disable realtime');\n  readonly enableRealtimeLabel = gettext('Enable realtime');\n\n  isActive: boolean;\n  touched = false;\n  disabled = false;\n\n  private cdr = inject(ChangeDetectorRef);\n\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  onChange = _ => {};\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  onTouched = () => {};\n\n  writeValue(value: boolean): void {\n    this.isActive = value;\n    this.cdr.markForCheck();\n  }\n\n  registerOnChange(fn: any): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(onTouched: any): void {\n    this.onTouched = onTouched;\n  }\n\n  markAsTouched(): void {\n    if (!this.touched) {\n      this.onTouched();\n      this.touched = true;\n    }\n  }\n\n  setDisabledState(disabled: boolean): void {\n    this.disabled = disabled;\n  }\n\n  onButtonClick(): void {\n    const newValue = !this.isActive;\n    this.onChange(newValue);\n  }\n}\n","@let buttonLabel = (isActive ? disableRealtimeLabel : enableRealtimeLabel) | translate;\n\n<button\n  class=\"btn btn-icon c8y-realtime\"\n  [attr.aria-label]=\"buttonLabel\"\n  [tooltip]=\"tooltipTpl\"\n  placement=\"top\"\n  container=\"body\"\n  type=\"button\"\n  data-cy=\"global-context--realtime-toggle\"\n  (click)=\"onButtonClick()\"\n  [adaptivePosition]=\"false\"\n  [delay]=\"500\"\n  [disabled]=\"disabled\"\n>\n  <span\n    class=\"c8y-pulse m-0\"\n    [class.active]=\"isActive\"\n    [class.inactive]=\"!isActive\"\n  ></span>\n</button>\n<ng-template #tooltipTpl>\n  {{ buttonLabel }}\n</ng-template>\n","// Export components\nexport * from './auto-refresh/auto-refresh-control.component';\nexport * from './realtime-control/realtime-control.component';\n","// Export components\nexport * from './config-context-selector/config-context-selector.component';\nexport * from './configuration-controls/configuration-controls.component';\nexport * from './configuration-collapse/configuration-collapse.component';\nexport * from './live-mode-configuration-controls/live-mode-configuration-controls.component';\nexport * from './history-mode-configuration-controls/history-mode-configuration-controls.component';\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  DestroyRef,\n  inject,\n  Input,\n  OnInit\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { C8yTranslatePipe, IconDirective } from '@c8y/ngx-components';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { BehaviorSubject, debounceTime, skip, take, tap } from 'rxjs';\n\nimport { AsyncPipe } from '@angular/common';\nimport { AggregationPickerComponent } from '../../features/aggregation/aggregation-picker';\nimport { AutoRefreshControlComponent } from '../../features/refresh/auto-refresh';\nimport { DateTimeContextPickerComponent } from '../../features/time-context/time-range-picker/date-time-context-picker.component';\nimport { REFRESH_OPTION } from '../../models/auto-refresh.model';\nimport {\n  GLOBAL_CONTEXT_DISPLAY_MODE,\n  GlobalContextSettings,\n  GlobalContextState,\n  WidgetControls\n} from '../../models/global-context.model';\nimport { WidgetControlService } from '../../services/domain/widget-control.service';\nimport { GlobalContextFormService } from '../../services/state/global-context-form.service';\n\n@Component({\n  standalone: true,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    AsyncPipe,\n    IconDirective,\n    ReactiveFormsModule,\n    DateTimeContextPickerComponent,\n    AggregationPickerComponent,\n    AutoRefreshControlComponent,\n    TooltipModule,\n    C8yTranslatePipe\n  ],\n  selector: 'c8y-preview-controls',\n  templateUrl: './preview-controls.component.html',\n  styles: [\n    `\n      :host {\n        position: relative;\n        display: block;\n        cursor: not-allowed;\n      }\n\n      /* Block all interactions with form controls */\n      :host form {\n        position: relative;\n        pointer-events: none;\n        user-select: none;\n      }\n\n      /* Add subtle visual indication of non-interactive state */\n      :host form::after {\n        content: '';\n        position: absolute;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        background: rgba(255, 255, 255, 0.05);\n        z-index: 1;\n        pointer-events: none;\n      }\n\n      /* Ensure buttons and inputs look disabled */\n      :host form button,\n      :host form input,\n      :host form select,\n      :host form .dropdown-toggle,\n      :host form .btn {\n        cursor: not-allowed !important;\n        opacity: 0.85;\n      }\n\n      /* Ensure all child interactive elements are non-interactive */\n      :host form * {\n        pointer-events: none !important;\n        user-select: none !important;\n      }\n    `\n  ]\n})\nexport class PreviewControlsComponent implements OnInit {\n  // Constants\n  readonly GLOBAL_CONTEXT_DISPLAY_MODE = GLOBAL_CONTEXT_DISPLAY_MODE;\n  readonly REFRESH_OPTION = REFRESH_OPTION;\n\n  // Form configuration\n  form!: FormGroup;\n\n  // State subjects\n  private config$ = new BehaviorSubject<Partial<GlobalContextState> | null>(null);\n  readonly inlineControlsSettings$ = new BehaviorSubject<Partial<GlobalContextSettings>>({});\n  // UI state\n  shouldDisableCustomInterval = { isDisabled: false, msg: null };\n\n  // Injected dependencies\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly globalContextFormService = inject(GlobalContextFormService);\n  private readonly widgetControlService = inject(WidgetControlService);\n\n  @Input() widgetControls: WidgetControls;\n\n  private _currentConfig: Partial<GlobalContextState> = {};\n  @Input()\n  set config(value: GlobalContextState) {\n    this._currentConfig = { ...this._currentConfig, ...value };\n    this.config$.next(this._currentConfig);\n  }\n  get config(): Partial<GlobalContextState> | null {\n    return this.config$.value;\n  }\n\n  ngOnInit(): void {\n    this.initializeComponent();\n    this.setupConfigChangeHandling();\n  }\n\n  /**\n   * Returns the current inline controls settings\n   */\n  getInlineControlsSettings(): Partial<GlobalContextSettings> {\n    return this.inlineControlsSettings$.value;\n  }\n\n  /**\n   * Updates the inline controls settings\n   */\n  setInlineControlsSettings(settings: Partial<GlobalContextSettings>): void {\n    this.inlineControlsSettings$.next(settings);\n  }\n\n  /**\n   * Updates visibility of controls based on display mode and widget type\n   */\n  setControlsVisibility(context?: GlobalContextState): void {\n    if (!this.config?.displayMode || !this.widgetControls) {\n      return;\n    }\n    const displayMode = context?.displayMode ?? this.config.displayMode;\n\n    const refreshOption =\n      context?.refreshOption ?? (this.config.refreshOption || REFRESH_OPTION.LIVE);\n\n    const { settings } = this.widgetControlService.resolveInlineControlSettings(\n      this.widgetControls,\n      displayMode,\n      refreshOption\n    );\n    this.setInlineControlsSettings(settings);\n  }\n\n  /**\n   * Main initialization logic for the component\n   */\n  private initializeComponent(): void {\n    this.config$\n      .pipe(\n        take(1),\n        tap(() => this.setupComponentState())\n      )\n      .subscribe();\n  }\n\n  /**\n   * Sets up the initial component state\n   */\n  private setupComponentState(): void {\n    this.setDefaultDisplayMode();\n    this.initializeForm();\n    this.setControlsVisibility(this._currentConfig);\n  }\n\n  /**\n   * Sets up handling for config changes\n   */\n  private setupConfigChangeHandling(): void {\n    this.config$\n      .pipe(\n        takeUntilDestroyed(this.destroyRef),\n        skip(1), // Skip the initial emission\n        debounceTime(100),\n        tap(config => {\n          if (!config) {\n            return;\n          }\n          this.setControlsVisibility(config);\n\n          // Update form values with new config\n          if (this.form) {\n            this.form.patchValue(config, { emitEvent: false });\n          }\n        })\n      )\n      .subscribe();\n  }\n\n  /**\n   * Builds the reactive form\n   */\n  private initializeForm(): void {\n    if (this.form) {\n      return;\n    }\n    this.form = this.globalContextFormService.buildForm(this.config || {});\n  }\n\n  /**\n   * Sets default display mode if not provided\n   */\n  private setDefaultDisplayMode(): void {\n    if (!this.config || 'displayMode' in this.config) {\n      return;\n    }\n    this.config.displayMode = GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD;\n  }\n}\n","<!-- Main Controls -->\n@let isConfigMode = config?.displayMode === GLOBAL_CONTEXT_DISPLAY_MODE.CONFIG;\n@let settings = inlineControlsSettings$ | async;\n\n@if (form && settings) {\n  <form\n    class=\"d-flex gap-16 p-l-16 p-r-16 p-b-8 inner-scroll\"\n    [formGroup]=\"form\"\n  >\n    <!-- Control Group Container -->\n    <div class=\"input-group w-auto\">\n      <!-- Aggregation Picker -->\n      @if (settings.showAggregation) {\n        <c8y-aggregation-picker\n          formControlName=\"aggregation\"\n          [resetToDefault]=\"true\"\n        ></c8y-aggregation-picker>\n      }\n\n      <!-- Auto Refresh Controls -->\n      @if (settings.showAutoRefresh) {\n        <!-- Auto Refresh Toggle -->\n        <c8y-auto-refresh-control\n          [isLoading]=\"isLoading\"\n          [disableCounter]=\"shouldDisableCounter\"\n          formControlName=\"isAutoRefreshEnabled\"\n          [autoRefreshSeconds]=\"form.get('refreshInterval')?.value\"\n        ></c8y-auto-refresh-control>\n      }\n\n      @if (settings.showTimeContext) {\n        @let isHistoryMode = form.get('refreshOption')?.value === REFRESH_OPTION.HISTORY;\n        @let configValue =\n          isHistoryMode\n            ? {\n                showDateTo: true,\n                showDateFrom: true\n              }\n            : {\n                showDateTo: false,\n                showDateFrom: true\n              };\n        <c8y-date-time-context-picker\n          style=\"margin-left: -1px\"\n          formControlName=\"dateTimeContext\"\n          [shouldDisableInterval]=\"shouldDisableCustomInterval\"\n          [config]=\"configValue\"\n        ></c8y-date-time-context-picker>\n      }\n\n      <!-- Manual Refresh Button -->\n      @if (settings.showRefresh) {\n        <div class=\"input-group-btn\">\n          <button\n            class=\"btn btn-default\"\n            [attr.aria-label]=\"'Refresh' | translate\"\n            [tooltip]=\"'Refresh' | translate\"\n            placement=\"bottom\"\n            type=\"button\"\n            [adaptivePosition]=\"false\"\n            [delay]=\"500\"\n            [disabled]=\"isLoading\"\n          >\n            <i\n              [class.icon-spin]=\"isLoading\"\n              [c8yIcon]=\"'refresh'\"\n            ></i>\n          </button>\n        </div>\n      }\n    </div>\n  </form>\n}\n","// Export shared components\nexport * from './context-controls/context-controls.component';\nexport * from './preview-controls/preview-controls.component';\n","import { REFRESH_OPTION } from '../../models/auto-refresh.model';\nimport { GLOBAL_CONTEXT_DISPLAY_MODE, WidgetControls } from '../../models/global-context.model';\n\nexport const DEFAULT_WIDGET_TEMPLATE: WidgetControls = {\n  supports: ['refreshOption', 'displayMode'],\n  configSettings: {\n    [GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD]: {\n      [REFRESH_OPTION.LIVE]: {},\n      [REFRESH_OPTION.HISTORY]: {}\n    },\n    [GLOBAL_CONTEXT_DISPLAY_MODE.CONFIG]: {\n      [REFRESH_OPTION.LIVE]: {\n        showTimeContext: true,\n        showAutoRefresh: true,\n        showRefreshInterval: true\n      },\n      [REFRESH_OPTION.HISTORY]: { showTimeContext: true }\n    },\n    [GLOBAL_CONTEXT_DISPLAY_MODE.VIEW_AND_CONFIG]: {\n      [REFRESH_OPTION.LIVE]: {\n        showTimeContext: true,\n        showAutoRefresh: true,\n        showRefreshInterval: true\n      },\n      [REFRESH_OPTION.HISTORY]: { showTimeContext: true }\n    }\n  },\n  settings: {\n    [GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD]: {\n      [REFRESH_OPTION.LIVE]: {\n        showAutoRefresh: false\n      },\n      [REFRESH_OPTION.HISTORY]: { showTimeContext: false }\n    },\n    [GLOBAL_CONTEXT_DISPLAY_MODE.CONFIG]: {\n      [REFRESH_OPTION.LIVE]: {\n        showAutoRefresh: true\n      },\n      [REFRESH_OPTION.HISTORY]: {\n        showTimeContext: true\n      }\n    },\n    [GLOBAL_CONTEXT_DISPLAY_MODE.VIEW_AND_CONFIG]: {\n      [REFRESH_OPTION.LIVE]: {\n        showAutoRefresh: true,\n        showRefresh: true,\n        showRefreshInterval: true\n      },\n      [REFRESH_OPTION.HISTORY]: {\n        showTimeContext: true\n      }\n    }\n  },\n  defaultLinks: {\n    [GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD]: {\n      [REFRESH_OPTION.LIVE]: { isAutoRefreshEnabled: true, dateTimeContext: true },\n      [REFRESH_OPTION.HISTORY]: { dateTimeContext: true }\n    },\n    [GLOBAL_CONTEXT_DISPLAY_MODE.CONFIG]: {},\n    [GLOBAL_CONTEXT_DISPLAY_MODE.VIEW_AND_CONFIG]: {}\n  }\n};\n","import { cloneDeep } from 'lodash-es';\nimport { REFRESH_OPTION, RefreshOption } from '../../models/auto-refresh.model';\nimport { LinkStatesMap } from '../../models/control-flow.model';\nimport {\n  GLOBAL_CONTEXT_DISPLAY_MODE,\n  GlobalContextSettings,\n  GlobalContextState,\n  GlobalContextKeys,\n  WidgetControls\n} from '../../models/global-context.model';\nimport { DEFAULT_WIDGET_TEMPLATE } from './default-widget-template';\n\nexport type WidgetFeature =\n  | 'liveRefresh'\n  | 'refreshInterval'\n  | 'timeRange'\n  | 'dataAggregation'\n  | 'displayMode'\n  | 'refreshOption'\n  // eslint-disable-next-line @typescript-eslint/ban-types\n  | (string & {}); // Allows custom strings while preserving autocomplete for known values\n\n/**\n * Maps user-friendly feature names to their corresponding GlobalContextState property names.\n *\n * This allows developers to use intuitive names like 'liveRefresh' in widget control definitions\n * instead of the actual internal property names like 'isAutoRefreshEnabled'.\n *\n * @example\n * ```ts\n * defineWidgetControls({ supports: ['liveRefresh'] });\n * // Internally maps to 'isAutoRefreshEnabled'\n * ```\n */\nexport const WIDGET_FEATURE_MAP: Record<string, string> = {\n  liveRefresh: 'isAutoRefreshEnabled',\n  refreshInterval: 'refreshInterval',\n  timeRange: 'dateTimeContext',\n  dataAggregation: 'aggregation',\n  displayMode: 'displayMode',\n  refreshOption: 'refreshOption'\n};\n\n/**\n * Hierarchical configuration for widget control visibility and behavior across different contexts.\n *\n * This interface defines control settings organized by:\n * - Display mode (dashboard/config/viewAndConfig)\n * - Refresh option (live/history)\n * - View context (inline/configuration)\n *\n * Each level can specify which controls to show/hide and their default link states to the\n * global context. The structure mirrors how widgets are rendered in different scenarios.\n *\n * @example\n * ```ts\n * const settings: WidgetControlSettings = {\n *   dashboard: {\n *     live: {\n *       inline: { showRefresh: true, showRefreshInterval: false }\n *     }\n *   },\n *   defaultLinks: {\n *     dashboard: {\n *       live: { dateTimeContext: true, aggregation: true }\n *     }\n *   }\n * };\n * ```\n */\nexport interface WidgetControlSettings {\n  dashboard?: {\n    live?: {\n      inline?: Partial<GlobalContextSettings>;\n      configuration?: Partial<GlobalContextSettings>;\n    };\n    history?: {\n      inline?: Partial<GlobalContextSettings>;\n      configuration?: Partial<GlobalContextSettings>;\n    };\n  };\n  config?: {\n    live?: {\n      inline?: Partial<GlobalContextSettings>;\n      configuration?: Partial<GlobalContextSettings>;\n    };\n    history?: {\n      inline?: Partial<GlobalContextSettings>;\n      configuration?: Partial<GlobalContextSettings>;\n    };\n  };\n  viewAndConfig?: {\n    live?: {\n      inline?: Partial<GlobalContextSettings>;\n      configuration?: Partial<GlobalContextSettings>;\n    };\n    history?: {\n      inline?: Partial<GlobalContextSettings>;\n      configuration?: Partial<GlobalContextSettings>;\n    };\n  };\n\n  /**\n   * Defines which widget config properties should be linked to global context by default.\n   * When a property is linked (true), changes to the global context will automatically\n   * update the widget's corresponding configuration value.\n   */\n  defaultLinks?: {\n    dashboard?: {\n      live?: LinkStatesMap;\n      history?: LinkStatesMap;\n    };\n    config?: {\n      live?: LinkStatesMap;\n      history?: LinkStatesMap;\n    };\n    viewAndConfig?: {\n      live?: LinkStatesMap;\n      history?: LinkStatesMap;\n    };\n  };\n}\n\n/**\n * Handler function for dynamic widget control behavior based on widget state.\n *\n * Allows custom logic to transform control settings and link states based on the current\n * widget configuration. Handlers receive the widget state and return modified control\n * settings that determine which controls are visible and how they behave.\n *\n * Use cases:\n * - Conditionally show/hide controls based on widget config\n * - Modify default link states based on widget data\n * - Implement widget-specific control behavior\n *\n * @example\n * ```ts\n * const handler: WidgetControlHandler = {\n *   handler: ({ config }) => {\n *     // Hide aggregation control if widget has no series configured\n *     const showAggregation = config?.datapoints?.length > 0;\n *     return {\n *       inlineControlSettings: { !showAggregation },\n *       dashboardControlSettings: { showAggregation },\n *       links: { aggregation: showAggregation }\n *     };\n *   }\n * };\n * ```\n */\nexport interface WidgetControlHandler {\n  handler: (state: {\n    config?: GlobalContextState;\n    inlineControlSettings?: Partial<GlobalContextSettings>;\n    dashboardControlSettings?: Partial<GlobalContextSettings>;\n    currentLinks?: LinkStatesMap;\n  }) => {\n    inlineControlSettings: Partial<GlobalContextSettings>;\n    dashboardControlSettings: Partial<GlobalContextSettings>;\n    links: Partial<LinkStatesMap>;\n    options?: { noAutoRefreshCounter?: boolean };\n  };\n}\n\n/**\n * Creates a comprehensive widget controls configuration for global context integration.\n *\n * This factory function generates the complete control structure that determines how a widget\n * interacts with the global context (time range, aggregation, auto-refresh). It handles:\n * - Feature support declaration\n * - Control visibility across different display modes and refresh options\n * - Default linking behavior between widget and global context\n * - Dynamic control behavior through custom handlers\n *\n * @param config - Configuration object for widget controls\n * @param config.name - Optional identifier for debugging and documentation\n * @param config.extends - Base WidgetControls to extend from (inherits all features and settings)\n * @param config.supports - Array of features this widget supports (e.g., ['timeRange', 'dataAggregation'])\n *   When extending, supports are merged with base supports\n * @param config.supportedModes - Optional array of supported refresh modes (live, history).\n *   Restricts which modes are available in the configuration UI. Defaults to both modes if not specified.\n * @param config.settings - Hierarchical control settings organized by display mode, refresh option, and view context\n * @param config.handlers - Named functions for dynamic control behavior based on widget state\n * @param config.options - Additional options like noAutoRefreshCounter\n *\n * @returns Complete WidgetControls object ready for use in widget definitions\n *\n * @example\n * ```ts\n * // Simple widget with time range support\n * const controls = defineWidgetControls({\n *   name: 'simple-widget',\n *   supports: ['timeRange'],\n *   settings: {\n *     dashboard: {\n *       live: {\n *         inline: { showRefresh: true }\n *       }\n *     }\n *   }\n * });\n *\n * // Widget that only supports live mode\n * const liveOnlyControls = defineWidgetControls({\n *   name: 'realtime-widget',\n *   supports: ['timeRange', 'liveRefresh'],\n *   supportedModes: [REFRESH_OPTION.LIVE],\n *   settings: {\n *     dashboard: {\n *       live: {\n *         inline: { showRefresh: true, showRefreshInterval: true }\n *       }\n *     }\n *   }\n * });\n *\n * // Advanced widget extending default with custom handler\n * const advancedControls = defineWidgetControls({\n *   name: 'chart-widget',\n *   extends: DEFAULT_WIDGET_TEMPLATE,\n *   supports: ['timeRange', 'dataAggregation'],\n *   handlers: {\n *     onConfigChange: {\n *       handler: ({ config }) => ({\n *         inlineControlSettings: { showAggregation: config?.series?.length > 0 },\n *         dashboardControlSettings: {},\n *         links: {}\n *       })\n *     }\n *   }\n * });\n * ```\n */\nexport function defineWidgetControls(config: {\n  name?: string;\n  extends?: WidgetControls;\n  supports?: WidgetFeature[];\n  supportedModes?: RefreshOption[];\n  settings?: WidgetControlSettings;\n  handlers?: Record<string, WidgetControlHandler>;\n  options?: { noAutoRefreshCounter?: boolean };\n}): WidgetControls {\n  const baseControls = config.extends\n    ? cloneDeep(config.extends)\n    : cloneDeep(DEFAULT_WIDGET_TEMPLATE);\n\n  let mappedSupports: GlobalContextKeys;\n\n  if (config.supports) {\n    // First convert to a Set to handle potential duplicates\n    const supportsSet = new Set(config.supports);\n\n    // If liveRefresh is included, automatically add refreshInterval\n    if (supportsSet.has('liveRefresh') && !supportsSet.has('refreshInterval')) {\n      supportsSet.add('refreshInterval');\n    }\n\n    mappedSupports = Array.from(supportsSet).map(featureName => {\n      return WIDGET_FEATURE_MAP[featureName as string] || featureName;\n    }) as GlobalContextKeys;\n  } else {\n    mappedSupports = baseControls.supports;\n  }\n\n  const controls: WidgetControls = {\n    ...baseControls,\n    // When extending, merge the supports arrays instead of replacing\n    supports: config.extends\n      ? [...new Set([...baseControls.supports, ...mappedSupports])]\n      : mappedSupports,\n    supportedModes: config.supportedModes || baseControls.supportedModes,\n    options: config.options || baseControls.options,\n    configSettings: cloneDeep(baseControls.configSettings),\n    settings: cloneDeep(baseControls.settings),\n    defaultLinks: cloneDeep(baseControls.defaultLinks || {}),\n    stateHandlers: {}\n  };\n\n  if (config.settings) {\n    applySettings(controls, config.settings);\n  }\n\n  if (config.handlers) {\n    controls.stateHandlers = processHandlers(config.handlers);\n  }\n\n  return controls;\n}\n\n/**\n * Transforms and applies hierarchical settings to the widget controls structure.\n *\n * Takes the simplified WidgetControlSettings format and distributes the configuration\n * across the complete WidgetControls structure, populating both inline (settings) and\n * configuration panel (configSettings) branches for each display mode and refresh option.\n *\n * This function also processes defaultLinks and ensures they are properly distributed\n * to match the control settings hierarchy.\n *\n * @param controls - The WidgetControls object to modify (mutated in place)\n * @param settings - The simplified settings configuration to apply\n *\n */\nfunction applySettings(controls: WidgetControls, settings: WidgetControlSettings): void {\n  const modeMap = {\n    dashboard: GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD,\n    config: GLOBAL_CONTEXT_DISPLAY_MODE.CONFIG,\n    viewAndConfig: GLOBAL_CONTEXT_DISPLAY_MODE.VIEW_AND_CONFIG\n  };\n\n  for (const [settingsKey, modeValue] of Object.entries(modeMap)) {\n    const modeSettings = settings[settingsKey as keyof WidgetControlSettings];\n    if (!modeSettings) continue;\n\n    if (modeSettings['live']) {\n      if (!controls.settings[modeValue]) controls.settings[modeValue] = {};\n      if (!controls.settings[modeValue][REFRESH_OPTION.LIVE]) {\n        controls.settings[modeValue][REFRESH_OPTION.LIVE] = {};\n      }\n      if (!controls.configSettings[modeValue]) controls.configSettings[modeValue] = {};\n      if (!controls.configSettings[modeValue][REFRESH_OPTION.LIVE]) {\n        controls.configSettings[modeValue][REFRESH_OPTION.LIVE] = {};\n      }\n\n      if (modeSettings['live'].inline) {\n        controls.settings[modeValue][REFRESH_OPTION.LIVE] = {\n          ...modeSettings['live'].inline\n        };\n      }\n\n      if (modeSettings['live'].configuration) {\n        controls.configSettings[modeValue][REFRESH_OPTION.LIVE] = {\n          ...modeSettings['live'].configuration\n        };\n      }\n    }\n\n    if (modeSettings['history']) {\n      if (!controls.settings[modeValue]) controls.settings[modeValue] = {};\n      if (!controls.settings[modeValue][REFRESH_OPTION.HISTORY]) {\n        controls.settings[modeValue][REFRESH_OPTION.HISTORY] = {};\n      }\n      if (!controls.configSettings[modeValue]) controls.configSettings[modeValue] = {};\n      if (!controls.configSettings[modeValue][REFRESH_OPTION.HISTORY]) {\n        controls.configSettings[modeValue][REFRESH_OPTION.HISTORY] = {};\n      }\n\n      if (modeSettings['history'].inline) {\n        controls.settings[modeValue][REFRESH_OPTION.HISTORY] = {\n          ...modeSettings['history'].inline\n        };\n      }\n\n      if (modeSettings['history'].configuration) {\n        controls.configSettings[modeValue][REFRESH_OPTION.HISTORY] = {\n          ...modeSettings['history'].configuration\n        };\n      }\n    }\n  }\n\n  if (settings.defaultLinks) {\n    if (!controls.defaultLinks) controls.defaultLinks = {};\n\n    for (const [settingsKey, modeValue] of Object.entries(modeMap)) {\n      const modeLinks = settings.defaultLinks[settingsKey as keyof typeof settings.defaultLinks];\n      if (!modeLinks) continue;\n\n      if (!controls.defaultLinks[modeValue]) controls.defaultLinks[modeValue] = {};\n\n      if (modeLinks['live']) {\n        controls.defaultLinks[modeValue][REFRESH_OPTION.LIVE] = {\n          ...modeLinks['live']\n        };\n      }\n\n      if (modeLinks['history']) {\n        controls.defaultLinks[modeValue][REFRESH_OPTION.HISTORY] = {\n          ...modeLinks['history']\n        };\n      }\n    }\n  }\n}\n\n/**\n * Wraps user-defined handlers into the stateHandlers format expected by WidgetControls.\n *\n * This function transforms the simplified WidgetControlHandler format into the internal\n * stateHandlers structure. Each handler receives the current widget state and returns\n * modified control settings and link states.\n *\n * The wrapper ensures handlers are always invoked (even without widget state) and properly\n * propagates the widget state to the handler function for decision-making.\n *\n * @param handlers - Map of handler names to WidgetControlHandler definitions\n * @returns Map of handler names to wrapped functions compatible with WidgetControls.stateHandlers\n *\n */\nfunction processHandlers(\n  handlers: Record<string, WidgetControlHandler>\n): WidgetControls['stateHandlers'] {\n  const stateHandlers: WidgetControls['stateHandlers'] = {};\n\n  for (const [name, handler] of Object.entries(handlers)) {\n    stateHandlers[name] = (widgetState = {}) => {\n      if (widgetState?.config) {\n        return handler.handler(widgetState);\n      }\n\n      return handler.handler({});\n    };\n  }\n\n  return stateHandlers;\n}\n","import { REFRESH_OPTION } from '../../models/auto-refresh.model';\nimport { GLOBAL_CONTEXT_DISPLAY_MODE, WidgetState } from '../../models/global-context.model';\n\n/**\n * Type alias for handler state parameter used in guards\n * Using WidgetState since GuardState is a subset of it\n */\nexport type GuardState = WidgetState;\n\n/**\n * Guard functions for widget control handlers.\n * These functions help determine conditions for when handlers should execute or return early.\n */\n\n/**\n * Check if the current display mode is dashboard\n */\nexport function isDashboard(state: GuardState): boolean {\n  return state.config?.displayMode === GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD;\n}\n\n/**\n * Check if the current display mode is config\n */\nexport function isConfig(state: GuardState): boolean {\n  return state.config?.displayMode === GLOBAL_CONTEXT_DISPLAY_MODE.CONFIG;\n}\n\n/**\n * Check if the current display mode is view and config\n */\nexport function isViewAndConfig(state: GuardState): boolean {\n  return state.config?.displayMode === GLOBAL_CONTEXT_DISPLAY_MODE.VIEW_AND_CONFIG;\n}\n\n/**\n * Check if the current refresh option is history\n */\nexport function isHistory(state: GuardState): boolean {\n  return state.config?.refreshOption === REFRESH_OPTION.HISTORY;\n}\n\n/**\n * Check if the current refresh option is live\n */\nexport function isLive(state: GuardState): boolean {\n  return state.config?.refreshOption === REFRESH_OPTION.LIVE;\n}\n\n/**\n * Check if dateTimeContext is linked\n */\nexport function isDateTimeContextLinked(state: GuardState): boolean {\n  return state.currentLinks?.dateTimeContext === true;\n}\n\n/**\n * Check if dateTimeContext is unlinked\n */\nexport function isDateTimeContextUnlinked(state: GuardState): boolean {\n  return state.currentLinks?.dateTimeContext === false;\n}\n\n/**\n * Check if aggregation is linked\n */\nexport function isAggregationLinked(state: GuardState): boolean {\n  return state.currentLinks?.aggregation === true;\n}\n\n/**\n * Check if aggregation is unlinked\n */\nexport function isAggregationUnlinked(state: GuardState): boolean {\n  return state.currentLinks?.aggregation === false;\n}\n\n/**\n * Check if auto-refresh is enabled (linked)\n */\nexport function isAutoRefreshEnabled(state: GuardState): boolean {\n  return state.currentLinks?.isAutoRefreshEnabled === true;\n}\n\n/**\n * Check if auto-refresh is disabled (unlinked)\n */\nexport function isAutoRefreshDisabled(state: GuardState): boolean {\n  return state.currentLinks?.isAutoRefreshEnabled === false;\n}\n\n/**\n * Namespace for all guard functions\n */\nexport const guards = {\n  isDashboard,\n  isConfig,\n  isViewAndConfig,\n  isHistory,\n  isLive,\n  isDateTimeContextLinked,\n  isDateTimeContextUnlinked,\n  isAggregationLinked,\n  isAggregationUnlinked,\n  isAutoRefreshEnabled,\n  isAutoRefreshDisabled\n} as const;\n","import { LinkStatesMap } from '../../models/control-flow.model';\nimport {\n  GlobalContextSettings,\n  WidgetState,\n  WidgetStateHandlerResult\n} from '../../models/global-context.model';\nimport { guards } from './guards';\n\n/**\n * Updates both inline and dashboard control settings simultaneously.\n *\n * @param state - Current widget state containing existing settings\n * @param inlineUpdates - Settings to apply to inline display mode\n * @param dashboardUpdates - Settings to apply to dashboard display mode\n * @returns Updated inline and dashboard control settings\n */\nexport function updateBothSettings(\n  state: WidgetState,\n  inlineUpdates: Partial<GlobalContextSettings>,\n  dashboardUpdates: Partial<GlobalContextSettings>\n): Pick<WidgetStateHandlerResult, 'inlineControlSettings' | 'dashboardControlSettings'> {\n  return {\n    inlineControlSettings: {\n      ...state.inlineControlSettings,\n      ...inlineUpdates\n    },\n    dashboardControlSettings: {\n      ...state.dashboardControlSettings,\n      ...dashboardUpdates\n    }\n  };\n}\n\n/**\n * Creates a standardized result object for widget state handler responses.\n *\n * @param inlineSettings - Settings for inline display mode\n * @param dashboardSettings - Settings for dashboard display mode\n * @param links - Optional link state mappings for control synchronization\n * @param options - Optional configuration like noAutoRefreshCounter\n * @returns Standardized widget state handler result\n */\nexport function createResult(\n  inlineSettings: Partial<GlobalContextSettings>,\n  dashboardSettings: Partial<GlobalContextSettings>,\n  links: Partial<LinkStatesMap> = {},\n  options?: Record<string, unknown>\n): WidgetStateHandlerResult {\n  return {\n    inlineControlSettings: inlineSettings,\n    dashboardControlSettings: dashboardSettings,\n    links,\n    options\n  };\n}\n\n/**\n * Sets auto-refresh link state for dashboard display mode.\n *\n * @param state - Current widget state\n * @param enabled - Whether auto-refresh should be linked to global context\n * @returns Updated link states (empty object for non-dashboard modes)\n */\nexport function setAutoRefreshLinks(state: WidgetState, enabled: boolean): Partial<LinkStatesMap> {\n  // Only dashboard mode supports auto-refresh linking\n  if (!guards.isDashboard(state)) {\n    return {};\n  }\n  return {\n    ...state.currentLinks,\n    isAutoRefreshEnabled: enabled\n  };\n}\n\n/**\n * Sets auto-refresh control visibility and link state based on display mode.\n *\n * Implements inverse visibility pattern: auto-refresh is shown in dashboard mode\n * (where it can be linked) and hidden in inline mode (where widgets handle it directly).\n *\n * @param state - Current widget state\n * @param showInDashboard - Whether to show auto-refresh control in dashboard mode (inverted for inline)\n * @returns Complete widget state handler result with settings and links\n */\nexport function setAutoRefreshControlsVisibility(\n  state: WidgetState,\n  showInDashboard: boolean\n): WidgetStateHandlerResult {\n  const settings = updateBothSettings(\n    state,\n    {\n      showAutoRefresh: !showInDashboard\n    },\n    {\n      showAutoRefresh: showInDashboard\n    }\n  );\n\n  return createResult(\n    settings.inlineControlSettings,\n    settings.dashboardControlSettings,\n    setAutoRefreshLinks(state, showInDashboard)\n  );\n}\n","import { cloneDeep, merge } from 'lodash-es';\n\nimport { REFRESH_OPTION } from '../../models/auto-refresh.model';\nimport {\n  GLOBAL_CONTEXT_DISPLAY_MODE,\n  type GlobalContextKeys,\n  type WidgetControls,\n  type WidgetState\n} from '../../models/global-context.model';\nimport { guards } from './guards';\nimport {\n  createResult,\n  setAutoRefreshControlsVisibility,\n  updateBothSettings\n} from './update-helpers';\n\nexport type PartialWidgetControls = Partial<WidgetControls> & { supports?: GlobalContextKeys };\n\n/**\n * Baseline control template used by most widgets. Mirrors the alarm list\n * widget behaviour and serves as the foundation for additional presets.\n *\n * @returns Partial widget controls describing the baseline template.\n */\nexport function buildBaselineControls(): PartialWidgetControls {\n  return {\n    supports: [\n      'refreshOption',\n      'displayMode',\n      'dateTimeContext',\n      'isAutoRefreshEnabled',\n      'refreshInterval'\n    ] as GlobalContextKeys,\n    settings: {\n      [GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD]: {\n        [REFRESH_OPTION.LIVE]: {\n          showAutoRefresh: true,\n          showTimeContext: true,\n          showRefreshInterval: true\n        },\n        [REFRESH_OPTION.HISTORY]: {\n          showTimeContext: true\n        }\n      },\n      [GLOBAL_CONTEXT_DISPLAY_MODE.CONFIG]: {\n        [REFRESH_OPTION.LIVE]: {\n          showAutoRefresh: true,\n          showTimeContext: false,\n          showRefreshInterval: true\n        },\n        [REFRESH_OPTION.HISTORY]: {\n          showRefresh: true,\n          showTimeContext: false\n        }\n      },\n      [GLOBAL_CONTEXT_DISPLAY_MODE.VIEW_AND_CONFIG]: {\n        [REFRESH_OPTION.LIVE]: {\n          showAutoRefresh: true,\n          showRefreshInterval: true,\n          showTimeContext: true\n        },\n        [REFRESH_OPTION.HISTORY]: {\n          showTimeContext: true\n        }\n      }\n    },\n    configSettings: {\n      [GLOBAL_CONTEXT_DISPLAY_MODE.CONFIG]: {\n        [REFRESH_OPTION.LIVE]: {\n          showAutoRefresh: true,\n          showRefreshInterval: true,\n          showTimeContext: true\n        },\n        [REFRESH_OPTION.HISTORY]: {\n          showTimeContext: true,\n          showAggregation: false\n        }\n      },\n      [GLOBAL_CONTEXT_DISPLAY_MODE.VIEW_AND_CONFIG]: {\n        [REFRESH_OPTION.LIVE]: {\n          showAutoRefresh: true,\n          showRefreshInterval: true,\n          showTimeContext: true\n        },\n        [REFRESH_OPTION.HISTORY]: {\n          showTimeContext: true,\n          showAggregation: false\n        }\n      }\n    },\n    defaultLinks: {\n      [GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD]: {\n        [REFRESH_OPTION.LIVE]: {\n          dateTimeContext: true,\n          isAutoRefreshEnabled: true\n        },\n        [REFRESH_OPTION.HISTORY]: {\n          dateTimeContext: true\n        }\n      }\n    },\n    stateHandlers: createAutoRefreshHandlers()\n  };\n}\n\n/**\n * Adds aggregation visibility and default link behaviour on top of the\n * baseline template.\n *\n * @returns Partial widget controls that enable aggregation.\n */\nexport function buildAggregationExtensions(): PartialWidgetControls {\n  return {\n    supports: ['aggregation'] as GlobalContextKeys,\n    settings: {\n      [GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD]: {\n        [REFRESH_OPTION.HISTORY]: {\n          showAggregation: true\n        }\n      },\n      [GLOBAL_CONTEXT_DISPLAY_MODE.CONFIG]: {\n        [REFRESH_OPTION.HISTORY]: {\n          showAggregation: true\n        }\n      },\n      [GLOBAL_CONTEXT_DISPLAY_MODE.VIEW_AND_CONFIG]: {\n        [REFRESH_OPTION.HISTORY]: {\n          showAggregation: true\n        }\n      }\n    },\n    configSettings: {\n      [GLOBAL_CONTEXT_DISPLAY_MODE.CONFIG]: {\n        [REFRESH_OPTION.HISTORY]: {\n          showAggregation: true\n        }\n      },\n      [GLOBAL_CONTEXT_DISPLAY_MODE.VIEW_AND_CONFIG]: {\n        [REFRESH_OPTION.HISTORY]: {\n          showAggregation: true\n        }\n      }\n    },\n    defaultLinks: {\n      [GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD]: {\n        [REFRESH_OPTION.HISTORY]: {\n          dateTimeContext: true,\n          aggregation: true\n        }\n      }\n    }\n  };\n}\n\n/**\n * Returns a deep-merged copy of the baseline and supplied partial overrides,\n * unionising supported keys and concatenating handlers.\n *\n * @param base Source template to extend.\n * @param addition Additional partial overrides to apply.\n * @returns Combined partial controls.\n */\nexport function mergePartialControls(\n  base: PartialWidgetControls,\n  addition: PartialWidgetControls\n): PartialWidgetControls {\n  const result: PartialWidgetControls = cloneDeep(base);\n\n  if (addition.supports?.length) {\n    const supports = new Set(result.supports ?? []);\n    addition.supports.forEach(support => supports.add(support));\n    result.supports = Array.from(supports) as GlobalContextKeys;\n  }\n\n  if (addition.options) {\n    result.options = { ...(result.options ?? {}), ...addition.options };\n  }\n\n  if (addition.settings) {\n    result.settings = merge({}, result.settings ?? {}, addition.settings);\n  }\n\n  if (addition.configSettings) {\n    result.configSettings = merge({}, result.configSettings ?? {}, addition.configSettings);\n  }\n\n  if (addition.defaultLinks) {\n    result.defaultLinks = merge({}, result.defaultLinks ?? {}, addition.defaultLinks);\n  }\n\n  if (addition.stateHandlers) {\n    result.stateHandlers = {\n      ...(result.stateHandlers ?? {}),\n      ...addition.stateHandlers\n    };\n  }\n\n  return result;\n}\n\n/**\n * Factory returning scroll-friendly auto-refresh handlers used by multiple\n * presets.\n *\n * @returns Handler map compatible with {@link WidgetControls.stateHandlers}.\n */\nexport function createAutoRefreshHandlers() {\n  return {\n    enableAutoRefresh: (state: WidgetState) => enableAutoRefreshHandler(state),\n    disableAutoRefresh: (state: WidgetState) => disableAutoRefreshHandler(state)\n  };\n}\n\nfunction enableAutoRefreshHandler(state: WidgetState) {\n  if (\n    guards.isDateTimeContextUnlinked(state) ||\n    guards.isAutoRefreshEnabled(state) ||\n    guards.isHistory(state)\n  ) {\n    return createResult(\n      state.inlineControlSettings ?? {},\n      state.dashboardControlSettings ?? {},\n      state.currentLinks ?? {}\n    );\n  }\n\n  if (guards.isConfig(state) || guards.isViewAndConfig(state)) {\n    const settings = updateBothSettings(\n      state,\n      { showAutoRefresh: true, showRefreshInterval: false },\n      { showAutoRefresh: false }\n    );\n    return createResult(settings.inlineControlSettings, settings.dashboardControlSettings, {});\n  }\n\n  return setAutoRefreshControlsVisibility(state, true);\n}\n\nfunction disableAutoRefreshHandler(state: WidgetState) {\n  if (guards.isAutoRefreshDisabled(state) || guards.isHistory(state)) {\n    return createResult(\n      state.inlineControlSettings ?? {},\n      state.dashboardControlSettings ?? {},\n      state.currentLinks ?? {}\n    );\n  }\n\n  return setAutoRefreshControlsVisibility(state, false);\n}\n","import { cloneDeep } from 'lodash-es';\n\nimport { type WidgetControls } from '../../models/global-context.model';\nimport { DEFAULT_WIDGET_TEMPLATE } from './default-widget-template';\nimport {\n  buildAggregationExtensions,\n  buildBaselineControls,\n  createAutoRefreshHandlers,\n  mergePartialControls,\n  type PartialWidgetControls\n} from './widget-controls-presets.helpers';\n\n/**\n * Identifier for a built-in widget controls preset. Each preset encapsulates a\n * reusable configuration that can be composed with others.\n */\nexport type WidgetPresetName = 'default' | 'defaultWithAggregation' | 'scrollHandlers';\n\n/**\n * Union describing how presets can be selected. Consumers can provide an\n * ordered array (preserving order of application) or a flag map where truthy\n * entries are included in insertion order.\n */\nexport type WidgetPresetSelection = WidgetPresetName[] | Partial<Record<WidgetPresetName, boolean>>;\n\n/** Structure supplied when presets should be expanded into `WidgetControls`. */\nexport interface WidgetControlsPresetConfig {\n  presets: WidgetPresetSelection;\n  customize?: (controls: WidgetControls) => WidgetControls;\n}\n\ntype WidgetControlsPresetDefinition = {\n  name: WidgetPresetName;\n  exclusiveGroup?: string;\n  build: () => PartialWidgetControls;\n};\n\nconst PRESET_REGISTRY: Record<WidgetPresetName, WidgetControlsPresetDefinition> = {\n  default: {\n    name: 'default',\n    exclusiveGroup: 'baseline',\n    build: () => buildBaselineControls()\n  },\n  defaultWithAggregation: {\n    name: 'defaultWithAggregation',\n    exclusiveGroup: 'baseline',\n    build: () => mergePartialControls(buildBaselineControls(), buildAggregationExtensions())\n  },\n  scrollHandlers: {\n    name: 'scrollHandlers',\n    build: () => ({ stateHandlers: createAutoRefreshHandlers() })\n  }\n};\n\nexport function resolveWidgetControlsInput(\n  input: WidgetControls | WidgetControlsPresetConfig\n): WidgetControls {\n  if (isPresetConfig(input)) {\n    return buildWidgetControlsFromPresets(input);\n  }\n  return input;\n}\n\n/**\n * Creates a fully hydrated {@link WidgetControls} by expanding the selected\n * presets (and optional customiser) against the default template.\n *\n * @param config Preset selection descriptor optionally providing a customize hook.\n * @returns Fully merged widget controls ready for consumption.\n */\nexport function buildWidgetControlsFromPresets(config: WidgetControlsPresetConfig): WidgetControls {\n  const presetNames = normalizePresetSelection(config.presets);\n  const definitions = presetNames.map(resolvePreset);\n\n  warnForExclusiveConflicts(definitions);\n\n  let built: WidgetControls = definitions.reduce<WidgetControls>((controls, definition) => {\n    return mergeWidgetControls(controls, definition.build());\n  }, cloneDeep(DEFAULT_WIDGET_TEMPLATE));\n\n  if (config.customize) {\n    built = config.customize(built);\n  }\n\n  return cloneDeep(built);\n}\n\n/**\n * Merges partial control metadata into a cloned base instance, unionising the\n * supported keys array and deep-merging nested settings/link structures.\n *\n * @param base Starting widget controls template.\n * @param addition Partial controls to merge into the template.\n * @returns Combined widget controls instance.\n */\nfunction mergeWidgetControls(\n  base: WidgetControls,\n  addition: PartialWidgetControls\n): WidgetControls {\n  // Reuse the existing mergePartialControls function to avoid code duplication\n  return mergePartialControls(base as PartialWidgetControls, addition) as WidgetControls;\n}\n\n/**\n * Normalises caller input to a deduplicated, ordered preset array.\n *\n * @param selection Value supplied to the presets API.\n * @returns Ordered list of preset identifiers without duplicates.\n */\nfunction normalizePresetSelection(selection: WidgetPresetSelection): WidgetPresetName[] {\n  if (Array.isArray(selection)) {\n    return dedupe(selection);\n  }\n\n  return dedupe(\n    Object.entries(selection)\n      .filter(([, enabled]) => Boolean(enabled))\n      .map(([name]) => name as WidgetPresetName)\n  );\n}\n\n/**\n * Removes duplicate preset names while preserving the first occurrence.\n *\n * @param values Sequence of preset identifiers.\n * @returns Deduplicated preset array.\n */\nfunction dedupe(values: WidgetPresetName[]): WidgetPresetName[] {\n  const seen = new Set<WidgetPresetName>();\n  const ordered: WidgetPresetName[] = [];\n\n  for (const value of values) {\n    if (!seen.has(value)) {\n      ordered.push(value);\n      seen.add(value);\n    }\n  }\n\n  return ordered;\n}\n\n/**\n * Retrieves the preset definition or throws if it does not exist.\n *\n * @param name Name of the preset to resolve.\n * @returns Preset definition from the registry.\n */\nfunction resolvePreset(name: WidgetPresetName): WidgetControlsPresetDefinition {\n  const definition = PRESET_REGISTRY[name];\n\n  if (!definition) {\n    throw new Error(`Unknown widget controls preset: ${name}`);\n  }\n\n  return definition;\n}\n\n/**\n * Emits a console warning whenever multiple presets from the same\n * `exclusiveGroup` are composed, signalling that later presets override\n * earlier ones.\n *\n * @param definitions Preset definitions selected for the current build.\n */\nfunction warnForExclusiveConflicts(definitions: WidgetControlsPresetDefinition[]): void {\n  const groups = new Map<string, string>();\n\n  definitions.forEach(definition => {\n    if (!definition.exclusiveGroup) {\n      return;\n    }\n\n    if (groups.has(definition.exclusiveGroup)) {\n      const existing = groups.get(definition.exclusiveGroup);\n      console.warn(\n        `Widget controls preset \"${definition.name}\" overrides preset \"${existing}\" (exclusive group: ${definition.exclusiveGroup}).`\n      );\n    }\n\n    groups.set(definition.exclusiveGroup, definition.name);\n  });\n}\n\nfunction isPresetConfig(\n  input: WidgetControls | WidgetControlsPresetConfig\n): input is WidgetControlsPresetConfig {\n  return typeof (input as WidgetControlsPresetConfig)?.presets !== 'undefined';\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  ContentChild,\n  DestroyRef,\n  effect,\n  EventEmitter,\n  inject,\n  input,\n  OnInit,\n  Output,\n  signal,\n  TemplateRef,\n  untracked,\n  ViewChild,\n  WritableSignal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { DashboardChildComponent } from '@c8y/ngx-components';\nimport { isEmpty, merge, pick } from 'lodash-es';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { Subject, throttleTime } from 'rxjs';\nimport { GlobalContextInlineComponent } from '../../core/global-context-inline.component';\nimport { GlobalContextWidgetConfigComponent } from '../../core/global-context-widget-config.component';\nimport { TIMING } from '../../models/constants';\nimport type { LinkStatesMap } from '../../models/control-flow.model';\nimport type {\n  GlobalContextEvent,\n  GlobalContextState,\n  WidgetControls,\n  WidgetDisplayMode\n} from '../../models/global-context.model';\nimport {\n  GLOBAL_CONTEXT_DISPLAY_MODE,\n  WIDGET_DISPLAY_MODE\n} from '../../models/global-context.model';\nimport { GlobalContextUtilsService } from '../../services/infrastructure/global-context-utils.service';\nimport { PreviewControlsComponent } from '../../shared/preview-controls';\nimport {\n  formatDateTimeContextForEmission,\n  isCompleteDateTimeContext\n} from '../../utils/global-context-defaults.util';\nimport { resolveWidgetControlsInput, type WidgetControlsPresetConfig } from '../widget-controls';\nimport { REFRESH_OPTION } from '../../models';\n\n@Component({\n  selector: 'c8y-global-context-widget-wrapper',\n  host: { class: 'sticky-top bg-component d-block min-width-0' },\n  standalone: true,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    GlobalContextInlineComponent,\n    GlobalContextWidgetConfigComponent,\n    NgTemplateOutlet,\n    ReactiveFormsModule,\n    PopoverModule,\n    PreviewControlsComponent\n  ],\n  template: `\n    @if (widgetControls()) {\n      @let GLOBAL_CONTEXT_CONFIG = internalConfig();\n      @let INLINE = WIDGET_DISPLAY_MODE.INLINE;\n      @let CONFIG = WIDGET_DISPLAY_MODE.CONFIG;\n      @let PREVIEW = WIDGET_DISPLAY_MODE.PREVIEW;\n      @let DISPLAY_MODE = GLOBAL_CONTEXT_CONFIG?.displayMode;\n      @let DASHBOARD = GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD;\n\n      @switch (displayMode()) {\n        @case (INLINE) {\n          <c8y-global-context-inline\n            #globalContextInlineRef=\"globalContextInline\"\n            [config]=\"GLOBAL_CONTEXT_CONFIG\"\n            [widgetControls]=\"widgetControls()\"\n            [isLoading]=\"isLoading()\"\n            [dashboardChildForLegacy]=\"dashboardChildForLegacy()\"\n            [disableRefreshEmits]=\"disableRefreshEmits()\"\n            (refresh)=\"onRefresh()\"\n            (globalContextChange)=\"onGlobalContextChange($event)\"\n          >\n            <ng-content></ng-content>\n            <ng-container\n              id=\"header\"\n              [ngTemplateOutlet]=\"widgetHeaderRef\"\n              [ngTemplateOutletInjector]=\"globalContextInlineRef.injector\"\n            ></ng-container>\n            <ng-container\n              id=\"body\"\n              [ngTemplateOutlet]=\"widgetBodyRef\"\n              [ngTemplateOutletInjector]=\"globalContextInlineRef.injector\"\n            ></ng-container>\n          </c8y-global-context-inline>\n        }\n        @case (CONFIG) {\n          <c8y-global-context-widget-config\n            [config]=\"GLOBAL_CONTEXT_CONFIG\"\n            [widgetControls]=\"widgetControls()\"\n            [isLoading]=\"isLoading()\"\n            (refresh)=\"onRefresh()\"\n            (globalContextChange)=\"onGlobalContextChange($event)\"\n          ></c8y-global-context-widget-config>\n        }\n        @case (PREVIEW) {\n          <c8y-preview-controls\n            [config]=\"GLOBAL_CONTEXT_CONFIG\"\n            [widgetControls]=\"widgetControls()\"\n          ></c8y-preview-controls>\n        }\n      }\n    }\n  `\n})\nexport class GlobalContextWidgetWrapperComponent implements OnInit {\n  @ContentChild('widgetBody') widgetBodyRef!: TemplateRef<unknown>;\n  @ContentChild('widgetHeader') widgetHeaderRef!: TemplateRef<unknown>;\n  @ViewChild(GlobalContextInlineComponent)\n  globalContextInlineComponent!: GlobalContextInlineComponent;\n\n  // --- Services ---\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly globalContextUtilsService = inject(GlobalContextUtilsService);\n\n  // --- Inputs ---\n  isLoading = input(false);\n  displayMode = input<WidgetDisplayMode>(WIDGET_DISPLAY_MODE.INLINE);\n  readonly widgetControlsConfig = input.required<WidgetControls | WidgetControlsPresetConfig>({\n    alias: 'widgetControls'\n  });\n  widgetControls = computed(() => resolveWidgetControlsInput(this.widgetControlsConfig()));\n  controlLinks = input<LinkStatesMap>({});\n  dashboardChildForLegacy = input<DashboardChildComponent>();\n  config = input<GlobalContextState>({});\n  /**\n   * When true, disables refresh event emissions.\n   * Use when widget handles its own data refresh (e.g., via realtime subscriptions).\n   */\n  disableRefreshEmits = input(false);\n\n  // --- State Management ---\n  internalConfig: WritableSignal<GlobalContextState> = signal({});\n  // Latest global snapshot cached for child config updates on mode change\n  private widgetInitialConfig: GlobalContextState | null = null;\n  // Last emitted state - used for diff calculation to avoid race conditions\n  private lastEmittedState: WritableSignal<GlobalContextState> = signal({});\n\n  // --- Outputs ---\n  @Output() globalContextChange = new EventEmitter<GlobalContextEvent>();\n  private readonly contextChangeSubject = new Subject<{\n    context: GlobalContextState;\n    diff: GlobalContextState;\n  }>();\n\n  // --- Constants for Template Binding ---\n  readonly GLOBAL_CONTEXT_DISPLAY_MODE = GLOBAL_CONTEXT_DISPLAY_MODE;\n  readonly WIDGET_DISPLAY_MODE = WIDGET_DISPLAY_MODE;\n\n  constructor() {\n    // Effect to reactively handle changes to the `config` input signal.\n    effect(() => {\n      const newConfig = this.config();\n      // This effect runs whenever the `config` input changes.\n      // `untracked` prevents the effect from re-running when `internalConfig` is updated inside the handler.\n      untracked(() => this.handleConfigChange(newConfig));\n    });\n  }\n\n  ngOnInit(): void {\n    this.contextChangeSubject\n      .pipe(throttleTime(TIMING.CONTEXT_THROTTLE), takeUntilDestroyed(this.destroyRef))\n      .subscribe(({ context, diff }) => {\n        this.globalContextChange.emit(structuredClone({ context, diff }));\n      });\n  }\n\n  /**\n   * Update dateTimeContext for internal widget interactions (e.g., slider drag).\n   * This bypasses the config propagation logic and directly updates the inline component state.\n   */\n  updateDateTimeContext(dateTimeContext: any): void {\n    this.globalContextInlineComponent?.updateDateTimeContext(dateTimeContext);\n  }\n\n  /**\n   * Directly toggle all link controls to linked or unlinked state.\n   * All controls are always toggled together as a unified group.\n   *\n   * @param isLinked - True to link all controls, false to unlink all controls\n   * @param suppressRefresh - True to prevent refresh emission (data already loaded)\n   * @param suppressEmit - True to prevent configuration change emission\n   */\n  toggleAllLinks(isLinked: boolean, suppressRefresh?: boolean, suppressEmit?: boolean): void {\n    this.globalContextInlineComponent?.toggleAllLinks(isLinked, suppressRefresh, suppressEmit);\n  }\n\n  /**\n   * Pause auto-refresh and unlink all controls from global context.\n   * Useful when user is interacting with the widget (e.g., scrolling through a list)\n   * and you want to prevent automatic updates.\n   *\n   * This does two things:\n   * 1. Sets isAutoRefreshEnabled to false (stops the auto-refresh timer)\n   * 2. Unlinks all controls (dateTimeContext, aggregation, isAutoRefreshEnabled)\n   *    from global context as they work as a unified group\n   */\n  pauseAutoRefresh(): void {\n    this.globalContextInlineComponent?.pauseAutoRefresh();\n  }\n\n  /**\n   * Resume auto-refresh and re-link all controls to global context.\n   * Useful when user has finished interacting with the widget (e.g., scrolled back to top)\n   * and you want to re-enable automatic updates.\n   *\n   * This does two things:\n   * 1. Sets isAutoRefreshEnabled to true (starts the auto-refresh timer)\n   * 2. Links all controls (dateTimeContext, aggregation, isAutoRefreshEnabled)\n   *    to global context as they work as a unified group\n   */\n  resumeAutoRefresh(): void {\n    this.globalContextInlineComponent?.resumeAutoRefresh();\n  }\n\n  onGlobalContextChange(context: GlobalContextState): void {\n    const template = this.widgetControls();\n\n    // OVERRIDE CONTROLS BASED ON WIDGET MODE\n    // Ensure aggregation is null in live mode BEFORE calculating diff\n    // TODO: consider updating inline component to handle this logic.\n    // Edge case: widget supports aggregation. In history mode, user selects aggregation different than null.\n    // Then switches to live mode.\n    // Second scenario: legacy widget migration where aggregation was set in config.\n    const normalizedContext = { ...context };\n    if (normalizedContext.refreshOption === REFRESH_OPTION.LIVE) {\n      normalizedContext.aggregation = null;\n    }\n\n    // Use lastEmittedState instead of internalConfig to avoid race conditions\n    // where handleConfigChange updates internalConfig before the inline component emits\n    const previousState = this.lastEmittedState();\n    const diff = this.globalContextUtilsService.getChangedFields(previousState, normalizedContext);\n\n    const filteredContext = pick(normalizedContext, template.supports);\n    const filteredDiff = pick(diff, template.supports);\n    const formattedContext = formatDateTimeContextForEmission(filteredContext, template.supports);\n\n    // Update lastEmittedState to track what we just emitted\n    this.lastEmittedState.set(formattedContext);\n    // Also update internalConfig to keep it in sync (for backward compatibility)\n    this.internalConfig.update(cfg => ({ ...cfg, ...formattedContext }));\n    this.contextChangeSubject.next({ context: formattedContext, diff: filteredDiff });\n  }\n\n  onRefresh(): void {\n    this.onGlobalContextChange(this.internalConfig());\n  }\n\n  /**\n   * Handles incoming config changes from the input, calculates the diff,\n   * and updates the internal state.\n   */\n  private handleConfigChange(config: GlobalContextState): void {\n    const controls = this.widgetControls();\n    if (isEmpty(config) || !controls) {\n      return;\n    }\n\n    const newState = pick(config, controls.supports);\n    const diff = this.globalContextUtilsService.getChangedFields(this.internalConfig(), newState);\n\n    const processedDiff = this._processConfigDiff(diff);\n    if (isEmpty(processedDiff)) {\n      return;\n    }\n\n    // Update the signal state immutably.\n    this.internalConfig.update(cfg => merge({}, cfg, processedDiff));\n\n    // Sync inline component's form when isAutoRefreshEnabled changes from external config.\n    // This is needed for legacy AngularJS widgets that update config directly.\n    // Example: drag X axis in the DPE 1.0 widget.\n    if (processedDiff.isAutoRefreshEnabled !== undefined) {\n      this.globalContextInlineComponent?.setAutoRefreshEnabled(processedDiff.isAutoRefreshEnabled);\n    }\n\n    // the widget enters config mode. This provides a consistent \"reset\" point for the user.\n    if (!this.widgetInitialConfig && this.displayMode() === WIDGET_DISPLAY_MODE.CONFIG) {\n      this.widgetInitialConfig = structuredClone(this.internalConfig());\n    }\n  }\n\n  /**\n   * Pure helper function to process the configuration diff, applying special business\n   * logic, like handling incomplete dateTimeContext.\n   */\n  private _processConfigDiff(diff: Partial<GlobalContextState>): Partial<GlobalContextState> {\n    if (isEmpty(diff)) {\n      return {};\n    }\n\n    // Preserves the critical business logic of preventing updates from an incomplete date-time range.\n    if (!isCompleteDateTimeContext(diff)) {\n      const { dateTimeContext: _dateTimeContext, ...restDiff } = diff;\n      return restDiff;\n    }\n\n    return diff;\n  }\n}\n","import { REFRESH_OPTION, RefreshOption } from '../../models/auto-refresh.model';\nimport {\n  GLOBAL_CONTEXT_DISPLAY_MODE,\n  GlobalContextDisplayMode,\n  GlobalContextSettings\n} from '../../models/global-context.model';\n\nexport type DisplayMode = GlobalContextDisplayMode;\n\n/** Context control feature constants for type-safe access */\nexport const CONTEXT_FEATURE = {\n  /** Time range selector for live mode (relative time window that moves with current time) */\n  LIVE_TIME: 'liveTime',\n  /** Time range selector for history mode (fixed date range for historical analysis) */\n  HISTORY_TIME: 'historyTime',\n  /** Data aggregation options (hourly, daily, etc.) - history mode only */\n  AGGREGATION: 'aggregation',\n  /** Auto-refresh toggle (fixed 5s interval) - live mode only */\n  AUTO_REFRESH: 'autoRefresh',\n  /** Manual refresh button */\n  REFRESH: 'refresh'\n} as const;\n\nexport type ContextFeature = (typeof CONTEXT_FEATURE)[keyof typeof CONTEXT_FEATURE];\n\n/** Preset name constants for type-safe access */\nexport const PRESET_NAME = {\n  DEFAULT: 'default',\n  ALARM_LIST: 'alarmList',\n  CHART: 'chart',\n  LIVE_ONLY: 'liveOnly',\n  HISTORY_ONLY: 'historyOnly',\n  ALARM_LIST_CONFIG: 'alarmListConfig',\n  ALARM_LIST_LEGACY: 'alarmListLegacy',\n  KPI: 'kpi',\n  KPI_CONFIG: 'kpiConfig',\n  DATA_POINTS_LIST: 'dataPointsList',\n  DATA_POINTS_LIST_CONFIG: 'dataPointsListConfig'\n} as const;\n\nexport type PresetName = (typeof PRESET_NAME)[keyof typeof PRESET_NAME];\n\nexport type PresetDefinition = {\n  [GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD]: ContextFeature[];\n  [GLOBAL_CONTEXT_DISPLAY_MODE.CONFIG]: ContextFeature[];\n  [GLOBAL_CONTEXT_DISPLAY_MODE.VIEW_AND_CONFIG]: ContextFeature[];\n};\n\n/** Control presets for different widget types (mode constraints applied by applyModeConstraints) */\nexport const CONTROL_PRESETS: Record<PresetName, PresetDefinition> = {\n  /** Full-featured preset for most widgets (supports both live and history modes) */\n  [PRESET_NAME.DEFAULT]: {\n    dashboard: [\n      CONTEXT_FEATURE.LIVE_TIME,\n      CONTEXT_FEATURE.HISTORY_TIME,\n      CONTEXT_FEATURE.AUTO_REFRESH\n    ],\n    config: [CONTEXT_FEATURE.LIVE_TIME, CONTEXT_FEATURE.HISTORY_TIME, CONTEXT_FEATURE.AUTO_REFRESH],\n    view_and_config: [\n      CONTEXT_FEATURE.LIVE_TIME,\n      CONTEXT_FEATURE.HISTORY_TIME,\n      CONTEXT_FEATURE.AUTO_REFRESH,\n      CONTEXT_FEATURE.AGGREGATION,\n      CONTEXT_FEATURE.REFRESH\n    ]\n  },\n\n  /** For alarm/event lists (supports both live and history modes) */\n  [PRESET_NAME.ALARM_LIST]: {\n    dashboard: [\n      CONTEXT_FEATURE.LIVE_TIME,\n      CONTEXT_FEATURE.HISTORY_TIME,\n      CONTEXT_FEATURE.AUTO_REFRESH\n    ],\n    config: [CONTEXT_FEATURE.AUTO_REFRESH],\n    view_and_config: [\n      CONTEXT_FEATURE.LIVE_TIME,\n      CONTEXT_FEATURE.HISTORY_TIME,\n      CONTEXT_FEATURE.AUTO_REFRESH\n    ]\n  },\n\n  /** For alarm/event lists in config mode (supports both live and history modes with time in config) */\n  [PRESET_NAME.ALARM_LIST_CONFIG]: {\n    dashboard: [\n      CONTEXT_FEATURE.LIVE_TIME,\n      CONTEXT_FEATURE.HISTORY_TIME,\n      CONTEXT_FEATURE.AUTO_REFRESH\n    ],\n    config: [CONTEXT_FEATURE.LIVE_TIME, CONTEXT_FEATURE.HISTORY_TIME, CONTEXT_FEATURE.AUTO_REFRESH],\n    view_and_config: [\n      CONTEXT_FEATURE.LIVE_TIME,\n      CONTEXT_FEATURE.HISTORY_TIME,\n      CONTEXT_FEATURE.AUTO_REFRESH\n    ]\n  },\n\n  /** For charts with aggregation support (supports both live and history modes) */\n  [PRESET_NAME.CHART]: {\n    dashboard: [\n      CONTEXT_FEATURE.LIVE_TIME,\n      CONTEXT_FEATURE.HISTORY_TIME,\n      CONTEXT_FEATURE.AUTO_REFRESH\n    ],\n    config: [CONTEXT_FEATURE.LIVE_TIME, CONTEXT_FEATURE.HISTORY_TIME, CONTEXT_FEATURE.AUTO_REFRESH],\n    view_and_config: [\n      CONTEXT_FEATURE.LIVE_TIME,\n      CONTEXT_FEATURE.HISTORY_TIME,\n      CONTEXT_FEATURE.AGGREGATION,\n      CONTEXT_FEATURE.AUTO_REFRESH,\n      CONTEXT_FEATURE.REFRESH\n    ]\n  },\n\n  /** For live-only widgets (no history mode support) */\n  [PRESET_NAME.LIVE_ONLY]: {\n    dashboard: [CONTEXT_FEATURE.LIVE_TIME, CONTEXT_FEATURE.AUTO_REFRESH],\n    config: [CONTEXT_FEATURE.LIVE_TIME, CONTEXT_FEATURE.AUTO_REFRESH],\n    view_and_config: [\n      CONTEXT_FEATURE.LIVE_TIME,\n      CONTEXT_FEATURE.AUTO_REFRESH,\n      CONTEXT_FEATURE.REFRESH\n    ]\n  },\n\n  /** For history-only widgets (no live mode support) */\n  [PRESET_NAME.HISTORY_ONLY]: {\n    dashboard: [CONTEXT_FEATURE.HISTORY_TIME],\n    config: [CONTEXT_FEATURE.HISTORY_TIME, CONTEXT_FEATURE.AGGREGATION],\n    view_and_config: [\n      CONTEXT_FEATURE.HISTORY_TIME,\n      CONTEXT_FEATURE.AGGREGATION,\n      CONTEXT_FEATURE.REFRESH\n    ]\n  },\n  [PRESET_NAME.ALARM_LIST_LEGACY]: {\n    dashboard: [\n      CONTEXT_FEATURE.LIVE_TIME,\n      CONTEXT_FEATURE.HISTORY_TIME,\n      CONTEXT_FEATURE.AUTO_REFRESH\n    ],\n    config: [CONTEXT_FEATURE.AUTO_REFRESH, CONTEXT_FEATURE.REFRESH],\n    view_and_config: [\n      CONTEXT_FEATURE.LIVE_TIME,\n      CONTEXT_FEATURE.HISTORY_TIME,\n      CONTEXT_FEATURE.AUTO_REFRESH\n    ]\n  },\n\n  /** For KPI widget in view mode (live/history, no aggregation) */\n  [PRESET_NAME.KPI]: {\n    dashboard: [CONTEXT_FEATURE.HISTORY_TIME, CONTEXT_FEATURE.AUTO_REFRESH],\n    config: [CONTEXT_FEATURE.AUTO_REFRESH],\n    view_and_config: [CONTEXT_FEATURE.HISTORY_TIME, CONTEXT_FEATURE.AUTO_REFRESH]\n  },\n\n  /** For KPI widget in config mode (full time controls, no aggregation) */\n  [PRESET_NAME.KPI_CONFIG]: {\n    dashboard: [CONTEXT_FEATURE.HISTORY_TIME, CONTEXT_FEATURE.AUTO_REFRESH],\n    config: [CONTEXT_FEATURE.HISTORY_TIME, CONTEXT_FEATURE.AUTO_REFRESH],\n    view_and_config: [CONTEXT_FEATURE.HISTORY_TIME, CONTEXT_FEATURE.AUTO_REFRESH]\n  },\n\n  /** For data points list (supports both live and history modes) */\n  [PRESET_NAME.DATA_POINTS_LIST]: {\n    dashboard: [\n      CONTEXT_FEATURE.LIVE_TIME,\n      CONTEXT_FEATURE.HISTORY_TIME,\n      CONTEXT_FEATURE.AUTO_REFRESH\n    ],\n    config: [CONTEXT_FEATURE.AUTO_REFRESH],\n    view_and_config: [\n      CONTEXT_FEATURE.LIVE_TIME,\n      CONTEXT_FEATURE.HISTORY_TIME,\n      CONTEXT_FEATURE.AUTO_REFRESH\n    ]\n  },\n\n  /** For data points list in config mode (supports both live and history modes with time in config) */\n  [PRESET_NAME.DATA_POINTS_LIST_CONFIG]: {\n    dashboard: [\n      CONTEXT_FEATURE.LIVE_TIME,\n      CONTEXT_FEATURE.HISTORY_TIME,\n      CONTEXT_FEATURE.AUTO_REFRESH\n    ],\n    config: [\n      CONTEXT_FEATURE.AUTO_REFRESH,\n      CONTEXT_FEATURE.LIVE_TIME,\n      CONTEXT_FEATURE.HISTORY_TIME,\n      CONTEXT_FEATURE.AUTO_REFRESH\n    ],\n    view_and_config: [\n      CONTEXT_FEATURE.LIVE_TIME,\n      CONTEXT_FEATURE.HISTORY_TIME,\n      CONTEXT_FEATURE.AUTO_REFRESH\n    ]\n  }\n};\n\n/**\n * Apply mode constraints (hard rules) to filter controls based on refresh option.\n *\n * @param controls - Array of control features\n * @param refreshOption - Current refresh option (REFRESH_OPTION.LIVE or REFRESH_OPTION.HISTORY)\n * @returns Filtered array with mode constraints applied\n */\nexport function applyModeConstraints(\n  controls: ContextFeature[],\n  refreshOption: RefreshOption\n): ContextFeature[] {\n  if (refreshOption === REFRESH_OPTION.HISTORY) {\n    // History mode: no auto-refresh, no live time\n    return controls.filter(\n      c => c !== CONTEXT_FEATURE.AUTO_REFRESH && c !== CONTEXT_FEATURE.LIVE_TIME\n    );\n  }\n  if (refreshOption === REFRESH_OPTION.LIVE) {\n    // Live mode: no aggregation, no history time\n    return controls.filter(\n      c => c !== CONTEXT_FEATURE.AGGREGATION && c !== CONTEXT_FEATURE.HISTORY_TIME\n    );\n  }\n  return controls;\n}\n\n/**\n * Get supported modes from a preset definition.\n * Modes are derived from features:\n * - LIVE mode: supported if preset has AUTO_REFRESH (LIVE_TIME is optional)\n * - HISTORY mode: supported if preset has HISTORY_TIME\n *\n * @param controls - Preset name or definition\n * @param displayMode - Current display mode\n * @returns Array of supported refresh options\n */\nexport function getSupportedModes(\n  controls: PresetName | PresetDefinition,\n  displayMode: DisplayMode\n): RefreshOption[] {\n  const presetDef = typeof controls === 'string' ? CONTROL_PRESETS[controls] : controls;\n  const features = presetDef[displayMode];\n  const modes: RefreshOption[] = [];\n\n  // Support LIVE if has autoRefresh (with optional liveTime)\n  if (features.includes(CONTEXT_FEATURE.AUTO_REFRESH)) {\n    modes.push(REFRESH_OPTION.LIVE);\n  }\n\n  // Support HISTORY if has historyTime\n  if (features.includes(CONTEXT_FEATURE.HISTORY_TIME)) {\n    modes.push(REFRESH_OPTION.HISTORY);\n  }\n\n  // Fallback to LIVE if no mode features detected\n  return modes.length > 0 ? modes : [REFRESH_OPTION.LIVE];\n}\n\n/**\n * Convert controls preset to GlobalContextSettings for registration.\n */\nexport function controlsToSettings(\n  controls: PresetName | PresetDefinition,\n  displayMode: DisplayMode,\n  refreshOption: RefreshOption\n): Partial<GlobalContextSettings> {\n  const presetDef = typeof controls === 'string' ? CONTROL_PRESETS[controls] : controls;\n  const activeControls = applyModeConstraints(presetDef[displayMode], refreshOption);\n\n  return {\n    showTimeContext:\n      activeControls.includes(CONTEXT_FEATURE.LIVE_TIME) ||\n      activeControls.includes(CONTEXT_FEATURE.HISTORY_TIME),\n    showAutoRefresh: activeControls.includes(CONTEXT_FEATURE.AUTO_REFRESH),\n    showRefreshInterval: false,\n    showAggregation: activeControls.includes(CONTEXT_FEATURE.AGGREGATION),\n    showRefresh: activeControls.includes(CONTEXT_FEATURE.REFRESH)\n  };\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  DestroyRef,\n  effect,\n  inject,\n  input,\n  OnInit,\n  output,\n  signal,\n  untracked\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { C8yTranslatePipe } from '@c8y/ngx-components';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { ConfigContextSelectorComponent } from '../../features/configuration/config-context-selector';\nimport { ConfigurationControlsComponent } from '../../features/configuration/configuration-controls/configuration-controls.component';\nimport { REFRESH_OPTION, RefreshOption } from '../../models/auto-refresh.model';\nimport {\n  GLOBAL_CONTEXT_DISPLAY_MODE,\n  GLOBAL_CONTEXT_EVENTS,\n  GlobalContextDisplayMode,\n  GlobalContextState\n} from '../../models/global-context.model';\nimport { GlobalContextUtilsService } from '../../services/infrastructure/global-context-utils.service';\nimport { GlobalContextEventService } from '../../services/state/global-context-event.service';\nimport {\n  controlsToSettings,\n  getSupportedModes,\n  PRESET_NAME,\n  PresetDefinition,\n  PresetName\n} from '../presets/control-presets';\n\n@Component({\n  selector: 'c8y-config-mode-controls',\n  standalone: true,\n  imports: [\n    ReactiveFormsModule,\n    ConfigContextSelectorComponent,\n    ConfigurationControlsComponent,\n    C8yTranslatePipe,\n    PopoverModule\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <form>\n      <fieldset class=\"c8y-fieldset\">\n        <legend>\n          {{ 'Time context' | translate }}\n          <button\n            class=\"btn-help btn-help--sm\"\n            [attr.aria-label]=\"'Help' | translate\"\n            [popover]=\"\n              'Sync with dashboard settings or set independent time controls for this widget.'\n                | translate\n            \"\n            placement=\"right\"\n            triggers=\"focus\"\n            container=\"body\"\n            type=\"button\"\n            [adaptivePosition]=\"true\"\n          ></button>\n        </legend>\n        <c8y-config-context-selector\n          [formControl]=\"displayModeControl\"\n        ></c8y-config-context-selector>\n      </fieldset>\n    </form>\n\n    @if (displayMode() !== GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD) {\n      <fieldset class=\"c8y-fieldset p-l-0 p-r-0 p-t-16\">\n        <legend class=\"m-l-16\">{{ 'Widget time context' | translate }}</legend>\n        <c8y-configuration-controls\n          [settings]=\"settings()\"\n          [controlsDisplayMode]=\"'horizontal'\"\n          [tabsOutletName]=\"'verticalTabOutletForConfigurationModes'\"\n          [activeMode]=\"refreshOption()\"\n          [liveContext]=\"liveState()\"\n          [historyContext]=\"historyState()\"\n          [supportedModes]=\"supportedModes()\"\n          (contextChange)=\"onConfigurationChange($event)\"\n          (refreshOptionChange)=\"onRefreshOptionChange($event)\"\n        ></c8y-configuration-controls>\n      </fieldset>\n    }\n  `\n})\nexport class ConfigModeControls implements OnInit {\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly globalContextUtils = inject(GlobalContextUtilsService);\n  private readonly globalContextEventService = inject(GlobalContextEventService);\n\n  controls = input<PresetName | PresetDefinition>(PRESET_NAME.DEFAULT);\n  config = input.required<GlobalContextState>();\n\n  configChange = output<{ context: GlobalContextState; diff: GlobalContextState }>();\n\n  displayModeControl = new FormControl<GlobalContextDisplayMode>(\n    GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD,\n    { nonNullable: true }\n  );\n  readonly GLOBAL_CONTEXT_DISPLAY_MODE = GLOBAL_CONTEXT_DISPLAY_MODE;\n\n  displayMode = signal<GlobalContextDisplayMode>(GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD);\n  refreshOption = signal<RefreshOption>(REFRESH_OPTION.LIVE);\n  liveState = signal<GlobalContextState | null>(null);\n  historyState = signal<GlobalContextState | null>(null);\n  private lastEmittedContext = signal<GlobalContextState>({});\n\n  settings = computed(() =>\n    controlsToSettings(this.controls(), this.displayMode(), this.refreshOption())\n  );\n\n  supportedModes = computed(() => getSupportedModes(this.controls(), this.displayMode()));\n\n  constructor() {\n    // Sync with incoming config\n    effect(() => {\n      const cfg = this.config();\n      if (!cfg) return;\n\n      untracked(() => {\n        const mode =\n          (cfg.displayMode as GlobalContextDisplayMode) ?? GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD;\n        if (this.displayModeControl.value !== mode) {\n          this.displayModeControl.setValue(mode, { emitEvent: false });\n          this.displayMode.set(mode);\n        }\n\n        const refreshOpt = cfg.refreshOption ?? REFRESH_OPTION.LIVE;\n        this.refreshOption.set(refreshOpt);\n\n        if (refreshOpt === REFRESH_OPTION.LIVE) {\n          this.liveState.set({ ...cfg });\n        } else {\n          this.historyState.set({ ...cfg });\n        }\n\n        this.lastEmittedContext.set(cfg);\n      });\n    });\n  }\n\n  ngOnInit(): void {\n    this.displayModeControl.valueChanges\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe(mode => {\n        this.displayMode.set(mode);\n        this.emitForDisplayMode(mode);\n      });\n\n    this.emitInitialState();\n  }\n\n  onRefreshOptionChange(option: RefreshOption): void {\n    this.refreshOption.set(option);\n    const snapshot = option === REFRESH_OPTION.LIVE ? this.liveState() : this.historyState();\n\n    const context: GlobalContextState = {\n      ...(snapshot ?? this.config()),\n      refreshOption: option,\n      displayMode: this.displayMode(),\n      aggregation: option === REFRESH_OPTION.LIVE ? null : (snapshot ?? this.config()).aggregation\n    };\n\n    this.emit(context);\n  }\n\n  onConfigurationChange(changes: Partial<GlobalContextState>): void {\n    const context: GlobalContextState = {\n      ...this.config(),\n      ...changes,\n      refreshOption: this.refreshOption(),\n      displayMode: this.displayMode()\n    };\n\n    // Update snapshot for current mode\n    if (this.refreshOption() === REFRESH_OPTION.LIVE) {\n      this.liveState.set({ ...context });\n    } else {\n      this.historyState.set({ ...context });\n    }\n\n    this.emit(context);\n  }\n\n  private emitInitialState(): void {\n    const cfg = this.config();\n    if (!cfg) return;\n\n    const mode =\n      (cfg.displayMode as GlobalContextDisplayMode) ?? GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD;\n    const context: GlobalContextState =\n      mode === GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD\n        ? this.getGlobalContextState(mode)\n        : { ...cfg, isGlobalContextReady: true };\n\n    const diff = this.globalContextUtils.getChangedFields(cfg, context);\n    this.lastEmittedContext.set(context);\n\n    // isGlobalContextReady is a transient runtime flag, not a substantive config change.\n    // Don't trigger an emission solely because it was added.\n    const { isGlobalContextReady: _, ...substantiveDiff } = diff;\n    if (Object.keys(substantiveDiff).length > 0) {\n      this.configChange.emit({ context, diff });\n    }\n  }\n\n  private emitForDisplayMode(mode: GlobalContextDisplayMode): void {\n    if (mode === GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD) {\n      this.emit(this.getGlobalContextState(mode));\n    } else {\n      const snapshot =\n        this.refreshOption() === REFRESH_OPTION.LIVE ? this.liveState() : this.historyState();\n      this.emit({ ...(snapshot ?? this.config()), displayMode: mode, isGlobalContextReady: true });\n    }\n  }\n\n  private emit(context: GlobalContextState): void {\n    const diff = this.globalContextUtils.getChangedFields(this.lastEmittedContext(), context);\n    if (Object.keys(diff).length === 0) return;\n\n    this.lastEmittedContext.set(context);\n    this.configChange.emit({ context, diff });\n  }\n\n  private getGlobalContextState(mode: GlobalContextDisplayMode): GlobalContextState {\n    const globalState = this.globalContextEventService.getLatestValue(\n      GLOBAL_CONTEXT_EVENTS.STATE_CHANGE\n    ) as GlobalContextState | undefined;\n\n    return globalState\n      ? {\n          displayMode: mode,\n          dateTimeContext: globalState.dateTimeContext,\n          refreshOption: globalState.refreshOption,\n          aggregation: globalState.aggregation,\n          isAutoRefreshEnabled: globalState.isAutoRefreshEnabled,\n          refreshInterval: globalState.refreshInterval,\n          isGlobalContextReady: true\n        }\n      : { displayMode: mode, isGlobalContextReady: true };\n  }\n}\n","import { Component, computed, effect, inject, input, output, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormBuilder, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { C8yTranslatePipe, IconDirective } from '@c8y/ngx-components';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { AggregationPickerComponent } from '../../features/aggregation/aggregation-picker/aggregation-picker.component';\nimport { AutoRefreshControlComponent } from '../../features/refresh/auto-refresh/auto-refresh-control.component';\nimport { DateTimeContextPickerComponent } from '../../features/time-context/time-range-picker/date-time-context-picker.component';\nimport { AggregationOptionStatus } from '../../models/aggregation.model';\nimport { GLOBAL_CONTEXT_DISPLAY_MODE, GlobalContextState } from '../../models/global-context.model';\nimport { REFRESH_OPTION } from '../../models/auto-refresh.model';\nimport { GLOBAL_CONTEXT_DEFAULTS } from '../../models/global-context-defaults';\nimport { AggregationValidationService } from '../../services/domain/aggregation-validation.service';\nimport { GlobalContextUtilsService } from '../../services/infrastructure/global-context-utils.service';\nimport { DateTimeContextUtil } from '../../utils/date-time-context.util';\nimport {\n  applyModeConstraints,\n  CONTEXT_FEATURE,\n  CONTROL_PRESETS,\n  DisplayMode,\n  PresetDefinition,\n  PresetName,\n  PRESET_NAME\n} from '../presets/control-presets';\n\n@Component({\n  selector: 'c8y-context-controls',\n  standalone: true,\n  imports: [\n    ReactiveFormsModule,\n    DateTimeContextPickerComponent,\n    AggregationPickerComponent,\n    AutoRefreshControlComponent,\n    IconDirective,\n    C8yTranslatePipe,\n    TooltipModule\n  ],\n  template: `\n    <form\n      class=\"d-flex gap-16 p-l-16 p-r-16 p-b-8 inner-scroll h-auto min-width-0 widget-controls\"\n      [formGroup]=\"form\"\n    >\n      <div class=\"input-group w-auto\">\n        @if (visibleControls().includes('aggregation')) {\n          <c8y-aggregation-picker\n            formControlName=\"aggregation\"\n            [disabledAggregations]=\"disabledAggregations()\"\n            [resetToDefault]=\"true\"\n          >\n          </c8y-aggregation-picker>\n        }\n\n        @if (visibleControls().includes('autoRefresh')) {\n          <c8y-auto-refresh-control\n            formControlName=\"isAutoRefreshEnabled\"\n            [autoRefreshSeconds]=\"autoRefreshSeconds()\"\n            [isLoading]=\"isLoading()\"\n            (refresh)=\"onAutoRefresh()\"\n          >\n          </c8y-auto-refresh-control>\n        }\n\n        @if (visibleControls().includes('time')) {\n          <c8y-date-time-context-picker\n            style=\"margin-left: -1px\"\n            formControlName=\"dateTimeContext\"\n            [config]=\"dateTimePickerConfig()\"\n          >\n          </c8y-date-time-context-picker>\n        }\n\n        @if (visibleControls().includes('refresh')) {\n          <div class=\"input-group-btn\">\n            <button\n              class=\"btn btn-default\"\n              [attr.aria-label]=\"'Refresh' | translate\"\n              [tooltip]=\"'Refresh' | translate\"\n              placement=\"bottom\"\n              container=\"body\"\n              type=\"button\"\n              [delay]=\"500\"\n              [disabled]=\"isLoading()\"\n              (click)=\"onRefresh()\"\n              data-cy=\"widget-controls--refresh-button\"\n            >\n              <i [class.icon-spin]=\"isLoading()\" [c8yIcon]=\"'refresh'\"></i>\n            </button>\n          </div>\n        }\n      </div>\n    </form>\n  `\n})\nexport class ContextControlsComponent {\n  private fb = inject(FormBuilder);\n  private aggregationValidationService = inject(AggregationValidationService);\n  private globalContextUtils = inject(GlobalContextUtilsService);\n\n  controls = input<PresetName | PresetDefinition>(PRESET_NAME.DEFAULT);\n  displayMode = input<DisplayMode>(GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD);\n  config = input.required<GlobalContextState>();\n  isLoading = input<boolean>(false);\n  emitRefresh = input<boolean>(true);\n  configChange = output<{ context: GlobalContextState; diff: GlobalContextState }>();\n  refresh = output<void>();\n\n  form: FormGroup;\n  private lastEmittedState = signal<GlobalContextState>({});\n\n  /**\n   * Visible controls for the template.\n   * LIVE_TIME and HISTORY_TIME are normalized to 'time' for template simplicity.\n   */\n  visibleControls = computed(() => {\n    const controlsInput = this.controls();\n    const presetDef =\n      typeof controlsInput === 'string' ? CONTROL_PRESETS[controlsInput] : controlsInput;\n    const baseControls = presetDef[this.displayMode()];\n    const refreshOption = this.config().refreshOption || REFRESH_OPTION.LIVE;\n    const filteredControls = applyModeConstraints(baseControls, refreshOption);\n\n    // Normalize LIVE_TIME/HISTORY_TIME to 'time' for template\n    return filteredControls.map(c =>\n      c === CONTEXT_FEATURE.LIVE_TIME || c === CONTEXT_FEATURE.HISTORY_TIME ? 'time' : c\n    );\n  });\n\n  disabledAggregations = computed((): AggregationOptionStatus => {\n    const dateCtx = this.config().dateTimeContext;\n    if (!dateCtx) return {};\n\n    const [from, to] = this.parseDateRange(dateCtx);\n    return this.aggregationValidationService.getDisabledAggregations([from, to]);\n  });\n\n  dateTimePickerConfig = computed(() => {\n    const refreshOption = this.config().refreshOption;\n    return refreshOption === REFRESH_OPTION.HISTORY\n      ? { showDateFrom: true, showDateTo: true }\n      : { showDateFrom: true, showDateTo: false };\n  });\n\n  autoRefreshSeconds = computed(\n    () => this.config().refreshInterval || GLOBAL_CONTEXT_DEFAULTS.REFRESH_INTERVAL\n  );\n\n  constructor() {\n    this.form = this.fb.group({\n      dateTimeContext: [null],\n      aggregation: [null],\n      isAutoRefreshEnabled: [false],\n      refreshInterval: [GLOBAL_CONTEXT_DEFAULTS.REFRESH_INTERVAL],\n      refreshOption: [GLOBAL_CONTEXT_DEFAULTS.REFRESH_OPTION]\n    });\n\n    this.syncConfigToForm();\n    this.subscribeToFormChanges();\n  }\n\n  onAutoRefresh(): void {\n    if (this.emitRefresh()) {\n      this.onRefresh();\n    }\n  }\n\n  onRefresh(): void {\n    const { dateTimeContext } = this.config();\n    if (!dateTimeContext) {\n      this.refresh.emit();\n      return;\n    }\n\n    const context = {\n      ...this.config(),\n      dateTimeContext: DateTimeContextUtil.normalizeForLive(dateTimeContext)\n    };\n\n    if (!this.emitIfChanged(context)) {\n      this.refresh.emit();\n    }\n  }\n\n  /** Emits configChange if context differs from last emitted state. Returns true if emitted. */\n  private emitIfChanged(context: GlobalContextState): boolean {\n    const diff = this.globalContextUtils.getChangedFields(this.lastEmittedState(), context);\n    if (Object.keys(diff).length === 0) return false;\n\n    this.lastEmittedState.set(context);\n    this.configChange.emit({ context, diff });\n    return true;\n  }\n\n  private syncConfigToForm(): void {\n    effect(() => {\n      const cfg = this.config();\n      this.form.patchValue(cfg, { emitEvent: false });\n      this.lastEmittedState.set(this.form.value as GlobalContextState);\n    });\n  }\n\n  private subscribeToFormChanges(): void {\n    this.form.valueChanges.pipe(takeUntilDestroyed()).subscribe(value => {\n      const context = this.clearInvalidAggregation(value as GlobalContextState);\n      this.emitIfChanged(context);\n    });\n  }\n\n  /** Clears aggregation if in LIVE mode or invalid for current time range (HISTORY mode). */\n  private clearInvalidAggregation(context: GlobalContextState): GlobalContextState {\n    const { aggregation, dateTimeContext, refreshOption } = context;\n    if (!aggregation) return context;\n\n    // LIVE mode doesn't support aggregation\n    if (refreshOption === REFRESH_OPTION.LIVE) {\n      this.form.patchValue({ aggregation: null }, { emitEvent: false });\n      return { ...context, aggregation: null };\n    }\n\n    // HISTORY mode: validate aggregation for time range\n    if (!dateTimeContext) return context;\n\n    const [from, to] = this.parseDateRange(dateTimeContext);\n    const disabledAggs = this.aggregationValidationService.getDisabledAggregations([from, to]);\n    if (disabledAggs[aggregation]) {\n      this.form.patchValue({ aggregation: null }, { emitEvent: false });\n      return { ...context, aggregation: null };\n    }\n    return context;\n  }\n\n  private parseDateRange(dateCtx: {\n    dateFrom?: string | Date;\n    dateTo?: string | Date;\n  }): [Date, Date] {\n    const from =\n      typeof dateCtx.dateFrom === 'string' ? new Date(dateCtx.dateFrom) : dateCtx.dateFrom;\n    const to = typeof dateCtx.dateTo === 'string' ? new Date(dateCtx.dateTo) : dateCtx.dateTo;\n    return [from as Date, to as Date];\n  }\n}\n","import {\n  AfterViewInit,\n  Component,\n  computed,\n  inject,\n  input,\n  OnDestroy,\n  output,\n  TemplateRef,\n  ViewChild\n} from '@angular/core';\nimport { C8yTranslatePipe, DashboardChildComponent, IconDirective } from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { GLOBAL_CONTEXT_DISPLAY_MODE, GlobalContextState } from '../../models/global-context.model';\nimport {\n  applyModeConstraints,\n  CONTROL_PRESETS,\n  PRESET_NAME,\n  PresetDefinition,\n  PresetName\n} from '../presets/control-presets';\nimport { REFRESH_OPTION } from '../../models';\n\ninterface ControlDisplay {\n  key: string;\n  stateKey: string;\n  cssClass: string;\n  icon: string;\n  label: string;\n}\n\n// Map preset controls to state keys\nconst CONTROL_DISPLAY_CONFIG: Record<string, ControlDisplay> = {\n  liveTime: {\n    key: 'liveTime',\n    stateKey: 'dateTimeContext',\n    cssClass: 'time-context',\n    label: gettext('date/time'),\n    icon: 'calendar'\n  },\n  historyTime: {\n    key: 'historyTime',\n    stateKey: 'dateTimeContext',\n    cssClass: 'time-context',\n    label: gettext('date/time'),\n    icon: 'calendar'\n  },\n  aggregation: {\n    key: 'aggregation',\n    stateKey: 'aggregation',\n    cssClass: 'aggregation',\n    label: gettext('aggregation'),\n    icon: 'input'\n  },\n  autoRefresh: {\n    key: 'autoRefresh',\n    stateKey: 'isAutoRefreshEnabled',\n    cssClass: 'auto-refresh',\n    label: gettext('auto refresh'),\n    icon: 'refresh'\n  }\n};\n\n@Component({\n  selector: 'c8y-link-buttons',\n  standalone: true,\n  imports: [IconDirective, TooltipModule, C8yTranslatePipe],\n  template: `\n    <ng-template #headerContent>\n      <button\n        class=\"btn-icon-dot-set\"\n        [class.active]=\"isLinked()\"\n        [attr.aria-label]=\"'Global context sync controls' | translate\"\n        [tooltip]=\"masterTooltipTemplate\"\n        delay=\"500\"\n        container=\"body\"\n        (click)=\"toggle.emit(!isLinked())\"\n        data-cy=\"global-context-link--all\"\n      >\n        <span class=\"btn-icon-dot__item default\" [class.active]=\"isLinked()\">\n          <i [c8yIcon]=\"isLinked() ? 'link' : 'unlink'\"></i>\n        </span>\n        @for (control of visibleControls(); track control.stateKey) {\n          <span\n            [class]=\"control.cssClass + ' btn-icon-dot__item'\"\n            [class.active]=\"isLinked()\"\n            [attr.data-cy]=\"'global-context-link--' + control.stateKey\"\n          >\n            <i [c8yIcon]=\"control.icon\"></i>\n          </span>\n        }\n      </button>\n      <ng-template #masterTooltipTemplate>{{ masterTooltipText() }}</ng-template>\n    </ng-template>\n  `\n})\nexport class LinkButtonsComponent implements AfterViewInit, OnDestroy {\n  private injectedDashboardChild = inject(DashboardChildComponent, { optional: true });\n  private translateService = inject(TranslateService);\n\n  @ViewChild('headerContent', { static: true, read: TemplateRef })\n  private headerTemplateRef?: TemplateRef<unknown>;\n\n  dashboardChild = input<DashboardChildComponent>();\n  isLinked = input.required<boolean>();\n  controls = input<PresetName | PresetDefinition>(PRESET_NAME.DEFAULT);\n  config = input<GlobalContextState>({});\n\n  toggle = output<boolean>();\n\n  visibleControls = computed(() => {\n    const controlsInput = this.controls();\n    const presetDef =\n      typeof controlsInput === 'string' ? CONTROL_PRESETS[controlsInput] : controlsInput;\n    const refreshOption = this.config().refreshOption || REFRESH_OPTION.LIVE;\n    const dashboardControls = presetDef[GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD];\n    const activeControls = applyModeConstraints(dashboardControls, refreshOption);\n\n    return activeControls.map(key => CONTROL_DISPLAY_CONFIG[key]).filter(Boolean);\n  });\n\n  masterTooltipText = computed<string>(() => {\n    const controls = this.visibleControls();\n    const clickToToggleLabel = this.translateService.instant(gettext('(click to toggle)'));\n\n    if (!this.isLinked()) {\n      const usingWidgetCustomTimeSettingsLabel = this.translateService.instant(\n        gettext('Using widget custom time settings')\n      );\n      return `${usingWidgetCustomTimeSettingsLabel}\\n${clickToToggleLabel}`;\n    }\n\n    const linkedNames = controls.map(control => this.translateService.instant(control.label));\n\n    const formatter = new Intl.ListFormat(\n      this.translateService.getCurrentLang()?.replace('_', '-'),\n      {\n        type: 'conjunction'\n      }\n    );\n    const linkedNamesList = formatter.format(linkedNames);\n    const linkedToDashboardLabel = this.translateService.instant(gettext('Synced to dashboard:'));\n    return `${linkedToDashboardLabel}\\n${linkedNamesList}\\n${clickToToggleLabel}`;\n  });\n\n  ngAfterViewInit(): void {\n    const dashChild = this.getDashboardChild();\n\n    if (!dashChild || !this.headerTemplateRef) {\n      return;\n    }\n\n    const templates = dashChild._additionalHeaderTemplates.value;\n\n    if (!templates.some(t => t.template === this.headerTemplateRef)) {\n      dashChild._additionalHeaderTemplates.next([\n        ...templates,\n        {\n          template: this.headerTemplateRef,\n          priority: 100\n        }\n      ]);\n    }\n  }\n\n  ngOnDestroy(): void {\n    const dashChild = this.getDashboardChild();\n\n    if (!dashChild || !this.headerTemplateRef) {\n      return;\n    }\n\n    const templates = dashChild._additionalHeaderTemplates.value;\n\n    dashChild._additionalHeaderTemplates.next(\n      templates.filter(t => t.template !== this.headerTemplateRef)\n    );\n  }\n\n  private getDashboardChild(): DashboardChildComponent | null {\n    return this.dashboardChild() ?? this.injectedDashboardChild ?? null;\n  }\n}\n","import { Component, DestroyRef, effect, inject, input, output, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DashboardChildComponent } from '@c8y/ngx-components';\nimport { EMPTY, merge, Subscription } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\nimport { REFRESH_OPTION } from '../../models/auto-refresh.model';\nimport {\n  GLOBAL_CONTEXT_DISPLAY_MODE,\n  GLOBAL_CONTEXT_EVENTS,\n  GlobalContextState\n} from '../../models/global-context.model';\nimport { GlobalContextEventService } from '../../services/state/global-context-event.service';\nimport { GlobalContextService } from '../../services/state/global-context.service';\nimport { GlobalContextUtilsService } from '../../services/infrastructure/global-context-utils.service';\nimport { DateTimeContextUtil } from '../../utils/date-time-context.util';\nimport { ContextControlsComponent } from '../context-controls/context-controls.component';\nimport { LinkButtonsComponent } from '../link-buttons/link-buttons.component';\nimport {\n  controlsToSettings,\n  PresetDefinition,\n  PresetName,\n  PRESET_NAME\n} from '../presets/control-presets';\n\n@Component({\n  selector: 'c8y-global-context-connector',\n  standalone: true,\n  imports: [ContextControlsComponent, LinkButtonsComponent],\n  template: `\n    <c8y-link-buttons\n      [dashboardChild]=\"dashboardChild()\"\n      [isLinked]=\"isLinked()\"\n      [controls]=\"controls()\"\n      [config]=\"config()\"\n      (toggle)=\"onLinkToggle($event)\"\n    ></c8y-link-buttons>\n\n    @if (!isLinked()) {\n      <c8y-context-controls\n        [controls]=\"controls()\"\n        displayMode=\"dashboard\"\n        [config]=\"config()\"\n        [isLoading]=\"isLoading()\"\n        (configChange)=\"onLocalChange($event)\"\n        (refresh)=\"onLocalRefresh()\"\n      ></c8y-context-controls>\n    }\n  `\n})\nexport class GlobalContextConnectorComponent {\n  private eventService = inject(GlobalContextEventService);\n  private globalContextService = inject(GlobalContextService);\n  private globalContextUtils = inject(GlobalContextUtilsService);\n  private destroyRef = inject(DestroyRef);\n  private lastEmittedState = signal<GlobalContextState>({});\n\n  controls = input<PresetName | PresetDefinition>(PRESET_NAME.DEFAULT);\n  config = input.required<GlobalContextState>();\n  isLoading = input<boolean>(false);\n  dashboardChild = input.required<DashboardChildComponent>();\n  linked = input<boolean | undefined>(undefined);\n  /** When false, refresh events are not emitted as configChange - only user-initiated state changes */\n  emitRefresh = input<boolean>(true);\n\n  configChange = output<{ context: GlobalContextState; diff: GlobalContextState }>();\n  refresh = output<void>();\n  linkedChange = output<boolean>();\n\n  isLinked = signal(true);\n\n  constructor() {\n    this.syncExternalLinkState();\n    this.subscribeToGlobalContext();\n    this.registerWithGlobalContext();\n    this.trackLoadingState();\n\n    this.destroyRef.onDestroy(() => {\n      this.globalContextService.unregister(this.componentId);\n      this.globalContextService.unregisterLoading(this.componentId);\n    });\n  }\n\n  onLinkToggle(linked: boolean): void {\n    this.isLinked.set(linked);\n    this.linkedChange.emit(linked);\n    if (linked) {\n      const cached = this.eventService.getLatestValue(GLOBAL_CONTEXT_EVENTS.STATE_CHANGE);\n      if (cached) this.emitIfChanged(cached as GlobalContextState);\n    }\n  }\n\n  onLocalChange(event: { context: GlobalContextState; diff: GlobalContextState }): void {\n    this.lastEmittedState.set(event.context);\n    this.configChange.emit(event);\n  }\n\n  onLocalRefresh(): void {\n    const { dateTimeContext } = this.config();\n    if (!dateTimeContext) {\n      this.refresh.emit();\n      return;\n    }\n\n    const context = {\n      ...this.config(),\n      dateTimeContext: DateTimeContextUtil.normalizeForLive(dateTimeContext)\n    };\n\n    if (!this.emitIfChanged(context)) {\n      this.refresh.emit();\n    }\n  }\n\n  /** Emits configChange if context differs from last emitted state. Returns true if emitted. */\n  private emitIfChanged(context: GlobalContextState): boolean {\n    const diff = this.globalContextUtils.getChangedFields(this.lastEmittedState(), context);\n    if (Object.keys(diff).length === 0) return false;\n\n    this.lastEmittedState.set(context);\n    this.configChange.emit({ context, diff });\n    return true;\n  }\n\n  private get componentId(): string {\n    const data = this.dashboardChild()['data'];\n    return data.id;\n  }\n\n  private syncExternalLinkState(): void {\n    effect(() => {\n      const external = this.linked();\n      if (external !== undefined) this.isLinked.set(external);\n    });\n  }\n\n  private subscribeToGlobalContext(): void {\n    let subscription: Subscription | null = null;\n\n    effect(() => {\n      subscription?.unsubscribe();\n      if (!this.isLinked()) return;\n\n      const cached = this.eventService.getLatestValue(GLOBAL_CONTEXT_EVENTS.STATE_CHANGE);\n      if (cached) this.emitIfChanged(cached as GlobalContextState);\n\n      const stateChanges$ = this.eventService.on(GLOBAL_CONTEXT_EVENTS.STATE_CHANGE);\n\n      // Only include refresh events if emitRefresh is true\n      let source$ = stateChanges$;\n      if (this.emitRefresh()) {\n        const refresh$ = this.eventService.on(GLOBAL_CONTEXT_EVENTS.REFRESH).pipe(\n          map(\n            data =>\n              ({\n                ...this.config(),\n                dateTimeContext: {\n                  dateFrom: data.dateFrom,\n                  dateTo: data.dateTo,\n                  interval: data.interval\n                }\n              }) as GlobalContextState\n          )\n        );\n        source$ = merge(stateChanges$, refresh$);\n      }\n\n      subscription = source$\n        .pipe(\n          takeUntilDestroyed(this.destroyRef),\n          catchError(() => EMPTY)\n        )\n        .subscribe(state => {\n          if (state) this.emitIfChanged(state as GlobalContextState);\n        });\n    });\n  }\n\n  private registerWithGlobalContext(): void {\n    effect(() => {\n      // Auto-unlink if not in dashboard mode\n      const displayMode = this.config().displayMode;\n      if (displayMode && displayMode !== GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD) {\n        this.isLinked.set(false);\n        this.globalContextService.unregister(this.componentId);\n        return;\n      }\n\n      if (this.isLinked()) {\n        const settings = controlsToSettings(\n          this.controls(),\n          GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD,\n          this.config().refreshOption || REFRESH_OPTION.LIVE\n        );\n        this.globalContextService.register(this.componentId, settings);\n      } else {\n        this.globalContextService.unregister(this.componentId);\n      }\n    });\n  }\n\n  private trackLoadingState(): void {\n    effect(() => {\n      const shouldTrack = this.isLinked() && this.isLoading();\n      if (shouldTrack) {\n        this.globalContextService.registerLoading(this.componentId);\n      } else {\n        this.globalContextService.unregisterLoading(this.componentId);\n      }\n    });\n  }\n}\n","import { Component, input, output } from '@angular/core';\nimport { GLOBAL_CONTEXT_DISPLAY_MODE, GlobalContextState } from '../../models/global-context.model';\nimport { ContextControlsComponent } from '../context-controls/context-controls.component';\nimport { DisplayMode, PresetDefinition, PresetName, PRESET_NAME } from '../presets/control-presets';\n\n@Component({\n  selector: 'c8y-local-controls',\n  standalone: true,\n  imports: [ContextControlsComponent],\n  host: {\n    'data-local-controls': 'true',\n    '[class.disabled]': 'disabled()'\n  },\n  styles: [\n    `\n      .disabled-overlay {\n        position: relative;\n        cursor: not-allowed;\n      }\n      .disabled-overlay::after {\n        content: '';\n        position: absolute;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        z-index: 10;\n      }\n    `\n  ],\n  template: `\n    <div [class.disabled-overlay]=\"disabled()\">\n      <c8y-context-controls\n        [controls]=\"controls()\"\n        [displayMode]=\"displayMode()\"\n        [config]=\"config()\"\n        [isLoading]=\"isLoading()\"\n        [emitRefresh]=\"emitRefresh()\"\n        (configChange)=\"configChange.emit($event)\"\n        (refresh)=\"refresh.emit()\"\n      ></c8y-context-controls>\n    </div>\n  `\n})\nexport class LocalControlsComponent {\n  controls = input<PresetName | PresetDefinition>(PRESET_NAME.DEFAULT);\n  displayMode = input<DisplayMode>(GLOBAL_CONTEXT_DISPLAY_MODE.CONFIG);\n  config = input.required<GlobalContextState>();\n  isLoading = input<boolean>(false);\n  disabled = input<boolean>(false);\n  emitRefresh = input<boolean>(true);\n\n  configChange = output<{ context: GlobalContextState; diff: GlobalContextState }>();\n  refresh = output<void>();\n}\n","/** @deprecated Use LocalControlsComponent or GlobalContextConnectorComponent instead */\nexport * from './widget-wrapper';\n/** @deprecated Use LocalControlsComponent or GlobalContextConnectorComponent instead */\nexport * from './widget-controls';\n\nexport * from './config-mode-controls';\nexport * from './global-context-connector';\nexport * from './link-buttons';\nexport * from './local-controls';\nexport * from './presets';\n","import { NgModule } from '@angular/core';\nimport { hookActionBar } from '@c8y/ngx-components';\nimport { GlobalContextNavigationService } from './services/infrastructure/global-context-navigation.service';\n\n@NgModule({\n  declarations: [],\n  imports: [],\n  exports: [],\n  providers: [hookActionBar(GlobalContextNavigationService)]\n})\nexport class GlobalContextModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.DateTimeContextPickerService","i1","i3","i2","FormsModule","filter","ContextControlsComponent","tap","sanitizeLocalStateHelper","sanitizeGlobalStateHelper","resolveWidgetDisplayModeHelper","mapToContextDisplayModeHelper","resolveVisibilityContextInternalHelper","handleFormChangeHelper","handleGlobalStateChangeHelper","executeHandlerHelper","validateAggregationLinkUtil","deriveAggregationValueUtil","resolveAggregationChangeForFormHelper","syncSourcesForRefreshOptionHelper","resolveAutoUnlinkAggregationChangeHelper","applyAggregationChangesForGlobalStateHelper","ensureDateTimeContextHelper","syncLocalEntriesWithGlobalHelper","deriveDisabledAggregationsHelper","buildControlLinkConfigHelper","calculateDisabledAggregationsFromContextHelper","handleLinkToggleHelper","toggleAllLinksHelper","applyConfigOverrideHelper","buildWidgetStateHelper","applyHandlerResultHelper","distinctUntilChanged","handleGlobalRefreshHelper","processRefreshEventHelper","getShouldDisableIntervalConfigHelper","patchFormValuesHelper","applyLocalAggregationChangeHelper","updateAggregationValueHelper","map","merge"],"mappings":"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"}