Skip to content
reference/docs/styled-components.md at main · jaywcjlove/reference · GitHub
Skip to content
)符号","","### 函数组件类型继承","\u003c!--rehype:wrap-class=col-span-2--\u003e","","```tsx {8,13}","import { FC, PropsWithRef, DetailedHTMLProps, ImgHTMLAttributes } from 'react';","import styled from 'styled-components';","","const Img = styled.img`"," height: 32px;"," width: 32px;","`;","export interface ImageProps extends DetailedHTMLProps\u003c"," ImgHTMLAttributes\u003cHTMLImageElement\u003e, HTMLImageElement","\u003e {"," text?: string;","};","export const Image: FC\u003cPropsWithRef\u003cImageProps\u003e\u003e = (props) =\u003e ("," \u003cImg src=\"\" alt=\"\" {...props} /\u003e",");","```","","React Native","----","\u003c!--rehype:body-class=cols-4--\u003e","","### 基础实例","\u003c!--rehype:wrap-class=col-span-2--\u003e","","```jsx","import React from 'react'","import styled from 'styled-components/native'","","const StyledView = styled.View`"," background-color: papayawhip;","`;","const StyledText = styled.Text`"," color: palevioletred;","`;","","class MyReactNativeComponent extends React.Component {"," render() {"," return ("," \u003cStyledView\u003e"," \u003cStyledText\u003eHello World!\u003c/StyledText\u003e"," \u003c/StyledView\u003e"," );"," }","}","```","","### React Native 中写 CSS","\u003c!--rehype:wrap-class=col-span-2--\u003e","","```jsx","import styled from 'styled-components/native'","","const RotatedBox = styled.View`"," transform: rotate(90deg);"," text-shadow-offset: 10px 5px;"," font-variant: small-caps;"," margin: 5px 7px 2px;","`;","","function Example() {"," return ("," \u003cRotatedBox /\u003e"," )","}","```","","与 web 版本的一些区别是,您不能使用关键帧(`keyframes`)和 `createGlobalStyle` 助手,因为 React Native 不支持关键帧或全局样式。如果您使用媒体查询或嵌套 CSS,我们也会警告您。","","高级用法","----","\u003c!--rehype:body-class=cols-6--\u003e","","### 主题化","\u003c!--rehype:wrap-class=col-span-3--\u003e","","```jsx","import styled, { ThemeProvider } from 'styled-components'","","// 定义我们的按钮,但这次使用 props.theme","const Button = styled.button`"," font-size: 1em;"," margin: 1em;"," padding: 0.25em 1em;"," border-radius: 3px;",""," /* 使用 theme.main 为边框和文本着色 */"," color: ${props =\u003e props.theme.main};"," border: 2px solid ${props =\u003e props.theme.main};","`;","","// 我们正在为未包装在 ThemeProvider 中的按钮传递默认主题","Button.defaultProps = {"," theme: {"," main: \"palevioletred\""," }","}","","// 定义 props.theme 的外观","const theme = {"," main: \"mediumseagreen\"","};","","render("," \u003cdiv\u003e"," \u003cButton\u003eNormal\u003c/Button\u003e",""," \u003cThemeProvider theme={theme}\u003e"," \u003cButton\u003eThemed\u003c/Button\u003e"," \u003c/ThemeProvider\u003e"," \u003c/div\u003e",");","```","","### 功能主题","\u003c!--rehype:wrap-class=col-span-3--\u003e","","```jsx","import styled, { ThemeProvider } from 'styled-components'","","// 定义我们的按钮,但这次使用 props.theme","const Button = styled.button`"," color: ${props =\u003e props.theme.fg};"," border: 2px solid ${props =\u003e props.theme.fg};"," background: ${props =\u003e props.theme.bg};",""," font-size: 1em;"," margin: 1em;"," padding: 0.25em 1em;"," border-radius: 3px;","`;","// 在主题上定义我们的`fg`和`bg`","const theme = {"," fg: \"palevioletred\","," bg: \"white\"","};","","// 这个主题交换了`fg`和`bg`","const invertTheme = ({ fg, bg }) =\u003e ({"," fg: bg,"," bg: fg","});","","render("," \u003cThemeProvider theme={theme}\u003e"," \u003cdiv\u003e"," \u003cButton\u003e默认主题\u003c/Button\u003e"," \u003cThemeProvider theme={invertTheme}\u003e"," \u003cButton\u003e反转主题\u003c/Button\u003e"," \u003c/ThemeProvider\u003e"," \u003c/div\u003e"," \u003c/ThemeProvider\u003e",");","```","","### 通过 withTheme 高阶组件","\u003c!--rehype:wrap-class=col-span-3--\u003e","","```jsx","import { withTheme } from 'styled-components'","","class MyComponent extends React.Component {"," render() {"," console.log('Current theme: ', this.props.theme)"," // ..."," }","}","","export default withTheme(MyComponent)","```","","### useContext 钩子","\u003c!--rehype:wrap-class=col-span-3--\u003e","","```jsx","import { useContext } from 'react'","import { ThemeContext } from 'styled-components'","","const MyComponent = () =\u003e {"," const themeContext = useContext(ThemeContext)"," "," console.log('Current theme: ', themeContext)"," // ...","}","```","","### useTheme 自定义钩子","\u003c!--rehype:wrap-class=col-span-2--\u003e","","```jsx","import {useTheme} from 'styled-components'","","const MyComponent = () =\u003e {"," const theme = useTheme()",""," console.log('Current theme: ', theme)"," // ...","}","```","","### 主题 props","\u003c!--rehype:wrap-class=col-span-2 row-span-2--\u003e","","```jsx","import {"," ThemeProvider,"," styled","} from 'styled-components';","","// 定义我们的按钮","const Button = styled.button`"," font-size: 1em;"," margin: 1em;"," padding: 0.25em 1em;"," /* 使用 theme.main 为边框和文本着色 */"," color: ${props =\u003e props.theme.main};"," border: 2px solid ${props =\u003e props.theme.main};","`;","// 定义主题的外观","const theme = {"," main: \"mediumseagreen\"","};","```","","使用自定义主题组件","","```jsx","render("," \u003cdiv\u003e"," \u003cButton theme={{ main: \"royalblue\" }}\u003e"," 特设主题"," \u003c/Button\u003e"," \u003cThemeProvider theme={theme}\u003e"," \u003cdiv\u003e"," \u003cButton\u003eThemed\u003c/Button\u003e"," \u003cButton"," theme={{ main: \"darkorange\" }}"," \u003e"," 被覆盖"," \u003c/Button\u003e"," \u003c/div\u003e"," \u003c/ThemeProvider\u003e"," \u003c/div\u003e",");","```","","### Refs","\u003c!--rehype:wrap-class=col-span-2 row-span-2--\u003e","","```jsx","import {"," ThemeProvider,"," styled","} from 'styled-components';","","const Input = styled.input`"," border: none;"," border-radius: 3px;","`;","","class Form extends React.Component {"," constructor(props) {"," super(props);"," this.inputRef = React.createRef();"," }",""," render() {"," return ("," \u003cInput"," ref={this.inputRef}"," placeholder=\"Hover to focus!\""," onMouseEnter={() =\u003e {"," this.inputRef.current.focus()"," }}"," /\u003e"," );"," }","}","```","","使用 `Form` 组件","","```jsx","function Example() {"," return ("," \u003cForm /\u003e"," )","}","```","","### 特异性问题","\u003c!--rehype:wrap-class=col-span-2--\u003e","","在文件 `MyComponent.js` 中定义 `MyComponent` 组件。","","```jsx","const MyComponent = styled.div`"," background-color: green;","`;","```","","定义样式 `my-component.css`","","```css",".red-bg {"," background-color: red;","}","```","","使用 `MyComponent` 组件","","```jsx","\u003cMyComponent className=\"red-bg\" /\u003e","```","","由于某种原因,这个组件仍然有绿色背景,即使你试图用 `red-bg` 类覆盖它!","","#### 解决方案","","```css",".red-bg.red-bg {"," background-color: red;","}","```","","### ThemeProvider","\u003c!--rehype:wrap-class=col-span-3--\u003e","","```jsx","import styled, { ThemeProvider } from 'styled-components'","","const Box = styled.div`"," color: ${props =\u003e props.theme.color};","`;","","const Example = () =\u003e ("," \u003cThemeProvider theme={{ color: 'mediumseagreen' }}\u003e"," \u003cBox\u003eI'm mediumseagreen!\u003c/Box\u003e"," \u003c/ThemeProvider\u003e",");","```","","### shouldForwardProp","\u003c!--rehype:wrap-class=col-span-3--\u003e","","```jsx","const Comp = styled('div').withConfig({"," shouldForwardProp: (prop, defaultValidatorFn) =\u003e"," !['hidden'].includes(prop) \u0026\u0026 defaultValidatorFn(prop),","}).attrs({ className: 'foo' })`"," color: red;"," \u0026.foo {"," text-decoration: underline;"," }","`;","","const Example = () =\u003e ("," \u003cComp hidden draggable=\"true\"\u003e"," Drag Me!"," \u003c/Comp\u003e",");","```"],"stylingDirectives":[[],[[0,4,"pl-mh"]],[],[[0,1,"pl-s"],[1,3,"pl-s"],[14,15,"pl-s"],[15,16,"pl-s"],[16,77,"pl-corl"],[77,79,"pl-s"],[79,80,"pl-s"],[80,123,"pl-corl"],[123,124,"pl-s"]],[[0,1,"pl-s"],[1,3,"pl-s"],[12,13,"pl-s"],[13,14,"pl-s"],[14,76,"pl-corl"],[76,78,"pl-s"],[78,79,"pl-s"],[79,126,"pl-corl"],[126,127,"pl-s"]],[[0,1,"pl-s"],[1,3,"pl-s"],[18,19,"pl-s"],[19,20,"pl-s"],[20,97,"pl-corl"],[97,99,"pl-s"],[99,100,"pl-s"],[100,173,"pl-corl"],[173,174,"pl-s"]],[[0,1,"pl-s"],[1,3,"pl-s"],[14,15,"pl-s"],[15,16,"pl-s"],[16,70,"pl-corl"],[70,72,"pl-s"],[72,73,"pl-s"],[73,127,"pl-corl"],[127,128,"pl-s"]],[],[],[[0,38,"pl-c"],[0,4,"pl-c"],[35,38,"pl-c"]],[],[],[[0,4,"pl-ms"]],[],[[0,6,"pl-mh"],[4,6,"pl-en"]],[],[[0,1,"pl-s"],[18,19,"pl-s"],[19,20,"pl-s"],[20,49,"pl-corl"],[49,50,"pl-s"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[27,28,"pl-s"],[28,29,"pl-s"],[29,90,"pl-corl"],[90,91,"pl-s"],[92,93,"pl-s"],[103,104,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[24,25,"pl-s"],[25,26,"pl-s"],[26,84,"pl-corl"],[84,85,"pl-s"],[86,87,"pl-s"],[92,93,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[29,30,"pl-s"],[30,31,"pl-s"],[31,94,"pl-corl"],[94,95,"pl-s"],[96,97,"pl-s"],[107,108,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[],[[0,3,"pl-s"]],[],[[0,8,"pl-mh"],[4,8,"pl-en"]],[[0,35,"pl-c"],[0,4,"pl-c"],[32,35,"pl-c"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,6,"pl-k"],[7,13,"pl-smi"],[14,18,"pl-k"],[19,38,"pl-s"],[19,20,"pl-pds"],[37,38,"pl-pds"]],[[0,3,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,22,"pl-c"],[0,2,"pl-c"]],[[0,5,"pl-k"],[6,11,"pl-c1"],[12,13,"pl-k"],[14,20,"pl-smi"],[21,23,"pl-smi"],[23,24,"pl-s"],[23,24,"pl-pds"]],[[0,19,"pl-s"]],[[0,21,"pl-s"]],[[0,1,"pl-s"],[0,1,"pl-pds"]],[[0,3,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,29,"pl-c"],[0,2,"pl-c"]],[[0,5,"pl-k"],[6,13,"pl-c1"],[14,15,"pl-k"],[16,22,"pl-smi"],[23,30,"pl-smi"],[30,31,"pl-s"],[30,31,"pl-pds"]],[[0,15,"pl-s"]],[[0,25,"pl-s"]],[[0,1,"pl-s"],[0,1,"pl-pds"]],[[0,3,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,8,"pl-k"],[9,13,"pl-en"]],[[2,8,"pl-k"]],[[4,5,"pl-k"],[12,13,"pl-k"]],[[6,7,"pl-k"],[12,13,"pl-k"]],[[19,20,"pl-k"]],[[6,7,"pl-k"],[7,8,"pl-k"],[13,14,"pl-k"]],[[4,5,"pl-k"],[5,6,"pl-k"],[13,14,"pl-k"]],[],[],[[0,3,"pl-s"]],[],[[0,15,"pl-mh"],[4,15,"pl-en"]],[[0,35,"pl-c"],[0,4,"pl-c"],[32,35,"pl-c"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,6,"pl-k"],[7,13,"pl-smi"],[14,18,"pl-k"],[19,38,"pl-s"],[19,20,"pl-pds"],[37,38,"pl-pds"]],[],[[0,5,"pl-k"],[6,12,"pl-c1"],[13,14,"pl-k"],[15,21,"pl-smi"],[22,28,"pl-smi"],[28,29,"pl-s"],[28,29,"pl-pds"]],[[0,23,"pl-s"]],[[0,16,"pl-s"],[14,16,"pl-s1"],[14,16,"pl-pse"]],[[0,13,"pl-s"],[0,13,"pl-s1"],[4,9,"pl-smi"],[10,12,"pl-k"]],[[0,38,"pl-s"],[0,38,"pl-s1"],[6,11,"pl-smi"],[12,19,"pl-smi"],[20,21,"pl-k"],[22,28,"pl-s"],[22,23,"pl-pds"],[27,28,"pl-pds"],[29,30,"pl-k"],[31,38,"pl-s"],[31,32,"pl-pds"],[37,38,"pl-pds"]],[[0,4,"pl-s"],[0,3,"pl-s1"],[2,3,"pl-pse"]],[[0,11,"pl-s"],[9,11,"pl-s1"],[9,11,"pl-pse"]],[[0,13,"pl-s"],[0,13,"pl-s1"],[4,9,"pl-smi"],[10,12,"pl-k"]],[[0,38,"pl-s"],[0,38,"pl-s1"],[6,11,"pl-smi"],[12,19,"pl-smi"],[20,21,"pl-k"],[22,29,"pl-s"],[22,23,"pl-pds"],[28,29,"pl-pds"],[30,31,"pl-k"],[32,38,"pl-s"],[32,33,"pl-pds"],[37,38,"pl-pds"]],[[0,4,"pl-s"],[0,3,"pl-s1"],[2,3,"pl-pse"]],[[0,17,"pl-s"]],[[0,14,"pl-s"]],[[0,22,"pl-s"]],[[0,25,"pl-s"]],[[0,21,"pl-s"]],[[0,1,"pl-s"],[0,1,"pl-pds"]],[[0,3,"pl-s"]],[],[[3,4,"pl-s"],[4,11,"pl-c1"],[11,12,"pl-s"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,8,"pl-k"],[9,13,"pl-en"]],[[2,8,"pl-k"]],[[4,5,"pl-k"],[8,9,"pl-k"]],[[6,7,"pl-k"],[13,14,"pl-k"],[20,21,"pl-k"],[21,22,"pl-k"],[28,29,"pl-k"]],[[6,7,"pl-k"],[21,22,"pl-k"],[29,30,"pl-k"],[30,31,"pl-k"],[37,38,"pl-k"]],[[4,5,"pl-k"],[5,6,"pl-k"],[9,10,"pl-k"]],[],[],[[0,3,"pl-s"]],[],[[0,8,"pl-mh"],[4,8,"pl-en"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,5,"pl-k"],[6,12,"pl-c1"],[13,14,"pl-k"],[15,21,"pl-smi"],[22,28,"pl-smi"],[28,29,"pl-s"],[28,29,"pl-pds"]],[[0,23,"pl-s"]],[[0,34,"pl-s"]],[[0,21,"pl-s"]],[[0,1,"pl-s"],[0,1,"pl-pds"]],[[0,27,"pl-c"],[0,2,"pl-c"]],[[0,5,"pl-k"],[6,18,"pl-c1"],[19,20,"pl-k"],[21,27,"pl-en"],[35,36,"pl-s"],[35,36,"pl-pds"]],[[0,16,"pl-s"]],[[0,23,"pl-s"]],[[0,1,"pl-s"],[0,1,"pl-pds"]],[[0,5,"pl-k"],[6,10,"pl-c1"],[11,12,"pl-k"],[16,18,"pl-k"]],[[2,3,"pl-k"],[6,7,"pl-k"]],[[4,5,"pl-k"],[11,12,"pl-k"],[16,17,"pl-k"],[17,18,"pl-k"],[24,25,"pl-k"]],[[4,5,"pl-k"],[17,18,"pl-k"],[23,24,"pl-k"],[24,25,"pl-k"],[37,38,"pl-k"]],[[2,3,"pl-k"],[3,4,"pl-k"],[7,8,"pl-k"]],[],[[0,3,"pl-s"]],[],[[0,17,"pl-mh"],[4,17,"pl-en"]],[[0,35,"pl-c"],[0,4,"pl-c"],[32,35,"pl-c"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,5,"pl-k"],[6,12,"pl-c1"],[13,14,"pl-k"],[15,21,"pl-smi"],[22,28,"pl-smi"],[28,29,"pl-s"],[28,29,"pl-pds"]],[[0,23,"pl-s"]],[[0,22,"pl-s"]],[[0,34,"pl-s"]],[[0,21,"pl-s"]],[[0,17,"pl-s"]],[[0,1,"pl-s"],[0,1,"pl-pds"]],[],[[0,5,"pl-k"],[6,18,"pl-c1"],[19,20,"pl-k"],[21,27,"pl-en"],[35,36,"pl-s"],[35,36,"pl-pds"]],[[0,16,"pl-s"]],[[0,23,"pl-s"]],[[0,1,"pl-s"],[0,1,"pl-pds"]],[],[[0,5,"pl-k"],[6,10,"pl-c1"],[11,12,"pl-k"],[16,18,"pl-k"]],[[2,3,"pl-k"],[6,7,"pl-k"]],[[4,5,"pl-k"],[11,12,"pl-k"],[16,17,"pl-k"],[17,18,"pl-k"],[24,25,"pl-k"]],[[4,5,"pl-k"],[14,15,"pl-k"],[15,18,"pl-s"],[15,16,"pl-pds"],[17,18,"pl-pds"],[23,24,"pl-k"],[24,27,"pl-s"],[24,25,"pl-pds"],[26,27,"pl-pds"],[27,28,"pl-k"]],[],[[4,5,"pl-k"],[5,6,"pl-k"],[12,13,"pl-k"]],[[4,5,"pl-k"],[20,21,"pl-k"],[21,24,"pl-s"],[21,22,"pl-pds"],[23,24,"pl-pds"],[29,30,"pl-k"],[30,33,"pl-s"],[30,31,"pl-pds"],[32,33,"pl-pds"],[33,34,"pl-k"]],[],[[4,5,"pl-k"],[5,6,"pl-k"],[18,19,"pl-k"]],[[2,3,"pl-k"],[3,4,"pl-k"],[7,8,"pl-k"]],[],[[0,3,"pl-s"]],[],[[0,13,"pl-mh"],[4,13,"pl-en"]],[[0,35,"pl-c"],[0,4,"pl-c"],[32,35,"pl-c"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,5,"pl-k"],[6,12,"pl-c1"],[13,14,"pl-k"],[15,21,"pl-smi"],[22,28,"pl-smi"],[28,29,"pl-s"],[28,29,"pl-pds"]],[[0,23,"pl-s"]],[[0,17,"pl-s"]],[[0,34,"pl-s"]],[[0,17,"pl-s"]],[[0,1,"pl-s"],[0,1,"pl-pds"]],[],[[0,5,"pl-k"],[6,20,"pl-c1"],[21,22,"pl-k"],[23,28,"pl-smi"],[29,31,"pl-k"]],[[2,3,"pl-k"]],[[5,8,"pl-k"]],[[12,13,"pl-k"]],[[6,11,"pl-smi"],[12,20,"pl-smi"],[21,26,"pl-c1"],[27,29,"pl-s"],[27,28,"pl-pds"],[28,29,"pl-pds"],[31,38,"pl-c1"]],[],[[2,3,"pl-k"],[3,4,"pl-k"]],[],[],[[0,6,"pl-en"]],[[2,3,"pl-k"],[6,7,"pl-k"]],[[4,5,"pl-k"],[11,12,"pl-k"],[16,17,"pl-k"],[17,18,"pl-k"],[24,25,"pl-k"]],[[4,5,"pl-k"],[14,15,"pl-k"],[31,32,"pl-k"]],[],[[4,5,"pl-k"],[5,6,"pl-k"],[12,13,"pl-k"]],[[2,3,"pl-k"],[3,4,"pl-k"],[7,8,"pl-k"]],[],[[0,3,"pl-s"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,5,"pl-k"],[6,10,"pl-c1"],[11,12,"pl-k"],[39,41,"pl-k"]],[[2,3,"pl-k"],[14,15,"pl-k"],[26,27,"pl-k"]],[],[[2,3,"pl-k"],[3,4,"pl-k"],[5,6,"pl-k"]],[],[[0,5,"pl-k"],[6,16,"pl-c1"],[17,18,"pl-k"],[19,25,"pl-en"],[31,32,"pl-s"],[31,32,"pl-pds"]],[[0,23,"pl-s"]],[[0,20,"pl-s"]],[[0,1,"pl-s"],[0,1,"pl-pds"]],[[0,1,"pl-k"],[21,22,"pl-k"],[22,29,"pl-s"],[22,23,"pl-pds"],[28,29,"pl-pds"],[30,31,"pl-k"],[31,32,"pl-k"]],[[0,3,"pl-s"]],[],[[0,27,"pl-mh"],[4,27,"pl-en"]],[[0,39,"pl-c"],[0,4,"pl-c"],[36,39,"pl-c"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,5,"pl-k"],[6,9,"pl-c1"],[10,11,"pl-k"],[12,18,"pl-smi"],[19,22,"pl-smi"],[22,33,"pl-s"],[22,23,"pl-pds"],[32,33,"pl-pds"]],[[0,5,"pl-k"],[6,13,"pl-c1"],[14,15,"pl-k"],[30,32,"pl-k"]],[[2,25,"pl-c"],[2,4,"pl-c"]],[[2,8,"pl-k"]],[[4,5,"pl-k"],[8,9,"pl-k"]],[],[[4,5,"pl-k"],[5,6,"pl-k"],[9,10,"pl-k"]],[],[],[[0,3,"pl-s"]],[],[[6,7,"pl-s"],[7,10,"pl-c1"],[10,11,"pl-s"],[17,18,"pl-s"],[18,25,"pl-c1"],[25,26,"pl-s"]],[],[[0,7,"pl-mh"],[4,7,"pl-en"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,5,"pl-k"],[6,11,"pl-c1"],[12,13,"pl-k"],[14,20,"pl-smi"],[21,26,"pl-c1"],[26,27,"pl-s"],[26,27,"pl-pds"]],[[0,11,"pl-s"],[9,11,"pl-s1"],[9,11,"pl-pse"]],[[0,13,"pl-s"],[0,13,"pl-s1"],[4,9,"pl-smi"],[10,12,"pl-k"]],[[0,41,"pl-s"],[0,41,"pl-s1"],[6,11,"pl-smi"],[12,22,"pl-smi"],[23,25,"pl-k"],[26,41,"pl-s"],[26,27,"pl-pds"],[40,41,"pl-pds"]],[[0,4,"pl-s"],[0,3,"pl-s1"],[2,3,"pl-pse"]],[[0,25,"pl-s"]],[[0,1,"pl-s"],[0,1,"pl-pds"]],[[0,5,"pl-k"],[6,10,"pl-c1"],[11,12,"pl-k"],[16,18,"pl-k"]],[[2,3,"pl-k"],[6,7,"pl-k"]],[[4,5,"pl-k"]],[[18,19,"pl-k"],[19,32,"pl-s"],[19,20,"pl-pds"],[31,32,"pl-pds"]],[[10,11,"pl-k"],[11,17,"pl-s"],[11,12,"pl-pds"],[16,17,"pl-pds"]],[[4,5,"pl-k"],[5,6,"pl-k"]],[[4,5,"pl-k"]],[[18,19,"pl-k"],[19,28,"pl-s"],[19,20,"pl-pds"],[27,28,"pl-pds"]],[[10,11,"pl-k"],[11,17,"pl-s"],[11,12,"pl-pds"],[16,17,"pl-pds"]],[[16,17,"pl-k"],[17,32,"pl-s"],[17,18,"pl-pds"],[31,32,"pl-pds"]],[[4,5,"pl-k"],[5,6,"pl-k"]],[[2,3,"pl-k"],[3,4,"pl-k"],[7,8,"pl-k"]],[],[[0,3,"pl-s"]],[],[[0,8,"pl-mh"],[4,8,"pl-en"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,5,"pl-k"],[6,14,"pl-c1"],[15,16,"pl-k"],[17,23,"pl-smi"],[24,27,"pl-en"],[28,33,"pl-smi"],[34,36,"pl-k"]],[[12,13,"pl-k"],[14,19,"pl-smi"],[20,30,"pl-c1"]],[[8,9,"pl-k"],[10,16,"pl-s"],[10,11,"pl-pds"],[15,16,"pl-pds"]],[[7,8,"pl-k"],[9,15,"pl-s"],[9,10,"pl-pds"],[14,15,"pl-pds"]],[[10,11,"pl-k"],[12,18,"pl-s"],[12,13,"pl-pds"],[17,18,"pl-pds"]],[],[[0,3,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,5,"pl-k"],[6,13,"pl-c1"],[14,15,"pl-k"],[19,21,"pl-k"]],[[2,8,"pl-k"]],[[4,5,"pl-k"],[8,9,"pl-k"]],[[6,7,"pl-k"]],[[18,19,"pl-k"],[19,25,"pl-s"],[19,20,"pl-pds"],[24,25,"pl-pds"]],[[6,7,"pl-k"],[7,8,"pl-k"]],[[4,5,"pl-k"],[5,6,"pl-k"],[9,10,"pl-k"]],[],[],[[0,3,"pl-s"]],[],[],[],[[0,24,"pl-mh"],[4,24,"pl-en"]],[[0,35,"pl-c"],[0,4,"pl-c"],[32,35,"pl-c"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,6,"pl-k"],[7,12,"pl-smi"],[16,24,"pl-smi"],[27,31,"pl-k"],[32,39,"pl-s"],[32,33,"pl-pds"],[38,39,"pl-pds"]],[[0,6,"pl-k"],[7,13,"pl-smi"],[14,18,"pl-k"],[19,33,"pl-s"],[19,20,"pl-pds"],[32,33,"pl-pds"]],[],[[0,8,"pl-k"],[9,23,"pl-en"]],[[2,7,"pl-k"],[9,14,"pl-c1"],[16,24,"pl-c1"],[26,27,"pl-k"],[28,36,"pl-en"],[37,38,"pl-c1"]],[[2,8,"pl-k"]],[[4,5,"pl-k"],[18,19,"pl-k"],[20,26,"pl-smi"],[27,34,"pl-smi"],[35,36,"pl-k"]],[[6,7,"pl-k"],[18,19,"pl-k"],[20,26,"pl-smi"],[27,36,"pl-smi"],[37,38,"pl-k"]],[],[[6,7,"pl-k"],[7,8,"pl-k"],[9,10,"pl-k"]],[[6,7,"pl-k"]],[[17,18,"pl-k"],[19,25,"pl-smi"],[26,32,"pl-smi"]],[[15,16,"pl-k"],[20,22,"pl-k"],[23,31,"pl-en"],[38,39,"pl-k"],[39,40,"pl-c1"]],[[6,7,"pl-k"]],[[8,9,"pl-k"]],[[6,7,"pl-k"],[7,8,"pl-k"],[14,15,"pl-k"]],[[6,7,"pl-k"]],[[17,18,"pl-k"],[19,25,"pl-smi"],[26,32,"pl-smi"]],[[15,16,"pl-k"],[20,22,"pl-k"],[23,31,"pl-en"],[38,39,"pl-k"],[39,40,"pl-c1"]],[[6,7,"pl-k"]],[[8,9,"pl-k"]],[[6,7,"pl-k"],[7,8,"pl-k"],[14,15,"pl-k"]],[[4,5,"pl-k"],[5,6,"pl-k"],[9,10,"pl-k"]],[],[],[[0,3,"pl-s"]],[],[[0,34,"pl-mh"],[5,34,"pl-en"],[14,16,"pl-s"],[22,24,"pl-s"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,6,"pl-k"],[7,13,"pl-smi"],[14,18,"pl-k"],[19,38,"pl-s"],[19,20,"pl-pds"],[37,38,"pl-pds"]],[],[[0,5,"pl-k"],[6,19,"pl-c1"],[20,21,"pl-k"],[22,28,"pl-smi"],[29,32,"pl-smi"],[32,33,"pl-s"],[32,33,"pl-pds"]],[[0,11,"pl-s"]],[[0,1,"pl-s"],[0,1,"pl-pds"]],[[0,5,"pl-k"],[6,15,"pl-c1"],[16,17,"pl-k"],[18,24,"pl-smi"],[25,26,"pl-smi"],[26,27,"pl-s"],[26,27,"pl-pds"]],[[0,11,"pl-s"]],[[0,1,"pl-s"],[0,1,"pl-pds"]],[[0,5,"pl-k"],[6,12,"pl-c1"],[13,14,"pl-k"],[15,21,"pl-smi"],[22,28,"pl-smi"],[28,29,"pl-s"],[28,29,"pl-pds"]],[[0,11,"pl-s"]],[[0,1,"pl-s"],[0,1,"pl-pds"]],[[0,8,"pl-k"],[9,23,"pl-en"]],[[2,7,"pl-k"],[9,14,"pl-c1"],[16,24,"pl-c1"],[26,27,"pl-k"],[28,36,"pl-en"],[37,38,"pl-c1"]],[[2,7,"pl-k"],[8,17,"pl-c1"],[18,19,"pl-k"],[23,25,"pl-k"]],[[4,12,"pl-en"],[19,20,"pl-k"],[20,21,"pl-c1"]],[],[[2,7,"pl-k"],[8,17,"pl-c1"],[18,19,"pl-k"],[23,25,"pl-k"]],[[4,12,"pl-en"],[19,20,"pl-k"],[20,21,"pl-c1"]],[],[[2,8,"pl-k"]],[[4,5,"pl-k"],[18,19,"pl-k"]],[[6,7,"pl-k"],[16,17,"pl-k"],[24,25,"pl-k"],[25,26,"pl-k"],[35,36,"pl-k"]],[[6,7,"pl-k"],[21,22,"pl-k"],[33,34,"pl-k"]],[[8,9,"pl-k"]],[[6,7,"pl-k"],[7,8,"pl-k"],[14,15,"pl-k"]],[[6,7,"pl-k"],[21,22,"pl-k"],[33,34,"pl-k"]],[[8,9,"pl-k"]],[[6,7,"pl-k"],[7,8,"pl-k"],[14,15,"pl-k"]],[[4,5,"pl-k"],[5,6,"pl-k"],[19,20,"pl-k"]],[],[],[[0,3,"pl-s"]],[],[[0,15,"pl-mh"],[4,15,"pl-en"]],[[0,35,"pl-c"],[0,4,"pl-c"],[32,35,"pl-c"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,5,"pl-k"],[6,11,"pl-c1"],[12,13,"pl-k"],[14,20,"pl-smi"],[21,24,"pl-smi"],[25,30,"pl-en"],[32,43,"pl-c"],[32,34,"pl-c"],[41,43,"pl-c"],[45,47,"pl-k"],[59,60,"pl-k"],[61,62,"pl-c1"],[66,67,"pl-s"],[66,67,"pl-pds"]],[[0,14,"pl-s"]],[[0,42,"pl-s"]],[[0,15,"pl-s"]],[[0,3,"pl-s"]],[[0,64,"pl-s"]],[[0,23,"pl-s"]],[[0,3,"pl-s"]],[[0,50,"pl-s"]],[[0,21,"pl-s"]],[[0,3,"pl-s"]],[[0,66,"pl-s"]],[[0,23,"pl-s"]],[[0,3,"pl-s"]],[[0,69,"pl-s"]],[[0,22,"pl-s"]],[[0,3,"pl-s"]],[[0,1,"pl-s"],[0,1,"pl-pds"]],[],[[0,6,"pl-en"]],[[2,3,"pl-k"],[3,8,"pl-smi"],[9,17,"pl-smi"],[17,18,"pl-k"]],[[4,5,"pl-k"],[10,11,"pl-k"],[22,23,"pl-k"],[23,24,"pl-k"],[24,25,"pl-k"],[30,31,"pl-k"]],[[4,5,"pl-k"],[10,11,"pl-k"],[16,17,"pl-k"],[17,18,"pl-k"],[23,24,"pl-k"]],[[4,5,"pl-k"],[20,21,"pl-k"],[21,32,"pl-s"],[21,22,"pl-pds"],[31,32,"pl-pds"],[32,33,"pl-k"]],[[10,13,"pl-k"]],[[4,5,"pl-k"],[5,6,"pl-k"],[11,12,"pl-k"]],[[4,5,"pl-k"],[8,9,"pl-k"],[19,20,"pl-k"],[20,21,"pl-k"],[24,25,"pl-k"]],[[4,5,"pl-k"],[10,11,"pl-k"],[17,18,"pl-k"],[18,19,"pl-k"],[24,25,"pl-k"]],[[4,5,"pl-k"],[18,19,"pl-k"],[19,35,"pl-s"],[19,20,"pl-pds"],[34,35,"pl-pds"],[35,36,"pl-k"]],[[6,7,"pl-k"],[12,13,"pl-k"],[15,16,"pl-k"],[16,17,"pl-k"],[22,23,"pl-k"]],[[4,5,"pl-k"],[5,6,"pl-k"],[9,10,"pl-k"]],[[2,3,"pl-k"],[3,4,"pl-k"],[4,9,"pl-smi"],[10,18,"pl-smi"],[18,19,"pl-k"]],[],[[0,3,"pl-s"]],[],[[0,18,"pl-mh"],[4,18,"pl-en"]],[[0,35,"pl-c"],[0,4,"pl-c"],[32,35,"pl-c"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,6,"pl-k"],[9,12,"pl-smi"],[15,19,"pl-k"],[20,39,"pl-s"],[20,21,"pl-pds"],[38,39,"pl-pds"]],[[0,6,"pl-k"],[7,13,"pl-smi"],[14,18,"pl-k"],[19,38,"pl-s"],[19,20,"pl-pds"],[37,38,"pl-pds"]],[],[[0,5,"pl-k"],[6,11,"pl-c1"],[12,13,"pl-k"],[14,20,"pl-smi"],[21,26,"pl-c1"],[27,32,"pl-en"]],[[6,7,"pl-k"],[8,18,"pl-s"],[8,9,"pl-pds"],[17,18,"pl-pds"]],[[2,4,"pl-s"],[2,3,"pl-pds"],[3,4,"pl-pds"]],[[0,5,"pl-k"],[6,15,"pl-c1"],[16,17,"pl-k"],[18,24,"pl-smi"],[25,29,"pl-smi"],[29,30,"pl-s"],[29,30,"pl-pds"]],[[0,16,"pl-s"],[2,16,"pl-s1"],[2,4,"pl-pse"],[5,10,"pl-smi"],[12,14,"pl-k"]],[[0,26,"pl-s"],[0,26,"pl-s1"],[4,10,"pl-k"],[12,17,"pl-smi"],[18,23,"pl-smi"]],[[0,18,"pl-s"],[0,18,"pl-s1"],[6,10,"pl-k"],[11,17,"pl-s"],[11,12,"pl-pds"],[16,17,"pl-pds"]],[[0,19,"pl-s"],[0,19,"pl-s1"],[8,14,"pl-k"],[18,19,"pl-s"],[18,19,"pl-pds"]],[[0,23,"pl-s"],[0,23,"pl-s1"],[0,23,"pl-s"]],[[0,33,"pl-s"],[0,33,"pl-s1"],[0,33,"pl-s"],[10,18,"pl-s1"],[10,12,"pl-pse"],[17,18,"pl-pse"]],[[0,24,"pl-s"],[0,24,"pl-s1"],[0,24,"pl-s"]],[[0,11,"pl-s"],[0,11,"pl-s1"],[0,11,"pl-s"]],[[0,10,"pl-s"],[0,10,"pl-s1"],[0,9,"pl-s"],[8,9,"pl-pds"]],[[0,14,"pl-s"],[0,14,"pl-s1"],[6,13,"pl-k"]],[[0,19,"pl-s"],[0,19,"pl-s1"],[8,14,"pl-k"],[18,19,"pl-s"],[18,19,"pl-pds"]],[[0,23,"pl-s"],[0,23,"pl-s1"],[0,23,"pl-s"]],[[0,33,"pl-s"],[0,33,"pl-s1"],[0,33,"pl-s"],[10,18,"pl-s1"],[10,12,"pl-pse"],[17,18,"pl-pse"]],[[0,23,"pl-s"],[0,23,"pl-s1"],[0,23,"pl-s"]],[[0,11,"pl-s"],[0,11,"pl-s1"],[0,11,"pl-s"]],[[0,10,"pl-s"],[0,10,"pl-s1"],[0,9,"pl-s"],[8,9,"pl-pds"]],[[0,5,"pl-s"],[0,5,"pl-s1"]],[[0,4,"pl-s"],[0,4,"pl-s1"],[3,4,"pl-pse"]],[[0,1,"pl-s"],[0,1,"pl-pds"]],[],[[0,8,"pl-k"],[9,16,"pl-en"]],[[2,8,"pl-k"]],[[4,5,"pl-k"],[5,10,"pl-smi"],[11,19,"pl-smi"],[19,20,"pl-k"]],[[6,7,"pl-k"],[12,13,"pl-k"]],[[8,9,"pl-k"],[30,31,"pl-k"],[31,32,"pl-k"]],[[8,9,"pl-k"],[18,19,"pl-k"],[22,23,"pl-k"],[23,24,"pl-k"],[33,34,"pl-k"]],[[6,7,"pl-k"],[7,8,"pl-k"],[13,14,"pl-k"]],[[6,7,"pl-k"],[12,13,"pl-k"]],[[8,9,"pl-k"],[15,16,"pl-k"],[16,17,"pl-k"]],[[8,9,"pl-k"],[24,25,"pl-k"],[25,31,"pl-s"],[25,26,"pl-pds"],[30,31,"pl-pds"],[31,32,"pl-k"]],[],[[8,9,"pl-k"],[9,10,"pl-k"],[19,20,"pl-k"]],[[6,7,"pl-k"],[7,8,"pl-k"],[13,14,"pl-k"]],[[4,5,"pl-k"],[5,6,"pl-k"],[6,11,"pl-smi"],[12,20,"pl-smi"],[20,21,"pl-k"]],[],[],[[0,3,"pl-s"]],[],[[0,26,"pl-mh"],[4,26,"pl-en"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,6,"pl-k"]],[[2,8,"pl-smi"]],[[2,19,"pl-smi"]],[[2,6,"pl-k"],[7,26,"pl-s"],[7,8,"pl-pds"],[25,26,"pl-pds"]],[],[[0,5,"pl-k"],[6,11,"pl-c1"],[12,13,"pl-k"],[14,20,"pl-smi"],[21,24,"pl-smi"],[24,25,"pl-s"],[24,25,"pl-pds"]],[[0,7,"pl-s"]],[[0,17,"pl-s"]],[[0,4,"pl-s"]],[[0,1,"pl-s"],[0,1,"pl-pds"]],[[0,5,"pl-k"],[6,17,"pl-c1"],[18,19,"pl-k"],[37,38,"pl-s"],[37,38,"pl-pds"]],[[0,15,"pl-s"],[5,13,"pl-s1"],[5,7,"pl-pse"],[12,13,"pl-pse"]],[[0,15,"pl-s"]],[[0,3,"pl-s"]],[[0,1,"pl-s"],[0,1,"pl-pds"]],[],[[0,5,"pl-k"],[6,13,"pl-c1"],[14,15,"pl-k"],[19,21,"pl-k"]],[[2,3,"pl-k"],[3,8,"pl-smi"],[9,17,"pl-smi"],[17,18,"pl-k"]],[[4,5,"pl-k"],[17,18,"pl-k"],[18,19,"pl-k"]],[[4,5,"pl-k"],[10,11,"pl-k"]],[],[[4,5,"pl-k"],[5,6,"pl-k"],[11,12,"pl-k"]],[[2,3,"pl-k"],[3,4,"pl-k"],[4,9,"pl-smi"],[10,18,"pl-smi"],[18,19,"pl-k"]],[],[[0,3,"pl-s"]],[],[[0,16,"pl-mh"],[4,16,"pl-en"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,5,"pl-k"],[6,11,"pl-c1"],[12,13,"pl-k"],[14,20,"pl-smi"],[21,24,"pl-smi"],[24,25,"pl-s"],[24,25,"pl-pds"]],[[0,14,"pl-s"]],[[0,35,"pl-s"]],[[0,14,"pl-s"]],[[0,22,"pl-s"]],[[0,3,"pl-s"]],[[0,1,"pl-s"],[0,1,"pl-pds"]],[],[[0,8,"pl-k"],[9,16,"pl-en"]],[[2,8,"pl-k"]],[[4,5,"pl-k"],[10,11,"pl-k"]],[[6,7,"pl-k"]],[[15,16,"pl-k"],[16,28,"pl-s"],[16,17,"pl-pds"],[27,28,"pl-pds"]],[[17,18,"pl-k"],[18,29,"pl-s"],[18,19,"pl-pds"],[28,29,"pl-pds"]],[[6,7,"pl-k"]],[],[[6,7,"pl-k"],[7,8,"pl-k"],[13,14,"pl-k"]],[[6,7,"pl-k"],[16,17,"pl-k"],[17,29,"pl-s"],[17,18,"pl-pds"],[28,29,"pl-pds"],[29,30,"pl-k"]],[],[[6,7,"pl-k"],[7,8,"pl-k"],[14,15,"pl-k"]],[[4,5,"pl-k"],[5,6,"pl-k"],[11,12,"pl-k"]],[],[],[[0,3,"pl-s"]],[],[[0,10,"pl-mh"],[4,10,"pl-en"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,5,"pl-k"],[6,12,"pl-c1"],[13,14,"pl-k"],[24,25,"pl-s"],[24,25,"pl-pds"]],[[0,17,"pl-s"]],[[0,17,"pl-s"]],[[0,1,"pl-s"],[0,1,"pl-pds"]],[],[[0,12,"pl-c"],[0,2,"pl-c"]],[[0,5,"pl-k"],[6,12,"pl-c1"],[13,14,"pl-k"],[15,16,"pl-s"],[15,16,"pl-pds"]],[[0,42,"pl-s"],[13,22,"pl-s1"],[13,15,"pl-pse"],[21,22,"pl-pse"]],[[0,1,"pl-s"],[0,1,"pl-pds"]],[],[[0,12,"pl-c"],[0,2,"pl-c"]],[[0,5,"pl-k"],[6,12,"pl-c1"],[13,14,"pl-k"],[18,19,"pl-s"],[18,19,"pl-pds"]],[[0,42,"pl-s"],[13,22,"pl-s1"],[13,15,"pl-pse"],[21,22,"pl-pse"]],[[0,1,"pl-s"],[0,1,"pl-pds"]],[[0,3,"pl-s"]],[],[[0,16,"pl-mh"],[4,16,"pl-en"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,5,"pl-k"],[6,15,"pl-en"],[16,23,"pl-k"],[24,29,"pl-e"],[30,39,"pl-smi"]],[[2,8,"pl-en"]],[[4,10,"pl-k"]],[[6,7,"pl-k"]],[[17,18,"pl-k"],[19,23,"pl-c1"],[24,29,"pl-smi"],[30,39,"pl-c1"]],[[6,7,"pl-k"],[7,8,"pl-k"]],[],[],[],[[0,5,"pl-k"],[6,13,"pl-c1"],[14,15,"pl-k"],[16,22,"pl-en"],[33,35,"pl-s"],[33,34,"pl-pds"],[34,35,"pl-pds"]],[[0,5,"pl-k"],[6,9,"pl-c1"],[10,11,"pl-k"],[12,18,"pl-smi"],[19,22,"pl-smi"],[22,23,"pl-s"],[22,23,"pl-pds"]],[[0,14,"pl-s"],[2,12,"pl-s1"],[2,4,"pl-pse"],[11,12,"pl-pse"]],[[0,25,"pl-s"]],[[0,3,"pl-s"]],[[0,1,"pl-s"],[0,1,"pl-pds"]],[[0,3,"pl-s"]],[],[[0,15,"pl-mh"],[4,15,"pl-en"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,5,"pl-k"],[6,11,"pl-c1"],[12,13,"pl-k"],[14,20,"pl-smi"],[21,26,"pl-c1"],[27,32,"pl-en"],[33,38,"pl-smi"],[38,40,"pl-k"]],[[2,15,"pl-c"],[2,4,"pl-c"]],[[6,7,"pl-k"],[8,14,"pl-s"],[8,9,"pl-pds"],[13,14,"pl-pds"]],[[2,16,"pl-c"],[2,4,"pl-c"]],[[6,7,"pl-k"],[8,13,"pl-smi"],[14,18,"pl-c1"],[19,21,"pl-k"],[22,27,"pl-s"],[22,23,"pl-pds"],[26,27,"pl-pds"]],[[3,4,"pl-s"],[3,4,"pl-pds"]],[[0,23,"pl-s"]],[[0,17,"pl-s"]],[[0,34,"pl-s"]],[[0,21,"pl-s"]],[[0,0,"pl-s"]],[[0,25,"pl-s"]],[[0,33,"pl-s"],[10,32,"pl-s1"],[10,12,"pl-pse"],[12,17,"pl-smi"],[18,20,"pl-k"],[21,26,"pl-smi"],[27,31,"pl-c1"],[31,32,"pl-pse"]],[[0,34,"pl-s"],[11,33,"pl-s1"],[11,13,"pl-pse"],[13,18,"pl-smi"],[19,21,"pl-k"],[22,27,"pl-smi"],[28,32,"pl-c1"],[32,33,"pl-pse"]],[[0,1,"pl-s"],[0,1,"pl-pds"]],[[0,3,"pl-s"]],[],[[3,4,"pl-s"],[4,9,"pl-c1"],[9,10,"pl-s"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,8,"pl-k"],[9,16,"pl-en"]],[[2,8,"pl-k"]],[[4,5,"pl-k"],[8,9,"pl-k"]],[[6,7,"pl-k"],[24,25,"pl-k"],[25,32,"pl-s"],[25,26,"pl-pds"],[31,32,"pl-pds"],[33,34,"pl-k"],[34,35,"pl-k"]],[[6,7,"pl-k"],[10,11,"pl-k"],[11,12,"pl-k"]],[[6,7,"pl-k"]],[[19,20,"pl-k"],[20,29,"pl-s"],[20,21,"pl-pds"],[28,29,"pl-pds"]],[[12,13,"pl-k"],[13,18,"pl-s"],[13,14,"pl-pds"],[17,18,"pl-pds"]],[[6,7,"pl-k"],[7,8,"pl-k"]],[[4,5,"pl-k"],[5,6,"pl-k"],[9,10,"pl-k"]],[],[],[[0,3,"pl-s"]],[],[[0,13,"pl-mh"],[4,13,"pl-en"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,5,"pl-k"],[6,11,"pl-c1"],[12,13,"pl-k"],[14,20,"pl-smi"],[21,26,"pl-c1"],[27,32,"pl-en"],[33,38,"pl-smi"],[38,40,"pl-k"]],[[6,7,"pl-k"],[8,14,"pl-s"],[8,9,"pl-pds"],[13,14,"pl-pds"]],[[6,7,"pl-k"],[8,13,"pl-smi"],[14,18,"pl-c1"],[19,21,"pl-k"],[22,27,"pl-s"],[22,23,"pl-pds"],[26,27,"pl-pds"]],[[3,4,"pl-s"],[3,4,"pl-pds"]],[[0,34,"pl-s"]],[[0,33,"pl-s"],[10,32,"pl-s1"],[10,12,"pl-pse"],[12,17,"pl-smi"],[18,20,"pl-k"],[21,26,"pl-smi"],[27,31,"pl-c1"],[31,32,"pl-pse"]],[[0,34,"pl-s"],[11,33,"pl-s1"],[11,13,"pl-pse"],[13,18,"pl-smi"],[19,21,"pl-k"],[22,27,"pl-smi"],[28,32,"pl-c1"],[32,33,"pl-pse"]],[[0,1,"pl-s"],[0,1,"pl-pds"]],[[0,35,"pl-c"],[0,2,"pl-c"]],[[0,5,"pl-k"],[6,19,"pl-c1"],[20,21,"pl-k"],[22,28,"pl-en"],[36,41,"pl-en"]],[[6,7,"pl-k"],[8,18,"pl-s"],[8,9,"pl-pds"],[17,18,"pl-pds"]],[[2,3,"pl-s"],[2,3,"pl-pds"]],[[0,31,"pl-s"]],[[0,25,"pl-s"]],[[0,1,"pl-s"],[0,1,"pl-pds"]],[[0,3,"pl-s"]],[],[[3,4,"pl-s"],[4,9,"pl-c1"],[9,10,"pl-s"],[13,14,"pl-s"],[14,27,"pl-c1"],[27,28,"pl-s"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,6,"pl-en"]],[[2,3,"pl-k"],[6,7,"pl-k"]],[[4,5,"pl-k"]],[[17,18,"pl-k"],[18,27,"pl-s"],[18,19,"pl-pds"],[26,27,"pl-pds"]],[[10,11,"pl-k"],[11,16,"pl-s"],[11,12,"pl-pds"],[15,16,"pl-pds"]],[[4,5,"pl-k"],[5,6,"pl-k"]],[[4,5,"pl-k"],[8,9,"pl-k"],[9,10,"pl-k"]],[[5,35,"pl-c"],[5,7,"pl-c"],[33,35,"pl-c"]],[[4,5,"pl-k"]],[[17,18,"pl-k"],[18,27,"pl-s"],[18,19,"pl-pds"],[26,27,"pl-pds"]],[[10,11,"pl-k"],[11,16,"pl-s"],[11,12,"pl-pds"],[15,16,"pl-pds"]],[[4,5,"pl-k"],[5,6,"pl-k"]],[[2,3,"pl-k"],[3,4,"pl-k"],[7,8,"pl-k"]],[],[[0,3,"pl-s"]],[],[[0,6,"pl-mh"],[4,6,"pl-en"]],[],[],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,5,"pl-k"],[6,12,"pl-c1"],[13,14,"pl-k"],[24,25,"pl-s"],[24,25,"pl-pds"]],[[0,8,"pl-s"]],[[0,28,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,30,"pl-s"]],[[0,3,"pl-s"]],[[0,1,"pl-s"],[0,1,"pl-pds"]],[[0,3,"pl-s"]],[],[[7,8,"pl-s"],[8,14,"pl-c1"],[14,15,"pl-s"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,20,"pl-c"],[0,2,"pl-c"]],[[0,5,"pl-k"],[6,12,"pl-c1"],[13,14,"pl-k"],[15,21,"pl-smi"],[22,25,"pl-smi"],[25,26,"pl-s"],[25,26,"pl-pds"]],[[0,24,"pl-s"]],[[0,42,"pl-s"],[13,22,"pl-s1"],[13,15,"pl-pse"],[21,22,"pl-pse"]],[[0,21,"pl-s"]],[[0,20,"pl-s"]],[[0,1,"pl-s"],[0,1,"pl-pds"]],[[0,3,"pl-s"]],[],[[3,4,"pl-s"],[4,10,"pl-c1"],[10,11,"pl-s"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,8,"pl-k"],[9,16,"pl-en"]],[[2,8,"pl-k"]],[[4,5,"pl-k"],[11,12,"pl-k"],[12,13,"pl-k"],[22,23,"pl-k"],[26,27,"pl-k"],[27,28,"pl-k"],[34,35,"pl-k"]],[],[],[[0,3,"pl-s"]],[],[[0,21,"pl-mh"],[4,21,"pl-en"]],[[0,35,"pl-c"],[0,4,"pl-c"],[32,35,"pl-c"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,6,"pl-k"],[7,12,"pl-smi"],[13,17,"pl-k"],[18,25,"pl-s"],[18,19,"pl-pds"],[24,25,"pl-pds"]],[[0,6,"pl-k"],[7,13,"pl-smi"],[17,34,"pl-smi"],[37,41,"pl-k"],[42,61,"pl-s"],[42,43,"pl-pds"],[60,61,"pl-pds"]],[[0,6,"pl-k"],[7,27,"pl-smi"],[28,32,"pl-k"],[33,39,"pl-s"],[33,34,"pl-pds"],[38,39,"pl-pds"]],[],[[0,3,"pl-k"],[22,23,"pl-k"],[24,41,"pl-en"]],[[2,3,"pl-k"]],[[2,3,"pl-k"],[4,10,"pl-en"],[32,34,"pl-s"],[32,33,"pl-pds"],[33,34,"pl-pds"]],[],[[0,5,"pl-k"],[6,21,"pl-c1"],[22,23,"pl-k"],[24,30,"pl-smi"],[31,34,"pl-smi"],[34,35,"pl-s"],[34,35,"pl-pds"]],[[0,24,"pl-s"]],[[0,0,"pl-s"]],[[0,24,"pl-s"],[2,22,"pl-s1"],[2,4,"pl-pse"],[21,22,"pl-pse"]],[[0,18,"pl-s"]],[[0,3,"pl-s"]],[[0,1,"pl-s"],[0,1,"pl-pds"]],[[0,3,"pl-s"]],[],[[0,17,"pl-mh"],[4,17,"pl-en"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,6,"pl-k"]],[[2,15,"pl-smi"]],[[2,6,"pl-k"],[7,26,"pl-s"],[7,8,"pl-pds"],[25,26,"pl-pds"]],[],[[0,8,"pl-k"],[9,16,"pl-en"]],[[2,8,"pl-k"]],[[4,5,"pl-k"],[18,19,"pl-k"]],[[7,12,"pl-smi"],[13,15,"pl-k"]],[[8,9,"pl-k"],[12,13,"pl-k"],[19,24,"pl-smi"],[25,30,"pl-c1"],[31,32,"pl-k"],[32,33,"pl-k"],[36,37,"pl-k"]],[],[[4,5,"pl-k"],[5,6,"pl-k"],[19,20,"pl-k"]],[],[],[[0,3,"pl-s"]],[],[],[[0,4,"pl-ms"]],[],[[0,6,"pl-mh"],[4,6,"pl-en"]],[],[],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[],[[0,3,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[],[],[],[[0,3,"pl-s"]],[],[[22,23,"pl-s"],[38,39,"pl-s"],[39,40,"pl-s"],[40,55,"pl-corl"],[55,56,"pl-s"]],[],[[0,13,"pl-mh"],[4,13,"pl-en"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,6,"pl-k"],[7,13,"pl-smi"],[14,18,"pl-k"],[19,38,"pl-s"],[19,20,"pl-pds"],[37,38,"pl-pds"]],[],[[0,9,"pl-k"],[10,20,"pl-en"]],[[2,10,"pl-k"],[19,20,"pl-k"],[21,28,"pl-c1"]],[],[],[[0,5,"pl-k"],[0,5,"pl-k"],[12,13,"pl-k"],[14,20,"pl-smi"],[21,23,"pl-en"],[24,34,"pl-en"],[35,36,"pl-s"],[36,36,"pl-s"]],[[0,23,"pl-s"],[12,17,"pl-v"],[19,21,"pl-k"]],[[0,19,"pl-s"],[4,9,"pl-smi"],[10,18,"pl-smi"]],[[0,32,"pl-s"],[6,7,"pl-k"],[8,13,"pl-smi"],[14,19,"pl-smi"],[20,26,"pl-smi"],[27,31,"pl-smi"]],[[0,36,"pl-s"],[6,7,"pl-k"],[8,13,"pl-smi"],[14,19,"pl-smi"],[20,26,"pl-smi"],[27,36,"pl-smi"]],[[0,5,"pl-s"]],[[0,0,"pl-s"],[0,1,"pl-s"]],[[0,3,"pl-s"]],[],[[0,18,"pl-mh"],[4,18,"pl-en"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,6,"pl-k"],[7,13,"pl-smi"],[14,18,"pl-k"],[19,38,"pl-s"],[19,20,"pl-pds"],[37,38,"pl-pds"]],[[0,6,"pl-k"],[7,13,"pl-smi"],[14,18,"pl-k"],[19,29,"pl-s"],[19,20,"pl-pds"],[28,29,"pl-pds"]],[],[[0,5,"pl-k"],[0,5,"pl-k"],[13,14,"pl-k"],[15,21,"pl-smi"],[22,28,"pl-en"],[28,29,"pl-s"],[29,29,"pl-s"]],[[0,18,"pl-s"]],[[0,0,"pl-s"],[0,1,"pl-s"]],[],[[0,5,"pl-k"],[0,5,"pl-k"],[16,17,"pl-k"],[18,24,"pl-en"],[25,31,"pl-smi"],[32,33,"pl-k"]],[[15,21,"pl-smi"]],[[1,2,"pl-k"],[2,3,"pl-s"],[3,3,"pl-s"]],[[0,41,"pl-s"],[12,17,"pl-v"],[19,21,"pl-k"],[22,27,"pl-smi"],[28,39,"pl-smi"]],[[0,0,"pl-s"],[0,1,"pl-s"]],[[0,3,"pl-s"]],[],[[0,15,"pl-mh"],[4,15,"pl-en"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,6,"pl-k"],[7,13,"pl-smi"],[14,18,"pl-k"],[19,38,"pl-s"],[19,20,"pl-pds"],[37,38,"pl-pds"]],[[0,6,"pl-k"],[7,13,"pl-smi"],[14,18,"pl-k"],[19,29,"pl-s"],[19,20,"pl-pds"],[28,29,"pl-pds"]],[],[[0,9,"pl-k"],[10,18,"pl-en"]],[[14,15,"pl-k"],[16,22,"pl-c1"]],[],[],[[0,5,"pl-k"],[0,5,"pl-k"],[15,16,"pl-k"],[17,23,"pl-en"],[24,30,"pl-smi"],[32,40,"pl-en"],[41,42,"pl-s"],[42,42,"pl-s"]],[[0,11,"pl-s"]],[[0,31,"pl-s"],[4,9,"pl-v"],[10,12,"pl-k"],[13,18,"pl-smi"],[19,31,"pl-smi"]],[[0,4,"pl-s"]],[[0,0,"pl-s"],[0,1,"pl-s"]],[[0,3,"pl-s"]],[],[[3,4,"pl-s"],[4,15,"pl-c1"],[15,16,"pl-s"],[23,24,"pl-s"],[24,30,"pl-c1"],[30,31,"pl-s"],[44,45,"pl-s"],[45,46,"pl-c1"],[46,47,"pl-s"]],[],[[0,12,"pl-mh"],[4,12,"pl-en"]],[[0,35,"pl-c"],[0,4,"pl-c"],[32,35,"pl-c"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,6,"pl-k"],[9,11,"pl-smi"],[13,25,"pl-smi"],[27,44,"pl-smi"],[46,63,"pl-smi"],[66,70,"pl-k"],[71,78,"pl-s"],[71,72,"pl-pds"],[77,78,"pl-pds"]],[[0,6,"pl-k"],[7,13,"pl-smi"],[14,18,"pl-k"],[19,38,"pl-s"],[19,20,"pl-pds"],[37,38,"pl-pds"]],[],[[0,5,"pl-k"],[0,5,"pl-k"],[10,11,"pl-k"],[12,18,"pl-smi"],[19,22,"pl-en"],[22,23,"pl-s"],[23,23,"pl-s"]],[[0,15,"pl-s"]],[[0,14,"pl-s"]],[[0,0,"pl-s"],[0,1,"pl-s"]],[[0,6,"pl-k"],[7,16,"pl-k"],[17,27,"pl-en"],[28,35,"pl-k"],[36,53,"pl-e"]],[[2,19,"pl-en"],[20,36,"pl-en"],[39,55,"pl-en"]],[],[[6,7,"pl-k"],[7,8,"pl-k"],[9,15,"pl-c1"]],[],[[0,6,"pl-k"],[0,6,"pl-k"],[7,12,"pl-k"],[7,12,"pl-k"],[18,19,"pl-k"],[20,22,"pl-en"],[23,35,"pl-en"],[36,46,"pl-en"],[49,50,"pl-k"],[52,57,"pl-v"],[59,61,"pl-k"]],[[3,6,"pl-ent"],[3,6,"pl-c1"],[7,10,"pl-e"],[10,11,"pl-k"],[11,13,"pl-s"],[11,12,"pl-pds"],[12,13,"pl-pds"],[14,17,"pl-e"],[17,18,"pl-k"],[18,20,"pl-s"],[18,19,"pl-pds"],[19,20,"pl-pds"],[21,22,"pl-pse"],[22,25,"pl-k"],[25,30,"pl-smi"],[30,31,"pl-pse"]],[],[[0,3,"pl-s"]],[],[],[[0,4,"pl-ms"]],[[0,31,"pl-c"],[0,4,"pl-c"],[28,31,"pl-c"]],[],[[0,8,"pl-mh"],[4,8,"pl-en"]],[[0,35,"pl-c"],[0,4,"pl-c"],[32,35,"pl-c"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,6,"pl-k"],[7,12,"pl-smi"],[13,17,"pl-k"],[18,25,"pl-s"],[18,19,"pl-pds"],[24,25,"pl-pds"]],[[0,6,"pl-k"],[7,13,"pl-smi"],[14,18,"pl-k"],[19,45,"pl-s"],[19,20,"pl-pds"],[44,45,"pl-pds"]],[],[[0,5,"pl-k"],[6,16,"pl-c1"],[17,18,"pl-k"],[19,25,"pl-smi"],[26,30,"pl-smi"],[30,31,"pl-s"],[30,31,"pl-pds"]],[[0,31,"pl-s"]],[[0,1,"pl-s"],[0,1,"pl-pds"]],[[0,5,"pl-k"],[6,16,"pl-c1"],[17,18,"pl-k"],[19,25,"pl-smi"],[26,30,"pl-smi"],[30,31,"pl-s"],[30,31,"pl-pds"]],[[0,23,"pl-s"]],[[0,1,"pl-s"],[0,1,"pl-pds"]],[],[[0,5,"pl-k"],[6,28,"pl-en"],[29,36,"pl-k"],[37,42,"pl-e"],[43,52,"pl-smi"]],[[2,8,"pl-en"]],[[4,10,"pl-k"]],[[6,7,"pl-k"],[17,18,"pl-k"]],[[8,9,"pl-k"],[19,20,"pl-k"],[31,32,"pl-k"],[32,33,"pl-k"],[33,34,"pl-k"],[44,45,"pl-k"]],[[6,7,"pl-k"],[7,8,"pl-k"],[18,19,"pl-k"]],[],[],[],[[0,3,"pl-s"]],[],[[0,23,"pl-mh"],[4,23,"pl-en"]],[[0,35,"pl-c"],[0,4,"pl-c"],[32,35,"pl-c"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,6,"pl-k"],[7,13,"pl-smi"],[14,18,"pl-k"],[19,45,"pl-s"],[19,20,"pl-pds"],[44,45,"pl-pds"]],[],[[0,5,"pl-k"],[6,16,"pl-c1"],[17,18,"pl-k"],[19,25,"pl-smi"],[26,30,"pl-smi"],[30,31,"pl-s"],[30,31,"pl-pds"]],[[0,27,"pl-s"]],[[0,31,"pl-s"]],[[0,27,"pl-s"]],[[0,22,"pl-s"]],[[0,1,"pl-s"],[0,1,"pl-pds"]],[],[[0,8,"pl-k"],[9,16,"pl-en"]],[[2,8,"pl-k"]],[[4,5,"pl-k"],[16,17,"pl-k"],[17,18,"pl-k"]],[],[],[[0,3,"pl-s"]],[],[[24,25,"pl-s"],[25,34,"pl-c1"],[34,35,"pl-s"],[38,39,"pl-s"],[39,56,"pl-c1"],[56,57,"pl-s"]],[],[],[[0,4,"pl-ms"]],[[0,31,"pl-c"],[0,4,"pl-c"],[28,31,"pl-c"]],[],[[0,7,"pl-mh"],[4,7,"pl-en"]],[[0,35,"pl-c"],[0,4,"pl-c"],[32,35,"pl-c"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,6,"pl-k"],[7,13,"pl-smi"],[17,30,"pl-smi"],[33,37,"pl-k"],[38,57,"pl-s"],[38,39,"pl-pds"],[56,57,"pl-pds"]],[],[[0,28,"pl-c"],[0,2,"pl-c"]],[[0,5,"pl-k"],[6,12,"pl-c1"],[13,14,"pl-k"],[15,21,"pl-smi"],[22,28,"pl-smi"],[28,29,"pl-s"],[28,29,"pl-pds"]],[[0,17,"pl-s"]],[[0,14,"pl-s"]],[[0,22,"pl-s"]],[[0,21,"pl-s"]],[[0,0,"pl-s"]],[[0,30,"pl-s"]],[[0,38,"pl-s"],[9,37,"pl-s1"],[9,11,"pl-pse"],[11,16,"pl-smi"],[17,19,"pl-k"],[20,25,"pl-smi"],[26,31,"pl-smi"],[32,36,"pl-smi"],[36,37,"pl-pse"]],[[0,49,"pl-s"],[20,48,"pl-s1"],[20,22,"pl-pse"],[22,27,"pl-smi"],[28,30,"pl-k"],[31,36,"pl-smi"],[37,42,"pl-smi"],[43,47,"pl-smi"],[47,48,"pl-pse"]],[[0,1,"pl-s"],[0,1,"pl-pds"]],[],[[0,37,"pl-c"],[0,2,"pl-c"]],[[0,6,"pl-smi"],[7,19,"pl-smi"],[20,21,"pl-k"]],[[7,8,"pl-k"]],[[8,9,"pl-k"],[10,25,"pl-s"],[10,11,"pl-pds"],[24,25,"pl-pds"]],[],[],[],[[0,21,"pl-c"],[0,2,"pl-c"]],[[0,5,"pl-k"],[6,11,"pl-c1"],[12,13,"pl-k"]],[[6,7,"pl-k"],[8,24,"pl-s"],[8,9,"pl-pds"],[23,24,"pl-pds"]],[],[],[[0,6,"pl-en"]],[[2,3,"pl-k"],[6,7,"pl-k"]],[[4,5,"pl-k"],[11,12,"pl-k"],[18,19,"pl-k"],[19,20,"pl-k"],[26,27,"pl-k"]],[],[[4,5,"pl-k"],[24,25,"pl-k"],[32,33,"pl-k"]],[[6,7,"pl-k"],[13,14,"pl-k"],[20,21,"pl-k"],[21,22,"pl-k"],[28,29,"pl-k"]],[[4,5,"pl-k"],[5,6,"pl-k"],[19,20,"pl-k"]],[[2,3,"pl-k"],[3,4,"pl-k"],[7,8,"pl-k"]],[],[[0,3,"pl-s"]],[],[[0,8,"pl-mh"],[4,8,"pl-en"]],[[0,35,"pl-c"],[0,4,"pl-c"],[32,35,"pl-c"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,6,"pl-k"],[7,13,"pl-smi"],[17,30,"pl-smi"],[33,37,"pl-k"],[38,57,"pl-s"],[38,39,"pl-pds"],[56,57,"pl-pds"]],[],[[0,28,"pl-c"],[0,2,"pl-c"]],[[0,5,"pl-k"],[6,12,"pl-c1"],[13,14,"pl-k"],[15,21,"pl-smi"],[22,28,"pl-smi"],[28,29,"pl-s"],[28,29,"pl-pds"]],[[0,36,"pl-s"],[9,35,"pl-s1"],[9,11,"pl-pse"],[11,16,"pl-smi"],[17,19,"pl-k"],[20,25,"pl-smi"],[26,31,"pl-smi"],[32,34,"pl-smi"],[34,35,"pl-pse"]],[[0,47,"pl-s"],[20,46,"pl-s1"],[20,22,"pl-pse"],[22,27,"pl-smi"],[28,30,"pl-k"],[31,36,"pl-smi"],[37,42,"pl-smi"],[43,45,"pl-smi"],[45,46,"pl-pse"]],[[0,41,"pl-s"],[14,40,"pl-s1"],[14,16,"pl-pse"],[16,21,"pl-smi"],[22,24,"pl-k"],[25,30,"pl-smi"],[31,36,"pl-smi"],[37,39,"pl-smi"],[39,40,"pl-pse"]],[[0,0,"pl-s"]],[[0,17,"pl-s"]],[[0,14,"pl-s"]],[[0,22,"pl-s"]],[[0,21,"pl-s"]],[[0,1,"pl-s"],[0,1,"pl-pds"]],[[0,21,"pl-c"],[0,2,"pl-c"]],[[0,5,"pl-k"],[6,11,"pl-c1"],[12,13,"pl-k"]],[[4,5,"pl-k"],[6,21,"pl-s"],[6,7,"pl-pds"],[20,21,"pl-pds"]],[[4,5,"pl-k"],[6,13,"pl-s"],[6,7,"pl-pds"],[12,13,"pl-pds"]],[],[],[[0,19,"pl-c"],[0,2,"pl-c"]],[[0,5,"pl-k"],[6,17,"pl-c1"],[18,19,"pl-k"],[33,35,"pl-k"]],[[4,5,"pl-k"]],[[4,5,"pl-k"]],[],[],[[0,6,"pl-en"]],[[2,3,"pl-k"],[22,23,"pl-k"],[30,31,"pl-k"]],[[4,5,"pl-k"],[8,9,"pl-k"]],[[6,7,"pl-k"],[13,14,"pl-k"],[18,19,"pl-k"],[19,20,"pl-k"],[26,27,"pl-k"]],[[6,7,"pl-k"],[26,27,"pl-k"],[40,41,"pl-k"]],[[8,9,"pl-k"],[15,16,"pl-k"],[20,21,"pl-k"],[21,22,"pl-k"],[28,29,"pl-k"]],[[6,7,"pl-k"],[7,8,"pl-k"],[21,22,"pl-k"]],[[4,5,"pl-k"],[5,6,"pl-k"],[9,10,"pl-k"]],[[2,3,"pl-k"],[3,4,"pl-k"],[17,18,"pl-k"]],[],[[0,3,"pl-s"]],[],[[0,21,"pl-mh"],[4,21,"pl-en"]],[[0,35,"pl-c"],[0,4,"pl-c"],[32,35,"pl-c"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,6,"pl-k"],[9,18,"pl-smi"],[21,25,"pl-k"],[26,45,"pl-s"],[26,27,"pl-pds"],[44,45,"pl-pds"]],[],[[0,5,"pl-k"],[6,17,"pl-en"],[18,25,"pl-k"],[26,31,"pl-e"],[32,41,"pl-smi"]],[[2,8,"pl-en"]],[[4,11,"pl-en"],[12,15,"pl-c1"],[16,33,"pl-s"],[16,17,"pl-pds"],[32,33,"pl-pds"],[35,39,"pl-c1"],[40,45,"pl-smi"],[46,51,"pl-smi"]],[[4,10,"pl-c"],[4,6,"pl-c"]],[],[],[],[[0,6,"pl-k"],[7,14,"pl-c1"],[15,24,"pl-smi"]],[[0,3,"pl-s"]],[],[[0,17,"pl-mh"],[4,17,"pl-en"]],[[0,35,"pl-c"],[0,4,"pl-c"],[32,35,"pl-c"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,6,"pl-k"],[9,19,"pl-smi"],[22,26,"pl-k"],[27,34,"pl-s"],[27,28,"pl-pds"],[33,34,"pl-pds"]],[[0,6,"pl-k"],[9,21,"pl-smi"],[24,28,"pl-k"],[29,48,"pl-s"],[29,30,"pl-pds"],[47,48,"pl-pds"]],[],[[0,5,"pl-k"],[6,17,"pl-c1"],[18,19,"pl-k"],[23,25,"pl-k"]],[[2,7,"pl-k"],[8,20,"pl-c1"],[21,22,"pl-k"],[23,33,"pl-en"]],[],[[2,9,"pl-en"],[10,13,"pl-c1"],[14,31,"pl-s"],[14,15,"pl-pds"],[30,31,"pl-pds"]],[[2,8,"pl-c"],[2,4,"pl-c"]],[],[[0,3,"pl-s"]],[],[[0,18,"pl-mh"],[4,18,"pl-en"]],[[0,35,"pl-c"],[0,4,"pl-c"],[32,35,"pl-c"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,6,"pl-k"],[8,16,"pl-smi"],[18,22,"pl-k"],[23,42,"pl-s"],[23,24,"pl-pds"],[41,42,"pl-pds"]],[],[[0,5,"pl-k"],[6,17,"pl-c1"],[18,19,"pl-k"],[23,25,"pl-k"]],[[2,7,"pl-k"],[8,13,"pl-c1"],[14,15,"pl-k"],[16,24,"pl-en"]],[],[[2,9,"pl-en"],[10,13,"pl-c1"],[14,31,"pl-s"],[14,15,"pl-pds"],[30,31,"pl-pds"]],[[2,8,"pl-c"],[2,4,"pl-c"]],[],[[0,3,"pl-s"]],[],[[0,12,"pl-mh"],[4,12,"pl-en"]],[[0,46,"pl-c"],[0,4,"pl-c"],[43,46,"pl-c"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,6,"pl-k"]],[[2,15,"pl-smi"]],[[2,8,"pl-smi"]],[[2,6,"pl-k"],[7,26,"pl-s"],[7,8,"pl-pds"],[25,26,"pl-pds"]],[],[[0,10,"pl-c"],[0,2,"pl-c"]],[[0,5,"pl-k"],[6,12,"pl-c1"],[13,14,"pl-k"],[15,21,"pl-smi"],[22,28,"pl-smi"],[28,29,"pl-s"],[28,29,"pl-pds"]],[[0,17,"pl-s"]],[[0,14,"pl-s"]],[[0,22,"pl-s"]],[[0,30,"pl-s"]],[[0,38,"pl-s"],[9,37,"pl-s1"],[9,11,"pl-pse"],[11,16,"pl-smi"],[17,19,"pl-k"],[20,25,"pl-smi"],[26,31,"pl-smi"],[32,36,"pl-smi"],[36,37,"pl-pse"]],[[0,49,"pl-s"],[20,48,"pl-s1"],[20,22,"pl-pse"],[22,27,"pl-smi"],[28,30,"pl-k"],[31,36,"pl-smi"],[37,42,"pl-smi"],[43,47,"pl-smi"],[47,48,"pl-pse"]],[[0,1,"pl-s"],[0,1,"pl-pds"]],[[0,10,"pl-c"],[0,2,"pl-c"]],[[0,5,"pl-k"],[6,11,"pl-c1"],[12,13,"pl-k"]],[[6,7,"pl-k"],[8,24,"pl-s"],[8,9,"pl-pds"],[23,24,"pl-pds"]],[],[[0,3,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,6,"pl-en"]],[[2,3,"pl-k"],[6,7,"pl-k"]],[[4,5,"pl-k"],[17,18,"pl-k"],[25,26,"pl-k"],[27,38,"pl-s"],[27,28,"pl-pds"],[37,38,"pl-pds"],[41,42,"pl-k"]],[],[[4,5,"pl-k"],[5,6,"pl-k"],[12,13,"pl-k"]],[[4,5,"pl-k"],[24,25,"pl-k"],[32,33,"pl-k"]],[[6,7,"pl-k"],[10,11,"pl-k"]],[[8,9,"pl-k"],[15,16,"pl-k"],[22,23,"pl-k"],[23,24,"pl-k"],[30,31,"pl-k"]],[[8,9,"pl-k"]],[[15,16,"pl-k"],[23,24,"pl-k"],[25,37,"pl-s"],[25,26,"pl-pds"],[36,37,"pl-pds"]],[[8,9,"pl-k"]],[],[[8,9,"pl-k"],[9,10,"pl-k"],[16,17,"pl-k"]],[[6,7,"pl-k"],[7,8,"pl-k"],[11,12,"pl-k"]],[[4,5,"pl-k"],[5,6,"pl-k"],[19,20,"pl-k"]],[[2,3,"pl-k"],[3,4,"pl-k"],[7,8,"pl-k"]],[],[[0,3,"pl-s"]],[],[[0,8,"pl-mh"],[4,8,"pl-en"]],[[0,46,"pl-c"],[0,4,"pl-c"],[43,46,"pl-c"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,6,"pl-k"]],[[2,15,"pl-smi"]],[[2,8,"pl-smi"]],[[2,6,"pl-k"],[7,26,"pl-s"],[7,8,"pl-pds"],[25,26,"pl-pds"]],[],[[0,5,"pl-k"],[6,11,"pl-c1"],[12,13,"pl-k"],[14,20,"pl-smi"],[21,26,"pl-c1"],[26,27,"pl-s"],[26,27,"pl-pds"]],[[0,15,"pl-s"]],[[0,21,"pl-s"]],[[0,1,"pl-s"],[0,1,"pl-pds"]],[],[[0,5,"pl-k"],[6,10,"pl-en"],[11,18,"pl-k"],[19,24,"pl-e"],[25,34,"pl-smi"]],[[2,13,"pl-en"],[14,19,"pl-smi"]],[[4,9,"pl-c1"]],[[4,8,"pl-c1"],[9,17,"pl-smi"],[18,19,"pl-k"],[20,25,"pl-smi"],[26,35,"pl-en"]],[],[],[[2,8,"pl-en"]],[[4,10,"pl-k"]],[[6,7,"pl-k"]],[[11,12,"pl-k"],[13,17,"pl-c1"],[18,26,"pl-smi"]],[[19,20,"pl-k"],[20,37,"pl-s"],[20,21,"pl-pds"],[36,37,"pl-pds"]],[[20,21,"pl-k"],[25,27,"pl-k"]],[[10,14,"pl-c1"],[15,23,"pl-smi"],[24,31,"pl-c1"],[32,37,"pl-c1"]],[],[[6,7,"pl-k"],[7,8,"pl-k"]],[],[],[],[[0,3,"pl-s"]],[],[[3,4,"pl-s"],[4,8,"pl-c1"],[8,9,"pl-s"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,8,"pl-k"],[9,16,"pl-en"]],[[2,8,"pl-k"]],[[4,5,"pl-k"],[10,11,"pl-k"],[11,12,"pl-k"]],[],[],[[0,3,"pl-s"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[[0,35,"pl-c"],[0,4,"pl-c"],[32,35,"pl-c"]],[],[[4,5,"pl-s"],[5,19,"pl-c1"],[19,20,"pl-s"],[25,26,"pl-s"],[26,37,"pl-c1"],[37,38,"pl-s"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,5,"pl-k"],[6,17,"pl-c1"],[18,19,"pl-k"],[20,26,"pl-smi"],[27,30,"pl-smi"],[30,31,"pl-s"],[30,31,"pl-pds"]],[[0,26,"pl-s"]],[[0,1,"pl-s"],[0,1,"pl-pds"]],[[0,3,"pl-s"]],[],[[5,6,"pl-s"],[6,22,"pl-c1"],[22,23,"pl-s"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,7,"pl-e"]],[[2,18,"pl-c1"],[2,18,"pl-c1"],[20,23,"pl-c1"]],[],[[0,3,"pl-s"]],[],[[3,4,"pl-s"],[4,15,"pl-c1"],[15,16,"pl-s"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,1,"pl-k"],[22,23,"pl-k"],[23,31,"pl-s"],[23,24,"pl-pds"],[30,31,"pl-pds"],[32,33,"pl-k"],[33,34,"pl-k"]],[[0,3,"pl-s"]],[],[[26,27,"pl-s"],[27,33,"pl-c1"],[33,34,"pl-s"]],[],[[0,9,"pl-mh"],[5,9,"pl-en"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,14,"pl-e"]],[[2,18,"pl-c1"],[2,18,"pl-c1"],[20,23,"pl-c1"]],[],[[0,3,"pl-s"]],[],[[0,17,"pl-mh"],[4,17,"pl-en"]],[[0,35,"pl-c"],[0,4,"pl-c"],[32,35,"pl-c"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,6,"pl-k"],[7,13,"pl-smi"],[17,30,"pl-smi"],[33,37,"pl-k"],[38,57,"pl-s"],[38,39,"pl-pds"],[56,57,"pl-pds"]],[],[[0,5,"pl-k"],[6,9,"pl-c1"],[10,11,"pl-k"],[12,18,"pl-smi"],[19,22,"pl-smi"],[22,23,"pl-s"],[22,23,"pl-pds"]],[[0,39,"pl-s"],[9,38,"pl-s1"],[9,11,"pl-pse"],[11,16,"pl-smi"],[17,19,"pl-k"],[20,25,"pl-smi"],[26,31,"pl-smi"],[32,37,"pl-c1"],[37,38,"pl-pse"]],[[0,1,"pl-s"],[0,1,"pl-pds"]],[],[[0,5,"pl-k"],[6,13,"pl-c1"],[14,15,"pl-k"],[19,21,"pl-k"]],[[2,3,"pl-k"],[22,23,"pl-k"],[31,32,"pl-k"],[33,49,"pl-s"],[33,34,"pl-pds"],[48,49,"pl-pds"],[52,53,"pl-k"]],[[4,5,"pl-k"],[8,9,"pl-k"],[9,10,"pl-c1"],[10,34,"pl-s"],[10,11,"pl-pds"]],[[0,18,"pl-s"]],[[0,2,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,21,"pl-s"]],[[0,35,"pl-s"]],[[0,0,"pl-s"]],[[0,6,"pl-s"]],[[0,21,"pl-s"],[20,21,"pl-pds"],[24,39,"pl-s"],[24,25,"pl-pds"]],[[0,50,"pl-s"]],[[0,9,"pl-s"],[8,9,"pl-pds"],[15,61,"pl-s"],[15,16,"pl-pds"]],[[0,23,"pl-s"],[22,23,"pl-pds"],[26,31,"pl-s"],[26,27,"pl-pds"]],[[0,13,"pl-s"]],[[0,9,"pl-s"]],[[0,31,"pl-s"]],[[0,3,"pl-s"]],[[0,2,"pl-s"]],[[0,0,"pl-s"]],[[0,23,"pl-s"]],[[0,32,"pl-s"]],[[0,12,"pl-s"]],[[0,9,"pl-s"]],[[0,2,"pl-s"]],[[0,3,"pl-s"]]],"colorizedLines":null}},"title":"reference/docs/styled-components.md at main · jaywcjlove/reference","appPayload":{},"meta":{"title":"reference/docs/styled-components.md at main · jaywcjlove/reference"}}

