@camstack/addon-model-studio 1.1.289 → 1.1.290

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-mlU-VSe5.mjs → MotionZonesSettings-BDXv-_SC.mjs} +2 -2
  2. package/dist/{PrivacyMaskSettings-Cx5oEsjP.mjs → PrivacyMaskSettings-BFDJJ_jI.mjs} +4 -4
  3. package/dist/{SceneMonitorEditor-GMAcbbJ0.mjs → SceneMonitorEditor-DsKs-28v.mjs} +3 -3
  4. package/dist/_stub.js +3986 -3971
  5. package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-DvHxq6CH.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-vqigWLhP.mjs} +3 -3
  6. package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-C2LtE9v7.mjs +26 -0
  7. package/dist/{hostInit-Beh8D27N.mjs → hostInit-RwS7Hfsn.mjs} +2 -2
  8. package/dist/model-studio.addon.js +202 -67
  9. package/dist/model-studio.addon.mjs +202 -67
  10. package/dist/{player-overlays-BNm3QxNX.mjs → player-overlays-CSDHuCWB.mjs} +1 -1
  11. package/dist/remoteEntry.js +1 -1
  12. package/dist/{responsive-BBGHW8J6.mjs → responsive-BOr_1QSL.mjs} +1 -1
  13. package/dist/{scene-monitor-copy-BEIH363L.mjs → scene-monitor-copy-CcAIfs8G.mjs} +1 -1
  14. package/dist/{square-DiTXshc8.mjs → square-X2giTSaZ.mjs} +1 -1
  15. package/dist/{trash-2-BVSkUDtB.mjs → trash-2-CphQimp6.mjs} +1 -1
  16. package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-ohPGd04S.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-D6XbC3Hu.mjs} +1 -1
  17. package/package.json +1 -1
  18. package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BL63cAWe.mjs +0 -26
@@ -45194,6 +45194,18 @@ Object.freeze({
45194
45194
  reason: "camera sensor mappings not loaded"
45195
45195
  });
45196
45196
  /**
45197
+ * What the vision model must answer before a package event is emitted
45198
+ * when a packages rule has "Confirm with the LLM" on.
45199
+ *
45200
+ * `package` is the verdict. `confidence` is 0..1. `reason` is the model's
45201
+ * one-line explanation, stored on the event so a drop is not silent.
45202
+ */
45203
+ var PackageLlmVerdictSchema = object({
45204
+ package: boolean(),
45205
+ confidence: number().min(0).max(1),
45206
+ reason: string().min(1)
45207
+ });
45208
+ /**
45197
45209
  * A model choice has a SCOPE, and a scope change has a workflow.
45198
45210
  *
45199
45211
  * ## The two scopes
@@ -46130,6 +46142,21 @@ var ObjectEventSchema = object({
46130
46142
  * pick-up written before D684 — UNKNOWN, never 0 and never `timestamp`.
46131
46143
  */
46132
46144
  observedAt: number().optional(),
46145
+ /**
46146
+ * The delivery was emitted without a vision-model yes (D931).
46147
+ *
46148
+ * Set only when the packages rule asked for an LLM confirm and the model
46149
+ * was unreachable, timed out, or answered something that did not parse.
46150
+ * A notification reads it so it can say "possible" instead of a definite
46151
+ * delivery. Absent on every other row, and on a confirm that said yes.
46152
+ */
46153
+ packagePossible: boolean().optional(),
46154
+ /**
46155
+ * The vision model's verdict, when a packages rule asked for one and the
46156
+ * model answered the schema (D931). A "no" never becomes a row — the
46157
+ * detector drops it and logs the reason. Present on a yes.
46158
+ */
46159
+ packageLlmVerdict: PackageLlmVerdictSchema.optional(),
46133
46160
  /** The parent track's key-event importance [0,1], propagated to every object
46134
46161
  * event of the track (so an event row can be sorted by importance without a
46135
46162
  * track join). Absent on legacy rows / before the track was scored. */
