@elaraai/e3-ui-components 1.0.60 → 1.0.62

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/index.js CHANGED
@@ -18,17 +18,17 @@ var __privateWrapper = (obj, member, setter, getter) => ({
18
18
  }
19
19
  });
20
20
  var _focused, _cleanup, _setup, _a, _provider, _providerCalled, _b, _online, _cleanup2, _setup2, _c, _gcTimeout, _d, _initialState, _revertState, _cache, _client, _retryer, _defaultOptions, _abortSignalConsumed, _Query_instances, isInitialPausedFetch_fn, dispatch_fn, _e, _client2, _observers, _mutationCache, _retryer2, _Mutation_instances, dispatch_fn2, _f, _mutations, _scopes, _mutationId, _g, _queries, _h, _queryCache, _mutationCache2, _defaultOptions2, _queryDefaults, _mutationDefaults, _mountCount, _unsubscribeFocus, _unsubscribeOnline, _i, _j;
21
- import { variant, SortedMap, compareFor, EastError, fromEastTypeValue, East, none as none$1, some, OptionType, BooleanType, NullType, ConflictError, equalFor, toEastTypeValue, PatchType, diffFor, applyFor, encodeBeast2For, decodeBeast2For, BlobType, StructType, StringType, walkPatch, pathToString, pathDisplay, printFor, isVariant, prunePatchFor, detectConflictsFor, mergeWithResolutionsFor, validatePatchFor, isEastSet, isEastDict, ArrayType } from "@elaraai/east";
21
+ import { variant, SortedMap, compareFor, EastError, fromEastTypeValue, East, none as none$1, some, OptionType, BooleanType, NullType, ConflictError, equalFor, toEastTypeValue, PatchType, diffFor, applyFor, encodeBeast2For, decodeBeast2For, BlobType, StructType, StringType, walkPatch, pathToString, pathDisplay, printFor, isVariant, prunePatchFor, detectConflictsFor, mergeWithResolutionsFor, validatePatchFor, isEastSet, isEastDict, ArrayType, parseFor } from "@elaraai/east";
22
22
  import { EastTypeType } from "@elaraai/east/internal";
23
23
  import { DataBindModeType, DataBindPrimitives, bindPlatformFn, FuncBindPrimitives, FuncErrorType, FuncStatusType, funcBindPlatformFn, RecordBindPrimitives, recordBindPlatformFn, Diff, Ontology, FuncBindHandleType, Experiment, decisionBindPlatformFn, DecisionBindPrimitives, DecisionConstraintType, DiffBindingType, CommitStateType, VerdictType, AnswerType, judgementInputType, DecisionType, DecisionQueue, DecisionJournal, decodeManifest } from "@elaraai/e3-ui/internal";
24
24
  import { registerReactiveTracker, registerPlatformImplementation, StateRuntime, getRegisteredPlatformImplementations, boundSliceConfig } from "@elaraai/east-ui-components/platform";
25
25
  import { TreePathType, DatasetStatusType } from "@elaraai/e3-types";
26
- import { workspaceStatus, datasetListAt, datasetList, dataflowExecuteLaunch, datasetSet, datasetGet, ApiError, workspaceFunctionCall, workspaceFunctionList, workspaceRecordHistory, workspaceRecordMutate, workspaceRecordDescribe, repoCreate, repoGc, repoGcStart, repoGcStatus, repoList, repoRemove, repoStatus, packageExport, packageGet, packageImport, packageList, packageRemove, workspaceCreate, workspaceDeploy, workspaceExport, workspaceGet, workspaceList, workspaceRemove, datasetGetStatus, datasetListRecursive, datasetListRecursivePaths, datasetListWithStatus, taskExecutionList, taskGet, taskList, dataflowCancel, dataflowExecute, dataflowExecutePoll, dataflowGraph, taskLogs, datasetGetPage } from "@elaraai/e3-api-client";
26
+ import { workspaceStatus, datasetListAt, datasetList, dataflowExecuteLaunch, datasetSet, datasetGet, ApiError, workspaceFunctionCall, workspaceFunctionList, workspaceRecordHistory, workspaceRecordMutate, workspaceRecordDescribe, repoCreate, repoGc, repoGcStart, repoGcStatus, repoList, repoRemove, repoStatus, packageExport, packageGet, packageImport, packageList, packageRemove, workspaceCreate, workspaceDeploy, workspaceExport, workspaceGet, workspaceList, workspaceRemove, datasetGetStatus, datasetListRecursive, datasetListRecursivePaths, datasetListWithStatus, taskExecutionList, taskGet, taskList, dataflowCancel, dataflowExecute, dataflowExecutePoll, dataflowGraph, taskLogs, datasetGetPage, datasetFindKey } from "@elaraai/e3-api-client";
27
27
  import { jsx as jsx$1, Fragment, jsxs } from "react/jsx-runtime";
28
28
  import * as React from "react";
29
29
  import React__default, { useId, useMemo, useContext, createContext, useRef, useEffect, useState, useCallback, useSyncExternalStore, memo, forwardRef, useLayoutEffect, Fragment as Fragment$1, Component } from "react";
30
30
  import { Box, Flex, Text, HStack, Input, useSlotRecipe, useRecipe, VStack, useToken, Drawer, Portal, Field, NativeSelect, Textarea, chakra, Tooltip, SegmentGroup, Menu, HoverCard, useChakraContext, Spinner, Code, Clipboard, IconButton, Button, Tabs, Badge, useTabs } from "@chakra-ui/react";
31
- import { implementUIComponent, getSomeorUndefined, formatPredicate, SliceEditPopover, SlicePredicateBuilder, EastChakraSelect, EastChakraStringInput, EastChakraDateTimeInput, EastChakraFloatInput, EastChakraIntegerInput, formatTick, useSliceReactivity, useContainerBelow, usePersistedState, SliceRailCluster, EastChakraComponent, ClauseChip, StateImpl, NavImpl, SliceImpl, SliceApplyImpl, OverlayImpl, ClipboardImpl, DownloadImpl, ShareImpl, LoadingIcon, EastChakraValueTree, createUIStore, UIStoreProvider } from "@elaraai/east-ui-components";
31
+ import { implementUIComponent, getSomeorUndefined, formatPredicate, SliceEditPopover, SlicePredicateBuilder, EastChakraSelect, EastChakraStringInput, EastChakraDateTimeInput, EastChakraFloatInput, EastChakraIntegerInput, formatTick, useSliceReactivity, useContainerBelow, usePersistedState, SliceRailCluster, EastChakraComponent, ClauseChip, StateImpl, NavImpl, SliceImpl, SliceApplyImpl, OverlayImpl, ClipboardImpl, DownloadImpl, ShareImpl, LoadingIcon, EastChakraCombobox, EastChakraValueTree, createUIStore, UIStoreProvider } from "@elaraai/east-ui-components";
32
32
  import { createPortal } from "react-dom";
33
33
  import { sliceMatches } from "@elaraai/east-ui/internal";
34
34
  import { QueryClient as QueryClient$1, QueryClientProvider, useMutation, useQuery, keepPreviousData, useQueryClient } from "@tanstack/react-query";
