@dovetail-v2/refine 0.3.12-alpha.1 → 0.3.13-alpha.0

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/refine.js CHANGED
@@ -11,8 +11,8 @@ import { ResourceContext, matchResourceFromRoute, useResource, useDelete, useNav
11
11
  import { parse, stringify } from "qs";
12
12
  import React, { createElement, isValidElement, cloneElement, Children, useContext, useCallback, createContext, useState, useEffect, useMemo, useRef, useImperativeHandle, lazy, Suspense, memo, forwardRef } from "react";
13
13
  import { useLocation, useHistory, useParams, matchPath, Link, Route, NavLink, Router } from "react-router-dom";
14
- import { usePushModal, usePopModal, DeleteDialog, Tag, RejectDialog, RejectDialogType, Input, Select, AntdOption, Button, Form, Space, TextArea, kitContext, Typo, Loading, Table as Table$2, Pagination, Alert, ImmersiveDialog, SmallDialog, Fields, Units, Link as Link$1, OverflowTooltip, Tooltip, Dropdown, Menu as Menu$1, Icon, Divider, Modal, StatusCapsule, Popover, AntdTable, TableForm, Upload, AutoComplete, getOptions, DonutChart, SegmentControl, Checkbox, Tabs as Tabs$1, TabsTabPane, Col, Row, useMessage, SearchInput, Token, AntdSelectOptGroup, WizardDialog, MenuItemGroup, Layout as Layout$1, InputGroup, InputInteger, Time as Time$1, ModalStack, KitStoreProvider, ConfigProvider } from "@cloudtower/eagle";
15
- import { EditPen16PrimaryIcon, Download16GradientBlueIcon, TrashBinDelete16Icon, MoreEllipsis324BoldSecondaryIcon, MoreEllipsis324BoldBlueIcon, MoreEllipsis316BoldBlueIcon, PlusAddCreateNew16BoldOntintIcon, ViewEye16GradientGrayIcon, EntityFilterIgnoreGradient16GrayIcon, InfoICircleFill16GrayIcon, InfoICircleFill16Gray70Icon, RecoverContinue16GradientBlueIcon, SuspendedPause16GradientBlueIcon, ArrowChevronLeft16BoldTertiaryIcon, ArrowChevronLeftSmall16BoldBlueIcon, ArrowChevronUpSmall16BlueIcon, ArrowChevronDownSmall16BlueIcon, Retry16GradientBlueIcon, OpenTerminal16GradientBlueIcon, ArrowChevronDown16BlueIcon, ArrowChevronUp16BlueIcon, HierarchyTriangleRight16GrayIcon, HierarchyTriangleRight16BlueIcon, ClipboardCopy16GradientGrayIcon, ClipboardCopy16GradientBlueIcon, Retry16GradientGrayIcon, EditPen16GradientGrayIcon, EditPen16GradientBlueIcon, Showdiff16GradientGrayIcon, Showdiff16GradientBlueIcon, XmarkFailedSeriousWarningFill16RedIcon, Pause16GradientBlueIcon, EditPen16BlueIcon } from "@cloudtower/icons-react";
14
+ import { usePushModal, usePopModal, DeleteDialog, Tag, RejectDialog, RejectDialogType, Typo, Input, Select, AntdOption, Button, Form, Space, TextArea, kitContext, Loading, Table as Table$2, Pagination, Alert, ImmersiveDialog, SmallDialog, Fields, Units, Link as Link$1, OverflowTooltip, Tooltip, Dropdown, Menu as Menu$1, Icon, Divider, Modal, StatusCapsule, Popover, AntdTable, Upload, TableForm, AutoComplete, getOptions, DonutChart, SegmentControl, Checkbox, Tabs as Tabs$1, TabsTabPane, Col, Row, useMessage, SearchInput, Token, AntdSelectOptGroup, WizardDialog, MenuItemGroup, Layout as Layout$1, InputGroup, InputInteger, Time as Time$1, ModalStack, KitStoreProvider, ConfigProvider } from "@cloudtower/eagle";
15
+ import { EditPen16PrimaryIcon, Download16GradientBlueIcon, TrashBinDelete16Icon, MoreEllipsis324BoldSecondaryIcon, MoreEllipsis324BoldBlueIcon, MoreEllipsis316BoldBlueIcon, PlusAddCreateNew16BoldOntintIcon, ViewEye16GradientGrayIcon, EntityFilterIgnoreGradient16GrayIcon, InfoICircleFill16GrayIcon, InfoICircleFill16Gray70Icon, RecoverContinue16GradientBlueIcon, SuspendedPause16GradientBlueIcon, ArrowChevronLeft16BoldTertiaryIcon, ArrowChevronLeftSmall16BoldBlueIcon, ArrowChevronDownSmall16BlueIcon, ArrowChevronUpSmall16BlueIcon, Retry16GradientBlueIcon, OpenTerminal16GradientBlueIcon, ArrowChevronDown16BlueIcon, ArrowChevronUp16BlueIcon, HierarchyTriangleRight16GrayIcon, HierarchyTriangleRight16BlueIcon, ClipboardCopy16GradientGrayIcon, ClipboardCopy16GradientBlueIcon, Retry16GradientGrayIcon, EditPen16GradientGrayIcon, EditPen16GradientBlueIcon, Showdiff16GradientGrayIcon, Showdiff16GradientBlueIcon, XmarkFailedSeriousWarningFill16RedIcon, Pause16GradientBlueIcon, EditPen16BlueIcon } from "@cloudtower/icons-react";
16
16
  import { first, get as get$2, cloneDeep, set, omit as omit$1, merge, isEqual as isEqual$1, debounce, last, setWith, clone, isObject as isObject$4, uniq, keyBy } from "lodash-es";
17
17
  import yaml$2 from "js-yaml";
18
18
  import { useLocalStorage } from "usehooks-ts";
@@ -544,13 +544,12 @@ const create_failed$1 = "Creation failed.";
544
544
  const create_failed_tip$1 = "Please address the following issues and try again: ";
545
545
  const save_failed$1 = "Failed to save.";
546
546
  const save_failed_tip$1 = "Please address the following issues and try again: ";
547
- const completion_num_tooltip$1 = "Completed/Expected";
548
547
  const ready_num_tooltip$1 = "Ready/Expected";
549
548
  const realtime_log$1 = "Real-time logs";
550
549
  const previous_log$1 = "Last startup logs";
551
550
  const auto_wrap$1 = "Auto wrap";
552
551
  const container_num$1 = "Containers";
553
- const edit_resource_success$1 = "{{resource}} {{name}} was edited successfully";
552
+ const edit_resource_success$1 = "{{kind}} {{name}} was edited successfully";
554
553
  const redeploy_success_toast$1 = "{{kind}} {{name}} was redeployed successfully";
555
554
  const redeploy_failed_toast$1 = "Failed to redeploy {{kind}} {{name}}";
556
555
  const pause_success_toast$1 = "Successfully suspended";
@@ -795,7 +794,6 @@ const dovetail$1 = {
795
794
  create_failed_tip: create_failed_tip$1,
796
795
  save_failed: save_failed$1,
797
796
  save_failed_tip: save_failed_tip$1,
798
- completion_num_tooltip: completion_num_tooltip$1,
799
797
  ready_num_tooltip: ready_num_tooltip$1,
800
798
  realtime_log: realtime_log$1,
801
799
  previous_log: previous_log$1,
@@ -1023,7 +1021,7 @@ const expand = "展开";
1023
1021
  const fold = "收起";
1024
1022
  const rule = "规则";
1025
1023
  const default_backend = "默认后端";
1026
- const ingress_class = "Ingress 类";
1024
+ const ingress_class = "IngressClass";
1027
1025
  const port = "端口";
1028
1026
  const pod_ready_num = "Pod 就绪数量";
1029
1027
  const pod_complete_num = "Pod 完成数量";
@@ -1061,7 +1059,7 @@ const create_failed = "创建失败。";
1061
1059
  const create_failed_tip = "请解决如下问题后,再创建:";
1062
1060
  const save_failed = "保存失败。";
1063
1061
  const save_failed_tip = "请解决如下问题后,再保存:";
1064
- const completion_num_tooltip = "已完成数量/预期数量";
1062
+ const job_pod_count_tooltip = "完成数量/全部数量";
1065
1063
  const ready_num_tooltip = "就绪数量/预期数量";
1066
1064
  const warning = "警告";
1067
1065
  const normal = "正常";
@@ -1205,6 +1203,9 @@ const node_port_duplicated = "端口已被占用。";
1205
1203
  const all = "全部";
1206
1204
  const optional_with_bracket = "(选填)";
1207
1205
  const label_annotations = "标签与注解";
1206
+ const target_service = "目标服务";
1207
+ const target_service_port = "目标服务端口";
1208
+ const select_workload = "选择工作负载";
1208
1209
  const dovetail = {
1209
1210
  copy,
1210
1211
  reset_arguments,
@@ -1325,7 +1326,7 @@ const dovetail = {
1325
1326
  create_failed_tip,
1326
1327
  save_failed,
1327
1328
  save_failed_tip,
1328
- completion_num_tooltip,
1329
+ job_pod_count_tooltip,
1329
1330
  ready_num_tooltip,
1330
1331
  "true": "是",
1331
1332
  "false": "否",
@@ -1470,7 +1471,10 @@ const dovetail = {
1470
1471
  node_port_duplicated,
1471
1472
  all,
1472
1473
  optional_with_bracket,
1473
- label_annotations
1474
+ label_annotations,
1475
+ target_service,
1476
+ target_service_port,
1477
+ select_workload
1474
1478
  };
1475
1479
  const ZH = {
1476
1480
  dovetail
@@ -7609,6 +7613,9 @@ function DurationTime(props) {
7609
7613
  };
7610
7614
  return /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: elapsedTime(value2, i18nMap).label || /* @__PURE__ */ jsxRuntimeExports.jsx(ValueDisplay, { value: "" }) });
7611
7615
  }
7616
+ const show_1mm8a0w = "";
7617
+ const SmallSectionTitleStyle = cx_default(Typo.Label.l4_bold, "smzfpl7");
7618
+ const DashedTitleStyle = "d85h4vb";
7612
7619
  const index_1xaw1mq = "";
7613
7620
  const BreadcrumbStyle = "b142d7q8";
7614
7621
  function Breadcrumb(props) {
@@ -8683,7 +8690,7 @@ class IngressModel extends ResourceModel {
8683
8690
  getFlattenedRules(services) {
8684
8691
  var _a, _b, _c, _d;
8685
8692
  const protocal = !!this._rawYaml.spec.tls ? "https" : "http";
8686
- const servicePort = (_c = (_b = (_a = services.find((s2) => {
8693
+ const servicePort = (_c = (_b = (_a = services == null ? void 0 : services.find((s2) => {
8687
8694
  var _a2, _b2;
8688
8695
  return ((_a2 = s2.metadata) == null ? void 0 : _a2.name) === "contour-envoy" && ((_b2 = s2.spec) == null ? void 0 : _b2.type) === "NodePort";
8689
8696
  })) == null ? void 0 : _a.spec) == null ? void 0 : _b.ports) == null ? void 0 : _c.find((p) => p.name === protocal);
@@ -9315,17 +9322,70 @@ var ResourceState = /* @__PURE__ */ ((ResourceState2) => {
9315
9322
  ResourceState2["DELETING"] = "deleting";
9316
9323
  return ResourceState2;
9317
9324
  })(ResourceState || {});
9325
+ function isLabelSelector(selector) {
9326
+ if (!selector || typeof selector !== "object") {
9327
+ return false;
9328
+ }
9329
+ const s2 = selector;
9330
+ if ("matchExpressions" in s2) {
9331
+ return true;
9332
+ }
9333
+ if ("matchLabels" in s2) {
9334
+ const ml = s2.matchLabels;
9335
+ return typeof ml === "object" && ml !== null;
9336
+ }
9337
+ return false;
9338
+ }
9318
9339
  function matchSelector(pod2, selector, namespace2 = "default") {
9319
- var _a, _b, _c, _d;
9320
- let match = true;
9321
- if (selector) {
9322
- for (const key2 in selector.matchLabels) {
9323
- if (!((_b = (_a = pod2.metadata) == null ? void 0 : _a.labels) == null ? void 0 : _b[key2]) || ((_c = pod2.metadata.labels) == null ? void 0 : _c[key2]) !== selector.matchLabels[key2]) {
9324
- match = false;
9340
+ var _a, _b;
9341
+ if (((_a = pod2.metadata) == null ? void 0 : _a.namespace) !== namespace2) {
9342
+ return false;
9343
+ }
9344
+ if (!selector || Object.keys(selector).length === 0) {
9345
+ return true;
9346
+ }
9347
+ const podLabels = ((_b = pod2.metadata) == null ? void 0 : _b.labels) || {};
9348
+ let matchLabels;
9349
+ let matchExpressions;
9350
+ if (isLabelSelector(selector)) {
9351
+ matchLabels = selector.matchLabels;
9352
+ matchExpressions = selector.matchExpressions;
9353
+ } else {
9354
+ matchLabels = selector;
9355
+ }
9356
+ if (matchLabels) {
9357
+ for (const key2 in matchLabels) {
9358
+ if (podLabels[key2] !== matchLabels[key2]) {
9359
+ return false;
9360
+ }
9361
+ }
9362
+ }
9363
+ if (matchExpressions) {
9364
+ for (const req of matchExpressions) {
9365
+ const { key: key2, operator, values } = req;
9366
+ const labelValue = podLabels[key2];
9367
+ const hasLabel = Object.prototype.hasOwnProperty.call(podLabels, key2);
9368
+ switch (operator) {
9369
+ case "In":
9370
+ if (!hasLabel || !(values == null ? void 0 : values.includes(labelValue)))
9371
+ return false;
9372
+ break;
9373
+ case "NotIn":
9374
+ if (hasLabel && (values == null ? void 0 : values.includes(labelValue)))
9375
+ return false;
9376
+ break;
9377
+ case "Exists":
9378
+ if (!hasLabel)
9379
+ return false;
9380
+ break;
9381
+ case "DoesNotExist":
9382
+ if (hasLabel)
9383
+ return false;
9384
+ break;
9325
9385
  }
9326
9386
  }
9327
9387
  }
9328
- return match && ((_d = pod2.metadata) == null ? void 0 : _d.namespace) === namespace2;
9388
+ return true;
9329
9389
  }
9330
9390
  class WorkloadBaseModel extends ResourceModel {
9331
9391
  constructor(_rawYaml, _globalStore) {
@@ -9386,6 +9446,11 @@ class JobModel extends WorkloadBaseModel {
9386
9446
  }
9387
9447
  return `${((_a = this._rawYaml.status) == null ? void 0 : _a.succeeded) || 0}/${(_b = this._rawYaml.spec) == null ? void 0 : _b.completions}`;
9388
9448
  }
9449
+ get podCountDisplay() {
9450
+ var _a, _b, _c;
9451
+ const count = (((_a = this.status) == null ? void 0 : _a.active) || 0) + (((_b = this.status) == null ? void 0 : _b.succeeded) || 0) + (((_c = this.status) == null ? void 0 : _c.failed) || 0);
9452
+ return `${this.succeeded}/${count}`;
9453
+ }
9389
9454
  get succeeded() {
9390
9455
  var _a;
9391
9456
  return ((_a = this._rawYaml.status) == null ? void 0 : _a.succeeded) || 0;
@@ -9702,6 +9767,12 @@ class CronJobModel extends WorkloadBaseModel {
9702
9767
  }
9703
9768
  return newOne;
9704
9769
  }
9770
+ getJobsCountDisplay(jobs) {
9771
+ const completed = jobs.filter(
9772
+ (job) => job.stateDisplay === ResourceState.COMPLETED
9773
+ ).length;
9774
+ return `${completed}/${jobs.length}`;
9775
+ }
9705
9776
  }
9706
9777
  class EventModel extends ResourceModel {
9707
9778
  constructor(_rawYaml, _globalStore) {
@@ -10275,13 +10346,20 @@ const ConditionsTable = ({ conditions = [] }) => {
10275
10346
  width: 403
10276
10347
  }
10277
10348
  ];
10278
- const { data: finalData, currentPage, onPageChange, onSorterChange } = useTableData({
10349
+ const {
10350
+ data: finalData,
10351
+ currentPage,
10352
+ onPageChange,
10353
+ onSorterChange
10354
+ } = useTableData({
10279
10355
  data: conditionsWithId,
10280
10356
  columns,
10281
- defaultSorters: [{
10282
- field: "lastUpdateTime",
10283
- order: "desc"
10284
- }]
10357
+ defaultSorters: [
10358
+ {
10359
+ field: "lastUpdateTime",
10360
+ order: "desc"
10361
+ }
10362
+ ]
10285
10363
  });
10286
10364
  const currentSize = 10;
10287
10365
  if (conditionsWithId.length === 0) {
@@ -10289,7 +10367,7 @@ const ConditionsTable = ({ conditions = [] }) => {
10289
10367
  WidgetErrorContent,
10290
10368
  {
10291
10369
  errorText: t2("dovetail.no_resource", { kind: t2("dovetail.condition") }),
10292
- type: ErrorContentType.Card
10370
+ type: ErrorContentType.List
10293
10371
  }
10294
10372
  );
10295
10373
  }
@@ -10634,7 +10712,7 @@ function K8sDropdown(props) {
10634
10712
  const configs = useContext(ConfigsContext);
10635
10713
  const resourceName = getResourceNameByKind(record.kind || "", configs);
10636
10714
  const config = configs[resourceName || ""];
10637
- const { t: t2 } = useTranslation();
10715
+ const { t: t2, i18n: i18n2 } = useTranslation();
10638
10716
  const { openDeleteConfirmModal } = useDeleteModal({ resourceName: resourceName || "" });
10639
10717
  const download2 = useDownloadYAML();
10640
10718
  const openForm = useOpenForm();
@@ -10658,7 +10736,10 @@ function K8sDropdown(props) {
10658
10736
  Dropdown,
10659
10737
  {
10660
10738
  overlay: /* @__PURE__ */ jsxRuntimeExports.jsxs(Menu$1, { children: [
10661
- isInShowPage || (canEditData == null ? void 0 : canEditData.can) === false || config.hideEdit ? null : /* @__PURE__ */ jsxRuntimeExports.jsx(Menu$1.Item, { onClick: () => openForm({ id: record.id, resourceName }), children: /* @__PURE__ */ jsxRuntimeExports.jsx(Icon, { src: EditPen16PrimaryIcon, children: formType === FormType.FORM ? t2("dovetail.edit") : t2("dovetail.edit_yaml") }) }),
10739
+ isInShowPage || (canEditData == null ? void 0 : canEditData.can) === false || config.hideEdit ? null : /* @__PURE__ */ jsxRuntimeExports.jsx(Menu$1.Item, { onClick: () => openForm({ id: record.id, resourceName }), children: /* @__PURE__ */ jsxRuntimeExports.jsx(Icon, { src: EditPen16PrimaryIcon, children: formType === FormType.FORM ? `${t2("dovetail.edit")}${transformResourceKindInSentence(
10740
+ (config == null ? void 0 : config.displayName) || record.kind || "",
10741
+ i18n2.language
10742
+ )}` : t2("dovetail.edit_yaml") }) }),
10662
10743
  /* @__PURE__ */ jsxRuntimeExports.jsx(
10663
10744
  Menu$1.Item,
10664
10745
  {
@@ -10931,7 +11012,7 @@ const CronjobJobsTable = ({
10931
11012
  const columns = useMemo(() => [NameColumnRenderer(i18n2, "jobs"), StateDisplayColumnRenderer(i18n2), NameSpaceColumnRenderer(i18n2), {
10932
11013
  ...WorkloadImageColumnRenderer(i18n2),
10933
11014
  width: 238
10934
- }, CompletionsCountColumnRenderer(i18n2), DurationColumnRenderer(i18n2), AgeColumnRenderer(i18n2)], [i18n2]);
11015
+ }, PodCountOfJobColumnRenderer(i18n2), DurationColumnRenderer(i18n2), AgeColumnRenderer(i18n2)], [i18n2]);
10935
11016
  const params = useMemo(() => ({
10936
11017
  columns,
10937
11018
  useTableParams: {
@@ -10989,10 +11070,17 @@ const EventsTable = ({ uid }) => {
10989
11070
  width: 120,
10990
11071
  render(value2) {
10991
11072
  const colorMap = {
10992
- "Warning": "warning",
10993
- "Normal": "green"
11073
+ Warning: "warning",
11074
+ Normal: "green"
10994
11075
  };
10995
- return /* @__PURE__ */ jsxRuntimeExports.jsx(StatusCapsule, { color: colorMap[value2], className: cx_default(StateTagStyle, "no-background"), children: i18n2.t(`dovetail.${value2.toLowerCase()}`) });
11076
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(
11077
+ StatusCapsule,
11078
+ {
11079
+ color: colorMap[value2],
11080
+ className: cx_default(StateTagStyle, "no-background"),
11081
+ children: i18n2.t(`dovetail.${value2.toLowerCase()}`)
11082
+ }
11083
+ );
10996
11084
  },
10997
11085
  sorter: CommonSorter(["type"])
10998
11086
  },
@@ -11014,32 +11102,41 @@ const EventsTable = ({ uid }) => {
11014
11102
  width: 723,
11015
11103
  sorter: CommonSorter(["note"])
11016
11104
  },
11017
- AgeColumnRenderer(i18n2, { title: i18n2.t("dovetail.last_seen"), width: 160 }, { isRelativeTime: false })
11105
+ AgeColumnRenderer(
11106
+ i18n2,
11107
+ { title: i18n2.t("dovetail.last_seen"), width: 160 },
11108
+ { isRelativeTime: false }
11109
+ )
11018
11110
  ],
11019
11111
  [i18n2]
11020
11112
  );
11021
- const params = useMemo(() => ({
11022
- columns,
11023
- tableProps: {
11024
- defaultSize: 50
11025
- },
11026
- useTableParams: {
11027
- resource: "events",
11028
- meta: { resourceBasePath: "/apis/events.k8s.io/v1", kind: "Event" },
11029
- filters: {
11030
- permanent: [{
11031
- operator: "and",
11032
- value: [
11113
+ const params = useMemo(
11114
+ () => ({
11115
+ columns,
11116
+ tableProps: {
11117
+ defaultSize: 50
11118
+ },
11119
+ useTableParams: {
11120
+ resource: "events",
11121
+ meta: { resourceBasePath: "/apis/events.k8s.io/v1", kind: "Event" },
11122
+ filters: {
11123
+ permanent: [
11033
11124
  {
11034
- field: "regarding.uid",
11035
- operator: "eq",
11036
- value: uid
11125
+ operator: "and",
11126
+ value: [
11127
+ {
11128
+ field: "regarding.uid",
11129
+ operator: "eq",
11130
+ value: uid
11131
+ }
11132
+ ]
11037
11133
  }
11038
11134
  ]
11039
- }]
11135
+ }
11040
11136
  }
11041
- }
11042
- }), [columns, uid]);
11137
+ }),
11138
+ [columns, uid]
11139
+ );
11043
11140
  const { tableProps } = useEagleTable(params);
11044
11141
  const component = useContext(ComponentContext);
11045
11142
  const Table2 = component.Table || Table$1;
@@ -11047,18 +11144,12 @@ const EventsTable = ({ uid }) => {
11047
11144
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
11048
11145
  WidgetErrorContent,
11049
11146
  {
11050
- errorText: i18n2.t("dovetail.no_resource", { kind: i18n2.t("dovetail.event") })
11147
+ errorText: i18n2.t("dovetail.no_resource", { kind: i18n2.t("dovetail.event") }),
11148
+ type: ErrorContentType.List
11051
11149
  }
11052
11150
  );
11053
11151
  }
11054
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
11055
- Table2,
11056
- {
11057
- ...tableProps,
11058
- tableKey: "events",
11059
- showMenuColumn: false
11060
- }
11061
- );
11152
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Table2, { ...tableProps, tableKey: "events", showMenuColumn: false });
11062
11153
  };
11063
11154
  const index_mvy4dx = "";
11064
11155
  const ImageWrapperStyle = "i1u1f5zp";
@@ -11150,7 +11241,10 @@ const IngressRulesTable = ({ ingress }) => {
11150
11241
  apiVersion: "v1"
11151
11242
  }
11152
11243
  });
11153
- const flattenedRules = useMemo(() => (serviceData == null ? void 0 : serviceData.data) ? ingress.getFlattenedRules(serviceData == null ? void 0 : serviceData.data) : [], [serviceData == null ? void 0 : serviceData.data, ingress]);
11244
+ const flattenedRules = useMemo(
11245
+ () => (serviceData == null ? void 0 : serviceData.data) ? ingress.getFlattenedRules(serviceData == null ? void 0 : serviceData.data) : [],
11246
+ [serviceData == null ? void 0 : serviceData.data, ingress]
11247
+ );
11154
11248
  const rows = useMemo(() => {
11155
11249
  return addId(flattenedRules || [], "fullPath");
11156
11250
  }, [flattenedRules]);
@@ -11181,7 +11275,7 @@ const IngressRulesTable = ({ ingress }) => {
11181
11275
  key: "serviceName",
11182
11276
  display: true,
11183
11277
  dataIndex: "serviceName",
11184
- title: t2("dovetail.backend"),
11278
+ title: t2("dovetail.target_service"),
11185
11279
  sortable: true,
11186
11280
  width: 160,
11187
11281
  render: (serviceName, record) => {
@@ -11192,14 +11286,14 @@ const IngressRulesTable = ({ ingress }) => {
11192
11286
  namespace: ingress.metadata.namespace || "default",
11193
11287
  name: serviceName
11194
11288
  }
11195
- ) : record.resourceName;
11289
+ ) : /* @__PURE__ */ jsxRuntimeExports.jsx(ValueDisplay, { value: "" });
11196
11290
  }
11197
11291
  },
11198
11292
  {
11199
11293
  key: "servicePort",
11200
11294
  display: true,
11201
11295
  dataIndex: "servicePort",
11202
- title: t2("dovetail.port"),
11296
+ title: t2("dovetail.target_service_port"),
11203
11297
  width: 120,
11204
11298
  sortable: true
11205
11299
  },
@@ -11207,11 +11301,13 @@ const IngressRulesTable = ({ ingress }) => {
11207
11301
  key: "secret",
11208
11302
  display: true,
11209
11303
  dataIndex: "host",
11210
- title: "Secret",
11304
+ title: t2("dovetail.cert"),
11211
11305
  width: 160,
11212
11306
  render(host2) {
11213
11307
  var _a, _b;
11214
- const secretName = (_b = (_a = ingress._rawYaml.spec.tls) == null ? void 0 : _a.find(({ hosts }) => hosts == null ? void 0 : hosts.includes(host2))) == null ? void 0 : _b.secretName;
11308
+ const secretName = (_b = (_a = ingress._rawYaml.spec.tls) == null ? void 0 : _a.find(
11309
+ ({ hosts }) => hosts == null ? void 0 : hosts.includes(host2)
11310
+ )) == null ? void 0 : _b.secretName;
11215
11311
  return secretName ? /* @__PURE__ */ jsxRuntimeExports.jsx(
11216
11312
  ResourceLink,
11217
11313
  {
@@ -11238,7 +11334,7 @@ const IngressRulesTable = ({ ingress }) => {
11238
11334
  WidgetErrorContent,
11239
11335
  {
11240
11336
  errorText: t2("dovetail.no_resource", { kind: t2("dovetail.rule") }),
11241
- type: ErrorContentType.Card
11337
+ type: ErrorContentType.List
11242
11338
  }
11243
11339
  );
11244
11340
  }
@@ -11268,7 +11364,8 @@ const KeyValue = (props) => {
11268
11364
  const {
11269
11365
  data: data2 = {},
11270
11366
  hideSecret,
11271
- empty: empty2
11367
+ empty: empty2,
11368
+ errorContent = ErrorContentType.List
11272
11369
  } = props;
11273
11370
  const {
11274
11371
  t: t2
@@ -11286,7 +11383,7 @@ const KeyValue = (props) => {
11286
11383
  if (!result.length) {
11287
11384
  return /* @__PURE__ */ jsxRuntimeExports.jsx(WidgetErrorContent, {
11288
11385
  errorText: empty2 || t2("dovetail.empty"),
11289
- type: ErrorContentType.Card
11386
+ type: errorContent
11290
11387
  });
11291
11388
  }
11292
11389
  return /* @__PURE__ */ jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, {
@@ -11334,9 +11431,7 @@ function KeyValueAnnotation(props) {
11334
11431
  }) : null]
11335
11432
  });
11336
11433
  }
11337
- const KeyValueSecret_c3ji18 = "";
11338
- const ButtonStyle$1 = "b11tbgf7";
11339
- const GroupStyle$1 = "gtbyh5g";
11434
+ const KeyValueSecret_ltbqs = "";
11340
11435
  function KeyValueSecret(props) {
11341
11436
  const {
11342
11437
  data: data2 = {}
@@ -11346,26 +11441,23 @@ function KeyValueSecret(props) {
11346
11441
  } = useTranslation();
11347
11442
  const [hideSecret, setHideSecret] = useState(true);
11348
11443
  const toggleButton = Object.keys(data2).length ? /* @__PURE__ */ jsxRuntimeExports.jsx(Button, {
11349
- type: "quiet",
11350
11444
  prefixIcon: /* @__PURE__ */ jsxRuntimeExports.jsx(Icon, {
11351
11445
  src: hideSecret ? ViewEye16GradientGrayIcon : EntityFilterIgnoreGradient16GrayIcon
11352
11446
  }),
11353
11447
  onClick: () => setHideSecret((v) => !v),
11354
- className: ButtonStyle$1,
11355
11448
  size: "small",
11449
+ className: "c11tbgf7",
11356
11450
  children: hideSecret ? i18n2.t("dovetail.show_data_value") : i18n2.t("dovetail.hide_data_value")
11357
11451
  }) : null;
11358
- return /* @__PURE__ */ jsxRuntimeExports.jsx(ShowGroupWithTitleComponent, {
11359
- title: i18n2.t("dovetail.data"),
11360
- operationEle: toggleButton,
11361
- className: GroupStyle$1,
11362
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(KeyValue, {
11452
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", {
11453
+ className: "ctbyh5g",
11454
+ children: [toggleButton, /* @__PURE__ */ jsxRuntimeExports.jsx(KeyValue, {
11363
11455
  data: data2,
11364
11456
  hideSecret,
11365
11457
  empty: i18n2.t("dovetail.no_resource", {
11366
11458
  kind: i18n2.t("dovetail.data")
11367
11459
  })
11368
- })
11460
+ })]
11369
11461
  });
11370
11462
  }
11371
11463
  function isUtf8(buffer) {
@@ -11512,6 +11604,37 @@ function _KeyValueTableForm(props, ref) {
11512
11604
  const tableFormRef = useRef(null);
11513
11605
  const [_value, _setValue] = useState(value2 || defaultValue);
11514
11606
  const [forceUpdateCount, setForceUpdateCount] = useState(0);
11607
+ const finalExtraAction = useMemo(() => {
11608
+ if (extraAction) {
11609
+ return extraAction;
11610
+ }
11611
+ if (canImportFromFile) {
11612
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Upload, {
11613
+ multiple: true,
11614
+ showUploadList: false,
11615
+ onChange: async (e2) => {
11616
+ var _a;
11617
+ const fileValue = {
11618
+ key: e2.file.name,
11619
+ value: await readFileAsBase64(e2.file.originFileObj)
11620
+ };
11621
+ let newValue = [..._value, fileValue];
11622
+ if (_value.some((v) => v.key === fileValue.key)) {
11623
+ newValue = _value.map((v) => v.key === fileValue.key ? fileValue : v);
11624
+ }
11625
+ _setValue(newValue);
11626
+ (_a = tableFormRef.current) == null ? void 0 : _a.setData(newValue);
11627
+ onChange == null ? void 0 : onChange(newValue);
11628
+ },
11629
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(Button, {
11630
+ type: "link",
11631
+ size: "small",
11632
+ children: t2("dovetail.import_from_file")
11633
+ })
11634
+ });
11635
+ }
11636
+ return null;
11637
+ }, [canImportFromFile, t2, _value, onChange, extraAction]);
11515
11638
  const validate = useCallback(() => {
11516
11639
  return new Promise((resolve) => {
11517
11640
  var _a;
@@ -11632,7 +11755,7 @@ function _KeyValueTableForm(props, ref) {
11632
11755
  rowAddConfig: {
11633
11756
  addible: true,
11634
11757
  text: () => addButtonText,
11635
- extraAction
11758
+ extraAction: finalExtraAction
11636
11759
  },
11637
11760
  defaultData: _value,
11638
11761
  row: {
@@ -11647,29 +11770,7 @@ function _KeyValueTableForm(props, ref) {
11647
11770
  hideEmptyTable: true
11648
11771
  }), isHideLabelFormatPopover ? null : /* @__PURE__ */ jsxRuntimeExports.jsx(LabelFormatPopover, {
11649
11772
  noValueValidation
11650
- }), canImportFromFile ? /* @__PURE__ */ jsxRuntimeExports.jsx(Upload, {
11651
- multiple: false,
11652
- showUploadList: false,
11653
- onChange: async (e2) => {
11654
- var _a;
11655
- const fileValue = {
11656
- key: e2.file.name,
11657
- value: await readFileAsBase64(e2.file.originFileObj)
11658
- };
11659
- let newValue = [..._value, fileValue];
11660
- if (_value.some((v) => v.key === fileValue.key)) {
11661
- newValue = _value.map((v) => v.key === fileValue.key ? fileValue : v);
11662
- }
11663
- _setValue(newValue);
11664
- (_a = tableFormRef.current) == null ? void 0 : _a.setData(newValue);
11665
- onChange == null ? void 0 : onChange(newValue);
11666
- },
11667
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(Button, {
11668
- type: "link",
11669
- size: "small",
11670
- children: t2("dovetail.import_from_file")
11671
- })
11672
- }) : null]
11773
+ })]
11673
11774
  });
11674
11775
  }
11675
11776
  const KeyValueTableForm = React.forwardRef(_KeyValueTableForm);
@@ -12289,6 +12390,7 @@ function WorkloadReplicas({
12289
12390
  })]
12290
12391
  });
12291
12392
  }
12393
+ const fields_1lap7d5 = "";
12292
12394
  var AreaType = /* @__PURE__ */ ((AreaType2) => {
12293
12395
  AreaType2["Inline"] = "Inline";
12294
12396
  AreaType2["Grid"] = "Grid";
@@ -12301,7 +12403,10 @@ const ImageField = (i18n2) => {
12301
12403
  title: i18n2.t("dovetail.image"),
12302
12404
  path: ["imageNames"],
12303
12405
  renderContent(value2) {
12304
- return /* @__PURE__ */ jsxRuntimeExports.jsx(ImageNames, { value: value2, breakLine: false });
12406
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(ImageNames, {
12407
+ value: value2,
12408
+ breakLine: false
12409
+ });
12305
12410
  }
12306
12411
  };
12307
12412
  };
@@ -12310,7 +12415,10 @@ const ReplicaField = () => {
12310
12415
  key: "Replicas",
12311
12416
  path: [],
12312
12417
  renderContent: (_, record) => {
12313
- return /* @__PURE__ */ jsxRuntimeExports.jsx(WorkloadReplicas, { record, editable: true });
12418
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(WorkloadReplicas, {
12419
+ record,
12420
+ editable: true
12421
+ });
12314
12422
  }
12315
12423
  };
12316
12424
  };
@@ -12319,7 +12427,9 @@ const ConditionsField = () => {
12319
12427
  key: "Conditions",
12320
12428
  path: ["status", "conditions"],
12321
12429
  renderContent: (value2) => {
12322
- return /* @__PURE__ */ jsxRuntimeExports.jsx(ConditionsTable, { conditions: value2 });
12430
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(ConditionsTable, {
12431
+ conditions: value2
12432
+ });
12323
12433
  }
12324
12434
  };
12325
12435
  };
@@ -12328,7 +12438,9 @@ const NodeTaintsField = () => {
12328
12438
  key: "NodeTaints",
12329
12439
  path: ["spec", "taints"],
12330
12440
  renderContent: (value2) => {
12331
- return /* @__PURE__ */ jsxRuntimeExports.jsx(NodeTaintsTable, { taints: value2 });
12441
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(NodeTaintsTable, {
12442
+ taints: value2
12443
+ });
12332
12444
  }
12333
12445
  };
12334
12446
  };
@@ -12338,16 +12450,13 @@ const PodsField = () => {
12338
12450
  path: [],
12339
12451
  renderContent: (_, record) => {
12340
12452
  var _a, _b;
12341
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
12342
- WorkloadPodsTable,
12343
- {
12344
- selector: (_b = (_a = record.metadata.relations) == null ? void 0 : _a.find((r2) => {
12345
- return r2.kind === "Pod" && r2.type === "creates";
12346
- })) == null ? void 0 : _b.selector,
12347
- namespace: record.metadata.namespace,
12348
- hideToolbar: true
12349
- }
12350
- );
12453
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(WorkloadPodsTable, {
12454
+ selector: (_b = (_a = record.metadata.relations) == null ? void 0 : _a.find((r2) => {
12455
+ return r2.kind === "Pod" && r2.type === "creates";
12456
+ })) == null ? void 0 : _b.selector,
12457
+ namespace: record.metadata.namespace,
12458
+ hideToolbar: true
12459
+ });
12351
12460
  }
12352
12461
  };
12353
12462
  };
@@ -12357,19 +12466,16 @@ const JobsField = () => {
12357
12466
  path: [],
12358
12467
  renderContent: (_, record) => {
12359
12468
  var _a, _b, _c;
12360
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
12361
- CronjobJobsTable,
12362
- {
12363
- owner: {
12364
- apiVersion: record.apiVersion || "",
12365
- kind: record.kind || "",
12366
- name: ((_a = record.metadata) == null ? void 0 : _a.name) || "",
12367
- namespace: ((_b = record.metadata) == null ? void 0 : _b.namespace) || "",
12368
- uid: ((_c = record.metadata) == null ? void 0 : _c.uid) || ""
12369
- },
12370
- hideToolBar: true
12371
- }
12372
- );
12469
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(CronjobJobsTable, {
12470
+ owner: {
12471
+ apiVersion: record.apiVersion || "",
12472
+ kind: record.kind || "",
12473
+ name: ((_a = record.metadata) == null ? void 0 : _a.name) || "",
12474
+ namespace: ((_b = record.metadata) == null ? void 0 : _b.namespace) || "",
12475
+ uid: ((_c = record.metadata) == null ? void 0 : _c.uid) || ""
12476
+ },
12477
+ hideToolBar: true
12478
+ });
12373
12479
  }
12374
12480
  };
12375
12481
  };
@@ -12378,13 +12484,15 @@ const DataField = (i18n2) => {
12378
12484
  key: "data",
12379
12485
  path: ["data"],
12380
12486
  renderContent: (val) => {
12381
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
12382
- KeyValue,
12383
- {
12487
+ return /* @__PURE__ */ jsxRuntimeExports.jsx("div", {
12488
+ className: "c91cpym",
12489
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(KeyValue, {
12384
12490
  data: val,
12385
- empty: i18n2.t("dovetail.no_resource", { kind: i18n2.t("dovetail.data") })
12386
- }
12387
- );
12491
+ empty: i18n2.t("dovetail.no_resource", {
12492
+ kind: i18n2.t("dovetail.data")
12493
+ })
12494
+ })
12495
+ });
12388
12496
  }
12389
12497
  };
12390
12498
  };
@@ -12397,7 +12505,12 @@ const SecretDataField = () => {
12397
12505
  for (const key2 in val) {
12398
12506
  decodeVal[key2] = atob(val[key2]);
12399
12507
  }
12400
- return /* @__PURE__ */ jsxRuntimeExports.jsx(KeyValueSecret, { data: decodeVal });
12508
+ return /* @__PURE__ */ jsxRuntimeExports.jsx("div", {
12509
+ className: "ca9k82k",
12510
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(KeyValueSecret, {
12511
+ data: decodeVal
12512
+ })
12513
+ });
12401
12514
  }
12402
12515
  };
12403
12516
  };
@@ -12408,7 +12521,9 @@ const StartTimeField = (i18n2) => {
12408
12521
  title: i18n2.t("dovetail.started"),
12409
12522
  path: ["status", "startTime"],
12410
12523
  renderContent(value2) {
12411
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Time, { date: value2 });
12524
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Time, {
12525
+ date: value2
12526
+ });
12412
12527
  }
12413
12528
  };
12414
12529
  };
@@ -12442,16 +12557,13 @@ const ServicePodsField = () => {
12442
12557
  path: [],
12443
12558
  renderContent: (_, record) => {
12444
12559
  var _a, _b, _c;
12445
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
12446
- WorkloadPodsTable,
12447
- {
12448
- selector: (_b = (_a = record.metadata.relations) == null ? void 0 : _a.find((r2) => {
12449
- return r2.kind === "Pod" && r2.type === "selects";
12450
- })) == null ? void 0 : _b.selector,
12451
- namespace: (_c = record.metadata) == null ? void 0 : _c.namespace,
12452
- hideToolbar: true
12453
- }
12454
- );
12560
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(WorkloadPodsTable, {
12561
+ selector: (_b = (_a = record.metadata.relations) == null ? void 0 : _a.find((r2) => {
12562
+ return r2.kind === "Pod" && r2.type === "selects";
12563
+ })) == null ? void 0 : _b.selector,
12564
+ namespace: (_c = record.metadata) == null ? void 0 : _c.namespace,
12565
+ hideToolbar: true
12566
+ });
12455
12567
  }
12456
12568
  };
12457
12569
  };
@@ -12460,17 +12572,32 @@ const IngressRulesTableTabField = () => {
12460
12572
  key: "rules",
12461
12573
  path: ["spec", "rules"],
12462
12574
  renderContent: (_, record) => {
12463
- return /* @__PURE__ */ jsxRuntimeExports.jsx(IngressRulesTable, { ingress: record });
12575
+ return /* @__PURE__ */ jsxRuntimeExports.jsx("div", {
12576
+ className: "c1k4htrr",
12577
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(IngressRulesTable, {
12578
+ ingress: record
12579
+ })
12580
+ });
12464
12581
  }
12465
12582
  };
12466
12583
  };
12467
- const EventsTableTabField = () => {
12584
+ const EventsTableTabField = ({
12585
+ size
12586
+ }) => {
12468
12587
  return {
12469
12588
  key: "event",
12470
12589
  path: [],
12471
12590
  renderContent: (_, record) => {
12472
12591
  var _a;
12473
- return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: { padding: "0 24px", height: "100%" }, children: /* @__PURE__ */ jsxRuntimeExports.jsx(EventsTable, { uid: (_a = record.metadata) == null ? void 0 : _a.uid }) });
12592
+ return /* @__PURE__ */ jsxRuntimeExports.jsx("div", {
12593
+ style: {
12594
+ padding: size === "small" ? "0 12px" : "0 24px",
12595
+ height: "100%"
12596
+ },
12597
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(EventsTable, {
12598
+ uid: (_a = record.metadata) == null ? void 0 : _a.uid
12599
+ })
12600
+ });
12474
12601
  }
12475
12602
  };
12476
12603
  };
