@camstack/addon-model-studio 1.1.157 → 1.1.159

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 (20) hide show
  1. package/dist/MotionZonesSettings-B9Zjys3U.mjs +310 -0
  2. package/dist/{PrivacyMaskSettings-_L0_gbnd.mjs → PrivacyMaskSettings-B3Vsieem.mjs} +26 -26
  3. package/dist/{SceneMonitorEditor-Bjy20GEe.mjs → SceneMonitorEditor-CRZWTPz1.mjs} +295 -295
  4. package/dist/_stub.js +213 -213
  5. package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-C2DPZC4T.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-JG0cnfpo.mjs} +3 -3
  6. package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-cAfFVRZp.mjs +26 -0
  7. package/dist/addon-model-studio.css +1 -1
  8. package/dist/{responsive-CUUZlkGG.mjs → cap-error-DVLb2gz5.mjs} +8 -8
  9. package/dist/{hostInit-C4sQnoPJ.mjs → hostInit-CUgIY8_E.mjs} +2 -2
  10. package/dist/model-studio.addon.js +339 -14
  11. package/dist/model-studio.addon.mjs +339 -14
  12. package/dist/{player-overlays-D-ofIMHF.mjs → player-overlays-DkECelrR.mjs} +1 -1
  13. package/dist/remoteEntry.js +1 -1
  14. package/dist/{scene-monitor-copy-BfygBFBK.mjs → scene-monitor-copy-DHChGsSk.mjs} +1 -1
  15. package/dist/{square-aQfMfsN9.mjs → square-DPy2M0xs.mjs} +1 -1
  16. package/dist/{trash-2-BlOtOXBm.mjs → trash-2-G09-iWOp.mjs} +1 -1
  17. package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-gMWb9LVs.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-DNIKrWko.mjs} +1 -1
  18. package/package.json +1 -1
  19. package/dist/MotionZonesSettings-Cz150rLo.mjs +0 -310
  20. package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-DgRfZh1N.mjs +0 -26