Latest commit

 

History

History
1115 lines (932 loc) · 20.2 KB

File metadata and controls

1115 lines (932 loc) · 20.2 KB

Styled Components 备忘清单

NPM version Downloads Repo Dependents Github repo

此快速参考备忘单提供了使用 CSS in JS 工具的各种方法

入门

安装

Styled Components 是增强 CSS 在 React 组件系统样式的 CSS in JS 的最佳实践。

安装依赖和 TypeScript 类型依赖

npm install --save styled-components

快速开始

import styled from 'styled-components';

创建一个 Title 组件

// 该组件将呈现具有样式的 <h1> 标签
const Title = styled.h1`
  font-size: 1.5em;
  text-align: center;
`;

创建一个 Wrapper 组件

// 该组件将呈现具有某些样式的 <section> 标记
const Wrapper = styled.section`
  padding: 4em;
  background: papayawhip;
`;

像使用其他 React 组件一样使用 Title/Wrapper - 除了它们的样式!

function Demo() {
  return (
    <Wrapper>
      <Title>
        Hello World!
      </Title>
    </Wrapper>
  );
}

根据 Props 适配

import styled from 'styled-components';

const Button = styled.button`
  /* 根据主要 props 调整颜色 */
  background: ${
    props => 
      props.primary ? "blue" : "white"
  };
  color: ${
    props => 
      props.primary ? "white" : "blue"
  };
  font-size: 1em;
  margin: 1em;
  padding: 0.25em 1em;
  border: 2px solid blue;
  border-radius: 3px;
`;

