diff --git a/src/deck-components/ButtonItem.tsx b/src/deck-components/ButtonItem.tsx index 24e5fea..773edee 100644 --- a/src/deck-components/ButtonItem.tsx +++ b/src/deck-components/ButtonItem.tsx @@ -1,15 +1,11 @@ import { FC } from 'react'; import { CommonUIModule } from '../webpack'; +import { ItemProps } from './Item'; -export interface ButtonItemProps { - label?: string; - description?: string; - layout?: 'below'; - icon?: JSX.Element; +export interface ButtonItemProps extends ItemProps { onClick?(e: MouseEvent): void; disabled?: boolean; - bottomSeparator?: boolean; } export const ButtonItem = Object.values(CommonUIModule).find((mod: any) => diff --git a/src/deck-components/Dropdown.tsx b/src/deck-components/Dropdown.tsx index e5e0e53..a5f2b52 100644 --- a/src/deck-components/Dropdown.tsx +++ b/src/deck-components/Dropdown.tsx @@ -1,6 +1,7 @@ import { ReactNode, VFC } from 'react'; import { CommonUIModule } from '../webpack'; +import { ItemProps } from './Item'; export interface SingleDropdownOption { data: number; @@ -36,14 +37,7 @@ export const Dropdown = Object.values(CommonUIModule).find( (mod: any) => mod?.prototype?.SetSelectedOption && mod?.prototype?.BuildMenu, ) as VFC; -export interface DropdownItemProps extends DropdownProps { - label?: string; - tooltip?: string; - description?: string; - layout?: 'below'; - bottomSeparator?: boolean; - indentLevel?: number; -} +export interface DropdownItemProps extends DropdownProps, ItemProps {} export const DropdownItem = Object.values(CommonUIModule).find((mod: any) => mod?.toString()?.includes('"dropDownControlRef","description"'), diff --git a/src/deck-components/Item.tsx b/src/deck-components/Item.tsx new file mode 100644 index 0000000..dcdf39c --- /dev/null +++ b/src/deck-components/Item.tsx @@ -0,0 +1,11 @@ +import { ReactNode } from 'react'; + +export interface ItemProps { + label?: string; + description?: string; + layout?: 'below' | 'inline'; + icon?: ReactNode; + bottomSeparator?: boolean; + indentLevel?: number; + tooltip?: string; +} diff --git a/src/deck-components/ProgressBar.tsx b/src/deck-components/ProgressBar.tsx new file mode 100644 index 0000000..170b71c --- /dev/null +++ b/src/deck-components/ProgressBar.tsx @@ -0,0 +1,18 @@ +import { VFC } from 'react'; + +import { findModuleChild } from '../webpack'; +import { ItemProps } from './Item'; + +export interface ProgressBarItem extends ItemProps { + indeterminate?: boolean; + nTransitionSec?: number; + nProgress?: number; + focusable?: boolean; +} + +export const ProgressBarItem = findModuleChild((m) => { + if (typeof m !== 'object') return undefined; + for (let prop in m) { + if (m[prop]?.toString()?.includes('"indeterminate","nTransitionSec"')) return m[prop]; + } +}) as VFC; diff --git a/src/deck-components/Slider.tsx b/src/deck-components/Slider.tsx index 747ce4b..92f90f2 100644 --- a/src/deck-components/Slider.tsx +++ b/src/deck-components/Slider.tsx @@ -1,26 +1,32 @@ import { FC } from 'react'; import { CommonUIModule } from '../webpack'; +import { ItemProps } from './Item'; export interface NotchLabel { notchIndex: number; label: string; - value: number; + value?: number; } -export interface SliderProps { - label?: string; +export interface SliderProps extends ItemProps { value: number; - layout?: 'below'; - icon?: JSX.Element; min?: number; max?: number; step?: number; notchCount?: number; notchLabels?: NotchLabel[]; + notchTicksVisible?: boolean; + showValue?: boolean; + resetValue?: number; + disabled?: boolean; + editableValue?: boolean; + validValues?: 'steps' | 'range' | ((value: number) => boolean); + valueSuffix?: string; + minimumDpadGranularity?: number; onChange?(value: number): void; } export const Slider = Object.values(CommonUIModule).find((mod: any) => - mod?.render?.toString()?.includes('SliderField,fallback'), + mod?.toString()?.includes('SliderField,fallback'), ) as FC; diff --git a/src/deck-components/Toggle.tsx b/src/deck-components/Toggle.tsx index 4869af5..013af96 100644 --- a/src/deck-components/Toggle.tsx +++ b/src/deck-components/Toggle.tsx @@ -1,12 +1,10 @@ import { FC } from 'react'; import { CommonUIModule } from '../webpack'; +import { ItemProps } from './Item'; -export interface ToggleProps { - label?: string; - description?: string; +export interface ToggleProps extends ItemProps { checked: boolean; - icon?: JSX.Element; disabled?: boolean; onChange?(checked: boolean): void; } diff --git a/src/deck-components/index.ts b/src/deck-components/index.ts index 6d32427..db2b1ca 100755 --- a/src/deck-components/index.ts +++ b/src/deck-components/index.ts @@ -4,6 +4,7 @@ export * from './Dropdown'; export * from './Menu'; export * from './Modal'; export * from './Panel'; +export * from './ProgressBar'; export * from './Router'; export * from './SidebarNavigation'; export * from './Slider';