@@ -8926,7 +8926,7 @@ const ConflictRow = memo(function ConflictRow2({ row, depth, bindingPathStr, ser
8926
8926
  gap: "8px",
8927
8927
  mt: "10px",
8928
8928
  p: "12px",
8929
- bg: "white",
8929
+ bg: "bg.surface",
8930
8930
  border: "1px solid",
8931
8931
  borderColor: "fg.warning",
8932
8932
  borderRadius: "md",
@@ -20448,28 +20448,18 @@ function FiAlertTriangle(props) {
20448
20448
  return GenIcon({ "attr": { "viewBox": "0 0 24 24", "fill": "none", "stroke": "currentColor", "strokeWidth": "2", "strokeLinecap": "round", "strokeLinejoin": "round" }, "child": [{ "tag": "path", "attr": { "d": "M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z" }, "child": [] }, { "tag": "line", "attr": { "x1": "12", "y1": "9", "x2": "12", "y2": "13" }, "child": [] }, { "tag": "line", "attr": { "x1": "12", "y1": "17", "x2": "12.01", "y2": "17" }, "child": [] }] })(props);
20449
20449
  }
20450
20450
  const NODE_KIND_ACCENT = {
20451
- process: "#3a7780",
20452
- // brand.600
20453
- computation: "#42757d",
20454
- // color-mix(brand.600 60%, gray.500)
20455
- decision: "#2b4b55",
20456
- // brand.700
20457
- objective: "#253333",
20458
- // gray.800
20459
- kpi: "#2f7a5b",
20460
- // status.pos
20461
- agent: "#6d5a7a",
20462
- // color-mix(brand.700 45%, status.warn 15%, gray.500) — plum, people/role tone
20463
- data: "#b8862d",
20464
- // status.warn
20465
- resource: "#56727a",
20466
- // color-mix(brand.600 30%, gray.500)
20467
- policy: "#8d7a5f",
20468
- // color-mix(status.warn 50%, gray.600)
20469
- document: "#bcd1d3",
20470
- // color-mix(brand.600 30%, gray.100)
20471
- group: "#4a5f5f"
20472
- // gray.600
20451
+ process: "brand.600",
20452
+ computation: "color-mix(in srgb, var(--chakra-colors-brand-600) 60%, var(--chakra-colors-gray-500))",
20453
+ decision: "brand.700",
20454
+ objective: "gray.800",
20455
+ kpi: "status.pos",
20456
+ agent: "color-mix(in srgb, var(--chakra-colors-brand-700) 45%, color-mix(in srgb, var(--chakra-colors-status-warn) 15%, var(--chakra-colors-gray-500)))",
20457
+ // plum — people/role tone
20458
+ data: "status.warn",
20459
+ resource: "color-mix(in srgb, var(--chakra-colors-brand-600) 30%, var(--chakra-colors-gray-500))",
20460
+ policy: "color-mix(in srgb, var(--chakra-colors-status-warn) 50%, var(--chakra-colors-gray-600))",
20461
+ document: "color-mix(in srgb, var(--chakra-colors-brand-600) 30%, var(--chakra-colors-gray-100))",
20462
+ group: "gray.600"
20473
20463
  };
20474
20464
  const EDGE_DASH = {
20475
20465
  // flow — solid
@@ -57154,20 +57144,7 @@ function OntologyEditorBody({
57154
57144
  const proOptions = useMemo(() => ({ hideAttribution: true }), []);
57155
57145
  const miniMapNodeColor = useCallback((node2) => {
57156
57146
  const data4 = node2.data;
57157
- const accent = {
57158
- process: "#3a7780",
57159
- computation: "#42757d",
57160
- decision: "#2b4b55",
57161
- objective: "#253333",
57162
- kpi: "#2f7a5b",
57163
- agent: "#6d5a7a",
57164
- data: "#b8862d",
57165
- resource: "#56727a",
57166
- policy: "#8d7a5f",
57167
- document: "#bcd1d3",
57168
- group: "#4a5f5f"
57169
- };
57170
- return accent[data4.type] ?? "#6b8080";
57147
+ return NODE_KIND_ACCENT[data4.type] ?? "fg.muted";
57171
57148
  }, []);
57172
57149
  const getNode = useCallback(
57173
57150
  (id3) => ontology.nodes.find((n2) => n2.id === id3),
@@ -64011,6 +63988,271 @@ class ErrorBoundary extends Component {
64011
63988
  return this.props.children;
64012
63989
  }
64013
63990
  }
63991
+ const FIND_DEBOUNCE_MS = 250;
63992
+ const POPUP_LIMIT = 20;
63993
+ function structFields(keyType) {
63994
+ if (keyType.type !== "Struct") return null;
63995
+ const fields = keyType.value;
63996
+ return fields.length > 0 ? fields : null;
63997
+ }
63998
+ function splitTopLevel(text) {
63999
+ const parts = [];
64000
+ let current = "";
64001
+ let inString = false;
64002
+ let depth = 0;
64003
+ for (let i = 0; i < text.length; i++) {
64004
+ const ch = text[i];
64005
+ if (inString) {
64006
+ current += ch;
64007
+ if (ch === "\\" && i + 1 < text.length) {
64008
+ current += text[i + 1];
64009
+ i++;
64010
+ } else if (ch === '"') {
64011
+ inString = false;
64012
+ }
64013
+ continue;
64014
+ }
64015
+ if (ch === '"') {
64016
+ inString = true;
64017
+ current += ch;
64018
+ } else if (ch === "(" || ch === "[" || ch === "{") {
64019
+ depth++;
64020
+ current += ch;
64021
+ } else if (ch === ")" || ch === "]" || ch === "}") {
64022
+ depth--;
64023
+ current += ch;
64024
+ } else if (ch === "," && depth === 0) {
64025
+ parts.push(current);
64026
+ current = "";
64027
+ } else {
64028
+ current += ch;
64029
+ }
64030
+ }
64031
+ parts.push(current);
64032
+ return parts;
64033
+ }
64034
+ function keySignature(keyType) {
64035
+ const fields = structFields(keyType);
64036
+ if (fields === null) return keyType.type;
64037
+ return `(${fields.map((f2) => `${f2.name}: ${f2.type.type}`).join(", ")})`;
64038
+ }
64039
+ function parseKeyInput(keyType, text) {
64040
+ const fields = structFields(keyType);
64041
+ if (fields === null) {
64042
+ if (keyType.type === "String") return { kind: "query", query: { prefix: text } };
64043
+ const parsed = parseFor(keyType)(text);
64044
+ if (!parsed.success) return { kind: "hint", hint: `Key is ${keyType.type}` };
64045
+ return { kind: "query", query: { key: printFor(keyType)(parsed.value) } };
64046
+ }
64047
+ if (text.trimStart().startsWith("(")) {
64048
+ const parsed = parseFor(keyType)(text);
64049
+ if (!parsed.success) return { kind: "hint", hint: `Key is ${keySignature(keyType)}` };
64050
+ return { kind: "query", query: { key: printFor(keyType)(parsed.value) } };
64051
+ }
64052
+ const segments = splitTopLevel(text);
64053
+ if (segments.length > fields.length) {
64054
+ return { kind: "hint", hint: `Key is ${keySignature(keyType)}` };
64055
+ }
64056
+ const exact = [];
64057
+ for (let i = 0; i < segments.length; i++) {
64058
+ const field = fields[i];
64059
+ const raw = segments[i].trim();
64060
+ const isLast = i === segments.length - 1;
64061
+ if (isLast && raw === "" && i > 0) {
64062
+ return { kind: "query", query: { fields: exact } };
64063
+ }
64064
+ if (field.type.type === "String" && !raw.startsWith('"')) {
64065
+ if (isLast) {
64066
+ return exact.length === 0 ? { kind: "query", query: { prefix: raw } } : { kind: "query", query: { fields: exact, prefix: raw } };
64067
+ }
64068
+ exact.push(printFor(StringType)(raw));
64069
+ continue;
64070
+ }
64071
+ const parsed = parseFor(field.type)(raw);
64072
+ if (!parsed.success) {
64073
+ return { kind: "hint", hint: `${field.name} is ${field.type.type} — key is ${keySignature(keyType)}` };
64074
+ }
64075
+ exact.push(printFor(field.type)(parsed.value));
64076
+ }
64077
+ return { kind: "query", query: { fields: exact } };
64078
+ }
64079
+ const MATCH_NOTHING = { lower: () => false, upper: () => false };
64080
+ function keyRangePredicates(keyType, query) {
64081
+ if ("key" in query) return null;
64082
+ if (keyType.type === "Struct") {
64083
+ const meta3 = keyType.value;
64084
+ const literals = "fields" in query ? query.fields : [];
64085
+ if (literals.length > meta3.length) return MATCH_NOTHING;
64086
+ const values = [];
64087
+ for (let j2 = 0; j2 < literals.length; j2++) {
64088
+ const parsed = parseFor(meta3[j2].type)(literals[j2]);
64089
+ if (!parsed.success) return MATCH_NOTHING;
64090
+ values.push(parsed.value);
64091
+ }
64092
+ const cmps = meta3.map((f2) => compareFor(f2.type));
64093
+ const lead = (k2) => {
64094
+ for (let j2 = 0; j2 < values.length; j2++) {
64095
+ const c2 = cmps[j2](k2[meta3[j2].name], values[j2]);
64096
+ if (c2 !== 0) return c2;
64097
+ }
64098
+ return 0;
64099
+ };
64100
+ const prefix22 = query.prefix;
64101
+ if (prefix22 === void 0) {
64102
+ return { lower: (k2) => lead(k2) >= 0, upper: (k2) => lead(k2) > 0 };
64103
+ }
64104
+ const prefixIdx = values.length;
64105
+ if (prefixIdx >= meta3.length || meta3[prefixIdx].type.type !== "String") return MATCH_NOTHING;
64106
+ const prefixName = meta3[prefixIdx].name;
64107
+ const prefixCmp = cmps[prefixIdx];
64108
+ return {
64109
+ lower: (k2) => {
64110
+ const c2 = lead(k2);
64111
+ return c2 !== 0 ? c2 > 0 : prefixCmp(k2[prefixName], prefix22) >= 0;
64112
+ },
64113
+ upper: (k2) => {
64114
+ const c2 = lead(k2);
64115
+ if (c2 !== 0) return c2 > 0;
64116
+ const field = k2[prefixName];
64117
+ return prefixCmp(field, prefix22) > 0 && !field.startsWith(prefix22);
64118
+ }
64119
+ };
64120
+ }
64121
+ if (!("prefix" in query) || query.prefix === void 0 || keyType.type !== "String") return MATCH_NOTHING;
64122
+ const prefix2 = query.prefix;
64123
+ const cmp = compareFor(keyType);
64124
+ return {
64125
+ lower: (k2) => cmp(k2, prefix2) >= 0,
64126
+ upper: (k2) => cmp(k2, prefix2) > 0 && !k2.startsWith(prefix2)
64127
+ };
64128
+ }
64129
+ const DatasetKeySearch = memo(function DatasetKeySearch2({ keyType, onFind, onListRange, onJump, onClear }) {
64130
+ const [range, setRange] = useState(null);
64131
+ const [items, setItems] = useState([]);
64132
+ const [activeIdx, setActiveIdx] = useState(-1);
64133
+ const [hint, setHint] = useState(null);
64134
+ const [resetSeq, setResetSeq] = useState(0);
64135
+ const debounceRef = useRef(void 0);
64136
+ const findSeqRef = useRef(0);
64137
+ useEffect(() => () => clearTimeout(debounceRef.current), []);
64138
+ const runFind = useCallback((query) => {
64139
+ const seq = ++findSeqRef.current;
64140
+ void (async () => {
64141
+ try {
64142
+ const result = await onFind(query);
64143
+ if (seq !== findSeqRef.current) return;
64144
+ setRange(result);
64145
+ setActiveIdx(-1);
64146
+ if (result.found) {
64147
+ const labels = await onListRange(result.row, Math.min(POPUP_LIMIT, result.count));
64148
+ if (seq !== findSeqRef.current) return;
64149
+ setItems(labels.map((label, i) => ({ row: result.row + i, label })));
64150
+ } else {
64151
+ setItems([]);
64152
+ }
64153
+ } catch {
64154
+ if (seq !== findSeqRef.current) return;
64155
+ setRange(null);
64156
+ setItems([]);
64157
+ }
64158
+ })();
64159
+ }, [onFind, onListRange]);
64160
+ const resetQueryState = useCallback(() => {
64161
+ clearTimeout(debounceRef.current);
64162
+ findSeqRef.current++;
64163
+ setRange(null);
64164
+ setItems([]);
64165
+ setActiveIdx(-1);
64166
+ setHint(null);
64167
+ }, []);
64168
+ const handleInput = useCallback((text) => {
64169
+ clearTimeout(debounceRef.current);
64170
+ if (text === "") {
64171
+ resetQueryState();
64172
+ onClear == null ? void 0 : onClear();
64173
+ return;
64174
+ }
64175
+ const parsed = parseKeyInput(keyType, text);
64176
+ if (parsed.kind === "hint") {
64177
+ findSeqRef.current++;
64178
+ setRange(null);
64179
+ setItems([]);
64180
+ setActiveIdx(-1);
64181
+ setHint(parsed.hint);
64182
+ return;
64183
+ }
64184
+ setHint(null);
64185
+ debounceRef.current = setTimeout(() => runFind(parsed.query), FIND_DEBOUNCE_MS);
64186
+ }, [keyType, runFind, resetQueryState, onClear]);
64187
+ const clearSearch = useCallback(() => {
64188
+ resetQueryState();
64189
+ setResetSeq((s2) => s2 + 1);
64190
+ onClear == null ? void 0 : onClear();
64191
+ }, [resetQueryState, onClear]);
64192
+ const commit = useCallback((row) => {
64193
+ onJump(row);
64194
+ if (range !== null) setActiveIdx(row - range.row);
64195
+ }, [onJump, range]);
64196
+ const step3 = useCallback((delta) => {
64197
+ if (range === null || !range.found) return;
64198
+ const next2 = Math.max(0, Math.min(range.count - 1, (activeIdx === -1 ? 0 : activeIdx) + delta));
64199
+ commit(range.row + next2);
64200
+ }, [range, activeIdx, commit]);
64201
+ const onKeyDownCapture = useCallback((e3) => {
64202
+ if (e3.key !== "Enter" || range === null || !range.found) return;
64203
+ if (document.querySelector('[data-scope="combobox"][data-part="content"] [data-highlighted]') !== null) return;
64204
+ commit(range.row + Math.max(0, activeIdx));
64205
+ }, [range, activeIdx, commit]);
64206
+ const placeholder = useMemo(() => {
64207
+ const fields = structFields(keyType);
64208
+ if (fields !== null) return `Search keys (${fields.map((f2) => f2.name).join(", ")})`;
64209
+ return keyType.type === "String" ? "Search keys" : `Find key (${keyType.type})`;
64210
+ }, [keyType]);
64211
+ const payload = useMemo(() => ({
64212
+ value: none$1,
64213
+ items: items.map((it) => ({ value: String(it.row), label: it.label, disabled: none$1 })),
64214
+ placeholder: some(placeholder),
64215
+ multiple: none$1,
64216
+ disabled: none$1,
64217
+ allowCustomValue: some(true),
64218
+ onChange: some((v3) => commit(Number(v3))),
64219
+ onChangeMultiple: none$1,
64220
+ onInputValueChange: some(handleInput),
64221
+ onOpenChange: none$1,
64222
+ style: some({ size: some(variant("xs", null)), color: none$1, background: none$1, borderColor: none$1 })
64223
+ }), [items, placeholder, commit, handleInput]);
64224
+ const status = hint !== null ? hint : range === null ? null : !range.found ? "No matches" : activeIdx === -1 ? `${range.count.toLocaleString()} ${range.count === 1 ? "match" : "matches"}` : `${(activeIdx + 1).toLocaleString()} of ${range.count.toLocaleString()}`;
64225
+ const canStep = range !== null && range.found && range.count > 1;
64226
+ return /* @__PURE__ */ jsxs(Flex, { gap: 1, align: "center", minW: "0", onKeyDownCapture, "data-part": "dataset-key-search", children: [
64227
+ /* @__PURE__ */ jsx$1(Flex, { width: `min(${placeholder.length + 10}ch, 40rem)`, minW: "12rem", flexShrink: 1, children: /* @__PURE__ */ jsx$1(EastChakraCombobox, { value: payload, selectionBehavior: "preserve" }, resetSeq) }),
64228
+ status !== null && /* @__PURE__ */ jsx$1(Text, { fontSize: "xs", color: "fg.muted", whiteSpace: "nowrap", children: status }),
64229
+ canStep && /* @__PURE__ */ jsxs(Fragment, { children: [
64230
+ /* @__PURE__ */ jsx$1(
64231
+ IconButton,
64232
+ {
64233
+ "aria-label": "Previous match",
64234
+ size: "2xs",
64235
+ variant: "ghost",
64236
+ disabled: activeIdx <= 0,
64237
+ onClick: () => step3(-1),
64238
+ children: /* @__PURE__ */ jsx$1(FontAwesomeIcon, { icon: faChevronUp })
64239
+ }
64240
+ ),
64241
+ /* @__PURE__ */ jsx$1(
64242
+ IconButton,
64243
+ {
64244
+ "aria-label": "Next match",
64245
+ size: "2xs",
64246
+ variant: "ghost",
64247
+ disabled: activeIdx >= range.count - 1,
64248
+ onClick: () => step3(1),
64249
+ children: /* @__PURE__ */ jsx$1(FontAwesomeIcon, { icon: faChevronDown })
64250
+ }
64251
+ )
64252
+ ] }),
64253
+ (range !== null || hint !== null) && /* @__PURE__ */ jsx$1(IconButton, { "aria-label": "Clear search", size: "2xs", variant: "ghost", onClick: clearSearch, children: /* @__PURE__ */ jsx$1(FontAwesomeIcon, { icon: faXmark }) })
64254
+ ] });
64255
+ });
64014
64256
  function pagingDebug(...args) {
64015
64257
  try {
64016
64258
  if (typeof localStorage === "undefined") return;
@@ -64022,6 +64264,17 @@ function pagingDebug(...args) {
64022
64264
  console.info("[e3-paging]", ...args);
64023
64265
  }
64024
64266
  const PAGE_SIZE = 500;
64267
+ const MAX_RETAINED_PAGES = 8;
64268
+ function pruneRetainedPages(pages, firstPage, lastPage, max5) {
64269
+ if (pages.size <= max5) return pages;
64270
+ const distance2 = (p2) => p2 < firstPage ? firstPage - p2 : p2 > lastPage ? p2 - lastPage : 0;
64271
+ const keep = [...pages.keys()].sort((a2, b2) => distance2(a2) - distance2(b2) || a2 - b2).slice(0, max5);
64272
+ const kept = /* @__PURE__ */ new Map();
64273
+ for (const p2 of keep.sort((a2, b2) => a2 - b2)) {
64274
+ kept.set(p2, pages.get(p2));
64275
+ }
64276
+ return kept;
64277
+ }
64025
64278
  function pageRows(type, decoded, offset) {
64026
64279
  if (type.type === "Array") {
64027
64280
  const elemType2 = type.value;
@@ -64065,12 +64318,14 @@ const PagedDatasetPreview = memo(function PagedDatasetPreview2({
64065
64318
  const [totals, setTotals] = useState(null);
64066
64319
  const [loadingCount, setLoadingCount] = useState(0);
64067
64320
  const [error3, setError] = useState(null);
64321
+ const [jumpRow, setJumpRow] = useState(void 0);
64068
64322
  const inflightRef = useRef(/* @__PURE__ */ new Set());
64069
64323
  useEffect(() => {
64070
64324
  pagingDebug(`reset (path=${path2}, hash=${hash2.slice(0, 8)})`);
64071
64325
  setPages(/* @__PURE__ */ new Map());
64072
64326
  setTotals(null);
64073
64327
  setError(null);
64328
+ setJumpRow(void 0);
64074
64329
  inflightRef.current.clear();
64075
64330
  }, [path2, hash2]);
64076
64331
  const loadPage = useCallback((pageIdx) => {
@@ -64078,13 +64333,13 @@ const PagedDatasetPreview = memo(function PagedDatasetPreview2({
64078
64333
  inflightRef.current.add(pageIdx);
64079
64334
  setLoadingCount((n2) => n2 + 1);
64080
64335
  pagingDebug(`fetch p${pageIdx} (offset=${pageIdx * PAGE_SIZE}, limit=${PAGE_SIZE}, hash=${hash2.slice(0, 8)})`);
64081
- const pathParts = path2.split(".").filter(Boolean).map((v3) => variant("field", v3));
64336
+ const pathParts2 = path2.split(".").filter(Boolean).map((v3) => variant("field", v3));
64082
64337
  const reqOpts = requestOptions ?? { token: null };
64083
64338
  queryClient.fetchQuery({
64084
64339
  queryKey: ["datasetPage", apiUrl, repo, workspace, path2, hash2, `p${pageIdx}`],
64085
64340
  // Hash-pinned: the URL is a pure function of the bytes, so any
64086
64341
  // HTTP cache between here and the server can hold it immutably.
64087
- queryFn: () => datasetGetPage(apiUrl, repo, workspace, pathParts, { offset: pageIdx * PAGE_SIZE, limit: PAGE_SIZE, hash: hash2 }, reqOpts),
64342
+ queryFn: () => datasetGetPage(apiUrl, repo, workspace, pathParts2, { offset: pageIdx * PAGE_SIZE, limit: PAGE_SIZE, hash: hash2 }, reqOpts),
64088
64343
  staleTime: Infinity
64089
64344
  // pages of one content hash are immutable
64090
64345
  }).then((page) => {
@@ -64121,8 +64376,35 @@ const PagedDatasetPreview = memo(function PagedDatasetPreview2({
64121
64376
  if (!pages.has(p2)) missing.push(p2);
64122
64377
  }
64123
64378
  pagingDebug(`need rows [${startRow}, ${endRow}) → pages ${first2}..${last2}, missing=[${missing.join(",")}], inflight=[${[...inflightRef.current].join(",")}]`);
64379
+ setPages((prev2) => pruneRetainedPages(prev2, first2, last2, MAX_RETAINED_PAGES));
64124
64380
  for (const p2 of missing) loadPage(p2);
64125
64381
  }, [pages, loadPage]);
64382
+ const keyType = useMemo(() => type.type === "Dict" ? type.value.key : type.type === "Set" ? type.value : null, [type]);
64383
+ const pathParts = useMemo(() => path2.split(".").filter(Boolean).map((v3) => variant("field", v3)), [path2]);
64384
+ const onFindKey = useCallback(async (query) => {
64385
+ const reqOpts = requestOptions ?? { token: null };
64386
+ const queryTag = JSON.stringify(query);
64387
+ const result = await queryClient.fetchQuery({
64388
+ queryKey: ["datasetFind", apiUrl, repo, workspace, path2, hash2, queryTag],
64389
+ queryFn: () => datasetFindKey(apiUrl, repo, workspace, pathParts, { ...query, hash: hash2 }, reqOpts),
64390
+ staleTime: Infinity
64391
+ // hash-pinned: one content hash, one answer
64392
+ });
64393
+ pagingDebug(`find ${queryTag}: found=${result.found} row=${result.row} count=${result.count}`);
64394
+ return result;
64395
+ }, [queryClient, apiUrl, repo, workspace, path2, hash2, pathParts, requestOptions]);
64396
+ const onListRange = useCallback(async (row, limit2) => {
64397
+ const reqOpts = requestOptions ?? { token: null };
64398
+ const page = await queryClient.fetchQuery({
64399
+ queryKey: ["datasetPage", apiUrl, repo, workspace, path2, hash2, `w${row}:${limit2}`],
64400
+ queryFn: () => datasetGetPage(apiUrl, repo, workspace, pathParts, { offset: row, limit: limit2, hash: hash2 }, reqOpts),
64401
+ staleTime: Infinity
64402
+ });
64403
+ const decoded = decodeBeast2For(type)(page.data);
64404
+ const stringKeys = keyType !== null && keyType.type === "String";
64405
+ const keys = type.type === "Dict" ? [...decoded.keys()] : [...decoded.values()];
64406
+ return keys.map((k2) => stringKeys ? k2 : ValueTree.keyLabel(keyType, k2));
64407
+ }, [queryClient, apiUrl, repo, workspace, path2, hash2, pathParts, requestOptions, type, keyType]);
64126
64408
  const treeValue = useMemo(() => ({
64127
64409
  root: ValueTree.materialize(type, emptyOf(type)),
64128
64410
  onEdit: none$1,
@@ -64135,8 +64417,9 @@ const PagedDatasetPreview = memo(function PagedDatasetPreview2({
64135
64417
  totalRows: totals.elements,
64136
64418
  pageSize: PAGE_SIZE,
64137
64419
  pages,
64138
- onNeedRows
64139
- }, [totals, pages, onNeedRows]);
64420
+ onNeedRows,
64421
+ scrollToRow: jumpRow
64422
+ }, [totals, pages, onNeedRows, jumpRow]);
64140
64423
  if (error3 !== null) {
64141
64424
  if (error3 instanceof ApiError && error3.code === "dataset_too_large") {
64142
64425
  return /* @__PURE__ */ jsxs(Flex, { height: "100%", direction: "column", align: "center", justify: "center", gap: 3, p: 6, children: [
@@ -64161,6 +64444,16 @@ const PagedDatasetPreview = memo(function PagedDatasetPreview2({
64161
64444
  formatSize(totals.bytes > 0 ? totals.bytes : sizeBytes)
64162
64445
  ] }),
64163
64446
  loadingCount > 0 && /* @__PURE__ */ jsx$1(Text, { fontSize: "xs", color: "fg.muted", children: "Loading…" }),
64447
+ keyType !== null && /* @__PURE__ */ jsx$1(
64448
+ DatasetKeySearch,
64449
+ {
64450
+ keyType,
64451
+ onFind: onFindKey,
64452
+ onListRange,
64453
+ onJump: setJumpRow,
64454
+ onClear: () => setJumpRow(void 0)
64455
+ }
64456
+ ),
64164
64457
  /* @__PURE__ */ jsx$1(Flex, { flex: 1, justify: "flex-end", children: /* @__PURE__ */ jsx$1(DownloadButton, { onClick: onDownload }) })
64165
64458
  ] }),
64166
64459
  /* @__PURE__ */ jsx$1(Box, { flex: 1, minHeight: 0, overflow: "hidden", children: /* @__PURE__ */ jsx$1(EastChakraValueTree, { value: treeValue, storageKey: `${path2}:page`, paging }) })
@@ -64232,6 +64525,37 @@ const DatasetPreview = memo(function DatasetPreview2({
64232
64525
  await setMutation.mutateAsync({ path: treePath, data: data4 });
64233
64526
  await queryClient.invalidateQueries({ queryKey: ["datasetStatus", apiUrl, repo, workspace, path2] });
64234
64527
  }, [apiUrl, repo, workspace, path2, type, setMutation, queryClient]);
64528
+ const keyType = useMemo(() => type === void 0 ? null : type.type === "Dict" ? type.value.key : type.type === "Set" ? type.value : null, [type]);
64529
+ const inlineKeys = useMemo(() => decoded === void 0 || type === void 0 ? null : type.type === "Dict" ? [...decoded.keys()] : type.type === "Set" ? [...decoded.values()] : null, [type, decoded]);
64530
+ const [jumpRow, setJumpRow] = useState(void 0);
64531
+ useEffect(() => {
64532
+ setJumpRow(void 0);
64533
+ }, [decoded]);
64534
+ const onFindInline = useCallback(async (query) => {
64535
+ if (inlineKeys === null || keyType === null) return { found: false, row: 0, count: 0 };
64536
+ const range = keyRangePredicates(keyType, query);
64537
+ if (range === null) {
64538
+ const parsed = parseFor(keyType)(query.key);
64539
+ if (!parsed.success) return { found: false, row: 0, count: 0 };
64540
+ const cmp = compareFor(keyType);
64541
+ for (let i = 0; i < inlineKeys.length; i++) {
64542
+ const order = cmp(inlineKeys[i], parsed.value);
64543
+ if (order === 0) return { found: true, row: i, count: 1 };
64544
+ if (order > 0) return { found: false, row: i, count: 0 };
64545
+ }
64546
+ return { found: false, row: inlineKeys.length, count: 0 };
64547
+ }
64548
+ let row = inlineKeys.findIndex(range.lower);
64549
+ if (row === -1) row = inlineKeys.length;
64550
+ let count2 = 0;
64551
+ while (row + count2 < inlineKeys.length && !range.upper(inlineKeys[row + count2])) count2++;
64552
+ return { found: count2 > 0, row, count: count2 };
64553
+ }, [inlineKeys, keyType]);
64554
+ const onListInline = useCallback(async (row, limit2) => {
64555
+ if (inlineKeys === null || keyType === null) return [];
64556
+ const stringKeys = keyType.type === "String";
64557
+ return inlineKeys.slice(row, row + limit2).map((k2) => stringKeys ? k2 : ValueTree.keyLabel(keyType, k2));
64558
+ }, [inlineKeys, keyType]);
64235
64559
  const treeValue = useMemo(() => {
64236
64560
  if (type === void 0 || decoded === void 0) return null;
64237
64561
  const root2 = ValueTree.materialize(type, decoded);
@@ -64286,14 +64610,26 @@ const DatasetPreview = memo(function DatasetPreview2({
64286
64610
  const count = type === void 0 || decoded === void 0 ? null : type.type === "Array" ? decoded.length : type.type === "Set" || type.type === "Dict" ? decoded.size : null;
64287
64611
  const countText = count === null ? "" : `${count.toLocaleString()} ${(type == null ? void 0 : type.type) === "Dict" ? "entries" : "items"} · `;
64288
64612
  return /* @__PURE__ */ jsxs(Flex, { direction: "column", height: "100%", overflow: "hidden", children: [
64289
- /* @__PURE__ */ jsxs(Flex, { px: 4, py: 2, justify: "flex-end", flexShrink: 0, borderBottom: "1px solid", borderColor: "border.subtle", children: [
64290
- /* @__PURE__ */ jsxs(Text, { fontSize: "xs", color: "fg.muted", mr: 2, alignSelf: "center", children: [
64291
- countText,
64292
- formatSize(sizeBytes)
64293
- ] }),
64294
- /* @__PURE__ */ jsx$1(DownloadButton, { onClick: download })
64613
+ /* @__PURE__ */ jsxs(Flex, { px: 4, py: 2, gap: 2, align: "center", flexShrink: 0, borderBottom: "1px solid", borderColor: "border.subtle", children: [
64614
+ keyType !== null && inlineKeys !== null && /* @__PURE__ */ jsx$1(
64615
+ DatasetKeySearch,
64616
+ {
64617
+ keyType,
64618
+ onFind: onFindInline,
64619
+ onListRange: onListInline,
64620
+ onJump: setJumpRow,
64621
+ onClear: () => setJumpRow(void 0)
64622
+ }
64623
+ ),
64624
+ /* @__PURE__ */ jsxs(Flex, { flex: 1, justify: "flex-end", align: "center", gap: 2, children: [
64625
+ /* @__PURE__ */ jsxs(Text, { fontSize: "xs", color: "fg.muted", children: [
64626
+ countText,
64627
+ formatSize(sizeBytes)
64628
+ ] }),
64629
+ /* @__PURE__ */ jsx$1(DownloadButton, { onClick: download })
64630
+ ] })
64295
64631
  ] }),
64296
- /* @__PURE__ */ jsx$1(Box, { flex: 1, minHeight: 0, overflow: "hidden", children: treeValue !== null && /* @__PURE__ */ jsx$1(EastChakraValueTree, { value: treeValue, storageKey: path2 ?? "value" }) })
64632
+ /* @__PURE__ */ jsx$1(Box, { flex: 1, minHeight: 0, overflow: "hidden", children: treeValue !== null && /* @__PURE__ */ jsx$1(EastChakraValueTree, { value: treeValue, storageKey: path2 ?? "value", scrollToRow: jumpRow }) })
64297
64633
  ] });
64298
64634
  });
64299
64635
  const InputPreview = memo(function InputPreview2({
@@ -64439,10 +64775,10 @@ function HighlightedLine({
64439
64775
  "span",
64440
64776
  {
64441
64777
  style: {
64442
- backgroundColor: isCurrent ? "#f59e0b" : "#fbbf24",
64443
- color: "#000",
64778
+ backgroundColor: isCurrent ? "var(--chakra-colors-status-warn)" : "var(--chakra-colors-status-warn-subtle-strong)",
64779
+ color: "var(--chakra-colors-fg-default)",
64444
64780
  borderRadius: "2px",
64445
- outline: isCurrent ? "2px solid #f59e0b" : void 0
64781
+ outline: isCurrent ? "2px solid var(--chakra-colors-status-warn)" : void 0
64446
64782
  },
64447
64783
  children: text.slice(match2.start, match2.end)
64448
64784
  },
@@ -64595,7 +64931,7 @@ function VirtualizedLogViewer({ content, tabs }) {
64595
64931
  {
64596
64932
  px: 3,
64597
64933
  py: 2,
64598
- bg: "gray.800",
64934
+ bg: "bg.inverse",
64599
64935
  borderTopRadius: "md",
64600
64936
  align: "center",
64601
64937
  justify: "space-between",
@@ -64603,8 +64939,8 @@ function VirtualizedLogViewer({ content, tabs }) {
64603
64939
  gap: 2,
64604
64940
  children: [
64605
64941
  /* @__PURE__ */ jsx$1(Tabs.RootProvider, { value: tabs, size: "sm", variant: "line", children: /* @__PURE__ */ jsxs(Tabs.List, { borderBottom: "none", children: [
64606
- /* @__PURE__ */ jsx$1(Tabs.Trigger, { value: "stdout", color: "gray.300", _selected: { color: "white" }, children: "stdout" }),
64607
- /* @__PURE__ */ jsx$1(Tabs.Trigger, { value: "stderr", color: "gray.300", _selected: { color: "white" }, children: "stderr" })
64942
+ /* @__PURE__ */ jsx$1(Tabs.Trigger, { value: "stdout", color: "fg.subtle", _selected: { color: "fg.inverse" }, children: "stdout" }),
64943
+ /* @__PURE__ */ jsx$1(Tabs.Trigger, { value: "stderr", color: "fg.subtle", _selected: { color: "fg.inverse" }, children: "stderr" })
64608
64944
  ] }) }),
64609
64945
  /* @__PURE__ */ jsxs(Flex, { align: "center", gap: 1, children: [
64610
64946
  /* @__PURE__ */ jsx$1(
@@ -64615,22 +64951,22 @@ function VirtualizedLogViewer({ content, tabs }) {
64615
64951
  value: searchQuery,
64616
64952
  onChange: (e3) => setSearchQuery(e3.target.value),
64617
64953
  onKeyDown: handleSearchKeyDown,
64618
- bg: "gray.700",
64954
+ bg: "bg.inverse",
64619
64955
  border: "none",
64620
- color: "white",
64621
- _placeholder: { color: "gray.400" },
64956
+ color: "fg.inverse",
64957
+ _placeholder: { color: "fg.subtle" },
64622
64958
  width: "min(150px, 40vw)"
64623
64959
  }
64624
64960
  ),
64625
- searchQuery && /* @__PURE__ */ jsx$1(Text, { fontSize: "xs", color: "gray.400", minWidth: "50px", textAlign: "center", children: matches33.length > 0 ? `${currentMatchIndex + 1}/${matches33.length}` : "0/0" }),
64961
+ searchQuery && /* @__PURE__ */ jsx$1(Text, { fontSize: "xs", color: "fg.subtle", minWidth: "50px", textAlign: "center", children: matches33.length > 0 ? `${currentMatchIndex + 1}/${matches33.length}` : "0/0" }),
64626
64962
  /* @__PURE__ */ jsx$1(
64627
64963
  IconButton,
64628
64964
  {
64629
64965
  variant: "ghost",
64630
64966
  size: "xs",
64631
64967
  onClick: handlePrevMatch,
64632
- color: "gray.400",
64633
- _hover: { color: "white" },
64968
+ color: "fg.subtle",
64969
+ _hover: { color: "fg.inverse" },
64634
64970
  "aria-label": "Previous match",
64635
64971
  disabled: matches33.length === 0,
64636
64972
  children: /* @__PURE__ */ jsx$1(FontAwesomeIcon, { icon: faChevronUp })
@@ -64642,8 +64978,8 @@ function VirtualizedLogViewer({ content, tabs }) {
64642
64978
  variant: "ghost",
64643
64979
  size: "xs",
64644
64980
  onClick: handleNextMatch,
64645
- color: "gray.400",
64646
- _hover: { color: "white" },
64981
+ color: "fg.subtle",
64982
+ _hover: { color: "fg.inverse" },
64647
64983
  "aria-label": "Next match",
64648
64984
  disabled: matches33.length === 0,
64649
64985
  children: /* @__PURE__ */ jsx$1(FontAwesomeIcon, { icon: faChevronDown })
@@ -64655,8 +64991,8 @@ function VirtualizedLogViewer({ content, tabs }) {
64655
64991
  variant: "ghost",
64656
64992
  size: "xs",
64657
64993
  onClick: handleCopy,
64658
- color: "gray.400",
64659
- _hover: { color: "white" },
64994
+ color: "fg.subtle",
64995
+ _hover: { color: "fg.inverse" },
64660
64996
  "aria-label": "Copy logs",
64661
64997
  children: /* @__PURE__ */ jsx$1(FontAwesomeIcon, { icon: copied ? faCheck : faCopy })
64662
64998
  }
@@ -64677,7 +65013,7 @@ function VirtualizedLogViewer({ content, tabs }) {
64677
65013
  borderTopWidth: "0",
64678
65014
  fontFamily: "mono",
64679
65015
  fontSize: "sm",
64680
- color: "gray.100",
65016
+ color: "fg.inverse",
64681
65017
  onScroll: handleScroll,
64682
65018
  children: /* @__PURE__ */ jsx$1(
64683
65019
  "div",
@@ -64702,12 +65038,12 @@ function VirtualizedLogViewer({ content, tabs }) {
64702
65038
  height: `${virtualItem.size}px`,
64703
65039
  transform: `translateY(${virtualItem.start}px)`
64704
65040
  },
64705
- children: /* @__PURE__ */ jsxs(Flex, { px: 3, py: 0.5, _hover: { bg: "gray.800" }, children: [
65041
+ children: /* @__PURE__ */ jsxs(Flex, { px: 3, py: 0.5, _hover: { bg: "bg.inverse" }, children: [
64706
65042
  /* @__PURE__ */ jsx$1(
64707
65043
  Text,
64708
65044
  {
64709
65045
  as: "span",
64710
- color: "gray.500",
65046
+ color: "fg.muted",
64711
65047
  minWidth: "50px",
64712
65048
  textAlign: "right",
64713
65049
  mr: 3,
@@ -65005,20 +65341,20 @@ function ValueNode({
65005
65341
  }) {
65006
65342
  if (depth > 20) {
65007
65343
  return /* @__PURE__ */ jsxs(Box, { py: 0.5, display: "flex", alignItems: "center", gap: 2, children: [
65008
- label && /* @__PURE__ */ jsxs(Text, { as: "span", color: "purple.400", fontWeight: "medium", children: [
65344
+ label && /* @__PURE__ */ jsxs(Text, { as: "span", color: "accent.purple", fontWeight: "medium", children: [
65009
65345
  label,
65010
65346
  ":"
65011
65347
  ] }),
65012
- /* @__PURE__ */ jsx$1(Text, { as: "span", color: "gray.500", children: "[max depth reached]" })
65348
+ /* @__PURE__ */ jsx$1(Text, { as: "span", color: "fg.muted", children: "[max depth reached]" })
65013
65349
  ] });
65014
65350
  }
65015
65351
  if (isPrimitive(type)) {
65016
65352
  return /* @__PURE__ */ jsxs(Box, { py: 0.5, display: "flex", alignItems: "center", gap: 2, children: [
65017
- label && /* @__PURE__ */ jsxs(Text, { as: "span", color: "purple.400", fontWeight: "medium", children: [
65353
+ label && /* @__PURE__ */ jsxs(Text, { as: "span", color: "accent.purple", fontWeight: "medium", children: [
65018
65354
  label,
65019
65355
  ":"
65020
65356
  ] }),
65021
- /* @__PURE__ */ jsx$1(Text, { as: "span", color: type.type === "String" ? "green.400" : type.type === "Integer" || type.type === "Float" ? "blue.400" : "gray.300", children: formatPrimitive(type, value) }),
65357
+ /* @__PURE__ */ jsx$1(Text, { as: "span", color: type.type === "String" ? "fg.success" : type.type === "Integer" || type.type === "Float" ? "link" : "fg.muted", children: formatPrimitive(type, value) }),
65022
65358
  /* @__PURE__ */ jsx$1(Badge, { size: "xs", colorPalette: "gray", variant: "subtle", children: type.type })
65023
65359
  ] });
65024
65360
  }
@@ -65028,28 +65364,28 @@ function ValueNode({
65028
65364
  const elementType = type.value;
65029
65365
  if (items.length === 0) {
65030
65366
  return /* @__PURE__ */ jsxs(Box, { py: 0.5, display: "flex", alignItems: "center", gap: 2, children: [
65031
- label && /* @__PURE__ */ jsxs(Text, { as: "span", color: "purple.400", fontWeight: "medium", children: [
65367
+ label && /* @__PURE__ */ jsxs(Text, { as: "span", color: "accent.purple", fontWeight: "medium", children: [
65032
65368
  label,
65033
65369
  ":"
65034
65370
  ] }),
65035
- /* @__PURE__ */ jsx$1(Text, { as: "span", color: "gray.500", children: "[]" }),
65036
- /* @__PURE__ */ jsx$1(Badge, { size: "xs", colorPalette: "blue", variant: "subtle", children: "Array[0]" })
65371
+ /* @__PURE__ */ jsx$1(Text, { as: "span", color: "fg.muted", children: "[]" }),
65372
+ /* @__PURE__ */ jsx$1(Badge, { size: "xs", colorPalette: "brand", variant: "subtle", children: "Array[0]" })
65037
65373
  ] });
65038
65374
  }
65039
65375
  return /* @__PURE__ */ jsx$1(Box, { children: /* @__PURE__ */ jsxs("details", { children: [
65040
65376
  /* @__PURE__ */ jsxs("summary", { style: { cursor: "pointer", padding: "2px 0", display: "flex", alignItems: "center", gap: "8px" }, children: [
65041
- label && /* @__PURE__ */ jsxs(Text, { as: "span", color: "purple.400", fontWeight: "medium", children: [
65377
+ label && /* @__PURE__ */ jsxs(Text, { as: "span", color: "accent.purple", fontWeight: "medium", children: [
65042
65378
  label,
65043
65379
  ":"
65044
65380
  ] }),
65045
- /* @__PURE__ */ jsx$1(Badge, { size: "xs", colorPalette: "blue", variant: "subtle", children: typeLabel })
65381
+ /* @__PURE__ */ jsx$1(Badge, { size: "xs", colorPalette: "brand", variant: "subtle", children: typeLabel })
65046
65382
  ] }),
65047
65383
  /* @__PURE__ */ jsx$1(Box, { pl: 4, children: items.map((item, index2) => /* @__PURE__ */ jsx$1(
65048
65384
  Box,
65049
65385
  {
65050
65386
  py: 1,
65051
65387
  borderBottom: index2 < items.length - 1 ? "1px solid" : void 0,
65052
- borderColor: "gray.700",
65388
+ borderColor: "border.strong",
65053
65389
  children: /* @__PURE__ */ jsx$1(
65054
65390
  ValueNode,
65055
65391
  {
@@ -65069,21 +65405,21 @@ function ValueNode({
65069
65405
  const obj = value;
65070
65406
  if (fields.length === 0) {
65071
65407
  return /* @__PURE__ */ jsxs(Box, { py: 0.5, display: "flex", alignItems: "center", gap: 2, children: [
65072
- label && /* @__PURE__ */ jsxs(Text, { as: "span", color: "purple.400", fontWeight: "medium", children: [
65408
+ label && /* @__PURE__ */ jsxs(Text, { as: "span", color: "accent.purple", fontWeight: "medium", children: [
65073
65409
  label,
65074
65410
  ":"
65075
65411
  ] }),
65076
- /* @__PURE__ */ jsx$1(Text, { as: "span", color: "gray.500", children: "{}" }),
65077
- /* @__PURE__ */ jsx$1(Badge, { size: "xs", colorPalette: "orange", variant: "subtle", children: "Struct" })
65412
+ /* @__PURE__ */ jsx$1(Text, { as: "span", color: "fg.muted", children: "{}" }),
65413
+ /* @__PURE__ */ jsx$1(Badge, { size: "xs", colorPalette: "warning", variant: "subtle", children: "Struct" })
65078
65414
  ] });
65079
65415
  }
65080
65416
  return /* @__PURE__ */ jsx$1(Box, { children: /* @__PURE__ */ jsxs("details", { children: [
65081
65417
  /* @__PURE__ */ jsxs("summary", { style: { cursor: "pointer", padding: "2px 0", display: "flex", alignItems: "center", gap: "8px" }, children: [
65082
- label && /* @__PURE__ */ jsxs(Text, { as: "span", color: "purple.400", fontWeight: "medium", children: [
65418
+ label && /* @__PURE__ */ jsxs(Text, { as: "span", color: "accent.purple", fontWeight: "medium", children: [
65083
65419
  label,
65084
65420
  ":"
65085
65421
  ] }),
65086
- /* @__PURE__ */ jsx$1(Badge, { size: "xs", colorPalette: "orange", variant: "subtle", children: typeLabel })
65422
+ /* @__PURE__ */ jsx$1(Badge, { size: "xs", colorPalette: "warning", variant: "subtle", children: typeLabel })
65087
65423
  ] }),
65088
65424
  /* @__PURE__ */ jsx$1(Box, { pl: 4, children: fields.map((field) => /* @__PURE__ */ jsx$1(
65089
65425
  ValueNode,
@@ -65103,11 +65439,11 @@ function ValueNode({
65103
65439
  const activeCase = cases.find((c2) => c2.name === variant2.type);
65104
65440
  if (!activeCase) {
65105
65441
  return /* @__PURE__ */ jsxs(Box, { py: 0.5, display: "flex", alignItems: "center", gap: 2, children: [
65106
- label && /* @__PURE__ */ jsxs(Text, { as: "span", color: "purple.400", fontWeight: "medium", children: [
65442
+ label && /* @__PURE__ */ jsxs(Text, { as: "span", color: "accent.purple", fontWeight: "medium", children: [
65107
65443
  label,
65108
65444
  ":"
65109
65445
  ] }),
65110
- /* @__PURE__ */ jsxs(Text, { as: "span", color: "red.400", children: [
65446
+ /* @__PURE__ */ jsxs(Text, { as: "span", color: "fg.danger", children: [
65111
65447
  "Unknown variant: ",
65112
65448
  variant2.type
65113
65449
  ] })
@@ -65115,11 +65451,11 @@ function ValueNode({
65115
65451
  }
65116
65452
  if (activeCase.type.type === "Null") {
65117
65453
  return /* @__PURE__ */ jsxs(Box, { py: 0.5, display: "flex", alignItems: "center", gap: 2, children: [
65118
- label && /* @__PURE__ */ jsxs(Text, { as: "span", color: "purple.400", fontWeight: "medium", children: [
65454
+ label && /* @__PURE__ */ jsxs(Text, { as: "span", color: "accent.purple", fontWeight: "medium", children: [
65119
65455
  label,
65120
65456
  ":"
65121
65457
  ] }),
65122
- /* @__PURE__ */ jsxs(Badge, { size: "xs", colorPalette: "purple", variant: "subtle", children: [
65458
+ /* @__PURE__ */ jsxs(Badge, { size: "xs", colorPalette: "brand", variant: "subtle", children: [
65123
65459
  ".",
65124
65460
  variant2.type
65125
65461
  ] })
@@ -65127,11 +65463,11 @@ function ValueNode({
65127
65463
  }
65128
65464
  return /* @__PURE__ */ jsx$1(Box, { children: /* @__PURE__ */ jsxs("details", { children: [
65129
65465
  /* @__PURE__ */ jsxs("summary", { style: { cursor: "pointer", padding: "2px 0", display: "flex", alignItems: "center", gap: "8px" }, children: [
65130
- label && /* @__PURE__ */ jsxs(Text, { as: "span", color: "purple.400", fontWeight: "medium", children: [
65466
+ label && /* @__PURE__ */ jsxs(Text, { as: "span", color: "accent.purple", fontWeight: "medium", children: [
65131
65467
  label,
65132
65468
  ":"
65133
65469
  ] }),
65134
- /* @__PURE__ */ jsxs(Badge, { size: "xs", colorPalette: "purple", variant: "subtle", children: [
65470
+ /* @__PURE__ */ jsxs(Badge, { size: "xs", colorPalette: "brand", variant: "subtle", children: [
65135
65471
  ".",
65136
65472
  variant2.type
65137
65473
  ] })
@@ -65152,29 +65488,29 @@ function ValueNode({
65152
65488
  const valueType = type.value.value;
65153
65489
  if (map3.size === 0) {
65154
65490
  return /* @__PURE__ */ jsxs(Box, { py: 0.5, display: "flex", alignItems: "center", gap: 2, children: [
65155
- label && /* @__PURE__ */ jsxs(Text, { as: "span", color: "purple.400", fontWeight: "medium", children: [
65491
+ label && /* @__PURE__ */ jsxs(Text, { as: "span", color: "accent.purple", fontWeight: "medium", children: [
65156
65492
  label,
65157
65493
  ":"
65158
65494
  ] }),
65159
- /* @__PURE__ */ jsx$1(Text, { as: "span", color: "gray.500", children: "Map{}" }),
65160
- /* @__PURE__ */ jsx$1(Badge, { size: "xs", colorPalette: "teal", variant: "subtle", children: "Dict[0]" })
65495
+ /* @__PURE__ */ jsx$1(Text, { as: "span", color: "fg.muted", children: "Map{}" }),
65496
+ /* @__PURE__ */ jsx$1(Badge, { size: "xs", colorPalette: "info", variant: "subtle", children: "Dict[0]" })
65161
65497
  ] });
65162
65498
  }
65163
65499
  const entries = Array.from(map3.entries());
65164
65500
  return /* @__PURE__ */ jsx$1(Box, { children: /* @__PURE__ */ jsxs("details", { children: [
65165
65501
  /* @__PURE__ */ jsxs("summary", { style: { cursor: "pointer", padding: "2px 0", display: "flex", alignItems: "center", gap: "8px" }, children: [
65166
- label && /* @__PURE__ */ jsxs(Text, { as: "span", color: "purple.400", fontWeight: "medium", children: [
65502
+ label && /* @__PURE__ */ jsxs(Text, { as: "span", color: "accent.purple", fontWeight: "medium", children: [
65167
65503
  label,
65168
65504
  ":"
65169
65505
  ] }),
65170
- /* @__PURE__ */ jsx$1(Badge, { size: "xs", colorPalette: "teal", variant: "subtle", children: typeLabel })
65506
+ /* @__PURE__ */ jsx$1(Badge, { size: "xs", colorPalette: "info", variant: "subtle", children: typeLabel })
65171
65507
  ] }),
65172
65508
  /* @__PURE__ */ jsx$1(Box, { pl: 4, children: entries.map(([k2, v3], i) => /* @__PURE__ */ jsxs(
65173
65509
  Box,
65174
65510
  {
65175
65511
  py: 2,
65176
65512
  borderBottom: i < entries.length - 1 ? "1px solid" : void 0,
65177
- borderColor: "gray.700",
65513
+ borderColor: "border.strong",
65178
65514
  children: [
65179
65515
  /* @__PURE__ */ jsx$1(ValueNode, { type: keyType, value: k2, depth: depth + 1 }),
65180
65516
  /* @__PURE__ */ jsx$1(ValueNode, { type: valueType, value: v3, depth: depth + 1 })
@@ -65189,29 +65525,29 @@ function ValueNode({
65189
65525
  const elementType = type.value;
65190
65526
  if (set3.size === 0) {
65191
65527
  return /* @__PURE__ */ jsxs(Box, { py: 0.5, display: "flex", alignItems: "center", gap: 2, children: [
65192
- label && /* @__PURE__ */ jsxs(Text, { as: "span", color: "purple.400", fontWeight: "medium", children: [
65528
+ label && /* @__PURE__ */ jsxs(Text, { as: "span", color: "accent.purple", fontWeight: "medium", children: [
65193
65529
  label,
65194
65530
  ":"
65195
65531
  ] }),
65196
- /* @__PURE__ */ jsx$1(Text, { as: "span", color: "gray.500", children: "Set{}" }),
65197
- /* @__PURE__ */ jsx$1(Badge, { size: "xs", colorPalette: "pink", variant: "subtle", children: "Set[0]" })
65532
+ /* @__PURE__ */ jsx$1(Text, { as: "span", color: "fg.muted", children: "Set{}" }),
65533
+ /* @__PURE__ */ jsx$1(Badge, { size: "xs", colorPalette: "brand", variant: "subtle", children: "Set[0]" })
65198
65534
  ] });
65199
65535
  }
65200
65536
  const items = Array.from(set3);
65201
65537
  return /* @__PURE__ */ jsx$1(Box, { children: /* @__PURE__ */ jsxs("details", { children: [
65202
65538
  /* @__PURE__ */ jsxs("summary", { style: { cursor: "pointer", padding: "2px 0", display: "flex", alignItems: "center", gap: "8px" }, children: [
65203
- label && /* @__PURE__ */ jsxs(Text, { as: "span", color: "purple.400", fontWeight: "medium", children: [
65539
+ label && /* @__PURE__ */ jsxs(Text, { as: "span", color: "accent.purple", fontWeight: "medium", children: [
65204
65540
  label,
65205
65541
  ":"
65206
65542
  ] }),
65207
- /* @__PURE__ */ jsx$1(Badge, { size: "xs", colorPalette: "pink", variant: "subtle", children: typeLabel })
65543
+ /* @__PURE__ */ jsx$1(Badge, { size: "xs", colorPalette: "brand", variant: "subtle", children: typeLabel })
65208
65544
  ] }),
65209
65545
  /* @__PURE__ */ jsx$1(Box, { pl: 4, children: items.map((item, i) => /* @__PURE__ */ jsx$1(
65210
65546
  Box,
65211
65547
  {
65212
65548
  py: 1,
65213
65549
  borderBottom: i < items.length - 1 ? "1px solid" : void 0,
65214
- borderColor: "gray.700",
65550
+ borderColor: "border.strong",
65215
65551
  children: /* @__PURE__ */ jsx$1(
65216
65552
  ValueNode,
65217
65553
  {
@@ -65229,11 +65565,11 @@ function ValueNode({
65229
65565
  const ref = value;
65230
65566
  return /* @__PURE__ */ jsx$1(Box, { children: /* @__PURE__ */ jsxs("details", { children: [
65231
65567
  /* @__PURE__ */ jsxs("summary", { style: { cursor: "pointer", padding: "2px 0", display: "flex", alignItems: "center", gap: "8px" }, children: [
65232
- label && /* @__PURE__ */ jsxs(Text, { as: "span", color: "purple.400", fontWeight: "medium", children: [
65568
+ label && /* @__PURE__ */ jsxs(Text, { as: "span", color: "accent.purple", fontWeight: "medium", children: [
65233
65569
  label,
65234
65570
  ":"
65235
65571
  ] }),
65236
- /* @__PURE__ */ jsx$1(Badge, { size: "xs", colorPalette: "red", variant: "subtle", children: "Ref" })
65572
+ /* @__PURE__ */ jsx$1(Badge, { size: "xs", colorPalette: "danger", variant: "subtle", children: "Ref" })
65237
65573
  ] }),
65238
65574
  /* @__PURE__ */ jsx$1(Box, { pl: 4, children: /* @__PURE__ */ jsx$1(
65239
65575
  ValueNode,
@@ -65247,20 +65583,20 @@ function ValueNode({
65247
65583
  }
65248
65584
  if (type.type === "Function" || type.type === "AsyncFunction") {
65249
65585
  return /* @__PURE__ */ jsxs(Box, { py: 0.5, display: "flex", alignItems: "center", gap: 2, children: [
65250
- label && /* @__PURE__ */ jsxs(Text, { as: "span", color: "purple.400", fontWeight: "medium", children: [
65586
+ label && /* @__PURE__ */ jsxs(Text, { as: "span", color: "accent.purple", fontWeight: "medium", children: [
65251
65587
  label,
65252
65588
  ":"
65253
65589
  ] }),
65254
- /* @__PURE__ */ jsx$1(Text, { as: "span", color: "gray.500", children: "[function]" }),
65590
+ /* @__PURE__ */ jsx$1(Text, { as: "span", color: "fg.muted", children: "[function]" }),
65255
65591
  /* @__PURE__ */ jsx$1(Badge, { size: "xs", colorPalette: "gray", variant: "subtle", children: type.type })
65256
65592
  ] });
65257
65593
  }
65258
65594
  return /* @__PURE__ */ jsxs(Box, { py: 0.5, display: "flex", alignItems: "center", gap: 2, children: [
65259
- label && /* @__PURE__ */ jsxs(Text, { as: "span", color: "purple.400", fontWeight: "medium", children: [
65595
+ label && /* @__PURE__ */ jsxs(Text, { as: "span", color: "accent.purple", fontWeight: "medium", children: [
65260
65596
  label,
65261
65597
  ":"
65262
65598
  ] }),
65263
- /* @__PURE__ */ jsxs(Text, { as: "span", color: "gray.500", children: [
65599
+ /* @__PURE__ */ jsxs(Text, { as: "span", color: "fg.muted", children: [
65264
65600
  "[",
65265
65601
  type.type,
65266
65602
  "]"
@@ -65285,6 +65621,7 @@ export {
65285
65621
  BindPlatform,
65286
65622
  BindRuntime,
65287
65623
  DataTaskPreview,
65624
+ DatasetKeySearch,
65288
65625
  DatasetPreview,
65289
65626
  E3Provider,
65290
65627
  EastChakraDecisionJournal,