@@ -12486,7 +12613,9 @@ const AgeField = (i18n2) => ({
12486
12613
  title: i18n2.t("dovetail.created_time"),
12487
12614
  path: ["metadata", "creationTimestamp"],
12488
12615
  renderContent(value2) {
12489
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Time, { date: new Date(value2) });
12616
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Time, {
12617
+ date: new Date(value2)
12618
+ });
12490
12619
  }
12491
12620
  });
12492
12621
  const LabelsField = (i18n2) => ({
@@ -12497,7 +12626,9 @@ const LabelsField = (i18n2) => ({
12497
12626
  if (!value2) {
12498
12627
  return "-";
12499
12628
  }
12500
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Tags, { value: value2 });
12629
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Tags, {
12630
+ value: value2
12631
+ });
12501
12632
  }
12502
12633
  });
12503
12634
  const AnnotationsField = (i18n2) => ({
@@ -12505,7 +12636,10 @@ const AnnotationsField = (i18n2) => ({
12505
12636
  title: i18n2.t("dovetail.annotation"),
12506
12637
  path: ["metadata", "annotations"],
12507
12638
  renderContent: (value2) => {
12508
- return /* @__PURE__ */ jsxRuntimeExports.jsx(KeyValueAnnotation, { data: value2, expandable: true });
12639
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(KeyValueAnnotation, {
12640
+ data: value2,
12641
+ expandable: true
12642
+ });
12509
12643
  }
12510
12644
  });
12511
12645
  const ServiceInnerClusterAccessField = () => ({
@@ -12514,23 +12648,22 @@ const ServiceInnerClusterAccessField = () => ({
12514
12648
  title: /* @__PURE__ */ jsxRuntimeExports.jsx(ServiceInClusterAccessTitle, {}),
12515
12649
  path: [],
12516
12650
  renderContent: (_, record) => {
12517
- return /* @__PURE__ */ jsxRuntimeExports.jsx(ServiceInClusterAccessComponent, { service: record });
12651
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(ServiceInClusterAccessComponent, {
12652
+ service: record
12653
+ });
12518
12654
  }
12519
12655
  });
12520
12656
  const ServiceOutClusterAccessField = (clusterVip) => ({
12521
- key: "innerClusterAccess",
12657
+ key: "outClusterAccess",
12522
12658
  col: 12,
12523
12659
  title: /* @__PURE__ */ jsxRuntimeExports.jsx(ServiceOutClusterAccessTitle, {}),
12524
12660
  path: [],
12525
12661
  renderContent: (_, record) => {
12526
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
12527
- ServiceOutClusterAccessComponent,
12528
- {
12529
- service: record,
12530
- breakLine: false,
12531
- clusterVip
12532
- }
12533
- );
12662
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(ServiceOutClusterAccessComponent, {
12663
+ service: record,
12664
+ breakLine: false,
12665
+ clusterVip
12666
+ });
12534
12667
  }
12535
12668
  });
12536
12669
  const PodSelectorField = () => ({
@@ -12539,14 +12672,24 @@ const PodSelectorField = () => ({
12539
12672
  renderContent: (_, resource) => {
12540
12673
  const spec = resource._rawYaml.spec;
12541
12674
  const selector = spec && ("selector" in spec && spec.selector || "podSelector" in spec && spec.podSelector.matchLabels);
12542
- return /* @__PURE__ */ jsxRuntimeExports.jsx(PodSelectorTable, { podSelectors: selector || {} });
12675
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(PodSelectorTable, {
12676
+ podSelectors: selector || {}
12677
+ });
12543
12678
  }
12544
12679
  });
12545
12680
  const PortsTableField = () => ({
12546
12681
  key: "ports",
12547
12682
  path: [],
12548
12683
  renderContent: (_, service) => {
12549
- return /* @__PURE__ */ jsxRuntimeExports.jsx(PortsTable, { service });
12684
+ return /* @__PURE__ */ jsxRuntimeExports.jsx("div", {
12685
+ style: {
12686
+ padding: "0 24px",
12687
+ height: "100%"
12688
+ },
12689
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(PortsTable, {
12690
+ service
12691
+ })
12692
+ });
12550
12693
  }
12551
12694
  });
12552
12695
  const DurationField = (i18n2) => {
@@ -12556,7 +12699,9 @@ const DurationField = (i18n2) => {
12556
12699
  path: ["duration"],
12557
12700
  title: i18n2.t("dovetail.duration"),
12558
12701
  renderContent: (v) => {
12559
- return /* @__PURE__ */ jsxRuntimeExports.jsx(DurationTime, { value: v });
12702
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(DurationTime, {
12703
+ value: v
12704
+ });
12560
12705
  }
12561
12706
  };
12562
12707
  };
@@ -12573,26 +12718,21 @@ const StorageClassPvField = () => {
12573
12718
  key: "pvs",
12574
12719
  path: ["pvs"],
12575
12720
  renderContent: (_, sc) => {
12576
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
12577
- ResourceTable,
12578
- {
12579
- resource: "persistentvolumes",
12580
- useTableParams: {
12581
- filters: {
12582
- permanent: [
12583
- {
12584
- field: "",
12585
- value: "",
12586
- fn(pv2) {
12587
- var _a;
12588
- return sc.filterPV(pv2, (_a = sc.metadata) == null ? void 0 : _a.name);
12589
- }
12590
- }
12591
- ]
12592
- }
12721
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(ResourceTable, {
12722
+ resource: "persistentvolumes",
12723
+ useTableParams: {
12724
+ filters: {
12725
+ permanent: [{
12726
+ field: "",
12727
+ value: "",
12728
+ fn(pv2) {
12729
+ var _a;
12730
+ return sc.filterPV(pv2, (_a = sc.metadata) == null ? void 0 : _a.name);
12731
+ }
12732
+ }]
12593
12733
  }
12594
12734
  }
12595
- );
12735
+ });
12596
12736
  }
12597
12737
  };
12598
12738
  };
@@ -12603,7 +12743,10 @@ const PVCapacityField = (i18n2) => {
12603
12743
  path: ["spec", "capacity", "storage"],
12604
12744
  title: i18n2.t("dovetail.capacity"),
12605
12745
  renderContent(value2) {
12606
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Units.Byte, { rawValue: parseSi(value2), decimals: 2 });
12746
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Units.Byte, {
12747
+ rawValue: parseSi(value2),
12748
+ decimals: 2
12749
+ });
12607
12750
  }
12608
12751
  };
12609
12752
  };
@@ -12614,7 +12757,10 @@ const PVCStorageField = (i18n2) => {
12614
12757
  path: ["spec", "resources", "requests", "storage"],
12615
12758
  title: i18n2.t("dovetail.distributed"),
12616
12759
  renderContent(value2, pvc2) {
12617
- return /* @__PURE__ */ jsxRuntimeExports.jsx(PVCDistributeStorage, { pvc: pvc2, editable: true });
12760
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(PVCDistributeStorage, {
12761
+ pvc: pvc2,
12762
+ editable: true
12763
+ });
12618
12764
  }
12619
12765
  };
12620
12766
  };
@@ -12625,14 +12771,11 @@ const PVRefField = (i18n2) => {
12625
12771
  path: ["pv"],
12626
12772
  title: i18n2.t("dovetail.pv"),
12627
12773
  renderContent(value2) {
12628
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
12629
- ResourceLink,
12630
- {
12631
- resourceName: "persistentvolumes",
12632
- namespace: "",
12633
- name: value2
12634
- }
12635
- );
12774
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(ResourceLink, {
12775
+ resourceName: "persistentvolumes",
12776
+ namespace: "",
12777
+ name: value2
12778
+ });
12636
12779
  }
12637
12780
  };