@@ -5863,7 +5863,7 @@ var ZodIssueCode = {
5863
5863
  var ZodFirstPartyTypeKind;
5864
5864
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5865
5865
  //#endregion
5866
- //#region ../types/dist/sleep-CiR4z7r9.mjs
5866
+ //#region ../types/dist/sleep-7AN_Txmu.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).
@@ -14657,6 +14657,8 @@ method(object({
14657
14657
  deviceId: number(),
14658
14658
  capName: string(),
14659
14659
  wrapperAddonId: string(),
14660
+ /** The `ClipSource.source` id to toggle. Absent = all of the addon's. */
14661
+ sourceId: string().optional(),
14660
14662
  active: boolean()
14661
14663
  }), _void(), {
14662
14664
  kind: "mutation",
@@ -23240,10 +23242,9 @@ var ServerBootModeSchema = _enum([
23240
23242
  * - `idle` / `checking` / `staging` — steady / in-flight registry work.
23241
23243
  * - `pending-restart` — a version is staged and the node has NOT yet
23242
23244
  * restarted onto it (still running the OLD version).
23243
- * - `awaiting-confirmation` — the node HAS restarted onto the staged version
23244
- * (it is the active probation boot) and is waiting to confirm boot-health.
23245
- * Apply/rollback are refused in this state and the node must NOT be
23246
- * manually restarted, or the probation boot auto-rolls-back.
23245
+ * - `awaiting-confirmation` — RETIRED with the probation boot (single-copy
23246
+ * collapse, 2026-07-18). Kept in the enum so an older client still parses;
23247
+ * no provider emits it.
23247
23248
  */
23248
23249
  var ServerUpdateStateSchema = _enum([
23249
23250
  "idle",
@@ -23332,12 +23333,35 @@ var ServerRollbackInfoSchema = object({
23332
23333
  var ServerPackageStatusSchema = object({
23333
23334
  /** Root package name (`@camstack/server` on the hub). */
23334
23335
  packageName: string(),
23335
- /** Version of the code the running process ACTUALLY loaded. */
23336
+ /**
23337
+ * Version of the code THIS PROCESS loaded — captured once, at boot, from the
23338
+ * package.json of the copy the code was loaded from, and never re-read. A
23339
+ * copy replaced on disk under a live process must not move this number;
23340
+ * that divergence is what `installedVersion` is for. Before 2026-09-20 this
23341
+ * was a lazy disk read that would have followed such a swap silently.
23342
+ */
23336
23343
  runningVersion: string().nullable(),
23337
23344
  /** Node.js runtime version the node's process runs on (`process.versions.node`). */
23338
23345
  nodeRuntimeVersion: string().nullable(),
23339
23346
  /** Active data-dir root version; null when booted from seed/workspace. */
23340
23347
  activeVersion: string().nullable(),
23348
+ /**
23349
+ * Version of the root package in the data-root `current/` copy RIGHT NOW —
23350
+ * what the next boot would load if nothing is staged. Normally equal to
23351
+ * `runningVersion`; differs only when the copy on disk changed under the
23352
+ * live process. `null` when there is no data-root copy (baked seed or
23353
+ * workspace boot). Optional for version skew: an older provider omits it.
23354
+ */
23355
+ installedVersion: string().nullable().optional(),
23356
+ /**
23357
+ * True when the code that would run after a restart is NOT the code running
23358
+ * now: a version is staged (`pendingVersion`), or `installedVersion` differs
23359
+ * from `runningVersion`. Derived on every read, never stored. This is the
23360
+ * one field that lets an operator or a script say "1.2.353 is installed and
23361
+ * will run after a restart" instead of reading it off a number that means
23362
+ * "installed". Optional for version skew.
23363
+ */
23364
+ restartRequired: boolean().optional(),
23341
23365
  /** N-1 version kept for rollback; null when no previous version exists. */
23342
23366
  previousVersion: string().nullable(),
23343
23367
  /** Version of the immutable baked seed closure (image fallback). */
@@ -23372,19 +23396,71 @@ var ServerPackageStatusSchema = object({
23372
23396
  });
23373
23397
  var ServerUpdateCheckResultSchema = object({
23374
23398
  packageName: string(),
23399
+ /** Same meaning as on the status payload: what THIS process loaded. */
23375
23400
  runningVersion: string().nullable(),
23376
23401
  latestVersion: string().nullable(),
23402
+ /**
23403
+ * `latestVersion` is newer than `runningVersion` AND is not the version
23404
+ * already staged on this node. A staged-and-waiting version is not "an
23405
+ * update available" — applying it again is refused (`already-staged`), and
23406
+ * a button that announced "updating…" on this boolean then got refused
23407
+ * would be lying. It is reported through `pendingVersion` instead.
23408
+ */
23377
23409
  updateAvailable: boolean(),
23378
23410
  checkedAtMs: number(),
23379
23411
  /** Non-null when the registry lookup failed (offline, bad registry, …). */
23380
- error: string().nullable()
23412
+ error: string().nullable(),
23413
+ /**
23414
+ * Version staged on this node and awaiting its restart, when one is. Before
23415
+ * 2026-09-20 a check answered `{runningVersion, updateAvailable:false}` for a
23416
+ * node whose staged closure had never booted, and the caller had no way to
23417
+ * see the difference. Optional for version skew.
23418
+ */
23419
+ pendingVersion: string().nullable().optional(),
23420
+ /** See the status payload: staged, or installed-on-disk ≠ running. Optional for skew. */
23421
+ restartRequired: boolean().optional()
23381
23422
  });
23423
+ /**
23424
+ * What an action DID — the discriminant `accepted` cannot carry. Before
23425
+ * 2026-09-20 `applyServerUpdate` answered `accepted:false` both for a refusal
23426
+ * where nothing was wrong (already current, already staged) and for a staging
23427
+ * install that died on `npm error code ECONNRESET`; the only difference was
23428
+ * prose in `message`, and an operator restarted a container on the strength of
23429
+ * it, booting the previous version.
23430
+ *
23431
+ * - `staged` — the closure is installed and validated; the node
23432
+ * restarts to apply it (`restarting:true`). NOTHING
23433
+ * runs the new code until that restart completes.
23434
+ * - `restart-scheduled` — a plain, version-preserving restart was accepted.
23435
+ * - `already-current` — the target IS the running version; nothing done.
23436
+ * - `refused` — dropped by a gate; `reason` names which.
23437
+ * - `failed` — attempted and did not land; `error` says why.
23438
+ */
23439
+ var ServerUpdateOutcomeSchema = _enum([
23440
+ "staged",
23441
+ "restart-scheduled",
23442
+ "already-current",
23443
+ "refused",
23444
+ "failed"
23445
+ ]);
23382
23446
  var ServerUpdateActionResultSchema = object({
23383
23447
  accepted: boolean(),
23384
23448
  targetVersion: string().nullable(),
23385
23449
  /** True when a graceful restart was scheduled to apply the change. */
23386
23450
  restarting: boolean(),
23387
- message: string()
23451
+ message: string(),
23452
+ /** See {@link ServerUpdateOutcomeSchema}. Optional for version skew. */
23453
+ outcome: ServerUpdateOutcomeSchema.optional(),
23454
+ /**
23455
+ * Stable, greppable cause for `refused` / `failed` (the engine's
23456
+ * `UpdateRefusalReason`, `staging-failed`, …). `null` on success.
23457
+ */
23458
+ reason: string().nullable().optional(),
23459
+ /**
23460
+ * The failure itself, verbatim enough to act on (the npm output for a
23461
+ * staging install). Non-null only for `failed`.
23462
+ */
23463
+ error: string().nullable().optional()
23388
23464
  });
23389
23465
  method(_void(), ServerPackageStatusSchema, { auth: "admin" }), method(_void(), ServerUpdateCheckResultSchema, {
23390
23466
  kind: "mutation",
@@ -24567,29 +24643,267 @@ var ClipSchema = object({
24567
24643
  holes: array(object({
24568
24644
  startMs: number(),
24569
24645
  endMs: number()
24570
- })).optional()
24646
+ })).optional(),
24647
+ /**
24648
+ * A URL that MAY produce this clip's still, asked only for rows actually on
24649
+ * screen. The opposite of {@link ClipSchema.thumbnail}: that one is VOUCHED
24650
+ * (a JPEG is already on disk), this one is an offer. The route answers 200
24651
+ * with the image, or 204 with `x-camstack-reason` when it could not mint one
24652
+ * — a surface latches that refusal to the instant rather than retrying.
24653
+ *
24654
+ * Never both: a clip with a vouched `thumbnail` needs no mint.
24655
+ */
24656
+ thumbnailMint: string().optional(),
24657
+ /**
24658
+ * Why no still will be produced for this clip RIGHT NOW — set when the
24659
+ * provider already knows, so the surface draws the glyph and the reason
24660
+ * instead of firing a mint that cannot succeed.
24661
+ *
24662
+ * `sleeping` — a standalone battery camera; a read would be a wake (D549 4).
24663
+ * `camera-refused` — the camera answered the CoverPreview with a refusal.
24664
+ * `no-keyframe` — the window holds no decodable I-frame (an event that sits
24665
+ * inside no file is the measured case).
24666
+ * `unsupported` — this source cannot mint stills at all.
24667
+ */
24668
+ thumbnailUnavailable: object({ reason: _enum([
24669
+ "sleeping",
24670
+ "camera-refused",
24671
+ "no-keyframe",
24672
+ "unsupported"
24673
+ ]) }).optional(),
24674
+ /**
24675
+ * When the catalog this row came from was last CONFIRMED against the device.
24676
+ * Absent means "this row was read live". A persisted catalog served while a
24677
+ * camera sleeps carries the age it really has — a cached list is never drawn
24678
+ * as current (D549 13).
24679
+ */
24680
+ catalogAsOf: number().optional(),
24681
+ /**
24682
+ * The camera's OWN type strings for this clip, all of them, unmapped
24683
+ * (`md`, `people`, `dog_cat`, `sched`, …). Kept beside {@link labels}
24684
+ * because a firmware inventing a type must not vanish: the mapping into our
24685
+ * filter vocabulary is lossy on purpose and this is the lossless copy
24686
+ * (D549 20).
24687
+ */
24688
+ nativeTypes: array(string()).optional(),
24689
+ /**
24690
+ * What the subject DID — `crossline`, `intrude`, `loitering`. A behaviour
24691
+ * travels BESIDE a class, never instead of one, and the class filter ignores
24692
+ * it: "a person crossed a line" is still a person (D549 20).
24693
+ */
24694
+ behaviours: array(string()).optional(),
24695
+ /**
24696
+ * The same recording as two files — the sub twin (what the row and its
24697
+ * thumbnail are) and its main twin, matched at listing time so a quality
24698
+ * change never re-searches the camera (D549 15). `getClipPlayback`'s
24699
+ * `profile` picks between them: `low | mid` → sub, `high` → main.
24700
+ */
24701
+ streams: object({
24702
+ sub: object({
24703
+ id: string(),
24704
+ bytes: number().optional()
24705
+ }).optional(),
24706
+ main: object({
24707
+ id: string(),
24708
+ bytes: number().optional()
24709
+ }).optional()
24710
+ }).optional(),
24711
+ /** The camera says it holds a sub-stream copy of this recording. */
24712
+ supportSub: boolean().optional(),
24713
+ /**
24714
+ * Whether this row has bytes behind it. ABSENT means yes — every clip that
24715
+ * IS a file is playable, and only a source that lists EVENTS can produce a
24716
+ * row with nothing to play (the measured case: 1 of 29 hub events on 3628
24717
+ * fell inside no file). Such a row is shown, never dropped and never offered
24718
+ * as playable-then-failing (D549 19).
24719
+ */
24720
+ playable: boolean().optional(),
24721
+ /** Why {@link playable} is false, verbatim (`no-file-for-window`). */
24722
+ unplayableReason: string().optional()
24571
24723
  });
24572
24724
  var ClipPlaybackSchema = object({
24573
- /** HLS master URL through the hub data-plane (Range + token in path). */
24725
+ /**
24726
+ * A media URL through the hub data-plane. {@link ClipPlaybackSchema.format}
24727
+ * says what kind — an HLS master playlist for a recording-derived clip, a
24728
+ * progressive MP4 for a native file the vendor addon muxed and serves with
24729
+ * `Range`. The URL is NOT a credential: both planes are registered
24730
+ * `access: 'authenticated'` and the hub's `/addon/<id>/<prefix>` proxy takes
24731
+ * the session cookie, so nothing is appended to it (D549 22).
24732
+ */
24574
24733
  playbackUrl: string(),
24734
+ /**
24735
+ * How to play {@link playbackUrl}. Absent means `hls` — the shape every
24736
+ * existing consumer already assumes. A player that branches on this is the
24737
+ * one change a native clip needs; a player that ignores it will hand an MP4
24738
+ * to hls.js and fail parsing it as a manifest.
24739
+ */
24740
+ format: _enum(["hls", "mp4"]).optional(),
24741
+ /**
24742
+ * Which twin was actually served. A clip that holds only one stream answers
24743
+ * with the one it has, and the surface SAYS so — a missing main twin is
24744
+ * never served silently as if it were the asked-for quality (D549 15).
24745
+ */
24746
+ served: CamProfileSchema.optional(),
24575
24747
  /** Optional LAN/remote alternates for the same clip. */
24576
24748
  playbackEndpoints: array(string()).optional(),
24577
24749
  token: string().optional()
24578
24750
  });
24751
+ /**
24752
+ * Why a source cannot answer right now — per SOURCE, never fleet-wide.
24753
+ *
24754
+ * `ok` is the only state whose clip list may be read as complete. The other
24755
+ * three exist because an empty list from a sleeping camera reads as "this
24756
+ * camera has no recordings", which is the defect this whole line of work is
24757
+ * about: a battery camera nobody woke (`sleeping`), a camera that could not be
24758
+ * reached at all (`unreachable`, also what a provider that THREW reports), a
24759
+ * camera whose SD card is not mounted (`no-storage`, measured on 640 —
24760
+ * `HddInfo mount 0`, honestly nothing to list rather than "no clips"), and a
24761
+ * camera whose OWN index disagrees with its OWN calendar (`index-empty`,
24762
+ * measured on 618: the calendar marks 3–20 September, days 6–20 list zero
24763
+ * files on both streams and both filters, with 177 GB free). That last one is
24764
+ * a defect ON THE CAMERA, and the only honest thing a provider can do is say
24765
+ * which days it asked for and got nothing — "no clips" would be a lie about a
24766
+ * card that is full of them.
24767
+ */
24768
+ var ClipSourceAvailabilitySchema = object({
24769
+ state: _enum([
24770
+ "ok",
24771
+ "sleeping",
24772
+ "unreachable",
24773
+ "no-storage",
24774
+ "index-empty"
24775
+ ]),
24776
+ /** Free text, shown verbatim. Names the camera's own refusal when there is one. */
24777
+ reason: string().optional(),
24778
+ /** When this source's catalog was last CONFIRMED. A cached list is never
24779
+ * drawn as current: the surface shows the age whenever it is older than the
24780
+ * refresh interval. */
24781
+ catalogAsOf: number().optional()
24782
+ });
24783
+ /**
24784
+ * One SOURCE of clips for a camera — a row of the picker, and the namespace
24785
+ * every clip id from it is prefixed with (`analytics`,
24786
+ * `native:reolink:onboard`, `hksv`, …).
24787
+ *
24788
+ * A provider lists the sources IT serves for that device, and answers for each
24789
+ * of them whether it can answer at all. A provider with nothing to offer on a
24790
+ * camera returns `[]` — it is not that camera's business.
24791
+ */
24792
+ var ClipSourceSchema = object({
24793
+ /** The value this source stamps on {@link ClipSchema.source}, and the prefix
24794
+ * of every clip id it mints. `getClipPlayback` routes on it. */
24795
+ source: string(),
24796
+ /** Operator-facing name of the source ("CamStack recordings", "SD card"). */
24797
+ label: string(),
24798
+ /**
24799
+ * The addon that SERVES this row.
24800
+ *
24801
+ * A surface cannot otherwise resolve a source to who answers it, and the
24802
+ * alternative — a `native:reolink:* → provider-reolink` table inside the
24803
+ * widget — is a second authority on provider identity living in the one
24804
+ * package with no business knowing it, wrong the day a third source appears
24805
+ * (D557). One addon may serve SEVERAL sources: `addon-provider-reolink`
24806
+ * answers a hub child with both `native:reolink:onboard` and
24807
+ * `native:reolink:hub`, which is why the per-device switch is keyed by
24808
+ * SOURCE and not by this (D555).
24809
+ *
24810
+ * Optional for version skew only. The collection dispatcher stamps it from
24811
+ * the registry, so a row that travelled through the fan-out carries the
24812
+ * authoritative id whatever the provider filled in.
24813
+ */
24814
+ addonId: string().optional(),
24815
+ /**
24816
+ * Which API this source resolved to FOR THIS CAMERA, when it has a choice.
24817
+ *
24818
+ * A source may cover one store through more than one surface — the Reolink
24819
+ * provider reads a hub child through the parent's event log and a standalone
24820
+ * through its own file list, because that is what each camera answers. The
24821
+ * CHOICE is the provider's, made from what the camera is, and is never a row
24822
+ * the operator has to understand; but it is REPORTED, because a source that
24823
+ * silently reads a different API on two cameras and then behaves differently
24824
+ * is the thing nobody can debug later. Absent when the source has only one
24825
+ * way to read its store.
24826
+ */
24827
+ via: string().optional(),
24828
+ availability: ClipSourceAvailabilitySchema,
24829
+ /**
24830
+ * The operator switched this source OFF for this camera.
24831
+ *
24832
+ * Deliberately NOT a member of {@link ClipSourceAvailabilitySchema}'s
24833
+ * vocabulary. That enum models what the source CAN do — a sleeping camera, an
24834
+ * unmounted card, an index that disagrees with its own calendar — and a
24835
+ * switched-off source could answer perfectly well; the operator decided it
24836
+ * should not. Folding the choice in is how `disabled` and `broken` stop being
24837
+ * distinguishable, which is the D62 rule this repo has already paid for twice:
24838
+ * an off switch is REPORTED off (`CameraStatus.switchedOff`, the same word),
24839
+ * and disabled must never look like broken. It is also what lets every
24840
+ * exhaustive consumer of the availability enum keep compiling.
24841
+ *
24842
+ * A switched-off source contributes NO clips (`listClips` never calls it) and
24843
+ * its row carries no `catalogAsOf`: nothing confirms a catalog it is not
24844
+ * allowed to serve, and a frozen age that can only grow draws a stalling
24845
+ * source rather than an off switch.
24846
+ *
24847
+ * The row survives BECAUSE it is the control the operator switches the source
24848
+ * back on from — D554 decision 4's rule ("a source that cannot answer
24849
+ * produces a ROW, not an absence") applied to the one case D556 carved out of
24850
+ * it, and D557's own kept property ("a source is never hidden, only its
24851
+ * rows"). Absent means on.
24852
+ *
24853
+ * A provider never sets this — like {@link ClipSourceSchema.addonId} it is
24854
+ * stamped by the collection dispatcher, which holds the registry's projection
24855
+ * of the persisted authority (D556) and is the only place that knows it.
24856
+ */
24857
+ switchedOff: boolean().optional()
24858
+ });
24579
24859
  DeviceType.Camera, method(object({
24580
24860
  deviceId: number(),
24581
24861
  since: number(),
24582
24862
  until: number(),
24583
- limit: number().int().positive().optional()
24863
+ limit: number().int().positive().optional(),
24864
+ /**
24865
+ * WHICH provider to ask — the `addonId` a {@link ClipSourceSchema} row
24866
+ * carries, never a source id and never a list.
24867
+ *
24868
+ * Absent means the device's BOUND provider, which is CamStack on every
24869
+ * camera today because that is what `deviceManager.getBindings`
24870
+ * answers with. A provider the device is not bound to is refused by
24871
+ * name rather than answered by another one (D552's
24872
+ * `rejectUnresolvedAddonPin` rule).
24873
+ *
24874
+ * It replaced `sources?: string[]`, a VIEW filter over source ids that
24875
+ * assumed the answer was a fan-out over everything a camera has. The
24876
+ * operator settled otherwise on 2026-09-20 — *"il get videoclips
24877
+ * prendere un provider opzionale, di default va su camstack"*,
24878
+ * *"l'utilizzatore è uno solo"* — so the list is asked of one provider
24879
+ * at a time and there is nothing to filter out of it.
24880
+ */
24881
+ provider: string().optional()
24584
24882
  }), array(ClipSchema).readonly(), {
24585
24883
  kind: "query",
24586
- auth: "admin"
24884
+ auth: "protected"
24885
+ }), method(object({ deviceId: number() }), array(ClipSourceSchema).readonly(), {
24886
+ kind: "query",
24887
+ auth: "protected"
24587
24888
  }), method(object({
24588
24889
  deviceId: number(),
24589
- clipId: string()
24890
+ clipId: string(),
24891
+ /**
24892
+ * Which twin to serve, on the ONE quality scale the system already has
24893
+ * (`CamProfileSchema`). `low | mid` → the sub file, `high` → the main
24894
+ * twin; both ids are already on the row so this never re-searches the
24895
+ * camera. Absent means the provider's own default (the sub file, which
24896
+ * every source is measured to hold).
24897
+ *
24898
+ * `auto` is deliberately NOT accepted here: a stored file has no
24899
+ * broker session, so the adaptive tier cannot be resolved for it. The
24900
+ * viewer resolves `auto` to a profile the same way live does, before
24901
+ * it calls (D549 15).
24902
+ */
24903
+ profile: CamProfileSchema.optional()
24590
24904
  }), ClipPlaybackSchema, {
24591
24905
  kind: "query",
24592
- auth: "admin"
24906
+ auth: "protected"
24593
24907
  });
24594
24908
  /**
24595
24909
  * Optional client-side hints sent at session creation to help the provider
@@ -38560,6 +38874,12 @@ Object.freeze({
38560
38874
  addonId: null,
38561
38875
  access: "view"
38562
38876
  },
38877
+ "videoclips.listSources": {
38878
+ capName: "videoclips",
38879
+ capScope: "device",
38880
+ addonId: null,
38881
+ access: "view"
38882
+ },
38563
38883
  "viewerUi.getStaticDir": {
38564
38884
  capName: "viewer-ui",
38565
38885
  capScope: "system",
@@ -40568,6 +40888,11 @@ Object.freeze({
40568
40888
  form: "single",
40569
40889
  optional: false
40570
40890
  }],
40891
+ "videoclips.listSources": [{
40892
+ name: "deviceId",
40893
+ form: "single",
40894
+ optional: false
40895
+ }],
40571
40896
  "waterHeater.setAway": [{
40572
40897
  name: "deviceId",
40573
40898
  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-CUUZlkGG.mjs";
2
+ import { o as i, s as a } from "./cap-error-DVLb2gz5.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-gMWb9LVs.mjs";
1
+ import { n as e, t } from "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-DNIKrWko.mjs";
2
2
  export { t as get, e as init };
@@ -1,5 +1,5 @@
1
1
  import { c as e, h as t, p as n, y as r } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react__loadShare__.js-DJDHChgO.mjs";
2
- import { s as i } from "./responsive-CUUZlkGG.mjs";
2
+ import { s as i } from "./cap-error-DVLb2gz5.mjs";
3
3
  var a = i("camera", [["path", {
4
4
  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",
5
5
  key: "18u6gg"
@@ -1,4 +1,4 @@
1
- import { s as e } from "./responsive-CUUZlkGG.mjs";
1
+ import { s as e } from "./cap-error-DVLb2gz5.mjs";
2
2
  var t = e("eye-off", [
3
3
  ["path", {
4
4
  d: "M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",
@@ -1,4 +1,4 @@
1
- import { s as e } from "./responsive-CUUZlkGG.mjs";
1
+ import { s as e } from "./cap-error-DVLb2gz5.mjs";
2
2
  var t = e("trash-2", [
3
3
  ["path", {
4
4
  d: "M10 11v6",
@@ -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-C2DPZC4T.mjs")).catch((e) => {
2756
+ return tr ||= rr(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-JG0cnfpo.mjs")).catch((e) => {
2757
2757
  throw tr = void 0, e;
2758
2758
  }), tr;
2759
2759
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-model-studio",
3
- "version": "1.1.157",
3
+ "version": "1.1.159",
4
4
  "description": "Custom detection model registry, conversion & distribution for CamStack",
5
5
  "keywords": [
6
6
  "camstack",