chore: Enforce consistent type imports via @typescript-eslint/consistent-type-imports (#2545)

This commit is contained in:
Dermot Duffy
2026-06-30 17:45:13 -07:00
committed by dermotduffy
parent 8f4ebcc0de
commit 7dc29865b8
589 changed files with 2419 additions and 2103 deletions
+1 -1
View File
@@ -1,4 +1,4 @@
import { AutoHideCondition } from '../config/schema/common/auto-hide';
import type { AutoHideCondition } from '../config/schema/common/auto-hide';
import { isBeingCasted } from '../utils/casting';
// Whether each auto-hide condition is currently active.
@@ -1,4 +1,4 @@
import { ReactiveController, ReactiveControllerHost } from 'lit';
import type { ReactiveController, ReactiveControllerHost } from 'lit';
import { Timer } from '../utils/timer';
+8 -8
View File
@@ -1,15 +1,15 @@
import { ViewManagerEpoch } from '../../card-controller/view/types';
import { AdvancedCameraCardView } from '../../config/schema/common/const';
import type { ViewManagerEpoch } from '../../card-controller/view/types';
import type { AdvancedCameraCardView } from '../../config/schema/common/const';
import { THUMBNAIL_WIDTH_DEFAULT } from '../../config/schema/common/controls/thumbnails';
import { MediaGalleryThumbnailsConfig } from '../../config/schema/media-gallery';
import type { MediaGalleryThumbnailsConfig } from '../../config/schema/media-gallery';
import { errorToConsole } from '../../utils/basic';
import { ViewItem } from '../../view/item';
import type { ViewItem } from '../../view/item';
import { ViewItemClassifier } from '../../view/item-classifier';
import { QueryResults } from '../../view/query-results';
import { UnifiedQuery } from '../../view/unified-query';
import { UnifiedQueryRunner } from '../../view/unified-query-runner';
import { View } from '../../view/view';
import { GalleryColumnCountRoundMethod } from './gallery-core-controller';
import type { UnifiedQuery } from '../../view/unified-query';
import type { UnifiedQueryRunner } from '../../view/unified-query-runner';
import type { View } from '../../view/view';
import type { GalleryColumnCountRoundMethod } from './gallery-core-controller';
interface GalleryViewContext {
// The gallery view type the user navigated from (when in viewer). Used to
@@ -1,7 +1,7 @@
import { LitElement, ReactiveController } from 'lit';
import type { LitElement, ReactiveController } from 'lit';
import { throttle } from 'lodash-es';
import { GalleryExtendEvent } from '../../components/gallery/types';
import type { GalleryExtendEvent } from '../../components/gallery/types';
import { fireAdvancedCameraCardEvent } from '../../utils/fire-advanced-camera-card-event';
import { scrollIntoView } from '../../utils/scroll';
import { sleep } from '../../utils/sleep';
+3 -3
View File
@@ -1,11 +1,11 @@
import { HassEntity } from 'home-assistant-js-websocket';
import type { HassEntity } from 'home-assistant-js-websocket';
import frigateSVG from '../camera-manager/frigate/assets/frigate.svg';
import motioneyeSVG from '../camera-manager/motioneye/assets/motioneye.svg';
import reolinkSVG from '../camera-manager/reolink/assets/reolink.svg';
import tplinkSVG from '../camera-manager/tplink/assets/tplink.svg';
import { Icon } from '../config/schema/common/icon';
import { HomeAssistant } from '../ha/types';
import type { Icon } from '../config/schema/common/icon';
import type { HomeAssistant } from '../ha/types';
import irisSVG from '../images/iris.svg';
export class IconController {
@@ -1,7 +1,7 @@
import { LitElement, ReactiveController } from 'lit';
import type { LitElement, ReactiveController } from 'lit';
import { isEqual } from 'lodash-es';
import { KeyboardShortcut } from '../config/schema/view';
import type { KeyboardShortcut } from '../config/schema/view';
export class KeyAssignerController implements ReactiveController {
private _host: LitElement;
+2 -2
View File
@@ -1,6 +1,6 @@
import { ReactiveController, ReactiveControllerHost } from 'lit';
import type { ReactiveController, ReactiveControllerHost } from 'lit';
import { LazyUnloadCondition } from '../config/schema/common/media-actions';
import type { LazyUnloadCondition } from '../config/schema/common/media-actions';
type LazyLoadListener = (loaded: boolean) => void;
@@ -1,5 +1,5 @@
import { MicrophoneManager } from '../../card-controller/microphone-manager.js';
import {
import type { MicrophoneManager } from '../../card-controller/microphone-manager.js';
import type {
MicrophoneAutoMuteCondition,
MicrophoneAutoUnmuteCondition,
} from '../../config/schema/common/media-actions.js';
@@ -1,5 +1,5 @@
import { VideoRTC } from '../../../components/live/providers/go2rtc/video-rtc';
import { MediaTechnology } from '../../../types';
import type { VideoRTC } from '../../../components/live/providers/go2rtc/video-rtc';
import type { MediaTechnology } from '../../../types';
export const getTechnologyForVideoRTC = (
element: VideoRTC,
@@ -1,11 +1,11 @@
import { MicrophoneState } from '../card-controller/types.js';
import {
import type { MicrophoneState } from '../card-controller/types.js';
import type {
AutoMuteCondition,
AutoPauseCondition,
AutoPlayCondition,
AutoUnmuteCondition,
} from '../config/schema/common/media-actions.js';
import { MediaPlayerElement } from '../types.js';
import type { MediaPlayerElement } from '../types.js';
import { Timer } from '../utils/timer.js';
import { VisibilityObserver } from './visibility-observer.js';
@@ -1,8 +1,8 @@
import { ReactiveController, ReactiveControllerHost } from 'lit';
import type { ReactiveController, ReactiveControllerHost } from 'lit';
import { debounce } from 'lodash-es';
import { CameraDimensionsConfig } from '../config/schema/cameras';
import { MediaLoadedInfoEventDetail } from '../types';
import type { CameraDimensionsConfig } from '../config/schema/cameras';
import type { MediaLoadedInfoEventDetail } from '../types';
import { aspectRatioToString, setOrRemoveStyleProperty } from '../utils/basic';
import { updateElementStyleFromMediaLayoutConfig } from '../utils/media-layout';
+12 -12
View File
@@ -10,24 +10,24 @@ import {
startOfYesterday,
sub,
} from 'date-fns';
import { LitElement } from 'lit';
import type { LitElement } from 'lit';
import { isEqual, orderBy } from 'lodash-es';
import { CameraManager, CameraQueryClassifier } from '../camera-manager/manager';
import { DateRange, PartialDateRange } from '../camera-manager/range';
import { CameraQueryClassifier, type CameraManager } from '../camera-manager/manager';
import type { DateRange, PartialDateRange } from '../camera-manager/range';
import {
EventQuery,
MediaMetadata,
QueryType,
ReviewQuery,
type EventQuery,
type MediaMetadata,
type ReviewQuery,
} from '../camera-manager/types';
import { FoldersManager } from '../card-controller/folders/manager';
import { ViewManagerInterface } from '../card-controller/view/types';
import { SelectOption, SelectValues } from '../components/select';
import { CardWideConfig } from '../config/schema/types';
import type { FoldersManager } from '../card-controller/folders/manager';
import type { ViewManagerInterface } from '../card-controller/view/types';
import type { SelectOption, SelectValues } from '../components/select';
import type { CardWideConfig } from '../config/schema/types';
import { localize } from '../localize/localize';
import { SEVERITIES, Severity } from '../severity';
import { ViewMediaType } from '../types';
import { SEVERITIES, type Severity } from '../severity';
import type { ViewMediaType } from '../types';
import { errorToConsole, formatDate, prettifyTitle } from '../utils/basic';
import { UnifiedQueryBuilder } from '../view/unified-query-builder';
+1 -1
View File
@@ -1,7 +1,7 @@
import { isEqual, throttle } from 'lodash-es';
import Masonry from 'masonry-layout';
import { ViewDisplayConfig } from '../config/schema/common/display';
import type { ViewDisplayConfig } from '../config/schema/common/display';
import {
forceReflow,
getChildrenFromElement,
@@ -1,6 +1,6 @@
import { ReactiveController, ReactiveControllerHost } from 'lit';
import type { ReactiveController, ReactiveControllerHost } from 'lit';
import { MediaLoadedInfo, MediaLoadedInfoEventDetail } from '../types';
import type { MediaLoadedInfo, MediaLoadedInfoEventDetail } from '../types';
import { onAbort } from '../utils/abort-signal';
interface MediaLoadedInfoSinkConfig {
@@ -1,7 +1,7 @@
import { ReactiveController, ReactiveControllerHost } from 'lit';
import type { ReactiveController, ReactiveControllerHost } from 'lit';
import { isEqual, omit } from 'lodash-es';
import {
import type {
MediaLoadedInfo,
MediaLoadedInfoEventDetail,
UntargetedMediaLoadedInfo,
+2 -2
View File
@@ -1,6 +1,6 @@
import { LitElement } from 'lit';
import type { LitElement } from 'lit';
import { FullscreenElement, MediaPlayerController, PIPElement } from '../../types';
import type { FullscreenElement, MediaPlayerController, PIPElement } from '../../types';
import { screenshotImage } from '../../utils/screenshot';
export class ImageMediaPlayerController implements MediaPlayerController {
+3 -3
View File
@@ -1,7 +1,7 @@
import JSMpeg from '@cycjimmy/jsmpeg-player';
import { LitElement } from 'lit';
import type JSMpeg from '@cycjimmy/jsmpeg-player';
import type { LitElement } from 'lit';
import { FullscreenElement, MediaPlayerController, PIPElement } from '../../types';
import type { FullscreenElement, MediaPlayerController, PIPElement } from '../../types';
export class JSMPEGMediaPlayerController implements MediaPlayerController {
private _host: LitElement;
@@ -1,7 +1,7 @@
import { LitElement } from 'lit';
import type { LitElement } from 'lit';
import { FullscreenElement, MediaPlayerController, PIPElement } from '../../types';
import { CachedValueController } from '../cached-value-controller';
import type { FullscreenElement, MediaPlayerController, PIPElement } from '../../types';
import type { CachedValueController } from '../cached-value-controller';
export class UpdatingImageMediaPlayerController implements MediaPlayerController {
private _host: LitElement;
+2 -2
View File
@@ -1,6 +1,6 @@
import { LitElement } from 'lit';
import type { LitElement } from 'lit';
import { FullscreenElement, MediaPlayerController, PIPElement } from '../../types';
import type { FullscreenElement, MediaPlayerController, PIPElement } from '../../types';
import { hideMediaControlsTemporarily, setControlsOnVideo } from '../../utils/controls';
import { screenshotVideo } from '../../utils/screenshot';
@@ -1,15 +1,15 @@
import { format } from 'date-fns';
import { CameraManager } from '../../camera-manager/manager';
import { CameraManagerCameraMetadata } from '../../camera-manager/types';
import { ViewItemManager } from '../../card-controller/view/item-manager';
import { ViewManagerEpoch } from '../../card-controller/view/types';
import {
import type { CameraManager } from '../../camera-manager/manager';
import type { CameraManagerCameraMetadata } from '../../camera-manager/types';
import type { ViewItemManager } from '../../card-controller/view/item-manager';
import type { ViewManagerEpoch } from '../../card-controller/view/types';
import type {
Notification,
NotificationControl,
NotificationDetail,
} from '../../config/schema/actions/types';
import { HomeAssistant } from '../../ha/types';
import type { HomeAssistant } from '../../ha/types';
import { localize } from '../../localize/localize';
import { createInternalCallbackAction } from '../../utils/action';
import { getDurationString, prettifyTitle } from '../../utils/basic';
@@ -19,9 +19,9 @@ import {
toggleFavorite,
toggleReviewed,
} from '../../utils/media-actions';
import { ViewItem } from '../../view/item';
import type { ViewItem } from '../../view/item';
import { ViewItemClassifier } from '../../view/item-classifier';
import { ViewItemCapabilities } from '../../view/types';
import type { ViewItemCapabilities } from '../../view/types';
export interface NotificationControlsContext {
hass?: HomeAssistant;
+15 -15
View File
@@ -1,23 +1,23 @@
import { StyleInfo } from 'lit/directives/style-map';
import type { StyleInfo } from 'lit/directives/style-map';
import { CameraManager } from '../camera-manager/manager';
import { CallManager } from '../card-controller/call/manager';
import { FoldersManager } from '../card-controller/folders/manager';
import { FullscreenManager } from '../card-controller/fullscreen/fullscreen-manager';
import { MediaPlayerManager } from '../card-controller/media-player-manager';
import { MicrophoneManager } from '../card-controller/microphone-manager';
import { PIPManager } from '../card-controller/pip-manager';
import { ViewManager } from '../card-controller/view/view-manager';
import type { CameraManager } from '../camera-manager/manager';
import type { CallManager } from '../card-controller/call/manager';
import type { FoldersManager } from '../card-controller/folders/manager';
import type { FullscreenManager } from '../card-controller/fullscreen/fullscreen-manager';
import type { MediaPlayerManager } from '../card-controller/media-player-manager';
import type { MicrophoneManager } from '../card-controller/microphone-manager';
import type { PIPManager } from '../card-controller/pip-manager';
import type { ViewManager } from '../card-controller/view/view-manager';
import {
AdvancedCameraCardView,
VIEWS_USER_SPECIFIED,
type AdvancedCameraCardView,
} from '../config/schema/common/const';
import { MenuItem } from '../config/schema/elements/custom/menu/types';
import { AdvancedCameraCardConfig } from '../config/schema/types';
import type { MenuItem } from '../config/schema/elements/custom/menu/types';
import type { AdvancedCameraCardConfig } from '../config/schema/types';
import { getEntityTitle } from '../ha/get-entity-title';
import { HomeAssistant } from '../ha/types';
import type { HomeAssistant } from '../ha/types';
import { localize } from '../localize/localize.js';
import { MediaLoadedInfo } from '../types';
import type { MediaLoadedInfo } from '../types';
import {
createCallEndAction,
createCallStartAction,
@@ -39,7 +39,7 @@ import { getPTZTarget } from '../utils/ptz';
import { ViewItemClassifier } from '../view/item-classifier';
import { getStreamCameraID, hasSubstream } from '../view/substream';
import { resolveViewName } from '../view/utils/resolve-default';
import { View } from '../view/view';
import type { View } from '../view/view';
import {
getCameraIDsWithCapabilityForView,
isViewSupported,
+2 -2
View File
@@ -1,4 +1,4 @@
import { LitElement } from 'lit';
import type { LitElement } from 'lit';
import { isEqual, orderBy } from 'lodash-es';
import { dispatchActionExecutionRequest } from '../card-controller/actions/utils/execution-request.js';
@@ -11,7 +11,7 @@ import type { MenuConfig } from '../config/schema/menu.js';
import type { Interaction } from '../types.js';
import { getActionConfigGivenAction, isStandardAction } from '../utils/action';
import { arrayify, isTruthy } from '../utils/basic.js';
import { AutoHideState, isAutoHidden as evaluateAutoHidden } from './auto-hide.js';
import { isAutoHidden as evaluateAutoHidden, type AutoHideState } from './auto-hide.js';
export class MenuController {
private _host: LitElement;
+6 -6
View File
@@ -1,11 +1,11 @@
import { NonEmptyTuple } from 'type-fest';
import type { NonEmptyTuple } from 'type-fest';
import { FolderPathComponent, FolderQuery } from '../card-controller/folders/types';
import { ViewManagerEpoch, ViewModifier } from '../card-controller/view/types';
import type { FolderPathComponent, FolderQuery } from '../card-controller/folders/types';
import type { ViewManagerEpoch, ViewModifier } from '../card-controller/view/types';
import { localize } from '../localize/localize';
import { ViewFolder, ViewMedia } from '../view/item';
import { UnifiedQuery } from '../view/unified-query';
import { UnifiedQueryBuilder } from '../view/unified-query-builder';
import { ViewFolder, type ViewMedia } from '../view/item';
import type { UnifiedQuery } from '../view/unified-query';
import type { UnifiedQueryBuilder } from '../view/unified-query-builder';
export interface FolderNavigationParamaters {
viewManagerEpoch: ViewManagerEpoch;
+1 -1
View File
@@ -1,5 +1,5 @@
import { dispatchActionExecutionRequest } from '../../card-controller/actions/utils/execution-request.js';
import { NotificationControl } from '../../config/schema/actions/types.js';
import type { NotificationControl } from '../../config/schema/actions/types.js';
import {
getActionConfigGivenAction,
stopEventFromActivatingCardWideActions,
+5 -2
View File
@@ -1,5 +1,8 @@
import { Notification, NotificationDetail } from '../../config/schema/actions/types.js';
import { Link } from '../../config/schema/common/link.js';
import type {
Notification,
NotificationDetail,
} from '../../config/schema/actions/types.js';
import type { Link } from '../../config/schema/common/link.js';
import { getContextFromError } from '../../utils/error-context.js';
import { dataToContext } from './data-to-context.js';
+1 -1
View File
@@ -1,4 +1,4 @@
import { Notification } from '../../config/schema/actions/types.js';
import type { Notification } from '../../config/schema/actions/types.js';
export const summarizeNotification = (notification: Notification): string | null => {
const text = notification.body?.text ?? notification.heading?.text ?? null;
+2 -2
View File
@@ -5,10 +5,10 @@ import {
wheelAction,
type Handler,
} from '@use-gesture/vanilla';
import { ReactiveController, ReactiveControllerHost } from 'lit';
import type { ReactiveController, ReactiveControllerHost } from 'lit';
import { dispatchActionExecutionRequest } from '../../card-controller/actions/utils/execution-request.js';
import {
import type {
PTZAction,
PTZActionPhase,
PTZPanAction,
+8 -8
View File
@@ -1,20 +1,20 @@
import { CameraManager } from '../../camera-manager/manager.js';
import type { CameraManager } from '../../camera-manager/manager.js';
import { dispatchActionExecutionRequest } from '../../card-controller/actions/utils/execution-request.js';
import { SubmenuInteraction } from '../../components/submenu/types.js';
import { PTZAction } from '../../config/schema/actions/custom/ptz.js';
import { Actions, ActionsConfig } from '../../config/schema/actions/types.js';
import {
import type { SubmenuInteraction } from '../../components/submenu/types.js';
import type { PTZAction } from '../../config/schema/actions/custom/ptz.js';
import type { Actions, ActionsConfig } from '../../config/schema/actions/types.js';
import type {
PTZControlsConfig,
PTZControlType,
} from '../../config/schema/common/controls/ptz.js';
import { HomeAssistant } from '../../ha/types.js';
import { Interaction } from '../../types.js';
import type { HomeAssistant } from '../../ha/types.js';
import type { Interaction } from '../../types.js';
import {
createPTZControlsAction,
createPTZMultiAction,
getActionConfigGivenAction,
} from '../../utils/action.js';
import { PTZControllerActions } from './types';
import type { PTZControllerActions } from './types';
export class PTZController {
private _host: HTMLElement;
+3 -3
View File
@@ -1,6 +1,6 @@
import { PTZControlAction } from '../../config/schema/actions/custom/ptz';
import { Actions } from '../../config/schema/actions/types';
import { PTZControlType } from '../../config/schema/common/controls/ptz';
import type { PTZControlAction } from '../../config/schema/actions/custom/ptz';
import type { Actions } from '../../config/schema/actions/types';
import type { PTZControlType } from '../../config/schema/common/controls/ptz';
interface PTZControlsViewContext {
enabled?: boolean;
+5 -5
View File
@@ -1,14 +1,14 @@
import { ReactiveController, ReactiveControllerHost } from 'lit';
import type { ReactiveController, ReactiveControllerHost } from 'lit';
import { isEqual } from 'lodash-es';
import { EnabledProxyConfig } from '../config/schema/common/proxy.js';
import type { EnabledProxyConfig } from '../config/schema/common/proxy.js';
import { homeAssistantGetSignedURLIfNecessary } from '../ha/sign-path.js';
import { HomeAssistant } from '../ha/types.js';
import type { HomeAssistant } from '../ha/types.js';
import {
createProxiedEndpointIfNecessary,
CreateProxiedEndpointOptions,
type CreateProxiedEndpointOptions,
} from '../ha/web-proxy.js';
import { Endpoint } from '../types.js';
import type { Endpoint } from '../types.js';
import { errorToConsole } from '../utils/basic.js';
const PROXY_URL_SIGN_EXPIRY_SECONDS = 24 * 60 * 60;
+4 -4
View File
@@ -1,14 +1,14 @@
import { LitElement } from 'lit';
import type { LitElement } from 'lit';
import { isEqual, orderBy } from 'lodash-es';
import { dispatchActionExecutionRequest } from '../card-controller/actions/utils/execution-request';
import { ActionsConfig, StatusBarItem } from '../config/schema/actions/types';
import type { ActionsConfig, StatusBarItem } from '../config/schema/actions/types';
import { STATUS_BAR_PRIORITY_DEFAULT } from '../config/schema/common/const';
import { StatusBarConfig } from '../config/schema/status-bar';
import type { StatusBarConfig } from '../config/schema/status-bar';
import { getActionConfigGivenAction } from '../utils/action';
import { arrayify } from '../utils/basic';
import { Timer } from '../utils/timer';
import { AutoHideState, isAutoHidden as evaluateAutoHidden } from './auto-hide';
import { isAutoHidden as evaluateAutoHidden, type AutoHideState } from './auto-hide';
export class StatusBarController {
private _host: LitElement;
@@ -1,13 +1,13 @@
import { format } from 'date-fns';
import { CameraManager } from '../../../camera-manager/manager';
import { CameraManagerCameraMetadata } from '../../../camera-manager/types';
import type { CameraManager } from '../../../camera-manager/manager';
import type { CameraManagerCameraMetadata } from '../../../camera-manager/types';
import {
brandsUrl,
extractDomainFromBrandUrl,
isBrandUrl,
} from '../../../ha/brands-url';
import { ViewItem } from '../../../view/item';
import type { ViewItem } from '../../../view/item';
import { ViewItemClassifier } from '../../../view/item-classifier';
export class ThumbnailFeatureController {
+27 -23
View File
@@ -1,47 +1,51 @@
import { add, differenceInSeconds, sub } from 'date-fns';
import { LitElement } from 'lit';
import type { LitElement } from 'lit';
import { isEqual, throttle } from 'lodash-es';
import { ViewContext } from 'view';
import type { ViewContext } from 'view';
import {
IdType,
Timeline,
TimelineEventPropertiesResult,
TimelineFormatOption,
TimelineItem,
TimelineOptions,
TimelineOptionsCluster,
TimelineWindow,
type IdType,
type TimelineEventPropertiesResult,
type TimelineFormatOption,
type TimelineItem,
type TimelineOptions,
type TimelineOptionsCluster,
type TimelineWindow,
} from 'vis-timeline';
import { CameraManager } from '../../camera-manager/manager';
import type { CameraManager } from '../../camera-manager/manager';
import { rangesOverlap } from '../../camera-manager/range';
import { convertRangeToCacheFriendlyTimes } from '../../camera-manager/utils/range-to-cache-friendly';
import { FoldersManager } from '../../card-controller/folders/manager';
import { ViewItemManager } from '../../card-controller/view/item-manager';
import type { FoldersManager } from '../../card-controller/folders/manager';
import type { ViewItemManager } from '../../card-controller/view/item-manager';
import { MergeContextViewModifier } from '../../card-controller/view/modifiers/merge-context';
import { ViewManagerEpoch } from '../../card-controller/view/types';
import { ConditionStateManagerReadonlyInterface } from '../../condition-trigger/conditions/types';
import { CameraConfig } from '../../config/schema/cameras';
import { AdvancedCameraCardView } from '../../config/schema/common/const';
import { ThumbnailsControlBaseConfig } from '../../config/schema/common/controls/thumbnails';
import {
import type { ViewManagerEpoch } from '../../card-controller/view/types';
import type { ConditionStateManagerReadonlyInterface } from '../../condition-trigger/conditions/types';
import type { CameraConfig } from '../../config/schema/cameras';
import type { AdvancedCameraCardView } from '../../config/schema/common/const';
import type { ThumbnailsControlBaseConfig } from '../../config/schema/common/controls/thumbnails';
import type {
TimelineCoreConfig,
TimelinePanMode,
} from '../../config/schema/common/controls/timeline';
import { configDefaults } from '../../config/schema/types';
import { HomeAssistant } from '../../ha/types';
import type { HomeAssistant } from '../../ha/types';
import { stopEventFromActivatingCardWideActions } from '../../utils/action';
import { formatDateAndTime, isHoverableDevice, isTruthy } from '../../utils/basic';
import { findBestMediaTimeIndex } from '../../utils/find-best-media-time-index';
import { fireAdvancedCameraCardEvent } from '../../utils/fire-advanced-camera-card-event';
import { ViewMedia } from '../../view/item';
import type { ViewMedia } from '../../view/item';
import { ViewItemClassifier } from '../../view/item-classifier';
import { QueryResults } from '../../view/query-results';
import { UnifiedQuery } from '../../view/unified-query';
import type { UnifiedQuery } from '../../view/unified-query';
import { UnifiedQueryTransformer } from '../../view/unified-query-transformer';
import { mergeViewContext } from '../../view/view';
import { AdvancedCameraCardTimelineItem, TimelineDataSource } from './source';
import { ExtendedTimeline, TimelineItemClickAction, TimelineRangeChange } from './types';
import { TimelineDataSource, type AdvancedCameraCardTimelineItem } from './source';
import type {
ExtendedTimeline,
TimelineItemClickAction,
TimelineRangeChange,
} from './types';
// An event used to fetch data required for thumbnail rendering. See special
// note below on why this is necessary.
+8 -8
View File
@@ -1,23 +1,23 @@
import { add, sub } from 'date-fns';
import { DataSet } from 'vis-data';
import { IdType, TimelineItem, TimelineWindow } from 'vis-timeline/esnext';
import type { IdType, TimelineItem, TimelineWindow } from 'vis-timeline/esnext';
import { CameraManager } from '../../camera-manager/manager';
import type { CameraManager } from '../../camera-manager/manager';
import {
compressRanges,
ExpiringMemoryRangeSet,
MemoryRangeSet,
} from '../../camera-manager/range';
import { RecordingSegment } from '../../camera-manager/types';
import type { RecordingSegment } from '../../camera-manager/types';
import { capEndDate } from '../../camera-manager/utils/cap-end-date';
import { convertRangeToCacheFriendlyTimes } from '../../camera-manager/utils/range-to-cache-friendly';
import { FoldersManager } from '../../card-controller/folders/manager';
import { ConditionStateManagerReadonlyInterface } from '../../condition-trigger/conditions/types';
import { FolderConfig } from '../../config/schema/folders';
import type { FoldersManager } from '../../card-controller/folders/manager';
import type { ConditionStateManagerReadonlyInterface } from '../../condition-trigger/conditions/types';
import type { FolderConfig } from '../../config/schema/folders';
import { errorToConsole } from '../../utils/basic.js';
import { ViewItem, ViewMedia } from '../../view/item';
import type { ViewItem, ViewMedia } from '../../view/item';
import { ViewItemClassifier } from '../../view/item-classifier';
import { UnifiedQuery } from '../../view/unified-query';
import type { UnifiedQuery } from '../../view/unified-query';
import { UnifiedQueryBuilder } from '../../view/unified-query-builder';
import { UnifiedQueryRunner } from '../../view/unified-query-runner';
import { UnifiedQueryTransformer } from '../../view/unified-query-transformer';
+7 -7
View File
@@ -1,11 +1,11 @@
import { DateType, IdType, Timeline, TimelineWindow } from 'vis-timeline';
import type { DateType, IdType, Timeline, TimelineWindow } from 'vis-timeline';
import { CameraManager } from '../../camera-manager/manager';
import { ViewItemManager } from '../../card-controller/view/item-manager';
import { ViewManagerEpoch } from '../../card-controller/view/types';
import { CameraConfig } from '../../config/schema/cameras';
import { HomeAssistant } from '../../ha/types';
import { ViewMedia } from '../../view/item';
import type { CameraManager } from '../../camera-manager/manager';
import type { ViewItemManager } from '../../card-controller/view/item-manager';
import type { ViewManagerEpoch } from '../../card-controller/view/types';
import type { CameraConfig } from '../../config/schema/cameras';
import type { HomeAssistant } from '../../ha/types';
import type { ViewMedia } from '../../view/item';
// An event used to fetch data required for thumbnail rendering. See special
// note in AdvancedCameraCardTimelineThumbnail on why this is necessary.
+1 -1
View File
@@ -1,4 +1,4 @@
import { PartialDeep } from 'type-fest';
import type { PartialDeep } from 'type-fest';
export const ZOOM_DEFAULT_PAN_X = 50;
export const ZOOM_DEFAULT_PAN_Y = 50;
+6 -3
View File
@@ -1,16 +1,19 @@
import Panzoom, { PanzoomEventDetail, PanzoomObject } from '@dermotduffy/panzoom';
import Panzoom, {
type PanzoomEventDetail,
type PanzoomObject,
} from '@dermotduffy/panzoom';
import { round, throttle } from 'lodash-es';
import { arefloatsApproximatelyEqual, isHoverableDevice } from '../../utils/basic';
import { fireAdvancedCameraCardEvent } from '../../utils/fire-advanced-camera-card-event';
import {
isZoomEmpty,
PartialZoomSettings,
ZOOM_DEFAULT_PAN_X,
ZOOM_DEFAULT_PAN_Y,
ZOOM_DEFAULT_SCALE,
ZOOM_PRECISION,
ZoomSettingsObserved,
type PartialZoomSettings,
type ZoomSettingsObserved,
} from './types';
export class ZoomController {
+3 -3
View File
@@ -1,8 +1,8 @@
import { ViewContext } from 'view';
import type { ViewContext } from 'view';
import { MergeContextViewModifier } from '../../card-controller/view/modifiers/merge-context.js';
import { ViewManagerInterface } from '../../card-controller/view/types.js';
import { PartialZoomSettings, ZoomSettingsObserved } from './types.js';
import type { ViewManagerInterface } from '../../card-controller/view/types.js';
import type { PartialZoomSettings, ZoomSettingsObserved } from './types.js';
interface ZoomViewContext {
observed?: ZoomSettingsObserved;