12638
12781
  };
@@ -12643,7 +12786,11 @@ const PVStorageClassField = (i18n2) => {
12643
12786
  path: ["spec", "storageClassName"],
12644
12787
  title: i18n2.t("dovetail.storage_class"),
12645
12788
  renderContent(value2) {
12646
- return /* @__PURE__ */ jsxRuntimeExports.jsx(ResourceLink, { resourceName: "storageclasses", namespace: "", name: value2 });
12789
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(ResourceLink, {
12790
+ resourceName: "storageclasses",
12791
+ namespace: "",
12792
+ name: value2
12793
+ });
12647
12794
  }
12648
12795
  };
12649
12796
  };
@@ -12654,7 +12801,10 @@ const PVPhaseField = (i18n2) => {
12654
12801
  path: ["stateDisplay"],
12655
12802
  title: i18n2.t("dovetail.state"),
12656
12803
  renderContent(value2) {
12657
- return /* @__PURE__ */ jsxRuntimeExports.jsx(StateTag, { state: value2, hideBackground: true });
12804
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(StateTag, {
12805
+ state: value2,
12806
+ hideBackground: true
12807
+ });
12658
12808
  }
12659
12809
  };
12660
12810
  };
@@ -12665,7 +12815,9 @@ const PVVolumeModeField = (i18n2) => {
12665
12815
  path: ["spec", "volumeMode"],
12666
12816
  title: i18n2.t("dovetail.volume_mode"),
12667
12817
  renderContent(value2) {
12668
- return /* @__PURE__ */ jsxRuntimeExports.jsx(PVVolumeModeDisplay, { value: value2 });
12818
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(PVVolumeModeDisplay, {
12819
+ value: value2
12820
+ });
12669
12821
  }
12670
12822
  };
