mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			367 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			367 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
// Fixture taken from https://github.com/bgrieder/RNTSExplorer/blob/master/typescript/components/TextExample.ios.tsx
 | 
						|
 | 
						|
/**
 | 
						|
 * The examples provided by Facebook are for non-commercial testing and
 | 
						|
 * evaluation purposes only.
 | 
						|
 *
 | 
						|
 * Facebook reserves all rights not expressly granted.
 | 
						|
 *
 | 
						|
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 | 
						|
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
						|
 * FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL
 | 
						|
 * FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
 | 
						|
 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 | 
						|
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 | 
						|
 *
 | 
						|
 * Typescript rewrite by Bruno Grieder
 | 
						|
 */
 | 
						|
 | 
						|
'use strict'
 | 
						|
 | 
						|
import * as React from 'react-native';
 | 
						|
import RNTSExample from '../RNTSExample'
 | 
						|
import RNTSExampleModule from '../RNTSExampleModule'
 | 
						|
 | 
						|
const {
 | 
						|
          StyleSheet,
 | 
						|
          Text,
 | 
						|
          View,
 | 
						|
          } = React
 | 
						|
 | 
						|
 | 
						|
const styles = StyleSheet.create(
 | 
						|
    {
 | 
						|
        backgroundColorText: {
 | 
						|
            left:            5,
 | 
						|
            backgroundColor: 'rgba(100, 100, 100, 0.3)'
 | 
						|
        },
 | 
						|
        entity:              {
 | 
						|
            fontWeight: '500',
 | 
						|
            color:      '#527fe4',
 | 
						|
        },
 | 
						|
    }
 | 
						|
)
 | 
						|
 | 
						|
