Split automations into HA-style `triggers`, ongoing `conditions`, and
`actions`, with compatibility migrations for existing Advanced Camera
Card configs.
## Summary
At a glance (details below):
- **Added** `triggers:` -- a required, HA-shaped block: stock `state` /
`numeric_state` / `template` plus card-specific triggers (`camera`,
`view`, `fullscreen`, ...).
- **Added** the HA-native `if` / `then` / `else` action.
- **Removed** `actions_not` (replaced by `if` / `then` / `else`).
- **Removed** the ambient `advanced_camera_card` template namespace (use
`acc` instead).
- **Changed** the trigger template surface to a top-level `trigger.*`
variable (as in HA); the nested `acc.trigger.*` paths are removed.
- **Changed** `conditions:` to ongoing gates only -- they no longer wake
an automation, and change-only forms (`config`, valueless `camera` /
`view` / `state`) become triggers, not conditions.
- **Changed** action templates to render per step, so a later action
sees state an earlier one changed.
- **Compatibility:** HA-shaped YAML is accepted (singular keys,
single-or-list, `and` / `or` / `not` shorthand, `entity` / `entity_id`).
- **Migration:** existing configs upgrade automatically; anything that
cannot be converted faithfully is recorded under `__UPGRADE_FAILURE__`
for manual fixup.
## Breaking Changes
### 1. Automations now require triggers
Before this PR, `automations[].conditions` served two roles:
- They decided whether the automation should run.
- They also acted as the thing that woke the automation up.
After this PR:
- `triggers` wake the automation.
- `conditions` only gate it at the instant a trigger fires.
Most existing automations are migrated automatically from `conditions:`
to `triggers:`.
### 2. `actions_not` is retired
Legacy `actions_not` is replaced by an HA-style `if` action with `then`
/ `else`.
Faithful conversions are automatic. Cases that cannot be faithfully
converted are recorded under `__UPGRADE_FAILURE__.automations` and must
be migrated manually.
### 3. Template surface aligned with Home Assistant
Two related template changes, both auto-migrated:
- **Top-level `trigger.*`.** Automation actions now receive a top-level
`trigger` template variable, like Home Assistant. Legacy nested paths
such as `acc.trigger.state.to` and
`advanced_camera_card.trigger.camera.to` are migrated automatically when
they appear inside template strings.
- **The ambient `advanced_camera_card` template namespace is removed.**
The long-form ambient namespace (`advanced_camera_card.camera`,
`advanced_camera_card.view`, `advanced_camera_card.config`) is retired
in favour of its shorter `acc` alias -- supported since v7.1.0, and the
only spelling the new trigger surface uses. Existing templates are
migrated automatically by rewriting the `advanced_camera_card.` prefix
to `acc.`.
### 4. Trigger-only condition forms are no longer valid conditions
Some legacy "conditions" were really change detectors. These are now
triggers only:
- `condition: config`
- valueless `camera`
- valueless `view`
- valueless `state` / picture-elements state condition with neither
`state` nor `state_not`
These are automatically promoted in automations and stripped from
overrides/elements where they would no longer be meaningful as ongoing
conditions.
### 5. Template truthiness now follows Home Assistant behavior
Template conditions and template triggers intentionally use different
truthiness rules, matching HA:
- A template condition passes only when the rendered value is `true`
(case-insensitive), matching HA's `condition.py`.
- A template trigger uses HA's broader `result_as_boolean` coercion: a
non-zero number, or `1` / `true` / `yes` / `on` / `enable`
(case-insensitive), counts as true.
### 6. Action templates render when each action executes
Action templates are now rendered per action step, not once for the
whole sequence. This means a later action can see card-local state
changed by an earlier action in the same sequence.
The `trigger` context is fixed for the automation run. HA entity state
updates still depend on the frontend receiving updated HASS state over
the websocket.
## Automatic Migrations
### Automation `conditions:` to `triggers:`
Simple legacy automation:
```yaml
# Before
automations:
- conditions:
- condition: fullscreen
fullscreen: true
actions:
- action: custom:advanced-camera-card-action
advanced_camera_card_action: substream_on
```
```yaml
# After, automatic
automations:
- triggers:
- trigger: fullscreen
fullscreen: true
actions:
- action: custom:advanced-camera-card-action
advanced_camera_card_action: substream_on
```
State conditions become HA-style state triggers:
```yaml
# Before
automations:
- conditions:
- condition: state
entity_id: binary_sensor.front_door
state: 'on'
actions:
- action: custom:advanced-camera-card-action
advanced_camera_card_action: live
```
```yaml
# After, automatic
automations:
- triggers:
- trigger: state
entity_id: binary_sensor.front_door
to: 'on'
actions:
- action: custom:advanced-camera-card-action
advanced_camera_card_action: live
```
Multiple conditions become both triggers and ongoing conditions:
```yaml
# Before
automations:
- conditions:
- condition: camera
cameras: [front_door]
- condition: fullscreen
fullscreen: true
actions:
- action: custom:advanced-camera-card-action
advanced_camera_card_action: substream_on
```
```yaml
# After, automatic
automations:
- triggers:
- trigger: camera
cameras: [front_door]
- trigger: fullscreen
fullscreen: true
conditions:
- condition: camera
cameras: [front_door]
- condition: fullscreen
fullscreen: true
actions:
- action: custom:advanced-camera-card-action
advanced_camera_card_action: substream_on
```
The flattened trigger list is an implicit OR. The retained `conditions:`
list is an implicit AND checked when any trigger fires.
### Trigger-only legacy conditions
Legacy `config` conditions become `config` triggers:
```yaml
# Before
automations:
- conditions:
- condition: config
paths: [menu.style]
actions:
- action: custom:advanced-camera-card-action
advanced_camera_card_action: status_bar
```
```yaml
# After, automatic
automations:
- triggers:
- trigger: config
paths: [menu.style]
actions:
- action: custom:advanced-camera-card-action
advanced_camera_card_action: status_bar
```
Trigger-only leaves are removed from retained `conditions:` blocks
because they no longer describe an ongoing state.
### `actions_not` to `if` / `then` / `else`
```yaml
# Before
automations:
- conditions:
- condition: state
entity_id: input_boolean.camera_alerts
state: 'on'
actions:
- action: custom:advanced-camera-card-action
advanced_camera_card_action: live
actions_not:
- action: none
```
```yaml
# After, automatic
automations:
- triggers:
- trigger: state
entity_id: input_boolean.camera_alerts
actions:
- if:
- condition: state
entity_id: input_boolean.camera_alerts
state: 'on'
then:
- action: custom:advanced-camera-card-action
advanced_camera_card_action: live
else:
- action: none
```
If the legacy automation had no conditions, or only trigger-only
conditions, `actions_not` is dropped because the old `else` branch could
not be reproduced as an ongoing predicate.
### Trigger template paths
```yaml
# Before
message: 'Door is {{ acc.trigger.state.to }} from {{ acc.trigger.state.from }}'
```
```yaml
# After, automatic
message: 'Door is {{ trigger.to_state.state }} from {{ trigger.from_state.state }}'
```
Path rewrites performed automatically:
| Old path | New path |
| -------------------------- | -------------------------- |
| `acc.trigger.state.entity` | `trigger.entity_id` |
| `acc.trigger.state.from` | `trigger.from_state.state` |
| `acc.trigger.state.to` | `trigger.to_state.state` |
| `acc.trigger.camera.from` | `trigger.from_acc.camera` |
| `acc.trigger.camera.to` | `trigger.to_acc.camera` |
| `acc.trigger.view.from` | `trigger.from_acc.view` |
| `acc.trigger.view.to` | `trigger.to_acc.view` |
| `acc.trigger.config.from` | `trigger.from_acc.config` |
| `acc.trigger.config.to` | `trigger.to_acc.config` |
The same rewrites are applied for the older
`advanced_camera_card.trigger.*` namespace.
### Ambient template namespace
Any remaining long-form ambient `advanced_camera_card.*` references
(outside the trigger surface) are rewritten to the `acc.*` alias:
```yaml
# Before
title: 'Now viewing {{ advanced_camera_card.camera }}'
```
```yaml
# After, automatic
title: 'Now viewing {{ acc.camera }}'
```
## Manual Migration Cases
### `__UPGRADE_FAILURE__.automations`
If a legacy automation cannot be converted faithfully, the original
automation is recorded under:
```yaml
__UPGRADE_FAILURE__:
automations:
- ...
```
These entries require manual migration.
The main known case is legacy `actions_not` with a condition whose
trigger can only fire on a rising edge, such as:
- `condition: template`
- `condition: screen`
- `condition: numeric_state` without an entity-backed state to watch
Those conditions can start the `then` branch, but cannot reliably start
the `else` branch when they stop matching.
### Unsupported HA conditions and triggers
This PR aligns the card with HA where supported, but it is not a full HA
automation engine.
Unsupported HA condition families include:
- `time`
- `zone`
- `sun`
- `location`
- `device`
- `condition: trigger`
Unsupported HA trigger platforms include:
- `event`
- `time`
- `time_pattern`
- `sun`
- `zone`
- `calendar`
- `webhook`
- `tag`
- `device`
- `mqtt`
The card-specific camera `triggers:` feature (which auto-selects and
wakes the card on camera events such as motion) is a separate feature
from automation `triggers:`, despite the shared word.
### Trigger IDs and variables
HA keys such as `id`, `alias`, and `variables` are accepted so pasted HA
YAML validates, but they are ignored by the card. There is no
`trigger.id` support in this PR.
## New Compatibility Features
This PR also makes card config more forgiving for HA-style YAML:
- `trigger`, `condition`, and `action` singular keys are accepted and
normalized to `triggers`, `conditions`, and `actions`.
- Single trigger, condition, and action objects are accepted where lists
are expected.
- `if`, `then`, and `else` accept a single item or a list.
- Composite condition shorthand is accepted:
- `{ and: [...] }`
- `{ or: [...] }`
- `{ not: [...] }`
- `{ condition: [...] }` as an implicit AND
- State conditions resolve expected state values that name another
entity, matching HA/Lovelace behavior.
- Both `entity` and `entity_id` are accepted on state and numeric
conditions and triggers (a superset of HA's two dialects), so there is
no forced rename.
- `state_not` remains supported as a card/Lovelace-friendly extension.
## Trigger Payloads
Automation action templates receive a top-level `trigger` object.
For stock `state` and `numeric_state` triggers:
```yaml
trigger.platform
trigger.entity_id
trigger.entity
trigger.from_state
trigger.to_state
```
For template triggers:
```yaml
trigger.platform
```
For card-specific triggers:
```yaml
trigger.platform # "acc"
trigger.type
trigger.from_acc
trigger.to_acc
```
The card does not currently expose HA's `id`, `idx`, `for`, `attribute`,
`above`, `below`, or `alias` trigger fields.
BREAKING CHANGE: Automations now follow Home Assistant's `triggers:` /
`conditions:` / `actions:` model. Automations require a `triggers:`
block and `conditions:` no longer wake an automation; `actions_not` is
removed in favour of an `if` / `then` / `else` action; the nested
`acc.trigger.*` template paths and the ambient `advanced_camera_card`
template namespace are removed (use the top-level `trigger.*` surface
and the `acc` alias); trigger-only condition forms (`config`, valueless
`camera` / `view` / `state`) are no longer valid conditions; and
template-condition vs template-trigger truthiness now follow HA.
Existing configs are upgraded automatically where a faithful conversion
exists; anything that cannot be converted is recorded under
`__UPGRADE_FAILURE__` for manual migration.
---------
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
497 lines
29 KiB
TypeScript
497 lines
29 KiB
TypeScript
export const REPO_URL = 'https://github.com/dermotduffy/advanced-camera-card' as const;
|
|
export const DOCS_URL = 'https://card.camera' as const;
|
|
export const TROUBLESHOOTING_URL = `${DOCS_URL}/#/troubleshooting` as const;
|
|
export const TROUBLESHOOTING_CONFIG_UPGRADE_URL =
|
|
`${TROUBLESHOOTING_URL}?id=configuration-upgrade-available` as const;
|
|
export const TROUBLESHOOTING_CONFIG_UPGRADE_FAILURE_URL =
|
|
`${TROUBLESHOOTING_URL}?id=configuration-could-not-be-fully-upgraded` as const;
|
|
export const TROUBLESHOOTING_LEGACY_RESOURCE_URL =
|
|
`${TROUBLESHOOTING_URL}?id=legacy-dashboard-resource-detected` as const;
|
|
export const TROUBLESHOOTING_MEDIA_URL =
|
|
`${TROUBLESHOOTING_URL}?id=media-does-not-load` as const;
|
|
|
|
export const CONF_AUTOMATIONS = 'automations' as const;
|
|
|
|
export const CONF_CAMERAS = 'cameras' as const;
|
|
|
|
export const CONF_CAMERAS_ARRAY_ALWAYS_ERROR_IF_ENTITY_UNAVAILABLE =
|
|
`${CONF_CAMERAS}.#.always_error_if_entity_unavailable` as const;
|
|
export const CONF_CAMERAS_ARRAY_CAMERA_ENTITY =
|
|
`${CONF_CAMERAS}.#.camera_entity` as const;
|
|
export const CONF_CAMERAS_ARRAY_FRIGATE_CAMERA_NAME =
|
|
`${CONF_CAMERAS}.#.frigate.camera_name` as const;
|
|
export const CONF_CAMERAS_ARRAY_CAPABILITIES_DISABLE =
|
|
`${CONF_CAMERAS}.#.capabilities.disable` as const;
|
|
export const CONF_CAMERAS_ARRAY_CAPABILITIES_DISABLE_EXCEPT =
|
|
`${CONF_CAMERAS}.#.capabilities.disable_except` as const;
|
|
export const CONF_CAMERAS_ARRAY_CAPABILITIES_FORCE =
|
|
`${CONF_CAMERAS}.#.capabilities.force` as const;
|
|
export const CONF_CAMERAS_ARRAY_CAST_METHOD = `${CONF_CAMERAS}.#.cast.method` as const;
|
|
export const CONF_CAMERAS_ARRAY_CAST_DASHBOARD_DASHBOARD_PATH =
|
|
`${CONF_CAMERAS}.#.cast.dashboard.dashboard_path` as const;
|
|
export const CONF_CAMERAS_ARRAY_CAST_DASHBOARD_VIEW_PATH =
|
|
`${CONF_CAMERAS}.#.cast.dashboard.view_path` as const;
|
|
export const CONF_CAMERAS_ARRAY_DIMENSIONS_ASPECT_RATIO =
|
|
`${CONF_CAMERAS}.#.dimensions.aspect_ratio` as const;
|
|
export const CONF_CAMERAS_ARRAY_DIMENSIONS_ROTATION =
|
|
`${CONF_CAMERAS}.#.dimensions.rotation` as const;
|
|
export const CONF_CAMERAS_ARRAY_FRIGATE_CLIENT_ID =
|
|
`${CONF_CAMERAS}.#.frigate.client_id` as const;
|
|
export const CONF_CAMERAS_ARRAY_FRIGATE_LABELS =
|
|
`${CONF_CAMERAS}.#.frigate.labels` as const;
|
|
export const CONF_CAMERAS_ARRAY_FRIGATE_URL = `${CONF_CAMERAS}.#.frigate.url` as const;
|
|
export const CONF_CAMERAS_ARRAY_FRIGATE_ZONES =
|
|
`${CONF_CAMERAS}.#.frigate.zones` as const;
|
|
export const CONF_CAMERAS_ARRAY_GO2RTC_METADATA_FETCH_TIMEOUT_SECONDS =
|
|
`${CONF_CAMERAS}.#.go2rtc.metadata_fetch_timeout_seconds` as const;
|
|
export const CONF_CAMERAS_ARRAY_GO2RTC_MODES = `${CONF_CAMERAS}.#.go2rtc.modes` as const;
|
|
export const CONF_CAMERAS_ARRAY_GO2RTC_STREAM =
|
|
`${CONF_CAMERAS}.#.go2rtc.stream` as const;
|
|
export const CONF_CAMERAS_ARRAY_GO2RTC_URL = `${CONF_CAMERAS}.#.go2rtc.url` as const;
|
|
export const CONF_CAMERAS_ARRAY_ICON = `${CONF_CAMERAS}.#.icon` as const;
|
|
export const CONF_CAMERAS_ARRAY_ID = `${CONF_CAMERAS}.#.id` as const;
|
|
export const CONF_CAMERAS_ARRAY_IMAGE_ENTITY = `${CONF_CAMERAS}.#.image.entity` as const;
|
|
export const CONF_CAMERAS_ARRAY_IMAGE_ENTITY_PARAMETERS =
|
|
`${CONF_CAMERAS}.#.image.entity_parameters` as const;
|
|
export const CONF_CAMERAS_ARRAY_IMAGE_MODE = `${CONF_CAMERAS}.#.image.mode` as const;
|
|
export const CONF_CAMERAS_ARRAY_IMAGE_REFRESH_SECONDS =
|
|
`${CONF_CAMERAS}.#.image.refresh_seconds` as const;
|
|
export const CONF_CAMERAS_ARRAY_IMAGE_URL = `${CONF_CAMERAS}.#.image.url` as const;
|
|
export const CONF_CAMERAS_ARRAY_MOTIONEYE_IMAGES_DIRECTORY_PATTERN =
|
|
`${CONF_CAMERAS}.#.motioneye.images.directory_pattern` as const;
|
|
export const CONF_CAMERAS_ARRAY_MOTIONEYE_IMAGES_FILE_PATTERN =
|
|
`${CONF_CAMERAS}.#.motioneye.images.file_pattern` as const;
|
|
export const CONF_CAMERAS_ARRAY_MOTIONEYE_MOVIES_DIRECTORY_PATTERN =
|
|
`${CONF_CAMERAS}.#.motioneye.movies.directory_pattern` as const;
|
|
export const CONF_CAMERAS_ARRAY_MOTIONEYE_MOVIES_FILE_PATTERN =
|
|
`${CONF_CAMERAS}.#.motioneye.movies.file_pattern` as const;
|
|
export const CONF_CAMERAS_ARRAY_MOTIONEYE_URL =
|
|
`${CONF_CAMERAS}.#.motioneye.url` as const;
|
|
export const CONF_CAMERAS_ARRAY_TITLE = `${CONF_CAMERAS}.#.title` as const;
|
|
export const CONF_CAMERAS_ARRAY_WEBRTC_CARD_ENTITY =
|
|
`${CONF_CAMERAS}.#.webrtc_card.entity` as const;
|
|
export const CONF_CAMERAS_ARRAY_WEBRTC_CARD_URL =
|
|
`${CONF_CAMERAS}.#.webrtc_card.url` as const;
|
|
export const CONF_CAMERAS_ARRAY_LIVE_PROVIDER =
|
|
`${CONF_CAMERAS}.#.live_provider` as const;
|
|
export const CONF_CAMERAS_ARRAY_DEPENDENCIES_CAMERAS =
|
|
`${CONF_CAMERAS}.#.dependencies.cameras` as const;
|
|
export const CONF_CAMERAS_ARRAY_DEPENDENCIES_ALL_CAMERAS =
|
|
`${CONF_CAMERAS}.#.dependencies.all_cameras` as const;
|
|
export const CONF_CAMERAS_ARRAY_DIMENSIONS_LAYOUT_FIT =
|
|
`${CONF_CAMERAS}.#.dimensions.layout.fit` as const;
|
|
export const CONF_CAMERAS_ARRAY_DIMENSIONS_LAYOUT_PAN_X =
|
|
`${CONF_CAMERAS}.#.dimensions.layout.pan.x` as const;
|
|
export const CONF_CAMERAS_ARRAY_DIMENSIONS_LAYOUT_PAN_Y =
|
|
`${CONF_CAMERAS}.#.dimensions.layout.pan.y` as const;
|
|
export const CONF_CAMERAS_ARRAY_DIMENSIONS_LAYOUT_POSITION_X =
|
|
`${CONF_CAMERAS}.#.dimensions.layout.position.x` as const;
|
|
export const CONF_CAMERAS_ARRAY_DIMENSIONS_LAYOUT_POSITION_Y =
|
|
`${CONF_CAMERAS}.#.dimensions.layout.position.y` as const;
|
|
export const CONF_CAMERAS_ARRAY_DIMENSIONS_LAYOUT_VIEW_BOX_TOP =
|
|
`${CONF_CAMERAS}.#.dimensions.layout.view_box.top` as const;
|
|
export const CONF_CAMERAS_ARRAY_DIMENSIONS_LAYOUT_VIEW_BOX_BOTTOM =
|
|
`${CONF_CAMERAS}.#.dimensions.layout.view_box.bottom` as const;
|
|
export const CONF_CAMERAS_ARRAY_DIMENSIONS_LAYOUT_VIEW_BOX_LEFT =
|
|
`${CONF_CAMERAS}.#.dimensions.layout.view_box.left` as const;
|
|
export const CONF_CAMERAS_ARRAY_DIMENSIONS_LAYOUT_VIEW_BOX_RIGHT =
|
|
`${CONF_CAMERAS}.#.dimensions.layout.view_box.right` as const;
|
|
export const CONF_CAMERAS_ARRAY_DIMENSIONS_LAYOUT_ZOOM_FACTOR =
|
|
`${CONF_CAMERAS}.#.dimensions.layout.zoom` as const;
|
|
export const CONF_CAMERAS_ARRAY_PROXY_DYNAMIC =
|
|
`${CONF_CAMERAS}.#.proxy.dynamic` as const;
|
|
export const CONF_CAMERAS_ARRAY_PROXY_LIVE = `${CONF_CAMERAS}.#.proxy.live` as const;
|
|
export const CONF_CAMERAS_ARRAY_PROXY_MEDIA = `${CONF_CAMERAS}.#.proxy.media` as const;
|
|
export const CONF_CAMERAS_ARRAY_PROXY_SSL_CIPHERS =
|
|
`${CONF_CAMERAS}.#.proxy.ssl_ciphers` as const;
|
|
export const CONF_CAMERAS_ARRAY_PROXY_SSL_VERIFICATION =
|
|
`${CONF_CAMERAS}.#.proxy.ssl_verification` as const;
|
|
export const CONF_CAMERAS_ARRAY_REOLINK_MEDIA_RESOLUTION =
|
|
`${CONF_CAMERAS}.#.reolink.media_resolution` as const;
|
|
export const CONF_CAMERAS_ARRAY_REOLINK_URL = `${CONF_CAMERAS}.#.reolink.url` as const;
|
|
export const CONF_CAMERAS_ARRAY_TRIGGERS_MOTION =
|
|
`${CONF_CAMERAS}.#.triggers.motion` as const;
|
|
export const CONF_CAMERAS_ARRAY_TRIGGERS_OCCUPANCY =
|
|
`${CONF_CAMERAS}.#.triggers.occupancy` as const;
|
|
export const CONF_CAMERAS_ARRAY_TRIGGERS_DOORBELL =
|
|
`${CONF_CAMERAS}.#.triggers.doorbell` as const;
|
|
export const CONF_CAMERAS_ARRAY_TRIGGERS_ENTITIES =
|
|
`${CONF_CAMERAS}.#.triggers.entities` as const;
|
|
export const CONF_CAMERAS_ARRAY_TRIGGERS_EVENTS =
|
|
`${CONF_CAMERAS}.#.triggers.events` as const;
|
|
export const CONF_CAMERAS_ARRAY_TRIGGERS_MEDIA_EVENTS =
|
|
`${CONF_CAMERAS}.#.triggers.media_events` as const;
|
|
export const CONF_CAMERAS_ARRAY_TRIGGERS_REVIEWS_SEVERITIES =
|
|
`${CONF_CAMERAS}.#.triggers.reviews.severities` as const;
|
|
export const CONF_CAMERAS_ARRAY_TRIGGERS_REVIEWS_DESCRIPTION =
|
|
`${CONF_CAMERAS}.#.triggers.reviews.description` as const;
|
|
export const CONF_CAMERAS_ARRAY_MEDIA_TYPE = `${CONF_CAMERAS}.#.media.type` as const;
|
|
export const CONF_CAMERAS_ARRAY_MEDIA_EVENTS_TYPE =
|
|
`${CONF_CAMERAS}.#.media.events_type` as const;
|
|
export const CONF_CAMERAS_ARRAY_MEDIA_REVIEWED =
|
|
`${CONF_CAMERAS}.#.media.reviewed` as const;
|
|
export const CONF_CAMERAS_ARRAY_MEDIA_FOLDERS =
|
|
`${CONF_CAMERAS}.#.media.folders` as const;
|
|
|
|
const CONF_CAMERAS_GLOBAL = 'cameras_global' as const;
|
|
export const CONF_CAMERAS_GLOBAL_LIVE_PROVIDER =
|
|
`${CONF_CAMERAS_GLOBAL}.live_provider` as const;
|
|
export const CONF_CAMERAS_GLOBAL_TRIGGERS_DOORBELL =
|
|
`${CONF_CAMERAS_GLOBAL}.triggers.doorbell` as const;
|
|
export const CONF_CAMERAS_GLOBAL_IMAGE_REFRESH_SECONDS =
|
|
`${CONF_CAMERAS_GLOBAL}.image.refresh_seconds` as const;
|
|
export const CONF_CAMERAS_GLOBAL_DIMENSIONS_LAYOUT =
|
|
`${CONF_CAMERAS_GLOBAL}.dimensions.layout` as const;
|
|
export const CONF_CAMERAS_GLOBAL_PTZ = `${CONF_CAMERAS_GLOBAL}.ptz` as const;
|
|
|
|
export const CONF_ELEMENTS = 'elements' as const;
|
|
|
|
export const CONF_FOLDERS = 'folders' as const;
|
|
export const CONF_FOLDERS_ARRAY_HA_URL = `${CONF_FOLDERS}.#.ha.url` as const;
|
|
export const CONF_FOLDERS_ARRAY_ICON = `${CONF_FOLDERS}.#.icon` as const;
|
|
export const CONF_FOLDERS_ARRAY_ID = `${CONF_FOLDERS}.#.id` as const;
|
|
export const CONF_FOLDERS_ARRAY_TITLE = `${CONF_FOLDERS}.#.title` as const;
|
|
export const CONF_FOLDERS_ARRAY_TYPE = `${CONF_FOLDERS}.#.type` as const;
|
|
|
|
const CONF_VIEW = 'view' as const;
|
|
export const CONF_VIEW_CAMERA_SELECT = `${CONF_VIEW}.camera_select` as const;
|
|
export const CONF_VIEW_DEFAULT = `${CONF_VIEW}.default` as const;
|
|
export const CONF_VIEW_DIM = `${CONF_VIEW}.dim` as const;
|
|
export const CONF_VIEW_INTERACTION_SECONDS = `${CONF_VIEW}.interaction_seconds` as const;
|
|
export const CONF_VIEW_ISSUES = `${CONF_VIEW}.issues` as const;
|
|
export const CONF_VIEW_ISSUES_INTERACTION_MODE =
|
|
`${CONF_VIEW_ISSUES}.interaction_mode` as const;
|
|
export const CONF_VIEW_ISSUES_RETRY_SECONDS =
|
|
`${CONF_VIEW_ISSUES}.retry_seconds` as const;
|
|
export const CONF_VIEW_KEYBOARD_SHORTCUTS = `${CONF_VIEW}.keyboard_shortcuts` as const;
|
|
export const CONF_VIEW_KEYBOARD_SHORTCUTS_ENABLED =
|
|
`${CONF_VIEW}.keyboard_shortcuts.enabled` as const;
|
|
export const CONF_VIEW_KEYBOARD_SHORTCUTS_PTZ_LEFT =
|
|
`${CONF_VIEW_KEYBOARD_SHORTCUTS}.ptz_left` as const;
|
|
export const CONF_VIEW_KEYBOARD_SHORTCUTS_PTZ_RIGHT =
|
|
`${CONF_VIEW_KEYBOARD_SHORTCUTS}.ptz_right` as const;
|
|
export const CONF_VIEW_KEYBOARD_SHORTCUTS_PTZ_UP =
|
|
`${CONF_VIEW_KEYBOARD_SHORTCUTS}.ptz_up` as const;
|
|
export const CONF_VIEW_KEYBOARD_SHORTCUTS_PTZ_DOWN =
|
|
`${CONF_VIEW_KEYBOARD_SHORTCUTS}.ptz_down` as const;
|
|
export const CONF_VIEW_KEYBOARD_SHORTCUTS_PTZ_ZOOM_IN =
|
|
`${CONF_VIEW_KEYBOARD_SHORTCUTS}.ptz_zoom_in` as const;
|
|
export const CONF_VIEW_KEYBOARD_SHORTCUTS_PTZ_ZOOM_OUT =
|
|
`${CONF_VIEW_KEYBOARD_SHORTCUTS}.ptz_zoom_out` as const;
|
|
export const CONF_VIEW_KEYBOARD_SHORTCUTS_PTZ_HOME =
|
|
`${CONF_VIEW_KEYBOARD_SHORTCUTS}.ptz_home` as const;
|
|
export const CONF_VIEW_DEFAULT_CYCLE_CAMERA =
|
|
`${CONF_VIEW}.default_cycle_camera` as const;
|
|
export const CONF_VIEW_DEFAULT_RESET = `${CONF_VIEW}.default_reset` as const;
|
|
export const CONF_VIEW_DEFAULT_RESET_INTERACTION_MODE =
|
|
`${CONF_VIEW_DEFAULT_RESET}.interaction_mode` as const;
|
|
export const CONF_VIEW_DEFAULT_RESET_EVERY_SECONDS =
|
|
`${CONF_VIEW_DEFAULT_RESET}.every_seconds` as const;
|
|
export const CONF_VIEW_DEFAULT_RESET_ENTITIES =
|
|
`${CONF_VIEW_DEFAULT_RESET}.entities` as const;
|
|
export const CONF_VIEW_DEFAULT_RESET_AFTER_INTERACTION =
|
|
`${CONF_VIEW_DEFAULT_RESET}.after_interaction` as const;
|
|
export const CONF_VIEW_THEME_THEMES = `${CONF_VIEW}.theme.themes` as const;
|
|
export const CONF_VIEW_TRIGGERS = `${CONF_VIEW}.triggers` as const;
|
|
export const CONF_VIEW_TRIGGERS_SHOW_TRIGGER_STATUS =
|
|
`${CONF_VIEW_TRIGGERS}.show_trigger_status` as const;
|
|
export const CONF_VIEW_TRIGGERS_FILTER_SELECTED_CAMERA =
|
|
`${CONF_VIEW_TRIGGERS}.filter_selected_camera` as const;
|
|
export const CONF_VIEW_TRIGGERS_UNTRIGGER_DELAY_SECONDS =
|
|
`${CONF_VIEW_TRIGGERS}.untrigger_delay_seconds` as const;
|
|
export const CONF_VIEW_TRIGGERS_UNTRIGGER_FORCE_SECONDS =
|
|
`${CONF_VIEW_TRIGGERS}.untrigger_force_seconds` as const;
|
|
export const CONF_VIEW_TRIGGERS_EVENT_HOLD_SECONDS =
|
|
`${CONF_VIEW_TRIGGERS}.event_hold_seconds` as const;
|
|
export const CONF_VIEW_TRIGGERS_ACTIONS = `${CONF_VIEW_TRIGGERS}.actions` as const;
|
|
export const CONF_VIEW_TRIGGERS_ACTIONS_INTERACTION_MODE =
|
|
`${CONF_VIEW_TRIGGERS_ACTIONS}.interaction_mode` as const;
|
|
export const CONF_VIEW_TRIGGERS_ACTIONS_TRIGGER =
|
|
`${CONF_VIEW_TRIGGERS_ACTIONS}.trigger` as const;
|
|
export const CONF_VIEW_TRIGGERS_ACTIONS_UNTRIGGER =
|
|
`${CONF_VIEW_TRIGGERS_ACTIONS}.untrigger` as const;
|
|
|
|
const CONF_MEDIA_GALLERY = 'media_gallery' as const;
|
|
export const CONF_MEDIA_GALLERY_CONTROLS_FILTER_MODE =
|
|
`${CONF_MEDIA_GALLERY}.controls.filter.mode` as const;
|
|
export const CONF_MEDIA_GALLERY_CONTROLS_THUMBNAILS_SHOW_DETAILS =
|
|
`${CONF_MEDIA_GALLERY}.controls.thumbnails.show_details` as const;
|
|
export const CONF_MEDIA_GALLERY_CONTROLS_THUMBNAILS_SHOW_DOWNLOAD_CONTROL =
|
|
`${CONF_MEDIA_GALLERY}.controls.thumbnails.show_download_control` as const;
|
|
export const CONF_MEDIA_GALLERY_CONTROLS_THUMBNAILS_SHOW_FAVORITE_CONTROL =
|
|
`${CONF_MEDIA_GALLERY}.controls.thumbnails.show_favorite_control` as const;
|
|
export const CONF_MEDIA_GALLERY_CONTROLS_THUMBNAILS_SHOW_TIMELINE_CONTROL =
|
|
`${CONF_MEDIA_GALLERY}.controls.thumbnails.show_timeline_control` as const;
|
|
export const CONF_MEDIA_GALLERY_CONTROLS_THUMBNAILS_SHOW_REVIEW_CONTROL =
|
|
`${CONF_MEDIA_GALLERY}.controls.thumbnails.show_review_control` as const;
|
|
export const CONF_MEDIA_GALLERY_CONTROLS_THUMBNAILS_SHOW_INFO_CONTROL =
|
|
`${CONF_MEDIA_GALLERY}.controls.thumbnails.show_info_control` as const;
|
|
export const CONF_MEDIA_GALLERY_CONTROLS_THUMBNAILS_SIZE =
|
|
`${CONF_MEDIA_GALLERY}.controls.thumbnails.size` as const;
|
|
|
|
const CONF_MEDIA_VIEWER = 'media_viewer' as const;
|
|
export const CONF_MEDIA_VIEWER_AUTO_PLAY = `${CONF_MEDIA_VIEWER}.auto_play` as const;
|
|
export const CONF_MEDIA_VIEWER_AUTO_PAUSE = `${CONF_MEDIA_VIEWER}.auto_pause` as const;
|
|
export const CONF_MEDIA_VIEWER_AUTO_MUTE = `${CONF_MEDIA_VIEWER}.auto_mute` as const;
|
|
export const CONF_MEDIA_VIEWER_AUTO_UNMUTE = `${CONF_MEDIA_VIEWER}.auto_unmute` as const;
|
|
export const CONF_MEDIA_VIEWER_DISPLAY_MODE =
|
|
`${CONF_MEDIA_VIEWER}.display.mode` as const;
|
|
export const CONF_MEDIA_VIEWER_DISPLAY_GRID_COLUMNS =
|
|
`${CONF_MEDIA_VIEWER}.display.grid_columns` as const;
|
|
export const CONF_MEDIA_VIEWER_DISPLAY_GRID_MAX_COLUMNS =
|
|
`${CONF_MEDIA_VIEWER}.display.grid_max_columns` as const;
|
|
export const CONF_MEDIA_VIEWER_DISPLAY_GRID_SELECTED_POSITION =
|
|
`${CONF_MEDIA_VIEWER}.display.grid_selected_position` as const;
|
|
export const CONF_MEDIA_VIEWER_DISPLAY_GRID_SELECTED_WIDTH_FACTOR =
|
|
`${CONF_MEDIA_VIEWER}.display.grid_selected_width_factor` as const;
|
|
export const CONF_MEDIA_VIEWER_DRAGGABLE = `${CONF_MEDIA_VIEWER}.draggable` as const;
|
|
export const CONF_MEDIA_VIEWER_LAZY_LOAD = `${CONF_MEDIA_VIEWER}.lazy_load` as const;
|
|
export const CONF_MEDIA_VIEWER_SNAPSHOT_CLICK_PLAYS_CLIP =
|
|
`${CONF_MEDIA_VIEWER}.snapshot_click_plays_clip` as const;
|
|
export const CONF_MEDIA_VIEWER_TRANSITION_EFFECT =
|
|
`${CONF_MEDIA_VIEWER}.transition_effect` as const;
|
|
export const CONF_MEDIA_VIEWER_CONTROLS_BUILTIN =
|
|
`${CONF_MEDIA_VIEWER}.controls.builtin` as const;
|
|
export const CONF_MEDIA_VIEWER_CONTROLS_NEXT_PREVIOUS_AUTO_HIDE =
|
|
`${CONF_MEDIA_VIEWER}.controls.next_previous.auto_hide` as const;
|
|
export const CONF_MEDIA_VIEWER_CONTROLS_NEXT_PREVIOUS_STYLE =
|
|
`${CONF_MEDIA_VIEWER}.controls.next_previous.style` as const;
|
|
export const CONF_MEDIA_VIEWER_CONTROLS_NEXT_PREVIOUS_SIZE =
|
|
`${CONF_MEDIA_VIEWER}.controls.next_previous.size` as const;
|
|
export const CONF_MEDIA_VIEWER_CONTROLS_THUMBNAILS_MODE =
|
|
`${CONF_MEDIA_VIEWER}.controls.thumbnails.mode` as const;
|
|
export const CONF_MEDIA_VIEWER_CONTROLS_THUMBNAILS_SHOW_DETAILS =
|
|
`${CONF_MEDIA_VIEWER}.controls.thumbnails.show_details` as const;
|
|
export const CONF_MEDIA_VIEWER_CONTROLS_THUMBNAILS_SHOW_DOWNLOAD_CONTROL =
|
|
`${CONF_MEDIA_VIEWER}.controls.thumbnails.show_download_control` as const;
|
|
export const CONF_MEDIA_VIEWER_CONTROLS_THUMBNAILS_SHOW_FAVORITE_CONTROL =
|
|
`${CONF_MEDIA_VIEWER}.controls.thumbnails.show_favorite_control` as const;
|
|
export const CONF_MEDIA_VIEWER_CONTROLS_THUMBNAILS_SHOW_TIMELINE_CONTROL =
|
|
`${CONF_MEDIA_VIEWER}.controls.thumbnails.show_timeline_control` as const;
|
|
export const CONF_MEDIA_VIEWER_CONTROLS_THUMBNAILS_SHOW_REVIEW_CONTROL =
|
|
`${CONF_MEDIA_VIEWER}.controls.thumbnails.show_review_control` as const;
|
|
export const CONF_MEDIA_VIEWER_CONTROLS_THUMBNAILS_SHOW_INFO_CONTROL =
|
|
`${CONF_MEDIA_VIEWER}.controls.thumbnails.show_info_control` as const;
|
|
export const CONF_MEDIA_VIEWER_CONTROLS_THUMBNAILS_SIZE =
|
|
`${CONF_MEDIA_VIEWER}.controls.thumbnails.size` as const;
|
|
export const CONF_MEDIA_VIEWER_CONTROLS_TIMELINE_CLUSTERING_THRESHOLD =
|
|
`${CONF_MEDIA_VIEWER}.controls.timeline.clustering_threshold` as const;
|
|
|
|
export const CONF_MEDIA_VIEWER_CONTROLS_TIMELINE_FORMAT_24H =
|
|
`${CONF_MEDIA_VIEWER}.controls.timeline.format.24h` as const;
|
|
export const CONF_MEDIA_VIEWER_CONTROLS_TIMELINE_MODE =
|
|
`${CONF_MEDIA_VIEWER}.controls.timeline.mode` as const;
|
|
export const CONF_MEDIA_VIEWER_CONTROLS_TIMELINE_PAN_MODE =
|
|
`${CONF_MEDIA_VIEWER}.controls.timeline.pan_mode` as const;
|
|
export const CONF_MEDIA_VIEWER_CONTROLS_TIMELINE_SHOW_RECORDINGS =
|
|
`${CONF_MEDIA_VIEWER}.controls.timeline.show_recordings` as const;
|
|
export const CONF_MEDIA_VIEWER_CONTROLS_TIMELINE_STYLE =
|
|
`${CONF_MEDIA_VIEWER}.controls.timeline.style` as const;
|
|
export const CONF_MEDIA_VIEWER_CONTROLS_TIMELINE_WINDOW_SECONDS =
|
|
`${CONF_MEDIA_VIEWER}.controls.timeline.window_seconds` as const;
|
|
export const CONF_MEDIA_VIEWER_CONTROLS_WHEEL =
|
|
`${CONF_MEDIA_VIEWER}.controls.wheel` as const;
|
|
export const CONF_MEDIA_VIEWER_ZOOMABLE = `${CONF_MEDIA_VIEWER}.zoomable` as const;
|
|
|
|
const CONF_LIVE = 'live' as const;
|
|
export const CONF_LIVE_AUTO_PLAY = `${CONF_LIVE}.auto_play` as const;
|
|
export const CONF_LIVE_AUTO_PAUSE = `${CONF_LIVE}.auto_pause` as const;
|
|
export const CONF_LIVE_AUTO_MUTE = `${CONF_LIVE}.auto_mute` as const;
|
|
export const CONF_LIVE_AUTO_UNMUTE = `${CONF_LIVE}.auto_unmute` as const;
|
|
export const CONF_LIVE_CONTROLS_BUILTIN = `${CONF_LIVE}.controls.builtin` as const;
|
|
export const CONF_LIVE_CONTROLS_CALL_BUTTON_SIZE =
|
|
`${CONF_LIVE}.controls.call.button_size` as const;
|
|
export const CONF_LIVE_CONTROLS_CALL_LOCK = `${CONF_LIVE}.controls.call.lock` as const;
|
|
export const CONF_LIVE_CONTROLS_CALL_RINGTONE_REPEAT =
|
|
`${CONF_LIVE}.controls.call.ringtone.repeat` as const;
|
|
export const CONF_LIVE_CONTROLS_CALL_RINGTONE_TYPE =
|
|
`${CONF_LIVE}.controls.call.ringtone.type` as const;
|
|
export const CONF_LIVE_CONTROLS_CALL_RINGTONE_URL =
|
|
`${CONF_LIVE}.controls.call.ringtone.url` as const;
|
|
export const CONF_LIVE_CONTROLS_CALL_UNANSWERED_TIMEOUT_SECONDS =
|
|
`${CONF_LIVE}.controls.call.unanswered_timeout_seconds` as const;
|
|
export const CONF_LIVE_CONTROLS_NEXT_PREVIOUS_AUTO_HIDE =
|
|
`${CONF_LIVE}.controls.next_previous.auto_hide` as const;
|
|
export const CONF_LIVE_CONTROLS_NEXT_PREVIOUS_STYLE =
|
|
`${CONF_LIVE}.controls.next_previous.style` as const;
|
|
export const CONF_LIVE_CONTROLS_NEXT_PREVIOUS_SIZE =
|
|
`${CONF_LIVE}.controls.next_previous.size` as const;
|
|
export const CONF_LIVE_CONTROLS_PTZ_HIDE_HOME =
|
|
`${CONF_LIVE}.controls.ptz.hide_home` as const;
|
|
export const CONF_LIVE_CONTROLS_PTZ_HIDE_PAN_TILT =
|
|
`${CONF_LIVE}.controls.ptz.hide_pan_tilt` as const;
|
|
export const CONF_LIVE_CONTROLS_PTZ_HIDE_TYPE =
|
|
`${CONF_LIVE}.controls.ptz.hide_type` as const;
|
|
export const CONF_LIVE_CONTROLS_PTZ_HIDE_ZOOM =
|
|
`${CONF_LIVE}.controls.ptz.hide_zoom` as const;
|
|
export const CONF_LIVE_CONTROLS_PTZ_MODE = `${CONF_LIVE}.controls.ptz.mode` as const;
|
|
export const CONF_LIVE_CONTROLS_PTZ_ORIENTATION =
|
|
`${CONF_LIVE}.controls.ptz.orientation` as const;
|
|
export const CONF_LIVE_CONTROLS_PTZ_POSITION =
|
|
`${CONF_LIVE}.controls.ptz.position` as const;
|
|
export const CONF_LIVE_CONTROLS_PTZ_TYPE = `${CONF_LIVE}.controls.ptz.type` as const;
|
|
export const CONF_LIVE_CONTROLS_WHEEL = `${CONF_LIVE}.controls.wheel` as const;
|
|
|
|
export const CONF_LIVE_CONTROLS_THUMBNAILS_MODE =
|
|
`${CONF_LIVE}.controls.thumbnails.mode` as const;
|
|
export const CONF_LIVE_CONTROLS_THUMBNAILS_SIZE =
|
|
`${CONF_LIVE}.controls.thumbnails.size` as const;
|
|
export const CONF_LIVE_CONTROLS_THUMBNAILS_SHOW_DETAILS =
|
|
`${CONF_LIVE}.controls.thumbnails.show_details` as const;
|
|
export const CONF_LIVE_CONTROLS_THUMBNAILS_SHOW_DOWNLOAD_CONTROL =
|
|
`${CONF_LIVE}.controls.thumbnails.show_download_control` as const;
|
|
export const CONF_LIVE_CONTROLS_THUMBNAILS_SHOW_FAVORITE_CONTROL =
|
|
`${CONF_LIVE}.controls.thumbnails.show_favorite_control` as const;
|
|
export const CONF_LIVE_CONTROLS_THUMBNAILS_SHOW_TIMELINE_CONTROL =
|
|
`${CONF_LIVE}.controls.thumbnails.show_timeline_control` as const;
|
|
export const CONF_LIVE_CONTROLS_THUMBNAILS_SHOW_REVIEW_CONTROL =
|
|
`${CONF_LIVE}.controls.thumbnails.show_review_control` as const;
|
|
export const CONF_LIVE_CONTROLS_THUMBNAILS_SHOW_INFO_CONTROL =
|
|
`${CONF_LIVE}.controls.thumbnails.show_info_control` as const;
|
|
export const CONF_LIVE_CONTROLS_TIMELINE_CLUSTERING_THRESHOLD =
|
|
`${CONF_LIVE}.controls.timeline.clustering_threshold` as const;
|
|
export const CONF_LIVE_CONTROLS_TIMELINE_FORMAT_24H =
|
|
`${CONF_LIVE}.controls.timeline.format.24h` as const;
|
|
export const CONF_LIVE_CONTROLS_TIMELINE_MODE =
|
|
`${CONF_LIVE}.controls.timeline.mode` as const;
|
|
export const CONF_LIVE_CONTROLS_TIMELINE_PAN_MODE =
|
|
`${CONF_LIVE}.controls.timeline.pan_mode` as const;
|
|
export const CONF_LIVE_CONTROLS_TIMELINE_SHOW_RECORDINGS =
|
|
`${CONF_LIVE}.controls.timeline.show_recordings` as const;
|
|
export const CONF_LIVE_CONTROLS_TIMELINE_STYLE =
|
|
`${CONF_LIVE}.controls.timeline.style` as const;
|
|
export const CONF_LIVE_CONTROLS_TIMELINE_WINDOW_SECONDS =
|
|
`${CONF_LIVE}.controls.timeline.window_seconds` as const;
|
|
export const CONF_LIVE_DISPLAY_MODE = `${CONF_LIVE}.display.mode` as const;
|
|
export const CONF_LIVE_DISPLAY_GRID_COLUMNS =
|
|
`${CONF_LIVE}.display.grid_columns` as const;
|
|
export const CONF_LIVE_DISPLAY_GRID_MAX_COLUMNS =
|
|
`${CONF_LIVE}.display.grid_max_columns` as const;
|
|
export const CONF_LIVE_DISPLAY_GRID_SELECTED_POSITION =
|
|
`${CONF_LIVE}.display.grid_selected_position` as const;
|
|
export const CONF_LIVE_DISPLAY_GRID_SELECTED_WIDTH_FACTOR =
|
|
`${CONF_LIVE}.display.grid_selected_width_factor` as const;
|
|
export const CONF_LIVE_DRAGGABLE = `${CONF_LIVE}.draggable` as const;
|
|
export const CONF_LIVE_LAZY_LOAD = `${CONF_LIVE}.lazy_load` as const;
|
|
export const CONF_LIVE_LAZY_UNLOAD = `${CONF_LIVE}.lazy_unload` as const;
|
|
export const CONF_LIVE_PRELOAD = `${CONF_LIVE}.preload` as const;
|
|
export const CONF_LIVE_TRANSITION_EFFECT = `${CONF_LIVE}.transition_effect` as const;
|
|
export const CONF_LIVE_SHOW_IMAGE_DURING_LOAD =
|
|
`${CONF_LIVE}.show_image_during_load` as const;
|
|
export const CONF_LIVE_MICROPHONE_ALWAYS_CONNECTED =
|
|
`${CONF_LIVE}.microphone.always_connected` as const;
|
|
export const CONF_LIVE_MICROPHONE_AUTO_MUTE =
|
|
`${CONF_LIVE}.microphone.auto_mute` as const;
|
|
export const CONF_LIVE_MICROPHONE_AUTO_UNMUTE =
|
|
`${CONF_LIVE}.microphone.auto_unmute` as const;
|
|
export const CONF_LIVE_MICROPHONE_DISCONNECT_SECONDS =
|
|
`${CONF_LIVE}.microphone.disconnect_seconds` as const;
|
|
export const CONF_LIVE_MICROPHONE_MUTE_AFTER_MICROPHONE_MUTE_SECONDS =
|
|
`${CONF_LIVE}.microphone.mute_after_microphone_mute_seconds` as const;
|
|
export const CONF_LIVE_ZOOMABLE = `${CONF_LIVE}.zoomable` as const;
|
|
|
|
const CONF_IMAGE = 'image' as const;
|
|
export const CONF_IMAGE_ENTITY = `${CONF_IMAGE}.entity` as const;
|
|
export const CONF_IMAGE_ENTITY_PARAMETERS = `${CONF_IMAGE}.entity_parameters` as const;
|
|
export const CONF_IMAGE_MODE = `${CONF_IMAGE}.mode` as const;
|
|
export const CONF_IMAGE_PROXY_DYNAMIC = `${CONF_IMAGE}.proxy.dynamic` as const;
|
|
export const CONF_IMAGE_PROXY_ENABLED = `${CONF_IMAGE}.proxy.enabled` as const;
|
|
export const CONF_IMAGE_PROXY_SSL_CIPHERS = `${CONF_IMAGE}.proxy.ssl_ciphers` as const;
|
|
export const CONF_IMAGE_PROXY_SSL_VERIFICATION =
|
|
`${CONF_IMAGE}.proxy.ssl_verification` as const;
|
|
export const CONF_IMAGE_REFRESH_SECONDS = `${CONF_IMAGE}.refresh_seconds` as const;
|
|
export const CONF_IMAGE_URL = `${CONF_IMAGE}.url` as const;
|
|
|
|
const CONF_TIMELINE = 'timeline' as const;
|
|
export const CONF_TIMELINE_WINDOW_SECONDS = `${CONF_TIMELINE}.window_seconds` as const;
|
|
export const CONF_TIMELINE_CLUSTERING_THRESHOLD =
|
|
`${CONF_TIMELINE}.clustering_threshold` as const;
|
|
export const CONF_TIMELINE_FORMAT_24H = `${CONF_TIMELINE}.format.24h` as const;
|
|
export const CONF_TIMELINE_SHOW_RECORDINGS = `${CONF_TIMELINE}.show_recordings` as const;
|
|
export const CONF_TIMELINE_STYLE = `${CONF_TIMELINE}.style` as const;
|
|
export const CONF_TIMELINE_CONTROLS_THUMBNAILS_MODE =
|
|
`${CONF_TIMELINE}.controls.thumbnails.mode` as const;
|
|
export const CONF_TIMELINE_CONTROLS_THUMBNAILS_SIZE =
|
|
`${CONF_TIMELINE}.controls.thumbnails.size` as const;
|
|
export const CONF_TIMELINE_CONTROLS_THUMBNAILS_SHOW_DETAILS =
|
|
`${CONF_TIMELINE}.controls.thumbnails.show_details` as const;
|
|
export const CONF_TIMELINE_CONTROLS_THUMBNAILS_SHOW_DOWNLOAD_CONTROL =
|
|
`${CONF_TIMELINE}.controls.thumbnails.show_download_control` as const;
|
|
export const CONF_TIMELINE_CONTROLS_THUMBNAILS_SHOW_FAVORITE_CONTROL =
|
|
`${CONF_TIMELINE}.controls.thumbnails.show_favorite_control` as const;
|
|
export const CONF_TIMELINE_CONTROLS_THUMBNAILS_SHOW_TIMELINE_CONTROL =
|
|
`${CONF_TIMELINE}.controls.thumbnails.show_timeline_control` as const;
|
|
export const CONF_TIMELINE_CONTROLS_THUMBNAILS_SHOW_REVIEW_CONTROL =
|
|
`${CONF_TIMELINE}.controls.thumbnails.show_review_control` as const;
|
|
export const CONF_TIMELINE_CONTROLS_THUMBNAILS_SHOW_INFO_CONTROL =
|
|
`${CONF_TIMELINE}.controls.thumbnails.show_info_control` as const;
|
|
|
|
const CONF_MENU = 'menu' as const;
|
|
export const CONF_MENU_ALIGNMENT = `${CONF_MENU}.alignment` as const;
|
|
export const CONF_MENU_AUTO_HIDE = `${CONF_MENU}.auto_hide` as const;
|
|
export const CONF_MENU_POSITION = `${CONF_MENU}.position` as const;
|
|
export const CONF_MENU_STYLE = `${CONF_MENU}.style` as const;
|
|
export const CONF_MENU_BUTTON_SIZE = `${CONF_MENU}.button_size` as const;
|
|
export const CONF_MENU_BUTTONS = `${CONF_MENU}.buttons` as const;
|
|
|
|
export const CONF_MENU_BUTTONS_FULLSCREEN = `${CONF_MENU_BUTTONS}.fullscreen` as const;
|
|
export const CONF_MENU_BUTTONS_IRIS = `${CONF_MENU_BUTTONS}.iris` as const;
|
|
export const CONF_MENU_BUTTONS_PLAY = `${CONF_MENU_BUTTONS}.play` as const;
|
|
export const CONF_MENU_BUTTONS_MUTE = `${CONF_MENU_BUTTONS}.mute` as const;
|
|
export const CONF_MENU_BUTTONS_MEDIA_PLAYER =
|
|
`${CONF_MENU_BUTTONS}.media_player` as const;
|
|
export const CONF_MENU_BUTTONS_TIMELINE = `${CONF_MENU_BUTTONS}.timeline` as const;
|
|
|
|
export const CONF_STATUS_BAR = 'status_bar' as const;
|
|
export const CONF_STATUS_BAR_AUTO_HIDE = `${CONF_STATUS_BAR}.auto_hide` as const;
|
|
export const CONF_STATUS_BAR_POSITION = `${CONF_STATUS_BAR}.position` as const;
|
|
export const CONF_STATUS_BAR_STYLE = `${CONF_STATUS_BAR}.style` as const;
|
|
export const CONF_STATUS_BAR_POPUP_SECONDS = `${CONF_STATUS_BAR}.popup_seconds` as const;
|
|
export const CONF_STATUS_BAR_HEIGHT = `${CONF_STATUS_BAR}.height` as const;
|
|
|
|
export const CONF_STATUS_BAR_ITEMS = `${CONF_STATUS_BAR}.items` as const;
|
|
|
|
// A single namespace shadowing the main config: anything the upgrade cannot
|
|
// faithfully convert is recorded here as a failure, intact, at the same path it
|
|
// came from (e.g. top-level `automations` -> `__UPGRADE_FAILURE__.automations`)
|
|
// for the user to migrate by hand.
|
|
export const CONF_UPGRADE_FAILURE = '__UPGRADE_FAILURE__' as const;
|
|
|
|
const CONF_DIMENSIONS = 'dimensions' as const;
|
|
export const CONF_DIMENSIONS_ASPECT_RATIO = `${CONF_DIMENSIONS}.aspect_ratio` as const;
|
|
export const CONF_DIMENSIONS_ASPECT_RATIO_MODE =
|
|
`${CONF_DIMENSIONS}.aspect_ratio_mode` as const;
|
|
export const CONF_DIMENSIONS_HEIGHT = `${CONF_DIMENSIONS}.height` as const;
|
|
|
|
export const CONF_OVERRIDES = 'overrides' as const;
|
|
|
|
const CONF_PERFORMANCE = 'performance' as const;
|
|
export const CONF_PERFORMANCE_FEATURES_ANIMATED_PROGRESS_INDICATOR = `${CONF_PERFORMANCE}.features.animated_progress_indicator`;
|
|
export const CONF_PERFORMANCE_FEATURES_CARD_LOADING_EFFECTS = `${CONF_PERFORMANCE}.features.card_loading_effects`;
|
|
export const CONF_PERFORMANCE_FEATURES_CARD_LOADING_INDICATOR = `${CONF_PERFORMANCE}.features.card_loading_indicator`;
|
|
export const CONF_PERFORMANCE_FEATURES_MEDIA_CHUNK_SIZE = `${CONF_PERFORMANCE}.features.media_chunk_size`;
|
|
export const CONF_PERFORMANCE_FEATURES_MAX_SIMULTANEOUS_ENGINE_REQUESTS = `${CONF_PERFORMANCE}.features.max_simultaneous_engine_requests`;
|
|
export const CONF_PERFORMANCE_PROFILE = `${CONF_PERFORMANCE}.profile`;
|
|
export const CONF_PERFORMANCE_STYLE_BOX_SHADOW = `${CONF_PERFORMANCE}.style.box_shadow`;
|
|
export const CONF_PERFORMANCE_STYLE_BORDER_RADIUS = `${CONF_PERFORMANCE}.style.border_radius`;
|
|
|
|
export const CONF_PROFILES = 'profiles' as const;
|
|
|
|
const CONF_REMOTE_CONTROL = 'remote_control' as const;
|
|
export const CONF_REMOTE_CONTROL_ENTITIES_CAMERA =
|
|
`${CONF_REMOTE_CONTROL}.entities.camera` as const;
|
|
|
|
// Taken from https://github.com/home-assistant/frontend/blob/a759767d794f02527d127802831e68d3caf0cb7a/src/data/media-player.ts#L82
|
|
export const MEDIA_PLAYER_SUPPORT_TURN_OFF = 256;
|
|
export const MEDIA_PLAYER_SUPPORT_STOP = 4096;
|
|
export const MEDIA_PLAYER_SUPPORT_BROWSE_MEDIA = 131072;
|
|
|
|
// The number of media items to fetch at a time (for clips/snapshot views, and
|
|
// gallery chunks). Smaller values will cause more frequent smaller fetches, but
|
|
// improved rendering performance.
|
|
export const MEDIA_CHUNK_SIZE_DEFAULT = 50;
|
|
export const MEDIA_CHUNK_SIZE_MAX = 1000;
|
|
|
|
// The name of the exit keyframe defined in `scss/pop-animation.scss`.
|
|
export const POP_OUT_ANIMATION_NAME = 'pop-out';
|