@camstack/addon-model-studio 1.1.317 → 1.1.318
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/CHANGELOG.md +6 -0
- package/dist/{MotionZonesSettings-CMwAQd-Y.mjs → MotionZonesSettings-DNN9QEA3.mjs} +2 -2
- package/dist/{PrivacyMaskSettings-wx9DyDgK.mjs → PrivacyMaskSettings-CwE32Qhm.mjs} +4 -4
- package/dist/{SceneMonitorEditor-jDNxVNGw.mjs → SceneMonitorEditor-SNXiXvXt.mjs} +3 -3
- package/dist/_stub.js +1647 -1583
- package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-CsVbgmDJ.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-BaMcMPS8.mjs} +3 -3
- package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-D_KssOQn.mjs +26 -0
- package/dist/addon-model-studio.css +1 -1
- package/dist/{hostInit-l8UwwnTV.mjs → hostInit-C6xHvsEb.mjs} +2 -2
- package/dist/model-studio.addon.js +472 -10
- package/dist/model-studio.addon.mjs +472 -10
- package/dist/{player-overlays-B0MiJ5R6.mjs → player-overlays-BmZ_qrdR.mjs} +1 -1
- package/dist/remoteEntry.js +1 -1
- package/dist/{responsive-BHzVDMt-.mjs → responsive-Dypi_Y-V.mjs} +1 -1
- package/dist/{scene-monitor-copy-CBNkkNvs.mjs → scene-monitor-copy-Bafz9ZMd.mjs} +1 -1
- package/dist/{square-SIMvtgyo.mjs → square-BhfFFjT7.mjs} +1 -1
- package/dist/{trash-2-CTpwDufe.mjs → trash-2-BAyfEZwH.mjs} +1 -1
- package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-CkwPjS5o.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-DyWlwmuC.mjs} +1 -1
- package/package.json +1 -1
- package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-Cxz43vtF.mjs +0 -26
|
@@ -5816,7 +5816,7 @@ var ZodIssueCode = {
|
|
|
5816
5816
|
var ZodFirstPartyTypeKind;
|
|
5817
5817
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5818
5818
|
//#endregion
|
|
5819
|
-
//#region ../types/dist/sleep-
|
|
5819
|
+
//#region ../types/dist/sleep-DJws6ho7.mjs
|
|
5820
5820
|
/**
|
|
5821
5821
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5822
5822
|
* window to float samples (D455).
|
|
@@ -9090,6 +9090,7 @@ var CAP_NAMES = Object.freeze([
|
|
|
9090
9090
|
"recording-onboard",
|
|
9091
9091
|
"recording-signal",
|
|
9092
9092
|
"records",
|
|
9093
|
+
"remote",
|
|
9093
9094
|
"running-state",
|
|
9094
9095
|
"scene-monitor",
|
|
9095
9096
|
"script-runner",
|
|
@@ -9113,6 +9114,7 @@ var CAP_NAMES = Object.freeze([
|
|
|
9113
9114
|
"system",
|
|
9114
9115
|
"tamper",
|
|
9115
9116
|
"temperature-sensor",
|
|
9117
|
+
"template",
|
|
9116
9118
|
"terminal-session",
|
|
9117
9119
|
"toast",
|
|
9118
9120
|
"training",
|
|
@@ -10053,6 +10055,11 @@ Object.freeze({
|
|
|
10053
10055
|
"standby"
|
|
10054
10056
|
]
|
|
10055
10057
|
},
|
|
10058
|
+
{
|
|
10059
|
+
"path": "stateSource",
|
|
10060
|
+
"valueType": "enum",
|
|
10061
|
+
"enumValues": ["reported", "assumed"]
|
|
10062
|
+
},
|
|
10056
10063
|
{
|
|
10057
10064
|
"path": "volumeLevel",
|
|
10058
10065
|
"valueType": "number"
|
|
@@ -10328,6 +10335,18 @@ Object.freeze({
|
|
|
10328
10335
|
{
|
|
10329
10336
|
"path": "volume",
|
|
10330
10337
|
"valueType": "number"
|
|
10338
|
+
},
|
|
10339
|
+
{
|
|
10340
|
+
"path": "lastFeedGrams",
|
|
10341
|
+
"valueType": "number"
|
|
10342
|
+
},
|
|
10343
|
+
{
|
|
10344
|
+
"path": "lastFeedHopper1",
|
|
10345
|
+
"valueType": "number"
|
|
10346
|
+
},
|
|
10347
|
+
{
|
|
10348
|
+
"path": "lastFeedHopper2",
|
|
10349
|
+
"valueType": "number"
|
|
10331
10350
|
}
|
|
10332
10351
|
],
|
|
10333
10352
|
"power-meter": [
|
|
@@ -57984,6 +58003,318 @@ DeviceType.Light, method(object({
|
|
|
57984
58003
|
level: number().min(0).max(100),
|
|
57985
58004
|
lastChangedAt: number()
|
|
57986
58005
|
});
|
|
58006
|
+
/**
|
|
58007
|
+
* The role vocabulary of a remote (D963): what a button MEANS, independent of
|
|
58008
|
+
* how it is wired. A layout template places buttons by role; a device binds a
|
|
58009
|
+
* role to an action; an exporter asks for a role by name. Roles are shared so
|
|
58010
|
+
* one layout fits every appliance and one voice command fits every binding.
|
|
58011
|
+
*
|
|
58012
|
+
* A role outside this list is `custom:<key>` — the operator's own button (a
|
|
58013
|
+
* SmartIR source, a channel preset). The key is a lowercase slug.
|
|
58014
|
+
*/
|
|
58015
|
+
var REMOTE_KNOWN_ROLES = [
|
|
58016
|
+
"power",
|
|
58017
|
+
"power_on",
|
|
58018
|
+
"power_off",
|
|
58019
|
+
"volume_up",
|
|
58020
|
+
"volume_down",
|
|
58021
|
+
"mute",
|
|
58022
|
+
"channel_up",
|
|
58023
|
+
"channel_down",
|
|
58024
|
+
"up",
|
|
58025
|
+
"down",
|
|
58026
|
+
"left",
|
|
58027
|
+
"right",
|
|
58028
|
+
"ok",
|
|
58029
|
+
"back",
|
|
58030
|
+
"home",
|
|
58031
|
+
"menu",
|
|
58032
|
+
"info",
|
|
58033
|
+
"guide",
|
|
58034
|
+
"exit",
|
|
58035
|
+
"input",
|
|
58036
|
+
"play",
|
|
58037
|
+
"pause",
|
|
58038
|
+
"play_pause",
|
|
58039
|
+
"stop",
|
|
58040
|
+
"next",
|
|
58041
|
+
"previous",
|
|
58042
|
+
"fast_forward",
|
|
58043
|
+
"rewind",
|
|
58044
|
+
"digit_0",
|
|
58045
|
+
"digit_1",
|
|
58046
|
+
"digit_2",
|
|
58047
|
+
"digit_3",
|
|
58048
|
+
"digit_4",
|
|
58049
|
+
"digit_5",
|
|
58050
|
+
"digit_6",
|
|
58051
|
+
"digit_7",
|
|
58052
|
+
"digit_8",
|
|
58053
|
+
"digit_9"
|
|
58054
|
+
];
|
|
58055
|
+
var CUSTOM_KEY_RE = /^[a-z0-9][a-z0-9_]{0,47}$/;
|
|
58056
|
+
var KNOWN_ROLES = new Set(REMOTE_KNOWN_ROLES);
|
|
58057
|
+
function isRemoteKnownRole(value) {
|
|
58058
|
+
return KNOWN_ROLES.has(value);
|
|
58059
|
+
}
|
|
58060
|
+
function isRemoteCustomKey(key) {
|
|
58061
|
+
return CUSTOM_KEY_RE.test(key);
|
|
58062
|
+
}
|
|
58063
|
+
/** The key of a `custom:<key>` role, or null for any other string. */
|
|
58064
|
+
function customKeyOfRole(role) {
|
|
58065
|
+
if (!role.startsWith("custom:")) return null;
|
|
58066
|
+
const key = role.slice(7);
|
|
58067
|
+
return isRemoteCustomKey(key) ? key : null;
|
|
58068
|
+
}
|
|
58069
|
+
function isRemoteRole(value) {
|
|
58070
|
+
return isRemoteKnownRole(value) || customKeyOfRole(value) !== null;
|
|
58071
|
+
}
|
|
58072
|
+
var RemoteRoleSchema = string().refine(isRemoteRole, { message: "a role is one of the known roles or custom:<key> (lowercase letters, digits, _)" });
|
|
58073
|
+
var RemoteBindingSchema = object({ action: AutomationCapStepSchema.extend({ deviceId: number().int().nonnegative() }) });
|
|
58074
|
+
var RemoteCustomButtonSchema = object({
|
|
58075
|
+
/** The slug after `custom:` in the role. */
|
|
58076
|
+
key: string().refine(isRemoteCustomKey, { message: "a lowercase slug" }),
|
|
58077
|
+
/** What the operator calls it, and what a voice command may name. */
|
|
58078
|
+
name: string().min(1).max(60)
|
|
58079
|
+
});
|
|
58080
|
+
var RemotePowerModeSchema = _enum(["toggle", "discrete"]);
|
|
58081
|
+
var RemoteConfigSchema = object({
|
|
58082
|
+
layoutTemplateId: string().min(1).nullable(),
|
|
58083
|
+
/**
|
|
58084
|
+
* The transmitter device new bindings and an import send through. A binding
|
|
58085
|
+
* names its own device, so one command may override it.
|
|
58086
|
+
*/
|
|
58087
|
+
defaultTransmitterId: number().int().nonnegative().nullable().default(null),
|
|
58088
|
+
/** Keyed by role. A role with no entry falls back to the native cap. */
|
|
58089
|
+
bindings: record(string(), RemoteBindingSchema),
|
|
58090
|
+
customButtons: array(RemoteCustomButtonSchema).max(100),
|
|
58091
|
+
power: object({ mode: RemotePowerModeSchema })
|
|
58092
|
+
}).superRefine((config, ctx) => {
|
|
58093
|
+
const roles = Object.keys(config.bindings);
|
|
58094
|
+
if (roles.length > 200) ctx.addIssue({
|
|
58095
|
+
code: "custom",
|
|
58096
|
+
message: "too many bindings",
|
|
58097
|
+
path: ["bindings"]
|
|
58098
|
+
});
|
|
58099
|
+
for (const role of roles) if (!isRemoteRole(role)) ctx.addIssue({
|
|
58100
|
+
code: "custom",
|
|
58101
|
+
message: `"${role}" is not a role`,
|
|
58102
|
+
path: ["bindings", role]
|
|
58103
|
+
});
|
|
58104
|
+
const keys = /* @__PURE__ */ new Set();
|
|
58105
|
+
config.customButtons.forEach((button, index) => {
|
|
58106
|
+
if (keys.has(button.key)) ctx.addIssue({
|
|
58107
|
+
code: "custom",
|
|
58108
|
+
message: `custom button "${button.key}" is listed twice`,
|
|
58109
|
+
path: [
|
|
58110
|
+
"customButtons",
|
|
58111
|
+
index,
|
|
58112
|
+
"key"
|
|
58113
|
+
]
|
|
58114
|
+
});
|
|
58115
|
+
keys.add(button.key);
|
|
58116
|
+
});
|
|
58117
|
+
for (const role of roles) {
|
|
58118
|
+
const key = customKeyOfRole(role);
|
|
58119
|
+
if (key !== null && !keys.has(key)) ctx.addIssue({
|
|
58120
|
+
code: "custom",
|
|
58121
|
+
message: `${role} is bound but has no entry in customButtons`,
|
|
58122
|
+
path: ["bindings", role]
|
|
58123
|
+
});
|
|
58124
|
+
}
|
|
58125
|
+
});
|
|
58126
|
+
object({
|
|
58127
|
+
power: object({
|
|
58128
|
+
state: _enum(["on", "off"]),
|
|
58129
|
+
at: number()
|
|
58130
|
+
}).nullable(),
|
|
58131
|
+
muted: object({
|
|
58132
|
+
value: boolean(),
|
|
58133
|
+
at: number()
|
|
58134
|
+
}).nullable()
|
|
58135
|
+
});
|
|
58136
|
+
var RemoteLayoutButtonSchema = object({
|
|
58137
|
+
id: string().min(1).max(40),
|
|
58138
|
+
/** 0-based grid position. */
|
|
58139
|
+
row: number().int().min(0).max(24),
|
|
58140
|
+
col: number().int().min(0).max(24),
|
|
58141
|
+
rowSpan: number().int().min(1).max(24),
|
|
58142
|
+
colSpan: number().int().min(1).max(24),
|
|
58143
|
+
icon: string().min(1).max(60).optional(),
|
|
58144
|
+
label: string().min(1).max(40).optional(),
|
|
58145
|
+
role: RemoteRoleSchema
|
|
58146
|
+
});
|
|
58147
|
+
object({
|
|
58148
|
+
columns: number().int().min(1).max(24),
|
|
58149
|
+
rows: number().int().min(1).max(24),
|
|
58150
|
+
buttons: array(RemoteLayoutButtonSchema).max(200)
|
|
58151
|
+
}).superRefine((grid, ctx) => {
|
|
58152
|
+
const ids = /* @__PURE__ */ new Set();
|
|
58153
|
+
const taken = /* @__PURE__ */ new Map();
|
|
58154
|
+
grid.buttons.forEach((button, index) => {
|
|
58155
|
+
if (ids.has(button.id)) ctx.addIssue({
|
|
58156
|
+
code: "custom",
|
|
58157
|
+
message: `button id "${button.id}" is used twice`,
|
|
58158
|
+
path: [
|
|
58159
|
+
"buttons",
|
|
58160
|
+
index,
|
|
58161
|
+
"id"
|
|
58162
|
+
]
|
|
58163
|
+
});
|
|
58164
|
+
ids.add(button.id);
|
|
58165
|
+
if (button.row + button.rowSpan > grid.rows || button.col + button.colSpan > grid.columns) {
|
|
58166
|
+
ctx.addIssue({
|
|
58167
|
+
code: "custom",
|
|
58168
|
+
message: `button "${button.id}" leaves the grid`,
|
|
58169
|
+
path: ["buttons", index]
|
|
58170
|
+
});
|
|
58171
|
+
return;
|
|
58172
|
+
}
|
|
58173
|
+
for (let r = button.row; r < button.row + button.rowSpan; r += 1) for (let c = button.col; c < button.col + button.colSpan; c += 1) {
|
|
58174
|
+
const cell = `${r}:${c}`;
|
|
58175
|
+
const other = taken.get(cell);
|
|
58176
|
+
if (other !== void 0) {
|
|
58177
|
+
ctx.addIssue({
|
|
58178
|
+
code: "custom",
|
|
58179
|
+
message: `buttons "${other}" and "${button.id}" overlap`,
|
|
58180
|
+
path: ["buttons", index]
|
|
58181
|
+
});
|
|
58182
|
+
return;
|
|
58183
|
+
}
|
|
58184
|
+
taken.set(cell, button.id);
|
|
58185
|
+
}
|
|
58186
|
+
});
|
|
58187
|
+
});
|
|
58188
|
+
var RemoteBoundCommandSchema = object({
|
|
58189
|
+
role: RemoteRoleSchema,
|
|
58190
|
+
/** The operator's name for a custom button; absent for a known role. */
|
|
58191
|
+
label: string().optional(),
|
|
58192
|
+
custom: boolean()
|
|
58193
|
+
});
|
|
58194
|
+
var RemoteCommandListSchema = object({
|
|
58195
|
+
layoutTemplateId: string().nullable(),
|
|
58196
|
+
power: object({ mode: RemotePowerModeSchema }),
|
|
58197
|
+
/** Only the roles that are BOUND — the ones a press can reach. */
|
|
58198
|
+
commands: array(RemoteBoundCommandSchema)
|
|
58199
|
+
});
|
|
58200
|
+
var RemoteRefusalReasonSchema = _enum([
|
|
58201
|
+
"no-remote",
|
|
58202
|
+
"unbound-role",
|
|
58203
|
+
"action-failed"
|
|
58204
|
+
]);
|
|
58205
|
+
var RemoteSendResultSchema = discriminatedUnion("status", [
|
|
58206
|
+
object({
|
|
58207
|
+
status: literal("sent"),
|
|
58208
|
+
/** How many times the action ran. */
|
|
58209
|
+
sends: number().int().min(1)
|
|
58210
|
+
}),
|
|
58211
|
+
object({
|
|
58212
|
+
status: literal("skipped"),
|
|
58213
|
+
reason: literal("already-in-state")
|
|
58214
|
+
}),
|
|
58215
|
+
object({
|
|
58216
|
+
status: literal("refused"),
|
|
58217
|
+
reason: RemoteRefusalReasonSchema,
|
|
58218
|
+
detail: string().optional()
|
|
58219
|
+
})
|
|
58220
|
+
]);
|
|
58221
|
+
var RemoteMediaCommandSchema = _enum([
|
|
58222
|
+
"play",
|
|
58223
|
+
"pause",
|
|
58224
|
+
"stop",
|
|
58225
|
+
"next",
|
|
58226
|
+
"previous",
|
|
58227
|
+
"setMute",
|
|
58228
|
+
"selectSource"
|
|
58229
|
+
]);
|
|
58230
|
+
/** A send result, or `not-routed`: the role is not bound, so the native cap answers. */
|
|
58231
|
+
var RemoteMediaCommandResultSchema = discriminatedUnion("status", [...RemoteSendResultSchema.options, object({ status: literal("not-routed") })]);
|
|
58232
|
+
var RemoteSetConfigResultSchema = discriminatedUnion("status", [object({ status: literal("saved") }), object({
|
|
58233
|
+
status: literal("refused"),
|
|
58234
|
+
reason: _enum(["unknown-template", "not-a-media-player"]),
|
|
58235
|
+
detail: string()
|
|
58236
|
+
})]);
|
|
58237
|
+
var deviceInput = object({ deviceId: number().int().nonnegative() });
|
|
58238
|
+
DeviceType.MediaPlayer;
|
|
58239
|
+
method(deviceInput, RemoteConfigSchema, { auth: "admin" }), method(deviceInput.extend({ config: RemoteConfigSchema }), RemoteSetConfigResultSchema, {
|
|
58240
|
+
kind: "mutation",
|
|
58241
|
+
auth: "admin"
|
|
58242
|
+
}), method(deviceInput, RemoteCommandListSchema, { auth: "protected" }), method(deviceInput.extend({
|
|
58243
|
+
role: RemoteRoleSchema,
|
|
58244
|
+
/** Sends in a row (volume steps). */
|
|
58245
|
+
repeat: number().int().min(1).max(50).default(1)
|
|
58246
|
+
}), RemoteSendResultSchema, {
|
|
58247
|
+
kind: "mutation",
|
|
58248
|
+
auth: "protected"
|
|
58249
|
+
}), method(deviceInput.extend({
|
|
58250
|
+
command: RemoteMediaCommandSchema,
|
|
58251
|
+
muted: boolean().optional(),
|
|
58252
|
+
source: string().optional(),
|
|
58253
|
+
repeat: number().int().min(1).max(50).default(1)
|
|
58254
|
+
}), RemoteMediaCommandResultSchema, {
|
|
58255
|
+
kind: "mutation",
|
|
58256
|
+
auth: "protected"
|
|
58257
|
+
});
|
|
58258
|
+
var TemplateKindSchema = _enum(["remote"]);
|
|
58259
|
+
/**
|
|
58260
|
+
* template — the generic store of reusable, named operator data (D963). A
|
|
58261
|
+
* record is `{ id, kind, name, payload }`; the kinds (today only `remote`, the
|
|
58262
|
+
* button grid of a remote) and the schema each payload must satisfy are
|
|
58263
|
+
* declared by the system in `template-kinds.ts`. Nothing here is specific to a
|
|
58264
|
+
* kind: the engine validates a payload against its kind's schema and, on a
|
|
58265
|
+
* delete, asks the kind's owner whether anything still points at the record.
|
|
58266
|
+
*
|
|
58267
|
+
* Every refusal is a typed result — a UI says "unknown kind" or names the
|
|
58268
|
+
* devices that still use a template, without parsing text.
|
|
58269
|
+
*/
|
|
58270
|
+
var TemplateRecordSchema = object({
|
|
58271
|
+
id: string().min(1),
|
|
58272
|
+
kind: TemplateKindSchema,
|
|
58273
|
+
name: string().min(1).max(120),
|
|
58274
|
+
/** Shaped by the kind; `checkTemplatePayload(kind, payload)` reads it. */
|
|
58275
|
+
payload: unknown(),
|
|
58276
|
+
createdAt: number(),
|
|
58277
|
+
updatedAt: number()
|
|
58278
|
+
});
|
|
58279
|
+
var TemplateWriteResultSchema = discriminatedUnion("status", [object({
|
|
58280
|
+
status: literal("saved"),
|
|
58281
|
+
template: TemplateRecordSchema
|
|
58282
|
+
}), object({
|
|
58283
|
+
status: literal("refused"),
|
|
58284
|
+
reason: _enum(["invalid-payload", "not-found"]),
|
|
58285
|
+
detail: string()
|
|
58286
|
+
})]);
|
|
58287
|
+
/** A device still pointing at a template. */
|
|
58288
|
+
var TemplateUserSchema = object({
|
|
58289
|
+
deviceId: number().int().nonnegative(),
|
|
58290
|
+
name: string()
|
|
58291
|
+
});
|
|
58292
|
+
var TemplateDeleteResultSchema = discriminatedUnion("status", [
|
|
58293
|
+
object({ status: literal("deleted") }),
|
|
58294
|
+
object({ status: literal("not-found") }),
|
|
58295
|
+
object({
|
|
58296
|
+
status: literal("in-use"),
|
|
58297
|
+
devices: array(TemplateUserSchema).min(1)
|
|
58298
|
+
})
|
|
58299
|
+
]);
|
|
58300
|
+
method(object({ kind: TemplateKindSchema.optional() }), array(TemplateRecordSchema), { auth: "protected" }), method(object({ id: string().min(1) }), TemplateRecordSchema.nullable(), { auth: "protected" }), method(object({
|
|
58301
|
+
kind: TemplateKindSchema,
|
|
58302
|
+
name: string().min(1).max(120),
|
|
58303
|
+
payload: unknown()
|
|
58304
|
+
}), TemplateWriteResultSchema, {
|
|
58305
|
+
kind: "mutation",
|
|
58306
|
+
auth: "admin"
|
|
58307
|
+
}), method(object({
|
|
58308
|
+
id: string().min(1),
|
|
58309
|
+
name: string().min(1).max(120).optional(),
|
|
58310
|
+
payload: unknown().optional()
|
|
58311
|
+
}), TemplateWriteResultSchema, {
|
|
58312
|
+
kind: "mutation",
|
|
58313
|
+
auth: "admin"
|
|
58314
|
+
}), method(object({ id: string().min(1) }), TemplateDeleteResultSchema, {
|
|
58315
|
+
kind: "mutation",
|
|
58316
|
+
auth: "admin"
|
|
58317
|
+
});
|
|
57987
58318
|
DeviceType.Button, method(object({ deviceId: number().int().nonnegative() }), _void(), {
|
|
57988
58319
|
kind: "mutation",
|
|
57989
58320
|
auth: "protected"
|
|
@@ -60733,9 +61064,35 @@ var MediaInfoSchema = object({
|
|
|
60733
61064
|
/** Optional cover-art / thumbnail URL. */
|
|
60734
61065
|
imageUrl: string().optional()
|
|
60735
61066
|
});
|
|
61067
|
+
/**
|
|
61068
|
+
* Where `state`, `volumeLevel`, `isMuted` and `source` come from. `reported`:
|
|
61069
|
+
* the device said so. `assumed`: the driver has no feedback (infrared) and
|
|
61070
|
+
* tracks what it last SENT; it moves only after a send was accepted, and a
|
|
61071
|
+
* human at the real remote makes it wrong. A UI shows an assumed value as a
|
|
61072
|
+
* guess, never as a reading.
|
|
61073
|
+
*/
|
|
61074
|
+
var MediaPlayerStateSourceSchema = _enum(["reported", "assumed"]);
|
|
61075
|
+
/** The fields of a media-player status a driver can only guess. */
|
|
61076
|
+
var MediaPlayerAssumedFieldSchema = _enum([
|
|
61077
|
+
"state",
|
|
61078
|
+
"volumeLevel",
|
|
61079
|
+
"isMuted",
|
|
61080
|
+
"source"
|
|
61081
|
+
]);
|
|
60736
61082
|
object({
|
|
60737
61083
|
/** Playback lifecycle state. */
|
|
60738
61084
|
state: MediaPlayerStateSchema,
|
|
61085
|
+
/**
|
|
61086
|
+
* Whether the state fields are readings or the driver's own bookkeeping.
|
|
61087
|
+
* A slice written before this field existed parses as `reported`.
|
|
61088
|
+
*/
|
|
61089
|
+
stateSource: MediaPlayerStateSourceSchema.default("reported"),
|
|
61090
|
+
/**
|
|
61091
|
+
* Which fields are the driver's own guess. `stateSource` is `assumed` when
|
|
61092
|
+
* this is not empty; a field not listed here is a reading even then (power
|
|
61093
|
+
* from a running-state source, mute guessed from the last send).
|
|
61094
|
+
*/
|
|
61095
|
+
assumedFields: array(MediaPlayerAssumedFieldSchema).default([]),
|
|
60739
61096
|
/** Volume as 0..100 inclusive. Null when the device has no volume
|
|
60740
61097
|
* surface. Pair with `DeviceFeature.MediaPlayerVolume`. */
|
|
60741
61098
|
volumeLevel: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
@@ -62176,6 +62533,14 @@ object({
|
|
|
62176
62533
|
feedSound: boolean(),
|
|
62177
62534
|
/** Speaker / prompt volume level (device-scaled integer). */
|
|
62178
62535
|
volume: number().meta(readingMeta("none")),
|
|
62536
|
+
/** Portion (grams) of the last manual feed sent from a single-hopper
|
|
62537
|
+
* stepper — the default the next manual feed starts from. Persisted per
|
|
62538
|
+
* device by the provider; null until a manual feed has been sent. */
|
|
62539
|
+
lastFeedGrams: gramsPortion.nullable(),
|
|
62540
|
+
/** Hopper-1 portion of the last manual feed (dual-hopper); null until sent. */
|
|
62541
|
+
lastFeedHopper1: gramsPortion.nullable(),
|
|
62542
|
+
/** Hopper-2 portion of the last manual feed (dual-hopper); null until sent. */
|
|
62543
|
+
lastFeedHopper2: gramsPortion.nullable(),
|
|
62179
62544
|
/** Ms epoch when the slice was last refreshed from the cloud. */
|
|
62180
62545
|
lastFetchedAt: number()
|
|
62181
62546
|
});
|
|
@@ -66817,9 +67182,17 @@ method(object({}), array(TrainingBaseModelSchema).readonly(), { auth: "admin" })
|
|
|
66817
67182
|
kind: "mutation",
|
|
66818
67183
|
auth: "admin"
|
|
66819
67184
|
});
|
|
67185
|
+
discriminatedUnion("kind", [object({
|
|
67186
|
+
kind: literal("raw"),
|
|
67187
|
+
timings: array(number().int()),
|
|
67188
|
+
settings: TransmitSettingsSchema.optional()
|
|
67189
|
+
}), object({
|
|
67190
|
+
kind: literal("pronto"),
|
|
67191
|
+
code: string()
|
|
67192
|
+
})]);
|
|
66820
67193
|
DeviceFeature.FanSpeed, DeviceFeature.FanPreset, DeviceFeature.FanDirection, DeviceFeature.FanOscillating, DeviceFeature.CoverPositionable, DeviceFeature.CoverTilt, DeviceFeature.ValvePositionable, DeviceFeature.MediaPlayerVolume, DeviceFeature.ClimateFanMode;
|
|
66821
67194
|
SOURCE_CAPS.filter((cap) => cap !== "switch" && cap !== "motion");
|
|
66822
|
-
DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.PetFeeder, DeviceType.Container, DeviceType.Thermostat, DeviceType.EventEmitter, DeviceType.Camera, DeviceType.Hub, DeviceType.Light, DeviceType.Siren, DeviceType.Switch, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Fan, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder, DeviceType.Dishwasher, DeviceType.Washer, DeviceType.Dryer, DeviceType.Camera, DeviceType.Camera, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.MediaPlayer, DeviceType.WaterHeater, DeviceType.Humidifier, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.PetFeeder;
|
|
67195
|
+
DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.PetFeeder, DeviceType.Container, DeviceType.Thermostat, DeviceType.EventEmitter, DeviceType.Camera, DeviceType.Hub, DeviceType.Light, DeviceType.Siren, DeviceType.Switch, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Fan, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder, DeviceType.Dishwasher, DeviceType.Washer, DeviceType.Dryer, DeviceType.Camera, DeviceType.Camera, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.MediaPlayer, DeviceType.WaterHeater, DeviceType.Humidifier, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.PetFeeder;
|
|
66823
67196
|
String.raw`rose\(active(\d+), changed(\d+), (\d+(?:\.\d+)?)\)`;
|
|
66824
67197
|
DeviceRole.BinarySensor, DeviceRole.MotionSensor;
|
|
66825
67198
|
new Set(CAP_NAMES);
|
|
@@ -74659,6 +75032,41 @@ Object.freeze({
|
|
|
74659
75032
|
access: "create",
|
|
74660
75033
|
role: "admin"
|
|
74661
75034
|
},
|
|
75035
|
+
"remote.getConfig": {
|
|
75036
|
+
capName: "remote",
|
|
75037
|
+
capScope: "system",
|
|
75038
|
+
addonId: null,
|
|
75039
|
+
access: "view",
|
|
75040
|
+
role: "admin"
|
|
75041
|
+
},
|
|
75042
|
+
"remote.listCommands": {
|
|
75043
|
+
capName: "remote",
|
|
75044
|
+
capScope: "system",
|
|
75045
|
+
addonId: null,
|
|
75046
|
+
access: "view",
|
|
75047
|
+
role: "admin"
|
|
75048
|
+
},
|
|
75049
|
+
"remote.sendCommand": {
|
|
75050
|
+
capName: "remote",
|
|
75051
|
+
capScope: "system",
|
|
75052
|
+
addonId: null,
|
|
75053
|
+
access: "create",
|
|
75054
|
+
role: "admin"
|
|
75055
|
+
},
|
|
75056
|
+
"remote.sendMediaCommand": {
|
|
75057
|
+
capName: "remote",
|
|
75058
|
+
capScope: "system",
|
|
75059
|
+
addonId: null,
|
|
75060
|
+
access: "create",
|
|
75061
|
+
role: "admin"
|
|
75062
|
+
},
|
|
75063
|
+
"remote.setConfig": {
|
|
75064
|
+
capName: "remote",
|
|
75065
|
+
capScope: "system",
|
|
75066
|
+
addonId: null,
|
|
75067
|
+
access: "create",
|
|
75068
|
+
role: "admin"
|
|
75069
|
+
},
|
|
74662
75070
|
"runningState.getStatus": {
|
|
74663
75071
|
capName: "running-state",
|
|
74664
75072
|
capScope: "device",
|
|
@@ -75849,6 +76257,41 @@ Object.freeze({
|
|
|
75849
76257
|
access: "view",
|
|
75850
76258
|
role: "viewer"
|
|
75851
76259
|
},
|
|
76260
|
+
"template.create": {
|
|
76261
|
+
capName: "template",
|
|
76262
|
+
capScope: "system",
|
|
76263
|
+
addonId: null,
|
|
76264
|
+
access: "create",
|
|
76265
|
+
role: "admin"
|
|
76266
|
+
},
|
|
76267
|
+
"template.delete": {
|
|
76268
|
+
capName: "template",
|
|
76269
|
+
capScope: "system",
|
|
76270
|
+
addonId: null,
|
|
76271
|
+
access: "delete",
|
|
76272
|
+
role: "admin"
|
|
76273
|
+
},
|
|
76274
|
+
"template.get": {
|
|
76275
|
+
capName: "template",
|
|
76276
|
+
capScope: "system",
|
|
76277
|
+
addonId: null,
|
|
76278
|
+
access: "view",
|
|
76279
|
+
role: "admin"
|
|
76280
|
+
},
|
|
76281
|
+
"template.list": {
|
|
76282
|
+
capName: "template",
|
|
76283
|
+
capScope: "system",
|
|
76284
|
+
addonId: null,
|
|
76285
|
+
access: "view",
|
|
76286
|
+
role: "admin"
|
|
76287
|
+
},
|
|
76288
|
+
"template.update": {
|
|
76289
|
+
capName: "template",
|
|
76290
|
+
capScope: "system",
|
|
76291
|
+
addonId: null,
|
|
76292
|
+
access: "create",
|
|
76293
|
+
role: "admin"
|
|
76294
|
+
},
|
|
75852
76295
|
"terminalSession.adoptLegacyMonitor": {
|
|
75853
76296
|
capName: "terminal-session",
|
|
75854
76297
|
capScope: "system",
|
|
@@ -80680,6 +81123,7 @@ var SYSTEM_CAP_VOCABULARY = {
|
|
|
80680
81123
|
"recording-archive": system(STORAGE),
|
|
80681
81124
|
"recording-export": system("recording exports — requested from the timeline, not an automation step"),
|
|
80682
81125
|
records: system(INTERNAL),
|
|
81126
|
+
remote: system("the per-device remote setup — authored in the Customize remote editor, sent through the remote UI"),
|
|
80683
81127
|
"server-management": system(CLUSTER),
|
|
80684
81128
|
"settings-store": system(INTERNAL),
|
|
80685
81129
|
"smtp-provider": system(INTERNAL),
|
|
@@ -80692,6 +81136,7 @@ var SYSTEM_CAP_VOCABULARY = {
|
|
|
80692
81136
|
"storage-provider": system(STORAGE),
|
|
80693
81137
|
"stream-broker": system(PIPELINE),
|
|
80694
81138
|
system: system(CLUSTER),
|
|
81139
|
+
template: system("operator-authored templates — edited in their own editor, never actuated"),
|
|
80695
81140
|
"terminal-session": system(CLUSTER),
|
|
80696
81141
|
toast: system(UI_PLUMBING),
|
|
80697
81142
|
training: system(ML),
|
|
@@ -83118,6 +83563,31 @@ Object.freeze({
|
|
|
83118
83563
|
form: "single",
|
|
83119
83564
|
optional: true
|
|
83120
83565
|
}],
|
|
83566
|
+
"remote.getConfig": [{
|
|
83567
|
+
name: "deviceId",
|
|
83568
|
+
form: "single",
|
|
83569
|
+
optional: false
|
|
83570
|
+
}],
|
|
83571
|
+
"remote.listCommands": [{
|
|
83572
|
+
name: "deviceId",
|
|
83573
|
+
form: "single",
|
|
83574
|
+
optional: false
|
|
83575
|
+
}],
|
|
83576
|
+
"remote.sendCommand": [{
|
|
83577
|
+
name: "deviceId",
|
|
83578
|
+
form: "single",
|
|
83579
|
+
optional: false
|
|
83580
|
+
}],
|
|
83581
|
+
"remote.sendMediaCommand": [{
|
|
83582
|
+
name: "deviceId",
|
|
83583
|
+
form: "single",
|
|
83584
|
+
optional: false
|
|
83585
|
+
}],
|
|
83586
|
+
"remote.setConfig": [{
|
|
83587
|
+
name: "deviceId",
|
|
83588
|
+
form: "single",
|
|
83589
|
+
optional: false
|
|
83590
|
+
}],
|
|
83121
83591
|
"runningState.getStatus": [{
|
|
83122
83592
|
name: "deviceId",
|
|
83123
83593
|
form: "single",
|
|
@@ -84926,14 +85396,6 @@ DEFAULT_NATIVE_LEASE_SETTINGS.admission;
|
|
|
84926
85396
|
String.raw`(?<=^|["'(\s>,\[{])`;
|
|
84927
85397
|
var MB = 1024 * 1024;
|
|
84928
85398
|
1024 * MB, 3072 * MB;
|
|
84929
|
-
discriminatedUnion("kind", [object({
|
|
84930
|
-
kind: literal("raw"),
|
|
84931
|
-
timings: array(number().int()),
|
|
84932
|
-
settings: TransmitSettingsSchema.optional()
|
|
84933
|
-
}), object({
|
|
84934
|
-
kind: literal("pronto"),
|
|
84935
|
-
code: string()
|
|
84936
|
-
})]);
|
|
84937
85399
|
object({
|
|
84938
85400
|
manufacturer: string().optional(),
|
|
84939
85401
|
supportedModels: array(string()).optional(),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { S as e, d as t, u as n, v as r } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react__loadShare__.js-DMBKVIH7.mjs";
|
|
2
2
|
import { n as i, r as a, t as o } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-ds_Ehzaa.mjs";
|
|
3
|
-
import { _ as s, g as c } from "./responsive-
|
|
3
|
+
import { _ as s, g as c } from "./responsive-Dypi_Y-V.mjs";
|
|
4
4
|
var l = s("chevron-down", [["path", {
|
|
5
5
|
d: "m6 9 6 6 6-6",
|
|
6
6
|
key: "qrunsl"
|
package/dist/remoteEntry.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as e, t } from "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-
|
|
1
|
+
import { n as e, t } from "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-DyWlwmuC.mjs";
|
|
2
2
|
export { t as get, e as init };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { S as e, d as t, g as n, i as r, l as i, n as a, r as o, u as s, v as c, y as l } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react__loadShare__.js-DMBKVIH7.mjs";
|
|
2
2
|
import "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-ds_Ehzaa.mjs";
|
|
3
|
-
import { S as u } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-
|
|
3
|
+
import { S as u } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-D_KssOQn.mjs";
|
|
4
4
|
//#region ../../node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js
|
|
5
5
|
e();
|
|
6
6
|
var d = (...e) => e.filter((e, t, n) => !!e && e.trim() !== "" && n.indexOf(e) === t).join(" ").trim(), f = (e) => e.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(), p = (e) => e.replace(/^([A-Z])|[\s-_]+(\w)/g, (e, t, n) => n ? n.toUpperCase() : t.toLowerCase()), m = (e) => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { S as e, g as t, l as n, u as r, v as i } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react__loadShare__.js-DMBKVIH7.mjs";
|
|
2
2
|
import "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-ds_Ehzaa.mjs";
|
|
3
3
|
import { n as a } from "./ui-text-BqZa5BNK.mjs";
|
|
4
|
-
import { _ as o, g as s } from "./responsive-
|
|
4
|
+
import { _ as o, g as s } from "./responsive-Dypi_Y-V.mjs";
|
|
5
5
|
var c = o("camera", [["path", {
|
|
6
6
|
d: "M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z",
|
|
7
7
|
key: "18u6gg"
|
|
@@ -2753,7 +2753,7 @@ async function rr(e) {
|
|
|
2753
2753
|
}
|
|
2754
2754
|
}
|
|
2755
2755
|
async function ir() {
|
|
2756
|
-
return tr ||= rr(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-
|
|
2756
|
+
return tr ||= rr(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-BaMcMPS8.mjs")).catch((e) => {
|
|
2757
2757
|
throw tr = void 0, e;
|
|
2758
2758
|
}), tr;
|
|
2759
2759
|
}
|