diff --git a/webapp/channels/src/components/component_library/component_library.scss b/webapp/channels/src/components/component_library/component_library.scss new file mode 100644 index 0000000000..d15f20b3bb --- /dev/null +++ b/webapp/channels/src/components/component_library/component_library.scss @@ -0,0 +1,17 @@ +.clInput { + display: block; + margin-bottom: 20px; +} + +.clWrapper { + width: auto; + padding: 25px; +} + +.clCenterBackground { + background-color: var(--center-channel-bg); +} + +.clSidebarBackground { + background-color: var(--sidebar-bg); +} diff --git a/webapp/channels/src/components/component_library/hooks.tsx b/webapp/channels/src/components/component_library/hooks.tsx new file mode 100644 index 0000000000..dc81a560a0 --- /dev/null +++ b/webapp/channels/src/components/component_library/hooks.tsx @@ -0,0 +1,114 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import React, {useCallback, useMemo, useState} from 'react'; + +import './component_library.scss'; + +type HookResult = [ + {[x: string]: T}, + JSX.Element, +] +export const useStringProp = ( + propName: string, + defaultValue: string, + isTextarea: boolean, +): HookResult => { + const [value, setValue] = useState(defaultValue); + const onChange = useCallback((e: React.ChangeEvent) => setValue(e.target.value), []); + const selector = useMemo(() => { + const input = isTextarea ? ( +