class Entity extends React.Component<any,any> {
 | 
						|
    render() {
 | 
						|
        return (
 | 
						|
            <Text style={styles.entity}>
 | 
						|
                {this.props.children}
 | 
						|
            </Text>
 | 
						|
        )
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
interface AttrTogglerState {
 | 
						|
    fontWeight?: string
 | 
						|
    fontSize?: number
 | 
						|
}
 | 
						|
 | 
						|
class AttributeToggler extends React.Component<any, AttrTogglerState> {
 | 
						|
    componentWillMount() {
 | 
						|
        this.setState(
 | 
						|
            {
 | 
						|
                fontWeight: '500',
 | 
						|
                fontSize:   15
 | 
						|
            }
 | 
						|
        )
 | 
						|
    }
 | 
						|
 | 
						|
    private increaseSize = (): void => {
 | 
						|
        this.setState( {
 | 
						|
                           fontSize: this.state.fontSize + 1
 | 
						|
                       } )
 | 
						|
    }
 | 
						|
 | 
						|
    render() {
 | 
						|
        const curStyle: React.TextStyle = { fontSize: this.state.fontSize }
 | 
						|
        return (
 | 
						|
            <Text>
 | 
						|
                <Text style={curStyle}>
 | 
						|
                    Tap the controls below to change attributes.
 | 
						|
                </Text>
 | 
						|
                <Text>
 | 
						|
                    See how it will even work on{' '}
 | 
						|
                    <Text style={curStyle}>
 | 
						|
                        this nested text
 | 
						|
                    </Text>
 | 
						|
                    <Text onPress={this.increaseSize}>
 | 
						|
                        {'>> Increase Size <<'}
 | 
						|
                    </Text>
 | 
						|
                </Text>
 | 
						|
            </Text>
 | 
						|
        )
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
export default {
 | 
						|
    title:       '<Text>',
 | 
						|
    description: 'Base component for rendering styled text.',
 | 
						|
    displayName: 'TextExample',
 | 
						|
    examples:    [
 | 
						|
                     {
 | 
						|
                         title:  'Wrap',
 | 
						|
                         render: function () {
 | 
						|
                             return (
 | 
						|
                                 <Text>
 | 
						|
                                     The text should wrap if it goes on multiple lines. See, this is going to
 | 
						|
                                     the next line.
 | 
						|
                                 </Text>
 | 
						|
                             )
 | 
						|
                         },
 | 
						|
                     },
 | 
						|
                     {
 | 
						|
                         title:  'Padding',
 | 
						|
                         render: function () {
 | 
						|
                             return (
 | 
						|
                                 <Text style={{padding: 10}}>
 | 
						|
                                     This text is indented by 10px padding on all sides.
 | 
						|
                                 </Text>
 | 
						|
                             )
 | 
						|
                         },
 | 
						|
                     },
 | 
						|
                     {
 | 
						|
                         title:  'Font Family',
 | 
						|
                         render: function () {
 | 
						|
                             return (
 | 
						|
                                 <View>
 | 
						|
                                     <Text style={{fontFamily: 'Cochin'}}>
 | 
						|
                                         Cochin
 | 
						|
                                     </Text>
 | 
						|
                                     <Text style={{fontFamily: 'Cochin', fontWeight: 'bold'}}>
 | 
						|
                                         Cochin bold
 | 
						|
                                     </Text>
 | 
						|
                                     <Text style={{fontFamily: 'Helvetica'}}>
 | 
						|
                                         Helvetica
 | 
						|
                                     </Text>
 | 
						|
                                     <Text style={{fontFamily: 'Helvetica', fontWeight: 'bold'}}>
 | 
						|
                                         Helvetica bold
 | 
						|
                                     </Text>
 | 
						|
                                     <Text style={{fontFamily: 'Verdana'}}>
 | 
						|
                                         Verdana
 | 
						|
                                     </Text>
 | 
						|
                                     <Text style={{fontFamily: 'Verdana', fontWeight: 'bold'}}>
 | 
						|
                                         Verdana bold
 | 
						|
                                     </Text>
 | 
						|
                                 </View>
 | 
						|
                             )
 | 
						|
                         },
 | 
						|
                     },
 | 
						|
                     {
 | 
						|
                         title:  'Font Size',
 | 
						|
                         render: function () {
 | 
						|
                             return (
 | 
						|
                                 <View>
 | 
						|
                                     <Text style={{fontSize: 23}}>
 | 
						|
                                         Size 23
 | 
						|
                                     </Text>
 | 
						|
                                     <Text style={{fontSize: 8}}>
 | 
						|
                                         Size 8
 | 
						|
                                     </Text>
 | 
						|
                                 </View>
 | 
						|
                             )
 | 
						|
                         },
 | 
						|
                     },
 | 
						|
                     {
 | 
						|
                         title:  'Color',
 | 
						|
                         render: function () {
 | 
						|
                             return (
 | 
						|
                                 <View>
 | 
						|
                                     <Text style={{color: 'red'}}>
 | 
						|
                                         Red color
 | 
						|
                                     </Text>
 | 
						|
                                     <Text style={{color: 'blue'}}>
 | 
						|
                                         Blue color
 | 
						|
                                     </Text>
 | 
						|
                                 </View>
 | 
						|
                             )
 | 
						|
                         },
 | 
						|
                     },
 | 
						|
                     {
 | 
						|
                         title:  'Font Weight',
 | 
						|
                         render: function () {
 | 
						|
                             return (
 | 
						|
                                 <View>
 | 
						|
                                     <Text style={{fontWeight: '100'}}>
 | 
						|
                                         Move fast and be ultralight
 | 
						|
                                     </Text>
 | 
						|
                                     <Text style={{fontWeight: '200'}}>
 | 
						|
                                         Move fast and be light
 | 
						|
                                     </Text>
 | 
						|
                                     <Text style={{fontWeight: 'normal'}}>
 | 
						|
                                         Move fast and be normal
 | 
						|
                                     </Text>
 | 
						|
                                     <Text style={{fontWeight: 'bold'}}>
 | 
						|
                                         Move fast and be bold
 | 
						|
                                     </Text>
 | 
						|
                                     <Text style={{fontWeight: '900'}}>
 | 
						|
                                         Move fast and be ultrabold
 | 
						|
                                     </Text>
 | 
						|
                                 </View>
 | 
						|
                             )
 | 
						|
                         },
 | 
						|
                     },
 | 
						|
                     {
 | 
						|
                         title:  'Font Style',
 | 
						|
                         render: function () {
 | 
						|
                             return (
 | 
						|
                                 <View>
 | 
						|
                                     <Text style={{fontStyle: 'normal'}}>
 | 
						|
                                         Normal text
 | 
						|
                                     </Text>
 | 
						|
                                     <Text style={{fontStyle: 'italic'}}>
 | 
						|
                                         Italic text
 | 
						|
                                     </Text>
 | 
						|
                                 </View>
 | 
						|
                             )
 | 
						|
                         },
 | 
						|
                     },
 | 
						|
                     {
 | 
						|
                         title:       'Nested',
 | 
						|
                         description: 'Nested text components will inherit the styles of their ' +
 | 
						|
                                      'parents (only backgroundColor is inherited from non-Text parents).  ' +
 | 
						|
                                      '<Text> only supports other <Text> and raw text (strings) as children.',
 | 
						|
                         render:      function () {
 | 
						|
                             return (
 | 
						|
                                 <View>
 | 
						|
                                     <Text>
 | 
						|
                                         (Normal text,
 | 
						|
                                         <Text style={{fontWeight: 'bold'}}>
 | 
						|
                                             (and bold
 | 
						|
                                             <Text style={{fontSize: 11, color: '#527fe4'}}>
 | 
						|
                                                 (and tiny inherited bold blue)
 | 
						|
                                             </Text>
 | 
						|
                                             )
 | 
						|
                                         </Text>
 | 
						|
                                         )
 | 
						|
                                     </Text>
 | 
						|
                                     <Text style={{fontSize: 12}}>
 | 
						|
                                         <Entity>Entity Name</Entity>
 | 
						|
                                     </Text>
 | 
						|
                                 </View>
 | 
						|
                             )
 | 
						|
                         },
 | 
						|
                     },
 | 
						|
                     {
 | 
						|
                         title:  'Text Align',
 | 
						|
                         render: function () {
 | 
						|
                             return (
 | 
						|
                                 <View>
 | 
						|
                                     <Text style={{textAlign: 'left'}}>
 | 
						|
                                         left left left left left left left left left left left left left left left
 | 
						|
                                     </Text>
 | 
						|
                                     <Text style={{textAlign: 'center'}}>
 | 
						|
                                         center center center center center center center center center center center
 | 
						|
                                     </Text>
 | 
						|
                                     <Text style={{textAlign: 'right'}}>
 | 
						|
                                         right right right right right right right right right right right right right
 | 
						|
                                     </Text>
 | 
						|
                                 </View>
 | 
						|
                             )
 | 
						|
                         },
 | 
						|
                     },
 | 
						|
                     {
 | 
						|
                         title:  'Spaces',
 | 
						|
                         render: function () {
 | 
						|
                             return (
 | 
						|
                                 <Text>
 | 
						|
                                     A {'generated'} {' '} {'string'} and    some     spaces
 | 
						|
                                 </Text>
 | 
						|
                             )
 | 
						|
                         },
 | 
						|
                     },
 | 
						|
                     {
 | 
						|
                         title:  'Line Height',
 | 
						|
                         render: function () {
 | 
						|
                             return (
 | 
						|
                                 <Text>
 | 
						|
                                     <Text style={{lineHeight: 35}}>
 | 
						|
                                         A lot of space between the lines of this long passage that should
 | 
						|
                                         wrap once.
 | 
						|
                                     </Text>
 | 
						|
                                 </Text>
 | 
						|
                             )
 | 
						|
                         },
 | 
						|
                     },
 | 
						|
                     {
 | 
						|
                         title:       'Empty Text',
 | 
						|
                         description: 'It\'s ok to have Text with zero or null children.',
 | 
						|
                         render:      function () {
 | 
						|
                             return (
 | 
						|
                                 <Text />
 | 
						|
                             )
 | 
						|
                         },
 | 
						|
                     },
 | 
						|
                     {
 | 
						|
                         title:  'Toggling Attributes',
 | 
						|
                         render: (): React.ReactElement<any> => {
 | 
						|
                             return <AttributeToggler />
 | 
						|
                         },
 | 
						|
                     },
 | 
						|
                     {
 | 
						|
                         title:       'backgroundColor attribute',
 | 
						|
                         description: 'backgroundColor is inherited from all types of views.',
 | 
						|
                         render:      function () {
 | 
						|
                             return (
 | 
						|
                                 <View style={{backgroundColor: 'yellow'}}>
 | 
						|
                                     <Text>
 | 
						|
                                         Yellow background inherited from View parent,
 | 
						|
                                         <Text style={{backgroundColor: '#ffaaaa'}}>
 | 
						|
                                             {' '}red background,
 | 
						|
                                             <Text style={{backgroundColor: '#aaaaff'}}>
 | 
						|
                                                 {' '}blue background,
 | 
						|
                                                 <Text>
 | 
						|
                                                     {' '}inherited blue background,
 | 
						|
                                                     <Text style={{backgroundColor: '#aaffaa'}}>
 | 
						|
                                                         {' '}nested green background.
 | 
						|
                                                     </Text>
 | 
						|
                                                 </Text>
 | 
						|
                                             </Text>
 | 
						|
                                         </Text>
 | 
						|
                                     </Text>
 | 
						|
                                 </View>
 | 
						|
                             )
 | 
						|
                         },
 | 
						|
                     },
 | 
						|
                     {
 | 
						|
                         title:  'containerBackgroundColor attribute',
 | 
						|
                         render: function () {
 | 
						|
                             return (
 | 
						|
                                 <View>
 | 
						|
                                     <View style={{flexDirection: 'row', height: 85}}>
 | 
						|
                                         <View style={{backgroundColor: '#ffaaaa', width: 150}}/>
 | 
						|
                                         <View style={{backgroundColor: '#aaaaff', width: 150}}/>
 | 
						|
                                     </View>
 | 
						|
                                     <Text style={[styles.backgroundColorText, {top: -80}]}>
 | 
						|
                                         Default containerBackgroundColor (inherited) + backgroundColor wash
 | 
						|
                                     </Text>
 | 
						|
                                     <Text style={[
 | 
						|
                                            styles.backgroundColorText,
 | 
						|
                                            {top: -70, containerBackgroundColor: 'transparent'}
 | 
						|
                                        ]}>
 | 
						|
                                         {"containerBackgroundColor: 'transparent' + backgroundColor wash"}
 | 
						|
                                     </Text>
 | 
						|
                                 </View>
 | 
						|
                             )
 | 
						|
                         },
 | 
						|
                     },
 | 
						|
                     {
 | 
						|
                         title:  'numberOfLines attribute',
 | 
						|
                         render: function () {
 | 
						|
                             return (
 | 
						|
                                 <View>
 | 
						|
                                     <Text numberOfLines={1}>
 | 
						|
                                         Maximum of one line no matter now much I write here. If I keep writing it{"'"}ll just truncate after one line
 | 
						|
                                     </Text>
 | 
						|
                                     <Text numberOfLines={2} style={{marginTop: 20}}>
 | 
						|
                                         Maximum of two lines no matter now much I write here. If I keep writing it{"'"}ll just truncate after two lines
 | 
						|
                                     </Text>
 | 
						|
                                     <Text style={{marginTop: 20}}>
 | 
						|
                                         No maximum lines specified no matter now much I write here. If I keep writing it{"'"}ll just keep going and going
 | 
						|
                                     </Text>
 | 
						|
                                 </View>
 | 
						|
                             )
 | 
						|
                         }
 | 
						|
                     } ] as RNTSExample[]
 | 
						|
} as RNTSExampleModule
 |