12671
12823
  };
@@ -12686,22 +12838,17 @@ const PVCPodsField = () => {
12686
12838
  path: [],
12687
12839
  renderContent: (_, record) => {
12688
12840
  var _a;
12689
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
12690
- WorkloadPodsTable,
12691
- {
12692
- filter: (item) => {
12693
- var _a2, _b;
12694
- return !!((_b = (_a2 = item.spec) == null ? void 0 : _a2.volumes) == null ? void 0 : _b.some(
12695
- (v) => {
12696
- var _a3, _b2;
12697
- return ((_a3 = v.persistentVolumeClaim) == null ? void 0 : _a3.claimName) === ((_b2 = record.metadata) == null ? void 0 : _b2.name);
12698
- }
12699
- ));
12700
- },
12701
- namespace: (_a = record.metadata) == null ? void 0 : _a.namespace,
12702
- hideToolbar: true
12703
- }
12704
- );
12841
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(WorkloadPodsTable, {
12842
+ filter: (item) => {
12843
+ var _a2, _b;
12844
+ return !!((_b = (_a2 = item.spec) == null ? void 0 : _a2.volumes) == null ? void 0 : _b.some((v) => {
12845
+ var _a3, _b2;
12846
+ return ((_a3 = v.persistentVolumeClaim) == null ? void 0 : _a3.claimName) === ((_b2 = record.metadata) == null ? void 0 : _b2.name);
12847
+ }));
12848
+ },
12849
+ namespace: (_a = record.metadata) == null ? void 0 : _a.namespace,
12850
+ hideToolbar: true
12851
+ });
12705
12852
  }
