diff --git a/packages/html/src/index.ts b/packages/html/src/index.ts index 157d0e5429c..e2a8a86c9d2 100644 --- a/packages/html/src/index.ts +++ b/packages/html/src/index.ts @@ -53,6 +53,7 @@ export * from './dropdownlist/index'; export * from './dropdowntree/index'; export * from './maskedtextbox/index'; export * from './multiselect/index'; +export * from './multiselecttree/index'; export * from './numerictextbox/index'; // export * from './rating/index'; export * from './searchbox/index'; diff --git a/packages/html/src/multiselecttree/index.ts b/packages/html/src/multiselecttree/index.ts new file mode 100644 index 00000000000..3ceb0134a7b --- /dev/null +++ b/packages/html/src/multiselecttree/index.ts @@ -0,0 +1 @@ +export * from './multiselecttree.spec'; diff --git a/packages/html/src/multiselecttree/multiselecttree.spec.tsx b/packages/html/src/multiselecttree/multiselecttree.spec.tsx new file mode 100644 index 00000000000..499b8e19e91 --- /dev/null +++ b/packages/html/src/multiselecttree/multiselecttree.spec.tsx @@ -0,0 +1,150 @@ +import { classNames, States, Size, Roundness, FillMode } from '../utils'; +import { + Input, + InputClearValue, + InputLoadingIcon, + InputPrefix, + InputSuffix, + InputValidationIcon +} from '../input'; +import { Button } from '../button'; +import { ChipList } from '../chip'; +import { Popup } from '../popup'; + +export const MULTISELECTTREE_CLASSNAME = `k-multiselecttree`; + +const states = [ + States.hover, + States.focus, + States.valid, + States.invalid, + States.required, + States.disabled, + States.loading, + States.readonly +]; + +const options = { + size: [ Size.small, Size.medium, Size.large ], + rounded: [ Roundness.small, Roundness.medium, Roundness.large, Roundness.full ], + fillMode: [ FillMode.solid, FillMode.flat, FillMode.outline ], +}; + +const defaultProps = { + size: Input.defaultProps.size, + rounded: Input.defaultProps.rounded, + fillMode: Input.defaultProps.fillMode +}; + +export type KendoMultiSelectTreeOptions = { + size?: (typeof options.size)[number] | null; + rounded?: (typeof options.rounded)[number] | null; + fillMode?: (typeof options.fillMode)[number] | null; +}; + +export type KendoMultiSelectTreeProps = KendoMultiSelectTreeOptions & { + prefix?: JSX.Element; + suffix?: JSX.Element; + type?: string; + placeholder?: string; + tags?: JSX.Element; + popup?: JSX.Element; + showArrowButton?: boolean; + opened?: boolean; +}; + +export type KendoMultiSelectTreeState = { [K in (typeof states)[number]]?: boolean }; + +export const MultiSelectTree = ( + props: KendoMultiSelectTreeProps & + KendoMultiSelectTreeState & + React.HTMLAttributes +) => { + const { + prefix, + suffix, + placeholder, + tags, + popup, + size, + rounded, + fillMode, + showArrowButton, + hover, + focus, + valid, + invalid, + required, + loading, + disabled, + readonly, + opened, + ...other + } = props; + + + return ( + <> + + {prefix} + + <> + {tags} + + + + {placeholder} + + + + + {suffix} + {showArrowButton && ( +