Coder Social home page Coder Social logo

react-native-switch-selector's Introduction

SwitchSelector

Switch Selector to React Native.

npm version downloads

SwitchSelector

SwitchSelector

SwitchSelector - Custom Example

SwitchSelector

Installing

yarn add react-native-switch-selector

or

npm i react-native-switch-selector --save

Usage

import SwitchSelector from "react-native-switch-selector";
const options = [
  { label: "01:00", value: "1" },
  { label: "01:30", value: "1.5" },
  { label: "02:00", value: "2" }
];

you can also add testID and accessibilityLabel to each option:

const options = [
  { label: "01:00", value: "1", testID: "switch-one", accessibilityLabel: "switch-one" },
  { label: "01:30", value: "1.5", testID: "switch-one-thirty", accessibilityLabel: "switch-one-thirty" },
  { label: "02:00", value: "2", testID: "switch-two", accessibilityLabel: "switch-two" }
];
<SwitchSelector
  options={options}
  initial={0}
  onPress={value => console.log(`Call onPress with value: ${value}`)}
/>

Custom Example

<SwitchSelector
  initial={0}
  onPress={value => this.setState({ gender: value })}
  textColor={colors.purple} //'#7a44cf'
  selectedColor={colors.white}
  buttonColor={colors.purple}
  borderColor={colors.purple}
  hasPadding
  options={[
    { label: "Feminino", value: "f", imageIcon: images.feminino }, //images.feminino = require('./path_to/assets/img/feminino.png')
    { label: "Masculino", value: "m", imageIcon: images.masculino } //images.masculino = require('./path_to/assets/img/masculino.png')
  ]}
  testID="gender-switch-selector"
  accessibilityLabel="gender-switch-selector"
/>

Props

Prop Type Default Required Note
options array null true Items array to render. Each item has a label and a value and optionals icons
options[].label string null true Label from each item
options[].value string null true Value from each item
options[].customIcon Jsx element ou Function null false Optional custom icon from each item
options[].imageIcon string null false Source from a image icon form each item. Has the same color then label in render
options[].activeColor string null false Color from each item when is selected
options[].testID string undefined false Test ID for each item used for testing (e.g. with Appium)
options[].accessibilityLabel string undefined false Accessibility Label for each item used for testing (e.g. with Appium)
initial number -1 false Item selected in initial render
value number undefined false The switch value (will call onPress)
onPress function console.log true Callback function called after change value.
disableValueChangeOnPress bool false false Disables the onPress call when the value is manually changed
fontSize number null false Font size from labels. If null default fontSize of the app is used.
selectedColor string '#fff' false Color text of the item selected
buttonMargin number 0 false Margin of the item selected to component
buttonColor string '#BCD635' false Color bg of the item selected
textColor string '#000' false Color text of the not selecteds items
backgroundColor string '#ffffff' false Color bg of the component
borderColor string '#c9c9c9' false Border Color of the component
borderRadius number 50 false Border Radius of the component
hasPadding bool false false Indicate if item has padding
animationDuration number 250 false Duration of the animation
valuePadding number 1 false Size of padding
height number 40 false Height of component
bold bool false false Indicate if text has fontWeight bold
textStyle object {} false Text style
selectedTextStyle object {} false Selected text style
textContainerStyle object {} false Style for text (and icon) container (TouchableOpacity)
selectedTextContainerStyle object {} false Style for selected text (and icon) container (TouchableOpacity)
imageStyle object {} false Image style
style object {} false Container style
returnObject bool false false Indicate if onPress function return an option instead of option.value
disabled bool false false Disables the switch
borderWidth number 1 false Define border width
testID string null false Test ID used for testing (e.g. with Appium)
accessibilityLabel string null false Accessibility Label used for testing (e.g. with Appium)

Authors

Contribute

Contributions are always welcome! Create a new Pull Request

react-native-switch-selector's People

Contributors

