@camstack/addon-post-analysis 1.2.618 → 1.2.620

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 (14) hide show
  1. package/dist/{clip-model-registry-D6yfX_Xq.mjs → clip-model-registry-BBzoIoKO.mjs} +221 -42
  2. package/dist/{clip-model-registry-CYWuH4Rx.js → clip-model-registry-CcgzpELQ.js} +250 -59
  3. package/dist/embedding-encoder/index.js +1 -1
  4. package/dist/embedding-encoder/index.mjs +1 -1
  5. package/dist/pipeline-analytics/_stub.js +2 -2
  6. package/dist/pipeline-analytics/{_virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-B0Kz5Uye.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-BWQTWUYq.mjs} +3 -3
  7. package/dist/pipeline-analytics/{_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CSQBGkvs.mjs → _virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BSMSev-b.mjs} +1 -1
  8. package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-CssYIiFD.mjs +26 -0
  9. package/dist/pipeline-analytics/{hostInit-DjzBKo20.mjs → hostInit-WiCYRDId.mjs} +3 -3
  10. package/dist/pipeline-analytics/index.js +12989 -16177
  11. package/dist/pipeline-analytics/index.mjs +12960 -16147
  12. package/dist/pipeline-analytics/remoteEntry.js +1 -1
  13. package/package.json +1 -1
  14. package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-BB2kgLY1.mjs +0 -26
