diff --git a/packages/business-features/keyboard-shortcuts/src/keyboard-shortcut-listener.tsx b/packages/business-features/keyboard-shortcuts/src/keyboard-shortcut-listener.tsx index 70151a4d72..904bf6f9d4 100644 --- a/packages/business-features/keyboard-shortcuts/src/keyboard-shortcut-listener.tsx +++ b/packages/business-features/keyboard-shortcuts/src/keyboard-shortcut-listener.tsx @@ -1,11 +1,11 @@ -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; import { withInjectables } from "@ogre-tools/injectable-react"; import React, { useEffect } from "react"; import invokeShortcutInjectable, { InvokeShortcut } from "./invoke-shortcut.injectable"; export interface KeyboardShortcutListenerProps { - children: SafeReactNode; + children: StrictReactNode; } interface Dependencies { diff --git a/packages/business-features/keyboard-shortcuts/src/keyboard-shortcut-scope.tsx b/packages/business-features/keyboard-shortcuts/src/keyboard-shortcut-scope.tsx index d54424aea0..6fad79bcd4 100644 --- a/packages/business-features/keyboard-shortcuts/src/keyboard-shortcut-scope.tsx +++ b/packages/business-features/keyboard-shortcuts/src/keyboard-shortcut-scope.tsx @@ -1,9 +1,9 @@ -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; import React from "react"; export interface KeyboardShortcutScopeProps { id: string; - children: SafeReactNode; + children: StrictReactNode; } export const KeyboardShortcutScope = ({ id, children }: KeyboardShortcutScopeProps) => ( diff --git a/packages/core/src/common/catalog/catalog-entity.ts b/packages/core/src/common/catalog/catalog-entity.ts index bd4805bc48..6b66743d86 100644 --- a/packages/core/src/common/catalog/catalog-entity.ts +++ b/packages/core/src/common/catalog/catalog-entity.ts @@ -7,7 +7,7 @@ import EventEmitter from "events"; import type TypedEmitter from "typed-emitter"; import { observable, makeObservable } from "mobx"; import { once } from "lodash"; -import type { Disposer, SafeReactNode } from "@k8slens/utilities"; +import type { Disposer, StrictReactNode } from "@k8slens/utilities"; import { iter } from "@k8slens/utilities"; import type { CategoryColumnRegistration, TitleCellProps } from "../../renderer/components/catalog/custom-category-columns"; @@ -201,7 +201,7 @@ export abstract class CatalogCategory extends (EventEmitter as new () => TypedEm * Defaults to no badge. * The badge is displayed next to the Category name in the Catalog Category menu */ - public getBadge(): SafeReactNode { + public getBadge(): StrictReactNode { return null; } diff --git a/packages/core/src/renderer/components/add-remove-buttons/add-remove-buttons.tsx b/packages/core/src/renderer/components/add-remove-buttons/add-remove-buttons.tsx index 48ad484641..aab7861c54 100644 --- a/packages/core/src/renderer/components/add-remove-buttons/add-remove-buttons.tsx +++ b/packages/core/src/renderer/components/add-remove-buttons/add-remove-buttons.tsx @@ -6,7 +6,7 @@ import "./add-remove-buttons.scss"; import React from "react"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; import { cssNames } from "@k8slens/utilities"; import { Button } from "@k8slens/button"; import { Icon } from "../icon"; @@ -14,8 +14,8 @@ import { Icon } from "../icon"; export interface AddRemoveButtonsProps extends React.HTMLAttributes { onAdd?: () => void; onRemove?: () => void; - addTooltip?: SafeReactNode; - removeTooltip?: SafeReactNode; + addTooltip?: StrictReactNode; + removeTooltip?: StrictReactNode; } export class AddRemoveButtons extends React.PureComponent { diff --git a/packages/core/src/renderer/components/animate/animate.tsx b/packages/core/src/renderer/components/animate/animate.tsx index 58f9052193..b7794d9917 100644 --- a/packages/core/src/renderer/components/animate/animate.tsx +++ b/packages/core/src/renderer/components/animate/animate.tsx @@ -5,7 +5,7 @@ import "./animate.scss"; import React, { useEffect, useState } from "react"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; import { cssNames, noop } from "@k8slens/utilities"; import { withInjectables } from "@ogre-tools/injectable-react"; import type { RequestAnimationFrame } from "./request-animation-frame.injectable"; @@ -22,7 +22,7 @@ export interface AnimateProps { onLeave?: () => void; enterDuration?: number; leaveDuration?: number; - children?: SafeReactNode; + children?: StrictReactNode; } interface Dependencies { diff --git a/packages/core/src/renderer/components/avatar/avatar.tsx b/packages/core/src/renderer/components/avatar/avatar.tsx index b35bb66727..8a815c75bd 100644 --- a/packages/core/src/renderer/components/avatar/avatar.tsx +++ b/packages/core/src/renderer/components/avatar/avatar.tsx @@ -8,7 +8,7 @@ import styles from "./avatar.module.scss"; import type { ImgHTMLAttributes, MouseEventHandler } from "react"; import React from "react"; import randomColor from "randomcolor"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; import { cssNames } from "@k8slens/utilities"; import { computeDefaultShortName } from "../../../common/catalog/helpers"; @@ -21,7 +21,7 @@ export interface AvatarProps { variant?: "circle" | "rounded" | "square"; imgProps?: ImgHTMLAttributes; disabled?: boolean; - children?: SafeReactNode; + children?: StrictReactNode; className?: string; id?: string; onClick?: MouseEventHandler; diff --git a/packages/core/src/renderer/components/badge/badge.tsx b/packages/core/src/renderer/components/badge/badge.tsx index 21f0366f49..19266e6af1 100644 --- a/packages/core/src/renderer/components/badge/badge.tsx +++ b/packages/core/src/renderer/components/badge/badge.tsx @@ -8,18 +8,18 @@ import styles from "./badge.module.scss"; import React, { useEffect, useRef, useState } from "react"; import { action, observable } from "mobx"; import { observer } from "mobx-react"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; import { cssNames } from "@k8slens/utilities"; import { withTooltip } from "@k8slens/tooltip"; export interface BadgeProps extends React.HTMLAttributes { small?: boolean; flat?: boolean; - label?: SafeReactNode; + label?: StrictReactNode; expandable?: boolean; disabled?: boolean; scrollable?: boolean; - children?: SafeReactNode; + children?: StrictReactNode; } // Common handler for all Badge instances diff --git a/packages/core/src/renderer/components/catalog/__tests__/custom-views.test.ts b/packages/core/src/renderer/components/catalog/__tests__/custom-views.test.ts index 1c9fdd090e..c115f5c4b7 100644 --- a/packages/core/src/renderer/components/catalog/__tests__/custom-views.test.ts +++ b/packages/core/src/renderer/components/catalog/__tests__/custom-views.test.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; import type { DiContainer } from "@ogre-tools/injectable"; import { computed } from "mobx"; import type { LensRendererExtension } from "../../../../extensions/lens-renderer-extension"; @@ -20,8 +20,8 @@ describe("Custom Category Views", () => { }); it("should order items correctly over all extensions", () => { - const component1 = (): SafeReactNode => null; - const component2 = (): SafeReactNode => null; + const component1 = (): StrictReactNode => null; + const component2 = (): StrictReactNode => null; di.override(rendererExtensionsInjectable, () => computed(() => [ { @@ -58,8 +58,8 @@ describe("Custom Category Views", () => { }); it("should put put priority < 50 items in before", () => { - const component1 = (): SafeReactNode => null; - const component2 = (): SafeReactNode => null; + const component1 = (): StrictReactNode => null; + const component2 = (): StrictReactNode => null; di.override(rendererExtensionsInjectable, () => computed(() => [ { diff --git a/packages/core/src/renderer/components/catalog/columns/get.injectable.ts b/packages/core/src/renderer/components/catalog/columns/get.injectable.ts index 5feb7bcb97..612a45c189 100644 --- a/packages/core/src/renderer/components/catalog/columns/get.injectable.ts +++ b/packages/core/src/renderer/components/catalog/columns/get.injectable.ts @@ -2,7 +2,7 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; import { getInjectable } from "@ogre-tools/injectable"; import { orderBy } from "lodash"; import type { CatalogCategory, CatalogEntity } from "../../../../common/catalog"; @@ -36,7 +36,7 @@ const getCategoryColumnsInjectable = getInjectable({ const sortingCallbacks: CategoryColumns["sortingCallbacks"] = {}; const searchFilters: CategoryColumns["searchFilters"] = []; const renderTableHeader: CategoryColumns["renderTableHeader"] = []; - const tableRowRenderers: ((entity: CatalogEntity) => SafeReactNode)[] = []; + const tableRowRenderers: ((entity: CatalogEntity) => StrictReactNode)[] = []; for (const registration of allRegistrations) { if (registration.sortCallback) { diff --git a/packages/core/src/renderer/components/catalog/custom-category-columns.ts b/packages/core/src/renderer/components/catalog/custom-category-columns.ts index c10489f523..05939d2126 100644 --- a/packages/core/src/renderer/components/catalog/custom-category-columns.ts +++ b/packages/core/src/renderer/components/catalog/custom-category-columns.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; import type { CatalogEntity } from "../../../common/catalog"; import type { TableCellProps } from "../table"; @@ -32,7 +32,7 @@ export interface CategoryColumnRegistration { /** * This function will be called to generate the cells (on demand) for the column */ - renderCell: (entity: CatalogEntity) => SafeReactNode; + renderCell: (entity: CatalogEntity) => StrictReactNode; /** * This function will be used to generate the columns title cell. @@ -79,7 +79,7 @@ export interface AdditionalCategoryColumnRegistration extends CategoryColumnRegi export interface RegisteredAdditionalCategoryColumn { id: string; priority: number; - renderCell: (entity: CatalogEntity) => SafeReactNode; + renderCell: (entity: CatalogEntity) => StrictReactNode; titleProps: TableCellProps; sortCallback?: (entity: CatalogEntity) => string | number | (string | number)[]; searchFilter?: (entity: CatalogEntity) => string | string[]; diff --git a/packages/core/src/renderer/components/catalog/hotbar-toggle-menu-item.tsx b/packages/core/src/renderer/components/catalog/hotbar-toggle-menu-item.tsx index 1080c50b2a..06cca64264 100644 --- a/packages/core/src/renderer/components/catalog/hotbar-toggle-menu-item.tsx +++ b/packages/core/src/renderer/components/catalog/hotbar-toggle-menu-item.tsx @@ -11,7 +11,7 @@ import { withInjectables } from "@ogre-tools/injectable-react"; import type { IComputedValue } from "mobx"; import type { Hotbar } from "../../../features/hotbar/storage/common/hotbar"; import activeHotbarInjectable from "../../../features/hotbar/storage/common/active.injectable"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; interface Dependencies { activeHotbar: IComputedValue; @@ -19,8 +19,8 @@ interface Dependencies { interface HotbarToggleMenuItemProps { entity: CatalogEntity; - addContent: SafeReactNode; - removeContent: SafeReactNode; + addContent: StrictReactNode; + removeContent: StrictReactNode; } function NonInjectedHotbarToggleMenuItem({ diff --git a/packages/core/src/renderer/components/checkbox/checkbox.tsx b/packages/core/src/renderer/components/checkbox/checkbox.tsx index 978f6faf20..d8f79c7bf1 100644 --- a/packages/core/src/renderer/components/checkbox/checkbox.tsx +++ b/packages/core/src/renderer/components/checkbox/checkbox.tsx @@ -5,17 +5,17 @@ import "./checkbox.scss"; import React from "react"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; import { cssNames, noop } from "@k8slens/utilities"; export interface CheckboxProps { className?: string; - label?: SafeReactNode; + label?: StrictReactNode; inline?: boolean; disabled?: boolean; value?: boolean; onChange?(value: boolean, evt: React.ChangeEvent): void; - children?: SafeReactNode; + children?: StrictReactNode; } export function Checkbox({ label, inline, className, value, children, onChange = noop, disabled, ...inputProps }: CheckboxProps) { diff --git a/packages/core/src/renderer/components/cluster-manager/cluster-view.tsx b/packages/core/src/renderer/components/cluster-manager/cluster-view.tsx index 43728037d9..47fde7f80c 100644 --- a/packages/core/src/renderer/components/cluster-manager/cluster-view.tsx +++ b/packages/core/src/renderer/components/cluster-manager/cluster-view.tsx @@ -22,7 +22,7 @@ import type { RequestClusterActivation } from "../../../features/cluster/activat import requestClusterActivationInjectable from "../../../features/cluster/activation/renderer/request-activation.injectable"; import type { GetClusterById } from "../../../features/cluster/storage/common/get-by-id.injectable"; import getClusterByIdInjectable from "../../../features/cluster/storage/common/get-by-id.injectable"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; interface Dependencies { clusterId: IComputedValue; @@ -94,7 +94,7 @@ class NonInjectedClusterView extends React.Component { ]); } - renderStatus(): SafeReactNode { + renderStatus(): StrictReactNode { const { cluster, isReady } = this; if (cluster && !isReady) { diff --git a/packages/core/src/renderer/components/config-horizontal-pod-autoscalers/details.test.tsx b/packages/core/src/renderer/components/config-horizontal-pod-autoscalers/details.test.tsx index b82aba0bc9..5b1865c692 100644 --- a/packages/core/src/renderer/components/config-horizontal-pod-autoscalers/details.test.tsx +++ b/packages/core/src/renderer/components/config-horizontal-pod-autoscalers/details.test.tsx @@ -14,10 +14,10 @@ import storesAndApisCanBeCreatedInjectable from "../../stores-apis-can-be-create import type { DiRender } from "../test-utils/renderFor"; import { renderFor } from "../test-utils/renderFor"; import { HorizontalPodAutoscalerDetails } from "./details"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; jest.mock("react-router-dom", () => ({ - Link: ({ children }: { children: SafeReactNode }) => children, + Link: ({ children }: { children: StrictReactNode }) => children, })); const hpaV2 = { diff --git a/packages/core/src/renderer/components/confirm-dialog/confirm-dialog.tsx b/packages/core/src/renderer/components/confirm-dialog/confirm-dialog.tsx index 140a427af4..702028acc5 100644 --- a/packages/core/src/renderer/components/confirm-dialog/confirm-dialog.tsx +++ b/packages/core/src/renderer/components/confirm-dialog/confirm-dialog.tsx @@ -9,7 +9,7 @@ import React from "react"; import type { IObservableValue } from "mobx"; import { observable, makeObservable, computed } from "mobx"; import { observer } from "mobx-react"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; import { cssNames, noop, prevDefault } from "@k8slens/utilities"; import type { ButtonProps } from "@k8slens/button"; import { Button } from "@k8slens/button"; @@ -30,10 +30,10 @@ export interface ConfirmDialogParams extends ConfirmDialogBooleanParams { } export interface ConfirmDialogBooleanParams { - labelOk?: SafeReactNode; - labelCancel?: SafeReactNode; - message: SafeReactNode; - icon?: SafeReactNode; + labelOk?: StrictReactNode; + labelCancel?: StrictReactNode; + message: StrictReactNode; + icon?: StrictReactNode; okButtonProps?: Partial; cancelButtonProps?: Partial; } diff --git a/packages/core/src/renderer/components/custom-resources/crd-resource-details.tsx b/packages/core/src/renderer/components/custom-resources/crd-resource-details.tsx index b2b44721b1..b8809c872b 100644 --- a/packages/core/src/renderer/components/custom-resources/crd-resource-details.tsx +++ b/packages/core/src/renderer/components/custom-resources/crd-resource-details.tsx @@ -7,7 +7,7 @@ import "./crd-resource-details.scss"; import React from "react"; import { observer } from "mobx-react"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; import { cssNames, safeJSONPathValue } from "@k8slens/utilities"; import { Badge } from "../badge"; import { DrawerItem } from "../drawer"; @@ -23,7 +23,7 @@ export interface CustomResourceDetailsProps extends KubeObjectDetailsProps diff --git a/packages/core/src/renderer/components/dialog/dialog.tsx b/packages/core/src/renderer/components/dialog/dialog.tsx index 91076bc414..25a8700e23 100644 --- a/packages/core/src/renderer/components/dialog/dialog.tsx +++ b/packages/core/src/renderer/components/dialog/dialog.tsx @@ -10,7 +10,7 @@ import { createPortal } from "react-dom"; import { disposeOnUnmount, observer } from "mobx-react"; import { reaction } from "mobx"; import { Animate } from "../animate"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; import { cssNames, noop, stopPropagation } from "@k8slens/utilities"; import type { ObservableHistory } from "mobx-observable-history"; import { withInjectables } from "@ogre-tools/injectable-react"; @@ -30,7 +30,7 @@ export interface DialogProps { pinned?: boolean; animated?: boolean; "data-testid"?: string; - children?: SafeReactNode; + children?: StrictReactNode; } interface DialogState { diff --git a/packages/core/src/renderer/components/dock/dock-tab.tsx b/packages/core/src/renderer/components/dock/dock-tab.tsx index c75364302e..715602da43 100644 --- a/packages/core/src/renderer/components/dock/dock-tab.tsx +++ b/packages/core/src/renderer/components/dock/dock-tab.tsx @@ -7,7 +7,7 @@ import styles from "./dock-tab.module.scss"; import React from "react"; import { observer } from "mobx-react"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; import { cssNames, prevDefault, isMiddleClick } from "@k8slens/utilities"; import type { DockStore, DockTab as DockTabModel } from "./dock/store"; import type { TabProps } from "../tabs"; @@ -22,7 +22,7 @@ import isMacInjectable from "../../../common/vars/is-mac.injectable"; import autoBindReact from "auto-bind/react"; export interface DockTabProps extends TabProps { - moreActions?: SafeReactNode; + moreActions?: StrictReactNode; } interface Dependencies { diff --git a/packages/core/src/renderer/components/dock/info-panel.tsx b/packages/core/src/renderer/components/dock/info-panel.tsx index c79803303f..78f473e83f 100644 --- a/packages/core/src/renderer/components/dock/info-panel.tsx +++ b/packages/core/src/renderer/components/dock/info-panel.tsx @@ -8,7 +8,7 @@ import "./info-panel.scss"; import React, { Component } from "react"; import { computed, observable, reaction, makeObservable } from "mobx"; import { disposeOnUnmount, observer } from "mobx-react"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; import { cssNames } from "@k8slens/utilities"; import { Button } from "@k8slens/button"; import { Icon } from "../icon"; @@ -29,9 +29,9 @@ export interface InfoPanelProps extends OptionalProps { export interface OptionalProps { className?: string; error?: string; - controls?: SafeReactNode; - submitLabel?: SafeReactNode; - submittingMessage?: SafeReactNode; + controls?: StrictReactNode; + submitLabel?: StrictReactNode; + submittingMessage?: StrictReactNode; disableSubmit?: boolean; showButtons?: boolean; showSubmitClose?: boolean; diff --git a/packages/core/src/renderer/components/drawer/drawer-item.tsx b/packages/core/src/renderer/components/drawer/drawer-item.tsx index 981f717c5f..2cb6bd1856 100644 --- a/packages/core/src/renderer/components/drawer/drawer-item.tsx +++ b/packages/core/src/renderer/components/drawer/drawer-item.tsx @@ -5,11 +5,11 @@ import "./drawer-item.scss"; import React from "react"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; import { cssNames } from "@k8slens/utilities"; export interface DrawerItemProps extends React.HTMLAttributes { - name: SafeReactNode; + name: StrictReactNode; title?: string; labelsOnly?: boolean; hidden?: boolean; diff --git a/packages/core/src/renderer/components/drawer/drawer-param-toggler.tsx b/packages/core/src/renderer/components/drawer/drawer-param-toggler.tsx index b7446607f2..0c7948a1ea 100644 --- a/packages/core/src/renderer/components/drawer/drawer-param-toggler.tsx +++ b/packages/core/src/renderer/components/drawer/drawer-param-toggler.tsx @@ -6,12 +6,12 @@ import "./drawer-param-toggler.scss"; import React from "react"; import { Icon } from "../icon"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; import { cssNames } from "@k8slens/utilities"; export interface DrawerParamTogglerProps { label: string | number; - children: SafeReactNode; + children: StrictReactNode; } interface State { diff --git a/packages/core/src/renderer/components/drawer/drawer-title.tsx b/packages/core/src/renderer/components/drawer/drawer-title.tsx index 57e50cb5e5..02e5553109 100644 --- a/packages/core/src/renderer/components/drawer/drawer-title.tsx +++ b/packages/core/src/renderer/components/drawer/drawer-title.tsx @@ -5,17 +5,17 @@ import styles from "./drawer-title.module.css"; import React from "react"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; import { cssNames } from "@k8slens/utilities"; export interface DrawerTitleProps { className?: string; - children?: SafeReactNode; + children?: StrictReactNode; /** * @deprecated Prefer passing the value as `children` */ - title?: SafeReactNode; + title?: StrictReactNode; /** * Specifies how large this title is diff --git a/packages/core/src/renderer/components/drawer/drawer.tsx b/packages/core/src/renderer/components/drawer/drawer.tsx index d048135ed6..54843e1533 100644 --- a/packages/core/src/renderer/components/drawer/drawer.tsx +++ b/packages/core/src/renderer/components/drawer/drawer.tsx @@ -8,7 +8,7 @@ import "./drawer.scss"; import React from "react"; import { clipboard } from "electron"; import { createPortal } from "react-dom"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; import { cssNames, noop } from "@k8slens/utilities"; import { Icon } from "../icon"; import type { AnimateName } from "../animate"; @@ -24,7 +24,7 @@ export type DrawerPosition = "top" | "left" | "right" | "bottom"; export interface DrawerProps { open: boolean; - title: SafeReactNode; + title: StrictReactNode; /** * The width or heigh (depending on `position`) of the Drawer. @@ -38,8 +38,8 @@ export interface DrawerProps { position?: DrawerPosition; animation?: AnimateName; onClose?: () => void; - toolbar?: SafeReactNode; - children?: SafeReactNode; + toolbar?: StrictReactNode; + children?: StrictReactNode; "data-testid"?: string; testIdForClose?: string; } diff --git a/packages/core/src/renderer/components/dropdown/dropdown.tsx b/packages/core/src/renderer/components/dropdown/dropdown.tsx index 71d9bea058..5e83944cad 100644 --- a/packages/core/src/renderer/components/dropdown/dropdown.tsx +++ b/packages/core/src/renderer/components/dropdown/dropdown.tsx @@ -3,15 +3,15 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; import { toSafeReactChildrenArray } from "@k8slens/utilities"; import type { HTMLAttributes } from "react"; import React, { useState } from "react"; import { Menu } from "../menu"; interface DropdownProps extends HTMLAttributes { - contentForToggle: SafeReactNode; - children?: SafeReactNode; + contentForToggle: StrictReactNode; + children?: StrictReactNode; } export function Dropdown(props: DropdownProps) { diff --git a/packages/core/src/renderer/components/editable-list/editable-list.tsx b/packages/core/src/renderer/components/editable-list/editable-list.tsx index 59164e607d..47ff524de6 100644 --- a/packages/core/src/renderer/components/editable-list/editable-list.tsx +++ b/packages/core/src/renderer/components/editable-list/editable-list.tsx @@ -11,7 +11,7 @@ import React from "react"; import { Icon } from "../icon"; import type { InputProps, InputValidator } from "../input"; import { Input } from "../input"; -import type { SafeReactNode, SingleOrMany } from "@k8slens/utilities"; +import type { StrictReactNode, SingleOrMany } from "@k8slens/utilities"; import autoBindReact from "auto-bind/react"; export interface EditableListProps { @@ -23,7 +23,7 @@ export interface EditableListProps { // An optional prop used to convert T to a displayable string // defaults to `String` - renderItem?: (item: T, index: number) => SafeReactNode; + renderItem?: (item: T, index: number) => StrictReactNode; inputTheme?: InputProps["theme"]; } diff --git a/packages/core/src/renderer/components/file-picker/file-picker.tsx b/packages/core/src/renderer/components/file-picker/file-picker.tsx index 64c3acabf2..6cbadb9a72 100644 --- a/packages/core/src/renderer/components/file-picker/file-picker.tsx +++ b/packages/core/src/renderer/components/file-picker/file-picker.tsx @@ -13,7 +13,7 @@ import { Spinner } from "../spinner"; import { observable, makeObservable } from "mobx"; import { observer } from "mobx-react"; import _ from "lodash"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; export interface FileUploadProps { uploadDir: string; @@ -49,7 +49,7 @@ export enum OverTotalSizeLimitStyle { export interface BaseProps { accept?: string; - label: SafeReactNode; + label: StrictReactNode; multiple?: boolean; // limit is the optional maximum number of files to upload @@ -221,7 +221,7 @@ class DefaultedFilePicker extends React.Component; diff --git a/packages/core/src/renderer/components/hotbar/hotbar-cell.tsx b/packages/core/src/renderer/components/hotbar/hotbar-cell.tsx index c729cca8b1..9a4dfb95c0 100644 --- a/packages/core/src/renderer/components/hotbar/hotbar-cell.tsx +++ b/packages/core/src/renderer/components/hotbar/hotbar-cell.tsx @@ -5,11 +5,11 @@ import "./hotbar-menu.scss"; import React, { useState } from "react"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; import { cssNames } from "@k8slens/utilities"; export interface HotbarCellProps extends React.HTMLAttributes { - children?: SafeReactNode; + children?: StrictReactNode; index: number; innerRef?: React.Ref; } diff --git a/packages/core/src/renderer/components/hotbar/hotbar-menu.tsx b/packages/core/src/renderer/components/hotbar/hotbar-menu.tsx index 166b7da18f..a91e29b82b 100644 --- a/packages/core/src/renderer/components/hotbar/hotbar-menu.tsx +++ b/packages/core/src/renderer/components/hotbar/hotbar-menu.tsx @@ -8,7 +8,7 @@ import "./hotbar-menu.scss"; import React, { useState } from "react"; import { observer } from "mobx-react"; import { HotbarEntityIcon } from "./hotbar-entity-icon"; -import type { IClassName, SafeReactNode } from "@k8slens/utilities"; +import type { IClassName, StrictReactNode } from "@k8slens/utilities"; import { cssNames } from "@k8slens/utilities"; import type { CatalogEntityRegistry } from "../../api/catalog/entity/registry"; import type { CatalogEntity } from "../../api/catalog-entity"; @@ -147,7 +147,7 @@ const NonInjectedHotbarMenu = observer((props: Dependencies & HotbarMenuProps) = )} )} - {provided.placeholder as SafeReactNode} + {provided.placeholder as StrictReactNode} )} diff --git a/packages/core/src/renderer/components/icon/icon.tsx b/packages/core/src/renderer/components/icon/icon.tsx index 7a76280e40..2f06be8c5f 100644 --- a/packages/core/src/renderer/components/icon/icon.tsx +++ b/packages/core/src/renderer/components/icon/icon.tsx @@ -36,7 +36,7 @@ import Workloads from "./workloads.svg"; import type { Logger } from "@k8slens/logger"; import { withInjectables } from "@ogre-tools/injectable-react"; import { loggerInjectionToken } from "@k8slens/logger"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; const hrefValidation = /https?:\/\//; @@ -159,7 +159,7 @@ export interface BaseIconProps { } export interface IconProps extends React.HTMLAttributes, BaseIconProps { - children?: SafeReactNode; + children?: StrictReactNode; } export function isSvg(content: string): boolean { @@ -206,7 +206,7 @@ const RawIcon = (props: IconProps & Dependencies) => { onKeyDown?.(event); }; - let iconContent: SafeReactNode; + let iconContent: StrictReactNode; const iconProps: Partial = { className: cssNames("Icon", className, { svg, material, interactive: isInteractive, disabled, sticker, active, focusable }, diff --git a/packages/core/src/renderer/components/input/input.tsx b/packages/core/src/renderer/components/input/input.tsx index 85e28d1396..cc63ca9f9a 100644 --- a/packages/core/src/renderer/components/input/input.tsx +++ b/packages/core/src/renderer/components/input/input.tsx @@ -7,7 +7,7 @@ import "./input.scss"; import type { DOMAttributes, InputHTMLAttributes, TextareaHTMLAttributes } from "react"; import React from "react"; -import type { SafeReactNode, SingleOrMany } from "@k8slens/utilities"; +import type { StrictReactNode, SingleOrMany } from "@k8slens/utilities"; import { debouncePromise, isPromiseSettledFulfilled, cssNames } from "@k8slens/utilities"; import { Icon } from "../icon"; import type { TooltipProps } from "@k8slens/tooltip"; @@ -58,7 +58,7 @@ export interface IconDataFnArg { * - A react node * - Or a function that produces a react node */ -export type IconData = string | SafeReactNode | ((opt: IconDataFnArg) => SafeReactNode); +export type IconData = string | StrictReactNode | ((opt: IconDataFnArg) => StrictReactNode); export type InputProps = Omit & { theme?: "round-black" | "round"; @@ -74,7 +74,7 @@ export type InputProps = Omit & { showErrorsAsTooltip?: boolean | Omit; // show validation errors as a tooltip :hover (instead of block below) iconLeft?: IconData; iconRight?: IconData; - contentRight?: string | SafeReactNode; // Any component of string goes after iconRight + contentRight?: string | StrictReactNode; // Any component of string goes after iconRight validators?: SingleOrMany; blurOnEnter?: boolean; onChange?(value: string, evt: React.ChangeEvent): void; @@ -86,7 +86,7 @@ interface State { dirty: boolean; valid: boolean; validating: boolean; - errors: SafeReactNode[]; + errors: StrictReactNode[]; submitted: boolean; } @@ -171,8 +171,8 @@ export class Input extends React.Component { async validate() { const value = this.getValue(); let validationId = (this.validationId = ""); // reset every time for async validators - const asyncValidators: Promise[] = []; - const errors: SafeReactNode[] = []; + const asyncValidators: Promise[] = []; + const errors: StrictReactNode[] = []; // run validators for (const validator of this.validators) { @@ -222,7 +222,7 @@ export class Input extends React.Component { this.input?.setCustomValidity(errors[0]?.toString() ?? ""); } - setValidation(errors: SafeReactNode[]) { + setValidation(errors: StrictReactNode[]) { this.setState({ validating: false, valid: !errors.length, @@ -434,7 +434,7 @@ export class Input extends React.Component { const componentId = id || showErrorsAsTooltip ? `input_tooltip_id_${uuid.v4()}` : undefined; - let tooltipError: SafeReactNode; + let tooltipError: StrictReactNode; if (showErrorsAsTooltip && showErrors) { const tooltipProps = typeof showErrorsAsTooltip === "object" ? showErrorsAsTooltip : {}; diff --git a/packages/core/src/renderer/components/input/input_validators.ts b/packages/core/src/renderer/components/input/input_validators.ts index 31b6d8bff7..356d9d7451 100644 --- a/packages/core/src/renderer/components/input/input_validators.ts +++ b/packages/core/src/renderer/components/input/input_validators.ts @@ -7,7 +7,7 @@ import type { InputProps } from "./input"; import fse from "fs-extra"; import { TypedRegEx } from "typed-regex"; import type { SetRequired } from "type-fest"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; export type InputValidationResult = IsAsync extends true @@ -16,7 +16,7 @@ export type InputValidationResult = export type InputValidation = (value: string, props?: InputProps) => InputValidationResult; -export type SyncValidationMessage = SafeReactNode | ((value: string, props?: InputProps) => SafeReactNode); +export type SyncValidationMessage = StrictReactNode | ((value: string, props?: InputProps) => StrictReactNode); /** * @deprecated This type is not as type safe as it is possible to specify an async input validator without specifying a `debounce` time. diff --git a/packages/core/src/renderer/components/item-object-list/content.tsx b/packages/core/src/renderer/components/item-object-list/content.tsx index 888585878d..32fcca5b71 100644 --- a/packages/core/src/renderer/components/item-object-list/content.tsx +++ b/packages/core/src/renderer/components/item-object-list/content.tsx @@ -12,7 +12,7 @@ import { Observer, observer } from "mobx-react"; import type { ConfirmDialogParams } from "../confirm-dialog"; import type { TableCellProps, TableProps, TableRowProps, TableSortCallbacks } from "../table"; import { Table, TableCell, TableHead, TableRow } from "../table"; -import type { IClassName, SafeReactNode } from "@k8slens/utilities"; +import type { IClassName, StrictReactNode } from "@k8slens/utilities"; import { cssNames, isDefined, isReactNode, noop, prevDefault, stopPropagation } from "@k8slens/utilities"; import type { AddRemoveButtonsProps } from "../add-remove-buttons"; import { AddRemoveButtons } from "../add-remove-buttons"; @@ -49,8 +49,8 @@ export interface ItemListLayoutContentProps; tableProps?: Partial>; // low-level table configuration renderTableHeader?: (TableCellProps | undefined | null)[]; - renderTableContents: (item: Item) => (SafeReactNode | TableCellProps)[]; - renderItemMenu?: (item: Item, store: ItemListStore) => SafeReactNode; + renderTableContents: (item: Item) => (StrictReactNode | TableCellProps)[]; + renderItemMenu?: (item: Item, store: ItemListStore) => StrictReactNode; customizeTableRowProps?: (item: Item) => Partial>; addRemoveButtons?: Partial; virtual?: boolean; @@ -70,7 +70,7 @@ export interface ItemListLayoutContentProps SafeReactNode); + | StrictReactNode + | (() => StrictReactNode); customizeHeader?: HeaderCustomizer | HeaderCustomizer[]; } diff --git a/packages/core/src/renderer/components/item-object-list/list-layout.tsx b/packages/core/src/renderer/components/item-object-list/list-layout.tsx index f612cbac06..470cbf6eb8 100644 --- a/packages/core/src/renderer/components/item-object-list/list-layout.tsx +++ b/packages/core/src/renderer/components/item-object-list/list-layout.tsx @@ -10,7 +10,7 @@ import type { IComputedValue } from "mobx"; import { computed, makeObservable, untracked } from "mobx"; import type { ConfirmDialogParams } from "../confirm-dialog"; import type { TableCellProps, TableProps, TableRowProps, TableSortCallbacks } from "../table"; -import type { IClassName, SafeReactNode, SingleOrMany } from "@k8slens/utilities"; +import type { IClassName, StrictReactNode, SingleOrMany } from "@k8slens/utilities"; import { cssNames, noop } from "@k8slens/utilities"; import type { AddRemoveButtonsProps } from "../add-remove-buttons"; import type { ItemObject } from "@k8slens/list-layout"; @@ -38,10 +38,10 @@ export type ItemsFilter = (items: I[]) => I[]; export type ItemsFilters = Record>; export interface HeaderPlaceholders { - title?: SafeReactNode; + title?: StrictReactNode; searchProps?: SearchInputUrlProps; - filters?: SafeReactNode; - info?: SafeReactNode; + filters?: StrictReactNode; + info?: StrictReactNode; } function normalizeText(value: Primitive) { @@ -78,7 +78,7 @@ export type ItemListStore = export type RenderHeaderTitle< Item extends ItemObject, PreLoadStores extends boolean, -> = SafeReactNode | ((parent: NonInjectedItemListLayout) => SafeReactNode); +> = StrictReactNode | ((parent: NonInjectedItemListLayout) => StrictReactNode); export type HeaderCustomizer = (placeholders: HeaderPlaceholders) => HeaderPlaceholders; export type ItemListLayoutProps = { @@ -107,8 +107,8 @@ export type ItemListLayoutProps; tableProps?: Partial>; // low-level table configuration renderTableHeader?: (TableCellProps | undefined | null)[]; - renderTableContents: (item: Item) => (SafeReactNode | TableCellProps)[]; - renderItemMenu?: (item: Item, store: ItemListStore) => SafeReactNode; + renderTableContents: (item: Item) => (StrictReactNode | TableCellProps)[]; + renderItemMenu?: (item: Item, store: ItemListStore) => StrictReactNode; customizeTableRowProps?: (item: Item) => Partial>; addRemoveButtons?: Partial; virtual?: boolean; @@ -120,7 +120,7 @@ export type ItemListLayoutProps Partial; - renderFooter?: (parent: NonInjectedItemListLayout) => SafeReactNode; + renderFooter?: (parent: NonInjectedItemListLayout) => StrictReactNode; spinnerTestId?: string; @@ -129,7 +129,7 @@ export type ItemListLayoutProps; "data-testid"?: string; diff --git a/packages/core/src/renderer/components/kubeconfig-dialog/kubeconfig-dialog.tsx b/packages/core/src/renderer/components/kubeconfig-dialog/kubeconfig-dialog.tsx index adc086c78e..e6d6030cce 100644 --- a/packages/core/src/renderer/components/kubeconfig-dialog/kubeconfig-dialog.tsx +++ b/packages/core/src/renderer/components/kubeconfig-dialog/kubeconfig-dialog.tsx @@ -7,7 +7,7 @@ import styles from "./kubeconfig-dialog.module.scss"; import React from "react"; import type { IObservableValue } from "mobx"; import { observer } from "mobx-react"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; import { cssNames } from "@k8slens/utilities"; import { Button } from "@k8slens/button"; import type { DialogProps } from "../dialog"; @@ -23,7 +23,7 @@ import kubeconfigDialogStateInjectable from "./state.injectable"; import { saveFileDialog } from "../../utils/saveFile"; export interface KubeconfigDialogData { - title?: SafeReactNode; + title?: StrictReactNode; config: string; } diff --git a/packages/core/src/renderer/components/kubeconfig-dialog/open.injectable.ts b/packages/core/src/renderer/components/kubeconfig-dialog/open.injectable.ts index 050d124f1d..f8b49428b4 100644 --- a/packages/core/src/renderer/components/kubeconfig-dialog/open.injectable.ts +++ b/packages/core/src/renderer/components/kubeconfig-dialog/open.injectable.ts @@ -6,10 +6,10 @@ import { getInjectable } from "@ogre-tools/injectable"; import { loggerInjectionToken } from "@k8slens/logger"; import showCheckedErrorNotificationInjectable from "../notifications/show-checked-error.injectable"; import kubeconfigDialogStateInjectable from "./state.injectable"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; export interface OpenKubeconfigDialogArgs { - title?: SafeReactNode; + title?: StrictReactNode; loader: () => Promise; } diff --git a/packages/core/src/renderer/components/layout/cluster-page-menu.ts b/packages/core/src/renderer/components/layout/cluster-page-menu.ts index bcd23c717b..5504962782 100644 --- a/packages/core/src/renderer/components/layout/cluster-page-menu.ts +++ b/packages/core/src/renderer/components/layout/cluster-page-menu.ts @@ -7,13 +7,13 @@ import type { IconProps } from "../icon"; import type React from "react"; import type { PageTarget } from "../../routes/page-registration"; import type { IComputedValue } from "mobx"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; export interface ClusterPageMenuRegistration { id?: string; parentId?: string; target?: PageTarget; - title: SafeReactNode; + title: StrictReactNode; components: ClusterPageMenuComponents; visible?: IComputedValue; orderNumber?: number; diff --git a/packages/core/src/renderer/components/layout/main-layout.tsx b/packages/core/src/renderer/components/layout/main-layout.tsx index 0b38ba988e..d9812d1f39 100755 --- a/packages/core/src/renderer/components/layout/main-layout.tsx +++ b/packages/core/src/renderer/components/layout/main-layout.tsx @@ -7,7 +7,7 @@ import styles from "./main-layout.module.scss"; import React from "react"; import { observer } from "mobx-react"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; import { cssNames } from "@k8slens/utilities"; import { ErrorBoundary } from "@k8slens/error-boundary"; import { ResizeDirection, ResizeGrowthDirection, ResizeSide, ResizingAnchor } from "@k8slens/resizing-anchor"; @@ -17,10 +17,10 @@ import sidebarStorageInjectable, { defaultSidebarWidth } from "./sidebar-storage import type { StorageLayer } from "../../utils/storage-helper"; export interface MainLayoutProps { - sidebar: SafeReactNode; + sidebar: StrictReactNode; className?: string; - footer?: SafeReactNode; - children?: SafeReactNode; + footer?: StrictReactNode; + children?: StrictReactNode; } /** diff --git a/packages/core/src/renderer/components/layout/setting-layout.tsx b/packages/core/src/renderer/components/layout/setting-layout.tsx index 3ce871c90e..dd116920f6 100644 --- a/packages/core/src/renderer/components/layout/setting-layout.tsx +++ b/packages/core/src/renderer/components/layout/setting-layout.tsx @@ -7,7 +7,7 @@ import "./setting-layout.scss"; import React from "react"; import { observer } from "mobx-react"; -import type { IClassName, SafeReactNode } from "@k8slens/utilities"; +import type { IClassName, StrictReactNode } from "@k8slens/utilities"; import { cssNames } from "@k8slens/utilities"; import { CloseButton } from "./close-button"; import { getLegacyGlobalDiForExtensionApi } from "@k8slens/legacy-global-di"; @@ -19,7 +19,7 @@ export interface SettingLayoutProps extends React.DOMAttributes { contentClass?: IClassName; provideBackButtonNavigation?: boolean; contentGaps?: boolean; - navigation?: SafeReactNode; + navigation?: StrictReactNode; back?: (evt: React.MouseEvent | KeyboardEvent) => void; closeButtonProps?: { "data-testid"?: string }; } diff --git a/packages/core/src/renderer/components/layout/siblings-in-tab-layout.tsx b/packages/core/src/renderer/components/layout/siblings-in-tab-layout.tsx index 891ebd4737..ff32e82794 100644 --- a/packages/core/src/renderer/components/layout/siblings-in-tab-layout.tsx +++ b/packages/core/src/renderer/components/layout/siblings-in-tab-layout.tsx @@ -9,10 +9,10 @@ import React from "react"; import siblingTabsInjectable from "../../routes/sibling-tabs.injectable"; import { TabLayout } from "./tab-layout-2"; import type { HierarchicalSidebarItem } from "./sidebar-items.injectable"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; interface SiblingTabLayoutProps { - children: SafeReactNode; + children: StrictReactNode; scrollable?: boolean; } diff --git a/packages/core/src/renderer/components/layout/sidebar-items.injectable.ts b/packages/core/src/renderer/components/layout/sidebar-items.injectable.ts index d31bf5f7c3..fdcf985459 100644 --- a/packages/core/src/renderer/components/layout/sidebar-items.injectable.ts +++ b/packages/core/src/renderer/components/layout/sidebar-items.injectable.ts @@ -8,14 +8,14 @@ import { computed } from "mobx"; import { computedInjectManyInjectable } from "@ogre-tools/injectable-extension-for-mobx"; import { byOrderNumber } from "../../../common/utils/composable-responsibilities/orderable/orderable"; import type { SetRequired } from "type-fest"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; export interface SidebarItemRegistration { id: string; parentId: string | null; - title: SafeReactNode; + title: StrictReactNode; onClick: () => void; - getIcon?: () => SafeReactNode; + getIcon?: () => StrictReactNode; isActive?: IComputedValue; isVisible?: IComputedValue; orderNumber: number; diff --git a/packages/core/src/renderer/components/layout/sub-header.tsx b/packages/core/src/renderer/components/layout/sub-header.tsx index 8ef6c5c5c7..82a8e43bca 100644 --- a/packages/core/src/renderer/components/layout/sub-header.tsx +++ b/packages/core/src/renderer/components/layout/sub-header.tsx @@ -5,14 +5,14 @@ import "./sub-header.scss"; import React from "react"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; import { cssNames } from "@k8slens/utilities"; export interface SubHeaderProps { className?: string; withLine?: boolean; // add bottom line compact?: boolean; // no extra padding around content - children: SafeReactNode; + children: StrictReactNode; } export class SubHeader extends React.Component { diff --git a/packages/core/src/renderer/components/layout/sub-title.tsx b/packages/core/src/renderer/components/layout/sub-title.tsx index 20f48e1c36..7d66ec33c1 100644 --- a/packages/core/src/renderer/components/layout/sub-title.tsx +++ b/packages/core/src/renderer/components/layout/sub-title.tsx @@ -5,15 +5,15 @@ import "./sub-title.scss"; import React from "react"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; import { cssNames } from "@k8slens/utilities"; export interface SubTitleProps { className?: string; - title: SafeReactNode; + title: StrictReactNode; compact?: boolean; // no bottom padding id?: string; - children?: SafeReactNode; + children?: StrictReactNode; } export class SubTitle extends React.Component { diff --git a/packages/core/src/renderer/components/layout/tab-layout-2.tsx b/packages/core/src/renderer/components/layout/tab-layout-2.tsx index 2247dccf4d..eab234ed07 100644 --- a/packages/core/src/renderer/components/layout/tab-layout-2.tsx +++ b/packages/core/src/renderer/components/layout/tab-layout-2.tsx @@ -7,7 +7,7 @@ import "./tab-layout.scss"; import React from "react"; import { observer } from "mobx-react"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; import { cssNames } from "@k8slens/utilities"; import { Tab, Tabs } from "../tabs"; import { ErrorBoundary } from "@k8slens/error-boundary"; @@ -15,7 +15,7 @@ import type { HierarchicalSidebarItem } from "./sidebar-items.injectable"; export interface TabLayoutProps { tabs?: HierarchicalSidebarItem[]; - children?: SafeReactNode; + children?: StrictReactNode; scrollable?: boolean; } diff --git a/packages/core/src/renderer/components/layout/tab-layout.tsx b/packages/core/src/renderer/components/layout/tab-layout.tsx index c3b04fe944..e4bc1f0294 100644 --- a/packages/core/src/renderer/components/layout/tab-layout.tsx +++ b/packages/core/src/renderer/components/layout/tab-layout.tsx @@ -8,7 +8,7 @@ import "./tab-layout.scss"; import React from "react"; import { matchPath, Redirect, Route, Switch } from "react-router"; import { observer } from "mobx-react"; -import type { IClassName, SafeReactNode } from "@k8slens/utilities"; +import type { IClassName, StrictReactNode } from "@k8slens/utilities"; import { cssNames } from "@k8slens/utilities"; import { Tab, Tabs } from "../tabs"; import { ErrorBoundary } from "@k8slens/error-boundary"; @@ -22,13 +22,13 @@ export interface TabLayoutProps { className?: IClassName; contentClass?: IClassName; tabs?: TabLayoutRoute[]; - children?: SafeReactNode; + children?: StrictReactNode; scrollable?: boolean; } export interface TabLayoutRoute { routePath: string; - title: SafeReactNode; + title: StrictReactNode; component: React.ComponentType; url?: string; // page-url, if not provided `routePath` is used (doesn't work when path has some :placeholder(s)) exact?: boolean; // route-path matching rule diff --git a/packages/core/src/renderer/components/layout/wizard-layout.tsx b/packages/core/src/renderer/components/layout/wizard-layout.tsx index b76c1f57be..2034918b6f 100644 --- a/packages/core/src/renderer/components/layout/wizard-layout.tsx +++ b/packages/core/src/renderer/components/layout/wizard-layout.tsx @@ -6,16 +6,16 @@ import "./wizard-layout.scss"; import React from "react"; import { observer } from "mobx-react"; -import type { IClassName, SafeReactNode } from "@k8slens/utilities"; +import type { IClassName, StrictReactNode } from "@k8slens/utilities"; import { cssNames } from "@k8slens/utilities"; export interface WizardLayoutProps extends React.DOMAttributes { className?: IClassName; - header?: SafeReactNode; + header?: StrictReactNode; headerClass?: IClassName; contentClass?: IClassName; infoPanelClass?: IClassName; - infoPanel?: SafeReactNode; + infoPanel?: StrictReactNode; centered?: boolean; // Centering content horizontally } diff --git a/packages/core/src/renderer/components/line-progress/line-progress.tsx b/packages/core/src/renderer/components/line-progress/line-progress.tsx index a8ee546a92..e0cc2377c3 100644 --- a/packages/core/src/renderer/components/line-progress/line-progress.tsx +++ b/packages/core/src/renderer/components/line-progress/line-progress.tsx @@ -5,7 +5,7 @@ import "./line-progress.scss"; import React from "react"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; import { cssNames } from "@k8slens/utilities"; import { withTooltip } from "@k8slens/tooltip"; @@ -15,7 +15,7 @@ export interface LineProgressProps extends React.HTMLProps { max?: number; className?: any; precise?: number; - children?: SafeReactNode; + children?: StrictReactNode; } function valuePercent({ value, min, max, precise }: Required>) { diff --git a/packages/core/src/renderer/components/list/list.tsx b/packages/core/src/renderer/components/list/list.tsx index 572888ca68..87e338cb49 100644 --- a/packages/core/src/renderer/components/list/list.tsx +++ b/packages/core/src/renderer/components/list/list.tsx @@ -9,14 +9,14 @@ import { SearchInput } from "../input"; import type { UseTableOptions } from "react-table"; import { ReactTable } from "../table/react-table"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; export type SearchFilter = (item: T) => string | number; export interface ListProps extends UseTableOptions { items: T[]; filters: SearchFilter[]; - title?: SafeReactNode; + title?: StrictReactNode; } export function List({ columns, data, title, items, filters }: ListProps) { diff --git a/packages/core/src/renderer/components/menu/menu-actions.tsx b/packages/core/src/renderer/components/menu/menu-actions.tsx index 1fbbde86ea..2aed12be71 100644 --- a/packages/core/src/renderer/components/menu/menu-actions.tsx +++ b/packages/core/src/renderer/components/menu/menu-actions.tsx @@ -8,7 +8,7 @@ import "./menu-actions.scss"; import React, { isValidElement } from "react"; import { observable, makeObservable, reaction } from "mobx"; import { disposeOnUnmount, observer } from "mobx-react"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; import { cssNames } from "@k8slens/utilities"; import type { IconProps } from "../icon"; import { Icon } from "../icon"; @@ -26,11 +26,11 @@ export interface MenuActionsProps extends Partial { className?: string; toolbar?: boolean; // display menu as toolbar with icons autoCloseOnSelect?: boolean; - triggerIcon?: string | (IconProps & TooltipDecoratorProps) | SafeReactNode; + triggerIcon?: string | (IconProps & TooltipDecoratorProps) | StrictReactNode; /** * @deprecated Provide your own remove `` as part of the `children` passed to this component */ - removeConfirmationMessage?: SafeReactNode | (() => SafeReactNode); + removeConfirmationMessage?: StrictReactNode | (() => StrictReactNode); /** * @deprecated Provide your own update `` as part of the `children` passed to this component */ diff --git a/packages/core/src/renderer/components/menu/menu.tsx b/packages/core/src/renderer/components/menu/menu.tsx index 1fcca78925..b01d054386 100644 --- a/packages/core/src/renderer/components/menu/menu.tsx +++ b/packages/core/src/renderer/components/menu/menu.tsx @@ -8,7 +8,7 @@ import "./menu.scss"; import type { ReactElement } from "react"; import React, { Fragment } from "react"; import { createPortal } from "react-dom"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; import { cssNames, noop } from "@k8slens/utilities"; import { Animate } from "../animate"; import type { IconProps } from "../icon"; @@ -49,7 +49,7 @@ export interface MenuProps { closeOnClickOutside?: boolean; // use false value for sub-menus closeOnScroll?: boolean; // applicable when usePortal={true} position?: MenuPosition; // applicable when usePortal={false} - children?: SafeReactNode; + children?: StrictReactNode; animated?: boolean; toggleEvent?: "click" | "contextmenu"; "data-testid"?: string; diff --git a/packages/core/src/renderer/components/namespaces/namespace-tree-view.test.tsx b/packages/core/src/renderer/components/namespaces/namespace-tree-view.test.tsx index 1d081ec276..0a2d7059f8 100644 --- a/packages/core/src/renderer/components/namespaces/namespace-tree-view.test.tsx +++ b/packages/core/src/renderer/components/namespaces/namespace-tree-view.test.tsx @@ -12,10 +12,10 @@ import { renderFor } from "../test-utils/renderFor"; import hierarchicalNamespacesInjectable from "./hierarchical-namespaces.injectable"; import { NamespaceTreeView } from "./namespace-tree-view"; import type { NamespaceTree } from "./store"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; jest.mock("react-router-dom", () => ({ - Link: ({ children }: { children: SafeReactNode }) => children, + Link: ({ children }: { children: StrictReactNode }) => children, })); function createNamespace(name: string, labels?: Record, annotations?: Record): Namespace { diff --git a/packages/core/src/renderer/components/no-items/no-items.tsx b/packages/core/src/renderer/components/no-items/no-items.tsx index c4bf7eccb5..4e47c7a5e9 100644 --- a/packages/core/src/renderer/components/no-items/no-items.tsx +++ b/packages/core/src/renderer/components/no-items/no-items.tsx @@ -6,12 +6,12 @@ import "./no-items.scss"; import React from "react"; -import type { IClassName, SafeReactNode } from "@k8slens/utilities"; +import type { IClassName, StrictReactNode } from "@k8slens/utilities"; import { cssNames } from "@k8slens/utilities"; export interface NoItemsProps { className?: IClassName; - children?: SafeReactNode; + children?: StrictReactNode; } export function NoItems(props: NoItemsProps) { diff --git a/packages/core/src/renderer/components/pod-security-policies/pod-security-policy-details.tsx b/packages/core/src/renderer/components/pod-security-policies/pod-security-policy-details.tsx index a8b55ae0c3..9d7e40fa88 100644 --- a/packages/core/src/renderer/components/pod-security-policies/pod-security-policy-details.tsx +++ b/packages/core/src/renderer/components/pod-security-policies/pod-security-policy-details.tsx @@ -15,7 +15,7 @@ import { Table, TableCell, TableHead, TableRow } from "../table"; import type { Logger } from "@k8slens/logger"; import { withInjectables } from "@ogre-tools/injectable-react"; import { loggerInjectionToken } from "@k8slens/logger"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; export interface PodSecurityPolicyDetailsProps extends KubeObjectDetailsProps { } @@ -34,7 +34,7 @@ interface Dependencies { @observer class NonInjectedPodSecurityPolicyDetails extends React.Component { - renderRuleGroup(title: SafeReactNode, group: RuleGroup | undefined) { + renderRuleGroup(title: StrictReactNode, group: RuleGroup | undefined) { if (!group) return null; const { rule, ranges } = group; diff --git a/packages/core/src/renderer/components/radio/radio.tsx b/packages/core/src/renderer/components/radio/radio.tsx index 33ad29b659..e5d7910509 100644 --- a/packages/core/src/renderer/components/radio/radio.tsx +++ b/packages/core/src/renderer/components/radio/radio.tsx @@ -5,7 +5,7 @@ import "./radio.scss"; import React, { useContext, useRef } from "react"; -import type { SafeReactNode, SingleOrMany } from "@k8slens/utilities"; +import type { StrictReactNode, SingleOrMany } from "@k8slens/utilities"; import { cssNames, noop } from "@k8slens/utilities"; export interface RadioGroupProps { @@ -50,7 +50,7 @@ export function RadioGroup({ export interface RadioProps { className?: string; - label: SafeReactNode; + label: StrictReactNode; value: T; disabled?: boolean; } diff --git a/packages/core/src/renderer/components/render-delay/render-delay.tsx b/packages/core/src/renderer/components/render-delay/render-delay.tsx index 206b5a3576..d2272c26bf 100644 --- a/packages/core/src/renderer/components/render-delay/render-delay.tsx +++ b/packages/core/src/renderer/components/render-delay/render-delay.tsx @@ -4,7 +4,7 @@ */ import React, { useEffect, useState } from "react"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; import type { RequestIdleCallback } from "./request-idle-callback.injectable"; import type { CancelIdleCallback } from "./cancel-idle-callback.injectable"; import { withInjectables } from "@ogre-tools/injectable-react"; @@ -13,8 +13,8 @@ import requestIdleCallbackInjectable from "./request-idle-callback.injectable"; import idleCallbackTimeoutInjectable from "./idle-callback-timeout.injectable"; export interface RenderDelayProps { - placeholder?: SafeReactNode; - children: SafeReactNode; + placeholder?: StrictReactNode; + children: StrictReactNode; } interface Dependencies { diff --git a/packages/core/src/renderer/components/select/select.tsx b/packages/core/src/renderer/components/select/select.tsx index 0ed1e6be7a..252c2891ad 100644 --- a/packages/core/src/renderer/components/select/select.tsx +++ b/packages/core/src/renderer/components/select/select.tsx @@ -14,7 +14,7 @@ import { observer } from "mobx-react"; import ReactSelect, { components, createFilter } from "react-select"; import type { Props as ReactSelectProps, GroupBase, MultiValue, OptionsOrGroups, PropsValue, SingleValue } from "react-select"; import type { LensTheme } from "../../themes/lens-theme"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; import { cssNames } from "@k8slens/utilities"; import { withInjectables } from "@ogre-tools/injectable-react"; import activeThemeInjectable from "../../themes/active.injectable"; @@ -24,7 +24,7 @@ const { Menu } = components; export interface SelectOption { value: Value; - label: SafeReactNode; + label: StrictReactNode; isDisabled?: boolean; isSelected?: boolean; id?: string; diff --git a/packages/core/src/renderer/components/status-bar/status-bar-registration.ts b/packages/core/src/renderer/components/status-bar/status-bar-registration.ts index 8083df2f3f..842b91c827 100644 --- a/packages/core/src/renderer/components/status-bar/status-bar-registration.ts +++ b/packages/core/src/renderer/components/status-bar/status-bar-registration.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; import type { IComputedValue } from "mobx"; /** @@ -35,10 +35,10 @@ export interface StatusBarRegistration { /** * @deprecated use {@link StatusBarRegistration.components} instead */ - item?: SafeReactNode | (() => SafeReactNode); + item?: StrictReactNode | (() => StrictReactNode); /** - * The newer API, allows for registering a component instead of a SafeReactNode + * The newer API, allows for registering a component instead of a StrictReactNode */ components?: StatusBarComponents; diff --git a/packages/core/src/renderer/components/status-brick/status-brick.tsx b/packages/core/src/renderer/components/status-brick/status-brick.tsx index 776782264f..b493462222 100644 --- a/packages/core/src/renderer/components/status-brick/status-brick.tsx +++ b/packages/core/src/renderer/components/status-brick/status-brick.tsx @@ -6,12 +6,12 @@ import "./status-brick.scss"; import React from "react"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; import { cssNames } from "@k8slens/utilities"; import { withTooltip } from "@k8slens/tooltip"; export interface StatusBrickProps extends React.HTMLAttributes { - children?: SafeReactNode; + children?: StrictReactNode; } export const StatusBrick = withTooltip(({ className, ...elemProps }: StatusBrickProps) => ( diff --git a/packages/core/src/renderer/components/switch/form-switcher.tsx b/packages/core/src/renderer/components/switch/form-switcher.tsx index 24325380fd..c690712b3d 100644 --- a/packages/core/src/renderer/components/switch/form-switcher.tsx +++ b/packages/core/src/renderer/components/switch/form-switcher.tsx @@ -3,18 +3,18 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; import React from "react"; interface FormControlLabelProps { control: React.ReactElement; - label: SafeReactNode; + label: StrictReactNode; } /** * @deprecated Use instead from "../switch.tsx". */ -export function FormSwitch(props: FormControlLabelProps & { children?: SafeReactNode }) { +export function FormSwitch(props: FormControlLabelProps & { children?: StrictReactNode }) { const ClonedElement = React.cloneElement(props.control, { children: {props.label}, }); diff --git a/packages/core/src/renderer/components/switch/switcher.tsx b/packages/core/src/renderer/components/switch/switcher.tsx index cf0c8ff786..3f7d08dea1 100644 --- a/packages/core/src/renderer/components/switch/switcher.tsx +++ b/packages/core/src/renderer/components/switch/switcher.tsx @@ -3,13 +3,13 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; import React from "react"; import { Switch } from "./switch"; export interface SwitcherProps { disabled?: boolean; - children?: SafeReactNode; + children?: StrictReactNode; checked?: boolean; onChange?: (event: React.ChangeEvent, checked: boolean) => void; name?: string; diff --git a/packages/core/src/renderer/components/table/table-cell.tsx b/packages/core/src/renderer/components/table/table-cell.tsx index 0e2a8345d2..cfd969c064 100644 --- a/packages/core/src/renderer/components/table/table-cell.tsx +++ b/packages/core/src/renderer/components/table/table-cell.tsx @@ -7,7 +7,7 @@ import "./table-cell.scss"; import type { TableSortBy, TableSortParams } from "./table"; import React from "react"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; import { cssNames } from "@k8slens/utilities"; import { Icon } from "../icon"; import { Checkbox } from "../checkbox"; @@ -29,7 +29,7 @@ export interface TableCellProps extends React.DOMAttributes { /** * The actual value of the cell */ - title?: SafeReactNode; + title?: StrictReactNode; /** * content inside could be scrolled diff --git a/packages/core/src/renderer/components/table/table.tsx b/packages/core/src/renderer/components/table/table.tsx index 8038542907..4771868bc4 100644 --- a/packages/core/src/renderer/components/table/table.tsx +++ b/packages/core/src/renderer/components/table/table.tsx @@ -7,7 +7,7 @@ import "./table.scss"; import React from "react"; import { observer } from "mobx-react"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; import { cssNames, isDefined } from "@k8slens/utilities"; import type { TableRowElem, TableRowProps } from "./table-row"; import { TableRow } from "./table-row"; @@ -87,7 +87,7 @@ export interface TableProps extends React.DOMAttributes { /** * This is shown when {@link TableProps.items} is empty */ - noItems?: SafeReactNode; + noItems?: StrictReactNode; /** * Allows to scroll list to selected item */ diff --git a/packages/core/src/renderer/components/tabs/tabs.tsx b/packages/core/src/renderer/components/tabs/tabs.tsx index f11401bb69..3e3a1711c9 100644 --- a/packages/core/src/renderer/components/tabs/tabs.tsx +++ b/packages/core/src/renderer/components/tabs/tabs.tsx @@ -6,7 +6,7 @@ import "./tabs.scss"; import type { DOMAttributes } from "react"; import React from "react"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; import { cssNames } from "@k8slens/utilities"; import { Icon } from "../icon"; import autoBindReact from "auto-bind/react"; @@ -56,8 +56,8 @@ export interface TabProps extends DOMAttributes { className?: string; active?: boolean; disabled?: boolean; - icon?: SafeReactNode | string; // material-io name or custom icon - label?: SafeReactNode; + icon?: StrictReactNode | string; // material-io name or custom icon + label?: StrictReactNode; value: D; } diff --git a/packages/core/src/renderer/components/tree-view/tree-view.tsx b/packages/core/src/renderer/components/tree-view/tree-view.tsx index a17ec8d826..ec4b79b431 100644 --- a/packages/core/src/renderer/components/tree-view/tree-view.tsx +++ b/packages/core/src/renderer/components/tree-view/tree-view.tsx @@ -6,7 +6,7 @@ import styles from "./tree-view.module.scss"; import type { MouseEventHandler } from "react"; import React, { useState } from "react"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; import { cssNames } from "@k8slens/utilities"; import { Icon } from "../icon"; @@ -16,7 +16,7 @@ export interface TreeViewClasses { export interface TreeViewProps { classes?: TreeViewClasses; - children: SafeReactNode; + children: StrictReactNode; } export function TreeView(props: TreeViewProps) { diff --git a/packages/core/src/renderer/components/user-management/service-accounts/secret.tsx b/packages/core/src/renderer/components/user-management/service-accounts/secret.tsx index b88ca0d93a..0a4aed7903 100644 --- a/packages/core/src/renderer/components/user-management/service-accounts/secret.tsx +++ b/packages/core/src/renderer/components/user-management/service-accounts/secret.tsx @@ -9,7 +9,7 @@ import moment from "moment"; import React from "react"; import type { Secret } from "@k8slens/kube-object"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; import { prevDefault } from "@k8slens/utilities"; import { Icon } from "../../icon"; @@ -23,7 +23,7 @@ interface State { interface RenderRowArgs { name: string; - value: SafeReactNode; + value: StrictReactNode; } export class ServiceAccountsSecret extends React.Component { diff --git a/packages/core/src/renderer/components/wizard/wizard.tsx b/packages/core/src/renderer/components/wizard/wizard.tsx index 2f74dd5c23..3bcd8d271d 100755 --- a/packages/core/src/renderer/components/wizard/wizard.tsx +++ b/packages/core/src/renderer/components/wizard/wizard.tsx @@ -5,7 +5,7 @@ import "./wizard.scss"; import React from "react"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; import { cssNames, prevDefault } from "@k8slens/utilities"; import { Button } from "@k8slens/button"; import { Stepper } from "../stepper"; @@ -25,7 +25,7 @@ export interface WizardProps extends WizardCommonProps { className?: string; step?: number; title?: string; - header?: SafeReactNode; + header?: StrictReactNode; onChange?: (step: number) => void; children?: React.ReactElement>[] | React.ReactElement>; } @@ -108,28 +108,28 @@ export interface WizardStepProps extends WizardCommonProps { title?: string; className?: string | object; contentClass?: string | object; - customButtons?: SafeReactNode; // render custom buttons block in footer - moreButtons?: SafeReactNode; // add more buttons to section in the footer + customButtons?: StrictReactNode; // render custom buttons block in footer + moreButtons?: StrictReactNode; // add more buttons to section in the footer loading?: boolean; // indicator of loading content for the step waiting?: boolean; // indicator of waiting response before going to next step disabledNext?: boolean; // disable next button flag, e.g when filling step is not finished hideNextBtn?: boolean; hideBackBtn?: boolean; step?: number; - prevLabel?: SafeReactNode; // custom label for prev button - nextLabel?: SafeReactNode; // custom label for next button + prevLabel?: StrictReactNode; // custom label for prev button + nextLabel?: StrictReactNode; // custom label for next button next?: () => void | boolean | Promise; // custom action for next button prev?: () => void; // custom action for prev button first?: () => void; last?: () => void; isFirst?: () => boolean; isLast?: () => boolean; - beforeContent?: SafeReactNode; - afterContent?: SafeReactNode; + beforeContent?: StrictReactNode; + afterContent?: StrictReactNode; noValidate?: boolean; // no validate form attribute skip?: boolean; // don't render the step scrollable?: boolean; - children?: SafeReactNode | SafeReactNode[]; + children?: StrictReactNode | StrictReactNode[]; testIdForNext?: string; testIdForPrev?: string; } diff --git a/packages/list-layout/src/kube-list-layout-column.ts b/packages/list-layout/src/kube-list-layout-column.ts index cac41ccf3e..0cdb2d4fa6 100644 --- a/packages/list-layout/src/kube-list-layout-column.ts +++ b/packages/list-layout/src/kube-list-layout-column.ts @@ -4,7 +4,7 @@ */ import type { KubeObject } from "@k8slens/kube-object"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; import type { TableSortCallback, SearchFilter, TableCellProps } from "./list-layout-column"; export interface BaseKubeObjectListLayoutColumn { @@ -13,7 +13,7 @@ export interface BaseKubeObjectListLayoutColumn { sortingCallBack?: TableSortCallback; searchFilter?: SearchFilter; header: TableCellProps | undefined | null; - content: (item: K) => SafeReactNode | TableCellProps; + content: (item: K) => StrictReactNode | TableCellProps; } export interface GeneralKubeObjectListLayoutColumn extends BaseKubeObjectListLayoutColumn { diff --git a/packages/list-layout/src/list-layout-column.ts b/packages/list-layout/src/list-layout-column.ts index b5d581bf0c..3855d79d8e 100644 --- a/packages/list-layout/src/list-layout-column.ts +++ b/packages/list-layout/src/list-layout-column.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { SafeReactNode, SingleOrMany } from "@k8slens/utilities"; +import type { StrictReactNode, SingleOrMany } from "@k8slens/utilities"; export interface ItemObject { getId: () => string; @@ -36,7 +36,7 @@ export interface TableCellProps extends React.DOMAttributes { /** * The actual value of the cell */ - title?: SafeReactNode; + title?: StrictReactNode; /** * content inside could be scrolled diff --git a/packages/technical-features/react-application/src/react-application/react-application-higher-order-component-injection-token.ts b/packages/technical-features/react-application/src/react-application/react-application-higher-order-component-injection-token.ts index 8627c11580..99c9033977 100644 --- a/packages/technical-features/react-application/src/react-application/react-application-higher-order-component-injection-token.ts +++ b/packages/technical-features/react-application/src/react-application/react-application-higher-order-component-injection-token.ts @@ -1,9 +1,9 @@ -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; import { getInjectionToken } from "@ogre-tools/injectable"; import type React from "react"; export type ReactApplicationHigherOrderComponent = React.ComponentType<{ - children: SafeReactNode; + children: StrictReactNode; }>; export const reactApplicationHigherOrderComponentInjectionToken = diff --git a/packages/ui-components/button/src/button.tsx b/packages/ui-components/button/src/button.tsx index 91ff6c80b6..d6bfaebde0 100644 --- a/packages/ui-components/button/src/button.tsx +++ b/packages/ui-components/button/src/button.tsx @@ -6,11 +6,11 @@ import "./button.scss"; import type { ButtonHTMLAttributes } from "react"; import React from "react"; -import { cssNames, SafeReactNode } from "@k8slens/utilities"; +import { cssNames, StrictReactNode } from "@k8slens/utilities"; import { withTooltip } from "@k8slens/tooltip"; export interface ButtonProps extends ButtonHTMLAttributes { - label?: SafeReactNode; + label?: StrictReactNode; waiting?: boolean; primary?: boolean; accent?: boolean; @@ -23,7 +23,7 @@ export interface ButtonProps extends ButtonHTMLAttributes { round?: boolean; href?: string; // render as hyperlink target?: "_blank"; // in case of using @href - children?: SafeReactNode; + children?: StrictReactNode; } export const Button = withTooltip((props: ButtonProps) => { diff --git a/packages/ui-components/error-boundary/src/error-boundary.tsx b/packages/ui-components/error-boundary/src/error-boundary.tsx index 693751a311..8098202d29 100644 --- a/packages/ui-components/error-boundary/src/error-boundary.tsx +++ b/packages/ui-components/error-boundary/src/error-boundary.tsx @@ -9,7 +9,7 @@ import type { ErrorInfo } from "react"; import React from "react"; import { observer } from "mobx-react"; import { Button } from "@k8slens/button"; -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; import type { ObservableHistory } from "mobx-observable-history"; import { withInjectables } from "@ogre-tools/injectable-react"; import { observableHistoryInjectionToken } from "@k8slens/routing"; @@ -18,7 +18,7 @@ const issuesTrackerUrl = "https://github.com/lensapp/lens/issues"; const forumsUrl = "https://forums.k8slens.dev"; export interface ErrorBoundaryProps { - children?: SafeReactNode; + children?: StrictReactNode; } interface State { diff --git a/packages/ui-components/tooltip/src/tooltip.tsx b/packages/ui-components/tooltip/src/tooltip.tsx index 686a391130..8e50d13402 100644 --- a/packages/ui-components/tooltip/src/tooltip.tsx +++ b/packages/ui-components/tooltip/src/tooltip.tsx @@ -8,7 +8,7 @@ import "./tooltip.scss"; import React from "react"; import { createPortal } from "react-dom"; import { observer } from "mobx-react"; -import type { IClassName, SafeReactNode } from "@k8slens/utilities"; +import type { IClassName, StrictReactNode } from "@k8slens/utilities"; import { cssNames } from "@k8slens/utilities"; import { observable, makeObservable, action, runInAction } from "mobx"; import autoBindReact from "auto-bind/react"; @@ -35,7 +35,7 @@ export interface TooltipProps { className?: IClassName; formatters?: TooltipContentFormatters; style?: React.CSSProperties; - children?: SafeReactNode; + children?: StrictReactNode; "data-testid"?: string; } diff --git a/packages/ui-components/tooltip/src/withTooltip.test.tsx b/packages/ui-components/tooltip/src/withTooltip.test.tsx index 624bed5a55..4dd55a571b 100644 --- a/packages/ui-components/tooltip/src/withTooltip.test.tsx +++ b/packages/ui-components/tooltip/src/withTooltip.test.tsx @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { SafeReactNode } from "@k8slens/utilities"; +import type { StrictReactNode } from "@k8slens/utilities"; import { render, RenderResult } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; import React from "react"; @@ -12,7 +12,7 @@ import { withTooltip } from "./withTooltip"; type MyComponentProps = { text: string; id?: string; - children?: SafeReactNode; + children?: StrictReactNode; "data-testid"?: string; }; diff --git a/packages/ui-components/tooltip/src/withTooltip.tsx b/packages/ui-components/tooltip/src/withTooltip.tsx index 693e34f971..225cb99bb9 100644 --- a/packages/ui-components/tooltip/src/withTooltip.tsx +++ b/packages/ui-components/tooltip/src/withTooltip.tsx @@ -6,19 +6,18 @@ import React, { useState } from "react"; import type { TooltipProps } from "./tooltip"; import { Tooltip } from "./tooltip"; -import { isReactNode, SafeReactNode } from "@k8slens/utilities"; +import { isReactNode, StrictReactNode } from "@k8slens/utilities"; import uniqueId from "lodash/uniqueId"; -import type { SingleOrMany } from "@k8slens/utilities"; export interface TooltipDecoratorProps { - tooltip?: SafeReactNode | Omit; + tooltip?: StrictReactNode | Omit; /** * forces tooltip to detect the target's parent for mouse events. This is * useful for displaying tooltips even when the target is "disabled" */ tooltipOverrideDisabled?: boolean; id?: string; - children?: SafeReactNode; + children?: StrictReactNode; } export function withTooltip( diff --git a/packages/utility-features/utilities/src/isReactNode.ts b/packages/utility-features/utilities/src/isReactNode.ts index 03372bb1d4..5babd0e800 100755 --- a/packages/utility-features/utilities/src/isReactNode.ts +++ b/packages/utility-features/utilities/src/isReactNode.ts @@ -5,15 +5,25 @@ import React from "react"; import { isObject } from "./type-narrowing"; -import type { SingleOrMany } from "./types"; -export type SafeReactNode = React.ReactElement | React.ReactText | boolean | null | undefined | Iterable; +export type StrictReactFragment = + | { + key?: string | number | null; + ref?: null; + props?: { + children?: StrictReactNode; + }; + }; -export function toSafeReactChildrenArray(children: SafeReactNode) { - return React.Children.toArray(children) as (Exclude)[]; -} +export type StrictReactNode = + | React.ReactChild + | StrictReactFragment + | React.ReactPortal + | boolean + | null + | undefined; -export function isReactNode(node: unknown): node is SafeReactNode { +export function isReactNode(node: unknown): node is StrictReactNode { return (isObject(node) && React.isValidElement(node)) || Array.isArray(node) && node.every(isReactNode) || node == null