12706
12853
  };
12707
12854
  };
@@ -12712,15 +12859,14 @@ const PVCRefField = (i18n2) => {
12712
12859
  path: ["pvc"],
12713
12860
  title: i18n2.t("dovetail.pvc"),
12714
12861
  renderContent(value2, pv2) {
12715
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
12716
- ResourceLink,
12717
- {
12718
- resourceName: "persistentvolumeclaims",
12719
- namespace: pv2.pvcNamespace || "default",
12720
- name: value2,
12721
- query: { uid: pv2.pvcUid }
12862
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(ResourceLink, {
12863
+ resourceName: "persistentvolumeclaims",
12864
+ namespace: pv2.pvcNamespace || "default",
12865
+ name: value2,
12866
+ query: {
12867
+ uid: pv2.pvcUid
12722
12868
  }
12723
- );
12869
+ });
12724
12870
  }
12725
12871
  };
12726
12872
  };
@@ -12774,10 +12920,71 @@ const ResourceTableField = (resource, useTableParams) => {
12774
12920
  key: resource,
12775
12921
  path: [],
12776
12922
  renderContent() {
12777
- return /* @__PURE__ */ jsxRuntimeExports.jsx(ResourceTable, { resource, useTableParams });
12923
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(ResourceTable, {
12924
+ resource,
12925
+ useTableParams
12926
+ });
12778
12927
  }
12779
12928
  };