@@ -48337,11 +48364,18 @@ var KeptReasonSchema = _enum(["custom-pin"]);
48337
48364
  * Where a choice's latency came from (D791): this node's own benchmark
48338
48365
  * result, or the hardware-class table. Measured on the node beats the table.
48339
48366
  */
48340
- var LatencySourceSchema = discriminatedUnion("kind", [object({ kind: literal("table") }), object({
48341
- kind: literal("node-benchmark"),
48342
- resultId: string(),
48343
- measuredAtMs: number()
48344
- })]);
48367
+ var LatencySourceSchema = discriminatedUnion("kind", [
48368
+ object({ kind: literal("table") }),
48369
+ object({
48370
+ kind: literal("node-benchmark"),
48371
+ resultId: string(),
48372
+ measuredAtMs: number()
48373
+ }),
48374
+ object({
48375
+ kind: literal("estimated"),
48376
+ estimatedFrom: HardwareClassIdSchema
48377
+ })
48378
+ ]);
48345
48379
  var DeviceModelChoiceSchema = object({
48346
48380
  modelId: string(),
48347
48381
  p50Ms: number(),
@@ -48349,6 +48383,11 @@ var DeviceModelChoiceSchema = object({
48349
48383
  measured: boolean(),
48350
48384
  /** Absent on a plan from before D791 — read as the table. */
48351
48385
  source: LatencySourceSchema.optional(),
48386
+ /**
48387
+ * The measured class this latency was scaled from (D930). Absent when the
48388
+ * cell is the table or a node benchmark.
48389
+ */
48390
+ estimatedFrom: HardwareClassIdSchema.optional(),
48352
48391
  /** Parallel sessions at the camera rate with the headroom kept free: ⌊fps × (1 − headroom) / camera fps⌋. */
48353
48392
  capacitySessions: number(),
48354
48393
  personRecall: number()
@@ -58578,6 +58617,30 @@ includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly(
58578
58617
  kind: "mutation",
58579
58618
  auth: "admin"
58580
58619
  });
58620
+ var CORE_ULTRA_265K_IGPU_CLOCK_MHZ = 2e3;
58621
+ var positiveOrNull = number().nullable().transform((value) => value !== null && Number.isFinite(value) && value > 0 ? value : null);
58622
+ var textOrNull = string().nullable().transform((value) => value !== null && value.trim() !== "" ? value : null);
58623
+ var PrecisionGopsSchema = object({
58624
+ int8: positiveOrNull,
58625
+ fp16: positiveOrNull
58626
+ });
58627
+ /** What one accelerator device reported. Every failed query is null. */
58628
+ var AcceleratorComputeSchema = object({
58629
+ deviceKey: string(),
58630
+ fullDeviceName: textOrNull,
58631
+ executionUnits: positiveOrNull,
58632
+ clockMHz: positiveOrNull,
58633
+ gops: PrecisionGopsSchema.nullable(),
58634
+ architecture: textOrNull,
58635
+ npuName: textOrNull,
58636
+ tops: positiveOrNull,
58637
+ vendor: textOrNull,
58638
+ webgpuArchitecture: textOrNull,
58639
+ webgpuDevice: textOrNull,
58640
+ computeUnits: positiveOrNull
58641
+ });
58642
+ object({ accelerators: array(AcceleratorComputeSchema).nullable() });
58643
+ 64 * CORE_ULTRA_265K_IGPU_CLOCK_MHZ;
58581
58644
  var ModelFormatSchema = _enum(MODEL_FORMATS);
58582
58645
  var HwAccelBackendInputSchema = _enum([
58583
58646
  "videotoolbox",
@@ -58691,7 +58754,12 @@ var HardwareInfoSchema = object({
58691
58754
  availableRAM_MB: number(),
58692
58755
  gpu: GpuInfoSchema.nullable(),
58693
58756
  npu: NpuInfoSchema.nullable(),
58694
- coral: CoralInfoSchema.nullable().optional()
58757
+ coral: CoralInfoSchema.nullable().optional(),
58758
+ /**
58759
+ * Per-accelerator compute (D930). Omitted by a node that has not probed it.
58760
+ * `null` fields inside an entry are a failed query, never a zero.
58761
+ */
58762
+ accelerators: array(AcceleratorComputeSchema).readonly().optional()
58695
58763
  });
58696
58764
  var PlatformScoreSchema = object({
58697
58765
  runtime: literal("python"),
@@ -61063,7 +61131,20 @@ var ZoneRuleSchema = object({
61063
61131
  * Defaults to `true` so operators creating a rule via the UI
61064
61132
  * see it active immediately.
61065
61133
  */
61066
- enabled: boolean().default(true)
61134
+ enabled: boolean().default(true),
61135
+ /**
61136
+ * Package stage only. When true, a package candidate may open from a
61137
+ * scene difference in this rule's zone after a person leaves. The
61138
+ * package model, when it boxes something overlapping, is extra evidence
61139
+ * and is not the gate. Absent or false keeps today's model path.
61140
+ */
61141
+ detectBySceneDifference: boolean().optional(),
61142
+ /**
61143
+ * Package stage only. When true, a promoted package is shown to the
61144
+ * `llm` cap before the delivery event is emitted. Absent or false emits
61145
+ * as today. Usable with or without `detectBySceneDifference`.
61146
+ */
61147
+ confirmWithLlm: boolean().optional()
61067
61148
  });
61068
61149
  array(ZoneRuleSchema).readonly();
61069
61150
  object({
@@ -80430,6 +80511,10 @@ TimelapseRuleInputSchema.extend({
80430
80511
  updatedAt: number()
80431
80512
  });
80432
80513
  MotionOnMotionChangedDataSchema.omit({ triggeredBy: true });
80514
+ Object.freeze({
80515
+ person: .8,
80516
+ vehicle: .8
80517
+ });
80433
80518
  object({
80434
80519
  /**
80435
80520
  * Fraction of the box's own size added on EACH side before cutting.
@@ -81577,6 +81662,91 @@ async function moveInto(source, target) {
81577
81662
  }
81578
81663
  }
81579
81664
  //#endregion
81665
+ //#region src/frigate/plus-decode.ts
81666
+ var UnsupportedPlusDecodeError = class extends Error {
81667
+ type;
81668
+ format;
81669
+ detectors;
81670
+ constructor(type, format, detectors) {
81671
+ const detList = detectors.length > 0 ? detectors.join(", ") : "(none)";
81672
+ super(`Frigate+ import refused — no decoder for type "${type}", format "${format}", detectors ${detList}`);
81673
+ this.name = "UnsupportedPlusDecodeError";
81674
+ this.type = type;
81675
+ this.format = format;
81676
+ this.detectors = detectors;
81677
+ }
81678
+ };
81679
+ var YOLO_FAMILIES = new Set(["yolo-generic", "yolov9"]);
81680
+ var SSD_FAMILIES = new Set(["mobiledet", "ssd"]);
81681
+ var YOLONAS_FAMILIES = new Set(["yolonas"]);
81682
+ function familyDefaultArtifact(type) {
81683
+ if (YOLO_FAMILIES.has(type) || YOLONAS_FAMILIES.has(type)) return "onnx";
81684
+ if (SSD_FAMILIES.has(type)) return "tflite";
81685
+ return null;
81686
+ }
81687
+ function matrixDecode(type, format) {
81688
+ if (YOLO_FAMILIES.has(type)) {
81689
+ if (format === "onnx") return {
81690
+ format: "onnx",
81691
+ extension: ".onnx",
81692
+ postprocessor: "yolo"
81693
+ };
81694
+ return {
81695
+ format: "tflite",
81696
+ extension: ".tflite",
81697
+ postprocessor: "yolo-split-dfl"
81698
+ };
81699
+ }
81700
+ if (YOLONAS_FAMILIES.has(type)) {
81701
+ if (format === "onnx") return {
81702
+ format: "onnx",
81703
+ extension: ".onnx",
81704
+ postprocessor: "yolonas"
81705
+ };
81706
+ return null;
81707
+ }
81708
+ if (SSD_FAMILIES.has(type)) {
81709
+ if (format === "tflite") return {
81710
+ format: "tflite",
81711
+ extension: ".tflite",
81712
+ postprocessor: "ssd"
81713
+ };
81714
+ return null;
81715
+ }
81716
+ return null;
81717
+ }
81718
+ function assertOverrideBacked(type, formatOverride, detectors) {
81719
+ if (formatOverride === "onnx") {
81720
+ if (!detectors.includes("onnx") && !detectors.includes("openvino")) throw new UnsupportedPlusDecodeError(type, formatOverride, detectors);
81721
+ return;
81722
+ }
81723
+ if (!detectors.includes("edgetpu")) throw new UnsupportedPlusDecodeError(type, formatOverride, detectors);
81724
+ }
81725
+ function plusArtifactFormat(format) {
81726
+ if (format === "onnx" || format === "tflite") return format;
81727
+ return null;
81728
+ }
81729
+ function resolvePlusDecode(info, formatOverride) {
81730
+ const type = info.type;
81731
+ const detectors = info.supportedDetectors ?? [];
81732
+ let format;
81733
+ if (formatOverride !== void 0) {
81734
+ const artifact = plusArtifactFormat(formatOverride);
81735
+ if (artifact === null) throw new UnsupportedPlusDecodeError(type, formatOverride, detectors);
81736
+ if (detectors.length > 0) assertOverrideBacked(type, artifact, detectors);
81737
+ format = artifact;
81738
+ } else if (detectors.includes("onnx") || detectors.includes("openvino")) format = "onnx";
81739
+ else if (detectors.includes("edgetpu")) format = "tflite";
81740
+ else if (detectors.length === 0) {
81741
+ const fallback = familyDefaultArtifact(type);
81742
+ if (fallback === null) throw new UnsupportedPlusDecodeError(type, "(default)", detectors);
81743
+ format = fallback;
81744
+ } else throw new UnsupportedPlusDecodeError(type, "(detectors)", detectors);
81745
+ const decode = matrixDecode(type, format);
81746
+ if (decode === null) throw new UnsupportedPlusDecodeError(type, format, detectors);
81747
+ return decode;
81748
+ }
81749
+ //#endregion
81580
81750
  //#region src/frigate/frigate-plus.ts
81581
81751
  /**
81582
81752
  * Frigate+ API client — the REAL api.frigate.video contract, verified against
@@ -81671,12 +81841,17 @@ function toModelInfo(raw, modelId) {
81671
81841
  if (isRecord(raw.labelMap)) {
81672
81842
  for (const [k, v] of Object.entries(raw.labelMap)) if (typeof v === "string") labelMap[k] = v;
81673
81843
  }
81844
+ const supportedDetectors = [];
81845
+ if (Array.isArray(raw.supportedDetectors)) {
81846
+ for (const d of raw.supportedDetectors) if (typeof d === "string") supportedDetectors.push(d);
81847
+ }
81674
81848
  return {
81675
81849
  id: typeof raw.id === "string" ? raw.id : modelId,
81676
81850
  type: typeof raw.type === "string" ? raw.type : "unknown",
81677
81851
  width: typeof raw.width === "number" ? raw.width : 320,
81678
81852
  height: typeof raw.height === "number" ? raw.height : 320,
81679
- labelMap
81853
+ labelMap,
81854
+ supportedDetectors
81680
81855
  };
81681
81856
  }
81682
81857
  /** Resolve one model's metadata + presigned artifact URL. */
@@ -81691,39 +81866,6 @@ async function requestPlusModelDownload(fetchFn, apiKey, plusModelId) {
81691
81866
  downloadUrl: url
81692
81867
  };
81693
81868
  }
81694
- /** Frigate+ model type → our format + decode. Mirrors the Frigate presets. */
81695
- var PLUS_TYPE_MAP = {
81696
- mobiledet: {
81697
- format: "tflite",
81698
- postprocessor: "ssd",
81699
- extension: ".tflite"
81700
- },
81701
- /** List API uses `ssd` for MobileDet rows. */
81702
- ssd: {
81703
- format: "tflite",
81704
- postprocessor: "ssd",
81705
- extension: ".tflite"
81706
- },
81707
- yolonas: {
81708
- format: "onnx",
81709
- postprocessor: "yolonas",
81710
- extension: ".onnx"
81711
- },
81712
- yolov9: {
81713
- format: "onnx",
81714
- extension: ".onnx"
81715
- },
81716
- "yolo-generic": {
81717
- format: "onnx",
81718
- extension: ".onnx"
81719
- }
81720
- };
81721
- function plusTypeTraits(type) {
81722
- return PLUS_TYPE_MAP[type] ?? {
81723
- format: "onnx",
81724
- extension: ".onnx"
81725
- };
81726
- }
81727
81869
  /** Ordered labels from the API's `index → label` map; holes keep alignment. */
81728
81870
  function orderedLabels(labelMap) {
81729
81871
  const indices = Object.keys(labelMap).map((k) => Number.parseInt(k, 10)).filter((n) => Number.isInteger(n) && n >= 0);
@@ -81740,16 +81882,7 @@ function orderedLabels(labelMap) {
81740
81882
  * Distribute.
81741
81883
  */
81742
81884
  function plusInfoToDescriptor(info, opts) {
81743
- const base = plusTypeTraits(info.type);
81744
- const traits = opts.format === "tflite" ? {
81745
- format: "tflite",
81746
- extension: ".tflite",
81747
- ...info.type === "ssd" || info.type === "mobiledet" ? { postprocessor: "ssd" } : {}
81748
- } : opts.format === "onnx" ? {
81749
- format: "onnx",
81750
- extension: ".onnx",
81751
- ...base.postprocessor !== void 0 ? { postprocessor: base.postprocessor } : {}
81752
- } : base;
81885
+ const decode = resolvePlusDecode(info, opts.format);
81753
81886
  const labels = orderedLabels(info.labelMap);
81754
81887
  return {
81755
81888
  stepId: "object-detection",
@@ -81757,7 +81890,7 @@ function plusInfoToDescriptor(info, opts) {
81757
81890
  id: opts.modelId,
81758
81891
  name: opts.name,
81759
81892
  description: `Frigate+ personal model (${info.type}) — imported via Model Studio`,
81760
- formats: { [traits.format]: {
81893
+ formats: { [decode.format]: {
81761
81894
  url: `camstack-local://${opts.modelId}/${opts.filename}`,
81762
81895
  sizeMB: opts.sizeMB,
81763
81896
  runtimes: ["python"]
@@ -81775,7 +81908,7 @@ function plusInfoToDescriptor(info, opts) {
81775
81908
  preprocessMode: "letterbox",
81776
81909
  provider: "frigate",
81777
81910
  group: frigateVariantGroup(info.type, info.width),
81778
- ...traits.postprocessor !== void 0 ? { postprocessor: traits.postprocessor } : {}
81911
+ postprocessor: decode.postprocessor
81779
81912
  }
81780
81913
  };
81781
81914
  }
@@ -82790,17 +82923,19 @@ var ModelStudioAddon = class ModelStudioAddon extends BaseAddon {
82790
82923
  const operatorName = optionalImportName(input.name);
82791
82924
  const key = this.config.frigatePlusApiKey ?? "";
82792
82925
  const { info, downloadUrl } = await requestPlusModelDownload(plusFetch, key, input.plusModelId);
82793
- const typeTraits = plusTypeTraits(info.type);
82794
- const traits = input.format === "tflite" ? {
82795
- format: "tflite",
82796
- extension: ".tflite",
82797
- ...info.type === "ssd" || info.type === "mobiledet" ? { postprocessor: "ssd" } : {}
82798
- } : input.format === "onnx" ? {
82799
- format: "onnx",
82800
- extension: ".onnx",
82801
- ...typeTraits.postprocessor !== void 0 ? { postprocessor: typeTraits.postprocessor } : {}
82802
- } : typeTraits;
82803
- const filename = `${modelId}${traits.extension}`;
82926
+ let decode;
82927
+ try {
82928
+ decode = resolvePlusDecode(info, input.format);
82929
+ } catch (err) {
82930
+ if (err instanceof UnsupportedPlusDecodeError) this.ctx.logger.warn("Frigate+ model import refused — no decoder", { meta: {
82931
+ plusModelId: input.plusModelId,
82932
+ type: err.type,
82933
+ format: err.format,
82934
+ detectors: [...err.detectors]
82935
+ } });
82936
+ throw err;
82937
+ }
82938
+ const filename = `${modelId}${decode.extension}`;
82804
82939
  const modelsDir = await this.resolveModelsDir();
82805
82940
  const destPath = path.join(modelsDir, filename);
82806
82941
  await downloadFile(downloadUrl, destPath);
@@ -82822,7 +82957,7 @@ var ModelStudioAddon = class ModelStudioAddon extends BaseAddon {
82822
82957
  ...nameOriginOf(operatorName)
82823
82958
  });
82824
82959
  await this.availability_.update((prev) => upsertAvailability(prev, modelId, "hub", {
82825
- format: traits.format,
82960
+ format: decode.format,
82826
82961
  sha256,
82827
82962
  bytes,
82828
82963
  at: Date.now()
@@ -82832,11 +82967,11 @@ var ModelStudioAddon = class ModelStudioAddon extends BaseAddon {
82832
82967
  modelId,
82833
82968
  type: info.type,
82834
82969
  bytes,
82835
- format: traits.format
82970
+ format: decode.format
82836
82971
  } });
82837
82972
  const wanted = input.ensureFormats ?? [];
82838
82973
  let conversions = [];
82839
- if (traits.format === "onnx" && wanted.length > 0) {
82974
+ if (decode.format === "onnx" && wanted.length > 0) {
82840
82975
  conversions = (await ensureEngineFormats(descriptor.entry, this.plusConversionDeps(async () => (await requestPlusModelDownload(plusFetch, key, input.plusModelId)).downloadUrl, descriptor.stepId), { targetFormats: wanted })).conversions;
82841
82976
  this.ctx.logger.info("Frigate+ import — engine conversions", { meta: {
82842
82977
  modelId,
@@ -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 { g as s, h as c } from "./responsive-BBGHW8J6.mjs";
3
+ import { g as s, h as c } from "./responsive-BOr_1QSL.mjs";
4
4
  var l = s("chevron-down", [["path", {
5
5
  d: "m6 9 6 6 6-6",
6
6
  key: "qrunsl"
@@ -1,2 +1,2 @@
1
- import { n as e, t } from "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-ohPGd04S.mjs";
1
+ import { n as e, t } from "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-D6XbC3Hu.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 { g as u } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BL63cAWe.mjs";
3
+ import { g as u } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-C2LtE9v7.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,6 +1,6 @@
1
1
  import { S as e, g as t, l 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 } from "./ui-text-BqZa5BNK.mjs";
3
- import { g as a } from "./responsive-BBGHW8J6.mjs";
3
+ import { g as a } from "./responsive-BOr_1QSL.mjs";
4
4
  var o = a("camera", [["path", {
5
5
  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",
6
6
  key: "18u6gg"
@@ -1,4 +1,4 @@
1
- import { g as e } from "./responsive-BBGHW8J6.mjs";
1
+ import { g as e } from "./responsive-BOr_1QSL.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 { g as e } from "./responsive-BBGHW8J6.mjs";
1
+ import { g as e } from "./responsive-BOr_1QSL.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-DvHxq6CH.mjs")).catch((e) => {
2756
+ return tr ||= rr(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-vqigWLhP.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.289",
3
+ "version": "1.1.290",
4
4
  "description": "Custom detection model registry, conversion & distribution for CamStack",
5
5
  "keywords": [
6
6
  "camstack",