使用 primary props 控制按钮样式

function Demo() {
  return (
    <div>
      <Button>Normal</Button>
      <Button primary>Primary</Button>
    </div>
  );
}

扩展样式

const Button = styled.button`
  color: palevioletred;
  border: 2px solid palevioletred;
  border-radius: 3px;
`;
// 基于 Button 的新组件,但具有一些覆盖样式
const TomatoButton = styled(Button)`
  color: tomato;
  border-color: tomato;
`;
const Demo = () => (
  <div>
    <Button>普通按钮</Button>
    <TomatoButton>番茄色按钮</TomatoButton>
  </div>
);

扩展样式改变标签 (as)

const Button = styled.button`
  color: palevioletred;
  padding: 0.25em 1em;
  border: 2px solid palevioletred;
  border-radius: 3px;
  display: block;
`;

const TomatoButton = styled(Button)`
  color: tomato;
  border-color: tomato;
`;

const Demo = () => (
  <div>
    <Button>普通按钮</Button>
    <Button as="a" href="#">
      按钮样式的链接
    </Button>
    <TomatoButton as="a" href="#">
      番茄按钮样式的链接
    </TomatoButton>
  </div>
);

自定义组件(as)

const Button = styled.button`
  color: palevioletred;
  font-size: 1em;
  border: 2px solid palevioletred;
  display: block;
`;