allandiego avatar avishayil avatar brian-mcbride avatar dependabot[bot] avatar duyluonglc avatar eralyne avatar fadeltd avatar forcetower avatar gaultierq avatar haqiqiw avatar hirthbrian avatar is343 avatar jkdrangel avatar lednewcrk avatar lucianomlima avatar patlux avatar ramuse avatar samuelbezerrab avatar ssscassio avatar tyson90 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

react-native-switch-selector's Issues

Custom Slider/Option Width

Hello. Could be nice to add a way to customize slider/option width. Like for example, I have 3 options and I want to have the middle one smaller than the other two.

React Web version

Is it compatible with React (web), or does it have a web version?

Thank you!

Switch selector not changing its values in "options" attribute when translated.

I have come across a problem ---> I'm using translations in my project and by default the language selected is English but whenever I change my translations to Hindi or any other language the "Yes or No" options in my Switch Selector does not change.

PS - the values in the switch selector for attribute "options" is defined in some other .js file and are being accessed from there
eg. translation.js --> LOGIN_WITH_SAME_EMAIL_ID = [
{ label: "yes", value: strings.yes },
{ label: "no", value: strings.no },
];

// strings.js is another file containing translations of yes and no in different languages.

and

<SwitchSelector
initial={0}
onPress={(value) => {//some function}}
options={GLOBALS.LOGIN_WITH_SAME_EMAIL_ID}
/>

here the value is only converted when I go to translation.js and do a force save on the file..!
but when I use the direct way i.e. directly initializing "options" it works...
but I need to use the previous way, because all the translations should be accessed from an external .js file only.!

Configuring initial with conditional based on prop

Hello!

A bit of a noob here but I need some help: I have a switch selector working, except that I need to set the initial state based on possibly preexisting props. I have a prop I'm modifying with the switch-selector component and that's working just fine. But I need to be able to pass that prop to the switch-selector component to determine its initial state when the app is reading in data.

I'm able to change the props using the SwitchSelector, wired all the way back down to the database, but I cannot set the initial state of the Switchselector based on props since the Switchselector's initial props only take a number and the prop is boolean. So, how do I pass a boolean prop down to the initial prop of the switch selector component?

The error I get is:

undefined is not an object (evaluating 'options[selected].activeColor')

I was trying to set initial based on the props like so:

initial={() => { if(this.props.item.collection) { return 1 } return 0 }

Here's my entire SwitchSelector component (it works if I just put in {-1} or {1} for the initial value.

<SwitchSelector {...this.props} style={{paddingTop: 10}} textColor='#9C9C9C' selectedColor='#FFFFFF' buttonColor='#65A5F6' borderColor='#DFDFDF' hasPadding animationDuration={250} buttonMargin={0} borderRadius={25} textStyle={{ fontSize: 12, }} selectedTextStyle={{ fontWeight: '800', fontSize: 12, }} height={45} initial={() => { if(this.props.item.collection) { return 1 } return 0 } } options={[ { label: "First label", value: false }, { label: "Second Label", value: true } ]} onPress={(value) => { this.props.updateField( { field: 'collection', value: value } )}} />

THanks very much!

Warning: componentWillReceiveProps is deprecated in 0.60

Hi there, I am using this component, It's Cool.
Working fine with all the React-native version in Android/ IOS.
but since last React-native update 0.60 It shows Warning of componentWillReceiveProps is deprecated in 0.60.

Please take a look.
-Thanks

Change value dynamically after the initial render

Can I change value dynamically after the initial render i.e. not using the initial property.

I need to change value of switch selector depending on the state.

I tried setting value property to a state variable but it doesn't work. Any ideas?

text string must be rendered within a text component

My code doesn't work.
Here is the code:

`
ADIM 1 / 3
Lorem ipsum
Lorem ipsumLorem ipsum

Lorem ipsumLorem ipsumLorem ipsum

            <SwitchSelector
              initial={0}
              onPress={value => console.warn('deneme')} //this.setState({ gender: value })
              textColor={'#7a44cf'} //'#7a44cf'
              selectedColor={'red'}
              buttonColor={'blue'}
              borderColor={'black'}
              hasPadding
              options={[
                { label: "Feminino", value: "f", imageIcon: '' }, 
                { label: "Masculino", value: "m", imageIcon: '' } 
              ]}
            />

`

No spacing at the top on the button

Hello
firt of all, thank you for this module. It looks great, and smooth.
I'm trying to implement this in my app, but the buttons style seems wrong. The margin at the top is always 0, then the selector looks like this :
Screenshot_20200121-155106
Do you know why ?
:)

My code:

        <SwitchSelector
          initial={1}
          value={appMode}
          options={options}
          onPress={onchangeAppMode}
          height={35}
          hasPadding
          buttonMargin={0}
        />

Make initial value optional?

Currently you are forced to choose an initial value which means one of the options will have to be selected by default.

Is there anyway to make initial value option so by default nothing is pre-selected?

Small issue with FontWeight

Upon upgrading, I got a warning that an empty string was used for fontweight instead of an actual value. The line is in index.js at 163. This is the codeblock:

          <Text
            style={{
              fontSize,
              fontWeight: bold ? 'bold' : '',
              textAlign: 'center',
              color: this.state.selected == index ? selectedColor : textColor,
              backgroundColor: 'transparent'
            }}>
            {element.label}
          </Text>

Changing the line fontWeight: bold ? 'bold' : '', to fontWeight: bold ? 'bold' : 'normal', seems to fix the issue.

Problems with textColor and selectedColor

I've styled the text using the attribute textColor="#949494" and selectedColor="#FFF" but only textColor is being displayed with the correct color, It seems that selectedColor="#FFF" is being ignored. Could you help me?

SyntaxError: Support for the experimental syntax 'jsx' isn't currently enabled (154:9)

Have anyone encountered the same problem while importing this package?

`./node_modules/react-native-switch-selector/index.js
 SyntaxError: C:\Users\HP\Desktop\MSU_Work\Tool2_CPT_JS\Refactored_CPT\frontend\node_modules\react-native-switch-selector\index.js: Support for the experimental syntax 'jsx' isn't currently enabled (154:9):

   152 |
   153 |       return (
       |         ^
   155 |           key={index}
   156 |           disabled={disabled}
   157 |           style={[

 Add @babel/preset-react (https://git.io/JfeDR) to the 'presets' section of your Babel config to enable transformation.
 If you want to leave it as-is, add @babel/plugin-syntax-jsx (https://git.io/vb4yA) to the 'plugins' section to enable parsing.`

I had these Babel plugins installed in my local node modules but it didn't work, so is it a problem coming along with the package?

Allow change easing animation

Great library, very useful for gender selection or if there are more than two options.
I patched the library to use Easing.elastic(1) which in my opinion looks much better.
It would be nice to have an option to change it.

How to avoid the selector taking up entire width?

With the default styling, the component stretches and takes up the entire width of the display. How can I force it to take up only the space that is required (e.g. according to the length of the text of the buttons inside)?

Currently I am using style={{width: '50%'}} as prop but it is not a elegant solution since it will vary according to display sizes.

Selector respond UI to changes in state

Hi,

How can I make this component so that it responds passively to changes in the state?

For example, if I have two choices 0 and 1. Initial state = 0. It works perfectly when I want to manually swipe back and forth. But, what if I need it to respond to some other action which causes the value to change from 0 to 1 (or vice versa)?

I would like the component to detect that change and respond.

As it is, I can only give an "initial" state, and then change things using the swiper or onPress function, but the component will not detect and rerender when the value changes.

I tried going into it and messing around, but couldn't figure it out.

Thank you!

Toggle not changed after change initial state at run time.

whenever i changed initial on the basis of my return success failure response then background color change but toggle not change its position. it appears right side always.
initial={isUpdated?1:0}

Toggle changed when we manually click on it if changed during run state changed it only change colors not toggle actually.

Previous value on componentDidUpdate()

Hi

this.toggleItem(prevProps.value, !this.props.disableValueChangeOnPress);

Is there any reason to set the previous value again in componentDidUpdate(prevProps)?

I'm using the component in a controlled way:

<SwitchSelector
          value={selectedOptionIndex}
          onPress={onToggleOption}
          options={options}
/>

But it doesn't work: It will always end in a endless loop, because it's set the previous value each time.

It's only working when I change the line to:

this.toggleItem(this.props.value, !this.props.disableValueChangeOnPress);

Best regards,
patlux

Swipe gesture does not work

Checking my users' actions, many of them try to swipe to change instead of tapping.
Can this be done as an improvement?

Thanks in advance

skewed button

The button seems to be upside down.
and could you tell me how to get border without padding?
thank you.
screen shot 2018-06-04 at 10 21 31 pm
screen shot 2018-06-04 at 10 24 50 pm

Custom font

how can i implement my custom font on the selector this is my class for the font i use expo

import React from 'react';
import * as Font from "expo-font";
import { Text } from 'react-native';

class CustomFont extends React.Component
{
    constructor()
    {
        super();
    }

    async componentDidMount()
    {
        await Font.loadAsync
        ({
            'Poppins-Bold': require('../../assets/Fonts/Poppins-Bold.ttf'),
            'Poppins-Black': require('../../assets/Fonts/Poppins-Black.ttf')
        });
    }

    render()
    {
        const Font = this.props.type ? this.props.type : 'normal';
        const Style =[{fontFamily: Font}, this.props.style || {}]
        return (
            <Text style={Style} >{this.props.children}</Text>
        );
    }
}

export default CustomFont

Selection does not always change

Does not seem to work very reliably. Usually need to tap the item several times before it's selected. The color changes so the component seems to recognize the touch, but does not change the selection (and onPress not called). I have two items, each having a customImageView and no text. I have forced the width to 150 by wrapping the SwitchSelector to a View.

I tested in Android 8.1.

Using Ternary Operator for Initial

I am trying to use ternary operator for initial props based on state which is obtained from AppState during ComponentDidMount. However it seems that my ternary operator doesnt work it always fall back to 0 as initial.

        <SwitchSelector
           initial={this.state.gender === 'f' ? 0 : 1} //this is I am trying to use ternary operator
           onPress={this.genderHandler}
           textColor={Colors.mainTextColor}
           selectedColor={'#fff'}
           buttonColor={Colors.tintColor}
           borderColor={Colors.tintColor}
           hasPadding={true}
           options={[
             { label: 'Female', value: 'f' }, 
             { label: 'Male', value: 'm' }, 
           ]}
         />

Adjust Button Styling?

Hi there,
I created a toggle which looks a bit odd in one of the states.
When state is 0, it looks just fine, but in state 1 the margin to the border is not kept.
grafik

This is my code:

      <Container style={{height: 40, maxWidth: 120}}>
        <SwitchSelector
          initial={index}
          onPress={value => this.onToggle(value)}
          backgroundColor={"transparent"}
          textColor={colors.white}
          selectedColor={colors.secondary3}
          buttonColor={colors.secondary1}
          borderColor={colors.secondary1}
          hasPadding
          valuePadding={1}
          options={[
            {value: false, customIcon: iconUnlocked},
            {value: true, customIcon: iconLocked}
          ]}/>
      </Container>

The issue also appears whitout the container component around it. Any ideas how to fix this or how this is caused?

Change value according to state

Hi
I did not found a possibility, that the current selected value, can be change without pressing it manually on the screen. Could it be, that there is no way, to change the value according to the current state? I found the state 'selected' and a toogle-fuction in the library-code, but there is no way, to acces this code from outside. Do I miss something? Thank you!
Something like:

<SwitchSelector
    options={options}
    initial={this.state.value}
    value={this.state.value}
    onPress={value => this.toggleButton(value)}
/>

Changing style of Button

Hello,
currently , using props we can change the color of the button "buttonColor".
Is there a way to change the other attributes also, for example the "width" of the button ?

Adjusting Width and height

I cant figure out how to adjust width and height,
I tried putting it inside a container along with other elements but it disappears

Slider Unresponsive on Device

Hi there,

Tested on Android and iOS.. When tapping the slider to 'toggle' the options, it works as expected on simulator with the animation sliding over to the 'tapped' option.

But when testing on device.. the toggle is unresponsive and it doesn't slide over. Any ideas on what is causing this?

Example options:

const currencyOptions = [ { label: 'USD', value: 'USD' }, { label: 'AUD', value: 'AUD' }, { label: 'CAD', value: 'CAD' }, ];

Example use of the component:
<SwitchSelector buttonColor='#404F5B' options={currencyOptions} initial={0} onPress={value => this.selectItemToBuyToggle(value)}/>

What's weird is that it works flawlessly on the iOS sim.. Any help would be appreciated

[Solution] Increasing Touchable opacity area

I've notice that TouchableOpacity wraps only text height inside of switch. It will be nice to wrap whole height of button. I've deleted wrapping view and copied "flex:1" style to the TouchableOpacity. The click area is now much larger, this should fix problems that sometimes user have to click multiple times because his missing text inside switch :D. Please consider pushing that in the next version.
index.js:

import React, { Component } from "react";
import {
Animated,
Easing,
I18nManager,
Image,
PanResponder,
Text,
TouchableOpacity,
View
} from "react-native";

const styles = {
button: {
flex: 1,
flexDirection: "row",
justifyContent: "center",
alignItems: "center",
},
containerButton: {
flexDirection: "row",
flex: 1,
height: 40,
justifyContent: "center",
alignItems: "center"
},
animated: {
borderWidth: 0,
position: "absolute"
}
};

export default class SwitchSelector extends Component {
constructor(props) {
super(props);
this.state = {
selected: this.props.initial ? this.props.initial : 0
};
this.animatedValue = new Animated.Value(
this.props.initial
? I18nManager.isRTL
? -(this.props.initial / this.props.options.length)
: this.props.initial / this.props.options.length
: 0
);
}

componentWillMount() {
this._panResponder = PanResponder.create({
onStartShouldSetPanResponder: this.shouldSetResponder,
onMoveShouldSetPanResponder: this.shouldSetResponder,
onPanResponderRelease: this.responderEnd,
onPanResponderTerminate: this.responderEnd
});
}

componentWillReceiveProps(nextProps) {
if (nextProps.value !== this.props.value) {
this.toggleItem(nextProps.value, !this.props.disableValueChangeOnPress);
}
}

shouldSetResponder = (evt, gestureState) => {
return (
evt.nativeEvent.touches.length === 1 &&
!(Math.abs(gestureState.dx) < 5 && Math.abs(gestureState.dy) < 5)
);
};

responderEnd = (evt, gestureState) => {
if (this.props.disabled) return;
const swipeDirection = this._getSwipeDirection(gestureState);
if (
swipeDirection === "RIGHT" &&
this.state.selected < this.props.options.length - 1
) {
this.toggleItem(this.state.selected + 1);
} else if (swipeDirection === "LEFT" && this.state.selected > 0) {
this.toggleItem(this.state.selected - 1);
}
};

_getSwipeDirection(gestureState) {
const { dx, dy, vx } = gestureState;
// 0.1 velocity
if (Math.abs(vx) > 0.1 && Math.abs(dy) < 80) {
return dx > 0 ? "RIGHT" : "LEFT";
}
return null;
}

getBgColor() {
const { selected } = this.state;
const { options, buttonColor } = this.props;
return options[selected].activeColor || buttonColor;
}

animate = (value, last) => {
this.animatedValue.setValue(last);
Animated.timing(this.animatedValue, {
toValue: value,
duration: this.props.animationDuration,
easing: Easing.cubic,
useNativeDriver: true
}).start();
};

toggleItem = (index, callOnPress = true) => {
const { options, returnObject, onPress } = this.props;
if (options.length <= 1 || index === null || isNaN(index)) return;
this.animate(
I18nManager.isRTL ? -(index / options.length) : index / options.length,
I18nManager.isRTL
? -(this.state.selected / options.length)
: this.state.selected / options.length
);
if (callOnPress && onPress) {
onPress(returnObject ? options[index] : options[index].value);
} else {
console.log("Call onPress with value: ", options[index].value);
}
this.setState({ selected: index });
};

render() {
const {
style,
textStyle,
selectedTextStyle,
imageStyle,
textColor,
selectedColor,
fontSize,
backgroundColor,
borderColor,
borderRadius,
hasPadding,
valuePadding,
height,
bold,
disabled
} = this.props;

const options = this.props.options.map((element, index) => (
  <TouchableOpacity
    key={index}
    disabled={disabled}
    style={styles.button}
    onPress={() => this.toggleItem(index)}
  >
    {typeof element.customIcon === "function"
      ? element.customIcon(this.state.selected == index)
      : element.customIcon}
    {element.imageIcon && (
      <Image
        source={element.imageIcon}
        style={[
          {
            height: 30,
            width: 30,
            tintColor:
              this.state.selected == index ? selectedColor : textColor
          },
          imageStyle
        ]}
      />
    )}
    <Text
      style={[
        {
          fontSize,
          fontWeight: bold ? "bold" : "normal",
          textAlign: "center",
          color: this.state.selected == index ? selectedColor : textColor,
          backgroundColor: "transparent"
        },
        this.state.selected == index ? selectedTextStyle : textStyle
      ]}
    >
      {element.label}
    </Text>
  </TouchableOpacity>
));

return (
  <View style={[{ flexDirection: "row" }, style]}>
    <View {...this._panResponder.panHandlers} style={{ flex: 1 }}>
      <View
        style={{
          borderRadius: borderRadius,
          backgroundColor: backgroundColor,
          height
        }}
        onLayout={event => {
          const { width } = event.nativeEvent.layout;
          this.setState({
            sliderWidth: width - (hasPadding ? 2 : 0)
          });
        }}
      >
        <View
          style={{
            flex: 1,
            flexDirection: "row",
            borderColor: borderColor || "#c9c9c9",
            borderRadius: borderRadius,
            borderWidth: hasPadding ? 1 : 0
          }}
        >
          {!!this.state.sliderWidth && (
            <Animated.View
              style={[
                {
                  height: hasPadding ? height - 4 : height,
                  backgroundColor: this.getBgColor(),
                  width:
                    this.state.sliderWidth / this.props.options.length -
                    (hasPadding ? valuePadding : 0),
                  transform: [
                    {
                      translateX: this.animatedValue.interpolate({
                        inputRange: [0, 1],
                        outputRange: [
                          hasPadding ? valuePadding : 0,
                          this.state.sliderWidth -
                            (hasPadding ? valuePadding : 0)
                        ]
                      })
                    }
                  ],
                  borderRadius: borderRadius,
                  marginTop: hasPadding ? valuePadding : 0
                },
                styles.animated
              ]}
            />
          )}
          {options}
        </View>
      </View>
    </View>
  </View>
);

}
}

SwitchSelector.defaultProps = {
style: {},
textStyle: {},
selectedTextStyle: {},
imageStyle: {},
textColor: "#000000",
selectedColor: "#FFFFFF",
fontSize: 14,
backgroundColor: "#FFFFFF",
borderColor: "#C9C9C9",
borderRadius: 50,
hasPadding: false,
valuePadding: 1,
height: 40,
bold: false,
buttonColor: "#BCD635",
returnObject: false,
animationDuration: 100,
disabled: false,
disableValueChangeOnPress: false
};

Accessibility Label

Hi, if I didn't miss it, I think your component doesn't support accessibility.

I need to pass accessibilityLabel and testID props to touchable for testing purposes.

Is it something you are planning to support?

Thanks in advance for your reply.

Only one is usable per page

Hi,
I love the work you all did but it seems that only one of these components is usable per page and the other doesn't respond at all.
Thanks!
Michael

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.