12780
12929
  };
12930
+ const PodCountOfJobField = (i18n2) => {
12931
+ return {
12932
+ key: "podCount",
12933
+ path: [],
12934
+ col: 12,
12935
+ title: /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip, {
12936
+ title: i18n2.t("dovetail.job_pod_count_tooltip"),
12937
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", {
12938
+ className: DashedTitleStyle,
12939
+ children: i18n2.t("dovetail.pod_num")
12940
+ })
12941
+ }),
12942
+ renderContent: (_, record) => {
12943
+ return /* @__PURE__ */ jsxRuntimeExports.jsx("span", {
12944
+ children: record.podCountDisplay
12945
+ });
12946
+ }
12947
+ };
12948
+ };
12949
+ const index_15s69c5 = "";
12950
+ const ItemWrapperStyle = "i1hk9uwu";
12951
+ const LabelsAndAnnotationsShow = ({
12952
+ labels,
12953
+ annotations,
12954
+ size = "medium"
12955
+ }) => {
12956
+ const {
12957
+ i18n: sksI18n
12958
+ } = useTranslation();
12959
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", {
12960
+ className: "c1wn08fn",
12961
+ style: {
12962
+ padding: size === "small" ? "12px" : "16px 24px",
12963
+ gap: size === "small" ? "12px" : "16px"
12964
+ },
12965
+ children: [/* @__PURE__ */ jsxRuntimeExports.jsxs("div", {
12966
+ className: ItemWrapperStyle,
12967
+ children: [/* @__PURE__ */ jsxRuntimeExports.jsx("div", {
12968
+ className: SmallSectionTitleStyle,
12969
+ children: sksI18n.t("dovetail.label")
12970
+ }), Object.keys(labels || {}).length ? /* @__PURE__ */ jsxRuntimeExports.jsx(Tags, {
12971
+ value: labels
12972
+ }) : /* @__PURE__ */ jsxRuntimeExports.jsx(WidgetErrorContent, {
12973
+ errorText: sksI18n.t("dovetail.empty"),
12974
+ type: ErrorContentType.Card
12975
+ })]
12976
+ }), /* @__PURE__ */ jsxRuntimeExports.jsxs("div", {
12977
+ className: ItemWrapperStyle,
12978
+ children: [/* @__PURE__ */ jsxRuntimeExports.jsx("div", {
12979
+ className: SmallSectionTitleStyle,
12980
+ children: sksI18n.t("dovetail.annotation")
12981
+ }), /* @__PURE__ */ jsxRuntimeExports.jsx(KeyValue, {
12982
+ data: annotations,
12983
+ errorContent: ErrorContentType.Card
12984
+ })]
12985
+ })]
12986
+ });
12987
+ };
12781
12988
  const baseNoReset = "";
12782
12989
  const index_14irc29 = "";
12783
12990
  const WrapperStyle$3 = "wve7dfm";
@@ -12973,22 +13180,30 @@ const PodLog = ({
12973
13180
  })]
12974
13181
  });
12975
13182
  };
