| /** |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| import * as React from "react"; |
| import { useState, useMemo } from "react"; |
| import { |
| PropsComponentProps, |
| useComponents |
| } from "../../../../docz-lib/docz/dist"; |
| import styled from "styled-components"; |
| import { PropsRaw } from "./PropsRaw"; |
| import { PropsTable } from "./PropsTable"; |
| |
| const Container = styled.div` |
| margin: 20px 0; |
| `; |
| |
| export const Props = ({ title, isRaw, isToggle, ...props }) => { |
| const [isOpen, setIsOpen] = useState(true); |
| |
| const components = useComponents(); |
| const Title = useMemo( |
| () => styled(components.H3 || "h3")` |
| padding: 8px 0; |
| position: relative; |
| ${!isRaw ? "margin-bottom: 0;" : ""} |
| ${!isOpen || isRaw ? "border-bottom: 1px solid rgba(0, 0, 0, 0.1);" : ""} |
| |
| ${ |
| isToggle |
| ? ` |
| cursor: pointer; |
| padding-right: 40px; |
| |
| &::after { |
| content: ''; |
| position: absolute; |
| top: 50%; |
| right: 16px; |
| transform: translateY(-50%) ${ |
| isOpen ? "rotate(-135deg)" : "rotate(45deg)" |
| }; |
| ${!isOpen ? "margin-top: -2px;" : ""} |
| width: 8px; |
| height: 8px; |
| border-bottom: 2px solid; |
| border-right: 2px solid; |
| } |
| ` |
| : "" |
| } |
| `, |
| [isOpen] |
| ); |
| |
| const titleProps = isToggle |
| ? { |
| onClick: () => setIsOpen(open => !open), |
| onkeydown: () => setIsOpen(open => !open), |
| role: "button", |
| tabindex: 0 |
| } |
| : {}; |
| |
| return ( |
| <Container> |
| {(!!title || isToggle) && ( |
| <Title {...titleProps}>{title || "Component props"}</Title> |
| )} |
| {isOpen && ( |
| <div>{isRaw ? <PropsRaw {...props} /> : <PropsTable {...props} />}</div> |
| )} |
| </Container> |
| ); |
| }; |