@camstack/types 1.2.408 → 1.2.410

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/client.js CHANGED
@@ -21868,6 +21868,390 @@ var _macroLookup = /* @__PURE__ */ new Map();
21868
21868
  for (const [k, v] of Object.entries(YAMNET_TO_MACRO.mapping)) _macroLookup.set(k.toLowerCase(), v);
21869
21869
  for (const [k, v] of Object.entries(APPLE_SA_TO_MACRO.mapping)) _macroLookup.set(k.toLowerCase(), v);
21870
21870
  //#endregion
21871
+ //#region src/catalogs/palette-entries.ts
21872
+ /**
21873
+ * Palette entry ids (D939). Audio is the one gradient; `audio-*` leaves are
21874
+ * not entries. `heatmapScrub` is a mark, not an event kind.
21875
+ */
21876
+ var PALETTE_ENTRY_IDS = [
21877
+ "motion",
21878
+ "audio",
21879
+ "recording",
21880
+ "live",
21881
+ "heatmapScrub",
21882
+ "person",
21883
+ "vehicle",
21884
+ "animal",
21885
+ "package",
21886
+ "sensor",
21887
+ "control",
21888
+ "face",
21889
+ "plate",
21890
+ "car",
21891
+ "truck",
21892
+ "bus",
21893
+ "motorcycle",
21894
+ "bicycle",
21895
+ "airplane",
21896
+ "boat",
21897
+ "train",
21898
+ "bird",
21899
+ "dog",
21900
+ "cat",
21901
+ "horse",
21902
+ "sheep",
21903
+ "cow",
21904
+ "elephant",
21905
+ "bear",
21906
+ "zebra",
21907
+ "giraffe",
21908
+ "package-delivered",
21909
+ "package-picked-up",
21910
+ "suitcase",
21911
+ "backpack",
21912
+ "handbag",
21913
+ "contact",
21914
+ "motion-sensor",
21915
+ "smoke",
21916
+ "flood",
21917
+ "gas",
21918
+ "carbon-monoxide",
21919
+ "vibration",
21920
+ "tamper",
21921
+ "presence",
21922
+ "enum-sensor",
21923
+ "device-event",
21924
+ "lock",
21925
+ "cover",
21926
+ "switch",
21927
+ "siren",
21928
+ "button",
21929
+ "doorbell"
21930
+ ];
21931
+ var AUDIO_ENTRY_ID = "audio";
21932
+ /** Six rungs, quiet → loud. The opaque end is the entry's hex. */
21933
+ var AUDIO_GRADIENT_ALPHAS = [
21934
+ .3,
21935
+ .42,
21936
+ .55,
21937
+ .7,
21938
+ .85,
21939
+ 1
21940
+ ];
21941
+ var PALETTE_PRESET_IDS = [
21942
+ "camstack",
21943
+ "high-contrast",
21944
+ "okabe-ito"
21945
+ ];
21946
+ //#endregion
21947
+ //#region src/catalogs/display-palette-tables.ts
21948
+ /** Frozen palette tables (D939). The spec refuses a table that breaks the rule. */
21949
+ var CAMSTACK_HEX = {
21950
+ motion: "#d946ef",
21951
+ audio: "#059eb8",
21952
+ recording: "#ef4444",
21953
+ live: "#8d7a00",
21954
+ heatmapScrub: "#4b32ff",
21955
+ person: "#11a64c",
21956
+ vehicle: "#3b82f6",
21957
+ animal: "#ea6a09",
21958
+ package: "#924667",
21959
+ sensor: "#624bbc",
21960
+ control: "#944d24",
21961
+ face: "#ed4f8d",
21962
+ plate: "#4b7027",
21963
+ car: "#9684cf",
21964
+ truck: "#0f9b89",
21965
+ bus: "#a734a9",
21966
+ motorcycle: "#c1133a",
21967
+ bicycle: "#0e6a9b",
21968
+ airplane: "#7c9928",
21969
+ boat: "#b17933",
21970
+ train: "#ad6ca3",
21971
+ bird: "#0f7c55",
21972
+ dog: "#c82700",
21973
+ cat: "#7268f2",
21974
+ horse: "#cb795e",
21975
+ sheep: "#b8636b",
21976
+ cow: "#cb2969",
21977
+ elephant: "#1158d2",
21978
+ bear: "#8d5e00",
21979
+ zebra: "#0097d6",
21980
+ giraffe: "#8f61bb",
21981
+ "package-delivered": "#cd3f9b",
21982
+ "package-picked-up": "#388a08",
21983
+ suitcase: "#666800",
21984
+ backpack: "#ec5022",
21985
+ handbag: "#a76ef8",
21986
+ contact: "#ab5a49",
21987
+ "motion-sensor": "#b95d1a",
21988
+ smoke: "#dd3858",
21989
+ flood: "#b31e7d",
21990
+ gas: "#5b70b5",
21991
+ "carbon-monoxide": "#7b4e8e",
21992
+ vibration: "#e65bba",
21993
+ tamper: "#98464b",
21994
+ presence: "#3a9468",
21995
+ "enum-sensor": "#7885f8",
21996
+ "device-event": "#8c43c8",
21997
+ lock: "#649653",
21998
+ cover: "#c67597",
21999
+ switch: "#7a812a",
22000
+ siren: "#ac5d7f",
22001
+ button: "#b276cd",
22002
+ doorbell: "#0087ab"
22003
+ };
22004
+ var CAMSTACK_FALLBACK = [
22005
+ "#b34dc7",
22006
+ "#1d7d34",
22007
+ "#db6b6c",
22008
+ "#a43d29",
22009
+ "#0e6ee6",
22010
+ "#29a10b",
22011
+ "#a98731",
22012
+ "#0181c6"
22013
+ ];
22014
+ var HIGH_CONTRAST_HEX = {
22015
+ motion: "#964360",
22016
+ audio: "#23a132",
22017
+ recording: "#2494ca",
22018
+ live: "#bd7e2b",
22019
+ heatmapScrub: "#ad6eea",
22020
+ person: "#62611e",
22021
+ vehicle: "#f4534c",
22022
+ animal: "#1556cd",
22023
+ package: "#9c4415",
22024
+ sensor: "#066c48",
22025
+ control: "#f2479f",
22026
+ face: "#139d8a",
22027
+ plate: "#909024",
22028
+ car: "#8e35ab",
22029
+ truck: "#bd0b2b",
22030
+ bus: "#7a88ca",
22031
+ motorcycle: "#e26725",
22032
+ bicycle: "#a6679b",
22033
+ airplane: "#7c5720",
22034
+ boat: "#467a1b",
22035
+ train: "#6f65a4",
22036
+ bird: "#cb717f",
22037
+ dog: "#c62490",
22038
+ cat: "#b36850",
22039
+ horse: "#1872ac",
22040
+ sheep: "#927939",
22041
+ cow: "#428a5c",
22042
+ elephant: "#d41160",
22043
+ bear: "#799453",
22044
+ zebra: "#a85455",
22045
+ giraffe: "#746be8",
22046
+ "package-delivered": "#824a80",
22047
+ "package-picked-up": "#614ac1",
22048
+ suitcase: "#2f77f3",
22049
+ backpack: "#fa476d",
22050
+ handbag: "#c14cbe",
22051
+ contact: "#c83921",
22052
+ "motion-sensor": "#a07ebd",
22053
+ smoke: "#a25b13",
22054
+ flood: "#526bab",
22055
+ gas: "#924938",
22056
+ "carbon-monoxide": "#bb7e53",
22057
+ vibration: "#b66182",
22058
+ tamper: "#3c6931",
22059
+ presence: "#6c851d",
22060
+ "enum-sensor": "#ad2d48",
22061
+ "device-event": "#5e9b04",
22062
+ lock: "#00a062",
22063
+ cover: "#ad8624",
22064
+ switch: "#d05259",
22065
+ siren: "#cd67b3",
22066
+ button: "#c9746a",
22067
+ doorbell: "#338eeb"
22068
+ };
22069
+ var HIGH_CONTRAST_FALLBACK = [
22070
+ "#817f3b",
22071
+ "#a0733e",
22072
+ "#8658b2",
22073
+ "#956301",
22074
+ "#bc652d",
22075
+ "#647331",
22076
+ "#a14c9e",
22077
+ "#d14e71"
22078
+ ];
22079
+ var OKABE_ITO_HEX = {
22080
+ motion: "#b88128",
22081
+ audio: "#1096c8",
22082
+ recording: "#009e73",
22083
+ live: "#9c8c22",
22084
+ heatmapScrub: "#0072b2",
22085
+ person: "#d55e00",
22086
+ vehicle: "#c0739f",
22087
+ animal: "#226d18",
22088
+ package: "#91446c",
22089
+ sensor: "#217b56",
22090
+ control: "#648647",
22091
+ face: "#c22998",
22092
+ plate: "#fa4575",
22093
+ car: "#956301",
22094
+ truck: "#2f77f3",
22095
+ bus: "#7a4e86",
22096
+ motorcycle: "#f54597",
22097
+ bicycle: "#bb3e75",
22098
+ airplane: "#e054c0",
22099
+ boat: "#457942",
22100
+ train: "#867afa",
22101
+ bird: "#88914c",
22102
+ dog: "#1556cd",
22103
+ cat: "#71702c",
22104
+ horse: "#9b4fa4",
22105
+ sheep: "#c0559d",
22106
+ cow: "#d14f65",
22107
+ elephant: "#98470f",
22108
+ bear: "#595896",
22109
+ zebra: "#96790e",
22110
+ giraffe: "#cb717b",
22111
+ "package-delivered": "#139d8a",
22112
+ "package-picked-up": "#906ead",
22113
+ suitcase: "#d02939",
22114
+ backpack: "#d41160",
22115
+ handbag: "#f64f54",
22116
+ contact: "#7258d2",
22117
+ "motion-sensor": "#b66182",
22118
+ smoke: "#627abb",
22119
+ flood: "#b86ae4",
22120
+ gas: "#a95261",
22121
+ "carbon-monoxide": "#c65d3c",
22122
+ vibration: "#7a40b7",
22123
+ tamper: "#914b34",
22124
+ presence: "#9481c3",
22125
+ "enum-sensor": "#ac6d47",
22126
+ "device-event": "#7b6fce",
22127
+ lock: "#c67662",
22128
+ cover: "#a6564d",
22129
+ switch: "#ad2c4e",
22130
+ siren: "#348e08",
22131
+ button: "#d27303",
22132
+ doorbell: "#55770f"
22133
+ };
22134
+ var OKABE_ITO_FALLBACK = [
22135
+ "#9a3784",
22136
+ "#a7392c",
22137
+ "#409d50",
22138
+ "#6987e7",
22139
+ "#ee5b3d",
22140
+ "#c0430d",
22141
+ "#af79b3",
22142
+ "#4b6628"
22143
+ ];
22144
+ //#endregion
22145
+ //#region src/catalogs/display-palette.ts
22146
+ /**
22147
+ * The display palette (D939). One table of colours, three presets, one
22148
+ * validator. Taxonomy colours and every consumer read this — there is no
22149
+ * second hex table.
22150
+ */
22151
+ var paletteHexSchema = zod.z.string().regex(/^#[0-9a-f]{6}$/);
22152
+ var paletteSolidSchema = zod.z.object({
22153
+ form: zod.z.literal("solid"),
22154
+ hex: paletteHexSchema
22155
+ });
22156
+ var paletteGradientSchema = zod.z.object({
22157
+ form: zod.z.literal("gradient"),
22158
+ hex: paletteHexSchema,
22159
+ alphas: zod.z.array(zod.z.number().gt(0).lte(1)).length(AUDIO_GRADIENT_ALPHAS.length)
22160
+ });
22161
+ var paletteSwatchSchema = zod.z.discriminatedUnion("form", [paletteSolidSchema, paletteGradientSchema]);
22162
+ var paletteReadySchema = zod.z.object({
22163
+ status: zod.z.literal("ready"),
22164
+ presetId: zod.z.enum(PALETTE_PRESET_IDS),
22165
+ customized: zod.z.boolean(),
22166
+ source: zod.z.enum(["stored", "unconfigured"]),
22167
+ swatches: zod.z.record(zod.z.string(), paletteSwatchSchema),
22168
+ fallbacks: zod.z.array(paletteHexSchema).length(8)
22169
+ });
22170
+ var paletteUnknownSchema = zod.z.object({
22171
+ status: zod.z.literal("unknown"),
22172
+ reason: zod.z.string()
22173
+ });
22174
+ zod.z.discriminatedUnion("status", [paletteReadySchema, paletteUnknownSchema]);
22175
+ zod.z.union([zod.z.object({ presetId: zod.z.string() }), zod.z.object({
22176
+ presetId: zod.z.string(),
22177
+ overrides: zod.z.record(zod.z.string(), paletteSwatchSchema)
22178
+ })]);
22179
+ zod.z.object({
22180
+ presetId: zod.z.string(),
22181
+ overrides: zod.z.record(zod.z.string(), paletteSwatchSchema)
22182
+ });
22183
+ function solid(hex) {
22184
+ return {
22185
+ form: "solid",
22186
+ hex
22187
+ };
22188
+ }
22189
+ function audioGradient(hex) {
22190
+ return {
22191
+ form: "gradient",
22192
+ hex,
22193
+ alphas: [...AUDIO_GRADIENT_ALPHAS]
22194
+ };
22195
+ }
22196
+ function swatchesFrom(hexes) {
22197
+ const out = {};
22198
+ for (const id of PALETTE_ENTRY_IDS) {
22199
+ const hex = hexes[id];
22200
+ if (hex === void 0) throw new Error(`palette table missing ${id}`);
22201
+ out[id] = id === "audio" ? audioGradient(hex) : solid(hex);
22202
+ }
22203
+ return out;
22204
+ }
22205
+ function preset(id, name, hexes, fallbacks) {
22206
+ return {
22207
+ id,
22208
+ name,
22209
+ swatches: swatchesFrom(hexes),
22210
+ fallbacks
22211
+ };
22212
+ }
22213
+ var DISPLAY_PRESETS = [
22214
+ preset("camstack", "CamStack", CAMSTACK_HEX, CAMSTACK_FALLBACK),
22215
+ preset("high-contrast", "High contrast", HIGH_CONTRAST_HEX, HIGH_CONTRAST_FALLBACK),
22216
+ preset("okabe-ito", "Colour-blind safe", OKABE_ITO_HEX, OKABE_ITO_FALLBACK)
22217
+ ];
22218
+ function presetById(id) {
22219
+ return DISPLAY_PRESETS.find((item) => item.id === id);
22220
+ }
22221
+ function bundledCamstack() {
22222
+ const presetRow = presetById("camstack");
22223
+ if (presetRow === void 0) throw new Error("CamStack preset missing");
22224
+ return readyOf(presetRow, "unconfigured", false);
22225
+ }
22226
+ function readyOf(row, source, customized) {
22227
+ return {
22228
+ status: "ready",
22229
+ presetId: row.id,
22230
+ customized,
22231
+ source,
22232
+ swatches: row.swatches,
22233
+ fallbacks: [...row.fallbacks]
22234
+ };
22235
+ }
22236
+ function hashFallback(kind, fallbacks) {
22237
+ let hash = 0;
22238
+ for (let i = 0; i < kind.length; i++) hash = hash * 31 + (kind.codePointAt(i) ?? 0) >>> 0;
22239
+ const hex = fallbacks[hash % fallbacks.length];
22240
+ if (hex === void 0) throw new Error("display palette has no fallback colour");
22241
+ return hex;
22242
+ }
22243
+ /** Colour a kind paints with. Audio leaves share the audio gradient's hex. */
22244
+ function paintHex(swatches, fallbacks, kind) {
22245
+ const key = kind.trim().toLowerCase();
22246
+ if (key.startsWith("audio-")) {
22247
+ const audio = swatches[AUDIO_ENTRY_ID];
22248
+ return audio !== void 0 ? audio.hex : hashFallback(key, fallbacks);
22249
+ }
22250
+ const direct = swatches[key];
22251
+ if (direct !== void 0) return direct.hex;
22252
+ return hashFallback(key, fallbacks);
22253
+ }
22254
+ //#endregion
21871
22255
  //#region src/catalogs/event-taxonomy.ts
21872
22256
  /**
21873
22257
  * Unified event-kind taxonomy — THE single source of truth for
@@ -21883,109 +22267,88 @@ for (const [k, v] of Object.entries(APPLE_SA_TO_MACRO.mapping)) _macroLookup.set
21883
22267
  * - `addon-post-analysis/shared/frame/box-drawer.ts` (DEFAULT_COLOR)
21884
22268
  * - the COCO / audio class maps (macro ↔ sub relationships)
21885
22269
  *
21886
- * The DATA (serializable — color/iconId/labelKey/parentKind) lives here in
21887
- * `@camstack/types`. The UI-side mapping `iconId → lucide component` and
21888
- * `labelKey → t()` lives in `@camstack/ui-library`. UIs never hardcode a
21889
- * color or an icon: they read this dictionary (server descriptors carry the
21890
- * fields inline; the client resolves color/icon/label from `iconId`/`kind`).
22270
+ * The DATA (serializable — parentKind / iconId / labelKey) lives here in
22271
+ * `@camstack/types`. Colour is NOT a second table: each entry's `color` is
22272
+ * the bundled CamStack display palette (D939). The effective cluster palette
22273
+ * is the `display-palette` capability. The UI-side mapping `iconId → lucide
22274
+ * component` and `labelKey → t()` lives in `@camstack/ui-library`.
21891
22275
  *
21892
22276
  * Two levels only (v1 YAGNI): macro → sub. `person` is a leaf macro.
21893
22277
  */
21894
- var TAXONOMY_COLORS = {
21895
- motion: "#f59e0b",
21896
- audio: "#06b6d4",
21897
- person: "#22c55e",
21898
- vehicle: "#3b82f6",
21899
- animal: "#f97316",
21900
- package: "#a855f7",
21901
- sensor: "#8b5cf6",
21902
- control: "#10b981",
21903
- genericDetection: "#64748b"
21904
- };
21905
- var DETECTION_SUB_COLORS = {
21906
- car: "#f59e0b",
21907
- truck: "#d97706",
21908
- bus: "#b45309",
21909
- motorcycle: "#eab308",
21910
- bicycle: "#ca8a04",
21911
- airplane: "#60a5fa",
21912
- boat: "#2563eb",
21913
- train: "#1d4ed8",
21914
- bird: "#14b8a6",
21915
- dog: "#84cc16",
21916
- cat: "#f97316",
21917
- horse: "#a16207",
21918
- sheep: "#a3a3a3",
21919
- cow: "#78716c",
21920
- elephant: "#6b7280",
21921
- bear: "#7c2d12",
21922
- zebra: "#404040",
21923
- giraffe: "#d4a373"
21924
- };
22278
+ var BUNDLED_PALETTE = bundledCamstack();
22279
+ function kindColor(kind) {
22280
+ return paintHex(BUNDLED_PALETTE.swatches, BUNDLED_PALETTE.fallbacks, kind);
22281
+ }
22282
+ function firstFallback(fallbacks) {
22283
+ const hex = fallbacks[0];
22284
+ if (hex === void 0) throw new Error("display palette has no fallback colour");
22285
+ return hex;
22286
+ }
22287
+ firstFallback(BUNDLED_PALETTE.fallbacks);
21925
22288
  function titleCase(id) {
21926
22289
  return id.split(/[-_ ]/).filter((p) => p.length > 0).map((p) => p.charAt(0).toUpperCase() + p.slice(1)).join(" ");
21927
22290
  }
21928
22291
  var entries = /* @__PURE__ */ new Map();
21929
- function macro(kind, category, color, iconId, label) {
22292
+ function macro(kind, category, iconId, label) {
21930
22293
  entries.set(kind, {
21931
22294
  kind,
21932
22295
  parentKind: null,
21933
22296
  level: "macro",
21934
22297
  category,
21935
- color,
22298
+ color: kindColor(kind),
21936
22299
  iconId,
21937
22300
  labelKey: `eventKind.${kind}`,
21938
22301
  label
21939
22302
  });
21940
22303
  }
21941
- function sub(kind, parentKind, category, color, iconId, label) {
22304
+ function sub(kind, parentKind, category, iconId, label) {
21942
22305
  entries.set(kind, {
21943
22306
  kind,
21944
22307
  parentKind,
21945
22308
  level: "sub",
21946
22309
  category,
21947
- color,
22310
+ color: kindColor(kind),
21948
22311
  iconId,
21949
22312
  labelKey: `eventKind.${kind}`,
21950
22313
  label
21951
22314
  });
21952
22315
  }
21953
- macro("motion", "motion", TAXONOMY_COLORS.motion, "motion", "Motion");
21954
- macro("audio", "audio", TAXONOMY_COLORS.audio, "audio", "Audio");
21955
- macro("person", "detection", TAXONOMY_COLORS.person, "person", "Person");
21956
- macro("vehicle", "detection", TAXONOMY_COLORS.vehicle, "vehicle", "Vehicle");
21957
- macro("animal", "detection", TAXONOMY_COLORS.animal, "animal", "Animal");
21958
- macro("package", "package", TAXONOMY_COLORS.package, "package", "Package");
21959
- macro("sensor", "sensor", TAXONOMY_COLORS.sensor, "sensor", "Sensor");
21960
- macro("control", "control", TAXONOMY_COLORS.control, "control", "Control");
22316
+ macro("motion", "motion", "motion", "Motion");
22317
+ macro("audio", "audio", "audio", "Audio");
22318
+ macro("person", "detection", "person", "Person");
22319
+ macro("vehicle", "detection", "vehicle", "Vehicle");
22320
+ macro("animal", "detection", "animal", "Animal");
22321
+ macro("package", "package", "package", "Package");
22322
+ macro("sensor", "sensor", "sensor", "Sensor");
22323
+ macro("control", "control", "control", "Control");
21961
22324
  for (const [cocoClass, macroClass] of Object.entries(COCO_TO_MACRO.mapping)) {
21962
22325
  if (macroClass !== "vehicle" && macroClass !== "animal") continue;
21963
22326
  if (entries.has(cocoClass)) continue;
21964
- sub(cocoClass, macroClass, "detection", DETECTION_SUB_COLORS[cocoClass] ?? TAXONOMY_COLORS.genericDetection, cocoClass, titleCase(cocoClass));
22327
+ sub(cocoClass, macroClass, "detection", cocoClass, titleCase(cocoClass));
21965
22328
  }
21966
- sub("package-delivered", "package", "package", TAXONOMY_COLORS.package, "package", "Package delivered");
21967
- sub("package-picked-up", "package", "package", TAXONOMY_COLORS.package, "package", "Package picked up");
21968
- sub("contact", "sensor", "sensor", "#f59e0b", "door", "Contact");
21969
- sub("motion-sensor", "sensor", "sensor", TAXONOMY_COLORS.sensor, "pir", "Motion sensor");
21970
- sub("smoke", "sensor", "sensor", "#ef4444", "smoke", "Smoke");
21971
- sub("flood", "sensor", "sensor", "#3b82f6", "water", "Water leak");
21972
- sub("gas", "sensor", "sensor", "#ef4444", "gas", "Gas");
21973
- sub("carbon-monoxide", "sensor", "sensor", "#dc2626", "smoke", "Carbon monoxide");
21974
- sub("vibration", "sensor", "sensor", "#eab308", "vibration", "Vibration");
21975
- sub("tamper", "sensor", "sensor", "#f97316", "tamper", "Tamper");
21976
- sub("presence", "sensor", "sensor", "#22c55e", "presence", "Presence");
21977
- sub("enum-sensor", "sensor", "sensor", TAXONOMY_COLORS.sensor, "generic", "Sensor state");
21978
- sub("device-event", "sensor", "sensor", "#10b981", "button", "Device event");
21979
- sub("lock", "control", "control", "#0ea5e9", "lock", "Lock");
21980
- sub("cover", "control", "control", "#0ea5e9", "door", "Cover");
21981
- sub("switch", "control", "control", TAXONOMY_COLORS.control, "switch", "Switch");
21982
- sub("siren", "control", "control", "#dc2626", "siren", "Siren");
21983
- sub("button", "control", "control", "#10b981", "button", "Button");
21984
- sub("doorbell", "control", "control", "#a855f7", "doorbell", "Doorbell");
22329
+ sub("package-delivered", "package", "package", "package", "Package delivered");
22330
+ sub("package-picked-up", "package", "package", "package", "Package picked up");
22331
+ sub("contact", "sensor", "sensor", "door", "Contact");
22332
+ sub("motion-sensor", "sensor", "sensor", "pir", "Motion sensor");
22333
+ sub("smoke", "sensor", "sensor", "smoke", "Smoke");
22334
+ sub("flood", "sensor", "sensor", "water", "Water leak");
22335
+ sub("gas", "sensor", "sensor", "gas", "Gas");
22336
+ sub("carbon-monoxide", "sensor", "sensor", "smoke", "Carbon monoxide");
22337
+ sub("vibration", "sensor", "sensor", "vibration", "Vibration");
22338
+ sub("tamper", "sensor", "sensor", "tamper", "Tamper");
22339
+ sub("presence", "sensor", "sensor", "presence", "Presence");
22340
+ sub("enum-sensor", "sensor", "sensor", "generic", "Sensor state");
22341
+ sub("device-event", "sensor", "sensor", "button", "Device event");
22342
+ sub("lock", "control", "control", "lock", "Lock");
22343
+ sub("cover", "control", "control", "door", "Cover");
22344
+ sub("switch", "control", "control", "switch", "Switch");
22345
+ sub("siren", "control", "control", "siren", "Siren");
22346
+ sub("button", "control", "control", "button", "Button");
22347
+ sub("doorbell", "control", "control", "doorbell", "Doorbell");
21985
22348
  for (const l of AUDIO_MACRO_LABELS) {
21986
22349
  const kind = `audio-${l.id}`;
21987
22350
  if (entries.has(kind)) continue;
21988
- sub(kind, "audio", "audio", TAXONOMY_COLORS.audio, kind, l.name);
22351
+ sub(kind, "audio", "audio", kind, l.name);
21989
22352
  }
21990
22353
  /** The complete taxonomy dictionary, keyed by kind. */
21991
22354
  var EVENT_TAXONOMY = Object.freeze(Object.fromEntries(entries));
@@ -27911,6 +28274,11 @@ function createSystemProxy(api) {
27911
28274
  getAllSnapshots: (input) => dispatch("deviceState", "getAllSnapshots", "query", input),
27912
28275
  listClaims: (input) => dispatch("deviceState", "listClaims", "query", input)
27913
28276
  },
28277
+ displayPalette: {
28278
+ getPalette: (input) => dispatch("displayPalette", "getPalette", "query", input),
28279
+ listPresets: (input) => dispatch("displayPalette", "listPresets", "query", input),
28280
+ setPalette: (input) => dispatch("displayPalette", "setPalette", "mutation", input)
28281
+ },
27914
28282
  faceGallery: {
27915
28283
  listIdentities: (input) => dispatch("faceGallery", "listIdentities", "query", input),
27916
28284
  createIdentity: (input) => dispatch("faceGallery", "createIdentity", "mutation", input),