├── .gitignore ├── .npmignore ├── Accordion.js ├── Affix.js ├── Alert.js ├── Badge.js ├── Button.js ├── ButtonGroup.js ├── ButtonToolbar.js ├── CHANGELOG.md ├── Carousel.js ├── CarouselItem.js ├── Col.js ├── DropdownButton.js ├── DropdownMenu.js ├── Glyphicon.js ├── Grid.js ├── Input.js ├── Jumbotron.js ├── LICENSE ├── Label.js ├── MenuItem.js ├── Modal.js ├── ModalTrigger.js ├── Nav.js ├── NavItem.js ├── Navbar.js ├── OverlayTrigger.js ├── PageHeader.js ├── PageItem.js ├── Pager.js ├── Panel.js ├── PanelGroup.js ├── Popover.js ├── ProgressBar.js ├── README.md ├── Row.js ├── SplitButton.js ├── SubNav.js ├── TabPane.js ├── TabbedArea.js ├── Table.js ├── Tooltip.js ├── Well.js ├── index.js ├── package.json ├── playground ├── carousel.png ├── playground.html ├── playground.js ├── playground.jsx └── style.css └── util ├── BsSize.js ├── BsStyle.js ├── ButtonBsStyle.js ├── ColInt.js ├── Direction.js ├── Glyph.js ├── NavBsStyle.js ├── Placement.js └── PositiveInt.js /.gitignore: -------------------------------------------------------------------------------- 1 | *.log 2 | node_modules 3 | build 4 | dev 5 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | .* 2 | *.log 3 | bower.json 4 | Grunfile.js 5 | tcomb.sjs 6 | node_modules 7 | test 8 | coverage 9 | dev 10 | playground 11 | examples -------------------------------------------------------------------------------- /Accordion.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | var Factory = require('react-bootstrap/Accordion'); 5 | var name = t.react.getDisplayName(Factory); 6 | 7 | var Type = t.struct({ 8 | __tag__: t.enums.of(name, name), 9 | children: t.Any 10 | }, name); 11 | 12 | module.exports = t.react.bind(Factory, Type, {strict: false}); 13 | -------------------------------------------------------------------------------- /Affix.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | var Factory = require('react-bootstrap/Affix'); 5 | var name = t.react.getDisplayName(Factory); 6 | 7 | var Type = t.struct({ 8 | __tag__: t.enums.of(name, name), 9 | offset: t.maybe(t.Num), 10 | offsetTop: t.maybe(t.Num), 11 | offsetBottom: t.maybe(t.Num), 12 | children: t.Any 13 | }, name); 14 | 15 | module.exports = t.react.bind(Factory, Type, {strict: false}); 16 | -------------------------------------------------------------------------------- /Alert.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | var Factory = require('react-bootstrap/Alert'); 5 | var name = t.react.getDisplayName(Factory); 6 | var Nil = t.Nil; 7 | 8 | var BsSize = require('./util/BsSize'); 9 | var PositiveInt = require('./util/PositiveInt'); 10 | var BsStyle = require('./util/BsStyle'); 11 | 12 | var predicate = function (x) { 13 | return !( !Nil.is(x.dismissAfter) && Nil.is(x.onDismiss) ); 14 | }; 15 | predicate.__doc__ = '`onDismiss` specified when `dismissAfter` is specified'; 16 | 17 | var Type = t.subtype(t.struct({ 18 | __tag__: t.enums.of(name, name), 19 | bsStyle: BsStyle, 20 | bsSize: t.maybe(BsSize), 21 | onDismiss: t.maybe(t.Func), 22 | dismissAfter: t.maybe(PositiveInt), 23 | children: t.Any 24 | }, 'UnsafeAlert'), predicate, name); 25 | 26 | module.exports = t.react.bind(Factory, Type, {strict: false}); -------------------------------------------------------------------------------- /Badge.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | var Factory = require('react-bootstrap/Badge'); 5 | var name = t.react.getDisplayName(Factory); 6 | 7 | var Type = t.struct({ 8 | __tag__: t.enums.of(name, name), 9 | pullRight: t.maybe(t.Bool), 10 | children: t.Any 11 | }, name); 12 | 13 | module.exports = t.react.bind(Factory, Type, {strict: false}); 14 | -------------------------------------------------------------------------------- /Button.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | var Factory = require('react-bootstrap/Button'); 5 | var name = t.react.getDisplayName(Factory); 6 | 7 | var BsSize = require('./util/BsSize'); 8 | var ButtonBsStyle = require('./util/ButtonBsStyle'); 9 | 10 | var Type = t.struct({ 11 | __tag__: t.enums.of(name, name), 12 | bsStyle: t.maybe(ButtonBsStyle), 13 | bsSize: t.maybe(BsSize), 14 | active: t.maybe(t.Bool), 15 | disabled: t.maybe(t.Bool), 16 | block: t.maybe(t.Bool), 17 | navItem: t.maybe(t.Bool), 18 | navDropdown: t.maybe(t.Bool), 19 | children: t.Any, 20 | // events 21 | onClick: t.maybe(t.Func) 22 | }, name); 23 | 24 | module.exports = t.react.bind(Factory, Type, {strict: false}); 25 | -------------------------------------------------------------------------------- /ButtonGroup.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | var Factory = require('react-bootstrap/ButtonGroup'); 5 | var name = t.react.getDisplayName(Factory); 6 | 7 | var Button = require('./Button'); 8 | 9 | var Type = t.struct({ 10 | __tag__: t.enums.of(name, name), 11 | vertical: t.maybe(t.Bool), 12 | justified: t.maybe(t.Bool), 13 | children: t.list(Button.type, 'Buttons') 14 | }, name); 15 | 16 | module.exports = t.react.bind(Factory, Type, {strict: false}); 17 | -------------------------------------------------------------------------------- /ButtonToolbar.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | var Factory = require('react-bootstrap/ButtonToolbar'); 5 | 6 | // fix react-bootstrap bug: react-bootstrap/ButtonToolbar has ButtonGroup as displayName 7 | Factory.type.displayName = 'ButtonToolbar'; 8 | 9 | var name = t.react.getDisplayName(Factory); 10 | 11 | var ButtonGroup = require('./ButtonGroup'); 12 | 13 | var Type = t.struct({ 14 | __tag__: t.enums.of(name, name), 15 | children: t.list(ButtonGroup.type, 'ButtonGroups') 16 | }, name); 17 | 18 | module.exports = t.react.bind(Factory, Type, {strict: false}); 19 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | v0.1.3 2 | 3 | - Alert: when `dismissAfter` is specified should enforce `onDismiss`, fix #4 4 | 5 | v0.1.2 6 | 7 | - add react-component keyword to package.json for searchability 8 | 9 | v0.1.1 10 | 11 | - Add react-component tag to package.json, fix #3 12 | 13 | v0.1.0 14 | 15 | - updated to tcomb-react v0.1.0 -------------------------------------------------------------------------------- /Carousel.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | var Factory = require('react-bootstrap/Carousel'); 5 | var name = t.react.getDisplayName(Factory); 6 | 7 | var Direction = require('./util/Direction'); 8 | var CarouselItem = require('./CarouselItem'); 9 | 10 | var Type = t.struct({ 11 | __tag__: t.enums.of(name, name), 12 | slide: t.maybe(t.Bool), 13 | indicators: t.maybe(t.Bool), 14 | controls: t.maybe(t.Bool), 15 | pauseOnHover: t.maybe(t.Bool), 16 | wrap: t.maybe(t.Bool), 17 | onSelect: t.maybe(t.Func), 18 | onSlideEnd: t.maybe(t.Func), 19 | activeIndex: t.maybe(t.Num), 20 | defaultActiveIndex: t.maybe(t.Num), 21 | direction: t.maybe(Direction), 22 | children: t.list(CarouselItem.type, 'CarouselItems') 23 | }, name); 24 | 25 | module.exports = t.react.bind(Factory, Type, {strict: false}); 26 | -------------------------------------------------------------------------------- /CarouselItem.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | var Factory = require('react-bootstrap/CarouselItem'); 5 | var name = t.react.getDisplayName(Factory); 6 | 7 | var Direction = require('./util/Direction'); 8 | 9 | var Type = t.struct({ 10 | __tag__: t.enums.of(name, name), 11 | direction: t.maybe(Direction), 12 | onAnimateOutEnd: t.maybe(t.Func), 13 | active: t.maybe(t.Bool), 14 | caption: t.maybe(t.react.Renderable), 15 | children: t.Any 16 | }, name); 17 | 18 | module.exports = t.react.bind(Factory, Type, {strict: false}); 19 | -------------------------------------------------------------------------------- /Col.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | var Factory = require('react-bootstrap/Col'); 5 | var name = t.react.getDisplayName(Factory); 6 | 7 | var ColInt = require('./util/ColInt'); 8 | 9 | var Type = t.struct({ 10 | __tag__: t.enums.of(name, name), 11 | xs: t.maybe(ColInt), 12 | sm: t.maybe(ColInt), 13 | md: t.maybe(ColInt), 14 | lg: t.maybe(ColInt), 15 | xsOffset: t.maybe(ColInt), 16 | smOffset: t.maybe(ColInt), 17 | mdOffset: t.maybe(ColInt), 18 | lgOffset: t.maybe(ColInt), 19 | xsPush: t.maybe(ColInt), 20 | smPush: t.maybe(ColInt), 21 | mdPush: t.maybe(ColInt), 22 | lgPush: t.maybe(ColInt), 23 | xsPull: t.maybe(ColInt), 24 | smPull: t.maybe(ColInt), 25 | mdPull: t.maybe(ColInt), 26 | lgPull: t.maybe(ColInt), 27 | className: t.maybe(t.Str), 28 | children: t.Any 29 | }, name); 30 | 31 | module.exports = t.react.bind(Factory, Type, {strict: false}); 32 | -------------------------------------------------------------------------------- /DropdownButton.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | var Factory = require('react-bootstrap/DropdownButton'); 5 | var name = t.react.getDisplayName(Factory); 6 | 7 | var BsSize = require('./util/BsSize'); 8 | var ButtonBsStyle = require('./util/ButtonBsStyle'); 9 | var MenuItem = require('./MenuItem'); 10 | 11 | var Type = t.struct({ 12 | __tag__: t.enums.of(name, name), 13 | bsStyle: t.maybe(ButtonBsStyle), 14 | bsSize: t.maybe(BsSize), 15 | pullRight: t.maybe(t.Bool), 16 | dropup: t.maybe(t.Bool), 17 | title: t.maybe(t.react.Renderable), 18 | href: t.maybe(t.Str), 19 | onClick: t.maybe(t.Func), 20 | onSelect: t.maybe(t.Func), 21 | navItem: t.maybe(t.Bool), 22 | key: t.maybe(t.react.Key), 23 | children: t.list(MenuItem.type, 'MenuItems') 24 | }, name); 25 | 26 | module.exports = t.react.bind(Factory, Type, {strict: false}); 27 | -------------------------------------------------------------------------------- /DropdownMenu.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | var Factory = require('react-bootstrap/DropdownMenu'); 5 | var name = t.react.getDisplayName(Factory); 6 | 7 | var BsSize = require('./util/BsSize'); 8 | var ButtonBsStyle = require('./util/ButtonBsStyle'); 9 | var MenuItem = require('./MenuItem'); 10 | 11 | var Type = t.struct({ 12 | __tag__: t.enums.of(name, name), 13 | pullRight: t.maybe(t.Bool), 14 | onSelect: t.maybe(t.Func), 15 | children: t.Any 16 | }, name); 17 | 18 | module.exports = t.react.bind(Factory, Type, {strict: false}); 19 | -------------------------------------------------------------------------------- /Glyphicon.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | var Factory = require('react-bootstrap/Glyphicon'); 5 | var name = t.react.getDisplayName(Factory); 6 | 7 | var Glyph = require('./util/Glyph'); 8 | 9 | var Type = t.struct({ 10 | __tag__: t.enums.of(name, name), 11 | glyph: Glyph 12 | }, name); 13 | 14 | module.exports = t.react.bind(Factory, Type, {strict: false}); 15 | -------------------------------------------------------------------------------- /Grid.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | var Factory = require('react-bootstrap/Grid'); 5 | var name = t.react.getDisplayName(Factory); 6 | 7 | var Type = t.struct({ 8 | __tag__: t.enums.of(name, name), 9 | fluid: t.maybe(t.Bool), 10 | className: t.maybe(t.Str), 11 | children: t.Any 12 | }, name); 13 | 14 | module.exports = t.react.bind(Factory, Type, {strict: false}); 15 | -------------------------------------------------------------------------------- /Input.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | var Factory = require('react-bootstrap/Input'); 5 | var name = t.react.getDisplayName(Factory); 6 | 7 | var InputBsStyle = t.enums.of('success warning error', 'InputBsStyle'); 8 | var InputType = t.enums.of('text password checkbox radio select textarea static', 'InputType'); 9 | 10 | var Type = t.struct({ 11 | __tag__: t.enums.of(name, name), 12 | type: InputType, 13 | bsStyle: t.maybe(InputBsStyle), 14 | label: t.maybe(t.react.Renderable), 15 | help: t.maybe(t.react.Renderable), 16 | addonBefore: t.maybe(t.react.Renderable), 17 | addonAfter: t.maybe(t.react.Renderable), 18 | hasFeedback: t.maybe(t.Bool), 19 | groupClassName: t.maybe(t.Str), 20 | wrapperClassName: t.maybe(t.Str), 21 | labelClassName: t.maybe(t.Str), 22 | checked: t.maybe(t.Bool), 23 | readOnly: t.maybe(t.Bool), 24 | multiple: t.maybe(t.Bool), 25 | value: t.maybe(t.Str), 26 | defaultValue: t.maybe(t.Str), 27 | ref: t.maybe(t.react.Ref), 28 | children: t.Any, 29 | // events 30 | onClick: t.maybe(t.Func), 31 | onChange: t.maybe(t.Func) 32 | }, name); 33 | 34 | module.exports = t.react.bind(Factory, Type, {strict: false}); 35 | -------------------------------------------------------------------------------- /Jumbotron.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | var Factory = require('react-bootstrap/Jumbotron'); 5 | var name = t.react.getDisplayName(Factory); 6 | 7 | var Type = t.struct({ 8 | __tag__: t.enums.of(name, name), 9 | children: t.Any 10 | }, name); 11 | 12 | module.exports = t.react.bind(Factory, Type, {strict: false}); 13 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 Giulio Canti 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Label.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | var Factory = require('react-bootstrap/Label'); 5 | var name = t.react.getDisplayName(Factory); 6 | 7 | var Type = t.struct({ 8 | __tag__: t.enums.of(name, name), 9 | className: t.maybe(t.Str), 10 | children: t.Any 11 | }, name); 12 | 13 | module.exports = t.react.bind(Factory, Type, {strict: false}); 14 | -------------------------------------------------------------------------------- /MenuItem.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | var Factory = require('react-bootstrap/MenuItem'); 5 | var name = t.react.getDisplayName(Factory); 6 | 7 | var predicate = function (x) { 8 | return (x.divider && t.Nil.is(x.children)) || (!x.divider && !t.Nil.is(x.children)); 9 | }; 10 | predicate.__doc__ = 'divider = true and no children or divider = false and children'; 11 | 12 | var Type = t.subtype(t.struct({ 13 | __tag__: t.enums.of(name, name), 14 | header: t.maybe(t.Bool), 15 | divider: t.maybe(t.Bool), 16 | href: t.maybe(t.Str), 17 | title: t.maybe(t.Str), 18 | onSelect: t.maybe(t.Func), 19 | key: t.maybe(t.react.Key), 20 | children: t.maybe(t.Any), 21 | onClick: t.maybe(t.Func) 22 | }), predicate, name); 23 | 24 | module.exports = t.react.bind(Factory, Type, {strict: false}); 25 | -------------------------------------------------------------------------------- /Modal.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | var Factory = require('react-bootstrap/Modal'); 5 | var name = t.react.getDisplayName(Factory); 6 | 7 | var Static = t.enums.of('static', 'Static'); 8 | var Backdrop = t.union([Static, t.Bool], 'Backdrop'); 9 | Backdrop.dispatch = function (x) { 10 | if (t.Bool.is(x)) { return t.Bool; } 11 | if (Static.is(x)) { return Static; } 12 | }; 13 | 14 | var Type = t.struct({ 15 | __tag__: t.enums.of(name, name), 16 | title: t.maybe(t.react.Renderable), 17 | backdrop: t.maybe(Backdrop), 18 | keyboard: t.maybe(t.Bool), 19 | closeButton: t.maybe(t.Bool), 20 | animation: t.maybe(t.Bool), 21 | onRequestHide: t.Func, 22 | children: t.Any 23 | }, name); 24 | 25 | module.exports = t.react.bind(Factory, Type, {strict: false}); 26 | -------------------------------------------------------------------------------- /ModalTrigger.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | var Factory = require('react-bootstrap/ModalTrigger'); 5 | var name = t.react.getDisplayName(Factory); 6 | 7 | var Type = t.struct({ 8 | __tag__: t.enums.of(name, name), 9 | container: t.maybe(t.react.Mountable), 10 | children: t.Any 11 | }, name); 12 | 13 | module.exports = t.react.bind(Factory, Type, {strict: false}); 14 | -------------------------------------------------------------------------------- /Nav.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | var Factory = require('react-bootstrap/Nav'); 5 | var name = t.react.getDisplayName(Factory); 6 | 7 | var NavBsStyle = require('./util/NavBsStyle'); 8 | 9 | var Type = t.struct({ 10 | __tag__: t.enums.of(name, name), 11 | bsStyle: t.maybe(NavBsStyle), 12 | stacked: t.maybe(t.Bool), 13 | justified: t.maybe(t.Bool), 14 | onSelect: t.maybe(t.Func), 15 | collapsable: t.maybe(t.Bool), 16 | expanded: t.maybe(t.Bool), 17 | defaultExpanded: t.maybe(t.Bool), 18 | navbar: t.maybe(t.Bool), 19 | activeKey: t.maybe(t.react.Key), 20 | children: t.Any 21 | }, name); 22 | 23 | module.exports = t.react.bind(Factory, Type, {strict: false}); 24 | -------------------------------------------------------------------------------- /NavItem.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | var Factory = require('react-bootstrap/NavItem'); 5 | var name = t.react.getDisplayName(Factory); 6 | 7 | var Type = t.struct({ 8 | __tag__: t.enums.of(name, name), 9 | onSelect: t.maybe(t.Func), 10 | active: t.maybe(t.Bool), 11 | disabled: t.maybe(t.Bool), 12 | href: t.maybe(t.Str), 13 | title: t.maybe(t.Str), 14 | key: t.maybe(t.react.Key), 15 | children: t.Any 16 | }, name); 17 | 18 | module.exports = t.react.bind(Factory, Type, {strict: false}); 19 | -------------------------------------------------------------------------------- /Navbar.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | var Factory = require('react-bootstrap/Navbar'); 5 | var name = t.react.getDisplayName(Factory); 6 | 7 | var Type = t.struct({ 8 | __tag__: t.enums.of(name, name), 9 | fixedTop: t.maybe(t.Bool), 10 | fixedBottom: t.maybe(t.Bool), 11 | staticTop: t.maybe(t.Bool), 12 | inverse: t.maybe(t.Bool), 13 | fluid: t.maybe(t.Bool), 14 | role: t.maybe(t.Str), 15 | brand: t.maybe(t.react.Renderable), 16 | toggleButton: t.maybe(t.react.Renderable), 17 | onToggle: t.maybe(t.Func), 18 | navExpanded: t.maybe(t.Bool), 19 | defaultNavExpanded: t.maybe(t.Bool), 20 | children: t.Any 21 | }, name); 22 | 23 | module.exports = t.react.bind(Factory, Type, {strict: false}); 24 | -------------------------------------------------------------------------------- /OverlayTrigger.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | var Factory = require('react-bootstrap/OverlayTrigger'); 5 | var name = t.react.getDisplayName(Factory); 6 | 7 | var PositiveInt = require('./util/PositiveInt'); 8 | var Placement = require('./util/Placement'); 9 | var TriggerA = t.enums.of('manual click hover focus', 'TriggerA'); // TODO understand what exactly are these types in react-bootstrap 10 | var TriggerB = t.enums.of('click hover focus', 'TriggerB'); 11 | var TriggerC = t.list(TriggerB, 'TriggerC'); 12 | var Trigger = t.union([TriggerA, TriggerC], 'Trigger'); 13 | 14 | var Type = t.struct({ 15 | __tag__: t.enums.of(name, name), 16 | container: t.maybe(t.react.Mountable), 17 | trigger: t.maybe(Trigger), 18 | placement: t.maybe(Placement), 19 | delay: t.maybe(PositiveInt), 20 | delayShow: t.maybe(PositiveInt), 21 | delayHide: t.maybe(PositiveInt), 22 | defaultOverlayShown: t.maybe(t.Bool), 23 | overlay: t.react.Renderable, 24 | children: t.Any 25 | }, name); 26 | 27 | module.exports = t.react.bind(Factory, Type, {strict: false}); 28 | -------------------------------------------------------------------------------- /PageHeader.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | var Factory = require('react-bootstrap/PageHeader'); 5 | var name = t.react.getDisplayName(Factory); 6 | 7 | var Type = t.struct({ 8 | __tag__: t.enums.of(name, name), 9 | children: t.Any 10 | }, name); 11 | 12 | module.exports = t.react.bind(Factory, Type, {strict: false}); 13 | -------------------------------------------------------------------------------- /PageItem.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | var Factory = require('react-bootstrap/PageItem'); 5 | var name = t.react.getDisplayName(Factory); 6 | 7 | var Type = t.struct({ 8 | __tag__: t.enums.of(name, name), 9 | disabled: t.maybe(t.Bool), 10 | previous: t.maybe(t.Bool), 11 | next: t.maybe(t.Bool), 12 | onSelect: t.maybe(t.Func), 13 | href: t.maybe(t.Str), 14 | children: t.Any 15 | }, name); 16 | 17 | module.exports = t.react.bind(Factory, Type, {strict: false}); 18 | -------------------------------------------------------------------------------- /Pager.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | var Factory = require('react-bootstrap/Pager'); 5 | var name = t.react.getDisplayName(Factory); 6 | 7 | var PageItem = require('./PageItem'); 8 | 9 | var Type = t.struct({ 10 | __tag__: t.enums.of(name, name), 11 | onSelect: t.maybe(t.Func), 12 | children: t.list(PageItem.type, 'PageItems') 13 | }, name); 14 | 15 | module.exports = t.react.bind(Factory, Type, {strict: false}); 16 | -------------------------------------------------------------------------------- /Panel.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | var Factory = require('react-bootstrap/Panel'); 5 | var name = t.react.getDisplayName(Factory); 6 | 7 | var PanelBsStyle = t.enums.of('primary info success warning danger', 'PanelBsStyle'); 8 | 9 | var Type = t.struct({ 10 | __tag__: t.enums.of(name, name), 11 | bsStyle: t.maybe(PanelBsStyle), 12 | header: t.maybe(t.react.Renderable), 13 | footer: t.maybe(t.react.Renderable), 14 | onClick: t.maybe(t.Func), 15 | key: t.maybe(t.react.Key), 16 | children: t.Any, 17 | // collapse 18 | collapsable: t.maybe(t.Bool), 19 | defaultExpanded: t.maybe(t.Bool), 20 | expanded: t.maybe(t.Bool) 21 | }, name); 22 | 23 | module.exports = t.react.bind(Factory, Type, {strict: false}); 24 | -------------------------------------------------------------------------------- /PanelGroup.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | var Factory = require('react-bootstrap/PanelGroup'); 5 | var name = t.react.getDisplayName(Factory); 6 | 7 | var Panel = require('./Panel'); 8 | 9 | var Type = t.struct({ 10 | __tag__: t.enums.of(name, name), 11 | collapsable: t.maybe(t.Bool), 12 | activeKey: t.maybe(t.react.Key), 13 | defaultActiveKey: t.maybe(t.react.Key), 14 | onSelect: t.maybe(t.Func), 15 | accordion: t.maybe(t.Bool), 16 | children: t.list(Panel.type, 'Panels') 17 | }, name); 18 | 19 | module.exports = t.react.bind(Factory, Type, {strict: false}); 20 | -------------------------------------------------------------------------------- /Popover.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | var Factory = require('react-bootstrap/Popover'); 5 | var name = t.react.getDisplayName(Factory); 6 | 7 | var Placement = require('./util/Placement'); 8 | 9 | var Type = t.struct({ 10 | __tag__: t.enums.of(name, name), 11 | placement: Placement, 12 | positionLeft: t.maybe(t.Num), 13 | positionTop: t.maybe(t.Num), 14 | arrowOffsetLeft: t.maybe(t.Num), 15 | arrowOffsetTop: t.maybe(t.Num), 16 | title: t.maybe(t.react.Renderable), 17 | children: t.Any 18 | }, name); 19 | 20 | module.exports = t.react.bind(Factory, Type, {strict: false}); 21 | -------------------------------------------------------------------------------- /ProgressBar.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | var Factory = require('react-bootstrap/ProgressBar'); 5 | var name = t.react.getDisplayName(Factory); 6 | 7 | var BsStyle = require('./util/BsStyle'); 8 | 9 | var Type = t.struct({ 10 | __tag__: t.enums.of(name, name), 11 | bsStyle: BsStyle, 12 | min: t.maybe(t.Num), 13 | now: t.maybe(t.Num), 14 | max: t.maybe(t.Num), 15 | label: t.Any, 16 | srOnly: t.maybe(t.Bool), 17 | striped: t.maybe(t.Bool), 18 | active: t.maybe(t.Bool), 19 | children: t.Any 20 | }, name); 21 | 22 | module.exports = t.react.bind(Factory, Type, {strict: false}); 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | % tcomb-react-bootstrap 2 | 3 | ![tcomb logo](http://gcanti.github.io/resources/tcomb/logo.png) 4 | 5 | This project adds a type checking layer to the components of [react-bootstrap](https://github.com/react-bootstrap/react-bootstrap). 6 | 7 | If you want to **add type checking to your own React components**, see [here](https://github.com/gcanti/tcomb-react). 8 | 9 | # Playground 10 | 11 | Try the playground [here](https://gcanti.github.io/resources/tcomb-react-bootstrap/playground/playground.html) 12 | 13 | # Constraint examples 14 | 15 | Some constraints among others enforced by this library: 16 | 17 | - `Alert`: `onDismiss` and `dismissAfter` must either or neither passed 18 | - `ButtonGroup`: can have only `Button` children 19 | - `Col`: props must be integers between 1 and 12 20 | - `Glyphicon`: can't have children 21 | - `Nav`: bsStyle must be one of `pills`, `tabs` 22 | 23 | For now the constraints are quite relaxed in order to allow an easier demo, however they can be tighten up to the point of accepting 24 | only whitelisted props. 25 | 26 | # Usage 27 | 28 | ```js 29 | /** @jsx React.DOM */ 30 | // development 31 | var Alert = require('tcomb-react-bootstrap/Alert'); 32 | // production 33 | // var Alert = require('react-bootstrap/Alert'); 34 | 35 | var good = ( 36 | 37 | Holy guacamole! 38 | 39 | ); // => ok! 40 | 41 | var bad = ( 42 | // <-- should be "warning" 43 | Holy guacamole! 44 | 45 | ); // => fail! debugger kicks in 46 | ``` 47 | 48 | # Setup 49 | 50 | npm install tcomb-react-bootstrap 51 | 52 | # License (MIT) 53 | -------------------------------------------------------------------------------- /Row.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | var Factory = require('react-bootstrap/Row'); 5 | var name = t.react.getDisplayName(Factory); 6 | 7 | var Type = t.struct({ 8 | __tag__: t.enums.of(name, name), 9 | className: t.maybe(t.Str), 10 | children: t.Any 11 | }, name); 12 | 13 | module.exports = t.react.bind(Factory, Type, {strict: false}); 14 | -------------------------------------------------------------------------------- /SplitButton.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | var Factory = require('react-bootstrap/SplitButton'); 5 | var name = t.react.getDisplayName(Factory); 6 | 7 | var BsSize = require('./util/BsSize'); 8 | var ButtonBsStyle = require('./util/ButtonBsStyle'); 9 | 10 | var Type = t.struct({ 11 | __tag__: t.enums.of(name, name), 12 | bsStyle: t.maybe(ButtonBsStyle), 13 | bsSize: t.maybe(BsSize), 14 | pullRight: t.maybe(t.Bool), 15 | title: t.maybe(t.react.Renderable), 16 | href: t.maybe(t.Str), 17 | dropdownTitle: t.maybe(t.react.Renderable), 18 | onClick: t.maybe(t.Func), 19 | onSelect: t.maybe(t.Func), 20 | disabled: t.maybe(t.Bool), 21 | children: t.Any 22 | }, name); 23 | 24 | module.exports = t.react.bind(Factory, Type, {strict: false}); 25 | -------------------------------------------------------------------------------- /SubNav.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | var Factory = require('react-bootstrap/SubNav'); 5 | var name = t.react.getDisplayName(Factory); 6 | 7 | var Type = t.struct({ 8 | __tag__: t.enums.of(name, name), 9 | onSelect: t.maybe(t.Func), 10 | active: t.maybe(t.Bool), 11 | disabled: t.maybe(t.Bool), 12 | href: t.maybe(t.Str), 13 | title: t.maybe(t.Str), 14 | text: t.maybe(t.react.Renderable), 15 | children: t.Any 16 | }, name); 17 | 18 | module.exports = t.react.bind(Factory, Type, {strict: false}); 19 | -------------------------------------------------------------------------------- /TabPane.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | var Factory = require('react-bootstrap/TabPane'); 5 | var name = t.react.getDisplayName(Factory); 6 | 7 | var Type = t.struct({ 8 | __tag__: t.enums.of(name, name), 9 | key: t.maybe(t.react.Key), 10 | tab: t.maybe(t.Str), 11 | children: t.Any 12 | }, name); 13 | 14 | module.exports = t.react.bind(Factory, Type, {strict: false}); 15 | -------------------------------------------------------------------------------- /TabbedArea.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | var Factory = require('react-bootstrap/TabbedArea'); 5 | var name = t.react.getDisplayName(Factory); 6 | 7 | var NavBsStyle = require('./util/NavBsStyle'); 8 | var TabPane = require('./TabPane'); 9 | 10 | var Type = t.struct({ 11 | __tag__: t.enums.of(name, name), 12 | bsStyle: t.maybe(NavBsStyle), 13 | animation: t.maybe(t.Bool), 14 | onSelect: t.maybe(t.Func), 15 | defaultActiveKey: t.maybe(t.react.Key), 16 | children: t.list(TabPane.type, 'TabPanes') 17 | }, name); 18 | 19 | module.exports = t.react.bind(Factory, Type, {strict: false}); 20 | -------------------------------------------------------------------------------- /Table.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | var Factory = require('react-bootstrap/Table'); 5 | var name = t.react.getDisplayName(Factory); 6 | 7 | var Type = t.struct({ 8 | __tag__: t.enums.of(name, name), 9 | striped: t.maybe(t.Bool), 10 | bordered: t.maybe(t.Bool), 11 | condensed: t.maybe(t.Bool), 12 | hover: t.maybe(t.Bool), 13 | responsive: t.maybe(t.Bool), 14 | children: t.Any 15 | }, name); 16 | 17 | module.exports = t.react.bind(Factory, Type, {strict: false}); 18 | -------------------------------------------------------------------------------- /Tooltip.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | var Factory = require('react-bootstrap/Tooltip'); 5 | var name = t.react.getDisplayName(Factory); 6 | 7 | var Placement = require('./util/Placement'); 8 | 9 | var Type = t.struct({ 10 | __tag__: t.enums.of(name, name), 11 | placement: t.maybe(Placement), 12 | positionLeft: t.maybe(t.Num), 13 | positionTop: t.maybe(t.Num), 14 | arrowOffsetLeft: t.maybe(t.Num), 15 | arrowOffsetTop: t.maybe(t.Num), 16 | children: t.Any 17 | }, name); 18 | 19 | module.exports = t.react.bind(Factory, Type, {strict: false}); 20 | -------------------------------------------------------------------------------- /Well.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | var Factory = require('react-bootstrap/Well'); 5 | var name = t.react.getDisplayName(Factory); 6 | 7 | var BsSize = require('./util/BsSize'); 8 | 9 | var Type = t.struct({ 10 | __tag__: t.enums.of(name, name), 11 | bsSize: t.maybe(BsSize), 12 | children: t.Any 13 | }, name); 14 | 15 | module.exports = t.react.bind(Factory, Type, {strict: false}); 16 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | Accordion: require('./Accordion'), 3 | Affix: require('./Affix'), 4 | Alert: require('./Alert'), 5 | Badge: require('./Badge'), 6 | Button: require('./Button'), 7 | ButtonGroup: require('./ButtonGroup'), 8 | ButtonToolbar: require('./ButtonToolbar'), 9 | Carousel: require('./Carousel'), 10 | CarouselItem: require('./CarouselItem'), 11 | Col: require('./Col'), 12 | DropdownButton: require('./DropdownButton'), 13 | DropdownMenu: require('./DropdownMenu'), 14 | Glyphicon: require('./Glyphicon'), 15 | Grid: require('./Grid'), 16 | Input: require('./Input'), 17 | Jumbotron: require('./Jumbotron'), 18 | Label: require('./Label'), 19 | MenuItem: require('./MenuItem'), 20 | Modal: require('./Modal'), 21 | Nav: require('./Nav'), 22 | Navbar: require('./Navbar'), 23 | NavItem: require('./NavItem'), 24 | ModalTrigger: require('./ModalTrigger'), 25 | OverlayTrigger: require('./OverlayTrigger'), 26 | PageHeader: require('./PageHeader'), 27 | Panel: require('./Panel'), 28 | PanelGroup: require('./PanelGroup'), 29 | PageItem: require('./PageItem'), 30 | Pager: require('./Pager'), 31 | Popover: require('./Popover'), 32 | ProgressBar: require('./ProgressBar'), 33 | Row: require('./Row'), 34 | SplitButton: require('./SplitButton'), 35 | SubNav: require('./SubNav'), 36 | TabbedArea: require('./TabbedArea'), 37 | Table: require('./Table'), 38 | TabPane: require('./TabPane'), 39 | Tooltip: require('./Tooltip'), 40 | Well: require('./Well') 41 | }; -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tcomb-react-bootstrap", 3 | "version": "0.1.3", 4 | "description": "Type checking for react-bootstrap", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "mocha", 8 | "dev": "watchify index.js -o dev/tcomb-react-bootstrap.js -r ./index.js:tcomb-react-bootstrap -r react -v", 9 | "playground": "watchify -t reactify playground/playground.jsx -o playground/playground.js -r react -r tcomb -r ./index:tcomb-react-bootstrap -r tcomb-doc -v" 10 | }, 11 | "repository": { 12 | "type": "git", 13 | "url": "https://github.com/gcanti/tcomb-react-bootstrap.git" 14 | }, 15 | "author": "Giulio Canti ", 16 | "license": "MIT", 17 | "bugs": { 18 | "url": "https://github.com/gcanti/tcomb-react-bootstrap/issues" 19 | }, 20 | "homepage": "https://github.com/gcanti/tcomb-react-bootstrap", 21 | "dependencies": { 22 | "react": "~0.11.1", 23 | "react-bootstrap": "~0.11.1", 24 | "tcomb-react": "~0.1.0" 25 | }, 26 | "devDependencies": { 27 | "tcomb-doc": "~0.2.2" 28 | }, 29 | "tags": [ 30 | "react", 31 | "bootstrap", 32 | "tcomb", 33 | "react-component" 34 | ], 35 | "keywords": [ 36 | "react", 37 | "bootstrap", 38 | "tcomb", 39 | "react-component" 40 | ] 41 | } 42 | -------------------------------------------------------------------------------- /playground/carousel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gcanti/tcomb-react-bootstrap/454a410a17aea0159a2a4e220493403149df81b2/playground/carousel.png -------------------------------------------------------------------------------- /playground/playground.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Type checking for react-bootstrap 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 |
19 | 20 |
21 |
22 | 26 | 28 | 30 | 36 | 50 | 74 | 82 | 99 | 116 | 124 | 130 | 144 | 149 | 154 | 160 | 167 | 175 | 184 | 214 | 218 | 223 | 224 | Fork me on GitHub 225 | 226 | 227 | 228 | -------------------------------------------------------------------------------- /playground/playground.jsx: -------------------------------------------------------------------------------- 1 | /** @jsx React.DOM */ 2 | $(function () { 3 | 4 | 'use strict'; 5 | 6 | var t = require('tcomb'); 7 | var doc = require('tcomb-doc'); 8 | var React = require('react'); 9 | var bs = require('tcomb-react-bootstrap'); 10 | 11 | var Col = bs.Col; 12 | var Row = bs.Row; 13 | var CarouselItem = bs.CarouselItem; 14 | var MenuItem = bs.MenuItem; 15 | var NavItem = bs.NavItem; 16 | var Panel = bs.Panel; 17 | var PageItem = bs.PageItem; 18 | var MenuItem = bs.MenuItem; 19 | var TabPane = bs.TabPane; 20 | 21 | var components = [ 22 | "Alert", 23 | "Badge", 24 | "Button", 25 | "ButtonGroup", 26 | "ButtonToolbar", 27 | "Carousel", 28 | "DropdownButton", 29 | "Glyphicon", 30 | "Input", 31 | "Modal", 32 | "Nav", 33 | "Navbar", 34 | "PanelGroup", 35 | "Pager", 36 | "Popover", 37 | "ProgressBar", 38 | "SplitButton", 39 | "TabbedArea", 40 | "Table", 41 | "Tooltip", 42 | "Well" 43 | ]; 44 | 45 | // 46 | // import all components 47 | // 48 | components.forEach(function (k) { 49 | window[k] = bs[k]; 50 | }); 51 | // 52 | // import all examples 53 | // 54 | var examples = {}; 55 | var options = components.map(function (k) { 56 | return ; 57 | }); 58 | 59 | components.forEach(function (k) { 60 | var $example = $('#' + k); 61 | if ($example.length) { 62 | examples[k] = $example.text(); 63 | } else { 64 | console.warn('missing %s', k) 65 | } 66 | }); 67 | 68 | // if true, open the debugger when a failure occurs 69 | var isDebuggerEnabled = false; 70 | 71 | // override default fail behaviour of tcomb https://github.com/gcanti/tcomb 72 | t.options.onFail = function (message) { 73 | if (isDebuggerEnabled) { 74 | debugger; 75 | } 76 | throw new Error(message); 77 | }; 78 | 79 | // 80 | // utils 81 | // 82 | 83 | // return the HTML documentation of a component 84 | function toMarkdown(componentName) { 85 | var domain = {}; 86 | domain[componentName] = bs[componentName].type; 87 | // tcomb-doc 88 | var json = doc.parse(domain).toJSON(); 89 | var markdown = doc.toMarkdown(json); 90 | return marked(markdown); 91 | } 92 | 93 | var Documentation = React.createClass({ 94 | render: function () { 95 | return ( 96 |
97 |

Check out the documentation (auto generated from the underlying domain model):

98 |

maybe(Type) means an optional instance of Type

99 |
100 |
101 | ); 102 | } 103 | }); 104 | 105 | // display error and related documentation 106 | function getErrorAlert(err, componentName){ 107 | var isSyntaxError = !!err.lineNumber; 108 | var message = err.message; 109 | return ( 110 |
111 | 112 | {message} 113 | 114 | { isSyntaxError ? "" : 115 | 116 | } 117 |
118 | ); 119 | } 120 | 121 | var JSX_PREAMBLE = '/** @jsx React.DOM */\n'; 122 | 123 | // handler for Button component 124 | var onClick = function () { 125 | console.log('Click!'); 126 | }; 127 | 128 | // handler for the Modal component 129 | function handleHide() { 130 | $('.modal').hide(); 131 | } 132 | 133 | // 134 | // UI components 135 | // 136 | 137 | var Header = React.createClass({ 138 | render: function () { 139 | return ( 140 | 141 | 142 |

