@camstack/addon-post-analysis 1.2.632 → 1.2.633

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.
Files changed (15) hide show
  1. package/dist/{clip-model-registry-0ayA23hb.mjs → clip-model-registry-CCbbEBYS.mjs} +472 -73
  2. package/dist/{clip-model-registry-DYX14HE-.js → clip-model-registry-CeNmplcH.js} +489 -72
  3. package/dist/embedding-encoder/index.js +1 -1
  4. package/dist/embedding-encoder/index.mjs +1 -1
  5. package/dist/pipeline-analytics/_stub.js +2 -2
  6. package/dist/pipeline-analytics/{_virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-HmQ3SInG.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-ArpdWsMY.mjs} +2 -2
  7. package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BQq3WNOE.mjs +26 -0
  8. package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-MOlfkem8.mjs +26 -0
  9. package/dist/pipeline-analytics/{hostInit-CP1G3VOf.mjs → hostInit-g5HpKRU7.mjs} +2 -2
  10. package/dist/pipeline-analytics/index.js +108 -17
  11. package/dist/pipeline-analytics/index.mjs +108 -17
  12. package/dist/pipeline-analytics/remoteEntry.js +1 -1
  13. package/package.json +1 -1
  14. package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BFPYidGl.mjs +0 -26
  15. package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-DdbV-R1z.mjs +0 -26
@@ -43795,6 +43795,381 @@ var _macroLookup = /* @__PURE__ */ new Map();
43795
43795
  for (const [k, v] of Object.entries(YAMNET_TO_MACRO.mapping)) _macroLookup.set(k.toLowerCase(), v);
43796
43796
  for (const [k, v] of Object.entries(APPLE_SA_TO_MACRO.mapping)) _macroLookup.set(k.toLowerCase(), v);