const ReversedButton = props => (
  <Button
    {...props}
    children={
      props.children.split('').reverse()
    }
  />
);

render(
  <div>
    <Button>普通按钮</Button>
    <Button as={ReversedButton}>
      具有普通按钮样式的自定义按钮
    </Button>
  </div>
);

样式化任何组件

const Link = ({ className, children }) => (
  <a className={className}>
    {children}
  </a>
);
const StyledLink = styled(Link)`
  color: palevioletred;
  font-weight: bold;
`;
<StyledLink className="hello" />

在 render 之外定义 Styled 组件

const Box = styled.div`/* ... */`;
const Wrapper = ({ message }) => {
  // ⚠️ 不能在这里定义 styled 组件
  return (
    <Box>
      {message}
    </Box>
  );
};

注意:组件 Box 不能放到 Wrapper 函数组件里面

传入值

const Input = styled.input`
  color: ${
    props => 
      props.inputColor || "palevioletred"
  };
  background: papayawhip;
`;
const Demo = () => (
  <div>
    <Input
      defaultValue="@probablyup"
      type="text"
    />
    <Input
      defaultValue="@geelen"
      type="text"
      inputColor="rebeccapurple"
    />
  </div>
);

样式对象

const PropsBox = styled.div(props => ({
  background: props.background,
  height: '50px',
  width: '50px',
  fontSize: '12px'
}));

