@prorobotech/openapi-k8s-toolkit 1.1.0-alpha.1 → 1.1.0-alpha.3

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.
@@ -1,9 +1,9 @@
1
1
  import styled, { createGlobalStyle } from 'styled-components';
2
- import K, { useState, useRef, useReducer, useEffect, useCallback, useLayoutEffect, Fragment, createContext, useContext, useMemo, createElement, isValidElement, cloneElement, useInsertionEffect, useSyncExternalStore, memo, Suspense } from 'react';
2
+ import K, { useState, useRef, useReducer, useEffect, useCallback, useMemo, useLayoutEffect, Fragment, createContext, useContext, createElement, isValidElement, cloneElement, useInsertionEffect, useSyncExternalStore, memo, Suspense } from 'react';
3
3
  import { Input, Tree, Modal, Alert, theme, Select, Tag, Breadcrumb, Spin, Menu, Tooltip, Space, Button, Flex, Typography, Card as Card$1, Row, Col, Tabs, Form, Popover, notification, Dropdown, Table, Slider, InputNumber, Switch, Result, Progress, Checkbox, Empty } from 'antd';
4
4
  import { LoadingOutlined, ExclamationCircleFilled, CloseCircleFilled, CheckCircleFilled, PlusOutlined, ClearOutlined, MinusOutlined, CaretDownOutlined, CaretRightOutlined, InfoCircleOutlined, EyeOutlined, EyeInvisibleOutlined, SearchOutlined, MoreOutlined, CheckOutlined, CloseOutlined, BugOutlined, EllipsisOutlined } from '@ant-design/icons';
5
+ import { useQuery, useQueries, useQueryClient } from '@tanstack/react-query';
5
6
  import { Link, useNavigate, useLocation, useParams, useSearchParams } from 'react-router-dom';
6
- import { useQueries, useQuery, useQueryClient } from '@tanstack/react-query';
7
7
 
8
8
  const Spacer$1 = styled.div`
9
9
  height: ${({ $space, $spaceMob, $samespace }) => {
@@ -8316,6 +8316,63 @@ const PaddingContainer = styled.div`
8316
8316
  padding: ${({ $padding }) => $padding};