12976
- const EventsTab = (i18n2) => ({
13183
+ const EventsTab = ({
13184
+ i18n: i18n2,
13185
+ size
13186
+ }) => ({
12977
13187
  title: i18n2.t("dovetail.event"),
12978
13188
  key: "events",
13189
+ background: "white",
12979
13190
  groups: [
12980
13191
  {
12981
13192
  areas: [
12982
13193
  {
12983
- fields: [EventsTableTabField()]
13194
+ fields: [EventsTableTabField({ size })]
12984
13195
  }
12985
13196
  ]
12986
13197
  }
12987
13198
  ]
12988
13199
  });
12989
- const ConditionsTab = (i18n2) => ({
13200
+ const ConditionsTab = ({
13201
+ i18n: i18n2,
13202
+ size
13203
+ }) => ({
12990
13204
  title: i18n2.t("dovetail.condition"),
12991
13205
  key: "conditions",
13206
+ background: "white",
12992
13207
  groups: [
12993
13208
  {
12994
13209
  areas: [
@@ -12998,10 +13213,16 @@ const ConditionsTab = (i18n2) => ({
12998
13213
  key: "Conditions",
12999
13214
  path: ["status", "conditions"],
13000
13215
  renderContent: (value2) => {
13001
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { padding: "0 24px", height: "100%" }, children: [
13002
- /* @__PURE__ */ jsxRuntimeExports.jsx(ConditionsTable, { conditions: value2 }),
13003
- ";"
13004
- ] });
13216
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(
13217
+ "div",
13218
+ {
13219
+ style: {
13220
+ padding: size === "small" ? "0 12px" : "0 24px",
13221
+ height: "100%"
13222
+ },
13223
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(ConditionsTable, { conditions: value2 })
13224
+ }
13225
+ );
13005
13226
  }
13006
13227
  }
13007
13228
  ]
@@ -13010,41 +13231,31 @@ const ConditionsTab = (i18n2) => ({
13010
13231
  }
13011
13232
  ]
13012
13233
  });
13013
- const LabelAnnotationsTab = (i18n2) => ({
13234
+ const LabelAnnotationsTab = ({
13235
+ i18n: i18n2,
13236
+ size
13237
+ }) => ({
13014
13238
  title: i18n2.t("dovetail.label_annotations"),
13015
13239
  key: "label-annotations",
13240
+ background: "white",
13016
13241
  groups: [
13017
13242
  {
13018
- title: i18n2.t("dovetail.label"),
13019
13243
  areas: [
13020
13244
  {
13021
13245
  fields: [
13022
13246
  {
13023
- key: "Labels",
13024
- title: i18n2.t("dovetail.label"),
13025
- path: ["metadata", "labels"],
13026
- render: (value2) => {
13027
- if (!value2) {
13028
- return "-";
13029
- }
13030
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Tags, { value: value2 });
13031
- }
13032
- }
13033
- ]
13034
- }
13035
- ]
13036
- },
13037
- {
13038
- title: i18n2.t("dovetail.annotation"),
13039
- areas: [
13040
- {
13041
- fields: [
13042
- {
13043
- key: "Annotations",
13044
- title: i18n2.t("dovetail.annotation"),
13045
- path: ["metadata", "annotations"],
13046
- render: (value2) => {
13047
- return /* @__PURE__ */ jsxRuntimeExports.jsx(KeyValue, { data: value2 });
13247
+ key: "label-annotations",
13248
+ path: [],
13249
+ renderContent: (_, record) => {
13250
+ var _a, _b;
13251
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(
13252
+ LabelsAndAnnotationsShow,
13253
+ {
13254
+ labels: (_a = record.metadata) == null ? void 0 : _a.labels,
13255
+ annotations: (_b = record.metadata) == null ? void 0 : _b.annotations,
13256
+ size
13257
+ }
13258
+ );
13048
13259
  }
13049
13260
  }
13050
13261
  ]
@@ -13056,6 +13267,7 @@ const LabelAnnotationsTab = (i18n2) => ({
13056
13267
  const PodLogTab = (i18n2, apiUrl) => ({
13057
13268
  title: i18n2.t("dovetail.log"),
13058
13269
  key: "pod-log",
13270
+ background: "white",
13059
13271
  groups: [
13060
13272
  {
13061
13273
  areas: [
@@ -13074,6 +13286,58 @@ const PodLogTab = (i18n2, apiUrl) => ({
13074
13286
  }
13075
13287
  ]
13076
13288
  });
13289
+ const PortsTab = ({
13290
+ i18n: i18n2
13291
+ }) => ({
13292
+ title: i18n2.t("dovetail.port"),
13293
+ key: "ports",
13294
+ background: "white",
13295
+ groups: [
13296
+ {
13297
+ areas: [
13298
+ {
13299
+ fields: [PortsTableField()]
13300
+ }
13301
+ ]
13302
+ }
13303
+ ]
13304
+ });
13305
+ const IngressRulesTab = ({
13306
+ i18n: i18n2
13307
+ }) => ({
13308
+ title: i18n2.t("dovetail.rule"),
13309
+ key: "ingress-rules",
13310
+ background: "white",
13311
+ groups: [
13312
+ {
13313
+ areas: [{ fields: [IngressRulesTableTabField()] }]
13314
+ }
13315
+ ]
13316
+ });
13317
+ const DataTab = ({
13318
+ i18n: i18n2
13319
+ }) => ({
13320
+ title: i18n2.t("dovetail.data"),
13321
+ key: "data",
13322
+ background: "white",
13323
+ groups: [
13324
+ {
13325
+ areas: [{ fields: [DataField(i18n2)] }]
13326
+ }
13327
+ ]
13328
+ });
13329
+ const SecretDataTab = ({
13330
+ i18n: i18n2
13331
+ }) => ({
13332
+ title: i18n2.t("dovetail.data"),
13333
+ key: "secret-data",
13334
+ background: "white",
13335
+ groups: [
13336
+ {
13337
+ areas: [{ fields: [SecretDataField()] }]
13338
+ }
13339
+ ]
13340
+ });
13077
13341
  const NetworkPolicyRulesViewer_r6jity = "";
13078
13342
  const MonacoYamlEditor$3 = lazy(() => Promise.resolve().then(() => MonacoYamlEditor$1));
13079
13343
  const EditorStyle$1 = "e1cjl2b8";
@@ -13235,8 +13499,6 @@ const BasicGroup = (i18n2, {
13235
13499
  {
13236
13500
  fields: (isShowNamespace ? [NamespaceField(i18n2)] : []).concat([
13237
13501
  ...basicFields,
13238
- LabelsField(i18n2),
13239
- AnnotationsField(i18n2),
13240
13502
  AgeField(i18n2)
13241
13503
  ])
13242
13504
  },
@@ -13306,13 +13568,6 @@ const NodeTaintsGroup = (i18n2) => ({
13306
13568
  }
13307
13569
  ]
13308
13570
  });
13309
- const SecretDataGroup = () => ({
13310
- areas: [
13311
- {
13312
- fields: [SecretDataField()]
13313
- }
13314
- ]
13315
- });
13316
13571
  const JobsGroup = () => ({
13317
13572
  title: "Job",
13318
13573
  areas: [
@@ -13321,14 +13576,6 @@ const JobsGroup = () => ({
13321
13576
  }
13322
13577
  ]
13323
13578
  });
13324
- const IngressRulesGroup = (i18n2) => ({
13325
- title: i18n2.t("dovetail.rule"),
13326
- areas: [
13327
- {
13328
- fields: [IngressRulesTableTabField()]
13329
- }
13330
- ]
13331
- });
13332
13579
  const PodSelectorGroup = (i18n2) => ({
13333
13580
  title: i18n2.t("dovetail.pod_selector"),
13334
13581
  areas: [
@@ -13345,14 +13592,6 @@ const PortsGroup = (i18n2) => ({
13345
13592
  }
13346
13593
  ]
13347
13594
  });
13348
- const DataGroup = (i18n2) => ({
13349
- title: i18n2.t("dovetail.data"),
13350
- areas: [
13351
- {
13352
- fields: [DataField(i18n2)]
13353
- }
13354
- ]
13355
- });
13356
13595
  const NetworkPolicyIngressRulesGroup = (i18n2) => ({
13357
13596
  title: i18n2.t("dovetail.ingress_rule"),
13358
13597
  areas: [
@@ -13419,7 +13658,7 @@ function Tabs(props) {
13419
13658
  return /* @__PURE__ */ jsxRuntimeExports.jsx(TabsTabPane, { tab: tab.title, children: tab.children }, tab.title);
13420
13659
  }) });
13421
13660
  }
13422
- const ShowContentView_1aeomp8 = "";
13661
+ const ShowContentView_m77hzs = "";
13423
13662
  const ShowContentWrapperStyle = "soapvs9";
13424
13663
  const BackButton = "b13d603q";
13425
13664
  const ToolBarWrapper = "tm8eaia";
@@ -13434,7 +13673,8 @@ const FieldWrapperStyle = "f1c7cta8";
13434
13673
  const TabContentStyle = "t1pt61xk";
13435
13674
  const ValueStyle = "v1to6fie";
13436
13675
  const TabsStyle = "tca5959";
13437
- const KindTagStyle = "k3dcesi";
13676
+ const SmallTabsStyle = "s3dcesi";
13677
+ const KindTagStyle = "kzyzuo8";
13438
13678
  function ShowGroupWithTitleComponent(props) {
13439
13679
  const {
13440
13680
  title,
@@ -13454,10 +13694,14 @@ function ShowGroupWithTitleComponent(props) {
13454
13694
  }
13455
13695
  function BasicShowGroupComponent(props) {
13456
13696
  const {
13457
- children
13697
+ children,
13698
+ size = "medium"
13458
13699
  } = props;
13459
13700
  return /* @__PURE__ */ jsxRuntimeExports.jsx("div", {
13460
13701
  className: cx_default(BasicGroupStyle, "basic-group"),
13702
+ style: {
13703
+ margin: size === "small" ? "12px 8px 0px 12px" : void 0
13704
+ },
13461
13705
  children
13462
13706
  });
13463
13707
  }
@@ -13473,7 +13717,8 @@ const ShowContentView = (props) => {
13473
13717
  hideBackButton = false,
13474
13718
  canCollapseTabs = false,
13475
13719
  className,
13476
- hideTopBar = false
13720
+ hideTopBar = false,
13721
+ size = "medium"
13477
13722
  } = props;
13478
13723
  const {
13479
13724
  queryResult
@@ -13505,43 +13750,47 @@ const ShowContentView = (props) => {
13505
13750
  if (!record)
13506
13751
  return null;
13507
13752
  return fields.map((field) => {
13508
- if (field.hidden)
13753
+ const shouldHide = typeof field.hidden === "function" ? field.hidden(record) : field.hidden;
13754
+ if (shouldHide)
13509
13755
  return null;
13510
13756
  let content;
13511
13757
  const value2 = get$2(record, field.path);
13512
13758
  if (field.renderContent) {
13513
- content = field.renderContent(value2, record, field);
13759
+ content = field.renderContent(value2, record, field, size);
13514
13760
  } else {
13515
13761
  content = get$2(record, field.path);
13516
13762
  }
13517
- return hasCol ? /* @__PURE__ */ jsxRuntimeExports.jsx(Col, {
13518
- flex: areaType === AreaType.Inline ? "none" : "",
13519
- span: field.col || 24,
13520
- className: "czyzuo8",
13521
- children: field.render ? field.render(value2, record, field) : /* @__PURE__ */ jsxRuntimeExports.jsxs("div", {
13522
- className: FieldWrapperStyle,
13523
- children: [field.title && /* @__PURE__ */ jsxRuntimeExports.jsx("span", {
13524
- className: Typo.Label.l4_regular_title,
13525
- style: {
13526
- width: field.labelWidth || "165px",
13527
- marginRight: 8,
13528
- flexShrink: 0,
13529
- color: "#2C385299"
13530
- },
13531
- children: field.title
13532
- }), /* @__PURE__ */ jsxRuntimeExports.jsx("span", {
13533
- style: {
13534
- flex: 1,
13535
- minWidth: 0
13536
- },
13537
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(ValueDisplay, {
13538
- className: cx_default(Typo.Label.l4_regular_title, ValueStyle),
13539
- value: content,
13540
- useOverflow: false
13541
- })
13542
- })]
13543
- })
13544
- }, field.key) : /* @__PURE__ */ jsxRuntimeExports.jsx(ValueDisplay, {
13763
+ if (hasCol) {
13764
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Col, {
13765
+ flex: areaType === AreaType.Inline ? "none" : "",
13766
+ span: field.col || 24,
13767
+ className: "cxd8k68",
13768
+ children: field.render ? field.render(value2, record, field, size) : /* @__PURE__ */ jsxRuntimeExports.jsxs("div", {
13769
+ className: FieldWrapperStyle,
13770
+ children: [field.title && /* @__PURE__ */ jsxRuntimeExports.jsx("span", {
13771
+ className: Typo.Label.l4_regular_title,
13772
+ style: {
13773
+ width: field.labelWidth || "165px",
13774
+ marginRight: 8,
13775
+ flexShrink: 0,
13776
+ color: "#2C385299"
13777
+ },
13778
+ children: field.title
13779
+ }), /* @__PURE__ */ jsxRuntimeExports.jsx("span", {
13780
+ style: {
13781
+ flex: 1,
13782
+ minWidth: 0
13783
+ },
13784
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(ValueDisplay, {
13785
+ className: cx_default(Typo.Label.l4_regular_title, ValueStyle),
13786
+ value: content,
13787
+ useOverflow: false
13788
+ })
13789
+ })]
13790
+ })
13791
+ }, field.key);
13792
+ }
13793
+ return field.render ? field.render(value2, record, field, size) : /* @__PURE__ */ jsxRuntimeExports.jsx(ValueDisplay, {
13545
13794
  style: {
13546
13795
  height: "100%"
13547
13796
  },
@@ -13553,7 +13802,10 @@ const ShowContentView = (props) => {
13553
13802
  function renderGroup(group, isBasicGroup = false) {
13554
13803
  let GroupContainer = React.Fragment;
13555
13804
  let FieldContainer = React.Fragment;
13556
- let groupContainerProps = {};
13805
+ const groupContainerProps = {
13806
+ title: group.title || "",
13807
+ size
13808
+ };
13557
13809
  let fieldContainerProps = {};
13558
13810
  if (isBasicGroup) {
13559
13811
  GroupContainer = BasicShowGroupComponent;
@@ -13563,9 +13815,6 @@ const ShowContentView = (props) => {
13563
13815
  const shouldRenderRow = !!(isBasicGroup || group.title);
13564
13816
  if (shouldRenderRow) {
13565
13817
  FieldContainer = Row;
13566
- groupContainerProps = {
13567
- title: group.title || ""
13568
- };
13569
13818
  fieldContainerProps = {
13570
13819
  gutter: [24, 8]
13571
13820
  };
@@ -13587,6 +13836,9 @@ const ShowContentView = (props) => {
13587
13836
  const stateDisplay = get$2(record, "stateDisplay");
13588
13837
  const topBar = /* @__PURE__ */ jsxRuntimeExports.jsxs("div", {
13589
13838
  className: ToolBarWrapper,
13839
+ style: {
13840
+ padding: size === "small" ? "8px 16px" : void 0
13841
+ },
13590
13842
  children: [!hideBackButton && !showConfig.renderCustomBackButton && /* @__PURE__ */ jsxRuntimeExports.jsx("div", {
13591
13843
  className: cx_default(Typo.Label.l4_bold, BackButton),
13592
13844
  onClick: () => {
@@ -13645,22 +13897,28 @@ const ShowContentView = (props) => {
13645
13897
  })]
13646
13898
  });
13647
13899
  const tabs = /* @__PURE__ */ jsxRuntimeExports.jsx(Tabs$12, {
13648
- tabs: (showConfig.tabs || []).map((tab, tabIndex) => {
13900
+ tabs: (showConfig.tabs || []).map((tab) => {
13649
13901
  var _a2;
13650
13902
  return {
13651
13903
  title: tab.title,
13652
13904
  key: tab.key,
13653
13905
  children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", {
13654
- className: cx_default(TabContentStyle, tab.groups.length <= 1 && tabIndex !== 0 && FullTabContentStyle),
13906
+ className: cx_default(TabContentStyle, tab.groups.length <= 1 && FullTabContentStyle),
13907
+ style: {
13908
+ background: tab.background === "white" ? "#fff" : void 0
13909
+ },
13655
13910
  children: (_a2 = tab.groups) == null ? void 0 : _a2.map((group) => renderGroup(group, false))
13656
13911
  })
13657
13912
  };
13658
13913
  }),
13659
- className: TabsStyle
13914
+ className: cx_default(TabsStyle, size === "small" && SmallTabsStyle)
13660
13915
  });
13661
13916
  const basicInfo = showConfig.basicGroup ? renderGroup(showConfig.basicGroup, true) : null;
13662
13917
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", {
13663
13918
  className: cx_default(ShowContentWrapperStyle, className),
13919
+ style: {
13920
+ background: size === "small" ? "#fff" : void 0
13921
+ },
13664
13922
  children: [hideTopBar ? null : /* @__PURE__ */ jsxRuntimeExports.jsx(Space, {
13665
13923
  direction: "vertical",
13666
13924
  className: ShowContentHeaderStyle,
@@ -13689,9 +13947,9 @@ const CollapseTabs = (props) => {
13689
13947
  type: "link",
13690
13948
  onClick: () => setIsCollapsed((v) => !v),
13691
13949
  suffixIcon: isCollapsed ? /* @__PURE__ */ jsxRuntimeExports.jsx(Icon, {
13692
- src: ArrowChevronUpSmall16BlueIcon
13693
- }) : /* @__PURE__ */ jsxRuntimeExports.jsx(Icon, {
13694
13950
  src: ArrowChevronDownSmall16BlueIcon
13951
+ }) : /* @__PURE__ */ jsxRuntimeExports.jsx(Icon, {
13952
+ src: ArrowChevronUpSmall16BlueIcon
13695
13953
  }),
13696
13954
  children: isCollapsed ? t2("dovetail.view_all_info") : t2("dovetail.collapse")
13697
13955
  })
@@ -14479,10 +14737,9 @@ const MemoizedFormField = memo(function FormField({
14479
14737
  control,
14480
14738
  name: fieldConfig.path.join("."),
14481
14739
  rules: {
14482
- async validate(value2) {
14740
+ async validate(value2, formValue) {
14483
14741
  if (fieldConfig.disabledWhenEdit && action === "edit")
14484
14742
  return true;
14485
- const formValue = watchedFormValues || getValues();
14486
14743
  if (!fieldConfig.validators || fieldConfig.validators.length === 0)
14487
14744
  return true;
14488
14745
  for (const func of fieldConfig.validators) {
@@ -14494,7 +14751,7 @@ const MemoizedFormField = memo(function FormField({
14494
14751
  }
14495
14752
  },
14496
14753
  render: ({ field, fieldState }) => {
14497
- var _a;
14754
+ var _a, _b;
14498
14755
  const currentFormValue = watchedFormValues || getValues();
14499
14756
  const renderProps = {
14500
14757
  field,
@@ -14517,7 +14774,7 @@ const MemoizedFormField = memo(function FormField({
14517
14774
  colon: false,
14518
14775
  labelCol: fieldConfig.layout === FormItemLayout.VERTICAL ? {} : { flex: `0 0 ${(formConfig == null ? void 0 : formConfig.labelWidth) || "216px"}` },
14519
14776
  help: fieldConfig.isHideErrorStatus ? "" : (_a = fieldState.error) == null ? void 0 : _a.message,
14520
- extra: fieldConfig.helperText,
14777
+ extra: ((_b = fieldState.error) == null ? void 0 : _b.message) === fieldConfig.helperText ? "" : fieldConfig.helperText,
14521
14778
  validateStatus: fieldState.invalid && !fieldConfig.isHideErrorStatus ? "error" : void 0,
14522
14779
  "data-test-id": fieldConfig.key,
14523
14780
  className: fieldConfig.layout === FormItemLayout.VERTICAL ? VerticalFormItemStyle : "",
@@ -17282,7 +17539,8 @@ function ResourceSelect(props) {
17282
17539
  namespace: namespace2,
17283
17540
  selectProps,
17284
17541
  value: value2,
17285
- onChange
17542
+ onChange,
17543
+ placeholder
17286
17544
  } = props;
17287
17545
  const { data: data2, isLoading, isError } = useList({
17288
17546
  resource,
@@ -17298,6 +17556,7 @@ function ResourceSelect(props) {
17298
17556
  Select,
17299
17557
  {
17300
17558
  className,
17559
+ placeholder,
17301
17560
  input: {
17302
17561
  value: value2,
17303
17562
  onChange
@@ -17309,7 +17568,7 @@ function ResourceSelect(props) {
17309
17568
  }
17310
17569
  );
17311
17570
  }
17312
- const SelectMatchLabelButton_1rnabop = "";
17571
+ const SelectMatchLabelButton_1uc76rw = "";
17313
17572
  const PopoverOverlayStyle = "p19yct45";
17314
17573
  const PopoverContentStyle = "p2255z4";
17315
17574
  const PopoverTitleStyle = "p16qejqa";
@@ -17325,12 +17584,16 @@ function ResourceMatchLabelSelector({
17325
17584
  value: value2,
17326
17585
  onChange
17327
17586
  }) {
17587
+ const {
17588
+ t: t2
17589
+ } = useTranslation();
17328
17590
  return /* @__PURE__ */ jsxRuntimeExports.jsx(ResourceSelect, {
17329
17591
  namespace: namespace2,
17330
17592
  resource,
17331
17593
  resourceBasePath,
17332
17594
  kind,
17333
17595
  value: value2,
17596
+ placeholder: t2("dovetail.select_workload"),
17334
17597
  onChange: (newValue, object2) => {
17335
17598
  var _a, _b;
17336
17599
  const resourceItem = object2.object;
@@ -17378,7 +17641,7 @@ function SelectMatchLabelButton(props) {
17378
17641
  children: [/* @__PURE__ */ jsxRuntimeExports.jsxs("div", {
17379
17642
  className: PopoverContentBodyStyle,
17380
17643
  children: [/* @__PURE__ */ jsxRuntimeExports.jsx("div", {
17381
- className: cx_default(Typo.Display.d3_bold_title, PopoverTitleStyle),
17644
+ className: cx_default(Typo.Heading.h2_bold_title, PopoverTitleStyle),
17382
17645
  children: t2("dovetail.specify_workload")
17383
17646
  }), /* @__PURE__ */ jsxRuntimeExports.jsxs("div", {
17384
17647
  className: FormWrapperStyle,
@@ -17435,9 +17698,12 @@ function SelectMatchLabelButton(props) {
17435
17698
  children: [/* @__PURE__ */ jsxRuntimeExports.jsx(Button, {
17436
17699
  onClick: () => setPopoverVisible(false),
17437
17700
  type: "quiet",
17701
+ size: "small",
17438
17702
  children: t2("dovetail.cancel")
17439
17703
  }), /* @__PURE__ */ jsxRuntimeExports.jsx(Button, {
17440
17704
  type: "primary",
17705
+ size: "small",
17706
+ disabled: !selectedResource,
17441
17707
  onClick: () => {
17442
17708
  onChange == null ? void 0 : onChange(selector);
17443
17709
  setPopoverVisible(false);
@@ -17495,8 +17761,7 @@ const MatchLabelSelector = React.forwardRef(function MatchLabelSelector2(props,
17495
17761
  onChange,
17496
17762
  isValueOptional: false,
17497
17763
  minSize: 1,
17498
- disabledChagneDefaultValues,
17499
- isHideLabelFormatPopover: true
17764
+ disabledChagneDefaultValues
17500
17765
  }
17501
17766
  );
17502
17767
  });
@@ -18333,7 +18598,7 @@ const PortsConfigForm = React.forwardRef(function PortsConfigForm2({ value: valu
18333
18598
  },
18334
18599
  {
18335
18600
  key: "name",
18336
- title: `${i18n2.t("dovetail.name")}${i18n2.t("dovetail.optional_with_bracket")}`,
18601
+ title: i18n2.t("dovetail.port_name"),
18337
18602
  type: "input",
18338
18603
  validator: ({ value: portName, rowIndex }) => {
18339
18604
  const { errorMessage } = validateRfc1123Name({
@@ -18528,9 +18793,8 @@ const IngressRulesComponent = ({ ingress }) => {
18528
18793
  });
18529
18794
  return /* @__PURE__ */ jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, { children: result });
18530
18795
  };
18531
- const columns_j8358c = "";
18532
- const DashedTitleStyle = "dh5j833";
18533
- const ServiceClusterTooltipStyle = "s1fcgan";
18796
+ const columns_gm9kgl = "";
18797
+ const ServiceClusterTooltipStyle = "sh5j833";
18534
18798
  const NameLink = (props) => {
18535
18799
  var _a;
18536
18800
  const {
@@ -18739,14 +19003,14 @@ const NodeNameColumnRenderer = (i18n2, options) => {
18739
19003
  ...options
18740
19004
  };
18741
19005
  };
18742
- const CompletionsCountColumnRenderer = (i18n2) => {
19006
+ const PodCountOfJobColumnRenderer = (i18n2) => {
18743
19007
  const dataIndex = ["succeeded"];
18744
19008
  return {
18745
19009
  key: "completions",
18746
19010
  display: true,
18747
19011
  dataIndex,
18748
19012
  title: /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip, {
18749
- title: i18n2.t("dovetail.completion_num_tooltip"),
19013
+ title: i18n2.t("dovetail.job_pod_count_tooltip"),
18750
19014
  children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", {
18751
19015
  className: DashedTitleStyle,
18752
19016
  children: i18n2.t("dovetail.pod_num")
@@ -18758,7 +19022,7 @@ const CompletionsCountColumnRenderer = (i18n2) => {
18758
19022
  sorter: CommonSorter(dataIndex),
18759
19023
  render: (_, record) => {
18760
19024
  return /* @__PURE__ */ jsxRuntimeExports.jsx("span", {
18761
- children: record.completionsDisplay
19025
+ children: record.podCountDisplay
18762
19026
  });
18763
19027
  }
18764
19028
  };
@@ -19507,7 +19771,6 @@ export {
19507
19771
  ClusterIpField,
19508
19772
  ColumnKeys,
19509
19773
  CommonSorter,
19510
- CompletionsCountColumnRenderer,
19511
19774
  ComponentContext,
19512
19775
  ConditionsField,
19513
19776
  ConditionsGroup,
@@ -19522,8 +19785,8 @@ export {
19522
19785
  DEPLOYMENT_INIT_VALUE,
19523
19786
  DaemonSetModel,
19524
19787
  DataField,
19525
- DataGroup,
19526
19788
  DataKeysColumnRenderer,
19789
+ DataTab,
19527
19790
  DeleteButton,
19528
19791
  DeleteManyButton,
19529
19792
  DeploymentModel,
@@ -19560,7 +19823,7 @@ export {
19560
19823
  IngressDefaultBackendColumnRenderer,
19561
19824
  IngressModel,
19562
19825
  IngressRulesColumnRenderer,
19563
- IngressRulesGroup,
19826
+ IngressRulesTab,
19564
19827
  IngressRulesTableTabField,
19565
19828
  IngressTlsColumnRenderer,
19566
19829
  IsDefaultSCColumnRenderer,
@@ -19577,6 +19840,7 @@ export {
19577
19840
  KeyValueSecret,
19578
19841
  KeyValueTableForm,
19579
19842
  LabelAnnotationsTab,
19843
+ LabelsAndAnnotationsShow,
19580
19844
  LabelsField,
19581
19845
  Layout,
19582
19846
  ListPage,
@@ -19638,6 +19902,8 @@ export {
19638
19902
  PodContainersGroup,
19639
19903
  PodContainersNumColumnRenderer,
19640
19904
  PodContainersTable,
19905
+ PodCountOfJobColumnRenderer,
19906
+ PodCountOfJobField,
19641
19907
  PodDropdown,
19642
19908
  PodLog,
19643
19909
  PodLogTab,
@@ -19653,6 +19919,7 @@ export {
19653
19919
  PortMappingColumnRenderer,
19654
19920
  PortsConfigForm,
19655
19921
  PortsGroup,
19922
+ PortsTab,
19656
19923
  PortsTableField,
19657
19924
  ProviderPlugins,
19658
19925
  ProvisionerColumnRenderer,
@@ -19698,7 +19965,7 @@ export {
19698
19965
  STORAGE_CLASS_INIT_VALUE,
19699
19966
  SchemaStrategy,
19700
19967
  SecretDataField,
19701
- SecretDataGroup,
19968
+ SecretDataTab,
19702
19969
  SectionTitle,
19703
19970
  Separator,
19704
19971
  ServiceInClusterAccessColumnRenderer,