在组件中使用

const Example = () => {
  return (
    <div>
      <PropsBox
        background="blue"
      />
    </div>
  );
}

注意:样式对象里面的样式并不是 CSS 中的写法。

CSSModules => styled

import React, { useState } from 'react';
import styles from './styles.css';

function ExampleCounter() {
  const [count, setCount] = useState(0)
  return (
    <div className={styles.counter}>
      <p className={styles.paragraph}>
        {count}
      </p>
      <button
        className={styles.button}
        onClick={() => setCount(count +1)}
      >
        +
      </button>
      <button
        className={styles.button}
        onClick={() => setCount(count -1)}
      >
        -
      </button>
    </div>
  );
}

👇👇 与下面 styled 写法等效 👇👇

import styled from 'styled-components';

const StyledCounter = styled.div`
  /* ... */
`;
const Paragraph = styled.p`
  /* ... */
`;
const Button = styled.button`
  /* ... */
`;
function ExampleCounter() {
  const [count, setCount] = useState(0);
  const increment = () => {
    setCount(count +1);
  }
  const decrement = () => {
    setCount(count -1);
  }
  return (
    <StyledCounter>
      <Paragraph>{count}</Paragraph>
      <Button onClick={increment}>
        +
      </Button>
      <Button onClick={decrement}>
        -
      </Button>
    </StyledCounter>
  );
}

