@camstack/addon-model-studio 1.1.141 → 1.1.143

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 (18) hide show
  1. package/dist/{MotionZonesSettings-B5oV0MdI.mjs → MotionZonesSettings-BCZidV1W.mjs} +2 -2
  2. package/dist/{PrivacyMaskSettings-C1Qm7jrF.mjs → PrivacyMaskSettings-U0a679pe.mjs} +4 -4
  3. package/dist/{SceneMonitorEditor-Cc76ecMi.mjs → SceneMonitorEditor-D7gmH35x.mjs} +13 -13
  4. package/dist/_stub.js +12 -14
  5. package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-CTkEe-XL.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-DYqebP3v.mjs} +4 -4
  6. package/dist/{_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-Ck5bXAEc.mjs → _virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CKEe1Nbx.mjs} +1 -1
  7. package/dist/addon-model-studio.css +1 -1
  8. package/dist/{hostInit-CRf6DNPv.mjs → hostInit-DPytEYgO.mjs} +3 -3
  9. package/dist/model-studio.addon.js +209 -7
  10. package/dist/model-studio.addon.mjs +209 -7
  11. package/dist/{player-overlays-M0l7AyPu.mjs → player-overlays-h4kwY-YM.mjs} +1 -1
  12. package/dist/remoteEntry.js +1 -1
  13. package/dist/{responsive-8-xrhADg.mjs → responsive-C6dBVCr7.mjs} +1 -1
  14. package/dist/{use-device-snapshot-BJO0wrqY.mjs → scene-monitor-copy-BJ1b42AA.mjs} +46 -46
  15. package/dist/{square-8-ETDCsB.mjs → square-DRNiF2hB.mjs} +1 -1
  16. package/dist/{trash-2-Bgi7lLFL.mjs → trash-2-DRNHM26U.mjs} +1 -1
  17. package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-CDobikrl.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-CigmnmQE.mjs} +1 -1
  18. package/package.json +1 -1