@@ -5643,7 +5643,7 @@ var ZodIssueCode = {
5643
5643
  var ZodFirstPartyTypeKind;
5644
5644
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5645
5645
  //#endregion
5646
- //#region ../types/dist/sleep-CSuN0thG.mjs
5646
+ //#region ../types/dist/sleep-_sV1BE2f.mjs
5647
5647
  /**
5648
5648
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5649
5649
  * window to float samples (D455).
@@ -5760,7 +5760,7 @@ function isKeychainStoredField(field) {
5760
5760
  var SECRET_CLEAR = { $secretClear: true };
5761
5761
  /** The `'***'` token D634 redaction writes for non-admins. */
5762
5762
  var LEGACY_DEVICE_REDACTION = "***";
5763
- function isRecord$5(value) {
5763
+ function isRecord$6(value) {
5764
5764
  return typeof value === "object" && value !== null && !Array.isArray(value);
5765
5765
  }
5766
5766
  function makeSecretMarker(ref) {
@@ -5771,12 +5771,12 @@ function makeSecretMarker(ref) {
5771
5771
  }
5772
5772
  /** A stored marker: an object whose `$secret` is a non-empty string. */
5773
5773
  function isSecretMarker(value) {
5774
- if (!isRecord$5(value)) return false;
5774
+ if (!isRecord$6(value)) return false;
5775
5775
  const ref = value["$secret"];
5776
5776
  return typeof ref === "string" && ref.length > 0;
5777
5777
  }
5778
5778
  function isSecretClear(value) {
5779
- return isRecord$5(value) && value["$secretClear"] === true;
5779
+ return isRecord$6(value) && value["$secretClear"] === true;
5780
5780
  }
5781
5781
  /**
5782
5782
  * The UI view of a stored secret field value: a marker becomes "set", inline
@@ -6386,7 +6386,7 @@ var KeychainWriteRefusedError = class extends Error {
6386
6386
  }
6387
6387
  };
6388
6388
  var KEEP = { kind: "keep" };
6389
- function isRecord$4(value) {
6389
+ function isRecord$5(value) {
6390
6390
  return typeof value === "object" && value !== null && !Array.isArray(value);
6391
6391
  }
6392
6392
  function defaultMintId() {
@@ -6399,7 +6399,7 @@ function collectSecretMarkerRefs(value, out = []) {
6399
6399
  return out;
6400
6400
  }
6401
6401
  if (Array.isArray(value)) for (const item of value) collectSecretMarkerRefs(item, out);
6402
- else if (isRecord$4(value)) for (const child of Object.values(value)) collectSecretMarkerRefs(child, out);
6402
+ else if (isRecord$5(value)) for (const child of Object.values(value)) collectSecretMarkerRefs(child, out);
6403
6403
  return out;
6404
6404
  }
6405
6405
  async function storedValueEquals(secrets, marker, candidate) {
@@ -6454,7 +6454,7 @@ function rowId(row, idKey) {
6454
6454
  return null;
6455
6455
  }
6456
6456
  async function writeArray(ctx, node, incoming, stored, fieldPath) {
6457
- const storedRows = Array.isArray(stored) ? stored.filter(isRecord$4) : [];
6457
+ const storedRows = Array.isArray(stored) ? stored.filter(isRecord$5) : [];
6458
6458
  if (!Array.isArray(incoming)) {
6459
6459
  ctx.deletes.push(...collectSecretMarkerRefs(storedRows));
6460
6460
  return {
@@ -6470,7 +6470,7 @@ async function writeArray(ctx, node, incoming, stored, fieldPath) {
6470
6470
  const kept = /* @__PURE__ */ new Set();
6471
6471
  const rows = [];
6472
6472
  for (const row of incoming) {
6473
- if (!isRecord$4(row)) {
6473
+ if (!isRecord$5(row)) {
6474
6474
  rows.push(row);
6475
6475
  continue;
6476
6476
  }
@@ -6495,7 +6495,7 @@ async function writeNode(ctx, node, incoming, stored, fieldPath) {
6495
6495
  case "leaf": return writeLeaf(ctx, incoming, stored, fieldPath);
6496
6496
  case "array": return writeArray(ctx, node, incoming, stored, fieldPath);
6497
6497
  case "object": {
6498
- if (!isRecord$4(incoming)) {
6498
+ if (!isRecord$5(incoming)) {
6499
6499
  if (incoming === void 0) return KEEP;
6500
6500
  ctx.deletes.push(...collectSecretMarkerRefs(stored));
6501
6501
  return {
@@ -6503,7 +6503,7 @@ async function writeNode(ctx, node, incoming, stored, fieldPath) {
6503
6503
  value: incoming
6504
6504
  };
6505
6505
  }
6506
- const storedObj = isRecord$4(stored) ? stored : {};
6506
+ const storedObj = isRecord$5(stored) ? stored : {};
6507
6507
  return {
6508
6508
  kind: "value",
6509
6509
  value: await writeMembers(ctx, node.children, incoming, storedObj, (m) => `${fieldPath}.${m}`)
@@ -6626,7 +6626,7 @@ async function resolveSecretMarkers(value, secrets, options = {}) {
6626
6626
  value: items
6627
6627
  };
6628
6628
  }
6629
- if (isRecord$4(v)) {
6629
+ if (isRecord$5(v)) {
6630
6630
  const out = {};
6631
6631
  for (const [k, child] of Object.entries(v)) {
6632
6632
  const s = substitute(child);
@@ -6658,7 +6658,7 @@ var SecretOverwriteRefusedError = class extends Error {
6658
6658
  this.name = "SecretOverwriteRefusedError";
6659
6659
  }
6660
6660
  };
6661
- function isRecord$3(value) {
6661
+ function isRecord$4(value) {
6662
6662
  return typeof value === "object" && value !== null && !Array.isArray(value);
6663
6663
  }
6664
6664
  function resolvedValue(pass, marker) {
@@ -6687,7 +6687,7 @@ function inArray(pass, incoming, stored) {
6687
6687
  return incoming.map((item, index) => {
6688
6688
  const twin = stored[index];
6689
6689
  if (isSecretMarker(twin)) return typeof item === "string" && item === resolvedValue(pass, twin) ? twin : item;
6690
- if (isRecord$3(item) && isRecord$3(twin)) return inArrayRow(pass, item, twin);
6690
+ if (isRecord$4(item) && isRecord$4(twin)) return inArrayRow(pass, item, twin);
6691
6691
  if (Array.isArray(item) && Array.isArray(twin)) return inArray(pass, item, twin);
6692
6692
  return item;
6693
6693
  });
@@ -6698,7 +6698,7 @@ function inArrayRow(pass, incoming, stored) {
6698
6698
  const twin = stored[key];
6699
6699
  if (isSecretMarker(twin)) {
6700
6700
  if (typeof value === "string" && value === resolvedValue(pass, twin)) out[key] = twin;
6701
- } else if (isRecord$3(value) && isRecord$3(twin)) out[key] = inArrayRow(pass, value, twin);
6701
+ } else if (isRecord$4(value) && isRecord$4(twin)) out[key] = inArrayRow(pass, value, twin);
6702
6702
  else if (Array.isArray(value) && Array.isArray(twin)) out[key] = inArray(pass, value, twin);
6703
6703
  }
6704
6704
  return out;
@@ -6706,7 +6706,7 @@ function inArrayRow(pass, incoming, stored) {
6706
6706
  async function walk(pass, incoming, stored) {
6707
6707
  if (isSecretMarker(stored)) return atMarker(pass, incoming, stored);
6708
6708
  if (Array.isArray(incoming) && Array.isArray(stored)) return inArray(pass, incoming, stored);
6709
- if (!isRecord$3(incoming) || !isRecord$3(stored)) return incoming;
6709
+ if (!isRecord$4(incoming) || !isRecord$4(stored)) return incoming;
6710
6710
  const out = { ...incoming };
6711
6711
  for (const [key, value] of Object.entries(incoming)) out[key] = await walk(pass, value, stored[key]);
6712
6712
  return out;
@@ -6737,7 +6737,7 @@ async function restoreUnchangedSecrets(input) {
6737
6737
  function isJsonEqual(a, b) {
6738
6738
  if (Object.is(a, b)) return true;
6739
6739
  if (Array.isArray(a)) return Array.isArray(b) && a.length === b.length && a.every((v, i) => isJsonEqual(v, b[i]));
6740
- if (isRecord$3(a) && isRecord$3(b)) {
6740
+ if (isRecord$4(a) && isRecord$4(b)) {
6741
6741
  const keys = Object.keys(a);
6742
6742
  if (keys.length !== Object.keys(b).length) return false;
6743
6743
  return keys.every((k) => Object.prototype.hasOwnProperty.call(b, k) && isJsonEqual(a[k], b[k]));
@@ -6761,7 +6761,7 @@ function markerKeysOf(blob, owner) {
6761
6761
  }
6762
6762
  function nodeFromStored(value, owner) {
6763
6763
  if (isSecretMarker(value)) return isSecretRefOwnedBy(value.$secret, owner) ? { kind: "leaf" } : null;
6764
- if (!isRecord$3(value)) return null;
6764
+ if (!isRecord$4(value)) return null;
6765
6765
  const children = /* @__PURE__ */ new Map();
6766
6766
  for (const [key, child] of Object.entries(value)) {
6767
6767
  const node = nodeFromStored(child, owner);
@@ -18349,15 +18349,6 @@ var StorageKindSchema = object({
18349
18349
  declaration: RecordKindDeclarationSchema
18350
18350
  });
18351
18351
  method(object({ ownerPrefix: string().min(1).optional() }), object({ tables: array(StorageTableSchema) }), { auth: "admin" }), method(object({
18352
- collection: string().min(1),
18353
- expectRows: number().int().nonnegative()
18354
- }), object({
18355
- dropped: literal(true),
18356
- rows: number().int().nonnegative()
18357
- }), {
18358
- kind: "mutation",
18359
- auth: "admin"
18360
- }), method(object({
18361
18352
  owner: string().min(1).optional(),
18362
18353
  /** `false` skips the per-kind row count (a catalog read only). Default true. */
18363
18354
  counts: boolean().optional()
@@ -44513,12 +44504,7 @@ var NcRuleActionsSchema = object({
44513
44504
  */
44514
44505
  buttons: array(NcRuleNotificationButtonSchema).max(8).optional()
44515
44506
  });
44516
- /**
44517
- * @deprecated Legacy inline sequence shape (pre shared-sequence store). Kept
44518
- * only so boot migration / tests can recognise and rewrite persisted rows.
44519
- * New code must use {@link NcSharedSequence} + {@link NcActionBinding}.
44520
- */
44521
- var NcLegacyRuleActionSequenceSchema = object({
44507
+ object({
44522
44508
  name: string().min(1).max(120),
44523
44509
  enabled: boolean(),
44524
44510
  minDelaySec: number().int().min(0).max(86400).optional(),
@@ -44924,6 +44910,15 @@ var NcMediaPolicySchema = object({
44924
44910
  * Replaces `zoneCrop`.
44925
44911
  */
44926
44912
  showTriggerZone: boolean().optional(),
44913
+ /**
44914
+ * Draw the SUBJECT'S PATH on the picture — a line in the subject's colour
44915
+ * through the track's positions up to the frame shown, the same path the
44916
+ * debug views draw (`buildSubjectPath`, D903). Every picture mode a subject
44917
+ * is drawn on: a `crop` maps the path into the crop and clips it. Valid only
44918
+ * on a rule whose subject is a tracked object (refused on a sound rule);
44919
+ * dropped on `image: 'none'`. Absent = off.
44920
+ */
44921
+ showSubjectPath: boolean().optional(),
44927
44922
  /** @deprecated D897 — accepted from an editor that predates `image`, folded into it on save. */
44928
44923
  attach: _enum([
44929
44924
  "best",
@@ -77621,12 +77616,6 @@ Object.freeze({
77621
77616
  addonId: null,
77622
77617
  access: "create"
77623
77618
  },
77624
- "storageAdmin.dropCollection": {
77625
- capName: "storage-admin",
77626
- capScope: "system",
77627
- addonId: null,
77628
- access: "delete"
77629
- },
77630
77619
  "storageAdmin.listKinds": {
77631
77620
  capName: "storage-admin",
77632
77621
  capScope: "system",
@@ -82687,22 +82676,35 @@ function resolveNcMediaImage(media, kind) {
82687
82676
  }
82688
82677
  /**
82689
82678
  * The stored shape of a media policy: `image` set, the legacy triple gone.
82679
+ * `showSubjectPath` survives on a kind with a tracked subject and a picture.
82690
82680
  * `showTriggerZone` survives only where it can be drawn — a zone trigger and a
82691
82681
  * mode other than `crop`/`none`; a legacy `zoneCrop` on a zone rule becomes it.
82692
82682
  * Every other field (gif, clip, rolls, speed, profile, linked cameras) is
82693
82683
  * carried through untouched. Pure; never throws.
82694
82684
  */
82695
82685
  function normalizeNcMediaPolicy(media, rule) {
82696
- const image = resolveNcMediaImage(media, ruleKindOf(rule));
82697
- const { attach: _attach, frame: _frame, zoneCrop, showTriggerZone, image: _image, ...rest } = media;
82686
+ const kind = ruleKindOf(rule);
82687
+ const image = resolveNcMediaImage(media, kind);
82688
+ const { attach: _attach, frame: _frame, zoneCrop, showTriggerZone, showSubjectPath, image: _image, ...rest } = media;
82698
82689
  const drawable = (showTriggerZone === true || media.image === void 0 && zoneCrop === true) && image !== "crop" && image !== "none" && ruleTriggerZoneIds(rule.conditions).length > 0;
82690
+ const pathDrawable = showSubjectPath === true && image !== "none" && subjectHasPath(kind);
82699
82691
  return {
82700
82692
  ...rest,
82701
82693
  image,
82702
- ...drawable ? { showTriggerZone: true } : {}
82694
+ ...drawable ? { showTriggerZone: true } : {},
82695
+ ...pathDrawable ? { showSubjectPath: true } : {}
82703
82696
  };
82704
82697
  }
82705
82698
  /**
82699
+ * True when a rule of this kind has a TRACKED subject whose path can be drawn
82700
+ * (`showSubjectPath`): the kinds whose subject owns a region of the frame. A
82701
+ * sound owns none, and a kind that carries no media has no picture.
82702
+ */
82703
+ function subjectHasPath(kind) {
82704
+ const spec = ruleKindSpec(kind);
82705
+ return spec.carriesMedia && spec.carriesSubjectCrop;
82706
+ }
82707
+ /**
82706
82708
  * Why a media policy cannot be SAVED on this rule, or null. Server-side and
82707
82709
  * editor alike: `showTriggerZone` on a rule whose trigger is not a zone, and a
82708
82710
  * mode the rule's kind cannot honour.
@@ -82714,6 +82716,7 @@ function ncMediaPolicyError(media, rule) {
82714
82716
  if (offered.length > 0 && !offered.includes(media.image)) return `media.image '${media.image}' is not available for a ${kind} rule (offered: ${offered.join(", ")})`;
82715
82717
  }
82716
82718
  if (media.showTriggerZone === true && ruleTriggerZoneIds(rule.conditions).length === 0) return "media.showTriggerZone needs a rule triggered by a zone (a zones condition or an occupancy zone)";
82719
+ if (media.showSubjectPath === true && !subjectHasPath(kind)) return `media.showSubjectPath needs a rule whose subject is a tracked object (not a ${kind} rule)`;
82717
82720
  return null;
82718
82721
  }
82719
82722
  var WEEKDAY_TO_DAY = {
@@ -82796,6 +82799,182 @@ function isScheduleActive(schedule, atMs) {
82796
82799
  }
82797
82800
  return schedule.invert === true ? !inside : inside;
82798
82801
  }
82802
+ var clamp01 = (n) => n < 0 ? 0 : n > 1 ? 1 : n;
82803
+ /** The sample of a normalised box: its centre, its extent. */
82804
+ function subjectPathSampleFromBox(bbox, timestamp) {
82805
+ return {
82806
+ x: bbox.x + bbox.w / 2,
82807
+ y: bbox.y + bbox.h / 2,
82808
+ w: bbox.w,
82809
+ h: bbox.h,
82810
+ ...timestamp !== void 0 ? { timestamp } : {}
82811
+ };
82812
+ }
82813
+ function isPlaceholder(s) {
82814
+ return s.w !== void 0 && s.h !== void 0 && s.w >= .85 && s.h >= .85;
82815
+ }
82816
+ function downsample(xs, max) {
82817
+ if (xs.length <= max || max < 2) return xs;
82818
+ const step = (xs.length - 1) / (max - 1);
82819
+ const out = [];
82820
+ for (let i = 0; i < max - 1; i++) {
82821
+ const x = xs[Math.round(i * step)];
82822
+ if (x !== void 0) out.push(x);
82823
+ }
82824
+ const last = xs[xs.length - 1];
82825
+ if (last !== void 0) out.push(last);
82826
+ return out;
82827
+ }
82828
+ function isFiniteSample(s) {
82829
+ return Number.isFinite(s.x) && Number.isFinite(s.y);
82830
+ }
82831
+ /**
82832
+ * The path of one track from its samples (normalised, oldest → newest).
82833
+ * Pure; never throws; malformed samples are skipped.
82834
+ */
82835
+ function buildSubjectPath(samples, opts) {
82836
+ const until = opts?.untilTimestamp;
82837
+ const nodes = [];
82838
+ let unlocalized = 0;
82839
+ let tail = null;
82840
+ for (let index = 0; index < samples.length; index++) {
82841
+ const s = samples[index];
82842
+ if (s === void 0 || !isFiniteSample(s)) continue;
82843
+ if (until !== void 0 && s.timestamp !== void 0 && s.timestamp > until) continue;
82844
+ if (isPlaceholder(s)) {
82845
+ unlocalized += 1;
82846
+ continue;
82847
+ }
82848
+ const ts = s.timestamp !== void 0 && Number.isFinite(s.timestamp) ? s.timestamp : index;
82849
+ const x = clamp01(s.x);
82850
+ const y = clamp01(s.y);
82851
+ const prev = nodes[nodes.length - 1];
82852
+ if (prev !== void 0 && Math.hypot(x - prev.x, y - prev.y) < .005) {
82853
+ nodes[nodes.length - 1] = {
82854
+ ...prev,
82855
+ samples: prev.samples + 1,
82856
+ lastTs: Math.max(prev.lastTs, ts)
82857
+ };
82858
+ tail = {
82859
+ x,
82860
+ y,
82861
+ samples: 1,
82862
+ firstTs: ts,
82863
+ lastTs: ts
82864
+ };
82865
+ continue;
82866
+ }
82867
+ tail = null;
82868
+ nodes.push({
82869
+ x,
82870
+ y,
82871
+ samples: 1,
82872
+ firstTs: ts,
82873
+ lastTs: ts
82874
+ });
82875
+ }
82876
+ const end = nodes[nodes.length - 1];
82877
+ if (tail !== null && end !== void 0 && end.samples > 1 && (tail.x !== end.x || tail.y !== end.y)) {
82878
+ nodes[nodes.length - 1] = {
82879
+ ...end,
82880
+ samples: end.samples - 1
82881
+ };
82882
+ nodes.push(tail);
82883
+ }
82884
+ return {
82885
+ nodes: downsample(nodes, opts?.maxPoints ?? 120),
82886
+ unlocalized
82887
+ };
82888
+ }
82889
+ /** True when the path has something to draw (two nodes or more). */
82890
+ function isDrawableSubjectPath(path) {
82891
+ return path.nodes.length >= 2;
82892
+ }
82893
+ function inside(p) {
82894
+ return p.x >= 0 && p.x <= 1 && p.y >= 0 && p.y <= 1;
82895
+ }
82896
+ /** Liang–Barsky: the part of segment a→b inside the unit square, or null. */
82897
+ function clipSegment(a, b) {
82898
+ const dx = b.x - a.x;
82899
+ const dy = b.y - a.y;
82900
+ let t0 = 0;
82901
+ let t1 = 1;
82902
+ const edges = [
82903
+ [-dx, a.x],
82904
+ [dx, 1 - a.x],
82905
+ [-dy, a.y],
82906
+ [dy, 1 - a.y]
82907
+ ];
82908
+ for (const [p, q] of edges) {
82909
+ if (p === 0) {
82910
+ if (q < 0) return null;
82911
+ continue;
82912
+ }
82913
+ const r = q / p;
82914
+ if (p < 0) {
82915
+ if (r > t1) return null;
82916
+ if (r > t0) t0 = r;
82917
+ } else {
82918
+ if (r < t0) return null;
82919
+ if (r < t1) t1 = r;
82920
+ }
82921
+ }
82922
+ return [{
82923
+ x: a.x + t0 * dx,
82924
+ y: a.y + t0 * dy
82925
+ }, {
82926
+ x: a.x + t1 * dx,
82927
+ y: a.y + t1 * dy
82928
+ }];
82929
+ }
82930
+ function samePoint(a, b) {
82931
+ return Math.abs(a.x - b.x) < 1e-9 && Math.abs(a.y - b.y) < 1e-9;
82932
+ }
82933
+ /**
82934
+ * The path as seen through `view` — a normalised rectangle of the frame (the
82935
+ * whole frame `{0,0,1,1}`, or the rectangle a crop cut). Points are re-mapped
82936
+ * into the view's own 0..1 space and the line is CLIPPED to it: a path that
82937
+ * leaves the crop and comes back is two runs. Runs of fewer than two points
82938
+ * are dropped, so an empty result means "nothing to draw".
82939
+ */
82940
+ function projectSubjectPath(points, view) {
82941
+ if (points.length < 2 || !(view.w > 0) || !(view.h > 0)) return [];
82942
+ const local = points.map((p) => ({
82943
+ x: (p.x - view.x) / view.w,
82944
+ y: (p.y - view.y) / view.h
82945
+ }));
82946
+ const runs = [];
82947
+ let run = [];
82948
+ for (let i = 1; i < local.length; i++) {
82949
+ const a = local[i - 1];
82950
+ const b = local[i];
82951
+ if (a === void 0 || b === void 0) continue;
82952
+ const seg = clipSegment(a, b);
82953
+ if (seg === null) {
82954
+ if (run.length >= 2) runs.push(run);
82955
+ run = [];
82956
+ continue;
82957
+ }
82958
+ const [from, to] = seg;
82959
+ const last = run[run.length - 1];
82960
+ if (last === void 0 || !samePoint(last, from)) {
82961
+ if (run.length >= 2) runs.push(run);
82962
+ run = [from];
82963
+ }
82964
+ run.push(to);
82965
+ if (!inside(b)) {
82966
+ if (run.length >= 2) runs.push(run);
82967
+ run = [];
82968
+ }
82969
+ }
82970
+ if (run.length >= 2) runs.push(run);
82971
+ return runs;
82972
+ }
82973
+ /** An SVG `points` attribute for a run in a `width` × `height` drawing ("x,y x,y …"). */
82974
+ function subjectPathSvgPoints(run, width, height) {
82975
+ const fmt = (v) => String(Math.round(v * 100) / 100);
82976
+ return run.map((p) => `${fmt(p.x * width)},${fmt(p.y * height)}`).join(" ");
82977
+ }
82799
82978
  var ARMED_WORD_PREFIX = "armed_";
82800
82979
  var ALARM_PANEL_CAP = "alarm-panel";
82801
82980
  var ALARM_PANEL_TRIGGER_METHOD = "trigger";
@@ -86935,24 +87114,12 @@ Object.defineProperty(exports, "NcConditionsSchema", {
86935
87114
  return NcConditionsSchema;
86936
87115
  }
86937
87116
  });
86938
- Object.defineProperty(exports, "NcLegacyRuleActionSequenceSchema", {
86939
- enumerable: true,
86940
- get: function() {
86941
- return NcLegacyRuleActionSequenceSchema;
86942
- }
86943
- });
86944
87117
  Object.defineProperty(exports, "NcRuleActionSchema", {
86945
87118
  enumerable: true,
86946
87119
  get: function() {
86947
87120
  return NcRuleActionSchema;
86948
87121
  }
86949
87122
  });
86950
- Object.defineProperty(exports, "NcRuleActionsSchema", {
86951
- enumerable: true,
86952
- get: function() {
86953
- return NcRuleActionsSchema;
86954
- }
86955
- });
86956
87123
  Object.defineProperty(exports, "NcRuleInputSchema", {
86957
87124
  enumerable: true,
86958
87125
  get: function() {
@@ -87097,12 +87264,6 @@ Object.defineProperty(exports, "RebuildObjectEmbeddingsRefusalSchema", {
87097
87264
  return RebuildObjectEmbeddingsRefusalSchema;
87098
87265
  }
87099
87266
  });
87100
- Object.defineProperty(exports, "RecordsError", {
87101
- enumerable: true,
87102
- get: function() {
87103
- return RecordsError;
87104
- }
87105
- });
87106
87267
  Object.defineProperty(exports, "RetrainDismissedSchema", {
87107
87268
  enumerable: true,
87108
87269
  get: function() {
@@ -87391,6 +87552,12 @@ Object.defineProperty(exports, "buildEventKindDescriptor", {
87391
87552
  return buildEventKindDescriptor;
87392
87553
  }
87393
87554
  });
87555
+ Object.defineProperty(exports, "buildSubjectPath", {
87556
+ enumerable: true,
87557
+ get: function() {
87558
+ return buildSubjectPath;
87559
+ }
87560
+ });
87394
87561
  Object.defineProperty(exports, "buildViewerLink", {
87395
87562
  enumerable: true,
87396
87563
  get: function() {
@@ -87661,6 +87828,12 @@ Object.defineProperty(exports, "isDeviceScopedCap", {
87661
87828
  return isDeviceScopedCap;
87662
87829
  }
87663
87830
  });
87831
+ Object.defineProperty(exports, "isDrawableSubjectPath", {
87832
+ enumerable: true,
87833
+ get: function() {
87834
+ return isDrawableSubjectPath;
87835
+ }
87836
+ });
87664
87837
  Object.defineProperty(exports, "isEventKindLabelKey", {
87665
87838
  enumerable: true,
87666
87839
  get: function() {
@@ -87853,6 +88026,12 @@ Object.defineProperty(exports, "plateGalleryCapability", {
87853
88026
  return plateGalleryCapability;
87854
88027
  }
87855
88028
  });
88029
+ Object.defineProperty(exports, "projectSubjectPath", {
88030
+ enumerable: true,
88031
+ get: function() {
88032
+ return projectSubjectPath;
88033
+ }
88034
+ });
87856
88035
  Object.defineProperty(exports, "readClusterModelPinStrict", {
87857
88036
  enumerable: true,
87858
88037
  get: function() {
@@ -88033,6 +88212,18 @@ Object.defineProperty(exports, "subKindsOf", {
88033
88212
  return subKindsOf;
88034
88213
  }
88035
88214
  });
88215
+ Object.defineProperty(exports, "subjectPathSampleFromBox", {
88216
+ enumerable: true,
88217
+ get: function() {
88218
+ return subjectPathSampleFromBox;
88219
+ }
88220
+ });
88221
+ Object.defineProperty(exports, "subjectPathSvgPoints", {
88222
+ enumerable: true,
88223
+ get: function() {
88224
+ return subjectPathSvgPoints;
88225
+ }
88226
+ });
88036
88227
  Object.defineProperty(exports, "summarizeReview", {
88037
88228
  enumerable: true,
88038
88229
  get: function() {
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_clip_model_registry = require("../clip-model-registry-CYWuH4Rx.js");
5
+ const require_clip_model_registry = require("../clip-model-registry-CcgzpELQ.js");
6
6
  let node_fs = require("node:fs");
7
7
  node_fs = require_clip_model_registry.__toESM(node_fs);
8
8
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { $i as normalizeNodeId, Vi as BaseAddon, Yr as parseProcStatus, a as CLIP_EMBEDDING_STEP_ID, ci as resolvePoolMemoryPolicy, fr as embeddingRequirementsFailedError, i as CLIP_TEXT_MODELS, l as resolveClusterModelPin, lr as embeddingEncoderCapability, n as DEFAULT_CLIP_MODEL, nn as PoolMemoryWatchdog, pr as embeddingRequirementsUnavailableError, r as CLIP_IMAGE_MODELS, t as BUILTIN_CLIP_MODELS, ur as embeddingModelFailedError } from "../clip-model-registry-D6yfX_Xq.mjs";
1
+ import { Wi as BaseAddon, Yr as parseProcStatus, a as CLIP_EMBEDDING_STEP_ID, cr as embeddingEncoderCapability, dr as embeddingRequirementsFailedError, en as PoolMemoryWatchdog, fr as embeddingRequirementsUnavailableError, i as CLIP_TEXT_MODELS, l as resolveClusterModelPin, li as resolvePoolMemoryPolicy, lr as embeddingModelFailedError, n as DEFAULT_CLIP_MODEL, r as CLIP_IMAGE_MODELS, t as BUILTIN_CLIP_MODELS, ta as normalizeNodeId } from "../clip-model-registry-BBzoIoKO.mjs";
2
2
  import { createRequire } from "node:module";
3
3
  import * as fs from "node:fs";
4
4
  import * as path$1 from "node:path";
@@ -1,8 +1,8 @@
1
1
  import { a as e, i as t, n, o as r, r as i, t as a } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare__react__loadShare__.js-Cx9AsA5q.mjs";
2
2
  import { t as o } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-B3Wx5J80.mjs";
3
- import { a as s, c, d as l, f as u, i as d, l as f, m as p, n as m, o as h, p as g, r as _, s as v, t as y, u as b } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-BB2kgLY1.mjs";
3
+ import { a as s, c, d as l, f as u, i as d, l as f, m as p, n as m, o as h, p as g, r as _, s as v, t as y, u as b } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-CssYIiFD.mjs";
4
4
  import { n as x, t as S } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-CkwmHEi0.mjs";
5
- import { t as C } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CSQBGkvs.mjs";
5
+ import { t as C } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BSMSev-b.mjs";
6
6
  //#region ../../node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js
7
7
  var w = (...e) => e.filter((e, t, n) => !!e && e.trim() !== "" && n.indexOf(e) === t).join(" ").trim(), T = (e) => e.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(), E = (e) => e.replace(/^([A-Z])|[\s-_]+(\w)/g, (e, t, n) => n ? n.toUpperCase() : t.toLowerCase()), D = (e) => {
8
8
  let t = E(e);
@@ -3,7 +3,7 @@ import "./dist-CYZr2fwk.mjs";
3
3
  var e = {
4
4
  "@camstack/sdk": {
5
5
  name: "@camstack/sdk",
6
- version: "1.2.143",
6
+ version: "1.2.145",
7
7
  scope: ["default"],
8
8
  loaded: !1,
9
9
  from: "addon_pipeline_analytics_widgets",
@@ -18,7 +18,7 @@ var e = {
18
18
  },
19
19
  "@camstack/types": {
20
20
  name: "@camstack/types",
21
- version: "1.2.393",
21
+ version: "1.2.395",
22
22
  scope: ["default"],
23
23
  loaded: !1,
24
24
  from: "addon_pipeline_analytics_widgets",
@@ -33,7 +33,7 @@ var e = {
33
33
  },
34
34
  "@camstack/ui-library": {
35
35
  name: "@camstack/ui-library",
36
- version: "1.2.310",
36
+ version: "1.2.312",
37
37
  scope: ["default"],
38
38
  loaded: !1,
39
39
  from: "addon_pipeline_analytics_widgets",