伪元素、伪选择器和嵌套

const Thing = styled.div.attrs((/* props */) => ({ tabIndex: 0 }))`
  color: blue;
  &:hover {              /* <Thing> 悬停时 */
    color: red;
  }
  & ~ & {                /* <Thing> 作为 <Thing> 的兄弟,但可能不直接在它旁边 */
    background: tomato;
  }
  & + & {                /* <Thing> 旁边的 <Thing> */
    background: lime;
  }
  &.something {          /* <Thing> 标记有一个额外的 CSS 类 “.something” */
    background: orange;
  }
  .something-else & {    /* <Thing> 在另一个标记为 “.something-else” 的元素中 */
    border: 1px solid;
  }
`;

render(
  <React.Fragment>
    <Thing>Hello world!</Thing>
    <Thing>你怎么样?</Thing>
    <Thing className="something">
      艳阳高照...
    </Thing>
    <div>今天真是美好的一天。</div>
    <Thing>你不觉得吗?</Thing>
    <div className="something-else">
      <Thing>灿烂</Thing>
    </div>
  </React.Fragment>
);

改变 styled 组件样式

import { css } from 'styled-components'
import styled from 'styled-components'

const Input = styled.input.attrs({
  type: "checkbox"
})``;
const LabelText = styled.span`
  ${(props) => {
    switch (props.$mode) {
      case "dark":
        return css`
          color: white;
          ${Input}:checked + && {
            color: blue;
          }
        `;
      default:
        return css`
          color: black;
          ${Input}:checked + && {
            color: red;
          }
        `;
    }
  }}
`;

