From 6e75a8b30867ce894c5648cda14e5749d626e58e Mon Sep 17 00:00:00 2001 From: Slizhevsky Vladislav Date: Thu, 26 Mar 2026 16:41:07 +0100 Subject: [PATCH 1/4] [chore] add RootProps type/refactored Accordion --- semcore/accordion/src/Accordion.internal.type.ts | 14 -------------- semcore/accordion/src/Accordion.tsx | 13 ++++--------- semcore/core/src/core-types/Component.ts | 5 +++++ 3 files changed, 9 insertions(+), 23 deletions(-) delete mode 100644 semcore/accordion/src/Accordion.internal.type.ts diff --git a/semcore/accordion/src/Accordion.internal.type.ts b/semcore/accordion/src/Accordion.internal.type.ts deleted file mode 100644 index f371955070..0000000000 --- a/semcore/accordion/src/Accordion.internal.type.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { AccordionItemProps, AccordionProps } from './Accordion.type'; - -export type AccordionItemPropsInternal = { - use: AccordionProps['use']; - $handleInteraction: (value: AccordionItemProps['value']) => void; -}; - -export type AccordionCollapsePropsInternal = { - selected: boolean; -}; - -export type AccordionItemTogglePropsInternal = { - use: AccordionProps['use']; -}; diff --git a/semcore/accordion/src/Accordion.tsx b/semcore/accordion/src/Accordion.tsx index 6b8603621b..527f0a7eca 100644 --- a/semcore/accordion/src/Accordion.tsx +++ b/semcore/accordion/src/Accordion.tsx @@ -6,13 +6,9 @@ import { cssVariableEnhance } from '@semcore/core/lib/utils/useCssVariable'; import ChevronRightL from '@semcore/icon/ChevronRight/l'; import ChevronRightM from '@semcore/icon/ChevronRight/m'; import { Text } from '@semcore/typography'; +import type { RootProps } from '@semcore/ui/core/lib/core-types/Component'; import React from 'react'; -import type { - AccordionCollapsePropsInternal, - AccordionItemPropsInternal, - AccordionItemTogglePropsInternal, -} from './Accordion.internal.type'; import type { AccordionCollapseProps, AccordionComponent, @@ -82,8 +78,7 @@ class RootAccordion extends Component; } } - -export class RootItem extends Component { +export class RootItem extends Component> { static displayName = 'Item'; static style = style; static enhance = [uniqueIDEnhancement()] as const; @@ -142,7 +137,7 @@ export class RootItem extends Component { +class Toggle extends Component> { toggleRef = React.createRef(); handleKeyDown = (event: React.KeyboardEvent) => { @@ -190,7 +185,7 @@ function ToggleButton(props: IRootComponentProps) { ); } -function Collapse(props: AccordionCollapseProps & AccordionCollapsePropsInternal) { +function Collapse(props: AccordionCollapseProps & RootProps) { const { selected } = props; const visible = selected; diff --git a/semcore/core/src/core-types/Component.ts b/semcore/core/src/core-types/Component.ts index b625ae1a7f..abc18831f5 100644 --- a/semcore/core/src/core-types/Component.ts +++ b/semcore/core/src/core-types/Component.ts @@ -20,6 +20,11 @@ export interface IRootComponentProps { 'data-ui-name'?: string; } +export type RootProps any, Child extends string> = + InstanceType[`get${Child}Props`] extends (...args: any[]) => infer R + ? R + : Record; + export interface IRootNodeProps { render: React.ElementType | string; tag?: React.ElementType | string; From 6187a5074725271a4cd686a15139201bac13ef4c Mon Sep 17 00:00:00 2001 From: Slizhevsky Vladislav Date: Fri, 27 Mar 2026 16:38:36 +0100 Subject: [PATCH 2/4] [chore] add RootProps type/refactored Accordion --- semcore/accordion/src/Accordion.tsx | 8 ++++---- semcore/core/src/core-types/Component.ts | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/semcore/accordion/src/Accordion.tsx b/semcore/accordion/src/Accordion.tsx index 527f0a7eca..c6796ed2ba 100644 --- a/semcore/accordion/src/Accordion.tsx +++ b/semcore/accordion/src/Accordion.tsx @@ -6,7 +6,7 @@ import { cssVariableEnhance } from '@semcore/core/lib/utils/useCssVariable'; import ChevronRightL from '@semcore/icon/ChevronRight/l'; import ChevronRightM from '@semcore/icon/ChevronRight/m'; import { Text } from '@semcore/typography'; -import type { RootProps } from '@semcore/ui/core/lib/core-types/Component'; +import type { InferPropsFromRoot } from '@semcore/ui/core/lib/core-types/Component'; import React from 'react'; import type { @@ -78,7 +78,7 @@ class RootAccordion extends Component; } } -export class RootItem extends Component> { +export class RootItem extends Component> { static displayName = 'Item'; static style = style; static enhance = [uniqueIDEnhancement()] as const; @@ -137,7 +137,7 @@ export class RootItem extends Component> { +class Toggle extends Component> { toggleRef = React.createRef(); handleKeyDown = (event: React.KeyboardEvent) => { @@ -185,7 +185,7 @@ function ToggleButton(props: IRootComponentProps) { ); } -function Collapse(props: AccordionCollapseProps & RootProps) { +function Collapse(props: AccordionCollapseProps & InferPropsFromRoot) { const { selected } = props; const visible = selected; diff --git a/semcore/core/src/core-types/Component.ts b/semcore/core/src/core-types/Component.ts index abc18831f5..c75922f6e4 100644 --- a/semcore/core/src/core-types/Component.ts +++ b/semcore/core/src/core-types/Component.ts @@ -20,7 +20,7 @@ export interface IRootComponentProps { 'data-ui-name'?: string; } -export type RootProps any, Child extends string> = +export type InferPropsFromRoot any, Child extends string> = InstanceType[`get${Child}Props`] extends (...args: any[]) => infer R ? R : Record; From de18b0abb9dc67d46b6eef2cb8731be3f0c2a14e Mon Sep 17 00:00:00 2001 From: Slizhevsky Vladislav Date: Fri, 27 Mar 2026 16:50:23 +0100 Subject: [PATCH 3/4] [chore] add RootProps type/refactored Accordion --- semcore/accordion/src/Accordion.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/semcore/accordion/src/Accordion.tsx b/semcore/accordion/src/Accordion.tsx index c6796ed2ba..a8dd7e1cb2 100644 --- a/semcore/accordion/src/Accordion.tsx +++ b/semcore/accordion/src/Accordion.tsx @@ -137,7 +137,7 @@ export class RootItem extends Component> { +class Toggle extends Component> { toggleRef = React.createRef(); handleKeyDown = (event: React.KeyboardEvent) => { From 50662e5f55c46d47b46666ee2112356213c94f2c Mon Sep 17 00:00:00 2001 From: Slizhevsky Vladislav Date: Fri, 27 Mar 2026 17:03:36 +0100 Subject: [PATCH 4/4] [chore] add RootProps type/refactored Accordion --- semcore/accordion/src/Accordion.tsx | 25 +++++++++++++----------- semcore/core/src/core-types/Component.ts | 9 ++++----- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/semcore/accordion/src/Accordion.tsx b/semcore/accordion/src/Accordion.tsx index a8dd7e1cb2..4cba1ac64e 100644 --- a/semcore/accordion/src/Accordion.tsx +++ b/semcore/accordion/src/Accordion.tsx @@ -6,7 +6,6 @@ import { cssVariableEnhance } from '@semcore/core/lib/utils/useCssVariable'; import ChevronRightL from '@semcore/icon/ChevronRight/l'; import ChevronRightM from '@semcore/icon/ChevronRight/m'; import { Text } from '@semcore/typography'; -import type { InferPropsFromRoot } from '@semcore/ui/core/lib/core-types/Component'; import React from 'react'; import type { @@ -78,7 +77,12 @@ class RootAccordion extends Component; } } -export class RootItem extends Component> { +export class RootItem extends Component< + AccordionItemProps, + typeof RootItem.enhance, + {}, + Intergalactic.InternalTypings.InferPropsFromRoot +> { static displayName = 'Item'; static style = style; static enhance = [uniqueIDEnhancement()] as const; @@ -137,7 +141,12 @@ export class RootItem extends Component> { +class Toggle extends Component< + AccordionItemToggleProps, + never, + {}, + Intergalactic.InternalTypings.InferPropsFromRoot +> { toggleRef = React.createRef(); handleKeyDown = (event: React.KeyboardEvent) => { @@ -158,13 +167,7 @@ class Toggle extends Component, + , ); } } @@ -185,7 +188,7 @@ function ToggleButton(props: IRootComponentProps) { ); } -function Collapse(props: AccordionCollapseProps & InferPropsFromRoot) { +function Collapse(props: AccordionCollapseProps & Intergalactic.InternalTypings.InferPropsFromRoot) { const { selected } = props; const visible = selected; diff --git a/semcore/core/src/core-types/Component.ts b/semcore/core/src/core-types/Component.ts index c75922f6e4..5274afc5a5 100644 --- a/semcore/core/src/core-types/Component.ts +++ b/semcore/core/src/core-types/Component.ts @@ -20,11 +20,6 @@ export interface IRootComponentProps { 'data-ui-name'?: string; } -export type InferPropsFromRoot any, Child extends string> = - InstanceType[`get${Child}Props`] extends (...args: any[]) => infer R - ? R - : Record; - export interface IRootNodeProps { render: React.ElementType | string; tag?: React.ElementType | string; @@ -117,6 +112,10 @@ export namespace Intergalactic { /** @private */ // eslint-disable-next-line @typescript-eslint/no-namespace export namespace InternalTypings { + export type InferPropsFromRoot< + Root extends new (...args: any) => any, + Child extends string, + > = InstanceType[`get${Child}Props`] extends (...args: any[]) => infer R ? R : Record; export type PartialRequired = Omit & { [key in K]-?: T[key]; };