tcomb-react-bootstrap Playground

143 |

Type checking for react-bootstrap

144 | 145 | 146 |
147 |

This library adds a type checking layer to 148 | the components of react-bootstrap. When a error occurs, say a bad value for an attribute, 149 | the debugger kicks in so you can inspect the stack and quickly find out what's wrong. 150 |

151 |

My other projects

152 |
153 | 154 |
155 | ); 156 | } 157 | }); 158 | 159 | var Code = React.createClass({ 160 | render: function () { 161 | return ( 162 |
163 |
{JSX_PREAMBLE}
164 | 169 |
170 | ); 171 | } 172 | }); 173 | 174 | var Preview = React.createClass({ 175 | render: function () { 176 | return ( 177 |
{this.props.component}
178 | ); 179 | } 180 | }); 181 | 182 | var defaultComponent = 'Alert'; 183 | 184 | var Example = React.createClass({ 185 | render: function () { 186 | return ( 187 | 188 | {options} 189 | 190 | ); 191 | } 192 | }); 193 | 194 | var Main = React.createClass({ 195 | getInitialState: function () { 196 | return { 197 | code: examples[defaultComponent], 198 | name: defaultComponent 199 | }; 200 | }, 201 | eval: function (code) { 202 | try { 203 | var js = JSXTransformer.transform(code).code; 204 | return eval(js); 205 | } catch (e) { 206 | return getErrorAlert(e, this.state.name); 207 | } 208 | }, 209 | onExampleChange: function (evt) { 210 | var value = evt.target.value; 211 | var code = examples[value]; 212 | this.setState({code: code, name: value}); 213 | }, 214 | onCodeChange: function (evt) { 215 | var code = evt.target.value; 216 | this.setState({code: code, name: this.state.name}); 217 | }, 218 | onDebuggerChange: function (evt) { 219 | isDebuggerEnabled = evt.target.checked; 220 | }, 221 | render: function () { 222 | var code = this.state.code; 223 | var component = this.eval(JSX_PREAMBLE + code); 224 | var debuggerLabel =

Enable debugger (remember to open up the console)

; 225 | return ( 226 |
227 |
228 | 229 | 230 |

Choose an example

231 | 232 |

Try to change the bsStyle attribute

233 | 234 | 235 | 236 | 237 |

Preview

238 | 239 | 240 |
241 |
242 | ); 243 | } 244 | }); 245 | 246 | // 247 | // run 248 | // 249 | var main =
; 250 | React.renderComponent(main, document.getElementById('app')); 251 | 252 | }); 253 | 254 | -------------------------------------------------------------------------------- /playground/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | color: #333; 3 | } 4 | 5 | .header { 6 | border-bottom: 1px solid #eee; 7 | padding-bottom: 20px; 8 | margin-bottom: 20px; 9 | } 10 | .header .img-circle { 11 | padding: 10px; 12 | border: 1px solid #eee; 13 | } 14 | 15 | .repo-link { 16 | padding: 40px 0 0 0; 17 | } 18 | 19 | textarea.form-control { 20 | font-family: Menlo, Consolas, monospace; 21 | font-size: 12px; 22 | height: 200px; 23 | } 24 | 25 | pre { 26 | background-color: #fff; 27 | border-width: 0; 28 | } 29 | 30 | pre.jsx-preamble { 31 | border-width: 1px; 32 | background-color: #f5f5f5; 33 | margin-bottom: -5px; 34 | } 35 | 36 | .docs { 37 | margin-top: 50px; 38 | color: #555; 39 | } 40 | .docs p.lead { 41 | border-bottom: 1px solid #eee; 42 | } 43 | .docs code { 44 | padding: 0; 45 | background-color: inherit; 46 | color: #000; 47 | } 48 | 49 | .comment { 50 | color: #999; 51 | } -------------------------------------------------------------------------------- /util/BsSize.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | 5 | module.exports = t.enums.of('large medium small xsmall', 'BsSize'); 6 | -------------------------------------------------------------------------------- /util/BsStyle.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | 5 | module.exports = t.enums.of('info success warning danger', 'BsStyle'); 6 | -------------------------------------------------------------------------------- /util/ButtonBsStyle.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | 5 | module.exports = t.enums.of('default primary link info success warning danger', 'ButtonBsStyle'); 6 | -------------------------------------------------------------------------------- /util/ColInt.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | 5 | module.exports = t.subtype(t.Num, function (n) { 6 | return n >= 1 && n <= 12 && n === parseInt(n, 10); 7 | }, 'ColInt'); -------------------------------------------------------------------------------- /util/Direction.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | 5 | module.exports = t.enums.of('prev next', 'Direction'); -------------------------------------------------------------------------------- /util/Glyph.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | var constants = require('react-bootstrap/constants'); 5 | 6 | module.exports = t.enums.of(constants.GLYPHS, 'Glyph'); 7 | 8 | -------------------------------------------------------------------------------- /util/NavBsStyle.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | 5 | module.exports = t.enums.of('pills tabs', 'NavBsStyle'); 6 | -------------------------------------------------------------------------------- /util/Placement.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | 5 | module.exports = t.enums.of('top right bottom left', 'Placement'); 6 | -------------------------------------------------------------------------------- /util/PositiveInt.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var t = require('tcomb-react'); 4 | 5 | module.exports = t.subtype(t.Num, function (n) { 6 | return n >= 0 && n === parseInt(n, 10); 7 | }, 'PositiveInt'); --------------------------------------------------------------------------------