function Example() {
  return (
    <React.Fragment>
      <Label>
        <Input defaultChecked />
        <LabelText>Foo</LabelText>
      </Label>
      <Label>
        <Input />
        <LabelText $mode="dark">
          Foo
        </LabelText>
      </Label>
    </React.Fragment>
  );
}

全局样式 createGlobalStyle

import {
  styled,
  createGlobalStyle
} from 'styled-components'

const Thing = styled.div`
   && {
     color: blue;
   }
`;
const GlobalStyle = createGlobalStyle`
  div${Thing} {
    color: red;
  }
`;

const Example = () => (
  <React.Fragment>
    <GlobalStyle />
    <Thing>
      我是蓝色的
    </Thing>
  </React.Fragment>
);

className 使用

const Thing = styled.div`
  color: blue;
  /* <Thing> 中标记为“.something”的元素 */
  .something {
    border: 1px solid;
  }
`;

function Example() {
  return (
    <Thing>
      <label
        htmlFor="foo-button"
        className="something"
      >
        神秘按钮
      </label>
      <button id="foo-button">
        我该怎么办?
      </button>
    </Thing>
  )
}

共享样式片段

const rotate = keyframes`
  from {top:0px;}
  to {top:200px;}
`;

// ❌ 这将引发错误!
const styles = `
  animation: ${rotate} 2s linear infinite;
`;