8317
8317
  `;
8318
8318
 
8319
+ const getDirectUnknownResource = async ({ uri }) => {
8320
+ return axios.get(uri);
8321
+ };
8322
+
8323
+ const useDirectUnknownResource = ({
8324
+ uri,
8325
+ queryKey,
8326
+ refetchInterval,
8327
+ isEnabled
8328
+ }) => {
8329
+ return useQuery({
8330
+ queryKey,
8331
+ queryFn: async () => {
8332
+ const response = await getDirectUnknownResource({
8333
+ uri
8334
+ });
8335
+ const data = JSON.parse(JSON.stringify(response.data));
8336
+ if (data.metadata?.resourceVersion) {
8337
+ delete data.metadata.resourceVersion;
8338
+ }
8339
+ return data;
8340
+ },
8341
+ refetchInterval: refetchInterval !== void 0 ? refetchInterval : 5e3,
8342
+ enabled: isEnabled
8343
+ });
8344
+ };
8345
+
8346
+ const useK8sVerbs = ({
8347
+ cluster,
8348
+ group,
8349
+ version,
8350
+ plural,
8351
+ isEnabled = true
8352
+ }) => {
8353
+ const uri = `/api/clusters/${cluster}/openapi-bff/verbs/getResourceVerbs?${new URLSearchParams({
8354
+ ...group ? { group } : {},
8355
+ version,
8356
+ plural
8357
+ }).toString()}`;
8358
+ const { data, isError, isLoading, error } = useDirectUnknownResource({
8359
+ uri,
8360
+ queryKey: ["k8s-verbs", group || "", version, plural],
8361
+ refetchInterval: false,
8362
+ isEnabled
8363
+ });
8364
+ const verbs = data?.verbs || [];
8365
+ const canList = verbs.includes("list");
8366
+ const canWatch = verbs.includes("watch");
8367
+ return {
8368
+ canList,
8369
+ canWatch,
8370
+ isError,
8371
+ isLoading,
8372
+ error
8373
+ };
8374
+ };
8375
+
8319
8376
  const eventKey$1 = (e) => {
8320
8377
  const n = e.metadata?.name ?? "";
8321
8378
  const ns = e.metadata?.namespace ?? "";
@@ -8811,17 +8868,122 @@ const useListWatch = ({
8811
8868
  };
8812
8869
  };
8813
8870
 
8814
- const useInfiniteSentinel = (sentinelRef, hasMore, onNeedMore) => {
8815
- useEffect(() => {
8816
- const el = sentinelRef.current;
8817
- if (!el) return void 0;
8818
- const io = new IntersectionObserver((entries) => {
8819
- const visible = entries.some((e) => e.isIntersecting);
8820
- if (visible && hasMore) onNeedMore();
8821
- });
8822
- io.observe(el);
8823
- return () => io.disconnect();
8824
- }, [sentinelRef, hasMore, onNeedMore]);
8871
+ const buildApiPrefix = (group, version) => {
8872
+ const g = (group ?? "").trim();
8873
+ const v = (version ?? "").trim();
8874
+ const isCore = !g || g === "core" || g === "v1";
8875
+ return isCore ? `/api/${v}` : `/apis/${g}/${v}`;
8876
+ };
8877
+ const buildListUri = ({
8878
+ cluster,
8879
+ group,
8880
+ version,
8881
+ plural,
8882
+ namespace,
8883
+ fieldSelector,
8884
+ labelSelector,
8885
+ limit
8886
+ }) => {
8887
+ const prefix = buildApiPrefix(group, version);
8888
+ const ns = namespace ? `/namespaces/${namespace}` : "";
8889
+ const base = `/api/clusters/${cluster}/k8s${prefix}${ns}/${plural}/`;
8890
+ const params = new URLSearchParams();
8891
+ if (fieldSelector) params.append("fieldSelector", fieldSelector);
8892
+ if (labelSelector) params.append("labelSelector", labelSelector);
8893
+ if (limit) params.append("limit", String(limit));
8894
+ return params.toString() ? `${base}?${params.toString()}` : base;
8895
+ };
8896
+ const useK8sSmartResource = ({
8897
+ cluster,
8898
+ group,
8899
+ version,
8900
+ plural,
8901
+ namespace,
8902
+ fieldSelector,
8903
+ labelSelector,
8904
+ isEnabled = true,
8905
+ listRefetchInterval = 5e3,
8906
+ limit,
8907
+ mapListWatchState
8908
+ }) => {
8909
+ const {
8910
+ canList,
8911
+ canWatch,
8912
+ isLoading: verbsLoading,
8913
+ isError: verbsIsError,
8914
+ error: verbsErrorObj
8915
+ } = useK8sVerbs({
8916
+ cluster,
8917
+ group,
8918
+ version,
8919
+ plural,
8920
+ isEnabled
8921
+ });
8922
+ const listUri = buildListUri({
8923
+ cluster,
8924
+ group,
8925
+ version,
8926
+ plural,
8927
+ namespace,
8928
+ fieldSelector,
8929
+ labelSelector,
8930
+ limit
8931
+ });
8932
+ const restEnabled = Boolean(isEnabled && canList && !canWatch && !verbsLoading && !verbsIsError);
8933
+ const {
8934
+ data: restData,
8935
+ isLoading: restLoading,
8936
+ isError: restIsError,
8937
+ error: restError
8938
+ } = useDirectUnknownResource({
8939
+ uri: listUri,
8940
+ queryKey: [
8941
+ "k8s-list",
8942
+ cluster,
8943
+ group || "",
8944
+ version,
8945
+ namespace || "",
8946
+ plural,
8947
+ fieldSelector || "",
8948
+ labelSelector || ""
8949
+ ],
8950
+ refetchInterval: listRefetchInterval,
8951
+ isEnabled: restEnabled
8952
+ });
8953
+ const watchEnabled = Boolean(isEnabled && canList && canWatch && !verbsLoading && !verbsIsError);
8954
+ const { state, status, lastError } = useListWatch({
8955
+ wsUrl: `/api/clusters/${cluster}/openapi-bff-ws/listThenWatch/listWatchWs`,
8956
+ paused: false,
8957
+ ignoreRemove: false,
8958
+ autoDrain: true,
8959
+ preserveStateOnUrlChange: true,
8960
+ isEnabled: watchEnabled,
8961
+ pageSize: limit,
8962
+ query: {
8963
+ apiGroup: group,
8964
+ apiVersion: version,
8965
+ plural,
8966
+ namespace,
8967
+ fieldSelector,
8968
+ labelSelector
8969
+ }
8970
+ });
8971
+ const defaultMap = (s) => ({ items: s.order.map((k) => s.byKey[k]) });
8972
+ const watchData = useMemo(
8973
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
8974
+ () => watchEnabled ? (mapListWatchState ?? defaultMap)(state) : void 0,
8975
+ // eslint-disable-next-line react-hooks/exhaustive-deps
8976
+ [watchEnabled, state, mapListWatchState]
8977
+ );
8978
+ const used = !isEnabled ? "disabled" : verbsLoading ? "verbs-loading" : verbsIsError ? "verbs-error" : watchEnabled ? "watch" : restEnabled ? "list" : "disabled";
8979
+ const isLoading = isEnabled && verbsLoading || used === "watch" && status === "connecting" || used === "list" && restLoading;
8980
+ let error;
8981
+ if (verbsIsError) error = verbsErrorObj;
8982
+ else if (used === "watch" && status === "closed" && lastError) error = lastError;
8983
+ else if (used === "list" && restIsError) error = restError;
8984
+ const isError = Boolean(error);
8985
+ const data = used === "watch" ? watchData : used === "list" ? restData : void 0;
8986
+ return { data, isLoading, isError, error, _meta: { used } };
8825
8987
  };
8826
8988
 
8827
8989
  const prepareTemplate = ({
@@ -8961,7 +9123,7 @@ const ManageableBreadcrumbs = ({ data }) => {
8961
9123
  return /* @__PURE__ */ jsxRuntimeExports.jsx(Styled$v.HeightDiv, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(CollapsibleBreadcrumb, { items: data.breadcrumbItems }) });
8962
9124
  };
8963
9125
  const ManageableBreadcrumbsWithDataProvider = ({
8964
- wsUrl,
9126
+ cluster,
8965
9127
  apiGroup,
8966
9128
  apiVersion,
8967
9129
  plural,
@@ -8970,28 +9132,17 @@ const ManageableBreadcrumbsWithDataProvider = ({
8970
9132
  pathname,
8971
9133
  idToCompare
8972
9134
  }) => {
8973
- const { state, status, lastError } = useListWatch({
8974
- wsUrl,
8975
- paused: false,
8976
- ignoreRemove: false,
8977
- autoDrain: true,
8978
- preserveStateOnUrlChange: true,
8979
- query: {
8980
- apiVersion,
8981
- apiGroup,
8982
- plural
8983
- },
9135
+ const {
9136
+ data: rawData,
9137
+ isError: rawDataError,
9138
+ isLoading: rawDataLoading
9139
+ } = useK8sSmartResource({
9140
+ cluster: cluster || "",
9141
+ group: apiGroup,
9142
+ version: apiVersion,
9143
+ plural,
8984
9144
  isEnabled
8985
9145
  });
8986
- const rawDataLoading = status === "connecting";
8987
- const rawDataError = status === "closed" && lastError ? lastError : void 0;
8988
- const rawData = {
8989
- items: state.order.map((key) => {
8990
- const res = state.byKey[key];
8991
- return res;
8992
- })
8993
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
8994
- };
8995
9146
  if (rawDataError) {
8996
9147
  return null;
8997
9148
  }
@@ -9177,7 +9328,7 @@ const ManageableSidebar = ({ data, noMarginTop }) => {
9177
9328
  );
9178
9329
  };
9179
9330
  const ManageableSidebarWithDataProvider = ({
9180
- wsUrl,
9331
+ cluster,
9181
9332
  apiGroup,
9182
9333
  apiVersion,
9183
9334
  plural,
@@ -9189,28 +9340,17 @@ const ManageableSidebarWithDataProvider = ({
9189
9340
  hidden,
9190
9341
  noMarginTop
9191
9342
  }) => {
9192
- const { state, status, lastError } = useListWatch({
9193
- wsUrl,
9194
- paused: false,
9195
- ignoreRemove: false,
9196
- autoDrain: true,
9197
- preserveStateOnUrlChange: true,
9198
- query: {
9199
- apiVersion,
9200
- apiGroup,
9201
- plural
9202
- },
9343
+ const {
9344
+ data: rawData,
9345
+ isError: rawDataError,
9346
+ isLoading: rawDataLoading
9347
+ } = useK8sSmartResource({
9348
+ cluster,
9349
+ group: apiGroup,
9350
+ version: apiVersion,
9351
+ plural,
9203
9352
  isEnabled
9204
9353
  });
9205
- const rawDataLoading = status === "connecting";
9206
- const rawDataError = status === "closed" && lastError ? lastError : void 0;
9207
- const rawData = {
9208
- items: state.order.map((key) => {
9209
- const res = state.byKey[key];
9210
- return res;
9211
- })
9212
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
9213
- };
9214
9354
  if (rawDataError) {
9215
9355
  return null;
9216
9356
  }
@@ -33469,49 +33609,95 @@ const AntdText = ({
33469
33609
  };
33470
33610
 
33471
33611
  const MultiQueryContext = createContext(void 0);
33472
- const MultiQueryProvider = ({ urls, dataToApplyToContext, children }) => {
33473
- const queries = useQueries({
33474
- queries: urls.map((url, index) => ({
33475
- queryKey: ["multi", index, url],
33612
+ const makeEmptyEntry = () => ({
33613
+ data: void 0,
33614
+ isLoading: false,
33615
+ isError: false,
33616
+ error: null
33617
+ });
33618
+ const aggReducer = (state, action) => {
33619
+ switch (action.type) {
33620
+ case "RESET":
33621
+ return { entries: Array.from({ length: action.total }, makeEmptyEntry) };
33622
+ case "SET_ENTRY": {
33623
+ const entries = state.entries.slice();
33624
+ entries[action.index] = action.entry;
33625
+ return { entries };
33626
+ }
33627
+ default:
33628
+ return state;
33629
+ }
33630
+ };
33631
+ const K8sFetcher = ({ index, params, dispatch }) => {
33632
+ const res = useK8sSmartResource(params);
33633
+ useEffect(() => {
33634
+ dispatch({
33635
+ type: "SET_ENTRY",
33636
+ index,
33637
+ entry: {
33638
+ data: res.data,
33639
+ isLoading: res.isLoading,
33640
+ isError: res.isError,
33641
+ error: res.error ?? null
33642
+ }
33643
+ });
33644
+ }, [index, res.data, res.isLoading, res.isError, res.error, dispatch]);
33645
+ return null;
33646
+ };
33647
+ const MultiQueryProvider = ({ items, dataToApplyToContext, children }) => {
33648
+ const k8sItems = useMemo(
33649
+ () => items.filter((x) => typeof x !== "string"),
33650
+ [items]
33651
+ );
33652
+ const urlItems = useMemo(() => items.filter((x) => typeof x === "string"), [items]);
33653
+ const k8sCount = k8sItems.length;
33654
+ const urlCount = urlItems.length;
33655
+ const [state, dispatch] = useReducer(aggReducer, { entries: Array.from({ length: k8sCount }, makeEmptyEntry) });
33656
+ useEffect(() => {
33657
+ dispatch({ type: "RESET", total: k8sCount });
33658
+ }, [k8sCount]);
33659
+ const urlQueries = useQueries({
33660
+ queries: urlItems.map((url, i) => ({
33661
+ queryKey: ["multi-url", i, url],
33476
33662
  queryFn: async () => {
33477
- const response = await axios.get(url);
33478
- return response.data;
33663
+ const res = await axios.get(url);
33664
+ return res.data;
33479
33665
  }
33480
33666
  }))
33481
33667
  });
33482
- const data = {};
33483
- const errors = [];
33484
- let isLoading;
33485
- let isError;
33486
- if (!dataToApplyToContext) {
33487
- queries.forEach((q, i) => {
33488
- data[`req${i}`] = q.data;
33489
- errors[i] = q.error ?? null;
33490
- });
33491
- isLoading = queries.some((q) => q.isLoading);
33492
- isError = queries.some((q) => q.isError);
33493
- } else {
33494
- data.req0 = dataToApplyToContext;
33495
- isLoading = false;
33496
- isError = false;
33497
- }
33498
- const value = useMemo(
33499
- () => ({ data, isLoading, isError, errors }),
33500
- /*
33501
- We use JSON.stringify(data) and JSON.stringify(errors) as dependencies to safely memoize when values deeply change (since data is a new object every render).
33502
- Alternatively, you could use a deep comparison hook or lodash.isEqual if needed.
33503
- */
33504
- // eslint-disable-next-line react-hooks/exhaustive-deps
33505
- [JSON.stringify(data), isLoading, isError, JSON.stringify(errors)]
33506
- );
33507
- return /* @__PURE__ */ jsxRuntimeExports.jsx(MultiQueryContext.Provider, { value, children });
33668
+ const value = useMemo(() => {
33669
+ if (typeof dataToApplyToContext !== "undefined") {
33670
+ return { data: { req0: dataToApplyToContext }, isLoading: false, isError: false, errors: [] };
33671
+ }
33672
+ const data = {};
33673
+ const errors = [];
33674
+ for (let i = 0; i < k8sCount; i++) {
33675
+ const e = state.entries[i] ?? makeEmptyEntry();
33676
+ data[`req${i}`] = e.data;
33677
+ errors[i] = e.isError ? e.error : null;
33678
+ }
33679
+ for (let i = 0; i < urlCount; i++) {
33680
+ const q = urlQueries[i];
33681
+ const idx = k8sCount + i;
33682
+ data[`req${idx}`] = q?.data;
33683
+ errors[idx] = q?.isError ? q.error ?? null : null;
33684
+ }
33685
+ const isLoading = state.entries.some((e) => e.isLoading) || urlQueries.some((q) => q.isLoading);
33686
+ const isError = state.entries.some((e) => e.isError) || urlQueries.some((q) => q.isError);
33687
+ return { data, isLoading, isError, errors };
33688
+ }, [dataToApplyToContext, k8sCount, urlCount, state.entries, urlQueries]);
33689
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs(MultiQueryContext.Provider, { value, children: [
33690
+ k8sItems.map((params, i) => (
33691
+ // eslint-disable-next-line react/no-array-index-key
33692
+ /* @__PURE__ */ jsxRuntimeExports.jsx(K8sFetcher, { index: i, params, dispatch }, i)
33693
+ )),
33694
+ children
33695
+ ] });
33508
33696
  };
33509
33697
  const useMultiQuery = () => {
33510
- const context = useContext(MultiQueryContext);
33511
- if (!context) {
33512
- throw new Error("useMultiQuery must be used within a MultiQueryProvider");
33513
- }
33514
- return context;
33698
+ const ctx = useContext(MultiQueryContext);
33699
+ if (!ctx) throw new Error("useMultiQuery must be used within a MultiQueryProvider");
33700
+ return ctx;
33515
33701
  };
33516
33702
 
33517
33703
  const createContextFactory = () => {
@@ -33739,7 +33925,7 @@ const MultiQuery = ({ data }) => {
33739
33925
  if (isError) {
33740
33926
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
33741
33927
  /* @__PURE__ */ jsxRuntimeExports.jsx("h4", { children: "Errors:" }),
33742
- /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { children: errors.map((e, i) => e && /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: e.message }, i)) })
33928
+ /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { children: errors.map((e, i) => e && /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: typeof e === "string" ? e : e.message }, i)) })
33743
33929
  ] });
33744
33930
  }
33745
33931
  return /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: preparedText });
@@ -33769,7 +33955,7 @@ const ParsedText = ({ data }) => {
33769
33955
  if (isError) {
33770
33956
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
33771
33957
  /* @__PURE__ */ jsxRuntimeExports.jsx("h4", { children: "Errors:" }),
33772
- /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { children: errors.map((e, i) => e && /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: e.message }, i)) })
33958
+ /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { children: errors.map((e, i) => e && /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: typeof e === "string" ? e : e.message }, i)) })
33773
33959
  ] });
33774
33960
  }
33775
33961
  const replaceValues = partsOfUrl.partsOfUrl.reduce((acc, value, index) => {
@@ -33806,7 +33992,7 @@ const ProjectInfoCard$1 = ({
33806
33992
  if (isError) {
33807
33993
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
33808
33994
  /* @__PURE__ */ jsxRuntimeExports.jsx("h4", { children: "Errors:" }),
33809
- /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { children: errors.map((e, i) => e && /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: e.message }, i)) })
33995
+ /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { children: errors.map((e, i) => e && /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: typeof e === "string" ? e : e.message }, i)) })
33810
33996
  ] });
33811
33997
  }
33812
33998
  return /* @__PURE__ */ jsxRuntimeExports.jsx(ProjectInfoCard, { clusterName, namespace, accessGroups: parsedAccessGroups, ...props, children });
@@ -33923,7 +34109,7 @@ const StatusText$1 = ({
33923
34109
  if (isError) {
33924
34110
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
33925
34111
  /* @__PURE__ */ jsxRuntimeExports.jsx("h4", { children: "Errors:" }),
33926
- /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { children: errors.map((e, i) => e && /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: e.message }, i)) })
34112
+ /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { children: errors.map((e, i) => e && /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: typeof e === "string" ? e : e.message }, i)) })
33927
34113
  ] });
33928
34114
  }
33929
34115
  const { type, text } = getResult({
@@ -34009,33 +34195,6 @@ const usePermissions = ({
34009
34195
  });
34010
34196
  };
34011
34197
 
34012
- const getDirectUnknownResource = async ({ uri }) => {
34013
- return axios.get(uri);
34014
- };
34015
-
34016
- const useDirectUnknownResource = ({
34017
- uri,
34018
- queryKey,
34019
- refetchInterval,
34020
- isEnabled
34021
- }) => {
34022
- return useQuery({
34023
- queryKey,
34024
- queryFn: async () => {
34025
- const response = await getDirectUnknownResource({
34026
- uri
34027
- });
34028
- const data = JSON.parse(JSON.stringify(response.data));
34029
- if (data.metadata?.resourceVersion) {
34030
- delete data.metadata.resourceVersion;
34031
- }
34032
- return data;
34033
- },
34034
- refetchInterval: refetchInterval !== void 0 ? refetchInterval : 5e3,
34035
- enabled: isEnabled
34036
- });
34037
- };
34038
-
34039
34198
  const getBackLinkToTable = ({ fullPath }) => {
34040
34199
  return encodeURIComponent(fullPath);
34041
34200
  };
@@ -34655,7 +34814,7 @@ const ArrayOfObjectsToKeyValues = ({ data, children }) => {
34655
34814
  if (isMultiQueryErrors) {
34656
34815
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
34657
34816
  /* @__PURE__ */ jsxRuntimeExports.jsx("h4", { children: "Errors:" }),
34658
- /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { children: errors.map((e, i) => e && /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: e.message }, i)) })
34817
+ /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { children: errors.map((e, i) => e && /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: typeof e === "string" ? e : e.message }, i)) })
34659
34818
  ] });
34660
34819
  }
34661
34820
  const jsonRoot = multiQueryData[`req${reqIndex}`];
@@ -34722,7 +34881,7 @@ const ItemCounter = ({
34722
34881
  if (isMultiQueryErrors) {
34723
34882
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
34724
34883
  /* @__PURE__ */ jsxRuntimeExports.jsx("h4", { children: "Errors:" }),
34725
- /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { children: errors.map((e, i) => e && /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: e.message }, i)) })
34884
+ /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { children: errors.map((e, i) => e && /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: typeof e === "string" ? e : e.message }, i)) })
34726
34885
  ] });
34727
34886
  }
34728
34887
  const replaceValues = partsOfUrl.partsOfUrl.reduce((acc, value, index) => {
@@ -34779,7 +34938,7 @@ const KeyCounter = ({
34779
34938
  if (isMultiQueryErrors) {
34780
34939
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
34781
34940
  /* @__PURE__ */ jsxRuntimeExports.jsx("h4", { children: "Errors:" }),
34782
- /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { children: errors.map((e, i) => e && /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: e.message }, i)) })
34941
+ /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { children: errors.map((e, i) => e && /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: typeof e === "string" ? e : e.message }, i)) })
34783
34942
  ] });
34784
34943
  }
34785
34944
  const replaceValues = partsOfUrl.partsOfUrl.reduce((acc, value, index) => {
@@ -35164,7 +35323,7 @@ const Labels = ({ data, children }) => {
35164
35323
  if (isMultiQueryErrors) {
35165
35324
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
35166
35325
  /* @__PURE__ */ jsxRuntimeExports.jsx("h4", { children: "Errors:" }),
35167
- /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { children: errors.map((e, i) => e && /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: e.message }, i)) })
35326
+ /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { children: errors.map((e, i) => e && /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: typeof e === "string" ? e : e.message }, i)) })
35168
35327
  ] });
35169
35328
  }
35170
35329
  const replaceValues = partsOfUrl.partsOfUrl.reduce((acc, value, index) => {
@@ -35439,7 +35598,7 @@ const LabelsToSearchParams = ({ data, children }) => {
35439
35598
  if (isMultiQueryErrors) {
35440
35599
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
35441
35600
  /* @__PURE__ */ jsxRuntimeExports.jsx("h4", { children: "Errors:" }),
35442
- /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { children: errors.map((e, i) => e && /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: e.message }, i)) })
35601
+ /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { children: errors.map((e, i) => e && /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: typeof e === "string" ? e : e.message }, i)) })
35443
35602
  ] });
35444
35603
  }
35445
35604
  const replaceValues = partsOfUrl.partsOfUrl.reduce((acc, value, index) => {
@@ -35708,7 +35867,7 @@ const Taints = ({ data, children }) => {
35708
35867
  if (isMultiQueryErrors) {
35709
35868
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
35710
35869
  /* @__PURE__ */ jsxRuntimeExports.jsx("h4", { children: "Errors:" }),
35711
- /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { children: errors.map((e, i) => e && /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: e.message }, i)) })
35870
+ /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { children: errors.map((e, i) => e && /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: typeof e === "string" ? e : e.message }, i)) })
35712
35871
  ] });
35713
35872
  }
35714
35873
  const replaceValues = partsOfUrl.partsOfUrl.reduce((acc, value, index) => {
@@ -36081,7 +36240,7 @@ const Tolerations = ({
36081
36240
  if (isMultiQueryErrors) {
36082
36241
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
36083
36242
  /* @__PURE__ */ jsxRuntimeExports.jsx("h4", { children: "Errors:" }),
36084
- /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { children: errors.map((e, i) => e && /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: e.message }, i)) })
36243
+ /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { children: errors.map((e, i) => e && /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: typeof e === "string" ? e : e.message }, i)) })
36085
36244
  ] });
36086
36245
  }
36087
36246
  const replaceValues = partsOfUrl.partsOfUrl.reduce((acc, value, index) => {
@@ -36362,7 +36521,7 @@ const Annotations = ({
36362
36521
  if (isMultiQueryErrors) {
36363
36522
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
36364
36523
  /* @__PURE__ */ jsxRuntimeExports.jsx("h4", { children: "Errors:" }),
36365
- /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { children: errors.map((e, i) => e && /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: e.message }, i)) })
36524
+ /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { children: errors.map((e, i) => e && /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: typeof e === "string" ? e : e.message }, i)) })
36366
36525
  ] });
36367
36526
  }
36368
36527
  const replaceValues = partsOfUrl.partsOfUrl.reduce((acc, value, index) => {
@@ -36580,7 +36739,7 @@ const ConverterBytes = ({ data }) => {
36580
36739
  if (isError) {
36581
36740
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
36582
36741
  /* @__PURE__ */ jsxRuntimeExports.jsx("h4", { children: "Errors:" }),
36583
- /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { children: errors.map((e, i) => e && /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: e.message }, i)) })
36742
+ /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { children: errors.map((e, i) => e && /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: typeof e === "string" ? e : e.message }, i)) })
36584
36743
  ] });
36585
36744
  }
36586
36745
  const replaceValues = partsOfUrl.partsOfUrl.reduce((acc, value, index) => {
@@ -37397,7 +37556,7 @@ const SecretBase64Plain = ({ data }) => {
37397
37556
  if (isError) {
37398
37557
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
37399
37558
  /* @__PURE__ */ jsxRuntimeExports.jsx("h4", { children: "Errors:" }),
37400
- /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { children: errors.map((e, i) => e && /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: e.message }, i)) })
37559
+ /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { children: errors.map((e, i) => e && /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: typeof e === "string" ? e : e.message }, i)) })
37401
37560
  ] });
37402
37561
  }
37403
37562
  const replaceValues = partsOfUrl.partsOfUrl.reduce((acc, value, index) => {
@@ -37529,7 +37688,7 @@ const ResourceBadge = ({ data }) => {
37529
37688
  if (isError) {
37530
37689
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
37531
37690
  /* @__PURE__ */ jsxRuntimeExports.jsx("h4", { children: "Errors:" }),
37532
- /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { children: errors.map((e, i) => e && /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: e.message }, i)) })
37691
+ /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { children: errors.map((e, i) => e && /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: typeof e === "string" ? e : e.message }, i)) })
37533
37692
  ] });
37534
37693
  }
37535
37694
  const replaceValues = partsOfUrl.partsOfUrl.reduce((acc, value2, index) => {
@@ -37710,13 +37869,30 @@ const prepareUrlsToFetchForDynamicRenderer = ({
37710
37869
  );
37711
37870
  };
37712
37871
 
37872
+ const STRING_KEYS = ["cluster", "group", "version", "plural", "namespace", "fieldSelector", "labelSelector"];
37713
37873
  const DynamicRendererWithProviders = (props) => {
37714
37874
  const location = useLocation();
37715
37875
  const { urlsToFetch, dataToApplyToContext, theme, nodeTerminalDefaultProfile, disableEventBubbling } = props;
37876
+ const directUrls = urlsToFetch.filter((el) => typeof el === "string");
37877
+ const k8sResourcesUrls = urlsToFetch.filter((el) => typeof el !== "string");
37716
37878
  const preparedUrlsToFetch = prepareUrlsToFetchForDynamicRenderer({
37717
- urls: urlsToFetch,
37879
+ urls: directUrls,
37718
37880
  locationPathname: location.pathname
37719
37881
  });
37882
+ const preparedK8sResoucesUrls = k8sResourcesUrls.map((res) => {
37883
+ let next = { ...res };
37884
+ for (const key of STRING_KEYS) {
37885
+ const val = next[key];
37886
+ if (typeof val === "string" && val.length > 0) {
37887
+ const prepared = prepareUrlsToFetchForDynamicRenderer({
37888
+ urls: [val],
37889
+ locationPathname: location.pathname
37890
+ });
37891
+ next = { ...next, [key]: prepared[0] ?? val };
37892
+ }
37893
+ }
37894
+ return next;
37895
+ });
37720
37896
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
37721
37897
  CursorDefaultDiv,
37722
37898
  {
@@ -37726,7 +37902,14 @@ const DynamicRendererWithProviders = (props) => {
37726
37902
  e.stopPropagation();
37727
37903
  }
37728
37904
  },
37729
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(ThemeProvider, { theme, children: /* @__PURE__ */ jsxRuntimeExports.jsx(FactoryConfigContextProvider, { value: { nodeTerminalDefaultProfile }, children: /* @__PURE__ */ jsxRuntimeExports.jsx(PartsOfUrlProvider, { value: { partsOfUrl: location.pathname.split("/") }, children: /* @__PURE__ */ jsxRuntimeExports.jsx(MultiQueryProvider, { urls: preparedUrlsToFetch, dataToApplyToContext, children: /* @__PURE__ */ jsxRuntimeExports.jsx(DynamicRenderer, { ...props }) }) }) }) })
37905
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(ThemeProvider, { theme, children: /* @__PURE__ */ jsxRuntimeExports.jsx(FactoryConfigContextProvider, { value: { nodeTerminalDefaultProfile }, children: /* @__PURE__ */ jsxRuntimeExports.jsx(PartsOfUrlProvider, { value: { partsOfUrl: location.pathname.split("/") }, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
37906
+ MultiQueryProvider,
37907
+ {
37908
+ items: [...preparedK8sResoucesUrls, ...preparedUrlsToFetch],
37909
+ dataToApplyToContext,
37910
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(DynamicRenderer, { ...props })
37911
+ }
37912
+ ) }) }) })
37730
37913
  }
37731
37914
  );
37732
37915
  };
@@ -50309,28 +50492,14 @@ const MarketplaceCard = ({
50309
50492
  apiVersion,
50310
50493
  baseprefix
50311
50494
  });
50312
- const { state, status, lastError } = useListWatch({
50313
- wsUrl: `/api/clusters/${clusterName}/openapi-bff-ws/listThenWatch/listWatchWs`,
50314
- paused: false,
50315
- ignoreRemove: false,
50316
- autoDrain: true,
50317
- preserveStateOnUrlChange: true,
50318
- query: {
50319
- namespace,
50320
- apiVersion: apiVersion || "",
50321
- apiGroup,
50322
- plural: type
50323
- },
50495
+ const { data: k8sList, error: k8sListError } = useK8sSmartResource({
50496
+ cluster: clusterName || "",
50497
+ namespace,
50498
+ group: apiGroup,
50499
+ version: apiVersion || "",
50500
+ plural: type,
50324
50501
  isEnabled: Boolean(apiVersion && addedMode && type !== "direct")
50325
50502
  });
50326
- const k8sListError = status === "closed" && lastError ? lastError : void 0;
50327
- const k8sList = {
50328
- items: state.order.map((key) => {
50329
- const res = state.byKey[key];
50330
- return res;
50331
- })
50332
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
50333
- };
50334
50503
  if (addedMode && (k8sListError || type === "direct") && !showZeroResources) {
50335
50504
  return null;
50336
50505
  }
@@ -50459,30 +50628,17 @@ const MarketPlace = ({
50459
50628
  const [filteredAndSortedData, setFilterAndSortedData] = useState([]);
50460
50629
  const [uniqueTags, setUniqueTags] = useState([]);
50461
50630
  const [selectedTags, setSelectedTags] = useState([]);
50462
- const { state, status, lastError } = useListWatch({
50463
- wsUrl: `/api/clusters/${clusterName}/openapi-bff-ws/listThenWatch/listWatchWs`,
50464
- paused: false,
50465
- ignoreRemove: false,
50466
- autoDrain: true,
50467
- preserveStateOnUrlChange: true,
50468
- query: {
50469
- apiVersion: baseApiVersion,
50470
- apiGroup: baseApiGroup,
50471
- plural: mpResourceName
50472
- },
50473
- isEnabled: clusterName !== void 0
50631
+ const {
50632
+ data: marketplacePanels,
50633
+ isLoading,
50634
+ error
50635
+ } = useK8sSmartResource({
50636
+ cluster: clusterName || "",
50637
+ group: baseApiGroup,
50638
+ version: baseApiVersion,
50639
+ plural: mpResourceName,
50640
+ isEnabled: Boolean(clusterName !== void 0)
50474
50641
  });
50475
- const isLoading = status === "connecting";
50476
- const error = status === "closed" && lastError ? lastError : void 0;
50477
- const marketplacePanels = useMemo(() => {
50478
- return {
50479
- items: state.order.map((key) => {
50480
- const res = state.byKey[key];
50481
- return res;
50482
- })
50483
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
50484
- };
50485
- }, [state]);
50486
50642
  const createPermission = usePermissions({
50487
50643
  group: baseApiGroup,
50488
50644
  resource: mpResourceName,
@@ -50781,52 +50937,30 @@ const ProjectInfoCard = ({
50781
50937
  children
50782
50938
  }) => {
50783
50939
  const navigate = useNavigate();
50784
- const { state, status } = useListWatch({
50785
- wsUrl: `/api/clusters/${clusterName}/openapi-bff-ws/listThenWatch/listWatchWs`,
50786
- paused: false,
50787
- ignoreRemove: false,
50788
- autoDrain: true,
50789
- preserveStateOnUrlChange: true,
50790
- query: {
50791
- apiVersion: baseApiVersion,
50792
- apiGroup: baseApiGroup,
50793
- plural: mpResourceName
50794
- },
50795
- isEnabled: clusterName !== void 0
50796
- });
50797
- const marketplaceIsLoading = status === "connecting";
50798
- const marketplacePanels = {
50799
- items: state.order.map((key) => {
50800
- const res = state.byKey[key];
50801
- return res;
50802
- })
50803
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
50804
- };
50805
50940
  const {
50806
- state: stateProject,
50807
- status: statusProject,
50808
- lastError: lastErrorProject
50809
- } = useListWatch({
50810
- wsUrl: `/api/clusters/${clusterName}/openapi-bff-ws/listThenWatch/listWatchWs`,
50811
- paused: false,
50812
- ignoreRemove: false,
50813
- autoDrain: true,
50814
- preserveStateOnUrlChange: true,
50815
- query: {
50816
- apiVersion: baseProjectVersion,
50817
- apiGroup: baseProjectApiGroup,
50818
- plural: projectResourceName,
50819
- fieldSelector: `metadata.name=${namespace}`
50820
- },
50821
- isEnabled: clusterName !== void 0
50941
+ data: marketplacePanels,
50942
+ isLoading: marketplaceIsLoading
50943
+ // error: marketplaceError,
50944
+ } = useK8sSmartResource({
50945
+ cluster: clusterName || "",
50946
+ group: baseApiGroup,
50947
+ version: baseApiVersion,
50948
+ plural: mpResourceName,
50949
+ isEnabled: Boolean(clusterName !== void 0)
50822
50950
  });
50823
- const isLoading = statusProject === "connecting";
50824
- const error = statusProject === "closed" && lastErrorProject ? lastErrorProject : void 0;
50825
- const projectArr = stateProject.order.map((key) => {
50826
- const res = stateProject.byKey[key];
50827
- return res;
50951
+ const {
50952
+ data: projectArr,
50953
+ isLoading,
50954
+ error
50955
+ } = useK8sSmartResource({
50956
+ cluster: clusterName || "",
50957
+ group: baseProjectApiGroup,
50958
+ version: baseProjectVersion,
50959
+ plural: projectResourceName,
50960
+ fieldSelector: `metadata.name=${namespace}`,
50961
+ isEnabled: Boolean(clusterName !== void 0)
50828
50962
  });
50829
- const project = projectArr.length > 0 ? projectArr[0] : void 0;
50963
+ const project = projectArr && projectArr.length > 0 ? projectArr[0] : void 0;
50830
50964
  const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false);
50831
50965
  const updatePermission = usePermissions({
50832
50966
  group: baseProjectApiGroup,
@@ -53468,5 +53602,18 @@ const useCrdData = ({
53468
53602
  });
53469
53603
  };
53470
53604
 
53471
- export { BackToDefaultIcon, BlackholeForm, BlackholeFormDataProvider, ContentCard$1 as ContentCard, CursorDefaultDiv, CursorPointerTag, CursorPointerTagMinContent, CustomSelect$4 as CustomSelect, DeleteIcon, DeleteModal, DeleteModalMany, DownIcon, DynamicComponents, DynamicRenderer, DynamicRendererWithProviders, EarthIcon, EditIcon, EnrichedTable, EnrichedTableProvider, Events, FlexGrow, LockedIcon, LookingGlassIcon, ManageableBreadcrumbs, ManageableBreadcrumbsWithDataProvider, ManageableSidebar, ManageableSidebarWithDataProvider, MarketPlace, MarketplaceCard, MinusIcon, NodeTerminal, PaddingContainer, PauseCircleIcon, PlusIcon, PodLogs, PodLogsMonaco, PodTerminal, ProjectInfoCard, ResumeCircleIcon, Search, Spacer$1 as Spacer, SuccessIcon, TreeWithSearch, UncontrolledSelect, UnlockedIcon, UpIcon, YamlEditorSingleton, checkIfApiInstanceNamespaceScoped, checkIfBuiltInInstanceNamespaceScoped, checkPermission, createContextFactory, createNewEntry, deepMerge, deleteEntry, feedbackIcons, filterIfApiInstanceNamespaceScoped, filterIfBuiltInInstanceNamespaceScoped, filterSelectOptions, floorToDecimal, getAllPathsFromObj, getApiResourceSingle, getApiResourceTypes, getApiResourceTypesByApiGroup, getApiResources, getBackLinkToTable, getBuiltinResourceSingle, getBuiltinResourceTypes, getBuiltinResources, getBuiltinTreeData, getClusterList, getCrdData, getCrdResourceSingle, getCrdResources, getDirectUnknownResource, getEnrichedColumns, getEnrichedColumnsWithControls, getGroupsByCategory, getKinds, getLinkToApiForm, getLinkToBuiltinForm, getLinkToForm, getObjectFormItemsDraft, getPrefixSubarrays, getSortedKinds, getSortedKindsAll, getStringByName, getSwagger, getUppercase, groupsToTreeData, hslFromString, isFlatObject, isMultilineFromYaml, isMultilineString, kindByGvr, namespacedByGvr, normalizeValuesForQuotasToNumber, parseQuotaValue, parseQuotaValueCpu, parseQuotaValueMemoryAndStorage, pluralByKind, prepareDataForManageableBreadcrumbs, prepareDataForManageableSidebar, prepareTemplate, prepareUrlsToFetchForDynamicRenderer, updateEntry, useApiResourceSingle, useApiResourceTypesByGroup, useApiResources, useApisResourceTypes, useBuiltinResourceSingle, useBuiltinResourceTypes, useBuiltinResources, useClusterList, useCrdData, useCrdResourceSingle, useCrdResources, useDirectUnknownResource, useInfiniteSentinel, useListWatch, usePermissions };
53605
+ const useInfiniteSentinel = (sentinelRef, hasMore, onNeedMore) => {
53606
+ useEffect(() => {
53607
+ const el = sentinelRef.current;
53608
+ if (!el) return void 0;
53609
+ const io = new IntersectionObserver((entries) => {
53610
+ const visible = entries.some((e) => e.isIntersecting);
53611
+ if (visible && hasMore) onNeedMore();
53612
+ });
53613
+ io.observe(el);
53614
+ return () => io.disconnect();
53615
+ }, [sentinelRef, hasMore, onNeedMore]);
53616
+ };
53617
+
53618
+ export { BackToDefaultIcon, BlackholeForm, BlackholeFormDataProvider, ContentCard$1 as ContentCard, CursorDefaultDiv, CursorPointerTag, CursorPointerTagMinContent, CustomSelect$4 as CustomSelect, DeleteIcon, DeleteModal, DeleteModalMany, DownIcon, DynamicComponents, DynamicRenderer, DynamicRendererWithProviders, EarthIcon, EditIcon, EnrichedTable, EnrichedTableProvider, Events, FlexGrow, LockedIcon, LookingGlassIcon, ManageableBreadcrumbs, ManageableBreadcrumbsWithDataProvider, ManageableSidebar, ManageableSidebarWithDataProvider, MarketPlace, MarketplaceCard, MinusIcon, NodeTerminal, PaddingContainer, PauseCircleIcon, PlusIcon, PodLogs, PodLogsMonaco, PodTerminal, ProjectInfoCard, ResumeCircleIcon, Search, Spacer$1 as Spacer, SuccessIcon, TreeWithSearch, UncontrolledSelect, UnlockedIcon, UpIcon, YamlEditorSingleton, checkIfApiInstanceNamespaceScoped, checkIfBuiltInInstanceNamespaceScoped, checkPermission, createContextFactory, createNewEntry, deepMerge, deleteEntry, feedbackIcons, filterIfApiInstanceNamespaceScoped, filterIfBuiltInInstanceNamespaceScoped, filterSelectOptions, floorToDecimal, getAllPathsFromObj, getApiResourceSingle, getApiResourceTypes, getApiResourceTypesByApiGroup, getApiResources, getBackLinkToTable, getBuiltinResourceSingle, getBuiltinResourceTypes, getBuiltinResources, getBuiltinTreeData, getClusterList, getCrdData, getCrdResourceSingle, getCrdResources, getDirectUnknownResource, getEnrichedColumns, getEnrichedColumnsWithControls, getGroupsByCategory, getKinds, getLinkToApiForm, getLinkToBuiltinForm, getLinkToForm, getObjectFormItemsDraft, getPrefixSubarrays, getSortedKinds, getSortedKindsAll, getStringByName, getSwagger, getUppercase, groupsToTreeData, hslFromString, isFlatObject, isMultilineFromYaml, isMultilineString, kindByGvr, namespacedByGvr, normalizeValuesForQuotasToNumber, parseQuotaValue, parseQuotaValueCpu, parseQuotaValueMemoryAndStorage, pluralByKind, prepareDataForManageableBreadcrumbs, prepareDataForManageableSidebar, prepareTemplate, prepareUrlsToFetchForDynamicRenderer, updateEntry, useApiResourceSingle, useApiResourceTypesByGroup, useApiResources, useApisResourceTypes, useBuiltinResourceSingle, useBuiltinResourceTypes, useBuiltinResources, useClusterList, useCrdData, useCrdResourceSingle, useCrdResources, useDirectUnknownResource, useInfiniteSentinel, useK8sSmartResource, useK8sVerbs, useListWatch, usePermissions };
53472
53619
  //# sourceMappingURL=openapi-k8s-toolkit.es.js.map