43797
43797
  /**
43798
+ * Palette entry ids (D939). Audio is the one gradient; `audio-*` leaves are
43799
+ * not entries. `heatmapScrub` is a mark, not an event kind.
43800
+ */
43801
+ var PALETTE_ENTRY_IDS = [
43802
+ "motion",
43803
+ "audio",
43804
+ "recording",
43805
+ "live",
43806
+ "heatmapScrub",
43807
+ "person",
43808
+ "vehicle",
43809
+ "animal",
43810
+ "package",
43811
+ "sensor",
43812
+ "control",
43813
+ "face",
43814
+ "plate",
43815
+ "car",
43816
+ "truck",
43817
+ "bus",
43818
+ "motorcycle",
43819
+ "bicycle",
43820
+ "airplane",
43821
+ "boat",
43822
+ "train",
43823
+ "bird",
43824
+ "dog",
43825
+ "cat",
43826
+ "horse",
43827
+ "sheep",
43828
+ "cow",
43829
+ "elephant",
43830
+ "bear",
43831
+ "zebra",
43832
+ "giraffe",
43833
+ "package-delivered",
43834
+ "package-picked-up",
43835
+ "suitcase",
43836
+ "backpack",
43837
+ "handbag",
43838
+ "contact",
43839
+ "motion-sensor",
43840
+ "smoke",
43841
+ "flood",
43842
+ "gas",
43843
+ "carbon-monoxide",
43844
+ "vibration",
43845
+ "tamper",
43846
+ "presence",
43847
+ "enum-sensor",
43848
+ "device-event",
43849
+ "lock",
43850
+ "cover",
43851
+ "switch",
43852
+ "siren",
43853
+ "button",
43854
+ "doorbell"
43855
+ ];
43856
+ var AUDIO_ENTRY_ID = "audio";
43857
+ /** Six rungs, quiet → loud. The opaque end is the entry's hex. */
43858
+ var AUDIO_GRADIENT_ALPHAS = [
43859
+ .3,
43860
+ .42,
43861
+ .55,
43862
+ .7,
43863
+ .85,
43864
+ 1
43865
+ ];
43866
+ var PALETTE_PRESET_IDS = [
43867
+ "camstack",
43868
+ "high-contrast",
43869
+ "okabe-ito"
43870
+ ];
43871
+ /** Frozen palette tables (D939). The spec refuses a table that breaks the rule. */
43872
+ var CAMSTACK_HEX = {
43873
+ motion: "#d946ef",
43874
+ audio: "#059eb8",
43875
+ recording: "#ef4444",
43876
+ live: "#8d7a00",
43877
+ heatmapScrub: "#4b32ff",
43878
+ person: "#11a64c",
43879
+ vehicle: "#3b82f6",
43880
+ animal: "#ea6a09",
43881
+ package: "#924667",
43882
+ sensor: "#624bbc",
43883
+ control: "#944d24",
43884
+ face: "#ed4f8d",
43885
+ plate: "#4b7027",
43886
+ car: "#9684cf",
43887
+ truck: "#0f9b89",
43888
+ bus: "#a734a9",
43889
+ motorcycle: "#c1133a",
43890
+ bicycle: "#0e6a9b",
43891
+ airplane: "#7c9928",
43892
+ boat: "#b17933",
43893
+ train: "#ad6ca3",
43894
+ bird: "#0f7c55",
43895
+ dog: "#c82700",
43896
+ cat: "#7268f2",
43897
+ horse: "#cb795e",
43898
+ sheep: "#b8636b",
43899
+ cow: "#cb2969",
43900
+ elephant: "#1158d2",
43901
+ bear: "#8d5e00",
43902
+ zebra: "#0097d6",
43903
+ giraffe: "#8f61bb",
43904
+ "package-delivered": "#cd3f9b",
43905
+ "package-picked-up": "#388a08",
43906
+ suitcase: "#666800",
43907
+ backpack: "#ec5022",
43908
+ handbag: "#a76ef8",
43909
+ contact: "#ab5a49",
43910
+ "motion-sensor": "#b95d1a",
43911
+ smoke: "#dd3858",
43912
+ flood: "#b31e7d",
43913
+ gas: "#5b70b5",
43914
+ "carbon-monoxide": "#7b4e8e",
43915
+ vibration: "#e65bba",
43916
+ tamper: "#98464b",
43917
+ presence: "#3a9468",
43918
+ "enum-sensor": "#7885f8",
43919
+ "device-event": "#8c43c8",
43920
+ lock: "#649653",
43921
+ cover: "#c67597",
43922
+ switch: "#7a812a",
43923
+ siren: "#ac5d7f",
43924
+ button: "#b276cd",
43925
+ doorbell: "#0087ab"
43926
+ };
43927
+ var CAMSTACK_FALLBACK = [
43928
+ "#b34dc7",
43929
+ "#1d7d34",
43930
+ "#db6b6c",
43931
+ "#a43d29",
43932
+ "#0e6ee6",
43933
+ "#29a10b",
43934
+ "#a98731",
43935
+ "#0181c6"
43936
+ ];
43937
+ var HIGH_CONTRAST_HEX = {
43938
+ motion: "#964360",
43939
+ audio: "#23a132",
43940
+ recording: "#2494ca",
43941
+ live: "#bd7e2b",
43942
+ heatmapScrub: "#ad6eea",
43943
+ person: "#62611e",
43944
+ vehicle: "#f4534c",
43945
+ animal: "#1556cd",
43946
+ package: "#9c4415",
43947
+ sensor: "#066c48",
43948
+ control: "#f2479f",
43949
+ face: "#139d8a",
43950
+ plate: "#909024",
43951
+ car: "#8e35ab",
43952
+ truck: "#bd0b2b",
43953
+ bus: "#7a88ca",
43954
+ motorcycle: "#e26725",
43955
+ bicycle: "#a6679b",
43956
+ airplane: "#7c5720",
43957
+ boat: "#467a1b",
43958
+ train: "#6f65a4",
43959
+ bird: "#cb717f",
43960
+ dog: "#c62490",
43961
+ cat: "#b36850",
43962
+ horse: "#1872ac",
43963
+ sheep: "#927939",
43964
+ cow: "#428a5c",
43965
+ elephant: "#d41160",
43966
+ bear: "#799453",
43967
+ zebra: "#a85455",
43968
+ giraffe: "#746be8",
43969
+ "package-delivered": "#824a80",
43970
+ "package-picked-up": "#614ac1",
43971
+ suitcase: "#2f77f3",
43972
+ backpack: "#fa476d",
43973
+ handbag: "#c14cbe",
43974
+ contact: "#c83921",
43975
+ "motion-sensor": "#a07ebd",
43976
+ smoke: "#a25b13",
43977
+ flood: "#526bab",
43978
+ gas: "#924938",
43979
+ "carbon-monoxide": "#bb7e53",
43980
+ vibration: "#b66182",
43981
+ tamper: "#3c6931",
43982
+ presence: "#6c851d",
43983
+ "enum-sensor": "#ad2d48",
43984
+ "device-event": "#5e9b04",
43985
+ lock: "#00a062",
43986
+ cover: "#ad8624",
43987
+ switch: "#d05259",
43988
+ siren: "#cd67b3",
43989
+ button: "#c9746a",
43990
+ doorbell: "#338eeb"
43991
+ };
43992
+ var HIGH_CONTRAST_FALLBACK = [
43993
+ "#817f3b",
43994
+ "#a0733e",
43995
+ "#8658b2",
43996
+ "#956301",
43997
+ "#bc652d",
43998
+ "#647331",
43999
+ "#a14c9e",
44000
+ "#d14e71"
44001
+ ];
44002
+ var OKABE_ITO_HEX = {
44003
+ motion: "#b88128",
44004
+ audio: "#1096c8",
44005
+ recording: "#009e73",
44006
+ live: "#9c8c22",
44007
+ heatmapScrub: "#0072b2",
44008
+ person: "#d55e00",
44009
+ vehicle: "#c0739f",
44010
+ animal: "#226d18",
44011
+ package: "#91446c",
44012
+ sensor: "#217b56",
44013
+ control: "#648647",
44014
+ face: "#c22998",
44015
+ plate: "#fa4575",
44016
+ car: "#956301",
44017
+ truck: "#2f77f3",
44018
+ bus: "#7a4e86",
44019
+ motorcycle: "#f54597",
44020
+ bicycle: "#bb3e75",
44021
+ airplane: "#e054c0",
44022
+ boat: "#457942",
44023
+ train: "#867afa",
44024
+ bird: "#88914c",
44025
+ dog: "#1556cd",
44026
+ cat: "#71702c",
44027
+ horse: "#9b4fa4",
44028
+ sheep: "#c0559d",
44029
+ cow: "#d14f65",
44030
+ elephant: "#98470f",
44031
+ bear: "#595896",
44032
+ zebra: "#96790e",
44033
+ giraffe: "#cb717b",
44034
+ "package-delivered": "#139d8a",
44035
+ "package-picked-up": "#906ead",
44036
+ suitcase: "#d02939",
44037
+ backpack: "#d41160",
44038
+ handbag: "#f64f54",
44039
+ contact: "#7258d2",
44040
+ "motion-sensor": "#b66182",
44041
+ smoke: "#627abb",
44042
+ flood: "#b86ae4",
44043
+ gas: "#a95261",
44044
+ "carbon-monoxide": "#c65d3c",
44045
+ vibration: "#7a40b7",
44046
+ tamper: "#914b34",
44047
+ presence: "#9481c3",
44048
+ "enum-sensor": "#ac6d47",
44049
+ "device-event": "#7b6fce",
44050
+ lock: "#c67662",
44051
+ cover: "#a6564d",
44052
+ switch: "#ad2c4e",
44053
+ siren: "#348e08",
44054
+ button: "#d27303",
44055
+ doorbell: "#55770f"
44056
+ };
44057
+ var OKABE_ITO_FALLBACK = [
44058
+ "#9a3784",
44059
+ "#a7392c",
44060
+ "#409d50",
44061
+ "#6987e7",
44062
+ "#ee5b3d",
44063
+ "#c0430d",
44064
+ "#af79b3",
44065
+ "#4b6628"
44066
+ ];
44067
+ /**
44068
+ * The display palette (D939). One table of colours, three presets, one
44069
+ * validator. Taxonomy colours and every consumer read this — there is no
44070
+ * second hex table.
44071
+ */
44072
+ var paletteHexSchema = string().regex(/^#[0-9a-f]{6}$/);
44073
+ var paletteSwatchSchema = discriminatedUnion("form", [object({
44074
+ form: literal("solid"),
44075
+ hex: paletteHexSchema
44076
+ }), object({
44077
+ form: literal("gradient"),
44078
+ hex: paletteHexSchema,
44079
+ alphas: array(number().gt(0).lte(1)).length(AUDIO_GRADIENT_ALPHAS.length)
44080
+ })]);
44081
+ var paletteReadySchema = object({
44082
+ status: literal("ready"),
44083
+ presetId: _enum(PALETTE_PRESET_IDS),
44084
+ customized: boolean(),
44085
+ source: _enum(["stored", "unconfigured"]),
44086
+ swatches: record(string(), paletteSwatchSchema),
44087
+ fallbacks: array(paletteHexSchema).length(8)
44088
+ });
44089
+ var paletteResultSchema = discriminatedUnion("status", [paletteReadySchema, object({
44090
+ status: literal("unknown"),
44091
+ reason: string()
44092
+ })]);
44093
+ var setPaletteInputSchema = union([object({ presetId: string() }), object({
44094
+ presetId: string(),
44095
+ overrides: record(string(), paletteSwatchSchema)
44096
+ })]);
44097
+ object({
44098
+ presetId: string(),
44099
+ overrides: record(string(), paletteSwatchSchema)
44100
+ });
44101
+ function solid(hex) {
44102
+ return {
44103
+ form: "solid",
44104
+ hex
44105
+ };
44106
+ }
44107
+ function audioGradient(hex) {
44108
+ return {
44109
+ form: "gradient",
44110
+ hex,
44111
+ alphas: [...AUDIO_GRADIENT_ALPHAS]
44112
+ };
44113
+ }
44114
+ function swatchesFrom(hexes) {
44115
+ const out = {};
44116
+ for (const id of PALETTE_ENTRY_IDS) {
44117
+ const hex = hexes[id];
44118
+ if (hex === void 0) throw new Error(`palette table missing ${id}`);
44119
+ out[id] = id === "audio" ? audioGradient(hex) : solid(hex);
44120
+ }
44121
+ return out;
44122
+ }
44123
+ function preset(id, name, hexes, fallbacks) {
44124
+ return {
44125
+ id,
44126
+ name,
44127
+ swatches: swatchesFrom(hexes),
44128
+ fallbacks
44129
+ };
44130
+ }
44131
+ var DISPLAY_PRESETS = [
44132
+ preset("camstack", "CamStack", CAMSTACK_HEX, CAMSTACK_FALLBACK),
44133
+ preset("high-contrast", "High contrast", HIGH_CONTRAST_HEX, HIGH_CONTRAST_FALLBACK),
44134
+ preset("okabe-ito", "Colour-blind safe", OKABE_ITO_HEX, OKABE_ITO_FALLBACK)
44135
+ ];
44136
+ function presetById(id) {
44137
+ return DISPLAY_PRESETS.find((item) => item.id === id);
44138
+ }
44139
+ function bundledCamstack() {
44140
+ const presetRow = presetById("camstack");
44141
+ if (presetRow === void 0) throw new Error("CamStack preset missing");
44142
+ return readyOf(presetRow, "unconfigured", false);
44143
+ }
44144
+ function readyOf(row, source, customized) {
44145
+ return {
44146
+ status: "ready",
44147
+ presetId: row.id,
44148
+ customized,
44149
+ source,
44150
+ swatches: row.swatches,
44151
+ fallbacks: [...row.fallbacks]
44152
+ };
44153
+ }
44154
+ function hashFallback(kind, fallbacks) {
44155
+ let hash = 0;
44156
+ for (let i = 0; i < kind.length; i++) hash = hash * 31 + (kind.codePointAt(i) ?? 0) >>> 0;
44157
+ const hex = fallbacks[hash % fallbacks.length];
44158
+ if (hex === void 0) throw new Error("display palette has no fallback colour");
44159
+ return hex;
44160
+ }
44161
+ /** Colour a kind paints with. Audio leaves share the audio gradient's hex. */
44162
+ function paintHex(swatches, fallbacks, kind) {
44163
+ const key = kind.trim().toLowerCase();
44164
+ if (key.startsWith("audio-")) {
44165
+ const audio = swatches[AUDIO_ENTRY_ID];
44166
+ return audio !== void 0 ? audio.hex : hashFallback(key, fallbacks);
44167
+ }
44168
+ const direct = swatches[key];
44169
+ if (direct !== void 0) return direct.hex;
44170
+ return hashFallback(key, fallbacks);
44171
+ }
44172
+ /**
43798
44173
  * Unified event-kind taxonomy — THE single source of truth for
43799
44174
  * `kind → { parentKind, category, level, color, iconId, labelKey, label,
43800
44175
  * icon }`.
@@ -43808,111 +44183,89 @@ for (const [k, v] of Object.entries(APPLE_SA_TO_MACRO.mapping)) _macroLookup.set
43808
44183
  * - `addon-post-analysis/shared/frame/box-drawer.ts` (DEFAULT_COLOR)
43809
44184
  * - the COCO / audio class maps (macro ↔ sub relationships)
43810
44185
  *
43811
- * The DATA (serializable — color/iconId/labelKey/parentKind) lives here in
43812
- * `@camstack/types`. The UI-side mapping `iconId → lucide component` and
43813
- * `labelKey → t()` lives in `@camstack/ui-library`. UIs never hardcode a
43814
- * color or an icon: they read this dictionary (server descriptors carry the
43815
- * fields inline; the client resolves color/icon/label from `iconId`/`kind`).
44186
+ * The DATA (serializable — parentKind / iconId / labelKey) lives here in
44187
+ * `@camstack/types`. Colour is NOT a second table: each entry's `color` is
44188
+ * the bundled CamStack display palette (D939). The effective cluster palette
44189
+ * is the `display-palette` capability. The UI-side mapping `iconId → lucide
44190
+ * component` and `labelKey → t()` lives in `@camstack/ui-library`.
43816
44191
  *
43817
44192
  * Two levels only (v1 YAGNI): macro → sub. `person` is a leaf macro.
43818
44193
  */
43819
- var TAXONOMY_COLORS = {
43820
- motion: "#f59e0b",
43821
- audio: "#06b6d4",
43822
- person: "#22c55e",
43823
- vehicle: "#3b82f6",
43824
- animal: "#f97316",
43825
- package: "#a855f7",
43826
- sensor: "#8b5cf6",
43827
- control: "#10b981",
43828
- genericDetection: "#64748b"
43829
- };
43830
- /** Global default color when a kind is unknown (matches legacy box-drawer). */
43831
- var DEFAULT_EVENT_COLOR = "#22ff55";
43832
- var DETECTION_SUB_COLORS = {
43833
- car: "#f59e0b",
43834
- truck: "#d97706",
43835
- bus: "#b45309",
43836
- motorcycle: "#eab308",
43837
- bicycle: "#ca8a04",
43838
- airplane: "#60a5fa",
43839
- boat: "#2563eb",
43840
- train: "#1d4ed8",
43841
- bird: "#14b8a6",
43842
- dog: "#84cc16",
43843
- cat: "#f97316",
43844
- horse: "#a16207",
43845
- sheep: "#a3a3a3",
43846
- cow: "#78716c",
43847
- elephant: "#6b7280",
43848
- bear: "#7c2d12",
43849
- zebra: "#404040",
43850
- giraffe: "#d4a373"
43851
- };
44194
+ var BUNDLED_PALETTE = bundledCamstack();
44195
+ function kindColor(kind) {
44196
+ return paintHex(BUNDLED_PALETTE.swatches, BUNDLED_PALETTE.fallbacks, kind);
44197
+ }
44198
+ function firstFallback(fallbacks) {
44199
+ const hex = fallbacks[0];
44200
+ if (hex === void 0) throw new Error("display palette has no fallback colour");
44201
+ return hex;
44202
+ }
44203
+ /** Global default when a kind is unknown — the palette's first fallback. */
44204
+ var DEFAULT_EVENT_COLOR = firstFallback(BUNDLED_PALETTE.fallbacks);
43852
44205
  function titleCase(id) {
43853
44206
  return id.split(/[-_ ]/).filter((p) => p.length > 0).map((p) => p.charAt(0).toUpperCase() + p.slice(1)).join(" ");
43854
44207
  }
43855
44208
  var entries = /* @__PURE__ */ new Map();
43856
- function macro(kind, category, color, iconId, label) {
44209
+ function macro(kind, category, iconId, label) {
43857
44210
  entries.set(kind, {
43858
44211
  kind,
43859
44212
  parentKind: null,
43860
44213
  level: "macro",
43861
44214
  category,
43862
- color,
44215
+ color: kindColor(kind),
43863
44216
  iconId,
43864
44217
  labelKey: `eventKind.${kind}`,
43865
44218
  label
43866
44219
  });
43867
44220
  }
43868
- function sub(kind, parentKind, category, color, iconId, label) {
44221
+ function sub(kind, parentKind, category, iconId, label) {
43869
44222
  entries.set(kind, {
43870
44223
  kind,
43871
44224
  parentKind,
43872
44225
  level: "sub",
43873
44226
  category,
43874
- color,
44227
+ color: kindColor(kind),
43875
44228
  iconId,
43876
44229
  labelKey: `eventKind.${kind}`,
43877
44230
  label
43878
44231
  });
43879
44232
  }
43880
- macro("motion", "motion", TAXONOMY_COLORS.motion, "motion", "Motion");
43881
- macro("audio", "audio", TAXONOMY_COLORS.audio, "audio", "Audio");
43882
- macro("person", "detection", TAXONOMY_COLORS.person, "person", "Person");
43883
- macro("vehicle", "detection", TAXONOMY_COLORS.vehicle, "vehicle", "Vehicle");
43884
- macro("animal", "detection", TAXONOMY_COLORS.animal, "animal", "Animal");
43885
- macro("package", "package", TAXONOMY_COLORS.package, "package", "Package");
43886
- macro("sensor", "sensor", TAXONOMY_COLORS.sensor, "sensor", "Sensor");
43887
- macro("control", "control", TAXONOMY_COLORS.control, "control", "Control");
44233
+ macro("motion", "motion", "motion", "Motion");
44234
+ macro("audio", "audio", "audio", "Audio");
44235
+ macro("person", "detection", "person", "Person");
44236
+ macro("vehicle", "detection", "vehicle", "Vehicle");
44237
+ macro("animal", "detection", "animal", "Animal");
44238
+ macro("package", "package", "package", "Package");
44239
+ macro("sensor", "sensor", "sensor", "Sensor");
44240
+ macro("control", "control", "control", "Control");
43888
44241
  for (const [cocoClass, macroClass] of Object.entries(COCO_TO_MACRO.mapping)) {
43889
44242
  if (macroClass !== "vehicle" && macroClass !== "animal") continue;
43890
44243
  if (entries.has(cocoClass)) continue;
43891
- sub(cocoClass, macroClass, "detection", DETECTION_SUB_COLORS[cocoClass] ?? TAXONOMY_COLORS.genericDetection, cocoClass, titleCase(cocoClass));
43892
- }
43893
- sub("package-delivered", "package", "package", TAXONOMY_COLORS.package, "package", "Package delivered");
43894
- sub("package-picked-up", "package", "package", TAXONOMY_COLORS.package, "package", "Package picked up");
43895
- sub("contact", "sensor", "sensor", "#f59e0b", "door", "Contact");
43896
- sub("motion-sensor", "sensor", "sensor", TAXONOMY_COLORS.sensor, "pir", "Motion sensor");
43897
- sub("smoke", "sensor", "sensor", "#ef4444", "smoke", "Smoke");
43898
- sub("flood", "sensor", "sensor", "#3b82f6", "water", "Water leak");
43899
- sub("gas", "sensor", "sensor", "#ef4444", "gas", "Gas");
43900
- sub("carbon-monoxide", "sensor", "sensor", "#dc2626", "smoke", "Carbon monoxide");
43901
- sub("vibration", "sensor", "sensor", "#eab308", "vibration", "Vibration");
43902
- sub("tamper", "sensor", "sensor", "#f97316", "tamper", "Tamper");
43903
- sub("presence", "sensor", "sensor", "#22c55e", "presence", "Presence");
43904
- sub("enum-sensor", "sensor", "sensor", TAXONOMY_COLORS.sensor, "generic", "Sensor state");
43905
- sub("device-event", "sensor", "sensor", "#10b981", "button", "Device event");
43906
- sub("lock", "control", "control", "#0ea5e9", "lock", "Lock");
43907
- sub("cover", "control", "control", "#0ea5e9", "door", "Cover");
43908
- sub("switch", "control", "control", TAXONOMY_COLORS.control, "switch", "Switch");
43909
- sub("siren", "control", "control", "#dc2626", "siren", "Siren");
43910
- sub("button", "control", "control", "#10b981", "button", "Button");
43911
- sub("doorbell", "control", "control", "#a855f7", "doorbell", "Doorbell");
44244
+ sub(cocoClass, macroClass, "detection", cocoClass, titleCase(cocoClass));
44245
+ }
44246
+ sub("package-delivered", "package", "package", "package", "Package delivered");
44247
+ sub("package-picked-up", "package", "package", "package", "Package picked up");
44248
+ sub("contact", "sensor", "sensor", "door", "Contact");
44249
+ sub("motion-sensor", "sensor", "sensor", "pir", "Motion sensor");
44250
+ sub("smoke", "sensor", "sensor", "smoke", "Smoke");
44251
+ sub("flood", "sensor", "sensor", "water", "Water leak");
44252
+ sub("gas", "sensor", "sensor", "gas", "Gas");
44253
+ sub("carbon-monoxide", "sensor", "sensor", "smoke", "Carbon monoxide");
44254
+ sub("vibration", "sensor", "sensor", "vibration", "Vibration");
44255
+ sub("tamper", "sensor", "sensor", "tamper", "Tamper");
44256
+ sub("presence", "sensor", "sensor", "presence", "Presence");
44257
+ sub("enum-sensor", "sensor", "sensor", "generic", "Sensor state");
44258
+ sub("device-event", "sensor", "sensor", "button", "Device event");
44259
+ sub("lock", "control", "control", "lock", "Lock");
44260
+ sub("cover", "control", "control", "door", "Cover");
44261
+ sub("switch", "control", "control", "switch", "Switch");
44262
+ sub("siren", "control", "control", "siren", "Siren");
44263
+ sub("button", "control", "control", "button", "Button");
44264
+ sub("doorbell", "control", "control", "doorbell", "Doorbell");
43912
44265
  for (const l of AUDIO_MACRO_LABELS) {
43913
44266
  const kind = `audio-${l.id}`;
43914
44267
  if (entries.has(kind)) continue;
43915
- sub(kind, "audio", "audio", TAXONOMY_COLORS.audio, kind, l.name);
44268
+ sub(kind, "audio", "audio", kind, l.name);
43916
44269
  }
43917
44270
  /** The complete taxonomy dictionary, keyed by kind. */
43918
44271
  var EVENT_TAXONOMY = Object.freeze(Object.fromEntries(entries));
@@ -59594,6 +59947,30 @@ var dayNightCapability = {
59594
59947
  volatileStateFields: ["lastFetchedAt"]
59595
59948
  };
59596
59949
  /**
59950
+ * display-palette — the cluster's one colour table (D939).
59951
+ *
59952
+ * Hub singleton. `getPalette` reports `unknown` when the settings store
59953
+ * cannot be read; it does not pretend the bundled preset was stored.
59954
+ * `setPalette` refuses a palette that fails the ΔE / contrast rule and names
59955
+ * the pairs.
59956
+ */
59957
+ var presetSummarySchema = object({
59958
+ id: string(),
59959
+ name: string(),
59960
+ swatches: record(string(), paletteSwatchSchema),
59961
+ fallbacks: array(string())
59962
+ });
59963
+ method(_void(), paletteResultSchema, {
59964
+ auth: "protected",
59965
+ role: "viewer"
59966
+ }), method(_void(), array(presetSummarySchema).readonly(), {
59967
+ auth: "protected",
59968
+ role: "viewer"
59969
+ }), method(setPaletteInputSchema, paletteReadySchema, {
59970
+ kind: "mutation",
59971
+ auth: "admin"
59972
+ });
59973
+ /**
59597
59974
  * Generic device-level status snapshot. Auto-registered by `BaseDevice`
59598
59975
  * for every device, regardless of provider — the kernel needs a uniform
59599
59976
  * cap-keyed slice for the basic device flags every consumer expects to
@@ -74382,6 +74759,27 @@ Object.freeze({
74382
74759
  access: "create",
74383
74760
  role: "viewer"
74384
74761
  },
74762
+ "displayPalette.getPalette": {
74763
+ capName: "display-palette",
74764
+ capScope: "system",
74765
+ addonId: null,
74766
+ access: "view",
74767
+ role: "viewer"
74768
+ },
74769
+ "displayPalette.listPresets": {
74770
+ capName: "display-palette",
74771
+ capScope: "system",
74772
+ addonId: null,
74773
+ access: "view",
74774
+ role: "viewer"
74775
+ },
74776
+ "displayPalette.setPalette": {
74777
+ capName: "display-palette",
74778
+ capScope: "system",
74779
+ addonId: null,
74780
+ access: "create",
74781
+ role: "admin"
74782
+ },
74385
74783
  "doorbell.getStatus": {
74386
74784
  capName: "doorbell",
74387
74785
  capScope: "device",
@@ -84838,6 +85236,7 @@ var SYSTEM_CAP_VOCABULARY = {
84838
85236
  "device-provider": system(INTERNAL),
84839
85237
  "device-removal-hook": system(INTERNAL),
84840
85238
  "device-state": system("the runtime-state mirror every trigger already reads through"),
85239
+ "display-palette": system("the cluster display palette — one colour table for every client, not a device action"),
84841
85240
  "embedding-encoder": system(ML),
84842
85241
  "face-gallery": system("the face gallery — curated on its own page"),
84843
85242
  "failure-contribution": system(INTERNAL),
@@ -93823,6 +94222,12 @@ Object.defineProperty(exports, "buildViewerLink", {
93823
94222
  return buildViewerLink;
93824
94223
  }
93825
94224
  });
94225
+ Object.defineProperty(exports, "bundledCamstack", {
94226
+ enumerable: true,
94227
+ get: function() {
94228
+ return bundledCamstack;
94229
+ }
94230
+ });
93826
94231
  Object.defineProperty(exports, "calendarEventLocalSpan", {
93827
94232
  enumerable: true,
93828
94233
  get: function() {
@@ -94261,6 +94666,18 @@ Object.defineProperty(exports, "occupancyScope", {
94261
94666
  return occupancyScope;
94262
94667
  }
94263
94668
  });
94669
+ Object.defineProperty(exports, "paintHex", {
94670
+ enumerable: true,
94671
+ get: function() {
94672
+ return paintHex;
94673
+ }
94674
+ });
94675
+ Object.defineProperty(exports, "paletteResultSchema", {
94676
+ enumerable: true,
94677
+ get: function() {
94678
+ return paletteResultSchema;
94679
+ }
94680
+ });
94264
94681
  Object.defineProperty(exports, "parseAlertEpisodePayload", {
94265
94682
  enumerable: true,
94266
94683
  get: function() {
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_clip_model_registry = require("../clip-model-registry-DYX14HE-.js");
5
+ const require_clip_model_registry = require("../clip-model-registry-CeNmplcH.js");
6
6
  let node_fs = require("node:fs");
7
7
  node_fs = require_clip_model_registry.__toESM(node_fs);
8
8
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { $r as parseProcStatus, Yi as BaseAddon, a as CLIP_EMBEDDING_STEP_ID, fr as embeddingEncoderCapability, gr as embeddingRequirementsUnavailableError, hr as embeddingRequirementsFailedError, i as CLIP_TEXT_MODELS, l as resolveClusterModelPin, n as DEFAULT_CLIP_MODEL, pi as resolvePoolMemoryPolicy, pr as embeddingModelFailedError, r as CLIP_IMAGE_MODELS, sa as normalizeNodeId, t as BUILTIN_CLIP_MODELS, tn as PoolMemoryWatchdog } from "../clip-model-registry-0ayA23hb.mjs";
1
+ import { Qi as BaseAddon, _r as embeddingRequirementsUnavailableError, a as CLIP_EMBEDDING_STEP_ID, gi as resolvePoolMemoryPolicy, gr as embeddingRequirementsFailedError, i as CLIP_TEXT_MODELS, l as resolveClusterModelPin, mr as embeddingModelFailedError, n as DEFAULT_CLIP_MODEL, ni as parseProcStatus, pr as embeddingEncoderCapability, r as CLIP_IMAGE_MODELS, t as BUILTIN_CLIP_MODELS, tn as PoolMemoryWatchdog, ua as normalizeNodeId } from "../clip-model-registry-CCbbEBYS.mjs";
2
2
  import { createRequire } from "node:module";
3
3
  import * as fs from "node:fs";
4
4
  import * as path$1 from "node:path";
@@ -1,8 +1,8 @@
1
1
  import { a as e, i as t, n, o as r, r as i, t as a } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare__react__loadShare__.js-Cx9AsA5q.mjs";
2
2
  import { t as o } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-B3Wx5J80.mjs";
3
- import { a as s, c, d as l, f as u, i as d, l as f, m as p, n as m, o as h, p as g, r as _, s as v, t as y, u as b } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-DdbV-R1z.mjs";
3
+ import { a as s, c, d as l, f as u, i as d, l as f, m as p, n as m, o as h, p as g, r as _, s as v, t as y, u as b } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-MOlfkem8.mjs";
4
4
  import { n as x, t as S } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-CkwmHEi0.mjs";
5
- import { t as C } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BFPYidGl.mjs";
5
+ import { t as C } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BQq3WNOE.mjs";
6
6
  //#region ../../node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js
7
7
  var w = (...e) => e.filter((e, t, n) => !!e && e.trim() !== "" && n.indexOf(e) === t).join(" ").trim(), T = (e) => e.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(), E = (e) => e.replace(/^([A-Z])|[\s-_]+(\w)/g, (e, t, n) => n ? n.toUpperCase() : t.toLowerCase()), D = (e) => {
8
8
  let t = E(e);