// ✅ 这将按预期工作
const styles = css`
  animation: ${rotate} 2s linear infinite;
`;

Class 组件样式定义

class NewHeader extends React.Component {
  render() {
    return (
      <div
        className={this.props.className}
      />
    );
  }
}
const StyledA = styled(NewHeader)``
const Box = styled.div`
  ${StyledA} {
    /* 变更 NewHeader 样式 */
  }
`;

附加额外的 Props

const Input = styled.input.attrs(props=>({
  // 我们可以定义静态道具
  type: "text",
  // 或者我们可以定义动态的
  size: props.size || "1em",
}))`
  color: palevioletred;
  font-size: 1em;
  border: 2px solid palevioletred;
  border-radius: 3px;

  /* 这里我们使用动态计算的 props */
  margin: ${props => props.size};
  padding: ${props => props.size};
`;

使用 Input 组件

function Example() {
  return (
    <div>
      <Input placeholder="小文本输入" />
      <br />
      <Input
        placeholder="更大的文本输入"
        size="2em"
      />
    </div>
  )
}

覆盖 .attrs

const Input = styled.input.attrs(props=>({
  type: "text",
  size: props.size || "1em",
}))`
  border: 2px solid palevioletred;
  margin: ${props => props.size};
  padding: ${props => props.size};
`;
// Input 的attrs会先被应用,然后这个 attrs obj
const PasswordInput = styled(Input).attrs({
  type: "password",
})`
  /* 同样,border 将覆盖 Input 的边框 */
  border: 2px solid aqua;
`;

使用 Input 和 PasswordInput 组件

render(
  <div>
    <Input
      placeholder="更大的文本输入"
      size="2em"
    />
    <br />
    {/*⚠️ 仍然可以使用Input中的 size attr*/}
    <PasswordInput
      placeholder="更大的密码输入"
      size="2em"
    />
  </div>
);

动画

创建关键帧

const rotate = keyframes`
  from {
    transform: rotate(0deg);
  }

  to {
    transform: rotate(360deg);
  }
`;

我们创建一个 Rotate 组件

// 它将在两秒内旋转我们传递的所有内容
const Rotate = styled.div`
  display: inline-block;
  animation: ${rotate} 2s linear infinite;
  padding: 2rem 1rem;
  font-size: 1.2rem;
`;

使用 Rotate 组件

function Example() {
  return (
    <Rotate>&lt; 💅🏾 &gt;</Rotate>
  )
}

isStyledComponent

import React from 'react'
import styled, { isStyledComponent } from 'styled-components'
import MaybeStyledComponent from './my'

let TargetedComponent = isStyledComponent(MaybeStyledComponent)
  ? MaybeStyledComponent
  : styled(MaybeStyledComponent)``;

const ParentComponent = styled.div`
  color: cornflowerblue;

  ${TargetedComponent} {
    color: tomato;
  }
`;

ThemeConsumer

import {
  ThemeConsumer
} from 'styled-components'

function Example() {
  return (
    <ThemeConsumer>
      {theme => (
        <div>主题色是 {theme.color}</div>
      )}
    </ThemeConsumer>
  );
}

TypeScript

安装

Web 应用上安装 styled

npm install -D @types/styled-components

React Native 应用上安装 styled

npm install -D \
    @types/styled-components \
    @types/styled-components-react-native

如果对 TypeScript 不熟悉,参考 TypeScript 备忘清单

自定义 Props

import styled from 'styled-components';

interface TitleProps {
  readonly isActive: boolean;
}

const Title = styled.h1<TitleProps>`
  color: ${(props) => (
    props.isActive 
      ? props.theme.colors.main 
      : props.theme.colors.secondary
  )};
`;

简单的 Props 类型定义

import styled from 'styled-components';
import Header from './Header';

const Header = styled.header`
  font-size: 12px;
`;

const NewHeader = styled(Header)<{
  customColor: string;
}>`
  color: ${(props) => props.customColor};
`;

禁止转移到子组件($)

import styled from 'styled-components';
import Header from './Header';

interface ReHeader {
  $customColor: string;
}

const ReHeader = styled(Header)<ReHeader>`
  color: ${
    props => props.$customColor
  };
`;

禁止 customColor 属性转移到 Header 组件,在其前面加上美元($)符号

函数组件类型继承

import { FC, PropsWithRef, DetailedHTMLProps, ImgHTMLAttributes } from 'react';
import styled from 'styled-components';

const Img = styled.img`
  height: 32px;
  width: 32px;
`;
export interface ImageProps extends DetailedHTMLProps<
  ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement
> {
  text?: string;
};
export const Image: FC<PropsWithRef<ImageProps>> = (props) => (
  <Img src="" alt="" {...props} />
);

React Native

基础实例

import React from 'react'
import styled from 'styled-components/native'

const StyledView = styled.View`
  background-color: papayawhip;
`;
const StyledText = styled.Text`
  color: palevioletred;
`;

class MyReactNativeComponent extends React.Component {
  render() {
    return (
      <StyledView>
        <StyledText>Hello World!</StyledText>
      </StyledView>
    );
  }
}

React Native 中写 CSS

import styled from 'styled-components/native'

const RotatedBox = styled.View`
  transform: rotate(90deg);
  text-shadow-offset: 10px 5px;
  font-variant: small-caps;
  margin: 5px 7px 2px;
`;

function Example() {
  return (
    <RotatedBox />
  )
}

与 web 版本的一些区别是,您不能使用关键帧(keyframes)和 createGlobalStyle 助手,因为 React Native 不支持关键帧或全局样式。如果您使用媒体查询或嵌套 CSS,我们也会警告您。

高级用法

主题化

import styled, { ThemeProvider } from 'styled-components'

// 定义我们的按钮,但这次使用 props.theme
const Button = styled.button`
  font-size: 1em;
  margin: 1em;
  padding: 0.25em 1em;
  border-radius: 3px;

  /* 使用 theme.main 为边框和文本着色 */
  color: ${props => props.theme.main};
  border: 2px solid ${props => props.theme.main};
`;

// 我们正在为未包装在 ThemeProvider 中的按钮传递默认主题
Button.defaultProps = {
  theme: {
    main: "palevioletred"
  }
}

// 定义 props.theme 的外观
const theme = {
  main: "mediumseagreen"
};

render(
  <div>
    <Button>Normal</Button>

    <ThemeProvider theme={theme}>
      <Button>Themed</Button>
    </ThemeProvider>
  </div>
);

功能主题

import styled, { ThemeProvider } from 'styled-components'

// 定义我们的按钮,但这次使用 props.theme
const Button = styled.button`
  color: ${props => props.theme.fg};
  border: 2px solid ${props => props.theme.fg};
  background: ${props => props.theme.bg};

  font-size: 1em;
  margin: 1em;
  padding: 0.25em 1em;
  border-radius: 3px;
`;
// 在主题上定义我们的`fg`和`bg`
const theme = {
  fg: "palevioletred",
  bg: "white"
};

// 这个主题交换了`fg`和`bg`
const invertTheme = ({ fg, bg }) => ({
  fg: bg,
  bg: fg
});

render(
  <ThemeProvider theme={theme}>
    <div>
      <Button>默认主题</Button>
      <ThemeProvider theme={invertTheme}>
        <Button>反转主题</Button>
      </ThemeProvider>
    </div>
  </ThemeProvider>
);

通过 withTheme 高阶组件

import { withTheme } from 'styled-components'

class MyComponent extends React.Component {
  render() {
    console.log('Current theme: ', this.props.theme)
    // ...
  }
}

export default withTheme(MyComponent)

useContext 钩子

import { useContext } from 'react'
import { ThemeContext } from 'styled-components'

const MyComponent = () => {
  const themeContext = useContext(ThemeContext)
  
  console.log('Current theme: ', themeContext)
  // ...
}

useTheme 自定义钩子

import {useTheme} from 'styled-components'

const MyComponent = () => {
  const theme = useTheme()

  console.log('Current theme: ', theme)
  // ...
}

主题 props

import {
  ThemeProvider,
  styled
} from 'styled-components';

// 定义我们的按钮
const Button = styled.button`
  font-size: 1em;
  margin: 1em;
  padding: 0.25em 1em;
  /* 使用 theme.main 为边框和文本着色 */
  color: ${props => props.theme.main};
  border: 2px solid ${props => props.theme.main};
`;
// 定义主题的外观
const theme = {
  main: "mediumseagreen"
};

使用自定义主题组件

render(
  <div>
    <Button theme={{ main: "royalblue" }}>
      特设主题
    </Button>
    <ThemeProvider theme={theme}>
      <div>
        <Button>Themed</Button>
        <Button
          theme={{ main: "darkorange" }}
        >
          被覆盖
        </Button>
      </div>
    </ThemeProvider>
  </div>
);

Refs

import {
  ThemeProvider,
  styled
} from 'styled-components';

const Input = styled.input`
  border: none;
  border-radius: 3px;
`;

class Form extends React.Component {
  constructor(props) {
    super(props);
    this.inputRef = React.createRef();
  }

  render() {
    return (
      <Input
        ref={this.inputRef}
        placeholder="Hover to focus!"
        onMouseEnter={() => {
          this.inputRef.current.focus()
        }}
      />
    );
  }
}

使用 Form 组件

function Example() {
  return (
    <Form />
  )
}

特异性问题

在文件 MyComponent.js 中定义 MyComponent 组件。

const MyComponent = styled.div`
  background-color: green;
`;

定义样式 my-component.css

.red-bg {
  background-color: red;
}

使用 MyComponent 组件

<MyComponent className="red-bg" />

由于某种原因,这个组件仍然有绿色背景,即使你试图用 red-bg 类覆盖它!

解决方案

.red-bg.red-bg {
  background-color: red;
}

ThemeProvider

import styled, { ThemeProvider } from 'styled-components'

const Box = styled.div`
  color: ${props => props.theme.color};
`;

const Example = () => (
  <ThemeProvider theme={{ color: 'mediumseagreen' }}>
    <Box>I'm mediumseagreen!</Box>
  </ThemeProvider>
);

shouldForwardProp

const Comp = styled('div').withConfig({
  shouldForwardProp: (prop, defaultValidatorFn) =>
      !['hidden'].includes(prop) && defaultValidatorFn(prop),
}).attrs({ className: 'foo' })`
  color: red;
  &.foo {
    text-decoration: underline;
  }
`;

const Example = () => (
  <Comp hidden draggable="true">
    Drag Me!
  </Comp>
);