@@ -5884,7 +5884,7 @@ var ZodIssueCode = {
5884
5884
  var ZodFirstPartyTypeKind;
5885
5885
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5886
5886
  //#endregion
5887
- //#region ../types/dist/sleep-BDR76Ykr.mjs
5887
+ //#region ../types/dist/sleep-vl6nBE8d.mjs
5888
5888
  /**
5889
5889
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5890
5890
  * window to float samples (D455).
@@ -29331,14 +29331,81 @@ DeviceType.Camera, method(object({ deviceId: number() }), PrivacyMaskOptionsSche
29331
29331
  kind: "mutation",
29332
29332
  auth: "admin"
29333
29333
  });
29334
+ /**
29335
+ * What a preset id DOES on this camera.
29336
+ *
29337
+ * On several PTZ firmwares the preset namespace is shared: low ids are stored
29338
+ * positions, a reserved band triggers camera FUNCTIONS. The dispensa camera
29339
+ * (Hikvision) returns its own reserved band in the preset list, named by the
29340
+ * firmware:
29341
+ *
29342
+ * 34 Back to origin · 39 Day mode · 40 Night mode · 46 Day/Night Auto Mode
29343
+ * 92 Set manual limits · 93 Save manual limits · 94 Remote reboot
29344
+ * 95 Call OSD menu
29345
+ *
29346
+ * We used to hand all of these to the UI as ordinary presets. Saving over one
29347
+ * is what produced `PUT /ISAPI/PTZCtrl/channels/1/presets/34 -> HTTP 500`: the
29348
+ * camera refusing to let "Back to origin" be overwritten, surfaced to the
29349
+ * operator as a transport failure.
29350
+ *
29351
+ * A function preset stays fully usable as a DESTINATION -- `goToPreset('34')`
29352
+ * is the single most useful thing that camera can do. Only `savePreset` and
29353
+ * `deletePreset` are gated.
29354
+ */
29355
+ var PtzPresetFunctionSchema = _enum([
29356
+ "home",
29357
+ "day-mode",
29358
+ "night-mode",
29359
+ "day-night-auto",
29360
+ "set-limits",
29361
+ "save-limits",
29362
+ "reboot",
29363
+ "osd-menu"
29364
+ ]);
29334
29365
  var PtzPresetSchema = object({
29335
29366
  id: string(),
29336
- name: string()
29367
+ name: string(),
29368
+ /**
29369
+ * The firmware function this id performs, when the provider KNOWS the id is
29370
+ * reserved. `null` = an ordinary stored position, OR a reserved id this
29371
+ * provider does not recognise -- the two are told apart by `writable`.
29372
+ */
29373
+ fn: PtzPresetFunctionSchema.nullable(),
29374
+ /**
29375
+ * Whether `savePreset` / `deletePreset` may target this id. A provider sets
29376
+ * it false only for a band it KNOWS is reserved; where the firmware is not
29377
+ * documented it stays true and a refusal comes from the camera, named.
29378
+ */
29379
+ writable: boolean()
29337
29380
  });
29381
+ /**
29382
+ * Where the head is pointing -- per axis, and `null` when the driver cannot
29383
+ * read it.
29384
+ *
29385
+ * It used to be three REQUIRED numbers, which left a provider that cannot read
29386
+ * position no way to say so. All four said `0`:
29387
+ *
29388
+ * reolink `return { pan: 0, tilt: 0, zoom: 0 }` "until a position-query
29389
+ * path lands upstream"
29390
+ * hikvision stub, "firmware-dependent and frequently absent"
29391
+ * amcrest stub, "no generic absolute-position read for this model family"
29392
+ * onvif throws
29393
+ *
29394
+ * So every consumer asking where a camera points was told "perfectly centred"
29395
+ * by four cameras that had never looked. That is D393 -- a measurement that
29396
+ * FAILED is `null`, never `0`, and the type says so all the way to the
29397
+ * decision -- the same shape as the unreadable `statfs` folded into "0 bytes of
29398
+ * headroom", which evacuated a healthy disk.
29399
+ *
29400
+ * D393 also says to check for a narrower structural TWIN of the result type.
29401
+ * There is one: `PtzStatusSchema` extends this, so the lie had already
29402
+ * propagated into `getStatus`, which is the surface `getPosition`'s own comment
29403
+ * tells callers to migrate to.
29404
+ */
29338
29405
  var PtzPositionSchema = object({
29339
- pan: number(),
29340
- tilt: number(),
29341
- zoom: number()
29406
+ pan: number().nullable(),
29407
+ tilt: number().nullable(),
29408
+ zoom: number().nullable()
29342
29409
  });
29343
29410
  var PtzMoveCommandSchema = object({
29344
29411
  pan: number().optional(),
@@ -29357,7 +29424,72 @@ var PtzOptionsSchema = object({
29357
29424
  maxPresets: number().optional(),
29358
29425
  /** Whether the camera exposes a controllable autofocus toggle
29359
29426
  * (boolean `hasX` per the getOptions availability convention). */
29360
- hasAutofocus: boolean()
29427
+ hasAutofocus: boolean(),
29428
+ /**
29429
+ * How many distinct speeds this camera's NATIVE scale offers.
29430
+ *
29431
+ * The cap's `speed` is normalized 0..1 and each provider maps it down --
29432
+ * Baichuan 1..63, Dahua 1..8, ISAPI's percentage -100..100. The normalized
29433
+ * value hides how coarse that really is: asking an amcrest for `0.37` is
29434
+ * meaningless, because it has eight steps and three of them round to the
29435
+ * same one. A loop that tunes its own gain has to know the granularity of
29436
+ * the knob it is turning.
29437
+ *
29438
+ * `null` = the driver does not know, or the scale is continuous (ONVIF takes
29439
+ * a float). Never a made-up number.
29440
+ */
29441
+ speedSteps: number().int().positive().nullable(),
29442
+ /**
29443
+ * How long ONE `move` pulse runs on this driver, ms.
29444
+ *
29445
+ * `move` is a self-terminating burst everywhere, but every provider hardcoded
29446
+ * its own duration in private -- 200 reolink, 350 amcrest, 500 hikvision,
29447
+ * 1000 onvif -- so no caller could read it. It is the DENOMINATOR of "how far
29448
+ * did the head travel per pulse": without it a measured displacement has no
29449
+ * gain to be divided into.
29450
+ *
29451
+ * `null` = the driver cannot say.
29452
+ */
29453
+ moveImpulseMs: number().int().positive().nullable()
29454
+ });
29455
+ /**
29456
+ * Which preset `goHome` goes to, and WHO decided.
29457
+ *
29458
+ * `goHome` used to be three vendor "conventions" written in three comments --
29459
+ * Reolink preset 0, Hikvision preset '1', Dahua preset 1 -- and on this fleet
29460
+ * not one of the three cameras honours its own:
29461
+ *
29462
+ * 592 Videocamera camera Daniel (reolink) preset 0 holds "stanza"
29463
+ * 1438 Videocamera dispensa (hikvision) preset 1 holds "Credenza"
29464
+ * 3836 Videocamera studio (amcrest) preset 1 holds "Preset1"
29465
+ *
29466
+ * So `goHome` meant "go wherever the operator happened to save in slot 0 or 1",
29467
+ * and two of the three swallowed the failure in a bare `catch`. For autotrack
29468
+ * this is the HOTTEST path -- it runs every time a subject is released -- so it
29469
+ * needs an answer that is true per camera and audible when it is missing.
29470
+ *
29471
+ * `source` is what makes it honest:
29472
+ * - `operator` -- picked in the UI, stored by the provider.
29473
+ * - `firmware` -- the camera itself named a preset `fn: 'home'` (Hikvision's
29474
+ * "Back to origin"), adopted as the default with nothing to configure.
29475
+ * - `native` -- the driver homes WITHOUT a preset at all. ONVIF does:
29476
+ * `goHome` is `ptzAbsoluteMove({x:0, y:0, zoom:0})`. `presetId` is null and
29477
+ * that is not a failure -- there is nothing to pick, and the UI must offer
29478
+ * no picker.
29479
+ * - `none` -- nothing is configured and the camera names nothing.
29480
+ * `goHome` REFUSES rather than moving the head somewhere arbitrary.
29481
+ *
29482
+ * `source === 'none'` is the refusal condition, NOT `presetId === null`: the
29483
+ * native case has no preset and homes perfectly well.
29484
+ */
29485
+ var PtzHomePresetSchema = object({
29486
+ presetId: string().nullable(),
29487
+ source: _enum([
29488
+ "operator",
29489
+ "firmware",
29490
+ "native",
29491
+ "none"
29492
+ ])
29361
29493
  });
29362
29494
  DeviceType.Camera, method(PtzMoveCommandSchema.extend({ deviceId: number() }), _void(), { kind: "mutation" }), method(PtzMoveCommandSchema.extend({ deviceId: number() }), _void(), { kind: "mutation" }), method(object({ deviceId: number() }), _void(), { kind: "mutation" }), method(object({ deviceId: number() }), array(PtzPresetSchema)), method(object({
29363
29495
  deviceId: number(),
@@ -29375,7 +29507,22 @@ DeviceType.Camera, method(PtzMoveCommandSchema.extend({ deviceId: number() }), _
29375
29507
  }), _void(), {
29376
29508
  kind: "mutation",
29377
29509
  auth: "admin"
29378
- }), method(object({ deviceId: number() }), PtzOptionsSchema), method(object({ deviceId: number() }), _void(), { kind: "mutation" }), method(object({ deviceId: number() }), PtzPositionSchema), method(object({
29510
+ }), method(object({ deviceId: number() }), PtzOptionsSchema), method(object({ deviceId: number() }), _void(), { kind: "mutation" }), method(object({ deviceId: number() }), PtzHomePresetSchema), method(object({
29511
+ deviceId: number(),
29512
+ presetId: string().nullable()
29513
+ }), _void(), {
29514
+ kind: "mutation",
29515
+ auth: "admin"
29516
+ }), method(object({ deviceId: number() }), _void(), {
29517
+ kind: "mutation",
29518
+ auth: "admin"
29519
+ }), method(object({ deviceId: number() }), number().int().nullable()), method(object({
29520
+ deviceId: number(),
29521
+ seconds: number().int().min(0).max(3600)
29522
+ }), _void(), {
29523
+ kind: "mutation",
29524
+ auth: "admin"
29525
+ }), method(object({ deviceId: number() }), PtzPositionSchema), method(object({
29379
29526
  deviceId: number(),
29380
29527
  enabled: boolean()
29381
29528
  }), _void(), { kind: "mutation" });
@@ -36378,6 +36525,12 @@ Object.freeze({
36378
36525
  addonId: null,
36379
36526
  access: "create"
36380
36527
  },
36528
+ "ptz.captureHomeHere": {
36529
+ capName: "ptz",
36530
+ capScope: "device",
36531
+ addonId: null,
36532
+ access: "create"
36533
+ },
36381
36534
  "ptz.continuousMove": {
36382
36535
  capName: "ptz",
36383
36536
  capScope: "device",
@@ -36390,6 +36543,18 @@ Object.freeze({
36390
36543
  addonId: null,
36391
36544
  access: "delete"
36392
36545
  },
36546
+ "ptz.getHomePreset": {
36547
+ capName: "ptz",
36548
+ capScope: "device",
36549
+ addonId: null,
36550
+ access: "view"
36551
+ },
36552
+ "ptz.getHomeReturnSeconds": {
36553
+ capName: "ptz",
36554
+ capScope: "device",
36555
+ addonId: null,
36556
+ access: "view"
36557
+ },
36393
36558
  "ptz.getOptions": {
36394
36559
  capName: "ptz",
36395
36560
  capScope: "device",
@@ -36438,6 +36603,18 @@ Object.freeze({
36438
36603
  addonId: null,
36439
36604
  access: "create"
36440
36605
  },
36606
+ "ptz.setHomePreset": {
36607
+ capName: "ptz",
36608
+ capScope: "device",
36609
+ addonId: null,
36610
+ access: "create"
36611
+ },
36612
+ "ptz.setHomeReturnSeconds": {
36613
+ capName: "ptz",
36614
+ capScope: "device",
36615
+ addonId: null,
36616
+ access: "create"
36617
+ },
36441
36618
  "ptz.stop": {
36442
36619
  capName: "ptz",
36443
36620
  capScope: "device",
@@ -39601,6 +39778,11 @@ Object.freeze({
39601
39778
  form: "single",
39602
39779
  optional: false
39603
39780
  }],
39781
+ "ptz.captureHomeHere": [{
39782
+ name: "deviceId",
39783
+ form: "single",
39784
+ optional: false
39785
+ }],
39604
39786
  "ptz.continuousMove": [{
39605
39787
  name: "deviceId",
39606
39788
  form: "single",
@@ -39611,6 +39793,16 @@ Object.freeze({
39611
39793
  form: "single",
39612
39794
  optional: false
39613
39795
  }],
39796
+ "ptz.getHomePreset": [{
39797
+ name: "deviceId",
39798
+ form: "single",
39799
+ optional: false
39800
+ }],
39801
+ "ptz.getHomeReturnSeconds": [{
39802
+ name: "deviceId",
39803
+ form: "single",
39804
+ optional: false
39805
+ }],
39614
39806
  "ptz.getOptions": [{
39615
39807
  name: "deviceId",
39616
39808
  form: "single",
@@ -39651,6 +39843,16 @@ Object.freeze({
39651
39843
  form: "single",
39652
39844
  optional: false
39653
39845
  }],
39846
+ "ptz.setHomePreset": [{
39847
+ name: "deviceId",
39848
+ form: "single",
39849
+ optional: false
39850
+ }],
39851
+ "ptz.setHomeReturnSeconds": [{
39852
+ name: "deviceId",
39853
+ form: "single",
39854
+ optional: false
39855
+ }],
39654
39856
  "ptz.stop": [{
39655
39857
  name: "deviceId",
39656
39858
  form: "single",
@@ -5863,7 +5863,7 @@ var ZodIssueCode = {
5863
5863
  var ZodFirstPartyTypeKind;
5864
5864
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5865
5865
  //#endregion
5866
- //#region ../types/dist/sleep-BDR76Ykr.mjs
5866
+ //#region ../types/dist/sleep-vl6nBE8d.mjs
5867
5867
  /**
5868
5868
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5869
5869
  * window to float samples (D455).
@@ -29310,14 +29310,81 @@ DeviceType.Camera, method(object({ deviceId: number() }), PrivacyMaskOptionsSche
29310
29310
  kind: "mutation",
29311
29311
  auth: "admin"
29312
29312
  });
29313
+ /**
29314
+ * What a preset id DOES on this camera.
29315
+ *
29316
+ * On several PTZ firmwares the preset namespace is shared: low ids are stored
29317
+ * positions, a reserved band triggers camera FUNCTIONS. The dispensa camera
29318
+ * (Hikvision) returns its own reserved band in the preset list, named by the
29319
+ * firmware:
29320
+ *
29321
+ * 34 Back to origin · 39 Day mode · 40 Night mode · 46 Day/Night Auto Mode
29322
+ * 92 Set manual limits · 93 Save manual limits · 94 Remote reboot
29323
+ * 95 Call OSD menu
29324
+ *
29325
+ * We used to hand all of these to the UI as ordinary presets. Saving over one
29326
+ * is what produced `PUT /ISAPI/PTZCtrl/channels/1/presets/34 -> HTTP 500`: the
29327
+ * camera refusing to let "Back to origin" be overwritten, surfaced to the
29328
+ * operator as a transport failure.
29329
+ *
29330
+ * A function preset stays fully usable as a DESTINATION -- `goToPreset('34')`
29331
+ * is the single most useful thing that camera can do. Only `savePreset` and
29332
+ * `deletePreset` are gated.
29333
+ */
29334
+ var PtzPresetFunctionSchema = _enum([
29335
+ "home",
29336
+ "day-mode",
29337
+ "night-mode",
29338
+ "day-night-auto",
29339
+ "set-limits",
29340
+ "save-limits",
29341
+ "reboot",
29342
+ "osd-menu"
29343
+ ]);
29313
29344
  var PtzPresetSchema = object({
29314
29345
  id: string(),
29315
- name: string()
29346
+ name: string(),
29347
+ /**
29348
+ * The firmware function this id performs, when the provider KNOWS the id is
29349
+ * reserved. `null` = an ordinary stored position, OR a reserved id this
29350
+ * provider does not recognise -- the two are told apart by `writable`.
29351
+ */
29352
+ fn: PtzPresetFunctionSchema.nullable(),
29353
+ /**
29354
+ * Whether `savePreset` / `deletePreset` may target this id. A provider sets
29355
+ * it false only for a band it KNOWS is reserved; where the firmware is not
29356
+ * documented it stays true and a refusal comes from the camera, named.
29357
+ */
29358
+ writable: boolean()
29316
29359
  });
29360
+ /**
29361
+ * Where the head is pointing -- per axis, and `null` when the driver cannot
29362
+ * read it.
29363
+ *
29364
+ * It used to be three REQUIRED numbers, which left a provider that cannot read
29365
+ * position no way to say so. All four said `0`:
29366
+ *
29367
+ * reolink `return { pan: 0, tilt: 0, zoom: 0 }` "until a position-query
29368
+ * path lands upstream"
29369
+ * hikvision stub, "firmware-dependent and frequently absent"
29370
+ * amcrest stub, "no generic absolute-position read for this model family"
29371
+ * onvif throws
29372
+ *
29373
+ * So every consumer asking where a camera points was told "perfectly centred"
29374
+ * by four cameras that had never looked. That is D393 -- a measurement that
29375
+ * FAILED is `null`, never `0`, and the type says so all the way to the
29376
+ * decision -- the same shape as the unreadable `statfs` folded into "0 bytes of
29377
+ * headroom", which evacuated a healthy disk.
29378
+ *
29379
+ * D393 also says to check for a narrower structural TWIN of the result type.
29380
+ * There is one: `PtzStatusSchema` extends this, so the lie had already
29381
+ * propagated into `getStatus`, which is the surface `getPosition`'s own comment
29382
+ * tells callers to migrate to.
29383
+ */
29317
29384
  var PtzPositionSchema = object({
29318
- pan: number(),
29319
- tilt: number(),
29320
- zoom: number()
29385
+ pan: number().nullable(),
29386
+ tilt: number().nullable(),
29387
+ zoom: number().nullable()
29321
29388
  });
29322
29389
  var PtzMoveCommandSchema = object({
29323
29390
  pan: number().optional(),
@@ -29336,7 +29403,72 @@ var PtzOptionsSchema = object({
29336
29403
  maxPresets: number().optional(),
29337
29404
  /** Whether the camera exposes a controllable autofocus toggle
29338
29405
  * (boolean `hasX` per the getOptions availability convention). */
29339
- hasAutofocus: boolean()
29406
+ hasAutofocus: boolean(),
29407
+ /**
29408
+ * How many distinct speeds this camera's NATIVE scale offers.
29409
+ *
29410
+ * The cap's `speed` is normalized 0..1 and each provider maps it down --
29411
+ * Baichuan 1..63, Dahua 1..8, ISAPI's percentage -100..100. The normalized
29412
+ * value hides how coarse that really is: asking an amcrest for `0.37` is
29413
+ * meaningless, because it has eight steps and three of them round to the
29414
+ * same one. A loop that tunes its own gain has to know the granularity of
29415
+ * the knob it is turning.
29416
+ *
29417
+ * `null` = the driver does not know, or the scale is continuous (ONVIF takes
29418
+ * a float). Never a made-up number.
29419
+ */
29420
+ speedSteps: number().int().positive().nullable(),
29421
+ /**
29422
+ * How long ONE `move` pulse runs on this driver, ms.
29423
+ *
29424
+ * `move` is a self-terminating burst everywhere, but every provider hardcoded
29425
+ * its own duration in private -- 200 reolink, 350 amcrest, 500 hikvision,
29426
+ * 1000 onvif -- so no caller could read it. It is the DENOMINATOR of "how far
29427
+ * did the head travel per pulse": without it a measured displacement has no
29428
+ * gain to be divided into.
29429
+ *
29430
+ * `null` = the driver cannot say.
29431
+ */
29432
+ moveImpulseMs: number().int().positive().nullable()
29433
+ });
29434
+ /**
29435
+ * Which preset `goHome` goes to, and WHO decided.
29436
+ *
29437
+ * `goHome` used to be three vendor "conventions" written in three comments --
29438
+ * Reolink preset 0, Hikvision preset '1', Dahua preset 1 -- and on this fleet
29439
+ * not one of the three cameras honours its own:
29440
+ *
29441
+ * 592 Videocamera camera Daniel (reolink) preset 0 holds "stanza"
29442
+ * 1438 Videocamera dispensa (hikvision) preset 1 holds "Credenza"
29443
+ * 3836 Videocamera studio (amcrest) preset 1 holds "Preset1"
29444
+ *
29445
+ * So `goHome` meant "go wherever the operator happened to save in slot 0 or 1",
29446
+ * and two of the three swallowed the failure in a bare `catch`. For autotrack
29447
+ * this is the HOTTEST path -- it runs every time a subject is released -- so it
29448
+ * needs an answer that is true per camera and audible when it is missing.
29449
+ *
29450
+ * `source` is what makes it honest:
29451
+ * - `operator` -- picked in the UI, stored by the provider.
29452
+ * - `firmware` -- the camera itself named a preset `fn: 'home'` (Hikvision's
29453
+ * "Back to origin"), adopted as the default with nothing to configure.
29454
+ * - `native` -- the driver homes WITHOUT a preset at all. ONVIF does:
29455
+ * `goHome` is `ptzAbsoluteMove({x:0, y:0, zoom:0})`. `presetId` is null and
29456
+ * that is not a failure -- there is nothing to pick, and the UI must offer
29457
+ * no picker.
29458
+ * - `none` -- nothing is configured and the camera names nothing.
29459
+ * `goHome` REFUSES rather than moving the head somewhere arbitrary.
29460
+ *
29461
+ * `source === 'none'` is the refusal condition, NOT `presetId === null`: the
29462
+ * native case has no preset and homes perfectly well.
29463
+ */
29464
+ var PtzHomePresetSchema = object({
29465
+ presetId: string().nullable(),
29466
+ source: _enum([
29467
+ "operator",
29468
+ "firmware",
29469
+ "native",
29470
+ "none"
29471
+ ])
29340
29472
  });
29341
29473
  DeviceType.Camera, method(PtzMoveCommandSchema.extend({ deviceId: number() }), _void(), { kind: "mutation" }), method(PtzMoveCommandSchema.extend({ deviceId: number() }), _void(), { kind: "mutation" }), method(object({ deviceId: number() }), _void(), { kind: "mutation" }), method(object({ deviceId: number() }), array(PtzPresetSchema)), method(object({
29342
29474
  deviceId: number(),
@@ -29354,7 +29486,22 @@ DeviceType.Camera, method(PtzMoveCommandSchema.extend({ deviceId: number() }), _
29354
29486
  }), _void(), {
29355
29487
  kind: "mutation",
29356
29488
  auth: "admin"
29357
- }), method(object({ deviceId: number() }), PtzOptionsSchema), method(object({ deviceId: number() }), _void(), { kind: "mutation" }), method(object({ deviceId: number() }), PtzPositionSchema), method(object({
29489
+ }), method(object({ deviceId: number() }), PtzOptionsSchema), method(object({ deviceId: number() }), _void(), { kind: "mutation" }), method(object({ deviceId: number() }), PtzHomePresetSchema), method(object({
29490
+ deviceId: number(),
29491
+ presetId: string().nullable()
29492
+ }), _void(), {
29493
+ kind: "mutation",
29494
+ auth: "admin"
29495
+ }), method(object({ deviceId: number() }), _void(), {
29496
+ kind: "mutation",
29497
+ auth: "admin"
29498
+ }), method(object({ deviceId: number() }), number().int().nullable()), method(object({
29499
+ deviceId: number(),
29500
+ seconds: number().int().min(0).max(3600)
29501
+ }), _void(), {
29502
+ kind: "mutation",
29503
+ auth: "admin"
29504
+ }), method(object({ deviceId: number() }), PtzPositionSchema), method(object({
29358
29505
  deviceId: number(),
29359
29506
  enabled: boolean()
29360
29507
  }), _void(), { kind: "mutation" });
@@ -36357,6 +36504,12 @@ Object.freeze({
36357
36504
  addonId: null,
36358
36505
  access: "create"
36359
36506
  },
36507
+ "ptz.captureHomeHere": {
36508
+ capName: "ptz",
36509
+ capScope: "device",
36510
+ addonId: null,
36511
+ access: "create"
36512
+ },
36360
36513
  "ptz.continuousMove": {
36361
36514
  capName: "ptz",
36362
36515
  capScope: "device",
@@ -36369,6 +36522,18 @@ Object.freeze({
36369
36522
  addonId: null,
36370
36523
  access: "delete"
36371
36524
  },
36525
+ "ptz.getHomePreset": {
36526
+ capName: "ptz",
36527
+ capScope: "device",
36528
+ addonId: null,
36529
+ access: "view"
36530
+ },
36531
+ "ptz.getHomeReturnSeconds": {
36532
+ capName: "ptz",
36533
+ capScope: "device",
36534
+ addonId: null,
36535
+ access: "view"
36536
+ },
36372
36537
  "ptz.getOptions": {
36373
36538
  capName: "ptz",
36374
36539
  capScope: "device",
@@ -36417,6 +36582,18 @@ Object.freeze({
36417
36582
  addonId: null,
36418
36583
  access: "create"
36419
36584
  },
36585
+ "ptz.setHomePreset": {
36586
+ capName: "ptz",
36587
+ capScope: "device",
36588
+ addonId: null,
36589
+ access: "create"
36590
+ },
36591
+ "ptz.setHomeReturnSeconds": {
36592
+ capName: "ptz",
36593
+ capScope: "device",
36594
+ addonId: null,
36595
+ access: "create"
36596
+ },
36420
36597
  "ptz.stop": {
36421
36598
  capName: "ptz",
36422
36599
  capScope: "device",
@@ -39580,6 +39757,11 @@ Object.freeze({
39580
39757
  form: "single",
39581
39758
  optional: false
39582
39759
  }],
39760
+ "ptz.captureHomeHere": [{
39761
+ name: "deviceId",
39762
+ form: "single",
39763
+ optional: false
39764
+ }],
39583
39765
  "ptz.continuousMove": [{
39584
39766
  name: "deviceId",
39585
39767
  form: "single",
@@ -39590,6 +39772,16 @@ Object.freeze({
39590
39772
  form: "single",
39591
39773
  optional: false
39592
39774
  }],
39775
+ "ptz.getHomePreset": [{
39776
+ name: "deviceId",
39777
+ form: "single",
39778
+ optional: false
39779
+ }],
39780
+ "ptz.getHomeReturnSeconds": [{
39781
+ name: "deviceId",
39782
+ form: "single",
39783
+ optional: false
39784
+ }],
39593
39785
  "ptz.getOptions": [{
39594
39786
  name: "deviceId",
39595
39787
  form: "single",
@@ -39630,6 +39822,16 @@ Object.freeze({
39630
39822
  form: "single",
39631
39823
  optional: false
39632
39824
  }],
39825
+ "ptz.setHomePreset": [{
39826
+ name: "deviceId",
39827
+ form: "single",
39828
+ optional: false
39829
+ }],
39830
+ "ptz.setHomeReturnSeconds": [{
39831
+ name: "deviceId",
39832
+ form: "single",
39833
+ optional: false
39834
+ }],
39633
39835
  "ptz.stop": [{
39634
39836
  name: "deviceId",
39635
39837
  form: "single",
@@ -1,5 +1,5 @@
1
1
  import { h as e, l as t, u as n, y as r } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react__loadShare__.js-DJDHChgO.mjs";
2
- import { o as i, s as a } from "./responsive-8-xrhADg.mjs";
2
+ import { o as i, s as a } from "./responsive-C6dBVCr7.mjs";
3
3
  import { n as o, r as s, t as c } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-ds_Ehzaa.mjs";
4
4
  var l = a("chevron-down", [["path", {
5
5
  d: "m6 9 6 6 6-6",
@@ -1,2 +1,2 @@
1
- import { n as e, t } from "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-CDobikrl.mjs";
1
+ import { n as e, t } from "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-CigmnmQE.mjs";
2
2
  export { t as get, e as init };
@@ -1,6 +1,6 @@
1
1
  import { c as e, g as t, h as n, l as r, n as i, p as a, r as o, t as s, u as c, y as l } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react__loadShare__.js-DJDHChgO.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 { n as u } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-Ck5bXAEc.mjs";
3
+ import { n as u } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CKEe1Nbx.mjs";
4
4
  //#region ../../node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js
5
5
  l();
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) => {