@camstack/ui-library 1.2.51 → 1.2.52
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{MotionZonesSettings-DRrdkR4U.js → MotionZonesSettings-DNdnFHso.js} +1 -1
- package/dist/{PrivacyMaskSettings-DsyAfD21.js → PrivacyMaskSettings-DNSLc6ww.js} +1 -1
- package/dist/SceneMonitorEditor-DN2ILWCf.cjs +917 -0
- package/dist/SceneMonitorEditor-d_A4kO-M.js +917 -0
- package/dist/composites/cap-settings/SceneMonitorEditor.d.ts +15 -5
- package/dist/composites/cap-settings/SceneReferenceGallery.d.ts +36 -0
- package/dist/composites/cap-settings/SceneSettingsForm.d.ts +21 -0
- package/dist/composites/cap-settings/scene-monitor-copy.d.ts +37 -5
- package/dist/index.cjs +69 -12
- package/dist/index.js +73 -17
- package/dist/primitives/input.d.ts +6 -0
- package/dist/primitives/select.d.ts +16 -0
- package/package.json +1 -1
- package/dist/SceneMonitorEditor-CfSrNccC.cjs +0 -281
- package/dist/SceneMonitorEditor-D5BNWAM_.js +0 -281
|
@@ -26,13 +26,23 @@
|
|
|
26
26
|
* and Night (IR), each forcing a fresh snapshot. The variant is DETECTED
|
|
27
27
|
* from the frame and shown rather than asked; the buttons exist so the
|
|
28
28
|
* operator can say "capture this as the night reference" while standing
|
|
29
|
-
* outside at 22:00
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
29
|
+
* outside at 22:00 — which is exactly why **Night (IR) is labelled
|
|
30
|
+
* optional**. Almost nobody does that, and a scene captured only in daylight
|
|
31
|
+
* is a configuration, not a defect: under the default
|
|
32
|
+
* `onUncoveredCondition: 'skip'` the infrared hours are simply sat out.
|
|
33
|
+
* 3. **Read the coverage line.** "Daylight ✓ · Night (IR) ✗ — optional; checks
|
|
34
|
+
* in night (ir) are skipped". This feature's failure mode is silence that
|
|
35
|
+
* reads as "nothing has happened", and that one line is the difference
|
|
36
|
+
* between a five-minute fix and a session of guessing — but it must say what
|
|
37
|
+
* HAPPENS, not complain. It used to end "reports 'can't tell'", which made a
|
|
38
|
+
* correctly configured scene look broken every night.
|
|
34
39
|
* 4. **Reset.** Clears the flag AND re-captures the baseline for the current
|
|
35
40
|
* light, because the bin never goes back in exactly the same spot.
|
|
41
|
+
* 5. **Settings.** Every knob the model has actually carried since the provider
|
|
42
|
+
* shipped — how often it looks, how closely it has to match, how many
|
|
43
|
+
* agreeing checks a change costs, what a missing light means, which boolean
|
|
44
|
+
* drives notifications, and whether a vision model adjudicates a flip. None
|
|
45
|
+
* of it was reachable before; see `SceneSettingsForm`.
|
|
36
46
|
*
|
|
37
47
|
* Live state arrives through the cap's `status.kind: 'push'` runtime slice, so
|
|
38
48
|
* the card updates itself without polling.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { SceneMonitor, SceneReference } from '@camstack/types';
|
|
2
|
+
/** The hub-proxied prefix for the pipeline-analytics event-media data plane. */
|
|
3
|
+
export declare const SCENE_MEDIA_BASE = "/addon/pipeline-analytics/event-media";
|
|
4
|
+
/** One reference, with the coordinates `deleteReference` addresses it by. */
|
|
5
|
+
export interface SceneReferenceTile {
|
|
6
|
+
readonly stateId: string;
|
|
7
|
+
/** Index into THAT state's `references` array — the cap's own addressing. */
|
|
8
|
+
readonly index: number;
|
|
9
|
+
readonly reference: SceneReference;
|
|
10
|
+
}
|
|
11
|
+
export interface SceneReferenceGroup {
|
|
12
|
+
readonly condition: string;
|
|
13
|
+
readonly tiles: readonly SceneReferenceTile[];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Flatten `states[].references[]` into per-condition groups while keeping each
|
|
17
|
+
* reference's `(stateId, index)` — the pair `deleteReference` takes.
|
|
18
|
+
*
|
|
19
|
+
* The index is deliberately the position in the state's OWN array rather than
|
|
20
|
+
* anything derived from the grouping: an index computed over the grouped view
|
|
21
|
+
* would address a different reference the moment a scene holds two conditions,
|
|
22
|
+
* and the operator would delete the wrong photograph with no way to tell.
|
|
23
|
+
*/
|
|
24
|
+
export declare function groupReferences(monitor: SceneMonitor): readonly SceneReferenceGroup[];
|
|
25
|
+
/** Total references across every state — the count that decides whether a
|
|
26
|
+
* delete leaves the scene with no idea what "normal" looks like. */
|
|
27
|
+
export declare function totalReferences(monitor: SceneMonitor): number;
|
|
28
|
+
export interface SceneReferenceGalleryProps {
|
|
29
|
+
readonly monitor: SceneMonitor;
|
|
30
|
+
readonly disabled: boolean;
|
|
31
|
+
readonly onDelete: (input: {
|
|
32
|
+
stateId: string;
|
|
33
|
+
index: number;
|
|
34
|
+
}) => void;
|
|
35
|
+
}
|
|
36
|
+
export declare function SceneReferenceGallery({ monitor, disabled, onDelete }: SceneReferenceGalleryProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { SceneCheck, SceneMonitor, SceneUncoveredPolicy } from '@camstack/types';
|
|
2
|
+
/** The subset of `updateScene`'s patch this form can produce. */
|
|
3
|
+
export interface SceneSettingsPatch {
|
|
4
|
+
readonly label?: string;
|
|
5
|
+
readonly enabled?: boolean;
|
|
6
|
+
readonly triggerMode?: SceneMonitor['triggerMode'];
|
|
7
|
+
readonly checkIntervalSec?: number;
|
|
8
|
+
readonly check?: SceneCheck;
|
|
9
|
+
readonly quietSeconds?: number;
|
|
10
|
+
readonly minObservationSpacingSec?: number;
|
|
11
|
+
readonly emit?: SceneMonitor['emit'];
|
|
12
|
+
readonly autoRestore?: boolean;
|
|
13
|
+
readonly onUncoveredCondition?: SceneUncoveredPolicy;
|
|
14
|
+
readonly confirm?: SceneMonitor['confirm'] | null;
|
|
15
|
+
}
|
|
16
|
+
export interface SceneSettingsFormProps {
|
|
17
|
+
readonly monitor: SceneMonitor;
|
|
18
|
+
readonly disabled: boolean;
|
|
19
|
+
readonly onPatch: (patch: SceneSettingsPatch) => void;
|
|
20
|
+
}
|
|
21
|
+
export declare function SceneSettingsForm({ monitor, disabled, onPatch }: SceneSettingsFormProps): import("react").JSX.Element;
|
|
@@ -1,26 +1,58 @@
|
|
|
1
1
|
import { SceneMonitor } from '@camstack/types';
|
|
2
|
-
/** The lighting variants an operator is
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
/** The lighting variants an operator is OFFERED. The resolver can also report
|
|
3
|
+
* `night`, `dawn` and `dusk`; those are shown when present but never demanded,
|
|
4
|
+
* because most installs only ever see day and IR. */
|
|
5
5
|
export declare const SCENE_CAPTURE_VARIANTS: readonly ["day", "ir"];
|
|
6
6
|
export type SceneCaptureVariant = (typeof SCENE_CAPTURE_VARIANTS)[number];
|
|
7
|
+
/**
|
|
8
|
+
* The one variant that is genuinely optional.
|
|
9
|
+
*
|
|
10
|
+
* Nobody stands outside at 22:00 to photograph a wheelie bin in infrared, and
|
|
11
|
+
* plenty of scenes are daytime questions that never need a night reference at
|
|
12
|
+
* all. Every sentence about IR in this file is written from that premise: a
|
|
13
|
+
* missing night reference is a CHOICE the scene accommodates, never a fault it
|
|
14
|
+
* reports. The engine backs that up — under the default
|
|
15
|
+
* `onUncoveredCondition: 'skip'` the night checks are simply not made.
|
|
16
|
+
*/
|
|
17
|
+
export declare const SCENE_OPTIONAL_VARIANT: SceneCaptureVariant;
|
|
7
18
|
export declare const VARIANT_LABEL: Readonly<Record<string, string>>;
|
|
8
19
|
export declare function variantLabel(condition: string): string;
|
|
9
20
|
/**
|
|
10
|
-
* "
|
|
21
|
+
* "Daylight ✓ · Night (IR) ✗ — optional; checks in night (ir) are skipped."
|
|
11
22
|
*
|
|
12
23
|
* Converts the silent cross-condition fallback this engine used to have into an
|
|
13
24
|
* operator-visible fact. Without it, a scene with only a daylight reference
|
|
14
25
|
* simply stops answering after sunset and nothing anywhere says why.
|
|
26
|
+
*
|
|
27
|
+
* It used to end *"reports 'can't tell' in night (ir)"*, which was accurate and
|
|
28
|
+
* read as a defect: the operator saw a ✗ and a complaint for a scene that was
|
|
29
|
+
* configured exactly as they meant it. The missing half is now named as what it
|
|
30
|
+
* is — the part you do not have to do — and the sentence says what actually
|
|
31
|
+
* happens instead, which differs by the scene's own policy.
|
|
15
32
|
*/
|
|
16
33
|
export declare function coverageLine(monitor: SceneMonitor): string;
|
|
34
|
+
/**
|
|
35
|
+
* The calm sentence for a scene that is sitting the current light out — `null`
|
|
36
|
+
* whenever it is checking normally.
|
|
37
|
+
*
|
|
38
|
+
* Separate from {@link statusLine} because it is not a verdict and must not
|
|
39
|
+
* read like one. A paused scene has not failed, has not lost its flag, and
|
|
40
|
+
* needs nothing from the operator; the only thing worth saying is which light
|
|
41
|
+
* it is waiting out and that it will pick itself back up.
|
|
42
|
+
*/
|
|
43
|
+
export declare function suspensionLine(monitor: SceneMonitor): string | null;
|
|
17
44
|
/**
|
|
18
45
|
* The one line under a scene's name. It answers, in order: can it judge, what
|
|
19
46
|
* does it say, and how long has it said it.
|
|
20
47
|
*/
|
|
21
48
|
export declare function statusLine(monitor: SceneMonitor, now: number): string;
|
|
22
49
|
/** The badge word. `latched` wins over `verdict`, because the latch is the
|
|
23
|
-
* thing the operator asked to be told and it outlives the live state.
|
|
50
|
+
* thing the operator asked to be told and it outlives the live state.
|
|
51
|
+
*
|
|
52
|
+
* A scene sitting out an uncovered light reads `Paused`, in the NEUTRAL tone —
|
|
53
|
+
* never `alarm`, and never the `danger` variant the page maps that to. A
|
|
54
|
+
* missing IR reference must not be able to paint a red badge on a scene that
|
|
55
|
+
* is doing exactly what it was configured to do. */
|
|
24
56
|
export declare function badgeFor(monitor: SceneMonitor): {
|
|
25
57
|
text: string;
|
|
26
58
|
tone: 'alarm' | 'ok' | 'unknown';
|
package/dist/index.cjs
CHANGED
|
@@ -22758,7 +22758,13 @@ var Skeleton = (0, react$1.forwardRef)(({ className, ...props }, ref) => {
|
|
|
22758
22758
|
Skeleton.displayName = "Skeleton";
|
|
22759
22759
|
//#endregion
|
|
22760
22760
|
//#region src/primitives/input.tsx
|
|
22761
|
-
|
|
22761
|
+
/**
|
|
22762
|
+
* `disabled:opacity-50 disabled:cursor-not-allowed` for the same reason as
|
|
22763
|
+
* `Select` — an explicit `bg-surface` / `text-foreground` overrides the greying
|
|
22764
|
+
* a browser would otherwise apply, leaving an inert field indistinguishable
|
|
22765
|
+
* from a live one. See `disabled-affordance.test.tsx`.
|
|
22766
|
+
*/
|
|
22767
|
+
var inputVariants = cva("h-7 w-full px-2.5 text-xs bg-surface border rounded-md text-foreground placeholder:text-foreground-subtle focus:outline-none focus:ring-1 focus:ring-primary transition-colors disabled:opacity-50 disabled:cursor-not-allowed", {
|
|
22762
22768
|
variants: { state: {
|
|
22763
22769
|
default: "border-border",
|
|
22764
22770
|
error: "border-danger"
|
|
@@ -22793,19 +22799,36 @@ var Input = (0, react$1.forwardRef)(({ className, state, leftSlot, rightSlot, ..
|
|
|
22793
22799
|
Input.displayName = "Input";
|
|
22794
22800
|
//#endregion
|
|
22795
22801
|
//#region src/primitives/select.tsx
|
|
22796
|
-
|
|
22802
|
+
/**
|
|
22803
|
+
* A native `<select>` styled to match the rest of the field set.
|
|
22804
|
+
*
|
|
22805
|
+
* `appearance-none` plus an explicit `bg-surface` / `text-foreground` is what
|
|
22806
|
+
* makes it match — and it is also what USED to make a disabled one a lie. A
|
|
22807
|
+
* browser greys a disabled control by rendering its own background and text
|
|
22808
|
+
* colour; all three of those are overridden here, so a `disabled` dropdown
|
|
22809
|
+
* looked exactly like a live one and simply ignored the click. That is the
|
|
22810
|
+
* whole of the "the language selector does not open" report of 2026-08-15:
|
|
22811
|
+
* the AI section's switch was off, every control under it was correctly inert,
|
|
22812
|
+
* and nothing on screen said so.
|
|
22813
|
+
*
|
|
22814
|
+
* `disabled:` classes belong HERE and not on each call site: there are dozens
|
|
22815
|
+
* of `<Select disabled>` in this app and the one that gets forgotten is the one
|
|
22816
|
+
* that generates the ticket. Guarded by `disabled-affordance.test.tsx`.
|
|
22817
|
+
*/
|
|
22818
|
+
var Select = (0, react$1.forwardRef)(({ className, options, disabled, ...props }, ref) => {
|
|
22797
22819
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
22798
22820
|
className: "relative w-full",
|
|
22799
22821
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("select", {
|
|
22800
22822
|
ref,
|
|
22801
|
-
|
|
22823
|
+
disabled,
|
|
22824
|
+
className: cn("h-7 w-full px-2.5 text-xs bg-surface border border-border rounded-md text-foreground appearance-none pr-7 focus:outline-none focus:ring-1 focus:ring-primary", "disabled:opacity-50 disabled:cursor-not-allowed", className),
|
|
22802
22825
|
...props,
|
|
22803
22826
|
children: options.map((option) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
|
|
22804
22827
|
value: option.value,
|
|
22805
22828
|
children: option.label
|
|
22806
22829
|
}, option.value))
|
|
22807
22830
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
22808
|
-
className: "absolute right-2 top-1/2 -translate-y-1/2 pointer-events-none text-foreground-muted",
|
|
22831
|
+
className: cn("absolute right-2 top-1/2 -translate-y-1/2 pointer-events-none text-foreground-muted", disabled === true ? "opacity-50" : ""),
|
|
22809
22832
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ChevronDown, { className: "h-3.5 w-3.5" })
|
|
22810
22833
|
})]
|
|
22811
22834
|
});
|
|
@@ -25567,9 +25590,9 @@ async function waitForIceGathering(pc) {
|
|
|
25567
25590
|
}
|
|
25568
25591
|
//#endregion
|
|
25569
25592
|
//#region src/composites/cap-settings/scene-monitor-copy.ts
|
|
25570
|
-
/** The lighting variants an operator is
|
|
25571
|
-
*
|
|
25572
|
-
*
|
|
25593
|
+
/** The lighting variants an operator is OFFERED. The resolver can also report
|
|
25594
|
+
* `night`, `dawn` and `dusk`; those are shown when present but never demanded,
|
|
25595
|
+
* because most installs only ever see day and IR. */
|
|
25573
25596
|
var SCENE_CAPTURE_VARIANTS = ["day", "ir"];
|
|
25574
25597
|
var VARIANT_LABEL = {
|
|
25575
25598
|
day: "Daylight",
|
|
@@ -25582,11 +25605,17 @@ function variantLabel(condition) {
|
|
|
25582
25605
|
return VARIANT_LABEL[condition] ?? condition;
|
|
25583
25606
|
}
|
|
25584
25607
|
/**
|
|
25585
|
-
* "
|
|
25608
|
+
* "Daylight ✓ · Night (IR) ✗ — optional; checks in night (ir) are skipped."
|
|
25586
25609
|
*
|
|
25587
25610
|
* Converts the silent cross-condition fallback this engine used to have into an
|
|
25588
25611
|
* operator-visible fact. Without it, a scene with only a daylight reference
|
|
25589
25612
|
* simply stops answering after sunset and nothing anywhere says why.
|
|
25613
|
+
*
|
|
25614
|
+
* It used to end *"reports 'can't tell' in night (ir)"*, which was accurate and
|
|
25615
|
+
* read as a defect: the operator saw a ✗ and a complaint for a scene that was
|
|
25616
|
+
* configured exactly as they meant it. The missing half is now named as what it
|
|
25617
|
+
* is — the part you do not have to do — and the sentence says what actually
|
|
25618
|
+
* happens instead, which differs by the scene's own policy.
|
|
25590
25619
|
*/
|
|
25591
25620
|
function coverageLine(monitor) {
|
|
25592
25621
|
const covered = new Set(monitor.coveredConditions);
|
|
@@ -25595,10 +25624,26 @@ function coverageLine(monitor) {
|
|
|
25595
25624
|
for (const c of extra) parts.push(`${variantLabel(c)} ✓`);
|
|
25596
25625
|
const missing = SCENE_CAPTURE_VARIANTS.filter((v) => !covered.has(v));
|
|
25597
25626
|
if (missing.length === 0) return parts.join(" · ");
|
|
25598
|
-
return `${parts.join(" · ")} —
|
|
25627
|
+
if (covered.size === 0) return `${parts.join(" · ")} — nothing captured yet, so this scene is not watching.`;
|
|
25628
|
+
const names = missing.map((v) => variantLabel(v).toLowerCase()).join(" and ");
|
|
25629
|
+
return monitor.onUncoveredCondition === "judge-anyway" ? `${parts.join(" · ")} — ${names} judged against the references you do have.` : `${parts.join(" · ")} — optional; checks in ${names} are skipped.`;
|
|
25630
|
+
}
|
|
25631
|
+
/**
|
|
25632
|
+
* The calm sentence for a scene that is sitting the current light out — `null`
|
|
25633
|
+
* whenever it is checking normally.
|
|
25634
|
+
*
|
|
25635
|
+
* Separate from {@link statusLine} because it is not a verdict and must not
|
|
25636
|
+
* read like one. A paused scene has not failed, has not lost its flag, and
|
|
25637
|
+
* needs nothing from the operator; the only thing worth saying is which light
|
|
25638
|
+
* it is waiting out and that it will pick itself back up.
|
|
25639
|
+
*/
|
|
25640
|
+
function suspensionLine(monitor) {
|
|
25641
|
+
if (monitor.suspendedCondition === null) return null;
|
|
25642
|
+
const light = variantLabel(monitor.suspendedCondition).toLowerCase();
|
|
25643
|
+
return `Paused — nothing was captured in ${light}, so checks are on hold until the light changes back. Capture ${light} if you want it watched around the clock.`;
|
|
25599
25644
|
}
|
|
25600
25645
|
var UNAVAILABLE_SENTENCE = {
|
|
25601
|
-
"no-reference-for-condition": "can’t tell — nothing
|
|
25646
|
+
"no-reference-for-condition": "can’t tell — nothing has been captured for this scene yet. Press “Capture daylight” to photograph what normal looks like.",
|
|
25602
25647
|
"view-shifted": "can’t tell — the camera view has moved since the reference was captured. Re-capture it.",
|
|
25603
25648
|
"no-vision-profile": "can’t tell — the vision model is unreachable, so the change is on hold.",
|
|
25604
25649
|
"encoder-model-changed": "can’t tell — the embedding model changed, so the stored references are unreadable. Re-capture them.",
|
|
@@ -25614,10 +25659,17 @@ function statusLine(monitor, now) {
|
|
|
25614
25659
|
const since = monitor.verdict === "diverged" ? monitor.divergedAt : monitor.armedAt;
|
|
25615
25660
|
const held = since !== null ? ` for ${humanDuration(Math.max(0, now - since))}` : "";
|
|
25616
25661
|
if (monitor.latched) return monitor.verdict === "diverged" ? `CHANGED${held} — press Reset when you have dealt with it.` : `Back to normal, but still flagged as changed${held}. Press Reset to clear it.`;
|
|
25662
|
+
const paused = suspensionLine(monitor);
|
|
25663
|
+
if (paused !== null) return paused;
|
|
25617
25664
|
return monitor.verdict === "diverged" ? `CHANGED${held}` : `Normal${held}`;
|
|
25618
25665
|
}
|
|
25619
25666
|
/** The badge word. `latched` wins over `verdict`, because the latch is the
|
|
25620
|
-
* thing the operator asked to be told and it outlives the live state.
|
|
25667
|
+
* thing the operator asked to be told and it outlives the live state.
|
|
25668
|
+
*
|
|
25669
|
+
* A scene sitting out an uncovered light reads `Paused`, in the NEUTRAL tone —
|
|
25670
|
+
* never `alarm`, and never the `danger` variant the page maps that to. A
|
|
25671
|
+
* missing IR reference must not be able to paint a red badge on a scene that
|
|
25672
|
+
* is doing exactly what it was configured to do. */
|
|
25621
25673
|
function badgeFor(monitor) {
|
|
25622
25674
|
if (monitor.states.length === 0) return {
|
|
25623
25675
|
text: "Not armed",
|
|
@@ -25627,6 +25679,10 @@ function badgeFor(monitor) {
|
|
|
25627
25679
|
text: "Changed",
|
|
25628
25680
|
tone: "alarm"
|
|
25629
25681
|
};
|
|
25682
|
+
if (monitor.suspendedCondition !== null) return {
|
|
25683
|
+
text: "Paused",
|
|
25684
|
+
tone: "unknown"
|
|
25685
|
+
};
|
|
25630
25686
|
if (monitor.verdict === "unknown") return {
|
|
25631
25687
|
text: "Can’t tell",
|
|
25632
25688
|
tone: "unknown"
|
|
@@ -48647,7 +48703,7 @@ var MotionZonesSettings = (0, react$1.lazy)(() => Promise.resolve().then(() => r
|
|
|
48647
48703
|
/** Lazy-wrapped `SceneMonitorEditor` — code-split off the main bundle for the
|
|
48648
48704
|
* same reason: it mounts `MaskShapeCanvas`, which chains react-konva. Render
|
|
48649
48705
|
* inside `<Suspense>`; the admin-ui `/scenes` dialog is its only caller. */
|
|
48650
|
-
var SceneMonitorEditor = (0, react$1.lazy)(() => Promise.resolve().then(() => require("./SceneMonitorEditor-
|
|
48706
|
+
var SceneMonitorEditor = (0, react$1.lazy)(() => Promise.resolve().then(() => require("./SceneMonitorEditor-DN2ILWCf.cjs")).then((m) => ({ default: m.SceneMonitorEditor })));
|
|
48651
48707
|
/** Lazy-wrapped `PrivacyMaskSettings` — code-split off the main bundle. */
|
|
48652
48708
|
var PrivacyMaskSettings = (0, react$1.lazy)(() => Promise.resolve().then(() => require("./PrivacyMaskSettings-Oo7gyB4E.cjs")).then((m) => ({ default: m.PrivacyMaskSettings })));
|
|
48653
48709
|
//#endregion
|
|
@@ -48783,6 +48839,7 @@ exports.IconAction = IconAction;
|
|
|
48783
48839
|
exports.IconButton = IconButton;
|
|
48784
48840
|
exports.ImageHeroCard = ImageHeroCard;
|
|
48785
48841
|
exports.ImageInlineControl = ImageInlineControl;
|
|
48842
|
+
exports.ImageOff = ImageOff;
|
|
48786
48843
|
exports.ImageSelector = ImageSelector;
|
|
48787
48844
|
exports.InferenceConfigSelector = InferenceConfigSelector;
|
|
48788
48845
|
exports.Input = Input;
|