lanes 0.1.9 → 0.1.9.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (447) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/client/fonts/fontawesome-webfont.woff +0 -0
  4. data/client/fonts/fontawesome-webfont.woff2 +0 -0
  5. data/client/lanes/Boot.cjsx +9 -0
  6. data/client/lanes/access/Extension.coffee +18 -4
  7. data/client/lanes/access/LoginDialog.cjsx +78 -0
  8. data/client/lanes/access/Roles.coffee +22 -28
  9. data/client/lanes/access/User.coffee +16 -16
  10. data/client/lanes/access/index.js +4 -5
  11. data/client/lanes/access/screens/user-management/Editor.cjsx +20 -0
  12. data/client/lanes/access/screens/user-management/UserManagement.cjsx +41 -0
  13. data/client/lanes/access/screens/user-management/index.js +0 -1
  14. data/client/lanes/components/grid/EditingMixin.cjsx +64 -0
  15. data/client/lanes/components/grid/Grid.cjsx +139 -0
  16. data/client/lanes/components/grid/PopOverMixin.cjsx +28 -0
  17. data/client/lanes/components/grid/PopoverEditor.cjsx +8 -0
  18. data/client/lanes/components/grid/RowEditor.cjsx +10 -0
  19. data/client/lanes/components/grid/Toolbar.cjsx +14 -0
  20. data/client/lanes/components/grid/config.json +1 -1
  21. data/client/lanes/components/grid/editors.scss +94 -53
  22. data/client/lanes/components/grid/index.js +2 -7
  23. data/client/lanes/components/grid/styles.scss +8 -296
  24. data/client/lanes/components/helpers.coffee +2 -0
  25. data/client/lanes/components/index.js +2 -1
  26. data/client/lanes/components/modal/Modal.cjsx +36 -0
  27. data/client/lanes/components/modal/index.js +1 -2
  28. data/client/lanes/components/modal/styles.scss +0 -19
  29. data/client/lanes/components/record-finder/Clause.cjsx +80 -0
  30. data/client/lanes/components/record-finder/Dialog.cjsx +54 -0
  31. data/client/lanes/components/record-finder/RecordFinder.cjsx +38 -0
  32. data/client/lanes/components/record-finder/config.json +1 -1
  33. data/client/lanes/components/record-finder/index.js +1 -2
  34. data/client/lanes/components/request-spinner/index.js +1 -0
  35. data/client/lanes/components/select-field/SelectField.cjsx +78 -0
  36. data/client/lanes/components/select-field/index.js +2 -1
  37. data/client/lanes/components/select-field/styles.scss +1 -0
  38. data/client/lanes/components/shared/CountBadge.cjsx +9 -0
  39. data/client/lanes/components/shared/ErrorDisplay.cjsx +21 -0
  40. data/client/lanes/components/shared/FieldMixin.cjsx +71 -0
  41. data/client/lanes/components/shared/FieldSet.cjsx +58 -0
  42. data/client/lanes/components/shared/GenericField.cjsx +5 -0
  43. data/client/lanes/components/shared/Helpers.coffee +9 -0
  44. data/client/lanes/components/shared/RadioField.cjsx +14 -0
  45. data/client/lanes/components/shared/Resize.cjsx +152 -0
  46. data/client/lanes/components/shared/TextArea.cjsx +19 -0
  47. data/client/lanes/components/shared/TextField.cjsx +25 -0
  48. data/client/lanes/components/shared/Tooltip.cjsx +10 -0
  49. data/client/lanes/components/shared/fields.scss +35 -0
  50. data/client/lanes/components/shared/fieldset.scss +29 -0
  51. data/client/lanes/components/shared/index.js +3 -0
  52. data/client/lanes/components/shared/styles.scss +32 -0
  53. data/client/lanes/components/toolbar/RemoteChangeSets.cjsx +75 -0
  54. data/client/lanes/components/toolbar/SaveButton.cjsx +3 -0
  55. data/client/lanes/components/toolbar/Toolbar.cjsx +58 -0
  56. data/client/lanes/{workspace/styles → components/toolbar}/changes-notification.scss +10 -23
  57. data/client/lanes/components/toolbar/index.js +3 -0
  58. data/client/lanes/components/toolbar/styles.scss +51 -0
  59. data/client/lanes/extension/Extensions.coffee +19 -10
  60. data/client/lanes/extension/LateLoaded.js.erb +4 -3
  61. data/client/lanes/index.js +3 -5
  62. data/client/lanes/index.scss.erb +6 -14
  63. data/client/lanes/lib/HotReload.coffee +35 -0
  64. data/client/lanes/lib/MakeBaseClass.coffee +10 -11
  65. data/client/lanes/lib/development.coffee +3 -0
  66. data/client/lanes/lib/dom.coffee +49 -0
  67. data/client/lanes/lib/el.coffee +23 -0
  68. data/client/lanes/lib/index.js.erb +16 -0
  69. data/client/lanes/lib/loader.coffee +34 -34
  70. data/client/lanes/lib/namespace.coffee +1 -1
  71. data/client/lanes/lib/objToParam.coffee +37 -0
  72. data/client/lanes/{access/views/.gitkeep → lib/production.coffee} +0 -0
  73. data/client/lanes/lib/utilFunctions.coffee +44 -26
  74. data/client/lanes/models/AssociationMap.coffee +51 -38
  75. data/client/lanes/models/Base.coffee +89 -88
  76. data/client/lanes/models/ChangeMonitor.coffee +10 -10
  77. data/client/lanes/models/ChangeSet.coffee +14 -24
  78. data/client/lanes/models/Collection.coffee +40 -41
  79. data/client/lanes/models/PubSub.coffee +28 -19
  80. data/client/lanes/models/Query.coffee +78 -45
  81. data/client/lanes/models/QueryResults.coffee +93 -0
  82. data/client/lanes/models/ServerCache.coffee +12 -12
  83. data/client/lanes/models/Sync.coffee +53 -50
  84. data/client/lanes/models/User.coffee +31 -17
  85. data/client/lanes/react/Component.coffee +31 -0
  86. data/client/lanes/react/DefaultComponentNotFound.cjsx +9 -0
  87. data/client/lanes/{views → react}/FormBindings.coffee +0 -0
  88. data/client/lanes/{views → react}/ModelObserver.coffee +0 -0
  89. data/client/lanes/{views → react}/ModelUpdate.coffee +0 -0
  90. data/client/lanes/{views → react}/PubSub.coffee +0 -0
  91. data/client/lanes/react/Root.cjsx +14 -0
  92. data/client/lanes/react/Router.cjsx +18 -0
  93. data/client/lanes/react/Screen.coffee +15 -0
  94. data/client/lanes/{views → react}/TimedHighlight.coffee +0 -0
  95. data/client/lanes/{views → react}/TimedMask.coffee +0 -0
  96. data/client/lanes/react/TypeValidators.coffee +21 -0
  97. data/client/lanes/{lib/create-namespace.js → react/Utils.coffee} +0 -0
  98. data/client/lanes/react/Viewport.coffee +30 -0
  99. data/client/lanes/react/index.js +8 -0
  100. data/client/lanes/react/mixins/Access.coffee +27 -0
  101. data/client/lanes/react/mixins/Component.coffee +4 -0
  102. data/client/lanes/react/mixins/Data.coffee +136 -0
  103. data/client/lanes/react/mixins/MonitorSize.coffee +11 -0
  104. data/client/lanes/react/mixins/ReadEditingState.coffee +11 -0
  105. data/client/lanes/react/mixins/RelayEditingState.coffee +17 -0
  106. data/client/lanes/react/mixins/RelayFieldChange.coffee +11 -0
  107. data/client/lanes/react/mixins/Screen.coffee +7 -0
  108. data/client/lanes/react/mixins/Viewport.coffee +11 -0
  109. data/client/lanes/screens/ChangeListener.coffee +3 -3
  110. data/client/lanes/screens/Commands.coffee +27 -0
  111. data/client/lanes/screens/Definitions.coffee +74 -65
  112. data/client/lanes/screens/all.js.erb +1 -1
  113. data/client/lanes/screens/index.js +1 -2
  114. data/client/lanes/screens/mixins/index.js +0 -1
  115. data/client/lanes/screens/register.js.erb +0 -1
  116. data/client/lanes/screens/styles.scss +7 -0
  117. data/client/lanes/styles/bootstrap-custom-grid.scss +67 -37
  118. data/client/lanes/styles/bootstrap.scss +4 -5
  119. data/client/lanes/styles/fonts.scss +10 -23
  120. data/client/lanes/styles/fonts/_animated.scss +34 -0
  121. data/client/lanes/styles/fonts/_bordered-pulled.scss +16 -0
  122. data/client/lanes/styles/fonts/_core.scss +13 -0
  123. data/client/lanes/styles/fonts/_fixed-width.scss +6 -0
  124. data/client/lanes/styles/fonts/_icons.scss +596 -0
  125. data/client/lanes/styles/fonts/_larger.scss +13 -0
  126. data/client/lanes/styles/fonts/_list.scss +19 -0
  127. data/client/lanes/styles/fonts/_mixins.scss +27 -0
  128. data/client/lanes/styles/fonts/_path.scss +10 -0
  129. data/client/lanes/styles/fonts/_rotated-flipped.scss +20 -0
  130. data/client/lanes/styles/fonts/_stacked.scss +20 -0
  131. data/client/lanes/styles/fonts/_variables.scss +606 -0
  132. data/client/lanes/styles/fonts/font-awesome.scss +16 -0
  133. data/client/lanes/styles/fonts/index.scss +2 -0
  134. data/client/lanes/styles/global.scss +2 -0
  135. data/client/lanes/styles/global/fancy-header.scss +14 -0
  136. data/client/lanes/testing/BeforeEach.coffee +15 -40
  137. data/client/lanes/testing/Helpers.coffee +27 -0
  138. data/client/lanes/testing/ModelSaver.coffee +14 -24
  139. data/client/lanes/testing/StubRouter.coffee +27 -0
  140. data/client/lanes/testing/TestObjects.coffee +27 -0
  141. data/client/lanes/testing/index.js +3 -1
  142. data/client/lanes/vendor/base.js +85256 -0
  143. data/client/lanes/vendor/commons.js +20579 -0
  144. data/client/lanes/vendor/development.js +2511 -0
  145. data/client/lanes/vendor/grid.js +6689 -0
  146. data/client/lanes/vendor/grid.scss +387 -0
  147. data/client/lanes/vendor/index.js +3 -0
  148. data/client/lanes/vendor/message-bus.coffee +264 -0
  149. data/client/lanes/vendor/widgets.js +8798 -0
  150. data/client/lanes/vendor/widgets.scss +723 -0
  151. data/client/lanes/workspace/ActiveScreenSwitcher.cjsx +38 -0
  152. data/client/lanes/workspace/Extension.coffee +6 -0
  153. data/client/lanes/workspace/Layout.cjsx +28 -0
  154. data/client/lanes/workspace/Navbar.cjsx +25 -0
  155. data/client/lanes/workspace/ScreenView.cjsx +27 -0
  156. data/client/lanes/workspace/ScreensMenu.cjsx +57 -0
  157. data/client/lanes/workspace/UIState.coffee +17 -16
  158. data/client/lanes/workspace/index.js +7 -2
  159. data/client/lanes/workspace/styles.scss +0 -3
  160. data/client/lanes/workspace/styles/forms.scss +2 -73
  161. data/client/lanes/workspace/styles/header.scss +0 -2
  162. data/client/lanes/workspace/styles/layout.scss +9 -2
  163. data/client/lanes/workspace/styles/screens.scss +0 -59
  164. data/client/lanes/workspace/styles/tabs.scss +16 -15
  165. data/coffeelint.json +49 -0
  166. data/config.ru +1 -0
  167. data/config/database.yml +2 -2
  168. data/config/routes.rb +7 -0
  169. data/docs/command.md +11 -8
  170. data/docs/model.md +2 -5
  171. data/docs/react.md +137 -0
  172. data/lanes.gemspec +1 -0
  173. data/lib/lanes.rb +1 -1
  174. data/lib/lanes/access/authentication_provider.rb +1 -0
  175. data/lib/lanes/access/config/routes.rb +2 -0
  176. data/lib/lanes/access/config/screens.rb +15 -12
  177. data/lib/lanes/access/extension.rb +2 -1
  178. data/lib/lanes/access/role.rb +8 -4
  179. data/lib/lanes/api.rb +4 -3
  180. data/lib/lanes/api/coffeescript_processor.rb +47 -6
  181. data/lib/lanes/api/controller.rb +4 -3
  182. data/lib/lanes/api/default_routes.rb +16 -0
  183. data/lib/lanes/api/javascript_processor.rb +14 -68
  184. data/lib/lanes/api/pub_sub.rb +17 -3
  185. data/lib/lanes/api/request_wrapper.rb +2 -2
  186. data/lib/lanes/api/root.rb +16 -13
  187. data/lib/lanes/api/routing.rb +0 -18
  188. data/lib/lanes/api/sprockets_extension.rb +10 -4
  189. data/lib/lanes/api/test_specs.rb +3 -3
  190. data/lib/lanes/cli.rb +6 -1
  191. data/lib/lanes/command/app.rb +7 -11
  192. data/lib/lanes/command/generate.rb +3 -3
  193. data/lib/lanes/command/generate_component.rb +28 -0
  194. data/lib/lanes/command/generate_component.usage +11 -0
  195. data/lib/lanes/command/generate_screen.rb +24 -7
  196. data/lib/lanes/command/generate_screen.usage +5 -8
  197. data/lib/lanes/configuration.rb +3 -2
  198. data/lib/lanes/extension.rb +12 -18
  199. data/lib/lanes/extension/definition.rb +20 -8
  200. data/lib/lanes/guard_tasks.rb +22 -5
  201. data/lib/lanes/hot_reload_plugin.rb +47 -0
  202. data/lib/lanes/logger.rb +41 -5
  203. data/lib/lanes/screen.rb +40 -16
  204. data/lib/lanes/spec_helper.rb +6 -3
  205. data/lib/lanes/version.rb +1 -1
  206. data/lib/lanes/workspace/extension.rb +1 -0
  207. data/npm-build/{template.js → base.js} +17 -17
  208. data/{client/lanes/workspace/tab.html → npm-build/common.js} +0 -0
  209. data/npm-build/compile.coffee +13 -4
  210. data/npm-build/development.js +7 -0
  211. data/npm-build/grid.js +11 -0
  212. data/npm-build/package.json +62 -58
  213. data/npm-build/react-widgets.js +5 -0
  214. data/npm-build/react-widgets.less +35 -0
  215. data/npm-build/webpack.config.js +39 -0
  216. data/spec/command-reference-files/component/client/appy-app/components/Big.cjsx +4 -0
  217. data/spec/command-reference-files/component/spec/appy-app/components/BigSpec.coffee +5 -0
  218. data/spec/command-reference-files/initial/.rubocop.yml +7 -0
  219. data/spec/command-reference-files/initial/Gemfile +1 -1
  220. data/spec/command-reference-files/initial/client/appy-app/Extension.coffee +17 -5
  221. data/spec/command-reference-files/initial/client/appy-app/components/Base.coffee +9 -0
  222. data/spec/command-reference-files/initial/client/appy-app/index.js +1 -3
  223. data/spec/command-reference-files/initial/client/appy-app/screens/Base.coffee +8 -2
  224. data/spec/command-reference-files/initial/coffeelint.json +49 -0
  225. data/spec/command-reference-files/initial/config.ru +2 -0
  226. data/spec/command-reference-files/initial/config/screens.rb +10 -0
  227. data/spec/command-reference-files/initial/lib/appy-app/extension.rb +7 -0
  228. data/spec/command-reference-files/model/client/appy-app/models/TestTest.coffee +0 -1
  229. data/spec/command-reference-files/screen/client/appy-app/Extension.coffee +34 -0
  230. data/spec/command-reference-files/screen/client/appy-app/screens/ready-set-go/ReadySetGo.cjsx +7 -0
  231. data/spec/command-reference-files/screen/config/screens.rb +19 -9
  232. data/spec/command-reference-files/screen/spec/appy-app/screens/ready-set-go/ReadySetGoSpec.coffee +3 -3
  233. data/spec/lanes/components/grid/GridSpec.coffee +26 -26
  234. data/spec/lanes/models/AssociationMapSpec.coffee +6 -6
  235. data/spec/lanes/models/BaseSpec.coffee +24 -35
  236. data/spec/lanes/models/CollectionSpec.coffee +19 -18
  237. data/spec/lanes/models/EnumMapSpec.coffee +1 -1
  238. data/spec/lanes/models/PubSubSpec.coffee +17 -15
  239. data/spec/lanes/models/SyncSpec.coffee +28 -0
  240. data/spec/lanes/models/UserSpec.coffee +17 -0
  241. data/spec/lanes/react/mixins/DataSpec.coffee +72 -0
  242. data/spec/lanes/screens/DefinitionsSpec.coffee +33 -0
  243. data/spec/lanes/views/BaseSpec.coffee +133 -133
  244. data/spec/lanes/views/FormBindingsSpec.coffee +30 -30
  245. data/spec/server/api/coffeescript_processor_spec.rb +2 -2
  246. data/spec/server/command_spec.rb +3 -3
  247. data/templates/client/Extension.coffee +17 -5
  248. data/templates/client/components/BaseComponent.coffee +9 -0
  249. data/templates/client/components/Component.cjsx +4 -0
  250. data/templates/client/{views → components}/template.html +0 -0
  251. data/templates/client/index.js +1 -3
  252. data/templates/client/models/Model.coffee +0 -1
  253. data/templates/client/screens/BaseScreen.coffee +9 -0
  254. data/templates/client/screens/Screen.cjsx +7 -0
  255. data/templates/config.ru +2 -0
  256. data/templates/config/screen.rb +10 -10
  257. data/templates/config/screens.rb +10 -0
  258. data/templates/lib/namespace/extension.rb +7 -0
  259. data/templates/spec/client/Screen.coffee +4 -4
  260. data/templates/spec/client/components/ComponentSpec.coffee +5 -0
  261. metadata +157 -201
  262. data/client/fonts/lanes/icomoon.eot +0 -0
  263. data/client/fonts/lanes/icomoon.svg +0 -160
  264. data/client/fonts/lanes/icomoon.ttf +0 -0
  265. data/client/fonts/lanes/icomoon.woff +0 -0
  266. data/client/fonts/lanes/selection.json +0 -3565
  267. data/client/lanes/Boot.coffee +0 -50
  268. data/client/lanes/access/LoginDialog.coffee +0 -46
  269. data/client/lanes/access/login-dialog.html +0 -16
  270. data/client/lanes/access/screens/user-management/GridUserEditor.coffee +0 -26
  271. data/client/lanes/access/screens/user-management/UserManagement.coffee +0 -23
  272. data/client/lanes/access/screens/user-management/grid-popover-editor.html +0 -33
  273. data/client/lanes/access/screens/user-management/screen.html +0 -7
  274. data/client/lanes/components/Base.coffee +0 -39
  275. data/client/lanes/components/ChoicesInput.coffee +0 -47
  276. data/client/lanes/components/grid/Editor.coffee +0 -62
  277. data/client/lanes/components/grid/Grid.coffee +0 -205
  278. data/client/lanes/components/grid/PopOverEditor.coffee +0 -29
  279. data/client/lanes/components/grid/RowEditor.coffee +0 -30
  280. data/client/lanes/components/grid/popover-editor.html +0 -18
  281. data/client/lanes/components/grid/row-editor.html +0 -16
  282. data/client/lanes/components/grid/template.html +0 -4
  283. data/client/lanes/components/grid/vendor/dataTables.scroller.js +0 -1262
  284. data/client/lanes/components/grid/vendor/index.js +0 -2
  285. data/client/lanes/components/grid/vendor/jquery.dataTables.js +0 -14839
  286. data/client/lanes/components/modal/ModalDialog.coffee +0 -68
  287. data/client/lanes/components/modal/template.html +0 -18
  288. data/client/lanes/components/multi-select/MultiSelect.coffee +0 -65
  289. data/client/lanes/components/popover/PopOver.coffee +0 -55
  290. data/client/lanes/components/popover/index.js +0 -2
  291. data/client/lanes/components/popover/styles.scss +0 -2
  292. data/client/lanes/components/popover/template.html +0 -5
  293. data/client/lanes/components/radio-group/RadioGroup.coffee +0 -47
  294. data/client/lanes/components/radio-group/index.js +0 -1
  295. data/client/lanes/components/radio-group/styles.scss +0 -1
  296. data/client/lanes/components/record-finder/Clause.coffee +0 -37
  297. data/client/lanes/components/record-finder/Dialog.coffee +0 -45
  298. data/client/lanes/components/record-finder/RecordFinder.coffee +0 -61
  299. data/client/lanes/components/record-finder/clause.html +0 -37
  300. data/client/lanes/components/record-finder/dialog.html +0 -4
  301. data/client/lanes/components/record-finder/field.html +0 -8
  302. data/client/lanes/components/select-field/SelectField.coffee +0 -63
  303. data/client/lanes/components/select2/Select2.coffee +0 -8
  304. data/client/lanes/components/select2/index.js +0 -2
  305. data/client/lanes/lib/Templates.coffee +0 -51
  306. data/client/lanes/lib/debounce.coffee +0 -15
  307. data/client/lanes/lib/defer.coffee +0 -7
  308. data/client/lanes/lib/el.js +0 -115
  309. data/client/lanes/lib/index.js +0 -5
  310. data/client/lanes/plugins/overlay.coffee +0 -41
  311. data/client/lanes/screens/Base.coffee +0 -35
  312. data/client/lanes/screens/Router.coffee +0 -4
  313. data/client/lanes/screens/mixins/Editing.coffee +0 -38
  314. data/client/lanes/styles/bootstrap/old/_alerts.scss +0 -68
  315. data/client/lanes/styles/bootstrap/old/_badges.scss +0 -57
  316. data/client/lanes/styles/bootstrap/old/_breadcrumbs.scss +0 -26
  317. data/client/lanes/styles/bootstrap/old/_button-groups.scss +0 -240
  318. data/client/lanes/styles/bootstrap/old/_buttons.scss +0 -157
  319. data/client/lanes/styles/bootstrap/old/_carousel.scss +0 -243
  320. data/client/lanes/styles/bootstrap/old/_close.scss +0 -35
  321. data/client/lanes/styles/bootstrap/old/_code.scss +0 -68
  322. data/client/lanes/styles/bootstrap/old/_component-animations.scss +0 -35
  323. data/client/lanes/styles/bootstrap/old/_dropdowns.scss +0 -215
  324. data/client/lanes/styles/bootstrap/old/_forms.scss +0 -538
  325. data/client/lanes/styles/bootstrap/old/_glyphicons.scss +0 -237
  326. data/client/lanes/styles/bootstrap/old/_grid.scss +0 -84
  327. data/client/lanes/styles/bootstrap/old/_input-groups.scss +0 -166
  328. data/client/lanes/styles/bootstrap/old/_jumbotron.scss +0 -48
  329. data/client/lanes/styles/bootstrap/old/_labels.scss +0 -66
  330. data/client/lanes/styles/bootstrap/old/_list-group.scss +0 -132
  331. data/client/lanes/styles/bootstrap/old/_media.scss +0 -56
  332. data/client/lanes/styles/bootstrap/old/_mixins.scss +0 -39
  333. data/client/lanes/styles/bootstrap/old/_modals.scss +0 -150
  334. data/client/lanes/styles/bootstrap/old/_navbar.scss +0 -659
  335. data/client/lanes/styles/bootstrap/old/_navs.scss +0 -242
  336. data/client/lanes/styles/bootstrap/old/_normalize.scss +0 -425
  337. data/client/lanes/styles/bootstrap/old/_pager.scss +0 -55
  338. data/client/lanes/styles/bootstrap/old/_pagination.scss +0 -88
  339. data/client/lanes/styles/bootstrap/old/_panels.scss +0 -243
  340. data/client/lanes/styles/bootstrap/old/_popovers.scss +0 -133
  341. data/client/lanes/styles/bootstrap/old/_print.scss +0 -101
  342. data/client/lanes/styles/bootstrap/old/_progress-bars.scss +0 -105
  343. data/client/lanes/styles/bootstrap/old/_responsive-embed.scss +0 -34
  344. data/client/lanes/styles/bootstrap/old/_responsive-utilities.scss +0 -174
  345. data/client/lanes/styles/bootstrap/old/_scaffolding.scss +0 -150
  346. data/client/lanes/styles/bootstrap/old/_tables.scss +0 -233
  347. data/client/lanes/styles/bootstrap/old/_theme.scss +0 -258
  348. data/client/lanes/styles/bootstrap/old/_thumbnails.scss +0 -38
  349. data/client/lanes/styles/bootstrap/old/_tooltip.scss +0 -95
  350. data/client/lanes/styles/bootstrap/old/_type.scss +0 -304
  351. data/client/lanes/styles/bootstrap/old/_utilities.scss +0 -57
  352. data/client/lanes/styles/bootstrap/old/_variables.scss +0 -850
  353. data/client/lanes/styles/bootstrap/old/_wells.scss +0 -29
  354. data/client/lanes/styles/bootstrap/old/bootstrap.scss +0 -50
  355. data/client/lanes/styles/bootstrap/old/mixins/_alerts.scss +0 -14
  356. data/client/lanes/styles/bootstrap/old/mixins/_background-variant.scss +0 -11
  357. data/client/lanes/styles/bootstrap/old/mixins/_border-radius.scss +0 -18
  358. data/client/lanes/styles/bootstrap/old/mixins/_buttons.scss +0 -50
  359. data/client/lanes/styles/bootstrap/old/mixins/_center-block.scss +0 -7
  360. data/client/lanes/styles/bootstrap/old/mixins/_clearfix.scss +0 -22
  361. data/client/lanes/styles/bootstrap/old/mixins/_forms.scss +0 -84
  362. data/client/lanes/styles/bootstrap/old/mixins/_gradients.scss +0 -58
  363. data/client/lanes/styles/bootstrap/old/mixins/_grid-framework.scss +0 -81
  364. data/client/lanes/styles/bootstrap/old/mixins/_grid.scss +0 -122
  365. data/client/lanes/styles/bootstrap/old/mixins/_hide-text.scss +0 -21
  366. data/client/lanes/styles/bootstrap/old/mixins/_image.scss +0 -34
  367. data/client/lanes/styles/bootstrap/old/mixins/_labels.scss +0 -12
  368. data/client/lanes/styles/bootstrap/old/mixins/_list-group.scss +0 -31
  369. data/client/lanes/styles/bootstrap/old/mixins/_nav-divider.scss +0 -10
  370. data/client/lanes/styles/bootstrap/old/mixins/_nav-vertical-align.scss +0 -9
  371. data/client/lanes/styles/bootstrap/old/mixins/_opacity.scss +0 -8
  372. data/client/lanes/styles/bootstrap/old/mixins/_pagination.scss +0 -23
  373. data/client/lanes/styles/bootstrap/old/mixins/_panels.scss +0 -24
  374. data/client/lanes/styles/bootstrap/old/mixins/_progress-bar.scss +0 -10
  375. data/client/lanes/styles/bootstrap/old/mixins/_reset-filter.scss +0 -8
  376. data/client/lanes/styles/bootstrap/old/mixins/_resize.scss +0 -6
  377. data/client/lanes/styles/bootstrap/old/mixins/_responsive-visibility.scss +0 -21
  378. data/client/lanes/styles/bootstrap/old/mixins/_size.scss +0 -10
  379. data/client/lanes/styles/bootstrap/old/mixins/_tab-focus.scss +0 -9
  380. data/client/lanes/styles/bootstrap/old/mixins/_table-row.scss +0 -28
  381. data/client/lanes/styles/bootstrap/old/mixins/_text-emphasis.scss +0 -11
  382. data/client/lanes/styles/bootstrap/old/mixins/_text-overflow.scss +0 -8
  383. data/client/lanes/styles/bootstrap/old/mixins/_vendor-prefixes.scss +0 -219
  384. data/client/lanes/styles/font-definitions.scss +0 -451
  385. data/client/lanes/testing/TestModels.coffee +0 -23
  386. data/client/lanes/vendor/bootstrap/affix.js +0 -162
  387. data/client/lanes/vendor/bootstrap/alert.js +0 -94
  388. data/client/lanes/vendor/bootstrap/button.js +0 -116
  389. data/client/lanes/vendor/bootstrap/carousel.js +0 -240
  390. data/client/lanes/vendor/bootstrap/collapse.js +0 -211
  391. data/client/lanes/vendor/bootstrap/dropdown.js +0 -161
  392. data/client/lanes/vendor/bootstrap/modal.js +0 -324
  393. data/client/lanes/vendor/bootstrap/popover.js +0 -119
  394. data/client/lanes/vendor/bootstrap/scrollspy.js +0 -175
  395. data/client/lanes/vendor/bootstrap/tab.js +0 -153
  396. data/client/lanes/vendor/bootstrap/tooltip.js +0 -478
  397. data/client/lanes/vendor/bootstrap/transition.js +0 -59
  398. data/client/lanes/vendor/message-bus.js +0 -285
  399. data/client/lanes/vendor/modern-stack.js +0 -27
  400. data/client/lanes/vendor/packaged.js +0 -19533
  401. data/client/lanes/views/Assets.coffee +0 -9
  402. data/client/lanes/views/Base.coffee +0 -426
  403. data/client/lanes/views/Functions.coffee +0 -13
  404. data/client/lanes/views/Helpers.coffee +0 -76
  405. data/client/lanes/views/Keys.coffee +0 -59
  406. data/client/lanes/views/RenderContext.coffee +0 -32
  407. data/client/lanes/views/SaveNotify.coffee +0 -32
  408. data/client/lanes/views/Viewport.coffee +0 -18
  409. data/client/lanes/views/_button.html +0 -3
  410. data/client/lanes/views/_toolbar.html +0 -23
  411. data/client/lanes/views/empty-span.html +0 -1
  412. data/client/lanes/views/index.js +0 -2
  413. data/client/lanes/views/model-update.html +0 -15
  414. data/client/lanes/workspace/ActiveScreensSwitcher.coffee +0 -112
  415. data/client/lanes/workspace/Layout.coffee +0 -29
  416. data/client/lanes/workspace/Navbar.coffee +0 -31
  417. data/client/lanes/workspace/Pages.coffee +0 -39
  418. data/client/lanes/workspace/ScreensMenu.coffee +0 -126
  419. data/client/lanes/workspace/WorkspaceView.coffee +0 -8
  420. data/client/lanes/workspace/layout.html +0 -4
  421. data/client/lanes/workspace/menu.html +0 -356
  422. data/client/lanes/workspace/menu_toggle.html +0 -9
  423. data/client/lanes/workspace/navbar.html +0 -17
  424. data/client/lanes/workspace/pages.html +0 -6
  425. data/client/lanes/workspace/screens-menu.html +0 -11
  426. data/client/lanes/workspace/screens-switcher.html +0 -7
  427. data/docs/view.md +0 -292
  428. data/lib/lanes/command/generate_view.rb +0 -38
  429. data/lib/lanes/command/generate_view.usage +0 -13
  430. data/spec/command-reference-files/initial/client/appy-app/Router.coffee +0 -4
  431. data/spec/command-reference-files/initial/client/appy-app/controllers/.gitkeep +0 -0
  432. data/spec/command-reference-files/initial/client/appy-app/views/.gitkeep +0 -0
  433. data/spec/command-reference-files/initial/client/appy-app/views/Base.coffee +0 -5
  434. data/spec/command-reference-files/initial/spec/appy-app/screens/Base.coffee +0 -5
  435. data/spec/command-reference-files/screen/client/appy-app/screens/ready-set-go/ReadySetGo.coffee +0 -6
  436. data/spec/command-reference-files/screen/client/appy-app/screens/ready-set-go/layout.html +0 -3
  437. data/spec/command-reference-files/view/client/appy-app/views/BigView.coffee +0 -10
  438. data/spec/command-reference-files/view/spec/appy-app/views/BigViewSpec.coffee +0 -5
  439. data/templates/client/Router.coffee +0 -4
  440. data/templates/client/components/Component.coffee +0 -1
  441. data/templates/client/screens/Base.coffee +0 -3
  442. data/templates/client/screens/Screen.coffee +0 -11
  443. data/templates/client/screens/layout.html +0 -3
  444. data/templates/client/views/.gitkeep +0 -0
  445. data/templates/client/views/BaseView.coffee +0 -5
  446. data/templates/client/views/View.coffee +0 -10
  447. data/templates/spec/client/views/ViewSpec.coffee +0 -5
