@flanksource/clicky-ui 0.2.8 → 0.2.9
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/components/Combobox.cjs +89 -49
- package/dist/components/Combobox.cjs.map +1 -1
- package/dist/components/Combobox.d.ts +3 -0
- package/dist/components/Combobox.d.ts.map +1 -1
- package/dist/components/Combobox.js +91 -51
- package/dist/components/Combobox.js.map +1 -1
- package/dist/components/FilterBar.cjs +42 -44
- package/dist/components/FilterBar.cjs.map +1 -1
- package/dist/components/FilterBar.d.ts +19 -0
- package/dist/components/FilterBar.d.ts.map +1 -1
- package/dist/components/FilterBar.js +43 -45
- package/dist/components/FilterBar.js.map +1 -1
- package/dist/components/JsonSchemaForm.cjs +35 -0
- package/dist/components/JsonSchemaForm.cjs.map +1 -0
- package/dist/components/JsonSchemaForm.d.ts +3 -0
- package/dist/components/JsonSchemaForm.d.ts.map +1 -0
- package/dist/components/JsonSchemaForm.js +35 -0
- package/dist/components/JsonSchemaForm.js.map +1 -0
- package/dist/components/json-schema-form-array.cjs +169 -0
- package/dist/components/json-schema-form-array.cjs.map +1 -0
- package/dist/components/json-schema-form-array.d.ts +8 -0
- package/dist/components/json-schema-form-array.d.ts.map +1 -0
- package/dist/components/json-schema-form-array.js +169 -0
- package/dist/components/json-schema-form-array.js.map +1 -0
- package/dist/components/json-schema-form-fields.cjs +365 -0
- package/dist/components/json-schema-form-fields.cjs.map +1 -0
- package/dist/components/json-schema-form-fields.d.ts +19 -0
- package/dist/components/json-schema-form-fields.d.ts.map +1 -0
- package/dist/components/json-schema-form-fields.js +365 -0
- package/dist/components/json-schema-form-fields.js.map +1 -0
- package/dist/components/json-schema-form-render.cjs +154 -0
- package/dist/components/json-schema-form-render.cjs.map +1 -0
- package/dist/components/json-schema-form-render.d.ts +40 -0
- package/dist/components/json-schema-form-render.d.ts.map +1 -0
- package/dist/components/json-schema-form-render.js +154 -0
- package/dist/components/json-schema-form-render.js.map +1 -0
- package/dist/components/json-schema-form-resolve.cjs +121 -0
- package/dist/components/json-schema-form-resolve.cjs.map +1 -0
- package/dist/components/json-schema-form-resolve.d.ts +19 -0
- package/dist/components/json-schema-form-resolve.d.ts.map +1 -0
- package/dist/components/json-schema-form-resolve.js +121 -0
- package/dist/components/json-schema-form-resolve.js.map +1 -0
- package/dist/components/json-schema-form-types.d.ts +108 -0
- package/dist/components/json-schema-form-types.d.ts.map +1 -0
- package/dist/components.cjs +7 -0
- package/dist/components.cjs.map +1 -1
- package/dist/components.d.ts +3 -0
- package/dist/components.d.ts.map +1 -1
- package/dist/components.js +8 -1
- package/dist/components.js.map +1 -1
- package/dist/data/Clicky.cjs +1 -1
- package/dist/data/Clicky.cjs.map +1 -1
- package/dist/data/Clicky.js +1 -1
- package/dist/data/Clicky.js.map +1 -1
- package/dist/data/DataTable.cjs +16 -15
- package/dist/data/DataTable.cjs.map +1 -1
- package/dist/data/DataTable.d.ts +2 -1
- package/dist/data/DataTable.d.ts.map +1 -1
- package/dist/data/DataTable.js +16 -15
- package/dist/data/DataTable.js.map +1 -1
- package/dist/data/Icon.cjs +11 -0
- package/dist/data/Icon.cjs.map +1 -1
- package/dist/data/Icon.d.ts +12 -1
- package/dist/data/Icon.d.ts.map +1 -1
- package/dist/data/Icon.js +12 -1
- package/dist/data/Icon.js.map +1 -1
- package/dist/data/LogDetails.cjs +277 -0
- package/dist/data/LogDetails.cjs.map +1 -0
- package/dist/data/LogDetails.d.ts +5 -0
- package/dist/data/LogDetails.d.ts.map +1 -0
- package/dist/data/LogDetails.js +277 -0
- package/dist/data/LogDetails.js.map +1 -0
- package/dist/data/LogsTable.cjs +6 -202
- package/dist/data/LogsTable.cjs.map +1 -1
- package/dist/data/LogsTable.d.ts.map +1 -1
- package/dist/data/LogsTable.js +4 -200
- package/dist/data/LogsTable.js.map +1 -1
- package/dist/data/Properties.cjs +2 -2
- package/dist/data/Properties.cjs.map +1 -1
- package/dist/data/Properties.js +2 -2
- package/dist/data/Properties.js.map +1 -1
- package/dist/data/cells/TagList.cjs +19 -3
- package/dist/data/cells/TagList.cjs.map +1 -1
- package/dist/data/cells/TagList.d.ts +11 -1
- package/dist/data/cells/TagList.d.ts.map +1 -1
- package/dist/data/cells/TagList.js +19 -3
- package/dist/data/cells/TagList.js.map +1 -1
- package/dist/data/cells/Timestamp.cjs +17 -2
- package/dist/data/cells/Timestamp.cjs.map +1 -1
- package/dist/data/cells/Timestamp.d.ts +2 -0
- package/dist/data/cells/Timestamp.d.ts.map +1 -1
- package/dist/data/cells/Timestamp.js +17 -2
- package/dist/data/cells/Timestamp.js.map +1 -1
- package/dist/data/log-utils.cjs +7 -0
- package/dist/data/log-utils.cjs.map +1 -0
- package/dist/data/log-utils.d.ts +2 -0
- package/dist/data/log-utils.d.ts.map +1 -0
- package/dist/data/log-utils.js +7 -0
- package/dist/data/log-utils.js.map +1 -0
- package/dist/data.cjs +3 -0
- package/dist/data.cjs.map +1 -1
- package/dist/data.d.ts +2 -2
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +5 -2
- package/dist/index.cjs +13 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +15 -2
- package/dist/index.js.map +1 -1
- package/dist/rpc/EntityExplorerApp.cjs +3 -2
- package/dist/rpc/EntityExplorerApp.cjs.map +1 -1
- package/dist/rpc/EntityExplorerApp.js +3 -2
- package/dist/rpc/EntityExplorerApp.js.map +1 -1
- package/dist/rpc/OperationActionDialog.cjs +1 -1
- package/dist/rpc/OperationActionDialog.cjs.map +1 -1
- package/dist/rpc/OperationActionDialog.js +1 -1
- package/dist/rpc/OperationActionDialog.js.map +1 -1
- package/dist/rpc/OperationCommandPage.cjs +21 -14
- package/dist/rpc/OperationCommandPage.cjs.map +1 -1
- package/dist/rpc/OperationCommandPage.d.ts.map +1 -1
- package/dist/rpc/OperationCommandPage.js +21 -14
- package/dist/rpc/OperationCommandPage.js.map +1 -1
- package/dist/rpc/apiClient.cjs +316 -0
- package/dist/rpc/apiClient.cjs.map +1 -0
- package/dist/rpc/apiClient.d.ts +44 -0
- package/dist/rpc/apiClient.d.ts.map +1 -0
- package/dist/rpc/apiClient.js +316 -0
- package/dist/rpc/apiClient.js.map +1 -0
- package/dist/rpc/useOperations.cjs.map +1 -1
- package/dist/rpc/useOperations.d.ts +2 -1
- package/dist/rpc/useOperations.d.ts.map +1 -1
- package/dist/rpc/useOperations.js.map +1 -1
- package/dist/rpc.cjs +3 -0
- package/dist/rpc.cjs.map +1 -1
- package/dist/rpc.d.ts +1 -0
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js +3 -0
- package/dist/rpc.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -1
package/dist/data.cjs
CHANGED
|
@@ -319,6 +319,8 @@ exports.DataTable = DataTable.DataTable;
|
|
|
319
319
|
exports.inferColumns = DataTable.inferColumns;
|
|
320
320
|
exports.Timestamp = Timestamp.Timestamp;
|
|
321
321
|
exports.chooseTimestampFormat = Timestamp.chooseTimestampFormat;
|
|
322
|
+
exports.formatDateTimeRelative = Timestamp.formatDateTimeRelative;
|
|
323
|
+
exports.formatRelativeTime = Timestamp.formatRelativeTime;
|
|
322
324
|
exports.formatTimestamp = Timestamp.formatTimestamp;
|
|
323
325
|
exports.modeToFormat = Timestamp.modeToFormat;
|
|
324
326
|
exports.parseTimestamp = Timestamp.parseTimestamp;
|
|
@@ -338,6 +340,7 @@ exports.FilterPillGroup = FilterPill.FilterPillGroup;
|
|
|
338
340
|
exports.FilterSeparator = FilterPill.FilterSeparator;
|
|
339
341
|
exports.Gauge = Gauge.Gauge;
|
|
340
342
|
exports.Icon = Icon.Icon;
|
|
343
|
+
exports.LabelIcon = Icon.LabelIcon;
|
|
341
344
|
exports.setFallbackIconProvider = Icon.setFallbackIconProvider;
|
|
342
345
|
exports.JsonView = JsonView.JsonView;
|
|
343
346
|
exports.KeyValueList = KeyValueList.KeyValueList;
|
package/dist/data.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"data.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/data.d.ts
CHANGED
|
@@ -4,13 +4,13 @@ export { AvatarBadge, type AvatarBadgeProps } from './data/AvatarBadge';
|
|
|
4
4
|
export { Badge, badgeVariants, type BadgeProps, type BadgeShape, type BadgeSize, type BadgeStatus, type BadgeTone, type BadgeTruncate, type BadgeVariant, } from './data/Badge';
|
|
5
5
|
export { CodeBlock, type CodeBlockProps } from './data/CodeBlock';
|
|
6
6
|
export { DataTable, inferColumns, type DataTableColumn, type DataTableColumnInput, type DataTableColumnKind, type DataTableProps, type StatusOptions, type TagsOptions, type TimestampOptions, } from './data/DataTable';
|
|
7
|
-
export { Timestamp, chooseTimestampFormat, formatTimestamp, parseTimestamp, modeToFormat, type TimestampFormat, type TimestampMode, type TimestampProps, } from './data/cells/Timestamp';
|
|
7
|
+
export { Timestamp, chooseTimestampFormat, formatDateTimeRelative, formatRelativeTime, formatTimestamp, parseTimestamp, modeToFormat, type TimestampFormat, type TimestampMode, type TimestampProps, } from './data/cells/Timestamp';
|
|
8
8
|
export { TagActionsProvider, TagList, normalizeTags, splitTagToken, tagActionsFromRecord, tagFilterTokens, useTagActions, useTagActionsValue, type NormalizedTag, type TagActionsContextValue, type TagFilterMode, type TagInput, type TagListProps, type TagsValue, } from './data/cells/TagList';
|
|
9
9
|
export { StatusDot, type StatusDotProps, type StatusDotSize } from './data/cells/StatusDot';
|
|
10
10
|
export { normalizeStatus, STATUS_TOKEN_GROUPS } from './data/cells/status-mapping';
|
|
11
11
|
export { FilterPill, FilterPillGroup, FilterSeparator, type FilterPillProps, type FilterPillGroupProps, type FilterMode, } from './data/FilterPill';
|
|
12
12
|
export { Gauge, type GaugeProps, type GaugeTone } from './data/Gauge';
|
|
13
|
-
export { Icon, setFallbackIconProvider, type FallbackIconProps, type IconProps, type IconStyle, type IconTone, type StaticIconComponent, } from './data/Icon';
|
|
13
|
+
export { Icon, LabelIcon, setFallbackIconProvider, type FallbackIconProps, type IconProps, type IconStyle, type IconTone, type LabelIconSpec, type StaticIconComponent, } from './data/Icon';
|
|
14
14
|
export * from './icons';
|
|
15
15
|
export { JsonView, type JsonViewProps } from './data/JsonView';
|
|
16
16
|
export { KeyValueList, type KeyValueListItem, type KeyValueListProps } from './data/KeyValueList';
|
package/dist/data.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../src/data.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../src/data.ts"],"names":[],"mappings":"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"}
|
package/dist/data.js
CHANGED
|
@@ -4,13 +4,13 @@ import { AvatarBadge } from "./data/AvatarBadge.js";
|
|
|
4
4
|
import { Badge, badgeVariants } from "./data/Badge.js";
|
|
5
5
|
import { CodeBlock } from "./data/CodeBlock.js";
|
|
6
6
|
import { DataTable, inferColumns } from "./data/DataTable.js";
|
|
7
|
-
import { Timestamp, chooseTimestampFormat, formatTimestamp, modeToFormat, parseTimestamp } from "./data/cells/Timestamp.js";
|
|
7
|
+
import { Timestamp, chooseTimestampFormat, formatDateTimeRelative, formatRelativeTime, formatTimestamp, modeToFormat, parseTimestamp } from "./data/cells/Timestamp.js";
|
|
8
8
|
import { TagActionsProvider, TagList, normalizeTags, splitTagToken, tagActionsFromRecord, tagFilterTokens, useTagActions, useTagActionsValue } from "./data/cells/TagList.js";
|
|
9
9
|
import { StatusDot } from "./data/cells/StatusDot.js";
|
|
10
10
|
import { STATUS_TOKEN_GROUPS, normalizeStatus } from "./data/cells/status-mapping.js";
|
|
11
11
|
import { FilterPill, FilterPillGroup, FilterSeparator } from "./data/FilterPill.js";
|
|
12
12
|
import { Gauge } from "./data/Gauge.js";
|
|
13
|
-
import { Icon, setFallbackIconProvider } from "./data/Icon.js";
|
|
13
|
+
import { Icon, LabelIcon, setFallbackIconProvider } from "./data/Icon.js";
|
|
14
14
|
import { JsonView } from "./data/JsonView.js";
|
|
15
15
|
import { KeyValueList } from "./data/KeyValueList.js";
|
|
16
16
|
import { Properties } from "./data/Properties.js";
|
|
@@ -329,6 +329,7 @@ export {
|
|
|
329
329
|
JvmStackFrameRow,
|
|
330
330
|
JvmStackTrace,
|
|
331
331
|
KeyValueList,
|
|
332
|
+
LabelIcon,
|
|
332
333
|
LogViewer,
|
|
333
334
|
LogsTable,
|
|
334
335
|
Markdown,
|
|
@@ -858,7 +859,9 @@ export {
|
|
|
858
859
|
deriveCoreBars,
|
|
859
860
|
detectDumpFormat,
|
|
860
861
|
findProcessByPID,
|
|
862
|
+
formatDateTimeRelative,
|
|
861
863
|
formatPropertyLabel,
|
|
864
|
+
formatRelativeTime,
|
|
862
865
|
formatTimestamp,
|
|
863
866
|
frameHasSource,
|
|
864
867
|
getChangeIcon,
|
package/dist/index.cjs
CHANGED
|
@@ -24,6 +24,8 @@ const Combobox = require("./components/Combobox.cjs");
|
|
|
24
24
|
const themeSwitcher = require("./components/theme-switcher.cjs");
|
|
25
25
|
const densitySwitcher = require("./components/density-switcher.cjs");
|
|
26
26
|
const iconMenuPicker = require("./components/icon-menu-picker.cjs");
|
|
27
|
+
const JsonSchemaForm = require("./components/JsonSchemaForm.cjs");
|
|
28
|
+
const jsonSchemaFormResolve = require("./components/json-schema-form-resolve.cjs");
|
|
27
29
|
const SplitPane = require("./layout/SplitPane.cjs");
|
|
28
30
|
const Section = require("./layout/Section.cjs");
|
|
29
31
|
const DropdownMenu = require("./overlay/DropdownMenu.cjs");
|
|
@@ -91,6 +93,7 @@ const OperationEntityPage = require("./rpc/OperationEntityPage.cjs");
|
|
|
91
93
|
const OperationCommandPage = require("./rpc/OperationCommandPage.cjs");
|
|
92
94
|
const EndpointList = require("./rpc/EndpointList.cjs");
|
|
93
95
|
const useOperations = require("./rpc/useOperations.cjs");
|
|
96
|
+
const apiClient = require("./rpc/apiClient.cjs");
|
|
94
97
|
const classify = require("./rpc/classify.cjs");
|
|
95
98
|
const types = require("./rpc/types.cjs");
|
|
96
99
|
const UiActivity = require("./icons/components/UiActivity.cjs");
|
|
@@ -392,6 +395,11 @@ exports.Combobox = Combobox.Combobox;
|
|
|
392
395
|
exports.ThemeSwitcher = themeSwitcher.ThemeSwitcher;
|
|
393
396
|
exports.DensitySwitcher = densitySwitcher.DensitySwitcher;
|
|
394
397
|
exports.IconMenuPicker = iconMenuPicker.IconMenuPicker;
|
|
398
|
+
exports.JsonSchemaForm = JsonSchemaForm.JsonSchemaForm;
|
|
399
|
+
exports.effectiveProperties = jsonSchemaFormResolve.effectiveProperties;
|
|
400
|
+
exports.isOpenStringMap = jsonSchemaFormResolve.isOpenStringMap;
|
|
401
|
+
exports.matchesIf = jsonSchemaFormResolve.matchesIf;
|
|
402
|
+
exports.resolveControl = jsonSchemaFormResolve.resolveControl;
|
|
395
403
|
exports.SplitPane = SplitPane.SplitPane;
|
|
396
404
|
exports.DetailEmptyState = Section.DetailEmptyState;
|
|
397
405
|
exports.Section = Section.Section;
|
|
@@ -408,6 +416,8 @@ exports.DataTable = DataTable.DataTable;
|
|
|
408
416
|
exports.inferColumns = DataTable.inferColumns;
|
|
409
417
|
exports.Timestamp = Timestamp.Timestamp;
|
|
410
418
|
exports.chooseTimestampFormat = Timestamp.chooseTimestampFormat;
|
|
419
|
+
exports.formatDateTimeRelative = Timestamp.formatDateTimeRelative;
|
|
420
|
+
exports.formatRelativeTime = Timestamp.formatRelativeTime;
|
|
411
421
|
exports.formatTimestamp = Timestamp.formatTimestamp;
|
|
412
422
|
exports.modeToFormat = Timestamp.modeToFormat;
|
|
413
423
|
exports.parseTimestamp = Timestamp.parseTimestamp;
|
|
@@ -427,6 +437,7 @@ exports.FilterPillGroup = FilterPill.FilterPillGroup;
|
|
|
427
437
|
exports.FilterSeparator = FilterPill.FilterSeparator;
|
|
428
438
|
exports.Gauge = Gauge.Gauge;
|
|
429
439
|
exports.Icon = Icon.Icon;
|
|
440
|
+
exports.LabelIcon = Icon.LabelIcon;
|
|
430
441
|
exports.setFallbackIconProvider = Icon.setFallbackIconProvider;
|
|
431
442
|
exports.JsonView = JsonView.JsonView;
|
|
432
443
|
exports.KeyValueList = KeyValueList.KeyValueList;
|
|
@@ -512,6 +523,8 @@ exports.EndpointList = EndpointList.EndpointList;
|
|
|
512
523
|
exports.useOpenAPI = useOperations.useOpenAPI;
|
|
513
524
|
exports.useOperationById = useOperations.useOperationById;
|
|
514
525
|
exports.useOperations = useOperations.useOperations;
|
|
526
|
+
exports.OperationsApiClientError = apiClient.OperationsApiClientError;
|
|
527
|
+
exports.createOperationsApiClient = apiClient.createOperationsApiClient;
|
|
515
528
|
exports.filterOperationsByDomain = classify.filterOperationsByDomain;
|
|
516
529
|
exports.findDetailEndpoint = classify.findDetailEndpoint;
|
|
517
530
|
exports.findListEndpoint = classify.findListEndpoint;
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/index.js
CHANGED
|
@@ -22,6 +22,8 @@ import { Combobox } from "./components/Combobox.js";
|
|
|
22
22
|
import { ThemeSwitcher } from "./components/theme-switcher.js";
|
|
23
23
|
import { DensitySwitcher } from "./components/density-switcher.js";
|
|
24
24
|
import { IconMenuPicker } from "./components/icon-menu-picker.js";
|
|
25
|
+
import { JsonSchemaForm } from "./components/JsonSchemaForm.js";
|
|
26
|
+
import { effectiveProperties, isOpenStringMap, matchesIf, resolveControl } from "./components/json-schema-form-resolve.js";
|
|
25
27
|
import { SplitPane } from "./layout/SplitPane.js";
|
|
26
28
|
import { DetailEmptyState, Section } from "./layout/Section.js";
|
|
27
29
|
import { DropdownMenu } from "./overlay/DropdownMenu.js";
|
|
@@ -33,13 +35,13 @@ import { AvatarBadge } from "./data/AvatarBadge.js";
|
|
|
33
35
|
import { Badge, badgeVariants } from "./data/Badge.js";
|
|
34
36
|
import { CodeBlock } from "./data/CodeBlock.js";
|
|
35
37
|
import { DataTable, inferColumns } from "./data/DataTable.js";
|
|
36
|
-
import { Timestamp, chooseTimestampFormat, formatTimestamp, modeToFormat, parseTimestamp } from "./data/cells/Timestamp.js";
|
|
38
|
+
import { Timestamp, chooseTimestampFormat, formatDateTimeRelative, formatRelativeTime, formatTimestamp, modeToFormat, parseTimestamp } from "./data/cells/Timestamp.js";
|
|
37
39
|
import { TagActionsProvider, TagList, normalizeTags, splitTagToken, tagActionsFromRecord, tagFilterTokens, useTagActions, useTagActionsValue } from "./data/cells/TagList.js";
|
|
38
40
|
import { StatusDot } from "./data/cells/StatusDot.js";
|
|
39
41
|
import { STATUS_TOKEN_GROUPS, normalizeStatus } from "./data/cells/status-mapping.js";
|
|
40
42
|
import { FilterPill, FilterPillGroup, FilterSeparator } from "./data/FilterPill.js";
|
|
41
43
|
import { Gauge } from "./data/Gauge.js";
|
|
42
|
-
import { Icon, setFallbackIconProvider } from "./data/Icon.js";
|
|
44
|
+
import { Icon, LabelIcon, setFallbackIconProvider } from "./data/Icon.js";
|
|
43
45
|
import { JsonView } from "./data/JsonView.js";
|
|
44
46
|
import { KeyValueList } from "./data/KeyValueList.js";
|
|
45
47
|
import { Properties } from "./data/Properties.js";
|
|
@@ -89,6 +91,7 @@ import { OperationEntityPage } from "./rpc/OperationEntityPage.js";
|
|
|
89
91
|
import { OperationCommandPage } from "./rpc/OperationCommandPage.js";
|
|
90
92
|
import { EndpointList } from "./rpc/EndpointList.js";
|
|
91
93
|
import { useOpenAPI, useOperationById, useOperations } from "./rpc/useOperations.js";
|
|
94
|
+
import { OperationsApiClientError, createOperationsApiClient } from "./rpc/apiClient.js";
|
|
92
95
|
import { filterOperationsByDomain, findDetailEndpoint, findListEndpoint, normalizeRows, parseJsonBody } from "./rpc/classify.js";
|
|
93
96
|
import { isPositionalParam } from "./rpc/types.js";
|
|
94
97
|
import { UiActivity } from "./icons/components/UiActivity.js";
|
|
@@ -395,10 +398,12 @@ export {
|
|
|
395
398
|
Icon,
|
|
396
399
|
IconMenuPicker,
|
|
397
400
|
InlineError,
|
|
401
|
+
JsonSchemaForm,
|
|
398
402
|
JsonView,
|
|
399
403
|
JvmStackFrameRow,
|
|
400
404
|
JvmStackTrace,
|
|
401
405
|
KeyValueList,
|
|
406
|
+
LabelIcon,
|
|
402
407
|
LogViewer,
|
|
403
408
|
LogsTable,
|
|
404
409
|
Markdown,
|
|
@@ -410,6 +415,7 @@ export {
|
|
|
410
415
|
OperationCatalog,
|
|
411
416
|
OperationCommandPage,
|
|
412
417
|
OperationEntityPage,
|
|
418
|
+
OperationsApiClientError,
|
|
413
419
|
PrettyStackTrace,
|
|
414
420
|
ProgressBar,
|
|
415
421
|
Properties,
|
|
@@ -943,8 +949,10 @@ export {
|
|
|
943
949
|
countProcesses,
|
|
944
950
|
countStackByState,
|
|
945
951
|
countThreadsByState,
|
|
952
|
+
createOperationsApiClient,
|
|
946
953
|
deriveCoreBars,
|
|
947
954
|
detectDumpFormat,
|
|
955
|
+
effectiveProperties,
|
|
948
956
|
filterOperationsByDomain,
|
|
949
957
|
findDetailEndpoint,
|
|
950
958
|
findListEndpoint,
|
|
@@ -952,8 +960,10 @@ export {
|
|
|
952
960
|
fnv1a32,
|
|
953
961
|
formatBytes,
|
|
954
962
|
formatBytesPerSecond,
|
|
963
|
+
formatDateTimeRelative,
|
|
955
964
|
formatDuration,
|
|
956
965
|
formatPropertyLabel,
|
|
966
|
+
formatRelativeTime,
|
|
957
967
|
formatShort,
|
|
958
968
|
formatTimestamp,
|
|
959
969
|
formatUnit,
|
|
@@ -961,9 +971,11 @@ export {
|
|
|
961
971
|
getChangeIcon,
|
|
962
972
|
inferColumns,
|
|
963
973
|
isApplicationStackFrame,
|
|
974
|
+
isOpenStringMap,
|
|
964
975
|
isPositionalParam,
|
|
965
976
|
isTerminalStatus,
|
|
966
977
|
logLevelColor,
|
|
978
|
+
matchesIf,
|
|
967
979
|
modeToFormat,
|
|
968
980
|
normalizeErrorDiagnostics,
|
|
969
981
|
normalizeLogsTableRows,
|
|
@@ -983,6 +995,7 @@ export {
|
|
|
983
995
|
processStateColor,
|
|
984
996
|
processStateIcon,
|
|
985
997
|
resolveBreakdown,
|
|
998
|
+
resolveControl,
|
|
986
999
|
resolveSeries,
|
|
987
1000
|
resolveSize,
|
|
988
1001
|
segment,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -246,7 +246,8 @@ function UnknownSurface({ surfaceKey }) {
|
|
|
246
246
|
/* @__PURE__ */ jsxRuntime.jsx("code", { children: surfaceKey })
|
|
247
247
|
] });
|
|
248
248
|
}
|
|
249
|
-
const AUTORUN_QUERY_PARAM = "
|
|
249
|
+
const AUTORUN_QUERY_PARAM = "autoRun";
|
|
250
|
+
const LEGACY_AUTORUN_QUERY_PARAM = "__autoRun";
|
|
250
251
|
const ARG_QUERY_PREFIX = "__arg";
|
|
251
252
|
function buildCommandHref(basePath, resolved) {
|
|
252
253
|
var _a, _b;
|
|
@@ -335,7 +336,7 @@ function readCommandQueryParams() {
|
|
|
335
336
|
let autoRun = false;
|
|
336
337
|
const positional = [];
|
|
337
338
|
for (const [key, value] of search.entries()) {
|
|
338
|
-
if (key === AUTORUN_QUERY_PARAM) {
|
|
339
|
+
if (key === AUTORUN_QUERY_PARAM || key === LEGACY_AUTORUN_QUERY_PARAM) {
|
|
339
340
|
autoRun = value === "1" || value === "true";
|
|
340
341
|
continue;
|
|
341
342
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityExplorerApp.cjs","sources":["../../src/rpc/EntityExplorerApp.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useState, type ReactNode } from \"react\";\nimport { ThemeSwitcher } from \"../components/theme-switcher\";\nimport type { ClickyCommandRuntime, ClickyResolvedCommand } from \"../data/Clicky\";\nimport {\n findSurfaceListOperation,\n getClickySurfaces,\n makeSurfaceDefinition,\n} from \"./clickyMetadata\";\nimport type { RenderLink } from \"./EndpointList\";\nimport { OperationCatalog } from \"./OperationCatalog\";\nimport { OperationCommandPage } from \"./OperationCommandPage\";\nimport { OperationEntityPage } from \"./OperationEntityPage\";\nimport type { ClickySurface } from \"./types\";\nimport type { OperationsApiClient } from \"./useOperations\";\nimport { useOperations } from \"./useOperations\";\n\nexport type EntityExplorerAppProps = {\n client: OperationsApiClient;\n pathname: string;\n renderLink: RenderLink;\n basePath?: string;\n showApiExplorer?: boolean;\n // surfaceIcons maps a ClickySurface.parent slug to a ReactNode rendered next\n // to the group label. Lets the host app drop in brand SVGs (e.g. Xero,\n // Takealot) without coupling clicky-ui to any specific iconography.\n surfaceIcons?: Record<string, ReactNode>;\n};\n\n// SURFACE_GROUP_STATE_KEY persists open/closed state of sidebar groups across\n// reloads. Single localStorage entry, not per-user — operator UI only.\nconst SURFACE_GROUP_STATE_KEY = \"clicky-ui:sidebar:groupCollapsed\";\n\nexport function EntityExplorerApp({\n client,\n pathname,\n renderLink,\n basePath = \"\",\n showApiExplorer = true,\n surfaceIcons,\n}: EntityExplorerAppProps) {\n const { operations, spec } = useOperations(client);\n const surfaces = useMemo(() => getClickySurfaces(spec), [spec]);\n const surfaceGroups = useMemo(() => groupSurfacesByParent(surfaces), [surfaces]);\n const listHrefBySurface = useMemo(() => {\n const out: Record<string, string> = {};\n for (const surface of surfaces) {\n const listOp = findSurfaceListOperation(operations, surface.key);\n if (!listOp?.operation.operationId) continue;\n const href = buildCommandHref(basePath, {\n operation: listOp,\n request: { command: listOp.operation.operationId, autoRun: true },\n });\n if (href) out[surface.key] = href;\n }\n return out;\n }, [basePath, operations, surfaces]);\n const [collapsedGroups, setCollapsedGroups] = useState<Record<string, boolean>>(() =>\n readCollapsedGroups(),\n );\n const toggleGroup = useCallback((parent: string) => {\n setCollapsedGroups((prev) => {\n const next = { ...prev, [parent]: !prev[parent] };\n writeCollapsedGroups(next);\n return next;\n });\n }, []);\n const defaultSurface = useMemo(\n () => surfaces.find((surface) => !surface.admin) ?? surfaces[0],\n [surfaces],\n );\n const relativePath = useMemo(() => stripBasePath(pathname, basePath), [basePath, pathname]);\n const route = useMemo(() => parseExplorerRoute(relativePath), [relativePath]);\n const resolvedRoute = useMemo(() => resolveRouteSurface(route, surfaces), [route, surfaces]);\n const commandRuntime = useMemo<ClickyCommandRuntime>(\n () => ({\n client,\n hrefForCommand: (resolved) => buildCommandHref(basePath, resolved),\n onNavigate: (resolved) => {\n const href = buildCommandHref(basePath, resolved);\n if (!href || typeof window === \"undefined\") return;\n window.history.pushState(window.history.state, \"\", href);\n window.dispatchEvent(new PopStateEvent(\"popstate\"));\n },\n }),\n [basePath, client],\n );\n const { initialValues: commandInitialValues, autoRun: commandAutoRun } = useMemo(\n () =>\n resolvedRoute.kind === \"command\"\n ? readCommandQueryParams()\n : { initialValues: {}, autoRun: false },\n [resolvedRoute.kind, pathname],\n );\n const explorerDefinition = useMemo(\n () => ({\n key: \"explorer\",\n title: \"API Explorer\",\n description: \"Every operation exposed by the current OpenAPI spec.\",\n }),\n [],\n );\n\n useEffect(() => {\n if (\n typeof window === \"undefined\" ||\n defaultSurface == null ||\n relativePath !== \"/\" ||\n window.location.pathname !== withBasePath(basePath, \"/\")\n ) {\n return;\n }\n\n const target = withBasePath(basePath, `/${defaultSurface.key}`);\n window.history.replaceState(window.history.state, \"\", target);\n window.dispatchEvent(new PopStateEvent(\"popstate\"));\n }, [basePath, defaultSurface, relativePath]);\n\n return (\n <div className=\"flex h-full\">\n <aside className=\"flex w-64 shrink-0 flex-col border-r border-border bg-muted/30 p-4\">\n <div className=\"mb-6\">\n <div className=\"text-sm font-semibold\">{spec?.info.title ?? \"Clicky Explorer\"}</div>\n <div className=\"text-xs text-muted-foreground\">Metadata-driven entity explorer</div>\n </div>\n <nav className=\"flex flex-col gap-2\">\n {surfaceGroups.map((group) => {\n const collapsed = collapsedGroups[group.parent] ?? false;\n return (\n <div key={group.parent} className=\"flex flex-col\">\n <button\n type=\"button\"\n onClick={() => toggleGroup(group.parent)}\n aria-expanded={!collapsed}\n className=\"flex items-center gap-2 rounded-md px-2 py-1.5 text-xs font-semibold uppercase tracking-wide text-muted-foreground transition-colors hover:bg-accent/40\"\n >\n {surfaceIcons?.[group.parent] != null && (\n <span className=\"flex h-4 w-4 items-center justify-center text-current\">\n {surfaceIcons[group.parent]}\n </span>\n )}\n <span className=\"flex-1 text-left\">{group.label}</span>\n <span aria-hidden className=\"text-[0.65rem] opacity-60\">\n {collapsed ? \"▸\" : \"▾\"}\n </span>\n </button>\n {!collapsed && (\n <div className=\"ml-2 mt-1 flex flex-col gap-1 border-l border-border/60 pl-2\">\n {group.surfaces.map((surface) =>\n renderLink({\n key: surface.key,\n to:\n listHrefBySurface[surface.key] ??\n withBasePath(basePath, `/${surface.key}`),\n className: navLinkClassName(\n isSurfaceRouteActive(resolvedRoute, surface.key),\n ),\n children: surface.title,\n }),\n )}\n </div>\n )}\n </div>\n );\n })}\n {showApiExplorer &&\n renderLink({\n key: explorerDefinition.key,\n to: withBasePath(basePath, \"/explorer\"),\n className: navLinkClassName(\n resolvedRoute.kind === \"explorer\" || resolvedRoute.kind === \"command\",\n ),\n children: explorerDefinition.title,\n })}\n </nav>\n <div className=\"mt-auto pt-4\">\n <ThemeSwitcher />\n </div>\n </aside>\n\n <main className=\"flex-1 overflow-auto p-6\">\n {resolvedRoute.kind === \"surface\" ? (\n resolvedRoute.surface ? (\n <OperationCatalog\n definition={makeSurfaceDefinition(resolvedRoute.surface)}\n entities={[resolvedRoute.surface.entity]}\n client={client}\n renderLink={renderLink}\n surfaceKey={resolvedRoute.surface.key}\n commandRuntime={commandRuntime}\n />\n ) : (\n <UnknownSurface surfaceKey={resolvedRoute.surfaceKey} />\n )\n ) : resolvedRoute.kind === \"entity\" ? (\n resolvedRoute.surface ? (\n <OperationEntityPage\n definition={makeSurfaceDefinition(resolvedRoute.surface)}\n entities={[resolvedRoute.surface.entity]}\n client={client}\n renderLink={renderLink}\n surfaceKey={resolvedRoute.surface.key}\n backHref={withBasePath(basePath, `/${resolvedRoute.surface.key}`)}\n backLabel={`Back to ${resolvedRoute.surface.title}`}\n commandRuntime={commandRuntime}\n {...(resolvedRoute.id ? { id: resolvedRoute.id } : {})}\n />\n ) : (\n <UnknownSurface surfaceKey={resolvedRoute.surfaceKey} />\n )\n ) : resolvedRoute.kind === \"command\" ? (\n <OperationCommandPage\n client={client}\n backHref={withBasePath(basePath, \"/explorer\")}\n backLabel=\"Back to API Explorer\"\n renderLink={renderLink}\n commandRuntime={commandRuntime}\n initialValues={commandInitialValues}\n autoRun={commandAutoRun}\n {...(resolvedRoute.operationId ? { operationId: resolvedRoute.operationId } : {})}\n />\n ) : resolvedRoute.kind === \"explorer\" ? (\n <OperationCatalog\n definition={explorerDefinition}\n entities={[]}\n allOperations\n client={client}\n renderLink={renderLink}\n commandRuntime={commandRuntime}\n />\n ) : defaultSurface == null ? (\n <div className=\"text-sm text-muted-foreground\">Loading surfaces…</div>\n ) : (\n <div className=\"text-sm text-muted-foreground\">Redirecting…</div>\n )}\n </main>\n </div>\n );\n}\n\ntype ExplorerRoute =\n | { kind: \"root\" }\n | { kind: \"explorer\" }\n | { kind: \"command\"; operationId?: string }\n | { kind: \"surface\"; surfaceKey: string; surface?: ClickySurface }\n | {\n kind: \"entity\";\n surfaceKey: string;\n surface?: ClickySurface;\n id?: string;\n };\n\nfunction parseExplorerRoute(pathname: string): ExplorerRoute {\n const normalized = trimTrailingSlash(pathname) || \"/\";\n if (normalized === \"/\") {\n return { kind: \"root\" };\n }\n\n const segments = normalized.replace(/^\\/+/, \"\").split(\"/\");\n if (segments[0] === \"explorer\") {\n return { kind: \"explorer\" };\n }\n if (segments[0] === \"commands\") {\n return segments[1] ? { kind: \"command\", operationId: segments[1] } : { kind: \"command\" };\n }\n const surfaceKey = segments[0] ?? \"\";\n if (segments[1]) {\n return {\n kind: \"entity\",\n surfaceKey,\n id: decodeURIComponent(segments[1]),\n };\n }\n return { kind: \"surface\", surfaceKey };\n}\n\nfunction resolveRouteSurface(route: ExplorerRoute, surfaces: ClickySurface[]): ExplorerRoute {\n if (route.kind !== \"surface\" && route.kind !== \"entity\") {\n return route;\n }\n const surface = surfaces.find((item) => item.key === route.surfaceKey);\n return surface ? { ...route, surface } : route;\n}\n\nfunction isSurfaceRouteActive(route: ExplorerRoute, surfaceKey: string) {\n return (\n (route.kind === \"surface\" && route.surfaceKey === surfaceKey) ||\n (route.kind === \"entity\" && route.surfaceKey === surfaceKey)\n );\n}\n\nfunction navLinkClassName(active: boolean) {\n return [\n \"rounded-md px-2 py-1.5 text-sm transition-colors\",\n active ? \"bg-accent text-accent-foreground\" : \"text-foreground hover:bg-accent\",\n ].join(\" \");\n}\n\nfunction stripBasePath(pathname: string, basePath: string) {\n const base = trimTrailingSlash(basePath);\n if (!base || base === \"/\") {\n return trimTrailingSlash(pathname) || \"/\";\n }\n if (pathname === base) {\n return \"/\";\n }\n if (pathname.startsWith(`${base}/`)) {\n return trimTrailingSlash(pathname.slice(base.length)) || \"/\";\n }\n return trimTrailingSlash(pathname) || \"/\";\n}\n\nfunction withBasePath(basePath: string, pathname: string) {\n const base = trimTrailingSlash(basePath);\n if (!base || base === \"/\") {\n return pathname;\n }\n return `${base}${pathname}`;\n}\n\nfunction trimTrailingSlash(value: string) {\n if (!value) return \"\";\n return value.length > 1 ? value.replace(/\\/+$/, \"\") : value;\n}\n\nfunction UnknownSurface({ surfaceKey }: { surfaceKey: string }) {\n return (\n <div className=\"p-6 text-sm text-muted-foreground\">\n Unknown surface: <code>{surfaceKey}</code>\n </div>\n );\n}\n\nconst AUTORUN_QUERY_PARAM = \"__autoRun\";\nconst ARG_QUERY_PREFIX = \"__arg\";\n\nfunction buildCommandHref(basePath: string, resolved: ClickyResolvedCommand): string | undefined {\n const commandId = resolved.operation?.operation.operationId ?? resolved.request.command;\n if (!commandId) return undefined;\n\n const meta = resolved.operation?.operation[\"x-clicky\"];\n const args = resolved.request.args ?? [];\n const flags = resolved.request.flags ?? {};\n\n // Entity `get` commands route to the surface detail URL: /<surface>/<id>?<flags>\n if (meta?.verb === \"get\" && meta?.scope === \"entity\" && meta.surface && args[0]) {\n const search = new URLSearchParams();\n for (const [key, value] of Object.entries(flags)) {\n if (value !== undefined && value !== \"\") {\n search.set(key, value);\n }\n }\n const query = search.toString();\n const suffix = query ? `?${query}` : \"\";\n return withBasePath(\n basePath,\n `/${encodeURIComponent(meta.surface)}/${encodeURIComponent(args[0])}${suffix}`,\n );\n }\n\n const search = new URLSearchParams();\n args.forEach((value, index) => {\n if (value !== undefined && value !== \"\") {\n search.set(`${ARG_QUERY_PREFIX}${index}`, value);\n }\n });\n for (const [key, value] of Object.entries(flags)) {\n if (value !== undefined && value !== \"\") {\n search.set(key, value);\n }\n }\n if (resolved.request.autoRun) {\n search.set(AUTORUN_QUERY_PARAM, \"1\");\n }\n\n const query = search.toString();\n const suffix = query ? `?${query}` : \"\";\n return withBasePath(basePath, `/commands/${encodeURIComponent(commandId)}${suffix}`);\n}\n\ntype SurfaceGroup = {\n parent: string; // the slug; \"\" for surfaces that declared no parent\n label: string; // display name in the sidebar\n surfaces: ClickySurface[];\n};\n\n// groupSurfacesByParent buckets surfaces by their ClickySurface.parent slug,\n// preserving the order surfaces appeared in the spec. Surfaces with no parent\n// fall into a trailing \"\" bucket labelled \"Other\".\nfunction groupSurfacesByParent(surfaces: ClickySurface[]): SurfaceGroup[] {\n const order: string[] = [];\n const buckets = new Map<string, ClickySurface[]>();\n for (const surface of surfaces) {\n const parent = surface.parent ?? \"\";\n if (!buckets.has(parent)) {\n buckets.set(parent, []);\n order.push(parent);\n }\n buckets.get(parent)!.push(surface);\n }\n return order.map((parent) => ({\n parent,\n label: parent === \"\" ? \"Other\" : titleCase(parent),\n surfaces: buckets.get(parent)!,\n }));\n}\n\nfunction titleCase(value: string): string {\n if (!value) return value;\n return value.charAt(0).toUpperCase() + value.slice(1);\n}\n\nfunction readCollapsedGroups(): Record<string, boolean> {\n if (typeof window === \"undefined\") return {};\n try {\n const raw = window.localStorage.getItem(SURFACE_GROUP_STATE_KEY);\n if (!raw) return {};\n const parsed = JSON.parse(raw);\n return parsed && typeof parsed === \"object\" ? (parsed as Record<string, boolean>) : {};\n } catch {\n return {};\n }\n}\n\nfunction writeCollapsedGroups(state: Record<string, boolean>) {\n if (typeof window === \"undefined\") return;\n try {\n window.localStorage.setItem(SURFACE_GROUP_STATE_KEY, JSON.stringify(state));\n } catch {\n // Quota / private-mode failures are safe to swallow — sidebar state is\n // purely a UX nicety, not a correctness signal.\n }\n}\n\nfunction readCommandQueryParams(): { initialValues: Record<string, string>; autoRun: boolean } {\n if (typeof window === \"undefined\") {\n return { initialValues: {}, autoRun: false };\n }\n const search = new URLSearchParams(window.location.search);\n const initialValues: Record<string, string> = {};\n let autoRun = false;\n const positional: string[] = [];\n\n for (const [key, value] of search.entries()) {\n if (key === AUTORUN_QUERY_PARAM) {\n autoRun = value === \"1\" || value === \"true\";\n continue;\n }\n if (key.startsWith(ARG_QUERY_PREFIX)) {\n const index = Number.parseInt(key.slice(ARG_QUERY_PREFIX.length), 10);\n if (Number.isFinite(index) && index >= 0) {\n positional[index] = value;\n }\n continue;\n }\n initialValues[key] = value;\n }\n\n const packedArgs = positional.filter((value) => value !== undefined).join(\" \");\n if (packedArgs !== \"\") {\n initialValues.args = packedArgs;\n }\n\n return { initialValues, autoRun };\n}\n"],"names":["useOperations","useMemo","getClickySurfaces","findSurfaceListOperation","useState","useCallback","useEffect","jsxs","jsx","ThemeSwitcher","OperationCatalog","makeSurfaceDefinition","OperationEntityPage","OperationCommandPage","search","query","suffix"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EntityExplorerApp.cjs","sources":["../../src/rpc/EntityExplorerApp.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useState, type ReactNode } from \"react\";\nimport { ThemeSwitcher } from \"../components/theme-switcher\";\nimport type { ClickyCommandRuntime, ClickyResolvedCommand } from \"../data/Clicky\";\nimport {\n findSurfaceListOperation,\n getClickySurfaces,\n makeSurfaceDefinition,\n} from \"./clickyMetadata\";\nimport type { RenderLink } from \"./EndpointList\";\nimport { OperationCatalog } from \"./OperationCatalog\";\nimport { OperationCommandPage } from \"./OperationCommandPage\";\nimport { OperationEntityPage } from \"./OperationEntityPage\";\nimport type { ClickySurface } from \"./types\";\nimport type { OperationsApiClient } from \"./useOperations\";\nimport { useOperations } from \"./useOperations\";\n\nexport type EntityExplorerAppProps = {\n client: OperationsApiClient;\n pathname: string;\n renderLink: RenderLink;\n basePath?: string;\n showApiExplorer?: boolean;\n // surfaceIcons maps a ClickySurface.parent slug to a ReactNode rendered next\n // to the group label. Lets the host app drop in brand SVGs (e.g. Xero,\n // Takealot) without coupling clicky-ui to any specific iconography.\n surfaceIcons?: Record<string, ReactNode>;\n};\n\n// SURFACE_GROUP_STATE_KEY persists open/closed state of sidebar groups across\n// reloads. Single localStorage entry, not per-user — operator UI only.\nconst SURFACE_GROUP_STATE_KEY = \"clicky-ui:sidebar:groupCollapsed\";\n\nexport function EntityExplorerApp({\n client,\n pathname,\n renderLink,\n basePath = \"\",\n showApiExplorer = true,\n surfaceIcons,\n}: EntityExplorerAppProps) {\n const { operations, spec } = useOperations(client);\n const surfaces = useMemo(() => getClickySurfaces(spec), [spec]);\n const surfaceGroups = useMemo(() => groupSurfacesByParent(surfaces), [surfaces]);\n const listHrefBySurface = useMemo(() => {\n const out: Record<string, string> = {};\n for (const surface of surfaces) {\n const listOp = findSurfaceListOperation(operations, surface.key);\n if (!listOp?.operation.operationId) continue;\n const href = buildCommandHref(basePath, {\n operation: listOp,\n request: { command: listOp.operation.operationId, autoRun: true },\n });\n if (href) out[surface.key] = href;\n }\n return out;\n }, [basePath, operations, surfaces]);\n const [collapsedGroups, setCollapsedGroups] = useState<Record<string, boolean>>(() =>\n readCollapsedGroups(),\n );\n const toggleGroup = useCallback((parent: string) => {\n setCollapsedGroups((prev) => {\n const next = { ...prev, [parent]: !prev[parent] };\n writeCollapsedGroups(next);\n return next;\n });\n }, []);\n const defaultSurface = useMemo(\n () => surfaces.find((surface) => !surface.admin) ?? surfaces[0],\n [surfaces],\n );\n const relativePath = useMemo(() => stripBasePath(pathname, basePath), [basePath, pathname]);\n const route = useMemo(() => parseExplorerRoute(relativePath), [relativePath]);\n const resolvedRoute = useMemo(() => resolveRouteSurface(route, surfaces), [route, surfaces]);\n const commandRuntime = useMemo<ClickyCommandRuntime>(\n () => ({\n client,\n hrefForCommand: (resolved) => buildCommandHref(basePath, resolved),\n onNavigate: (resolved) => {\n const href = buildCommandHref(basePath, resolved);\n if (!href || typeof window === \"undefined\") return;\n window.history.pushState(window.history.state, \"\", href);\n window.dispatchEvent(new PopStateEvent(\"popstate\"));\n },\n }),\n [basePath, client],\n );\n const { initialValues: commandInitialValues, autoRun: commandAutoRun } = useMemo(\n () =>\n resolvedRoute.kind === \"command\"\n ? readCommandQueryParams()\n : { initialValues: {}, autoRun: false },\n [resolvedRoute.kind, pathname],\n );\n const explorerDefinition = useMemo(\n () => ({\n key: \"explorer\",\n title: \"API Explorer\",\n description: \"Every operation exposed by the current OpenAPI spec.\",\n }),\n [],\n );\n\n useEffect(() => {\n if (\n typeof window === \"undefined\" ||\n defaultSurface == null ||\n relativePath !== \"/\" ||\n window.location.pathname !== withBasePath(basePath, \"/\")\n ) {\n return;\n }\n\n const target = withBasePath(basePath, `/${defaultSurface.key}`);\n window.history.replaceState(window.history.state, \"\", target);\n window.dispatchEvent(new PopStateEvent(\"popstate\"));\n }, [basePath, defaultSurface, relativePath]);\n\n return (\n <div className=\"flex h-full\">\n <aside className=\"flex w-64 shrink-0 flex-col border-r border-border bg-muted/30 p-4\">\n <div className=\"mb-6\">\n <div className=\"text-sm font-semibold\">{spec?.info.title ?? \"Clicky Explorer\"}</div>\n <div className=\"text-xs text-muted-foreground\">Metadata-driven entity explorer</div>\n </div>\n <nav className=\"flex flex-col gap-2\">\n {surfaceGroups.map((group) => {\n const collapsed = collapsedGroups[group.parent] ?? false;\n return (\n <div key={group.parent} className=\"flex flex-col\">\n <button\n type=\"button\"\n onClick={() => toggleGroup(group.parent)}\n aria-expanded={!collapsed}\n className=\"flex items-center gap-2 rounded-md px-2 py-1.5 text-xs font-semibold uppercase tracking-wide text-muted-foreground transition-colors hover:bg-accent/40\"\n >\n {surfaceIcons?.[group.parent] != null && (\n <span className=\"flex h-4 w-4 items-center justify-center text-current\">\n {surfaceIcons[group.parent]}\n </span>\n )}\n <span className=\"flex-1 text-left\">{group.label}</span>\n <span aria-hidden className=\"text-[0.65rem] opacity-60\">\n {collapsed ? \"▸\" : \"▾\"}\n </span>\n </button>\n {!collapsed && (\n <div className=\"ml-2 mt-1 flex flex-col gap-1 border-l border-border/60 pl-2\">\n {group.surfaces.map((surface) =>\n renderLink({\n key: surface.key,\n to:\n listHrefBySurface[surface.key] ??\n withBasePath(basePath, `/${surface.key}`),\n className: navLinkClassName(\n isSurfaceRouteActive(resolvedRoute, surface.key),\n ),\n children: surface.title,\n }),\n )}\n </div>\n )}\n </div>\n );\n })}\n {showApiExplorer &&\n renderLink({\n key: explorerDefinition.key,\n to: withBasePath(basePath, \"/explorer\"),\n className: navLinkClassName(\n resolvedRoute.kind === \"explorer\" || resolvedRoute.kind === \"command\",\n ),\n children: explorerDefinition.title,\n })}\n </nav>\n <div className=\"mt-auto pt-4\">\n <ThemeSwitcher />\n </div>\n </aside>\n\n <main className=\"flex-1 overflow-auto p-6\">\n {resolvedRoute.kind === \"surface\" ? (\n resolvedRoute.surface ? (\n <OperationCatalog\n definition={makeSurfaceDefinition(resolvedRoute.surface)}\n entities={[resolvedRoute.surface.entity]}\n client={client}\n renderLink={renderLink}\n surfaceKey={resolvedRoute.surface.key}\n commandRuntime={commandRuntime}\n />\n ) : (\n <UnknownSurface surfaceKey={resolvedRoute.surfaceKey} />\n )\n ) : resolvedRoute.kind === \"entity\" ? (\n resolvedRoute.surface ? (\n <OperationEntityPage\n definition={makeSurfaceDefinition(resolvedRoute.surface)}\n entities={[resolvedRoute.surface.entity]}\n client={client}\n renderLink={renderLink}\n surfaceKey={resolvedRoute.surface.key}\n backHref={withBasePath(basePath, `/${resolvedRoute.surface.key}`)}\n backLabel={`Back to ${resolvedRoute.surface.title}`}\n commandRuntime={commandRuntime}\n {...(resolvedRoute.id ? { id: resolvedRoute.id } : {})}\n />\n ) : (\n <UnknownSurface surfaceKey={resolvedRoute.surfaceKey} />\n )\n ) : resolvedRoute.kind === \"command\" ? (\n <OperationCommandPage\n client={client}\n backHref={withBasePath(basePath, \"/explorer\")}\n backLabel=\"Back to API Explorer\"\n renderLink={renderLink}\n commandRuntime={commandRuntime}\n initialValues={commandInitialValues}\n autoRun={commandAutoRun}\n {...(resolvedRoute.operationId ? { operationId: resolvedRoute.operationId } : {})}\n />\n ) : resolvedRoute.kind === \"explorer\" ? (\n <OperationCatalog\n definition={explorerDefinition}\n entities={[]}\n allOperations\n client={client}\n renderLink={renderLink}\n commandRuntime={commandRuntime}\n />\n ) : defaultSurface == null ? (\n <div className=\"text-sm text-muted-foreground\">Loading surfaces…</div>\n ) : (\n <div className=\"text-sm text-muted-foreground\">Redirecting…</div>\n )}\n </main>\n </div>\n );\n}\n\ntype ExplorerRoute =\n | { kind: \"root\" }\n | { kind: \"explorer\" }\n | { kind: \"command\"; operationId?: string }\n | { kind: \"surface\"; surfaceKey: string; surface?: ClickySurface }\n | {\n kind: \"entity\";\n surfaceKey: string;\n surface?: ClickySurface;\n id?: string;\n };\n\nfunction parseExplorerRoute(pathname: string): ExplorerRoute {\n const normalized = trimTrailingSlash(pathname) || \"/\";\n if (normalized === \"/\") {\n return { kind: \"root\" };\n }\n\n const segments = normalized.replace(/^\\/+/, \"\").split(\"/\");\n if (segments[0] === \"explorer\") {\n return { kind: \"explorer\" };\n }\n if (segments[0] === \"commands\") {\n return segments[1] ? { kind: \"command\", operationId: segments[1] } : { kind: \"command\" };\n }\n const surfaceKey = segments[0] ?? \"\";\n if (segments[1]) {\n return {\n kind: \"entity\",\n surfaceKey,\n id: decodeURIComponent(segments[1]),\n };\n }\n return { kind: \"surface\", surfaceKey };\n}\n\nfunction resolveRouteSurface(route: ExplorerRoute, surfaces: ClickySurface[]): ExplorerRoute {\n if (route.kind !== \"surface\" && route.kind !== \"entity\") {\n return route;\n }\n const surface = surfaces.find((item) => item.key === route.surfaceKey);\n return surface ? { ...route, surface } : route;\n}\n\nfunction isSurfaceRouteActive(route: ExplorerRoute, surfaceKey: string) {\n return (\n (route.kind === \"surface\" && route.surfaceKey === surfaceKey) ||\n (route.kind === \"entity\" && route.surfaceKey === surfaceKey)\n );\n}\n\nfunction navLinkClassName(active: boolean) {\n return [\n \"rounded-md px-2 py-1.5 text-sm transition-colors\",\n active ? \"bg-accent text-accent-foreground\" : \"text-foreground hover:bg-accent\",\n ].join(\" \");\n}\n\nfunction stripBasePath(pathname: string, basePath: string) {\n const base = trimTrailingSlash(basePath);\n if (!base || base === \"/\") {\n return trimTrailingSlash(pathname) || \"/\";\n }\n if (pathname === base) {\n return \"/\";\n }\n if (pathname.startsWith(`${base}/`)) {\n return trimTrailingSlash(pathname.slice(base.length)) || \"/\";\n }\n return trimTrailingSlash(pathname) || \"/\";\n}\n\nfunction withBasePath(basePath: string, pathname: string) {\n const base = trimTrailingSlash(basePath);\n if (!base || base === \"/\") {\n return pathname;\n }\n return `${base}${pathname}`;\n}\n\nfunction trimTrailingSlash(value: string) {\n if (!value) return \"\";\n return value.length > 1 ? value.replace(/\\/+$/, \"\") : value;\n}\n\nfunction UnknownSurface({ surfaceKey }: { surfaceKey: string }) {\n return (\n <div className=\"p-6 text-sm text-muted-foreground\">\n Unknown surface: <code>{surfaceKey}</code>\n </div>\n );\n}\n\nconst AUTORUN_QUERY_PARAM = \"autoRun\";\nconst LEGACY_AUTORUN_QUERY_PARAM = \"__autoRun\";\nconst ARG_QUERY_PREFIX = \"__arg\";\n\nfunction buildCommandHref(basePath: string, resolved: ClickyResolvedCommand): string | undefined {\n const commandId = resolved.operation?.operation.operationId ?? resolved.request.command;\n if (!commandId) return undefined;\n\n const meta = resolved.operation?.operation[\"x-clicky\"];\n const args = resolved.request.args ?? [];\n const flags = resolved.request.flags ?? {};\n\n // Entity `get` commands route to the surface detail URL: /<surface>/<id>?<flags>\n if (meta?.verb === \"get\" && meta?.scope === \"entity\" && meta.surface && args[0]) {\n const search = new URLSearchParams();\n for (const [key, value] of Object.entries(flags)) {\n if (value !== undefined && value !== \"\") {\n search.set(key, value);\n }\n }\n const query = search.toString();\n const suffix = query ? `?${query}` : \"\";\n return withBasePath(\n basePath,\n `/${encodeURIComponent(meta.surface)}/${encodeURIComponent(args[0])}${suffix}`,\n );\n }\n\n const search = new URLSearchParams();\n args.forEach((value, index) => {\n if (value !== undefined && value !== \"\") {\n search.set(`${ARG_QUERY_PREFIX}${index}`, value);\n }\n });\n for (const [key, value] of Object.entries(flags)) {\n if (value !== undefined && value !== \"\") {\n search.set(key, value);\n }\n }\n if (resolved.request.autoRun) {\n search.set(AUTORUN_QUERY_PARAM, \"1\");\n }\n\n const query = search.toString();\n const suffix = query ? `?${query}` : \"\";\n return withBasePath(basePath, `/commands/${encodeURIComponent(commandId)}${suffix}`);\n}\n\ntype SurfaceGroup = {\n parent: string; // the slug; \"\" for surfaces that declared no parent\n label: string; // display name in the sidebar\n surfaces: ClickySurface[];\n};\n\n// groupSurfacesByParent buckets surfaces by their ClickySurface.parent slug,\n// preserving the order surfaces appeared in the spec. Surfaces with no parent\n// fall into a trailing \"\" bucket labelled \"Other\".\nfunction groupSurfacesByParent(surfaces: ClickySurface[]): SurfaceGroup[] {\n const order: string[] = [];\n const buckets = new Map<string, ClickySurface[]>();\n for (const surface of surfaces) {\n const parent = surface.parent ?? \"\";\n if (!buckets.has(parent)) {\n buckets.set(parent, []);\n order.push(parent);\n }\n buckets.get(parent)!.push(surface);\n }\n return order.map((parent) => ({\n parent,\n label: parent === \"\" ? \"Other\" : titleCase(parent),\n surfaces: buckets.get(parent)!,\n }));\n}\n\nfunction titleCase(value: string): string {\n if (!value) return value;\n return value.charAt(0).toUpperCase() + value.slice(1);\n}\n\nfunction readCollapsedGroups(): Record<string, boolean> {\n if (typeof window === \"undefined\") return {};\n try {\n const raw = window.localStorage.getItem(SURFACE_GROUP_STATE_KEY);\n if (!raw) return {};\n const parsed = JSON.parse(raw);\n return parsed && typeof parsed === \"object\" ? (parsed as Record<string, boolean>) : {};\n } catch {\n return {};\n }\n}\n\nfunction writeCollapsedGroups(state: Record<string, boolean>) {\n if (typeof window === \"undefined\") return;\n try {\n window.localStorage.setItem(SURFACE_GROUP_STATE_KEY, JSON.stringify(state));\n } catch {\n // Quota / private-mode failures are safe to swallow — sidebar state is\n // purely a UX nicety, not a correctness signal.\n }\n}\n\nfunction readCommandQueryParams(): { initialValues: Record<string, string>; autoRun: boolean } {\n if (typeof window === \"undefined\") {\n return { initialValues: {}, autoRun: false };\n }\n const search = new URLSearchParams(window.location.search);\n const initialValues: Record<string, string> = {};\n let autoRun = false;\n const positional: string[] = [];\n\n for (const [key, value] of search.entries()) {\n if (key === AUTORUN_QUERY_PARAM || key === LEGACY_AUTORUN_QUERY_PARAM) {\n autoRun = value === \"1\" || value === \"true\";\n continue;\n }\n if (key.startsWith(ARG_QUERY_PREFIX)) {\n const index = Number.parseInt(key.slice(ARG_QUERY_PREFIX.length), 10);\n if (Number.isFinite(index) && index >= 0) {\n positional[index] = value;\n }\n continue;\n }\n initialValues[key] = value;\n }\n\n const packedArgs = positional.filter((value) => value !== undefined).join(\" \");\n if (packedArgs !== \"\") {\n initialValues.args = packedArgs;\n }\n\n return { initialValues, autoRun };\n}\n"],"names":["useOperations","useMemo","getClickySurfaces","findSurfaceListOperation","useState","useCallback","useEffect","jsxs","jsx","ThemeSwitcher","OperationCatalog","makeSurfaceDefinition","OperationEntityPage","OperationCommandPage","search","query","suffix"],"mappings":"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"}
|
|
@@ -244,7 +244,8 @@ function UnknownSurface({ surfaceKey }) {
|
|
|
244
244
|
/* @__PURE__ */ jsx("code", { children: surfaceKey })
|
|
245
245
|
] });
|
|
246
246
|
}
|
|
247
|
-
const AUTORUN_QUERY_PARAM = "
|
|
247
|
+
const AUTORUN_QUERY_PARAM = "autoRun";
|
|
248
|
+
const LEGACY_AUTORUN_QUERY_PARAM = "__autoRun";
|
|
248
249
|
const ARG_QUERY_PREFIX = "__arg";
|
|
249
250
|
function buildCommandHref(basePath, resolved) {
|
|
250
251
|
var _a, _b;
|
|
@@ -333,7 +334,7 @@ function readCommandQueryParams() {
|
|
|
333
334
|
let autoRun = false;
|
|
334
335
|
const positional = [];
|
|
335
336
|
for (const [key, value] of search.entries()) {
|
|
336
|
-
if (key === AUTORUN_QUERY_PARAM) {
|
|
337
|
+
if (key === AUTORUN_QUERY_PARAM || key === LEGACY_AUTORUN_QUERY_PARAM) {
|
|
337
338
|
autoRun = value === "1" || value === "true";
|
|
338
339
|
continue;
|
|
339
340
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityExplorerApp.js","sources":["../../src/rpc/EntityExplorerApp.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useState, type ReactNode } from \"react\";\nimport { ThemeSwitcher } from \"../components/theme-switcher\";\nimport type { ClickyCommandRuntime, ClickyResolvedCommand } from \"../data/Clicky\";\nimport {\n findSurfaceListOperation,\n getClickySurfaces,\n makeSurfaceDefinition,\n} from \"./clickyMetadata\";\nimport type { RenderLink } from \"./EndpointList\";\nimport { OperationCatalog } from \"./OperationCatalog\";\nimport { OperationCommandPage } from \"./OperationCommandPage\";\nimport { OperationEntityPage } from \"./OperationEntityPage\";\nimport type { ClickySurface } from \"./types\";\nimport type { OperationsApiClient } from \"./useOperations\";\nimport { useOperations } from \"./useOperations\";\n\nexport type EntityExplorerAppProps = {\n client: OperationsApiClient;\n pathname: string;\n renderLink: RenderLink;\n basePath?: string;\n showApiExplorer?: boolean;\n // surfaceIcons maps a ClickySurface.parent slug to a ReactNode rendered next\n // to the group label. Lets the host app drop in brand SVGs (e.g. Xero,\n // Takealot) without coupling clicky-ui to any specific iconography.\n surfaceIcons?: Record<string, ReactNode>;\n};\n\n// SURFACE_GROUP_STATE_KEY persists open/closed state of sidebar groups across\n// reloads. Single localStorage entry, not per-user — operator UI only.\nconst SURFACE_GROUP_STATE_KEY = \"clicky-ui:sidebar:groupCollapsed\";\n\nexport function EntityExplorerApp({\n client,\n pathname,\n renderLink,\n basePath = \"\",\n showApiExplorer = true,\n surfaceIcons,\n}: EntityExplorerAppProps) {\n const { operations, spec } = useOperations(client);\n const surfaces = useMemo(() => getClickySurfaces(spec), [spec]);\n const surfaceGroups = useMemo(() => groupSurfacesByParent(surfaces), [surfaces]);\n const listHrefBySurface = useMemo(() => {\n const out: Record<string, string> = {};\n for (const surface of surfaces) {\n const listOp = findSurfaceListOperation(operations, surface.key);\n if (!listOp?.operation.operationId) continue;\n const href = buildCommandHref(basePath, {\n operation: listOp,\n request: { command: listOp.operation.operationId, autoRun: true },\n });\n if (href) out[surface.key] = href;\n }\n return out;\n }, [basePath, operations, surfaces]);\n const [collapsedGroups, setCollapsedGroups] = useState<Record<string, boolean>>(() =>\n readCollapsedGroups(),\n );\n const toggleGroup = useCallback((parent: string) => {\n setCollapsedGroups((prev) => {\n const next = { ...prev, [parent]: !prev[parent] };\n writeCollapsedGroups(next);\n return next;\n });\n }, []);\n const defaultSurface = useMemo(\n () => surfaces.find((surface) => !surface.admin) ?? surfaces[0],\n [surfaces],\n );\n const relativePath = useMemo(() => stripBasePath(pathname, basePath), [basePath, pathname]);\n const route = useMemo(() => parseExplorerRoute(relativePath), [relativePath]);\n const resolvedRoute = useMemo(() => resolveRouteSurface(route, surfaces), [route, surfaces]);\n const commandRuntime = useMemo<ClickyCommandRuntime>(\n () => ({\n client,\n hrefForCommand: (resolved) => buildCommandHref(basePath, resolved),\n onNavigate: (resolved) => {\n const href = buildCommandHref(basePath, resolved);\n if (!href || typeof window === \"undefined\") return;\n window.history.pushState(window.history.state, \"\", href);\n window.dispatchEvent(new PopStateEvent(\"popstate\"));\n },\n }),\n [basePath, client],\n );\n const { initialValues: commandInitialValues, autoRun: commandAutoRun } = useMemo(\n () =>\n resolvedRoute.kind === \"command\"\n ? readCommandQueryParams()\n : { initialValues: {}, autoRun: false },\n [resolvedRoute.kind, pathname],\n );\n const explorerDefinition = useMemo(\n () => ({\n key: \"explorer\",\n title: \"API Explorer\",\n description: \"Every operation exposed by the current OpenAPI spec.\",\n }),\n [],\n );\n\n useEffect(() => {\n if (\n typeof window === \"undefined\" ||\n defaultSurface == null ||\n relativePath !== \"/\" ||\n window.location.pathname !== withBasePath(basePath, \"/\")\n ) {\n return;\n }\n\n const target = withBasePath(basePath, `/${defaultSurface.key}`);\n window.history.replaceState(window.history.state, \"\", target);\n window.dispatchEvent(new PopStateEvent(\"popstate\"));\n }, [basePath, defaultSurface, relativePath]);\n\n return (\n <div className=\"flex h-full\">\n <aside className=\"flex w-64 shrink-0 flex-col border-r border-border bg-muted/30 p-4\">\n <div className=\"mb-6\">\n <div className=\"text-sm font-semibold\">{spec?.info.title ?? \"Clicky Explorer\"}</div>\n <div className=\"text-xs text-muted-foreground\">Metadata-driven entity explorer</div>\n </div>\n <nav className=\"flex flex-col gap-2\">\n {surfaceGroups.map((group) => {\n const collapsed = collapsedGroups[group.parent] ?? false;\n return (\n <div key={group.parent} className=\"flex flex-col\">\n <button\n type=\"button\"\n onClick={() => toggleGroup(group.parent)}\n aria-expanded={!collapsed}\n className=\"flex items-center gap-2 rounded-md px-2 py-1.5 text-xs font-semibold uppercase tracking-wide text-muted-foreground transition-colors hover:bg-accent/40\"\n >\n {surfaceIcons?.[group.parent] != null && (\n <span className=\"flex h-4 w-4 items-center justify-center text-current\">\n {surfaceIcons[group.parent]}\n </span>\n )}\n <span className=\"flex-1 text-left\">{group.label}</span>\n <span aria-hidden className=\"text-[0.65rem] opacity-60\">\n {collapsed ? \"▸\" : \"▾\"}\n </span>\n </button>\n {!collapsed && (\n <div className=\"ml-2 mt-1 flex flex-col gap-1 border-l border-border/60 pl-2\">\n {group.surfaces.map((surface) =>\n renderLink({\n key: surface.key,\n to:\n listHrefBySurface[surface.key] ??\n withBasePath(basePath, `/${surface.key}`),\n className: navLinkClassName(\n isSurfaceRouteActive(resolvedRoute, surface.key),\n ),\n children: surface.title,\n }),\n )}\n </div>\n )}\n </div>\n );\n })}\n {showApiExplorer &&\n renderLink({\n key: explorerDefinition.key,\n to: withBasePath(basePath, \"/explorer\"),\n className: navLinkClassName(\n resolvedRoute.kind === \"explorer\" || resolvedRoute.kind === \"command\",\n ),\n children: explorerDefinition.title,\n })}\n </nav>\n <div className=\"mt-auto pt-4\">\n <ThemeSwitcher />\n </div>\n </aside>\n\n <main className=\"flex-1 overflow-auto p-6\">\n {resolvedRoute.kind === \"surface\" ? (\n resolvedRoute.surface ? (\n <OperationCatalog\n definition={makeSurfaceDefinition(resolvedRoute.surface)}\n entities={[resolvedRoute.surface.entity]}\n client={client}\n renderLink={renderLink}\n surfaceKey={resolvedRoute.surface.key}\n commandRuntime={commandRuntime}\n />\n ) : (\n <UnknownSurface surfaceKey={resolvedRoute.surfaceKey} />\n )\n ) : resolvedRoute.kind === \"entity\" ? (\n resolvedRoute.surface ? (\n <OperationEntityPage\n definition={makeSurfaceDefinition(resolvedRoute.surface)}\n entities={[resolvedRoute.surface.entity]}\n client={client}\n renderLink={renderLink}\n surfaceKey={resolvedRoute.surface.key}\n backHref={withBasePath(basePath, `/${resolvedRoute.surface.key}`)}\n backLabel={`Back to ${resolvedRoute.surface.title}`}\n commandRuntime={commandRuntime}\n {...(resolvedRoute.id ? { id: resolvedRoute.id } : {})}\n />\n ) : (\n <UnknownSurface surfaceKey={resolvedRoute.surfaceKey} />\n )\n ) : resolvedRoute.kind === \"command\" ? (\n <OperationCommandPage\n client={client}\n backHref={withBasePath(basePath, \"/explorer\")}\n backLabel=\"Back to API Explorer\"\n renderLink={renderLink}\n commandRuntime={commandRuntime}\n initialValues={commandInitialValues}\n autoRun={commandAutoRun}\n {...(resolvedRoute.operationId ? { operationId: resolvedRoute.operationId } : {})}\n />\n ) : resolvedRoute.kind === \"explorer\" ? (\n <OperationCatalog\n definition={explorerDefinition}\n entities={[]}\n allOperations\n client={client}\n renderLink={renderLink}\n commandRuntime={commandRuntime}\n />\n ) : defaultSurface == null ? (\n <div className=\"text-sm text-muted-foreground\">Loading surfaces…</div>\n ) : (\n <div className=\"text-sm text-muted-foreground\">Redirecting…</div>\n )}\n </main>\n </div>\n );\n}\n\ntype ExplorerRoute =\n | { kind: \"root\" }\n | { kind: \"explorer\" }\n | { kind: \"command\"; operationId?: string }\n | { kind: \"surface\"; surfaceKey: string; surface?: ClickySurface }\n | {\n kind: \"entity\";\n surfaceKey: string;\n surface?: ClickySurface;\n id?: string;\n };\n\nfunction parseExplorerRoute(pathname: string): ExplorerRoute {\n const normalized = trimTrailingSlash(pathname) || \"/\";\n if (normalized === \"/\") {\n return { kind: \"root\" };\n }\n\n const segments = normalized.replace(/^\\/+/, \"\").split(\"/\");\n if (segments[0] === \"explorer\") {\n return { kind: \"explorer\" };\n }\n if (segments[0] === \"commands\") {\n return segments[1] ? { kind: \"command\", operationId: segments[1] } : { kind: \"command\" };\n }\n const surfaceKey = segments[0] ?? \"\";\n if (segments[1]) {\n return {\n kind: \"entity\",\n surfaceKey,\n id: decodeURIComponent(segments[1]),\n };\n }\n return { kind: \"surface\", surfaceKey };\n}\n\nfunction resolveRouteSurface(route: ExplorerRoute, surfaces: ClickySurface[]): ExplorerRoute {\n if (route.kind !== \"surface\" && route.kind !== \"entity\") {\n return route;\n }\n const surface = surfaces.find((item) => item.key === route.surfaceKey);\n return surface ? { ...route, surface } : route;\n}\n\nfunction isSurfaceRouteActive(route: ExplorerRoute, surfaceKey: string) {\n return (\n (route.kind === \"surface\" && route.surfaceKey === surfaceKey) ||\n (route.kind === \"entity\" && route.surfaceKey === surfaceKey)\n );\n}\n\nfunction navLinkClassName(active: boolean) {\n return [\n \"rounded-md px-2 py-1.5 text-sm transition-colors\",\n active ? \"bg-accent text-accent-foreground\" : \"text-foreground hover:bg-accent\",\n ].join(\" \");\n}\n\nfunction stripBasePath(pathname: string, basePath: string) {\n const base = trimTrailingSlash(basePath);\n if (!base || base === \"/\") {\n return trimTrailingSlash(pathname) || \"/\";\n }\n if (pathname === base) {\n return \"/\";\n }\n if (pathname.startsWith(`${base}/`)) {\n return trimTrailingSlash(pathname.slice(base.length)) || \"/\";\n }\n return trimTrailingSlash(pathname) || \"/\";\n}\n\nfunction withBasePath(basePath: string, pathname: string) {\n const base = trimTrailingSlash(basePath);\n if (!base || base === \"/\") {\n return pathname;\n }\n return `${base}${pathname}`;\n}\n\nfunction trimTrailingSlash(value: string) {\n if (!value) return \"\";\n return value.length > 1 ? value.replace(/\\/+$/, \"\") : value;\n}\n\nfunction UnknownSurface({ surfaceKey }: { surfaceKey: string }) {\n return (\n <div className=\"p-6 text-sm text-muted-foreground\">\n Unknown surface: <code>{surfaceKey}</code>\n </div>\n );\n}\n\nconst AUTORUN_QUERY_PARAM = \"__autoRun\";\nconst ARG_QUERY_PREFIX = \"__arg\";\n\nfunction buildCommandHref(basePath: string, resolved: ClickyResolvedCommand): string | undefined {\n const commandId = resolved.operation?.operation.operationId ?? resolved.request.command;\n if (!commandId) return undefined;\n\n const meta = resolved.operation?.operation[\"x-clicky\"];\n const args = resolved.request.args ?? [];\n const flags = resolved.request.flags ?? {};\n\n // Entity `get` commands route to the surface detail URL: /<surface>/<id>?<flags>\n if (meta?.verb === \"get\" && meta?.scope === \"entity\" && meta.surface && args[0]) {\n const search = new URLSearchParams();\n for (const [key, value] of Object.entries(flags)) {\n if (value !== undefined && value !== \"\") {\n search.set(key, value);\n }\n }\n const query = search.toString();\n const suffix = query ? `?${query}` : \"\";\n return withBasePath(\n basePath,\n `/${encodeURIComponent(meta.surface)}/${encodeURIComponent(args[0])}${suffix}`,\n );\n }\n\n const search = new URLSearchParams();\n args.forEach((value, index) => {\n if (value !== undefined && value !== \"\") {\n search.set(`${ARG_QUERY_PREFIX}${index}`, value);\n }\n });\n for (const [key, value] of Object.entries(flags)) {\n if (value !== undefined && value !== \"\") {\n search.set(key, value);\n }\n }\n if (resolved.request.autoRun) {\n search.set(AUTORUN_QUERY_PARAM, \"1\");\n }\n\n const query = search.toString();\n const suffix = query ? `?${query}` : \"\";\n return withBasePath(basePath, `/commands/${encodeURIComponent(commandId)}${suffix}`);\n}\n\ntype SurfaceGroup = {\n parent: string; // the slug; \"\" for surfaces that declared no parent\n label: string; // display name in the sidebar\n surfaces: ClickySurface[];\n};\n\n// groupSurfacesByParent buckets surfaces by their ClickySurface.parent slug,\n// preserving the order surfaces appeared in the spec. Surfaces with no parent\n// fall into a trailing \"\" bucket labelled \"Other\".\nfunction groupSurfacesByParent(surfaces: ClickySurface[]): SurfaceGroup[] {\n const order: string[] = [];\n const buckets = new Map<string, ClickySurface[]>();\n for (const surface of surfaces) {\n const parent = surface.parent ?? \"\";\n if (!buckets.has(parent)) {\n buckets.set(parent, []);\n order.push(parent);\n }\n buckets.get(parent)!.push(surface);\n }\n return order.map((parent) => ({\n parent,\n label: parent === \"\" ? \"Other\" : titleCase(parent),\n surfaces: buckets.get(parent)!,\n }));\n}\n\nfunction titleCase(value: string): string {\n if (!value) return value;\n return value.charAt(0).toUpperCase() + value.slice(1);\n}\n\nfunction readCollapsedGroups(): Record<string, boolean> {\n if (typeof window === \"undefined\") return {};\n try {\n const raw = window.localStorage.getItem(SURFACE_GROUP_STATE_KEY);\n if (!raw) return {};\n const parsed = JSON.parse(raw);\n return parsed && typeof parsed === \"object\" ? (parsed as Record<string, boolean>) : {};\n } catch {\n return {};\n }\n}\n\nfunction writeCollapsedGroups(state: Record<string, boolean>) {\n if (typeof window === \"undefined\") return;\n try {\n window.localStorage.setItem(SURFACE_GROUP_STATE_KEY, JSON.stringify(state));\n } catch {\n // Quota / private-mode failures are safe to swallow — sidebar state is\n // purely a UX nicety, not a correctness signal.\n }\n}\n\nfunction readCommandQueryParams(): { initialValues: Record<string, string>; autoRun: boolean } {\n if (typeof window === \"undefined\") {\n return { initialValues: {}, autoRun: false };\n }\n const search = new URLSearchParams(window.location.search);\n const initialValues: Record<string, string> = {};\n let autoRun = false;\n const positional: string[] = [];\n\n for (const [key, value] of search.entries()) {\n if (key === AUTORUN_QUERY_PARAM) {\n autoRun = value === \"1\" || value === \"true\";\n continue;\n }\n if (key.startsWith(ARG_QUERY_PREFIX)) {\n const index = Number.parseInt(key.slice(ARG_QUERY_PREFIX.length), 10);\n if (Number.isFinite(index) && index >= 0) {\n positional[index] = value;\n }\n continue;\n }\n initialValues[key] = value;\n }\n\n const packedArgs = positional.filter((value) => value !== undefined).join(\" \");\n if (packedArgs !== \"\") {\n initialValues.args = packedArgs;\n }\n\n return { initialValues, autoRun };\n}\n"],"names":["search","query","suffix"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EntityExplorerApp.js","sources":["../../src/rpc/EntityExplorerApp.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useState, type ReactNode } from \"react\";\nimport { ThemeSwitcher } from \"../components/theme-switcher\";\nimport type { ClickyCommandRuntime, ClickyResolvedCommand } from \"../data/Clicky\";\nimport {\n findSurfaceListOperation,\n getClickySurfaces,\n makeSurfaceDefinition,\n} from \"./clickyMetadata\";\nimport type { RenderLink } from \"./EndpointList\";\nimport { OperationCatalog } from \"./OperationCatalog\";\nimport { OperationCommandPage } from \"./OperationCommandPage\";\nimport { OperationEntityPage } from \"./OperationEntityPage\";\nimport type { ClickySurface } from \"./types\";\nimport type { OperationsApiClient } from \"./useOperations\";\nimport { useOperations } from \"./useOperations\";\n\nexport type EntityExplorerAppProps = {\n client: OperationsApiClient;\n pathname: string;\n renderLink: RenderLink;\n basePath?: string;\n showApiExplorer?: boolean;\n // surfaceIcons maps a ClickySurface.parent slug to a ReactNode rendered next\n // to the group label. Lets the host app drop in brand SVGs (e.g. Xero,\n // Takealot) without coupling clicky-ui to any specific iconography.\n surfaceIcons?: Record<string, ReactNode>;\n};\n\n// SURFACE_GROUP_STATE_KEY persists open/closed state of sidebar groups across\n// reloads. Single localStorage entry, not per-user — operator UI only.\nconst SURFACE_GROUP_STATE_KEY = \"clicky-ui:sidebar:groupCollapsed\";\n\nexport function EntityExplorerApp({\n client,\n pathname,\n renderLink,\n basePath = \"\",\n showApiExplorer = true,\n surfaceIcons,\n}: EntityExplorerAppProps) {\n const { operations, spec } = useOperations(client);\n const surfaces = useMemo(() => getClickySurfaces(spec), [spec]);\n const surfaceGroups = useMemo(() => groupSurfacesByParent(surfaces), [surfaces]);\n const listHrefBySurface = useMemo(() => {\n const out: Record<string, string> = {};\n for (const surface of surfaces) {\n const listOp = findSurfaceListOperation(operations, surface.key);\n if (!listOp?.operation.operationId) continue;\n const href = buildCommandHref(basePath, {\n operation: listOp,\n request: { command: listOp.operation.operationId, autoRun: true },\n });\n if (href) out[surface.key] = href;\n }\n return out;\n }, [basePath, operations, surfaces]);\n const [collapsedGroups, setCollapsedGroups] = useState<Record<string, boolean>>(() =>\n readCollapsedGroups(),\n );\n const toggleGroup = useCallback((parent: string) => {\n setCollapsedGroups((prev) => {\n const next = { ...prev, [parent]: !prev[parent] };\n writeCollapsedGroups(next);\n return next;\n });\n }, []);\n const defaultSurface = useMemo(\n () => surfaces.find((surface) => !surface.admin) ?? surfaces[0],\n [surfaces],\n );\n const relativePath = useMemo(() => stripBasePath(pathname, basePath), [basePath, pathname]);\n const route = useMemo(() => parseExplorerRoute(relativePath), [relativePath]);\n const resolvedRoute = useMemo(() => resolveRouteSurface(route, surfaces), [route, surfaces]);\n const commandRuntime = useMemo<ClickyCommandRuntime>(\n () => ({\n client,\n hrefForCommand: (resolved) => buildCommandHref(basePath, resolved),\n onNavigate: (resolved) => {\n const href = buildCommandHref(basePath, resolved);\n if (!href || typeof window === \"undefined\") return;\n window.history.pushState(window.history.state, \"\", href);\n window.dispatchEvent(new PopStateEvent(\"popstate\"));\n },\n }),\n [basePath, client],\n );\n const { initialValues: commandInitialValues, autoRun: commandAutoRun } = useMemo(\n () =>\n resolvedRoute.kind === \"command\"\n ? readCommandQueryParams()\n : { initialValues: {}, autoRun: false },\n [resolvedRoute.kind, pathname],\n );\n const explorerDefinition = useMemo(\n () => ({\n key: \"explorer\",\n title: \"API Explorer\",\n description: \"Every operation exposed by the current OpenAPI spec.\",\n }),\n [],\n );\n\n useEffect(() => {\n if (\n typeof window === \"undefined\" ||\n defaultSurface == null ||\n relativePath !== \"/\" ||\n window.location.pathname !== withBasePath(basePath, \"/\")\n ) {\n return;\n }\n\n const target = withBasePath(basePath, `/${defaultSurface.key}`);\n window.history.replaceState(window.history.state, \"\", target);\n window.dispatchEvent(new PopStateEvent(\"popstate\"));\n }, [basePath, defaultSurface, relativePath]);\n\n return (\n <div className=\"flex h-full\">\n <aside className=\"flex w-64 shrink-0 flex-col border-r border-border bg-muted/30 p-4\">\n <div className=\"mb-6\">\n <div className=\"text-sm font-semibold\">{spec?.info.title ?? \"Clicky Explorer\"}</div>\n <div className=\"text-xs text-muted-foreground\">Metadata-driven entity explorer</div>\n </div>\n <nav className=\"flex flex-col gap-2\">\n {surfaceGroups.map((group) => {\n const collapsed = collapsedGroups[group.parent] ?? false;\n return (\n <div key={group.parent} className=\"flex flex-col\">\n <button\n type=\"button\"\n onClick={() => toggleGroup(group.parent)}\n aria-expanded={!collapsed}\n className=\"flex items-center gap-2 rounded-md px-2 py-1.5 text-xs font-semibold uppercase tracking-wide text-muted-foreground transition-colors hover:bg-accent/40\"\n >\n {surfaceIcons?.[group.parent] != null && (\n <span className=\"flex h-4 w-4 items-center justify-center text-current\">\n {surfaceIcons[group.parent]}\n </span>\n )}\n <span className=\"flex-1 text-left\">{group.label}</span>\n <span aria-hidden className=\"text-[0.65rem] opacity-60\">\n {collapsed ? \"▸\" : \"▾\"}\n </span>\n </button>\n {!collapsed && (\n <div className=\"ml-2 mt-1 flex flex-col gap-1 border-l border-border/60 pl-2\">\n {group.surfaces.map((surface) =>\n renderLink({\n key: surface.key,\n to:\n listHrefBySurface[surface.key] ??\n withBasePath(basePath, `/${surface.key}`),\n className: navLinkClassName(\n isSurfaceRouteActive(resolvedRoute, surface.key),\n ),\n children: surface.title,\n }),\n )}\n </div>\n )}\n </div>\n );\n })}\n {showApiExplorer &&\n renderLink({\n key: explorerDefinition.key,\n to: withBasePath(basePath, \"/explorer\"),\n className: navLinkClassName(\n resolvedRoute.kind === \"explorer\" || resolvedRoute.kind === \"command\",\n ),\n children: explorerDefinition.title,\n })}\n </nav>\n <div className=\"mt-auto pt-4\">\n <ThemeSwitcher />\n </div>\n </aside>\n\n <main className=\"flex-1 overflow-auto p-6\">\n {resolvedRoute.kind === \"surface\" ? (\n resolvedRoute.surface ? (\n <OperationCatalog\n definition={makeSurfaceDefinition(resolvedRoute.surface)}\n entities={[resolvedRoute.surface.entity]}\n client={client}\n renderLink={renderLink}\n surfaceKey={resolvedRoute.surface.key}\n commandRuntime={commandRuntime}\n />\n ) : (\n <UnknownSurface surfaceKey={resolvedRoute.surfaceKey} />\n )\n ) : resolvedRoute.kind === \"entity\" ? (\n resolvedRoute.surface ? (\n <OperationEntityPage\n definition={makeSurfaceDefinition(resolvedRoute.surface)}\n entities={[resolvedRoute.surface.entity]}\n client={client}\n renderLink={renderLink}\n surfaceKey={resolvedRoute.surface.key}\n backHref={withBasePath(basePath, `/${resolvedRoute.surface.key}`)}\n backLabel={`Back to ${resolvedRoute.surface.title}`}\n commandRuntime={commandRuntime}\n {...(resolvedRoute.id ? { id: resolvedRoute.id } : {})}\n />\n ) : (\n <UnknownSurface surfaceKey={resolvedRoute.surfaceKey} />\n )\n ) : resolvedRoute.kind === \"command\" ? (\n <OperationCommandPage\n client={client}\n backHref={withBasePath(basePath, \"/explorer\")}\n backLabel=\"Back to API Explorer\"\n renderLink={renderLink}\n commandRuntime={commandRuntime}\n initialValues={commandInitialValues}\n autoRun={commandAutoRun}\n {...(resolvedRoute.operationId ? { operationId: resolvedRoute.operationId } : {})}\n />\n ) : resolvedRoute.kind === \"explorer\" ? (\n <OperationCatalog\n definition={explorerDefinition}\n entities={[]}\n allOperations\n client={client}\n renderLink={renderLink}\n commandRuntime={commandRuntime}\n />\n ) : defaultSurface == null ? (\n <div className=\"text-sm text-muted-foreground\">Loading surfaces…</div>\n ) : (\n <div className=\"text-sm text-muted-foreground\">Redirecting…</div>\n )}\n </main>\n </div>\n );\n}\n\ntype ExplorerRoute =\n | { kind: \"root\" }\n | { kind: \"explorer\" }\n | { kind: \"command\"; operationId?: string }\n | { kind: \"surface\"; surfaceKey: string; surface?: ClickySurface }\n | {\n kind: \"entity\";\n surfaceKey: string;\n surface?: ClickySurface;\n id?: string;\n };\n\nfunction parseExplorerRoute(pathname: string): ExplorerRoute {\n const normalized = trimTrailingSlash(pathname) || \"/\";\n if (normalized === \"/\") {\n return { kind: \"root\" };\n }\n\n const segments = normalized.replace(/^\\/+/, \"\").split(\"/\");\n if (segments[0] === \"explorer\") {\n return { kind: \"explorer\" };\n }\n if (segments[0] === \"commands\") {\n return segments[1] ? { kind: \"command\", operationId: segments[1] } : { kind: \"command\" };\n }\n const surfaceKey = segments[0] ?? \"\";\n if (segments[1]) {\n return {\n kind: \"entity\",\n surfaceKey,\n id: decodeURIComponent(segments[1]),\n };\n }\n return { kind: \"surface\", surfaceKey };\n}\n\nfunction resolveRouteSurface(route: ExplorerRoute, surfaces: ClickySurface[]): ExplorerRoute {\n if (route.kind !== \"surface\" && route.kind !== \"entity\") {\n return route;\n }\n const surface = surfaces.find((item) => item.key === route.surfaceKey);\n return surface ? { ...route, surface } : route;\n}\n\nfunction isSurfaceRouteActive(route: ExplorerRoute, surfaceKey: string) {\n return (\n (route.kind === \"surface\" && route.surfaceKey === surfaceKey) ||\n (route.kind === \"entity\" && route.surfaceKey === surfaceKey)\n );\n}\n\nfunction navLinkClassName(active: boolean) {\n return [\n \"rounded-md px-2 py-1.5 text-sm transition-colors\",\n active ? \"bg-accent text-accent-foreground\" : \"text-foreground hover:bg-accent\",\n ].join(\" \");\n}\n\nfunction stripBasePath(pathname: string, basePath: string) {\n const base = trimTrailingSlash(basePath);\n if (!base || base === \"/\") {\n return trimTrailingSlash(pathname) || \"/\";\n }\n if (pathname === base) {\n return \"/\";\n }\n if (pathname.startsWith(`${base}/`)) {\n return trimTrailingSlash(pathname.slice(base.length)) || \"/\";\n }\n return trimTrailingSlash(pathname) || \"/\";\n}\n\nfunction withBasePath(basePath: string, pathname: string) {\n const base = trimTrailingSlash(basePath);\n if (!base || base === \"/\") {\n return pathname;\n }\n return `${base}${pathname}`;\n}\n\nfunction trimTrailingSlash(value: string) {\n if (!value) return \"\";\n return value.length > 1 ? value.replace(/\\/+$/, \"\") : value;\n}\n\nfunction UnknownSurface({ surfaceKey }: { surfaceKey: string }) {\n return (\n <div className=\"p-6 text-sm text-muted-foreground\">\n Unknown surface: <code>{surfaceKey}</code>\n </div>\n );\n}\n\nconst AUTORUN_QUERY_PARAM = \"autoRun\";\nconst LEGACY_AUTORUN_QUERY_PARAM = \"__autoRun\";\nconst ARG_QUERY_PREFIX = \"__arg\";\n\nfunction buildCommandHref(basePath: string, resolved: ClickyResolvedCommand): string | undefined {\n const commandId = resolved.operation?.operation.operationId ?? resolved.request.command;\n if (!commandId) return undefined;\n\n const meta = resolved.operation?.operation[\"x-clicky\"];\n const args = resolved.request.args ?? [];\n const flags = resolved.request.flags ?? {};\n\n // Entity `get` commands route to the surface detail URL: /<surface>/<id>?<flags>\n if (meta?.verb === \"get\" && meta?.scope === \"entity\" && meta.surface && args[0]) {\n const search = new URLSearchParams();\n for (const [key, value] of Object.entries(flags)) {\n if (value !== undefined && value !== \"\") {\n search.set(key, value);\n }\n }\n const query = search.toString();\n const suffix = query ? `?${query}` : \"\";\n return withBasePath(\n basePath,\n `/${encodeURIComponent(meta.surface)}/${encodeURIComponent(args[0])}${suffix}`,\n );\n }\n\n const search = new URLSearchParams();\n args.forEach((value, index) => {\n if (value !== undefined && value !== \"\") {\n search.set(`${ARG_QUERY_PREFIX}${index}`, value);\n }\n });\n for (const [key, value] of Object.entries(flags)) {\n if (value !== undefined && value !== \"\") {\n search.set(key, value);\n }\n }\n if (resolved.request.autoRun) {\n search.set(AUTORUN_QUERY_PARAM, \"1\");\n }\n\n const query = search.toString();\n const suffix = query ? `?${query}` : \"\";\n return withBasePath(basePath, `/commands/${encodeURIComponent(commandId)}${suffix}`);\n}\n\ntype SurfaceGroup = {\n parent: string; // the slug; \"\" for surfaces that declared no parent\n label: string; // display name in the sidebar\n surfaces: ClickySurface[];\n};\n\n// groupSurfacesByParent buckets surfaces by their ClickySurface.parent slug,\n// preserving the order surfaces appeared in the spec. Surfaces with no parent\n// fall into a trailing \"\" bucket labelled \"Other\".\nfunction groupSurfacesByParent(surfaces: ClickySurface[]): SurfaceGroup[] {\n const order: string[] = [];\n const buckets = new Map<string, ClickySurface[]>();\n for (const surface of surfaces) {\n const parent = surface.parent ?? \"\";\n if (!buckets.has(parent)) {\n buckets.set(parent, []);\n order.push(parent);\n }\n buckets.get(parent)!.push(surface);\n }\n return order.map((parent) => ({\n parent,\n label: parent === \"\" ? \"Other\" : titleCase(parent),\n surfaces: buckets.get(parent)!,\n }));\n}\n\nfunction titleCase(value: string): string {\n if (!value) return value;\n return value.charAt(0).toUpperCase() + value.slice(1);\n}\n\nfunction readCollapsedGroups(): Record<string, boolean> {\n if (typeof window === \"undefined\") return {};\n try {\n const raw = window.localStorage.getItem(SURFACE_GROUP_STATE_KEY);\n if (!raw) return {};\n const parsed = JSON.parse(raw);\n return parsed && typeof parsed === \"object\" ? (parsed as Record<string, boolean>) : {};\n } catch {\n return {};\n }\n}\n\nfunction writeCollapsedGroups(state: Record<string, boolean>) {\n if (typeof window === \"undefined\") return;\n try {\n window.localStorage.setItem(SURFACE_GROUP_STATE_KEY, JSON.stringify(state));\n } catch {\n // Quota / private-mode failures are safe to swallow — sidebar state is\n // purely a UX nicety, not a correctness signal.\n }\n}\n\nfunction readCommandQueryParams(): { initialValues: Record<string, string>; autoRun: boolean } {\n if (typeof window === \"undefined\") {\n return { initialValues: {}, autoRun: false };\n }\n const search = new URLSearchParams(window.location.search);\n const initialValues: Record<string, string> = {};\n let autoRun = false;\n const positional: string[] = [];\n\n for (const [key, value] of search.entries()) {\n if (key === AUTORUN_QUERY_PARAM || key === LEGACY_AUTORUN_QUERY_PARAM) {\n autoRun = value === \"1\" || value === \"true\";\n continue;\n }\n if (key.startsWith(ARG_QUERY_PREFIX)) {\n const index = Number.parseInt(key.slice(ARG_QUERY_PREFIX.length), 10);\n if (Number.isFinite(index) && index >= 0) {\n positional[index] = value;\n }\n continue;\n }\n initialValues[key] = value;\n }\n\n const packedArgs = positional.filter((value) => value !== undefined).join(\" \");\n if (packedArgs !== \"\") {\n initialValues.args = packedArgs;\n }\n\n return { initialValues, autoRun };\n}\n"],"names":["search","query","suffix"],"mappings":";;;;;;;;AA8BA,MAAM,0BAA0B;AAEzB,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,kBAAkB;AAAA,EAClB;AACF,GAA2B;AACzB,QAAM,EAAE,YAAY,SAAS,cAAc,MAAM;AACjD,QAAM,WAAW,QAAQ,MAAM,kBAAkB,IAAI,GAAG,CAAC,IAAI,CAAC;AAC9D,QAAM,gBAAgB,QAAQ,MAAM,sBAAsB,QAAQ,GAAG,CAAC,QAAQ,CAAC;AAC/E,QAAM,oBAAoB,QAAQ,MAAM;AACtC,UAAM,MAA8B,CAAA;AACpC,eAAW,WAAW,UAAU;AAC9B,YAAM,SAAS,yBAAyB,YAAY,QAAQ,GAAG;AAC/D,UAAI,EAAC,iCAAQ,UAAU,aAAa;AACpC,YAAM,OAAO,iBAAiB,UAAU;AAAA,QACtC,WAAW;AAAA,QACX,SAAS,EAAE,SAAS,OAAO,UAAU,aAAa,SAAS,KAAA;AAAA,MAAK,CACjE;AACD,UAAI,KAAM,KAAI,QAAQ,GAAG,IAAI;AAAA,IAC/B;AACA,WAAO;AAAA,EACT,GAAG,CAAC,UAAU,YAAY,QAAQ,CAAC;AACnC,QAAM,CAAC,iBAAiB,kBAAkB,IAAI;AAAA,IAAkC,MAC9E,oBAAA;AAAA,EAAoB;AAEtB,QAAM,cAAc,YAAY,CAAC,WAAmB;AAClD,uBAAmB,CAAC,SAAS;AAC3B,YAAM,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,KAAK,MAAM,EAAA;AAC9C,2BAAqB,IAAI;AACzB,aAAO;AAAA,IACT,CAAC;AAAA,EACH,GAAG,CAAA,CAAE;AACL,QAAM,iBAAiB;AAAA,IACrB,MAAM,SAAS,KAAK,CAAC,YAAY,CAAC,QAAQ,KAAK,KAAK,SAAS,CAAC;AAAA,IAC9D,CAAC,QAAQ;AAAA,EAAA;AAEX,QAAM,eAAe,QAAQ,MAAM,cAAc,UAAU,QAAQ,GAAG,CAAC,UAAU,QAAQ,CAAC;AAC1F,QAAM,QAAQ,QAAQ,MAAM,mBAAmB,YAAY,GAAG,CAAC,YAAY,CAAC;AAC5E,QAAM,gBAAgB,QAAQ,MAAM,oBAAoB,OAAO,QAAQ,GAAG,CAAC,OAAO,QAAQ,CAAC;AAC3F,QAAM,iBAAiB;AAAA,IACrB,OAAO;AAAA,MACL;AAAA,MACA,gBAAgB,CAAC,aAAa,iBAAiB,UAAU,QAAQ;AAAA,MACjE,YAAY,CAAC,aAAa;AACxB,cAAM,OAAO,iBAAiB,UAAU,QAAQ;AAChD,YAAI,CAAC,QAAQ,OAAO,WAAW,YAAa;AAC5C,eAAO,QAAQ,UAAU,OAAO,QAAQ,OAAO,IAAI,IAAI;AACvD,eAAO,cAAc,IAAI,cAAc,UAAU,CAAC;AAAA,MACpD;AAAA,IAAA;AAAA,IAEF,CAAC,UAAU,MAAM;AAAA,EAAA;AAEnB,QAAM,EAAE,eAAe,sBAAsB,SAAS,mBAAmB;AAAA,IACvE,MACE,cAAc,SAAS,YACnB,uBAAA,IACA,EAAE,eAAe,CAAA,GAAI,SAAS,MAAA;AAAA,IACpC,CAAC,cAAc,MAAM,QAAQ;AAAA,EAAA;AAE/B,QAAM,qBAAqB;AAAA,IACzB,OAAO;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,MACP,aAAa;AAAA,IAAA;AAAA,IAEf,CAAA;AAAA,EAAC;AAGH,YAAU,MAAM;AACd,QACE,OAAO,WAAW,eAClB,kBAAkB,QAClB,iBAAiB,OACjB,OAAO,SAAS,aAAa,aAAa,UAAU,GAAG,GACvD;AACA;AAAA,IACF;AAEA,UAAM,SAAS,aAAa,UAAU,IAAI,eAAe,GAAG,EAAE;AAC9D,WAAO,QAAQ,aAAa,OAAO,QAAQ,OAAO,IAAI,MAAM;AAC5D,WAAO,cAAc,IAAI,cAAc,UAAU,CAAC;AAAA,EACpD,GAAG,CAAC,UAAU,gBAAgB,YAAY,CAAC;AAE3C,SACE,qBAAC,OAAA,EAAI,WAAU,eACb,UAAA;AAAA,IAAA,qBAAC,SAAA,EAAM,WAAU,sEACf,UAAA;AAAA,MAAA,qBAAC,OAAA,EAAI,WAAU,QACb,UAAA;AAAA,QAAA,oBAAC,SAAI,WAAU,yBAAyB,WAAA,6BAAM,KAAK,UAAS,mBAAkB;AAAA,QAC9E,oBAAC,OAAA,EAAI,WAAU,iCAAgC,UAAA,kCAAA,CAA+B;AAAA,MAAA,GAChF;AAAA,MACA,qBAAC,OAAA,EAAI,WAAU,uBACZ,UAAA;AAAA,QAAA,cAAc,IAAI,CAAC,UAAU;AAC5B,gBAAM,YAAY,gBAAgB,MAAM,MAAM,KAAK;AACnD,iBACE,qBAAC,OAAA,EAAuB,WAAU,iBAChC,UAAA;AAAA,YAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAAS,MAAM,YAAY,MAAM,MAAM;AAAA,gBACvC,iBAAe,CAAC;AAAA,gBAChB,WAAU;AAAA,gBAET,UAAA;AAAA,mBAAA,6CAAe,MAAM,YAAW,QAC/B,oBAAC,QAAA,EAAK,WAAU,yDACb,UAAA,aAAa,MAAM,MAAM,EAAA,CAC5B;AAAA,kBAEF,oBAAC,QAAA,EAAK,WAAU,oBAAoB,gBAAM,OAAM;AAAA,kBAChD,oBAAC,UAAK,eAAW,MAAC,WAAU,6BACzB,UAAA,YAAY,MAAM,IAAA,CACrB;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAED,CAAC,aACA,oBAAC,SAAI,WAAU,gEACZ,gBAAM,SAAS;AAAA,cAAI,CAAC,YACnB,WAAW;AAAA,gBACT,KAAK,QAAQ;AAAA,gBACb,IACE,kBAAkB,QAAQ,GAAG,KAC7B,aAAa,UAAU,IAAI,QAAQ,GAAG,EAAE;AAAA,gBAC1C,WAAW;AAAA,kBACT,qBAAqB,eAAe,QAAQ,GAAG;AAAA,gBAAA;AAAA,gBAEjD,UAAU,QAAQ;AAAA,cAAA,CACnB;AAAA,YAAA,EACH,CACF;AAAA,UAAA,EAAA,GA/BM,MAAM,MAiChB;AAAA,QAEJ,CAAC;AAAA,QACA,mBACC,WAAW;AAAA,UACT,KAAK,mBAAmB;AAAA,UACxB,IAAI,aAAa,UAAU,WAAW;AAAA,UACtC,WAAW;AAAA,YACT,cAAc,SAAS,cAAc,cAAc,SAAS;AAAA,UAAA;AAAA,UAE9D,UAAU,mBAAmB;AAAA,QAAA,CAC9B;AAAA,MAAA,GACL;AAAA,0BACC,OAAA,EAAI,WAAU,gBACb,UAAA,oBAAC,iBAAc,EAAA,CACjB;AAAA,IAAA,GACF;AAAA,IAEA,oBAAC,UAAK,WAAU,4BACb,wBAAc,SAAS,YACtB,cAAc,UACZ;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,YAAY,sBAAsB,cAAc,OAAO;AAAA,QACvD,UAAU,CAAC,cAAc,QAAQ,MAAM;AAAA,QACvC;AAAA,QACA;AAAA,QACA,YAAY,cAAc,QAAQ;AAAA,QAClC;AAAA,MAAA;AAAA,IAAA,IAGF,oBAAC,gBAAA,EAAe,YAAY,cAAc,WAAA,CAAY,IAEtD,cAAc,SAAS,WACzB,cAAc,UACZ;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,YAAY,sBAAsB,cAAc,OAAO;AAAA,QACvD,UAAU,CAAC,cAAc,QAAQ,MAAM;AAAA,QACvC;AAAA,QACA;AAAA,QACA,YAAY,cAAc,QAAQ;AAAA,QAClC,UAAU,aAAa,UAAU,IAAI,cAAc,QAAQ,GAAG,EAAE;AAAA,QAChE,WAAW,WAAW,cAAc,QAAQ,KAAK;AAAA,QACjD;AAAA,QACC,GAAI,cAAc,KAAK,EAAE,IAAI,cAAc,GAAA,IAAO,CAAA;AAAA,MAAC;AAAA,IAAA,wBAGrD,gBAAA,EAAe,YAAY,cAAc,WAAA,CAAY,IAEtD,cAAc,SAAS,YACzB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,UAAU,aAAa,UAAU,WAAW;AAAA,QAC5C,WAAU;AAAA,QACV;AAAA,QACA;AAAA,QACA,eAAe;AAAA,QACf,SAAS;AAAA,QACR,GAAI,cAAc,cAAc,EAAE,aAAa,cAAc,YAAA,IAAgB,CAAA;AAAA,MAAC;AAAA,IAAA,IAE/E,cAAc,SAAS,aACzB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,YAAY;AAAA,QACZ,UAAU,CAAA;AAAA,QACV,eAAa;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAAA,IAEA,kBAAkB,OACpB,oBAAC,SAAI,WAAU,iCAAgC,UAAA,oBAAA,CAAiB,IAEhE,oBAAC,OAAA,EAAI,WAAU,iCAAgC,0BAAY,EAAA,CAE/D;AAAA,EAAA,GACF;AAEJ;AAcA,SAAS,mBAAmB,UAAiC;AAC3D,QAAM,aAAa,kBAAkB,QAAQ,KAAK;AAClD,MAAI,eAAe,KAAK;AACtB,WAAO,EAAE,MAAM,OAAA;AAAA,EACjB;AAEA,QAAM,WAAW,WAAW,QAAQ,QAAQ,EAAE,EAAE,MAAM,GAAG;AACzD,MAAI,SAAS,CAAC,MAAM,YAAY;AAC9B,WAAO,EAAE,MAAM,WAAA;AAAA,EACjB;AACA,MAAI,SAAS,CAAC,MAAM,YAAY;AAC9B,WAAO,SAAS,CAAC,IAAI,EAAE,MAAM,WAAW,aAAa,SAAS,CAAC,EAAA,IAAM,EAAE,MAAM,UAAA;AAAA,EAC/E;AACA,QAAM,aAAa,SAAS,CAAC,KAAK;AAClC,MAAI,SAAS,CAAC,GAAG;AACf,WAAO;AAAA,MACL,MAAM;AAAA,MACN;AAAA,MACA,IAAI,mBAAmB,SAAS,CAAC,CAAC;AAAA,IAAA;AAAA,EAEtC;AACA,SAAO,EAAE,MAAM,WAAW,WAAA;AAC5B;AAEA,SAAS,oBAAoB,OAAsB,UAA0C;AAC3F,MAAI,MAAM,SAAS,aAAa,MAAM,SAAS,UAAU;AACvD,WAAO;AAAA,EACT;AACA,QAAM,UAAU,SAAS,KAAK,CAAC,SAAS,KAAK,QAAQ,MAAM,UAAU;AACrE,SAAO,UAAU,EAAE,GAAG,OAAO,YAAY;AAC3C;AAEA,SAAS,qBAAqB,OAAsB,YAAoB;AACtE,SACG,MAAM,SAAS,aAAa,MAAM,eAAe,cACjD,MAAM,SAAS,YAAY,MAAM,eAAe;AAErD;AAEA,SAAS,iBAAiB,QAAiB;AACzC,SAAO;AAAA,IACL;AAAA,IACA,SAAS,qCAAqC;AAAA,EAAA,EAC9C,KAAK,GAAG;AACZ;AAEA,SAAS,cAAc,UAAkB,UAAkB;AACzD,QAAM,OAAO,kBAAkB,QAAQ;AACvC,MAAI,CAAC,QAAQ,SAAS,KAAK;AACzB,WAAO,kBAAkB,QAAQ,KAAK;AAAA,EACxC;AACA,MAAI,aAAa,MAAM;AACrB,WAAO;AAAA,EACT;AACA,MAAI,SAAS,WAAW,GAAG,IAAI,GAAG,GAAG;AACnC,WAAO,kBAAkB,SAAS,MAAM,KAAK,MAAM,CAAC,KAAK;AAAA,EAC3D;AACA,SAAO,kBAAkB,QAAQ,KAAK;AACxC;AAEA,SAAS,aAAa,UAAkB,UAAkB;AACxD,QAAM,OAAO,kBAAkB,QAAQ;AACvC,MAAI,CAAC,QAAQ,SAAS,KAAK;AACzB,WAAO;AAAA,EACT;AACA,SAAO,GAAG,IAAI,GAAG,QAAQ;AAC3B;AAEA,SAAS,kBAAkB,OAAe;AACxC,MAAI,CAAC,MAAO,QAAO;AACnB,SAAO,MAAM,SAAS,IAAI,MAAM,QAAQ,QAAQ,EAAE,IAAI;AACxD;AAEA,SAAS,eAAe,EAAE,cAAsC;AAC9D,SACE,qBAAC,OAAA,EAAI,WAAU,qCAAoC,UAAA;AAAA,IAAA;AAAA,IAChC,oBAAC,UAAM,UAAA,WAAA,CAAW;AAAA,EAAA,GACrC;AAEJ;AAEA,MAAM,sBAAsB;AAC5B,MAAM,6BAA6B;AACnC,MAAM,mBAAmB;AAEzB,SAAS,iBAAiB,UAAkB,UAAqD;;AAC/F,QAAM,cAAY,cAAS,cAAT,mBAAoB,UAAU,gBAAe,SAAS,QAAQ;AAChF,MAAI,CAAC,UAAW,QAAO;AAEvB,QAAM,QAAO,cAAS,cAAT,mBAAoB,UAAU;AAC3C,QAAM,OAAO,SAAS,QAAQ,QAAQ,CAAA;AACtC,QAAM,QAAQ,SAAS,QAAQ,SAAS,CAAA;AAGxC,OAAI,6BAAM,UAAS,UAAS,6BAAM,WAAU,YAAY,KAAK,WAAW,KAAK,CAAC,GAAG;AAC/E,UAAMA,UAAS,IAAI,gBAAA;AACnB,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,KAAK,GAAG;AAChD,UAAI,UAAU,UAAa,UAAU,IAAI;AACvCA,gBAAO,IAAI,KAAK,KAAK;AAAA,MACvB;AAAA,IACF;AACA,UAAMC,SAAQD,QAAO,SAAA;AACrB,UAAME,UAASD,SAAQ,IAAIA,MAAK,KAAK;AACrC,WAAO;AAAA,MACL;AAAA,MACA,IAAI,mBAAmB,KAAK,OAAO,CAAC,IAAI,mBAAmB,KAAK,CAAC,CAAC,CAAC,GAAGC,OAAM;AAAA,IAAA;AAAA,EAEhF;AAEA,QAAM,SAAS,IAAI,gBAAA;AACnB,OAAK,QAAQ,CAAC,OAAO,UAAU;AAC7B,QAAI,UAAU,UAAa,UAAU,IAAI;AACvC,aAAO,IAAI,GAAG,gBAAgB,GAAG,KAAK,IAAI,KAAK;AAAA,IACjD;AAAA,EACF,CAAC;AACD,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,KAAK,GAAG;AAChD,QAAI,UAAU,UAAa,UAAU,IAAI;AACvC,aAAO,IAAI,KAAK,KAAK;AAAA,IACvB;AAAA,EACF;AACA,MAAI,SAAS,QAAQ,SAAS;AAC5B,WAAO,IAAI,qBAAqB,GAAG;AAAA,EACrC;AAEA,QAAM,QAAQ,OAAO,SAAA;AACrB,QAAM,SAAS,QAAQ,IAAI,KAAK,KAAK;AACrC,SAAO,aAAa,UAAU,aAAa,mBAAmB,SAAS,CAAC,GAAG,MAAM,EAAE;AACrF;AAWA,SAAS,sBAAsB,UAA2C;AACxE,QAAM,QAAkB,CAAA;AACxB,QAAM,8BAAc,IAAA;AACpB,aAAW,WAAW,UAAU;AAC9B,UAAM,SAAS,QAAQ,UAAU;AACjC,QAAI,CAAC,QAAQ,IAAI,MAAM,GAAG;AACxB,cAAQ,IAAI,QAAQ,EAAE;AACtB,YAAM,KAAK,MAAM;AAAA,IACnB;AACA,YAAQ,IAAI,MAAM,EAAG,KAAK,OAAO;AAAA,EACnC;AACA,SAAO,MAAM,IAAI,CAAC,YAAY;AAAA,IAC5B;AAAA,IACA,OAAO,WAAW,KAAK,UAAU,UAAU,MAAM;AAAA,IACjD,UAAU,QAAQ,IAAI,MAAM;AAAA,EAAA,EAC5B;AACJ;AAEA,SAAS,UAAU,OAAuB;AACxC,MAAI,CAAC,MAAO,QAAO;AACnB,SAAO,MAAM,OAAO,CAAC,EAAE,gBAAgB,MAAM,MAAM,CAAC;AACtD;AAEA,SAAS,sBAA+C;AACtD,MAAI,OAAO,WAAW,YAAa,QAAO,CAAA;AAC1C,MAAI;AACF,UAAM,MAAM,OAAO,aAAa,QAAQ,uBAAuB;AAC/D,QAAI,CAAC,IAAK,QAAO,CAAA;AACjB,UAAM,SAAS,KAAK,MAAM,GAAG;AAC7B,WAAO,UAAU,OAAO,WAAW,WAAY,SAAqC,CAAA;AAAA,EACtF,QAAQ;AACN,WAAO,CAAA;AAAA,EACT;AACF;AAEA,SAAS,qBAAqB,OAAgC;AAC5D,MAAI,OAAO,WAAW,YAAa;AACnC,MAAI;AACF,WAAO,aAAa,QAAQ,yBAAyB,KAAK,UAAU,KAAK,CAAC;AAAA,EAC5E,QAAQ;AAAA,EAGR;AACF;AAEA,SAAS,yBAAsF;AAC7F,MAAI,OAAO,WAAW,aAAa;AACjC,WAAO,EAAE,eAAe,IAAI,SAAS,MAAA;AAAA,EACvC;AACA,QAAM,SAAS,IAAI,gBAAgB,OAAO,SAAS,MAAM;AACzD,QAAM,gBAAwC,CAAA;AAC9C,MAAI,UAAU;AACd,QAAM,aAAuB,CAAA;AAE7B,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,WAAW;AAC3C,QAAI,QAAQ,uBAAuB,QAAQ,4BAA4B;AACrE,gBAAU,UAAU,OAAO,UAAU;AACrC;AAAA,IACF;AACA,QAAI,IAAI,WAAW,gBAAgB,GAAG;AACpC,YAAM,QAAQ,OAAO,SAAS,IAAI,MAAM,iBAAiB,MAAM,GAAG,EAAE;AACpE,UAAI,OAAO,SAAS,KAAK,KAAK,SAAS,GAAG;AACxC,mBAAW,KAAK,IAAI;AAAA,MACtB;AACA;AAAA,IACF;AACA,kBAAc,GAAG,IAAI;AAAA,EACvB;AAEA,QAAM,aAAa,WAAW,OAAO,CAAC,UAAU,UAAU,MAAS,EAAE,KAAK,GAAG;AAC7E,MAAI,eAAe,IAAI;AACrB,kBAAc,OAAO;AAAA,EACvB;AAEA,SAAO,EAAE,eAAe,QAAA;AAC1B;"}
|
|
@@ -78,7 +78,7 @@ function hrefForOperationAction(path, params) {
|
|
|
78
78
|
}
|
|
79
79
|
const search = new URLSearchParams();
|
|
80
80
|
for (const [key, value] of Object.entries(nextParams)) {
|
|
81
|
-
if (value && key !== "autoRun") search.set(key, value);
|
|
81
|
+
if (value && key !== "autoRun" && key !== "__autoRun") search.set(key, value);
|
|
82
82
|
}
|
|
83
83
|
const query = search.toString();
|
|
84
84
|
return query ? `${route}?${query}` : route;
|