@camstack/ui-library 1.2.258 → 1.2.260
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/composites/device-list/index.d.ts +1 -0
- package/dist/composites/index.d.ts +8 -0
- package/dist/composites/node-color.d.ts +4 -0
- package/dist/composites/provider-entries/AddProviderEntryDialog.d.ts +28 -0
- package/dist/composites/provider-entries/ProviderEntryPills.d.ts +19 -0
- package/dist/composites/provider-entries/index.d.ts +2 -0
- package/dist/composites/role-node-pill.d.ts +14 -0
- package/dist/composites/training/TrainingBaseModelPicker.d.ts +30 -0
- package/dist/composites/training/root-detector-placements.d.ts +50 -0
- package/dist/generated/system-hooks.d.ts +8 -20
- package/dist/index.cjs +525 -44
- package/dist/index.js +509 -36
- package/dist/primitives/popover.d.ts +7 -1
- package/package.json +1 -1
- package/src/tailwind/camstack-theme.css +34 -0
package/dist/index.cjs
CHANGED
|
@@ -3885,6 +3885,19 @@ var Phone = createLucideIcon("phone", [["path", {
|
|
|
3885
3885
|
* This source code is licensed under the ISC license.
|
|
3886
3886
|
* See the LICENSE file in the root directory of this source tree.
|
|
3887
3887
|
*/
|
|
3888
|
+
var Pin = createLucideIcon("pin", [["path", {
|
|
3889
|
+
d: "M12 17v5",
|
|
3890
|
+
key: "bb1du9"
|
|
3891
|
+
}], ["path", {
|
|
3892
|
+
d: "M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z",
|
|
3893
|
+
key: "1nkz8b"
|
|
3894
|
+
}]]);
|
|
3895
|
+
/**
|
|
3896
|
+
* @license lucide-react v0.576.0 - ISC
|
|
3897
|
+
*
|
|
3898
|
+
* This source code is licensed under the ISC license.
|
|
3899
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
3900
|
+
*/
|
|
3888
3901
|
var Pipette = createLucideIcon("pipette", [
|
|
3889
3902
|
["path", {
|
|
3890
3903
|
d: "m12 9-8.414 8.414A2 2 0 0 0 3 18.828v1.344a2 2 0 0 1-.586 1.414A2 2 0 0 1 3.828 21h1.344a2 2 0 0 0 1.414-.586L15 12",
|
|
@@ -12366,6 +12379,10 @@ var usePipelineAnalyticsGetTrainingExportSummary = trpc.pipelineAnalytics.getTra
|
|
|
12366
12379
|
var usePipelineAnalyticsGetTrainingExportUrl = trpc.pipelineAnalytics.getTrainingExportUrl.useQuery;
|
|
12367
12380
|
/** Generated alias around `trpc.pipelineAnalytics.listRetrainStaging.useQuery`. */
|
|
12368
12381
|
var usePipelineAnalyticsListRetrainStaging = trpc.pipelineAnalytics.listRetrainStaging.useQuery;
|
|
12382
|
+
/** Generated alias around `trpc.pipelineAnalytics.listRetrainCorpusPage.useQuery`. */
|
|
12383
|
+
var usePipelineAnalyticsListRetrainCorpusPage = trpc.pipelineAnalytics.listRetrainCorpusPage.useQuery;
|
|
12384
|
+
/** Generated alias around `trpc.pipelineAnalytics.getRetrainCorpusKpi.useQuery`. */
|
|
12385
|
+
var usePipelineAnalyticsGetRetrainCorpusKpi = trpc.pipelineAnalytics.getRetrainCorpusKpi.useQuery;
|
|
12369
12386
|
/** Generated alias around `trpc.pipelineAnalytics.listRetrainFrames.useQuery`. */
|
|
12370
12387
|
var usePipelineAnalyticsListRetrainFrames = trpc.pipelineAnalytics.listRetrainFrames.useQuery;
|
|
12371
12388
|
/** Generated alias around `trpc.pipelineAnalytics.selectRetrainFrames.useMutation`. */
|
|
@@ -12392,16 +12409,6 @@ var usePipelineAnalyticsSetRetrainFrameComplete = trpc.pipelineAnalytics.setRetr
|
|
|
12392
12409
|
var usePipelineAnalyticsWriteRetrainArchive = trpc.pipelineAnalytics.writeRetrainArchive.useMutation;
|
|
12393
12410
|
/** Generated alias around `trpc.pipelineAnalytics.offerRetrainArchive.useMutation`. */
|
|
12394
12411
|
var usePipelineAnalyticsOfferRetrainArchive = trpc.pipelineAnalytics.offerRetrainArchive.useMutation;
|
|
12395
|
-
/** Generated alias around `trpc.pipelineAnalytics.previewRetrainDataset.useQuery`. */
|
|
12396
|
-
var usePipelineAnalyticsPreviewRetrainDataset = trpc.pipelineAnalytics.previewRetrainDataset.useQuery;
|
|
12397
|
-
/** Generated alias around `trpc.pipelineAnalytics.createRetrainDatasetVersion.useMutation`. */
|
|
12398
|
-
var usePipelineAnalyticsCreateRetrainDatasetVersion = trpc.pipelineAnalytics.createRetrainDatasetVersion.useMutation;
|
|
12399
|
-
/** Generated alias around `trpc.pipelineAnalytics.listRetrainDatasetVersions.useQuery`. */
|
|
12400
|
-
var usePipelineAnalyticsListRetrainDatasetVersions = trpc.pipelineAnalytics.listRetrainDatasetVersions.useQuery;
|
|
12401
|
-
/** Generated alias around `trpc.pipelineAnalytics.deleteRetrainDatasetVersion.useMutation`. */
|
|
12402
|
-
var usePipelineAnalyticsDeleteRetrainDatasetVersion = trpc.pipelineAnalytics.deleteRetrainDatasetVersion.useMutation;
|
|
12403
|
-
/** Generated alias around `trpc.pipelineAnalytics.verifyRetrainDatasetVersion.useQuery`. */
|
|
12404
|
-
var usePipelineAnalyticsVerifyRetrainDatasetVersion = trpc.pipelineAnalytics.verifyRetrainDatasetVersion.useQuery;
|
|
12405
12412
|
/** Generated alias around `trpc.pipelineAnalytics.listRetrainAssistProfiles.useQuery`. */
|
|
12406
12413
|
var usePipelineAnalyticsListRetrainAssistProfiles = trpc.pipelineAnalytics.listRetrainAssistProfiles.useQuery;
|
|
12407
12414
|
/** Generated alias around `trpc.pipelineAnalytics.proposeRetrainAnnotationsWithLlm.useMutation`. */
|
|
@@ -12410,6 +12417,8 @@ var usePipelineAnalyticsProposeRetrainAnnotationsWithLlm = trpc.pipelineAnalytic
|
|
|
12410
12417
|
var usePipelineAnalyticsCreateRetrainCollection = trpc.pipelineAnalytics.createRetrainCollection.useMutation;
|
|
12411
12418
|
/** Generated alias around `trpc.pipelineAnalytics.listRetrainCollections.useQuery`. */
|
|
12412
12419
|
var usePipelineAnalyticsListRetrainCollections = trpc.pipelineAnalytics.listRetrainCollections.useQuery;
|
|
12420
|
+
/** Generated alias around `trpc.pipelineAnalytics.resolveRetrainTrainingCorpus.useQuery`. */
|
|
12421
|
+
var usePipelineAnalyticsResolveRetrainTrainingCorpus = trpc.pipelineAnalytics.resolveRetrainTrainingCorpus.useQuery;
|
|
12413
12422
|
/** Generated alias around `trpc.pipelineAnalytics.renameRetrainCollection.useMutation`. */
|
|
12414
12423
|
var usePipelineAnalyticsRenameRetrainCollection = trpc.pipelineAnalytics.renameRetrainCollection.useMutation;
|
|
12415
12424
|
/** Generated alias around `trpc.pipelineAnalytics.deleteRetrainCollection.useMutation`. */
|
|
@@ -13176,22 +13185,14 @@ var useTerminalSessionWriteInput = trpc.terminalSession.writeInput.useMutation;
|
|
|
13176
13185
|
var useTerminalSessionClose = trpc.terminalSession.close.useMutation;
|
|
13177
13186
|
/** Generated alias around `trpc.toast.onToast.useSubscription`. */
|
|
13178
13187
|
var useToastOnToast = trpc.toast.onToast.useSubscription;
|
|
13179
|
-
/** Generated alias around `trpc.training.putDatasetVersion.useMutation`. */
|
|
13180
|
-
var useTrainingPutDatasetVersion = trpc.training.putDatasetVersion.useMutation;
|
|
13181
|
-
/** Generated alias around `trpc.training.getDatasetVersion.useQuery`. */
|
|
13182
|
-
var useTrainingGetDatasetVersion = trpc.training.getDatasetVersion.useQuery;
|
|
13183
|
-
/** Generated alias around `trpc.training.listDatasetVersions.useQuery`. */
|
|
13184
|
-
var useTrainingListDatasetVersions = trpc.training.listDatasetVersions.useQuery;
|
|
13185
|
-
/** Generated alias around `trpc.training.findDatasetVersionIdByName.useQuery`. */
|
|
13186
|
-
var useTrainingFindDatasetVersionIdByName = trpc.training.findDatasetVersionIdByName.useQuery;
|
|
13187
|
-
/** Generated alias around `trpc.training.removeDatasetVersion.useMutation`. */
|
|
13188
|
-
var useTrainingRemoveDatasetVersion = trpc.training.removeDatasetVersion.useMutation;
|
|
13189
13188
|
/** Generated alias around `trpc.training.listBaseModels.useQuery`. */
|
|
13190
13189
|
var useTrainingListBaseModels = trpc.training.listBaseModels.useQuery;
|
|
13191
13190
|
/** Generated alias around `trpc.training.planJob.useQuery`. */
|
|
13192
13191
|
var useTrainingPlanJob = trpc.training.planJob.useQuery;
|
|
13193
13192
|
/** Generated alias around `trpc.training.startJob.useMutation`. */
|
|
13194
13193
|
var useTrainingStartJob = trpc.training.startJob.useMutation;
|
|
13194
|
+
/** Generated alias around `trpc.training.startJobBatch.useMutation`. */
|
|
13195
|
+
var useTrainingStartJobBatch = trpc.training.startJobBatch.useMutation;
|
|
13195
13196
|
/** Generated alias around `trpc.training.listJobs.useQuery`. */
|
|
13196
13197
|
var useTrainingListJobs = trpc.training.listJobs.useQuery;
|
|
13197
13198
|
/** Generated alias around `trpc.training.getJob.useQuery`. */
|
|
@@ -25747,7 +25748,7 @@ function DialogTrigger({ children, ...props }) {
|
|
|
25747
25748
|
* whenever they are asymmetric (they are: ~59px top vs ~34px bottom). Every
|
|
25748
25749
|
* term collapses to the previous `100dvh - 2rem` where the insets are 0.
|
|
25749
25750
|
*/
|
|
25750
|
-
var contentVariants = cva("fixed left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 m-0 w-[calc(100vw-2rem)] bg-background-elevated text-foreground border border-border rounded-lg p-4 backdrop:bg-black/50 backdrop:backdrop-blur-sm max-h-[calc(100dvh-2rem-2*max(env(safe-area-inset-top),env(safe-area-inset-bottom)))] [&:not([open])]:hidden", {
|
|
25751
|
+
var contentVariants = cva("relative fixed left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 m-0 w-[calc(100vw-2rem)] bg-background-elevated text-foreground border border-border rounded-lg p-4 backdrop:bg-black/50 backdrop:backdrop-blur-sm max-h-[calc(100dvh-2rem-2*max(env(safe-area-inset-top),env(safe-area-inset-bottom)))] [&:not([open])]:hidden", {
|
|
25751
25752
|
variants: {
|
|
25752
25753
|
width: {
|
|
25753
25754
|
sm: "max-w-sm",
|
|
@@ -25826,7 +25827,7 @@ var DialogContent = (0, react$1.forwardRef)(({ className, width, placement, scro
|
|
|
25826
25827
|
if (open && !el.open) el.showModal();
|
|
25827
25828
|
if (!open && el.open) el.close();
|
|
25828
25829
|
}, [open, dialogRef]);
|
|
25829
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.
|
|
25830
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("dialog", {
|
|
25830
25831
|
ref: dialogRef,
|
|
25831
25832
|
id: contentId,
|
|
25832
25833
|
className: cn(contentVariants({
|
|
@@ -25836,7 +25837,15 @@ var DialogContent = (0, react$1.forwardRef)(({ className, width, placement, scro
|
|
|
25836
25837
|
}), className),
|
|
25837
25838
|
onClose: () => setOpen(false),
|
|
25838
25839
|
...props,
|
|
25839
|
-
children
|
|
25840
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconButton, {
|
|
25841
|
+
type: "button",
|
|
25842
|
+
variant: "ghost",
|
|
25843
|
+
size: "sm",
|
|
25844
|
+
icon: X,
|
|
25845
|
+
"aria-label": "Close",
|
|
25846
|
+
className: "absolute right-4 top-4 z-10 shrink-0",
|
|
25847
|
+
onClick: () => setOpen(false)
|
|
25848
|
+
}), children]
|
|
25840
25849
|
});
|
|
25841
25850
|
});
|
|
25842
25851
|
DialogContent.displayName = "DialogContent";
|
|
@@ -25845,7 +25854,7 @@ DialogContent.displayName = "DialogContent";
|
|
|
25845
25854
|
* ground, or a long form squeezes its own title to nothing. */
|
|
25846
25855
|
function DialogHeader({ className, ...props }) {
|
|
25847
25856
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
25848
|
-
className: cn("flex flex-col gap-1 mb-3 shrink-0", className),
|
|
25857
|
+
className: cn("flex flex-col gap-1 mb-3 shrink-0 pr-10", className),
|
|
25849
25858
|
...props
|
|
25850
25859
|
});
|
|
25851
25860
|
}
|
|
@@ -31824,6 +31833,7 @@ function Popover({ children, open: controlledOpen, onOpenChange }) {
|
|
|
31824
31833
|
const open = controlledOpen ?? uncontrolledOpen;
|
|
31825
31834
|
const triggerId = (0, react$1.useId)();
|
|
31826
31835
|
const contentId = (0, react$1.useId)();
|
|
31836
|
+
const triggerRef = (0, react$1.useRef)(null);
|
|
31827
31837
|
const setOpen = (0, react$1.useCallback)((next) => {
|
|
31828
31838
|
onOpenChange?.(next);
|
|
31829
31839
|
if (controlledOpen === void 0) setUncontrolledOpen(next);
|
|
@@ -31833,7 +31843,8 @@ function Popover({ children, open: controlledOpen, onOpenChange }) {
|
|
|
31833
31843
|
open,
|
|
31834
31844
|
setOpen,
|
|
31835
31845
|
triggerId,
|
|
31836
|
-
contentId
|
|
31846
|
+
contentId,
|
|
31847
|
+
triggerRef
|
|
31837
31848
|
},
|
|
31838
31849
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
31839
31850
|
className: "relative inline-block",
|
|
@@ -31842,9 +31853,10 @@ function Popover({ children, open: controlledOpen, onOpenChange }) {
|
|
|
31842
31853
|
});
|
|
31843
31854
|
}
|
|
31844
31855
|
function PopoverTrigger({ children, ...props }) {
|
|
31845
|
-
const { open, setOpen, triggerId, contentId } = usePopoverContext();
|
|
31856
|
+
const { open, setOpen, triggerId, contentId, triggerRef } = usePopoverContext();
|
|
31846
31857
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
31847
31858
|
type: "button",
|
|
31859
|
+
ref: triggerRef,
|
|
31848
31860
|
id: triggerId,
|
|
31849
31861
|
"aria-haspopup": "dialog",
|
|
31850
31862
|
"aria-expanded": open,
|
|
@@ -31854,15 +31866,46 @@ function PopoverTrigger({ children, ...props }) {
|
|
|
31854
31866
|
children
|
|
31855
31867
|
});
|
|
31856
31868
|
}
|
|
31857
|
-
function PopoverContent({ className, children, ...props }) {
|
|
31858
|
-
const { open, setOpen, contentId, triggerId } = usePopoverContext();
|
|
31869
|
+
function PopoverContent({ className, children, align = "start", offset = 4, ...props }) {
|
|
31870
|
+
const { open, setOpen, contentId, triggerId, triggerRef } = usePopoverContext();
|
|
31859
31871
|
const isMobile = useIsMobile();
|
|
31860
31872
|
const ref = (0, react$1.useRef)(null);
|
|
31873
|
+
const [coords, setCoords] = (0, react$1.useState)(null);
|
|
31874
|
+
(0, react$1.useLayoutEffect)(() => {
|
|
31875
|
+
if (!open || isMobile) {
|
|
31876
|
+
setCoords(null);
|
|
31877
|
+
return;
|
|
31878
|
+
}
|
|
31879
|
+
const compute = () => {
|
|
31880
|
+
const trigger = triggerRef.current;
|
|
31881
|
+
if (!trigger) return;
|
|
31882
|
+
const rect = trigger.getBoundingClientRect();
|
|
31883
|
+
const left = align === "end" ? rect.right : rect.left;
|
|
31884
|
+
setCoords({
|
|
31885
|
+
top: rect.bottom + offset,
|
|
31886
|
+
left,
|
|
31887
|
+
minWidth: rect.width
|
|
31888
|
+
});
|
|
31889
|
+
};
|
|
31890
|
+
compute();
|
|
31891
|
+
window.addEventListener("resize", compute);
|
|
31892
|
+
window.addEventListener("scroll", compute, true);
|
|
31893
|
+
return () => {
|
|
31894
|
+
window.removeEventListener("resize", compute);
|
|
31895
|
+
window.removeEventListener("scroll", compute, true);
|
|
31896
|
+
};
|
|
31897
|
+
}, [
|
|
31898
|
+
open,
|
|
31899
|
+
isMobile,
|
|
31900
|
+
align,
|
|
31901
|
+
offset,
|
|
31902
|
+
triggerRef
|
|
31903
|
+
]);
|
|
31861
31904
|
(0, react$1.useEffect)(() => {
|
|
31862
31905
|
if (!open || isMobile) return;
|
|
31863
31906
|
const handler = (e) => {
|
|
31864
31907
|
const el = ref.current;
|
|
31865
|
-
const trigger =
|
|
31908
|
+
const trigger = triggerRef.current;
|
|
31866
31909
|
if (el && !el.contains(e.target) && !trigger?.contains(e.target)) setOpen(false);
|
|
31867
31910
|
};
|
|
31868
31911
|
const escHandler = (e) => {
|
|
@@ -31877,7 +31920,7 @@ function PopoverContent({ className, children, ...props }) {
|
|
|
31877
31920
|
}, [
|
|
31878
31921
|
open,
|
|
31879
31922
|
setOpen,
|
|
31880
|
-
|
|
31923
|
+
triggerRef,
|
|
31881
31924
|
isMobile
|
|
31882
31925
|
]);
|
|
31883
31926
|
if (!open) return null;
|
|
@@ -31886,15 +31929,22 @@ function PopoverContent({ className, children, ...props }) {
|
|
|
31886
31929
|
onClose: () => setOpen(false),
|
|
31887
31930
|
children
|
|
31888
31931
|
});
|
|
31889
|
-
|
|
31932
|
+
if (!coords || typeof document === "undefined") return null;
|
|
31933
|
+
return (0, react_dom.createPortal)(/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
31890
31934
|
ref,
|
|
31891
31935
|
id: contentId,
|
|
31892
31936
|
role: "dialog",
|
|
31893
31937
|
"aria-labelledby": triggerId,
|
|
31894
|
-
|
|
31938
|
+
style: {
|
|
31939
|
+
position: "fixed",
|
|
31940
|
+
top: coords.top,
|
|
31941
|
+
...align === "end" ? { right: window.innerWidth - coords.left } : { left: coords.left },
|
|
31942
|
+
minWidth: coords.minWidth
|
|
31943
|
+
},
|
|
31944
|
+
className: cn("z-50 bg-background-elevated border border-border rounded-lg shadow-lg p-3", className),
|
|
31895
31945
|
...props,
|
|
31896
31946
|
children
|
|
31897
|
-
});
|
|
31947
|
+
}), document.body);
|
|
31898
31948
|
}
|
|
31899
31949
|
//#endregion
|
|
31900
31950
|
//#region src/primitives/tabs.tsx
|
|
@@ -32702,6 +32752,90 @@ function NetworkLinkBadge({ status, className }) {
|
|
|
32702
32752
|
});
|
|
32703
32753
|
}
|
|
32704
32754
|
//#endregion
|
|
32755
|
+
//#region src/composites/node-color.ts
|
|
32756
|
+
/** Full class strings so Tailwind v4 JIT retains every node palette utility. */
|
|
32757
|
+
var NODE_BG_CLASS = {
|
|
32758
|
+
"node-a": "bg-node-a",
|
|
32759
|
+
"node-b": "bg-node-b",
|
|
32760
|
+
"node-c": "bg-node-c",
|
|
32761
|
+
"node-d": "bg-node-d",
|
|
32762
|
+
"node-e": "bg-node-e",
|
|
32763
|
+
"node-f": "bg-node-f",
|
|
32764
|
+
"node-g": "bg-node-g",
|
|
32765
|
+
"node-h": "bg-node-h"
|
|
32766
|
+
};
|
|
32767
|
+
var NODE_TEXT_CLASS = {
|
|
32768
|
+
"node-a": "text-node-a",
|
|
32769
|
+
"node-b": "text-node-b",
|
|
32770
|
+
"node-c": "text-node-c",
|
|
32771
|
+
"node-d": "text-node-d",
|
|
32772
|
+
"node-e": "text-node-e",
|
|
32773
|
+
"node-f": "text-node-f",
|
|
32774
|
+
"node-g": "text-node-g",
|
|
32775
|
+
"node-h": "text-node-h"
|
|
32776
|
+
};
|
|
32777
|
+
function nodeColorClass(id) {
|
|
32778
|
+
return NODE_BG_CLASS[id];
|
|
32779
|
+
}
|
|
32780
|
+
function nodeTextColorClass(id) {
|
|
32781
|
+
return NODE_TEXT_CLASS[id];
|
|
32782
|
+
}
|
|
32783
|
+
//#endregion
|
|
32784
|
+
//#region src/composites/role-node-pill.tsx
|
|
32785
|
+
/** Full class strings so Tailwind v4 JIT retains node palette opacity utilities. */
|
|
32786
|
+
var NODE_BG_SOFT_CLASS = {
|
|
32787
|
+
"node-a": "bg-node-a/12",
|
|
32788
|
+
"node-b": "bg-node-b/12",
|
|
32789
|
+
"node-c": "bg-node-c/12",
|
|
32790
|
+
"node-d": "bg-node-d/12",
|
|
32791
|
+
"node-e": "bg-node-e/12",
|
|
32792
|
+
"node-f": "bg-node-f/12",
|
|
32793
|
+
"node-g": "bg-node-g/12",
|
|
32794
|
+
"node-h": "bg-node-h/12"
|
|
32795
|
+
};
|
|
32796
|
+
var NODE_BG_EMPHASIZED_CLASS = {
|
|
32797
|
+
"node-a": "bg-node-a/22",
|
|
32798
|
+
"node-b": "bg-node-b/22",
|
|
32799
|
+
"node-c": "bg-node-c/22",
|
|
32800
|
+
"node-d": "bg-node-d/22",
|
|
32801
|
+
"node-e": "bg-node-e/22",
|
|
32802
|
+
"node-f": "bg-node-f/22",
|
|
32803
|
+
"node-g": "bg-node-g/22",
|
|
32804
|
+
"node-h": "bg-node-h/22"
|
|
32805
|
+
};
|
|
32806
|
+
var NODE_RING_CLASS = {
|
|
32807
|
+
"node-a": "ring-node-a/45",
|
|
32808
|
+
"node-b": "ring-node-b/45",
|
|
32809
|
+
"node-c": "ring-node-c/45",
|
|
32810
|
+
"node-d": "ring-node-d/45",
|
|
32811
|
+
"node-e": "ring-node-e/45",
|
|
32812
|
+
"node-f": "ring-node-f/45",
|
|
32813
|
+
"node-g": "ring-node-g/45",
|
|
32814
|
+
"node-h": "ring-node-h/45"
|
|
32815
|
+
};
|
|
32816
|
+
function RoleNodePill({ roleLabel, nodeName, colorId, emphasized = false, pinned = false }) {
|
|
32817
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
32818
|
+
"data-testid": "role-node-pill",
|
|
32819
|
+
title: pinned ? `${roleLabel} pinned on ${nodeName}` : `${roleLabel} on ${nodeName}`,
|
|
32820
|
+
className: cn("inline-flex max-w-full items-center gap-1 rounded-full px-2 py-0.5 text-[10px] leading-tight ring-1 ring-inset", emphasized ? cn("role-node-pill-emphasized font-semibold ring-2", NODE_BG_EMPHASIZED_CLASS[colorId], NODE_RING_CLASS[colorId], nodeTextColorClass(colorId)) : cn("font-medium text-foreground-muted ring-border/60", NODE_BG_SOFT_CLASS[colorId])),
|
|
32821
|
+
children: [
|
|
32822
|
+
pinned && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Pin, {
|
|
32823
|
+
className: "h-2.5 w-2.5 shrink-0 opacity-80",
|
|
32824
|
+
"aria-label": "pinned"
|
|
32825
|
+
}),
|
|
32826
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
32827
|
+
className: "shrink-0",
|
|
32828
|
+
children: roleLabel
|
|
32829
|
+
}),
|
|
32830
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
32831
|
+
className: cn("min-w-0 truncate", emphasized ? nodeTextColorClass(colorId) : "text-foreground-subtle"),
|
|
32832
|
+
children: nodeName
|
|
32833
|
+
}),
|
|
32834
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: cn("h-1.5 w-1.5 shrink-0 rounded-full", nodeColorClass(colorId)) })
|
|
32835
|
+
]
|
|
32836
|
+
});
|
|
32837
|
+
}
|
|
32838
|
+
//#endregion
|
|
32705
32839
|
//#region src/composites/breadcrumb.tsx
|
|
32706
32840
|
/**
|
|
32707
32841
|
* Breadcrumb navigation component.
|
|
@@ -37639,6 +37773,141 @@ function HubSessionTestCard({ trpc, serverUrl, deviceId, cameraField, runMs = HU
|
|
|
37639
37773
|
});
|
|
37640
37774
|
}
|
|
37641
37775
|
//#endregion
|
|
37776
|
+
//#region src/composites/training/root-detector-placements.ts
|
|
37777
|
+
/**
|
|
37778
|
+
* Pure mapper: per-node inference devices → placements of each effective root
|
|
37779
|
+
* detector model. Training's base-model picker lists every `node · device`
|
|
37780
|
+
* where a trainable base is the cluster's object-detection root.
|
|
37781
|
+
*
|
|
37782
|
+
* Mirrors Model Studio's `acceleratorsRunningModel` decision (effective model
|
|
37783
|
+
* via {@link resolveEffectiveStepModel}) but aggregates across nodes and does
|
|
37784
|
+
* not gate on on-disk currency — "in use" here means the root the node would
|
|
37785
|
+
* run. ui-library must not import addon-model-studio; a sync guard can later
|
|
37786
|
+
* hold the two pure paths equal.
|
|
37787
|
+
*/
|
|
37788
|
+
/** Root detection step — the only step whose models are trainable bases. */
|
|
37789
|
+
var ROOT_DETECTOR_STEP_ID = "object-detection";
|
|
37790
|
+
function comparePlacement(a, b) {
|
|
37791
|
+
const byNode = a.nodeId.localeCompare(b.nodeId);
|
|
37792
|
+
if (byNode !== 0) return byNode;
|
|
37793
|
+
const byLabel = a.label.localeCompare(b.label);
|
|
37794
|
+
if (byLabel !== 0) return byLabel;
|
|
37795
|
+
return a.deviceKey.localeCompare(b.deviceKey);
|
|
37796
|
+
}
|
|
37797
|
+
/**
|
|
37798
|
+
* For each modelId that is the effective root on at least one enabled device,
|
|
37799
|
+
* the full list of placements (sorted by node, then device label).
|
|
37800
|
+
*/
|
|
37801
|
+
function mapRootDetectorPlacements(nodes, stepId = ROOT_DETECTOR_STEP_ID) {
|
|
37802
|
+
const buckets = /* @__PURE__ */ new Map();
|
|
37803
|
+
for (const node of nodes) for (const device of node.devices) {
|
|
37804
|
+
if (!device.enabled) continue;
|
|
37805
|
+
if (!stepHasModelForFormat(node.catalog.models, device.format)) continue;
|
|
37806
|
+
const effective = resolveEffectiveStepModel({
|
|
37807
|
+
catalog: node.catalog,
|
|
37808
|
+
device,
|
|
37809
|
+
base: device.steps?.[stepId]?.modelId
|
|
37810
|
+
});
|
|
37811
|
+
if (effective === void 0) continue;
|
|
37812
|
+
const list = buckets.get(effective) ?? [];
|
|
37813
|
+
list.push({
|
|
37814
|
+
nodeId: node.nodeId,
|
|
37815
|
+
deviceKey: device.key,
|
|
37816
|
+
label: acceleratorShortLabel(device)
|
|
37817
|
+
});
|
|
37818
|
+
buckets.set(effective, list);
|
|
37819
|
+
}
|
|
37820
|
+
const out = /* @__PURE__ */ new Map();
|
|
37821
|
+
for (const [modelId, list] of buckets) out.set(modelId, [...list].toSorted(comparePlacement));
|
|
37822
|
+
return out;
|
|
37823
|
+
}
|
|
37824
|
+
/** Model ids that appear as an effective root somewhere in the cluster. */
|
|
37825
|
+
function clusterRootModelIds(placements) {
|
|
37826
|
+
return [...placements.keys()].toSorted((a, b) => a.localeCompare(b));
|
|
37827
|
+
}
|
|
37828
|
+
/**
|
|
37829
|
+
* Intersection of listed trainable models and cluster root detectors — the
|
|
37830
|
+
* Select-all-roots action. Order follows `trainableModelIds`.
|
|
37831
|
+
*/
|
|
37832
|
+
function defaultSelectClusterRoots(trainableModelIds, clusterRootIds) {
|
|
37833
|
+
const roots = new Set(clusterRootIds);
|
|
37834
|
+
return trainableModelIds.filter((id) => roots.has(id));
|
|
37835
|
+
}
|
|
37836
|
+
//#endregion
|
|
37837
|
+
//#region src/composites/training/TrainingBaseModelPicker.tsx
|
|
37838
|
+
var EMPTY_PLACEMENTS = "Not in use on any node";
|
|
37839
|
+
function placementLine(placement) {
|
|
37840
|
+
return `${placement.nodeId} · ${placement.label}`;
|
|
37841
|
+
}
|
|
37842
|
+
function toggleModel(selected, modelId, checked) {
|
|
37843
|
+
if (checked) {
|
|
37844
|
+
if (selected.includes(modelId)) return selected;
|
|
37845
|
+
return [...selected, modelId];
|
|
37846
|
+
}
|
|
37847
|
+
return selected.filter((id) => id !== modelId);
|
|
37848
|
+
}
|
|
37849
|
+
/**
|
|
37850
|
+
* Multi-select of trainable base models with full multi-placement listing and
|
|
37851
|
+
* Select-all-roots / Clear over cluster root detectors.
|
|
37852
|
+
*/
|
|
37853
|
+
function TrainingBaseModelPicker({ models, clusterRootModelIds, value, onChange, disabled = false }) {
|
|
37854
|
+
const selected = new Set(value);
|
|
37855
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
37856
|
+
className: "space-y-2",
|
|
37857
|
+
"data-testid": "training-base-model-picker",
|
|
37858
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
37859
|
+
className: "flex flex-wrap items-center gap-1.5",
|
|
37860
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(Button, {
|
|
37861
|
+
type: "button",
|
|
37862
|
+
variant: "secondary",
|
|
37863
|
+
size: "sm",
|
|
37864
|
+
disabled,
|
|
37865
|
+
onClick: () => onChange(defaultSelectClusterRoots(models.map((m) => m.modelId), clusterRootModelIds)),
|
|
37866
|
+
children: "Select all roots"
|
|
37867
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Button, {
|
|
37868
|
+
type: "button",
|
|
37869
|
+
variant: "ghost",
|
|
37870
|
+
size: "sm",
|
|
37871
|
+
disabled: disabled || value.length === 0,
|
|
37872
|
+
onClick: () => onChange([]),
|
|
37873
|
+
children: "Clear"
|
|
37874
|
+
})]
|
|
37875
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("ul", {
|
|
37876
|
+
className: "divide-y divide-border-subtle rounded-md border border-border bg-surface",
|
|
37877
|
+
children: models.map((model) => {
|
|
37878
|
+
const checked = selected.has(model.modelId);
|
|
37879
|
+
const label = model.recommended ? `${model.label} (recommended)` : model.label;
|
|
37880
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", {
|
|
37881
|
+
className: "px-2 py-2 sm:px-3",
|
|
37882
|
+
"data-testid": `training-base-model-${model.modelId}`,
|
|
37883
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
37884
|
+
className: "flex min-w-0 cursor-pointer items-start gap-2",
|
|
37885
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(Checkbox, {
|
|
37886
|
+
className: "mt-0.5",
|
|
37887
|
+
checked,
|
|
37888
|
+
disabled,
|
|
37889
|
+
"aria-label": model.label,
|
|
37890
|
+
onChange: (event) => onChange(toggleModel(value, model.modelId, event.target.checked))
|
|
37891
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
37892
|
+
className: "min-w-0 flex-1 space-y-1",
|
|
37893
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
37894
|
+
className: "block text-sm text-foreground",
|
|
37895
|
+
children: label
|
|
37896
|
+
}), model.placements.length === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
37897
|
+
className: cn(TEXT_HINT, "block"),
|
|
37898
|
+
children: EMPTY_PLACEMENTS
|
|
37899
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
37900
|
+
className: cn(TEXT_HINT, "flex flex-wrap gap-x-2 gap-y-0.5"),
|
|
37901
|
+
children: model.placements.map((p) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: placementLine(p) }, `${p.nodeId}:${p.deviceKey}`))
|
|
37902
|
+
})]
|
|
37903
|
+
})]
|
|
37904
|
+
})
|
|
37905
|
+
}, model.modelId);
|
|
37906
|
+
})
|
|
37907
|
+
})]
|
|
37908
|
+
});
|
|
37909
|
+
}
|
|
37910
|
+
//#endregion
|
|
37642
37911
|
//#region src/composites/cap-settings/scene-monitor-copy.ts
|
|
37643
37912
|
/** The lighting variants an operator is OFFERED. The resolver can also report
|
|
37644
37913
|
* `night`, `dawn` and `dusk`; those are shown when present but never demanded,
|
|
@@ -40324,6 +40593,7 @@ function LogStream({ agentId: propsAgentId, addonId: propsAddonId, deviceId: pro
|
|
|
40324
40593
|
type: "button",
|
|
40325
40594
|
onClick: onClose,
|
|
40326
40595
|
className: "text-foreground-subtle hover:text-foreground",
|
|
40596
|
+
"aria-label": "Close",
|
|
40327
40597
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(X, { className: "h-3.5 w-3.5" })
|
|
40328
40598
|
})]
|
|
40329
40599
|
}),
|
|
@@ -57626,7 +57896,8 @@ function KebabMenu({ items, header, triggerClassName, title = "More actions" })
|
|
|
57626
57896
|
className: cn("inline-flex items-center justify-center rounded-lg p-2", "text-foreground-subtle hover:text-foreground hover:bg-surface-hover", "border border-transparent transition-colors", triggerClassName),
|
|
57627
57897
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(EllipsisVertical, { className: "h-4 w-4" })
|
|
57628
57898
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(PopoverContent, {
|
|
57629
|
-
|
|
57899
|
+
align: "end",
|
|
57900
|
+
className: "min-w-[200px] p-1",
|
|
57630
57901
|
children: [header && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
57631
57902
|
className: "px-2 py-1 text-[10px] uppercase tracking-wider text-foreground-subtle",
|
|
57632
57903
|
children: header
|
|
@@ -58115,6 +58386,208 @@ function ProviderBadge({ provider, showLabel = true, className }) {
|
|
|
58115
58386
|
});
|
|
58116
58387
|
}
|
|
58117
58388
|
//#endregion
|
|
58389
|
+
//#region src/composites/provider-entries/AddProviderEntryDialog.tsx
|
|
58390
|
+
/**
|
|
58391
|
+
* AddProviderEntryDialog — create one credential entry for a provider type.
|
|
58392
|
+
*
|
|
58393
|
+
* The host supplies the creatable types (`describeTypes`); the dialog never
|
|
58394
|
+
* invents them. Submit hands `{ typeId, name }` to `onCreate` — credentials
|
|
58395
|
+
* and settings live on the entry body after create (Task 11).
|
|
58396
|
+
*/
|
|
58397
|
+
function AddProviderEntryDialog({ open, onOpenChange, types, onCreate, submitting = false, title = "Add provider entry", description = "Pick a provider type and name this credential set." }) {
|
|
58398
|
+
const typeFieldId = (0, react$1.useId)();
|
|
58399
|
+
const nameFieldId = (0, react$1.useId)();
|
|
58400
|
+
const [typeId, setTypeId] = (0, react$1.useState)("");
|
|
58401
|
+
const [name, setName] = (0, react$1.useState)("");
|
|
58402
|
+
(0, react$1.useEffect)(() => {
|
|
58403
|
+
if (!open) return;
|
|
58404
|
+
setTypeId(types[0]?.typeId ?? "");
|
|
58405
|
+
setName("");
|
|
58406
|
+
}, [open, types]);
|
|
58407
|
+
const canSubmit = typeId !== "" && name.trim().length > 0 && !submitting && types.length > 0;
|
|
58408
|
+
const handleSubmit = () => {
|
|
58409
|
+
if (!canSubmit) return;
|
|
58410
|
+
onCreate({
|
|
58411
|
+
typeId,
|
|
58412
|
+
name: name.trim()
|
|
58413
|
+
});
|
|
58414
|
+
};
|
|
58415
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Dialog, {
|
|
58416
|
+
open,
|
|
58417
|
+
onOpenChange: (next) => !submitting && onOpenChange(next),
|
|
58418
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(DialogContent, {
|
|
58419
|
+
width: "sm",
|
|
58420
|
+
placement: "sheet-on-mobile",
|
|
58421
|
+
scroll: "body",
|
|
58422
|
+
children: [
|
|
58423
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(DialogHeader, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(DialogTitle, { children: title }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DialogDescription, { children: description })] }),
|
|
58424
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(DialogBody, {
|
|
58425
|
+
className: "space-y-3",
|
|
58426
|
+
children: types.length === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
58427
|
+
className: "text-xs text-foreground-subtle",
|
|
58428
|
+
children: "No provider types are available yet. Install a training provider addon first."
|
|
58429
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
58430
|
+
className: "space-y-1",
|
|
58431
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(Label, {
|
|
58432
|
+
htmlFor: typeFieldId,
|
|
58433
|
+
children: "Provider type"
|
|
58434
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
58435
|
+
className: "flex items-center gap-2",
|
|
58436
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(TypeIcon, { url: types.find((t) => t.typeId === typeId)?.iconUrl ?? null }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Select, {
|
|
58437
|
+
id: typeFieldId,
|
|
58438
|
+
"aria-label": "Provider type",
|
|
58439
|
+
className: "flex-1",
|
|
58440
|
+
value: typeId,
|
|
58441
|
+
onChange: (event) => setTypeId(event.target.value),
|
|
58442
|
+
options: types.map((t) => ({
|
|
58443
|
+
value: t.typeId,
|
|
58444
|
+
label: t.label
|
|
58445
|
+
})),
|
|
58446
|
+
disabled: submitting
|
|
58447
|
+
})]
|
|
58448
|
+
})]
|
|
58449
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
58450
|
+
className: "space-y-1",
|
|
58451
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(Label, {
|
|
58452
|
+
htmlFor: nameFieldId,
|
|
58453
|
+
children: "Name"
|
|
58454
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Input, {
|
|
58455
|
+
id: nameFieldId,
|
|
58456
|
+
"aria-label": "Name",
|
|
58457
|
+
value: name,
|
|
58458
|
+
onChange: (event) => setName(event.target.value),
|
|
58459
|
+
placeholder: "Production",
|
|
58460
|
+
disabled: submitting,
|
|
58461
|
+
onKeyDown: (event) => {
|
|
58462
|
+
if (event.key === "Enter") {
|
|
58463
|
+
event.preventDefault();
|
|
58464
|
+
handleSubmit();
|
|
58465
|
+
}
|
|
58466
|
+
}
|
|
58467
|
+
})]
|
|
58468
|
+
})] })
|
|
58469
|
+
}),
|
|
58470
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(DialogFooter, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(Button, {
|
|
58471
|
+
type: "button",
|
|
58472
|
+
variant: "ghost",
|
|
58473
|
+
size: "sm",
|
|
58474
|
+
disabled: submitting,
|
|
58475
|
+
onClick: () => onOpenChange(false),
|
|
58476
|
+
children: "Cancel"
|
|
58477
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(Button, {
|
|
58478
|
+
type: "button",
|
|
58479
|
+
size: "sm",
|
|
58480
|
+
disabled: !canSubmit,
|
|
58481
|
+
onClick: handleSubmit,
|
|
58482
|
+
children: [submitting && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(LoaderCircle, {
|
|
58483
|
+
className: "h-3.5 w-3.5 animate-spin",
|
|
58484
|
+
"aria-hidden": true
|
|
58485
|
+
}), "Create"]
|
|
58486
|
+
})] })
|
|
58487
|
+
]
|
|
58488
|
+
})
|
|
58489
|
+
});
|
|
58490
|
+
}
|
|
58491
|
+
function TypeIcon({ url }) {
|
|
58492
|
+
if (url === null) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
58493
|
+
className: cn("inline-flex h-7 w-7 shrink-0 items-center justify-center rounded-md", "border border-border bg-surface text-[10px] text-foreground-subtle"),
|
|
58494
|
+
"aria-hidden": true,
|
|
58495
|
+
children: "?"
|
|
58496
|
+
});
|
|
58497
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("img", {
|
|
58498
|
+
src: url,
|
|
58499
|
+
alt: "",
|
|
58500
|
+
className: "h-7 w-7 shrink-0 rounded-md border border-border bg-surface object-contain p-0.5"
|
|
58501
|
+
});
|
|
58502
|
+
}
|
|
58503
|
+
//#endregion
|
|
58504
|
+
//#region src/composites/provider-entries/ProviderEntryPills.tsx
|
|
58505
|
+
/**
|
|
58506
|
+
* ProviderEntryPills — one pill per credential entry (never a bare type).
|
|
58507
|
+
*
|
|
58508
|
+
* Visual language echoes the admin IntegrationHub strip: icon + name + status
|
|
58509
|
+
* dot, wrapping at every width. Selection is a button callback — the host
|
|
58510
|
+
* owns the URL (`?entry=`). Add is optional; when present it is a dashed
|
|
58511
|
+
* trailing control that opens the host's create dialog.
|
|
58512
|
+
*/
|
|
58513
|
+
var PILL_BASE = cn(CHIP_BASE, "min-w-0 max-w-full gap-1.5 py-1 pl-1 pr-2.5 text-xs font-normal", "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40");
|
|
58514
|
+
var PILL_CURRENT = cn(CHIP_ACTIVE, "font-medium");
|
|
58515
|
+
var PILL_OTHER = CHIP_INACTIVE;
|
|
58516
|
+
var STATE_DOT = {
|
|
58517
|
+
ok: "bg-success",
|
|
58518
|
+
warning: "bg-warning",
|
|
58519
|
+
error: "bg-danger",
|
|
58520
|
+
unknown: "border border-foreground-subtle bg-transparent"
|
|
58521
|
+
};
|
|
58522
|
+
var STATE_LABEL = {
|
|
58523
|
+
ok: "OK",
|
|
58524
|
+
warning: "Warning",
|
|
58525
|
+
error: "Error",
|
|
58526
|
+
unknown: "Unknown"
|
|
58527
|
+
};
|
|
58528
|
+
function ProviderEntryPills({ label, entries, selectedEntryId, onSelect, onAdd, addLabel = "Add provider" }) {
|
|
58529
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("nav", {
|
|
58530
|
+
"aria-label": label,
|
|
58531
|
+
className: "min-w-0",
|
|
58532
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
58533
|
+
className: "flex min-w-0 flex-wrap items-center gap-1.5",
|
|
58534
|
+
children: [entries.map((entry) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(EntryPill, {
|
|
58535
|
+
entry,
|
|
58536
|
+
current: entry.entryId === selectedEntryId,
|
|
58537
|
+
onSelect
|
|
58538
|
+
}, entry.entryId)), onAdd !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
58539
|
+
type: "button",
|
|
58540
|
+
onClick: onAdd,
|
|
58541
|
+
className: cn(PILL_BASE, "border-dashed border-border pl-2 text-foreground-subtle", "hover:border-primary/50 hover:text-foreground"),
|
|
58542
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(Plus, {
|
|
58543
|
+
className: "h-3.5 w-3.5 shrink-0",
|
|
58544
|
+
"aria-hidden": true
|
|
58545
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
58546
|
+
className: "truncate",
|
|
58547
|
+
children: addLabel
|
|
58548
|
+
})]
|
|
58549
|
+
})]
|
|
58550
|
+
})
|
|
58551
|
+
});
|
|
58552
|
+
}
|
|
58553
|
+
function EntryPill({ entry, current, onSelect }) {
|
|
58554
|
+
const quiet = entry.status === "ok";
|
|
58555
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
58556
|
+
type: "button",
|
|
58557
|
+
"aria-current": current ? "true" : void 0,
|
|
58558
|
+
"data-testid": `provider-entry-pill-${entry.entryId}`,
|
|
58559
|
+
onClick: () => onSelect(entry.entryId),
|
|
58560
|
+
className: cn(PILL_BASE, current ? PILL_CURRENT : PILL_OTHER),
|
|
58561
|
+
children: [
|
|
58562
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(EntryIcon, { url: entry.iconUrl }),
|
|
58563
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
58564
|
+
className: "truncate",
|
|
58565
|
+
children: entry.name
|
|
58566
|
+
}),
|
|
58567
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
58568
|
+
className: cn("h-1.5 w-1.5 shrink-0 rounded-full", STATE_DOT[entry.status]),
|
|
58569
|
+
"aria-hidden": true
|
|
58570
|
+
}),
|
|
58571
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
58572
|
+
className: quiet ? "sr-only" : "shrink-0 text-[10px] font-normal text-foreground-subtle",
|
|
58573
|
+
children: STATE_LABEL[entry.status]
|
|
58574
|
+
})
|
|
58575
|
+
]
|
|
58576
|
+
});
|
|
58577
|
+
}
|
|
58578
|
+
function EntryIcon({ url }) {
|
|
58579
|
+
if (url === null) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
58580
|
+
className: "inline-flex h-5 w-5 shrink-0 items-center justify-center rounded-full bg-surface text-[9px] text-foreground-subtle",
|
|
58581
|
+
"aria-hidden": true,
|
|
58582
|
+
children: "?"
|
|
58583
|
+
});
|
|
58584
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("img", {
|
|
58585
|
+
src: url,
|
|
58586
|
+
alt: "",
|
|
58587
|
+
className: "h-5 w-5 shrink-0 rounded-full object-contain"
|
|
58588
|
+
});
|
|
58589
|
+
}
|
|
58590
|
+
//#endregion
|
|
58118
58591
|
//#region src/composites/response-log.tsx
|
|
58119
58592
|
/**
|
|
58120
58593
|
* Expandable log box showing the raw JSON response from a pipeline run.
|
|
@@ -62069,6 +62542,7 @@ var SceneMonitorEditor = (0, react$1.lazy)(() => Promise.resolve().then(() => re
|
|
|
62069
62542
|
/** Lazy-wrapped `PrivacyMaskSettings` — code-split off the main bundle. */
|
|
62070
62543
|
var PrivacyMaskSettings = (0, react$1.lazy)(() => Promise.resolve().then(() => require("./PrivacyMaskSettings-BqjXsXZR.cjs")).then((m) => ({ default: m.PrivacyMaskSettings })));
|
|
62071
62544
|
//#endregion
|
|
62545
|
+
exports.AddProviderEntryDialog = AddProviderEntryDialog;
|
|
62072
62546
|
exports.AddonGlobalSettingsForm = AddonGlobalSettingsForm;
|
|
62073
62547
|
exports.AdminLinkQuickAction = AdminLinkQuickAction;
|
|
62074
62548
|
exports.AgentStepEditor = AgentStepEditor;
|
|
@@ -62260,6 +62734,7 @@ exports.MobileDrawer = MobileDrawer;
|
|
|
62260
62734
|
exports.ModelPicker = ModelPicker;
|
|
62261
62735
|
exports.MotionZonesSettings = MotionZonesSettings;
|
|
62262
62736
|
exports.NAVIGATION_DRIVE_INTERVAL_MS = NAVIGATION_DRIVE_INTERVAL_MS;
|
|
62737
|
+
exports.NODE_COLOR_IDS = _camstack_types.NODE_COLOR_IDS;
|
|
62263
62738
|
exports.NatResultCard = NatResultCard;
|
|
62264
62739
|
exports.NavigationPanel = NavigationPanel;
|
|
62265
62740
|
exports.NetworkLinkBadge = NetworkLinkBadge;
|
|
@@ -62287,6 +62762,7 @@ exports.PRIORITY = PRIORITY;
|
|
|
62287
62762
|
exports.PTZOverlay = PTZOverlay;
|
|
62288
62763
|
exports.PageHeader = PageHeader;
|
|
62289
62764
|
exports.PageSizeSelect = PageSizeSelect;
|
|
62765
|
+
exports.Pagination = Pagination;
|
|
62290
62766
|
exports.PasswordInput = PasswordInput;
|
|
62291
62767
|
exports.PhaseIcon = PhaseIcon;
|
|
62292
62768
|
exports.PipelineBuilder = PipelineBuilder;
|
|
@@ -62301,6 +62777,7 @@ exports.PopoverTrigger = PopoverTrigger;
|
|
|
62301
62777
|
exports.PrimaryChildPicker = PrimaryChildPicker;
|
|
62302
62778
|
exports.PrivacyMaskSettings = PrivacyMaskSettings;
|
|
62303
62779
|
exports.ProviderBadge = ProviderBadge;
|
|
62780
|
+
exports.ProviderEntryPills = ProviderEntryPills;
|
|
62304
62781
|
exports.PtzPanel = PtzPanel;
|
|
62305
62782
|
exports.QrCode = QrCode;
|
|
62306
62783
|
exports.RECONNECT_POLICY = RECONNECT_POLICY;
|
|
@@ -62308,12 +62785,14 @@ exports.RECORDED_PLAYBACK_MODES = RECORDED_PLAYBACK_MODES;
|
|
|
62308
62785
|
exports.RIGHT = RIGHT;
|
|
62309
62786
|
exports.ROI_AREA_WARN_FRACTION = ROI_AREA_WARN_FRACTION;
|
|
62310
62787
|
exports.ROLE_DESCRIPTOR = ROLE_DESCRIPTOR;
|
|
62788
|
+
exports.ROOT_DETECTOR_STEP_ID = ROOT_DETECTOR_STEP_ID;
|
|
62311
62789
|
exports.RadialGauge = RadialGauge;
|
|
62312
62790
|
exports.RecordedPlaybackProvider = RecordedPlaybackProvider;
|
|
62313
62791
|
exports.RecordingPanel = RecordingPanel;
|
|
62314
62792
|
exports.ResponseLog = ResponseLog;
|
|
62315
62793
|
exports.RoleDisplayDefaultsFromServer = RoleDisplayDefaultsFromServer;
|
|
62316
62794
|
exports.RoleDisplayDefaultsProvider = RoleDisplayDefaultsProvider;
|
|
62795
|
+
exports.RoleNodePill = RoleNodePill;
|
|
62317
62796
|
exports.RootModelSourceControl = RootModelSourceControl;
|
|
62318
62797
|
exports.RootSuppliedModelNote = RootSuppliedModelNote;
|
|
62319
62798
|
exports.RotateCcw = RotateCcw;
|
|
@@ -62396,6 +62875,7 @@ exports.TimezoneSelector = TimezoneSelector;
|
|
|
62396
62875
|
exports.Tooltip = Tooltip;
|
|
62397
62876
|
exports.TooltipContent = TooltipContent;
|
|
62398
62877
|
exports.TooltipTrigger = TooltipTrigger;
|
|
62878
|
+
exports.TrainingBaseModelPicker = TrainingBaseModelPicker;
|
|
62399
62879
|
exports.TrainingCollectionPicker = TrainingCollectionPicker;
|
|
62400
62880
|
exports.Trash2 = Trash2;
|
|
62401
62881
|
exports.UnitPicker = UnitPicker;
|
|
@@ -62422,6 +62902,7 @@ exports.allDeviceTypeFilterOptions = allDeviceTypeFilterOptions;
|
|
|
62422
62902
|
exports.applyFleetQueryDefaults = applyFleetQueryDefaults;
|
|
62423
62903
|
exports.applyPickerFilters = applyPickerFilters;
|
|
62424
62904
|
exports.ariaSortForColumn = ariaSortForColumn;
|
|
62905
|
+
exports.assignNodeColorId = _camstack_types.assignNodeColorId;
|
|
62425
62906
|
exports.badgeFor = badgeFor;
|
|
62426
62907
|
exports.badgeFor$1 = badgeFor;
|
|
62427
62908
|
exports.bindsToModel = bindsToModel;
|
|
@@ -62435,9 +62916,11 @@ exports.classifyAddressScope = classifyAddressScope;
|
|
|
62435
62916
|
exports.classifyCapability = classifyCapability;
|
|
62436
62917
|
exports.classifySessionVerdict = classifySessionVerdict;
|
|
62437
62918
|
exports.clearPickerGroup = clearPickerGroup;
|
|
62919
|
+
exports.clusterRootModelIds = clusterRootModelIds;
|
|
62438
62920
|
exports.cn = cn;
|
|
62439
62921
|
exports.columnsForContext = columnsForContext;
|
|
62440
62922
|
exports.compareSrflxMappings = compareSrflxMappings;
|
|
62923
|
+
exports.computePageButtons = computePageButtons;
|
|
62441
62924
|
exports.containerChildToRef = containerChildToRef;
|
|
62442
62925
|
exports.countableDevices = countableDevices;
|
|
62443
62926
|
exports.coverHighlight = coverHighlight;
|
|
@@ -62451,6 +62934,7 @@ exports.darkColors = require_theme_index.darkColors$1;
|
|
|
62451
62934
|
exports.dataTableFacetGroups = dataTableFacetGroups;
|
|
62452
62935
|
exports.dataTableFacets = dataTableFacets;
|
|
62453
62936
|
exports.defaultOfField = defaultOfField;
|
|
62937
|
+
exports.defaultSelectClusterRoots = defaultSelectClusterRoots;
|
|
62454
62938
|
exports.defaultTheme = require_theme_index.defaultTheme$1;
|
|
62455
62939
|
exports.deriveDeviceKind = deriveDeviceKind;
|
|
62456
62940
|
exports.deriveWebrtcDebugStats = deriveWebrtcDebugStats;
|
|
@@ -62514,6 +62998,7 @@ exports.lawnMowerActivityMeta = lawnMowerActivityMeta;
|
|
|
62514
62998
|
exports.lightColors = require_theme_index.lightColors$1;
|
|
62515
62999
|
exports.loadRemoteBundle = loadRemoteBundle;
|
|
62516
63000
|
exports.makeScrubBridge = makeScrubBridge;
|
|
63001
|
+
exports.mapRootDetectorPlacements = mapRootDetectorPlacements;
|
|
62517
63002
|
exports.metadataEntries = metadataEntries;
|
|
62518
63003
|
exports.metadataString = metadataString;
|
|
62519
63004
|
exports.mirror = mirror;
|
|
@@ -62524,6 +63009,8 @@ exports.nextReconnectAction = nextReconnectAction;
|
|
|
62524
63009
|
exports.nextSort = nextSort;
|
|
62525
63010
|
exports.nextSortDirection = nextSortDirection;
|
|
62526
63011
|
exports.nextTableSort = nextTableSort;
|
|
63012
|
+
exports.nodeColorClass = nodeColorClass;
|
|
63013
|
+
exports.nodeTextColorClass = nodeTextColorClass;
|
|
62527
63014
|
exports.normalizeForSearch = normalizeForSearch;
|
|
62528
63015
|
exports.offListSelections = offListSelections;
|
|
62529
63016
|
exports.openTopLayer = openTopLayer;
|
|
@@ -63286,10 +63773,8 @@ exports.usePipelineAnalyticsCompleteRetrainTrack = usePipelineAnalyticsCompleteR
|
|
|
63286
63773
|
exports.usePipelineAnalyticsCountRelocatableMedia = usePipelineAnalyticsCountRelocatableMedia;
|
|
63287
63774
|
exports.usePipelineAnalyticsCountUnstampedEventMedia = usePipelineAnalyticsCountUnstampedEventMedia;
|
|
63288
63775
|
exports.usePipelineAnalyticsCreateRetrainCollection = usePipelineAnalyticsCreateRetrainCollection;
|
|
63289
|
-
exports.usePipelineAnalyticsCreateRetrainDatasetVersion = usePipelineAnalyticsCreateRetrainDatasetVersion;
|
|
63290
63776
|
exports.usePipelineAnalyticsDeleteDeviceEvents = usePipelineAnalyticsDeleteDeviceEvents;
|
|
63291
63777
|
exports.usePipelineAnalyticsDeleteRetrainCollection = usePipelineAnalyticsDeleteRetrainCollection;
|
|
63292
|
-
exports.usePipelineAnalyticsDeleteRetrainDatasetVersion = usePipelineAnalyticsDeleteRetrainDatasetVersion;
|
|
63293
63778
|
exports.usePipelineAnalyticsDeleteTracks = usePipelineAnalyticsDeleteTracks;
|
|
63294
63779
|
exports.usePipelineAnalyticsDeselectRetrainFrame = usePipelineAnalyticsDeselectRetrainFrame;
|
|
63295
63780
|
exports.usePipelineAnalyticsGetActiveTracks = usePipelineAnalyticsGetActiveTracks;
|
|
@@ -63307,6 +63792,7 @@ exports.usePipelineAnalyticsGetMediaReclaimStatus = usePipelineAnalyticsGetMedia
|
|
|
63307
63792
|
exports.usePipelineAnalyticsGetMotionEvents = usePipelineAnalyticsGetMotionEvents;
|
|
63308
63793
|
exports.usePipelineAnalyticsGetObjectEmbeddingRebuildStatus = usePipelineAnalyticsGetObjectEmbeddingRebuildStatus;
|
|
63309
63794
|
exports.usePipelineAnalyticsGetObjectEvents = usePipelineAnalyticsGetObjectEvents;
|
|
63795
|
+
exports.usePipelineAnalyticsGetRetrainCorpusKpi = usePipelineAnalyticsGetRetrainCorpusKpi;
|
|
63310
63796
|
exports.usePipelineAnalyticsGetRetrainExportUrl = usePipelineAnalyticsGetRetrainExportUrl;
|
|
63311
63797
|
exports.usePipelineAnalyticsGetRetrainFrameImage = usePipelineAnalyticsGetRetrainFrameImage;
|
|
63312
63798
|
exports.usePipelineAnalyticsGetSensorEvents = usePipelineAnalyticsGetSensorEvents;
|
|
@@ -63327,7 +63813,7 @@ exports.usePipelineAnalyticsListRetrainAnnotations = usePipelineAnalyticsListRet
|
|
|
63327
63813
|
exports.usePipelineAnalyticsListRetrainAssistProfiles = usePipelineAnalyticsListRetrainAssistProfiles;
|
|
63328
63814
|
exports.usePipelineAnalyticsListRetrainCollectionFrames = usePipelineAnalyticsListRetrainCollectionFrames;
|
|
63329
63815
|
exports.usePipelineAnalyticsListRetrainCollections = usePipelineAnalyticsListRetrainCollections;
|
|
63330
|
-
exports.
|
|
63816
|
+
exports.usePipelineAnalyticsListRetrainCorpusPage = usePipelineAnalyticsListRetrainCorpusPage;
|
|
63331
63817
|
exports.usePipelineAnalyticsListRetrainFrames = usePipelineAnalyticsListRetrainFrames;
|
|
63332
63818
|
exports.usePipelineAnalyticsListRetrainStaging = usePipelineAnalyticsListRetrainStaging;
|
|
63333
63819
|
exports.usePipelineAnalyticsListTrackMedia = usePipelineAnalyticsListTrackMedia;
|
|
@@ -63336,7 +63822,6 @@ exports.usePipelineAnalyticsListTracks = usePipelineAnalyticsListTracks;
|
|
|
63336
63822
|
exports.usePipelineAnalyticsOfferRetrainArchive = usePipelineAnalyticsOfferRetrainArchive;
|
|
63337
63823
|
exports.usePipelineAnalyticsOwnersWithMedia = usePipelineAnalyticsOwnersWithMedia;
|
|
63338
63824
|
exports.usePipelineAnalyticsPauseForStorageMigration = usePipelineAnalyticsPauseForStorageMigration;
|
|
63339
|
-
exports.usePipelineAnalyticsPreviewRetrainDataset = usePipelineAnalyticsPreviewRetrainDataset;
|
|
63340
63825
|
exports.usePipelineAnalyticsProposeRetrainAnnotations = usePipelineAnalyticsProposeRetrainAnnotations;
|
|
63341
63826
|
exports.usePipelineAnalyticsProposeRetrainAnnotationsWithLlm = usePipelineAnalyticsProposeRetrainAnnotationsWithLlm;
|
|
63342
63827
|
exports.usePipelineAnalyticsPruneEvents = usePipelineAnalyticsPruneEvents;
|
|
@@ -63350,6 +63835,7 @@ exports.usePipelineAnalyticsRefreshStorageLocationsForMigration = usePipelineAna
|
|
|
63350
63835
|
exports.usePipelineAnalyticsRelocateMedia = usePipelineAnalyticsRelocateMedia;
|
|
63351
63836
|
exports.usePipelineAnalyticsRemoveRetrainFrameFromCollection = usePipelineAnalyticsRemoveRetrainFrameFromCollection;
|
|
63352
63837
|
exports.usePipelineAnalyticsRenameRetrainCollection = usePipelineAnalyticsRenameRetrainCollection;
|
|
63838
|
+
exports.usePipelineAnalyticsResolveRetrainTrainingCorpus = usePipelineAnalyticsResolveRetrainTrainingCorpus;
|
|
63353
63839
|
exports.usePipelineAnalyticsRestageRetrainTrack = usePipelineAnalyticsRestageRetrainTrack;
|
|
63354
63840
|
exports.usePipelineAnalyticsResumeForStorageMigration = usePipelineAnalyticsResumeForStorageMigration;
|
|
63355
63841
|
exports.usePipelineAnalyticsSaveRetrainAnnotations = usePipelineAnalyticsSaveRetrainAnnotations;
|
|
@@ -63360,7 +63846,6 @@ exports.usePipelineAnalyticsSetTrackFlags = usePipelineAnalyticsSetTrackFlags;
|
|
|
63360
63846
|
exports.usePipelineAnalyticsSetTrackPurity = usePipelineAnalyticsSetTrackPurity;
|
|
63361
63847
|
exports.usePipelineAnalyticsSetTrackRelation = usePipelineAnalyticsSetTrackRelation;
|
|
63362
63848
|
exports.usePipelineAnalyticsStartStorageMigrationMove = usePipelineAnalyticsStartStorageMigrationMove;
|
|
63363
|
-
exports.usePipelineAnalyticsVerifyRetrainDatasetVersion = usePipelineAnalyticsVerifyRetrainDatasetVersion;
|
|
63364
63849
|
exports.usePipelineAnalyticsWipeAllAnalytics = usePipelineAnalyticsWipeAllAnalytics;
|
|
63365
63850
|
exports.usePipelineAnalyticsWipeObjectEmbeddings = usePipelineAnalyticsWipeObjectEmbeddings;
|
|
63366
63851
|
exports.usePipelineAnalyticsWriteRetrainArchive = usePipelineAnalyticsWriteRetrainArchive;
|
|
@@ -63748,19 +64233,15 @@ exports.useToastOnToast = useToastOnToast;
|
|
|
63748
64233
|
exports.useTrainingCanaryResult = useTrainingCanaryResult;
|
|
63749
64234
|
exports.useTrainingCancelJob = useTrainingCancelJob;
|
|
63750
64235
|
exports.useTrainingDiscardResult = useTrainingDiscardResult;
|
|
63751
|
-
exports.useTrainingFindDatasetVersionIdByName = useTrainingFindDatasetVersionIdByName;
|
|
63752
|
-
exports.useTrainingGetDatasetVersion = useTrainingGetDatasetVersion;
|
|
63753
64236
|
exports.useTrainingGetJob = useTrainingGetJob;
|
|
63754
64237
|
exports.useTrainingGetJobResult = useTrainingGetJobResult;
|
|
63755
64238
|
exports.useTrainingListBaseModels = useTrainingListBaseModels;
|
|
63756
|
-
exports.useTrainingListDatasetVersions = useTrainingListDatasetVersions;
|
|
63757
64239
|
exports.useTrainingListJobs = useTrainingListJobs;
|
|
63758
64240
|
exports.useTrainingPlanJob = useTrainingPlanJob;
|
|
63759
|
-
exports.useTrainingPutDatasetVersion = useTrainingPutDatasetVersion;
|
|
63760
64241
|
exports.useTrainingRegisterResult = useTrainingRegisterResult;
|
|
63761
|
-
exports.useTrainingRemoveDatasetVersion = useTrainingRemoveDatasetVersion;
|
|
63762
64242
|
exports.useTrainingRollbackCanary = useTrainingRollbackCanary;
|
|
63763
64243
|
exports.useTrainingStartJob = useTrainingStartJob;
|
|
64244
|
+
exports.useTrainingStartJobBatch = useTrainingStartJobBatch;
|
|
63764
64245
|
exports.useTurnProviderGetTurnServers = useTurnProviderGetTurnServers;
|
|
63765
64246
|
exports.useUpdateGetStatus = useUpdateGetStatus;
|
|
63766
64247
|
exports.useUpdateInstallUpdate = useUpdateInstallUpdate;
|