@@ -0,0 +1,2511 @@
1
+ webpackJsonp([0],{
2
+
3
+ /***/ 0:
4
+ /***/ function(module, exports, __webpack_require__) {
5
+
6
+ /* WEBPACK VAR INJECTION */(function(global) {var Lanes = ( global.Lanes || (global.Lanes = {}) );
7
+ Lanes.Vendor = ( Lanes.Vendor || {} );
8
+ var React = __webpack_require__(3);
9
+ Lanes.Vendor.ReactTestUtils = React.addons.TestUtils;
10
+ Lanes.Vendor.hotRL = __webpack_require__(31)(function () {
11
+ return __webpack_require__(4)._instancesByReactRootID;
12
+ });
13
+
14
+ /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
15
+
16
+ /***/ },
17
+
18
+ /***/ 3:
19
+ /***/ function(module, exports, __webpack_require__) {
20
+
21
+ module.exports = __webpack_require__(34);
22
+
23
+
24
+ /***/ },
25
+
26
+ /***/ 31:
27
+ /***/ function(module, exports, __webpack_require__) {
28
+
29
+ 'use strict';
30
+
31
+ module.exports = __webpack_require__(184);
32
+
33
+ /***/ },
34
+
35
+ /***/ 34:
36
+ /***/ function(module, exports, __webpack_require__) {
37
+
38
+ /* WEBPACK VAR INJECTION */(function(process) {/**
39
+ * Copyright 2013-2015, Facebook, Inc.
40
+ * All rights reserved.
41
+ *
42
+ * This source code is licensed under the BSD-style license found in the
43
+ * LICENSE file in the root directory of this source tree. An additional grant
44
+ * of patent rights can be found in the PATENTS file in the same directory.
45
+ *
46
+ * @providesModule ReactWithAddons
47
+ */
48
+
49
+ /**
50
+ * This module exists purely in the open source project, and is meant as a way
51
+ * to create a separate standalone build of React. This build has "addons", or
52
+ * functionality we've built and think might be useful but doesn't have a good
53
+ * place to live inside React core.
54
+ */
55
+
56
+ 'use strict';
57
+
58
+ var LinkedStateMixin = __webpack_require__(296);
59
+ var React = __webpack_require__(129);
60
+ var ReactComponentWithPureRenderMixin =
61
+ __webpack_require__(297);
62
+ var ReactCSSTransitionGroup = __webpack_require__(298);
63
+ var ReactFragment = __webpack_require__(299);
64
+ var ReactTransitionGroup = __webpack_require__(300);
65
+ var ReactUpdates = __webpack_require__(47);
66
+
67
+ var cx = __webpack_require__(301);
68
+ var cloneWithProps = __webpack_require__(302);
69
+ var update = __webpack_require__(303);
70
+
71
+ React.addons = {
72
+ CSSTransitionGroup: ReactCSSTransitionGroup,
73
+ LinkedStateMixin: LinkedStateMixin,
74
+ PureRenderMixin: ReactComponentWithPureRenderMixin,
75
+ TransitionGroup: ReactTransitionGroup,
76
+
77
+ batchedUpdates: ReactUpdates.batchedUpdates,
78
+ classSet: cx,
79
+ cloneWithProps: cloneWithProps,
80
+ createFragment: ReactFragment.create,
81
+ update: update
82
+ };
83
+
84
+ if ("production" !== process.env.NODE_ENV) {
85
+ React.addons.Perf = __webpack_require__(304);
86
+ React.addons.TestUtils = __webpack_require__(305);
87
+ }
88
+
89
+ module.exports = React;
90
+
91
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(185)))
92
+
93
+ /***/ },
94
+
95
+ /***/ 184:
96
+ /***/ function(module, exports, __webpack_require__) {
97
+
98
+ 'use strict';
99
+
100
+ var makePatchReactClass = __webpack_require__(437);
101
+
102
+ /**
103
+ * Returns a function that, when invoked, patches a React class with a new
104
+ * version of itself. To patch different classes, pass different IDs.
105
+ */
106
+ module.exports = function makeMakeHot(getRootInstances, React) {
107
+ if (typeof getRootInstances !== 'function') {
108
+ throw new Error('Expected getRootInstances to be a function.');
109
+ }
110
+
111
+ var patchers = {};
112
+
113
+ return function makeHot(NextClass, persistentId) {
114
+ persistentId = persistentId || NextClass.displayName || NextClass.name;
115
+
116
+ if (!persistentId) {
117
+ console.error(
118
+ 'Hot reload is disabled for one of your types. To enable it, pass a ' +
119
+ 'string uniquely identifying this class within this current module ' +
120
+ 'as a second parameter to makeHot.'
121
+ );
122
+ return NextClass;
123
+ }
124
+
125
+ if (!patchers[persistentId]) {
126
+ patchers[persistentId] = makePatchReactClass(getRootInstances, React);
127
+ }
128
+
129
+ var patchReactClass = patchers[persistentId];
130
+ return patchReactClass(NextClass);
131
+ };
132
+ };
133
+
134
+ /***/ },
135
+
136
+ /***/ 296:
137
+ /***/ function(module, exports, __webpack_require__) {
138
+
139
+ /**
140
+ * Copyright 2013-2015, Facebook, Inc.
141
+ * All rights reserved.
142
+ *
143
+ * This source code is licensed under the BSD-style license found in the
144
+ * LICENSE file in the root directory of this source tree. An additional grant
145
+ * of patent rights can be found in the PATENTS file in the same directory.
146
+ *
147
+ * @providesModule LinkedStateMixin
148
+ * @typechecks static-only
149
+ */
150
+
151
+ 'use strict';
152
+
153
+ var ReactLink = __webpack_require__(454);
154
+ var ReactStateSetters = __webpack_require__(455);
155
+
156
+ /**
157
+ * A simple mixin around ReactLink.forState().
158
+ */
159
+ var LinkedStateMixin = {
160
+ /**
161
+ * Create a ReactLink that's linked to part of this component's state. The
162
+ * ReactLink will have the current value of this.state[key] and will call
163
+ * setState() when a change is requested.
164
+ *
165
+ * @param {string} key state key to update. Note: you may want to use keyOf()
166
+ * if you're using Google Closure Compiler advanced mode.
167
+ * @return {ReactLink} ReactLink instance linking to the state.
168
+ */
169
+ linkState: function(key) {
170
+ return new ReactLink(
171
+ this.state[key],
172
+ ReactStateSetters.createStateKeySetter(this, key)
173
+ );
174
+ }
175
+ };
176
+
177
+ module.exports = LinkedStateMixin;
178
+
179
+
180
+ /***/ },
181
+
182
+ /***/ 297:
183
+ /***/ function(module, exports, __webpack_require__) {
184
+
185
+ /**
186
+ * Copyright 2013-2015, Facebook, Inc.
187
+ * All rights reserved.
188
+ *
189
+ * This source code is licensed under the BSD-style license found in the
190
+ * LICENSE file in the root directory of this source tree. An additional grant
191
+ * of patent rights can be found in the PATENTS file in the same directory.
192
+ *
193
+ * @providesModule ReactComponentWithPureRenderMixin
194
+ */
195
+
196
+ 'use strict';
197
+
198
+ var shallowEqual = __webpack_require__(457);
199
+
200
+ /**
201
+ * If your React component's render function is "pure", e.g. it will render the
202
+ * same result given the same props and state, provide this Mixin for a
203
+ * considerable performance boost.
204
+ *
205
+ * Most React components have pure render functions.
206
+ *
207
+ * Example:
208
+ *
209
+ * var ReactComponentWithPureRenderMixin =
210
+ * require('ReactComponentWithPureRenderMixin');
211
+ * React.createClass({
212
+ * mixins: [ReactComponentWithPureRenderMixin],
213
+ *
214
+ * render: function() {
215
+ * return <div className={this.props.className}>foo</div>;
216
+ * }
217
+ * });
218
+ *
219
+ * Note: This only checks shallow equality for props and state. If these contain
220
+ * complex data structures this mixin may have false-negatives for deeper
221
+ * differences. Only mixin to components which have simple props and state, or
222
+ * use `forceUpdate()` when you know deep data structures have changed.
223
+ */
224
+ var ReactComponentWithPureRenderMixin = {
225
+ shouldComponentUpdate: function(nextProps, nextState) {
226
+ return !shallowEqual(this.props, nextProps) ||
227
+ !shallowEqual(this.state, nextState);
228
+ }
229
+ };
230
+
231
+ module.exports = ReactComponentWithPureRenderMixin;
232
+
233
+
234
+ /***/ },
235
+
236
+ /***/ 298:
237
+ /***/ function(module, exports, __webpack_require__) {
238
+
239
+ /**
240
+ * Copyright 2013-2015, Facebook, Inc.
241
+ * All rights reserved.
242
+ *
243
+ * This source code is licensed under the BSD-style license found in the
244
+ * LICENSE file in the root directory of this source tree. An additional grant
245
+ * of patent rights can be found in the PATENTS file in the same directory.
246
+ *
247
+ * @typechecks
248
+ * @providesModule ReactCSSTransitionGroup
249
+ */
250
+
251
+ 'use strict';
252
+
253
+ var React = __webpack_require__(129);
254
+
255
+ var assign = __webpack_require__(294);
256
+
257
+ var ReactTransitionGroup = React.createFactory(
258
+ __webpack_require__(300)
259
+ );
260
+ var ReactCSSTransitionGroupChild = React.createFactory(
261
+ __webpack_require__(456)
262
+ );
263
+
264
+ var ReactCSSTransitionGroup = React.createClass({
265
+ displayName: 'ReactCSSTransitionGroup',
266
+
267
+ propTypes: {
268
+ transitionName: React.PropTypes.string.isRequired,
269
+ transitionAppear: React.PropTypes.bool,
270
+ transitionEnter: React.PropTypes.bool,
271
+ transitionLeave: React.PropTypes.bool
272
+ },
273
+
274
+ getDefaultProps: function() {
275
+ return {
276
+ transitionAppear: false,
277
+ transitionEnter: true,
278
+ transitionLeave: true
279
+ };
280
+ },
281
+
282
+ _wrapChild: function(child) {
283
+ // We need to provide this childFactory so that
284
+ // ReactCSSTransitionGroupChild can receive updates to name, enter, and
285
+ // leave while it is leaving.
286
+ return ReactCSSTransitionGroupChild(
287
+ {
288
+ name: this.props.transitionName,
289
+ appear: this.props.transitionAppear,
290
+ enter: this.props.transitionEnter,
291
+ leave: this.props.transitionLeave
292
+ },
293
+ child
294
+ );
295
+ },
296
+
297
+ render: function() {
298
+ return (
299
+ ReactTransitionGroup(
300
+ assign({}, this.props, {childFactory: this._wrapChild})
301
+ )
302
+ );
303
+ }
304
+ });
305
+
306
+ module.exports = ReactCSSTransitionGroup;
307
+
308
+
309
+ /***/ },
310
+
311
+ /***/ 300:
312
+ /***/ function(module, exports, __webpack_require__) {
313
+
314
+ /**
315
+ * Copyright 2013-2015, Facebook, Inc.
316
+ * All rights reserved.
317
+ *
318
+ * This source code is licensed under the BSD-style license found in the
319
+ * LICENSE file in the root directory of this source tree. An additional grant
320
+ * of patent rights can be found in the PATENTS file in the same directory.
321
+ *
322
+ * @providesModule ReactTransitionGroup
323
+ */
324
+
325
+ 'use strict';
326
+
327
+ var React = __webpack_require__(129);
328
+ var ReactTransitionChildMapping = __webpack_require__(458);
329
+
330
+ var assign = __webpack_require__(294);
331
+ var cloneWithProps = __webpack_require__(302);
332
+ var emptyFunction = __webpack_require__(321);
333
+
334
+ var ReactTransitionGroup = React.createClass({
335
+ displayName: 'ReactTransitionGroup',
336
+
337
+ propTypes: {
338
+ component: React.PropTypes.any,
339
+ childFactory: React.PropTypes.func
340
+ },
341
+
342
+ getDefaultProps: function() {
343
+ return {
344
+ component: 'span',
345
+ childFactory: emptyFunction.thatReturnsArgument
346
+ };
347
+ },
348
+
349
+ getInitialState: function() {
350
+ return {
351
+ children: ReactTransitionChildMapping.getChildMapping(this.props.children)
352
+ };
353
+ },
354
+
355
+ componentWillMount: function() {
356
+ this.currentlyTransitioningKeys = {};
357
+ this.keysToEnter = [];
358
+ this.keysToLeave = [];
359
+ },
360
+
361
+ componentDidMount: function() {
362
+ var initialChildMapping = this.state.children;
363
+ for (var key in initialChildMapping) {
364
+ if (initialChildMapping[key]) {
365
+ this.performAppear(key);
366
+ }
367
+ }
368
+ },
369
+
370
+ componentWillReceiveProps: function(nextProps) {
371
+ var nextChildMapping = ReactTransitionChildMapping.getChildMapping(
372
+ nextProps.children
373
+ );
374
+ var prevChildMapping = this.state.children;
375
+
376
+ this.setState({
377
+ children: ReactTransitionChildMapping.mergeChildMappings(
378
+ prevChildMapping,
379
+ nextChildMapping
380
+ )
381
+ });
382
+
383
+ var key;
384
+
385
+ for (key in nextChildMapping) {
386
+ var hasPrev = prevChildMapping && prevChildMapping.hasOwnProperty(key);
387
+ if (nextChildMapping[key] && !hasPrev &&
388
+ !this.currentlyTransitioningKeys[key]) {
389
+ this.keysToEnter.push(key);
390
+ }
391
+ }
392
+
393
+ for (key in prevChildMapping) {
394
+ var hasNext = nextChildMapping && nextChildMapping.hasOwnProperty(key);
395
+ if (prevChildMapping[key] && !hasNext &&
396
+ !this.currentlyTransitioningKeys[key]) {
397
+ this.keysToLeave.push(key);
398
+ }
399
+ }
400
+
401
+ // If we want to someday check for reordering, we could do it here.
402
+ },
403
+
404
+ componentDidUpdate: function() {
405
+ var keysToEnter = this.keysToEnter;
406
+ this.keysToEnter = [];
407
+ keysToEnter.forEach(this.performEnter);
408
+
409
+ var keysToLeave = this.keysToLeave;
410
+ this.keysToLeave = [];
411
+ keysToLeave.forEach(this.performLeave);
412
+ },
413
+
414
+ performAppear: function(key) {
415
+ this.currentlyTransitioningKeys[key] = true;
416
+
417
+ var component = this.refs[key];
418
+
419
+ if (component.componentWillAppear) {
420
+ component.componentWillAppear(
421
+ this._handleDoneAppearing.bind(this, key)
422
+ );
423
+ } else {
424
+ this._handleDoneAppearing(key);
425
+ }
426
+ },
427
+
428
+ _handleDoneAppearing: function(key) {
429
+ var component = this.refs[key];
430
+ if (component.componentDidAppear) {
431
+ component.componentDidAppear();
432
+ }
433
+
434
+ delete this.currentlyTransitioningKeys[key];
435
+
436
+ var currentChildMapping = ReactTransitionChildMapping.getChildMapping(
437
+ this.props.children
438
+ );
439
+
440
+ if (!currentChildMapping || !currentChildMapping.hasOwnProperty(key)) {
441
+ // This was removed before it had fully appeared. Remove it.
442
+ this.performLeave(key);
443
+ }
444
+ },
445
+
446
+ performEnter: function(key) {
447
+ this.currentlyTransitioningKeys[key] = true;
448
+
449
+ var component = this.refs[key];
450
+
451
+ if (component.componentWillEnter) {
452
+ component.componentWillEnter(
453
+ this._handleDoneEntering.bind(this, key)
454
+ );
455
+ } else {
456
+ this._handleDoneEntering(key);
457
+ }
458
+ },
459
+
460
+ _handleDoneEntering: function(key) {
461
+ var component = this.refs[key];
462
+ if (component.componentDidEnter) {
463
+ component.componentDidEnter();
464
+ }
465
+
466
+ delete this.currentlyTransitioningKeys[key];
467
+
468
+ var currentChildMapping = ReactTransitionChildMapping.getChildMapping(
469
+ this.props.children
470
+ );
471
+
472
+ if (!currentChildMapping || !currentChildMapping.hasOwnProperty(key)) {
473
+ // This was removed before it had fully entered. Remove it.
474
+ this.performLeave(key);
475
+ }
476
+ },
477
+
478
+ performLeave: function(key) {
479
+ this.currentlyTransitioningKeys[key] = true;
480
+
481
+ var component = this.refs[key];
482
+ if (component.componentWillLeave) {
483
+ component.componentWillLeave(this._handleDoneLeaving.bind(this, key));
484
+ } else {
485
+ // Note that this is somewhat dangerous b/c it calls setState()
486
+ // again, effectively mutating the component before all the work
487
+ // is done.
488
+ this._handleDoneLeaving(key);
489
+ }
490
+ },
491
+
492
+ _handleDoneLeaving: function(key) {
493
+ var component = this.refs[key];
494
+
495
+ if (component.componentDidLeave) {
496
+ component.componentDidLeave();
497
+ }
498
+
499
+ delete this.currentlyTransitioningKeys[key];
500
+
501
+ var currentChildMapping = ReactTransitionChildMapping.getChildMapping(
502
+ this.props.children
503
+ );
504
+
505
+ if (currentChildMapping && currentChildMapping.hasOwnProperty(key)) {
506
+ // This entered again before it fully left. Add it again.
507
+ this.performEnter(key);
508
+ } else {
509
+ var newChildren = assign({}, this.state.children);
510
+ delete newChildren[key];
511
+ this.setState({children: newChildren});
512
+ }
513
+ },
514
+
515
+ render: function() {
516
+ // TODO: we could get rid of the need for the wrapper node
517
+ // by cloning a single child
518
+ var childrenToRender = [];
519
+ for (var key in this.state.children) {
520
+ var child = this.state.children[key];
521
+ if (child) {
522
+ // You may need to apply reactive updates to a child as it is leaving.
523
+ // The normal React way to do it won't work since the child will have
524
+ // already been removed. In case you need this behavior you can provide
525
+ // a childFactory function to wrap every child, even the ones that are
526
+ // leaving.
527
+ childrenToRender.push(cloneWithProps(
528
+ this.props.childFactory(child),
529
+ {ref: key, key: key}
530
+ ));
531
+ }
532
+ }
533
+ return React.createElement(
534
+ this.props.component,
535
+ this.props,
536
+ childrenToRender
537
+ );
538
+ }
539
+ });
540
+
541
+ module.exports = ReactTransitionGroup;
542
+
543
+
544
+ /***/ },
545
+
546
+ /***/ 301:
547
+ /***/ function(module, exports, __webpack_require__) {
548
+
549
+ /* WEBPACK VAR INJECTION */(function(process) {/**
550
+ * Copyright 2013-2015, Facebook, Inc.
551
+ * All rights reserved.
552
+ *
553
+ * This source code is licensed under the BSD-style license found in the
554
+ * LICENSE file in the root directory of this source tree. An additional grant
555
+ * of patent rights can be found in the PATENTS file in the same directory.
556
+ *
557
+ * @providesModule cx
558
+ */
559
+
560
+ /**
561
+ * This function is used to mark string literals representing CSS class names
562
+ * so that they can be transformed statically. This allows for modularization
563
+ * and minification of CSS class names.
564
+ *
565
+ * In static_upstream, this function is actually implemented, but it should
566
+ * eventually be replaced with something more descriptive, and the transform
567
+ * that is used in the main stack should be ported for use elsewhere.
568
+ *
569
+ * @param string|object className to modularize, or an object of key/values.
570
+ * In the object case, the values are conditions that
571
+ * determine if the className keys should be included.
572
+ * @param [string ...] Variable list of classNames in the string case.
573
+ * @return string Renderable space-separated CSS className.
574
+ */
575
+
576
+ 'use strict';
577
+ var warning = __webpack_require__(55);
578
+
579
+ var warned = false;
580
+
581
+ function cx(classNames) {
582
+ if ("production" !== process.env.NODE_ENV) {
583
+ ("production" !== process.env.NODE_ENV ? warning(
584
+ warned,
585
+ 'React.addons.classSet will be deprecated in a future version. See ' +
586
+ 'http://fb.me/react-addons-classset'
587
+ ) : null);
588
+ warned = true;
589
+ }
590
+
591
+ if (typeof classNames == 'object') {
592
+ return Object.keys(classNames).filter(function(className) {
593
+ return classNames[className];
594
+ }).join(' ');
595
+ } else {
596
+ return Array.prototype.join.call(arguments, ' ');
597
+ }
598
+ }
599
+
600
+ module.exports = cx;
601
+
602
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(185)))
603
+
604
+ /***/ },
605
+
606
+ /***/ 302:
607
+ /***/ function(module, exports, __webpack_require__) {
608
+
609
+ /* WEBPACK VAR INJECTION */(function(process) {/**
610
+ * Copyright 2013-2015, Facebook, Inc.
611
+ * All rights reserved.
612
+ *
613
+ * This source code is licensed under the BSD-style license found in the
614
+ * LICENSE file in the root directory of this source tree. An additional grant
615
+ * of patent rights can be found in the PATENTS file in the same directory.
616
+ *
617
+ * @typechecks static-only
618
+ * @providesModule cloneWithProps
619
+ */
620
+
621
+ 'use strict';
622
+
623
+ var ReactElement = __webpack_require__(38);
624
+ var ReactPropTransferer = __webpack_require__(460);
625
+
626
+ var keyOf = __webpack_require__(459);
627
+ var warning = __webpack_require__(55);
628
+
629
+ var CHILDREN_PROP = keyOf({children: null});
630
+
631
+ /**
632
+ * Sometimes you want to change the props of a child passed to you. Usually
633
+ * this is to add a CSS class.
634
+ *
635
+ * @param {ReactElement} child child element you'd like to clone
636
+ * @param {object} props props you'd like to modify. className and style will be
637
+ * merged automatically.
638
+ * @return {ReactElement} a clone of child with props merged in.
639
+ */
640
+ function cloneWithProps(child, props) {
641
+ if ("production" !== process.env.NODE_ENV) {
642
+ ("production" !== process.env.NODE_ENV ? warning(
643
+ !child.ref,
644
+ 'You are calling cloneWithProps() on a child with a ref. This is ' +
645
+ 'dangerous because you\'re creating a new child which will not be ' +
646
+ 'added as a ref to its parent.'
647
+ ) : null);
648
+ }
649
+
650
+ var newProps = ReactPropTransferer.mergeProps(props, child.props);
651
+
652
+ // Use `child.props.children` if it is provided.
653
+ if (!newProps.hasOwnProperty(CHILDREN_PROP) &&
654
+ child.props.hasOwnProperty(CHILDREN_PROP)) {
655
+ newProps.children = child.props.children;
656
+ }
657
+
658
+ // The current API doesn't retain _owner and _context, which is why this
659
+ // doesn't use ReactElement.cloneAndReplaceProps.
660
+ return ReactElement.createElement(child.type, newProps);
661
+ }
662
+
663
+ module.exports = cloneWithProps;
664
+
665
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(185)))
666
+
667
+ /***/ },
668
+
669
+ /***/ 303:
670
+ /***/ function(module, exports, __webpack_require__) {
671
+
672
+ /* WEBPACK VAR INJECTION */(function(process) {/**
673
+ * Copyright 2013-2015, Facebook, Inc.
674
+ * All rights reserved.
675
+ *
676
+ * This source code is licensed under the BSD-style license found in the
677
+ * LICENSE file in the root directory of this source tree. An additional grant
678
+ * of patent rights can be found in the PATENTS file in the same directory.
679
+ *
680
+ * @providesModule update
681
+ */
682
+
683
+ /* global hasOwnProperty:true */
684
+
685
+ 'use strict';
686
+
687
+ var assign = __webpack_require__(294);
688
+ var keyOf = __webpack_require__(459);
689
+ var invariant = __webpack_require__(52);
690
+ var hasOwnProperty = {}.hasOwnProperty;
691
+
692
+ function shallowCopy(x) {
693
+ if (Array.isArray(x)) {
694
+ return x.concat();
695
+ } else if (x && typeof x === 'object') {
696
+ return assign(new x.constructor(), x);
697
+ } else {
698
+ return x;
699
+ }
700
+ }
701
+
702
+ var COMMAND_PUSH = keyOf({$push: null});
703
+ var COMMAND_UNSHIFT = keyOf({$unshift: null});
704
+ var COMMAND_SPLICE = keyOf({$splice: null});
705
+ var COMMAND_SET = keyOf({$set: null});
706
+ var COMMAND_MERGE = keyOf({$merge: null});
707
+ var COMMAND_APPLY = keyOf({$apply: null});
708
+
709
+ var ALL_COMMANDS_LIST = [
710
+ COMMAND_PUSH,
711
+ COMMAND_UNSHIFT,
712
+ COMMAND_SPLICE,
713
+ COMMAND_SET,
714
+ COMMAND_MERGE,
715
+ COMMAND_APPLY
716
+ ];
717
+
718
+ var ALL_COMMANDS_SET = {};
719
+
720
+ ALL_COMMANDS_LIST.forEach(function(command) {
721
+ ALL_COMMANDS_SET[command] = true;
722
+ });
723
+
724
+ function invariantArrayCase(value, spec, command) {
725
+ ("production" !== process.env.NODE_ENV ? invariant(
726
+ Array.isArray(value),
727
+ 'update(): expected target of %s to be an array; got %s.',
728
+ command,
729
+ value
730
+ ) : invariant(Array.isArray(value)));
731
+ var specValue = spec[command];
732
+ ("production" !== process.env.NODE_ENV ? invariant(
733
+ Array.isArray(specValue),
734
+ 'update(): expected spec of %s to be an array; got %s. ' +
735
+ 'Did you forget to wrap your parameter in an array?',
736
+ command,
737
+ specValue
738
+ ) : invariant(Array.isArray(specValue)));
739
+ }
740
+
741
+ function update(value, spec) {
742
+ ("production" !== process.env.NODE_ENV ? invariant(
743
+ typeof spec === 'object',
744
+ 'update(): You provided a key path to update() that did not contain one ' +
745
+ 'of %s. Did you forget to include {%s: ...}?',
746
+ ALL_COMMANDS_LIST.join(', '),
747
+ COMMAND_SET
748
+ ) : invariant(typeof spec === 'object'));
749
+
750
+ if (hasOwnProperty.call(spec, COMMAND_SET)) {
751
+ ("production" !== process.env.NODE_ENV ? invariant(
752
+ Object.keys(spec).length === 1,
753
+ 'Cannot have more than one key in an object with %s',
754
+ COMMAND_SET
755
+ ) : invariant(Object.keys(spec).length === 1));
756
+
757
+ return spec[COMMAND_SET];
758
+ }
759
+
760
+ var nextValue = shallowCopy(value);
761
+
762
+ if (hasOwnProperty.call(spec, COMMAND_MERGE)) {
763
+ var mergeObj = spec[COMMAND_MERGE];
764
+ ("production" !== process.env.NODE_ENV ? invariant(
765
+ mergeObj && typeof mergeObj === 'object',
766
+ 'update(): %s expects a spec of type \'object\'; got %s',
767
+ COMMAND_MERGE,
768
+ mergeObj
769
+ ) : invariant(mergeObj && typeof mergeObj === 'object'));
770
+ ("production" !== process.env.NODE_ENV ? invariant(
771
+ nextValue && typeof nextValue === 'object',
772
+ 'update(): %s expects a target of type \'object\'; got %s',
773
+ COMMAND_MERGE,
774
+ nextValue
775
+ ) : invariant(nextValue && typeof nextValue === 'object'));
776
+ assign(nextValue, spec[COMMAND_MERGE]);
777
+ }
778
+
779
+ if (hasOwnProperty.call(spec, COMMAND_PUSH)) {
780
+ invariantArrayCase(value, spec, COMMAND_PUSH);
781
+ spec[COMMAND_PUSH].forEach(function(item) {
782
+ nextValue.push(item);
783
+ });
784
+ }
785
+
786
+ if (hasOwnProperty.call(spec, COMMAND_UNSHIFT)) {
787
+ invariantArrayCase(value, spec, COMMAND_UNSHIFT);
788
+ spec[COMMAND_UNSHIFT].forEach(function(item) {
789
+ nextValue.unshift(item);
790
+ });
791
+ }
792
+
793
+ if (hasOwnProperty.call(spec, COMMAND_SPLICE)) {
794
+ ("production" !== process.env.NODE_ENV ? invariant(
795
+ Array.isArray(value),
796
+ 'Expected %s target to be an array; got %s',
797
+ COMMAND_SPLICE,
798
+ value
799
+ ) : invariant(Array.isArray(value)));
800
+ ("production" !== process.env.NODE_ENV ? invariant(
801
+ Array.isArray(spec[COMMAND_SPLICE]),
802
+ 'update(): expected spec of %s to be an array of arrays; got %s. ' +
803
+ 'Did you forget to wrap your parameters in an array?',
804
+ COMMAND_SPLICE,
805
+ spec[COMMAND_SPLICE]
806
+ ) : invariant(Array.isArray(spec[COMMAND_SPLICE])));
807
+ spec[COMMAND_SPLICE].forEach(function(args) {
808
+ ("production" !== process.env.NODE_ENV ? invariant(
809
+ Array.isArray(args),
810
+ 'update(): expected spec of %s to be an array of arrays; got %s. ' +
811
+ 'Did you forget to wrap your parameters in an array?',
812
+ COMMAND_SPLICE,
813
+ spec[COMMAND_SPLICE]
814
+ ) : invariant(Array.isArray(args)));
815
+ nextValue.splice.apply(nextValue, args);
816
+ });
817
+ }
818
+
819
+ if (hasOwnProperty.call(spec, COMMAND_APPLY)) {
820
+ ("production" !== process.env.NODE_ENV ? invariant(
821
+ typeof spec[COMMAND_APPLY] === 'function',
822
+ 'update(): expected spec of %s to be a function; got %s.',
823
+ COMMAND_APPLY,
824
+ spec[COMMAND_APPLY]
825
+ ) : invariant(typeof spec[COMMAND_APPLY] === 'function'));
826
+ nextValue = spec[COMMAND_APPLY](nextValue);
827
+ }
828
+
829
+ for (var k in spec) {
830
+ if (!(ALL_COMMANDS_SET.hasOwnProperty(k) && ALL_COMMANDS_SET[k])) {
831
+ nextValue[k] = update(value[k], spec[k]);
832
+ }
833
+ }
834
+
835
+ return nextValue;
836
+ }
837
+
838
+ module.exports = update;
839
+
840
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(185)))
841
+
842
+ /***/ },
843
+
844
+ /***/ 305:
845
+ /***/ function(module, exports, __webpack_require__) {
846
+
847
+ /**
848
+ * Copyright 2013-2015, Facebook, Inc.
849
+ * All rights reserved.
850
+ *
851
+ * This source code is licensed under the BSD-style license found in the
852
+ * LICENSE file in the root directory of this source tree. An additional grant
853
+ * of patent rights can be found in the PATENTS file in the same directory.
854
+ *
855
+ * @providesModule ReactTestUtils
856
+ */
857
+
858
+ 'use strict';
859
+
860
+ var EventConstants = __webpack_require__(289);
861
+ var EventPluginHub = __webpack_require__(290);
862
+ var EventPropagators = __webpack_require__(463);
863
+ var React = __webpack_require__(129);
864
+ var ReactElement = __webpack_require__(38);
865
+ var ReactEmptyComponent = __webpack_require__(40);
866
+ var ReactBrowserEventEmitter = __webpack_require__(36);
867
+ var ReactCompositeComponent = __webpack_require__(320);
868
+ var ReactInstanceHandles = __webpack_require__(41);
869
+ var ReactInstanceMap = __webpack_require__(42);
870
+ var ReactMount = __webpack_require__(4);
871
+ var ReactUpdates = __webpack_require__(47);
872
+ var SyntheticEvent = __webpack_require__(464);
873
+
874
+ var assign = __webpack_require__(294);
875
+
876
+ var topLevelTypes = EventConstants.topLevelTypes;
877
+
878
+ function Event(suffix) {}
879
+
880
+ /**
881
+ * @class ReactTestUtils
882
+ */
883
+
884
+ /**
885
+ * Todo: Support the entire DOM.scry query syntax. For now, these simple
886
+ * utilities will suffice for testing purposes.
887
+ * @lends ReactTestUtils
888
+ */
889
+ var ReactTestUtils = {
890
+ renderIntoDocument: function(instance) {
891
+ var div = document.createElement('div');
892
+ // None of our tests actually require attaching the container to the
893
+ // DOM, and doing so creates a mess that we rely on test isolation to
894
+ // clean up, so we're going to stop honoring the name of this method
895
+ // (and probably rename it eventually) if no problems arise.
896
+ // document.documentElement.appendChild(div);
897
+ return React.render(instance, div);
898
+ },
899
+
900
+ isElement: function(element) {
901
+ return ReactElement.isValidElement(element);
902
+ },
903
+
904
+ isElementOfType: function(inst, convenienceConstructor) {
905
+ return (
906
+ ReactElement.isValidElement(inst) &&
907
+ inst.type === convenienceConstructor
908
+ );
909
+ },
910
+
911
+ isDOMComponent: function(inst) {
912
+ // TODO: Fix this heuristic. It's just here because composites can currently
913
+ // pretend to be DOM components.
914
+ return !!(inst && inst.tagName && inst.getDOMNode);
915
+ },
916
+
917
+ isDOMComponentElement: function(inst) {
918
+ return !!(inst &&
919
+ ReactElement.isValidElement(inst) &&
920
+ !!inst.tagName);
921
+ },
922
+
923
+ isCompositeComponent: function(inst) {
924
+ return typeof inst.render === 'function' &&
925
+ typeof inst.setState === 'function';
926
+ },
927
+
928
+ isCompositeComponentWithType: function(inst, type) {
929
+ return !!(ReactTestUtils.isCompositeComponent(inst) &&
930
+ (inst.constructor === type));
931
+ },
932
+
933
+ isCompositeComponentElement: function(inst) {
934
+ if (!ReactElement.isValidElement(inst)) {
935
+ return false;
936
+ }
937
+ // We check the prototype of the type that will get mounted, not the
938
+ // instance itself. This is a future proof way of duck typing.
939
+ var prototype = inst.type.prototype;
940
+ return (
941
+ typeof prototype.render === 'function' &&
942
+ typeof prototype.setState === 'function'
943
+ );
944
+ },
945
+
946
+ isCompositeComponentElementWithType: function(inst, type) {
947
+ return !!(ReactTestUtils.isCompositeComponentElement(inst) &&
948
+ (inst.constructor === type));
949
+ },
950
+
951
+ getRenderedChildOfCompositeComponent: function(inst) {
952
+ if (!ReactTestUtils.isCompositeComponent(inst)) {
953
+ return null;
954
+ }
955
+ var internalInstance = ReactInstanceMap.get(inst);
956
+ return internalInstance._renderedComponent.getPublicInstance();
957
+ },
958
+
959
+ findAllInRenderedTree: function(inst, test) {
960
+ if (!inst) {
961
+ return [];
962
+ }
963
+ var ret = test(inst) ? [inst] : [];
964
+ if (ReactTestUtils.isDOMComponent(inst)) {
965
+ var internalInstance = ReactInstanceMap.get(inst);
966
+ var renderedChildren = internalInstance
967
+ ._renderedComponent
968
+ ._renderedChildren;
969
+ var key;
970
+ for (key in renderedChildren) {
971
+ if (!renderedChildren.hasOwnProperty(key)) {
972
+ continue;
973
+ }
974
+ if (!renderedChildren[key].getPublicInstance) {
975
+ continue;
976
+ }
977
+ ret = ret.concat(
978
+ ReactTestUtils.findAllInRenderedTree(
979
+ renderedChildren[key].getPublicInstance(),
980
+ test
981
+ )
982
+ );
983
+ }
984
+ } else if (ReactTestUtils.isCompositeComponent(inst)) {
985
+ ret = ret.concat(
986
+ ReactTestUtils.findAllInRenderedTree(
987
+ ReactTestUtils.getRenderedChildOfCompositeComponent(inst),
988
+ test
989
+ )
990
+ );
991
+ }
992
+ return ret;
993
+ },
994
+
995
+ /**
996
+ * Finds all instance of components in the rendered tree that are DOM
997
+ * components with the class name matching `className`.
998
+ * @return an array of all the matches.
999
+ */
1000
+ scryRenderedDOMComponentsWithClass: function(root, className) {
1001
+ return ReactTestUtils.findAllInRenderedTree(root, function(inst) {
1002
+ var instClassName = inst.props.className;
1003
+ return ReactTestUtils.isDOMComponent(inst) && (
1004
+ (instClassName && (' ' + instClassName + ' ').indexOf(' ' + className + ' ') !== -1)
1005
+ );
1006
+ });
1007
+ },
1008
+
1009
+ /**
1010
+ * Like scryRenderedDOMComponentsWithClass but expects there to be one result,
1011
+ * and returns that one result, or throws exception if there is any other
1012
+ * number of matches besides one.
1013
+ * @return {!ReactDOMComponent} The one match.
1014
+ */
1015
+ findRenderedDOMComponentWithClass: function(root, className) {
1016
+ var all =
1017
+ ReactTestUtils.scryRenderedDOMComponentsWithClass(root, className);
1018
+ if (all.length !== 1) {
1019
+ throw new Error('Did not find exactly one match ' +
1020
+ '(found: ' + all.length + ') for class:' + className
1021
+ );
1022
+ }
1023
+ return all[0];
1024
+ },
1025
+
1026
+
1027
+ /**
1028
+ * Finds all instance of components in the rendered tree that are DOM
1029
+ * components with the tag name matching `tagName`.
1030
+ * @return an array of all the matches.
1031
+ */
1032
+ scryRenderedDOMComponentsWithTag: function(root, tagName) {
1033
+ return ReactTestUtils.findAllInRenderedTree(root, function(inst) {
1034
+ return ReactTestUtils.isDOMComponent(inst) &&
1035
+ inst.tagName === tagName.toUpperCase();
1036
+ });
1037
+ },
1038
+
1039
+ /**
1040
+ * Like scryRenderedDOMComponentsWithTag but expects there to be one result,
1041
+ * and returns that one result, or throws exception if there is any other
1042
+ * number of matches besides one.
1043
+ * @return {!ReactDOMComponent} The one match.
1044
+ */
1045
+ findRenderedDOMComponentWithTag: function(root, tagName) {
1046
+ var all = ReactTestUtils.scryRenderedDOMComponentsWithTag(root, tagName);
1047
+ if (all.length !== 1) {
1048
+ throw new Error('Did not find exactly one match for tag:' + tagName);
1049
+ }
1050
+ return all[0];
1051
+ },
1052
+
1053
+
1054
+ /**
1055
+ * Finds all instances of components with type equal to `componentType`.
1056
+ * @return an array of all the matches.
1057
+ */
1058
+ scryRenderedComponentsWithType: function(root, componentType) {
1059
+ return ReactTestUtils.findAllInRenderedTree(root, function(inst) {
1060
+ return ReactTestUtils.isCompositeComponentWithType(
1061
+ inst,
1062
+ componentType
1063
+ );
1064
+ });
1065
+ },
1066
+
1067
+ /**
1068
+ * Same as `scryRenderedComponentsWithType` but expects there to be one result
1069
+ * and returns that one result, or throws exception if there is any other
1070
+ * number of matches besides one.
1071
+ * @return {!ReactComponent} The one match.
1072
+ */
1073
+ findRenderedComponentWithType: function(root, componentType) {
1074
+ var all = ReactTestUtils.scryRenderedComponentsWithType(
1075
+ root,
1076
+ componentType
1077
+ );
1078
+ if (all.length !== 1) {
1079
+ throw new Error(
1080
+ 'Did not find exactly one match for componentType:' + componentType
1081
+ );
1082
+ }
1083
+ return all[0];
1084
+ },
1085
+
1086
+ /**
1087
+ * Pass a mocked component module to this method to augment it with
1088
+ * useful methods that allow it to be used as a dummy React component.
1089
+ * Instead of rendering as usual, the component will become a simple
1090
+ * <div> containing any provided children.
1091
+ *
1092
+ * @param {object} module the mock function object exported from a
1093
+ * module that defines the component to be mocked
1094
+ * @param {?string} mockTagName optional dummy root tag name to return
1095
+ * from render method (overrides
1096
+ * module.mockTagName if provided)
1097
+ * @return {object} the ReactTestUtils object (for chaining)
1098
+ */
1099
+ mockComponent: function(module, mockTagName) {
1100
+ mockTagName = mockTagName || module.mockTagName || "div";
1101
+
1102
+ module.prototype.render.mockImplementation(function() {
1103
+ return React.createElement(
1104
+ mockTagName,
1105
+ null,
1106
+ this.props.children
1107
+ );
1108
+ });
1109
+
1110
+ return this;
1111
+ },
1112
+
1113
+ /**
1114
+ * Simulates a top level event being dispatched from a raw event that occured
1115
+ * on an `Element` node.
1116
+ * @param topLevelType {Object} A type from `EventConstants.topLevelTypes`
1117
+ * @param {!Element} node The dom to simulate an event occurring on.
1118
+ * @param {?Event} fakeNativeEvent Fake native event to use in SyntheticEvent.
1119
+ */
1120
+ simulateNativeEventOnNode: function(topLevelType, node, fakeNativeEvent) {
1121
+ fakeNativeEvent.target = node;
1122
+ ReactBrowserEventEmitter.ReactEventListener.dispatchEvent(
1123
+ topLevelType,
1124
+ fakeNativeEvent
1125
+ );
1126
+ },
1127
+
1128
+ /**
1129
+ * Simulates a top level event being dispatched from a raw event that occured
1130
+ * on the `ReactDOMComponent` `comp`.
1131
+ * @param topLevelType {Object} A type from `EventConstants.topLevelTypes`.
1132
+ * @param comp {!ReactDOMComponent}
1133
+ * @param {?Event} fakeNativeEvent Fake native event to use in SyntheticEvent.
1134
+ */
1135
+ simulateNativeEventOnDOMComponent: function(
1136
+ topLevelType,
1137
+ comp,
1138
+ fakeNativeEvent) {
1139
+ ReactTestUtils.simulateNativeEventOnNode(
1140
+ topLevelType,
1141
+ comp.getDOMNode(),
1142
+ fakeNativeEvent
1143
+ );
1144
+ },
1145
+
1146
+ nativeTouchData: function(x, y) {
1147
+ return {
1148
+ touches: [
1149
+ {pageX: x, pageY: y}
1150
+ ]
1151
+ };
1152
+ },
1153
+
1154
+ createRenderer: function() {
1155
+ return new ReactShallowRenderer();
1156
+ },
1157
+
1158
+ Simulate: null,
1159
+ SimulateNative: {}
1160
+ };
1161
+
1162
+ /**
1163
+ * @class ReactShallowRenderer
1164
+ */
1165
+ var ReactShallowRenderer = function() {
1166
+ this._instance = null;
1167
+ };
1168
+
1169
+ ReactShallowRenderer.prototype.getRenderOutput = function() {
1170
+ return (
1171
+ (this._instance && this._instance._renderedComponent &&
1172
+ this._instance._renderedComponent._renderedOutput)
1173
+ || null
1174
+ );
1175
+ };
1176
+
1177
+ var NoopInternalComponent = function(element) {
1178
+ this._renderedOutput = element;
1179
+ this._currentElement = element === null || element === false ?
1180
+ ReactEmptyComponent.emptyElement :
1181
+ element;
1182
+ };
1183
+
1184
+ NoopInternalComponent.prototype = {
1185
+
1186
+ mountComponent: function() {
1187
+ },
1188
+
1189
+ receiveComponent: function(element) {
1190
+ this._renderedOutput = element;
1191
+ this._currentElement = element === null || element === false ?
1192
+ ReactEmptyComponent.emptyElement :
1193
+ element;
1194
+ },
1195
+
1196
+ unmountComponent: function() {
1197
+ }
1198
+
1199
+ };
1200
+
1201
+ var ShallowComponentWrapper = function() { };
1202
+ assign(
1203
+ ShallowComponentWrapper.prototype,
1204
+ ReactCompositeComponent.Mixin, {
1205
+ _instantiateReactComponent: function(element) {
1206
+ return new NoopInternalComponent(element);
1207
+ },
1208
+ _replaceNodeWithMarkupByID: function() {},
1209
+ _renderValidatedComponent:
1210
+ ReactCompositeComponent.Mixin.
1211
+ _renderValidatedComponentWithoutOwnerOrContext
1212
+ }
1213
+ );
1214
+
1215
+ ReactShallowRenderer.prototype.render = function(element, context) {
1216
+ var transaction = ReactUpdates.ReactReconcileTransaction.getPooled();
1217
+ this._render(element, transaction, context);
1218
+ ReactUpdates.ReactReconcileTransaction.release(transaction);
1219
+ };
1220
+
1221
+ ReactShallowRenderer.prototype.unmount = function() {
1222
+ if (this._instance) {
1223
+ this._instance.unmountComponent();
1224
+ }
1225
+ };
1226
+
1227
+ ReactShallowRenderer.prototype._render = function(element, transaction, context) {
1228
+ if (!this._instance) {
1229
+ var rootID = ReactInstanceHandles.createReactRootID();
1230
+ var instance = new ShallowComponentWrapper(element.type);
1231
+ instance.construct(element);
1232
+
1233
+ instance.mountComponent(rootID, transaction, context);
1234
+
1235
+ this._instance = instance;
1236
+ } else {
1237
+ this._instance.receiveComponent(element, transaction, context);
1238
+ }
1239
+ };
1240
+
1241
+ /**
1242
+ * Exports:
1243
+ *
1244
+ * - `ReactTestUtils.Simulate.click(Element/ReactDOMComponent)`
1245
+ * - `ReactTestUtils.Simulate.mouseMove(Element/ReactDOMComponent)`
1246
+ * - `ReactTestUtils.Simulate.change(Element/ReactDOMComponent)`
1247
+ * - ... (All keys from event plugin `eventTypes` objects)
1248
+ */
1249
+ function makeSimulator(eventType) {
1250
+ return function(domComponentOrNode, eventData) {
1251
+ var node;
1252
+ if (ReactTestUtils.isDOMComponent(domComponentOrNode)) {
1253
+ node = domComponentOrNode.getDOMNode();
1254
+ } else if (domComponentOrNode.tagName) {
1255
+ node = domComponentOrNode;
1256
+ }
1257
+
1258
+ var fakeNativeEvent = new Event();
1259
+ fakeNativeEvent.target = node;
1260
+ // We don't use SyntheticEvent.getPooled in order to not have to worry about
1261
+ // properly destroying any properties assigned from `eventData` upon release
1262
+ var event = new SyntheticEvent(
1263
+ ReactBrowserEventEmitter.eventNameDispatchConfigs[eventType],
1264
+ ReactMount.getID(node),
1265
+ fakeNativeEvent
1266
+ );
1267
+ assign(event, eventData);
1268
+ EventPropagators.accumulateTwoPhaseDispatches(event);
1269
+
1270
+ ReactUpdates.batchedUpdates(function() {
1271
+ EventPluginHub.enqueueEvents(event);
1272
+ EventPluginHub.processEventQueue();
1273
+ });
1274
+ };
1275
+ }
1276
+
1277
+ function buildSimulators() {
1278
+ ReactTestUtils.Simulate = {};
1279
+
1280
+ var eventType;
1281
+ for (eventType in ReactBrowserEventEmitter.eventNameDispatchConfigs) {
1282
+ /**
1283
+ * @param {!Element || ReactDOMComponent} domComponentOrNode
1284
+ * @param {?object} eventData Fake event data to use in SyntheticEvent.
1285
+ */
1286
+ ReactTestUtils.Simulate[eventType] = makeSimulator(eventType);
1287
+ }
1288
+ }
1289
+
1290
+ // Rebuild ReactTestUtils.Simulate whenever event plugins are injected
1291
+ var oldInjectEventPluginOrder = EventPluginHub.injection.injectEventPluginOrder;
1292
+ EventPluginHub.injection.injectEventPluginOrder = function() {
1293
+ oldInjectEventPluginOrder.apply(this, arguments);
1294
+ buildSimulators();
1295
+ };
1296
+ var oldInjectEventPlugins = EventPluginHub.injection.injectEventPluginsByName;
1297
+ EventPluginHub.injection.injectEventPluginsByName = function() {
1298
+ oldInjectEventPlugins.apply(this, arguments);
1299
+ buildSimulators();
1300
+ };
1301
+
1302
+ buildSimulators();
1303
+
1304
+ /**
1305
+ * Exports:
1306
+ *
1307
+ * - `ReactTestUtils.SimulateNative.click(Element/ReactDOMComponent)`
1308
+ * - `ReactTestUtils.SimulateNative.mouseMove(Element/ReactDOMComponent)`
1309
+ * - `ReactTestUtils.SimulateNative.mouseIn/ReactDOMComponent)`
1310
+ * - `ReactTestUtils.SimulateNative.mouseOut(Element/ReactDOMComponent)`
1311
+ * - ... (All keys from `EventConstants.topLevelTypes`)
1312
+ *
1313
+ * Note: Top level event types are a subset of the entire set of handler types
1314
+ * (which include a broader set of "synthetic" events). For example, onDragDone
1315
+ * is a synthetic event. Except when testing an event plugin or React's event
1316
+ * handling code specifically, you probably want to use ReactTestUtils.Simulate
1317
+ * to dispatch synthetic events.
1318
+ */
1319
+
1320
+ function makeNativeSimulator(eventType) {
1321
+ return function(domComponentOrNode, nativeEventData) {
1322
+ var fakeNativeEvent = new Event(eventType);
1323
+ assign(fakeNativeEvent, nativeEventData);
1324
+ if (ReactTestUtils.isDOMComponent(domComponentOrNode)) {
1325
+ ReactTestUtils.simulateNativeEventOnDOMComponent(
1326
+ eventType,
1327
+ domComponentOrNode,
1328
+ fakeNativeEvent
1329
+ );
1330
+ } else if (!!domComponentOrNode.tagName) {
1331
+ // Will allow on actual dom nodes.
1332
+ ReactTestUtils.simulateNativeEventOnNode(
1333
+ eventType,
1334
+ domComponentOrNode,
1335
+ fakeNativeEvent
1336
+ );
1337
+ }
1338
+ };
1339
+ }
1340
+
1341
+ var eventType;
1342
+ for (eventType in topLevelTypes) {
1343
+ // Event type is stored as 'topClick' - we transform that to 'click'
1344
+ var convenienceName = eventType.indexOf('top') === 0 ?
1345
+ eventType.charAt(3).toLowerCase() + eventType.substr(4) : eventType;
1346
+ /**
1347
+ * @param {!Element || ReactDOMComponent} domComponentOrNode
1348
+ * @param {?Event} nativeEventData Fake native event to use in SyntheticEvent.
1349
+ */
1350
+ ReactTestUtils.SimulateNative[convenienceName] =
1351
+ makeNativeSimulator(eventType);
1352
+ }
1353
+
1354
+ module.exports = ReactTestUtils;
1355
+
1356
+
1357
+ /***/ },
1358
+
1359
+ /***/ 433:
1360
+ /***/ function(module, exports, __webpack_require__) {
1361
+
1362
+ /**
1363
+ * Copyright 2013-2015, Facebook, Inc.
1364
+ * All rights reserved.
1365
+ *
1366
+ * This source code is licensed under the BSD-style license found in the
1367
+ * LICENSE file in the root directory of this source tree. An additional grant
1368
+ * of patent rights can be found in the PATENTS file in the same directory.
1369
+ *
1370
+ * @providesModule ReactTransitionEvents
1371
+ */
1372
+
1373
+ 'use strict';
1374
+
1375
+ var ExecutionEnvironment = __webpack_require__(319);
1376
+
1377
+ /**
1378
+ * EVENT_NAME_MAP is used to determine which event fired when a
1379
+ * transition/animation ends, based on the style property used to
1380
+ * define that event.
1381
+ */
1382
+ var EVENT_NAME_MAP = {
1383
+ transitionend: {
1384
+ 'transition': 'transitionend',
1385
+ 'WebkitTransition': 'webkitTransitionEnd',
1386
+ 'MozTransition': 'mozTransitionEnd',
1387
+ 'OTransition': 'oTransitionEnd',
1388
+ 'msTransition': 'MSTransitionEnd'
1389
+ },
1390
+
1391
+ animationend: {
1392
+ 'animation': 'animationend',
1393
+ 'WebkitAnimation': 'webkitAnimationEnd',
1394
+ 'MozAnimation': 'mozAnimationEnd',
1395
+ 'OAnimation': 'oAnimationEnd',
1396
+ 'msAnimation': 'MSAnimationEnd'
1397
+ }
1398
+ };
1399
+
1400
+ var endEvents = [];
1401
+
1402
+ function detectEvents() {
1403
+ var testEl = document.createElement('div');
1404
+ var style = testEl.style;
1405
+
1406
+ // On some platforms, in particular some releases of Android 4.x,
1407
+ // the un-prefixed "animation" and "transition" properties are defined on the
1408
+ // style object but the events that fire will still be prefixed, so we need
1409
+ // to check if the un-prefixed events are useable, and if not remove them
1410
+ // from the map
1411
+ if (!('AnimationEvent' in window)) {
1412
+ delete EVENT_NAME_MAP.animationend.animation;
1413
+ }
1414
+
1415
+ if (!('TransitionEvent' in window)) {
1416
+ delete EVENT_NAME_MAP.transitionend.transition;
1417
+ }
1418
+
1419
+ for (var baseEventName in EVENT_NAME_MAP) {
1420
+ var baseEvents = EVENT_NAME_MAP[baseEventName];
1421
+ for (var styleName in baseEvents) {
1422
+ if (styleName in style) {
1423
+ endEvents.push(baseEvents[styleName]);
1424
+ break;
1425
+ }
1426
+ }
1427
+ }
1428
+ }
1429
+
1430
+ if (ExecutionEnvironment.canUseDOM) {
1431
+ detectEvents();
1432
+ }
1433
+
1434
+ // We use the raw {add|remove}EventListener() call because EventListener
1435
+ // does not know how to remove event listeners and we really should
1436
+ // clean up. Also, these events are not triggered in older browsers
1437
+ // so we should be A-OK here.
1438
+
1439
+ function addEventListener(node, eventName, eventListener) {
1440
+ node.addEventListener(eventName, eventListener, false);
1441
+ }
1442
+
1443
+ function removeEventListener(node, eventName, eventListener) {
1444
+ node.removeEventListener(eventName, eventListener, false);
1445
+ }
1446
+
1447
+ var ReactTransitionEvents = {
1448
+ addEndEventListener: function(node, eventListener) {
1449
+ if (endEvents.length === 0) {
1450
+ // If CSS transitions are not supported, trigger an "end animation"
1451
+ // event immediately.
1452
+ window.setTimeout(eventListener, 0);
1453
+ return;
1454
+ }
1455
+ endEvents.forEach(function(endEvent) {
1456
+ addEventListener(node, endEvent, eventListener);
1457
+ });
1458
+ },
1459
+
1460
+ removeEndEventListener: function(node, eventListener) {
1461
+ if (endEvents.length === 0) {
1462
+ return;
1463
+ }
1464
+ endEvents.forEach(function(endEvent) {
1465
+ removeEventListener(node, endEvent, eventListener);
1466
+ });
1467
+ }
1468
+ };
1469
+
1470
+ module.exports = ReactTransitionEvents;
1471
+
1472
+
1473
+ /***/ },
1474
+
1475
+ /***/ 437:
1476
+ /***/ function(module, exports, __webpack_require__) {
1477
+
1478
+ 'use strict';
1479
+
1480
+ var makeAssimilatePrototype = __webpack_require__(530),
1481
+ requestForceUpdateAll = __webpack_require__(531);
1482
+
1483
+ function hasNonStubTypeProperty(ReactClass) {
1484
+ if (!ReactClass.hasOwnProperty('type')) {
1485
+ return false;
1486
+ }
1487
+
1488
+ var descriptor = Object.getOwnPropertyDescriptor(ReactClass, 'type');
1489
+ if (typeof descriptor.get === 'function') {
1490
+ return false;
1491
+ }
1492
+
1493
+ return true;
1494
+ }
1495
+
1496
+ function getPrototype(ReactClass) {
1497
+ var prototype = ReactClass.prototype,
1498
+ seemsLegit = prototype && typeof prototype.render === 'function';
1499
+
1500
+ if (!seemsLegit && hasNonStubTypeProperty(ReactClass)) {
1501
+ prototype = ReactClass.type.prototype;
1502
+ }
1503
+
1504
+ return prototype;
1505
+ }
1506
+
1507
+ /**
1508
+ * Returns a function that will patch React class with new versions of itself
1509
+ * on subsequent invocations. Both legacy and ES6 style classes are supported.
1510
+ */
1511
+ module.exports = function makePatchReactClass(getRootInstances, React) {
1512
+ var assimilatePrototype = makeAssimilatePrototype(),
1513
+ FirstClass = null;
1514
+
1515
+ return function patchReactClass(NextClass) {
1516
+ var nextPrototype = getPrototype(NextClass);
1517
+ assimilatePrototype(nextPrototype);
1518
+
1519
+ if (FirstClass) {
1520
+ requestForceUpdateAll(getRootInstances, React);
1521
+ }
1522
+
1523
+ return FirstClass || (FirstClass = NextClass);
1524
+ };
1525
+ };
1526
+
1527
+ /***/ },
1528
+
1529
+ /***/ 454:
1530
+ /***/ function(module, exports, __webpack_require__) {
1531
+
1532
+ /**
1533
+ * Copyright 2013-2015, Facebook, Inc.
1534
+ * All rights reserved.
1535
+ *
1536
+ * This source code is licensed under the BSD-style license found in the
1537
+ * LICENSE file in the root directory of this source tree. An additional grant
1538
+ * of patent rights can be found in the PATENTS file in the same directory.
1539
+ *
1540
+ * @providesModule ReactLink
1541
+ * @typechecks static-only
1542
+ */
1543
+
1544
+ 'use strict';
1545
+
1546
+ /**
1547
+ * ReactLink encapsulates a common pattern in which a component wants to modify
1548
+ * a prop received from its parent. ReactLink allows the parent to pass down a
1549
+ * value coupled with a callback that, when invoked, expresses an intent to
1550
+ * modify that value. For example:
1551
+ *
1552
+ * React.createClass({
1553
+ * getInitialState: function() {
1554
+ * return {value: ''};
1555
+ * },
1556
+ * render: function() {
1557
+ * var valueLink = new ReactLink(this.state.value, this._handleValueChange);
1558
+ * return <input valueLink={valueLink} />;
1559
+ * },
1560
+ * this._handleValueChange: function(newValue) {
1561
+ * this.setState({value: newValue});
1562
+ * }
1563
+ * });
1564
+ *
1565
+ * We have provided some sugary mixins to make the creation and
1566
+ * consumption of ReactLink easier; see LinkedValueUtils and LinkedStateMixin.
1567
+ */
1568
+
1569
+ var React = __webpack_require__(129);
1570
+
1571
+ /**
1572
+ * @param {*} value current value of the link
1573
+ * @param {function} requestChange callback to request a change
1574
+ */
1575
+ function ReactLink(value, requestChange) {
1576
+ this.value = value;
1577
+ this.requestChange = requestChange;
1578
+ }
1579
+
1580
+ /**
1581
+ * Creates a PropType that enforces the ReactLink API and optionally checks the
1582
+ * type of the value being passed inside the link. Example:
1583
+ *
1584
+ * MyComponent.propTypes = {
1585
+ * tabIndexLink: ReactLink.PropTypes.link(React.PropTypes.number)
1586
+ * }
1587
+ */
1588
+ function createLinkTypeChecker(linkType) {
1589
+ var shapes = {
1590
+ value: typeof linkType === 'undefined' ?
1591
+ React.PropTypes.any.isRequired :
1592
+ linkType.isRequired,
1593
+ requestChange: React.PropTypes.func.isRequired
1594
+ };
1595
+ return React.PropTypes.shape(shapes);
1596
+ }
1597
+
1598
+ ReactLink.PropTypes = {
1599
+ link: createLinkTypeChecker
1600
+ };
1601
+
1602
+ module.exports = ReactLink;
1603
+
1604
+
1605
+ /***/ },
1606
+
1607
+ /***/ 455:
1608
+ /***/ function(module, exports, __webpack_require__) {
1609
+
1610
+ /**
1611
+ * Copyright 2013-2015, Facebook, Inc.
1612
+ * All rights reserved.
1613
+ *
1614
+ * This source code is licensed under the BSD-style license found in the
1615
+ * LICENSE file in the root directory of this source tree. An additional grant
1616
+ * of patent rights can be found in the PATENTS file in the same directory.
1617
+ *
1618
+ * @providesModule ReactStateSetters
1619
+ */
1620
+
1621
+ 'use strict';
1622
+
1623
+ var ReactStateSetters = {
1624
+ /**
1625
+ * Returns a function that calls the provided function, and uses the result
1626
+ * of that to set the component's state.
1627
+ *
1628
+ * @param {ReactCompositeComponent} component
1629
+ * @param {function} funcReturningState Returned callback uses this to
1630
+ * determine how to update state.
1631
+ * @return {function} callback that when invoked uses funcReturningState to
1632
+ * determined the object literal to setState.
1633
+ */
1634
+ createStateSetter: function(component, funcReturningState) {
1635
+ return function(a, b, c, d, e, f) {
1636
+ var partialState = funcReturningState.call(component, a, b, c, d, e, f);
1637
+ if (partialState) {
1638
+ component.setState(partialState);
1639
+ }
1640
+ };
1641
+ },
1642
+
1643
+ /**
1644
+ * Returns a single-argument callback that can be used to update a single
1645
+ * key in the component's state.
1646
+ *
1647
+ * Note: this is memoized function, which makes it inexpensive to call.
1648
+ *
1649
+ * @param {ReactCompositeComponent} component
1650
+ * @param {string} key The key in the state that you should update.
1651
+ * @return {function} callback of 1 argument which calls setState() with
1652
+ * the provided keyName and callback argument.
1653
+ */
1654
+ createStateKeySetter: function(component, key) {
1655
+ // Memoize the setters.
1656
+ var cache = component.__keySetters || (component.__keySetters = {});
1657
+ return cache[key] || (cache[key] = createStateKeySetter(component, key));
1658
+ }
1659
+ };
1660
+
1661
+ function createStateKeySetter(component, key) {
1662
+ // Partial state is allocated outside of the function closure so it can be
1663
+ // reused with every call, avoiding memory allocation when this function
1664
+ // is called.
1665
+ var partialState = {};
1666
+ return function stateKeySetter(value) {
1667
+ partialState[key] = value;
1668
+ component.setState(partialState);
1669
+ };
1670
+ }
1671
+
1672
+ ReactStateSetters.Mixin = {
1673
+ /**
1674
+ * Returns a function that calls the provided function, and uses the result
1675
+ * of that to set the component's state.
1676
+ *
1677
+ * For example, these statements are equivalent:
1678
+ *
1679
+ * this.setState({x: 1});
1680
+ * this.createStateSetter(function(xValue) {
1681
+ * return {x: xValue};
1682
+ * })(1);
1683
+ *
1684
+ * @param {function} funcReturningState Returned callback uses this to
1685
+ * determine how to update state.
1686
+ * @return {function} callback that when invoked uses funcReturningState to
1687
+ * determined the object literal to setState.
1688
+ */
1689
+ createStateSetter: function(funcReturningState) {
1690
+ return ReactStateSetters.createStateSetter(this, funcReturningState);
1691
+ },
1692
+
1693
+ /**
1694
+ * Returns a single-argument callback that can be used to update a single
1695
+ * key in the component's state.
1696
+ *
1697
+ * For example, these statements are equivalent:
1698
+ *
1699
+ * this.setState({x: 1});
1700
+ * this.createStateKeySetter('x')(1);
1701
+ *
1702
+ * Note: this is memoized function, which makes it inexpensive to call.
1703
+ *
1704
+ * @param {string} key The key in the state that you should update.
1705
+ * @return {function} callback of 1 argument which calls setState() with
1706
+ * the provided keyName and callback argument.
1707
+ */
1708
+ createStateKeySetter: function(key) {
1709
+ return ReactStateSetters.createStateKeySetter(this, key);
1710
+ }
1711
+ };
1712
+
1713
+ module.exports = ReactStateSetters;
1714
+
1715
+
1716
+ /***/ },
1717
+
1718
+ /***/ 456:
1719
+ /***/ function(module, exports, __webpack_require__) {
1720
+
1721
+ /* WEBPACK VAR INJECTION */(function(process) {/**
1722
+ * Copyright 2013-2015, Facebook, Inc.
1723
+ * All rights reserved.
1724
+ *
1725
+ * This source code is licensed under the BSD-style license found in the
1726
+ * LICENSE file in the root directory of this source tree. An additional grant
1727
+ * of patent rights can be found in the PATENTS file in the same directory.
1728
+ *
1729
+ * @typechecks
1730
+ * @providesModule ReactCSSTransitionGroupChild
1731
+ */
1732
+
1733
+ 'use strict';
1734
+
1735
+ var React = __webpack_require__(129);
1736
+
1737
+ var CSSCore = __webpack_require__(612);
1738
+ var ReactTransitionEvents = __webpack_require__(433);
1739
+
1740
+ var onlyChild = __webpack_require__(414);
1741
+ var warning = __webpack_require__(55);
1742
+
1743
+ // We don't remove the element from the DOM until we receive an animationend or
1744
+ // transitionend event. If the user screws up and forgets to add an animation
1745
+ // their node will be stuck in the DOM forever, so we detect if an animation
1746
+ // does not start and if it doesn't, we just call the end listener immediately.
1747
+ var TICK = 17;
1748
+ var NO_EVENT_TIMEOUT = 5000;
1749
+
1750
+ var noEventListener = null;
1751
+
1752
+
1753
+ if ("production" !== process.env.NODE_ENV) {
1754
+ noEventListener = function() {
1755
+ ("production" !== process.env.NODE_ENV ? warning(
1756
+ false,
1757
+ 'transition(): tried to perform an animation without ' +
1758
+ 'an animationend or transitionend event after timeout (' +
1759
+ '%sms). You should either disable this ' +
1760
+ 'transition in JS or add a CSS animation/transition.',
1761
+ NO_EVENT_TIMEOUT
1762
+ ) : null);
1763
+ };
1764
+ }
1765
+
1766
+ var ReactCSSTransitionGroupChild = React.createClass({
1767
+ displayName: 'ReactCSSTransitionGroupChild',
1768
+
1769
+ transition: function(animationType, finishCallback) {
1770
+ var node = this.getDOMNode();
1771
+ var className = this.props.name + '-' + animationType;
1772
+ var activeClassName = className + '-active';
1773
+ var noEventTimeout = null;
1774
+
1775
+ var endListener = function(e) {
1776
+ if (e && e.target !== node) {
1777
+ return;
1778
+ }
1779
+ if ("production" !== process.env.NODE_ENV) {
1780
+ clearTimeout(noEventTimeout);
1781
+ }
1782
+
1783
+ CSSCore.removeClass(node, className);
1784
+ CSSCore.removeClass(node, activeClassName);
1785
+
1786
+ ReactTransitionEvents.removeEndEventListener(node, endListener);
1787
+
1788
+ // Usually this optional callback is used for informing an owner of
1789
+ // a leave animation and telling it to remove the child.
1790
+ if (finishCallback) {
1791
+ finishCallback();
1792
+ }
1793
+ };
1794
+
1795
+ ReactTransitionEvents.addEndEventListener(node, endListener);
1796
+
1797
+ CSSCore.addClass(node, className);
1798
+
1799
+ // Need to do this to actually trigger a transition.
1800
+ this.queueClass(activeClassName);
1801
+
1802
+ if ("production" !== process.env.NODE_ENV) {
1803
+ noEventTimeout = setTimeout(noEventListener, NO_EVENT_TIMEOUT);
1804
+ }
1805
+ },
1806
+
1807
+ queueClass: function(className) {
1808
+ this.classNameQueue.push(className);
1809
+
1810
+ if (!this.timeout) {
1811
+ this.timeout = setTimeout(this.flushClassNameQueue, TICK);
1812
+ }
1813
+ },
1814
+
1815
+ flushClassNameQueue: function() {
1816
+ if (this.isMounted()) {
1817
+ this.classNameQueue.forEach(
1818
+ CSSCore.addClass.bind(CSSCore, this.getDOMNode())
1819
+ );
1820
+ }
1821
+ this.classNameQueue.length = 0;
1822
+ this.timeout = null;
1823
+ },
1824
+
1825
+ componentWillMount: function() {
1826
+ this.classNameQueue = [];
1827
+ },
1828
+
1829
+ componentWillUnmount: function() {
1830
+ if (this.timeout) {
1831
+ clearTimeout(this.timeout);
1832
+ }
1833
+ },
1834
+
1835
+ componentWillAppear: function(done) {
1836
+ if (this.props.appear) {
1837
+ this.transition('appear', done);
1838
+ } else {
1839
+ done();
1840
+ }
1841
+ },
1842
+
1843
+ componentWillEnter: function(done) {
1844
+ if (this.props.enter) {
1845
+ this.transition('enter', done);
1846
+ } else {
1847
+ done();
1848
+ }
1849
+ },
1850
+
1851
+ componentWillLeave: function(done) {
1852
+ if (this.props.leave) {
1853
+ this.transition('leave', done);
1854
+ } else {
1855
+ done();
1856
+ }
1857
+ },
1858
+
1859
+ render: function() {
1860
+ return onlyChild(this.props.children);
1861
+ }
1862
+ });
1863
+
1864
+ module.exports = ReactCSSTransitionGroupChild;
1865
+
1866
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(185)))
1867
+
1868
+ /***/ },
1869
+
1870
+ /***/ 458:
1871
+ /***/ function(module, exports, __webpack_require__) {
1872
+
1873
+ /**
1874
+ * Copyright 2013-2015, Facebook, Inc.
1875
+ * All rights reserved.
1876
+ *
1877
+ * This source code is licensed under the BSD-style license found in the
1878
+ * LICENSE file in the root directory of this source tree. An additional grant
1879
+ * of patent rights can be found in the PATENTS file in the same directory.
1880
+ *
1881
+ * @typechecks static-only
1882
+ * @providesModule ReactTransitionChildMapping
1883
+ */
1884
+
1885
+ 'use strict';
1886
+
1887
+ var ReactChildren = __webpack_require__(405);
1888
+ var ReactFragment = __webpack_require__(299);
1889
+
1890
+ var ReactTransitionChildMapping = {
1891
+ /**
1892
+ * Given `this.props.children`, return an object mapping key to child. Just
1893
+ * simple syntactic sugar around ReactChildren.map().
1894
+ *
1895
+ * @param {*} children `this.props.children`
1896
+ * @return {object} Mapping of key to child
1897
+ */
1898
+ getChildMapping: function(children) {
1899
+ if (!children) {
1900
+ return children;
1901
+ }
1902
+ return ReactFragment.extract(ReactChildren.map(children, function(child) {
1903
+ return child;
1904
+ }));
1905
+ },
1906
+
1907
+ /**
1908
+ * When you're adding or removing children some may be added or removed in the
1909
+ * same render pass. We want to show *both* since we want to simultaneously
1910
+ * animate elements in and out. This function takes a previous set of keys
1911
+ * and a new set of keys and merges them with its best guess of the correct
1912
+ * ordering. In the future we may expose some of the utilities in
1913
+ * ReactMultiChild to make this easy, but for now React itself does not
1914
+ * directly have this concept of the union of prevChildren and nextChildren
1915
+ * so we implement it here.
1916
+ *
1917
+ * @param {object} prev prev children as returned from
1918
+ * `ReactTransitionChildMapping.getChildMapping()`.
1919
+ * @param {object} next next children as returned from
1920
+ * `ReactTransitionChildMapping.getChildMapping()`.
1921
+ * @return {object} a key set that contains all keys in `prev` and all keys
1922
+ * in `next` in a reasonable order.
1923
+ */
1924
+ mergeChildMappings: function(prev, next) {
1925
+ prev = prev || {};
1926
+ next = next || {};
1927
+
1928
+ function getValueForKey(key) {
1929
+ if (next.hasOwnProperty(key)) {
1930
+ return next[key];
1931
+ } else {
1932
+ return prev[key];
1933
+ }
1934
+ }
1935
+
1936
+ // For each key of `next`, the list of keys to insert before that key in
1937
+ // the combined list
1938
+ var nextKeysPending = {};
1939
+
1940
+ var pendingKeys = [];
1941
+ for (var prevKey in prev) {
1942
+ if (next.hasOwnProperty(prevKey)) {
1943
+ if (pendingKeys.length) {
1944
+ nextKeysPending[prevKey] = pendingKeys;
1945
+ pendingKeys = [];
1946
+ }
1947
+ } else {
1948
+ pendingKeys.push(prevKey);
1949
+ }
1950
+ }
1951
+
1952
+ var i;
1953
+ var childMapping = {};
1954
+ for (var nextKey in next) {
1955
+ if (nextKeysPending.hasOwnProperty(nextKey)) {
1956
+ for (i = 0; i < nextKeysPending[nextKey].length; i++) {
1957
+ var pendingNextKey = nextKeysPending[nextKey][i];
1958
+ childMapping[nextKeysPending[nextKey][i]] = getValueForKey(
1959
+ pendingNextKey
1960
+ );
1961
+ }
1962
+ }
1963
+ childMapping[nextKey] = getValueForKey(nextKey);
1964
+ }
1965
+
1966
+ // Finally, add the keys which didn't appear before any key in `next`
1967
+ for (i = 0; i < pendingKeys.length; i++) {
1968
+ childMapping[pendingKeys[i]] = getValueForKey(pendingKeys[i]);
1969
+ }
1970
+
1971
+ return childMapping;
1972
+ }
1973
+ };
1974
+
1975
+ module.exports = ReactTransitionChildMapping;
1976
+
1977
+
1978
+ /***/ },
1979
+
1980
+ /***/ 460:
1981
+ /***/ function(module, exports, __webpack_require__) {
1982
+
1983
+ /**
1984
+ * Copyright 2013-2015, Facebook, Inc.
1985
+ * All rights reserved.
1986
+ *
1987
+ * This source code is licensed under the BSD-style license found in the
1988
+ * LICENSE file in the root directory of this source tree. An additional grant
1989
+ * of patent rights can be found in the PATENTS file in the same directory.
1990
+ *
1991
+ * @providesModule ReactPropTransferer
1992
+ */
1993
+
1994
+ 'use strict';
1995
+
1996
+ var assign = __webpack_require__(294);
1997
+ var emptyFunction = __webpack_require__(321);
1998
+ var joinClasses = __webpack_require__(613);
1999
+
2000
+ /**
2001
+ * Creates a transfer strategy that will merge prop values using the supplied
2002
+ * `mergeStrategy`. If a prop was previously unset, this just sets it.
2003
+ *
2004
+ * @param {function} mergeStrategy
2005
+ * @return {function}
2006
+ */
2007
+ function createTransferStrategy(mergeStrategy) {
2008
+ return function(props, key, value) {
2009
+ if (!props.hasOwnProperty(key)) {
2010
+ props[key] = value;
2011
+ } else {
2012
+ props[key] = mergeStrategy(props[key], value);
2013
+ }
2014
+ };
2015
+ }
2016
+
2017
+ var transferStrategyMerge = createTransferStrategy(function(a, b) {
2018
+ // `merge` overrides the first object's (`props[key]` above) keys using the
2019
+ // second object's (`value`) keys. An object's style's existing `propA` would
2020
+ // get overridden. Flip the order here.
2021
+ return assign({}, b, a);
2022
+ });
2023
+
2024
+ /**
2025
+ * Transfer strategies dictate how props are transferred by `transferPropsTo`.
2026
+ * NOTE: if you add any more exceptions to this list you should be sure to
2027
+ * update `cloneWithProps()` accordingly.
2028
+ */
2029
+ var TransferStrategies = {
2030
+ /**
2031
+ * Never transfer `children`.
2032
+ */
2033
+ children: emptyFunction,
2034
+ /**
2035
+ * Transfer the `className` prop by merging them.
2036
+ */
2037
+ className: createTransferStrategy(joinClasses),
2038
+ /**
2039
+ * Transfer the `style` prop (which is an object) by merging them.
2040
+ */
2041
+ style: transferStrategyMerge
2042
+ };
2043
+
2044
+ /**
2045
+ * Mutates the first argument by transferring the properties from the second
2046
+ * argument.
2047
+ *
2048
+ * @param {object} props
2049
+ * @param {object} newProps
2050
+ * @return {object}
2051
+ */
2052
+ function transferInto(props, newProps) {
2053
+ for (var thisKey in newProps) {
2054
+ if (!newProps.hasOwnProperty(thisKey)) {
2055
+ continue;
2056
+ }
2057
+
2058
+ var transferStrategy = TransferStrategies[thisKey];
2059
+
2060
+ if (transferStrategy && TransferStrategies.hasOwnProperty(thisKey)) {
2061
+ transferStrategy(props, thisKey, newProps[thisKey]);
2062
+ } else if (!props.hasOwnProperty(thisKey)) {
2063
+ props[thisKey] = newProps[thisKey];
2064
+ }
2065
+ }
2066
+ return props;
2067
+ }
2068
+
2069
+ /**
2070
+ * ReactPropTransferer are capable of transferring props to another component
2071
+ * using a `transferPropsTo` method.
2072
+ *
2073
+ * @class ReactPropTransferer
2074
+ */
2075
+ var ReactPropTransferer = {
2076
+
2077
+ /**
2078
+ * Merge two props objects using TransferStrategies.
2079
+ *
2080
+ * @param {object} oldProps original props (they take precedence)
2081
+ * @param {object} newProps new props to merge in
2082
+ * @return {object} a new object containing both sets of props merged.
2083
+ */
2084
+ mergeProps: function(oldProps, newProps) {
2085
+ return transferInto(assign({}, oldProps), newProps);
2086
+ }
2087
+
2088
+ };
2089
+
2090
+ module.exports = ReactPropTransferer;
2091
+
2092
+
2093
+ /***/ },
2094
+
2095
+ /***/ 530:
2096
+ /***/ function(module, exports, __webpack_require__) {
2097
+
2098
+ 'use strict';
2099
+
2100
+ /**
2101
+ * Returns a function that establishes the first prototype passed to it
2102
+ * as the "source of truth" and patches its methods on subsequent invocations,
2103
+ * also patching current and previous prototypes to forward calls to it.
2104
+ */
2105
+ module.exports = function makeAssimilatePrototype() {
2106
+ var storedPrototype,
2107
+ knownPrototypes = [];
2108
+
2109
+ function wrapMethod(key) {
2110
+ return function () {
2111
+ if (storedPrototype[key]) {
2112
+ return storedPrototype[key].apply(this, arguments);
2113
+ }
2114
+ };
2115
+ }
2116
+
2117
+ function patchProperty(proto, key) {
2118
+ proto[key] = storedPrototype[key];
2119
+
2120
+ if (typeof proto[key] !== 'function' ||
2121
+ key === 'type' ||
2122
+ key === 'constructor') {
2123
+ return;
2124
+ }
2125
+
2126
+ proto[key] = wrapMethod(key);
2127
+
2128
+ if (storedPrototype[key].isReactClassApproved) {
2129
+ proto[key].isReactClassApproved = storedPrototype[key].isReactClassApproved;
2130
+ }
2131
+
2132
+ if (proto.__reactAutoBindMap && proto.__reactAutoBindMap[key]) {
2133
+ proto.__reactAutoBindMap[key] = proto[key];
2134
+ }
2135
+ }
2136
+
2137
+ function updateStoredPrototype(freshPrototype) {
2138
+ storedPrototype = {};
2139
+
2140
+ Object.getOwnPropertyNames(freshPrototype).forEach(function (key) {
2141
+ storedPrototype[key] = freshPrototype[key];
2142
+ });
2143
+ }
2144
+
2145
+ function reconcileWithStoredPrototypes(freshPrototype) {
2146
+ knownPrototypes.push(freshPrototype);
2147
+ knownPrototypes.forEach(function (proto) {
2148
+ Object.getOwnPropertyNames(storedPrototype).forEach(function (key) {
2149
+ patchProperty(proto, key);
2150
+ });
2151
+ });
2152
+ }
2153
+
2154
+ return function assimilatePrototype(freshPrototype) {
2155
+ if (Object.prototype.hasOwnProperty.call(freshPrototype, '__isAssimilatedByReactHotAPI')) {
2156
+ return;
2157
+ }
2158
+
2159
+ updateStoredPrototype(freshPrototype);
2160
+ reconcileWithStoredPrototypes(freshPrototype);
2161
+ freshPrototype.__isAssimilatedByReactHotAPI = true;
2162
+ };
2163
+ };
2164
+
2165
+ /***/ },
2166
+
2167
+ /***/ 531:
2168
+ /***/ function(module, exports, __webpack_require__) {
2169
+
2170
+ var deepForceUpdate = __webpack_require__(707);
2171
+
2172
+ var isRequestPending = false;
2173
+
2174
+ module.exports = function requestForceUpdateAll(getRootInstances, React) {
2175
+ if (isRequestPending) {
2176
+ return;
2177
+ }
2178
+
2179
+ /**
2180
+ * Forces deep re-render of all mounted React components.
2181
+ * Hat's off to Omar Skalli (@Chetane) for suggesting this approach:
2182
+ * https://gist.github.com/Chetane/9a230a9fdcdca21a4e29
2183
+ */
2184
+ function forceUpdateAll() {
2185
+ isRequestPending = false;
2186
+
2187
+ var rootInstances = getRootInstances(),
2188
+ rootInstance;
2189
+
2190
+ for (var key in rootInstances) {
2191
+ if (rootInstances.hasOwnProperty(key)) {
2192
+ rootInstance = rootInstances[key];
2193
+
2194
+ // `|| rootInstance` for React 0.12 and earlier
2195
+ rootInstance = rootInstance._reactInternalInstance || rootInstance;
2196
+ deepForceUpdate(rootInstance, React);
2197
+ }
2198
+ }
2199
+ }
2200
+
2201
+ setTimeout(forceUpdateAll);
2202
+ };
2203
+
2204
+ /***/ },
2205
+
2206
+ /***/ 612:
2207
+ /***/ function(module, exports, __webpack_require__) {
2208
+
2209
+ /* WEBPACK VAR INJECTION */(function(process) {/**
2210
+ * Copyright 2013-2015, Facebook, Inc.
2211
+ * All rights reserved.
2212
+ *
2213
+ * This source code is licensed under the BSD-style license found in the
2214
+ * LICENSE file in the root directory of this source tree. An additional grant
2215
+ * of patent rights can be found in the PATENTS file in the same directory.
2216
+ *
2217
+ * @providesModule CSSCore
2218
+ * @typechecks
2219
+ */
2220
+
2221
+ var invariant = __webpack_require__(52);
2222
+
2223
+ /**
2224
+ * The CSSCore module specifies the API (and implements most of the methods)
2225
+ * that should be used when dealing with the display of elements (via their
2226
+ * CSS classes and visibility on screen. It is an API focused on mutating the
2227
+ * display and not reading it as no logical state should be encoded in the
2228
+ * display of elements.
2229
+ */
2230
+
2231
+ var CSSCore = {
2232
+
2233
+ /**
2234
+ * Adds the class passed in to the element if it doesn't already have it.
2235
+ *
2236
+ * @param {DOMElement} element the element to set the class on
2237
+ * @param {string} className the CSS className
2238
+ * @return {DOMElement} the element passed in
2239
+ */
2240
+ addClass: function(element, className) {
2241
+ ("production" !== process.env.NODE_ENV ? invariant(
2242
+ !/\s/.test(className),
2243
+ 'CSSCore.addClass takes only a single class name. "%s" contains ' +
2244
+ 'multiple classes.', className
2245
+ ) : invariant(!/\s/.test(className)));
2246
+
2247
+ if (className) {
2248
+ if (element.classList) {
2249
+ element.classList.add(className);
2250
+ } else if (!CSSCore.hasClass(element, className)) {
2251
+ element.className = element.className + ' ' + className;
2252
+ }
2253
+ }
2254
+ return element;
2255
+ },
2256
+
2257
+ /**
2258
+ * Removes the class passed in from the element
2259
+ *
2260
+ * @param {DOMElement} element the element to set the class on
2261
+ * @param {string} className the CSS className
2262
+ * @return {DOMElement} the element passed in
2263
+ */
2264
+ removeClass: function(element, className) {
2265
+ ("production" !== process.env.NODE_ENV ? invariant(
2266
+ !/\s/.test(className),
2267
+ 'CSSCore.removeClass takes only a single class name. "%s" contains ' +
2268
+ 'multiple classes.', className
2269
+ ) : invariant(!/\s/.test(className)));
2270
+
2271
+ if (className) {
2272
+ if (element.classList) {
2273
+ element.classList.remove(className);
2274
+ } else if (CSSCore.hasClass(element, className)) {
2275
+ element.className = element.className
2276
+ .replace(new RegExp('(^|\\s)' + className + '(?:\\s|$)', 'g'), '$1')
2277
+ .replace(/\s+/g, ' ') // multiple spaces to one
2278
+ .replace(/^\s*|\s*$/g, ''); // trim the ends
2279
+ }
2280
+ }
2281
+ return element;
2282
+ },
2283
+
2284
+ /**
2285
+ * Helper to add or remove a class from an element based on a condition.
2286
+ *
2287
+ * @param {DOMElement} element the element to set the class on
2288
+ * @param {string} className the CSS className
2289
+ * @param {*} bool condition to whether to add or remove the class
2290
+ * @return {DOMElement} the element passed in
2291
+ */
2292
+ conditionClass: function(element, className, bool) {
2293
+ return (bool ? CSSCore.addClass : CSSCore.removeClass)(element, className);
2294
+ },
2295
+
2296
+ /**
2297
+ * Tests whether the element has the class specified.
2298
+ *
2299
+ * @param {DOMNode|DOMWindow} element the element to set the class on
2300
+ * @param {string} className the CSS className
2301
+ * @return {boolean} true if the element has the class, false if not
2302
+ */
2303
+ hasClass: function(element, className) {
2304
+ ("production" !== process.env.NODE_ENV ? invariant(
2305
+ !/\s/.test(className),
2306
+ 'CSS.hasClass takes only a single class name.'
2307
+ ) : invariant(!/\s/.test(className)));
2308
+ if (element.classList) {
2309
+ return !!className && element.classList.contains(className);
2310
+ }
2311
+ return (' ' + element.className + ' ').indexOf(' ' + className + ' ') > -1;
2312
+ }
2313
+
2314
+ };
2315
+
2316
+ module.exports = CSSCore;
2317
+
2318
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(185)))
2319
+
2320
+ /***/ },
2321
+
2322
+ /***/ 613:
2323
+ /***/ function(module, exports, __webpack_require__) {
2324
+
2325
+ /**
2326
+ * Copyright 2013-2015, Facebook, Inc.
2327
+ * All rights reserved.
2328
+ *
2329
+ * This source code is licensed under the BSD-style license found in the
2330
+ * LICENSE file in the root directory of this source tree. An additional grant
2331
+ * of patent rights can be found in the PATENTS file in the same directory.
2332
+ *
2333
+ * @providesModule joinClasses
2334
+ * @typechecks static-only
2335
+ */
2336
+
2337
+ 'use strict';
2338
+
2339
+ /**
2340
+ * Combines multiple className strings into one.
2341
+ * http://jsperf.com/joinclasses-args-vs-array
2342
+ *
2343
+ * @param {...?string} classes
2344
+ * @return {string}
2345
+ */
2346
+ function joinClasses(className/*, ... */) {
2347
+ if (!className) {
2348
+ className = '';
2349
+ }
2350
+ var nextClass;
2351
+ var argLength = arguments.length;
2352
+ if (argLength > 1) {
2353
+ for (var ii = 1; ii < argLength; ii++) {
2354
+ nextClass = arguments[ii];
2355
+ if (nextClass) {
2356
+ className = (className ? className + ' ' : '') + nextClass;
2357
+ }
2358
+ }
2359
+ }
2360
+ return className;
2361
+ }
2362
+
2363
+ module.exports = joinClasses;
2364
+
2365
+
2366
+ /***/ },
2367
+
2368
+ /***/ 707:
2369
+ /***/ function(module, exports, __webpack_require__) {
2370
+
2371
+ 'use strict';
2372
+
2373
+ var bindAutoBindMethods = __webpack_require__(782);
2374
+ var traverseRenderedChildren = __webpack_require__(783);
2375
+
2376
+ function setPendingForceUpdate(internalInstance) {
2377
+ if (internalInstance._pendingForceUpdate === false) {
2378
+ internalInstance._pendingForceUpdate = true;
2379
+ }
2380
+ }
2381
+
2382
+ function forceUpdateIfPending(internalInstance, React) {
2383
+ if (internalInstance._pendingForceUpdate === true) {
2384
+ // `|| internalInstance` for React 0.12 and earlier
2385
+ var instance = internalInstance._instance || internalInstance;
2386
+
2387
+ if (instance.forceUpdate) {
2388
+ instance.forceUpdate();
2389
+ } else if (React && React.Component) {
2390
+ React.Component.prototype.forceUpdate.call(instance);
2391
+ }
2392
+ }
2393
+ }
2394
+
2395
+ /**
2396
+ * Updates a React component recursively, so even if children define funky
2397
+ * `shouldComponentUpdate`, they are forced to re-render.
2398
+ * Makes sure that any newly added methods are properly auto-bound.
2399
+ */
2400
+ function deepForceUpdate(internalInstance, React) {
2401
+ traverseRenderedChildren(internalInstance, bindAutoBindMethods);
2402
+ traverseRenderedChildren(internalInstance, setPendingForceUpdate);
2403
+ traverseRenderedChildren(internalInstance, forceUpdateIfPending, React);
2404
+ }
2405
+
2406
+ module.exports = deepForceUpdate;
2407
+
2408
+
2409
+ /***/ },
2410
+
2411
+ /***/ 782:
2412
+ /***/ function(module, exports, __webpack_require__) {
2413
+
2414
+ 'use strict';
2415
+
2416
+ function bindAutoBindMethod(component, method) {
2417
+ var boundMethod = method.bind(component);
2418
+
2419
+ boundMethod.__reactBoundContext = component;
2420
+ boundMethod.__reactBoundMethod = method;
2421
+ boundMethod.__reactBoundArguments = null;
2422
+
2423
+ var componentName = component.constructor.displayName,
2424
+ _bind = boundMethod.bind;
2425
+
2426
+ boundMethod.bind = function (newThis) {
2427
+ var args = Array.prototype.slice.call(arguments, 1);
2428
+ if (newThis !== component && newThis !== null) {
2429
+ console.warn(
2430
+ 'bind(): React component methods may only be bound to the ' +
2431
+ 'component instance. See ' + componentName
2432
+ );
2433
+ } else if (!args.length) {
2434
+ console.warn(
2435
+ 'bind(): You are binding a component method to the component. ' +
2436
+ 'React does this for you automatically in a high-performance ' +
2437
+ 'way, so you can safely remove this call. See ' + componentName
2438
+ );
2439
+ return boundMethod;
2440
+ }
2441
+
2442
+ var reboundMethod = _bind.apply(boundMethod, arguments);
2443
+ reboundMethod.__reactBoundContext = component;
2444
+ reboundMethod.__reactBoundMethod = method;
2445
+ reboundMethod.__reactBoundArguments = args;
2446
+
2447
+ return reboundMethod;
2448
+ };
2449
+
2450
+ return boundMethod;
2451
+ }
2452
+
2453
+ /**
2454
+ * Performs auto-binding similar to how React does it.
2455
+ * Skips already auto-bound methods.
2456
+ * Based on https://github.com/facebook/react/blob/b264372e2b3ad0b0c0c0cc95a2f383e4a1325c3d/src/classic/class/ReactClass.js#L639-L705
2457
+ */
2458
+ module.exports = function bindAutoBindMethods(internalInstance) {
2459
+ var component = typeof internalInstance.getPublicInstance === 'function' ?
2460
+ internalInstance.getPublicInstance() :
2461
+ internalInstance;
2462
+
2463
+ for (var autoBindKey in component.__reactAutoBindMap) {
2464
+ if (!component.__reactAutoBindMap.hasOwnProperty(autoBindKey)) {
2465
+ continue;
2466
+ }
2467
+
2468
+ // Skip already bound methods
2469
+ if (component.hasOwnProperty(autoBindKey) &&
2470
+ component[autoBindKey].__reactBoundContext === component) {
2471
+ continue;
2472
+ }
2473
+
2474
+ var method = component.__reactAutoBindMap[autoBindKey];
2475
+ component[autoBindKey] = bindAutoBindMethod(component, method);
2476
+ }
2477
+ };
2478
+
2479
+ /***/ },
2480
+
2481
+ /***/ 783:
2482
+ /***/ function(module, exports, __webpack_require__) {
2483
+
2484
+ 'use strict';
2485
+
2486
+ function traverseRenderedChildren(internalInstance, callback, argument) {
2487
+ callback(internalInstance, argument);
2488
+
2489
+ if (internalInstance._renderedComponent) {
2490
+ traverseRenderedChildren(
2491
+ internalInstance._renderedComponent,
2492
+ callback,
2493
+ argument
2494
+ );
2495
+ } else {
2496
+ for (var key in internalInstance._renderedChildren) {
2497
+ traverseRenderedChildren(
2498
+ internalInstance._renderedChildren[key],
2499
+ callback,
2500
+ argument
2501
+ );
2502
+ }
2503
+ }
2504
+ }
2505
+
2506
+ module.exports = traverseRenderedChildren;
2507
+
2508
+
2509
+ /***/ }
2510
+
2511
+ });